]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/utils.cpp
Acutally use the m_maxChars parameter value instead of ignoring it
[wxWidgets.git] / src / msw / utils.cpp
index 24199aca274a573d5ceebc68b6b2b31c0b93fa0e..b70c6226894ab52b15e5d372f5e33140d06cf18d 100644 (file)
@@ -5,8 +5,8 @@
 // Modified by:
 // Created:     04/01/98
 // RCS-ID:      $Id$
-// Copyright:   (c) Julian Smart and Markus Holzem
-// Licence:     wxWindows license
+// Copyright:   (c) Julian Smart
+// Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
 // ============================================================================
 
 #include "wx/msw/private.h"     // includes <windows.h>
 
+#ifdef __GNUWIN32_OLD__
+    // apparently we need to include winsock.h to get WSADATA and other stuff
+    // used in wxGetFullHostName() with the old mingw32 versions
+    #include <winsock.h>
+#endif
+
 #include "wx/timer.h"
 
-#if !defined(__GNUWIN32__) && !defined(__WXWINE__) && !defined(__SALFORDC__) && !defined(__WXMICROWIN__)
+#if !defined(__GNUWIN32__) && !defined(__SALFORDC__) && !defined(__WXMICROWIN__)
     #include <direct.h>
 
     #ifndef __MWERKS__
     #include <lm.h>
 #endif // USE_NET_API
 
-#if defined(__WIN32__) && !defined(__WXWINE__) && !defined(__WXMICROWIN__)
-    #include <io.h>
+#if defined(__WIN32__) && !defined(__WXMICROWIN__)
+    #ifndef __UNIX__
+        #include <io.h>
+    #endif
 
     #ifndef __GNUWIN32__
         #include <shellapi.h>
@@ -172,6 +180,7 @@ bool wxGetFullHostName(wxChar *buf, int maxSize)
     // shouldn't use winsock.dll (a.k.a. ws2_32.dll) at all so only use this
     // code if we link with it anyhow
 #if wxUSE_SOCKETS
+
     WSADATA wsa;
     if ( WSAStartup(MAKEWORD(1, 1), &wsa) == 0 )
     {
@@ -188,12 +197,12 @@ bool wxGetFullHostName(wxChar *buf, int maxSize)
                 if ( pHostEnt )
                 {
                     // Windows will use DNS internally now
-                    pHostEnt = gethostbyaddr(pHostEnt->h_addr, 4, PF_INET);
+                    pHostEnt = gethostbyaddr(pHostEnt->h_addr, 4, AF_INET);
                 }
 
                 if ( pHostEnt )
                 {
-                    host = pHostEnt->h_name;
+                    host = wxString::FromAscii(pHostEnt->h_name);
                 }
             }
         }
@@ -207,6 +216,7 @@ bool wxGetFullHostName(wxChar *buf, int maxSize)
             return TRUE;
         }
     }
+
 #endif // wxUSE_SOCKETS
 
 #endif // Win32
@@ -594,14 +604,16 @@ bool wxGetEnv(const wxString& var, wxString *value)
 {
 #ifdef __WIN16__
     const wxChar* ret = wxGetenv(var);
-    if (ret)
+    if ( !ret )
+        return FALSE;
+
+    if ( value )
     {
         *value = ret;
-        return TRUE;
     }
-    else
-        return FALSE;
-#else
+
+    return TRUE;
+#else // Win32
     // first get the size of the buffer
     DWORD dwRet = ::GetEnvironmentVariable(var, NULL, 0);
     if ( !dwRet )
@@ -617,7 +629,7 @@ bool wxGetEnv(const wxString& var, wxString *value)
     }
 
     return TRUE;
-#endif
+#endif // Win16/32
 }
 
 bool wxSetEnv(const wxString& var, const wxChar *value)
@@ -642,8 +654,6 @@ bool wxSetEnv(const wxString& var, const wxChar *value)
 // process management
 // ----------------------------------------------------------------------------
 
-#ifdef __WIN32__
-
 // structure used to pass parameters from wxKill() to wxEnumFindByPidProc()
 struct wxFindByPidParams
 {
@@ -654,6 +664,8 @@ struct wxFindByPidParams
 
     // the PID we're looking from
     DWORD pid;
+
+    DECLARE_NO_COPY_CLASS(wxFindByPidParams)
 };
 
 // wxKill helper: EnumWindows() callback which is used to find the first (top
@@ -677,11 +689,8 @@ BOOL CALLBACK wxEnumFindByPidProc(HWND hwnd, LPARAM lParam)
     return TRUE;
 }
 
-#endif // __WIN32__
-
 int wxKill(long pid, wxSignal sig, wxKillError *krc)
 {
-#ifdef __WIN32__
     // get the process handle to operate on
     HANDLE hProcess = ::OpenProcess(SYNCHRONIZE |
                                     PROCESS_TERMINATE |
@@ -818,25 +827,19 @@ int wxKill(long pid, wxSignal sig, wxKillError *krc)
 
     // the return code is the same as from Unix kill(): 0 if killed
     // successfully or -1 on error
-    if ( sig == wxSIGNONE )
-    {
-        if ( ok && rc == STILL_ACTIVE )
-        {
-            // there is such process => success
-            return 0;
-        }
-    }
-    else // not SIGNONE
+    //
+    // be careful to interpret rc correctly: for wxSIGNONE we return success if
+    // the process exists, for all the other sig values -- if it doesn't
+    if ( ok &&
+            ((sig == wxSIGNONE) == (rc == STILL_ACTIVE)) )
     {
-        if ( ok && rc != STILL_ACTIVE )
+        if ( krc )
         {
-            // killed => success
-            return 0;
+            *krc = wxKILL_OK;
         }
+
+        return 0;
     }
-#else // Win16
-    wxFAIL_MSG( _T("not implemented") );
-#endif // Win32/Win16
 
     // error
     return -1;
@@ -861,10 +864,10 @@ bool wxShell(const wxString& command)
         cmd.Printf(wxT("%s /c %s"), shell, command.c_str());
     }
 
-    return wxExecute(cmd, TRUE /* sync */) != 0;
+    return wxExecute(cmd, wxEXEC_SYNC) == 0;
 }
 
-// Shutdown or reboot the PC 
+// Shutdown or reboot the PC
 bool wxShutdown(wxShutdownFlags wFlags)
 {
 #ifdef __WIN32__
@@ -872,27 +875,27 @@ bool wxShutdown(wxShutdownFlags wFlags)
 
     if ( wxGetOsVersion(NULL, NULL) == wxWINDOWS_NT ) // if is NT or 2K
     {
-        // Get a token for this process. 
-        HANDLE hToken; 
+        // Get a token for this process.
+        HANDLE hToken;
         bOK = ::OpenProcessToken(GetCurrentProcess(),
                                  TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY,
                                  &hToken) != 0;
         if ( bOK )
         {
-            TOKEN_PRIVILEGES tkp; 
+            TOKEN_PRIVILEGES tkp;
 
-            // Get the LUID for the shutdown privilege. 
+            // Get the LUID for the shutdown privilege.
             ::LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME,
-                                   &tkp.Privileges[0].Luid); 
+                                   &tkp.Privileges[0].Luid);
 
-            tkp.PrivilegeCount = 1;  // one privilege to set    
-            tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; 
+            tkp.PrivilegeCount = 1;  // one privilege to set
+            tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
 
-            // Get the shutdown privilege for this process. 
+            // Get the shutdown privilege for this process.
             ::AdjustTokenPrivileges(hToken, FALSE, &tkp, 0,
-                                    (PTOKEN_PRIVILEGES)NULL, 0); 
+                                    (PTOKEN_PRIVILEGES)NULL, 0);
 
-            // Cannot test the return value of AdjustTokenPrivileges. 
+            // Cannot test the return value of AdjustTokenPrivileges.
             bOK = ::GetLastError() == ERROR_SUCCESS;
         }
     }
@@ -915,7 +918,7 @@ bool wxShutdown(wxShutdownFlags wFlags)
                 return FALSE;
         }
 
-        bOK = ::ExitWindowsEx(EWX_SHUTDOWN | EWX_FORCE | EWX_REBOOT, 0) != 0; 
+        bOK = ::ExitWindowsEx(EWX_SHUTDOWN | EWX_FORCE | EWX_REBOOT, 0) != 0;
     }
 
     return bOK;
@@ -941,6 +944,15 @@ long wxGetFreeMemory()
 #endif
 }
 
+unsigned long wxGetProcessId()
+{
+#ifdef __WIN32__
+    return ::GetCurrentProcessId();
+#else
+    return 0;
+#endif
+}
+
 // Emit a beeeeeep
 void wxBell()
 {
@@ -999,7 +1011,7 @@ wxString wxGetOsDescription()
 
 int wxGetOsVersion(int *majorVsn, int *minorVsn)
 {
-#if defined(__WIN32__) && !defined(__SC__)
+#if defined(__WIN32__) 
     static int ver = -1, major = -1, minor = -1;
 
     if ( ver == -1 )
@@ -1087,6 +1099,8 @@ void wxUsleep(unsigned long milliseconds)
 #else // !Win32
     if (gs_inTimer)
         return;
+    if (miliseconds <= 0)
+        return;
 
     wxTheSleepTimer = new wxSleepTimer;
     gs_inTimer = TRUE;
@@ -1105,6 +1119,8 @@ void wxSleep(int nSecs)
 {
     if (gs_inTimer)
         return;
+    if (nSecs <= 0)
+         return;
 
     wxTheSleepTimer = new wxSleepTimer;
     gs_inTimer = TRUE;
@@ -1300,7 +1316,11 @@ static HCURSOR gs_wxBusyCursor = 0;     // new, busy cursor
 static HCURSOR gs_wxBusyCursorOld = 0;  // old cursor
 static int gs_wxBusyCursorCount = 0;
 
+#ifdef __DIGITALMARS__
+extern "C" HCURSOR wxGetCurrentBusyCursor()
+#else
 extern HCURSOR wxGetCurrentBusyCursor()
+#endif
 {
     return gs_wxBusyCursor;
 }