diff options
Diffstat (limited to 'sys/boot/forth/menu-commands.4th')
-rw-r--r-- | sys/boot/forth/menu-commands.4th | 190 |
1 files changed, 190 insertions, 0 deletions
diff --git a/sys/boot/forth/menu-commands.4th b/sys/boot/forth/menu-commands.4th new file mode 100644 index 0000000..828a148 --- /dev/null +++ b/sys/boot/forth/menu-commands.4th @@ -0,0 +1,190 @@ +\ Copyright (c) 2006-2011 Devin Teske <devinteske@hotmail.com> +\ All rights reserved. +\ +\ Redistribution and use in source and binary forms, with or without +\ modification, are permitted provided that the following conditions +\ are met: +\ 1. Redistributions of source code must retain the above copyright +\ notice, this list of conditions and the following disclaimer. +\ 2. Redistributions in binary form must reproduce the above copyright +\ notice, this list of conditions and the following disclaimer in the +\ documentation and/or other materials provided with the distribution. +\ +\ THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +\ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +\ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +\ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE +\ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +\ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +\ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +\ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +\ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +\ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +\ SUCH DAMAGE. +\ +\ $FreeBSD$ + +marker task-menu-commands.4th + +: acpi_enable ( -- ) + s" set acpi_load=YES" evaluate \ XXX deprecated but harmless + s" set hint.acpi.0.disabled=0" evaluate + s" loader.acpi_disabled_by_user" unsetenv +; + +: acpi_disable ( -- ) + s" acpi_load" unsetenv \ XXX deprecated but harmless + s" set hint.acpi.0.disabled=1" evaluate + s" set loader.acpi_disabled_by_user=1" evaluate +; + +: toggle_acpi ( N -- N TRUE ) + + \ Make changes effective _before_ calling menu-redraw + + acpienabled? if + acpi_disable + else + acpi_enable + then + + menu-redraw + + TRUE \ loop menu again +; + +: toggle_safemode ( N -- N TRUE ) + toggle_menuitem + + \ Now we're going to make the change effective + + s" toggle_stateN @" \ base name of toggle state var + -rot 2dup 12 + c! rot \ replace 'N' with ASCII numeral + + evaluate 0= if + s" hint.apic.0.disabled" unsetenv + s" hw.ata.ata_dma" unsetenv + s" hw.ata.atapi_dma" unsetenv + s" hw.ata.wc" unsetenv + s" hw.eisa_slots" unsetenv + s" hint.kbdmux.0.disabled" unsetenv + else + \ + \ Toggle ACPI elements if necessary + \ + acpipresent? if acpienabled? if + menuacpi @ dup 0<> if + toggle_menuitem ( N -- N ) + then + drop + acpi_disable + then then + + s" set hint.apic.0.disabled=1" evaluate + s" set hw.ata.ata_dma=0" evaluate + s" set hw.ata.atapi_dma=0" evaluate + s" set hw.ata.wc=0" evaluate + s" set hw.eisa_slots=0" evaluate + s" set hint.kbdmux.0.disabled=1" evaluate + then + + menu-redraw + + TRUE \ loop menu again +; + +: toggle_singleuser ( N -- N TRUE ) + toggle_menuitem + menu-redraw + + \ Now we're going to make the change effective + + s" toggle_stateN @" \ base name of toggle state var + -rot 2dup 12 + c! rot \ replace 'N' with ASCII numeral + + evaluate 0= if + s" boot_single" unsetenv + else + s" set boot_single=YES" evaluate + then + + TRUE \ loop menu again +; + +: toggle_verbose ( N -- N TRUE ) + toggle_menuitem + menu-redraw + + \ Now we're going to make the change effective + + s" toggle_stateN @" \ base name of toggle state var + -rot 2dup 12 + c! rot \ replace 'N' with ASCII numeral + + evaluate 0= if + s" boot_verbose" unsetenv + else + s" set boot_verbose=YES" evaluate + then + + TRUE \ loop menu again +; + +: goto_prompt ( N -- N FALSE ) + + s" set autoboot_delay=NO" evaluate + + cr + ." To get back to the menu, type `menu' and press ENTER" cr + ." or type `boot' and press ENTER to start FreeBSD." cr + cr + + FALSE \ exit the menu +; + +: cycle_kernel ( N -- N TRUE ) + cycle_menuitem + menu-redraw + + \ Now we're going to make the change effective + + s" cycle_stateN" \ base name of array state var + -rot 2dup 11 + c! rot \ replace 'N' with ASCII numeral + evaluate \ translate name into address + @ \ dereference address into value + 48 + \ convert to ASCII numeral + + \ Since we are [in this file] going to override the standard `boot' + \ routine with a custom one, you should know that we use $kernel + \ when referencing the desired kernel. Set $kernel below. + + s" set kernel=${kernel_prefix}${kernel[N]}${kernel_suffix}" + \ command to assemble full kernel-path + -rot tuck 36 + c! swap \ replace 'N' with array index value + evaluate \ sets $kernel to full kernel-path + + TRUE \ loop menu again +; + +: cycle_root ( N -- N TRUE ) + cycle_menuitem + menu-redraw + + \ Now we're going to make the change effective + + s" cycle_stateN" \ base name of array state var + -rot 2dup 11 + c! rot \ replace 'N' with ASCII numeral + evaluate \ translate name into address + @ \ dereference address into value + 48 + \ convert to ASCII numeral + + \ Since we are [in this file] going to override the standard `boot' + \ routine with a custom one, you should know that we use $root when + \ booting. Set $root below. + + s" set root=${root_prefix}${root[N]}${root_prefix}" + \ command to assemble full kernel-path + -rot tuck 30 + c! swap \ replace 'N' with array index value + evaluate \ sets $kernel to full kernel-path + + TRUE \ loop menu again +; |