#!/bin/bash
# author: wrn (2000-5-28)
# modified by loli

help()
{    echo Modo de empleo: sceptre [opciones] fichero
     echo Opciones:
     echo '  -h              Muestra esta informacion'
     echo '  -v              Muestra la version '  
     echo '  -u <biblioteca> Biblioteca auxiliar para la compilacion'
     echo "     Valor por defecto: $1"   
     echo '  -m <fichero>    Fichero de modelos'
     echo "     Valor por defecto: $2"   
     echo '  -o <carpeta>    Carpeta que recibira los ficheros producidos'
     echo '      por este script o por sceptre1'
     echo "     Valor por defecto: directorio corriente"   
     echo ' Las opciones -v -m y -o se pasan a sceptre1; -h y -u son propias'
     echo 'Fichero:'
     echo '  Archivo de extension .d que describe el circuito a simular'
     echo '  Puede informarse con o sin su extension;'
     echo '     puede estar en directorio distinto del corriente'
     exit; 
}
prefix=/usr/local
exec_prefix=${prefix}
LIBDIR=${exec_prefix}/lib
LIBSCEPTRE=${LIBDIR}/libsceptre.a
LIBSCEPTREAUX=${LIBDIR}/libsceptreaux.a
SHAREDIRSIMUSOL=${exec_prefix}/share/sceptre-simusol
MODELLIB=${HOME}/lib/modellib.dat
USRLIB=${HOME}/lib/usrlib.a
FC='schroot -c bionic -- gfortran -fno-automatic  -finit-local-zero -O -W -Wall -Wextra -g '
# FFLAGS=' -fno-automatic  -finit-local-zero -O -W  -Wall -Wextra -g'
#echo $USERLIB $MODELLIB
while getopts ":hvo:m:u:" opt "$@"; do
   case $opt in
     h) help $USRLIB $MODELLIB;;
     v) sceptre -v; exit;;
     o) OUTDIR=$OPTARG;;
     m) MODELLIB=$OPTARG;;
     u) USRLIB=$OPTARG;;
#     :) echo "Option -$OPTARG requires an argument" >2&
#        exit 1;;  no funciona
     \?) echo "Invalid option: -$OPTARG" >&2
        exit 1;;
   esac
done
if [ ! -e ${USRLIB} ]; then
   echo ${USRLIB} no es un archivo, usamos -u posible
   USRLIB=${SHAREDIRSIMUSOL}/usrlib.a
fi
if [ ! -e ${MODELLIB} ]; then
   echo ${MODELLIB} no es un archivo, usamos -m posible
   MODELLIB=${SHAREDIRSIMUSOL}/modellib.dat
fi
if [ -z ${OUTDIR} ]; then
    OUTDIR='.'
fi
if [ ! -d ${OUTDIR} ]; then
   echo ${OUTDIR} no es un directorio
   exit 1
fi 
shift $((OPTIND-1))
if [ -z "$1" ]; then
    echo operand missing
    help
fi
DIR=`dirname $1`
rcode=$?
if [ $rcode != 0 ]; then
   echo name \"$1\" is not good for input file 
   exit $rcode
fi

PROPIO=`basename $1 .d`
rcode=$?
if [ $rcode != 0 ]; then
   echo name \"$1\" is not good for input file 
   exit $rcode
fi
INPUT="${DIR}/${PROPIO}"
PROPIO="${OUTDIR}/${PROPIO}"
echo ' S C E P T R E  (LINUX-version)'
echo ' Compiler: ' ${FC} ${FFLAGS}
echo ' User library file ' ${USRLIB}

rm ${PROPIO}.ls1 ${PROPIO}.ini ${PROPIO}.f ${PROPIO}.acs 2>/dev/null 
rm ${PROPIO}.ls2 ${PROPIO}.dat ${PROPIO}.dirac ${PROPIO}.sim 2>/dev/null
rm ${PROPIO}.ls4 ${PROPIO}.ls5 dirac.dat  2>/dev/null
rm ${PROPIO}.for ${PROPIO}_run 2>/dev/null 
SCEPTRE1="schroot -c bionic -- sceptre1"
echo "${SCEPTRE1} -o $OUTDIR  -m $MODELLIB $INPUT 2>${PROPIO}.ls0"
${SCEPTRE1} -o $OUTDIR  -m $MODELLIB $INPUT 2>${PROPIO}.ls0

rcode=$?
if [ $rcode -gt 200 ]; then
   exit $rcode
fi
if [ $rcode != 0 ]; then
    cat ${PROPIO}.ls0
    if [ -e ${PROPIO}.ls1 ]; then
        echo See ${PROPIO}.ls1
    fi
    exit $rcode
fi

if [ ! -s ${PROPIO}.for ]; then
    echo "Fotran program not generated"
    exit 1   
fi
if [ -e ${DIR}/funciones.for ]; then
    cat ${DIR}/funciones.for >${PROPIO}.f
fi

# datasave.dat and pgmsave.for are possibly used by
#    a following continue type .d file
cp ${PROPIO}.for pgmsave.for

sed 's/\$/\_/g' < ${PROPIO}.for >>${PROPIO}.f
echo "${FC} -o ${PROPIO}_run   ${PROPIO}.f ${LIBDIR}/sceptre2.o $USRLIB $LIBSCEPTRE $LIBSCEPTREAUX   2>${PROPIO}.ls4"

${FC} -o ${PROPIO}_run   ${PROPIO}.f ${LIBDIR}/sceptre2.o $USRLIB $LIBSCEPTRE $LIBSCEPTREAUX   #2>${PROPIO}.ls4


# ${LIBDIR}/simusoltable.o -lsimusol_table

# ${LIBDIR}/radiacion.o -lrad
# -lSolTrack
#/usr/local/lib/librad.so.1.0.1 2>${PROPIO}.ls4


#echo "${FC} -o ${PROPIO}_run   ${PROPIO}.f ${LIBDIR}/sceptre2.o     $USRLIB $LIBSCEPTRE $LIBSCEPTREAUX   ${LIBDIR}/simusoltable.o ${LIBDIR}/radiacion.o -lsimusol_table -lrad"

rcode=$?

echo RCODE $rcode

if [ $rcode != 0 ]; then
    echo Return compilation code for ${PROPIO}_run = $rcode
    echo see ${PROPIO}.ls4
    exit $rcode
fi

if [ -s ${PROPIO}.ls4 ]; then
    cat ${PROPIO}.ls4
fi
date
if [ ! -x ${PROPIO}_run ]; then
    echo " Executable ${PROPIO}_run not found"
    exit 10
fi

schroot -c bionic -- ${PROPIO}_run  2>${PROPIO}.ls5
rcode=$?

rcode=$?
if [  $rcode != 0 ]; then
     echo Return execution code for ${PROPIO}_run = $rcode
     cat ${PROPIO}.ls5
     if [ -s ${PROPIO}.ls2 ]; then
         echo Problems in simulation:
         echo See ${PROPIO}.ls2
     fi
     exit $rcode
fi
if [ -f dirac.dat ]; then
     mv dirac.dat ${PROPIO}.dirac
else 
     rm ${PROPIO}.sim 2>/dev/null
     if [ -s ${PROPIO}.ls2 ]; then
          echo "      see  results in ${PROPIO}.ls2"
     fi

fi

# datasave.dat and pgmsave.for are possibly used by
#    a following continue type .d file
cp ${PROPIO}.dat datasave.dat

exit 0



