diff options
| author | Andrey A. Chernov <ache@FreeBSD.org> | 2002-06-08 07:47:23 +0000 | 
|---|---|---|
| committer | Andrey A. Chernov <ache@FreeBSD.org> | 2002-06-08 07:47:23 +0000 | 
| commit | ef8c5d6dc124fdfd69aca6ecc0f621f0bd566d8c (patch) | |
| tree | df6286a6fcf07f34f9d04f5eb0fb2d7fa679a09c /contrib/gnu-sort/lib/getopt1.c | |
Diffstat (limited to 'contrib/gnu-sort/lib/getopt1.c')
| -rw-r--r-- | contrib/gnu-sort/lib/getopt1.c | 182 | 
1 files changed, 182 insertions, 0 deletions
diff --git a/contrib/gnu-sort/lib/getopt1.c b/contrib/gnu-sort/lib/getopt1.c new file mode 100644 index 0000000000000..3d068e998b5b3 --- /dev/null +++ b/contrib/gnu-sort/lib/getopt1.c @@ -0,0 +1,182 @@ +/* getopt_long and getopt_long_only entry points for GNU getopt. +   Copyright (C) 1987, 88, 89, 90, 91, 92, 1993, 1994 +	Free Software Foundation, Inc. + +   This program is free software; you can redistribute it and/or modify it +   under the terms of the GNU General Public License as published by the +   Free Software Foundation; either version 2, or (at your option) any +   later version. + +   This program is distributed in the hope that it will be useful, +   but WITHOUT ANY WARRANTY; without even the implied warranty of +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +   GNU General Public License for more details. + +   You should have received a copy of the GNU General Public License +   along with this program; if not, write to the Free Software +   Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */ + +/* $FreeBSD$ */ + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +#include "getopt.h" + +#if !defined (__STDC__) || !__STDC__ +/* This is a separate conditional since some stdc systems +   reject `defined (const)'.  */ +#ifndef const +#define const +#endif +#endif + +#include <stdio.h> + +/* Comment out all this code if we are using the GNU C Library, and are not +   actually compiling the library itself.  This code is part of the GNU C +   Library, but also included in many other GNU distributions.  Compiling +   and linking in this code is a waste when using the GNU C library +   (especially if it is a shared library).  Rather than having every GNU +   program understand `configure --with-gnu-libc' and omit the object files, +   it is simpler to just do this in the source for each such file.  */ + +#if defined (_LIBC) || !defined (__GNU_LIBRARY__) + + +/* This needs to come after some library #include +   to get __GNU_LIBRARY__ defined.  */ +#ifdef __GNU_LIBRARY__ +#include <stdlib.h> +#else +char *getenv (); +#endif + +#ifndef	NULL +#define NULL 0 +#endif + +int +getopt_long (argc, argv, options, long_options, opt_index) +     int argc; +     char *const *argv; +     const char *options; +     const struct option *long_options; +     int *opt_index; +{ +  return _getopt_internal (argc, argv, options, long_options, opt_index, 0); +} + +/* Like getopt_long, but '-' as well as '--' can indicate a long option. +   If an option that starts with '-' (not '--') doesn't match a long option, +   but does match a short option, it is parsed as a short option +   instead.  */ + +int +getopt_long_only (argc, argv, options, long_options, opt_index) +     int argc; +     char *const *argv; +     const char *options; +     const struct option *long_options; +     int *opt_index; +{ +  return _getopt_internal (argc, argv, options, long_options, opt_index, 1); +} + + +#endif	/* _LIBC or not __GNU_LIBRARY__.  */ + +#ifdef TEST + +#include <stdio.h> + +int +main (argc, argv) +     int argc; +     char **argv; +{ +  int c; +  int digit_optind = 0; + +  while (1) +    { +      int this_option_optind = optind ? optind : 1; +      int option_index = 0; +      static struct option long_options[] = +      { +	{"add", 1, 0, 0}, +	{"append", 0, 0, 0}, +	{"delete", 1, 0, 0}, +	{"verbose", 0, 0, 0}, +	{"create", 0, 0, 0}, +	{"file", 1, 0, 0}, +	{0, 0, 0, 0} +      }; + +      c = getopt_long (argc, argv, "abc:d:0123456789", +		       long_options, &option_index); +      if (c == EOF) +	break; + +      switch (c) +	{ +	case 0: +	  printf ("option %s", long_options[option_index].name); +	  if (optarg) +	    printf (" with arg %s", optarg); +	  printf ("\n"); +	  break; + +	case '0': +	case '1': +	case '2': +	case '3': +	case '4': +	case '5': +	case '6': +	case '7': +	case '8': +	case '9': +	  if (digit_optind != 0 && digit_optind != this_option_optind) +	    printf ("digits occur in two different argv-elements.\n"); +	  digit_optind = this_option_optind; +	  printf ("option %c\n", c); +	  break; + +	case 'a': +	  printf ("option a\n"); +	  break; + +	case 'b': +	  printf ("option b\n"); +	  break; + +	case 'c': +	  printf ("option c with value `%s'\n", optarg); +	  break; + +	case 'd': +	  printf ("option d with value `%s'\n", optarg); +	  break; + +	case '?': +	  break; + +	default: +	  printf ("?? getopt returned character code 0%o ??\n", c); +	} +    } + +  if (optind < argc) +    { +      printf ("non-option ARGV-elements: "); +      while (optind < argc) +	printf ("%s ", argv[optind++]); +      printf ("\n"); +    } + +  exit (0); +} + +#endif /* TEST */  | 
