$ZQUIT indicates whether the functionality associated with the gtm_zquit_anyway environment variable is enabled. If the environment variable gtm_zquit_anyway is defined and evaluates to 1 or any case-independent string or leading substrings of "TRUE" or "YES", GT.M sets $ZQUIT to 1 and executes code of the form QUIT <expr< as if it were SET <tmp>=<expr> QUIT:$QUIT tmp QUIT, where <tmp> is a temporary local variable in the GT.M runtime system that is not visible to the application code. The value of $ZQUIT is a compile time setting, that is it can be set during run-time but it has no effect on the behavior existing object code - it only effects code generated by auto-ZLINK or the ZCOMPILE command. This setting has no effect on late bound code such as that in XECUTE arguments, $ETRAP, $ZTRAP device EXCEPTIONS.

If gtm_zquit_anyway is not defined or evaluates to 0 or any case-independent string or leading substrings of "FALSE" or "NO", GT.M set $ZQUIT to 0 executes QUIT <expr> as specified by the standard. This feature is helpful when you want to run a block of code both as a routine and as an extrinsic function. Consider the following example:

GTM>zprint ^rtnasfunc
rtnasfunc(expr1)
  write "Hello ",expr1,!
  quit

When the gtm_zquit_anyway functionality is diabled, extrinsic function invocations return an error as per the standard.

GTM>write $zquit
0
GTM>write $$^rtnasfunc("jdoe")
Hello jdoe
  %GTM-E-QUITARGREQD, Quit from an extrinsic must have an argument

However, if you enable the gtm_zquit_anyway feature, extrinsic function invocations do not return an error.

GTM>write $zquit
1
GTM>write $$^rtnasfunc("jdoe")
Hello jdoe
GTM>
loading table of contents...