#!/bin/sh
#
# HISTORY
# {3} Arthur A. van Hoff, Turing Institute
#     Added support for multiple architectures.
#
# {2} 23-May-92  Rafael Bracho (rxb) at home.
#     Added support for multiple OpenWindows versions.
# 
# {1} May 1991  Arthur A. van Hoff, Turing Institute
#     Created.
#

trap "exit 1" 2 3

if [ -z "$PDBHOME" ] ; then
	prog=$0;
	if expr "$prog" : "^[^/]" > /dev/null ; then
		prog="`pwd`/$0"
	fi
	PDBHOME=`expr "$prog" : "\(.*\)/bin/.*"`
	PDBBIN=`expr "$prog" : "\(.*/bin/[^/]*\)/.*"`
	export PDBHOME
fi

if [ ! -r "$PDBHOME/lib/pdb.rsrc" ] ; then
	echo `basename $0`: invalid PDBHOME, please set your PDBHOME environment variable 1>&2
fi

if [ ! -x "$PDBBIN/pdb-comp" ] ; then
	if [ -z "$HOSTTYPE" ] ; then
		if [ -x "/bin/arch" ] ; then
			PDBBIN="$PDBHOME/bin/`/bin/arch`"
		else
			PDBBIN="$PDBHOME/bin/local"
		fi
	else
		PDBBIN="$PDBHOME/bin/$HOSTTYPE"
	fi
fi

if [ -z "$OWVERSION" ] ; then
	if [ -d "$OPENWINHOME/modules" ] ; then
		OWVERSION=300
	else
		OWVERSION=200
	fi
fi

cppflags="-D_pdb_ -I$PDBHOME/include/pdb"
compflags="-rsrc $PDBHOME/lib/pdb.rsrc"
optflags="-rsrc $PDBHOME/lib/pdb.rsrc"
infile=
outfile=
cpp=$PDBBIN/pdb-cpp
comp=$PDBBIN/pdb-comp
opt=$PDBBIN/pdb-opt
n=$$

while [ $# -gt 0 ] ; do
	case "$1" in
	-help)
		echo "usage: `basename $0` file [-o file] [-Idir] [-Ddef=val] [-g] [-version vers]" 1>&2
		exit 1
		;;
	-o)
		if [ $# -le 1 ] ; then
			echo `basename $0`: -o filename missing 1>&2
			exit 1
		fi
		outfile="$2"
		shift
		;;
	-O)
		;;
	-v)
		compflags="$compflags -v";
		optflags="$optflags -v";
		;;
	-debug)
		compflags="$compflags -debug";
		optflags="$optflags -debug";
		;;
	-B | -I* | -D*)
		cppflags="$cppflags $1"
		;;
	-cps)
		compflags="-cps $compflags";
		cppflags="-D_cps_ $cppflags";
		;;
	-g | -off | -ret)
		compflags="$compflags $1";
		;;
	-raw | -com | -hex | -share | -opt)
		optflags="$optflags $1"
		;;
	-ind | -col)
		if [ $# -le 1 ] ; then
			echo `basename $0`: $1 argument missing 1>&2
			exit 1
		fi
		optflags="$optflags $1 $2"
		shift
		;;
    -version)
		if [ $# -le 1 ] ; then
	    		echo `basename $0`: version missing
	    		exit 1
		fi
		shift
		case "$1" in
	    	tnt2.0 | TNT2.0 | OWNV2 | V2 | 2.0 | 2)
			OWVERSION="200"
			;;
	    	tnt3.0 | TNT3.0 | OWNV3 | V3 | 3.0 | 3)
			OWVERSION="300"
			;;
	    	tnt3.0.1 | TNT3.0.1 | OWNV3.0.1 | V3.0.1 | 3.0.1 | SVR4 | svr4 | Solaris2.0)
			OWVERSION="301"
			;;
	    	tnt3.1 | TNT3.1 | OWNV3.1 | V3.1 | 3.1 | Solaris2.1)
			OWVERSION="310"
			;;
		[3-9][0-9][0-9])
			OWVERSION="$1"
			;;
	    	*)
			echo `basename $0`: invalid version: $1
			exit 1
			;;
		esac
		;;
	-.*)
		echo `basename $0`: invalid flag: $1 1>&2
		exit 1
		;;
	*)
		if [ -n "$infile" ] ; then
			echo `basename $0`: multiple input files: $infile, $1 1>&2
			exit 1
		fi
		if [ -f $1 ] ; then
			infile=$1
		elif [ -f $1.CPS ] ; then
			infile=$1.CPS
		elif [ -f $1.pdb ] ; then
			infile=$1.pdb
		elif [ "$1" = "-" ] ; then
			infile="-"
		else
			echo `basename $0`: invalid argument: $1 1>&2
			exit 1
		fi
		case "$infile" in
		*.CPS)
			compflags="-cps $compflags"
			cppflags="-D_cps_ $cppflags";
			if [ -z "$outfile" ] ; then 
				outfile="`basename $infile .CPS`.cps"
			fi
			;;
		*.pdb)
			if [ -z "$outfile" ] ; then 
				outfile="`basename $infile .pdb`.psh"
			fi
			;;
		-)
			if [ -z "$outfile" ] ; then 
				outfile="-"
			fi
			;;
		*)
			if [ -z "$outfile" ] ; then 
				outfile="a.out.psh"
			fi
			;;
		esac
		;;
	esac
	shift
done

cppflags="$cppflags -D_OWNversion_=$OWVERSION"

if [ -z "$infile" ] ; then
	exit 0
fi

if [ "$infile" = "-" ] ; then
	infile=""
fi

if [ "$infile" = "$outfile" ] ; then
	echo `basename $0`: identical input and output 1>&2
	exit 1
fi

trap "/bin/rm -f $outfile /tmp/pdb.$n.1 /tmp/pdb.$n.2 ; exit 1" 2 3
if $cpp $cppflags $infile > /tmp/pdb.$n.1 ; then
	if $comp $compflags /tmp/pdb.$n.1 -o /tmp/pdb.$n.2 ; then
		if [ "$outfile" = "-" ] ; then
			if $opt $optflags /tmp/pdb.$n.2 ; then
				/bin/rm -f /tmp/pdb.$n.1 /tmp/pdb.$n.2
				exit 0
			fi
		else
			if $opt $optflags /tmp/pdb.$n.2 -o $outfile ; then
				/bin/rm -f /tmp/pdb.$n.1 /tmp/pdb.$n.2
				exit 0
			fi
		fi
	fi
fi

/bin/rm -f $outfile /tmp/pdb.$n.1 /tmp/pdb.$n.2
exit 1
