X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/c030b70fc6270c2e44a81f83e69fcc91d2b3c768..e306597309a120f2ae91385c731a5cb2722c52aa:/src/msw/utils.cpp diff --git a/src/msw/utils.cpp b/src/msw/utils.cpp index fdb322892c..6d51207e7c 100644 --- a/src/msw/utils.cpp +++ b/src/msw/utils.cpp @@ -29,17 +29,21 @@ #include "wx/msw/private.h" #include "wx/timer.h" +#include "wx/intl.h" #include #include -#ifndef __GNUWIN32__ +#if !defined(__GNUWIN32__) && !defined(__SALFORDC__) #include + +#ifndef __MWERKS__ #include +#endif #endif //GNUWIN32 -#ifdef __GNUWIN32__ +#if defined(__GNUWIN32__) && !defined(__TWIN32__) #include #include #endif //GNUWIN32 @@ -64,41 +68,26 @@ #include #include #ifndef __WATCOMC__ -#if !(defined(_MSC_VER) && (_MSC_VER > 800)) -#include -#endif + #if !(defined(_MSC_VER) && (_MSC_VER > 800)) + #include + #endif #endif #include //// BEGIN for console support: VC++ only -#if defined(__WXDEBUG__) && defined(_MSC_VER) && !defined(__NO_VC_CRTDBG__) - #define wxUSE_VC_CRTDBG -#else - #undef wxUSE_VC_CRTDBG -#endif +#include "wx/msw/msvcrt.h" -#ifdef wxUSE_VC_CRTDBG - // VC++ uses this macro as debug/release mode indicator - #ifndef _DEBUG - #define _DEBUG - #endif +#include - #include +#include "wx/ioswrap.h" #if wxUSE_IOSTREAMH // N.B. BC++ doesn't have istream.h, ostream.h -# include # include # include - #else -# include -# include # include -# ifdef _MSC_VER - using namespace std; -# endif #endif /* Need to undef new if including crtdbg.h */ @@ -106,14 +95,14 @@ # undef new # endif +#ifndef __WIN16__ # include +#endif # if defined(__WXDEBUG__) && wxUSE_GLOBAL_MEMORY_OPERATORS && wxUSE_DEBUG_NEW_ALWAYS # define new new(__FILE__,__LINE__) # endif -#endif - /// END for console support // In the WIN.INI file @@ -130,7 +119,7 @@ static const char eUSERNAME[] = "UserName"; // Get full hostname (eg. DoDo.BSn-Germany.crg.de) bool wxGetHostName(char *buf, int maxSize) { -#ifdef __WIN32__ +#if defined(__WIN32__) && !defined(__TWIN32__) DWORD nSize = maxSize; return (::GetComputerName(buf, &nSize) != 0); #else @@ -149,7 +138,10 @@ bool wxGetHostName(char *buf, int maxSize) // Get user ID e.g. jacs bool wxGetUserId(char *buf, int maxSize) { -#if defined(__WIN32__) && !defined(__win32s__) && 0 +#if defined(__WIN32__) && !defined(__win32s__) && !defined(__TWIN32__) + + // VZ: why should it be so complicated?? +#if 0 // Gets the current user's full name according to the MS article PSS ID // Number: Q119670 // Seems to be the same as the login name for me? @@ -193,11 +185,19 @@ bool wxGetUserId(char *buf, int maxSize) -1, buf, 256, NULL, NULL ); } return( TRUE ); -/* - DWORD nSize = maxSize; - return ::GetUserName(buf, &nSize); -*/ -#else +#else // 1 + DWORD nSize = maxSize; + if ( ::GetUserName(buf, &nSize) == 0 ) + { + wxLogSysError("Can not get user name"); + + return FALSE; + } + + return TRUE; +#endif // 0/1 + +#else // Win16 or Win32s char *user; const char *default_id = "anonymous"; @@ -216,22 +216,7 @@ bool wxGetUserId(char *buf, int maxSize) // Get user name e.g. Julian Smart bool wxGetUserName(char *buf, int maxSize) { - const char *default_name = "Unknown User"; -#if defined(__WIN32__) -/* - DWORD nSize = maxSize; - In VC++ 4.0, results in unresolved symbol __imp__GetUserNameA - if (GetUserName(buf, &nSize)) - return TRUE; - else -*/ - // Could use NIS, MS-Mail or other site specific programs - // Use wxWindows configuration data - GetProfileString(WX_SECTION, eUSERNAME, default_name, buf, maxSize - 1); - return *buf ? TRUE : FALSE; -// } -#else -#if !defined(__WATCOMC__) && !defined(__GNUWIN32__) && wxUSE_PENWINDOWS +#if wxUSE_PENWINDOWS && !defined(__WATCOMC__) && !defined(__GNUWIN32__) extern HANDLE g_hPenWin; // PenWindows Running? if (g_hPenWin) { @@ -245,10 +230,19 @@ bool wxGetUserName(char *buf, int maxSize) { // Could use NIS, MS-Mail or other site specific programs // Use wxWindows configuration data - GetProfileString(WX_SECTION, eUSERNAME, default_name, buf, maxSize - 1); + bool ok = GetProfileString(WX_SECTION, eUSERNAME, "", buf, maxSize - 1) != 0; + if ( !ok ) + { + ok = wxGetUserId(buf, maxSize); + } + + if ( !ok ) + { + strncpy(buf, "Unknown User", maxSize); + } } - return *buf ? TRUE : FALSE; -#endif + + return TRUE; } int wxKill(long pid, int sig) @@ -278,7 +272,7 @@ wxShell(const wxString& command) // Get free memory in bytes, or -1 if cannot determine amount (e.g. on UNIX) long wxGetFreeMemory(void) { -#if defined(__WIN32__) && !defined(__BORLANDC__) +#if defined(__WIN32__) && !defined(__BORLANDC__) && !defined(__TWIN32__) MEMORYSTATUS memStatus; memStatus.dwLength = sizeof(MEMORYSTATUS); GlobalMemoryStatus(&memStatus); @@ -382,7 +376,7 @@ int wxGetOsVersion(int *majorVsn, int *minorVsn) if (majorVsn) *majorVsn = 0; if (minorVsn) *minorVsn = 0; -#ifdef WIN32 +#if defined(__WIN32__) && !defined(__SC__) OSVERSIONINFO info; memset(&info, 0, sizeof(OSVERSIONINFO)); info.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); @@ -406,7 +400,7 @@ int wxGetOsVersion(int *majorVsn, int *minorVsn) return wxWINDOWS; // error if we get here, return generic value #else // Win16 code... - int retValue ; + int retValue = 0; # ifdef __WINDOWS_386__ retValue = wxWIN386; # else @@ -557,7 +551,7 @@ const char* wxGetHomeDir(wxString *pstr) { wxString& strDir = *pstr; - #ifdef __UNIX__ + #if defined(__UNIX__) && !defined(__TWIN32__) const char *szHome = getenv("HOME"); if ( szHome == NULL ) { // we're homeless... @@ -667,7 +661,7 @@ bool wxCheckForInterrupt(wxWindow *wnd) char *wxLoadUserResource(const wxString& resourceName, const wxString& resourceType) { char *s = NULL; -#ifndef __WIN32__ +#if !defined(__WIN32__) || defined(__TWIN32__) HRSRC hResource = ::FindResource(wxGetInstance(), WXSTRINGCAST resourceName, WXSTRINGCAST resourceType); #else #ifdef UNICODE @@ -711,34 +705,34 @@ void wxGetMousePosition( int* x, int* y ) // Return TRUE if we have a colour display bool wxColourDisplay(void) { - HDC dc = ::GetDC(NULL); + HDC dc = ::GetDC((HWND) NULL); bool flag; int noCols = GetDeviceCaps(dc, NUMCOLORS); if ((noCols == -1) || (noCols > 2)) flag = TRUE; else flag = FALSE; - ReleaseDC(NULL, dc); + ReleaseDC((HWND) NULL, dc); return flag; } // Returns depth of screen int wxDisplayDepth(void) { - HDC dc = ::GetDC(NULL); + HDC dc = ::GetDC((HWND) NULL); int planes = GetDeviceCaps(dc, PLANES); int bitsPerPixel = GetDeviceCaps(dc, BITSPIXEL); int depth = planes*bitsPerPixel; - ReleaseDC(NULL, dc); + ReleaseDC((HWND) NULL, dc); return depth; } // Get size of display void wxDisplaySize(int *width, int *height) { - HDC dc = ::GetDC(NULL); + HDC dc = ::GetDC((HWND) NULL); *width = GetDeviceCaps(dc, HORZRES); *height = GetDeviceCaps(dc, VERTRES); - ReleaseDC(NULL, dc); + ReleaseDC((HWND) NULL, dc); } bool wxDirExists(const wxString& dir) @@ -755,14 +749,14 @@ bool wxDirExists(const wxString& dir) #endif #if defined(__WIN32__) - HANDLE h = FindFirstFile((LPTSTR) WXSTRINGCAST dir,(LPWIN32_FIND_DATA)&fileInfo); - - if (h==INVALID_HANDLE_VALUE) - return FALSE; - else { - FindClose(h); - return ((fileInfo.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY); - } + HANDLE h = FindFirstFile((LPTSTR) WXSTRINGCAST dir,(LPWIN32_FIND_DATA)&fileInfo); + + if (h==INVALID_HANDLE_VALUE) + return FALSE; + else { + FindClose(h); + return ((fileInfo.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY); + } #else // In Borland findfirst has a different argument // ordering from _dos_findfirst. But _dos_findfirst @@ -795,13 +789,13 @@ bool wxIsWild( const wxString& pattern ) wxString tmp = pattern; char *pat = WXSTRINGCAST(tmp); while (*pat) { - switch (*pat++) { - case '?': case '*': case '[': case '{': - return TRUE; - case '\\': - if (!*pat++) - return FALSE; - } + switch (*pat++) { + case '?': case '*': case '[': case '{': + return TRUE; + case '\\': + if (!*pat++) + return FALSE; + } } return FALSE; }; @@ -821,124 +815,124 @@ bool wxMatchWild( const wxString& pat, const wxString& text, bool dot_special ) // dot_special means '.' only matches '.' if (dot_special && *str == '.' && *pattern != *str) - return FALSE; + return FALSE; while ((*pattern != '\0') && (!done) && (((*str=='\0')&&((*pattern==OB)||(*pattern=='*')))||(*str!='\0'))) { - switch (*pattern) { - case '\\': - pattern++; - if (*pattern != '\0') - pattern++; - break; - case '*': - pattern++; - ret_code = FALSE; - while ((*str!='\0') - && (!(ret_code=wxMatchWild(pattern, str++, FALSE)))) - /*loop*/; - if (ret_code) { - while (*str != '\0') - str++; - while (*pattern != '\0') - pattern++; - } - break; - case '[': - pattern++; - repeat: - if ((*pattern == '\0') || (*pattern == ']')) { - done = TRUE; - break; - } - if (*pattern == '\\') { - pattern++; - if (*pattern == '\0') { - done = TRUE; - break; - } - } - if (*(pattern + 1) == '-') { - c = *pattern; - pattern += 2; - if (*pattern == ']') { - done = TRUE; - break; - } - if (*pattern == '\\') { - pattern++; - if (*pattern == '\0') { - done = TRUE; - break; - } - } - if ((*str < c) || (*str > *pattern)) { - pattern++; - goto repeat; - } - } else if (*pattern != *str) { - pattern++; - goto repeat; - } - pattern++; - while ((*pattern != ']') && (*pattern != '\0')) { - if ((*pattern == '\\') && (*(pattern + 1) != '\0')) - pattern++; - pattern++; - } - if (*pattern != '\0') { - pattern++, str++; - } - break; - case '?': - pattern++; - str++; - break; - case OB: - pattern++; - while ((*pattern != CB) && (*pattern != '\0')) { - cp = str; - ok = TRUE; - while (ok && (*cp != '\0') && (*pattern != '\0') - && (*pattern != ',') && (*pattern != CB)) { - if (*pattern == '\\') - pattern++; - ok = (*pattern++ == *cp++); - } - if (*pattern == '\0') { - ok = FALSE; - done = TRUE; - break; - } else if (ok) { - str = cp; - while ((*pattern != CB) && (*pattern != '\0')) { - if (*++pattern == '\\') { - if (*++pattern == CB) - pattern++; - } - } - } else { - while (*pattern!=CB && *pattern!=',' && *pattern!='\0') { - if (*++pattern == '\\') { + switch (*pattern) { + case '\\': + pattern++; + if (*pattern != '\0') + pattern++; + break; + case '*': + pattern++; + ret_code = FALSE; + while ((*str!='\0') + && (!(ret_code=wxMatchWild(pattern, str++, FALSE)))) + /*loop*/; + if (ret_code) { + while (*str != '\0') + str++; + while (*pattern != '\0') + pattern++; + } + break; + case '[': + pattern++; + repeat: + if ((*pattern == '\0') || (*pattern == ']')) { + done = TRUE; + break; + } + if (*pattern == '\\') { + pattern++; + if (*pattern == '\0') { + done = TRUE; + break; + } + } + if (*(pattern + 1) == '-') { + c = *pattern; + pattern += 2; + if (*pattern == ']') { + done = TRUE; + break; + } + if (*pattern == '\\') { + pattern++; + if (*pattern == '\0') { + done = TRUE; + break; + } + } + if ((*str < c) || (*str > *pattern)) { + pattern++; + goto repeat; + } + } else if (*pattern != *str) { + pattern++; + goto repeat; + } + pattern++; + while ((*pattern != ']') && (*pattern != '\0')) { + if ((*pattern == '\\') && (*(pattern + 1) != '\0')) + pattern++; + pattern++; + } + if (*pattern != '\0') { + pattern++, str++; + } + break; + case '?': + pattern++; + str++; + break; + case OB: + pattern++; + while ((*pattern != CB) && (*pattern != '\0')) { + cp = str; + ok = TRUE; + while (ok && (*cp != '\0') && (*pattern != '\0') + && (*pattern != ',') && (*pattern != CB)) { + if (*pattern == '\\') + pattern++; + ok = (*pattern++ == *cp++); + } + if (*pattern == '\0') { + ok = FALSE; + done = TRUE; + break; + } else if (ok) { + str = cp; + while ((*pattern != CB) && (*pattern != '\0')) { + if (*++pattern == '\\') { + if (*++pattern == CB) + pattern++; + } + } + } else { + while (*pattern!=CB && *pattern!=',' && *pattern!='\0') { + if (*++pattern == '\\') { if (*++pattern == CB || *pattern == ',') - pattern++; - } - } - } - if (*pattern != '\0') - pattern++; - } - break; - default: - if (*str == *pattern) { - str++, pattern++; - } else { - done = TRUE; - } - } + pattern++; + } + } + } + if (*pattern != '\0') + pattern++; + } + break; + default: + if (*str == *pattern) { + str++, pattern++; + } else { + done = TRUE; + } + } } while (*pattern == '*') - pattern++; + pattern++; return ((*str == '\0') && (*pattern == '\0')); }; @@ -972,7 +966,9 @@ To download dbwin32, see e.g.: http://ftp.digital.com/pub/micro/NT/WinSite/programr/dbwin32.zip */ +#if !defined(__MWERKS__) && !defined(__SALFORDC__) && !defined(__TWIN32__) #include +#endif void OutputDebugStringW95(const char* lpOutputString, ...) { @@ -997,8 +993,12 @@ void OutputDebugStringW95(const char* lpOutputString, ...) */ #ifdef _UNICODE ::OutputDebugStringW(achBuffer); +#else +#ifdef __TWIN32__ + ::OutputDebugString(achBuffer); #else ::OutputDebugStringA(achBuffer); +#endif #endif /* bail if it's not Win95 */ @@ -1049,7 +1049,7 @@ void OutputDebugStringW95(const char* lpOutputString, ...) WaitForSingleObject(heventDBWIN, INFINITE); /* write it to the shared memory */ -#ifdef __BORLANDC__ +#if defined( __BORLANDC__ ) || defined( __MWERKS__ ) || defined(__SALFORDC__) *((LPDWORD)lpszSharedMem) = getpid(); #else *((LPDWORD)lpszSharedMem) = _getpid(); @@ -1072,14 +1072,14 @@ void OutputDebugStringW95(const char* lpOutputString, ...) #endif -#ifdef wxUSE_VC_CRTDBG +#if 0 // maximum mumber of lines the output console should have static const WORD MAX_CONSOLE_LINES = 500; BOOL WINAPI MyConsoleHandler( DWORD dwCtrlType ) { // control signal type - FreeConsole(); - return TRUE; + FreeConsole(); + return TRUE; } void wxRedirectIOToConsole() @@ -1093,10 +1093,10 @@ void wxRedirectIOToConsole() AllocConsole(); // set the screen buffer to be big enough to let us scroll text - GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), + GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &coninfo); coninfo.dwSize.Y = MAX_CONSOLE_LINES; - SetConsoleScreenBufferSize(GetStdHandle(STD_OUTPUT_HANDLE), + SetConsoleScreenBufferSize(GetStdHandle(STD_OUTPUT_HANDLE), coninfo.dwSize); // redirect unbuffered STDOUT to the console @@ -1122,13 +1122,12 @@ void wxRedirectIOToConsole() fp = _fdopen( hConHandle, "w" ); *stderr = *fp; setvbuf( stderr, NULL, _IONBF, 0 ); - - // make cout, wcout, cin, wcin, wcerr, cerr, wclog and clog + + // make cout, wcout, cin, wcin, wcerr, cerr, wclog and clog // point to console as well ios::sync_with_stdio(); - SetConsoleCtrlHandler(MyConsoleHandler, TRUE); - + SetConsoleCtrlHandler(MyConsoleHandler, TRUE); } #else // Not supported