home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / pascal / library / dos / sidekick / actsk.pas
Pascal/Delphi Source File  |  1994-04-11  |  2KB  |  49 lines

  1. program ActivateSidekick;
  2.  
  3. function Sidekick: Boolean;
  4. const
  5.   SKactOffset = $012D;
  6.   SKverOffset = $012A;
  7. type
  8.   RegPack     = record
  9.                   case Integer of
  10.                     1: (AX,BX,CX,DX,BP,SI,DI,DS,ES,Flags: Integer);
  11.                     2: (AL,AH,BL,BH,CL,CH,DL,DH         : Byte);
  12.                 end;
  13.   Address     = record
  14.                   Offset : Integer;
  15.                   Segment: Integer;
  16.                 end;
  17.   SKstr       = array[1..2] of Char;
  18.   SKstrPtr    = ^SKstr;
  19. var
  20.   SKbios08Trap: Address absolute $0000:$0020  { Sidekick timer tick trap };
  21.   SKbios25Trap: Address absolute $0000:$0094  { Sidekick DOS int 25 trap };
  22.   SKfound     : Boolean;
  23.   SKstrCheck  : SKstrPtr;
  24.   R           : RegPack;
  25.  
  26. begin
  27.   with SKbios25Trap do SKstrCheck:=Ptr(Segment, Offset-2);
  28.   SKfound:=(SKstrCheck^ = 'SK');
  29.   if not SKfound then
  30.   begin
  31.     with SKbios08Trap do SKstrCheck:=Ptr(Segment, Offset-4);
  32.     SKfound:=(SKstrCheck^ = 'SK');
  33.   end;
  34.  
  35.   { Check Sidekick version number (must be >= 1.50) }
  36.   SKfound:=(SKfound and (Mem[Seg(SKstrCheck^): SKverOffset] >= 1)
  37.                     and (Mem[Seg(SKstrCheck^): SKverOffset+1] >= 50));
  38.   if SKfound then
  39.   begin
  40.     Mem[Seg(SKstrCheck^): SKactOffset]:=1;  { Set Sidekick activate flag    }
  41.     Intr($28, R);                           { Turn control over to Sidekick }
  42.   end;
  43.   Sidekick:=SKfound;
  44. end  { Sidekick };
  45.  
  46. begin
  47.   if not Sidekick then Writeln('Sidekick 1.50 or later not loaded');
  48. end.
  49.