176 lines
3.5 KiB
C
176 lines
3.5 KiB
C
#include <blue/cmd.h>
|
|
#include <stdio.h>
|
|
|
|
enum {
|
|
CMD_TEST,
|
|
CMD_SUB,
|
|
OPT_NAME,
|
|
OPT_NAME_VALUE,
|
|
OPT_OTHER,
|
|
OPT_OTHER_VALUE,
|
|
OPT_VERBOSE,
|
|
OPT_REALLY_VERBOSE,
|
|
OPT_MODE,
|
|
OPT_MODE_VALUE,
|
|
OPT_MODE_VALUE2,
|
|
ARG_FILE,
|
|
ARG_MORE,
|
|
};
|
|
|
|
const char *text
|
|
= "No one rejects, dislikes, or avoids pleasure itself, because it is "
|
|
"pleasure, but because those who do not know how to pursue pleasure "
|
|
"rationally encounter consequences that are extremely painful. Nor "
|
|
"again is there anyone who loves or pursues or desires to obtain "
|
|
"pain of itself, because it is pain, but because occasionally "
|
|
"circumstances occur in which toil and pain can procure him some "
|
|
"great pleasure.";
|
|
|
|
static int test_command(
|
|
const b_command *self, const b_arglist *opt, const b_array *args)
|
|
{
|
|
printf("Hello, world!\n");
|
|
|
|
b_arglist_iterator it;
|
|
b_arglist_iterator_begin(
|
|
opt, B_COMMAND_INVALID_ID, B_COMMAND_INVALID_ID, &it);
|
|
while (b_arglist_iterator_is_valid(&it)) {
|
|
printf("opt:%u,arg:%u,i:%zu,value: %s\n", it.opt_id,
|
|
it.value->val_id, it.i, it.value->val_str);
|
|
|
|
b_arglist_iterator_next(&it);
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
B_COMMAND(CMD_TEST, B_COMMAND_INVALID_ID)
|
|
{
|
|
B_COMMAND_NAME("test");
|
|
B_COMMAND_DESC("A test command.");
|
|
B_COMMAND_FLAGS(B_COMMAND_SHOW_HELP_BY_DEFAULT);
|
|
B_COMMAND_FUNCTION(test_command);
|
|
|
|
B_COMMAND_OPTION(OPT_NAME)
|
|
{
|
|
B_OPTION_LONG_NAME("name");
|
|
B_OPTION_SHORT_NAME('n');
|
|
B_OPTION_DESC("The name of the data.");
|
|
B_OPTION_ARG(OPT_NAME_VALUE)
|
|
{
|
|
B_ARG_NAME("name");
|
|
B_ARG_NR_VALUES(2);
|
|
}
|
|
}
|
|
|
|
B_COMMAND_OPTION(OPT_OTHER)
|
|
{
|
|
B_OPTION_LONG_NAME("other");
|
|
B_OPTION_DESC(text);
|
|
|
|
B_OPTION_ARG(OPT_OTHER_VALUE)
|
|
{
|
|
B_ARG_NAME("value");
|
|
B_ARG_NR_VALUES(B_ARG_1_OR_MORE_VALUES);
|
|
}
|
|
}
|
|
|
|
B_COMMAND_OPTION(OPT_VERBOSE)
|
|
{
|
|
B_OPTION_LONG_NAME("verbose");
|
|
B_OPTION_SHORT_NAME('v');
|
|
B_OPTION_DESC("Show detailed log output.");
|
|
}
|
|
|
|
B_COMMAND_OPTION(OPT_REALLY_VERBOSE)
|
|
{
|
|
B_OPTION_LONG_NAME("really-verbose");
|
|
B_OPTION_SHORT_NAME('V');
|
|
B_OPTION_DESC("Show REALLY detailed log output.");
|
|
}
|
|
|
|
B_COMMAND_OPTION(OPT_MODE)
|
|
{
|
|
B_OPTION_SHORT_NAME('m');
|
|
B_OPTION_LONG_NAME("mode");
|
|
B_OPTION_DESC("modes to operate in.");
|
|
|
|
B_OPTION_ARG(OPT_MODE_VALUE)
|
|
{
|
|
B_ARG_NAME("mode");
|
|
B_ARG_NR_VALUES(1);
|
|
B_ARG_ALLOWED_VALUES("fast", "slow");
|
|
}
|
|
|
|
B_OPTION_ARG(OPT_MODE_VALUE2)
|
|
{
|
|
B_ARG_NAME("mode2");
|
|
B_ARG_NR_VALUES(1);
|
|
B_ARG_ALLOWED_VALUES("very-fast", "very-slow");
|
|
}
|
|
}
|
|
|
|
B_COMMAND_ARG(ARG_FILE)
|
|
{
|
|
B_ARG_NAME("file");
|
|
B_ARG_DESC("The file(s) to use");
|
|
B_ARG_NR_VALUES(2);
|
|
}
|
|
|
|
B_COMMAND_ARG(ARG_MORE)
|
|
{
|
|
B_ARG_NAME("more");
|
|
B_ARG_DESC("More args to use");
|
|
B_ARG_ALLOWED_VALUES("how", "wow");
|
|
B_ARG_NR_VALUES(2);
|
|
}
|
|
|
|
B_COMMAND_HELP_OPTION();
|
|
|
|
B_COMMAND_USAGE()
|
|
{
|
|
B_COMMAND_USAGE_OPT(OPT_NAME);
|
|
B_COMMAND_USAGE_ARG(ARG_FILE);
|
|
B_COMMAND_USAGE_ARG(ARG_MORE);
|
|
}
|
|
}
|
|
|
|
B_COMMAND(CMD_SUB, CMD_TEST)
|
|
{
|
|
B_COMMAND_NAME("sub");
|
|
B_COMMAND_LONG_NAME("sub");
|
|
B_COMMAND_SHORT_NAME('S');
|
|
B_COMMAND_DESC("A test subcommand");
|
|
B_COMMAND_FLAGS(B_COMMAND_SHOW_HELP_BY_DEFAULT);
|
|
B_COMMAND_FUNCTION(test_command);
|
|
|
|
B_COMMAND_OPTION(OPT_NAME)
|
|
{
|
|
B_OPTION_LONG_NAME("name");
|
|
B_OPTION_SHORT_NAME('n');
|
|
B_OPTION_DESC("The name of the data");
|
|
B_OPTION_ARG(OPT_NAME_VALUE)
|
|
{
|
|
B_ARG_NAME("name");
|
|
}
|
|
}
|
|
|
|
B_COMMAND_OPTION(OPT_OTHER)
|
|
{
|
|
B_OPTION_LONG_NAME("other");
|
|
B_OPTION_SHORT_NAME('o');
|
|
B_OPTION_DESC("The other argument");
|
|
B_OPTION_ARG(OPT_OTHER_VALUE)
|
|
{
|
|
B_ARG_NAME("value");
|
|
}
|
|
}
|
|
|
|
B_COMMAND_HELP_OPTION();
|
|
}
|
|
|
|
int main(int argc, const char **argv)
|
|
{
|
|
return b_command_dispatch(CMD_TEST, argc, argv);
|
|
}
|