Diff for /libaitcli/src/aitcli.c between versions 1.11 and 1.13

version 1.11, 2013/11/20 16:40:02 version 1.13, 2013/12/03 20:33:14
Line 106  printfEOL(linebuffer_t * __restrict buf, int len, int  Line 106  printfEOL(linebuffer_t * __restrict buf, int len, int 
                 }                  }
   
                 write(buf->line_out, buf->line_buf, len == -1 ?                   write(buf->line_out, buf->line_buf, len == -1 ? 
                                buf->line_eol - buf->line_bol: len);                                buf->line_eol - buf->line_bol : len);
         }          }
 }  }
   
Line 154  bufCHAR(int idx, void * __restrict cli_buffer) Line 154  bufCHAR(int idx, void * __restrict cli_buffer)
         memcpy(buf->line_buf + pos, buf->line_keys[idx].key_ch, buf->line_keys[idx].key_len);          memcpy(buf->line_buf + pos, buf->line_keys[idx].key_ch, buf->line_keys[idx].key_len);
         buf->line_buf[buf->line_len - 1] = 0;          buf->line_buf[buf->line_len - 1] = 0;
   
        write(buf->line_out, buf->line_keys[idx].key_ch, buf->line_keys[idx].key_len);        if (buf->line_prompt)
                 write(buf->line_out, buf->line_keys[idx].key_ch, buf->line_keys[idx].key_len);
   
         if (buf->line_mode == LINEMODE_INS) {          if (buf->line_mode == LINEMODE_INS) {
                 write(buf->line_out, (const u_char*) buf->line_buf + pos + buf->line_keys[idx].key_len,                   write(buf->line_out, (const u_char*) buf->line_buf + pos + buf->line_keys[idx].key_len, 
Line 1050  cliInit(int fin, int fout, const char *prompt) Line 1051  cliInit(int fin, int fout, const char *prompt)
                         keys[i].key_func = bufEOL;                          keys[i].key_func = bufEOL;
                 if (cli_buffer->line_prompt && (i == *K_CTRL_H || i == *K_BACKSPACE))                  if (cli_buffer->line_prompt && (i == *K_CTRL_H || i == *K_BACKSPACE))
                         keys[i].key_func = bufBS;                          keys[i].key_func = bufBS;
                if (cli_buffer->line_prompt && i == *K_CTRL_C)                if (i == *K_CTRL_C)
                         keys[i].key_func = bufCLR;                          keys[i].key_func = bufCLR;
                 if (cli_buffer->line_prompt && i == *K_CTRL_A)                  if (cli_buffer->line_prompt && i == *K_CTRL_A)
                         keys[i].key_func = bufBEGIN;                          keys[i].key_func = bufBEGIN;
Line 1058  cliInit(int fin, int fout, const char *prompt) Line 1059  cliInit(int fin, int fout, const char *prompt)
                         keys[i].key_func = bufEND;                          keys[i].key_func = bufEND;
                 if (cli_buffer->line_prompt && i == *K_TAB)                  if (cli_buffer->line_prompt && i == *K_TAB)
                         keys[i].key_func = bufComp;                          keys[i].key_func = bufComp;
                if (cli_buffer->line_prompt && i == *K_CTRL_Z)                if (i == *K_CTRL_Z)
                         keys[i].key_func = bufEndNode;                          keys[i].key_func = bufEndNode;
                 if (i >= *K_SPACE && i < *K_BACKSPACE)                  if (i >= *K_SPACE && i < *K_BACKSPACE)
                         keys[i].key_func = bufCHAR;                          keys[i].key_func = bufCHAR;
Line 1267  cliInitLine(linebuffer_t * __restrict cli_buffer) Line 1268  cliInitLine(linebuffer_t * __restrict cli_buffer)
  *   *
  * @cli_buffer = CLI buffer   * @cli_buffer = CLI buffer
  * @timeout = Session timeout (-1 infinit)   * @timeout = Session timeout (-1 infinit)
  * @cmd_name = If timeout reached, we should call with this cmd_name (default name is "exit")  
  * return: NULL if error or !=NULL readed line, must be e_free after use!   * return: NULL if error or !=NULL readed line, must be e_free after use!
 */  */
 char *  char *
cliReadLine(linebuffer_t * __restrict cli_buffer, int timeout, const char *cmd_name)cliReadLine(linebuffer_t * __restrict cli_buffer, int timeout)
 {  {
         int code, readLen, ret;          int code, readLen, ret;
         register int i;          register int i;
Line 1292  cliReadLine(linebuffer_t * __restrict cli_buffer, int  Line 1292  cliReadLine(linebuffer_t * __restrict cli_buffer, int 
         while (42) {          while (42) {
                 if ((ret = poll(&fds, 1, timeout)) < 1) {                  if ((ret = poll(&fds, 1, timeout)) < 1) {
                         if (!ret) {                          if (!ret) {
                                if (str)                                cli_buffer->line_kill = 1;
                                 if (str) {
                                         e_free(str);                                          e_free(str);
                                str = e_strdup(cmd_name ? cmd_name : "exit");                                        str = NULL;
                                 }
                         } else                          } else
                                 LOGERR;                                  LOGERR;
                         return str;                          return str;
Line 1352  recheck: Line 1354  recheck:
  * @csHistFile = History file name   * @csHistFile = History file name
  * @sock = client socket   * @sock = client socket
  * @timeout = Session timeout (-1 infinit)   * @timeout = Session timeout (-1 infinit)
  * @cmd_name = If timeout reached, we should call with this cmd_name (default name is "exit")  
  * return: RETCODE_ERR error, RETCODE_OK ok   * return: RETCODE_ERR error, RETCODE_OK ok
 */  */
 int  int
 cliNetLoop(linebuffer_t * __restrict cli_buffer, const char *csHistFile,   cliNetLoop(linebuffer_t * __restrict cli_buffer, const char *csHistFile, 
                int sock, int timeout, const char *cmd_name)                int sock, int timeout)
 {  {
         u_char buf[BUFSIZ];          u_char buf[BUFSIZ];
         int pid, stat, pty, r, s, alen, flg, attrlen = 0, ret = 0;          int pid, stat, pty, r, s, alen, flg, attrlen = 0, ret = 0;
Line 1376  cliNetLoop(linebuffer_t * __restrict cli_buffer, const Line 1377  cliNetLoop(linebuffer_t * __restrict cli_buffer, const
                         } else                          } else
                                 close(sock);                                  close(sock);
   
                        ret = cliLoop(cli_buffer, csHistFile, timeout, cmd_name) < 0 ? 1 : 0;                        ret = cliLoop(cli_buffer, csHistFile, timeout) < 0 ? 1 : 0;
                         cliEnd(cli_buffer);                          cliEnd(cli_buffer);
   
                         _exit(ret);                          _exit(ret);
Line 1470  cliNetLoop(linebuffer_t * __restrict cli_buffer, const Line 1471  cliNetLoop(linebuffer_t * __restrict cli_buffer, const
  * @cli_buffer = CLI buffer   * @cli_buffer = CLI buffer
  * @csHistFile = History file name   * @csHistFile = History file name
  * @timeout = Session timeout (-1 infinit)   * @timeout = Session timeout (-1 infinit)
  * @cmd_name = If timeout reached, we should call with this cmd_name (default name is "exit")  
  * return: RETCODE_ERR error, RETCODE_OK ok   * return: RETCODE_ERR error, RETCODE_OK ok
 */  */
 int  int
cliLoop(linebuffer_t * __restrict cli_buffer, const char *csHistFile, cliLoop(linebuffer_t * __restrict cli_buffer, const char *csHistFile, int timeout)
                int timeout, const char *cmd_name) 
 {  {
         char *line, *s, *t, **app, *items[MAX_PROMPT_ITEMS];          char *line, *s, *t, **app, *items[MAX_PROMPT_ITEMS];
         register int i;          register int i;
Line 1489  cliLoop(linebuffer_t * __restrict cli_buffer, const ch Line 1488  cliLoop(linebuffer_t * __restrict cli_buffer, const ch
                 return RETCODE_ERR;                  return RETCODE_ERR;
   
         do {          do {
                line = cliReadLine(cli_buffer, timeout, cmd_name);                line = cliReadLine(cli_buffer, timeout);
                 if (!line) {                  if (!line) {
                         printfNL(cli_buffer, 0);                          printfNL(cli_buffer, 0);
                         break;                          break;
Line 1519  cliLoop(linebuffer_t * __restrict cli_buffer, const ch Line 1518  cliLoop(linebuffer_t * __restrict cli_buffer, const ch
                         }                          }
   
                         if (!cmd) {                          if (!cmd) {
                                cli_Printf(cli_buffer, "\nCommand '%s' not found!\n", items[0]);                                cli_Printf(cli_buffer, "%sCommand '%s' not found!\n", 
                                                 cli_buffer->line_prompt ? "\n" : "", items[0]);
                                 ret = -1;                                  ret = -1;
                         } else                          } else
                                 if (cmd->cmd_func) {                                  if (cmd->cmd_func) {
                                        cli_Printf(cli_buffer, "\n");                                        if (cli_buffer->line_prompt)
                                                 cli_Printf(cli_buffer, "\n");
                                         ret = cmd->cmd_func(cli_buffer,                                           ret = cmd->cmd_func(cli_buffer, 
                                                         cli_buffer->line_level, items);                                                          cli_buffer->line_level, items);
                                 } else {                                  } else {
Line 1535  cliLoop(linebuffer_t * __restrict cli_buffer, const ch Line 1536  cliLoop(linebuffer_t * __restrict cli_buffer, const ch
                 cli_freeLine(cli_buffer);                  cli_freeLine(cli_buffer);
                 cli_resetHistory(cli_buffer);                  cli_resetHistory(cli_buffer);
                 e_free(line);                  e_free(line);
        } while (ret < 1);        } while (cli_buffer->line_kill || ret < 1);
   
         cli_saveHistory(cli_buffer, csHistFile, HISTORY_LINES);          cli_saveHistory(cli_buffer, csHistFile, HISTORY_LINES);
         return ret;          return ret;

Removed from v.1.11  
changed lines
  Added in v.1.13


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>