|
Back To LeighWeb Mainframe Utilities Page
View the documentation associated with this module
/**********************************************************************
/* CLIST: COMPILE *
/* AUTHOR: DAVID LEIGH *
/* FUNCTION: THIS CLIST CONTROLS A CLIST/ISPF DIALOG TO FACILITATE *
/* COMPILING OF COBOL, COBOL2, AND ASSEMBLER PROGRAMS AND *
/* MAPS IN BATCH AND CICS ENVIRONMENTS. *
/**********************************************************************
PROC 0 JCLREVEW(N) /* INITIALIZE THE JCL REVIEW VALUE TO "NO" */ +
ISPF /* SEND RESULTS TO AN ISPLLIB LOAD LIB */ +
HELP /* DISPLAY HELP INSTEAD OF PROCESSING */ +
DEBUG /* SHOW DEBUGGING MESSAGES DURING EXECUTION */
CONTROL NOMSG NOLIST NOFLUSH NOPROMPT
/**********************************************************************
/* CONTROL CLIST/EDIT MODE PROCESSING *
/**********************************************************************
ERROR DO
SET MODE = CLIST
RETURN
END
ISREDIT MACRO (OPT1 OPT2 OPT3)
ERROR OFF
/**********************************************************************
/* LOG THE USE *
/**********************************************************************
/**********************************************************************
/* IF AN EDIT MACRO, PROCESS THE OPTIONS *
/**********************************************************************
IF &STR(&MODE) ¬= CLIST THEN +
DO
SET ZEDLMSG = &STR(*** PARSING THIS SOURCE TO SET COMPILE +
DEFAULTS ***)
ISPEXEC CONTROL DISPLAY LOCK
ISPEXEC DISPLAY MSG(UTLZ000W)
SELECT (&OPT1)
WHEN (ISPF) SET ISPF = ISPF
WHEN (HELP) SET HELP = HELP
WHEN (DEBUG) SET DEBUG = DEBUG
END
SELECT (&OPT2)
WHEN (ISPF) SET ISPF = ISPF
WHEN (HELP) SET HELP = HELP
WHEN (DEBUG) SET DEBUG = DEBUG
END
SELECT (&OPT3)
WHEN (ISPF) SET ISPF = ISPF
WHEN (HELP) SET HELP = HELP
WHEN (DEBUG) SET DEBUG = DEBUG
END
END
/**********************************************************************
/* CONTROL DEBUG PROCESSING *
/**********************************************************************
ISPEXEC CONTROL ERRORS RETURN
IF &DEBUG = DEBUG THEN +
CONTROL MSG LIST CONLIST SYMLIST NOFLUSH
ELSE +
CONTROL NOMSG NOLIST NOFLUSH NOPROMPT
/**********************************************************************
/* CONTROL HELP PROCESSING *
/**********************************************************************
IF &HELP = HELP THEN GOTO HELPSEC
/**********************************************************************
/* ESTABLISH SOME VARIABLES AND GET SOME PROFILE VARIABLE VALUES *
/**********************************************************************
CALL 'SYS2.USC1.LINKLIB(USERINFO)' '&SYSUID '
SET LP = &STR((
SET RP = &STR())
SET AMPER = &STR(&&)
SET LANG =
SET CMPCICS =
ISPEXEC VGET (CMPPCONF CMPTYPE CMPTYPFX CMPAPPL CMPJSUFF +
CMPALIST CMPPTRN CMPDTRN CMPPLKED CMPDLKED CMPJCLR +
CMPCLASS CMPPR CMPLDASD) PROFILE
IF &STR(&CMPTYPE) = THEN SET CMPTYPE = &STR(COB2)
IF &STR(&CMPTYPFX) = THEN SET CMPTYPFX = &STR(T)
IF &STR(&CMPAPPL) = THEN +
IF &SUBSTR(2:2,&STR(&SYSUID)) = &STR(#) THEN +
SET CMPAPPL = GSS
ELSE +
SET CMPAPPL = SLSS
IF &STR(&CMPJSUFF) = THEN SET CMPJSUFF = &STR(CMP)
IF &STR(&CMPCLASS) = THEN SET CMPCLASS = &STR(1)
IF &STR(&CMPPR) = THEN SET CMPPR = &STR(Z00000)
IF &STR(&CMPPTRN) = THEN SET CMPPTRN = &STR(N)
IF &STR(&CMPPLKED) = THEN SET CMPPLKED = &STR(N)
IF &STR(&CMPDTRN) = THEN SET CMPDTRN = &STR(N)
IF &STR(&CMPDLKED) = THEN SET CMPDLKED = &STR(N)
IF &STR(&CMPALIST) = THEN SET CMPALIST = &STR(Y)
IF &STR(&CMPJCLR) = THEN SET CMPJCLR = &STR(N)
IF &STR(&CMPLDASD) = THEN SET CMPLDASD = &STR(T)
ISPEXEC VPUT (CMPPCONF CMPTYPE CMPTYPFX CMPAPPL CMPJSUFF +
CMPALIST CMPPTRN CMPDTRN CMPPLKED CMPDLKED CMPJCLR +
CMPCLASS CMPPR CMPLDASD) PROFILE
SET JCLREVEW = &STR(&CMPJCLR)
/***********************************************************************
/* PARSE FOR DATASET INFORMATION AND LANGUAGE TYPE IF THIS IS A MACRO *
/***********************************************************************
IF &MODE ¬= CLIST THEN +
DO
ISREDIT (PACK) = PACK
IF &PACK = ON THEN +
DO
SET ZEDSMSG = &STR(DATA IS PACKED)
SET ZEDLMSG = &STR(UNPACK THE DATA AND SAVE +
THE DATASET FIRST)
ISPEXEC SETMSG MSG(UTLZ001)
GOTO FINISH
END
ISREDIT (LN,CL) = CURSOR
ISREDIT (CMPDSN) = DATASET
IF &STR(&LANG) = THEN +
DO
ISREDIT EXCLUDE ALL '*' 1 7
ISREDIT FIND FIRST ' IDENTIFICATION DIVISION. ' NX
IF &LASTCC = 0 THEN SET LANG = COB2
END
IF &STR(&LANG) = THEN +
DO
ISREDIT EXCLUDE ALL '*' 1 7
ISREDIT FIND FIRST ' ENVIRONMENT DIVISION. ' NX
IF &LASTCC = 0 THEN SET LANG = COB2
END
IF &STR(&LANG) = THEN +
DO
ISREDIT EXCLUDE ALL '*' 1 7
ISREDIT FIND FIRST ' DATA DIVISION ' NX
IF &LASTCC = 0 THEN SET LANG = COB2
END
IF &STR(&LANG) = THEN +
DO
ISREDIT EXCLUDE ALL '*' 1 7
ISREDIT FIND FIRST ' WORKING-STORAGE SECTION. ' NX
IF &LASTCC = 0 THEN SET LANG = COB2
END
IF &STR(&LANG) = THEN +
DO
ISREDIT EXCLUDE ALL '*' 1 7
ISREDIT FIND FIRST ' PROCEDURE DIVISION. ' NX
IF &LASTCC = 0 THEN SET LANG = COB2
END
IF &STR(&LANG) = THEN +
DO
ISREDIT EXCLUDE ALL '*' 1
ISREDIT FIND FIRST ' DFHMDI ' 8 NX
IF &LASTCC = 0 THEN SET LANG = MAP
END
IF &STR(&LANG) = THEN +
DO
ISREDIT EXCLUDE ALL '*' 1
ISREDIT FIND FIRST ' DFHMSD ' 8 NX
IF &LASTCC = 0 THEN SET LANG = MAP
END
IF &STR(&LANG) = THEN +
DO
ISREDIT EXCLUDE ALL '*' 1
ISREDIT FIND FIRST ' DFHMDF ' 8 NX
IF &LASTCC = 0 THEN SET LANG = MAP
END
IF &STR(&LANG) = THEN +
DO
ISREDIT EXCLUDE ALL '*' 1
ISREDIT FIND FIRST ' CSECT ' 3 15 NX
IF &LASTCC = 0 THEN SET LANG = ASM
END
IF &STR(&LANG) = THEN +
DO
ISREDIT EXCLUDE ALL '*' 1
ISREDIT FIND FIRST ' DSECT ' 3 15 NX
IF &LASTCC = 0 THEN SET LANG = ASM
END
IF &STR(&LANG) = THEN +
DO
ISREDIT EXCLUDE ALL '*' 1
ISREDIT FIND FIRST ' MACRO ' 3 15 NX
IF &LASTCC = 0 THEN SET LANG = ASM
END
IF &STR(&LANG) = THEN +
DO
ISREDIT EXCLUDE ALL '*' 1
ISREDIT FIND FIRST ' TITLE ' 3 15 NX
IF &LASTCC = 0 THEN SET LANG = ASM
END
IF &STR(&CMPCICS) = THEN +
DO
ISREDIT FIND FIRST ' EXEC CICS ' NX
IF &LASTCC = 0 THEN SET CMPCICS = Y
END
IF &STR(&CMPCICS) = THEN +
DO
ISREDIT FIND FIRST ' EXEC CICS ' NX
IF &LASTCC = 0 THEN SET CMPCICS = Y
END
ISREDIT RESET EXCLUDED
IF &STR(&LANG) > THEN +
IF &STR(&CMPCICS) = &STR(Y) THEN +
SET CMPTYPE = &STR(C&LANG)
ELSE +
SET CMPTYPE = &STR(&LANG)
ELSE +
SET CMPTYPE =
ISREDIT (MEMBER) = MEMBER
IF &STR(&MEMBER) > THEN +
DO
SET MEMBER8 = &SUBSTR(1:8,&STR(&MEMBER ))
SET CMPDSN = &STR(&CMPDSN(&MEMBER))
IF &STR(&CMPALIST) = &STR(N) THEN +
SET CMPLDSN =
ELSE +
SET CMPLDSN = &STR(&SYSUID..COMPILE.)+
&STR(LISTING.&MEMBER)
END
ELSE +
DO
SET MEMBER8 = &STR(SEQ. DSN)
SET DATE = &STR(D)+
&SUBSTR(1:2,&STR(&SYSSDATE))+
&SUBSTR(4:5,&STR(&SYSSDATE))+
&SUBSTR(7:8,&STR(&SYSSDATE))
SET TIME = &STR(T)+
&SUBSTR(1:2,&STR(&SYSTIME))+
&SUBSTR(4:5,&STR(&SYSTIME))+
&SUBSTR(7:8,&STR(&SYSTIME))
IF &STR(&CMPALIST) = &STR(N) THEN +
SET CMPLDSN =
ELSE +
SET CMPLDSN = &STR(&SYSUID..COMPILE.)+
&STR(LISTING.&DATE..&TIME)
END
IF &ISPF = ISPF THEN +
SET CMPALOAD = &STR(&SYSUID..&CMPAPPL..ISPLLIB)
ISREDIT CURSOR = &LN &CL
END
/**********************************************************************
/* FIND OUT THE CURRENT VALID PRINT CONFIGURATIONS *
/**********************************************************************
SET ALLCONF = &STR( )
ISPEXEC TBOPEN PRINTIT NOWRITE
IF &LASTCC = 0 THEN +
DO
ISPEXEC TBSKIP PRINTIT
DO WHILE &LASTCC = 0
SET ALLCONF = &STR(&ALLCONF&PTCONNAM )
ISPEXEC TBSKIP PRINTIT
END
ISPEXEC TBEND PRINTIT
END
/***********************************************************************
/* DISPLAY THE PROCESSING PANEL *
/***********************************************************************
REDISPLAY: +
ISPEXEC DISPLAY PANEL(COMPILE)
IF &LASTCC > 7 THEN +
DO
FINISH: EXIT
END
/**********************************************************************
/* PROCESS THE USER'S PRIMARY COMMANDS IF ANY *
/**********************************************************************
IF &STR(&ZCMD) = THEN GOTO BUILD
SET SYSDVAL = &STR(&ZCMD)
READDVAL ZCMD OPT1 OPT2 OPT3 OPT4 OPT5 OPT6 OPT7 OPT8 OPT9 OPT10
SELECT (&SYSCAPS(&STR(&ZCMD)))
WHEN (OPT ¦ OPTION ¦ OPTIONS) DO
ISPEXEC DISPLAY PANEL(COMPILE3)
SET ZEDLMSG = &STR(*** COMPILE UTILITY OPTIONS UPDATED ***)
ISPEXEC SETMSG MSG(UTLZ000)
END
WHEN (SHOW) DO
IF &STR(&SYSCAPS(&OPT1)) = &STR(ERRORS) THEN +
DO
ISPEXEC CONTROL ERRORS CANCEL
GOTO BUILD
END
ELSE GOTO OTHER
END
OTHERWISE DO
OTHER: SET ZEDSMSG = &STR(INVALID COMMAND)
SET ZEDLMSG = &STR(VALID COMMANDS: +
"OPTIONS")
ISPEXEC SETMSG MSG(UTLZ001W)
END
END
GOTO REDISPLAY
/**********************************************************************
/* FURTHER INPUT EDITS *
/**********************************************************************
BUILD: +
LISTDSI '&CMPDSN'
IF &SYSDSORG ¬= &STR(PO) THEN +
IF &STR(&CMPALOAD) = THEN +
DO
SET ZEDLMSG = &STR(ALTERNATE LOAD LIB MUST BE ENTERED IF +
SOURCE IS NOT A PDS MEMBER)
ISPEXEC SETMSG MSG(UTLZ001W)
GOTO REDISPLAY
END
ELSE
ELSE +
DO
SET X = &SYSINDEX(&STR(&LP),&STR(&CMPDSN))
SET Y = &SYSINDEX(&STR(&RP),&STR(&CMPDSN))
SET X = &X + 1
SET Y = &Y - 1
IF &Y < &X OR &X = 1 OR &Y = 0 THEN +
DO
SET ZEDLMSG = &STR(A MEMBER NAME MUST BE PART OF THE +
SOURCE DSN IF IT IS A PDS)
ISPEXEC SETMSG MSG(UTLZ001W)
GOTO REDISPLAY
END
ELSE +
DO
SET MEMBER = &SUBSTR(&X:&Y,&STR(&CMPDSN))
SET MEMBER8 = &SUBSTR(1:8,&STR(&MEMBER ))
END
END
/**********************************************************************
/* DETERMINE LANGUAGE IF NOT FOUND BY NOW *
/**********************************************************************
IF &LANG = OR +
&SYSINDEX(&STR(&LANG),&STR(&CMPTYPE)) = 0 THEN +
DO
IF &SYSINDEX(&STR(COB2),&STR(&CMPTYPE)) > 0 THEN +
DO
SET LANG = COB2
IF &STR(&LANG) ¬= &STR(&CMPTYPE) AND +
&SUBSTR(1:1,&STR(&CMPTYPE)) = C THEN +
SET CMPCICS = Y
ELSE +
SET CMPCICS =
END
ELSE +
IF &SYSINDEX(&STR(ASM),&STR(&CMPTYPE)) > 0 THEN +
DO
SET LANG = ASM
IF &STR(&LANG) ¬= &STR(&CMPTYPE) AND +
&SUBSTR(1:1,&STR(&CMPTYPE)) = C THEN +
SET CMPCICS = Y
ELSE +
SET CMPCICS =
END
ELSE SET LANG = MAP
END
/**********************************************************************
/* DEAL WITH PRINT CONFIGURATIONS *
/**********************************************************************
IF &STR(&CMPPCONF) > AND +
&SYSINDEX(&STR( &CMPPCONF ),&STR(&ALLCONF)) = 0 THEN +
DO
IF &STR(&CMPPCONF) ¬= &STR(?) THEN +
DO
SET ZEDLMSG = &STR(*** "&CMPPCONF" IS NOT A VALID +
PRINT CONFIGURATION ***)
ISPEXEC SETMSG MSG(UTLZ001)
END
SET CMPPCONF =
ISPEXEC TBOPEN PRINTIT NOWRITE
ISPEXEC TBDISPL PRINTIT PANEL(COMPILE2)
IF &LASTCC < 8 THEN +
IF &ZTDSELS ¬= &STR(0000) THEN +
SET CMPPCONF = &STR(&PTCONNAM)
SET CMPSEL =
ISPEXEC TBEND PRINTIT
GOTO REDISPLAY
END
/**********************************************************************
/* BUILD THE JCL *
/**********************************************************************
SELECT (&STR(&CMPLDASD))
WHEN (T) SET VOLUME = &STR(VOL=SER=WRK$$$,)
WHEN (P) SET VOLUME =
END
IF &JCLREVEW = &STR(Y) THEN +
DO
SET TEMPJCL = &STR(&SYSUID..TEMP.COMPILE.JCL)
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 COMPILE
SET SAVECC = &LASTCC
ISPEXEC FTCLOSE
FREE DDNAME(ISPFILE)
IF &SAVECC > 0 THEN +
DO
SET ZEDSMSG = &STR(JCL CREATION ERROR)
SET ZEDLMSG = &STR(FILE TAILORING OF SKELETON MEMBER +
"COMPILE" FAILED WITH AN RC OF +
"&SAVECC")
ISPEXEC SETMSG MSG(UTLZ001)
END
ELSE +
DO
SET ZEDSMSG =
SET ZEDLMSG = &STR(*** NOTE: YOU MUST SUBMIT THIS +
JCL YOURSELF ***)
ISPEXEC SETMSG MSG(UTLZ000W)
ISPEXEC EDIT DATASET('&TEMPJCL')
END
END
ELSE +
DO
ISPEXEC FTOPEN TEMP
ISPEXEC FTINCL COMPILE
SET SAVECC = &LASTCC
ISPEXEC FTCLOSE
IF &SAVECC > 0 THEN +
DO
SET ZEDSMSG = &STR(JCL CREATION ERROR)
SET ZEDLMSG = &STR(FILE TAILORING OF SKELETON MEMBER +
"COMPILE" FAILED WITH AN RC OF +
"&SAVECC")
ISPEXEC SETMSG MSG(UTLZ001)
END
ELSE +
DO
ISPEXEC VGET ZTEMPF
SUBMIT '&ZTEMPF'
SET ZEDSMSG = &STR(JOB SUBMITTED)
SET ZEDLMSG = &STR(*** THE CREATED JCL WAS SUBMITTED +
***)
ISPEXEC SETMSG MSG(UTLZ000)
END
END
ISPEXEC VGET TYPEHOLD SHARED
IF &STR(&TYPEHOLD) > THEN +
DO
SET CMPTYPFX = &STR(&TYPEHOLD)
ISPEXEC VPUT CMPTYPFX PROFILE
END
IF &STR(&ZCMD) = &STR(SHOW ERRORS) THEN +
ISPEXEC CONTROL ERRORS RETURN
IF &STR(&MODE) = CLIST THEN +
DO
SET CMPCICS =
SET LANG =
END
IF &STR(&JCLREVEW) = Y THEN +
GOTO REDISPLAY
ELSE +
GOTO FINISH
/**********************************************************************
/* DISPLAY THE HELP TUTORIAL *
/**********************************************************************
HELPSEC: +
ISPEXEC SELECT PGM(ISPTUTOR) PARM(HELPSHEL)
SET ZEDLMSG = &STR(*** HELP DISPLAYED FOR COMPILE UTILITY +
*** NO PROCESSING PERFORMED ***)
ISPEXEC SETMSG MSG(UTLZ000)
EXIT
|
|