#! /bin/sh
SM_HOME1=/usr/local/simath
d1=srctrans.fehl

#       *****************************************************************
#       *                                                               *
#       *                          srctrans                             *
#       *                                                               *
#       * Aufruf: srctrans Quellbibliothek Modulbibliothek              *
#       *   oder: srctrans Quellbibliothek Modulbibliothek ___DEBUGGER  *
#       *                                                               *
#       * Shell-Prozedur zur Uebersetzung einer Quellbibliothek und     *
#       * Archivierung der Objektmodule.                                *
#	* (Quelldateien *.S werden auf allen Rechnern mit 'preproc.x',	*
#	* 'preV3_1.x' und 'cc' uebersetzt; Quelldateien *.s werden auf	*
#	* SPARC-stations mit 'as' und auf anderen Rechnern nicht ueber-	*
#	* setzt; andere Quelldateien werden auf allen Rechnern nicht	*
#	* uebersetzt.)							*
#	*								*
#       * Falls "___DEBUGGER" als 3. Argument angegeben ist, werden     *
#       * die Programme mit -g uebersetzt, so dass sie vom Debugger     *
#       * verstanden werden koennen.                                    *
#       *                                                               *
#       * Fehlermeldungen jeder Art werden in die Datei srctrans.fehl   *
#       * geschrieben.                                                  *
#       * War srctrans bis zur Archivierung der Objektmodule            *
#       * erfolgreich, so wird das Dateiverzeichnis srctrans.hilf       *
#       * nur dann geloescht, wenn auch die Archivierung der Objekt-    *
#       * module erfolgreich war.                                       *
#       *                                                               *
#       * Warnung: Es kann in einem Dateiverzeichnis immer nur ein      *
#       * srctrans zur selben Zeit laufen!                              *
#       *                                                               *
#       * srctrans wird vom Benutzer beim Installieren aufgerufen.      *
#       * deshalb: Vorsicht bei Aenderungen !!!                         *
#       *          ----------------------------                         *
#       *                                                               *
#       *****************************************************************

# Argumente korrekt?
if [ \( $# -eq 2 -a "$2" = "___DEBUGGER" \) -o \( $# -eq 3 -a "$3" != "___DEBUGGER" \) ]
then
	echo "illegal argument list"; exit
elif [ $# -ne 2 -a $# -ne 3 ]
then
	echo "$0 source-library object-library"; exit
fi

# Erstellen des Dateiverzeichnisses srctrans.hilf
if mkdir srctrans.hilf 2>> $d1
then :
else
    echo " " >> $d1
    echo "Could not create srctrans.hilf;" >> $d1
    echo "srctrans terminated." >> $d1
    exit
fi
chmod 777 srctrans.hilf

# Erstellen eines Inhaltsverzeichnisses der Quellbibliothek

# "sort" ist noetig, damit ggf. die Standard-C-Version (also
# das uebersetzte *.S) von der Assembler-Version (dem ueber-
# setzten *.s) ueberschrieben wird)

ar t $1 | sort >srctrans.hilf/arindex 2>> $d1
case $? in
  0) cp $1 srctrans.hilf/archiv;;
  *) rm -r srctrans.hilf
     echo " " >> $d1
     echo "\"ar t $1\" failed;" >> $d1
     echo "srctrans terminated." >> $d1
     exit
esac

# Verzweigen in das Dateiverzeichnis srctrans.hilf
cd srctrans.hilf

# SPARC-station?
if grep 'SPARC' ${SM_HOME1}/header/config.h > HILF
then
	SPARC=1
else
	SPARC=0
fi
rm HILF

# Uebersetzen der Quelltexte und Ablegen der Objektmodule in srctrans.hilf
# MX300 kennt den Schalter -s fuer grep nicht, daher Hilfsdatei HILF
for index in `cat arindex`
do
  ar x archiv $index
  nameS=`basename $index .S`.S
  if [ $nameS = $index ]
  then
    if head -6 $index | grep 'MACRO' > HILF
    then
	rm $index
    else
	namec=`basename $index .S`.c
	nameP=`basename $index .S`.P
	if ${SM_HOME1}/proz/preproc.x < $index > $nameP 2>> ../$d1
	then
	    if ${SM_HOME1}/proz/preV3_1.x $nameP $namec 2>> ../$d1
	    then

          ### Datei wird "normal" uebersetzt, d.h. ohne Schalter -g,
          ### falls Argumentanzahl gleich 2 ist

              if [ $# -eq 2 ]
              then
		if cc -I.. -I${SM_HOME1}/header -O -c $namec >> ../$d1 2>&1 
		then :
                else
		  { echo " "; echo "Could not compile $index"; echo " "; } >> ../$d1
		fi

          ### Datei wird mit Schalter -g uebersetzt,
          ### falls Argumentanzahl gleich 3 ist

              else
		if cc -I.. -I${SM_HOME1}/header -g -c $namec >> ../$d1 2>&1 
		then :
                else
		  { echo " "; echo "Could not compile $index"; echo " "; } >> ../$d1
		fi
              fi

	    else
		{ echo " "; echo "Could not compile $index"; echo " "; } >> ../$d1
	    fi
	else
	    { echo " "; echo "Could not compile $index"; echo " "; } >> ../$d1
	fi
	rm -f $index $namec $nameP
    fi
  else

    ### Assembler-Programme fuer SPARC-stations

    names=`basename $index .s`.s
    if [ $names = $index -a $SPARC -eq 1 ]
    then
      nameo=`basename $index .s`.o
      if as $index -o $nameo -P -I.. -I${SM_HOME1}/header >> ../$d1 2>&1
      then :
      else
	{ echo " "; echo "Could not compile $index"; echo " "; } >> ../$d1
      fi
    fi
    rm -f $index
  fi
done

# Loeschen ueberfluessiger Dateien in srctrans.hilf
rm archiv arindex

# Rueckkehr in das urspruengliche Dateiverzeichnis
cd ..

# Archivierung der Objektmodule
if ls srctrans.hilf/*.o > srctrans.hilf/objmod 2>> $d1
then ar cr $2 srctrans.hilf/*.o 2>> $d1
fi

# Loeschen des Dateiverzeichnisses srctrans.hilf, falls Archivierung erfolgreich
case $? in
  0) rm -r srctrans.hilf;;
  *) echo " " >> $d1
     echo "\"ar r $2 *.o\" failed." >> $d1
     echo "You can find your object files in the directory srctrans.hilf." >> $d1
esac
