diff options
Diffstat (limited to 'Python/getopt.c')
-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; +} |