summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
Diffstat (limited to 'sys')
-rw-r--r--sys/boot/forth/loader.4th19
-rw-r--r--sys/boot/forth/menu.4th70
-rw-r--r--sys/boot/forth/menu.4th.810
3 files changed, 81 insertions, 18 deletions
diff --git a/sys/boot/forth/loader.4th b/sys/boot/forth/loader.4th
index c765147..1205741 100644
--- a/sys/boot/forth/loader.4th
+++ b/sys/boot/forth/loader.4th
@@ -41,12 +41,15 @@ s" arch-i386" environment? [if] [if]
include /boot/support.4th
-\ ***** boot-conf
-\
-\ Prepares to boot as specified by loaded configuration files.
-
only forth also support-functions also builtins definitions
+: try-menu-unset
+ s" menu-unset"
+ ['] evaluate catch if
+ 2drop
+ then
+;
+
: boot
0= if ( interpreted ) get_arguments then
@@ -57,24 +60,32 @@ only forth also support-functions also builtins definitions
0 1 unload drop
else
s" kernelname" getenv? if ( a kernel has been loaded )
+ try-menu-unset
1 boot exit
then
load_kernel_and_modules
?dup if exit then
+ try-menu-unset
0 1 boot exit
then
else
s" kernelname" getenv? if ( a kernel has been loaded )
+ try-menu-unset
1 boot exit
then
load_kernel_and_modules
?dup if exit then
+ try-menu-unset
0 1 boot exit
then
load_kernel_and_modules
?dup 0= if 0 1 boot then
;
+\ ***** boot-conf
+\
+\ Prepares to boot as specified by loaded configuration files.
+
: boot-conf
0= if ( interpreted ) get_arguments then
0 1 unload drop
diff --git a/sys/boot/forth/menu.4th b/sys/boot/forth/menu.4th
index fbb6c16..daac6c8 100644
--- a/sys/boot/forth/menu.4th
+++ b/sys/boot/forth/menu.4th
@@ -131,11 +131,11 @@ create init_text8 255 allot
\ Print the value of menuidx
loader_color? if
- ." "
+ ." " (  )
then
menuidx @ .
loader_color? if
- ." "
+ ." " (  )
then
\ Move the cursor forward 1 column
@@ -897,22 +897,60 @@ create init_text8 255 allot
;
\ This function unsets all the possible environment variables associated with
-\ creating the interactive menu. Call this when you want to clear the menu
-\ area in preparation for another menu.
+\ creating the interactive menu.
\
-: menu-clear ( -- )
+: menu-unset ( -- )
49 \ Iterator start (loop range 49 to 56; ASCII '1' to '8')
begin
- \ basename for caption variable
- loader_color? if
- s" ansi_caption[x]"
- else
- s" menu_caption[x]"
- then
+ \ Unset variables in-order of appearance in menu.4th(8)
+
+ s" menu_caption[x]" \ basename for caption variable
-rot 2dup 13 + c! rot \ replace 'x' with current iteration
unsetenv \ not erroneous to unset unknown var
+ s" menu_command[x]" \ command basename
+ -rot 2dup 13 + c! rot \ replace 'x'
+ unsetenv
+
+ s" menu_keycode[x]" \ keycode basename
+ -rot 2dup 13 + c! rot \ replace 'x'
+ unsetenv
+
+ s" ansi_caption[x]" \ ANSI caption basename
+ -rot 2dup 13 + c! rot \ replace 'x'
+ unsetenv
+
+ s" toggled_text[x]" \ toggle_menuitem caption basename
+ -rot 2dup 13 + c! rot \ replace 'x'
+ unsetenv
+
+ s" toggled_ansi[x]" \ toggle_menuitem ANSI caption basename
+ -rot 2dup 13 + c! rot \ replace 'x'
+ unsetenv
+
+ s" menu_caption[x][y]" \ cycle_menuitem caption
+ -rot 2dup 13 + c! rot \ replace 'x'
+ 49 -rot
+ begin
+ 16 2over rot + c! \ replace 'y'
+ 2dup unsetenv
+
+ rot 1+ dup 56 > 2swap rot
+ until
+ 2drop drop
+
+ s" ansi_caption[x][y]" \ cycle_menuitem ANSI caption
+ -rot 2dup 13 + c! rot \ replace 'x'
+ 49 -rot
+ begin
+ 16 2over rot + c! \ replace 'y'
+ 2dup unsetenv
+
+ rot 1+ dup 56 > 2swap rot
+ until
+ 2drop drop
+
s" 0 menukeyN !" \ basename for key association var
-rot 2dup 9 + c! rot \ replace 'N' with current iteration
evaluate \ assign zero (0) to key assoc. var
@@ -921,6 +959,9 @@ create init_text8 255 allot
until
drop \ iterator
+ \ unset the timeout command
+ s" menu_timeout_command" unsetenv
+
\ clear the "Reboot" menu option flag
s" menu_reboot" unsetenv
0 menureboot !
@@ -933,6 +974,13 @@ create init_text8 255 allot
s" menu_options" unsetenv
0 menuoptions !
+;
+
+\ This function both unsets menu variables and visually erases the menu area
+\ in-preparation for another menu.
+\
+: menu-clear ( -- )
+ menu-unset
menu-erase
;
diff --git a/sys/boot/forth/menu.4th.8 b/sys/boot/forth/menu.4th.8
index 55cbfd1..dc00af8 100644
--- a/sys/boot/forth/menu.4th.8
+++ b/sys/boot/forth/menu.4th.8
@@ -24,7 +24,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd Aug 29, 2011
+.Dd Dec 27, 2011
.Dt MENU.4TH 8
.Os
.Sh NAME
@@ -69,9 +69,13 @@ Clears the screen area within the menu bounding box.
Calls
.Ic menu-erase
and then redraws the menu.
+.It Ic menu-unset
+Unsets the environment variables associated with individual menu items,
+clearing the way for a new menu.
.It Ic menu-clear
-Unsets all possible environment variables used
-to configure the menu and then calls
+Calls
+.Ic menu-unset
+and then
.Ic menu-erase .
.El
.Pp
OpenPOWER on IntegriCloud