menu-commands.4th revision 242667
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 242667 2012-11-06 19:26:36Z dteske $ 26222417Sjulian 27222417Sjulianmarker task-menu-commands.4th 28222417Sjulian 29242667Sdteskeinclude /boot/menusets.4th 30242667Sdteske 31241523Sdteskevariable kernel_state 32241523Sdteskevariable root_state 33241523Sdteske 34222417Sjulian: acpi_enable ( -- ) 35222417Sjulian s" set acpi_load=YES" evaluate \ XXX deprecated but harmless 36222417Sjulian s" set hint.acpi.0.disabled=0" evaluate 37222417Sjulian s" loader.acpi_disabled_by_user" unsetenv 38222417Sjulian; 39222417Sjulian 40222417Sjulian: acpi_disable ( -- ) 41222417Sjulian s" acpi_load" unsetenv \ XXX deprecated but harmless 42222417Sjulian s" set hint.acpi.0.disabled=1" evaluate 43222417Sjulian s" set loader.acpi_disabled_by_user=1" evaluate 44222417Sjulian; 45222417Sjulian 46222417Sjulian: toggle_acpi ( N -- N TRUE ) 47222417Sjulian 48222417Sjulian \ Make changes effective _before_ calling menu-redraw 49222417Sjulian 50222417Sjulian acpienabled? if 51222417Sjulian acpi_disable 52222417Sjulian else 53222417Sjulian acpi_enable 54222417Sjulian then 55222417Sjulian 56222417Sjulian menu-redraw 57222417Sjulian 58222417Sjulian TRUE \ loop menu again 59222417Sjulian; 60222417Sjulian 61241523Sdteske: init_safemode ( N -- N ) 62241523Sdteske s" kern.smp.disabled" getenv -1 <> if 63241523Sdteske drop ( n c-addr -- n ) \ unused 64241523Sdteske toggle_menuitem ( n -- n ) 65241523Sdteske then 66241523Sdteske; 67241523Sdteske 68222417Sjulian: toggle_safemode ( N -- N TRUE ) 69222417Sjulian toggle_menuitem 70222417Sjulian 71222417Sjulian \ Now we're going to make the change effective 72222417Sjulian 73222417Sjulian s" toggle_stateN @" \ base name of toggle state var 74222417Sjulian -rot 2dup 12 + c! rot \ replace 'N' with ASCII numeral 75222417Sjulian 76222417Sjulian evaluate 0= if 77233941Savg s" kern.smp.disabled" unsetenv 78222417Sjulian s" hw.ata.ata_dma" unsetenv 79222417Sjulian s" hw.ata.atapi_dma" unsetenv 80222417Sjulian s" hw.ata.wc" unsetenv 81222417Sjulian s" hw.eisa_slots" unsetenv 82233941Savg s" kern.eventtimer.periodic" unsetenv 83233941Savg s" kern.geom.part.check_integrity" unsetenv 84222417Sjulian else 85233941Savg s" set kern.smp.disabled=1" evaluate 86222417Sjulian s" set hw.ata.ata_dma=0" evaluate 87222417Sjulian s" set hw.ata.atapi_dma=0" evaluate 88222417Sjulian s" set hw.ata.wc=0" evaluate 89222417Sjulian s" set hw.eisa_slots=0" evaluate 90233941Savg s" set kern.eventtimer.periodic=1" evaluate 91233941Savg s" set kern.geom.part.check_integrity=0" evaluate 92222417Sjulian then 93222417Sjulian 94222417Sjulian menu-redraw 95222417Sjulian 96222417Sjulian TRUE \ loop menu again 97222417Sjulian; 98222417Sjulian 99241523Sdteske: init_singleuser ( N -- N ) 100241523Sdteske s" boot_single" getenv -1 <> if 101241523Sdteske drop ( n c-addr -- n ) \ unused 102241523Sdteske toggle_menuitem ( n -- n ) 103241523Sdteske then 104241523Sdteske; 105241523Sdteske 106222417Sjulian: toggle_singleuser ( N -- N TRUE ) 107222417Sjulian toggle_menuitem 108222417Sjulian menu-redraw 109222417Sjulian 110222417Sjulian \ Now we're going to make the change effective 111222417Sjulian 112222417Sjulian s" toggle_stateN @" \ base name of toggle state var 113222417Sjulian -rot 2dup 12 + c! rot \ replace 'N' with ASCII numeral 114222417Sjulian 115222417Sjulian evaluate 0= if 116222417Sjulian s" boot_single" unsetenv 117222417Sjulian else 118222417Sjulian s" set boot_single=YES" evaluate 119222417Sjulian then 120222417Sjulian 121222417Sjulian TRUE \ loop menu again 122222417Sjulian; 123222417Sjulian 124241523Sdteske: init_verbose ( N -- N ) 125241523Sdteske s" boot_verbose" getenv -1 <> if 126241523Sdteske drop ( n c-addr -- n ) \ unused 127241523Sdteske toggle_menuitem ( n -- n ) 128241523Sdteske then 129241523Sdteske; 130241523Sdteske 131222417Sjulian: toggle_verbose ( N -- N TRUE ) 132222417Sjulian toggle_menuitem 133222417Sjulian menu-redraw 134222417Sjulian 135222417Sjulian \ Now we're going to make the change effective 136222417Sjulian 137222417Sjulian s" toggle_stateN @" \ base name of toggle state var 138222417Sjulian -rot 2dup 12 + c! rot \ replace 'N' with ASCII numeral 139222417Sjulian 140222417Sjulian evaluate 0= if 141222417Sjulian s" boot_verbose" unsetenv 142222417Sjulian else 143222417Sjulian s" set boot_verbose=YES" evaluate 144222417Sjulian then 145222417Sjulian 146222417Sjulian TRUE \ loop menu again 147222417Sjulian; 148222417Sjulian 149222417Sjulian: goto_prompt ( N -- N FALSE ) 150222417Sjulian 151222417Sjulian s" set autoboot_delay=NO" evaluate 152222417Sjulian 153222417Sjulian cr 154222417Sjulian ." To get back to the menu, type `menu' and press ENTER" cr 155222417Sjulian ." or type `boot' and press ENTER to start FreeBSD." cr 156222417Sjulian cr 157222417Sjulian 158222417Sjulian FALSE \ exit the menu 159222417Sjulian; 160222417Sjulian 161241523Sdteske: init_cyclestate ( N K -- N ) 162241523Sdteske over ( n k -- n k n ) 163241523Sdteske s" cycle_stateN" ( n k n -- n k n c-addr u ) 164241523Sdteske -rot tuck 11 + c! swap ( n k n c-addr u -- n k c-addr u ) 165241523Sdteske evaluate ( n k c-addr u -- n k addr ) 166241523Sdteske begin 167241523Sdteske tuck @ ( n k addr -- n addr k c ) 168241523Sdteske over <> ( n addr k c -- n addr k 0|-1 ) 169241523Sdteske while 170241523Sdteske rot ( n addr k -- addr k n ) 171241523Sdteske cycle_menuitem 172241523Sdteske swap rot ( addr k n -- n k addr ) 173241523Sdteske repeat 174241523Sdteske 2drop ( n k addr -- n ) 175241523Sdteske; 176241523Sdteske 177241523Sdteske: init_kernel ( N -- N ) 178241523Sdteske kernel_state @ ( n -- n k ) 179241523Sdteske init_cyclestate ( n k -- n ) 180241523Sdteske; 181241523Sdteske 182222417Sjulian: cycle_kernel ( N -- N TRUE ) 183222417Sjulian cycle_menuitem 184222417Sjulian menu-redraw 185222417Sjulian 186222417Sjulian \ Now we're going to make the change effective 187222417Sjulian 188222417Sjulian s" cycle_stateN" \ base name of array state var 189222417Sjulian -rot 2dup 11 + c! rot \ replace 'N' with ASCII numeral 190222417Sjulian evaluate \ translate name into address 191222417Sjulian @ \ dereference address into value 192241523Sdteske dup kernel_state ! \ save a copy for re-initialization 193222417Sjulian 48 + \ convert to ASCII numeral 194222417Sjulian 195222417Sjulian s" set kernel=${kernel_prefix}${kernel[N]}${kernel_suffix}" 196222417Sjulian \ command to assemble full kernel-path 197222417Sjulian -rot tuck 36 + c! swap \ replace 'N' with array index value 198222417Sjulian evaluate \ sets $kernel to full kernel-path 199222417Sjulian 200222417Sjulian TRUE \ loop menu again 201222417Sjulian; 202222417Sjulian 203241523Sdteske: init_root ( N -- N ) 204241523Sdteske root_state @ ( n -- n k ) 205241523Sdteske init_cyclestate ( n k -- n ) 206241523Sdteske; 207241523Sdteske 208222417Sjulian: cycle_root ( N -- N TRUE ) 209222417Sjulian cycle_menuitem 210222417Sjulian menu-redraw 211222417Sjulian 212222417Sjulian \ Now we're going to make the change effective 213222417Sjulian 214222417Sjulian s" cycle_stateN" \ base name of array state var 215222417Sjulian -rot 2dup 11 + c! rot \ replace 'N' with ASCII numeral 216222417Sjulian evaluate \ translate name into address 217222417Sjulian @ \ dereference address into value 218241523Sdteske dup root_state ! \ save a copy for re-initialization 219222417Sjulian 48 + \ convert to ASCII numeral 220222417Sjulian 221241367Sdteske s" set root=${root_prefix}${root[N]}${root_suffix}" 222241367Sdteske \ command to assemble root image-path 223222417Sjulian -rot tuck 30 + c! swap \ replace 'N' with array index value 224222417Sjulian evaluate \ sets $kernel to full kernel-path 225222417Sjulian 226222417Sjulian TRUE \ loop menu again 227222417Sjulian; 228242667Sdteske 229242667Sdteske: goto_menu ( N M -- N TRUE ) 230242667Sdteske menu-unset 231242667Sdteske menuset-loadsetnum ( n m -- n ) 232242667Sdteske menu-redraw 233242667Sdteske TRUE \ Loop menu again 234242667Sdteske; 235