|
|
1.1.1.4 root 1: /* getopt_long and getopt_long_only entry points for GNU getopt. 1.1.1.6 ! root 2: Copyright (C) 1987, 88, 89, 90, 91, 92, 1993, 1994 1.1.1.4 root 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 1.1.1.5 root 20: #include <config.h> 21: #endif 1.1 root 22: 23: #include "getopt.h" 24: 1.1.1.6 ! root 25: #if !defined (__STDC__) || !__STDC__ 1.1.1.5 root 26: /* This is a separate conditional since some stdc systems 27: reject `defined (const)'. */ 28: #ifndef const 1.1 root 29: #define const 30: #endif 1.1.1.5 root 31: #endif 1.1 root 32: 1.1.1.3 root 33: #include <stdio.h> 34: 1.1.1.4 root 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: 1.1.1.3 root 46: /* This needs to come after some library #include 47: to get __GNU_LIBRARY__ defined. */ 48: #ifdef __GNU_LIBRARY__ 1.1 root 49: #include <stdlib.h> 1.1.1.3 root 50: #else 1.1 root 51: char *getenv (); 1.1.1.3 root 52: #endif 1.1 root 53: 1.1.1.3 root 54: #ifndef NULL 1.1 root 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 1.1.1.3 root 72: instead. */ 1.1 root 73: 1.1.1.4 root 74: int 1.1 root 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: } 1.1.1.4 root 84: 85: 86: #endif /* _LIBC or not __GNU_LIBRARY__. */ 1.1 root 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.