ISPF-packed compiler listings

ISPF provides a facility to PACK data sets. In this format, ISPF replaces any repeating characters with a sequence that shows how many times the character is repeated. With this facility, you can use direct access storage devices (DASD) more efficiently. When opening a compiler listing, Fault Analyzer detects if the listing is in PACKed format and unpacks it before use.

To pack a compiler listing under ISPF, you can issue the PACK primary command from within an EDIT session on the listing, and then save the listing.

Alternatively, you can automate the creation of packed compiler listings by inserting an extra step into your compile job. An example job is shown below. This example uses the ISPF LMCOPY command, from a REXX exec, to copy the listing from one data set to another, specifying the PACK option.
//PACKLIST EXEC  PGM=IKJEFT01
//SYSPROC   DD DSN=rexx-exec-library,DISP=SHR
//ISPPLIB   DD DISP=SHR,DSN=ISP.SISPPENU
//ISPSLIB   DD DISP=SHR,DSN=ISP.SISPSLIB
//ISPTLIB   DD DISP=SHR,DSN=ISP.SISPTENU
//ISPMLIB   DD DISP=SHR,DSN=ISP.SISPMENU
//ISPLOG    DD SYSOUT=*,DCB=(RECFM=FBA,LRECL=121,BLKSIZE=1210)
//ISPLIST   DD SYSOUT=*,DCB=(RECFM=FBA,LRECL=121,BLKSIZE=1210)
//SYSTSPRT  DD SYSOUT=*,DCB=(RECFM=FBA,LRECL=121,BLKSIZE=1210)
//SYSPRINT  DD SYSOUT=*
//LMIN      DD DISP=SHR,DSN=compile-step-listing-data-set
//LMOUT     DD DISP=SHR,DSN=packed-listing-data-set
//ISPPROF   DD SPACE=(TRK,(5,1,4)),UNIT=SYSALLDA,
//             DCB=(DSORG=PO,RECFM=FB,LRECL=80,BLKSIZE=6160)
//SYSTSIN   DD *
ISPSTART CMD(LMCOPY member-name)
/*
Both compile-step-listing-data-set and packed-listing-data-set are names of PDS or PDSE data sets without member specification, and member-name is the member name of the compiler listing (which usually matches the name of the program being compiled - see Naming compiler listings or side files).
The LMCOPY REXX exec must reside in the rexx-exec-library data set as member LMCOPY, for example:
/* LMCOPY Rexx */
Address ISPEXEC
Arg member
'LMINIT DATAID(INDD) DDNAME(LMIN) ENQ(SHRW)'
'LMINIT DATAID(OUTDD) DDNAME(LMOUT) ENQ(SHRW)'

'LMCOPY FROMID('INDD') TODATAID('OUTDD')
   FROMMEM('member') TOMEM('member') REPLACE PACK'

'LMFREE DATAID('INDD')'
'LMFREE DATAID('OUTDD')'

Although ISPF PACK saves DASD space used by compiler listings, you can save more space by converting a compiler listing into a LANGX side file and discarding the listing. (See IBM Application Delivery Foundation for z/OS Common Components: Customization Guide and User Guide, chapter IPVLANGX compiler listing to side file conversion utility, section Creating side files using IPVLANGX for information.)

You can reprint most of the original compiler listing information from the LANGX side file. See the description of the IPVLANGP utility in IBM Application Delivery Foundation for z/OS Common Components: Customization Guide and User Guide.