Below is my consolidation of the OSVERSION code with Win10OrNewer. I have added detection for Windows 8.1, Server 2012 R2 and Server 2016 and eliminated the use of GetVersionEx for determining the Major Version. This has not been extensively tested but it does work with Pelle's C and my Windows 10 machine. There are three code blocks to replace. Try it, you might like it.
First ENUM block, to locate, search for for "return values for OSVersion"
ENUM
OSUnknown = -2
OSError = -1
OS_3x
OS_95
OS_98
OS_ME
OS_NT3
OS_2000
OS_XP
OS_XP_Pro_x64
OS_Server_2003
OS_Home_Server
OS_Server_2003_R2
OS_Vista
OS_Server_2008
OS_Server_2008_R2
OS_Win_7
OS_Server_2012
OS_Win_8
OS_Win_81
OS_Server_2012_R2
OS_Win_10
OS_Server_2016
END ENUM
Second ENUM block, to locate, search for for "SUB EmitOSVersionEnum()"
SUB EmitOSVersionEnum()
FPRINT FP_ENU, ""
FPRINT FP_ENU, "enum"
FPRINT FP_ENU, " {"
FPRINT FP_ENU, " OSUnknown = -2,"
FPRINT FP_ENU, " OSError = -1,"
FPRINT FP_ENU, " OS_3x,"
FPRINT FP_ENU, " OS_95,"
FPRINT FP_ENU, " OS_98,"
FPRINT FP_ENU, " OS_ME,"
FPRINT FP_ENU, " OS_NT3,"
FPRINT FP_ENU, " OS_2000,"
FPRINT FP_ENU, " OS_XP,"
FPRINT FP_ENU, " OS_XP_Pro_x64,"
FPRINT FP_ENU, " OS_Server_2003,"
FPRINT FP_ENU, " OS_Home_Server,"
FPRINT FP_ENU, " OS_Server_2003_R2,"
FPRINT FP_ENU, " OS_Vista,"
FPRINT FP_ENU, " OS_Server_2008,"
FPRINT FP_ENU, " OS_Server_2008_R2,"
FPRINT FP_ENU, " OS_Win_7,"
FPRINT FP_ENU, " OS_Server_2012,"
FPRINT FP_ENU, " OS_Win_8,"
FPRINT FP_ENU, " OS_Win_81,"
FPRINT FP_ENU, " OS_Server_2012_R2,"
FPRINT FP_ENU, " OS_Win_10,"
FPRINT FP_ENU, " OS_Server_2016"
FPRINT FP_ENU, " };"
FPRINT FP_ENU, ""
END SUB
OSVersion function, to locate, search for "Use_OSVersion"
IF Use_OSVersion THEN
IF Use_Library THEN FPRINT FP_WRITE, "// BCXRTLIB: OSVersion"
FPRINT FP_WRITE, "int OSVersion (void) {"
FPRINT FP_WRITE, " OSVERSIONINFOEXW osvi={0};"
FPRINT FP_WRITE, " osvi.dwOSVersionInfoSize=sizeof(osvi);"
FPRINT FP_WRITE, " NTSTATUS (WINAPI *RtlGetVersion)(LPOSVERSIONINFOEXW);"
FPRINT FP_WRITE, " *(FARPROC*)&RtlGetVersion=GetProcAddress(GetModuleHandle(" &DQ$ & "ntdll" & DQ$ & "), " & DQ$ & "RtlGetVersion" & DQ$ & ");"
FPRINT FP_WRITE, " if (RtlGetVersion == NULL)"
FPRINT FP_WRITE, " {"
FPRINT FP_WRITE, " GetVersionEx((LPOSVERSIONINFO)&osvi);"
FPRINT FP_WRITE, " }"
FPRINT FP_WRITE, " else "
FPRINT FP_WRITE, " {"
FPRINT FP_WRITE, " RtlGetVersion(&osvi);"
FPRINT FP_WRITE, " }"
FPRINT FP_WRITE, ""
FPRINT FP_WRITE, " switch (osvi.dwPlatformId)"
FPRINT FP_WRITE, " {"
FPRINT FP_WRITE, " case VER_PLATFORM_WIN32_NT:"
FPRINT FP_WRITE, ""
FPRINT FP_WRITE, " if(osvi.dwMajorVersion==10 && osvi.dwMinorVersion==0)"
FPRINT FP_WRITE, " {"
FPRINT FP_WRITE, " if(osvi.wProductType == VER_NT_WORKSTATION) return OS_Win_10;"
FPRINT FP_WRITE, " return OS_Server_2016;"
FPRINT FP_WRITE, " }"
FPRINT FP_WRITE, ""
FPRINT FP_WRITE, " if(osvi.dwMajorVersion==6 && osvi.dwMinorVersion==3)"
FPRINT FP_WRITE, " {"
FPRINT FP_WRITE, " if(osvi.wProductType == VER_NT_WORKSTATION) return OS_Win_81;"
FPRINT FP_WRITE, " return OS_Server_2012_R2;"
FPRINT FP_WRITE, " }"
FPRINT FP_WRITE, ""
FPRINT FP_WRITE, " if(osvi.dwMajorVersion==6 && osvi.dwMinorVersion==2)"
FPRINT FP_WRITE, " {"
FPRINT FP_WRITE, " if(osvi.wProductType == VER_NT_WORKSTATION) return OS_Win_8;"
FPRINT FP_WRITE, " return OS_Server_2012;"
FPRINT FP_WRITE, " }"
FPRINT FP_WRITE, ""
FPRINT FP_WRITE, " if(osvi.dwMajorVersion==6 && osvi.dwMinorVersion==1)"
FPRINT FP_WRITE, " {"
FPRINT FP_WRITE, " if(osvi.wProductType == VER_NT_WORKSTATION) return OS_Win_7;"
FPRINT FP_WRITE, " return OS_Server_2008_R2;"
FPRINT FP_WRITE, " }"
FPRINT FP_WRITE, ""
FPRINT FP_WRITE, " if(osvi.dwMajorVersion==6 && osvi.dwMinorVersion==0)"
FPRINT FP_WRITE, " {"
FPRINT FP_WRITE, " if(osvi.wProductType != VER_NT_WORKSTATION) return OS_Server_2008;"
FPRINT FP_WRITE, " return OS_Vista;"
FPRINT FP_WRITE, " }"
FPRINT FP_WRITE, ""
FPRINT FP_WRITE, " if(osvi.dwMajorVersion>=5 && osvi.dwMinorVersion>=2)"
FPRINT FP_WRITE, " {"
FPRINT FP_WRITE, " int iTestForSM_SERVERR2;"
FPRINT FP_WRITE, " iTestForSM_SERVERR2 = GetSystemMetrics(SM_SERVERR2);"
FPRINT FP_WRITE, " if(iTestForSM_SERVERR2 != 0) return OS_Server_2003_R2;"
FPRINT FP_WRITE, " if((osvi.wSuiteMask & VER_SUITE_WH_SERVER) != 0) return OS_Home_Server;"
FPRINT FP_WRITE, " if (iTestForSM_SERVERR2 == 0) return OS_Server_2003;"
FPRINT FP_WRITE, " SYSTEM_INFO siSysInfo;"
FPRINT FP_WRITE, " GetSystemInfo(&siSysInfo); "
FPRINT FP_WRITE, " if((osvi.wProductType == VER_NT_WORKSTATION) && (siSysInfo.wProcessorArchitecture==PROCESSOR_ARCHITECTURE_AMD64)) return OS_XP_Pro_x64;"
FPRINT FP_WRITE, " return OSUnknown;"
FPRINT FP_WRITE, " }"
FPRINT FP_WRITE, ""
FPRINT FP_WRITE, " if(osvi.dwMajorVersion==5 && osvi.dwMinorVersion==1) return OS_XP;"
FPRINT FP_WRITE, ""
FPRINT FP_WRITE, " if(osvi.dwMajorVersion==5 && osvi.dwMinorVersion==0) return OS_2000;"
FPRINT FP_WRITE, ""
FPRINT FP_WRITE, " if(osvi.dwMajorVersion==3 && osvi.dwMinorVersion==51) return OS_NT3;"
FPRINT FP_WRITE, " return OSUnknown;"
FPRINT FP_WRITE, ""
FPRINT FP_WRITE, " case VER_PLATFORM_WIN32_WINDOWS:"
FPRINT FP_WRITE, " if((osvi.dwMajorVersion==4 && osvi.dwMinorVersion==90)) return OS_ME;"
FPRINT FP_WRITE, " if((osvi.dwMajorVersion==4 && osvi.dwMinorVersion==10)) return OS_98;"
FPRINT FP_WRITE, " if((osvi.dwMajorVersion==4 && osvi.dwMinorVersion==0)) return OS_95;"
FPRINT FP_WRITE, " return OSUnknown;"
FPRINT FP_WRITE, ""
FPRINT FP_WRITE, " case VER_PLATFORM_WIN32s:"
FPRINT FP_WRITE, " return OS_3x;"
FPRINT FP_WRITE, " }"
FPRINT FP_WRITE, " return OSUnknown;"
FPRINT FP_WRITE, sENDBCXRTLIB$
END IF