Using RETURN to pass data

Figures Figure 125 to Figure 128 show how in COBOL, C, C++, PL/I, and assembler language, a RETURN command is used to pass data to a new transaction.

Start of changeThese examples show data being returned in a COMMAREA. For an example of a RETURN command that uses a channel to return data, see Enhanced inter-program data transfer: channels as modern-day COMMAREAs.End of change

Figure 125. COBOL example--RETURN command
                   Invoking program
IDENTIFICATION DIVISION.
PROGRAM-ID. 'PROG1'.
.
WORKING-STORAGE SECTION.
01  TERMINAL-STORAGE.
    02  FIELD PICTURE X(3).
    02  DATAFLD PICTURE X(17).
.
PROCEDURE DIVISION.
    MOVE 'XYZ' TO FIELD.
    EXEC CICS RETURN TRANSID('TRN2')
         COMMAREA(TERMINAL-STORAGE)
         LENGTH(20) END-EXEC.
.
                    Invoked program
IDENTIFICATION DIVISION.
PROGRAM-ID.  'PROG2'
.
LINKAGE SECTION.
01  DFHCOMMAREA.
    02  FIELD PICTURE X(3).
    02  DATAFLD PICTURE X(17).
.
PROCEDURE DIVISION.
    IF EIBCALEN GREATER ZERO
    THEN
        IF FIELD EQUALS 'XYZ'
            MOVE 'ABC' TO FIELD.
    EXEC CICS RETURN END-EXEC.
Figure 126. C example--RETURN command
                    Invoking program
struct ter_struct
{
    unsigned char field[3];
    unsigned char datafld[17];
};
main()
{
    struct ter_struct ter_stor;
    memcpy(ter_stor.field,"XYZ",3);
    EXEC CICS RETURN TRANSID("TRN2")
              COMMAREA(&ter_stor)
              LENGTH(sizeof(ter_stor));
}
                        Invoked program
struct term_struct
{
    unsigned char field[3];
    unsigned char datafld[17];
};
main()
{
    struct term_struct *commarea;
    EXEC CICS ADDRESS COMMAREA(commarea) EIB(dfheiptr);
    if (dfheiptr->eibcalen > 0)
    {
        if (memcmp(commarea->field, "XYZ", 3) == 0)
            memcpy(commarea->field, "ABC", 3);
    }
    EXEC CICS RETURN;
}
Figure 127. PL/I example--RETURN command
                   Invoking program
PROG1: PROC OPTIONS(MAIN);
DCL 1 TERM_STORAGE,
      2 FIELD CHAR(3),
.
FIELD='XYZ';
EXEC CICS RETURN TRANSID('TRN2')
     COMMAREA(TERM_STORAGE);
END;
                    Invoked program
PROG2:
PROC(TERM_STG_PTR) OPTIONS(MAIN);
DCL TERM_STG_PTR PTR;
DCL 1 TERM_STORAGE
       BASED(TERM_STG_PTR),
      2 FIELD CHAR(3),
.
IF EIBCALEN>0 THEN DO;
    IF FIELD='XYZ' THEN FIELD='ABC';
    END;
EXEC CICS RETURN;
END;

Figure 128. ASM example--RETURN command
                   Invoking program
 
DFHEISTG DSECT
TERMSTG  DS 0CL20
FIELD    DS CL3
DATAFLD  DS CL17

·
·
·
PROG1 CSECT
·
·
·
MVC FIELD,=C'ABC' EXEC CICS RETURN TRANSID('TRN2') COMMAREA(TERMSTG)
·
·
·
END   Invoked program   TERMSTG DSECT FIELD DS CL3 DATAFLD DS CL17
·
·
·
PROG2 CSECT
·
·
·
CLC EIBCALEN,=H'0' BNH LABEL2 L COMPTR,DFHEICAP USING TERMSTG,COMPTR CLC FIELD,=C'XYZ' BNE LABEL1 MVC FIELD,=C'ABC' LABEL1 DS 0H
·
·
·
LABEL2 DS 0H
·
·
·
END
[[ Contents Previous Page | Next Page Index ]]