Added SET ON, SET NOON, ON, GOTO and RETURN command support
The ControlFlow changes fix a potential bug in breakpoint handling
which arguably merely could be “not supported”. That bug is that if
a breakpoint’s actions have multiple actions AND an action early in
the list invokes a do command file, the subsequent pending breakpoint
actions are not performed.
The ControlFlow patch/changes implement the following extensions to
the SCP command language without affecting prior behavior:
GOTO <Label> Command is now available. Labels are lines in which the first non whitespace character is a “:”. The target of a goto is the first matching label in the current do command file which is encountered. Since labels don’t do anything else besides being the targets of goto’s, they could be used to provide comments in do command files, for example (“:: This is a comment”)
SET ON Enables error trapping for currently defined traps (by ON commands)
SET NOON Disables error trapping for currently defined traps (by ON commands)
RETURN Return from the current do command file execution with the status from the last executed command
RETURN <statusvalue> Return from the current do command file execution with the indicated status. Status can be a number or a SCPE_<conditionname> name string.
ON <statusvalue> commandtoprocess{; additionalcommandtoprocess}
Sets the action(s) to take when the specific error status is returned by a command in the currently running do command file. Multiple actions can be specified with each delimited by a semicolon character (just like breakpoint action commands).
ON ERROR commandtoprocess{; additionalcommandtoprocess}
Sets the default action(s) to take when any otherwise unspecified error status is returned by a command in the currently running do command file. Multiple actions can be specified with each delimited by a semicolon character (just like breakpoint action commands).
ON <statusvalue>
ON ERROR Clears the default actions to take when any otherwise unspecified error status is returned by a command in the currently running do command file.
Error traps can be taken for any command which returns a status other
than SCPE_STEP, SCPE_OK, and SCPE_EXIT.
ON Traps can specify any status value from the following list:
NXM, UNATT, IOERR, CSUM, FMT, NOATT, OPENERR, MEM, ARG, STEP,
UNK, RO, INCOMP, STOP, TTIERR, TTOERR, EOF, REL, NOPARAM, ALATT,
TIMER, SIGERR, TTYERR, SUB, NOFNC, UDIS, NORO, INVSW, MISVAL,
2FARG, 2MARG, NXDEV, NXUN, NXREG, NXPAR, NEST, IERR, MTRLNT,
LOST, TTMO, STALL, AFAIL.
These values can be indicated by name or by their internal numeric
value (not recommended).
Interactions with ASSERT command and “DO –e”:
DO –e is equivalent to SET ON, which by itself it equivalent
to “SET ON; ON ERROR RETURN”.
ASSERT failure have several different actions:
If error trapping is not enabled then AFAIL causes exit from the current
do command file.
If error trapping is enabled and an explicit “ON AFAIL” action is defined,
then the specified action is performed.
If error trapping is enabled and no “ON AFAIL” action is defined, then
an AFAIL causes exit from the current do command file.
Other related changes/extensions:
• The “!” command (execute a command on the local OS), now returns
the command’s exit status as the status from the “!” command.
This allows ON conditions to handle error status responses from
OS commands and act as desired.
• Argument substitution has been extended for do command file
execution. The extended argument substitution include
substitution of any program environment variable (referenced by
%ENVVARNAME%) along with dynamic expansion of several pseudo
environment variables:
%DATE% expands to a string of the form: yyyy/mm/dd (i.e. 2011/01/23)
%TIME% expands to a string of the form: hh:mm:ss (i.e. 17:23:44)
%CTIME% expands to a string of the form: www mmm dd hh:mm:ss yyyy
(i.e. Mon Jan 24 08:22:33 2010)
%ENVNAME% expands to a string which has the value of the environment
variable ENVNAME
4 files changed