-
Notifications
You must be signed in to change notification settings - Fork 2
/
curse.ps
executable file
·97 lines (90 loc) · 4.44 KB
/
curse.ps
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
/usr/bin/true pop pop pop % ; exec gsnd -q -dRandomSeed=${RANDOM-$(date +%s)} -- "$0" "$@"
%!PS
% Run with GhostScript: `gsnd -q -- curse.ps 5` or
% `gsnd -q -dNumCurses=5 -dRandomSeed=$((RANDOM)) -- curse.ps`
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Shakespearian Curse Generator -- Based on lists compiled by Jerry Maguire, %
% English teacher at Center Grove High School in Greenwood, Indiana. %
% Public domain implementations by Trevor Stone http://trevorstone.org/curse %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% one-word adjectives
/adjective1 [ (artless) (bawdy) (beslubbering) (bootless) (brazen) (churlish)
(cockered) (clouted) (craven) (currish) (dankish) (dissembling) (distempered)
(droning) (errant) (fawning) (fitful) (fobbing) (froward) (frothy) (gleeking)
(gnarling) (goatish) (gorbellied) (greasy) (grizzled) (haughty) (hideous)
(impertinent) (infectious) (jaded) (jarring) (knavish) (lewd) (loggerheaded)
(lumpish) (mammering) (mangled) (mewling) (paunchy) (peevish) (pernicious)
(prating) (pribbling) (puking) (puny) (purpled) (quailing) (queasy) (rank)
(reeky) (roguish) (roynish) (ruttish) (saucy) (sottish) (spleeny) (spongy)
(surly) (tottering) (unmuzzled) (vacant) (vain) (venomed) (villainous)
(waggish) (wanton) (warped) (wayward) (weedy) (wenching) (whoreson) (yeasty)
] def
% hyphenated adjectives
/adjective2 [ (base-court) (bat-fowling) (beef-witted) (beetle-headed)
(boil-brained) (bunched-backed) (clapper-clawed) (clay-brained)
(common-kissing) (crook-pated) (dismal-dreaming) (dizzy-eyed) (dog-hearted)
(dread-bolted) (earth-vexing) (elf-skinned) (empty-hearted) (evil-eyed)
(eye-offending) (fat-kidneyed) (fen-sucked) (flap-mouthed) (fly-bitten)
(folly-fallen) (fool-born) (full-gorged) (guts-griping) (half-faced)
(hasty-witted) (heavy-handed) (hedge-born) (hell-hated) (horn-mad)
(idle-headed) (ill-breeding) (ill-composed) (ill-nurtured) (iron-witted)
(knotty-pated) (lean-witted) (lily-livered) (mad-bread) (milk-livered)
(motley-minded) (muddy-mettled) (onion-eyed) (pale-hearted) (paper-faced)
(pinch-spotted) (plume-plucked) (pottle-deep) (pox-marked) (raw-boned)
(reeling-ripe) (rough-hewn) (rude-growing) (rug-headed) (rump-fed)
(shag-eared) (shard-borne) (sheep-biting) (shrill-gorged) (spur-galled)
(sour-faced) (swag-bellied) (tardy-gaited) (tickle-brained) (toad-spotted)
(unchin-snouted) (weak-hinged) (weather-bitten) (white-livered)
] def
% nouns
/noun [ (apple-john) (baggage) (barnacle) (bladder) (boar-pig) (bugbear)
(bum-bailey) (canker-blossom) (clack-dish) (clotpole) (coxcomb) (codpiece)
(crutch) (cutpurse) (death-token) (dewberry) (dogfish) (egg-shell)
(flap-dragon) (flax-wench) (flirt-gill) (foot-licker) (fustilarian) (giglet)
(gudgeon) (gull-catcher) (haggard) (harpy) (hedge-pig) (hempseed) (horn-beast)
(hugger-mugger) (jack-a-nape) (jolthead) (lewdster) (lout) (maggot-pie)
(malignancy) (malkin) (malt-worm) (mammet) (manikin) (measle) (minimus)
(minnow) (miscreant) (moldwarp) (mumble-news) (nut-hook) (pantaloon)
(pigeon-egg) (pignut) (puttock) (pumpion) (rabbit-sucker) (rampallion)
(ratsbane) (remnant) (rudesby) (ruffian) (scantling) (scullion) (scut)
(skainsmate) (snipe) (strumpet) (varlot) (vassal) (waterfly) (whey-face)
(whipster) (wagtail) (younker)
] def
/join { 2 dict begin % [str1 str2 ... strn] (_sep_) -- str1_sep_str2_sep_strn
/sep exch def
dup /len exch length def
0 1 index { length add } forall
sep length len 1 sub mul add
/slen exch def
slen string
0 3 2 roll
{
3 copy putinterval
length add
dup slen ne { 2 copy sep putinterval sep length add } if
} forall pop
end } def
/randword { % arr -- arr[rand]
dup rand exch length mod get
} def
/curse {
[(Thou) adjective1 randword adjective2 randword noun randword] ( ) join (!) concatstrings
} def
/promptnum { % -- int
{
(Number of curses: ) print flush
(%lineedit) (r) file dup bytesavailable string readstring pop
{cvi} stopped {pop} {exit} ifelse
} loop
} def
% If run with -dNumCurses=X or -- curse.ps X use that value,
% otherwise prompt the user
/NumCurses where { /NumCurses get } {
/ARGUMENTS where {
/ARGUMENTS get dup length 0 gt { 0 get cvi } { pop promptnum } ifelse
} { promptnum } ifelse
} ifelse
% PostScript default to a fixed seed
/RandomSeed where { /RandomSeed get } { realtime } ifelse srand
% Generate curses and print 'em out
{ curse exec print (\n) print } repeat