aboutsummaryrefslogtreecommitdiffstats
path: root/src/ansi.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/ansi.c')
-rw-r--r--src/ansi.c21
1 files changed, 17 insertions, 4 deletions
diff --git a/src/ansi.c b/src/ansi.c
index 256f7fb..7a0d630 100644
--- a/src/ansi.c
+++ b/src/ansi.c
@@ -10,6 +10,9 @@ static char rcsid[] = "$Id$";
/*
* $Log$
+ * Revision 1.30 2008/02/24 00:42:53 james
+ * *** empty log message ***
+ *
* Revision 1.29 2008/02/23 11:48:37 james
* *** empty log message ***
*
@@ -316,21 +319,30 @@ ansi_set_attr (ANSI * a, int attr)
}
+static void
+ansi_emit_noutf8 (TTY * t, uint32_t ch)
+{
+ uint8_t c = (ch > 0x7f) ? '?' : ch;
+ t->xmit (t, &c, 1);
+}
static void
ansi_render (ANSI * a, CRT_CA ca)
{
int dif;
- if (ca.chr < 32)
+ if (ca.chr < 0x20)
ca.chr = ' ';
- if (ca.chr > 126)
+ if ((ca.chr > 0x7e) && (ca.chr < 0xa0))
ca.chr = ' ';
ansi_set_attr (a, ca.attr);
ansi_set_color (a, ca.color);
- a->terminal->xmit (a->terminal, &ca.chr, 1);
+ if (a->utf8)
+ utf8_emit (a->terminal, ca.chr);
+ else
+ ansi_emit_noutf8 (a->terminal, ca.chr);
a->pos.x++;
@@ -883,7 +895,7 @@ ansi_free (ANSI * a)
}
ANSI *
-ansi_new_from_terminal (TTY * t)
+ansi_new_from_terminal (TTY * t, int utf8)
{
ANSI *ret;
@@ -892,6 +904,7 @@ ansi_new_from_terminal (TTY * t)
ret->terminal = t;
+ ret->utf8 = utf8;
ret->update = ansi_update;
ret->reset = ansi_reset;
ret->terminal_reset = ansi_terminal_reset;