CODE now a library word.
[forth.jl.git] / src / lib_11_extensions.4th
diff --git a/src/lib_11_extensions.4th b/src/lib_11_extensions.4th
new file mode 100644 (file)
index 0000000..1e28933
--- /dev/null
@@ -0,0 +1,41 @@
+\ Non-core extension words
+
+CREATE CODEBUFFER 1000 CELLS ALLOT
+VARIABLE >CB
+0 >CB !
+
+: PARSE-CODE
+    0 >CB !
+
+    BEGIN
+        >IN @ #IB @ >= IF   \ End of IB?
+            '\n' CODEBUFFER >CB @ + !
+            1 >CB +!
+            SOURCE-ID 0= IF CR THEN
+            QUERY-INPUT     \ Get next line
+        ELSE
+            BL CODEBUFFER >CB @ + !
+            1 >CB +!
+        THEN
+
+        BL WORD COUNT
+        2DUP ( addr n addr n)
+        PAD SWAP CMOVE
+
+        PAD OVER TOLOWER
+        PAD OVER s" end-code" COMPARE
+        0= IF
+            2DROP EXIT
+        THEN
+
+        dup -rot ( n addr n )
+        CODEBUFFER >CB @ + SWAP CMOVE
+        >CB +!
+    AGAIN
+;
+
+: CODE
+    BL WORD HEADER
+    PARSE-CODE
+    CODEBUFFER >CB @ CREATE-PRIM ,
+;