1#	$NetBSD: devlist2h.awk,v 1.5 2009/04/30 07:01:26 skrll Exp $
2
3#	$OpenBSD: devlist2h.awk,v 1.6 2004/04/07 18:24:19 mickey Exp $
4
5#
6# Copyright (c) 1998-2003 Michael Shalayeff
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#
18# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
19# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
20# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
21# IN NO EVENT SHALL THE AUTHOR OR HIS RELATIVES BE LIABLE FOR ANY DIRECT,
22# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
23# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
24# SERVICES; LOSS OF MIND, USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
26# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
27# IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
28# THE POSSIBILITY OF SUCH DAMAGE.
29#
30
31BEGIN	{
32	ncpu = busted = 0;
33	cpuh="cpudevs.h";
34	cpud="cpudevs_data.h";
35	SUBSEP = "_";
36}
37
38/^[ \t]*$/	{next}
39
40/^[ \t]*\/\*/	{busted++}
41
42/^[ \t]*#/	{next}
43
44busted	{
45	cp = match($0, /\*\//);
46	if(!cp) {
47		next;
48	} else if (cp + 1 == length($0)) {
49		busted = 0;
50		next;
51	} else {
52		sub(/.*\*\//, "");
53		busted = 0;
54	}
55}
56
57# first line is rcsid, beware
58NR == 1	{
59	VERSION = $0;
60	gsub("\\$", "", VERSION);
61
62	printf("/*\t$NetBSD" "$\t*/\n\n") > cpud;
63	printf("/*\n * THIS FILE AUTOMATICALLY GENERATED. DO NOT EDIT.\n" \
64	       " * generated from:\n *\t%s\n */\n\n", VERSION) > cpud;
65	printf("/*\t$NetBSD" "$\t*/\n\n") > cpuh;
66	printf("/*\n * THIS FILE AUTOMATICALLY GENERATED. DO NOT EDIT.\n" \
67	       " * generated from:\n *\t%s\n */\n\n", VERSION) > cpuh;
68}
69
70/^\$/ {
71	next;
72}
73
74NF > 0 && $1 == "type"	{
75	printf("#define\tHPPA_TYPE_%s\t%s\n", toupper($2), $3) > cpuh;
76	types[tolower($2)] = toupper($2);
77	next;
78}
79
80NR > 1 {
81	if (tolower($1) in types) {
82		printf("#define\tHPPA_%s_%s\t%s\n", toupper($1),
83		       toupper($2), $3) > cpuh;
84		printf("{HPPA_TYPE_%s,\tHPPA_%s_%s,\t\"", toupper($1),
85		       toupper($1), toupper($2), $3) > cpud;
86		f = 4;
87		while (f <= NF) {
88			sub(/[ \t]*/, "", $f);
89			ep = match($f, /\*\//);
90			if (busted && !ep) {
91				f++;
92				continue;
93			}
94			if (match($f, /\/\*/)) {
95				if (ep) {
96					sub(/\/\*/, "", $f);
97				} else {
98					sub(/\/\*.*$/, "", $f);
99					busted++;
100				}
101			}
102			if (ep) {
103				gsub(/^.*\*\//, "", $f);
104				busted = 0;
105			}
106			if (length($f)) {
107				if (f > 4)
108					printf (" ") > cpud;
109				printf ("%s", $f) > cpud;
110			}
111			f++;
112		}
113		printf("\" },\n") > cpud;
114	} else {
115		printf("WHA at line %d\n", NR);
116		exit(1);
117	}
118}
119
120END	{
121	if (busted) {
122		print("unterminated comment at the EOF\n");
123		exit(1);
124	}
125	close(cpud)
126	close(cpuh)
127}
128