FWIW This program dumps all members' names in a PDS. It can be modified to display any other PDS directory data, and can be invoked recursively (e.g. from REXX) to process any number of PDS datasets. No idea whether it can process PDSEs (I wrote it in the 1980's), but it might do. "EQUREGS" is a macro to copy in the register equates:
MACRO EQUREGS R0 EQU 0 REDEFINE REGISTERS R1 EQU 1 ... AR0 EQU 0 <etc.> MEND HTH / Cheers, Chris Poncelet (retired sysprog) ********************************************************************* 00000100 * LIST ALL MEMBERS OF A PDS * 00000200 * * 00000300 * * 00000400 * * 00000500 ********************************************************************* 00000600 * 00000700 PRINT NOGEN 00000800 PDSMEM CSECT 00000900 EQUREGS 00001000 * 00001100 ********************************************************************* 00001200 ******** START OF MACROS ******************************************** 00001300 ********************************************************************* 00001400 * 00001500 MACRO 00001600 &L READREC &FILE 00001700 &L READ DECB,SF,&FILE,BUFFER,256 00001800 CHECK DECB,DSORG=ALL 00001900 MEND 00002000 * 00002100 MACRO 00002200 &L WRITEREC &FILE 00002300 &L PUT REPORT,OUTPUT 00002400 MEND 00002500 * 00002600 ********************************************************************* 00002700 ******** END OF MACROS ********************************************** 00002800 ********************************************************************* 00002900 * 00003000 DIRECT DSECT 00003100 DATA DS XL2 LENGTH OF THIS DIRECTORY BLOCK 00003200 NAME DS CL8 NAME OF THIS/NEXT MEMBER 00003300 TTR DS XL3 TRACK ADDRESS OF MEMBER 00003400 C DS X 0:ALIAS;1-2:#UBLOCKS;3-7:#HALFWORDS 00003500 * 00003600 PDSMEM CSECT 00003700 STM R14,R12,12(R13) SAVE REGISTERS 00003800 LR R11,R15 LOAD ENTRY POINT ADDRESS 00003900 USING PDSMEM,R11 BASE REGISTER = R11 00004000 ST R13,SAVEBLK+8 BACKWARD POINTER 00004100 LR R6,R13 00004200 LA R13,SAVEBLK OUR SAVE AREA 00004300 ST R13,4(,R6) FORWARD POINTER 00004400 * 00004500 START OPEN (PDS,(INPUT)) OPEN DIRECTORY 00004600 OPEN (REPORT,(OUTPUT)) OPEN LIST OF MEMBERS FILE 00004700 * 00004800 USING DIRECT,R9 BASE DIRECTORY BUFFER ON R9 00004900 * 00005000 NEXTREC READREC PDS READ DIRECTORY BLOCK 00005100 LA R9,BUFFER-2 MAP DSECT OVER IT LESS 'DATA' LENGTH 00005200 LH R7,DATA+2 LOAD BUFFER LENGTH INTO R7 00005300 AR R7,R9 R7 <- END OF BUFFER ADDRESS 00005400 LA R9,2(,R9) R9 <- START OF BUFFER ADDRESS 00005500 NEXT CLR R9,R7 AT END OF BUFFER? 00005600 BE NEXTREC - YES: READ NEXT DIRECTORY BLOCK 00005700 MVC C_S,C - NO: CHECK WHETHER ALIAS 00005800 NI C_S,B'10000000' ALIAS? 00005900 BNE SKIP - YES: SKIP THIS ENTRY 00006000 CLI NAME,X'FF' - NO: END OF DIRECTORY? 00006100 BE EOJ - YES: TERMINATE 00006200 MVC OUTPUT,NAME - NO: TAKE THIS MEMBER NAME 00006300 WRITEREC AND WRITE IT TO REPORT 00006400 SKIP MVC C_S,C FIND OFFSET TO NEXT MEMBER NAME 00006500 NI C_S,B'00011111' ZERO-OUT IRRELEVANT BITS 00006600 XR R8,R8 CLEAR R8 FOR USE AS WORK REGISTER 00006700 ICM R8,B'0001',C_S R8 <- NUMBER OF HALFWORDS 00006800 SLL R8,1 R8 <- NUMBER OF BYTES 00006900 LA R9,12(R8,R9) R9 <- ADDRESS-2 OF NEXT MEMBER NAME 00007000 B NEXT GO PROCESS NEXT MEMBER NAME 00007100 * 00007200 EOJ CLOSE (PDS,,REPORT) CLOSE FILES 00007300 * 00007400 FINISH L R13,SAVEBLK+8 RESTORE CALLER'S R13 00007500 LM R14,R12,12(R13) RESTORE REGISTERS 00007600 XR R15,R15 CLEAR RETURN CODE 00007700 BR R14 RETURN TO CALLER 00007800 * 00007900 ********************************************************************* 00008000 ******** FILES ****************************************************** 00008100 ********************************************************************* 00008200 * 00008300 REPORT DCB DDNAME=REPORT, X00008400 DSORG=PS, X00008500 MACRF=(PM) PUT AND MOVE TRANSMITTAL 00008600 * 00008700 PDS DCB BLKSIZE=256, X00008800 DDNAME=PDS, X00008900 DSORG=PSU, X00009000 EODAD=EOJ, X00009100 RECFM=VB, X00009200 MACRF=(R) READ 00009300 * 00009400 ********************************************************************* 00009500 ******** STORAGE **************************************************** 00009600 ********************************************************************* 00009700 * 00009800 * RECORDS 00009900 * 00010000 CNOP 0,4 00010100 OUTPUT DS CL8 REPORT OUTPUT FIELD 00010200 BUFFER DS CL256 DIRECTORY BLOCK INPUT FIELD 00010300 * 00010400 * CONSTANTS 00010500 * 00010600 LTORG 00010700 * 00010800 * WORKING STORAGE 00010900 * 00011000 C_S DS X FOR ANALYSING THE 'C' FIELD 00011100 * 00011200 SAVEBLK DC 18F'0' 18 FULLWORDS INITIALISED TO X'00' 00011300 * 00011400 ********************************************************************* 00011500 ******** THAT'S IT ************************************************** 00011600 ********************************************************************* 00011700 * 00011800 END PDSMEM 00011900 On 12/12/2019 17:22, Charles Mills wrote: > I think IBM has a problem with making something free that used to be charged. > Not sure exactly what the problem is; perhaps a fear that those who paid > years ago will want their money back. It is solvable by creating a new free > offering that is a lot like, but not exactly the same as, the former paid > offering, but that is an additional internal hurdle to be overcome. > > Charles > > > -----Original Message----- > From: IBM Mainframe Discussion List [mailto:[email protected]] On > Behalf Of R.S. > Sent: Thursday, December 12, 2019 9:14 AM > To: [email protected] > Subject: Re: Looking for a utility to create a master listing of all PDS > members on a system > > W dniu 2019-12-11 o 17:01, Paul Gilmartin pisze: >> On Wed, 11 Dec 2019 10:40:33 -0500, Don Leahy wrote: >> >>> I have a rexx program that reads in a list of data set names and / or masks >>> and creates a “master” member list consisting of all of the PDS/E members >>> found in the data sets. The output is a file containing the member name, >>> the DSN, last update date (from ISPF stats, if available) and the number of >>> lines in the member. >>> >> Grrr... >> FAMS keeps timestamps for PDSE members with microsecond precision. >> The interface spec is available for a price, perhaps NDA. >> >> It boggles the mind that a vendor would keep customers' file timestamps >> secret. > It's both: funny and annoying. PDSE is almost 40 years old, AFAIK and > many features of it is still secret, not in use, etc. Note, it's not > discussion about source code, it is about really basic features. > I can't imagine any reason to keep it secret. > ---------------------------------------------------------------------- For IBM-MAIN subscribe / signoff / archive access instructions, send email to [email protected] with the message: INFO IBM-MAIN
