| #include <getopt.h> | 
 | #include <stdio.h> | 
 | #include <string.h> | 
 | #include <unistd.h> | 
 |  | 
 | int | 
 | main (int argc, char **argv) | 
 | { | 
 |   static const struct option options[] = | 
 |     { | 
 |       {"required", required_argument, NULL, 'r'}, | 
 |       {"optional", optional_argument, NULL, 'o'}, | 
 |       {"none",     no_argument,       NULL, 'n'}, | 
 |       {"color",    no_argument,       NULL, 'C'}, | 
 |       {"colour",   no_argument,       NULL, 'C'}, | 
 |       {NULL,       0,                 NULL, 0 } | 
 |     }; | 
 |  | 
 |   int aflag = 0; | 
 |   int bflag = 0; | 
 |   char *cvalue = NULL; | 
 |   int Cflag = 0; | 
 |   int nflag = 0; | 
 |   int index; | 
 |   int c; | 
 |   int result = 0; | 
 |  | 
 |   while ((c = getopt_long (argc, argv, "abc:", options, NULL)) >= 0) | 
 |     switch (c) | 
 |       { | 
 |       case 'a': | 
 | 	aflag = 1; | 
 | 	break; | 
 |       case 'b': | 
 | 	bflag = 1; | 
 | 	break; | 
 |       case 'c': | 
 | 	cvalue = optarg; | 
 | 	break; | 
 |       case 'C': | 
 | 	++Cflag; | 
 | 	break; | 
 |       case '?': | 
 | 	fputs ("Unknown option.\n", stderr); | 
 | 	return 1; | 
 |       default: | 
 | 	fprintf (stderr, "This should never happen!\n"); | 
 | 	return 1; | 
 |  | 
 |       case 'r': | 
 | 	printf ("--required %s\n", optarg); | 
 | 	result |= strcmp (optarg, "foobar") != 0; | 
 | 	break; | 
 |       case 'o': | 
 | 	printf ("--optional %s\n", optarg); | 
 | 	result |= optarg == NULL || strcmp (optarg, "bazbug") != 0; | 
 | 	break; | 
 |       case 'n': | 
 | 	puts ("--none"); | 
 | 	nflag = 1; | 
 | 	break; | 
 |       } | 
 |  | 
 |   printf ("aflag = %d, bflag = %d, cvalue = %s, Cflags = %d, nflag = %d\n", | 
 | 	  aflag, bflag, cvalue, Cflag, nflag); | 
 |  | 
 |   result |= (aflag != 1 || bflag != 1 || cvalue == NULL | 
 | 	     || strcmp (cvalue, "foobar") != 0 || Cflag != 3 || nflag != 1); | 
 |  | 
 |   for (index = optind; index < argc; index++) | 
 |     printf ("Non-option argument %s\n", argv[index]); | 
 |  | 
 |   result |= optind + 1 != argc || strcmp (argv[optind], "random") != 0; | 
 |  | 
 |   return result; | 
 | } |