Files
fx/test/cmd/example.c

176 lines
3.6 KiB
C
Raw Normal View History

2026-03-16 10:35:43 +00:00
#include <fx/cmd.h>
2024-10-24 21:32:28 +01:00
#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(
2026-03-16 10:35:43 +00:00
const fx_command *self, const fx_arglist *opt, const fx_array *args)
2024-10-24 21:32:28 +01:00
{
printf("Hello, world!\n");
2026-03-16 10:35:43 +00:00
fx_arglist_iterator it;
fx_arglist_iterator_begin(
opt, FX_COMMAND_INVALID_ID, FX_COMMAND_INVALID_ID, &it);
while (fx_arglist_iterator_is_valid(&it)) {
2024-10-24 21:32:28 +01:00
printf("opt:%u,arg:%u,i:%zu,value: %s\n", it.opt_id,
it.value->val_id, it.i, it.value->val_str);
2026-03-16 10:35:43 +00:00
fx_arglist_iterator_next(&it);
2024-10-24 21:32:28 +01:00
}
return 0;
}
2026-03-16 10:35:43 +00:00
FX_COMMAND(CMD_TEST, FX_COMMAND_INVALID_ID)
2024-10-24 21:32:28 +01:00
{
2026-03-16 10:35:43 +00:00
FX_COMMAND_NAME("test");
FX_COMMAND_DESC("A test command.");
FX_COMMAND_FLAGS(FX_COMMAND_SHOW_HELP_BY_DEFAULT);
FX_COMMAND_FUNCTION(test_command);
2024-10-24 21:32:28 +01:00
2026-03-16 10:35:43 +00:00
FX_COMMAND_OPTION(OPT_NAME)
2024-10-24 21:32:28 +01:00
{
2026-03-16 10:35:43 +00:00
FX_OPTION_LONG_NAME("name");
FX_OPTION_SHORT_NAME('n');
FX_OPTION_DESC("The name of the data.");
FX_OPTION_ARG(OPT_NAME_VALUE)
2024-10-24 21:32:28 +01:00
{
2026-03-16 10:35:43 +00:00
FX_ARG_NAME("name");
FX_ARG_NR_VALUES(2);
2024-10-24 21:32:28 +01:00
}
}
2026-03-16 10:35:43 +00:00
FX_COMMAND_OPTION(OPT_OTHER)
2024-10-24 21:32:28 +01:00
{
2026-03-16 10:35:43 +00:00
FX_OPTION_LONG_NAME("other");
FX_OPTION_DESC(text);
2024-10-24 21:32:28 +01:00
2026-03-16 10:35:43 +00:00
FX_OPTION_ARG(OPT_OTHER_VALUE)
2024-10-24 21:32:28 +01:00
{
2026-03-16 10:35:43 +00:00
FX_ARG_NAME("value");
FX_ARG_NR_VALUES(FX_ARG_1_OR_MORE_VALUES);
2024-10-24 21:32:28 +01:00
}
}
2026-03-16 10:35:43 +00:00
FX_COMMAND_OPTION(OPT_VERBOSE)
2024-10-24 21:32:28 +01:00
{
2026-03-16 10:35:43 +00:00
FX_OPTION_LONG_NAME("verbose");
FX_OPTION_SHORT_NAME('v');
FX_OPTION_DESC("Show detailed log output.");
2024-10-24 21:32:28 +01:00
}
2026-03-16 10:35:43 +00:00
FX_COMMAND_OPTION(OPT_REALLY_VERBOSE)
2024-10-24 21:32:28 +01:00
{
2026-03-16 10:35:43 +00:00
FX_OPTION_LONG_NAME("really-verbose");
FX_OPTION_SHORT_NAME('V');
FX_OPTION_DESC("Show REALLY detailed log output.");
2024-10-24 21:32:28 +01:00
}
2026-03-16 10:35:43 +00:00
FX_COMMAND_OPTION(OPT_MODE)
2024-10-24 21:32:28 +01:00
{
2026-03-16 10:35:43 +00:00
FX_OPTION_SHORT_NAME('m');
FX_OPTION_LONG_NAME("mode");
FX_OPTION_DESC("modes to operate in.");
2024-10-24 21:32:28 +01:00
2026-03-16 10:35:43 +00:00
FX_OPTION_ARG(OPT_MODE_VALUE)
2024-10-24 21:32:28 +01:00
{
2026-03-16 10:35:43 +00:00
FX_ARG_NAME("mode");
FX_ARG_NR_VALUES(1);
FX_ARG_ALLOWED_VALUES("fast", "slow");
2024-10-24 21:32:28 +01:00
}
2026-03-16 10:35:43 +00:00
FX_OPTION_ARG(OPT_MODE_VALUE2)
2024-10-24 21:32:28 +01:00
{
2026-03-16 10:35:43 +00:00
FX_ARG_NAME("mode2");
FX_ARG_NR_VALUES(1);
FX_ARG_ALLOWED_VALUES("very-fast", "very-slow");
2024-10-24 21:32:28 +01:00
}
}
2026-03-16 10:35:43 +00:00
FX_COMMAND_ARG(ARG_FILE)
2024-10-24 21:32:28 +01:00
{
2026-03-16 10:35:43 +00:00
FX_ARG_NAME("file");
FX_ARG_DESC("The file(s) to use");
FX_ARG_NR_VALUES(2);
2024-10-24 21:32:28 +01:00
}
2026-03-16 10:35:43 +00:00
FX_COMMAND_ARG(ARG_MORE)
2024-10-24 21:32:28 +01:00
{
2026-03-16 10:35:43 +00:00
FX_ARG_NAME("more");
FX_ARG_DESC("More args to use");
FX_ARG_ALLOWED_VALUES("how", "wow");
FX_ARG_NR_VALUES(2);
2024-10-24 21:32:28 +01:00
}
2026-03-16 10:35:43 +00:00
FX_COMMAND_HELP_OPTION();
2024-10-24 21:32:28 +01:00
2026-03-16 10:35:43 +00:00
FX_COMMAND_USAGE()
2024-10-24 21:32:28 +01:00
{
2026-03-16 10:35:43 +00:00
FX_COMMAND_USAGE_OPT(OPT_NAME);
FX_COMMAND_USAGE_ARG(ARG_FILE);
FX_COMMAND_USAGE_ARG(ARG_MORE);
2024-10-24 21:32:28 +01:00
}
}
2026-03-16 10:35:43 +00:00
FX_COMMAND(CMD_SUB, CMD_TEST)
2024-10-24 21:32:28 +01:00
{
2026-03-16 10:35:43 +00:00
FX_COMMAND_NAME("sub");
FX_COMMAND_LONG_NAME("sub");
FX_COMMAND_SHORT_NAME('S');
FX_COMMAND_DESC("A test subcommand");
FX_COMMAND_FLAGS(FX_COMMAND_SHOW_HELP_BY_DEFAULT);
FX_COMMAND_FUNCTION(test_command);
FX_COMMAND_OPTION(OPT_NAME)
2024-10-24 21:32:28 +01:00
{
2026-03-16 10:35:43 +00:00
FX_OPTION_LONG_NAME("name");
FX_OPTION_SHORT_NAME('n');
FX_OPTION_DESC("The name of the data");
FX_OPTION_ARG(OPT_NAME_VALUE)
2024-10-24 21:32:28 +01:00
{
2026-03-16 10:35:43 +00:00
FX_ARG_NAME("name");
2024-10-24 21:32:28 +01:00
}
}
2026-03-16 10:35:43 +00:00
FX_COMMAND_OPTION(OPT_OTHER)
2024-10-24 21:32:28 +01:00
{
2026-03-16 10:35:43 +00:00
FX_OPTION_LONG_NAME("other");
FX_OPTION_SHORT_NAME('o');
FX_OPTION_DESC("The other argument");
FX_OPTION_ARG(OPT_OTHER_VALUE)
2024-10-24 21:32:28 +01:00
{
2026-03-16 10:35:43 +00:00
FX_ARG_NAME("value");
2024-10-24 21:32:28 +01:00
}
}
2026-03-16 10:35:43 +00:00
FX_COMMAND_HELP_OPTION();
2024-10-24 21:32:28 +01:00
}
int main(int argc, const char **argv)
{
2026-03-16 10:35:43 +00:00
return fx_command_dispatch(CMD_TEST, argc, argv);
2024-10-24 21:32:28 +01:00
}