Cobol 与DDNAME关联的PDS成员列表

Cobol 与DDNAME关联的PDS成员列表,cobol,zos,Cobol,Zos,如何使用COBOL获取PDS的成员列表(使用批处理作业中指定的DD名称)? 可以动态处理使用DDNAME指定的PDS。因此,可以使用TCB获取给定DDNAME的PD列表并处理指定的成员名 但是如何使用COBOL获取PDS的成员列表呢?我知道这可以很容易地用REXX实现。但是我需要在COBOL中使用它,或者直接从COBOL中调用它。如果您指定此选项,只需简单的选择(当然包括文件状态),就可以读取PDS目录 FD INPUT-FILE RECORDING MODE IS U

如何使用COBOL获取PDS的成员列表(使用批处理作业中指定的DD名称)? 可以动态处理使用DDNAME指定的PDS。因此,可以使用TCB获取给定DDNAME的PD列表并处理指定的成员名


但是如何使用COBOL获取PDS的成员列表呢?我知道这可以很容易地用REXX实现。但是我需要在COBOL中使用它,或者直接从COBOL中调用它。

如果您指定此选项,只需简单的选择(当然包括文件状态),就可以读取PDS目录

   FD  INPUT-FILE 
       RECORDING MODE IS U 
       LABEL RECORDS ARE STANDARD. 
   01  INPUT-RECORD. 
       05  FILLER PIC X(256). 
在JCL中,指定DDName如下:

//ffffffff DD DISP=OLD,DSN=yourpdsname,
//            RECFM=U,LRECL=256
您还可以在COBOL程序中将录制模式更改为F,在JCL中将RECFM更改为F。其中一个将起作用(U(未定义)或F(ixed))

然后,您只需将该目录视为普通文件

但是,每个目录块有多个条目,您需要了解这些条目才能使用数据

这是一个1982年的节目。在某个时候,我将最初的GO-TO循环更改为内联执行,并对IBM的VS COBOL II下的新版本进行了其他更改,更改为1985年的COBOL标准

“扩展目录”是我为您粘贴的一本副本

使用上面定义的输入记录和扩展的目录调用程序

然后,在每次调用之后,您都可以访问当前块中的成员(如果有)

下面是一个程序读取PDS/PDSE目录并使用OCDIRBLK作为包含/嵌套/嵌入程序的示例

   IDENTIFICATION DIVISION. 
   PROGRAM-ID. STOB30. 
   ENVIRONMENT DIVISION. 
   INPUT-OUTPUT SECTION. 
   FILE-CONTROL. 

        SELECT INPUT-FILE ASSIGN TO PDSIND 
           FILE STATUS IS W-PDSIND-FILE-STATUS. 

   DATA DIVISION. 
   FILE SECTION. 
   FD         INPUT-FILE 
       RECORDING MODE IS U 
       RECORD IS VARYING FROM 1 TO 256 DEPENDING ON 
       W-RECORD-LENGTH 
       LABEL RECORDS ARE STANDARD. 
   01  INPUT-RECORD. 
       05  FILLER PIC X(252). 
   WORKING-STORAGE SECTION. 
   01  W-THIS-PROGRAM                      PIC X(9) VALUE 
                                                     "STOB30".
   01  W-WHEN-COMPILED                     PIC X(8)BX(8). 
   01  W-RECORD-LENGTH              BINARY PIC 9(8). 
   01  W-PDSIND-FILE-STATUS                PIC XX. 
       88  W-PDSIND-FILE-STATUS-OK         VALUE ZERO "10". 
       88  W-END-OF-INPUT-PDSIND           VALUE "10". 
   01  EXPANDED-DIRECTORY. 
       05  E-D-NUMBER-OF-ENTRIES    BINARY PIC 9(4). 
       05  FILLER 
           OCCURS 22 TIMES 
           INDEXED BY E-D-IND. 
           10  E-D-MEMBER-NAME             PIC X(8). 
           10  E-D-TRACK-ADDRESS           PIC X(3). 
           10  E-D-INDICATOR               PIC X(1). 
           10  E-D-ALIAS-FLAG              PIC X. 
               88  E-D-ALIAS               VALUE "Y". 
               88  E-D-ALIAS-NOT           VALUE "N". 
           10  E-D-NO-OF-POINTERS          PIC 9. 
           10  E-D-USER-DATA               PIC X(62). 
   PROCEDURE DIVISION. 
       PERFORM                      00-START-UP 
       PERFORM                      10-INTIAL-FILE-PROCESSING 
       PERFORM UNTIL W-END-OF-INPUT-PDSIND 
           CALL "OCDIRBLK"          USING INPUT-RECORD 
                                          EXPANDED-DIRECTORY 
           SET E-D-IND              TO 1 
           PERFORM E-D-NUMBER-OF-ENTRIES TIMES 
              DISPLAY 
                      E-D-MEMBER-NAME ( E-D-IND ) 
              SET E-D-IND           UP BY 1 
           END-PERFORM 
           PERFORM                  99A-READ-INPUT-FILE 
       END-PERFORM 
       PERFORM                      30-FINALISE-INPUT-PROCESSING
       GOBACK 
       . 
   00-START-UP. 
       MOVE WHEN-COMPILED           TO W-WHEN-COMPILED 
       DISPLAY 
               W-THIS-PROGRAM 
               " COMPILED ON " 
               W-WHEN-COMPILED 
       . 
   10-INTIAL-FILE-PROCESSING. 
       OPEN INPUT INPUT-FILE 
       IF NOT W-PDSIND-FILE-STATUS-OK 
           DISPLAY W-THIS-PROGRAM " DODGY PDSIND OPEN STATUS " 
                   ">" W-PDSIND-FILE-STATUS "<" 
           CALL "BBDUMP" 
       END-IF 

       PERFORM                      10A-PRIMING-READ 
       . 
   10A-PRIMING-READ. 
       PERFORM                      99A-READ-INPUT-FILE 
       . 
   30-FINALISE-INPUT-PROCESSING. 
       CLOSE INPUT-FILE 
       IF NOT W-PDSIND-FILE-STATUS-OK 
           DISPLAY W-THIS-PROGRAM " DODGY PDSIND CLOSE STATUS "
                   ">" W-PDSIND-FILE-STATUS "<" 
           CALL "BBDUMP" 
       END-IF 
       . 
   99A-READ-INPUT-FILE. 
       IF  W-END-OF-INPUT-PDSIND 
            DISPLAY "YOIKS" 
       END-IF 
       READ INPUT-FILE 
       IF NOT W-PDSIND-FILE-STATUS-OK 
           DISPLAY W-THIS-PROGRAM " DODGY PDSIND READ " 
                   ">" W-PDSIND-FILE-STATUS "<" 
           CALL "BBDUMP" 
       END-IF 
       . 
   IDENTIFICATION DIVISION. 
   PROGRAM-ID. OCDIRBLK. 
   DATA DIVISION. 
   WORKING-STORAGE SECTION. 
   01  LENGTH-UP-DIRECTORY          BINARY PIC 9(4). 
   01  LENGTH-OF-USER-DATA          BINARY PIC 9(4). 
   01  DIRECTORY-DATA-LENGTH        BINARY PIC 9(4). 
   01  HIGH-ORDER-BIT-VALUE         BINARY PIC 9(4) VALUE 128. 
   01  BIT-ONE-VALUE                BINARY PIC 9(4) VALUE 64. 
   01  BIT-TWO-VALUE                BINARY PIC 9(4) VALUE 32. 
   01  USER-DATA-LENGTH             BINARY PIC 9(4). 
       88  NO-USER-HALFWORDS               VALUE ZERO. 
       88  SOME-USER-HALFWORDS             VALUE 1 THRU 31. 
       88  MEMBER-HAS-ONE-POINTER          VALUE 32 THRU 63. 
       88  MEMBER-HAS-TWO-POINTERS         VALUE 64 THRU 127. 
       88  MEMBER-IS-AN-ALIAS              VALUE 128 THRU 255. 
   01  FILLER REDEFINES USER-DATA-LENGTH. 
       05  FILLER                          PIC X. 
       05  USER-DATA-BYTE                  PIC X. 
   LINKAGE SECTION. 
   01  INPUT-DIRECTORY. 
       05  I-D-LENGTH               BINARY PIC 9(4). 
           88  I-D-NO-MEMBERS              VALUE ZERO. 
       05  FILLER OCCURS 0 TO 252 TIMES 
           DEPENDING ON LENGTH-UP-DIRECTORY 
                                           PIC X. 
       05  I-D-MEMBER-NAME                 PIC X(8). 
           88 I-D-END-OF-BLOCK             VALUE HIGH-VALUES.
       05  I-D-TRACK-ADDRESS               PIC XXX. 
       05  I-D-INDICATOR                   PIC X. 
       05  I-D-USER-DATA. 
           10  FILLER 
               OCCURS 0 TO 62 TIMES 
               DEPENDING ON 
               LENGTH-OF-USER-DATA. 
               15  FILLER                  PIC X. 
   01  EXPANDED-DIRECTORY. 
       05  E-D-NUMBER-OF-ENTRIES    BINARY PIC 9(4). 
       05  FILLER OCCURS 22 TIMES. 
           10  E-D-MEMBER-NAME             PIC X(8). 
           10  E-D-TRACK-ADDRESS           PIC X(3). 
           10  E-D-INDICATOR               PIC X(1). 
           10  E-D-ALIAS-FLAG              PIC X. 
               88  E-D-ALIAS               VALUE "Y". 
               88  E-D-ALIAS-NOT           VALUE "N". 
           10  E-D-NO-OF-POINTERS          PIC 9. 
           10  E-D-USER-DATA               PIC X(62). 
   PROCEDURE DIVISION               USING 
                                          INPUT-DIRECTORY 
                                          EXPANDED-DIRECTORY 
                                          . 

       IF I-D-NO-MEMBERS 
           MOVE ZERO                TO DIRECTORY-DATA-LENGTH 
       ELSE 
           SUBTRACT +2              FROM I-D-LENGTH 
             GIVING                 DIRECTORY-DATA-LENGTH 
       END-IF 

       MOVE ZERO                    TO E-D-NUMBER-OF-ENTRIES 
                                       LENGTH-UP-DIRECTORY 
       PERFORM UNTIL ( LENGTH-UP-DIRECTORY 
             NOT LESS THAN DIRECTORY-DATA-LENGTH ) 
                 OR ( I-D-END-OF-BLOCK ) 
           ADD 1                    TO E-D-NUMBER-OF-ENTRIES 
           MOVE I-D-MEMBER-NAME     TO E-D-MEMBER-NAME 
                                        ( E-D-NUMBER-OF-ENTRIES )
           MOVE I-D-TRACK-ADDRESS   TO E-D-TRACK-ADDRESS 
                                        ( E-D-NUMBER-OF-ENTRIES )
           MOVE I-D-INDICATOR       TO E-D-INDICATOR 
                                        ( E-D-NUMBER-OF-ENTRIES )
                                           USER-DATA-BYTE 
           MOVE ZERO                TO E-D-NO-OF-POINTERS 
                                        ( E-D-NUMBER-OF-ENTRIES )
           IF MEMBER-IS-AN-ALIAS 
               SET E-D-ALIAS ( E-D-NUMBER-OF-ENTRIES ) 
                                    TO TRUE 
               SUBTRACT HIGH-ORDER-BIT-VALUE 
                                    FROM USER-DATA-LENGTH 
           ELSE 
               SET E-D-ALIAS-NOT ( E-D-NUMBER-OF-ENTRIES ) 
                                    TO TRUE 
           END-IF 
           IF MEMBER-HAS-TWO-POINTERS 
               MOVE 2               TO E-D-NO-OF-POINTERS 
                                        ( E-D-NUMBER-OF-ENTRIES )
               SUBTRACT BIT-ONE-VALUE 
                                    FROM USER-DATA-LENGTH 
           END-IF 
           IF MEMBER-HAS-ONE-POINTER 
               ADD 1                TO E-D-NO-OF-POINTERS 
                                        ( E-D-NUMBER-OF-ENTRIES )
               SUBTRACT BIT-TWO-VALUE 
                                    FROM USER-DATA-LENGTH 
           END-IF 
           IF SOME-USER-HALFWORDS 
               MULTIPLY USER-DATA-LENGTH BY 2 
                GIVING              LENGTH-OF-USER-DATA 
               MOVE I-D-USER-DATA   TO E-D-USER-DATA 
                                        ( E-D-NUMBER-OF-ENTRIES )
               ADD LENGTH-OF-USER-DATA TO LENGTH-UP-DIRECTORY 
           ELSE 
               MOVE SPACE           TO E-D-USER-DATA 
                                        ( E-D-NUMBER-OF-ENTRIES )
               MOVE ZERO            TO LENGTH-OF-USER-DATA 
           END-IF 
           ADD 12                   TO LENGTH-UP-DIRECTORY 
       END-PERFORM 
       GOBACK 
       . 
   END PROGRAM OCDIRBLK. 
   END PROGRAM STOB30. 
注意,在设置JCL时,我没有包括RECFM=U(偶然)。以RECFM=FB、LRECL=80 PDS和RECFM=U PDSE运行,生成正确的结果


这让我很惊讶。您的里程数可能会有所不同。

您想要在JCL的DD语句中指定的PDS中所有成员的列表吗?或者别的什么?可能是,但为什么???是的。实现现有工具的包装器,以便为数据集的所有成员而不是pds的单个成员执行该包装器。它只是额外提供“-dir”,如opt.COBOL作品(如Bill演示),但您可能想考虑LE兼容的汇编程序或C.不应该是255,而不是252?IIRC、PDS目录记录是一个8字节的密钥(CKD),后跟最多255个字节。(没有为I/O提供密钥。)@zarchasmpgmr。我可能用U来逃避它。我最近才发现F是可能的,我想我必须得到正确的长度。它是256。还记得在IEBPTPCH中打印目录的老把戏吗?RECFM=U,BLKSIZE=256,KEYLEN=8我知道我做了什么。在调用程序中,我的
记录的长度从1到256不等,这取决于W-RECORD-LENGTH
,并且由于该长度与被调用的程序无关,因此我未经检查就将其截断。我使用LRECL=256,从未考虑过BLKSIZE。我认为它不需要钥匙(我从来没用过)。我会看一下PTPCH,我会使用genr,尽管我喜欢PTPCH的很多方面:-)`可能有一些更新的(我指的是更新的1980年代;))帮助读取目录。DCB技巧通常记录在实用程序手册中。它可能是用于GENER而不是PTPCH。公用设施手册中有很多被忽视的东西。IEBEDIT和IEBDG有一些超出其假定功能的不错的技巧。
   IDENTIFICATION DIVISION. 
   PROGRAM-ID. STOB30. 
   ENVIRONMENT DIVISION. 
   INPUT-OUTPUT SECTION. 
   FILE-CONTROL. 

        SELECT INPUT-FILE ASSIGN TO PDSIND 
           FILE STATUS IS W-PDSIND-FILE-STATUS. 

   DATA DIVISION. 
   FILE SECTION. 
   FD         INPUT-FILE 
       RECORDING MODE IS U 
       RECORD IS VARYING FROM 1 TO 256 DEPENDING ON 
       W-RECORD-LENGTH 
       LABEL RECORDS ARE STANDARD. 
   01  INPUT-RECORD. 
       05  FILLER PIC X(252). 
   WORKING-STORAGE SECTION. 
   01  W-THIS-PROGRAM                      PIC X(9) VALUE 
                                                     "STOB30".
   01  W-WHEN-COMPILED                     PIC X(8)BX(8). 
   01  W-RECORD-LENGTH              BINARY PIC 9(8). 
   01  W-PDSIND-FILE-STATUS                PIC XX. 
       88  W-PDSIND-FILE-STATUS-OK         VALUE ZERO "10". 
       88  W-END-OF-INPUT-PDSIND           VALUE "10". 
   01  EXPANDED-DIRECTORY. 
       05  E-D-NUMBER-OF-ENTRIES    BINARY PIC 9(4). 
       05  FILLER 
           OCCURS 22 TIMES 
           INDEXED BY E-D-IND. 
           10  E-D-MEMBER-NAME             PIC X(8). 
           10  E-D-TRACK-ADDRESS           PIC X(3). 
           10  E-D-INDICATOR               PIC X(1). 
           10  E-D-ALIAS-FLAG              PIC X. 
               88  E-D-ALIAS               VALUE "Y". 
               88  E-D-ALIAS-NOT           VALUE "N". 
           10  E-D-NO-OF-POINTERS          PIC 9. 
           10  E-D-USER-DATA               PIC X(62). 
   PROCEDURE DIVISION. 
       PERFORM                      00-START-UP 
       PERFORM                      10-INTIAL-FILE-PROCESSING 
       PERFORM UNTIL W-END-OF-INPUT-PDSIND 
           CALL "OCDIRBLK"          USING INPUT-RECORD 
                                          EXPANDED-DIRECTORY 
           SET E-D-IND              TO 1 
           PERFORM E-D-NUMBER-OF-ENTRIES TIMES 
              DISPLAY 
                      E-D-MEMBER-NAME ( E-D-IND ) 
              SET E-D-IND           UP BY 1 
           END-PERFORM 
           PERFORM                  99A-READ-INPUT-FILE 
       END-PERFORM 
       PERFORM                      30-FINALISE-INPUT-PROCESSING
       GOBACK 
       . 
   00-START-UP. 
       MOVE WHEN-COMPILED           TO W-WHEN-COMPILED 
       DISPLAY 
               W-THIS-PROGRAM 
               " COMPILED ON " 
               W-WHEN-COMPILED 
       . 
   10-INTIAL-FILE-PROCESSING. 
       OPEN INPUT INPUT-FILE 
       IF NOT W-PDSIND-FILE-STATUS-OK 
           DISPLAY W-THIS-PROGRAM " DODGY PDSIND OPEN STATUS " 
                   ">" W-PDSIND-FILE-STATUS "<" 
           CALL "BBDUMP" 
       END-IF 

       PERFORM                      10A-PRIMING-READ 
       . 
   10A-PRIMING-READ. 
       PERFORM                      99A-READ-INPUT-FILE 
       . 
   30-FINALISE-INPUT-PROCESSING. 
       CLOSE INPUT-FILE 
       IF NOT W-PDSIND-FILE-STATUS-OK 
           DISPLAY W-THIS-PROGRAM " DODGY PDSIND CLOSE STATUS "
                   ">" W-PDSIND-FILE-STATUS "<" 
           CALL "BBDUMP" 
       END-IF 
       . 
   99A-READ-INPUT-FILE. 
       IF  W-END-OF-INPUT-PDSIND 
            DISPLAY "YOIKS" 
       END-IF 
       READ INPUT-FILE 
       IF NOT W-PDSIND-FILE-STATUS-OK 
           DISPLAY W-THIS-PROGRAM " DODGY PDSIND READ " 
                   ">" W-PDSIND-FILE-STATUS "<" 
           CALL "BBDUMP" 
       END-IF 
       . 
   IDENTIFICATION DIVISION. 
   PROGRAM-ID. OCDIRBLK. 
   DATA DIVISION. 
   WORKING-STORAGE SECTION. 
   01  LENGTH-UP-DIRECTORY          BINARY PIC 9(4). 
   01  LENGTH-OF-USER-DATA          BINARY PIC 9(4). 
   01  DIRECTORY-DATA-LENGTH        BINARY PIC 9(4). 
   01  HIGH-ORDER-BIT-VALUE         BINARY PIC 9(4) VALUE 128. 
   01  BIT-ONE-VALUE                BINARY PIC 9(4) VALUE 64. 
   01  BIT-TWO-VALUE                BINARY PIC 9(4) VALUE 32. 
   01  USER-DATA-LENGTH             BINARY PIC 9(4). 
       88  NO-USER-HALFWORDS               VALUE ZERO. 
       88  SOME-USER-HALFWORDS             VALUE 1 THRU 31. 
       88  MEMBER-HAS-ONE-POINTER          VALUE 32 THRU 63. 
       88  MEMBER-HAS-TWO-POINTERS         VALUE 64 THRU 127. 
       88  MEMBER-IS-AN-ALIAS              VALUE 128 THRU 255. 
   01  FILLER REDEFINES USER-DATA-LENGTH. 
       05  FILLER                          PIC X. 
       05  USER-DATA-BYTE                  PIC X. 
   LINKAGE SECTION. 
   01  INPUT-DIRECTORY. 
       05  I-D-LENGTH               BINARY PIC 9(4). 
           88  I-D-NO-MEMBERS              VALUE ZERO. 
       05  FILLER OCCURS 0 TO 252 TIMES 
           DEPENDING ON LENGTH-UP-DIRECTORY 
                                           PIC X. 
       05  I-D-MEMBER-NAME                 PIC X(8). 
           88 I-D-END-OF-BLOCK             VALUE HIGH-VALUES.
       05  I-D-TRACK-ADDRESS               PIC XXX. 
       05  I-D-INDICATOR                   PIC X. 
       05  I-D-USER-DATA. 
           10  FILLER 
               OCCURS 0 TO 62 TIMES 
               DEPENDING ON 
               LENGTH-OF-USER-DATA. 
               15  FILLER                  PIC X. 
   01  EXPANDED-DIRECTORY. 
       05  E-D-NUMBER-OF-ENTRIES    BINARY PIC 9(4). 
       05  FILLER OCCURS 22 TIMES. 
           10  E-D-MEMBER-NAME             PIC X(8). 
           10  E-D-TRACK-ADDRESS           PIC X(3). 
           10  E-D-INDICATOR               PIC X(1). 
           10  E-D-ALIAS-FLAG              PIC X. 
               88  E-D-ALIAS               VALUE "Y". 
               88  E-D-ALIAS-NOT           VALUE "N". 
           10  E-D-NO-OF-POINTERS          PIC 9. 
           10  E-D-USER-DATA               PIC X(62). 
   PROCEDURE DIVISION               USING 
                                          INPUT-DIRECTORY 
                                          EXPANDED-DIRECTORY 
                                          . 

       IF I-D-NO-MEMBERS 
           MOVE ZERO                TO DIRECTORY-DATA-LENGTH 
       ELSE 
           SUBTRACT +2              FROM I-D-LENGTH 
             GIVING                 DIRECTORY-DATA-LENGTH 
       END-IF 

       MOVE ZERO                    TO E-D-NUMBER-OF-ENTRIES 
                                       LENGTH-UP-DIRECTORY 
       PERFORM UNTIL ( LENGTH-UP-DIRECTORY 
             NOT LESS THAN DIRECTORY-DATA-LENGTH ) 
                 OR ( I-D-END-OF-BLOCK ) 
           ADD 1                    TO E-D-NUMBER-OF-ENTRIES 
           MOVE I-D-MEMBER-NAME     TO E-D-MEMBER-NAME 
                                        ( E-D-NUMBER-OF-ENTRIES )
           MOVE I-D-TRACK-ADDRESS   TO E-D-TRACK-ADDRESS 
                                        ( E-D-NUMBER-OF-ENTRIES )
           MOVE I-D-INDICATOR       TO E-D-INDICATOR 
                                        ( E-D-NUMBER-OF-ENTRIES )
                                           USER-DATA-BYTE 
           MOVE ZERO                TO E-D-NO-OF-POINTERS 
                                        ( E-D-NUMBER-OF-ENTRIES )
           IF MEMBER-IS-AN-ALIAS 
               SET E-D-ALIAS ( E-D-NUMBER-OF-ENTRIES ) 
                                    TO TRUE 
               SUBTRACT HIGH-ORDER-BIT-VALUE 
                                    FROM USER-DATA-LENGTH 
           ELSE 
               SET E-D-ALIAS-NOT ( E-D-NUMBER-OF-ENTRIES ) 
                                    TO TRUE 
           END-IF 
           IF MEMBER-HAS-TWO-POINTERS 
               MOVE 2               TO E-D-NO-OF-POINTERS 
                                        ( E-D-NUMBER-OF-ENTRIES )
               SUBTRACT BIT-ONE-VALUE 
                                    FROM USER-DATA-LENGTH 
           END-IF 
           IF MEMBER-HAS-ONE-POINTER 
               ADD 1                TO E-D-NO-OF-POINTERS 
                                        ( E-D-NUMBER-OF-ENTRIES )
               SUBTRACT BIT-TWO-VALUE 
                                    FROM USER-DATA-LENGTH 
           END-IF 
           IF SOME-USER-HALFWORDS 
               MULTIPLY USER-DATA-LENGTH BY 2 
                GIVING              LENGTH-OF-USER-DATA 
               MOVE I-D-USER-DATA   TO E-D-USER-DATA 
                                        ( E-D-NUMBER-OF-ENTRIES )
               ADD LENGTH-OF-USER-DATA TO LENGTH-UP-DIRECTORY 
           ELSE 
               MOVE SPACE           TO E-D-USER-DATA 
                                        ( E-D-NUMBER-OF-ENTRIES )
               MOVE ZERO            TO LENGTH-OF-USER-DATA 
           END-IF 
           ADD 12                   TO LENGTH-UP-DIRECTORY 
       END-PERFORM 
       GOBACK 
       . 
   END PROGRAM OCDIRBLK. 
   END PROGRAM STOB30. 
//LISTDIR EXEC PGM=STOB30,TIME=(,2)
//STEPLIB DD DSN=yours as necessary
//SYSOUT DD SYSOUT=* for the DISPLAY output 
//PDSIND DD DSN=your pds/pdse,
// DISP=SHR,LRECL=256,RECFM=U