[Info-vax] Returning data from Cobol AST routine.
Bob Gezelter
gezelter at rlgsc.com
Wed Sep 22 09:22:25 EDT 2021
On Tuesday, September 21, 2021 at 9:48:49 PM UTC-4, Dave Froble wrote:
(Omitted for the sake of brevity)
> However, I'm not sure you'd have anything to do in the AST routine,
> since I'm assuming you're going to queue up an async read from the main
> program, and then continue with whatever the main program is doing.
> When the AST fires, it lets you know that the read completed, in some
> fashion, and now the message is in whatever buffer in the main program.
> I'd assume some flag is set, bu the AST routine, and periodically the
> main program tests the flag, and processes the message, at that time.
>
> Which brings up this question. How many mailboxes are you using? A
> single mailbox? Or multiple mailboxes (that's a real headache).
> >> For sharing data, what I have not tried, but I'd be tempted, is to
> >> declare some structure, in Basic it would be a RECORD, and pass the
> >> address (By Ref) to the AST routine, which also would have an
> >> identical RECORD definition, such that the two (main and AST routine)
> >> can both share the data in the structure. All that would be required,
> >> I think, is some variable that can be passed, By Ref, to the AST routine.
> >>
> >
> > I have not read up that much yet to see if there is any other information
> > you can pass, besides of the address to the AST routine.
> You mentioned elsewhere that you're unaware of how to define the
> datatype of an incoming argument. I've done this in Basic. Then the
> AST routine just uses the labels in the structure definition. The
> address is the address of the first variable defined in the structure.
> > But my guess is that, if you queue QIOs from multiple sources, the AST
> > routine must have some way to tell which source it was that trigged
> > the AST. Say you make (made up example, not part of our current target)
> > 10 QIO calls having the address of the same AST routine in the calls,
> > each QIO reading from its own TNA device, you need to know in the AST
> > routine which TNA device (like 10 different production machines) it
> > was that sent something.
> That sounds like a real headache. Perhaps event flags would help. I
> tend to avoid event flags.
> > I have probably not read enough aboit AST and QUI calls yet...
> ASTs can be fun. I try to use them to set flags or cancel I/O.
> Cancelling an I/O causes a completion of an async read. I feel that if
> I try to get "tricky", I'll outsmart myself, not so hard to do with dumb
> Dave.
>
> :-)
> --
> David Froble Tel: 724-529-0450
> Dave Froble Enterprises, Inc. E-Mail: da... at tsoft-inc.com
> DFE Ultralights, Inc.
> 170 Grimplin Road
> Vanderbilt, PA 15486
Dave.
Distinguishing between multiple sources using the same AST routine is straightforward. OpenVMS nee VAX/VMS QIO has a parameter referred to as ASTPARM (ASTPARM was added to the QIO interface with VAX/VMS; the RSX-11 family QIO did not have ASTPARM).
ASTPARM is an untyped longword. It can be:
- a buffer pointer (where the buffer structure includes a pointer to an owning data structure)
- a pointer to a data structure
- an index into a table of pointers
I have done code which had hundreds (or more) active IO connections active simultaneously using this technique with absolutely no problems.
Straightforward to say the least.
- Bob Gezelter, http://www.rlgsc.com
More information about the Info-vax
mailing list