xref: /netbsd-src/usr.bin/ktruss/makeerrnos.sh (revision 453514a2806e2e10be61aa2983cad9ebf6b4175c)
1#! /bin/sh
2#
3#	$NetBSD: makeerrnos.sh,v 1.7 2019/05/06 11:58:37 kamil Exp $
4
5if [ $# -ne 3 ]; then
6	echo "usage: makeerrnos.sh errno.h signal.h output"
7	exit 1;
8fi
9
10ERRNOH=$1
11SIGNALH=$2
12CFILE=$3.c
13HFILE=$3.h
14
15: ${AWK:=awk}
16: ${CPP:=cpp}
17: ${CPPFLAGS:=}
18
19cat <<__EOF__ > $CFILE
20#include "misc.h"
21
22struct systab errnos[] = {
23__EOF__
24cat ${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}
35END {
36	print "	{ \"0\", 0 },\n";
37}
38' | sort -n -k 3 >> $CFILE
39echo "	{ 0L, 0},
40};" >> $CFILE
41lines=`wc -l $CFILE | ${AWK} ' { print $1; } ' -`
42lines=`expr $lines - 4`
43
44cat <<__EOF__ >> $CFILE
45
46struct systab signals[] = {
47__EOF__
48cat ${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}
67END {
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
75echo "	{ 0L, 0},
76};" >> $CFILE
77elines=`grep '{ "SIG' $CFILE | wc -l`
78elines=`expr $elines + 1`
79
80cat <<__EOF__ >$HFILE
81struct	systab	{
82	const char	*name;
83	int		value;
84};
85
86extern struct systab errnos[$lines + 1];
87extern struct systab signals[$elines + 1];
88
89#define	MAXERRNOS	$lines
90#define	MAXSIGNALS	$elines
91__EOF__
92