#!/bin/sh
#------------------------------------------------------------------------------
# generate Sys.od from /usr/include/sys.s
# afb 6/89
# rev afb 9/89 (name array)
# rev afb 8/90 (take system call numbers from /usr/include/sys.s)
# rev afb 12/90 (Sun version: get numbers from /usr/include/sys/syscall.h)
#------------------------------------------------------------------------------

	infile=/usr/include/sys/syscall.h
	tmp="/tmp/trap$$"
	tmp2="/tmp/gen$$"
	tmp3="/tmp/gen2$$"

	trap "rm -f $tmp $tmp2 $tmp3; exit 1" 1 2 3 15
	trap "rm -f $tmp $tmp2 $tmp3" 0


[ -d old ] || mkdir old
[ -r Sys.od ] && mv Sys.o[dm] old

date=`date +'AFB %m/%y' | sed 's/AFB 0\([0-9]\)/ AFB \1/`

awkprog='
BEGIN	{	max=0; maxlen=0
	}
NF == 3	{	if (max < $3)
			max = $3;
		if (maxlen < length($1))
			maxlen =  length($1);
		printf "   name[%s] := \"%s\";\n", $1, $1 >>"'"$tmp3"'"
	}
END	{	printf "\n\n      ncalls = %d;\n", max+1
		printf "      namelen = %d;\n", maxlen+1
		printf "\n   TYPE\n      Name = ARRAY namelen OF CHAR;\n"
		printf "\n   VAR\n      name: ARRAY ncalls OF Name;\n"
	}
'

{	echo '(* Oberon Library     - Sun 3 Workstation -    '"$date"' *)'
	echo '(* (c) University of Ulm, Sektion Informatik, D-7900 Ulm *)'
	echo 'DEFINITION Sys;'; echo; echo '   CONST'
	{	echo 'MODULE Sys; CONST'
		{	sed '/^#define.SYS_/!d; s/^#define.SYS_//;
			s/async_daemon/asyncDaemon/;
			s/[ 	][ 	]*\([1-9]\)/ = \1/;
			s/$/;/' $infile
		} | sort +2n
		echo 'END Sys.'
	} | m2b | sed '1,/CONST/d
		       s/^  *//
		       s/= \([0-9]\);/=   \1;/
		       s/= \([0-9][0-9]\);/=  \1;/
		       /END Sys/d' |
	tee $tmp2 |
	pr -3 -t -l1 | detab | sed 's/^/      /'
	sed 's/;//g' <$tmp2 | awk "$awkprog"
	echo; echo 'END Sys.'
} >Sys.od && sed 's/DEFINITION/MODULE/' <Sys.od >Sys.om &&
ed - Sys.om <<!
\$i
BEGIN
.
.r $tmp3
w
q
!
