#include <tic.h>
#include <ctype.h>
-MODULE_ID("$Id: visbuf.c,v 1.23 2007/04/07 19:25:28 tom Exp $")
+MODULE_ID("$Id: visbuf.c,v 1.26 2007/06/09 17:21:53 tom Exp $")
+
+#define NormalLen(len) (unsigned) ((len + 1) * 4)
+#define WideLen(len) (unsigned) ((len + 1) * 4 * MB_CUR_MAX)
#ifdef TRACE
-static const char d_quote[] = {D_QUOTE, 0};
-static const char l_brace[] = {L_BRACE, 0};
-static const char r_brace[] = {R_BRACE, 0};
+static const char d_quote[] = StringOf(D_QUOTE);
+static const char l_brace[] = StringOf(L_BRACE);
+static const char r_brace[] = StringOf(R_BRACE);
#endif
static char *
} else if (c == '\033') {
*tp++ = '\\';
*tp++ = 'e';
+ } else if (UChar(c) == 0x7f) {
+ *tp++ = '\\';
+ *tp++ = '^';
+ *tp++ = '?';
} else if (is7bits(c) && iscntrl(UChar(c))) {
*tp++ = '\\';
*tp++ = '^';
len = strlen(buf);
#ifdef TRACE
- tp = vbuf = _nc_trace_buf(bufnum, (unsigned) (len * 4) + 5);
+ tp = vbuf = _nc_trace_buf(bufnum, NormalLen(len));
#else
{
static char *mybuf[4];
- mybuf[bufnum] = typeRealloc(char, (unsigned) (len * 4) + 5, mybuf[bufnum]);
+ mybuf[bufnum] = typeRealloc(char, NormalLen(len), mybuf[bufnum]);
tp = vbuf = mybuf[bufnum];
}
#endif
len = wcslen(buf);
#ifdef TRACE
- tp = vbuf = _nc_trace_buf(bufnum, (unsigned) (len * 4) + 5);
+ tp = vbuf = _nc_trace_buf(bufnum, WideLen(len));
#else
{
static char *mybuf[2];
- mybuf[bufnum] = typeRealloc(char, (unsigned) (len * 4) + 5, mybuf[bufnum]);
+ mybuf[bufnum] = typeRealloc(char, WideLen(len), mybuf[bufnum]);
tp = vbuf = mybuf[bufnum];
}
#endif
result = _nc_trace_bufcat(bufnum, l_brace);
result = _nc_trace_bufcat(bufnum, d_quote);
for (j = first; j <= last; ++j) {
- if ((found = _nc_altcharset_name(attr, (chtype) CharOf(buf[j]))) != 0) {
+ found = _nc_altcharset_name(attr, (chtype) CharOf(buf[j]));
+ if (found != 0) {
result = _nc_trace_bufcat(bufnum, found);
attr &= ~A_ALTCHARSET;
} else