/********************************************************************/
/* NAME: IGGCSIRX */
/********************************************************************/
"EXECIO * DISKR CATIN ( STEM CAT. FINIS" /* READ KEY SELECTIONS */
DO KCNT = 1 TO CAT.0 /* PROCESS SELECTIONS */
KEY = SUBSTR(CAT.KCNT,1,44) /* GET KEY */
/********************************************************************/
/* INITIALIZE THE PARM LIST */
/********************************************************************/
MODRSNRC = SUBSTR(' ',1,4) /* CLEAR MODULE/RETURN/REASON */
CSIFILTK = SUBSTR(KEY,1,44) /* MOVE FILTER KEY INTO LIST */
CSICATNM = SUBSTR(' ',1,44) /* CLEAR CATALOG NAME */
CSIRESNM = SUBSTR(' ',1,44) /* CLEAR RESUME NAME */
CSIDTYPS = SUBSTR(' ',1,16) /* CLEAR ENTRY TYPES */
CSICLDI = SUBSTR('Y',1,1) /* INDICATE DATA AND INDEX */
CSIRESUM = SUBSTR(' ',1,1) /* CLEAR RESUME FLAG */
CSIS1CAT = SUBSTR(' ',1,1) /* INDICATE SEARCH > 1 CATALOGS*/
CSIRESRV = SUBSTR(' ',1,1) /* CLEAR RESERVE CHARACTER */
CSINUMEN = '0001'X /* INIT NUMBER OF FIELDS */
CSIFLD1 = 'VOLSER ' /* INIT FIELD 1 FOR VOLSERS */
/********************************************************************/
/* BUILD THE SELECTION CRITERIA FIELDS PART OF PARAMETER LIST */
/********************************************************************/
CSIOPTS = CSICLDI || CSIRESUM || CSIS1CAT || CSIRESRV
CSIFIELD = CSIFILTK || CSICATNM || CSIRESNM || CSIDTYPS || CSIOPTS
CSIFIELD = CSIFIELD || CSINUMEN || CSIFLD1
/********************************************************************/
/* INITIALIZE AND BUILD WORK ARE OUTPUT PART OF PARAMETER LIST */
/********************************************************************/
WORKLEN = 65536 /* 64K WORK AREA */
DWORK = '00010000'X || COPIES('00'X,WORKLEN-4)
/********************************************************************/
/* INITIALIZE WORK VARIABLES */
/********************************************************************/
RESUME = 'Y'
CATNAMET = SUBSTR(' ',1,44)
DNAMET = SUBSTR(' ',1,44)
/********************************************************************/
/* SET UP LOOP FOR RESUME (IF A RESUME IS NCESSARY) */
/********************************************************************/
DO WHILE RESUME = 'Y'
/********************************************************************/
/* ISSUE LINK TO CATALOG GENERIC FILTER INTERFACE */
/********************************************************************/
ADDRESS LINKPGM 'IGGCSI00 MODRSNRC CSIFIELD DWORK'
RESUME = SUBSTR(CSIFIELD,150,1) /* GET RESUME FLAG FOR NEXT LOOP */
USEDLEN = C2D(SUBSTR(DWORK,9,4)) /* GET AMOUNT OF WORK AREA USED */
POS1=15 /* STARTING POSITION */
/********************************************************************/
/* PROCESS DATA RETURNED IN WORK AREA */
/********************************************************************/
DO WHILE POS1 < USEDLEN /* DO UNTIL ALL DATA IS PROCESSED*/
IF SUBSTR(DWORK,POS1+1,1) = '0' /* IF CATALOG, PRINT CATALOG HEAD*/
THEN DO
CATNAME=SUBSTR(DWORK,POS1+2,44)
IF CATNAME ^= CATNAMET THEN /* IF RESUME NAME MAY ALREADY BE*/
DO /* PRINTED */
/* SAY 'CATALOG ' CATNAME IF NOT, PRINT IT */
/* SAY ' ' */
CATNAMET = CATNAME
END
POS1 = POS1 + 50
END
DNAME = SUBSTR(DWORK,POS1+2,44) /* GET ENTRY NAME */
/********************************************************************/
/* ASSIGN ENTRY TYPE NAME */
/********************************************************************/
IF SUBSTR(DWORK,POS1+1,1) = 'C' THEN DTYPE = 'CLUSTER '
ELSE
IF SUBSTR(DWORK,POS1+1,1) = 'D' THEN DTYPE = 'DATA '
ELSE
IF SUBSTR(DWORK,POS1+1,1) = 'I' THEN DTYPE = 'INDEX '
ELSE
IF SUBSTR(DWORK,POS1+1,1) = 'A' THEN DTYPE = 'NONVSAM '
ELSE
IF SUBSTR(DWORK,POS1+1,1) = 'H' THEN DTYPE = 'GDS '
ELSE
IF SUBSTR(DWORK,POS1+1,1) = 'B' THEN DTYPE = 'GDG '
ELSE
IF SUBSTR(DWORK,POS1+1,1) = 'R' THEN DTYPE = 'PATH '
ELSE
IF SUBSTR(DWORK,POS1+1,1) = 'G' THEN DTYPE = 'AIX '
ELSE
IF SUBSTR(DWORK,POS1+1,1) = 'X' THEN DTYPE = 'ALIAS '
ELSE
IF SUBSTR(DWORK,POS1+1,1) = 'U' THEN DTYPE = 'UCAT '
ELSE
DTYPE = ' '
/********************************************************************/
/* HAVE NAME AND TYPE, GET VOLSER INFO */
/********************************************************************/
POS1 = POS1 + 46
NUMVOL = C2D(SUBSTR(DWORK,POS1+4,2))/6 /* HOW MANY VOLSERS ? */
/* */
POS2 = POS1+6 /* POSITION ON DATA */
VOLSER. = ""
DO I = 1 TO NUMVOL /* MOVE VOLSERS TO OUTPUT FIELDS */
VOLSER.I = SUBSTR(DWORK,POS2,6)
POS2 = POS2 + 6
END
IF DNAMET ^= DNAME THEN /* IF RESUME, NAME MAY ALREADY */
/* PRINTED */
DO /* IF NOT, PRINT IT */
LISTVOL1 = VOLSER.1 ||" "|| VOLSER.2 ||" "|| VOLSER.3
LISTVOL2 = VOLSER.4 ||" "|| VOLSER.5 ||" "|| VOLSER.6
LISTVOL3 = VOLSER.7 ||" "|| VOLSER.8 ||" "|| VOLSER.9
SAY COPIES(' ',8) DTYPE DNAME LISTVOL1 LISTVOL2 LISTVOL3
DNAMET=DNAME
END
/********************************************************************/
/* GET POSITION OF NEXT ENTRY */
/********************************************************************/
POS1 = POS1 + C2D(SUBSTR(DWORK,POS1,2))
END
END
END
Joined: 01 Sep 2006 Posts: 2608 Location: Silicon Valley
Here is a TSO example (the original post was about batch job):
Code:
/* REXX */
/*-----------------------------------------------------------------*/
/* GET ALL DATASETS WITH THE HIGH LEVEL QUALIFIER */
/* HLQ is the only parm. */
/* */
/* IF NO LEVEL IS PROVIDED, THE USERID IS USED AS A LEVEL. */
/* */
/*-----------------------------------------------------------------*/
parse arg lvl
if lvl = '' then lvl = sysvar('sysuid')
Address ISPEXEC
"LMDINIT LISTID(LISTID) LEVEL("lvl")"
"LMDLIST LISTID("listid") OPTION(SAVE) STATS(YES) GROUP(MYlist)"
"LMDLIST LISTID("listid") OPTION(FREE)"
"LMDFREE LISTID("listid")"
"EDIT DATASET(MYLIST.DATASETS)"
Examples:
Code:
TSO %lmdlist1 PEDRO.JCL
TSO %lmdlist1 PEDRO.JC*
For batch, perhaps just remove the EDIT statement.
Joined: 06 Jul 2010 Posts: 767 Location: Whitby, ON, Canada
I was about to post a sample when I saw that Pedro beat me to it. My sample is quite similar and was taken from a batch function that does a mass rename of data sets according our shop's local naming conventions.
I do use 3.4 with wild cards to display the list f files today. then use print command and then save to a file name. I would like to do it thru batch job.