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$
28
29marker task-beastie.4th
30
31include /boot/delay.4th
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		logoX @ logoY @
207		loader_color? if
208			orb-logo
209		else
210			orbbw-logo
211		then
212		drop exit
213	then
214
215	2dup s" beastie" compare-insensitive 0= if
216		logoX @ logoY @ beastie-logo
217		2drop exit
218	then
219	2dup s" beastiebw" compare-insensitive 0= if
220		logoX @ logoY @ beastiebw-logo
221		2drop exit
222	then
223	2dup s" fbsdbw" compare-insensitive 0= if
224		logoX @ logoY @ fbsdbw-logo
225		2drop exit
226	then
227	2dup s" orb" compare-insensitive 0= if
228		logoX @ logoY @ orb-logo
229		2drop exit
230	then
231	2dup s" orbbw" compare-insensitive 0= if
232		logoX @ logoY @ orbbw-logo
233		2drop exit
234	then
235	2dup s" tribute" compare-insensitive 0= if
236		logoX @ logoY @
237		s" tribute-logo" sfind if
238			execute
239		else
240			drop orb-logo
241		then
242		2drop exit
243	then
244	2dup s" tributebw" compare-insensitive 0= if
245		logoX @ logoY @
246		s" tributebw-logo" sfind if
247			execute
248		else
249			drop orbbw-logo
250		then
251		2drop exit
252	then
253
254	2drop
255;
256
257: clear-beastie ( -- ) \ clears beastie from the screen
258	logoX @ logoY @
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
269
270	\ Put the cursor back at the bottom
271	0 25 at-xy
272;
273
274: beastie-start ( -- ) \ starts the menu
275	s" beastie_disable" getenv
276	dup -1 <> if
277		s" YES" compare-insensitive 0= if
278			exit
279		then
280	else
281		drop
282	then
283
284	s" loader_delay" getenv
285	-1 = if
286		s" include /boot/menu.rc" evaluate
287	else
288		drop
289		." Loading Menu (Ctrl-C to Abort)" cr
290		s" set delay_command='include /boot/menu.rc'" evaluate
291		s" set delay_showdots" evaluate
292		delay_execute
293	then
294;
295