beastie.4th revision 280924
1\ Copyright (c) 2003 Scott Long <scottl@FreeBSD.org> 2\ Copyright (c) 2003 Aleksander Fafula <alex@fafula.com> 3\ Copyright (c) 2006-2015 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 280924 2015-03-31 22:32:35Z 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 drop then 197 s" loader_logo_y" getenv dup -1 <> if 198 ?number 1 = if logoY ! then 199 else drop then 200 201 s" loader_logo" getenv dup -1 <> if 202 dup 5 + allocate if ENOMEM throw then 203 0 2swap strcat s" -logo" strcat 204 over -rot ( a-addr/u -- a-addr a-addr/u ) 205 sfind ( a-addr a-addr/u -- a-addr xt bool ) 206 rot ( a-addr xt bool -- xt bool a-addr ) 207 free ( xt bool a-addr -- xt bool ior ) 208 if EFREE throw then 209 else 210 0 ( cruft -- cruft bool ) \ load the default below 211 then 212 0= if 213 drop ( cruft -- ) 214 loader_color? if 215 ['] orb-logo 216 else 217 ['] orbbw-logo 218 then 219 then 220 logoX @ logoY @ rot execute 221; 222 223: clear-beastie ( -- ) \ clears beastie from the screen 224 logoX @ logoY @ 225 2dup at-xy 34 spaces 1+ 2dup at-xy 34 spaces 1+ 226 2dup at-xy 34 spaces 1+ 2dup at-xy 34 spaces 1+ 227 2dup at-xy 34 spaces 1+ 2dup at-xy 34 spaces 1+ 228 2dup at-xy 34 spaces 1+ 2dup at-xy 34 spaces 1+ 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 2drop 235 236 \ Put the cursor back at the bottom 237 0 25 at-xy 238; 239 240: beastie-start ( -- ) \ starts the menu 241 s" console" getenv dup -1 <> if 242 s" efi" 2swap contains? if 243 s" set beastie_disable=YES" evaluate 244 then 245 else drop then 246 s" beastie_disable" getenv dup -1 <> if 247 s" YES" compare-insensitive 0= if 248 any_conf_read? if 249 load_xen_throw 250 load_kernel 251 load_modules 252 then 253 exit \ to autoboot (default) 254 then 255 else drop then 256 257 s" loader_delay" getenv -1 = if 258 s" include /boot/menu.rc" evaluate 259 else 260 drop 261 ." Loading Menu (Ctrl-C to Abort)" cr 262 s" set delay_command='include /boot/menu.rc'" evaluate 263 s" set delay_showdots" evaluate 264 delay_execute 265 then 266; 267 268only forth also 269