Mercurial > repo
diff ploki/opt.c @ 4215:7a6bc310b732
<shachaf> tar xjf ploki-0.6.5.1.tar.bz2
author | HackBot |
---|---|
date | Fri, 20 Dec 2013 22:04:38 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ploki/opt.c Fri Dec 20 22:04:38 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