aboutsummaryrefslogtreecommitdiffstats
path: root/src/vt102.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/vt102.c')
-rw-r--r--src/vt102.c89
1 files changed, 57 insertions, 32 deletions
diff --git a/src/vt102.c b/src/vt102.c
index 2132f83..f1e00e8 100644
--- a/src/vt102.c
+++ b/src/vt102.c
@@ -10,6 +10,9 @@ static char rcsid[] = "$Id$";
/*
* $Log$
+ * Revision 1.49 2008/02/28 11:27:48 james
+ * *** empty log message ***
+ *
* Revision 1.48 2008/02/27 09:42:53 james
* *** empty log message ***
*
@@ -394,6 +397,26 @@ in_margins (VT102 * v, CRT_Pos p)
return 1;
}
+void vt102_do_resize(Context *c)
+{
+
+VT102 *v=c->v;
+
+ v->crt.size = v->current_size;
+ v->crt.size.y++;
+ v->screen_end = v->current_size;
+ v->screen_end.x--;
+ v->screen_end.y--;
+ v->top_margin = v->screen_start;
+ v->bottom_margin = v->screen_end;
+ vt102_cursor_home (v);
+ crt_cls (&v->crt);
+
+ if (c->t)
+ tty_winch(c->t,v->current_size);
+}
+
+
void
vt102_log_line (Context * c, int line)
{
@@ -702,8 +725,9 @@ vt102_insert_into_line (VT102 * v, CRT_Pos p)
void
-vt102_change_mode (VT102 * v, int private, char *ns, int set)
+vt102_change_mode (Context *c, int private, char *ns, int set)
{
+ VT102 *v=c->v;
int m;
@@ -745,17 +769,7 @@ vt102_change_mode (VT102 * v, int private, char *ns, int set)
private_modes[VT102_PRIVATE_MODE_132COLS] ? VT102_COLS_132 :
VT102_COLS_80;
- v->crt.size = v->current_size;
- v->crt.size.y++;
- v->screen_end = v->current_size;
- v->screen_end.x--;
- v->screen_end.y--;
- v->top_margin = v->screen_start;
- v->bottom_margin = v->screen_end;
- vt102_cursor_home (v);
- crt_cls (&v->crt);
-
-
+ vt102_do_resize(c);
break;
}
@@ -769,8 +783,9 @@ vt102_change_mode (VT102 * v, int private, char *ns, int set)
}
void
-vt102_parse_mode_string (VT102 * v, char *buf, int len)
+vt102_parse_mode_string (Context *c, char *buf, int len)
{
+ VT102 *v=c->v;
int private = 0;
char last = buf[len - 1];
char num[4];
@@ -795,7 +810,7 @@ vt102_parse_mode_string (VT102 * v, char *buf, int len)
{
if (*buf == ';')
{
- vt102_change_mode (v, private, &num[o], last == 'h');
+ vt102_change_mode (c, private, &num[o], last == 'h');
memset (num, 0, sizeof (num));
o = sizeof (num) - 1;
buf++;
@@ -812,7 +827,7 @@ vt102_parse_mode_string (VT102 * v, char *buf, int len)
buf++;
}
- vt102_change_mode (v, private, &num[o], last == 'h');
+ vt102_change_mode (c, private, &num[o], last == 'h');
}
@@ -1281,7 +1296,7 @@ vt102_parse_csi (Context * c, char *buf, int len)
break;
case 'h':
case 'l':
- vt102_parse_mode_string (v, &buf[1], len - 1);
+ vt102_parse_mode_string (c, &buf[1], len - 1);
break;
@@ -1477,9 +1492,7 @@ vt102_parse_esc (Context * c)
vt102_send_id (c, terminal_id);
break;
case 'c':
- vt102_reset (v);
-
-
+ vt102_reset (c);
break;
case '=':
v->application_keypad_mode = 1;
@@ -1589,8 +1602,9 @@ vt102_parser_reset (VT102_parser * p)
void
-vt102_reset_state (VT102 * v)
+vt102_reset_state (Context *c)
{
+ VT102 *v=c->v;
vt102_parser_reset (&v->parser);
v->attr = CRT_ATTR_NORMAL;
@@ -1599,14 +1613,8 @@ vt102_reset_state (VT102 * v)
v->application_keypad_mode = 0;
v->current_size = v->original_size;
- v->crt.size = v->current_size;
- v->crt.size.y++;
- v->screen_end = v->current_size;
- v->screen_end.x--;
- v->screen_end.y--;
- v->top_margin = v->screen_start;
- v->bottom_margin = v->screen_end;
+ vt102_do_resize(c);
memset (v->modes, 0, VT102_NMODES);
memset (v->private_modes, 0, VT102_NMODES);
@@ -1679,7 +1687,7 @@ vt102_parse_char (Context * c, int ch)
#endif
if (ch == SYM_CHAR_RESET)
{
- vt102_reset_state (v);
+ vt102_reset_state (c);
}
else if (p->in_cmd && !ctrl_chr (ch, p->cmd_termination))
{
@@ -2006,8 +2014,9 @@ vt102_send (Context * c, uint8_t key)
}
void
-vt102_reset (VT102 * v)
+vt102_reset (Context * c)
{
+ VT102 *v=c->v;
VT102_parser *p = &v->parser;
@@ -2031,7 +2040,7 @@ vt102_reset (VT102 * v)
v->current_line = v->pos;
vt102_parser_reset (p);
- vt102_reset_state (v);
+ vt102_reset_state (c);
vt102_save_state (v);
@@ -2069,8 +2078,6 @@ vt102_new (CRT_Pos * size)
v->original_size.y = VT102_ROWS;
}
- vt102_reset (v);
-
return v;
}
@@ -2080,6 +2087,24 @@ vt102_set_ansi (VT102 * v, int ansi)
v->xn_glitch = ansi ? 0 : 1;
}
+void vt102_resize(Context *c,CRT_Pos size)
+{
+
+
+ if (size.x < 1)
+ size.x = 1;
+ if (size.y < 1)
+ size.y = 1;
+
+ if (size.x > VT102_MAX_COLS)
+ size.x = VT102_MAX_COLS;
+ if (size.y > VT102_ROWS)
+ size.y = VT102_ROWS;
+
+ c->v->current_size=size;
+ vt102_do_resize(c);
+}
+
void
vt102_free (VT102 * v)
{