.FUNCT GO START:: ?FCN: SET 'LIT,TRUE-VALUE SET 'SCORE,20 SET 'WINNER,PLAYER SET 'HERE,DRIVEWAY-ENTRANCE CALL THIS-IS-IT,FRONT-DOOR CALL THIS-IS-S-HE,PHONG SET 'DIFFICULTY,DIFFICULTY-MAX FSET? HERE,TOUCHBIT /?CND1 CALL QUEUE-MAIN-EVENTS CALL START-MOVEMENT CALL INTRO CALL V-VERSION CRLF ?CND1: MOVE PLAYER,HERE CALL V-LOOK CALL MAIN-LOOP JUMP ?FCN .FUNCT MAIN-LOOP,ICNT,OCNT,NUM,CNT,OBJ,TBL,V,PTBL,OBJ1,TMP,?TMP1 ?PRG1: SET 'CNT,0 SET 'OBJ,FALSE-VALUE SET 'PTBL,TRUE-VALUE EQUAL? QCONTEXT-ROOM,HERE /?CND3 SET 'QCONTEXT,FALSE-VALUE ?CND3: CALL PARSER >P-WON ZERO? P-WON /?ELS8 GET P-PRSI,P-MATCHLEN >ICNT GET P-PRSO,P-MATCHLEN >OCNT ZERO? OCNT \?ELS13 PUSH OCNT JUMP ?CND9 ?ELS13: GRTR? OCNT,1 \?ELS15 SET 'TBL,P-PRSO ZERO? ICNT \?ELS18 SET 'OBJ,FALSE-VALUE JUMP ?CND16 ?ELS18: GET P-PRSI,1 >OBJ ?CND16: PUSH OCNT JUMP ?CND9 ?ELS15: GRTR? ICNT,1 \?ELS22 SET 'PTBL,FALSE-VALUE SET 'TBL,P-PRSI GET P-PRSO,1 >OBJ PUSH ICNT JUMP ?CND9 ?ELS22: PUSH 1 ?CND9: SET 'NUM,STACK ZERO? OBJ \?CND25 EQUAL? ICNT,1 \?CND25 GET P-PRSI,1 >OBJ ?CND25: EQUAL? PRSA,V?WALK \?ELS32 CALL PERFORM,PRSA,PRSO >V JUMP ?CND30 ?ELS32: ZERO? NUM \?ELS34 GETB P-SYNTAX,P-SBITS BAND STACK,P-SONUMS ZERO? STACK \?ELS37 CALL PERFORM,PRSA >V SET 'PRSO,FALSE-VALUE JUMP ?CND30 ?ELS37: PRINTI "(There isn't anything to " GET P-ITBL,P-VERBN >TMP ZERO? P-OFLAG /?ELS44 GET TMP,0 PRINTB STACK JUMP ?CND42 ?ELS44: GETB TMP,2 >?TMP1 GETB TMP,3 CALL WORD-PRINT,?TMP1,STACK ?CND42: PRINTI "!)" CRLF SET 'V,FALSE-VALUE JUMP ?CND30 ?ELS34: ZERO? PTBL /?ELS51 GRTR? NUM,1 \?ELS51 EQUAL? PRSA,V?COMPARE,V?ARREST \?ELS51 CALL PERFORM,PRSA,OBJECT-PAIR >V JUMP ?CND30 ?ELS51: SET 'TMP,0 ?PRG56: IGRTR? 'CNT,NUM \?ELS60 GRTR? TMP,0 \?REP57 PRINTI "The other object" EQUAL? TMP,1 /?CND66 PRINTI "s" ?CND66: PRINTI " that you mentioned " EQUAL? TMP,1 /?ELS75 PRINTI "are" JUMP ?CND73 ?ELS75: PRINTI "is" ?CND73: PRINTI "n't here." CRLF JUMP ?REP57 ?ELS60: ZERO? PTBL /?ELS88 GET P-PRSO,CNT >OBJ1 JUMP ?CND86 ?ELS88: GET P-PRSI,CNT >OBJ1 ?CND86: GRTR? NUM,1 \?CND92 EQUAL? OBJ1,NOT-HERE-OBJECT \?ELS97 INC 'TMP JUMP ?PRG56 ?ELS97: EQUAL? OBJ1,PLAYER \?ELS99 JUMP ?PRG56 ?ELS99: EQUAL? OBJ1,IT \?ELS104 PRINTD P-IT-OBJECT JUMP ?CND102 ?ELS104: PRINTD OBJ1 ?CND102: PRINTI ": " ?CND92: ZERO? PTBL /?ELS113 PUSH OBJ1 JUMP ?CND109 ?ELS113: PUSH OBJ ?CND109: CALL QCONTEXT-CHECK,STACK >V ZERO? PTBL /?ELS121 PUSH OBJ1 JUMP ?CND117 ?ELS121: PUSH OBJ ?CND117: SET '?TMP1,STACK ZERO? PTBL /?ELS129 PUSH OBJ JUMP ?CND125 ?ELS129: PUSH OBJ1 ?CND125: CALL PERFORM,PRSA,?TMP1,STACK >V EQUAL? V,M-FATAL \?PRG56 JUMP ?CND30 ?REP57: ?CND30: EQUAL? V,M-FATAL \?CND6 SET 'P-CONT,FALSE-VALUE JUMP ?CND6 ?ELS8: SET 'P-CONT,FALSE-VALUE ?CND6: ZERO? P-WON /?PRG1 EQUAL? PRSA,V?VERSION,V?$TANDY /?PRG1 EQUAL? PRSA,V?DEBUG,V?$WHERE,V?RESTART /?PRG1 EQUAL? PRSA,V?QUIT,V?$VERIFY,V?UNSCRIPT /?PRG1 EQUAL? PRSA,V?SCRIPT,V?UNSPACE,V?SPACE /?PRG1 EQUAL? PRSA,V?SAVE,V?TIME,V?VERBOSE /?PRG1 EQUAL? PRSA,V?SUPER-BRIEF,V?BRIEF,V?TELL \?ELS147 JUMP ?PRG1 ?ELS147: CALL CLOCKER >V JUMP ?PRG1 .FUNCT QCONTEXT-CHECK,PRSO,OTHER,WHO=0,N=0 EQUAL? PRSA,V?WHAT,V?HELP /?THN6 EQUAL? PRSA,V?TELL-ME,V?SHOW \FALSE EQUAL? PRSO,PLAYER \FALSE ?THN6: FIRST? HERE >OTHER /?KLU31 ?KLU31: ?PRG10: ZERO? OTHER \?ELS14 JUMP ?REP11 ?ELS14: FSET? OTHER,PERSON \?CND12 INC 'N SET 'WHO,OTHER ?CND12: NEXT? OTHER >OTHER /?KLU32 ?KLU32: JUMP ?PRG10 ?REP11: EQUAL? 1,N \?CND17 ZERO? QCONTEXT \?CND17 CALL SAID-TO,WHO ?CND17: ZERO? QCONTEXT /FALSE IN? QCONTEXT,HERE \FALSE EQUAL? QCONTEXT-ROOM,HERE \FALSE EQUAL? WINNER,PLAYER \FALSE SET 'WINNER,QCONTEXT PRINTI "(said to " PRINTD QCONTEXT PRINTR ")" .FUNCT SAID-TO,WHO SET 'WINNER,WHO SET 'QCONTEXT,WHO SET 'QCONTEXT-ROOM,HERE RETURN QCONTEXT-ROOM .FUNCT FAKE-ORPHAN,TMP,?TMP1 CALL ORPHAN,P-SYNTAX,FALSE-VALUE PRINTI "(Be specific: what object do you want to " GET P-OTBL,P-VERBN >TMP ZERO? TMP \?ELS5 PRINTI "tell" JUMP ?CND3 ?ELS5: GETB P-VTBL,2 ZERO? STACK \?ELS9 GET TMP,0 PRINTB STACK JUMP ?CND3 ?ELS9: GETB TMP,2 >?TMP1 GETB TMP,3 CALL WORD-PRINT,?TMP1,STACK PUTB P-VTBL,2,0 ?CND3: SET 'P-OFLAG,TRUE-VALUE SET 'P-WON,FALSE-VALUE PRINTR "?)" .FUNCT PERFORM,A,O=0,I=0,V,OA,OO,OI,?TMP1 ZERO? DEBUG /?CND1 PRINTI "[Perform: " PRINTN A ZERO? O /?CND9 EQUAL? A,V?WALK /?CND9 PRINTI "/" PRINTD O ?CND9: ZERO? I /?CND16 PRINTI "/" PRINTD I ?CND16: PRINTI "]" CRLF ?CND1: SET 'OA,PRSA SET 'OO,PRSO SET 'OI,PRSI SET 'PRSA,A EQUAL? IT,I,O \?ELS26 EQUAL? P-IT-LOC,HERE /?ELS26 ZERO? I \?ELS31 CALL FAKE-ORPHAN RETURN 2 ?ELS31: PRINTI "(The " PRINTD P-IT-OBJECT PRINTI " isn't here!)" CRLF RETURN 2 ?ELS26: EQUAL? HIM-HER,I,O \?CND24 CALL META-LOC,P-HIM-HER EQUAL? STACK,HERE /?CND24 GETP P-HIM-HER,P?CHARACTER GET GLOBAL-CHARACTER-TABLE,STACK >P-HIM-HER ?CND24: EQUAL? O,IT \?ELS44 SET 'O,P-IT-OBJECT JUMP ?CND42 ?ELS44: EQUAL? O,HIM-HER \?CND42 SET 'O,P-HIM-HER ?CND42: EQUAL? I,IT \?ELS49 SET 'I,P-IT-OBJECT JUMP ?CND47 ?ELS49: EQUAL? I,HIM-HER \?CND47 SET 'I,P-HIM-HER ?CND47: SET 'PRSO,O ZERO? PRSO /?CND52 EQUAL? PRSA,V?WALK /?CND52 FSET? PRSO,PERSON \?ELS59 SET 'P-HIM-HER,PRSO SET 'P-HIM-HER-LOC,HERE JUMP ?CND52 ?ELS59: SET 'P-IT-OBJECT,PRSO SET 'P-IT-LOC,HERE ?CND52: SET 'PRSI,I EQUAL? NOT-HERE-OBJECT,PRSO,PRSI \?ELS64 CALL D-APPLY,STR?131,NOT-HERE-OBJECT-F >V ZERO? V /?ELS64 JUMP ?CND62 ?ELS64: SET 'O,PRSO ZERO? O /?ELS68 SET 'I,PRSI ZERO? I /?ELS68 CALL NULL-F ZERO? STACK /?ELS68 PRINTI "[in case last clause changed PRSx]" JUMP ?CND62 ?ELS68: GETP WINNER,P?ACTION CALL DD-APPLY,STR?132,WINNER,STACK >V ZERO? V /?ELS74 JUMP ?CND62 ?ELS74: LOC WINNER GETP STACK,P?ACTION CALL D-APPLY,STR?133,STACK,M-BEG >V ZERO? V /?ELS76 JUMP ?CND62 ?ELS76: GET PREACTIONS,A CALL D-APPLY,STR?134,STACK >V ZERO? V /?ELS78 JUMP ?CND62 ?ELS78: ZERO? I /?ELS80 SET 'NOW-PRSI,TRUE-VALUE ZERO? NOW-PRSI /?ELS80 GETP I,P?ACTION CALL D-APPLY,STR?135,STACK >V ZERO? V /?ELS80 JUMP ?CND62 ?ELS80: SET 'NOW-PRSI,FALSE-VALUE ZERO? NOW-PRSI \?ELS84 ZERO? O /?ELS84 EQUAL? A,V?WALK /?ELS84 LOC O ZERO? STACK /?ELS84 LOC O GETP STACK,P?CONTFCN ZERO? STACK /?ELS84 LOC O >?TMP1 LOC O GETP STACK,P?CONTFCN CALL DD-APPLY,STR?136,?TMP1,STACK >V ZERO? V /?ELS84 JUMP ?CND62 ?ELS84: ZERO? O /?ELS88 EQUAL? A,V?WALK /?ELS88 GETP O,P?ACTION CALL D-APPLY,STR?137,STACK >V ZERO? V /?ELS88 JUMP ?CND62 ?ELS88: GET ACTIONS,A CALL D-APPLY,FALSE-VALUE,STACK >V ZERO? V /?CND62 ?CND62: EQUAL? V,M-FATAL /?CND93 LOC WINNER EQUAL? STACK,PRSO \?CND96 SET 'PRSO,FALSE-VALUE ?CND96: LOC WINNER GETP STACK,P?ACTION CALL D-APPLY,STR?138,STACK,M-END >V ?CND93: SET 'PRSA,OA SET 'PRSO,OO SET 'PRSI,OI RETURN V .FUNCT DD-APPLY,STR,OBJ,FCN,FOO=0 ZERO? DEBUG /?CND1 PRINTI "[" PRINTD OBJ PRINTI "=]" ?CND1: CALL D-APPLY,STR,FCN,FOO RSTACK .FUNCT D-APPLY,STR,FCN,FOO=0,RES ZERO? FCN /FALSE ZERO? DEBUG /?CND8 ZERO? STR \?ELS14 PRINTI "[Action:]" CRLF JUMP ?CND8 ?ELS14: PRINTI "[" PRINT STR PRINTI ": " ?CND8: ZERO? FOO /?ELS25 CALL FCN,FOO JUMP ?CND21 ?ELS25: CALL FCN ?CND21: SET 'RES,STACK ZERO? DEBUG /?CND29 ZERO? STR /?CND29 EQUAL? RES,M-FATAL \?ELS36 PRINTI "Fatal]" CRLF RETURN RES ?ELS36: ZERO? RES \?ELS40 PRINTI "Not handled]" CRLF RETURN RES ?ELS40: PRINTI "Handled]" CRLF ?CND29: RETURN RES .ENDI