Sample Extended Program Communication Block (XPCB)
The segment that is passed in a dependent region and has the Data Capture exit routine defined for it can use the XPCB to identify the segment and call functions, provides the address of a work area, and contains additional information that is passed to the Data Capture exit routine.
This topic provides examples of the XPCB in assembler, COBOL, and PL/I.
Subsections:
Assembler
The following code sample is an example of the XPCB in assembler.
SPACE 3
XPCB DSECT
XPCB_EYECATCHER DS CL4 "XPCB" EYECATCHER
XPCB_VERSION DS CL2 XPCB VERSION INDICATOR
XPCB_RELEASE DS CL2 XPCB RELEASE INDICATOR
XPCB_EXIT_NAME DS CL8 SEGMENT EXIT NAME
XPCB_EXIT_RETURN_CODE DS H RETURN CODE FROM EXIT
XPCB_EXIT_REASON_CODE DS H REASON CODE FROM EXIT
XPCB_DATABASE_NAME DS CL8 PHYSICAL DATA BASE NAME
XPCB_DBD_VERSION_PTR DS A ADDRESS OF DBD VERSION ID
XPCB_SEGMENT_NAME DS CL8 PHYSICAL SEGMENT NAME
XPCB_CALL_FUNCTION DS CL4 CALL FUNCTION
XPCB_PHYSICAL_FUNCTION DS CL4 PHYSICAL CALL FUNCTION
DS CL4
XPCB_DB_PCB_PTR DS A ADDRESS OF DB PCB
XPCB_DB_PCB_NAME DS CL8 NAME OF DB PCB
XPCB_INQY_OUTPUT_PTR DS A ADDRESS OF "INQY" OUTPUT
XPCB_IO_PCB_PTR DS A ADDRESS OF I/O PCB
XPCB_ENVIRONMENT_FLAGS DS X ENVIRONMENT FLAGS
XPCB_IMS_ENH_SUPPORT EQU X'80' RRS SUPPORT IS AVAILABLE IN SYSTEM
XPCB_IMS_RRS_ENABLED EQU X'40' RRS=Y WAS SPECIFIED
XPCB_CALL_AT_COMMIT EQU X'20' SET BY EXIT - CALL DURING COMMIT
XPCB_LOGX_FORMAT EQU X'10' REDUCED 9904 FORMAT
XPCB_EXIT_WAS_CALLED EQU X'08' INTERNAL FLAG USED BY IMS
XPCB_DPROP_EXIT EQU X'04' SET BY DPROP EXIT ROUTINE
DS X RESERVED
XPCB_CONC_KEY_LENGTH DS H LENGTH OF CONCATENATED KEY
XPCB_CONC_KEY_PTR DS A ADDRESS OF CONCATENATED KEY
XPCB_DATA_XSDB_PTR DS A ADDRESS OF XSDB FOR DATA
XPCB_BEFORE_XSDB_PTR DS A ADDRESS OF XSDB FOR REPL DATA
XPCB_PATH_XSDB_PTR DS A ADDRESS OF XSDB FOR PATH DATA
XPCB_SETS_ROLS_TOKEN DS F TOKEN FOR SETS-ROLS CALL
DS F RESERVED
DS F RESERVED
XPCB_EXIT_WORK_PTR DS A ADDRESS OF WORK AREA
XPCB_ZERO_POINTER DS A ZERO ADDRESS
DS F RESERVED
XPCB_TIMESTAMP DS CL8 TIMESTAMP OF CALL
EJECTCOBOL
The following code sample is an example of the XPCB in COBOL.
01 XPCB.
05 EYECATCHER PIC X(04).
05 VERSION PIC X(02).
05 RELEASE-ID PIC X(02).
05 EXIT-NAME PIC X(08).
05 EXIT-RETURN-CODE PIC 9(04) COMP.
05 EXIT-REASON-CODE PIC 9(04) COMP.
05 DATABASE-NAME PIC X(08).
05 DBD-VERSION-PTR POINTER.
05 SEGMENT-NAME PIC X(08).
05 CALL-FUNCTION PIC X(04).
05 PHYSICAL-FUNCTION PIC X(04).
05 FILLER PIC 9(08) COMP.
05 DB-PCB-PTR POINTER.
05 DB-PCB-NAME PIC X(08).
05 INQY-OUTPUT-PTR POINTER.
05 IO-PCB-PTR POINTER.
05 ENVIRONMENT-FLAGS PIC X.
88 IMS-ENH-SUPPORT VALUE X'80'.
* RRS SUPPORT IS AVAILABLE IN SYSTEM
88 IMS-RRS-ENABLED VALUE X'40'.
* RRS=Y WAS SPECIFIED
88 CALL_AT_COMMIT VALUE X'20'.
* SET BY EXIT - CALL DURING COMMIT
88 XPCB_LOGX_FORMAT VALUE X'10'.
* REDUCED 9904 FORMAT
88 XPCB_EXIT_WAS_CALLED VALUE X'08'.
* INTERNAL FLAG USED BY IMS
88 XPCB_DPROP_EXIT VALUE X'04'.
* SET BY DPROP EXIT ROUTINE
05 FILLER PIC X.
* RESERVED
05 CONC-KEY-LENGTH PIC 9(04) COMP.
05 CONC-KEY-PTR POINTER.
05 DATA-XSDB-PTR POINTER.
05 BEFORE-XSDB-PTR POINTER.
05 PATH-XSDB-PTR POINTER.
05 FILLER POINTER.
05 FILLER POINTER.
05 FILLER POINTER.
05 EXIT-WORK-PTR POINTER.
05 NULL-PTR POINTER.
05 FILLER POINTER.
05 TIMESTAMP PIC X(08). PL/I
The following sample is an example of the XPCB in PL/I.
DECLARE
1 XPCB BASED(XPCB_PTR),
3 EYECATCHER CHAR(4), /* "XPCB" EYECATCHER */
3 VERSION CHAR(2), /* XPCB VERSION INDICATOR */
3 RELEASE CHAR(2), /* XPCB RELEASE INDICATOR */
3 EXIT_NAME CHAR(8), /* SEGMENT EXIT NAME */
3 EXIT_RETURN_CODE FIXED BINARY (15), /* RETURN CODE */
3 EXIT_REASON_CODE FIXED BINARY (15), /* REASON CODE */
3 ATABASE_NAME CHAR(8), /* PHYSICAL DATA BASE NAME */
3 DBD_VERSION_PTR POINTER, /* ADDRESS OF DBD VERSION ID */
3 SEGMENT_NAME CHAR(8), /* PHYSICAL SEGMENT NAME */
3 CALL_FUNCTION CHAR(4), /* CALL FUNCTION */
3 PHYSICAL_FUNCTION CHAR(4), /* DL/I PHYSICAL FUNCTION */
3 FILLER1 FIXED BINARY (31), /* RESERVED */
3 DB_PCB_PTR POINTER, /* ADDRESS OF DB PCB */
3 DB_PCB_NAME CHAR(8), /* NAME OF DB PCB */
3 INQY_OUTPUT_PTR POINTER, /* ADDRESS OF "INQY" OUTPUT */
3 IO_PCB_PTR POINTER, /* ADDRESS OF I/O PCB */
3 ENVIRONMENT-FLAGS CHAR(1), /* Environment Flags */
/* IMS-ENH-SUPPORT X'80' RRS SUPPORT AVAILABLE IN SYSTEM */
/* IMS-RRS-ENABLED X'40' RRS=Y WAS SPECIFIED */
/* CALL_AT_COMMIT X'20' SET BY EXIT-CALL DURING COMMIT */
/* XPCB_LOGX_FORMAT X'10' REDUCED 9904 FORMAT */
/* XPCB_EXIT_WAS_CALLED X'08' INTERNAL FLAG USED BY IMS */
/* XPCB_DPROP_EXIT X'04' SET BY DPROP EXIT ROUTINE */
3 NEWFILLER CHAR(1), /* Reserved */
3 CONC_KEY_LENGTH FIXED BINARY (15), /* LENGTH OF FULLY */
/* CONCATENATED KEY FOR SEGM */
3 CONC_KEY_PTR POINTER, /* ADDRESS OF PHYSICAL FULLY */
/* CONCATENATED KEY FOR SEGM */
3 DATA_XSDB_PTR POINTER, /* ADDRESS OF XSDB FOR */
/* PHYSICAL SEGMENT DATA */
3 BEFORE_XSDB_PTR POINTER, /* ADDRESS OF XSDB FOR */
/* PHYSICAL BEFORE DATA */
3 PATH_XSDB_PTR POINTER, /* ADDRESS OF XSDB FOR */
/* PHYSICAL PATH DATA */
3 FILLER3 POINTER, /* RESERVED */
3 FILLER4 POINTER, /* RESERVED */
3 FILLER5 POINTER, /* RESERVED */
3 EXIT_WORK_PTR POINTER, /* ADDRESS OF 256 BYTE AREA */
/* FOR THE EXIT */
3 NULL_PTR POINTER, /* NULL POINTER VALUE */
3 FILLER6 POINTER, /* RESERVED */
3 CALL_TIMESTAMP CHAR(8), /* TIMESTAMP OF CALL */
3 FILLER7 POINTER; /* RESERVED FOR NULLS AT END */
DECLARE XPCB_PTR POINTER;