|
version 1.2.2.3, 2010/06/04 13:51:21
|
version 1.2.2.13, 2010/12/07 15:09:02
|
|
Line 10
|
Line 10
|
| #define __AITCLI_H |
#define __AITCLI_H |
| |
|
| |
|
| |
#include <termios.h> |
| |
#include <sys/queue.h> |
| |
|
| |
|
| #define STRSIZ 256 |
#define STRSIZ 256 |
| |
|
| /* Key definitions */ |
/* Key definitions */ |
|
Line 160 typedef struct {
|
Line 164 typedef struct {
|
| } bindkey_t; |
} bindkey_t; |
| |
|
| |
|
| |
/* Commands structure for CLI */ |
| |
|
| |
typedef int (*cmd_func_t)(/*linebuffer_t **/ void * __restrict buffer, int idx, char ** __restrict args); |
| |
struct tagCommand { |
| |
int cmd_level; |
| |
|
| |
int cmd_len; |
| |
char cmd_name[STRSIZ]; |
| |
|
| |
char cmd_info[STRSIZ]; |
| |
char cmd_help[STRSIZ]; |
| |
|
| |
cmd_func_t cmd_func; |
| |
|
| |
SLIST_ENTRY(tagCommand) cmd_next; |
| |
}; |
| |
typedef SLIST_HEAD(slCommandHead, tagCommand) commands_t; |
| |
|
| |
|
| /* Main structure, Buffer for CLI work with thread models ;-) special designed by M.Punov */ |
/* Main structure, Buffer for CLI work with thread models ;-) special designed by M.Punov */ |
| |
|
| typedef struct { |
typedef struct { |
|
Line 177 typedef struct {
|
Line 200 typedef struct {
|
| |
|
| bindkey_t *line_keys; |
bindkey_t *line_keys; |
| |
|
| |
int line_level; |
| |
commands_t line_cmds; |
| |
|
| int line_in; |
int line_in; |
| int line_out; |
int line_out; |
| } linebuffer_t; |
} linebuffer_t; |
| |
|
| /* Commands structure for CLI */ |
|
| |
|
| typedef int (*cmd_func_t)(linebuffer_t * __restrict buffer, int argc, char ** __restrict argv); |
|
| typedef struct { |
|
| int cmd_level; |
|
| |
|
| int cmd_min; |
|
| int cmd_len; |
|
| char cmd_name[STRSIZ]; |
|
| |
|
| char cmd_info[STRSIZ]; |
|
| char cmd_help[STRSIZ]; |
|
| |
|
| cmd_func_t *cmd_func; |
|
| } commands_t; |
|
| |
|
| |
|
| /* Error support functions */ |
/* Error support functions */ |
| |
|
| // cli_GetErrno() Get error code of last operation |
// cli_GetErrno() Get error code of last operation |
|
Line 206 inline int cli_GetErrno();
|
Line 216 inline int cli_GetErrno();
|
| inline const char *cli_GetError(); |
inline const char *cli_GetError(); |
| |
|
| |
|
| |
/* CLI Helper functions */ |
| |
|
| |
/* |
| |
* cli_Cmd_Unsupported() Builtin helper function for unsupported commands |
| |
* @buffer = CLI buffer |
| |
* @idx = Selected command ID |
| |
* @args = Parsed arguments array |
| |
* return: RETCODE_OK ok |
| |
*/ |
| |
int cli_Cmd_Unsupported(void * __restrict buffer, int idx, char ** __restrict args); |
| |
|
| |
|
| /* CLI Functions */ |
/* CLI Functions */ |
| |
|
| /* |
/* |
|
Line 216 inline const char *cli_GetError();
|
Line 238 inline const char *cli_GetError();
|
| */ |
*/ |
| int cli_BindKey(bindkey_t * __restrict key, linebuffer_t * __restrict buffer); |
int cli_BindKey(bindkey_t * __restrict key, linebuffer_t * __restrict buffer); |
| |
|
| |
|
| /* |
/* |
| |
* cli_addCommand() Add command to CLI session |
| |
* @buffer = CLI buffer |
| |
* @csCmd = Command name |
| |
* @cliLevel = Level in CLI, -1 unprivi(view from all), 0 main config, 1 sub config ... |
| |
* @funcCmd = Callback function when user call command |
| |
* @csInfo = Inline information for command |
| |
* @csHelp = Help line when call help |
| |
* return: RETCODE_ERR error, RETCODE_OK ok |
| |
*/ |
| |
int |
| |
cli_addCommand(linebuffer_t * __restrict buffer, const char *csCmd, int cliLevel, cmd_func_t funcCmd, |
| |
const char *csInfo, const char *csHelp); |
| |
/* |
| |
* cli_delCommand() Delete command from CLI session |
| |
* @buffer = CLI buffer |
| |
* @csCmd = Command name |
| |
* @cliLevel = Level in CLI, -1 unprivi(view from all), 0 main config, 1 sub config ... |
| |
* return: RETCODE_ERR error, RETCODE_OK ok |
| |
*/ |
| |
int |
| |
cli_delCommand(linebuffer_t * __restrict buffer, const char *csCmd, int cliLevel); |
| |
/* |
| |
* cli_updCommand() Update command in CLI session |
| |
* @buffer = CLI buffer |
| |
* @csCmd = Command name |
| |
* @cliLevel = Level in CLI, -1 unprivi(view from all), 0 main config, 1 sub config ... |
| |
* @funcCmd = Callback function when user call command |
| |
* @csInfo = Inline information for command |
| |
* @csHelp = Help line when call help |
| |
* return: RETCODE_ERR error, RETCODE_OK ok |
| |
*/ |
| |
int |
| |
cli_updCommand(linebuffer_t * __restrict buffer, const char *csCmd, int cliLevel, cmd_func_t funcCmd, |
| |
const char *csInfo, const char *csHelp); |
| |
|
| |
|
| |
/* |
| * cli_addHistory() Add line to history |
* cli_addHistory() Add line to history |
| * @buffer = CLI buffer |
* @buffer = CLI buffer |
| * @str = Add text | * @str = Add custom text or if NULL use readed line from CLI buffer |
| * return: RETCODE_ERR error, RETCODE_OK ok |
* return: RETCODE_ERR error, RETCODE_OK ok |
| */ |
*/ |
| int cli_addHistory(linebuffer_t * __restrict buffer, const char * __restrict str); |
int cli_addHistory(linebuffer_t * __restrict buffer, const char * __restrict str); |
|
Line 258 inline int cli_freeLine(linebuffer_t * __restrict buff
|
Line 318 inline int cli_freeLine(linebuffer_t * __restrict buff
|
| * return: none |
* return: none |
| */ |
*/ |
| inline void cli_setPrompt(linebuffer_t * __restrict buffer, const char *prompt); |
inline void cli_setPrompt(linebuffer_t * __restrict buffer, const char *prompt); |
| |
/* |
| |
* cli_Printf() Send message to CLI session |
| |
* @buffer = CLI buffer |
| |
* @fmt = printf format string |
| |
* @... = arguments defined in fmt |
| |
* return: none |
| |
*/ |
| |
inline void cli_Printf(linebuffer_t * __restrict buffer, char *fmt, ...); |
| |
/* |
| |
* cli_PrintHelp() Print help screen |
| |
* @buffer = CLI buffer |
| |
* return: none |
| |
*/ |
| |
inline void cli_PrintHelp(linebuffer_t * __restrict buffer); |
| |
|
| /* |
/* |
| * cliEnd() Clear data, Free resources and close CLI session |
* cliEnd() Clear data, Free resources and close CLI session |
|
Line 275 void cliEnd(linebuffer_t * __restrict buffer);
|
Line 349 void cliEnd(linebuffer_t * __restrict buffer);
|
| linebuffer_t *cliInit(int fin, int fout, const char *prompt); |
linebuffer_t *cliInit(int fin, int fout, const char *prompt); |
| |
|
| /* |
/* |
| * cliExec() Execute CLI main loop | * cliInitLine() Init CLI input line terminal |
| * @cmdList = Commands list | * @buffer = CLI buffer |
| * @csPrompt = Prompt text | * return: none |
| * return: -1 error, 0 = exit w/^+D, 1 done. | |
| */ |
*/ |
| int cliExec(commands_t *cmdList, const char *csPrompt); | int cliInitLine(linebuffer_t * __restrict buffer); |
| /* |
/* |
| * cliNetExec() Execute net CLI main loop | * cliReadLine() Read line from opened CLI session |
| * @cmdList = Commands list | * @buffer = CLI buffer |
| * @csPrompt = Prompt text | * return: NULL if error or !=NULL readed line, must be free after use! |
| * @sock = client socket | |
| * @term = stdin termios | |
| * @win = window size of tty | |
| * return: -1 error, 0 = exit w/^+D, 1 done. | |
| */ |
*/ |
| int cliNetExec(commands_t *cmdList, const char *csPrompt, int sock, struct termios *term, struct winsize *win); | char *cliReadLine(linebuffer_t * __restrict buffer); |
| |
|
| |
|
| /* CLI Helper functions */ |
|
| |
|
| /* |
/* |
| * cli_Cmd_Unsupported() Builtin helper function for unsupported commands | * cliLoop() CLI main loop |
| * @cmds = Commands list | * @buffer = CLI buffer |
| * @idx = Selected command ID | * @csHistFile = History file name |
| * @out = Output handle | * return: RETCODE_ERR error, RETCODE_OK ok |
| * @args = Parsed arguments array | |
| * return: -1 error, 0 = ok, 1 exit from Cli! | |
| */ |
*/ |
| int cli_Cmd_Unsupported(void *cmds, int idx, FILE *out, char ** __restrict args); | int cliLoop(linebuffer_t * __restrict buffer, const char *csHistFile); |
| /* |
/* |
| * cli_Cmd_Help() Builtin helper function for Help screen | * cliNetLoop() CLI network main loop binded to socket |
| * @cmds = Commands list | * @buffer = CLI buffer |
| * @idx = Selected command ID | * @csHistFile = History file name |
| * @out = Output handle | * @sock = client socket |
| * @args = Parsed arguments array | * @term = stdin termios |
| * return: -1 error, 0 = ok | * @win = window size of tty |
| | * return: RETCODE_ERR error, RETCODE_OK ok |
| */ |
*/ |
| int cli_Cmd_Help(void *cmds, int idx, FILE *out, char ** __restrict args); | int cliNetLoop(linebuffer_t * __restrict buffer, const char *csHistFile, int sock); |
| /* | |
| * cli_Cmd_Exit() Builtin helper function for Exit from Cli | |
| * @cmds = Commands list | |
| * @idx = Selected command ID | |
| * @out = Output handle | |
| * @args = Parsed arguments array | |
| * return: 1 exit from Cli! | |
| */ | |
| int cli_Cmd_Exit(void *cmds, int idx, FILE *out, char ** __restrict args); | |
| |
| |
| /* | |
| * cli_Register_Commands - Declare helper function for register and export Commands variable | |
| */ | |
| #define CLI_REGISTER_COMMANDS(CMDS) \ | |
| extern commands_t CMDS[]; | |
| /* | |
| * cli_Make_Comp_Commands - Declare helper function for Commands completion arguments | |
| */ | |
| #define CLI_MAKE_COMP_COMMANDS(FUNC, CMDS) \ | |
| char *FUNC(const char *text, int state) \ | |
| { \ | |
| register int i; \ | |
| int len = strlen(text); \ | |
| for (i = state; CMDS[i].cmd_name; i++) { \ | |
| if (strncmp(CMDS[i].cmd_name, "---", 3) && \ | |
| !strncmp(CMDS[i].cmd_name, text, len)) \ | |
| return strdup(CMDS[i].cmd_name); \ | |
| } \ | |
| return NULL; \ | |
| } | |
| |
| /* | |
| * cli_Make_Comp_Args - Declare helper function for Arguments completion | |
| */ | |
| #define CLI_MAKE_COMP_ARGS(FUNC, ARGS) \ | |
| char *FUNC(const char *text __attribute__((unused)), int state) \ | |
| { \ | |
| while (ARGS[state]) \ | |
| return strdup(ARGS[state]); \ | |
| return NULL; \ | |
| } | |
| |
|
| |
|
| #endif |
#endif |