Normally, whenever you use a function (or anything else which may return an error code), you will need to assign the result of the function (or whatever else) to a variable and then test that variable in order to see whether or not an error has been generated.
If an error has been generated, you will then need to report the error (if you do not intend to take any action to try and rectify the situation), something which can take a lot of program space, if you intend to write a program which does not require the command REPort to be present.
The command ERT was introduced in the Hotkey System II to enable you to write programs which test the result for an error code and report the error all in one step.
A simple program which provides its own error trapping:
100 PAPER 0:INK 7 110 REPeat loop 120 CLS 130 AT 0,0:PRINT 'Enter an integer (0 to 300): '; 140 xerr=GET_INT 150 IF xerr<0:PRINT 'Error - try again':ELSE x=xerr:EXIT loop 160 PAUSE 170 END REPeat loop 180 PRINT 'The integer was : ';x 185 : 190 DEFine FuNction GET_INT 200 valid$='0123456789' 210 INPUT a$:IF a$='':RETurn -1 220 FOR i=1 TO LEN(a$):IF a$(i) INSTR valid$=0:RETurn -17 230 IF a$>300:RETurn -4 240 RETurn a$ 250 END DEFine
A similar program which is designed to stop on an error:
100 PAPER 0:INK 7 110 CLS 120 AT 0,0:PRINT 'Enter an integer (0 to 300): '; 130 xerr=GET_INT 140 IF xerr<0:REPORT xerr:STOP:ELSE x=xerr 150 PRINT 'The integer was : ';x 155 : 160 DEFine FuNction GET_INT 170 valid$='0123456789' 180 INPUT a$:IF a$='':RETurn -1 190 FOR i=1 TO LEN(a$):IF a$(i) INSTR valid$=0:RETurn -17 200 IF a$>300:RETurn -4 210 RETurn a$ 220 END DEFine
The same program as in the second example, but using ERT:
100 PAPER 0:INK 7 110 CLS 120 AT 0,0:PRINT 'Enter an integer (0 to 300): '; 130 ERT GET_INT 140 PRINT 'The integer was : ';x 150 DEFine FuNction GET_INT 160 valid$='0123456789' 170 INPUT a$:IF a$='':RETurn -1 180 FOR i=1 TO LEN(a$):IF a$(i) INSTR valid$=0:RETurn -17 190 IF a$>300:RETurn -4 200 x=a$ 210 RETurn x 220 END DEFine
When you are using ERT, always beware of what you are testing for an error, for example, if you had altered line 130 in the second example to:
130 ERT x=GET_INT
you would not actually be testing to see whether the function GET_INT returned an error, but whether the line x=GET_INT produced an error - x itself would not be altered, hence the need to assign the result to x inside the function.
REPORT will report an error without stopping the program.