diff options
| author | kitty <nepeta@canaglie.net> | 2026-03-03 20:11:24 +1100 |
|---|---|---|
| committer | kitty <nepeta@canaglie.net> | 2026-03-03 20:11:24 +1100 |
| commit | 2514a1194acf7c6579ee7a1f7437e2436a8aa4c2 (patch) | |
| tree | 0f7a3b049e888030e5e6701ca0354117512fa089 | |
| parent | 232bbb58c381f635749ba957653e9e7d39aa78a4 (diff) | |
mostly just been Thinking
also have been busy today
| -rw-r--r-- | jefs.fs | 32 |
1 files changed, 22 insertions, 10 deletions
@@ -220,6 +220,7 @@ variable hld : .free bytes-free u. ." of " bytes-allocated u. ." bytes free (used " bytes-used (.) say ." )" cr ; : #bye ( code -- ) 60 syscall1 ; +\ maybe this would be more elegant as a table? :> >s0 error @ dup case 1 of ." stack underflow" endof 2 of ." word not found" endof @@ -278,20 +279,31 @@ variable source-id -1 constant string-source init-source source-id ! -8192 constant file-buffer-length -make file-buffer file-buffer-length allot +\ plan: stdin buffering is separated from loaded file buffering. +\ these words will only be used when source-id = 0. +\ when a file loads another file, the new file will not be buffered +\ because the buffer is already in use. +\ solution seems bad but i don't know the best way to handle it +8192 constant input-buffer-length +make input-buffer input-buffer-length allot + +: buffer-refill input-buffer input-buffer-length stdin read-file ( handle err ) ; +: buffer-key ; + +2048 constant line-buffer-length +make line-buffer line-buffer-length allot \ todo move remaining stuff back before read-file, \ update tib stuff for new data \ what if word spans accross refills? maybe parse \ should be rewritten here to take this into account -: move-back ( -- remaining ) tib @ >in @ + tib @ #tib @ >in @ - dup >r cmove - r> #tib ! 0 >in ! #tib @ ; \ maybe make this less shitty at sum pt -: (refill) ( fd -- flag ) >r file-buffer file-buffer-length r> read-file - 0= if ?dup 0> if ( TODO > ) drop ( < TODO ) true - else false then else false then ; -: refill ( -- flag ) source-id @ dup 0>= if (refill) else drop false then ; -: refill ." UNIMPLEMENTED" cr ; +\ : move-back ( -- remaining ) tib @ >in @ + tib @ #tib @ >in @ - dup >r cmove +\ r> #tib ! 0 >in ! #tib @ ; \ maybe make this less shitty at sum pt +\ : (refill) ( fd -- flag ) >r file-buffer file-buffer-length r> read-file +\ 0= if ?dup 0> if ( TODO > ) drop ( < TODO ) true +\ else false then else false then ; +\ : refill ( -- flag ) source-id @ dup 0>= if (refill) else drop false then ; +\ : refill ." UNIMPLEMENTED" cr ; \ }}} : (evaluate) ( c-addr u -- ) 0 >in ! ( u ) #tib ! ( c-addr ) tib ! @@ -305,5 +317,5 @@ make file-buffer file-buffer-length allot \ }}} .free -file-buffer file-buffer-length stdin read-file drop file-buffer swap evaluate +input-buffer input-buffer-length stdin read-file drop input-buffer swap evaluate bye |
