loader.4th revision 222417
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: head/sys/boot/forth/loader.4th 222417 2011-05-28 08:50:38Z julian $
26
27s" 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
39256 dictthreshold !  \ 256 cells minimum free space
402048 dictincrease !  \ 2048 additional cells each time
41
42include /boot/support.4th
43
44\ ***** boot-conf
45\
46\	Prepares to boot as specified by loaded configuration files.
47
48only forth also support-functions also builtins definitions
49
50: boot
51  0= if ( interpreted ) get_arguments then
52
53  \ Unload only if a path was passed
54  dup if
55    >r over r> swap
56    c@ [char] - <> if
57      0 1 unload drop
58    else
59      s" kernelname" getenv? if ( a kernel has been loaded )
60        1 boot exit
61      then
62      load_kernel_and_modules
63      ?dup if exit then
64      0 1 boot exit
65    then
66  else
67    s" kernelname" getenv? if ( a kernel has been loaded )
68      1 boot exit
69    then
70    load_kernel_and_modules
71    ?dup if exit then
72    0 1 boot exit
73  then
74  load_kernel_and_modules
75  ?dup 0= if 0 1 boot then
76;
77
78: boot-conf
79  0= if ( interpreted ) get_arguments then
80  0 1 unload drop
81  load_kernel_and_modules
82  ?dup 0= if 0 1 autoboot then
83;
84
85also forth definitions also builtins
86
87builtin: boot
88builtin: boot-conf
89
90only forth definitions also support-functions
91
92include /boot/check-password.4th
93
94\ ***** start
95\
96\       Initializes support.4th global variables, sets loader_conf_files,
97\       process conf files, and, if any one such file was succesfully
98\       read to the end, load kernel and modules.
99
100: start  ( -- ) ( throws: abort & user-defined )
101  s" /boot/defaults/loader.conf" initialize
102  include_conf_files
103  include_nextboot_file
104  \ Will *NOT* try to load kernel and modules if no configuration file
105  \ was succesfully loaded!
106  any_conf_read? if
107    load_kernel
108    load_modules
109  then
110;
111
112\ ***** initialize
113\
114\	Overrides support.4th initialization word with one that does
115\	everything start one does, short of loading the kernel and
116\	modules. Returns a flag
117
118: initialize ( -- flag )
119  s" /boot/defaults/loader.conf" initialize
120  include_conf_files
121  include_nextboot_file
122  any_conf_read?
123;
124
125\ ***** read-conf
126\
127\	Read a configuration file, whose name was specified on the command
128\	line, if interpreted, or given on the stack, if compiled in.
129
130: (read-conf)  ( addr len -- )
131  conf_files string=
132  include_conf_files \ Will recurse on new loader_conf_files definitions
133;
134
135: read-conf  ( <filename> | addr len -- ) ( throws: abort & user-defined )
136  state @ if
137    \ Compiling
138    postpone (read-conf)
139  else
140    \ Interpreting
141    bl parse (read-conf)
142  then
143; immediate
144
145\ show, enable, disable, toggle module loading. They all take module from
146\ the next word
147
148: set-module-flag ( module_addr val -- ) \ set and print flag
149  over module.flag !
150  dup module.name strtype
151  module.flag @ if ."  will be loaded" else ."  will not be loaded" then cr
152;
153
154: enable-module find-module ?dup if true set-module-flag then ;
155
156: disable-module find-module ?dup if false set-module-flag then ;
157
158: toggle-module find-module ?dup if dup module.flag @ 0= set-module-flag then ;
159
160\ ***** show-module
161\
162\	Show loading information about a module.
163
164: show-module ( <module> -- ) find-module ?dup if show-one-module then ;
165
166\ Words to be used inside configuration files
167
168: retry false ;         \ For use in load error commands
169: ignore true ;         \ For use in load error commands
170
171\ Return to strict forth vocabulary
172
173: #type
174  over - >r
175  type
176  r> spaces
177;
178
179: .? 2 spaces 2swap 15 #type 2 spaces type cr ;
180
181: ?
182  ['] ? execute
183  s" boot-conf" s" load kernel and modules, then autoboot" .?
184  s" read-conf" s" read a configuration file" .?
185  s" enable-module" s" enable loading of a module" .?
186  s" disable-module" s" disable loading of a module" .?
187  s" toggle-module" s" toggle loading of a module" .?
188  s" show-module" s" show module load data" .?
189;
190
191only forth also
192
193