summaryrefslogtreecommitdiffstats
path: root/sys/boot
diff options
context:
space:
mode:
authordteske <dteske@FreeBSD.org>2012-12-09 15:25:34 +0000
committerdteske <dteske@FreeBSD.org>2012-12-09 15:25:34 +0000
commitc0f1ef5356bfc5e3317f5b2d3bcc64634c9d35df (patch)
tree7dd9b6dc14e30b7639d0a1027915afcc11832f3f /sys/boot
parent579b7fb881c6b927bb99bdb56524f40a0e6c26f6 (diff)
downloadFreeBSD-src-c0f1ef5356bfc5e3317f5b2d3bcc64634c9d35df.zip
FreeBSD-src-c0f1ef5356bfc5e3317f5b2d3bcc64634c9d35df.tar.gz
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)
Diffstat (limited to 'sys/boot')
-rw-r--r--sys/boot/forth/frames.4th16
-rw-r--r--sys/boot/forth/support.4th40
2 files changed, 56 insertions, 0 deletions
diff --git a/sys/boot/forth/frames.4th b/sys/boot/forth/frames.4th
index 3b1f404..5d6df24 100644
--- a/sys/boot/forth/frames.4th
+++ b/sys/boot/forth/frames.4th
@@ -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 !
diff --git a/sys/boot/forth/support.4th b/sys/boot/forth/support.4th
index 3dbeae8..4a01af0 100644
--- a/sys/boot/forth/support.4th
+++ b/sys/boot/forth/support.4th
@@ -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
OpenPOWER on IntegriCloud