.SEGMENT "0" .FUNCT MORE-SPECIFIC:ANY:0:0 SET 'CLOCK-WAIT,TRUE-VALUE PRINTR "[Please be more specific.]" .FUNCT V-PDEBUG:ANY:0:0 ZERO? PRSO /?CCL3 ZERO? IDEBUG /?PRT4 SET 'IDEBUG,0 JUMP ?PRE6 ?PRT4: SET 'IDEBUG,1 ?PRE6: PRINTC 123 PRINTN IDEBUG PRINTR "}" ?CCL3: ZERO? P-DBUG /?PRT9 SET 'P-DBUG,0 JUMP ?PRE11 ?PRT9: SET 'P-DBUG,1 ?PRE11: ZERO? P-DBUG /?CCL8 PRINTR "Find them bugs, boss!" ?CCL8: PRINTR "No bugs left, eh?" .FUNCT VERB-ALL-TEST:ANY:2:2,O,I,L LOC O >L EQUAL? PRSA,V?GIVE,V?DROP \?CCL3 EQUAL? L,WINNER /TRUE RFALSE ?CCL3: EQUAL? PRSA,V?PUT \?CCL8 EQUAL? O,I /FALSE IN? O,I /FALSE RTRUE ?CCL8: EQUAL? PRSA,V?TAKE \?CCL15 FSET? O,TAKEBIT /?CND16 FSET? O,TRYTAKEBIT \FALSE ?CND16: ZERO? I /?CCL22 EQUAL? L,I /?CND20 RFALSE ?CCL22: EQUAL? L,HERE /TRUE ?CND20: FSET? L,PERSONBIT /TRUE FSET? L,SURFACEBIT /TRUE FSET? L,CONTBIT \FALSE FSET? L,OPENBIT /TRUE RFALSE ?CCL15: ZERO? I /TRUE EQUAL? O,I /FALSE RTRUE .FUNCT FIX-HIM-HER-IT:ANY:2:2,PRON,OBJ ZERO? OBJ \?CCL3 ICALL1 MORE-SPECIFIC RFALSE ?CCL3: CALL2 ACCESSIBLE?,OBJ ZERO? STACK \?CCL5 EQUAL? PRON,PRSO \?PRD9 CALL2 EVERYWHERE-VERB?,1 ZERO? STACK /?CTR4 ?PRD9: EQUAL? PRON,PRSI \?CCL5 CALL2 EVERYWHERE-VERB?,2 ZERO? STACK \?CCL5 ?CTR4: ICALL2 NOT-HERE,OBJ RFALSE ?CCL5: EQUAL? PRSO,PRON \?CND14 SET 'PRSO,OBJ ICALL TELL-PRONOUN,OBJ,PRON ?CND14: EQUAL? PRSI,PRON \?CND16 SET 'PRSI,OBJ ICALL TELL-PRONOUN,OBJ,PRON ?CND16: EQUAL? PRSS,PRON \TRUE SET 'PRSS,OBJ ICALL TELL-PRONOUN,OBJ,PRON RTRUE .FUNCT TELL-PRONOUN:ANY:2:2,OBJ,PRON FSET? PRON,TOUCHBIT /FALSE EQUAL? OPRSO,OBJ /FALSE EQUAL? PRSA,V?DO? /FALSE PRINTI "[""" PRINTD PRON PRINTI """ meaning " ICALL2 TELL-THE,OBJ PRINTR "]" .FUNCT NO-M-WINNER-VERB?:ANY:0:0 RFALSE .FUNCT FIND-A-WINNER:ANY:0:1,RM,OTHER,WHO,N ASSIGNED? 'RM /?CND1 SET 'RM,HERE ?CND1: ZERO? QCONTEXT /?CCL5 IN? QCONTEXT,RM \?CCL5 RETURN QCONTEXT ?CCL5: FIRST? RM >OTHER /?BOGUS8 ?BOGUS8: SET 'WHO,FALSE-VALUE ?PRG9: ZERO? OTHER \?CCL13 RETURN WHO ?CCL13: FSET? OTHER,PERSONBIT \?CND11 FSET? OTHER,INVISIBLE /?CND11 EQUAL? OTHER,PLAYER /?CND11 IGRTR? 'N,1 /FALSE SET 'WHO,OTHER ?CND11: NEXT? OTHER >OTHER /?PRG9 JUMP ?PRG9 .FUNCT TELL-SAID-TO:ANY:1:1,PER PRINTI "[said to " PRINTD PER PRINTR "]" .FUNCT QCONTEXT-GOOD?:ANY:0:0 ZERO? QCONTEXT /FALSE FSET? QCONTEXT,PERSONBIT \FALSE CALL2 META-LOC,QCONTEXT EQUAL? HERE,STACK \FALSE RETURN QCONTEXT .FUNCT META-LOC:ANY:1:2,OBJ,INV,L LOC OBJ >L ?PRG1: EQUAL? FALSE-VALUE,OBJ,L /FALSE EQUAL? L,LOCAL-GLOBALS,GLOBAL-OBJECTS,GENERIC-OBJECTS \?CCL7 RETURN L ?CCL7: IN? OBJ,ROOMS \?CCL9 RETURN OBJ ?CCL9: ZERO? INV /?CND10 FSET? OBJ,INVISIBLE /FALSE ?CND10: SET 'OBJ,L LOC OBJ >L JUMP ?PRG1 .FUNCT CANT-UNDO:ANY:0:0 PRINTR "[I can't undo that now.]" .FUNCT PERFORM:ANY:1:3,PA,PO,PI,V,OA,OO,OI,OQ,OS,X,?TMP1,?TMP2 SET 'OA,PRSA SET 'OO,PRSO SET 'OI,PRSI ZERO? OO /?CCL3 EQUAL? OO,PI \?CCL3 SET 'OBJ-SWAP,TRUE-VALUE JUMP ?CND1 ?CCL3: ZERO? OI /?CCL7 EQUAL? OI,PO \?CCL7 SET 'OBJ-SWAP,TRUE-VALUE JUMP ?CND1 ?CCL7: SET 'OBJ-SWAP,FALSE-VALUE ?CND1: SET 'PRSA,PA SET 'PRSI,PI SET 'PRSO,PO ZERO? P-DBUG /?CND10 PRINTI "{Perform: A=" PRINTN PA ZERO? PO /?CND12 PRINTI "/O=" EQUAL? PRSA,V?WALK \?CCL16 PRINTN PO JUMP ?CND12 ?CCL16: ICALL2 TELL-D-LOC,PO ?CND12: ZERO? PI /?CND17 PRINTI "/I=" ICALL2 TELL-D-LOC,PI ?CND17: ZERO? PRSQ /?CND19 PRINTI "/Q=" PRINTN PRSQ ?CND19: ZERO? PRSS /?CND21 PRINTI "/S=" ICALL2 TELL-D-LOC,PRSS ?CND21: PRINTI "} " ?CND10: SET 'V,FALSE-VALUE ZERO? PRSS /?CND23 ICALL2 THIS-IS-IT,PRSS ?CND23: ZERO? PRSI /?CND25 ICALL2 THIS-IS-IT,PRSI ?CND25: ZERO? PRSO /?CND27 EQUAL? PRSA,V?TELL /?CND27 EQUAL? PRSA,V?WALK /?CND27 ICALL2 THIS-IS-IT,PRSO ?CND27: EQUAL? WINNER,PLAYER /?CND32 ICALL2 THIS-IS-IT,WINNER ?CND32: SET 'PO,PRSO SET 'PI,PRSI CALL1 NO-M-WINNER-VERB? ZERO? STACK \?CND34 GETP WINNER,P?ACTION CALL D-APPLY,STR?47,STACK,M-WINNER >V ?CND34: ZERO? PRSS /?CND37 ZERO? V \?CND39 GETP PRSS,P?ACTION CALL D-APPLY,STR?48,STACK,M-SUBJ >V ?CND39: ZERO? V \?CND41 ZERO? PRSQ /?CND41 GET ACTIONS,PA >?TMP2 ADD QACTIONS,2 >?TMP1 GET QACTIONS,0 INTBL? ?TMP2,?TMP1,STACK >X \?CND41 GET X,2 CALL D-APPLY,STR?49,STACK >V ?CND41: ZERO? V \?CND47 ZERO? PRSQ /?CCL51 GET ACTIONS,PA >?TMP2 ADD QACTIONS,2 >?TMP1 GET QACTIONS,0 INTBL? ?TMP2,?TMP1,STACK >X \?CND52 GET X,1 >X ZERO? X /?CND52 CALL D-APPLY,FALSE-VALUE,X >V ?CND52: ZERO? V \?CND47 GET ACTIONS,PRSQ CALL D-APPLY,FALSE-VALUE,STACK >V JUMP ?CND47 ?CCL51: ICALL D-APPLY,FALSE-VALUE,V-STATEMENT ?CND47: EQUAL? M-FATAL,V \?CND58 SET 'P-CONT,-1 ?CND58: SET 'PRSA,OA SET 'PRSO,OO SET 'PRSI,OI RETURN V ?CND37: ZERO? V \?CND60 LOC WINNER IN? STACK,ROOMS /?CND60 LOC WINNER GETP STACK,P?ACTION CALL D-APPLY,STR?50,STACK,M-BEG >V ?CND60: ZERO? V \?CND64 GETP HERE,P?ACTION CALL D-APPLY,STR?50,STACK,M-BEG >V ?CND64: ZERO? V \?CND66 GET PREACTIONS,PA CALL D-APPLY,STR?49,STACK >V ?CND66: SET 'NOW-PRSI,1 ZERO? V \?CND68 ZERO? PI /?CND68 EQUAL? PRSA,V?WALK /?CND68 LOC PI ZERO? STACK /?CND68 LOC PI GETP STACK,P?CONTFCN >V ZERO? V /?CND68 CALL D-APPLY,STR?51,V,M-CONTAINER >V ?CND68: ZERO? V \?CND76 ZERO? PI /?CND76 EQUAL? PI,GLOBAL-HERE \?CND80 GETP HERE,P?ACTION CALL D-APPLY,STR?52,STACK >V ?CND80: ZERO? V \?CND76 GETP PI,P?ACTION CALL D-APPLY,STR?52,STACK >V ?CND76: SET 'NOW-PRSI,0 ZERO? V \?CND84 ZERO? PO /?CND84 EQUAL? PRSA,V?WALK /?CND84 LOC PO ZERO? STACK /?CND84 LOC PO GETP STACK,P?CONTFCN >V ZERO? V /?CND84 CALL D-APPLY,STR?51,V,M-CONTAINER >V ?CND84: ZERO? V \?CND92 ZERO? PO /?CND92 EQUAL? PRSA,V?WALK /?CND92 EQUAL? PO,GLOBAL-HERE \?CND97 GETP HERE,P?ACTION CALL D-APPLY,STR?53,STACK >V ?CND97: ZERO? V \?CND92 GETP PO,P?ACTION CALL D-APPLY,STR?53,STACK >V ?CND92: ZERO? V \?CND101 GET ACTIONS,PA CALL D-APPLY,FALSE-VALUE,STACK >V ?CND101: EQUAL? M-FATAL,V \?CND104 SET 'P-CONT,-1 ?CND104: SET 'PRSA,OA SET 'PRSO,OO SET 'PRSI,OI RETURN V .FUNCT TELL-TOO-DARK:ANY:0:0 PRINT TOO-DARK RETURN M-FATAL .FUNCT ITAKE-CHECK:ANY:2:2,OBJ,BITS,TAKEN EQUAL? OBJ,IT \?CCL3 SET 'OBJ,P-IT-OBJECT JUMP ?CND1 ?CCL3: EQUAL? OBJ,THEM \?CND1 SET 'OBJ,P-THEM-OBJECT ?CND1: CALL HELD?,OBJ,WINNER ZERO? STACK \FALSE EQUAL? OBJ,HANDS,ROOMS /FALSE FSET? OBJ,TRYTAKEBIT /?CND10 EQUAL? WINNER,PLAYER /?CCL14 SET 'TAKEN,TRUE-VALUE JUMP ?CND10 ?CCL14: BTST BITS,32 \?CND10 CALL ITAKE,FALSE-VALUE,OBJ EQUAL? STACK,TRUE-VALUE \?CND10 SET 'TAKEN,TRUE-VALUE ?CND10: ZERO? TAKEN \FALSE BTST BITS,64 \FALSE BTST BITS,128 /FALSE PRINTC 91 EQUAL? WINNER,PLAYER \?CCL26 PRINTI "You are" JUMP ?CND24 ?CCL26: ICALL2 TELL-CTHE,WINNER PRINTI " is" ?CND24: PRINTI "n't holding " ICALL2 TELL-THE,OBJ ICALL2 THIS-IS-IT,OBJ PRINTR "!]" .FUNCT TELL-D-LOC:ANY:1:1,OBJ PRINTD OBJ IN? OBJ,GLOBAL-OBJECTS \?CCL3 PRINTI "(gl)" JUMP ?CND1 ?CCL3: IN? OBJ,LOCAL-GLOBALS \?CCL5 PRINTI "(lg)" JUMP ?CND1 ?CCL5: IN? OBJ,ROOMS \?CND1 PRINTI "(rm)" ?CND1: EQUAL? OBJ,INTNUM \FALSE PRINTC 40 PRINTN P-NUMBER PRINTC 41 RTRUE .FUNCT D-APPLY:ANY:2:3,STR,FCN,FOO,RES ZERO? FCN /FALSE ZERO? P-DBUG /?CND4 ZERO? STR \?CCL8 PRINTI "{Action:} " JUMP ?CND4 ?CCL8: PRINTC 123 PRINT STR EQUAL? STR,STR?47 \?CND9 PRINTC 61 PRINTD WINNER ?CND9: PRINTI ": " ?CND4: ZERO? FOO /?CCL13 CALL FCN,FOO >RES JUMP ?CND11 ?CCL13: CALL FCN >RES ?CND11: ZERO? P-DBUG /?CND14 ZERO? STR /?CND14 EQUAL? M-FATAL,RES /?CTR19 EQUAL? P-CONT,-1 \?CCL20 ?CTR19: PRINTI "Fatal} " RETURN RES ?CCL20: ZERO? RES \?CCL24 PRINTI "Not handled} " RETURN RES ?CCL24: PRINTI "Handled} " ?CND14: RETURN RES .FUNCT NOT-HERE:ANY:1:2,OBJ,CLOCK ZERO? CLOCK \?CND1 SET 'CLOCK-WAIT,TRUE-VALUE PRINTI "[But" ?CND1: PRINTC 32 ICALL2 TELL-THE,OBJ ICALL2 PRINT-IS/ARE,OBJ PRINTI "n't " CALL2 VISIBLE?,OBJ ZERO? STACK /?CCL5 PRINTI "close enough" CALL1 SPEAKING-VERB? ZERO? STACK /?CND6 PRINTI " to hear you" ?CND6: PRINTC 46 JUMP ?CND3 ?CCL5: PRINTI "here!" ?CND3: ICALL2 THIS-IS-IT,OBJ ZERO? CLOCK \?CND8 PRINTC 93 ?CND8: CRLF RTRUE .FUNCT GET-OWNER:ANY:1:1,OBJ,TMP,NP CALL2 GET-NP,OBJ >NP ZERO? NP /FALSE GET NP,4 >TMP ZERO? TMP \?CTR5 GET NP,1 >TMP ZERO? TMP /?CCL6 GET TMP,2 >TMP ZERO? TMP /?CCL6 ?CTR5: LESS? 0,TMP \FALSE GRTR? TMP,LAST-OBJECT /FALSE RETURN TMP ?CCL6: GETP OBJ,P?OWNER >TMP ZERO? TMP /FALSE LESS? 0,TMP \?CCL17 GRTR? TMP,LAST-OBJECT \FALSE ?CCL17: RETURN PLAYER .FUNCT GET-NP:ANY:0:1,OBJ,PRSI? SET 'PRSI?,NOW-PRSI EQUAL? OBJ,FALSE-VALUE,PRSO,PRSI \FALSE ZERO? OBJ /?CND1 EQUAL? OBJ,PRSO \?CCL7 SET 'PRSI?,FALSE-VALUE JUMP ?CND1 ?CCL7: SET 'PRSI?,TRUE-VALUE ?CND1: ZERO? OBJ-SWAP /?CCL10 ZERO? PRSI? /?CCL13 RETURN PRSO-NP ?CCL13: RETURN PRSI-NP ?CCL10: ZERO? PRSI? /?CCL15 RETURN PRSI-NP ?CCL15: RETURN PRSO-NP .FUNCT NOUN-USED?:ANY:2:4,OBJ,WD1,WD2,WD3,X CALL2 GET-NP,OBJ >X ZERO? X /FALSE GET X,2 >X ZERO? X /FALSE EQUAL? X,WD1,WD2,WD3 /TRUE RFALSE .ENDSEG .ENDI