File:  [gforth] / gforth / engine / getopt1.c
Revision 1.1: download - view: text, annotated - select for diffs
Wed May 21 20:40:09 1997 UTC (24 years ago) by anton
Branches: MAIN
CVS tags: v0-4-0, HEAD
jwilke's changes:
Moved many files to other directories
renamed many files
other changes unknown to me.

    1: /* Getopt for GNU.
    2:    Copyright (C) 1987, 88, 89, 90, 91, 1992 Free Software Foundation, Inc.
    3: 
    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 Library General Public License as
    8: published by the Free Software Foundation; either version 2 of the
    9: 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: Library General Public License for more details.
   15: 
   16: You should have received a copy of the GNU Library General Public
   17: License along with the GNU C Library; see the file COPYING.LIB.  If
   18: not, write to the Free Software Foundation, Inc., 675 Mass Ave,
   19: Cambridge, MA 02139, USA.  */
   20: 
   21: #include "getopt.h"
   22: 
   23: #ifndef __STDC__
   24: #define const
   25: #endif
   26: 
   27: #if defined(STDC_HEADERS) || defined(__GNU_LIBRARY__) || defined (LIBC)
   28: #include <stdlib.h>
   29: #else /* STDC_HEADERS or __GNU_LIBRARY__ */
   30: char *getenv ();
   31: #endif /* STDC_HEADERS or __GNU_LIBRARY__ */
   32: 
   33: #ifndef	NULL
   34: #define NULL 0
   35: #endif
   36: 
   37: int
   38: getopt_long (argc, argv, options, long_options, opt_index)
   39:      int argc;
   40:      char *const *argv;
   41:      const char *options;
   42:      const struct option *long_options;
   43:      int *opt_index;
   44: {
   45:   return _getopt_internal (argc, argv, options, long_options, opt_index, 0);
   46: }
   47: 
   48: /* Like getopt_long, but '-' as well as '--' can indicate a long option.
   49:    If an option that starts with '-' (not '--') doesn't match a long option,
   50:    but does match a short option, it is parsed as a short option
   51:    instead.  */
   52: 
   53: int 
   54: getopt_long_only (argc, argv, options, long_options, opt_index)
   55:      int argc;
   56:      char *const *argv;
   57:      const char *options;
   58:      const struct option *long_options;
   59:      int *opt_index;
   60: {
   61:   return _getopt_internal (argc, argv, options, long_options, opt_index, 1);
   62: }
   63: 
   64: #ifdef TEST
   65: 
   66: #include <stdio.h>
   67: 
   68: int
   69: main (argc, argv)
   70:      int argc;
   71:      char **argv;
   72: {
   73:   int c;
   74:   int digit_optind = 0;
   75: 
   76:   while (1)
   77:     {
   78:       int this_option_optind = optind ? optind : 1;
   79:       int option_index = 0;
   80:       static struct option long_options[] =
   81:       {
   82: 	{"add", 1, 0, 0},
   83: 	{"append", 0, 0, 0},
   84: 	{"delete", 1, 0, 0},
   85: 	{"verbose", 0, 0, 0},
   86: 	{"create", 0, 0, 0},
   87: 	{"file", 1, 0, 0},
   88: 	{0, 0, 0, 0}
   89:       };
   90: 
   91:       c = getopt_long (argc, argv, "abc:d:0123456789",
   92: 		       long_options, &option_index);
   93:       if (c == EOF)
   94: 	break;
   95: 
   96:       switch (c)
   97: 	{
   98: 	case 0:
   99: 	  printf ("option %s", long_options[option_index].name);
  100: 	  if (optarg)
  101: 	    printf (" with arg %s", optarg);
  102: 	  printf ("\n");
  103: 	  break;
  104: 
  105: 	case '0':
  106: 	case '1':
  107: 	case '2':
  108: 	case '3':
  109: 	case '4':
  110: 	case '5':
  111: 	case '6':
  112: 	case '7':
  113: 	case '8':
  114: 	case '9':
  115: 	  if (digit_optind != 0 && digit_optind != this_option_optind)
  116: 	    printf ("digits occur in two different argv-elements.\n");
  117: 	  digit_optind = this_option_optind;
  118: 	  printf ("option %c\n", c);
  119: 	  break;
  120: 
  121: 	case 'a':
  122: 	  printf ("option a\n");
  123: 	  break;
  124: 
  125: 	case 'b':
  126: 	  printf ("option b\n");
  127: 	  break;
  128: 
  129: 	case 'c':
  130: 	  printf ("option c with value `%s'\n", optarg);
  131: 	  break;
  132: 
  133: 	case 'd':
  134: 	  printf ("option d with value `%s'\n", optarg);
  135: 	  break;
  136: 
  137: 	case '?':
  138: 	  break;
  139: 
  140: 	default:
  141: 	  printf ("?? getopt returned character code 0%o ??\n", c);
  142: 	}
  143:     }
  144: 
  145:   if (optind < argc)
  146:     {
  147:       printf ("non-option ARGV-elements: ");
  148:       while (optind < argc)
  149: 	printf ("%s ", argv[optind++]);
  150:       printf ("\n");
  151:     }
  152: 
  153:   exit (0);
  154: }
  155: 
  156: #endif /* TEST */

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