menu-commands.4th revision 243114
1\ Copyright (c) 2006-2012 Devin Teske <dteske@FreeBSD.org> 2\ All rights reserved. 3\ 4\ Redistribution and use in source and binary forms, with or without 5\ modification, are permitted provided that the following conditions 6\ are met: 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. 12\ 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 23\ SUCH DAMAGE. 24\ 25\ $FreeBSD: head/sys/boot/forth/menu-commands.4th 243114 2012-11-16 01:24:11Z dteske $ 26 27marker task-menu-commands.4th 28 29include /boot/menusets.4th 30 31variable kernel_state 32variable root_state 33 34\ 35\ ACPI 36\ 37 38: acpi_enable ( -- ) 39 s" set acpi_load=YES" evaluate \ XXX deprecated but harmless 40 s" set hint.acpi.0.disabled=0" evaluate 41 s" loader.acpi_disabled_by_user" unsetenv 42; 43 44: acpi_disable ( -- ) 45 s" acpi_load" unsetenv \ XXX deprecated but harmless 46 s" set hint.acpi.0.disabled=1" evaluate 47 s" set loader.acpi_disabled_by_user=1" evaluate 48; 49 50: toggle_acpi ( N -- N TRUE ) 51 52 \ Make changes effective _before_ calling menu-redraw 53 54 acpienabled? if 55 acpi_disable 56 else 57 acpi_enable 58 then 59 60 menu-redraw 61 62 TRUE \ loop menu again 63; 64 65\ 66\ Safe Mode 67\ 68 69: safemode_enabled? ( -- flag ) 70 s" kern.smp.disabled" getenv -1 <> dup if 71 swap drop ( c-addr flag -- flag ) 72 then 73; 74 75: safemode_enable ( -- ) 76 s" set kern.smp.disabled=1" evaluate 77 s" set hw.ata.ata_dma=0" evaluate 78 s" set hw.ata.atapi_dma=0" evaluate 79 s" set hw.ata.wc=0" evaluate 80 s" set hw.eisa_slots=0" evaluate 81 s" set kern.eventtimer.periodic=1" evaluate 82 s" set kern.geom.part.check_integrity=0" evaluate 83; 84 85: safemode_disable ( -- ) 86 s" kern.smp.disabled" unsetenv 87 s" hw.ata.ata_dma" unsetenv 88 s" hw.ata.atapi_dma" unsetenv 89 s" hw.ata.wc" unsetenv 90 s" hw.eisa_slots" unsetenv 91 s" kern.eventtimer.periodic" unsetenv 92 s" kern.geom.part.check_integrity" unsetenv 93; 94 95: init_safemode ( N -- N ) 96 safemode_enabled? if 97 toggle_menuitem ( n -- n ) 98 then 99; 100 101: toggle_safemode ( N -- N TRUE ) 102 toggle_menuitem 103 104 \ Now we're going to make the change effective 105 106 dup toggle_stateN @ 0= if 107 safemode_disable 108 else 109 safemode_enable 110 then 111 112 menu-redraw 113 114 TRUE \ loop menu again 115; 116 117\ 118\ Single User Mode 119\ 120 121: singleuser_enabled? ( -- flag ) 122 s" boot_single" getenv -1 <> dup if 123 swap drop ( c-addr flag -- flag ) 124 then 125; 126 127: singleuser_enable ( -- ) 128 s" set boot_single=YES" evaluate 129; 130 131: singleuser_disable ( -- ) 132 s" boot_single" unsetenv 133; 134 135: init_singleuser ( N -- N ) 136 singleuser_enabled? if 137 toggle_menuitem ( n -- n ) 138 then 139; 140 141: toggle_singleuser ( N -- N TRUE ) 142 toggle_menuitem 143 menu-redraw 144 145 \ Now we're going to make the change effective 146 147 dup toggle_stateN @ 0= if 148 singleuser_disable 149 else 150 singleuser_enable 151 then 152 153 TRUE \ loop menu again 154; 155 156\ 157\ Verbose Boot 158\ 159 160: verbose_enabled? ( -- flag ) 161 s" boot_verbose" getenv -1 <> dup if 162 swap drop ( c-addr flag -- flag ) 163 then 164; 165 166: verbose_enable ( -- ) 167 s" set boot_verbose=YES" evaluate 168; 169 170: verbose_disable ( -- ) 171 s" boot_verbose" unsetenv 172; 173 174: init_verbose ( N -- N ) 175 verbose_enabled? if 176 toggle_menuitem ( n -- n ) 177 then 178; 179 180: toggle_verbose ( N -- N TRUE ) 181 toggle_menuitem 182 menu-redraw 183 184 \ Now we're going to make the change effective 185 186 dup toggle_stateN @ 0= if 187 verbose_disable 188 else 189 verbose_enable 190 then 191 192 TRUE \ loop menu again 193; 194 195\ 196\ Escape to Prompt 197\ 198 199: goto_prompt ( N -- N FALSE ) 200 201 s" set autoboot_delay=NO" evaluate 202 203 cr 204 ." To get back to the menu, type `menu' and press ENTER" cr 205 ." or type `boot' and press ENTER to start FreeBSD." cr 206 cr 207 208 FALSE \ exit the menu 209; 210 211\ 212\ Cyclestate (used by kernel/root below) 213\ 214 215: init_cyclestate ( N K -- N ) 216 over cycle_stateN ( n k -- n k addr ) 217 begin 218 tuck @ ( n k addr -- n addr k c ) 219 over <> ( n addr k c -- n addr k 0|-1 ) 220 while 221 rot ( n addr k -- addr k n ) 222 cycle_menuitem 223 swap rot ( addr k n -- n k addr ) 224 repeat 225 2drop ( n k addr -- n ) 226; 227 228\ 229\ Kernel 230\ 231 232: init_kernel ( N -- N ) 233 kernel_state @ ( n -- n k ) 234 init_cyclestate ( n k -- n ) 235; 236 237: cycle_kernel ( N -- N TRUE ) 238 cycle_menuitem 239 menu-redraw 240 241 \ Now we're going to make the change effective 242 243 dup cycle_stateN @ 244 dup kernel_state ! \ save a copy for re-initialization 245 48 + \ convert to ASCII numeral 246 247 s" set kernel=${kernel_prefix}${kernel[N]}${kernel_suffix}" 248 36 +c! \ replace 'N' with ASCII numeral 249 evaluate \ sets $kernel to full kernel-path 250 251 TRUE \ loop menu again 252; 253 254\ 255\ Root 256\ 257 258: init_root ( N -- N ) 259 root_state @ ( n -- n k ) 260 init_cyclestate ( n k -- n ) 261; 262 263: cycle_root ( N -- N TRUE ) 264 cycle_menuitem 265 menu-redraw 266 267 \ Now we're going to make the change effective 268 269 dup cycle_stateN @ 270 dup root_state ! \ save a copy for re-initialization 271 48 + \ convert to ASCII numeral 272 273 s" set root=${root_prefix}${root[N]}${root_suffix}" 274 30 +c! \ replace 'N' with ASCII numeral 275 evaluate \ sets $root to full root-path 276 277 TRUE \ loop menu again 278; 279 280\ 281\ Menusets 282\ 283 284: goto_menu ( N M -- N TRUE ) 285 menu-unset 286 menuset-loadsetnum ( n m -- n ) 287 menu-redraw 288 TRUE \ Loop menu again 289; 290