/**********************************************/
/*                                            */    
/* iWinVersion.cpp                            */
/*                                            */
/* get windows version                        */
/*                                            */
/* scol v 4                                   */
/*                                            */
/**********************************************/


#include <windows.h>
#include "iwinversion.h"






/*************************************************************************/
/*                                                                       */
/*           C O N T E N T                                               */
/*                                                                       */
/*                                                                       */
/*                                                                       */
/*           I N T E R N A L     B O D Y                                 */
/*                                                                       */
/*                                                                       */
/*                                                                       */
/*           E X T E R N A L     B O D Y                                 */
/*                                                                       */
/* DWORD iSetWinVersion (DWORD ver)                                      */
/*                                                                       */
/* DWORD iGetWinVersion ()                                               */
/*                                                                       */
/*                                                                       */
/*************************************************************************/










/*************************************************************************/
/*                                                                       */
/*           D A T A                                                     */
/*                                                                       */
/*************************************************************************/


DWORD iWinVersion = I_WINVER_NULL;











/*************************************************************************/
/*                                                                       */
/*           I N T E R N A L     B O D Y                                 */
/*                                                                       */
/*************************************************************************/







/*************************************************************************/
/*                                                                       */
/*           E X T E R N A L     B O D Y                                 */
/*                                                                       */
/*************************************************************************/






/*********************************************************/
/*                                                       */
/* DWORD iSetWinVersion (DWORD ver)                      */
/*                                                       */
/* scol v 4                                              */
/*                                                       */
/* force the value of iWinVersion internal variable.     */
/*                                                       */
/* give I_WINVER_NULL as parameter make the next         */
/* iGetWinVersion() call compute the OS version.         */
/*                                                       */
/*********************************************************/
DWORD iSetWinVersion (DWORD ver)
{
	iWinVersion = ver;
	switch (ver) {
	case I_WINVER_NULL:
		_log("OS=NULL\n");
		break;
	case I_WINVER_95:
		_log("OS=95\n");
		break;
	case I_WINVER_98:
		_log("OS=98\n");
		break;
	case I_WINVER_ME:
		_log("OS=ME\n");
		break;
	case I_WINVER_NT4:
		_log("OS=NT4\n");
		break;
	case I_WINVER_2000:
		_log("OS=2000\n");
		break;
	case I_WINVER_WHISTLER:
		_log("OS=WHISTLER\n");
		break;
	default:
		_log("OS=unknown\n");
		break;
	}

	return iWinVersion;
}




/*********************************************************/
/*                                                       */
/* DWORD iGetWinVersion ()                               */
/*                                                       */
/* scol v 4                                              */
/*                                                       */
/* return the version of current window OS.              */
/* codes are defines in iWinVersion.h                    */
/*                                                       */
/* the first iGetWinVersion call make it compute the     */
/* OS version, and store it into an internal variable.   */
/* Next calls make it return the value stored in this    */
/* variable.                                             */
/*                                                       */
/* call iSetWinVersion (I_WINVER_NULL) to make           */
/* iGetWinVersion compute the OS version again.          */
/*                                                       */
/*********************************************************/
DWORD iGetWinVersion ()
{

	if (iWinVersion != I_WINVER_NULL)
		return iWinVersion;

	{
	OSVERSIONINFO stOSVI ;
	DWORD vID, minV, majV;


         memset ( &stOSVI , NULL , sizeof ( OSVERSIONINFO ) );
         stOSVI.dwOSVersionInfoSize = sizeof ( OSVERSIONINFO );
         if (!GetVersionEx(&stOSVI))
           return I_WINVER_NULL;

		 vID = stOSVI.dwPlatformId;
		 minV = stOSVI.dwMinorVersion;
		 majV = stOSVI.dwMajorVersion;

	 
		 if (vID == VER_PLATFORM_WIN32_WINDOWS)
		 {
			if ((majV == 4) && (minV == 0))
				return iSetWinVersion (I_WINVER_95);
			else
			if ((majV == 4) && (minV == 10))
				return iSetWinVersion (I_WINVER_98);
			else
			if ((majV == 4) && (minV == 90))
				return iSetWinVersion (I_WINVER_ME);
		 }
		 else
         if (vID == VER_PLATFORM_WIN32_NT)
		 {
			if ((majV == 4) && (minV == 0))
				return iSetWinVersion (I_WINVER_NT4);
			else
			if ((majV == 5) && (minV == 0))
				return iSetWinVersion (I_WINVER_2000);
			else
			if ((majV == 5) && (minV == 1))
				return iSetWinVersion (I_WINVER_WHISTLER);
		 }
	}

	return I_WINVER_NULL;
}