/*
* $Log$
+ * Revision 1.32 2008/02/22 19:12:05 james
+ * *** empty log message ***
+ *
+ * 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':
}
+void
+vt102_parser_reset (VT102_parser * p)
+{
+ p->in_csi = 0;
+ p->in_escape = 0;
+}
+
+
+void
+vt102_reset_state(VT102 *v)
+{
+ vt102_parser_reset(&v->parser);
+
+ v->attr = CRT_ATTR_NORMAL;
+ v->color = CRT_COLOR_NORMAL;
+
+ v->application_keypad_mode = 0;
+
+ v->top_margin = v->screen_start;
+ v->bottom_margin = v->screen_end;
+
+ memset (v->modes, 0, VT102_NMODES);
+ memset (v->private_modes, 0, VT102_NMODES);
+
+ v->private_modes[VT102_PRIVATE_MODE_AUTO_WRAP] = 1;
+ v->private_modes[VT102_PRIVATE_MODE_AUTO_REPEAT] = 1;
+ v->private_modes[VT102_PRIVATE_MODE_SHOW_CURSOR] = 1;
+ v->modes[VT102_MODE_LOCAL_ECHO_OFF] = 1;
+
+ vt102_reset_tabs (v);
+}
+
+
void
vt102_parse_char (Context * c, int ch)
{
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==SYM_CHAR_RESET) {
+ vt102_reset_state(v);
+ } 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
{
cmd_show_status (c->d, c);
}
-vt102_parse (Context * c, char *buf, int len)
-{
- while (len--)
- vt102_parse_char (c, *(buf++));
-}
-
-
-void
-vt102_parser_reset (VT102_parser * p)
-{
- p->in_csi = 0;
- p->in_escape = 0;
- p->csi_ptr = 0;
-}
-
-
void
vt102_send (Context * c, uint8_t key)
{
VT102_parser *p = &v->parser;
vt102_parser_reset (p);
- crt_cls (&v->crt);
-
- v->attr = CRT_ATTR_NORMAL;
- v->color = CRT_COLOR_NORMAL;
-
- v->application_keypad_mode = 0;
+ vt102_reset_state(p);
+ crt_cls (&v->crt);
v->current_line = v->pos;
v->pending_wrap = 0;
v->screen_end.x = VT102_COLS - 1;
v->screen_end.y = VT102_ROWS - 1;
- v->top_margin = v->screen_start;
- v->bottom_margin = v->screen_end;
-
- memset (v->modes, 0, VT102_NMODES);
- memset (v->private_modes, 0, VT102_NMODES);
-
- v->private_modes[VT102_PRIVATE_MODE_AUTO_WRAP] = 1;
- v->private_modes[VT102_PRIVATE_MODE_AUTO_REPEAT] = 1;
- v->private_modes[VT102_PRIVATE_MODE_SHOW_CURSOR] = 1;
- v->modes[VT102_MODE_LOCAL_ECHO_OFF] = 1;
-
vt102_cursor_home (v);
+ vt102_status_line (v, "");
+
vt102_reset_tabs (v);
v->current_line = v->pos;
vt102_save_state (v);
- vt102_status_line (v, "");
-
v->last_reg_char = ' ';
-
- v->xn_glitch=0;
-
}
-
-int
-vt102_dispatch (Context * c)
-{
- char buf[1024];
- int red;
-
- red = c->t->recv (c->t, buf, sizeof (buf));
-
- if (red < 0)
- return -1;
- if (!red)
- return 0;
-
-
- vt102_parse (c, buf, red);
-
- return 0;
-}
-
-
-int
-vt102_dispatch_one (Context * c)
-{
- char buf;
- int red;
-
- red = c->t->recv (c->t, &buf, sizeof (buf));
-
- if (red < 0)
- return -1;
- if (!red)
- return 0;
-
- vt102_parse_char (c, buf);
-
- return 0;
-}
-
VT102 *
vt102_new (void)
{
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)
{