"Fossies" - the Fresh Open Source Software Archive

Member "libping-1.15/src/getopt1.c" (18 May 2001, 4142 Bytes) of package /linux/privat/old/libping-1.15.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 #include <config.h>
   21 #endif
   22 
   23 #include "getopt.h"
   24 
   25 #if !__STDC__ && !defined(const) && IN_GCC
   26 #define const
   27 #endif
   28 
   29 #include <stdio.h>
   30 
   31 /* Comment out all this code if we are using the GNU C Library, and are not
   32    actually compiling the library itself.  This code is part of the GNU C
   33    Library, but also included in many other GNU distributions.  Compiling
   34    and linking in this code is a waste when using the GNU C library
   35    (especially if it is a shared library).  Rather than having every GNU
   36    program understand `configure --with-gnu-libc' and omit the object files,
   37    it is simpler to just do this in the source for each such file.  */
   38 
   39 #if defined (_LIBC) || !defined (__GNU_LIBRARY__)
   40 
   41 
   42 /* This needs to come after some library #include
   43    to get __GNU_LIBRARY__ defined.  */
   44 #ifdef __GNU_LIBRARY__
   45 #include <stdlib.h>
   46 #else
   47 char *getenv ();
   48 #endif
   49 
   50 #ifndef NULL
   51 #define NULL 0
   52 #endif
   53 
   54 int
   55 getopt_long (argc, argv, options, long_options, opt_index)
   56      int argc;
   57      char *const *argv;
   58      const char *options;
   59      const struct option *long_options;
   60      int *opt_index;
   61 {
   62   return _getopt_internal (argc, argv, options, long_options, opt_index, 0);
   63 }
   64 
   65 /* Like getopt_long, but '-' as well as '--' can indicate a long option.
   66    If an option that starts with '-' (not '--') doesn't match a long option,
   67    but does match a short option, it is parsed as a short option
   68    instead.  */
   69 
   70 int
   71 getopt_long_only (argc, argv, options, long_options, opt_index)
   72      int argc;
   73      char *const *argv;
   74      const char *options;
   75      const struct option *long_options;
   76      int *opt_index;
   77 {
   78   return _getopt_internal (argc, argv, options, long_options, opt_index, 1);
   79 }
   80 
   81 
   82 #endif  /* _LIBC or not __GNU_LIBRARY__.  */
   83 
   84 #ifdef TEST
   85 
   86 #include <stdio.h>
   87 
   88 int
   89 main (argc, argv)
   90      int argc;
   91      char **argv;
   92 {
   93   int c;
   94   int digit_optind = 0;
   95 
   96   while (1)
   97     {
   98       int this_option_optind = optind ? optind : 1;
   99       int option_index = 0;
  100       static struct option long_options[] =
  101       {
  102     {"add", 1, 0, 0},
  103     {"append", 0, 0, 0},
  104     {"delete", 1, 0, 0},
  105     {"verbose", 0, 0, 0},
  106     {"create", 0, 0, 0},
  107     {"file", 1, 0, 0},
  108     {0, 0, 0, 0}
  109       };
  110 
  111       c = getopt_long (argc, argv, "abc:d:0123456789",
  112                long_options, &option_index);
  113       if (c == EOF)
  114     break;
  115 
  116       switch (c)
  117     {
  118     case 0:
  119       printf ("option %s", long_options[option_index].name);
  120       if (optarg)
  121         printf (" with arg %s", optarg);
  122       printf ("\n");
  123       break;
  124 
  125     case '0':
  126     case '1':
  127     case '2':
  128     case '3':
  129     case '4':
  130     case '5':
  131     case '6':
  132     case '7':
  133     case '8':
  134     case '9':
  135       if (digit_optind != 0 && digit_optind != this_option_optind)
  136         printf ("digits occur in two different argv-elements.\n");
  137       digit_optind = this_option_optind;
  138       printf ("option %c\n", c);
  139       break;
  140 
  141     case 'a':
  142       printf ("option a\n");
  143       break;
  144 
  145     case 'b':
  146       printf ("option b\n");
  147       break;
  148 
  149     case 'c':
  150       printf ("option c with value `%s'\n", optarg);
  151       break;
  152 
  153     case 'd':
  154       printf ("option d with value `%s'\n", optarg);
  155       break;
  156 
  157     case '?':
  158       break;
  159 
  160     default:
  161       printf ("?? getopt returned character code 0%o ??\n", c);
  162     }
  163     }
  164 
  165   if (optind < argc)
  166     {
  167       printf ("non-option ARGV-elements: ");
  168       while (optind < argc)
  169     printf ("%s ", argv[optind++]);
  170       printf ("\n");
  171     }
  172 
  173   exit (0);
  174 }
  175 
  176 #endif /* TEST */