Some more patches for wget on Windows.

1) config.h.ms: DMC already have usleep() and sleep().
2) mswindows.c: 
    - Removed read_registry() as it's not needed.
    - Added set_sleep_mode() to prevent Windows entering sleep-mode
      or hibernation on long transfers. Console mode programs doesn't seem
      to reset the idle-counter (as GUI programs do).

Patches against latest CVS version:

--- orig/windows/config.h.ms    Fri Sep 26 00:39:37 2003
+++ windows/config.h.ms      Sat Sep 27 01:12:43 2003
@@ -139,9 +139,10 @@
 #undef HAVE_UNISTD_H
 #endif

-/* None except Digital Mars have usleep function */
+/* None except Digital Mars have sleep/usleep functions */
 #if defined(__DMC__)
 #define HAVE_USLEEP
+#define HAVE_SLEEP
 #endif

diff -u3 -H -B orig/src/mswindows.c ./mswindows.c
--- orig/src/mswindows.c Fri Sep 26 00:39:35 2003
+++ ./mswindows.c Sat Sep 27 01:58:57 2003
@@ -57,13 +57,25 @@
 extern int errno;
 #endif

+#ifndef ES_SYSTEM_REQUIRED
+#define ES_SYSTEM_REQUIRED  0x00000001
+#endif
+
+#ifndef ES_CONTINUOUS
+#define ES_CONTINUOUS       0x80000000
+#endif
+
+
 /* Defined in log.c.  */
 void log_request_redirect_output PARAMS ((const char *));

-static int windows_nt_p;
+static DWORD set_sleep_mode (DWORD mode);

+static DWORD pwr_mode = 0;
+static int windows_nt_p;

 #ifndef HAVE_SLEEP
+
 /* Emulation of Unix sleep.  */

 unsigned int
@@ -92,21 +105,6 @@
 }
 #endif  /* HAVE_USLEEP */

-static char *
-read_registry (HKEY hkey, char *subkey, char *valuename, char *buf, int *len)
-{
-  HKEY result;
-  DWORD size = *len;
-  DWORD type = REG_SZ;
-  if (RegOpenKeyEx (hkey, subkey, 0, KEY_READ, &result) != ERROR_SUCCESS)
-    return NULL;
-  if (RegQueryValueEx (result, valuename, NULL, &type, (LPBYTE)buf, &size) != 
ERROR_SUCCESS)
-    buf = NULL;
-  *len = size;
-  RegCloseKey (result);
-  return buf;
-}
-
 void
 windows_main_junk (int *argc, char **argv, char **exec_name)
 {
@@ -125,6 +123,9 @@
 ws_cleanup (void)
 {
   WSACleanup ();
+  if (pwr_mode)
+     set_sleep_mode (pwr_mode);
+  pwr_mode = 0;
 }

 static void
@@ -170,7 +171,7 @@
     case CTRL_CLOSE_EVENT:
     case CTRL_LOGOFF_EVENT:
     default:
-      WSACleanup ();
+      ws_cleanup ();
       return FALSE;
     }
   return TRUE;
@@ -266,6 +267,7 @@
       exit (1);
     }
   atexit (ws_cleanup);
+  pwr_mode = set_sleep_mode (0);
   SetConsoleCtrlHandler (ws_handler, TRUE);
 }

@@ -295,3 +297,31 @@
   return res;
 }
 #endif
+
+/*
+ * Prevent Windows entering sleep/hibernation-mode while wget is doing a lengthy 
transfer.
+ * Windows does by default not consider network activity in console-programs as 
activity !
+ * Works on Win-98/ME/2K and up.
+ */
+static
+DWORD set_sleep_mode (DWORD mode)
+{
+  HMODULE mod = LoadLibrary ("kernel32.dll");
+  DWORD (*_SetThreadExecutionState) (DWORD) = NULL;
+  DWORD rc = (DWORD)-1;
+
+  if (mod)
+     (void*)_SetThreadExecutionState = GetProcAddress ((HINSTANCE)mod, 
"SetThreadExecutionState");
+
+  if (_SetThreadExecutionState)
+    {
+      if (mode == 0)  /* first time */
+         mode = (ES_SYSTEM_REQUIRED | ES_CONTINUOUS);
+      rc = (*_SetThreadExecutionState) (mode);
+    }
+  if (mod)
+     FreeLibrary (mod);
+  DEBUGP (("set_sleep_mode(): mode 0x%08lX, rc 0x%08lX\n", mode, rc));
+  return (rc);
+}
+

diff -u3 -H -B orig/src/mswindows.h ./mswindows.h
--- orig/src/mswindows.h Fri Sep 26 00:39:35 2003
+++ ./mswindows.h Sat Sep 27 02:01:13 2003
@@ -125,11 +125,6 @@
 #define ESTALE                  WSAESTALE
 #define EREMOTE                 WSAEREMOTE

-#ifdef __DMC__
-# define HAVE_SLEEP 1
-# define HAVE_USLEEP 1
-#endif
-
 /* Public functions.  */
--------------------------------

Gisle V.

# rm /bin/laden 
/bin/laden: Not found

Reply via email to