[Back to WIN-OS2 SWAG index] [Back to Main SWAG index] [Original]
{
BB> What code can I use to detect all three of the following:
BB> 1. : DPMI
BB> 2. : DeskView
BB> 3. : Windows
BB> 4. : OS/2
Detecting Windows ...
}
{ Copyright (C) 1991 by: NativSoft Computing
1155 College Ave.
Adrian, MI, 49221
CIS 71160,1045
Based on information published in an article
by Ben Myers of Spirit of Performance, Inc.
(Dr. Dobb's Journal, #172, January, 1991, pg 116)
Compiled with Turbo Pascal v6.
Modified by Tom Clark. Changed Errorlevel values.
Return Errorlevel 0 if Windows not running,
1 if Windows 2.x,
2 if Windows 3 real or standard mode,
3 if Windows 3 enhanced mode.
}
program findwin;
var t : byte;
valu : word;
BEGIN
{Inline assembler or macro is necessary to make the multiplex (2Fh) call
because Turbo Pascal only *fakes* INTR procedure -- i.e., this DOESN'T
work: var regs : registers;
...
regs.ax := $1600;
intr($2F,regs);
valu := regs.al
}
ASM
MOV AX, 1600h
INT 2Fh
MOV valu, AX
END;
case lo(valu) of
$01,$FF : t := 1; {win/386, ver 2.xx running}
$00,$80 : begin {Enhanced, WIN/386, or WIN ver 2.xx NOT RUNNING
... so, test for real or standard win 3.x }
ASM
MOV AX, 4680h
INT 2Fh
MOV valu, AX
END;
if valu = 0 then t := 2 {real or standard win 3.x running}
else t := 0; {apparently NO WIN is running}
end;
else t := 3; {enhanced win 3.x running}
end; {case}
END.
[Back to WIN-OS2 SWAG index] [Back to Main SWAG index] [Original]