RTU_ALL_AI/release/inc/myCmd.h

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