1 #! /bin/sh 2 3 # $NetBSD: mknodenames.sh,v 1.7 2024/10/14 08:27:19 kre Exp $ 4 5 # Use this script however you like, but it would be amazing if 6 # it has any purpose other than as part of building the shell... 7 8 # All (like every single one) uses of echo in this script 9 # have at most 1 argument (string) to print, and none use -n 10 # hence replacing echo with printf is trivial... 11 12 echo() 13 { 14 command printf '%s\n' "$1" 15 } 16 17 if [ -z "$1" ]; then 18 echo "Usage: $0 nodes.h" 1>&2 19 exit 1 20 fi 21 22 NODES=$1 23 24 test -t 1 && test -z "$2" && exec > nodenames.h 25 26 echo "\ 27 /* 28 * Automatically generated by $0 29 * DO NOT EDIT. Do Not 'cvs add'. 30 */ 31 " 32 echo "#ifndef NODENAMES_H_INCLUDED" 33 echo "#define NODENAMES_H_INCLUDED" 34 echo 35 echo "#ifdef DEBUG" 36 37 MAX=$(${AWK:-awk} < "$NODES" ' 38 /#define/ { 39 if ($3 > MAX) MAX = $3 40 } 41 END { print MAX } 42 ') 43 44 echo 45 echo '#ifdef DEFINE_NODENAMES' 46 echo "STATIC const char * const NodeNames[${MAX} + 1] = {" 47 48 grep '^#define' "$NODES" | sort -k3n | while read define name number opt_comment 49 do 50 : ${next:=0} 51 while [ "$number" -gt "$next" ] 52 do 53 echo ' "???",' 54 next=$(( next + 1)) 55 done 56 echo ' "'"$name"'",' 57 next=$(( number + 1 )) 58 done 59 60 echo "};" 61 echo '#else' 62 echo "extern const char * const NodeNames[${MAX} + 1];" 63 echo '#endif' 64 echo 65 echo '#define NODETYPENAME(type) \' 66 echo ' ((unsigned)(type) <= '"${MAX}"' ? NodeNames[(type)] : "??OOR??")' 67 echo 68 echo '#define NODETYPE(type) NODETYPENAME(type), (type)' 69 echo '#define PRIdsNT "s(%d)"' 70 echo 71 echo '#else /* DEBUG */' 72 echo 73 echo '#define NODETYPE(type) (type)' 74 echo '#define PRIdsNT "d"' 75 echo 76 echo '#endif /* DEBUG */' 77 echo 78 echo '#endif /* !NODENAMES_H_INCLUDED */' 79