aboutsummaryrefslogtreecommitdiff
path: root/src/command.h
diff options
context:
space:
mode:
authorJan200101 <sentrycraft123@gmail.com>2020-12-11 20:13:43 +0100
committerJan200101 <sentrycraft123@gmail.com>2020-12-11 20:13:43 +0100
commit8dc996f6d89652d71c6c4fff87f7923bbfbb9a34 (patch)
tree66654d7fabd4a792989d7a32147ba688853c76fa /src/command.h
parent3b3d30aedf3d8762558e9aef846ca94dc492fa96 (diff)
downloadpolecat-8dc996f6d89652d71c6c4fff87f7923bbfbb9a34.tar.gz
polecat-8dc996f6d89652d71c6c4fff87f7923bbfbb9a34.zip
move command definitions (as well as helpers) to macros
Diffstat (limited to 'src/command.h')
-rw-r--r--src/command.h32
1 files changed, 32 insertions, 0 deletions
diff --git a/src/command.h b/src/command.h
new file mode 100644
index 0000000..9aeb07e
--- /dev/null
+++ b/src/command.h
@@ -0,0 +1,32 @@
+#ifndef COMMAND_H
+#define COMMAND_H
+
+#include <stdio.h>
+#include "common.h"
+
+#define COMMAND(GROUP, COMMAND)\
+int GROUP##_##COMMAND(int argc, char** argv)
+
+
+#define COMMAND_HELP(GROUP, MSG) \
+ COMMAND(GROUP, help) \
+ { \
+ fprintf(stderr, USAGE_STR MSG " <command>\n\nList of commands:\n"); \
+ print_help(GROUP##_commands, ARRAY_LEN(GROUP##_commands)); \
+ return 0; \
+ }
+
+#define COMMAND_GROUP(GROUP) \
+ int GROUP(int argc, char** argv) \
+
+
+#define COMMAND_GROUP_FUNC(GROUP) \
+ COMMAND_GROUP(GROUP) \
+ { \
+ if (argc > 1) \
+ for (int i = 0; i < ARRAY_LEN(GROUP##_commands); ++i) \
+ if (!strcmp(GROUP##_commands[i].name, argv[1])) return GROUP##_commands[i].func(argc-1, argv+1); \
+ return GROUP##_help(argc-1, argv+1); \
+ }
+
+#endif \ No newline at end of file