Initial revision
authorrms <rms>
Tue, 19 May 1992 21:49:15 +0000 (21:49 +0000)
committerrms <rms>
Tue, 19 May 1992 21:49:15 +0000 (21:49 +0000)
manual/examples/longopt.c [new file with mode: 0644]

diff --git a/manual/examples/longopt.c b/manual/examples/longopt.c
new file mode 100644 (file)
index 0000000..ec74cda
--- /dev/null
@@ -0,0 +1,92 @@
+#include <stdio.h>
+
+/* Flag set by @samp{--verbose}.  */
+static int verbose_flag;
+
+int
+main (argc, argv)
+     int argc;
+     char **argv;
+{
+  int c;
+
+  while (1)
+    {
+      static struct option long_options[] =
+      {
+       /* These options set a flag.  */
+       {"verbose", 0, &verbose_flag, 1},
+       {"brief", 0, &verbose_flag, 0},
+       /* These options don't set a flag.
+          We distinguish them by their indices.  */
+       {"add", 1, 0, 0},
+       {"append", 0, 0, 0},
+       {"delete", 1, 0, 0},
+       {"create", 0, 0, 0},
+       {"file", 1, 0, 0},
+       {0, 0, 0, 0}
+      };
+      /* @code{getopt_long} stores the option index here.  */
+      int option_index = 0;
+
+      c = getopt_long (argc, argv, "abc:d:",
+                      long_options, &option_index);
+
+      /* Detect the end of the options.  */
+      if (c == EOF)
+       break;
+
+      switch (c)
+       {
+       case 0:
+         /* If this option set a flag, do nothing else now.  */
+         if (long_options[option_index].flag != 0)
+           break;
+         printf ("option %s", long_options[option_index].name);
+         if (optarg)
+           printf (" with arg %s", optarg);
+         printf ("\n");
+         break;
+
+       case 'a':
+         printf ("option -a\n");
+         break;
+
+       case 'b':
+         printf ("option -b\n");
+         break;
+
+       case 'c':
+         printf ("option -c with value `%s'\n", optarg);
+         break;
+
+       case 'd':
+         printf ("option -d with value `%s'\n", optarg);
+         break;
+
+       case '?':
+         /* @code{getopt_long} already printed an error message.  */
+         break;
+
+       default:
+         abort ();
+       }
+    }
+
+  /* Instead of reporting @samp{--verbose}
+     and @samp{--brief} as they are encountered,
+     we report the final status resulting from them.  */
+  if (verbose_flag)
+    printf ("verbose flag is set\n");
+
+  /* Print any remaining command line arguments (not options).  */
+  if (optind < argc)
+    {
+      printf ("non-option ARGV-elements: ");
+      while (optind < argc)
+       printf ("%s ", argv[optind++]);
+      printf ("\n");
+    }
+
+  exit (0);
+}