Q(uick)BASIC Statement: ERR
Quick View
ERR
Sets ERR to a specific value
Worth knowing
Useful and cross-version information about the programming environments of QBasic and QuickBasic.
Syntax
- ERR = n%
Description/Parameter(s)
Usage Notes
- When running an application program, BASIC uses ERR to record whether or not a run-time error has occurred and what the error was. When the program starts running, ERR is 0; when and if a run-time error occurs, BASIC sets ERR to the error code for that error.
- You may want to use the ERR statement to set ERR to a non-zero value to communicate error information between procedures. For example, you might use one of the run-time codes not used by BASIC as an application-specific error code. See Table 4.1, Run-Time Error Codes, in the BASIC Language Reference, for a list of the run-time error codes that BASIC uses; they are a subset of the integers between 1 AND 255, inclusive.
- Besides the ERR statement, the following BASIC statements set ERR whenever they execute:
- Any form of the RESUME statement sets ERR to 0.
- EXIT SUB, EXIT FUNCTION, or EXIT DEF set ERR to 0 if executed within a procedure-level error handler.
- All uses of the ON ERROR or ON LOCAL ERROR statements syntax set ERR to 0.
- The ERROR statement can be used to set ERR to any value as part of simulating any run-time error.
Example
The program uses the ON ERROR statement to enable error trapping. The program attempts to write a large file to the disk. If an error occurs, control is passed to a handling routine, and the ERR function is used to determine an appropriate message to display. The ERROR, ERR, and RESUME statements are used to exit the handling routines, and the END, STOP, and SYSTEM statements demonstrate ways to exit a program.
DECLARE SUB ErrorMessage (Message$)
DECLARE SUB WriteBigFile (Filenum%)
ON ERROR GOTO ErrHandler
CLS
PRINT "This program will attempt to write a large file to a disk drive"
PRINT "you select. The file will be erased when the program ends."
PRINT
DO
INPUT "Which drive"; DR$
DR$ = UCASE$(DR$)
LOOP UNTIL LEN(DR$) >= 1 AND LEN(DR$) <= 2 AND DR$ >= "A" AND DR$ <= "Z"
IF LEN(DR$) > 1 THEN
IF RIGHT$(DR$, 1) <> ":" THEN
DR$ = LEFT$(DR$, 1) + ":"
END IF
ELSE
DR$ = DR$ + ":"
END IF
'Put together a complete file specification.
FileSpec$ = DR$ + "BIGFILE.XXX"
'Get the next available file number.
Filenum% = FREEFILE
'Try to open the file.
OPEN FileSpec$ FOR OUTPUT AS Filenum%
WriteBigFile Filenum%
CLOSE Filenum%
CLS
PRINT "Everything was OK. No errors occurred."
PRINT "Deleting the file that was created."
KILL FileSpec$
'Same as END, returns to operating system.
SYSTEM
ErrHandler:
SELECT CASE ERR
CASE 52 'Bad file name or number.
END
CASE 53 'File not found.
RESUME NEXT
CASE 57 'Device I/O error.
ErrorMessage "You should probably format the diskette."
END
CASE 64 'Bad File Name.
ErrorMessage "The drive name you specified was not correct."
END
CASE 68 'Device unavailable.
ErrorMessage "The drive you named is unavailable."
END
CASE 71 'Drive not ready.
ErrorMessage "The drive was not ready. Check the drive!"
END
CASE ELSE
ErrorMessage "An unexpected FATAL error has occurred."
STOP
END SELECT
SUB ErrorMessage (Message$)
ON LOCAL ERROR GOTO MessageError
CLS
PRINT Message$
PRINT "Cannot continue."
PRINT
PRINT "Press any key to exit."
DO
LOOP WHILE INKEY$ = ""
EXIT SUB
MessageError:
RESUME NEXT
END SUB
SUB WriteBigFile (Filenum%)
ON LOCAL ERROR GOTO LocalHandler
TEXT$ = STRING$(1024, "A")
FOR I% = 1 TO 400
PRINT #Filenum%, TEXT$
NEXT I%
EXIT SUB
LocalHandler:
SELECT CASE ERR
CASE 61 'Disk full.
ErrorMessage ("There is no room remaining on the disk.")
KILL "BIGFILE.XXX"
END
CASE ELSE
ERROR ERR
END SELECT
END SUB