diff options
-rw-r--r-- | CMakeLists.txt | 1 | ||||
-rw-r--r-- | InfoEx/CMakeLists.txt | 13 | ||||
-rw-r--r-- | InfoEx/include/InfoEx.h | 27 | ||||
-rw-r--r-- | InfoEx/src/description.cpp | 53 | ||||
-rw-r--r-- | InfoEx/src/directx_other.cpp | 22 | ||||
-rw-r--r-- | InfoEx/src/directx_win32.cpp | 28 | ||||
-rw-r--r-- | InfoEx/test/description.cpp | 17 | ||||
-rw-r--r-- | InfoEx/test/directx.cpp | 11 | ||||
-rw-r--r-- | StarsEx/CMakeLists.txt | 2 | ||||
-rw-r--r-- | StarsEx/GameWinDX9.cpp | 5 | ||||
-rw-r--r-- | StarsEx/Joystick.cpp | 8 | ||||
-rw-r--r-- | StarsEx/MachineInfo.cpp | 823 | ||||
-rw-r--r-- | StarsEx/MachineInfo.h | 41 | ||||
-rw-r--r-- | StarsEx/NetLobbyServer.cpp | 6 | ||||
-rw-r--r-- | Starserver/CMakeLists.txt | 2 | ||||
-rw-r--r-- | Starserver/Main.cpp | 16 | ||||
-rw-r--r-- | Starserver/NetAdminServer.cpp | 1 | ||||
-rw-r--r-- | Starshatter/CMakeLists.txt | 2 | ||||
-rw-r--r-- | Starshatter/Main.cpp | 21 | ||||
-rw-r--r-- | contrib/CMakeLists.txt | 3 | ||||
-rw-r--r-- | contrib/infoware/1.current.patch | 30 | ||||
-rw-r--r-- | contrib/infoware/CMakeLists.txt | 6 |
22 files changed, 243 insertions, 895 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 8b29d20..4b3575c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -23,6 +23,7 @@ add_subdirectory(contrib) add_subdirectory(data) add_subdirectory(DefinitionEx) add_subdirectory(FoundationEx) +add_subdirectory(InfoEx) if(MSVC) add_subdirectory(Magic2) endif() diff --git a/InfoEx/CMakeLists.txt b/InfoEx/CMakeLists.txt new file mode 100644 index 0000000..dab78ff --- /dev/null +++ b/InfoEx/CMakeLists.txt @@ -0,0 +1,13 @@ +project(InfoEx) +add_library(${PROJECT_NAME} STATIC src/description.cpp) +target_include_directories(${PROJECT_NAME} PUBLIC include/) +if(WIN32) + target_sources(${PROJECT_NAME} PRIVATE src/directx_win32.cpp) +else() + target_sources(${PROJECT_NAME} PRIVATE src/directx_other.cpp) +endif() +target_link_libraries(${PROJECT_NAME} PUBLIC FoundationEx PRIVATE iware::infoware) +add_executable(${PROJECT_NAME}_test test/description.cpp test/directx.cpp) +generate_emulator(${PROJECT_NAME}_test) +target_link_libraries(${PROJECT_NAME}_test PRIVATE ${PROJECT_NAME} GTest::gtest_main) +gtest_discover_tests(${PROJECT_NAME}_test DISCOVERY_TIMEOUT 60) diff --git a/InfoEx/include/InfoEx.h b/InfoEx/include/InfoEx.h new file mode 100644 index 0000000..7ea7bf8 --- /dev/null +++ b/InfoEx/include/InfoEx.h @@ -0,0 +1,27 @@ +#pragma once + +#include <Text.h> + + +namespace InfoEx +{ + + +Text ShortDescription(); +Text LongDescription(); + + +enum struct DXVersion : int +{ + None, + Dx7 = 7, + Dx8, + Dx9, + Future, +}; + + +DXVersion DirectX(); + + +} // namespace InfoEx diff --git a/InfoEx/src/description.cpp b/InfoEx/src/description.cpp new file mode 100644 index 0000000..5635de5 --- /dev/null +++ b/InfoEx/src/description.cpp @@ -0,0 +1,53 @@ +#include <InfoEx.h> + +#include <infoware/infoware.hpp> + +#include <Text.h> + + +namespace +{ + + +static constexpr const char* prefixes[] {"", "k", "M", "G", "T", "P", "E", "Z", "Y", "R", "Q"}; + + +Text +HumanReadable(long double value, const char* unit) +{ + int magnitude = 0; + while (value > 1000) { + value /= 1000; + magnitude++; + } + return Text::format("%.2Lf %s%s", value, prefixes[magnitude], unit); +} + + +} // namespace + + +namespace InfoEx +{ + + +Text +ShortDescription() +{ + return iware::system::OS_info().full_name.data(); +} + + +Text +LongDescription() +{ + return Text::format( + "OS: %s\nPhysical memory: %s\nCPU: %s\nCPU frequency: %s", + iware::system::OS_info().full_name.data(), + HumanReadable(iware::system::memory().physical_total, "B").data(), + iware::cpu::model_name().data(), + HumanReadable(iware::cpu::frequency(), "Hz").data()); +} + + +} // namespace InfoEx diff --git a/InfoEx/src/directx_other.cpp b/InfoEx/src/directx_other.cpp new file mode 100644 index 0000000..75d1d39 --- /dev/null +++ b/InfoEx/src/directx_other.cpp @@ -0,0 +1,22 @@ +#ifndef _WIN32 + +#include <InfoEx.h> + +#include <Text.h> + + +namespace InfoEx +{ + + +DXVersion +DirectX() +{ + return DXVersion::None; +} + + +} // namespace InfoEx + + +#endif // _WIN32 diff --git a/InfoEx/src/directx_win32.cpp b/InfoEx/src/directx_win32.cpp new file mode 100644 index 0000000..4ade30b --- /dev/null +++ b/InfoEx/src/directx_win32.cpp @@ -0,0 +1,28 @@ +#ifdef _WIN32 + +#include <InfoEx.h> + +#include <windows.h> + +#include <Text.h> + + +namespace InfoEx +{ + + +DXVersion +DirectX() +{ + auto lib = LoadLibrary("D3D9.DLL"); + if (lib == nullptr) + return DXVersion::None; + FreeLibrary(lib); + return DXVersion::Dx9; +} + + +} // namespace InfoEx + + +#endif // _WIN32 diff --git a/InfoEx/test/description.cpp b/InfoEx/test/description.cpp new file mode 100644 index 0000000..e9f5120 --- /dev/null +++ b/InfoEx/test/description.cpp @@ -0,0 +1,17 @@ +#include <gtest/gtest.h> + +#include <iostream> + +#include <InfoEx.h> + + +TEST(InfoEx, ShortDescription) +{ + std::cout << InfoEx::ShortDescription() << std::endl; +} + + +TEST(InfoEx, LongDescription) +{ + std::cout << InfoEx::LongDescription() << std::endl; +} diff --git a/InfoEx/test/directx.cpp b/InfoEx/test/directx.cpp new file mode 100644 index 0000000..1e3444c --- /dev/null +++ b/InfoEx/test/directx.cpp @@ -0,0 +1,11 @@ +#include <gtest/gtest.h> + +#include <iostream> + +#include <InfoEx.h> + + +TEST(InfoEx, DirectX) +{ + std::cout << static_cast<int>(InfoEx::DirectX()) << std::endl; +} diff --git a/StarsEx/CMakeLists.txt b/StarsEx/CMakeLists.txt index 1bacde7..99ccabe 100644 --- a/StarsEx/CMakeLists.txt +++ b/StarsEx/CMakeLists.txt @@ -123,7 +123,6 @@ add_library( LoadScreen.cpp Locale_ss.cpp MCIWave.cpp - MachineInfo.cpp MapView.cpp Menu.cpp MenuDlg.cpp @@ -284,6 +283,7 @@ target_link_libraries( PUBLIC Png::png PUBLIC Opcode PRIVATE Sha1 + PRIVATE InfoEx ) target_compile_definitions( StarsEx diff --git a/StarsEx/GameWinDX9.cpp b/StarsEx/GameWinDX9.cpp index bbf61c3..9f5595d 100644 --- a/StarsEx/GameWinDX9.cpp +++ b/StarsEx/GameWinDX9.cpp @@ -9,12 +9,13 @@ #include <stdio.h> #include <string.h> +#include <InfoEx.h> + #include "Bitmap.h" #include "Clock.h" #include "Color.h" #include "DataLoader.h" #include "Game.h" -#include "MachineInfo.h" #include "Panic.h" #include "Screen.h" #include "Types.h" @@ -88,7 +89,7 @@ GameWinDX9::Init(HINSTANCE hi, HINSTANCE hpi, LPSTR cmdline, int nCmdShow) status = INIT_FAILED; } - if (status == OK && MachineInfo::GetDirectXVersion() < MachineInfo::DX_9) { + if (status == OK && InfoEx::DirectX() < InfoEx::DXVersion::Dx9) { Panic::Panic(" Insufficient DirectX detected (Dx9 IS REQUIRED)"); status = INIT_FAILED; } diff --git a/StarsEx/Joystick.cpp b/StarsEx/Joystick.cpp index 8679c10..b4166a1 100644 --- a/StarsEx/Joystick.cpp +++ b/StarsEx/Joystick.cpp @@ -11,9 +11,11 @@ Joystick Input class */ -#include "GameWinDX9.h" #include "Joystick.h" -#include "MachineInfo.h" + +#include <InfoEx.h> + +#include "GameWinDX9.h" #include "Types.h" #define DIRECTINPUT_VERSION 0x0800 @@ -79,7 +81,7 @@ Joystick::Joystick() inv_axis[2] = false; inv_axis[3] = false; - if (MachineInfo::GetDirectXVersion() < MachineInfo::DX_7) { + if (InfoEx::DirectX() < InfoEx::DXVersion::Dx7) { Print("Joystick: DI7 not found, using multimedia library\n"); pdi = 0; pdev = 0; diff --git a/StarsEx/MachineInfo.cpp b/StarsEx/MachineInfo.cpp deleted file mode 100644 index 64552ba..0000000 --- a/StarsEx/MachineInfo.cpp +++ /dev/null @@ -1,823 +0,0 @@ -/* Starshatter: The Open Source Project - Copyright (c) 2021-2022, Starshatter: The Open Source Project Contributors - Copyright (c) 2011-2012, Starshatter OpenSource Distribution Contributors - Copyright (c) 1997-2006, Destroyer Studios LLC. - - AUTHOR: John DiCamillo - - - OVERVIEW - ======== - Collect and Display Machine, OS, and Driver Information -*/ - -#include <chrono> - -#include "MachineInfo.h" -#include "Utils.h" - -#define DIRECTINPUT_VERSION 0x0700 - -#include <stdio.h> -#include <ddraw.h> -#include <d3d9.h> -#include <dinput.h> -#include <winver.h> - -// +--------------------------------------------------------------------+ - -static int cpu_class=-1; -static int cpu_speed=-1; -static int platform=-1; -static int dx_version=-1; -static int total_ram=-1; - -static OSVERSIONINFO os_ver = { sizeof(OSVERSIONINFO) }; -static SYSTEM_INFO cpu_info; -static MEMORYSTATUS mem_info = { sizeof(MEMORYSTATUS) }; - -// +--------------------------------------------------------------------+ - -const char* -MachineInfo::GetShortDescription() -{ - static char desc[256]; - - static const char* cpu_names[] = { - "8088", - "8086", - "80286", - "80386", - "80486", - "Pentium", - "Pentium II", - "Pentium 3", - "Pentium 4" - }; - - static const char* os_names[] = { - "DOS", - "Windows 95", - "Windows 98", - "Windows NT", - "Windows 2000", - "Windows XP", - "Windows XP x64", - "Windows Vista", - "Windows Seven", - "Future Windows" - }; - - int cpu_index = GetCpuClass(); - if (cpu_index < 0) cpu_index = 0; - else if (cpu_index > 8) cpu_index = 8; - - int os_index = GetPlatform(); - if (os_index < 0) os_index = 0; - - sprintf_s(desc, "%s %d MHz %d MB RAM %s", - cpu_names[cpu_index], - GetCpuSpeed(), - GetTotalRam(), - os_names[os_index]); - - return desc; -} - -// +--------------------------------------------------------------------+ - -static void DescribeCpuMake(); -static void DescribeOwner95(); -static void DescribeOwnerNT(); -static void DescribeDrivers95(const char* sType); -static void DescribeDriversNT(const char* sType); -static void DescribeDriverVersion(const char* file); -static void DescribeDXVersion(const char* component); - -// wait for at least target_time, -// return the exact amount of time actually waited: - -static double SpinWait(double target_time) -{ - double actual_time = 0; - - LARGE_INTEGER ifreq; - LARGE_INTEGER cnt1; - LARGE_INTEGER cnt2; - - QueryPerformanceFrequency(&ifreq); - double freq = (double) ifreq.QuadPart; - - QueryPerformanceCounter(&cnt1); - - do { - QueryPerformanceCounter(&cnt2); - - double delta = (double) (cnt2.QuadPart - cnt1.QuadPart); - actual_time = delta / freq; - } - while (actual_time < target_time); - - return actual_time; -} - -static double CalcCpuSpeed() -{ - const auto before = std::chrono::high_resolution_clock::now(); - - double seconds = SpinWait(0.1); - - const auto after = std::chrono::high_resolution_clock::now(); - const std::chrono::duration<double> diff = after - before; - double clocks = diff.count(); - - return (clocks/seconds); -} - -/**************************************************************************** -* -* GetDXVersion -* -* This function returns -* 0 Insufficient DirectX installed -* 9 At least DirectX 9 installed. -* -****************************************************************************/ - -DWORD GetDXVersion() -{ - HRESULT hr = 0; - HINSTANCE DDHinst = 0; - LPDIRECT3D9 d3d9 = 0; - OSVERSIONINFO osVer = { sizeof(OSVERSIONINFO) }; - - // First get the windows platform - - if (!GetVersionEx(&osVer)) - return 0; - - // NT versions do not support DirectX 9 - if (osVer.dwPlatformId == VER_PLATFORM_WIN32_NT) { - if (osVer.dwMajorVersion <= 4) - return 0; - } - - DDHinst = LoadLibrary("D3D9.DLL"); - if (DDHinst == 0) { - return 0; - } - - FreeLibrary(DDHinst); - return 9; -} - - -// +--------------------------------------------------------------------+ - -int -MachineInfo::GetCpuClass() -{ - if (cpu_class < 0) { - GetSystemInfo(&cpu_info); - - if (cpu_info.wProcessorArchitecture != PROCESSOR_ARCHITECTURE_INTEL || - cpu_info.dwProcessorType < PROCESSOR_INTEL_PENTIUM) - Print("INCOMPATIBLE CPU TYPE!\n"); - - if (GetPlatform() < OS_WINNT) - cpu_class = CPU_P5; - - else - cpu_class = cpu_info.wProcessorLevel; - } - - return cpu_class; -} - -// +--------------------------------------------------------------------+ - -int -MachineInfo::GetCpuSpeed() -{ - if (cpu_speed < 0) { - cpu_speed = (int) (CalcCpuSpeed() / 1e6); - } - - return cpu_speed; -} - -// +--------------------------------------------------------------------+ - -int -MachineInfo::GetTotalRam() -{ - if (total_ram < 0) { - GlobalMemoryStatus(&mem_info); - total_ram = (int) (mem_info.dwTotalPhys/(1024*1024)) + 1; - } - - return total_ram; -} - -// +--------------------------------------------------------------------+ - -int -MachineInfo::GetPlatform() -{ - if (platform < 0) { - GetVersionEx(&os_ver); - - switch (os_ver.dwPlatformId) { - default: - case VER_PLATFORM_WIN32s: - case VER_PLATFORM_WIN32_WINDOWS: { - char msg[256]; - sprintf_s(msg, "Invalid Operating System Platform: %d\n", os_ver.dwPlatformId); //-V576 - Print(msg); - } - break; - - case VER_PLATFORM_WIN32_NT: - if (os_ver.dwMajorVersion == 4) - platform = OS_WINNT; - else if (os_ver.dwMajorVersion == 5 && os_ver.dwMinorVersion == 0) - platform = OS_WIN2K; - else if (os_ver.dwMajorVersion == 5 && os_ver.dwMinorVersion == 1) - platform = OS_WINXP; - else if (os_ver.dwMajorVersion == 5 && os_ver.dwMinorVersion == 2) - platform = OS_WINXP64; - else if (os_ver.dwMajorVersion == 6 && os_ver.dwMinorVersion == 0) - platform = OS_WINVISTA; - else if (os_ver.dwMajorVersion == 6 && os_ver.dwMinorVersion == 1) - platform = OS_WINSEVEN; - else if (os_ver.dwMajorVersion >= 6) - platform = OS_WINFUTURE; - - else { - platform = OS_INVALID; - - Print("Invalid Operating System Platform (NT-series): %d.%d\n", os_ver.dwMajorVersion, os_ver.dwMinorVersion); - } - - break; - } - } - - return platform; -} - -// +--------------------------------------------------------------------+ - -int -MachineInfo::GetDirectXVersion() -{ - if (dx_version < 0) { - dx_version = GetDXVersion(); - } - - return dx_version; -} - -// +--------------------------------------------------------------------+ - -void -MachineInfo::DescribeMachine() -{ - GetPlatform(); - GetCpuClass(); - - Print("+====================================================================+\n"); - Print("| |\n"); - - char txt[256]; - - switch (platform) { - case OS_WIN95: - sprintf_s(txt, "Windows 95 version %d.%d.%d %s", //-V576 - os_ver.dwMajorVersion, - os_ver.dwMinorVersion, - LOWORD(os_ver.dwBuildNumber), - os_ver.szCSDVersion); - break; - - case OS_WIN98: - sprintf_s(txt, "Windows 98 version %d.%d.%d %s", //-V576 - os_ver.dwMajorVersion, - os_ver.dwMinorVersion, - LOWORD(os_ver.dwBuildNumber), - os_ver.szCSDVersion); - break; - - case OS_WINNT: - sprintf_s(txt, "Windows NT %d.%d (Build %d) %s", //-V576 - os_ver.dwMajorVersion, - os_ver.dwMinorVersion, - os_ver.dwBuildNumber, - os_ver.szCSDVersion); - break; - - case OS_WIN2K: - sprintf_s(txt, "Windows 2000 %d.%d (Build %d) %s", //-V576 - os_ver.dwMajorVersion, - os_ver.dwMinorVersion, - os_ver.dwBuildNumber, - os_ver.szCSDVersion); - - case OS_WINXP: - sprintf_s(txt, "Windows XP %d.%d (Build %d) %s", //-V576 - os_ver.dwMajorVersion, - os_ver.dwMinorVersion, - os_ver.dwBuildNumber, - os_ver.szCSDVersion); - break; - case OS_WINXP64: - sprintf_s(txt, "Windows XP x64 %d.%d (Build %d) %s", //-V576 - os_ver.dwMajorVersion, - os_ver.dwMinorVersion, - os_ver.dwBuildNumber, - os_ver.szCSDVersion); - break; - case OS_WINVISTA: - sprintf_s(txt, "Windows Vista %d.%d (Build %d) %s", //-V576 - os_ver.dwMajorVersion, - os_ver.dwMinorVersion, - os_ver.dwBuildNumber, - os_ver.szCSDVersion); - break; - case OS_WINSEVEN: - sprintf_s(txt, "Windows 7 %d.%d (Build %d) %s", //-V576 - os_ver.dwMajorVersion, - os_ver.dwMinorVersion, - os_ver.dwBuildNumber, - os_ver.szCSDVersion); - break; - case OS_WINFUTURE: - sprintf_s(txt, "Windows from the future %d.%d (Build %d) %s", //-V576 - os_ver.dwMajorVersion, - os_ver.dwMinorVersion, - os_ver.dwBuildNumber, - os_ver.szCSDVersion); - break; - - default: - sprintf_s(txt, "Unknown Operating System Platform"); - break; - } - - Print("| %-66s |\n", txt); - Print("| |\n"); - - if (platform == OS_WIN95 || platform == OS_WIN98) - DescribeOwner95(); - else - DescribeOwnerNT(); - - sprintf_s(txt, "CPUs Detected: %d CPU Level: %d.%d.%d CPU Speed: %d", //-V576 - cpu_info.dwNumberOfProcessors, - cpu_info.wProcessorLevel, - cpu_info.wProcessorRevision >> 8, - cpu_info.wProcessorRevision & 0xff, - GetCpuSpeed() + 1); - - Print("| %-66s |\n", txt); - DescribeCpuMake(); - - GlobalMemoryStatus(&mem_info); - total_ram = (int) (mem_info.dwTotalPhys/(1024*1024)) + 1; - int swap_max = (int) (mem_info.dwTotalPageFile/(1024*1024)); - int swap_avail = (int) (mem_info.dwAvailPageFile/(1024*1024)); - - sprintf_s(txt, "%d MB RAM %d MB Max Swap %d MB Avail Swap", - total_ram, swap_max, swap_avail); - - - Print("| %-66s |\n", txt); - - Print("| |\n"); - Print("| DirectX %d installed. |\n", - GetDirectXVersion()); - DescribeDXVersion("DDRAW"); - DescribeDXVersion("D3DIM"); - DescribeDXVersion("DINPUT"); - DescribeDXVersion("DPLAY"); - DescribeDXVersion("DSOUND"); - DescribeDXVersion("DMUSIC"); - DescribeDXVersion("DSHOW"); - Print("| |\n"); - - - if (platform == OS_WIN95 || platform == OS_WIN98) { - DescribeDrivers95("Display"); - DescribeDrivers95("Media"); - DescribeDrivers95("Monitor"); - DescribeDrivers95("Multimedia"); - } - else { - DescribeDriversNT(""); - } - - Print("+====================================================================+\n"); - Print("\n"); -} - -// +--------------------------------------------------------------------+ - -static void DescribeCpuMake() -{ - HKEY hkWin; - char sProcessor[256] = ""; - char sMMXInfo[256] = ""; - char sVendor[256] = ""; - DWORD dwSize; - - if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, - "Hardware\\Description\\System\\CentralProcessor\\0", - 0, - KEY_READ, - &hkWin) == ERROR_SUCCESS) { - - dwSize = 256; - RegQueryValueEx(hkWin, - "Identifier", - NULL, - NULL, - (LPBYTE) sProcessor, - &dwSize); - - dwSize = 256; - RegQueryValueEx(hkWin, - "MMXIdentifier", - NULL, - NULL, - (LPBYTE) sMMXInfo, - &dwSize); - - dwSize = 256; - RegQueryValueEx(hkWin, - "VendorIdentifier", - NULL, - NULL, - (LPBYTE) sVendor, - &dwSize); - - RegCloseKey(hkWin); - } - - if (sProcessor[0]) Print("| %-66s |\n", sProcessor); - if (sMMXInfo[0]) Print("| %-66s |\n", sMMXInfo); - if (sVendor[0]) Print("| %-66s |\n", sVendor); - - if (sProcessor[0] || sMMXInfo[0] || sVendor[0]) - Print("| |\n"); -} - -// +--------------------------------------------------------------------+ - -static void DescribeOwner95() -{ - HKEY hkWin; - char sRegisteredOwner[256] = ""; - char sRegisteredOrganization[256] = ""; - DWORD dwSize; - - if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, - "SOFTWARE\\Microsoft\\Windows\\CurrentVersion", - 0, - KEY_READ, - &hkWin) == ERROR_SUCCESS) { - - dwSize = 256; - RegQueryValueEx(hkWin, - "RegisteredOwner", - NULL, - NULL, - (LPBYTE) sRegisteredOwner, - &dwSize); - - dwSize = 256; - RegQueryValueEx(hkWin, - "RegisteredOrganization", - NULL, - NULL, - (LPBYTE) sRegisteredOrganization, - &dwSize); - - RegCloseKey(hkWin); - } - else { - Print("Could not access registered owner\n"); - } - - if (sRegisteredOwner[0]) { - char txt[256]; - sprintf_s(txt, "Registered Owner: %s, %s", sRegisteredOwner, sRegisteredOrganization); - Print("| %-66s |\n", txt); - Print("| |\n"); - } -} - -static void DescribeOwnerNT() -{ - HKEY hkWin; - char sRegisteredOwner[256] = ""; - char sRegisteredOrganization[256] = ""; - DWORD dwSize; - - if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, - "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion", - 0, - KEY_READ, - &hkWin) == ERROR_SUCCESS) { - - dwSize = 256; - RegQueryValueEx(hkWin, - "RegisteredOwner", - NULL, - NULL, - (LPBYTE) sRegisteredOwner, - &dwSize); - - dwSize = 256; - RegQueryValueEx(hkWin, - "RegisteredOrganization", - NULL, - NULL, - (LPBYTE) sRegisteredOrganization, - &dwSize); - - RegCloseKey(hkWin); - } - else { - Print("Could not access registered owner\n"); - } - - if (sRegisteredOwner[0]) { - char txt[256]; - sprintf_s(txt, "Registered Owner: %s, %s", sRegisteredOwner, sRegisteredOrganization); - Print("| %-66s |\n", txt); - Print("| |\n"); - } -} - -// +--------------------------------------------------------------------+ - -static void DescribeDrivers95(const char* sType) -{ - HKEY hkWin, hkSub; - int nKey = 0; - char sKey[256]; - char sSub[256]; - char sDriver[256]; - char txt[256]; - DWORD dwSize; - int worked; - - // describe the video driver(s): - do { - worked = 0; - - sprintf_s(sKey, "System\\CurrentControlSet\\Services\\Class\\%s\\%04X", sType, nKey); - sprintf_s(sSub, "System\\CurrentControlSet\\Services\\Class\\%s\\%04X\\DEFAULT", sType, nKey); - - if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, - sKey, - 0, - KEY_READ, - &hkWin) == ERROR_SUCCESS) { - - dwSize = 256; - RegQueryValueEx(hkWin, - "DriverDesc", - NULL, - NULL, - (LPBYTE) sDriver, - &dwSize); - - if (sDriver[0]) { - sprintf_s(txt, "* %s", sDriver); - Print("| %-66s |\n", txt); - worked = 1; - } - - // try to find the driver file name: - if (worked) { - ZeroMemory(sDriver, sizeof(sDriver)); - - dwSize = 256; - DWORD err = RegQueryValueEx(hkWin, "Driver", NULL, NULL, (LPBYTE) sDriver, &dwSize); - - if (err != ERROR_SUCCESS) { - dwSize = 256; - err = RegQueryValueEx(hkWin, "DeviceDriver", NULL, NULL, (LPBYTE) sDriver, &dwSize); - } - - if (err != ERROR_SUCCESS) { - dwSize = 256; - err = RegQueryValueEx(hkWin, "drv", NULL, NULL, (LPBYTE) sDriver, &dwSize); - } - - if (err != ERROR_SUCCESS) { - if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, - sSub, - 0, - KEY_READ, - &hkSub) == ERROR_SUCCESS) { - - dwSize = 256; - err = RegQueryValueEx(hkSub, "drv", NULL, NULL, (LPBYTE) sDriver, &dwSize); - - RegCloseKey(hkSub); - } - } - - // if we found it, try to display version info: - if (err == ERROR_SUCCESS) { - DescribeDriverVersion(sDriver); - } - - Print("| |\n"); - } - - RegCloseKey(hkWin); - } - - nKey++; - } - while (worked); -} - -static void DescribeDriversNT(const char* sType) -{ - Print("| |\n"); - - HKEY hkWin; - char sVideo[256] = ""; - char sDriver[256] = ""; - DWORD dwSize = 0; - - // find the pointer to the video driver: - if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, - "HARDWARE\\DEVICEMAP\\VIDEO", - 0, - KEY_READ, - &hkWin) == ERROR_SUCCESS) { - - dwSize = 256; - RegQueryValueEx(hkWin, - "\\Device\\Video0", - NULL, - NULL, - (LPBYTE) sVideo, - &dwSize); - - RegCloseKey(hkWin); - } - - // follow the pointer and get the driver description: - if (dwSize && sVideo[0]) { - const char* sLeader = "\\REGISTRY\\Machine\\"; - int nLeader = strlen(sLeader); - - if (_strnicmp(sVideo, sLeader, nLeader) == 0) { - if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, - sVideo + nLeader, - 0, - KEY_READ, - &hkWin) == ERROR_SUCCESS) { - - dwSize = 256; - RegQueryValueEx(hkWin, - "Device Description", - NULL, - NULL, - (LPBYTE) sDriver, - &dwSize); - - RegCloseKey(hkWin); - } - } - } - - if (sDriver[0]) { - Print("| %-66s |\n", sDriver); - Print("| |\n"); - } -} - -// +--------------------------------------------------------------------+ - -static char sTranslation[16]; - -static void GetTranslation(const LPBYTE pBlock) -{ - LPBYTE sData = NULL; - UINT lenData = 0; - - if (VerQueryValue(pBlock, "\\VarFileInfo\\Translation", - (LPVOID*) &sData, &lenData)) { - - if (lenData && sData) { - sprintf_s(sTranslation, "%02X%02X%02X%02X", sData[1], sData[0], sData[3], sData[2]); - } - } -} - -void DisplayVersionString(const LPBYTE pBlock, LPTSTR sSection) -{ - char txt[256]; - char sFullSection[256]; - - sprintf_s(sFullSection, "\\StringFileInfo\\%s\\%s", sTranslation, sSection); - - LPBYTE sData = NULL; - UINT lenData = 0; - DWORD dwErr = 0; - - if (VerQueryValue(pBlock, sFullSection, (LPVOID*) &sData, &lenData)) { - if (lenData && sData) { - sprintf_s(txt, "%-16s %s", sSection, sData); - Print("| %-60s |\n", txt); - } - } -} - -static void DescribeDriverVersion(const char* file) -{ - DWORD dwHandle = 0; - TCHAR szFile[512]; - - strcpy_s(szFile, file); - - int nBytes = GetFileVersionInfoSize(szFile, &dwHandle); - - if (nBytes <= 0) { - char szWinDir[256]; - GetSystemDirectory(szWinDir, 256); - sprintf_s(szFile, "%s\\%s", szWinDir, file); - - nBytes = GetFileVersionInfoSize(szFile, &dwHandle); - - if (nBytes <= 0) - return; - } - - LPBYTE pBlock = new BYTE[nBytes]; - - if (pBlock && GetFileVersionInfo(szFile, dwHandle, nBytes, (LPVOID) pBlock)) { - GetTranslation(pBlock); - DisplayVersionString(pBlock, "CompanyName"); - // DisplayVersionString(pBlock, "FileDescription"); - DisplayVersionString(pBlock, "FileVersion"); - // DisplayVersionString(pBlock, "InternalName"); - // DisplayVersionString(pBlock, "LegalCopyright"); - // DisplayVersionString(pBlock, "OriginalFilename"); - // DisplayVersionString(pBlock, "ProductName"); - // DisplayVersionString(pBlock, "ProductVersion"); - // DisplayVersionString(pBlock, "Comments"); - // DisplayVersionString(pBlock, "LegalTrademarks"); - // DisplayVersionString(pBlock, "PrivateBuild"); - // DisplayVersionString(pBlock, "SpecialBuild"); - } - - delete [] pBlock; -} - -static void DescribeDXVersion(const char* component) -{ - DWORD dwHandle = 0; - char szFile[512]; - char szWinDir[512]; - - GetSystemDirectory(szWinDir, 512); - - sprintf_s(szFile, "%s\\%s.dll", szWinDir, component); - - int nBytes = GetFileVersionInfoSize(szFile, &dwHandle); - - if (nBytes <= 0) { - return; - } - - LPBYTE pBlock = new BYTE[nBytes]; - - if (pBlock && GetFileVersionInfo(szFile, dwHandle, nBytes, (LPVOID) pBlock)) { - GetTranslation(pBlock); - - char txt[256]; - char sFullSection[256]; - LPBYTE sData = NULL; - UINT lenData = 0; - DWORD dwErr = 0; - - sprintf_s(sFullSection, "\\StringFileInfo\\%s\\FileVersion", sTranslation); - - if (VerQueryValue(pBlock, sFullSection, (LPVOID*) &sData, &lenData)) { - if (lenData && sData) { - sprintf_s(txt, "%-8s%s", component, sData); - Print("| %-64s |\n", txt); - } - } - } - - delete [] pBlock; -}
\ No newline at end of file diff --git a/StarsEx/MachineInfo.h b/StarsEx/MachineInfo.h deleted file mode 100644 index 01e4bda..0000000 --- a/StarsEx/MachineInfo.h +++ /dev/null @@ -1,41 +0,0 @@ -/* Starshatter: The Open Source Project - Copyright (c) 2021-2022, Starshatter: The Open Source Project Contributors - Copyright (c) 2011-2012, Starshatter OpenSource Distribution Contributors - Copyright (c) 1997-2006, Destroyer Studios LLC. - - AUTHOR: John DiCamillo - - - OVERVIEW - ======== - Collect and Display Machine, OS, and Driver Information -*/ - -#ifndef MachineInfo_h -#define MachineInfo_h - -#include "Types.h" - -// +--------------------------------------------------------------------+ - -class MachineInfo -{ -public: - enum { CPU_INVALID, CPU_P5=5, CPU_P6=6, CPU_P7=7, CPU_PLUS }; - enum { OS_INVALID, OS_WIN95, OS_WIN98, OS_WINNT, OS_WIN2K, OS_WINXP, OS_WINXP64, OS_WINVISTA, OS_WINSEVEN, OS_WINFUTURE }; - enum { DX_NONE, DX_3=3, DX_5=5, DX_6=6, DX_7=7, DX_8=8, DX_9=9, DX_PLUS }; - - static int GetCpuClass(); - static int GetCpuSpeed(); - static int GetTotalRam(); - static int GetPlatform(); - static int GetDirectXVersion(); - - static void DescribeMachine(); - - static const char* GetShortDescription(); -}; - -// +--------------------------------------------------------------------+ - -#endif // MachineInfo_h
\ No newline at end of file diff --git a/StarsEx/NetLobbyServer.cpp b/StarsEx/NetLobbyServer.cpp index 371310f..2039fff 100644 --- a/StarsEx/NetLobbyServer.cpp +++ b/StarsEx/NetLobbyServer.cpp @@ -12,6 +12,9 @@ */ #include "NetLobbyServer.h" + +#include <InfoEx.h> + #include "NetServerConfig.h" #include "NetClientConfig.h" #include "NetBrokerClient.h" @@ -36,7 +39,6 @@ #include "NetHost.h" #include "NetMsg.h" -#include "MachineInfo.h" #include "Clock.h" #include "FormatUtil.h" #include "VersionInfo.h" @@ -838,7 +840,7 @@ NetLobbyServer::DoServerInfo(NetPeer* peer, Text s) gameport = server_config->GetGamePort(); sprintf_s(buffer, "info \"%s\" version \"%s\" mode %d users %d host %s port %d", - MachineInfo::GetShortDescription(), + InfoEx::ShortDescription().data(), versionInfo, GetStatus(), NumUsers(), diff --git a/Starserver/CMakeLists.txt b/Starserver/CMakeLists.txt index 43e3d29..e492234 100644 --- a/Starserver/CMakeLists.txt +++ b/Starserver/CMakeLists.txt @@ -13,7 +13,7 @@ target_include_directories( ) target_link_libraries( Starserver - PRIVATE StarsEx + PRIVATE StarsEx InfoEx ) install( TARGETS Starserver diff --git a/Starserver/Main.cpp b/Starserver/Main.cpp index 0063060..a92df86 100644 --- a/Starserver/Main.cpp +++ b/Starserver/Main.cpp @@ -4,12 +4,13 @@ Copyright (c) 1997-2006, Destroyer Studios LLC. */ -#include "MachineInfo.h" -#include "NetLayer.h" -#include "Panic.h" -#include "StarServer.h" -#include "Token.h" -#include "Utils.h" +#include <InfoEx.h> +#include <NetLayer.h> +#include <Panic.h> +#include <StarServer.h> +#include <Token.h> +#include <Utils.h> +#include <VersionInfo.h> int dump_missions = 0; @@ -19,7 +20,8 @@ int main(int argc, char * argv[]) { AssignErrLog(fopen("serverlog.txt", "wb")); - MachineInfo::DescribeMachine(); + Print("Starserver %s\n", versionInfo); + Print("%s\n\n", InfoEx::LongDescription().data()); int result = 1; try { NetLayer net; diff --git a/Starserver/NetAdminServer.cpp b/Starserver/NetAdminServer.cpp index 7e82801..190931b 100644 --- a/Starserver/NetAdminServer.cpp +++ b/Starserver/NetAdminServer.cpp @@ -25,7 +25,6 @@ #include "DataLoader.h" #include "FormatUtil.h" -#include "MachineInfo.h" #include "VersionInfo.h" // +-------------------------------------------------------------------+ diff --git a/Starshatter/CMakeLists.txt b/Starshatter/CMakeLists.txt index e73a639..892a10f 100644 --- a/Starshatter/CMakeLists.txt +++ b/Starshatter/CMakeLists.txt @@ -9,7 +9,7 @@ target_include_directories( ) target_link_libraries( Starshatter - PRIVATE StarsEx + PRIVATE StarsEx InfoEx ) add_version_file(Starshatter.rc Starshatter.rc.conf) target_sources( diff --git a/Starshatter/Main.cpp b/Starshatter/Main.cpp index f2417e9..beda5d0 100644 --- a/Starshatter/Main.cpp +++ b/Starshatter/Main.cpp @@ -6,6 +6,7 @@ AUTHOR: John DiCamillo */ +#include <InfoEx.h> #include "Starshatter.h" #include "HUDView.h" @@ -21,7 +22,6 @@ #include "Color.h" #include "DataLoader.h" #include "Pcx.h" -#include "MachineInfo.h" #include "Encrypt.h" #include "FormatUtil.h" #include "Panic.h" @@ -29,23 +29,22 @@ #include "Random.h" #include "VersionInfo.h" -// +--------------------------------------------------------------------+ -// WinMain -// +--------------------------------------------------------------------+ -extern int VD3D_describe_things; -int dump_missions = 0; +extern int VD3D_describe_things; +int dump_missions = 0; -static void PrintLogHeader() + +static void +PrintLogHeader() { Text sTime = FormatTimeString(); - Print("+====================================================================+\n"); Print("| STARSHATTER %-25s%29s |\n", versionInfo, sTime.data()); - - MachineInfo::DescribeMachine(); + Print("+====================================================================+\n\n"); + Print("%s\n\n", InfoEx::LongDescription().data()); } + int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { @@ -125,5 +124,3 @@ int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, return result; } - - diff --git a/contrib/CMakeLists.txt b/contrib/CMakeLists.txt index 2f35927..6094770 100644 --- a/contrib/CMakeLists.txt +++ b/contrib/CMakeLists.txt @@ -2,11 +2,12 @@ include(ApplyPatch) include(FetchContent) include(MakeAvailable) add_subdirectory(gtest) +add_subdirectory(infoware) add_subdirectory(libpng) add_subdirectory(ogg) add_subdirectory(vorbis) add_subdirectory(zlib) -make_available(gtest libpng ogg vorbis zlib) +make_available(gtest infoware libpng ogg vorbis zlib) add_subdirectory(Opcode) add_subdirectory(sha1) install( diff --git a/contrib/infoware/1.current.patch b/contrib/infoware/1.current.patch new file mode 100644 index 0000000..9ef31bc --- /dev/null +++ b/contrib/infoware/1.current.patch @@ -0,0 +1,30 @@ +diff '--color=auto' -ru a/CMakeLists.txt b/CMakeLists.txt +--- a/CMakeLists.txt 2024-03-09 23:00:40.101308564 +0100 ++++ b/CMakeLists.txt 2024-03-09 22:59:36.067973296 +0100 +@@ -84,7 +84,7 @@ + find_package(Git) + endif() + +-set(INFOWARE_PCI_DATA_DIR infoware_generated CACHE PATH "Output directory for the PCI ids generator") ++set(INFOWARE_PCI_DATA_DIR "${CMAKE_CURRENT_BINARY_DIR}/infoware_generated" CACHE PATH "Output directory for the PCI ids generator") + set(INFOWARE_PCI_DATA_HPP pci_data.hpp) + set(INFOWARE_PCI_DATA_GEN "${INFOWARE_PCI_DATA_DIR}/${INFOWARE_PCI_DATA_HPP}") + set(infoware_pci_ids_error "\ +@@ -132,13 +132,13 @@ + else() + include(ExternalProject) + ExternalProject_Add(infoware_generate_pcis +- SOURCE_DIR ${CMAKE_SOURCE_DIR} +- PREFIX ${CMAKE_BINARY_DIR}/pci_generator +- BINARY_DIR ${CMAKE_BINARY_DIR}/pci_generator ++ SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR} ++ PREFIX ${CMAKE_CURRENT_BINARY_DIR}/pci_generator ++ BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/pci_generator + BUILD_COMMAND ${CMAKE_COMMAND} --build <BINARY_DIR> --target infoware_generate_pcis + INSTALL_COMMAND "" + BUILD_ALWAYS ON +- CMAKE_ARGS -DINFOWARE_PCI_DATA_DIR:PATH=${CMAKE_BINARY_DIR}/${INFOWARE_PCI_DATA_DIR}) ++ CMAKE_ARGS -DINFOWARE_PCI_DATA_DIR:PATH=${CMAKE_CURRENT_BINARY_DIR}/${INFOWARE_PCI_DATA_DIR}) + endif() + add_dependencies(infoware infoware_generate_pcis) + diff --git a/contrib/infoware/CMakeLists.txt b/contrib/infoware/CMakeLists.txt new file mode 100644 index 0000000..81c7b4b --- /dev/null +++ b/contrib/infoware/CMakeLists.txt @@ -0,0 +1,6 @@ +FetchContent_Declare( + infoware + URL https://github.com/ThePhD/infoware/archive/e469b86.tar.gz + URL_HASH SHA1=e844ae80c5ca3f6b944571130ac3795c96a4e9ab + PATCH_COMMAND ${CMAKE_COMMAND} -D "PATCH_FILE=${CMAKE_CURRENT_SOURCE_DIR}/1.current.patch" -P ${PATCH_SCRIPT} + DOWNLOAD_EXTRACT_TIMESTAMP No) |