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