[Back to MEMORY SWAG index] [Back to Main SWAG index] [Original]
{
> Well is there a way to find out if Norton Cache is installed?
Test For SmartDrv.* , HyperDsk only. ! Others Untested !
}
Program IsThereAnyCache;
Uses
Dos;
Const
AktCache : Byte = 0;
CacheNames : Array[0..10] of String[25] = (
'*NO* Disk-Cache found','SmartDrv.Exe','SmartDrv.Sys',
'Compaq SysPro','PC-Cache V6.x','PC-Cache V5.x',
'HyperDsk ?', 'NCache-F','NCache-S',
'IBMCache.Sys','Q-Cache (?)');
Var
Version : Integer;
Regs : Registers;
Function SmartDrvVersion:Integer;
Var
Bytes : Array[0..$27] of Byte; { return Buffer }
TFile : Text;
begin
SmartDrvVersion := -1; { assume NO smartdrv ! }
{--------Check For SmartDrv.EXE---------- }
FillChar( Regs, Sizeof(Regs), 0 );
Regs.AX := $4A10; { install-check }
Intr( $2F, Regs );
if Regs.FLAGS and FCARRY = 0 then { OK! }
begin
if Regs.AX = $BABE then { the MAGIC-# }
begin
SmartDrvVersion := Integer(Regs.BP);
AktCache := 1;
Exit;
end;
end;
{ -------Check For SmartDrv.SYS----------- }
Assign(TFile,'SMARTAAR');
{$I-}
Reset(TFile);
{$I+}
if IOResult <> 0 then
Exit; { No SmartDrv }
FillChar( Regs, Sizeof(Regs), 0 );
Regs.AX := $4402; { IoCtl }
Regs.BX := TextRec(TFile).Handle;
Regs.CX := Sizeof(Bytes);
Regs.DS := Seg(Bytes);
Regs.DX := Ofs(Bytes);
MsDos(Regs); { int 21h }
Close(TFile);
if Regs.FLAGS and FCARRY <> 0 then
Exit; { Error-# in Regs.AX ...}
SmartDrvVersion := Bytes[$E] + 256 * Bytes[$F];
AktCache := 2;
end;
Function CompaqPro : Integer;
begin
CompaqPro := -1;
Regs.AX := $F400;
Intr($16, Regs);
if Regs.AH <> $E2 then
Exit;
if Regs.AL in[1,2] then
AktCache := 3;
CompaqPro := $100;
end;
Function PC6 : Integer; { PCTools v6, v5 }
begin
PC6 := -1;
Regs.AX := $FFA5;
Regs.CX := $1111;
Intr($16, Regs);
if Regs.CH <> 0 then
Exit;
PC6 := $600;
AktCache := 4;
end;
Function PC5 : Integer;
begin
PC5 := -1;
Regs.AH := $2B;
Regs.CX := $4358; {'CX'}
Intr($21, Regs);
if Regs.AL <> 0 then
Exit;
PC5 := $500;
AktCache := 5;
end;
Function HyperDsk : Integer; { 4.20+ ... }
begin
Hyperdsk:= -1;
Regs.AX := $DF00;
Regs.BX := $4448; {'DH'}
Intr($2F, Regs);
if Regs.AL <> $FF then
Exit;
if Regs.CX <> $5948 then
Exit; { not a "Hyper" product }
HyperDsk := Regs.DX;
AktCache := 6;
end;
Function Norton : Integer;
begin
Norton := -1;
Regs.AX := $FE00;
Regs.DI := $4E55; {'NU'}
Regs.SI := $4353; {'CS' test For Ncache-S v5 }
Intr($2F, Regs);
if Regs.AH = $00 then
begin
Norton := $500;
AktCache := 7;
Exit;
end;
{ Test For Ncache-F v5 / v6 }
Regs.AX := $FE00;
Regs.DI := $4E55; {'NU'}
Regs.SI := $4353; {'CF' test For Ncache-F v5, V6+ }
Intr($2F, Regs);
if Regs.AH <> $00 then
Exit;
Norton := $600;
AktCache := 8;
end;
Function IBM : Integer;
begin
IBM:= -1;
Regs.AX := $1D01;
Regs.Dl := $2; { drive C: }
Intr($13, Regs);
if Regs.Flags and FCarry <> 0 then
Exit;
{ ES:(BX+$22) -> ASCII-Version-# }
Inc( Regs.BX, $22 );
Regs.AH := (Mem[Regs.ES : Regs.BX] - $30 ) shl 4;
Regs.AH := Regs.AH or (Mem[Regs.ES : Regs.BX + 1] - $30 );
Regs.AL := (Mem[Regs.ES : Regs.BX + 2] - $30 ) shl 4;
Regs.AL := Regs.AL or (Mem[Regs.ES : Regs.BX + 3] - $30 );
IBM := Regs.AX;
AktCache := 9;
end;
Function QCache : Integer;
begin
QCache := -1;
Regs.AH := $27;
Regs.BX := 0;
intr($13,Regs);
if Regs.BX = 0 then
Exit;
QCache := Regs.BX; { ??? }
AktCache := 10;
end;
begin
Writeln('DISK-CACHE-CHECK v1.00 Norbert Igl ''1/93');
Version := SmartDrvVersion;
if Aktcache = 0 then
Version := Hyperdsk;
if Aktcache = 0 then
Version := Norton;
if Aktcache = 0 then
Version := PC6;
if Aktcache = 0 then
Version := PC5;
if Aktcache = 0 then
Version := IBM;
if Aktcache = 0 then
Version := QCache;
if Aktcache = 0 then
Version := CompaqPro;
Write(CacheNames[AktCache]);
if AktCache <> 0 then
Writeln(' (V', Version div 256, '.', Version mod 256, ') installed.');
Writeln;
end.
[Back to MEMORY SWAG index] [Back to Main SWAG index] [Original]