[Info-vax] Returning data from Cobol AST routine.
Arne Vajhøj
arne at vajhoej.dk
Mon Sep 20 21:27:39 EDT 2021
On 9/20/2021 6:55 PM, Jan-Erik Söderholm wrote:
> I have been looking at the Cobol AST example here:
> http://computer-programming-forum.com/48-cobol/b75d8c5fdd43048e.htm
>
> This does work fine as an example. But what are the options to get
> some data back to the main program (called "x" in the example)
> from the ast program (called "ast_routine" in the example)?
>
> I have tried different versions of global, external and so on, but
> no luck so far. How to get "x" and "ast_routine" to share some data?
> Anything similar to an COMMON area in Fortran?
>
> The idea is to have an AST routine that will read from a mailbox when
> something is written to it. My idea was that the read of the mailbox
> would be using an AST to avoid polling the mailbox.
>
> This is to have a command input to detached processes to get them to
> reload the config, repoen the log file, close and exit and so on.
>
> Are there more options if not everything is done in Cobol?
> We can easily add some C if that helps...
external works for me.
identification division.
program-id. x.
environment division.
data division.
working-storage section.
01 magic-value pic 9(10) display external.
01 ast-proc-addr pointer value external ast_routine.
01 delta-time pic s9(18) comp value -50000000.
01 return-value pic s9(18) comp.
* the SYS$SETIMR call returns these condition values:
88 ss$_accvio value external ss$_accvio.
88 ss$_exquota value external ss$_exquota.
88 ss$_illefc value external ss$_illefc.
88 ss$_insfmem value external ss$_insfmem.
88 ss$_normal value external ss$_normal.
88 ss$_unasefc value external ss$_unasefc.
procedure division.
call-set-timer-service.
call "sys$setimr"
using
omitted
by reference delta-time
by value ast-proc-addr
omitted
omitted
giving
return-value
end-call
if ss$_normal
display "sleeping for 5 seconds"
call "sys$hiber"
giving return-value
end-call
else
evaluate true
when ss$_accvio
display "Expiration time not readable"
when ss$_exquota
display "Process AST or timer quota exceeded"
when ss$_illefc
display "Illegal event flag number specified"
when ss$_insfmem
display "Not enough dynamic memory to allocate timer
element"
when ss$_unasefc
display "Process does not have the specified event flag"
end-evaluate
end-if
display magic-value
stop run
.
end program x.
identification division.
program-id. ast_routine.
environment division.
data division.
working-storage section.
01 magic-value pic s9(10) display external.
01 return-value pic s9(18) comp.
procedure division.
ast-fired.
call "sys$wake"
using
omitted
omitted
giving
return-value
end-call
move 123 to magic-value
exit program
.
end program ast_routine.
$ cobol x
$ link x
$ run x
sleeping for 5 seconds
000000012C
Arne
More information about the Info-vax
mailing list