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