Artifact 4c180c51fac79e67125cc44813b9c5275d17622b:
File langs/basic.rx part of check-in [04d16f1b58] - basic: a couple of bug fixes, additional LET forms by crc on 2011-06-03 14:00:17. [annotate]
0000: 28 20 52 78 42 41 53 49 43 20 7e 7e 7e 7e 7e 7e ( RxBASIC ~~~~~~
0010: 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e ~~~~~~~~~~~~~~~~
0020: 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e ~~~~~~~~~~~~~~~~
0030: 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e ~~~~~~~~~~~~~~~~
0040: 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 20 29 0a ~~~~~~~~~~~~~ ).
0050: 28 20 54 68 69 73 20 69 73 20 61 20 6d 69 6e 69 ( This is a mini
0060: 6d 61 6c 69 73 74 69 63 20 42 41 53 49 43 20 63 malistic BASIC c
0070: 6f 6d 70 69 6c 65 72 2e 20 49 74 27 73 20 77 72 ompiler. It's wr
0080: 69 74 74 65 6e 20 69 6e 20 52 65 74 72 6f 20 61 itten in Retro a
0090: 6e 64 20 72 75 6e 73 20 6f 6e 20 20 20 20 29 0a nd runs on ).
00a0: 28 20 4e 67 61 72 6f 20 76 69 72 74 75 61 6c 20 ( Ngaro virtual
00b0: 6d 61 63 68 69 6e 65 2e 20 20 20 20 20 20 20 20 machine.
00c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
00d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
00e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0a ).
00f0: 28 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 (
0100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0a ).
0140: 28 20 54 68 65 20 69 6d 70 6c 65 6d 65 6e 61 74 ( The implemenat
0150: 69 6f 6e 20 77 61 73 20 66 69 72 73 74 20 64 65 ion was first de
0160: 73 63 72 69 62 65 64 20 6f 6e 20 74 68 65 20 43 scribed on the C
0170: 6f 72 70 73 65 20 62 6c 6f 67 20 69 6e 20 70 6f orpse blog in po
0180: 73 74 20 23 39 38 3a 20 20 20 20 20 20 20 29 0a st #98: ).
0190: 28 20 68 74 74 70 3a 2f 2f 72 78 2d 63 6f 72 65 ( http://rx-core
01a0: 2e 6f 72 67 2f 64 65 76 2f 63 6f 72 70 73 65 2f .org/dev/corpse/
01b0: 61 72 74 69 63 6c 65 2f 39 38 20 20 20 20 20 20 article/98
01c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
01d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0a ).
01e0: 28 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 (
01f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0a ).
0230: 28 20 54 68 65 72 65 20 61 72 65 20 73 74 72 69 ( There are stri
0240: 6e 67 20 76 61 72 69 61 62 6c 65 73 20 61 6e 64 ng variables and
0250: 20 6e 75 6d 65 72 69 63 20 76 61 72 69 61 62 6c numeric variabl
0260: 65 73 2e 20 54 77 65 6e 74 79 20 73 69 78 20 6f es. Twenty six o
0270: 66 20 65 61 63 68 2c 20 6e 61 6d 65 64 20 29 0a f each, named ).
0280: 28 20 41 24 20 2d 20 5a 24 20 66 6f 72 20 74 68 ( A$ - Z$ for th
0290: 65 20 73 74 72 69 6e 67 20 76 61 72 69 61 62 6c e string variabl
02a0: 65 73 20 61 6e 64 20 41 23 20 74 6f 20 5a 23 20 es and A# to Z#
02b0: 66 6f 72 20 74 68 65 20 69 6e 74 65 67 65 72 20 for the integer
02c0: 76 61 72 69 61 62 6c 65 73 2e 20 20 20 20 29 0a variables. ).
02d0: 28 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 (
02e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
02f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0a ).
0320: 28 20 56 61 6c 69 64 20 53 79 6e 74 61 78 20 46 ( Valid Syntax F
0330: 6f 72 6d 73 3a 20 20 20 20 20 20 20 20 20 20 20 orms:
0340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0a ).
0370: 28 20 20 20 30 30 30 30 20 20 43 4c 53 20 20 20 ( 0000 CLS
0380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
03a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
03b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0a ).
03c0: 28 20 20 20 30 30 30 30 20 20 50 52 49 4e 54 20 ( 0000 PRINT
03d0: 3c 76 61 72 69 61 62 6c 65 3e 5b 74 79 70 65 5d <variable>[type]
03e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
03f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0a ).
0410: 28 20 20 20 30 30 30 30 20 20 50 52 49 4e 54 20 ( 0000 PRINT
0420: 22 73 74 72 69 6e 67 22 20 20 20 20 20 20 20 20 "string"
0430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0a ).
0460: 28 20 20 20 30 30 30 30 20 20 49 4e 50 55 54 20 ( 0000 INPUT
0470: 3c 76 61 72 69 61 62 6c 65 3e 5b 74 79 70 65 5d <variable>[type]
0480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
04a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0a ).
04b0: 28 20 20 20 30 30 30 30 20 20 47 4f 54 4f 20 20 ( 0000 GOTO
04c0: 3c 6c 69 6e 65 3e 20 20 20 20 20 20 20 20 20 20 <line>
04d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
04e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
04f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0a ).
0500: 28 20 20 20 30 30 30 30 20 20 4c 45 54 20 20 20 ( 0000 LET
0510: 3c 76 61 72 69 61 62 6c 65 3e 5b 74 79 70 65 5d <variable>[type]
0520: 20 3d 20 76 61 6c 75 65 20 20 20 20 20 20 20 20 = value
0530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0a ).
0550: 28 20 20 20 30 30 30 30 20 20 49 46 20 20 20 20 ( 0000 IF
0560: 3c 76 61 72 69 61 62 6c 65 3e 5b 74 79 70 65 5d <variable>[type]
0570: 20 3c 63 6f 6e 64 3e 20 3c 76 61 72 69 61 62 6c <cond> <variabl
0580: 65 3e 5b 74 79 70 65 5d 20 54 48 45 4e 20 3c 73 e>[type] THEN <s
0590: 74 61 74 65 6d 65 6e 74 3e 20 20 20 20 20 29 0a tatement> ).
05a0: 28 20 20 20 30 30 30 30 20 20 45 4e 44 20 20 20 ( 0000 END
05b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
05c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
05d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
05e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0a ).
05f0: 28 20 20 20 30 30 30 30 20 20 52 55 4e 20 20 20 ( 0000 RUN
0600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0a ).
0640: 28 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 (
0650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0a ).
0690: 28 20 57 69 74 68 20 72 65 67 61 72 64 73 20 74 ( With regards t
06a0: 6f 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 o the implementa
06b0: 74 69 6f 6e 2c 20 6c 69 6e 65 20 6e 75 6d 62 65 tion, line numbe
06c0: 72 73 20 61 72 65 20 72 65 71 75 69 72 65 64 2e rs are required.
06d0: 20 57 65 20 68 61 76 65 20 61 6e 20 20 20 29 0a We have an ).
06e0: 28 20 61 72 72 61 79 20 6f 66 20 34 6b 20 6c 69 ( array of 4k li
06f0: 6e 65 73 2e 20 45 61 63 68 20 65 6c 65 6d 65 6e nes. Each elemen
0700: 74 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 73 75 t points to a su
0710: 62 72 6f 75 74 69 6e 65 2e 20 53 6f 20 52 78 42 broutine. So RxB
0720: 41 53 49 43 20 77 69 6c 6c 20 20 20 20 20 29 0a ASIC will ).
0730: 28 20 63 6f 6d 70 69 6c 65 20 65 61 63 68 20 6c ( compile each l
0740: 69 6e 65 20 61 73 20 61 20 73 65 70 61 72 61 74 ine as a separat
0750: 65 20 73 75 62 72 6f 75 74 69 6e 65 2e 20 52 55 e subroutine. RU
0760: 4e 20 77 69 6c 6c 20 63 79 63 6c 65 20 74 68 72 N will cycle thr
0770: 6f 75 67 68 20 65 61 63 68 20 20 20 20 20 29 0a ough each ).
0780: 28 20 74 68 65 20 61 72 72 61 79 2c 20 65 78 65 ( the array, exe
0790: 63 75 74 69 6e 67 20 74 68 65 20 73 75 62 72 6f cuting the subro
07a0: 75 74 69 6e 65 20 66 6f 72 20 65 61 63 68 20 6c utine for each l
07b0: 69 6e 65 2e 20 20 20 20 20 20 20 20 20 20 20 20 ine.
07c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0a ).
07d0: 28 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 (
07e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
07f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0a ).
0820: 28 20 41 6c 6c 20 63 6f 6d 6d 61 6e 64 73 20 61 ( All commands a
0830: 6e 64 20 76 61 72 69 61 62 6c 65 73 20 6d 75 73 nd variables mus
0840: 74 20 62 65 20 55 50 50 45 52 43 41 53 45 2e 20 t be UPPERCASE.
0850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0a ).
0870: 28 20 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e ( ~~~~~~~~~~~~~~
0880: 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e ~~~~~~~~~~~~~~~~
0890: 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e ~~~~~~~~~~~~~~~~
08a0: 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e ~~~~~~~~~~~~~~~~
08b0: 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 20 29 0a ~~~~~~~~~~~~~ ).
08c0: 28 20 54 6f 64 6f 3a 20 20 20 20 20 20 20 20 20 ( Todo:
08d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
08e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
08f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0a ).
0910: 28 20 20 20 2d 20 48 61 6e 64 6c 65 20 61 64 64 ( - Handle add
0920: 69 74 69 6f 6e 61 6c 20 4c 45 54 20 66 6f 72 6d itional LET form
0930: 73 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 s
0940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0a ).
0960: 28 20 20 20 2d 20 41 64 64 20 52 45 4d 20 66 6f ( - Add REM fo
0970: 72 20 63 6f 6d 6d 65 6e 74 73 20 20 20 20 20 20 r comments
0980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
09a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0a ).
09b0: 28 20 20 20 2d 20 41 64 64 20 47 4f 53 55 42 20 ( - Add GOSUB
09c0: 61 6e 64 20 52 45 54 55 52 4e 20 5b 73 74 69 6c and RETURN [stil
09d0: 6c 20 75 73 65 20 6c 69 6e 65 20 6e 75 6d 62 65 l use line numbe
09e0: 72 73 5d 20 20 20 20 20 20 20 20 20 20 20 20 20 rs]
09f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0a ).
0a00: 28 20 20 20 2d 20 41 6c 6c 6f 77 20 66 6f 72 20 ( - Allow for
0a10: 72 65 74 75 72 6e 20 74 6f 20 52 65 74 72 6f 20 return to Retro
0a20: 3f 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ?
0a30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0a40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0a ).
0a50: 28 20 20 20 2d 20 41 6c 6c 6f 77 20 66 6f 72 20 ( - Allow for
0a60: 72 65 74 75 72 6e 20 74 6f 20 52 78 42 41 53 49 return to RxBASI
0a70: 43 20 72 61 74 68 65 72 20 74 68 61 6e 20 73 68 C rather than sh
0a80: 75 74 74 69 6e 67 20 64 6f 77 6e 20 74 68 65 20 utting down the
0a90: 56 4d 20 20 20 20 20 20 20 20 20 20 20 20 29 0a VM ).
0aa0: 28 20 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e ( ~~~~~~~~~~~~~~
0ab0: 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e ~~~~~~~~~~~~~~~~
0ac0: 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e ~~~~~~~~~~~~~~~~
0ad0: 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e ~~~~~~~~~~~~~~~~
0ae0: 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 20 29 0a ~~~~~~~~~~~~~ ).
0af0: 28 20 43 6f 70 79 72 69 67 68 74 20 5b 63 5d 20 ( Copyright [c]
0b00: 32 30 31 31 2c 20 43 68 61 72 6c 65 73 20 43 68 2011, Charles Ch
0b10: 69 6c 64 65 72 73 2e 20 20 55 73 65 20 75 6e 64 ilders. Use und
0b20: 65 72 20 74 68 65 20 49 53 43 20 4c 69 63 65 6e er the ISC Licen
0b30: 73 65 20 20 20 20 20 20 20 20 20 20 20 20 29 0a se ).
0b40: 28 20 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e ( ~~~~~~~~~~~~~~
0b50: 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e ~~~~~~~~~~~~~~~~
0b60: 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e ~~~~~~~~~~~~~~~~
0b70: 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e ~~~~~~~~~~~~~~~~
0b80: 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 20 29 0a ~~~~~~~~~~~~~ ).
0b90: 0a 63 72 65 61 74 65 20 6c 69 6e 65 73 0a 20 20 .create lines.
0ba0: 34 30 39 36 20 61 6c 6c 6f 74 0a 0a 63 72 65 61 4096 allot..crea
0bb0: 74 65 20 73 76 61 72 73 0a 20 20 32 37 20 61 6c te svars. 27 al
0bc0: 6c 6f 74 0a 0a 63 72 65 61 74 65 20 6e 76 61 72 lot..create nvar
0bd0: 73 0a 20 20 32 37 20 61 6c 6c 6f 74 0a 0a 3a 20 s. 27 allot..:
0be0: 73 65 74 43 75 72 72 65 6e 74 4c 69 6e 65 20 28 setCurrentLine (
0bf0: 20 22 2d 20 29 0a 20 20 68 65 72 65 20 67 65 74 "- ). here get
0c00: 54 6f 6b 65 6e 20 74 6f 4e 75 6d 62 65 72 20 6c Token toNumber l
0c10: 69 6e 65 73 20 2b 20 21 20 3b 0a 0a 3a 20 68 61 ines + ! ;..: ha
0c20: 6e 64 6c 65 4b 65 79 77 6f 72 64 20 20 28 20 22 ndleKeyword ( "
0c30: 2d 20 29 20 3b 0a 0a 3a 20 62 61 73 69 63 20 28 - ) ;..: basic (
0c40: 20 2d 20 29 0a 20 20 72 65 70 65 61 74 20 63 72 - ). repeat cr
0c50: 20 73 65 74 43 75 72 72 65 6e 74 4c 69 6e 65 20 setCurrentLine
0c60: 68 61 6e 64 6c 65 4b 65 79 77 6f 72 64 20 61 67 handleKeyword ag
0c70: 61 69 6e 20 3b 0a 0a 0a 28 20 48 65 6c 70 65 72 ain ;...( Helper
0c80: 20 46 75 6e 63 74 69 6f 6e 73 20 7e 7e 7e 7e 7e Functions ~~~~~
0c90: 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e ~~~~~~~~~~~~~~~~
0ca0: 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e ~~~~~~~~~~~~~~~~
0cb0: 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e ~~~~~~~~~~~~~~~~
0cc0: 7e 7e 7e 7e 7e 20 29 0a 3a 20 23 20 28 20 6e 2d ~~~~~ ).: # ( n-
0cd0: 20 29 20 31 20 2c 20 2c 20 3b 0a 0a 3a 20 67 65 ) 1 , , ;..: ge
0ce0: 74 56 61 72 69 61 62 6c 65 20 28 20 22 2d 61 66 tVariable ( "-af
0cf0: 20 29 0a 20 20 67 65 74 63 20 64 75 70 20 70 75 ). getc dup pu
0d00: 74 63 20 27 41 20 2d 20 67 65 74 63 20 64 75 70 tc 'A - getc dup
0d10: 20 70 75 74 63 20 27 24 20 3d 20 5b 20 73 76 61 putc '$ = [ sva
0d20: 72 73 20 2b 20 2d 31 20 5d 20 5b 20 6e 76 61 72 rs + -1 ] [ nvar
0d30: 73 20 2b 20 30 20 5d 20 69 66 20 3b 0a 0a 0a 28 s + 0 ] if ;...(
0d40: 20 52 78 42 41 53 49 43 20 43 6f 6d 6d 61 6e 64 RxBASIC Command
0d50: 73 20 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e s ~~~~~~~~~~~~~~
0d60: 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e ~~~~~~~~~~~~~~~~
0d70: 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e ~~~~~~~~~~~~~~~~
0d80: 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 20 29 0a 3a ~~~~~~~~~~~~ ).:
0d90: 20 64 6f 5f 63 6c 73 20 20 20 20 28 20 2d 20 29 do_cls ( - )
0da0: 0a 20 20 26 63 6c 65 61 72 20 2c 20 26 3b 20 64 . &clear , &; d
0db0: 6f 20 3b 0a 0a 3a 20 64 6f 5f 70 72 69 6e 74 20 o ;..: do_print
0dc0: 20 28 20 22 2d 20 29 0a 20 20 67 65 74 63 20 64 ( "- ). getc d
0dd0: 75 70 20 70 75 74 63 0a 20 20 64 75 70 20 27 22 up putc. dup '"
0de0: 20 3d 20 5b 20 64 72 6f 70 20 27 22 20 61 63 63 = [ drop '" acc
0df0: 65 70 74 20 74 69 62 20 6b 65 65 70 53 74 72 69 ept tib keepStri
0e00: 6e 67 20 23 20 26 70 75 74 73 20 2c 20 5d 0a 20 ng # &puts , ].
0e10: 20 20 20 20 20 20 20 20 20 20 5b 20 27 41 20 2d [ 'A -
0e20: 20 67 65 74 63 20 64 75 70 20 70 75 74 63 20 27 getc dup putc '
0e30: 24 20 3d 20 5b 20 73 76 61 72 73 20 2b 20 23 20 $ = [ svars + #
0e40: 26 40 20 2c 20 26 70 75 74 73 20 2c 20 5d 0a 20 &@ , &puts , ].
0e50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0e70: 20 20 20 20 5b 20 6e 76 61 72 73 20 2b 20 23 20 [ nvars + #
0e80: 26 40 20 2c 20 26 70 75 74 6e 20 2c 20 5d 20 69 &@ , &putn , ] i
0e90: 66 20 5d 20 69 66 0a 20 20 26 3b 20 64 6f 20 3b f ] if. &; do ;
0ea0: 0a 0a 7b 7b 0a 20 20 3a 20 72 65 61 64 53 74 72 ..{{. : readStr
0eb0: 69 6e 67 20 28 20 22 2d 24 20 29 20 72 65 6d 61 ing ( "-$ ) rema
0ec0: 70 70 69 6e 67 20 5b 20 72 65 6d 61 70 70 69 6e pping [ remappin
0ed0: 67 20 6f 66 66 20 31 30 20 61 63 63 65 70 74 20 g off 10 accept
0ee0: 74 69 62 20 5d 20 70 72 65 73 65 72 76 65 20 3b tib ] preserve ;
0ef0: 0a 2d 2d 2d 72 65 76 65 61 6c 2d 2d 2d 0a 20 20 .---reveal---.
0f00: 3a 20 64 6f 5f 69 6e 70 75 74 20 20 28 20 22 2d : do_input ( "-
0f10: 20 29 0a 20 20 20 20 67 65 74 56 61 72 69 61 62 ). getVariab
0f20: 6c 65 20 5b 20 26 72 65 61 64 53 74 72 69 6e 67 le [ &readString
0f30: 20 2c 20 26 6b 65 65 70 53 74 72 69 6e 67 20 5d , &keepString ]
0f40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
0f50: 20 5b 20 26 67 65 74 54 6f 6b 65 6e 20 2c 20 20 [ &getToken ,
0f60: 20 26 74 6f 4e 75 6d 62 65 72 20 20 20 5d 20 69 &toNumber ] i
0f70: 66 20 2c 20 23 20 26 21 20 2c 20 26 3b 20 64 6f f , # &! , &; do
0f80: 20 3b 0a 7d 7d 0a 0a 3a 20 64 6f 5f 67 6f 74 6f ;.}}..: do_goto
0f90: 20 20 20 28 20 22 2d 20 29 0a 20 20 38 20 2c 20 ( "- ). 8 ,
0fa0: 67 65 74 54 6f 6b 65 6e 20 74 6f 4e 75 6d 62 65 getToken toNumbe
0fb0: 72 20 6c 69 6e 65 73 20 2b 20 2c 20 26 3b 20 64 r lines + , &; d
0fc0: 6f 20 3b 0a 0a 7b 7b 0a 20 20 3a 20 73 74 72 50 o ;..{{. : strP
0fd0: 72 65 70 65 6e 64 20 5e 73 74 72 69 6e 67 73 27 repend ^strings'
0fe0: 70 72 65 70 65 6e 64 20 3b 0a 0a 20 20 3a 20 61 prepend ;.. : a
0ff0: 73 73 69 67 6e 56 61 6c 75 65 20 28 20 61 66 22 ssignValue ( af"
1000: 2d 20 29 0a 20 20 20 20 5b 20 67 65 74 63 20 70 - ). [ getc p
1010: 75 74 63 20 27 22 20 61 63 63 65 70 74 20 74 69 utc '" accept ti
1020: 62 20 6b 65 65 70 53 74 72 69 6e 67 20 5d 0a 20 b keepString ].
1030: 20 20 20 5b 20 67 65 74 54 6f 6b 65 6e 20 74 6f [ getToken to
1040: 4e 75 6d 62 65 72 20 5d 20 69 66 20 32 23 20 26 Number ] if 2# &
1050: 21 20 2c 20 26 3b 20 64 6f 20 3b 0a 20 20 3a 20 ! , &; do ;. :
1060: 61 73 73 69 67 6e 56 61 72 69 61 62 6c 65 20 28 assignVariable (
1070: 20 61 66 22 2d 20 29 0a 20 20 20 20 3b 0a 20 20 af"- ). ;.
1080: 3a 20 61 64 64 56 61 72 69 61 62 6c 65 20 20 28 : addVariable (
1090: 20 61 66 22 2d 20 29 0a 20 20 20 20 5b 20 67 65 af"- ). [ ge
10a0: 74 56 61 72 69 61 62 6c 65 20 64 72 6f 70 20 6f tVariable drop o
10b0: 76 65 72 20 23 20 26 40 20 2c 20 23 20 26 40 20 ver # &@ , # &@
10c0: 2c 20 26 73 74 72 50 72 65 70 65 6e 64 20 2c 20 , &strPrepend ,
10d0: 23 20 26 21 20 2c 20 26 3b 20 64 6f 20 5d 0a 20 # &! , &; do ].
10e0: 20 20 20 5b 20 67 65 74 56 61 72 69 61 62 6c 65 [ getVariable
10f0: 20 64 72 6f 70 20 6f 76 65 72 20 23 20 26 40 20 drop over # &@
1100: 2c 20 23 20 26 40 20 2c 20 26 2b 20 2c 20 20 20 , # &@ , &+ ,
1110: 20 20 20 20 20 20 20 23 20 26 21 20 2c 20 26 3b # &! , &;
1120: 20 64 6f 20 5d 20 69 66 20 3b 0a 20 20 3a 20 73 do ] if ;. : s
1130: 75 62 56 61 72 69 61 62 6c 65 20 20 28 20 61 66 ubVariable ( af
1140: 22 2d 20 29 0a 20 20 20 20 5b 20 22 5c 6e 45 52 "- ). [ "\nER
1150: 52 4f 52 5c 6e 22 20 70 75 74 73 20 5d 0a 20 20 ROR\n" puts ].
1160: 20 20 5b 20 67 65 74 56 61 72 69 61 62 6c 65 20 [ getVariable
1170: 64 72 6f 70 20 6f 76 65 72 20 23 20 26 40 20 2c drop over # &@ ,
1180: 20 23 20 26 40 20 2c 20 73 77 61 70 2c 20 26 2d # &@ , swap, &-
1190: 20 2c 20 20 20 20 23 20 26 21 20 2c 20 26 3b 20 , # &! , &;
11a0: 64 6f 20 5d 20 69 66 20 3b 0a 2d 2d 2d 72 65 76 do ] if ;.---rev
11b0: 65 61 6c 2d 2d 2d 0a 20 20 3a 20 64 6f 5f 6c 65 eal---. : do_le
11c0: 74 20 20 20 20 28 20 2d 20 29 0a 20 20 20 20 67 t ( - ). g
11d0: 65 74 56 61 72 69 61 62 6c 65 0a 20 20 20 20 67 etVariable. g
11e0: 65 74 54 6f 6b 65 6e 0a 20 20 20 20 5b 20 22 3d etToken. [ "=
11f0: 22 20 20 63 6f 6d 70 61 72 65 20 5d 20 5b 20 64 " compare ] [ d
1200: 72 6f 70 20 61 73 73 69 67 6e 56 61 6c 75 65 20 rop assignValue
1210: 20 20 20 5d 20 77 68 65 6e 0a 20 20 20 20 5b 20 ] when. [
1220: 22 3a 3d 22 20 63 6f 6d 70 61 72 65 20 5d 20 5b ":=" compare ] [
1230: 20 64 72 6f 70 20 61 73 73 69 67 6e 56 61 72 69 drop assignVari
1240: 61 62 6c 65 20 5d 20 77 68 65 6e 0a 20 20 20 20 able ] when.
1250: 5b 20 22 2b 3d 22 20 63 6f 6d 70 61 72 65 20 5d [ "+=" compare ]
1260: 20 5b 20 64 72 6f 70 20 61 64 64 56 61 72 69 61 [ drop addVaria
1270: 62 6c 65 20 20 20 20 5d 20 77 68 65 6e 0a 20 20 ble ] when.
1280: 20 20 5b 20 22 2d 3d 22 20 63 6f 6d 70 61 72 65 [ "-=" compare
1290: 20 5d 20 5b 20 64 72 6f 70 20 73 75 62 56 61 72 ] [ drop subVar
12a0: 69 61 62 6c 65 20 20 20 20 5d 20 77 68 65 6e 0a iable ] when.
12b0: 20 20 20 20 64 72 6f 70 20 3b 0a 7d 7d 0a 0a 7b drop ;.}}..{
12c0: 7b 0a 20 20 3a 20 69 66 53 74 72 69 6e 67 0a 20 {. : ifString.
12d0: 20 20 20 23 20 26 40 20 2c 20 67 65 74 54 6f 6b # &@ , getTok
12e0: 65 6e 20 67 65 74 56 61 72 69 61 62 6c 65 20 64 en getVariable d
12f0: 72 6f 70 20 23 20 26 40 20 2c 0a 20 20 20 20 26 rop # &@ ,. &
1300: 63 6f 6d 70 61 72 65 20 2c 20 22 3c 3e 22 20 63 compare , "<>" c
1310: 6f 6d 70 61 72 65 20 5b 20 26 6e 6f 74 20 2c 20 ompare [ ¬ ,
1320: 5d 20 69 66 54 72 75 65 20 3b 0a 20 20 3a 20 69 ] ifTrue ;. : i
1330: 66 4e 75 6d 62 65 72 0a 20 20 20 20 23 20 26 40 fNumber. # &@
1340: 20 2c 20 67 65 74 54 6f 6b 65 6e 20 67 65 74 56 , getToken getV
1350: 61 72 69 61 62 6c 65 20 64 72 6f 70 20 23 20 26 ariable drop # &
1360: 40 20 2c 0a 20 20 20 20 66 69 6e 64 20 64 72 6f @ ,. find dro
1370: 70 20 40 64 2d 3e 78 74 20 2c 20 3b 0a 2d 2d 2d p @d->xt , ;.---
1380: 72 65 76 65 61 6c 2d 2d 2d 0a 20 20 3a 20 64 6f reveal---. : do
1390: 5f 69 66 20 20 20 20 20 28 20 2d 20 29 0a 20 20 _if ( - ).
13a0: 20 20 67 65 74 56 61 72 69 61 62 6c 65 0a 20 20 getVariable.
13b0: 20 20 26 69 66 53 74 72 69 6e 67 20 26 69 66 4e &ifString &ifN
13c0: 75 6d 62 65 72 20 69 66 20 67 65 74 54 6f 6b 65 umber if getToke
13d0: 6e 20 64 72 6f 70 20 32 35 20 2c 20 26 64 72 6f n drop 25 , &dro
13e0: 70 20 2c 20 68 61 6e 64 6c 65 4b 65 79 77 6f 72 p , handleKeywor
13f0: 64 20 26 3b 20 64 6f 20 3b 0a 7d 7d 0a 0a 3a 20 d &; do ;.}}..:
1400: 64 6f 5f 65 6e 64 20 20 20 20 28 20 2d 20 29 0a do_end ( - ).
1410: 20 20 26 62 79 65 20 2c 20 26 3b 20 64 6f 20 3b &bye , &; do ;
1420: 0a 0a 3a 20 64 6f 5f 72 75 6e 20 20 20 20 28 20 ..: do_run (
1430: 2d 20 29 0a 20 20 26 3b 20 64 6f 20 63 72 20 6c - ). &; do cr l
1440: 69 6e 65 73 20 72 65 70 65 61 74 20 40 2b 20 5b ines repeat @+ [
1450: 20 30 3b 20 64 6f 20 5d 20 64 6f 20 61 67 61 69 0; do ] do agai
1460: 6e 20 3b 0a 0a 0a 28 20 50 61 74 63 68 20 74 68 n ;...( Patch th
1470: 65 20 68 61 6e 64 6c 65 4b 65 79 77 6f 72 64 20 e handleKeyword
1480: 73 74 75 62 20 74 6f 20 70 72 6f 63 65 73 73 20 stub to process
1490: 74 68 65 20 52 78 42 41 53 49 43 20 63 6f 6d 6d the RxBASIC comm
14a0: 61 6e 64 73 20 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e ands ~~~~~~~~~~~
14b0: 7e 7e 7e 20 29 0a 3a 20 64 69 73 70 61 74 63 68 ~~~ ).: dispatch
14c0: 20 28 20 22 2d 20 29 0a 20 20 67 65 74 54 6f 6b ( "- ). getTok
14d0: 65 6e 0a 20 20 20 20 5b 20 22 43 4c 53 22 20 20 en. [ "CLS"
14e0: 20 63 6f 6d 70 61 72 65 20 5d 20 5b 20 64 72 6f compare ] [ dro
14f0: 70 20 64 6f 5f 63 6c 73 20 20 20 5d 20 77 68 65 p do_cls ] whe
1500: 6e 0a 20 20 20 20 5b 20 22 50 52 49 4e 54 22 20 n. [ "PRINT"
1510: 63 6f 6d 70 61 72 65 20 5d 20 5b 20 64 72 6f 70 compare ] [ drop
1520: 20 64 6f 5f 70 72 69 6e 74 20 5d 20 77 68 65 6e do_print ] when
1530: 0a 20 20 20 20 5b 20 22 49 4e 50 55 54 22 20 63 . [ "INPUT" c
1540: 6f 6d 70 61 72 65 20 5d 20 5b 20 64 72 6f 70 20 ompare ] [ drop
1550: 64 6f 5f 69 6e 70 75 74 20 5d 20 77 68 65 6e 0a do_input ] when.
1560: 20 20 20 20 5b 20 22 47 4f 54 4f 22 20 20 63 6f [ "GOTO" co
1570: 6d 70 61 72 65 20 5d 20 5b 20 64 72 6f 70 20 64 mpare ] [ drop d
1580: 6f 5f 67 6f 74 6f 20 20 5d 20 77 68 65 6e 0a 20 o_goto ] when.
1590: 20 20 20 5b 20 22 4c 45 54 22 20 20 20 63 6f 6d [ "LET" com
15a0: 70 61 72 65 20 5d 20 5b 20 64 72 6f 70 20 64 6f pare ] [ drop do
15b0: 5f 6c 65 74 20 20 20 5d 20 77 68 65 6e 0a 20 20 _let ] when.
15c0: 20 20 5b 20 22 49 46 22 20 20 20 20 63 6f 6d 70 [ "IF" comp
15d0: 61 72 65 20 5d 20 5b 20 64 72 6f 70 20 64 6f 5f are ] [ drop do_
15e0: 69 66 20 20 20 20 5d 20 77 68 65 6e 0a 20 20 20 if ] when.
15f0: 20 5b 20 22 45 4e 44 22 20 20 20 63 6f 6d 70 61 [ "END" compa
1600: 72 65 20 5d 20 5b 20 64 72 6f 70 20 64 6f 5f 65 re ] [ drop do_e
1610: 6e 64 20 20 20 5d 20 77 68 65 6e 0a 20 20 20 20 nd ] when.
1620: 5b 20 22 52 55 4e 22 20 20 20 63 6f 6d 70 61 72 [ "RUN" compar
1630: 65 20 5d 20 5b 20 64 72 6f 70 20 64 6f 5f 72 75 e ] [ drop do_ru
1640: 6e 20 20 20 5d 20 77 68 65 6e 0a 20 20 64 72 6f n ] when. dro
1650: 70 20 3b 0a 26 64 69 73 70 61 74 63 68 20 69 73 p ;.&dispatch is
1660: 20 68 61 6e 64 6c 65 4b 65 79 77 6f 72 64 0a 0a handleKeyword..
1670: 62 61 73 69 63 0a 30 30 30 32 20 50 52 49 4e 54 basic.0002 PRINT
1680: 20 22 59 6f 75 72 20 4e 61 6d 65 3f 20 22 0a 30 "Your Name? ".0
1690: 30 30 33 20 4c 45 54 20 41 24 20 3d 20 22 63 72 003 LET A$ = "cr
16a0: 63 78 22 0a 30 30 30 34 20 49 4e 50 55 54 20 42 cx".0004 INPUT B
16b0: 24 0a 30 30 30 35 20 49 46 20 41 24 20 3d 20 42 $.0005 IF A$ = B
16c0: 24 20 54 48 45 4e 20 50 52 49 4e 54 20 22 6d 61 $ THEN PRINT "ma
16d0: 74 63 68 5c 6e 22 0a 30 30 30 36 20 49 46 20 41 tch\n".0006 IF A
16e0: 24 20 3c 3e 20 42 24 20 54 48 45 4e 20 50 52 49 $ <> B$ THEN PRI
16f0: 4e 54 20 22 6e 6f 20 6d 61 74 63 68 5c 6e 22 0a NT "no match\n".
1700: 30 30 30 37 20 4c 45 54 20 41 23 20 3d 20 31 30 0007 LET A# = 10
1710: 30 0a 30 30 30 38 20 4c 45 54 20 42 23 20 3d 20 0.0008 LET B# =
1720: 32 30 30 0a 30 30 31 30 20 4c 45 54 20 41 23 20 200.0010 LET A#
1730: 2b 3d 20 42 23 0a 30 30 31 31 20 50 52 49 4e 54 += B#.0011 PRINT
1740: 20 41 23 0a 30 30 31 32 20 4c 45 54 20 42 23 20 A#.0012 LET B#
1750: 3d 20 35 30 0a 30 30 31 33 20 4c 45 54 20 41 23 = 50.0013 LET A#
1760: 20 2d 3d 20 42 23 0a 30 30 31 34 20 50 52 49 4e -= B#.0014 PRIN
1770: 54 20 41 23 0a 30 39 39 39 20 45 4e 44 0a 34 30 T A#.0999 END.40
1780: 30 30 20 52 55 4e 0a 00 RUN.