xref: /inferno-os/emu/port/mkdevc (revision 8a003973f13c53f37de48c6c635500b5a0988cfb)
1*37da2899SCharles.Forsyth$AWK '
2*37da2899SCharles.ForsythBEGIN{
3*37da2899SCharles.Forsyth		if(ARGC < 2)
4*37da2899SCharles.Forsyth			exit
5*37da2899SCharles.Forsyth}
6*37da2899SCharles.Forsyth
7*37da2899SCharles.Forsyth/^$/{
8*37da2899SCharles.Forsyth		next;
9*37da2899SCharles.Forsyth}
10*37da2899SCharles.Forsyth/^#/{
11*37da2899SCharles.Forsyth		next;
12*37da2899SCharles.Forsyth}
13*37da2899SCharles.Forsythcollect && /^[^ \t]/{
14*37da2899SCharles.Forsyth		collect = 0;
15*37da2899SCharles.Forsyth}
16*37da2899SCharles.Forsythcollect && section ~ "dev"{
17*37da2899SCharles.Forsyth		dev[ndev++] = $1;
18*37da2899SCharles.Forsyth}
19*37da2899SCharles.Forsythcollect && section ~ "ip"{
20*37da2899SCharles.Forsyth		ip[nip++] = $1;
21*37da2899SCharles.Forsyth}
22*37da2899SCharles.Forsythcollect && section ~ "link"{
23*37da2899SCharles.Forsyth		link[nlink++] = $1;
24*37da2899SCharles.Forsyth}
25*37da2899SCharles.Forsythcollect && section ~ "mod"{
26*37da2899SCharles.Forsyth		mod[nmod++] = $1;
27*37da2899SCharles.Forsyth}
28*37da2899SCharles.Forsythcollect && section ~ "misc"{
29*37da2899SCharles.Forsyth		misc[nmisc++] = $1;
30*37da2899SCharles.Forsyth}
31*37da2899SCharles.Forsythcollect && section ~ "port"{
32*37da2899SCharles.Forsyth		port[nport++] = $0;
33*37da2899SCharles.Forsyth}
34*37da2899SCharles.Forsythcollect && section ~ "code"{
35*37da2899SCharles.Forsyth		code[ncode++] = $0;
36*37da2899SCharles.Forsyth}
37*37da2899SCharles.Forsyth$0 ~ /^[^ \t]/{
38*37da2899SCharles.Forsyth		if($0 ~ "(code|dev|ip|lib|link|mod|misc|port|root)"){
39*37da2899SCharles.Forsyth			section = $0;
40*37da2899SCharles.Forsyth			collect = 1;
41*37da2899SCharles.Forsyth		}
42*37da2899SCharles.Forsyth		next;
43*37da2899SCharles.Forsyth}
44*37da2899SCharles.Forsyth
45*37da2899SCharles.ForsythEND{
46*37da2899SCharles.Forsyth		if(ARGC < 2)
47*37da2899SCharles.Forsyth			exit "usage"
48*37da2899SCharles.Forsyth
49*37da2899SCharles.Forsyth		printf "#include \"dat.h\"\n"
50*37da2899SCharles.Forsyth		printf "#include \"fns.h\"\n"
51*37da2899SCharles.Forsyth		printf "#include \"error.h\"\n"
52*37da2899SCharles.Forsyth		printf "#include \"interp.h\"\n\n\n"
53*37da2899SCharles.Forsyth		printf "#include \"%s.root.h\"\n\n", ARGV[1];
54*37da2899SCharles.Forsyth
55*37da2899SCharles.Forsyth		nildev = 8;
56*37da2899SCharles.Forsyth		printf "ulong ndevs = %s;\n\n", ndev+nildev
57*37da2899SCharles.Forsyth		for(i = 0; i < ndev; i++)
58*37da2899SCharles.Forsyth			printf "extern Dev %sdevtab;\n", dev[i];
59*37da2899SCharles.Forsyth		printf "Dev* devtab[]={\n"
60*37da2899SCharles.Forsyth		for(i = 0; i < ndev; i++)
61*37da2899SCharles.Forsyth			printf "\t&%sdevtab,\n", dev[i];
62*37da2899SCharles.Forsyth		for(i = 0; i < nildev; i++)
63*37da2899SCharles.Forsyth			printf("\tnil,\n");
64*37da2899SCharles.Forsyth		printf "\tnil,\n};\n\n";
65*37da2899SCharles.Forsyth
66*37da2899SCharles.Forsyth
67*37da2899SCharles.Forsyth		for(i = 0; i < nlink; i++)
68*37da2899SCharles.Forsyth			printf "extern void %slink(void);\n", link[i];
69*37da2899SCharles.Forsyth
70*37da2899SCharles.Forsyth		printf "void links(void){\n";
71*37da2899SCharles.Forsyth		for(i = 0; i < nlink; i++)
72*37da2899SCharles.Forsyth			printf "\t%slink();\n", link[i];
73*37da2899SCharles.Forsyth		printf "}\n\n";
74*37da2899SCharles.Forsyth
75*37da2899SCharles.Forsyth		for(i = 0; i < nmod; i++)
76*37da2899SCharles.Forsyth			printf "extern void %smodinit(void);\n", mod[i];
77*37da2899SCharles.Forsyth		printf "void modinit(void){\n";
78*37da2899SCharles.Forsyth		for(i = 0; i < nmod; i++)
79*37da2899SCharles.Forsyth			printf "\t%smodinit();\n",mod[i];
80*37da2899SCharles.Forsyth		printf "}\n\n";
81*37da2899SCharles.Forsyth
82*37da2899SCharles.Forsyth		if(nip){
83*37da2899SCharles.Forsyth			printf "#include \"../ip/ip.h\"\n";
84*37da2899SCharles.Forsyth			for(i = 0; i < nip; i++)
85*37da2899SCharles.Forsyth				printf "extern void %sinit(Fs*);\n", ip[i];
86*37da2899SCharles.Forsyth			printf "void (*ipprotoinit[])(Fs*) = {\n";
87*37da2899SCharles.Forsyth			for(i = 0; i < nip; i++)
88*37da2899SCharles.Forsyth				printf "\t%sinit,\n", ip[i];
89*37da2899SCharles.Forsyth			printf "\tnil,\n};\n\n";
90*37da2899SCharles.Forsyth		}
91*37da2899SCharles.Forsyth
92*37da2899SCharles.Forsyth		for(i = 0; i < ncode; i++)
93*37da2899SCharles.Forsyth			printf "%s\n", code[i];
94*37da2899SCharles.Forsyth
95*37da2899SCharles.Forsyth		printf "char* conffile = \"%s\";\n", ARGV[1];
96*37da2899SCharles.Forsyth		printf "ulong kerndate = KERNDATE;\n";
97*37da2899SCharles.Forsyth
98*37da2899SCharles.Forsyth		exit
99*37da2899SCharles.Forsyth}' $*
100