|
|
1.1 ! root 1: /* Getopt for GNU. ! 2: Copyright (C) 1987, 88, 89, 90, 91, 1992 Free Software Foundation, Inc. ! 3: ! 4: This program is free software; you can redistribute it and/or modify ! 5: it under the terms of the GNU General Public License as published by ! 6: the Free Software Foundation; either version 2, or (at your option) ! 7: any later version. ! 8: ! 9: This program is distributed in the hope that it will be useful, ! 10: but WITHOUT ANY WARRANTY; without even the implied warranty of ! 11: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! 12: GNU General Public License for more details. ! 13: ! 14: You should have received a copy of the GNU General Public License ! 15: along with this program; if not, write to the Free Software ! 16: Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ ! 17: ! 18: #ifdef LIBC ! 19: /* For when compiled as part of the GNU C library. */ ! 20: #include <ansidecl.h> ! 21: #endif ! 22: ! 23: #include "getopt.h" ! 24: ! 25: #ifndef __STDC__ ! 26: #define const ! 27: #endif ! 28: ! 29: #if defined(STDC_HEADERS) || defined(__GNU_LIBRARY__) || defined (LIBC) ! 30: #include <stdlib.h> ! 31: #else /* STDC_HEADERS or __GNU_LIBRARY__ */ ! 32: char *getenv (); ! 33: #endif /* STDC_HEADERS or __GNU_LIBRARY__ */ ! 34: ! 35: #if !defined (NULL) ! 36: #define NULL 0 ! 37: #endif ! 38: ! 39: int ! 40: getopt_long (argc, argv, options, long_options, opt_index) ! 41: int argc; ! 42: char *const *argv; ! 43: const char *options; ! 44: const struct option *long_options; ! 45: int *opt_index; ! 46: { ! 47: return _getopt_internal (argc, argv, options, long_options, opt_index, 0); ! 48: } ! 49: ! 50: /* Like getopt_long, but '-' as well as '--' can indicate a long option. ! 51: If an option that starts with '-' (not '--') doesn't match a long option, ! 52: but does match a short option, it is parsed as a short option ! 53: instead. */ ! 54: ! 55: int ! 56: getopt_long_only (argc, argv, options, long_options, opt_index) ! 57: int argc; ! 58: char *const *argv; ! 59: const char *options; ! 60: const struct option *long_options; ! 61: int *opt_index; ! 62: { ! 63: return _getopt_internal (argc, argv, options, long_options, opt_index, 1); ! 64: } ! 65: ! 66: #ifdef TEST ! 67: ! 68: #include <stdio.h> ! 69: ! 70: int ! 71: main (argc, argv) ! 72: int argc; ! 73: char **argv; ! 74: { ! 75: int c; ! 76: int digit_optind = 0; ! 77: ! 78: while (1) ! 79: { ! 80: int this_option_optind = optind ? optind : 1; ! 81: int option_index = 0; ! 82: static struct option long_options[] = ! 83: { ! 84: {"add", 1, 0, 0}, ! 85: {"append", 0, 0, 0}, ! 86: {"delete", 1, 0, 0}, ! 87: {"verbose", 0, 0, 0}, ! 88: {"create", 0, 0, 0}, ! 89: {"file", 1, 0, 0}, ! 90: {0, 0, 0, 0} ! 91: }; ! 92: ! 93: c = getopt_long (argc, argv, "abc:d:0123456789", ! 94: long_options, &option_index); ! 95: if (c == EOF) ! 96: break; ! 97: ! 98: switch (c) ! 99: { ! 100: case 0: ! 101: printf ("option %s", long_options[option_index].name); ! 102: if (optarg) ! 103: printf (" with arg %s", optarg); ! 104: printf ("\n"); ! 105: break; ! 106: ! 107: case '0': ! 108: case '1': ! 109: case '2': ! 110: case '3': ! 111: case '4': ! 112: case '5': ! 113: case '6': ! 114: case '7': ! 115: case '8': ! 116: case '9': ! 117: if (digit_optind != 0 && digit_optind != this_option_optind) ! 118: printf ("digits occur in two different argv-elements.\n"); ! 119: digit_optind = this_option_optind; ! 120: printf ("option %c\n", c); ! 121: break; ! 122: ! 123: case 'a': ! 124: printf ("option a\n"); ! 125: break; ! 126: ! 127: case 'b': ! 128: printf ("option b\n"); ! 129: break; ! 130: ! 131: case 'c': ! 132: printf ("option c with value `%s'\n", optarg); ! 133: break; ! 134: ! 135: case 'd': ! 136: printf ("option d with value `%s'\n", optarg); ! 137: break; ! 138: ! 139: case '?': ! 140: break; ! 141: ! 142: default: ! 143: printf ("?? getopt returned character code 0%o ??\n", c); ! 144: } ! 145: } ! 146: ! 147: if (optind < argc) ! 148: { ! 149: printf ("non-option ARGV-elements: "); ! 150: while (optind < argc) ! 151: printf ("%s ", argv[optind++]); ! 152: printf ("\n"); ! 153: } ! 154: ! 155: exit (0); ! 156: } ! 157: ! 158: #endif /* TEST */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.