[BACK]Return to chared.c CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / src / lib / libedit

Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.

Diff for /src/lib/libedit/chared.c between version 1.17 and 1.18

version 1.17, 2002/11/15 14:32:32 version 1.18, 2002/11/20 16:50:08
Line 654  el_deletestr(EditLine *el, int n)
Line 654  el_deletestr(EditLine *el, int n)
  *      Get a string   *      Get a string
  */   */
 protected int  protected int
 c_gets(EditLine *el, char *buf)  c_gets(EditLine *el, char *buf, const char *prompt)
 {  {
         char ch;          char ch;
         int len = 0;          int len;
           char *cp = el->el_line.buffer;
   
           if (prompt) {
                   len = strlen(prompt);
                   memcpy(cp, prompt, len + 0u);
                   cp += len;
           }
           len = 0;
   
           for (;;) {
                   el->el_line.cursor = cp;
                   *cp = ' ';
                   el->el_line.lastchar = cp + 1;
                   re_refresh(el);
   
                   if (el_getc(el, &ch) != 1) {
                           ed_end_of_file(el, 0);
                           len = -1;
                           break;
                   }
   
         for (ch = 0; ch == 0;) {  
                 if (el_getc(el, &ch) != 1)  
                         return (ed_end_of_file(el, 0));  
                 switch (ch) {                  switch (ch) {
   
                 case 0010:      /* Delete and backspace */                  case 0010:      /* Delete and backspace */
                 case 0177:                  case 0177:
                         if (len > 1) {                          if (len <= 0) {
                                 *el->el_line.cursor-- = '\0';                                  len = -1;
                                 el->el_line.lastchar = el->el_line.cursor;                                  break;
                                 buf[len--] = '\0';  
                         } else {  
                                 el->el_line.buffer[0] = '\0';  
                                 el->el_line.lastchar = el->el_line.buffer;  
                                 el->el_line.cursor = el->el_line.buffer;  
                                 return (CC_REFRESH);  
                         }                          }
                         re_refresh(el);                          cp--;
                         ch = 0;                          continue;
                         break;  
   
                 case 0033:      /* ESC */                  case 0033:      /* ESC */
                 case '\r':      /* Newline */                  case '\r':      /* Newline */
                 case '\n':                  case '\n':
                           buf[len] = ch;
                         break;                          break;
   
                 default:                  default:
                         if (len >= EL_BUFSIZ)                          if (len >= EL_BUFSIZ - 16)
                                 term_beep(el);                                  term_beep(el);
                         else {                          else {
                                 buf[len++] = ch;                                  buf[len++] = ch;
                                 *el->el_line.cursor++ = ch;                                  *cp++ = ch;
                                 el->el_line.lastchar = el->el_line.cursor;  
                         }                          }
                         re_refresh(el);                          continue;
                         ch = 0;  
                         break;  
                 }                  }
                   break;
         }          }
         buf[len] = ch;  
         return (len);          el->el_line.buffer[0] = '\0';
           el->el_line.lastchar = el->el_line.buffer;
           el->el_line.cursor = el->el_line.buffer;
           return len;
 }  }
   
   

Legend:
Removed from v.1.17  
changed lines
  Added in v.1.18

CVSweb <webmaster@jp.NetBSD.org>