home *** CD-ROM | disk | FTP | other *** search
- \ SAVESCR.SEQ Routine to save and restore screen. by Tom Zimmer
-
- FORTH DECIMAL TARGET >LIBRARY \ A Library file
-
- 0 value cur_svseg \ segment of previous saved screen
- 0 value svsize \ size of screen in bytes
-
- : new_svseg ( --- seg ) \ Get a segment to save screen in
- rows cols 2* * dup =: svsize \ size of screen
- 2+ paragraph alloc 8 = \ allocate the space
- if 2drop
- at? 0 0 at
- ." Failed to allocate memory for screen save! "
- beep
- at 0
- else nip
- then ;
-
- \ nestable save and restore up to memory allowable times
-
- : savescr ( --- )
- new_svseg ?dup 0= ?exit \ leave if failed
- cur_svseg over 0 !L \ save prev in cur
- dup =: cur_svseg \ set current
- video-seg @ 0 rot 2 svsize cmovel ; \ save the screen
-
-
- : restscr ( --- )
- cur_svseg 0= ?exit
- cur_svseg 2 video-seg @ 0 svsize cmovel \ Restore screen
- cur_svseg dup 0 @L =: cur_svseg
- dealloc
- if at? 0 0 at
- ." Failed to de-allocate memory from screen save! "
- beep
- at
- then ;
-
- : recoverscr ( --- ) \ get a copy of the current saved screen
- cur_svseg 0= ?exit
- cur_svseg 2 video-seg @ 0 svsize cmovel ;
-
- : recoverline ( n1 --- ) \ get a copy of line n1 from saved screen
- cur_svseg 0= if drop exit then
- dup 0 rows 1- between
- if cols 2* * >r \ Restore line n1
- cur_svseg r@ 2+ video-seg @ r> cols 2* cmovel
- else drop
- then ;
-
- FORTH TARGET >TARGET
-
-