#define INCL_PM
#define INCL_GPI
#include <os2.h>
-#include<netdb.h>
#define PURE_32
#include <upm.h>
#include <netcons.h>
#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;
// 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(
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;
)
{
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;
}
,(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
,(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;
}