summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkitty <nepeta@canaglie.net>2026-03-01 01:07:47 +1100
committerkitty <nepeta@canaglie.net>2026-03-01 01:07:47 +1100
commit7ba683f7bec77ed008aeb3b25aaafd9e9d27f50d (patch)
treecb8dd6d037418741662eab2f592682047b995ba8
parentbf407e7b05d5459866420b5c05c7338904540263 (diff)
source-id
-rw-r--r--jefs.fs17
1 files changed, 12 insertions, 5 deletions
diff --git a/jefs.fs b/jefs.fs
index 48a77b9..746b5be 100644
--- a/jefs.fs
+++ b/jefs.fs
@@ -149,7 +149,7 @@ variable disp
: /2 modrm @ 10 or modrm ! ; : /3 modrm @ 18 or modrm ! ;
: /4 modrm @ 20 or modrm ! ; : /5 modrm @ 28 or modrm ! ;
: /6 modrm @ 30 or modrm ! ; : /7 modrm @ 38 or modrm ! ;
-: modrm, ;
+: modrm, ; \ TODO
\ TODO store and write the displacement if given
: mod0 modrm @ 3f and modrm ! ;
@@ -230,9 +230,6 @@ variable hld
: (words) ( lfa -- ) >nfa dup w@ swap 2 + swap say 2 spaces ;
: words latest @ begin ?dup 0<> while dup (words) @ repeat cr ;
-: (evaluate) ( c-addr u -- ) 0 >in ! ( u ) #tib ! ( c-addr ) tib ! interpret ;
-: evaluate ( c-addr u -- ) tib @ >r #tib @ >r >in @ >r (evaluate) r> >in ! r> #tib ! r> tib ! ;
-
\ SYSCALL ERRORS {{{
: errno ( rax -- ?val err|0 ) dup 0< if negate else 0 then ;
: errno-flag ( rax -- err|0 ) dup 0< if negate else drop 0 then ;
@@ -274,10 +271,20 @@ variable hld
\ USER INPUT {{{
\ use cmove (not cmove>) for moving stray bytes left when refilling
+variable source-id
+-2 constant init-source
+-1 constant string-source
+init-source source-id !
+
8192 constant file-buffer-length
make file-buffer file-buffer-length allot
\ }}}
+: (evaluate) ( c-addr u -- ) 0 >in ! ( u ) #tib ! ( c-addr ) tib !
+ source-id @ >r string-source source-id ! interpret
+ r> source-id ! ;
+: evaluate ( c-addr u -- ) tib @ >r #tib @ >r >in @ >r (evaluate) r> >in ! r> #tib ! r> tib ! ;
+
\ INTERACTIVITY {{{
\ i hate dealing with user input!!!
\ but my idea is: when reading forth from a file,
@@ -285,5 +292,5 @@ make file-buffer file-buffer-length allot
\ }}}
.free
-\ file-buffer file-buffer-length stdin read-file drop file-buffer swap evaluate
+file-buffer file-buffer-length stdin read-file drop file-buffer swap evaluate
bye