On 15.10.2025 18:17, Josep Maria Blasco wrote:
Maybe using the same name for a class method and
for instance methods can end up by confuse some users.

Why not using another name for the class method,
for instance "globalOptions"? It's a little redundant,
yes, but it's also very clear, and it avoids confusions.

Thank you for this suggestion, which will improve intuitive understanding and therefore cut down mix-ups!

---

There is a new suboption added on the options instance method: "InitialPackageSettings". When using overrides it may be interesting and even important at times to be able to get at the initial package settings when the program/package got called/required. For this option it is an error to supply a newValue as no changes can be allowed on that value. (There is an additional option - "Options" | "PackageOptions" | "SetPackageOptions" - planned for setting a package using an ::OPTIONS directive string.)

---rony


Missatge de Rony G. Flatscher <[email protected]> del dia dc., 15 d’oct. 
2025 a les 15:46:

    While going to bed, I realized that I totally forgot that the 
override-related options should
    be at the .Package class object level (just used package instances for 
faster development). So
    the current variant has two methods defined for the .Package class:

      * a class method named "options" that allows querying and setting the 
options
        "OverridePackageSettings" and "CountOverride", and

      * an instance method named "options" that allows querying and setting the 
options for the
        package instance in hand, i.e., the options "All", "Digits", "Error", "FAilure", 
"FOrm",
        "FUzz", "Lostdigits", "NOString", "NOTready", "Prolog", and "Trace" 
(these are all the
        options one can set with the ::options directive).

    Yesterday's "launch.rex" sample, therefore, needs to be changed to:

        parse arg pgmName args -- parse program name and command line arguments 
-- override the
        options of programs that get called or required from now on 
.package~options("Override",
        "::OPTIONS ALL SYNTAX") -- set override settings 
.package~options("countOverride", -1) --
        override all called/required program/package settings -- now call the 
program with the
        overridden options call (pgmName) args -- run the program

    (Note: this "launch.rex" version will "globally" apply the overrides as the 
"countOverride"
    option got set to a negative number, i.e., to "-1".)

    Usage of "launch.rex" remains the same, i.e.,

        G:\test\orx\options>*rexx launch.rex test_novalue.rex*
              1 *-* say "using a variable with" novalue "which is by default 
fine!"
              6 *-* call (pgmName) args    -- run the program
        Error 98 running G:\test\orx\options\test_novalue.rex line 1:  
Execution error.
        Error 98.986:  Reference to unassigned variable "NOVALUE".
        G:\test\orx\options>

    Will now start testing and once if it looks stable enough, will commit this 
version such that
    everyone interested may get their hands on it after the interpreters are 
re-created by Jenkins
    and placed on < 
<https://sourceforge.net/projects/oorexx/files/oorexx/5.2.0beta/>
    <https://sourceforge.net/projects/oorexx/files/oorexx/5.2.0beta/>.

    ---rony


    On 14.10.2025 22:16, Rony G. Flatscher wrote:

    Hi Jon,

    Sorry for being "mum"; however, I have been trying to get the second part 
implemented and up
    and running the way I intended (but did not know whether I would succeed). 
For a few minutes,
    it has been working; it still needs thorough testing and tidying up before 
I would be ready
    to submit the code.

    Here are the coarse specifications:

      * There is a new option named "OverridePackageSettings" (default: 
packageSettings default),
        which returns the current overridePackageSettings as an ::OPTIONS 
directive string, or if
        a second argument is supplied, it needs to be a string representing a 
syntactically
        correct ::OPTIONS directive which then gets used to set the override 
packageSettings from
        then on; this can be changed at runtime dynamically at any time 
repeatedly

      * There is a new option named "CountOverride" (default: 0), which returns 
the current
        "countOverride", and if a second argument is supplied, it needs to be a 
number with the
        following implications (can be changed at anytime repeatedly):

          o 0 ... no overriding takes place (default setting)

          o +n (positive number): overriding takes place exactly n times and 
then halts

          o -1 ... overriding takes place constantly (in previous discussion meant 
for "global
            override") and can only be stopped by setting the value explitly to 0
            (.context~package~options("count",0))

    This will allow at runtime to turn on package settings override dynamically 
(e.g. for
    debugging).

    This should e.g. allow for a little Rexx launcher, that would allow Walter 
et.al
    <http://et.al>. to invoke any program with something like "::options all 
syntax" or
    "::options digits 20" to override all program option settings intentionally 
("launch.rex"):

        parse arg pgmName args -- parse program name and command line arguments 
-- override the
        options of programs that get called or required from now on pkg = 
.context~package -- get
        package object pkg~options("Override", "::OPTIONS ALL SYNTAX") -- set 
override settings
        pkg~options("count", 1) -- just override settings once for the next 
called/required
        program -- now call the program with the overridden options call 
(pgmName) args -- run
        the program

    Here a program that would run as long as the novalue condition is not set 
("test_novalue.rex"):

        say "using a variable with" novalue "which is by default fine!"

    Running the "test_novalue.rex" program as is with its output:

        G:\test\orx\options>*rexx test_novalue.rex*
        using a variable with NOVALUE which is by default fine!
        G:\test\orx\options>

    Running "test_novalue.rex" with "launch.rex" above would look like this and 
generate the
    following output:

        G:\test\orx\options>*rexx launch.rex test_novalue.rex*
              1 *-* say "using a variable with" novalue "which is by default 
fine!"
              8 *-* call (pgmName) args    -- run the program
        Error 98 running G:\test\orx\options\test_novalue.rex line 1:  
Execution error.
        Error 98.986:  Reference to unassigned variable "NOVALUE".
        G:\test\orx\options>

    If the "count" option was set to "-1" then all subsequently called or 
required programs would
    get their package options overridden as well.

    ---

    The third part (TBD, maybe Gil can lend a hand there, which would be really 
of great help)
    would then be to implement the ability for the discussed switches for the 
rexx launchers
    (rexx[.exe], rexxhide[.exe], rexxpaws[.exe]):

        options ::= (-o | --override | -g | --global-override) ("string" | 
@<filespec>)

    Ad "string": this must be formatted as a single, syntactically correct 
"::OPTIONS" directive,
    without a semi-colon (;), carriage return (CR, "0d"x) or linefeed (LF, 
"0a"x) to be seen
    acceptable.

    ---

    After testing further and tidying up I would also try to reword the 
documentation, trying to
    avoid the problems that Jon has thankfully pointed out, with the request to 
give feedback or
    improvements for it, once done!

    ---rony



    On 13.10.2025 16:57, Sahananda wrote:
    Hi Rony,

    It is really tricky expressing things clearly and it seems to me that this 
sentence
    describes something that can be used several ways and thus is really 
complicated.  I'm now
    not sure whether the verb should be Set, Modify or Override, and if I have 
understood you
    correctly, then until we see the behaviour of the finished object this will 
remain unclear,
    and it may be that even at method invocation time, we don't know whether 
the operation being
    performed is a set, a modify or an override as that is dependant on what 
follows and whether
    new programs or packages inherit these options.

    To me, this is the flavour of the three words

      * SET - This assigns a value to the option, either an initial one or a 
replacement one. 
        The value can subsequently changed by setting again
      * MODIFY - This assigns a new value replacing an extant value.  The value 
can subsequently
        be changed by modifying again
      * OVERRIDE - This is assigning a new value whilst remembering the old (or 
perhaps
        original) value.  The OVERRIDE can be undone somehow and either the 
previous or original
        value will be reinstated.  I'm not clear whether this is a push/pop.

    None of them seem to exactly describe the mechanism that you describe 
(turning off the override)

    I wonder if anyone else can take a stab at it?

    Jon


    On Mon, 13 Oct 2025 at 14:09, Rony G. Flatscher <[email protected]> 
wrote:

        Hi Jon,

        On 13.10.2025 14:07, Sahananda wrote:
        Sorry, there was a typo.  In my suggested sentence, the first 'set' is 
redundant as
        what is being set is called the 'package options', not the 'set package 
options'.

        The first part of the sentence should therefore read:

        *This method retrieves the current package options,*

        I have difficulty with the rest of the sentence as I am not sure what 
you are saying. 
        Perhaps it would be better as two sentences:

        *This method retrieves and optionally sets the current package options. 
 The package
        options may also be set explicitly using the ::options directive.*

        I'm not sure whether the word 'modifies' should replace the word 
'sets'?  If (and I
        think this is the case) there will always in every circumstance be a 
previous value to
        the package options when this method is called, I think '*modifies*' is 
better here. 
        If there is some circumstance where this method can be used to 
initialise the package
        options (and I don't think that is possible) then imho '*sets*' would 
be clearer.

        Again, I'm still not sure how the adverb '*explicitly*' modifies the 
meaning in this
        context.  Perhaps if you said a couple of sentences about that I could 
venture an opinion.

        Again,  I hope this is helpful,

        Yes, very much so, and thank you very much for taking the time!

        Maybe a few more infos after reading your thoughts: this 'options' 
method without
        argument returns a string formatted as an ::OPTIONS directive showing 
all options in
        effect for the package. In addition it allows to query and set any 
option that can be
        listed on the ::OPTIONS directive, whereby always the value at method 
invocation time
        gets returned.

        However, this method is also meant for allowing for defining the 
package settings that
        should be used to override the package settings when loading 
programs/packages which
        then determine the package settings that should be in effect. To make 
this even more
        flexible there is an idea of turning on/off the overriding behaviour 
not only with a
        switch, but even allowing to optionally define the number of overrides 
that should take
        place, including "infinity". This is still in infant stage, but 
eventually this should
        become available (currently implementing that part).

        Not sure whether that clarifies it, as it is work in progress (WIP) and 
cannot be tested
        yet. (Once that part works one could use that infrastructure then to 
allow for supplying
        override options when starting a Rexx program.)

        HTH

        ---rony

_______________________________________________
Oorexx-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/oorexx-devel

Reply via email to