summaryrefslogtreecommitdiffstats
path: root/Python/getopt.c
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>1994-04-14 14:08:22 (GMT)
committerGuido van Rossum <guido@python.org>1994-04-14 14:08:22 (GMT)
commit2508ade19ea17922e1c14bae510db7c8464c67be (patch)
treea36418c36445fbcb59786193119561bc8e0b17a1 /Python/getopt.c
parent26d86dba2f903ac10090e4e80173c268e728c37d (diff)
downloadcpython-2508ade19ea17922e1c14bae510db7c8464c67be.zip
cpython-2508ade19ea17922e1c14bae510db7c8464c67be.tar.gz
cpython-2508ade19ea17922e1c14bae510db7c8464c67be.tar.bz2
A getopt.c for your amusement
Diffstat (limited to 'Python/getopt.c')
-rw-r--r--Python/getopt.c54
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;
+}