Return to Mainframe Utilities Page
Module
ISREDIT MACRO (VAR1) 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 /******************************************************************/ /* 'JCLBLKSZ' EDIT MACRO. SET UP OPTIMUM BLKSIZES FOR JCL */ /* AUTHOR : DAVID LEIGH DATE : 3-19-90 */ /******************************************************************/ SELECT (&VAR1) WHEN (HELP) GOTO HELPSEC WHEN (WRITE) DO SET MSGFLAG = SET LINEPOS = &STR(LINE_AFTER) END WHEN (NOWRITE) DO SET MSGFLAG = MSGLINE SET LINEPOS = &STR(LINE_BEFORE) END OTHERWISE DO IF &STR(&VAR1) > THEN + DO SET ZEDLMSG = &STR(VALID PARAMETER ARE "WRITE" OR + "NOWRITE". DEFAULT IS "NOWRITE".) ISPEXEC SETMSG MSG(UTLZ001) EXIT CODE(12) END ELSE + DO SET MSGFLAG = MSGLINE SET LINEPOS = &STR(LINE_BEFORE) END END END SET DEFAULTUNIT = &STR(3380) ISREDIT RESET EXCLUDED ISREDIT EXCLUDE ALL '*' 3 ISREDIT FIND FIRST 'DCB=' NX SET SAVECC = &LASTCC DO WHILE &SAVECC = 0 SET INCR = &INCR + 1 ISREDIT RESET LABEL ISREDIT LABEL .ZCSR = .BEGIN ISREDIT FIND NEXT P'¬' 3 NX IF &LASTCC > 0 THEN + DO SET END = &STR(.BEGIN) END ELSE + DO ISREDIT FIND PREV P'=' 4 NX ISREDIT (LN,CL) = CURSOR ISREDIT (LINENUM) = LINENUM .BEGIN IF &LN = &LINENUM THEN SET END = &STR(.BEGIN) ELSE + DO SET END = &STR(.END) ISREDIT LABEL .ZCSR = &STR(&END) END END ISREDIT FIND PREV P'¬' 3 NX ISREDIT (LN,CL) = CURSOR ISREDIT (LINENUM) = LINENUM .BEGIN IF &LN = &LINENUM THEN SET DD = &STR(.BEGIN) ELSE + DO SET DD = &STR(.DD) ISREDIT LABEL .ZCSR = &STR(&DD) END IF &INCR = 1 THEN ISREDIT (SLN,SCL) = CURSOR ISREDIT FIND FIRST 'UNIT=' &STR(&DD) &STR(&END) NX IF &LASTCC = 0 THEN + DO ISREDIT FIND NEXT P'$' .ZCSR .ZCSR ISREDIT (ULN1,UCL1) = CURSOR ISREDIT FIND NEXT ' ' .ZCSR .ZCSR ISREDIT (ULN2,UCL2) = CURSOR ISREDIT FIND FIRST 'CART' &UCL1 &UCL2 .ZCSR .ZCSR SET TAPECC1 = &LASTCC ISREDIT FIND FIRST 'TAPE' &UCL1 &UCL2 .ZCSR .ZCSR SET TAPECC2 = &LASTCC ISREDIT FIND FIRST 'AFF' &UCL1 &UCL2 .ZCSR .ZCSR SET TAPECC3 = &LASTCC ISREDIT FIND FIRST 'DISK' &UCL1 &UCL2 .ZCSR .ZCSR SET DISKCC1 = &LASTCC ISREDIT FIND FIRST 'SYSDA' &UCL1 &UCL2 .ZCSR .ZCSR SET DISKCC2 = &LASTCC ISREDIT FIND FIRST '3380' &UCL1 &UCL2 .ZCSR .ZCSR SET DISKCC3 = &LASTCC IF &TAPECC1 = 0 OR &TAPECC2 = 0 OR &TAPECC3 = 0 THEN + SET UNITPASS = TAPE IF &DISKCC1 = 0 OR &DISKCC2 = 0 OR &DISKCC3 = 0 THEN + SET UNITPASS = 3380 END ISREDIT FIND FIRST 'LRECL=' .BEGIN &STR(&END) NX IF &LASTCC > 0 THEN GOTO NEXT ISREDIT (LN,CL) = CURSOR SET A = &CL + 6 ISREDIT CURSOR = &LN &A ISREDIT FIND P'#' &A &A .ZCSR .ZCSR FIRST NX IF &LASTCC > 0 THEN GOTO NEXT ISREDIT FIND NEXT P'$' .ZCSR .ZCSR NX ISREDIT (LN,CL) = CURSOR ISREDIT (DLINE) = LINE .ZCSR SET B = &CL - 1 SET LRECL = &SUBSTR(&A:&B,&NRSTR(&DLINE)) IF &STR(&UNITPASS) = THEN SET UNITPASS = &STR(&DEFAULTUNIT) ISPEXEC SELECT CMD(%BLKSIZE &LRECL 0 BATCH DEVICE(&UNITPASS)) ISPEXEC VGET (VBLKSIZE BLKSIZE) SHARED SET RECFM = F ISREDIT FIND FIRST 'RECFM=' .BEGIN &STR(&END) NX IF &LASTCC = 0 THEN + DO ISREDIT FIND NEXT '=' NX ISREDIT FIND NEXT P'¬' NX ISREDIT (LN,CL) = CURSOR ISREDIT (RECFM) = LINE .ZCSR SET RECFM = &SUBSTR(&CL:&CL,&STR(&SYSNSUB(1,&RECFM))) END IF &STR(&RECFM) = V THEN SET BLKSIZE = &VBLKSIZE ISREDIT FIND FIRST 'BLKSIZE=' .BEGIN &STR(&END) NX IF &LASTCC > 0 THEN + DO SET BLKSIZE = &STR(BLKSIZE=&BLKSIZE) SET BLEN = &LENGTH(&STR(&BLKSIZE)) ISREDIT FIND LAST P'¬' 1 72 .ZCSR .ZCSR NX ISREDIT (LN,CL) = CURSOR IF &EVAL(71 - &BLEN) < &CL THEN + DO SET PUNCT = &SUBSTR(&CL:&CL,&STR(&DLINE)) IF &STR(&PUNCT) = &STR()) THEN + DO SET NEWLINE = + &SUBSTR(1:&CL - 1,&STR(&DLINE))&STR(,) ISREDIT &LINEPOS .ZCSR = &MSGFLAG + '&NRSTR(&NEWLINE)' ISREDIT FIND FIRST P'¬' 3 72 .ZCSR .ZCSR NX ISREDIT (LN,CL) = CURSOR ISREDIT &LINEPOS .ZCSR = &MSGFLAG + < 1 '//' &CL '&BLKSIZE)' > IF &MSGFLAG = THEN + DO ISREDIT DELETE ALL .ZCSR .ZCSR ISREDIT LINE_BEFORE .ZCSR = + MSGLINE + '//* PREVIOUS VERSION OF THE LINE WAS:' ISREDIT LINE_BEFORE .ZCSR = + MSGLINE + '&STR(&SYSNSUB(1,&DLINE))' END END ELSE + DO ISREDIT FIND FIRST P'¬' 3 72 .ZCSR .ZCSR NX ISREDIT (LN,CL) = CURSOR ISREDIT &LINEPOS .ZCSR = &MSGFLAG + < 1 '//' &CL '&BLKSIZE&PUNCT' > END END ELSE + DO SET PUNCT = &SUBSTR(&CL:&CL,&STR(&DLINE)) IF &PUNCT = &STR()) OR &PUNCT = &STR(,) THEN + SET NEWLINE = &SUBSTR(1:&CL - 1,&STR(&DLINE))+ &STR(,&BLKSIZE&PUNCT) ELSE + SET NEWLINE = &SUBSTR(1:&CL,&STR(&DLINE))+ &STR(,&BLKSIZE) ISREDIT &LINEPOS .ZCSR = &MSGFLAG '&NRSTR(&NEWLINE)' IF &MSGFLAG = THEN + DO ISREDIT DELETE ALL .ZCSR .ZCSR ISREDIT LINE_BEFORE .ZCSR = MSGLINE + '//* PREVIOUS VERSION OF THE LINE WAS:' ISREDIT LINE_BEFORE .ZCSR = MSGLINE + '&STR(&SYSNSUB(1,&DLINE))' END END END ELSE + DO ISREDIT (LN,CL) = CURSOR SET A = &CL + 7 ISREDIT CURSOR = &LN &A ISREDIT FIND NEXT P'-' &A 72 .ZCSR .ZCSR NX ISREDIT (LN,CL) = CURSOR ISREDIT (DLINE) = LINE .ZCSR SET NEWLINE = &SUBSTR(1:&A,&STR(&DLINE))&BLKSIZE+ &SUBSTR(&CL:72,&STR(&DLINE)) ISREDIT &LINEPOS .ZCSR = &MSGFLAG '&NRSTR(&NEWLINE)' IF &MSGFLAG = THEN + DO ISREDIT DELETE ALL .ZCSR .ZCSR ISREDIT LINE_BEFORE .ZCSR = MSGLINE + '//* PREVIOUS VERSION OF THE LINE WAS:' ISREDIT LINE_BEFORE .ZCSR = MSGLINE + '&STR(&SYSNSUB(1,&DLINE))' END END NEXT: + ISREDIT FIND LAST P'=' &STR(&END) &STR(&END) NX ISREDIT FIND NEXT 'DCB=' NX SET SAVECC = &LASTCC END IF &MSGFLAG = MSGLINE THEN + DO SET ZEDSMSG = &STR(PROCESSED &INCR DD(S)) SET ZEDLMSG = &STR(*** "MESSAGE" LINE(S) INSERTED FOR + &INCR DD STATEMENTS ***) END ELSE + DO SET ZEDSMSG = &STR(&INCR DD(S) MODIFIED) SET ZEDLMSG = &STR(*** "DATA" LINE(S) WERE MODIFIED FOR + &INCR DD STATEMENTS ***) END ISPEXEC SETMSG MSG(UTLZ000) ISREDIT RESET EXCLUDED ISREDIT CURSOR = &SLN &SCL EXIT HELPSEC: + 02480000 ISPEXEC SELECT PGM(ISPTUTOR) PARM(HELPSHEL) 02490000 SET ZEDLMSG = &STR(*** HELP DISPLAYED FOR JCLBLKSZ UTILITY + 02490000 *** NO PROCESSING PERFORMED ***) 02490000 ISPEXEC SETMSG MSG(UTLZ000) 02490000 EXIT
Documentation
The JCLBLKSZ edit macro will automatically interrogate your JCL, find all the LRECL DCB parameters, calculate an efficient BLKSIZE parameter and insert it in the JCL. Simply type JCLBLKSZ on the command line and pressand it does the processing. By default, JCLBLKSZ will insert an edit "message line" into the JCL before the line it would replace and show you what the BLKSIZE would be. In ISPF 3.0 and higher, you could then use the MD (make data) line command and make the message into a data line. Alternatively, you can specify the WRITE parameter when you invoke JCLBLKSZ and it will go ahead and delete the old line and replace it with the new line with the correct BLKSIZE parameter. You can have a BLKSIZE parameter in your DCB parameter, or you may leave it out. Either way, JCLBLKSZ will create a correct new line and insert it into the JCL.