# EXIT

> [HTML Version](exit.htm)

__

A-Shell provides several different EXIT statements as described below.



EXIT

The EXIT statement may be used within a control structure ([FOR...NEXT](for_next_ctrl_struct.md), [DO/WHILE/UNTIL](dowhileuntil.md), [SWITCH](switch_ctrl_struct.md), [FOREACH](foreach.md)) to exit the structure, proceeding to the next statement following the end of the structure. For example: 

DO WHILE A < B

    ...

    IF TIME > 82800 EXIT    \! exit loop after 11 PM

    ...

LOOP



EXITPROGRAM

The EXITPROGRAM statement causes an exit directly from a function or procedure, regardless of how nested, to a special label \$EXITPROGRAM in the main program, or to the END if the \$EXITPROGRAM label doesn't exist. Although this is effectively an unstructured GOTO, it handles the stack cleanup and provides an solution to the problem of how percolate the desire for a program exit up from a nested function to the top level.

The EXITPROGRAM token can also be used in a RESUME statement in place of EXITFUNCTION, EXITPROCEDURE, or \$EXIT...

RESUME EXITPROGRAM \{WITH\_ERROR \{N\}\}

RESUME \$EXITPROGRAM \{WITH\_ERROR \{N\}\}   \! (equivalent)



EXITFUNCTION

EXITFUNCTION is used exclusively within functions to exit the routine and return to the caller.  Note however that if the function contains an \$EXIT label, then EXITFUNCTION becomes equivalent to GOTO \$EXIT, allowing for some final cleanup code to be executed and even opening the possibility of canceling the exit and jumping to some other place within the current function.

**See Also **

•	EXITPROCEDURE



_Written February 2024_

EXITPROCEDURE

EXITPROCEDURE is used exclusively within procedures to exit the procedure and return to the caller.  Note however that if the procedure contains an \$EXIT label, then EXITPROCEDURE becomes equivalent to GOTO \$EXIT, allowing for some final cleanup code to be executed and even opening the possibility of canceling the exit and jumping to some other place within the current procedure.

**See Also **

•	EXITFUNCTION