X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=sympathy.git;a=blobdiff_plain;f=src%2Fvt102.c;h=d33d3092d33369156ef424075c9a030b86cf8dc1;hp=a8d4388610ccccaa82b16c0c6631784fa8723718;hb=d20265fbf33e22b30b5c2879cff7ae5c22d3fc29;hpb=940f48e7089157e6ffae29936226ade7b1176b02 diff --git a/src/vt102.c b/src/vt102.c index a8d4388..d33d309 100644 --- a/src/vt102.c +++ b/src/vt102.c @@ -10,6 +10,15 @@ static char rcsid[] = "$Id$"; /* * $Log$ + * Revision 1.27 2008/02/14 02:46:45 james + * *** empty log message *** + * + * Revision 1.26 2008/02/14 01:55:57 james + * *** empty log message *** + * + * Revision 1.25 2008/02/13 16:57:29 james + * *** empty log message *** + * * Revision 1.24 2008/02/13 09:12:21 james * *** empty log message *** * @@ -264,6 +273,18 @@ vt102_log_line (Context * c, int line) c->l->log (c->l, logbuf); } +/*Called for every upward scroll with same args*/ +void +vt102_history (Context * c, CRT_Pos t, CRT_Pos b) +{ +/*Only log if it scrolls off the top*/ + if (t.y) + return; + + t.x = 0; + history_add (c->h, &(c->v->crt.screen[CRT_ADDR_POS (&t)])); +} + void vt102_clip_cursor (VT102 * v, CRT_Pos tl, CRT_Pos br) { @@ -314,7 +335,9 @@ vt102_cursor_advance_line (Context * c) (couldscroll)) { vt102_log_line (c, v->pos.y); - //FIXME call out to history + + vt102_history (c, v->top_margin, v->bottom_margin); + crt_scroll_up (&v->crt, v->top_margin, v->bottom_margin, 1); return; } @@ -776,6 +799,7 @@ vt102_parse_esc (Context * c, int ch) if (v->pos.y == v->bottom_margin.y) { 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); } else @@ -938,8 +962,8 @@ vt102_parse_csi (Context * c, char *buf, int len) { while (narg--) { - //FIXME call out to history - crt_scroll_up (&v->crt, v->pos, v->bottom_margin, 0); + vt102_history (c, v->pos, v->bottom_margin); + crt_scroll_up (&v->crt, v->pos, v->bottom_margin, 1); } } break; @@ -1187,6 +1211,10 @@ void vt102_send (Context * c, uint8_t key) { uint8_t ch; + + if (!c->t) + return; + #if 0 fprintf (stderr, "vts: %d(%c)\n", key, (key > 31) ? key : ' '); #endif