Blame cmd_handler.h

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