version 1.2.2.12, 2010/06/07 16:16:12
|
version 1.2.2.14, 2010/06/08 08:05:12
|
Line 400 bufComp(int idx, void * __restrict buffer)
|
Line 400 bufComp(int idx, void * __restrict buffer)
|
strlcat(szLine, cmd->cmd_name, STRSIZ); |
strlcat(szLine, cmd->cmd_name, STRSIZ); |
} |
} |
|
|
printf("i=%d j=%d c=%p name=%s comp=%p\n", i, j, c, c->cmd_name, c->cmd_comp); | if (i > 1 && c) { |
if (i > 1 && j == 1 && c && c->cmd_comp) { | /* we are on argument of command and has complition info */ |
/* we are on argument of command and has complition callback */ | j++; // always must be j > 1 ;) for arguments |
printf("ima comp!\n"); | strlcpy(szLine, c->cmd_info, STRSIZ); |
goto endcomp; | |
} |
} |
} else { |
} else { |
/* we have valid char but i == 0, this case is illegal */ |
/* we have valid char but i == 0, this case is illegal */ |
Line 427 bufComp(int idx, void * __restrict buffer)
|
Line 426 bufComp(int idx, void * __restrict buffer)
|
printfNL(buf, 0); |
printfNL(buf, 0); |
write(buf->line_out, szLine, strlen(szLine)); |
write(buf->line_out, szLine, strlen(szLine)); |
printfNL(buf, 1); |
printfNL(buf, 1); |
|
printfEOL(buf, buf->line_len - 1, 1); |
|
printfEOL(buf, -1, 1); |
} |
} |
if (j == 1 && c) { |
if (j == 1 && c) { |
clrscrEOL(buf); |
clrscrEOL(buf); |
Line 458 bufHelp(int idx, void * __restrict buffer)
|
Line 459 bufHelp(int idx, void * __restrict buffer)
|
return RETCODE_ERR; |
return RETCODE_ERR; |
|
|
cli_Cmd_Help(buf, -1, NULL); |
cli_Cmd_Help(buf, -1, NULL); |
printfCR(buf, 1); | |
| printfEOL(buf, buf->line_len - 1, 1); |
| printfEOL(buf, -1, 1); |
return RETCODE_OK; |
return RETCODE_OK; |
} |
} |
|
|
Line 492 cli_Printf(linebuffer_t * __restrict buffer, char *fmt
|
Line 495 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) |
|
{ |
|
if (buffer) |
|
bufHelp(0, buffer); |
|
else |
|
cli_SetErr(EINVAL, "Error:: invalid input parameters ..."); |
|
} |
|
|
|
|
|
/* |
* cli_BindKey() Bind function to key |
* cli_BindKey() Bind function to key |
* @key = key structure |
* @key = key structure |
* @buffer = CLI buffer |
* @buffer = CLI buffer |
Line 526 cli_BindKey(bindkey_t * __restrict key, linebuffer_t *
|
Line 544 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 **anComp) | const char *csInfo, const char *csHelp) |
{ |
{ |
struct tagCommand *cmd; |
struct tagCommand *cmd; |
|
|
if (!buffer || !csCmd || !funcCmd) { | if (!buffer || !csCmd) { |
cli_SetErr(EINVAL, "Error:: invalid input parameters ..."); |
cli_SetErr(EINVAL, "Error:: invalid input parameters ..."); |
return RETCODE_ERR; |
return RETCODE_ERR; |
} |
} |
Line 549 cli_addCommand(linebuffer_t * __restrict buffer, const
|
Line 566 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 596 cli_delCommand(linebuffer_t * __restrict buffer, const
|
Line 612 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 **anComp) | const char *csInfo, const char *csHelp) |
{ |
{ |
struct tagCommand *cmd; |
struct tagCommand *cmd; |
int ret = RETCODE_OK; |
int ret = RETCODE_OK; |
Line 616 cli_updCommand(linebuffer_t * __restrict buffer, const
|
Line 630 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 939 cliInit(int fin, int fout, const char *prompt)
|
Line 951 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", NULL); | cli_addCommand(buffer, "exit", 0, cli_Cmd_Exit, "exit <cr>", "Exit from console"); |
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 |
Line 1242 cliNetLoop(linebuffer_t * __restrict buffer, const cha
|
Line 1253 cliNetLoop(linebuffer_t * __restrict buffer, const cha
|
case 0: |
case 0: |
close(sock); |
close(sock); |
|
|
if (buffer) { | if (buffer) |
ret = cliLoop(buffer, csHistFile) < 0 ? 1 : 0; |
ret = cliLoop(buffer, csHistFile) < 0 ? 1 : 0; |
cliEnd(buffer); | else |
} else | |
cli_SetErr(EINVAL, "Error:: invalid input parameters ..."); |
cli_SetErr(EINVAL, "Error:: invalid input parameters ..."); |
|
|
/* spawn Shell mode */ |
/* spawn Shell mode */ |
Line 1340 cliLoop(linebuffer_t * __restrict buffer, const char *
|
Line 1350 cliLoop(linebuffer_t * __restrict buffer, const char *
|
register int i; |
register int i; |
int ret = RETCODE_OK; |
int ret = RETCODE_OK; |
struct tagCommand *cmd; |
struct tagCommand *cmd; |
|
|
/* |
|
|
|
char **cli_stdCompletion(const char *text, int start, int end) |
|
{ |
|
register int i; |
|
char **matches = NULL; |
|
|
|
char *cmdCompGet(const char *text, int state) |
|
{ |
|
int len = strlen(text); |
|
|
|
for (i = state; cmdList[i].cmd_name; i++) { |
|
if (strncmp(cmdList[i].cmd_name, "---", 3) && |
|
!strncmp(cmdList[i].cmd_name, text, len)) |
|
return strdup(cmdList[i].cmd_name); |
|
} |
|
|
|
return NULL; |
|
} |
|
|
|
if (!start) |
|
matches = rl_completion_matches(text, cmdCompGet); |
|
else |
|
for (i = 0; cmdList[i].cmd_name; i++) { |
|
if (!cmdList[i].cmd_comp) |
|
continue; |
|
if (!strncmp(rl_line_buffer, cmdList[i].cmd_name, strlen(cmdList[i].cmd_name))) |
|
matches = rl_completion_matches(text, cmdList[i].cmd_comp); |
|
} |
|
|
|
return matches; |
|
} |
|
|
|
|
|
*/ |
|
|
|
/* --- main body of CLI --- */ |
/* --- main body of CLI --- */ |
|
|