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