Probably asking a COBOL question for the first time :-)

I am thinking about writing a general sub-program using COBOL which does
several different computations, each of them needing different input and output data
of different size.

Because this should work with Batch and CICS, I am thinking about a single communication area with fixed size, which points to another communiation area of variable size.

The area looks like this:

01  COMMAREA.
    05  CA-FUNCTION_CODE   PIC X(8).
    05  CA-STATUS          PIC 99.
    05  CA-AREA-ADDR       USAGE POINTER.
    05  CA-AREA-LEN        PIC S9(4) COMP.

I managed to write the called subroutine; the COMMAREA is in the LINKAGE SECTION there,
and I can use the address in the CA-AREA-ADDR and read and write the values
in the variable comm-area, which is linked to the fixed area. No problem so far.

But:

in the calling program, when setting up the COMMAREA.
I cannot put the address of a WORKING-STORAGE FIELD into the
CA-AREA-ADDR. Because simply it is not allowed to use
SET CA-AREA-ADDR TO ADDRESS OF field on WS fields.

Why? IMO there is no danger in passing the address of a WS field to a subprogram.
Even if the WS field were in automatic storage (which it is not, IMO),
there would be no problem. In fact, this is done implicitly using call-by-reference, but I want to do it now sort of explicitly (this way  overcoming some restrictions
with CICS and fixed lengths of COMMAREAs).

I recall having seen the DB2 precompiler generating ASSEMBLER routine calls
to do just this (getting the address of a WS field to feed it into the DB2 interface
DSNHLI). Is this the only possible way to go?

Thank you, kind regards

Bernd

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

Reply via email to