#!/bin/ksh


prog="${0##*/}"

set -- `getopt svd:D:U: $*`
while : ; do
    case $1 in
    -D|-U)
	DEFINES="$DEFINES $1$2"
	shift 2
	;;
    --)
	shift
	break
	;;
     *)
	echo "Usage: $prog [-D DEF | -U DEF]... [assem-dir]" >&2
	exit 1
	;;
    esac
done

SRCDIR="$1"


exitval=0

INC="include(${SRCDIR}/mac800.mh)"


   while read routine type parm1 parm2 parm3 parm4; do
	[ -z "$routine" ] && continue

	[ -n "$parm1" ] && extra="define($parm1)" || extra=""
	[ -n "$parm2" ] && extra="$extra\ndefine($parm2)"
	[ -n "$parm3" ] && extra="$extra\ndefine($parm3)"
	[ -n "$parm4" ] && extra="$extra\ndefine($parm4)"
	case $type in
	boolean)
	    echo "${INC}\n${extra}\nBOOLEAN($routine)" 
	    ;;

	nofail)
	    echo "${INC}\n${extra}\nNOFAIL($routine)" 
	    ;;

	nofail2)
	    [ -n "$parm2" ] && extra="define($parm2)" || extra=""
	    [ -n "$parm3" ] && extra="$extra\ndefine($parm3)"
	    [ -n "$parm4" ] && extra="$extra\ndefine($parm4)"
	    echo "${INC}\n${extra}\nNOFAIL2($routine, $parm1)" 
	    ;;

	syscall)
	    echo "${INC}\n${extra}\nSYSCALL($routine)" 
	    ;;

	syscall2)
	    [ -n "$parm2" ] && extra="define($parm2)" || extra=""
	    [ -n "$parm3" ] && extra="$extra\ndefine($parm3)"
	    [ -n "$parm4" ] && extra="$extra\ndefine($parm4)"
	    echo "${INC}\n${extra}\nSYSCALL2($routine, $parm1)" 
	    ;;

	syscall_output)
	    [ -n "$parm2" ] && extra="define($parm2)" || extra=""
	    [ -n "$parm3" ] && extra="$extra\ndefine($parm3)"
	    [ -n "$parm4" ] && extra="$extra\ndefine($parm4)"
	    echo "${INC}\n${extra}\nSYSCALL($routine)" 
	    ;;
	alias_boolean)
	    [ -n "$parm2" ] && extra="define($parm2)" || extra=""
	    [ -n "$parm3" ] && extra="$extra\ndefine($parm3)"
	    [ -n "$parm4" ] && extra="$extra\ndefine($parm4)"
	    echo "${INC}\n${extra}\nBOOLEAN($routine,$parm1)" 
	    ;;

	alias_nofail)
	    [ -n "$parm2" ] && extra="define($parm2)" || extra=""
	    [ -n "$parm3" ] && extra="$extra\ndefine($parm3)"
	    [ -n "$parm4" ] && extra="$extra\ndefine($parm4)"
	    echo "${INC}\n${extra}\nNOFAIL($routine,$parm1)" 
	    ;;

	alias_syscall)
	    [ -n "$parm2" ] && extra="define($parm2)" || extra=""
	    [ -n "$parm3" ] && extra="$extra\ndefine($parm3)"
	    [ -n "$parm4" ] && extra="$extra\ndefine($parm4)"
	    echo "${INC}\n${extra}\nSYSCALL($routine,$parm1)" 
	    ;;

		# A little hack here, since m4 has no options
		# to specify include search directory, modify
		# the include statements...
		# The real hack is depending on that files beginning
		# with "mac" are source, and any others are built
		# the current working directory.
	assembly)
	    echo "${extra}"
	    cat ${SRCDIR}/s800/${routine}.s \
	      | sed -e "s#include(mac#include(${SRCDIR}/mac#"
	    ;;

	tboolean)
	    echo "${INC}\n${extra}\nTBOOLEAN($routine)" 
	    ;;

	tsyscall)
	    echo "${INC}\n${extra}\nTSYSCALL($routine)" 
	    ;;

	tsyscall2)
	    [ -n "$parm2" ] && extra="define($parm2)" || extra=""
	    [ -n "$parm3" ] && extra="$extra\ndefine($parm3)"
	    [ -n "$parm4" ] && extra="$extra\ndefine($parm4)"
	    echo "${INC}\n${extra}\nTSYSCALL2($routine, $parm1)" 
	    ;;

	tsyscall3)
	    echo "${INC}\n${extra}\nTSYSCALL3($routine)" 
	    ;;

	*)
	    echo "$prog: unknown type \"$type\" for $routine" >&2
	    exitval=1
	    ;;
	esac
    done
    exit $exitval

