"Fossies" - the Fresh Open Source Software Archive

Member "jpeginfo-1.6.1/getopt1.c" (15 Jan 1998, 4512 Bytes) of package /linux/privat/old/jpeginfo-1.6.1.tar.gz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file. For more information about "getopt1.c" see the Fossies "Dox" file reference documentation.

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