Subversion Repositories planix.SVN

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 1
#!/bin/rc
2
 
3
awk -v 'objtype='$objtype -v 'pwd='`{pwd} '
4
BEGIN{
5
	if(ARGC < 2)
6
		exit
7
}
8
 
9
/^[ \t]*$/{
10
	next;
11
}
12
/^#/{
13
	next;
14
}
15
collect && /^[^ \t]/{
16
	collect = 0;
17
}
18
collect && section == "dev"{
19
	dev[ndev++] = $1;
20
	if($1 == "ad")
21
		devad = 1;
22
	else if($1 == "sd")
23
		devsd = 1;
24
	else if($1 == "uart")
25
		devuart = 1;
26
	else if($1 == "vga")
27
		devvga = 1;
28
	for(i = 2; i <= NF; i++){
29
		if($i == "dma" && objtype ~ "(386|alpha|amd64)")
30
			i8237dma++;
31
	}
32
}
33
collect && section == "ip"{
34
	ip[nip++] = $1;
35
}
36
collect && section == "link"{
37
	link[nlink++] = $1;
38
}
39
collect && section == "misc"{
40
	sub(/^[ \t]*/, "");
41
	misc[nmisc++] = $1;
42
	if($1 ~ "^arch.*")
43
		arch[narch++] = $1;
44
	else if($1 ~ "^ad.*")
45
		adifc[nadifc++] = $1;
46
	else if($1 ~ "^sd.*")
47
		sdifc[nsdifc++] = $1;
48
	else if($1 ~ "^uart.*")
49
		physuart[nphysuart++] = substr($1, 5, length($1)-4) "physuart";
50
	else if($1 ~ "^vga.*"){
51
		if(NF == 1)
52
			vgadev[nvgadev++] = $1;
53
		else for(i = 2; i <= NF; i++){
54
			if($i ~ "[+]cur")
55
				vgadev[nvgadev++] = $1;
56
			if($i ~ "[+=]cur")
57
				vgacur[nvgacur++] = $1;
58
		}
59
	}
60
}
61
 
62
collect && section == "port"{
63
	sub(/^[ \t]*/, "");
64
	port[nport++] = $0;
65
}
66
$0 ~ /^[^ \t]/{
67
	if($1 ~ "(bootdir|dev|ip|link|misc|port)"){
68
		section = $1;
69
		collect = 1;
70
	}
71
	next;
72
}
73
 
74
END{
75
	if(ARGC < 2)
76
		exit "usage"
77
 
78
	printf "#include \"u.h\"\n";
79
	printf "#include \"../port/lib.h\"\n";
80
	printf "#include \"mem.h\"\n";
81
	printf "#include \"dat.h\"\n";
82
	printf "#include \"fns.h\"\n";
83
	printf "#include \"io.h\"\n";
84
	printf "#include \"../port/error.h\"\n\n";
85
 
86
	for(i = 0; i < ndev; i++)
87
		printf "extern Dev %sdevtab;\n", dev[i];
88
	printf "Dev* devtab[]={\n";
89
	for(i = 0; i < ndev; i++)
90
		printf "\t&%sdevtab,\n", dev[i];
91
	printf "\tnil,\n};\n\n";
92
 
93
	if(objtype ~ "(386|alpha|amd64)"){
94
		alloc = "nil";
95
		if(i8237dma){
96
			printf "extern void _i8237alloc(void);\n";
97
			alloc = "_i8237alloc";
98
		}
99
		printf "void (*i8237alloc)(void) = %s;\n", alloc;
100
		printf "int i8237dma = %d;\n\n", i8237dma;
101
	}
102
 
103
	for(i = 0; i < nlink; i++)
104
		printf "extern void %slink(void);\n", link[i];
105
 
106
	printf "void links(void){\n";
107
	print "\tbootlinks();\n";
108
	for(i = 0; i < nlink; i++)
109
		printf "\t%slink();\n", link[i];
110
	printf "}\n\n";
111
 
112
	if(narch || objtype == "386"){
113
		for(i = 0; i < narch; i++)
114
			printf "extern PCArch %s;\n", arch[i];
115
		printf "PCArch* knownarch[] = {\n";
116
		for(i = 0; i < narch; i++)
117
			printf "\t&%s,\n", arch[i];
118
		printf "\tnil,\n};\n\n";
119
	}
120
 
121
	if(devad){
122
		printf "#include \"../port/ad.h\"\n";
123
		for(i = 0; i < nadifc; i++)
124
			printf "extern ADifc %sifc;\n", adifc[i];
125
		printf "ADifc* adifc[] = {\n";
126
	  	for(i = 0; i < nadifc; i++)
127
			printf "\t&%sifc,\n", adifc[i];
128
	  	printf "\tnil,\n};\n\n";
129
	}
130
	if(devsd){
131
		printf "#include \"../port/sd.h\"\n";
132
		for(i = 0; i < nsdifc; i++)
133
			printf "extern SDifc %sifc;\n", sdifc[i];
134
		printf "SDifc* sdifc[] = {\n";
135
	  	for(i = 0; i < nsdifc; i++)
136
			printf "\t&%sifc,\n", sdifc[i];
137
	  	printf "\tnil,\n};\n\n";
138
	}
139
 
140
	if(devuart){
141
		for(i = 0; i < nphysuart; i++)
142
			printf "extern PhysUart %s;\n", physuart[i];
143
		printf "PhysUart* physuart[] = {\n";
144
	  	for(i = 0; i < nphysuart; i++)
145
			printf "\t&%s,\n", physuart[i];
146
	  	printf "\tnil,\n};\n\n";
147
	}
148
 
149
	if(devvga){
150
		printf "#define	Image	IMAGE\n";
151
		printf "#include <draw.h>\n";
152
		printf "#include <memdraw.h>\n";
153
		printf "#include <cursor.h>\n";
154
		printf "#include \"screen.h\"\n";
155
 
156
		for(i = 0; i < nvgadev; i++)
157
			printf "extern VGAdev %sdev;\n", vgadev[i];
158
	  	printf "VGAdev* vgadev[] = {\n";
159
	  	for(i = 0; i < nvgadev; i++)
160
			printf "\t&%sdev,\n", vgadev[i];
161
	  	printf "\tnil,\n};\n\n";
162
 
163
		for(i = 0; i < nvgacur; i++)
164
			printf "extern VGAcur %scur;\n", vgacur[i];
165
	  	printf "VGAcur* vgacur[] = {\n";
166
	  	for(i = 0; i < nvgacur; i++)
167
			printf "\t&%scur,\n", vgacur[i];
168
	  	printf "\tnil,\n};\n\n";
169
	}
170
 
171
	if(nip){
172
		printf "#include \"../ip/ip.h\"\n";
173
		for(i = 0; i < nip; i++)
174
			printf "extern void %sinit(Fs*);\n", ip[i];
175
		printf "void (*ipprotoinit[])(Fs*) = {\n";
176
		for(i = 0; i < nip; i++)
177
			printf "\t%sinit,\n", ip[i];
178
		printf "\tnil,\n};\n\n";
179
	}
180
 
181
	if(nport){
182
		for(i = 0; i < nport; i++)
183
			printf "%s\n", port[i];
184
		printf "\n";
185
	}
186
 
187
	printf "char* conffile = \"%s/%s\";\n", pwd, ARGV[1];
188
	printf "ulong kerndate = KERNDATE;\n";
189
 
190
	exit
191
}' $*