beastie.4th revision 116175
1115410Sscottl\ Copyright (c) 2003 Scott Long <scottl@freebsd.org> 2115410Sscottl\ All rights reserved. 3115410Sscottl\ 4115410Sscottl\ Redistribution and use in source and binary forms, with or without 5115410Sscottl\ modification, are permitted provided that the following conditions 6115410Sscottl\ are met: 7115410Sscottl\ 1. Redistributions of source code must retain the above copyright 8115410Sscottl\ notice, this list of conditions and the following disclaimer. 9115410Sscottl\ 2. Redistributions in binary form must reproduce the above copyright 10115410Sscottl\ notice, this list of conditions and the following disclaimer in the 11115410Sscottl\ documentation and/or other materials provided with the distribution. 12115410Sscottl\ 13115410Sscottl\ THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 14115410Sscottl\ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 15115410Sscottl\ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 16115410Sscottl\ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 17115410Sscottl\ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 18115410Sscottl\ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 19115410Sscottl\ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 20115410Sscottl\ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 21115410Sscottl\ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 22115410Sscottl\ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 23115410Sscottl\ SUCH DAMAGE. 24115410Sscottl\ 25115410Sscottl\ $FreeBSD: head/sys/boot/forth/beastie.4th 116175 2003-06-10 22:04:09Z scottl $ 26115410Sscottl 27115410Sscottlmarker task-beastie.4th 28115410Sscottl 29115410Sscottlinclude /boot/screen.4th 30115410Sscottlinclude /boot/frames.4th 31115410Sscottl 32115410Sscottlhide 33115410Sscottl 34115410Sscottlvariable menuidx 35115410Sscottlvariable menubllt 36115410Sscottlvariable menuX 37115410Sscottlvariable menuY 38115410Sscottlvariable promptwidth 39115410Sscottl 40115410Sscottlvariable bootkey 41115410Sscottlvariable bootacpikey 42115410Sscottlvariable bootsafekey 43115410Sscottlvariable bootverbosekey 44115410Sscottlvariable bootsinglekey 45115410Sscottlvariable escapekey 46115410Sscottlvariable rebootkey 47115410Sscottl 48115410Sscottl46 constant dot 49115410Sscottl 50115410Sscottl\ The BSD Daemon. He is 19 rows high and 34 columns wide 51115410Sscottl: print-beastie ( x y -- ) 52115410Sscottl 2dup at-xy ." , ," 1+ 53115410Sscottl 2dup at-xy ." /( )`" 1+ 54115451Sscottl 2dup at-xy ." \ \___ / |" 1+ 55115410Sscottl 2dup at-xy ." /- _ `-/ '" 1+ 56115451Sscottl 2dup at-xy ." (/\/ \ \ /\" 1+ 57115451Sscottl 2dup at-xy ." / / | ` \" 1+ 58115410Sscottl 2dup at-xy ." O O ) / |" 1+ 59115410Sscottl 2dup at-xy ." `-^--'`< '" 1+ 60115410Sscottl 2dup at-xy ." (_.) _ ) /" 1+ 61115410Sscottl 2dup at-xy ." `.___/` /" 1+ 62115410Sscottl 2dup at-xy ." `-----' /" 1+ 63115451Sscottl 2dup at-xy ." <----. __ / __ \" 1+ 64115451Sscottl 2dup at-xy ." <----|====O)))==) \) /====" 1+ 65115451Sscottl 2dup at-xy ." <----' `--' `.__,' \" 1+ 66115410Sscottl 2dup at-xy ." | |" 1+ 67115451Sscottl 2dup at-xy ." \ / /\" 1+ 68115451Sscottl 2dup at-xy ." ______( (_ / \______/" 1+ 69115410Sscottl 2dup at-xy ." ,' ,-----' |" 1+ 70115410Sscottl at-xy ." `--{__________)" 71115410Sscottl; 72115410Sscottl 73115410Sscottl: acpienabled? ( -- flag ) 74115410Sscottl s" acpi_load" getenv 75115410Sscottl dup -1 = if 76115410Sscottl drop false exit 77115410Sscottl then 78115410Sscottl s" YES" compare-insensitive 0<> if 79115410Sscottl false exit 80115410Sscottl then 81115410Sscottl s" hint.acpi.0.disabled" getenv 82115410Sscottl dup -1 <> if 83115410Sscottl s" 0" compare 0<> if 84115410Sscottl false exit 85115410Sscottl then 86115410Sscottl then 87115410Sscottl true 88115410Sscottl; 89115410Sscottl 90115410Sscottl: printmenuitem ( -- n ) 91115410Sscottl menuidx @ 92115410Sscottl 1+ dup 93115410Sscottl menuidx ! 94115410Sscottl menuY @ + dup menuX @ swap at-xy 95115410Sscottl menuidx @ . 96115410Sscottl menuX @ 1+ swap at-xy 97115410Sscottl menubllt @ emit 98115410Sscottl menuidx @ 48 + 99115410Sscottl; 100115410Sscottl 101115410Sscottl: beastie-menu ( -- ) 102115410Sscottl 0 menuidx ! 103115410Sscottl dot menubllt ! 104115410Sscottl 8 menuY ! 105115410Sscottl 5 menuX ! 106115410Sscottl clear 107115410Sscottl 46 4 print-beastie 108115410Sscottl 42 20 2 2 box 109115410Sscottl 13 6 at-xy ." Welcome to FreeBSD!" 110115410Sscottl printmenuitem ." Boot FreeBSD [default]" bootkey ! 111115410Sscottl s" arch-i386" environment? if 112115410Sscottl printmenuitem ." Boot FreeBSD with ACPI " bootacpikey ! 113115410Sscottl acpienabled? if 114115410Sscottl ." disabled" 115115410Sscottl else 116115410Sscottl ." enabled" 117115410Sscottl then 118115410Sscottl else 119115410Sscottl -2 bootacpikey ! 120115410Sscottl then 121115410Sscottl printmenuitem ." Boot FreeBSD in Safe Mode" bootsafekey ! 122115410Sscottl printmenuitem ." Boot FreeBSD in single user mode" bootsinglekey ! 123115410Sscottl printmenuitem ." Boot FreeBSD with verbose logging" bootverbosekey ! 124115410Sscottl printmenuitem ." Escape to loader prompt" escapekey ! 125115410Sscottl printmenuitem ." Reboot" rebootkey ! 126115410Sscottl menuX @ 20 at-xy 127115410Sscottl ." Select option, [Enter] for default" 128115410Sscottl menuX @ 21 at-xy 129115410Sscottl s" or [Space] to pause timer " dup 2 - promptwidth ! 130115410Sscottl type 131115410Sscottl; 132115410Sscottl 133115410Sscottl: tkey 134115410Sscottl dup 135115410Sscottl seconds + 136115410Sscottl begin 1 while 137115410Sscottl over 0<> if 138115410Sscottl dup seconds u< if 139115410Sscottl drop 140115410Sscottl -1 141115410Sscottl exit 142115410Sscottl then 143115410Sscottl menuX @ promptwidth @ + 21 at-xy dup seconds - . 144115410Sscottl then 145115410Sscottl key? if 146115410Sscottl drop 147115410Sscottl key 148115410Sscottl exit 149115410Sscottl then 150115410Sscottl 50 ms 151115410Sscottl repeat 152115410Sscottl; 153115410Sscottl 154115410Sscottlset-current 155115410Sscottl 156115410Sscottl: beastie-start 157116175Sscottl s" beastie_disable" getenv 158116175Sscottl dup -1 <> if 159116175Sscottl s" YES" compare-insensitive 0= if 160116175Sscottl exit 161116175Sscottl then 162116175Sscottl then 163115410Sscottl beastie-menu 164115410Sscottl s" autoboot_delay" getenv 165115410Sscottl dup -1 = if 166115410Sscottl drop 167115410Sscottl 10 168115410Sscottl else 169115410Sscottl 0 0 2swap >number drop drop drop 170115410Sscottl then 171115410Sscottl begin true while 172115410Sscottl dup tkey 173115410Sscottl 0 25 at-xy 174115410Sscottl dup 32 = if nip 0 swap then 175115410Sscottl dup -1 = if s" boot" evaluate then 176115410Sscottl dup 13 = if s" boot" evaluate then 177115410Sscottl dup bootkey @ = if s" boot" evaluate then 178115410Sscottl dup bootacpikey @ = if 179115410Sscottl acpienabled? if 180115410Sscottl s" acpi_load" unsetenv 181115410Sscottl s" 1" s" hint.acpi.0.disabled" setenv 182115434Sscottl s" 1" s" loader.acpi_disabled_by_user" setenv 183115410Sscottl else 184115410Sscottl s" YES" s" acpi_load" setenv 185115410Sscottl s" 0" s" hint.acpi.0.disabled" setenv 186115410Sscottl then 187115410Sscottl s" boot" evaluate 188115410Sscottl then 189115410Sscottl dup bootsafekey @ = if 190115410Sscottl s" arch-i386" environment? if 191115410Sscottl s" acpi_load" unsetenv 192115410Sscottl s" 1" s" hint.acpi.0.disabled" setenv 193115434Sscottl s" 1" s" loader.acpi_disabled_by_user" setenv 194115410Sscottl then 195115410Sscottl s" 0" s" hw.ata.ata_dma" setenv 196115410Sscottl s" 0" s" hw.ata.atapi_dma" setenv 197115410Sscottl s" 0" s" hw.ata.wc" setenv 198115410Sscottl s" 0" s" hw.eisa_slots" setenv 199115410Sscottl s" boot" evaluate 200115410Sscottl then 201115410Sscottl dup bootverbosekey @ = if 202115410Sscottl s" YES" s" boot_verbose" setenv 203115410Sscottl s" boot" evaluate 204115410Sscottl then 205115410Sscottl dup bootsinglekey @ = if 206115410Sscottl s" YES" s" boot_single" setenv 207115410Sscottl s" boot" evaluate 208115410Sscottl then 209116175Sscottl dup escapekey @ = if 210116175Sscottl 2drop 211116175Sscottl s" NO" s" autoboot_delay" setenv 212116175Sscottl exit 213116175Sscottl then 214115410Sscottl rebootkey @ = if s" reboot" evaluate then 215115410Sscottl repeat 216115410Sscottl; 217115410Sscottl 218115410Sscottlprevious 219