getopt1.c - enscript - GNU Enscript
 (HTM) git clone git://thinkerwim.org/enscript.git
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
       getopt1.c (4655B)
       ---
            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    This file is part of the GNU C Library.  Its master source is NOT part of
            5    the C library, however.  The master source lives in /gd/gnu/lib.
            6 
            7    The GNU C Library is free software; you can redistribute it and/or
            8    modify it under the terms of the GNU Library General Public License as
            9    published by the Free Software Foundation; either version 2 of the
           10    License, or (at your option) any later version.
           11 
           12    The GNU C Library 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 GNU
           15    Library General Public License for more details.
           16 
           17    You should have received a copy of the GNU Library General Public
           18    License along with the GNU C Library; see the file COPYING.LIB.  If not,
           19    write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
           20    Boston, MA 02110-1301, 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 */