home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The World of Computer Software
/
World_Of_Computer_Software-02-385-Vol-1of3.iso
/
i
/
ifp1s156.zip
/
PAGE_18.PAS
< prev
next >
Wrap
Pascal/Delphi Source File
|
1992-12-30
|
42KB
|
1,704 lines
unit page_18;
interface
uses crt, dos, ifpextrn, ifpglobl, ifpcomon;
procedure page18;
implementation
const
winclass: array[0..6] of string[21] = ('vector plotter', 'raster display',
'raster printer', 'raster camera', 'character-stream, PLP',
'Metafile, VDM', 'display-file');
pcAstatus: array[$FFFC..$FFFF] of string[23] = ('resident and active',
'resident and not active', 'memory resident mode',
'automatic mode');
pcAspd: array[0..$F] of word = (50, 75, 110, 134, 150, 300, 600, 1200, 1800,
2000, 2400, 4800, 7200, 9600, 19200, 38400);
KeyScan: array[0..255] of string[5] =
{00}( '??', 'ESC', '1', '2', '3', '4', '5', '6', '7', '8',
{10} '9', '0', '-', '=', 'BS', 'TAB', 'Q', 'W', 'E', 'R',
{20} 'T', 'Y', 'U', 'I', 'O', 'P', '[', ']', 'ENT', '??',
{30} 'A', 'S', 'D', 'F', 'G', 'H', 'J', 'K', 'L', ';',
{40} '''', '`', '??', '\', 'Z', 'X', 'C', 'V', 'B', 'N',
{50} 'M', ',', '.', '/', 'kp*', '??', '??', 'SP', '??', 'F1',
{60} 'F2', 'F3', 'F4', 'F5', 'F6', 'F7', 'F8', 'F9', 'F10', '??',
{70} '??', 'HOME', 'UP','PGUP', 'kp-','LEFT', 'kp5','RIGHT','kp+', 'END',
{80}'DOWN', 'PGDN','INS', 'DEL', 'F1', 'F2', 'F3', 'F4', 'F5', 'F6',
{90} 'F7', 'F8', 'F9', 'F10', 'F1', 'F2', 'F3', 'F4', 'F5', 'F6',
{100} 'F7', 'F8', 'F9', 'F10', 'F1', 'F2', 'F3', 'F4', 'F5', 'F6',
{110} 'F7', 'F8', 'F9', 'F10', '??','LEFT','RIGHT','END','PGDN','HOME',
{120} '??', '??', '??', '??', '??', '??', '??', '??', '??', '??',
{130} '??', '??','PGUP', 'F11', 'F12', 'F11', 'F12', 'F11', 'F12', 'F11',
{140} 'F12', 'UP', 'kp-', 'kp5', 'kp+','DOWN', 'INS', 'DEL', '??', 'kp/',
{150} '??','HOME', 'UP','PGUP', '??','LEFT', '??','RIGHT', '??', 'END',
{160}'DOWN','PGDN', 'INS', 'DEL', 'kp/', '??','kpENT', '??', '??', '??',
{170} '??', '??', '??', '??', '??', '??', '??', '??', '??', '??',
{180} '??', '??', '??', '??', '??', '??', '??', '??', '??', '??',
{190} '??', '??', '??', '??', '??', '??', '??', '??', '??', '??',
{200} '??', '??', '??', '??', '??', '??', '??', '??', '??', '??',
{210} '??', '??', '??', '??', '??', '??', '??', '??', '??', '??',
{220} '??', '??', '??', '??', '??', '??', '??', '??', '??', '??',
{230} '??', '??', '??', '??', '??', '??', '??', '??', '??', '??',
{240} '??', '??', '??', '??', '??', '??', '??', '??', '??', '??',
{250} '??', '??', '??', '??', '??', '??');
procedure page18;
type
smartdrvt = record
write_through: byte;
write_buffered: byte;
cache_enabled: byte;
drivertype: byte;
cticks: word;
locked: byte;
reboot_flush: byte;
full_track_write: byte;
buffering_type: byte;
origInt13ofs: word;
origInt13seg: word;
minorversion: byte;
majorversion: byte;
reserved: word;
secs_read: word;
secs_in_cache: word;
secs_in_trk_buf: word;
cache_hitrate: byte;
track_buf_hitrate: byte;
total_tracks: word;
tracks_used: word;
locked_tracks: word;
dirty_tracks: word;
current_size: word;
original_size: word;
minimum_size: word;
lock_pointer_ofs: word;
lock_pointer_seg: word;
end;
fossilbuft = record
fbufsize: word;
spec: byte;
rev: byte;
idstrofs: word;
idstrseg: word;
inbufsize: word;
infree: word;
outbufsize: word;
outfree: word;
scrwidth: byte;
scrlen: byte;
baudrate: byte;
extra: array[1..13] of byte;
end;
vfossilbuft = record
fbufsize: word;
ver: word;
rev: word;
hifunc: word
end;
stackerbuft = record
signature: word;
unknown: word;
ddofs: word;
ddseg: word
end;
T386maxbuf = record
version: byte;
signature: array[1..6] of char;
verstr: array[1..4] of char;
lowseg: word;
unkw1: word;
unkw2: word;
flags1: word;
unk1: array [1..16] of byte;
int15port: word;
int67port: word;
unkw3: word;
unkw4: word;
unkd1: longint;
unkd2: longint;
sysconfig: word;
unk2: array [1..8] of byte;
flags2: word;
flags3: word;
flags4: word;
unkw5: word;
extfree: word;
unkd3: longint;
unkw6: word;
unkd4: longint;
flags5: word;
oldint21ofs: word;
oldint21seg: word;
emsofs: word;
emsseg: word;
extra: byte;
end;
var
i : 1..63;
xbool1 : boolean;
xbool2 : boolean;
xbool3 : boolean;
xchar : char;
xword1: word;
xword2: word;
regs: registers;
QEMMid: byte;
foundit: boolean;
xbyte, xbyte2: byte;
s: string;
fossilbuf: fossilbuft;
vfossilbuf: vfossilbuft;
smartdrvbuf: smartdrvt;
stackerbuf: stackerbuft;
xlong: longint;
V386maxbuf: T386maxbuf;
function windev(device: byte): word;
var
regs: registers;
saveit: word;
begin
with regs do
begin
AX:=$1682;
Intr($2F, regs);
AX:=$170A;
DX:=device;
Intr($2F, regs);
windev:=AX
end
end; {windev}
procedure nortonstatus(b: byte);
begin
case b of
0: Write('disabled');
1: Write('enabled')
else
Write('unknown')
end
end; {nortonstatus}
begin (* procedure page_18 *)
caption1('----Shells and Shell enhancers----');
Writeln;
caption2('JP Software 4DOS');
with regs do
begin
AX:=$D44D;
BX:=0;
CX:=0;
DX:=0;
Intr($2F, regs);
if AX <> $44DD then
Writeln('no')
else
begin
Writeln('yes');
caption3('version');
xword1:=BH;
Write(BL, decimal);
zeropad(xword1);
caption3('shell no.');
Write(DL);
caption3('PSP segment');
Writeln(hex(CX, 4))
end;
end;
pause3(-1);
if endit then
Exit;
caption2('JP Software KSTACK.COM');
with regs do
begin
AX:=$D44F;
BX:=0;
CX:=0;
DX:=0;
Intr($2F, regs);
yesorno(AX = $44DD);
end;
pause3(-2);
if endit then
Exit;
caption2('Norton NDOS');
with regs do
begin
AX:=$E44D;
BX:=0;
CX:=0;
DX:=0;
Intr($2F, regs);
if AX <> $44EE then
Writeln('no')
else
begin
Writeln('yes');
caption3('version');
xword1:=BH;
Write(BL, decimal);
zeropad(xword1);
caption3('shell no.');
Write(DL);
caption3('PSP segment');
Writeln(hex(CX, 4))
end;
end;
pause3(-1);
if endit then
Exit;
caption2('WildUnix');
with regs do
begin
AH:=$4E;
DS:=0;
DX:=0;
MsDos(regs);
yesorno(AH = $99);
end;
pause3(-1);
if endit then
Exit;
caption2('Anarkey');
with regs do
begin
AX:=$E300;
Intr($2F, regs);
case AL of
$00: Writeln('no');
$FE: Writeln('yes; but suspended');
$FF: Writeln('yes; and active');
else
Writeln('???')
end
end;
pause3(-1);
if endit then
Exit;
caption1('----DOS Extenders----');
Writeln;
caption2('DOS/16M');
with regs do
begin
AX:=$BF02;
DX:=0;
Intr($15, regs);
yesorno(DX <> 0);
end;
pause3(-4);
if endit then
Exit;
caption2('Phar Lap DOS Extender');
xbool1:=false;
xbyte:=1;
with regs do
repeat
AX:=$ED00;
BL:=xbyte;
Intr($2F, regs);
if (AL = $FF) and (SI = $5048 {PH}) and (DI = $4152 {AR}) then
begin
xbool1:=true;
Write('yes');
caption3('type');
case xbyte of
1: Write('286dosx v1.3+ SDK');
2: Write('286dosx v1.3+ RTK');
3: Write('386dosx v4.0+ SDK');
4: Write('386dosx v4.0+ RTK')
end;
caption3('version');
Write(CH, decimal);
zeropad(CL);
end;
Inc(xbyte);
until xbyte > 4;
if not xbool1 then
Writeln('no');
pause3(-4);
if endit then
Exit;
caption1('----Memory Managers and Memory utilities----');
Writeln;
caption2('QEMM');
with regs do
begin
QEMMid:=$D2;
foundit:=false;
repeat
AH:=QEMMId;
AL:=0;
BX:=$5144; {'QD'}
CX:=$4D45; {'ME'}
DX:=$4D30; {'M0'}
Intr($2F, regs);
if (AL = $FF) and (BX = $4D45) and (CX = $4D44) and (DX = $5652) then
foundit:=true
else
begin
if QEMMid < $FF then
Inc(QEMMid)
else
QEMMid:=$C0;
end;
until foundit or (QEMMid = $D2);
if not foundit then
Writeln('no')
else
begin
AH:=QEMMid;
AL:=1;
BX:=$5145; {'QE'}
CX:=$4D4D; {'MM'}
DX:=$3432; {'42'}
Intr($2F, regs);
if BX = $4F4B {'OK'} then
begin
Write('yes');
caption3('API entry');
segofs(ES, DI);
xlong:=longint(ES) shl 16 + DI;
caption3('version');
AH:=3;
longcall(xlong, regs);
if not nocarry(regs) then
Write('error')
else
Write(unBCD(BH), decimal, addzero(unBCD(BL)));
xword:=BX;
caption3('status');
AH:=0;
longcall(xlong, regs);
if not nocarry(regs) then
Write('error')
else
if AL and 1 = 1 then
Write('OFF')
else
if AL and 2 = 2 then
Write('Auto')
else
Write('ON');
Writeln;
caption3('High RAM');
AH:=$12;
longcall(xlong, regs);
if not nocarry(regs) then
Write('error')
else
begin
yesorno2(BX <> 0);
if BX <> 0 then
begin
caption3('first MCB at');
Write(hex(BX, 4));
end;
end;
if Hi(xword) >= 6 then
begin
caption3('Stealth');
AX:=$1E00;
longcall(xlong, regs);
if not nocarry(regs) then
Write('error')
else
begin
case CL of
0: Write('OFF');
$46: Write('Frame');
$4D: Write('Map')
else
Write('????');
end;
if (CL = $46) or (CL = $4D) then
begin
caption3('Stealthed ROMs');
AX:=$1E01;
longcall(xlong, regs);
if not nocarry(regs) then
Write('error')
else
Write(BX);
end;
end;
end;
Writeln;
end
else
Writeln('no')
end;
caption2('Quarterdeck Manifest (memory resident)');
if not foundit then
Writeln('no')
else
begin
AH:=QEMMid;
AL:=1;
BX:=$4D41; {'MA'}
CX:=$4E49; {'NI'}
DX:=$4645; {'FE'}
Intr($2F, regs);
yesorno(BX = $5354 {'ST'});
end;
caption2('Quarterdeck VIDRAM');
if not foundit then
Writeln('no')
else
begin
AH:=QEMMid;
AL:=1;
BX:=$5649; {'VI'}
CX:=$4452; {'DR'}
DX:=$414D; {'AM'}
Intr($2F, regs);
if BX = $4F4B {'OK'} then
begin
Write('yes');
caption3('at code segment');
Writeln(hex(ES, 4))
end
else
Writeln('no');
end
end;
pause3(-2);
if endit then
Exit;
caption2('386^Max');
with regs do
begin
s:='386MAX$$'#0;
AX:=$3D00;
DS:=Seg(s);
DX:=Ofs(s) + 1;
MsDos(regs);
if not nocarry(regs) then
Writeln('no')
else
begin
xbyte:=AX;
AX:=$4402;
BX:=xbyte;
CX:=$5A;
DS:=Seg(V386Maxbuf);
DX:=Ofs(V386Maxbuf);
V386Maxbuf.version:=3;
MsDos(regs);
if not nocarry(regs) then
Writeln('Maybe; IOCTL call failed')
else
with V386maxbuf do
if signature <> '386MAX' then
Writeln('No; wrong signature found - "', signature, '"')
else
begin
Write('yes');
caption3('version');
Write(verstr[1], decimal, verstr[3], verstr[4]);
caption3('at segment');
Writeln(hex(lowseg, 4));
caption3('EMS active');
yesorno2(flags1 and $0080 = $0080);
caption3('Windows 3 support');
yesorno(flags4 and 1 <> 1);
end;
AH:=$3E;
BX:=xbyte;
MsDos(regs);
end
end;
pause3(-1);
if endit then
Exit;
Caption2('MICEMM');
if not EMSOK then
Writeln('no')
else
with Regs do
begin
AX:=$58F0;
Intr($67, Regs);
if AH <> 0 then
Writeln('no')
else
begin
Write('yes');
Caption3('Code Segment');
Writeln(Hex(BX, 4));
end;
end;
pause3(-1);
if EndIt then
Exit;
Caption2('EMM386');
if not EMSOK then
Writeln('no')
else
with Regs do
begin
AX:=$FFA5;
Intr($67, Regs);
if AX <> $845A then
Writeln('no')
else
begin
Write('yes');
Caption3('API entry');
SegOfs(BX, CX);
Caption3('Status');
xlong:=longint(BX) shl 16 + CX;
AH:=0;
LongCall(xlong, Regs);
if AL and 1 = 1 then
Write('ON')
else
Write('OFF');
Caption3('Weitek');
AH:=2;
AL:=0;
LongCall(xlong, Regs);
if AL and 1 = 1 then
begin
Write('present ');
if AL and 2 = 2 then
Writeln('and enabled')
else
Writeln('but disabled')
end
else
Writeln('not present');
end;
end;
pause3(-4);
if endit then
Exit;
caption2('Virtual DMA Spec. (VDS)');
with regs do
begin
AX:=$354B;
MsDos(regs);
if (ES = 0) and (BX = 0) then
Writeln('no')
else
begin
AX:=$8102;
DX:=0;
Flags:=FCarry;
Intr($4B, regs);
yesorno2(nocarry(regs));
if nocarry(regs) then
begin
caption3('version');
Write(AH, decimal, hex(AL, 2));
caption3('product');
case BX of
$0000: Write('QMAPS/HPMM');
$0001: Write('EMM386');
$0003: Write('Windows 3');
$4560: Write('386^Max');
$4D53: Write('Memory Cmdr');
$5145: Write('QEMM')
else
Write(BX);
end;
caption3('rev.');
Writeln(CH, decimal, hex(CL, 2));
caption3('max. DMA buffer size');
Write((longint(SI) * 65536 + DI)/1024:0:1, 'K');
caption3('transfers OK in');
if DX and 1 = 1 then
Writeln('First Meg only')
else
Writeln('any address');
caption3('buffer in first meg');
yesorno2(DX and 2 = 2);
caption3('auto-remap enabled');
yesorno2(DX and 4 = 4);
caption3('contiguous memory');
yesorno(DX and 8 = 8);
caption3('BIOS Data bit set');
yesorno(Mem[$40:$7B] and $20 = $20);
end
else
Writeln;
end;
end;
pause3(-6);
if endit then
Exit;
caption1('----Multi-Taskers and Task Switchers + Utilities---');
Writeln;
caption2('Quarterdeck Desqview');
if OSMajor >= 10 then
Writeln('no')
else
begin
with regs do
begin
AX:=$2B01;
CX:=$4445; {DE}
DX:=$5351; {SQ}
MsDos(regs);
if AL = $FF then
Writeln('no')
else
begin
Write('yes');
caption3('version');
if BX = $0002 then
Writeln('2', decimal, '00')
else
begin
Write(BH, decimal);
zeropad(BL);
Writeln;
end;
caption3('window number');
AX:=$DE07;
Intr($15, regs);
Write(AX);
caption3('true video mode');
AX:=$DE1E;
Intr($15, regs);
Write(BL);
caption3('width');
Write(CH);
caption3('height');
Writeln(CL);
caption3(' common memory -> avail');
AX:=$DE04;
Intr($15, regs);
Write(BX:6);
caption3('largest');
Write(CX:6);
caption3('total');
Writeln(DX:6);
caption3('conventional memory -> avail');
AX:=$DE05;
Intr($15, regs);
Write(BX:5, 'K');
caption3('largest');
Write(CX:5, 'K');
caption3('total');
Writeln(DX:5, 'K');
caption3(' expanded memory -> avail');
AX:=$DE06;
Intr($15, regs);
Write(BX:5, 'K');
caption3('largest');
Write(CX:5, 'K');
caption3('total');
Writeln(DX:5, 'K');
end;
end;
end;
pause3(-1);
if endit then
Exit;
caption2('DOS 5 task switcher');
with regs do
begin
AX:=$4B02;
BX:=0;
ES:=0;
DI:=0;
Intr($2F, regs);
if nocarry(regs) and (AX = 0) and (BX = 0) then
begin
Write('yes');
caption3('switcher entry point');
segofs(ES, DI);
Writeln;
end
else
Writeln('no');
end;
pause3(-1);
if endit then
Exit;
caption2('DRDOS TaskMAX');
with regs do
begin
AX:=$2700;
BX:=0;
CX:=0;
Intr($2F, regs);
if AL <> $FF then
Writeln('no')
else
begin
Write('yes');
caption3('version');
AX:=$2701;
Intr($2F, regs);
Write(DX);
caption3('maximum tasks');
Write(AX);
caption3('active tasks');
Writeln(CX)
end;
end;
pause3(-1);
if endit then
Exit;
caption2('TAME');
with regs do
begin
AX:=$2B01;
CX:=$5441;
DX:=$4D45;
MsDos(regs);
if AL <> 2 then
Writeln('no')
else
begin
Write('yes');
caption3('data area');
Writeln(hex(ES, 4), ':', hex(DX, 4))
end
end;
pause3(-6);
if endit then
Exit;
caption2('Microsoft Windows');
with regs do
begin
AX:=$1600;
Intr($2F, regs);
case AL of
$01,$FF: begin
Writeln('yes');
caption3('version');
Writeln('Windows/386 2.x')
end;
$00,$80: begin
AX:=$4680;
Intr($2F, regs);
if AX = 0 then
begin
Writeln('yes');
caption3('mode');
Writeln('Real or Standard')
end
else
Writeln('no');
end;
$02..$7F,$81..$FE: begin
Writeln('yes');
caption3('version');
Write(AL, decimal, AH, ' enhanced mode');
caption3('Virtual Machine ID');
AX:=$1683;
Intr($2F, regs);
Writeln(BX);
caption3('WINOLDAP support');
AX:=$1700;
Intr($2F, regs);
if AX = $1700 then
Writeln('no')
else
begin
Write('yes');
caption3('version');
Writeln(AL, decimal, AH);
end;
caption3('Driver version');
xword1:=windev(0);
Write(Hi(xword1), decimal, Lo(xword1));
caption3('Device type');
Writeln(winclass[Lo(windev(2))]);
caption3('Pixel width');
Write(windev(8));
caption3('height');
Write(windev($A));
caption3('colors');
Write(windev($18));
caption3('bits/pixel');
Write(windev($C));
caption3('bit planes');
Writeln(windev($E));
caption3('X aspect');
Write(windev($28));
caption3('Y aspect');
Writeln(windev($2A));
caption3('brushes');
Write(windev($10));
caption3('pens');
Write(windev($12));
caption3('markers');
Write(windev($14));
caption3('fonts');
Writeln(windev($16));
end;
end; {case}
end;
pause3(-1);
if endit then
Exit;
caption1('----Norton Utilities----');
Writeln;
caption2('Norton NCACHE');
with regs do
begin
AX:=$FE00;
BX:=0;
CX:=0;
DX:=0;
DI:=$4E55; {NU}
SI:=$4346; {CF}
Intr($2F, regs);
if SI = $6366 {cf} then
begin
Write('yes (NCACHE-F or NCACHE v6+)');
caption3('status');
nortonstatus(AH);
Writeln;
end
else
begin
AX:=$FE00;
BX:=0;
CX:=0;
DX:=0;
DI:=$4E55; {NU}
SI:=$4353; {CS}
Intr($2F, regs);
if SI = $6373 {cs} then
begin
Write('yes (NCACHE-S)');
caption3('status');
nortonstatus(AH);
Writeln
end
else
Writeln('no');
end
end;
pause3(-1);
if endit then
Exit;
caption2('Norton Diskreet');
with regs do
begin
AX:=$FE00;
BX:=0;
CX:=0;
DX:=0;
DI:=$4E55; {NU}
SI:=$4443; {DC}
Intr($2F, regs);
if SI = $6463 {dc} then
begin
Write('yes');
caption3('status');
nortonstatus(AH);
caption3('resident at');
Writeln(hex(CX, 4))
end
else
Writeln('no');
end;
pause3(-1);
if endit then
Exit;
caption2('Norton DiskMon');
with regs do
begin
AX:=$FE00;
BX:=0;
CX:=0;
DX:=0;
DI:=$4E55; {NU}
SI:=$444D; {DM}
Intr($2F, regs);
if SI = $646D {dm} then
begin
Write('yes');
caption3('status');
nortonstatus(AH);
caption3('resident at');
Writeln(hex(CX, 4));
end
else
Writeln('no');
end;
pause3(-1);
if endit then
Exit;
caption2('Norton FileSave/EraseProtect');
with regs do
begin
AX:=$FE00;
BX:=0;
CX:=0;
DX:=0;
DI:=$4E55; {NU}
SI:=$4653; {FS}
Intr($2F, regs);
if SI = $6673 {fs} then
begin
Write('yes');
caption3('resident at');
Writeln(hex(CX, 4));
end
else
Writeln('no');
end;
pause3(-1);
if endit then
Exit;
caption1('----Virus protectors---');
Writeln;
caption2('F-PROT package -> F-LOCK');
with regs do
begin
AX:=$4653;
BX:=0;
CX:=2;
Intr($2F, regs);
yesorno2(AX = $FFFF);
caption3('F-XCHK');
AX:=$4653;
BX:=0;
CX:=3;
Intr($2F, regs);
yesorno2(AX = $FFFF);
caption3('F-POPUP');
AX:=$4653;
BX:=0;
CX:=4;
Intr($2F, regs);
yesorno2(AX = $FFFF);
caption3('F-DLOCK');
AX:=$4653;
BX:=0;
CX:=5;
Intr($2F, regs);
yesorno(AX = $FFFF)
end;
pause3(-1);
if endit then
Exit;
caption2('TBScanX');
with regs do
begin
AX:=$CA00;
BX:=$5442; {TB}
Intr($2F, regs);
if (AL <> $FF) or (BX <> $7462 {tb}) then
Writeln('no')
else
begin
Write('yes');
caption3('version');
AX:=$CA01;
Intr($2F, regs);
if AH <> $CA then
Write(AH shr 4, decimal, addzero(AH and $F))
else
Write('2.2-');
caption3('status');
if AL = 0 then
Writeln('disabled')
else
Writeln('enabled');
end
end;
pause3(-1);
if endit then
Exit;
caption2('Flu_Shot+');
with regs do
begin
AX:=$FF0F;
MsDos(regs);
yesorno(AX = $0101);
end;
pause3(-1);
if endit then
Exit;
caption1('----SCSI drivers----');
Writeln;
caption2('Common Access Method SCSI (CAM-SCSI)');
with regs do
begin
AX:=$354F;
MsDos(regs);
if (ES <> 0) and (BX <> 0) then
begin
AX:=$8200;
CX:=$8765;
DX:=$CBA9;
Intr($4F, regs);
if (CX = $9ABC) and (DX=$5678) then
begin
s:='';
for xword1:=DI to DI + 7 do
s:=s + Chr(Mem[ES:xword1]);
yesorno(s = 'SCSI_CAM');
end
else
Writeln('no');
end;
end;
pause3(-1);
if endit then
Exit;
caption2('CMC International SCSI driver');
with regs do
begin
AX:=$3578;
MsDos(regs);
s:='';
for xword1:=BX + 3 to BX + 6 do
s:=s + Chr(Mem[ES:xword1]);
yesorno(s = 'SCSI');
end;
pause3(-4);
if endit then
Exit;
caption1('----Disk Caches----');
Writeln;
caption2('SMARTDRV');
with regs do
begin
s:='SMARTAAR'#0;
AX:=$3D00;
DS:=Seg(s);
DX:=Ofs(s) + 1;
MsDos(regs);
if not nocarry(regs) then
begin
AX:=$4A10;
BX:=0;
CX:=0;
DX:=0;
Intr($2F, regs);
if AX = $BABE then
begin
Write('yes');
caption3('ver');
Write(Hi(BP), decimal, addzero(Lo(BP)));
caption3('size now');
AX:=$4A10;
BX:=4;
Intr($2F, regs);
Write((longint(CX) * BX) div 1024, 'K');
caption3('min size');
Write((longint(DX) * CX) div 1024, 'K');
caption3('element size');
Writeln(CX div 1024, 'K');
caption3('cache hits');
AX:=$4A10;
BX:=0;
Intr($2F, regs);
Write(longint(DX) shl 16 + BX);
caption3('cache misses');
Writeln(longint(DI) shl 16 + SI);
for xbyte:=0 to $19 do
begin
pause3(-1);
if endit then
Exit;
AX:=$4A10;
BX:=3;
BP:=xbyte;
DX:=0;
Intr($2F, regs);
if DL <> $FF then
begin
caption3('Drive');
Write(Chr(xbyte + Ord('A')));
caption3('read cache');
yesorno2(DL and $80 <> $80);
caption3('write cache');
yesorno2(DL and $40 <> $40);
caption3('double buffered');
AX:=$4A10;
BX:=5;
BP:=xbyte;
Intr($2F, regs);
yesorno(AX = $BABE);
end;
end;
end
else
Writeln('no')
end
else
begin
xbyte:=AX;
AX:=$4400;
BX:=xbyte;
MsDos(regs);
if (not nocarry(regs)) or (DX and $4080 <> $4080) then
Writeln('Maybe. IOCTL interface not supported.')
else
begin
AX:=$4402;
BX:=xbyte;
CX:=SizeOf(smartdrvbuf);
DS:=Seg(smartdrvbuf);
DX:=Ofs(smartdrvbuf);
MsDos(regs);
if not nocarry(regs) then
Writeln('Maybe. IOCTL read failed.')
else
begin
Write('yes');
with smartdrvbuf do
begin
caption3('ver.');
Write(majorversion, decimal, minorversion);
caption3('Size');
Write(current_size * 16, 'K');
caption3('Max');
Write(original_size * 16, 'K');
caption3('Min');
Write(minimum_size * 16, 'K');
caption3('enabled');
yesorno(cache_enabled = 1);
caption3('locked tracks');
yesorno2(locked > 0);
caption3('write-through');
yesorno2(write_through = 1);
caption3('write-buffered');
yesorno2(write_buffered = 1);
caption3('hit rate');
Writeln(cache_hitrate, '%');
caption3('DMA buffering');
case buffering_type of
0: Write('off');
1: Write('on');
2: Write('dynamic')
else
Write('(unknown)');
end; {case}
caption3('memory type');
case drivertype of
1: Write('XMS');
2: Write('EMS')
else
Write('unknown:', drivertype);
end;
caption3('flush on reboot');
yesorno(reboot_flush <> 0);
caption3('Tracks total');
Write(total_tracks);
caption3('used');
Write(tracks_used);
caption3('locked');
Write(locked_tracks);
caption3('dirty');
Writeln(dirty_tracks);
end
end
end;
AH:=$3E;
BX:=xbyte;
MsDos(regs);
end
end;
pause3(-4);
if endit then
Exit;
caption2('HyperDisk');
with regs do
begin
xbyte:=$DF;
foundit:=false;
xbool1:=false;
repeat
AH:=xbyte;
AL:=0;
BX:=$4448; {DH}
Intr($2F, regs);
if (AL = $FF) and (CX = $5948 {YH}) then
foundit:=true
else
if (xbyte = $DF) and (not xbool1) then
begin
xbyte:=$C0;
xbool1:=true;
end
else
Inc(xbyte);
until (xbyte = 0) or (foundit);
if xbyte = 0 then
Writeln('no')
else
begin
Write('yes');
Caption3('at code segment');
Write(Hex(BX, 4));
Caption3('local data version');
Write(DH, decimal);
ZeroPad(DL);
Writeln;
AH:=xbyte;
AL:=1;
BX:=$4448; {DH}
Intr($2F, regs);
if AX = 0 then
begin
Caption3('buffers used');
Write(BX);
Caption3('buffers modified but not yet written');
Writeln(CX);
Caption3(' Floppies - cached');
YesOrNo3(DL and $40 = $40);
Caption3('verified');
YesOrNo3(DL and 4 = 4);
Caption3('staged writes');
YesOrNo(DL and 1 = 1);
Caption3('Hard Drives - cached');
YesOrNo3(DL and $80 = $80);
Caption3('verified');
YesOrNo3(DL and 8 = 8);
Caption3('staged writes');
YesOrNo(DL and 2 = 2);
end;
end;
end;
pause3(-3);
if endit then
Exit;
xword1:=Seg(stackerbuf);
xword2:=Ofs(stackerbuf);
caption2('Stacker');
asm
mov ax,$CDCD {signature entry}
mov cx,1
mov dx,0
push ds {need to preserve these}
push bp
mov ds,xword1 {pointer to address buffer}
mov bx,xword2
int $25 {DOS absolute read sectors}
pop cx {remove old flags}
pop bp {restore important regs}
pop ds
mov xword1,ax {save return code}
end;
with stackerbuf do
begin
if (signature = $CDCD) and (MemW[ddseg:ddofs] = $A55A) then
begin
Write('yes');
Caption3('version');
Write((MemW[ddseg:ddofs + 2] / 100.0):5:2);
Caption3('at address');
SegOfs(ddseg, ddofs);
Writeln;
Caption3('Stacker drive(s)');
foundit:=false;
if (OSMajor = 3) and (OSMinor = 31) then
xword:=$440E
else
xword:=$4408;
for xbyte:=1 to 26 do
with Regs do
begin
BX:=xbyte;
AX:=xword;
Mem[ddseg:ddofs + $3E]:=$FF;
MsDos(Regs);
xbyte2:=Mem[ddseg:ddofs + $3E];
if Mem[ddseg:ddofs + $3E] <> $FF then
begin
Write(Chr(xbyte + $40), ' ');
foundit:=true
end
end;
if not foundit then
Write('(none)');
Writeln;
Caption3('Swapped');
foundit:=false;
s:='';
for xword:=ddofs + $52 to ddofs + $55 do
s:=s + Chr(Mem[ddseg:xword]);
if s = 'SWAP' then
for xbyte:=0 to 25 do
if Mem[ddseg:ddofs + $56 + xbyte] <> xbyte then
begin
if foundit then
Write(', ');
Write(Chr(xbyte + $41), ' was ',
Chr(Mem[ddseg:ddofs + $56 + xbyte] + $41));
foundit:=true;
end;
if not foundit then
Write('(none)');
Writeln;
end
else
Writeln('no');
end;
pause3(-1);
if endit then
Exit;
caption1('----Miscellaneous----');
Writeln;
caption2('pcAnywhere');
with regs do
begin
AH:=$79;
Intr($16, regs);
if AX < $FFFC then
Writeln('no')
else
begin
Write(pcAstatus[AX]);
caption3('port');
AH:=$7C;
Intr($16, regs);
Write(AH);
caption3('baud rate');
Writeln(pcAspd[AL]);
end;
end;
pause3(-5);
if endit then
Exit;
caption2('Disk Spool II');
with regs do
begin
AH:=$A0;
Intr($1A, regs);
if AH = $B0 then
begin
Write('yes');
caption3('at segment');
Writeln(hex(ES, 4));
caption3('spooler is');
case CH of
$00: Writeln('disabled');
$41: begin
Writeln('enabled');
caption3('spooling file');
xbyte:=0;
repeat
xchar:=Chr(Mem[ES:BX]);
if xchar <> #0 then
Write(xchar);
Inc(xbyte);
Inc(BX);
until (xchar = #0) or (xbyte >= 64);
if xbyte = 0 then
Write('(none)');
Writeln;
end;
else
Writeln('??')
end;
caption3('despooler is');
case CL of
$00: Writeln('disabled');
$41: begin
Write('enabled and ');
case DL of
$00: Writeln('actively printing');
$41: Writeln('standing by');
else
Writeln('?????');
end;
caption3('despooler file');
xbyte:=0;
repeat
xchar:=Chr(Mem[ES:SI]);
if xchar <> #0 then
Write(xchar);
Inc(xbyte);
Inc(SI);
until (xchar = #0) or (xbyte >= 64);
if xbyte = 0 then
Write('(none)');
Writeln;
end;
else
Writeln('????');
end;
end
else
Writeln('no');
end;
pause3(-1);
if endit then
Exit;
caption2('Microsoft/LANtastic Network');
regs.AH:=0;
Intr($2A, regs);
yesorno(regs.AH <> 0);
pause3(-1);
if endit then
Exit;
caption2('PC/TCP Packet driver');
with regs do
begin
xbyte:=$60;
foundit:=false;
repeat
AH:=$35;
AL:=xbyte;
MsDos(regs);
s:='';
for xword1:=BX + 3 to BX + $A do
s:=s + Chr(Mem[ES:xword1]);
if s = 'PKT DRVR' then
foundit:=true;
Inc(xbyte);
until foundit or (xbyte = $81);
if foundit then
Writeln('yes, at interrupt $', hex(xbyte - 1, 2))
else
Writeln('no')
end;
pause3(-1);
if endit then
Exit;
caption2('Inset');
with regs do
begin
AH:=2;
DX:=0;
CX:=$07C3; {1987}
Intr($17, regs);
yesorno(CX = $07C2 {1986})
end;
pause3(-1);
if endit then
Exit;
caption2('Microsoft CD-ROM extensions');
asm
mov ax,$DADA
push ax
mov ax,$1100
int $15
mov xbyte,al
pop ax
mov xword1,bx
end;
if (xbyte <> $FF) or (xbyte2 <> $ADAD) then
Writeln('no')
else
with regs do
begin
Write('yes');
caption3('version');
AX:=$150C;
Intr($2F, regs);
if BX = 0 then
Writeln('1.02 or older')
else
Writeln(BH, decimal, BL);
end;
pause3(-2);
if endit then
Exit;
caption2('Fossil');
xbool1:=false;
with regs do
begin
AH:=$BC;
DX:=$1954;
Intr($11, regs);
if AX = $1954 then
xbool1:=true;
AX:=$1B00;
DX:=$FF;
CX:=SizeOf(fossilbuf);
ES:=Seg(fossilbuf);
DI:=Ofs(fossilbuf);
Intr($14, regs);
if AX <> $1B00 then
begin
Write('yes');
caption3('type');
if xbool1 then
Write('BNU')
else
if (CX = $3058 {0X}) and (DX = $2030 { 0}) then
Write('X00')
else
Write('unknown');
with fossilbuf do
begin
caption3('specification level');
Write(spec);
caption3('revision level');
Writeln(rev);
caption3('ID string');
while Mem[idstrseg:idstrofs] <> 0 do
begin
Write(Chr(Mem[idstrseg:idstrofs]));
Inc(idstrofs)
end;
Writeln;
end
end
else
Writeln('no');
end;
pause3(-1);
if endit then
Exit;
caption2('Video Fossil');
with regs do
begin
AX:=$8100;
ES:=Seg(vfossilbuf);
DI:=Ofs(vfossilbuf);
Intr($14, regs);
if AX <> $1954 then
Writeln('no')
else
with vfossilbuf do
begin
Write('yes');
caption3('version');
Write(ver);
caption3('revision');
Write(rev);
caption3('highest function');
Write('$', hex(hifunc, 4));
end
end;
Pause3(-3);
if endit then
Exit;
Caption2('Advanced Power Management Spec.');
with regs do
begin
AX:=$5300;
BX:=0;
Intr($15, regs);
if (not NoCarry(regs)) or (BX <> $504D) then
Writeln('no')
else
begin
Write('yes');
Caption3('version');
Write(unBCD(AH), decimal, AddZero(unBCD(AL)));
Caption3('enabled');
YesOrNo((CX and 8) = 0);
Caption3('supports 16-bit protected mode');
YesOrNo2((CX and 1) = 1);
Caption3('32-bit protected mode');
YesOrNo((CX and 2) = 2);
caption3('AC line status');
AX:=$530A;
BX:=1;
Intr($15, regs);
if not NoCarry(regs) then
Writeln('ERROR')
else
begin
case BH of
0: Write('off-line');
1: Write('on-line');
$FF: Write('unknown')
else
Write('???');
end;
Caption3('battery status');
case BL of
0: Write('high');
1: Write('low');
2: Write('critical');
3: Write('charging');
$FF: Write('unknown')
else
Write('???');
end;
Caption3('remaining life');
if CL = $FF then
Writeln('unknown')
else
Writeln(CL, '%');
end;
end;
end;
Pause3(-1);
if endit then
Exit;
Caption2('Norton Guides');
with regs do
begin
AX:=$F398;
Intr($16, regs);
YesOrNo(AX = $6A73);
end;
Pause3(-1);
if endit then
Exit;
Caption2('After Dark for DOS');
with regs do
begin
AX:=$C000;
BX:=0;
CX:=0;
DX:=0;
Intr($2F, regs);
if (AL = $FF) and (BX=$4144 {AD}) and (CX=$2D44 {-D}) and
(DX=$4F53 {OS}) then
begin
Write('yes');
Caption3('at segment');
AX:=$C001;
ES:=0;
Flags:=Flags and (not FCarry);
Intr($2F, regs);
if NoCarry(regs) then
Write(Hex(ES, 4))
else
Write('ERROR');
Caption3('minutes to wait');
AX:=$C004;
Flags:=Flags or FCarry;
Intr($2F, regs);
Writeln(BX);
Caption3('blanker');
AX:=$C006;
Flags:=Flags or FCarry;
Intr($2F, regs);
if BX = 0 then
Write('disabled')
else
Write('enabled');
Caption3('password');
AX:=$C00F;
Flags:=Flags or FCarry;
Intr($2F, regs);
if BX = 0 then
Write('disabled')
else
Write('enabled');
Caption3('hot key');
AX:=$C008;
Flags:=Flags or FCarry;
Intr($2F, regs);
if AX = 0 then
begin
if CL and 3 <> 0 then
Write('<SHIFT>');
if CL and 4 = 4 then
Write('<CTRL>');
if CL and 8 = 8 then
Write('<ALT>');
Writeln('<', KeyScan[BH], '>')
end;
end
else
Writeln('no');
end
end;
end.