From: Guido van Rossum Date: Thu, 14 Apr 1994 14:08:22 +0000 (+0000) Subject: A getopt.c for your amusement X-Git-Tag: v1.0.2~31 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=2508ade19ea17922e1c14bae510db7c8464c67be;p=thirdparty%2FPython%2Fcpython.git A getopt.c for your amusement --- diff --git a/Python/getopt.c b/Python/getopt.c new file mode 100644 index 000000000000..0217550ad234 --- /dev/null +++ b/Python/getopt.c @@ -0,0 +1,54 @@ +/* An implementation of getopt() by Amrit Prem */ + +#include +#include + +#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; +}