[Back to DOS SWAG index] [Back to Main SWAG index] [Original]

    {
    Answering a msg of <Thursday May 19 1994>, 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.

[Back to DOS SWAG index] [Back to Main SWAG index] [Original]