Add a menu example making use of loader.4th(8) facilities.
Merge candidate, as it is just an example...
This commit is contained in:
parent
1a504336ad
commit
53e9784978
@ -3,15 +3,21 @@ new bootloader) together with terminal emulation code (available when
|
||||
compiling /sys/boot/i386/libi386 with -DTERM_EMU).
|
||||
|
||||
Normally, you can place the files in /boot as they are here, and they will be
|
||||
automatically loaded by /boot/loader.
|
||||
automatically loaded by /boot/loader. You must choose between boot.4th or
|
||||
loader.rc, though. Copy one or the other, but not both. Also, menu.4th is
|
||||
only used by boot.4th, and menuconf.4th is only used by loader.rc, so you
|
||||
don't need to copy both files.
|
||||
|
||||
The files are:
|
||||
|
||||
boot.4th example of file which is always loaded by /boot/loader, if
|
||||
present in /boot/
|
||||
loader.rc example of file which is always loader by /boot/loader, if
|
||||
present in /boot/
|
||||
screen.4th helpful words for screen manipulation.
|
||||
frames.4th basic frame drawing primitives. Requires screen.4th.
|
||||
menu.4th example of simple startup menu.
|
||||
menuconf.4th another example of simples startup menu.
|
||||
|
||||
You're encouraged to add more features to these files - I'm not a Forth
|
||||
hacker, unfortunately...
|
||||
@ -19,4 +25,11 @@ hacker, unfortunately...
|
||||
Andrzej Bialecki
|
||||
<abial@freebsd.org>
|
||||
|
||||
$Id$
|
||||
If you use loader.rc/menuconf.4th, be sure to create /boot/stable.conf and
|
||||
/boot/current.conf, like described in loader.conf(5), with appropriate
|
||||
configuration to distinguish one from the other.
|
||||
|
||||
Daniel C. Sobral
|
||||
<dcs@freebsd.org>
|
||||
|
||||
$Id: README,v 1.1 1998/12/22 12:15:45 abial Exp $
|
||||
|
34
share/examples/bootforth/loader.rc
Normal file
34
share/examples/bootforth/loader.rc
Normal file
@ -0,0 +1,34 @@
|
||||
\ Example of the file which is automatically loaded by /boot/loader
|
||||
\ on startup.
|
||||
\ $Id: boot.4th,v 1.1 1998/12/22 12:15:45 abial Exp $
|
||||
|
||||
cr .( Loading Forth extensions:)
|
||||
|
||||
\ Load configuration file words
|
||||
|
||||
cr .( - loader.4th...)
|
||||
|
||||
include /boot/loader.4th
|
||||
|
||||
\ Load the screen manipulation words
|
||||
|
||||
cr .( - screen.4th...)
|
||||
s" /boot/screen.4th" fopen dup fload fclose
|
||||
|
||||
\ Load frame support
|
||||
cr .( - frames.4th...)
|
||||
s" /boot/frames.4th" fopen dup fload fclose
|
||||
|
||||
\ Load our little menu
|
||||
cr .( - menuconf.4th...)
|
||||
s" /boot/menuconf.4th" fopen dup fload fclose
|
||||
|
||||
\ Initialize loader.4th stuff
|
||||
|
||||
cr cr .( Initializing loader.4th...)
|
||||
initialize
|
||||
|
||||
\ Show the menu
|
||||
cr
|
||||
main_menu
|
||||
|
110
share/examples/bootforth/menuconf.4th
Normal file
110
share/examples/bootforth/menuconf.4th
Normal file
@ -0,0 +1,110 @@
|
||||
\ 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
|
||||
;
|
||||
|
Loading…
Reference in New Issue
Block a user