[<<Previous Entry]
[^^Up^^]
[Next Entry>>]
[Menu]
[About The Guide]
ERROR.INT
{ ---------------------------------------------------------------- }
{ Fehlerbehandlungs-Routinen }
{ ---------------------------------------------------------------- }
{ Allgemeing.ltige Vereinbarungen zur Fehlerbehandlung. }
{ Fehler werden .ber die globale Funktion "SetErr (Nr)" gesetzt; }
{ ClearErr l.scht den letzten Fehler wieder. .ber GetErr kann die }
{ letzte Fehlernummer, mit GetErrMsg (Nr) eine Kurzbeschreibung }
{ abgefragt werden. }
{ Mit SetErrHandler (Proc) kann eine Prozedur festgelegt werden, }
{ die bei jedem Fehler aufgerufen wird. Dazu werden drei Standard- }
{ Prozeduren (ErrDummy, ErrTextMode und ErrPrint) zur Verf.gung }
{ gestellt, wobei die letzten beiden nur in reinen DOS-Anwendungen }
{ (also ErrPrint nicht mit TPW bzw. ErrPrint und ErrTextMode nicht }
{ mit der Turbo-Vision) verwendet werden k.nnen. Es k.nnen aber }
{ nat.rlich auch beliebige andere Prozeduren, die dem Typ }
{ "TErrProc" entsprechen, verwendet werden. }
{ ---------------------------------------------------------------- }
{ Dieses Modul ist ein Programm-unabh.ngiger Fehler-Handler, der }
{ dem jeweiligen Projekt angepa.t werden kann, indem mittels der }
{ "AddErrMsg"-, "DelErrMsg"- und "ExistsErrMsg"-Routinen die ent- }
{ sprechende Umgebung geschaffen wird. }
{ Als Fehlernummern sind die alle Werte von -32768 bis 32000 er- }
{ laubt; die dar.ber liegenden Integer-Werte werden f.r interne }
{ Fehler verwendet; "Fehler" Nummer 0 steht au.erdem f.r "ordnungs-}
{ gem..e Ausf.hrung". Die maximal m.gliche Zahl von Fehlercodes }
{ ist 2.000 - sofern der Speicher reicht. }
{ Sollte bereits beim Initialisieren der Collection ein Fehler auf-}
{ treten, so wird das Programm mit einem Runtime-Error 214 ("Col- }
{ lection Index Overflow") abgebrochen - aber das passiert nur, }
{ wenn so wenig Speicher verf.gbar ist, da. wahrscheinlich keine }
{ andere Funktion des Programmes verwendbar ist. }
{ ---------------------------------------------------------------- }
{ Zus.tzlich steht die - optionale - M.glichkeit zur Verf.gung, }
{ eventuelle Fehler in einem Logfile mitprotokollieren zu lassen. }
{ Diese Option ist .ber die Funktion "SetLogMode" an- und abschalt-}
{ bar und liefert - je nach Status - Fehlercode- und Beschreibung }
{ und - im Modus "LmSafe" - auch einen Stackauszug. }
{ Der Post-Mortem-Dump steht zur Zeit nur in der DOS-Version zur }
{ Verf.gung, da es mir bis jetzt nicht gelang, auf den eigenen }
{ und Stack ohne "Memory-Protection-Fault-UAE" direkt zuzugreifen; }
{ aber da es ja unter Windows sowieso den Dr. Watson gibt - der }
{ eine sehr .hnliche Funktion erf.llt - ist das nicht so schlimm. }
{ Es wird unter Windows entsprechend auch bei der "LmSafe"-Option }
{ nur die Funktionalit.t von "LmFast" erf.llt. }
{ ---------------------------------------------------------------- }
{ (c) 1992 by Aurora featuring M.J. Schwaiger }
{ ---------------------------------------------------------------- }
UNIT Error;
{ ---------------------------------------------------------------- }
{$F+} { Force Far Calls - nicht (!) ent- }
{ fernen, hier unbedingt notwendig ! }
{ ---------------------------------------------------------------- }
INTERFACE
USES
{$IFDEF Windows}
WINDOS,
WinAdd,
{$ELSE}
PRINTER, { F.r die Simpel-Errorhandler unter DOS }
CRT,
DOS,
{$ENDIF}
ADatum, { Datumsroutinen; hier ben.tigt: "DateTimeStr" }
AStrTool, { Umwandlung Zahl in Hex-Darstellung }
AArray; { Verwaltung von dynamischen String-Arrays }
CONST
{ ---------------------------------------------------------------- }
{ Hier beginnen die internen Fehler des Error-Moduls. }
{ ---------------------------------------------------------------- }
InternErrBase : INTEGER = 32000;
{ ---------------------------------------------------------------- }
{ Konstanten f.r das Logfile bzw. die Methode "SetLogMode". Bei }
{ "LmOff" wird kein Logfile geschrieben, bei "LmFast" wird im }
{ Fehlerfalle die Fehlerbschreibung, bei "LmSafe" zus.tzlich auch }
{ noch der Stackdump ins Logfile geschrieben. }
{ "LmSafe" funktioniert nur unter DOS ! Unter Windows gleiche Be- }
{ deutung wie "LmFast". }
{ ---------------------------------------------------------------- }
LmOff = 0; { Kein Logging }
LmSafe = 1; { Fehlerbeschreibung und Post-Mortem-Dump }
LmFast = 2; { Nur Fehlerbeschreibung }
{ ---------------------------------------------------------------- }
{ Typdefinition f.r den Errorhandler. Neue Fehlerbehandlungs- }
{ routinen m.ssen als FAR kompiliert werden und diesem Format ent- }
{ sprechen; ihnen werden im Fehlerfall die Fehlernummer und eine }
{ Kurzbeschreibung .bergeben. }
{ ---------------------------------------------------------------- }
TYPE
TErrProc = PROCEDURE (Nr : INTEGER; Msg : STRING);
{ ---------------------------------------------------------------- }
{ Setzt den Fehler mit der angegebenen Nummer; es wird der momen- }
{ tan definierte Error-Handler aufgerufen. Sollte dieser das Pro- }
{ gramm nicht beenden, so bleibt die Fehlermeldung so lange stehen,}
{ bis sie .ber ClearErr gel.scht oder durch einen neuen Fehler }
{ .berschrieben wurde. Abfragen mit GetErr l.schen den Fehler }
{ nicht ! }
{ Sollte der angegebene Fehlercode gar nicht existieren, so wird }
{ Fehler Nummer 32002 gesetzt. }
{ ---------------------------------------------------------------- }
PROCEDURE SetErr (Nr : INTEGER);
{ ---------------------------------------------------------------- }
{ L.scht den aktuellen Fehlerstatus. Nachfolgende Abfragen mit }
{ "GetErr" / "GetErrMsg" ergeben den Fehlercode 0 bzw. "Operation }
{ ordnungsgem.. abgeschlossen". }
{ ---------------------------------------------------------------- }
PROCEDURE ClearErr;
{ ---------------------------------------------------------------- }
{ Liefert die Nummer des letzten aufgetretenen Fehlers. Durch }
{ "GetErr" wird der Fehler nicht (!) gel.scht, sondern kann auch }
{ mehrmals abgefragt werden; ein effektives L.schen erfolgt erst }
{ durch einen erneuten "SetErr"-Befehl oder durch "ClearErr". }
{ ---------------------------------------------------------------- }
FUNCTION GetErr : INTEGER;
{ ---------------------------------------------------------------- }
{ Liefert eine Kurzbeschreibung des letzten Fehlers. }
{ ---------------------------------------------------------------- }
FUNCTION GetErrMsg : STRING;
{ ---------------------------------------------------------------- }
{ F.gt den Fehler mit der angegebenen Nummer und der angegebenen }
{ Beschreibung der Collection zu. Sollte ein Fehler mit der glei- }
{ chen Nummer schon existieren, so wird Fehler Nummer 32001 ge- }
{ setzt; sollte zu wenig Speicher vorhanden sein, so wird Fehler }
{ Nummer 32000 gesetzt. }
{ ---------------------------------------------------------------- }
PROCEDURE AddErrMsg (Nr : INTEGER; Msg : STRING);
{ ---------------------------------------------------------------- }
{ Wenn der angegebene Fehlercode existiert, so wird die korrespon- }
{ dierende Fehler-Nachricht zur.ckgegeben, sonst ein Leerstring. }
{ Es werden keine Fehler gesetzt ! }
{ ---------------------------------------------------------------- }
FUNCTION ExistsErrMsg (Nr : INTEGER) : STRING;
{ ---------------------------------------------------------------- }
{ L.scht den Fehlercode mit der angegebenen Nummer. Sollte dieser }
{ gar nicht existieren, so wird Fehler Nummer 32003 gesetzt. }
{ ---------------------------------------------------------------- }
PROCEDURE DelErrMsg (Nr : INTEGER);
{ ---------------------------------------------------------------- }
{ Setzt einen neuen Error-Handler. Dieser mu. der Definition von }
{ "TErrProc" entsprechen, FAR-codiert sein (!) und erh.lt im }
{ Fehlerfall die Fehlernummer und eine Kurzbeschreibung .bergeben. }
{ Es kann jederzeit ein neuer Error-Handler installiert werden, }
{ das L.schen erfolgt durch Setzen der Dummy-Prozedur "ErrDummy". }
{ F.r weniger anspruchsvolle Fehlerbehandlungen stehen "ErrText- }
{ Mode" und "ErrPrinter" zur Verf.gung. }
{ ---------------------------------------------------------------- }
PROCEDURE SetErrHandler (Proc : TErrProc);
{ ---------------------------------------------------------------- }
{ Liefert den derzeitigen Error-Handler. }
{ ---------------------------------------------------------------- }
PROCEDURE GetErrHandler (VAR Proc : TErrProc);
{ ---------------------------------------------------------------- }
{ Tut effektiv - nichts. }
{ ---------------------------------------------------------------- }
PROCEDURE ErrDummy (Nr : INTEGER; Msg : STRING);
{ ---------------------------------------------------------------- }
{ Gibt unter Verwendung des normalen "WRITELN" eine Fehlerbe- }
{ schreibung auf dem Bildschirm aus und untermalt sie mit einem }
{ kurzen Piepston. F.r "vern.nftige" Benutzeroberfl.chen oder gar }
{ Windows nicht geeignet und deshalb dort auch nicht vorhanden. }
{ ---------------------------------------------------------------- }
{$IFNDEF Windows}
PROCEDURE ErrTextMode (Nr : INTEGER; Msg : STRING);
{$ENDIF}
{ ---------------------------------------------------------------- }
{ Druckt den aktuellen Fehler auf dem Standarddrucker PRN aus. }
{ Ebenfalls f.r Windows ungeeignet. }
{ ---------------------------------------------------------------- }
{$IFNDEF Windows}
PROCEDURE ErrPrint (Nr : INTEGER; Msg : STRING);
{$ENDIF}
{ ---------------------------------------------------------------- }
{ Setzt den Modus des Logfiles. Beschreibung der Moduskonstanten }
{ ("LmXXX") siehe oben. }
{ Sollte der angegebene Modus ung.ltig sein, so wird Fehler Nummer }
{ 32004 gesetzt. }
{ ---------------------------------------------------------------- }
This page created by ng2html v1.05, the Norton guide to HTML conversion utility.
Written by Dave Pearson