Mercurial > repo
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