home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / pascal / library / dos / database / tdb / demo / units02a.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1992-05-05  |  10.4 KB  |  298 lines

  1. { ──────────────────────────────────────────────────────────────── }
  2. {                DEMO-MODUL DEFINITION ERROR-HANDLER               }
  3. { ──────────────────────────────────────────────────────────────── }
  4. { Die folgenden Kommentare sind falsch. Dieser Satz ist falsch.    }
  5. { Was ist richtig ?                                                }
  6. { (Zitat D.R. Hoftadter - "Gödel, Escher, Bach - Ein endlos ge-    }
  7. { flochtenes Band" Ende)                                           }
  8. { ──────────────────────────────────────────────────────────────── }
  9. { Hat die Aufgabe, den Benutzer auf Fehler bei der Programmaus-    }
  10. { führung oder bei der Eingabe aufmerksam zu machen; bei           }
  11. { kritischen Fehlern besteht die Möglichkeit, das Programm zu      }
  12. { beenden.                                                         }
  13. { Ebenso werden die Fehler, die die Turbo-Vision über "System-     }
  14. { Error" (leider auf Englisch) behandeln läßt, abgefangen und      }
  15. { einer vernünftigen Behandlung zugeführt, wobei die Sprache über  }
  16. { ein Flag zwischen Deutsch und englisch "umschaltbar" ist.        }
  17. { ──────────────────────────────────────────────────────────────── }
  18. { Ach, noch etwas: die ganze Geschichte funktioniert natürlich nur }
  19. { in (echten) Turbo-Vision-Applikationen ... Um in einer "normalen"}
  20. { DOS-Applikation lauffähig zu sein, reicht es allerdings, das     }
  21. { Vision-Flag zu löschen (siehe "UNITS02").                        }
  22. { Und es sollte auch niemand auf die Idee kommen, die Unit NEAR    }
  23. { zu kompilieren - ohne FAR läuft gar nichts (ich liebe Sprünge    }
  24. { ins Nirwana ...).                                                }
  25. { ──────────────────────────────────────────────────────────────── }
  26. {         (c)   Aurora featuring Markus SCHWAIGER in 1992          }
  27. { ──────────────────────────────────────────────────────────────── }
  28. {     History:                                                     }
  29. {  Datum     / Bearb. / Art                                        }
  30. { 27. 3.1992    MS       Beginn Implementation.                    }
  31. { 29. 4.1992    MS       Gegen 3 Uhr morgens schöne Grüsse an      }
  32. {                        meinen Star-Programmierer / Windows -     }
  33. {                        Vorhang auf für WG ! (Ich hoffe, ich über-}
  34. {                        lebe diese Unit, ohne von meiner Freundin }
  35. {                        erwüüüüüü...                              }
  36. { ──────────────────────────────────────────────────────────────── }
  37.  
  38. {$F+}
  39.  
  40. UNIT Units02a;
  41.  
  42. INTERFACE
  43.  
  44. {$DEFINE German}                   { Für englische Ausgabe: $UNDEF }
  45.  
  46.   USES
  47. {$IFNDEF Windows}
  48. {$IFDEF Vision}
  49.     DRIVERS,
  50.     DIALOGS,
  51.     VIEWS,
  52. {$IFDEF German}           { Eigentlich wollte ich nur die Möglich- }
  53.     AMsgBox,                   { keit der Verschachtelung beweisen }
  54. {$ELSE}
  55.     MsgBox,
  56. {$ENDIF}
  57. {$ENDIF}
  58. {$ENDIF}
  59.     Error;
  60.  
  61.  
  62.   CONST
  63.     German         = 1;
  64.     English        = 2;
  65.  
  66. {$IFDEF German}
  67.     Language       : BYTE = German;
  68. {$ELSE}
  69.     Language       : BYTE = English;
  70. {$ENDIF}
  71.  
  72.  
  73. { ──────────────────────────────────────────────────────────────── }
  74. { Installiert die beiden neuen Fehler-Handler. Darf erst nach der  }
  75. { Initialisierung der Application aufgerufen werden !              }
  76. { ──────────────────────────────────────────────────────────────── }
  77.  
  78.   PROCEDURE InstallHandlers;
  79.  
  80.  
  81. { ──────────────────────────────────────────────────────────────── }
  82. { Übernimmt die Funktion der Turbo-Vision-Prozedur "SystemError"   }
  83. { zur Behandlung von kritischen (das System in seiner Funktions-   }
  84. { weise behindernden) Fehlern.                                     }
  85. { Gibt die Fehlermeldung in einer MessageBox am Bildschirm aus und }
  86. { läßt den Benutzer wählen, ob der Versuch wiederholt oder abge-   }
  87. { brochen werden soll.                                             }
  88. { ──────────────────────────────────────────────────────────────── }
  89.  
  90. {$IFNDEF Windows}
  91. {$IFDEF Vision}
  92.  
  93.   FUNCTION CriticalError (Code : INTEGER; Drive : BYTE) : INTEGER;
  94.  
  95. {$ENDIF}
  96. {$ENDIF}
  97.  
  98.  
  99. { ──────────────────────────────────────────────────────────────── }
  100. { Fehlerhandler für die Unit Error.                                }
  101. { Gibt die Fehlermeldung in einer MessageBox am Bildschirm aus.    }
  102. { ──────────────────────────────────────────────────────────────── }
  103.  
  104.   PROCEDURE NonCriticalError (Code : INTEGER; Msg : STRING);
  105.  
  106.  
  107. IMPLEMENTATION
  108.  
  109. { ──────────────────────────────────────────────────────────────── }
  110. { Klartext der möglichen kritischen Fehler in englischer Sprache.  }
  111. { ──────────────────────────────────────────────────────────────── }
  112.  
  113. {$IFNDEF Windows}
  114. {$IFDEF Vision}
  115.  
  116.   CONST
  117.     ESysErrArr     : ARRAY [0 .. 15] OF STRING = (
  118.       'Disk is write-protected in drive ',
  119.       'Critical disk error on drive ',                         { 1 }
  120.       'Disk is not ready in drive ',
  121.       'Critical disk error on drive ',
  122.       'Data integrity error on drive ',
  123.       'Critical disk error on drive ',                         { 5 }
  124.       'Seek error on drive ',
  125.       'Unknown media type in drive ',
  126.       'Sector not found on drive ',
  127.       'Printer out of paper',
  128.       'Write fault on drive ',                                { 10 }
  129.       'Read fault on drive ',
  130.       'Hardware failure on drive ',
  131.       'Bad memory image of FAT detected',
  132.       'Device access error',
  133.       'Insert diskette in drive '                             { 15 }
  134.     );
  135.  
  136.  
  137. { ──────────────────────────────────────────────────────────────── }
  138. { Klartext der möglichen kritischen Fehler in deutscher Sprache.   }
  139. { ──────────────────────────────────────────────────────────────── }
  140.  
  141.   CONST
  142.     DSysErrArr     : ARRAY [0 .. 15] OF STRING = (
  143.       'Diskette ist schreibgeschützt in Laufwerk ',
  144.       'Kritischer Fehler auf Laufwerk ',                       { 1 }
  145.       'Laufwerk ist nicht bereit - bitte Medium einlegen in Laufwerk ',
  146.       'Kritischer Fehler auf Laufwerk ',
  147.       'Datenintegrität nicht mehr gegeben in Laufwerk ',
  148.       'Kritischer Fehler auf Laufwerk ',                       
  149.       'Zugriffsfehler in Laufwerk ',                           { 5 }
  150.       'Unbekanntes Format Medium in Laufwerk ',
  151.       'Sektor nicht gefunden auf Laufwerk ',
  152.       'Kein Papier im Drucker - bitte Papierbehälter füllen',
  153.       'Schreibfehler - bitte Schreibschutz entfernen von Laufwerk ',
  154.                                                               { 10 }
  155.       'Lesefehler - eventuell nicht oder ungültig formatiertes Medium in Laufwerk ',
  156.       'Hardware-Fehler auf Laufwerk ',
  157.       'Fehlerhafte FAT auf Laufwerk ',
  158.       'Zugriffsfehler Laufwerk ',
  159.       'Bitte Diskette / Medium einlegen in Laufwerk '         { 15 }
  160.     );
  161.  
  162. {$ENDIF}
  163. {$ENDIF}
  164.  
  165. { ──────────────────────────────────────────────────────────────── }
  166. { Konvertiert eine LongInt-Zahl ohne jede Formatierung in einen    }
  167. { String.                                                          }
  168. { ──────────────────────────────────────────────────────────────── }
  169.  
  170.   FUNCTION L2S (Long : LONGINT) : STRING;
  171.  
  172.     VAR
  173.       S            : STRING;
  174.  
  175.     BEGIN
  176.       STR (Long, S);
  177.  
  178.       L2S := S;
  179.     END; { FUNCTION L2S }
  180.  
  181.  
  182. { ──────────────────────────────────────────────────────────────── }
  183. { Übernimmt die Funktion der Turbo-Vision-Prozedur "SystemError"   }
  184. { zur Behandlung von kritischen (das System in seiner Funktions-   }
  185. { weise behindernden) Fehlern.                                     }
  186. { Gibt die Fehlermeldung in einer MessageBox am Bildschirm aus und }
  187. { läßt den Benutzer wählen, ob der Versuch wiederholt oder abge-   }
  188. { brochen werden soll.                                             }
  189. { ──────────────────────────────────────────────────────────────── }
  190.  
  191. {$IFNDEF Windows}
  192. {$IFDEF Vision}
  193.  
  194.   FUNCTION CriticalError (Code : INTEGER; Drive : BYTE) : INTEGER;
  195.  
  196.     VAR
  197.       Str          : STRING;
  198.       Result       : WORD;
  199.  
  200.     BEGIN
  201.       CASE Language OF
  202.         English :
  203.           BEGIN
  204.             Str := 'Error 01-' + L2S (Code) + ':' + #13#13;
  205.  
  206.             Str := Str + ^C + ESysErrArr [Code];
  207.           END; { English : }
  208.         German :
  209.           BEGIN
  210.             Str := 'Fehler 01-' + L2S (Code) + ':' + #13#13;
  211.  
  212.             Str := Str + ^C + DSysErrArr [Code];
  213.           END; { German : }
  214.       END; { CASE Language OF }
  215.  
  216.       Str := Str + #13#10#13#10;
  217.  
  218.       Result := MessageBox (Str, Nil, mfError + mfOKCancel);
  219.  
  220.       IF Result = cmOK THEN
  221.         CriticalError := 0
  222.       ELSE
  223.         CriticalError := 1;
  224.     END; { FUNCTION CriticalError }
  225.  
  226. {$ENDIF}
  227. {$ENDIF}
  228.  
  229. { ──────────────────────────────────────────────────────────────── }
  230. { Fehlerhandler für die Unit Error.                                }
  231. { Gibt die Fehlermeldung in einer MessageBox am Bildschirm aus.    }
  232. { ──────────────────────────────────────────────────────────────── }
  233.  
  234.   PROCEDURE NonCriticalError (Code : INTEGER; Msg : STRING);
  235.  
  236.     VAR
  237.       Str          : STRING;
  238.  
  239.     BEGIN
  240.       CASE Code OF
  241.         0 :     { Everything's OK - dürfte eigentlich nie "kommen" }
  242.           ;
  243.         6, 8, 9, 11, 14 :
  244.           BEGIN
  245.             Str := 'Kritischer Fehler 02-' + L2S (Code) + ':' + #13#10;
  246.             Str := Str + ^C + Msg + #13#10;
  247.             Str := Str + 'Es ist möglich, daß der Programmablauf behindert wird.';
  248.             Str := Str + #13#10#13#10;
  249.  
  250. {$IFDEF Windows}
  251.             WRITELN (Str);
  252. {$ELSE}
  253. {$IFDEF Vision}
  254.             MessageBox (Str, Nil, mfError + mfOKCancel);
  255. {$ELSE}
  256.             WRITELN (Str);
  257. {$ENDIF}
  258. {$ENDIF}
  259.           END;
  260.         ELSE
  261.           BEGIN
  262.             Str := 'Fehler 03-' + L2S (Code) + ':' + #13#10;
  263.             Str := Str + ^C + Msg;
  264.             Str := Str + #13#10#13#10;
  265.  
  266. {$IFDEF Windows}
  267.             WRITELN (Str);
  268. {$ELSE}
  269. {$IFDEF Vision}
  270.             MessageBox (Str, Nil, mfError + mfOKButton);
  271. {$ELSE}
  272.             WRITELN (Str);
  273. {$ENDIF}
  274. {$ENDIF}
  275.           END;
  276.       END; { CASE Code OF }
  277.     END; { PROCEDURE NonCriticalError }
  278.  
  279.  
  280. { ──────────────────────────────────────────────────────────────── }
  281. { Installiert die beiden neuen Fehler-Handler. Darf erst nach der  }
  282. { Initialisierung der Application aufgerufen werden !              }
  283. { ──────────────────────────────────────────────────────────────── }
  284.  
  285.   PROCEDURE InstallHandlers;
  286.  
  287.     BEGIN
  288.       Error.SetErrHandler (NonCriticalError);
  289.  
  290. {$IFNDEF Windows}
  291. {$IFDEF Vision}
  292.       DRIVERS.SYSERRORFUNC := CriticalError;
  293. {$ENDIF}
  294. {$ENDIF}
  295.     END; { PROCEDURE InstallHandlers }
  296.  
  297.   END. { UNIT Units02a }
  298.