compiler-mode implemented
[watForth.git] / forth.forth
index e7dc229..63da4a7 100644 (file)
 \
 \ You should have received a copy of the GNU General Public License
 \ along with this program.  If not, see <http://www.gnu.org/licenses/>.
+16500 execute WORD 16500 29 execute
+word DEFINE 29 29 execute
+\ word EXECUTE 12 define
+word RINIT 3 define
+word NOOP 13 define
+word MODE 14336 define
+word EXECUTE-MODE 16680 define
+word EXECUTE-NUM 16720 define
+word INTERPRET 16400 define
+word KEY 5 define
+word WORD-START 20 define
+word WORD-PUT 19 define
+word WORD-END 23 define
+word STRING-START 39 define
+word STRING-PUT 40 define
+word STRING-END 41 define
+word NUMBER 22 define
+word FIND 21 define
+word FIND-DOES 44 define
+word DEFINE-DOES 45 define
+word QUIT 16384 define
+word BYE 25 define
+word WORDS 27 define
+word !CHANNEL 35 define
+word !HERE 36 define
+word HERE 28 define
+
+word ; 1 define
+word JZ: 14 define
+word JNZ: 15 define
+word J-1: 24 define
+word JMP: 18 define
+word , 33 define
+word + 7 define
+word - 34 define
+word =? 37 define
+word WS? 17 define
+word . 9 define
+word .S 38 define
+word @ 10 define
+word @+ 42 define
+word ! 11 define
+word !+ 43 define
+word LIT 2 define
+word DUP 6 define
+word 2DUP 30 define
+word DROP 16 define
+word 2DROP 32 define
+word SWAP 26 define
+word ROT 31 define
+
 word ' here define
 word word find , word find find , word ; find ,
+
 word : here define
 ' word , ' here , ' define , ' ; ,
+' : dup define-does
+
 : IWRITE-MODE ' dup , ' JNZ: , here 12 + , ' 2drop , ' ; ,
 ' 2dup , ' find , ' dup , ' JZ: , here 16 + , ' , , ' 2drop , ' ; ,
-' drop , ' LIT , ' LIT , ' , , 16720 , ' , , ' ; ,
+' drop , ' LIT , ' LIT , ' , , ' EXECUTE-NUM , ' , , ' ; ,
+
 : i ' LIT , ' MODE , ' LIT , ' IWRITE-MODE , ' ! , ' ; ,
-: e ' LIT , ' MODE , ' LIT , ' EXECUTE-MODE , ' ! , ' ; ,
+
 \i
-\: FINISH-STRING DROP STRING-END ;
-\: " STRING-START
-\: KEYPUMP KEY 34 =? JNZ: FINISH-STRING STRING-PUT JMP: KEYPUMP
+\: e LIT MODE LIT EXECUTE-MODE ! ;
+\: :> word find here define-does ;
+\' :> \dup \define-does
+\: FINISH-" DROP STRING-END ;
+\: " STRING-START \: KLOOP KEY 34 =? JNZ: FINISH-" STRING-PUT JMP: KLOOP
+\:> " " swap lit lit , , lit lit , , ;
+\: IF JZ: \here \8 \+ \, ; word 2drop ;
+\:> IF \: DOIF LIT JZ: , HERE DUP , ;
+\: ELSE ;
+\:> ELSE \: DOELSE LIT JMP: , HERE DUP , SWAP HERE ! ;
+\: THEN ;
+\:> THEN \: DOTHEN HERE ! ;
+\: COMPILE-MODE dup
+\doif 2dup find dup
+  \doif dup find-does dup
+    \doif swap drop rot 2drop execute ;
+    \dothen drop , 2drop ;
+  \dothen drop lit lit , execute-num , ;
+\dothen 2drop ;
+\: c LIT MODE LIT COMPILE-MODE ! ;
+\: DO" 
 \e
+
 " watForth-32 Interactive CLI:
 " .s