1/* Getopt for GNU.
2   Copyright (C) 1987, 88, 89, 90, 91, 1992 Free Software Foundation, Inc.
3
4   This program is free software; you can redistribute it and/or modify it
5   under the terms of the GNU General Public License as published by the
6   Free Software Foundation; either version 2, or (at your option) any
7   later version.
8
9   This program is distributed in the hope that it will be useful,
10   but WITHOUT ANY WARRANTY; without even the implied warranty of
11   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12   GNU General Public License for more details.
13
14   You should have received a copy of the GNU General Public License
15   along with this program; if not, write to the Free Software
16   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
17
18   This file was modified slightly by Ian Lance Taylor, June 1992, for
19   Taylor UUCP.  */
20
21#include "uucp.h"
22
23#include "getopt.h"
24
25int
26getopt_long (argc, argv, options, long_options, opt_index)
27     int argc;
28     char *const *argv;
29     const char *options;
30     const struct option *long_options;
31     int *opt_index;
32{
33  return _getopt_internal (argc, argv, options, long_options, opt_index, 0);
34}
35
36/* Like getopt_long, but '-' as well as '--' can indicate a long option.
37   If an option that starts with '-' (not '--') doesn't match a long option,
38   but does match a short option, it is parsed as a short option
39   instead.  */
40
41int
42getopt_long_only (argc, argv, options, long_options, opt_index)
43     int argc;
44     char *const *argv;
45     const char *options;
46     const struct option *long_options;
47     int *opt_index;
48{
49  return _getopt_internal (argc, argv, options, long_options, opt_index, 1);
50}
51
52#ifdef TEST
53
54#include <stdio.h>
55
56int
57main (argc, argv)
58     int argc;
59     char **argv;
60{
61  int c;
62  int digit_optind = 0;
63
64  while (1)
65    {
66      int this_option_optind = optind ? optind : 1;
67      int option_index = 0;
68      static struct option long_options[] =
69      {
70	{"add", 1, 0, 0},
71	{"append", 0, 0, 0},
72	{"delete", 1, 0, 0},
73	{"verbose", 0, 0, 0},
74	{"create", 0, 0, 0},
75	{"file", 1, 0, 0},
76	{0, 0, 0, 0}
77      };
78
79      c = getopt_long (argc, argv, "abc:d:0123456789",
80		       long_options, &option_index);
81      if (c == EOF)
82	break;
83
84      switch (c)
85	{
86	case 0:
87	  printf ("option %s", long_options[option_index].name);
88	  if (optarg)
89	    printf (" with arg %s", optarg);
90	  printf ("\n");
91	  break;
92
93	case '0':
94	case '1':
95	case '2':
96	case '3':
97	case '4':
98	case '5':
99	case '6':
100	case '7':
101	case '8':
102	case '9':
103	  if (digit_optind != 0 && digit_optind != this_option_optind)
104	    printf ("digits occur in two different argv-elements.\n");
105	  digit_optind = this_option_optind;
106	  printf ("option %c\n", c);
107	  break;
108
109	case 'a':
110	  printf ("option a\n");
111	  break;
112
113	case 'b':
114	  printf ("option b\n");
115	  break;
116
117	case 'c':
118	  printf ("option c with value `%s'\n", optarg);
119	  break;
120
121	case 'd':
122	  printf ("option d with value `%s'\n", optarg);
123	  break;
124
125	case '?':
126	  break;
127
128	default:
129	  printf ("?? getopt returned character code 0%o ??\n", c);
130	}
131    }
132
133  if (optind < argc)
134    {
135      printf ("non-option ARGV-elements: ");
136      while (optind < argc)
137	printf ("%s ", argv[optind++]);
138      printf ("\n");
139    }
140
141  exit (0);
142}
143
144#endif /* TEST */
145