1#! /usr/bin/awk -f
2#         $NetBSD: podulelist2h.awk,v 1.4 2005/12/11 12:23:28 christos Exp $
3#         from: devlist2h.awk,v 1.2 1996/01/22 21:08:09 cgd Exp
4#
5# Copyright (c) 1996 Mark Brinicombe
6# Copyright (c) 1995, 1996 Christopher G. Demetriou
7# All rights reserved.
8#
9# Redistribution and use in source and binary forms, with or without
10# modification, are permitted provided that the following conditions
11# are met:
12# 1. Redistributions of source code must retain the above copyright
13#    notice, this list of conditions and the following disclaimer.
14# 2. Redistributions in binary form must reproduce the above copyright
15#    notice, this list of conditions and the following disclaimer in the
16#    documentation and/or other materials provided with the distribution.
17# 3. All advertising materials mentioning features or use of this software
18#    must display the following acknowledgement:
19#      This product includes software developed by Mark Brinicombe
20# 4. The name of the author may not be used to endorse or promote products
21#    derived from this software without specific prior written permission
22#
23# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
24# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
25# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
26# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
27# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
28# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
29# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
30# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
31# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
32# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33#
34BEGIN {
35          npodules = nvendors = 0
36          dfile="podule_data.h"
37          hfile="podules.h"
38}
39NR == 1 {
40          VERSION = $0
41          gsub("\\$", "", VERSION)
42          gsub(/ $/, "", VERSION)
43
44          printf("/*\t\$NetBSD\$\t*/\n\n") > dfile
45          printf("/*\n") > dfile
46          printf(" * THIS FILE AUTOMATICALLY GENERATED.  DO NOT EDIT.\n") \
47              > dfile
48          printf(" *\n") > dfile
49          printf(" * generated from:\n") > dfile
50          printf(" *\t%s\n", VERSION) > dfile
51          printf(" */\n") > dfile
52
53          printf("/*\t\$NetBSD\$\t*/\n\n") > hfile
54          printf("/*\n") > hfile
55          printf(" * THIS FILE AUTOMATICALLY GENERATED.  DO NOT EDIT.\n") \
56              > hfile
57          printf(" *\n") > hfile
58          printf(" * generated from:\n") > hfile
59          printf(" *\t%s\n", VERSION) > hfile
60          printf(" */\n") > hfile
61
62          next
63}
64$1 == "manufacturer" {
65          nvendors++
66
67          vendorindex[$2] = nvendors;             # record index for this name, for later.
68          vendors[nvendors, 1] = $2;              # name
69          vendors[nvendors, 2] = $3;              # id
70          printf("#define\tMANUFACTURER_%s\t%s\t", vendors[nvendors, 1],
71              vendors[nvendors, 2]) > hfile
72          i = 3; f = 4;
73
74          # comments
75          ocomment = oparen = 0
76          if (f <= NF) {
77                    printf("\t/* ") > hfile
78                    ocomment = 1;
79          }
80          while (f <= NF) {
81                    if ($f == "#") {
82                              printf("(") > hfile
83                              oparen = 1
84                              f++
85                              continue
86                    }
87                    if (oparen) {
88                              printf("%s", $f) > hfile
89                              if (f < NF)
90                                        printf(" ") > hfile
91                              f++
92                              continue
93                    }
94                    vendors[nvendors, i] = $f
95                    printf("%s", vendors[nvendors, i]) > hfile
96                    if (f < NF)
97                              printf(" ") > hfile
98                    i++; f++;
99          }
100          if (oparen)
101                    printf(")") > hfile
102          if (ocomment)
103                    printf(" */") > hfile
104          printf("\n") > hfile
105
106          next
107}
108$1 == "podule" {
109          npodules++
110
111          podules[npodules, 1] = $2;              # podule id
112          podules[npodules, 2] = $3;              # id
113          printf("#define\tPODULE_%s\t%s\t",
114              podules[npodules, 1], podules[npodules, 2]) > hfile
115
116          i=3; f = 4;
117
118          # comments
119          ocomment = oparen = 0
120          if (f <= NF) {
121                    printf("\t/* ") > hfile
122                    ocomment = 1;
123          }
124          while (f <= NF) {
125                    if ($f == "#") {
126                              printf("(") > hfile
127                              oparen = 1
128                              f++
129                              continue
130                    }
131                    if (oparen) {
132                              printf("%s", $f) > hfile
133                              if (f < NF)
134                                        printf(" ") > hfile
135                              f++
136                              continue
137                    }
138                    podules[npodules, i] = $f
139                    printf("%s", podules[npodules, i]) > hfile
140                    if (f < NF)
141                              printf(" ") > hfile
142                    i++; f++;
143          }
144          if (oparen)
145                    printf(")") > hfile
146          if (ocomment)
147                    printf(" */") > hfile
148          printf("\n") > hfile
149
150          next
151}
152{
153          if ($0 == "")
154                    blanklines++
155          print $0 > hfile
156          if (blanklines < 2)
157                    print $0 > dfile
158}
159END {
160          # print out the match tables
161
162          printf("\n") > dfile
163
164          printf("static struct podule_description known_podules[] = {\n") > dfile
165          for (j = 1; j <= npodules; j++) {
166                    printf("\t{ PODULE_%s,", podules[j, 1]) > dfile
167                    printf("\t\"") > dfile
168                    k = 3;
169                    needspace = 0;
170                    while (podules[j, k] != "") {
171                              if (needspace)
172                                        printf(" ") > dfile
173                              printf("%s", podules[j, k]) > dfile
174                              needspace = 1
175                              k++
176                    }
177                    printf("\" },\n") > dfile
178          }
179          printf("\t{ 0x0000, NULL }\n") > dfile
180          printf("};\n\n") > dfile
181
182          printf("\n") > dfile
183
184          printf("struct manufacturer_description known_manufacturers[] = {\n") > dfile
185          for (i = 1; i <= nvendors; i++) {
186                    printf("\t{ MANUFACTURER_%s, \t", vendors[i, 1]) > dfile
187                    if (length(vendors[i, 1]) < 7)
188                              printf("\t") > dfile
189                    printf("\"") > dfile
190                    j = 3;
191                    needspace = 0;
192                    while (vendors[i, j] != "") {
193                              if (needspace)
194                                        printf(" ") > dfile
195                              printf("%s", vendors[i, j]) > dfile
196                              needspace = 1
197                              j++
198                    }
199                    printf("\" },\n") > dfile
200          }
201          printf("\t{ 0, NULL }\n") > dfile
202          printf("};\n") > dfile
203}
204