#pragma once struct cmd { const char *cmd; const char *desc; void (* exec)(FILE *out, const char **argv, size_t argc); }; struct shell { char line[128]; struct cmd *cmds; const char *prompt; struct usart_console *con; FILE *fp; }; size_t count_args(const char *line); char **parse_args(const char *line, size_t *argc); void cmd_exec(struct cmd *cmds, FILE *out, const char **argv, size_t argc); void cmd_parse(struct cmd *cmds, FILE *out, const char *line); int shell_init(struct shell *shell, struct cmd *cmds, struct usart_console *con, const char *prompt); int shell_parse(struct shell *shell); void do_flash_cmd(FILE *out, const char **argv, size_t argc); void do_ftl_cmd(FILE *out, const char **argv, size_t argc); void do_mufs_cmd(FILE *out, const char **argv, size_t argc);