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