freebsd-dev/share/examples/bootforth/menuconf.4th
Daniel C. Sobral 3a91f98cb8 Add a menu example making use of loader.4th(8) facilities.
Merge candidate, as it is just an example...
1999-05-14 18:06:27 +00:00

111 lines
1.8 KiB
Forth

\ Simple greeting screen, presenting basic options.
\ XXX This is far too trivial - I don't have time now to think
\ XXX about something more fancy... :-/
\ $Id$
: title
f_single
60 11 10 4 box
29 4 at-xy 15 fg 7 bg
." Welcome to BootFORTH!"
me
;
: menu
2 fg
20 7 at-xy
." 1. Start FreeBSD /boot/stable.conf."
20 8 at-xy
." 2. Start FreeBSD /boot/current.conf."
20 9 at-xy
." 3. Start FreeBSD /boot/loader.rc."
20 10 at-xy
." 4. Reboot."
me
;
: tkey ( d -- flag | char )
seconds +
begin 1 while
dup seconds u< if
drop
-1
exit
then
key? if
drop
key
exit
then
repeat
;
: prompt
14 fg
20 12 at-xy
." Enter your option (1,2,3,4): "
10 tkey
dup 32 = if
drop key
then
dup 0< if
drop 51
then
dup emit
me
;
: help_text
10 18 at-xy ." * Choose 1 or 2 to run special configuration file."
10 19 at-xy ." * Choose 3 to proceed with standard bootstrapping."
12 20 at-xy ." See '?' for available commands, and 'words' for"
12 21 at-xy ." complete list of Forth words."
10 22 at-xy ." * Choose 4 in order to warm boot your machine."
;
: (reboot) 0 reboot ;
: main_menu
begin 1 while
clear
f_double
79 23 1 1 box
title
menu
help_text
prompt
cr cr cr
dup 49 = if
drop
1 25 at-xy cr
." Loading /boot/stable.conf. Please wait..." cr
s" /boot/stable.conf" read-conf
boot-conf
then
dup 50 = if
drop
1 25 at-xy cr
." Loading /boot/current.conf. Please wait..." cr
s" /boot/current.conf" read-conf
boot-conf
then
dup 51 = if
drop
1 25 at-xy cr
." Proceeding with standard boot. Please wait..." cr
boot-conf
then
dup 52 = if
drop
1 25 at-xy cr
['] (reboot) catch abort" Error rebooting"
then
20 12 at-xy
." Key " emit ." is not a valid option!"
20 13 at-xy
." Press any key to continue..."
key drop
repeat
;