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.