RTU/release/inc/myCmd.h

35 lines
1.1 KiB
C

#pragma once
#include "myBase.h"
typedef struct
{
const char *name;
void (*func)(int argc, char *argv[]);
const char *desc;
void (*complete)(const char *buf, char ***completions, int *ncomp);
}stru_cmd;
#define CMD_REGISTER(cmd_name, func_ptr, cmd_desc, ...) \
__attribute__((constructor)) static void register_##func_ptr(void) { \
cmd_manager_add_command(cmd_name, func_ptr, cmd_desc, ##__VA_ARGS__); \
}
void cmd_manager_add_command(const char *name, void (*func)(int argc, char *argv[]), const char *desc, void (*complete)(const char *, char ***, int *) = NULL);
stru_cmd *cmd_manager_get_commands(unsigned int *out_count);
void cmd_help(int argc, char *argv[]);
stru_cmd *cmd_find(const char *name);
void cmd_complete(const char *buf, char ***completions, int *ncomp);
void cmd_sub_complete(const char *buf, char ***completions, int *ncomp, const char **subs, int sub_count);
char *linenoise(const char *prompt);
void linenoiseFree(void *ptr);
int linenoiseHistoryAdd(const char *line);
void linenoiseHistoryFree(void);
void lineniseSetCompletionCallback(void (*cb)(const char *, char ***, int *));