Annotation of embedaddon/lrzsz/lib/getopt1.c, revision 1.1
1.1 ! misho 1: /* getopt_long and getopt_long_only entry points for GNU getopt.
! 2: Copyright (C) 1987, 88, 89, 90, 91, 92, 1993, 1994
! 3: Free Software Foundation, Inc.
! 4:
! 5: This program is free software; you can redistribute it and/or modify it
! 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.
! 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 General Public License for more details.
! 14:
! 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. */
! 18:
! 19: #ifdef HAVE_CONFIG_H
! 20: #include <config.h>
! 21: #endif
! 22:
! 23: #include "getopt.h"
! 24:
! 25: #if !defined (__STDC__) || !__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 */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>