The following example shows the user-written condition handler
registered by EXCOND to handle the divide-by-zero condition. When
the divide-by-zero condition arises, USRHDLR calls CEEMRCR with a
0
type of move. Doing so moves the resume
cursor to the point in EXCOND after the call to DIVZERO.
CBL LIB,QUOTE
*Module/File Name: IGZTDIVU
******************************************************
* *
* USRHDLR *
* *
******************************************************
IDENTIFICATION DIVISION.
PROGRAM-ID. USRHDLR.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 MISC-VARIABLES.
02 MOVE-TYPE-0 PIC S9(9) BINARY VALUE ZERO.
02 MOVE-TYPE-1 PIC S9(9) BINARY VALUE 1.
01 FEEDBACK.
02 FB-SEVERITY PIC 9(4) BINARY.
02 FB-DETAIL PIC X(10).
*
LINKAGE SECTION.
******************************************************
* *
* Note: the symbolic names of the condition tokens *
* for S/370 program interrupt codes 0C1 thru 0CF *
* are CEE341 through CEE34F *
* *
******************************************************
01 TOKEN PIC X(4).
01 RESULT-CODE PIC S9(9) BINARY.
88 RESUME VALUE +10.
88 PERCOLATE VALUE +20.
88 PERC-SF VALUE +21.
88 PROMOTE VALUE +30.
88 PROMOTE-SF VALUE +31.
01 CURRENT-CONDITION.
02 Condition-Token-Value.
COPY CEEIGZCT.
03 Case-1-Condition-ID.
04 Severity PIC S9(4) BINARY.
04 Msg-No PIC S9(4) BINARY.
03 Case-2-Condition-ID
REDEFINES Case-1-Condition-ID.
04 Class-Code PIC S9(4) BINARY.
04 Cause-Code PIC S9(4) BINARY.
03 Case-Sev-Ctl PIC X.
03 Facility-ID PIC XXX.
02 I-S-Info PIC S9(9) BINARY.
01 NEW-CONDITION.
02 Condition-Token-Value.
COPY CEEIGZCT.
03 Case-1-Condition-ID.
04 Severity PIC S9(4) BINARY.
04 Msg-No PIC S9(4) BINARY.
03 Case-2-Condition-ID
REDEFINES Case-1-Condition-ID.
04 Class-Code PIC S9(4) BINARY.
04 Cause-Code PIC S9(4) BINARY.
03 Case-Sev-Ctl PIC X.
03 Facility-ID PIC XXX.
02 I-S-Info PIC S9(9) BINARY.
PROCEDURE DIVISION USING CURRENT-CONDITION TOKEN
RESULT-CODE NEW-CONDITION.
DISPLAY ">>> USRHDLR: Entered User Condition Handler ".
IF CEE349 of CURRENT-CONDITION THEN
**********************************************************
* Expected condition, divide by zero, occurred... *
* move resume cursor to stack frame which registered *
* the handler, and resume execution at that point. *
**********************************************************
CALL "CEEMRCR" USING MOVE-TYPE-0 FEEDBACK
SET RESUME TO TRUE
DISPLAY ">>> USRHDLR: Resuming execution"
ELSE
**********************************************************
* UNexpected condition encountered.. percolate it!*
**********************************************************
SET PERCOLATE TO TRUE
DISPLAY ">>> USRHDLR: Percolating it"
END-IF.
GOBACK.
END PROGRAM USRHDLR.