]> git.lizzy.rs Git - plan9front.git/blob - sys/src/9/boot/mkboot
Import sources from 2011-03-30 iso image
[plan9front.git] / sys / src / 9 / boot / mkboot
1 #!/bin/rc
2 #
3 #  this file configures a boot program (/boot) for a kernel.
4 #
5 if(! ~ $#* 1){
6         echo usage: mkboot file >[1=2]
7         exit 1
8 }
9
10 cat <<'---'
11 #include <u.h>
12 #include <libc.h>
13 #include "../boot/boot.h"
14
15 Method  method[]={
16 ---
17
18 #
19 #  configure all remote methods, i.e. all methods in the 'boot' section
20 #
21 #  EXAMPLE
22 #       boot
23 #               incon
24 #               9600
25 #               19200
26 #
27 ../port/mkextract boot 0 $* | awk '{
28         printf "        { \""  "" $1 "\", "\
29         "config" $1 ", "\
30         "connect" $1 ", "
31         print fieldn(2) " },"
32         }
33
34         func fieldn(n,  s,i)
35         {
36                 s = $0
37                 while (n > 1) {
38                         sub(/^[ \t]*/, "", s)
39                         if (substr(s, 1, 1) == "\"") {
40                                 sub(/^"[^\"]*"/, "", s)
41                         } else {
42                                 sub(/^[^ \t]*/, "", s)
43                         }
44                         n--
45                 }
46                 sub(/^[ \t]*/, "", s)
47                 if (substr(s, 1, 1) == "\"") {
48                         i = index(substr(s, 2), "\"")
49                         if (i > 0)
50                                 return substr(s, 1, i+1)
51                         else
52                                 return s
53                 } else {
54                         sub(/[ \t].*/, "", s)
55                         return s
56                 }
57         }'
58
59 cat <<'---'
60         { 0 },
61 };
62 ---
63
64 awk '
65         BEGIN   { cpuflag = 0; bootprog = "boot"; bootdisk = "#S/sdC0/"; rootdir = "/root"; }
66         $0 ~ "^boot" && $2=="cpu"\
67                 { cpuflag = 1
68                   if(NF == 4 && $3 == "boot")
69                         bootdisk = $4
70                 }
71         $0 ~ "^boot" && $2=="rootdir" && NF==3\
72                 { rootdir = $3 }
73         $0 ~ "^boot" && ($2=="bboot" || $2=="romboot" || $2=="dosboot")\
74                 { cpuflag = 1;  bootprog = $2; }
75         $0 ~ "^boot" && $2=="boot" && NF==3\
76                 { bootdisk = $3 }
77         END     { print "int cpuflag = " cpuflag ";"
78                   print "char* rootdir = \"" rootdir "\";"
79                   print "char* bootdisk = \"" bootdisk "\";"
80                   print "extern void " bootprog "(int, char**);"
81                   print "void"
82                   print "main(int argc, char **argv)"
83                   print "{"
84                   print "\t" bootprog "(argc, argv);"
85                   print "}"
86                 }
87 ' $1
88
89 #
90 #  configure in a cache file system if a 
91 # /386/bin/root appears in the bootdir section.
92 #
93 ../port/mkextract bootdir 0 $* | awk '
94         BEGIN                   { cfs = 0 }
95         $1 ~ "bin/cfs$" { cfs = 1 }
96         END                     { if(cfs)
97                                         print "int (*cfs)(int) = cache;"
98                                   else
99                                         print "int (*cfs)(int) = 0;"
100                                 }
101         '