#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 short                  nLevel = 0;
+    unsigned long                   ulLevel = 0;
     unsigned char*                  zBuffer;
-    unsigned short                  nBuffer;
-    unsigned short*                 pnTotalAvail;
+    unsigned long                   ulBuffer;
+    unsigned long*                  pulTotalAvail;
 
     NetBios32GetInfo( (const unsigned char*)zServer
                      ,(const unsigned char*)zComputer
-                     ,nLevel
+                     ,ulLevel
                      ,zBuffer
-                     ,nBuffer
-                     ,pnTotalAvail
+                     ,ulBuffer
+                     ,pulTotalAvail
                     );
     strcpy(zBuf, zServer);
 #else
     SData.PgmTitle = PgmTitle;
     SData.PgmName  = zShell;
 
-//    sInputs = "/C " + rCommand;
-    SData.PgmInputs     = NULL; //(BYTE*)sInputs.c_str();
+    sInputs = "/C " + rCommand;
+    SData.PgmInputs     = (BYTE*)sInputs.c_str();
     SData.TermQ         = 0;
     SData.Environment   = 0;
     SData.InheritOpt    = SSF_INHERTOPT_SHELL;
     SData.ObjectBuffLen = (ULONG)sizeof(achObjBuf);
 
     rc = ::DosStartSession(&SData, &ulSessID, &vPid);
-    if (rc == 0)
+    if (rc == 0 || rc == 457) // NO_ERROR or SMG_START_IN_BACKGROUND
     {
         PTIB                            ptib;
         PPIB                            ppib;
 }
 
 // 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;
 }