/* REXX */ /* */ /* AUTHOR: Mark Zelden */ /* */ /* Last Updated 05/01/2007 */ /* */ /* Trace ?R */ Address ISREDIT "MACRO (col1 col2 parm label1 label2)" /* Address ISPEXEC "CONTROL ERRORS RETURN" */ /* */ /* This edit macro will FILL column(s) with characters. */ /* The FILL can optionally be limited to specific lines */ /* if labels are used. Exluded lines are omitted from */ /* the operation. */ /* EXAMPLES: FILL 1 2 '/' ; FILL 2 7 'DELETE' .A .B */ /* */ /* check for numeric column numbers */ If col1 <> '' then do If Datatype(col1,Number) <> 1 then do zedsmsg = 'START COLUMN NOT NUMERIC' zedlmsg = 'THE STARTING COLUMN FOR THE', 'FILL MUST BE NUMERIC.' Address ISPEXEC "SETMSG MSG(ISRZ001)" /* msg - with alarm */ Exit 12 End If col2 = '' then do zedsmsg = 'NO ENDING COLUMN' zedlmsg = 'AN ENDING COLUMN FOR THE', 'FILL MUST BE SPECIFIED.' Address ISPEXEC "SETMSG MSG(ISRZ001)" /* msg - with alarm */ Exit 12 End End If col2 <> '' then do If Datatype(col2,Number) <> 1 then do zedsmsg = 'END COLUMN NOT NUMERIC' zedlmsg = 'THE ENDING COLUMN FOR THE', 'FILL MUST BE NUMERIC.' Address ISPEXEC "SETMSG MSG(ISRZ001)" /* msg - with alarm */ Exit 12 End If col2 < col1 then do zedsmsg = 'END COL < START COL' zedlmsg = 'THE ENDING COLUMN MUST BE GREATER THAN OR', 'EQUAL TO THE STARTING COLUMN.' Address ISPEXEC "SETMSG MSG(ISRZ001)" /* msg - with alarm */ Exit 12 End End If col1 = '' then do zedsmsg = 'NO STARTING COLUMN' zedlmsg = 'YOU MUST SPECIFY A STARTING COLUMN', 'FOR THE CHARACTER FILL.' Address ISPEXEC "SETMSG MSG(ISRZ001)" /* msg - with alarm */ Exit 12 End If parm = '' then do zedsmsg = 'NO FILL CHARACTER' zedlmsg = 'YOU MUST SPECIFY A FILL CHARACTER', 'AS THE THIRD PARAMETER.' Address ISPEXEC "SETMSG MSG(ISRZ001)" /* msg - with alarm */ Exit 12 End "(width) = DATA_WIDTH " /* length of line */ width = Format(width) /* remove leading zeros */ If col1 < 1 | col2 < 1 | col1 > width | col2 > width then do zedsmsg = 'INVALID COLUMN NUMBER' zedlmsg = 'ALL COLUMN SPECIFICATIONS MUST BE' , 'BETWEEN 1 AND' width Address ISPEXEC "SETMSG MSG(ISRZ001)" /* msg - with alarm */ Exit 12 End /* */ /* Save current BOUNDS setting */ /* */ "(status) = USER_STATE" /***********************************************/ /* FIND OUT IF LABELS ARE BEING USED */ /***********************************************/ Call FIND_LABELS /***********************************************/ parmck = Translate(parm) If parmck = 'X' | parmck = 'NX' | parmck = '*' , | parmck = '/*' then parm = "'" ||parm|| "'" /***************************************************/ /* Begin changing data */ /***************************************************/ "BOUNDS "col1 col2 "C P'=' ' ' ALL NX "label1 label2 /* all characters */ "C P'=' " || parm || " ALL NX "label1 label2 /* all characters */ /***************************************************/ /* End of changes */ /***************************************************/ /* */ /* Find the number of changed lines and */ /* and save them for later use */ /* */ "SEEK " || parm || " ALL NX "label1 label2 "(junk,count) = SEEK_COUNTS" /* */ /* restore saved BOUNDS setting */ /* */ "USER_STATE = (status)" "RESET CHANGE ERROR" /* */ /* display changed lines count */ /* */ count=count+0 /* remove leading zeros */ zedsmsg = count 'LINES CHANGED' zedlmsg = count 'LINES WERE FILLED WITH "'parm'".' Address ISPEXEC "SETMSG MSG(ISRZ000)" /* msg - no alarm */ Exit 0 /*********************************/ /* SUB-ROUTINE TO FIND LABELS */ /*********************************/ FIND_LABELS: If label1 = '' then return If label2 = '' then label2 = label1 firstlab = 'NOTFOUND' lastlab = 'NOTFOUND' label1 = Translate(label1) label2 = Translate(label2) "(saveln) = DISPLAY_LINES" "UP MAX" Do forever "LOCATE LAB NEXT" if rc <> 0 then leave "(labline,junk) = DISPLAY_LINES" "(lab,junk) = LABEL" labline if lab = label1 then firstlab = labline if lab = label2 then lastlab = labline End If label1 ='.ZFIRST'| label1 = '.ZLAST' | , label1 ='.ZF'| label1 = '.ZL' then firstlab = label1 If label2 ='.ZFIRST'| label2 = '.ZLAST' | , label2 ='.ZF'| label2 = '.ZL' then lastlab = label2 /* */ /* return display lines to originial position */ /* */ "UP MAX" If saveln <> 1 then "DOWN " saveln /* don't scroll if at top */ /* */ If firstlab = 'NOTFOUND' then do zedsmsg = 'RANGE LABEL ERROR' zedlmsg = 'THE SPECIFIED RANGE LABEL "' || label1 '" WAS', 'NOT FOUND' Address ISPEXEC "SETMSG MSG(ISRZ001)" /* msg - with alarm */ Exit 12 End If lastlab = 'NOTFOUND' then do zedsmsg = 'RANGE LABEL ERROR' zedlmsg = 'THE SPECIFIED RANGE LABEL "' || label2 '" WAS', 'NOT FOUND' Address ISPEXEC "SETMSG MSG(ISRZ001)" /* msg - with alarm */ Exit 12 End Return