Implement UEFI functionality in Forth
[rrq/jonasforth.git] / sys.f
diff --git a/sys.f b/sys.f
index d222320fcfe931fcf5e54db18749ae045ba4fbc0..6e7c8539bcdd67ea720b7faf5c2f15c8781b0880 100644 (file)
--- a/sys.f
+++ b/sys.f
@@ -47,7 +47,7 @@ EXIT [
     ELSE
       DROP
     THEN
-  AGAIN ;
+  AGAIN ; ( Yay! We now have comments! )
 
 : UNTIL IMMEDIATE
   ' 0BRANCH ,
@@ -62,18 +62,6 @@ EXIT [
 : MOD /MOD SWAP DROP ;
 : NEG 0 SWAP - ;
 
-: FIB ( n -- Fn )
-  0 1                            ( n a b )
-  0                              ( n a b i )
-  BEGIN
-    ROT                          ( n i a b )
-    DUP ROT +                    ( n i b a+b )
-    ROT ROT                      ( n b a+b i )
-
-    1 +                          ( n b a+b i+1 )
-  DUP 4 PICK = UNTIL
-  DROP SWAP DROP SWAP DROP ;     ( a+b )
-
 : C,
   HERE @ C!
   HERE @ 1 +
@@ -81,6 +69,27 @@ EXIT [
 
 : OVER ( a b -- a b a ) SWAP DUP ROT ;
 
+( An alternative comment syntax. Reads until the end of the line. )
+: \ IMMEDIATE
+  BEGIN
+    KEY
+  10 = UNTIL ;
+
+\ So far, S" has only worked in immediate mode, which is backwards -- actually,
+\ the main use-case of this is as a compile-time word. Let's fix that.
+: S" IMMEDIATE
+  ' LITSTRING ,
+  HERE @ 0 C, \ We will put the length here
+  0
+  BEGIN
+    1 +
+    KEY DUP C,
+  34 = UNTIL
+  \ Remove final "
+    HERE @ 1 - HERE !
+    1 -
+  SWAP C! ;
+
 ( Compile the given string into the current word directly. )
 : STORE-STRING ( str len -- )
   BEGIN
@@ -89,16 +98,12 @@ EXIT [
   1 - DUP 0 = UNTIL
   DROP DROP ;
 
-S" HELLO-ADDR" CREATE
-S" Hello!" DUP ROT
-STORE-STRING
-: HELLO
-  ' HELLO-ADDR LIT, TELL NEWLINE ;
+: NEWLINE 10 EMIT ;
+: SPACE 32 EMIT ;
 
-HELLO
+( Read a number from standard input. )
+: READ-NUMBER READ-WORD PARSE-NUMBER ;
 
-S" 10 FIB = " TELL
-10 FIB .U
-S"  (Expected: 59)" TELL NEWLINE
+: RESTART S" Ready." TELL NEWLINE ;
+RESTART
 
-TERMINATE