diff --git a/ueforth/common/forth_namespace_tests.fs b/ueforth/common/forth_namespace_tests.fs index 3cc5923..44d31e2 100644 --- a/ueforth/common/forth_namespace_tests.fs +++ b/ueforth/common/forth_namespace_tests.fs @@ -272,21 +272,23 @@ e: check-float-opcodes ;e e: check-files - out: file-size - out: resize-file - out: reposition-file - out: file-position - out: write-file - out: read-file - out: rename-file - out: delete-file - out: flush-file - out: close-file - out: create-file - out: open-file - out: r/w - out: w/o - out: r/o + out: NON-BLOCK + out: FILE-SIZE + out: RESIZE-FILE + out: REPOSITION-FILE + out: FILE-POSITION + out: READ-FILE + out: WRITE-FILE + out: RENAME-FILE + out: DELETE-FILE + out: CREATE-FILE + out: OPEN-FILE + out: FLUSH-FILE + out: CLOSE-FILE + out: BIN + out: R/W + out: W/O + out: R/O ;e e: check-blocks @@ -476,7 +478,6 @@ e: test-posix-forth-namespace out: #! out: ms-ticks out: ms - out: non-block check-files out: default-key out: default-type @@ -541,22 +542,7 @@ e: check-esp32-basics2 out: setsockopt out: MDNS.begin out: dacWrite - out: NON-BLOCK - out: FILE-SIZE - out: RESIZE-FILE - out: REPOSITION-FILE - out: FILE-POSITION - out: READ-FILE - out: WRITE-FILE - out: DELETE-FILE - out: CREATE-FILE - out: OPEN-FILE - out: FLUSH-FILE - out: CLOSE-FILE - out: BIN - out: W/O - out: R/W - out: R/O + check-files out: TERMINATE out: MS-TICKS out: pulseIn diff --git a/ueforth/esp32/builtins.h b/ueforth/esp32/builtins.h index 0fae2af..ae41d50 100644 --- a/ueforth/esp32/builtins.h +++ b/ueforth/esp32/builtins.h @@ -93,8 +93,8 @@ static cell_t ResizeFile(cell_t fd, cell_t size); #define REQUIRED_FILES_SUPPORT \ X("R/O", R_O, PUSH O_RDONLY) \ - X("R/W", R_W, PUSH O_RDWR) \ X("W/O", W_O, PUSH O_WRONLY) \ + X("R/W", R_W, PUSH O_RDWR) \ Y(BIN, ) \ X("CLOSE-FILE", CLOSE_FILE, tos = close(tos); tos = tos ? errno : 0) \ X("FLUSH-FILE", FLUSH_FILE, fsync(tos); /* fsync has no impl and returns ENOSYS :-( */ tos = 0) \ @@ -107,6 +107,7 @@ static cell_t ResizeFile(cell_t fd, cell_t size); X("DELETE-FILE", DELETE_FILE, cell_t len = n0; DROP; \ memcpy(filename, a0, len); filename[len] = 0; \ n0 = unlink(filename); n0 = n0 ? errno : 0) \ + X("RENAME-FILE", RENAME_FILE, NIPn(3); /* unimplemented */ n0 = 1) \ X("WRITE-FILE", WRITE_FILE, cell_t fd = n0; DROP; cell_t len = n0; DROP; \ n0 = write(fd, a0, len); n0 = n0 != len ? errno : 0) \ X("READ-FILE", READ_FILE, cell_t fd = n0; DROP; cell_t len = n0; DROP; \ diff --git a/ueforth/posix/posix.fs b/ueforth/posix/posix.fs index 5bbe5bb..5bfc1a2 100644 --- a/ueforth/posix/posix.fs +++ b/ueforth/posix/posix.fs @@ -156,29 +156,29 @@ z" fcntl" 3 sysfunc fcntl forth definitions posix ( Generic Files ) -O_RDONLY constant r/o -O_WRONLY constant w/o -O_RDWR constant r/w +O_RDONLY constant R/O +O_WRONLY constant W/O +O_RDWR constant R/W +: BIN ( fh -- fh ) ; -: open-file ( a n fam -- fh ior ) >r s>z r> 0777 open sign-extend d0r s>z r> 0777 open sign-extend d0r s>z r> O_CREAT or 0777 open sign-extend d0z unlink sign-extend ; -: rename-file ( a n a n -- ior ) s>z -rot s>z swap rename sign-extend ; -: read-file ( a n fh -- n ior ) -rot read d0r write r> = 0= ; -: file-position ( fh -- n ior ) 0 SEEK_CUR lseek d0z unlink sign-extend ; +: RENAME-FILE ( a n a n -- ior ) s>z -rot s>z swap rename sign-extend ; +: WRITE-FILE ( a n fh -- ior ) -rot dup >r write r> = 0= ; +: READ-FILE ( a n fh -- n ior ) -rot read d0r dup 0 SEEK_END lseek r> swap >r SEEK_SET lseek drop r> d0r s>z r> FILE_SHARE_READ FILE_SHARE_WRITE or NULL OPEN_EXISTING FILE_ATTRIBUTE_NORMAL NULL CreateFileA d0r s>z r> FILE_SHARE_READ FILE_SHARE_WRITE or NULL CREATE_ALWAYS FILE_ATTRIBUTE_NORMAL NULL CreateFileA d0z DeleteFileA 0=ior ; -: rename-file ( a n a n -- ior ) s>z -rot s>z swap MoveFileA 0=ior ; -: read-file ( a n fh -- n ior ) -rot 0 >r rp@ NULL ReadFile r> swap 0=ior ; -: write-file ( a n fh -- ior ) +: DELETE-FILE ( a n -- ior ) s>z DeleteFileA 0=ior ; +: RENAME-FILE ( a n a n -- ior ) s>z -rot s>z swap MoveFileA 0=ior ; +: WRITE-FILE ( a n fh -- ior ) -rot dup >r 0 >r rp@ NULL WriteFile if r> r> <> else rdrop rdrop GetLastError then ; -: file-position ( fh -- n ior ) +: READ-FILE ( a n fh -- n ior ) -rot 0 >r rp@ NULL ReadFile r> swap 0=ior ; +: FILE-POSITION ( fh -- n ior ) 0 NULL FILE_CURRENT SetFilePointer dup invalid?ior ; -: reposition-file ( n fh -- ior ) +: REPOSITION-FILE ( n fh -- ior ) swap NULL FILE_BEGIN SetFilePointer invalid?ior ; -: resize-file ( n fh -- ior ) +: RESIZE-FILE ( n fh -- ior ) dup file-position dup if drop 2drop 1 ior exit else drop then >r dup -rot reposition-file if rdrop drop 1 ior exit then dup SetEndOfFile 0= if rdrop drop 1 ior exit then r> swap reposition-file ; -: file-size ( fh -- n ior ) NULL GetFileSize dup invalid?ior ; +: FILE-SIZE ( fh -- n ior ) NULL GetFileSize dup invalid?ior ; +: NON-BLOCK ( fh -- ior ) 1 throw ; ( IMPLEMENT! ) ( Other Utils ) : ms ( n -- ) Sleep ;