xref: /freebsd/stand/forth/screen.4th (revision 26a58599a09a6181e0f5abe624021865a0c23186)
1ca987d46SWarner Losh\ Copyright (c) 2003 Scott Long <scottl@FreeBSD.org>
2ca987d46SWarner Losh\ Copyright (c) 2015 Devin Teske <dteske@FreeBSD.org>
3ca987d46SWarner Losh\ All rights reserved.
4ca987d46SWarner Losh\
5ca987d46SWarner Losh\ Redistribution and use in source and binary forms, with or without
6ca987d46SWarner Losh\ modification, are permitted provided that the following conditions
7ca987d46SWarner Losh\ are met:
8ca987d46SWarner Losh\ 1. Redistributions of source code must retain the above copyright
9ca987d46SWarner Losh\    notice, this list of conditions and the following disclaimer.
10ca987d46SWarner Losh\ 2. Redistributions in binary form must reproduce the above copyright
11ca987d46SWarner Losh\    notice, this list of conditions and the following disclaimer in the
12ca987d46SWarner Losh\    documentation and/or other materials provided with the distribution.
13ca987d46SWarner Losh\
14ca987d46SWarner Losh\ THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15ca987d46SWarner Losh\ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16ca987d46SWarner Losh\ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17ca987d46SWarner Losh\ ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18ca987d46SWarner Losh\ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19ca987d46SWarner Losh\ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20ca987d46SWarner Losh\ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21ca987d46SWarner Losh\ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22ca987d46SWarner Losh\ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23ca987d46SWarner Losh\ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24ca987d46SWarner Losh\ SUCH DAMAGE.
25ca987d46SWarner Losh\
26ca987d46SWarner Losh
27ca987d46SWarner Loshmarker task-screen.4th
28ca987d46SWarner Losh
29ca987d46SWarner Losh\ emit Esc-[
30ca987d46SWarner Losh: escc ( -- ) 27 emit [char] [ emit ;
31ca987d46SWarner Losh
32ca987d46SWarner Losh\ Home cursor ( Esc-[H )
33ca987d46SWarner Losh: ho ( -- ) escc [char] H emit ;
34ca987d46SWarner Losh
35ca987d46SWarner Losh\ Clear from current position to end of display ( Esc-[J )
36ca987d46SWarner Losh: cld ( -- ) escc [char] J emit ;
37ca987d46SWarner Losh
38ca987d46SWarner Losh\ clear screen
39ca987d46SWarner Losh: clear ( -- ) ho cld ;
40ca987d46SWarner Losh
41*73531a2aSRyan Moeller\ reset to initial state
42*73531a2aSRyan Moeller: ris ( -- ) 27 emit [char] c emit ;
43*73531a2aSRyan Moeller
44ca987d46SWarner Losh\ move cursor to x rows, y cols (1-based coords) ( Esc-[%d;%dH )
45ca987d46SWarner Losh: at-xy ( x y -- ) escc .# [char] ; emit .# [char] H emit ;
46ca987d46SWarner Losh
47ca987d46SWarner Losh\ Set foreground color ( Esc-[3%dm )
48ca987d46SWarner Losh: fg ( x -- ) escc 3 .# .# [char] m emit ;
49ca987d46SWarner Losh
50ca987d46SWarner Losh\ Set background color ( Esc-[4%dm )
51ca987d46SWarner Losh: bg ( x -- ) escc 4 .# .# [char] m emit ;
52ca987d46SWarner Losh
53ca987d46SWarner Losh\ Mode end (clear attributes)
54ca987d46SWarner Losh: me ( -- ) escc [char] m emit ;
55ca987d46SWarner Losh
56ca987d46SWarner Losh\ Enable bold mode ( Esc-[1m )
57ca987d46SWarner Losh: b ( -- ) escc 1 .# [char] m emit ;
58ca987d46SWarner Losh
59ca987d46SWarner Losh\ Disable bold mode ( Esc-[22m )
60ca987d46SWarner Losh: -b ( -- ) escc 22 .# [char] m emit ;
61ca987d46SWarner Losh
62ca987d46SWarner Losh\ Enable inverse foreground/background mode ( Esc-[7m )
63ca987d46SWarner Losh: inv ( -- ) escc 7 .# [char] m emit ;
64ca987d46SWarner Losh
65ca987d46SWarner Losh\ Disable inverse foreground/background mode ( Esc-[27m )
66ca987d46SWarner Losh: -inv ( -- ) escc 27 .# [char] m emit ;
67ca987d46SWarner Losh
68ca987d46SWarner Losh\ Convert all occurrences of given character (c) in string (c-addr/u) to Esc
69ca987d46SWarner Losh: escc! ( c-addr/u c -- c-addr/u )
70ca987d46SWarner Losh	2 pick 2 pick
71ca987d46SWarner Losh	begin dup 0> while
72ca987d46SWarner Losh		over c@ 3 pick = if over 27 swap c! then
73ca987d46SWarner Losh		1- swap 1+ swap
74ca987d46SWarner Losh	repeat
75ca987d46SWarner Losh	2drop drop
76ca987d46SWarner Losh;
77