diff --git a/cmd/command.c b/cmd/command.c index 8cdafa9..a492ef8 100644 --- a/cmd/command.c +++ b/cmd/command.c @@ -282,6 +282,24 @@ struct b_command_usage *b_command_add_usage(struct b_command *cmd) return usage; } +const struct b_command_option *b_command_get_option( + const struct b_command *cmd, int id) +{ + struct b_queue_entry *cur = b_queue_first(&cmd->b_opt); + while (cur) { + const struct b_command_option *opt + = b_unbox(struct b_command_option, cur, opt_entry); + + if (opt->opt_id == id) { + return opt; + } + + cur = b_queue_next(cur); + } + + return NULL; +} + b_status b_command_usage_add_option( struct b_command_usage *usage, struct b_command_option *opt) { @@ -335,9 +353,9 @@ b_status b_command_usage_add_command(b_command_usage *usage, unsigned int cmd_id static void prepend_command_name(struct b_command *cmd, b_string *out) { int nr_names = 0; - cmd->b_name&& nr_names++; - cmd->b_long_name&& nr_names++; - cmd->b_short_name&& nr_names++; + cmd->b_name &&nr_names++; + cmd->b_long_name &&nr_names++; + cmd->b_short_name &&nr_names++; if (nr_names > 1) { b_string_prepend_cstr(out, "}"); diff --git a/cmd/include/blue/cmd.h b/cmd/include/blue/cmd.h index 476ae57..f769854 100644 --- a/cmd/include/blue/cmd.h +++ b/cmd/include/blue/cmd.h @@ -61,6 +61,12 @@ this_opt = opt_##id; \ if (this_opt) +#define B_COMMAND_OPTION_GEN(id) \ + b_command_option *z__b_unique_name() \ + = b_command_add_option(this_cmd, (id)); \ + this_opt = z__b_unique_name(); \ + if (this_opt) + #define B_COMMAND_HELP_OPTION() \ do { \ b_command_option *opt \ @@ -210,6 +216,11 @@ BLUE_API b_command_option *b_command_add_option(b_command *cmd, int id); BLUE_API b_command_arg *b_command_add_arg(b_command *cmd, int id); BLUE_API b_command_usage *b_command_add_usage(b_command *cmd); +BLUE_API const b_command_option *b_command_get_option(const b_command *cmd, int id); + +BLUE_API const char *b_command_option_get_long_name(const b_command_option *opt); +BLUE_API char b_command_option_get_short_name(const b_command_option *opt); +BLUE_API const char *b_command_option_get_description(b_command_option *opt); BLUE_API b_status b_command_option_set_long_name( b_command_option *opt, const char *name); BLUE_API b_status b_command_option_set_short_name(b_command_option *opt, char name); diff --git a/cmd/option.c b/cmd/option.c index 7fa3ee8..acc814e 100644 --- a/cmd/option.c +++ b/cmd/option.c @@ -42,6 +42,21 @@ void b_command_option_destroy(struct b_command_option *opt) free(opt); } +const char *b_command_option_get_long_name(const struct b_command_option *opt) +{ + return opt->opt_long_name; +} + +char b_command_option_get_short_name(const struct b_command_option *opt) +{ + return opt->opt_short_name; +} + +const char *b_command_option_get_description(struct b_command_option *opt) +{ + return opt->opt_description; +} + b_status b_command_option_set_long_name( struct b_command_option *opt, const char *name) {