summaryrefslogtreecommitdiffstats
path: root/sys/boot/forth/frames.4th
blob: 5d6df243a27ea16277c8649058415cbe3fc56392 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
\ Words implementing frame drawing
\ XXX Filled boxes are left as an exercise for the reader... ;-/
\ $FreeBSD$

marker task-frames.4th

variable h_el
variable v_el
variable lt_el
variable lb_el
variable rt_el
variable rb_el
variable fill

\ ASCII frames (used when serial console is detected)
 45 constant ascii_dash
124 constant ascii_pipe
 43 constant ascii_plus

s" arch-pc98" environment? [if]
	\ Single frames
	149 constant sh_el
	150 constant sv_el
	152 constant slt_el
	154 constant slb_el
	153 constant srt_el
	155 constant srb_el
	\ Double frames
	149 constant dh_el
	150 constant dv_el
	152 constant dlt_el
	154 constant dlb_el
	153 constant drt_el
	155 constant drb_el
	\ Fillings
	0 constant fill_none
	32 constant fill_blank
	135 constant fill_dark
	135 constant fill_med
	135 constant fill_bright
[else]
	\ Single frames
	196 constant sh_el
	179 constant sv_el
	218 constant slt_el
	192 constant slb_el
	191 constant srt_el
	217 constant srb_el
	\ Double frames
	205 constant dh_el
	186 constant dv_el
	201 constant dlt_el
	200 constant dlb_el
	187 constant drt_el
	188 constant drb_el
	\ Fillings
	0 constant fill_none
	32 constant fill_blank
	176 constant fill_dark
	177 constant fill_med
	178 constant fill_bright
[then]

: hline	( len x y -- )	\ Draw horizontal single line
	at-xy		\ move cursor
	0 do
		h_el @ emit
	loop
;

: f_ascii ( -- )	( -- )	\ set frames to ascii
	ascii_dash h_el !
	ascii_pipe v_el !
	ascii_plus lt_el !
	ascii_plus lb_el !
	ascii_plus rt_el !
	ascii_plus rb_el !
;

: f_single	( -- )	\ set frames to single
	boot_serial? if f_ascii exit then
	sh_el h_el !
	sv_el v_el !
	slt_el lt_el !
	slb_el lb_el !
	srt_el rt_el !
	srb_el rb_el !
;

: f_double	( -- )	\ set frames to double
	boot_serial? if f_ascii exit then
	dh_el h_el !
	dv_el v_el !
	dlt_el lt_el !
	dlb_el lb_el !
	drt_el rt_el !
	drb_el rb_el !
;

: vline	( len x y -- )	\ Draw vertical single line
	2dup 4 pick
	0 do
		at-xy
		v_el @ emit
		1+
		2dup
	loop
	2drop 2drop drop
;

: box	( w h x y -- )	\ Draw a box
	2dup 1+ 4 pick 1- -rot
	vline		\ Draw left vert line
	2dup 1+ swap 5 pick + swap 4 pick 1- -rot
	vline		\ Draw right vert line
	2dup swap 1+ swap 5 pick 1- -rot
	hline		\ Draw top horiz line
	2dup swap 1+ swap 4 pick + 5 pick 1- -rot
	hline		\ Draw bottom horiz line
	2dup at-xy lt_el @ emit	\ Draw left-top corner
	2dup 4 pick + at-xy lb_el @ emit	\ Draw left bottom corner
	2dup swap 5 pick + swap at-xy rt_el @ emit	\ Draw right top corner
	2 pick + swap 3 pick + swap at-xy rb_el @ emit
	2drop
;

f_single
fill_none fill !
OpenPOWER on IntegriCloud