#ifndef KETOPT_H
#define KETOPT_H
-#include <string.h> // for strchr() and strncmp()
+#include <string.h> /* for strchr() and strncmp() */
-#define ko_no_argument 0
+#define ko_no_argument 0
#define ko_required_argument 1
#define ko_optional_argument 2
typedef struct {
- int ind; // equivalent to optind
- int opt; // equivalent to optopt
- char *arg; // equivalent to optarg
- // private variables not intended for external uses
+ int ind; /* equivalent to optind */
+ int opt; /* equivalent to optopt */
+ char *arg; /* equivalent to optarg */
+ /* private variables not intended for external uses */
int i, pos, n_args;
} ketopt_t;
static ketopt_t KETOPT_INIT = { 1, 0, 0, 1, 0, 0 };
-static void ketopt_permute(char *argv[], int j, int n) // move argv[j] over n elements to the left
+static void ketopt_permute(char *argv[], int j, int n) /* move argv[j] over n elements to the left */
{
int k;
char *p = argv[j];
s->ind = s->i - s->n_args;
return -1;
}
- if (argv[s->i][0] == '-' && argv[s->i][1] == '-') { // "--" or a long option
- if (argv[s->i][2] == '\0') { // a bare "--"
+ if (argv[s->i][0] == '-' && argv[s->i][1] == '-') { /* "--" or a long option */
+ if (argv[s->i][2] == '\0') { /* a bare "--" */
ketopt_permute(argv, s->i, s->n_args);
++s->i, s->ind = s->i - s->n_args;
return -1;
}
s->opt = 0, opt = '?', s->pos = -1;
- if (longopts) { // parse long options
- int k, n_matches = 0, match = -1;
+ if (longopts) { /* parse long options */
+ int k, n_matches = 0;
const ko_longopt_t *o = 0;
- for (j = 2; argv[s->i][j] != '\0' && argv[s->i][j] != '='; ++j) {} // find the end of the option name
+ for (j = 2; argv[s->i][j] != '\0' && argv[s->i][j] != '='; ++j) {} /* find the end of the option name */
for (k = 0; longopts[k].name != 0; ++k)
if (strncmp(&argv[s->i][2], longopts[k].name, j - 2) == 0)
++n_matches, o = &longopts[k];
if (argv[s->i][j] == '=') s->arg = &argv[s->i][j + 1];
if (o->has_arg == 1 && argv[s->i][j] == '\0') {
if (s->i < argc - 1) s->arg = argv[++s->i];
- else opt = ':'; // missing option argument
+ else opt = ':'; /* missing option argument */
}
}
}
- } else { // a short option
+ } else { /* a short option */
char *p;
if (s->pos == 0) s->pos = 1;
opt = s->opt = argv[s->i][s->pos++];
p = strchr(ostr, opt);
if (p == 0) {
- opt = '?'; // unknown option
+ opt = '?'; /* unknown option */
} else if (p[1] == ':') {
if (argv[s->i][s->pos] == 0) {
if (s->i < argc - 1) s->arg = argv[++s->i];
- else opt = ':'; // missing option argument
+ else opt = ':'; /* missing option argument */
} else s->arg = &argv[s->i][s->pos];
s->pos = -1;
}
}
if (s->pos < 0 || argv[s->i][s->pos] == 0) {
++s->i, s->pos = 0;
- if (s->n_args > 0) // permute
+ if (s->n_args > 0) /* permute */
for (j = i0; j < s->i; ++j)
ketopt_permute(argv, j, s->n_args);
}