Figures Figure 121 to Figure 124 show how, in COBOL, C, C++, PL/I, and assembler language, aLINK command causes data to be passed to the program being linked to; an XCTL command is coded in a similar way.
These examples show data being passed in a COMMAREA. For an
example of a LINK command that uses a channel to pass data, see Enhanced inter-program data transfer: channels as modern-day COMMAREAs.
Invoking program
IDENTIFICATION DIVISION.
PROGRAM ID. 'PROG1'.
.
WORKING-STORAGE SECTION.
01 COM-REGION.
02 FIELD PICTURE X(3).
.
PROCEDURE DIVISION.
MOVE 'ABC' TO FIELD.
EXEC CICS LINK PROGRAM('PROG2')
COMMAREA(COM-REGION)
LENGTH(3) END-EXEC.
.
Invoked program
IDENTIFICATION DIVISION.
PROGRAM-ID. 'PROG2'.
.
LINKAGE SECTION.
01 DFHCOMMAREA.
02 FIELD PICTURE X(3).
.
PROCEDURE DIVISION.
IF EIBCALEN GREATER ZERO
THEN
IF FIELD EQUALS 'ABC' ...
Invoking program
main()
{
unsigned char field[3];
memcpy(field, "ABC", 3);
EXEC CICS LINK PROGRAM("PROG2")
COMMAREA(field)
LENGTH(sizeof(field));
}
Invoked program
main()
{
unsigned char *commarea;
EXEC CICS ADDRESS COMMAREA(commarea) EIB(dfheiptr);
if (dfheiptr->eibcalen > 0)
{
if (memcmp(commarea, "ABC", 3) == 0)
{
.
Invoking program
PROG1: PROC OPTIONS(MAIN);
DCL 1 COM_REGION AUTOMATIC,
2 FIELD CHAR(3),
.
FIELD='ABC';
EXEC CICS LINK PROGRAM('PROG2')
COMMAREA(COM_REGION) LENGTH(3);
END;
Invoked program
PROG2:
PROC(COMM_REG_PTR) OPTIONS(MAIN);
DCL COMM_REG_PTR PTR;
DCL 1 COM_REGION BASED(COMM_REG_PTR),
2 FIELD CHAR(3),
.
IF EIBCALEN>0 THEN DO;
IF FIELD='ABC' THEN ...
.
END;
END;
Invoking program
DFHEISTG DSECT
COMREG DS 0CL20
FIELD DS CL3
.
PROG1 CSECT
.
MVC FIELD,=C'XYZ'
EXEC CICS LINK
PROGRAM('PROG2')
COMMAREA(COMREG) LENGTH(3)
.
END
Invoked program
COMREG DSECT
FIELD DS CL3
.
PROG2 CSECT
.
L COMPTR,DFHEICAP
USING COMREG,COMPTR
CLC FIELD,=C'ABC'
END