view interps/c-intercal/pit/beer.doc @ 11293:a7899ef2d7b6

<wob_jonas> learn Aristotle said that every illness can be cured by balancing the four vitreous humors, and everyone believed him for two thousand years, even though people still died of illnesses. It wasn\'t until the 20th century that Szent-Gy\xc3\xb6rgyi Albert realized that Aristotle didn\'t find fifth kind of vitreous humor, vitamin C, because the Greek alphabet
author HackBot
date Mon, 01 Jan 2018 17:57:43 +0000
parents 859f9b4339e6
children
line wrap: on
line source

// This is beer.doc.  Strip out all comments to have a valid INTERCAL
// program beer.i that prints out the complete lyrics to 99 Bottles of Beer
// on the Wall.  The string arrays were computed by a 115 line perl
// program.
// It cops out and relies on the standard library routines for 
// addition and subtraction to do the x++ operation.
// -Matt DiMeo
// -mdimeo@brooktree.com

// ,10 is a bare newline from scratch.
PLEASE DO ,10 <- #1
PLEASE DO ,10SUB#1 <- #176
// ,11 is bottles of beer on the wall,
PLEASE DO ,11 <- #30
PLEASE DO ,11SUB#1 <- #76
       DO ,11SUB#2 <- #190
       DO ,11SUB#3 <- #80
       DO ,11SUB#4 <- #200
PLEASE DO ,11SUB#5 <- #256
       DO ,11SUB#6 <- #248
       DO ,11SUB#7 <- #144
       DO ,11SUB#8 <- #216
PLEASE DO ,11SUB#9 <- #202
       DO ,11SUB#10 <- #14
       DO ,11SUB#11 <- #144
       DO ,11SUB#12 <- #98
PLEASE DO ,11SUB#13 <- #190
       DO ,11SUB#14 <- #160
       DO ,11SUB#15 <- #256
       DO ,11SUB#16 <- #88
PLEASE DO ,11SUB#17 <- #74
       DO ,11SUB#18 <- #14
       DO ,11SUB#19 <- #128
       DO ,11SUB#20 <- #114
PLEASE DO ,11SUB#21 <- #214
       DO ,11SUB#22 <- #24
       DO ,11SUB#23 <- #112
       DO ,11SUB#24 <- #162
PLEASE DO ,11SUB#25 <- #22
       DO ,11SUB#26 <- #104
       DO ,11SUB#27 <- #80
       DO ,11SUB#28 <- #256
PLEASE DO ,11SUB#29 <- #2
       DO ,11SUB#30 <- #228
// ,12 is bottles of beer.\nTake one down, pass it around,
PLEASE DO ,12 <- #49
PLEASE DO ,12SUB#1 <- #76
       DO ,12SUB#2 <- #190
       DO ,12SUB#3 <- #80
       DO ,12SUB#4 <- #200
PLEASE DO ,12SUB#5 <- #256
       DO ,12SUB#6 <- #248
       DO ,12SUB#7 <- #144
       DO ,12SUB#8 <- #216
PLEASE DO ,12SUB#9 <- #202
       DO ,12SUB#10 <- #14
       DO ,12SUB#11 <- #144
       DO ,12SUB#12 <- #98
PLEASE DO ,12SUB#13 <- #190
       DO ,12SUB#14 <- #160
       DO ,12SUB#15 <- #256
       DO ,12SUB#16 <- #88
PLEASE DO ,12SUB#17 <- #218
       DO ,12SUB#18 <- #36
       DO ,12SUB#19 <- #38
       DO ,12SUB#20 <- #164
PLEASE DO ,12SUB#21 <- #176
       DO ,12SUB#22 <- #48
       DO ,12SUB#23 <- #162
       DO ,12SUB#24 <- #14
PLEASE DO ,12SUB#25 <- #128
       DO ,12SUB#26 <- #208
       DO ,12SUB#27 <- #162
       DO ,12SUB#28 <- #222
PLEASE DO ,12SUB#29 <- #48
       DO ,12SUB#30 <- #8
       DO ,12SUB#31 <- #120
       DO ,12SUB#32 <- #66
PLEASE DO ,12SUB#33 <- #48
       DO ,12SUB#34 <- #246
       DO ,12SUB#35 <- #136
       DO ,12SUB#36 <- #184
PLEASE DO ,12SUB#37 <- #256
       DO ,12SUB#38 <- #202
       DO ,12SUB#39 <- #110
       DO ,12SUB#40 <- #104
PLEASE DO ,12SUB#41 <- #42
       DO ,12SUB#42 <- #126
       DO ,12SUB#43 <- #56
       DO ,12SUB#44 <- #88
PLEASE DO ,12SUB#45 <- #72
       DO ,12SUB#46 <- #56
       DO ,12SUB#47 <- #80
       DO ,12SUB#48 <- #242
PLEASE DO ,12SUB#49 <- #228
// ,13 is bottles of beer on the wall.
PLEASE DO ,13 <- #31
PLEASE DO ,13SUB#1 <- #76
       DO ,13SUB#2 <- #190
       DO ,13SUB#3 <- #80
       DO ,13SUB#4 <- #200
PLEASE DO ,13SUB#5 <- #256
       DO ,13SUB#6 <- #248
       DO ,13SUB#7 <- #144
       DO ,13SUB#8 <- #216
PLEASE DO ,13SUB#9 <- #202
       DO ,13SUB#10 <- #14
       DO ,13SUB#11 <- #144
       DO ,13SUB#12 <- #98
PLEASE DO ,13SUB#13 <- #190
       DO ,13SUB#14 <- #160
       DO ,13SUB#15 <- #256
       DO ,13SUB#16 <- #88
PLEASE DO ,13SUB#17 <- #74
       DO ,13SUB#18 <- #14
       DO ,13SUB#19 <- #128
       DO ,13SUB#20 <- #114
PLEASE DO ,13SUB#21 <- #214
       DO ,13SUB#22 <- #24
       DO ,13SUB#23 <- #112
       DO ,13SUB#24 <- #162
PLEASE DO ,13SUB#25 <- #22
       DO ,13SUB#26 <- #104
       DO ,13SUB#27 <- #80
       DO ,13SUB#28 <- #256
PLEASE DO ,13SUB#29 <- #194
       DO ,13SUB#30 <- #36
       DO ,13SUB#31 <- #256

// ,20 MAPS NEWLINES TO DIGITS
PLEASE DO ,20 <- #10
PLEASE DO ,20 SUB #1 <- #76
       DO ,20 SUB #2 <- #196
       DO ,20 SUB #3 <- #4
       DO ,20 SUB #4 <- #132
PLEASE DO ,20 SUB #5 <- #36
       DO ,20 SUB #6 <- #164
       DO ,20 SUB #7 <- #228
       DO ,20 SUB #8 <- #100
PLEASE DO ,20 SUB #9 <- #52
       DO ,20 SUB #10 <- #180

// ,21 MAPS DIGITS TO DIGITS
PLEASE DO ,21 <- #10 BY #10
PLEASE DO ,21SUB#1#1 <- #248
PLEASE DO ,21SUB#1#2 <- #120
PLEASE DO ,21SUB#1#3 <- #184
PLEASE DO ,21SUB#1#4 <- #56
PLEASE DO ,21SUB#1#5 <- #216
PLEASE DO ,21SUB#1#6 <- #88
PLEASE DO ,21SUB#1#7 <- #152
PLEASE DO ,21SUB#1#8 <- #24
PLEASE DO ,21SUB#1#9 <- #232
PLEASE DO ,21SUB#1#10 <- #104
       DO ,21SUB#2#1 <- #128
       DO ,21SUB#2#2 <- #256
       DO ,21SUB#2#3 <- #64
       DO ,21SUB#2#4 <- #192
       DO ,21SUB#2#5 <- #96
       DO ,21SUB#2#6 <- #224
       DO ,21SUB#2#7 <- #32
       DO ,21SUB#2#8 <- #160
       DO ,21SUB#2#9 <- #112
       DO ,21SUB#2#10 <- #240
       DO ,21SUB#3#1 <- #64
       DO ,21SUB#3#2 <- #192
       DO ,21SUB#3#3 <- #256
       DO ,21SUB#3#4 <- #128
       DO ,21SUB#3#5 <- #32
       DO ,21SUB#3#6 <- #160
       DO ,21SUB#3#7 <- #224
       DO ,21SUB#3#8 <- #96
       DO ,21SUB#3#9 <- #48
       DO ,21SUB#3#10 <- #176
       DO ,21SUB#4#1 <- #192
       DO ,21SUB#4#2 <- #64
       DO ,21SUB#4#3 <- #128
       DO ,21SUB#4#4 <- #256
       DO ,21SUB#4#5 <- #160
       DO ,21SUB#4#6 <- #32
       DO ,21SUB#4#7 <- #96
       DO ,21SUB#4#8 <- #224
       DO ,21SUB#4#9 <- #176
       DO ,21SUB#4#10 <- #48
PLEASE DO ,21SUB#5#1 <- #32
PLEASE DO ,21SUB#5#2 <- #160
PLEASE DO ,21SUB#5#3 <- #224
PLEASE DO ,21SUB#5#4 <- #96
PLEASE DO ,21SUB#5#5 <- #256
PLEASE DO ,21SUB#5#6 <- #128
PLEASE DO ,21SUB#5#7 <- #192
PLEASE DO ,21SUB#5#8 <- #64
PLEASE DO ,21SUB#5#9 <- #16
PLEASE DO ,21SUB#5#10 <- #144
       DO ,21SUB#6#1 <- #160
       DO ,21SUB#6#2 <- #32
       DO ,21SUB#6#3 <- #96
       DO ,21SUB#6#4 <- #224
       DO ,21SUB#6#5 <- #128
       DO ,21SUB#6#6 <- #256
       DO ,21SUB#6#7 <- #64
       DO ,21SUB#6#8 <- #192
       DO ,21SUB#6#9 <- #144
       DO ,21SUB#6#10 <- #16
       DO ,21SUB#7#1 <- #96
       DO ,21SUB#7#2 <- #224
       DO ,21SUB#7#3 <- #32
       DO ,21SUB#7#4 <- #160
       DO ,21SUB#7#5 <- #64
       DO ,21SUB#7#6 <- #192
       DO ,21SUB#7#7 <- #256
       DO ,21SUB#7#8 <- #128
       DO ,21SUB#7#9 <- #80
       DO ,21SUB#7#10 <- #208
       DO ,21SUB#8#1 <- #224
       DO ,21SUB#8#2 <- #96
       DO ,21SUB#8#3 <- #160
       DO ,21SUB#8#4 <- #32
       DO ,21SUB#8#5 <- #192
       DO ,21SUB#8#6 <- #64
       DO ,21SUB#8#7 <- #128
       DO ,21SUB#8#8 <- #256
       DO ,21SUB#8#9 <- #208
       DO ,21SUB#8#10 <- #80
PLEASE DO ,21SUB#9#1 <- #16
PLEASE DO ,21SUB#9#2 <- #144
PLEASE DO ,21SUB#9#3 <- #208
PLEASE DO ,21SUB#9#4 <- #80
PLEASE DO ,21SUB#9#5 <- #240
PLEASE DO ,21SUB#9#6 <- #112
PLEASE DO ,21SUB#9#7 <- #176
PLEASE DO ,21SUB#9#8 <- #48
PLEASE DO ,21SUB#9#9 <- #256
PLEASE DO ,21SUB#9#10 <- #128
       DO ,21SUB#10#1 <- #144
       DO ,21SUB#10#2 <- #16
       DO ,21SUB#10#3 <- #80
       DO ,21SUB#10#4 <- #208
       DO ,21SUB#10#5 <- #112
       DO ,21SUB#10#6 <- #240
       DO ,21SUB#10#7 <- #48
       DO ,21SUB#10#8 <- #176
       DO ,21SUB#10#9 <- #128
       DO ,21SUB#10#10 <- #256

// ,22 MAPS DIGITS TO SPACES
PLEASE DO ,22 <- #10
PLEASE DO ,22 SUB #1 <- #8
       DO ,22 SUB #2 <- #136
       DO ,22 SUB #3 <- #72
       DO ,22 SUB #4 <- #200
PLEASE DO ,22 SUB #5 <- #40
       DO ,22 SUB #6 <- #168
       DO ,22 SUB #7 <- #104
       DO ,22 SUB #8 <- #232
PLEASE DO ,22 SUB #9 <- #24
       DO ,22 SUB #10 <- #152

// ,10 ,11 ,12 ,20 ,21 and ,22 are defined by the makestrings script
    
// .10 contains first digit, .11 contains second.
       DO .10 <- #9
       DO .11 <- #9

// ,10 prints a newline from scratch
PLEASE DO ,10 <- #1
PLEASE DO ,10SUB#1 <- #176
       DO READ OUT ,10		// print a bare newline.

       DO COME FROM (999)	// main loop.
       DO (500) NEXT		// print the two digit number .10 .11
				//   returning the offset to get to a space
				//   in .5.
PLEASE DO ,11SUB#1 <- .5	// bottles of beer on the wall
       DO READ OUT ,11

       DO (500) NEXT		// print the two digit number .10 .11
       DO ,12SUB#1 <- .5	// bottles of beer. Take...around,
PLEASE DO READ OUT ,12

       // .6 = (.10 == 0 ? 1 : 2) snagged from line 54 of library.
PLEASE DO .6 <- '?"!10~.10'~#1"$#1'~#3
       // this line, line 50, and line 51 form a conditional.
       DO (50) NEXT
       // end up here if .10 != 0

       // conditional on .11==0?
PLEASE DO .7 <- '?"!11~.11'~#1"$#1'~#3		// same for .7
       DO (70) NEXT
       // .11 != 0

       // subtract 1 from .11 (second digit).
       DO .2 <- #1
       DO .1 <- .11
PLEASE DO (1010) NEXT		// .3 = .1 - .2 = .11 - 1
       DO .11 <- .3
       DO (600) NEXT		// print last verse line
       DO (101) NEXT		// jump out of loop.

(70)   DO (71) NEXT
       // .11 == 0
       DO .11 <- #9		// roll over second digit

       // subtract 1 from first digit
       DO .2 <- #1
PLEASE DO .1 <- .10
       DO (1010) NEXT		// .3 = .1 - .2 = .10 - 1
       DO .10 <- .3

       DO (600) NEXT		// print last verse line
       DO (101) NEXT		// jump out of loop.
(71)   DO RESUME .7		// end if .11 == 0

(50)   DO (51) NEXT
PLEASE DO FORGET #1
       // end up here if .10 == 0.  

       // subtract 1 from .11 (second digit).
       DO .2 <- #1
       DO .1 <- .11
PLEASE DO (1010) NEXT		// .3 = .1 - .2 = .11 - 1
       DO .11 <- .3

       DO (600) NEXT		// print last verse line
PLEASE DO .7 <- '?"!11~.11'~#1"$#1'~#3		// same for .7
       DO (80) NEXT
       // .10 == 0, .11 != 0
       DO (101) NEXT


(80)   DO (81) NEXT
       // .10 == 0, .11 == 0

       DO GIVE UP

(81)   DO RESUME .7


(51)   DO RESUME .6		// end if .10 == 0 

(101) DO FORGET #1

(999) DO FORGET #1		// dummy statement

// subroutine to print last line of a verse.
(600)  DO (500) NEXT		// print the two digit number .10 .11
       DO ,13SUB#1 <- .5	// bottles of beer on the wall.
       DO READ OUT ,13	
       DO RESUME #1

// subroutine to print a two digit number.  The first digit is in .10,
// the second is in .11.  Returns the index to be READ OUT to get to a
// space in .5.
(500)  DO ,30 <- #1		// 1 elt array for printing. 
       DO .1 <- .10		// .1 gets first digit.
       DO (1020) NEXT		// .1++
PLEASE DO ,30SUB#1 <- ,20SUB.1  // map from newline to digit
       DO READ OUT ,30		// print the digit.

       // now we map from the first digit to the second digit.
       DO .3 <- .1		// stash array index away.
       DO .1 <- .11		// .1 gets second digit.
       DO (1020) NEXT		// .1++
PLEASE DO ,30SUB#1 <- ,21SUB .3 .1  // map from first digit to second digit
       DO READ OUT ,30		// print the digit.
       DO .5 <- ,22SUB.1	// map to space and return that value.

PLEASE DO RESUME #1		// return from (500) subrtn.