]> git.saurik.com Git - wxWidgets.git/blobdiff - src/os2/utils.cpp
fix for discrepancies between wxNotebookEvent and wxNotebook GetSelection() results
[wxWidgets.git] / src / os2 / utils.cpp
index 9bfe35f46feab1663433750a8fbfd5256c4ac366..cf95be985587da9edae84d5ddfcc650fe071400b 100644 (file)
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+//
+// already defined via nerror.h in app.h so undef them
+//
+#ifdef EEXIST
+#undef EEXIST
+#endif
+#ifdef ENOENT
+#undef ENOENT
+#endif
+#ifdef EMFILE
+#undef EMFILE
+#endif
+#ifdef EINTR
+#undef EINTR
+#endif
+#ifdef EINVAL
+#undef EINVAL
+#endif
+#ifdef ENOMEM
+#undef ENOMEM
+#endif
+#ifdef EACCES
+#undef EACCES
+#endif
 #include <errno.h>
 #include <stdarg.h>
 
@@ -212,6 +236,49 @@ long wxGetFreeMemory()
     return (long)lSize;
 }
 
+// ----------------------------------------------------------------------------
+// env vars
+// ----------------------------------------------------------------------------
+
+bool wxGetEnv(const wxString& var, wxString *value)
+{
+    // wxGetenv is defined as getenv()
+    wxChar *p = wxGetenv(var);
+    if ( !p )
+        return FALSE;
+
+    if ( value )
+    {
+        *value = p;
+    }
+
+    return TRUE;
+}
+
+bool wxSetEnv(const wxString& variable, const wxChar *value)
+{
+#if defined(HAVE_SETENV)
+    return setenv(variable.mb_str(), value ? wxString(value).mb_str().data()
+                                           : NULL, 1 /* overwrite */) == 0;
+#elif defined(HAVE_PUTENV)
+    wxString s = variable;
+    if ( value )
+        s << _T('=') << value;
+
+    // transform to ANSI
+    const char *p = s.mb_str();
+
+    // the string will be free()d by libc
+    char *buf = (char *)malloc(strlen(p) + 1);
+    strcpy(buf, p);
+
+    return putenv(buf) == 0;
+#else // no way to set an env var
+    return FALSE;
+#endif
+}
+
+
 // Sleep for nSecs seconds. Attempt a Windows implementation using timers.
 static bool inTimer = FALSE;
 
@@ -755,6 +822,43 @@ void wxDisplaySize(
     *pHeight = (int)lHeight;
 }
 
+void wxDisplaySizeMM(
+  int*                              pWidth
+, int*                              pHeight
+)
+{
+    HPS                             hpsScreen;
+    HDC                             hdcScreen;
+
+    hpsScreen = ::WinGetScreenPS(HWND_DESKTOP);
+    hdcScreen = ::GpiQueryDevice(hpsScreen);
+
+    if (pWidth)
+        ::DevQueryCaps( hdcScreen
+                       ,CAPS_HORIZONTAL_RESOLUTION
+                       ,1L
+                       ,(PLONG)pWidth
+                      );
+    if (pHeight)
+        ::DevQueryCaps( hdcScreen
+                       ,CAPS_VERTICAL_RESOLUTION
+                       ,1L
+                       ,(PLONG)pHeight
+                      );
+}
+
+void wxClientDisplayRect(int *x, int *y, int *width, int *height)
+{
+    // This is supposed to return desktop dimensions minus any window
+    // manager panels, menus, taskbars, etc.  If there is a way to do that
+    // for this platform please fix this function, otherwise it defaults
+    // to the entire desktop.
+    if (x) *x = 0;
+    if (y) *y = 0;
+    wxDisplaySize(width, height);
+}
+
+
 bool wxDirExists(
   const wxString&                   rDir
 )