-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathSECOND
More file actions
262 lines (262 loc) · 4.38 KB
/
SECOND
File metadata and controls
262 lines (262 loc) · 4.38 KB
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
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
10PROCheader("dliteral")
20dliteral%=P%
30FORo%=0TO3STEP3
40P%=dliteral%
50[:OPTo%
60JSRstate%
70JSRfetch%
80JSRbranch%
90BEQenddlit
100JSRswap%
110JSRliteral%
120JSRliteral%
130.enddlit
140RTS
150]:NEXTo%
160PROCsetbit(6,last%)
170PROCheader("$message")
180smess%=P%
190FORo%=0TO3STEP3
200P%=smess%
210[:OPTo%
220JSRdup%
230OPT FNliteral(&00)
240JSRequal%
250JSRbranch%
260BEQm1
270JSRdrop%
280JSRslit%
290EQUB &09
300EQUS "OS error."
310RTS
320.m1
330JSRdup%
340OPT FNliteral(estko%)
350JSRequal%
360JSRbranch%
370BEQm2
380JSRdrop%
390JSRslit%
400EQUB &19
410EQUS "Parameter stack overflow."
420RTS
430.m2
440JSRdup%
450OPT FNliteral(estku%)
460JSRequal%
470JSRbranch%
480BEQm3
490JSRdrop%
500JSRslit%
510EQUB &1A
520EQUS "Parameter stack underflow."
530RTS
540.m3
550JSRdup%
560OPT FNliteral(eastko%)
570JSRequal%
580JSRbranch%
590BEQm4
600JSRdrop%
610JSRslit%
620EQUB &19
630EQUS "Auxiliary stack overflow."
640RTS
650.m4
660JSRdup%
670OPT FNliteral(eastku%)
680JSRequal%
690JSRbranch%
700BEQm5
710JSRdrop%
720JSRslit%
730EQUB &1A
740EQUS "Auxiliary stack underflow."
750RTS
760.m5
770JSRdup%
780OPT FNliteral(emislex%)
790JSRequal%
800JSRbranch%
810BEQm6
820JSRdrop%
830JSRslit%
840EQUB &13
850EQUS "Mis-matched lexeme."
860RTS
870.m6
880JSRdup%
890OPT FNliteral(edzero%)
900JSRequal%
910JSRbranch%
920BEQm7
930JSRdrop%
940JSRslit%
950EQUB &14
960EQUS "Can't divid by zero."
970RTS
980.m7
990JSRdup%
1000OPT FNliteral(eunique%)
1010JSRequal%
1020JSRbranch%
1030BEQm8
1040JSRdrop%
1050JSRslit%
1060EQUB &0D
1070EQUS "isn't unique."
1080RTS
1090.m8
1100JSRdup%
1110OPT FNliteral(enomem%)
1120JSRequal%
1130JSRbranch%
1140BEQm9
1150JSRdrop%
1160JSRslit%
1170EQUB &10
1180EQUS "Dictionary full."
1190RTS
1200.m9
1210JSRdup%
1220OPT FNliteral(efinish%)
1230JSRequal%
1240JSRbranch%
1250BEQm10
1260JSRdrop%
1270JSRslit%
1280EQUB &18
1290EQUS "Definition not finished."
1300RTS
1310.m10
1320JSRdup%
1330OPT FNliteral(eexec%)
1340JSRequal%
1350JSRbranch%
1360BEQm11
1370JSRdrop%
1380JSRslit%
1390EQUB &0F
1400EQUS "Execution only."
1410RTS
1420.m11
1430JSRdup%
1440OPT FNliteral(ecomp%)
1450JSRequal%
1460JSRbranch%
1470BEQm12
1480JSRdrop%
1490JSRslit%
1500EQUB &11
1510EQUS "Compilation only."
1520RTS
1530.m12
1540JSRdup%
1550OPT FNliteral(eload%)
1560JSRequal%
1570JSRbranch%
1580BEQm13
1590JSRdrop%
1600JSRslit%
1610EQUB &16
1620EQUS "Use only when loading."
1630RTS
1640.m13
1650JSRdup%
1660OPT FNliteral(epair%)
1670JSRequal%
1680JSRbranch%
1690BEQm14
1700JSRdrop%
1710JSRslit%
1720EQUB &18
1730EQUS "Conditionals not paired."
1740RTS
1750.m14
1760JSRdup%
1770OPT FNliteral(enul%)
1780JSRequal%
1790JSRbranch%
1800BEQm15
1810JSRdrop%
1820JSRslit%
1830EQUB &1B
1840EQUS "Can't redefine end-of-line."
1850RTS
1860.m15
1870JSRdup%
1880OPT FNliteral(efence%)
1890JSRequal%
1900JSRbranch%
1910BEQm16
1920JSRdrop%
1930JSRslit%
1940EQUB &18
1950EQUS "In protected vocabulary."
1960RTS
1970.m16
1980JSRdup%
1990OPT FNliteral(efound%)
2000JSRequal%
2010JSRbranch%
2020BEQm17
2030JSRdrop%
2040JSRslit%
2050EQUB &0F
2060EQUS "File not found."
2070RTS
2080.m17
2090JSRdrop%
2100JSRslit%
2110EQUB &17
2120EQUS "Unknown message number."
2130RTS
2140]:NEXTo%
2150PROCheader("message")
2160mess%=P%
2170FORo%=0TO3STEP3
2180P%=mess%
2190[:OPTo%
2200JSRwarning%
2210JSRfetch%
2220JSRbranch%
2230BNEdismess
2240JSRdrop%
2250RTS
2260.dismess
2270JSRsmess%
2280JSRcount%
2290JSRtype%
2300RTS
2310]:NEXTo%
2320OSCLI("EXEC E.SECOND")
2330END
2340DEFPROCheader(name$)
2350PRINT:PRINT
2360PRINT" *** ";~P%;" nfa '";name$;"'"
2370LETxhere%=P%
2380LETspan%=LEN(name$)
2390?P%=span%
2400PROCsetbit(7,P%)
2410LETP%=P%+1
2420IFspan% > length%THENspan%=length%
2430FORi%=1TOspan%
2440?P%=ASC(MID$(name$,i%,1))
2450LETP%=P%+1
2460NEXTi%
2470PRINT" *** ";~P%;" lfa (";~last%;")"
2480PROCsetbit(7,P%-1)
2490PROCpoke(last%,P%)
2500LETP%=P%+2
2510LETlast%=xhere%
2520LETlabel%=label%+1
2530PRINT:PRINT
2540ENDPROC
2550DEFPROCsetbit(bit%,addr%)
2560?addr%=?addr%OR(2^bit%)
2570ENDPROC
2580DEFPROCpoke(val%,addr%)
2590?addr%=val%MOD256
2600?(addr%+1)=val%DIV256
2610ENDPROC
2620DEFFNliteral(value%):[:OPTo%:JSRlit%:]:PROCpoke(value%,P%):P%=P%+2:=o%