relicense to 0BSD
[pforth] / fth / save-input.fth
index e966969..7b53134 100644 (file)
@@ -1,44 +1,62 @@
 \ SAVE-INPUT and RESTORE-INPUT
 \ 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{
 
 
 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).
 ;
 
 \ 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
 
 
 }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 )
 \ 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 )
 ;
 
 : 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
 ;
 
 privatize