1 #! /bin/sh 2 # 3 # $NetBSD: makeerrnos.sh,v 1.7 2019/05/06 11:58:37 kamil Exp $ 4 5 if [ $# -ne 3 ]; then 6 echo "usage: makeerrnos.sh errno.h signal.h output" 7 exit 1; 8 fi 9 10 ERRNOH=$1 11 SIGNALH=$2 12 CFILE=$3.c 13 HFILE=$3.h 14 15 : ${AWK:=awk} 16 : ${CPP:=cpp} 17 : ${CPPFLAGS:=} 18 19 cat <<__EOF__ > $CFILE 20 #include "misc.h" 21 22 struct systab errnos[] = { 23 __EOF__ 24 cat ${ERRNOH} | ${CPP} ${CPPFLAGS} -dM | 25 ${AWK} ' 26 /^#[ ]*define[ ]*E[A-Z0-9]*[ ]*[0-9-][0-9]*[ ]*.*/ { 27 for (i = 1; i <= NF; i++) 28 if ($i ~ /define/) 29 break; 30 i++; 31 j = i + 1; 32 # 33 printf("\t{ \"%s\", %s },\n", $i, $j); 34 } 35 END { 36 print " { \"0\", 0 },\n"; 37 } 38 ' | sort -n -k 3 >> $CFILE 39 echo " { 0L, 0}, 40 };" >> $CFILE 41 lines=`wc -l $CFILE | ${AWK} ' { print $1; } ' -` 42 lines=`expr $lines - 4` 43 44 cat <<__EOF__ >> $CFILE 45 46 struct systab signals[] = { 47 __EOF__ 48 cat ${SIGNALH} | ${CPP} ${CPPFLAGS} -dM | 49 ${AWK} ' 50 /^#[ ]*define[ ]*S[A-Z0-9]*[ ]*[0-9-][0-9]*[ ]*.*/ { 51 for (i = 1; i <= NF; i++) 52 if ($i ~ /define/) 53 break; 54 i++; 55 j = i + 1; 56 57 if ($i == "SIGRTMIN") { 58 sigrtmin=$j; 59 } 60 if ($i == "SIGRTMAX") { 61 sigrtmax=$j; 62 } 63 64 # 65 printf("\t{ \"%s\", %s },\n", $i, $j); 66 } 67 END { 68 j = 1; 69 for (i = sigrtmin + 1; i < sigrtmax; i++) { 70 printf("\t{ \"SIGRTMIN+%s\", %s },\n", j++, i); 71 } 72 print " { \"0\", 0 },\n"; 73 } 74 ' | sort -n -k 3 >> $CFILE 75 echo " { 0L, 0}, 76 };" >> $CFILE 77 elines=`grep '{ "SIG' $CFILE | wc -l` 78 elines=`expr $elines + 1` 79 80 cat <<__EOF__ >$HFILE 81 struct systab { 82 const char *name; 83 int value; 84 }; 85 86 extern struct systab errnos[$lines + 1]; 87 extern struct systab signals[$elines + 1]; 88 89 #define MAXERRNOS $lines 90 #define MAXSIGNALS $elines 91 __EOF__ 92