./ * UPDT0001 Handle doubled/escaped bars, ends, and escapes better ./ I 00560000 $ 563000 3000 01/05/95 15:11:14 /* 12/16/94 - by: Doug Dean; aka : */ UPDT0001 00563000 /* Handle doubled/escaped bars, ends, and escapes better */ UPDT0001 00566000 ./ R 00720000 $ 724990 4990 01/05/95 15:11:14 pipe.pipedemo.version = '3.1.2' 00720000 ./ I 04490000 $ 4495000 5000 01/05/95 15:11:14 /* Ignore doubled or escaped 'end' chars. */ UPDT0001 04495000 ./ D 04520000 04600000 01/05/95 15:11:14 ./ R 04630000 04800000 $ 4635990 5990 01/05/95 15:11:14 UPDT0001 04635990 scanstart = 1 UPDT0001 04641980 segstart = 1 UPDT0001 04647970 segment.pipenum.0 = 0 UPDT0001 04653960 scancopy = pipe.pipenum || pipe.endchar.pipenum UPDT0001 04659950 if pipe.endchar.pipenum = '' then UPDT0001 04665940 endpos = length(scancopy) + 1 UPDT0001 04671930 else UPDT0001 04677920 endpos = pos(pipe.endchar.pipenum,scancopy) UPDT0001 04683910 UPDT0001 04689900 do while endpos < length(scancopy) UPDT0001 04695890 scanstart = endpos + 1 UPDT0001 04701880 if substr(' 'scancopy,endpos,2) /== eec then UPDT0001 04707870 if substr(scancopy,endpos,2) /== dec then do UPDT0001 04713860 segment.pipenum.0 = segment.pipenum.0 + 1 UPDT0001 04719850 n = segment.pipenum.0 UPDT0001 04725840 segment.pipenum.n, UPDT0001 04731830 = substr(pipe.pipenum,segstart,endpos - segstart) UPDT0001 04737820 segstart = scanstart UPDT0001 04743810 end UPDT0001 04749800 else scanstart = scanstart + 1 UPDT0001 04755790 endpos = pos(pipe.endchar.pipenum,scancopy,scanstart) UPDT0001 04761780 end UPDT0001 04767770 segment.pipenum.0 = segment.pipenum.0 + 1 UPDT0001 04773760 n = segment.pipenum.0 UPDT0001 04779750 segment.pipenum.n, UPDT0001 04785740 = substr(pipe.pipenum,segstart,endpos - segstart) UPDT0001 04791730 ./ D 04910000 04990000 01/05/95 15:11:14 ./ I 05020000 $ 5020300 300 01/05/95 15:11:14 UPDT0001 05020300 /*--------------------------------------------------------------*/ UPDT0001 05020600 /* Locate all 'true' (non-doubled or escaped) stage separators. */ UPDT0001 05020900 /* build a SPECS stage consisting of "m.n 1 WRITE" for each */ UPDT0001 05021200 /* stage where m is the beginning of the stage and n is the */ UPDT0001 05021500 /* length of the stage. Omit 'WRITE' from the spec of the last */ UPDT0001 05021800 /* stage. This SPECS will be used in the pipeline following */ UPDT0001 05022100 /* to split the pipeline into stages. */ UPDT0001 05022400 /*--------------------------------------------------------------*/ UPDT0001 05022700 UPDT0001 05023000 scanstart = 1 UPDT0001 05023300 stgstart = 1 UPDT0001 05023600 barspecs = '' UPDT0001 05023900 scancopy = segment.pipenum.i || pipe.sep.pipenum UPDT0001 05024200 barpos = pos(pipe.sep.pipenum,scancopy) UPDT0001 05024500 UPDT0001 05024800 do while barpos < length(scancopy) UPDT0001 05025100 scanstart = barpos + 1 UPDT0001 05025400 if substr(' 'scancopy,barpos,2) /== ebar then UPDT0001 05025700 if substr(scancopy,barpos,2) /== dbar then do UPDT0001 05026000 barspecs, UPDT0001 05026300 = barspecs stgstart'.'barpos - stgstart '1 WRITE' UPDT0001 05026600 stgstart = scanstart UPDT0001 05026900 end UPDT0001 05027200 else UPDT0001 05027500 scanstart = scanstart + 1 UPDT0001 05027800 barpos = pos(pipe.sep.pipenum,scancopy,scanstart) UPDT0001 05028100 end UPDT0001 05028400 barspecs = barspecs stgstart'.'barpos - stgstart '1' UPDT0001 05028700 UPDT0001 05029000 ./ R 05040000 05150000 $ 5049990 9990 01/05/95 15:11:14 'var segment.pipenum.'i, UPDT0001 05049990 '|' 'specs' barspecs , /* Split into stages. */ UPDT0001 05059980 '|' 'a: rexx ('IAm') STRIPLAB' , /* Send labels to 2nd strm */ UPDT0001 05069970 '|' 'c: fanout' , /* Make a duplicate. */ UPDT0001 05079960 '|' 'b: chop after anyof / /' , /* Send args to 2nd strm */ UPDT0001 05089950 '|' 'strip' , /* Remove blanks from stg */ UPDT0001 05099940 '|' 'stem stage.'p'.'i'.' , /* Put unchanged in array. */ UPDT0001 05109930 '|' 'xlate lower' , /* Change to lower case. */ UPDT0001 05119920 '|' 'stem stagel.'p'.'i'.' /* Put in array. */ UPDT0001 05129910 ./ R 05180000 05250000 $ 5187990 7990 01/05/95 15:11:14 '|' 'stem label.'p'.'i'.' , /* Put labels in array. */ UPDT0001 05187990 '|' 'x: nfind *' || , /* Separate connectors. */ UPDT0001 05195980 '|' 'z: faninany' , /* Put back together. */ UPDT0001 05203970 '|' 'rexx ('Iam') MAXLEN' , /* Determine Max length. */ UPDT0001 05211960 '|' 'var maxlabel' , /* Put length in variable. */ UPDT0001 05219950 '?' 'x:' , /* Take connectors and */ UPDT0001 05227940 '|' 'chop 2' , /* only count 2 chars. */ UPDT0001 05235930 '|' 'z:' UPDT0001 05243920 ./ R 05280000 05290000 $ 5285990 5990 01/05/95 15:11:14 '|' 'stem args.'p'.'i'.' , /* Put args in array. */ UPDT0001 05285990 '|' 'stem targs.'p'.'i'.' /* And make a copy. */ UPDT0001 05291980 ./ R 05320000 05330000 $ 5325990 5990 01/05/95 15:11:14 '|' 'rexx ('Iam') MAXLEN' , /* Determine Max length. */ UPDT0001 05325990 '|' 'var maxstage' /* Put length in variable. */ UPDT0001 05331980 ./ R 05380000 05390000 $ 5385990 5990 01/05/95 15:11:14 'PIPE (End ?' n 'name STGSPLIT)' , UPDT0001 05385990 seg1 '?' seg2 '?' seg3 '?' seg4 UPDT0001 05391980 ./ R 06820000 $ 6824990 4990 01/05/95 15:11:14 'PIPE (end ? name MAKESEG)' , UPDT0001 06824990 ./ R 06840000 $ 6844990 4990 01/05/95 15:11:14 '| a: spec 1-* 1' , UPDT0001 06844990 ./ R 06890000 06940000 $ 6897990 7990 01/05/95 15:11:14 '|' 'join * x'c2x(pipe.sep.p), UPDT0001 06897990 '|' 'var seg.'i , UPDT0001 06905980 '?' 'stem stagel.'p'.'i'.' , UPDT0001 06913970 '|' 'a:' , UPDT0001 06921960 '?' 'stem targs'.p'.'i'.' , UPDT0001 06929950 '|' 'a:' UPDT0001 06937940 ./ R 07030000 07090000 $ 7034990 4990 01/05/95 15:11:14 if pipe.endchar.pipenum = '' then UPDT0001 07034990 xec = '' UPDT0001 07039980 else UPDT0001 07044970 xec = 'x'c2x(pipe.endchar.pipenum) UPDT0001 07049960 UPDT0001 07054950 'PIPE (name MAKEPIPE)' , UPDT0001 07059940 'stem seg.' , UPDT0001 07064930 '| join *' xec , UPDT0001 07069920 '| spec x'c2x('('pipe.options.pipenum , UPDT0001 07074910 'TRACE NAME <'pipenum'>)') '1', UPDT0001 07079900 '1-* nextword' , UPDT0001 07084890 '| var pipecmd' UPDT0001 07089880