zork2/gmain.zap

239 lines
4.8 KiB
Plaintext

.FUNCT MAIN-LOOP,TRASH
?PRG1: CALL MAIN-LOOP-1 >TRASH
JUMP ?PRG1
.FUNCT MAIN-LOOP-1,ICNT,OCNT,NUM,CNT,OBJ,TBL,V,PTBL,OBJ1,TMP,O,I
SET 'CNT,0
SET 'OBJ,FALSE-VALUE
SET 'PTBL,TRUE-VALUE
CALL PARSER >P-WON
ZERO? P-WON /?ELS3
GET P-PRSI,P-MATCHLEN >ICNT
GET P-PRSO,P-MATCHLEN >OCNT
ZERO? P-IT-OBJECT /?CND4
CALL ACCESSIBLE?,P-IT-OBJECT
ZERO? STACK /?CND4
SET 'TMP,FALSE-VALUE
?PRG9: IGRTR? 'CNT,ICNT \?ELS13
JUMP ?REP10
?ELS13: GET P-PRSI,CNT
EQUAL? STACK,IT \?PRG9
PUT P-PRSI,CNT,P-IT-OBJECT
SET 'TMP,TRUE-VALUE
?REP10: ZERO? TMP \?CND19
SET 'CNT,0
?PRG22: IGRTR? 'CNT,OCNT \?ELS26
JUMP ?CND19
?ELS26: GET P-PRSO,CNT
EQUAL? STACK,IT \?PRG22
PUT P-PRSO,CNT,P-IT-OBJECT
?CND19: SET 'CNT,0
?CND4: ZERO? OCNT \?ELS36
PUSH OCNT
JUMP ?CND32
?ELS36: GRTR? OCNT,1 \?ELS38
SET 'TBL,P-PRSO
ZERO? ICNT \?ELS41
SET 'OBJ,FALSE-VALUE
JUMP ?CND39
?ELS41: GET P-PRSI,1 >OBJ
?CND39: PUSH OCNT
JUMP ?CND32
?ELS38: GRTR? ICNT,1 \?ELS45
SET 'PTBL,FALSE-VALUE
SET 'TBL,P-PRSI
GET P-PRSO,1 >OBJ
PUSH ICNT
JUMP ?CND32
?ELS45: PUSH 1
?CND32: SET 'NUM,STACK
ZERO? OBJ \?CND48
EQUAL? ICNT,1 \?CND48
GET P-PRSI,1 >OBJ
?CND48: EQUAL? PRSA,V?WALK \?ELS55
ZERO? P-WALK-DIR /?ELS55
CALL PERFORM,PRSA,PRSO >V
JUMP ?CND53
?ELS55: ZERO? NUM \?ELS59
GETB P-SYNTAX,P-SBITS
BAND STACK,P-SONUMS
ZERO? STACK \?ELS62
CALL PERFORM,PRSA >V
SET 'PRSO,FALSE-VALUE
JUMP ?CND53
?ELS62: ZERO? LIT \?ELS64
PRINTI "It's too dark to see."
CRLF
JUMP ?CND53
?ELS64: PRINTI "It's not clear what you're referring to."
CRLF
SET 'V,FALSE-VALUE
JUMP ?CND53
?ELS59: SET 'P-NOT-HERE,0
SET 'P-MULT,FALSE-VALUE
GRTR? NUM,1 \?CND73
SET 'P-MULT,TRUE-VALUE
?CND73: SET 'TMP,FALSE-VALUE
?PRG76: IGRTR? 'CNT,NUM \?ELS80
GRTR? P-NOT-HERE,0 \?ELS83
PRINTI "The "
EQUAL? P-NOT-HERE,NUM /?CND86
PRINTI "other "
?CND86: PRINTI "object"
EQUAL? P-NOT-HERE,1 /?CND93
PRINTI "s"
?CND93: PRINTI " that you mentioned "
EQUAL? P-NOT-HERE,1 /?ELS102
PRINTI "are"
JUMP ?CND100
?ELS102: PRINTI "is"
?CND100: PRINTI "n't here."
CRLF
JUMP ?REP77
?ELS83: ZERO? TMP \?REP77
PRINTI "There's nothing here you can take."
CRLF
JUMP ?REP77
?ELS80: ZERO? PTBL /?ELS119
GET P-PRSO,CNT >OBJ1
JUMP ?CND117
?ELS119: GET P-PRSI,CNT >OBJ1
?CND117: ZERO? PTBL /?ELS127
PUSH OBJ1
JUMP ?CND123
?ELS127: PUSH OBJ
?CND123: SET 'O,STACK
ZERO? PTBL /?ELS135
PUSH OBJ
JUMP ?CND131
?ELS135: PUSH OBJ1
?CND131: SET 'I,STACK
GRTR? NUM,1 /?THN142
GET P-ITBL,P-NC1
GET STACK,0
EQUAL? STACK,W?ALL \?CND139
?THN142: LOC WINNER >V
EQUAL? O,NOT-HERE-OBJECT \?ELS146
INC 'P-NOT-HERE
JUMP ?PRG76
?ELS146: EQUAL? PRSA,V?TAKE \?ELS148
ZERO? I /?ELS148
GET P-ITBL,P-NC1
GET STACK,0
EQUAL? STACK,W?ALL \?ELS148
IN? O,I /?ELS148
JUMP ?PRG76
?ELS148: EQUAL? P-GETFLAGS,P-ALL \?ELS152
EQUAL? PRSA,V?TAKE \?ELS152
LOC O
EQUAL? STACK,WINNER,HERE,V /?ELS158
LOC O
EQUAL? STACK,I /?ELS158
LOC O
FSET? STACK,SURFACEBIT \?PRG76
?ELS158: FSET? O,TAKEBIT /?ELS152
FSET? O,TRYTAKEBIT /?ELS152
JUMP ?PRG76
?ELS152: EQUAL? OBJ1,IT \?ELS165
PRINTD P-IT-OBJECT
JUMP ?CND163
?ELS165: PRINTD OBJ1
?CND163: PRINTI ": "
?CND139: SET 'PRSO,O
SET 'PRSI,I
SET 'TMP,TRUE-VALUE
CALL PERFORM,PRSA,PRSO,PRSI >V
EQUAL? V,M-FATAL \?PRG76
JUMP ?CND53
?REP77:
?CND53: EQUAL? V,M-FATAL /?CND173
LOC WINNER
GETP STACK,P?ACTION
CALL STACK,M-END >V
?CND173: EQUAL? V,M-FATAL \?CND1
SET 'P-CONT,FALSE-VALUE
JUMP ?CND1
?ELS3: SET 'P-CONT,FALSE-VALUE
?CND1: CALL NULL-F
ZERO? P-WON /FALSE
EQUAL? PRSA,V?SUPER-BRIEF,V?BRIEF,V?TELL /TRUE
EQUAL? PRSA,V?VERSION,V?SAVE,V?VERBOSE /TRUE
EQUAL? PRSA,V?SCORE,V?RESTART,V?QUIT /TRUE
EQUAL? PRSA,V?RESTORE,V?UNSCRIPT,V?SCRIPT /TRUE
CALL CLOCKER >V
RETURN V
.FUNCT PERFORM,A,O=0,I=0,V,OA,OO,OI
SET 'OA,PRSA
SET 'OO,PRSO
SET 'OI,PRSI
EQUAL? IT,I,O \?CND1
CALL ACCESSIBLE?,P-IT-OBJECT
ZERO? STACK \?CND1
PRINTI "I don't see what you are referring to."
CRLF
RETURN 2
?CND1: EQUAL? O,IT \?CND10
SET 'O,P-IT-OBJECT
?CND10: EQUAL? I,IT \?CND13
SET 'I,P-IT-OBJECT
?CND13: SET 'PRSA,A
SET 'PRSO,O
ZERO? PRSO /?CND16
EQUAL? PRSI,IT /?CND16
EQUAL? PRSA,V?WALK /?CND16
SET 'P-IT-OBJECT,PRSO
?CND16: SET 'PRSI,I
EQUAL? NOT-HERE-OBJECT,PRSO,PRSI \?ELS23
CALL NOT-HERE-OBJECT-F >V
ZERO? V /?ELS23
JUMP ?CND21
?ELS23: SET 'O,PRSO
SET 'I,PRSI
GETP WINNER,P?ACTION
CALL STACK >V
ZERO? V /?ELS30
JUMP ?CND21
?ELS30: LOC WINNER
GETP STACK,P?ACTION
CALL STACK,M-BEG >V
ZERO? V /?ELS32
JUMP ?CND21
?ELS32: GET PREACTIONS,A
CALL STACK >V
ZERO? V /?ELS34
JUMP ?CND21
?ELS34: ZERO? I /?ELS36
GETP I,P?ACTION
CALL STACK >V
ZERO? V /?ELS36
JUMP ?CND21
?ELS36: ZERO? O /?ELS40
EQUAL? A,V?WALK /?ELS40
LOC O
ZERO? STACK /?ELS40
LOC O
GETP STACK,P?CONTFCN
CALL STACK >V
ZERO? V /?ELS40
JUMP ?CND21
?ELS40: ZERO? O /?ELS44
EQUAL? A,V?WALK /?ELS44
GETP O,P?ACTION
CALL STACK >V
ZERO? V /?ELS44
JUMP ?CND21
?ELS44: GET ACTIONS,A
CALL STACK >V
ZERO? V /?CND21
?CND21: SET 'PRSA,OA
SET 'PRSO,OO
SET 'PRSI,OI
RETURN V
.ENDI