996
|
1 // This is beer.doc. Strip out all comments to have a valid INTERCAL
|
|
2 // program beer.i that prints out the complete lyrics to 99 Bottles of Beer
|
|
3 // on the Wall. The string arrays were computed by a 115 line perl
|
|
4 // program.
|
|
5 // It cops out and relies on the standard library routines for
|
|
6 // addition and subtraction to do the x++ operation.
|
|
7 // -Matt DiMeo
|
|
8 // -mdimeo@brooktree.com
|
|
9
|
|
10 // ,10 is a bare newline from scratch.
|
|
11 PLEASE DO ,10 <- #1
|
|
12 PLEASE DO ,10SUB#1 <- #176
|
|
13 // ,11 is bottles of beer on the wall,
|
|
14 PLEASE DO ,11 <- #30
|
|
15 PLEASE DO ,11SUB#1 <- #76
|
|
16 DO ,11SUB#2 <- #190
|
|
17 DO ,11SUB#3 <- #80
|
|
18 DO ,11SUB#4 <- #200
|
|
19 PLEASE DO ,11SUB#5 <- #256
|
|
20 DO ,11SUB#6 <- #248
|
|
21 DO ,11SUB#7 <- #144
|
|
22 DO ,11SUB#8 <- #216
|
|
23 PLEASE DO ,11SUB#9 <- #202
|
|
24 DO ,11SUB#10 <- #14
|
|
25 DO ,11SUB#11 <- #144
|
|
26 DO ,11SUB#12 <- #98
|
|
27 PLEASE DO ,11SUB#13 <- #190
|
|
28 DO ,11SUB#14 <- #160
|
|
29 DO ,11SUB#15 <- #256
|
|
30 DO ,11SUB#16 <- #88
|
|
31 PLEASE DO ,11SUB#17 <- #74
|
|
32 DO ,11SUB#18 <- #14
|
|
33 DO ,11SUB#19 <- #128
|
|
34 DO ,11SUB#20 <- #114
|
|
35 PLEASE DO ,11SUB#21 <- #214
|
|
36 DO ,11SUB#22 <- #24
|
|
37 DO ,11SUB#23 <- #112
|
|
38 DO ,11SUB#24 <- #162
|
|
39 PLEASE DO ,11SUB#25 <- #22
|
|
40 DO ,11SUB#26 <- #104
|
|
41 DO ,11SUB#27 <- #80
|
|
42 DO ,11SUB#28 <- #256
|
|
43 PLEASE DO ,11SUB#29 <- #2
|
|
44 DO ,11SUB#30 <- #228
|
|
45 // ,12 is bottles of beer.\nTake one down, pass it around,
|
|
46 PLEASE DO ,12 <- #49
|
|
47 PLEASE DO ,12SUB#1 <- #76
|
|
48 DO ,12SUB#2 <- #190
|
|
49 DO ,12SUB#3 <- #80
|
|
50 DO ,12SUB#4 <- #200
|
|
51 PLEASE DO ,12SUB#5 <- #256
|
|
52 DO ,12SUB#6 <- #248
|
|
53 DO ,12SUB#7 <- #144
|
|
54 DO ,12SUB#8 <- #216
|
|
55 PLEASE DO ,12SUB#9 <- #202
|
|
56 DO ,12SUB#10 <- #14
|
|
57 DO ,12SUB#11 <- #144
|
|
58 DO ,12SUB#12 <- #98
|
|
59 PLEASE DO ,12SUB#13 <- #190
|
|
60 DO ,12SUB#14 <- #160
|
|
61 DO ,12SUB#15 <- #256
|
|
62 DO ,12SUB#16 <- #88
|
|
63 PLEASE DO ,12SUB#17 <- #218
|
|
64 DO ,12SUB#18 <- #36
|
|
65 DO ,12SUB#19 <- #38
|
|
66 DO ,12SUB#20 <- #164
|
|
67 PLEASE DO ,12SUB#21 <- #176
|
|
68 DO ,12SUB#22 <- #48
|
|
69 DO ,12SUB#23 <- #162
|
|
70 DO ,12SUB#24 <- #14
|
|
71 PLEASE DO ,12SUB#25 <- #128
|
|
72 DO ,12SUB#26 <- #208
|
|
73 DO ,12SUB#27 <- #162
|
|
74 DO ,12SUB#28 <- #222
|
|
75 PLEASE DO ,12SUB#29 <- #48
|
|
76 DO ,12SUB#30 <- #8
|
|
77 DO ,12SUB#31 <- #120
|
|
78 DO ,12SUB#32 <- #66
|
|
79 PLEASE DO ,12SUB#33 <- #48
|
|
80 DO ,12SUB#34 <- #246
|
|
81 DO ,12SUB#35 <- #136
|
|
82 DO ,12SUB#36 <- #184
|
|
83 PLEASE DO ,12SUB#37 <- #256
|
|
84 DO ,12SUB#38 <- #202
|
|
85 DO ,12SUB#39 <- #110
|
|
86 DO ,12SUB#40 <- #104
|
|
87 PLEASE DO ,12SUB#41 <- #42
|
|
88 DO ,12SUB#42 <- #126
|
|
89 DO ,12SUB#43 <- #56
|
|
90 DO ,12SUB#44 <- #88
|
|
91 PLEASE DO ,12SUB#45 <- #72
|
|
92 DO ,12SUB#46 <- #56
|
|
93 DO ,12SUB#47 <- #80
|
|
94 DO ,12SUB#48 <- #242
|
|
95 PLEASE DO ,12SUB#49 <- #228
|
|
96 // ,13 is bottles of beer on the wall.
|
|
97 PLEASE DO ,13 <- #31
|
|
98 PLEASE DO ,13SUB#1 <- #76
|
|
99 DO ,13SUB#2 <- #190
|
|
100 DO ,13SUB#3 <- #80
|
|
101 DO ,13SUB#4 <- #200
|
|
102 PLEASE DO ,13SUB#5 <- #256
|
|
103 DO ,13SUB#6 <- #248
|
|
104 DO ,13SUB#7 <- #144
|
|
105 DO ,13SUB#8 <- #216
|
|
106 PLEASE DO ,13SUB#9 <- #202
|
|
107 DO ,13SUB#10 <- #14
|
|
108 DO ,13SUB#11 <- #144
|
|
109 DO ,13SUB#12 <- #98
|
|
110 PLEASE DO ,13SUB#13 <- #190
|
|
111 DO ,13SUB#14 <- #160
|
|
112 DO ,13SUB#15 <- #256
|
|
113 DO ,13SUB#16 <- #88
|
|
114 PLEASE DO ,13SUB#17 <- #74
|
|
115 DO ,13SUB#18 <- #14
|
|
116 DO ,13SUB#19 <- #128
|
|
117 DO ,13SUB#20 <- #114
|
|
118 PLEASE DO ,13SUB#21 <- #214
|
|
119 DO ,13SUB#22 <- #24
|
|
120 DO ,13SUB#23 <- #112
|
|
121 DO ,13SUB#24 <- #162
|
|
122 PLEASE DO ,13SUB#25 <- #22
|
|
123 DO ,13SUB#26 <- #104
|
|
124 DO ,13SUB#27 <- #80
|
|
125 DO ,13SUB#28 <- #256
|
|
126 PLEASE DO ,13SUB#29 <- #194
|
|
127 DO ,13SUB#30 <- #36
|
|
128 DO ,13SUB#31 <- #256
|
|
129
|
|
130 // ,20 MAPS NEWLINES TO DIGITS
|
|
131 PLEASE DO ,20 <- #10
|
|
132 PLEASE DO ,20 SUB #1 <- #76
|
|
133 DO ,20 SUB #2 <- #196
|
|
134 DO ,20 SUB #3 <- #4
|
|
135 DO ,20 SUB #4 <- #132
|
|
136 PLEASE DO ,20 SUB #5 <- #36
|
|
137 DO ,20 SUB #6 <- #164
|
|
138 DO ,20 SUB #7 <- #228
|
|
139 DO ,20 SUB #8 <- #100
|
|
140 PLEASE DO ,20 SUB #9 <- #52
|
|
141 DO ,20 SUB #10 <- #180
|
|
142
|
|
143 // ,21 MAPS DIGITS TO DIGITS
|
|
144 PLEASE DO ,21 <- #10 BY #10
|
|
145 PLEASE DO ,21SUB#1#1 <- #248
|
|
146 PLEASE DO ,21SUB#1#2 <- #120
|
|
147 PLEASE DO ,21SUB#1#3 <- #184
|
|
148 PLEASE DO ,21SUB#1#4 <- #56
|
|
149 PLEASE DO ,21SUB#1#5 <- #216
|
|
150 PLEASE DO ,21SUB#1#6 <- #88
|
|
151 PLEASE DO ,21SUB#1#7 <- #152
|
|
152 PLEASE DO ,21SUB#1#8 <- #24
|
|
153 PLEASE DO ,21SUB#1#9 <- #232
|
|
154 PLEASE DO ,21SUB#1#10 <- #104
|
|
155 DO ,21SUB#2#1 <- #128
|
|
156 DO ,21SUB#2#2 <- #256
|
|
157 DO ,21SUB#2#3 <- #64
|
|
158 DO ,21SUB#2#4 <- #192
|
|
159 DO ,21SUB#2#5 <- #96
|
|
160 DO ,21SUB#2#6 <- #224
|
|
161 DO ,21SUB#2#7 <- #32
|
|
162 DO ,21SUB#2#8 <- #160
|
|
163 DO ,21SUB#2#9 <- #112
|
|
164 DO ,21SUB#2#10 <- #240
|
|
165 DO ,21SUB#3#1 <- #64
|
|
166 DO ,21SUB#3#2 <- #192
|
|
167 DO ,21SUB#3#3 <- #256
|
|
168 DO ,21SUB#3#4 <- #128
|
|
169 DO ,21SUB#3#5 <- #32
|
|
170 DO ,21SUB#3#6 <- #160
|
|
171 DO ,21SUB#3#7 <- #224
|
|
172 DO ,21SUB#3#8 <- #96
|
|
173 DO ,21SUB#3#9 <- #48
|
|
174 DO ,21SUB#3#10 <- #176
|
|
175 DO ,21SUB#4#1 <- #192
|
|
176 DO ,21SUB#4#2 <- #64
|
|
177 DO ,21SUB#4#3 <- #128
|
|
178 DO ,21SUB#4#4 <- #256
|
|
179 DO ,21SUB#4#5 <- #160
|
|
180 DO ,21SUB#4#6 <- #32
|
|
181 DO ,21SUB#4#7 <- #96
|
|
182 DO ,21SUB#4#8 <- #224
|
|
183 DO ,21SUB#4#9 <- #176
|
|
184 DO ,21SUB#4#10 <- #48
|
|
185 PLEASE DO ,21SUB#5#1 <- #32
|
|
186 PLEASE DO ,21SUB#5#2 <- #160
|
|
187 PLEASE DO ,21SUB#5#3 <- #224
|
|
188 PLEASE DO ,21SUB#5#4 <- #96
|
|
189 PLEASE DO ,21SUB#5#5 <- #256
|
|
190 PLEASE DO ,21SUB#5#6 <- #128
|
|
191 PLEASE DO ,21SUB#5#7 <- #192
|
|
192 PLEASE DO ,21SUB#5#8 <- #64
|
|
193 PLEASE DO ,21SUB#5#9 <- #16
|
|
194 PLEASE DO ,21SUB#5#10 <- #144
|
|
195 DO ,21SUB#6#1 <- #160
|
|
196 DO ,21SUB#6#2 <- #32
|
|
197 DO ,21SUB#6#3 <- #96
|
|
198 DO ,21SUB#6#4 <- #224
|
|
199 DO ,21SUB#6#5 <- #128
|
|
200 DO ,21SUB#6#6 <- #256
|
|
201 DO ,21SUB#6#7 <- #64
|
|
202 DO ,21SUB#6#8 <- #192
|
|
203 DO ,21SUB#6#9 <- #144
|
|
204 DO ,21SUB#6#10 <- #16
|
|
205 DO ,21SUB#7#1 <- #96
|
|
206 DO ,21SUB#7#2 <- #224
|
|
207 DO ,21SUB#7#3 <- #32
|
|
208 DO ,21SUB#7#4 <- #160
|
|
209 DO ,21SUB#7#5 <- #64
|
|
210 DO ,21SUB#7#6 <- #192
|
|
211 DO ,21SUB#7#7 <- #256
|
|
212 DO ,21SUB#7#8 <- #128
|
|
213 DO ,21SUB#7#9 <- #80
|
|
214 DO ,21SUB#7#10 <- #208
|
|
215 DO ,21SUB#8#1 <- #224
|
|
216 DO ,21SUB#8#2 <- #96
|
|
217 DO ,21SUB#8#3 <- #160
|
|
218 DO ,21SUB#8#4 <- #32
|
|
219 DO ,21SUB#8#5 <- #192
|
|
220 DO ,21SUB#8#6 <- #64
|
|
221 DO ,21SUB#8#7 <- #128
|
|
222 DO ,21SUB#8#8 <- #256
|
|
223 DO ,21SUB#8#9 <- #208
|
|
224 DO ,21SUB#8#10 <- #80
|
|
225 PLEASE DO ,21SUB#9#1 <- #16
|
|
226 PLEASE DO ,21SUB#9#2 <- #144
|
|
227 PLEASE DO ,21SUB#9#3 <- #208
|
|
228 PLEASE DO ,21SUB#9#4 <- #80
|
|
229 PLEASE DO ,21SUB#9#5 <- #240
|
|
230 PLEASE DO ,21SUB#9#6 <- #112
|
|
231 PLEASE DO ,21SUB#9#7 <- #176
|
|
232 PLEASE DO ,21SUB#9#8 <- #48
|
|
233 PLEASE DO ,21SUB#9#9 <- #256
|
|
234 PLEASE DO ,21SUB#9#10 <- #128
|
|
235 DO ,21SUB#10#1 <- #144
|
|
236 DO ,21SUB#10#2 <- #16
|
|
237 DO ,21SUB#10#3 <- #80
|
|
238 DO ,21SUB#10#4 <- #208
|
|
239 DO ,21SUB#10#5 <- #112
|
|
240 DO ,21SUB#10#6 <- #240
|
|
241 DO ,21SUB#10#7 <- #48
|
|
242 DO ,21SUB#10#8 <- #176
|
|
243 DO ,21SUB#10#9 <- #128
|
|
244 DO ,21SUB#10#10 <- #256
|
|
245
|
|
246 // ,22 MAPS DIGITS TO SPACES
|
|
247 PLEASE DO ,22 <- #10
|
|
248 PLEASE DO ,22 SUB #1 <- #8
|
|
249 DO ,22 SUB #2 <- #136
|
|
250 DO ,22 SUB #3 <- #72
|
|
251 DO ,22 SUB #4 <- #200
|
|
252 PLEASE DO ,22 SUB #5 <- #40
|
|
253 DO ,22 SUB #6 <- #168
|
|
254 DO ,22 SUB #7 <- #104
|
|
255 DO ,22 SUB #8 <- #232
|
|
256 PLEASE DO ,22 SUB #9 <- #24
|
|
257 DO ,22 SUB #10 <- #152
|
|
258
|
|
259 // ,10 ,11 ,12 ,20 ,21 and ,22 are defined by the makestrings script
|
|
260
|
|
261 // .10 contains first digit, .11 contains second.
|
|
262 DO .10 <- #9
|
|
263 DO .11 <- #9
|
|
264
|
|
265 // ,10 prints a newline from scratch
|
|
266 PLEASE DO ,10 <- #1
|
|
267 PLEASE DO ,10SUB#1 <- #176
|
|
268 DO READ OUT ,10 // print a bare newline.
|
|
269
|
|
270 DO COME FROM (999) // main loop.
|
|
271 DO (500) NEXT // print the two digit number .10 .11
|
|
272 // returning the offset to get to a space
|
|
273 // in .5.
|
|
274 PLEASE DO ,11SUB#1 <- .5 // bottles of beer on the wall
|
|
275 DO READ OUT ,11
|
|
276
|
|
277 DO (500) NEXT // print the two digit number .10 .11
|
|
278 DO ,12SUB#1 <- .5 // bottles of beer. Take...around,
|
|
279 PLEASE DO READ OUT ,12
|
|
280
|
|
281 // .6 = (.10 == 0 ? 1 : 2) snagged from line 54 of library.
|
|
282 PLEASE DO .6 <- '?"!10~.10'~#1"$#1'~#3
|
|
283 // this line, line 50, and line 51 form a conditional.
|
|
284 DO (50) NEXT
|
|
285 // end up here if .10 != 0
|
|
286
|
|
287 // conditional on .11==0?
|
|
288 PLEASE DO .7 <- '?"!11~.11'~#1"$#1'~#3 // same for .7
|
|
289 DO (70) NEXT
|
|
290 // .11 != 0
|
|
291
|
|
292 // subtract 1 from .11 (second digit).
|
|
293 DO .2 <- #1
|
|
294 DO .1 <- .11
|
|
295 PLEASE DO (1010) NEXT // .3 = .1 - .2 = .11 - 1
|
|
296 DO .11 <- .3
|
|
297 DO (600) NEXT // print last verse line
|
|
298 DO (101) NEXT // jump out of loop.
|
|
299
|
|
300 (70) DO (71) NEXT
|
|
301 // .11 == 0
|
|
302 DO .11 <- #9 // roll over second digit
|
|
303
|
|
304 // subtract 1 from first digit
|
|
305 DO .2 <- #1
|
|
306 PLEASE DO .1 <- .10
|
|
307 DO (1010) NEXT // .3 = .1 - .2 = .10 - 1
|
|
308 DO .10 <- .3
|
|
309
|
|
310 DO (600) NEXT // print last verse line
|
|
311 DO (101) NEXT // jump out of loop.
|
|
312 (71) DO RESUME .7 // end if .11 == 0
|
|
313
|
|
314 (50) DO (51) NEXT
|
|
315 PLEASE DO FORGET #1
|
|
316 // end up here if .10 == 0.
|
|
317
|
|
318 // subtract 1 from .11 (second digit).
|
|
319 DO .2 <- #1
|
|
320 DO .1 <- .11
|
|
321 PLEASE DO (1010) NEXT // .3 = .1 - .2 = .11 - 1
|
|
322 DO .11 <- .3
|
|
323
|
|
324 DO (600) NEXT // print last verse line
|
|
325 PLEASE DO .7 <- '?"!11~.11'~#1"$#1'~#3 // same for .7
|
|
326 DO (80) NEXT
|
|
327 // .10 == 0, .11 != 0
|
|
328 DO (101) NEXT
|
|
329
|
|
330
|
|
331 (80) DO (81) NEXT
|
|
332 // .10 == 0, .11 == 0
|
|
333
|
|
334 DO GIVE UP
|
|
335
|
|
336 (81) DO RESUME .7
|
|
337
|
|
338
|
|
339 (51) DO RESUME .6 // end if .10 == 0
|
|
340
|
|
341 (101) DO FORGET #1
|
|
342
|
|
343 (999) DO FORGET #1 // dummy statement
|
|
344
|
|
345 // subroutine to print last line of a verse.
|
|
346 (600) DO (500) NEXT // print the two digit number .10 .11
|
|
347 DO ,13SUB#1 <- .5 // bottles of beer on the wall.
|
|
348 DO READ OUT ,13
|
|
349 DO RESUME #1
|
|
350
|
|
351 // subroutine to print a two digit number. The first digit is in .10,
|
|
352 // the second is in .11. Returns the index to be READ OUT to get to a
|
|
353 // space in .5.
|
|
354 (500) DO ,30 <- #1 // 1 elt array for printing.
|
|
355 DO .1 <- .10 // .1 gets first digit.
|
|
356 DO (1020) NEXT // .1++
|
|
357 PLEASE DO ,30SUB#1 <- ,20SUB.1 // map from newline to digit
|
|
358 DO READ OUT ,30 // print the digit.
|
|
359
|
|
360 // now we map from the first digit to the second digit.
|
|
361 DO .3 <- .1 // stash array index away.
|
|
362 DO .1 <- .11 // .1 gets second digit.
|
|
363 DO (1020) NEXT // .1++
|
|
364 PLEASE DO ,30SUB#1 <- ,21SUB .3 .1 // map from first digit to second digit
|
|
365 DO READ OUT ,30 // print the digit.
|
|
366 DO .5 <- ,22SUB.1 // map to space and return that value.
|
|
367
|
|
368 PLEASE DO RESUME #1 // return from (500) subrtn.
|