examples/TestMasterMicroMod/getopt.c
changeset 166 b6fbc1c59a44
equal deleted inserted replaced
165:4ff8b68c6ee0 166:b6fbc1c59a44
       
     1 /* from http://www.pwilson.net/getopt.html */
       
     2 
       
     3 /* Getopt for GNU.
       
     4    NOTE: getopt is now part of the C library, so if you don't know what
       
     5    "Keep this file name-space clean" means, talk to drepper@gnu.org
       
     6    before changing it!
       
     7    Copyright (C) 1987,88,89,90,91,92,93,94,95,96,98,99,2000,2001
       
     8         Free Software Foundation, Inc.
       
     9    This file is part of the GNU C Library.
       
    10 
       
    11    The GNU C Library is free software; you can redistribute it and/or
       
    12    modify it under the terms of the GNU Lesser General Public
       
    13    License as published by the Free Software Foundation; either
       
    14    version 2.1 of the License, or (at your option) any later version.
       
    15 
       
    16    The GNU C Library is distributed in the hope that it will be useful,
       
    17    but WITHOUT ANY WARRANTY; without even the implied warranty of
       
    18    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
       
    19    Lesser General Public License for more details.
       
    20 
       
    21    You should have received a copy of the GNU Lesser General Public
       
    22    License along with the GNU C Library; if not, write to the Free
       
    23    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
       
    24    02111-1307 USA.  */
       
    25 
       
    26 /* This tells Alpha OSF/1 not to define a getopt prototype in <stdio.h>.
       
    27    Ditto for AIX 3.2 and <stdlib.h>.  */
       
    28 #ifndef _NO_PROTO
       
    29 # define _NO_PROTO
       
    30 #endif
       
    31 
       
    32 #ifdef HAVE_CONFIG_H
       
    33 # include <config.h>
       
    34 #endif
       
    35 
       
    36 #if !defined __STDC__ || !__STDC__
       
    37 /* This is a separate conditional since some stdc systems
       
    38    reject `defined (const)'.  */
       
    39 # ifndef const
       
    40 #  define const
       
    41 # endif
       
    42 #endif
       
    43 
       
    44 #include <stdio.h>
       
    45 
       
    46 /* Comment out all this code if we are using the GNU C Library, and are not
       
    47    actually compiling the library itself.  This code is part of the GNU C
       
    48    Library, but also included in many other GNU distributions.  Compiling
       
    49    and linking in this code is a waste when using the GNU C library
       
    50    (especially if it is a shared library).  Rather than having every GNU
       
    51    program understand `configure --with-gnu-libc' and omit the object files,
       
    52    it is simpler to just do this in the source for each such file.  */
       
    53 
       
    54 #define GETOPT_INTERFACE_VERSION 2
       
    55 #if !defined _LIBC && defined __GLIBC__ && __GLIBC__ >= 2
       
    56 # include <gnu-versions.h>
       
    57 # if _GNU_GETOPT_INTERFACE_VERSION == GETOPT_INTERFACE_VERSION
       
    58 #  define ELIDE_CODE
       
    59 # endif
       
    60 #endif
       
    61 
       
    62 #ifndef ELIDE_CODE
       
    63 
       
    64 
       
    65 /* This needs to come after some library #include
       
    66    to get __GNU_LIBRARY__ defined.  */
       
    67 #ifdef  __GNU_LIBRARY__
       
    68 /* Don't include stdlib.h for non-GNU C libraries because some of them
       
    69    contain conflicting prototypes for getopt.  */
       
    70 # include <stdlib.h>
       
    71 # include <unistd.h>
       
    72 #endif  /* GNU C library.  */
       
    73 
       
    74 #ifdef VMS
       
    75 # include <unixlib.h>
       
    76 # if HAVE_STRING_H - 0
       
    77 #  include <string.h>
       
    78 # endif
       
    79 #endif
       
    80 
       
    81 #ifndef _
       
    82 /* This is for other GNU distributions with internationalized messages.  */
       
    83 # if (HAVE_LIBINTL_H && ENABLE_NLS) || defined _LIBC
       
    84 #  include <libintl.h>
       
    85 #  ifndef _
       
    86 #   define _(msgid)     gettext (msgid)
       
    87 #  endif
       
    88 # else
       
    89 #  define _(msgid)      (msgid)
       
    90 # endif
       
    91 # if defined _LIBC && defined USE_IN_LIBIO
       
    92 #  include <wchar.h>
       
    93 # endif
       
    94 #endif
       
    95 
       
    96 /* This version of `getopt' appears to the caller like standard Unix `getopt'
       
    97    but it behaves differently for the user, since it allows the user
       
    98    to intersperse the options with the other arguments.
       
    99 
       
   100    As `getopt' works, it permutes the elements of ARGV so that,
       
   101    when it is done, all the options precede everything else.  Thus
       
   102    all application programs are extended to handle flexible argument order.
       
   103 
       
   104    Setting the environment variable POSIXLY_CORRECT disables permutation.
       
   105    Then the behavior is completely standard.
       
   106 
       
   107    GNU application programs can use a third alternative mode in which
       
   108    they can distinguish the relative order of options and other arguments.  */
       
   109 
       
   110 #include "getopt.h"
       
   111 
       
   112 /* For communication from `getopt' to the caller.
       
   113    When `getopt' finds an option that takes an argument,
       
   114    the argument value is returned here.
       
   115    Also, when `ordering' is RETURN_IN_ORDER,
       
   116    each non-option ARGV-element is returned here.  */
       
   117 
       
   118 char *optarg;
       
   119 
       
   120 /* Index in ARGV of the next element to be scanned.
       
   121    This is used for communication to and from the caller
       
   122    and for communication between successive calls to `getopt'.
       
   123 
       
   124    On entry to `getopt', zero means this is the first call; initialize.
       
   125 
       
   126    When `getopt' returns -1, this is the index of the first of the
       
   127    non-option elements that the caller should itself scan.
       
   128 
       
   129    Otherwise, `optind' communicates from one call to the next
       
   130    how much of ARGV has been scanned so far.  */
       
   131 
       
   132 /* 1003.2 says this must be 1 before any call.  */
       
   133 int optind = 1;
       
   134 
       
   135 /* Formerly, initialization of getopt depended on optind==0, which
       
   136    causes problems with re-calling getopt as programs generally don't
       
   137    know that. */
       
   138 
       
   139 int __getopt_initialized;
       
   140 
       
   141 /* The next char to be scanned in the option-element
       
   142    in which the last option character we returned was found.
       
   143    This allows us to pick up the scan where we left off.
       
   144 
       
   145    If this is zero, or a null string, it means resume the scan
       
   146    by advancing to the next ARGV-element.  */
       
   147 
       
   148 static char *nextchar;
       
   149 
       
   150 /* Callers store zero here to inhibit the error message
       
   151    for unrecognized options.  */
       
   152 
       
   153 int opterr = 1;
       
   154 
       
   155 /* Set to an option character which was unrecognized.
       
   156    This must be initialized on some systems to avoid linking in the
       
   157    system's own getopt implementation.  */
       
   158 
       
   159 int optopt = '?';
       
   160 
       
   161 /* Describe how to deal with options that follow non-option ARGV-elements.
       
   162 
       
   163    If the caller did not specify anything,
       
   164    the default is REQUIRE_ORDER if the environment variable
       
   165    POSIXLY_CORRECT is defined, PERMUTE otherwise.
       
   166 
       
   167    REQUIRE_ORDER means don't recognize them as options;
       
   168    stop option processing when the first non-option is seen.
       
   169    This is what Unix does.
       
   170    This mode of operation is selected by either setting the environment
       
   171    variable POSIXLY_CORRECT, or using `+' as the first character
       
   172    of the list of option characters.
       
   173 
       
   174    PERMUTE is the default.  We permute the contents of ARGV as we scan,
       
   175    so that eventually all the non-options are at the end.  This allows options
       
   176    to be given in any order, even with programs that were not written to
       
   177    expect this.
       
   178 
       
   179    RETURN_IN_ORDER is an option available to programs that were written
       
   180    to expect options and other ARGV-elements in any order and that care about
       
   181    the ordering of the two.  We describe each non-option ARGV-element
       
   182    as if it were the argument of an option with character code 1.
       
   183    Using `-' as the first character of the list of option characters
       
   184    selects this mode of operation.
       
   185 
       
   186    The special argument `--' forces an end of option-scanning regardless
       
   187    of the value of `ordering'.  In the case of RETURN_IN_ORDER, only
       
   188    `--' can cause `getopt' to return -1 with `optind' != ARGC.  */
       
   189 
       
   190 static enum
       
   191 {
       
   192   REQUIRE_ORDER, PERMUTE, RETURN_IN_ORDER
       
   193 } ordering;
       
   194 
       
   195 /* Value of POSIXLY_CORRECT environment variable.  */
       
   196 static char *posixly_correct;
       
   197 
       
   198 #ifdef  __GNU_LIBRARY__
       
   199 /* We want to avoid inclusion of string.h with non-GNU libraries
       
   200    because there are many ways it can cause trouble.
       
   201    On some systems, it contains special magic macros that don't work
       
   202    in GCC.  */
       
   203 # include <string.h>
       
   204 # define my_index       strchr
       
   205 #else
       
   206 
       
   207 # if HAVE_STRING_H || WIN32 /* Pete Wilson mod 7/28/02 */
       
   208 #  include <string.h>
       
   209 # else
       
   210 #  include <strings.h>
       
   211 # endif
       
   212 
       
   213 /* Avoid depending on library functions or files
       
   214    whose names are inconsistent.  */
       
   215 
       
   216 #ifndef getenv
       
   217 extern char *getenv ();
       
   218 #endif
       
   219 
       
   220 static char *
       
   221 my_index (str, chr)
       
   222      const char *str;
       
   223      int chr;
       
   224 {
       
   225   while (*str)
       
   226     {
       
   227       if (*str == chr)
       
   228         return (char *) str;
       
   229       str++;
       
   230     }
       
   231   return 0;
       
   232 }
       
   233 
       
   234 /* If using GCC, we can safely declare strlen this way.
       
   235    If not using GCC, it is ok not to declare it.  */
       
   236 #ifdef __GNUC__
       
   237 /* Note that Motorola Delta 68k R3V7 comes with GCC but not stddef.h.
       
   238    That was relevant to code that was here before.  */
       
   239 # if (!defined __STDC__ || !__STDC__) && !defined strlen
       
   240 /* gcc with -traditional declares the built-in strlen to return int,
       
   241    and has done so at least since version 2.4.5. -- rms.  */
       
   242 extern int strlen (const char *);
       
   243 # endif /* not __STDC__ */
       
   244 #endif /* __GNUC__ */
       
   245 
       
   246 #endif /* not __GNU_LIBRARY__ */
       
   247 
       
   248 /* Handle permutation of arguments.  */
       
   249 
       
   250 /* Describe the part of ARGV that contains non-options that have
       
   251    been skipped.  `first_nonopt' is the index in ARGV of the first of them;
       
   252    `last_nonopt' is the index after the last of them.  */
       
   253 
       
   254 static int first_nonopt;
       
   255 static int last_nonopt;
       
   256 
       
   257 #ifdef _LIBC
       
   258 /* Stored original parameters.
       
   259    XXX This is no good solution.  We should rather copy the args so
       
   260    that we can compare them later.  But we must not use malloc(3).  */
       
   261 extern int __libc_argc;
       
   262 extern char **__libc_argv;
       
   263 
       
   264 /* Bash 2.0 gives us an environment variable containing flags
       
   265    indicating ARGV elements that should not be considered arguments.  */
       
   266 
       
   267 # ifdef USE_NONOPTION_FLAGS
       
   268 /* Defined in getopt_init.c  */
       
   269 extern char *__getopt_nonoption_flags;
       
   270 
       
   271 static int nonoption_flags_max_len;
       
   272 static int nonoption_flags_len;
       
   273 # endif
       
   274 
       
   275 # ifdef USE_NONOPTION_FLAGS
       
   276 #  define SWAP_FLAGS(ch1, ch2) \
       
   277   if (nonoption_flags_len > 0)                                                \
       
   278     {                                                                         \
       
   279       char __tmp = __getopt_nonoption_flags[ch1];                             \
       
   280       __getopt_nonoption_flags[ch1] = __getopt_nonoption_flags[ch2];          \
       
   281       __getopt_nonoption_flags[ch2] = __tmp;                                  \
       
   282     }
       
   283 # else
       
   284 #  define SWAP_FLAGS(ch1, ch2)
       
   285 # endif
       
   286 #else   /* !_LIBC */
       
   287 # define SWAP_FLAGS(ch1, ch2)
       
   288 #endif  /* _LIBC */
       
   289 
       
   290 /* Exchange two adjacent subsequences of ARGV.
       
   291    One subsequence is elements [first_nonopt,last_nonopt)
       
   292    which contains all the non-options that have been skipped so far.
       
   293    The other is elements [last_nonopt,optind), which contains all
       
   294    the options processed since those non-options were skipped.
       
   295 
       
   296    `first_nonopt' and `last_nonopt' are relocated so that they describe
       
   297    the new indices of the non-options in ARGV after they are moved.  */
       
   298 
       
   299 #if defined __STDC__ && __STDC__
       
   300 static void exchange (char **);
       
   301 #endif
       
   302 
       
   303 static void
       
   304 exchange (argv)
       
   305      char **argv;
       
   306 {
       
   307   int bottom = first_nonopt;
       
   308   int middle = last_nonopt;
       
   309   int top = optind;
       
   310   char *tem;
       
   311 
       
   312   /* Exchange the shorter segment with the far end of the longer segment.
       
   313      That puts the shorter segment into the right place.
       
   314      It leaves the longer segment in the right place overall,
       
   315      but it consists of two parts that need to be swapped next.  */
       
   316 
       
   317 #if defined _LIBC && defined USE_NONOPTION_FLAGS
       
   318   /* First make sure the handling of the `__getopt_nonoption_flags'
       
   319      string can work normally.  Our top argument must be in the range
       
   320      of the string.  */
       
   321   if (nonoption_flags_len > 0 && top >= nonoption_flags_max_len)
       
   322     {
       
   323       /* We must extend the array.  The user plays games with us and
       
   324          presents new arguments.  */
       
   325       char *new_str = malloc (top + 1);
       
   326       if (new_str == NULL)
       
   327         nonoption_flags_len = nonoption_flags_max_len = 0;
       
   328       else
       
   329         {
       
   330           memset (__mempcpy (new_str, __getopt_nonoption_flags,
       
   331                              nonoption_flags_max_len),
       
   332                   '\0', top + 1 - nonoption_flags_max_len);
       
   333           nonoption_flags_max_len = top + 1;
       
   334           __getopt_nonoption_flags = new_str;
       
   335         }
       
   336     }
       
   337 #endif
       
   338 
       
   339   while (top > middle && middle > bottom)
       
   340     {
       
   341       if (top - middle > middle - bottom)
       
   342         {
       
   343           /* Bottom segment is the short one.  */
       
   344           int len = middle - bottom;
       
   345           register int i;
       
   346 
       
   347           /* Swap it with the top part of the top segment.  */
       
   348           for (i = 0; i < len; i++)
       
   349             {
       
   350               tem = argv[bottom + i];
       
   351               argv[bottom + i] = argv[top - (middle - bottom) + i];
       
   352               argv[top - (middle - bottom) + i] = tem;
       
   353               SWAP_FLAGS (bottom + i, top - (middle - bottom) + i);
       
   354             }
       
   355           /* Exclude the moved bottom segment from further swapping.  */
       
   356           top -= len;
       
   357         }
       
   358       else
       
   359         {
       
   360           /* Top segment is the short one.  */
       
   361           int len = top - middle;
       
   362           register int i;
       
   363 
       
   364           /* Swap it with the bottom part of the bottom segment.  */
       
   365           for (i = 0; i < len; i++)
       
   366             {
       
   367               tem = argv[bottom + i];
       
   368               argv[bottom + i] = argv[middle + i];
       
   369               argv[middle + i] = tem;
       
   370               SWAP_FLAGS (bottom + i, middle + i);
       
   371             }
       
   372           /* Exclude the moved top segment from further swapping.  */
       
   373           bottom += len;
       
   374         }
       
   375     }
       
   376 
       
   377   /* Update records for the slots the non-options now occupy.  */
       
   378 
       
   379   first_nonopt += (optind - last_nonopt);
       
   380   last_nonopt = optind;
       
   381 }
       
   382 
       
   383 /* Initialize the internal data when the first call is made.  */
       
   384 
       
   385 #if defined __STDC__ && __STDC__
       
   386 static const char *_getopt_initialize (int, char *const *, const char *);
       
   387 #endif
       
   388 static const char *
       
   389 _getopt_initialize (argc, argv, optstring)
       
   390      int argc;
       
   391      char *const *argv;
       
   392      const char *optstring;
       
   393 {
       
   394   /* Start processing options with ARGV-element 1 (since ARGV-element 0
       
   395      is the program name); the sequence of previously skipped
       
   396      non-option ARGV-elements is empty.  */
       
   397 
       
   398   first_nonopt = last_nonopt = optind;
       
   399 
       
   400   nextchar = NULL;
       
   401 
       
   402   posixly_correct = getenv ("POSIXLY_CORRECT");
       
   403 
       
   404   /* Determine how to handle the ordering of options and nonoptions.  */
       
   405 
       
   406   if (optstring[0] == '-')
       
   407     {
       
   408       ordering = RETURN_IN_ORDER;
       
   409       ++optstring;
       
   410     }
       
   411   else if (optstring[0] == '+')
       
   412     {
       
   413       ordering = REQUIRE_ORDER;
       
   414       ++optstring;
       
   415     }
       
   416   else if (posixly_correct != NULL)
       
   417     ordering = REQUIRE_ORDER;
       
   418   else
       
   419     ordering = PERMUTE;
       
   420 
       
   421 #if defined _LIBC && defined USE_NONOPTION_FLAGS
       
   422   if (posixly_correct == NULL
       
   423       && argc == __libc_argc && argv == __libc_argv)
       
   424     {
       
   425       if (nonoption_flags_max_len == 0)
       
   426         {
       
   427           if (__getopt_nonoption_flags == NULL
       
   428               || __getopt_nonoption_flags[0] == '\0')
       
   429             nonoption_flags_max_len = -1;
       
   430           else
       
   431             {
       
   432               const char *orig_str = __getopt_nonoption_flags;
       
   433               int len = nonoption_flags_max_len = strlen (orig_str);
       
   434               if (nonoption_flags_max_len < argc)
       
   435                 nonoption_flags_max_len = argc;
       
   436               __getopt_nonoption_flags =
       
   437                 (char *) malloc (nonoption_flags_max_len);
       
   438               if (__getopt_nonoption_flags == NULL)
       
   439                 nonoption_flags_max_len = -1;
       
   440               else
       
   441                 memset (__mempcpy (__getopt_nonoption_flags, orig_str, len),
       
   442                         '\0', nonoption_flags_max_len - len);
       
   443             }
       
   444         }
       
   445       nonoption_flags_len = nonoption_flags_max_len;
       
   446     }
       
   447   else
       
   448     nonoption_flags_len = 0;
       
   449 #endif
       
   450 
       
   451   return optstring;
       
   452 }
       
   453 
       
   454 /* Scan elements of ARGV (whose length is ARGC) for option characters
       
   455    given in OPTSTRING.
       
   456 
       
   457    If an element of ARGV starts with '-', and is not exactly "-" or "--",
       
   458    then it is an option element.  The characters of this element
       
   459    (aside from the initial '-') are option characters.  If `getopt'
       
   460    is called repeatedly, it returns successively each of the option characters
       
   461    from each of the option elements.
       
   462 
       
   463    If `getopt' finds another option character, it returns that character,
       
   464    updating `optind' and `nextchar' so that the next call to `getopt' can
       
   465    resume the scan with the following option character or ARGV-element.
       
   466 
       
   467    If there are no more option characters, `getopt' returns -1.
       
   468    Then `optind' is the index in ARGV of the first ARGV-element
       
   469    that is not an option.  (The ARGV-elements have been permuted
       
   470    so that those that are not options now come last.)
       
   471 
       
   472    OPTSTRING is a string containing the legitimate option characters.
       
   473    If an option character is seen that is not listed in OPTSTRING,
       
   474    return '?' after printing an error message.  If you set `opterr' to
       
   475    zero, the error message is suppressed but we still return '?'.
       
   476 
       
   477    If a char in OPTSTRING is followed by a colon, that means it wants an arg,
       
   478    so the following text in the same ARGV-element, or the text of the following
       
   479    ARGV-element, is returned in `optarg'.  Two colons mean an option that
       
   480    wants an optional arg; if there is text in the current ARGV-element,
       
   481    it is returned in `optarg', otherwise `optarg' is set to zero.
       
   482 
       
   483    If OPTSTRING starts with `-' or `+', it requests different methods of
       
   484    handling the non-option ARGV-elements.
       
   485    See the comments about RETURN_IN_ORDER and REQUIRE_ORDER, above.
       
   486 
       
   487    Long-named options begin with `--' instead of `-'.
       
   488    Their names may be abbreviated as long as the abbreviation is unique
       
   489    or is an exact match for some defined option.  If they have an
       
   490    argument, it follows the option name in the same ARGV-element, separated
       
   491    from the option name by a `=', or else the in next ARGV-element.
       
   492    When `getopt' finds a long-named option, it returns 0 if that option's
       
   493    `flag' field is nonzero, the value of the option's `val' field
       
   494    if the `flag' field is zero.
       
   495 
       
   496    The elements of ARGV aren't really const, because we permute them.
       
   497    But we pretend they're const in the prototype to be compatible
       
   498    with other systems.
       
   499 
       
   500    LONGOPTS is a vector of `struct option' terminated by an
       
   501    element containing a name which is zero.
       
   502 
       
   503    LONGIND returns the index in LONGOPT of the long-named option found.
       
   504    It is only valid when a long-named option has been found by the most
       
   505    recent call.
       
   506 
       
   507    If LONG_ONLY is nonzero, '-' as well as '--' can introduce
       
   508    long-named options.  */
       
   509 
       
   510 int
       
   511 _getopt_internal (argc, argv, optstring, longopts, longind, long_only)
       
   512      int argc;
       
   513      char *const *argv;
       
   514      const char *optstring;
       
   515      const struct option *longopts;
       
   516      int *longind;
       
   517      int long_only;
       
   518 {
       
   519   int print_errors = opterr;
       
   520   if (optstring[0] == ':')
       
   521     print_errors = 0;
       
   522 
       
   523   if (argc < 1)
       
   524     return -1;
       
   525 
       
   526   optarg = NULL;
       
   527 
       
   528   if (optind == 0 || !__getopt_initialized)
       
   529     {
       
   530       if (optind == 0)
       
   531         optind = 1;     /* Don't scan ARGV[0], the program name.  */
       
   532       optstring = _getopt_initialize (argc, argv, optstring);
       
   533       __getopt_initialized = 1;
       
   534     }
       
   535 
       
   536   /* Test whether ARGV[optind] points to a non-option argument.
       
   537      Either it does not have option syntax, or there is an environment flag
       
   538      from the shell indicating it is not an option.  The later information
       
   539      is only used when the used in the GNU libc.  */
       
   540 #if defined _LIBC && defined USE_NONOPTION_FLAGS
       
   541 # define NONOPTION_P (argv[optind][0] != '-' || argv[optind][1] == '\0'       \
       
   542                       || (optind < nonoption_flags_len                        \
       
   543                           && __getopt_nonoption_flags[optind] == '1'))
       
   544 #else
       
   545 # define NONOPTION_P (argv[optind][0] != '-' || argv[optind][1] == '\0')
       
   546 #endif
       
   547 
       
   548   if (nextchar == NULL || *nextchar == '\0')
       
   549     {
       
   550       /* Advance to the next ARGV-element.  */
       
   551 
       
   552       /* Give FIRST_NONOPT and LAST_NONOPT rational values if OPTIND has been
       
   553          moved back by the user (who may also have changed the arguments).  */
       
   554       if (last_nonopt > optind)
       
   555         last_nonopt = optind;
       
   556       if (first_nonopt > optind)
       
   557         first_nonopt = optind;
       
   558 
       
   559       if (ordering == PERMUTE)
       
   560         {
       
   561           /* If we have just processed some options following some non-options,
       
   562              exchange them so that the options come first.  */
       
   563 
       
   564           if (first_nonopt != last_nonopt && last_nonopt != optind)
       
   565             exchange ((char **) argv);
       
   566           else if (last_nonopt != optind)
       
   567             first_nonopt = optind;
       
   568 
       
   569           /* Skip any additional non-options
       
   570              and extend the range of non-options previously skipped.  */
       
   571 
       
   572           while (optind < argc && NONOPTION_P)
       
   573             optind++;
       
   574           last_nonopt = optind;
       
   575         }
       
   576 
       
   577       /* The special ARGV-element `--' means premature end of options.
       
   578          Skip it like a null option,
       
   579          then exchange with previous non-options as if it were an option,
       
   580          then skip everything else like a non-option.  */
       
   581 
       
   582       if (optind != argc && !strcmp (argv[optind], "--"))
       
   583         {
       
   584           optind++;
       
   585 
       
   586           if (first_nonopt != last_nonopt && last_nonopt != optind)
       
   587             exchange ((char **) argv);
       
   588           else if (first_nonopt == last_nonopt)
       
   589             first_nonopt = optind;
       
   590           last_nonopt = argc;
       
   591 
       
   592           optind = argc;
       
   593         }
       
   594 
       
   595       /* If we have done all the ARGV-elements, stop the scan
       
   596          and back over any non-options that we skipped and permuted.  */
       
   597 
       
   598       if (optind == argc)
       
   599         {
       
   600           /* Set the next-arg-index to point at the non-options
       
   601              that we previously skipped, so the caller will digest them.  */
       
   602           if (first_nonopt != last_nonopt)
       
   603             optind = first_nonopt;
       
   604           return -1;
       
   605         }
       
   606 
       
   607       /* If we have come to a non-option and did not permute it,
       
   608          either stop the scan or describe it to the caller and pass it by.  */
       
   609 
       
   610       if (NONOPTION_P)
       
   611         {
       
   612           if (ordering == REQUIRE_ORDER)
       
   613             return -1;
       
   614           optarg = argv[optind++];
       
   615           return 1;
       
   616         }
       
   617 
       
   618       /* We have found another option-ARGV-element.
       
   619          Skip the initial punctuation.  */
       
   620 
       
   621       nextchar = (argv[optind] + 1
       
   622                   + (longopts != NULL && argv[optind][1] == '-'));
       
   623     }
       
   624 
       
   625   /* Decode the current option-ARGV-element.  */
       
   626 
       
   627   /* Check whether the ARGV-element is a long option.
       
   628 
       
   629      If long_only and the ARGV-element has the form "-f", where f is
       
   630      a valid short option, don't consider it an abbreviated form of
       
   631      a long option that starts with f.  Otherwise there would be no
       
   632      way to give the -f short option.
       
   633 
       
   634      On the other hand, if there's a long option "fubar" and
       
   635      the ARGV-element is "-fu", do consider that an abbreviation of
       
   636      the long option, just like "--fu", and not "-f" with arg "u".
       
   637 
       
   638      This distinction seems to be the most useful approach.  */
       
   639 
       
   640   if (longopts != NULL
       
   641       && (argv[optind][1] == '-'
       
   642           || (long_only && (argv[optind][2] || !my_index (optstring, argv[optind][1])))))
       
   643     {
       
   644       char *nameend;
       
   645       const struct option *p;
       
   646       const struct option *pfound = NULL;
       
   647       int exact = 0;
       
   648       int ambig = 0;
       
   649       int indfound = -1;
       
   650       int option_index;
       
   651 
       
   652       for (nameend = nextchar; *nameend && *nameend != '='; nameend++)
       
   653         /* Do nothing.  */ ;
       
   654 
       
   655       /* Test all long options for either exact match
       
   656          or abbreviated matches.  */
       
   657       for (p = longopts, option_index = 0; p->name; p++, option_index++)
       
   658         if (!strncmp (p->name, nextchar, nameend - nextchar))
       
   659           {
       
   660             if ((unsigned int) (nameend - nextchar)
       
   661                 == (unsigned int) strlen (p->name))
       
   662               {
       
   663                 /* Exact match found.  */
       
   664                 pfound = p;
       
   665                 indfound = option_index;
       
   666                 exact = 1;
       
   667                 break;
       
   668               }
       
   669             else if (pfound == NULL)
       
   670               {
       
   671                 /* First nonexact match found.  */
       
   672                 pfound = p;
       
   673                 indfound = option_index;
       
   674               }
       
   675             else if (long_only
       
   676                      || pfound->has_arg != p->has_arg
       
   677                      || pfound->flag != p->flag
       
   678                      || pfound->val != p->val)
       
   679               /* Second or later nonexact match found.  */
       
   680               ambig = 1;
       
   681           }
       
   682 
       
   683       if (ambig && !exact)
       
   684         {
       
   685           if (print_errors)
       
   686             {
       
   687 #if defined _LIBC && defined USE_IN_LIBIO
       
   688               char *buf;
       
   689 
       
   690               __asprintf (&buf, _("%s: option `%s' is ambiguous\n"),
       
   691                           argv[0], argv[optind]);
       
   692 
       
   693               if (_IO_fwide (stderr, 0) > 0)
       
   694                 __fwprintf (stderr, L"%s", buf);
       
   695               else
       
   696                 fputs (buf, stderr);
       
   697 
       
   698               free (buf);
       
   699 #else
       
   700               fprintf (stderr, _("%s: option `%s' is ambiguous\n"),
       
   701                        argv[0], argv[optind]);
       
   702 #endif
       
   703             }
       
   704           nextchar += strlen (nextchar);
       
   705           optind++;
       
   706           optopt = 0;
       
   707           return '?';
       
   708         }
       
   709 
       
   710       if (pfound != NULL)
       
   711         {
       
   712           option_index = indfound;
       
   713           optind++;
       
   714           if (*nameend)
       
   715             {
       
   716               /* Don't test has_arg with >, because some C compilers don't
       
   717                  allow it to be used on enums.  */
       
   718               if (pfound->has_arg)
       
   719                 optarg = nameend + 1;
       
   720               else
       
   721                 {
       
   722                   if (print_errors)
       
   723                     {
       
   724 #if defined _LIBC && defined USE_IN_LIBIO
       
   725                       char *buf;
       
   726 #endif
       
   727 
       
   728                       if (argv[optind - 1][1] == '-')
       
   729                         {
       
   730                           /* --option */
       
   731 #if defined _LIBC && defined USE_IN_LIBIO
       
   732                           __asprintf (&buf, _("\
       
   733 %s: option `--%s' doesn't allow an argument\n"),
       
   734                                       argv[0], pfound->name);
       
   735 #else
       
   736                           fprintf (stderr, _("\
       
   737 %s: option `--%s' doesn't allow an argument\n"),
       
   738                                    argv[0], pfound->name);
       
   739 #endif
       
   740                         }
       
   741                       else
       
   742                         {
       
   743                           /* +option or -option */
       
   744 #if defined _LIBC && defined USE_IN_LIBIO
       
   745                           __asprintf (&buf, _("\
       
   746 %s: option `%c%s' doesn't allow an argument\n"),
       
   747                                       argv[0], argv[optind - 1][0],
       
   748                                       pfound->name);
       
   749 #else
       
   750                           fprintf (stderr, _("\
       
   751 %s: option `%c%s' doesn't allow an argument\n"),
       
   752                                    argv[0], argv[optind - 1][0], pfound->name);
       
   753 #endif
       
   754                         }
       
   755 
       
   756 #if defined _LIBC && defined USE_IN_LIBIO
       
   757                       if (_IO_fwide (stderr, 0) > 0)
       
   758                         __fwprintf (stderr, L"%s", buf);
       
   759                       else
       
   760                         fputs (buf, stderr);
       
   761 
       
   762                       free (buf);
       
   763 #endif
       
   764                     }
       
   765 
       
   766                   nextchar += strlen (nextchar);
       
   767 
       
   768                   optopt = pfound->val;
       
   769                   return '?';
       
   770                 }
       
   771             }
       
   772           else if (pfound->has_arg == 1)
       
   773             {
       
   774               if (optind < argc)
       
   775                 optarg = argv[optind++];
       
   776               else
       
   777                 {
       
   778                   if (print_errors)
       
   779                     {
       
   780 #if defined _LIBC && defined USE_IN_LIBIO
       
   781                       char *buf;
       
   782 
       
   783                       __asprintf (&buf,
       
   784                                   _("%s: option `%s' requires an argument\n"),
       
   785                                   argv[0], argv[optind - 1]);
       
   786 
       
   787                       if (_IO_fwide (stderr, 0) > 0)
       
   788                         __fwprintf (stderr, L"%s", buf);
       
   789                       else
       
   790                         fputs (buf, stderr);
       
   791 
       
   792                       free (buf);
       
   793 #else
       
   794                       fprintf (stderr,
       
   795                                _("%s: option `%s' requires an argument\n"),
       
   796                                argv[0], argv[optind - 1]);
       
   797 #endif
       
   798                     }
       
   799                   nextchar += strlen (nextchar);
       
   800                   optopt = pfound->val;
       
   801                   return optstring[0] == ':' ? ':' : '?';
       
   802                 }
       
   803             }
       
   804           nextchar += strlen (nextchar);
       
   805           if (longind != NULL)
       
   806             *longind = option_index;
       
   807           if (pfound->flag)
       
   808             {
       
   809               *(pfound->flag) = pfound->val;
       
   810               return 0;
       
   811             }
       
   812           return pfound->val;
       
   813         }
       
   814 
       
   815       /* Can't find it as a long option.  If this is not getopt_long_only,
       
   816          or the option starts with '--' or is not a valid short
       
   817          option, then it's an error.
       
   818          Otherwise interpret it as a short option.  */
       
   819       if (!long_only || argv[optind][1] == '-'
       
   820           || my_index (optstring, *nextchar) == NULL)
       
   821         {
       
   822           if (print_errors)
       
   823             {
       
   824 #if defined _LIBC && defined USE_IN_LIBIO
       
   825               char *buf;
       
   826 #endif
       
   827 
       
   828               if (argv[optind][1] == '-')
       
   829                 {
       
   830                   /* --option */
       
   831 #if defined _LIBC && defined USE_IN_LIBIO
       
   832                   __asprintf (&buf, _("%s: unrecognized option `--%s'\n"),
       
   833                               argv[0], nextchar);
       
   834 #else
       
   835                   fprintf (stderr, _("%s: unrecognized option `--%s'\n"),
       
   836                            argv[0], nextchar);
       
   837 #endif
       
   838                 }
       
   839               else
       
   840                 {
       
   841                   /* +option or -option */
       
   842 #if defined _LIBC && defined USE_IN_LIBIO
       
   843                   __asprintf (&buf, _("%s: unrecognized option `%c%s'\n"),
       
   844                               argv[0], argv[optind][0], nextchar);
       
   845 #else
       
   846                   fprintf (stderr, _("%s: unrecognized option `%c%s'\n"),
       
   847                            argv[0], argv[optind][0], nextchar);
       
   848 #endif
       
   849                 }
       
   850 
       
   851 #if defined _LIBC && defined USE_IN_LIBIO
       
   852               if (_IO_fwide (stderr, 0) > 0)
       
   853                 __fwprintf (stderr, L"%s", buf);
       
   854               else
       
   855                 fputs (buf, stderr);
       
   856 
       
   857               free (buf);
       
   858 #endif
       
   859             }
       
   860           nextchar = (char *) "";
       
   861           optind++;
       
   862           optopt = 0;
       
   863           return '?';
       
   864         }
       
   865     }
       
   866 
       
   867   /* Look at and handle the next short option-character.  */
       
   868 
       
   869   {
       
   870     char c = *nextchar++;
       
   871     char *temp = my_index (optstring, c);
       
   872 
       
   873     /* Increment `optind' when we start to process its last character.  */
       
   874     if (*nextchar == '\0')
       
   875       ++optind;
       
   876 
       
   877     if (temp == NULL || c == ':')
       
   878       {
       
   879         if (print_errors)
       
   880           {
       
   881 #if defined _LIBC && defined USE_IN_LIBIO
       
   882               char *buf;
       
   883 #endif
       
   884 
       
   885             if (posixly_correct)
       
   886               {
       
   887                 /* 1003.2 specifies the format of this message.  */
       
   888 #if defined _LIBC && defined USE_IN_LIBIO
       
   889                 __asprintf (&buf, _("%s: illegal option -- %c\n"),
       
   890                             argv[0], c);
       
   891 #else
       
   892                 fprintf (stderr, _("%s: illegal option -- %c\n"), argv[0], c);
       
   893 #endif
       
   894               }
       
   895             else
       
   896               {
       
   897 #if defined _LIBC && defined USE_IN_LIBIO
       
   898                 __asprintf (&buf, _("%s: invalid option -- %c\n"),
       
   899                             argv[0], c);
       
   900 #else
       
   901                 fprintf (stderr, _("%s: invalid option -- %c\n"), argv[0], c);
       
   902 #endif
       
   903               }
       
   904 
       
   905 #if defined _LIBC && defined USE_IN_LIBIO
       
   906             if (_IO_fwide (stderr, 0) > 0)
       
   907               __fwprintf (stderr, L"%s", buf);
       
   908             else
       
   909               fputs (buf, stderr);
       
   910 
       
   911             free (buf);
       
   912 #endif
       
   913           }
       
   914         optopt = c;
       
   915         return '?';
       
   916       }
       
   917     /* Convenience. Treat POSIX -W foo same as long option --foo */
       
   918     if (temp[0] == 'W' && temp[1] == ';')
       
   919       {
       
   920         char *nameend;
       
   921         const struct option *p;
       
   922         const struct option *pfound = NULL;
       
   923         int exact = 0;
       
   924         int ambig = 0;
       
   925         int indfound = 0;
       
   926         int option_index;
       
   927 
       
   928         /* This is an option that requires an argument.  */
       
   929         if (*nextchar != '\0')
       
   930           {
       
   931             optarg = nextchar;
       
   932             /* If we end this ARGV-element by taking the rest as an arg,
       
   933                we must advance to the next element now.  */
       
   934             optind++;
       
   935           }
       
   936         else if (optind == argc)
       
   937           {
       
   938             if (print_errors)
       
   939               {
       
   940                 /* 1003.2 specifies the format of this message.  */
       
   941 #if defined _LIBC && defined USE_IN_LIBIO
       
   942                 char *buf;
       
   943 
       
   944                 __asprintf (&buf, _("%s: option requires an argument -- %c\n"),
       
   945                             argv[0], c);
       
   946 
       
   947                 if (_IO_fwide (stderr, 0) > 0)
       
   948                   __fwprintf (stderr, L"%s", buf);
       
   949                 else
       
   950                   fputs (buf, stderr);
       
   951 
       
   952                 free (buf);
       
   953 #else
       
   954                 fprintf (stderr, _("%s: option requires an argument -- %c\n"),
       
   955                          argv[0], c);
       
   956 #endif
       
   957               }
       
   958             optopt = c;
       
   959             if (optstring[0] == ':')
       
   960               c = ':';
       
   961             else
       
   962               c = '?';
       
   963             return c;
       
   964           }
       
   965         else
       
   966           /* We already incremented `optind' once;
       
   967              increment it again when taking next ARGV-elt as argument.  */
       
   968           optarg = argv[optind++];
       
   969 
       
   970         /* optarg is now the argument, see if it's in the
       
   971            table of longopts.  */
       
   972 
       
   973         for (nextchar = nameend = optarg; *nameend && *nameend != '='; nameend++)
       
   974           /* Do nothing.  */ ;
       
   975 
       
   976         /* Test all long options for either exact match
       
   977            or abbreviated matches.  */
       
   978         for (p = longopts, option_index = 0; p->name; p++, option_index++)
       
   979           if (!strncmp (p->name, nextchar, nameend - nextchar))
       
   980             {
       
   981               if ((unsigned int) (nameend - nextchar) == strlen (p->name))
       
   982                 {
       
   983                   /* Exact match found.  */
       
   984                   pfound = p;
       
   985                   indfound = option_index;
       
   986                   exact = 1;
       
   987                   break;
       
   988                 }
       
   989               else if (pfound == NULL)
       
   990                 {
       
   991                   /* First nonexact match found.  */
       
   992                   pfound = p;
       
   993                   indfound = option_index;
       
   994                 }
       
   995               else
       
   996                 /* Second or later nonexact match found.  */
       
   997                 ambig = 1;
       
   998             }
       
   999         if (ambig && !exact)
       
  1000           {
       
  1001             if (print_errors)
       
  1002               {
       
  1003 #if defined _LIBC && defined USE_IN_LIBIO
       
  1004                 char *buf;
       
  1005 
       
  1006                 __asprintf (&buf, _("%s: option `-W %s' is ambiguous\n"),
       
  1007                             argv[0], argv[optind]);
       
  1008 
       
  1009                 if (_IO_fwide (stderr, 0) > 0)
       
  1010                   __fwprintf (stderr, L"%s", buf);
       
  1011                 else
       
  1012                   fputs (buf, stderr);
       
  1013 
       
  1014                 free (buf);
       
  1015 #else
       
  1016                 fprintf (stderr, _("%s: option `-W %s' is ambiguous\n"),
       
  1017                          argv[0], argv[optind]);
       
  1018 #endif
       
  1019               }
       
  1020             nextchar += strlen (nextchar);
       
  1021             optind++;
       
  1022             return '?';
       
  1023           }
       
  1024         if (pfound != NULL)
       
  1025           {
       
  1026             option_index = indfound;
       
  1027             if (*nameend)
       
  1028               {
       
  1029                 /* Don't test has_arg with >, because some C compilers don't
       
  1030                    allow it to be used on enums.  */
       
  1031                 if (pfound->has_arg)
       
  1032                   optarg = nameend + 1;
       
  1033                 else
       
  1034                   {
       
  1035                     if (print_errors)
       
  1036                       {
       
  1037 #if defined _LIBC && defined USE_IN_LIBIO
       
  1038                         char *buf;
       
  1039 
       
  1040                         __asprintf (&buf, _("\
       
  1041 %s: option `-W %s' doesn't allow an argument\n"),
       
  1042                                     argv[0], pfound->name);
       
  1043 
       
  1044                         if (_IO_fwide (stderr, 0) > 0)
       
  1045                           __fwprintf (stderr, L"%s", buf);
       
  1046                         else
       
  1047                           fputs (buf, stderr);
       
  1048 
       
  1049                         free (buf);
       
  1050 #else
       
  1051                         fprintf (stderr, _("\
       
  1052 %s: option `-W %s' doesn't allow an argument\n"),
       
  1053                                  argv[0], pfound->name);
       
  1054 #endif
       
  1055                       }
       
  1056 
       
  1057                     nextchar += strlen (nextchar);
       
  1058                     return '?';
       
  1059                   }
       
  1060               }
       
  1061             else if (pfound->has_arg == 1)
       
  1062               {
       
  1063                 if (optind < argc)
       
  1064                   optarg = argv[optind++];
       
  1065                 else
       
  1066                   {
       
  1067                     if (print_errors)
       
  1068                       {
       
  1069 #if defined _LIBC && defined USE_IN_LIBIO
       
  1070                         char *buf;
       
  1071 
       
  1072                         __asprintf (&buf, _("\
       
  1073 %s: option `%s' requires an argument\n"),
       
  1074                                     argv[0], argv[optind - 1]);
       
  1075 
       
  1076                         if (_IO_fwide (stderr, 0) > 0)
       
  1077                           __fwprintf (stderr, L"%s", buf);
       
  1078                         else
       
  1079                           fputs (buf, stderr);
       
  1080 
       
  1081                         free (buf);
       
  1082 #else
       
  1083                         fprintf (stderr,
       
  1084                                  _("%s: option `%s' requires an argument\n"),
       
  1085                                  argv[0], argv[optind - 1]);
       
  1086 #endif
       
  1087                       }
       
  1088                     nextchar += strlen (nextchar);
       
  1089                     return optstring[0] == ':' ? ':' : '?';
       
  1090                   }
       
  1091               }
       
  1092             nextchar += strlen (nextchar);
       
  1093             if (longind != NULL)
       
  1094               *longind = option_index;
       
  1095             if (pfound->flag)
       
  1096               {
       
  1097                 *(pfound->flag) = pfound->val;
       
  1098                 return 0;
       
  1099               }
       
  1100             return pfound->val;
       
  1101           }
       
  1102           nextchar = NULL;
       
  1103           return 'W';   /* Let the application handle it.   */
       
  1104       }
       
  1105     if (temp[1] == ':')
       
  1106       {
       
  1107         if (temp[2] == ':')
       
  1108           {
       
  1109             /* This is an option that accepts an argument optionally.  */
       
  1110             if (*nextchar != '\0')
       
  1111               {
       
  1112                 optarg = nextchar;
       
  1113                 optind++;
       
  1114               }
       
  1115             else
       
  1116               optarg = NULL;
       
  1117             nextchar = NULL;
       
  1118           }
       
  1119         else
       
  1120           {
       
  1121             /* This is an option that requires an argument.  */
       
  1122             if (*nextchar != '\0')
       
  1123               {
       
  1124                 optarg = nextchar;
       
  1125                 /* If we end this ARGV-element by taking the rest as an arg,
       
  1126                    we must advance to the next element now.  */
       
  1127                 optind++;
       
  1128               }
       
  1129             else if (optind == argc)
       
  1130               {
       
  1131                 if (print_errors)
       
  1132                   {
       
  1133                     /* 1003.2 specifies the format of this message.  */
       
  1134 #if defined _LIBC && defined USE_IN_LIBIO
       
  1135                     char *buf;
       
  1136 
       
  1137                     __asprintf (&buf,
       
  1138                                 _("%s: option requires an argument -- %c\n"),
       
  1139                                 argv[0], c);
       
  1140 
       
  1141                     if (_IO_fwide (stderr, 0) > 0)
       
  1142                       __fwprintf (stderr, L"%s", buf);
       
  1143                     else
       
  1144                       fputs (buf, stderr);
       
  1145 
       
  1146                     free (buf);
       
  1147 #else
       
  1148                     fprintf (stderr,
       
  1149                              _("%s: option requires an argument -- %c\n"),
       
  1150                              argv[0], c);
       
  1151 #endif
       
  1152                   }
       
  1153                 optopt = c;
       
  1154                 if (optstring[0] == ':')
       
  1155                   c = ':';
       
  1156                 else
       
  1157                   c = '?';
       
  1158               }
       
  1159             else
       
  1160               /* We already incremented `optind' once;
       
  1161                  increment it again when taking next ARGV-elt as argument.  */
       
  1162               optarg = argv[optind++];
       
  1163             nextchar = NULL;
       
  1164           }
       
  1165       }
       
  1166     return c;
       
  1167   }
       
  1168 }
       
  1169 
       
  1170 int
       
  1171 getopt (argc, argv, optstring)
       
  1172      int argc;
       
  1173      char *const *argv;
       
  1174      const char *optstring;
       
  1175 {
       
  1176   return _getopt_internal (argc, argv, optstring,
       
  1177                            (const struct option *) 0,
       
  1178                            (int *) 0,
       
  1179                            0);
       
  1180 }
       
  1181 
       
  1182 #endif  /* Not ELIDE_CODE.  */
       
  1183 
       
  1184 
       
  1185 /* Compile with -DTEST to make an executable for use in testing
       
  1186    the above definition of `getopt'.  */
       
  1187 
       
  1188 /* #define TEST */        /* Pete Wilson mod 7/28/02 */
       
  1189 #ifdef TEST
       
  1190 
       
  1191 #ifndef exit         /* Pete Wilson mod 7/28/02 */
       
  1192   int exit(int);     /* Pete Wilson mod 7/28/02 */
       
  1193 #endif               /* Pete Wilson mod 7/28/02 */
       
  1194 
       
  1195 int
       
  1196 main (argc, argv)
       
  1197      int argc;
       
  1198      char **argv;
       
  1199 {
       
  1200   int c;
       
  1201   int digit_optind = 0;
       
  1202 
       
  1203   while (1)
       
  1204     {
       
  1205       int this_option_optind = optind ? optind : 1;
       
  1206 
       
  1207       c = getopt (argc, argv, "abc:d:0123456789");
       
  1208       if (c == -1)
       
  1209         break;
       
  1210 
       
  1211       switch (c)
       
  1212         {
       
  1213         case '0':
       
  1214         case '1':
       
  1215         case '2':
       
  1216         case '3':
       
  1217         case '4':
       
  1218         case '5':
       
  1219         case '6':
       
  1220         case '7':
       
  1221         case '8':
       
  1222         case '9':
       
  1223           if (digit_optind != 0 && digit_optind != this_option_optind)
       
  1224             printf ("digits occur in two different argv-elements.\n");
       
  1225           digit_optind = this_option_optind;
       
  1226           printf ("option %c\n", c);
       
  1227           break;
       
  1228 
       
  1229         case 'a':
       
  1230           printf ("option a\n");
       
  1231           break;
       
  1232 
       
  1233         case 'b':
       
  1234           printf ("option b\n");
       
  1235           break;
       
  1236 
       
  1237         case 'c':
       
  1238           printf ("option c with value `%s'\n", optarg);
       
  1239           break;
       
  1240 
       
  1241         case '?':
       
  1242           break;
       
  1243 
       
  1244         default:
       
  1245           printf ("?? getopt returned character code 0%o ??\n", c);
       
  1246         }
       
  1247     }
       
  1248 
       
  1249   if (optind < argc)
       
  1250     {
       
  1251       printf ("non-option ARGV-elements: ");
       
  1252       while (optind < argc)
       
  1253         printf ("%s ", argv[optind++]);
       
  1254       printf ("\n");
       
  1255     }
       
  1256 
       
  1257   exit (0);
       
  1258 }
       
  1259 
       
  1260 #endif /* TEST */