summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkitty <nepeta@canaglie.net>2026-03-03 20:11:24 +1100
committerkitty <nepeta@canaglie.net>2026-03-03 20:11:24 +1100
commit2514a1194acf7c6579ee7a1f7437e2436a8aa4c2 (patch)
tree0f7a3b049e888030e5e6701ca0354117512fa089
parent232bbb58c381f635749ba957653e9e7d39aa78a4 (diff)
mostly just been Thinking
also have been busy today
-rw-r--r--jefs.fs32
1 files changed, 22 insertions, 10 deletions
diff --git a/jefs.fs b/jefs.fs
index 5c3b7d0..b334755 100644
--- a/jefs.fs
+++ b/jefs.fs
@@ -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