#!/bin/sh
# My local copy of simple IMP compiler shell wrapper
# In my system, stored in ~/bin/imp2021 so as not to clash
# with installed imp77 from ABD, at least until well tested.

SOURCEDIR=/home/gtoal/src/imp77/imp2021-main/build/imp-linux
RELEASEDIR=/home/gtoal

STRACE=

PROGNAME=`basename $0`
DOLIST=false
DOCODE=false
DOLINK=true
TESTMODE=false
TIDYMODE=true
LISTFILE=/dev/null
CODEFILE=/dev/null
OUTPUT=""

# Parse the arguments...
MORETODO=true
while ${MORETODO} ; do
   case X"$1" in
   X-c)
	DOLINK=false
	;;
   X-Fc)
	DOCODE=true
	;;
   X-Fs)
	DOLIST=true
	;;
   X-e)
	TESTMODE=true
	;;
   X-Fi)
	TIDYMODE=false
	;;
   X-o)
        OUTPUT="$2"
        shift
	;;
   *)
	MORETODO=false
	;;
   esac
   ${MORETODO} && shift
done

#echo "\$# =" $#
#echo "Remaining params =" $*

if [ $# -lt 1 ]; then
   echo "${PROGNAME}: No source file?" 1>&2
   exit 1
fi

# try to be ambivalent about which extension is used
SRCNAME=`basename $1 .imp`
SRCNAME=`basename $SRCNAME .i`

if [ X"$OUTPUT" = X"" ]; then
  # unfortunately can't fill in the default until after parameter parsing
  OUTPUT=$SRCNAME
fi

# and now check that there was one (and it's been removed)
if [ X"$SRCNAME" = X"$1" ]; then
   echo "${PROGNAME}: Source must be .imp or .i" 1>&2
   exit 1
fi

INCDIR=${RELEASEDIR}/include
BINDIR=/home/gtoal/src/imp77/hacks
LIBDIR=${RELEASEDIR}/bin
IMPLIB=${RELEASEDIR}/lib

if ${DOLIST}; then
   LISTFILE=$SRCNAME.lst
fi

if ${DOCODE}; then
   CODEFILE=$SRCNAME.cod
fi

rm -f $SRCNAME.icd
if [ X"$LISTFILE" != X"/dev/null" ]; then
    rm -f $LISTFILE
fi

$STRACE ${BINDIR}/pass1i $1,$INCDIR/stdperm.imp=$SRCNAME.icd,$LISTFILE
if [ $? -ne 0 ] ; then
   exit 1
fi

rm -f $SRCNAME.ibj
if [ X"$CODEFILE" != X"/dev/null" ]; then
  rm -f $CODEFILE
fi
$STRACE ${BINDIR}/pass2i $SRCNAME.icd,$1=$SRCNAME.ibj,$CODEFILE
if ${TIDYMODE}; then
   rm -f $SRCNAME.icd
fi

if ${DOLINK}; then
   # imp2021 -o file file.imp file2.o file3.o
#   echo $STRACE ${BINDIR}/pass3elf  $SRCNAME.ibj $$.o
   $STRACE ${BINDIR}/pass3elf  $SRCNAME.ibj $$.o
   if ${TIDYMODE}; then
      rm -f $SRCNAME.ibj
   fi
   gcc -m32 -o $OUTPUT-i $$.o -L ${IMPLIB} -limp77 -lm -T $LIBDIR/ld.i77.script
   if ${TIDYMODE}; then
      rm -f $$.o
   fi
else
   # imp2021 -c -o file.o
   $STRACE ${BINDIR}/pass3elf  $SRCNAME.ibj $OUTPUT-i.o
   if ${TIDYMODE}; then
      rm -f $SRCNAME.ibj
   fi
fi
