xref: /openbsd-src/sys/dev/sdmmc/devlist2h.awk (revision e4453397f04d25129de1d3947b22d8d084e3e3f4)
1da6d0d2dSuwe#! /usr/bin/awk -f
2*e4453397Sjsg#	$OpenBSD: devlist2h.awk,v 1.4 2023/01/04 14:42:46 jsg Exp $
3da6d0d2dSuwe#	$NetBSD: devlist2h.awk,v 1.2 1998/07/22 11:47:13 christos Exp $
4da6d0d2dSuwe#
5da6d0d2dSuwe# Copyright (c) 1995, 1996 Christopher G. Demetriou
6da6d0d2dSuwe# All rights reserved.
7da6d0d2dSuwe#
8da6d0d2dSuwe# Redistribution and use in source and binary forms, with or without
9da6d0d2dSuwe# modification, are permitted provided that the following conditions
10da6d0d2dSuwe# are met:
11da6d0d2dSuwe# 1. Redistributions of source code must retain the above copyright
12da6d0d2dSuwe#    notice, this list of conditions and the following disclaimer.
13da6d0d2dSuwe# 2. Redistributions in binary form must reproduce the above copyright
14da6d0d2dSuwe#    notice, this list of conditions and the following disclaimer in the
15da6d0d2dSuwe#    documentation and/or other materials provided with the distribution.
16da6d0d2dSuwe# 3. All advertising materials mentioning features or use of this software
17da6d0d2dSuwe#    must display the following acknowledgement:
18da6d0d2dSuwe#      This product includes software developed by Christopher G. Demetriou.
19da6d0d2dSuwe# 4. The name of the author(s) may not be used to endorse or promote products
20da6d0d2dSuwe#    derived from this software without specific prior written permission
21da6d0d2dSuwe#
22da6d0d2dSuwe# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
23da6d0d2dSuwe# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
24da6d0d2dSuwe# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
25da6d0d2dSuwe# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
26da6d0d2dSuwe# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
27da6d0d2dSuwe# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
28da6d0d2dSuwe# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
29da6d0d2dSuwe# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
30da6d0d2dSuwe# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
31da6d0d2dSuwe# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32da6d0d2dSuwe#
33da6d0d2dSuwefunction collectline(f, line) {
34da6d0d2dSuwe	oparen = 0
35da6d0d2dSuwe	line = ""
36da6d0d2dSuwe	while (f <= NF) {
37da6d0d2dSuwe		if ($f == "#") {
38da6d0d2dSuwe			line = line "("
39da6d0d2dSuwe			oparen = 1
40da6d0d2dSuwe			f++
41da6d0d2dSuwe			continue
42da6d0d2dSuwe		}
43da6d0d2dSuwe		if (oparen) {
44da6d0d2dSuwe			line = line $f
45da6d0d2dSuwe			if (f < NF)
46da6d0d2dSuwe				line = line " "
47da6d0d2dSuwe			f++
48da6d0d2dSuwe			continue
49da6d0d2dSuwe		}
50da6d0d2dSuwe		line = line $f
51da6d0d2dSuwe		if (f < NF)
52da6d0d2dSuwe			line = line " "
53da6d0d2dSuwe		f++
54da6d0d2dSuwe	}
55da6d0d2dSuwe	if (oparen)
56da6d0d2dSuwe		line = line ")"
57da6d0d2dSuwe	return line
58da6d0d2dSuwe}
59da6d0d2dSuweBEGIN {
60da6d0d2dSuwe	nproducts = nvendors = 0
61da6d0d2dSuwe	hfile="sdmmcdevs.h"
62da6d0d2dSuwe}
63da6d0d2dSuweNR == 1 {
64da6d0d2dSuwe	VERSION = $0
65da6d0d2dSuwe	gsub("\\$", "", VERSION)
66da6d0d2dSuwe
67da6d0d2dSuwe	printf("/*\t\$OpenBSD\$\t*/\n\n") > hfile
68da6d0d2dSuwe	printf("/*\n") > hfile
69da6d0d2dSuwe	printf(" * THIS FILE AUTOMATICALLY GENERATED.  DO NOT EDIT.\n") \
70da6d0d2dSuwe	    > hfile
71da6d0d2dSuwe	printf(" *\n") > hfile
72da6d0d2dSuwe	printf(" * generated from:\n") > hfile
73da6d0d2dSuwe	printf(" *\t%s\n", VERSION) > hfile
74da6d0d2dSuwe	printf(" */\n") > hfile
75da6d0d2dSuwe
76da6d0d2dSuwe	next
77da6d0d2dSuwe}
78da6d0d2dSuwe$1 == "vendor" {
79da6d0d2dSuwe	nvendors++
80da6d0d2dSuwe
81da6d0d2dSuwe	vendors[nvendors, 1] = $2;		# name
82da6d0d2dSuwe	vendors[nvendors, 2] = $3;		# id
83da6d0d2dSuwe	printf("#define\tSDMMC_VENDOR_%s\t%s\t", vendors[nvendors, 1],
84da6d0d2dSuwe	    vendors[nvendors, 2]) > hfile
85da6d0d2dSuwe	vendors[nvendors, 3] = collectline(4, line)
86da6d0d2dSuwe	printf("/* %s */\n", vendors[nvendors, 3]) > hfile
87da6d0d2dSuwe	next
88da6d0d2dSuwe}
89da6d0d2dSuwe$1 == "product" {
90da6d0d2dSuwe	nproducts++
91da6d0d2dSuwe
92da6d0d2dSuwe	products[nproducts, 1] = $2;		# vendor name
93da6d0d2dSuwe	products[nproducts, 2] = $3;		# product id
94da6d0d2dSuwe	products[nproducts, 3] = $4;		# id
95da6d0d2dSuwe	printf("#define\tSDMMC_PRODUCT_%s_%s\t%s\n", products[nproducts, 1],
96da6d0d2dSuwe	    products[nproducts, 2], products[nproducts, 3]) > hfile
97da6d0d2dSuwe	next
98da6d0d2dSuwe}
99da6d0d2dSuwe{
100da6d0d2dSuwe	if ($0 == "")
101da6d0d2dSuwe		blanklines++
102da6d0d2dSuwe	print $0 > hfile
103da6d0d2dSuwe}
104