=================================================================== RCS file: /home/cvs/OpenXM_contrib2/asir2000/builtin/ctrl.c,v retrieving revision 1.59 retrieving revision 1.60 diff -u -p -r1.59 -r1.60 --- OpenXM_contrib2/asir2000/builtin/ctrl.c 2018/03/29 01:32:50 1.59 +++ OpenXM_contrib2/asir2000/builtin/ctrl.c 2018/09/13 19:20:47 1.60 @@ -45,7 +45,7 @@ * DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE, * PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE. * - * $OpenXM: OpenXM_contrib2/asir2000/builtin/ctrl.c,v 1.58 2018/03/28 09:07:54 noro Exp $ + * $OpenXM: OpenXM_contrib2/asir2000/builtin/ctrl.c,v 1.59 2018/03/29 01:32:50 noro Exp $ */ #include "ca.h" #include "parse.h" @@ -70,6 +70,11 @@ static struct { char *release; char *full; char *lang; +#if defined(VISUAL) + int ver_major; + int ver_minor; + int ver_build; +#endif } sysinfo; void Pctrl(); @@ -518,6 +523,8 @@ static char *osnameNT(int major, int minor) return "Windows8"; }else if (major == 6 && minor == 3) { return "Windows8.1"; + }else if (major == 10 && minor == 0) { + return "Windows10"; } return "unknown"; } @@ -546,6 +553,28 @@ static char *get_lang() return "en"; // English } +void get_version_win8(int *major,int *minor,int *build) +{ + char *res; + char fname[4096]; /* fullpath of kernel32.dll (_MAX_PATH==260)*/ + char cmd[4096]; + int size; + char *version_string; + struct LANGANDCODEPAGE { + WORD language; + WORD codepage; + }* lang; + sprintf(fname,"%s\\system32\\kernel32.dll", getenv("SYSTEMROOT")); + size=GetFileVersionInfoSize(fname,0); + res = (char *)MALLOC(size+1); + if(GetFileVersionInfo(fname,0,size+1,res)) { + VerQueryValue(res,"\\VarFileInfo\\Translation",&lang,&size); + sprintf(cmd,"\\StringFileInfo\\%04x%04x\\ProductVersion",lang->language,lang->codepage); + VerQueryValue(res,cmd,&version_string,&size); + sscanf(version_string,"%d.%d.%d.",major,minor,build); + } +} + static void get_sysinfo() { int arch64 = 0; @@ -561,6 +590,14 @@ static void get_sysinfo() v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); GetVersionEx(&v); + /* Windows8 == version 6.2 */ + if (v.dwPlatformId == VER_PLATFORM_WIN32_NT + && v.dwMajorVersion == 6 && v.dwMinorVersion >= 2) { + get_version_win8(&v.dwMajorVersion, &v.dwMinorVersion, &v.dwBuildNumber); + } + sysinfo.ver_major=v.dwMajorVersion; + sysinfo.ver_minor=v.dwMinorVersion; + sysinfo.ver_build=v.dwBuildNumber; sysinfo.type = "windows"; sysinfo.arch = "x86";