DCL SPCPTR .EXCP-DESCR INIT(EXCP-DESCR); DCL DD EXCP-DESCR CHAR(96) BDRY(16); DCL DD EXCP-DESCR-PROV BIN(4) DEF(EXCP-DESCR) POS(1) INIT(96); DCL DD EXCP-DESCR-AVAIL BIN(4) DEF(EXCP-DESCR) POS(5); DCL DD EXCP-MAT CHAR(88) DEF(EXCP-DESCR) POS(9); DCL DD EXCP-MAT-CONTROL CHAR(2) DEF(EXCP-MAT) POS( 1); DCL DD EXCP-MAT-INSTR-NBR BIN(2) DEF(EXCP-MAT) POS( 3); DCL DD EXCP-MAT-CMPVAL-SIZE BIN(2) DEF(EXCP-MAT) POS( 5); DCL DD EXCP-MAT-CMPVAL CHAR(32) DEF(EXCP-MAT) POS( 7); DCL DD EXCP-MAT-NBR-OF-IDS BIN(2) DEF(EXCP-MAT) POS(39); DCL SYSPTR .EXCP-MAT-HND-PGM DEF(EXCP-MAT) POS(41); DCL DD EXCP-MAT-ID(16) CHAR(2) DEF(EXCP-MAT) POS(57); DCL EXCM DEC-ERROR EXCID(H'0C02', H'0C0A', H'0C0B') INT(ERROR) IMD CV("MCH"); DCL DD DATA CHAR(3); DCL DD NUMBER PKD(5,0) DEF(DATA) POS(1); MATEXCPD .EXCP-DESCR, DEC-ERROR, X'00'; BRK "1"; /* TO SHOW DESCRIPTION */ CPYBREP DATA, " "; /* MAKE INVALID PACKED NUMBER */ CALLI SHOW-DATA, *, .SHOW-DATA; ADDN(S) NUMBER, 1; /* FORCE 'DECIMAL DATA ERROR' */ CALLI SHOW-DATA, *, .SHOW-DATA; DIV(S) NUMBER, 0; /* FORCE 'ZERO DIVIDE ERROR' */ CALLI SHOW-DATA, *, .SHOW-DATA; ADDN(S) NUMBER, 1; /* FORCE 'NUMERIC SIZE ERROR' */ CALLI SHOW-DATA, *, .SHOW-DATA; SUBN(S) NUMBER, 1; /* NO ERRORS, RESULT = 99998 */ CALLI SHOW-DATA, *, .SHOW-DATA; CALLI SHOW-MESSAGE, *, .SHOW-MESSAGE; RTX *; DCL SPCPTR .EXCP-INFO INIT(EXCP-INFO); DCL DD EXCP-INFO CHAR(304) BDRY(16); DCL DD EXCP-INFO-PROV BIN(4) DEF(EXCP-INFO) POS( 1) INIT(304); DCL DD EXCP-INFO-AVAIL BIN(4) DEF(EXCP-INFO) POS( 5); DCL DD EXCP-INFO-ID CHAR(2) DEF(EXCP-INFO) POS( 9); DCL DD EXCP-INFO-CMP-SIZE BIN(2) DEF(EXCP-INFO) POS(11); DCL DD EXCP-INFO-CMPVAL CHAR(32) DEF(EXCP-INFO) POS(13); DCL DD EXCP-INFO-REFKEY BIN(4) DEF(EXCP-INFO) POS(45); DCL DD EXCP-DATA CHAR(256) DEF(EXCP-INFO) POS(49); DCL DD INVOCATION-PART BIN(2); DCL SPCPTR .EXCP-INVOC; DCL DD EXCP-INVOC CHAR(46) BAS(.EXCP-INVOC); DCL PTR .EXCP-SOURCE-INVOC DEF(EXCP-INVOC) POS( 1); DCL PTR .EXCP-TARGET-INVOC DEF(EXCP-INVOC) POS(17); DCL DD EXCP-SOURCE-INSTR BIN(2) DEF(EXCP-INVOC) POS(33); DCL DD EXCP-TARGET-INSTR BIN(2) DEF(EXCP-INVOC) POS(35); DCL DD EXCP-MACHINE-DATA CHAR(10) DEF(EXCP-INVOC) POS(37); ENTRY ERROR INT; RETEXCPD .EXCP-INFO, X'01'; /* RETRIEVE FOR INTERNAL ENTRY */ BRK "2"; /* TO SHOW INFORMATION */ CMPBLA(B) EXCP-INFO-ID, X'0C02'/NEQ(=+2); CPYNV(B) NUMBER, 00000/ZER(=+2);: /* DECIMAL ERROR */ CPYNV NUMBER, 99999;: /* RANGE ERROR */ SUBN INVOCATION-PART, EXCP-INFO-AVAIL, 46; ADDSPP .EXCP-INVOC, .EXCP-INFO, INVOCATION-PART; CPYBWP .EXCP-RTN-INVOC, .EXCP-SOURCE-INVOC; RTNEXCP .EXCP-RETURN; DCL SPCPTR .EXCP-RETURN INIT(EXCP-RETURN); DCL DD EXCP-RETURN CHAR(19) BDRY(16); DCL PTR .EXCP-RTN-INVOC DEF(EXCP-RETURN) POS( 1); DCL DD EXCP-MBZERO CHAR(1) DEF(EXCP-RETURN) POS(17) INIT(X'00'); DCL DD EXCP-ACTION CHAR(2) DEF(EXCP-RETURN) POS(18) INIT(X'0100'); DCL DD N AUTO BIN(2) INIT(1); DCL INSPTR .SHOW-DATA; ENTRY SHOW-DATA INT; CMPNV(B) N, 1/HI(=+2); CPYBREP MSG-TEXT, " ";: CVTHC MSG-TEXT(N:6), DATA; ADDN(S) N, 10; B .SHOW-DATA; %INCLUDE SHOWMSG