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; |
} |
} |
|
|
|
|