Clean up DOCTYPE statements in common files
Numbering of Section 1.12 of Reference is inconsistent
Diagram for Items method of Relation class wrong
Typo in StringTable description of []
Missing changes for revision to modification in RexxInfo class
Programmers Guide Updates
Confusing Documentation on .LOCAL vs .ENVIRONMENT
.File renameTo has Windows/Unix commands reversed
::Routine example 3.16 missing external keyword
Problem loading .dll built w/o a .def file
EVENTS.CPP contains #include that is unneeded
Code/documentation mismatch in Interpreter_instance.cpp
Incorrect response to request(string) from array instances
Source method strips leading comments/whitespace
Remove authors list from title pages.
Remove authors list from title page.
Remove authors list from title pages.
Remove authors list from title pages.
Would it be possible to simply replace the 4.2 version of the header files with the 5.0 ones? If so, exactly which ones would be affected? Just curious đŸ˜„ Gil
I agree that this topic might be of general interest so I am going to start a thread later today on the oorexx-devel list where it will get more exposure than it would here in an RFE.
Yes, it is possible for 4.2 qnd 5.0 (and others for that matter) to coexist on the same Windows machine. By that I mean, it is possible to easily switch back and forth between them but only one can be the "active" version at one time. I did some work on this several years ago which I presented at multiple Symposia. I recently revisited this even though I have been on 5.0 for many years. Let me know if you are interested in my (updated) work and we can take the discussion offline as it isn't directly...
You might want to look at the example under the "section" method of the CircularQueue class for another way to "rotate" a list. I have used this technique with a "list" of the days of the week to get the first of a month aligned with its correct day of the week.
Not being a *nix guy, I did notice the "extra" file in the list is probably the core dump - .../rexx.core - which would explain the 2 "failures". So if you delete the core dump before running the sysfiletree testgroup, the tests should run successfully. Unfortunately, this doesn't help explain why you get the segmentation fault when you run the testgroup as part of the whole suite. Sorry :-(
Another hint: it looks like "c4k" might be an attribute of the "c" object. If so, the observed behavior would mean the attribute has never had a value assigned and so has a (string) value of its name in uppercase.
Determine the latest version of FOP before downloading it. Update the copy of the entities file for certain books with the revision level and date of the book.
Determine the latest version of FOP before downloading it.
Update setup.rex to download fop-2.7. Fix typo in sources.txt.
Update Copyright date to 2022
Not at all. We usually see this when someone "comments out" a block of code and accidently ends up with lines "continuing" unexpectedly.
This is NOT a valid program. Because the block comment spans the line end, the first line is blank concatenated with the line following the end of the comment which causes the error message. If you 1) move the start of the comment to the next line, 2) add a semicolon after the first statement before the start of the comment or 3) add a semicolon after the end of the comment and before the next statement, the problem will go away. Hope that helps.
Document build package written in ooRexx based on the batch file version developed for Windows. Documentation is not complete.
Comitted [r12452]
Thanks for doing the work to develop and test the new samples!
Missing supplier method for stringtable class
My bad. It is indeed there and working for me too. I was doing some things in a rexxtry-like session and thought I had created a stringTable but when I went to use it as the first arg of the enhanced method, I got a complaint that the thing didn't understand "supplier". A cursory check of the rexxref didn't show supplier as a listed method, hence the RFE. I will close it as rejected.
Missing supplier method for stringtable class
Mike, The runner 'program' is a Java class and it is in the NetRexx .jar file. Perhaps you have not set the CLASSPATH to include that file?
So if you are not willing to use ooRexx 5.0.0 while it is still in Beta, there is a way to still 'pipe' the stem contents into the NetRexx Pipe. Here is a short program that demonstrates how to do it. It uses the ooRexx session queue to pass the data. The main program puts the stem contents onto the queue and then builds a 'command' that has two parts. The first part is a script that retrieves the lines from the queue and writes them to standard output. That output is 'piped' to the second part which...
Hi! I've had a look at your 'pipe' and I believe we can accomplish what you want. The 'hurdle' you see is the inability for the NetRexx Pipe to access the ooRexx variable pool. What I see is that you want the contents of the stem fn. to be sent into the pipe. Now one way to do that would be to write the stem contents to a file and have the pipe read the file. Not a very elegant nor efficient solution but it would work. But there is a better, in my opinion, way to do it. It makes use of the fact that...
Hi guys. Actually, I did that presentation at the last symposium (see here). Happy to answer questions on this list.
Thanks Rick! That is an area I am still not up to speed on so didn't realize it was needed.
Cleanup left over comments from development r12369
Cleanup extraneous comments.
R5 linein/lineout DRAMATIC slowdown???
Changes committed with https://sourceforge.net/p/oorexx/code-0/12368/
Enhance performance for stream BIFs on case-insensitive file systems.
As this bug has been dormant for more than a year, I decided to investigate whether Walter's suggestion about "remembering" the resolution of a file id and using it for later calls would be feasible to implement and what effect it would have on performance. After a great deal of study of how the stream BIFs actually work and learning that each call to one of them incurs 4 system calls on Windows, it seemed that a significant improvement would occur if a table of file ids and their corresponding fully...
R5 linein/lineout DRAMATIC slowdown???
"This is documented for the various collection classes that "==" is used to determine equality of indexes and items." Indeed it is, my bad. I still think the example should find its way into the documentation somewhere with an explanation (or pointer to an explanation) of how it works.
I agree that this solution needs to be preserved somewhere as it is certainly not something that most ooRexx programmers would have come up with. I certainly would not have thought of it. It appears that this is based on the knowledge that the hasItem method uses the "==" method "under the covers". As a minimum, that fact needs to be documented, probably in the description of the hasItem method of the Array class.
OK, got it. If we get issues reported against Windows, we may need to add some additional notes to the documentation for ADDRESS PATH.
Does this difference also apply to Windows, i.e. 'set path=' vs. 'set path="" ', or are they equivalent?
Just threw together the following which should work on all platforms. You can Requires this or include it in in your program w/o the Routine directive but with just a isDebug label. Use it like this: say isDebug() and it will return either 0 or 1. ::routine isDebug public address path rexx '-V' with output stem v. return v.1~caselessPos('Test') \== 0 Gil B
To make sure I understand the situation, I believe there are 3 cases here. The first is really old compilers that do not have stdint.h. Our definitions handle that case. The second case is compilers that have stdint.h but do not have __has_include. The user needs to define the flag HAVE_INTTYPES_H for this case. The third case is newer compilers that have both and our conditional logic handles that case. Please correct me if I have misstated the situation.
It appears that the lines in question are only in the Windows version of rexxapitypes.h and not in the Unix version in SVN yet you reference the Clang compiler so I am confused??
My concern is that Erich indicates he sees no way to fix it. Now hopefully the BSD gurus will come back with a way but what if they don't? Then we can only document that this functionality is not available on those platforms and skip the testcases that fail when run on them.
I think it would be acceptable to make a note in the documentation on the executable method that it will return .nil on OpenBSD.
Section 2.17 documents the OPTIONS keyword, not the ::OPTIONS directive. That is in section 3.6 and it does document TRACE.
Glad you have had success w/ NetRexx Pipelines! As to your recent discovery - note my earlier comment regarding the difference between variables in NetRexx and ooRexx. So, even though you ran the 'pipe' command from within ooRexx, the ooRexx interpreter created a new process to run Java which ran the .runner program interpreting the pipeline. That process has no access to the ooRexx process or its variable pool so the VAR stage cannot "see" the ooRexx variable. Instead it tries to find a NetRexx/Java...
No, it does not work for me and I should have tested it before posting! I did some reading about the VAR stage after(!) I posted and discovered that VAR is supposed to retrieve the value of the variable NAMED nixbix. So your solution of using LITERAL rather than VAR seems more reasonable. Remember that when the NetRexx Pipeline documentation talks about "REXX", it is NetRexx NOT ooRexx. So unless there is a way for one to 1) create NetRexx variables and 2) assign them their ooRexx values, then the...
I will defer to the NetRexx guys for the answer to this one as they can probably answer right away while I would need to do a lot of research and testing to figure it out. Sorry but this is not my area of experience ;-(
On to the issues you encountered that you described in the first post: 'org.netrexx.njpipes.pipes.runner not found'. This is the NetRexx program that actually does the work. It is located in the NetRexxF.jar file. The 'pipe' command - actually pipe.bat on Windows - is found because it is in the path. It tries to invoke Java with an argument -cp (which stands for classpath) that makes that .jar file available. If NETREXX_HOME is not set (or set incorrectly), then Java can't find the .runner program...
On to the issues you encountered that you described in the first post: 'org.netrexx.njpipes.pipes.runner not found'. This is the NetRexx program that actually does the work. It is located in the NetRexxF.jar file. The 'pipe' command - actually pipe.bat on Windows - is found because it is in the path. It tries to invoke Java with an argument -cp (which stands for classpath) that makes that .jar file available. If NETREXX_HOME is not set (or set incorrectly), then Java can't find the .runner program...
On my system I did a google search for 'setting environment variables windows 10' which led to a series of steps which I followed. Once the dialog opens showing two windows - one for user variables above a second one for system variables - you are ready to add NETREXX_HOME. Click on the 'new' button under the user window. A new dialog opens with two entry boxes. In the first type 'netrexx_home' - case does not matter. In the second box type the path to the directory where you 'installed' NetRexx....
So, it looks like lots of progress! There is a lot to comment on in this post and the next one so I've decided to split them up into multiple posts. First, your explanation of how you normally work is very helpful and will guide me in making suggestions. Just a note on running rexxtry - while your solution to rename the suffix certainly works, you could have instead typed rexx rexxtry.rex. Now the normal rexx.exe is invoked rather than rexxhide. Not a big deal, just for your information. Next, the...
Hi Mike. Sorry that you are still struggling with getting this running. I think I know part of the problem that I've been having in trying to help you. It seems that you normally start your programs by double-clicking on them while I've been assuming you were running them from a command prompt. Unfortunately, the NetRexx documents also assume you are at a command prompt so we are at cross purposes! Before I suggest anything else, let me ask how you added the bin subdirectory to your path? Did you...
Not having heard about any further progress, let me add the following. Step 7 - creating a batch file named nrxstart.cmd - is not required IF you 1) add the \bin subdirectory to your path (as you have done) and 2) set NETREXX_HOME to the directory where you unpacked the ZIP file. (See the fourth line in my nrxstart.cmd for the syntax.) After that you should be able to move to step 8!
Hi René! I continue to play with my experiment and have now modified the nrxstart.cmd batch file to also set classpath. This allows me to use "address path java ..." in my nrxpipe.rex program which eliminates the overhead of cmd.exe and the pipe.bat batch file. NB The 'path' option on address is new on ooRexx 5.0.0.
Hi René! I continue to play with my experiment and have now modified the nrxstart.cmd batch file to also set classpath. This allows me to use "address path java ..." in my nrxpipe.rex program which eliminates the overhead of cmd.exe and the pipe.bat batch file. NB The 'path' option on address in new on ooRexx 5.0.0.
Hi René! I continue to play with my experiment and have now modified the nrxstart.cmd batch file to also set classpath. This allows me to use "address path java ..." in my nrxpipe.rex program which eliminates the overhead of cmd.exe and the pipe.cmd batch file. NB The 'path' option on address in new on ooRexx 5.0.0.
Yes, sorry I did not include the nrxstart.cmd as an attachment since it is specific to the folder/directory structure that I used. So I have the following set up: under my root folder (C:) I have a Rexx folder and then a projects folder. For this project I created a nrxpipes folder and placed everything in it. So I have C:\Rexx\projects\nrxpipes and in it is nrxstart.cmd. Here is its contents: @rem Setup for using NetRexx @echo off if defined netrexx_home goto :eof set netrexx_home=C:\Rexx\projects\nrxpipes...
Yes, it appears that the line in the PDF uses back quotes. I simply followed the recommendation in the following sentence and copied the file so did not run into that issue. BTW, congratulations on getting all the way to step 7!
Yes, sorry I did not include the nrxstart.cmd as an attachment since it is specific to the folder/directory structure that I used. So I have the following set up: under my root folder (C:) I have a Rexx folder and then a projects folder. For this project I created a nrxpipes folder and placed everything in it. So I have C:\Rexx|projects\nrxpipes and in it is nrxstart.cmd. Here is its contents: @rem Setup for using NetRexx @echo off if defined netrexx_home goto :eof set netrexx_home=C:\Rexx\projects\nrxpipes...
In the hope that you will not be deterred in pursuing your objective, I decided to attempt to get it working myself. But first a comment re. "shell" in the context of Windows. You do not need to install anything extra as the console window that opens when you run cmd.exe is in fact the "shell" that René referenced and that is mentioned in the Pipelines Guide. So starting from scratch this morning, I retrieved the documentation, studied parts of it, installed and tested NetRexx 4.01-GA, tested pipelines...
One more off-topic comment re Pipes: since you indicated that you are interested in using pipes w/ ooRexx AND you are running 4.2.0, you might be interested in an experimental version of ooRexx developed by Jean-Louis Faucher that also implements MANY pipe stages. The original presentation from 2012 is here: https://www.rexxla.org/presentations/2012/201205-Sandbox-jlf.pdf . This is still an active project and is hosted on GitHub here: https://github.com/jlfaucher . I'm sure Jean-Louis would be happy...
Re. a) very much missing CMS Pipelines on PC. I know that there are several pipeline implementations available but I will let others offer more details as my knowledge is limited. My experience with VM/CMS is prior to pipelines becoming available - yes, I am that old! - so I haven't had the pleasure of working with them. I know that those that have used them love them so I'd recommend that you explore getting a PC version.
Update the tool package used to build the ooRexx documentation on Windows
Committed [r12284] to update setup.rex to use a current mirror site and download FOP 2.6. Also updated the documentation in sources.txt and read1st.txt. Rewrote fo2pdf.cmd to make it independent of the level of FOP installed (it will use the most recent version if there are multiple ones).
Modified setup.rex to download and install FOP 2.6 from a current mirror site. Updated the documentation in sources.txt and read1st.txt to reflect this change and describe how to upgrade an existing installation. Modified fo2pdf.cmd to permit it to determine the (most recent) level of FOP installed and use to it.
Update the tool package used to build the ooRexx documentation on Windows
Clearly you did not address my objections on Apr. 24 since this ticket was only opened on Apr. 25. But in any case, my objection still remains that the user must instantiate the singleton using any of your implementations. There seems to me to be many cases where this is an unnecessary requirement. My implementation allows the user to simply define the singleton object and send all messages to it via its class name thus being totally unaware of the underlying instance. You seem to reject that argument...
Apparently, my objections don't count! Just because no one else has weighed in on this topic doesn't mean you have a mandate to implement your version. As a minimum, you should have asked if there were any more comments before committing these changes. This is really unnecessary as there was a sample that provided the necessary code for anyone who wished to use it. And, as I have explained, an alternative implementation might be easier for most users to use. By putting your version in the code base,...
Looks like a missing ( in the failing line to me :-)
Well certainly a tour-de-force description of the subject but I must admit it did cause my eyes to glace over a bit! Just like when I first encountered your Singleton metaclass as that was a new concept for me. Once I did the research on metaclasses however, it all became clear. Now my main concern about this proposal is that while it is extremely versatile and will allow for all possible scenarios for a user needing a Singleton object, it is NOT simple. Rexx and ooRexx are built on the concept of...
I seem to be having trouble getting my point across. Because of our OO model, there is a distinction between Classes - factories - and Instances. Hence a programmer wishing to create a one-off object usually (although not always) will create a Class with Methods and possibly Attributes as that is the most easily understood way to declare what the one-off object can do. (I will ignore for now the use of the Enhanced message as a way to accomplish this.) Now the one-off object may require arguments...
On your point 1: there is a difference in creating (instantiating) an object and initializing it so it can be used. While one normally does both at the same point in a program, that is not a requirement. A singleton object can be created prior to program start and later made useable by completing the initialization. My point is that a singleton, from a user's viewpoint, should not have to be created; all the information about it is contained in the definition which should make it immediately usable...
I tried to come up with an approach using sub-classes to cover both the automatic creation case and the deferred creation case but was unsuccessful. There was very little - the need to use the "define" method to prevent copying the instance was all I found - that was common between the two cases. In your case you have "init" and "new" methods while I have "activate", "unknown", and "new" methods but the code in the two "new" methods are different. So it seems we have two distinct classes - autoSingleton...
Thanks for the review and analysis of my approach! I have a few comments in response: - while cases where the programmer wishes to defer creation of the instance certainly can exist, I believe the benefit of automatic creation outweighs any limitations imposed (which I have a hard time imagining) and that can be easily circumvented ; - any arguments required by the instance can be either be defined as attributes set at the time you would create the instance or the code in your init method can be...
I, too, have had a need for a singleton and have used a variation of the above code for quite a while. I recently modified it to account for the "copy" method which I hadn't previously considered. The advantages of this version is the instance is automatically created at class-creation time and messages can be sent to either the class object or the instance. This lets the user ignore the instance entirely unless he chooses to use it. I have adopted a convention for naming the instance and have placed...
The following simple version w/o BSF seems to work correctly: strArr = "Tom", "Dick", "Harry" say "do counter i with index idx item val over strArr~supplier:" do counter i with index idx item val over strArr~supplier say "#" i":" "index="pp(idx) "item="pp(val) end exit pp: return "["arg(1)"]"
Hi Steven, I had planned to answer your question but it seems P.O. has beat me to it! Now, I don't know how comfortable you are with the OO side of ooRexx, so here are some suggestions using the older mainframe style of Rexx. I would use compound variables (stems) to hold the contents of the two files using something like: do 1 = 1 while lines(filename1) > 0 file1.i = linein(filename1) end file1.0 = i and similarly for filename2 and the file2 stem. Then a do loop will let you compare each item in...
IMHO, the correct way is to "keep" the quotes and not just because I'm a Windows user! When the user enters a command to the shell/cmd, the arguments are expected to be separated by blanks. If one or more of the arguments contains blanks, then the convention is to tell the shell/cmd that fact by surrounding the parts of the argument by double quotes. It could as well have been to use some other character or even to require the imbedded blanks to be escaped. So the shell/cmd now knows the proper way...
OK, one more way to do this and then I'll shut up. Note that I've made this 3 lines of code but of course it could be done in one with an increase in complexity and a decrease in understandability. ! = .endofline -- could be any character not in the arguments cargs = .sysCArgs~makestring(, !) -- specify the char. to separate the args if not using new line parse var cargs a (!) b (!) c (!) d (!) e (!) . Note that if there are less arguments than variables, the trailing ones are set to ''.
OK, one more way to do this and then I'll shut up. Note that I've made this 3 lines of code but of course it could be done in one with an increase in complexity and a decrease in understandability. ! = .endofline -- could be any character not in the arguments cargs = .sysCArgs~makestring -- specify the character to separate the args if not using new line parse var cargs a (!) b (!) c (!) d (!) e Note that if there are less arguments than variables, the trailing ones are set to ''. And if there are...
I agree that it is not optimal but it was a fun exercise to write and test. And I understand the desirability of accessing the C args for the cases you mention. But for those times that I would need to do that, I would simply use .sysCArgs[n] unless I needed to reference it multiple times. In that case I would code e.g. fn = .sysCArgs[1] and use fn from then on.
If you could live with this syntax: call getCArgs a, b, c, d, e then by adding the following code to your program, you would have a solution: getCargs: -- can't be a procedure or ROUTINE due to scope of variables; could -- be a native routine as that could set the values in the caller's -- context do j = 1 to min(arg(), .sysCArgs~items) call value arg(j), .sysCArgs[j] end return
So the idea has less to do with USE (vs. PARSE) than providing a shorthand way of assigning the (string) arguments to meaningfully-named variables. And, I would argue, those arguments have already been 'fetched'; they're immediately accessible, as Bob noted, as .SysCArgs[1], etc. Guess I'm not a fan of this idea.
Not sure I see the usefulness of this proposal; can someone provide an example? The USE instruction provides access to arguments passed by reference but aren't all the elements of SysCArgs always (immutable) strings?