4.2.1 Information Regarding Conditions (data structures)

There are mainly five conceptual data structures involved in
conditions.

[Event queue.]
     There is one interpreter-wide queue of pending conditions.
     Raising a condition is identical to adding information about
     the condition to this queue (FIFO).  The order of the queue
     is the same order in which the conditions are to be handled.

     Every entry in the queue of pending conditions contains some
     information about the event: the line number of the REXX
     script when the condition was raised, a descriptive text and
     the condition type.

[Default-Action.]
     To each, there exists information about the default-action to
     take if this condition is raised but the trap is in state
     OFF.  This is called the “default-action”. The standard
     default-action is to ignore the condition, while some
     conditions may abort the execution.

[Delay-Action.]
     Each condition will also have delay-action, which tells what
     to do if the condition is raised when condition trap is in
     state DELAY. The standard delay-action is to queue the
     condition in the queue of pending conditions, while some
     conditions may ignore it.

[Condition traps.]
     For each condition there is a trap which contains three
     pieces of status information: the state; the handler; and the
     method. The state can be ON, OFF or DELAY.

     The handler names the REXX label in the start of the REXX
     code to handle the event. The method can be either SIGNAL or
     CALL, and denotes the method in which the condition is to be
     handled. If the state is OFF, then neither handler nor method
     is defined.

[Current Trapped Condition.]
     This is the most recently handled condition, and is set
     whenever a trap is triggered. It contains information about
     method, which condition, and a context-dependent description.
     In fact, the information in the current trapped condition is
     the same information that was originally put into the pending
     event queue.

Note that the event queue is a data structure connected to the
interpreter itself. You operate on the same event queue,
independent of subroutines, even external ones. On the other hand,
the condition traps and the current trapped condition are data
structures connected to each single routine. When a new routine is
called, it will get its own condition traps and a current trapped
condition. For internal routines, the initial values will be the
same values as those of the caller. For external routines, the
values are the defaults.

The initial value for the event queue is to be empty.  The default-
action and the delay-action are static information, and will
always retain their values during execution. The initial values
for the condition traps are that they are all in state OFF. The
initial value for the current trapped condition is that all
information is set to the nullstring to signalize that no
condition is currently being trapped.



PREV NEXT