Diff for /libaitcli/src/aitcli.c between versions 1.2.2.17 and 1.3

version 1.2.2.17, 2010/06/09 09:32:30 version 1.3, 2011/03/16 17:24:03
Line 507  cli_Printf(linebuffer_t * __restrict buffer, char *fmt Line 507  cli_Printf(linebuffer_t * __restrict buffer, char *fmt
 inline void  inline void
 cli_PrintHelp(linebuffer_t * __restrict buffer)  cli_PrintHelp(linebuffer_t * __restrict buffer)
 {  {
        if (buffer)        if (buffer) {
                 bufHelp(0, buffer);                  bufHelp(0, buffer);
        else                clrscrEOL(buffer);
         } else
                 cli_SetErr(EINVAL, "Error:: invalid input parameters ...");                  cli_SetErr(EINVAL, "Error:: invalid input parameters ...");
 }  }
   
Line 906  cliInit(int fin, int fout, const char *prompt) Line 907  cliInit(int fin, int fout, const char *prompt)
         linebuffer_t *buffer;          linebuffer_t *buffer;
         bindkey_t *keys;          bindkey_t *keys;
         register int i;          register int i;
         struct termios t;  
   
         memset(&t, 0, sizeof t);  
         /* init buffer */          /* init buffer */
        buffer = malloc(sizeof (linebuffer_t));        buffer = malloc(sizeof(linebuffer_t));
         if (!buffer) {          if (!buffer) {
                 LOGERR;                  LOGERR;
                 return NULL;                  return NULL;
Line 1148  cliInit(int fin, int fout, const char *prompt) Line 1147  cliInit(int fin, int fout, const char *prompt)
         memcpy(keys[i].key_ch, K_F12, keys[i].key_len);          memcpy(keys[i].key_ch, K_F12, keys[i].key_len);
         i++;          i++;
   
           buffer->line_keys = keys;
           return buffer;
   }
   
   /*
    * cliInitLine() Init CLI input line terminal
    * @buffer = CLI buffer
    * return: none
   */
   int
   cliInitLine(linebuffer_t * __restrict buffer)
   {
           struct termios t;
   
           memset(&t, 0, sizeof t);
         tcgetattr(buffer->line_in, &t);          tcgetattr(buffer->line_in, &t);
         t.c_lflag &= ~(ICANON | ISIG | IEXTEN | ECHO | ECHOCTL | ECHOE | ECHOK | ECHOKE | ECHONL | ECHOPRT);          t.c_lflag &= ~(ICANON | ISIG | IEXTEN | ECHO | ECHOCTL | ECHOE | ECHOK | ECHOKE | ECHONL | ECHOPRT);
         t.c_iflag |= IGNBRK;          t.c_iflag |= IGNBRK;
         t.c_cc[VMIN] = 1;          t.c_cc[VMIN] = 1;
         t.c_cc[VTIME] = 0;          t.c_cc[VTIME] = 0;
        tcsetattr(buffer->line_in, TCSANOW, &t);        return tcsetattr(buffer->line_in, TCSANOW, &t);
 
        buffer->line_keys = keys; 
        return buffer; 
 }  }
   
 /*  /*
Line 1190  cliReadLine(linebuffer_t * __restrict buffer) Line 1201  cliReadLine(linebuffer_t * __restrict buffer)
   
                 memset(buf, 0, sizeof buf);                  memset(buf, 0, sizeof buf);
                 readLen = read(buffer->line_in, buf, BUFSIZ);                  readLen = read(buffer->line_in, buf, BUFSIZ);
                 printf("+++ %s %d\n", buf, readLen);  
                 if (readLen == -1) {                  if (readLen == -1) {
                         LOGERR;                          LOGERR;
                         return str;                          return str;
Line 1245  int Line 1255  int
 cliNetLoop(linebuffer_t * __restrict buffer, const char *csHistFile, int sock)  cliNetLoop(linebuffer_t * __restrict buffer, const char *csHistFile, int sock)
 {  {
         u_char buf[BUFSIZ];          u_char buf[BUFSIZ];
        int pty, r, s, alen, flg, attrlen = 0, ret = 0;        int pid, stat, pty, r, s, alen, flg, attrlen = 0, ret = 0;
         fd_set fds;          fd_set fds;
         struct timeval tv = { DEFAULT_SOCK_TIMEOUT, 0 };          struct timeval tv = { DEFAULT_SOCK_TIMEOUT, 0 };
         struct telnetAttrs *a, Attr[10];          struct telnetAttrs *a, Attr[10];
   
        switch (forkpty(&pty, NULL, NULL, NULL)) {        switch ((pid = forkpty(&pty, NULL, NULL, NULL))) {
                 case -1:                  case -1:
                         LOGERR;                          LOGERR;
                         return -1;                          return -1;
                 case 0:                  case 0:
                        close(sock);                        if (!buffer) {
 
                        if (buffer) 
                                ret = cliLoop(buffer, csHistFile) < 0 ? 1 : 0; 
                        else 
                                 cli_SetErr(EINVAL, "Error:: invalid input parameters ...");                                  cli_SetErr(EINVAL, "Error:: invalid input parameters ...");
                                   return -1;
                           } else
                                   close(sock);
   
                        /* spawn Shell mode */                        ret = cliLoop(buffer, csHistFile) < 0 ? 1 : 0;
                        //execl("/bin/tcsh", "tcsh", NULL);                        cliEnd(buffer);
   
                        _exit(ret);                        exit(ret);
                 default:                  default:
                         telnet_SetCmd(Attr + 0, DO, TELOPT_TTYPE);                          telnet_SetCmd(Attr + 0, DO, TELOPT_TTYPE);
                         telnet_SetCmd(Attr + 1, WILL, TELOPT_ECHO);                          telnet_SetCmd(Attr + 1, WILL, TELOPT_ECHO);
Line 1280  cliNetLoop(linebuffer_t * __restrict buffer, const cha Line 1289  cliNetLoop(linebuffer_t * __restrict buffer, const cha
                                 flg = 0;                                  flg = 0;
   
                         while (42) {                          while (42) {
                                   if (waitpid(pid, &stat, WNOHANG))
                                           break;
   
                                 FD_ZERO(&fds);                                  FD_ZERO(&fds);
                                 FD_SET(sock, &fds);                                  FD_SET(sock, &fds);
                                 FD_SET(pty, &fds);                                  FD_SET(pty, &fds);
Line 1369  cliLoop(linebuffer_t * __restrict buffer, const char * Line 1381  cliLoop(linebuffer_t * __restrict buffer, const char *
         struct tagCommand *cmd;          struct tagCommand *cmd;
   
         /* --- main body of CLI --- */          /* --- main body of CLI --- */
           cliInitLine(buffer);
   
         if (cli_loadHistory(buffer, csHistFile) == RETCODE_ERR)          if (cli_loadHistory(buffer, csHistFile) == RETCODE_ERR)
                 return RETCODE_ERR;                  return RETCODE_ERR;
Line 1405  cliLoop(linebuffer_t * __restrict buffer, const char * Line 1418  cliLoop(linebuffer_t * __restrict buffer, const char *
                                 cli_Printf(buffer, "\nCommand '%s' not found!\n", items[0]);                                  cli_Printf(buffer, "\nCommand '%s' not found!\n", items[0]);
                                 ret = -1;                                  ret = -1;
                         } else                          } else
                                if (cmd->cmd_func)                                if (cmd->cmd_func) {
                                         cli_Printf(buffer, "\n");
                                         ret = cmd->cmd_func(buffer, i, items);                                          ret = cmd->cmd_func(buffer, i, items);
                                else {                                } else {
                                         clrscrEOL(buffer);                                          clrscrEOL(buffer);
                                         printfCR(buffer, 1);                                          printfCR(buffer, 1);
                                 }                                  }

Removed from v.1.2.2.17  
changed lines
  Added in v.1.3


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