Commit | Line | Data |
---|---|---|
241d5d57 | 1 | |
cc9dbd92 | 2 | REM DO_FUNCTION(F, AR) |
241d5d57 JM |
3 | DO_FUNCTION: |
4 | REM Get the function number | |
cc9dbd92 | 5 | FF=Z%(F,1) |
241d5d57 JM |
6 | |
7 | REM Get argument values | |
cc9dbd92 JM |
8 | R=AR+1:GOSUB DEREF_R:AA=R |
9 | R=Z%(AR,1)+1:GOSUB DEREF_R:AB=R | |
241d5d57 JM |
10 | |
11 | REM Switch on the function number | |
cc9dbd92 JM |
12 | IF FF>=61 THEN ER=-1:ER$="unknown function"+STR$(FF):RETURN |
13 | IF FF>=53 THEN DO_53 | |
14 | IF FF>=39 THEN DO_39 | |
15 | IF FF>=27 THEN DO_27 | |
16 | IF FF>=18 THEN DO_18 | |
17 | IF FF>=11 THEN DO_11 | |
18 | ||
19 | ON FF GOTO DO_EQUAL_Q,DO_THROW,DO_NIL_Q,DO_TRUE_Q,DO_FALSE_Q,DO_STRING_Q,DO_SYMBOL,DO_SYMBOL_Q | |
60ef223c | 20 | DO_11: |
cc9dbd92 | 21 | ON FF-10 GOTO DO_PR_STR,DO_STR,DO_PRN,DO_PRINTLN,DO_READ_STRING,DO_READLINE,DO_SLURP |
60ef223c | 22 | DO_18: |
cc9dbd92 | 23 | ON FF-17 GOTO DO_LT,DO_LTE,DO_GT,DO_GTE,DO_ADD,DO_SUB,DO_MULT,DO_DIV,DO_TIME_MS |
60ef223c | 24 | DO_27: |
cc9dbd92 | 25 | ON FF-26 GOTO DO_LIST,DO_LIST_Q,DO_VECTOR,DO_VECTOR_Q,DO_HASH_MAP,DO_MAP_Q |
60ef223c | 26 | DO_39: |
cc9dbd92 | 27 | ON FF-38 GOTO DO_SEQUENTIAL_Q,DO_CONS,DO_CONCAT,DO_NTH,DO_FIRST,DO_REST,DO_EMPTY_Q,DO_COUNT,DO_APPLY,DO_MAP |
60ef223c | 28 | DO_53: |
cc9dbd92 | 29 | ON FF-52 GOTO DO_ATOM,DO_ATOM_Q,DO_DEREF,DO_RESET_BANG,DO_SWAP_BANG,DO_PR_MEMORY,DO_PR_MEMORY_SUMMARY,DO_EVAL |
241d5d57 JM |
30 | |
31 | DO_EQUAL_Q: | |
cc9dbd92 JM |
32 | A=AA:B=AB:GOSUB EQUAL_Q |
33 | R=R+1 | |
241d5d57 | 34 | RETURN |
5e5ca0d4 | 35 | DO_THROW: |
cc9dbd92 JM |
36 | ER=AA |
37 | Z%(ER,0)=Z%(ER,0)+16 | |
38 | R=0 | |
5e5ca0d4 JM |
39 | RETURN |
40 | DO_NIL_Q: | |
cc9dbd92 JM |
41 | R=1 |
42 | IF AA=0 THEN R=2 | |
5e5ca0d4 JM |
43 | RETURN |
44 | DO_TRUE_Q: | |
cc9dbd92 JM |
45 | R=1 |
46 | IF AA=2 THEN R=2 | |
5e5ca0d4 JM |
47 | RETURN |
48 | DO_FALSE_Q: | |
cc9dbd92 JM |
49 | R=1 |
50 | IF AA=1 THEN R=2 | |
5e5ca0d4 JM |
51 | RETURN |
52 | DO_STRING_Q: | |
cc9dbd92 JM |
53 | R=1 |
54 | IF (Z%(AA,0)AND15)=4 THEN R=2 | |
5e5ca0d4 JM |
55 | RETURN |
56 | DO_SYMBOL: | |
cc9dbd92 | 57 | R=0 |
5e5ca0d4 JM |
58 | RETURN |
59 | DO_SYMBOL_Q: | |
cc9dbd92 JM |
60 | R=1 |
61 | IF (Z%(AA,0)AND15)=5 THEN R=2 | |
5e5ca0d4 | 62 | RETURN |
241d5d57 JM |
63 | |
64 | DO_PR_STR: | |
cc9dbd92 JM |
65 | AZ=AR:PR=1:SE$=" ":GOSUB PR_STR_SEQ |
66 | AS$=R$:T=4+16:GOSUB STRING | |
241d5d57 JM |
67 | RETURN |
68 | DO_STR: | |
cc9dbd92 JM |
69 | AZ=AR:PR=0:SE$="":GOSUB PR_STR_SEQ |
70 | AS$=R$:T=4+16:GOSUB STRING | |
241d5d57 JM |
71 | RETURN |
72 | DO_PRN: | |
cc9dbd92 | 73 | AZ=AR:PR=1:SE$=" ":GOSUB PR_STR_SEQ |
241d5d57 | 74 | PRINT R$ |
cc9dbd92 | 75 | R=0 |
241d5d57 JM |
76 | RETURN |
77 | DO_PRINTLN: | |
cc9dbd92 | 78 | AZ=AR:PR=0:SE$=" ":GOSUB PR_STR_SEQ |
241d5d57 | 79 | PRINT R$ |
cc9dbd92 | 80 | R=0 |
241d5d57 | 81 | RETURN |
85d70fb7 | 82 | DO_READ_STRING: |
cc9dbd92 | 83 | A$=S$(Z%(AA,1)) |
85d70fb7 JM |
84 | GOSUB READ_STR |
85 | RETURN | |
30a3d828 | 86 | DO_READLINE: |
cc9dbd92 JM |
87 | A$=S$(Z%(AA,1)):GOSUB READLINE |
88 | IF EOF=1 THEN EOF=0:R=0:RETURN | |
89 | AS$=R$:T=4:GOSUB STRING | |
90 | Z%(R,0)=Z%(R,0)+16 | |
30a3d828 | 91 | RETURN |
85d70fb7 JM |
92 | DO_SLURP: |
93 | R$="" | |
cc9dbd92 JM |
94 | REM OPEN 1,8,2,S$(Z%(AA,1))+",SEQ,R" |
95 | REM OPEN 1,8,2,S$(Z%(AA,1)) | |
96 | OPEN 1,8,0,S$(Z%(AA,1)) | |
85d70fb7 JM |
97 | DO_SLURP_LOOP: |
98 | A$="" | |
99 | GET#1,A$ | |
100 | IF ASC(A$)=10 THEN R$=R$+CHR$(13) | |
101 | IF (ASC(A$)<>10) AND (A$<>"") THEN R$=R$+A$ | |
102 | IF (ST AND 64) THEN GOTO DO_SLURP_DONE | |
cc9dbd92 | 103 | IF (ST AND 255) THEN ER=-1:ER$="File read error "+STR$(ST):RETURN |
85d70fb7 JM |
104 | GOTO DO_SLURP_LOOP |
105 | DO_SLURP_DONE: | |
106 | CLOSE 1 | |
cc9dbd92 | 107 | AS$=R$:T=4+16:GOSUB STRING |
85d70fb7 | 108 | RETURN |
241d5d57 JM |
109 | |
110 | DO_LT: | |
cc9dbd92 JM |
111 | R=1 |
112 | IF Z%(AA,1)<Z%(AB,1) THEN R=2 | |
241d5d57 JM |
113 | RETURN |
114 | DO_LTE: | |
cc9dbd92 JM |
115 | R=1 |
116 | IF Z%(AA,1)<=Z%(AB,1) THEN R=2 | |
241d5d57 JM |
117 | RETURN |
118 | DO_GT: | |
cc9dbd92 JM |
119 | R=1 |
120 | IF Z%(AA,1)>Z%(AB,1) THEN R=2 | |
241d5d57 JM |
121 | RETURN |
122 | DO_GTE: | |
cc9dbd92 JM |
123 | R=1 |
124 | IF Z%(AA,1)>=Z%(AB,1) THEN R=2 | |
241d5d57 JM |
125 | RETURN |
126 | ||
127 | DO_ADD: | |
cc9dbd92 JM |
128 | SZ=1:GOSUB ALLOC |
129 | Z%(R,0)=2+16 | |
130 | Z%(R,1)=Z%(AA,1)+Z%(AB,1) | |
241d5d57 JM |
131 | RETURN |
132 | DO_SUB: | |
cc9dbd92 JM |
133 | SZ=1:GOSUB ALLOC |
134 | Z%(R,0)=2+16 | |
135 | Z%(R,1)=Z%(AA,1)-Z%(AB,1) | |
241d5d57 JM |
136 | RETURN |
137 | DO_MULT: | |
cc9dbd92 JM |
138 | SZ=1:GOSUB ALLOC |
139 | Z%(R,0)=2+16 | |
140 | Z%(R,1)=Z%(AA,1)*Z%(AB,1) | |
241d5d57 JM |
141 | RETURN |
142 | DO_DIV: | |
cc9dbd92 JM |
143 | SZ=1:GOSUB ALLOC |
144 | Z%(R,0)=2+16 | |
145 | Z%(R,1)=Z%(AA,1)/Z%(AB,1) | |
241d5d57 | 146 | RETURN |
60ef223c | 147 | DO_TIME_MS: |
cc9dbd92 | 148 | R=0 |
60ef223c | 149 | RETURN |
241d5d57 JM |
150 | |
151 | DO_LIST: | |
cc9dbd92 JM |
152 | R=AR |
153 | Z%(R,0)=Z%(R,0)+16 | |
241d5d57 JM |
154 | RETURN |
155 | DO_LIST_Q: | |
cc9dbd92 JM |
156 | A=AA:GOSUB LIST_Q |
157 | R=R+1: REM map to mal false/true | |
241d5d57 | 158 | RETURN |
5e5ca0d4 | 159 | DO_VECTOR: |
cc9dbd92 | 160 | R=0 |
5e5ca0d4 JM |
161 | RETURN |
162 | DO_VECTOR_Q: | |
cc9dbd92 JM |
163 | R=1 |
164 | IF (Z%(AA,0)AND15)=7 THEN R=2 | |
5e5ca0d4 JM |
165 | RETURN |
166 | DO_HASH_MAP: | |
cc9dbd92 | 167 | R=0 |
5e5ca0d4 JM |
168 | RETURN |
169 | DO_MAP_Q: | |
cc9dbd92 JM |
170 | R=1 |
171 | IF (Z%(AA,0)AND15)=8 THEN R=2 | |
5e5ca0d4 | 172 | RETURN |
241d5d57 | 173 | |
5e5ca0d4 | 174 | DO_SEQUENTIAL_Q: |
cc9dbd92 JM |
175 | R=1 |
176 | IF (Z%(AA,0)AND15)=6 OR (Z%(AA,0)AND15)=7 THEN R=2 | |
5e5ca0d4 | 177 | RETURN |
85d70fb7 | 178 | DO_CONS: |
cc9dbd92 | 179 | A=AA:B=AB:GOSUB CONS |
85d70fb7 | 180 | RETURN |
9e8f5211 JM |
181 | DO_CONCAT: |
182 | REM if empty arguments, return empty list | |
cc9dbd92 | 183 | IF Z%(AR,1)=0 THEN R=3:Z%(R,0)=Z%(R,0)+16:RETURN |
9e8f5211 JM |
184 | |
185 | REM single argument | |
cc9dbd92 | 186 | IF Z%(Z%(AR,1),1)<>0 THEN GOTO DO_CONCAT_MULT |
9e8f5211 | 187 | REM if single argument and it's a list, return it |
cc9dbd92 | 188 | IF (Z%(AA,0)AND15)=6 THEN R=AA:Z%(R,0)=Z%(R,0)+16:RETURN |
9e8f5211 | 189 | REM otherwise, copy first element to turn it into a list |
cc9dbd92 JM |
190 | B=AA+1:GOSUB DEREF_B: REM value to copy |
191 | SZ=2:GOSUB ALLOC | |
192 | Z%(R,0)=6+16:Z%(R,1)=Z%(AA,1) | |
193 | Z%(R+1,0)=14:Z%(R+1,1)=B | |
9e8f5211 | 194 | REM inc ref count of trailing list part and of copied value |
cc9dbd92 JM |
195 | Z%(Z%(AA,1),0)=Z%(Z%(AA,1),0)+16 |
196 | Z%(B,0)=Z%(B,0)+16 | |
9e8f5211 JM |
197 | RETURN |
198 | ||
199 | REM multiple arguments | |
200 | DO_CONCAT_MULT: | |
cc9dbd92 | 201 | CZ%=X: REM save current stack position |
9e8f5211 JM |
202 | REM push arguments onto the stack |
203 | DO_CONCAT_STACK: | |
cc9dbd92 JM |
204 | R=AR+1:GOSUB DEREF_R |
205 | X=X+1:S%(X)=R: REM push sequence | |
206 | AR=Z%(AR,1) | |
207 | IF Z%(AR,1)<>0 THEN GOTO DO_CONCAT_STACK | |
9e8f5211 JM |
208 | |
209 | REM pop last argument as our seq to prepend to | |
cc9dbd92 | 210 | AB=S%(X):X=X-1 |
9e8f5211 | 211 | REM last arg/seq is not copied so we need to inc ref to it |
cc9dbd92 | 212 | Z%(AB,0)=Z%(AB,0)+16 |
9e8f5211 | 213 | DO_CONCAT_LOOP: |
cc9dbd92 JM |
214 | IF X=CZ% THEN R=AB:RETURN |
215 | AA=S%(X):X=X-1: REM pop off next seq to prepend | |
216 | IF Z%(AA,1)=0 THEN GOTO DO_CONCAT_LOOP: REM skip empty seqs | |
217 | A=AA:B=0:C=-1:GOSUB SLICE | |
9e8f5211 JM |
218 | |
219 | REM release the terminator of new list (we skip over it) | |
cc9dbd92 | 220 | AY=Z%(R6,1):GOSUB RELEASE |
9e8f5211 JM |
221 | REM attach new list element before terminator (last actual |
222 | REM element to the next sequence | |
cc9dbd92 | 223 | Z%(R6,1)=AB |
9e8f5211 | 224 | |
cc9dbd92 | 225 | AB=R |
9e8f5211 | 226 | GOTO DO_CONCAT_LOOP |
60ef223c | 227 | DO_NTH: |
cc9dbd92 JM |
228 | B=Z%(AB,1) |
229 | A=AA:GOSUB COUNT | |
230 | IF R<=B THEN R=0:ER=-1:ER$="nth: index out of range":RETURN | |
70f29a2b | 231 | DO_NTH_LOOP: |
cc9dbd92 JM |
232 | IF B=0 THEN GOTO DO_NTH_DONE |
233 | B=B-1 | |
234 | AA=Z%(AA,1) | |
70f29a2b JM |
235 | GOTO DO_NTH_LOOP |
236 | DO_NTH_DONE: | |
cc9dbd92 JM |
237 | R=Z%(AA+1,1) |
238 | Z%(R,0)=Z%(R,0)+16 | |
70f29a2b | 239 | RETURN |
85d70fb7 | 240 | DO_FIRST: |
cc9dbd92 JM |
241 | IF Z%(AA,1)=0 THEN R=0 |
242 | IF Z%(AA,1)<>0 THEN R=AA+1:GOSUB DEREF_R | |
243 | IF R<>0 THEN Z%(R,0)=Z%(R,0)+16 | |
85d70fb7 JM |
244 | RETURN |
245 | DO_REST: | |
cc9dbd92 JM |
246 | IF Z%(AA,1)=0 THEN R=AA |
247 | IF Z%(AA,1)<>0 THEN R=Z%(AA,1) | |
248 | Z%(R,0)=Z%(R,0)+16 | |
85d70fb7 | 249 | RETURN |
241d5d57 | 250 | DO_EMPTY_Q: |
cc9dbd92 JM |
251 | R=1 |
252 | IF Z%(AA,1)=0 THEN R=2 | |
241d5d57 JM |
253 | RETURN |
254 | DO_COUNT: | |
cc9dbd92 JM |
255 | A=AA:GOSUB COUNT:R4=R |
256 | SZ=1:GOSUB ALLOC | |
257 | Z%(R,0)=2+16 | |
258 | Z%(R,1)=R4 | |
241d5d57 | 259 | RETURN |
5e5ca0d4 | 260 | DO_APPLY: |
cc9dbd92 JM |
261 | F=AA |
262 | AR=Z%(AR,1) | |
263 | A=AR:GOSUB COUNT:R4=R | |
5e5ca0d4 JM |
264 | |
265 | REM no intermediate args, just call APPLY directly | |
cc9dbd92 | 266 | IF R4<=1 THEN AR=Z%(AR+1,1):GOSUB APPLY:RETURN |
5e5ca0d4 JM |
267 | |
268 | REM prepend intermediate args to final args element | |
cc9dbd92 | 269 | A=AR:B=0:C=R4-1:GOSUB SLICE |
5e5ca0d4 | 270 | REM release the terminator of new list (we skip over it) |
cc9dbd92 | 271 | AY=Z%(R6,1):GOSUB RELEASE |
5e5ca0d4 | 272 | REM attach end of slice to final args element |
cc9dbd92 JM |
273 | Z%(R6,1)=Z%(A+1,1) |
274 | Z%(Z%(A+1,1),0)=Z%(Z%(A+1,1),0)+16 | |
5e5ca0d4 | 275 | |
cc9dbd92 JM |
276 | X=X+1:S%(X)=R: REM push/save new args for release |
277 | AR=R:GOSUB APPLY | |
278 | AY=S%(X):X=X-1:GOSUB RELEASE: REM pop/release new args | |
5e5ca0d4 JM |
279 | RETURN |
280 | DO_MAP: | |
cc9dbd92 | 281 | F=AA |
5e5ca0d4 JM |
282 | |
283 | REM first result list element | |
cc9dbd92 | 284 | SZ=2:GOSUB ALLOC |
5e5ca0d4 | 285 | |
cc9dbd92 JM |
286 | REM push future return val, prior entry, F and AB |
287 | X=X+4:S%(X-3)=R:S%(X-2)=0:S%(X-1)=F:S%(X)=AB | |
5e5ca0d4 JM |
288 | |
289 | DO_MAP_LOOP: | |
290 | REM set base values | |
cc9dbd92 JM |
291 | Z%(R,0)=6+16:Z%(R,1)=0 |
292 | Z%(R+1,0)=14:Z%(R+1,1)=0 | |
5e5ca0d4 JM |
293 | |
294 | REM set previous to current if not the first element | |
cc9dbd92 | 295 | IF S%(X-2)<>0 THEN Z%(S%(X-2),1)=R |
5e5ca0d4 | 296 | REM update previous reference to current |
cc9dbd92 | 297 | S%(X-2)=R |
5e5ca0d4 | 298 | |
cc9dbd92 | 299 | IF Z%(AB,1)=0 THEN GOTO DO_MAP_DONE |
5e5ca0d4 JM |
300 | |
301 | REM create argument list for apply call | |
cc9dbd92 JM |
302 | SZ=2:GOSUB ALLOC |
303 | Z%(R,0)=6+16:Z%(R,1)=0 | |
304 | Z%(R+1,0)=14:Z%(R+1,1)=0 | |
305 | AR=R: REM save end of list temporarily | |
306 | SZ=2:GOSUB ALLOC | |
307 | Z%(R,0)=6+16:Z%(R,1)=AR | |
5e5ca0d4 | 308 | REM inc ref cnt of referred argument |
cc9dbd92 JM |
309 | A=Z%(AB+1,1): Z%(A,0)=Z%(A,0)+16 |
310 | Z%(R+1,0)=14:Z%(R+1,1)=A | |
5e5ca0d4 JM |
311 | |
312 | REM push argument list | |
cc9dbd92 | 313 | X=X+1:S%(X)=R |
5e5ca0d4 | 314 | |
cc9dbd92 | 315 | AR=R:GOSUB APPLY |
5e5ca0d4 JM |
316 | |
317 | REM pop apply args are release them | |
cc9dbd92 | 318 | AY=S%(X):X=X-1:GOSUB RELEASE |
5e5ca0d4 JM |
319 | |
320 | REM set the result value | |
cc9dbd92 | 321 | Z%(S%(X-2)+1,1)=R |
5e5ca0d4 | 322 | |
cc9dbd92 JM |
323 | REM restore F |
324 | F=S%(X-1) | |
5e5ca0d4 | 325 | |
cc9dbd92 JM |
326 | REM update AB to next source element |
327 | S%(X)=Z%(S%(X),1) | |
328 | AB=S%(X) | |
5e5ca0d4 JM |
329 | |
330 | REM allocate next element | |
cc9dbd92 | 331 | SZ=2:GOSUB ALLOC |
5e5ca0d4 JM |
332 | |
333 | GOTO DO_MAP_LOOP | |
334 | ||
335 | DO_MAP_DONE: | |
336 | REM get return val | |
cc9dbd92 | 337 | R=S%(X-3) |
5e5ca0d4 | 338 | REM pop everything off stack |
cc9dbd92 | 339 | X=X-4 |
5e5ca0d4 | 340 | RETURN |
241d5d57 | 341 | |
85d70fb7 | 342 | DO_ATOM: |
cc9dbd92 JM |
343 | SZ=1:GOSUB ALLOC |
344 | Z%(AA,0)=Z%(AA,0)+16: REM inc ref cnt of contained value | |
345 | Z%(R,0)=12+16 | |
346 | Z%(R,1)=AA | |
85d70fb7 JM |
347 | RETURN |
348 | DO_ATOM_Q: | |
cc9dbd92 JM |
349 | R=1 |
350 | IF (Z%(AA,0)AND15)=12 THEN R=2 | |
85d70fb7 JM |
351 | RETURN |
352 | DO_DEREF: | |
cc9dbd92 JM |
353 | R=Z%(AA,1):GOSUB DEREF_R |
354 | Z%(R,0)=Z%(R,0)+16 | |
85d70fb7 JM |
355 | RETURN |
356 | DO_RESET_BANG: | |
cc9dbd92 | 357 | R=AB |
85d70fb7 | 358 | REM release current value |
cc9dbd92 | 359 | AY=Z%(AA,1):GOSUB RELEASE |
85d70fb7 | 360 | REM inc ref by 2 for atom ownership and since we are returning it |
cc9dbd92 | 361 | Z%(R,0)=Z%(R,0)+32 |
85d70fb7 | 362 | REM update value |
cc9dbd92 | 363 | Z%(AA,1)=R |
85d70fb7 JM |
364 | RETURN |
365 | DO_SWAP_BANG: | |
cc9dbd92 | 366 | F=AB |
85d70fb7 JM |
367 | |
368 | REM add atom to front of the args list | |
cc9dbd92 JM |
369 | A=Z%(AA,1):B=Z%(Z%(AR,1),1):GOSUB CONS |
370 | AR=R | |
85d70fb7 JM |
371 | |
372 | REM push args for release after | |
cc9dbd92 | 373 | X=X+1:S%(X)=AR |
85d70fb7 | 374 | |
70f29a2b | 375 | REM push atom |
cc9dbd92 | 376 | X=X+1:S%(X)=AA |
85d70fb7 | 377 | |
70f29a2b | 378 | GOSUB APPLY |
85d70fb7 | 379 | |
70f29a2b | 380 | REM pop atom |
cc9dbd92 | 381 | AA=S%(X):X=X-1 |
85d70fb7 | 382 | |
70f29a2b | 383 | REM pop and release args |
cc9dbd92 | 384 | AY=S%(X):X=X-1:GOSUB RELEASE |
85d70fb7 | 385 | |
70f29a2b | 386 | REM use reset to update the value |
cc9dbd92 | 387 | AB=R:GOSUB DO_RESET_BANG |
85d70fb7 | 388 | |
70f29a2b | 389 | REM but decrease ref cnt of return by 1 (not sure why) |
cc9dbd92 | 390 | AY=R:GOSUB RELEASE |
85d70fb7 | 391 | |
70f29a2b | 392 | RETURN |
85d70fb7 | 393 | |
241d5d57 | 394 | DO_PR_MEMORY: |
60ef223c | 395 | P1%=ZT%:P2%=-1:GOSUB PR_MEMORY |
241d5d57 | 396 | RETURN |
241d5d57 JM |
397 | DO_PR_MEMORY_SUMMARY: |
398 | GOSUB PR_MEMORY_SUMMARY | |
399 | RETURN | |
400 | ||
85d70fb7 | 401 | DO_EVAL: |
cc9dbd92 | 402 | A=AA:E=RE%:GOSUB EVAL |
85d70fb7 JM |
403 | RETURN |
404 | ||
241d5d57 JM |
405 | INIT_CORE_SET_FUNCTION: |
406 | GOSUB NATIVE_FUNCTION | |
cc9dbd92 | 407 | V=R:GOSUB ENV_SET_S |
241d5d57 JM |
408 | RETURN |
409 | ||
cc9dbd92 | 410 | REM INIT_CORE_NS(E) |
241d5d57 JM |
411 | INIT_CORE_NS: |
412 | REM create the environment mapping | |
413 | REM must match DO_FUNCTION mappings | |
414 | ||
cc9dbd92 JM |
415 | K$="=":A=1:GOSUB INIT_CORE_SET_FUNCTION |
416 | K$="throw":A=2:GOSUB INIT_CORE_SET_FUNCTION | |
417 | K$="nil?":A=3:GOSUB INIT_CORE_SET_FUNCTION | |
418 | K$="true?":A=4:GOSUB INIT_CORE_SET_FUNCTION | |
419 | K$="false?":A=5:GOSUB INIT_CORE_SET_FUNCTION | |
420 | K$="string?":A=6:GOSUB INIT_CORE_SET_FUNCTION | |
421 | K$="symbol":A=7:GOSUB INIT_CORE_SET_FUNCTION | |
422 | K$="symbol?":A=8:GOSUB INIT_CORE_SET_FUNCTION | |
423 | ||
424 | K$="pr-str":A=11:GOSUB INIT_CORE_SET_FUNCTION | |
425 | K$="str":A=12:GOSUB INIT_CORE_SET_FUNCTION | |
426 | K$="prn":A=13:GOSUB INIT_CORE_SET_FUNCTION | |
427 | K$="println":A=14:GOSUB INIT_CORE_SET_FUNCTION | |
428 | K$="read-string":A=15:GOSUB INIT_CORE_SET_FUNCTION | |
429 | K$="readline":A=16:GOSUB INIT_CORE_SET_FUNCTION | |
430 | K$="slurp":A=17:GOSUB INIT_CORE_SET_FUNCTION | |
431 | ||
432 | K$="<":A=18:GOSUB INIT_CORE_SET_FUNCTION | |
433 | K$="<=":A=19:GOSUB INIT_CORE_SET_FUNCTION | |
434 | K$=">":A=20:GOSUB INIT_CORE_SET_FUNCTION | |
435 | K$=">=":A=21:GOSUB INIT_CORE_SET_FUNCTION | |
436 | K$="+":A=22:GOSUB INIT_CORE_SET_FUNCTION | |
437 | K$="-":A=23:GOSUB INIT_CORE_SET_FUNCTION | |
438 | K$="*":A=24:GOSUB INIT_CORE_SET_FUNCTION | |
439 | K$="/":A=25:GOSUB INIT_CORE_SET_FUNCTION | |
440 | K$="time-ms":A=26:GOSUB INIT_CORE_SET_FUNCTION | |
441 | ||
442 | K$="list":A=27:GOSUB INIT_CORE_SET_FUNCTION | |
443 | K$="list?":A=28:GOSUB INIT_CORE_SET_FUNCTION | |
444 | K$="vector":A=29:GOSUB INIT_CORE_SET_FUNCTION | |
445 | K$="vector?":A=30:GOSUB INIT_CORE_SET_FUNCTION | |
446 | K$="hash-map":A=31:GOSUB INIT_CORE_SET_FUNCTION | |
447 | K$="map?":A=32:GOSUB INIT_CORE_SET_FUNCTION | |
448 | ||
449 | K$="sequential?":A=39:GOSUB INIT_CORE_SET_FUNCTION | |
450 | K$="cons":A=40:GOSUB INIT_CORE_SET_FUNCTION | |
451 | K$="concat":A=41:GOSUB INIT_CORE_SET_FUNCTION | |
452 | K$="nth":A=42:GOSUB INIT_CORE_SET_FUNCTION | |
453 | K$="first":A=43:GOSUB INIT_CORE_SET_FUNCTION | |
454 | K$="rest":A=44:GOSUB INIT_CORE_SET_FUNCTION | |
455 | K$="empty?":A=45:GOSUB INIT_CORE_SET_FUNCTION | |
456 | K$="count":A=46:GOSUB INIT_CORE_SET_FUNCTION | |
457 | K$="apply":A=47:GOSUB INIT_CORE_SET_FUNCTION | |
458 | K$="map":A=48:GOSUB INIT_CORE_SET_FUNCTION | |
459 | ||
460 | K$="atom":A=53:GOSUB INIT_CORE_SET_FUNCTION | |
461 | K$="atom?":A=54:GOSUB INIT_CORE_SET_FUNCTION | |
462 | K$="deref":A=55:GOSUB INIT_CORE_SET_FUNCTION | |
463 | K$="reset!":A=56:GOSUB INIT_CORE_SET_FUNCTION | |
464 | K$="swap!":A=57:GOSUB INIT_CORE_SET_FUNCTION | |
465 | ||
466 | K$="pr-memory":A=58:GOSUB INIT_CORE_SET_FUNCTION | |
467 | K$="pr-memory-summary":A=59:GOSUB INIT_CORE_SET_FUNCTION | |
468 | K$="eval":A=60:GOSUB INIT_CORE_SET_FUNCTION | |
241d5d57 JM |
469 | |
470 | RETURN |