X-Git-Url: http://sjero.net/git/?p=wget;a=blobdiff_plain;f=src%2Fmain.c;h=d4fea4f3619e81fc11e4291b4689fed39cdb729e;hp=009aa5e622d5adc2b324846469f96f7c9d5967ae;hb=fafd83c097b578be8581726cc5b52bc10bdc9238;hpb=48b53471e89938fde4588bea068578ab2ae7864f diff --git a/src/main.c b/src/main.c index 009aa5e6..d4fea4f3 100644 --- a/src/main.c +++ b/src/main.c @@ -65,7 +65,15 @@ as that of the covered work. */ struct options opt; +/* defined in version.c */ extern char *version_string; +extern char *compilation_string; +extern char *system_getrc; +extern char *link_string; +/* defined in build_info.c */ +extern char *compiled_features[]; +/* Used for --version output in print_version */ +static const int max_chars_per_line = 72; #if defined(SIGHUP) || defined(SIGUSR1) static void redirect_output_signal (int); @@ -153,6 +161,7 @@ static struct cmdline_option option_data[] = { "cookies", 0, OPT_BOOLEAN, "cookies", -1 }, { "cut-dirs", 0, OPT_VALUE, "cutdirs", -1 }, { WHEN_DEBUG ("debug"), 'd', OPT_BOOLEAN, "debug", -1 }, + { "default-page", 0, OPT_VALUE, "defaultpage", -1 }, { "delete-after", 0, OPT_BOOLEAN, "deleteafter", -1 }, { "directories", 0, OPT_BOOLEAN, "dirstruct", -1 }, { "directory-prefix", 'P', OPT_VALUE, "dirprefix", -1 }, @@ -405,7 +414,7 @@ Logging and input file:\n"), N_("\ -nv, --no-verbose turn off verboseness, without being quiet.\n"), N_("\ - -i, --input-file=FILE download URLs found in FILE.\n"), + -i, --input-file=FILE download URLs found in local or external FILE.\n"), N_("\ -F, --force-html treat input file as HTML.\n"), N_("\ @@ -503,6 +512,9 @@ HTTP options:\n"), --http-password=PASS set http password to PASS.\n"), N_("\ --no-cache disallow server-cached data.\n"), + N_ ("\ + --default-page=NAME Change the default page name (normally\n\ + this is `index.html'.).\n"), N_("\ -E, --html-extension save HTML documents with `.html' extension.\n"), N_("\ @@ -598,7 +610,8 @@ Recursive download:\n"), N_("\ --delete-after delete files locally after downloading them.\n"), N_("\ - -k, --convert-links make links in downloaded HTML point to local files.\n"), + -k, --convert-links make links in downloaded HTML or CSS point to\n\ + local files.\n"), N_("\ -K, --backup-converted before converting file X, back up as X.orig.\n"), N_("\ @@ -688,10 +701,127 @@ prompt_for_password (void) return getpass(""); } +/* Function that prints the line argument while limiting it + to at most line_length. prefix is printed on the first line + and an appropriate number of spaces are added on subsequent + lines.*/ +static void +format_and_print_line (const char *prefix, char *line, + int line_length) +{ + int leading_spaces; + int remaining_chars; + char *token; + + assert (prefix != NULL); + assert (line != NULL); + + if (line_length <= 0) + line_length = max_chars_per_line; + + leading_spaces = strlen (prefix); + printf ("%s", prefix); + remaining_chars = line_length - leading_spaces; + /* We break on spaces. */ + token = strtok (line, " "); + while (token != NULL) + { + /* If however a token is much larger than the maximum + line length, all bets are off and we simply print the + token on the next line. */ + if (remaining_chars <= strlen (token)) + { + int j; + printf ("\n"); + j = 0; + for (j = 0; j < leading_spaces; j++) + { + printf (" "); + } + remaining_chars = line_length - leading_spaces; + } + printf ("%s ", token); + remaining_chars -= strlen (token) + 1; // account for " " + token = strtok (NULL, " "); + } + + printf ("\n"); +} + static void print_version (void) { - printf ("GNU Wget %s\n\n", version_string); + const char *options_title = "Options : "; + const char *wgetrc_title = "Wgetrc : "; + const char *locale_title = "Locale : "; + const char *compile_title = "Compile : "; + const char *link_title = "Link : "; + const char *prefix_spaces = " "; + const int prefix_space_length = strlen (prefix_spaces); + char *line; + char *env_wgetrc, *user_wgetrc; + int i; + + printf ("GNU Wget %s\n", version_string); + printf (options_title); + /* compiled_features is a char*[]. We limit the characters per + line to max_chars_per_line and prefix each line with a constant + number of spaces for proper alignment. */ + for (i = 0; compiled_features[i] != NULL; ) + { + int line_length = max_chars_per_line - prefix_space_length; + while ((line_length > 0) && (compiled_features[i] != NULL)) + { + printf ("%s ", compiled_features[i]); + line_length -= strlen (compiled_features[i]) + 2; + i++; + } + printf ("\n"); + if (compiled_features[i] != NULL) + { + printf (prefix_spaces); + } + } + /* Handle the case when $WGETRC is unset and $HOME/.wgetrc is + absent. */ + printf (wgetrc_title); + env_wgetrc = wgetrc_env_file_name (); + if (env_wgetrc && *env_wgetrc) + { + printf ("%s (env)\n%s", env_wgetrc, prefix_spaces); + xfree (env_wgetrc); + } + user_wgetrc = wgetrc_user_file_name (); + if (user_wgetrc) + { + printf ("%s (user)\n%s", user_wgetrc, prefix_spaces); + xfree (user_wgetrc); + } +#ifdef SYSTEM_WGETRC + printf ("%s (system)\n", SYSTEM_WGETRC); +#else + putchar ('\n'); +#endif + + line = xstrdup (LOCALEDIR); + format_and_print_line (locale_title, + line, + max_chars_per_line); + xfree (line); + + line = xstrdup (compilation_string); + format_and_print_line (compile_title, + line, + max_chars_per_line); + xfree (line); + + line = xstrdup (link_string); + format_and_print_line (link_title, + line, + max_chars_per_line); + xfree (line); + + printf ("\n"); /* TRANSLATORS: When available, an actual copyright character (cirle-c) should be used in preference to "(C)". */ fputs (_("\ @@ -707,9 +837,12 @@ There is NO WARRANTY, to the extent permitted by law.\n"), stdout); stdout); fputs (_("Currently maintained by Micah Cowan .\n"), stdout); + fputs (_("Please send bug reports and questions to .\n"), + stdout); exit (0); } - + +char *program_name; /* Needed by lib/error.c. */ int main (int argc, char **argv) @@ -719,6 +852,8 @@ main (int argc, char **argv) int nurl, status; bool append_to_log = false; + program_name = argv[0]; + i18n_initialize (); /* Construct the name of the executable, without the directory part. */ @@ -991,7 +1126,19 @@ for details.\n\n")); if (opt.output_document) { if (HYPHENP (opt.output_document)) - output_stream = stdout; + { +#ifdef WINDOWS + FILE *result; + result = freopen (NULL, "wb", stdout); + if (result == NULL) + { + logputs (LOG_NOTQUIET, _("\ +WARNING: Can't reopen standard output in binary mode;\n\ + downloaded file may contain inappropriate line endings.\n")); + } +#endif + output_stream = stdout; + } else { struct_fstat st; @@ -1114,9 +1261,6 @@ for details.\n\n")); xfree (url[i]); cleanup (); -#ifdef DEBUG_MALLOC - print_malloc_debug_stats (); -#endif if (status == RETROK) return 0; else