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