home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 19 / CD_ASCQ_19_010295.iso / dos / prg / pas / swag / memory.swg / 0007_GETCACHE.PAS.pas < prev    next >
Pascal/Delphi Source File  |  1993-05-28  |  4KB  |  190 lines

  1. {
  2. >  Well is there a way to find out if Norton Cache is installed?
  3.  
  4. Test For SmartDrv.* , HyperDsk only.    ! Others Untested !
  5. }
  6.  
  7. Program IsThereAnyCache;
  8. Uses
  9.   Dos;
  10.  
  11. Const
  12.   AktCache   : Byte = 0;
  13.   CacheNames : Array[0..10] of String[25] = (
  14.      '*NO* Disk-Cache found','SmartDrv.Exe','SmartDrv.Sys',
  15.      'Compaq SysPro','PC-Cache V6.x','PC-Cache V5.x',
  16.      'HyperDsk ?', 'NCache-F','NCache-S',
  17.      'IBMCache.Sys','Q-Cache (?)');
  18.  
  19. Var
  20.   Version : Integer;
  21.   Regs    : Registers;
  22.  
  23. Function SmartDrvVersion:Integer;
  24. Var
  25.   Bytes : Array[0..$27] of Byte; { return Buffer }
  26.   TFile : Text;
  27. begin
  28.   SmartDrvVersion := -1;  { assume NO smartdrv ! }
  29.   {--------Check For SmartDrv.EXE---------- }
  30.   FillChar( Regs, Sizeof(Regs), 0 );
  31.   Regs.AX := $4A10;  { install-check }
  32.   Intr( $2F, Regs );
  33.   if Regs.FLAGS and FCARRY = 0 then  { OK! }
  34.   begin
  35.     if Regs.AX = $BABE then          { the MAGIC-# }
  36.     begin
  37.       SmartDrvVersion := Integer(Regs.BP);
  38.       AktCache := 1;
  39.       Exit;
  40.     end;
  41.   end;
  42.   { -------Check For SmartDrv.SYS----------- }
  43.   Assign(TFile,'SMARTAAR');
  44.   {$I-}
  45.   Reset(TFile);
  46.   {$I+}
  47.   if IOResult <> 0 then
  48.     Exit; { No SmartDrv }
  49.   FillChar( Regs, Sizeof(Regs), 0 );
  50.   Regs.AX := $4402; { IoCtl }
  51.   Regs.BX := TextRec(TFile).Handle;
  52.   Regs.CX := Sizeof(Bytes);
  53.   Regs.DS := Seg(Bytes);
  54.   Regs.DX := Ofs(Bytes);
  55.   MsDos(Regs); { int 21h }
  56.   Close(TFile);
  57.   if Regs.FLAGS and FCARRY <> 0 then
  58.     Exit;  { Error-# in Regs.AX ...}
  59.   SmartDrvVersion :=  Bytes[$E] + 256 * Bytes[$F];
  60.   AktCache := 2;
  61. end;
  62.  
  63. Function CompaqPro : Integer;
  64. begin
  65.   CompaqPro := -1;
  66.   Regs.AX := $F400;
  67.   Intr($16, Regs);
  68.   if Regs.AH <> $E2 then
  69.     Exit;
  70.   if Regs.AL in[1,2] then
  71.     AktCache := 3;
  72.   CompaqPro := $100;
  73. end;
  74.  
  75. Function PC6 : Integer;   { PCTools v6, v5 }
  76. begin
  77.   PC6 := -1;
  78.   Regs.AX := $FFA5;
  79.   Regs.CX := $1111;
  80.   Intr($16, Regs);
  81.   if Regs.CH <> 0 then
  82.     Exit;
  83.   PC6 := $600;
  84.   AktCache := 4;
  85. end;
  86.  
  87. Function PC5 : Integer;
  88. begin
  89.   PC5 := -1;
  90.   Regs.AH := $2B;
  91.   Regs.CX := $4358; {'CX'}
  92.   Intr($21, Regs);
  93.   if Regs.AL <> 0 then
  94.     Exit;
  95.   PC5 := $500;
  96.   AktCache := 5;
  97. end;
  98.  
  99. Function HyperDsk : Integer;   { 4.20+ ... }
  100. begin
  101.   Hyperdsk:= -1;
  102.   Regs.AX := $DF00;
  103.   Regs.BX := $4448; {'DH'}
  104.   Intr($2F, Regs);
  105.   if Regs.AL <> $FF   then
  106.     Exit;
  107.   if Regs.CX <> $5948 then
  108.     Exit; { not a "Hyper" product }
  109.   HyperDsk := Regs.DX;
  110.   AktCache := 6;
  111. end;
  112.  
  113. Function Norton : Integer;
  114. begin
  115.   Norton := -1;
  116.   Regs.AX := $FE00;
  117.   Regs.DI := $4E55; {'NU'}
  118.   Regs.SI := $4353; {'CS' test For Ncache-S v5 }
  119.   Intr($2F, Regs);
  120.   if Regs.AH = $00 then
  121.   begin
  122.     Norton := $500;
  123.     AktCache := 7;
  124.     Exit;
  125.   end;
  126.   { Test For Ncache-F v5 / v6 }
  127.   Regs.AX := $FE00;
  128.   Regs.DI := $4E55; {'NU'}
  129.   Regs.SI := $4353; {'CF' test For Ncache-F v5, V6+ }
  130.   Intr($2F, Regs);
  131.   if Regs.AH <> $00 then
  132.     Exit;
  133.   Norton := $600;
  134.   AktCache := 8;
  135. end;
  136.  
  137. Function IBM : Integer;
  138. begin
  139.   IBM:= -1;
  140.   Regs.AX := $1D01;
  141.   Regs.Dl := $2; { drive C: }
  142.   Intr($13, Regs);
  143.   if Regs.Flags and FCarry <> 0 then
  144.     Exit;
  145.   { ES:(BX+$22) -> ASCII-Version-# }
  146.   Inc( Regs.BX, $22 );
  147.   Regs.AH := (Mem[Regs.ES : Regs.BX] - $30 ) shl 4;
  148.   Regs.AH := Regs.AH or (Mem[Regs.ES : Regs.BX + 1] - $30 );
  149.   Regs.AL := (Mem[Regs.ES : Regs.BX + 2] - $30 ) shl 4;
  150.   Regs.AL := Regs.AL or (Mem[Regs.ES : Regs.BX + 3] - $30 );
  151.   IBM := Regs.AX;
  152.   AktCache := 9;
  153. end;
  154.  
  155. Function QCache : Integer;
  156. begin
  157.   QCache := -1;
  158.   Regs.AH := $27;
  159.   Regs.BX := 0;
  160.   intr($13,Regs);
  161.   if Regs.BX = 0 then
  162.     Exit;
  163.   QCache := Regs.BX;  { ??? }
  164.   AktCache := 10;
  165. end;
  166.  
  167. begin
  168.   Writeln('DISK-CACHE-CHECK v1.00    Norbert Igl ''1/93');
  169.   Version := SmartDrvVersion;
  170.   if Aktcache = 0 then
  171.     Version := Hyperdsk;
  172.   if Aktcache = 0 then
  173.     Version := Norton;
  174.   if Aktcache = 0 then
  175.     Version := PC6;
  176.   if Aktcache = 0 then
  177.     Version := PC5;
  178.   if Aktcache = 0 then
  179.     Version := IBM;
  180.   if Aktcache = 0 then
  181.     Version := QCache;
  182.   if Aktcache = 0 then
  183.     Version := CompaqPro;
  184.  
  185.   Write(CacheNames[AktCache]);
  186.   if AktCache <> 0 then
  187.     Writeln(' (V', Version div 256, '.', Version mod 256, ') installed.');
  188.   Writeln;
  189. end.
  190.