X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/9dea36ef6d117e0562f0079345a77ff1696d3a49..3d5aff50cb85e5b3299bf046d185b172bd488f08:/src/os2/utils.cpp diff --git a/src/os2/utils.cpp b/src/os2/utils.cpp index a5dd628bad..94a7823eeb 100644 --- a/src/os2/utils.cpp +++ b/src/os2/utils.cpp @@ -24,7 +24,9 @@ #include "wx/intl.h" #include -#include +#ifdef __EMX__ +#include +#endif #include "wx/log.h" @@ -36,14 +38,13 @@ #include #include -#define INCL_DOS -#define INCL_PM -#define INCL_GPI -#include #define PURE_32 + +#ifndef __EMX__ #include #include #include +#endif static const wxChar WX_SECTION[] = _T("wxWindows"); static const wxChar eHOSTNAME[] = _T("HostName"); @@ -104,10 +105,12 @@ bool wxGetUserId( , int nType ) { +#ifndef __EMX__ long lrc; // UPM procs return 0 on success lrc = U32ELOCU((unsigned char*)zBuf, (unsigned long *)&nType); if (lrc == 0) return TRUE; +#endif return FALSE; } @@ -209,6 +212,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; @@ -228,7 +274,7 @@ void wxUsleep( unsigned long ulMilliseconds ) { - ::DosSleep(ulMilliseconds); + ::DosSleep(ulMilliseconds/1000l); } void wxSleep( @@ -624,6 +670,7 @@ wxChar* wxGetUserHome ( wxString sUser1(rUser); wxBuffer = new wxChar[256]; +#ifndef __EMX__ if (sUser1 != _T("")) { wxChar zTmp[64]; @@ -645,6 +692,7 @@ wxChar* wxGetUserHome ( sUser1 = _T(""); } } +#endif if (sUser1 == _T("")) { if ((zHome = wxGetenv(_T("HOME"))) != NULL) @@ -750,6 +798,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 ) @@ -807,3 +892,62 @@ WXWORD WXDLLEXPORT wxGetWindowId( return ::WinQueryWindowUShort((HWND)hWnd, QWS_ID); } +wxString WXDLLEXPORT wxPMErrorToStr( + ERRORID vError +) +{ + wxString sError; + + // + // Remove the high order byte -- it is useless + // + vError &= 0x0000ffff; + switch(vError) + { + case PMERR_INVALID_HWND: + sError = wxT("Invalid window handle specified"); + break; + + case PMERR_INVALID_FLAG: + sError = wxT("Invalid flag bit set"); + break; + + case PMERR_NO_MSG_QUEUE: + sError = wxT("No message queue available"); + break; + + case PMERR_INVALID_PARM: + sError = wxT("Parameter contained invalid data"); + break; + + case PMERR_INVALID_PARAMETERS: + sError = wxT("Parameter value is out of range"); + break; + + case PMERR_PARAMETER_OUT_OF_RANGE: + sError = wxT("Parameter value is out of range"); + break; + + case PMERR_INVALID_INTEGER_ATOM: + sError = wxT("Not a valid atom"); + break; + + case PMERR_INVALID_HATOMTBL: + sError = wxT("Atom table handle is invalid"); + break; + + case PMERR_INVALID_ATOM_NAME: + sError = wxT("Not a valid atom name"); + break; + + case PMERR_ATOM_NAME_NOT_FOUND: + sError = wxT("Valid name format, but cannot find name in atom table"); + break; + + default: + sError = wxT("Unknown error"); + } + return(sError); +} // end of wxPMErrorToStr + +