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