|
|
1.1 ! root 1: /* getopt_long and getopt_long_only entry points for GNU getopt. ! 2: Copyright (C) 1987,88,89,90,91,92,93,94,96,97 Free Software Foundation, Inc. ! 3: ! 4: NOTE: The canonical source of this file is maintained with the GNU C Library. ! 5: Bugs can be reported to [email protected]. ! 6: ! 7: This program is free software; you can redistribute it and/or modify it ! 8: under the terms of the GNU General Public License as published by the ! 9: Free Software Foundation; either version 2, or (at your option) any ! 10: later version. ! 11: ! 12: This program is distributed in the hope that it will be useful, ! 13: but WITHOUT ANY WARRANTY; without even the implied warranty of ! 14: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! 15: GNU General Public License for more details. ! 16: ! 17: You should have received a copy of the GNU General Public License ! 18: along with this program; if not, write to the Free Software ! 19: Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, ! 20: USA. */ ! 21: ! 22: #ifdef HAVE_CONFIG_H ! 23: #include <config.h> ! 24: #endif ! 25: ! 26: #include "getopt.h" ! 27: ! 28: #if !defined (__STDC__) || !__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: #define GETOPT_INTERFACE_VERSION 2 ! 47: #if !defined (_LIBC) && defined (__GLIBC__) && __GLIBC__ >= 2 ! 48: #include <gnu-versions.h> ! 49: #if _GNU_GETOPT_INTERFACE_VERSION == GETOPT_INTERFACE_VERSION ! 50: #define ELIDE_CODE ! 51: #endif ! 52: #endif ! 53: ! 54: #ifndef ELIDE_CODE ! 55: ! 56: ! 57: /* This needs to come after some library #include ! 58: to get __GNU_LIBRARY__ defined. */ ! 59: #ifdef __GNU_LIBRARY__ ! 60: #include <stdlib.h> ! 61: #endif ! 62: ! 63: #ifndef NULL ! 64: #define NULL 0 ! 65: #endif ! 66: ! 67: int ! 68: getopt_long (argc, argv, options, long_options, opt_index) ! 69: int argc; ! 70: char *const *argv; ! 71: const char *options; ! 72: const struct option *long_options; ! 73: int *opt_index; ! 74: { ! 75: return _getopt_internal (argc, argv, options, long_options, opt_index, 0); ! 76: } ! 77: ! 78: /* Like getopt_long, but '-' as well as '--' can indicate a long option. ! 79: If an option that starts with '-' (not '--') doesn't match a long option, ! 80: but does match a short option, it is parsed as a short option ! 81: instead. */ ! 82: ! 83: int ! 84: getopt_long_only (argc, argv, options, long_options, opt_index) ! 85: int argc; ! 86: char *const *argv; ! 87: const char *options; ! 88: const struct option *long_options; ! 89: int *opt_index; ! 90: { ! 91: return _getopt_internal (argc, argv, options, long_options, opt_index, 1); ! 92: } ! 93: ! 94: ! 95: #endif /* Not ELIDE_CODE. */ ! 96: ! 97: #ifdef TEST ! 98: ! 99: #include <stdio.h> ! 100: ! 101: int ! 102: main (argc, argv) ! 103: int argc; ! 104: char **argv; ! 105: { ! 106: int c; ! 107: int digit_optind = 0; ! 108: ! 109: while (1) ! 110: { ! 111: int this_option_optind = optind ? optind : 1; ! 112: int option_index = 0; ! 113: static struct option long_options[] = ! 114: { ! 115: {"add", 1, 0, 0}, ! 116: {"append", 0, 0, 0}, ! 117: {"delete", 1, 0, 0}, ! 118: {"verbose", 0, 0, 0}, ! 119: {"create", 0, 0, 0}, ! 120: {"file", 1, 0, 0}, ! 121: {0, 0, 0, 0} ! 122: }; ! 123: ! 124: c = getopt_long (argc, argv, "abc:d:0123456789", ! 125: long_options, &option_index); ! 126: if (c == -1) ! 127: break; ! 128: ! 129: switch (c) ! 130: { ! 131: case 0: ! 132: printf ("option %s", long_options[option_index].name); ! 133: if (optarg) ! 134: printf (" with arg %s", optarg); ! 135: printf ("\n"); ! 136: break; ! 137: ! 138: case '0': ! 139: case '1': ! 140: case '2': ! 141: case '3': ! 142: case '4': ! 143: case '5': ! 144: case '6': ! 145: case '7': ! 146: case '8': ! 147: case '9': ! 148: if (digit_optind != 0 && digit_optind != this_option_optind) ! 149: printf ("digits occur in two different argv-elements.\n"); ! 150: digit_optind = this_option_optind; ! 151: printf ("option %c\n", c); ! 152: break; ! 153: ! 154: case 'a': ! 155: printf ("option a\n"); ! 156: break; ! 157: ! 158: case 'b': ! 159: printf ("option b\n"); ! 160: break; ! 161: ! 162: case 'c': ! 163: printf ("option c with value `%s'\n", optarg); ! 164: break; ! 165: ! 166: case 'd': ! 167: printf ("option d with value `%s'\n", optarg); ! 168: break; ! 169: ! 170: case '?': ! 171: break; ! 172: ! 173: default: ! 174: printf ("?? getopt returned character code 0%o ??\n", c); ! 175: } ! 176: } ! 177: ! 178: if (optind < argc) ! 179: { ! 180: printf ("non-option ARGV-elements: "); ! 181: while (optind < argc) ! 182: printf ("%s ", argv[optind++]); ! 183: printf ("\n"); ! 184: } ! 185: ! 186: exit (0); ! 187: } ! 188: ! 189: #endif /* TEST */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.