Final Revision

master
historicalsource 2019-04-13 22:29:36 -04:00
commit c6e21a6a2e
53 changed files with 46175 additions and 0 deletions

1
README.md Normal file
View File

@ -0,0 +1 @@
# bureaucracy

94
airplane.txt Normal file
View File

@ -0,0 +1,94 @@
AIRPLANE SEQUENCE
WINNING CASE NO 1
SEAT 3B
You are sitting in an incredibly luxurious Air Zalagasa FubAero 7-11
seat 30,000 feet over somewhere which you don't know where it is.
>EXAMINE THE SEAT
It is an incredibly luxurious FubAero ComfoMat (TM) Air Zalagasa seat,
equipped with a recline button, a headphone socket, a light switch and a
stewardess call button. A pocket in front holds literature.
>PRESS THE RECLINE {ANY} BUTTON
You hear a tiny metallic voice whispering nearby.
>LISTEN TO THE VOICE
You cannot hear it clearly without the proper equipment.
>LOOK IN THE POCKET
The seat pocket contains a set of headphones, a copy of Ai-Ai Life, the
in-flight magazine of Air Zalagasa, and a safety card.
>GET THE HEADPHONES.PLUG THEM INTO THE SEAT.
The voice is now a little louder but still unclear.
>WEAR THE HEADPHONES
You hear an announcement. "Welcome to seat {WRONG SEATNUM}. Your
luxury Air Zalagasa flight has been equipped for your convenience with
ComfoMat (TM) electrically-controlled seats. For your safety and
comfort, the controls located at your passenger station have been
centrally disabled at this time. We will be making this facility
available to you after take off, or when we have reached our cruising
altitude. Or possibly when we have served dinner. Or when we feel like
it."
>READ THE MAGAZINE
No.
>EXAMINE THE MAGAZINE
A card falls out and flutters underneath your seat, which has been specially
designed so that anything which flutters underneath it cannot be retrieved.
>EXAMINE THE CARD
This is a shiny card showing happy Zalagasans in a shiny Air Zalagasa
airplane to which all sorts of terrible things are happening.
The first picture shows a happy smiling stewardess making an announcement
in very very small type. The second picture shows some happy, smiling
Zalagasan passengers removing false teeth, sepctacles, ornamental nose
bones and so forth. The third picture shows
some Zalagasans who are almost certainly happy and smiling but you
can't be sure because they are all bent double clasping their knees.
The fourth picture appears to have been chewed by a llama so you can't
tell what the happy smiling Zalagasans which it undoubtedly showed are
actually doing.
>READ THE SMALL PRINT
The small print coming out of the stewardess's mouth says "M'baka
n'ka umtogo bokaki m'Great Big Plane Crash n'gaga five minutes,
okaka m'sidli ik ik togo paku."
>PRESS THE STEWARDESS BUTTON
Your seat reclines slightly, remembers that it has been centrally
disabled for your comfort and safety, pauses, and returns to its
full upright position.
>FEEL UNDER THE SEAT
You feel the edge of a card.
>GET THE CARD
Taken.
>EXAMINE IT.
[SHOW COMPLAINTS FORM]

21
b.chars Normal file
View File

@ -0,0 +1,21 @@
: 12430 e: 9458 t: 7625 a: 7571
i: 6351 o: 6233 s: 5915 n: 5296
r: 5097 l: 4241 h: 3276 d: 3159
y: 3007 c: 2789 u: 2330 .: 2326
g: 2260 p: 2170 m: 1941 w: 1806
f: 1710 b: 1590 ,: 1479 ": 940
k: 876 v: 809 T: 635 Y: 477
I: 476 ': 396 A: 322 -: 257
x: 212 S: 182 H: 176 013: 158
?: 158 !: 153 W: 145 O: 139
j: 130 P: 124 B: 109 C: 99
D: 95 R: 95 q: 92 N: 90
Z: 89 (: 88 E: 88 ): 86
F: 86 M: 85 0: 76 G: 74
z: 72 L: 59 U: 59 [: 58
]: 50 ;: 41 1: 40 2: 35
:: 33 J: 27 V: 25 4: 22
$: 21 5: 21 K: 18 7: 17
/: 13 8: 11 >: 11 3: 7
Q: 7 6: 6 9: 4 #: 3
&: 2 X: 1 ^: 1

83
b.chart Normal file
View File

@ -0,0 +1,83 @@
-date- -rel- -size- -pre- -obj- -glo- -voc-
2/24 87 243156 41563 255 240 1416
3/04 88 243176 37663 255 240 1416
3/04 88 243176 37663 255 240 1416
3/09 88 243164 37663 255 240 1416
3/09 88 243164 37663 255 240 1416
3/09 88 243356 37687 255 240 1417
3/09 89 243356 37687 255 240 1417
3/09 90 243380 37687 255 240 1417
3/09 91 243356 37687 255 240 1417
3/10 92 243376 37687 255 240 1417
3/10 93 243384 37687 255 240 1417
3/10 94 243384 37687 255 240 1417
3/17 95 243384 37687 255 240 1417
3/20 96 243384 37687 255 240 1417
3/23 97 243384 37687 255 240 1417
3/24 98 243388 37687 255 240 1417
3/24 99 243384 37687 255 240 1417
3/24 100 243384 37687 255 240 1417
4/02 101 243384 37685 255 240 1417
4/03 102 243392 37685 255 240 1417
4/15 103 243392 37685 255 240 1417
4/16 104 243392 37685 255 240 1417
4/27 105 243268 37663 255 240 1416
4/27 105 243320 37663 255 240 1416
4/30 105 243324 37663 255 240 1416
5/04 106 243732 37651 255 240 1416
5/04 107 243732 37651 255 240 1416
5/06 108 243728 37651 255 240 1416
5/06 109 243316 37669 255 240 1416
5/07 110 243304 37667 255 240 1416
5/18 111 243332 37663 255 240 1416
5/19 111 243332 37663 255 240 1416
5/19 112 243332 37663 255 240 1416
5/28 113 243324 37659 255 240 1416
5/28 114 243300 37653 255 240 1416
5/28 115 243308 37678 255 240 1416
5/29 116 243340 37678 255 240 1416
6/03 117 243308 37678 255 240 1416
6/05 118 218504 37678 255 240 1416
6/05 119 243308 37678 255 240 1416
6/05 120 243308 37678 255 240 1416
6/05 121 243308 37678 255 240 1416
6/06 122 243284 37678 255 240 1416
6/08 123 243248 37678 255 240 1416
6/09 124 243244 37674 255 240 1416
6/09 125 243184 37086 255 240 1416
6/10 126 243184 37086 255 240 1416
6/10 126 243184 37086 255 240 1416
6/10 127 243184 37086 255 240 1416
6/17 128 243180 37086 255 240 1416
6/18 129 243180 37086 255 240 1416
6/18 130 243180 37086 255 240 1416
6/22 131 243180 37086 255 240 1416
6/22 132 243224 37086 255 240 1416
6/23 133 243180 37084 255 240 1416
6/30 134 243212 37058 255 240 1416
6/30 135 243180 37032 255 240 1416
6/30 136 243208 37058 255 240 1416
7/01 137 243216 37058 255 240 1416
7/01 138 243172 37058 255 240 1416
7/02 139 243200 37058 255 240 1416
7/06 140 243184 37058 255 240 1416
7/07 141 243160 37058 255 240 1416
7/21 142 241068 36657 255 240 1379
7/21 143 243160 37058 255 240 1416
7/22 144 243160 37058 255 240 1416
7/22 145 243160 37058 255 240 1416
7/22 146 243160 37058 255 240 1416
7/28 147 243160 37058 255 240 1416
8/20 148 243160 37058 255 240 1416
9/16 149 243412 37458 255 240 1416
9/16 150 243216 37110 255 240 1416
9/18 151 243424 37110 255 240 1416
9/19 152 243368 37108 255 240 1416
10/08 153 243224 37110 255 240 1416
10/08 154 243368 37110 255 240 1416
10/09 155 243368 37110 255 240 1416
12/21 156 243368 37110 255 240 1416
12/21 157 243412 37110 255 240 1416
12/22 158 243416 37110 255 240 1416
12/24 159 243416 37110 255 240 1416
5/21 160 243524 37130 255 240 1416

138
b.chart-thru-release Normal file
View File

@ -0,0 +1,138 @@
-date- -rel- -size- -pre- -obj- -glo- -voc-
1/05 248 218118 38974 272 240 1413
1/06 249 218330 38984 272 240 1413
1/06 250 218306 38984 272 240 1413
1/06 251 218306 38984 272 240 1413
1/06 252 218474 38984 272 240 1413
1/06 253 218594 39004 272 240 1414
1/07 254 218574 39004 272 240 1414
1/07 255 218686 39004 272 240 1414
1/07 256 218854 39006 272 240 1413
1/07 1 218806 38962 270 240 1413
1/07 2 218762 38950 270 240 1413
1/07 3 218810 38950 270 240 1413
1/07 4 218894 38948 270 239 1413
1/07 5 218642 38948 270 240 1413
1/08 6 218638 38944 270 240 1413
1/08 7 218746 38950 270 240 1413
1/08 8 218658 38950 270 240 1413
1/08 9 218658 38950 270 240 1413
1/08 10 218626 38948 270 239 1413
1/08 11 218578 38948 270 239 1413
1/08 12 218578 38948 270 239 1413
1/09 13 218618 38960 270 239 1414
1/09 14 218622 38960 270 239 1414
1/09 15 218522 38960 270 240 1414
1/11 16 218522 38960 270 240 1414
1/12 17 218510 38963 270 240 1414
1/12 18 218390 38963 270 240 1414
1/12 19 218574 38961 270 240 1414
1/13 20 218638 38963 270 240 1414
1/13 21 218874 38965 270 240 1414
1/13 22 219418 39030 270 240 1418
1/14 23 219474 39030 270 240 1418
1/14 24 219954 39038 270 240 1418
1/14 25 219918 39055 270 240 1419
1/15 26 219958 39053 270 240 1419
1/15 27 219966 39055 270 240 1419
1/15 28 219966 39055 270 240 1419
1/15 29 219958 39055 270 240 1419
1/16 30 220266 39052 270 240 1418
1/16 31 220266 39052 270 240 1418
1/20 32 220434 39054 270 240 1418
1/21 33 221442 38757 266 219 1428
1/22 34 221126 38775 266 240 1428
1/22 35 221150 38781 266 240 1428
1/22 36 221154 38781 266 240 1428
1/22 37 221690 38991 266 240 1432
1/22 38 222798 38991 266 240 1432
1/22 39 222806 38991 266 240 1432
1/22 40 223386 38991 266 240 1432
1/22 41 223434 38991 266 240 1432
1/22 42 223414 38993 266 240 1432
1/23 43 223414 38993 266 240 1432
1/23 44 223422 38993 266 240 1432
1/23 45 223806 38993 266 240 1432
1/23 46 226088 38948 266 240 1426
1/23 47 222476 38421 259 237 1416
1/23 48 223024 38433 259 240 1416
1/24 49 223816 38494 259 239 1422
1/24 50 223476 38494 259 240 1422
1/24 51 223628 38493 259 240 1422
1/25 52 228136 38476 258 240 1423
1/25 53 228596 38465 258 240 1423
1/25 54 228212 38461 258 240 1423
1/25 55 227240 38065 250 240 1414
1/25 56 227200 38057 250 237 1414
1/25 57 226372 37706 250 240 1399
1/25 58 226340 37706 250 240 1399
1/25 59 226332 37706 250 240 1399
1/26 60 225692 37234 250 240 1399
1/27 19 230836 37189 250 240 1398
1/27 20 231556 37261 250 239 1403
1/27 21 231532 37267 250 240 1404
1/27 22 231532 37267 250 240 1404
1/27 23 231532 37267 250 240 1404
1/28 24 231736 37276 250 240 1405
1/29 25 232664 37328 250 240 1409
1/29 26 232632 37319 250 240 1408
1/29 27 232736 37319 250 240 1408
1/29 28 233044 37351 250 240 1409
1/30 29 233044 37351 250 240 1409
1/30 30 233044 37351 250 240 1409
1/30 31 233056 37351 250 240 1409
1/30 32 233476 37351 250 240 1409
1/30 33 233468 37351 250 240 1409
1/30 34 233472 37351 250 240 1409
1/31 35 233448 37354 250 240 1409
1/31 36 233480 37362 250 240 1409
1/31 37 233780 37371 250 240 1410
1/31 38 233996 37371 250 240 1410
1/31 39 234068 37364 250 240 1409
1/31 40 234304 37366 250 240 1409
2/01 41 234516 37368 250 240 1409
2/02 42 234880 37368 250 240 1409
2/02 43 234880 37368 250 240 1409
2/02 44 234868 37382 250 240 1409
2/02 45 235396 37397 250 240 1411
2/02 46 235392 37397 250 240 1411
2/03 47 235468 37397 250 240 1411
2/03 48 235488 37397 250 240 1411
2/03 49 236480 37397 250 240 1411
2/03 50 236472 37397 250 240 1411
2/04 51 237004 37471 252 240 1413
2/04 52 237032 37471 252 240 1413
2/04 53 237576 37462 252 240 1412
2/05 54 237904 37486 252 240 1412
2/05 55 238856 37426 252 240 1407
2/05 56 239180 37454 253 240 1407
2/06 57 239344 37492 254 240 1407
2/06 58 239332 37492 254 240 1407
2/06 59 239668 37507 254 240 1407
2/06 60 239672 37507 254 240 1407
2/06 61 239828 37507 254 240 1407
2/06 62 239844 37507 254 240 1407
2/07 63 239848 37507 254 240 1407
2/07 64 240000 37507 254 240 1407
2/07 65 240104 37507 254 240 1407
2/08 66 240144 37507 254 240 1407
2/09 67 241236 37584 255 240 1411
2/09 68 241848 37624 255 240 1413
2/09 69 241956 37624 255 240 1413
2/10 70 241984 37624 255 240 1413
2/10 71 241980 37624 255 240 1413
2/10 72 242268 37624 255 240 1413
2/10 73 242644 37626 255 240 1413
2/10 74 242856 37626 255 240 1413
2/10 75 242960 37626 255 240 1413
2/11 76 242796 37602 255 240 1412
2/11 77 242796 37602 255 240 1412
2/11 78 242780 37602 255 240 1412
2/11 79 242836 37602 255 240 1412
2/11 80 243156 37649 255 240 1416
2/11 81 243156 37649 255 240 1416
2/11 82 243088 37659 255 240 1416
2/12 83 243100 37659 255 240 1416
2/12 84 243128 37661 255 240 1416
2/12 85 243132 37661 255 240 1416
2/12 86 243144 37661 255 240 1416

37
b.errors Normal file
View File

@ -0,0 +1,37 @@
Assembling B.ZAP.61 on Saturday, May 21, 1988 16:43:58
Release: 160
64 Inserting BFREQ.ZAP.60 (640 bytes)
704 Inserting BDAT.ZAP.57 (36426 bytes)
37130 Inserting MISC.ZAP.43 (3743 bytes)
40873 Inserting CLOCKER.ZAP.35 (438 bytes)
41311 Inserting PARSER.ZAP.36 (12998 bytes)
54309 Inserting BPUR.ZAP.57 (4384 bytes)
58693 Inserting OTHER-MISC.ZAP.35 (3382 bytes)
62075 Inserting VERBS.ZAP.36 (17870 bytes)
79945 Inserting EVENTS.ZAP.36 (6767 bytes)
86712 Inserting PEOPLE.ZAP.36 (11090 bytes)
97802 Inserting PLACES.ZAP.35 (6292 bytes)
104094 Inserting THINGS.ZAP.35 (26700 bytes)
130794 Inserting FORMS.ZAP.35 (2517 bytes)
133311 Inserting COMPUTER.ZAP.37 (4888 bytes)
138199 Inserting NNAIRPORT.ZAP.36 (16794 bytes)
154993 Inserting PARANOID.ZAP.33 (10735 bytes)
165728 Inserting ZALAGASA.ZAP.33 (4293 bytes)
170021 Inserting MAZE.ZAP.34 (7780 bytes)
177801 Inserting MUMBLE.ZAP.33 (930 bytes)
178731 Inserting BANK.ZAP.34 (9432 bytes)
188163 Inserting XXJET.ZAP.32 (30155 bytes)
218318 Inserting BSTR.ZAP.53 (25206 bytes)
*000000000000* global undefined: 17586, 16713, 15842, 15826, 15814, 15802, 15772, 15756, 15744, 15728, 15718, 15708, 15698, 15688, 15672, 15660, 15650, 15640, 15626, 15614, 14248, 14236, 14226, 14210, 13998, 13646
#BYTE global undefined: 17585, 16712, 15841, 15825, 15813, 15801, 15771, 15755, 15743, 15727, 15717, 15707, 15697, 15687, 15671, 15659, 15649, 15639, 15625, 15613, 14247, 14235, 14225, 14209, 13997, 13645
255 objects.
240 globals.
1416 word vocabulary.
243524 bytes (238K).
37130 bytes of preload.
17667 bytes of impure.
Outputting symbol tables

1
b.serial Normal file
View File

@ -0,0 +1 @@
56

67
b.zil Normal file
View File

@ -0,0 +1,67 @@
"B for BUREAUCRACY: (C)1987 Infocom, Inc. All Rights Reserved."
<VERSION EZIP>
<FUNNY-GLOBALS?>
<FREQUENT-WORDS?>
<LONG-WORDS?>
<SETG PRESERVE-SPACES? T>
<PRINC "
BUREAUCRACY: Interactive Fiction PLUS
">
ON!-INITIAL "For DEBUGR."
OFF!-INITIAL
ENABLE!-INITIAL
DISABLE!-INITIAL
<SET REDEFINE T>
<OR <GASSIGNED? ZILCH>
<SETG WBREAKS <STRING !\" !,WBREAKS>>>
<COND (<GASSIGNED? PREDGEN>
<SETG ZSTR-ON <SETG ZSTR-OFF ,TIME>>
;<ID 0>)>
<OR <LOOKUP "DEBUGGING?" <ROOT>>
<INSERT "DEBUGGING?" <ROOT>>>
;<SETG DEBUGGING? T>
<SETG DEBUGGING? <>>
; "Definitions only..."
<INSERT-FILE "RANDOM-GLOBALS" T>
<INSERT-FILE "OLD-PARSERDEFS" T>
<INSERT-FILE "FORMDEFS" T>
<INSERT-FILE "BANKDEFS" T>
<INSERT-FILE "COMPUTERDEFS" T>
<INSERT-FILE "XXJETDEFS" T>
<INSERT-FILE "MACROS" T>
<INSERT-FILE "SYNTAX" T>
<INSERT-FILE "MISC" T>
<INSERT-FILE "CLOCKER" T>
<INSERT-FILE "PARSER" T>
<PUT-PURE-HERE>
<INSERT-FILE "OTHER-MISC" T>
<INSERT-FILE "VERBS" T>
<INSERT-FILE "EVENTS" T>
<INSERT-FILE "PEOPLE" T>
<INSERT-FILE "PLACES" T>
<INSERT-FILE "THINGS" T>
<INSERT-FILE "FORMS" T>
<INSERT-FILE "COMPUTER" T>
<INSERT-FILE "NNAIRPORT" T>
<INSERT-FILE "PARANOID" T>
<INSERT-FILE "ZALAGASA" T>
<INSERT-FILE "MAZE" T>
<INSERT-FILE "MUMBLE" T>
<CHECKPOINT "TAA-C.EXE" <> "TAA.EXE">
<INSERT-FILE "BANK" T>
<INSERT-FILE "XXJET" T>
<PROPDEF SIZE 0>
<PROPDEF CAPACITY 0>
; <PROPDEF VALUE 0>

BIN
b.zip Normal file

Binary file not shown.

1485
bank.zil Normal file

File diff suppressed because it is too large Load Diff

68
bankdefs.zil Normal file
View File

@ -0,0 +1,68 @@
<ZSECTION "BANKDEFS">
<FILE-FLAGS MDL-ZIL?>
<USE "NEWSTRUC">
<INCLUDE "FORMDEFS">
<BUILD-FORM BANK-FORM-DEPOSIT
(BANK-LAST-NAME "Last name:" 21 "Chomper" IBANK-LAST-NAME)
(BANK-FIRST-NAME "First name:" 25 "Random" IBANK-FIRST-NAME)
(BANK-MIDDLE-INITIAL "Middle initial:" 1 "Q" IBANK-MIDDLE-INITIAL)
(BANK-AMOUNT "Amount of deposit: $" 6 "50" BANK-CHECK-AMOUNT)
(BANK-REASON "From illegal activity? (y/n):" 1 "Y" BANK-CHECK-DEAL)
(BANK-DRUG "If yes, which one:" 17 BANK-DRUGS)>
<BUILD-FORM BANK-FORM-WITHDRAW
(BANK-LAST-NAME "Last name:" 21 "Chomper" IBANK-LAST-NAME)
(BANK-FIRST-NAME "First name:" 25 "Random" IBANK-FIRST-NAME)
(BANK-MIDDLE-INITIAL "Middle initial:" 1 "Q" IBANK-MIDDLE-INITIAL)
(BANK-AMOUNT "Amount of withdrawal: $" 6 "50" BANK-CHECK-AMOUNT)
(BANK-REASON "For illegal activity? (y/n):" 1 "Y" BANK-CHECK-DEAL)
(BANK-DRUG "If yes, which one:" 17 BANK-DRUGS)>
<DEFINE-GLOBALS BANK-GLOBALS
(BANKTALK 0)>
<CONSTANT BANKNAMES <TABLE (LENGTH PATTERN (BYTE [REST WORD]))
#BYTE 0
<VOC "PAULETTE" NOUN>
<VOC "CLINT" NOUN>
<VOC "NANCY" NOUN>
<VOC "ROGER" NOUN>>>
<MSETG MINIMUM-BALANCE 1000>
<DEFINE-GLOBALS TELLER-GLOBALS
(TELLER-NUMBER:FIX BYTE 0)
(TELLER-ADDR-CHANGE:FIX 0)
(TELLER-CHECK-CASH:FIX 0)
(TELLER-BANK-HOURS:FIX 0)
(TELLER-WITHDRAW:FIX 0)
(TELLER-DEPOSIT:FIX 0)
(TELLER-STATE:FIX BYTE 0)
(TELLER-AMOUNT-IN-ACCT:FIX ,MINIMUM-BALANCE)
(TELLER-AMOUNT-ON-DEPOSIT-FORM:FIX 0)
(TELLER-AMOUNT-ON-WITHDRAWAL-FORM:FIX 0)
(TELLER-CURRENT-SCRIPT 0)
(TELLER-CASH-GIVEN 0)
(TELLER-PLAYER-WARNED? BYTE <>)
(TELLER-CURRENT-FORM 0)
(TELLER-DRUGS BYTE 0)
(TELLER-IDLE BYTE 0)>
<MSETG TELLER-SIGNS 0> ; "Sign on this window"
<MSETG TELLER-INTRO 1> ; "The first question asked"
<MSETG TELLER-SECOND 2> ; "The next thing asked for by teller"
<MSETG TELLER-OBJ 3> ; "Object given by teller (if any)"
<MSETG TELLER-THIRD 4> ; "Next request"
<MSETG STATE-FORM-ERR 1>
<MSETG STATE-INIT 2>
<MSETG STATE-RUN-F1 3>
<MSETG STATE-RUN-F2 4>
<MSETG NUMBER-TELLERS 10>
<MSETG MID-TELLER 5>
<ENDSECTION>

200
bfreq.zap Normal file
View File

@ -0,0 +1,200 @@
.FSTR FSTR?1,"the " ;2438 1220
.FSTR FSTR?2,", " ;1615 1616
.FSTR FSTR?3,"you " ;1482 742
.FSTR FSTR?4,"your " ;1146 383
.FSTR FSTR?5,"You " ;1092 365
.FSTR FSTR?6,". " ;1080 1081
.FSTR FSTR?7,"and " ;1080 541
.FSTR FSTR?8,"to " ;938 939
.FSTR FSTR?9,"The " ;822 275
.FSTR FSTR?10,"that " ;795 266
.FSTR FSTR?11,"with " ;684 229
.FSTR FSTR?12,"have " ;630 211
.FSTR FSTR?13,"of " ;609 610
.FSTR FSTR?14,"It's " ;500 101
.FSTR FSTR?15,"You're " ;497 72
.FSTR FSTR?16,"There's " ;480 61
.FSTR FSTR?17,"is " ;465 466
.FSTR FSTR?18,"from " ;390 131
.FSTR FSTR?19,"in " ;389 390
.FSTR FSTR?20,"for " ;380 191
.FSTR FSTR?21,"doesn't " ;378 55
.FSTR FSTR?22,"already " ;372 63
.FSTR FSTR?23,"about " ;336 85
.FSTR FSTR?24,"are " ;328 165
.FSTR FSTR?25,"don't " ;320 65
.FSTR FSTR?26,"which " ;308 78
.FSTR FSTR?27,"like " ;306 103
.FSTR FSTR?28,"something " ;304 39
.FSTR FSTR?29,"you're " ;294 50
.FSTR FSTR?30,"There " ;290 59
.FSTR FSTR?31,"can't " ;275 56
.FSTR FSTR?32,"anything " ;273 40
.FSTR FSTR?33,"would " ;272 69
.FSTR FSTR?34,"this " ;267 90
.FSTR FSTR?35,"not " ;262 132
.FSTR FSTR?36,"into " ;258 87
.FSTR FSTR?37,"Zalagasa " ;256 33
.FSTR FSTR?38,"Zalagasan " ;243 28
.FSTR FSTR?39,"This " ;236 60
.FSTR FSTR?40,"flight " ;235 48
.FSTR FSTR?41,"just " ;234 79
.FSTR FSTR?42,"out " ;232 117
.FSTR FSTR?43,"really " ;225 46
.FSTR FSTR?44,"little " ;220 45
.FSTR FSTR?45,"at " ;219 220
.FSTR FSTR?46,"back " ;219 74
.FSTR FSTR?47,"but " ;212 107
.FSTR FSTR?48,"it " ;207 208
.FSTR FSTR?49,"through " ;204 35
.FSTR FSTR?50,"on " ;203 204
.FSTR FSTR?51,"what " ;201 68
.FSTR FSTR?52,"Zalagasans " ;200 21
.FSTR FSTR?53,"hear " ;186 63
.FSTR FSTR?54,"seems " ;180 46
.FSTR FSTR?55,"looking " ;180 31
.FSTR FSTR?56,"it's " ;176 45
.FSTR FSTR?57,"I'm " ;176 45
.FSTR FSTR?58,"computer " ;175 26
.FSTR FSTR?59,"be " ;170 171
.FSTR FSTR?60,"some " ;168 57
.FSTR FSTR?61,"has " ;164 83
.FSTR FSTR?62,"that" ;162 82
.FSTR FSTR?63,"probably " ;161 24
.FSTR FSTR?64,"says" ;160 81
.FSTR FSTR?65,"looks " ;160 41
.FSTR FSTR?66,"one " ;158 80
.FSTR FSTR?67,"his " ;158 80
.FSTR FSTR?68,"Your " ;156 40
.FSTR FSTR?69,"nothing " ;156 27
.FSTR FSTR?70,"aren't " ;156 27
.FSTR FSTR?71,"I " ;152 153
.FSTR FSTR?72,"can " ;152 77
.FSTR FSTR?73,"you" ;151 152
.FSTR FSTR?74,"here" ;150 76
.FSTR FSTR?75,"isn't " ;145 30
.FSTR FSTR?76,"all " ;144 73
.FSTR FSTR?77,"you'll " ;144 25
.FSTR FSTR?78,"Please " ;144 25
.FSTR FSTR?79,"Boysenberry " ;143 14
.FSTR FSTR?80,"an " ;142 143
.FSTR FSTR?81,"want " ;141 48
.FSTR FSTR?82,"they " ;141 48
.FSTR FSTR?83,"What " ;140 36
.FSTR FSTR?84,"better " ;140 29
.FSTR FSTR?85,"there's " ;140 21
.FSTR FSTR?86,"standing " ;133 20
.FSTR FSTR?87,"take " ;132 45
.FSTR FSTR?88,"know " ;132 45
.FSTR FSTR?89,"Unfortunately" ;132 12
.FSTR FSTR?90,"It " ;130 66
.FSTR FSTR?91,"He " ;130 66
.FSTR FSTR?92,"should " ;130 27
.FSTR FSTR?93,"attendant " ;128 17
.FSTR FSTR?94,"You'd " ;126 22
.FSTR FSTR?95,"You'll " ;126 19
.FSTR FSTR?96,"very " ;123 42
;word frequency table of 96 most common words
WORDS:: .TABLE
FSTR?1
FSTR?2
FSTR?3
FSTR?4
FSTR?5
FSTR?6
FSTR?7
FSTR?8
FSTR?9
FSTR?10
FSTR?11
FSTR?12
FSTR?13
FSTR?14
FSTR?15
FSTR?16
FSTR?17
FSTR?18
FSTR?19
FSTR?20
FSTR?21
FSTR?22
FSTR?23
FSTR?24
FSTR?25
FSTR?26
FSTR?27
FSTR?28
FSTR?29
FSTR?30
FSTR?31
FSTR?32
FSTR?33
FSTR?34
FSTR?35
FSTR?36
FSTR?37
FSTR?38
FSTR?39
FSTR?40
FSTR?41
FSTR?42
FSTR?43
FSTR?44
FSTR?45
FSTR?46
FSTR?47
FSTR?48
FSTR?49
FSTR?50
FSTR?51
FSTR?52
FSTR?53
FSTR?54
FSTR?55
FSTR?56
FSTR?57
FSTR?58
FSTR?59
FSTR?60
FSTR?61
FSTR?62
FSTR?63
FSTR?64
FSTR?65
FSTR?66
FSTR?67
FSTR?68
FSTR?69
FSTR?70
FSTR?71
FSTR?72
FSTR?73
FSTR?74
FSTR?75
FSTR?76
FSTR?77
FSTR?78
FSTR?79
FSTR?80
FSTR?81
FSTR?82
FSTR?83
FSTR?84
FSTR?85
FSTR?86
FSTR?87
FSTR?88
FSTR?89
FSTR?90
FSTR?91
FSTR?92
FSTR?93
FSTR?94
FSTR?95
FSTR?96
.ENDT
.ENDI

436
bglobals.dat Normal file
View File

@ -0,0 +1,436 @@
(PRSA ; 909
PRSO ; 826
HERE ; 423
PRSI ; 297
NOW-PRSI? ; 177
WINNER ; 158
PERIOD ; 294
P-NUMBER ; 68
P-IT-OBJECT ; 64
CURRENT-ROW ; 58
P-LEN ; 49
CURRENT-SEAT ; 45
P-LEXV ; 90
P-PRSA-WORD ; 39
P-ITBL ; 76
CANT ; 68
P-HIM-OBJECT ; 33
P-NAM ; 32
PCR ; 63
P-ADJ ; 31
P-WALK-DIR ; 27
AIRPORT-ROOM-NUM-GVAL ; 26
CASH ; 26
P-NCN ; 26
CABSTATE-GVAL ; 24
P-CONT ; 24
P-OFLAG ; 24
P-HER-OBJECT ; 23
TELLER-NUMBER-GVAL ; 23
P-MULT? ; 22
MEAL-STATE ; 20
NEW-SEAT-GVAL ; 19
P-OTBL ; 38
P-PRSO ; 37
NEW-ROW-GVAL ; 18
END-GAME? ; 17
P-SLOCBITS ; 17
P-THEM-OBJECT ; 17
SEX ; 17
PHONE-NUMBERS ; 33
FLINE ; 16
OLD-HERE ; 16
TELECOM?-GVAL ; 16
DUCT-NUMBER-GVAL ; 15
MEAL ; 30
P-DIRECTION ; 15
P-GETFLAGS ; 15
CABTURNS-GVAL ; 14
CLOCK-HAND ; 14
CURRENT-DESK-ID-GVAL ; 14
QUOTE-FLAG ; 14
TELLER-AMOUNT-ON-WITHDRAWAL-FORM-GVAL ; 14
TELLER-CASH-GIVEN-GVAL ; 14
HOURS ; 13
HUNGER ; 13
LICENSE-FORM ; 13
P-EXCHANGE ; 13
P-INBUF ; 26
P-MERGED ; 13
QCONTEXT ; 13
CURRENT-MESSAGE ; 12
CURRENT-NEIGHBOR-GVAL ; 12
FX ; 12
MEAL-ROW-GVAL ; 12
MEAL-SEAT-GVAL ; 12
MMOVES ; 12
P-ACLAUSE ; 12
PHONES-PLUGGED-IN?-GVAL ; 12
VERBOSITY ; 12
BRACKET ; 22
CURRENT-MAZE-ROOM ; 11
DIE-ON-NEXT-COMMAND-GVAL ; 11
MARGIN ; 11
OBJECTS-GROUPED ; 11
P-SYNTAX ; 11
DONT ; 21
P-VTBL ; 21
BP ; 10
CURRENT-TARGET-NAME-GVAL ; 10
HANDLE-TURNS ; 10
MUSIC-DEAD?-GVAL ; 10
QCONTEXT-ROOM ; 10
TELLER-AMOUNT-ON-DEPOSIT-FORM-GVAL ; 10
WIDTH ; 10
YOURE-ALREADY-STR ; 20
P-PRSI ; 19
YOU-SEE ; 19
BANKTALK-GVAL ; 9
C-INTS ; 9
COMP-WORD-FATAL? ; 9
DO-SCORE? ; 9
FLIGHT-GONE?-GVAL ; 9
HATCH-OPEN?-GVAL ; 9
HOLDING-FOR-PONGO? ; 9
P-DOLLAR-FLAG ; 9
P-MERGE ; 9
P-PHR ; 9
P-SEAT-NUMBER ; 9
P-XNAM ; 9
SMOKER-IRATE?-GVAL ; 9
TELLER-STATE-GVAL ; 9
THIS-IS ; 17
CLERK-LISTENING?-GVAL ; 8
CLERK-SCRIPT ; 8
DESK-LOSER?-GVAL ; 8
FERROR-COUNT ; 8
FILES-ON-SCREEN?-GVAL ; 8
FLIGHT-RECALLED?-GVAL ; 8
FORM-COMPUTER? ; 8
FY ; 8
MAZE-STEPS-TAKEN ; 8
MEAL-HERE?-GVAL ; 8
MINUTES ; 8
NEW-TELLER ; 8
P-WON ; 8
RUN-PLANE-COUNT-GVAL ; 8
SPEAKER-DEAD?-GVAL ; 8
TELLER-IDLE-GVAL ; 8
AIR-ZALAGASA-ENTRANCE-GVAL ; 7
AISLE-STATE-GVAL ; 7
AT-ZALAGASA?-GVAL ; 7
ATTENDANT-WORKING?-GVAL ; 7
CABTIMES-GVAL ; 7
CLOCK-WAIT? ; 7
COMPUTER-DEAD?-GVAL ; 7
DSCRIPT ; 7
HEIGHT ; 7
MEAL-SQUASHED?-GVAL ; 7
ODD-GATE-SOLVED? ; 7
OOPS-TABLE ; 14
P-ADJW ; 14
RESERVE-PTR ; 7
TELLER-CURRENT-SCRIPT-GVAL ; 7
TERMINATE-CURRENT-GVAL ; 7
TICKET-SCREW?-GVAL ; 7
TUNE-TIMER-GVAL ; 7
AIRLINE-BITS ; 13
AIRPHONE-RINGING?-GVAL ; 6
CAB-DONT-GVAL ; 6
CABNAME-GVAL ; 6
CLERK-WORKING?-GVAL ; 6
COMPLEX-POS ; 6
DESK-ZSCRIPT-GVAL ; 6
DING-ROW-GVAL ; 6
EXITED-ALREADY?-GVAL ; 6
HOLD-TURNS ; 6
JUST-HEARD?-GVAL ; 6
LINES-TO-NEXT-TARGET-GVAL ; 6
LS-MOVE-COUNT ; 6
MOUSY-SCRIPT ; 6
NERD-OBJECT-DATA ; 6
P-ALT-CONT ; 6
P-ANAM ; 6
P-GWIMBIT ; 6
P-NAMW ; 12
P-TABLE ; 6
PHONE-MSGS ; 6
PLANE-SUMMONED? ; 6
REAL-TARGET-NAME-GVAL ; 6
TELLER-BANK-HOURS-GVAL ; 6
TELLER-DRUGS-GVAL ; 6
AGAIN-LEXV ; 11
AOS-BP?-GVAL ; 5
CHANGE-DESK?-GVAL ; 5
COMPLEX-LOOKED? ; 5
CURRENT-NEIGHBOR-SEATNUM-GVAL ; 5
CURRENT-OZ-VICTIM ; 5
DO-WINDOW ; 5
FALL-SCRIPT-GVAL ; 5
HATCH-LOSER?-GVAL ; 5
LAST-LINE-USED-GVAL ; 5
MEAL-EATEN?-GVAL ; 5
OLD-LEN ; 5
OMNIA-GALLIA-ENTRANCE-GVAL ; 5
P-LASTADJ ; 5
P-XADJ ; 5
REMAINING-TARGET-TURNS-GVAL ; 5
SL-TABLE ; 10
SPLATTED-ROW-GVAL ; 5
SPY-TIMER-GVAL ; 5
TELLER-ADDR-CHANGE-GVAL ; 5
TELLER-CHECK-CASH-GVAL ; 5
TELLER-DEPOSIT-GVAL ; 5
TELLER-WITHDRAW-GVAL ; 5
USERPW-GVAL ; 5
YAWNS ; 10
MACAW-TABLE ; 9
P-OVTBL ; 9
ATTENDANT-MENTIONED-REGULATIONS?-GVAL ; 4
BABY-DISTURBED?-GVAL ; 4
BP-DELAY ; 4
CABADDR-GVAL ; 4
COM-TIMER-GVAL ; 4
COMMANDS-SINCE-START-GVAL ; 4
DESK-SCRIPT-GVAL ; 4
LAST-ROW-GVAL ; 4
LAST-SEAT-GVAL ; 4
LAST-USED ; 8
MIND-READ?-GVAL ; 4
MOVES ; 4
NERD-SCRIPT ; 4
NEXT-TO-BABY?-GVAL ; 4
P-END-ON-PREP ; 4
P-OFW ; 8
P-SPECIAL-ORPHAN ; 4
PERFORMING? ; 4
SCORE ; 4
SPLATTED-PERSON-GVAL ; 4
TELLER-AMOUNT-IN-ACCT-GVAL ; 4
TELLER-PLAYER-WARNED?-GVAL ; 4
TUNE-MENTIONED?-GVAL ; 4
VOICES-ONLINE?-GVAL ; 4
WILL-WIN?-GVAL ; 4
YES-LEXV ; 8
AGAIN-DIR ; 3
AIRPORT-SEEN-BITS-GVAL ; 3
ATTENDANT-AT-ROW-GVAL ; 3
BANK-FORM-DEPOSIT ; 3
BUTTONS-OFF?-GVAL ; 3
CABPREVNAME-GVAL ; 3
CHUTE-SCORED? ; 3
CRASH-COMING?-GVAL ; 3
DOORBELL-RINGS ; 3
FERROR-ACTIVE?-GVAL ; 3
GOTO-LOC ; 3
HANDLE-STATE ; 6
HOLDING-FOR-ADDRESS? ; 3
IN-SEAT?-GVAL ; 3
LAST-BP-CHANGE ; 3
MAIL-COUNT ; 3
NO-HUNGER-INT ; 3
OLD-BP ; 3
OOPS-INBUF ; 6
P-AND ; 3
P-MOBY-FOUND ; 3
REAL-COMMAND-WINDOW ; 6
SPLAT-COUNT-GVAL ; 3
TIMES-THROUGH-LOOP-GVAL ; 3
TUNE-SELECTOR-GVAL ; 3
)(
JUST-PAGED?-GVAL ; 3
LAST-MAZE-ROOM ; 3
MAZE-LOSING? ; 3
NERD-HACKED-ABOOK? ; 3
PLANE-ARRIVE-COUNT ; 3
RETURN-TO-SEAT-ROUTINE-GVAL ; 3
SOMETHING-SAID-GVAL ; 3
STNUM-VALUE-GVAL ; 3
TURNED-DOWN-CLERK? ; 3
WAITING-FOR-CASH?-GVAL ; 3
BOSS-CHECK-WORDS ; 5
CASH-CHECK-SCRIPT ; 5
LLAMA-TABLE ; 5
P-BUTS ; 5
P-OCL1 ; 5
P-OCL2 ; 5
PERSON-ROWS ; 5
RESERVE-INBUF ; 5
ANS-TABLE ; 4
C-TABLE ; 4
CAPS ; 4
DAY-TABLE ; 4
DEPOSIT-SCRIPT ; 4
FILE-TABLE ; 4
HUNGER-MSGS ; 4
SEAT-LETTERS ; 4
TARGETS ; 4
WITHDRAWAL-SCRIPT ; 4
BANK-FORM-WITHDRAW ; 2
BANK-SCORED? ; 2
CABNUM-GVAL ; 2
COMP-X-GVAL ; 2
COMP-Y-GVAL ; 2
COMPLEX-DROP? ; 2
CRAZY-COUNT-GVAL ; 2
CURRENT-DIR ; 2
DOWN-FROM-STRIP-COUNT ; 2
FLIGHT-ATTENDANT-HE/SHE-GVAL ; 2
FLIGHT-ATTENDANT-HIM/HER-GVAL ; 2
FORM-X ; 2
FORM-Y ; 2
GOT-RECIPE?-GVAL ; 2
LOOKED-AT-FOOD?-GVAL ; 2
LOSER-CANT-LEAVE-SEAT?-GVAL ; 2
NERD-FLEW-BY?-GVAL ; 2
P-DIR-WORD ; 2
P-FOUND-REMOTELY ; 2
PILLAR-MENTIONED?-GVAL ; 2
REFRESH-COUNT ; 2
SOMEBODYS-WATCHING? ; 2
TELLER-CURRENT-FORM-GVAL ; 2
TOWER-SCRIPT-GVAL ; 2
AIRLINE-LOOKUP ; 3
AIRLINE-NAMES ; 3
HAK-PROG-NAME ; 3
PROG-TABLE ; 3
QLEFTS ; 3
QTOPS ; 3
RESERVE-LEXV ; 3
TELLER-SUBJECTS ; 3
UNFO-TBL ; 3
AGENT-SUBJECTS ; 2
ALL-SEATS ; 2
EXE-FILES ; 2
INCI-TBL ; 2
PSTRING ; 2
SEAT-LETTER-NAMES ; 2
SKYCAP-DOINGS ; 2
YES-INBUF ; 2
ALL-HANDLES ; 1
ALT-COMPLEX-WINDOW-DESC ; 1
BAD-TUNES ; 1
BAKED-POTATO-OPTIONS ; 1
BANKNAMES ; 1
BATHROOM-LOCKED ; 1
BURGER-OPTIONS ; 1
BUZZTABLE ; 1
CAB-EXCUSES ; 1
CAB-NOTICE-TXT ; 1
CHANGE-ADDRESS-SCRIPT ; 1
CLERK-SUBJECTS ; 1
COMPLEX-WINDOW-DESC ; 1
CRAZIES ; 1
CURRENT-SIGNS ; 1
DELAYS ; 1
DVH2-FILE ; 1
EXTRA-TEXT ; 1
FORM-HISTORY ; 1
FUNNY-FIELDS ; 1
GAME-VERBS ; 1
HACK-TABLE ; 1
HELP-TABLE ; 1
ITARGETS ; 1
LIKELIES ; 1
LOGIN-NAME ; 1
NEIGHBOR-SEATS ; 1
NERD-ARRIVALS ; 1
NERD-OBJECTS ; 1
NORMAL-SEAT ; 1
NORMAL-SEAT-POCKET ; 1
NORMAL-SEAT-TABLE ; 1
OZ-ROYS ; 1
P-A ; 1
P-Q ; 1
PASSWORD ; 1
PATRONS ; 1
PNOTICE-TXT ; 1
PUNCT-TABLE ; 1
SSTRING ; 1
TALKVERBS ; 1
TARGET-NAMES ; 1
TELECOM-HELP-TABLE ; 1
TICKET-TYPE-TABLE ; 1
TOONS ; 1
UNKNOWN-MSGS ; 1
WALKING-TABLE ; 1
A-DIR ; 0
ADVENTURE-TABLE ; 0
AIRPLANE-FILE ; 0
B-DIR ; 0
BANK-THINGS ; 0
BEER-TYPE-TABLE ; 0
BONGO-STUFF ; 0
BOYSENBERRY-WINDOW ; 0
BURGER-TYPE-TABLE ; 0
C-DIR ; 0
CAFFEINE-TABLE ; 0
CHEESE-TYPE-TABLE ; 0
CLEAR-DIR ; 0
CLERK-DOINGS ; 0
COOPS ; 0
COPY-DIR ; 0
COULDNTS ; 0
D-DIR ; 0
DELETE-DIR ; 0
DIR-DIR ; 0
DIRLIST-DIR ; 0
DIRTABLES ; 0
DRESSING-TYPE-TABLE ; 0
DRESSING-WEIGHT-TABLE ; 0
DRINK-TYPE-TABLE ; 0
ECLIPSE-TABLE ; 0
FACE-IN-FOOD-STRS ; 0
FIDUC-FILE ; 0
FIXTURES ; 0
FRIES-ETC-TABLE ; 0
HACK-DIR ; 0
HAK-FILES ; 0
HAVEVERBS ; 0
HELP-DIR ; 0
HO-HUM ; 0
HURTVERBS ; 0
JUICE-TYPE-TABLE ; 0
LOGOUT-DIR ; 0
MAILING-LIST ; 0
MENU-FILE ; 0
MOUSY-WISHES ; 0
MOVEVERBS ; 0
OMNIA-SIGN-TEXT ; 0
OTHER-AIRPLANE-OBJECTS ; 0
OTHER-PHONE-MSGS ; 0
PARSE-RANDOM-LOC-VEC ; 0
POINTLESS ; 0
PONGO-STUFF ; 0
POST-FILE ; 0
POTATO-TYPE-TABLE ; 0
PRINTR-TABLE ; 0
PSEUDO-VEC ; 0
PUTVERBS ; 0
PUZZLES ; 0
QUIT-DIR ; 0
QUIT-TABLE ; 0
RANDOM-CARTRIDGE-TABLE ; 0
RECIPE-TABLE ; 0
RENAME-DIR ; 0
RPRINTR-TABLE ; 0
RUN-DIR ; 0
SEAT-PSEUDO-VEC ; 0
SEEVERBS ; 0
SODA-TABLE ; 0
SODA-TYPE-TABLE ; 0
TCLEAR-DIR ; 0
TELECOM-TABLE ; 0
TOUCHVERBS ; 0
TRAVEL-FILE ; 0
TYPE-DIR ; 0
WATER-TABLE ; 0
WHO-DIR ; 0
WINE-COLOR-TABLE ; 0
WINE-COUNTRY-TABLE ; 0
WINE-TYPE-TABLE ; 0
YUKS ; 0
ZBUG-FILE ; 0
CABMUSIC-GVAL ; 0
RETURN-TO-SEAT-WAIT-GVAL ; 0
)

69
bureaucracy.txt Normal file
View File

@ -0,0 +1,69 @@
Ideas for Bureaucracy?
----------------------
The global concept for this game can be summarized by the line "Just because
you're paranoid doesn't mean that everybody isn't out to get you."
We've all had the feeling from time to time that somebody (particularly
those small, beady-eyed bureaucrats who work for banks, insurance companies,
etc.) is out to get us. This game provides the answer: In fact, there is
a massive conspiracy to do just that. And things are stranger than that,
because this conspiracy is centered in some sort of fantastical underground
(literally) catacomb, connecting all of these various dens of iniquity.
The player, when he successfully completes the game, will have the
intense satisfaction of having crushed the nameless and faceless hoard
of bureaucrats, and, with luck, having gotten the bank to acknowledge his
change of address (or whatever the player's initial task is set up to be).
--
This game is intended as a kind of dark comedy. The mood which is to
be created is one of frustration, anger, and eventually paranoia as
everything in the player's life goes from bad to worse, all because
of petty errors at the bank, etc.
At some point, the player can gain access to the 'infernal regions',
where some bizarre series of accomplishments will have to be made in
order to destroy the enemy's apparatus.
One possible source of problems is trying to do the things that
the bureaucracy hates most: folding, spindling, and mutiliating punch
cards, filling out forms incorrectly, perhaps stealing rubber stamps
and stamping forms improperly, and otherwise botching up the works.
Perhaps this type of problem in the above-ground area will help create
a diversion allowing access to the underground where more bizarre
things will happen.
Presumably the game starts with the player needing to get some very
simple task done (e.g. getting the bank to acknowledge a change of
address form). This will turn into more of a problem than it seems
and events will cause such things as his credit cards getting recalled,
his house getting repossessed, etc. leading to absurd heights of
nonsense. Clearly, at some point the player will realize that things
are getting out of hand.
Confronting the various bureaucrats will be no easy task, since they
probably won't want to talk with you, preferring that you fill out
a request for conversation form. My guess is that no matter what you
try to do, you can't get them to answer questions very reliably (which
fits in well with parser limitations).
--
Places of Interest
Your Home - probably just a few rooms a la Hitchhiker's
Outside your Home - front steps, etc.
Bank - your bank, with a number of rooms, for tellers, safe deposit
boxes, vault, waiting area, etc.
Post Office - your local post office
Insurance Company -
Underground - Lots of stuff here, maybe some sort of semi-militaristic
order of bureaucrats with lots of arcane machinery linked up to a gigantic
computer which controls the hoard. Perhaps they all turn out to be
androids or some such.

129
buttons.txt Normal file
View File

@ -0,0 +1,129 @@
BUTTONS ALGORITHM
Each seat contains three buttons:
1) Marked "RECLINE"
2) Marked "CALL ATTENDANT"
3) Marked "LIGHT"
The buttons, when enabled, work as follows:
RECLINE operates on seat +1 col +2 rows and RINGS BELL there
LIGHT operates on seat +4 col +3 rows, and TOGGLES RECLINE there
BELL operates on seat -1 col +1 row and TOGGLES LIGHT there
The algorithm is also revealed when the player presses any of the
buttons from any seat when the seat buttons are DISABLED. What happens
then is that the button triggers a recorded announcement audible only
over the headphones; that announcement includes the location of the
seat to which it is wired, NOT to the seat which the player is actually
in. Player has to be IN the seat with the Headphones both plugged in
and being worn before he can hear the message. He also has to be in the
seat, either with or without headphones, before he can press the button.
BUTTONS PLAY
The player always starts in 3B. If he presses a button at this point,
he hears the metallic whispering which only lasts for that turn. To
hear it properly he has to wear the headphones and plug them in. He can
press each button and get the same message repeatedly.
Once he starts wandering around the cabin he could theoretically map it
in 14 turns. After fourteen turns the FASTEN SEAT BELT SIGN comes on
and he has four turns to get back before being forced back by the
stewardess.
At this point he should have mapped the cabin. His return to 3B starts
the meal service routine. Only when all meals have been served do we
activate the buttons. The FASTEN SEAT BELTS light goes out and he is
free to wander around the cabin or eat his meal or return to ANOTHER
seat.
POSSIBLE PLAYS
1)
LOSER. He eats his meal like a good boy. After a number of turns a
neighbour will complain about his halitosis, the stew will bring him an
electric toothbrush and tell him to clean his teeth.
1a) DECLINES. He dies of halitosis and so does everyone else. They
continue to nag at him after death (2 turns) and reboot.
1b) ACCEPTS. He goes to the bathroom to clean his teeth.
1bi) SUCCEEDS. He plugs in the toothbrush which activates the john,
sending it into a frenzy and sucking him below the surface.
***BOG NOTE*** at all other times the door is shut and groaning can be
heard from behind the door.
1bii) FAILS to plug the toothbrush in and dies of halitosis except
nobody else dies since you are sealed off. However when the aeroplane
lands the entire ground crew are killed and your name is reviled
posthumously.
2) LOSER
Player does NOT eat his meal but does not solve the buttons puzzle.
He will be shepherded back to his seat at frequent intervals by the
attendant and told that if he does not eat his meal they will be unable
to take the tray away, and if they are unable to take the tray away the
table will not be able to be safely stowed in accordance with FAA
regulations and therefore the plane will be unable to land and will
therefore run out of fuel and crash with the inevitable death of
everyone on board. If he says "Fuck that, buster", it all comes true.
ALTERNATIVE if he doesn't eat his meal it will eventually eat its way
through the plate, through the table, slither onto the floor, crawl
around the cabin reeking and humming, eat through the floor and cause
explosion decompression. Dead.
3) WIN
The player does NOT eat his food but instead solves the algorithm puzzle
and eventually (within the meal-escape time) manages to find the Light
switch in 6E which will splat the seat in front of 3B thus smashing his
tray into the back of the seat and returning 2B to an upright position
in preparation for landing at this time.
As a reward for winning this winsome little puzzlette, THE MISSING
CORNER OF THE FLIGHT SAFETY CARD falls out of seat 2B. You smother your
disgust at the flecks of dried llama-spit and examine it. It shows a
crudely-drawn picture (by Zalagasa's leading primitivist) of a misshapen
stewardess apparently standing underneath a rather wrinkled and colossal
mushroom on which is written the words "Stinglai k'aabi".
We now control the stewardess to two more appearances. FIRST, she now
appears and tells player that there is a call for him on the telephone.
To the admiring glances of the hateful and ugly passengers he walks to
the telephone and finds that it is the waitress from the cafe wanting to
know if he left her a gratuity. She is leaving an address to which he
can mail it (which is in fact his own address) when she is cut off. He
overhears the captian talking to ATC saying that the aeroplane has lost
control (Apparently some noxious substance has eaten its way through the
hydraulic lines on the port side) and will be crashing in five minutes.
ATC informs him that he has not filed a flight plan for a crash etc.
Rings off.
Stewardess reappears and player asks for a stinglai k'aabi and is given
one. He then has to open the hatch. Announcement from stewardess.
Player has Jump, Jump, any char., and out. Door slams shut, parachute
catches. Knock on door, stew opens it, "Oh - you fell for the old
'we're going to crash' routine, did you? Have a nice day!"
TO POT.
LOSE CASES AFTER WIN BUTTON.
1) Doesn't spot parachute puzzle.
2) Doesn't answer phone.
3) Won't jump.
4) Doesn't even open hatch.
PLANE CRASH ends each.

70
c2.zil Normal file
View File

@ -0,0 +1,70 @@
"B for BUREAUCRACY: (C)1987 Infocom, Inc. All Rights Reserved."
<VERSION EZIP>
<FUNNY-GLOBALS?>
<FREQUENT-WORDS?>
<LONG-WORDS?>
<SETG PRESERVE-SPACES? T>
<PRINC "
BUREAUCRACY: Interactive Fiction PLUS
">
ON!-INITIAL "For DEBUGR."
OFF!-INITIAL
ENABLE!-INITIAL
DISABLE!-INITIAL
<COND (<GASSIGNED? MUDDLE>
<BLOAT 90000 0 0 3300 0 0 0 0 0 256>)>
<SET REDEFINE T>
<OR <GASSIGNED? ZILCH>
<SETG WBREAKS <STRING !\" !,WBREAKS>>>
<COND (<GASSIGNED? PREDGEN>
<SETG ZSTR-ON <SETG ZSTR-OFF ,TIME>>
<ID 0>)>
<OR <LOOKUP "DEBUGGING?" <ROOT>>
<INSERT "DEBUGGING?" <ROOT>>>
;<SETG DEBUGGING? T>
<SETG DEBUGGING? <>>
; "Definitions only..."
<INSERT-FILE "RANDOM-GLOBALS" T>
<INSERT-FILE "OLD-PARSERDEFS" T>
<INSERT-FILE "FORMDEFS" T>
<INSERT-FILE "BANKDEFS" T>
<INSERT-FILE "COMPUTERDEFS" T>
<INSERT-FILE "XXJETDEFS" T>
<INSERT-FILE "MACROS" T>
<INSERT-FILE "SYNTAX" T>
<INSERT-FILE "MISC" T>
<INSERT-FILE "CLOCKER" T>
<INSERT-FILE "PARSER" T>
<PUT-PURE-HERE>
<INSERT-FILE "OTHER-MISC" T>
<INSERT-FILE "VERBS" T>
<INSERT-FILE "EVENTS" T>
<INSERT-FILE "PEOPLE" T>
<INSERT-FILE "PLACES" T>
<INSERT-FILE "THINGS" T>
<INSERT-FILE "FORMS" T>
<INSERT-FILE "COMPUTER" T>
<INSERT-FILE "NNAIRPORT" T>
<INSERT-FILE "PARANOID" T>
<INSERT-FILE "ZALAGASA" T>
<INSERT-FILE "MAZE" T>
<INSERT-FILE "MUMBLE" T>
<CHECKPOINT "TAA-C.EXE" <> "TAA.EXE">
<INSERT-FILE "BANK" T>
<INSERT-FILE "XXJET" T>
<PROPDEF SIZE 0>
<PROPDEF CAPACITY 0>
; <PROPDEF VALUE 0>

135
clocker.zil Normal file
View File

@ -0,0 +1,135 @@
"CLOCKER for BUREAUCRACY: (C)1987 Infocom, Inc. All rights reserved."
<FILE-FLAGS MDL-ZIL?>
<USE "NEWSTRUC">
<SETG CLOCK-HAND <>>
;<SETG CLOCK-WAIT? <>>
<CONSTANT C-TABLE <ITABLE NONE 100>>
<GDECL (C-TABLE) TABLE>
<MSETG C-TABLELEN 100>
<SETG C-INTS 100>
<GDECL (C-INTS) FIX>
<MSETG C-INTLEN 4> ; "Length of an interrupt entry."
<MSETG C-RTN 0> ; "Offset of routine name."
<MSETG C-TICK 1> ; "Offset of count."
<MSETG H-HUNG 2> ; "For hunger stuff."
<DEFINE DEQUEUE (RTN)
<SET RTN <QUEUED? .RTN>>
<COND (<T? .RTN>
<ZPUT .RTN ,C-RTN 0>)>>
<DEFINE QUEUED? QQ (RTN "AUX" C E)
<SET E <ZREST ,C-TABLE ,C-TABLELEN>>
<SET C <ZREST ,C-TABLE ,C-INTS>>
<REPEAT ()
<COND (<EQUAL? .C .E>
<RETURN <> .QQ>)
(<EQUAL? <ZGET .C ,C-RTN> .RTN>
<COND (<ZERO? <ZGET .C ,C-TICK>>
<RETURN <> .QQ>)
(T
<RETURN .C .QQ>)>)>
<SET C <ZREST .C ,C-INTLEN>>>>
"This version of QUEUE automatically enables as well."
<DEFINE QUEUE (RTN "OPTIONAL" (TICK:FIX -1) "AUX" C E (INT <>))
<SET E <ZREST ,C-TABLE ,C-TABLELEN>>
<SET C <ZREST ,C-TABLE ,C-INTS>>
<REPEAT ()
<COND (<EQUAL? .C .E>
<COND (<T? .INT>
<SET C .INT>)
(T
<COND (<L? ,C-INTS ,C-INTLEN>
<TELL "[Too many interrupts!]" CR>)>
<SETG C-INTS <- ,C-INTS ,C-INTLEN>>
<SET INT <ZREST ,C-TABLE ,C-INTS>>)>
<ZPUT .INT ,C-RTN .RTN>
<RETURN>)
(<EQUAL? <ZGET .C ,C-RTN> .RTN>
<SET INT .C>
<RETURN>)
(<ZERO? <ZGET .C ,C-RTN>>
<SET INT .C>)>
<SET C <ZREST .C ,C-INTLEN>>>
<COND (%<COND (<GASSIGNED? ZILCH>
'<G? .INT ,CLOCK-HAND>)
(ELSE
'<L=? <LENGTH .INT:<PRIMTYPE VECTOR>>
<LENGTH ,CLOCK-HAND:<PRIMTYPE VECTOR>>>)>
<SET TICK <- <+ .TICK 3>>>)>
<ZPUT .INT ,C-TICK .TICK>
.INT>
<SETG HOURS 9>
<SETG MINUTES 0>
<CONSTANT DAY-TABLE
<TABLE 6 "Mon" "Tues" "Wednes" "Thurs" "Fri" "Satur" "Sun">>
<GDECL (HOURS MINUTES) FIX (DAY-TABLE) TABLE>
<DEFINE CLOCKER CLOCKER ("AUX" E TICK:FIX RTN (FLG <>) (Q? <>) DAY:FIX)
<COND (<T? ,CLOCK-WAIT?>
<SETG CLOCK-WAIT? <>>
<RETURN <> .CLOCKER>)>
<SETG CLOCK-HAND <ZREST ,C-TABLE ,C-INTS>>
<SET E <ZREST ,C-TABLE ,C-TABLELEN>>
<REPEAT ()
<COND (<EQUAL? ,CLOCK-HAND .E>
<SETG MINUTES <+ ,MINUTES:FIX 1>>
<COND (<G? ,MINUTES:FIX 59>
<SETG MINUTES 0>
<SETG HOURS <+ ,HOURS:FIX 1>>
<COND (<G? ,HOURS:FIX 23>
<SETG HOURS 0>
<SET DAY <ZGET ,DAY-TABLE 0>>
<SET DAY <+ .DAY 1>>
<COND (<G? .DAY 7>
<SET DAY 1>)>
<ZPUT ,DAY-TABLE 0 .DAY>)>)>
<RETURN>)
(<T? <ZGET ,CLOCK-HAND ,C-RTN>>
<SET TICK <ZGET ,CLOCK-HAND ,C-TICK>>
<COND (<L? .TICK -1>
<SET TICK <- 0 .TICK>>
<ZPUT ,CLOCK-HAND ,C-TICK <- .TICK 3>>
<SET Q? ,CLOCK-HAND>)
(<T? .TICK>
<COND (<G? .TICK 0>
<SET TICK <- .TICK 1>>
<ZPUT ,CLOCK-HAND ,C-TICK .TICK>)>
<COND (<T? .TICK>
<SET Q? ,CLOCK-HAND>)>
<COND (<NOT <G? .TICK 0>>
<SET RTN
<ZGET ,CLOCK-HAND ,C-RTN>>
<COND (<ZERO? .TICK>
<ZPUT ,CLOCK-HAND ,C-RTN 0>)>
<COND (<ZAPPLY .RTN>
<SET FLG T>)>
<COND (<AND <ZERO? .Q?>
<T? <ZGET ,CLOCK-HAND ,C-RTN>>>
<SET Q? T>)>)>)>)>
<SETG CLOCK-HAND <ZREST ,CLOCK-HAND ,C-INTLEN>>
<COND (<ZERO? .Q?>
<SETG C-INTS <+ ,C-INTS ,C-INTLEN>>)>>
<RETURN .FLG .CLOCKER>>
; "This runs every turn..."
<MSETG DELAY-FACTOR 3>
<SETG BP-DELAY 2>
<DEFINE I-BLOOD-PRESSURE ("AUX" (SYSTOLIC:FIX <GET-SYSTOLIC>)
(DIASTOLIC:FIX <ANDB ,BP *377*>))
<COND (<EQUAL? .SYSTOLIC 120>
<>)
(<L? <SETG BP-DELAY <- ,BP-DELAY:FIX 1>> 1>
<SETG BP-DELAY ,DELAY-FACTOR>
<COND (<G? .SYSTOLIC 120>
<UPDATE-BP -2 T T>)
(<L? .SYSTOLIC 120>
<UPDATE-BP 2 T T>)>)>>

1202
computer.zil Normal file

File diff suppressed because it is too large Load Diff

92
computerdefs.zil Normal file
View File

@ -0,0 +1,92 @@
"COMPUTERDEFS for BUREAUCRACY: Copyright (C)1987 Infocom, Inc.
All rights reserved."
<ZSECTION "COMPUTERDEFS">
<FILE-FLAGS MDL-ZIL?>
<INCLUDE "FORMDEFS">
<USE "NEWSTRUC">
<SET-DEFSTRUCT-FILE-DEFAULTS ('NTH ZGET) ('PUT ZPUT) ('START-OFFSET 0)
'NODECL>
<DEFINE-GLOBALS COMPUTER-GLOBALS
(LAST-LINE-USED:FIX BYTE 0)
(TIMES-THROUGH-LOOP:FIX BYTE 0)
(FILES-ON-SCREEN? BYTE <>)
(TELECOM? BYTE <>)
(EXITED-ALREADY? BYTE <>)
(COMPUTER-DEAD? BYTE <>)
(COMP-X:FIX BYTE 0)
(COMP-Y:FIX BYTE 0)
(CURRENT-TARGET-NAME <>) ; "String for interrupt messages"
(REAL-TARGET-NAME <>) ; "LTABLE for looking stuff up in directory"
(REMAINING-TARGET-TURNS:FIX BYTE 0) ; "Turns left until this one's done"
(LINES-TO-NEXT-TARGET:FIX BYTE 0) ;"Lines to output before select next target"
(TERMINATE-CURRENT:FIX BYTE 0) ; "Lines to output before terminating this one"
(COMMANDS-SINCE-START:FIX BYTE 0); "Command lines read since target started"
(DIE-ON-NEXT-COMMAND BYTE <>) ; "To avoid hair of faking non-local return"
(WILL-WIN? BYTE <>) ; "True if killed computer"
(FERROR-ACTIVE? BYTE <>)>
<MSETG COMPUTER-REAL-WIDTH 40>
<MSETG COMPUTER-WIDTH 38>
<MSETG COMPUTER-HEIGHT 16>
<MSETG COMPUTER-REAL-HEIGHT 19>
<MSETG COMPUTER-FIRST-LINE 3>
<MSETG COMPUTER-COMMAND-LINE 0>
<MSETG COMPUTER-ERROR-LINE 1>
<MSETG DIR-ENTRY-INVISIBLE 1>
<DEFSTRUCT DIR-ENTRY (TABLE ('NTH GETB) ('PUT PUTB))
(DIR-ROUTINE ANY 'NTH ZGET 'PUT ZPUT 'NONE) ; "Routine to call"
(DIR-BITS FIX 'NTH ZGET 'PUT ZPUT 0)
(DIR-HELP ANY 'NTH ZGET 'PUT ZPUT <>) ; "Brief help msg"
(DIR-DUMMY-1 ANY 'NONE)
(DIR-DUMMY-2 ANY 'NONE)
(DIR-DUMMY-3 ANY 'NONE)
(DIR-NAMLEN FIX)
(DIR-DATA ANY 'NONE)>
<MSETG DIR-DATA-OFFSET 7>
<MSETG DIR-HEADER-LEN 6>
; "Build a directory entry"
<DEFINE20 DIR-ENTRY (ROUTINE NAME:STRING HELP:ANY "TUPLE" BITS "AUX" DE (BW 0)
(PURE? T))
<COND (<AND <NOT <EMPTY? .BITS>>
<==? <1 .BITS> IMPURE>>
<SET PURE? <>>
<SET BITS <REST .BITS>>)>
<SET DE <CHTYPE <EVAL <FORM ITABLE <+ 1 ,DIR-HEADER-LEN <LENGTH .NAME>>
<COND (.PURE?
(BYTE PURE))
(T (BYTE))>>>
DIR-ENTRY>>
<MAPF <>
<FUNCTION (BIT)
<COND (<TYPE? .BIT FIX>)
(<AND <GASSIGNED? .BIT>
<TYPE? ,.BIT FIX>>
<SET BIT ,.BIT>)>
<COND (<TYPE? .BIT FIX>
<SET BW <ORB .BW .BIT>>)>>
.BITS>
<MAKE-DIR-ENTRY 'DIR-ENTRY .DE
'DIR-ROUTINE .ROUTINE
'DIR-HELP .HELP
'DIR-BITS .BW
'DIR-NAMLEN <LENGTH .NAME>>
<PROG ((N ,DIR-DATA-OFFSET))
<MAPF <>
<FUNCTION (CHR)
<PUTB .DE .N <ASCII .CHR>>
<SET N <+ .N 1>>>
.NAME>>
.DE>
<ENDSECTION>

1264
events.zil Normal file

File diff suppressed because it is too large Load Diff

194
foo.mud Normal file
View File

@ -0,0 +1,194 @@
BUREAUCRACY REWRITE
REVISED SCENARIO (PLOT ONLY)
v1 of Jan 87 13:50
**************************
1) HOUSE, BANK, LLAMA, MAIL
You have just moved into your new house. Everything is fine. You have
a new job at Happitec - Vice president of Systems Development. The fact
that your previous job ended in something of a disaster when roughly
150,000 people were seriously inconvenienced by a rather buggy program
for which you were responsible is neither here nor there. The internal
bureacracy of your previous company took care of that, and anyway - when
was an information specialist's career ever set back by a disaster of
that sort?
The game opens in the living room of your new house. Everything is
dandy, as we said. The house is much bigger than your previous
apartment, the area is nicer, you will be earning more money and, best
of all, you are leaving today on a two-week vacation, all expenses paid.
The only thing you will need is the cab fare to the airport.
Unfortunately, due to a tiny little foul-up at the bank (which, you seem
to recall, uses software produced by your previous employers) your
change-of-address card has not been actioned by the bank. The reason?
The DP department can only accept change-of-address notifications on
official change-of-address forms. A change-of-address form has been
sent to you... at your old address, along with your checkbook and your
new credit card (which expired last week).
Your quandary? To get hold of enough money to get a cab to the airport
to get your flight to Paris, so that you will be able to survive for a
fortnight. After all, once you start your new job, everything will be
allright.
In the package is a letter from your new boss, Ollie Fassbaoum, telling
you how to pick up your airline ticket. He also mentions that a check
for $75 is on its way to you in the mail.
So you have two alternative problems. Problem A is to get your bank
either to cash you a counter cheque or to get a cheque book to you
QUICKLY so that you can get cash from your bank. Problem B is the
alternative, which is to get hold of the money order which Fassbaum has
sent.
You can attack these problems in either order. Doesn't actually matter
which. Here they are:
PROBLEM A: THE BANK
STARTING INFORMATION: The bank has failed to act upon the change of
address card you sent it, because it was not on a proper form. They
HAVE used their initiative to the extent that, realising you needed a
change of address form, they sent you one. Unfortunately they sent it
to your old address.
The new tenant of your old apartment has in fact received this form.
He has also previously received a cheque book and a credit card, among
other mail, which he politely returned to your bank with "PLEASE
FORWARD TO NEW ADDRESS" written on it. The change of address form is
the last straw. His attitude is "Fuck this; tell your bank about your
new address, I have had enough." He has gone on holiday to stalk Ai-Ai
in Zalagasa and won't be back for three weeks.
So you might think of ringing up the bank to ask for a NEW change of
address form. If you do this, you will get Pongo the bank parrot, who
will tell you that according to their records, they sent a change of
address form to your old address (You already know this) and they can't
send another one out until the original is returned. They cannot
possibly bypass the system in your case because (A) how would it be if
everyone bypassed the system, and anyway (B) the system was manufactured
by the Deep Thought Corporation of America Inc and is notoriously
inflexible. They have had someone in to look at it but things only seem
to have got worse. Ringing the bank is therefore a no-win game play.
You might also think of actually visiting the bank to see if they can
help. The bank staff are however completely incapable of helping you.
The systems have been automated to such an extent that the humans are
reduced to mere robots and show no initiative. They are completely
intimidated by the computer, which anyway has behaving strangely of late
so they don't want to take the risk of offending it. The only thing you
learn is that they COULD cash a money order. Since this is the thing
that Fassbaum is sending you, it is obvious that that's what you need to
find.
If you haven't already looked in your mailbox at home, you'll perhaps do
so now. You will find that someone else's mail is in it, which might
alert you to the fact that something is wrong with the mailman. Perhaps
he is a DTC robot? Perhaps he is just a prick. Anyway, all the mail is
misdirected, and it's obvious that if you are ever going to find the
Fassbaum money order you will have to look in someone else's mail. You
will in fact NOT find the money order until you have opened all the
available mail.
The mail problems remain exactly as they currently are except perhaps a
few more pointers ?
The LAST batch of mail you find will contain two items: a money order
addressed to you, and an envelope addressed to someone else. The money
order will have been destroyed in one way or another, depending on where
you find it. It can have been licked by the llama, plunged into water
by the paranoid, ripped to shreds by the macaw or cut to ribbons by the
collector. Every batch of mail will also contain a special offer
suggesting that you, the lucky recipient, might have won $25,000. The
last envelope will also be another stupid thing suggesting that you have
won $25,000 and will ONLY be morally distinguishable from the other junk
mail by the fact that it is a real object. If you assume that it is
just junk, you will not ask to pick it up (**YOU AUTOMATICALLY PICK UP
THE MONEY ORDER, JUST TO MAKE THINGS SUBTLE**) and will never get to the
airport. If, however, you DO pick it up, you will find that it is
addressed to a silly name at a non-existent street address (You will be
told this in the text) so that you are perfectly justified in opening it
and taking the money order it contains.
You then have to return to the bank with the money order and run through
the bureacratic process of cashing it. This will involve the silly
forms (siller than now but less paranoid) but in the end you will get
the money.
Throughout this process the nerd will keep appearing and try to sell you
things to do with computing- books on protection systems, hacking
manuals, interesting terminal numbers and so forth. They will always
cost slightly more money than you have after buying your cab fare, so if
you accept his stupid offers you won't be able to get to the airport.
Also throughout this process, pseudo DTC repair men will keep appearing
out of the corner of your eye.
The restaurant remains the same. If you don't eat you die. The
waitress runs away after a pause because something goes wrong with the
computer terminal she is using to punch in the order. The waiter comes
out and takes your order but whatever you ask for he brings you a bill
for $475.50. When you quesiton him about the bill, he explains that the
DTC computer is fubar and the real bill is $4.50
>ASK WAITER ABOUT COMPUTER
"It's a DTC. As I said, it's Fubar."
>ASK WAITER ABOUT FUBAR
"Fouled Up Beyond All Recognition. As I said, it's a DTC"
Outside, the waitress and a pseudo-DTC engineer in a white coat with a
walkie-talkie is snigelling (a very private in-joke word which will not
be explained) over something with the waitress. They disappear when they
see you.
DTC engineers are found everywhere.
The general principle is that DTC is the Frobozzco of the computer world
and that companies use DTC foul-ups to excuse their own infelxibility.
The CAB COMPANY and AIRPORT work as normal except that we will find some
way of blaming the snafu at ATC on the DTC computer.
The AIRPLANE PUZZLE we have already dealt with.
Perhaps the piped music system is a DTC product as well, and Boysenberry
could have been a once-creative company now absorbed into the DTC
bureacracy.
The airplane pay-off is the stewardess telling you that it is not
actually going to crash, it is in fact a totally inexplicable computer
malfunction.
ZALAGASA, THE SILICON MINE, THE MAZE
===================================
Zalagasa could be a real or a fantastical place. It is never actually
made explicit which is real, although attention is drawn to your labile
emotional state at the time.
While you are in the cooking pot it occurs to you that a series of
bureacratic and computer foul-ups have led to this sorry plight, but on
the other hand you have at last found tranquility in a place where
neither computers nor bureacratic conventions exist. Witness the
charming primitivism of the Zalagasans dancing round the pot chanting
their age-old chant of ZBUG! ZBUG! ZBUG!.
You solve the eclipse prediction puzzle as before and escape from the
cooking pot. One of the Zalagasans comes back and engages you in
conversation, observing that your Boysenberry is in fact a rather
primitive version and that theirs has a much more sophisticated BIOS
which was introduced to them by a mysterious nerd-like figure who
emerges periodically from a hole in the ground. He tells you that that
hole in the ground is over to the west.
This leads you into the Silicon Mine, which is in fact the Quicksand
renamed PLUS the

131
formdefs.zil Normal file
View File

@ -0,0 +1,131 @@
"FORMDEFS for BUREAUCRACY: Copyright (C)1987 Infocom, Inc. All rights reserved."
<ZSECTION "FORMDEFS">
<FILE-FLAGS MDL-ZIL?>
<USE "NEWSTRUC">
<SET-DEFSTRUCT-FILE-DEFAULTS ('NTH ZGET) ('PUT ZPUT) ('START-OFFSET 0)
'NODECL>
<SETG FORM-X 0>
<SETG FORM-Y 0>
"Args for field functions"
<MSETG FORM-EXIT-FIELD 1>
<MSETG FORM-ADD-CHAR 2>
<MSETG FORM-DO-ECHO? 3>
<MSETG FORM-UPPERCASE? 4>
<MSETG FORM-OK-TO-ENTER-FIELD? 5>
<MSETG FORM-FIELD-RESET 6>
<MSETG FORM-WIDTH 40>
<MSETG FORM-LENGTH 18>
<MSETG ERROR-LINE 3>
<MSETG FIRST-FORM-LINE 5>
; "Structure to represent a single field."
; "Form is just a table of fields. Internally, we enforce the restriction
that there can be no more than two fields on a line."
<DEFSTRUCT FIELD (TABLE ('NTH GETB) ('PUT PUTB))
(FIELD-PROMPT ANY 'NTH ZGET 'PUT ZPUT 'NONE)
; "Compressed string, we hope..."
(FIELD-FCN ANY 'NTH ZGET 'PUT ZPUT 'NONE)
; "Routine to call at various times"
(FIELD-ABUSE ANY 'NTH ZGET 'PUT ZPUT <>)
(FIELD-DUMMY-1 ANY 'NONE)
(FIELD-DUMMY-2 ANY 'NONE)
(FIELD-DUMMY-3 ANY 'NONE)
(FIELD-PROMPTLEN FIX) ; "Length of frob"
(FIELD-X FIX)
(FIELD-Y FIX)
(FIELD-MAXLEN FIX)
(FIELD-DONE FIX 0)
; "This field can't be moved, because it makes the data in the
field look like a byte table with a length..."
(FIELD-CURLEN FIX)
(FIELD-DATA ANY 'NONE)>
<MSETG FIELD-DATA-OFFSET 12>
; "Field syntax is
(name:ATOM prompt:STRING maxlen:FIX OPT init:STRING)"
<DEFMAC BUILD-FORM (NAME "ARGS" FIELDS)
<SETG20 CURRENT-FORM-NAME .NAME>
<REALLY-BUILD-FORM !.FIELDS>>
<DEFINE20 GET-FIELD-WIDTH (FIELD:LIST)
<+ <LENGTH <2 .FIELD>:STRING> <3 .FIELD>:FIX 1>>
<DEFINE20 REALLY-BUILD-FORM ("TUPLE" FIELDS "AUX" (FIELDN 1)
(LINE ,FIRST-FORM-LINE))
<SETG20 FIELDS (T)>
<SETG20 FIELDL ,FIELDS>
<REPEAT (FIELD)
<COND (<EMPTY? .FIELDS> <RETURN>)>
<SET FIELD <1 .FIELDS>>
<COND (<AND <NOT <EMPTY? <REST .FIELDS>>>
<L? <+ <GET-FIELD-WIDTH .FIELD>
<GET-FIELD-WIDTH <2 .FIELDS>>
1>
<- ,FORM-WIDTH 2>>>
<BUILD-LINE .LINE .FIELD .FIELDN <2 .FIELDS> <+ .FIELDN 1>>
<SET FIELDN <+ .FIELDN 2>>
<SET FIELDS <REST .FIELDS>>)
(T
<BUILD-LINE .LINE .FIELD .FIELDN>
<SET FIELDN <+ .FIELDN 1>>)>
<SET LINE <+ .LINE 1>>
<SET FIELDS <REST .FIELDS>>>
<FINISH-FORM-BUILD>>
<DEFINE20 FINISH-FORM-BUILD ()
<EVAL <FORM GLOBAL ,CURRENT-FORM-NAME <TABLE (PURE LENGTH)
!<REST ,FIELDS>>>>
<COND (<G? <FIELD-Y <NTH ,FIELDS <LENGTH ,FIELDS>>> <- ,FORM-LENGTH 1>>
<ERROR FORM-TOO-BIG <FIELD-Y <NTH ,FIELDS <LENGTH ,FIELDS>>>
,FORM-LENGTH>)>>
<DEFINE20 BUILD-LINE (LINENO:FIX F1:LIST F1N:FIX "OPT" F2:LIST F2N:FIX)
<BUILD-FIELD .F1 .F1N 1 .LINENO>
<COND (<ASSIGNED? F2>
<BUILD-FIELD .F2 .F2N <- ,FORM-WIDTH <GET-FIELD-WIDTH .F2> 2>
.LINENO>)>>
<DEFINE20 BUILD-FIELD (FIELD:LIST FIELDNO:FIX X:FIX Y:FIX "AUX" FTBL)
<COND (<G? <+ <LENGTH <2 .FIELD>> 1 <3 .FIELD>>
<- ,FORM-WIDTH 2>>
<ERROR FIELD-TOO-WIDE-FOR-FORM!-ERRORS .FIELD .FIELDNO .X .Y>)>
<MAKE-FIELD 'FIELD <SET FTBL <CHTYPE <ITABLE <+ ,FIELD-DATA-OFFSET
<3 .FIELD>:FIX>
(BYTE)>
FIELD>>
'FIELD-PROMPT <2 .FIELD>
'FIELD-PROMPTLEN <+ <LENGTH <2 .FIELD>> 1>
'FIELD-X .X
'FIELD-Y .Y
'FIELD-MAXLEN <3 .FIELD>
'FIELD-CURLEN 0
'FIELD-ABUSE <COND (<TYPE? <NTH .FIELD <LENGTH .FIELD>> TABLE>
<NTH .FIELD <LENGTH .FIELD>>)
(<TYPE? <NTH .FIELD <LENGTH .FIELD>> FORM>
<EVAL <NTH .FIELD <LENGTH .FIELD>>>)>>
<COND (<TYPE? <NTH .FIELD <LENGTH .FIELD>> ATOM>
<FIELD-FCN .FTBL <NTH .FIELD <LENGTH .FIELD>>>)
(<TYPE? <NTH .FIELD <- <LENGTH .FIELD> 1>> ATOM>
<FIELD-FCN .FTBL <NTH .FIELD <- <LENGTH .FIELD> 1>>>)>
<EVAL <FORM CONSTANT <1 .FIELD> <- .FIELDNO 1>>>
<SETG20 FIELDL <REST <PUTREST ,FIELDL (.FTBL)>>>
<COND (<AND <G? <LENGTH .FIELD> 3>
<TYPE? <4 .FIELD> STRING>>
<FIELD-CURLEN .FTBL <LENGTH <4 .FIELD>:STRING>>
<REPEAT ((OFFS ,FIELD-DATA-OFFSET) (STR:STRING <4 .FIELD>))
<PUTB .FTBL .OFFS <BYTE <ASCII <1 .STR>>>>
<COND (<EMPTY? <SET STR <REST .STR>>>
<RETURN>)>
<SET OFFS <+ .OFFS 1>>>)>>
<ENDSECTION>

595
forms.zil Normal file
View File

@ -0,0 +1,595 @@
"FORMS for BUREAUCRACY: Copyright (C)1987 Infocom, Inc. All rights reserved."
<FILE-FLAGS MDL-ZIL?>
<INCLUDE "OLD-PARSERDEFS" "FORMDEFS" "COMPUTERDEFS">
<SETG MARGIN 0>
<SETG FLINE 0>
<GDECL (MARGIN FLINE) FIX>
<CONSTANT FORM-HISTORY <ITABLE 20 (BYTE)>>
<SETG FORM-COMPUTER? <>>
<DEFINE DRAW-FORM (WHICH NAME)
<SETG MARGIN </ <- ,WIDTH ,FORM-WIDTH> 2>>
<SETG MARGIN <+ ,MARGIN 1>>
<SETG FLINE </ <- ,HEIGHT ,FORM-LENGTH> 2>>
<SETG FLINE <+ ,FLINE 1>>
<CLEAR -1>
<SPLIT <- ,HEIGHT 1>>
<SCREEN ,S-WINDOW>
<ZBUFOUT <>>
<HLIGHT ,H-NORMAL>
<HLIGHT ,H-INVERSE>
<BLANK-LINE 0>
<SET-FORM-CURS 1 0>
<TELL .NAME>
<BLANK-LINE 2>
<OPEN-LINE 3>
<TELL "Type ^ to back up a field. Thank you.">
<CLOSE-LINE 3>
<BLANK-LINE 4>
<REPEAT ((RLINE ,FIRST-FORM-LINE)
(LEN:FIX <ZGET .WHICH 0>) (FIELDS <ZREST .WHICH 2>) TF)
<COND (<0? .LEN>
<BLANK-LINE <+ .RLINE 1>>
<RETURN>)>
<SET TF <ZGET .FIELDS 0>>
<OPEN-LINE <SET RLINE <FIELD-Y .TF>>>
<TELL <FIELD-PROMPT .TF>>
<COND (<AND <G? .LEN 1>
<SET TF <ZGET .FIELDS 1>>
<==? <FIELD-Y .TF> .RLINE>>
<SET-FORM-CURS .RLINE <FIELD-X .TF>>
<SET FIELDS <ZREST .FIELDS 2>>
<SET LEN <- .LEN 1>>
<TELL <FIELD-PROMPT .TF>>)>
<CLOSE-LINE .RLINE>
<SET FIELDS <ZREST .FIELDS 2>>
<SET LEN <- .LEN 1>>>
<HLIGHT ,H-NORMAL>>
<DEFINE SET-FORM-CURS (Y:FIX X:FIX)
<SETG FORM-X .X>
<SETG FORM-Y .Y>
<CURSET <+ ,FLINE .Y> <+ .X ,MARGIN>>>
<DEFINE BLANK-LINE (N)
<SET-FORM-CURS .N 0>
<PRINT-SPACES ,FORM-WIDTH>>
<DEFINE OPEN-LINE (N)
<SET-FORM-CURS .N 0>
<TELL " ">
<HLIGHT ,H-NORMAL>
<HLIGHT ,H-BOLD>>
<DEFINE CLOSE-LINE (N)
<SET-FORM-CURS .N <- ,FORM-WIDTH 1>>
<HLIGHT ,H-NORMAL>
<HLIGHT ,H-INVERSE>
<TELL " ">>
<BUILD-FORM LICENSE-FORM
(LAST-NAME "Last name:" 21 "Chomper" FF-NAME
<PLTABLE "How embarrassing for you"
"A well-known criminal family">)
(FIRST-NAME "First name:" 25 "Random" FF-NAME
<PLTABLE "Your parents had the last laugh">)
(MIDDLE-INITIAL "Middle initial:" 1 "Q" FF-MIDDLE-INITIAL)
(YOUR-SEX "Your sex (M/F):" 1 "M" FF-SEX)
(STREET-NUMBER "House number:" 4 "69"
FF-STREET-NUMBER
<PLTABLE "Due to be condemned">)
(STREET-NAME "Street name:" 24 "Mandalay"
<PLTABLE "The bad part of town"
"Next to the dump">)
(CITY-NAME "City:" 18 "Newton" <PLTABLE "What a dump"
"What a pit"
"You'd better move again">)
(STATE-NAME "State:" 5 "MA" FF-STATE)
(ZIP-CODE "Zip:" 6 "02174")
(PHONE-NUMBER "Phone:" 17 "646 9105" FF-PHONE-NUMBER)
(EMPLOYER-NAME "Last employer but one:" 14 "Infocom"
<PLTABLE "Now in Chapter 11"
"Now in liquidation"
"A sweatshop"
"Run by Bozo the Clown"
"Much happier without you">)
(LEAST-FAVORITE-COLOR "Least favourite colour:" 12 "red"
FF-LEAST-FAVORITE-COLOR)
(FRIEND "Name of girl/boy friend:" 11 "Dunbar"
<PLTABLE "What a dog"
"Still? You should have learned"
"Surely you can do better"
"One of a long line of losers">)
(LAST-FRIEND "Previous girl/boy friend:" 10 "None"
<PLTABLE "You were better off then"
"One of a long line of losers"
"Now a millionaire"
"Now a famous porno star">)>
<SETG SEX <>> ; "True--> female"
<SETG FX 0>
<SETG FY 0>
<GDECL (FX FY) FIX>
<DEFINE FERROR (STR "OPT" (NOTE? <>))
<CLEAR-FERROR>
<SETG FERROR-COUNT <+ ,FERROR-COUNT:FIX 1>>
<COND (,FORM-COMPUTER?
<SET-FORM-CURS ,COMPUTER-ERROR-LINE 1>
<HLIGHT ,H-NORMAL>)
(T
<SET-FORM-CURS ,ERROR-LINE 1>
<HLIGHT ,H-BOLD>)>
<COND (<T? .NOTE?>
<TELL "NOTE">)
(T
<TELL "ERROR">)>
<TELL ": " .STR ".">
<HLIGHT ,H-NORMAL>
<COND (,FORM-COMPUTER? <HLIGHT ,H-INVERSE>)>
<SET-FORM-CURS ,FY ,FX>
<SOUND ,S-BOOP>>
<DEFINE CLEAR-FERROR ()
<SCREEN ,S-WINDOW>
<HLIGHT ,H-NORMAL>
<COND (,FORM-COMPUTER?
<SET-FORM-CURS ,COMPUTER-ERROR-LINE 1>
<PRINT-SPACES ,COMPUTER-WIDTH>
<HLIGHT ,H-INVERSE>)
(T
<SET-FORM-CURS ,ERROR-LINE 1>
<PRINT-SPACES <- ,FORM-WIDTH 2>>)>
<SET-FORM-CURS ,FY ,FX>>
<DEFINE FILL-FIELD FF (FIELD:FIX WHICH "OPT" (ERR? <>)
"AUX" (CNT 0) (PTR ,FIELD-DATA-OFFSET)
MAX CHAR:FIX TBL:FIELD OLDLEN (ECHO? T))
<COND (,FORM-COMPUTER?
<HLIGHT ,H-INVERSE>)
(T
<HLIGHT ,H-NORMAL>)>
<SET TBL <ZGET .WHICH .FIELD>>
<COND (<AND <T? <FIELD-FCN .TBL>>
<F? <ZAPPLY <FIELD-FCN .TBL> ,FORM-DO-ECHO? .TBL>>>
<SET ECHO? <>>)>
<SET MAX <FIELD-MAXLEN .TBL>>
<SETG FX <+ <FIELD-X .TBL> <FIELD-PROMPTLEN .TBL>>>
<SETG FY <FIELD-Y .TBL>>
<SET OLDLEN <FIELD-CURLEN .TBL>>
<SET-FORM-CURS ,FY ,FX>
<COND (<AND <ZERO? .CNT>
<G? .OLDLEN 0>>
<FIELD-CURLEN .TBL 0>
<SET OLDLEN 0>
<PRINT-SPACES .MAX>
<SET-FORM-CURS ,FY ,FX>)>
<REPEAT ()
<SET CHAR <INPUT 1>>
<COND (<==? .CHAR 13> ; "CR?"
<COND (<0? .CNT>
<COND (<G? .OLDLEN 0>
<RETURN T .FF>)>
<SET ERR? T>
<COND (<T? <TELECOM?>>
<FERROR "INCOMPLETE-FIELD-ENTRY">)
(T
<FERROR "Incomplete field entry">)>
<AGAIN>)
(T
<COND (.ERR?
<SET ERR? <>>
<CLEAR-FERROR>)>
<FIELD-CURLEN .TBL .CNT>
<FORM-NAME .FIELD>
<RETURN T .FF>)>)
(<EQUAL? .CHAR %<ASCII !\^> 14>
<COND (.ERR?
<CLEAR-FERROR>)>
<COND (<G? .OLDLEN 0>
<FIELD-CURLEN .TBL .OLDLEN>)>
<RETURN <> .FF>)
(<EQUAL? .CHAR 127 8> ; "Backspace?"
<COND (<0? .CNT>
<SET ERR? T>
<COND (<T? <TELECOM?>>
<FERROR "1ST-CHAR-IN-FIELD">)
(T
<FERROR "1st char in field">)>
<AGAIN>)>
<COND (.ERR?
<SET ERR? <>>
<CLEAR-FERROR>)>
<FIELD-CURLEN .TBL <SET CNT <- .CNT 1>>>
<COND (.ECHO?
<SETG FX <- ,FX 1>>
<SET-FORM-CURS ,FY ,FX>
<PRINTC 32>
<SET-FORM-CURS ,FY ,FX>)>
<PUTB .TBL <SET PTR <- .PTR 1>> 0>
<AGAIN>)
(<==? .CNT .MAX>
<SET ERR? T>
<FERROR "End of field">
<AGAIN>)
(<OR <F? <FIELD-FCN .TBL>>
<ZAPPLY <FIELD-FCN .TBL> ,FORM-ADD-CHAR .TBL .CHAR>>
; "OK to use this char?"
<COND (<AND <G? .CHAR %<- <ASCII !\a> 1>>
<L? .CHAR %<+ <ASCII !\z> 1>>>
<SET CHAR <- .CHAR 32>>)>
<COND (.ECHO?
<PRINTC .CHAR>
<SETG FX <+ ,FX 1>>)>
<PUTB .TBL .PTR .CHAR>
<SET PTR <+ .PTR 1>>
<FIELD-CURLEN .TBL <SET CNT <+ .CNT 1>>>)
(T
<SET ERR? T>
<AGAIN>)>
<COND (.ERR?
<SET ERR? <>>
<CLEAR-FERROR>)>>>
"Functions for individual fields"
<DEFINE FF-STATE (CONTEXT TBL "OPT" CHAR)
<COND (<AND <==? .CONTEXT ,FORM-UPPERCASE?>
<==? <FIELD-CURLEN .TBL> 2>>
2)
(T T)>>
<DEFINE FF-LEAST-FAVORITE-COLOR (CONTEXT TBL "OPT" CHAR)
<COND (<==? .CONTEXT ,FORM-UPPERCASE?> <>)
(T T)>>
<DEFINE FF-STREET-NUMBER FFS (CONTEXT TBL "OPT" CHAR "AUX" X
(VAL T))
<COND (<==? .CONTEXT ,FORM-OK-TO-ENTER-FIELD?>
; "Force street number after name..."
<COND (<F? <FIELD-DONE <ZGET ,LICENSE-FORM <+ ,STREET-NAME 1>>>>
<>)
(T T)>)
(<==? .CONTEXT ,FORM-EXIT-FIELD>
<SET X <TEXT-TO-VALUE
<SET TBL <ZREST .TBL <- ,FIELD-DATA-OFFSET 1>>>>>
<COND (<L? .X 10>
<FERROR "We know it's actually 15">
<PUTB .TBL 0 2>
<PUTB .TBL 1 %<ASCII !\1>>
<PUTB .TBL 2 %<ASCII !\5>>
<SET X 15>
<SET VAL 3>)>
<PUTP ,OUTSIDE-HOUSE ,P?STADDR .X>
<PUTP ,OUTSIDE-MANSION ,P?STADDR <SET X <+ .X 1>>>
<PUTP ,OUTSIDE-FARM ,P?STADDR <SET X <+ .X 1>>>
<PUTP ,OUTSIDE-FORT ,P?STADDR <SET X <+ .X 1>>>
<PUTP ,ST-B ,P?STADDR <SET X <- .X 4>>>
<PUTP ,ST-A ,P?STADDR <SET X <- .X 1>>>
.VAL)
(<==? .CONTEXT ,FORM-ADD-CHAR>
<COND (<CHECK-NUMBER .CHAR> T)
(T
<FERROR "Not a number">
<>)>)
(T T)>>
<DEFINE FF-PHONE-NUMBER (CONTEXT TBL "OPT" CHAR)
<COND (<==? .CONTEXT ,FORM-ADD-CHAR>
<COND (<OR <CHECK-NUMBER .CHAR>
<EQUAL? .CHAR 32 %<ASCII !\->>
<EQUAL? .CHAR %<ASCII !\(> %<ASCII !\)>>>
T)
(T
<FERROR "Invalid character">
<>)>)
(T T)>>
<DEFINE CHECK-NUMBER (CHAR:FIX)
<COND (<AND <G=? .CHAR %<ASCII !\0>>
<L=? .CHAR %<ASCII !\9>>>
T)
(T <>)>>
<DEFINE FF-SEX (CONTEXT TBL "OPT" CHAR)
<COND (<==? .CONTEXT ,FORM-EXIT-FIELD>
<COND (<EQUAL? <FIELD-DATA .TBL> %<ASCII !\F> %<ASCII !\f>>
<SETG SEX T>)
(T
<SETG SEX <>>)>
T)
(<==? .CONTEXT ,FORM-ADD-CHAR>
<COND (<OR <EQUAL? .CHAR %<ASCII !\M> %<ASCII !\m>>
<EQUAL? .CHAR %<ASCII !\F> %<ASCII !\f>>>
T)
(T
<FERROR "Entry not M or F">
<>)>)
(T T)>>
<DEFINE FF-MIDDLE-INITIAL (CONTEXT TBL "OPT" CHAR:FIX)
<COND (<==? .CONTEXT ,FORM-ADD-CHAR>
<COND (<OR <AND <G=? .CHAR %<ASCII !\A>>
<L=? .CHAR %<ASCII !\Z>>>
<AND <G=? .CHAR %<ASCII !\a>>
<L=? .CHAR %<ASCII !\z>>>>
T)
(T
<FERROR "Invalid character">
<>)>)
(T T)>>
<DEFINE FF-NAME FF-NAME (CONTEXT TBL "OPT" CHAR)
<COND (<==? .CONTEXT ,FORM-ADD-CHAR>
<COND (<EQUAL? .CHAR 32 %<ASCII !\'> %<ASCII !\->>
<COND (<0? <FIELD-CURLEN .TBL>>
<FERROR "Illegal 1st character">
<>)
(T
<REPEAT ((PTR ,FIELD-DATA-OFFSET)
(CNT <FIELD-CURLEN .TBL>))
<COND (<==? <CHTYPE <GETB .TBL .PTR> FIX> .CHAR>
<COND (<==? .CHAR 32>
<FERROR "Too many spaces">)
(<==? .CHAR %<ASCII !\'>>
<FERROR "Too many apostrophes">)
(T
<FERROR "Too many hyphens">)>
<RETURN <> .FF-NAME>)>
<COND (<0? <SET CNT <- .CNT 1>>>
<RETURN>)>
<SET PTR <+ .PTR 1>>>
T)>)
(T T)>)
(T T)>>
<DEFINE FORM-NAME FN (FIELD "AUX" (SPTR ,FIELD-DATA-OFFSET)
(DPTR ,FIELD-DATA-OFFSET) (CNT 1) (CAP? <>)
LEN TBL CHAR:FIX (UC? T) (ALL-UC? <>) TV)
<SET TBL <ZGET ,LICENSE-FORM <SET FIELD <+ .FIELD 1>>>>
<SET LEN <FIELD-CURLEN .TBL>>
<COND
(<0? .LEN>
<RETURN <> .FN>)
(T
<COND (<AND <T? <FIELD-FCN .TBL>>
<F? <SET TV <ZAPPLY <FIELD-FCN .TBL>
,FORM-UPPERCASE? .TBL>>>>
<SET UC? <>>)>
<COND (<==? .TV 2> <SET ALL-UC? T>)>
<REPEAT ()
<SET CHAR <CHTYPE <GETB .TBL .SPTR> FIX>>
<COND (<AND <G? .CHAR %<- <ASCII !\A> 1>>
<L? .CHAR %<+ <ASCII !\Z> 1>>>
<COND (<F? .UC?>
<SET CHAR <+ .CHAR 32>>)
(<OR <T? .ALL-UC?> <==? .CNT 1>>
T)
(.CAP?
<SET CAP? <>>)
(T
<SET CHAR <+ .CHAR 32>>)>)
(<EQUAL? .CHAR 32 %<ASCII !\'> %<ASCII !\->>
<COND (<NOT .CAP?>
<SET CAP? T>)
(T
<SET SPTR <+ .SPTR 1>>
<COND (<G? <SET CNT <+ .CNT 1>> .LEN>
<RETURN>)>
<AGAIN>)>)>
<PUTB .TBL .DPTR .CHAR>
<SET DPTR <+ .DPTR 1>>
<SET SPTR <+ .SPTR 1>>
<COND (<G? <SET CNT <+ .CNT 1>> .LEN>
<RETURN>)>>)>>
<DEFINE GET-FORM ("AUX" X)
<CLEAR -1>
<ZCRLF>
<ZCRLF>
<ZCRLF>
<HLIGHT ,H-BOLD>
<TELL "Important!" CR>
<HLIGHT ,H-NORMAL>
<TELL CR
"Our records show that you do not have a licence to operate this software.|
|
Normally, you would be required to complete a Licence Application Form and mail it (with proof of purchase) to our Licensing Department, and then wait the customary four to six weeks for processing.|
|
Luckily, for your convenience, we have, at the last minute and at great expense, installed a remarkable new on-line electronic application form on this very disk, which will be processed by our modern 24-hour computer service moments after you fill it in.|
|
[Press any key to begin.]" CR>
<DEBUGGING-CODE
<COND (<N==? <SET X <INPUT 1>> 127>
<FILL-FORM ,LICENSE-FORM
" SOFTWARE LICENCE APPLICATION ">)
(T
<CLEAR -1>
<INIT-STATUS-LINE>
<ZCRLF>)>
<BIND ()
<INPUT 1>
<FILL-FORM ,LICENSE-FORM
" SOFTWARE LICENCE APPLICATION ">>>>
<DEFINE PICK-FIELD (WHICH LEN:FIX HISTVEC:TABLE HISTLEN:FIX "AUX" N F)
<REPEAT ((PASSES 0) (M 0))
<COND (<G? <SET PASSES <+ .PASSES 1>> .LEN>
; "If we've been through the loop too many times without a hit,
just start at the beginning and proceed until we find something
or run out (in 2nd case, return -1)"
<COND (<G? <SET M <+ .M 1>> .LEN>
<SET N -1>
<RETURN>)>
<SET N <- .M 1>>)
(T
<SET N <ZRANDOM .LEN>>
<SET N <- .N 1>>)>
<COND (<0? <FIELD-DONE <SET F <ZGET .WHICH .N>>>>
<COND (<OR <F? <FIELD-FCN .F>>
<T? <ZAPPLY <FIELD-FCN .F> ,FORM-OK-TO-ENTER-FIELD? .F>>>
<FIELD-DONE <ZGET .WHICH .N> 1>
<PUTB .HISTVEC .HISTLEN .N>
<RETURN>)>)>>
.N>
<SETG FERROR-COUNT 0>
<DEFINE FILL-FORM (WHICH NAME "AUX" X TBL Y
(FIELDCT:FIX <ZGET .WHICH 0>) (HIST ,FORM-HISTORY)
(HISTLEN 0) N (BOGUS-ERRORS 0))
<SETG FORM-COMPUTER? <>>
<SETG FERROR-COUNT 0>
<DRAW-FORM .WHICH .NAME>
<SET WHICH <ZREST .WHICH 2>>
<REPEAT ((ZZ:FIX 0) F)
<COND (<AND <T? <FIELD-DONE <SET F <ZGET .WHICH .ZZ>>>>
<T? <FIELD-FCN .F>>>
<ZAPPLY <FIELD-FCN .F> ,FORM-FIELD-RESET .F>)>
<FIELD-DONE <ZGET .WHICH .ZZ> 0>
<COND (<G=? <SET ZZ <+ .ZZ 1>> .FIELDCT> <RETURN>)>>
<SET N <PICK-FIELD .WHICH .FIELDCT .HIST 0>>
<SET BOGUS-ERRORS 0>
<REPEAT ((ERR? <>) ERRVAL)
<SET X <FILL-FIELD .N .WHICH .ERR?>>
<SET ERR? <>>
<SET TBL <ZGET .WHICH .N>>
<COND (<NOT .X>
<COND (<0? .HISTLEN>
<FERROR "Top of form">
<SET ERR? T>
<AGAIN>)>
<SET X <+ <FIELD-X .TBL>
<FIELD-PROMPTLEN .TBL>>>
<SET Y <FIELD-Y .TBL>>
<SET-FORM-CURS .Y .X>
<HLIGHT ,H-NORMAL>
<PRINT-SPACES <FIELD-MAXLEN .TBL>>
<FIELD-CURLEN .TBL 0>
; "Put this field back on the list"
<FIELD-DONE .TBL 0>
; "And find the one we were in before"
<SET N <CHTYPE <GETB .HIST <SET HISTLEN <- .HISTLEN 1>>> FIX>>
<AGAIN>)
(<T? <FIELD-FCN .TBL>>
<SET ERRVAL <ZAPPLY <FIELD-FCN .TBL> ,FORM-EXIT-FIELD .TBL>>
<COND (<F? .ERRVAL>
<SET ERR? T>
<AGAIN>)>
<COND (<EQUAL? .ERRVAL ,FATAL-VALUE 3>
<SET ERR? T>
<COND (<AND <==? .ERRVAL ,FATAL-VALUE>
<L=? <SET BOGUS-ERRORS <+ .BOGUS-ERRORS 1>>
3>>
<AGAIN>)>)>)>
<COND (<AND <PROB 35>
<F? .ERR?>
<T? <FIELD-ABUSE .TBL>>>
<FERROR <PICK-ONE <FIELD-ABUSE .TBL>> T>
<SET ERR? T>)>
<COND (<==? <SET HISTLEN <+ .HISTLEN 1>> .FIELDCT>
<RETURN>)>
<SET BOGUS-ERRORS 0>
<SET N <PICK-FIELD .WHICH .FIELDCT
.HIST .HISTLEN>>
<COND (<==? .N -1> <RETURN>)>>
<CLEAR ,S-WINDOW>
<CLEAR ,S-TEXT>
; "Does SCREEN S-TEXT..."
<INIT-STATUS-LINE>
<ZCRLF>
<COND (<G? ,FERROR-COUNT:FIX 0>
<UPDATE-BP ,FERROR-COUNT>
<ZCRLF>)>
<DIROUT ,D-SCREEN-OFF>
<SHOW-FIELDS <ZBACK .WHICH 2>>
<DIROUT ,D-SCREEN-ON>
T>
"Some constants to prevent number overflows"
<MSETG MAX-NUM *77777*> ;"Largest positive number on 16 bit machine."
<MSETG MAX-NUM-DIV-10
</ ,MAX-NUM 10>> ;"Largest div by 10"
<MSETG MAX-NUM-DIV-100
</ ,MAX-NUM-DIV-10 10>> ;"Largest div by 100"
"Expects address of an ASCII byte table, 0th byte = length. Returns value.
If DOT-OK is true, allows a decimal and in fact makes it 100 times bigger
if no decimal point. Returns -1 if overflow and -2 if too many dots."
<DEFINE TEXT-TO-VALUE TTV (TBL "OPTIONAL" (DOT-OK <>)
"AUX" (SUM:FIX 0) LEN:FIX X:FIX (DOT-SEEN <>))
<SET LEN <CHTYPE <GETB .TBL 0> FIX>>
<REPEAT ((PTR:FIX 1))
<SET X <CHTYPE <GETB .TBL .PTR> FIX>>
<COND (<AND <G? .X %<- <ASCII !\0> 1>>
<L? .X %<+ <ASCII !\9> 1>>>
<COND (<G? .SUM ,MAX-NUM-DIV-10>
<RETURN -1 .TTV>)>
<SET SUM <* .SUM 10>>
<SET X <- .X %<ASCII !\0>>>
<COND (<G? .SUM <- ,MAX-NUM .X>>
<RETURN -1 .TTV>)>
<SET SUM <+ .SUM .X>>)
(<AND .DOT-OK <==? .X %<ASCII !\.>>>
<SET DOT-OK <>>
<SET DOT-SEEN T>)
(T
<RETURN -2 .TTV>)>
<COND (<G? <SET PTR <+ .PTR 1>> .LEN>
<COND (<AND .DOT-OK <NOT .DOT-SEEN>>
<COND (<G? .SUM ,MAX-NUM-DIV-100>
<RETURN -1 .TTV>)>
<SET SUM <* .SUM 100>>)>
<RETURN>)>>
<RETURN .SUM .TTV>>
<DEFINE PRINT-FULL-NAME ()
<PRINT-NAME T>>
<DEFINE PRINT-NAME ("OPT" (FULL? <>))
<PRINT-FIRST-NAME>
<TELL " ">
<COND (.FULL?
<SHOW-FIELD ,MIDDLE-INITIAL>
<TELL ". ">)>
<PRINT-LAST-NAME>>
<DEFINE PRINT-FIRST-NAME ()
<SHOW-FIELD ,FIRST-NAME>>
<DEFINE PRINT-LAST-NAME ()
<SHOW-FIELD ,LAST-NAME>>
<DEFINE SHOW-FIELD (FIELD "OPT" (FORM <>))
<COND (<NOT .FORM>
<SET FORM ,LICENSE-FORM>)>
<PRINT-VAL <ZGET .FORM <SET FIELD <+ .FIELD 1>>>>>
<DEFINE SHOW-FIELDS ("OPT" (FIELDS <>) "AUX" TF LEN:FIX)
<COND (<NOT .FIELDS>
<SET FIELDS ,LICENSE-FORM>)>
<SET LEN <ZGET .FIELDS 0>>
<REPEAT ((CT 1))
<SET TF <ZGET .FIELDS .CT>>
<TELL <FIELD-PROMPT .TF> " ">
<PRINT-VAL .TF:FIELD>
<ZCRLF>
<COND (<G? <SET CT <+ .CT 1>> .LEN> <RETURN>)>>>
<DEFINE PRINT-VAL (TF:FIELD "AUX" (PTR ,FIELD-DATA-OFFSET)
CHAR (LEN <FIELD-CURLEN .TF>))
<COND (<0? .LEN> <TELL "[no value]">)
(T
<REPEAT ((CNT 1))
<SET CHAR <CHTYPE <GETB .TF .PTR> FIX>>
<PRINTC .CHAR>
<SET PTR <+ .PTR 1>>
<COND (<G? <SET CNT <+ .CNT 1>> .LEN>
<RETURN>)>>)>>

1370
jet.zil Normal file

File diff suppressed because it is too large Load Diff

135
jetdefs.zil Normal file
View File

@ -0,0 +1,135 @@
<ZSECTION "JETDEFS">
<FILE-FLAGS MDL-ZIL?>
<USE "NEWSTRUC">
<INCLUDE "FORMDEFS">
<MSETG AISLE-COUNT 9>
<MSETG INITIAL-ROW 3>
<MSETG FOOD-SCENE 1>
<MSETG VISA-SCENE 2>
<MSETG HIJACK-SCENE 3>
<MSETG SCENE-COUNT 3>
<DEFINE-GLOBALS PLANE-TABLE
(SITTING? BYTE <>)
(PHONES-PLUGGED-IN? BYTE <>)
(CURRENT-STAR BYTE 0)
(CURRENT-DESC BYTE 0)
(CURRENT-WEAPON BYTE 0)
(LOSER-CANT-LEAVE-SEAT? BYTE <>)
(PURSER-HERE? BYTE <>)
(PHONE-MUSIC:FIX BYTE 0) ; "Headphone stuff"
(PHONE-TIMER:FIX BYTE 0) ; "Random"
(LAST-ROW:FIX BYTE 0) ; "Previous row occupied"
(LAST-SEAT:FIX BYTE 0) ; "Previous seat"
(NEW-ROW:FIX BYTE 0)
(NEW-SEAT:FIX BYTE 0)
(RETURN-TO-SEAT-WAIT:FIX BYTE 0)
(SCENE-NUMBER:FIX BYTE 0); "1, 2, or 3; one is added each time"
(CURRENT-SCENE:FIX BYTE 0) ; "1, 2, or 3"
(DREAMING? BYTE T) ; "false for last scene"
; "Variables for meal script"
(MEAL-SCRIPT:FIX BYTE 0)
(MEAL-COUNTER:FIX BYTE 0)
(SINK-CLEANED? BYTE <>)
(TEETH-BRUSHED? BYTE <>)
; "Variables for visa script"
(VISA-SCRIPT:FIX BYTE 11) ; "Number of incidents"
(FORM-FILLED-OUT? BYTE <>) ; "Loser actually filled out form"
(ATTENDANT-COMPLAINTS BYTE 0)
(GOT-VISA-NUMBER? BYTE <>); "Got visa number from someone else"
(VISA-SLEEPING? BYTE 0)
(GRANDMA-HAPPY? BYTE <>)
(SMOKER-IRATE? BYTE <>)
(BUSINESS-IRATE? BYTE <>)
(FALL-SCRIPT:FIX BYTE 5)
(FORM-SEEN? BYTE <>)
(CURRENT-NEIGHBOR BYTE 0)
(BUSINESS-ROW BYTE 0)
(BUSINESS-SEAT BYTE 0)
(BROUGHT-COMPUTER? BYTE <>)
(GOT-RECIPE? BYTE <>)
(FLIGHT-ATTENDANT-HE/SHE:STRING "She")
(FLIGHT-ATTENDANT-HIM/HER:STRING "her")
(THROWN-OFF-ONCE? BYTE <>)
(FIRST-SCENE? BYTE T)>
<CONSTANT ALL-SCENES
<TABLE (BYTE) ,FOOD-SCENE ,VISA-SCENE ,HIJACK-SCENE>>
<CONSTANT MOVIE-STARS
<PLTABLE "Rambo"
"Rocky"
"Sylvester Stallone"
"someone looking like Sylvester Stallone, but with a German accent,"
"Arnold Schwarzenegger"
"James Bond"
"Sigourney Weaver"
"a woman with a strange resemblance to Sylvester Stallone"
"Charles Bronson"
"Chuck Norris">>
<CONSTANT MOVIE-WEAPONS
<PLTABLE "several karate moves"
"a Bowie knife"
"a Sherman tank"
"an AK-47 assault rifle, a rocket launcher and several hand grenades"
"a wide assortment of shoulder-launched cruise missiles"
"the help of a shoe-mounted switchblade"
"a flamethrower, a grenade launcher and a pulse rifle"
"a concealed bazooka"
"no help from Washington">>
<CONSTANT MOVIE-DESCS
<PLTABLE "solves the Energy Crisis by attacking every Middle Eastern oil field"
"ends the Depression by attacking Wall Street"
"ends the Civil War by attacking Richmond"
"ends illiteracy by attacking the evil textbook publishers"
"restores the balance of payments by attacking Germany, Japan, South Korea and Canada"
"restores the balance of payments by attacking the Heineken brewery"
"saves an uninhabited planet by blowing away the alien invaders"
"saves embassy hostages from terrorists"
"wipes out crime in America by killing jaywalkers and litterbugs">>
<BUILD-FORM IMMIGRATION-FORM
(IMM-LAST-NAME "Last name:" 21 "Chomper" IF-LAST-NAME)
(IMM-FIRST-NAME "First name:" 25 "Random" IF-FIRST-NAME)
(IMM-MIDDLE-INITIAL "Middle initial:" 1 "Q" IF-MIDDLE-INITIAL)
(IMM-COUNTRY "Home planet:" 10 "Earth")
(IMM-MAIDEN "Mother's maiden name:" 10 "Frobber")
(IMM-DATE "Date of last Chinese meal:" 10 "9/20/86" IF-DATE)
(IMM-RING "Ring size:" 4 "4" IF-DATE)
(IMM-AGE "Age of first-born ancestor:" 4)
(IMM-VISA "Visa number:" 10 "69105" IF-VISA)
(IMM-RAND1 "Stars in universe:" 3 "0" IF-STARS)
(IMM-RAND2 "Reason for leaving:" 10 "FF" IF-REASON)>
<DEFMAC ROW-SEATS ("OPT" 'NEW)
<COND (<NOT <ASSIGNED? NEW>>
<FORM ANDB <FORM ZGET ',AISLE-STATE ',CURRENT-ROW>
,ALL-SEATS>)
(T
<FORM ZPUT ',AISLE-STATE ',CURRENT-ROW
<FORM ORB .NEW <FORM ANDB <ZGET ',AISLE-STATE ',CURRENT-ROW>
<XORB ,ALL-SEATS -1>>>>)>>
; "State of seating is low four bits; starboard passenger, if any, is next
four; port passenger is next four. Three remaining bits below the sign
bit can be used for flags."
<MSETG SEAT-A 1>
<MSETG SEAT-B 2>
<MSETG SEAT-C 4>
<MSETG SEAT-D 8>
<MSETG ALL-SEATS <ORB ,SEAT-A ,SEAT-B ,SEAT-C ,SEAT-D>>
<MSETG STARBOARD-DIVISOR 16>
<MSETG PORT-DIVISOR 256>
<MSETG ROW-SEEN-BIT 4096>
<ENDSECTION>

181
macros.zil Normal file
View File

@ -0,0 +1,181 @@
"MACROS for BUREAUCRACY: (C)1987 Infocom, Inc. All rights reserved."
<FILE-FLAGS MDL-ZIL?>
<MSETG SYSTOLIC-SHIFT 256>
<MSETG C-ENABLED? 0>
<MSETG C-ENABLED 1>
<MSETG C-DISABLED 0>
<TELL-TOKENS (CR CRLF |) <ZCRLF>
(N NUM) * <PRINTN .X>
(C CHAR CHR) * <PRINTC .X>
Q * <PRINTD .X>
(D DESC) * <DPRINT .X>
(A AN) * <PRINTA .X>
CA * <CPRINTA .X>
THE * <THE-PRINT .X>
CTHE * <CTHE-PRINT .X>
THEO <THE-PRINT>
CTHEO <CTHE-PRINT>
CTHEI <CTHEI-PRINT>
THEI <THEI-PRINT>
ITAL *:STRING <ITALICIZE .X>
WORD * <DO-PRINT-WORD .X>
PONE * <PRINT-PICK-ONE .X>
PNEXT * <PRINT-PICK-NEXT .X>
>
<CONSTANT YOURE-ALREADY-STR "You're already ">
<CONSTANT THIS-IS "This is ">
<DEFMAC YOURE-ALREADY ('STR "OPT" (CR? T))
<COND (.CR?
<FORM TELL ',YOURE-ALREADY-STR .STR ',PERIOD>)
(T
<FORM TELL ',YOURE-ALREADY-STR .STR>)>>
<DEFMAC VERB? ("ARGS" ATMS)
<MULTIFROB PRSA .ATMS>>
<DEFMAC PRSO? ("ARGS" ATMS)
<MULTIFROB PRSO .ATMS>>
<DEFMAC PRSI? ("ARGS" ATMS)
<MULTIFROB PRSI .ATMS>>
<DEFMAC HERE? ("ARGS" ATMS)
<MULTIFROB HERE .ATMS>>
<DEFINE20 MULTIFROB (X ATMS "AUX" (OO (OR)) (O .OO) (LL (T)) (L .LL) ATM)
<REPEAT ()
<COND (<EMPTY? .ATMS>
<RETURN!- <COND (<LENGTH? .OO 1>
<ERROR .X>)
(<LENGTH? .OO 2>
<NTH .OO 2>)
(ELSE
<CHTYPE .OO FORM>)>>)>
<REPEAT ()
<COND (<EMPTY? .ATMS>
<RETURN!->)>
<SET ATM <NTH .ATMS 1>>
<SET L <REST <PUTREST
.L
(<COND (<TYPE? .ATM ATOM>
<CHTYPE <COND (<==? .X PRSA>
<PARSE
<STRING "V?"
<SPNAME .ATM>>>)
(T .ATM)> GVAL>)
(ELSE .ATM)>)>>>
<SET ATMS <REST .ATMS>>
<COND (<==? <LENGTH .LL> 4>
<RETURN!->)>>
<SET O <REST <PUTREST .O
(<FORM EQUAL? <CHTYPE .X GVAL> !<REST .LL>>)>>>
<SET LL (T)>
<SET L .LL>>>
; <DEFMAC BSET ('OBJ "ARGS" BITS)
<MULTIBITS FSET .OBJ .BITS>>
; <DEFMAC BCLEAR ('OBJ "ARGS" BITS)
<MULTIBITS FCLEAR .OBJ .BITS>>
; <DEFMAC BSET? ('OBJ "ARGS" BITS)
<MULTIBITS FSET? .OBJ .BITS>>
; <DEFINE20 MULTIBITS (X OBJ ATMS "AUX" (O ()) ATM)
<REPEAT ()
<COND (<EMPTY? .ATMS>
<RETURN!- <COND (<LENGTH? .O 1>
<NTH .O 1>)
(<==? .X FSET?>
<FORM OR !.O>)
(ELSE
<FORM PROG () !.O>)>>)>
<SET ATM <NTH .ATMS 1>>
<SET ATMS <REST .ATMS>>
<SET O
(<FORM .X
.OBJ
<COND (<TYPE? .ATM FORM>
.ATM)
(ELSE
<FORM GVAL .ATM>)>>
!.O)>>>
<DEFMAC PROB ('BASE?)
<FORM NOT <FORM L? .BASE? '<ZRANDOM 100>>>>
<DEFMAC ZIL? ()
<COND (<OR <NOT <GASSIGNED? LOWCORE>>
<NOT <TYPE? ,LOWCORE MACRO>>>
<FORM ZERO? '<LOWCORE (SERIAL 0)>>)
(T
<FORM ZERO? <EXPAND '<LOWCORE (SERIAL 0)>>>)>>
<DEFMAC ENABLE ('INT)
<FORM C-ENABLED? .INT 1>>
<DEFMAC DISABLE ('INT)
<FORM C-ENABLED? .INT 0>>
<DEFMAC GET-REXIT-ROOM ('PT)
<FORM GET .PT ',REXIT>>
<DEFMAC GET-DOOR-OBJ ('PT)
<FORM GET .PT ',DEXITOBJ>>
<DEFMAC GET/B ('TBL 'PTR)
<FORM GET .TBL .PTR>>
<DEFMAC RMGL-SIZE ('TBL)
<FORM - <FORM / <FORM PTSIZE .TBL> 2> 1>>
<DEFMAC MAKE ('OBJ 'FLAG)
<FORM FSET .OBJ .FLAG>>
<DEFMAC UNMAKE ('OBJ 'FLAG)
<FORM FCLEAR .OBJ .FLAG>>
<DEFMAC IS? ('OBJ 'FLAG)
<FORM FSET? .OBJ .FLAG>>
<DEFMAC T? ('TERM)
<FORM NOT <FORM ZERO? .TERM>>>
<DEFMAC ABS ('NUM)
<FORM COND (<FORM L? .NUM 0>
<FORM - 0 .NUM>)
(T
.NUM)>>
<DEFMAC QUOTE? ()
<FORM COND (<FORM NOT <FORM EQUAL?
<CHTYPE WINNER GVAL>
<CHTYPE PLAYER GVAL>>>
<FORM PRINTC 34>)>>
<DEFMAC SPACE ()
<FORM PRINTC 32>>
<DEFMAC THIS-PRSO? ()
<FORM ZERO? <CHTYPE NOW-PRSI? GVAL>>>
<DEFMAC THIS-PRSI? ()
<FORM NOT <FORM ZERO? <CHTYPE NOW-PRSI? GVAL>>>>
<DEFINE20 STR-TABLE (STR:STRING "AUX" (FIRST T))
<MAPF ,TABLE
<FUNCTION (X)
<COND (.FIRST
<SET FIRST <>>
<MAPRET (BYTE PURE LENGTH) <CHTYPE .X FIX>>)
(ELSE <CHTYPE .X FIX>)>>
.STR>>

245
maze-program.zil Normal file
View File

@ -0,0 +1,245 @@
"MAZE-PROG for BUREAUCRACY: Copyright (C)1987 Infocom, Inc.
All rights reserved."
<FILE-FLAGS MDL-ZIL?>
<INCLUDE "FORMDEFS" "COMPUTERDEFS">
<MSETG MAX-CHARS <* ,COMPUTER-HEIGHT ,COMPUTER-WIDTH>>
<MSETG QSIZE </ ,MAX-CHARS 4>>
<SETG20 TST
<IVECTOR ,COMPUTER-WIDTH '<ISTRING ,COMPUTER-HEIGHT <ASCII 32>>>>
<SETG20 INPUT-STR <ISTRING ,MAX-CHARS>>
<DEFINE20 LD-FILE (FILE
"AUX" (CH <OPEN "READ" .FILE>) N:FIX)
<COND (.CH
<SET N <MIN ,MAX-CHARS <FILE-LENGTH .CH>>>
<READSTRING ,INPUT-STR .CH .N>
<CLOSE .CH>
<FILL ,INPUT-STR ,TST>)
(ELSE .CH)>>
<DEFINE20 FILL (STR TBL
"AUX" (I 0) (LEN <LENGTH .STR>))
<MAPF <>
<FUNCTION (S "AUX" (J 0) K)
<REPEAT ()
<SET K .J>
<COND (<MAPF <>
<FUNCTION (CHR)
<SET K <+ .K 1>>
<COND (<==? .CHR <ASCII 32>>
<MAPLEAVE T>)>
<COND (<G? .K ,COMPUTER-HEIGHT>
<MAPLEAVE <>>)>
T>
<REST!- .STR .I>>
<SUBSTRUC .STR .I
<- .K .J 1>
<REST!- .S .J>>
<SET I <+ .I <- .K .J>>>
<SET J .K>
;<MAPR <>
<FUNCTION (S1 S2)
<PUT!- .S1 1 <1 .S2>>
<SET I <+ .I 1>>
<COND (<==? <SET J <+ .J 1>> .K>
<MAPLEAVE>)>>
<REST!- .S .J> <REST!- .STR .I>>)
(ELSE <RETURN>)>>>
.TBL>>
<SETG20 INDEX-UV <IUVECTOR ,MAX-CHARS 0>>
<GDECL (INDEX-UV) UVECTOR>
<GDECL (TST) <VECTOR [REST STRING]>>
<DEFINE20 TABLEIZE ("AUX" (UV:UVECTOR ,INDEX-UV) (I:FIX 0) (J:FIX 0))
<MAPR <>
<FUNCTION (X "AUX" TMP)
<SET TMP
<ORB!- <LSH .I 12>
<LSH .J 6>
<TRANS <NTH!- <NTH!- ,TST <+ .J 1>>
<+ .I 1>>>>>
<COND (<G=? <SET J <+ .J 1>> ,COMPUTER-WIDTH>
<SET I <+ .I 1>>
<SET J 0>)>
<PUT!- .X 1 .TMP>>
.UV>
.UV>
" 0 ==> space, 1...26 ==> A...Z, 27...53 ==> a...z,
54 ==> .
55 ==> ,
56 ==> ;
57...63 ==> 0...6
"
<DEFINE20 TRANS (CHAR)
<SET CHAR <CHTYPE .CHAR FIX>>
<COND (<==? .CHAR 32> 0)
(<AND <G=? .CHAR <ASCII !\A>>
<L=? .CHAR <ASCII !\Z>>>
<- .CHAR <ASCII !\A> -1>)
(<AND <G=? .CHAR <ASCII !\a>>
<L=? .CHAR <ASCII !\z>>>
<- .CHAR <ASCII !\a> -27>)
(<AND <G=? .CHAR <ASCII !\0>>
<L=? .CHAR <ASCII !\6>>>
<- .CHAR <ASCII !\0> -57>)
(<==? .CHAR <ASCII !\.>> 54)
(<==? .CHAR <ASCII !\,>> 55)
(<==? .CHAR <ASCII !\;>> 56)>>
<LD-FILE "SS:<BUREAUCRACY>TEXT.FILE">
<SETG PROG-TABLE <TABLE !<TABLEIZE>>>
<DEFINE RANDOMIZE ("AUX" (Z ,MAX-CHARS) T1 T2 T3)
<REPEAT ()
<COND (<L=? <SET Z <- .Z 1>> 0> <RETURN>)>
<SET T1 <ZRANDOM ,MAX-CHARS>>
<SET T1 <- .T1 1>>
<SET T2 <ZRANDOM ,MAX-CHARS>>
<SET T2 <- .T2 1>>
<SET T3 <ZGET ,PROG-TABLE .T1>>
<ZPUT ,PROG-TABLE .T1 <ZGET ,PROG-TABLE .T2>>
<ZPUT ,PROG-TABLE .T2 .T3>>>
<MSETG QLEFT 0>
<MSETG QRIGHT 1>
<MSETG QTOP 2>
<MSETG QBOT 3>
<CONSTANT QUADS <PTABLE <TABLE (PURE BYTE) 19 37 0 7>
<TABLE (PURE BYTE) 0 18 0 7>
<TABLE (PURE BYTE) 0 18 8 15>
<TABLE (PURE BYTE) 19 37 8 15>>>
<CONSTANT PUNCT-TABLE
<TABLE (PURE BYTE)
%<ASCII !\.> %<ASCII !\,> %<ASCII !\;>>>
<ROUTINE-FLAGS CLEAN-STACK?>
<DEFINE PROG-FIRST (A B C "AUX" (SZ ,QSIZE) N:FIX H:FIX V:FIX (I:FIX 0))
<CLEAR-QUADRANT 0>
<REPEAT ()
<COND (<L? <SET SZ <- .SZ 1>> 0> <RETURN>)>
<SET N <ZGET ,PROG-TABLE .I>>
<SET I <+ .I 1>>
<SET H <ANDB </ <ANDB .N *7777*> 64> *77*>>
<SET V <ANDB </ <ANDB </ .N 2> *77777*> 2048> *17*>>
<COND (<IN-QUAD 0 .H .V>
<SET N <INVERT-CHAR .N>>)
(ELSE
<SET N <GEN-CHAR .H .V>>)>
<FORCE-CHAR .N .H .V>>
<>>
<ROUTINE-FLAGS CLEAN-STACK?>
<DEFINE PROG-SECOND (A B C "AUX" (SZ <* ,QSIZE 2>) N:FIX H:FIX V:FIX (I:FIX 0))
<CLEAR-QUADRANT 1>
<REPEAT ()
<COND (<L? <SET SZ <- .SZ 1>> 0> <RETURN>)>
<SET N <ZGET ,PROG-TABLE .I>>
<SET I <+ .I 1>>
<SET H <ANDB </ <ANDB .N *7777*> 64> *77*>>
<SET V <ANDB </ <ANDB </ .N 2> *77777*> 2048> *17*>>
<COND (<L? .V </ ,COMPUTER-HEIGHT 2>>
; "Just checking for top half of screen"
;<OR <IN-QUAD 0 .H .V> <IN-QUAD 1 .H .V>>
<COND (<OR <L? .SZ ,QSIZE>
; "Know top half, so just check for left"
<L? .H </ ,COMPUTER-WIDTH 2>>
;<IN-QUAD 1 .H .V>>
<SET N <INVERT-CHAR .N>>)
(ELSE <SET N 0>)>)
(ELSE
<SET N <GEN-CHAR .H .V>>)>
<COND (<N==? .N 0> <FORCE-CHAR .N .H .V>)>>
<>>
<ROUTINE-FLAGS CLEAN-STACK?>
<DEFINE PROG-THIRD (A B C "AUX" (SZ <* ,QSIZE 3>) N:FIX H:FIX V:FIX (I:FIX 0))
<CLEAR-QUADRANT 2>
<REPEAT ()
<COND (<L? <SET SZ <- .SZ 1>> 0> <RETURN>)>
<SET N <ZGET ,PROG-TABLE .I>>
<SET I <+ .I 1>>
; "this tries to win with 16-bit arithmetic"
<SET H <ANDB </ <ANDB .N *7777*> 64> *77*>>
<SET V <ANDB </ <ANDB </ .N 2> *77777*> 2048> *17*>>
<COND (<NOT <IN-QUAD 3 .H .V>>
;<OR <IN-QUAD 0 .H .V> <IN-QUAD 1 .H .V>
<IN-QUAD 2 .H .V>>
<COND (<OR <L? .SZ ,QSIZE>
; "If in bottom half, must be quad 2"
<G=? .V </ ,COMPUTER-HEIGHT 2>>
;<IN-QUAD 2 .H .V>>
<SET N <INVERT-CHAR .N>>)
(ELSE <SET N 0>)>)
(ELSE
<SET N <GEN-CHAR .H .V>>)>
<COND (<N==? .N 0> <FORCE-CHAR .N .H .V>)>>
<>>
<ROUTINE-FLAGS CLEAN-STACK?>
<DEFINE PROG-FOURTH (A B C "AUX" (SZ ,MAX-CHARS) N:FIX H:FIX V:FIX (I:FIX 0))
<CLEAR-QUADRANT 3>
<REPEAT ()
<COND (<L? <SET SZ <- .SZ 1>> 0> <RETURN>)>
<SET N <ZGET ,PROG-TABLE .I>>
<SET I <+ .I 1>>
<SET H <ANDB </ <ANDB .N *7777*> 64> *77*>>
<SET V <ANDB </ <ANDB </ .N 2> *77777*> 2048> *17*>>
<COND (<OR <L? .SZ ,QSIZE> <IN-QUAD 3 .H .V>>
<SET N <INVERT-CHAR .N>>
<FORCE-CHAR .N .H .V>)>>
<>>
<MSETG NCHARS 64>
<CONSTANT FUNNY-FIELDS <ITABLE ,COMPUTER-HEIGHT 0>>
<DEFINE GEN-CHAR (H:FIX V:FIX "AUX" (FF ,FUNNY-FIELDS) (CHR -1) TF
(V1 <+ .V 1>) SW)
<COND (<0? <MOD .V 2>>
<COND (<F? <SET TF <ZGET .FF .V>>>
<SET TF <ZREST <PICK-ONE ,LICENSE-FORM>
<- ,FIELD-DATA-OFFSET 1>>>
<COND (<L=? <+ .H <GETB .TF 0>> ,COMPUTER-WIDTH>
<ZPUT .FF .V .TF>
<ZPUT .FF .V1 .H>)
(T
<SET TF <>>)>)>
<COND (<AND .TF
<G=? .H <SET SW <ZGET .FF .V1>>>>
<SET CHR
<GETB .TF <+ 1 <MOD <- .H .SW> <GETB .TF 0>>>>>)>)>
<COND (<==? .CHR -1>
<INVERT-CHAR <- <ZRANDOM ,NCHARS> 1>>)
(T
<CHTYPE .CHR FIX>)>>
<DEFINE INVERT-CHAR (N)
<SET N <ANDB .N *77*>>
<COND (<==? .N 0> <SET N 32>)
(<L? .N 27> <SET N <+ .N %<- <ASCII !\A> 1>>>)
(<L? .N 54> <SET N <+ .N %<- <ASCII !\a> 27>>>)
(<G=? .N 57> <SET N <+ .N %<- <ASCII !\0> 57>>>)
(ELSE <SET N <GETB ,PUNCT-TABLE <- .N 54>>>)>
.N>
<DEFINE IN-QUAD (I:FIX H:FIX V:FIX
"AUX" (Q <ZGET ,QUADS .I>)
(QL:FIX <GETB .Q ,QLEFT>)
(QR:FIX <GETB .Q ,QRIGHT>)
(QT:FIX <GETB .Q ,QTOP>)
(QB:FIX <GETB .Q ,QBOT>))
<COND (<AND <G=? .H .QL> <L=? .H .QR>
<G=? .V .QT> <L=? .V .QB>>
T)
(ELSE <>)>>

917
maze.zil Normal file
View File

@ -0,0 +1,917 @@
"MAZE for BUREAUCRACY: Copyright 1987 Infocom, Inc. All rights reserved."
<FILE-FLAGS MDL-ZIL?>
<INCLUDE "COMPUTERDEFS">
<OBJECT MAZE-ROOM
(LOC ROOMS)
(SYNONYM NUMBER INSCRIPTION GEAR SWITCHGEAR)
(ADJECTIVE SWITCH)
(SDESC SDESC-MAZE)
(FLAGS PLACE NODESC LIGHTED INDOORS NOARTICLE)
(EAST PER MAZE-EXIT)
(WEST PER MAZE-EXIT)
(NORTH PER MAZE-EXIT)
(SOUTH PER MAZE-EXIT)
(UP PER MAZE-EXIT)
(DOWN PER MAZE-EXIT)
(OUT PER MAZE-EXIT)
(ACTION MAZE-ROOM-F)>
<SETG CURRENT-MAZE-ROOM 0>
<SETG LAST-MAZE-ROOM 0>
<MSETG MAZE-STEPS 6>
<SETG MAZE-STEPS-TAKEN 0>
<SETG MAZE-LOSING? <>>
<DEFINE MAZE-ROOM-F ("OPT" (CONTEXT <>) "AUX" DIF)
<COND (<==? .CONTEXT ,M-LOOK>
<TELL "You are in a switchgear room, with exits in all directions.
Inscribed on the wall is the number " N ,CURRENT-MAZE-ROOM ,PERIOD>)
(<AND <==? .CONTEXT ,M-BEG>
<VERB? SAVE>>
<TELL "Under Article 42 of the Cambridge Convention, we are required
to notify you that using SAVE won't help you to solve this maze. For further
information, contact the Commission for Helping Out Maze Players." CR>
<>)
(<==? .CONTEXT ,M-ENTERING>
<UNMAKE ,MAZE-ROOM ,TOUCHED>
<COND (<0? ,CURRENT-MAZE-ROOM:FIX>
<SETG MAZE-STEPS-TAKEN 0>)>
<SETG LAST-MAZE-ROOM ,CURRENT-MAZE-ROOM>
; "Make sure the maze room number is always bigger"
<SETG CURRENT-MAZE-ROOM <+ <ZRANDOM 12>:FIX
<* ,MAZE-STEPS-TAKEN:FIX 25>>>
; "Now adjust this so the last digit of the difference is between
0 and 5: suppose the difference is 11. We add 8, making the
difference 19, then add something between 1 and 6, giving something
from 20 to 25. Similarly, if the difference is 8, we add 1,
the difference is 9, and win again."
<SETG CURRENT-MAZE-ROOM
<+ ,CURRENT-MAZE-ROOM:FIX
<- 9 <MOD <- ,CURRENT-MAZE-ROOM:FIX ,LAST-MAZE-ROOM:FIX> 10>>
<ZRANDOM 6>:FIX>>
<POLICE-AREA ,MAZE-ROOM <> ,IN-CLEARING>)
(<T? .CONTEXT> <>)
(<AND <VERB? READ EXAMINE>
<NOUN-USED? ,W?NUMBER ,W?INSCRIPTION>>
<COND (<AND <N==? ,HERE ,MAZE-ROOM>
<F? <GETP ,HERE ,P?STADDR>>>
<CANT-SEE-ANY-STR "any number">)
(T
<TELL "It's just an unadorned inscription of the number ">
<COND (<GETP ,HERE ,P?STADDR>
<TELL N <GETP ,HERE ,P?STADDR>>)
(T
<TELL N ,CURRENT-MAZE-ROOM>)>
<TELL ,PERIOD>)>)>>
<DEFINE SDESC-MAZE ()
<TELL "Switchgear room " N ,CURRENT-MAZE-ROOM>>
<DEFINE MAZE-EXIT ()
<SETG OLD-HERE <>>
<COND (<0? ,MAZE-STEPS-TAKEN:FIX>
<SETG MAZE-STEPS-TAKEN 1>
,MAZE-ROOM)
(T
; "New theory: don't fall back into jungle until right number
of steps taken..."
<COND (<F? <CHECK-MAZE>>
; "Losing, don't forget to screw the guy later"
<SETG MAZE-LOSING? T>)>
<SETG MAZE-STEPS-TAKEN <+ ,MAZE-STEPS-TAKEN:FIX 1>>
<COND (<==? ,MAZE-STEPS-TAKEN ,MAZE-STEPS>
<SETG MAZE-STEPS-TAKEN 0>
<SETG CURRENT-MAZE-ROOM 0>
<COND (,MAZE-LOSING?
<SETG MAZE-LOSING? <>>
,IN-CLEARING)
(T
,INNER-ROOM)>)
(T
,MAZE-ROOM)>)>>
<DEFINE CHECK-MAZE ("AUX" N:FIX DIR)
; "CURRENT-MAZE-ROOM always > LAST-MAZE-ROOM; get the last digit of the
difference"
<SET N <MOD <- ,CURRENT-MAZE-ROOM ,LAST-MAZE-ROOM> 10>>
<COND (<==? .N 0> <SET DIR ,P?EAST>)
(<==? .N 1> <SET DIR ,P?SOUTH>)
(<==? .N 2> <SET DIR ,P?UP>)
(<==? .N 3> <SET DIR ,P?NORTH>)
(<==? .N 4> <SET DIR ,P?DOWN>)
(<==? .N 5> <SET DIR ,P?WEST>)>
<COND (<==? ,P-WALK-DIR .DIR> T)
(T <>)>>
;"ODD-GATE-SOLVED? determines whether gate appears here or not..."
<OBJECT INNER-ROOM
(LOC ROOMS)
(DESC "Airlock")
(FLAGS PLACE LIGHTED INDOORS NO-NERD)
(ACTION INNER-ROOM-F)
(IN PER ENTER-IN-INNER)
(NORTH PER ENTER-COMPLEX)
(SOUTH SORRY "You can't find the entrance you must undoubtedly have used.")
(WEST PER ENTER-CARD-ROOM)>
<DEFINE ENTER-IN-INNER ("AUX" (CT 0) (GATE-OK? <>))
<COND (<AND <==? ,ODD-GATE-SOLVED? ,HERE>
<IS? ,ODD-GATE ,OPENED>>
; "Gate is open"
<SET GATE-OK? T>
<SET CT <+ .CT 1>>)>
<COND (<IS? ,OTHER-TRAP-DOOR ,OPENED>
; "Trap door is open"
<SET CT <+ .CT 1>>)>
<COND (<==? .CT 1>
; "Only one place to enter"
<COND (.GATE-OK?
; "It's the gate"
<DO-WALK ,P?WEST>
<>)
(T
; "The complex"
<ENTER-COMPLEX>)>)
(T
<TELL "Which way do you want to go?" CR>
<>)>>
<DEFINE INNER-ROOM-F ("OPT" (CONTEXT <>) "AUX" VEC)
<COND (<==? .CONTEXT ,M-ENTERING>
<COND (<N==? ,ODD-GATE-SOLVED? ,IN-CLEARING>
<MOVE ,ODD-GATE ,INNER-ROOM>
<RESET-GATE-STATE>)>
<COND (<NOT <IS? ,INNER-ROOM ,TOUCHED>>
<TELL "As you approach what seems to be a blank wall, it slides open,
then closes again after you pass through. It looks like a blank wall from the
other side, too." CR CR>)>
<>)
(<==? .CONTEXT ,M-LOOK>
<TELL "This is a bare, inhospitable room. Nothing actually happens
here at all; it is merely a sort of nasty one-way filter. It's a bit like being
inside the \"mind\" of a tax inspector, really.|
|
In fact, it is an airlock. The door by which you entered has disappeared,
flush with the wall. A door leads north. Pretty atmospheric, eh?" CR>
<COND (<N==? ,ODD-GATE-SOLVED? ,IN-CLEARING>
<TELL CR "To the west, you see a">
<OPEN-CLOSED ,ODD-GATE>
<TELL ,PERIOD>)>)
(T <>)>>
<DEFINE ENTER-CARD-ROOM ()
<COND (<==? ,ODD-GATE-SOLVED? ,IN-CLEARING>
<TELL "There's no exit that way." CR>
<>)
(<IS? ,ODD-GATE ,OPENED>
,CARD-ROOM)
(T
<TELL CTHE ,ODD-GATE " is closed." CR>
<>)>>
<SETG COMPLEX-POS 0>
<SETG COMPLEX-LOOKED? <>>
<SETG COMPLEX-DROP? <>>
<CONSTANT ALT-COMPLEX-WINDOW-DESC
<PTABLE "a picture of a Chowmail Overnite delivery man delivering llama food to
a llama owner whose llama is hungry, which is why the llama owner ordered
the llama food in the first place."
"an image of the waiter and waitress bringing customers the food they ordered, and looking very unhappy about it."
"a picture of a stockbroker putting some customer's money into an
incredibly underpriced stock that he found on his own."
"an image of a confused-looking bank teller sitting behind an open window. Above the window, a sign says \"CHECK CASHING, DEPOSITS, WITHDRAWALS, INFORMATION, ASSISTANCE, CHANGE OF ADDRESS.\""
"an image of an utterly bewildered traveller who has mysteriously arrived
at the right airline desk with the right ticket to the place he wanted to go
to, being assigned a window seat in smoking, which is just what he wanted."
"an image of a computer room with a dirty great mainframe, and banks of
things which they put in computer rooms so that people can look at them
and say \"Hey, those lights should be flashing but they aren't, someone
must have killed the computer.\"|
|
The nerd is standing with his finger in an I/O port trying to stem the
flood of bits leaking out onto the floor. He looks distinctly like a
nerd who has suddenly realised that it would all have been a lot better
if he had spent his time having drinks at parties and going out with girls
instead of playing with computers.">>
<CONSTANT COMPLEX-WINDOW-DESC
<PTABLE ;"Descriptions of windows"
"an image of the llama-food salesman walking around your neighbourhood practising making deliveries to the wrong address."
"an image of the waiter and waitress practising making customers go through complicated orders multiple times."
"an image of a stockbroker staring dumbfounded at his computer
screen, on which you can just make out an order to sell Frobozzco as soon
as its price drops five more points."
"an image of the bank teller moving \"NEXT WINDOW PLEASE\" signs from window to window in the bank."
"a split-screen display. On the left side, there's
a very confused Russian gentleman standing next to his aeroplane in what looks
to be a town near Baffin Bay; on the right, an American is wondering why he's
in Jakarta. They're both supposed to be in Geneva, which is where their pilots'
computers claim they are."
"an image of a computer room with a dirty great mainframe and banks of those
flashing lights they put in computer rooms so that people think \"Gosh,
how complicated computers are, and how amazingly clever the people who
work them must be.\"|
|
The nerd is sitting at a terminal, hacking away. He looks about as happy
as someone who has clearly never been out with girls can look.
Above his head is a monitor screen, showing a really rather attractive
individual looking at a monitor screen which shows a computer
room with a dirty great mainframe...">>
;<SETG COMPLEX-DATA
<TABLE 0 ;"Current position"
<> ;"Done a look?"
<> ;"Attempted a DROP?"
<PTABLE ;"Descriptions of windows"
"the llama-food salesman walking around your neighbourhood practising making deliveries to the wrong address."
"the waiter and waitress practising making customers go through complicated orders multiple times."
"the bank teller moving \"NEXT WINDOW PLEASE\" signs from window to window in the bank."
"the travel agent routing people from New York to Bermuda via Baffin Bay and Jakarta."
;"the nerd looking for lost things to try to return to unsuspecting owners."
"the bookshop clerk making illegal copies of popular computer adventure games."
"the nerd staring intently at a computer screen. Also in the picture is another monitor screen, which shows someone standing in a corridor."
;"the macaw and the matron debating irrelevant political issues.">
;<PTABLE <PLTABLE DMAN NERD>
<PLTABLE WAITER WAITRESS CLERK ADVENTURE>
<PLTABLE TELLER MACAW MATRON>>
;0>>
<DEFINE ENTER-COMPLEX ()
<COND (<IS? ,OTHER-TRAP-DOOR ,OPENED>
<TELL "You stumble through a brightly lit corridor. As
you go, you hear the airlock door slam shut; when you reach the end of the
corridor, you look
around and find that the wall behind you has no opening" ,PERIOD>
<SETG COMPLEX-POS 0>
<UPDATE-SCORE 2>
<ZCRLF>
,IN-COMPLEX)
(T
<TELL "The airlock door is closed." CR>
<>)>>
<OBJECT OTHER-TRAP-DOOR
(LOC INNER-ROOM)
(DESC "airlock door")
(FLAGS DOORLIKE OPENABLE LOCKED CONTAINER TRANSPARENT VOWEL)
(SYNONYM DOOR SLOT READER HOLE LOCK DOOR AIRLOCK)
(ADJECTIVE CLOSED SHUT KEY AIRLOCK CARD READER DOOR)
(CAPACITY 0)
(SIZE 255)
(CONTFCN OTHER-TRAP-DOOR-F)
(DESCFCN OTHER-TRAP-DOOR-F)
(ACTION OTHER-TRAP-DOOR-F)>
<DEFINE OTHER-TRAP-DOOR-F ("OPT" (CONTEXT <>) "AUX" (SS <GET-SYSTOLIC>))
<COND (<==? .CONTEXT ,M-OBJDESC>
<TELL "There's a">
<OPEN-CLOSED ,OTHER-TRAP-DOOR>
<TELL " in the north wall, with a card reader slot in it.">
<COND (<IN? ,KEY ,OTHER-TRAP-DOOR>
<TELL " There's a " D ,KEY " in the slot.">)>
T)
(<==? .CONTEXT ,M-CONT>
<COND (<AND <VERB? TAKE>
<NOT <IS? ,OTHER-TRAP-DOOR ,OPENED>>>
<MAKE ,OTHER-TRAP-DOOR ,OPENED>
<V-TAKE>
<UNMAKE ,OTHER-TRAP-DOOR ,OPENED>
T)>)
(<T? .CONTEXT> <>)
(<THIS-PRSI?>
<COND (<VERB? PUT>
<COND (<PRSO? KEY>
<COND (<IS? ,OTHER-TRAP-DOOR ,LOCKED>
<MOVE ,KEY ,OTHER-TRAP-DOOR>
<PERFORM ,V?UNLOCK ,OTHER-TRAP-DOOR ,KEY>)
(T
<TELL CTHE ,OTHER-TRAP-DOOR " is already
unlocked." CR>)>)
(<OR <NOUN-USED? ,W?SLOT ,W?READER ,W?HOLE>
<NOUN-USED? ,W?LOCK>>
<COND (<IN? ,KEY ,OTHER-TRAP-DOOR>
<TELL "There is already a key-card there." CR>)
(T
<TELL CTHEO " doesn't fit into the slot."
CR>)>)
(ELSE
<TELL "Putting things in airlock doors is not allowed." CR>
<SETG P-MULT? <>>
T)>)
(ELSE <>)>)
(<OR <VERB? UNLOCK>
<AND <VERB? OPEN OPEN-WITH>
<T? ,PRSI>>>
<COND (<IS? ,PRSO ,LOCKED>
<COND (<OR <PRSI? KEY>
<IN? ,KEY ,OTHER-TRAP-DOOR>>
<TELL
"The card slides smoothly in the reader slot, and you hear what could be a bolt snapping back." CR>
<UNMAKE ,PRSO ,LOCKED>)>)>)
(<VERB? LOCK>
<COND (<NOT <IS? ,PRSO ,LOCKED>>
<COND (<OR <PRSI? KEY>
<IN? ,KEY ,OTHER-TRAP-DOOR>>
<TELL "The card slides smoothly into the reader slot."
CR>
<UNMAKE ,PRSO ,OPENED>
<MAKE ,PRSO ,LOCKED>)>)>)
(<AND <VERB? OPEN>
<NOUN-USED? ,W?LOCK>>
<PERFORM ,V?UNLOCK ,PRSO>)
(<VERB? OPEN PULL>
<COND (<IS? ,PRSO ,LOCKED>
<COND (<G=? .SS 125>
<TELL "Despite your increased strength, " THEO
" doesn't move. Perhaps it's locked">)
(T
<TELL CTHEO " doesn't budge">)>
<TELL ,PERIOD>
<UPDATE-BP 2>)
(<G=? .SS 140>
<TELL "Your current rage level is so great that you have the
strength of ten." CR>
<V-OPEN>
T)
(T
<COND (<L=? .SS 121>
<TELL "In your current relaxed state, you can't get "
THEO " to move at all">)
(<L=? .SS 125>
<TELL CTHEO
" seems to budge a little, but springs back in place">)
(T
<TELL "You pull with all your strength, but " THEO
" opens only a little">)>
<TELL ,PERIOD>
<UPDATE-BP 3>
T)>)
(<NOUN-USED? ,W?HOLE ,W?READER ,W?SLOT>
<COND (<VERB? EXAMINE>
<TELL "It's just a normal sort of card-reader slot, with ">
<COND (<IN? ,KEY ,OTHER-TRAP-DOOR>
<TELL "a " D ,KEY " in it">)
(T
<TELL "nothing in it">)>
<TELL ,PERIOD>)
(<VERB? LOOK-INSIDE>
<COND (<IN? ,KEY ,OTHER-TRAP-DOOR>
<TELL "That's tough to do with " A ,KEY
" in it." CR>)
(T
<TELL "There's nothing interesting in the slot." CR>)>)
(<ENTERING?>
<TELL "Come off it." CR>)>)
(<ENTERING?>
<DO-WALK ,P?DOWN>)
(T <>)>>
<OBJECT IN-COMPLEX
(LOC ROOMS)
(DESC "Persecution Complex")
(EAST PER COMPLEX-MOVE)
(WEST PER COMPLEX-MOVE)
(SYNONYM HALL COMPLEX)
(ADJECTIVE PERSECUTION)
(FLAGS PLACE LIGHTED INDOORS SPECIAL-DROP NO-NERD)
(ACTION IN-COMPLEX-ROOM-F)>
<DEFINE HANDLE-COMPLEX-DROP (OBJ)
<SETG P-MULT? <>>
<COND (<T? ,COMPLEX-DROP?>
<TELL "This time you throw all caution to the wind, but your luck runs out. ">
<SECURITY-COMES>)
(ELSE
<SETG COMPLEX-DROP? T>
<TELL "As you start to " WORD ,P-PRSA-WORD " " THE .OBJ
" you get the distinct feeling you're being watched and that dropping something will arouse someone's attention. So you think better of it." CR>)>>
<MSETG NUM-PERSECUTION-WINDOWS 6>
<MSETG NUM-PERSECUTION-WINDOWS-BY-2 </ ,NUM-PERSECUTION-WINDOWS 2>>
<MSETG NUM-COMPLEX-POSITIONS <+ ,NUM-PERSECUTION-WINDOWS-BY-2 1>>
<DEFINE IN-COMPLEX-ROOM-F ("OPT" (CONTEXT <>)
"AUX" (POS ,COMPLEX-POS) OBJS
(LOOK? ,COMPLEX-LOOKED?)
CNT)
<COND (<==? .CONTEXT ,M-LOOK>
<SETG COMPLEX-LOOKED? T>
<TELL "You are in " THE ,IN-COMPLEX ". It is a long brightly lit hall running ">
<COND (<==? .POS 0> <TELL "west">)
(<==? .POS ,NUM-COMPLEX-POSITIONS> <TELL "east">)
(T <TELL "east and west">)>
<TELL ", with " N ,NUM-PERSECUTION-WINDOWS-BY-2 " TV screens on each side of the hall. The screens resemble the security monitors one might find at a guard's station.">
<COND (<==? .POS 0> <TELL " There is a sign here.">)
(<==? .POS ,NUM-COMPLEX-POSITIONS>
<TELL " There is an exit to the west.">)
(ELSE
<TELL " There are TV screens to your right and left.">)>
<ZCRLF>
T)
(<==? .CONTEXT ,M-ENTERED>
<COND (<==? .POS 0>
<COND (<ZERO? .LOOK?>
<TELL CR "There is a sign here.">)>)
(<==? .POS ,NUM-COMPLEX-POSITIONS>
<>)
(ELSE
;<SET POS <- .POS 1>>
;<SET OBJS <ZGET <ZGET ,COMPLEX-DATA ,COMPLEX-AUX-OBJS>
.POS>>
;<GET-OBJS .OBJS>
;<ZPUT ,COMPLEX-DATA ,COMPLEX-CURRENT-OBJS .OBJS>
<COND (<ZERO? .LOOK?>
<TELL CR
"There are screens to your right and left.">)>)>
<COND (<ZERO? .LOOK?> <ZCRLF>)>
<SETG COMPLEX-LOOKED? <>>
T)
(<==? .CONTEXT ,M-ENTERING>
<COND (<==? .POS ,NUM-COMPLEX-POSITIONS>
<MOVE ,MPLUG ,IN-COMPLEX>)
(T
<ZREMOVE ,MPLUG>)>
<>)
(<AND <==? .CONTEXT ,M-END>
<VERB? LOOK>>
<SETG COMPLEX-LOOKED? <>>)
;(<==? .CONTEXT ,M-BEG>
<SETG COMPLEX-LOOKED? <>>
<SET OBJS <ZGET ,COMPLEX-DATA ,COMPLEX-CURRENT-OBJS>>
<SET CNT <ZGET .OBJS 0>>
<SET OBJS <ZREST .OBJS 2>>
<COND (<AND <NOT <VERB? EXAMINE LOOK-ON>>
<N==? .POS 0>
<N==? .POS ,NUM-COMPLEX-POSITIONS>
<N==? ,PRSA ,V?WALK>
<OR <INTBL? ,WINNER .OBJS .CNT>
<INTBL? ,PRSO .OBJS .CNT>
<INTBL? ,PRSI .OBJS .CNT>>>
<TELL "The screen is obviously unbreakable. We're not talking two-way cable here, either, so interaction is out of the question." CR>
,FATAL-VALUE)
(ELSE <>)>)
(T <>)>>
;<DEFINE PERSON? (OBJ)
<AND <T? .OBJ>
<IS? .OBJ ,PERSON>
<N==? .OBJ ,ME>>>
<DEFINE COMPLEX-MOVE ("AUX" (X ,COMPLEX-POS))
<COND (<==? ,P-WALK-DIR ,P?EAST>
<COND (<==? .X 0>
<TELL "You are at the end of hall and can go no further."
CR>
<>)
(ELSE
<SET X <- .X 1>>
;<COND (<N==? .X <- ,NUM-COMPLEX-POSITIONS 1>>
<REMOVE-OBJS <ZGET ,COMPLEX-DATA
,COMPLEX-CURRENT-OBJS>>)>
<SETG COMPLEX-POS .X>
,IN-COMPLEX)>)
(<==? .X ,NUM-COMPLEX-POSITIONS>
,UNDER-TRAP-DOOR)
(ELSE
<SETG COMPLEX-POS <+ .X 1>>
;<COND (<N==? .X 0>
<REMOVE-OBJS <ZGET ,COMPLEX-DATA
,COMPLEX-CURRENT-OBJS>>)>
,IN-COMPLEX)>>
<OBJECT PERSECUTION-SIGN
(LOC IN-COMPLEX)
(DESC "sign")
(FLAGS NODESC)
(SYNONYM NOTICE SIGN)
(ACTION PNOTICE-F)>
<CONSTANT PNOTICE-TXT
<PLTABLE 33
" REMINDER "
" "
" This week, work on "
<>
<>
" now at Happitec ">>
<DEFINE PNOTICE-F ()
<COND (<VERB? READ EXAMINE LOOK-ON>
<TELL "You read the notice." CR>
<WINDOW ,PNOTICE-TXT
<ZREST <ZGET ,LICENSE-FORM <+ ,FIRST-NAME 1>>
<- ,FIELD-DATA-OFFSET 1>>
<ZREST <ZGET ,LICENSE-FORM <+ ,LAST-NAME 1>>
<- ,FIELD-DATA-OFFSET 1>>>
T)
(ELSE <>)>>
<OBJECT WINDOW-R
(DESC "right observation screen")
(LOC IN-COMPLEX)
(FLAGS NODESC)
(SYNONYM SCREENS SCREEN MONITOR)
(ADJECTIVE OBSERVATION RIGHT SECURITY TV TELEVISION)
(ACTION RWINDOW-F)>
<OBJECT WINDOW-L
(DESC "left observation screen")
(FLAGS NODESC)
(LOC IN-COMPLEX)
(SYNONYM SCREENS SCREEN MONITOR)
(ADJECTIVE OBSERVATION LEFT SECURITY TV TELEVISION)
(ACTION LWINDOW-F)>
<DEFINE LWINDOW-F () <LRWINDOW-F T>>
<DEFINE RWINDOW-F () <LRWINDOW-F <>>>
<DEFINE LRWINDOW-F LF (LEFT? "AUX" (POS ,COMPLEX-POS))
<COND (<==? .POS 0>
<TELL "You'll need to go west to do anything with the screens." CR>
<RETURN T .LF>)
(<==? .POS ,NUM-COMPLEX-POSITIONS>
<TELL "You'll need to go east to do anything with the screens." CR>
<RETURN T .LF>)>
<COND (.LEFT?
<SET POS <+ .POS ,NUM-PERSECUTION-WINDOWS-BY-2>>)>
<COND (<VERB? EXAMINE LOOK-ON LOOK-INSIDE>
<TELL "You look at this screen and see ">
<SET POS <- .POS 1>>
<COND (<T? <COMPUTER-DEAD?>>
<TELL <ZGET ,ALT-COMPLEX-WINDOW-DESC .POS>>)
(T
<TELL <ZGET ,COMPLEX-WINDOW-DESC .POS>>)>
<ZCRLF>
T)
(ELSE
<>)>>
;<DEFINE REMOVE-OBJS (LTBL "AUX" LEN)
<COND (<T? .LTBL>
<SET LEN <ZGET .LTBL 0>>
<REPEAT ()
<ZREMOVE <ZGET .LTBL .LEN>>
<COND (<L=? <SET LEN <- .LEN 1>> 0>
<RETURN>)>>)>
T>
;<DEFINE GET-OBJS (LTBL "AUX" LEN TMP)
<COND (<T? .LTBL>
<SET LEN <ZGET .LTBL 0>>
<REPEAT ()
<SET TMP <ZGET .LTBL .LEN>>
<MOVE .TMP ,IN-COMPLEX>
<MAKE .TMP ,NODESC>
<COND (<L=? <SET LEN <- .LEN 1>> 0>
<RETURN>)>>)>
T>
<OBJECT UNDER-TRAP-DOOR
(LOC ROOMS)
(FLAGS PLACE LIGHTED INDOORS NO-NERD)
(SYNONYM SHAFT AIRSHAFT GRAFFITI GRAFFITO)
(ADJECTIVE AIR)
(DESC "air shaft")
(EAST TO IN-COMPLEX)
(OUT PER UP-TO-LANDING-STRIP)
(UP PER UP-TO-LANDING-STRIP)
(ACTION UNDER-TRAP-DOOR-F)>
<DEFINE SAY-GRAFFITI ()
<TELL "\"This is the werst departure luonge what I ever seen\". The
others are unreadable." CR>>
<DEFINE UNDER-TRAP-DOOR-F ("OPT" (CONTEXT <>))
<COND (<==? .CONTEXT ,M-LOOK>
<TELL "This is a room where hot air is discharged, even barer than
the airlock. It's like being inside the President's mind, except for the
scrawled graffiti on the walls, one of which says, ">
<SAY-GRAFFITI>
<TELL CR "An exit leads up." CR>
T)
(<T? .CONTEXT> <>)
(<HERE? UNDER-TRAP-DOOR>
<COND (<VERB? READ>
<SAY-GRAFFITI>)
(<VERB? CLIMB-UP>
<DO-WALK ,P?UP>)
(<VERB? EXAMINE>
<PERFORM ,V?LOOK>)>)
(<HERE? LANDING-STRIP>
<COND (<VERB? CLIMB-UP CLIMB-DOWN>
<DO-WALK ,P?DOWN>)
(<VERB? EXAMINE READ>
<TELL "It's the top end of an air shaft. It's probably
impossible to climb back down." CR>)
(<ENTERING?>
<DO-WALK ,P?DOWN>)
(<AND <THIS-PRSI?>
<VERB? PUT PUT-ON>>
<ZREMOVE ,PRSO>
<TELL CTHEO " falls out of sight; presently, you hear it
hitting the bottom of the shaft. Wasn't that fun?" CR>)>)
(T
<TELL "There's no air shaft here." CR>)>>
<DEFINE UP-TO-LANDING-STRIP ()
<TELL "You struggle up the air shaft, and find yourself back above ground">
<COND (<AND <F? <COMPUTER-DEAD?>>
<NOT ,PLANE-SUMMONED?>>
<TELL ", where you see a primitive landing strip hacked out of the jungle.||"
"Look. Um...|
|
We're not quite sure how to put this, so we got the lawyers to draft something
instead.|
|
\"Infocom Inc. currently possesses no mechanism for allowing proactive
product end-users\" -- sorry about the tacky '80s MBA jargon, but you
know how lawyers " ITAL "love" " bull like that -- \"to escape from
interactive fiction situations without having made the least attempt
to solve the puzzles.|
|
\"The normal penalty under these circumstances would be death. However,
we are prepared to offer you the option of
returning whence you came.|
|
\"Actually, this isn't really an option. Look at it from our point of
view. Suppose you said 'To hell with it, I'd rather die', where would
we be then? We'd have no option but to sue the guts out of you. And
have you the remotest idea of the paperwork " ITAL "that" " would involve?
We have wives and families, you know, and girlfriends, and sometimes we just
like to go bowling of an evening or just hang out at the gas station,
drinking Fresca and bad-mouthing the treasury.|
|
\"So: back you go.\"|
|
Sorry about that. That's what the lawyers say, so that's what has to
happen" ,PCR>
,IN-COMPLEX)
(T
<TELL ,PCR>
,LANDING-STRIP)>>
<OBJECT LANDING-STRIP
(DESC "landing strip")
(LOC ROOMS)
(FLAGS PLACE NODESC LIGHTED NO-NERD)
(SYNONYM STRIP JUNGLE)
(ADJECTIVE LANDING AIR)
(WEST SORRY "The jungle that surrounds the landing strip is impenetrable. You may, quite rightly, ask how there happens to be a landing strip in the midst of it. Well, we aren't sure, but it happened.")
(NORTH SORRY "The jungle that surrounds the landing strip is impenetrable. You may, quite rightly, ask how there happens to be a landing strip in the midst of it. Well, we aren't sure, but it happened.")
(SOUTH SORRY "The jungle that surrounds the landing strip is impenetrable. You may, quite rightly, ask how there happens to be a landing strip in the midst of it. Well, we aren't sure, but it happened.")
(EAST SORRY "The jungle that surrounds the landing strip is impenetrable. You may, quite rightly, ask how there happens to be a landing strip in the midst of it. Well, we aren't sure, but it happened.")
(DOWN PER DOWN-FROM-STRIP)
(UP SORRY "All in due course.")
(GLOBAL UNDER-TRAP-DOOR)
(ACTION LANDING-STRIP-F)>
<SETG DOWN-FROM-STRIP-COUNT 0>
<DEFINE DOWN-FROM-STRIP ("AUX" (DFS ,DOWN-FROM-STRIP-COUNT))
<COND (<0? .DFS>
<TELL "It was hard enough climbing up. Climbing down is
practically impossible">)
(T
<TELL "All right, climbing down is " ITAL "absolutely"
" impossible, due to the law of gravity.|
|
This may seem like a pretty feeble excuse to you. You're right. ">
<COND (<T? <COMPUTER-DEAD?>>
<TELL "If we let you back down there now, we'd have to
show the nerd running amok, crazed with grief over the death of his
computer, and you'd have to be able to fight him, or console him, or
whatever's appropriate, and it would just be too painful for us. "
ITAL "Ergo" ", you'll have to stay here">)
(T
<TELL "We could let you go back down, but what would it
buy you? You'd miss the " D ,PLANE " you so painstakingly called, and then
we'd have to have some inventive way for you to die in the middle of the
jungle, and all in all you're better off staying up here. So there you have
it">)>)>
<SETG DOWN-FROM-STRIP-COUNT <SET DFS <+ .DFS 1>>>
<TELL ,PERIOD>
<>>
<SETG LS-MOVE-COUNT 0>
<DEFINE LANDING-STRIP-F ("OPT" (CONTEXT <>))
<COND (<==? .CONTEXT ,M-ENTERING>
<DEQUEUE I-NERD>
<COND (<NOT ,PLANE-SUMMONED?>
<QUEUE I-PLANE-ARRIVES -1>
<SETG LS-MOVE-COUNT 7>)
(<NOT <QUEUED? I-PLANE-ARRIVES>>
<QUEUE I-PLANE-ARRIVES -1>)>
<>)
(<AND <==? .CONTEXT ,M-BEG>
<NOT ,PLANE-SUMMONED?>>
<COND (<==? ,LS-MOVE-COUNT 255>
<TELL "Infocom regrets that the laws of nature were
suspended for only one turn. You crash to the ground with some interesting new
theories forming in your mind on the method of proof-by-induction.
Unfortunately, before you can organise your thoughts into anything which
would be remotely acceptable as a Ph.D. dissertation -- even at Caltech -- you die.">
<JIGS-UP>
T)
(<L=? <SETG LS-MOVE-COUNT <- ,LS-MOVE-COUNT 1>> 0>
<COND (<VERB? WAIT>
<TELL "There is a limit to human patience. You are
really fed up now, and wish you were dead. Fair enough.">
<JIGS-UP>
T)
(<VERB? WALK>
<COND (<==? ,P-WALK-DIR ,P?DOWN>
<TELL "A reasonable suggestion. A line from
John Donne comes into your mind:|
|
\"The grave's a fine and private place|
But none, methinks, do there embrace.\"|
|
Just as you realise that this is, in fact, a line from Andrew Marvell,
you die. What a bitch, eh?">
<JIGS-UP>
T)
(<==? ,P-WALK-DIR ,P?UP>
<TELL "You were planning to fly, perhaps?
Nah, you wouldn't want to try that without an " D ,PLANE ". There probably
won't be one showing up here, since you neglected to ask for one, so you're
doomed to die here in the jungle.">
<JIGS-UP>
T)>)
(<VERB? FLY>
<TELL "Right-ho. You are de... Oh -- sorry. Misheard
you. Thought you said \"Die\". Ah well; too late now.">
<JIGS-UP>
T)
(T <>)>)
(<AND <VERB? WALK>
<==? ,P-WALK-DIR ,P?UP>>
<TELL "What in?" CR>)
(<VERB? FLY>
<SETG LS-MOVE-COUNT 255>
<TELL "You flap your arms wildly and, in defiance of the
laws of nature, rise slowly off the ground." CR>
T)
(T <>)>)
(<==? .CONTEXT ,M-LOOK>
<TELL "This is a bare landing strip surrounded by jungle. An
air shaft leads down." CR>)
(<T? .CONTEXT> <>)
(<VERB? EXAMINE LOOK-ON>
<COND (<NOUN-USED? ,W?JUNGLE>
<TELL "It's the usual impenetrable Zalagasan jungle." CR>)
(T
<PERFORM ,V?LOOK>)>)>>
<SETG PLANE-ARRIVE-COUNT 4>
<DEFINE I-PLANE-ARRIVES ()
<COND (<==? <SETG PLANE-ARRIVE-COUNT <- ,PLANE-ARRIVE-COUNT 1>> 2>
<TELL CR
"In the distance you hear the sound of Zalagasans having
a huge row about whether bearnaise sauce or grated Parmesan is better
with boiled visitor." CR>)
(<==? ,PLANE-ARRIVE-COUNT 0>
<DEQUEUE I-PLANE-ARRIVES>
<COND (<NOT ,PLANE-SUMMONED?>
<TELL CR
"At this point, you'd expect the Zalagasans to start
droning, and then that would turn into an " D ,PLANE ", and you'd fly out of
here. Unfortunately, the plane doesn't know it's supposed to show up here,
since you never told it to,
so that doesn't happen. The Zalagasans continue to row about bearnaise
sauce and grated Parmesan." CR>)
(T
<TELL CR
"For some reason, the Zalagasans have started droning... or have they?
No, it is the sound of an aircraft in the distance. The sound of the
engines gets louder and louder until suddenly an ancient DC-3 appears
nightmarishly low above the treetops, circles the airfield once, and
lands with a cloud of dust and a squeal of brakes.|
|
The door opens and you leap on board to be greeted by a ">
<GENDER-PRINT "beautiful copilot"
"ruggedly handsome flight attendant">
<TELL ". \"You finally fixed that dreadful nerd,\" ">
<GENDER-PRINT "she" "he">
<TELL " says. \"You wouldn't believe what he was doing, even to
our own navigation systems. It was as if he didn't care who he
inconvenienced, even himself, as long as he was hacking. Gosh, I'm just so
grateful I could die!\"|
|
With that, the ">
<GENDER-PRINT "copilot" "flight attendant">
<TELL " enfolds you in ">
<GENDER-PRINT "her" "his">
<TELL " arms and you begin to realise why people like
private " D ,PLANE "s" ,PCR>
<COND (<T? <COMPUTER-DEAD?>>
<MOVE ,END-MAIL ,FROOM>
<TELL "After an eventful and invigorating flight, you land
at your home airport, pass through customs without the least difficulty, and are
ushered into a waiting taxi, which drives you straight to the wrong place.
Perhaps you thought that the taxi company was being fouled up by the
nerd. Wrong. Taxi companies foul up because that's what they like doing"
,PERIOD>
<SETG END-GAME? T>
<UPDATE-SCORE 2>
<ZCRLF>
<UNMAKE ,FROOM ,TOUCHED>
<UNMAKE ,BROOM ,TOUCHED>
<UNMAKE ,PORCH-DOOR ,OPENED>
<MAKE ,PORCH-DOOR ,LOCKED>
<UNMAKE ,BWGATE ,OPENED>
<MAKE ,BWGATE ,LOCKED>
<GOTO ,THALL T <>>)
(T
<TELL "You " ITAL "knew"
" something was up, didn't you?
Quite right.|
|
The pilot comes back to where you are sitting, spoiling your tasty fun.
You wonder why he is not flying the " D ,PLANE ", but when he explains that
the computerised navigation system appears to be going haywire due to
outside intervention, you realise why he is not flying it. There would
be little point.|
|
You realise just " ITAL "how" " little when the " D ,PLANE " goes into a steep
spiral dive and you hear a loud bang followed by a toneless but exuberant
rendition of an ancient Zalagasan song about what a coincidence it is
that, just when everyone is feeling peckish and wondering about sending
out for a 48-inch deep-dish pizza with extra everything, there should be
a convenient lunch delivery.|
|
Your last words are \"Hey! I don't " ITAL "like" " anchovies!\" But the
Zalagasans put them on you anyway.">
<JIGS-UP>
T)>)>)
(T <>)>>
<OBJECT END-MAIL
(DESC "new letter")
(FLAGS TAKEABLE READABLE)
(SYNONYM LETTER)
(ADJECTIVE NEW)
(ACTION END-MAIL-F)>
<DEFINE END-MAIL-F ()
<COND (<VERB? TAKE>
<TELL "This is a letter addressed to you, from your bank." CR>
<MOVE ,END-MAIL ,PLAYER>
T)
(<VERB? OPEN>
<TELL "OK." CR>)
(<AND <THIS-PRSO?>
<VERB? DROP PUT PUT-ON>>
<TELL "Before disposing of " THEO ", you sensibly read it.">
<PERFORM ,V?READ ,PRSO>
T)
(<AND <THIS-PRSO?>
<VERB? READ EXAMINE>>
<TELL CR CR "\"Dear ">
<GENDER-PRINT "Mr " "Ms ">
<PRINT-LAST-NAME>
<TELL ",|
|
I would like on behalf of Fiduciary to apologize profusely for the
problems you have been encountering lately. This was due partly to
mysterious computer problems which have suddenly ceased to plague us,
but also to the inability of our staff to show any initiative at all
when confronted with a systems breakdown.|
|
I have immediately initiated a training program to counteract this
ridiculous bureaucracy, and trust that in your future dealings with
Fiduciary you will have no cause for complaint.|
|
By way of compensation I have waived all interest and administration
charges for this quarter, and would also like you to accept this free
first-class ticket to Paris.|
|
I also enclose your check book and a new Gold Beezer card and have
raised your credit limit to $10,000.|
|
Sincerely yours,|
|
Joel X. Slartibartfast|
PRESIDENT\"|
|
Glowing with pleasure at your notable victory, you do not even notice that
the bank letter has been redirected from your old address, to which it was
originally sent. You have a nice hot drink and turn in for the night, humming
a happy little song about how much you are looking forward to your trip to
Paris. You are particularly pleased with your impression of the accordion
accompaniment and fall asleep with the words \"">
<GENDER-PRINT "Bonjour, Ma'm'selle" "Ooh la la, M'sieu">
<TELL "\" on your lips.|
|
You have won. Thank you for playing Bureaucracy, and if your future
entertainment plans should include interactive fiction, please think
of Infocom. Have a nice day." CR>
<UPDATE-SCORE 1>
<COND (<N==? ,DO-SCORE? 2> <ZCRLF>)>
<V-QUIT <>>)>>

1088
misc.zil Normal file

File diff suppressed because it is too large Load Diff

295
mumble.zil Normal file
View File

@ -0,0 +1,295 @@
"MAZE-PROG for BUREAUCRACY: Copyright (C)1987 Infocom, Inc.
All rights reserved."
<FILE-FLAGS MDL-ZIL?>
<INCLUDE "FORMDEFS" "COMPUTERDEFS">
<MSETG MAX-CHARS <* ,COMPUTER-HEIGHT ,COMPUTER-WIDTH>>
<MSETG MAX-CHARS/4 </ ,MAX-CHARS 4>>
<MSETG MAX-CHARS/16 </ ,MAX-CHARS 16>>
<MSETG QSIZE </ ,MAX-CHARS 4>>
<MSETG COMPUTER-HEIGHT/2 </ ,COMPUTER-HEIGHT 2>>
<MSETG COMPUTER-WIDTH/2 </ ,COMPUTER-WIDTH 2>>
<SETG20 TST
<IVECTOR ,COMPUTER-WIDTH '<ISTRING ,COMPUTER-HEIGHT <ASCII 32>>>>
<DEFINE20 LD-FILE (FILE
"AUX" (CH <OPEN "READ" .FILE>) N:FIX
(TS <STACK <ISTRING ,COMPUTER-WIDTH>>)
(COLS:VECTOR ,TST) (CS <1 .COLS>))
<COND (.CH
<SET N <MIN ,MAX-CHARS <FILE-LENGTH .CH>>>
<REPEAT (RD)
<COND (<0? <SET RD <READSTRING .TS .CH " ">>>
<RETURN>)>
<COND (<==? .RD <+ <LENGTH .CS> 1>>
<SUBSTRUC .TS 0 <- .RD 1> .CS>
<SET COLS <REST .COLS>>
<SET CS <1 .COLS>>)
(<G? .RD <LENGTH .CS>>
<SET COLS <REST .COLS>>
<SET CS <1 .COLS>>
<SUBSTRUC .TS 0 .RD .CS>
<SET CS <REST .CS .RD>>)
(T
<SUBSTRUC .TS 0 .RD .CS>
<SET CS <REST .CS .RD>>)>>
<CLOSE .CH>)
(ELSE .CH)>>
<DEFINE20 TABLEIZE ( )
<MAPF ,TABLE
<FUNCTION (ST:STRING "AUX" (FIRST? T))
<MAPF ,TABLE
<FUNCTION (CHR:CHARACTER "AUX" NEW)
<SET NEW <TRANS .CHR>>
<COND (.FIRST?
<SET FIRST? <>>
<MAPRET '(BYTE) <CHTYPE .NEW FIX>>)
(T
<CHTYPE .NEW FIX>)>>
.ST>>
,TST>>
" 0 ==> space, 1...26 ==> A...Z, 27...53 ==> a...z,
54 ==> .
55 ==> ,
56 ==> ;
57...63 ==> 0...6
"
<DEFINE20 TRANS (CHAR)
<SET CHAR <CHTYPE .CHAR FIX>>
<COND (<==? .CHAR 32> 0)
(<AND <G=? .CHAR <ASCII !\A>>
<L=? .CHAR <ASCII !\Z>>>
<- .CHAR <ASCII !\A> -1>)
(<AND <G=? .CHAR <ASCII !\a>>
<L=? .CHAR <ASCII !\z>>>
<- .CHAR <ASCII !\a> -27>)
(<AND <G=? .CHAR <ASCII !\0>>
<L=? .CHAR <ASCII !\6>>>
<- .CHAR <ASCII !\0> -57>)
(<==? .CHAR <ASCII !\.>> 54)
(<==? .CHAR <ASCII !\,>> 55)
(<==? .CHAR <ASCII !\;>> 56)>>
<LD-FILE "SS:<BUREAUCRACY>TEXT.FILE">
<CONSTANT PROG-TABLE <TABLEIZE>>
<MSETG QLEFT 0>
<MSETG QRIGHT 1>
<MSETG QTOP 2>
<MSETG QBOT 3>
<CONSTANT PUNCT-TABLE
<TABLE (PURE BYTE)
%<ASCII !\.> %<ASCII !\,> %<ASCII !\;>>>
<DEFINE PROG-FIRST (A B C)
<DO-PROG 0 *100*>>
<DEFINE PROG-SECOND (A B C)
<DO-PROG 1 *200*>>
<DEFINE PROG-THIRD (A B C)
<DO-PROG 2 *300*>>
<DEFINE PROG-FOURTH (A B C)
<DO-PROG 3 *300*>>
<CONSTANT QTOPS
<PTABLE (BYTE) 0 0 </ ,COMPUTER-HEIGHT 2> </ ,COMPUTER-HEIGHT 2>>>
<CONSTANT QLEFTS
<PTABLE (BYTE) </ ,COMPUTER-WIDTH 2> 0 0 </ ,COMPUTER-WIDTH 2>>>
<ROUTINE-FLAGS CLEAN-STACK?>
<DEFINE DO-PROG DP (NQN "OPT" (MB 0) "AUX" NBCHRS NGCHRS (QN .NQN))
<COND (<G=? .NQN 0>
<CLEAR-QUADRANT .QN>)
(T
<SET QN 0>)>
; "Clear written bits for appropriate quadrants"
<REPEAT ((N <- 4 .QN>) RT TOP (CQ 3))
<COND (<==? .CQ 0>
<SET RT <ZREST ,PROG-TABLE ,COMPUTER-WIDTH>>
<SET TOP 0>)
(<==? .CQ 1>
<SET RT ,PROG-TABLE>
<SET TOP 0>)
(<==? .CQ 2>
<SET RT ,PROG-TABLE>
<SET TOP </ ,COMPUTER-HEIGHT 2>>)
(T
<SET RT <REST ,PROG-TABLE ,COMPUTER-WIDTH>>
<SET TOP </ ,COMPUTER-HEIGHT 2>>)>
<PUTB ,LAST-USED <* .CQ 2> 255>
<PUTB ,LAST-USED <+ <* .CQ 2> 1> 255>
<REPEAT (I (CT 0) TBL)
<SET TBL <ZREST <ZGET .RT .CT> .TOP>>
<SET I 0>
<REPEAT ()
<PUTB .TBL .I <ANDB <GETB .TBL .I> *77*>>
<COND (<G=? <SET I <+ .I 1>> </ ,COMPUTER-HEIGHT 2>>
<RETURN>)>>
<COND (<G=? <SET CT <+ .CT 1>> </ ,COMPUTER-WIDTH 2>>
<RETURN>)>>
<SET CQ <- .CQ 1>>
<COND (<L=? <SET N <- .N 1>> 0> <RETURN>)>>
<COND (<L? .NQN 0> <RETURN T .DP>)>
<SET NBCHRS <* </ ,MAX-CHARS 4> <+ .QN 1>>>
<SET NGCHRS <* </ ,MAX-CHARS 16> <+ <* .QN 2> 1>>>
<SET NBCHRS <- .NBCHRS .NGCHRS>>
; "e.g., q0 makes 1/4 screen's worth of chars; 1/4 of those
(1/16 of total) will be good;
q1 is 1/2 & 3/16;
q2 is 3/4 & 5/16;
q3 is 1 and 7/16. q0 good chars are confined to q0; q1 to
q0&q1, etc. Further, a bad char may not overwrite an existing
good char, but q0 clears all good bits; q1 all but q0; q2 all
but q0 & q1; etc"
<REPEAT ()
<COND (<NOT <L? <SET NBCHRS <- .NBCHRS 1>> 0>>
<GEN-BAD-CHAR .QN .MB>)>
<COND (<NOT <L? <SET NGCHRS <- .NGCHRS 1>> 0>>
<GEN-GOOD-CHAR .QN .MB>)>
<COND (<AND <L=? .NGCHRS 0>
<L=? .NBCHRS 0>>
<RETURN>)>>
<>>
<DEFINE GEN-BAD-CHAR (QN:FIX MB "AUX" BQ X Y)
<SET BQ <ZRANDOM 3>>
<COND (<==? .BQ .QN>
<SET BQ 0>)>
<SET X <ZRANDOM </ ,COMPUTER-WIDTH 2>>>
<SET X <+ <SET X <- .X 1>> <GETB ,QLEFTS .BQ>>>
<SET Y <ZRANDOM </ ,COMPUTER-HEIGHT 2>>>
<SET Y <+ <SET Y <- .Y 1>> <GETB ,QTOPS .BQ>>>
<COND (<TEST-CHAR .X .Y .MB <>>
<FORCE-CHAR <GEN-CHAR .X .Y> .X .Y>)>>
<DEFINE TEST-CHAR (X Y BIT "OPT" (SET? T) "AUX" TBL CHR NB)
<SET TBL <ZGET ,PROG-TABLE .X>>
<SET NB <ANDB <SET CHR <GETB .TBL .Y>> *300*>>
<COND (<AND <T? .NB>
<L=? .NB .BIT>>
; "Q2 can write on stuff dumped by the Q3 and Q4 progs, but
not Q1 or Q2..."
<>)
(.SET?
<PUTB .TBL .Y <ORB .CHR *100*>>
<INVERT-CHAR .CHR>)
(T T)>>
<CONSTANT LAST-USED <TABLE (BYTE) 0 0 0 0 0 0 0 0>>
<ROUTINE-FLAGS CLEAN-STACK?>
<DEFINE GEN-GOOD-CHAR (QN:FIX MB:FIX "AUX" GQ X Y (QCT 0))
<SET GQ <- <SET GQ <ZRANDOM <+ <* .QN 2> 1>>> 1>>
<COND (<G=? .GQ .QN> <SET GQ .QN>)>
<SET X <ZRANDOM </ ,COMPUTER-WIDTH 2>>>
<SET X <- .X 1>>
<SET Y <- <SET Y <ZRANDOM </ ,COMPUTER-HEIGHT 2>>> 1>>
<PROG (CL CT RX RY GQ*2)
<SET CL <GETB ,QLEFTS .GQ>>
<SET CT <GETB ,QTOPS .GQ>>
<SET RX <+ .CL .X>>
<SET RY <+ .CT .Y>>
<REPEAT (CHR (DUMP? <>))
<COND (<G? .QCT 5> <RETURN>)
(<NOT <SET CHR <TEST-CHAR .RX .RY .MB>>>
<COND (<NOT .DUMP?>
<SET DUMP? T>
; "Start at virtual top left (this is actual char
addr last written in this mode, so OK to add
1 below"
<COND (<==? <SET X
<GETB ,LAST-USED <SET GQ*2 <* .GQ 2>>>>
255>
<SET X -1>)>
<COND (<==? <SET Y <GETB ,LAST-USED <+ .GQ*2 1>>>
255>
<SET Y 0>)>
<COND (<G=? .Y </ ,COMPUTER-HEIGHT 2>>
<SET X </ ,COMPUTER-WIDTH 2>>)>
<SET RX <+ .CL .X>>
<SET RY <+ .CT .Y>>)>
<PROG ()
<COND (<G? .QCT 5> <RETURN>)
(<G=? <SET X <+ .X 1>> </ ,COMPUTER-WIDTH 2>>
; "End of line, so go to next"
<COND (<G=? <SET Y <+ .Y 1>> </ ,COMPUTER-HEIGHT 2>>
; "End of quadrant, so go to next"
<PUTB ,LAST-USED .GQ*2 .X>
<PUTB ,LAST-USED <+ .GQ*2 1> .Y>
<SET QCT <+ .QCT 1>>
<COND (<G? <SET GQ <+ .GQ 1>> .QN>
<SET GQ 0>)>
<SET CL <GETB ,QLEFTS .GQ>>
<SET CT <GETB ,QTOPS .GQ>>
<SET GQ*2 <* .GQ 2>>
; "255 means never touched, so make sure we
get 0"
<COND (<==? <SET X <GETB ,LAST-USED .GQ*2>>
255>
<SET X -1>)>
<COND (<==? <SET Y
<GETB ,LAST-USED <+ .GQ*2 1>>>
255>
<SET Y 0>)
(<G=? .Y </ ,COMPUTER-HEIGHT 2>>
<SET X </ ,COMPUTER-WIDTH 2>>)>
<SET RY <+ .Y .CT>>
<AGAIN>)
(T
<SET X 0>)>
<SET RY <+ .CT .Y>>)>>
<SET RX <+ .X .CL>>)
(T
<FORCE-CHAR .CHR .RX .RY>
<COND (.DUMP?
<PUTB ,LAST-USED .GQ*2 .X>
<PUTB ,LAST-USED <+ .GQ*2 1> .Y>)>
<RETURN>)>>>>
<MSETG NCHARS 64>
<CONSTANT FUNNY-FIELDS <ITABLE ,COMPUTER-HEIGHT 0>>
<DEFINE GEN-CHAR (H:FIX V:FIX "AUX" (FF ,FUNNY-FIELDS) (CHR -1) TF
(V1 <+ .V 1>) SW)
<COND (<0? <MOD .V 2>>
<COND (<F? <SET TF <ZGET .FF .V>>>
<SET TF <ZREST <PICK-ONE ,LICENSE-FORM>
<- ,FIELD-DATA-OFFSET 1>>>
<COND (<L=? <+ .H <GETB .TF 0>> ,COMPUTER-WIDTH>
<ZPUT .FF .V .TF>
<ZPUT .FF .V1 .H>)
(T
<SET TF <>>)>)>
<COND (<AND .TF
<G=? .H <SET SW <ZGET .FF .V1>>>>
<SET CHR
<GETB .TF <+ 1 <MOD <- .H .SW> <GETB .TF 0>>>>>)>)>
<COND (<==? .CHR -1>
<INVERT-CHAR <- <ZRANDOM ,NCHARS> 1>>)
(T
<CHTYPE .CHR FIX>)>>
<DEFINE INVERT-CHAR (N)
<SET N <ANDB .N *77*>>
<COND (<==? .N 0> <SET N 32>)
(<L? .N 27> <SET N <+ .N %<- <ASCII !\A> 1>>>)
(<L? .N 54> <SET N <+ .N %<- <ASCII !\a> 27>>>)
(<G=? .N 57> <SET N <+ .N %<- <ASCII !\0> 57>>>)
(ELSE <SET N <GETB ,PUNCT-TABLE <- .N 54>>>)>
.N>
<DEFINE20 TCOMP ()
<MOVE ,COMPUTER ,PLAYER>
<MOVE ,RANDOM-CARTRIDGE ,PLAYER>
<PERFORM ,V?PUT ,RANDOM-CARTRIDGE ,COMPUTER>>

2330
nairport.zil Normal file

File diff suppressed because it is too large Load Diff

1028
njet.zil Normal file

File diff suppressed because it is too large Load Diff

260
nmaze-program.zil Normal file
View File

@ -0,0 +1,260 @@
"MAZE-PROG for BUREAUCRACY: Copyright (C)1987 Infocom, Inc.
All rights reserved."
<FILE-FLAGS MDL-ZIL?>
<INCLUDE "FORMDEFS" "COMPUTERDEFS">
<MSETG MAX-CHARS <* ,COMPUTER-HEIGHT ,COMPUTER-WIDTH>>
<MSETG QSIZE </ ,MAX-CHARS 4>>
<MSETG COMPUTER-WIDTH*2 <* ,COMPUTER-WIDTH 2>>
<MSETG COMPUTER-HEIGHT/2 </ ,COMPUTER-HEIGHT 2>>
<MSETG COMPUTER-HEIGHT/2-1 <- </ ,COMPUTER-HEIGHT 2> 1>>
<MSETG COMPUTER-WIDTH/2 </ ,COMPUTER-WIDTH 2>>
<MSETG COMPUTER-WIDTH/2-1 <- </ ,COMPUTER-WIDTH 2> 1>>
<MSETG COMPUTER-WIDTH*3/2 </ <* ,COMPUTER-WIDTH 3> 2>>
<MSETG Q1-GOOD-CHARS </ ,QSIZE 4>>
<MSETG Q2-GOOD-CHARS </ <* ,QSIZE 3> 4>>
<MSETG Q3-GOOD-CHARS </ <* ,QSIZE 5> 4>>
<MSETG Q4-GOOD-CHARS </ <* ,QSIZE 7> 4>>
<SETG20 TST
<IVECTOR ,COMPUTER-WIDTH '<ISTRING ,COMPUTER-HEIGHT <ASCII 32>>>>
<SETG20 TST2
<IVECTOR ,COMPUTER-WIDTH*2 '<IUVECTOR ,COMPUTER-HEIGHT/2 32>>>
<SETG20 INPUT-STR <ISTRING ,MAX-CHARS>>
<DEFINE20 LD-FILE (FILE
"AUX" (CH <OPEN "READ" .FILE>) N:FIX)
<COND (.CH
<SET N <MIN ,MAX-CHARS <FILE-LENGTH .CH>>>
<READSTRING ,INPUT-STR .CH .N>
<CLOSE .CH>
<FILL ,INPUT-STR ,TST>)
(ELSE .CH)>>
<DEFINE20 FILL (STR TBL
"AUX" (I 0) (LEN <LENGTH .STR>))
<MAPF <>
<FUNCTION (S "AUX" (J 0) K)
<REPEAT ()
<SET K .J>
<COND (<MAPF <>
<FUNCTION (CHR)
<SET K <+ .K 1>>
<COND (<==? .CHR <ASCII 32>>
<MAPLEAVE T>)>
<COND (<G? .K ,COMPUTER-HEIGHT>
<MAPLEAVE <>>)>
T>
<REST!- .STR .I>>
<SUBSTRUC .STR .I
<- .K .J 1>
<REST!- .S .J>>
<SET I <+ .I <- .K .J>>>
<SET J .K>
;<MAPR <>
<FUNCTION (S1 S2)
<PUT!- .S1 1 <1 .S2>>
<SET I <+ .I 1>>
<COND (<==? <SET J <+ .J 1>> .K>
<MAPLEAVE>)>>
<REST!- .S .J> <REST!- .STR .I>>)
(ELSE <RETURN>)>>>
.TBL>>
<GDECL (TST) <VECTOR [REST STRING]>>
<GDECL (TST2) <VECTOR [REST UVECTOR]>>
<DEFINE20 TABLEIZE ("AUX" (I:FIX 0) (J:FIX 0) (K:FIX 0))
<REPEAT ()
<COND (<G=? .I ,COMPUTER-HEIGHT> <RETURN!->)>
<PUT!- <NTH!- ,TST2
<COND (<G=? .I ,COMPUTER-HEIGHT/2>
<+ .J ,COMPUTER-WIDTH 1>)
(ELSE
<+ .J 1>)>>
<COND (<G=? .I ,COMPUTER-HEIGHT/2>
<- .I ,COMPUTER-HEIGHT/2 -1>)
(ELSE
<+ .I 1>)>
<TRANS <NTH!- <NTH!- ,TST <+ .J 1>> <+ .I 1>>>>
<COND (<G=? <SET J <+ .J 1>> ,COMPUTER-WIDTH>
<SET I <+ .I 1>>
<SET J 0>)>>
,TST2>
" 0 ==> space, 1...26 ==> A...Z, 27...53 ==> a...z,
54 ==> .
55 ==> ,
56 ==> ;
57...63 ==> 0...6
"
<DEFINE20 TRANS (CHAR)
<SET CHAR <CHTYPE .CHAR FIX>>
<COND (<==? .CHAR 32> 0)
(<AND <G=? .CHAR <ASCII !\A>>
<L=? .CHAR <ASCII !\Z>>>
<- .CHAR <ASCII !\A> -1>)
(<AND <G=? .CHAR <ASCII !\a>>
<L=? .CHAR <ASCII !\z>>>
<- .CHAR <ASCII !\a> -27>)
(<AND <G=? .CHAR <ASCII !\0>>
<L=? .CHAR <ASCII !\6>>>
<- .CHAR <ASCII !\0> -57>)
(<==? .CHAR <ASCII !\.>> 54)
(<==? .CHAR <ASCII !\,>> 55)
(<==? .CHAR <ASCII !\;>> 56)>>
<LD-FILE "SS:<BUREAUCRACY>TEXT.FILE">
<SETG PROG-TABLE <TABLE !<MAPF ,VECTOR
<FUNCTION (STR)
<TABLE (BYTE) !.STR>>
<TABLEIZE>>>>
<MSETG QLEFT 0>
<MSETG QRIGHT 1>
<MSETG QTOP 2>
<MSETG QBOT 3>
;<CONSTANT QUADS <PTABLE <TABLE (PURE BYTE) 19 37 0 7>
<TABLE (PURE BYTE) 0 18 0 7>
<TABLE (PURE BYTE) 0 18 8 15>
<TABLE (PURE BYTE) 19 37 8 15>>>
<CONSTANT PUNCT-TABLE
<TABLE (PURE BYTE)
%<ASCII !\.> %<ASCII !\,> %<ASCII !\;>>>
<DEFINE PROG-FIRST (A B C)
<DO-PROG 1 ,Q1-GOOD-CHARS 1 3 ,COMPUTER-WIDTH/2 0 *100*>>
<DEFINE PROG-SECOND (A B C)
<DO-PROG 0 ,Q2-GOOD-CHARS 3 5 ,COMPUTER-WIDTH ,COMPUTER-WIDTH/2 *200*>>
<DEFINE PROG-THIRD (A B C)
<DO-PROG 2 ,Q3-GOOD-CHARS 5 7 ,COMPUTER-WIDTH*3/2 ,COMPUTER-WIDTH
*300*>>
<DEFINE PROG-FOURTH (A B C)
<DO-PROG 3 ,Q4-GOOD-CHARS ,Q4-GOOD-CHARS 0 ,COMPUTER-WIDTH*2
,COMPUTER-WIDTH*3/2 *300*>>
<ROUTINE-FLAGS CLEAN-STACK?>
<DEFINE DO-PROG (QN SZ GOOD BAD RANGE START MASK "AUX" TBL GC WRAP)
<CLEAR-QUADRANT .QN>
<REPEAT ()
<SET TBL <ZGET ,PROG-TABLE .START>>
<SET I 0>
<REPEAT ()
<PUTB .TBL .I <ANDB <GETB .TBL .I> *77*>>
<COND (<G=? <SET I <+ .I 1>> ,COMPUTER-HEIGHT/2>
<RETURN>)>>
<COND (<G=? <SET START <+ .START 1>> .RANGE> <RETURN>)>>
<SET GC .GOOD>
<REPEAT ()
<COND (<L? <SET SZ <- .SZ 1>> 0> <RETURN>)>
<SET I <- <ZRANDOM .RANGE> 1>>
<SET TBL <ZGET ,PROG-TABLE .I>>
<SET H <- <ZRANDOM ,COMPUTER-HEIGHT/2> 1>>
<SET WRAP .H>
<REPEAT ()
<SET CHR <GETB .TBL .H>>
<COND (<AND <L=? <ANDB .CHR *300*> .MASK>
<G? .CHR 63>>
<SET H <+ .H 1>>
<COND (<==? .H ,COMPUTER-HEIGHT/2>
<SET H 0>)>
<COND (<==? .H .WRAP>
<SET I <+ .I 1>>
<COND (<==? .I .RANGE> <SET I 0>)>
<SET TBL <ZGET ,PROG-TABLE .I>>)>)
(ELSE
<SET CHR <ANDB .CHR *77*>>
<PUTB .TBL .H <ORB .CHR .MASK>>
<RETURN>)>>
<SET CHR <INVERT-CHAR .CHR>>
<COND (<G=? .I ,COMPUTER-WIDTH>
<FORCE-CHAR .CHR <- .I ,COMPUTER-WIDTH>
<+ .H ,COMPUTER-HEIGHT/2>>)
(ELSE
<FORCE-CHAR .CHR .I .H>)>
<COND (<L=? <SET GC <- .GC 1>> 0>
<SET GC .BAD>
<REPEAT ()
<COND (<L? <SET GC <- .GC 1>> 0>
<RETURN>)>
<COND (<==? .QN 1>
<SET I <- <ZRANDOM ,COMPUTER-WIDTH> 1>>
<COND (<L? .I ,COMPUTER-WIDTH/2>
<SET H
<+ <ZRANDOM
,COMPUTER-HEIGHT/2>
,COMPUTER-HEIGHT/2-1>>)
(ELSE
<SET H
<- <ZRANDOM ,COMPUTER-HEIGHT>
1>>)>)
(<==? .QN 0>
<SET I <- <ZRANDOM ,COMPUTER-WIDTH> 1>>
<SET H <+ <ZRANDOM ,COMPUTER-HEIGHT/2>
,COMPUTER-HEIGHT/2-1>>)
(ELSE
<SET I <+ <ZRANDOM ,COMPUTER-WIDTH/2>
,COMPUTER-WIDTH/2-1>>
<SET H <+ <ZRANDOM ,COMPUTER-HEIGHT/2>
,COMPUTER-HEIGHT/2-1>>)>
<COND (<==? <SET GC <- .GC 1>> 0>
<RETURN>)>
<SET CHR <GEN-CHAR .I .H>>
<FORCE-CHAR .CHR .I .H>>
<SET GC .GOOD>)>>
<>>
<MSETG NCHARS 64>
<CONSTANT FUNNY-FIELDS <ITABLE ,COMPUTER-HEIGHT 0>>
<DEFINE GEN-CHAR (H:FIX V:FIX "AUX" (FF ,FUNNY-FIELDS) (CHR -1) TF
(V1 <+ .V 1>) SW)
<COND (<0? <MOD .V 2>>
<COND (<F? <SET TF <ZGET .FF .V>>>
<SET TF <ZREST <PICK-ONE ,LICENSE-FORM>
<- ,FIELD-DATA-OFFSET 1>>>
<COND (<L=? <+ .H <GETB .TF 0>> ,COMPUTER-WIDTH>
<ZPUT .FF .V .TF>
<ZPUT .FF .V1 .H>)
(T
<SET TF <>>)>)>
<COND (<AND .TF
<G=? .H <SET SW <ZGET .FF .V1>>>>
<SET CHR
<GETB .TF <+ 1 <MOD <- .H .SW> <GETB .TF 0>>>>>)>)>
<COND (<==? .CHR -1>
<INVERT-CHAR <- <ZRANDOM ,NCHARS> 1>>)
(T
<CHTYPE .CHR FIX>)>>
<DEFINE INVERT-CHAR (N)
<SET N <ANDB .N *77*>>
<COND (<==? .N 0> <SET N 32>)
(<L? .N 27> <SET N <+ .N %<- <ASCII !\A> 1>>>)
(<L? .N 54> <SET N <+ .N %<- <ASCII !\a> 27>>>)
(<G=? .N 57> <SET N <+ .N %<- <ASCII !\0> 57>>>)
(ELSE <SET N <GETB ,PUNCT-TABLE <- .N 54>>>)>
.N>
;<DEFINE IN-QUAD (I:FIX H:FIX V:FIX
"AUX" (Q <ZGET ,QUADS .I>)
(QL:FIX <GETB .Q ,QLEFT>)
(QR:FIX <GETB .Q ,QRIGHT>)
(QT:FIX <GETB .Q ,QTOP>)
(QB:FIX <GETB .Q ,QBOT>))
<COND (<AND <G=? .H .QL> <L=? .H .QR>
<G=? .V .QT> <L=? .V .QB>>
T)
(ELSE <>)>>

2815
nnairport.zil Normal file

File diff suppressed because it is too large Load Diff

3506
nnjet.zil Normal file

File diff suppressed because it is too large Load Diff

1
ntext.file Normal file
View File

@ -0,0 +1 @@
To find the entrance, from the first numbered room, go in any direction. Thenceforth, subtract the number of the previous room from the current one. Use the first digit of the difference to select one of the following strings: 1 gives NSEWUD, 2 gives NWESDU, 3 gives USDNEW, 4 gives SUNDEW, 5 gives ENUDSW, 6 gives DWEUNS. Use the second digit to select a letter from the string, and go in that direction. Thus, room 64 to 105 gives a difference of 41. Take the first letter from the fourth string, and go South.

113
old-parserdefs.zil Normal file
View File

@ -0,0 +1,113 @@
<ZZSECTION "OLD-PARSERDEFS">
<FILE-FLAGS MDL-ZIL?>
<SETG CURRENT-OZ-VICTIM <>>
<COND (<NOT <GASSIGNED? DEBUGGING?>>
<SETG20 DEBUGGING? T>)>
<DEFMAC DEBUGGING-CODE ('X "OPT" 'Y)
<COND (,DEBUGGING?
.X)
(<ASSIGNED? Y>
.Y)
(T
T)>>
"Byte offset to # of entries in LEXV"
<CONSTANT P-LEXWORDS 1>
"Word offset to start of LEXV entries"
<CONSTANT P-LEXSTART 1>
"Number of words per LEXV entry"
<CONSTANT P-LEXELEN 2>
<CONSTANT P-WORDLEN 4>
"Offset to parts of speech byte"
<CONSTANT P-PSOFF 6>
"Offset to first part of speech"
<CONSTANT P-P1OFF 7>
"First part of speech bit mask in PSOFF byte"
<CONSTANT P-P1BITS 3>
<CONSTANT P-ITBLLEN 9>
<CONSTANT P-VERB 0>
<CONSTANT P-VERBN 1>
<CONSTANT P-PREP1 2>
<CONSTANT P-PREP1N 3>
<CONSTANT P-PREP2 4>
<CONSTANT P-NC1 6>
<CONSTANT P-NC1L 7>
<CONSTANT P-NC2 8>
<CONSTANT P-NC2L 9>
<CONSTANT M-BEG 1>
<CONSTANT M-ENTERING 2>
<CONSTANT M-LOOK 3>
<CONSTANT M-ENTERED 4>
<CONSTANT M-OBJDESC 5>
<CONSTANT M-END 6>
<CONSTANT M-CONT 7>
<CONSTANT M-WINNER 8>
<CONSTANT M-EXIT 9>
<CONSTANT M-SHORT-OBJDESC 10>
<CONSTANT M-SHORTDESC 11>
<CONSTANT O-PTR 0>
<CONSTANT O-START 1>
<CONSTANT O-LENGTH 2>
<CONSTANT O-END 3>
<CONSTANT P-SYNLEN 8>
<CONSTANT P-SBITS 0>
<CONSTANT P-SPREP1 1>
<CONSTANT P-SPREP2 2>
<CONSTANT P-SFWIM1 3>
<CONSTANT P-SFWIM2 4>
<CONSTANT P-SLOC1 5>
<CONSTANT P-SLOC2 6>
<CONSTANT P-SACTION 7>
<CONSTANT P-SONUMS 3>
<CONSTANT P-MATCHLEN 0>
<CONSTANT P-ALL 1>
<CONSTANT P-ONE 2>
<CONSTANT P-INHIBIT 4>
<CONSTANT SH 128>
<CONSTANT SC 64>
<CONSTANT SIR 32>
<CONSTANT SOG 16>
<CONSTANT STAKE 8>
<CONSTANT SMANY 4>
<CONSTANT SHAVE 2>
<DEFMAC WT? ('PTR BIT "OPT" (B1:FIX 5))
<COND (<G? .B1 4>
<FORM BTST <FORM GETB .PTR ,P-PSOFF> .BIT>)
(T
<FORM DO-WT? .PTR .BIT .B1>)>>
<ENDSECTION>

727
other-misc.zil Normal file
View File

@ -0,0 +1,727 @@
"OTHER-MISC for BUREAUCRACY: (C)1987 Infocom, Inc. All Rights Reserved."
<FILE-FLAGS MDL-ZIL?>
<INCLUDE "FORMDEFS" "OLD-PARSERDEFS">
<DEFINE DO-FORM? ("AUX" N WRD)
<PROG ()
<TELL CR "Type RESTORE followed by carriage return to restore a saved position, anything else (also followed by carriage return) to start the game anew." CR ">>"> ;"'File' is not in manual."
<SET WRD <>>
<ZREAD ,P-INBUF ,P-LEXV>
<SET N <GETB ,P-LEXV ,P-LEXWORDS>>
<COND (<G? .N:FIX 0>
<SET WRD <ZGET ,P-LEXV ,P-LEXSTART>>)>
<COND (<==? .WRD ,W?RESTORE>
<COND (<DO-RESTORE> <>)
(T <AGAIN>)>)
(<EQUAL? .WRD ,W?$VERIFY ,W?$VER>
<SETG PRSO <>>
<DEBUGGING-CODE
<COND (<AND <==? .N:FIX 2>
<NUMBER? <+ ,P-LEXSTART ,P-LEXELEN>>>
<SETG PRSO ,INTNUM>)>>
<V-$VERIFY>
<AGAIN>)
(T
<DEBUGGING-CODE
<COND (<NOT <EQUAL? .WRD ,W?QUICKLY ,W?Q>>
T)
(T <>)>
T>)>>>
<DEFINE GO ()
<SETG HEIGHT <LOWCORE SCRV>>
<SETG WIDTH <LOWCORE SCRH>>
<CLEAR -1>
<COPYRIGHT>
<COND (<DO-FORM?>
<COND (<OR <L? ,HEIGHT:FIX ,FORM-LENGTH>
<L? ,WIDTH:FIX ,FORM-WIDTH>>
<TELL CR "[Screen too small.]" CR>
<QUIT>)>
<GET-FORM>)
(T
<CLEAR -1>
<INIT-STATUS-LINE>
<ZCRLF>)>
<ESTABLISH-EXCHANGES>
<QUEUE I-DOORBELL>
<QUEUE I-LLAMA>
<QUEUE I-TUNE-TIMER>
<QUEUE I-RADIO>
<QUEUE I-MACAW>
<QUEUE I-BLOOD-PRESSURE>
<QUEUE I-HUNGER>
<QUEUE I-NERD>
<SETG HERE ,FROOM>
<MOVE ,PLAYER ,HERE>
<SETG WINNER ,PLAYER>
;<SETG LIT? T>
<TELL "You have been granted ">
<LICENSE>
<TELL ,PCR "Thank you for your cooperation, M">
<GENDER-PRINT "s " "r ">
<PRINT-LAST-NAME>
<TELL ". Have a nice day." CR>
<LTUANDE>
<V-VERSION>
<ZCRLF>
<V-LOOK>
<DO-MAIN-LOOP>>
<DEFINE LTUANDE ()
<TELL "|
|Well now, ">
<GENDER-PRINT "Ms " "Mr ">
<PRINT-LAST-NAME>
<TELL ", aren't you glad you left your previous job? The Deep Thought Corporation of America was of course a great company to work for, except for the no-coloured-socks dress code, and you really enjoyed being Vice President (Software Development), especially the opportunities it gave you to cause considerable inconvenience to many hundreds of thousands of people you had never met.|
|
But Happitec is going to be ">
<ITALICIZE "much">
<TELL " more fun. The money's better, it's a great place to live and work and you're really looking forward to your Paris vacation.|
|
You're pretty pleased with your new home, too, and don't really mind that the removals company fouled up slightly due to a computer scheduling problem. After all, you won't be using your new place for the next two weeks, and they ">
<ITALICIZE "promised">
<TELL " to have everything installed by the time you return.|
|
In fact, the only tiny cloud on the horizon is a silly bit of bother with your bank about a change-of-address card. You know the sort of thing? You send them a change-of-address card, and they say \"Oh dearie me, that's not our official change-of-address form, the computer won't like it a bit, you'll have to fill in a proper one, we'll send one to you,\" and they do, but they send it to your old address along with your new US Excess card and your cheque book...?|
|
Of course you know the sort of thing. It's exactly what has happened to you. But Happitec's enlightened employee policies mean you don't really care. After all, who needs money? Pick up your Happitec cheque, grab a bite of lunch, a cab to the airport and then you'll be living high on the hog at Happitec's expense. What a truly ">
<ITALICIZE "enviable">
<TELL " situation you find yourself in, ">
<GENDER-PRINT "Ms " "Mr ">
<PRINT-LAST-NAME>
<TELL "." CR>>
<DEFINE ESTABLISH-EXCHANGES ("AUX" X Y Z)
<SET X <+ <ZRANDOM 791> 202>>
<SET Y .X>
<ZPUT ,PHONE-NUMBERS ,BANK-NUMBER-X .X>
<SET X <+ .X 1>>
<ZPUT ,PHONE-NUMBERS ,WORK-NUMBER-X .X>
<SET X <+ .X 1>>
<ZPUT ,PHONE-NUMBERS ,CAB-NUMBER-X .X>
<SET X <+ .X 1>>
<ZPUT ,PHONE-NUMBERS ,OBANK-NUMBER-X .X>
<SET X <+ .X 1>>
<ZPUT ,PHONE-NUMBERS ,OLD-FRIEND-X .X>
<SET X <+ .X 1>>
<ZPUT ,PHONE-NUMBERS ,NEW-FRIEND-X .X>
<SET Y <- .Y 1>>
<REPEAT ()
<SET Z <+ <ZRANDOM 797> 201>>
<COND (<OR <G? .Z .X>
<L? .Z .Y>>
<RETURN>)>>
<ZPUT ,PHONE-NUMBERS ,OHOME-NUMBER-X .Z>
<SET Z <+ .Z 1>>
<ZPUT ,PHONE-NUMBERS ,OBANK-NUMBER-X .Z>>
<DEFINE INIT-STATUS-LINE ()
<SETG OLD-HERE <>>
<SETG OLD-LEN 0>
<SETG OLD-BP 0>
<SPLIT 1>
<SCREEN ,S-WINDOW>
<ZBUFOUT <>>
<CURSET 1 1>
<HLIGHT ,H-INVERSE>
<PRINT-SPACES ,WIDTH>
<COND (<L? ,WIDTH:FIX 64>
<CURSET 1 <- ,WIDTH:FIX 11>>
<TELL "BP:">)
(T
<CURSET 1 <- ,WIDTH:FIX 23>>
<TELL "Blood Pressure:">)>
<HLIGHT ,H-NORMAL>
<ZBUFOUT T>
<SCREEN ,S-TEXT>>
<OBJECT WALLS
(LOC GLOBAL-OBJECTS)
(DESC "wall")
(FLAGS NODESC TOUCHED SURFACE)
(SYNONYM WALL WALLS)
(ACTION WALLS-F)>
<DEFINE WALLS-F WALLS ()
<COND (<NOT <IS? ,HERE ,INDOORS>>
<CANT-SEE-ANY ,WALLS>
<RETURN ,FATAL-VALUE .WALLS>)
(<THIS-PRSI?>
<COND (<VERB? PUT-ON PUT THROW THROW-OVER>
<PRSO-SLIDES-OFF-PRSI>
<RETURN T .WALLS>)
(T
<RETURN <> .WALLS>)>)
(<OR <GETTING-INTO?>
<VERB? LOOK-BEHIND LOOK-UNDER>>
<IMPOSSIBLE>
<RETURN T .WALLS>)
(<OR <HURTING?>
<MOVING?>>
<TELL CTHEO>
<TELL " isn't affected." CR>
<RETURN T .WALLS>)
(<INTBL? ,PRSA ,TALKVERBS ,NTVERBS>
<TELL "Talking to walls">
<WONT-HELP>
<RETURN ,FATAL-VALUE .WALLS>)>
<YOU-DONT-NEED ,WALLS>
,FATAL-VALUE>
<OBJECT CEILING
(LOC GLOBAL-OBJECTS)
(FLAGS NODESC TOUCHED)
(DESC "ceiling")
(SYNONYM CEILING)
(ACTION CEILING-F)>
<DEFINE CEILING-F ()
<COND (<NOT <IS? ,HERE ,INDOORS>>
<CANT-SEE-ANY ,CEILING>
,FATAL-VALUE)
(<VERB? LOOK-UNDER>
<V-LOOK>
T)
(T
<>)>>
<OBJECT HANDS
(LOC GLOBAL-OBJECTS)
(DESC "your hand")
(FLAGS TOOL MANUALLY NODESC TOUCHED NOARTICLE)
(SYNONYM HAND HANDS PALM PALMS FINGER FINGERS THUMB THUMBS)
(ADJECTIVE MY BARE)
(SIZE 5)
; (VALUE 0)
(ACTION HANDS-F)>
<DEFINE HANDS-F ()
<COND (<THIS-PRSI?>
<COND (<VERB? TIE>
<WASTE-OF-TIME>
T)
(T
<>)>)
(<VERB? EXAMINE LOOK-ON>
<TELL "Your fingers are still there." CR>
T)
(<VERB? COUNT>
<TELL "You have ">
<COND (<NOUN-USED? ,W?FINGERS ,W?FINGER>
<TELL "ten">)
(T
<TELL "two">)>
<ZPRINT ,PERIOD>
T)
(<VERB? LOOK-INSIDE SEARCH>
<V-INVENTORY>
T)
(<AND <VERB? PUT PUT-ON>
<T? ,PRSI>>
<PERFORM ,V?TOUCH ,PRSI>
T)
(<HAVING?>
<IMPOSSIBLE>
T)
(T
<>)>>
<OBJECT FEET
(LOC GLOBAL-OBJECTS)
(DESC "your foot")
(FLAGS CLOTHING WORN NODESC NOARTICLE SURFACE)
(SYNONYM FOOT FEET TOE TOES SNEAKER SNEAKERS)
(ADJECTIVE MY)
(SIZE 5)
; (VALUE 0)
(ACTION FEET-F)>
"TOUCHED = flight described once."
<DEFINE FEET-F ()
<COND (<THIS-PRSI?>
<COND (<PUTTING?>
<WASTE-OF-TIME>
T)
(T
<>)>)
(<VERB? PUT-ON>
<PERFORM ,V?STAND-ON ,PRSI>
T)
(<HAVING?>
<IMPOSSIBLE>
T)
(T
<>)>>
<OBJECT MOUTH
(LOC GLOBAL-OBJECTS)
(DESC "your mouth")
(SYNONYM MOUTH)
(ADJECTIVE MY)
(FLAGS NODESC NOARTICLE TOUCHED)
(ACTION MOUTH-F)>
<DEFINE MOUTH-F MOUTH ()
<COND (<THIS-PRSI?>
<COND (<VERB? PUT PUT-ON THROW>
<PERFORM ,V?EAT ,PRSO>
<RETURN T .MOUTH>)
(<VERB? TOUCH-TO>
<PERFORM ,V?TASTE ,PRSO>
<RETURN T .MOUTH>)>)
(<VERB? REACH-IN>
<TELL "How rude." CR>
<RETURN T .MOUTH>)
(<VERB? OPEN OPEN-WITH CLOSE>
<NO-NEED>
<RETURN T .MOUTH>)
(<VERB? ;RAPE KICK KISS>
<TELL "Good luck." CR>
<RETURN T .MOUTH>)
(<HAVING?>
<IMPOSSIBLE>
<RETURN T .MOUTH>)>
<YOU-DONT-NEED ,MOUTH>
,FATAL-VALUE>
<OBJECT EYES
(LOC GLOBAL-OBJECTS)
(SDESC SDESC-EYES)
(FLAGS NODESC NOARTICLE TOUCHED NEEDS-IDENTITY SURFACE)
(OBJ-NOUN 0)
(SYNONYM EYES HEAD)
(ADJECTIVE MY)
(ACTION EYES-F)>
<DEFINE SDESC-EYES ()
<TELL "your ">
<ZPRINTB <GETP ,EYES ,P?OBJ-NOUN>>>
"SEEN = given PRE-DUMB-EXAMINE admonishment."
<DEFINE EYES-F EYES ()
<COND (<==? <GETP ,EYES ,P?OBJ-NOUN> ,W?EYES>
<COND (<THIS-PRSI?>
<RETURN T .EYES>)
(<VERB? OPEN>
<TELL "They are." CR>
<RETURN T .EYES>)
(<VERB? CLOSE>
<V-SLEEP>
<RETURN T .EYES>)>)>
<COND (<HAVING?>
<IMPOSSIBLE>
T)
(T
<YOU-DONT-NEED ,EYES>
,FATAL-VALUE)>>
<OBJECT ME
(LOC GLOBAL-OBJECTS)
(SYNONYM I ME MYSELF BODY)
(ADJECTIVE MY)
(DESC "yourself")
(FLAGS PERSON LIVING TOUCHED NOARTICLE)
(ACTION ME-F)>
<DEFINE ME-F ("OPTIONAL" (CONTEXT <>) "AUX" OBJ NXT (ANY <>))
<COND (<THIS-PRSI?>
<COND (<VERB? THROW THROW-OVER>
<WASTE-OF-TIME>
T)
(<VERB? COVER>
<PERFORM ,V?STAND-ON ,PRSO>
T)
(<VERB? PUT-ON WRAP-AROUND>
<COND (<IS? ,PRSO ,CLOTHING>
<PERFORM ,V?WEAR ,PRSO>)
(T
<IMPOSSIBLE>)>
T)
(<VERB? PUT>
<PERFORM ,V?TASTE ,PRSO>
T)
(T
<>)>)
(<VERB? EXAMINE LOOK-ON SEARCH>
<TELL "You're ">
<SET OBJ <FIRST? ,PLAYER>>
<REPEAT ()
<COND (<ZERO? .OBJ>
<RETURN>)>
<SET NXT <NEXT? .OBJ>>
<COND (<IS? .OBJ ,WORN>
<SET ANY T>
<MOVE .OBJ ,WEARING>)>
<SET OBJ .NXT>>
<COND (<ZERO? .ANY>
<TELL "not wearing anything special." CR>)
(T
<TELL "wearing ">
<PRINT-CONTENTS ,WEARING>
<ZPRINT ,PERIOD>
<MOVE-ALL ,WEARING ,PLAYER>)>
T)
(<VERB? LISTEN SMELL>
<TELL ,CANT "help doing that." CR>
T)
(<VERB? FIND FOLLOW>
<TELL "You're right here." CR>
T)
(<VERB? ;RAPE KISS>
<TELL "Desperate?" CR>
T)
(<VERB? KILL>
<TELL "You're indispensable." CR>
T)
(<HURTING?>
<TELL "Punishing " D ,ME " that way">
<WONT-HELP>
T)
(<YOU-F>
T)
(T
<>)>>
<OBJECT YOU
(LOC GLOBAL-OBJECTS)
(DESC "myself")
(SYNONYM YOU YOURSELF)
(FLAGS NODESC NOARTICLE)
(ACTION YOU-F)>
<DEFINE YOU-F ()
<COND (<VERB? WHO WHAT WHERE>
<TELL "Good question." CR>
T)
(<VERB? UNDRESS>
<INAPPROPRIATE>
T)
(<OR <VERB? EAT TASTE DRINK DRINK-FROM>
<HAVING?>>
<IMPOSSIBLE>
T)
(T
<>)>>
<OBJECT CLOTHES
(LOC GLOBAL-OBJECTS)
(DESC "your clothes")
(SYNONYM CLOTHES CLOTHING APPAREL OUTFIT SHORTS)
(ADJECTIVE MY)
(FLAGS WORN CLOTHING NODESC NOARTICLE)
(ACTION CLOTHES-F)>
<DEFINE CLOTHES-F ()
<COND (<VERB? EXAMINE LOOK-ON>
<PERFORM ,V?EXAMINE ,ME>
T)
(<VERB? LOOK-INSIDE>
<PERFORM ,V?LOOK-INSIDE ,POCKET>
T)
(<AND <VERB? PUT>
<PRSI? CLOTHES>>
<TELL "[in " D ,POCKET ,BRACKET>
<PERFORM ,V?PUT ,PRSO ,POCKET>
T)
(<VERB? WEAR>
<YOURE-ALREADY "wearing them">
T)
(<VERB? TAKE-OFF DROP RAISE>
<INAPPROPRIATE>
T)
(T
<>)>>
<OBJECT THEM
(LOC GLOBAL-OBJECTS)
(SYNONYM THEY THEM THEMSELVES)
(DESC "them")
(FLAGS NOARTICLE)>
<OBJECT INTDIR
(LOC GLOBAL-OBJECTS)
(DESC "direction")
(SYNONYM DIRECTION)
(ADJECTIVE NORTH EAST SOUTH WEST W ; "NE NW SE SW" UP DOWN)>
<OBJECT GROUND
(LOC GLOBAL-OBJECTS)
(SDESC SDESC-GROUND)
(OBJ-NOUN 0)
(SYNONYM SURFACE GROUND GROUNDS EARTH FLOOR)
(FLAGS NODESC NEEDS-IDENTITY)
(ACTION GROUND-F)>
<DEFINE SDESC-GROUND ("AUX" FOO)
<COND (<N==? <SET FOO <GETP ,GROUND ,P?OBJ-NOUN>> ,W?FLOOR>
<TELL "ground">)
(T
<ZPRINTB .FOO>)>>
<DEFINE GROUND-PRINT-CONTENTS-TEST (OBJ)
<COND (<AND <T? <STD-PRINT-CONTENTS-TEST .OBJ>>
<IS? .OBJ ,TAKEABLE>> T)
(T <>)>>
<DEFINE GROUND-F GROUND ("AUX" OBJ NXT SOMETHING)
<COND (<==? <GETP ,GROUND ,P?OBJ-NOUN> ,W?FLOOR>
<COND (<NOT <IS? ,HERE ,INDOORS>>
<CANT-SEE-ANY ,GROUND>
<RETURN ,FATAL-VALUE .GROUND>)>)>
<COND (<THIS-PRSI?>
<COND (<VERB? PUT-ON PUT THROW THROW-OVER EMPTY-INTO>
<PERFORM ,V?DROP ,PRSO>
T)
(T
<>)>)
(<VERB? EXAMINE LOOK-ON SEARCH>
<TELL ,YOU-SEE>
<SET SOMETHING <PRINT-CONTENTS ,HERE
,GROUND-PRINT-CONTENTS-TEST>>
<TELL " on the " D ,GROUND ,PERIOD>
T)
(<VERB? CROSS>
<V-WALK-AROUND>
T)
(T
<>)>>
<OBJECT POCKET
(LOC PLAYER)
(DESC "your pocket")
(SYNONYM POCKET POCKETS)
(ADJECTIVE MY SIDE YOUR)
(FLAGS NODESC NOARTICLE CONTAINER OPENED SEARCH-ME)
(SIZE 0)
(CAPACITY 4)
(CONTFCN IN-POCKET)
(ACTION POCKET-F)>
<DEFINE POCKET-F ("AUX" OBJ)
<COND (<THIS-PRSI?>
<COND (<AND <VERB? PUT>
<G? <GETP ,PRSO ,P?SIZE>:FIX 3>>
<TELL CTHEO " is too big to fit in "
D ,PRSI ,PERIOD>
T)
(T
<>)>)
(<VERB? EXAMINE LOOK-INSIDE SEARCH>
<SET OBJ <FIRST? ,PRSO>>
<COND (<T? .OBJ>
<TELL "You have ">
<PRINT-CONTENTS ,PRSO>)
(T
<TELL "There's nothing">)>
<TELL " in " D ,PRSO ,PERIOD>
T)
(<VERB? EMPTY>
<TELL "[into " D ,HANDS "s" ,BRACKET>
<>)
(<VERB? OPEN OPEN-WITH CLOSE>
<NO-NEED>
T)
(<HAVING?>
<TELL ,CANT "do that to " D ,PRSO ,PERIOD>
T)
(T
<>)>>
<DEFINE IN-POCKET ("OPTIONAL" (CONTEXT <>) "AUX" THING OPRSO)
<COND (<NOT <EQUAL? .CONTEXT ,M-CONT>>
<>)
(<VERB? TAKE> <>)
(T
<COND (<THIS-PRSI?> <SET THING ,PRSI>)
(T <SET THING ,PRSO>)>
<SET OPRSO ,PRSO>
<SETG PRSO .THING>
<TELL "[Taking " THEO " first" ,BRACKET>
<COND (<ITAKE>
<SETG PRSO .OPRSO>
<>)
(T
<SETG PRSO .OPRSO>
,FATAL-VALUE)>)>>
"WINDOW [table] [left-margin], where [table] is a global PLTABLE
with the 1st element = width of window, followed by strings (0 for blank).
If [left-margin] is not specified, window is centered."
; "Used for optional arguments to WINDOW..."
<CONSTANT EXTRA-TEXT <ITABLE 3 <>>>
<DEFINE WINDOW WINDOW (TABLE "OPTIONAL" (S1 <>) (S2 <>) (S3 <>)
(STLINE 4)
"AUX" MARGIN (Y .STLINE) (I 2) W:FIX LINES:FIX
STR PLINES
(CT:FIX 0) (ET ,EXTRA-TEXT) SP:FIX)
<ZPUT .ET 0 .S1>
<ZPUT .ET 1 .S2>
<ZPUT .ET 2 .S3>
<SET LINES <ZGET .TABLE 0>>
<SET PLINES .LINES>
<SET W <ZGET .TABLE 1>>
<SET MARGIN </ <- ,WIDTH:FIX .W> 2>> ; "Center"
<SPLIT <+ .LINES .STLINE>> ; "Set up the window."
<SCREEN ,S-WINDOW>
<ZBUFOUT <>>
<HLIGHT ,H-INVERSE>
<CURSET .Y .MARGIN>
<PRINT-SPACES .W>
<REPEAT ()
<SET Y <+ .Y 1>>
<CURSET .Y .MARGIN>
<SET LINES <- .LINES 1>>
<COND (<ZERO? .LINES>
<PRINT-SPACES .W>
<RETURN>)>
<SET STR <ZGET .TABLE .I>>
<COND (<ZERO? .STR>
<COND (<SET STR <ZGET .ET .CT>>
<SET SP <- .W <GETB .STR 0>:FIX>>
; "Number of spaces needed"
<PRINT-SPACES </ .SP 2>>
; "Print half"
<DUMP-LTABLE .STR>
<SET CT <+ .CT 1>>
<PRINT-SPACES <- .SP </ .SP 2>>>)
(T
<PRINT-SPACES .W>)>)
(T
<PRINTC 32>
<TELL .STR>
<PRINTC 32>)>
<SET I <+ .I 1>>>
<HLIGHT ,H-NORMAL>
<ZBUFOUT T>
<SCREEN ,S-TEXT>
<SPLIT 1>
; "Send window to printer."
<DIROUT ,D-SCREEN-OFF>
<SET I 2>
<SET CT 0>
<ZCRLF>
<TELL "[">
<REPEAT ()
<SET PLINES <- .PLINES 1>>
<COND (<ZERO? .PLINES>
<RETURN>)>
<SET STR <ZGET .TABLE .I>>
<COND (<NOT <ZERO? .STR>>
<COND (<NOT <EQUAL? .I 2>>
<PRINTC 32>)>
<TELL .STR>)
(<SET STR <ZGET .ET .CT>>
<SET CT <+ .CT 1>>
<PRINT-SPACES </ <- .W <GETB .STR 0>:FIX> 2>>
<DUMP-LTABLE .STR>)>
<COND (<EQUAL? .PLINES 1>
<TELL "]">)>
<ZCRLF>
<SET I <+ .I 1>>>
<ZCRLF>
<DIROUT ,D-SCREEN-ON>
T>
<OBJECT SOUNDS
(LOC GLOBAL-OBJECTS)
(DESC "sound")
(FLAGS NODESC)
(SYNONYM SOUND SOUNDS)
(GENERIC GENERIC-SOUND)
(ACTION SOUND-F)>
<DEFINE GENERIC-SOUND (TBL "AUX" (LEN <ZGET .TBL 0>))
<COND (<==? .LEN 2>
<COND (<==? <ZGET .TBL 1> ,SOUNDS>
<ZGET .TBL 2>)
(<==? <ZGET .TBL 2> ,SOUNDS>
<ZGET .TBL 1>)
(T <>)>)
(T <>)>>
<DEFINE SOUND-F ("AUX" X)
<SET X <GETP ,HERE ,P?HEAR>>
<COND (<T? .X>
<COND (<ZERO? ,NOW-PRSI?>
<PERFORM ,PRSA .X ,PRSI>)
(T
<PERFORM ,PRSA ,PRSO .X>)>
T)
(<OR <SEEING?>
<TOUCHING?>>
<IMPOSSIBLE>
T)
(T
<>)>>
<OBJECT CORNER
(LOC GLOBAL-OBJECTS)
(DESC "corner")
(FLAGS NODESC SURFACE)
(SYNONYM CORNER CORNERS)
(ACTION CORNER-F)>
<DEFINE CORNER-F ()
<COND (<NOT <IS? ,HERE ,INDOORS>>
<CANT-SEE-ANY ,CORNER>
,FATAL-VALUE)
(<VERB? EXAMINE LOOK-INSIDE SEARCH LOOK-BEHIND LOOK-UNDER>
<V-LOOK>
T)
(<ENTERING?>
<YOURE-ALREADY "close enough to the " <>>
<TELL D ,CORNER ,PERIOD>
T)
(<EXITING?>
<V-WALK-AROUND>
T)
(<PUTTING?>
<PERFORM ,V?DROP ,PRSO>
T)
(T
<>)>>
;<OBJECT RIGHT
(LOC GLOBAL-OBJECTS)
(DESC "that direction")
(FLAGS NODESC NOARTICLE)
(SYNONYM RIGHT CLOCKWISE FORWARD AHEAD)
(ACTION RL-F)>
;<OBJECT LEFT
(LOC GLOBAL-OBJECTS)
(DESC "that direction")
(FLAGS NODESC NOARTICLE)
(SYNONYM LEFT COUNTERCL BACKWARD BACKWARDS BACK)
(ACTION RL-F)>
;<DEFINE RL-F ()
<COND (<OR <ENTERING?>
<VERB? EXIT LEAVE ESCAPE CLIMB-UP CLIMB-DOWN CLIMB-ON
CLIMB-OVER CROSS STAND-ON STAND-UNDER>>
<V-WALK-AROUND>
T)
(T
<>)>>
<DEFINE SPECIFY-AN-AMOUNT ()
<TELL "You must specify an amount of money.">>
<DEFINE LOOK-IN-PACKAGE ()
<TELL ,THIS-IS "the same " D ,PRSO
" included (at the last minute and at great expense) in your ">
<ITALICIZE "Bureaucracy">
<TELL " package." CR>
T>

1602
paranoid.zil Normal file

File diff suppressed because it is too large Load Diff

3309
parser.zil Normal file

File diff suppressed because it is too large Load Diff

1424
people.zil Normal file

File diff suppressed because it is too large Load Diff

1157
places.zil Normal file

File diff suppressed because it is too large Load Diff

32
plane.bugs Normal file
View File

@ -0,0 +1,32 @@
24-Jan-87 21:16:08-EST,610;000000000001
Date: 24 Jan 1987 2116-EST
From: Anita Sinclair <TAA.ANITA at FRED>
Subject: Aerop*
To: taa
Dear Tim,
The following features cropped up whilst playing B* (script 25 or 26)
>get headphones ..../....(many moves)
>get card,magazine
You have now got the ...
>read them
How can you read the headphones
(?)
There is a whole section which starts with empty bowl into seat pocket.
where the programme seems to think that i am trying to feel it up.
MAMAJOR
l in seat (whilst in row 2)
puts you in row 3
but doesnt updatae status line.
> line breaking up - continue
ajs
-------

45
random-globals.zil Normal file
View File

@ -0,0 +1,45 @@
<FILE-FLAGS MDL-ZIL?>
<SETG P-WON <>>
<SETG PRSO <>>
<SETG PRSI <>>
<SETG P-THEM-OBJECT <>>
<SETG P-CONT <>>
<SETG PRSA <>>
<SETG QUOTE-FLAG <>>
<SETG P-OFLAG <>>
<SETG P-IT-OBJECT <>>
<SETG P-HER-OBJECT <>>
<SETG P-HIM-OBJECT <>>
<SETG CLOCK-WAIT? <>>
<CONSTANT P-NAMW <TABLE 0 0>>
<CONSTANT P-ADJW <TABLE 0 0>>
<CONSTANT P-OFW <TABLE 0 0>>
<CONSTANT P-PRSO <ITABLE NONE 32>>
<CONSTANT P-PRSI <ITABLE NONE 32>>
<SETG P-GETFLAGS 0>
<SETG P-SYNTAX 0>
<SETG HERE 0>
<CONSTANT P-LEXV <ITABLE 59 (LEXV) 0 #BYTE 0 #BYTE 0>>
<SETG P-MERGED <>>
<CONSTANT P-ITBL <TABLE 0 0 0 0 0 0 0 0 0 0>>
<SETG P-WALK-DIR <>>
<SETG P-LASTADJ <>>
<SETG P-DOLLAR-FLAG <>>
<SETG P-NUMBER -1>
<SETG P-SEAT-NUMBER -1>
<SETG NOW-PRSI? <>>
<SETG VERBOSITY 1> "0 = super, 1 = brief, 2 = verbose."
<CONSTANT YAWNS
<TABLE (LENGTH PATTERN (BYTE [REST WORD]))
#BYTE 0 "unusual" "interesting" "extraordinary" "special">>
<SETG MEAL-STATE 0>
<CONSTANT MEAL
<ITABLE 27 0>>
<GDECL (MEAL) TABLE>
<SETG END-GAME? <>>
<SETG HOLD-TURNS 0>
<SETG CASH 7500>
<SETG LICENSE-FORM <>>
<SETG SEX <>>
<SETG FERROR-COUNT 0>

1288
syntax.zil Normal file

File diff suppressed because it is too large Load Diff

1
text.file Normal file
View File

@ -0,0 +1 @@
To find the entrance to Headquarters, upon entering the first numbered room, go in any direction. Thenceforth, subtract the number of the previous room from the number of the current room. Take the last digit of the difference. If it is zero, go East; if one, go South; if two, Up; if three, North; if four, Down; if five, West. For example, the first numbered room is 64; the second is 105. The difference is 41, making the last digit one; you should go South in this case. Failure will return you to the antechamber.

4338
things.zil Normal file

File diff suppressed because it is too large Load Diff

3949
verbs.zil Normal file

File diff suppressed because it is too large Load Diff

2967
xjet.zil Normal file

File diff suppressed because it is too large Load Diff

98
xjetdefs.zil Normal file
View File

@ -0,0 +1,98 @@
<ZSECTION "XJETDEFS">
<FILE-FLAGS MDL-ZIL?>
<USE "NEWSTRUC">
<MSETG AISLE-COUNT 9>
<MSETG INITIAL-ROW 3>
<DEFINE-GLOBALS PLANE-TABLE
(HATCH-OPEN? BYTE 0)
(HATCH-LOSER? BYTE <>)
(MEAL-HERE? BYTE <>)
(MEAL-SQUASHED? BYTE <>)
(MEAL-EATEN? BYTE <>)
(BUTTONS-OFF? BYTE <>)
(SITTING? BYTE <>)
(PHONES-PLUGGED-IN? BYTE <>)
(CURRENT-STAR BYTE 0)
(CURRENT-DESC BYTE 0)
(CURRENT-WEAPON BYTE 0)
(LOSER-CANT-LEAVE-SEAT? BYTE <>)
(PURSER-HERE? BYTE <>)
(PHONE-MUSIC:FIX BYTE 0) ; "Headphone stuff"
(PHONE-TIMER:FIX BYTE 0) ; "Random"
(LAST-ROW:FIX BYTE 0) ; "Previous row occupied"
(LAST-SEAT:FIX BYTE 0) ; "Previous seat"
(NEW-ROW:FIX BYTE 0)
(NEW-SEAT:FIX BYTE 0)
(RETURN-TO-SEAT-WAIT:FIX BYTE 0)
(GRANDMA-HAPPY? BYTE <>)
(SMOKER-IRATE? BYTE <>)
(BUSINESS-IRATE? BYTE <>)
(FALL-SCRIPT:FIX BYTE 5)
(CURRENT-NEIGHBOR BYTE 0)
(FLIGHT-ATTENDANT-HE/SHE:STRING "She")
(FLIGHT-ATTENDANT-HIM/HER:STRING "her")>
<CONSTANT MOVIE-STARS
<PLTABLE "Rambo"
"Rocky"
"Sylvester Stallone"
"someone looking like Sylvester Stallone, but with a German accent,"
"Arnold Schwarzenegger"
"James Bond"
"Sigourney Weaver"
"a woman with a strange resemblance to Sylvester Stallone"
"Charles Bronson"
"Chuck Norris">>
<CONSTANT MOVIE-WEAPONS
<PLTABLE "several karate moves"
"a Bowie knife"
"a Sherman tank"
"an AK-47 assault rifle, a rocket launcher and several hand grenades"
"a wide assortment of shoulder-launched cruise missiles"
"the help of a shoe-mounted switchblade"
"a flamethrower, a grenade launcher and a pulse rifle"
"a concealed bazooka"
"no help from Washington">>
<CONSTANT MOVIE-DESCS
<PLTABLE "solves the Energy Crisis by attacking every Middle Eastern oil field"
"ends the Depression by attacking Wall Street"
"ends the Civil War by attacking Richmond"
"ends illiteracy by attacking the evil textbook publishers"
"restores the balance of payments by attacking Germany, Japan, South Korea and Canada"
"restores the balance of payments by attacking the Heineken brewery"
"saves an uninhabited planet by blowing away the alien invaders"
"saves embassy hostages from terrorists"
"wipes out crime in America by killing jaywalkers and litterbugs">>
<DEFMAC ROW-SEATS ("OPT" 'NEW)
<COND (<NOT <ASSIGNED? NEW>>
<FORM ANDB <FORM ZGET ',AISLE-STATE ',CURRENT-ROW>
,ALL-SEATS>)
(T
<FORM ZPUT ',AISLE-STATE ',CURRENT-ROW
<FORM ORB .NEW <FORM ANDB <ZGET ',AISLE-STATE ',CURRENT-ROW>
<XORB ,ALL-SEATS -1>>>>)>>
; "State of seating is low four bits; starboard passenger, if any, is next
four; port passenger is next four. Three remaining bits below the sign
bit can be used for flags."
<MSETG SEAT-A 1>
<MSETG SEAT-B 2>
<MSETG SEAT-C 4>
<MSETG SEAT-D 8>
<MSETG ALL-SEATS <ORB ,SEAT-A ,SEAT-B ,SEAT-C ,SEAT-D>>
<MSETG STARBOARD-DIVISOR 16>
<MSETG PORT-DIVISOR 256>
<MSETG ROW-SEEN-BIT 4096>
<ENDSECTION>

3766
xxjet.zil Normal file

File diff suppressed because it is too large Load Diff

112
xxjetdefs.zil Normal file
View File

@ -0,0 +1,112 @@
<ZSECTION "XXJETDEFS">
<FILE-FLAGS MDL-ZIL?>
<MSETG AISLE-COUNT 9>
<MSETG INITIAL-ROW 3>
<MSETG SEAT-B 1>
<MSETG SEAT-C 2>
<MSETG SEAT-D 3>
<MSETG SEAT-E 4>
<MSETG PERSON-MASK *17*>
<MSETG LIGHT-MASK *20*>
<MSETG TABLE-MASK *40*>
<MSETG MEAL-MASK *100*>
<MSETG FOOD-MASK *200*>
<CONSTANT NEIGHBOR-SEATS
<PTABLE (BYTE) ,SEAT-C ,SEAT-B ,SEAT-E ,SEAT-D>>
<SETG CURRENT-ROW ,INITIAL-ROW>
<SETG CURRENT-SEAT ,SEAT-B>
<CONSTANT SEAT-LETTERS <TABLE (BYTE)
%<ASCII !\B> %<ASCII !\C>
%<ASCII !\D> %<ASCII !\E>>>
<CONSTANT SEAT-LETTER-NAMES
<PLTABLE <VOC "B" OBJECT> <VOC "C" OBJECT> <VOC "D" OBJECT>
<VOC "E" OBJECT>>>
<MSETG OBJECT-BREAK 20>
<MSETG HATCH-OBJECT <+ ,OBJECT-BREAK 1>>
<MSETG GRANDCHILDREN-OBJECT <+ ,OBJECT-BREAK 2>>
<MSETG MOVIE-OBJECT <+ ,OBJECT-BREAK 3>>
<MSETG RECLINE-BUTTON <+ ,OBJECT-BREAK 4>>
<MSETG LIGHT-BUTTON <+ ,OBJECT-BREAK 5>>
<MSETG CALL-BUTTON <+ ,OBJECT-BREAK 6>>
<MSETG BABY-OBJECT <+ ,OBJECT-BREAK 7>>
<MSETG BOOK-OBJECT <+ ,OBJECT-BREAK 8>>
<MSETG THING-OBJECT <+ ,OBJECT-BREAK 9>>
<MSETG REGULATIONS-OBJECT <+ ,OBJECT-BREAK 10>>
<MSETG VOICE-OBJECT <+ ,OBJECT-BREAK 11>>
<MSETG BUTTONS-OBJECT <+ ,OBJECT-BREAK 12>>
<MSETG FLUTE-OBJECT <+ ,OBJECT-BREAK 13>>
<MSETG OTHER-FOOD-OBJECT <+ ,OBJECT-BREAK 14>>
<MSETG FAKE-CHUTE-OBJECT <+ ,OBJECT-BREAK 15>>
<MSETG GRANDMA-PERSON 1>
<MSETG MOMMA-PERSON 2>
<MSETG SMOKER-PERSON 3>
<MSETG POLITICIANS-PERSON 4>
<MSETG ZALAGASANS-PERSON 5>
<MSETG FAT-PERSON 6>
<MSETG FROBOZZCO-PERSON 7>
<MSETG SLEEPER-PERSON 8>
; "Bald guy removed"
<MSETG PERSON-COUNT 8>
<VOC "SEAT" OBJECT>
<VOC "REAR" OBJECT>
<VOC "LOBBY" OBJECT>
<MSETG INIT-LIGHT-TIMER 4>
<CONSTANT ALL-SEATS <ITABLE <* ,AISLE-COUNT 4> (BYTE)>>
<DEFINE-GLOBALS JET-GLOBALS
(AISLE-STATE 0)
(NEW-ROW BYTE 0)
(NEW-SEAT BYTE 0)
(LAST-ROW BYTE 0)
(LAST-SEAT BYTE 0)
(CURRENT-NEIGHBOR BYTE 0)
(CURRENT-NEIGHBOR-SEATNUM BYTE 0)
(BUTTONS-OFF? BYTE T)
(PHONES-PLUGGED-IN? BYTE <>)
(DING-ROW BYTE 0)
(SPLAT-COUNT BYTE 0)
(MEAL-HERE? BYTE <>)
(MEAL-SQUASHED? BYTE <>)
(MEAL-EATEN? BYTE <>)
(MEAL-ROW BYTE <>)
(MEAL-SEAT BYTE <>)
(LOOKED-AT-FOOD? BYTE <>)
(LOSER-CANT-LEAVE-SEAT? BYTE <>)
(FALL-SCRIPT BYTE 5)
(RETURN-TO-SEAT-ROUTINE <>)
(ATTENDANT-WORKING? BYTE <>)
(ATTENDANT-MENTIONED-REGULATIONS? BYTE 3)
(MIND-READ? BYTE <>)
(BABY-DISTURBED? BYTE 0)
(NEXT-TO-BABY? BYTE <>)
(AIRPHONE-RINGING? BYTE <>)
(VOICES-ONLINE? BYTE <>)
(FLIGHT-ATTENDANT-HE/SHE:STRING)
(FLIGHT-ATTENDANT-HIM/HER:STRING)
(HATCH-OPEN? BYTE 0)
(HATCH-LOSER? BYTE <>)
(CRASH-COMING? BYTE <>)
(NERD-FLEW-BY? BYTE <>)
(RETURN-TO-SEAT-WAIT BYTE 0)
(GOT-RECIPE? BYTE <>)
(SPLATTED-ROW BYTE 0)
(SPLATTED-PERSON BYTE 0)
(ATTENDANT-AT-ROW BYTE 0)
(RUN-PLANE-COUNT 0)
(SMOKER-IRATE? BYTE <>)
(IN-SEAT? BYTE <>)>
<ENDSECTION>

564
zalagasa.zil Normal file
View File

@ -0,0 +1,564 @@
"ZALAGASA for BUREAUCRACY. Copyright 1987 Infocom, Inc. All rights reserved."
<FILE-FLAGS MDL-ZIL?>
<INCLUDE "COMPUTERDEFS">
<OBJECT IN-TREE
(LOC ROOMS)
(DESC "hanging from a tree")
(LDESC "You are hanging upside down by your parachute from the branches of a tree.")
(FLAGS LIGHTED LOCATION NO-NERD SPECIAL-DROP)
(SYNONYM BRANCHES TREE)
(NORTH SORRY "Such directions are useless here.")
(EAST SORRY "Such directions are useless here.")
(SOUTH SORRY "Such directions are useless here.")
(WEST SORRY "Such directions are useless here.")
(DOWN SORRY "You are attached.")
(UP SORRY "Wishful thinking.")
(OUT SORRY "You're already outside.")
(IN SORRY "Wishful thinking.")
(BELOW IN-POT)
(GLOBAL IN-POT)
(ACTION IN-TREE-F)>
<DEFINE IN-TREE-F ("OPT" (CONTEXT <>))
<COND (<T? .CONTEXT> <>)
(<NOT <HERE? IN-TREE IN-POT>>
<TELL "There isn't anything useful you can do that way." CR>)
(<VERB? EXAMINE LOOK-ON LOOK-INSIDE>
<TELL "It's the ordinary sort of jungle tree; one would normally
expect it to be occupied by various exotic fruits and animals. Instead, it
seems to have a ">
<COND (<HERE? IN-TREE>
<TELL "not terribly cheerful Happitec executive-designate">)
(T
<TELL "chewed-up Chowmail OverNite parachute">)>
<TELL " in its branches." CR>)>>
<DEFINE NATIVES-EAT-YOU ()
<TELL "Just as you're getting accustomed to your new surroundings and reflecting that at least you are out of the clutches of bureaucratic foul-ups, a phalanx of drunken journalists in Banana Republic safari clothes appears, accompanied by an enormous number of happy, smiling, cannibal natives. In the instant
before the natives invite you for dinner,
you spot someone in the back of the crowd staring intently at what looks like
a Boysenberry computer.">
<JIGS-UP>
T>
<OBJECT IN-POT
(LOC ROOMS)
(DESC "cooking pot")
(FLAGS LIGHTED LOCATION NO-NERD)
(SYNONYM POT)
(ADJECTIVE COOKING)
(NORTH PER EXIT-POT)
(EAST PER EXIT-POT)
(SOUTH PER EXIT-POT)
(WEST PER EXIT-POT)
(DOWN SORRY "Not unless you want to go from the pan to the fire!")
(SEE-ALL NATIVES)
(UP SORRY "Wishful thinking.")
(OUT PER EXIT-POT)
(GLOBAL NATIVES IN-POT)
(IN SORRY "You are in deep enough.")
(ACTION POT-F)>
" TOUCHED ==> Natives are amused with recipe cartridge"
<DEFINE EXIT-POT ()
<COND (<IS? ,NATIVES ,TOUCHED>
<TELL "You get out of the pot while the Zalagasans are busy cataloguing their missionary and explorer recipe for the upcoming " ITAL "National Geographic" " article. Stumbling along, you fall into a hole, and end up in a grubby antechamber underground" ,PCR>
,IN-CLEARING)
(ELSE
<TELL "You are prevented from leaving by the Zalagasans." CR>
<>)>>
<DEFINE POT-F ("OPT" (CONTEXT <>) "AUX" RM)
<COND (<==? .CONTEXT ,M-LOOK>
<TELL "You are in " A ,IN-POT " beneath the tree from which you were previously hanging. The force of your impact seems to have emptied the pot. ">
<COND (<IS? ,NATIVES ,TOUCHED>
<TELL "The tribe have retreated to their computer to try out your pirated recipe program.">)
(T
<TELL "There is a tribe of Zalagasans dancing around the pot, chanting \"Z-BUG! Z-BUG!\"">)>
<ZCRLF>)
(<T? .CONTEXT> <>)
(<VERB? LOOK-INSIDE>
<TELL "It's just an ordinary cooking pot." CR>)
(<VERB? EXAMINE LOOK-ON>
<COND (<HERE? IN-TREE>
<TELL "Below, you see what looks like a large pot." CR>)
(T
<TELL
"It's an ordinary looking cannibal's cooking pot. You can see them any day of the week in Islington, with cheeseplants in."
CR>)>)
(<VERB? EXIT>
<COND (<SET RM <EXIT-POT>>
<GOTO .RM>)
(T T)>)
(<VERB? ENTER>
<COND (<HERE? IN-TREE>
<TELL "You're still attached to your parachute, so you can't go anywhere." CR>)
(<HERE? IN-POT>
<ALREADY-THERE>)
(T <>)>)
(ELSE <>)>>
<OBJECT NATIVES
(LOC LOCAL-GLOBALS)
(DESC "Zalagasans")
(LDESC "A tribe of Zalagasan natives.")
(FLAGS PLURAL PERSON)
(SYNONYM NATIVES NATIVE ZALAGASAN TRIBE)
(ADJECTIVE ZALAGASAN)
(ACTION ZALAG-F)>
<DEFINE ZALAG-F ZALAG ("OPTIONAL" (CONTEXT <>))
<COND (<EQUAL? .CONTEXT ,M-WINNER>
<COND (<VERB? STINGLAI> <RETURN <> .ZALAG>)
(<PRSO? ME>
<COND (<VERB? TELL-ABOUT>
<ASK-NATIVES-ABOUT ,PRSI>)
(<VERB? SSHOW SGIVE SSELL>
<NATIVES-SHOW-YOU ,PRSI>)
(T
<IGNORES ,NATIVES>)>)
(<PRSI? ME>
<COND (<VERB? SHOW>
<NATIVES-SHOW-YOU ,PRSO>)
(<VERB? GIVE SELL>
<ASK-NATIVES-FOR ,PRSO>)
(T
<IGNORES ,NATIVES>)>)
(T
<IGNORES ,NATIVES>)>
,FATAL-VALUE)
(<T? .CONTEXT>
<>)
(<THIS-PRSI?>
<COND (<VERB? GIVE>
<COND (<PRSO? RECIPE>
<TELL "The Zalagasans aren't sure about the cartridge. Perhaps they'd like a demo." CR>)
(T
<TELL "It isn't likely that the Zalagasans would accept your offer." CR>)>)
(<VERB? SHOW>
<COND (<IS? ,PRSO ,PROGRAM>
<TELL "The Zalagasans might be more impressed by this nondescript chunk of plastic if they saw what it could do." CR>)
(<PRSO? AIRLINE-MAGAZINE>
<TELL "The Zalagasans stare in awe at the representation of someone they have only heard mentioned around the campfire. Finally one of them shouts, \"She's just a legend!\" They all start chanting that for a while, until they're all convinced, then return to chanting \"Z-BUG! Z-BUG!\"" CR>)>)
(T <>)>)
(<VERB? TELL>
<>)
(<VERB? ASK-ABOUT>
<ASK-NATIVES-ABOUT ,PRSI>)
(<VERB? ASK-FOR>
<ASK-NATIVES-FOR ,PRSI>
T)
(<VERB? EXAMINE>
<TELL "They look like extras from a \"Tarzan\" movie." CR>
T)
(T
<>)>>
<DEFINE NATIVES-REACT (OBJ)
<COND (<HERE? IN-POT>
<COND
(<IS? ,NATIVES ,TOUCHED>)
(T
<ZCRLF>
<COND
(<==? .OBJ ,ECLIPSE>
<TELL "For some reason the Zalagasans seemed completely unimpressed with your eclipse prediction. They mention that yesterday's eclipse was quite beautiful and that every member of the tribe belongs to the Zalagasa Boysenberry Users' Group (Z-BUG). It is obvious that the Zalagasans will not be fooled by the old eclipse prediction trick." CR>)
(<==? .OBJ ,RECIPE>
<TELL "The entire tribe go into an ecstatic frenzy. They grab the cartridge from your computer and run off to try it out on their Boysenberry. One kindly soul, remorseful at taking your cartridge without compensation, gives you another one. \"Maybe you'll like this.\" He also hands you an address book. \"If you see that nerdly fellow, give him this. He dropped it here just now.\"" CR>
<ZREMOVE .OBJ>
<SETG NERD-HACKED-ABOOK? T>
<MOVE ,ABOOK ,PLAYER>
<MOVE ,RANDOM-CARTRIDGE ,PLAYER>
<THIS-IS-IT ,ABOOK>
<UPDATE-SCORE 1>
<MAKE ,NATIVES ,TOUCHED>
<MAKE ,NATIVES ,INVISIBLE>
T)
(<==? .OBJ ,ADVENTURE>
<TELL "The Zalagasans seem completely uninterested in your adventure game. You may recall that this adventure received a devastating review in \"The Zalagasan PC Magazine\"." CR>)>)>)>>
<DEFINE NATIVES-SHOW-YOU (OBJ)
<COND (<EQUAL? .OBJ ,ME ,NATIVES>
<PUZZLED ,NATIVES>
T)
(<IN? .OBJ ,NATIVES>
<TELL "\"Here. Take a look,\" they reply." CR>
T)
(T
<TELL "They don't have " A .OBJ "." CR>
T)>>
<DEFINE ASK-NATIVES-FOR (OBJ)
<COND (<EQUAL? .OBJ ,ME ,NATIVES>
<PUZZLED ,NATIVES>)
(T
<TELL CTHE ,NATIVES " chant \"We can't ">
<COND (<VERB? ASK-FOR>
<TELL "give">)
(T
<ZPRINTB ,P-PRSA-WORD>)>
<TELL " you that!\"" CR>)>
T>
<DEFINE ASK-NATIVES-ABOUT (OBJ)
<COND (<EQUAL? .OBJ ,IN-POT ,NATIVES>
<TELL "One of the Zalagasans says, \"We aren't actually cannibals. Our society is in fact quite technologically advanced. We have been trying to get " ITAL "The National Geographic" " to do an article about us to help us increase tourism. Unfortunately, technologically advanced Zalagasans aren't very interesting. Twentieth century cannibalism is still a fairly hot item, though, so we've been cooking missionaries, explorers and mercenaries to impress " ITAL "The National Geographic" ".\"" CR>
T)
(<==? .OBJ ,ME>
<TELL CTHE ,NATIVES " note that you are far from well done." CR>
T)
(<==? .OBJ ,NERD>
<TELL CTHE ,NATIVES " collectively shrug. \"He seems to hang
around here a lot,\" one of them says." CR>)
(<==? .OBJ ,COMPUTER>
<TELL CTHE ,NATIVES " shrug it off; they're apparently quite used to it." CR>)
(ELSE
<TELL CTHE ,NATIVES " ignore you." CR>)>>
<OBJECT IN-CLEARING
(LOC ROOMS)
(DESC "grubby antechamber")
(FLAGS LIGHTED LOCATION INDOORS)
(WEST TO CARD-ROOM IF ODD-GATE IS OPEN)
(IN TO CARD-ROOM IF ODD-GATE IS OPEN)
(EAST TO MAZE-ROOM)
(ACTION IN-CLEARING-F)>
<DEFINE IN-CLEARING-F ("OPT" (CONTEXT <>))
<COND (<==? .CONTEXT ,M-LOOK>
<TELL "You're in a foul, unkempt antechamber which smells strongly of old socks.
There's a">
<OPEN-CLOSED ,ODD-GATE>
<TELL " in the west wall, and an exit to the east. It's not at
all clear how you managed to end up here; there's no trace of whatever
entrance you used." CR>)
(T <>)>>
<SETG ODD-GATE-SOLVED? <>>
<OBJECT ODD-GATE-SIGN
(LOC ODD-GATE)
(FLAGS NODESC READABLE)
(DESC "sign")
(SYNONYM SIGN)
(ACTION ODD-GATE-SIGN-F)>
<DEFINE ODD-GATE-SIGN-F ()
<COND (<THIS-PRSO?>
<COND (<MOVING?>
<TELL CTHEO " is irrevocably attached to the door." CR>)
(<VERB? EXAMINE LOOK-ON READ>
<TELL CTHEO " contains the rather arcane text:|
010|
100|
001|
111|
and nothing else. You wonder why it doesn't just say Locker 2417." CR>)>)>>
<OBJECT ODD-GATE
(LOC IN-CLEARING)
(DESC "locker door")
(FLAGS NODESC DOORLIKE OPENABLE VOWEL SURFACE LOCKED)
(SYNONYM DOOR)
(ADJECTIVE CLOSED SHUT ODD CURIOUS ODD-LOOKING LOCKER)
(ACTION ODD-GATE-F)>
<DEFINE SAY-HANDLE-STATE (HANDLE)
<TELL CTHE .HANDLE " is pointing ">
<COND (<F? <GETB ,HANDLE-STATE <GETP .HANDLE ,P?HANDLE-NUMBER>>>
<TELL "up">)
(T
<TELL "down">)>
<TELL ".">>
<DEFINE ODD-GATE-F ("OPT" (CONTEXT <>))
<COND (<==? .CONTEXT ,M-OBJDESC>
<COND (<HERE? CARD-ROOM>
<TELL "This side of the locker door is completely featureless.">)
(T
<TELL
"There are three handles on the door, arranged in a row. ">
<SAY-HANDLE-STATE ,LEFT-HANDLE>
<TELL " ">
<SAY-HANDLE-STATE ,MIDDLE-HANDLE>
<TELL " ">
<SAY-HANDLE-STATE ,RIGHT-HANDLE>
<TELL " There's also a sign attached to the door.">)>)
(<T? .CONTEXT> <>)
(<THIS-PRSO?>
<COND (<VERB? OPEN>
<COND (<HERE? CARD-ROOM> <>)
(<NOT <IS? ,ODD-GATE ,LOCKED>>
<MAKE ,PRSO ,OPENED>
<TELL CTHEO " swings open." CR>
<COND (<F? ,ODD-GATE-SOLVED?> <UPDATE-SCORE 1 <>>)>
<SETG ODD-GATE-SOLVED? ,HERE>
T)>)
(<VERB? CLOSE>
<UNMAKE ,ODD-GATE ,OPENED>
<MAKE ,ODD-GATE ,LOCKED>
<TELL CTHEO " swings shut, making no sound until you hear it
latching.">
<COND (<NOT <HERE? CARD-ROOM>>
<TELL " The handles swing back to their original positions." CR>
<RESET-GATE-STATE>)
(T
<TELL " After an extended search, you discover that there's no way out of this room, and die of ennui.">
<JIGS-UP>)>)
(<VERB? EXAMINE>
<TELL "The door is ">
<COND (<IS? ,ODD-GATE ,OPENED>
<TELL "open">)
(T
<TELL "closed">)>
<TELL ". ">
<ODD-GATE-F ,M-OBJDESC>
<ZCRLF>)
(<VERB? TAKE>
<TELL "It seems to be firmly attached to something, and is in
any case quite heavy." CR>)
(<ENTERING?>
<COND (<HERE? CARD-ROOM>
<DO-WALK ,P?OUT>)
(T
<DO-WALK ,P?WEST>)>
T)
(<HURTING?>
<TELL CTHEO " was apparently designed to withstand far stronger
attackers than you." CR>)>)
(T <>)>>
<OBJECT LEFT-HANDLE
(DESC "left handle")
(LOC ODD-GATE)
(FLAGS NODESC TRYTAKE)
(SYNONYM HANDLE KNOB ARM HANDLES)
(ADJECTIVE LEFT FIRST)
(GENERIC GENERIC-HANDLE-F)
(HANDLE-NUMBER 0)
(ACTION HANDLE-F)>
<OBJECT MIDDLE-HANDLE
(DESC "middle handle")
(LOC ODD-GATE)
(FLAGS NODESC TRYTAKE)
(SYNONYM HANDLE KNOB ARM HANDLES)
(ADJECTIVE MIDDLE SECOND CENTER CENTRE)
(GENERIC GENERIC-HANDLE-F)
(HANDLE-NUMBER 1)
(ACTION HANDLE-F)>
<OBJECT RIGHT-HANDLE
(DESC "right handle")
(LOC ODD-GATE)
(FLAGS NODESC TRYTAKE)
(SYNONYM HANDLE KNOB ARM HANDLES)
(ADJECTIVE RIGHT THIRD LAST)
(GENERIC GENERIC-HANDLE-F)
(HANDLE-NUMBER 2)
(ACTION HANDLE-F)>
<CONSTANT ALL-HANDLES <PTABLE LEFT-HANDLE MIDDLE-HANDLE RIGHT-HANDLE>>
<MSETG HANDLE-COUNT 3>
<CONSTANT HANDLE-STATE <TABLE (BYTE) 0 1 0>>
<SETG HANDLE-TURNS 0>
<DEFINE SWITCH-STATE (HANDLE "AUX" (N <GETP .HANDLE ,P?HANDLE-NUMBER>)
(VAL 0))
<COND (<F? <GETB ,HANDLE-STATE .N>>
<SET VAL 1>)>
<PUTB ,HANDLE-STATE .N .VAL>
<TELL CTHE .HANDLE " is now pointing ">
<COND (<F? .VAL> <TELL "up">)
(T <TELL "down">)>
<TELL ,PERIOD>>
<DEFINE CHECK-MOVE CHECK (H1 H2 "AUX" (HS ,HANDLE-STATE) TMP)
<COND (<L? ,HANDLE-TURNS 0>
; "Losing"
<COND (<AND <F? <GETB .HS 0>>
<T? <GETB .HS 1>>
<F? <GETB .HS 0>>>
; "Back in initial state"
<SETG HANDLE-TURNS 0>
T)
(T <>)>)
(T
<COND (<L? <GETP .H2 ,P?HANDLE-NUMBER>
<GETP .H1 ,P?HANDLE-NUMBER>>
<SET TMP .H1>
<SET H1 .H2>
<SET H2 .TMP>)>
<SETG HANDLE-TURNS <+ ,HANDLE-TURNS 1>>
<COND (<==? ,HANDLE-TURNS 1>
<COND (<AND <==? .H1 ,LEFT-HANDLE>
<==? .H2 ,MIDDLE-HANDLE>>
T)
(<AND <==? .H1 ,MIDDLE-HANDLE>
<==? .H2 ,RIGHT-HANDLE>>
T)
(T <>)>)
(<==? ,HANDLE-TURNS 2>
<COND (<AND <==? .H1 ,LEFT-HANDLE>
<==? .H2 ,RIGHT-HANDLE>>
T)
(T <>)>)
(<==? ,HANDLE-TURNS 3>
<COND (<AND <T? <GETB .HS 0>>
<T? <GETB .HS 1>>
<T? <GETB .HS 2>>>
T)
(T <>)>)>)>>
<DEFINE GENERIC-HANDLE-F (TBL)
<COND (<NOUN-USED? ,W?HANDLES>
<COND (<==? <ZGET .TBL 0> ,HANDLE-COUNT>
,LEFT-HANDLE)
(T <>)>)
(<INTBL? ,P-IT-OBJECT ,ALL-HANDLES ,HANDLE-COUNT>
,P-IT-OBJECT)
(T <>)>>
<DEFINE HANDLE-F HANDLE ("AUX" H1 H2)
<COND (<AND <F? ,OBJECTS-GROUPED>
<F? ,P-MULT?>
<THIS-PRSO?>
<NOUN-USED? ,W?HANDLES>>
; "TURN HANDLES BECOMES TURN ALL HANDLES"
<ZPUT ,P-PRSO 0 3>
<ZPUT ,P-PRSO 1 ,LEFT-HANDLE>
<ZPUT ,P-PRSO 2 ,MIDDLE-HANDLE>
<ZPUT ,P-PRSO 3 ,RIGHT-HANDLE>
<SETG OBJECTS-GROUPED T>)>
<COND (<VERB? REFUSE>
<TELL "Make it easy on yourself, and just 'turn left handle' or
whatever." CR>)
(<VERB? TURN MOVE>
<COND (<T? ,OBJECTS-GROUPED>
; "TURNING ONE OR TWO HANDLES"
<COND (<==? <ZGET ,P-PRSO 0> 2>
<SWITCH-STATE <SET H1 <ZGET ,P-PRSO 1>>>
<SWITCH-STATE <SET H2 <ZGET ,P-PRSO 2>>>
<COND (<F? <CHECK-MOVE .H1 .H2>>
<SETG HANDLE-TURNS -1>
<TELL "Although the handles turn, you don't hear anything." CR>)
(<==? ,HANDLE-TURNS 3>
<UNMAKE ,ODD-GATE ,LOCKED>
<TELL "You hear a sharp click, as if something
inside the door had moved." CR>)
(T
<TELL "You hear a click inside the door." CR>)>
<RETURN T .HANDLE>)
(<==? <ZGET ,P-PRSO 0> 3>
<TELL "You'll have to file Form 897/3/A, Application for
Attachment of Third Arm, before you can do that." CR>
<RETURN T .HANDLE>)>)>
<TELL "All of the handles wiggle a little, but none of them turns."
CR>
T)
(<VERB? PULL PUSH>
<TELL "These handles seem more as if they're meant to be turned." CR>)
(<VERB? TAKE>
<TELL "All the handles are firmly attached." CR>)
(<AND <T? ,OBJECTS-GROUPED>
<THIS-PRSO?>>
; "ALL PREVIOUS RESPONSES PLAUSIBLE FOR MORE THAN ONE; NOW
CAUSE DEFAULTS TO BE APPLIED TO EACH IN TURN"
<MAIN-LOOP T>
T)
(<VERB? EXAMINE>
<SAY-HANDLE-STATE ,PRSO>
<ZCRLF>)>>
<DEFINE RESET-GATE-STATE ()
<SETG HANDLE-TURNS 0>
<PUTB ,HANDLE-STATE 0 0>
<PUTB ,HANDLE-STATE 1 1>
<PUTB ,HANDLE-STATE 2 0>>
<OBJECT CARD-ROOM
(LOC ROOMS)
(DESC "locker")
(FLAGS LIGHTED LOCATION INDOORS)
(EAST PER EXIT-CARD-ROOM)
(OUT PER EXIT-CARD-ROOM)
(GLOBAL ODD-GATE)
(ACTION CARD-ROOM-F)>
<DEFINE EXIT-CARD-ROOM ()
<COND (<IS? ,ODD-GATE ,OPENED>
,ODD-GATE-SOLVED?)
(T
<TELL CTHE ,ODD-GATE " is closed." CR>
<>)>>
<DEFINE CARD-ROOM-F ("OPT" (CONTEXT <>))
<COND (<==? .CONTEXT ,M-LOOK>
<TELL "You're in a large locker. The exit is a">
<OPEN-CLOSED ,ODD-GATE>
<TELL " to the east." CR>)
(<==? .CONTEXT ,M-ENTERING>
<MAKE ,LEFT-HANDLE ,INVISIBLE>
<MAKE ,RIGHT-HANDLE ,INVISIBLE>
<MAKE ,MIDDLE-HANDLE ,INVISIBLE>
<>)
(<==? .CONTEXT ,M-EXIT>
<UNMAKE ,LEFT-HANDLE ,INVISIBLE>
<UNMAKE ,MIDDLE-HANDLE ,INVISIBLE>
<UNMAKE ,RIGHT-HANDLE ,INVISIBLE>
<>)
(T <>)>>
<OBJECT KEY
(LOC CARD-ROOM)
(DESC "magnetic key-card")
(FLAGS TAKEABLE READABLE)
(SYNONYM CARD KEY KEYCARD KEY-CARD)
(ADJECTIVE MAGNETIC PLASTIC KEY)
(FDESC "There's a magnetic key-card on the floor.")
(SIZE 1)
(ACTION KEY-F)>
<DEFINE KEY-F ()
<COND (<VERB? EXAMINE READ>
<TELL "It's a standard sort of plastic key-card with a magnetic stripe. It's embossed with the letters \"R.Q.H.\""
CR>)>>
<OBJECT RANDOM-CARTRIDGE
(DESC "unlabelled cartridge")
(FLAGS TAKEABLE PROGRAM VOWEL)
(SIZE 2)
(GENERIC GENERIC-SOFTWARE-F)
(LDESC "This cartridge has obviously seen considerable use. Whatever
label it had on it is long gone and hard to find.")
(SYNONYM CARTRIDGE CART CARTS ROM PROGRAM SOFTWARE)
(ADJECTIVE UNLABELLED UNLABELED PROGRAM ROM SOFTWARE UNLABELED)
(ACTION RANDOM-CARTRIDGE-F)>
<DEFINE RANDOM-CARTRIDGE-F ()
<COND (<THIS-PRSO?>
<HANDLE-ROM?>)
(T <>)>>
<CONSTANT A-DIR <DIR-ENTRY PROG-SECOND "PRINTB" <> IMPURE>>
<CONSTANT B-DIR <DIR-ENTRY PROG-FOURTH "PRINTC" <> IMPURE>>
<CONSTANT C-DIR <DIR-ENTRY PROG-FIRST "PRINTD" <> IMPURE>>
<CONSTANT D-DIR <DIR-ENTRY PROG-THIRD "PRINTE" <> IMPURE>>
<CONSTANT PRINTR-TABLE <PTABLE A-DIR B-DIR C-DIR D-DIR>>
<CONSTANT RPRINTR-TABLE <PTABLE PROG-FIRST PROG-SECOND PROG-THIRD PROG-FOURTH>>
<CONSTANT RANDOM-CARTRIDGE-TABLE
<PLTABLE HELP-DIR QUIT-DIR DIR-DIR CLEAR-DIR HACK-DIR
A-DIR B-DIR C-DIR D-DIR>>