]> CyberLeo.Net >> Repos - FreeBSD/releng/10.0.git/blob - sys/boot/forth/loader.4th
- Copy stable/10 (r259064) to releng/10.0 as part of the
[FreeBSD/releng/10.0.git] / sys / boot / forth / loader.4th
1 \ Copyright (c) 1999 Daniel C. Sobral <dcs@freebsd.org>
2 \ All rights reserved.
3 \
4 \ Redistribution and use in source and binary forms, with or without
5 \ modification, are permitted provided that the following conditions
6 \ are met:
7 \ 1. Redistributions of source code must retain the above copyright
8 \    notice, this list of conditions and the following disclaimer.
9 \ 2. Redistributions in binary form must reproduce the above copyright
10 \    notice, this list of conditions and the following disclaimer in the
11 \    documentation and/or other materials provided with the distribution.
12 \
13 \ THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
14 \ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15 \ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
16 \ ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
17 \ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
18 \ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
19 \ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
20 \ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
21 \ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
22 \ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
23 \ SUCH DAMAGE.
24 \
25 \ $FreeBSD$
26
27 s" arch-i386" environment? [if] [if]
28         s" loader_version" environment?  [if]
29                 11 < [if]
30                         .( Loader version 1.1+ required) cr
31                         abort
32                 [then]
33         [else]
34                 .( Could not get loader version!) cr
35                 abort
36         [then]
37 [then] [then]
38
39 256 dictthreshold !  \ 256 cells minimum free space
40 2048 dictincrease !  \ 2048 additional cells each time
41
42 include /boot/support.4th
43 include /boot/color.4th
44
45 only forth also support-functions also builtins definitions
46
47 : try-menu-unset
48   \ menu-unset may not be present
49   s" beastie_disable" getenv
50   dup -1 <> if
51     s" YES" compare-insensitive 0= if
52       exit
53     then
54   else
55     drop
56   then
57   s" menu-unset"
58   sfind if
59     execute
60   else
61     drop
62   then
63   s" menusets-unset"
64   sfind if
65     execute
66   else
67     drop
68   then
69 ;
70
71 : boot
72   0= if ( interpreted ) get_arguments then
73
74   loader_color? if
75     ." \e[37;44mBooting...\e[0m" cr
76   else
77     ." Booting..." cr
78   then
79
80   \ Unload only if a path was passed
81   dup if
82     >r over r> swap
83     c@ [char] - <> if
84       0 1 unload drop
85     else
86       s" kernelname" getenv? if ( a kernel has been loaded )
87         try-menu-unset
88         1 boot exit
89       then
90       load_kernel_and_modules
91       ?dup if exit then
92       try-menu-unset
93       0 1 boot exit
94     then
95   else
96     s" kernelname" getenv? if ( a kernel has been loaded )
97       try-menu-unset
98       1 boot exit
99     then
100     load_kernel_and_modules
101     ?dup if exit then
102     try-menu-unset
103     0 1 boot exit
104   then
105   load_kernel_and_modules
106   ?dup 0= if 0 1 boot then
107 ;
108
109 \ ***** boot-conf
110 \
111 \       Prepares to boot as specified by loaded configuration files.
112
113 : boot-conf
114   0= if ( interpreted ) get_arguments then
115   0 1 unload drop
116   load_kernel_and_modules
117   ?dup 0= if 0 1 autoboot then
118 ;
119
120 also forth definitions also builtins
121
122 builtin: boot
123 builtin: boot-conf
124
125 only forth definitions also support-functions
126
127 include /boot/check-password.4th
128
129 \ ***** start
130 \
131 \       Initializes support.4th global variables, sets loader_conf_files,
132 \       process conf files, and, if any one such file was succesfully
133 \       read to the end, load kernel and modules.
134
135 : start  ( -- ) ( throws: abort & user-defined )
136   s" /boot/defaults/loader.conf" initialize
137   include_conf_files
138   include_nextboot_file
139   \ Will *NOT* try to load kernel and modules if no configuration file
140   \ was succesfully loaded!
141   any_conf_read? if
142     load_kernel
143     load_modules
144   then
145 ;
146
147 \ ***** initialize
148 \
149 \       Overrides support.4th initialization word with one that does
150 \       everything start one does, short of loading the kernel and
151 \       modules. Returns a flag
152
153 : initialize ( -- flag )
154   s" /boot/defaults/loader.conf" initialize
155   include_conf_files
156   include_nextboot_file
157   any_conf_read?
158 ;
159
160 \ ***** read-conf
161 \
162 \       Read a configuration file, whose name was specified on the command
163 \       line, if interpreted, or given on the stack, if compiled in.
164
165 : (read-conf)  ( addr len -- )
166   conf_files string=
167   include_conf_files \ Will recurse on new loader_conf_files definitions
168 ;
169
170 : read-conf  ( <filename> | addr len -- ) ( throws: abort & user-defined )
171   state @ if
172     \ Compiling
173     postpone (read-conf)
174   else
175     \ Interpreting
176     bl parse (read-conf)
177   then
178 ; immediate
179
180 \ show, enable, disable, toggle module loading. They all take module from
181 \ the next word
182
183 : set-module-flag ( module_addr val -- ) \ set and print flag
184   over module.flag !
185   dup module.name strtype
186   module.flag @ if ."  will be loaded" else ."  will not be loaded" then cr
187 ;
188
189 : enable-module find-module ?dup if true set-module-flag then ;
190
191 : disable-module find-module ?dup if false set-module-flag then ;
192
193 : toggle-module find-module ?dup if dup module.flag @ 0= set-module-flag then ;
194
195 \ ***** show-module
196 \
197 \       Show loading information about a module.
198
199 : show-module ( <module> -- ) find-module ?dup if show-one-module then ;
200
201 \ Words to be used inside configuration files
202
203 : retry false ;         \ For use in load error commands
204 : ignore true ;         \ For use in load error commands
205
206 \ Return to strict forth vocabulary
207
208 : #type
209   over - >r
210   type
211   r> spaces
212 ;
213
214 : .? 2 spaces 2swap 15 #type 2 spaces type cr ;
215
216 : ?
217   ['] ? execute
218   s" boot-conf" s" load kernel and modules, then autoboot" .?
219   s" read-conf" s" read a configuration file" .?
220   s" enable-module" s" enable loading of a module" .?
221   s" disable-module" s" disable loading of a module" .?
222   s" toggle-module" s" toggle loading of a module" .?
223   s" show-module" s" show module load data" .?
224 ;
225
226 only forth also
227