1#! /bin/sh
2#
3#	$NetBSD$
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	printf("\t{ \"%s\", %s },\n", $i, $j);
58}
59END {
60	print "	{ \"0\", 0 },\n";
61}
62' | sort -n -k 3 >> $CFILE
63echo "	{ 0L, 0},
64};" >> $CFILE
65elines=`grep '{ "SIG' $CFILE | wc -l`
66elines=`expr $elines + 1`
67
68cat <<__EOF__ >$HFILE
69struct	systab	{
70	const char	*name;
71	int		value;
72};
73
74extern struct systab errnos[$lines + 1];
75extern struct systab signals[$elines + 1];
76
77#define	MAXERRNOS	$lines
78#define	MAXSIGNALS	$elines
79__EOF__
80