/* REXX */
/* CLS2REXXed by FSOX001 on 19 Jun 2018 at 15:49:25  */
Signal On NoValue
Call On Error
Signal On Failure
Signal On Syntax
Parse source opsys . exec_name .
Address ISREDIT
 
"MACRO"               /* CACM0009 EDIT PARMLIB(IEAFIX* IEALPA*)*/
/*********************************************************************/
/* 06/15/2004 JL.NELSON ADDED EXIT CODE.                             */
/* 12/23/2004 JL.NELSON IKJ79075I System variable SYSSYMDEF failed   */
/*            RC=8.                                                  */
/* 01/25/2005 JL.NELSON Ignore comments in PARMLIB.                  */
/* 02/11/2005 JL.NELSON Changed constants to variables before        */
/*            rename.                                                */
/* 03/02/2005 JL.NELSON ADDED PDIERROR for return condition.         */
/* 03/09/2005 JL.NELSON Changed LMMREP to LMMADD/LMMREP to avoid     */
/*            errors.                                                */
/* 04/21/2005 JL.NELSON Added LPA message for new PDI.               */
/* 06/09/2005 JL.NELSON Pass MAXCC in ZISPFRC variable.              */
/* 06/15/2005 JL.NELSON Set return code to end job step.             */
/* 06/16/2005 JL.NELSON Changed to display the real LISTDSI error    */
/*            msg.                                                   */
/* 06/16/2005 JL.NELSON Modified to test sysreason for LISTDSI       */
/*            command.                                               */
/* 06/23/2005 JL.NELSON Modified for IEALPA LIBRARY(dsname)          */
/*            VOLUME(vol).                                           */
/* 09/26/2005 JL.NELSON SYSSYMDEF check to end with a period or      */
/*            ")".                                                   */
/* 10/17/2005 JL.NELSON IKJ79075I SYSSYMDEF rc=8 maxcc=624 length    */
/*            gt 8.                                                  */
/* 10/18/2005 JL.NELSON Added code to debug syssymdef errors.        */
/* 03/06/2006 JL.NELSON Made changes to avoid SUBSTR abend 920/932.  */
/* 03/09/2006 JL.NELSON Set/test RCode for every ISPEXEC command.    */
/* 03/20/2006 JL.NELSON Use NRSTR avoid abend 900 if ampersand in    */
/*            data.                                                  */
/* 03/29/2006 JL.NELSON Test for empty member LINENUM Rcode = 4.     */
/* 04/11/2006 JL.NELSON Replace & with ? if varible length > 8.      */
/* 05/09/2006 JL.NELSON Avoid RC 20 on ISREDIT LINE when " or ' in   */
/*            data.                                                  */
/* 03/05/2007 CL.FENTON Added process for logical parmlibs.          */
/* 09/22/2009 CL.FENTON Added REMOVE_COMMENTS to remove comments     */
/*            from various member.  Modification made remove comment */
/*            logic from other parts of this member, also chgs to    */
/*            symbolic process.                                      */
/* 04/26/2011 CL.FENTON Corrected symbolic change by changing both   */
/*            %&NAME.. and %&NAME to &NAME2.                         */
/* 06/19/2018 CL.FENTON Converted script from CLIST to REXX.         */
/*            Also prevented IKJ56709I from being displayed when     */
/*            the LISTDSI function is issued.                        */
/* 04/08/2019 CL.FENTON Correct issue with LISTDSI by stripping      */
/*            spaces from dataset entries, STS-022062.               */
/*                                                                   */
/*                                                                   */
/*                                                                   */
/*                                                                   */
/*********************************************************************/
pgmname = "CACM0009 04/08/19"
sysprompt = "OFF"                /* CONTROL NOPROMPT          */
sysflush  = "OFF"                /* CONTROL NOFLUSH           */
sysasis   = "ON"                 /* CONTROL ASIS - caps off   */
/*******************************************/
/* VARIABLES ARE PASSED TO THIS MACRO      */
/* CONSLIST                                */
/* COMLIST                                 */
/* SYMLIST                                 */
/* TERMMSGS                                */
/*******************************************/
 
Address ISPEXEC "CONTROL NONDISPL ENTER"
Address ISPEXEC "CONTROL ERRORS RETURN"
return_code = 0
Address ISPEXEC "VGET (CONSLIST COMLIST SYMLIST TERMMSGS MBRMSG",
  "CACM040A TEMP8 MEMBER PARMDSN PDIDD PDINAME) ASIS"
cm09vget = return_code
If return_code <> 0 then do
  Say pgmname "VGET RC =" return_code zerrsm
  Say pgmname "CONSLIST/"conslist "COMLIST/"comlist "SYMLIST/"symlist,
    "TERMMSGS/"termmsgs
  Say pgmname "MBRMSG/"mbrmsg "CACM040A/"cacm040a "TEMP8/"temp8,
    "MEMBER/"member
  Say pgmname "PDIDD/"pdidd "PDINAME/"pdiname
  return_code = return_code + 16
  SIGNAL ERR_EXIT
  End
 
If CONSLIST = "ON" | COMLIST = "ON" | SYMLIST = "ON" ,
  then Trace r
 
maxcc       = 0
return_code = 0
/*******************************************/
/* TURN ON MESSAGES                        */
/*******************************************/
syssymlist = symlist          /* CONTROL SYMLIST/NOSYMLIST */
sysconlist = conslist         /* CONTROL CONLIST/NOCONLIST */
syslist    = comlist          /* CONTROL LIST/NOLIST       */
sysmsg     = termmsgs         /* CONTROL MSG/NOMSG         */
/*******************************************/
/* MAIN PROCESS                            */
/*******************************************/
vmember = member
"(MEMBER) = MEMBER"
"(DSNAME) = DATASET"
"NUMBER = OFF"
"AUTONUM = OFF"
return_code = 0
"(LASTLINE) = LINENUM .ZLAST"
If return_code > 0 then do
  If lastline = 0 then,
    Say pgmname "Empty file RCode =" return_code "DSN="dsname,
      "MEMBER="member zerrsm
  Else,
    Say pgmname "LINENUM Error RCode =" return_code "DSN="dsname,
      "MEMBER="member zerrsm
  SIGNAL ERR_EXIT
  end
bc = "/*"
modify = ""
Address TSO "PROFILE NOPREFIX"
lp = "("
rp = ")"
row = 1
col = 0
 
 
PRE_LOOP:
"CHANGE ALL X'50' X'6C'"         /* CHANGE ALL '&' '%' */
do forever
  return_code = 0
  "CURSOR =" row col
  "FIND X'6C'"     /* FIND '%' */
 
  If return_code > 0 then leave
 
  "(ROW,COL) = CURSOR"
  "(DATA) = LINE" row
  strt = col + 1
  endx = length(data)
  end1 = pos(" ",data,col)-1
 
  parse var data =(strt) temp .
  If temp = "" then iterate
 
  x = pos(".",temp)
  If x > 2 then
    parse var temp temp "."
  x = pos(",",temp)
  If x > 2 then,
    parse var temp temp ","
  x = pos("'",temp)
  If x > 2 then,
    parse var temp temp "'"
  x = pos('"',temp)
  If x > 2 then
    parse var temp temp '"'
  x = pos("%",temp)
  If x > 2 then
    parse var temp temp "%"
  x = pos(lp,temp)
  If x > 2 then
    parse var temp temp (lp) .
  x = pos(rp,temp)
  If x > 2 then
    parse var temp temp (rp) .
  If temp <> "" then do
    name = strip(temp,"b")
    return_code = 0
    save_maxcc = maxcc
    name2 = mvsvar('SYMDEF',name)
    If return_code > 4 then do
      Say pgmname member "NAME =" name "DATA =" data
      maxcc = save_maxcc
      end
    If return_code = 0 & name2 <> " " then do
      "CHANGE ALL '%"name".' '"name2"'"
      "CHANGE ALL '%"name"' '"name2"'"
      end
    end
  end
"CHANGE ALL X'6C' X'50'"         /* CHANGE ALL '%' '&' */
NEXT_1:
return_code = 0
counter = 0
nr = 0
src. = ""
 
 
MAIN:
do counter = 1 to lastline
  return_code = 0
  "(DATA) = LINE" counter
  parse var data data "/*" .
  If substr(data,1,1) = "*" then iterate
  If data = " " then iterate
  data = strip(data,"b")
  If pos("INCLUDE ",data) > 0 then do
    nr = nr + 1
    src.nr = data
    iterate
    end
  src.nr = src.nr data
  end
src.0 = nr
do x = 1 to src.0
  parse var src.x . "LIBRARY(" dataset ")" .
  parse var src.x . "VOLUME(" vol ")" .
  If dataset = " " then iterate
  dataset = strip(dataset,"B")
 
 
LIST_DATA:
  return_code = 0
  If pos("/",dataset) > 0 then iterate
  msg = msg('OFF')
  If vol <> " " then,
    lst = listdsi("'"dataset"'" "VOLUME("vol")")
  Else,
    lst = listdsi("'"dataset"'")
  msg = msg(msg)
  If sysreason = 0 then iterate
  vol = left(vol,6)
  dataset = left(dataset,44)
  If mbrmsg = "ON" then,
    Say pgmname member "Dsn="dataset "Vol="vol "Sr="sysreason
  reason = sysmsglvl2
  If sysreason = 1 & pos("&",dataset) > 0 then do
    reason = "IKJ58401I INVALID DATASET NAME, SYMDEF not defined",
      "or is invalid"
    end
  If sysreason = 24 & vol <> " " then
      reason = "IKJ58424I DATA SET NOT FOUND ON VOLUME" vol
  If sysreason > 0 then do
    If modify <> "YES" then do
      ac = "The following non-existent inaccessible LPA",
        "library(ies) were found:"
      return_code = 0
      Address ISPEXEC "LMPUT DATAID("temp8") MODE(INVAR) DATALOC(AC)",
        "DATALEN("length(ac)") MEMBER("vmember")"
      If return_code <> 0 then do
        Say pgmname "LMPUT TEMP8" vmember "RC =" return_code zerrsmm
        return_code = return_code + 16
        SIGNAL ERR_EXIT
        end
      ac = " "
      return_code = 0
      Address ISPEXEC "LMPUT DATAID("temp8") MODE(INVAR) DATALOC(AC)",
        "DATALEN("length(ac)") MEMBER("vmember")"
      If return_code <> 0 then do
        Say pgmname "LMPUT TEMP8" vmember "RC =" return_code zerrsm
        return_code = return_code + 16
        SIGNAL ERR_EXIT
        end
      ac = "     "parmdsn"("vmember")"
      return_code = 0
      Address ISPEXEC "LMPUT DATAID("temp8") MODE(INVAR) DATALOC(AC)",
        "DATALEN("length(ac)") MEMBER("vmember")"
      If return_code <> 0 then do
        Say pgmname "LMPUT TEMP8" vmember "RC =" return_code zerrsm
        return_code = return_code + 16
        SIGNAL ERR_EXIT
        end
      end
    ac = "          "dataset" "vol" "reason
    return_code = 0
    Address ISPEXEC "LMPUT DATAID("temp8") MODE(INVAR) DATALOC(AC)",
      "DATALEN("length(ac)") MEMBER("vmember")"
    If return_code <> 0 then do
      Say pgmname "LMPUT TEMP8" vmember "RC =" return_code zerrsm
      return_code = return_code + 16
      SIGNAL ERR_EXIT
      end
    modify = "YES"
    pdierror = 8
    If pdiname <> " " then do
      Address ISPEXEC "VPUT (AC PDIERROR) ASIS"
      return_code = 0
      Address ISPEXEC "EDIT DATAID("pdidd") MACRO("cacm040a")",
        "MEMBER("pdiname")"
      If return_code > 4 then do
        Say pgmname "EDIT PDI" pdiname  "RC =" return_code zerrsm
        return_code = return_code + 16
        SIGNAL ERR_EXIT
        end
      end
    end
  end
 
/*******************************************/
/* END PROCESSES                           */
/*******************************************/
 
 
END_EDIT:
return_code = 0
If modify = "YES" then do
  return_code = 0
  Address ISPEXEC "LMMADD DATAID("temp8") MEMBER("vmember")"
  If return_code = 4 then do
    return_code = 0
    Address ISPEXEC "LMMREP DATAID("temp8") MEMBER("vmember")"
    If return_code <> 0 then,
      Say pgmname "LMMREP_TEMP8_RCODE =" return_code vmember zerrsm
    end
  Else do
    If return_code <> 0 then,
      Say pgmname "LMMADD_TEMP8_RCODE =" return_code vmember zerrsm
      end
  end
 
 
END_EXIT:
return_code = 0
 
 
ERR_EXIT:
If maxcc > 16 | return_code > 0 then do
  Address ISPEXEC "VGET (ZISPFRC) SHARED"
  If maxcc > zispfrc then,
    zispfrc = maxcc
  Else,
    zispfrc = return_code
  Address ISPEXEC "VPUT (ZISPFRC) SHARED"
  Say pgmname "ZISPFRC =" zispfrc
  end
cm009rc = return_code
Address ISPEXEC "VPUT (CM09VGET CM009RC) ASIS"
"END"
Exit 0
 
 
NoValue:
Failure:
Syntax:
say pgmname 'REXX error' rc 'in line' sigl':' strip(ERRORTEXT(rc))
say SOURCELINE(sigl)
SIGNAL ERR_EXIT
 
 
Error:
return_code = RC
if RC > 4 & RC <> 8 then do
  say pgmname "LASTCC =" RC strip(zerrlm)
  say pgmname 'REXX error' rc 'in line' sigl':' ERRORTEXT(rc)
  say SOURCELINE(sigl)
  end
if return_code > maxcc then
  maxcc = return_code
return
 
 
