]> CyberLeo.Net >> Repos - FreeBSD/releng/10.0.git/blob - share/examples/bootforth/menu.4th
- Copy stable/10 (r259064) to releng/10.0 as part of the
[FreeBSD/releng/10.0.git] / share / examples / bootforth / menu.4th
1 \ Simple greeting screen, presenting basic options.
2 \ XXX This is far too trivial - I don't have time now to think
3 \ XXX about something more fancy... :-/
4 \ $FreeBSD$
5
6 : title
7         f_single
8         60 11 10 4 box
9         29 4 at-xy 15 fg 7 bg
10         ." Welcome to BootFORTH!"
11         me
12 ;
13
14 : menu
15         2 fg
16         20 7 at-xy 
17         ." 1.  Start FreeBSD /kernel."
18         20 8 at-xy
19         ." 2.  Interact with BootFORTH."
20         20 9 at-xy
21         ." 3.  Reboot."
22         me
23 ;
24
25 : tkey  ( d -- flag | char )
26         seconds +
27         begin 1 while
28             dup seconds u< if
29                 drop
30                 -1
31                 exit
32             then
33             key? if
34                 drop
35                 key
36                 exit
37             then
38         repeat
39 ;
40
41 : prompt
42         14 fg
43         20 11 at-xy
44         ." Enter your option (1,2,3): "
45         10 tkey
46         dup 32 = if
47             drop key
48         then
49         dup 0< if
50             drop 49
51         then
52         dup emit
53         me
54 ;
55
56 : help_text
57         10 18 at-xy ." * Choose 1 if you just want to run FreeBSD."
58         10 19 at-xy ." * Choose 2 if you want to use bootloader facilities."
59         12 20 at-xy ." See '?' for available commands, and 'words' for"
60         12 21 at-xy ." complete list of Forth words."
61         10 22 at-xy ." * Choose 3 in order to warm boot your machine."
62 ;
63
64 : (boot) 0 boot ;
65 : (reboot) 0 reboot ;
66
67 : main_menu
68         begin 1 while
69                 clear
70                 f_double
71                 79 23 1 1 box
72                 title
73                 menu
74                 help_text
75                 prompt
76                 cr cr cr
77                 dup 49 = if
78                         drop
79                         1 25 at-xy cr
80                         ." Loading kernel. Please wait..." cr
81                         ['] (boot) catch abort" Error booting"
82                 then
83                 dup 50 = if
84                         drop
85                         1 25 at-xy cr
86                         exit
87                 then
88                 dup 51 = if
89                         drop
90                         1 25 at-xy cr
91                         ['] (reboot) catch abort" Error rebooting"
92                 then
93                 20 12 at-xy
94                 ." Key " emit ."  is not a valid option!"
95                 20 13 at-xy
96                 ." Press any key to continue..."
97                 key drop
98         repeat
99 ;