#!/bin/ksh
#set -x

usage () {
cat <<EOF
usage: $1 [args ...] input_file
	args are:
	-f<file>	specifies formic script
	-l<file>	specifies lexical extensions file
	-I<path>	include directory for cpp
	-D<define>	definition for cpp
	-o<file>	output file
	-p		just produce .ppout file
	-d		use documentation script, producing .doc file
	Any number of -I and -D can be given
EOF
; }

if test $# -lt 1 ; then
	usage ${0##*/}
	exit 2
fi

#formicbin=/net/xanadu/usr/local/bin/formic.new
formicbin=~roland/formic/Formic
cpp=/usr/lib/cpp

lexex=${0%/*}/Stubble.lexex

# ffile=${0%/*}/StubbleForm.f
ffile=${0%/*}/document.f

incldir=-I/net/xanadu/files5/nat2.0/`arch`/incl

incldir="$incldir -I/net/son-of-blob/files9/eric/xu/alpha-8/xlatexpp"
incldir="$incldir -I/net/son-of-blob/files9/eric/xu/alpha-8/xpp"

defs=''
keepppout=0
document=1

for arg in $*; do
	case $arg in
	    -f*) ffile=${arg#-f}
	        ;;
	    -l*) lexex=${arg#-l}
		;;
	    -I*) incls="$incls $arg"
	        ;;
	    -D*) defs="$defs $arg"
	        ;;
	    -o*) output=${arg#-o}
		;;
	    -d)  ffile=${0%/*}/Doc.f
		 document=1
		;;
	    -p)  keepppout=1
		;;
	    -*)  echo "Do not understand $arg"
		 usage ${0##*/}
		 exit 2
		;;
	    *)   fname=$arg
	        ;;
	esac
done

incldir="$incldir $incls"

fnroot=${fname%.*}
if test $document -eq 1 ; then
	output=${output:-"$fnroot".doc}
else
	output=${output:-$fnroot-ceran.cxx}
fi

if [ ! -r "$fnroot".hxx ] ; then
     echo ${0##*/}: "$fnroot".hxx not found
     exit 1
fi

ppout=$fnroot.ppout
touch $ppout
cfile=$fnroot-cX$$.cxx
touch $cfile
cp $fnroot.hxx $cfile

if test $keepppout -eq 0; then
	trap 'rm -f $ppout $cfile' 2;
else
	trap 'rm -f $cfile' 2
	$cpp -B -C -DXLINT $defs $incldir $cfile > $ppout
	rm $cfile
	exit 0
fi

if $cpp -B -C -DXLINT $defs $incldir $cfile > $ppout ; then
	if [ -f $output ] ; then
	    rm $output
	fi

	if test $document -eq 0 ; then
	        echo  '#define '`echo $fnroot | tr a-z\- A-Z\_`'_STUBBLE_CXX' >> $output
		echo  '#ifdef WITH_RPC'			>> $output
	        echo  '#include "xcvrx.hxx"'		>> $output
		echo  '#include "cxcvrx.hxx"'		>> $output
		echo  '#endif /* WITH_RPC */'		>> $output
	        echo  '#include "'$fnroot'.hxx"'      	>> $output
		echo  '#include "handlerx.hxx"'		>> $output
	fi

        if $formicbin -DPHYLE=$output -a $lexex $ffile -i $ppout >> $output ; then
#	   ed -s $output <${0%/*}/HACK.ed
	   rm $cfile
	   rm $ppout
        else
	   rm $cfile
	   rm $output
	   echo ${0##*/}: code generation failed
	   exit 1
        fi

    rm -f $cfile $ppout

else
        echo $0: preprocessor failed
	rm -f $cfile
        exit 1
fi

trap  2
exit 0
