File Examples

Some examples are useful here. The following code segment types the contents of CALC.APP to the screen: Note: The code down to >here is assumed for all of the examples in this section.

(  file.fth )

-1 constant true
 0 constant false

variable fin
variable inbuf 100 allot

: list.file             ( --- )
   " calc.app" READ fopen    fin !
   begin
     inbuf 80 fin @ fgets
     if    ( Not EOF )
       inbuf count type
       false
     else   ( EOF )
       true
     then
   until
   fin @ fclose
   ;

list.file opens the file, calc.app, for READ access. fopen expects the filename address on the stack. The " compiles the filename into the dictionary. fopen returns the file descriptor, which is saved in fin. The file descriptor should really be checked for error before continuing. The loop reads each line into inbuf and types the contents to the screen. fgets returns the length of the line or zero at end of file. The loop exits on end of file and closes the file.

The next example copies a file, one character at a time. The code assumes the same variables etc from the previous example exist.

-1 constant true
 0 constant false

variable fout
variable fin
variable inbuf 100 allot

: copy.file
   " calc.app" READ  fopen   fin  !
   " xxx.xxx"  WRITE fopen   fout !
   begin
       fin @ fgetc
       dup
       true = 0=
       if ( not eof )
         fout @ fputc drop
         false
       else
         true
       then
   until
   fin @ fclose
   fout @ fclose
   ;
Opening the files is identical to the first example. The loop reads a character from the input file using fgetc and tests for end of file. Each character is written to the output file by fputc.

Add example using fputline, etc - block to text file converter would be nice...

File manipulation in Until is implemented indirectly via C I/O functions. The primary difference is passing arguments on the stack to the primitive, which in turn calls the corresponding C function.


Table of Contents
Next Section