MVS TOOLS AND TRICKS OF THE TRADE July 1990 Sam Golob MVS Systems Programmer sbgolob@cbttape.org PRE-PROCESSING SMPPTFIN DATA (NOT DEPENDENT ON SMP/E) This month, I'd like to deal with an area in which many people think there is not much room for improvement. I sharply disagree, and I hope that we can stimulate some activity and inventiveness in this area among our readership. The topic of discussion comes in two parts. The first part deals with massaging SMP inputs (SMPPTFIN-format files) and reporting on their contents, independent of real SMP/E processing. The second part deals with notions of feeding the outputs of SMP/E runs back into subsequent SMP/E runs. I have done some work in both of these categories, but I feel there is much more to be done of value to benefit all of us. I wish to begin the discussion with a focus on a CBT-tape file, File 118, which contains several programs: an assembler program called PUTXREF from Jerry Lawson of the Hartford Insurance Group, and several COBOL programs written by me. There are several types of SMPPTFIN processing that can be done with these programs. I'll try, within the scope of this month's writing, to cover some different things that can be done. The purpose of Jerry Lawson's PUTXREF program is to take any SMPPTFIN file, containing PTFs, APARs, USERMODs, or FUNCTIONs, and produce a report sorting all of these SYSMODS by their owning FMID (a product ownership designation which is used by SMP/E processing). See Figure One for a sample of what this report looks like. Thus, given a collection of maintenance SYSMODs in SMP format, it is easily and practially possible to determine which products this maintenance is for, without involving any real SMP processing at all. Practically speaking, you can run the PUTXREF report against a PUT tape file, or a CBIPO or CBPDO SMPMCS file, to determine if the proper profile of maintenance for program products was shipped to your installation by IBM. It is useful to have this FMID report BEFORE RECEIVEing the maintenance on your system, because it would be nice to know that the product mix was correctly shipped to you. Often, profile errors occur in such shipments, and the right maintenance PTFs don't get to you. Early notification of this would certainly be useful for the timely correction of IBM's mistakes, BEFORE your system is affected. I haven't stopped at Jerry's implementation of pre-SMP FORFMID processing. I have written a COBOL post-processor to the PUTXREF output report called SMPFMUPV, which converts the FMID-sorted report of SYSMODs into an actual CARD-IMAGE FILE of SYSMOD numbers sorted by owning FMID, with all duplicate SYSMOD numbers removed. This makes the list of SYSMODs suitable for input into a subsequent SMP job. See Figure Two for an sample illustration of what this file looks like. See Figure Three for sample JCL that will run the entire processing in one stream. There are obviously many uses for such information. Large PTF files can be analyzed for their content, BEFORE they are used. Your installation does not have to make a commitment to installing a collection of system maintenance until a pre-analysis of the maintenance has been performed, and the scope of the contents determined to the satisfaction of the systems staff. Several kinds of IBM shipping errors can be immediately spotted, and corrections ordered without unnecessary delay. We can suggest a few miscellaneous applications at this point. For one example: PTF tape shipments can be routinely pre-analyzed for FMID mix at the time they arrive. Older product releases that are being gradually "stabilized" can be pointed out and noted, through the now "obvious" reduction in the number of PTF fixes belonging to their FMIDs. Another example: Better control in single-product maintenance upgrades can be attained, if pre-knowledge of all maintenance PTF numbers belonging to that product has been gathered in advance of any SMP run. A third example: Entire PTS datasets can be analyzed for FMID consideration of their contents, to determine if REJECT processing for components of obsolete products should be carried out (see Figure Four for an illustration of JCL to do this). Given the type of information that we're gathering, you, our esteemed readers, can figure out other handy uses for such data, and neater ways to deal with it. I'll go just another step, to show you how I currently use these programs in my own shop. When a PUT tape comes in, I run four jobs. The first job copies the first ten files of the tape to disk. The second job does a TAPEMAP (CBT tape File 299) of the PUT tape, followed by a PUTXREF run to produce a FORFMID report for the PTFs on the tape. The two TAPEMAP reports and the PUTXREF report are copied to three members of a partitioned dataset having LRECL=133. The names of these members contain the PUT level within them for later reference. The third job is essentially a SMPFMUPV run that converts the PUTXREF report for the PUT tape into a card-image "FORFMID" file. Figure Three illustrates a combination of my second and third jobs against a PUT tape. Finally, the fourth job converts the entire input SMPPTFIN file into a partitioned dataset with each PTF separated as a separate member for easy browsing. This last job will be the final subject of our article, but I want to first explain the practical usefulness of the first three jobs to me. By collecting the TAPEMAP and PUTXREF reports into one PDS, I can make use of the fabulous "PDS program product" (CBT tape files 182, 296, and 112) or its vendor-supported extension called PDS/E. The "PDS" program products have a "global string find" capability over an entire partitioned dataset, or over any subcollection of its members. By looking for all occurrences of an FMID name, or of a given PTF number, I can quickly do all the necessary research that I need, before actually attempting to put the maintenance on my system. See Figure Five for a small illustration. Our final topic for discussion this month will be several methods for the convenient browsing of individual PTFs and their cover letters. Our methods will cover both PTFs that have already been RECEIVED by SMP, and also PTFs that have not yet been RECEIVED. To browse PTFs and other SYSMODs that have been RECEIVED by SMP, one need merely refer to the SMPPTS dataset, either for an SMP/E system, or even for an old SMP4 system. There is a handy TSO "browser" command called "REVIEW", which does not need ISPF in order to work. Two versions of REVIEW are found on the CBT tape. The earlier version is on File 296, and a later, improved version is on File 134 of any recent level of that tape. Either version can be employed in a simple CLIST (Figure Six) that will accomplish the convenient "browse" of a RECEIVED SYSMOD. Looking at a not-yet-RECEIVED SYSMOD is much trickier, because such a SYSMOD is usually embedded in a large SMPPTFIN-format sequential file that can contain several hundred thousand card-images and hundreds of separate SYSMODs. Anyone familiar with the usual tools will know that such a file is hard or impossible to negotiate with a "browsing" or "editing" tool. To chop this file into easy-to-find pieces, I have written a quick-and-dirty COBOL program that works well. The name of this program is SMPUPD, and it can also be found on File 118 of the CBT tape. The SMPUPD program essentially makes a duplicate temporary copy of an SMPPTFIN-format file, but with two subtle changes. First, before any card-image beginning with ++PTF, ++APAR, ++USERMOD, or ++FUNCTION, a new IEBUPDTE-format card is inserted. This card has the format: ./ ADD NAME=sysmdnm (sysmdnm is the number of the SYSMOD) The second change done to the copy of the original file, is that any "./" string found in columns 1-2 of the original file, is changed to a different string, "><". The PDSLOAD program (CBT tape File 316) or the IEBUPDTE program is then run against the new copy of the original file, to break it up into partitioned dataset members. An advantage of PDSLOAD over IEBUPDTE is that in the reloading process, the embedded "><" strings can be reconverted back to the original "./" strings, without having to run an additional utility step. See Figure Seven for a JCL example to illustrate how this processing works in practice. Partitioned dataset members consisting of individual PTFs are much easier to browse (or edit) than large sequential SMPPTFIN files. A final twist in the "partitioning" of an SMPPTFIN file is provided by the "PDS program product" again (if it is at version 8.0 or higher, or if it is "PDS/E"). This is that product's ability to add ISPF statistics to partitioned dataset members THROUGH A BATCH JOB, and also ITS ABILITY TO RESTORE DELETED MEMBERS IN THAT SAME JOB STEP. See the bottom of Figure Seven. Sometimes, duplicate PTFs can be shipped by IBM in the same file. This will cause one member to be created by IEBUPDTE or PDSLOAD in the output partitioned dataset, which will be deleted later when the second member of the same name is stowed. To remedy the loss caused by such deletion, the PDS(/E) subcommand: RESTORE $PTF REPEAT NOPROMPT will automatically resuscitate all deleted members, and supply these with names $PTF0001, $PTF0002, etc. that will place them at the beginning of a directory sort. See Figure Ten for a partial member list from such a "partitionized" PTF file that was created from a PUT tape file. It will quickly become clear how useful this sort of processing is. Well that's it for now. I hope this discussion will improve the state of system maintenance in your shop in some way. Actually, I haven't spoken of all my ideas on this subject yet. Maybe we can deal with it some more next month. Good luck. See you again soon. * * * * * * * * * * * * * * * * * * * * * Figure Two. Output of the SMPFMUPV Program, operating on the Report in Figure One. ./ ADD NAME=EBB1102 UY43678 /* FMID - EBB1102 - FROM PUT TAPE - DONE 03/13/90 */ UY43689 /* FMID - EBB1102 - FROM PUT TAPE - DONE 03/13/90 */ ./ ADD NAME=EER3300 UR28142 /* FMID - EER3300 - FROM PUT TAPE - DONE 03/13/90 */ UR28329 /* FMID - EER3300 - FROM PUT TAPE - DONE 03/13/90 */ ./ ADD NAME=FDZ1B02 UL59377 /* FMID - FDZ1B02 - FROM PUT TAPE - DONE 03/13/90 */ UL61567 /* FMID - FDZ1B02 - FROM PUT TAPE - DONE 03/13/90 */ UL61573 /* FMID - FDZ1B02 - FROM PUT TAPE - DONE 03/13/90 */ UL61579 /* FMID - FDZ1B02 - FROM PUT TAPE - DONE 03/13/90 */ UL64863 /* FMID - FDZ1B02 - FROM PUT TAPE - DONE 03/13/90 */ ./ ADD NAME=FDZ1192 UL58610 /* FMID - FDZ1192 - FROM PUT TAPE - DONE 03/13/90 */ UL61179 /* FMID - FDZ1192 - FROM PUT TAPE - DONE 03/13/90 */ ./ ADD NAME=FER3320 UR28188 /* FMID - FER3320 - FROM PUT TAPE - DONE 03/13/90 */ ./ ADD NAME=HAF1220 UY45100 /* FMID - HAF1220 - FROM PUT TAPE - DONE 03/13/90 */ UY90513 /* FMID - HAF1220 - FROM PUT TAPE - DONE 03/13/90 */ ./ ADD NAME=HAF1228 UY44632 /* FMID - HAF1228 - FROM PUT TAPE - DONE 03/13/90 */ UY44633 /* FMID - HAF1228 - FROM PUT TAPE - DONE 03/13/90 */ UY44634 /* FMID - HAF1228 - FROM PUT TAPE - DONE 03/13/90 */ UY44650 /* FMID - HAF1228 - FROM PUT TAPE - DONE 03/13/90 */ UY44651 /* FMID - HAF1228 - FROM PUT TAPE - DONE 03/13/90 */ UY44747 /* FMID - HAF1228 - FROM PUT TAPE - DONE 03/13/90 */ UY44879 /* FMID - HAF1228 - FROM PUT TAPE - DONE 03/13/90 */ UY44948 /* FMID - HAF1228 - FROM PUT TAPE - DONE 03/13/90 */ ./ ADD NAME=HCI1702 UL56230 /* FMID - HCI1702 - FROM PUT TAPE - DONE 03/13/90 */ UL59252 /* FMID - HCI1702 - FROM PUT TAPE - DONE 03/13/90 */ - - - - - - continued - - - - - - - - * * * * * * * * * * * * * * * * * * * * * Figure Three. A sample jobstream to do SMP pre-processing of PUT tape 9001. //TSTBFP2M JOB (TS,2322),'TECH.SUPP-SAM.GOLOB',CLASS=M,NOTIFY=TSTBSSG, // MSGLEVEL=(1,1),MSGCLASS=T TYPRUN=HOLD //* //**************************************************************** //* OUTPUT OF TAPEMAP PROGRAM SENT TO TST.PTFTAPE.MAPS * //**************************************************************** //*********************************************************** //* THIS JOBSTREAM MAPS PUT TAPES OR PTF TAPES * //* AND ALSO CROSS-REFERENCES THEM BY FMID. THREE * //* OUTPUTS ARE WRITTEN TO THE PARTITIONED DATASET * //* 'TST.PTFTAPE.MAPS'. YOU CAN FIND OUT WHAT'S * //* ON ANY PUT TAPE BY INQUIRING ON THIS PDS. * //* * //* THE GLOBAL FIND CAPABILITY OF PDS VERSION 8.x * //* IS EXTREMELY HELPFUL TO LOCATE INDIVIDUAL PTFS, * //* AND ALSO, ALL OCCURRENCES OF MAINTENANCE FOR * //* PTFS BELONGING TO A GIVEN FMID. * //*********************************************************** //TAPEMAP PROC VOL=XXXXXX,M='M',DRIVE=TAPE,INBLK=7200,LA=01,X='X' //TAKEMAP EXEC PGM=TAPEMAP //STEPLIB DD DSN=TST.TSO.CMDLIB,DISP=SHR //SYSPRINT DD DSN=&&TMP,DISP=(NEW,PASS,DELETE),UNIT=SYSDA, // SPACE=(CYL,(3,3)),DCB=(RECFM=FBA,LRECL=133,BLKSIZE=3059) //SYSPRNT2 DD DSN=&&TMP1,DISP=(NEW,PASS,DELETE),UNIT=SYSDA, // SPACE=(CYL,(3,3)),DCB=(RECFM=FBA,LRECL=133,BLKSIZE=3059) //SYSUT1 DD UNIT=&DRIVE,VOL=(PRIVATE,,,,SER=(&VOL)), // DISP=SHR,LABEL=(,BLP,EXPDT=98000) //* //RESET EXEC PGM=IEFBR14,REGION=4096K //* //XREF2 EXEC PGM=PUTXREF,REGION=4096K //STEPLIB DD DSN=TST.TSO.CMDLIB,DISP=SHR //INPUT DD UNIT=&DRIVE,VOL=(PRIVATE,RETAIN,,,SER=(&VOL)), // DISP=SHR,LABEL=(&LA,NL,EXPDT=98000),DSN=PTFS, // DCB=(RECFM=FB,LRECL=80,BLKSIZE=&INBLK),FREE=CLOSE //SORTIN DD DSN=&&S&VOL,DISP=(NEW,PASS),UNIT=3380, // DCB=(RECFM=FB,LRECL=15,BLKSIZE=4095), // SPACE=(CYL,(25,20)),VOL=SER=WORK02 //SORTOUT DD DSN=&&S&VOL,DISP=(SHR,PASS),VOL=REF=*.SORTIN //TITLES DD DISP=SHR,DSN=TSTBSSG.A.CNTL(FMIDTBL) //SYSUDUMP DD SYSOUT=* //SYSOUT DD SYSOUT=* //SYSPRINT DD SYSOUT=* //PRINTER DD DSN=&&TMP2,DISP=(NEW,PASS,DELETE),UNIT=SYSDA, // SPACE=(CYL,(3,3)),DCB=(RECFM=FBA,LRECL=133,BLKSIZE=3059) //SYSIN DD DISP=SHR,DSN=TSTBSSG.A.CNTL(PUTXSORT) //* //COPYMAP EXEC PGM=DSCOPY //SYSPRINT DD SYSOUT=* //IN1 DD DISP=(OLD,DELETE),DSN=&&TMP //IN2 DD DISP=(OLD,DELETE),DSN=&&TMP1 //IN3 DD DISP=(OLD,DELETE),DSN=&&TMP2 //OUT1 DD DISP=SHR,DSN=TST.PTFTAPE.MAPS(&VOL) //OUT2 DD DISP=SHR,DSN=TST.PTFTAPE.MAPS(&VOL&M) //OUT3 DD DISP=SHR,DSN=TST.PTFTAPE.MAPS(&VOL&X) //* // PEND //* //FMIDFILE PROC VL=XXXXXX,SUFF='X' //******************************************************************// //* PUTXREF PROGRAM FROM CONNECTICUT BANK AND TRUST COMPANY *// //* MVS TAPE -- FILE 118 *// //******************************************************************// //S01FMUPD EXEC PGM=SMPFMUPD <=== FB-133 version of SMPFMUPV //STEPLIB DD DISP=SHR,DSN=TSTBSSG.LOAD //SYSPRINT DD SYSOUT=* //SYSUT1 DD DISP=SHR,DSN=TST.PTFTAPE.MAPS(&VL&SUFF) //SYSUT2 DD DISP=SHR,DSN=TST.PTFTAPE.FORFMID(&VL) //SYSABEND DD SYSOUT=A,HOLD=YES // PEND //* //MAP001 EXEC TAPEMAP,VOL=TM9001 //XREF001 EXEC FMIDFILE,VL=TM9001 * * * * * * * * * * * * * * * * * * * * * Figure Four. Jobstream that "sequentializes" an entire PTS partitioned dataset and runs the SMPPTFIN-format output through our FMID processing. This is done without the use of SMP. It completely organizes all owned SYSMODS by owning FMID. //TSTBHMOO JOB (TS,2322),'TECH.SUPP-SAM.GOLOB',CLASS=T,NOTIFY=TSTBSSG, // MSGLEVEL=(1,1),MSGCLASS=T TYPRUN=HOLD //* //******************************************************************// //* PTFS BY FMID - This is a run against an entire SMPPTS, *// //* to produce a card file of PTFs sorted by FMID. *// //******************************************************************// //* //* ------- Filter out Control Members of SMP4 SMPPTS ------ * //* ------- This step is not necessary for SMP/E SMPPTS ------ * //COPYPTS EXEC PGM=IKJEFT01,REGION=4096K,DYNAMNBR=50 //STEPLIB DD DISP=SHR,DSN=TST.TSO.CMDLIB // DD DISP=SHR,DSN=IPO1.LINKLIB // DD DISP=SHR,DSN=TSP.TSO.CMDLIB //SYSPRINT DD SYSOUT=* //SYSTSPRT DD SYSOUT=* //SYSTERM DD SYSOUT=* //SYSTSIN DD * PDSE 'TSY2.SMPPTS' XISPMODE COPY A:Z 'TSTBSSG.SMALL.SMPPTS' NEW VOL(WORK01) C 'TSTBSSG.SMALL.SMPPTS' FIXPDS RELEASE END /* //* //* ------- Use OFFLOAD Program to create a sequential ------ * //* ------- file in SMPPTFIN format from the PDS members. ------ * //DSPEQMOD EXEC PGM=OFFLOAD,REGION=5000K //STEPLIB DD DISP=SHR,DSN=TST.TSO.CMDLIB //SYSPRINT DD SYSOUT=* //IN DD DISP=SHR,DSN=TSTBSSG.SMALL.SMPPTS //OUT DD DSN=TSTBSSG.SEQ.SMPPTS,DISP=(NEW,CATLG,DELETE), // UNIT=3380,VOL=SER=WORK02,SPACE=(TRK,(3900,300),RLSE), // DCB=(RECFM=FB,DSORG=PS,LRECL=80,BLKSIZE=3120) //SYSIN DD * O I=IN,O=OUT //* //* ------- Run the PUTXREF program to make XREF report. ------ * //S01XREF EXEC PGM=PUTXREF,REGION=4096K //STEPLIB DD DSN=TST.TSO.CMDLIB,DISP=SHR //INPUT DD DISP=SHR,DSN=TSTBSSG.SEQ.SMPPTS //SORTIN DD DSN=&&SORT,DISP=(NEW,PASS),UNIT=3380, // DCB=(RECFM=FB,LRECL=15,BLKSIZE=4095), // SPACE=(CYL,(35,50)) //SORTOUT DD DSN=&&SORT,DISP=(SHR,PASS),VOL=REF=*.SORTIN //SORTWK01 DD UNIT=SYSDA,SPACE=(CYL,(10,10)) //SORTWK02 DD UNIT=SYSDA,SPACE=(CYL,(10,10)) //SORTWK03 DD UNIT=SYSDA,SPACE=(CYL,(10,10)) //SORTWK04 DD UNIT=SYSDA,SPACE=(CYL,(10,10)) //TITLES DD DISP=SHR,DSN=TSTBSSG.A.CNTL(FMIDTBL) //PRINTER DD DSN=&TEMP1,DISP=(NEW,PASS),UNIT=3380, // DCB=(RECFM=VBA,LRECL=137,BLKSIZE=141), // SPACE=(TRK,(90,90)) //SYSUDUMP DD SYSOUT=* //SYSPRINT DD SYSOUT=* //SYSOUT DD SYSOUT=* //SYSIN DD * SORT FIELDS=(9,7,CH,A,1,7,CH,A) /* //*****************************************************************// //* ------- Run the SMPFMUPV program to create card file ------ * //* ------- of all of the SYSMODS in the PTS, sorted by ------ * //* ------- FMID. Identify the file by the date run. ------ * //S02FMUPD EXEC PGM=SMPFMUPV //STEPLIB DD DISP=SHR,DSN=TSTBSSG.LOAD //SYSPRINT DD SYSOUT=* //SYSUT1 DD DSN=&TEMP1,DISP=(OLD,PASS) //SYSUT2 DD DISP=SHR,DSN=TST.VSGEN.T8907.PUTPDS(PTS89312) //SYSABEND DD SYSOUT=A,HOLD=YES * * * * * * * * * * * * * * * * * * * * * Figure Five. A search through past PUT tapes for all recent PTFs affecting the Assembler H version 2 product. This product has an FMID designation of HAH2100. - DSN=TST.PTFTAPE.FORFMID,VOL=SER=PAGE01 MEM=: >fi : /hah2100/ ** FIND TM8703 ./ ADD NAME=HAH2100 UL07954 /* FMID - HAH2100 - FROM PUT TAPE - DONE 05/12/87 */ UL08162 /* FMID - HAH2100 - FROM PUT TAPE - DONE 05/12/87 */ UL08349 /* FMID - HAH2100 - FROM PUT TAPE - DONE 05/12/87 */ 281 lines in this member ** FIND TM8705 ./ ADD NAME=HAH2100 UL08161 /* FMID - HAH2100 - FROM PUT TAPE - DONE 08/06/87 */ UL11177 /* FMID - HAH2100 - FROM PUT TAPE - DONE 08/06/87 */ UL11296 /* FMID - HAH2100 - FROM PUT TAPE - DONE 08/06/87 */ UL11345 /* FMID - HAH2100 - FROM PUT TAPE - DONE 08/06/87 */ UL11737 /* FMID - HAH2100 - FROM PUT TAPE - DONE 08/06/87 */ UL11985 /* FMID - HAH2100 - FROM PUT TAPE - DONE 08/06/87 */ 263 lines in this member ** FIND TM8709 ./ ADD NAME=HAH2100 UL17396 /* FMID - HAH2100 - FROM PUT TAPE - DONE 01/12/88 */ UL19910 /* FMID - HAH2100 - FROM PUT TAPE - DONE 01/12/88 */ UL90092 /* FMID - HAH2100 - FROM PUT TAPE - DONE 01/12/88 */ 201 lines in this member ** FIND TM8803 ./ ADD NAME=HAH2100 UL25203 /* FMID - HAH2100 - FROM PUT TAPE - DONE 05/16/88 */ 263 lines in this member ** FIND TM8806 ./ ADD NAME=HAH2100 UL31583 /* FMID - HAH2100 - FROM PUT TAPE - DONE 10/24/88 */ UL33954 /* FMID - HAH2100 - FROM PUT TAPE - DONE 10/24/88 */ UL90149 /* FMID - HAH2100 - FROM PUT TAPE - DONE 10/24/88 */ 269 lines in this member ** FIND TM8808 ./ ADD NAME=HAH2100 UL38085 /* FMID - HAH2100 - FROM PUT TAPE - DONE 01/26/89 */ 256 lines in this member ** FIND TM8901 ./ ADD NAME=HAH2100 UL41857 /* FMID - HAH2100 - FROM PUT TAPE - DONE 03/13/89 */ 289 lines in this member ** FIND TM8902 ./ ADD NAME=HAH2100 UL41964 /* FMID - HAH2100 - FROM PUT TAPE - DONE 05/01/89 */ 225 lines in this member ** FIND TM8906 ./ ADD NAME=HAH2100 UL54652 /* FMID - HAH2100 - FROM PUT TAPE - DONE 10/30/89 */ 217 lines in this member ** FIND TM8907 ./ ADD NAME=HAH2100 UL55737 /* FMID - HAH2100 - FROM PUT TAPE - DONE 12/07/89 */ 159 lines in this member ** FIND TM8908 ./ ADD NAME=HAH2100 UL59647 /* FMID - HAH2100 - FROM PUT TAPE - DONE 01/10/90 */ 79 lines in this member * * * * * * * * * * * * * * * * * * * * * Figure Six. A simple CLIST that allows a convenient browse of RECEIVED SYSMODs through the use of the REVIEW TSO command and the PDS command processor. Individual PTFs may be browsed, or a range of PTF numbers can be explored or examined. PROC 1 MEM CLEAR NOD: - DO IF &STR(&MEM) = R THEN GOTO CSYSR IF &STR(&MEM) = RR THEN GOTO CSYSRR REVIEW 'TSY2.SMPPTS(&MEM)' EXIT END CSYSR: - DO WRITE REPLY WITH RANGE OF MEMBER SEARCH READ DD PDSE 'TSY2.SMPPTS' XISPMODE DISPL &STR(&DD) EN END EXIT CSYSRR: - DO WRITE REPLY WITH RANGE OF MEMBER SEARCH - WE LOOK AT EACH MEMBER. WRITE FOR THIS PROCESS USE A COLON TO SEPARATE RANGE DELIMITERS. READ DD PDSE 'TSY2.SMPPTS' XISPMODE MEM &STR(&DD) REVIEW * EN END * * * * * * * * * * * * * * * * * * * * * Figure Seven. SMPUPD Jobstream which breaks a PUT tape file into a convenient-to-browse PDS. Please note the step at the end which runs the "PDS" command processor under TSO-in-Batch. The result achieved is that the final partitioned dataset has ISPF statistics and shows all duplicated PTFs from the input file. All members are available for the user to look at, or edit. //TSTBHMOO JOB (TS,2322),'TECH.SUPP-SAM.GOLOB',CLASS=M,NOTIFY=TSTBSSG, // MSGLEVEL=(1,1),MSGCLASS=T TYPRUN=HOLD //******************************************************************// //* SMP - PRODUCTION PUT MAINTENANCE - PUT 9001 *// //* SMPPTFIN CONVERSION TO PDS FOR REFERENCING. *// //******************************************************************// //S1PTFADD EXEC PGM=SMPUPD //STEPLIB DD DISP=SHR,DSN=TSTBSSG.LOAD //SYSPRINT DD SYSOUT=* //SYSUT1 DD DISP=SHR,DSN=TST.VSGEN.PUT9001.PTFS //SYSUT2 DD DISP=(,PASS),DSN=&&TEMP,UNIT=SYSDA, // DCB=(RECFM=FB,LRECL=80,BLKSIZE=6160),SPACE=(TRK,(300,120)) //SYSABEND DD SYSOUT=A,HOLD=YES //* //S2UPDTE EXEC PGM=PDSLOAD,PARM='UPDTE(><)' //STEPLIB DD DISP=SHR,DSN=TST.TSO.CMDLIB //SYSPRINT DD SYSOUT=* //SYSUT1 DD DSN=&&TEMP,DISP=(OLD,PASS) //SYSUT2 DD DSN=TST.VSGEN.PUT9001.PTFPDS,DISP=(NEW,CATLG,DELETE), // UNIT=3380,VOL=SER=WORK02,SPACE=(TRK,(300,120,137)), // DCB=(RECFM=FB,LRECL=80,BLKSIZE=3120) //* //S3LISTV EXEC PGM=IKJEFT01,REGION=4096K,DYNAMNBR=50 //STEPLIB DD DISP=SHR,DSN=TST.TSO.CMDLIB // DD DISP=SHR,DSN=IPO1.LINKLIB // DD DISP=SHR,DSN=TSP.TSO.CMDLIB //SYSPRINT DD SYSOUT=* //SYSTSPRT DD SYSOUT=* //SYSTERM DD SYSOUT=* //SYSTSIN DD * PDS 'TST.VSGEN.PUT9001.PTFPDS' AT : ADDSTATS USERID(PUT9001) VER(01) RESTORE $PTF REPEAT NOPROMPT AT $PTF: ADDSTATS USERID(REP9001) VER(01) FIXPDS RELEASE END /* // * * * * * * * * * * * * * * * * * * * * * Figure Eight. Member list of PTFs which have been separated out of a large SMPPTFIN file (of over 156,000 card-images). The result was achieved using my SMPUPD program. This display happens to be a PDS/E member list display. The "public" PDS product has a similar facility. ------------------------- MEMLIST Source Member List 1 --------- ROW 1 OF 186 COMMAND ===> SCROLL ===> CSR Enter an ISPF command, a PDS/E subcommand or a special control code: FUNCTION FEATURES CODES NAVIGATE DSNCMDS MEMCMDS DEFAULTS OTHER - DSN=TST.VSGEN.PUT9001.PTFPDS,VOL=SER=WORK02 MEM=: ------------------------- CMD NAME DATA VER.MOD CREATED LAST MODIFIED SIZE INIT ID $PTF0001 01.00 90/04/19 90/04/19 18:43 1533 1533 REP9001 UL56230 01.00 90/04/19 90/04/19 18:41 243 243 PUT9001 UL58610 01.00 90/04/19 90/04/19 18:41 6226 6226 PUT9001 UL59252 01.00 90/04/19 90/04/19 18:41 181 181 PUT9001 UL59295 01.00 90/04/19 90/04/19 18:41 117 117 PUT9001 UL59377 01.00 90/04/19 90/04/19 18:41 854 854 PUT9001 UL59673 01.00 90/04/19 90/04/19 18:41 54 54 PUT9001 UL59677 01.00 90/04/19 90/04/19 18:41 520 520 PUT9001 UL59957 01.00 90/04/19 90/04/19 18:41 531 531 PUT9001 UL60112 01.00 90/04/19 90/04/19 18:41 144 144 PUT9001 UL60747 01.00 90/04/19 90/04/19 18:41 204 204 PUT9001 UL61061 01.00 90/04/19 90/04/19 18:41 52351 52351 PUT9001 UL61179 01.00 90/04/19 90/04/19 18:41 6229 6229 PUT9001 UL61567 01.00 90/04/19 90/04/19 18:42 205 205 PUT9001 UL61573 01.00 90/04/19 90/04/19 18:42 213 213 PUT9001 UL61579 01.00 90/04/19 90/04/19 18:42 121 121 PUT9001 UL61889 01.00 90/04/19 90/04/19 18:42 211 211 PUT9001 UL61897 01.00 90/04/19 90/04/19 18:42 428 428 PUT9001 UL61915 01.00 90/04/19 90/04/19 18:42 205 205 PUT9001 UL61917 01.00 90/04/19 90/04/19 18:42 249 249 PUT9001 UL61919 01.00 90/04/19 90/04/19 18:42 1665 1665 PUT9001 UL61922 01.00 90/04/19 90/04/19 18:42 193 193 PUT9001 UL62039 01.00 90/04/19 90/04/19 18:42 223 223 PUT9001 UL62051 01.00 90/04/19 90/04/19 18:42 1533 1533 PUT9001 UL62061 01.00 90/04/19 90/04/19 18:42 1094 1094 PUT9001 UL62099 01.00 90/04/19 90/04/19 18:42 85 85 PUT9001 UL62127 01.00 90/04/19 90/04/19 18:42 539 539 PUT9001 UL62248 01.00 90/04/19 90/04/19 18:42 150 150 PUT9001 UL62254 01.00 90/04/19 90/04/19 18:42 2458 2458 PUT9001 UL62285 01.00 90/04/19 90/04/19 18:42 4375 4375 PUT9001 UL62288 01.00 90/04/19 90/04/19 18:42 76 76 PUT9001 UL62466 01.00 90/04/19 90/04/19 18:42 180 180 PUT9001 UL62482 01.00 90/04/19 90/04/19 18:42 301 301 PUT9001 UL63138 01.00 90/04/19 90/04/19 18:42 1524 1524 PUT9001 UL63147 01.00 90/04/19 90/04/19 18:42 2593 2593 PUT9001 UL63161 01.00 90/04/19 90/04/19 18:42 588 588 PUT9001 UL63187 01.00 90/04/19 90/04/19 18:42 57 57 PUT9001 UL63197 01.00 90/04/19 90/04/19 18:42 255 255 PUT9001