From 0622c57d4261e6fdbab1849d1ac897dfa210409a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nils=20O=2E=20Sel=C3=A5sdal?= Date: Sun, 7 Dec 2014 15:39:32 +0100 Subject: [PATCH] Initial attempt --- src/cmd/cmd.c | 55 ++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 46 insertions(+), 9 deletions(-) diff --git a/src/cmd/cmd.c b/src/cmd/cmd.c index 3bf0cf4..9459958 100644 --- a/src/cmd/cmd.c +++ b/src/cmd/cmd.c @@ -1,17 +1,54 @@ #include -enum UCCmdNodeType { - UC_CMDNODE_ROOT, - UC_CMDNODE_KEYWORD, - UC_CMD-zzzzzzzzzzzzzzzz - +enum UCCmdRc { + /**Executed ok */ + UC_CMD_OK, + /**Executed with warning */ + UC_CMD_WARNING, + /*Not executed, incomplete command */ + UC_CMD_INCOMPLETE, + /*Not executed, generic error */ + UC_CMD_ERROR, }; +typedef enum UCCmdRc (*uc_cmd_handler)(int narg, char *args[]); +typedef void (*uc_cmd_write_cfg)(void); + +#define UC_CMD_FL_HIDDEN (1 << 0) + +struct UCCmdNode; +struct UCCmdDef; + +struct UCCmdSettings { + const char *name; + const char *version; + const char *boot_cfg_file; + + struct UCCmdNode *initial_node; + struct UCCmdNode *node_head; +}; struct UCCmdNode { - enum UCCmdNodeType type; - uint32_t flags; - void *param; + int id; + uc_cmd_write_cfg write_func; + struct UCCmdDef *cmd_head; //linked list of UCCmdDef struct UCCmdNode *next; - struct UCCmdNode *child; }; + +struct UCCmdDef { + const char *cmd; + const char **help; + size_t cmd_len; + uc_cmd_handler cb; + uint32_t flags; + + struct UCCmdDef *next; +}; + + +void uc_cmd_init(const char *app_name, const char *version); +int uc_cmd_read_config(const char *filename); +void uc_cmd_set_configfile(const char *filename); +void uc_cmd_add_cmd(struct UCCmdDef *cmd, int parent_node_id); +void uc_cmd_set_default_node(int node_id); +