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