00001
00002 #include <windows.h>
00003 #include <stdio.h>
00004
00005
00006 static char winverbuf[256];
00007 static int winver_done = 0;
00008
00009 char *
00010 winver ()
00011 {
00012 char *os_string = "Win32";
00013 if (winver_done)
00014 {
00015 return winverbuf;
00016 }
00017
00018 OSVERSIONINFOEX osvi;
00019 BOOL bOsVersionInfoEx;
00020
00021
00022
00023
00024
00025
00026 ZeroMemory (&osvi, sizeof (OSVERSIONINFOEX));
00027 osvi.dwOSVersionInfoSize = sizeof (OSVERSIONINFOEX);
00028
00029 if (!(bOsVersionInfoEx = GetVersionEx ((OSVERSIONINFO *) & osvi)))
00030 {
00031
00032
00033
00034 osvi.dwOSVersionInfoSize = sizeof (OSVERSIONINFO);
00035 if (!GetVersionEx ((OSVERSIONINFO *) & osvi))
00036 return (NULL);
00037 }
00038
00039 switch (osvi.dwPlatformId)
00040 {
00041
00042 case VER_PLATFORM_WIN32_NT:
00043
00044 os_string = "WinNT";
00045 break;
00046
00047 case VER_PLATFORM_WIN32_WINDOWS:
00048
00049 if ((osvi.dwMajorVersion > 4) ||
00050 ((osvi.dwMajorVersion == 4) && (osvi.dwMinorVersion > 0)))
00051 os_string = "Win98";
00052 else
00053 os_string = "Win95";
00054 break;
00055
00056 case VER_PLATFORM_WIN32s:
00057
00058 os_string = "Ms Win32s";
00059 break;
00060 }
00061
00062 sprintf (winverbuf, "%s ver %d.%d (Bld %d)\n",
00063 os_string,
00064 osvi.dwMajorVersion,
00065 osvi.dwMinorVersion, osvi.dwBuildNumber & 0xFFFF);
00066 winver_done = 1;
00067 return winverbuf;
00068 };