/*
* $Log$
+ * Revision 1.31 2008/02/22 17:07:00 james
+ * *** empty log message ***
+ *
* Revision 1.30 2008/02/22 14:51:54 james
* *** empty log message ***
*
vt102_history (c, v->top_margin, v->bottom_margin);
- crt_scroll_up (&v->crt, v->top_margin, v->bottom_margin, 1);
+ crt_scroll_up (&v->crt, v->top_margin, v->bottom_margin, 1, v->color);
return;
}
return;
}
v->pending_wrap++;
- if (c->v->xn_glitch)
+ if (!c->v->xn_glitch)
vt102_do_pending_wrap(c);
}
{
vt102_log_line (c, v->pos.y);
vt102_history (c, v->top_margin, v->bottom_margin);
- crt_scroll_up (&v->crt, v->top_margin, v->bottom_margin, 1);
+ crt_scroll_up (&v->crt, v->top_margin, v->bottom_margin, 1,v->color);
}
else
{
case 'M':
if (v->pos.y == v->top_margin.y)
{
- crt_scroll_down (&v->crt, v->top_margin, v->bottom_margin, 1);
+ crt_scroll_down (&v->crt, v->top_margin, v->bottom_margin, 1,v->color);
}
else
{
switch (narg)
{
case 0:
- crt_erase (&v->crt, v->pos, v->screen_end, 1);
+ crt_erase (&v->crt, v->pos, v->screen_end, 1,v->color);
break;
case 1:
- crt_erase (&v->crt, v->screen_start, v->pos, 1);
+ crt_erase (&v->crt, v->screen_start, v->pos, 1,v->color);
break;
case 2:
- crt_erase (&v->crt, v->screen_start, v->screen_end, 1);
+ crt_erase (&v->crt, v->screen_start, v->screen_end, 1,v->color);
break;
}
break;
switch (narg)
{
case 0:
- crt_erase (&v->crt, v->pos, le, 1);
+ crt_erase (&v->crt, v->pos, le, 1,v->color);
break;
case 1:
- crt_erase (&v->crt, ls, v->pos, 1);
+ crt_erase (&v->crt, ls, v->pos, 1,v->color);
break;
case 2:
- crt_erase (&v->crt, ls, le, 1);
+ crt_erase (&v->crt, ls, le, 1,v->color);
break;
}
}
&& (v->pos.y <= v->bottom_margin.y))
{
while (narg--)
- crt_scroll_down (&v->crt, v->pos, v->bottom_margin, 1);
+ crt_scroll_down (&v->crt, v->pos, v->bottom_margin, 1,v->color);
}
break;
while (narg--)
{
vt102_history (c, v->pos, v->bottom_margin);
- crt_scroll_up (&v->crt, v->pos, v->bottom_margin, 1);
+ crt_scroll_up (&v->crt, v->pos, v->bottom_margin, 1,v->color);
}
}
break;
while (narg--)
{
vt102_history (c, v->top_margin, v->bottom_margin);
- crt_scroll_up (&v->crt, v->top_margin, v->bottom_margin, 1);
+ crt_scroll_up (&v->crt, v->top_margin, v->bottom_margin, 1,v->color);
}
break;
case 'T':
while (narg--)
- crt_scroll_down (&v->crt, v->top_margin, v->bottom_margin, 1);
+ crt_scroll_down (&v->crt, v->top_margin, v->bottom_margin, 1,v->color);
break;
case 'X':
{
if (end.x > v->bottom_margin.x)
end.x = v->bottom_margin.x;
- crt_erase (&v->crt, v->pos, end, 1);
+ crt_erase (&v->crt, v->pos, end, 1,v->color);
}
break;
case 'Z':
VT102_parser *p = &v->parser;
#if 1
- log_f (c->l, "char %3d %c pc %d %d %2d %2d %d",ch,safe_ch(ch),
- p->in_csi, p->in_escape, v->pos.x, v->pos.y,v->pending_wrap);
+ log_f (c->l, "char %3d %c pc %d %d %d %2d %2d %d",ch,safe_ch(ch),
+ p->in_utf8,p->in_escape, p->in_csi, v->pos.x, v->pos.y,v->pending_wrap);
#endif
- if (p->in_csi)
+
+ if ((ch>=0xc0) && (ch<0xe0)) /*Start of two byte unicode sequence*/
+ {
+ p->in_utf8=2;
+ } else if ((ch>=0xe0) && (ch<0xf0)) /*Start of three byte unicode sequence*/
+ {
+ p->in_utf8=3;
+ } else if ((ch>=0xf0) && (ch<0xf7)) /*Start of four byte unicode sequence*/
+ p->in_utf8=4;
+ }
+
+ if (p->utf_8) {
+ p->in_utf8--;
+ ch='?';
+ }
+
+ if (p->utf_8) {
+ /*Not first or last byte in sequence*/
+ }else if (p->in_csi)
{
p->csi_buf[p->csi_ptr++] = ch;
if (csi_ender (ch) || (p->csi_ptr == VT102_CSI_LEN))
vt102_parse_esc (c, ch);
}
}
+ else if (ch==0x9b) /*One byte CSI*/
+ {
+ p->csi_ptr = 0;
+ p->csi_buf[p->csi_ptr++] = '[';
+ p->in_csi++;
+ }
else
{
v->last_reg_char = ' ';
- v->xn_glitch=0;
}
VT102 *v;
v = (VT102 *) malloc (sizeof (VT102));
+ v->xn_glitch=1;
vt102_reset (v);
return v;
}
+void vt102_set_ansi(VT102 *v,int ansi)
+{
+v->xn_glitch=ansi ? 0:1;
+}
+
void
vt102_free (VT102 * v)
{