Home | History | Annotate | Line # | Download | only in ktruss
      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