X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/1be7f92adb9b0140ccbbc7a5b4d2731da0318837..a5fc62a112e4780dacb85b3624634185d13e42f6:/src/os2/utils.cpp diff --git a/src/os2/utils.cpp b/src/os2/utils.cpp index e9ace42626..2bae71d97b 100644 --- a/src/os2/utils.cpp +++ b/src/os2/utils.cpp @@ -40,7 +40,6 @@ #define INCL_PM #define INCL_GPI #include -#include #define PURE_32 #include #include @@ -65,7 +64,7 @@ bool wxGetHostName( #if wxUSE_NET_API char zServer[256]; char zComputer[256]; - unsigned long ulLevel; + unsigned long ulLevel = 0; unsigned char* zBuffer; unsigned long ulBuffer; unsigned long* pulTotalAvail; @@ -102,10 +101,14 @@ bool wxGetHostName( // Get user ID e.g. jacs bool wxGetUserId( wxChar* zBuf -, int nMaxSize +, int nType ) { - return(U32ELOCL((unsigned char*)zBuf, (unsigned long *)&nMaxSize)); + long lrc; + // UPM procs return 0 on success + lrc = U32ELOCU((unsigned char*)zBuf, (unsigned long *)&nType); + if (lrc == 0) return TRUE; + return FALSE; } bool wxGetUserName( @@ -138,30 +141,63 @@ bool wxShell( const wxString& rCommand ) { - wxChar* zShell; - - if ((zShell = wxGetenv(_T("COMSPEC"))) == NULL) - zShell = _T("\\CMD.EXE"); - + wxChar* zShell = _T("CMD.EXE"); + wxString sInputs; wxChar zTmp[255]; + 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; + SData.FgBg = SSF_FGBG_FORE; + SData.TraceOpt = SSF_TRACEOPT_NONE; + SData.PgmTitle = PgmTitle; + SData.PgmName = zShell; + + sInputs = "/C " + rCommand; + SData.PgmInputs = (BYTE*)sInputs.c_str(); + SData.TermQ = 0; + SData.Environment = 0; + SData.InheritOpt = SSF_INHERTOPT_SHELL; + SData.SessionType = SSF_TYPE_WINDOWABLEVIO; + SData.IconFile = 0; + SData.PgmHandle = 0; + SData.PgmControl = SSF_CONTROL_VISIBLE | SSF_CONTROL_MAXIMIZE; + SData.InitXPos = 30; + SData.InitYPos = 40; + SData.InitXSize = 200; + SData.InitYSize = 140; + SData.Reserved = 0; + SData.ObjectBuffer = (char*)achObjBuf; + SData.ObjectBuffLen = (ULONG)sizeof(achObjBuf); + + rc = ::DosStartSession(&SData, &ulSessID, &vPid); + if (rc == 0 || rc == 457) // NO_ERROR or SMG_START_IN_BACKGROUND + { + PTIB ptib; + PPIB ppib; - if (rCommand != "") - wxSprintf( zTmp - ,"%s /c %s" - ,zShell - ,WXSTRINGCAST rCommand - ); - else - wxStrcpy(zTmp, zShell); + ::DosGetInfoBlocks(&ptib, &ppib); - return (wxExecute((wxChar*)zTmp, FALSE) != 0); + ::DosWaitChild( DCWA_PROCESS + ,DCWW_WAIT + ,&vResult + ,&ppib->pib_ulpid + ,vPid + ); + } + return (rc != 0); } // Get free memory in bytes, or -1 if cannot determine amount (e.g. on UNIX) -long wxGetFreeMemory( - void* pMemptr -) +long wxGetFreeMemory() { + void* pMemptr; ULONG lSize; ULONG lMemFlags; APIRET rc; @@ -272,14 +308,17 @@ int wxGetOsVersion( ) { ULONG ulSysInfo[QSV_MAX] = {0}; - - if (::DosQuerySysInfo( 1L - ,QSV_MAX - ,(PVOID)ulSysInfo - ,sizeof(ULONG) * QSV_MAX - )) + APIRET ulrc; + + ulrc = ::DosQuerySysInfo( 1L + ,QSV_MAX + ,(PVOID)ulSysInfo + ,sizeof(ULONG) * QSV_MAX + ); + if (ulrc == 0L) { *pMajorVsn = ulSysInfo[QSV_VERSION_MAJOR]; + *pMajorVsn = *pMajorVsn/10; *pMinorVsn = ulSysInfo[QSV_VERSION_MINOR]; return wxWINDOWS_OS2; } @@ -390,10 +429,10 @@ bool wxGetResource( ,(PSZ)WXSTRINGCAST rSection ,(PSZ)WXSTRINGCAST rEntry ,(PSZ)zDefunkt - ,(void*)wxBuffer + ,(void*)*ppValue ,1000 ); - if (n == 0L || wxStrcmp(wxBuffer, zDefunkt) == 0) + if (n != 0L || wxStrcmp(*ppValue, zDefunkt) == 0) return FALSE; } else @@ -405,15 +444,12 @@ bool wxGetResource( ,(PSZ)WXSTRINGCAST rSection ,(PSZ)WXSTRINGCAST rEntry ,(PSZ)zDefunkt - ,(void*)wxBuffer + ,(void*)*ppValue ,1000 ); - if (n == 0L || wxStrcmp(wxBuffer, zDefunkt) == 0) + if (n != 0L || wxStrcmp(*ppValue, zDefunkt) == 0) return FALSE; } - if (*ppValue) - delete[] (*ppValue); - *ppValue = copystring(wxBuffer); return TRUE; }