#include <winsock.h>
#endif
-#if !defined(__GNUWIN32__) && !defined(__SALFORDC__) && !defined(__WXMICROWIN__) && !defined(__WXWINCE__)
+#if !defined(__GNUWIN32__) && !defined(__WXMICROWIN__) && !defined(__WXWINCE__)
#include <direct.h>
#ifndef __MWERKS__
{
wxCHECK_MSG( buf && ( maxSize > 0 ), false,
_T("empty buffer in wxGetUserName") );
-#if defined(__WXWINCE__)
+#if defined(__WXWINCE__) && wxUSE_REGKEY
wxLogNull noLog;
wxRegKey key(wxRegKey::HKCU, wxT("ControlPanel\\Owner"));
if(!key.Open(wxRegKey::Read))
return strDir.c_str();
}
-wxChar *wxGetUserHome(const wxString& WXUNUSED(user))
+wxString wxGetUserHome(const wxString& user)
{
- // VZ: the old code here never worked for user != "" anyhow! Moreover, it
- // returned sometimes a malloc()'d pointer, sometimes a pointer to a
- // static buffer and sometimes I don't even know what.
- static wxString s_home;
+ wxString home;
+
+ if ( user.empty() || user == wxGetUserId() )
+ wxGetHomeDir(&home);
- return (wxChar *)wxGetHomeDir(&s_home);
+ return home;
}
bool wxGetDiskSpace(const wxString& WXUNUSED_IN_WINCE(path),
wxOperatingSystemId wxGetOsVersion(int *verMaj, int *verMin)
{
- OSVERSIONINFO info;
- wxZeroMemory(info);
+ static struct
+ {
+ // this may be false, true or -1 if we tried to initialize but failed
+ int initialized;
- info.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
- if ( ::GetVersionEx(&info) )
+ wxOperatingSystemId os;
+
+ int verMaj,
+ verMin;
+ } s_version;
+
+ // query the OS info only once as it's not supposed to change
+ if ( !s_version.initialized )
{
- if (verMaj) *verMaj = info.dwMajorVersion;
- if (verMin) *verMin = info.dwMinorVersion;
+ OSVERSIONINFO info;
+ wxZeroMemory(info);
+ info.dwOSVersionInfoSize = sizeof(info);
+ if ( ::GetVersionEx(&info) )
+ {
+ s_version.initialized = true;
+
+#if defined(__WXWINCE__)
+ s_version.os = wxOS_WINDOWS_CE;
+#elif defined(__WXMICROWIN__)
+ s_version.os = wxOS_WINDOWS_MICRO;
+#else // "normal" desktop Windows system, use run-time detection
+ switch ( info.dwPlatformId )
+ {
+ case VER_PLATFORM_WIN32_NT:
+ s_version.os = wxOS_WINDOWS_NT;
+ break;
+
+ case VER_PLATFORM_WIN32_WINDOWS:
+ s_version.os = wxOS_WINDOWS_9X;
+ break;
+ }
+#endif // Windows versions
+
+ s_version.verMaj = info.dwMajorVersion;
+ s_version.verMin = info.dwMinorVersion;
+ }
+ else // GetVersionEx() failed
+ {
+ s_version.initialized = -1;
+ }
}
-#if defined( __WXWINCE__ )
- return wxOS_WINDOWS_CE;
-#elif defined( __WXMICROWIN__ )
- return wxOS_WINDOWS_MICRO;
-#else
- switch ( info.dwPlatformId )
+ if ( s_version.initialized == 1 )
{
- case VER_PLATFORM_WIN32_NT:
- return wxOS_WINDOWS_NT;
-
- case VER_PLATFORM_WIN32_WINDOWS:
- return wxOS_WINDOWS_9X;
+ if ( verMaj )
+ *verMaj = s_version.verMaj;
+ if ( verMin )
+ *verMin = s_version.verMin;
}
- return wxOS_UNKNOWN;
-#endif
+ // this works even if we were not initialized successfully as the initial
+ // values of this field is 0 which is wxOS_UNKNOWN and exactly what we need
+ return s_version.os;
}
wxWinVersion wxGetWinVersion()
case wxFONTENCODING_ISO8859_13: ret = 28603; break;
// case wxFONTENCODING_ISO8859_14: ret = 28604; break; // no correspondence on Windows
case wxFONTENCODING_ISO8859_15: ret = 28605; break;
+
case wxFONTENCODING_KOI8: ret = 20866; break;
case wxFONTENCODING_KOI8_U: ret = 21866; break;
+
case wxFONTENCODING_CP437: ret = 437; break;
case wxFONTENCODING_CP850: ret = 850; break;
case wxFONTENCODING_CP852: ret = 852; break;
case wxFONTENCODING_CP1255: ret = 1255; break;
case wxFONTENCODING_CP1256: ret = 1256; break;
case wxFONTENCODING_CP1257: ret = 1257; break;
+
case wxFONTENCODING_EUC_JP: ret = 20932; break;
+
case wxFONTENCODING_MACROMAN: ret = 10000; break;
case wxFONTENCODING_MACJAPANESE: ret = 10001; break;
case wxFONTENCODING_MACCHINESETRAD: ret = 10002; break;
case wxFONTENCODING_MACCROATIAN: ret = 10082; break;
case wxFONTENCODING_MACICELANDIC: ret = 10079; break;
case wxFONTENCODING_MACROMANIAN: ret = 10009; break;
+
+ case wxFONTENCODING_ISO2022_JP: ret = 50222; break;
+
case wxFONTENCODING_UTF7: ret = 65000; break;
case wxFONTENCODING_UTF8: ret = 65001; break;
+
default: return -1;
}
long CP = -1;
+#if wxUSE_REGKEY
wxString path(wxT("MIME\\Database\\Charset\\"));
wxString cn(name);
!key.QueryValue(wxT("AliasForCharset"), cn))
break;
}
+#endif // wxUSE_REGKEY
return CP;
}