Diff for /libaitcli/src/aitcli.c between versions 1.21.2.3 and 1.21.2.7

version 1.21.2.3, 2025/12/23 23:11:13 version 1.21.2.7, 2025/12/24 00:49:52
Line 84  cli_SetErr(int eno, char *estr, ...) Line 84  cli_SetErr(int eno, char *estr, ...)
 // ------------------------------------------------------------  // ------------------------------------------------------------
   
 static inline void  static inline void
clrscrEOL(linebuffer_t * __restrict buf)rewindin(linebuffer_t * __restrict buf, int len)
 {  {
           int ign __attribute__((unused));
   
           if (buf) {
                   if (len == -1)
                           len = buf->line_posin;
                   while (len-- > 0)
                           ign = write(buf->line_out, K_CTRL_H, 1);
           }
   }
   
   static inline void
   clrscrEOLin(linebuffer_t * __restrict buf)
   {
         register int i;          register int i;
         int ign __attribute__((unused));          int ign __attribute__((unused));
   
        if (buf && buf->line_prompt) {        if (buf) {
                ign = write(buf->line_out, K_CR, 1);                rewindin(buf, -1);
   
                for (i = 0; i < buf->line_len; i++)                for (i = 0; i < buf->line_lenin; i++)
                         ign = write(buf->line_out, K_SPACE, 1);                          ign = write(buf->line_out, K_SPACE, 1);
         }          }
 }  }
   
 static inline void  static inline void
rewindin(linebuffer_t * __restrict buf, int len)clrscrEOL(linebuffer_t * __restrict buf)
 {  {
           register int i;
         int ign __attribute__((unused));          int ign __attribute__((unused));
   
        if (buf) {        if (buf && buf->line_prompt) {
                if (len == -1)                ign = write(buf->line_out, K_CR, 1);
                        len = buf->line_posin;
                while (len-- > 0)                for (i = 0; i < buf->line_len; i++)
                        ign = write(buf->line_out, K_CTRL_H, 1);                        ign = write(buf->line_out, K_SPACE, 1);
         }          }
 }  }
   
Line 330  bufCLRin(int idx, void * __restrict cli_buffer) Line 344  bufCLRin(int idx, void * __restrict cli_buffer)
         if (!cli_buffer || idx < 0 || idx > MAX_BINDKEY)          if (!cli_buffer || idx < 0 || idx > MAX_BINDKEY)
                 return RETCODE_ERR;                  return RETCODE_ERR;
   
        memset(buf->line_input, ' ', buf->line_lenin);        clrscrEOLin(buf);
        rewindin(buf, -1);        rewindin(buf, buf->line_lenin);
        printfEOLin(buf); 
        rewindin(buf, -1); 
         cli_freeInput(cli_buffer);          cli_freeInput(cli_buffer);
         return RETCODE_OK;          return RETCODE_OK;
 }  }
Line 352  bufCLR(int idx, void * __restrict cli_buffer) Line 364  bufCLR(int idx, void * __restrict cli_buffer)
 }  }
   
 static int  static int
   bufBSin(int idx, void * __restrict cli_buffer)
   {
           linebuffer_t *buf = cli_buffer;
   
           if (!cli_buffer || idx < 0 || idx > MAX_BINDKEY)
                   return RETCODE_ERR;
   
           if (buf->line_posin > 0) {
                   clrscrEOLin(buf);
                   rewindin(buf, -1);
   
                   buf->line_posin--;
                   buf->line_lenin--;
                   memmove(buf->line_input + buf->line_posin,
                                   buf->line_input + buf->line_posin + 1,
                                   buf->line_lenin - buf->line_posin);
                   buf->line_input[buf->line_lenin] = 0;
   
                   rewindin(buf, buf->line_lenin - buf->line_posin);
                   printfEOLin(buf);
                   rewindin(buf, buf->line_lenin - buf->line_posin);
           }
   
           return RETCODE_OK;
   }
   
   static int
 bufBS(int idx, void * __restrict cli_buffer)  bufBS(int idx, void * __restrict cli_buffer)
 {  {
         linebuffer_t *buf = cli_buffer;          linebuffer_t *buf = cli_buffer;
Line 466  bufEND(int idx, void * __restrict cli_buffer) Line 505  bufEND(int idx, void * __restrict cli_buffer)
 }  }
   
 static int  static int
   bufLEFTin(int idx, void * __restrict cli_buffer)
   {
           linebuffer_t *buf = cli_buffer;
   
           if (!cli_buffer || idx < 0 || idx > MAX_BINDKEY)
                   return RETCODE_ERR;
   
           if (buf->line_posin > 0) {
                   rewindin(buf, 1);
                   buf->line_posin--;
           }
   
           return RETCODE_OK;
   }
   
   static int
 bufLEFT(int idx, void * __restrict cli_buffer)  bufLEFT(int idx, void * __restrict cli_buffer)
 {  {
         linebuffer_t *buf = cli_buffer;          linebuffer_t *buf = cli_buffer;
Line 480  bufLEFT(int idx, void * __restrict cli_buffer) Line 535  bufLEFT(int idx, void * __restrict cli_buffer)
 }  }
   
 static int  static int
   bufRIGHTin(int idx, void * __restrict cli_buffer)
   {
           linebuffer_t *buf = cli_buffer;
   
           if (!cli_buffer || idx < 0 || idx > MAX_BINDKEY)
                   return RETCODE_ERR;
   
           if (buf->line_posin < buf->line_lenin) {
                   write(buf->line_out, buf->line_input + buf->line_posin, 1);
                   buf->line_posin++;
           }
   
           return RETCODE_OK;
   }
   
   static int
 bufRIGHT(int idx, void * __restrict cli_buffer)  bufRIGHT(int idx, void * __restrict cli_buffer)
 {  {
         linebuffer_t *buf = cli_buffer;          linebuffer_t *buf = cli_buffer;
Line 494  bufRIGHT(int idx, void * __restrict cli_buffer) Line 565  bufRIGHT(int idx, void * __restrict cli_buffer)
 }  }
   
 static int  static int
   bufDELin(int idx, void * __restrict cli_buffer)
   {
           linebuffer_t *buf = cli_buffer;
   
           if (!cli_buffer || idx < 0 || idx > MAX_BINDKEY)
                   return RETCODE_ERR;
   
           if (buf->line_lenin > 0 && buf->line_posin < buf->line_lenin) {
                   clrscrEOLin(buf);
                   rewindin(buf, buf->line_lenin);
   
                   buf->line_lenin--;
                   memmove(buf->line_input + buf->line_posin,
                                   buf->line_input + buf->line_posin + 1,
                                   buf->line_lenin - buf->line_posin);
                   buf->line_input[buf->line_lenin] = 0;
   
                   printfEOLin(buf);
                   rewindin(buf, buf->line_lenin - buf->line_posin);
           }
   
           return RETCODE_OK;
   }
   
   static int
 bufDEL(int idx, void * __restrict cli_buffer)  bufDEL(int idx, void * __restrict cli_buffer)
 {  {
         linebuffer_t *buf = cli_buffer;          linebuffer_t *buf = cli_buffer;
Line 501  bufDEL(int idx, void * __restrict cli_buffer) Line 597  bufDEL(int idx, void * __restrict cli_buffer)
         if (!cli_buffer || idx < 0 || idx > MAX_BINDKEY)          if (!cli_buffer || idx < 0 || idx > MAX_BINDKEY)
                 return RETCODE_ERR;                  return RETCODE_ERR;
   
        clrscrEOL(buf);        if (buf->line_bol < buf->line_eol && buf->line_eol < buf->line_len) {
                 clrscrEOL(buf);
   
        buf->line_len--;                buf->line_len--;
        memmove(buf->line_buf + buf->line_eol - buf->line_bol,                 memmove(buf->line_buf + buf->line_eol - buf->line_bol, 
                        buf->line_buf + buf->line_eol - buf->line_bol + 1,                                 buf->line_buf + buf->line_eol - buf->line_bol + 1, 
                        buf->line_len - buf->line_eol);                                buf->line_len - buf->line_eol);
        buf->line_buf[buf->line_len - 1] = 0;                buf->line_buf[buf->line_len - 1] = 0;
   
        printfEOL(buf, buf->line_len - 1, 1);                printfEOL(buf, buf->line_len - 1, 1);
        printfEOL(buf, -1, 1);                printfEOL(buf, -1, 1);
         }
   
         return RETCODE_OK;          return RETCODE_OK;
 }  }
Line 1224  cliInit(int fin, int fout, const char *prompt) Line 1322  cliInit(int fin, int fout, const char *prompt)
                         keys[i].key_func = bufEOL;                          keys[i].key_func = bufEOL;
                         inkeys[i].key_func = bufEOLin;                          inkeys[i].key_func = bufEOLin;
                 }                  }
                if (cli_buffer->line_prompt && (i == *K_CTRL_H || i == *K_BACKSPACE))                if (i == *K_CTRL_H || i == *K_BACKSPACE) {
                        keys[i].key_func = bufBS;                        if (cli_buffer->line_prompt)
                                 keys[i].key_func = bufBS;
                         inkeys[i].key_func = bufBSin;
                 }
                 if (i == *K_CTRL_C) {                  if (i == *K_CTRL_C) {
                         keys[i].key_func = bufCLR;                          keys[i].key_func = bufCLR;
                         inkeys[i].key_func = bufCLRin;                          inkeys[i].key_func = bufCLRin;
Line 1402  cliInit(int fin, int fout, const char *prompt) Line 1503  cliInit(int fin, int fout, const char *prompt)
         keys[i].key_len = inkeys[i].key_len = sizeof K_RIGHT - 1;          keys[i].key_len = inkeys[i].key_len = sizeof K_RIGHT - 1;
         if (cli_buffer->line_prompt)          if (cli_buffer->line_prompt)
                 keys[i].key_func = bufRIGHT;                  keys[i].key_func = bufRIGHT;
           inkeys[i].key_func = bufRIGHTin;
         memcpy(keys[i].key_ch, K_RIGHT, keys[i].key_len);          memcpy(keys[i].key_ch, K_RIGHT, keys[i].key_len);
         memcpy(inkeys[i].key_ch, K_RIGHT, inkeys[i].key_len);          memcpy(inkeys[i].key_ch, K_RIGHT, inkeys[i].key_len);
         i++;          i++;
         keys[i].key_len = inkeys[i].key_len = sizeof K_LEFT - 1;          keys[i].key_len = inkeys[i].key_len = sizeof K_LEFT - 1;
         if (cli_buffer->line_prompt)          if (cli_buffer->line_prompt)
                 keys[i].key_func = bufLEFT;                  keys[i].key_func = bufLEFT;
           inkeys[i].key_func = bufLEFTin;
         memcpy(keys[i].key_ch, K_LEFT, keys[i].key_len);          memcpy(keys[i].key_ch, K_LEFT, keys[i].key_len);
         memcpy(inkeys[i].key_ch, K_LEFT, inkeys[i].key_len);          memcpy(inkeys[i].key_ch, K_LEFT, inkeys[i].key_len);
         i++;          i++;
Line 1421  cliInit(int fin, int fout, const char *prompt) Line 1524  cliInit(int fin, int fout, const char *prompt)
         keys[i].key_len = inkeys[i].key_len = sizeof K_INS - 1;          keys[i].key_len = inkeys[i].key_len = sizeof K_INS - 1;
         if (cli_buffer->line_prompt)          if (cli_buffer->line_prompt)
                 keys[i].key_func = bufMODE;                  keys[i].key_func = bufMODE;
           inkeys[i].key_func = bufMODE;
         memcpy(keys[i].key_ch, K_INS, keys[i].key_len);          memcpy(keys[i].key_ch, K_INS, keys[i].key_len);
         memcpy(inkeys[i].key_ch, K_INS, inkeys[i].key_len);          memcpy(inkeys[i].key_ch, K_INS, inkeys[i].key_len);
         i++;          i++;
         keys[i].key_len = inkeys[i].key_len = sizeof K_DEL - 1;          keys[i].key_len = inkeys[i].key_len = sizeof K_DEL - 1;
         if (cli_buffer->line_prompt)          if (cli_buffer->line_prompt)
                 keys[i].key_func = bufDEL;                  keys[i].key_func = bufDEL;
           inkeys[i].key_func = bufDELin;
         memcpy(keys[i].key_ch, K_DEL, keys[i].key_len);          memcpy(keys[i].key_ch, K_DEL, keys[i].key_len);
         memcpy(inkeys[i].key_ch, K_DEL, inkeys[i].key_len);          memcpy(inkeys[i].key_ch, K_DEL, inkeys[i].key_len);
         i++;          i++;

Removed from v.1.21.2.3  
changed lines
  Added in v.1.21.2.7


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