-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathMAIN.ZAP
170 lines (162 loc) · 3.11 KB
/
MAIN.ZAP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
.FUNCT GO
START::
?FCN: CALL QUEUE,I-WIZARD,4
PUT STACK,0,1
CALL QUEUE,I-LANTERN,200
PUTP BALLOON,P?VTYPE,RAIRBIT
PUTP BUCKET,P?VTYPE,RBUCKBIT
PUTP SEWL,P?SIZE,P?EAST
PUTP SWWL,P?SIZE,P?WEST
PUTP SSWL,P?SIZE,P?SOUTH
PUTP SNWL,P?SIZE,P?NORTH
SET 'LIT,1
SET 'WINNER,ADVENTURER
SET 'HERE,INSIDE-BARROW
SET 'P-IT-LOC,HERE
SET 'P-IT-OBJECT,0
FSET? HERE,TOUCHBIT /?CND1
CALL V-VERSION
CRLF
?CND1: MOVE WINNER,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,0
SET 'PTBL,1
CALL PARSER >P-WON
ZERO? P-WON /?ELS5
GET P-PRSI,P-MATCHLEN >ICNT
GET P-PRSO,P-MATCHLEN >OCNT
ZERO? OCNT \?ELS10
PUSH OCNT
JUMP ?CND6
?ELS10: GRTR? OCNT,1 \?ELS12
SET 'TBL,P-PRSO
ZERO? ICNT \?ELS15
SET 'OBJ,0
JUMP ?CND13
?ELS15: GET P-PRSI,1 >OBJ
?CND13: PUSH OCNT
JUMP ?CND6
?ELS12: GRTR? ICNT,1 \?ELS19
SET 'PTBL,0
SET 'TBL,P-PRSI
GET P-PRSO,1 >OBJ
PUSH ICNT
JUMP ?CND6
?ELS19: PUSH 1
?CND6: SET 'NUM,STACK
ZERO? OBJ \?CND22
EQUAL? ICNT,1 \?CND22
GET P-PRSI,1 >OBJ
?CND22: EQUAL? PRSA,V?WALK \?ELS29
CALL PERFORM,PRSA,PRSO >V
JUMP ?CND27
?ELS29: ZERO? NUM \?ELS31
GETB P-SYNTAX,P-SBITS
BAND STACK,P-SONUMS
ZERO? STACK \?ELS34
CALL PERFORM,PRSA >V
JUMP ?CND27
?ELS34: PRINTI "There isn't anything to "
GET P-ITBL,P-VERBN >TMP
ZERO? P-OFLAG /?ELS41
GET TMP,0
PRINTB STACK
JUMP ?CND39
?ELS41: GETB TMP,2 >?TMP1
GETB TMP,3
CALL WORD-PRINT,?TMP1,STACK
?CND39: PRINTI "!"
CRLF
SET 'V,0
JUMP ?CND27
?ELS31:
?PRG49: IGRTR? 'CNT,NUM \?ELS53
JUMP ?REP50
?ELS53: ZERO? PTBL /?ELS58
GET P-PRSO,CNT >OBJ1
JUMP ?CND56
?ELS58: GET P-PRSI,CNT >OBJ1
?CND56: GRTR? NUM,1 \?CND62
PRINTD OBJ1
PRINTI ": "
?CND62: ZERO? PTBL /?ELS71
PUSH OBJ1
JUMP ?CND67
?ELS71: PUSH OBJ
?CND67: SET 'PRSO,STACK
ZERO? PTBL /?ELS79
PUSH OBJ
JUMP ?CND75
?ELS79: PUSH OBJ1
?CND75: SET 'PRSI,STACK
CALL PERFORM,PRSA,PRSO,PRSI >V
EQUAL? V,M-FATAL \?PRG49
?REP50: SET 'P-IT-OBJECT,OBJ1
SET 'P-IT-LOC,HERE
?CND27: EQUAL? PRSA,V?AGAIN /?CND86
SET 'L-PRSA,PRSA
SET 'L-PRSO,PRSO
SET 'L-PRSI,PRSI
?CND86: INC 'MOVES
EQUAL? V,M-FATAL \?CND3
SET 'P-CONT,0
JUMP ?CND3
?ELS5: SET 'P-CONT,0
?CND3: CALL CLOCKER >V
JUMP ?PRG1
.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
EQUAL? P-IT-LOC,HERE /?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
SET 'PRSI,I
GETP WINNER,P?ACTION
CALL STACK >V
ZERO? V /?ELS18
JUMP ?CND16
?ELS18: LOC WINNER
GETP STACK,P?ACTION
CALL STACK,M-BEG >V
ZERO? V /?ELS20
JUMP ?CND16
?ELS20: GET PREACTIONS,A
CALL STACK >V
ZERO? V /?ELS22
JUMP ?CND16
?ELS22: ZERO? I /?ELS24
GETP I,P?ACTION
CALL STACK >V
ZERO? V /?ELS24
JUMP ?CND16
?ELS24: ZERO? O /?ELS28
EQUAL? A,V?WALK /?ELS28
GETP O,P?ACTION
CALL STACK >V
ZERO? V /?ELS28
JUMP ?CND16
?ELS28: GET ACTIONS,A
CALL STACK >V
ZERO? V /?CND16
?CND16: EQUAL? V,M-FATAL /?CND33
LOC WINNER
GETP STACK,P?ACTION
CALL STACK,M-END >V
?CND33: SET 'PRSA,OA
SET 'PRSO,OO
SET 'PRSI,OI
RETURN V
.ENDI