home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------------ *)
- (* BOOTTEST.PAS *)
- (* (c) 1989 Andreas Schuster & TOOLBOX *)
- (* ------------------------------------------------------ *)
- PROGRAM BootTest;
-
- USES Dos,Crt;
-
- CONST
- Titel = 'BootTest ';
- Version = 'Version 1.0 ';
- CopyRight = '(c) 1989 A. Schuster 1988 & TOOLBOX';
- DefaultName = 'BOOTTEST.DTA';
-
- TYPE
- Sektor = ARRAY[1..512] OF BYTE;
-
- VAR
- Regs : Registers;
- SaveDir,
- Kommando,
- OptionPfad : STRING;
- Puffer : Sektor;
-
-
- PROCEDURE Fehler(ErrCode : BYTE);
- BEGIN
- CASE ErrCode OF
- 1 : WriteLn('Fehler beim Lesen');
- 2 : WriteLn('Fehler beim Schreiben');
- 3 : WriteLn('Laufwerk nicht unterstützt ',
- '- Programm abgebrochen');
- ELSE
- WriteLn('Unbekannter Fehler');
- END;
- WriteLn;
- WriteLn;
- ChDir(SaveDir);
- Halt(1);
- END;
-
-
- FUNCTION Laufwerk(Bezeichner : CHAR) : BYTE;
- BEGIN
- Bezeichner := UpCase(Bezeichner);
- IF Bezeichner = 'A' THEN Laufwerk := $00 ELSE
- IF Bezeichner = 'B' THEN Laufwerk := $01 ELSE
- Fehler(3);
- END;
-
-
- PROCEDURE Lesen(Drive : BYTE);
- BEGIN
- WITH Regs DO BEGIN
- DH := 0;
- DL := Drive;
- CH := 0;
- CL := 1;
- ES := Seg(Puffer);
- BX := Ofs(Puffer);
- AH := 2;
- AL := 1;
- Intr($13, Regs);
- IF AH <> 0 THEN Fehler(1);
- END;
- END;
-
-
- PROCEDURE Schreiben;
- VAR
- Save: FILE OF Sektor;
- BEGIN
- Assign(Save, DefaultName);
- Rewrite(Save);
- Write(Save, Puffer);
- Close(Save);
- END;
-
-
- FUNCTION Vergleichen : BOOLEAN;
- VAR
- RefFile : FILE OF Sektor;
- Referenz : Sektor;
- i : WORD;
- BEGIN
- Assign(RefFile, DefaultName);
- Reset(RefFile);
- Read(RefFile, Referenz);
- Vergleichen := TRUE;
- FOR i := 1 TO 512 DO
- IF Referenz[i] <> Puffer[i] THEN Vergleichen := FALSE;
- END;
-
-
- PROCEDURE HilfsText;
- BEGIN
- WriteLn('Syntax : BOOTTEST /I [d:\pfad] Initialisieren');
- WriteLn(' /T [d:\pfad] Test');
- WriteLn(' /R [d:\pfad] Reparieren');
- WriteLn;
- Halt(1);
- END;
-
-
- PROCEDURE Initialisierung;
- BEGIN
- GetDir(0, SaveDir);
- ChDir(OptionPfad);
- Lesen(Laufwerk(OptionPfad[1]));
- Schreiben;
- ChDir(SaveDir);
- WriteLn('BootTest initialisiert');
- WriteLn;
- WriteLn;
- Halt(0);
- END;
-
-
- PROCEDURE Test;
- BEGIN
- GetDir(0, SaveDir);
- ChDir(OptionPfad);
- Lesen(Laufwerk(OptionPfad[1]));
- IF NOT Vergleichen THEN BEGIN
- WriteLn('Bootsektor verändert ',
- '- Restaurieren mit /R-Option');
- WriteLn;
- WriteLn;
- ChDir(SaveDir);
- Halt(2);
- END ELSE
- WriteLn('Bootsektor OK');
- WriteLn;
- WriteLn;
- ChDir(SaveDir);
- Halt(0);
- END;
-
-
- PROCEDURE Reparieren;
- VAR
- SaveFile : FILE OF Sektor;
- BEGIN
- GetDir(0, SaveDir);
- ChDir(OptionPfad);
- Assign(SaveFile, DefaultName);
- Reset(SaveFile);
- Read(SaveFile, Puffer);
- Close(SaveFile);
- WITH Regs DO BEGIN
- DH := 0;
- DL := Laufwerk(OptionPfad[1]);
- CH := 0;
- CL := 1;
- ES := Seg(Puffer);
- BX := Ofs(Puffer);
- AL := 1;
- AH := 3;
- Intr($13, Regs);
- IF AH <> 0 THEN Fehler(2);
- END;
- WriteLn('Bootsektor wiederhergestellt');
- WriteLn;
- WriteLn;
- ChDir(SaveDir);
- Halt(0);
- END;
-
-
- BEGIN (* Hauptprogramm *)
- ClrScr;
- WriteLn(Titel, Version, CopyRight);
- WriteLn;
- IF ParamCount < 1 THEN HilfsText;
- Kommando := ParamStr(1);
- OptionPfad := ParamStr(2);
- IF Kommando = '?' THEN HilfsText;
- IF (Pos('\', OptionPfad) = 0) AND
- (Pos(':', OptionPfad) = 0) THEN
- GetDir(0, OptionPfad);
- IF Pos(':', OptionPfad) = Length(OptionPfad) THEN
- OptionPfad:=OptionPfad+'\';
- IF (Kommando='/I') OR (Kommando='/i') THEN
- Initialisierung
- ELSE
- IF (Kommando='/T') OR (Kommando='/t') THEN Test
- ELSE
- IF (Kommando='/R') OR (Kommando='/r') THEN Reparieren
- ELSE HilfsText;
- END.
- (* ------------------------------------------------------ *)
- (* Ende von BOOTTEST.PAS *)