(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

Reply via email to