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