/* REXX MATCHMBR compare two datasets to detrmine which member do not exist on the other. Written by Frank Clarke, Oldsmar FL, 951214 Modification History yymmdd xxx ..... .... */ address TSO /* REXXSKEL ver.951211 */ arg parms "((" opts /* */ /* */ signal on syntax /* */ signal on novalue /* */ /* */ call TOOLKIT_INIT /* conventional start-up -*/ if tv ^= '' then rc = trace(tv) /* */ info = parms /* to enable parsing */ call A_INIT /* -*/ call DUMP_QUEUE /* -*/ exit /* */ /* ----------------------------------------------------------------- */ A_INIT: /*@ */ if branch then call BRANCH address TSO parse var parms mstrdsn subdsn . /* */ "NEWSTACK" "MEMBERS" mstrdsn "((STACK LINE" /* */ pull mstrlist /* */ "DELSTACK" "NEWSTACK" "MEMBERS" subdsn "((STACK LINE" /* */ pull sublist /* */ "DELSTACK" do ii = Words(sublist) to 1 by -1 mbr = Word(sublist,ii) /* */ mp = Wordpos(mbr,mstrlist) if mp > 0 then do /* */ sublist = Delword(sublist,ii,1) mstrlist = Delword(mstrlist,mp,1) end /* */ end /* ii */ "CLEAR" /* */ if mstrlist ^= "" then do /* */ say Words(mstrlist) "members of" mstrdsn "not matched:" say mstrlist /* */ end /* */ if sublist ^= "" then do /* */ say Words(sublist) "members of" subdsn "not matched:" say sublist /* */ end /* */ return /*@ A_INIT */ /* */ /* ----------------------------------------------------------------- */ HELP: /*@ */ say "HELP for" exec_name "not available" /* .*/ exit /*@ HELP .*/ address TSO;"CLEAR" /* */ if helpmsg ^= '' then do ; say helpmsg; say ''; end /* /* you may use the following template as a guide for entering HELP text */ ........ ......... ... Syntax: ........ ......... ... ........... ... say " " pull "CLEAR" say " Debugging tools provided include:" say " " say " MONITOR: displays key information throughout processing." say " Displays most paragraph names upon entry." say " " say " USEHLQ: causes dataset prefix to be altered as " say " specified." say " " say " NOUPDT: by-pass all update logic." say " " say " BRANCH: show all paragraph entries." say " " say " TRACE tv: will use value following TRACE to place" say " the execution in REXX TRACE Mode." say " " say " " say " " say " Debugging tools can be accessed in the following manner:" say " " say " TSO" exec_name" parameters (( debug-options" say " " say " For example:" say " " say " TSO" exec_name " (( MONITOR TRACE ?R" say " " */ exit /*@ HELP */ /* */ /* ----------------------------------------------------------------- */ BRANCH: Procedure expose, /*@ */ sigl exec_name /* */ arg brparm . /* */ /* */ $a#y = sigl /* where was I called from ? */ do $b#x = $a#y to 1 by -1 /* inch backward to label */ if Right(Word(Sourceline($b#x),1),1) = ":" then do parse value sourceline($b#x) with $l#n ":" . /* Paragraph */ leave ; end /* name */ end /* $b#x */ /* */ select /* */ when brparm = "NAME" then return($l#n) /* Return full name */ when brparm = "ID" then do /* Return prefix */ parse var $l#n $l#n "_" . /* get the prefix */ return($l#n) /* */ end /* brparm = "ID" */ otherwise /* */ say left($l#n,45) exec_name "Time:" time("L") end /* select */ /* */ return /*@ BRANCH */ /* */ /* -----------------------------------------------------------------.*/ DUMP_QUEUE: /*@ Take whatever is in stack */ /* and write to the screen */ if branch then call BRANCH /* */ /* */ do queued();pull line;say line;end /* */ /* */ return /*@ DUMP_QUEUE */ /* */ /* ----------------------------------------------------------------- */ KEYWD: Procedure expose info /*@ hide all vars, except info*/ arg kw /* */ if Wordpos(kw,info) = 0 then, /* not found */ return '' /* send back a null */ parse var info . (kw) kw_val . /* isolate kw_val */ if kw_val <> '' then /* not empty */ info = Delword(info,Wordpos(kw,info),2) /* remove both */ return kw_val /*@ KEYWD */ /* */ /* ----------------------------------------------------------------- */ NOVALUE: /*@ */ say exec_name "raised NOVALUE at line" sigl say " " /* */ say "The referenced variable is" condition("D") say " " /* */ zsigl = sigl /* */ signal SHOW_SOURCE /*@ NOVALUE */ /* */ /* ----------------------------------------------------------------- */ SHOW_SOURCE: /*@ */ if sourceline() ^= "0" then /* */ say sourceline(zsigl) /* */ rc = trace("?R") /* */ nop /* */ exit /*@ SHOW_SOURCE */ /* */ /* ----------------------------------------------------------------- */ SS: Procedure /*@ Show Source */ arg ssparms ; parse var ssparms ssbeg ssend . if ssend = "" then ssend = 10 /* */ if ^datatype(ssbeg,"W") | ^datatype(ssend,"W") then return address tso "CLEAR" /* */ ssend = ssbeg + ssend /* */ do ssii = ssbeg to ssend ; say sourceline(ssii) ; end address ISPEXEC "CONTROL DISPLAY REFRESH" return(0) /*@ SS */ /* */ /* ----------------------------------------------------------------- */ SWITCH: Procedure expose info /*@ */ arg kw /* */ sw_val = Wordpos(kw,info) > 0 /* exists = 1; not found = 0 */ if sw_val then /* exists */ info = Delword(info,Wordpos(kw,info),1) /* remove it */ return sw_val /*@ SWITCH */ /* */ /* ----------------------------------------------------------------- */ SYNTAX: /*@ */ errormsg = "REXX error" rc "in line" sigl":" errortext(rc) say errormsg /* */ zsigl = sigl /* */ signal SHOW_SOURCE /*@ SYNTAX */ /* .*/ /* ----------------------------------------------------------------- */ TOOLKIT_INIT: /*@ */ address TSO /* */ info = Strip(opts,"T",")") /* clip trailing paren */ /* */ push "" /* initializing value */ pull tv helpmsg /* set empty */ /* */ parse source sys_id how_invokt exec_name DD_nm DS_nm as_invokt cmd_env addr_spc usr_tokn if Word(parms,1) = '?' then call HELP /* I won't be back */ /* */ tv = KEYWD("TRACE") /* */ trapout = SWITCH("TRAPOUT") /* */ /* */ if trapout then do /* */ "TRAPOUT" exec_name parms "(( TRACE R" info exit /* */ end /* trapout */ /* */ branch = SWITCH("BRANCH") ; if branch then call BRANCH /* */ monitor = SWITCH("MONITOR") /* */ noupdt = SWITCH("NOUPDT") /* */ /* */ rc = outtrap("CVTINFO","1") /* */ "CVTINFO" /* */ rc = outtrap("OFF") /* */ /* */ parse var cvtinfo1 'NJENODE=' node ./* */ /* */ hlq = KEYWD("USEHLQ") /* */ hlq. = "TTGTCBS" /* */ hlq.FTW = "TTGYCBS" /* */ hlq = word(hlq hlq.node ,1) /* default to "production" */ /* */ sw. = 0 /* */ sw.nested = sysvar("SYSNEST") = "YES" sw.batch = sysvar("SYSENV") = "BACK" sw.inispf = sysvar("SYSISPF") = "ACTIVE" /* */ zerrhm = "ISR00000" /* */ zerrsm = "Error-Press PF1" /* */ zerralrm = "YES" /* */ /* */ return /*@ TOOLKIT_INIT */