/* REXX -- */ ADDRESS "ISREDIT" "MACRO NOPROCESS (FLOW)" /* TITLE: Reformat and sort dictionary update ".du add " cards */ /* Users: SCRIPT users */ /* Entry: Used as an EDIT CLIST within ISPF EDIT ===> DUADD */ /* Contributed: 1985/08/05 David McRitchie */ /* Converted to REXX mainly line for line on 1994/04/26 D.McR. */ /* Options: FLOW option default is 70 e.g. ===> DUADD 70 */ /* The resulting sorted ".du add " entries will fit within the */ /* column specified since that is what TFLOW does. */ /* The DUADDSTR option default is ".du add " */ /* ===> DUADD (,'.du add') */ /* Requirements: */ /* All ".du add " in the section must begin in col 1 and have no */ /* other control statements .DUADF label required at beginning of */ /* a contiguous ".du add " section .DUADX label immediately */ /* after end of the contiguous ".du add " section. */ /* */ /* The reason that .DUADX must be below the last line is to be able */ /* to identify when there is only one line to be processed -- a */ /* possible alternative might have been to pass names of the line */ /* labels when invoking this edit macro, but I think the method */ /* used is better than the alternative. */ /* */ /* SPECIAL OR HIDDEN FEATURES: */ /* Used by the CLIST DUADDX to convert an entire list to .DU ADD */ /* cards provided that "DSMDOT459I WORDS NOT FOUND:" is found in */ /* appropriate place. */ /* e.g. DUADDX S6133 */ /* would convert users SYSVAR(SYSUID).S6133..LIST */ /* dataset by invoking... Address "ISPEXEC", */ /* "EDIT DATASET(SYSVAR('sysuid').S6133..LIST) MACRO(DUADD)"*/ /* */ /* ************ ADDED D.MCR 1987/05/22 TO add/del list of names */ /* example ===> duadd CNTL MIDILIST hasn haven */ /******************************/ "PROCESS RANGE C" If rc = 0 then Do /* make CC process range look like original usage */ "(duadfNO) = LINENUM .DUADF" LCC1 = rc "(duadlNO) = LINENUM .DUADX" LCC2 = rc If LCC1 = 0 | LCC2 = 0 then Do ZEDSMSG = ".DUADF CC Conflict" ZEDLMSG = ".DUADF .DUADX labels conflict with CC range" Address "ISPEXEC" "SETMSG MSG(ISRZ000) " END "LABEL .ZFRANGE = .DUADF 0" "(LABL) = LINENUM .ZLRANGE" LABL = LABL + 1 "LABEL" labl "= .DUADX 0" END /******************************/ If flow = "(1)" then Do SFLOW = "(1)" "c all .duadf .duadx 1 '.if &&&&locdu. ne no .du add ' '.du add '" FLOW = 52 END If flow = "(2)" then Do FLOW = 52 END If flow = "(3)" then Do "c all .duadf .duadx 1 '.du add ' '.if &&&&locdu. ne no .du add '" EXIT 1 END xflow = translate(flow) dflow = datatype(flow) if xflow = "DICTIONARY" then Do Address "TSO" "$EDIT SYS6.DCF40.INSTALL(DSMDMJCL)" EXIT 1 END if dflow = "CHAR" & flow \= "" then Do "(DSNX) = DATASET" "F 1 first '.if &&&&locdu. ne no '" If rc = 0 then DSNX = "TECH.LIBR2.TEXT" /*fake it */ If dsnx = "TECH.LIBR2.TEXT" then Do "F 1 first '.if &&&&locdu. ne no .du add '" If rc = 0 then Do "LOC 30 " "f prev '.if &&&&locdu. ne no .du add '" "LINE_AFTER .ZCSR = ", """.if &&&&locdu. ne no .du add" flow"""" "LINE_AFTER .ZCSR = ", "NOTELINE '.* duadd --------------'" END ELSE "LINE_AFTER .ZFIRST = ", "'.if &&&&locdu. ne no .du add" flow"'" "F 1 last '.if &&&&locdu. ne no .du del '" If rc = 0 then "LINE_AFTER .ZCSR = ", """.if &&&&locdu. ne no .du del" FLOW"""" ELSE "LINE_AFTER .ZLAST = ", """.if &&&&locdu. ne no .du del" flow"""" /*huh? "F 1 last '.if &&&&locdu. ne no .du del" flow"'" */ "loc .ZLAST" "up 15" END ELSE Do "F 1 first '.du add '" If rc = 0 then Do "LOC 30 " "f prev 1 '.du add '" "LINE_AFTER .ZCSR = "".du add" flow"""" "LINE_AFTER .ZCSR = ", "NOTELINE "".* duadd --------------""" END ELSE "LINE_BEFORE .ZFIRST = '.du add" FLOW"'" "F 1 last '.du del ' " If rc = 0 then "LINE_AFTER .ZCSR = "".du del" FLOW"""" ELSE "LINE_AFTER .ZLAST = "".du del" FLOW"""" /* huh? "F 1 last '.du del $FLOW.'" */ "loc .ZLAST" "up 15" END "(DSNX) = DATASET" EXIT 1 END /*** ADDED D.MCR 1987/03/06 TO ACCOMODATE OUTPUT LIST AS INPUT */ "SEEK FIRST 1 '.' " If rc = 0 then SIGNAL NORML01 wanted = 0 "SEEK FIRST 1 p'DSMDOT459I=WORDS=NOT=FOUND$'" If rc = 0 then wanted = 1 "SEEK FIRST 1 p'=DSMDOT459I=WORDS=NOT=FOUND$'" If rc = 0 then wanted = 1 "SEEK FIRST 1 p'==DSMDOT459I=WORDS=NOT=FOUND$'" If rc = 0 then wanted = 1 If wanted = 0 then SIGNAL NORML01 /* modified 1991/04/22 to combine words not found lines*/ /* (error message never continues beyond two lines) */ "X ALL" "F ALL 1 X P'=DSMDOT459I=WORDS=NOT=FOUND$=' " "X ALL 61 ' ' " "F ALL 1 NX P'=DSMDOT459I=WORDS=NOT=FOUND$=' " "(,VAR024) = FIND_COUNTS" Do ii=1 to var024 "(line1) = line .zcsr" "(line1NO) = linenum .zcsr" line2no = line1no + 1 "(line2) = line" line2no line = strip('.du add '||substr(line1,30,32)||substr(line2,2)) "line" line1no "= (line)" "del" line2no "F next 1 NX P'=DSMDOT459I=WORDS=NOT=FOUND$=' " END "C ALL 1 P'=DSMDOT459I=WORDS=NOT=FOUND$=' '.du add ' " "C ALL 1 p'dsmdot459i=words=not=found$=' '.du add '" "x all" "f all 2 ""DSMMOM395I '""" /*'match single quote*/ "f '.du add ' 1 all" "c all 1 nx p'=DSMMOM395I ' '.DSMMOM395I '" "(change7,change8) = change_counts" "(line) = line .zcsr" parse var line line ' LINE ' "seek 1 """line""" all" "(seek7,seek8) = seek_counts" "f 1 '.*' all" if seek7 = change7 then Do "x all 1 '.dsmmom395i '" "del x all" "LABEL .zfirst = .DUADF 0" "LINE_AFTER .ZL = dataline "".* .DUADX""" "LABEL .ZLAST = .DUADX 0" signal norml01 end "del x all" "x all '.du add ' 1" "LABEL .ZCSR = .DUADF 0" "LINE_AFTER .ZL = dataline "".* .DUADX""" "LABEL .ZLAST = .DUADX 0" "x .duadx .duadx all" "LINE_AFTER 0 = NOTELINE "" ===> duadd """ "LINE_AFTER 0 = NOTELINE ", """ ===> c all p'.' ' ' << check changes""" "LINE_AFTER 0 = NOTELINE", """ ===>