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 }