Deleted Added
sdiff udiff text old ( 217644 ) new ( 222417 )
full compact
1\ Copyright (c) 2003 Scott Long <scottl@freebsd.org>
2\ Copyright (c) 2003 Aleksander Fafula <alex@fafula.com>
3\ All rights reserved.
4\
5\ Redistribution and use in source and binary forms, with or without
6\ modification, are permitted provided that the following conditions
7\ are met:
8\ 1. Redistributions of source code must retain the above copyright
9\ notice, this list of conditions and the following disclaimer.
10\ 2. Redistributions in binary form must reproduce the above copyright
11\ notice, this list of conditions and the following disclaimer in the
12\ documentation and/or other materials provided with the distribution.
13\
14\ THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15\ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16\ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17\ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18\ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19\ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20\ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21\ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22\ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23\ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24\ SUCH DAMAGE.
25\
26\ $FreeBSD: head/sys/boot/forth/beastie.4th 217644 2011-01-20 16:03:28Z jhb $
27
28marker task-beastie.4th
29
30include /boot/screen.4th
31include /boot/frames.4th
32
33hide
34
35variable menuidx
36variable menubllt
37variable menuX
38variable menuY
39variable promptwidth
40
41variable bootkey
42variable bootacpikey
43variable bootsafekey
44variable bootverbosekey
45variable bootsinglekey
46variable escapekey
47variable rebootkey
48
4946 constant dot
50
51\ The BSD Daemon. He is 19 rows high and 34 columns wide
52: beastie-logo ( x y -- )
532dup at-xy ." , ," 1+
542dup at-xy ." /( )`" 1+
552dup at-xy ." \ \___ / |" 1+
562dup at-xy ." /- _ `-/ '" 1+
572dup at-xy ." (/\/ \ \ /\" 1+
582dup at-xy ." / / | ` \" 1+
592dup at-xy ." O O ) / |" 1+
602dup at-xy ." `-^--'`< '" 1+
612dup at-xy ." (_.) _ ) /" 1+
622dup at-xy ." `.___/` / " 1+
632dup at-xy ." `-----' /" 1+
642dup at-xy ." <----. __ / __ \" 1+
652dup at-xy ." <----|====O)))==) \) /====|" 1+
662dup at-xy ." <----' `--' `.__,' \" 1+
672dup at-xy ." | |" 1+
682dup at-xy ." \ / /\" 1+
692dup at-xy ." ______( (_ / \______/" 1+
702dup at-xy ." ,' ,-----' |" 1+
71at-xy ." `--{__________) "
72;
73
74: beastiebw-logo ( x y -- )
75 2dup at-xy ." , ," 1+
76 2dup at-xy ." /( )`" 1+
77 2dup at-xy ." \ \___ / |" 1+
78 2dup at-xy ." /- _ `-/ '" 1+
79 2dup at-xy ." (/\/ \ \ /\" 1+
80 2dup at-xy ." / / | ` \" 1+
81 2dup at-xy ." O O ) / |" 1+
82 2dup at-xy ." `-^--'`< '" 1+
83 2dup at-xy ." (_.) _ ) /" 1+
84 2dup at-xy ." `.___/` /" 1+
85 2dup at-xy ." `-----' /" 1+
86 2dup at-xy ." <----. __ / __ \" 1+
87 2dup at-xy ." <----|====O)))==) \) /====" 1+
88 2dup at-xy ." <----' `--' `.__,' \" 1+
89 2dup at-xy ." | |" 1+
90 2dup at-xy ." \ / /\" 1+
91 2dup at-xy ." ______( (_ / \______/" 1+
92 2dup at-xy ." ,' ,-----' |" 1+
93 at-xy ." `--{__________)"
94;
95
96: fbsdbw-logo ( x y -- )
97 2dup at-xy ." ______" 1+
98 2dup at-xy ." | ____| __ ___ ___ " 1+
99 2dup at-xy ." | |__ | '__/ _ \/ _ \" 1+
100 2dup at-xy ." | __|| | | __/ __/" 1+
101 2dup at-xy ." | | | | | | |" 1+
102 2dup at-xy ." |_| |_| \___|\___|" 1+
103 2dup at-xy ." ____ _____ _____" 1+
104 2dup at-xy ." | _ \ / ____| __ \" 1+
105 2dup at-xy ." | |_) | (___ | | | |" 1+
106 2dup at-xy ." | _ < \___ \| | | |" 1+
107 2dup at-xy ." | |_) |____) | |__| |" 1+
108 2dup at-xy ." | | | |" 1+
109 at-xy ." |____/|_____/|_____/"
110;
111
112: print-logo ( x y -- )
113 s" loader_logo" getenv
114 dup -1 = if
115 drop
116 fbsdbw-logo
117 exit
118 then
119 2dup s" fbsdbw" compare-insensitive 0= if
120 2drop
121 fbsdbw-logo
122 exit
123 then
124 2dup s" beastiebw" compare-insensitive 0= if
125 2drop
126 beastiebw-logo
127 exit
128 then
129 2dup s" beastie" compare-insensitive 0= if
130 2drop
131 beastie-logo
132 exit
133 then
134 2dup s" none" compare-insensitive 0= if
135 2drop
136 \ no logo
137 exit
138 then
139 2drop
140 fbsdbw-logo
141;
142
143: acpipresent? ( -- flag )
144 s" hint.acpi.0.rsdp" getenv
145 dup -1 = if
146 drop false exit
147 then
148 2drop
149 true
150;
151
152: acpienabled? ( -- flag )
153 s" hint.acpi.0.disabled" getenv
154 dup -1 <> if
155 s" 0" compare 0<> if
156 false exit
157 then
158 else
159 drop
160 then
161 true
162;
163
164: printmenuitem ( -- n )
165 menuidx @
166 1+ dup
167 menuidx !
168 menuY @ + dup menuX @ swap at-xy
169 menuidx @ .
170 menuX @ 1+ swap at-xy
171 menubllt @ emit
172 menuidx @ 48 +
173;
174
175: beastie-menu ( -- )
176 0 menuidx !
177 dot menubllt !
178 8 menuY !
179 5 menuX !
180 clear
181 46 4 print-logo
182 42 20 2 2 box
183 13 6 at-xy ." Welcome to FreeBSD!"
184 printmenuitem ." Boot FreeBSD [default]" bootkey !
185 s" arch-i386" environment? if
186 drop
187 acpipresent? if
188 printmenuitem ." Boot FreeBSD with ACPI " bootacpikey !
189 acpienabled? if
190 ." disabled"
191 else
192 ." enabled"
193 then
194 else
195 menuidx @
196 1+
197 menuidx !
198 -2 bootacpikey !
199 then
200 else
201 -2 bootacpikey !
202 then
203 printmenuitem ." Boot FreeBSD in Safe Mode" bootsafekey !
204 printmenuitem ." Boot FreeBSD in single user mode" bootsinglekey !
205 printmenuitem ." Boot FreeBSD with verbose logging" bootverbosekey !
206 printmenuitem ." Escape to loader prompt" escapekey !
207 printmenuitem ." Reboot" rebootkey !
208 menuX @ 20 at-xy
209 ." Select option, [Enter] for default"
210 menuX @ 21 at-xy
211 s" or [Space] to pause timer " dup 2 - promptwidth !
212 type
213;
214
215: tkey
216 seconds +
217 begin 1 while
218 over 0<> if
219 dup seconds u< if
220 drop
221 -1
222 exit
223 then
224 menuX @ promptwidth @ + 21 at-xy dup seconds - .
225 then
226 key? if
227 drop
228 key
229 exit
230 then
231 50 ms
232 repeat
233;
234
235set-current
236
237: beastie-start
238 s" beastie_disable" getenv
239 dup -1 <> if
240 s" YES" compare-insensitive 0= if
241 exit
242 then
243 else
244 drop
245 then
246 beastie-menu
247 s" autoboot_delay" getenv
248 dup -1 = if
249 drop
250 10
251 else
252 2dup s" -1" compare 0= if
253 0 boot
254 then
255 0 s>d 2swap >number 2drop drop
256 then
257 begin
258 dup tkey
259 0 25 at-xy
260 dup 32 = if nip 0 swap then
261 dup -1 = if 0 boot then
262 dup 13 = if 0 boot then
263 dup bootkey @ = if 0 boot then
264 dup bootacpikey @ = if
265 acpienabled? if
266 s" 1" s" hint.acpi.0.disabled" setenv
267 s" 1" s" loader.acpi_disabled_by_user" setenv
268 else
269 s" 0" s" hint.acpi.0.disabled" setenv
270 then
271 0 boot
272 then
273 dup bootsafekey @ = if
274 s" arch-i386" environment? if
275 drop
276 s" 1" s" hint.acpi.0.disabled" setenv
277 s" 1" s" loader.acpi_disabled_by_user" setenv
278 s" 1" s" hint.apic.0.disabled" setenv
279 then
280 s" 0" s" hw.ata.ata_dma" setenv
281 s" 0" s" hw.ata.atapi_dma" setenv
282 s" 0" s" hw.ata.wc" setenv
283 s" 0" s" hw.eisa_slots" setenv
284 s" 1" s" hint.kbdmux.0.disabled" setenv
285 0 boot
286 then
287 dup bootverbosekey @ = if
288 s" YES" s" boot_verbose" setenv
289 0 boot
290 then
291 dup bootsinglekey @ = if
292 s" YES" s" boot_single" setenv
293 0 boot
294 then
295 dup escapekey @ = if
296 2drop
297 s" NO" s" autoboot_delay" setenv
298 exit
299 then
300 rebootkey @ = if 0 reboot then
301 again
302;
303
304previous