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>
6 \ Redistribution and use in source and binary forms, with or without
7 \ modification, are permitted provided that the following conditions
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.
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
29 marker task-beastie.4th
31 include /boot/delay.4th
36 \ Initialize logo placement to defaults
40 : beastie-logo ( x y -- ) \ color BSD mascot (19 rows x 34 columns)
42 2dup at-xy ."
\e[31m, ," 1+
43 2dup at-xy ." /( )`" 1+
44 2dup at-xy ." \ \___ / |" 1+
45 2dup at-xy ." /-
\e[37m_
\e[31m `-/ '" 1+
46 2dup at-xy ." (
\e[37m/\/ \
\e[31m \ /\" 1+
47 2dup at-xy ."
\e[37m/ / |
\e[31m ` \" 1+
48 2dup at-xy ."
\e[34mO O
\e[37m)
\e[31m/ |" 1+
49 2dup at-xy ."
\e[37m`-^--'
\e[31m`< '" 1+
50 2dup at-xy ." (_.) _ ) /" 1+
51 2dup at-xy ." `.___/` /" 1+
52 2dup at-xy ." `-----' /" 1+
53 2dup at-xy ."
\e[33m<----.
\e[31m __ / __ \" 1+
54 2dup at-xy ."
\e[33m<----|====
\e[31mO)))
\e[33m==
\e[31m) \) /
\e[33m====|" 1+
55 2dup at-xy ."
\e[33m<----'
\e[31m `--' `.__,' \" 1+
57 2dup at-xy ." \ / /\" 1+
58 2dup at-xy ."
\e[36m______
\e[31m( (_ / \______/" 1+
59 2dup at-xy ."
\e[36m,' ,-----' |" 1+
60 at-xy ." `--{__________)
\e[37m"
62 \ Put the cursor back at the bottom
66 : beastiebw-logo ( x y -- ) \ B/W BSD mascot (19 rows x 34 columns)
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+
83 2dup at-xy ." \ / /\" 1+
84 2dup at-xy ." ______( (_ / \______/" 1+
85 2dup at-xy ." ,' ,-----' |" 1+
86 at-xy ." `--{__________)"
88 \ Put the cursor back at the bottom
92 : fbsdbw-logo ( x y -- ) \ "FreeBSD" logo in B/W (13 rows x 21 columns)
94 \ We used to use the beastie himself as our default... until the
95 \ eventual complaint derided his reign of the advanced boot-menu.
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).
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.
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 ." |____/|_____/|_____/"
122 \ Put the cursor back at the bottom
126 : orb-logo ( x y -- ) \ color Orb mascot (15 rows x 30 columns)
128 3 + \ beastie adjustment (see `fbsdbw-logo' comments above)
130 2dup at-xy ."
\e[31m```
\e[31;1m`
\e[31m" 1+
131 2dup at-xy ." s` `.....---...
\e[31;1m....--.``` -/
\e[31m" 1+
132 2dup at-xy ." +o .--`
\e[31;1m/y:` +.
\e[31m" 1+
133 2dup at-xy ." yo`:.
\e[31;1m:o `+-
\e[31m" 1+
134 2dup at-xy ." y/
\e[31;1m-/` -o/
\e[31m" 1+
135 2dup at-xy ." .-
\e[31;1m::/sy+:.
\e[31m" 1+
136 2dup at-xy ." /
\e[31;1m`-- /
\e[31m" 1+
137 2dup at-xy ." `:
\e[31;1m:`
\e[31m" 1+
138 2dup at-xy ." `:
\e[31;1m:`
\e[31m" 1+
139 2dup at-xy ." /
\e[31;1m/
\e[31m" 1+
140 2dup at-xy ." .-
\e[31;1m-.
\e[31m" 1+
141 2dup at-xy ." --
\e[31;1m-.
\e[31m" 1+
142 2dup at-xy ." `:`
\e[31;1m`:`" 1+
143 2dup at-xy ."
\e[31;1m.-- `--." 1+
144 at-xy ." .---.....----.
\e[37m"
146 \ Put the cursor back at the bottom
150 : orbbw-logo ( x y -- ) \ B/W Orb mascot (15 rows x 32 columns)
152 3 + \ beastie adjustment (see `fbsdbw-logo' comments above)
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 ." .---.....----."
170 \ Put the cursor back at the bottom
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.
178 \ Currently available:
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)
189 \ NOTE: Setting `loader_logo' to an undefined value (such as "none") will
190 \ prevent beastie from being drawn.
192 : draw-beastie ( -- ) \ at (loader_logo_x,loader_logo_y), else (46,4)
194 s" loader_logo_x" getenv dup -1 <> if
195 ?number 1 = if logoX ! then
199 s" loader_logo_y" getenv dup -1 <> if
200 ?number 1 = if logoY ! then
205 s" loader_logo" getenv dup -1 = if
215 2dup s" beastie" compare-insensitive 0= if
216 logoX @ logoY @ beastie-logo
219 2dup s" beastiebw" compare-insensitive 0= if
220 logoX @ logoY @ beastiebw-logo
223 2dup s" fbsdbw" compare-insensitive 0= if
224 logoX @ logoY @ fbsdbw-logo
227 2dup s" orb" compare-insensitive 0= if
228 logoX @ logoY @ orb-logo
231 2dup s" orbbw" compare-insensitive 0= if
232 logoX @ logoY @ orbbw-logo
235 2dup s" tribute" compare-insensitive 0= if
237 s" tribute-logo" sfind if
244 2dup s" tributebw" compare-insensitive 0= if
246 s" tributebw-logo" sfind if
257 : clear-beastie ( -- ) \ clears beastie from the screen
259 2dup at-xy 34 spaces 1+ 2dup at-xy 34 spaces 1+
260 2dup at-xy 34 spaces 1+ 2dup at-xy 34 spaces 1+
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 2drop
270 \ Put the cursor back at the bottom
274 : beastie-start ( -- ) \ starts the menu
275 s" beastie_disable" getenv
277 s" YES" compare-insensitive 0= if
284 s" loader_delay" getenv
286 s" include /boot/menu.rc" evaluate
289 ." Loading Menu (Ctrl-C to Abort)" cr
290 s" set delay_command='include /boot/menu.rc'" evaluate
291 s" set delay_showdots" evaluate