--- libaitcli/src/aitcli.c 2010/06/07 23:38:39 1.2.2.13 +++ libaitcli/src/aitcli.c 2010/06/08 08:43:47 1.2.2.15 @@ -3,7 +3,7 @@ * by Michael Pounov * * $Author: misho $ -* $Id: aitcli.c,v 1.2.2.13 2010/06/07 23:38:39 misho Exp $ +* $Id: aitcli.c,v 1.2.2.15 2010/06/08 08:43:47 misho Exp $ * *************************************************************************/ #include "global.h" @@ -391,14 +391,17 @@ bufComp(int idx, void * __restrict buffer) *app ? i++ : i, *app ? app++ : app); if (i) { - SLIST_FOREACH(cmd, &buf->line_cmds, cmd_next) + SLIST_FOREACH(cmd, &buf->line_cmds, cmd_next) { if (cmd->cmd_level == buf->line_level && !strncmp(cmd->cmd_name, items[0], strlen(items[0]))) { - j++; - c = cmd; - strlcat(szLine, " ", STRSIZ); - strlcat(szLine, cmd->cmd_name, STRSIZ); + if (strncmp(cmd->cmd_name, CLI_CMD_SEP, strlen(CLI_CMD_SEP))) { + j++; + c = cmd; + strlcat(szLine, " ", STRSIZ); + strlcat(szLine, cmd->cmd_name, STRSIZ); + } } + } if (i > 1 && c) { /* we are on argument of command and has complition info */ @@ -414,10 +417,12 @@ bufComp(int idx, void * __restrict buffer) /* we on 0 position of prompt, show commands for this level */ SLIST_FOREACH(cmd, &buf->line_cmds, cmd_next) { if (cmd->cmd_level == buf->line_level) - j++; - c = cmd; - strlcat(szLine, " ", STRSIZ); - strlcat(szLine, cmd->cmd_name, STRSIZ); + if (strncmp(cmd->cmd_name, CLI_CMD_SEP, strlen(CLI_CMD_SEP))) { + j++; + c = cmd; + strlcat(szLine, " ", STRSIZ); + strlcat(szLine, cmd->cmd_name, STRSIZ); + } } } @@ -495,6 +500,21 @@ 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 * @key = key structure * @buffer = CLI buffer @@ -537,7 +557,7 @@ cli_addCommand(linebuffer_t * __restrict buffer, const { struct tagCommand *cmd; - if (!buffer || !csCmd || !funcCmd) { + if (!buffer || !csCmd) { cli_SetErr(EINVAL, "Error:: invalid input parameters ..."); return RETCODE_ERR; } @@ -938,6 +958,7 @@ cliInit(int fin, int fout, const char *prompt) /* add helper functions */ cli_addCommand(buffer, "exit", 0, cli_Cmd_Exit, "exit ", "Exit from console"); cli_addCommand(buffer, "help", 0, cli_Cmd_Help, "help [command] ", "Help screen"); + cli_addCommand(buffer, "-------", 0, NULL, "-------------------------", NULL); /* fill key bindings */ // ascii chars & ctrl+chars @@ -1238,10 +1259,9 @@ cliNetLoop(linebuffer_t * __restrict buffer, const cha case 0: close(sock); - if (buffer) { + if (buffer) ret = cliLoop(buffer, csHistFile) < 0 ? 1 : 0; - cliEnd(buffer); - } else + else cli_SetErr(EINVAL, "Error:: invalid input parameters ..."); /* spawn Shell mode */ @@ -1374,7 +1394,12 @@ cliLoop(linebuffer_t * __restrict buffer, const char * cli_Printf(buffer, "\nCommand '%s' not found!\n", items[0]); ret = -1; } else - ret = cmd->cmd_func(buffer, i, items); + if (cmd->cmd_func) + ret = cmd->cmd_func(buffer, i, items); + else { + clrscrEOL(buffer); + printfCR(buffer, 1); + } } cli_freeLine(buffer);