beastie.4th revision 258269
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: head/sys/boot/forth/beastie.4th 258269 2013-11-17 18:07:10Z dteske $ 28 29marker task-beastie.4th 30 31only forth definitions also support-functions 32 33variable logoX 34variable logoY 35 36\ Initialize logo placement to defaults 3746 logoX ! 384 logoY ! 39 40: beastie-logo ( x y -- ) \ color BSD mascot (19 rows x 34 columns) 41 422dup at-xy ." [31m, ," 1+ 432dup at-xy ." /( )`" 1+ 442dup at-xy ." \ \___ / |" 1+ 452dup at-xy ." /- [37m_[31m `-/ '" 1+ 462dup at-xy ." ([37m/\/ \[31m \ /\" 1+ 472dup at-xy ." [37m/ / |[31m ` \" 1+ 482dup at-xy ." [34mO O [37m) [31m/ |" 1+ 492dup at-xy ." [37m`-^--'[31m`< '" 1+ 502dup at-xy ." (_.) _ ) /" 1+ 512dup at-xy ." `.___/` /" 1+ 522dup at-xy ." `-----' /" 1+ 532dup at-xy ." [33m<----.[31m __ / __ \" 1+ 542dup at-xy ." [33m<----|====[31mO)))[33m==[31m) \) /[33m====|" 1+ 552dup at-xy ." [33m<----'[31m `--' `.__,' \" 1+ 562dup at-xy ." | |" 1+ 572dup at-xy ." \ / /\" 1+ 582dup at-xy ." [36m______[31m( (_ / \______/" 1+ 592dup at-xy ." [36m,' ,-----' |" 1+ 60 at-xy ." `--{__________)[37m" 61 62 \ Put the cursor back at the bottom 63 0 25 at-xy 64; 65 66: beastiebw-logo ( x y -- ) \ B/W BSD mascot (19 rows x 34 columns) 67 68 2dup at-xy ." , ," 1+ 69 2dup at-xy ." /( )`" 1+ 70 2dup at-xy ." \ \___ / |" 1+ 71 2dup at-xy ." /- _ `-/ '" 1+ 72 2dup at-xy ." (/\/ \ \ /\" 1+ 73 2dup at-xy ." / / | ` \" 1+ 74 2dup at-xy ." O O ) / |" 1+ 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 ." <----|====O)))==) \) /====|" 1+ 81 2dup at-xy ." <----' `--' `.__,' \" 1+ 82 2dup at-xy ." | |" 1+ 83 2dup at-xy ." \ / /\" 1+ 84 2dup at-xy ." ______( (_ / \______/" 1+ 85 2dup at-xy ." ,' ,-----' |" 1+ 86 at-xy ." `--{__________)" 87 88 \ Put the cursor back at the bottom 89 0 25 at-xy 90; 91 92: fbsdbw-logo ( x y -- ) \ "FreeBSD" logo in B/W (13 rows x 21 columns) 93 94 \ We used to use the beastie himself as our default... until the 95 \ eventual complaint derided his reign of the advanced boot-menu. 96 \ 97 \ This is the replacement of beastie to satiate the haters of our 98 \ beloved helper-daemon (ready to track down and spear bugs with 99 \ his trident and sporty sneakers; see above). 100 \ 101 \ Since we merely just changed the default and not the default- 102 \ location, below is an adjustment to the passed-in coordinates, 103 \ forever influenced by the proper location of beastie himself 104 \ kept as the default loader_logo_x/loader_logo_y values. 105 \ 106 5 + swap 6 + swap 107 108 2dup at-xy ." ______" 1+ 109 2dup at-xy ." | ____| __ ___ ___ " 1+ 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 at-xy ." |____/|_____/|_____/" 121 122 \ Put the cursor back at the bottom 123 0 25 at-xy 124; 125 126: orb-logo ( x y -- ) \ color Orb mascot (15 rows x 30 columns) 127 128 3 + \ beastie adjustment (see `fbsdbw-logo' comments above) 129 130 2dup at-xy ." [31m``` [31;1m`[31m" 1+ 131 2dup at-xy ." s` `.....---...[31;1m....--.``` -/[31m" 1+ 132 2dup at-xy ." +o .--` [31;1m/y:` +.[31m" 1+ 133 2dup at-xy ." yo`:. [31;1m:o `+-[31m" 1+ 134 2dup at-xy ." y/ [31;1m-/` -o/[31m" 1+ 135 2dup at-xy ." .- [31;1m::/sy+:.[31m" 1+ 136 2dup at-xy ." / [31;1m`-- /[31m" 1+ 137 2dup at-xy ." `: [31;1m:`[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`:`" 1+ 143 2dup at-xy ." [31;1m.-- `--." 1+ 144 at-xy ." .---.....----.[37m" 145 146 \ Put the cursor back at the bottom 147 0 25 at-xy 148; 149 150: orbbw-logo ( x y -- ) \ B/W Orb mascot (15 rows x 32 columns) 151 152 3 + \ beastie adjustment (see `fbsdbw-logo' comments above) 153 154 2dup at-xy ." ``` `" 1+ 155 2dup at-xy ." s` `.....---.......--.``` -/" 1+ 156 2dup at-xy ." +o .--` /y:` +." 1+ 157 2dup at-xy ." yo`:. :o `+-" 1+ 158 2dup at-xy ." y/ -/` -o/" 1+ 159 2dup at-xy ." .- ::/sy+:." 1+ 160 2dup at-xy ." / `-- /" 1+ 161 2dup at-xy ." `: :`" 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 at-xy ." .---.....----." 169 170 \ Put the cursor back at the bottom 171 0 25 at-xy 172; 173 174\ This function draws any number of beastie logos at (loader_logo_x, 175\ loader_logo_y) if defined, else (46,4) (to the right of the menu). To choose 176\ your beastie, set the variable `loader_logo' to the respective logo name. 177\ 178\ Currently available: 179\ 180\ NAME DESCRIPTION 181\ beastie Color ``Helper Daemon'' mascot (19 rows x 34 columns) 182\ beastiebw B/W ``Helper Daemon'' mascot (19 rows x 34 columns) 183\ fbsdbw "FreeBSD" logo in B/W (13 rows x 21 columns) 184\ orb Color ``Orb'' mascot (15 rows x 30 columns) (2nd default) 185\ orbbw B/W ``Orb'' mascot (15 rows x 32 columns) 186\ tribute Color ``Tribute'' (must fit 19 rows x 34 columns) (default) 187\ tributebw B/W ``Tribute'' (must fit 19 rows x 34 columns) 188\ 189\ NOTE: Setting `loader_logo' to an undefined value (such as "none") will 190\ prevent beastie from being drawn. 191\ 192: draw-beastie ( -- ) \ at (loader_logo_x,loader_logo_y), else (46,4) 193 194 s" loader_logo_x" getenv dup -1 <> if 195 ?number 1 = if logoX ! then 196 else 197 drop 198 then 199 s" loader_logo_y" getenv dup -1 <> if 200 ?number 1 = if logoY ! then 201 else 202 drop 203 then 204 205 s" loader_logo" getenv dup -1 <> if 206 dup 5 + allocate if ENOMEM throw then 207 0 2swap strcat s" -logo" strcat 208 over -rot ( a-addr/u -- a-addr a-addr/u ) 209 sfind ( a-addr a-addr/u -- a-addr xt bool ) 210 rot ( a-addr xt bool -- xt bool a-addr ) 211 free ( xt bool a-addr -- xt bool ior ) 212 if EFREE throw then 213 else 214 0 ( cruft -- cruft bool ) \ load the default below 215 then 216 0= if 217 drop ( cruft -- ) 218 loader_color? if 219 ['] orb-logo 220 else 221 ['] orbbw-logo 222 then 223 then 224 logoX @ logoY @ rot execute 225; 226 227: clear-beastie ( -- ) \ clears beastie from the screen 228 logoX @ logoY @ 229 2dup at-xy 34 spaces 1+ 2dup at-xy 34 spaces 1+ 230 2dup at-xy 34 spaces 1+ 2dup at-xy 34 spaces 1+ 231 2dup at-xy 34 spaces 1+ 2dup at-xy 34 spaces 1+ 232 2dup at-xy 34 spaces 1+ 2dup at-xy 34 spaces 1+ 233 2dup at-xy 34 spaces 1+ 2dup at-xy 34 spaces 1+ 234 2dup at-xy 34 spaces 1+ 2dup at-xy 34 spaces 1+ 235 2dup at-xy 34 spaces 1+ 2dup at-xy 34 spaces 1+ 236 2dup at-xy 34 spaces 1+ 2dup at-xy 34 spaces 1+ 237 2dup at-xy 34 spaces 1+ 2dup at-xy 34 spaces 1+ 238 2dup at-xy 34 spaces 2drop 239 240 \ Put the cursor back at the bottom 241 0 25 at-xy 242; 243 244: beastie-start ( -- ) \ starts the menu 245 s" beastie_disable" getenv 246 dup -1 <> if 247 s" YES" compare-insensitive 0= if 248 any_conf_read? if 249 load_kernel 250 load_modules 251 then 252 exit \ to autoboot (default) 253 then 254 else 255 drop 256 then 257 258 s" loader_delay" getenv 259 -1 = if 260 s" include /boot/menu.rc" evaluate 261 else 262 drop 263 ." Loading Menu (Ctrl-C to Abort)" cr 264 s" set delay_command='include /boot/menu.rc'" evaluate 265 s" set delay_showdots" evaluate 266 delay_execute 267 then 268; 269 270only forth also 271