home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1989 / 09 / tricks / errormsg.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1989-06-09  |  5.0 KB  |  152 lines

  1. (* ------------------------------------------------------ *)
  2. (*                     ERRORMSG.PAS                       *)
  3. (*  Unit zum Darstellen von Ein-/Ausgabefehlern, ohne daß *)
  4. (*       dabei die Bildschirmmaske zerstört wird.         *)
  5. (*       (C) 1989 Christian Ramsauer  &  TOOLBOX          *)
  6. (* ------------------------------------------------------ *)
  7. UNIT ErrorMsg;
  8.  
  9. INTERFACE  USES Crt, Dos;
  10.  
  11.   PROCEDURE ErrorReport(ErrorCode : Word);
  12. (* ------------------------------------------------------ *)
  13. (*    Diese Prozedur gibt ein Fenster mit der Nummer      *)
  14. (*    des Fehlercodes und einer Fehlermeldung aus.        *)
  15. (*    Die Nummer des Fehlers muß der Prozedur als         *)
  16. (*    Parameter übergeben werden.                         *)
  17.  
  18. IMPLEMENTATION
  19.  
  20.   PROCEDURE ErrorReport(ErrorCode : Word);
  21.   VAR
  22.     EMsg                  : STRING[40];
  23.     ScreenPuffer          : ARRAY[1..588] OF BYTE;
  24.     Regs                  : Registers;
  25.     CursorSize, CursorPos : WORD;
  26.     Ch                    : CHAR;
  27.   CONST
  28.     ScreenSegment = $B800;
  29.     Xpos = 19;             { X-Koordinate des Errorwindows }
  30.     Ypos = 8;              { Y-Koordinate des Errorwindows }
  31.  
  32.     PROCEDURE SaveCursor;
  33.     BEGIN
  34.       Regs.ah := 3;  Regs.bh := 0;
  35.       Intr($10, Regs);
  36.       CursorSize := Regs.cx;
  37.       CursorPos  := Regs.dx;
  38.       Regs.ah := 1;  Regs.cx := 256;
  39.       Intr($10, Regs);
  40.     END;
  41.  
  42.     PROCEDURE RestoreCursor;
  43.     BEGIN
  44.       Regs.ah := 1;
  45.       Regs.cx := CursorSize;
  46.       Intr($10, Regs);
  47.       Regs.ah := 2;  Regs.bh := 0;
  48.       Regs.dx := CursorPos;
  49.       Intr($10, Regs);
  50.     END;
  51.  
  52.     PROCEDURE SaveScreenPart;
  53.     VAR
  54.       Offset, x, y, i : INTEGER;
  55.     BEGIN
  56.       i := 0;
  57.       FOR y := Ypos TO Ypos+6 DO
  58.         FOR x := Xpos TO Xpos+41 DO BEGIN
  59.           Offset := ((y-1)*160)+((x-1)*2);
  60.           Inc(i,2);
  61.           ScreenPuffer[i-1] := Mem[ScreenSegment:Offset];
  62.           ScreenPuffer[i]   := Mem[ScreenSegment:Offset+1];
  63.         END;
  64.     END;
  65.  
  66.     PROCEDURE RestoreScreenPart;
  67.     VAR
  68.       Offset, x, y, i : INTEGER;
  69.     BEGIN
  70.       i := 0;
  71.       FOR y := Ypos TO Ypos+6 DO
  72.         FOR x := Xpos TO Xpos+41 DO BEGIN
  73.           Offset := ((y-1)*160)+((x-1)*2);
  74.           Inc(i,2);
  75.           Mem[ScreenSegment:Offset]   := Screenpuffer[i-1];
  76.           Mem[ScreenSegment:Offset+1] := Screenpuffer[i];
  77.         END;
  78.     END;
  79.  
  80.     PROCEDURE ErrorWindow;
  81.     VAR
  82.       i : INTEGER;
  83.     BEGIN
  84.       TextBackground(7);  TextColor(0);
  85.       GotoXY(Xpos,Ypos);
  86.       Write('╔════════════ Fehler-Meldung ════════════╗');
  87.       FOR i := 1 TO 4 DO BEGIN
  88.         GotoXY(Xpos,Ypos+i);
  89.         Write('║');
  90.         TextBackground(0);  Write(' ':40);
  91.         TextBackground(7);  Write('║');
  92.       END;
  93.       GotoXY(Xpos,Ypos+5);
  94.       Write('║    Weiter mit beliebiger Taste  ...    ║');
  95.       GotoXY(Xpos,Ypos+6);
  96.       Write('╚════════════════════════════════════════╝');
  97.       TextBackground(0);
  98.       TextColor(7);
  99.     END;
  100.  
  101.     PROCEDURE SelectErrorMessage;
  102.     BEGIN
  103.       EMsg := 'Anderer Fehler';
  104.       CASE ErrorCode OF
  105.           2 : EMsg := 'Datei nicht gefunden';
  106.           3 : EMsg := 'Suchweg nicht gefunden';
  107.           4 : EMsg := 'Zuviele Dateien geöffnet';
  108.           5 : EMsg := 'Dateizugriff verweigert';
  109.           6 : EMsg := 'Handle nicht definiert/ungültig';
  110.          12 : EMsg := 'Ungültiger Dateimodus';
  111.          15 : EMsg := 'Laufwerksnummer unzulässig';
  112.          16 : EMsg := 'Standarddirectory nicht löschbar';
  113.          17 : EMsg := 'Rename kann nicht kopieren';
  114.         100 : EMsg := 'Disketten/Festplatten-Lesefehler';
  115.         101 : EMsg := 'Disketten/Festplatten-Schreibfehler';
  116.         102 : EMsg := 'Dateivariable nicht zugeordnet';
  117.         103 : EMsg := 'Datei ist nicht offen';
  118.         104 : EMsg := 'Leseoperationen nicht erlaubt';
  119.         105 : EMsg := 'Schreiboperationen nicht erlaubt';
  120.         106 : EMsg := 'Ungültiges numerisches Format';
  121.         150 : EMsg := 'Diskette ist schreibgeschützt';
  122.         151 : EMsg := 'Peripheriegerät nicht bekannt';
  123.         152 : EMsg := 'Laufwerk nicht betriebsbereit';
  124.         153 : EMsg := 'Ungültiger DOS-Funktionscode';
  125.         154 : EMsg := 'Prüfsummen-Fehler';
  126.         155 : EMsg := 'Ungültiger Disk-Parameterblock';
  127.         156 : EMsg := 'Kopf-Positionierungsfehler';
  128.         157 : EMsg := 'Unbekanntes Sektorformat';
  129.         158 : EMsg := 'Sektor nicht gefunden';
  130.         159 : EMsg := 'Drucker ohne Papier';
  131.         160 : EMsg := 'Schreibfehler';
  132.         161 : EMsg := 'Lesefehler';
  133.         162 : EMsg := 'Allgemeiner Fehler';
  134.       END;
  135.       EMsg := EMsg + '!' + #7;
  136.     END;
  137.  
  138.     BEGIN
  139.       IF ErrorCode > 0 THEN BEGIN
  140.       SaveCursor;  SaveScreenPart;  SelectErrorMessage;
  141.       ErrorWindow;
  142.       GotoXY(Xpos+3,Ypos+2);
  143.       Write('Fehlercode: ', ErrorCode);
  144.       GotoXY(Xpos+3,Ypos+3);  Write(EMsg);
  145.       Ch := ReadKey;
  146.       RestoreScreenPart;  RestoreCursor;
  147.     END;
  148.   END;
  149.  
  150. End.
  151. (* ------------------------------------------------------ *)
  152. (*                 Ende von ERRORMSG.PAS                  *)