Update preset.
[bertos.git] / bertos / mware / parser.h
index 7e837c60f32c48a71a3c86331f8d57a43b29254c..ca7a7a2891f9fe627776fce6b6b85962587f54e7 100644 (file)
@@ -70,8 +70,8 @@
  * // Declare a buzzer command
  * MAKE_CMD(beep, "d", "",
  * ({
- *     buz_beep(args[1].l);
- *     RC_OK;
+ *     buz_beep(args[1].l);
+ *     RC_OK;
  * }), 0)
  *
  * // initialize the parser
@@ -92,7 +92,7 @@
  * //Execute command
  * if(!parser_execute_cmd(templ, args))
  * {
- *     // error
+ *     // error
  * }
  * // Now args contain the outputs of the function, you can send it
  * // back to the caller
 #include "cfg/cfg_parser.h"
 
 #include <cpu/types.h>
+#include <cfg/debug.h>
 
 /**
  * Error generated by the commands through the return code.
@@ -127,11 +128,18 @@ typedef enum
        RC_ERROR  = -1, ///< Reply with error.
        RC_OK     = 0,  ///< No reply (ignore reply arguments).
        RC_REPLY  = 1,  ///< Reply command arguments.
-       RC_SKIP   = 2   ///< Skip following commands
+       RC_SKIP   = 2,  ///< Skip following commands
+       RC_CLAMPED = 3, ///< argument values have been clamped.
 } ResultCode;
 
+typedef struct
+{
+       const char *p;
+       int sz;
+} str_parm;
+
 /** union that contains parameters passed to and from commands */
-typedef union { long l; const char *s; } parms;
+typedef union { long l; str_parm s; } parms;
 /** pointer to commands */
 typedef ResultCode (*CmdFuncPtr)(parms args_results[]);
 
@@ -163,7 +171,11 @@ struct CmdTemplate
  *
  * \param NAME Command name to register
  */
-#define REGISTER_CMD(NAME) REGISTER_FUNCTION(&cmd_ ## NAME ## _template)
+#define REGISTER_CMD(NAME) \
+       do { \
+               if (!REGISTER_FUNCTION(&cmd_ ## NAME ## _template)) \
+                       ASSERT2(0, "Error in registering command, no space left"); \
+       } while (0)
 
 /**
  * Utility macro to create a command template.
@@ -219,7 +231,7 @@ MAKE_TEMPLATE(NAME, ARGS, RES, FLAGS)
  */
 void parser_init(void);
 
-void parser_register_cmd(const struct CmdTemplate* cmd);
+bool parser_register_cmd(const struct CmdTemplate* cmd);
 
 
 /**
@@ -252,6 +264,7 @@ INLINE bool parser_execute_cmd(const struct CmdTemplate* templ, parms args[CONFI
 const struct CmdTemplate* parser_get_cmd_template(const char* line);
 
 bool parser_get_cmd_arguments(const char* line, const struct CmdTemplate* templ, parms args[CONFIG_PARSER_MAX_ARGS]);
+bool get_word(const char **begin, const char **end);
 
 #if CONFIG_ENABLE_COMPAT_BEHAVIOUR
 /**