]> git.saurik.com Git - wxWidgets.git/blobdiff - src/os2/utils.cpp
additions for wxFileDataObject from Ricky Gonzales <gonzales@pyramid3.net>
[wxWidgets.git] / src / os2 / utils.cpp
index 7dbe03de3d6c1d2a42165be9d9cca149529c03c9..12f65cee2a1a264cdfc7fa4d5c5748a8b3de04a3 100644 (file)
@@ -65,18 +65,18 @@ bool wxGetHostName(
 #if wxUSE_NET_API
     char                            zServer[256];
     char                            zComputer[256];
 #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;
 
     unsigned char*                  zBuffer;
     unsigned long                   ulBuffer;
     unsigned long*                  pulTotalAvail;
 
-    NetBiosGetInfo( (const unsigned char*)zServer
-                   ,(const unsigned char*)zComputer
-                   ,ulLevel
-                   ,zBuffer
-                   ,ulBuffer
-                   ,pulTotalAvail
-                  );
+    NetBios32GetInfo( (const unsigned char*)zServer
+                     ,(const unsigned char*)zComputer
+                     ,ulLevel
+                     ,zBuffer
+                     ,ulBuffer
+                     ,pulTotalAvail
+                    );
     strcpy(zBuf, zServer);
 #else
     wxChar*                         zSysname;
     strcpy(zBuf, zServer);
 #else
     wxChar*                         zSysname;
@@ -102,10 +102,14 @@ bool wxGetHostName(
 // Get user ID e.g. jacs
 bool wxGetUserId(
   wxChar*                           zBuf
 // 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(
 }
 
 bool wxGetUserName(
@@ -138,23 +142,57 @@ bool wxShell(
   const wxString&                   rCommand
 )
 {
   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];
     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)
 }
 
 // Get free memory in bytes, or -1 if cannot determine amount (e.g. on UNIX)