Nay! Rexx passes everything by value, both to internal and to external 
functions. So passing <context> will give the assembler code 200 zero bytes to 
play with but it will go away on return.

And it is unnecessary. I know of no need for persistent storage. Perhaps it is 
worth persisting the STIMER MF=L and friends. (I have not yet done detail 
design. If indicated I will use name/token to do the persisting. There is also 
a persistent "user" pointer in the "environment block" that Rexx maintains and 
passes, so that is perhaps a better alternative. I have some detail design work 
to do.)

The pseudocode is otherwise on target. I would add (watch the line wrap!)

      When Left(Res, 1) = 'T'
        /* Rexx PARSE command from Res */
        /* Re-parametize or whatever is indicated by the command */
        Iterate
    end
end
/* Close files, clean up and terminate */

The ECB is in MVS-managed storage but it is apparently user-key.

I won't "persist" the STIMER; I will cancel it when I get an F or a P. F should 
be infrequent enough that there is little wasted overhead in cancelling the 
STIMER and presumably re-starting it. If the caller wants to resume the 
remaining interval it can readily enough keep the absolute wakeup time desired 
and do the necessary arithmetic. OTOH I guess F could return the remaining 
interval but that neglects any time spent processing the F. For P of course the 
remaining interval is irrelevant.

Whoever mentioned Rexx variables moving around was on target. Rexx's internal 
storage management is a black box. It may well move stuff around from time to 
time. As I say, everything is passed by value. And there is no C ampersand 
operator. I know of no way to get the address of a Rexx variable. Actually, now 
that I think about it, I have used IRXEXCOM which returns Rexx variable data 
"in bulk" to an assembler routine, but I do not recall the details. It may pass 
the actual address, not a copy of the value -- I don't recall.

Charles


-----Original Message-----
From: IBM Mainframe Discussion List [mailto:[email protected]] On Behalf 
Of David Crayford
Sent: Monday, June 20, 2022 11:10 AM
To: [email protected]
Subject: Re: Some UNIX file usage questions

I think I understand what Charles is doing.

context = copies('00'x,200) <-- state for HLASM program
wait_time = 30

do forever
     res = console(context, wait_time)
     select
       when res = 'T' then iterate
       when res = 'P' then leave
       otherwise ...
    end
end


On 21/06/2022 1:58 am, Paul Gilmartin wrote:
> I'll correct my earlier misstatement.  You did not say you were the client;
> merely "-n-house".
>
> On Mon, 20 Jun 2022 10:41:25 -0700, Charles Mills wrote:
>
>> The ECB is not in the Rexx. It is in MVS-owned storage IIRC.
>>
> I believe ECBs routinely occupy user-owned storage.
>
>> -----Original Message-----
>>>     ...
>>> ... Well, the actual parameter passed by the Rexx is continuously 
>>> accessible to the Assembler. It is of course possible to access any Rexx 
>>> variable from assembler, but I see no need. If I understand your question, 
>>> the answer is No.
>>>   
> I took "continuously accessible" to mean accessible by concurrent tasks even 
> after
> the Assembler returns to Rexx.
>
>> That depends on the AFAIK undocumented behavior of Rexx storage
>> management.  What happens if Rexx compacts variable storage, thereby
>> moving an ECB?  Rexx spurns concurrency.
>>
> "ECB" for example.  The Devil's advocate was envisioning using the parameter
> passed by Rexx as working storage.  Which is OK until returning to Rexx.
>

----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to [email protected] with the message: INFO IBM-MAIN

----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to [email protected] with the message: INFO IBM-MAIN

Reply via email to