diff src/ploki/opt.c @ 4223:ac0403686959

<oerjan> rm -rf src/ploki; mv ploki src
author HackBot
date Fri, 20 Dec 2013 22:18:50 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/ploki/opt.c	Fri Dec 20 22:18:50 2013 +0000
@@ -0,0 +1,51 @@
+#include "opt.h"
+
+#include <string.h>
+
+int opt_ind;
+int opt_err;
+const char *opt_arg;
+static const char *nextchar;
+
+int opt_get(int argc, char *const *argv, const char *opts) {
+	const char *p;
+
+	if (!nextchar || !*nextchar) {
+		if (opt_ind < argc)
+			++opt_ind;
+		if (opt_ind >= argc || argv[opt_ind][0] != '-' || !argv[opt_ind][1]) {
+			return -1;
+		}
+		if (argv[opt_ind][1] == '-' && argv[opt_ind][2] == '\0') {
+			++opt_ind;
+			return -1;
+		}
+		nextchar = argv[opt_ind] + 1;
+	}
+
+	if ((p = strchr(opts, *nextchar)) && (*p != ':' || p == opts)) {
+		if (p[1] == ':') {
+			if (nextchar[1]) {
+				opt_arg = nextchar + 1;
+			} else if (opt_ind + 1 >= argc) {
+				opt_arg = NULL;
+			} else {
+				opt_arg = argv[++opt_ind];
+			}
+			nextchar = NULL;
+		} else {
+			++nextchar;
+		}
+		return p[0];
+	}
+
+	opt_err = *nextchar++;
+	return '\0';
+}
+
+#if 0
+void opt_reset(void) {
+	opt_ind = 0;
+	nextchar = NULL;
+}
+#endif