0
|
1 ;;; "Flame" program. This has a chequered past.
|
|
2 ;;;
|
|
3 ;;; The original was on a Motorola 286 running Vanilla V.1,
|
|
4 ;;; about 2 years ago. It was couched in terms of a yacc (I think)
|
|
5 ;;; script. I pulled the data out of it and rewrote it as a piece
|
|
6 ;;; of PL/1 on Multics. Now I've moved it into an emacs-lisp
|
|
7 ;;; form. If the original author cares to contact me, I'd
|
|
8 ;;; be very happy to credit you!
|
|
9 ;;;
|
|
10 ;;; Ian G. Batten, Batten@uk.ac.bham.multics
|
|
11 ;;;
|
|
12
|
|
13 (random t)
|
|
14
|
|
15 (defvar sentence
|
|
16 '((how can you say that (statement) \?)
|
|
17 (I can\'t believe how (adjective) you are\.)
|
|
18 (only a (der-term) like you would say that (statement) \.)
|
|
19 ((statement) \, huh\?) (so\, (statement) \?)
|
|
20 ((statement) \, right\?) (I mean\, (sentence))
|
|
21 (don\'t you realise that (statement) \?)
|
|
22 (I firmly believe that (statement) \.)
|
|
23 (let me tell you something\, you (der-term) \, (statement) \.)
|
|
24 (furthermore\, you (der-term) \, (statement) \.)
|
|
25 (I couldn\'t care less about your (thing) \.)
|
|
26 (How can you be so (adjective) \?)
|
|
27 (you make me sick\.)
|
|
28 (it\'s well known that (statement) \.)
|
|
29 ((statement) \.)
|
|
30 (it takes a (group-adj) (der-term) like you to say that (statement) \.)
|
|
31 (I don\'t want to hear about your (thing) \.)
|
|
32 (you\'re always totally wrong\.)
|
|
33 (I\'ve never heard anything as ridiculous as the idea that (statement) \.)
|
|
34 (you must be a real (der-term) to think that (statement) \.)
|
|
35 (you (adjective) (group-adj) (der-term) \!)
|
|
36 (you\'re probably (group-adj) yourself\.)
|
|
37 (you sound like a real (der-term) \.)
|
|
38 (why\, (statement) \!)
|
|
39 (I have many (group-adj) friends\.)
|
|
40 (save the (thing) s\!) (no nukes\!) (ban (thing) s\!)
|
|
41 (I\'ll bet you think that (thing) s are (adjective) \.)
|
|
42 (you know\, (statement) \.)
|
|
43 (your (quality) reminds me of a (thing) \.)
|
|
44 (you have the (quality) of a (der-term) \.)
|
|
45 ((der-term) \!)
|
|
46 ((adjective) (group-adj) (der-term) \!)
|
|
47 (you\'re a typical (group-adj) person\, totally (adjective) \.)
|
|
48 (man\, (sentence))))
|
|
49
|
|
50 (defvar sentence-loop (nconc sentence sentence))
|
|
51
|
|
52
|
|
53 (defvar quality
|
|
54 '((ignorance) (stupidity) (worthlessness)
|
|
55 (prejudice) (lack of intelligence) (lousiness)
|
|
56 (bad grammar) (lousy spelling)
|
|
57 (lack of common decency) (ugliness) (nastiness)
|
|
58 (subtlety) (dishonesty) ((adjective) (quality))))
|
|
59
|
|
60
|
|
61 (defvar quality-loop (nconc quality quality))
|
|
62
|
|
63 (defvar adjective
|
|
64 '((ignorant) (crass) (pathetic) (sick)
|
|
65 (bloated) (malignant) (perverted) (sadistic)
|
|
66 (stupid) (unpleasant) (lousy) (abusive) (bad)
|
|
67 (braindamaged) (selfish) (improper) (nasty)
|
|
68 (disgusting) (foul) (intolerable) (primitive)
|
|
69 (depressing) (dumb) (phoney)
|
|
70 ((adjective) and (adjective))
|
|
71 (as (adjective) as a (thing))))
|
|
72
|
|
73 (defvar adjective-loop (nconc adjective adjective))
|
|
74
|
|
75 (defvar der-term
|
|
76 '(((adjective) (der-term)) (sexist) (fascist)
|
|
77 (weakling) (coward) (beast) (peasant) (racist)
|
|
78 (cretin) (fool) (jerk) (ignoramus) (idiot)
|
|
79 (wanker) (rat) (slimebag) (DAF driver)
|
|
80 (Neanderthal) (sadist) (drunk) (capitalist)
|
|
81 (wimp) (dogmatist) (wally) (maniac)
|
|
82 (whimpering scumbag) (pea brain) (arsehole)
|
|
83 (moron) (goof) (incompetent) (lunkhead) (Nazi)
|
|
84 (SysThug) ((der-term) (der-term))))
|
|
85
|
|
86 (defvar der-term-loop (nconc der-term der-term))
|
|
87
|
|
88
|
|
89 (defvar thing
|
|
90 '(((adjective) (thing)) (computer)
|
|
91 (Honeywell dps8) (whale) (operation)
|
|
92 (sexist joke) (ten-incher) (dog) (MicroVAX II)
|
|
93 (source license) (real-time clock)
|
|
94 (mental problem) (sexual fantasy)
|
|
95 (venereal disease) (Jewish grandmother)
|
|
96 (cardboard cut-out) (punk haircut) (surfboard)
|
|
97 (system call) (wood-burning stove)
|
|
98 (graphics editor) (right wing death squad)
|
|
99 (disease) (vegetable) (religion)
|
|
100 (cruise missile) (bug fix) (lawyer) (copyright)
|
|
101 (PAD)))
|
|
102
|
|
103 (defvar thing-loop (nconc thing thing))
|
|
104
|
|
105
|
|
106 (defvar group-adj
|
|
107 '((gay) (old) (lesbian) (young) (black)
|
|
108 (Polish) ((adjective)) (white)
|
|
109 (mentally retarded) (Nicaraguan) (homosexual)
|
|
110 (dead) (underpriviledged) (religious)
|
|
111 ((thing) \-loving) (feminist) (foreign)
|
|
112 (intellectual) (crazy) (working) (unborn)
|
|
113 (Chinese) (short) ((adjective)) (poor) (rich)
|
|
114 (funny-looking) (Puerto Rican) (Mexican)
|
|
115 (Italian) (communist) (fascist) (Iranian)
|
|
116 (Moonie)))
|
|
117
|
|
118 (defvar group-adj-loop (nconc group-adj group-adj))
|
|
119
|
|
120 (defvar statement
|
|
121 '((your (thing) is great) ((thing) s are fun)
|
|
122 ((person) is a (der-term))
|
|
123 ((group-adj) people are (adjective))
|
|
124 (every (group-adj) person is a (der-term))
|
|
125 (most (group-adj) people have (thing) s)
|
|
126 (all (group-adj) dudes should get (thing) s)
|
|
127 ((person) is (group-adj)) (trees are (adjective))
|
|
128 (if you\'ve seen one (thing) \, you\'ve seen them all)
|
|
129 (you\'re (group-adj)) (you have a (thing))
|
|
130 (my (thing) is pretty good)
|
|
131 (the Martians are coming)
|
|
132 (the (paper) is always right)
|
|
133 (just because you read it in the (paper) that doesn\'t mean it\'s true)
|
|
134 ((person) was (group-adj))
|
|
135 ((person) \'s ghost is living in your (thing))
|
|
136 (you look like a (thing))
|
|
137 (the oceans are full of dirty fish)
|
|
138 (people are dying every day)
|
|
139 (a (group-adj) man ain\'t got nothing in the world these days)
|
|
140 (women are inherently superior to men)
|
|
141 (the system staff is fascist)
|
|
142 (there is life after death)
|
|
143 (the world is full of (der-term) s)
|
|
144 (you remind me of (person)) (technology is evil)
|
|
145 ((person) killed (person))
|
|
146 (the Russians are tapping your phone)
|
|
147 (the Earth is flat)
|
|
148 (it\'s OK to run down (group-adj) people)
|
|
149 (Multics is a really (adjective) operating system)
|
|
150 (the CIA killed (person))
|
|
151 (the sexual revolution is over)
|
|
152 (Lassie was (group-adj))
|
|
153 (the (group-adj) people have really got it all together)
|
|
154 (I was (person) in a previous life)
|
|
155 (breathing causes cancer)
|
|
156 (it\'s fun to be really (adjective))
|
|
157 ((quality) is pretty fun) (you\'re a (der-term))
|
|
158 (the (group-adj) culture is fascinating)
|
|
159 (when ya gotta go ya gotta go)
|
|
160 ((person) is (adjective))
|
|
161 ((person) \'s (quality) is (adjective))
|
|
162 (it\'s a wonderful day)
|
|
163 (everything is really a (thing))
|
|
164 (there\'s a (thing) in (person) \'s brain)
|
|
165 ((person) is a cool dude)
|
|
166 ((person) is just a figment of your imagination)
|
|
167 (the more (thing) s you have, the better)
|
|
168 (life is a (thing)) (life is (quality))
|
|
169 ((person) is (adjective))
|
|
170 ((group-adj) people are all (adjective) (der-term) s)
|
|
171 ((statement) \, and (statement))
|
|
172 ((statement) \, but (statement))
|
|
173 (I wish I had a (thing))
|
|
174 (you should have a (thing))
|
|
175 (you hope that (statement))
|
|
176 ((person) is secretly (group-adj))
|
|
177 (you wish you were (group-adj))
|
|
178 (you wish you were a (thing))
|
|
179 (I wish I were a (thing))
|
|
180 (you think that (statement))
|
|
181 ((statement) \, because (statement))
|
|
182 ((group-adj) people don\'t get married to (group-adj) people because (reason))
|
|
183 ((group-adj) people are all (adjective) because (reason))
|
|
184 ((group-adj) people are (adjective) \, and (reason))
|
|
185 (you must be a (adjective) (der-term) to think that (person) said (statement))
|
|
186 ((group-adj) people are inherently superior to (group-adj) people)
|
|
187 (God is Dead)))
|
|
188
|
|
189 (defvar statement-loop (nconc statement statement))
|
|
190
|
|
191
|
|
192 (defvar paper
|
|
193 '((Daily Mail) (Daily Express)
|
|
194 (Centre Bulletin) (Sun) (Daily Mirror) (Pravda)
|
|
195 (Daily Telegraph) (Beano) (Multics Manual)))
|
|
196
|
|
197 (defvar paper-loop (nconc paper paper))
|
|
198
|
|
199
|
|
200 (defvar person
|
|
201 '((Reagan) (Ken Thompson) (Dennis Ritchie)
|
|
202 (JFK) (the Pope) (Gadaffi) (Napoleon)
|
|
203 (Karl Marx) (Groucho) (Michael Jackson)
|
|
204 (Caesar) (Nietzsche) (Heidegger) (\"Head-for-the-mountains\" Bush)
|
|
205 (Henry Kissinger) (Nixon) (Castro) (Thatcher)
|
|
206 (Attilla the Hun) (Alaric the Visigoth) (Hitler)))
|
|
207
|
|
208 (defvar person-loop (nconc person person))
|
|
209
|
|
210 (defvar reason
|
|
211 '((they don\'t want their children to grow up to be too lazy to steal)
|
|
212 (they can\'t tell them apart from (group-adj) dudes)
|
|
213 (they\'re too (adjective))
|
|
214 ((person) wouldn\'t have done it)
|
|
215 (they can\'t spray paint that small)
|
|
216 (they don\'t have (thing) s) (they don\'t know how)
|
|
217 (they can\'t afford (thing) s)))
|
|
218
|
|
219 (defvar reason-loop (nconc reason reason))
|
|
220
|
|
221 (defmacro define-element (name)
|
|
222 (let ((loop-to-use (intern (concat name "-loop"))))
|
|
223 (` (defun (, (intern name)) nil
|
|
224 (let ((step-forward (random 10)))
|
|
225 (if (< step-forward 0) (setq step-forward (- step-forward)))
|
|
226 (prog1
|
|
227 (nth step-forward (, loop-to-use))
|
|
228 (setq (, loop-to-use) (nthcdr (1+ step-forward) (, loop-to-use)))))))))
|
|
229
|
|
230 (define-element "sentence")
|
|
231 (define-element "quality")
|
|
232 (define-element "adjective")
|
|
233 (define-element "der-term")
|
|
234 (define-element "group-adj")
|
|
235 (define-element "statement")
|
|
236 (define-element "thing")
|
|
237 (define-element "paper")
|
|
238 (define-element "person")
|
|
239 (define-element "reason")
|
|
240
|
|
241 (defun *flame nil
|
|
242 (flame-expand '(sentence)))
|
|
243
|
|
244 (defun flame-expand (object)
|
|
245 (cond ((atom object)
|
|
246 object)
|
|
247 (t (mapcar 'flame-expand (funcall (car object))))))
|
|
248
|
|
249 (defun flatten (list)
|
|
250 (cond ((atom list)
|
|
251 (list list))
|
|
252 (t (apply 'append (mapcar 'flatten list)))))
|
|
253
|
|
254 ;;;###autoload
|
|
255 (defun flame (arg)
|
|
256 "Generate ARG (default 1) sentences of half-crazed gibberish."
|
|
257 (interactive "p")
|
|
258 (let ((w (selected-window)))
|
|
259 (pop-to-buffer (get-buffer-create "*Flame*"))
|
|
260 (goto-char (point-max))
|
|
261 (insert ?\n)
|
|
262 (flame2 arg)
|
|
263 (select-window w)))
|
|
264
|
|
265 (defun flame2 (arg)
|
|
266 (let ((start (point)))
|
|
267 (flame1 arg)
|
|
268 (fill-region-as-paragraph start (point) t)))
|
|
269
|
|
270 (defun flame1 (arg)
|
|
271 (cond ((zerop arg) t)
|
|
272 (t (insert (concat (sentence-ify (string-ify (append-suffixes-hack (flatten (*flame)))))))
|
|
273 (flame1 (1- arg)))))
|
|
274
|
|
275 (defun sentence-ify (string)
|
|
276 (concat (upcase (substring string 0 1))
|
|
277 (substring string 1 (length string))
|
|
278 " "))
|
|
279
|
|
280 (defun string-ify (list)
|
|
281 (mapconcat
|
|
282 'symbol-name
|
|
283 ; '(lambda (x)
|
|
284 ; (format "%s" x))
|
|
285 list
|
|
286 " "))
|
|
287
|
|
288 (defun append-suffixes-hack (list)
|
|
289 (cond ((null list)
|
|
290 nil)
|
|
291 ((memq (nth 1 list)
|
|
292 '(\? \. \, s\! \! s \'s \-loving))
|
|
293 (cons (intern (concat (symbol-name (nth 0 list))
|
|
294 (symbol-name (nth 1 list))))
|
|
295 ;;(intern (format "%s%s" (nth 0 list) (nth 1 list)))
|
|
296 (append-suffixes-hack (nthcdr 2 list))))
|
|
297 (t (cons (nth 0 list)
|
|
298 (append-suffixes-hack (nthcdr 1 list))))))
|
|
299
|
|
300 (defun psychoanalyze-flamer ()
|
|
301 "Mr. Angry goes to the analyst."
|
|
302 (interactive)
|
|
303 (doctor) ; start the psychotherapy
|
|
304 (message "")
|
|
305 (switch-to-buffer "*doctor*")
|
|
306 (sit-for 0)
|
|
307 (while (not (input-pending-p))
|
|
308 (flame2 (if (= (random 2) 0) 2 1))
|
|
309 (sit-for 0)
|
|
310 (doctor-ret-or-read 1)))
|