vt100.fs 2.34 KB
Newer Older
1 2
\ VT100.STR     VT100 excape sequences                  20may93jaw

Anton Ertl's avatar
Anton Ertl committed
3
\ Copyright (C) 1995,1999,2000,2003,2007,2012,2013,2014,2016,2018 Free Software Foundation, Inc.
anton's avatar
anton committed
4 5 6 7 8

\ This file is part of Gforth.

\ Gforth is free software; you can redistribute it and/or
\ modify it under the terms of the GNU General Public License
9
\ as published by the Free Software Foundation, either version 3
anton's avatar
anton committed
10 11 12 13 14 15 16 17
\ of the License, or (at your option) any later version.

\ This program is distributed in the hope that it will be useful,
\ but WITHOUT ANY WARRANTY; without even the implied warranty of
\ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
\ GNU General Public License for more details.

\ You should have received a copy of the GNU General Public License
18
\ along with this program. If not, see http://www.gnu.org/licenses/.
anton's avatar
anton committed
19

20 21
decimal

22 23
[IFUNDEF] #esc  27 Constant #esc  [THEN]

24 25 26 27
: #n ( n -- )  [: 0 #s 2drop ;] #10 base-execute ;
: #n; ( n -- )  [: 0 #s 2drop ';' hold ;] #10 base-execute ;
: #esc[ ( -- ) '[' hold #esc hold ;

28
: pn    base @ swap decimal 0 u.r base ! ;
29 30
: ;pn   ';' emit pn ;
: ESC[  #esc emit '[' emit ;
31

pazsan's avatar
pazsan committed
32
: vt100-at-xy ( u1 u2 -- ) \ facility at-x-y
crook's avatar
crook committed
33 34 35
  \G Position the cursor so that subsequent text output will take
  \G place at column @var{u1}, row @var{u2} of the display. (column 0,
  \G row 0 is the top left-hand corner of the display).
36
  1+ swap 1+ <<# 'H' hold #n; #n #esc[ #0. #> type #>> ;
37

38 39 40 41 42
[IFUNDEF] at-deltaxy  Defer at-deltaxy [THEN]
: vt100-at-deltaxy ( x y -- )
    \G position the cursor relative to the current cursor position
    \G by adding @var{x} to the column and @var{y} to the row, negative
    \G numbers move up and left, positive down and right.
43
    \ over 0< over 0= and IF  drop abs backspaces  EXIT  THEN
44
    [: <<#
Bernd Paysan's avatar
Bernd Paysan committed
45 46
      ?dup-IF
	  dup 0< IF  'A'  ELSE  'B'  THEN  hold abs 0 #s 2drop #esc[
47
      THEN
Bernd Paysan's avatar
Bernd Paysan committed
48 49
      ?dup-IF
	  dup 0< IF  'D'  ELSE  'C'  THEN  hold abs 0 #s 2drop #esc[
50
      THEN #0. #> type #>> ;] #10 base-execute ;
51

pazsan's avatar
pazsan committed
52
: vt100-page ( -- ) \ facility
53 54
  \G Clear the display and set the cursor to the top left-hand
  \G corner.
55
  <<# s" [2J" holds #esc hold #0. #> type #>> 0 0 at-xy ;
56

pazsan's avatar
pazsan committed
57
' vt100-at-xy IS at-xy
58 59 60 61 62 63 64 65 66 67 68
' vt100-at-deltaxy IS at-deltaxy
' vt100-page IS page

[IFDEF] debug-out
    debug-out op-vector !
    
    ' vt100-at-xy IS at-xy
    ' vt100-at-deltaxy IS at-deltaxy
    ' vt100-page IS page
    
    default-out op-vector !
69
[THEN]