menu-commands.4th revision 241523
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 241523 2012-10-14 06:52:49Z dteske $ 26222417Sjulian 27222417Sjulianmarker task-menu-commands.4th 28222417Sjulian 29241523Sdteskevariable kernel_state 30241523Sdteskevariable root_state 31241523Sdteske 32222417Sjulian: acpi_enable ( -- ) 33222417Sjulian s" set acpi_load=YES" evaluate \ XXX deprecated but harmless 34222417Sjulian s" set hint.acpi.0.disabled=0" evaluate 35222417Sjulian s" loader.acpi_disabled_by_user" unsetenv 36222417Sjulian; 37222417Sjulian 38222417Sjulian: acpi_disable ( -- ) 39222417Sjulian s" acpi_load" unsetenv \ XXX deprecated but harmless 40222417Sjulian s" set hint.acpi.0.disabled=1" evaluate 41222417Sjulian s" set loader.acpi_disabled_by_user=1" evaluate 42222417Sjulian; 43222417Sjulian 44222417Sjulian: toggle_acpi ( N -- N TRUE ) 45222417Sjulian 46222417Sjulian \ Make changes effective _before_ calling menu-redraw 47222417Sjulian 48222417Sjulian acpienabled? if 49222417Sjulian acpi_disable 50222417Sjulian else 51222417Sjulian acpi_enable 52222417Sjulian then 53222417Sjulian 54222417Sjulian menu-redraw 55222417Sjulian 56222417Sjulian TRUE \ loop menu again 57222417Sjulian; 58222417Sjulian 59241523Sdteske: init_safemode ( N -- N ) 60241523Sdteske s" kern.smp.disabled" getenv -1 <> if 61241523Sdteske drop ( n c-addr -- n ) \ unused 62241523Sdteske toggle_menuitem ( n -- n ) 63241523Sdteske then 64241523Sdteske; 65241523Sdteske 66222417Sjulian: toggle_safemode ( N -- N TRUE ) 67222417Sjulian toggle_menuitem 68222417Sjulian 69222417Sjulian \ Now we're going to make the change effective 70222417Sjulian 71222417Sjulian s" toggle_stateN @" \ base name of toggle state var 72222417Sjulian -rot 2dup 12 + c! rot \ replace 'N' with ASCII numeral 73222417Sjulian 74222417Sjulian evaluate 0= if 75233941Savg s" kern.smp.disabled" unsetenv 76222417Sjulian s" hw.ata.ata_dma" unsetenv 77222417Sjulian s" hw.ata.atapi_dma" unsetenv 78222417Sjulian s" hw.ata.wc" unsetenv 79222417Sjulian s" hw.eisa_slots" unsetenv 80233941Savg s" kern.eventtimer.periodic" unsetenv 81233941Savg s" kern.geom.part.check_integrity" unsetenv 82222417Sjulian else 83233941Savg s" set kern.smp.disabled=1" evaluate 84222417Sjulian s" set hw.ata.ata_dma=0" evaluate 85222417Sjulian s" set hw.ata.atapi_dma=0" evaluate 86222417Sjulian s" set hw.ata.wc=0" evaluate 87222417Sjulian s" set hw.eisa_slots=0" evaluate 88233941Savg s" set kern.eventtimer.periodic=1" evaluate 89233941Savg s" set kern.geom.part.check_integrity=0" evaluate 90222417Sjulian then 91222417Sjulian 92222417Sjulian menu-redraw 93222417Sjulian 94222417Sjulian TRUE \ loop menu again 95222417Sjulian; 96222417Sjulian 97241523Sdteske: init_singleuser ( N -- N ) 98241523Sdteske s" boot_single" getenv -1 <> if 99241523Sdteske drop ( n c-addr -- n ) \ unused 100241523Sdteske toggle_menuitem ( n -- n ) 101241523Sdteske then 102241523Sdteske; 103241523Sdteske 104222417Sjulian: toggle_singleuser ( N -- N TRUE ) 105222417Sjulian toggle_menuitem 106222417Sjulian menu-redraw 107222417Sjulian 108222417Sjulian \ Now we're going to make the change effective 109222417Sjulian 110222417Sjulian s" toggle_stateN @" \ base name of toggle state var 111222417Sjulian -rot 2dup 12 + c! rot \ replace 'N' with ASCII numeral 112222417Sjulian 113222417Sjulian evaluate 0= if 114222417Sjulian s" boot_single" unsetenv 115222417Sjulian else 116222417Sjulian s" set boot_single=YES" evaluate 117222417Sjulian then 118222417Sjulian 119222417Sjulian TRUE \ loop menu again 120222417Sjulian; 121222417Sjulian 122241523Sdteske: init_verbose ( N -- N ) 123241523Sdteske s" boot_verbose" getenv -1 <> if 124241523Sdteske drop ( n c-addr -- n ) \ unused 125241523Sdteske toggle_menuitem ( n -- n ) 126241523Sdteske then 127241523Sdteske; 128241523Sdteske 129222417Sjulian: toggle_verbose ( N -- N TRUE ) 130222417Sjulian toggle_menuitem 131222417Sjulian menu-redraw 132222417Sjulian 133222417Sjulian \ Now we're going to make the change effective 134222417Sjulian 135222417Sjulian s" toggle_stateN @" \ base name of toggle state var 136222417Sjulian -rot 2dup 12 + c! rot \ replace 'N' with ASCII numeral 137222417Sjulian 138222417Sjulian evaluate 0= if 139222417Sjulian s" boot_verbose" unsetenv 140222417Sjulian else 141222417Sjulian s" set boot_verbose=YES" evaluate 142222417Sjulian then 143222417Sjulian 144222417Sjulian TRUE \ loop menu again 145222417Sjulian; 146222417Sjulian 147222417Sjulian: goto_prompt ( N -- N FALSE ) 148222417Sjulian 149222417Sjulian s" set autoboot_delay=NO" evaluate 150222417Sjulian 151222417Sjulian cr 152222417Sjulian ." To get back to the menu, type `menu' and press ENTER" cr 153222417Sjulian ." or type `boot' and press ENTER to start FreeBSD." cr 154222417Sjulian cr 155222417Sjulian 156222417Sjulian FALSE \ exit the menu 157222417Sjulian; 158222417Sjulian 159241523Sdteske: init_cyclestate ( N K -- N ) 160241523Sdteske over ( n k -- n k n ) 161241523Sdteske s" cycle_stateN" ( n k n -- n k n c-addr u ) 162241523Sdteske -rot tuck 11 + c! swap ( n k n c-addr u -- n k c-addr u ) 163241523Sdteske evaluate ( n k c-addr u -- n k addr ) 164241523Sdteske begin 165241523Sdteske tuck @ ( n k addr -- n addr k c ) 166241523Sdteske over <> ( n addr k c -- n addr k 0|-1 ) 167241523Sdteske while 168241523Sdteske rot ( n addr k -- addr k n ) 169241523Sdteske cycle_menuitem 170241523Sdteske swap rot ( addr k n -- n k addr ) 171241523Sdteske repeat 172241523Sdteske 2drop ( n k addr -- n ) 173241523Sdteske; 174241523Sdteske 175241523Sdteske: init_kernel ( N -- N ) 176241523Sdteske kernel_state @ ( n -- n k ) 177241523Sdteske init_cyclestate ( n k -- n ) 178241523Sdteske; 179241523Sdteske 180222417Sjulian: cycle_kernel ( N -- N TRUE ) 181222417Sjulian cycle_menuitem 182222417Sjulian menu-redraw 183222417Sjulian 184222417Sjulian \ Now we're going to make the change effective 185222417Sjulian 186222417Sjulian s" cycle_stateN" \ base name of array state var 187222417Sjulian -rot 2dup 11 + c! rot \ replace 'N' with ASCII numeral 188222417Sjulian evaluate \ translate name into address 189222417Sjulian @ \ dereference address into value 190241523Sdteske dup kernel_state ! \ save a copy for re-initialization 191222417Sjulian 48 + \ convert to ASCII numeral 192222417Sjulian 193222417Sjulian s" set kernel=${kernel_prefix}${kernel[N]}${kernel_suffix}" 194222417Sjulian \ command to assemble full kernel-path 195222417Sjulian -rot tuck 36 + c! swap \ replace 'N' with array index value 196222417Sjulian evaluate \ sets $kernel to full kernel-path 197222417Sjulian 198222417Sjulian TRUE \ loop menu again 199222417Sjulian; 200222417Sjulian 201241523Sdteske: init_root ( N -- N ) 202241523Sdteske root_state @ ( n -- n k ) 203241523Sdteske init_cyclestate ( n k -- n ) 204241523Sdteske; 205241523Sdteske 206222417Sjulian: cycle_root ( N -- N TRUE ) 207222417Sjulian cycle_menuitem 208222417Sjulian menu-redraw 209222417Sjulian 210222417Sjulian \ Now we're going to make the change effective 211222417Sjulian 212222417Sjulian s" cycle_stateN" \ base name of array state var 213222417Sjulian -rot 2dup 11 + c! rot \ replace 'N' with ASCII numeral 214222417Sjulian evaluate \ translate name into address 215222417Sjulian @ \ dereference address into value 216241523Sdteske dup root_state ! \ save a copy for re-initialization 217222417Sjulian 48 + \ convert to ASCII numeral 218222417Sjulian 219241367Sdteske s" set root=${root_prefix}${root[N]}${root_suffix}" 220241367Sdteske \ command to assemble root image-path 221222417Sjulian -rot tuck 30 + c! swap \ replace 'N' with array index value 222222417Sjulian evaluate \ sets $kernel to full kernel-path 223222417Sjulian 224222417Sjulian TRUE \ loop menu again 225222417Sjulian; 226