Working on LEAVE and example.
[forth.jl.git] / src / lib.4th
index 4b60a1e..b44fb65 100644 (file)
@@ -1,5 +1,6 @@
-' 1+ , : / /MOD SWAP DROP ;
+: / /MOD SWAP DROP ;
 : MOD /MOD DROP ;
+: */ * / ;
 
 : '\n' 10 ;
 : BL 32 ;
 ;
 
 : DO IMMEDIATE
-        ' >R , ' >R ,
+        ' LIT , 
+        HERE @
+        0 ,
+        ' >R , ' >R , ' >R ,
         HERE @
 ;
 
+: I RSP@ 2- @ ;
+
+: LEAVE RDROP RDROP RDROP EXIT ;
+
 : LOOP IMMEDIATE
         ' R> , ' R> , ' 1+ , ' 2DUP , ' - ,
         ' SWAP , ' >R , ' SWAP , ' >R ,
         ' 0<= , ' 0BRANCH ,
         HERE @ - ,
-        ' RDROP , ' RDROP ,
+        ' RDROP , ' RDROP , ' RDROP ,
+        DUP HERE @ SWAP -
+        SWAP !
 ;
 
 
         @               ( and fetch )
 ;
 
+
 ( With the looping constructs, we can now write SPACES, which writes n spaces to stdout. )
 : SPACES        ( n -- )
         BEGIN
         U.
 ;
 
-: U. U. SPACE ;
-
 : . 0 .R SPACE ;
 
 : .S            ( -- )
         DROP
 ;
 
+: U. U. SPACE ;
+
 ( ? fetches the integer at an address and prints it. )
 : ? ( addr -- ) @ . ;