Sujet : Quick file handling De : dxforth (at) *nospam* gmail.com (dxf) Groupes :comp.lang.forth Date : 06. Jun 2025, 11:53:27 Autres entêtes Organisation : i2pn2 (i2pn.org) Message-ID :<64c0aee9cd512ac490923f15b3cd2c0533b7bf3b@i2pn2.org> User-Agent : Mozilla Thunderbird
I needed to do a quick file hack and came up with this. It's a cut down version of the library I use when writing applications. It will require customizing for other forths.
\ FILEHACK.F \ \ Simplified file handling (see example below) \ \ N.B. This was written for DX-Forth and will require modification \ for others. E.g. SYS SYSTEM APPLICATION BEHEAD '$FF AND' etc can \ be omitted and the codes in ?DERR adjusted to match your system. \ \ Public domain
sys @ base @
forth definitions decimal
system \ Create file handle - holds file-id and filename : HANDLE create -1 , max-path 1+ allot ; application
: !FNAME ( a u handle -- ) >r max-path min r> cell+ place ; : @FNAME ( handle -- a u ) cell+ count ;
: ?derr ( ior -- ) ?dup if space $FF and case 2 of ." file not found" endof 3 of ." path not found" endof 4 of ." too many open files" endof 5 of ." access denied" endof 6 of ." invalid handle" endof dup . ." DOS" endcase ." error" abort then ;
\ General functions using file-id : FREAD ( a u fid -- a u' ) 2>r dup 2r> read-file ?derr ; : FREADLN ( a u fid -- a u' n ) 2>r dup 2r> read-line ?derr ; : FWRITE ( a u fid -- ) write-file ?derr ; : FWRITELN ( a u fid -- ) write-line ?derr ; : FSEEK ( ud fid -- ) reposition-file ?derr ; : FPOS ( fid -- ud ) file-position ?derr ; : FCLOSE ( fid -- ) close-file drop ;