X-Git-Url: http://git.subgeniuskitty.com/pforth/.git/blobdiff_plain/0868989592470c064bae35eea78a6d23669d1995..1f99f95d6a7eecc05cae8fb357f9b7bf564c2725:/fth/save-input.fth diff --git a/fth/save-input.fth b/fth/save-input.fth index e966969..7b53134 100644 --- a/fth/save-input.fth +++ b/fth/save-input.fth @@ -1,44 +1,62 @@ \ SAVE-INPUT and RESTORE-INPUT +\ +\ This code is part of pForth. +\ +\ Permission to use, copy, modify, and/or distribute this +\ software for any purpose with or without fee is hereby granted. +\ +\ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL +\ WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED +\ WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL +\ THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR +\ CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING +\ FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF +\ CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +\ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. anew task-save-input.fth private{ -: save-buffer ( -- column source-id 2 ) >in @ source-id 2 ; +: SAVE-BUFFER ( -- column source-id 2 ) >in @ source-id 2 ; -: restore-column ( column -- flag ) - source nip over < if drop true exit then - >in ! false +\ Restore >IN from COLUMN unless COLUMN is too large. Valid values +\ for COLUMN are from 0 to (including) the length of SOURCE plus one. +: RESTORE-COLUMN ( column -- flag ) + source nip 1+ over u< + IF drop true + ELSE >in ! false + THEN ; \ Return the file-position of the beginning of the current line in \ file SOURCE-ID. Assume that the current line is stored in SOURCE \ and that the current file-position is at an end-of-line (or \ end-of-file). -: line-start-position ( -- ud ) - source-id file-position throw - \ unless at end-of-file, subtract newline - source-id file-size throw 2over d= 0= if 1 s>d d- then - \ subtract line length - source nip s>d d- +: LINE-START-POSITION ( -- ud ) + source-id file-position throw + \ unless at end-of-file, subtract newline + source-id file-size throw 2over d= 0= IF 1 s>d d- THEN + \ subtract line length + source nip s>d d- ; -: save-file ( column line filepos:ud source-id 5 -- ) - >in @ - source-line-number@ - line-start-position - source-id - 5 +: SAVE-FILE ( column line filepos:ud source-id 5 -- ) + >in @ + source-line-number@ + line-start-position + source-id + 5 ; -: restore-file ( column line filepos:ud -- flag ) - source-id reposition-file if 2drop true exit then - source-line-number! - refill 0= if drop true exit then - restore-column +: RESTORE-FILE ( column line filepos:ud -- flag ) + source-id reposition-file IF 2drop true EXIT THEN + refill 0= IF 2drop true EXIT THEN + source-line-number! + restore-column ; -: ndrop ( n*x n -- ) 0 ?do drop loop ; +: NDROP ( n*x n -- ) 0 ?DO drop LOOP ; }private @@ -47,21 +65,21 @@ private{ \ keyboard >IN SourceID=(0) 2 \ file >IN lineNumber filePos SourceID=(fileID) 5 : SAVE-INPUT ( -- column {line filepos}? source-id n ) - source-id case - -1 of save-buffer endof - 0 of save-buffer endof - drop save-file exit - endcase + source-id CASE + -1 OF save-buffer ENDOF + 0 OF save-buffer ENDOF + drop save-file EXIT + ENDCASE ; : RESTORE-INPUT ( column {line filepos}? source-id n -- flag ) - over source-id <> if ndrop true exit then - drop - case - -1 of restore-column endof - 0 of restore-column endof - drop restore-file exit - endcase + over source-id <> IF ndrop true EXIT THEN + drop + CASE + -1 OF restore-column ENDOF + 0 OF restore-column ENDOF + drop restore-file EXIT + ENDCASE ; privatize