diff options
Diffstat (limited to 'converter/ppm')
-rw-r--r-- | converter/ppm/ppmtompeg/Makefile | 14 | ||||
-rw-r--r-- | converter/ppm/ppmtompeg/gethostname_win32.c | 402 | ||||
-rw-r--r-- | converter/ppm/ppmtompeg/specifics.c | 45 |
3 files changed, 432 insertions, 29 deletions
diff --git a/converter/ppm/ppmtompeg/Makefile b/converter/ppm/ppmtompeg/Makefile index e5ad6c58..7e8f0b95 100644 --- a/converter/ppm/ppmtompeg/Makefile +++ b/converter/ppm/ppmtompeg/Makefile @@ -50,14 +50,20 @@ MP_ENCODE_OBJS = \ MP_OTHER_OBJS = mpeg.o subsample.o param.o rgbtoycc.o \ readframe.o combine.o jrevdct.o frame.o fsize.o frametype.o \ - specifics.o rate.o opts.o input.o gethostname.o + specifics.o rate.o opts.o input.o ifeq ($(OMIT_NETWORK),y) - MP_PARALLEL_OBJS = noparallel.o + MP_OTHER_OBJS += noparallel.o else - MP_PARALLEL_OBJS = parallel.o psocket.o + MP_OTHER_OBJS += parallel.o psocket.o endif +ifeq ($(WIN32),y) + MP_OTHER_OBJS += gethostname_win32.o +else + MP_OTHER_OBJS += gethostname.o +endif + NONMAIN_OBJS = $(MP_BASE_OBJS) $(MP_OTHER_OBJS) $(MP_ENCODE_OBJS) \ - $(MP_PARALLEL_OBJS) $(JPEG_MODULE).o + $(JPEG_MODULE).o OBJECTS = ppmtompeg.o $(NONMAIN_OBJS) MERGE_OBJECTS = ppmtompeg.o2 $(NONMAIN_OBJS) MP_INCLUDE = mproto.h mtypes.h huff.h bitio.h diff --git a/converter/ppm/ppmtompeg/gethostname_win32.c b/converter/ppm/ppmtompeg/gethostname_win32.c new file mode 100644 index 00000000..56a8dbfc --- /dev/null +++ b/converter/ppm/ppmtompeg/gethostname_win32.c @@ -0,0 +1,402 @@ +// define this macro for activating debugging version +//#define GETHOSTNAME_LOCAL_DEBUG 1 + +#include <windows.h> +#include <tchar.h> +#include <stdarg.h> + +#ifndef GETHOSTNAME_LOCAL_DEBUG +#include "pm.h" +#include "gethostname.h" +#endif + +#define BUFSIZE 80 + +typedef void (WINAPI *PGNSI)(LPSYSTEM_INFO); +typedef BOOL (WINAPI *PGPI)(DWORD, DWORD, DWORD, DWORD, PDWORD); + +typedef struct { + char str[256]; + int level; +} push_string_t; + +static void +pushString(push_string_t *p, char *fmt, ...) +{ + va_list args; + + va_start(args, fmt); + p->level += _vsnprintf(p->str + p->level, sizeof(p->str)-p->level, fmt, args); + va_end(args); +} + +#if _WIN32_WINNT < 0x0600 +/* + * Reference available here: + * + * GetProductInfo() Function + * http://msdn2.microsoft.com/en-us/library/ms724358.aspx + */ +#define PRODUCT_BUSINESS 0x00000006 // Business Edition +#define PRODUCT_BUSINESS_N 0x00000010 // Business Edition +#define PRODUCT_CLUSTER_SERVER 0x00000012 // Cluster Server Edition +#define PRODUCT_DATACENTER_SERVER 0x00000008 // Server Datacenter Edition (full installation) +#define PRODUCT_DATACENTER_SERVER_CORE 0x0000000C // Server Datacenter Edition (core installation) +#define PRODUCT_ENTERPRISE 0x00000004 // Enterprise Edition +#define PRODUCT_ENTERPRISE_N 0x0000001B // Enterprise Edition +#define PRODUCT_ENTERPRISE_SERVER 0x0000000A // Server Enterprise Edition (full installation) +#define PRODUCT_ENTERPRISE_SERVER_CORE 0x0000000E // Server Enterprise Edition (core installation) +#define PRODUCT_ENTERPRISE_SERVER_IA64 0x0000000F // Server Enterprise Edition for Itanium-based Systems +#define PRODUCT_HOME_BASIC 0x00000002 // Home Basic Edition +#define PRODUCT_HOME_BASIC_N 0x00000005 // Home Basic Edition +#define PRODUCT_HOME_PREMIUM 0x00000003 // Home Premium Edition +#define PRODUCT_HOME_PREMIUM_N 0x0000001A // Home Premium Edition +#define PRODUCT_HOME_SERVER 0x00000013 // Home Server Edition +#define PRODUCT_SERVER_FOR_SMALLBUSINESS 0x00000018 // Server for Small Business Edition +#define PRODUCT_SMALLBUSINESS_SERVER 0x00000009 // Small Business Server +#define PRODUCT_SMALLBUSINESS_SERVER_PREMIUM 0x00000019 // Small Business Server Premium Edition +#define PRODUCT_STANDARD_SERVER 0x00000007 // Server Standard Edition (full installation) +#define PRODUCT_STANDARD_SERVER_CORE 0x0000000D // Server Standard Edition (core installation) +#define PRODUCT_STARTER 0x0000000B // Starter Edition +#define PRODUCT_STORAGE_ENTERPRISE_SERVER 0x00000017 // Storage Server Enterprise Edition +#define PRODUCT_STORAGE_EXPRESS_SERVER 0x00000014 // Storage Server Express Edition +#define PRODUCT_STORAGE_STANDARD_SERVER 0x00000015 // Storage Server Standard Edition +#define PRODUCT_STORAGE_WORKGROUP_SERVER 0x00000016 // Storage Server Workgroup Edition +#define PRODUCT_UNDEFINED 0x00000000 // An unknown product +#define PRODUCT_ULTIMATE 0x00000001 // Ultimate Edition +#define PRODUCT_ULTIMATE_N 0x0000001C // Ultimate Edition +#define PRODUCT_WEB_SERVER 0x00000011 // Web Server Edition (full installation) +#define PRODUCT_WEB_SERVER_CORE 0x0000001D // Web Server Edition (core installation) +#endif + +static BOOL +get_string_version(push_string_t *str) +{ + OSVERSIONINFOEX osvi; + SYSTEM_INFO si; + PGPI pGPI; + PGNSI pGNSI; + BOOL bOsVersionInfoEx; + DWORD dwType; + + ZeroMemory(&si, sizeof(SYSTEM_INFO)); + ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX)); + + // Try calling GetVersionEx using the OSVERSIONINFOEX structure. + // If that fails, try using the OSVERSIONINFO structure. + osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); + if( !(bOsVersionInfoEx = GetVersionEx ((OSVERSIONINFO *) &osvi)) ) + { + osvi.dwOSVersionInfoSize = sizeof (OSVERSIONINFO); + if (! GetVersionEx ( (OSVERSIONINFO *) &osvi) ) + return FALSE; + } + + // Call GetNativeSystemInfo if supported or GetSystemInfo otherwise. + pGNSI = (PGNSI) + GetProcAddress(GetModuleHandle(TEXT("kernel32.dll")), + "GetNativeSystemInfo"); + if (NULL != pGNSI) + pGNSI(&si); + else + GetSystemInfo(&si); + + switch (osvi.dwPlatformId) + { + // Test for the Windows NT product family. + case VER_PLATFORM_WIN32_NT: + // Test for the specific product. + if (osvi.dwMajorVersion == 6 && osvi.dwMinorVersion == 0) + { + if (osvi.wProductType == VER_NT_WORKSTATION) + pushString(str, "Windows Vista "); + else + pushString(str, "Windows Server 2008 "); + + pGPI = (PGPI) GetProcAddress( + GetModuleHandle(TEXT("kernel32.dll")), + "GetProductInfo"); + + pGPI( 6, 0, 0, 0, &dwType); + switch (dwType) + { + case PRODUCT_ULTIMATE: + pushString(str, "Ultimate Edition"); + break; + case PRODUCT_HOME_PREMIUM: + pushString(str, "Home Premium Edition"); + break; + case PRODUCT_HOME_BASIC: + pushString(str, "Home Basic Edition"); + break; + case PRODUCT_ENTERPRISE: + pushString(str, "Enterprise Edition"); + break; + case PRODUCT_BUSINESS: + pushString(str, "Business Edition"); + break; + case PRODUCT_STARTER: + pushString(str, "Starter Edition"); + break; + case PRODUCT_CLUSTER_SERVER: + pushString(str, "Cluster Server Edition"); + break; + case PRODUCT_DATACENTER_SERVER: + pushString(str, "Datacenter Edition"); + break; + case PRODUCT_DATACENTER_SERVER_CORE: + pushString(str, "Datacenter Edition (core installation)"); + break; + case PRODUCT_ENTERPRISE_SERVER: + pushString(str, "Enterprise Edition"); + break; + case PRODUCT_ENTERPRISE_SERVER_CORE: + pushString(str, "Enterprise Edition (core installation)"); + break; + case PRODUCT_ENTERPRISE_SERVER_IA64: + pushString(str, "Enterprise Edition for Itanium-based Systems"); + break; + case PRODUCT_SMALLBUSINESS_SERVER: + pushString(str, "Small Business Server"); + break; + case PRODUCT_SMALLBUSINESS_SERVER_PREMIUM: + pushString(str, "Small Business Server Premium Edition"); + break; + case PRODUCT_STANDARD_SERVER: + pushString(str, "Standard Edition"); + break; + case PRODUCT_STANDARD_SERVER_CORE: + pushString(str, "Standard Edition (core installation)"); + break; + case PRODUCT_WEB_SERVER: + pushString(str, "Web Server Edition"); + break; + } + if (si.wProcessorArchitecture==PROCESSOR_ARCHITECTURE_AMD64) + pushString(str, ", 64-bit"); + else + if (si.wProcessorArchitecture==PROCESSOR_ARCHITECTURE_INTEL) + pushString(str, ", 32-bit"); + else + /* space for optional build number */ + pushString(str, " "); + } + else + if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 2 ) + { + if( GetSystemMetrics(SM_SERVERR2) ) + pushString(str, "Microsoft Windows Server 2003 \"R2\" "); + else + if ( osvi.wSuiteMask==VER_SUITE_STORAGE_SERVER ) + pushString(str, "Windows Storage Server 2003 "); + else + if( osvi.wProductType == VER_NT_WORKSTATION && + si.wProcessorArchitecture==PROCESSOR_ARCHITECTURE_AMD64) + pushString(str, "Microsoft Windows XP Professional x64 Edition "); + else + pushString(str, "Microsoft Windows Server 2003, "); + + // Test for the server type. + if ( osvi.wProductType != VER_NT_WORKSTATION ) + { + switch (si.wProcessorArchitecture) + { + case PROCESSOR_ARCHITECTURE_IA64: + if (osvi.wSuiteMask & VER_SUITE_DATACENTER) + pushString(str, "Datacenter Edition for Itanium-based Systems "); + else + if (osvi.wSuiteMask & VER_SUITE_ENTERPRISE) + pushString(str, "Enterprise Edition for Itanium-based Systems "); + break; + + case PROCESSOR_ARCHITECTURE_AMD64: + if (osvi.wSuiteMask & VER_SUITE_DATACENTER) + pushString(str, "Datacenter x64 Edition "); + else + if (osvi.wSuiteMask & VER_SUITE_ENTERPRISE) + pushString(str, "Enterprise x64 Edition "); + else + pushString(str, "Standard x64 Edition "); + break; + + default: + if ( osvi.wSuiteMask & VER_SUITE_COMPUTE_SERVER) + pushString(str, "Compute Cluster Edition "); + else + if ( osvi.wSuiteMask & VER_SUITE_DATACENTER) + pushString(str, "Datacenter Edition "); + else + if ( osvi.wSuiteMask & VER_SUITE_ENTERPRISE) + pushString(str, "Enterprise Edition "); + else + if ( osvi.wSuiteMask & VER_SUITE_BLADE) + pushString(str, "Web Edition "); + else + pushString(str, "Standard Edition "); + break; + } + } + } + else + if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 1 ) + { + pushString(str, "Microsoft Windows XP "); + if( osvi.wSuiteMask & VER_SUITE_PERSONAL ) + pushString(str, "Home Edition "); + else + pushString(str, "Professional "); + } + else + if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 0 ) + { + pushString(str, "Microsoft Windows 2000 "); + if (osvi.wProductType == VER_NT_WORKSTATION) + pushString(str, "Professional "); + else + if (osvi.wSuiteMask & VER_SUITE_DATACENTER) + pushString(str, "Datacenter Server "); + else + if (osvi.wSuiteMask & VER_SUITE_ENTERPRISE) + pushString(str, "Advanced Server "); + else + pushString(str, "Server "); + } else + if ( osvi.dwMajorVersion <= 4 ) + pushString(str, "Microsoft Windows NT "); + + // Test for specific product on Windows NT 4.0 SP6 and later. + if (bOsVersionInfoEx) + { + // Test for the workstation type. + switch (osvi.wProductType) + { + case VER_NT_WORKSTATION: + if (si.wProcessorArchitecture!=PROCESSOR_ARCHITECTURE_AMD64 && + osvi.dwMajorVersion == 4) + pushString(str, "Workstation 4.0 "); + break; + + case VER_NT_SERVER: + case VER_NT_DOMAIN_CONTROLLER: + if (osvi.wSuiteMask & VER_SUITE_ENTERPRISE) + pushString(str, "Server 4.0, Enterprise Edition "); + else + pushString(str, "Server 4.0 "); + break; + } + } + // Test for specific product on Windows NT 4.0 SP5 and earlier + else + { + HKEY hKey; + TCHAR szProductType[BUFSIZE]; + DWORD dwBufLen=BUFSIZE*sizeof(TCHAR); + LONG lRet; + + lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, + TEXT("SYSTEM\\CurrentControlSet\\Control\\ProductOptions"), + 0, KEY_QUERY_VALUE, &hKey); + if (lRet != ERROR_SUCCESS) + return FALSE; + + lRet = RegQueryValueEx(hKey, TEXT("ProductType"), NULL, NULL, + (LPBYTE) szProductType, &dwBufLen); + RegCloseKey( hKey ); + + if ((lRet != ERROR_SUCCESS) || (dwBufLen > BUFSIZE*sizeof(TCHAR))) + return FALSE; + + if (lstrcmpi(TEXT("WINNT"), szProductType) == 0) + pushString(str, "Workstation "); + else + if (lstrcmpi(TEXT("LANMANNT"), szProductType) == 0) + pushString(str, "Server "); + else + if (lstrcmpi( TEXT("SERVERNT"), szProductType) == 0) + pushString(str, "Advanced Server "); + else + pushString(str, "%d.%d ", osvi.dwMajorVersion, osvi.dwMinorVersion); + } + + // Display service pack (if any) and build number. + if (osvi.dwMajorVersion == 4 && + lstrcmpi(osvi.szCSDVersion, TEXT("Service Pack 6")) == 0) + { + HKEY hKey; + LONG lRet; + + // Test for SP6 versus SP6a. + lRet = RegOpenKeyEx( HKEY_LOCAL_MACHINE, + TEXT("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Hotfix\\Q246009"), + 0, KEY_QUERY_VALUE, &hKey ); + if( lRet == ERROR_SUCCESS ) + pushString(str, "Service Pack 6a (Build %d)\n", osvi.dwBuildNumber & 0xFFFF ); + else + // Windows NT 4.0 prior to SP6a + pushString(str, "%s (Build %d)\n", osvi.szCSDVersion, osvi.dwBuildNumber & 0xFFFF); + + RegCloseKey( hKey ); + } + else // not Windows NT 4.0 + pushString(str, "%s (Build %d)\n", osvi.szCSDVersion, osvi.dwBuildNumber & 0xFFFF); + + break; + + // Test for the Windows Me/98/95. + case VER_PLATFORM_WIN32_WINDOWS: + if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 0) + { + pushString(str, "Microsoft Windows 95"); + if (osvi.szCSDVersion[1]=='C' || osvi.szCSDVersion[1]=='B') + pushString(str, " OSR2"); + } + else + if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 10) + { + pushString(str, "Microsoft Windows 98"); + if (osvi.szCSDVersion[1]=='A' || osvi.szCSDVersion[1]=='B') + pushString(str, " SE"); + } + else + if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 90) + pushString(str, "Microsoft Windows Millennium Edition\n"); + break; + + case VER_PLATFORM_WIN32s: + pushString(str, "Microsoft Win32s\n"); + break; + } + return TRUE; +} + +const char * +GetHostName(void) +{ +/*---------------------------------------------------------------------------- + Return the host name of this system. +-----------------------------------------------------------------------------*/ + push_string_t str; + + ZeroMemory(&str, sizeof(str)); + if (!get_string_version(&str)) { +#ifndef GETHOSTNAME_LOCAL_DEBUG + pm_error("Unable to find out host name."); +#endif + pushString(&str, "unknown"); + } + return (const char *)_strdup(str.str); +} + +#ifdef GETHOSTNAME_LOCAL_DEBUG +int WINAPI WinMain(HINSTANCE hCurInst, HINSTANCE hPrevInst, + LPSTR lpsCmdLine, int nCmdShow) +{ + char *hostName = (char *)GetHostName(); + + /* compile as ascii only (not UNICODE) */ + MessageBox(NULL, hostName, TEXT("GetHostName"), MB_OK); + free(hostName); + + return 0; +} +#endif diff --git a/converter/ppm/ppmtompeg/specifics.c b/converter/ppm/ppmtompeg/specifics.c index c7bbfb5b..38e8fc43 100644 --- a/converter/ppm/ppmtompeg/specifics.c +++ b/converter/ppm/ppmtompeg/specifics.c @@ -47,12 +47,6 @@ #include <string.h> #include "prototypes.h" -/*====================* - * System Information * - *====================*/ - -#define CPP_LOC "/lib/cpp" - /*==================* * GLOBAL VARIABLES * *==================*/ @@ -153,26 +147,27 @@ static char version = -1; * *================================================================ */ -void Specifics_Init() -{ - char command[1100]; - FILE *specificsFP; - - sprintf(command, "/bin/rm -f %s.cpp", specificsFile); - system(command); - sprintf(command, "%s -P %s %s %s.cpp", - CPP_LOC, specificsDefines, specificsFile, specificsFile); - system(command); - strcat(specificsFile, ".cpp"); - if ((specificsFP = fopen(specificsFile, "r")) == NULL) { - fprintf(stderr, "Error with specifics file, cannot open %s\n", specificsFile); - exit(1); - } - printf("Specifics file: %s\n", specificsFile); - Parse_Specifics_File(specificsFP); - sprintf(command, "/bin/rm -f %s.cpp", specificsFile); - system(command); +void +Specifics_Init() { + char command[1100]; + FILE *specificsFP; + + sprintf(command, "rm -f %s.cpp", specificsFile); + system(command); + sprintf(command, "cpp -P %s %s %s.cpp", + specificsDefines, specificsFile, specificsFile); + system(command); + strcat(specificsFile, ".cpp"); + if ((specificsFP = fopen(specificsFile, "r")) == NULL) { + fprintf(stderr, "Error with specifics file, cannot open %s\n", + specificsFile); + exit(1); + } + printf("Specifics file: %s\n", specificsFile); + Parse_Specifics_File(specificsFP); + sprintf(command, "rm -f %s.cpp", specificsFile); + system(command); } |