#ifndef ERR_H #define ERR_H #include #include #include #include // =========================================================================== // ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| // | // | Library : libutils.a | Fehlerobjekt Err für Projekt c/ // | Modul : err.h // | Objekt : tErr // | Test/Doku: test_libutils, c/Dokus/clar_objekte2.odt // | // | Fehlerobjekt: // | - Meldungen und Systemfehler speichern // | - Meldungen und Systemfehler anzeigen // | - Meldungen und Systemfehler checken // ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| // =========================================================================== typedef struct tErr tErr; // private Struktur extern tErr *Err; // Default Errorobjekt. Anfangswert NULL. // Standard-Objekt Err wird bei ersten Funktionsaufruf automatisch erstellt! tErr *ErrNew(); // Standard-Objekt Err wird bei ersten Funktionsaufruf automatisch erstellt! // Option: Neben Err ein eigenes Fehlerobjekt erstellen. tErr *ErrDelete(tErr *p); // Ein Error Objekt freigeben. // =========================================================================== // Die Fehlerfunktionen bool ErrClr(tErr *p); // Gespeicherte Meldungen und errno löschen. // Objekt bleibt erhalten. // Rückgabe: true : Es gab Fehler // false: Es gab keine Fehler bool ErrChk(tErr *p); // Gespeicherte Meldungen prüfen // Systemfehler werden mit ErrAdd() gespeichert. // Es werden keine Meldungen angezeigt! // Rückgabe true: Es gibt Systemfehler oder gespeicherte Meldungen. void ErrAdd(tErr *p, const char* Lines); // Fehler merken // if (errno!=0): Systemfehlermeldung hinzufügen und errno=0 setzen. // if (Lines) : Eine oder mehrere Meldungszeilen hinzufügen. // '\n': neue Zeile und Farbe bis zum rechten Rand. // Meldungen werden nicht angezeigt! bool ErrChkAdd(tErr *p, const char*Lines); // Fehler prüfen/merken // if ( ErrChk() ): ErrAdd() aufrufen und Rückgabe true; // else Rückgabe false; void ErrPrint(tErr *p, const char* Lines, bool WarteAufTaste); // Fehler anzeigen/löschen // Alle Fehlermeldungen und Lines anzeigen und löschen: // - gespeicherte Meldungen // - Systemfehler // - Lines // WarteAufTaste true: Ausgabe anhalten und Taste maximal WarteSec warten // Bei Ausgabe mit lessPrint() nie anhalten! bool ErrChkPrint(tErr *p, const char *Lines, bool WarteAufTaste); // Auf Fehler prüfen und anzeigen/löschen. // if ( ErrChk() ): ErrPrint() aufrufen und Rückgabe true; // else Rückgabe false; // Lines werden nicht gespeichert. // Gespeicherte Meldungen werden mit ErrClr() gelöscht. // WarteAufTaste true: Ausgabe anhalten und Taste maximal WarteSec warten // Bei Ausgabe mit lessPrint() nie anhalten! int16_t ErrSetWarteAufTaste(tErr *p, int32_t WarteSec); // Wartezeit nach einer Fehleranzeige mit den Funktionen ErrPrint(..., true) // und ErrChkPrint(..., true) für WeiterMitTasteSec(WarteSec,...) setzen. // Bei Fehlerausgaben ins Logfile gibt es für WarteSec>=-1 keine Wartezeit! // // WarteSec: n>=0 Wartezeit nach n Sekunden automatisch beenden // -1 Wartezeit ohne Logfile unendlich // -2 Wartezeit auch mit Logfile immer unendlich! // // Rückgabe: Letzter Wert von WarteSec void ErrSetPrintMode(tErr *p, bool ScrOn, FILE *Logfile); // Ausgabemodus für Bildschirm und/oder Logfile setzen. // // ScrOn : true Err-Ausgabe immer auch am Bildschirm mit Farbe-Esc-Sequenzen. // Logfile: !NULL Err-Ausgabe ins Logfile ohne Farb-Esc-Sequenzen. // Mit WarteSec>=-1 keine Wartezeit Fehleranzeige // NULL Err-Ausgabe nur am Bildschirm. // const FILE *ErrGetLogFile(tErr *p); // Fehlerumleitung ins Logfile abfragen // Rückgabe: !NULL, Err-Ausgabe ins Logfile aktiv void ErrSetPrint(tErr *p, bool On ); // Fehlerausgabe ein/auschalten // On==true : ErrPrint() und ErrChkPrint() drucken/speichern // On==false : ErrPrint() und ErrChkPrint() führen nur ErrAdd() aus void ErrExit(const char *Meldung); // Fehleranzeige und Programmabbruch // =========================================================================== // Debugfunktionen für tErr void ErrPrintInfo(tErr *p); // Infos zum Fehlerobjekt anzeigen // Vordefinierte Makros für Debug // Sie verwenden die globale Variable 'uint16_t Debug' und // verkürzen den Befehl "if (Debug>0) printf" zu "DP1" // #define DP1(...) if (Debug>0) printf(__VA_ARGS__) #define DP2(...) if (Debug>1) printf(__VA_ARGS__) #define DP3(...) if (Debug>2) printf(__VA_ARGS__) // Beispiel: Befehl: if (Debug>0) printf(FV"%s Anf=%u\n"FN,__func__ ,Pos); // wird zu DP1(FV"%s Anf=%u\n"FN,__func__ ,Pos); // Ende: err.h |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| // ============================================================================ #endif // ERR_H