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