-
-    lMemFlags = PAG_FREE;
-    rc = ::DosQueryMem(pMemptr, &lSize, &lMemFlags);
-    if (rc != 0)
-        return -1L;
-    return (long)lSize;
-}
-
-// Sleep for nSecs seconds. Attempt a Windows implementation using timers.
-static bool inTimer = FALSE;
-
-class wxSleepTimer: public wxTimer
-{
-public:
-    inline void Notify()
+    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  = (char*)zShell;
+
+    sInputs = _T("/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