"Fossies" - the Fresh Open Source Software Archive

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