chiark / gitweb /
*** empty log message ***
[sympathy.git] / src / vt102.c
index a8d4388610ccccaa82b16c0c6631784fa8723718..d33d3092d33369156ef424075c9a030b86cf8dc1 100644 (file)
@@ -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