X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/bd3b171d3f45b0d30d6c1f7586dad5721b145650..a7d5151df02bf70a9f6ff1c5c7fd33ab07bf409c:/src/os2/utils.cpp?ds=sidebyside diff --git a/src/os2/utils.cpp b/src/os2/utils.cpp index 68b0e3e6af..8cfca8e49c 100644 --- a/src/os2/utils.cpp +++ b/src/os2/utils.cpp @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: utils.cpp +// Name: src/os2/utils.cpp // Purpose: Various utilities // Author: David Webster // Modified by: @@ -13,13 +13,11 @@ #include "wx/wxprec.h" #ifndef WX_PRECOMP - #include "wx/setup.h" #include "wx/utils.h" #include "wx/app.h" #endif //WX_PRECOMP #include "wx/os2/private.h" -#include "wx/timer.h" #include "wx/intl.h" #include "wx/apptrait.h" @@ -40,16 +38,19 @@ #define PURE_32 -#ifndef __EMX__ -#include -#include -#include +#if defined(__WATCOMC__) +extern "C" +{ + #include +} +#elif !defined(__EMX__) + #include + #include + #include #endif -static const wxChar WX_SECTION[] = _T("wxWindows"); +static const wxChar WX_SECTION[] = _T("wxWidgets"); static const wxChar eHOSTNAME[] = _T("HostName"); -static const wxChar eUSERID[] = _T("UserId"); -static const wxChar eUSERNAME[] = _T("UserName"); // For the following functions we SHOULD fill in support // for Windows-NT (which I don't know) as I assume it begin @@ -84,56 +85,46 @@ bool wxGetHostName( if ((zSysname = wxGetenv(_T("SYSTEM_NAME"))) == NULL) { - ULONG n = ::PrfQueryProfileString( HINI_PROFILE - ,(PSZ)WX_SECTION - ,(PSZ)eHOSTNAME - ,(PSZ)zDefaultHost - ,(void*)zBuf - ,(ULONG)nMaxSize - 1 - ); + ::PrfQueryProfileString( HINI_PROFILE + ,(PSZ)WX_SECTION + ,(PSZ)eHOSTNAME + ,(PSZ)zDefaultHost + ,(void*)zBuf + ,(ULONG)nMaxSize - 1 + ); } else wxStrncpy(zBuf, zSysname, nMaxSize - 1); zBuf[nMaxSize] = _T('\0'); #endif - return *zBuf ? TRUE : FALSE; + return *zBuf ? true : false; } // Get user ID e.g. jacs -bool wxGetUserId( - wxChar* zBuf -, int nType -) +bool wxGetUserId(wxChar* zBuf, int nType) { -#if defined(__VISAGECPP__) - long lrc; +#if defined(__VISAGECPP__) || defined(__WATCOMC__) // UPM procs return 0 on success - lrc = U32ELOCU((unsigned char*)zBuf, (unsigned long *)&nType); - if (lrc == 0) return TRUE; + long lrc = U32ELOCU((PUCHAR)zBuf, (PULONG)&nType); + if (lrc == 0) return true; #endif - return FALSE; + return false; } -bool wxGetUserName( - wxChar* zBuf -, int nMaxSize -) +bool wxGetUserName( wxChar* zBuf, int nMaxSize ) { #ifdef USE_NET_API - wxGetUserId( zBuf - ,nMaxSize - ); + wxGetUserId( zBuf, nMaxSize ); #else wxStrncpy(zBuf, _T("Unknown User"), nMaxSize); #endif - return TRUE; + return true; } -int wxKill( - long lPid -, wxSignal eSig -, wxKillError* peError -) +int wxKill(long lPid, + wxSignal WXUNUSED(eSig), + wxKillError* WXUNUSED(peError), + int WXUNUSED(flags)) { return((int)::DosKillProcess(0, (PID)lPid)); } @@ -147,7 +138,6 @@ bool wxShell( { wxChar* zShell = _T("CMD.EXE"); wxString sInputs; - wxChar zTmp[255]; STARTDATA SData = {0}; PSZ PgmTitle = "Command Shell"; APIRET rc; @@ -161,9 +151,9 @@ bool wxShell( SData.FgBg = SSF_FGBG_FORE; SData.TraceOpt = SSF_TRACEOPT_NONE; SData.PgmTitle = PgmTitle; - SData.PgmName = zShell; + SData.PgmName = (char*)zShell; - sInputs = "/C " + rCommand; + sInputs = _T("/C ") + rCommand; SData.PgmInputs = (BYTE*)sInputs.c_str(); SData.TermQ = 0; SData.Environment = 0; @@ -199,25 +189,43 @@ bool wxShell( } // Shutdown or reboot the PC -bool wxShutdown(wxShutdownFlags wFlags) +bool wxShutdown(wxShutdownFlags WXUNUSED(wFlags)) +{ + // TODO + return false; +} + +wxPowerType wxGetPowerType() +{ + // TODO + return wxPOWER_UNKNOWN; +} + +wxBatteryState wxGetBatteryState() { // TODO - return FALSE; + return wxBATTERY_UNKNOWN_STATE; } // Get free memory in bytes, or -1 if cannot determine amount (e.g. on UNIX) -long wxGetFreeMemory() +wxMemorySize wxGetFreeMemory() { - void* pMemptr = NULL; - ULONG lSize; - ULONG lMemFlags; - APIRET rc; + void* pMemptr = NULL; + LONG lSize; + ULONG lMemFlags; + APIRET rc; lMemFlags = PAG_FREE; - rc = ::DosQueryMem(pMemptr, &lSize, &lMemFlags); + rc = ::DosQueryMem(pMemptr, (PULONG)&lSize, &lMemFlags); if (rc != 0) - return -1L; - return (long)lSize; + lSize = -1L; + return (wxMemorySize)lSize; +} + +// Get Process ID +unsigned long wxGetProcessId() +{ + return (unsigned long)getpid(); } // ---------------------------------------------------------------------------- @@ -229,14 +237,14 @@ bool wxGetEnv(const wxString& var, wxString *value) // wxGetenv is defined as getenv() wxChar *p = wxGetenv(var); if ( !p ) - return FALSE; + return false; if ( value ) { *value = p; } - return TRUE; + return true; } bool wxSetEnv(const wxString& variable, const wxChar *value) @@ -258,17 +266,26 @@ bool wxSetEnv(const wxString& variable, const wxChar *value) return putenv(buf) == 0; #else // no way to set an env var - return FALSE; + wxUnusedVar(variable); + wxUnusedVar(value); + return false; #endif } -void wxUsleep( +void wxMilliSleep( unsigned long ulMilliseconds ) { ::DosSleep(ulMilliseconds); } +void wxMicroSleep( + unsigned long ulMicroseconds +) +{ + ::DosSleep(ulMicroseconds/1000); +} + void wxSleep( int nSecs ) @@ -282,76 +299,50 @@ void wxFlushEvents() // wxYield(); } -#if WXWIN_COMPATIBILITY_2_2 - -// Output a debug mess., in a system dependent fashion. -void wxDebugMsg( - const wxChar* zFmt ... -) +// Emit a beeeeeep +void wxBell() { - va_list vAp; - static wxChar zBuffer[512]; - - if (!wxTheApp->GetWantDebugOutput()) - return ; - va_start(vAp, zFmt); - sprintf(zBuffer, zFmt, vAp) ; - va_end(vAp); + DosBeep(1000,1000); // 1kHz during 1 sec. } -// Non-fatal error: pop up message box and (possibly) continue -void wxError( - const wxString& rMsg -, const wxString& rTitle -) +wxString wxGetOsDescription() { - wxBuffer = new wxChar[256]; - wxSprintf(wxBuffer, "%s\nContinue?", WXSTRINGCAST rMsg); - if (::WinMessageBox( HWND_DESKTOP - ,NULL - ,(PSZ)wxBuffer - ,(PSZ)WXSTRINGCAST rTitle - ,0 - ,MB_ICONEXCLAMATION | MB_YESNO - ) == MBID_YES) - delete[] wxBuffer; - wxExit(); + wxString strVer(_T("OS/2")); + ULONG ulSysInfo[QSV_MAX] = {0}; + + if (::DosQuerySysInfo( 1L, + QSV_MAX, + (PVOID)ulSysInfo, + sizeof(ULONG) * QSV_MAX + ) == 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]) + ); + strVer += ver; + } + + return strVer; } -// Fatal error: pop up message box and abort -void wxFatalError( - const wxString& rMsg -, const wxString& rTitle -) +void wxAppTraits::InitializeGui(unsigned long &WXUNUSED(ulHab)) { - unsigned long ulRc; - - ulRc = ::WinMessageBox( HWND_DESKTOP - ,NULL - ,WXSTRINGCAST rMsg - ,WXSTRINGCAST rTitle - ,0 - ,MB_NOICON | MB_OK - ); - DosExit(EXIT_PROCESS, ulRc); } -#endif // WXWIN_COMPATIBILITY_2_2 - -// Emit a beeeeeep -void wxBell() +void wxAppTraits::TerminateGui(unsigned long WXUNUSED(ulHab)) { - DosBeep(1000,1000); // 1kHz during 1 sec. } -#if 0 -int wxGUIAppTraits::GetOSVersion( - int* pMajorVsn -, int* pMinorVsn -) + +wxToolkitInfo & wxConsoleAppTraits::GetToolkitInfo() { - ULONG ulSysInfo[QSV_MAX] = {0}; - APIRET ulrc; + static wxToolkitInfo vInfo; + ULONG ulSysInfo[QSV_MAX] = {0}; + APIRET ulrc; + vInfo.name = _T("wxBase"); ulrc = ::DosQuerySysInfo( 1L ,QSV_MAX ,(PVOID)ulSysInfo @@ -359,14 +350,13 @@ int wxGUIAppTraits::GetOSVersion( ); if (ulrc == 0L) { - *pMajorVsn = ulSysInfo[QSV_VERSION_MAJOR]; - *pMajorVsn = *pMajorVsn/10; - *pMinorVsn = ulSysInfo[QSV_VERSION_MINOR]; - return wxWINDOWS_OS2; + vInfo.versionMajor = ulSysInfo[QSV_VERSION_MAJOR] / 10; + vInfo.versionMinor = ulSysInfo[QSV_VERSION_MINOR]; } - return wxWINDOWS; // error if we get here, return generic value + vInfo.os = wxOS2_PM; + return vInfo; } -#endif + // --------------------------------------------------------------------------- const wxChar* wxGetHomeDir( wxString* pStr @@ -375,32 +365,40 @@ const wxChar* wxGetHomeDir( wxString& rStrDir = *pStr; // OS/2 has no idea about home, - // so use the working directory instead? + // so use the working directory instead. + // However, we might have a valid HOME directory, + // as is used on many machines that have unix utilities + // on them, so we should use that, if available. // 256 was taken from os2def.h #ifndef MAX_PATH # define MAX_PATH 256 #endif - char zDirName[256]; - ULONG ulDirLen; + const wxChar *szHome = wxGetenv((wxChar*)"HOME"); + if ( szHome == NULL ) { + // we're homeless, use current directory. + rStrDir = wxT("."); + } + else + rStrDir = szHome; - ::DosQueryCurrentDir(0, zDirName, &ulDirLen); - rStrDir = zDirName; return rStrDir.c_str(); } // Hack for OS/2 -wxChar* wxGetUserHome ( - const wxString& rUser -) +#if wxUSE_UNICODE +const wxMB2WXbuf wxGetUserHome( const wxString &rUser ) +#else // just for binary compatibility -- there is no 'const' here +wxChar* wxGetUserHome ( const wxString &rUser ) +#endif { - wxChar* zHome; - wxString sUser1(rUser); + wxChar* zHome; + wxString sUser1(rUser); - wxBuffer = new wxChar[256]; + wxChar *wxBuffer = new wxChar[256]; #ifndef __EMX__ - if (sUser1 != _T("")) + if (!sUser1.empty()) { wxChar zTmp[64]; @@ -418,37 +416,34 @@ wxChar* wxGetUserHome ( return *zHome ? zHome : (wxChar*)_T("\\"); } if (wxStricmp(zTmp, WXSTRINGCAST sUser1) == 0) - sUser1 = _T(""); + sUser1 = wxEmptyString; } } #endif - if (sUser1 == _T("")) + if (sUser1.empty()) { if ((zHome = wxGetenv(_T("HOME"))) != NULL) { wxStrcpy(wxBuffer, zHome); wxUnix2DosFilename(wxBuffer); +#if wxUSE_UNICODE + wxWCharBuffer retBuffer (wxBuffer); + delete[] wxBuffer; + return retBuffer; +#else wxStrcpy(zHome, wxBuffer); delete[] wxBuffer; return zHome; +#endif } } delete[] wxBuffer; - return NULL; // No home known! + return (wxChar*)wxEmptyString; // No home known! } -bool wxDirExists( - const wxString& rDir -) +wxString wxPMErrorToStr(ERRORID vError) { - return (::DosSetCurrentDir(WXSTRINGCAST rDir)); -} - -wxString WXDLLEXPORT wxPMErrorToStr( - ERRORID vError -) -{ - wxString sError; + wxString sError; // // Remove the high order byte -- it is useless @@ -499,5 +494,14 @@ wxString WXDLLEXPORT wxPMErrorToStr( default: sError = wxT("Unknown error"); } - return(sError); + return sError; } // end of wxPMErrorToStr + +// replacement for implementation in unix/utilsunx.cpp, +// to be used by all X11 based ports. +struct wxEndProcessData; + +void wxHandleProcessTermination(wxEndProcessData *WXUNUSED(proc_data)) +{ + // For now, just do nothing. To be filled in as needed. +}