restaurant/top.zap

449 lines
8.7 KiB
Plaintext

.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