"Fossies" - the Fresh Open Source Software Archive

Member "xtermcontrol-3.8/src/getopt1.c" (9 Dec 2018, 4938 Bytes) of package /linux/privat/xtermcontrol-3.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 and the last Fossies "Diffs" side-by-side code changes report: 3.4_vs_3.5.

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