diff options
author | Guido van Rossum <guido@python.org> | 1994-04-28 12:33:58 (GMT) |
---|---|---|
committer | Guido van Rossum <guido@python.org> | 1994-04-28 12:33:58 (GMT) |
commit | 871b805a04af274197f76993b8e17df75f6240a4 (patch) | |
tree | ca4eee9d6a2c51dbd95e7368ae3c3fd765889530 | |
parent | a83d954912dfc0d3bb938da234677f410bc35030 (diff) | |
download | cpython-871b805a04af274197f76993b8e17df75f6240a4.zip cpython-871b805a04af274197f76993b8e17df75f6240a4.tar.gz cpython-871b805a04af274197f76993b8e17df75f6240a4.tar.bz2 |
New version handles -o<string> same as -o <string>
-rw-r--r-- | Python/getopt.c | 93 |
1 files changed, 62 insertions, 31 deletions
diff --git a/Python/getopt.c b/Python/getopt.c index 0217550..e1ec698 100644 --- a/Python/getopt.c +++ b/Python/getopt.c @@ -1,12 +1,36 @@ -/* An implementation of getopt() by Amrit Prem */ +/*---------------------------------------------------------------------------* + * <RCS keywords> + * + * C++ Library + * + * Copyright 1992-1994, David Gottner + * + * All Rights Reserved + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose and without fee is hereby granted, + * provided that the above copyright notice, this permission notice and + * the following disclaimer notice appear unmodified in all copies. + * + * I DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL I + * BE LIABLE FOR ANY SPECIAL, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY + * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA, OR PROFITS, WHETHER + * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT + * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + * Nevertheless, I would like to know about bugs in this library or + * suggestions for improvment. Send bug reports and feedback to + * davegottner@delphi.com. + *---------------------------------------------------------------------------*/ #include <stdio.h> #include <string.h> -#define bool int -#define TRUE 1 -#define FALSE 0 -#define EOS '\0' +#define bool int +#define TRUE 1 +#define FALSE 0 + bool opterr = TRUE; /* generate error messages */ int optind = 1; /* index into argv array */ @@ -15,40 +39,47 @@ char * optarg = NULL; /* optional argument */ int getopt(int argc, char *argv[], const char optstring[]) { - static char *opt_ptr = ""; - register char *ptr; - int option; + static char *opt_ptr = ""; + register char *ptr; + int option; - if (*opt_ptr == EOS) { + if (*opt_ptr == '\0') { - if (optind >= argc || argv[optind][0] != '-') - return -1; + if (optind >= argc || argv[optind][0] != '-') + return -1; - else if (strcmp(argv[optind], "--") == 0) { - ++optind; - return -1; - } + else if (strcmp(argv[optind], "--") == 0) { + ++optind; + return -1; + } - opt_ptr = argv[optind++] + 1; - } + opt_ptr = &argv[optind++][1]; + } - if ((ptr = strchr(optstring, option = *opt_ptr++)) == NULL) { - if (opterr) - fprintf(stderr, "Unknown option: -%c\n", option); + if ((ptr = strchr(optstring, option = *opt_ptr++)) == NULL) { + if (opterr) + fprintf(stderr, "Unknown option: -%c\n", option); - return '?'; - } + return '?'; + } - if (*(ptr + 1) == ':') { - if (optind >= argc) { - if (opterr) - fprintf(stderr, "Argument expected for the -%c option\n", option); + if (*(ptr + 1) == ':') { + if (*opt_ptr != '\0') { + optarg = opt_ptr; + opt_ptr = ""; + } - return '?'; - } + else { + if (optind >= argc) { + if (opterr) + fprintf(stderr, + "Argument expected for the -%c option\n", option); + return '?'; + } - optarg = argv[optind++]; - } + optarg = argv[optind++]; + } + } - return option; + return option; } |