beastie.4th revision 215016
1\ Copyright (c) 2003 Scott Long <scottl@freebsd.org> 2\ Copyright (c) 2003 Aleksander Fafula <alex@fafula.com> 3\ All rights reserved. 4\ 5\ Redistribution and use in source and binary forms, with or without 6\ modification, are permitted provided that the following conditions 7\ are met: 8\ 1. Redistributions of source code must retain the above copyright 9\ notice, this list of conditions and the following disclaimer. 10\ 2. Redistributions in binary form must reproduce the above copyright 11\ notice, this list of conditions and the following disclaimer in the 12\ documentation and/or other materials provided with the distribution. 13\ 14\ THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 15\ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16\ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17\ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 18\ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19\ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20\ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21\ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22\ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23\ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24\ SUCH DAMAGE. 25\ 26\ $FreeBSD: head/sys/boot/forth/beastie.4th 215016 2010-11-08 21:50:45Z jhb $ 27 28marker task-beastie.4th 29 30include /boot/screen.4th 31include /boot/frames.4th 32 33hide 34 35variable menuidx 36variable menubllt 37variable menuX 38variable menuY 39variable promptwidth 40 41variable bootkey 42variable bootacpikey 43variable bootsafekey 44variable bootverbosekey 45variable bootsinglekey 46variable escapekey 47variable rebootkey 48 4946 constant dot 50 51\ The BSD Daemon. He is 19 rows high and 34 columns wide 52: beastie-logo ( x y -- ) 532dup at-xy ." [1;31m, ," 1+ 542dup at-xy ." /( )`" 1+ 552dup at-xy ." \ \___ / |" 1+ 562dup at-xy ." /- [37m_[31m `-/ '" 1+ 572dup at-xy ." ([37m/\/ \[31m \ /\" 1+ 582dup at-xy ." [37m/ / |[31m ` \" 1+ 592dup at-xy ." [34mO O [37m) [31m/ |" 1+ 602dup at-xy ." [37m`-^--'[31m`< '" 1+ 612dup at-xy ." (_.) _ ) /" 1+ 622dup at-xy ." `.___/` / " 1+ 632dup at-xy ." `-----' /" 1+ 642dup at-xy ." [33m<----.[31m __ / __ \" 1+ 652dup at-xy ." [33m<----|====[31mO)))[33m==[31m) \) /[33m====|" 1+ 662dup at-xy ." [33m<----'[31m `--' `.__,' \" 1+ 672dup at-xy ." | |" 1+ 682dup at-xy ." \ / /\" 1+ 692dup at-xy ." [36m______[31m( (_ / \______/" 1+ 702dup at-xy ." [36m,' ,-----' |" 1+ 71at-xy ." `--{__________) [0m" 72; 73 74: beastiebw-logo ( x y -- ) 75 2dup at-xy ." , ," 1+ 76 2dup at-xy ." /( )`" 1+ 77 2dup at-xy ." \ \___ / |" 1+ 78 2dup at-xy ." /- _ `-/ '" 1+ 79 2dup at-xy ." (/\/ \ \ /\" 1+ 80 2dup at-xy ." / / | ` \" 1+ 81 2dup at-xy ." O O ) / |" 1+ 82 2dup at-xy ." `-^--'`< '" 1+ 83 2dup at-xy ." (_.) _ ) /" 1+ 84 2dup at-xy ." `.___/` /" 1+ 85 2dup at-xy ." `-----' /" 1+ 86 2dup at-xy ." <----. __ / __ \" 1+ 87 2dup at-xy ." <----|====O)))==) \) /====" 1+ 88 2dup at-xy ." <----' `--' `.__,' \" 1+ 89 2dup at-xy ." | |" 1+ 90 2dup at-xy ." \ / /\" 1+ 91 2dup at-xy ." ______( (_ / \______/" 1+ 92 2dup at-xy ." ,' ,-----' |" 1+ 93 at-xy ." `--{__________)" 94; 95 96: fbsdbw-logo ( x y -- ) 97 2dup at-xy ." ______" 1+ 98 2dup at-xy ." | ____| __ ___ ___ " 1+ 99 2dup at-xy ." | |__ | '__/ _ \/ _ \" 1+ 100 2dup at-xy ." | __|| | | __/ __/" 1+ 101 2dup at-xy ." | | | | | | |" 1+ 102 2dup at-xy ." |_| |_| \___|\___|" 1+ 103 2dup at-xy ." ____ _____ _____" 1+ 104 2dup at-xy ." | _ \ / ____| __ \" 1+ 105 2dup at-xy ." | |_) | (___ | | | |" 1+ 106 2dup at-xy ." | _ < \___ \| | | |" 1+ 107 2dup at-xy ." | |_) |____) | |__| |" 1+ 108 2dup at-xy ." | | | |" 1+ 109 at-xy ." |____/|_____/|_____/" 110; 111 112: print-logo ( x y -- ) 113 s" loader_logo" getenv 114 dup -1 = if 115 drop 116 fbsdbw-logo 117 exit 118 then 119 2dup s" fbsdbw" compare-insensitive 0= if 120 2drop 121 fbsdbw-logo 122 exit 123 then 124 2dup s" beastiebw" compare-insensitive 0= if 125 2drop 126 beastiebw-logo 127 exit 128 then 129 2dup s" beastie" compare-insensitive 0= if 130 2drop 131 beastie-logo 132 exit 133 then 134 2dup s" none" compare-insensitive 0= if 135 2drop 136 \ no logo 137 exit 138 then 139 2drop 140 fbsdbw-logo 141; 142 143: acpienabled? ( -- flag ) 144 s" hint.acpi.0.rsdp" getenv 145 dup -1 = if 146 drop false exit 147 then 148 2drop 149 s" hint.acpi.0.disabled" getenv 150 dup -1 <> if 151 s" 0" compare 0<> if 152 false exit 153 then 154 else 155 drop 156 then 157 true 158; 159 160: printmenuitem ( -- n ) 161 menuidx @ 162 1+ dup 163 menuidx ! 164 menuY @ + dup menuX @ swap at-xy 165 menuidx @ . 166 menuX @ 1+ swap at-xy 167 menubllt @ emit 168 menuidx @ 48 + 169; 170 171: beastie-menu ( -- ) 172 0 menuidx ! 173 dot menubllt ! 174 8 menuY ! 175 5 menuX ! 176 clear 177 46 4 print-logo 178 42 20 2 2 box 179 13 6 at-xy ." Welcome to FreeBSD!" 180 printmenuitem ." Boot FreeBSD [default]" bootkey ! 181 s" arch-i386" environment? if 182 drop 183 printmenuitem ." Boot FreeBSD with ACPI " bootacpikey ! 184 acpienabled? if 185 ." disabled" 186 else 187 ." enabled" 188 then 189 else 190 -2 bootacpikey ! 191 then 192 printmenuitem ." Boot FreeBSD in Safe Mode" bootsafekey ! 193 printmenuitem ." Boot FreeBSD in single user mode" bootsinglekey ! 194 printmenuitem ." Boot FreeBSD with verbose logging" bootverbosekey ! 195 printmenuitem ." Escape to loader prompt" escapekey ! 196 printmenuitem ." Reboot" rebootkey ! 197 menuX @ 20 at-xy 198 ." Select option, [Enter] for default" 199 menuX @ 21 at-xy 200 s" or [Space] to pause timer " dup 2 - promptwidth ! 201 type 202; 203 204: tkey 205 seconds + 206 begin 1 while 207 over 0<> if 208 dup seconds u< if 209 drop 210 -1 211 exit 212 then 213 menuX @ promptwidth @ + 21 at-xy dup seconds - . 214 then 215 key? if 216 drop 217 key 218 exit 219 then 220 50 ms 221 repeat 222; 223 224set-current 225 226: beastie-start 227 s" beastie_disable" getenv 228 dup -1 <> if 229 s" YES" compare-insensitive 0= if 230 exit 231 then 232 else 233 drop 234 then 235 beastie-menu 236 s" autoboot_delay" getenv 237 dup -1 = if 238 drop 239 10 240 else 241 2dup s" -1" compare 0= if 242 0 boot 243 then 244 0 s>d 2swap >number 2drop drop 245 then 246 begin 247 dup tkey 248 0 25 at-xy 249 dup 32 = if nip 0 swap then 250 dup -1 = if 0 boot then 251 dup 13 = if 0 boot then 252 dup bootkey @ = if 0 boot then 253 dup bootacpikey @ = if 254 acpienabled? if 255 s" 1" s" hint.acpi.0.disabled" setenv 256 s" 1" s" loader.acpi_disabled_by_user" setenv 257 else 258 s" 0" s" hint.acpi.0.disabled" setenv 259 then 260 0 boot 261 then 262 dup bootsafekey @ = if 263 s" arch-i386" environment? if 264 drop 265 s" 1" s" hint.acpi.0.disabled" setenv 266 s" 1" s" loader.acpi_disabled_by_user" setenv 267 s" 1" s" hint.apic.0.disabled" setenv 268 then 269 s" 0" s" hw.ata.ata_dma" setenv 270 s" 0" s" hw.ata.atapi_dma" setenv 271 s" 0" s" hw.ata.wc" setenv 272 s" 0" s" hw.eisa_slots" setenv 273 s" 1" s" hint.kbdmux.0.disabled" setenv 274 0 boot 275 then 276 dup bootverbosekey @ = if 277 s" YES" s" boot_verbose" setenv 278 0 boot 279 then 280 dup bootsinglekey @ = if 281 s" YES" s" boot_single" setenv 282 0 boot 283 then 284 dup escapekey @ = if 285 2drop 286 s" NO" s" autoboot_delay" setenv 287 exit 288 then 289 rebootkey @ = if 0 reboot then 290 again 291; 292 293previous 294