xref: /netbsd-src/sys/arch/luna68k/dev/xplx/mkdefs.awk (revision 8b8575d933fe91428231bb68e1efabe962f2b668)
1*8b8575d9Stsutsui#
2*8b8575d9Stsutsui# Copyright (c) 2018 Tetsuya Isaki. All rights reserved.
3*8b8575d9Stsutsui#
4*8b8575d9Stsutsui# Redistribution and use in source and binary forms, with or without
5*8b8575d9Stsutsui# modification, are permitted provided that the following conditions
6*8b8575d9Stsutsui# are met:
7*8b8575d9Stsutsui# 1. Redistributions of source code must retain the above copyright
8*8b8575d9Stsutsui#    notice, this list of conditions and the following disclaimer.
9*8b8575d9Stsutsui# 2. Redistributions in binary form must reproduce the above copyright
10*8b8575d9Stsutsui#    notice, this list of conditions and the following disclaimer in the
11*8b8575d9Stsutsui#    documentation and/or other materials provided with the distribution.
12*8b8575d9Stsutsui#
13*8b8575d9Stsutsui# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
14*8b8575d9Stsutsui# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
15*8b8575d9Stsutsui# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
16*8b8575d9Stsutsui# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
17*8b8575d9Stsutsui# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
18*8b8575d9Stsutsui# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
19*8b8575d9Stsutsui# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
20*8b8575d9Stsutsui# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
21*8b8575d9Stsutsui# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
22*8b8575d9Stsutsui# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
23*8b8575d9Stsutsui# SUCH DAMAGE.
24*8b8575d9Stsutsui
25*8b8575d9StsutsuiBEGIN {
26*8b8575d9Stsutsui	print "/* generated by mkdefs.awk */"
27*8b8575d9Stsutsui	print "#ifndef XPLX_DEFINE"
28*8b8575d9Stsutsui	print "#define XPLX_DEFINE"
29*8b8575d9Stsutsui}
30*8b8575d9Stsutsui
31*8b8575d9Stsutsui# hex to decimal
32*8b8575d9Stsutsuifunction h2d(s,   i,c,n,rv)
33*8b8575d9Stsutsui{
34*8b8575d9Stsutsui	rv = 0
35*8b8575d9Stsutsui	for (i = 1; i <= length(s); i++) {
36*8b8575d9Stsutsui		c = toupper(substr(s, i, 1))
37*8b8575d9Stsutsui		n = index("0123456789ABCDEF", c)
38*8b8575d9Stsutsui		if (n == 0) {
39*8b8575d9Stsutsui			error = 1
40*8b8575d9Stsutsui			exit error
41*8b8575d9Stsutsui		}
42*8b8575d9Stsutsui		rv = rv * 16 + n - 1
43*8b8575d9Stsutsui	}
44*8b8575d9Stsutsui	return rv
45*8b8575d9Stsutsui}
46*8b8575d9Stsutsui
47*8b8575d9Stsutsui# Global label
48*8b8575d9Stsutsui/::/ {
49*8b8575d9Stsutsui	print "/* " $0 " */"
50*8b8575d9Stsutsui	for (i = 1; i <= NF; i++) {
51*8b8575d9Stsutsui		f = $(i)
52*8b8575d9Stsutsui		if (f ~ /::/) {
53*8b8575d9Stsutsui			break;
54*8b8575d9Stsutsui		}
55*8b8575d9Stsutsui	}
56*8b8575d9Stsutsui	sub(/::/, "", f)
57*8b8575d9Stsutsui	sub(/:/, "", $1)
58*8b8575d9Stsutsui	printf("#define %s 0x%s\n", f, $1);
59*8b8575d9Stsutsui
60*8b8575d9Stsutsui	k = "GLOBAL_"
61*8b8575d9Stsutsui	keys[""] = k
62*8b8575d9Stsutsui	v = h2d($1)
63*8b8575d9Stsutsui	while (values["", v] != "") v++;
64*8b8575d9Stsutsui	values["", v] = f
65*8b8575d9Stsutsui	counts[""]++
66*8b8575d9Stsutsui}
67*8b8575d9Stsutsui
68*8b8575d9Stsutsui$2 ~ /#define/ {
69*8b8575d9Stsutsui	printf("%s %s %s\n", $2, $3, $4);
70*8b8575d9Stsutsui
71*8b8575d9Stsutsui	# multiple if statements
72*8b8575d9Stsutsui	# because match() returns index/length by global variables
73*8b8575d9Stsutsui	if (match($3, /^XPLX_R_/)) {
74*8b8575d9Stsutsui		k = substr($3, RSTART, RLENGTH)
75*8b8575d9Stsutsui	} else
76*8b8575d9Stsutsui	if (match($3, /^DEVID_/)) {
77*8b8575d9Stsutsui		k = substr($3, RSTART, RLENGTH)
78*8b8575d9Stsutsui	} else
79*8b8575d9Stsutsui	if (match($3, /^[^_]+_(CMD|ENC)_/)) {
80*8b8575d9Stsutsui		k = substr($3, RSTART, RLENGTH)
81*8b8575d9Stsutsui	} else {
82*8b8575d9Stsutsui		next
83*8b8575d9Stsutsui	}
84*8b8575d9Stsutsui	sub(k, "", $3)
85*8b8575d9Stsutsui	keys[k] = k
86*8b8575d9Stsutsui	values[k, $4] = $3
87*8b8575d9Stsutsui	counts[k]++
88*8b8575d9Stsutsui}
89*8b8575d9Stsutsui
90*8b8575d9StsutsuiEND {
91*8b8575d9Stsutsui	print "#endif /* !XPLX_DEFINE */"
92*8b8575d9Stsutsui}
93