#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 = NULL; //(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)
+ {
+ 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)