#ifndef _UTIL_H
#define _UTIL_H
-int set_llong(char *str, long long *val);
-int set_int(char **args, int argc, int *val);
-int set_string(char **args, int argc, char **str);
+#include <errno.h>
-#define SET_INT_(suffix, command, attr) \
+int set_llong(char *arg, long long *val);
+int set_int(char *arg, int *val);
+int set_string(char *arg, char **str);
+
+#define SET_VAL_(suffix, command, attr, type, param, func, help_) \
static int run_##suffix(struct declaracao *dec, char **args, int argc) \
{ \
- int val; \
- int r = set_int(args, argc, &val); \
+ type val; \
+ int r; \
+ if (argc != 2) { \
+ dec_set_error(dec, "Comando %s espera um parĂ¢metro "#param".\n", args[0]); \
+ return -EINVAL; \
+ } \
+ r = func(args[1], &val); \
if (r) \
return r; \
dec->attr = val; \
static struct cmd cmd_##suffix = { \
.name = #command, \
.run = run_##suffix, \
+ .help = help_, \
};
+#define SET_INT_(suffix, cmd, attr) SET_VAL_(suffix, cmd, attr, int, inteiro, set_int, NULL)
+#define SET_STRING_(suffix, cmd, attr) SET_VAL_(suffix, cmd, attr, char *, texto, set_string, NULL)
#define SET_INT(attr) SET_INT_(attr, attr, attr)
-
-#define SET_STRING_(suffix, command, attr) \
-static int run_##suffix(struct declaracao *dec, char **args, int argc) \
-{ \
- char *val; \
- int r = set_string(args, argc, &val); \
- if (r) \
- return r; \
- dec->attr = val; \
- return 0; \
-} \
-static struct cmd cmd_##suffix = { \
- .name = #command, \
- .run = run_##suffix, \
-}
-
#define SET_STRING(attr) SET_STRING_(attr, attr, attr)
static inline long long reais(long long val)