\ ansi.4th
\ ANSI Terminal words for 4tH
\ Copyright (c) 1999--2002 Krishna Myneni
\ Creative Consulting for Research and Education
\ This software is provided under the terms of the GNU
\ General Public License.
\ Revisions:
\ 1999-06-10
\ 1999-10-11 force cursor to 0 0 on page; define at-xy KM
\ 2000-01-23 replaced char with [char] for ANS Forth compatibility KM
\ 2002-08-29 use 0,0 as top left for AT-XY in accord with ANS Forth KM
\ 2003-03-27 created 4tH version HB
\ 2004-01-09 added conditional inclusion HB
\ 2004-07-15 added private declarations HB
\ Colors
[UNDEFINED] at-xy [IF]
0 constant BLACK
1 constant RED
2 constant GREEN
3 constant YELLOW
4 constant BLUE
5 constant MAGENTA
6 constant CYAN
7 constant WHITE
: save_base ( -- | store current base and set to decimal )
r> base @ >r >r decimal ;
: restore_base ( -- | restore original base )
r> r> base ! >r ;
: ansi_escape ( -- | output escape code )
27 emit [char] [ emit ;
: clrtoeol ( -- | clear to end of line )
ansi_escape [char] K emit ;
: gotoxy ( x y -- | position cursor at col x row y, origin is 1,1 )
save_base
ansi_escape 0 .r [char] ; emit
0 .r [char] H emit
restore_base ;
: at-xy ( x y -- | ANS compatible version of gotoxy, origin is 0,0 )
save_base
ansi_escape 1+ 0 .r [char] ; emit
1+ 0 .r [char] H emit
restore_base ;
: page ( -- | clear the screen and put cursor at top left )
ansi_escape [char] 2 emit [char] J emit 0 0 at-xy ;
: cur_up ( n -- | move cursor up by n lines )
save_base
ansi_escape 0 .r [char] A emit
restore_base ;
: cur_down ( n -- | move cursor down by n lines )
save_base
ansi_escape 0 .r [char] B emit
restore_base ;
: cur_left ( n -- | move cursor left by n columns )
save_base
ansi_escape 0 .r [char] D emit
restore_base ;
: cur_right ( n -- | move cursor right by n columns )
save_base
ansi_escape 0 .r [char] C emit
restore_base ;
: save_cursor ( -- | save current cursor position )
ansi_escape [char] s emit ;
: restore_cursor ( -- | restore cursor to previously saved position )
ansi_escape [char] u emit ;
: foreground ( n -- | set foreground color to n )
save_base
ansi_escape 30 + 0 .r [char] m emit
restore_base ;
: background ( n -- | set background color to n )
save_base
ansi_escape 40 + 0 .r [char] m emit
restore_base ;
: text_normal ( -- | set normal text display )
ansi_escape [char] 0 emit [char] m emit ;
: text_bold ( -- | set bold text )
ansi_escape [char] 1 emit [char] m emit ;
: text_underline ( -- | set underlined text )
save_base
ansi_escape [char] 4 emit [char] m emit
restore_base ;
: text_blink ( -- | set blinking text )
save_base
ansi_escape [char] 5 emit [char] m emit
restore_base ;
: text_reverse ( -- | set reverse video text )
save_base
ansi_escape [char] 7 emit [char] m emit
restore_base ;
[DEFINED] 4TH# [IF]
hide BLACK
hide RED
hide GREEN
hide YELLOW
hide BLUE
hide MAGENTA
hide CYAN
hide WHITE
hide save_base
hide restore_base
hide ansi_escape
[THEN]
[THEN]
|