home *** CD-ROM | disk | FTP | other *** search
- {$A+,B-,D+,E+,F-,G-,I-,L-,N-,O-,R-,S-,V-,X-}
- {$M 1024,0,0}
- (* ------------------------------------------------- *)
- (* XBOOT.PAS v1.1 *)
- (* (c) 1991 Kai-Kristian Dopheide & DMV-Verlag *)
- (* ------------------------------------------------- *)
-
- PROGRAM xBoot;
-
- USES Dos, Crt, Reboot;
-
- VAR
- pSec : ARRAY [0..511] OF BYTE;
- Part, aPart : BYTE;
- aPartKey : CHAR;
- check : INTEGER;
-
- FUNCTION DosVersion: WORD;
- BEGIN
- DosVersion := Swap(Dos.DosVersion);
- END;
-
- FUNCTION ThisProgram: STRING;
- VAR
- Dir : DirStr;
- Name : NameStr;
- Ext : ExtStr;
- BEGIN
- IF DosVersion >= $0300 THEN BEGIN
- FSplit(ParamStr(0), Dir, Name, Ext);
- ThisProgram := Name;
- END ELSE
- ThisProgram := 'XBOOT';
- END;
-
- PROCEDURE Disk(fkt : BYTE);
- VAR
- Regs : Registers;
- BEGIN
- WITH Regs DO BEGIN
- AH := fkt; AL := $01;
- DH := $00; DL := $80;
- CH := $00; CL := $01;
- ES := Seg(pSec);
- BX := Ofs(pSec);
- Intr ($13, Regs);
- END;
- IF (Regs.Flags AND fCarry) <> 0 THEN BEGIN
- Write(ThisProgram + ' Fehler : ', Regs.AH);
- Halt(1);
- END;
- END;
-
- BEGIN
- ClrScr;
- GotoXY(32, 03); Write(ThisProgram);
- GotoXY( 1, 9);
- Disk($02);
- FOR Part := 0 To 3 DO BEGIN
- Write(' ': 10);
- TextAttr := 112;
- Write('[', part + 1, ']'); TextAttr := 7;
- Write(' ': 10);
- IF pSec[$01BE + part * $10] = $80 THEN
- Write('aktiv -- ')
- ELSE
- Write('inaktiv -- ');
- CASE pSec[$01C2 + part * $10] OF
- $00 : WriteLn('keine Partition ',
- 'eingetragen');
- $01,$04,$06 : WriteLn('primäres DOS');
- $02,$03 : WriteLn('Unix/Xenix/AIX');
- $05 : WriteLn('erweitertes DOS');
- $DB : WriteLn('Concurrent DOS');
- $45..$48 : WriteLn('EUMEL');
- { weiter gäbe es da noch HPFS und OS/2-reserved }
- ELSE
- WriteLn('System : ', pSec[$1c2 + part * $10]);
- { Bitte im Programm ergänzen }
- END;
- END;
- REPEAT
- GotoXY(10, 20);
- Write('Aktive Partition ([ESC] = Abbruch): ');
- REPEAT
- aPartKey := ReadKey;
- UNTIL aPartKey IN ['0'..'4', #27];
- IF aPartKey = #27 THEN aPart := 0;
- VAL(aPartKey, aPart, check);
- UNTIL aPart IN [0..4];
- Write(aPart);
- ClrScr;
- IF aPart > 0 THEN BEGIN
- FOR Part := 0 To 3 DO
- pSec[$01BE + part * $10] := $00;
- Dec(aPart);
- pSec[$01BE + aPart * $10] := $80;
- Disk($03);
- WarmBoot;
- END ELSE
- Write(ThisProgram,
- ': Keine Änderungen vorgenommen.');
- END.
-
- (* ------------------------------------------------- *)
- (* Ende von XBOOT.PAS *)
-
-
-