Contributor: JON PHIPPS               


{
Answering a msg of , from Elad Nachman to Per-Eric
Larsson:
}

program environ;

uses dos,crt;

Const
  Multiplex = $2f;
  std_dos   = $21;


var
  regs        : registers;
  {windows information variables}
  winstall    : boolean;
  hi_winver   : integer;
  lo_winver   : integer;
  _386enh     : boolean;
  Ver_mach    : word;
  {OS information Variables}
  _4dosinst    : boolean;
  Hi_4d_ver   : integer;
  Lo_4d_ver   : integer;
  shell_num   : integer;
  Hi_dosver   : integer;
  Lo_dosver   : integer;
  {DesqView Information variables}
  dv_inst     : boolean;
  Hi_dv_ver   : integer;
  Lo_dv_ver   : integer;


 procedure v_id; {return windows 3.x 386enh mode virtual machine number}

   begin
     regs.ax:=$1638;
     intr(multiplex,regs);
     ver_mach := regs.bx;
   end;

 procedure winstal;{check for windows 3.x install}

   begin
     regs.ax:=$160A;
     intr(multiplex,regs);
     if regs.ax = $0000 then
       begin
         winstall  := true;
         Hi_winver := regs.bh;
         lo_winver := regs.bl;
         if regs.cx = $0003 then
           begin
             _386enh := true;
             v_id;
           end
         else
           begin
             _386enh := false;
             ver_mach := 0;
           end;
       end
      else
        begin
          {
            this point is only reached if windows isNOT
            detected we therefore set ALL windows id vars
            to impossible numbers.
          }
          winstall  := false;
          Hi_winver := 0;
          lo_winver := 0;
          ver_mach  := 0;
        end;
   end;

  procedure dvinstall;{check for dv}

    begin
      if winstall then
        begin
          dv_inst := false;
          exit;
        end;
      regs.ax := $2b00;
      regs.cx := $4445;
      regs.dx := $5351;
      regs.ax := $0001;
      intr(std_dos,regs);
      if regs.al<>$ff then
        begin
          hi_dv_ver := regs.bh;
          lo_dv_ver := regs.bl;
          dv_inst   := true;
        end
      else
        begin
          Hi_dv_ver := 0;
          Lo_dv_ver := 0;
          dv_inst   := false;
        end;
    end; { dv install check}

  procedure I_4dos;

    begin
      regs.ax := $d44d;
      regs.bx := $0000;
      intr(std_dos,regs);
      if regs.ax = $44dd then
        begin
          hi_4d_ver := regs.bh;
          lo_4d_ver := regs.bl;
          _4dosinst  := true;
          shell_num := regs.dl;
        end
      else
        begin { no 4dos }
          _4dosinst  := false;
          hi_4d_ver := 0;
          lo_4d_ver := 0;
          shell_num := -1;
        end;
    end;

  procedure dos_ver; {get dos version}

    begin
      regs.ax:=$3001;
      intr(std_dos,regs);
      hi_dosver:=regs.al;
      lo_dosver:=regs.ah;
    end;

  procedure display_info;
    begin
      clrscr;
      gotoxy(4,5);
      writeln('Os information');
      gotoxy(4,12);
      writeln('Windows 3.x information');
      gotoxy(4,17);
      writeln('Dv information');
      if _4dosinst then
        begin
          gotoxy(6,7);
          writeln('4dos version: ',hi_4d_ver,':',lo_4d_ver);
          gotoxy(6,8);
          writeln('4dos subshell#: ',shell_num);
          gotoxy(6,9);
          writeln('MSdos version: ',hi_dosver,':',lo_dosver);
        end
      else
        begin
          gotoxy(6,7);
          writeln('MSdos version: ',hi_dosver,':',lo_dosver);
          gotoxy(6,8);
          writeln('4dos.com not detected in this window.');
        end;
      if winstall then
        begin
          gotoxy(6,13);
          writeln('Windows Version: ',Hi_winver,':',lo_winver);
          gotoxy(6,14);
          if _386enh then
            begin
              writeln('Running in 386 enhanced mode');
              gotoxy(6,15);
              writeln('386Enh virtual machine ID: ',ver_mach);
            end
          else
            begin
              writeln('Running in Standard mode');
              gotoxy(6,15);
              writeln('386Enh Virtual Machine ID: Not applicable in standard mode');
            end;
          end
        else
          begin
            gotoxy(6,13);
            writeln('Microsoft windows not installed');
          end;
      if dv_inst then
        begin
          gotoxy(6,18);
          writeln('Desqview Version: ',hi_dv_ver,':',lo_dv_ver);
        end
      else
        begin
          gotoxy(6,18);
          writeln('DesqView not installed');
        end;
    end;

  begin
    winstal;
    I_4dos;
    dos_ver;
    dvinstall;
    display_info;
    repeat
    until readkey = #27;
  end.