Return to Mainframe Utilities Page
Module
ISREDIT MACRO (SPLIT)
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
IF &SPLIT = HELP THEN GOTO HELPSEC
/**********************************************************************
/* EDIT MACRO : LINEUPTO *
/* AUTHOR : DAVE LEIGH *
/* DATE : 6-4-90 *
/* FUNCTION : LINE UP " TO " COBOL WORD IN COBOL PROGRAMS. FINDS *
/* THE " TO " FARTHEST TO THE RIGHT WITHIN EACH PARAGRAPH*
/* OR SECTION AND ATTEMPTS TO LINE UP ALL THE " TO " *
/* WORDS IN THAT SECTION. ERROR LINES CAN BE FOUND WITH *
/* THE "L ERR" COMMAND. *
/**********************************************************************
/**********************************************************************
/* WHAT EDIT PROFILE NUMBERING SCHEME IS BEING USED? *
/**********************************************************************
ISREDIT (X,Y) = NUMBER
IF &X = ON AND &SYSINDEX(&STR( COBOL),&STR(&Y)) > 0 THEN +
DO
SET COL1 = 1
SET COL2 = 66
END
ELSE +
DO
SET COL1 = 7
SET COL2 = 72
END
/**********************************************************************
/* SET UP THE LINES TO PROCESS AND GET TO THE PROCEDURE DIVISION *
/**********************************************************************
ISREDIT EXCLUDE ALL P'¬' &COL1
ISREDIT EXCLUDE ALL ' GO TO '
ISREDIT EXCLUDE ALL ' DISPLAY '
ISREDIT FIND FIRST ' PROCEDURE ' &COL1 &EVAL(&COL1 + 10 + 3)
IF &LASTCC > 0 THEN +
DO
SET ZEDLMSG = &STR(*** COULD NOT FIND A PROCEDURE DIVISION ***)
ISPEXEC SETMSG MSG(UTLZ001)
GOTO FINAL
END
/**********************************************************************
/* HERE WE GO LOOPING THROUGH THE CODE *
/**********************************************************************
SET NUMSHIFT = 0
SET LASTFLAG = NO
ISREDIT FIND NEXT P' ª' &COL1 &EVAL(&COL1 + 2 + 3) NX
DO WHILE &LASTCC = 0 OR &LASTFLAG = YES
ISREDIT LABEL .ZCSR = .QQX
ISREDIT SEEK NEXT P'=' &COL1 &EVAL(&COL2 + 1 + 3)
ISREDIT FIND NEXT P' ª' &COL1 &EVAL(&COL2 + 2 + 3) X
IF &LASTCC > 0 THEN +
DO
ISREDIT FIND FIRST P'=' .ZLAST .ZLAST
SET LASTFLAG = YES
END
ISREDIT LABEL .ZCSR = .QQY
SET TOCOL = 0
ISREDIT FIND FIRST ' TO ' NX .QQX .QQY
DO WHILE &LASTCC = 0
ISREDIT (NULL,COL) = CURSOR
ISREDIT FIND PREV P'¬' &EVAL(&COL1 + 5) &COL2 .ZCSR .ZCSR
IF &LASTCC = 0 THEN +
DO
ISREDIT (LN,XCOL) = CURSOR
SET X = &COL - &XCOL
IF &X > 1 THEN +
DO
SET &XCOL = &XCOL + 1
SET X = &COL - &XCOL
ISREDIT BOUNDS &XCOL &COL2
ISREDIT SHIFT < .ZCSR &X
ISREDIT BOUNDS &COL1 &COL2
SET COL = &XCOL
END
ISREDIT CURSOR = &LN &COL2
END
IF &COL > &TOCOL THEN SET TOCOL = &COL
ISREDIT FIND NEXT ' TO ' NX .QQX .QQY
END
IF &TOCOL > 0 THEN +
DO
ISREDIT FIND FIRST ' TO ' NX .QQX .QQY
DO WHILE &LASTCC = 0
ISREDIT (LN,COL) = CURSOR
IF &COL < &TOCOL THEN +
DO
SET X = &TOCOL - &COL
ISREDIT BOUNDS = &COL &COL2
ISREDIT SHIFT > .ZCSR &X
SET NUMSHIFT = &NUMSHIFT + 1
IF &EVAL(&NUMSHIFT//10) = 0 THEN +
WRITE *** &NUMSHIFT "TO"S PROCESSED
ISREDIT BOUNDS = &COL1 &COL2
END
ISREDIT CURSOR = &LN &COL2
ISREDIT FIND NEXT ' TO ' NX .QQX .QQY
END
END
IF &LASTFLAG = NO THEN ISREDIT FIND FIRST P'=' .QQY .QQY
ELSE +
DO
SET LASTFLAG = NO
SET LASTCC = 8
END
END
SET ZEDLMSG = &STR(PROCESSED &NUMSHIFT "TO"S...USE "L ERR" TO FIND +
ANY UNSUCCESSFUL ATTEMPTS)
ISPEXEC SETMSG MSG(UTLZ000)
FINAL: +
ISREDIT RESET EXCLUDED
IF &SPLIT = SPLIT THEN %SPLITTO
EXIT
HELPSEC: + 02480000
ISPEXEC SELECT PGM(ISPTUTOR) PARM(UTILH098) 02490000
SET ZEDLMSG = &STR(*** HELP DISPLAYED FOR LINEUPTO UTILITY + 02490000
*** NO PROCESSING PERFORMED ***) 02490000
ISPEXEC SETMSG MSG(UTLZ000) 02490000
EXIT
Documentation
This utility allows the user to type "lineupto" on the command line while
editing their COBOL program and have their "TO"s in COBOL MOVE statements
automatically aligned together. The utility will scan the program and process
each paragraph/section seperately and attempt to line up each "TO" to the
rightmost "TO" in that paragraph/section. Before aligning it moves the "TO"s
as far left as possible so as to make the most of available space on a given
line. Lines which could not be lined up are marked as edit error lines
(==ERR>). Specifying parm "split" will automatically split lines in error (see
SPLITTO)

0 Comments