Use ASCII characters for box/line characters in frames.4th

Committed with changes to support the following from loader.conf(5):
+ console="vidconsole comconsole" (not just console="comconsole")
+ boot_serial="anything" (not just boot_serial="YES")
+ boot_multicons="anything" (unsupported in originally-submitted patch)

PR:		conf/121064
Submitted by:	koitsu
Reviewed by:	gcooper, adrian (co-mentor)
Approved by:	adrian (co-mentor)
This commit is contained in:
Devin Teske 2012-12-09 15:25:34 +00:00
parent 9fbf6da58c
commit 7a50e936c0
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=244048
2 changed files with 56 additions and 0 deletions

View file

@ -12,6 +12,11 @@ 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
@ -63,7 +68,17 @@ s" arch-pc98" environment? [if]
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 !
@ -73,6 +88,7 @@ s" arch-pc98" environment? [if]
;
: 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 !

View file

@ -201,6 +201,46 @@ create last_module_option sizeof module.next allot 0 last_module_option !
: getenv? getenv -1 = if false else drop true then ;
\ determine if a word appears in a string, case-insensitive
: contains? ( addr1 len1 addr2 len2 -- 0 | -1 )
2 pick 0= if 2drop 2drop true exit then
dup 0= if 2drop 2drop false exit then
begin
begin
swap dup c@ dup 32 = over 9 = or
over 10 = or over 13 = or swap drop
while 1+ swap 1- repeat
swap 2 pick 1- over <
while
2over 2over drop over compare-insensitive 0= if
2 pick over = if 2drop 2drop true exit then
2 pick tuck - -rot + swap over c@ dup 32 =
over 9 = or over 10 = or over 13 = or
swap drop if 2drop 2drop true exit then
then begin
swap dup c@
dup 32 = over 9 = or over 10 = or over 13 = or
swap drop if false else true then 2 pick 0> and
while 1+ swap 1- repeat
swap
repeat
2drop 2drop false
;
: boot_serial? ( -- 0 | -1 )
s" console" getenv dup -1 <> if
s" comconsole" 2swap contains?
else drop false then
s" boot_serial" getenv dup -1 <> if
swap drop 0>
else drop false then
or \ console contains comconsole ( or ) boot_serial
s" boot_multicons" getenv dup -1 <> if
swap drop 0>
else drop false then
or \ previous boolean ( or ) boot_multicons
;
\ Private definitions
vocabulary support-functions