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

Reply via email to