devlist2h.awk revision 1.9.64.1 1 #! /usr/bin/awk -f
2 # $NetBSD: devlist2h.awk,v 1.9.64.1 2017/08/28 17:52:04 skrll Exp $
3 #
4 # Copyright (c) 1998 The NetBSD Foundation, Inc.
5 # All rights reserved.
6 #
7 # This code is derived from software contributed to The NetBSD Foundation
8 # by Christos Zoulas.
9 #
10 # Redistribution and use in source and binary forms, with or without
11 # modification, are permitted provided that the following conditions
12 # are met:
13 # 1. Redistributions of source code must retain the above copyright
14 # notice, this list of conditions and the following disclaimer.
15 # 2. Redistributions in binary form must reproduce the above copyright
16 # notice, this list of conditions and the following disclaimer in the
17 # documentation and/or other materials provided with the distribution.
18 #
19 # THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
20 # ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
21 # TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22 # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
23 # BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24 # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25 # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26 # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27 # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28 # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29 # POSSIBILITY OF SUCH DAMAGE.
30 #
31 # Copyright (c) 1995, 1996 Christopher G. Demetriou
32 # All rights reserved.
33 #
34 # Redistribution and use in source and binary forms, with or without
35 # modification, are permitted provided that the following conditions
36 # are met:
37 # 1. Redistributions of source code must retain the above copyright
38 # notice, this list of conditions and the following disclaimer.
39 # 2. Redistributions in binary form must reproduce the above copyright
40 # notice, this list of conditions and the following disclaimer in the
41 # documentation and/or other materials provided with the distribution.
42 # 3. All advertising materials mentioning features or use of this software
43 # must display the following acknowledgement:
44 # This product includes software developed by Christopher G. Demetriou.
45 # 4. The name of the author(s) may not be used to endorse or promote products
46 # derived from this software without specific prior written permission
47 #
48 # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
49 # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
50 # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
51 # IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
52 # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
53 # NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
54 # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
55 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
56 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
57 # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
58 #
59 function collectline(f) {
60 oparen = 0
61 line = ""
62 while (f <= NF) {
63 if ($f == "#") {
64 line = line "("
65 oparen = 1
66 f++
67 continue
68 }
69 if (oparen) {
70 line = line $f
71 if (f < NF)
72 line = line " "
73 f++
74 continue
75 }
76 line = line $f
77 if (f < NF)
78 line = line " "
79 f++
80 }
81 if (oparen)
82 line = line ")"
83 return line
84 }
85 function checkdecl() {
86 done = 1
87 if (!decl) {
88 decl = 1;
89 printf("struct isapnp_matchinfo {\n") > hfile
90 printf("\tconst char *name;\n") > hfile
91 printf("\tint variant;\n") > hfile
92 printf("};\n\n") > hfile
93 printf("struct isapnp_devinfo {\n") > hfile
94 printf("\tconst struct isapnp_matchinfo *devlogic;\n") > hfile
95 printf("\tint nlogic;\n") > hfile
96 printf("\tconst struct isapnp_matchinfo *devcompat;\n") > hfile
97 printf("\tint ncompat;\n") > hfile
98 printf("};\n\n") > hfile
99 printf("\n#include <sys/cdefs.h>\n__KERNEL_RCSID(0, \"$NetBSD" "$\");\n\n") > cfile
100 printf("#include <sys/param.h>\n") > cfile
101 printf("#include <dev/isapnp/isapnpdevs.h>\n\n") > cfile
102 }
103 }
104 BEGIN {
105 decl = done = ncompat = nlogicals = ndriver = blanklines = ncompats = 0
106 cfile="isapnpdevs.c"
107 hfile="isapnpdevs.h"
108 }
109 NR == 1 {
110 VERSION = $0
111 gsub("\\$", "", VERSION)
112 gsub(/ $/, "", VERSION)
113
114 printf("/*\t$NetBSD" "$\t*/\n\n") > cfile
115 printf("/*\n") > cfile
116 printf(" * THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT.\n") \
117 > cfile
118 printf(" *\n") > cfile
119 printf(" * generated from:\n") > cfile
120 printf(" *\t%s\n", VERSION) > cfile
121 printf(" */\n") > cfile
122
123 printf("/*\t$NetBSD" "$\t*/\n\n") > hfile
124 printf("/*\n") > hfile
125 printf(" * THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT.\n") \
126 > hfile
127 printf(" *\n") > hfile
128 printf(" * generated from:\n") > hfile
129 printf(" *\t%s\n", VERSION) > hfile
130 printf(" */\n") > hfile
131 printf("\n") > hfile
132 next
133 }
134 NF > 0 && $1 == "driver" {
135 checkdecl()
136 ndriver++
137
138 driverindex[$2] = ndriver;
139 driver[ndriver, 1] = $2;
140 driver[ndriver, 2] = collectline(3);
141 printf("/* %s */\n", driver[ndriver, 2]) > hfile
142 printf("extern const struct isapnp_devinfo isapnp_%s_devinfo;\n",
143 driver[ndriver, 1]) > hfile
144 next
145 }
146 NF > 0 && $1 == "devlogic" {
147 checkdecl()
148 nlogicals++
149
150 logicals[nlogicals, 1] = $2;
151 logicals[nlogicals, 2] = $3;
152 logicals[nlogicals, 3] = $4;
153 logicals[nlogicals, 4] = collectline(5);
154 next
155 }
156 NF > 0 && $1 == "devcompat" {
157 checkdecl()
158 ncompats++
159
160 compats[ncompats, 1] = $2;
161 compats[ncompats, 2] = $3;
162 compats[ncompats, 3] = $4;
163 compats[ncompats, 4] = collectline(5);
164 next
165 }
166 {
167 if (!done) {
168 if ($0 == "")
169 blanklines++
170 print $0 > hfile
171 if (blanklines < 2)
172 print $0 > cfile
173 }
174 }
175 END {
176 # print out the match tables
177
178 printf("\n") > cfile
179
180 for (i = 1; i <= ndriver; i++) {
181 nlogical = ncompat = 0;
182 printf("/* %s */\n", driver[i, 2]) > cfile
183 for (j = 1; j <= nlogicals; j++) {
184 if (logicals[j, 1] == driver[i, 1]) {
185 if (nlogical == 0)
186 printf("static const struct isapnp_matchinfo isapnp_%s_devlogic[] = {\n",
187 driver[i, 1]) > cfile
188 nlogical++;
189 printf("\t{\"%s\", %d},\t/* %s */\n",
190 logicals[j, 2], logicals[j, 3],
191 logicals[j, 4]) > cfile
192 }
193 }
194 if (nlogical != 0)
195 printf("};\n") > cfile
196 for (j = 1; j <= ncompats; j++) {
197 if (compats[j, 1] == driver[i, 1]) {
198 if (ncompat == 0)
199 printf("static const struct isapnp_matchinfo isapnp_%s_devcompat[] = {\n",
200 driver[i, 1]) > cfile
201 ncompat++;
202 printf("\t{\"%s\", %d},\t/* %s */\n",
203 compats[j, 2], compats[j, 3],
204 compats[j, 4]) > cfile
205 }
206 }
207 if (ncompat != 0)
208 printf("};\n") > cfile
209 printf("const struct isapnp_devinfo isapnp_%s_devinfo = {\n",
210 driver[i, 1]) > cfile
211 if (nlogical != 0)
212 printf("\tisapnp_%s_devlogic, %d,\n",
213 driver[i, 1], nlogical) > cfile
214 else
215 printf("\tNULL, 0,\n") > cfile
216 if (ncompat != 0)
217 printf("\tisapnp_%s_devcompat, %d,\n",
218 driver[i, 1], ncompat) > cfile
219 else
220 printf("\tNULL, 0,\n") > cfile
221 printf("};\n\n") > cfile;
222
223 }
224 close(cfile)
225 close(hfile)
226 }
227