Contributor: DAVID ADAMSON ÿ unit CustExit; (*-------------------------------------------------------------------------- Original source code by David Drzyzga, FidoNet 1:2619/209, SysOp of =>> CUTTER JOHN'S <<= (516) 234-1737 [HST/DS/v32bis/v32ter] Offered to the public domain 04-04-1994 ---------------------------------------------------------------------------*) interface implementation uses Crt; var ExitAddress : pointer; {$F+} procedure ErrorExit; {$F-} begin if ErrorAddr <> Nil then begin NormVideo; ClrScr; Writeln('Program terminated with error number ', ExitCode:3, '.'); case ExitCode of 1..18 : write( ^G + 'DOS ERROR: '); 100..106 : write( ^G + 'I/O ERROR: '); 150..162, 200..216 : write( ^G + 'CRITICAL ERROR: '); end; Case ExitCode of 1 : Writeln('Invalid function number.'); 2 : Writeln('File not found.'); 3 : Writeln('Path not found.'); 4 : Writeln('Too many open files.'); 5 : Writeln('File access denied.'); 6 : Writeln('Invalid file handle.'); 12 : Writeln('Invalid file access code.'); 15 : Writeln('Invalid drive number.'); 16 : Writeln('Cannot remove current directory.'); 17 : Writeln('Cannot rename across drives.'); 18 : Writeln('No More Files.'); 100 : Writeln('Disk read error.'); 101 : Writeln('Disk write error.'); 102 : Writeln('File not assigned.'); 103 : Writeln('File not open.'); 104 : Writeln('File not open for input.'); 105 : Writeln('File not open for output.'); 106 : Writeln('Invalid numeric format.'); 150 : Writeln('Disk is write-protected.'); 151 : Writeln('Unknown unit.'); 152 : Writeln('Drive not ready.'); 153 : Writeln('Unknown command.'); 154 : Writeln('CRC error in data.'); 155 : Writeln('Bad drive request structure length.'); 156 : Writeln('Disk seek error.'); 157 : Writeln('Unknown media type.'); 158 : Writeln('Sector not found.'); 159 : Writeln('Printer out of paper.'); 160 : Writeln('Device write fault.'); 161 : Writeln('Device read fault.'); 162 : Writeln('Hardware failure.'); 200 : Writeln('Division by zero.'); 201 : Writeln('Range check error.'); 202 : Writeln('Stack overflow error.'); 203 : Writeln('Heap overflow error.'); 204 : Writeln('Invalid pointer operation.'); 205 : Writeln('Floating point overflow.'); 206 : Writeln('Floating point underflow.'); 207 : Writeln('Invalid floating point operation.'); 208 : Writeln('Overlay manager not installed.'); 209 : Writeln('Overlay file read error.'); 210 : Writeln('Object not initialized.'); 211 : Writeln('Call to abstract method.'); 212 : Writeln('Stream registration error.'); 213 : Writeln('Collection index out of range.'); 214 : Writeln('Collection overflow error.'); 215 : Writeln('Arithmetic overflow error.'); 216 : Writeln('General Protection fault.'); else Writeln( ^G + 'Unknown Error.'); end; { Case } ErrorAddr := Nil; end; Exitproc := ExitAddress; { Restore original exit address } end; { ErrorExit } begin ExitAddress := ExitProc; { Save original exit address } ExitProc := @ErrorExit; { Install custom exit procedure } end. { Unit CustExit }