Shivang,

Well, here is something that I wrote on the fly. It has a COBOL exit that will 
return the information to DFSORT and then the ICETOOL job will generate a 
deport of all the datasets that has spaces in the STORCLAS.

You will need COBOL 6.xx versions as I am using functions like BIT-OF

//  SET SMFIN=Your.input.SMF.VBS.dataset
/*
//***************************************************************
//* Compile the program to be used as E35 Exit to DFSORT        *
//***************************************************************
//COMPILE  EXEC PGM=IGYCRCTL,REGION=0M
//STEPLIB  DD DISP=SHR,DSN=COBOL.V6xx.SIGYCOMP
//SYSPRINT DD SYSOUT=*
//SYSTERM  DD SYSOUT=*
//SYSMDECK DD UNIT=SYSALLDA,SPACE=(CYL,(1,1))
//SYSUT1   DD UNIT=SYSDA,SPACE=(CYL,(10,2),RLSE)
//SYSUT2   DD UNIT=SYSDA,SPACE=(CYL,(10,2),RLSE)
//SYSUT3   DD UNIT=SYSDA,SPACE=(CYL,(10,2),RLSE)
//SYSUT4   DD UNIT=SYSDA,SPACE=(CYL,(10,2),RLSE)
//SYSUT5   DD UNIT=SYSDA,SPACE=(CYL,(10,2),RLSE)
//SYSUT6   DD UNIT=SYSDA,SPACE=(CYL,(10,2),RLSE)
//SYSUT7   DD UNIT=SYSDA,SPACE=(CYL,(10,2),RLSE)
//SYSUT8   DD UNIT=SYSDA,SPACE=(CYL,(10,2),RLSE)
//SYSUT9   DD UNIT=SYSDA,SPACE=(CYL,(10,2),RLSE)
//SYSUT10  DD UNIT=SYSDA,SPACE=(CYL,(10,2),RLSE)
//SYSUT11  DD UNIT=SYSDA,SPACE=(CYL,(10,2),RLSE)
//SYSUT12  DD UNIT=SYSDA,SPACE=(CYL,(10,2),RLSE)
//SYSUT13  DD UNIT=SYSDA,SPACE=(CYL,(10,2),RLSE)
//SYSUT14  DD UNIT=SYSDA,SPACE=(CYL,(10,2),RLSE)
//SYSUT15  DD UNIT=SYSDA,SPACE=(CYL,(10,2),RLSE)
//SYSLIN   DD DSN=&&LOADSET,
//            DISP=(MOD,PASS),
//            UNIT=SYSDA,
//            DSNTYPE=LIBRARY,
//            SPACE=(CYL,(1,1),RLSE)
//SYSIN    DD *
       IDENTIFICATION DIVISION.
       PROGRAM-ID. SMF15VBS.
       AUTHOR. KOLUSU (IBM/DFSORT)
       DATE-WRITTEN.  July 21, 2022
      ****************************************************************
      *  CREATE DATE: July 21, 2023                                  *
      *  AUTHOR     : Sri Hari Kolusu                                *
      *  VERSION    : 01.00                                          *
      ****************************************************************
      *This program will extract the SMS info from smf type 15       *
      ****************************************************************
      ****************************************************************
      * Change Log                                                   *
      ****************************************************************
      *  Date      |  Programmer       |   Description               *
      ****************************************************************
      *  2023-07-21| Kolusu            | Initial Version             *
      ****************************************************************
       ENVIRONMENT DIVISION.
       DATA DIVISION.
       WORKING-STORAGE SECTION.

       01 SMF15-OUT-RECORD.
          05 SMF15-RDW                PIC X(004).
          05 SMF15-HEADER             PIC X(040).
          05 SMF15-SEC-SIZE           PIC X(008).
          05 SMF15-TIOT               PIC X(016).
          05 SMF15-JFCB               PIC X(176).
          05 SMF15-SMSC-INFO.
             10 SMF15MCN              PIC X(008).
             10 SMF15DCN              PIC X(008).
             10 SMF15SCN              PIC X(008).

       01 WS-CHAR.
          02 WS-BYTE1                 PIC X(01).
          02 WS-BYTE2                 PIC X(01).
       01 WS-NUM REDEFINES WS-CHAR    PIC 9(02) COMP-5.

       01 WS-SKIP-OFFSET              PIC 9(02) COMP-5.
       01 WS-SMF15SDC                 PIC 9(02) COMP-5.
       01 WS-SMF15NUC                 PIC 9(02) COMP-5.
       01 WS-SMF15SUC                 PIC 9(02) COMP-5.
       01 WS-SMF15SET                 PIC 9(02) COMP-5.
       01 WS-SMF15HPS                 PIC 9(02) COMP-5.
       01 WS-SMF15EXT-SECTION.
          05 SMF15SXS                 PIC 9(02) COMP-5.
          05 SMF15EST-SUB-SECTION.
             10 SMF15ESL              PIC 9(02) COMP-5.
             10 FILLER                PIC X.
             10 SMF15STY              PIC X.

       01 WS-BITS                     PIC X(08).
       01 WS-BITS-N                   REDEFINES WS-BITS.
          10 WS-BITS-0                PIC 9.
          10 WS-BITS-1                PIC 9.
          10 WS-BITS-2                PIC 9.
          10 WS-BITS-3                PIC 9.
          10 WS-BITS-4                PIC 9.
          10 WS-BITS-5                PIC 9.
          10 WS-BITS-6                PIC 9.
          10 WS-BITS-7                PIC 9.

       01 WS-SMF15EXT-P               PIC 9(04) COMP-5.
       01 WS-CONS                     PIC 9(04) COMP-5
                                      VALUE 241.
       01 S-SMSINFO-FOUND             PIC X(01) VALUE 'N'.

       LINKAGE SECTION.

       01  RECORD-FLAGS               PIC 9(8) BINARY.
           88 FIRST-REC               VALUE 00.
           88 MIDDLE-REC              VALUE 04.
           88 END-REC                 VALUE 08.

       01 SMF15-RECORD.
          05 SMF15REC OCCURS 1 TO 32756 TIMES DEPENDING
                  ON SMF15-RECORD-LEN PIC X.

       01 OP-RECORD.
          05 OREC OCCURS 1 TO 280 TIMES DEPENDING
                     ON OP-RECORD-LEN PIC X.

       01 UNUSED1                     PIC 9(8) COMP-5.
       01 UNUSED2                     PIC 9(8) COMP-5.
       01 SMF15-RECORD-LEN            PIC 9(8) COMP-5.
       01 OP-RECORD-LEN               PIC 9(8) COMP-5.
       01 UNUSED3                     PIC 9(8) COMP-5.
       01 EXITAREA-LEN                PIC 9(4) COMP-5.
       01 EXITAREA.
          05 EAREA OCCURS 1 TO 256 TIMES DEPENDING
                      ON EXITAREA-LEN PIC X.

       PROCEDURE DIVISION USING RECORD-FLAGS
                              , SMF15-RECORD
                              , OP-RECORD
                              , UNUSED1
                              , UNUSED2
                              , SMF15-RECORD-LEN
                              , OP-RECORD-LEN
                              , UNUSED3
                              , EXITAREA-LEN
                              , EXITAREA.

           MOVE SPACES                TO SMF15-OUT-RECORD.
           MOVE  ZEROS                TO WS-SMF15NUC
                                         WS-SMF15SDC
                                         WS-SMF15NUC
                                         WS-SMF15SUC
                                         WS-SMF15SET
                                         WS-SMF15HPS

           IF END-REC
              MOVE 8                  TO RETURN-CODE
           ELSE
              PERFORM 1000-CONVERT-TO-NUM
              MOVE SMF15-RECORD(1:241)
                                      TO SMF15-OUT-RECORD
              PERFORM 1100-GET-SMSINFO
      *       MOVE 272                TO OP-RECORD-LEN
              MOVE LENGTH OF SMF15-OUT-RECORD
                                      TO OP-RECORD-LEN
              MOVE SMF15-OUT-RECORD   TO OP-RECORD
              MOVE 20                 TO RETURN-CODE
           END-IF
           GOBACK
           .
       1000-CONVERT-TO-NUM.

      * Convert SMF15SDC to numeric from character

           MOVE X'0000'                TO WS-CHAR
           MOVE SMF15-RECORD(41:1)     TO WS-BYTE2
           MOVE WS-NUM                 TO WS-SMF15SDC

      * Convert SMF15NUC to numeric from character

           MOVE X'0000'                TO WS-CHAR
           MOVE SMF15-RECORD(42:1)     TO WS-BYTE2
           MOVE WS-NUM                 TO WS-SMF15NUC

      * Convert SMF15SUC to numeric from character

           MOVE X'0000'                TO WS-CHAR
           MOVE SMF15-RECORD(43:1)     TO WS-BYTE2
           MOVE WS-NUM                 TO WS-SMF15SUC

      * Convert SMF15SET to numeric from character

           MOVE X'0000'                TO WS-CHAR
           MOVE SMF15-RECORD(44:1)     TO WS-BYTE2
           MOVE WS-NUM                 TO WS-SMF15SET

           MOVE FUNCTION BIT-OF(SMF15-RECORD(40:1))
                                       TO WS-BITS

           IF WS-BITS-4 = 1
              MOVE 20                  TO WS-SMF15HPS
           END-IF
           .

       1100-GET-SMSINFO.

      * The Job step information is part of extended section.
      * We need to calculate the offset for extended section.
      * The formula is as follows.

      * Size of header section               (040 bytes )  +
      * Section sizes                        (008 bytes )  +
      * Tiot section                         (016 bytes )  +
      * JFCB section                         (176 bytes )  +
      *                                     = 240          +
      * next section position                 001          +
      * (num ucb sec (SMF15NUC) X size of ucb (SMF15SUC))  +
      * Size of ISAM Section (usually zero)                +
      * Size of Hiper batch sec if existed (20 bytes )     +
      * (The existence of Hiper batch section can be found
      *  using the SMF15RIN 2nd byte 4th bit.)

      * We got all the numeric values and will now calculate
      * the offset/position of the extended section which contains
      * job step information section.

           COMPUTE WS-SMF15EXT-P   = WS-CONS                    +
                                     WS-SMF15SDC                +
                                    (WS-SMF15NUC * WS-SMF15SUC) +
                                     WS-SMF15SET                +
                                     WS-SMF15HPS




      * The extended section offset is now calculated. we need to
      * check if the subsection we find is indeed the SMS class
      * info section.  If SMF15STY = X'02' then we have the
      * the right section else we need to loop around to find
      * sms class info section.

            MOVE SMF15-RECORD(WS-SMF15EXT-P : 6)
                                       TO WS-SMF15EXT-SECTION

            MOVE 'N'                   TO S-SMSINFO-FOUND
            MOVE +6                    TO WS-SKIP-OFFSET


            PERFORM UNTIL S-SMSINFO-FOUND = 'Y'
                 OR WS-SMF15EXT-P >= SMF15-RECORD-LEN
                 IF SMF15STY = X'02'
                    MOVE SMF15-RECORD(WS-SMF15EXT-P +
                                      WS-SKIP-OFFSET : 28)
                                       TO SMF15-SMSC-INFO
                    MOVE 'Y'           TO S-SMSINFO-FOUND
                 ELSE
                    COMPUTE WS-SMF15EXT-P = WS-SMF15EXT-P +
                                            SMF15ESL + 2
                    INITIALIZE SMF15EST-SUB-SECTION
                    MOVE SMF15-RECORD(WS-SMF15EXT-P : 4)
                                       TO SMF15EST-SUB-SECTION
                    MOVE +4            TO WS-SKIP-OFFSET
                 END-IF
            END-PERFORM
            .
/*
//***************************************************************
//* Link edit the program to be used as E35 Exit to DFSORT      *
//***************************************************************
//STEP0200 EXEC PGM=IEWBLINK,COND=(0,LT),REGION=0M
//SYSLIB   DD DISP=SHR,DSN=CEE.SCEELKED
//         DD DISP=SHR,DSN=CEE.SCEELKEX
//SYSPRINT DD SYSOUT=*
//SYSUT1   DD UNIT=SYSALLDA,SPACE=(CYL,(1,1))
//SYSLIN   DD DSN=&&LOADSET,DISP=(OLD,DELETE)
//         DD DDNAME=SYSIN
//SYSLMOD  DD DSN=&&PGMLIB,DISP=(MOD,PASS),
//            DSNTYPE=LIBRARY,SPACE=(CYL,(1,1,1),RLSE)
//SYSIN    DD *
  ENTRY SMF15VBS
  NAME  SMF15VBS(R)
/*
//***************************************************************
//* Generate report of SMF15 records with sms information       *
//* Storclas SMF15SCN = Spaces                                  *
//***************************************************************
//GENRPT   EXEC PGM=ICETOOL,COND=(0,LT)
//EXITC    DD DISP=(OLD,PASS),DSN=&&PGMLIB
//TOOLMSG  DD SYSOUT=*
//SYSOUT   DD SYSOUT=*
//DFSMSG   DD SYSOUT=*
//SYMNAMES DD *
SMF15RTY,006,01,BI            $ Record Type
SMF15TME,*,4,TM1              $ Time
SMF15DTE,*,4,DT1              $ Date
SMF15JBN,019,08,CH            $ Job Name
SMFTIOE5,057,08,CH            $ DD Name
SMF15DSN,069,44,CH            $ Dataset Name
POSITION,249
SMF15MCN,*,08,CH              $ Management class name
SMF15DCN,*,08,CH              $ Dataclass name
SMF15SCN,*,08,CH              $ Storage class name
//INPTSMF  DD DISP=SHR,DSN=&SMFIN
//TEMPSMF  DD DSN=&&TSMF,DISP=(,PASS),SPACE=(CYL,(300,100),RLSE)
//REPORT   DD SYSOUT=*
//TOOLIN   DD *
  COPY FROM(INPTSMF) TO(TEMPSMF) USING(CTL1)
  DISPLAY FROM(TEMPSMF) LIST(REPORT)                          -
         TITLE('SMF 14 Input or RDBACK Data Set report') PAGE -
         HEADER('SMF#')     ON(SMF15RTY,A1)                   -
         HEADER('DATE')     ON(SMF15DTE,E'9999/99/99')        -
         HEADER('TIME')     ON(SMF15TME,E'99:99:99')          -
         HEADER('Jobname')  ON(SMF15JBN)                      -
         HEADER('DSN Name') ON(SMF15DSN)                      -
         HEADER('DD Name')  ON(SMFTIOE5)                      -
         HEADER('Mangement class name') ON(SMF15MCN)          -
         HEADER('Data class name') ON(SMF15DCN)               -
         HEADER('Storage class name') ON(SMF15SCN)
/*
//CTL1CNTL DD *
  OPTION COPY,VLSCMP,SPANINC=RC4
  INCLUDE COND=(06,1,BI,EQ,15)
  MODS E35=(SMF15VBS,32756,EXITC,C)
  OUTFIL INCLUDE=(SMF15SCN,EQ,C' ')
/*


Thanks,
Kolusu

-----Original Message-----
From: IBM Mainframe Discussion List <IBM-MAIN@LISTSERV.UA.EDU> On Behalf Of Sri 
h Kolusu
Sent: Friday, July 21, 2023 9:18 AM
To: IBM-MAIN@LISTSERV.UA.EDU
Subject: [EXTERNAL] Re: Need DFSORT control statements to extract data from 
smf15 with storclas blank

>> I am not a DFSort expert but we have a requirement to extract datasets which 
>> has storclas (SMF15SCN) = blank.

Shivang Sharma,

SMF15SCN is a part of Extended Information Segment which does NOT have a 
standard offset.  You need to dynamically calculate the offset based on  the 
formula  244 + SMF15SDC + (SMF15NUC * SMF15SUC) + SMF15_HIPER_SIZE + SMF15SET).

Unfortunately DFSORT cannot do it , so you need to write an exit in language of 
your choice (COBOL, ASM...) and get the SMF 15 record.

Thanks,
Kolusu
DFSORT Development


----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions, send email to 
lists...@listserv.ua.edu<mailto:lists...@listserv.ua.edu> with the message: 
INFO IBM-MAIN


----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN

Reply via email to