Contributor: FRED JOHNSON             

{
If you ever wanted to tell what Operating System Mode you are using,
this /ditty/ will do the trick.  It sets a global integer to a value
which represents the Mode being used.  There is also a demo_prog at the
end of the unit.
}

unit mode;

interface

var
  OperatingMode : integer;

{ This integer holds a value of 0, 1, 2 or 3, which is an indicator
  if the machine is in:
    Dos Mode              (0),
    Windows Standard Mode (1),
    Windows Enhanced Mode (2),
    DESQview mode         (3); }
implementation

function wincheck : integer;
begin
 asm
   mov  ax,   $4680
   int  $2f
   mov  dl,   $1
   or   ax,   ax
   jz   @finished
   mov  ax,   $1600
   int  $2f
   mov  dl,   $2
   or   al,   al
   jz   @Not_Win
   cmp  al,   $80
   jne  @finished
  @Not_Win:
   mov  ax,   $1022
   mov  bx,   $0
   int  $15
   mov  dl,   $3
   cmp  bx,   $0a01
   je   @finished
   xor  dl,   dl
  @finished:
   xor  ah,   ah
   mov  al,   dl
   mov  @Result, ax
 end;
end;

begin
   OperatingMode := Wincheck;
end.

program Use_Mode;

uses
  mode;

const
  xModeStringArr : Array[0..3] of string[16] =
     ('Dos Mode', 'Windows Standard', 'Windows Enhanced', 'DESQview Mode');
begin
   Write(xModeStringArr[OperatingMode]);
end.