diff options
author | Jan200101 <sentrycraft123@gmail.com> | 2020-12-11 20:13:43 +0100 |
---|---|---|
committer | Jan200101 <sentrycraft123@gmail.com> | 2020-12-11 20:13:43 +0100 |
commit | 8dc996f6d89652d71c6c4fff87f7923bbfbb9a34 (patch) | |
tree | 66654d7fabd4a792989d7a32147ba688853c76fa /src/command.h | |
parent | 3b3d30aedf3d8762558e9aef846ca94dc492fa96 (diff) | |
download | polecat-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.h | 32 |
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 |