#set -x
#
# @(#)pctest 6.1.2  1995-10-17
DEVNULL=NUL
2>$DEVNULL

# Change by
# B.Diesing 05-11-93       protocol of core's in pctest.prot
#           05-14-93       protocol of extensions from testfile
#                          after (pre)/compilation error
# A. Mosle  10-17-95       deleting the name of serverdb in dif-files
# A. Hunger 11-15-95       accepting oci applications
# B.Diesing 02-10-97       (only ODBC) ignoring DATASOURCE line in pct file
# B.Diesing 02-10-97       (only ODBC) Option -clean destroys the old files
# B.Diesing 05-12-97       (only ODBC) Option -dynamic calls the script odbclnk 			  with the -b option
# B.Diesing 09-17-97       (only CPC) Option -c calls the c-compiler after precompilation.
# B.Diesing 09-22-97       (only CPC) Accept optin -clean to destroy old files

if [ $# -lt 1 ]
then
   echo 'USAGE: pctest [precomoptions] dirname/filename'
   exit 4710
fi

OPT1=''
OLDOPT=''
LFILES=''

COREPROT=No

PREA_ODBC=Lo

j=1
for i
do
   if [ ./ != .`expr $i : ".*\(/\).*"` -o ".$OLDOPT" = ".-I" ]
   then
      eval OPT${j}="\$OPT${j}' '\$i"
   else
      eval FNAME${j}=`expr $i : ".*/\(.*\)"`
      eval FDIR${j}=`expr $i : "\(.*\)/.*"`
      eval LFILES="\$LFILES' '\$FNAME${j}"
      j=`expr $j + 1`
      eval OPT${j}=''
   fi
   OLDOPT=$i
done

if [ `expr .$FNAME1 : ".*"` -gt 9 ]
then
   echo 'Filename for the executable program has more than 8 letters'
   exit 4700
fi

if [ `expr .$FNAME1 : ".*"` -eq 1 ]
then
   echo 'No filename was specified'
   exit 4701
fi

TESTDIR=${TEST}/pc
export TESTDIR
cd $TESTDIR/wrk

for F
do
	case $F in
        "-c" )
	    PRECOMP=Yes
	    ;;
	*     )
	    ;;
	esac
done

cleanup()
{
  echo "cleanup $KKK"
  rm -f ../old/$1.$KKK.[$2]
  rm -f ../dif/$1.$KKK.[$2]
  exit 0;
}

RETCODE=0
k=1
while [ $k -lt $j ]
do
   eval OPT="\$OPT$k"
   eval KKK="\$FNAME$k"
   eval LLL="\$FDIR$k"
   case $LLL in
        win | odbc | oci )
              MMM="c";;
        c++ | c++sql )
              MMM="C";;
        CPC )
              MMM="cpc";;
        *   )
              MMM=$LLL;;
   esac
   cp $TESTDIR/$LLL/$KKK.$MMM $TESTDIR/wrk
   case $LLL in
        c     | win    ) echo c
                callpc $KKK.$MMM
                ;;
        c++   | c++sql ) echo c++
                callpc $KKK.$MMM
                ;;
        cpc   ) echo cpc
		for F
		do
			case $F in
        		"-clean" )
			    cleanup c tol;
			    ;;
			*     )
		            ;;
			esac
		done
                cpc $OPT $KKK
		if [ "$PRECOMP" = "Yes" ]
		then
		  cc -c $CCFLAGS -I$DBROOT/incl -I$TEST/pc/incl $KKK.c
		fi
                ;;
        CPC   ) echo CPC
                CPC $OPT $KKK
                ;;
        cob   ) echo cob
                callpc $KKK.$MMM
                ;;
        cobpc ) echo cobpc
                mv $KKK.$MMM $KKK.pco
                MMM="pco"
                cobpc $OPT $KKK
                ;;
        oci   ) echo "cc $OPT -c -I$DBROOT/incl -I. $KKK.$MMM"
                cc $OPT -c -I$DBROOT/incl -I. $KKK.$MMM
                ;;
        p     ) echo p
                callpc $KKK.$MMM
                ;;
        paspc ) echo paspc
                paspc $OPT $KKK
                ;;
        f     ) echo f
                callpc $KKK.$MMM
                ;;
        fpc   ) echo fpc
                fpc $OPT $KKK
                ;;
        pli   ) echo pli
                callpc $KKK.$MMM
                ;;
        plipc ) echo plipc
                plipc $OPT $KKK
                ;;
        odbc  ) echo odbc
		COREPROT=Yes
		for F
		do
			case $F in
        		"-clean" )
			    cleanup Lo to;
			    ;;
			"-dynamic" )
			    LINKOPT=-b
			    ;;
			*     )
		            ;;
			esac
		done
		    CCFLAGS=-DSQLEXCEPTION
        	    cc -c $CCFLAGS -DSQLODBC -I$DBROOT/incl -I$WRK/incl $KKK.$MMM
		;;
         *     ) exit 4711
                ;;
   esac

   RETCODE=$?
   if [ $RETCODE != 0 ]
   then
      echo `date '+%T %d.%m.%y' ` \\c >> pctest.prot
      echo '===> ERROR AT (PRE)/COMPILATION OF '$KKK.$MMM >> pctest.prot
      exit 105
   fi
   k=`expr $k + 1`
done
k=1
eval KKK="\$FNAME$k"
eval LLL="\$FDIR$k"
LINKSTR=''
while [ $k -lt $j ]
do
   eval STR="\$FNAME$k"
   LINKSTR=$LINKSTR' '$STR
   k=`expr $k + 1`
done




case $LLL in
     c     | cpc | win  ) echo cpclnk
             cpclnk $LINKSTR
             ;;
     CPC    | c++   | c++sql  ) echo CPCLNK
             CPCLNK $LINKSTR
             ;;
     cob   | cobpc ) echo cobpclnk
             cobpclnk $LINKSTR
             ;;
     p     | paspc ) echo paspclnk
             paspclnk $LINKSTR
             ;;
     f     | fpc   ) echo fpclnk
             fpclnk $LINKSTR
             ;;
     oci   ) echo ocilnk
             ocilnk $LINKSTR
             ;;
     pli   | plipc ) echo plipclnk
             plipclnk $LINKSTR
             ;;
     odbc  ) echo odbclnk
             odbclnk $LINKOPT $LINKSTR
	     if [ "$SQLOPT" = "-X" ]
	     then
		upddsn "$DSN" "TraceFileName" `pwd`/sqltrace.pct
	     else
		upddsn "$DSN" "TraceFileName"
	     fi
             ;;
     *     ) exit 4712
             ;;
esac
if [ ! -f $KKK.exe ]
then
   echo `date '+%T %d.%m.%y' ` \\c >> pctest.prot
   echo '===> ERROR AT LINKING THE FILE(S) WITH '$KKK >> pctest.prot
   exit 1960
fi


set -k
echo $KKK is started
# $KKK $SQLOPT ! corrected by Peter - 3-Jun-1993
./$KKK | tee ${KKK}.dou
set +k
if [ -s  ${KKK}.out ]
then
   rm ${KKK}.dou
else
   if [ -f ${KKK}.dou ]
   then
      mv ${KKK}.dou ${KKK}.out
   fi
   if [ -f ${KKK}.pco ]
   then
      mv ${KKK}.pco ${KKK}.out
   fi
fi

if [ "$COREPROT" = "Yes" ]
then
for i in `ls core* 2>$DEVNULL`
do
   echo `date '+%T %d.%m.%y' ` \\c >> pctest.prot
   echo '===> ERROR WITH A CORE-FILE FROM '$KKK | tee -a pctest.prot
   rm $i
done
fi

if [ -f CALLTRAC.pct -a ! -f ${KKK}.pct ]
then
   mv CALLTRAC.pct ${KKK}.pct
fi
if [ -f sqltrace.pct -a ! -f ${KKK}.pct ]
then
   mv sqltrace.pct ${KKK}.pct
fi
if [ -f OCITRAC.pct -a ! -f ${KKK}.pct ]
then
   mv OCITRAC.pct ${KKK}.pct
fi
rm -f $KKK.exe
KK=$KKK
LL=$LLL
k=1
while [ $k -lt $j ]
do
   case $LL in
        cobpc )
              MM=$LL
              rm $KK.cob
              rm $KK.grp;;
        win | odbc | oci )
              MM="c";;
        c++ | c++sql )
              MM="C";;
        *   )
              MM=$LL;
   esac
   rm -f $KK.o
   rm -f $KK.$MM
   k=`expr $k + 1`
   eval KK="\$FNAME$k"
   eval LL="\$FDIR$k"
done

# diffcheck

case $LLL in
     c      ) echo c
              PRAE=Lc
              ;;
     c++    ) echo c++
              PRAE=LC
              ;;
     c++sql ) echo c++sql
              PRAE=L+
              ;;
     cpc    ) echo cpc
              PRAE=c
              ;;
     CPC    ) echo CPC
              PRAE=C
              ;;
     cob    ) echo cob
              PRAE=Lb
              ;;
     cobpc  ) echo cobpc
              PRAE=b
              ;;
     p      ) echo p
              PRAE=Lp
              ;;
     paspc  ) echo paspc
              PRAE=p
              ;;
     f      ) echo f
              PRAE=Lf
              ;;
     fpc    ) echo fpc
              PRAE=f
              ;;
     oci    ) echo oci
              PRAE=oci
              ;;
     pli    ) echo pli
              PRAE=Ll
              ;;
     plipc  ) echo plipc
              PRAE=l
              ;;
     win    ) echo c
              PRAE=Lw
              ;;
     odbc   ) echo odbc
              PRAE=$PREA_ODBC
              ;;
     *      )
              ;;
esac


if [ ! -f $TESTDIR/old/$PRAE.$KKK.l ]
then
   cp $TESTDIR/old/$PRAE.$KKK.l $TESTDIR/old
fi
if [ ! -f $TESTDIR/old/$PRAE.$KKK.o ]
then
   cp $TESTDIR/old/$PRAE.$KKK.o $TESTDIR/old
fi
if [ ! -f $TESTDIR/old/$PRAE.$KKK.t ]
then
   cp $TESTDIR/old/$PRAE.$KKK.t $TESTDIR/old
fi


if [ -f $KKK.pcl ]
then
   sed -e /PROGNAME/d \
       -e /OPTIONUSER/d \
       -e /SERVERDB/d \
       -e /DEFAULTUSER/d \
          $KKK.pcl > $KKK.lll
   mv $KKK.lll $KKK.pcl
fi

if [ -f ../old/$PRAE.$KKK.l -a -f $KKK.pcl ]
then
   diff ../old/$PRAE.$KKK.l $KKK.pcl > ../dif/$PRAE.$KKK.l
else
   if [ -f ../old/$PRAE.$KKK.l ]
   then
      echo "It exists an oldfile! The program did not work correctly!" > ../dif/$PRAE.$KKK.l
   fi
fi
if [ -s $KKK.pcl ]
then
   mv $KKK.pcl $PRAE.$KKK.l
else
   rm -f $KKK.pcl
fi


if [ -f ../old/$PRAE.$KKK.o -a -f $KKK.out ]
then
   diff ../old/$PRAE.$KKK.o $KKK.out > ../dif/$PRAE.$KKK.o
else
   if [ -f ../old/$PRAE.$KKK.o ]
   then
      echo "It exists an oldfile! The program did not work correctly!" > ../dif/$PRAE.$KKK.o
   fi
fi
if [ -s $KKK.out ]
then
   mv $KKK.out $PRAE.$KKK.o
#else
#   rm -f $KKK.out
fi
rm -f $KKK.pco

# pruefen auf andere tracefiles

SERVERS=''
for MFILE in $LFILES
do
   if [ -f ${MFILE}.pct ]
   then
      SERVERS=${SERVERS}' '`grep 'SERVER\(.*\):' ${MFILE}.pct | cut -c13-31`
      sed -e /'START\(.*\):\(.*\)DATE\(.*\):\(.*\)TIME\(.*\):\(.*\)'/,/'END\(.*\):\(.*\)DATE\(.*\):\(.*\)TIME\(.*\):\(.*\)'/d \
          -e /PARSEID/d \
          -e /SQLERRD\(INDEX_5\)/d \
          -e /PREP\ ID/d \
          -e /'SERVER\(.*\):'/d \
             $MFILE.pct > $KKK.ttt
      mv $KKK.ttt $KKK.pct
      case $LLL in
        oci )
             sed -e /PARSE:/d \
                 -e /EXECUTE:/d \
                 -e /DESCR:/d \
                 -e /SELEC:/d \
                 -e /=O/d \
                 -e /=S/d \
                 -e /=========/d \
                 -e /=\ \ \ \ \ \ \ /d \
                 $KKK.pct > $KKK.ttt
             mv $KKK.ttt $KKK.pct
             ;;
        odbc )
             sed -e /DATASOURCE:/d \
                 $KKK.pct > $KKK.ttt
             mv $KKK.ttt $KKK.pct
             ;;
        *   )
             ;;
      esac
      if [ .$MFILE != .$KKK ]
      then
         rm $MFILE.pct
      fi
      break
   fi
done

if [ -f ../old/$PRAE.$KKK.t -a -f $KKK.pct ]
then
   diff ../old/$PRAE.$KKK.t $KKK.pct > ../dif/$PRAE.$KKK.t
else
   if [ -f ../old/$PRAE.$KKK.t ]
   then
      echo "It exists an oldfile! The program did not work correctly!" > ../dif/$PRAE.$KKK.t
   fi
fi
if [ -s $KKK.pct ]
then
   mv $KKK.pct $PRAE.$KKK.t
else
   rm -f $KKK.pct
fi

if [ -s ../dif/$PRAE.$KKK.l ]
then
   if [ -f $KKK.pcl ]
   then
      mv $KKK.pcl $PRAE.$KKK.l
   fi
   echo `date '+%T %d.%m.%y' ` \\c >> pctest.prot
   echo "=> DIFF <= in the listing  of $PRAE.$KKK.l" | tee -a pctest.prot
else
   if [ -f ../dif/$PRAE.$KKK.l ]
   then
      rm -f $PRAE.$KKK.l
      rm -f ../dif/$PRAE.$KKK.l
      echo `date '+%T %d.%m.%y' ` \\c >> pctest.prot
      echo "           Listing is O.K. of $PRAE.$KKK.l" | tee -a pctest.prot
   fi
   if [ -f $PRAE.$KKK.l ]
   then
      echo `date '+%T %d.%m.%y' ` \\c >> pctest.prot
      echo "A new listing is produced of $PRAE.$KKK.l" | tee -a pctest.prot
   fi
fi

if [ -s ../dif/$PRAE.$KKK.o ]
then
   if [ -f $KKK.out ]
   then
      mv $KKK.out $PRAE.$KKK.o
   fi
   echo `date '+%T %d.%m.%y' ` \\c >> pctest.prot
   echo "=> DIFF <= in the output   of $PRAE.$KKK.o" | tee -a pctest.prot
else
   if [ -f ../dif/$PRAE.$KKK.o ]
   then
      rm -f $PRAE.$KKK.o
      rm -f ../dif/$PRAE.$KKK.o
      echo `date '+%T %d.%m.%y' ` \\c >> pctest.prot
      echo "           Output  is O.K. of $PRAE.$KKK.o" | tee -a pctest.prot
   fi
   if [ -f $PRAE.$KKK.o ]
   then
      echo `date '+%T %d.%m.%y' ` \\c >> pctest.prot
      echo "A new output  is produced of $PRAE.$KKK.o" | tee -a pctest.prot
   fi
fi

ausgabe()
{
   I=0
   for i in $*
   do
      if [ $I -eq 0 ]
      then
         AUSGABE=${AUSGABE}' db: '$i
         I=1
      else
         AUSGABE=${AUSGABE}' on node: '$i
         I=0
      fi
   done
}

AUSGABE=''
ausgabe $SERVERS
if [ -s ../dif/$PRAE.$KKK.t ]
then
   if [ -f $KKK.pct ]
   then
      mv $KKK.pct $PRAE.$KKK.t
   fi
   echo `date '+%T %d.%m.%y' ` \\c >> pctest.prot
   if [ $LLL = odbc ]
   then
   	CRLF='\n'
   else
        CRLF=' '
   fi
   echo "=> DIFF <= in the trace    of $PRAE.$KKK.t${CRLF}with${AUSGABE}" | tee -a pctest.prot
else
   if [ -f ../dif/$PRAE.$KKK.t ]
   then
      rm -f $PRAE.$KKK.t
      rm -f ../dif/$PRAE.$KKK.t
      echo `date '+%T %d.%m.%y' ` \\c >> pctest.prot
      echo "           Trace   is O.K. of $PRAE.$KKK.t" | tee -a pctest.prot
   fi
   if [ -f $PRAE.$KKK.t ]
   then
      echo `date '+%T %d.%m.%y' ` \\c >> pctest.prot
      echo "A new trace   is produced of $PRAE.$KKK.t" | tee -a pctest.prot
   fi
fi

