beastie.4th revision 115434
190075Sobrien\ Copyright (c) 2003 Scott Long <scottl@freebsd.org>
2132718Skan\ All rights reserved.
3169689Skan\
418334Speter\ Redistribution and use in source and binary forms, with or without
518334Speter\ modification, are permitted provided that the following conditions
690075Sobrien\ are met:
718334Speter\ 1. Redistributions of source code must retain the above copyright
890075Sobrien\    notice, this list of conditions and the following disclaimer.
990075Sobrien\ 2. Redistributions in binary form must reproduce the above copyright
1090075Sobrien\    notice, this list of conditions and the following disclaimer in the
1190075Sobrien\    documentation and/or other materials provided with the distribution.
1218334Speter\
1390075Sobrien\ THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
1490075Sobrien\ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
1590075Sobrien\ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
1690075Sobrien\ ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
1718334Speter\ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
1818334Speter\ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
1990075Sobrien\ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
20169689Skan\ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
21169689Skan\ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
2218334Speter\ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
2350397Sobrien\ SUCH DAMAGE.
2450397Sobrien\
25132718Skan\ $FreeBSD: head/sys/boot/forth/beastie.4th 115434 2003-05-31 11:19:11Z scottl $
26132718Skan
2718334Spetermarker task-beastie.4th
2818334Speter
2918334Speterinclude /boot/screen.4th
3090075Sobrieninclude /boot/frames.4th
3150397Sobrien
3218334Speterhide
3390075Sobrien
3418334Spetervariable menuidx
3518334Spetervariable menubllt
3618334Spetervariable menuX
3750397Sobrienvariable menuY
3818334Spetervariable promptwidth
3918334Speter
4050397Sobrienvariable bootkey
4118334Spetervariable bootacpikey
4250397Sobrienvariable bootsafekey
4352284Sobrienvariable bootverbosekey
4490075Sobrienvariable bootsinglekey
4590075Sobrienvariable escapekey
4690075Sobrienvariable rebootkey
47117395Skan
48169689Skan46 constant dot
4918334Speter
50169689Skan\ The BSD Daemon.  He is 19 rows high and 34 columns wide
5118334Speter: print-beastie ( x y -- )
5218334Speter	2dup at-xy ."              ,        ," 1+
5318334Speter	2dup at-xy ."             /(        )`" 1+
54169689Skan	2dup at-xy ."             \\ \\___ / |" 1+
55117395Skan	2dup at-xy ."             /- _  `-/  '" 1+
5690075Sobrien	2dup at-xy ."            (/\\/ \\ \\ /\\" 1+
5790075Sobrien	2dup at-xy ."            / /   | `    \\" 1+
5890075Sobrien	2dup at-xy ."            O O   ) /    |" 1+
59117395Skan	2dup at-xy ."            `-^--'`<     '" 1+
6090075Sobrien	2dup at-xy ."           (_.)  _  )   /" 1+
6190075Sobrien	2dup at-xy ."            `.___/`    /" 1+
62117395Skan	2dup at-xy ."              `-----' /" 1+
6390075Sobrien	2dup at-xy ." <----.     __ / __   \\" 1+
6452284Sobrien	2dup at-xy ." <----|====O)))==) \\) /====" 1+
65132718Skan	2dup at-xy ." <----'    `--' `.__,' \\" 1+
66132718Skan	2dup at-xy ."              |        |" 1+
6718334Speter	2dup at-xy ."               \\       /       /\\" 1+
6850397Sobrien	2dup at-xy ."          ______( (_  / \\______/" 1+
6990075Sobrien	2dup at-xy ."        ,'  ,-----'   |" 1+
7090075Sobrien	     at-xy ."        `--{__________)"
7190075Sobrien;
72132718Skan
7390075Sobrien: acpienabled? ( -- flag )
74117395Skan	s" acpi_load" getenv
7590075Sobrien	dup -1 = if
76117395Skan		drop false exit
7790075Sobrien	then
78117395Skan	s" YES" compare-insensitive 0<> if
7990075Sobrien		false exit
80117395Skan	then
81117395Skan	s" hint.acpi.0.disabled" getenv
82117395Skan	dup -1 <> if
83117395Skan		s" 0" compare 0<> if
84117395Skan			false exit
85169689Skan		then
8690075Sobrien	then
8790075Sobrien	true
8890075Sobrien;
89117395Skan
9090075Sobrien: printmenuitem ( -- n )
9118334Speter	menuidx @
9218334Speter	1+ dup
9318334Speter	menuidx !
9418334Speter	menuY @ + dup menuX @ swap at-xy
9518334Speter	menuidx @ .
9618334Speter	menuX @ 1+ swap at-xy
9718334Speter	menubllt @ emit
9818334Speter	menuidx @ 48 +
9918334Speter;
10018334Speter
10118334Speter: beastie-menu ( -- )
10218334Speter	0 menuidx !
103132718Skan	dot menubllt !
10418334Speter	8 menuY !
10518334Speter	5 menuX !
10618334Speter	clear
10718334Speter	46 4 print-beastie
10818334Speter	42 20 2 2 box
10918334Speter	13 6 at-xy ." Welcome to FreeBSD!"
11090075Sobrien	printmenuitem ."  Boot FreeBSD [default]" bootkey !
11118334Speter	s" arch-i386" environment? if
11290075Sobrien		printmenuitem ."  Boot FreeBSD with ACPI " bootacpikey !
11318334Speter		acpienabled? if
11418334Speter			." disabled"
11590075Sobrien		else
11618334Speter			." enabled"
11718334Speter		then
11818334Speter	else
11990075Sobrien		-2 bootacpikey !
12018334Speter	then
12190075Sobrien	printmenuitem ."  Boot FreeBSD in Safe Mode" bootsafekey !
12218334Speter	printmenuitem ."  Boot FreeBSD in single user mode" bootsinglekey !
12318334Speter	printmenuitem ."  Boot FreeBSD with verbose logging" bootverbosekey !
12490075Sobrien	printmenuitem ."  Escape to loader prompt" escapekey !
12518334Speter	printmenuitem ."  Reboot" rebootkey !
12618334Speter	menuX @ 20 at-xy
12718334Speter	." Select option, [Enter] for default"
12818334Speter	menuX @ 21 at-xy
12918334Speter	s" or [Space] to pause timer    " dup 2 - promptwidth !
13018334Speter	type
13118334Speter;
13218334Speter
13318334Speter: tkey
13418334Speter	dup
13518334Speter	seconds +
13618334Speter	begin 1 while
13718334Speter		over 0<> if
13818334Speter			dup seconds u< if
13918334Speter				drop
14090075Sobrien				-1
141132718Skan				exit
14218334Speter			then
14318334Speter			menuX @ promptwidth @ + 21 at-xy dup seconds - .
14418334Speter		then
14518334Speter		key? if
14618334Speter			drop
14718334Speter			key
14890075Sobrien			exit
14918334Speter		then
15018334Speter	50 ms
15118334Speter	repeat
15218334Speter;
15318334Speter
15418334Speterset-current
15518334Speter
15618334Speter: beastie-start
15718334Speter	beastie-menu
15818334Speter	s" autoboot_delay" getenv
15918334Speter	dup -1 = if
16018334Speter		drop
16118334Speter		10
16218334Speter	else
16318334Speter		0 0 2swap >number drop drop drop
16418334Speter	then
165132718Skan	begin true while
16618334Speter		dup tkey
16790075Sobrien		0 25 at-xy
16890075Sobrien		dup 32 = if nip 0 swap then
16950397Sobrien		dup -1 = if s" boot" evaluate then
17018334Speter		dup 13 = if s" boot" evaluate then
17118334Speter		dup bootkey @ = if s" boot" evaluate then
17250397Sobrien		dup bootacpikey @ = if
17350397Sobrien			acpienabled? if
17450397Sobrien				s" acpi_load" unsetenv
17550397Sobrien				s" 1" s" hint.acpi.0.disabled" setenv
17618334Speter				s" 1" s" loader.acpi_disabled_by_user" setenv
17750397Sobrien			else
17850397Sobrien				s" YES" s" acpi_load" setenv
17950397Sobrien				s" 0" s" hint.acpi.0.disabled" setenv
18050397Sobrien			then
18118334Speter			s" boot" evaluate
18218334Speter		then
18318334Speter		dup bootsafekey @ = if
18418334Speter			s" arch-i386" environment? if
18518334Speter				s" acpi_load" unsetenv
18618334Speter				s" 1" s" hint.acpi.0.disabled" setenv
18718334Speter				s" 1" s" loader.acpi_disabled_by_user" setenv
18818334Speter			then
18918334Speter			s" 0" s" hw.ata.ata_dma" setenv
190132718Skan			s" 0" s" hw.ata.atapi_dma" setenv
19118334Speter			s" 0" s" hw.ata.wc" setenv
19218334Speter			s" 0" s" hw.eisa_slots" setenv
19318334Speter			s" boot" evaluate
19418334Speter		then
19590075Sobrien		dup bootverbosekey @ = if
19618334Speter			s" YES" s" boot_verbose" setenv
19718334Speter			s" boot" evaluate
19818334Speter		then
19918334Speter		dup bootsinglekey @ = if
20018334Speter			s" YES" s" boot_single" setenv
20118334Speter			s" boot" evaluate
20218334Speter		then
20318334Speter		dup escapekey @ = if 2drop exit then
20418334Speter		rebootkey @ = if s" reboot" evaluate then
20590075Sobrien	repeat
20690075Sobrien;
20718334Speter
20890075Sobrienprevious
209132718Skan