retroforth/example/VT100.retro
crc 848ba7303b use .retro instead of .forth in examples
FossilOrigin-Name: b5feea667d30aac255d1cfca61fed355d438d2ce6021677f1e53af6302b15eee
2019-08-20 18:46:40 +00:00

146 lines
2 KiB
Forth

# VT100
This is a namespace for working with VT100/ANSI escape sequences. It's
intended to help make it easier to create TUI (textual user interface)
based applications.
## Base Functionality
~~~
:VT100:escape (-)
ASCII:ESC c:put ;
~~~
Everything starts with an ESCAPE character.
## Terminal Setup
~~~
:VT100:reset (-)
VT100:escape $c c:put ;
~~~
~~~
:VT100:enable-line-wrap (-)
VT100:escape '[7h s:put ;
~~~
~~~
:VT100:disable-line-wrap (-)
VT100:escape '[7l s:put ;
~~~
## Fonts
~~~
:VT100:default-font (-)
VT100:escape $( c:put ;
~~~
~~~
:VT100:alternate-font (-)
VT100:escape $) c:put ;
~~~
Cursor Control
~~~
:VT100:cursor:home (-)
VT100:escape '[0;0H s:put ;
~~~
~~~
:VT100:cursor:move (rc-)
VT100:escape
swap '[%n;%nH s:format s:put ;
~~~
~~~
:VT100:cursor:down (n-)
VT100:escape '[%nB s:format s:put ;
~~~
~~~
:VT100:cursor:up (n-)
VT100:escape '[%nA s:format s:put ;
~~~
~~~
:VT100:cursor:forward (n-)
VT100:escape '[%nC s:format s:put ;
~~~
~~~
:VT100:cursor:back (n-)
VT100:escape '[%nD s:format s:put ;
~~~
~~~
:VT100:cursor:save (-)
VT100:escape '[s s:put ;
~~~
~~~
:VT100:cursor:restore (-)
VT100:escape '[u s:put ;
~~~
~~~
:VT100:cursor:save-attributes (-)
VT100:escape '[7 s:put ;
~~~
~~~
:VT100:cursor:restore-attributes (-)
VT100:escape '[8 s:put ;
~~~
## Attributes
~~~
:VT100:color (s-n)
'black [ #30 ] s:case
'red [ #31 ] s:case
'green [ #32 ] s:case
'yellow [ #33 ] s:case
'blue [ #34 ] s:case
'magenta [ #35 ] s:case
'cyan [ #36 ] s:case
drop #37 ;
~~~
~~~
:VT100:foreground (n-n) ;
~~~
~~~
:VT100:background (n-n) #10 + ;
~~~
~~~
:VT100:set (n-)
VT100:escape '[%nm s:format s:put ;
~~~
~~~
:VT100:clear (-)
VT100:escape '[2J s:put ;
~~~
## Example:
```
VT100:clear
#10 #15 VT100:cursor:move
'red VT100:color VT100:foreground VT100:set
'Hello_World! s:put nl
#11 #15 VT100:cursor:move
'cyan VT100:color VT100:foreground VT100:set
'Press_a_key_to_exit s:put nl
c:get drop
VT100:reset
```