#include <assert.h>
#include <errno.h>
#include <locale.h>
#include <stdio.h>
#include <wchar.h>
#include <err.h>
#include "chared.c"
#define EL EditLine *el __attribute__((__unused__))
#define UU __attribute__((__unused__))
int hist_enlargebuf(EL, size_t oldsz UU, size_t newsz UU) { return 1; }
void re_refresh(EL) { }
void re_refresh_cursor(EL) { }
void terminal_beep(EL) { putchar('\a'); }
el_action_t
ed_end_of_file(EditLine *el, wint_t c UU) {
*el->el_line.lastchar = '\0';
return CC_EOF;
}
int
el_wgetc(EL, wchar_t *cp) {
return (*cp = getwchar()) != WEOF ? 1 : feof(stdin) ? 0 : -1;
}
#undef EL
#undef UU
int
main()
{
EditLine el;
wchar_t buf[EL_BUFSIZ];
int i, len;
if (setlocale(LC_CTYPE, "") == NULL)
err(1, "setlocale");
if (ch_init(&el) == -1)
err(1, "ch_init");
while (feof(stdin) == 0) {
errno = 0;
if ((len = c_gets(&el, buf, L"$")) == -1) {
if (feof(stdin))
fputs("eof:", stdout);
if (ferror(stdin)) {
fputs("error:", stdout);
clearerr(stdin);
}
printf("%d:", errno);
}
printf("%d:", len);
if (len > 0) {
for (i = 0; i < len; i++)
putwchar(buf[i]);
putchar(':');
for (i = 1; i <= len; i++)
putwchar(el.el_line.buffer[i]);
puts(":");
} else
puts("::");
assert(el.el_line.buffer[0] == '\0');
assert(el.el_line.lastchar == el.el_line.buffer);
assert(el.el_line.cursor == el.el_line.buffer);
}
return 0;
}