#!/bin/sh
# set -x

PLATFORM=`uname`
VERBOSE=0
SW="-r"
X=504
Y=512

STDIN=/dev/null
OPROG=funcnts
NPROG=../funcnts
OFILE=${HOME}/data/snr.fits
NFILE=${HOME}/data/snr.ev.gz


EAWK='start==1&&NF>0{tpix += $2; tarea +=$3; print $0};/^---- ------------ ---------$/{start=1}END{print tpix,tarea}'

SAWK='start==1&&NF>0{tpix += $2; tarea +=$3};/^---- ------------ ---------$/{start=1}END{print tpix,tarea}'

FAWK='{tpix = $1};END{print tpix}'

while [ x"$1" != x ]; do
  case $1 in
  -1)
    DO1=YES
    shift
    continue;;
  -b)
    shift
    B=$1
    shift
    continue;;
  -c)
    shift
    C="$1\;"
    shift
    continue;;
  -e)
    FIELD=`${OPROG} ${OFILE}${B} "field" | awk "$SAWK" | awk "$FAWK"`
    echo "FIELD: $FIELD"
    echo " "
    M="-"
    shift
    continue;;
  -f)
    shift
    FILE=$1
    shift
    continue;;
  -n)
    shift
    NPROG=$1
    shift
    continue;;
  -o)
    shift
    OPROG=$1
    shift
    continue;;
  -p)
    shift
    STDIN=$1
    if [ x`echo $STDIN | awk -F. '{print $NF}'` = x"gz" ]; then
      NFILE=stdin.gz
    else
      NFILE=stdin
    fi
    shift
    continue;;
  -P)
    PURE=YES
    DO1=YES
    NPROG=../funcnts.pure
    shift
    continue;;
  -s)
    shift
    SW=$1
    shift
    continue;;
  -v)
    VERBOSE=1
    shift
    continue;;
  -V)
    VERBOSE=2
    shift
    continue;;
  -x)
    shift
    X=$1
    shift
    continue;;
  -y)
    shift
    Y=$1
    shift
    continue;;
  *)
    shift
    continue;;
  esac
done

X2=`echo "$X + 10" | bc`
Y2=`echo "$Y + 10" | bc`
X3=`echo "$X + 20" | bc`
Y3=$Y
X4=`echo "$X + 10" | bc`
Y4=`echo "$Y - 10" | bc`

B1=`echo "$X - 100" | bc`
B2=`echo "$X + 99" | bc`
B3=`echo "$Y - 100" | bc`
B4=`echo "$Y + 99" | bc`
if [ x"$B" = x ]; then
  B="[$B1:$B2,$B3:$B4,3]"
fi

echo "OPROG="${OPROG} "OFILE="${OFILE}${B} X=${X} Y=${Y}
echo "NPROG="${NPROG} "NFILE="${NFILE}${B} X=${X} Y=${Y}

IFS="	"
while read ARG1 ARG2 ARG3; do
  if [ x"$ARG1" = x ]; then
    continue
  fi
  if [ x`echo $ARG1 | sed 's/^#.*/YES/g'` = x"YES" ]; then
    continue
  fi
  CMD=$ARG1
  eval "ARG2=\"${C}$ARG2\""
  eval "ARG3=\"${C}$ARG3\""
  if [ x$CMD = xZIEXACT ]; then
    if [ x$FILTER_PAINT = xtrue ]; then
      continue
    else
      CMD=EXACT
    fi
  fi
  if [ x$CMD = xZEXACT ]; then
    if [ x$FILTER_PAINT = xtrue ]; then
      CMD=SUM
    else
      CMD=EXACT
    fi
  fi
  case $CMD in
  OPROG)
    OPROG=$ARG2
    ;;
  NPROG)
    NPROG=$ARG2
    ;;
  FILE)
    FILE=$ARG2
    ;;
  EXCLUDE)
    FIELD=`$OPROG ${OFILE}${B} "field" | awk "$SAWK" | awk "$FAWK"`
    echo "FIELD: $FIELD"
    echo " "
    M="-"
    ;;
  EXIT)
    exit
    ;;
  EXACT)
    if [ x"$DO1" = xYES ]; then
      echo "${M}DO1: $ARG3"
      ($NPROG ${SW} ${NFILE}${B} "${M}$ARG3") >funcnts2.out 2>&1
    else
      echo "${M}EXACT: $ARG2 ... $ARG3"
      ($OPROG ${SW} ${OFILE}${B} "$ARG2" | awk $EAWK) >funcnts1.out 2>err.log
      if test $? -ne 0; then
        echo "skipping $NPROG due to error"
      else
        (cat $STDIN | $NPROG ${SW} ${NFILE}${B} "${M}$ARG3" | awk $EAWK) >funcnts2.out 2>&1
        if [ x$M = x ]; then
          diff funcnts1.out funcnts2.out
        else
          V1=`cat funcnts1.out | awk $FAWK`
          V2=`cat funcnts2.out | awk $FAWK`
          V2=`echo "$FIELD-$V2" | bc`
          if [ $V1 != $V2 ]; then
              echo "V1=$V1 V2=$V2"
          fi
        fi
      fi
    fi
    echo " "
    ;;
  REV)
    if [ x"$DO1" = xYES ]; then
      echo "${M}DO1: $ARG3"
      (cat $STDIN | $NPROG ${SW} ${NFILE}${B} "${M}$ARG3") >funcnts2.out 2>&1
    else
      echo "${M}REV: $ARG2 ... $ARG3"
      ($OPROG ${SW} ${OFILE}${B} "$ARG2" | awk $EAWK) >tfuncnts1.out 2>err.log
      if test $? -ne 0; then
        echo "skipping $NPROG due to error"
      else
        (cat $STDIN | $NPROG ${SW} ${NFILE}${B} "${M}$ARG3" | awk $EAWK) >tfuncnts2.out 2>&1
        if [ x$M = x ]; then
          awk 'NF==3{print $0}' < tfuncnts1.out | sort -r | awk '{print $2,$3}' > funcnts1.out
          awk 'NF==3{print $2,$3}' < tfuncnts2.out >funcnts2.out 2>&1
          diff funcnts1.out funcnts2.out
        else
          V1=`cat funcnts1.out | awk $FAWK`
          V2=`cat funcnts2.out | awk $FAWK`
          V2=`echo "$FIELD-$V2" | bc`
          if [ $V1 != $V2 ]; then
              echo "V1=$V1 V2=$V2"
          fi
        fi
      fi 
   fi
    echo " "
    ;;
  SUM)
    if [ x"$DO1" = xYES ]; then
      echo "${M}DO1: $ARG3"
      (cat $STDIN | $NPROG ${SW} ${NFILE}${B} "${M}$ARG3") >funcnts2.out 2>&1
    else
      echo "${M}SUM:   $ARG2 ... $ARG3"
      ($OPROG ${SW} ${OFILE}${B} "$ARG2" | awk $SAWK) >funcnts1.out 2>err.log
      if test $? -ne 0; then
        echo "skipping $NPROG due to error"
      else
        (cat $STDIN | $NPROG ${SW} ${NFILE}${B} "${M}$ARG3" | awk $SAWK) >funcnts2.out 2>&1
        if [ x$M = x ]; then
          diff funcnts1.out funcnts2.out
        else
          V1=`cat funcnts1.out | awk $FAWK`
          V2=`cat funcnts2.out | awk $FAWK`
          V2=`echo "$FIELD-$V2" | bc`
          if [ $V1 != $V2 ]; then
              echo "V1=$V1 V2=$V2"
          fi
        fi
      fi
    fi
    echo " "
    ;;
  *)
    echo "ERROR: unknown command: $CMD"
    exit 1
    ;;
  esac
  if [ $VERBOSE = 1 ]; then
    echo "***** funcnts1.out *****"
    cat funcnts1.out
  fi
  if [ $VERBOSE = 2 ]; then
    echo "***** funcnts1.out *****"
    cat funcnts1.out
    echo "***** funcnts2.out *****"
    cat funcnts2.out
  fi
  rm -f err.log
done

rm -f funcnts1.out funcnts2.out tfuncnts1.out tfuncnts2.out

