home *** CD-ROM | disk | FTP | other *** search
Text File | 1995-03-22 | 2.3 KB | 86 lines | [TEXT/ALFA] |
-
- ( STDIO.4TH -- Standard I/O words for QForth, including disk I/O and )
- ( string functions. )
- ( )
- ( Ronald T. Kneusel, 01/31/95 )
-
- ( Last Mod: 02/03/95 )
-
- ( =================================================================== )
-
-
- ( Disk access routines )
-
- ( Misc utility words )
-
- 256 constant $MAX$ ( maximum string length )
-
- variable $file# ( file number = 0, 1, or 2 )
- variable $addr# ( address of string )
- variable $char# ( a single character )
-
- : $file $file# @ ; ( return file number )
- : $addr $addr# @ ; ( return string address )
-
- ( Get and Put characters )
-
- : fget ( file# -- char ec ) ( get a character from disk )
- $char# 1 fread swap drop $char# c@ 127 b.and swap ;
-
- : fput ( char file# -- ec ) ( put a character to disk )
- swap $char# c! $char# 1 fwrite swap drop ;
-
- ( Read a string from disk )
-
- : fread$ ( file# addr -- )
- $addr# ! $file# ! ( store file number and string address )
- $MAX$ 0 do
- $file fget ( get a character )
- 0 = if ( no ProDOS error )
- dup 13 = if
- drop 0 $addr i + c! leave ( '\n' character )
- else
- $addr i + c! ( read next character )
- then
- else
- drop 0 $addr i + c! leave ( error, bomb out )
- then
- loop
- ;
-
- ( Write a string to disk )
-
- : fwrite$ ( file# addr -- )
- $addr# ! $file# !
- $MAX$ 0 do
- $addr i + c@ ( get a character )
- dup 0 = if
- drop ( end-of-string, output '\n' )
- 13 $file fput drop
- $MAX$
- else
- $file fput drop ( send character to disk )
- 1
- then
- +loop
- ;
-
- ( ==================================================================== )
-
- ( String I/O )
-
- : $get ( addr -- ) ( get a null terminated string )
- dup >r $MAX$ expect 0 r> span + c!
- ;
-
- : len ( addr -- len ) ( string length )
- 0 swap dup $MAX$ + swap do
- i c@ 0 = if leave else 1+ then
- loop
- ;
-
- : TYPE ( addr -- ) ( display a string )
- dup $MAX$ + swap do i c@ dup 0 = if drop leave else emit then loop
- ;
-
-