/* TITLE:*REXX* GMLTP CREATE TAGS BETWEEN TAB CHARACTERS */ /* FUNCTIONS ON ON NX LINES */ /* USERS: TSO ISPF EDIT USERS | SCRIPT USERS */ /* CONTRIBUTED: 1990/12/22 DAVID MCRITCHIE */ /* */ /* EXAMPLE: GMLTP 2 1 :GT12. :EGT12. */ /* GMLTP 3 1 MIN(65) */ /* GMLTP 2 4 :GT12. :EGT12. */ /* GMLTP 2 4 NOTELINE (TESTING) */ /* */ /* OPTIONS: */ /* *NUMBER A* MAKE A-TH "^" TO "^" */ /* *NUMBER B* MAKE NEXT B-TH "^" TO "^" */ /* IF NOT FOUND WILL PLACE AFTER LAST CHARACTER FOUND */ /* MIN(N) IF 2ND TAB NOT FOUND USE COL INSTEAD OF LAST POS */ /* .LABEL1 OPTIONAL START LABEL */ /* .LABEL2 OPTIONAL LAST LABEL */ /* */ /* REQUIREMENTS: */ /* TWO NUMBERS TO INDICATE FIRST TAB AND NEXT TAB TO PROCESS */ /* CONTROL ASIS */ "ISREDIT MACRO (TOK1,TOK2,TOK3,TOK4,TOK5,TOK6,TOK7,TOK8,TOK9,TOK10, , TOK11,TOK12,TOK13,TOK14,TOK15,TOK16,TOK17,TOK18,TOK19, , TOK20,TOK21,TOK22,TOK23,TOK24,TOK25,TOK26,TOK27,TOK28)" TAB1 = 0;TAB2=0;TAB1C="^";TAB2C="^";TAG1="";TAG2="" ENTIRE="";MIN=0;LABF='';LABL='';NOTELINE="" REMAIN = " " ADDRESS "ISREDIT" "LINE_BEFORE .ZF = NOTELINE '"||TIME('N')||" GMLTP: " , TOK1 TOK2 TOK3 TOK4 TOK5 "'" DO I = 1 TO 28 BY 1; DO INNER = 1 TO 1 BY 1; TOKENX = TOK||I TOKENX = VALUE(TOKENX) TOKEN = TRANSLATE(TOKENX) IF TOKEN = "" THEN LEAVE I IF TAB2 = 0 THEN DO IF DATATYPE(TOKEN) = 'NUM' THEN DO IF TAB1 = 0 THEN TAB1 = TOKEN;ELSE TAB2=TOKEN LEAVE INNER END END IF TOKEN= "ENTIRE" THEN DO; ENTIRE=TOKEN;LEAVE INNER; END; IF TOKEN="NOTELINE" THEN DO; NOTELINE=TOKEN;LEAVE INNER; END; IF SUBSTR(TOKEN,1,4) = "MIN(" THEN DO MIN = SUBSTR(TOKEN,5,LENGTH(TOKEN)-5) MIN = MIN + 1 LEAVE INNER END IF SUBSTR(TOKEN,1,1) = "." THEN DO IF LABF = "" THEN DO LABF = TOKEN LEAVE INNER END IF LABL = "" THEN DO LABL = TOKEN LEAVE INNER END ZEDSMSG = "LABEL TOKENS" ZEDLMSG = "EXACTLY TWO LABELS ARE REQUIRED " , ||"FOUND " LABF ", " LABL " AND " TOKEN ADDRESS 'ISPEXEC' ' SETMSG MSG(ISRZ000)' EXIT 12 END IF TAG1 = "" THEN DO; TAG1=TOKENX;LEAVE INNER; END; IF TAG2 = "" THEN DO; TAG2=TOKENX;LEAVE INNER; END; REMAIN = REMAIN TOKEN END INNER END I IF REMAIN /= "" THEN , SAY REMAIN "-- NOT PROVIDED FOR IN .EXEC" /*****************************************************************/ /*****************************************************************/ IF LABF = "" THEN ENTIRE = "ENTIRE" IF ENTIRE = "ENTIRE" THEN DO /*** LABELS ARE REQUIRED ***/ IF LABF = "" THEN DO LABF = ".ZFIRST" LABL = ".ZLAST" END ELSE DO SAY LENGTH(LABF) LENGTH(LABL) ZEDSMSG = "LABEL CONFLICT" ZEDLMSG = '"ENTIRE" IMPLIES .ZFIRST .ZLAST ' , || 'CONFLICTS WITH ' LABF ' AND ' LABL ADDRESS 'ISPEXEC' ' SETMSG MSG(ISRZ000)' EXIT 12 END END "ISREDIT (#LABF) = LINENUM " LABF IF RC ^= 0 THEN DO ZEDSMSG = LABF "LABEL" ZEDLMSG = ZEDSMSG "DOES NOT EXIST" ADDRESS 'ISPEXEC' ' SETMSG MSG(ISRZ000)' EXIT 12 END "ISREDIT (#LABL) = LINENUM " LABL IF RC ^= 0 THEN DO ZEDSMSG = LABL "LABEL" ZEDLMSG = ZEDSMSG "DOES NOT EXIST" ADDRESS 'ISPEXEC' ' SETMSG MSG(ISRZ000)' EXIT 12 END /************** END OF LABEL REQUIREMENTS *******************/ /******************** CODE FOR GMLTP COMMANDS ************/ /******************** CODE FOR GMLTP COMMANDS ************/ /******************** CODE FOR GMLTP COMMANDS ************/ ADDRESS "ISREDIT" "FIND FIRST NX &LABF. &LABL. '"||TAB1C||"'" IF RC ^= 0 THEN EXIT 4 "FIND FIRST P'=' .ZCSR .ZCSR";J=1 DO FCARDS = 1 TO 20000 BY 1 /*FIX THIS LATER TO FOREVER*/ "FIND NEXT NX '"||TAB1C||"'" IF RC /= 0 THEN EXIT 0 DO CARD = 1 TO 1 BY 1 "(VAR036) = LINE .ZCSR" J=1; DO I=1 TO TAB1 BY 1 JJ=INDEX(VAR036,TAB1C,J) IF JJ=0 THEN LEAVE CARD J=JJ+1 END VAR036=SUBSTR(VAR036,1,J-1)||TAG1||SUBSTR(VAR036,J) J=J+LENGTH(TAG1)+1 DO I=1 TO TAB2 BY 1 JJ=INDEX(VAR036,TAB2C,J) IF JJ=0 THEN DO DO J=LENGTH(VAR036) TO 1 BY -1 WHILE(SUBSTR(VAR036,J,1)=' ') END; J=J+2; IF MIN > J THEN J=MIN LEAVE I; END; J=JJ+1 END I VAR036=SUBSTR(VAR036,1,J-2)||TAG2||SUBSTR(VAR036,J-1) IF NOTELINE ^= "NOTELINE" THEN DO /*REPLACE LINE WITH NEWLINE*/ "(LINE#,COL#) = CURSOR" VAR036= TRANSLATE(VAR036,X2C('0809'),'"&') "LINE_BEFORE .ZCSR = DATALINE """||VAR036||"""" "DEL .ZCSR .ZCSR ALL" "CURSOR = " LINE# 0 "ISREDIT CHANGE ALL .ZCSR .ZCSR '"||X2C('08')||"' '""' " "ISREDIT CHANGE ALL .ZCSR .ZCSR '"||X2C('09')||"' '50'X " END ELSE DO VAR036= TRANSLATE(VAR036,'~!','"&') "LINE_BEFORE .ZCSR = NOTELINE """||VAR036||"""" END "FIND LAST P'^' .ZCSR .ZCSR" END CARD END FCARDS SAY PROGRAM IN ERROR OR TIME TO REVISE -- HAVE MORE THAN 20 FCARDS EXIT CODE(12)