X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/88a7a4e10ed18f81a576dcd866cfbf02bf404c00..3c47c04740b7c456823e0fd31edbdf1e6bfff43b:/src/os2/utils.cpp?ds=sidebyside diff --git a/src/os2/utils.cpp b/src/os2/utils.cpp index 20da3f30ba..00aafc22cb 100644 --- a/src/os2/utils.cpp +++ b/src/os2/utils.cpp @@ -12,21 +12,22 @@ // For compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" +#include "wx/utils.h" + #ifndef WX_PRECOMP - #include "wx/utils.h" - #include "wx/app.h" #include "wx/intl.h" + #include "wx/log.h" #endif //WX_PRECOMP #include "wx/os2/private.h" #include "wx/apptrait.h" +#include "wx/filename.h" #include #ifdef __EMX__ #include #endif -#include "wx/log.h" #include @@ -82,7 +83,8 @@ bool wxGetHostName( wxChar* zBuf, int nMaxSize ) wxChar* zSysname; const wxChar* zDefaultHost = _T("noname"); - if ((zSysname = wxGetenv(_T("SYSTEM_NAME"))) == NULL) + if ((zSysname = wxGetenv(_T("SYSTEM_NAME"))) == NULL && + (zSysname = wxGetenv(_T("HOSTNAME"))) == NULL) { ::PrfQueryProfileString( HINI_PROFILE ,(PSZ)WX_SECTION @@ -135,19 +137,17 @@ int wxKill(long lPid, // // Execute a program in an Interactive Shell // -bool wxShell( - const wxString& rCommand -) +bool wxShell( const wxString& rCommand ) { - wxChar* zShell = _T("CMD.EXE"); - wxString sInputs; - STARTDATA SData = {0}; - PSZ PgmTitle = "Command Shell"; - APIRET rc; - PID vPid = 0; - ULONG ulSessID = 0; - UCHAR achObjBuf[256] = {0}; //error data if DosStart fails - RESULTCODES vResult; + wxChar* zShell = _T("CMD.EXE"); + wxString sInputs; + STARTDATA SData = {0}; + PSZ PgmTitle = "Command Shell"; + APIRET rc; + PID vPid = 0; + ULONG ulSessID = 0; + UCHAR achObjBuf[256] = {0}; //error data if DosStart fails + RESULTCODES vResult; SData.Length = sizeof(STARTDATA); SData.Related = SSF_RELATED_INDEPENDENT; @@ -157,7 +157,7 @@ bool wxShell( SData.PgmName = (char*)zShell; sInputs = _T("/C ") + rCommand; - SData.PgmInputs = (BYTE*)sInputs.c_str(); + SData.PgmInputs = (BYTE*)sInputs.wx_str(); SData.TermQ = 0; SData.Environment = 0; SData.InheritOpt = SSF_INHERTOPT_SHELL; @@ -198,18 +198,6 @@ bool wxShutdown(wxShutdownFlags WXUNUSED(wFlags)) return false; } -wxPowerType wxGetPowerType() -{ - // TODO - return wxPOWER_UNKNOWN; -} - -wxBatteryState wxGetBatteryState() -{ - // TODO - return wxBATTERY_UNKNOWN_STATE; -} - // Get free memory in bytes, or -1 if cannot determine amount (e.g. on UNIX) wxMemorySize wxGetFreeMemory() { @@ -250,11 +238,10 @@ bool wxGetEnv(const wxString& var, wxString *value) return true; } -bool wxSetEnv(const wxString& variable, const wxChar *value) +bool wxSetEnv(const wxString& variable, const char *value) { #if defined(HAVE_SETENV) - return setenv(variable.mb_str(), value ? wxString(value).mb_str().data() - : NULL, 1 /* overwrite */) == 0; + return setenv(variable.mb_str(), value, 1 /* overwrite */) == 0; #elif defined(HAVE_PUTENV) wxString s = variable; if ( value ) @@ -275,6 +262,16 @@ bool wxSetEnv(const wxString& variable, const wxChar *value) #endif } +bool wxSetEnv(const wxString& variable, const wxString& value) +{ + return wxDoSetEnv(variable, value.mb_str()); +} + +bool wxUnsetEnv(const wxString& variable) +{ + return wxDoSetEnv(variable, NULL); +} + void wxMilliSleep( unsigned long ulMilliseconds ) @@ -311,19 +308,18 @@ void wxBell() wxString wxGetOsDescription() { wxString strVer(_T("OS/2")); - ULONG ulSysInfo[QSV_MAX] = {0}; + ULONG ulSysInfo = 0; - if (::DosQuerySysInfo( 1L, - QSV_MAX, - (PVOID)ulSysInfo, - sizeof(ULONG) * QSV_MAX + if (::DosQuerySysInfo( QSV_VERSION_MINOR, + QSV_VERSION_MINOR, + (PVOID)&ulSysInfo, + sizeof(ULONG) ) == 0L ) { wxString ver; - ver.Printf( _T(" ver. %d.%d rev. %c"), - int(ulSysInfo[QSV_VERSION_MAJOR] / 10), - int(ulSysInfo[QSV_VERSION_MINOR]), - char(ulSysInfo[QSV_VERSION_REVISION]) + ver.Printf( _T(" ver. %d.%d"), + int(ulSysInfo / 10), + int(ulSysInfo % 10) ); strVer += ver; } @@ -331,6 +327,13 @@ wxString wxGetOsDescription() return strVer; } +bool wxIsPlatform64Bit() +{ + // FIXME: No idea how to test for 64 bit processor + // (Probably irrelevant anyhow, though). + return false; +} + void wxAppTraits::InitializeGui(unsigned long &WXUNUSED(ulHab)) { } @@ -339,27 +342,29 @@ void wxAppTraits::TerminateGui(unsigned long WXUNUSED(ulHab)) { } -wxToolkitInfo & wxConsoleAppTraits::GetToolkitInfo() +wxOperatingSystemId wxGetOsVersion(int *verMaj, int *verMin) { - static wxToolkitInfo vInfo; - ULONG ulSysInfo[QSV_MAX] = {0}; + ULONG ulSysInfo = 0; APIRET ulrc; - vInfo.name = _T("wxBase"); - ulrc = ::DosQuerySysInfo( 1L - ,QSV_MAX - ,(PVOID)ulSysInfo - ,sizeof(ULONG) * QSV_MAX + ulrc = ::DosQuerySysInfo( QSV_VERSION_MINOR, + QSV_VERSION_MINOR, + (PVOID)&ulSysInfo, + sizeof(ULONG) ); + if (ulrc == 0L) { - vInfo.versionMajor = ulSysInfo[QSV_VERSION_MAJOR] / 10; - vInfo.versionMinor = ulSysInfo[QSV_VERSION_MINOR]; + if ( verMaj ) + *verMaj = ulSysInfo / 10; + if ( verMin ) + *verMin = ulSysInfo % 10; } - vInfo.os = wxOS2_PM; - return vInfo; + + return wxOS_OS2; } + // --------------------------------------------------------------------------- const wxChar* wxGetHomeDir( wxString* pStr @@ -444,6 +449,51 @@ wxChar* wxGetUserHome ( const wxString &rUser ) return (wxChar*)wxEmptyString; // No home known! } +bool wxGetDiskSpace(const wxString& path, + wxDiskspaceSize_t *pTotal, + wxDiskspaceSize_t *pFree) +{ + if (path.empty()) + return false; + + wxFileName fn(path); + FSALLOCATE fsaBuf = {0}; + APIRET rc = NO_ERROR; + ULONG disknum = 0; + + fn.MakeAbsolute(); + + if (wxDirExists(fn.GetFullPath()) == false) + return false; + + disknum = 1 + wxToupper(fn.GetVolume().GetChar(0)) - _T('A'); + + rc = ::DosQueryFSInfo(disknum, // 1 = A, 2 = B, 3 = C, ... + FSIL_ALLOC, // allocation info + (PVOID)&fsaBuf, + sizeof(FSALLOCATE)); + + if (rc != NO_ERROR) + return false; + else + { + if(pTotal) + { + // to try to avoid 32-bit overflow, let's not multiply right away + // (num of alloc units) + *pTotal = fsaBuf.cUnit; + // * (num of sectors per alloc unit) * (num of bytes per sector) + (*pTotal) *= fsaBuf.cSectorUnit * fsaBuf.cbSector; + } + if(pFree) + { + *pFree = fsaBuf.cUnitAvail; + (*pFree) *= fsaBuf.cSectorUnit * fsaBuf.cbSector; + } + return true; + } +} + wxString wxPMErrorToStr(ERRORID vError) { wxString sError; @@ -494,6 +544,106 @@ wxString wxPMErrorToStr(ERRORID vError) sError = wxT("Valid name format, but cannot find name in atom table"); break; + case PMERR_INV_HPS: + sError = wxT("PMERR_INV_HPS"); + break; + + case PMERR_PS_BUSY: + sError = wxT("PMERR_PS_BUSY"); + break; + + case PMERR_INV_PRIMITIVE_TYPE: + sError = wxT("PMERR_INV_PRIMITIVE_TYPE"); + break; + + case PMERR_UNSUPPORTED_ATTR: + sError = wxT("PMERR_UNSUPPORTED_ATTR"); + break; + + case PMERR_INV_COLOR_ATTR: + sError = wxT("PMERR_INV_COLOR_ATTR"); + break; + + case PMERR_INV_BACKGROUND_COL_ATTR: + sError = wxT("PMERR_INV_BACKGROUND_COL_ATTR"); + break; + + case PMERR_INV_MIX_ATTR: + sError = wxT("PMERR_INV_MIX_ATTR"); + break; + + case PMERR_INV_LINE_WIDTH_ATTR: + sError = wxT("PMERR_INV_LINE_WIDTH_ATTR"); + break; + + case PMERR_INV_GEOM_LINE_WIDTH_ATTR: + sError = wxT("PMERR_INV_GEOM_LINE_WIDTH_ATTR"); + break; + + case PMERR_INV_LINE_TYPE_ATTR: + sError = wxT("PMERR_INV_LINE_TYPE_ATTR"); + break; + + case PMERR_INV_LINE_END_ATTR: + sError = wxT("PMERR_INV_LINE_END_ATTR"); + break; + + case PMERR_INV_LINE_JOIN_ATTR: + sError = wxT("PMERR_INV_LINE_JOIN_ATTR"); + break; + + case PMERR_INV_CHAR_SET_ATTR: + sError = wxT("PMERR_INV_CHAR_SET_ATTR"); + break; + + case PMERR_INV_CHAR_MODE_ATTR: + sError = wxT("PMERR_INV_CHAR_MODE_ATTR"); + break; + + case PMERR_INV_CHAR_DIRECTION_ATTR: + sError = wxT("PMERR_INV_CHAR_DIRECTION_ATTR"); + break; + + case PMERR_INV_CHAR_SHEAR_ATTR: + sError = wxT("PMERR_INV_CHAR_SHEAR_ATTR"); + break; + + case PMERR_INV_CHAR_ANGLE_ATTR: + sError = wxT("PMERR_INV_CHAR_ANGLE_ATTR"); + break; + + case PMERR_INV_MARKER_SET_ATTR: + sError = wxT("PMERR_INV_MARKER_SET_ATTR"); + break; + + case PMERR_INV_MARKER_SYMBOL_ATTR: + sError = wxT("PMERR_INV_MARKER_SYMBOL_ATTR"); + break; + + case PMERR_INV_PATTERN_SET_ATTR: + sError = wxT("PMERR_INV_PATTERN_SET_ATTR"); + break; + + case PMERR_INV_PATTERN_ATTR: + sError = wxT("PMERR_INV_PATTERN_ATTR"); + break; + + case PMERR_INV_COORDINATE: + sError = wxT("PMERR_INV_COORDINATE"); + break; + + case PMERR_UNSUPPORTED_ATTR_VALUE: + sError = wxT("PMERR_UNSUPPORTED_ATTR_VALUE"); + break; + + case PMERR_INV_PATTERN_SET_FONT: + sError = wxT("PMERR_INV_PATTERN_SET_FONT"); + break; + + case PMERR_HUGE_FONTS_NOT_SUPPORTED: + sError = wxT("PMERR_HUGE_FONTS_NOT_SUPPORTED"); + break; + default: sError = wxT("Unknown error"); }