home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Shareware 1 2 the Maxx
/
sw_1.zip
/
sw_1
/
WINDOWS
/
UTILS
/
WINMODE.ZIP
/
WINMODE.C
< prev
next >
Wrap
Text File
|
1992-02-26
|
3KB
|
88 lines
// WinMode 1.0 for Windows 3.1
// Copyright (c) 1988-92 Finnegan O'Malley & Company Inc.
// All Rights Reserved.
// First Published in PC Magazine, May 12, 1992.
// developed under Microsoft C 5.1
#include <dos.h>
#include <stdio.h>
#include <stdlib.h>
#define INT_MULTIPLEX 0x2F
#define MODE_DOS 0
#define MODE_DOS_TASK_SWITCHER 1 // TS
#define MODE_WINDOWS_3_XX_STANDARD 2 // TS
#define MODE_WINDOWS_386_2_XX 3 // VM
#define MODE_WINDOWS_X_XX_386_ENHANCED 4 // VM
extern int main(int argc, char **argv);
////////////////////////////////////////////////////////
extern int main(int argc, char **argv)
{
auto struct SREGS Seg; // segment registers
static union REGS Reg; // general registers
if (argc != 1)
printf("%s 1.0 for Windows 3.1\n"
"Copyright (c) 1988-92 Finnegan O'Malley"
" & Company Inc. All Rights Reserved.\n"
"First Published in PC Magazine,"
" May 12, 1992.\n\n", argv[0]);
segread(&Seg); // initialize the segment registers
Reg.x.ax = 0x1600; // in 386 Enhanced mode?
int86x(INT_MULTIPLEX, &Reg, &Reg, &Seg);
switch (Reg.h.al)
{
case 0x00: // not in 386 Enhanced mode
case 0x80: // not in 386 Enhanced mode
break;
case 0x01: // Windows/386 2.xx is running
case 0xFF: // Windows/386 2.xx is running
printf("Windows/386 2.xx is running (%d)\n",
MODE_WINDOWS_386_2_XX);
return MODE_WINDOWS_386_2_XX;
default: // in 386 Enhanced mode, where:
// AL: major version (3., 4., ...)
// AH: minor version (00, 10, ...)
printf("Windows %d.%02d is running in 386 Enhanced"
" mode (%d)\n", Reg.h.al, Reg.h.ah,
MODE_WINDOWS_X_XX_386_ENHANCED);
return MODE_WINDOWS_X_XX_386_ENHANCED;
}
Reg.x.ax = 0x4680; // in plain vanilla DOS mode?
int86x(INT_MULTIPLEX, &Reg, &Reg, &Seg);
if (Reg.h.al == 0x80) // not in DOS Task Switcher,
{ // Real or Standard mode
printf("Windows is not running, nor is the DOS"
" Task Switcher (%d)\n",
MODE_DOS);
return MODE_DOS;
}
if (getenv("windir") // in Real or Standard mode?
|| getenv("WINDIR")) // (in case it goes upper case)
{
printf("Windows 3.xx is running in Real or Standard"
" mode (%d)\n",
MODE_WINDOWS_3_XX_STANDARD);
return MODE_WINDOWS_3_XX_STANDARD;
}
// otherwise, the DOS MS-DOS Shell is running
printf("The DOS Task Switcher is running (%d)\n",
MODE_DOS_TASK_SWITCHER);
return MODE_DOS_TASK_SWITCHER;
}