1 /* Example of Parsing Arguments with getopt.
2    Copyright (C) 1991-2022 Free Software Foundation, Inc.
3 
4    This program is free software; you can redistribute it and/or
5    modify it under the terms of the GNU General Public License
6    as published by the Free Software Foundation; either version 2
7    of the License, or (at your option) any later version.
8 
9    This program is distributed in the hope that it will be useful,
10    but WITHOUT ANY WARRANTY; without even the implied warranty of
11    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12    GNU General Public License for more details.
13 
14    You should have received a copy of the GNU General Public License
15    along with this program; if not, see <https://www.gnu.org/licenses/>.
16 */
17 
18 /*@group*/
19 #include <ctype.h>
20 #include <stdio.h>
21 #include <stdlib.h>
22 #include <unistd.h>
23 
24 int
main(int argc,char ** argv)25 main (int argc, char **argv)
26 {
27   int aflag = 0;
28   int bflag = 0;
29   char *cvalue = NULL;
30   int index;
31   int c;
32 
33   opterr = 0;
34 /*@end group*/
35 
36 /*@group*/
37   while ((c = getopt (argc, argv, "abc:")) != -1)
38     switch (c)
39       {
40       case 'a':
41         aflag = 1;
42         break;
43       case 'b':
44         bflag = 1;
45         break;
46       case 'c':
47         cvalue = optarg;
48         break;
49       case '?':
50         if (optopt == 'c')
51           fprintf (stderr, "Option -%c requires an argument.\n", optopt);
52         else if (isprint (optopt))
53           fprintf (stderr, "Unknown option `-%c'.\n", optopt);
54         else
55           fprintf (stderr,
56                    "Unknown option character `\\x%x'.\n",
57                    optopt);
58         return 1;
59       default:
60         abort ();
61       }
62 /*@end group*/
63 
64 /*@group*/
65   printf ("aflag = %d, bflag = %d, cvalue = %s\n",
66 	  aflag, bflag, cvalue);
67 
68   for (index = optind; index < argc; index++)
69     printf ("Non-option argument %s\n", argv[index]);
70   return 0;
71 }
72 /*@end group*/
73