* ============================================================= * Abruptly end the program if an unexpected condition arises. * ============================================================ * Published 4-21-2004 in Four Hundred Guru * ============================================================= * Parameters: * 1: Any condition that is assumed to be true. * 2: Text for an escape message that will be sent if * the condition is false. * ============================================================= * To use, compile this as a module and bind it into programs. * ============================================================= H nomain D/copy prototypes,assert P Assert B export D Assert PI D Condition N Value D Message 80A Value options(*nopass) D DefaultMsg c const('Assertion failed') D wrkMessage s 80A varying D wrkMessageLen s 10i 0 D SendEscMsg PR ExtPgm('QMHSNDPM') D MsgID 7 Const D MsgFile 20 Const D MsgDta 80 Const D MsgDtaLen 10I 0 Const D MsgType 10 Const D MsgQ 10 Const D MsgQNbr 10I 0 Const D MsgKey 4 D ErrorDS 16 D ErrorDS DS 16 D BytesProv 10I 0 inz(16) D BytesAvail 10I 0 D ExceptionID 7 D MsgDta S 80 D MsgKey S 4 /FREE IF (not Condition); if %parms() >= 2; wrkMessage = %trim(Message); // If the last character of message is a period, remove // it, because CPF9898 will add a period to the end. wrkMessageLen = %len(wrkMessage); if %subst(wrkMessage: wrkMessageLen: 1) = '.'; if wrkMessageLen = 1; clear wrkMessage; else; wrkMessage = %subst(wrkMessage: 1: wrkMessageLen-1); endif; endif; else; clear wrkMessage; endif; // Supply a default error message if necessary. if %len(wrkMessage) <= *zero; wrkMessage = DefaultMsg; endif; SendEscMsg ('CPF9898': 'QCPFMSG QSYS': wrkMessage: %len(wrkMessage): '*ESCAPE': '*PGMBDY': 1: MsgKey: ErrorDS); ENDIF; RETURN; /END-FREE P Assert E