X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/32be10a45d1d19df9b0841183ac9502ba8c2cc32..0231d18f1aac3a64066f0b1dd5b1c979210528ea:/src/common/utilscmn.cpp?ds=sidebyside diff --git a/src/common/utilscmn.cpp b/src/common/utilscmn.cpp index c33db8913b..8b593c3091 100644 --- a/src/common/utilscmn.cpp +++ b/src/common/utilscmn.cpp @@ -110,24 +110,15 @@ // ============================================================================ // Array used in DecToHex conversion routine. -static wxChar hexArray[] = wxT("0123456789ABCDEF"); +static const wxChar hexArray[] = wxT("0123456789ABCDEF"); // Convert 2-digit hex number to decimal -int wxHexToDec(const wxString& buf) +int wxHexToDec(const wxString& str) { - int firstDigit, secondDigit; - - if (buf.GetChar(0) >= wxT('A')) - firstDigit = buf.GetChar(0) - wxT('A') + 10; - else - firstDigit = buf.GetChar(0) - wxT('0'); - - if (buf.GetChar(1) >= wxT('A')) - secondDigit = buf.GetChar(1) - wxT('A') + 10; - else - secondDigit = buf.GetChar(1) - wxT('0'); - - return (firstDigit & 0xF) * 16 + (secondDigit & 0xF ); + char buf[2]; + buf[0] = str.GetChar(0); + buf[1] = str.GetChar(1); + return wxHexToDec((const char*) buf); } // Convert decimal integer to 2-character hex string @@ -161,16 +152,6 @@ wxString wxDecToHex(int dec) // misc functions // ---------------------------------------------------------------------------- -// Don't synthesize KeyUp events holding down a key and producing KeyDown -// events with autorepeat. On by default and always on in wxMSW. wxGTK version -// in utilsgtk.cpp. -#ifndef __WXGTK__ -bool wxSetDetectableAutoRepeat( bool WXUNUSED(flag) ) -{ - return true; // detectable auto-repeat is the only mode MSW supports -} -#endif // !wxGTK - // Return the current date/time wxString wxNow() { @@ -365,8 +346,7 @@ void wxPlatform::AddPlatform(int platform) void wxPlatform::ClearPlatforms() { - delete sm_customPlatforms; - sm_customPlatforms = NULL; + wxDELETE(sm_customPlatforms); } /// Function for testing current platform @@ -563,6 +543,59 @@ wxString wxGetCurrentDir() #endif // 0 +// ---------------------------------------------------------------------------- +// Environment +// ---------------------------------------------------------------------------- + +#ifdef __WXOSX__ + #include +#endif + +bool wxGetEnvMap(wxEnvVariableHashMap *map) +{ + wxCHECK_MSG( map, false, wxS("output pointer can't be NULL") ); + +#if defined(__VISUALC__) + wxChar **env = _tenviron; +#elif defined(__VMS) + // Now this routine wil give false for OpenVMS + // TODO : should we do something with logicals? + char **env=NULL; +#elif defined(__WXOSX__) + // Under Mac shared libraries don't have access to the global environ + // variable so use this Mac-specific function instead as advised by + // environ(7) under Darwin + char ***penv = _NSGetEnviron(); + if ( !penv ) + return false; + char **env = *penv; +#else // non-MSVC non-Mac + // Not sure if other compilers have _tenviron so use the (more standard) + // ANSI version only for them. + char **env = environ; +#endif + + if ( env ) + { + wxString name, + value; + while ( *env ) + { + const wxString var(*env); + + name = var.BeforeFirst(wxS('='), &value); + + (*map)[name] = value; + + env++; + } + + return true; + } + + return false; +} + // ---------------------------------------------------------------------------- // wxExecute // ---------------------------------------------------------------------------- @@ -610,13 +643,14 @@ static bool ReadAll(wxInputStream *is, wxArrayString& output) static long wxDoExecuteWithCapture(const wxString& command, wxArrayString& output, wxArrayString* error, - int flags) + int flags, + const wxExecuteEnv *env) { // create a wxProcess which will capture the output wxProcess *process = new wxProcess; process->Redirect(); - long rc = wxExecute(command, wxEXEC_SYNC | flags, process); + long rc = wxExecute(command, wxEXEC_SYNC | flags, process, env); #if wxUSE_STREAMS if ( rc != -1 ) @@ -641,17 +675,19 @@ static long wxDoExecuteWithCapture(const wxString& command, return rc; } -long wxExecute(const wxString& command, wxArrayString& output, int flags) +long wxExecute(const wxString& command, wxArrayString& output, int flags, + const wxExecuteEnv *env) { - return wxDoExecuteWithCapture(command, output, NULL, flags); + return wxDoExecuteWithCapture(command, output, NULL, flags, env); } long wxExecute(const wxString& command, wxArrayString& output, wxArrayString& error, - int flags) + int flags, + const wxExecuteEnv *env) { - return wxDoExecuteWithCapture(command, output, &error, flags); + return wxDoExecuteWithCapture(command, output, &error, flags, env); } // ---------------------------------------------------------------------------- @@ -933,6 +969,16 @@ void wxQsort(void *const pbase, size_t total_elems, #if wxUSE_GUI +// this function is only really implemented for X11-based ports, including GTK1 +// (GTK2 sets detectable auto-repeat automatically anyhow) +#if !(defined(__WXX11__) || defined(__WXMOTIF__) || \ + (defined(__WXGTK__) && !defined(__WXGTK20__))) +bool wxSetDetectableAutoRepeat( bool WXUNUSED(flag) ) +{ + return true; +} +#endif // !X11-based port + // ---------------------------------------------------------------------------- // Launch default browser // ---------------------------------------------------------------------------- @@ -943,7 +989,7 @@ void wxQsort(void *const pbase, size_t total_elems, bool wxDoLaunchDefaultBrowser(const wxString& url, const wxString& scheme, int flags); #elif defined(__WXX11__) || defined(__WXGTK__) || defined(__WXMOTIF__) || defined(__WXCOCOA__) || \ - (defined(__WXMAC__) && !defined(__WXOSX_IPHONE__)) + (defined(__WXOSX__) ) // implemented in a port-specific utils source file: bool wxDoLaunchDefaultBrowser(const wxString& url, int flags); @@ -1343,7 +1389,7 @@ void wxInfoMessageBox(wxWindow* parent) GTK_MICRO_VERSION); #endif // __WXGTK__ - msg += wxS("\nCopyright (c) 1995-2009 wxWidgets team"); + msg += wxS("\nCopyright (c) 1995-2010 wxWidgets team"); wxMessageBox(msg, wxT("wxWidgets information"), wxICON_INFORMATION | wxOK,