remove vestigial special-case code for input from 'terminal' (stdin)

This commit is contained in:
Jesse D. McDonald 2020-11-15 18:30:10 -06:00
parent 35c6641a21
commit 1d930672bc
1 changed files with 26 additions and 56 deletions

View File

@ -2073,60 +2073,6 @@ FORTH DEFINITIONS
: PRESERVED ( i*x xt addr -- j*x ) : PRESERVED ( i*x xt addr -- j*x )
DUP @ >R >R CATCH 2R> ! RETHROW ; DUP @ >R >R CATCH 2R> ! RETHROW ;
SYSTEM DEFINITIONS
\ The size of this buffer will determine the maximum line length
4096 CONSTANT TERMINAL-BUFFER-BYTES
TERMINAL-BUFFER-BYTES BUFFER: TERMINAL-BUFFER
\ If we read more than one line then these will refer to the rest of the data
2VARIABLE TIB-LEFTOVER
NULL 0 TIB-LEFTOVER 2!
\ Placeholder for later support for input from files
DEFER REFILL-FROM-FILE
' FALSE IS REFILL-FROM-FILE
FORTH DEFINITIONS
\ Attempt to replace the parse area with the next line from the current source
\ Return TRUE if the parse area was refilled, or FALSE otherwise
\ REFILL always fails if the current source is a string (from EVALUATE)
:FINALIZE REFILL ( -- flag )
SOURCE-ID -1 = IF FALSE EXIT THEN
SOURCE-ID 0> IF REFILL-FROM-FILE EXIT THEN
\ Shift any leftover characters after the previous line to the start of the buffer
TIB-LEFTOVER 2@ TERMINAL-BUFFER SWAP DUP >R CMOVE
\ Look for the linefeed character which marks the end of the first line
R> 0 BEGIN
\ If at the end with room in the buffer, read more from the file descriptor
2DUP = IF
DUP TERMINAL-BUFFER-BYTES U< IF
STDIN OVER TERMINAL-BUFFER TERMINAL-BUFFER-BYTES ROT /STRING
( S: length idx src-id buff buff-size )
SYS_READ SYSCALL3-RETRY DUP 0< IF EXCP-FILE-IO THROW THEN
( S: length idx u-read )
\ Add the amount of data read to the length; index is unchanged
ROT + SWAP
THEN
THEN
\ At this point if index equals length then buffer is full or read returned 0
\ Either way, we won't be reading any more into the buffer
2DUP <>
WHILE
\ Check if the next character is a linefeed
1+ DUP 1- TERMINAL-BUFFER + C@ LF =
UNTIL
( S: length idx )
\ idx is the next location after the linefeed, if found, or else equal to length
\ Save the rest, if any, for the next REFILL
TUCK - >R TERMINAL-BUFFER OVER + R> TIB-LEFTOVER 2!
( S: idx )
\ The new input buffer is the first idx characters of the terminal buffer
TERMINAL-BUFFER OVER INPUT-BUFFER 2!
DUP IF 0 >IN ! THEN
0<> ;
UTILITY DEFINITIONS UTILITY DEFINITIONS
\ Parse up to limit digits in the given base, appending them to u1 to produce u2. \ Parse up to limit digits in the given base, appending them to u1 to produce u2.
@ -2836,6 +2782,7 @@ SYSTEM DEFINITIONS
STRUCT STRUCT
AA-NODE% FIELD FILE>NODE AA-NODE% FIELD FILE>NODE
CELL% FIELD FILE>FD CELL% FIELD FILE>FD
CELL% FIELD FILE>FLAGS
CELL% FIELD FILE>BUFFER CELL% FIELD FILE>BUFFER
2CELL% FIELD FILE>LEFTOVER 2CELL% FIELD FILE>LEFTOVER
2CELL% FIELD FILE>POSITION 2CELL% FIELD FILE>POSITION
@ -2875,6 +2822,7 @@ O_RDWR CONSTANT R/W ( -- fam )
-ROT MAKE-CSTRING ▪ FILE% %ALLOCATE ▪ NULL -ROT MAKE-CSTRING ▪ FILE% %ALLOCATE ▪ NULL
LOCALS| fam name file open-how | LOCALS| fam name file open-how |
open_how% %ALLOCA open-how! open_how% %ALLOCA open-how!
fam file FILE>FLAGS !
NULL file FILE>BUFFER ! NULL file FILE>BUFFER !
file CLEAR-LEFTOVER file CLEAR-LEFTOVER
0# file FILE>POSITION 2! 0# file FILE>POSITION 2!
@ -2954,6 +2902,11 @@ UTILITY DEFINITIONS
THEN THEN
RDROP ; RDROP ;
: RAW-FILE-POSITION ( fileid -- ud )
DUP FD>FILE DROP ▪ signed-long-long% %ALLOCA >R
0# SWAP ▪ R@ ▪ SEEK_CUR ▪ SYS__LLSEEK SYSCALL5-RETRY
0<> IF EXCP-FILE-IO THROW THEN ▪ R> 2@ SWAP ;
FORTH DEFINITIONS FORTH DEFINITIONS
: READ-FILE ( c-addr u1 fileid -- u2 ) : READ-FILE ( c-addr u1 fileid -- u2 )
@ -2984,6 +2937,17 @@ FORTH DEFINITIONS
UTILITY DEFINITIONS UTILITY DEFINITIONS
: OPEN-FD ( fd fam -- fileid )
FILE% %ALLOCATE
TUCK FILE>FLAGS !
NULL OVER FILE>BUFFER !
DUP CLEAR-LEFTOVER
DUP NULL 0 ROT FILE>SOURCE 2!
2DUP FILE>FD !
DUP FILES AA-INSERT
OVER [[ ' RAW-FILE-POSITION ]] CATCH IF DROP 0# THEN
ROT FILE>POSITION 2! ;
: REFILL-FILE ( fileid -- t=refilled ) : REFILL-FILE ( fileid -- t=refilled )
FD>FILE >R FD>FILE >R
R@ ENSURE-SOURCE R@ ENSURE-SOURCE
@ -2992,8 +2956,8 @@ UTILITY DEFINITIONS
SYSTEM DEFINITIONS SYSTEM DEFINITIONS
:FINALIZE REFILL-FROM-FILE ( -- t=refilled ) : REFILL-FROM-FILE ( -- t=refilled )
SOURCE-ID DUP 0< "not a valid file source" ?FAIL SOURCE-ID
DUP [[ ' REFILL-FILE ]] CATCH ?DUP IF DUP [[ ' REFILL-FILE ]] CATCH ?DUP IF
DUP EXCP-FILE-IO <> IF RETHROW THEN DUP EXCP-FILE-IO <> IF RETHROW THEN
DROP 2DROP FALSE EXIT DROP 2DROP FALSE EXIT
@ -3001,6 +2965,8 @@ SYSTEM DEFINITIONS
DUP IF ▪ OVER FD>FILE FILE>SOURCE 2@ ▪ INPUT-BUFFER 2! ▪ 0 >IN ! ▪ THEN DUP IF ▪ OVER FD>FILE FILE>SOURCE 2@ ▪ INPUT-BUFFER 2! ▪ 0 >IN ! ▪ THEN
NIP ; NIP ;
{ SOURCE-ID 0>= IF REFILL-FROM-FILE ELSE DEFERS REFILL THEN } IS REFILL
FORTH DEFINITIONS FORTH DEFINITIONS
: WRITE-FILE ( c-addr u fileid -- ) : WRITE-FILE ( c-addr u fileid -- )
@ -3045,6 +3011,10 @@ FORTH DEFINITIONS
SYSTEM DEFINITIONS SYSTEM DEFINITIONS
0 R/O OPEN-FD DROP
1 W/O OPEN-FD DROP
2 W/O OPEN-FD DROP
{ {
ONLY FORTH DEFINITIONS ONLY FORTH DEFINITIONS
ARGC 2 U>= IF ARGC 2 U>= IF