1 \ Copyright (c) 2006-2012 Devin Teske <dteske@FreeBSD.org>
4 \ Redistribution and use in source and binary forms, with or without
5 \ modification, are permitted provided that the following conditions
7 \ 1. Redistributions of source code must retain the above copyright
8 \ notice, this list of conditions and the following disclaimer.
9 \ 2. Redistributions in binary form must reproduce the above copyright
10 \ notice, this list of conditions and the following disclaimer in the
11 \ documentation and/or other materials provided with the distribution.
13 \ THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
14 \ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15 \ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
16 \ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
17 \ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
18 \ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
19 \ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
20 \ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
21 \ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
22 \ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27 marker task-menu-commands.4th
29 include /boot/menusets.4th
38 : init_boot ( N -- N )
40 s" boot_single" getenv -1 <> if
41 drop ( n n c-addr -- n n ) \ unused
42 toggle_menuitem ( n n -- n n )
43 s" set menu_keycode[N]=115" \ base command to execute
45 s" set menu_keycode[N]=98" \ base command to execute
47 17 +c! \ replace 'N' with ASCII numeral
55 : init_altboot ( N -- N )
57 s" boot_single" getenv -1 <> if
58 drop ( n c-addr -- n ) \ unused
59 toggle_menuitem ( n -- n )
60 s" set menu_keycode[N]=109" \ base command to execute
62 s" set menu_keycode[N]=115" \ base command to execute
64 17 +c! \ replace 'N' with ASCII numeral
69 s" boot_single" 2dup getenv -1 <> if
70 drop ( c-addr/u c-addr -- c-addr/u ) \ unused
71 unsetenv ( c-addr/u -- )
73 2drop ( c-addr/u -- ) \ unused
74 s" set boot_single=YES" evaluate
84 s" set acpi_load=YES" evaluate \ XXX deprecated but harmless
85 s" set hint.acpi.0.disabled=0" evaluate
86 s" loader.acpi_disabled_by_user" unsetenv
90 s" acpi_load" unsetenv \ XXX deprecated but harmless
91 s" set hint.acpi.0.disabled=1" evaluate
92 s" set loader.acpi_disabled_by_user=1" evaluate
95 : toggle_acpi ( N -- N TRUE )
97 \ Make changes effective _before_ calling menu-redraw
107 TRUE \ loop menu again
114 : safemode_enabled? ( -- flag )
115 s" kern.smp.disabled" getenv -1 <> dup if
116 swap drop ( c-addr flag -- flag )
120 : safemode_enable ( -- )
121 s" set kern.smp.disabled=1" evaluate
122 s" set hw.ata.ata_dma=0" evaluate
123 s" set hw.ata.atapi_dma=0" evaluate
124 s" set hw.ata.wc=0" evaluate
125 s" set hw.eisa_slots=0" evaluate
126 s" set kern.eventtimer.periodic=1" evaluate
127 s" set kern.geom.part.check_integrity=0" evaluate
130 : safemode_disable ( -- )
131 s" kern.smp.disabled" unsetenv
132 s" hw.ata.ata_dma" unsetenv
133 s" hw.ata.atapi_dma" unsetenv
134 s" hw.ata.wc" unsetenv
135 s" hw.eisa_slots" unsetenv
136 s" kern.eventtimer.periodic" unsetenv
137 s" kern.geom.part.check_integrity" unsetenv
140 : init_safemode ( N -- N )
142 toggle_menuitem ( n -- n )
146 : toggle_safemode ( N -- N TRUE )
149 \ Now we're going to make the change effective
151 dup toggle_stateN @ 0= if
159 TRUE \ loop menu again
166 : singleuser_enabled? ( -- flag )
167 s" boot_single" getenv -1 <> dup if
168 swap drop ( c-addr flag -- flag )
172 : singleuser_enable ( -- )
173 s" set boot_single=YES" evaluate
176 : singleuser_disable ( -- )
177 s" boot_single" unsetenv
180 : init_singleuser ( N -- N )
181 singleuser_enabled? if
182 toggle_menuitem ( n -- n )
186 : toggle_singleuser ( N -- N TRUE )
190 \ Now we're going to make the change effective
192 dup toggle_stateN @ 0= if
198 TRUE \ loop menu again
205 : verbose_enabled? ( -- flag )
206 s" boot_verbose" getenv -1 <> dup if
207 swap drop ( c-addr flag -- flag )
211 : verbose_enable ( -- )
212 s" set boot_verbose=YES" evaluate
215 : verbose_disable ( -- )
216 s" boot_verbose" unsetenv
219 : init_verbose ( N -- N )
221 toggle_menuitem ( n -- n )
225 : toggle_verbose ( N -- N TRUE )
229 \ Now we're going to make the change effective
231 dup toggle_stateN @ 0= if
237 TRUE \ loop menu again
244 : goto_prompt ( N -- N FALSE )
246 s" set autoboot_delay=NO" evaluate
249 ." To get back to the menu, type `menu' and press ENTER" cr
250 ." or type `boot' and press ENTER to start FreeBSD." cr
253 FALSE \ exit the menu
257 \ Cyclestate (used by kernel/root below)
260 : init_cyclestate ( N K -- N )
261 over cycle_stateN ( n k -- n k addr )
263 tuck @ ( n k addr -- n addr k c )
264 over <> ( n addr k c -- n addr k 0|-1 )
266 rot ( n addr k -- addr k n )
268 swap rot ( addr k n -- n k addr )
270 2drop ( n k addr -- n )
277 : init_kernel ( N -- N )
278 kernel_state @ ( n -- n k )
279 init_cyclestate ( n k -- n )
282 : cycle_kernel ( N -- N TRUE )
286 \ Now we're going to make the change effective
289 dup kernel_state ! \ save a copy for re-initialization
290 48 + \ convert to ASCII numeral
292 s" set kernel=${kernel_prefix}${kernel[N]}${kernel_suffix}"
293 36 +c! \ replace 'N' with ASCII numeral
294 evaluate \ sets $kernel to full kernel-path
296 TRUE \ loop menu again
303 : init_root ( N -- N )
304 root_state @ ( n -- n k )
305 init_cyclestate ( n k -- n )
308 : cycle_root ( N -- N TRUE )
312 \ Now we're going to make the change effective
315 dup root_state ! \ save a copy for re-initialization
316 48 + \ convert to ASCII numeral
318 s" set root=${root_prefix}${root[N]}${root_suffix}"
319 30 +c! \ replace 'N' with ASCII numeral
320 evaluate \ sets $root to full root-path
322 TRUE \ loop menu again
329 : goto_menu ( N M -- N TRUE )
331 menuset-loadsetnum ( n m -- n )
333 TRUE \ Loop menu again
340 : set_default_boot_options ( N -- N TRUE )