summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--jefs.fs15
1 files changed, 8 insertions, 7 deletions
diff --git a/jefs.fs b/jefs.fs
index 4551250..18ea7e1 100644
--- a/jefs.fs
+++ b/jefs.fs
@@ -9,9 +9,8 @@
\ interactive input
: cell+ 8 + ;
-: syswrite ( u c-addr fd -- n ) 1 syscall3 ;
-: say ( c-addr u -- ) swap 1 syswrite drop ;
-: emit ( chr -- ) sp cell+ 1 swap 1 syswrite 2drop ;
+: say ( c-addr u -- ) swap 1 1 syscall3 drop ;
+: emit ( chr -- ) sp cell+ 1 swap 1 1 syscall3 2drop ;
: cr 10 emit ;
: decimal 10 base ! ;
@@ -230,12 +229,12 @@ variable hld
\ }}}
\ FILE I/O {{{
-\ for syswrite see the top of the file
0 constant stdin
1 constant stdout
2 constant stderr
: sysread ( u c-addr fd -- ) 0 syscall3 ;
+: syswrite ( u c-addr fd -- n ) 1 syscall3 ;
: sysopen ( mode flags filename -- ) 2 syscall3 ;
: sysclose ( fd -- ) 3 syscall1 ;
@@ -243,13 +242,15 @@ variable hld
1 constant w/o
2 constant r/w
+8192 constant file-buffer-length
+make file-buffer file-buffer-length allot
+
\ TODO error handling (0< abs → errno i think)
\ flags are zero on success
: open-file ( mode zstr -- ?fd flag ) 0 -rot sysopen errno ;
: close-file ( fd -- flag ) sysclose errno-flag ;
-: read-file ( c-addr u fd -- ?u flag ) >r swap r> sysread errno ;
+: read-file ( c-addr u fd -- ?u flag ) >r swap r> sysread errno ;
+: write-file ( c-addr u fd -- ?u flag ) >r swap r> syswrite errno ;
\ }}}
-make buf 8192 allot
-
.free bye