#!/bin/ksh
#**********************************************************************#
#*                                                                    *#
#* Copyright (c) 2001 by Sun Microsystems, Inc.                       *#
#* All rights reserved.                                               *#
#*                                                                    *#
#**********************************************************************#


########################################################################
#                                                                      #
# EBM BATCH JOB MACRO :     IF                                         # 
# Purpose             :     Defines a condition to be checked.  If the #
#                           condition is true, the action specified on #  
#                           the THEN macro is executed.                # 
#                                                                      #
########################################################################
. verify_jobstatus
. beginjob.${EBMSYS}.${JON}
. current_proc_level.${EBMSYS}.${JON}

if [ -f beginproc.setparms.${EBMSYS}.${JON}.${PROC_LEVEL} ]
then
   . beginproc.setparms.${EBMSYS}.${JON}.${PROC_LEVEL}
fi

if [ -f setparm.${EBMSYS}.${JON}.${PROC_LEVEL} ]
then
   . setparm.${EBMSYS}.${JON}.${PROC_LEVEL}
fi

if [ -f label.${EBMSYS}.${JON}.${PROC_LEVEL} ]
then
   . label.${EBMSYS}.${JON}.${PROC_LEVEL}
fi

if [ "a$BATCH_MODE" = "aMVS" ]
then
   if [ "a$STEPNAME" != a ]
   then

      . check_bypass_step
      if [ "$BYPASS" = "YES" ]
      then
         exit 0
      fi
   fi
fi

abort=no                   ; export abort
VARIABLE1=`eval echo $1`   ; export VARIABLE1
comparator1=`eval echo $2` ; export comparator1
VALUE1=`eval echo $3`      ; export VALUE1
operator=`eval echo $4`    ; export operator

#  Verify three required variables
if [ "a$VARIABLE1" = "a" -o "a$comparator1" = "a" -o "a$VALUE1" = "a" ]
then
   print_message IF "Invalid syntax"
   abort=yes ; export abort
fi  

if [ "$abort" = "no" ]
then
   if [ "a$operator" != "a" ]
   then
      case $operator in
         OR|or)
            OPERATOR="-o" ; export OPERATOR
         ;;
         AND|and)
            OPERATOR="-a" ; export OPERATOR
         ;;
         VERBOSE|verbose)
            VERBOSE=YES ; export VERBOSE
            operator='' ; export operator
         ;;
         *)
            print_message IF "invalid syntax"
            abort=yes ; export abort 
         ;;
      esac
   fi
fi

#  If operator present, seven variables are required
if [ "$abort" = "no" ]
then
   if [ "a$OPERATOR" != "a" ]
   then
      VARIABLE2=`eval echo $5` ; export VARIABLE2
      comparator2=`eval echo $6` ; export comparator2
      VALUE2=`eval echo $7`      ; export VALUE2
      if [ "a$VARIABLE2" = "a" -o "a$comparator2" = "a" -o "a$VALUE2" = "a" ]
      then
         print_message IF "Invalid syntax"
         abort=yes ; export abort
      fi
   fi
fi

if [ "$abort" = "no" ]
then 
   test_integer=`eval echo $VALUE1 | tr -d '[0-9]'`
   if [ "a$test_integer" = "a" ]
   then
      VALUE1_TYPE=num    ;export VALUE1_TYPE
   else 
      VALUE1_TYPE=nonum  ;export VALUE1_TYPE
   fi

   if [ "a$OPERATOR" != "a" ]
   then
      test_integer=`eval echo $VALUE2 | tr -d '[0-9]'`
      if [ "a$test_integer" = "a" ]
      then
         VALUE2_TYPE=num    ;export VALUE2_TYPE
      else 
         VALUE2_TYPE=nonum  ;export VALUE2_TYPE
      fi
   fi

   if [ "$VARIABLE1" = "LASTRC" -o "$VARIABLE1" = "MAXRC" ]
   then
      VARIABLE1_TYPE=num    ;export VARIABLE1_TYPE
   else
      tmp=`eval echo ${VARIABLE1}` ; export tmp
      tmp1=$`echo $tmp` ; export tmp1
      tmp2=`eval echo $tmp1` ; export tmp2
      test_integer=`eval echo $tmp2 | tr -d '[0-9]'`
      if [ "a$test_integer" = "a" ]
      then
         VARIABLE1_TYPE=num  ;export VARIABLE1_TYPE
      else 
         VARIABLE1_TYPE=nonum  ;export VARIABLE1_TYPE
      fi
   fi

   if [ "a$OPERATOR" != "a" ]
   then
      if [ "$VARIABLE2" = "LASTRC" -o "$VARIABLE2" = "MAXRC" ]
      then
         VARIABLE2_TYPE=num    ;export VARIABLE2_TYPE
      else

         tmp=`eval echo ${VARIABLE2}` ; export tmp
         tmp1=$`echo $tmp` ; export tmp1
         tmp2=`eval echo $tmp1` ; export tmp2
         test_integer=`eval echo $tmp2 | tr -d '[0-9]'`
         if [ "a$test_integer" = "a" ]
         then
            VARIABLE2_TYPE=num    ;export VARIABLE2_TYPE
         else 
            VARIABLE2_TYPE=nonum  ;export VARIABLE2_TYPE
         fi
      fi
   fi

   case $comparator1 in
      EQ|NE|GT|LT|GE|LE|eq|ne|gt|lt|ge|le)
         COMPARATOR1="-`echo $comparator1 | tr '[A-Z]' '[a-z]'`"  ; export COMPARATOR1
      ;;
      *)
         print_message IF "Invalid syntax"
         abort=yes ; export abort
      ;;
   esac

   if [ "$VARIABLE1_TYPE" = "nonum" -o "$VALUE1_TYPE" = "nonum" ]
   then
      case $comparator1 in
         EQ)   
            COMPARATOR1="=" ; export COMPARATOR1
         ;;
         NE)   
            COMPARATOR1="\!=" ; export COMPARATOR1
         ;;
         *)
            if [ "a$OPERATOR" = "a" ]
            then
               print_message IF "$1 $2 $3"
            else
               print_message IF "$1 $2 $3 $4 $5 $6 $7"
            fi
            print_message IF "invalid syntax: cannot perform numeric comparison on non-numeric values"
            abort=yes ; export abort
         ;;
       esac
   fi
fi   

if [ "$abort" = "no" ]
then
   if [ "a$operator" != "a" ]
   then
      case $comparator2 in
         EQ|NE|GT|LT|GE|LE|eq|ne|gt|lt|ge|le)
            COMPARATOR2="-`echo $comparator1 | tr '[A-Z]' '[a-z]'`"  ; export COMPARATOR2
         ;;
         *)
            print_message IF "Invalid syntax"
            abort=yes ; export abort
         ;;
      esac
      if [ "$VARIABLE2_TYPE" = "nonum" -o "VALUE2_TYPE" = "nonum" ]
      then
         case $comparator2 in
            EQ)   
               COMPARATOR2="=" ; export COMPARATOR2
            ;;
            NE)   
               COMPARATOR2="\!=" ; export COMPARATOR2
            ;;
            *)
               if [ "a$OPERATOR" = "a" ]
               then
                  print_message IF "$1 $2 $3"
               else
                  print_message IF "$1 $2 $3 $4 $5 $6 $7"
               fi
               print_message IF "invalid syntax: cannot perform numeric comparison on non-numeric value"
               abort=yes ; export abort
            ;;
          esac
      fi
   fi   
fi
if [ "$abort" = "no" ]
then 
   cat <$DEVNULL > if.${EBMSYS}.${JON}
   if [ "$VERBOSE" = "YES" ]
   then
      echo "VERBOSE=YES;export VERBOSE"  >> if.${EBMSYS}.${JON}
   fi
   
   if [ "$VARIABLE1" = "LASTRC" -o "$VARIABLE2" = "LASTRC" ] 
   then 
      echo "LASTRC=`LASTRC`; export LASTRC" >> if.${EBMSYS}.${JON}
   fi
   if [ "$VARIABLE1" = "MAXRC" -o "$VARIABLE2" = "MAXRC" ] 
   then 
       echo "MAXRC=`MAXRC`; export MAXRC" >> if.${EBMSYS}.${JON}
   fi
   tmp1=\${${tmp1}} ; export tmp1
   case $VARIABLE1 in
      LASTRC)
         VARIABLE1="\${LASTRC}" ; export VARIABLE1
      ;;
      MAXRC)
         VARIABLE1="\${MAXRC}" ; export VARIABLE1
      ;;
      *) 
         VARIABLE1="\${${VARIABLE1}}" ; export VARIABLE1
      ;;
   esac

   if [ "a$OPERATOR" != "a" ]
   then
      case $VARIABLE2 in
         LASTRC)
            VARIABLE2="\${LASTRC}" ; export VARIABLE2
         ;;
         MAXRC)
            VARIABLE2="\${MAXRC}" ; export VARIABLE2
         ;;
         *) 
            VARIABLE2="\${$VARIABLE2}" ; export VARIABLE2
         ;;
      esac
   fi
   
   if [ "a$OPERATOR" = "a" ]
   then
      echo "if [ \"$VARIABLE1\" $COMPARATOR1 \"$VALUE1\" ]" >> if.${EBMSYS}.${JON}
   else
      echo "if [ \"$VARIABLE1\" $COMPARATOR1 \"$VALUE1\" $OPERATOR \"$VARIABLE2\" $COMPARATOR2 \"$VALUE2\" ]" >> if.${EBMSYS}.${JON}
   fi
   if [ "$VERBOSE" = "YES" ]
   then
      if [ "a$OPERATOR" = "a" ]
      then
         print_message IF "$1 $2 $3"
      else
         print_message IF "$1 $2 $3 $4 $5 $6 $7"
      fi
   fi
else
   . set_jobstatus_abort
fi
exit 0
