1 /* mswindows.c -- Windows-specific support
2 Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
4 This file is part of Wget.
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version.
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
20 /* #### Someone document these functions! */
40 /* Defined in log.c. */
41 void redirect_output (const char *);
43 static int windows_nt_p;
46 /* Emulation of Unix sleep. */
48 sleep (unsigned seconds)
50 Sleep (1000 * seconds);
51 /* Unix sleep() is interruptible. To make it semi-usable, it
52 returns a value that says how much it "really" slept, or some
53 junk like that. Ignore it. */
58 read_registry (HKEY hkey, char *subkey, char *valuename, char *buf, int *len)
63 if (RegOpenKeyEx (hkey, subkey, NULL, KEY_READ, &result) != ERROR_SUCCESS)
65 if (RegQueryValueEx (result, valuename, NULL, &type, buf, &size) != ERROR_SUCCESS)
73 pwd_cuserid (char *where)
76 int len = sizeof (buf);
77 if (GetUserName (buf, (LPDWORD) &len) == TRUE)
81 else if (!!(ptr = getenv ("USERNAME")))
85 else if (!read_registry (HKEY_LOCAL_MACHINE, "Network\\Logon",
86 "username", buf, &len))
92 strncpy (where, buf, len);
99 windows_main_junk (int *argc, char **argv, char **exec_name)
105 /* Remove .EXE from filename if it has one. */
106 *exec_name = xstrdup (*exec_name);
107 p = strrchr (*exec_name, '.');
123 redirect_output (_("\n\
124 CTRL+Break received, redirecting output to `%s'.\n\
125 Execution continued in background.\n\
126 You may stop Wget by pressing CTRL+ALT+DELETE.\n"));
130 fork_to_background (void)
132 /* Whether we arrange our own version of opt.lfilename here. */
137 opt.lfilename = unique_name (DEFAULT_LOGFILE);
140 printf (_("Continuing in background.\n"));
142 printf (_("Output will be written to `%s'.\n"), opt.lfilename);
150 ws_handler (DWORD dwEvent)
157 #ifdef CTRLBREAK_BACKGND
158 case CTRL_BREAK_EVENT:
160 fork_to_background ();
162 case CTRL_SHUTDOWN_EVENT:
163 case CTRL_CLOSE_EVENT:
164 case CTRL_LOGOFF_EVENT:
173 ws_changetitle (char *url, int nurl)
179 title_buf = (char *)xmalloc (strlen (url) + 20);
180 sprintf (title_buf, "Wget %s%s", url, nurl == 1 ? "" : " ...");
181 /* #### What are the semantics of SetConsoleTitle? Will it free the
182 given memory later? */
183 SetConsoleTitle (title_buf);
189 static char *wspathsave;
198 ptr = strrchr (argv0, '\\');
202 wspathsave = (char*) xmalloc (strlen(argv0)+1);
203 strcpy (wspathsave, argv0);
206 buffer = (char*) xmalloc (256);
207 rrr = SearchPath (NULL, argv0, strchr (argv0, '.') ? NULL : ".EXE",
209 if (rrr && rrr <= 256)
212 wspathsave = (char*) xmalloc (strlen(buffer)+1);
213 strcpy (wspathsave, buffer);
221 ws_help (const char *name)
223 char *mypath = ws_mypath ();
228 char *buf = (char *)alloca (strlen (mypath) + strlen (name) + 4 + 1);
229 sprintf (buf, "%s%s.HLP", mypath, name);
230 if (stat (buf, &sbuf) == 0)
232 printf (_("Starting WinHelp %s\n"), buf);
233 WinHelp (NULL, buf, HELP_INDEX, NULL);
237 printf ("%s: %s\n", buf, strerror (errno));
250 if (GetVersionEx (&os) == TRUE
251 && os.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS)
254 requested = MAKEWORD (1, 1);
255 err = WSAStartup (requested, &data);
259 fprintf (stderr, _("%s: Couldn't find usable socket driver.\n"),
264 if (LOBYTE (requested) < 1 || (LOBYTE (requested) == 1 &&
265 HIBYTE (requested) < 1))
267 fprintf (stderr, _("%s: Couldn't find usable socket driver.\n"),
273 SetConsoleCtrlHandler (ws_handler, TRUE);