xref: /titanic_51/usr/src/boot/sys/boot/forth/frames.4th (revision 7ce1907c0459662053f07d97caeec82466301d65)
1\ Copyright (c) 2003 Scott Long <scottl@FreeBSD.org>
2\ Copyright (c) 2012-2015 Devin Teske <dteske@FreeBSD.org>
3\ All rights reserved.
4\
5\ Redistribution and use in source and binary forms, with or without
6\ modification, are permitted provided that the following conditions
7\ are met:
8\ 1. Redistributions of source code must retain the above copyright
9\    notice, this list of conditions and the following disclaimer.
10\ 2. Redistributions in binary form must reproduce the above copyright
11\    notice, this list of conditions and the following disclaimer in the
12\    documentation and/or other materials provided with the distribution.
13\
14\ THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15\ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16\ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17\ ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18\ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19\ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20\ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21\ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22\ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23\ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24\ SUCH DAMAGE.
25\
26
27marker task-frames.4th
28
29vocabulary frame-drawing
30only forth also frame-drawing definitions
31
32\ XXX Filled boxes are left as an exercise for the reader... ;-/
33
34variable h_el
35variable v_el
36variable lt_el
37variable lb_el
38variable rt_el
39variable rb_el
40variable fill
41
42\ ASCII frames (used when serial console is detected)
43 45 constant ascii_dash
44 61 constant ascii_equal
45124 constant ascii_pipe
46 43 constant ascii_plus
47
48\ Single frames
49196 constant sh_el
50179 constant sv_el
51218 constant slt_el
52192 constant slb_el
53191 constant srt_el
54217 constant srb_el
55\ Double frames
56205 constant dh_el
57186 constant dv_el
58201 constant dlt_el
59200 constant dlb_el
60187 constant drt_el
61188 constant drb_el
62\ Fillings
630 constant fill_none
6432 constant fill_blank
65176 constant fill_dark
66177 constant fill_med
67178 constant fill_bright
68
69only forth definitions also frame-drawing
70
71: hline	( len x y -- )	\ Draw horizontal single line
72	at-xy		\ move cursor
73	0 do
74		h_el @ emit
75	loop
76;
77
78: f_ascii ( -- )	( -- )	\ set frames to ascii
79	ascii_dash h_el !
80	ascii_pipe v_el !
81	ascii_plus lt_el !
82	ascii_plus lb_el !
83	ascii_plus rt_el !
84	ascii_plus rb_el !
85;
86
87: f_single	( -- )	\ set frames to single
88	boot_serial? if f_ascii exit then
89	sh_el h_el !
90	sv_el v_el !
91	slt_el lt_el !
92	slb_el lb_el !
93	srt_el rt_el !
94	srb_el rb_el !
95;
96
97: f_double	( -- )	\ set frames to double
98	boot_serial? if
99		f_ascii
100		ascii_equal h_el !
101		exit
102	then
103	dh_el h_el !
104	dv_el v_el !
105	dlt_el lt_el !
106	dlb_el lb_el !
107	drt_el rt_el !
108	drb_el rb_el !
109;
110
111: vline	( len x y -- )	\ Draw vertical single line
112	2dup 4 pick
113	0 do
114		at-xy
115		v_el @ emit
116		1+
117		2dup
118	loop
119	2drop 2drop drop
120;
121
122: box	( w h x y -- )	\ Draw a box
123	2dup 1+ 4 pick 1- -rot
124	vline		\ Draw left vert line
125	2dup 1+ swap 5 pick + swap 4 pick 1- -rot
126	vline		\ Draw right vert line
127	2dup swap 1+ swap 5 pick 1- -rot
128	hline		\ Draw top horiz line
129	2dup swap 1+ swap 4 pick + 5 pick 1- -rot
130	hline		\ Draw bottom horiz line
131	2dup at-xy lt_el @ emit	\ Draw left-top corner
132	2dup 4 pick + at-xy lb_el @ emit	\ Draw left bottom corner
133	2dup swap 5 pick + swap at-xy rt_el @ emit	\ Draw right top corner
134	2 pick + swap 3 pick + swap at-xy rb_el @ emit
135	2drop
136;
137
138f_single
139fill_none fill !
140
141only forth definitions
142