/* REXX */
/* CLS2REXXed by UMLA01S on 22 Sep 2020 at 15:07:14  */
/*Trace ?r*/
Signal On NoValue
Call On Error
Signal On Failure
Signal On Syntax
Parse source opsys . exec_name .
 
/*********************************************************************/
/* 11/03/2005 CL Fenton Moved ALLOC for SYSPRINT to JCL.             */
/* 11/03/2005 CL Fenton Removed information checks for SYSPRINT      */
/*            ALLOC.                                                 */
/* 04/25/2006 CL Fenton Added information on checking on use of      */
/*            BACKUP or PRIMARY Security Database.                   */
/* 06/06/2006 C Stern Updated ERROR ROUTINE.                         */
/* 09/21/2006 CL Fenton Updated CLASMAP for MERGED CLASMAP to        */
/*            determine, if resource is internal or external.        */
/*            Changes made for all write statements.                 */
/* 05/17/2010 CL Fenton Changes made in the collection of SHOW       */
/*            CLASMAP output from V12 to V14 of ACF2.                */
/* 04/02/2010 CL Fenton Changes SYSUT2 TRACKS to CYLINDERS.          */
/* 09/22/2020 CL Fenton Converted script from CLIST to REXX.         */
/* 07/28/2021 CL Fenton Chgs made to ERROR variables being marked    */
/*            as N/A.                                                */
/* 10/17/2025 CL Fenton Changed output for error codes.              */
/*                                                                   */
/*                                                                   */
/*                                                                   */
/*********************************************************************/
pgmname = "CAAC0002 10/17/25"
CONSLIST = "OFF"                  /* DEFAULT IS OFF                  */
COMLIST  = "OFF"                  /* DEFAULT IS OFF                  */
SYMLIST  = "OFF"                  /* DEFAULT IS OFF                  */
TERMMSGS = "OFF"                  /* DEFAULT IS OFF                  */
sysflush = 'OFF'
CAAC1000 = "CAAC1000"             /* Edit macro for CAAC1000         */
CAAT0001 = "CAAT0001"             /* Edit macro for CAAT0001         */
CAAM0004 = "CAAM0004"             /* Edit macro for CAAM0004         */
CAAM0005 = "CAAM0005"             /* Edit macro for CAAM0005         */
TRACE    = "OFF"                  /* TRACE ACTIONS AND ERRORS        */
sysprompt = "OFF"                 /* CONTROL NOPROMPT                */
sysflush = "OFF"                  /* CONTROL NOFLUSH                 */
sysasis = "ON"                    /* CONTROL ASIS - caps off         */
Numeric digits 10                 /* default of 9 not enough         */
maxcc = 0
init_output_error  = "N/A"
init_cntl_error    = "N/A"
open_output_error  = "N/A"
vput_1_error       = "N/A"
vput_2_error       = "N/A"
edit_cntl_error    = "N/A"
am4vge             = "N/A"
vget_error         = "N/A"
close_output_error = "N/A"
 
Arg OPTION
do until OPTION = ""
  parse var OPTION key"("val")" OPTION
  val = strip(val,"b","'")
  val = strip(val,"b",'"')
  optcmd = key '= "'val'"'
  interpret optcmd
  end
 
return_code = 0
If trace = "ON" then do            /* TURN messages on          */
  termmsgs = "ON"                  /* CONTROL MSG               */
  comlist = "ON"                   /* CONTROL LIST              */
  conslist = "ON"                  /* CONTROL CONLIST           */
  symlist = "ON"                   /* CONTROL SYMLIST           */
  end
 
If CONSLIST = "ON" | COMLIST = "ON" | SYMLIST = "ON" | TRACE = "ON",
  then Trace ?r
 
syssymlist = symlist          /* CONTROL SYMLIST/NOSYMLIST */
sysconlist = conslist         /* CONTROL CONLIST/NOCONLIST */
syslist = comlist             /* CONTROL LIST/NOLIST       */
sysmsg = termmsgs             /* CONTROL MSG/NOMSG         */
Address ISPEXEC
"CONTROL NONDISPL ENTER"
"CONTROL ERRORS RETURN"
zispfrc = 0
"VPUT (ZISPFRC) SHARED"
return_code = 0                 /* SET RETURN CODE TO 0 */
old_resource = "               "
uidstr = "UID("
 
 
/*******************************************/
/* INITIALIZE LIBRARY MANAGEMENT           */
/*******************************************/
LIBRARY_INITIALIZE:
Address TSO "ALLOC FI(SYSUT1) NEW DELETE UNIT(SYSDA) SPACE(15 15)",
  "TRACKS"
Address TSO "ALLOC FI(SYSUT2) NEW DELETE UNIT(SYSDA) SPACE(15 15)",
  "CYLINDERS"
 
return_code = 0
"LMINIT DATAID(OUTPUT) DDNAME(REPORT)"
init_output_error = return_code
If return_code <> 0 then do
  SIGNAL ERR_EXIT     /* EXIT */
  end
 
return_code = 0
"LMINIT DATAID(CNTL) DDNAME(CNTL)"
init_cntl_error = return_code
If return_code <> 0 then do
  SIGNAL ERR_EXIT     /* EXIT */
  end
 
return_code = 0
"LMOPEN DATAID("output") OPTION(OUTPUT)"
open_output_error = return_code
If return_code <> 0 then do
  SIGNAL ERR_EXIT     /* EXIT */
  end
 
return_code = 0
"VPUT (OUTPUT CONSLIST COMLIST SYMLIST TERMMSGS) ASIS"
vput_1_error = return_code
If return_code <> 0 then do
  SIGNAL ERR_EXIT     /* EXIT */
  end
 
resource = ""
type = "I"
 
x = outtrap("out.")
 
queue "SHOW CL"
queue "QUIT"
Address TSO "ACF"
 
Do X = 1 to out.0
  data = strip(out.x,"B")
  If substr(data,1,12) = "-- MERGED CL" then,
    merge = "Y"
  If substr(data,1,12) = "-- EXTERNAL" then,
    type = "E"
  b = length(data)
  If merge = "Y" & b >= 50 then,
    If pos(" EXT",data) > 50 then,
      type = "E"
    Else,
      type = "I"
  If b > 33 then do
    c = substr(data,30,6)
    If pos("=",c) = 0 then,
      c = strip(c,"B")
    If datatype(c) = "NUM" then do
      c = substr(data,12,15)type
      If pos(" "c,resource) = 0 then do
        xx = pos(substr(" "c,1,9),resource)
        If xx = 0 then,
          resource = resource" "c
        Else,
          If xx = 1 then,
            resource = " "c""resource
          Else,
            resource = substr(resource,1,xx-1)" "c""substr(resource,xx)
        end
      end
    end
  end
 
return_code = 0
"VPUT (RESOURCE) ASIS"
vput_2_error = return_code
If return_code > 0 then do
  SIGNAL ERR_EXIT     /* EXIT */
  end
 
return_code = 0
"EDIT DATAID("cntl") MACRO("caam0004") MEMBER("caat0001")"
edit_cntl_error = return_code
If return_code > 4 then do
  SIGNAL ERR_EXIT     /* EXIT */
  end
 
return_code = 0
"VGET (AM4VGE RESOURCE) ASIS"
vget_error = return_code
If return_code > 0 then do
  SIGNAL ERR_EXIT     /* EXIT */
  end
 
return_code = 0
/*******************************************/
/* ALLOCATE ALTERNATE ACF2 DATABASE FILES  */
/*******************************************/
"SELECT CMD("caac1000")"
"VGET (PARMACF) ASIS"
return_code = 0
Do x = 1 to length(resource) by 13
  parse var resource . =(x) c +13 .
  c = strip(c,"L")
  d = substr(c,9,3)
  If old_resource = c then iterate x
  return_code = 0
  If old_resource <> " " &,
    substr(old_resource,1,8) <> substr(c,1,8) then do
    parse var old_resource a 9 b
    a = strip(a,"T")
    "LMMREP DATAID("output") MEMBER("a")"
    If return_code > 8 then,
      lmmrep_error = return_code
    Else,
      lmmrep_error = 0
    If termmsgs = "ON" then,
      Say pgmname "LMMREP_ERROR                     " lmmrep_error
    end
 
  return_code = 0
  If d = "SAF" then,
    "SELECT PGM(ACFRPTXR) PARM('"parmacf "TYPE("d") NAME(-)",
      "NOLID RSRC NORRSUM')"
  Else
    "SELECT PGM(ACFRPTXR) PARM('"parmacf "TYPE("d") NAME(-) LID",
      "RSRC NORRSUM')"
  exec_acftrpxr_error = return_code
 
  return_code = 0
  "LMINIT DATAID(SYSPRINT) DDNAME(SYSPRINT)"
  init_sysprint_error = return_code
 
  return_code = 0
  "EDIT DATAID("sysprint") MACRO("caam0005")"
  If return_code > 4 then,
    edit_sysprint_error = return_code
  Else,
    edit_sysprint_error = 0
 
  return_code = 0
  "LMFREE DATAID("sysprint")"
  free_sysprint_error = return_code
  "VGET (AM5VGE AM5LMP) ASIS"
  If termmsgs = "ON" then do
    Say "==============================================================="
    Say pgmname "RESOURCE:" substr(c,1,8) "TYPE("substr(c,9,3)")"
    Say pgmname "EXEC_ACFTRPXR_ERROR              " exec_acftrpxr_error
    Say pgmname "INIT_SYSPRINT_ERROR              " init_sysprint_error
    Say pgmname "EDIT_SYSPRINT_ERROR              " edit_sysprint_error
    Say pgmname caam0005 "AM5VGE                  " am5vge
    Say pgmname caam0005 "AM5LMP                  " am5lmp
    Say pgmname "FREE_SYSPRINT_ERROR              " free_sysprint_error
    end
  old_resource = c
  end
 
"LMMREP DATAID("output") MEMBER("strip(left(old_resource,8),"T")")"
If return_code > 8 then,
  lmmrep_error = return_code
Else,
  lmmrep_error = return_code
If termmsgs = "ON" then,
  Say pgmname "LMMREP_ERROR                     " lmmrep_error
 
/*******************************************/
/* CLOSE OUTPUT                            */
/*******************************************/
return_code = 0
"LMCLOSE DATAID("output")"
close_output_error = return_code
 
 
ERR_EXIT:
If maxcc >= 16 | return_code > 0 then do
  "VGET (ZISPFRC) SHARED"
  If maxcc > zispfrc then,
    zispfrc = maxcc
  Else,
    zispfrc = return_code
  "VPUT (ZISPFRC) SHARED"
  Say pgmname "ZISPFRC =" zispfrc
  end
 
If termmsgs = "ON" then do
  Say "==============================================================="
  Say pgmname "INIT_OUTPUT_ERROR                 "init_output_error
  Say pgmname "INIT_CNTL_ERROR                   "init_cntl_error
  Say pgmname "OPEN_OUTPUT_ERROR                 "open_output_error
  Say pgmname "VPUT_1_ERROR                      "vput_1_error
  Say pgmname "VPUT_2_ERROR                      "vput_2_error
  Say pgmname "EDIT_CNTL_ERROR                   "edit_cntl_error
  Say pgmname caam0004 "AM4VGE                   "am4vge
  Say pgmname "VGET_ERROR                        "vget_error
  Say pgmname "CLOSE_OUTPUT_ERROR                "close_output_error
  Say "==============================================================="
  end
Exit 0
 
 
/*******************************************/
/*  SYSCALL SUBROUTINES                    */
/*******************************************/
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
 
 
