From 5a97622d5e053e935af0a9715ddd941fdaafcaf9 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Sat, 22 Feb 1997 01:20:46 +0000 Subject: update from main archive 970221 1997-02-22 00:17 Ulrich Drepper * catgets/gencat.c: Change to use argp. * db/makedb: Likewise. * locale/programs/localedef.c: Likewise. * locale/programs/locale.c: Little adjustment for better usage of argp. 1997-02-20 20:07 Greg McGary * Makeconfig: Add rules for libc with bounded pointers. * Makerules: Likewise. * config.make.in: Likewise. * configure.in: Likewise. 1997-02-21 10:41 Miles Bader * argp.h (OPTION_NO_USAGE): New macro. * argp-help.c (usage_long_opt, usage_argful_short_opt, add_argless_short_opt): Implement OPTION_NO_USAGE. 1997-02-20 16:41 Andreas Schwab * malloc/obstack.h: Fix typo. 1997-02-20 15:56 Miles Bader * argp-fmtstream.c (__argp_fmtstream_update): Account for case where NEXTLINE points one past the end of the active buffer. * argp-help.c : New include. (__argp_failure): Only exit if STATE says it's ok. (print_header, hol_entry_help): Use UPARAMS fields rather than constants. (_help): Call fill_in_uparams if necessary. (struct hol_help_state): New type. (struct pentry_state): Add hhstate field. Remove prev_entry & sep_groups fields. (hol_entry_help): Add HHSTATE parameter. Remove prev_entry & sep_groups parameters. Suppress duplicate arguments if requested, and note the fact. (print_header, comma): Use PEST->hhstate fields. (hol_help): Add HHSTATE variable & pass to hol_entry_help. Remove LAST_ENTRY & SEP_GROUPS variables. If any suplicate arguments were suppressed, print explanatory note. (filter_doc): Replace PEST parameter with STATE. (struct uparams): New type. (uparams): New variable. (struct uparam_name): New type. (uparam_names): New variable. (fill_in_uparams): New function. (__argp_failure, __argp_error, __argp_state_help): Make STATE parameter const. * argp.h (argp_state_help, __argp_state_help, argp_usage, __argp_usage, argp_error, __argp_error, argp_failure, __argp_failure): Make STATE parameter const. (ARGP_KEY_HELP_DUP_ARGS_NOTE): New macro. * argp.h (argp_program_bug_address): Make const. 1997-02-20 19:20 Ulrich Drepper * sysdeps/unix/mman/syscalls.list: Explain msync interface. 1997-02-19 01:37 Erik Troan * shadow/sgetspent_r.c: Accept empty third, fourth and fifth fields. 1997-02-20 14:44 Andreas Jaeger * stdio-common/test-fseek.c: Remove temporary file, add copyright. 1997-02-20 17:51 Ulrich Drepper * sysdeps/generic/netinet/in.h: Protect contents using __BEGIN/END_DECLS. Reported by a sun . * inet/net/ethernet.h: Move to sysdeps/unix/sysv/linux/net. * inet/Makefile (headers): Remove net/ethernet.h. * sysdeps/unix/sysv/linux/Makefile: Install net/ethernet.h. * sysdeps/unix/sysv/linux/Dist: Distribute net/ethernet.h. 1997-02-20 15:23 Thorsten Kukuk * nss/nsswitch.c (__nss_configure_lookup): Use correct test when searching in sorted array. 1997-02-20 01:24 Philip Blundell * inet/getnameinfo.c: Change to use reentrant getXXbyYY functions and protect modification of global data. 1997-02-19 18:48 Miles Bader * argp-parse.c (argp_default_parser): Set STATE->name for OPT_PROGNAME. (parser_init): Use the basename for PARSER->state.name. * argp-help.c (__argp_error, __argp_failure, __argp_state_help): Use PROGRAM_INVOCATION_SHORT_NAME instead of PROGRAM_INVOCATION_NAME. * argp-parse.c (parser_init): Set PARSER->state.flags. Make check whether PARSER has the prog name in argv[0] at the proper place. 1997-02-19 23:34 Ulrich Drepper * locale/programs/ld-time.c (time_finish): t_fmt_ampm is optional. Use default value instead of printing a warning. * nss/XXX-lookup.c: Add misssing explanation. 1997-02-19 19:14 Andreas Jaeger * inet/in6_addr.c: Add missing braces. * inet/getnameinfo.c: Include . * sysdeps/posix/getaddrinfo.c: Include . 1997-02-19 11:46 Ulrich Drepper * string/strxfrm.c (STRCOLL): Correct handling of `position' levels with no non-IGNOREd element and handling of NUL byte. * string/strcoll.c (STRXFRM): Likewise. * locale/weight.h: Likewise. * shadow/sgetspent_r.c (LINE_PARSER): Add missing ')'. --- catgets/gencat.c | 168 +++++++++++++++++++++++++++++-------------------------- 1 file changed, 89 insertions(+), 79 deletions(-) (limited to 'catgets/gencat.c') diff --git a/catgets/gencat.c b/catgets/gencat.c index 7047057832..9f1e762f53 100644 --- a/catgets/gencat.c +++ b/catgets/gencat.c @@ -21,12 +21,12 @@ # include #endif +#include #include #include #include #include #include -#include #include #include #include @@ -88,22 +88,55 @@ struct catalog /* If non-zero force creation of new file, not using existing one. */ static int force_new; -/* Long options. */ -static const struct option long_options[] = +/* Name of output file. */ +static const char *output_name; + +/* Name of generated C header file. */ +static const char *header_name; + +/* Name and version of program. */ +static void print_version (FILE *stream, struct argp_state *state); +void (*argp_program_version_hook) (FILE *, struct argp_state *) = print_version; + +#define OPT_NEW 1 + +/* Definitions of arguments for argp functions. */ +static const struct argp_option options[] = +{ + { "header", 'H', N_("NAME"), 0, + N_("Create C header file NAME containing symbol definitions") }, + { "new", OPT_NEW, NULL, 0, + N_("Do not use existing catalog, force new output file") }, + { "output", 'o', N_("NAME"), 0, N_("Write output to file NAME") }, + { NULL, 0, NULL, 0, NULL } +}; + +/* Short description of program. */ +static const char doc[] = N_("Generate message catalog.\ +\vIf INPUT-FILE is -, input is read from standard input. If OUTPUT-FILE\n\ +is -, output is written to standard output.\n"); + +/* Strings for arguments in help texts. */ +static const char args_doc[] = N_("\ +-o OUTPUT-FILE [INPUT-FILE]...\n[OUTPUT-FILE [INPUT-FILE]...]"); + +/* Prototype for option handler. */ +static error_t parse_opt (int key, char *arg, struct argp_state *state); + +/* Function to print some extra text in the help message. */ +static char *more_help (int key, const char *text, void *input); + +/* Data structure to communicate with argp functions. */ +static struct argp argp = { - { "header", required_argument, NULL, 'H' }, - { "help", no_argument, NULL, 'h' }, - { "new", no_argument, &force_new, 1 }, - { "output", required_argument, NULL, 'o' }, - { "version", no_argument, NULL, 'V' }, - { NULL, 0, NULL, 0 } + options, parse_opt, args_doc, doc, NULL, more_help }; + /* Wrapper functions with error checking for standard functions. */ extern void *xmalloc (size_t n); /* Prototypes for local functions. */ -static void usage (int status) __attribute__ ((noreturn)); static void error_print (void); static struct catalog *read_input_file (struct catalog *current, const char *fname); @@ -119,11 +152,6 @@ int main (int argc, char *argv[]) { struct catalog *result; - const char *output_name; - const char *header_name; - int do_help; - int do_version; - int opt; /* Set program name for messages. */ error_print_progname = error_print; @@ -135,50 +163,10 @@ main (int argc, char *argv[]) textdomain (PACKAGE); /* Initialize local variables. */ - do_help = 0; - do_version = 0; - output_name = NULL; - header_name = NULL; result = NULL; - while ((opt = getopt_long (argc, argv, "hH:o:V", long_options, NULL)) != -1) - switch (opt) - { - case '\0': /* Long option. */ - break; - case 'h': - do_help = 1; - break; - case 'H': - header_name = optarg; - break; - case 'o': - output_name = optarg; - break; - case 'V': - do_version = 1; - break; - default: - usage (EXIT_FAILURE); - } - - /* Version information is requested. */ - if (do_version) - { - printf ("gencat (GNU %s) %s\n", PACKAGE, VERSION); - printf (_("\ -Copyright (C) %s Free Software Foundation, Inc.\n\ -This is free software; see the source for copying conditions. There is NO\n\ -warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\ -"), "1996, 1997"); - printf (_("Written by %s.\n"), "Ulrich Drepper"); - - exit (EXIT_SUCCESS); - } - - /* Help is requested. */ - if (do_help) - usage (EXIT_SUCCESS); + /* Parse and process arguments. */ + argp_parse (&argp, argc, argv, 0, 0, NULL); /* Determine output file. */ if (output_name == NULL) @@ -201,32 +189,54 @@ warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\ } -static void -usage (int status) +/* Handle program arguments. */ +static error_t +parse_opt (int key, char *arg, struct argp_state *state) { - if (status != EXIT_SUCCESS) - fprintf (stderr, gettext ("Try `%s --help' for more information.\n"), - program_invocation_name); - else + switch (key) { - printf (gettext ("\ -Usage: %s [OPTION]... -o OUTPUT-FILE [INPUT-FILE]...\n\ - %s [OPTION]... [OUTPUT-FILE [INPUT-FILE]...]\n\ -Mandatory arguments to long options are mandatory for short options too.\n\ - -H, --header create C header file containing symbol definitions\n\ - -h, --help display this help and exit\n\ - --new do not use existing catalog, force new output file\n\ - -o, --output=NAME write output to file NAME\n\ - -V, --version output version information and exit\n\ -If INPUT-FILE is -, input is read from standard input. If OUTPUT-FILE\n\ -is -, output is written to standard output.\n"), - program_invocation_name, program_invocation_name); - fputs (gettext ("\ -Report bugs using the `glibcbug' script to .\n"), - stdout); + case 'H': + header_name = arg; + break; + case OPT_NEW: + force_new = 1; + break; + case 'o': + output_name = arg; + break; + default: + return ARGP_ERR_UNKNOWN; } + return 0; +} - exit (status); + +static char * +more_help (int key, const char *text, void *input) +{ + switch (key) + { + case ARGP_KEY_HELP_EXTRA: + /* We print some extra information. */ + return strdup (gettext ("\ +Report bugs using the `glibcbug' script to .\n")); + default: + break; + } + return (char *) text; +} + +/* Print the version information. */ +static void +print_version (FILE *stream, struct argp_state *state) +{ + fprintf (stream, "gencat (GNU %s) %s\n", PACKAGE, VERSION); + fprintf (stream, gettext ("\ +Copyright (C) %s Free Software Foundation, Inc.\n\ +This is free software; see the source for copying conditions. There is NO\n\ +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\ +"), "1996, 1997"); + fprintf (stream, gettext ("Written by %s.\n"), "Ulrich Drepper"); } -- cgit v1.2.3