/ source-store /

SOURCE!

description:


SOURCE!

( addr len -- )

Make the string described by c-addr and u the current input buffer.
Set >IN to zero.

A program is allowed to refill the input buffer without
restoring the original input source; upon a refill, the
system shall accept the new portion of text to the current
refill buffer and make it the input buffer.


Related words:
6.2.2148 RESTORE-INPUT, 6.2.2182 SAVE-INPUT,
6.2.2218 SOURCE-ID, 7.6.1.0790 BLK, 15.6.2.2148 RESTORE-INPUT,
6.2.2125 REFILL, 7.6.2.2125 REFILL, 11.6.2.2125 REFILL,
unstandard PARSE-AREA!.


See:

PARSE-AREA!
parse-area-store/index.html


Definition of terms:

the refill buffer: a region of memory that may be associated with
the current input source and be used by the system to obtain a
new portion of text from the input source.


Implementation:


One of the possible implementations is:

: SOURCE! ( c-addr len -- )
    #TIB ! 'TIB !  0 >IN ! 
;

This implementation is system-dependent in that it assumes that
the input buffer location and length are stored into the variables
'TIB and #TIB correspondingly.

In addition, the challenge is not to define SOURCE! , but to
redefine REFILL , SAVE-INPUT and RESTORE-INPUT so that the system
would not break if REFILL or SAVE-SOURCE are executed when
the current input source parameters are modified by SOURCE! .


Portability note:


This is an experimental proposal. Many existing systems do support
SOURCE!, but they require restoration of the input source parameters
before performing REFILL or SAVE-INPUT . So programs written for
portability should restore the input source specification themselves
before executing REFILL or SAVE-INPUT.

On the other hand, the implementors are advised to implement the input
source words so that execution of REFILL or SAVE-INPUT after SOURCE!
does not break the system. This may be achieved by maintaining
a separate pointer to the refill buffer: REFILL writes to the refill
buffer and sets the input buffer pointer to the refill buffer;
the parsing words use the input buffer pointer and never access the
refill buffer directly.




generated Wed Jul 23 02:53:35 2003mlg