version 1.2.2.1, 2010/06/04 12:08:32
|
version 1.2.2.9, 2010/06/07 13:47:42
|
Line 10
|
Line 10
|
#define __AITCLI_H |
#define __AITCLI_H |
|
|
|
|
|
#include <termios.h> |
|
#include <sys/queue.h> |
|
|
|
|
|
#define STRSIZ 256 |
|
|
/* Key definitions */ |
/* Key definitions */ |
|
|
#define K_F1 "\x1b\x4f\x50" |
#define K_F1 "\x1b\x4f\x50" |
Line 158 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; |
|
|
|
char **cmd_comp; |
|
|
|
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 175 typedef struct {
|
Line 202 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 204 inline int cli_GetErrno();
|
Line 218 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 */ |
|
|
/* |
/* |
* cliExec() Execute CLI main loop | * cli_BindKey() Bind function to key |
* @cmdList = Commands list | * @key = key structure |
* @csPrompt = Prompt text | * @buffer = CLI buffer |
* return: -1 error, 0 = exit w/^+D, 1 done. | * return: RETCODE_ERR error, RETCODE_OK ok, >0 bind at position |
*/ |
*/ |
int cliExec(cliCommands_t *cmdList, const char *csPrompt); | int cli_BindKey(bindkey_t * __restrict key, linebuffer_t * __restrict buffer); |
| |
| |
/* |
/* |
* cliNetExec() Execute net CLI main loop | * cli_addCommand() Add command to CLI session |
* @cmdList = Commands list | * @buffer = CLI buffer |
* @csPrompt = Prompt text | * @csCmd = Command name |
* @sock = client socket | * @cliLevel = Level in CLI, -1 unprivi(view from all), 0 main config, 1 sub config ... |
* @term = stdin termios | * @funcCmd = Callback function when user call command |
* @win = window size of tty | * @csInfo = Inline information for command |
* return: -1 error, 0 = exit w/^+D, 1 done. | * @csHelp = Help line when call help |
| * @anComp = Completion array terminated with NULL element, -1 complete commands, NULL nothing |
| * return: RETCODE_ERR error, RETCODE_OK ok |
*/ |
*/ |
int cliNetExec(cliCommands_t *cmdList, const char *csPrompt, int sock, struct termios *term, struct winsize *win); | int |
| cli_addCommand(linebuffer_t * __restrict buffer, const char *csCmd, int cliLevel, cmd_func_t funcCmd, |
| const char *csInfo, const char *csHelp, const char **anComp); |
| /* |
| * 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 |
| * @anComp = Completion array terminated with NULL element, -1 complete commands, NULL nothing, |
| * update only if funcCmd is not NULL |
| * 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, const char **anComp); |
|
|
|
|
/* CLI Helper functions */ | /* |
| * cli_addHistory() Add line to history |
| * @buffer = CLI buffer |
| * @str = Add custom text or if NULL use readed line from CLI buffer |
| * return: RETCODE_ERR error, RETCODE_OK ok |
| */ |
| int cli_addHistory(linebuffer_t * __restrict buffer, const char * __restrict str); |
| /* |
| * cli_saveHistory() Save history to file |
| * @buffer = CLI buffer |
| * @histfile = History filename, if NULL will be use default name |
| * @lines = Maximum history lines to save |
| * return: RETCODE_ERR error, RETCODE_OK ok |
| */ |
| int cli_saveHistory(linebuffer_t * __restrict buffer, const char *histfile, int lines); |
| /* |
| * cli_loadHistory() Load history from file |
| * @buffer = CLI buffer |
| * @histfile = History filename, if NULL will be use default name |
| * return: RETCODE_ERR error, RETCODE_OK ok |
| */ |
| int cli_loadHistory(linebuffer_t * __restrict buffer, const char *histfile); |
| /* |
| * cli_resetHistory() Reset history search in CLI session |
| * @buffer = CLI buffer |
| * return: none |
| */ |
| inline void cli_resetHistory(linebuffer_t * __restrict buffer); |
|
|
/* |
/* |
* cli_Cmd_Unsupported() Builtin helper function for unsupported commands | * cli_freeLine() Clear entire line |
* @cmds = Commands list | * @buffer = CLI buffer |
* @idx = Selected command ID | * return: RETCODE_ERR error, RETCODE_OK ok |
* @out = Output handle | |
* @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); | inline int cli_freeLine(linebuffer_t * __restrict buffer); |
/* |
/* |
* cli_Cmd_Help() Builtin helper function for Help screen | * cli_setPrompt() Set new prompt for CLI session |
* @cmds = Commands list | * @buffer = CLI buffer |
* @idx = Selected command ID | * @prompt = new text for prompt or if NULL disable prompt |
* @out = Output handle | * return: none |
* @args = Parsed arguments array | |
* return: -1 error, 0 = ok | |
*/ |
*/ |
int cli_Cmd_Help(void *cmds, int idx, FILE *out, char ** __restrict args); | inline void cli_setPrompt(linebuffer_t * __restrict buffer, const char *prompt); |
/* |
/* |
* cli_Cmd_Exit() Builtin helper function for Exit from Cli | * cli_Printf() Send message to CLI session |
* @cmds = Commands list | * @buffer = CLI buffer |
* @idx = Selected command ID | * @fmt = printf format string |
* @out = Output handle | * @... = arguments defined in fmt |
* @args = Parsed arguments array | * return: none |
* return: 1 exit from Cli! | |
*/ |
*/ |
int cli_Cmd_Exit(void *cmds, int idx, FILE *out, char ** __restrict args); | inline void cli_Printf(linebuffer_t * __restrict buffer, char *fmt, ...); |
|
|
|
/* |
|
* cliEnd() Clear data, Free resources and close CLI session |
|
* @buffer = CLI buffer |
|
* return: RETCODE_ERR error, RETCODE_OK ok |
|
*/ |
|
void cliEnd(linebuffer_t * __restrict buffer); |
|
/* |
|
* cliInit() Start CLI session, allocate memory for resources and bind keys |
|
* @fin = Input device handle |
|
* @fout = Output device handle |
|
* @prompt = text for prompt, if NULL disable prompt |
|
* return: NULL if error or !=NULL CLI buffer |
|
*/ |
|
linebuffer_t *cliInit(int fin, int fout, const char *prompt); |
|
|
/* |
/* |
* cli_Register_Commands - Declare helper function for register and export Commands variable | * cliReadLine() Read line from opened CLI session |
| * @buffer = CLI buffer |
| * return: NULL if error or !=NULL readed line, must be free after use! |
*/ |
*/ |
#define CLI_REGISTER_COMMANDS(CMDS) \ | char *cliReadLine(linebuffer_t * __restrict buffer); |
extern commands_t CMDS[]; | /* |
| * cliLoop() CLI main loop |
| * @buffer = CLI buffer |
| * @csHistFile = History file name |
| * return: RETCODE_ERR error, RETCODE_OK ok |
| */ |
| int cliLoop(linebuffer_t * __restrict buffer, const char *csHistFile); |
| |
| /* |
| * cliLoop() CLI main loop |
| * @buffer = CLI buffer |
| * @csHistFile = History file name |
| * return: RETCODE_ERR error, RETCODE_OK ok |
| */ |
| int cliLoop(linebuffer_t * __restrict buffer, const char *csHistFile); |
| /* |
| * cliNetLoop() CLI network main loop binded to socket |
| * @buffer = CLI buffer |
| * @csHistFile = History file name |
| * @sock = client socket |
| * @term = stdin termios |
| * @win = window size of tty |
| * return: RETCODE_ERR error, RETCODE_OK ok |
| */ |
| int cliNetLoop(linebuffer_t * __restrict buffer, const char *csHistFile, int sock, |
| struct termios *term, struct winsize *win); |
| |
| |
| |
/* |
/* |
* cli_Make_Comp_Commands - Declare helper function for Commands completion arguments |
* cli_Make_Comp_Commands - Declare helper function for Commands completion arguments |
*/ |
*/ |