/*REXX *************************************************************** LABNX AUTHOR: DAVID MCRITCHIE, CREATED 1987/11/12 IS03 "THE REXX MACROS TOOLBOX" UPDATED 1988/06/01 10:46 IS03 CONVERTED TO REXX 1993/05/21 18:23 IS03 ******************************************************************** TITLE: LABNX, LABELS THE INCLUSIVE LINES BETWEEN TWO LABELS USERS: TSO ISPF EDIT USERS, SPF/PC EDIT USERS, SCRIPT/DCF CONTRIBUTED: 1987/02/19 DAVID MCRITCHIE EXAMPLE: LABNX .ZFIRST .ZLAST NX OPTIONS: (ALL PARAMETERS ARE OPTIONAL) NX PROCESS ONLY NON-EXCLUDED LINES (DEFAULT) X PROCESS ONLY EXCLUDED LINES LPTR-RANGE LINE POINTER RANGE CONSISTS OF TWO POINTERS CC-RANGE ALTERNATE RANGE UTILIZING CC LINE COMMANDS LAB(RT) LABEL WILL BEGIN .RTAAA INSTEAD OF .LABAA LAB(1) LABEL WILL BEGIN .AAAAA INSTEAD OF .LABAA NOPROCESS AVOID PROCESS COMMAND -- USED BY ANOTHER CLIST REQUIREMENTS: (NONE) WILL DEFAULT TO PROCESSING ALL NX LINES. RELATED ISPF USAGE RESET LABEL, LOC LABEL (NEXT) RELATED CLISTS/EXECUTES NXNX WILL REDISPLAY ALL LABELED LINES IN RANGE THIS MACRO IS UNIVERSALLY AVAILABLE WITH THE STIPULATION THAT THAT THE ORIGINAL AUTHOR (DAVID MCRITCHIE) REMAINS CREDITED AND THAT NO CHARGE OR LICENSING FEE ACCRUES TO ANY PARTY. DOCUMENTED: IS03.SHARE.TEXT(LABNX) ON-LINE VIEWING ===> TSO CLIST LABNX HELP FORMATTED FOR SCREEN IN IS03.CLISTHLP.HELP(LABNX) ================================================================ **/ ADDRESS 'ISREDIT'; 'MACRO (PARMS) NOPROCESS'; NUMERIC DIGITS 10 NOTE = 'LINE_BEFORE .ZFIRST = NOTELINE ' NOPROCESS=0 AFTER=0; BEFORE=0; CHANGE='';CHG=''; ERR=''; ERROR=''; LAB=''; LABF=''; LABL=''; REMAINDER=''; ZEDLMSG='' ZEDSMSG=''; TOP=1; CNT = 5027411 /*AS IN .LABAA */; NX="NX" ALPHA='ABCDEFGHIJKLMNOPQRSTUVWXYZ' /* COLLECT PARAMETERS */ PARMS = TRANSLATE(PARMS) DO III = 1 TO 10; TOKEN = WORD(PARMS,III) IF TOKEN = '' THEN LEAVE TOKENX = TRANSLATE(TOKEN); IF TOKEN = "X" | TOKEN = "NX" THEN DO NX = TOKEN ITERATE III END; IF SUBSTR(TOKEN,1,1) = '.' THEN DO IF LABF = '' THEN LABF = TOKEN ELSE IF LABL = '' THEN LABL = TOKEN ELSE DO ZEDSMSG = '.LABEL RC=8' ZEDLMSG = 'TOO MANY LABELS --' LABF LABL TOKEN ADDRESS "ISPEXEC" "SETMSG MSG(ISRZ000)" EXIT 8 END ITERATE III END IF TOKEN = "NOPROCESS" THEN DO; NOPROCESS = 1; ITERATE III ;END IF SUBSTR(TOKEN,1,4) = 'LAB(' THEN DO PARSE VAR TOKEN "LAB(" LABCNX ")" LABCNT = LEFT(LABCNX||"AAAAA",5) IF SUBSTR(LABCNT,1,1) = 'Z' THEN LABCNT = LEFT("X"||LABCNT,5) LABCNT=STRIP(LABCNT) IF DATATYPE(LABCNT,"U") = 1 THEN DO MULT = 1; HOLD = 0; DO I = LENGTH(LABCNT) TO 1 BY -1 X = SUBSTR(LABCNT,I,1) J = POS(X,ALPHA) - 1 HOLD = HOLD + MULT * J MULT = MULT * 26 END; CNT = HOLD - 1; END ELSE DO ZEDSMSG = "LAB() INVALID" ZEDLMSG = 'MUST BE ALPHABETIC BETWEEN A AND YZZZZ' ADDRESS "ISPEXEC" "SETMSG MSG(ISRZ000)" EXIT 4 END ITERATE III END REMAINDER = REMAINDER TOKEN END III IF REMAINDER <> "" THEN DO ZEDSMSG = REMAINDER ZEDLMSG = REMAINDER "-- PARAMETERS UNKNOWN TO LABNX" ADDRESS "ISPEXEC" "SETMSG MSG(ISRZ000)" EXIT 8 END IF LABL = '' THEN DO IF NOPROCESS = 0 THEN DO /* LOOKS LIKE A DOUBLE NEGATIVE*/ "PROCESS RANGE C" IF RC = 0 THEN DO "LABEL .ZFRANGE = .LABF 1" "LABEL .ZLRANGE = .LABL 1" LABF = ".LABF" LABL = ".LABL" END END END IF LABL = '' THEN DO; LABF='.ZFIRST'; LABL='.ZLAST'; END; "(LABFNO) = LINENUM" LABF "(LABLNO) = LINENUM" LABL LINENO = LABFNO - 1 /* --- BEGIN CODE SPECIFIC TO LABNX ------------------------ */ "(TOP) = DISPLAY_LINES"; IF TOP > 0 THEN TOP = TOP - 1 LABFNO = LABFNO + 0; LABLNO = LABLNO + 0 NEXT: LINENO = LINENO + 1 IF LINENO > LABLNO THEN DO ZEDSMSG = 'COMPLETED' ZEDLMSG = "LABNX" PARMS "-- COMPLETED" ADDRESS "ISPEXEC" "SETMSG MSG(ISRZ000)" IF TOP = 0 THEN "LOC 0" ELSE DO "(XVAR) = XSTATUS" TOP RCX = RC "LOC" TOP /* WHERE WE BEGAN BUT UP ONE LINE */ "XSTATUS" TOP "=" XVAR END EXIT 1 END "(XSTATUS) = XSTATUS" LINENO IF XSTATUS \= NX THEN SIGNAL NEXT /* NX (LINES BY DEFAULT) */ HIGHER: "(LABEL,DEPTH) = LABEL" LINENO /* "LINE_AFTER" LINENO "= NOTELINE """LABEL DEPTH""""*/ IF LABEL /= "" THEN SIGNAL NEXT CNT = CNT + 1 R = CNT;CODE=''; PASS=0 DO WHILE (R > 0) RR = R//26 + 1 R = R%26 CODE = SUBSTR(ALPHA,RR,1) || CODE END CODE = '.'||RIGHT('AAAAAAA'CODE,5) "(VAR1) = LINENUM" CODE IF RC = 0 THEN SIGNAL HIGHER "LABEL" LINENO "= " CODE 0 SIGNAL NEXT EXIT