6 Branching and Subroutines

Error Testing and Recovery

Run-time errors are those which occur when a program is running. Dividing by 0 is an example. These errors normally halt execution. Through use of the ON ERROR statement, run-time errors need not abort the program. Execution may continue with specified code following the execution of the line in which the error occurred. The ON ERROR statement causes a branch which takes place after any error.

* Parameters cannot be passed.

* Parameter can not be passed

The ON ERROR statement declares what should happen if an error occurs. It need be executed only once in each program segment to establish the ON ERROR condition. Execution of another ON ERROR statement cancels the previous one.

When a run-time error occurs and the ON ERROR condition has been established, execution is transferred to the specified line. Then the ERRN and ERRL functions discussed next can be tested, and either error recovery procedures or DISP ERRM$ can be executed. The error is ignored if the statement referenced by a GOSUB is a RETURN statement; execution continues with the line after the one in which the error occurred.

If the error-recovery routine itself contains an error, the program may possibly run in an endless loop. This can be stopped by pressing BREAK or CTRL Y.

If the ON ERROR statement specifies a GOSUB or CALL, computer priority is set at the highest level until the routine has been completed. The routine can be interrupted only by an ON END or another ON ERROR interrupt. (ON END is described in page 195 .) A routine accessed with GOTO can be interrupted because system priority is not changed.

The following string and numeric functions return information related to the last error trapped with ON ERROR:

ERRL
The error line function returns the line number in which the most recent program execution error occurred.
ERRN
The error number function returns the number of the most recent program execution error.
ERRM$
The error message string returns the most recent program execution error message.
ERRMSG$(ERRN)
The error message, which belongs to the error number, is read from the message catalog and will be displayed.
ON ERROR is disabled with the OFF ERROR statement:

OFF ERROR

The following program sequence shows how ON ERROR can be used to detect errors and display an appropriate message:

10 OPTION BASE 1
20 DIM A(50)
30 ON ERROR GOTO Recovery1
40 Print: INPUT "Enter file name:",F$
50        ASSIGN #1 TO "F$"
60        FOR R=1 TO 50
70        PRINT #1,R;A(R)
80        NEXT R
90        PRINT "DATA PRINTED ON FILE."
100       GOTO Read
110 Recovery1:    ! Check for errors 53 and 56.
120         IF ERRN=53 THEN E53
130         IF ERRN=56 THEN E56
140         GOTO Exit
150 E53:  PRINT PAGE;"IMPROPER FILE NAME - PRESS <RETURN> TO CONTINUE."
160       INPUT
170       GOTO Print
180 E56:  PRINT PAGE;"FILE NAME IS UNDEFINED - PRESS <RETURN> TO CONTINUE."
190       INPUT
200       GOTO Print
210 Exit: PRINT "ERRM$"   ! Print error number and line.
220       STOP
230 Read: ! Continue program.
 .
 .
 .
Line 30 activates an ON ERROR condition which will branch the program to the Recovery1 routine if an error occurs. The Print routine prints data elements of array A into sequential records of a data file. If any error occurs here, the program would branch to Recovery1, rather than print DATA PRINTED ON FILE and continue at the Read routine.

The Read routine begins by deactivating the first ON ERROR routine and activating a new one.

The Recovery1 routine checks for errors 53 and 56. The routine responds to errors 53 and 56 with a displayed message and then returns to the Print routine where the operator can correct the error.

Notice that if any error but 53 or 56 occurs while Recovery1 is active, the Exit routine first displays ERRM$, containing the error number and line, and then stops.


Eloquence Language Manual - 19 DEC 2002