|
|
| version 1.2.2.8, 2010/06/07 12:30:28 | version 1.2.2.11, 2010/06/07 13:55:38 |
|---|---|
| Line 388 static int | Line 388 static int |
| bufComp(int idx, void * __restrict buffer) | bufComp(int idx, void * __restrict buffer) |
| { | { |
| linebuffer_t *buf = buffer; | linebuffer_t *buf = buffer; |
| char *str, *s, **app, *items[MAX_PROMPT_ITEMS]; | |
| register int i; | |
| if (!buffer || idx < 0 || idx > MAX_BINDKEY) | if (!buffer || idx < 0 || idx > MAX_BINDKEY) |
| return RETCODE_ERR; | return RETCODE_ERR; |
| str = strdup(buf->line_buf); | |
| if (!str) | |
| return RETCODE_ERR; | |
| else { | |
| s = str; | |
| io_TrimStr((u_char*) s); | |
| } | |
| if (*s) { | |
| memset(items, 0, sizeof(char*) * MAX_PROMPT_ITEMS); | |
| for (app = items, i = 0; app < items + MAX_PROMPT_ITEMS - 1 && (*app = strsep(&s, " \t")); | |
| *app ? i++ : i, *app ? app++ : app); | |
| // SLIST_FOREACH(cmd, &buf->line_cmds; cmd_next) | |
| // if (!strncmp(cmd->cmd_name, items[i - 1], strlen(items[i - 1]))) | |
| } | |
| free(str); | |
| return RETCODE_OK; | return RETCODE_OK; |
| } | } |
| Line 472 cli_BindKey(bindkey_t * __restrict key, linebuffer_t * | Line 492 cli_BindKey(bindkey_t * __restrict key, linebuffer_t * |
| * @funcCmd = Callback function when user call command | * @funcCmd = Callback function when user call command |
| * @csInfo = Inline information for command | * @csInfo = Inline information for command |
| * @csHelp = Help line when call help | * @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 | * return: RETCODE_ERR error, RETCODE_OK ok |
| */ | */ |
| int | int |
| cli_addCommand(linebuffer_t * __restrict buffer, const char *csCmd, int cliLevel, cmd_func_t funcCmd, | cli_addCommand(linebuffer_t * __restrict buffer, const char *csCmd, int cliLevel, cmd_func_t funcCmd, |
| const char *csInfo, const char *csHelp) | const char *csInfo, const char *csHelp, const char **anComp) |
| { | { |
| struct tagCommand *cmd; | struct tagCommand *cmd; |
| Line 494 cli_addCommand(linebuffer_t * __restrict buffer, const | Line 515 cli_addCommand(linebuffer_t * __restrict buffer, const |
| cmd->cmd_level = cliLevel; | cmd->cmd_level = cliLevel; |
| cmd->cmd_func = funcCmd; | cmd->cmd_func = funcCmd; |
| cmd->cmd_comp = (char**) anComp; | |
| cmd->cmd_len = strlcpy(cmd->cmd_name, csCmd, STRSIZ); | cmd->cmd_len = strlcpy(cmd->cmd_name, csCmd, STRSIZ); |
| if (csInfo) | if (csInfo) |
| strlcpy(cmd->cmd_info, csInfo, STRSIZ); | strlcpy(cmd->cmd_info, csInfo, STRSIZ); |
| Line 540 cli_delCommand(linebuffer_t * __restrict buffer, const | Line 562 cli_delCommand(linebuffer_t * __restrict buffer, const |
| * @funcCmd = Callback function when user call command | * @funcCmd = Callback function when user call command |
| * @csInfo = Inline information for command | * @csInfo = Inline information for command |
| * @csHelp = Help line when call help | * @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 | * return: RETCODE_ERR error, RETCODE_OK ok |
| */ | */ |
| int | int |
| cli_updCommand(linebuffer_t * __restrict buffer, const char *csCmd, int cliLevel, cmd_func_t funcCmd, | cli_updCommand(linebuffer_t * __restrict buffer, const char *csCmd, int cliLevel, cmd_func_t funcCmd, |
| const char *csInfo, const char *csHelp) | const char *csInfo, const char *csHelp, const char **anComp) |
| { | { |
| struct tagCommand *cmd; | struct tagCommand *cmd; |
| int ret = RETCODE_OK; | int ret = RETCODE_OK; |
| Line 558 cli_updCommand(linebuffer_t * __restrict buffer, const | Line 582 cli_updCommand(linebuffer_t * __restrict buffer, const |
| if (cmd->cmd_level == cliLevel && !strcmp(cmd->cmd_name, csCmd)) { | if (cmd->cmd_level == cliLevel && !strcmp(cmd->cmd_name, csCmd)) { |
| ret = 1; | ret = 1; |
| if (funcCmd) | if (funcCmd) { |
| cmd->cmd_func = funcCmd; | cmd->cmd_func = funcCmd; |
| cmd->cmd_comp = (char**) anComp; | |
| } | |
| if (csInfo) | if (csInfo) |
| strlcpy(cmd->cmd_info, csInfo, STRSIZ); | strlcpy(cmd->cmd_info, csInfo, STRSIZ); |
| if (csHelp) | if (csHelp) |
| Line 879 cliInit(int fin, int fout, const char *prompt) | Line 905 cliInit(int fin, int fout, const char *prompt) |
| memset(keys, 0, sizeof(bindkey_t) * (MAX_BINDKEY + 1)); | memset(keys, 0, sizeof(bindkey_t) * (MAX_BINDKEY + 1)); |
| /* add helper functions */ | /* add helper functions */ |
| cli_addCommand(buffer, "exit", 0, cli_Cmd_Exit, "exit <cr>", "Exit from console"); | cli_addCommand(buffer, "exit", 0, cli_Cmd_Exit, "exit <cr>", "Exit from console", NULL); |
| cli_addCommand(buffer, "help", 0, cli_Cmd_Help, "help [command] <cr>", "Help screen"); | cli_addCommand(buffer, "help", 0, cli_Cmd_Help, "help [command] <cr>", "Help screen", |
| (const char**) -1); | |
| /* fill key bindings */ | /* fill key bindings */ |
| // ascii chars & ctrl+chars | // ascii chars & ctrl+chars |