home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------------ *)
- (* ERRORMSG.PAS *)
- (* Unit zum Darstellen von Ein-/Ausgabefehlern, ohne daß *)
- (* dabei die Bildschirmmaske zerstört wird. *)
- (* (C) 1989 Christian Ramsauer & TOOLBOX *)
- (* ------------------------------------------------------ *)
- UNIT ErrorMsg;
-
- INTERFACE USES Crt, Dos;
-
- PROCEDURE ErrorReport(ErrorCode : Word);
- (* ------------------------------------------------------ *)
- (* Diese Prozedur gibt ein Fenster mit der Nummer *)
- (* des Fehlercodes und einer Fehlermeldung aus. *)
- (* Die Nummer des Fehlers muß der Prozedur als *)
- (* Parameter übergeben werden. *)
-
- IMPLEMENTATION
-
- PROCEDURE ErrorReport(ErrorCode : Word);
- VAR
- EMsg : STRING[40];
- ScreenPuffer : ARRAY[1..588] OF BYTE;
- Regs : Registers;
- CursorSize, CursorPos : WORD;
- Ch : CHAR;
- CONST
- ScreenSegment = $B800;
- Xpos = 19; { X-Koordinate des Errorwindows }
- Ypos = 8; { Y-Koordinate des Errorwindows }
-
- PROCEDURE SaveCursor;
- BEGIN
- Regs.ah := 3; Regs.bh := 0;
- Intr($10, Regs);
- CursorSize := Regs.cx;
- CursorPos := Regs.dx;
- Regs.ah := 1; Regs.cx := 256;
- Intr($10, Regs);
- END;
-
- PROCEDURE RestoreCursor;
- BEGIN
- Regs.ah := 1;
- Regs.cx := CursorSize;
- Intr($10, Regs);
- Regs.ah := 2; Regs.bh := 0;
- Regs.dx := CursorPos;
- Intr($10, Regs);
- END;
-
- PROCEDURE SaveScreenPart;
- VAR
- Offset, x, y, i : INTEGER;
- BEGIN
- i := 0;
- FOR y := Ypos TO Ypos+6 DO
- FOR x := Xpos TO Xpos+41 DO BEGIN
- Offset := ((y-1)*160)+((x-1)*2);
- Inc(i,2);
- ScreenPuffer[i-1] := Mem[ScreenSegment:Offset];
- ScreenPuffer[i] := Mem[ScreenSegment:Offset+1];
- END;
- END;
-
- PROCEDURE RestoreScreenPart;
- VAR
- Offset, x, y, i : INTEGER;
- BEGIN
- i := 0;
- FOR y := Ypos TO Ypos+6 DO
- FOR x := Xpos TO Xpos+41 DO BEGIN
- Offset := ((y-1)*160)+((x-1)*2);
- Inc(i,2);
- Mem[ScreenSegment:Offset] := Screenpuffer[i-1];
- Mem[ScreenSegment:Offset+1] := Screenpuffer[i];
- END;
- END;
-
- PROCEDURE ErrorWindow;
- VAR
- i : INTEGER;
- BEGIN
- TextBackground(7); TextColor(0);
- GotoXY(Xpos,Ypos);
- Write('╔════════════ Fehler-Meldung ════════════╗');
- FOR i := 1 TO 4 DO BEGIN
- GotoXY(Xpos,Ypos+i);
- Write('║');
- TextBackground(0); Write(' ':40);
- TextBackground(7); Write('║');
- END;
- GotoXY(Xpos,Ypos+5);
- Write('║ Weiter mit beliebiger Taste ... ║');
- GotoXY(Xpos,Ypos+6);
- Write('╚════════════════════════════════════════╝');
- TextBackground(0);
- TextColor(7);
- END;
-
- PROCEDURE SelectErrorMessage;
- BEGIN
- EMsg := 'Anderer Fehler';
- CASE ErrorCode OF
- 2 : EMsg := 'Datei nicht gefunden';
- 3 : EMsg := 'Suchweg nicht gefunden';
- 4 : EMsg := 'Zuviele Dateien geöffnet';
- 5 : EMsg := 'Dateizugriff verweigert';
- 6 : EMsg := 'Handle nicht definiert/ungültig';
- 12 : EMsg := 'Ungültiger Dateimodus';
- 15 : EMsg := 'Laufwerksnummer unzulässig';
- 16 : EMsg := 'Standarddirectory nicht löschbar';
- 17 : EMsg := 'Rename kann nicht kopieren';
- 100 : EMsg := 'Disketten/Festplatten-Lesefehler';
- 101 : EMsg := 'Disketten/Festplatten-Schreibfehler';
- 102 : EMsg := 'Dateivariable nicht zugeordnet';
- 103 : EMsg := 'Datei ist nicht offen';
- 104 : EMsg := 'Leseoperationen nicht erlaubt';
- 105 : EMsg := 'Schreiboperationen nicht erlaubt';
- 106 : EMsg := 'Ungültiges numerisches Format';
- 150 : EMsg := 'Diskette ist schreibgeschützt';
- 151 : EMsg := 'Peripheriegerät nicht bekannt';
- 152 : EMsg := 'Laufwerk nicht betriebsbereit';
- 153 : EMsg := 'Ungültiger DOS-Funktionscode';
- 154 : EMsg := 'Prüfsummen-Fehler';
- 155 : EMsg := 'Ungültiger Disk-Parameterblock';
- 156 : EMsg := 'Kopf-Positionierungsfehler';
- 157 : EMsg := 'Unbekanntes Sektorformat';
- 158 : EMsg := 'Sektor nicht gefunden';
- 159 : EMsg := 'Drucker ohne Papier';
- 160 : EMsg := 'Schreibfehler';
- 161 : EMsg := 'Lesefehler';
- 162 : EMsg := 'Allgemeiner Fehler';
- END;
- EMsg := EMsg + '!' + #7;
- END;
-
- BEGIN
- IF ErrorCode > 0 THEN BEGIN
- SaveCursor; SaveScreenPart; SelectErrorMessage;
- ErrorWindow;
- GotoXY(Xpos+3,Ypos+2);
- Write('Fehlercode: ', ErrorCode);
- GotoXY(Xpos+3,Ypos+3); Write(EMsg);
- Ch := ReadKey;
- RestoreScreenPart; RestoreCursor;
- END;
- END;
-
- End.
- (* ------------------------------------------------------ *)
- (* Ende von ERRORMSG.PAS *)