menu-commands.4th revision 243114
1241310Sdteske\ Copyright (c) 2006-2012 Devin Teske <dteske@FreeBSD.org> 2222417Sjulian\ All rights reserved. 3222417Sjulian\ 4222417Sjulian\ Redistribution and use in source and binary forms, with or without 5222417Sjulian\ modification, are permitted provided that the following conditions 6222417Sjulian\ are met: 7222417Sjulian\ 1. Redistributions of source code must retain the above copyright 8222417Sjulian\ notice, this list of conditions and the following disclaimer. 9222417Sjulian\ 2. Redistributions in binary form must reproduce the above copyright 10222417Sjulian\ notice, this list of conditions and the following disclaimer in the 11222417Sjulian\ documentation and/or other materials provided with the distribution. 12222417Sjulian\ 13222417Sjulian\ THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 14222417Sjulian\ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 15222417Sjulian\ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 16222417Sjulian\ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 17222417Sjulian\ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 18222417Sjulian\ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 19222417Sjulian\ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 20222417Sjulian\ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 21222417Sjulian\ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 22222417Sjulian\ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 23222417Sjulian\ SUCH DAMAGE. 24222417Sjulian\ 25222417Sjulian\ $FreeBSD: head/sys/boot/forth/menu-commands.4th 243114 2012-11-16 01:24:11Z dteske $ 26222417Sjulian 27222417Sjulianmarker task-menu-commands.4th 28222417Sjulian 29242667Sdteskeinclude /boot/menusets.4th 30242667Sdteske 31241523Sdteskevariable kernel_state 32241523Sdteskevariable root_state 33241523Sdteske 34243114Sdteske\ 35243114Sdteske\ ACPI 36243114Sdteske\ 37243114Sdteske 38222417Sjulian: acpi_enable ( -- ) 39222417Sjulian s" set acpi_load=YES" evaluate \ XXX deprecated but harmless 40222417Sjulian s" set hint.acpi.0.disabled=0" evaluate 41222417Sjulian s" loader.acpi_disabled_by_user" unsetenv 42222417Sjulian; 43222417Sjulian 44222417Sjulian: acpi_disable ( -- ) 45222417Sjulian s" acpi_load" unsetenv \ XXX deprecated but harmless 46222417Sjulian s" set hint.acpi.0.disabled=1" evaluate 47222417Sjulian s" set loader.acpi_disabled_by_user=1" evaluate 48222417Sjulian; 49222417Sjulian 50222417Sjulian: toggle_acpi ( N -- N TRUE ) 51222417Sjulian 52222417Sjulian \ Make changes effective _before_ calling menu-redraw 53222417Sjulian 54222417Sjulian acpienabled? if 55222417Sjulian acpi_disable 56222417Sjulian else 57222417Sjulian acpi_enable 58222417Sjulian then 59222417Sjulian 60222417Sjulian menu-redraw 61222417Sjulian 62222417Sjulian TRUE \ loop menu again 63222417Sjulian; 64222417Sjulian 65243114Sdteske\ 66243114Sdteske\ Safe Mode 67243114Sdteske\ 68243114Sdteske 69243114Sdteske: safemode_enabled? ( -- flag ) 70243114Sdteske s" kern.smp.disabled" getenv -1 <> dup if 71243114Sdteske swap drop ( c-addr flag -- flag ) 72243114Sdteske then 73243114Sdteske; 74243114Sdteske 75243114Sdteske: safemode_enable ( -- ) 76243114Sdteske s" set kern.smp.disabled=1" evaluate 77243114Sdteske s" set hw.ata.ata_dma=0" evaluate 78243114Sdteske s" set hw.ata.atapi_dma=0" evaluate 79243114Sdteske s" set hw.ata.wc=0" evaluate 80243114Sdteske s" set hw.eisa_slots=0" evaluate 81243114Sdteske s" set kern.eventtimer.periodic=1" evaluate 82243114Sdteske s" set kern.geom.part.check_integrity=0" evaluate 83243114Sdteske; 84243114Sdteske 85243114Sdteske: safemode_disable ( -- ) 86243114Sdteske s" kern.smp.disabled" unsetenv 87243114Sdteske s" hw.ata.ata_dma" unsetenv 88243114Sdteske s" hw.ata.atapi_dma" unsetenv 89243114Sdteske s" hw.ata.wc" unsetenv 90243114Sdteske s" hw.eisa_slots" unsetenv 91243114Sdteske s" kern.eventtimer.periodic" unsetenv 92243114Sdteske s" kern.geom.part.check_integrity" unsetenv 93243114Sdteske; 94243114Sdteske 95241523Sdteske: init_safemode ( N -- N ) 96243114Sdteske safemode_enabled? if 97241523Sdteske toggle_menuitem ( n -- n ) 98241523Sdteske then 99241523Sdteske; 100241523Sdteske 101222417Sjulian: toggle_safemode ( N -- N TRUE ) 102222417Sjulian toggle_menuitem 103222417Sjulian 104222417Sjulian \ Now we're going to make the change effective 105222417Sjulian 106243114Sdteske dup toggle_stateN @ 0= if 107243114Sdteske safemode_disable 108222417Sjulian else 109243114Sdteske safemode_enable 110222417Sjulian then 111222417Sjulian 112222417Sjulian menu-redraw 113222417Sjulian 114222417Sjulian TRUE \ loop menu again 115222417Sjulian; 116222417Sjulian 117243114Sdteske\ 118243114Sdteske\ Single User Mode 119243114Sdteske\ 120243114Sdteske 121243114Sdteske: singleuser_enabled? ( -- flag ) 122243114Sdteske s" boot_single" getenv -1 <> dup if 123243114Sdteske swap drop ( c-addr flag -- flag ) 124243114Sdteske then 125243114Sdteske; 126243114Sdteske 127243114Sdteske: singleuser_enable ( -- ) 128243114Sdteske s" set boot_single=YES" evaluate 129243114Sdteske; 130243114Sdteske 131243114Sdteske: singleuser_disable ( -- ) 132243114Sdteske s" boot_single" unsetenv 133243114Sdteske; 134243114Sdteske 135241523Sdteske: init_singleuser ( N -- N ) 136243114Sdteske singleuser_enabled? if 137241523Sdteske toggle_menuitem ( n -- n ) 138241523Sdteske then 139241523Sdteske; 140241523Sdteske 141222417Sjulian: toggle_singleuser ( N -- N TRUE ) 142222417Sjulian toggle_menuitem 143222417Sjulian menu-redraw 144222417Sjulian 145222417Sjulian \ Now we're going to make the change effective 146222417Sjulian 147243114Sdteske dup toggle_stateN @ 0= if 148243114Sdteske singleuser_disable 149222417Sjulian else 150243114Sdteske singleuser_enable 151222417Sjulian then 152222417Sjulian 153222417Sjulian TRUE \ loop menu again 154222417Sjulian; 155222417Sjulian 156243114Sdteske\ 157243114Sdteske\ Verbose Boot 158243114Sdteske\ 159243114Sdteske 160243114Sdteske: verbose_enabled? ( -- flag ) 161243114Sdteske s" boot_verbose" getenv -1 <> dup if 162243114Sdteske swap drop ( c-addr flag -- flag ) 163243114Sdteske then 164243114Sdteske; 165243114Sdteske 166243114Sdteske: verbose_enable ( -- ) 167243114Sdteske s" set boot_verbose=YES" evaluate 168243114Sdteske; 169243114Sdteske 170243114Sdteske: verbose_disable ( -- ) 171243114Sdteske s" boot_verbose" unsetenv 172243114Sdteske; 173243114Sdteske 174241523Sdteske: init_verbose ( N -- N ) 175243114Sdteske verbose_enabled? if 176241523Sdteske toggle_menuitem ( n -- n ) 177241523Sdteske then 178241523Sdteske; 179241523Sdteske 180222417Sjulian: toggle_verbose ( N -- N TRUE ) 181222417Sjulian toggle_menuitem 182222417Sjulian menu-redraw 183222417Sjulian 184222417Sjulian \ Now we're going to make the change effective 185222417Sjulian 186243114Sdteske dup toggle_stateN @ 0= if 187243114Sdteske verbose_disable 188222417Sjulian else 189243114Sdteske verbose_enable 190222417Sjulian then 191222417Sjulian 192222417Sjulian TRUE \ loop menu again 193222417Sjulian; 194222417Sjulian 195243114Sdteske\ 196243114Sdteske\ Escape to Prompt 197243114Sdteske\ 198243114Sdteske 199222417Sjulian: goto_prompt ( N -- N FALSE ) 200222417Sjulian 201222417Sjulian s" set autoboot_delay=NO" evaluate 202222417Sjulian 203222417Sjulian cr 204222417Sjulian ." To get back to the menu, type `menu' and press ENTER" cr 205222417Sjulian ." or type `boot' and press ENTER to start FreeBSD." cr 206222417Sjulian cr 207222417Sjulian 208222417Sjulian FALSE \ exit the menu 209222417Sjulian; 210222417Sjulian 211243114Sdteske\ 212243114Sdteske\ Cyclestate (used by kernel/root below) 213243114Sdteske\ 214243114Sdteske 215241523Sdteske: init_cyclestate ( N K -- N ) 216243114Sdteske over cycle_stateN ( n k -- n k addr ) 217241523Sdteske begin 218241523Sdteske tuck @ ( n k addr -- n addr k c ) 219241523Sdteske over <> ( n addr k c -- n addr k 0|-1 ) 220241523Sdteske while 221241523Sdteske rot ( n addr k -- addr k n ) 222241523Sdteske cycle_menuitem 223241523Sdteske swap rot ( addr k n -- n k addr ) 224241523Sdteske repeat 225241523Sdteske 2drop ( n k addr -- n ) 226241523Sdteske; 227241523Sdteske 228243114Sdteske\ 229243114Sdteske\ Kernel 230243114Sdteske\ 231243114Sdteske 232241523Sdteske: init_kernel ( N -- N ) 233241523Sdteske kernel_state @ ( n -- n k ) 234241523Sdteske init_cyclestate ( n k -- n ) 235241523Sdteske; 236241523Sdteske 237222417Sjulian: cycle_kernel ( N -- N TRUE ) 238222417Sjulian cycle_menuitem 239222417Sjulian menu-redraw 240222417Sjulian 241222417Sjulian \ Now we're going to make the change effective 242222417Sjulian 243243114Sdteske dup cycle_stateN @ 244241523Sdteske dup kernel_state ! \ save a copy for re-initialization 245222417Sjulian 48 + \ convert to ASCII numeral 246222417Sjulian 247222417Sjulian s" set kernel=${kernel_prefix}${kernel[N]}${kernel_suffix}" 248243114Sdteske 36 +c! \ replace 'N' with ASCII numeral 249243114Sdteske evaluate \ sets $kernel to full kernel-path 250222417Sjulian 251222417Sjulian TRUE \ loop menu again 252222417Sjulian; 253222417Sjulian 254243114Sdteske\ 255243114Sdteske\ Root 256243114Sdteske\ 257243114Sdteske 258241523Sdteske: init_root ( N -- N ) 259241523Sdteske root_state @ ( n -- n k ) 260241523Sdteske init_cyclestate ( n k -- n ) 261241523Sdteske; 262241523Sdteske 263222417Sjulian: cycle_root ( N -- N TRUE ) 264222417Sjulian cycle_menuitem 265222417Sjulian menu-redraw 266222417Sjulian 267222417Sjulian \ Now we're going to make the change effective 268222417Sjulian 269243114Sdteske dup cycle_stateN @ 270241523Sdteske dup root_state ! \ save a copy for re-initialization 271222417Sjulian 48 + \ convert to ASCII numeral 272222417Sjulian 273241367Sdteske s" set root=${root_prefix}${root[N]}${root_suffix}" 274243114Sdteske 30 +c! \ replace 'N' with ASCII numeral 275243114Sdteske evaluate \ sets $root to full root-path 276222417Sjulian 277222417Sjulian TRUE \ loop menu again 278222417Sjulian; 279242667Sdteske 280243114Sdteske\ 281243114Sdteske\ Menusets 282243114Sdteske\ 283243114Sdteske 284242667Sdteske: goto_menu ( N M -- N TRUE ) 285242667Sdteske menu-unset 286242667Sdteske menuset-loadsetnum ( n m -- n ) 287242667Sdteske menu-redraw 288242667Sdteske TRUE \ Loop menu again 289242667Sdteske; 290