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