diff options
| author | kitty <nepeta@canaglie.net> | 2026-03-01 01:07:47 +1100 |
|---|---|---|
| committer | kitty <nepeta@canaglie.net> | 2026-03-01 01:07:47 +1100 |
| commit | 7ba683f7bec77ed008aeb3b25aaafd9e9d27f50d (patch) | |
| tree | cb8dd6d037418741662eab2f592682047b995ba8 /jefs.fs | |
| parent | bf407e7b05d5459866420b5c05c7338904540263 (diff) | |
source-id
Diffstat (limited to 'jefs.fs')
| -rw-r--r-- | jefs.fs | 17 |
1 files changed, 12 insertions, 5 deletions
@@ -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 |
