home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / extra18 / xboot / xboot.pas < prev   
Encoding:
Pascal/Delphi Source File  |  1992-02-13  |  2.7 KB  |  109 lines

  1. {$A+,B-,D+,E+,F-,G-,I-,L-,N-,O-,R-,S-,V-,X-}
  2. {$M 1024,0,0}
  3. (* ------------------------------------------------- *)
  4. (*                  XBOOT.PAS v1.1                   *)
  5. (*   (c) 1991 Kai-Kristian Dopheide & DMV-Verlag     *)
  6. (* ------------------------------------------------- *)
  7.  
  8. PROGRAM xBoot;
  9.  
  10. USES Dos, Crt, Reboot;
  11.  
  12. VAR
  13.   pSec        : ARRAY [0..511] OF BYTE;
  14.   Part, aPart : BYTE;
  15.   aPartKey    : CHAR;
  16.   check       : INTEGER;
  17.  
  18. FUNCTION DosVersion: WORD;
  19. BEGIN
  20.   DosVersion := Swap(Dos.DosVersion);
  21. END;
  22.  
  23. FUNCTION ThisProgram: STRING;
  24. VAR
  25.   Dir  : DirStr;
  26.   Name : NameStr;
  27.   Ext  : ExtStr;
  28. BEGIN
  29.   IF DosVersion >= $0300 THEN BEGIN
  30.     FSplit(ParamStr(0), Dir, Name, Ext);
  31.     ThisProgram := Name;
  32.   END ELSE
  33.     ThisProgram := 'XBOOT';
  34. END;
  35.  
  36. PROCEDURE Disk(fkt : BYTE);
  37. VAR
  38.   Regs : Registers;
  39. BEGIN
  40.   WITH Regs DO BEGIN
  41.     AH := fkt; AL := $01;
  42.     DH := $00; DL := $80;
  43.     CH := $00; CL := $01;
  44.     ES := Seg(pSec);
  45.     BX := Ofs(pSec);
  46.     Intr ($13, Regs);
  47.   END;
  48.   IF (Regs.Flags AND fCarry) <> 0 THEN BEGIN
  49.     Write(ThisProgram + ' Fehler : ', Regs.AH);
  50.     Halt(1);
  51.   END;
  52. END;
  53.  
  54. BEGIN
  55.   ClrScr;
  56.   GotoXY(32, 03); Write(ThisProgram);
  57.   GotoXY( 1,  9);
  58.   Disk($02);
  59.   FOR Part := 0 To 3 DO BEGIN
  60.     Write(' ': 10);
  61.     TextAttr := 112;
  62.     Write('[', part + 1, ']'); TextAttr := 7;
  63.     Write(' ': 10);
  64.     IF pSec[$01BE + part * $10] = $80 THEN
  65.        Write('aktiv    --  ')
  66.      ELSE
  67.        Write('inaktiv  --  ');
  68.     CASE pSec[$01C2 + part * $10] OF
  69.       $00         : WriteLn('keine Partition ',
  70.                             'eingetragen');
  71.       $01,$04,$06 : WriteLn('primäres DOS');
  72.       $02,$03     : WriteLn('Unix/Xenix/AIX');
  73.       $05         : WriteLn('erweitertes DOS');
  74.       $DB         : WriteLn('Concurrent DOS');
  75.       $45..$48    : WriteLn('EUMEL');
  76.     { weiter gäbe es da noch HPFS und OS/2-reserved }
  77.     ELSE
  78.       WriteLn('System : ', pSec[$1c2 + part * $10]);
  79.       { Bitte im Programm ergänzen }
  80.     END;
  81.   END;
  82.   REPEAT
  83.     GotoXY(10, 20);
  84.     Write('Aktive Partition ([ESC] = Abbruch): ');
  85.     REPEAT
  86.       aPartKey := ReadKey;
  87.     UNTIL aPartKey IN ['0'..'4', #27];
  88.     IF aPartKey = #27 THEN aPart := 0;
  89.     VAL(aPartKey, aPart, check);
  90.   UNTIL aPart IN [0..4];
  91.   Write(aPart);
  92.   ClrScr;
  93.   IF aPart > 0 THEN BEGIN
  94.     FOR Part := 0 To 3 DO
  95.       pSec[$01BE + part * $10] := $00;
  96.     Dec(aPart);
  97.     pSec[$01BE + aPart * $10] := $80;
  98.     Disk($03);
  99.     WarmBoot;
  100.   END ELSE
  101.     Write(ThisProgram,
  102.           ': Keine Änderungen vorgenommen.');
  103. END.
  104.  
  105. (* ------------------------------------------------- *)
  106. (*               Ende von XBOOT.PAS                  *)
  107.         
  108.         
  109.