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