Bernd,
AFAIK the SET ADDRESS OF is to set a pointer to address a piece of storage.
This is why Cobol doesn't you allow to do such a command.
If you want to "grab" the ADDRESS OF your working storage variable, you
should define a POINTER in LINKAGE then set it to the value and then move
it to your commarea pointer.
CALLING-PROGRAM.
WORKING-STORAGE.
01 MY-AREA PIC X(1000)
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.
LINKAGE-SECTION.
01 MY-PTR USAGE IS POINTER.
PROCEDURE DIVISION.
SET MY-PTR TO ADDRESS OF MY-AREA.
MOVE MY-PTR TO CA-AREA-ADDR.
Best regards.
Max
Il giorno ven 1 ott 2021 alle ore 15:50 Bernd Oppolzer <
[email protected]> ha scritto:
> 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
>
----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to [email protected] with the message: INFO IBM-MAIN