Blame cmd_handler.h

Packit dd4ba5
/*
Packit dd4ba5
 * Stage 1
Packit dd4ba5
 *
Packit dd4ba5
 * Define function prototypes.
Packit dd4ba5
 */
Packit dd4ba5
Packit dd4ba5
#undef NAME
Packit dd4ba5
#define NAME(n, d)
Packit dd4ba5
Packit dd4ba5
#undef ENTRY
Packit dd4ba5
#define ENTRY(n, h, f, ...) \
Packit dd4ba5
static int f(int argc, char **argv, struct command *command, struct plugin *plugin);
Packit dd4ba5
Packit dd4ba5
#undef COMMAND_LIST
Packit dd4ba5
#define COMMAND_LIST(args...) args
Packit dd4ba5
Packit dd4ba5
#undef PLUGIN
Packit dd4ba5
#define PLUGIN(name, cmds) cmds
Packit dd4ba5
Packit dd4ba5
#include CMD_INCLUDE(CMD_INC_FILE)
Packit dd4ba5
Packit dd4ba5
/*
Packit dd4ba5
 * Stage 2
Packit dd4ba5
 *
Packit dd4ba5
 * Define command structures.
Packit dd4ba5
 */
Packit dd4ba5
Packit dd4ba5
#undef NAME
Packit dd4ba5
#define NAME(n, d)
Packit dd4ba5
Packit dd4ba5
#undef ENTRY_W_ALIAS
Packit dd4ba5
#define ENTRY_W_ALIAS(n, h, f, a)	\
Packit dd4ba5
static struct command f ## _cmd = {	\
Packit dd4ba5
	.name = n, 			\
Packit dd4ba5
	.help = h, 			\
Packit dd4ba5
	.fn = f, 			\
Packit dd4ba5
	.alias = a, 			\
Packit dd4ba5
};
Packit dd4ba5
Packit dd4ba5
#undef ENTRY_WO_ALIAS
Packit dd4ba5
#define ENTRY_WO_ALIAS(n, h, f)		\
Packit dd4ba5
	ENTRY_W_ALIAS(n, h, f, NULL)
Packit dd4ba5
Packit dd4ba5
#undef ENTRY_SEL
Packit dd4ba5
#define ENTRY_SEL(n, h, f, a, CMD, ...) CMD
Packit dd4ba5
Packit dd4ba5
#undef ENTRY
Packit dd4ba5
#define ENTRY(...) 		\
Packit dd4ba5
	ENTRY_SEL(__VA_ARGS__, ENTRY_W_ALIAS, ENTRY_WO_ALIAS)(__VA_ARGS__)
Packit dd4ba5
Packit dd4ba5
#undef COMMAND_LIST
Packit dd4ba5
#define COMMAND_LIST(args...) args
Packit dd4ba5
Packit dd4ba5
#undef PLUGIN
Packit dd4ba5
#define PLUGIN(name, cmds) cmds
Packit dd4ba5
Packit dd4ba5
#include CMD_INCLUDE(CMD_INC_FILE)
Packit dd4ba5
Packit dd4ba5
/*
Packit dd4ba5
 * Stage 3
Packit dd4ba5
 *
Packit dd4ba5
 * Generate list of commands for the plugin.
Packit dd4ba5
 */
Packit dd4ba5
Packit dd4ba5
#undef NAME
Packit dd4ba5
#define NAME(n, d)
Packit dd4ba5
Packit dd4ba5
#undef ENTRY
Packit dd4ba5
#define ENTRY(n, h, f, ...) &f ## _cmd,
Packit dd4ba5
Packit dd4ba5
#undef COMMAND_LIST
Packit dd4ba5
#define COMMAND_LIST(args...)	\
Packit dd4ba5
static struct command *commands[] = {	\
Packit dd4ba5
	args				\
Packit dd4ba5
	NULL,				\
Packit dd4ba5
};
Packit dd4ba5
Packit dd4ba5
#undef PLUGIN
Packit dd4ba5
#define PLUGIN(name, cmds) cmds
Packit dd4ba5
Packit dd4ba5
#include CMD_INCLUDE(CMD_INC_FILE)
Packit dd4ba5
Packit dd4ba5
/*
Packit dd4ba5
 * Stage 4
Packit dd4ba5
 *
Packit dd4ba5
 * Define and register plugin
Packit dd4ba5
 */
Packit dd4ba5
Packit dd4ba5
#undef NAME
Packit dd4ba5
#define NAME(n, d) .name = n, .desc = d,
Packit dd4ba5
Packit dd4ba5
#undef COMMAND_LIST
Packit dd4ba5
#define COMMAND_LIST(args...)
Packit dd4ba5
Packit dd4ba5
#undef PLUGIN
Packit dd4ba5
#define PLUGIN(name, cmds)				\
Packit dd4ba5
static struct plugin plugin = {				\
Packit dd4ba5
	name						\
Packit dd4ba5
	.commands = commands				\
Packit dd4ba5
}; 							\
Packit dd4ba5
							\
Packit dd4ba5
static void init(void) __attribute__((constructor)); 	\
Packit dd4ba5
static void init(void)					\
Packit dd4ba5
{							\
Packit dd4ba5
	register_extension(&plugin);			\
Packit dd4ba5
}
Packit dd4ba5
Packit dd4ba5
#include CMD_INCLUDE(CMD_INC_FILE)