78 lines
2.1 KiB
C
78 lines
2.1 KiB
C
/**
|
|
* @file myCmd.h
|
|
* @brief 命令处理框架 — 纯 C 接口
|
|
* @details 命令注册/分发/补全,内置 linenoise 行编辑。
|
|
* 通过 `__attribute__((constructor))` 实现模块自动注册。
|
|
*/
|
|
#ifndef _MY_CMD_H_
|
|
#define _MY_CMD_H_
|
|
|
|
#include "myBase.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C"
|
|
{
|
|
#endif
|
|
|
|
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;
|
|
|
|
/** 注册命令 */
|
|
void cmd_manager_add_command(const char *name, void (*func)(int argc, char *argv[]),
|
|
const char *desc, void (*complete)(const char *, char ***, int *));
|
|
|
|
/** 获取所有已注册命令列表 */
|
|
stru_cmd *cmd_manager_get_commands(unsigned int *out_count);
|
|
|
|
/** 打印帮助信息 */
|
|
void cmd_help(int argc, char *argv[]);
|
|
|
|
/** 按名称查找命令 */
|
|
stru_cmd *cmd_find(const char *name);
|
|
|
|
/** Tab 自动补全回调 */
|
|
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);
|
|
|
|
/** 释放 linenoise 返回的内存 */
|
|
void linenoiseFree(void *ptr);
|
|
|
|
/** 添加历史记录 */
|
|
int linenoiseHistoryAdd(const char *line);
|
|
|
|
/** 释放所有历史 */
|
|
void linenoiseHistoryFree(void);
|
|
|
|
/** 设置自动补全回调 */
|
|
void lineniseSetCompletionCallback(void (*cb)(const char *, char ***, int *));
|
|
|
|
/** 注册命令宏(无补全) */
|
|
#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, NULL); \
|
|
}
|
|
|
|
/** 注册命令宏(带补全) */
|
|
#define CMD_REGISTER_C(cmd_name, func_ptr, cmd_desc, complete) \
|
|
__attribute__((constructor)) static void register_##func_ptr(void) \
|
|
{ \
|
|
cmd_manager_add_command(cmd_name, func_ptr, cmd_desc, complete); \
|
|
}
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
#endif
|