1*60c439c7Sderaadt# $OpenBSD: genconstants.sh,v 1.13 2014/01/22 03:09:31 deraadt Exp $ 28c844cbbSniklas# $EOM: genconstants.sh,v 1.6 1999/04/02 01:15:53 niklas Exp $ 32040585eSniklas 42040585eSniklas# 542af7185Sniklas# Copyright (c) 1998, 1999, 2001 Niklas Hallqvist. All rights reserved. 62040585eSniklas# 72040585eSniklas# Redistribution and use in source and binary forms, with or without 82040585eSniklas# modification, are permitted provided that the following conditions 92040585eSniklas# are met: 102040585eSniklas# 1. Redistributions of source code must retain the above copyright 112040585eSniklas# notice, this list of conditions and the following disclaimer. 122040585eSniklas# 2. Redistributions in binary form must reproduce the above copyright 132040585eSniklas# notice, this list of conditions and the following disclaimer in the 142040585eSniklas# documentation and/or other materials provided with the distribution. 152040585eSniklas# 162040585eSniklas# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 172040585eSniklas# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 182040585eSniklas# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 192040585eSniklas# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 202040585eSniklas# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 212040585eSniklas# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 222040585eSniklas# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 232040585eSniklas# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 242040585eSniklas# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 252040585eSniklas# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 262040585eSniklas# 272040585eSniklas 282040585eSniklas# 292040585eSniklas# This code was written under funding by Ericsson Radio Systems. 302040585eSniklas# 312040585eSniklas 322040585eSniklasbase=`basename $1` 332040585eSniklasupcased_name=`echo $base |tr a-z A-Z` 342040585eSniklas 352040585eSniklasawk=${AWK:-awk} 362040585eSniklas 372040585eSniklaslocase_function='function locase (str) { 382040585eSniklas cmd = "echo " str " |tr A-Z a-z" 392040585eSniklas cmd | getline retval; 402040585eSniklas close (cmd); 412040585eSniklas return retval; 422040585eSniklas}' 432040585eSniklas 442040585eSniklas$awk " 452040585eSniklas$locase_function 462040585eSniklas"' 472040585eSniklasBEGIN { 482040585eSniklas print "/* DO NOT EDIT-- this file is automatically generated. */\n" 492040585eSniklas print "#ifndef _'$upcased_name'_H_" 502040585eSniklas print "#define _'$upcased_name'_H_\n" 512040585eSniklas print "#include \"constants.h\"\n" 522040585eSniklas} 532040585eSniklas 542040585eSniklas/^[#.]/ { 552040585eSniklas next 562040585eSniklas} 572040585eSniklas 582040585eSniklas/^[^ ]/ { 592040585eSniklas prefix = $1 602040585eSniklas printf ("extern struct constant_map %s_cst[];\n\n", locase(prefix)); 612040585eSniklas next 622040585eSniklas} 632040585eSniklas 642040585eSniklas/^[ ]/ && $1 { 652040585eSniklas printf ("#define %s_%s %s\n", prefix, $1, $2) 662040585eSniklas next 672040585eSniklas} 682040585eSniklas 692040585eSniklas{ 702040585eSniklas print 712040585eSniklas} 722040585eSniklas 732040585eSniklasEND { 742040585eSniklas printf ("\n") 752040585eSniklas print "#endif /* _'$upcased_name'_H_ */" 762040585eSniklas} 772040585eSniklas' <$1.cst >$base.h 782040585eSniklas 792040585eSniklas$awk " 802040585eSniklas$locase_function 812040585eSniklas"' 822040585eSniklasBEGIN { 832040585eSniklas print "/* DO NOT EDIT-- this file is automatically generated. */\n" 84770a3ddbSniklas print "#include \"constants.h\"" 852040585eSniklas print "#include \"'$base'.h\"\n" 862040585eSniklas} 872040585eSniklas 882040585eSniklas/^#/ { 892040585eSniklas next 902040585eSniklas} 912040585eSniklas 922040585eSniklas/^\./ { 932040585eSniklas print " { 0, 0 }\n};\n" 942040585eSniklas next 952040585eSniklas} 962040585eSniklas 972040585eSniklas/^[^ ]/ { 982040585eSniklas prefix = $1 992040585eSniklas printf ("struct constant_map %s_cst[] = {\n", locase(prefix)) 1002040585eSniklas next 1012040585eSniklas} 1022040585eSniklas 1032040585eSniklas/^[ ]/ && $1 { 104204de0fbSho printf (" { %s_%s, \"%s\", %s },\n", prefix, $1, $1, 105204de0fbSho ($3 && substr($3,1,1) != "#") ? $3 : 0) 1062040585eSniklas next 1072040585eSniklas} 1082040585eSniklas 1092040585eSniklas{ 1102040585eSniklas print 1112040585eSniklas} 1122040585eSniklas' <$1.cst >$base.c 113