Gera critério de obrigatoriedade.
[cascardo/declara.git] / util.h
diff --git a/util.h b/util.h
index 0c8a391..72b66a0 100644 (file)
--- a/util.h
+++ b/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);
+
+#define SET_INT_(suffix, command, attr) \
+static int run_##suffix(struct declaracao *dec, char **args, int argc) \
+{ \
+       int val; \
+       int r = set_int(args, argc, &val); \
+       if (r) \
+               return r; \
+       dec->attr = val; \
+       return 0; \
+} \
+static struct cmd cmd_##suffix = { \
+       .name = #command, \
+       .run = run_##suffix, \
+};
+
+#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)
 
 #endif