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


########################################################################
#                                                                      #
# EBM BATCH JOB MACRO :     LIBDEF                                     #
# Purpose             :     Define a search path for program           #
#                           executables and/or procedures.             #
#                                                                      #
########################################################################
. verify_jobstatus
. beginjob.${EBMSYS}.${JON}
. current_proc_level.${EBMSYS}.${JON}

ABORT=NO; export ABORT
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

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}
else
   cat <$DEVNULL > setparm.${EBMSYS}.${JON}.${PROC_LEVEL}
   chmod 755 setparm.${EBMSYS}.${JON}.${PROC_LEVEL}
fi

FILLER="                         "; export FILLER

for argument in $*
do
  i=`eval echo $argument`
  case $i in
    catalog=*|CATALOG=*|cat=*|CAT=*)
       CATALOG="`eval echo $i|cut -f2 -d'='`"
       export CATALOG
    ;;
    concatenate=*|CONCATENATE=*|concat=*|CONCAT=*)
       CONCAT="`eval echo $i|cut -f2 -d'='`"
       export CONCAT
       CONCAT="`echo $CONCAT | tr '[a-z]' '[A-Z]'`"  ; export CONCAT
    ;;
    lib=*|LIB=*|library=*|LIBRARY=*)
       case $EBM_OS_NAME in
          NT)
             LIB="`ebmsed $i|cut -f2 -d'='`"
             export LIB
          ;;
          *)
             LIB="`eval echo $i|cut -f2 -d'='`"
             export LIB
          ;;
       esac

    ;;
    dsn=*|dataset=*|datasetname=*|DSN=*|DATASET=*|DATASETNAME=*)
       case $EBM_OS_NAME in
          NT)
             DATASET="`ebmsed $i|cut -f2 -d'='`"
             export LIB
          ;;
          *)
             DATASET="`eval echo $i|cut -f2 -d'='`"
             export DATASET
          ;;
       esac

    ;;
    scope=*|SCOPE=*)
       scope="`eval echo $i|cut -f2 -d'='`"
       export scope
       SCOPE="`echo $scope | tr '[a-z]' '[A-Z]'`"; export SCOPE
    ;;
    type=*|TYPE=*)
       save_type="`eval echo $i|cut -f2 -d'='`"
       export save_type
       SAVE_TYPE="`echo $save_type | tr '[a-z]' '[A-Z]'`"; export SAVE_TYPE
    ;;
    verbose|VERBOSE)
      VERBOSE=YES
      export VERBOSE
      ;;
    *)
      print_message LIBDEF "ERROR   invalid parameter specified :   $i" 
    ;;
  esac
done

if [ "a$VERBOSE" = "aYES" ]
then
   echo " "
   print_message LIBDEF "----------Starting in verbose mode----------"
fi

if [ "a$SCOPE" != "a" ]
then
   case $SCOPE in
      JOB)
      ;;
      STEP)
      ;;
      *)
         print_message LIBDEF "ERROR   invalid syntax: scope=$SCOPE"
         . set_jobstatus_abort
         ABORT=YES; export ABORT
      ;;
   esac
else
   SCOPE=JOB; export SCOPE
   if [ "a$VERBOSE" = "aYES" ]
   then
      if [ "$BATCH_MODE" = "MVS" ]
      then
         print_message LIBDEF "WARNING scope defaults to: JOB"
      fi
   fi
fi

if [ "a$CONCAT" = "a" ]
then
   CONCAT=N; export CONCAT
fi

case $CONCAT in
   Y|YES)
      CONCAT=Y; export CONCAT
   ;;
   N|NO)
      CONCAT=N; export CONCAT
   ;;
   *)
      print_message LIBDEF "ERROR   invalid syntax: concatenate=$CONCAT"
      . set_jobstatus_abort
      ABORT=YES; export ABORT
   ;;
esac

if [ "a$SAVE_TYPE" != "a" ]
then
   case $SAVE_TYPE in
      CAT)
         if [ "a$CATALOG" = "a" ]
         then
            print_message LIBDEF "ERROR   invalid syntax: type=CAT requires the catalog option"
            . set_jobstatus_abort
            ABORT=YES; export ABORT
         fi
      ;;
      PGM|PROC|PGM,PROC)
         if [ "a$LIB" = "a" -a "$DATASET" = "a" ]
         then
            print_message LIBDEF "ERROR   invalid syntax: type=$SAVE_TYPE requires requires lib or dataset option"
            . set_jobstatus_abort
            ABORT=YES; export ABORT
         else
            if [ "a$LIB" = "a" ]
            then
               tmp_lib=`$PACK/bin/ftval "$DATASET" "__LIB" 4  2> $DEVNULL`
               tmp_rc=$?;export tmp_rc
               export tmp_lib
               if [ $tmp_rc -ne 0 -o "a$tmp_lib" = "a" ]
               then
                  echo " "
                  print_message LIBDEF "ERROR   unable to retrieve filename from File_Map for dataset=$DATASETNAME"
                  . set_jobstatus_abort
                  ABORT=YES; export ABORT
                  echo " "
               else
                  LIB=$tmp_lib; export LIB
               fi
            fi
         fi
      ;;
      *)
         print_message LIBDEF "ERROR   invalid syntax: type=$SAVE_TYPE"
         . set_jobstatus_abort
         ABORT=YES; export ABORT
      ;;
   esac
else  
   print_message LIBDEF "ERROR   invalid syntax: type is required"
   . set_jobstatus_abort
   ABORT=YES; export ABORT
fi

if [ "a$ABORT" = "aYES" ]
then
   exit 0
fi

for t in `echo $SAVE_TYPE|sed 's/,/ /g'`
do 
   TYPE=`echo $t|cut -f1 -d' '`    
   export TYPE

   LIBTYPE="`echo $TYPE | tr '[A-Z]' '[a-z]'`"; export LIBTYPE
   LIBSCOPE="`echo $SCOPE | tr '[A-Z]' '[a-z]'`"; export LIBSCOPE

   if [ "$CONCAT" != "Y" ]
   then
     if [ -f libdef_${LIBTYPE}_${LIBSCOPE}.${EBMSYS}.${JON} ]
     then
        cat <$DEVNULL > libdef_${LIBTYPE}_${LIBSCOPE}.${EBMSYS}.${JON}
        chmod 775 libdef_${LIBTYPE}_${LIBSCOPE}.${EBMSYS}.${JON}
     fi
   fi

   #------------------------------------------------------------------------
   case $CONCAT in 
      N)
         #-------------------------------------------------------------------
         case $LIBTYPE in
         #-------------------------------------------------------------------
         cat)
            if [ "$SCOPE" = "JOB" ]
            then
               echo "JOB_CAT=$CATALOG; export JOB_CAT"  >> libdef_${LIBTYPE}_${LIBSCOPE}.${EBMSYS}.${JON}
            else 
               echo "STEP_CAT=$CATALOG; export STEP_CAT"  >> libdef_${LIBTYPE}_${LIBSCOPE}.${EBMSYS}.${JON}
            fi
            LIBDEF_FILE=libdef_${LIBTYPE}_${LIBSCOPE}.${EBMSYS}.${JON};export LIBDEF_FILE
         ;;
         #-------------------------------------------------------------------
         pgm)
            if [ "$SCOPE" = "JOB" ]
            then
               echo "JOBLIB=$LIB; export JOBLIB" >> libdef_${LIBTYPE}_${LIBSCOPE}.${EBMSYS}.${JON}
            else
               echo "STEPLIB=$LIB; export STEPLIB" >> libdef_${LIBTYPE}_${LIBSCOPE}.${EBMSYS}.${JON}
            fi
            LIBDEF_FILE=libdef_${LIBTYPE}_${LIBSCOPE}.${EBMSYS}.${JON};export LIBDEF_FILE
         ;;
         #-------------------------------------------------------------------
         proc)
            if [ "$SCOPE" = "JOB" ]
            then
               echo "JOBPROCPATH=$LIB; export JOBPROCPATH" >> libdef_${LIBTYPE}_${LIBSCOPE}.${EBMSYS}.${JON}
            else
               echo "STEPROCPATH=$LIB; export STEPROCPATH" >> libdef_${LIBTYPE}_${LIBSCOPE}.${EBMSYS}.${JON}
            fi
            LIBDEF_FILE=libdef_${LIBTYPE}_${LIBSCOPE}.${EBMSYS}.${JON};export LIBDEF_FILE
         ;;
         #------------------------------------------------------------------
         *)
            TYPE="`echo $LIBTYPE | tr '[A-Z]' '[a-z]'`"; export TYPE
            print_message LIBDEF "ERROR   invalid syntax: type=$TYPE"
            . set_jobstatus_abort
            ABORT=YES; export ABORT
         ;;
         esac #END case LIBTYPE
      ;;

      Y) 
      #----------------------------------------------------------------------
      #  CONCATENATE
      #----------------------------------------------------------------------
         case $LIBTYPE in
         #-------------------------------------------------------------------
         cat)
         #-------------------------------------------------------------------
            print_message LIBDEF "WARNING the concatenate option is not supported for type=CAT in the current version"
         ;;
         #-------------------------------------------------------------------
         pgm)
         #-------------------------------------------------------------------
            if [ "$SCOPE" = "JOB" ]
            then
               if [ ! -f libdef_${LIBTYPE}_${LIBSCOPE}.${EBMSYS}.${JON} ]
               then
                  cat <$DEVNULL > libdef_${LIBTYPE}_${LIBSCOPE}.${EBMSYS}.${JON}
                  chmod 775 libdef_${LIBTYPE}_${LIBSCOPE}.${EBMSYS}.${JON}
                  echo "JOBLIB=''; export JOBLIB" >> libdef_${LIBTYPE}_${LIBSCOPE}.${EBMSYS}.${JON}
               fi
               echo "JOBLIB=\$JOBLIB:$LIB; export JOBLIB"  >> libdef_${LIBTYPE}_${LIBSCOPE}.${EBMSYS}.${JON}
            else 
               if [ ! -f libdef_${LIBTYPE}_${LIBSCOPE}.${EBMSYS}.${JON} ]
               then
                  cat <$DEVNULL > libdef_${LIBTYPE}_${LIBSCOPE}.${EBMSYS}.${JON}
                  chmod 775 libdef_${LIBTYPE}_${LIBSCOPE}.${EBMSYS}.${JON}
                  echo "STEPLIB=''; export STEPLIB"  >> libdef_${LIBTYPE}_${LIBSCOPE}.${EBMSYS}.${JON}
               fi
               echo "STEPLIB=\$STEPLIB:$LIB; export STEPLIB"  >> libdef_${LIBTYPE}_${LIBSCOPE}.${EBMSYS}.${JON}
            fi
            LIBDEF_FILE=libdef_${LIBTYPE}_${LIBSCOPE}.${EBMSYS}.${JON};export LIBDEF_FILE
         ;;
         #-------------------------------------------------------------------
         proc)
         #-------------------------------------------------------------------
            if [ "$SCOPE" = "JOB" ]
            then
               if [ ! -f libdef_${LIBTYPE}_${LIBSCOPE}.${EBMSYS}.${JON} ]
               then
                  cat <$DEVNULL > libdef_${LIBTYPE}_${LIBSCOPE}.${EBMSYS}.${JON}
                  chmod 775 libdef_${LIBTYPE}_${LIBSCOPE}.${EBMSYS}.${JON}
                  echo "JOBPROCPATH=''; export JOBPROCPATH" >> libdef_${LIBTYPE}_${LIBSCOPE}.${EBMSYS}.${JON}
               fi
               echo "JOBPROCPATH=\$JOBPROCPATH:$LIB; export JOBPROCPATH"  >> libdef_${LIBTYPE}_${LIBSCOPE}.${EBMSYS}.${JON}
            else 
               if [ ! -f libdef_${LIBTYPE}_${LIBSCOPE}.${EBMSYS}.${JON} ]
               then
                  cat <$DEVNULL > libdef_${LIBTYPE}_${LIBSCOPE}.${EBMSYS}.${JON}
                  chmod 775 libdef_${LIBTYPE}_${LIBSCOPE}.${EBMSYS}.${JON}
                  echo "STEPROCPATH=''; export STEPROCPATH"  >> libdef_${LIBTYPE}_${LIBSCOPE}.${EBMSYS}.${JON}
               fi
               echo "STEPROCPATH=\$STEPROCPATH:$LIB; export STEPROCPATH"  >> libdef_${LIBTYPE}_${LIBSCOPE}.${EBMSYS}.${JON}
            fi
            LIBDEF_FILE=libdef_${LIBTYPE}_${LIBSCOPE}.${EBMSYS}.${JON};export LIBDEF_FILE
         ;;
         #-------------------------------------------------------------------
         *)
         #-------------------------------------------------------------------
         ;;
         esac #END case LIBTYPE
      ;;
   esac #END case CONCAT
   #------------------------------------------------------------------------
  
   if [ "a$ABORT" = "aYES" ]
   then
      exit 0
   fi

   if [ "a$VERBOSE" = "aYES" ]
   then
      
      print_message LIBDEF "scope=$SCOPE type=$TYPE"
      if [ "$TYPE" = "CAT" ]
      then
         print_message LIBDEF "catalog=$CATALOG"
      else
         case $EBM_OS_NAME in
            NT)
               SEARCH_PATH="`ebmsed $LIB splitconcpaths`";export SEARCH_PATH
            ;;
            *)
               SEARCH_PATH="`echo $LIB|sed 's/:/ /g'`";export SEARCH_PATH
            ;;
         esac  
         dir_1="yes"; export dir_1 

         for dir in `echo $SEARCH_PATH`
         do
            if [ "$dir_1" = "yes" ]
            then
               echo "${FILLER}lib=$dir"
               dir_1=no; export dir_1
            else
               echo "${FILLER}    ${dir}"
            fi
         done 
      fi
      if [ "$CONCAT" = "Y" ]
      then
         if [ "$CONCAT" = "Y" ]
         then
            print_message LIBDEF "concatenate=Y"
         fi
      fi
   fi
done 

if [ "a$LIBDEF_FILE" != a ]
then
   case $SCOPE in
      JOB)
         grep "rm -f $LIBDEF_FILE" ${JON}_WK4a > $DEVNULL 2>&1
         grep_status=$?
         if [ $grep_status -ne 0 ]
         then 
            echo "rm -f $LIBDEF_FILE" >> ${JON}_WK4a
         fi

         grep "rm -f $LIBDEF_FILE" ${JON}_WK4n > $DEVNULL 2>&1
         grep_status=$?
         if [ $grep_status -ne 0 ]
         then 
            echo "rm -f $LIBDEF_FILE" >> ${JON}_WK4n
         fi
      ;;
      STEP)
         grep "rm -f $LIBDEF_FILE" ${JON}_WK2a > $DEVNULL 2>&1
         grep_status=$?
         if [ $grep_status -ne 0 ]
         then 
            echo "rm -f $LIBDEF_FILE" >> ${JON}_WK2a
         fi

         grep "rm -f $LIBDEF_FILE" ${JON}_WK2n > $DEVNULL 2>&1
         grep_status=$?
         if [ $grep_status -ne 0 ]
         then 
            echo "rm -f $LIBDEF_FILE" >> ${JON}_WK2n
         fi
      ;;
      *)
         print_message LIBDEF "ERROR   invalid syntax: scope=$SCOPE"
         . set_jobstatus_abort
         ABORT=YES; export ABORT
      ;;
   esac
fi
exit 0
