zOs/REXX.O08/CSIOLD
/* copy csi begin ****************************************************/
/*===================================================================*/
csiCla: procedure expose m.
parse arg csiKey
/*===================================================================*/
/*********************************************************************/
/* */
/* PVS CATALOG SEARCHE INTERFACE */
/* */
/* DESCRIPTION: THIS REXX EXEC IS USED TO CALL THE CATALOG */
/* SEARCH INTERFACE IGGCSI00 */
/* (REPLACEMENT FOR THE IDCAMS LISTC) */
/* */
/* INPUT: CSIKEY DSLEVEL TO LOOK FOR */
/* */
/* OUTPUT: CSIDSN.0: NUMBER OF DSN'S RETURNED */
/* CSIDSN.: ARRAY WITH DSN'S */
/* */
/*********************************************************************/
/*********************************************************************/
/* */
/* INITIALIZE THE PARM LIST PASSED TO IGGCSI00 */
/* */
/*********************************************************************/
MODRSNRC = SUBSTR(' ',1,4) /* CLEAR MODULE/RETURN/REASON */
CSIFILTK = SUBSTR(CSIKEY,1,44) /* MOVE FILTER KEY INTO LIST */
CSICATNM = SUBSTR(' ',1,44) /* SET CATALOG NAME */
CSIRESNM = SUBSTR(' ',1,44) /* CLEAR RESUME NAME */
CSIDTYPS = SUBSTR(' ',1,16) /* CLEAR ENTRY TYPES */
CSICLDI = SUBSTR(' ',1,1) /* NO DATA AND INDEX */
CSIRESUM = SUBSTR(' ',1,1) /* CLEAR RESUME FLAG */
CSIS1CAT = SUBSTR(' ',1,1) /* SEARCH THIS CATALOG ONLY */
CSIRESRV = SUBSTR(' ',1,1) /* CLEAR RESERVE CHARACTER */
CSINUMEN = '0003'X /* INIT NUMBER OF FIELDS */
CSIFLD1 = 'DEVTYP ' /* INIT FIELD 1 FOR DEVTYPE */
CSIFLD2 = 'VOLSER ' /* INIT FIELD 2 FOR VOLSER */
CSIFLD3 = 'MGMTCLAS' /* INIT FIELD 2 FOR VOLSER */
/*********************************************************************/
/* */
/* BUILD THE SELECTION CRITERIA FIELDS PART OF PARAMETER LIST */
/* */
/*********************************************************************/
CSIOPTS = CSICLDI || CSIRESUM || CSIS1CAT || CSIRESRV
csi.fi.eld = CSIFILTK || CSICATNM || CSIRESNM || CSIDTYPS || CSIOPTS,
|| CSINUMEN || CSIFLD1 || CSIFLD2 || CSIFLD3
/*********************************************************************/
/* */
/* INITIALIZE AND BUILD WORK ARE OUTPUT PART OF PARAMETER LIST */
/* */
/*********************************************************************/
WORKLEN = 1024
dw.or.kokok = D2C(WORKLEN,4) || COPIES('00'X,WORKLEN-4)
/*********************************************************************/
/* */
/* INITIALIZE WORK VARIABLES */
/* */
/*********************************************************************/
RESUME = 'Y' /* SET RESUME FLAG */
CSIDSN.0 = 0 /* A COUNT OF DSNAMES FILLED */
/*********************************************************************/
/* */
/* SET UP LOOP FOR RESUME (IF A RESUME IS NECESSARY) */
/* */
/*********************************************************************/
DO WHILE RESUME = 'Y' /* UNTIL EOF OF CATALOG READ */
ADDRESS LINKPGM 'IGGCSI00 MODRSNRC csi.fi.eld dw.or.kokok'
RESUME = SUBSTR(csi.fi.eld,150,1) /* GET RESUME FLAG FOR NEXT LOOP */
USEDLEN = C2D(SUBSTR(dw.or.kokok,9,4)) /* GET AMOUNT OF WORK AREA USED */
POS1=15 /* STARTING POSITION */
/********************************************************************/
/* */
/* PROCESS DATA RETURNED IN WORK AREA */
/* */
/********************************************************************/
DO WHILE POS1 < USEDLEN /* UNTIL ALL DATA IS PROCESSED */
IF SUBSTR(dw.or.kokok,POS1+1,1) = '0' THEN /* IF ITS THE CATALOG */
DO
POS1 = POS1 + 50 /* SKIP TO THE END OF IT */
END
ELSE DO /* IF NOT CATALOG */
IF SUBSTR(dw.or.kokok,POS1+1,1) = 'A' THEN /* ONLY PROCESS NVSAM */
DO
CSIDSN.0 = CSIDSN.0 + 1 /* COUNT DSNAMES FILLED */
DSN = SUBSTR(dw.or.kokok,POS1+2,44) /* GET THE DSNAME */
if dsn <> csiKey then
call err 'dsn' dsn '<> csiKey' csiKey
pL = POS1 + 50
L1 = c2d(SUBSTR(dw.or.kokok,PL, 2))
L2 = c2d(SUBSTR(dw.or.kokok,PL+2, 2))
L3 = c2d(SUBSTR(dw.or.kokok,PL+4, 2))
dt = substr(dw.or.kokok, pL+6, l1)
vo = substr(dw.or.kokok, pL+6+l1, l2)
cl = substr(dw.or.kokok, pL+6+l1+l2, l3)
cl = substr(cl, 3, c2d(left(cl, 2)))
if vo = '' then
say err '||| no volume for dsn' dsn
else if vo = 'ARCIVE' then
res = 'arcive'
else if cl <> '' then
res = cl
else if abbrev(vo, 'SHR') then
res = 'SHR'
else
res = 'tape'
if abbrev(res, 'ar') ^= abbrev(dt, '00'x) ,
| abbrev(res, 'ta') ^= abbrev(c2x(left(dt, 1)), '7') ,
| (left(res, 1) >= 'A') ^= abbrev(dt, '30'x) then
say '||| mismatch cl' cl 'vo' vo 'dt' c2x(dt) 'dsn' dsn
return res
END
POS1 = POS1 + 46 /* SKIP TO RECORD END */
POS1 = POS1 + C2D(SUBSTR(dw.or.kokok,POS1,2)) /* ADD CSITOTLN */
END
END
END
RETURN 'notFound' /* RETURN TO INVOKER */
csiClaLi: procedure expose m. csiDsn.
parse arg csiKey
csiKey = csiKey'.**'
/*===================================================================*/
/*********************************************************************/
/* */
/* PVS CATALOG SEARCHE INTERFACE */
/* */
/* DESCRIPTION: THIS REXX EXEC IS USED TO CALL THE CATALOG */
/* SEARCH INTERFACE IGGCSI00 */
/* (REPLACEMENT FOR THE IDCAMS LISTC) */
/* */
/* INPUT: CSIKEY DSLEVEL TO LOOK FOR */
/* */
/* OUTPUT: CSIDSN.0: NUMBER OF DSN'S RETURNED */
/* CSIDSN.: ARRAY WITH DSN'S */
/* */
/*********************************************************************/
/*********************************************************************/
/* */
/* INITIALIZE THE PARM LIST PASSED TO IGGCSI00 */
/* */
/*********************************************************************/
MODRSNRC = SUBSTR(' ',1,4) /* CLEAR MODULE/RETURN/REASON */
CSIFILTK = SUBSTR(CSIKEY,1,44) /* MOVE FILTER KEY INTO LIST */
CSICATNM = SUBSTR(' ',1,44) /* SET CATALOG NAME */
CSIRESNM = SUBSTR(' ',1,44) /* CLEAR RESUME NAME */
CSIDTYPS = SUBSTR(' ',1,16) /* CLEAR ENTRY TYPES */
CSICLDI = SUBSTR(' ',1,1) /* NO DATA AND INDEX */
CSIRESUM = SUBSTR(' ',1,1) /* CLEAR RESUME FLAG */
CSIS1CAT = SUBSTR(' ',1,1) /* SEARCH THIS CATALOG ONLY */
CSIRESRV = SUBSTR(' ',1,1) /* CLEAR RESERVE CHARACTER */
CSINUMEN = '0003'X /* INIT NUMBER OF FIELDS */
CSIFLD1 = 'DEVTYP ' /* INIT FIELD 1 FOR DEVTYPE */
CSIFLD2 = 'VOLSER ' /* INIT FIELD 2 FOR VOLSER */
CSIFLD3 = 'MGMTCLAS' /* INIT FIELD 2 FOR VOLSER */
/*********************************************************************/
/* */
/* BUILD THE SELECTION CRITERIA FIELDS PART OF PARAMETER LIST */
/* */
/*********************************************************************/
CSIOPTS = CSICLDI || CSIRESUM || CSIS1CAT || CSIRESRV
csi.fi.eld = CSIFILTK || CSICATNM || CSIRESNM || CSIDTYPS || CSIOPTS,
|| CSINUMEN || CSIFLD1 || CSIFLD2 || CSIFLD3
/*********************************************************************/
/* */
/* INITIALIZE AND BUILD WORK ARE OUTPUT PART OF PARAMETER LIST */
/* */
/*********************************************************************/
WORKLEN = 100000
dw.or.kokok = D2C(WORKLEN,4) || COPIES('00'X,WORKLEN-4)
/*********************************************************************/
/* */
/* INITIALIZE WORK VARIABLES */
/* */
/*********************************************************************/
RESUME = 'Y' /* SET RESUME FLAG */
CSIDSN.0 = 0 /* A COUNT OF DSNAMES FILLED */
/*********************************************************************/
/* */
/* SET UP LOOP FOR RESUME (IF A RESUME IS NECESSARY) */
/* */
/*********************************************************************/
DO WHILE RESUME = 'Y' /* UNTIL EOF OF CATALOG READ */
ADDRESS LINKPGM 'IGGCSI00 MODRSNRC csi.fi.eld dw.or.kokok'
RESUME = SUBSTR(csi.fi.eld,150,1) /* GET RESUME FLAG FOR NEXT LOOP */
USEDLEN = C2D(SUBSTR(dw.or.kokok,9,4)) /* GET AMOUNT OF WORK AREA USED */
POS1=15 /* STARTING POSITION */
/********************************************************************/
/* */
/* PROCESS DATA RETURNED IN WORK AREA */
/* */
/********************************************************************/
DO WHILE POS1 < USEDLEN /* UNTIL ALL DATA IS PROCESSED */
IF SUBSTR(dw.or.kokok,POS1+1,1) = '0' THEN /* IF ITS THE CATALOG */
DO
POS1 = POS1 + 50 /* SKIP TO THE END OF IT */
END
ELSE DO /* IF NOT CATALOG */
IF SUBSTR(dw.or.kokok,POS1+1,1) = 'A' THEN /* ONLY PROCESS NVSAM */
DO
DSN = strip(SUBSTR(dw.or.kokok,POS1+2,44))/* GET THE DSNAME */
pL = POS1 + 50
L1 = c2d(SUBSTR(dw.or.kokok,PL, 2))
L2 = c2d(SUBSTR(dw.or.kokok,PL+2, 2))
L3 = c2d(SUBSTR(dw.or.kokok,PL+4, 2))
dt = substr(dw.or.kokok, pL+6, l1)
vo = substr(dw.or.kokok, pL+6+l1, l2)
cl = substr(dw.or.kokok, pL+6+l1+l2, l3)
cl = substr(cl, 3, c2d(left(cl, 2)))
if vo = '' then
say err '||| no volume for dsn' dsn
else if vo = 'ARCIVE' then
res = 'arcive'
else if cl <> '' then
res = cl
else if abbrev(vo, 'SHR') then
res = 'SHR'
else
res = 'tape'
if abbrev(res, 'ar') ^= abbrev(dt, '00'x) ,
| abbrev(res, 'ta') ^= abbrev(c2x(left(dt, 1)), '7') ,
| (left(res, 1) >= 'A') ^= abbrev(dt, '30'x) then
say '||| mismatch cl' cl 'vo' vo 'dt' c2x(dt) 'dsn' dsn
csiDsn.dsn = res
csiDsn.0 = csiDsn.0 + 1
END
POS1 = POS1 + 46 /* SKIP TO RECORD END */
POS1 = POS1 + C2D(SUBSTR(dw.or.kokok,POS1,2)) /* ADD CSITOTLN */
END
END
END
RETURN 'notFound' /* RETURN TO INVOKER */
/* copy csi end *******************************************************/