{ > 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.