* src/getargs.c (usage): Take status as argument and exit

accordingly.
Report the traditional `Try ... --help' message when status != 0.
(usage, version): Don't take a FILE * as arg, it is pointless.
(getargs): When there is an incorrect number of arguments, make it
an error, and report it GNUlically thanks to `usage ()'.
This commit is contained in:
Akim Demaille
2002-10-19 14:36:40 +00:00
parent 3a781eb26b
commit 0e57572183
2 changed files with 61 additions and 44 deletions

View File

@@ -1,3 +1,12 @@
2002-10-19 Akim Demaille <akim@epita.fr>
* src/getargs.c (usage): Take status as argument and exit
accordingly.
Report the traditional `Try ... --help' message when status != 0.
(usage, version): Don't take a FILE * as arg, it is pointless.
(getargs): When there is an incorrect number of arguments, make it
an error, and report it GNUlically thanks to `usage ()'.
2002-10-18 Paul Eggert <eggert@twinsun.com> 2002-10-18 Paul Eggert <eggert@twinsun.com>
* data/glr.c (yyreportParseError): Don't assume that sprintf * data/glr.c (yyreportParseError): Don't assume that sprintf

View File

@@ -22,6 +22,7 @@
#include "system.h" #include "system.h"
#include "getopt.h" #include "getopt.h"
#include "argmatch.h" #include "argmatch.h"
#include "error.h"
#include "complain.h" #include "complain.h"
#include "getargs.h" #include "getargs.h"
#include "files.h" #include "files.h"
@@ -149,37 +150,43 @@ report_argmatch (char *args)
while ((args = strtok (NULL, ","))); while ((args = strtok (NULL, ",")));
} }
/*---------------------------.
| Display the help message. | /*-------------------------------------------.
`---------------------------*/ | Display the help message and exit STATUS. |
`-------------------------------------------*/
static void static void
usage (FILE *stream) usage (int status)
{ {
/* Some efforts were made to ease the translators' task, please if (status != 0)
continue. */ fprintf (stderr, _("Try `%s --help' for more information.\n"),
fputs (_("\ program_name);
GNU bison generates parsers for LALR(1) grammars.\n"), stream); else
putc ('\n', stream); {
/* Some efforts were made to ease the translators' task, please
continue. */
fputs (_("\
GNU bison generates parsers for LALR(1) grammars.\n"), stdout);
putc ('\n', stdout);
fprintf (stream, _("\ fprintf (stdout, _("\
Usage: %s [OPTION]... FILE\n"), program_name); Usage: %s [OPTION]... FILE\n"), program_name);
putc ('\n', stream); putc ('\n', stdout);
fputs (_("\ fputs (_("\
If a long option shows an argument as mandatory, then it is mandatory\n\ If a long option shows an argument as mandatory, then it is mandatory\n\
for the equivalent short option also. Similarly for optional arguments.\n"), for the equivalent short option also. Similarly for optional arguments.\n"),
stream); stdout);
putc ('\n', stream); putc ('\n', stdout);
fputs (_("\ fputs (_("\
Operation modes:\n\ Operation modes:\n\
-h, --help display this help and exit\n\ -h, --help display this help and exit\n\
-V, --version output version information and exit\n\ -V, --version output version information and exit\n\
-y, --yacc emulate POSIX yacc\n"), stream); -y, --yacc emulate POSIX yacc\n"), stdout);
putc ('\n', stream); putc ('\n', stdout);
fputs (_("\ fputs (_("\
Parser:\n\ Parser:\n\
-S, --skeleton=FILE specify the skeleton to use\n\ -S, --skeleton=FILE specify the skeleton to use\n\
-t, --debug instrument the parser for debugging\n\ -t, --debug instrument the parser for debugging\n\
@@ -188,10 +195,10 @@ Parser:\n\
-l, --no-lines don't generate `#line' directives\n\ -l, --no-lines don't generate `#line' directives\n\
-n, --no-parser generate the tables only\n\ -n, --no-parser generate the tables only\n\
-k, --token-table include a table of token names\n\ -k, --token-table include a table of token names\n\
"), stream); "), stdout);
putc ('\n', stream); putc ('\n', stdout);
fputs (_("\ fputs (_("\
Output:\n\ Output:\n\
-d, --defines also produce a header file\n\ -d, --defines also produce a header file\n\
-r, --report=THINGS also produce details on the automaton\n\ -r, --report=THINGS also produce details on the automaton\n\
@@ -199,10 +206,10 @@ Output:\n\
-b, --file-prefix=PREFIX specify a PREFIX for output files\n\ -b, --file-prefix=PREFIX specify a PREFIX for output files\n\
-o, --output=FILE leave output to FILE\n\ -o, --output=FILE leave output to FILE\n\
-g, --graph also produce a VCG description of the automaton\n\ -g, --graph also produce a VCG description of the automaton\n\
"), stream); "), stdout);
putc ('\n', stream); putc ('\n', stdout);
fputs (_("\ fputs (_("\
THINGS is a list of comma separated words that can include:\n\ THINGS is a list of comma separated words that can include:\n\
`state' describe the states\n\ `state' describe the states\n\
`itemset' complete the core item sets with their closure\n\ `itemset' complete the core item sets with their closure\n\
@@ -210,11 +217,14 @@ THINGS is a list of comma separated words that can include:\n\
`solved' describe shift/reduce conflicts solving\n\ `solved' describe shift/reduce conflicts solving\n\
`all' include all the above information\n\ `all' include all the above information\n\
`none' disable the report\n\ `none' disable the report\n\
"), stream); "), stdout);
putc ('\n', stream); putc ('\n', stdout);
fputs (_("\ fputs (_("\
Report bugs to <bug-bison@gnu.org>.\n"), stream); Report bugs to <bug-bison@gnu.org>.\n"), stdout);
}
exit (status);
} }
@@ -223,23 +233,23 @@ Report bugs to <bug-bison@gnu.org>.\n"), stream);
`------------------------------*/ `------------------------------*/
static void static void
version (FILE *stream) version (void)
{ {
/* Some efforts were made to ease the translators' task, please /* Some efforts were made to ease the translators' task, please
continue. */ continue. */
fprintf (stream, _("bison (GNU Bison) %s"), VERSION); printf (_("bison (GNU Bison) %s"), VERSION);
putc ('\n', stream); putc ('\n', stdout);
fputs (_("Written by Robert Corbett and Richard Stallman.\n"), stream); fputs (_("Written by Robert Corbett and Richard Stallman.\n"), stdout);
putc ('\n', stream); putc ('\n', stdout);
fprintf (stream, fprintf (stdout,
_("Copyright (C) %d Free Software Foundation, Inc.\n"), 2002); _("Copyright (C) %d Free Software Foundation, Inc.\n"), 2002);
fputs (_("\ fputs (_("\
This is free software; see the source for copying conditions. There is NO\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\ warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\
"), "),
stream); stdout);
} }
@@ -327,11 +337,10 @@ getargs (int argc, char *argv[])
break; break;
case 'h': case 'h':
usage (stdout); usage (0);
exit (0);
case 'V': case 'V':
version (stdout); version ();
exit (0); exit (0);
case 'g': case 'g':
@@ -401,14 +410,13 @@ getargs (int argc, char *argv[])
exit (1); exit (1);
} }
if (optind == argc) if (optind != argc - 1)
{ {
fprintf (stderr, _("%s: no grammar file given\n"), program_name); error (0, 0,
exit (1); (optind == argc
? _("too few arguments") : _("too many arguments")));
usage (EXIT_FAILURE);
} }
if (optind < argc - 1)
fprintf (stderr, _("%s: extra arguments ignored after `%s'\n"),
program_name, argv[optind]);
infile = argv[optind]; infile = argv[optind];
} }