File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / lrzsz / lib / getopt1.c
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Thu Oct 24 15:49:50 2019 UTC (4 years, 11 months ago) by misho
Branches: lrzsz, MAIN
CVS tags: v0_12_20p5, HEAD
lrzsz ver 0.12.20

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

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>