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


########################################################################
#                                                                      #
# EBM BATCH JOB MACRO :     EXECPROC                                   #
# Purpose             :     Execute a procedure                        #
#                                                                      #
########################################################################
. verify_jobstatus
. beginjob.${EBMSYS}.${JON}
. current_proc_level.${EBMSYS}.${JON}

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

if [ "a$PROCNAME" != "a" ]
then
   print_message_PROCNAME=$PROCNAME; export print_message_PROCNAME
   CURRENT_STEP_PROCNAME=$PROCNAME ; export CURRENT_STEP_PROCNAME
fi

FILLER="                               "; export FILLER

PGMPARM=''; export PGMPARM
PARMS='' ;  export PARMS
cat <$DEVNULL > ${JON}_WK3a
chmod 755 ${JON}_WK3a
cat <$DEVNULL > ${JON}_WK3n
chmod 755 ${JON}_WK3n


for argument in $*
do
  i=`eval echo $argument`
  case $i in
    procname=*|PROCNAME=*)
       if [ "a$PROCNAME" != "a" ]
       then
          if [ "$PROCNAME" = `eval echo $i|cut -f2 -d'='` ]
          then
             . set_jobstatus_abort
             ABORT=YES; export ABORT
             print_message EXECPROC "ERROR   Cannot execute a procedure recursively"
          break
          fi
       fi
       PROCNAME=`eval echo $i|cut -f2 -d'='` 
       export PROCNAME
    ;;

    stepname=*|STEPNAME=*)
       STEPNAME=`eval echo $i|cut -f2 -d'='` 
       export STEPNAME
    ;;

    parms=*|PARMS=*)
       tmp_parms="`eval echo $i|cut -c7-`"
       export tmp_parms
     
       PARMS="$PARMS $tmp_parms"
       export PARMS
    ;;

    pgmparm=*|PGMPARM=*)
       pgmparm="`eval echo $i | cut -f2 -d'='`"; export pgmparm 
       procstepname='first_step'; export procstepname
       envpgmparm=`eval echo PGMPARM_${procstepname}`; export envpgmparm

       if [ ! -f execproc_pgmparm.${EBMSYS}.${JON}.`expr ${PROC_LEVEL} + 1` ]
       then
          cat $DEVNULL > execproc_pgmparm.${EBMSYS}.${JON}.`expr ${PROC_LEVEL} + 1`
          chmod 755  execproc_pgmparm.${EBMSYS}.${JON}.`expr ${PROC_LEVEL} + 1`   
       fi

       echo "${envpgmparm}=${pgmparm}">> execproc_pgmparm.${EBMSYS}.${JON}.`expr ${PROC_LEVEL} + 1`

       touch execproc_nullify_pgmprms.${EBMSYS}.${JON}.`expr ${PROC_LEVEL} + 1`
       ;;

    pgmparm.*=*|PGMPARM.*=*)
       pgmparm=`eval echo $i | cut -f2 -d'='`; export pgmparm
       tmp_pgmparm=`eval echo $i | sed -e 's/=/./g'`; export tmp_pgmparm
       procstepname=`eval echo $tmp_pgmparm | cut -f2 -d'.'`; export procstepname
       envpgmparm=`eval echo PGMPARM_${procstepname}`; export envpgmparm

       if [ ! -f execproc_pgmparm.${EBMSYS}.${JON}.`expr ${PROC_LEVEL} + 1` ]
       then
          cat $DEVNULL > execproc_pgmparm.${EBMSYS}.${JON}.`expr ${PROC_LEVEL} + 1`
          chmod 755  execproc_pgmparm.${EBMSYS}.${JON}.`expr ${PROC_LEVEL} + 1`   
       fi

       echo "${envpgmparm}=${pgmparm}" >> execproc_pgmparm.${EBMSYS}.${JON}.`expr ${PROC_LEVEL} + 1`
    ;;

    verbose|VERBOSE)
      VERBOSE=YES
      export VERBOSE
    ;;

    *)
      print_message EXECPROC "ERROR   Invalid parameter specified :   $i" 
      . set_jobstatus_abort
      ABORT=YES; export ABORT
    ;;
  esac
done

if [ "a$PROCNAME" = "a" ] 
then 
   print_message EXECPROC "ERROR   procname is required" 
   . set_jobstatus_abort
   ABORT=YES; export ABORT
else 
   if [ "a$STEPNAME" = "a" ]
   then 
      STEPNAME=$PROCNAME;export STEPNAME
   fi
fi

print_message_STEPNAME=$STEPNAME; export print_message_STEPNAME

. check_bypass_step

if [ "$BYPASS" = "NO" ]
then

   if [ -f first_step.${EBMSYS}.${JON} ]
   then
      echo "firststepisproc_ 0"  > ${JON}_RET
      rm -f first_step.${EBMSYS}.${JON}
   fi
   
   STEP_START_TIME="`ebmtime`"
   export STEP_START_TIME
   if [ -f default_assgns.${EBMSYS}.${JON} ] 
   then
      . default_assgns.${EBMSYS}.${JON}
   fi
   if [ "$VERBOSE" = "YES" ] 
   then
      echo " "
      print_message EXECPROC "-----Starting in verbose mode-----"
      print_message EXECPROC "procname=$PROCNAME"
      print_message EXECPROC "stepname=$STEPNAME"
      if [ "a$PARMS" != "a" ]
      then
         for i in `echo $PARMS | sed 's/,/ /g'`
         do
           print_message EXECPROC "`echo $i`"
         done
      fi
   fi
   if [ "a$CURRENT_STEP_PROCNAME" != "a" ]
   then
      STEPNAME=${CURRENT_STEP_PROCNAME}_${STEPNAME} ; export STEPNAME
   fi

   SAVE_COBPATH=$COBPATH; export SAVE_COBPATH

   if [ "a$PGMPATH" != "a" ]
   then 
      COBPATH=$PGMPATH:$COBPATH                    
      export COBPATH
   fi   

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

   if [ "a$PARMS" != "a" ] 
   then
      cat <$DEVNULL > execproc.inherit_parms.${EBMSYS}.${JON}.${PROC_LEVEL} 
      export `echo $PARMS | sed 's/,/ /g'`
   #------------------------------------------------------------------------
   #  Store parms that caller must inherit from called procedure
   #------------------------------------------------------------------------
      for i in `echo $PARMS | sed 's/,/ /g'`
      do
         echo "$i" | grep "=" 1> $DEVNULL 2>&1
         if [ $? -ne 0 ] 
         then
            echo "$i= " >> execproc.inherit_parms.${EBMSYS}.${JON}.${PROC_LEVEL}
         fi
      done
   fi

   if [ -f libdef_pgm_step.${EBMSYS}.${JON} ]
   then
      rm -f libdef_pgm_step.${EBMSYS}.${JON} 
   fi

   LIBPROCPATH=''; export LIBPROCPATH

   if [ -f libdef_proc_step.${EBMSYS}.${JON} ]
   then
      .  libdef_proc_step.${EBMSYS}.${JON}
      if [ "a$STEPROCPATH" != "a" ]
      then
         LIBPROCPATH=$STEPROCPATH; export LIBPROCPATH
      fi  
   fi

   if [ "a$STEPROCPATH" = "a" ]
   then
      if [ -f libdef_proc_job.${EBMSYS}.${JON} ]
      then
        .  libdef_proc_job.${EBMSYS}.${JON}
        if [ "a$JOBPROCPATH" != "a" ]
        then
           LIBPROCPATH=$JOBPROCPATH; export LIBPROCPATH
        fi
      fi
   fi

   if [ "a$LIBPROCPATH" != "a" ]
   then
      proc_search_path=$LIBPROCPATH:$PROCLIB; export proc_search_path
   else
      proc_search_path=$PROCLIB; export proc_search_path
   fi

   PROCDIR=''; export PROCDIR
   PROC_SEARCH_PATH="`ebmsed $proc_search_path splitconcpaths`" ;export PROC_SEARCH_PATH

   for dir in `echo $PROC_SEARCH_PATH`
   do
      if [ -f ${dir}/${PROCNAME} ]
      then
         PROCDIR=$dir ; export PROCDIR
         break
      fi
   done

   if [ "a$PROCDIR" = "a" ]
   then
      tmp=`ebmsed $proc_search_path splitconcpaths`;export tmp  
      if [ "a$VERBOSE" = a ]
      then
         print_message EXECPROC "Procedure search path is:"
         echo  ${FILLER}${tmp}
      fi

      print_message EXECPROC "Procedure $PROCNAME not found"
      
      if [ "a$VALIDATE" != "ay" ]
      then
         . set_jobstatus_abort
         ABORT=YES; export ABORT
      fi
   else
      if [ "a$VALIDATE" = "ay" -o "a$VERBOSE" = "aYES" ]
      then
         print_message EXECPROC "Procedure $PROCNAME found in $PROCDIR"
      fi 
   fi

   if [ "a$PROCDIR" != "a" ]
   then
      $PACK/bin/btsh $PUBLIC/bin/execproc.btsh
      CONDCODE=$?  ; export CONDCODE
      if [ $CONDCODE = "0" ] 
      then
         . ${JON}_WK3n
      else
         . ${JON}_WK3a
         . set_jobstatus_abort
      fi

      if [ "a$BATCH_MODE" != "a" ]
      then
         if [ "$BATCH_MODE" != "MVS" ]
         then
            if [ ! -f assgndd.${EBMSYS}.${JON} ]
            then
               cat <$DEVNULL > assgndd.${EBMSYS}.${JON}
            fi
         fi
      fi

      echo " "
      print_message EXECPROC "start at TIME=$STEP_START_TIME"
      STEP_STOP_TIME="`ebmtime`" ; export STEP_STOP_TIME
      print_message EXECPROC "stop  at TIME=$STEP_STOP_TIME"
      echo " "
   fi
else
   print_message EXECPROC "bypassed"
fi

rm -f assgndd.${EBMSYS}.${JON}.${PROC_LEVEL}
rm -f execproc_nullify_pgmprms.${EBMSYS}.${JON}.`expr ${PROC_LEVEL} + 1`
rm -f execproc_pgmparm.${EBMSYS}.${JON}.`expr ${PROC_LEVEL} + 1`
rm -f first_step.${EBMSYS}.${JON}.${PROC_LEVEL}
rm -f label.${EBMSYS}.${JON}.${PROC_LEVEL}

exit 0
