EXITE

Exit the routine with a specific error

WSupported on Windows
USupported on Unix
VSupported on OpenVMS
NSupported in Synergy .NET
xcall EXITE(error[, trap_flag])

Arguments

error

The mnemonic or literal of the Synergy DBL error to generate. (n)

trap_flag

(optional) Specifies whether or not the error is trappable, as follows: (n)

0 = Error is not trappable.

1 = Error is trappable. (default)

Discussion

The EXITE subroutine enables you to exit the current external subroutine or function with the specified Synergy DBL error. It also enables you to specify whether that error can be trapped.

If the value of trap_flag is one, the error can be trapped. However, a call must be made to ONERROR prior to the function or subroutine call that contains the EXITE, or the error will not be trapped. If the value is zero, the error cannot be trapped. See the Synergy Errors tab for a complete list of errors.

To generate a nontrappable error, set trap_flag to 0.

In traditional Synergy, a call to EXITE always transfers control to a prior routine and cannot cause a program to stop with a fatal error. In Synergy .NET, any TRY/CATCH in the current or prior routine, or any ONERROR in any prior routine, will catch an exception from EXITE.

Examples

The following hypothetical program checks whether a system is valid. If the system is not valid, it generates a false Synergy DBL error (without disclosing the actual location of the check) so the user will call his or her developer to have “problem” fixed.

Program #1:

main 
proc 
    open(15, o, 'tt:') 
    xcall chk_sys 
    stop 
endmain
subroutine chk_sys 
record 
    serial, a80 
external function 
    security,           ^val 
proc 
    xcall serial(serial) 
    if (%security(serial) .eq. %FALSE) then 
      xcall exite($ERR_NOOPEN, 0) 
    return 
endsubroutine

Output:

%DBR-E-NOOPEN, Channel has not been opened

%DBR-I-ATLINE, At line 4 in routine check_system (check_system.dbl)

Program #2:

main 
proc 
    open(15, o, 'tt:') 
    onerror errlbl 
    xcall chk_sys 
    offerror 
    stop 
errlbl, 
    offerror 
    writes(15, "Security error") 
    stop
endmain
subroutine chk_sys 
record 
    serial, a80 
external function 
    security,           ^val 
proc 
    xcall serial(serial) 
    if (%security(serial) .eq. %FALSE) then 
      xcall exite($ERR_NOOPEN, 1) 
    return 
endsubroutine

Output:

Security error