summaryrefslogtreecommitdiffstats
path: root/Python/getopt.c
diff options
context:
space:
mode:
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;
+}