[fpc-pascal]error messages

Adam Naumowicz adamn at math.uwb.edu.pl
Tue Sep 19 14:39:34 CEST 2000


On Tue, 19 Sep 2000, Sidney Cave wrote:

> Thanks to Adam Naumowicz for the hint on using
> ExitProc for generating descriptive error messages. I
> gave that a try and it seems to work fine. This was my
> first attempt at writing a unit, and some of this was
> by trial and error. If anyone who is interested would
> please let me know if I did anything wrong, I would
> appreciate it.
> 
> Also, is there a procedure for forcing a program to
> generate an error of a given type? I took a look at
> the docs and could not find anything. It may be there,
> but I just don't know what it is called to even to run
> a search. I would hesitate to call this little project
> done until I could test it by forcing all of the
> various errors. As it stands, I only checked two or
> three.
> 
> Sid Cave
> ======================================
> unit ErrorMsg;
> interface
> implementation
> var
>   OldExitProc:pointer;
> 
> procedure ErrorMessage;
> begin
>   if ErrorAddr <> nil then
>     begin
>       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');
>         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 ('Bad drive request struct
> length.');
>         152: writeln ('Drive not ready.');
>         154: writeln ('CRC error in data.');
>         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.');
>         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.');
>         216: writeln ('General protection fault.');
>         217: writeln ('Unhandled exception
> occurred.');
>         227: writeln ('Assertion failed error.');
>         else writeln ('Unknown error.');
>       end;
>     end;
>   Exitproc:=OldExitProc;
> end;
> 
> begin
>   OldExitProc:=ExitProc;
>   ExitProc:=@ErrorMessage;
> end.
> ===================================
> 
> 
> =====
> Sid Cave
> mailto:zcave at yahoo.com

I don't know if in this situation it is really importent or being just a
programming prejudice (at least old good TP help says so), that the first
statement in your exit procedure should reinstall the saved one. So maybe
you should place your ExitProc:=OldExitProc at the beginning of
ErrorMessage.
If you want to test your program just try calling RunError with all error
codes.

Adam Naumowicz

--------------------------------------
WWW: http://math.uwb.edu.pl/~adamn/
--------------------------------------





More information about the fpc-pascal mailing list