diff options
author | Guido van Rossum <guido@python.org> | 1994-04-14 14:08:22 (GMT) |
---|---|---|
committer | Guido van Rossum <guido@python.org> | 1994-04-14 14:08:22 (GMT) |
commit | 2508ade19ea17922e1c14bae510db7c8464c67be (patch) | |
tree | a36418c36445fbcb59786193119561bc8e0b17a1 | |
parent | 26d86dba2f903ac10090e4e80173c268e728c37d (diff) | |
download | cpython-2508ade19ea17922e1c14bae510db7c8464c67be.zip cpython-2508ade19ea17922e1c14bae510db7c8464c67be.tar.gz cpython-2508ade19ea17922e1c14bae510db7c8464c67be.tar.bz2 |
A getopt.c for your amusement
-rw-r--r-- | Python/getopt.c | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/Python/getopt.c b/Python/getopt.c new file mode 100644 index 0000000..0217550 --- /dev/null +++ b/Python/getopt.c @@ -0,0 +1,54 @@ +/* An implementation of getopt() by Amrit Prem */ + +#include <stdio.h> +#include <string.h> + +#define bool int +#define TRUE 1 +#define FALSE 0 +#define EOS '\0' + +bool opterr = TRUE; /* generate error messages */ +int optind = 1; /* index into argv array */ +char * optarg = NULL; /* optional argument */ + + +int getopt(int argc, char *argv[], const char optstring[]) +{ + static char *opt_ptr = ""; + register char *ptr; + int option; + + if (*opt_ptr == EOS) { + + if (optind >= argc || argv[optind][0] != '-') + return -1; + + else if (strcmp(argv[optind], "--") == 0) { + ++optind; + return -1; + } + + opt_ptr = argv[optind++] + 1; + } + + if ((ptr = strchr(optstring, option = *opt_ptr++)) == NULL) { + if (opterr) + fprintf(stderr, "Unknown option: -%c\n", option); + + return '?'; + } + + if (*(ptr + 1) == ':') { + if (optind >= argc) { + if (opterr) + fprintf(stderr, "Argument expected for the -%c option\n", option); + + return '?'; + } + + optarg = argv[optind++]; + } + + return option; +} |