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 *******************************************************/