]> git.saurik.com Git - bison.git/blobdiff - src/getargs.c
Fix the previous test.
[bison.git] / src / getargs.c
index 3015f8b796dfd254d63723d03615030b20a31c9d..3a74ea1dc74405310d2993b5596d67a241495be3 100644 (file)
@@ -1,5 +1,5 @@
 /* Parse command line arguments for bison.
 /* Parse command line arguments for bison.
-   Copyright (C) 1984, 1986, 1989, 1992, 2000 Free Software Foundation, Inc.
+   Copyright 1984, 1986, 1989, 1992, 2000, 2001 Free Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
 
    This file is part of Bison, the GNU Compiler Compiler.
 
 #include "getopt.h"
 #include "system.h"
 #include "files.h"
 #include "getopt.h"
 #include "system.h"
 #include "files.h"
-
-int verboseflag;
-int definesflag;
-int debugflag;
-int nolinesflag;
-int noparserflag = 0;
-int toknumflag = 0;
-int rawtoknumflag = 0;
-char *spec_name_prefix; /* for -p.  */
-char *spec_file_prefix; /* for -b. */
-extern int fixed_outfiles;/* for -y */
+#include "complain.h"
+#include "getargs.h"
+#include "xalloc.h"
+#include "options.h"
+
+int debug_flag = 0;
+int defines_flag = 0;
+int locations_flag = 0;
+int no_lines_flag = 0;
+int no_parser_flag = 0;
+int token_table_flag = 0;
+int verbose_flag = 0;
+int yacc_flag = 0;     /* for -y */
+int graph_flag = 0;
+int trace_flag = 0;
+
+const char *skeleton = NULL;
+const char *include = NULL;
 
 extern char *program_name;
 
 
 extern char *program_name;
 
-extern void warns PARAMS((char *, char *));    /* main.c */
-
-struct option longopts[] =
-{
-  {"debug", 0, &debugflag, 1},
-  {"defines", 0, &definesflag, 1},
-  {"file-prefix", 1, 0, 'b'},
-  {"fixed-output-files", 0, &fixed_outfiles, 1},
-  {"help", 0, 0, 'h'},
-  {"name-prefix", 1, 0, 'p'}, /* was 'a';  apparently unused -wjh */
-  {"no-lines", 0, &nolinesflag, 1},
-  {"no-parser", 0, &noparserflag, 1},
-  {"output", 1, 0, 'o'},
-  {"output-file", 1, 0, 'o'},
-  {"raw", 0, &rawtoknumflag, 1},
-  {"token-table", 0, &toknumflag, 1},
-  {"verbose", 0, &verboseflag, 1},
-  {"version", 0, 0, 'V'},
-  {"yacc", 0, &fixed_outfiles, 1},
-  {0, 0, 0, 0}
-};
-
 /*---------------------------.
 | Display the help message.  |
 `---------------------------*/
 /*---------------------------.
 | Display the help message.  |
 `---------------------------*/
-void
+
+static void
 usage (FILE *stream)
 {
   /* Some efforts were made to ease the translators' task, please
 usage (FILE *stream)
 {
   /* Some efforts were made to ease the translators' task, please
@@ -89,11 +75,12 @@ Operation modes:\n\
 
   fputs (_("\
 Parser:\n\
 
   fputs (_("\
 Parser:\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\
+      --locations            enable locations computation\n\
   -p, --name-prefix=PREFIX   prepend PREFIX to the external symbols\n\
   -l, --no-lines             don't generate `#line' directives\n\
   -n, --no-parser            generate the tables only\n\
   -p, --name-prefix=PREFIX   prepend PREFIX to the external symbols\n\
   -l, --no-lines             don't generate `#line' directives\n\
   -n, --no-parser            generate the tables only\n\
-  -r, --raw                  number the tokens from 3\n\
   -k, --token-table          include a table of token names\n\
 "), stream);
   putc ('\n', stream);
   -k, --token-table          include a table of token names\n\
 "), stream);
   putc ('\n', stream);
@@ -103,101 +90,152 @@ Output:\n\
   -d, --defines              also produce a header file\n\
   -v, --verbose              also produce an explanation of the automaton\n\
   -b, --file-prefix=PREFIX   specify a PREFIX for output files\n\
   -d, --defines              also produce a header file\n\
   -v, --verbose              also produce an explanation of the automaton\n\
   -b, --file-prefix=PREFIX   specify a PREFIX for output files\n\
-  -o, --output-file=FILE     leave output to FILE\n"), stream);
+  -o, --output=FILE          leave output to FILE\n\
+  -g, --graph                also produce a VCG description of the automaton\n\
+"), stream);
   putc ('\n', stream);
 
   fputs (_("\
 Report bugs to <bug-bison@gnu.org>.\n"), stream);
 }
 
   putc ('\n', stream);
 
   fputs (_("\
 Report bugs to <bug-bison@gnu.org>.\n"), stream);
 }
 
+
+/*------------------------------.
+| Display the version message.  |
+`------------------------------*/
+
+static void
+version (FILE *stream)
+{
+  /* Some efforts were made to ease the translators' task, please
+     continue.  */
+  fprintf (stream, _("\
+bison (GNU Bison) %s"), VERSION);
+  putc ('\n', stream);
+  putc ('\n', stream);
+
+  fputs (_("\
+Copyright 1984, 1986, 1989, 1992, 2000, 2001 Free Software Foundation, Inc.\n"),
+        stream);
+
+  fputs (_("\
+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\
+"),
+        stream);
+}
+
+
+/*----------------------.
+| Process the options.  |
+`----------------------*/
+
+/* Under DOS, there is no difference on the case.  This can be
+   troublesome when looking for `.tab' etc.  */
+#ifdef MSDOS
+# define AS_FILE_NAME(File) (strlwr (File), (File))
+#else
+# define AS_FILE_NAME(File) (File)
+#endif
+
 void
 getargs (int argc, char *argv[])
 {
 void
 getargs (int argc, char *argv[])
 {
-  register int c;
-
-  verboseflag = 0;
-  definesflag = 0;
-  debugflag = 0;
-  noparserflag = 0;
-  rawtoknumflag = 0;
-  toknumflag = 0;
-  fixed_outfiles = 0;
-
-  while ((c = getopt_long (argc, argv, "yvdhrltknVo:b:p:", longopts, (int *)0))
-        != EOF)
-    {
-      switch (c)
-       {
-       case 0:
-         /* Certain long options cause getopt_long to return 0.  */
-         break;
-
-       case 'y':
-         fixed_outfiles = 1;
-         break;
-
-       case 'h':
-         usage (stdout);
-         exit (0);
-
-       case 'V':
-         printf ("%s\n", VERSION_STRING);
-         exit (0);
-
-       case 'v':
-         verboseflag = 1;
-         break;
-
-       case 'd':
-         definesflag = 1;
-         break;
-
-       case 'l':
-         nolinesflag = 1;
-         break;
-
-       case 'k':
-         toknumflag = 1;
-         break;
-
-       case 'r':
-         rawtoknumflag = 1;
-         break;
-
-       case 'n':
-         noparserflag = 1;
-         break;
-
-       case 't':
-         debugflag = 1;
-         break;
-
-       case 'o':
-         spec_outfile = optarg;
-         break;
-
-       case 'b':
-         spec_file_prefix = optarg;
-         break;
-
-       case 'p':
-         spec_name_prefix = optarg;
-         break;
-
-       default:
-         usage (stderr);
-         exit (1);
-       }
-    }
+  int c;
+
+  struct option *longopts = long_option_table_new ();
+  while ((c = getopt_long (argc, argv, shortopts, longopts, NULL)) != EOF)
+    switch (c)
+      {
+      case 0:
+       /* Certain long options cause getopt_long to return 0.  */
+       break;
+
+      case 'y':
+       yacc_flag = 1;
+       break;
+
+      case 'h':
+       usage (stdout);
+       exit (0);
+
+      case 'V':
+       version (stdout);
+       exit (0);
+
+      case 'g':
+       /* Here, the -g and --graph=FILE options are differentiated.  */
+       graph_flag = 1;
+       spec_graph_file = AS_FILE_NAME (optarg);
+       break;
+
+      case 'v':
+       verbose_flag = 1;
+       break;
+
+      case 'S':
+       skeleton = AS_FILE_NAME (optarg);
+       break;
+
+      case 'I':
+       include = AS_FILE_NAME (optarg);
+       break;
+
+      case 'd':
+       /* Here, the -d and --defines options are differentiated.  */
+       defines_flag = 1;
+       if (optarg)
+         spec_defines_file = AS_FILE_NAME (optarg);
+       break;
+
+      case 'l':
+       no_lines_flag = 1;
+       break;
+
+      case 'k':
+       token_table_flag = 1;
+       break;
+
+      case 'r':
+       fatal (_("`%s' is no longer supported"), "--raw");
+       break;
+
+      case 'n':
+       no_parser_flag = 1;
+       break;
+
+      case 't':
+       debug_flag = 1;
+       break;
+
+      case 'o':
+       spec_outfile = AS_FILE_NAME (optarg);
+       break;
+
+      case 'b':
+       spec_file_prefix = AS_FILE_NAME (optarg);
+       break;
+
+      case 'p':
+       spec_name_prefix = optarg;
+       break;
+
+      default:
+       fprintf (stderr, _("Try `%s --help' for more information.\n"),
+                program_name);
+       exit (1);
+      }
+
+  free (longopts);
 
   if (optind == argc)
     {
 
   if (optind == argc)
     {
-      fprintf(stderr, _("%s: no grammar file given\n"), program_name);
-      exit(1);
+      fprintf (stderr, _("%s: no grammar file given\n"), program_name);
+      exit (1);
     }
   if (optind < argc - 1)
     }
   if (optind < argc - 1)
-    fprintf(stderr, _("%s: extra arguments ignored after `%s'\n"),
-           program_name, argv[optind]);
+    fprintf (stderr, _("%s: extra arguments ignored after `%s'\n"),
+            program_name, argv[optind]);
 
   infile = argv[optind];
 }
 
   infile = argv[optind];
 }