Return to Mainframe Utilities Page
Module
ISREDIT MACRO (HELP) ISPEXEC CONTROL ERRORS RETURN /**** SET MESSAGE DISPLAY ON/OFF BASED ON THE DEBUG SWITCH ***/ ISPEXEC VGET (DBGSWTCH) PROFILE IF &DBGSWTCH = &STR(ON) THEN CONTROL MSG LIST CONLIST SYMLIST NOFLUSH ELSE CONTROL NOMSG NOLIST NOFLUSH NOPROMPT /******************************************************************/ /* 'JCLSPLIT' EDIT MACRO. SPLIT UP A JCL DD LINE */ /* AUTHOR : DAVID LEIGH DATE : 4-24-89 */ /******************************************************************/ IF &HELP = &STR(HELP) THEN GOTO HELPSEC ISREDIT (LN,CL) = CURSOR ISREDIT CURSOR = 1 0 ISREDIT FIND NEXT P'=' 1 X SET SAVECC = &LASTCC IF &SAVECC > 0 THEN + DO SET SAVECC = 0 ISREDIT CURSOR = &LN &CL END SET LPAREN = &STR(( SET RPAREN = &STR()) SET GOODCNT = 0 SET BADCNT = 0 LOOP: + ISREDIT (DATA) = LINE .ZCSR IF &SUBSTR(1:2,&STR(&DATA)) = &STR(//) THEN ELSE + DO SET BADCNT = &BADCNT + 1 GOTO CONTINUE END IF &SYSINDEX(&STR( DCB=&LPAREN.SYS3.DSCB,),&STR(&DATA)) > 0 THEN + DO SET BADCNT = &BADCNT + 1 GOTO CONTINUE END IF &SYSINDEX(&STR(/)&STR(/)&STR(*),&STR(&DATA)) = 1 THEN + DO SET BADCNT = &BADCNT + 1 GOTO CONTINUE END IF &SYSINDEX(&STR( LRECL=),&STR(&DATA)) > 0 THEN + DO SET BADCNT = &BADCNT + 1 GOTO CONTINUE END IF &SYSINDEX(&STR( RECFM=),&STR(&DATA)) > 0 THEN + DO SET BADCNT = &BADCNT + 1 GOTO CONTINUE END IF &SYSINDEX(&STR( BLKSIZE=),&STR(&DATA)) > 0 THEN + DO SET BADCNT = &BADCNT + 1 GOTO CONTINUE END IF &SYSINDEX(&STR( EXEC ),&STR(&DATA)) > 1 AND + &SYSINDEX(&STR(,),&STR(&DATA)) > 1 AND + &SYSINDEX(&STR(,),&STR(&DATA)) < + &SYSINDEX(&STR(=),&STR(&DATA)) THEN + DO SET A = &SYSINDEX(&STR(,),&STR(&DATA)) IF &A > 0 THEN SET A = &A - 1 END ELSE + SET A = &SYSINDEX(&STR(=),&STR(&DATA)) IF &A = 0 THEN + DO SET BADCNT = &BADCNT + 1 GOTO CONTINUE END ISREDIT FIND '&&' .ZCSR .ZCSR ALL IF &LASTCC = 0 THEN + DO ISREDIT CHANGE '&&' '¦' .ZCSR .ZCSR ALL ISREDIT (DATA) = LINE .ZCSR SET AMPER = YES END ELSE SET AMPER = NO SET B = &A SET EOL = NO SET Y = 0 SET LPCOUNT = 0 SET RPCOUNT = 0 DO WHILE &EOL = NO SET X = &SUBSTR(&B:&B,&STR(&DATA)) IF &STR(&X) = &STR(&LPAREN) THEN SET LPCOUNT = &LPCOUNT + 1 IF &STR(&X) = &STR(&RPAREN) THEN SET LPCOUNT = &LPCOUNT - 1 IF &STR(&X) = &STR(,) AND &LPCOUNT = 0 THEN + DO SET Y = &Y + 1 IF &Y = 1 THEN + SET LINE&Y = &SUBSTR(1:&B,&STR(&DATA)) ELSE + SET LINE&Y = &STR(// )+ &SUBSTR(&C:&B,&STR(&DATA)) SET C = &B + 1 END IF &SUBSTR(&B:72,&STR(&DATA)) > THEN SET B = &B + 1 ELSE + DO SET EOL = YES SET Y = &Y + 1 IF &Y > 1 THEN + DO SET GOODCNT = &GOODCNT + 1 SET LINE&Y = &STR(// )+ &SUBSTR(&C:&B,&STR(&DATA)) SET D = &STR(&&LINE&Y) IF &SUBSTR(3:&LENGTH(&STR(&D)),&STR(&D)) <= THEN + SET Y = &Y - 1 END ELSE + DO SET BADCNT = &BADCNT + 1 GOTO CONTINUE END END END ISREDIT LINE .ZCSR = '&LINE1' IF &ER = YES THEN ISREDIT CHANGE '¦' '&&' .ZCSR .ZCSR ALL DO WHILE &Y > 1 SET DATA = &STR(&&LINE&Y) IF &SYSINDEX(&STR('),&STR(&DATA)) > 0 THEN + DO ISREDIT LINE_AFTER .ZCSR = "&DATA" IF &ER = YES THEN ISREDIT CHANGE '¦' '&&' .ZCSR .ZCSR ALL END ELSE + DO ISREDIT LINE_AFTER .ZCSR = '&DATA' IF &ER = YES THEN ISREDIT CHANGE '¦' '&&' .ZCSR .ZCSR ALL END SET &Y = &Y - 1 END CONTINUE: + ISREDIT FIND NEXT P'=' 1 X SET SAVECC = &LASTCC IF &SAVECC = 0 THEN GOTO LOOP SET ZEDLMSG = &STR(&GOODCNT LINE(S) SPLIT, &BADCNT LINE(S) BYPASSED) ISPEXEC SETMSG MSG(UTLZ000) EXIT HELPSEC: + CLEAR WRITE *** HELP FOR EDIT MACRO 'JCLSPLIT' *** WRITE WRITE THE "JCLSPLIT" EDIT MACRO WILL SCAN "EXCLUDED" LINES IN A FILE WRITE BEING EDITED AND FIND JCL LINES THAT CONTAIN MORE THAN 1 WRITE PARAMETER ON A GIVEN LINE. THESE LINES ARE THEN SPLIT UP INTO WRITE MULTIPLE LINES OF 1 PARAMETER PER LINE. IF NO EXCLUDED LINES WRITE EXIST, THE MACRO WILL ATTEMPT TO PROCESS THE LINE THAT THE CURSOR WRITE IS ON WHEN THE MACRO IS INVOKED. THE MACRO IS ABLE TO GO THROUGH WRITE EVERY LINE IN THE FILE IF THEY ARE ALL "EXCLUDED". WHEN A LINE WRITE CAN BE SPLIT, IT IS SPLIT, AND WHEN IT CANNOT BE SPLIT, IT IS WRITE BYPASSED. THE MACRO COUNTS THE NUMBER OF LINES IT PROCESSES AND WRITE THE NUMBER IT BYPASSES AND DISPLAYS THE COUNTS AT THE END OF THE WRITE PROCESSING. WRITE WRITE BASIC SYNTAX : WRITE WRITE COMMAND ===> JCLSPLIT WRITE XX0100 //DD1 DD DSN=PCWCA.PWBAT.DEALER.CSIINFO(0),DISP=SHR WRITE 000200 //DD2 DD DSN=PCWCA.PWBBU.DEALER.CSIINFO(+1), WRITE 000300 // UNIT=SYSDA, WRITE 000400 // DISP=(NEW,CATLG,DELETE), WRITE 000500 // DCB=(SYS3.DSCB, WRITE 000600 // LRECL=1128,BLKSIZE=14664,RECFM=FB), WRITE 000700 // SPACE=(CYL,(2,5),RLSE) WRITE 000800 //* WRITE XX0900 //PS130 EXEC PGM=PWBPEF05,REGION=640K WRITE WRITE RESULT : WRITE WRITE COMMAND ===> WRITE 2 LINE(S) SPLIT, 7 LINE(S) BYPASSED WRITE 000100 //DD1 DD DSN=PCWCA.PWBAT.DEALER.CSIINFO(0), WRITE 000200 // DISP=SHR WRITE 000300 //DD2 DD DSN=PCWCA.PWBBU.DEALER.CSIINFO(+1), WRITE 000400 // UNIT=SYSDA, WRITE 000500 // DISP=(NEW,CATLG,DELETE), WRITE 000600 // DCB=(SYS3.DSCB, WRITE 000700 // LRECL=1128,BLKSIZE=14664,RECFM=FB), WRITE 000800 // SPACE=(CYL,(2,5),RLSE) WRITE 000900 //* WRITE 001000 //PS130 EXEC PGM=PWBPEF05, WRITE 001100 // REGION=640K WRITE WRITE SPECIAL NOTES : THE RESULTING "SPLIT" LINE WILL NOT NECESSARILY WRITE LINE UP WITH THE PREVIOUS LINE. INSTEAD, THE WRITE MACRO ALWAYS PUTS THE PARAMETER IN THE RESULTING WRITE NEW LINE IN COLUMN 16 PER VOLUME 5 STANDARDS. WRITE WRITE *** END OF HELP *** NO PROCESSING PERFORMED *** EXIT
Documentation
This utility will read all the JCL lines that are excluded in a file of JCL and attempt to split lines that contain more than one parameter per line into 2 or more lines, and line up the parameters in the proper columns.