beastie.4th revision 262701
1\ Copyright (c) 2003 Scott Long <scottl@freebsd.org> 2\ Copyright (c) 2003 Aleksander Fafula <alex@fafula.com> 3\ Copyright (c) 2006-2013 Devin Teske <dteske@FreeBSD.org> 4\ All rights reserved. 5\ 6\ Redistribution and use in source and binary forms, with or without 7\ modification, are permitted provided that the following conditions 8\ are met: 9\ 1. Redistributions of source code must retain the above copyright 10\ notice, this list of conditions and the following disclaimer. 11\ 2. Redistributions in binary form must reproduce the above copyright 12\ notice, this list of conditions and the following disclaimer in the 13\ documentation and/or other materials provided with the distribution. 14\ 15\ THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 16\ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 17\ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 18\ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 19\ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 20\ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 21\ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 22\ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 23\ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 24\ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 25\ SUCH DAMAGE. 26\ 27\ $FreeBSD: stable/10/sys/boot/forth/beastie.4th 262701 2014-03-03 07:16:39Z dteske $ 28 29marker task-beastie.4th 30 31include /boot/delay.4th 32 33only forth definitions also support-functions 34 35variable logoX 36variable logoY 37 38\ Initialize logo placement to defaults 3946 logoX ! 404 logoY ! 41 42: beastie-logo ( x y -- ) \ color BSD mascot (19 rows x 34 columns) 43 442dup at-xy ." [31m, ," 1+ 452dup at-xy ." /( )`" 1+ 462dup at-xy ." \ \___ / |" 1+ 472dup at-xy ." /- [37m_[31m `-/ '" 1+ 482dup at-xy ." ([37m/\/ \[31m \ /\" 1+ 492dup at-xy ." [37m/ / |[31m ` \" 1+ 502dup at-xy ." [34mO O [37m) [31m/ |" 1+ 512dup at-xy ." [37m`-^--'[31m`< '" 1+ 522dup at-xy ." (_.) _ ) /" 1+ 532dup at-xy ." `.___/` /" 1+ 542dup at-xy ." `-----' /" 1+ 552dup at-xy ." [33m<----.[31m __ / __ \" 1+ 562dup at-xy ." [33m<----|====[31mO)))[33m==[31m) \) /[33m====|" 1+ 572dup at-xy ." [33m<----'[31m `--' `.__,' \" 1+ 582dup at-xy ." | |" 1+ 592dup at-xy ." \ / /\" 1+ 602dup at-xy ." [36m______[31m( (_ / \______/" 1+ 612dup at-xy ." [36m,' ,-----' |" 1+ 62 at-xy ." `--{__________)[37m" 63 64 \ Put the cursor back at the bottom 65 0 25 at-xy 66; 67 68: beastiebw-logo ( x y -- ) \ B/W BSD mascot (19 rows x 34 columns) 69 70 2dup at-xy ." , ," 1+ 71 2dup at-xy ." /( )`" 1+ 72 2dup at-xy ." \ \___ / |" 1+ 73 2dup at-xy ." /- _ `-/ '" 1+ 74 2dup at-xy ." (/\/ \ \ /\" 1+ 75 2dup at-xy ." / / | ` \" 1+ 76 2dup at-xy ." O O ) / |" 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 ." <----. __ / __ \" 1+ 82 2dup at-xy ." <----|====O)))==) \) /====|" 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 ." ,' ,-----' |" 1+ 88 at-xy ." `--{__________)" 89 90 \ Put the cursor back at the bottom 91 0 25 at-xy 92; 93 94: fbsdbw-logo ( x y -- ) \ "FreeBSD" logo in B/W (13 rows x 21 columns) 95 96 \ We used to use the beastie himself as our default... until the 97 \ eventual complaint derided his reign of the advanced boot-menu. 98 \ 99 \ This is the replacement of beastie to satiate the haters of our 100 \ beloved helper-daemon (ready to track down and spear bugs with 101 \ his trident and sporty sneakers; see above). 102 \ 103 \ Since we merely just changed the default and not the default- 104 \ location, below is an adjustment to the passed-in coordinates, 105 \ forever influenced by the proper location of beastie himself 106 \ kept as the default loader_logo_x/loader_logo_y values. 107 \ 108 5 + swap 6 + swap 109 110 2dup at-xy ." ______" 1+ 111 2dup at-xy ." | ____| __ ___ ___ " 1+ 112 2dup at-xy ." | |__ | '__/ _ \/ _ \" 1+ 113 2dup at-xy ." | __|| | | __/ __/" 1+ 114 2dup at-xy ." | | | | | | |" 1+ 115 2dup at-xy ." |_| |_| \___|\___|" 1+ 116 2dup at-xy ." ____ _____ _____" 1+ 117 2dup at-xy ." | _ \ / ____| __ \" 1+ 118 2dup at-xy ." | |_) | (___ | | | |" 1+ 119 2dup at-xy ." | _ < \___ \| | | |" 1+ 120 2dup at-xy ." | |_) |____) | |__| |" 1+ 121 2dup at-xy ." | | | |" 1+ 122 at-xy ." |____/|_____/|_____/" 123 124 \ Put the cursor back at the bottom 125 0 25 at-xy 126; 127 128: orb-logo ( x y -- ) \ color Orb mascot (15 rows x 30 columns) 129 130 3 + \ beastie adjustment (see `fbsdbw-logo' comments above) 131 132 2dup at-xy ." [31m``` [31;1m`[31m" 1+ 133 2dup at-xy ." s` `.....---...[31;1m....--.``` -/[31m" 1+ 134 2dup at-xy ." +o .--` [31;1m/y:` +.[31m" 1+ 135 2dup at-xy ." yo`:. [31;1m:o `+-[31m" 1+ 136 2dup at-xy ." y/ [31;1m-/` -o/[31m" 1+ 137 2dup at-xy ." .- [31;1m::/sy+:.[31m" 1+ 138 2dup at-xy ." / [31;1m`-- /[31m" 1+ 139 2dup at-xy ." `: [31;1m:`[31m" 1+ 140 2dup at-xy ." `: [31;1m:`[31m" 1+ 141 2dup at-xy ." / [31;1m/[31m" 1+ 142 2dup at-xy ." .- [31;1m-.[31m" 1+ 143 2dup at-xy ." -- [31;1m-.[31m" 1+ 144 2dup at-xy ." `:` [31;1m`:`" 1+ 145 2dup at-xy ." [31;1m.-- `--." 1+ 146 at-xy ." .---.....----.[37m" 147 148 \ Put the cursor back at the bottom 149 0 25 at-xy 150; 151 152: orbbw-logo ( x y -- ) \ B/W Orb mascot (15 rows x 32 columns) 153 154 3 + \ beastie adjustment (see `fbsdbw-logo' comments above) 155 156 2dup at-xy ." ``` `" 1+ 157 2dup at-xy ." s` `.....---.......--.``` -/" 1+ 158 2dup at-xy ." +o .--` /y:` +." 1+ 159 2dup at-xy ." yo`:. :o `+-" 1+ 160 2dup at-xy ." y/ -/` -o/" 1+ 161 2dup at-xy ." .- ::/sy+:." 1+ 162 2dup at-xy ." / `-- /" 1+ 163 2dup at-xy ." `: :`" 1+ 164 2dup at-xy ." `: :`" 1+ 165 2dup at-xy ." / /" 1+ 166 2dup at-xy ." .- -." 1+ 167 2dup at-xy ." -- -." 1+ 168 2dup at-xy ." `:` `:`" 1+ 169 2dup at-xy ." .-- `--." 1+ 170 at-xy ." .---.....----." 171 172 \ Put the cursor back at the bottom 173 0 25 at-xy 174; 175 176\ This function draws any number of beastie logos at (loader_logo_x, 177\ loader_logo_y) if defined, else (46,4) (to the right of the menu). To choose 178\ your beastie, set the variable `loader_logo' to the respective logo name. 179\ 180\ Currently available: 181\ 182\ NAME DESCRIPTION 183\ beastie Color ``Helper Daemon'' mascot (19 rows x 34 columns) 184\ beastiebw B/W ``Helper Daemon'' mascot (19 rows x 34 columns) 185\ fbsdbw "FreeBSD" logo in B/W (13 rows x 21 columns) 186\ orb Color ``Orb'' mascot (15 rows x 30 columns) (2nd default) 187\ orbbw B/W ``Orb'' mascot (15 rows x 32 columns) 188\ tribute Color ``Tribute'' (must fit 19 rows x 34 columns) (default) 189\ tributebw B/W ``Tribute'' (must fit 19 rows x 34 columns) 190\ 191\ NOTE: Setting `loader_logo' to an undefined value (such as "none") will 192\ prevent beastie from being drawn. 193\ 194: draw-beastie ( -- ) \ at (loader_logo_x,loader_logo_y), else (46,4) 195 196 s" loader_logo_x" getenv dup -1 <> if 197 ?number 1 = if logoX ! then 198 else 199 drop 200 then 201 s" loader_logo_y" getenv dup -1 <> if 202 ?number 1 = if logoY ! then 203 else 204 drop 205 then 206 207 s" loader_logo" getenv dup -1 = if 208 logoX @ logoY @ 209 loader_color? if 210 orb-logo 211 else 212 orbbw-logo 213 then 214 drop exit 215 then 216 217 2dup s" beastie" compare-insensitive 0= if 218 logoX @ logoY @ beastie-logo 219 2drop exit 220 then 221 2dup s" beastiebw" compare-insensitive 0= if 222 logoX @ logoY @ beastiebw-logo 223 2drop exit 224 then 225 2dup s" fbsdbw" compare-insensitive 0= if 226 logoX @ logoY @ fbsdbw-logo 227 2drop exit 228 then 229 2dup s" orb" compare-insensitive 0= if 230 logoX @ logoY @ orb-logo 231 2drop exit 232 then 233 2dup s" orbbw" compare-insensitive 0= if 234 logoX @ logoY @ orbbw-logo 235 2drop exit 236 then 237 2dup s" tribute" compare-insensitive 0= if 238 logoX @ logoY @ 239 s" tribute-logo" sfind if 240 execute 241 else 242 drop orb-logo 243 then 244 2drop exit 245 then 246 2dup s" tributebw" compare-insensitive 0= if 247 logoX @ logoY @ 248 s" tributebw-logo" sfind if 249 execute 250 else 251 drop orbbw-logo 252 then 253 2drop exit 254 then 255 256 2drop 257; 258 259: clear-beastie ( -- ) \ clears beastie from the screen 260 logoX @ logoY @ 261 2dup at-xy 34 spaces 1+ 2dup at-xy 34 spaces 1+ 262 2dup at-xy 34 spaces 1+ 2dup at-xy 34 spaces 1+ 263 2dup at-xy 34 spaces 1+ 2dup at-xy 34 spaces 1+ 264 2dup at-xy 34 spaces 1+ 2dup at-xy 34 spaces 1+ 265 2dup at-xy 34 spaces 1+ 2dup at-xy 34 spaces 1+ 266 2dup at-xy 34 spaces 1+ 2dup at-xy 34 spaces 1+ 267 2dup at-xy 34 spaces 1+ 2dup at-xy 34 spaces 1+ 268 2dup at-xy 34 spaces 1+ 2dup at-xy 34 spaces 1+ 269 2dup at-xy 34 spaces 1+ 2dup at-xy 34 spaces 1+ 270 2dup at-xy 34 spaces 2drop 271 272 \ Put the cursor back at the bottom 273 0 25 at-xy 274; 275 276: beastie-start ( -- ) \ starts the menu 277 s" beastie_disable" getenv 278 dup -1 <> if 279 s" YES" compare-insensitive 0= if 280 any_conf_read? if 281 load_kernel 282 load_modules 283 then 284 exit \ to autoboot (default) 285 then 286 else 287 drop 288 then 289 290 s" loader_delay" getenv 291 -1 = if 292 s" include /boot/menu.rc" evaluate 293 else 294 drop 295 ." Loading Menu (Ctrl-C to Abort)" cr 296 s" set delay_command='include /boot/menu.rc'" evaluate 297 s" set delay_showdots" evaluate 298 delay_execute 299 then 300; 301 302only forth also 303