Return to Mainframe Utilities Page
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
Documentation
COMPILE is an ISPF dialog which creates appropriate compile or assemble JCL for source code of varying types and automatically submits it. COMPILE may be invoked as a CLIST or as an edit macro. The JCL is created automatically and can be edited or submitted automatically as well. A complete ISPF help/tutorial exists for COMPILE. More information can be found there.