+/* Decode the options from argv and argc.
+ The global variable `optind' will say how many arguments we used up. */
+
+void
+decode_options (argc, argv)
+ int argc;
+ char **argv;
+{
+ while (1)
+ {
+ int opt = getopt_long (argc, argv,
+ "VHn", longopts, 0);
+
+ if (opt == EOF)
+ break;
+
+ switch (opt)
+ {
+ case 0:
+ /* If getopt returns 0, then it has already processed a
+ long-named option. We should do nothing. */
+ break;
+
+ case 'n':
+ nowait = 1;
+ break;
+
+ case 'V':
+ fprintf (stderr, "Version %s\n", VERSION);
+ exit (1);
+ break;
+
+ case 'H':
+ default:
+ print_help_and_exit ();
+ }
+ }
+}
+
+void
+print_help_and_exit ()
+{
+ fprintf (stderr,
+ "Usage: %s [-n] [--no-wait] [+LINENUMBER] FILENAME\n",
+ progname);
+ fprintf (stderr,
+ "Report bugs to bug-gnu-emacs@prep.ai.mit.edu.\n");
+ exit (1);
+}
+
+/* Return a copy of NAME, inserting a &
+ before each &, each space, and any initial -.
+ Change spaces to underscores, too, so that the
+ return value never contains a space. */
+
+char *
+quote_file_name (name)
+ char *name;
+{
+ char *copy = (char *) malloc (strlen (name) * 2 + 1);
+ char *p, *q;
+
+ p = name;
+ q = copy;
+ while (*p)
+ {
+ if (*p == ' ')
+ {
+ *q++ = '&';
+ *q++ = '_';
+ p++;
+ }
+ else
+ {
+ if (*p == '&' || (*p == '-' && p == name))
+ *q++ = '&';
+ *q++ = *p++;
+ }
+ }
+ *q++ = 0;
+
+ return copy;
+}
+
+#ifdef C_ALLOCA
+/* Like malloc but get fatal error if memory is exhausted. */
+
+char *
+xmalloc (size)
+ unsigned int size;
+{
+ char *result = (char *) malloc (size);
+ if (result == NULL)
+ {
+ perror ("malloc");
+ exit (1);
+ }
+ return result;
+}
+#endif /* C_ALLOCA */
+\f