362 lines
7.2 KiB
Plaintext
362 lines
7.2 KiB
Plaintext
|
|
|
|
.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
|