[<<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