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