Return to Mainframe Utilities Page
Module
/**********************************************************************
/* UTILITY: APPLCMPR *
/* AUTHOR: DAVID LEIGH *
/* FUNCTION: THIS UTILITY COMPARES ALL THE ELEMENTS OF AN APPLICATION *
/* USING THE LISTAD ELEMENT AND CREATING PRINTS OF EACH OF *
/* THESE COMPONENT ELEMENTS BEGINNING AT DEVL AND BEGINNING *
/* AT QUAL (WITH THE SEARCH OPTION). THIS OUTPUT IS THEN *
/* WRITTEN TO TWO PDS'S AND THEY ARE COMPARED. *
/**********************************************************************
PROC 1 CSP_APPLICATION +
ROMSL1('QDEVL.STRMSV.MSL') +
ROMSL2('QQUAL.STRMSV.MSL') +
ROMSL3('MMODO.STRMSV.MSL') +
ROMSL4('PEMER.STRMSV.MSL') +
ROMSL5('PPROD.STRMSV.MSL') +
ACCESS(DIRECT) +
ENVIRON(QUAL) +
STAGE1(D) +
STAGE2(Q) +
TYPE(LISTAD) +
SYSTEM(STR) +
SUBSYS(UNIPAC) +
CCID(UTILITY) +
CLASS('1,TIME=(1,00)') +
BATCH +
USERID() +
UTILITY(APPLCMPR) +
EDIT +
HELP
/**********************************************************************
/* MISCELLANEOUS INITIALIZATION *
/**********************************************************************
ISPEXEC CONTROL ERRORS RETURN
ISPEXEC VGET DBGSWTCH PROFILE 02
IF &DBGSWTCH = ON THEN + 02
CONTROL MSG LIST CONLIST SYMLIST NOFLUSH PROMPT ASIS 00000702
ELSE + 02
CONTROL NOMSG NOLIST NOFLUSH PROMPT ASIS 00000902
IF &HELP = HELP THEN GOTO HELPSEC
02
/**********************************************************************
/* CHECK TO SEE IF THE USER IS IN ENDEVOR FIRST *
/**********************************************************************
IF &BATCH ¬= BATCH THEN +
DO
ISPEXEC EDIT DATASET('&SYSUID..ISPF.ISPPROF(CTLIPROF)') +
MACRO(APPLCHKM)
IF &LASTCC = 14 THEN +
DO
SET ZEDSMSG =
SET ZEDLMSG = &STR(*** PLEASE EXIT ENDEVOR BEFORE +
EXECUTING "APPLCMPR" ***)
ISPEXEC SETMSG MSG(UTLZ001)
EXIT
END
END
02
/**********************************************************************
/* GET THE USER'S FULL NAME *
/**********************************************************************
IF &STR(&USER) > THEN GOTO SETVAR
SET USERID = &STR(&SYSUID)
SET SYSOUTTRAP = 1000
ACF
LIST *
END
SET SYSOUTTRAP = 0
SET SYSDVAL = &STR(&SYSNSUB(1,&SYSOUTLINE1))
READDVAL A B NAME1 NAME2 NAME3 NAME4 NAME5
SET FULLNAME = &STR(&NAME1 &NAME2 &NAME3 &NAME4 &NAME5)
02
/**********************************************************************
/* LOAD THE MSL CONCATENATION TABLE *
/**********************************************************************
SET OLDMSLS =
SET NEWMSLS =
ISPEXEC TBCREATE TEMPMSL NOWRITE REPLACE KEYS(MSLNAME)
DO &I = 1 TO 20
SET MSLNAME = &STR(&SYSNSUB(2,&&ROMSL&I))
IF &STR(&MSLNAME) > THEN +
DO
IF &I > 1 THEN +
SET OLDMSLS = &STR(&OLDMSLS,ROMSL&I)
SET NEWMSLS = &STR(&NEWMSLS,ROMSL&I)
ISPEXEC TBADD TEMPMSL
END
ELSE +
SET I = 21
END
SET NEWMSLS = &SUBSTR(2:&LENGTH(&STR(&NEWMSLS)),&STR(&NEWMSLS))
SET OLDMSLS = &SUBSTR(2:&LENGTH(&STR(&OLDMSLS)),&STR(&OLDMSLS))
02
/**********************************************************************
/* ESTABLISH SOME PROCESSING VARIABLES *
/**********************************************************************
SETVAR: +
CALL 'SYS2.USC1.LINKLIB(USERINFO)' '&USERID '
SET APPL = &STR(&CSP_APPLICATION)
SET COMMENTS = &STR(&APPL COMPARE¦&USERID¦&SYSSDATE¦&SYSSTIME)
SET TMESTAMP = &STR(D)+
&SUBSTR(1:2,&STR(&SYSSDATE))+
&SUBSTR(4:5,&STR(&SYSSDATE))+
&SUBSTR(7:8,&STR(&SYSSDATE))+
&STR(.T)+
&SUBSTR(1:2,&STR(&SYSTIME))+
&SUBSTR(4:5,&STR(&SYSTIME))+
&SUBSTR(7:8,&STR(&SYSTIME))
SET TEMPJCL = &STR(&USERID..TEMP.APPLCMPR.&TMESTAMP..JCL)
SET TEMPFILE = &STR(&USERID..TEMP.APPLCMPR.&TMESTAMP..ENDEVOR)
SET EXITCC = 0
SET LP = &STR((
SET RP = &STR()
/**********************************************************************
/* INFORM THE USER *
/**********************************************************************
SET ZEDLMSG = &STR(*** PREPARING TO CALL ENDEVOR TO EXTRACT THE +
"LISTAD" FOR "&APPL" ***)
IF &BATCH = BATCH THEN WRITE &STR(&ZEDLMSG)
ELSE +
DO
ISPEXEC CONTROL DISPLAY LOCK
ISPEXEC DISPLAY PANEL(MSGPANEL)
END
/**********************************************************************
/* PREPARE FOR A CALL TO ENDEVOR *
/**********************************************************************
FREE DDNAME(SYSPRINT C1MSGS1 C1PRINT PRINTDD BSTIPT01)
ALLOC DD(SYSPRINT) DUMMY
IF &DBGSWTCH = ON THEN +
ALLOC DD(C1MSGS1) DA(*)
ELSE +
ALLOC DD(C1MSGS1) DUMMY
ALLOC DD(C1PRINT) DUMMY
DELETE '&TEMPFILE'
ALLOC DD(PRINTDD) +
DSN('&TEMPFILE') +
NEW CATALOG +
UNIT(SYSDA) VOLUME(WRK$$$) +
SPACE(1,1) CYLINDERS RELEASE +
RECFM(F B) LRECL(133) BLKSIZE(23408) DSORG(PS)
ALLOC DD(BSTIPT01) +
NEW CATALOG +
UNIT(SYSDA) +
SPACE(1,1) TRACKS RELEASE +
RECFM(F B) LRECL(80) BLKSIZE(23440) DSORG(PS)
OPENFILE BSTIPT01 OUTPUT
SET BSTIPT01 = &STR(PRINT ELEMENTS '&APPL')
PUTFILE BSTIPT01
SET BSTIPT01 = &STR(FROM ENVIRONMENT '&ENVIRON' )
PUTFILE BSTIPT01
SET BSTIPT01 = &STR( STAGE '&STAGE1' )
PUTFILE BSTIPT01
SET BSTIPT01 = &STR( SYSTEM '&SYSTEM' )
PUTFILE BSTIPT01
SET BSTIPT01 = &STR( SUBSYSTEM '&SUBSYS' )
PUTFILE BSTIPT01
SET BSTIPT01 = &STR( TYPE '&TYPE')
PUTFILE BSTIPT01
SET BSTIPT01 = &STR( TO FILE 'PRINTDD' )
PUTFILE BSTIPT01
SET BSTIPT01 = &STR(OPTIONS NOSEARCH )
PUTFILE BSTIPT01
SET BSTIPT01 = &STR(. )
PUTFILE BSTIPT01
CLOSFILE BSTIPT01
SET ZEDLMSG = &STR(*** EXTRACTING THE "LISTAD" FOR "&APPL" FROM +
ENDEVOR ***)
IF &BATCH = BATCH THEN WRITE &STR(&ZEDLMSG)
ELSE +
DO
ISPEXEC CONTROL DISPLAY LOCK
ISPEXEC DISPLAY PANEL(MSGPANEL)
END
ISPEXEC SELECT PGM(NDVRC1) PARM(C1BM3000)
SET NDVRCC = &LASTCC
FREE DDNAME(SYSPRINT C1MSGS1 C1PRINT PRINTDD BSTIPT01)
ISPEXEC EDIT DATASET('&TEMPFILE') MACRO(APPLMACR)
/**********************************************************************
/* GET OUT IF THERE IS NO LISTAD TYPE *
/**********************************************************************
ISPEXEC TBQUERY TEMPGET ROWNUM(ROWS)
IF &ROWS = 0 THEN +
DO
SET EXITCC = &NDVRCC
IF NDVRCC < 8 THEN +
DO
SET ZEDLMSG = &STR(*** NO LISTAD ELEMENT FOUND FOR +
APPLICATION "&APPL" ***)
ISPEXEC SETMSG MSG(UTLZ000)
END
ELSE +
DO
SET ZEDLMSG = &STR(*** ENDEVOR CC: &NDVRCC TRYING TO +
LIST "&TYPE" ELEMENTS ***)
ISPEXEC SETMSG MSG(UTLZ000)
END
EXIT CODE(&NDVRCC)
END
/**********************************************************************
/* INFORM THE USER *
/**********************************************************************
SET ZEDLMSG = &STR(*** GENERATING JCL TO COMPARE "&APPL" ***)
IF &BATCH = BATCH THEN WRITE &STR(&ZEDLMSG)
ELSE +
DO
ISPEXEC CONTROL DISPLAY LOCK
ISPEXEC DISPLAY PANEL(MSGPANEL)
END
/**********************************************************************
/* GENERATE JCL TO DO THE COMPARE *
/**********************************************************************
DELETE '&TEMPJCL'
FREE DDNAME(ISPFILE)
ALLOCATE DDNAME(ISPFILE) DSN('&TEMPJCL') +
NEW CATALOG +
UNIT(SYSDA) VOLUME(WRK$$$) +
SPACE(1,1) TRACKS RELEASE +
RECFM(F B) LRECL(80) BLKSIZE(23440) DSORG(PS)
ISPEXEC FTOPEN
ISPEXEC FTINCL APPLCMPR
SET SAVECC = &LASTCC
ISPEXEC FTCLOSE
FREE DDNAME(ISPFILE)
IF &EDIT = EDIT THEN +
DO
IF &SAVECC > 0 THEN +
DO
ISPEXEC VGET ZERRLM
SET ZEDSMSG = &STR(JCL CREATION ERROR)
SET ZEDLMSG = &STR(&ZERRLM)
ISPEXEC SETMSG MSG(UTLZ001)
ISPEXEC EDIT DATASET('&TEMPJCL')
END
ELSE +
DO
SET ZEDLMSG = &STR(*** NOTE: YOU MUST SUBMIT THIS +
JCL YOURSELF ***)
ISPEXEC SETMSG MSG(UTLZ000W)
ISPEXEC EDIT DATASET('&TEMPJCL')
END
END
ELSE +
DO
IF &SAVECC > 0 THEN +
DO
ISPEXEC VGET ZERRLM
SET ZEDSMSG = &STR(JCL CREATION ERROR)
SET ZEDLMSG = &STR(&ZERRLM)
ISPEXEC SETMSG MSG(UTLZ001)
ISPEXEC EDIT DATASET('&TEMPJCL')
END
ELSE +
DO
SUBMIT '&TEMPJCL'
SET ZEDSMSG = &STR(JOB SUBMITTED)
SET ZEDLMSG = &STR(*** THE CREATED JCL WAS SUBMITTED +
***)
ISPEXEC SETMSG MSG(UTLZ000)
END
END
/**********************************************************************
/* CLEANUP AND GET OUT *
/**********************************************************************
FINISH: +
EXIT
/**********************************************************************
/* DISPLAY ANY "HELP" WHICH IS AVAILABLE FOR THIS UTILITY *
/**********************************************************************
HELPSEC: +
ISPEXEC SELECT PGM(ISPTUTOR) PARM(HELPSHEL)
SET ZEDLMSG = &STR(*** HELP DISPLAYED FOR APPLCMPR UTILITY +
*** NO PROCESSING PERFORMED ***)
ISPEXEC SETMSG MSG(UTLZ000)
EXIT
Documentation
APPLCMPR is designed to compare a CSP application which is currently in the
DEVL environment in ENDEVOR with the same application (element-for-element) as
it exists in its next-most-recent form in the ENDEVOR promotion map.
APPLCMPR operates in ISPF and is invoked as follows:
COMMAND ===> TSO APPLCMPR xxxxx {edit} {class(l)}
Where:
"xxxxx" = The CSP application name
EDIT is a keyword parameter which indicates that the JCL which is created is to
be edited instead of automatically submitted.
class(l) is a parameter which indicates that instead of using job class 5, (the
default), job class L should be used. Note: The job which is created
will not run in class 1 due to the amount of processing necessary.
The output from the compare job consists of five sequential files named:
userid.APPLCMPR.applicationname.APPL
userid.APPLCMPR.applicationname.MAPG
userid.APPLCMPR.applicationname.PROC
userid.APPLCMPR.applicationname.RECD
userid.APPLCMPR.applicationname.SGRP
These files hold SUPERCE compare output for the application element, any map
group elements, any process elements, any record elements, and any statement
group elements. An explanation of how APPLCMPR works may aid in the
understanding of its value and its outputs.
First, when you invoke APPLCMPR with an application name, it invokes ENDEVOR in
"foreground batch" to get the LISTAD element associated with that application.
This brings up a good point, an application needs to have been generated in
ENDEVOR at least once prior to running APPLCMPR so that a valid LISTAD element
exists. APPLCMPR then uses the contents of the LISTAD to build JCL
which will do the following:
1. Retrieve (NOSIGNOUT) each element from ENDEVOR twice; first beginning the
search for the element from the DEVL stage, and then beginning the search
for the element from the QUAL stage. This results in a pair of each element
in the application; one which is the most recent and one which is the next
most recent copy. Note: if a given element has not changed, this retrieval
will get the same copy for each one of the pair. Since the elements are CSP
elements, they must be retrieved directly into an MSL (temporary MSLs are
created by APPLCMPR for this purpose). Note: since this portion accesses
ENDEVOR directly while you're in TSO, you CANNOT be in ENDEVOR in either of
your split screens and execute APPLCMPR. It WILL abend if you are in
ENDEVOR.
2. Export the elements from the MSL in ESF format into a set of paired PDSs to
contain the old/new APPL/MAPG/PROC/RECD/SGRPs.
3. Compare the paired PDSs with SUPERCE and store the compare output in the
five sequential datasets listed previously. Note: these datasets are stored
on PERMANENT DASD. It is the programmer's responsibility to discard these
datasets when no longer needed.

0 Comments