beastie.4th revision 115434
190075Sobrien\ Copyright (c) 2003 Scott Long <scottl@freebsd.org> 2132718Skan\ All rights reserved. 3169689Skan\ 418334Speter\ Redistribution and use in source and binary forms, with or without 518334Speter\ modification, are permitted provided that the following conditions 690075Sobrien\ are met: 718334Speter\ 1. Redistributions of source code must retain the above copyright 890075Sobrien\ notice, this list of conditions and the following disclaimer. 990075Sobrien\ 2. Redistributions in binary form must reproduce the above copyright 1090075Sobrien\ notice, this list of conditions and the following disclaimer in the 1190075Sobrien\ documentation and/or other materials provided with the distribution. 1218334Speter\ 1390075Sobrien\ THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 1490075Sobrien\ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 1590075Sobrien\ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 1690075Sobrien\ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 1718334Speter\ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 1818334Speter\ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 1990075Sobrien\ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 20169689Skan\ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 21169689Skan\ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 2218334Speter\ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 2350397Sobrien\ SUCH DAMAGE. 2450397Sobrien\ 25132718Skan\ $FreeBSD: head/sys/boot/forth/beastie.4th 115434 2003-05-31 11:19:11Z scottl $ 26132718Skan 2718334Spetermarker task-beastie.4th 2818334Speter 2918334Speterinclude /boot/screen.4th 3090075Sobrieninclude /boot/frames.4th 3150397Sobrien 3218334Speterhide 3390075Sobrien 3418334Spetervariable menuidx 3518334Spetervariable menubllt 3618334Spetervariable menuX 3750397Sobrienvariable menuY 3818334Spetervariable promptwidth 3918334Speter 4050397Sobrienvariable bootkey 4118334Spetervariable bootacpikey 4250397Sobrienvariable bootsafekey 4352284Sobrienvariable bootverbosekey 4490075Sobrienvariable bootsinglekey 4590075Sobrienvariable escapekey 4690075Sobrienvariable rebootkey 47117395Skan 48169689Skan46 constant dot 4918334Speter 50169689Skan\ The BSD Daemon. He is 19 rows high and 34 columns wide 5118334Speter: print-beastie ( x y -- ) 5218334Speter 2dup at-xy ." , ," 1+ 5318334Speter 2dup at-xy ." /( )`" 1+ 54169689Skan 2dup at-xy ." \\ \\___ / |" 1+ 55117395Skan 2dup at-xy ." /- _ `-/ '" 1+ 5690075Sobrien 2dup at-xy ." (/\\/ \\ \\ /\\" 1+ 5790075Sobrien 2dup at-xy ." / / | ` \\" 1+ 5890075Sobrien 2dup at-xy ." O O ) / |" 1+ 59117395Skan 2dup at-xy ." `-^--'`< '" 1+ 6090075Sobrien 2dup at-xy ." (_.) _ ) /" 1+ 6190075Sobrien 2dup at-xy ." `.___/` /" 1+ 62117395Skan 2dup at-xy ." `-----' /" 1+ 6390075Sobrien 2dup at-xy ." <----. __ / __ \\" 1+ 6452284Sobrien 2dup at-xy ." <----|====O)))==) \\) /====" 1+ 65132718Skan 2dup at-xy ." <----' `--' `.__,' \\" 1+ 66132718Skan 2dup at-xy ." | |" 1+ 6718334Speter 2dup at-xy ." \\ / /\\" 1+ 6850397Sobrien 2dup at-xy ." ______( (_ / \\______/" 1+ 6990075Sobrien 2dup at-xy ." ,' ,-----' |" 1+ 7090075Sobrien at-xy ." `--{__________)" 7190075Sobrien; 72132718Skan 7390075Sobrien: acpienabled? ( -- flag ) 74117395Skan s" acpi_load" getenv 7590075Sobrien dup -1 = if 76117395Skan drop false exit 7790075Sobrien then 78117395Skan s" YES" compare-insensitive 0<> if 7990075Sobrien false exit 80117395Skan then 81117395Skan s" hint.acpi.0.disabled" getenv 82117395Skan dup -1 <> if 83117395Skan s" 0" compare 0<> if 84117395Skan false exit 85169689Skan then 8690075Sobrien then 8790075Sobrien true 8890075Sobrien; 89117395Skan 9090075Sobrien: printmenuitem ( -- n ) 9118334Speter menuidx @ 9218334Speter 1+ dup 9318334Speter menuidx ! 9418334Speter menuY @ + dup menuX @ swap at-xy 9518334Speter menuidx @ . 9618334Speter menuX @ 1+ swap at-xy 9718334Speter menubllt @ emit 9818334Speter menuidx @ 48 + 9918334Speter; 10018334Speter 10118334Speter: beastie-menu ( -- ) 10218334Speter 0 menuidx ! 103132718Skan dot menubllt ! 10418334Speter 8 menuY ! 10518334Speter 5 menuX ! 10618334Speter clear 10718334Speter 46 4 print-beastie 10818334Speter 42 20 2 2 box 10918334Speter 13 6 at-xy ." Welcome to FreeBSD!" 11090075Sobrien printmenuitem ." Boot FreeBSD [default]" bootkey ! 11118334Speter s" arch-i386" environment? if 11290075Sobrien printmenuitem ." Boot FreeBSD with ACPI " bootacpikey ! 11318334Speter acpienabled? if 11418334Speter ." disabled" 11590075Sobrien else 11618334Speter ." enabled" 11718334Speter then 11818334Speter else 11990075Sobrien -2 bootacpikey ! 12018334Speter then 12190075Sobrien printmenuitem ." Boot FreeBSD in Safe Mode" bootsafekey ! 12218334Speter printmenuitem ." Boot FreeBSD in single user mode" bootsinglekey ! 12318334Speter printmenuitem ." Boot FreeBSD with verbose logging" bootverbosekey ! 12490075Sobrien printmenuitem ." Escape to loader prompt" escapekey ! 12518334Speter printmenuitem ." Reboot" rebootkey ! 12618334Speter menuX @ 20 at-xy 12718334Speter ." Select option, [Enter] for default" 12818334Speter menuX @ 21 at-xy 12918334Speter s" or [Space] to pause timer " dup 2 - promptwidth ! 13018334Speter type 13118334Speter; 13218334Speter 13318334Speter: tkey 13418334Speter dup 13518334Speter seconds + 13618334Speter begin 1 while 13718334Speter over 0<> if 13818334Speter dup seconds u< if 13918334Speter drop 14090075Sobrien -1 141132718Skan exit 14218334Speter then 14318334Speter menuX @ promptwidth @ + 21 at-xy dup seconds - . 14418334Speter then 14518334Speter key? if 14618334Speter drop 14718334Speter key 14890075Sobrien exit 14918334Speter then 15018334Speter 50 ms 15118334Speter repeat 15218334Speter; 15318334Speter 15418334Speterset-current 15518334Speter 15618334Speter: beastie-start 15718334Speter beastie-menu 15818334Speter s" autoboot_delay" getenv 15918334Speter dup -1 = if 16018334Speter drop 16118334Speter 10 16218334Speter else 16318334Speter 0 0 2swap >number drop drop drop 16418334Speter then 165132718Skan begin true while 16618334Speter dup tkey 16790075Sobrien 0 25 at-xy 16890075Sobrien dup 32 = if nip 0 swap then 16950397Sobrien dup -1 = if s" boot" evaluate then 17018334Speter dup 13 = if s" boot" evaluate then 17118334Speter dup bootkey @ = if s" boot" evaluate then 17250397Sobrien dup bootacpikey @ = if 17350397Sobrien acpienabled? if 17450397Sobrien s" acpi_load" unsetenv 17550397Sobrien s" 1" s" hint.acpi.0.disabled" setenv 17618334Speter s" 1" s" loader.acpi_disabled_by_user" setenv 17750397Sobrien else 17850397Sobrien s" YES" s" acpi_load" setenv 17950397Sobrien s" 0" s" hint.acpi.0.disabled" setenv 18050397Sobrien then 18118334Speter s" boot" evaluate 18218334Speter then 18318334Speter dup bootsafekey @ = if 18418334Speter s" arch-i386" environment? if 18518334Speter s" acpi_load" unsetenv 18618334Speter s" 1" s" hint.acpi.0.disabled" setenv 18718334Speter s" 1" s" loader.acpi_disabled_by_user" setenv 18818334Speter then 18918334Speter s" 0" s" hw.ata.ata_dma" setenv 190132718Skan s" 0" s" hw.ata.atapi_dma" setenv 19118334Speter s" 0" s" hw.ata.wc" setenv 19218334Speter s" 0" s" hw.eisa_slots" setenv 19318334Speter s" boot" evaluate 19418334Speter then 19590075Sobrien dup bootverbosekey @ = if 19618334Speter s" YES" s" boot_verbose" setenv 19718334Speter s" boot" evaluate 19818334Speter then 19918334Speter dup bootsinglekey @ = if 20018334Speter s" YES" s" boot_single" setenv 20118334Speter s" boot" evaluate 20218334Speter then 20318334Speter dup escapekey @ = if 2drop exit then 20418334Speter rebootkey @ = if s" reboot" evaluate then 20590075Sobrien repeat 20690075Sobrien; 20718334Speter 20890075Sobrienprevious 209132718Skan