help: re-implement 'help' independent from tree of struct command
[fw/openocd] / src / helper / command.h
index 9a04e9fa100b1ceb10f3bb489164f8119128a3bf..db095972af3725fa0921ad90799408cfa4572ce2 100644 (file)
@@ -26,6 +26,7 @@
 #include <stdbool.h>
 #include <jim-nvp.h>
 
+#include <helper/list.h>
 #include <helper/types.h>
 
 /* To achieve C99 printf compatibility in MinGW, gnu_printf should be
@@ -41,6 +42,7 @@ enum command_mode {
        COMMAND_EXEC,
        COMMAND_CONFIG,
        COMMAND_ANY,
+       COMMAND_UNKNOWN = -1, /* error condition */
 };
 
 struct command_context;
@@ -64,6 +66,7 @@ struct command_context {
                 */
        command_output_handler_t output_handler;
        void *output_handler_priv;
+       struct list_head *help_list;
 };
 
 struct command;
@@ -179,8 +182,6 @@ typedef __COMMAND_HANDLER((*command_handler_t));
 
 struct command {
        char *name;
-       char *help;
-       char *usage;
        struct command *parent;
        struct command *children;
        command_handler_t handler;
@@ -316,6 +317,14 @@ static inline int register_commands_with_data(struct command_context *cmd_ctx,
 int unregister_all_commands(struct command_context *cmd_ctx,
                struct command *parent);
 
+/**
+ * Unregisters the help for all commands. Used at exit to remove the help
+ * added through the commands 'add_help_text' and 'add_usage_text'.
+ * @param cmd_ctx The context that will be cleared of registered helps.
+ * @returns ERROR_OK on success, or an error code.
+ */
+int help_del_all_commands(struct command_context *cmd_ctx);
+
 void command_set_output_handler(struct command_context *context,
                command_output_handler_t output_handler, void *priv);