5762775 [rkeene@sledge /home/rkeene/devel/old/bc-dos/lib]$ cat -n getopt1.c
  1 /* getopt_long and getopt_long_only entry points for GNU getopt.
  2    Copyright (C) 1987, 88, 89, 90, 91, 92, 1993, 1994
  3     Free Software Foundation, Inc.
  4 
  5 This file is part of the GNU C Library.  Its master source is NOT part of
  6 the C library, however.  The master source lives in /gd/gnu/lib.
  7 
  8 The GNU C Library is free software; you can redistribute it and/or
  9 modify it under the terms of the GNU Library General Public License as
 10 published by the Free Software Foundation; either version 2 of the
 11 License, or (at your option) any later version.
 12 
 13 The GNU C Library is distributed in the hope that it will be useful,
 14 but WITHOUT ANY WARRANTY; without even the implied warranty of
 15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 16 Library General Public License for more details.
 17 
 18 You should have received a copy of the GNU Library General Public
 19 License along with the GNU C Library; see the file COPYING.LIB.  If
 20 not, write to the Free Software Foundation, Inc., 675 Mass Ave,
 21 Cambridge, MA 02139, USA.  */
 22 
 23 #ifdef HAVE_CONFIG_H
 24 #include <config.h>
 25 #endif
 26 
 27 #include "getopt.h"
 28 
 29 #if !defined (__STDC__) || !__STDC__
 30 /* This is a separate conditional since some stdc systems
 31    reject `defined (const)'.  */
 32 #ifndef const
 33 #define const
 34 #endif
 35 #endif
 36 
 37 #include <stdio.h>
 38 
 39 /* Comment out all this code if we are using the GNU C Library, and are not
 40    actually compiling the library itself.  This code is part of the GNU C
 41    Library, but also included in many other GNU distributions.  Compiling
 42    and linking in this code is a waste when using the GNU C library
 43    (especially if it is a shared library).  Rather than having every GNU
 44    program understand `configure --with-gnu-libc' and omit the object files,
 45    it is simpler to just do this in the source for each such file.  */
 46 
 47 #if defined (_LIBC) || !defined (__GNU_LIBRARY__)
 48 
 49 
 50 /* This needs to come after some library #include
 51    to get __GNU_LIBRARY__ defined.  */
 52 #ifdef __GNU_LIBRARY__
 53 #include <stdlib.h>
 54 #else
 55 char *getenv ();
 56 #endif
 57 
 58 #ifndef NULL
 59 #define NULL 0
 60 #endif
 61 
 62 int
 63 getopt_long (argc, argv, options, long_options, opt_index)
 64      int argc;
 65      char *const *argv;
 66      const char *options;
 67      const struct option *long_options;
 68      int *opt_index;
 69 {
 70   return _getopt_internal (argc, argv, options, long_options, opt_index, 0);
 71 }
 72 
 73 /* Like getopt_long, but '-' as well as '--' can indicate a long option.
 74    If an option that starts with '-' (not '--') doesn't match a long option,
 75    but does match a short option, it is parsed as a short option
 76    instead.  */
 77 
 78 int
 79 getopt_long_only (argc, argv, options, long_options, opt_index)
 80      int argc;
 81      char *const *argv;
 82      const char *options;
 83      const struct option *long_options;
 84      int *opt_index;
 85 {
 86   return _getopt_internal (argc, argv, options, long_options, opt_index, 1);
 87 }
 88 
 89 
 90 #endif  /* _LIBC or not __GNU_LIBRARY__.  */
 91 
 92 #ifdef TEST
 93 
 94 #include <stdio.h>
 95 
 96 int
 97 main (argc, argv)
 98      int argc;
 99      char **argv;
100 {
101   int c;
102   int digit_optind = 0;
103 
104   while (1)
105     {
106       int this_option_optind = optind ? optind : 1;
107       int option_index = 0;
108       static struct option long_options[] =
109       {
110     {"add", 1, 0, 0},
111     {"append", 0, 0, 0},
112     {"delete", 1, 0, 0},
113     {"verbose", 0, 0, 0},
114     {"create", 0, 0, 0},
115     {"file", 1, 0, 0},
116     {0, 0, 0, 0}
117       };
118 
119       c = getopt_long (argc, argv, "abc:d:0123456789",
120                long_options, &option_index);
121       if (c == EOF)
122     break;
123 
124       switch (c)
125     {
126     case 0:
127       printf ("option %s", long_options[option_index].name);
128       if (optarg)
129         printf (" with arg %s", optarg);
130       printf ("\n");
131       break;
132 
133     case '0':
134     case '1':
135     case '2':
136     case '3':
137     case '4':
138     case '5':
139     case '6':
140     case '7':
141     case '8':
142     case '9':
143       if (digit_optind != 0 && digit_optind != this_option_optind)
144         printf ("digits occur in two different argv-elements.\n");
145       digit_optind = this_option_optind;
146       printf ("option %c\n", c);
147       break;
148 
149     case 'a':
150       printf ("option a\n");
151       break;
152 
153     case 'b':
154       printf ("option b\n");
155       break;
156 
157     case 'c':
158       printf ("option c with value `%s'\n", optarg);
159       break;
160 
161     case 'd':
162       printf ("option d with value `%s'\n", optarg);
163       break;
164 
165     case '?':
166       break;
167 
168     default:
169       printf ("?? getopt returned character code 0%o ??\n", c);
170     }
171     }
172 
173   if (optind < argc)
174     {
175       printf ("non-option ARGV-elements: ");
176       while (optind < argc)
177     printf ("%s ", argv[optind++]);
178       printf ("\n");
179     }
180 
181   exit (0);
182 }
183 
184 #endif /* TEST */
5762776 [rkeene@sledge /home/rkeene/devel/old/bc-dos/lib]$

Click here to go back to the directory listing.
Click here to download this file.
last modified: 1995-06-28 06:05:31