You can subscribe to this list here.
2019 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(4) |
Nov
(1) |
Dec
(2) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2020 |
Jan
|
Feb
|
Mar
(4) |
Apr
(3) |
May
(6) |
Jun
(7) |
Jul
(10) |
Aug
(9) |
Sep
(9) |
Oct
(1) |
Nov
(3) |
Dec
(5) |
2021 |
Jan
|
Feb
(1) |
Mar
(5) |
Apr
(1) |
May
|
Jun
|
Jul
|
Aug
(4) |
Sep
(3) |
Oct
(9) |
Nov
(1) |
Dec
(14) |
2022 |
Jan
(8) |
Feb
|
Mar
|
Apr
|
May
(1) |
Jun
(165) |
Jul
(8) |
Aug
|
Sep
|
Oct
(2) |
Nov
|
Dec
(5) |
2023 |
Jan
(19) |
Feb
(14) |
Mar
(2) |
Apr
(3) |
May
|
Jun
(2) |
Jul
(10) |
Aug
(6) |
Sep
|
Oct
|
Nov
|
Dec
|
2025 |
Jan
|
Feb
(10) |
Mar
(2) |
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: Jeff H. <Je...@Je...> - 2020-07-10 14:14:13
|
<html> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> </head> <body> <p>When I introduced the <b>regex</b> stage, Colin asked about a regex based change stage.</p> <p>I have now added a new stage: <b>changeregex</b> and its aliases down to <b>changer</b>. <br> </p> <p> <blockquote type="cite"><tt>/** changeregex</tt><tt><br> </tt><tt> +-ONE-+</tt><tt><br> </tt><tt> >>--CHANGERegex---delimitedString--delimitedString--+-----+----><</tt><tt><br> </tt><tt> +-ALL-+</tt><tt><br> </tt><tt><br> </tt><tt>*/</tt><br> </blockquote> This does use the Java regex class, so therefore the Java dialect of regex.</p> <p>Jeff<br> </p> </body> </html> |
From: Jeff H. <Je...@Je...> - 2020-07-08 21:20:41
|
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> </head> <body> <p>The HTML listing of stages has had some major reformatting of the diagrams to fit the page for printing.</p> <p>It has also had colors added -- mostly to identify CMS and NetRexx differences, with controls to turn them off for viewing or printing.</p> <p>The major "symbols," delimitedString, inputRange, xorc, and regex are now explained. In print, they precede the stages. On line, in each stage, they are clickable and a floating window is displayed with the definition, examples, etc. <br> </p> <p>Your input, comments, corrections, complaints, compliments, criticisms, etc. are all welcomed. Thank you!<br> </p> <p>----------</p> <p>In detailed reading of the IBM stuff for the above, down in one of their "examples," it shows the optional leading <b>STRING</b> before a DString can be abbreviated to <b>STR</b> (and maybe shorter???). I have altered our DSTRING class to accommodate this. Also the above documentation.</p> <p>----------</p> <p>I have also added a new file to the documentation directory: <b>methods.html</b>. This has the info for stage authors on the available methods. This is a first cut. I'm sure some of them will be taken out as not useful in writing stages; I may have missed some. Again any ideas are requested. Thanks.</p> <p>Jeff<br> </p> </body> </html> |
From: René J. <rvj...@xs...> - 2020-07-05 19:42:59
|
Not unless we change all occurrences of "say ‘Error - xxx” … return 16 to an Exception type that is caught. René. > On 4 Jul 2020, at 03:34, Jeff Hennick <Je...@Je...> wrote: > > Is there any mechanism to be able to "catch" an error thrown by a pipe? > > What I would like to do is "automate" testing of pipe stages with errors in their arguments. I have lots of Emsg(11, 'Bad argument.")-type things I would like to test in a way that goes on to do the next test. Right now, it stops the whole thing. > > Thanks for any help or pointers you can give. > > Jeff > > _______________________________________________ > netrexx-pipelines mailing list > net...@li... > https://lists.sourceforge.net/lists/listinfo/netrexx-pipelines |
From: Jeff H. <Je...@Je...> - 2020-07-05 15:58:33
|
<html> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> </head> <body> <p>I have added color highlighting for NetRexx Only and CMS Only stages and options to the Stages.HTML for 3.09. There is an added switch at the top to control whether it is on or off. (For printing, you may want it off.)</p> <p>I have used a very light green and red for this. Some thought should go into an alternative for colorblind individuals.</p> <p>Your thoughts and ideas are most welcome, on the concept, execution, choice of colors, etc. Thank you.<br> </p> </body> </html> |
From: Jeff H. <Je...@Je...> - 2020-07-04 01:51:26
|
<html> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> </head> <body> <p>I have added to the CMS version of VERIFY. They have a DString to specify the characters to verify against. I think that often what the user would want is a range of characters, e.g., "0-9".</p> <p>I have added these ranges as allowable arguments. In fact, there now can be any positive number of DStrings and char-ranges specified.</p> <p> <blockquote type="cite"><tt>/** verify</tt><tt><br> </tt><tt> v-------------------------+ (1)</tt><tt><br> </tt><tt>>>--VERIFY--+------------+-+------------+--+--+--delimitedString--+--+--><</tt><tt><br> </tt><tt> +-ANYCASE----+ +-inputRange-+ +--character-range--+ (1)</tt><tt><br> </tt><tt> +-CASEANY----+</tt><tt><br> </tt><tt> +-CASEIGNORE-+</tt><tt><br> </tt><tt> +-IGNORECASE-+</tt><tt><br> </tt><tt> +-CASELESS---+</tt><tt><br> </tt><tt><br> </tt><tt> (1) NetRexx Pipelines only</tt><tt><br> </tt><tt> (1) Examples: A-Z 0-9 c-g a4-ba; 16-bit Unicode characters</tt><tt> or hex numbers<br> </tt><tt> (1) Any number greater than zero, any order, of delimitdStrings and character-ranges are allowed.</tt><tt><br> </tt><tt><br> </tt><tt>*/</tt><br> </blockquote> <br> </p> </body> </html> |
From: Jeff H. <Je...@Je...> - 2020-07-04 01:34:33
|
<html> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> </head> <body> <p>Is there any mechanism to be able to "catch" an error thrown by a pipe?</p> <p>What I would like to do is "automate" testing of pipe stages with errors in their arguments. I have lots of <tt>Emsg(11, 'Bad argument.")</tt>-type things I would like to test in a way that goes on to do the next test. Right now, it stops the whole thing.</p> <p>Thanks for any help or pointers you can give.</p> <p>Jeff<br> </p> </body> </html> |
From: Jeff H. <Je...@Je...> - 2020-07-01 03:19:29
|
<html> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> </head> <body> <p>I have added the CONTEXT <i>number</i> option. This reports not only the matching record, but some before and after it also. Also added are BEFORE and AFTER to get contextual records in one direction. There is an optional SEPARATOR to set off the groups of records. It defaults to "--".</p> <p> <blockquote type="cite"><tt>/** regex<br> <br> >>--<b>REGEX</b>--+--------------------------+--<i>regex_string</i>-(1)---><<br> +-(--| <i>options_string</i> |--)-+<br> <br> <b>options_string</b>:<br> +----------------------------+<br> |--v-+------------------------+-+--|<br> +-NUMBERS----------------+ (2)<br> +-BEFORE-+-<i>0</i>------+------+ (3)<br> | +-<i>number</i>-+ |<br> +-AFTER-+-<i>0</i>------+-------+ (3)<br> | +-<i>number</i>-+ |<br> +-CONTEXT-+-<i>0</i>------+-----+ (4)<br> | +-<i>number</i>-+ |<br> +-NOSEPARATOR------------+<br> +-SEPARATOR-+- -- ----+--+<br> | +-<i>DString</i>-+ |<br> <br> Records matching the RegEx are put out on primary output<br> Records not matching are put out on secondary, if connected, or discarded.<br> <br> (1) string is a Java RegEx expresion. null string passes all records.<br> (2) lines are prefaced with line number, 10 characters, right justified<br> (3) number of records put out after a matching record<br> (4) number of records put out before and after a matching record<br> <br> */<br> </tt></blockquote> <br> This brings it up, functionally, almost to GNU GREP 3.4 (minus all of its file input options).</p> <p>A few things for discussion:</p> <ul> <li>Would it ever help to put matched records out on the tertiary stream without the context records? Unmatched ones are already on the secondary.</li> <li>GREP has an option to just put out the COUNT of matched records. Do we have any use for this? ( REGEX string | COUNT LINES does the same.)<br> </li> <li>Possibly the regex_string should be a delimited string. This because a potential REGEX_CHANGE stage would have two delimited strings.</li> <li>Should this be named GREP? Which term would be more or less familiar to our users? Both? with one an alias of the other?</li> </ul> (Oops, just spotted a bug: BEFORE, etc, without a number works if it is the last option, but not otherwise. Something for the morning fix.)<br> <p>Jeff<br> </p> </body> </html> |
From: Jeff H. <Je...@Je...> - 2020-06-29 17:50:51
|
<html> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> </head> <body> <p>I have an (almost) completed PARSE stage proposal to be used as a "light weight SPEC"-type stage. It uses the stageExit method to generate a quick running "inner" stage. <br> </p> <p><tt>/** parse<br> <br> >>--PARSE--parse_template_Dstring---output_template_Dstring--><<br> <br> Records are parsed via the parse_template_delimited_string.<br> Variables are named $n, where n is 1 to 9<br> The values of the variables are put into the output_template_delimited_string<br> <br> */<br> </tt></p> <p>Test:</p> <p><tt> literal aza |<br> parse / 2 $1 +1/ /The center letter is $1./ |<br> cons ?<br> </tt></p> <p>Here is a compile and run of the test, with the generated code for the inner stage (you can see where the arguments have been put into the parse and output lines):</p> <div style="display:inline-block;white-space:pre;background-color:#012456;font-family:'Consolas',monospace;font-size:10pt;padding:4px;"><span style="color:#CCCCCC;background-color:#012456;">************************************************************* 1 class ct_parse_7 extends stage private 2 --trace results 3 4 method run() 5 loop forever 6 line = peekto() 7 parse line 2 $1 +1 8 output('The center letter is '$1'.') 9 readto() 10 catch StageError 11 rc = rc() 12 end 13 exit(rc*(rc<>12)) ************************************************************* PS C:\Users\Jeff\documents\pipe tests> </span><span style="color:#F9F1A5;background-color:#012456;">java</span><span style="color:#CCCCCC;background-color:#012456;"> ct The center letter is z. PS C:\Users\Jeff\documents\pipe tests></span></div> <p>Your comments, ideas, suggestions, and all are solicited and welcomed. One question I have is the name. Should it be something like SPECPARSE to show its relationship? I can think of at least one other new stage that might use parse, that is in a locate-like stage with parse used instead of range.</p> <p>Jeff<br> </p> <p><br> </p> </body> </html> |
From: Jeff H. <Je...@Je...> - 2020-06-28 21:58:20
|
<html> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> </head> <body> <p>Another idea I have just had and am looking into, is a PARSE stage -- let's use the power of Rexx! A couple of ideas. Very early thinking right now.<br> </p> <ul> <li>Its string argument would be a parse template with variables named $1 up to $9, with each of these put out on a separate output stream.</li> <li>Or if there is a second string, it would be just the primary output. The second string that would be the output template, with $variables. This stage would be a "SPEC substitute"-type stage. I think this would be a cleaner, more Rexxian, interface than SPEC has.</li> </ul> <p>It might look like</p> <p><tt>parse /. $1 . =45 $2 +7/ /'The second word is' $1 'and the value is' $2'.'/</tt></p> <p>Maybe the quote marks will prove to not be necessary.</p> <p>Comments, ideas, criticisms, are all requested.</p> <p>Jeff<br> </p> </body> </html> |
From: Jeff H. <Je...@Je...> - 2020-06-28 21:54:34
|
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> </head> <body> <p>This is purely match/select. I had not thought of a change, but it could be done, like CHANGE stage. On first thought, I think it would be good to have it a separate stage, there is a need for each.</p> <p>Here is the test file demonstrating it:</p> <p> <blockquote type="cite"><tt>/** regex<br> <br> >>--REGEX--+--------------------------+--regex_string-(1)---><<br> +-(--| options_string |--)-+<br> <br> options_string:<br> |--+---------+--|<br> +-NUMBERS-+ (2)<br> <br> <br> Records matching the RegEx are put out on primary output<br> Records not matching are put out on secondary, if connected, or discarded.<br> <br> (1) string is a Java RegEx expresion. null string passes all records.<br> (2) lines are prefaced with line number, 10 characters, right justified<br> <br> [Possible future options: BEFORE and AFTER, etc., to give context, ala GREP.]<br> <br> */<br> <br> /*<br> 20/ 6/28 Jeff Hennick<br> */<br> <br> pipe (regex_tests01)<br> <br> o: faninany |<br> sort singleok |<br> specs 2-* 1 |<br> cons ?<br> <br> -- regex ?<br> literal a1a a2b a3c d4d e5e f6f g7g|<br> split |<br> regex c$ |<br> c1: compare any ~2# 1 regex ~ equal ~*OK*~ notequal ~**FAIL** at rec \\c col \\b.~ less /Less:\nActual:\n\\p\nExpected:\n\\s\n/ more /More:\nActual:\n\\p\nExpected:\n\\s\n/ |<br> o: ?<br> literal a3c |<br> split ; |<br> c1: ?<br> <br> -- numbers regex ?<br> literal a1a a2b a3c d4d e5e f6f g7g|<br> split |<br> regex (numbers) c$ |<br> c2: compare any ~2# 2 numbers regex ~ equal ~*OK*~ notequal ~**FAIL** at rec \\c col \\b.~ less /Less:\nActual:\n\\p\nExpected:\n\\s\n/ more /More:\nActual:\n\\p\nExpected:\n\\s\n/ |<br> o: ?<br> literal 3a3c |<br> split ; |<br> c2: ?<br> <br> -- numbers (secondary) ?<br> literal a1a a2b a3c d4d e5e f6f g7g|<br> split |<br> t3: regex (numbers) c$ |<br> hole ?<br> t3: |<br> c3: compare any ~2# 3 numbers (secondary) ~ equal ~*OK*~ notequal ~**FAIL** at rec \\c col \\b.~ less /Less:\nActual:\n\\p\nExpected:\n\\s\n/ more /More:\nActual:\n\\p\nExpected:\n\\s\n/ |<br> o: ?<br> literal 1a1a; 2a2b; 4d4d; 5e5e; 6f6f; 7g7g |<br> split ; |<br> c3: ?<br> </tt></blockquote> Jeff<br> </p> <div class="moz-cite-prefix">On 6/28/2020 4:35 PM, Colin wrote:<br> </div> <blockquote type="cite" cite="mid:00a...@im..."> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <font face="Century Gothic">I like the idea! <br> <br> So initially it looks like this is purely for pattern matching. Will a future enhancement allow modifying via a regex as well?<br> <br> Cheers<br> Colin K</font> </blockquote> </body> </html> |
From: Colin <net...@im...> - 2020-06-28 20:49:27
|
I like the idea! So initially it looks like this is purely for pattern matching. Will a future enhancement allow modifying via a regex as well? Cheers Colin K On 2020-06-28 12:02, Jeff Hennick wrote: > > I am proposing a new stage that draws on NetRexx's Java heritage: > REGEX (alternative name: GREP). It is a simple filter stage like > LOCATE, but uses regular expressions. This gives it a much richer (as > well as less comprehensible) set of selectors. > > I have submitted it to origin master for 3.09, but, René, if you > object to mixing in regular expressions, I'd withdraw it. > > All, comments and suggestions are very much welcomed. > > /** regex > > >>--REGEX--+--------------------------+--regex_string-(1)--->< > +-(--| options_string |--)-+ > > options_string: > |--+---------+--| > +-NUMBERS-+ (2) > > > Records matching the RegEx are put out on primary output > Records not matching are put out on secondary, if connected, or > discarded. > > (1) string is a Java RegEx expresion. null string passes all records. > (2) lines are prefaced with line number, 10 characters, right justified > > [Possible future options: BEFORE and AFTER, etc., to give context, ala > GREP.] > > */ > > /* > 20/ 6/28 Jeff Hennick > */ > > Jeff > > > > _______________________________________________ > netrexx-pipelines mailing list > net...@li... > https://lists.sourceforge.net/lists/listinfo/netrexx-pipelines |
From: René J. <rvj...@xs...> - 2020-06-28 20:26:06
|
Hi Jeff, I think that is very interesting and very befitting to the platform. I’ll give it a spin as soon as I can. best regards, René. > On 28 Jun 2020, at 21:02, Jeff Hennick <Je...@Je...> wrote: > > I am proposing a new stage that draws on NetRexx's Java heritage: REGEX (alternative name: GREP). It is a simple filter stage like LOCATE, but uses regular expressions. This gives it a much richer (as well as less comprehensible) set of selectors. > > I have submitted it to origin master for 3.09, but, René, if you object to mixing in regular expressions, I'd withdraw it. > > All, comments and suggestions are very much welcomed. > > /** regex > > >>--REGEX--+--------------------------+--regex_string-(1)--->< > +-(--| options_string |--)-+ > > options_string: > |--+---------+--| > +-NUMBERS-+ (2) > > > Records matching the RegEx are put out on primary output > Records not matching are put out on secondary, if connected, or discarded. > > (1) string is a Java RegEx expresion. null string passes all records. > (2) lines are prefaced with line number, 10 characters, right justified > > [Possible future options: BEFORE and AFTER, etc., to give context, ala GREP.] > > */ > > /* > 20/ 6/28 Jeff Hennick > */ > > Jeff > > _______________________________________________ > netrexx-pipelines mailing list > net...@li... > https://lists.sourceforge.net/lists/listinfo/netrexx-pipelines |
From: Jeff H. <Je...@Je...> - 2020-06-28 20:22:26
|
<html> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> </head> <body> <p>I am proposing a new stage that draws on NetRexx's Java heritage: REGEX (alternative name: GREP). It is a simple filter stage like LOCATE, but uses regular expressions. This gives it a much richer (as well as less comprehensible) set of selectors.</p> <p>I have submitted it to origin master for 3.09, but, René, if you object to mixing in regular expressions, I'd withdraw it.</p> <p>All, comments and suggestions are very much welcomed.<br> </p> <p><tt>/** regex<br> <br> >>--REGEX--+--------------------------+--regex_string-(1)---><<br> +-(--| options_string |--)-+<br> <br> options_string:<br> |--+---------+--|<br> +-NUMBERS-+ (2)<br> <br> <br> Records matching the RegEx are put out on primary output<br> Records not matching are put out on secondary, if connected, or discarded.<br> <br> (1) string is a Java RegEx expresion. null string passes all records.<br> (2) lines are prefaced with line number, 10 characters, right justified<br> <br> [Possible future options: BEFORE and AFTER, etc., to give context, ala GREP.]<br> <br> */<br> <br> /*<br> 20/ 6/28 Jeff Hennick<br> */<br> </tt></p> <p>Jeff<br> </p> </body> </html> |
From: Jeff H. <Je...@Je...> - 2020-06-28 19:26:57
|
<html> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> </head> <body> <p>The HTML of Stages now has "id"s on each row (stage) so it can be referenced directly, and displayed at the top of the window with a URL like <b>.../stages.html#dateconvert </b> (wherever the ... , the publishing domain, is). Each of the allowed aliases are covered too, including the "character" ones like <b>>></b> and --. This may make implementing a web and/or pipe based help facility easier.<br> </p> </body> </html> |
From: Mike C. <mf...@sp...> - 2020-05-18 16:23:19
|
A couple of people have asked offline why I haven't made any comments about NetRexx pipelines; the reason is simple -- I never used pipelines on CMS .. they appeared after I moved from CMS to OS/2 as my primary operating/development system. Long time ago! Mike |
From: Jeff H. <Je...@Je...> - 2020-05-18 13:56:05
|
<html> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> </head> <body> <p>CMS uses the stage name <b>OVER </b>as a synonym for <b>OVERLAY</b>. Original, and current, njPipes has an <b>OVER </b>stage that returns the indexes of a NetRexx variable.</p> <p>Per René Jansen,<br> </p> <p><font size="+1"><b>************ NOTICE OF NON-UPWARD COMPATIBLE CHANGE in njPipes for NetRexx 3.09 *******************</b></font></p> <p>The njPipes stage previously known as <b>OVER</b> has been renamed to <b>VAROVER</b>. It continues to return indexes of a NetRexx variable. <br> </p> <p>The stage <b>OVER</b> now is the minimum abbreviation for <b>OVERLAY</b>. This is to make it align with CMS Pipelines. <b>OVERL</b> and <b>OVERLA</b> will also become available as abbreviations, per CMS.</p> <p> Any existing pipes using <b>OVER</b> will need to be changed. There will be no overlap time.</p> <p>[I apologize for the double posting. It is because of the non-compatible change.]</p> <p>Jeff Hennick<br> </p> </body> </html> |
From: Jeff H. <Je...@Je...> - 2020-05-13 20:20:05
|
<html> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> </head> <body> <p>For the next NetRexx release I have debugged and enhanced the OVERLAY stage of njPipes. (The currently published version is a non-functioning draft-in-progress from over 20 years ago.)<br> </p> <p>The enhancements are all strictly upward compatible from the CMS version.</p> <p>There is one thing that is not upward compatible. In CMS the name can be abbreviated down to OVER. Unfortunately, 20 years ago, another totally different njPipes stage was named OVER. So the minimum abbreviation here is OVERL.</p> <p>New:<br> </p> <ul> <li>The HOLD option means if a non-primary stream has fewer records than the primary, the last read record is used.</li> <li>The default NOHOLD option means if a non-primary stream has fewer records than the primary, a blank record is used. This is the CMS action.</li> <li>The keyword PAD can be used to introduce its character. It is a readability only addition with the addition of the TRANSparent option. SPACE is a synonym for the default BLANK.</li> <li>The TRANSparent and character allows a different character to be used instead of the PAD character.</li> <li>A delimited string can be used instead of a non-primary stream. It is used as the next highest unused stream. If only the primary stream is connected, this is the secondary stream and all records read on the primary are overlayed by this same string. Implies HOLD. It is a convenience / performance device saving a LITERAL and DUPLICATE.<br> </li> </ul> <p>Here are the diagrams for njPipes and CMS:</p> <p><tt>/** OVERLAY njPipes<br> <br> +-NOHOLD-(2)-+ +-PAD-(2)+ +-BLANK----+<br> >>--OVERLay-(1)-+------------+-+--------+-+----------+-+--------------------------+-+---------------+--><<br> +-HOLD-(2)---+ +-xorc-----+ +-TRANSparent-+-xorc--+-(2)+ +-dstring-(2)(3)+<br> +-SPACE-(2)+ +-BLANK-+<br> +-SPACE-+<br> <br> HOLD keeps the last record from each stream, except primary, and uses it if the stream ends.<br> TRANSPARENT means that character can be different from the PAD character.<br> If omitted, it is the same as PAD character.<br> dstream can be used instead of a non-primary stream.<br> <br> (1) OVER is only CMS, njPipes has a totally different OVER stage<br> (2) njPipes only<br> (3) same as highest (+1) stream; implies HOLD<br> <br> */<br> /** OVERLAY CMS<br> <br> +-BLANK-+<br> >>--OVERlay-(1)-+-------+----------------------------------------------><<br> +-xorc--+<br> <br> (1) OVER is only CMS, njPipes has a totally different OVER stage<br> <br> */ <br> </tt></p> <p>========================</p> <p>Note: In writing and testing this stage it has exhibited some so far unexplained instabilities. I had to introduce some unorthodox programming to tame it. I *think* it is currently stable. <br> </p> <p>Jeff<br> </p> </body> </html> |
From: René J. <rvj...@xs...> - 2020-05-02 00:33:57
|
it is commit 67c9eee that causes the problem, this is the JOIN stage. I have rolled back only join.nrx - this fixed it. We have to look what causes this to go wrong in the pipes compiler. But that will be tomorrow. René. > On 2 May 2020, at 01:46, René Jansen <rvj...@xs...> wrote: > > Hi Jeff, > > we have a reoccurrence of the error that was noticed last december - it means addtest1.njp and tcpexample don’t compile anymore. > My guess is that the pipe compiler depends on an error in a stage that you recently corrected. > > I have to look what happens. With any luck it was in the latest commit. > > René. > > > > _______________________________________________ > netrexx-pipelines mailing list > net...@li... > https://lists.sourceforge.net/lists/listinfo/netrexx-pipelines |
From: Colin K <CK-...@im...> - 2020-05-02 00:11:30
|
Just thought I would post some notes about my recent foray into trying to solve a null pointer exception problem I have with one of my hostbyname test scripts. When using the V.308 distribution on www.netrexx.org when one compiles a .nrx file note that the eyecatcher says 3.08GA with a build date of 2019-09-06 Z:\NetRexx-3.08-GA\bin>nrc hostbyname java -cp "Z:\NetRexx-3.08-GA\lib\jansi-1.18.jar;Z:\NetRexx-3.08-GA\bin;Z:\NetRexx-3.08-GA\lib\*;;;Z:\NetRexx-3.08-GA\lib\NetRexxF.jar;." -Dnrx.compiler=ecj org.netrexx.process.NetRexxC hostbyname NetRexx portable processor 3.08-*GA* build 1,582-*20190906*-1850 Copyright (c) RexxLA, 2011,2019. All rights reserved. Parts Copyright (c) IBM Corporation, 1995,2008. Program hostbyname.nrx === class hostbyname === method run signals ThreadQ overrides stage.run Compilation of 'hostbyname.nrx' successful I want to see if the recent changes to RexxIO that addressed some null pointer exceptions would resolve my issues with one of my pipe test scripts which gives a null pointer exception but works fine on its own. This fails with a null pointer exception (it should fail but not with a null pointer exception): pipe (hbntest5) literal bogus.bogus | hostbyname | console | compare: compare equal /PASS/ notequal /FAIL/ | console ? literal 93.184.216.34 | compare: Z:\NetRexx-3.08-GA\bin>java hbntest5 < Input record 1: Unable to determine IP address for bogus.bogus > FAIL java.lang.NullPointerException at hostbyname.run(hostbyname.java:104) at org.netrexx.njpipes.pipes.ThreadPool.run(ThreadPool.java:76) at java.lang.Thread.run(Unknown Source) Exiting due to uncaught Exception null This works: Z:\NetRexx-3.08-GA\bin>pipc "(hbntest5a) literal bogus.bogus | hostbyname | console" ( hbntest5a ) literal bogus.bogus | hostbyname | console Z:\NetRexx-3.08-GA\bin>java hbntest5a < Input record 1: Unable to determine IP address for bogus.bogus > Interestingly all my hbntest1-4 scripts have compare filters and they work just fine. There is something about this one that causes a problem. Now hbntest5 is the first script that generates output based on a caught UnknownHostName exception but I don’t see how that would be the problem as it appears to work just fine without the compare section. Now I am not in any way git literate. I went to sourceforge.net and did a download snapshot which appeared to work. It got the master branch as of 2020-04-30 (I forgot to note the 6 digit hex number that went along with it). I reran my tests but still had the same null pointer exception problem. I looked at the source file for RexxIO and I can see the new pipeSay methods. However, I did notice one thing – the eyecatcher on a compile shows 3.08-BETA2 with a date of 2019-09-08. Z:\NetRexx-3.08-GA\bin>nrc -version java -cp "Z:\NetRexx-3.08-GA\lib\jansi-1.18.jar;Z:\NetRexx-3.08-GA\bin;Z:\NetRexx-3.08-GA\lib\*;;;Z:\NetRexx-3.08-GA\lib\NetRexxC.jar;." -Dnrx.compiler=ecj org.netrexx.process.NetRexxC -version +++ Warning: Unknown command option '-version' ignored NetRexx portable processor 3.08-*BETA2* build 1,202-*20190808*-1303 Copyright (c) RexxLA, 2011,2019. All rights reserved. Parts Copyright (c) IBM Corporation, 1995,2008. So I figured that I had some old code and needed to recompile/rebuild the NetRexx code from this snapshot. According to the manual (section 29.2) I should make “netrexx/netrexxc/trunk” the current directory before running the compile command. The only problem is there is no such directory in my snapshot. For fun, I made my current directory the root of the NetRexx snapshot and then ran the compile command. That seemed to work fine (other than not being able to find tools.jar). Z:\NetRexx-3.08-GA>java -jar ant/ant-launcher.jar compile Unable to locate tools.jar. Expected to find it in C:\Program Files\Java\jre1.8.0_221\lib\tools.jar Buildfile: Z:\NetRexx-3.08-GA\build.xml prepare: . . .snip. . . compile: BUILD SUCCESSFUL Total time: 3 minutes 12 seconds Z:\NetRexx-3.08-GA> I ran another nrc but it shows the same BETA2 date eyecatcher. . . . . .and test script still failed. :-( Z:\NetRexx-3.08-GA\bin>pipc hbntest5 pipe (hbntest5 ) literal bogus.bogus | hostbyname | console | compare: compare equal /PASS/ notequal /FAIL/ | console ? literal 93.184.216.34 | compare: Z:\NetRexx-3.08-GA\bin>java hbntest5 < Input record 1: Unable to determine IP address for bogus.bogus > FAIL java.lang.NullPointerException at hostbyname.run(hostbyname.java:107) at org.netrexx.njpipes.pipes.ThreadPool.run(ThreadPool.java:60) at java.lang.Thread.run(Unknown Source) Exiting due to uncaught Exception null So – it looks like I need to spend some time and get some “git” skills under my belt. :-) Time to crack open a git book. A fun and interesting journey. Cheers Colin |
From: René J. <rvj...@xs...> - 2020-05-01 23:46:30
|
Hi Jeff, we have a reoccurrence of the error that was noticed last december - it means addtest1.njp and tcpexample don’t compile anymore. My guess is that the pipe compiler depends on an error in a stage that you recently corrected. I have to look what happens. With any luck it was in the latest commit. René. |
From: ColinK <ibm...@im...> - 2020-04-23 05:45:58
|
Hello While building test cases for my hostbyname filter I accidentally did a cut/paste which tried to do a pipe within a pipe. Z:\NetRexx-3.08-GA\bin>pipe 'pipe (hbntest5a) literal bogus.bogus | hostbyname | console' 'hostbyname' is not recognized as an internal or external command, operable program or batch file. <<< wait about 6 seconds. . .then >>> Z:\NetRexx-3.08-GA\bin>Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 at java.util.ArrayList.rangeCheck(Unknown Source) at java.util.ArrayList.get(Unknown Source) at org.netrexx.process.NetRexxC.clgMain(NetRexxC.java:217) at org.netrexx.njpipes.pipes.compiler.compile(compiler.java:1240) at org.netrexx.njpipes.pipes.compiler.<init>(compiler.java:1337) at org.netrexx.njpipes.pipes.runner.main(runner.java:76) It is an obvious error on my part but should this be caught by the pipe processor and flagged as an error early on? Thanks Colin |
From: Jeff H. <Je...@Je...> - 2020-04-02 12:15:01
|
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> </head> <body> <p>Can you do this and have it work?:</p> <p><font face="Century Gothic"><font face="Courier New, Courier, monospace">do </font></font><br> <font face="Century Gothic"><font face="Courier New, Courier, monospace"> loop forever</font></font><br> <font face="Century Gothic"><font face="Courier New, Courier, monospace"> . . . peekto…</font></font></p> <p><font face="Century Gothic"><font face="Courier New, Courier, monospace"> do </font></font><br> <font face="Century Gothic"><font face="Courier New, Courier, monospace"> . . . process input record . . .</font></font></p> <p><font face="Century Gothic"><font face="Courier New, Courier, monospace"> catch </font></font><font face="Century Gothic"><font face="Courier New, Courier, monospace">UnknownHostExceptiom</font></font></p> <p><font face="Century Gothic"><font face="Courier New, Courier, monospace"> </font></font><font face="Century Gothic"><font face="Courier New, Courier, monospace">handle problem</font></font></p> <p><font face="Century Gothic"><font face="Courier New, Courier, monospace"> end</font></font><br> <font face="Century Gothic"><font face="Courier New, Courier, monospace"> . . . output. . .</font></font><br> <font face="Century Gothic"><font face="Courier New, Courier, monospace"> . . . readto. . .</font></font><br> <br> <font face="Century Gothic"><font face="Courier New, Courier, monospace">-- catch UnknownHostExceptiom</font></font><br> <font face="Century Gothic"><font face="Courier New, Courier, monospace">-- do</font></font><br> <font face="Century Gothic"><font face="Courier New, Courier, monospace">-- . . . handle problem. . .</font></font><br> <font face="Century Gothic"><font face="Courier New, Courier, monospace">-- . . . output. . .</font></font><br> <font face="Century Gothic"><font face="Courier New, Courier, monospace">-- . . . readto. . .</font></font><br> <font face="Century Gothic"><font face="Courier New, Courier, monospace">-- . . . << here I want to head up to forever loop to do next record>>. .</font></font><br> <font face="Century Gothic"><font face="Courier New, Courier, monospace"> </font></font><br> <font face="Century Gothic"><font face="Courier New, Courier, monospace">-- catch StageError</font></font><br> <br> <font face="Century Gothic"><font face="Courier New, Courier, monospace">-- end /*do UnknownHostException */ </font></font><br> <br> <font face="Century Gothic"><font face="Courier New, Courier, monospace"> catch StageError</font></font><br> <br> <font face="Century Gothic"><font face="Courier New, Courier, monospace"> end /*do loop forever */</font></font></p> <div class="moz-cite-prefix">On 3/31/2020 11:35 PM, ColinK wrote:<br> </div> <blockquote type="cite" cite="mid:407...@im..."> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <font face="Century Gothic">I am working on creating the NetRexx pipeline filter that mimics the VM/CMS filter HOSTBYNAME and I have run into a problem that I am not sure how to get around (perhaps partly because I am not very Java savvy).<br> <br> When a hostname is passed to the routine that cannot be resolved an UnknownHostException is thrown. I can catch this (in fact I have to catch it since it is a checked exception) and handle it but how do I get back up into the main forever loop to process the next input record? It seems that once I am in a catch section the stage collapses. The Rexx iterate statement does not work since it is not in the first ‘instructionlist’ section. <br> <font face="Courier New, Courier, monospace"><br> </font></font> <blockquote><font face="Century Gothic"><font face="Courier New, Courier, monospace">do </font></font><br> <font face="Century Gothic"><font face="Courier New, Courier, monospace"> loop forever</font></font><br> <font face="Century Gothic"><font face="Courier New, Courier, monospace"> . . . peekto…</font></font><br> <font face="Century Gothic"><font face="Courier New, Courier, monospace"> . . . process input record . . .</font></font><br> <font face="Century Gothic"><font face="Courier New, Courier, monospace"> . . . output. . .</font></font><br> <font face="Century Gothic"><font face="Courier New, Courier, monospace"> . . . readto. . .</font></font><br> <br> <font face="Century Gothic"><font face="Courier New, Courier, monospace"> catch UnknownHostExceptiom</font></font><br> <font face="Century Gothic"><font face="Courier New, Courier, monospace"> do</font></font><br> <font face="Century Gothic"><font face="Courier New, Courier, monospace"> . . . handle problem. . .</font></font><br> <font face="Century Gothic"><font face="Courier New, Courier, monospace"> . . . output. . .</font></font><br> <font face="Century Gothic"><font face="Courier New, Courier, monospace"> . . . readto. . .</font></font><br> <font face="Century Gothic"><font face="Courier New, Courier, monospace"> . . . << here I want to head up to forever loop to do next record>>. .</font></font><br> <font face="Century Gothic"><font face="Courier New, Courier, monospace"> </font></font><br> <font face="Century Gothic"><font face="Courier New, Courier, monospace"> catch StageError</font></font><br> <br> <font face="Century Gothic"><font face="Courier New, Courier, monospace"> end /*do UnknownHostException */ </font></font><br> <br> <font face="Century Gothic"><font face="Courier New, Courier, monospace"> catch StageError</font></font><br> <br> <font face="Century Gothic"><font face="Courier New, Courier, monospace"> end /*do loop forever */</font></font><br> </blockquote> <font face="Century Gothic"> <br> It would be interesting to see how a real VM/CMS system handles the following:</font><br> <blockquote><font face="Century Gothic"><font face="Courier New, Courier, monospace"><font face="Century Gothic"><font face="Courier New, Courier, monospace"> pipe "(end ?) literal <a class="moz-txt-link-abbreviated" href="http://www.shaw.ca;dns.google;bogus.bogus;www.google.ca" moz-do-not-send="true">www.shaw.ca;dns.google;bogus.bogus;www.google.ca</a> | split string /;/ | h: hostbyname | console<br> <br> </font></font>pipe "(end ?) literal <a class="moz-txt-link-abbreviated" href="http://www.shaw.ca;dns.google;bogus.bogus;www.google.ca" moz-do-not-send="true">www.shaw.ca;dns.google;bogus.bogus;www.google.ca</a> | split string /;/ | h: hostbyname | console ? h: | insert ,Bad: , BEFORE | console"</font></font><br> </blockquote> <font face="Century Gothic"><br> Right now my grand attempt pumps out the following:<br> </font> <blockquote><font face="Century Gothic"><font face="Courier New, Courier, monospace">Z:\NetRexx-3.08-GA\bin>pipe "(end ?) literal <a class="moz-txt-link-abbreviated" href="http://www.shaw.ca;dns.google;bogus.bogus;www.google.ca" moz-do-not-send="true">www.shaw.ca;dns.google;bogus.bogus;www.google.ca</a> | split string /;/ | h: hostbyname | console</font></font><br> <font face="Century Gothic"><font face="Courier New, Courier, monospace">23.6.246.208</font></font><br> <font face="Century Gothic"><font face="Courier New, Courier, monospace">8.8.4.4 8.8.8.8</font></font><br> <font face="Century Gothic"><font face="Courier New, Courier, monospace">Input record 3: Unable to determine IP address for bogus.bogus</font></font><br> </blockquote> <blockquote><font face="Century Gothic"><font face="Courier New, Courier, monospace"><font face="Century Gothic"><font face="Courier New, Courier, monospace">Z:\NetRexx-3.08-GA\bin></font></font>pipe "(end ?) literal <a class="moz-txt-link-abbreviated" href="http://www.shaw.ca;dns.google;bogus.bogus;www.google.ca" moz-do-not-send="true">www.shaw.ca;dns.google;bogus.bogus;www.google.ca</a> | split string /;/ | h: hostbyname | console ? h: | insert ,Bad: , BEFORE | console"</font></font><br> <font face="Century Gothic"><font face="Courier New, Courier, monospace">23.6.246.208</font></font><br> <font face="Century Gothic"><font face="Courier New, Courier, monospace">8.8.4.4 8.8.8.8</font></font><br> <font face="Century Gothic"><font face="Courier New, Courier, monospace">Input record 3: Unable to determine IP address for bogus.bogus</font></font><br> </blockquote> <font face="Century Gothic">Note that the 4th hostname does not appear to be processed.<br> <br> Is there some kind of trick in handling this scenario.<br> <br> Thanks.<br> Colin<br> <br> </font> <br> <fieldset class="mimeAttachmentHeader"></fieldset> <br> <fieldset class="mimeAttachmentHeader"></fieldset> <pre class="moz-quote-pre" wrap="">_______________________________________________ netrexx-pipelines mailing list <a class="moz-txt-link-abbreviated" href="mailto:net...@li...">net...@li...</a> <a class="moz-txt-link-freetext" href="https://lists.sourceforge.net/lists/listinfo/netrexx-pipelines">https://lists.sourceforge.net/lists/listinfo/netrexx-pipelines</a> </pre> </blockquote> </body> </html> |
From: ColinK <ibm...@im...> - 2020-04-01 03:35:29
|
I am working on creating the NetRexx pipeline filter that mimics the VM/CMS filter HOSTBYNAME and I have run into a problem that I am not sure how to get around (perhaps partly because I am not very Java savvy). When a hostname is passed to the routine that cannot be resolved an UnknownHostException is thrown. I can catch this (in fact I have to catch it since it is a checked exception) and handle it but how do I get back up into the main forever loop to process the next input record? It seems that once I am in a catch section the stage collapses. The Rexx iterate statement does not work since it is not in the first ‘instructionlist’ section. do loop forever . . . peekto… . . . process input record . . . . . . output. . . . . . readto. . . catch UnknownHostExceptiom do . . . handle problem. . . . . . output. . . . . . readto. . . . . . << here I want to head up to forever loop to do next record>>. . catch StageError end /*do UnknownHostException */ catch StageError end /*do loop forever */ It would be interesting to see how a real VM/CMS system handles the following: pipe "(end ?) literal www.shaw.ca;dns.google;bogus.bogus;www.google.ca | split string /;/ | h: hostbyname | console pipe "(end ?) literal www.shaw.ca;dns.google;bogus.bogus;www.google.ca | split string /;/ | h: hostbyname | console ? h: | insert ,Bad: , BEFORE | console" Right now my grand attempt pumps out the following: Z:\NetRexx-3.08-GA\bin>pipe "(end ?) literal www.shaw.ca;dns.google;bogus.bogus;www.google.ca | split string /;/ | h: hostbyname | console 23.6.246.208 8.8.4.4 8.8.8.8 Input record 3: Unable to determine IP address for bogus.bogus Z:\NetRexx-3.08-GA\bin>pipe "(end ?) literal www.shaw.ca;dns.google;bogus.bogus;www.google.ca | split string /;/ | h: hostbyname | console ? h: | insert ,Bad: , BEFORE | console" 23.6.246.208 8.8.4.4 8.8.8.8 Input record 3: Unable to determine IP address for bogus.bogus Note that the 4th hostname does not appear to be processed. Is there some kind of trick in handling this scenario. Thanks. Colin |
From: Jeff H. <Je...@Je...> - 2020-03-28 21:04:42
|
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> </head> <body> <p>Oops! [insert nasty word here]!</p> <p>I sent in the one with my testing of NetRexx code for a conversion. (It does build, and work, with my test extension.)</p> <p>I'll get test 8, without that 84th test in it, immediately.<br> </p> <div class="moz-cite-prefix">On 3/28/2020 3:44 PM, René Jansen wrote:<br> </div> <blockquote type="cite" cite="mid:263...@xs..."> <pre class="moz-quote-pre" wrap="">HI Jeff, great work! You do know that specs_test8.njp does not build? Thank you for adding all these things to specs! René. _______________________________________________ netrexx-pipelines mailing list <a class="moz-txt-link-abbreviated" href="mailto:net...@li...">net...@li...</a> <a class="moz-txt-link-freetext" href="https://lists.sourceforge.net/lists/listinfo/netrexx-pipelines">https://lists.sourceforge.net/lists/listinfo/netrexx-pipelines</a> </pre> </blockquote> </body> </html> |
From: Jeff H. <Je...@Je...> - 2020-03-28 20:53:32
|
<html> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> </head> <body> <p>I have just submitted an updated SPECs stage and tests.</p> <p>There are 84 separate tests in 8 files. There are a couple from the IBM Pipeline book that we still fail.</p> <p>Here is the current documentation:</p> <p><tt>/** spec<br> +-STOP--ALLEOF----+ (3) v----------------------------------------+<br> >>--SPECs--+-----------------+------+--+-| Group |-------------------------+-+-----------><<br> +-STOP-+-ANYEOF-+-+ (3) +-READ------------------------------+ (5)<br> +-n------+ (3) +-READSTOP--------------------------+<br> +-WRITE-----------------------------+<br> +-SELECT-+-streamnum-+--------------+<br> | +-streamid--+ | (3)<br> | +-FIRST-----+ |<br> | +-SECOND----+ |<br> +-PAD--+-char----+------------------+<br> | +-hexchar-+ |<br> | +-BLANK---+ |<br> | +-SPACE---+ |<br> +-+-WORDSEParator---+--+--char---+--+ (3)<br> +-WS------------- + +-hexchar-+ (3)<br> +-FIELDSEparator- + +-BLANK---+ (3)<br> +-FS------------- + +-SPACE---+ (3)<br> <br> Group:<br> |--| Input |--| Conversion |--| Output |--| Alignment |--|<br> <br> Input:<br> |--+-Words-(1)-wnumberrange----------------------+-------|<br> +-Fields-(1)-fnumberrange---------------------+ (3)<br> +-cnumberrange--------------------------------+<br> +-/string/------------------------------------+<br> +-Xhexstring----------------------------------+<br> +-Hhexstring----------------------------------+<br> +-Bbinstring----------------------------------+<br> | +-FROM--1-------+ +-BY--1-----+ |<br> +-+-RECNO--+-+---------------+-+-----------+--+<br> | +-NUMBER-+ +-FROM--fromnum-+ +-BY--bynum-+ |<br> +-TODclock------------------------------------+<br> <br> Conversion:<br> |-+-------+--+--------------------+------|<br> +-STRIP-+ +-B2C----------------+<br> +-B2D----------------+ (4)<br> +-B2X----------------+ (4)<br> +-C2B----------------+<br> +-C2D----------------+<br> +-C2F----------------+ (3)<br> +-C2I----------------+ (3)<br> +-C2P-+------------+-+ (3)<br> | +-(2)(scale)-+ | (3)<br> +-C2V----------------+ (3)<br> +-C2X----------------+<br> +-D2C----------------+<br> +-D2X----------------+ (4)<br> +-F2C----------------+ (3)<br> +-I2C----------------+ (3)<br> +-P2C-+------------+-+ (3)<br> | +-(2)(scale)-+ | (3)<br> +-V2C----------------+ (3)<br> +-X2B----------------+ (4)<br> +-X2C----------------+<br> +-X2D----------------+ (4)<br> +-f2t----------------+<br> +-LOWER--------------+ (4)<br> +-UPPER--------------+ (4)<br> +-STRING-------------+ (4)<br> <br> Output:<br> |--+-Next-+-------+-------+--|<br> | +-(2).n-+ |<br> +-NEXTWord-+-+-------+-+<br> +-NWord----+ +-(2).n-+ |<br> +-collumnrange---------+<br> <br> Alignment:<br> |--+--------+--|<br> +-Left---+<br> +-Center-+<br> +-Centre-+<br> +-Right--+<br> <br> Ranges (cnumberrange, fnumberrange (3), wnumberrange):<br> |--+-snumber-+--(2)--+-------------------------+--|<br> +---*-----+ +--.-----(2)----number----+<br> +- - -+--(2)--+-snumber-+-+<br> +--;--+ +---*-----+<br> <br> Notes:<br> (1) Blanks are optional in this position.<br> (2) Blanks are not allowed here.<br> (3) CMS only. Not yet implemented in njpipes<br> (4) Njpipes only. Not yet implemented in CMS<br> (5) READ is giving the same output as READSTOP when the streams are different length.<br> [6] This senses if it is the first stage, but comment stages will fool it into not<br> producing any output.<br> <br> **/</tt></p> <p>The one bug left that I'm aware of, is if there is some data generating group, such as a delimited string, record number, or TODclock, then at the end of file, an extra output record of just that generated data is put out.<br> <tt></tt></p> <p>The only parts of the newest IBM version that I have included here are<tt> FIRST </tt>and <tt>SECOND. </tt> This newest version also includes a mini-language for doing all sorts of things in the conversion phase. This would be very difficult to include here. I suggest that instead we add a way to incorporate either a sub-pipeline (apparently difficult) or user NetRexx code (fairly easy, but potentially dangerous). I have a bare-bones working test of this later: it has, in the conversion section, user_code in parentheses: <tt>specs /xyz/ (data = data.changestr('y','A')) 1</tt> does put out <tt>xAz</tt>.</p> <p>Is such a facility worthwhile at all? Is it worth putting some effort into implementing it? I'd like to limit it's reach to only the variables with the suggested names of <tt>data</tt> (input and output -- or should these be different?) and <tt>user</tt> a "persistent" indexed variable available to store things across groups in a call and across records in a pipe. At the moment, I don't know how to do this isolation.</p> <p>The other new feature that looks worthwhile implementing is EOF handling. I have not looked at how hard this would be. (And at the moment, I have had enough time with SPECs!)</p> <p>The whole thing <u>should</u> be redone at some time using the IRange and Dstring classes for parsing the input.</p> <p>Jeff<br> </p> </body> </html> |