Category : Pascal Source Code
Archive   : TOOL-USE.ZIP
Filename : ERRTRAP.PAS

 
Output of file : ERRTRAP.PAS contained in archive : TOOL-USE.ZIP

(*
* Copyright 1987, 1989 Samuel H. Smith; All rights reserved
*
* This is a component of the ProDoor System.
* Do not distribute modified versions without my permission.
* Do not remove or alter this notice or any other copyright notice.
* If you use this in your own program you must distribute source code.
* Do not use any of this in a commercial product.
*
*)

(*
* Runtime error handler - traps and reports runtime errors
* with full messages. (3-1-89)
*
*)

unit ErrTrap;

{$F+,R-,S-}

interface

var
ExitSave: pointer; {pointer to next exitproc in the chain}

procedure error_handler;
function itoh(w: word): string;
function error_message(code: integer): string;


implementation

function error_message(code: integer): string;
{return message text for a given runtime error code}
var
class: string;
msg: string;
begin
case code of
1.. 99: class := 'DOS';
100..149: class := 'I/O';
150..199: class := 'CRITICAL';
200..249: class := 'FATAL';
else class := 'UNKNOWN';
end;

case code of
2: msg := 'File not found';
3: msg := 'Path not found';
4: msg := 'Too many open files';
5: msg := 'File access denied';
6: msg := 'Bad file handle';
12: msg := 'Bad file access code';
15: msg := 'Bad drive number';
16: msg := 'Can''t remove current dir';
17: msg := 'Can''t rename across drives';

100: msg := 'Disk read error';
101: msg := 'Disk write error';
102: msg := 'File not assigned';
103: msg := 'File not open';
104: msg := 'File not open for input';
105: msg := 'File not open for output';
106: msg := 'Bad numeric format';

150: msg := 'Disk is write-protected';
151: msg := 'Unknown diskette unit';
152: msg := 'Drive not ready';
153: msg := 'Unknown command';
154: msg := 'CRC error in data';
155: msg := 'Bad drive request structure length';
156: msg := 'Disk seek error';
157: msg := 'Unknown diskette type';
158: msg := 'Sector not found';
159: msg := 'Printer out of paper';
160: msg := 'Device write fault';
161: msg := 'Device read fault';
162: msg := 'Hardware failure';

200: msg := 'Division by zero';
201: msg := 'Range check';
202: msg := 'Stack overflow';
203: msg := 'Heap overflow';
204: msg := 'Bad pointer operation';
205: msg := 'Floating point overflow';
206: msg := 'Floating point underflow';
207: msg := 'Bad floating point operation';

else str(code,msg);
end;

error_message := class + ' ERROR: ' + msg;
end;


function itoh(w: word): string;
{hex conversion}
const
hex: array[0..15] of char = '0123456789ABCDEF';

var
h: string[4];
begin
h[0] := chr(4);
h[1] := hex[(w shr 12) and $0F];
h[2] := hex[(w shr 8) and $0F];
h[3] := hex[(w shr 4) and $0F];
h[4] := hex[w and $0F];
itoh := h;
end;


procedure error_handler;
{exit handler, checks for I/O and runtime errors}
begin
{link to the next exitproc when this one's finished}
ExitProc := ExitSave;

{all finished unless there is an error}
if ErrorAddr = nil then
exit;

{generate error message text and clear the error condition}
writeln(^G);
writeln('±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±');
writeln('±±±±± Runtime error ',ExitCode:3,' at location ',
itoh(seg(ErrorAddr^)),':',itoh(ofs(ErrorAddr^)), ' ±±±±±');
writeln('±±±±±':60,^M'±±±±± ',error_message(ExitCode));
writeln('±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±');
ErrorAddr := nil;
end;


(* install new runtime error handler *)
begin
ExitSave := ExitProc; {save link to next handler in chain}
ExitProc := @error_handler; {link in my handler}
end.



  3 Responses to “Category : Pascal Source Code
Archive   : TOOL-USE.ZIP
Filename : ERRTRAP.PAS

  1. Very nice! Thank you for this wonderful archive. I wonder why I found it only now. Long live the BBS file archives!

  2. This is so awesome! 😀 I’d be cool if you could download an entire archive of this at once, though.

  3. But one thing that puzzles me is the “mtswslnkmcjklsdlsbdmMICROSOFT” string. There is an article about it here. It is definitely worth a read: http://www.os2museum.com/wp/mtswslnk/