home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / cebit_91 / boot / absolute.pas next >
Encoding:
Pascal/Delphi Source File  |  1991-03-01  |  2.6 KB  |  72 lines

  1. (*--------------------------------------------------------*)
  2. (*                     ABSOLUTE.PAS                       *)
  3. (*              Unit für BOOT.PAS / PREP.PAS              *)
  4. (*              (c) 1991 J. Braun & TOOLBOX               *)
  5. (*--------------------------------------------------------*)
  6. {$A-,B-,D+,E-,F-,G-,I-,L+,N-,O-,R-,S-,V-,X-}
  7. UNIT Absolute;
  8.  
  9. INTERFACE
  10. CONST
  11.   SysDir  : STRING[9] = 'C:\SYSTEM';
  12.   SysIDs  : ARRAY[1..4] OF STRING[9] =
  13.             ('IBMBIOCOM' ,'IOSYS', 'OS2LDR', 'DRBIOSSYS');
  14.   Systems : ARRAY [1..4] OF STRING[3] =
  15.             ('IBM', 'DOS', 'OS2', 'DRS');
  16. VAR
  17.   BootSector: ARRAY[0..511] OF CHAR;
  18.  
  19. PROCEDURE AbsoluteRead;
  20. PROCEDURE AbsoluteWrite;
  21. FUNCTION  CheckOldSystem : BYTE;
  22.  
  23. IMPLEMENTATION USES Dos;
  24. VAR Regs : Registers; i : WORD;
  25.  
  26. PROCEDURE AbsoluteRead;
  27. BEGIN
  28.   WITH Regs DO BEGIN
  29.     AH := 2;               (* Funktion 2: Absolutes Lesen *)
  30.     AL := 1;               (* Anzahl der Sektoren         *)
  31.     CH := 0;               (* Zylinder                    *)
  32.     CL := 1;               (* Sektornummer                *)
  33.     DH := 1;               (* Seite                       *)
  34.     DL := $80;             (* Laufwerk C:                 *)
  35.     ES := Seg(BootSector); (* Segment Puffervariable      *)
  36.     BX := Ofs(BootSector); (* Offset Puffervariable       *)
  37.     Intr($13, Regs);       (* BIOS-Intr.: Diskette/Platte *)
  38.   END;
  39. END;
  40.  
  41. PROCEDURE AbsoluteWrite;
  42. BEGIN
  43.   WITH Regs DO BEGIN
  44.     AH := 3;               (* Funktion 3: Absolutes Lesen *)
  45.     AL := 1;               (* Anzahl der Sektoren         *)
  46.     CH := 0;               (* Zylinder                    *)
  47.     CL := 1;               (* Sektornummer                *)
  48.     DH := 1;               (* Seite                       *)
  49.     DL := $80;             (* Laufwerk C:                 *)
  50.     ES := Seg(BootSector); (* Segment Puffervariable      *)
  51.     BX := Ofs(BootSector); (* Offset Puffervariable       *)
  52.     Intr($13, Regs);       (* BIOS-Intr.: Diskette/Platte *)
  53.   END;
  54. END;
  55.  
  56. FUNCTION CheckOldSystem: BYTE; (* Überprüfung akt. System *)
  57. VAR
  58.   i : WORD; k : BYTE; Buffer : STRING;
  59. BEGIN
  60.   Buffer := ''; i := 0; AbsoluteRead;
  61.   FOR i := 20 TO 511 DO IF BootSector[i] IN ['A'..'Z', '2'] THEN
  62.     Buffer := Buffer + BootSector[i];
  63.   CheckOldSystem := 0;
  64.   FOR k := 1 TO 4 DO IF Pos(SysIDs[k], Buffer) > 0 THEN
  65.     CheckOldSystem := k;
  66. END;
  67.  
  68. BEGIN
  69.   FOR i := 0 TO 511 DO BootSector[i] := #0; (* Initialis. *)
  70. END.
  71. (*--------------------------------------------------------*)
  72. (*                  Ende von ABSOLUTE.PAS                 *)