#!/bin/csh -f

set RC=0
set TAIL_LINES=4  # Maybe on Convex/SUN etc. this needs to be 1 ?

echo " "
echo "+-----------------------------+"
echo "| Automatic Program Execution |"
echo "+-----------------------------+"
echo " "

set RUNPATH=$TMPDIR

if ( "$1" == "-p" ) then
  shift
  set RUNPATH=$1
  if ( $#argv < 1 ) then
     goto usage
  endif
  shift  
endif

if ( $#argv < 1 ) then
  goto usage
endif

echo "Run path root directory: $RUNPATH"

if ( $#argv > 1 ) then
  set progs="$*"
  foreach PROGRAM ( $progs )
    $0 -p $RUNPATH $PROGRAM
  end
  exit 0
else if ("$1" == "all") then
  set progs=`grep -v lib program.list | awk '{print $1}'`
  foreach PROGRAM ( $progs )
    $0 -p $RUNPATH $PROGRAM
  end
  exit 0
else
  set PROGRAM=`basename $1 /`
  echo " "
  echo ">>> $PROGRAM <<<"
  echo " "
endif

if ( "$PROGRAM" == "lib" ) then
  echo "Can't run 'lib'"
  set RC=1
  goto finish
endif


if ( ! -d $PROGRAM ) then
  echo "Executable directory '`pwd`/$PROGRAM' does not exist. Check config."
  set RC=1
  goto finish
endif

if ( ! -d $RUNPATH ) then
  echo -n "Run directory '$RUNPATH' does not exist. Trying to create it ... "
  mkdir $RUNPATH || set RC=$status
  if ( $RC != 0) then
    echo 'Failed'
    goto finish
  else
    echo 'Okay'
  endif
endif

cd $PROGRAM

set EXEDIR=`pwd`
set files=`ls`

cd $RUNPATH
if ( -d $PROGRAM ) then
  if ( -d old.$PROGRAM ) then
    /bin/rm -rf old.$PROGRAM
  endif
  mv $PROGRAM old.$PROGRAM
endif

mkdir $PROGRAM

set RUNPATH=$RUNPATH/$PROGRAM
cd $RUNPATH

echo "Copying files from $EXEDIR to $RUNPATH ..."

foreach FILE ( $files )
  if ( -f $EXEDIR/$FILE ) then
    if ( "$FILE" != "${PROGRAM}.out" ) then
       echo "Copying $EXEDIR/$FILE to $RUNPATH/$FILE ..."
      /bin/cp $EXEDIR/$FILE .
    endif
  endif
end

pwd
ls -l
cat ${PROGRAM}.sh

echo "Run started at `date`"

${PROGRAM}.sh < /dev/null

echo "Run ended at `date`"

if ( -f ${PROGRAM}.out ) then
  chmod u+rw ${PROGRAM}.out
  echo "Copying $RUNPATH/${PROGRAM}.out to $EXEDIR/${PROGRAM}.out ..."
  cp ${PROGRAM}.out $EXEDIR
  set timing=`tail -$TAIL_LINES ${PROGRAM}.out`
  echo ">>>${PROGRAM}: $timing"
else
  echo "Can't find the output file '${PROGRAM}.out' after ${PROGRAM}'s execution"
  set RC=1
  goto finish
endif

# Common exit path

finish:

echo "Execution of ${PROGRAM} finished with RC=${RC}."

exit $RC

usage:

echo "Usage: $0 [-p run_path] [program_name | all | prog1 prog2 ... progN]"
echo " "

exit 1


