X-Git-Url: https://git.rrq.au/?a=blobdiff_plain;ds=sidebyside;f=sys.f;h=6b13ff9775b5b0ad93c26ada9e83e00c504b8feb;hb=11d153e11d9f291d592cfbe5363aea911f0bb46f;hp=09963525c9e3a9f343efdafd87bbf476ca05a252;hpb=3e21454c3e1e006a38d2a05d856e4651d099b668;p=rrq%2Fjonasforth.git diff --git a/sys.f b/sys.f index 0996352..6b13ff9 100644 --- a/sys.f +++ b/sys.f @@ -10,10 +10,6 @@ EXIT [ EXIT [ IMMEDIATE -: / /MOD DROP ; -: MOD /MOD SWAP DROP ; -: NEG 0 SWAP - ; - : IF IMMEDIATE ' 0BRANCH , HERE @ @@ -37,25 +33,55 @@ EXIT [ HERE @ ; +: AGAIN IMMEDIATE + ' BRANCH , + HERE @ - , ; + +: ( IMMEDIATE + BEGIN + READ-WORD + 1 = IF + C@ 41 = IF + EXIT + THEN + ELSE + DROP + THEN + AGAIN ; + : UNTIL IMMEDIATE ' 0BRANCH , HERE @ - , ; -: FIB - 0 1 - 0 +( Compile a literal value into the current word. ) +: LIT, IMMEDIATE ( x -- ) + ' LIT , , ; + +: / /MOD DROP ; +: MOD /MOD SWAP DROP ; +: NEG 0 SWAP - ; + +: C, + HERE @ C! + HERE @ 1 + + HERE ! ; + +: OVER ( a b -- a b a ) SWAP DUP ROT ; + +( Compile the given string into the current word directly. ) +: STORE-STRING ( str len -- ) BEGIN - ROT - DUP ROT + - ROT ROT + OVER C@ C, + SWAP 1 + SWAP + 1 - DUP 0 = UNTIL + DROP DROP ; - 1 + - DUP 4 PICK = UNTIL - DROP SWAP DROP SWAP DROP -; +: NEWLINE 10 EMIT ; +: SPACE 32 EMIT ; -S" 10 FIB = " TELL -10 FIB .U -S" (Expected: 59)" TELL NEWLINE +( Read a number from standard input. ) +: READ-NUMBER READ-WORD PARSE-NUMBER ; +( vim: syntax=forth +)