(Here it is again, without the line numbers in cols 73-80:)
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)
*********************************************************************
* LIST ALL MEMBERS OF A PDS *
* *
* *
* *
*********************************************************************
*
PRINT NOGEN
PDSMEM CSECT
EQUREGS
*
*********************************************************************
******** START OF MACROS ********************************************
*********************************************************************
*
MACRO
&L READREC &FILE
&L READ DECB,SF,&FILE,BUFFER,256
CHECK DECB,DSORG=ALL
MEND
*
MACRO
&L WRITEREC &FILE
&L PUT REPORT,OUTPUT
MEND
*
*********************************************************************
******** END OF MACROS **********************************************
*********************************************************************
*
DIRECT DSECT
DATA DS XL2 LENGTH OF THIS DIRECTORY BLOCK
NAME DS CL8 NAME OF THIS/NEXT MEMBER
TTR DS XL3 TRACK ADDRESS OF MEMBER
C DS X 0:ALIAS;1-2:#UBLOCKS;3-7:#HALFWORDS
*
PDSMEM CSECT
STM R14,R12,12(R13) SAVE REGISTERS
LR R11,R15 LOAD ENTRY POINT ADDRESS
USING PDSMEM,R11 BASE REGISTER = R11
ST R13,SAVEBLK+8 BACKWARD POINTER
LR R6,R13
LA R13,SAVEBLK OUR SAVE AREA
ST R13,4(,R6) FORWARD POINTER
*
START OPEN (PDS,(INPUT)) OPEN DIRECTORY
OPEN (REPORT,(OUTPUT)) OPEN LIST OF MEMBERS FILE
*
USING DIRECT,R9 BASE DIRECTORY BUFFER ON R9
*
NEXTREC READREC PDS READ DIRECTORY BLOCK
LA R9,BUFFER-2 MAP DSECT OVER IT LESS 'DATA' LENGTH
LH R7,DATA+2 LOAD BUFFER LENGTH INTO R7
AR R7,R9 R7 <- END OF BUFFER ADDRESS
LA R9,2(,R9) R9 <- START OF BUFFER ADDRESS
NEXT CLR R9,R7 AT END OF BUFFER?
BE NEXTREC - YES: READ NEXT DIRECTORY BLOCK
MVC C_S,C - NO: CHECK WHETHER ALIAS
NI C_S,B'10000000' ALIAS?
BNE SKIP - YES: SKIP THIS ENTRY
CLI NAME,X'FF' - NO: END OF DIRECTORY?
BE EOJ - YES: TERMINATE
MVC OUTPUT,NAME - NO: TAKE THIS MEMBER NAME
WRITEREC AND WRITE IT TO REPORT
SKIP MVC C_S,C FIND OFFSET TO NEXT MEMBER NAME
NI C_S,B'00011111' ZERO-OUT IRRELEVANT BITS
XR R8,R8 CLEAR R8 FOR USE AS WORK REGISTER
ICM R8,B'0001',C_S R8 <- NUMBER OF HALFWORDS
SLL R8,1 R8 <- NUMBER OF BYTES
LA R9,12(R8,R9) R9 <- ADDRESS-2 OF NEXT MEMBER NAME
B NEXT GO PROCESS NEXT MEMBER NAME
*
EOJ CLOSE (PDS,,REPORT) CLOSE FILES
*
FINISH L R13,SAVEBLK+8 RESTORE CALLER'S R13
LM R14,R12,12(R13) RESTORE REGISTERS
XR R15,R15 CLEAR RETURN CODE
BR R14 RETURN TO CALLER
*
*********************************************************************
******** FILES ******************************************************
*********************************************************************
*
REPORT DCB DDNAME=REPORT, X
DSORG=PS, X
MACRF=(PM) PUT AND MOVE TRANSMITTAL
*
PDS DCB BLKSIZE=256, X
DDNAME=PDS, X
DSORG=PSU, X
EODAD=EOJ, X
RECFM=VB, X
MACRF=(R) READ
*
*********************************************************************
******** STORAGE ****************************************************
*********************************************************************
*
* RECORDS
*
CNOP 0,4
OUTPUT DS CL8 REPORT OUTPUT FIELD
BUFFER DS CL256 DIRECTORY BLOCK INPUT FIELD
*
* CONSTANTS
*
LTORG
*
* WORKING STORAGE
*
C_S DS X FOR ANALYSING THE 'C' FIELD
*
SAVEBLK DC 18F'0' 18 FULLWORDS INITIALISED TO X'00'
*
*********************************************************************
******** THAT'S IT **************************************************
*********************************************************************
*
END PDSMEM
> 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
> .
>
----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to [email protected] with the message: INFO IBM-MAIN