If the application has a toplevel, the function QP_action()
can
be called from C to alter Prolog's flow of control. This function
allows the user to make Prolog abort, exit, suspend execution, turn on
debugging, or prompt for the desired action. To use it, use
#include <quintus/quintus.h>
in your C source code. This file
should be installed in a central place; if not, there should be a
copy of it in the embed
directory (refer to int-dir
for location). quintus.h
defines the following constants:
QP_ABORT
QP_REALLY_ABORT
QP_STOP
QP_IGNORE
QP_EXIT
QP_MENU
QP_TRACE
QP_DEBUG
To change Prolog's control flow in a given instance, call
QP_action()
with one of these constants; for example,
#include <quintus/quintus.h> void abort_execution(){ QP_action(QP_ABORT); }
Some calls to QP_action()
do not normally return, for example when
the QP_ABORT
constant is specified. However, calls to QP_action()
from
an interrupt handler must be viewed as requests. They are requests that
will definitely be honored, but not always at the time of the call to
QP_action()
. Therefore calls to QP_action()
should be prepared
for the function to return.
It is currently not possible to call Prolog from an interrupt handler.
For systems that do not have a toplevel, the actions marked with an
asterisk will have no effect other than to make QP_action()
return
QP_ERROR
.
What does it mean to have a
toplevel? If the
application is calling the function QP_toplevel()
, then the
application has a toplevel. The development system and runtime
systems both call QP_toplevel()
. An exit from either of these
environments is effectively a return from QP_toplevel()
. An
embedded application may or may not call QP_toplevel()
. One of
the things QP_toplevel()
does is establish signal handlers.
Another thing it does is establish a place for QP_action()
to
jump to, the actions marked with an asterik are essentially a
jump to the toplevel, and will not work in systems without a
toplevel. For more about QP_toplevel()
, see
cfu-ref-toplevel.