#include "parser.h"
+#include "cfg/cfg_parser.h"
+
#include <io/kfile.h>
#include <struct/hashtable.h>
static const void* get_key_from_command(const void* cmd, uint8_t* length);
/// Hashtable that handles the commands that can be executed
-DECLARE_HASHTABLE_STATIC(commands, MAX_COMMANDS_NUMBER, get_key_from_command);
+DECLARE_HASHTABLE_STATIC(commands, CONFIG_MAX_COMMANDS_NUMBER, get_key_from_command);
/**
}
#endif
+/**
+ * Find the template for the command contained in the text line.
+ * The template can be used to tokenize the command and interpret
+ * it.
+ *
+ * This function can be used to find out which command is contained
+ * in a given text line without parsing all the parameters and
+ * executing it.
+ *
+ * \param input Text line to be processed (ASCIIZ)
+ *
+ * \return The command template associated with the command contained
+ * in the line, or NULL if the command is invalid.
+ */
const struct CmdTemplate* parser_get_cmd_template(const char *input)
{
const char *begin = input, *end = input;
return end;
}
-bool parser_get_cmd_arguments(const char* input, const struct CmdTemplate* cmdp, parms args[PARSER_MAX_ARGS])
+/**
+ * Extract the arguments for the command contained in the text line.
+ *
+ * The first argument will always be the command name, so the actual arguments
+ * will start at index 1.
+ *
+ * \param input Text line to be processed (ASCIIZ)
+ * \param cmdp Command template for this line
+ * \param args Will contain the extracted parameters
+ *
+ * \return True if everything OK, false in case of parsing error.
+ */
+bool parser_get_cmd_arguments(const char* input, const struct CmdTemplate* cmdp, parms args[CONFIG_PARSER_MAX_ARGS])
{
input = skip_to_params(input, cmdp);
if (!input)
return c->name;
}
+/**
+ * \brief Command input handler.
+ *
+ * Process the input, calling the requested command (if found).
+ *
+ * \param input Text line to be processed (ASCIIZ)
+ *
+ * \return true if everything is OK, false in case of errors
+ */
bool parser_process_line(const char* input)
{
const struct CmdTemplate *cmdp;
- parms args[PARSER_MAX_ARGS];
+ parms args[CONFIG_PARSER_MAX_ARGS];
cmdp = parser_get_cmd_template(input);
if (!cmdp)
return true;
}
-void parser_register_cmd(const struct CmdTemplate* cmd)
+/**
+ * Register a new command into the parser
+ *
+ * \param cmd Command template describing the command
+ * \return true if registration was successful, false otherwise
+ */
+bool parser_register_cmd(const struct CmdTemplate* cmd)
{
- ht_insert(&commands, cmd);
+ return ht_insert(&commands, cmd);
}
void parser_init(void)