]> git.sur5r.net Git - openocd/blobdiff - src/helper/command.h
Update parse_type macro definitions to allow re-use with signed types.
[openocd] / src / helper / command.h
index 49609a685f8cb7d15797bdc9fcfc223efdbaa931..fb80d597a4f0dc57977a328a2894e60055dd2083 100644 (file)
 #ifndef COMMAND_H
 #define COMMAND_H
 
+#include "types.h"
+
+/* Integrate the JIM TCL interpretor into the command processing. */
+#if BUILD_ECOSBOARD
 #include <stdio.h>
+#include <stdarg.h>
+/* Jim is provied by eCos */
+#include <cyg/jimtcl/jim.h>
+#else
+#include "jim.h"
+#endif
 
 enum command_mode
 {
@@ -73,10 +83,14 @@ extern command_context_t* copy_command_context(command_context_t* context);
 extern int command_context_mode(command_context_t *context, enum command_mode mode);
 extern command_context_t* command_init(void);
 extern int command_done(command_context_t *context);
-extern void command_print(command_context_t *context, char *format, ...);
-extern void command_print_sameline(command_context_t *context, char *format, ...);
+
+extern void command_print(command_context_t *context, const char *format, ...)
+               __attribute__ ((format (printf, 2, 3)));
+extern void command_print_sameline(command_context_t *context, const char *format, ...)
+               __attribute__ ((format (printf, 2, 3)));
 extern int command_run_line(command_context_t *context, char *line);
-extern int command_run_linef(command_context_t *context, char *format, ...);
+extern int command_run_linef(command_context_t *context, const char *format, ...)
+               __attribute__ ((format (printf, 2, 3)));
 extern void command_output_text(command_context_t *context, const char *data);
 
 extern void process_jim_events(void);
@@ -87,20 +101,31 @@ extern void process_jim_events(void);
 
 extern int fast_and_dangerous;
 
-/* Integrate the JIM TCL interpretor into the command processing. */
-#include <stdarg.h>
-#if BUILD_ECOSBOARD
-/* Jim is provied by eCos */
-#include <cyg/jimtcl/jim.h>
-#else
-#define JIM_EMBEDDED
-#include "jim.h"
-#endif
-
 extern Jim_Interp *interp;
 
 void register_jim(command_context_t *context, const char *name, int (*cmd)(Jim_Interp *interp, int argc, Jim_Obj *const *argv), const char *help);
 
 long jim_global_long(const char *variable);
 
+int parse_ulong(const char *str, unsigned long *ul);
+int parse_ullong(const char *str, unsigned long long *ul);
+
+#define DEFINE_PARSE_NUM_WRAP(name, type, max, functype, funcname) \
+       static inline int parse_##name(const char *str, type *ul) \
+       { \
+               functype n; \
+               int retval = parse##funcname(str, &n); \
+               *ul = n; \
+               return n > (max) ? ERROR_COMMAND_SYNTAX_ERROR : retval; \
+       }       
+
+#define DEFINE_PARSE_ULONG(name, type, max) \
+       DEFINE_PARSE_NUM_WRAP(name, type, max, unsigned long, _ulong)
+DEFINE_PARSE_ULONG(uint, unsigned, UINT_MAX)
+DEFINE_PARSE_ULONG(u32, uint32_t, UINT32_MAX)
+DEFINE_PARSE_ULONG(u16, uint16_t, UINT16_MAX)
+DEFINE_PARSE_ULONG(u8, uint8_t, UINT8_MAX)
+
+void script_debug(Jim_Interp *interp, const char *cmd, int argc, Jim_Obj *const *argv);
+
 #endif /* COMMAND_H */