chiark / gitweb /
*** empty log message ***
authorjames <james>
Tue, 5 Feb 2008 01:11:46 +0000 (01:11 +0000)
committerjames <james>
Tue, 5 Feb 2008 01:11:46 +0000 (01:11 +0000)
src/crt.c
src/vt102.c

index 36011a986ba710cd936159e404f3987b9dc101d8..7b8e7ddfbad2dcc7fa18cc685e6513ce696b3bf2 100644 (file)
--- a/src/crt.c
+++ b/src/crt.c
@@ -10,6 +10,9 @@ static char rcsid[] = "$Id$";
 
 /*
  * $Log$
+ * Revision 1.4  2008/02/05 01:11:46  james
+ * *** empty log message ***
+ *
  * Revision 1.3  2008/02/04 20:23:55  james
  * *** empty log message ***
  *
@@ -100,12 +103,13 @@ crt_scroll_down (CRT * c, CRT_Pos s, CRT_Pos e,int ea)
   l *= sizeof (CRT_CA);
 
   n = e.y - s.y;
+  n++;
 
   p = CRT_ADDR_POS (&e);
 
   while (n--)
     {
-      memcpy (&c->screen[p], &c->screen[p + CRT_COLS], l);
+      memcpy (&c->screen[p],&c->screen[p-CRT_COLS], l);
       p -= CRT_COLS;
     }
 
index 4fb48c5fab4ae49fc437f963d997f50360af9e8f..da3a58797923b526fd29f69991ec699644d503a9 100644 (file)
@@ -10,6 +10,9 @@ static char rcsid[] = "$Id$";
 
 /*
  * $Log$
+ * Revision 1.6  2008/02/05 01:11:46  james
+ * *** empty log message ***
+ *
  * Revision 1.5  2008/02/04 20:23:55  james
  * *** empty log message ***
  *
@@ -361,6 +364,35 @@ vt102_parse_csi (VT102 * v, char *buf, int len)
             }
           break;
 
+         case 'g':
+         case 'h':
+       case 'l':
+          fprintf (stderr, "C: CSI %s buf[0]=%c\n", buf,buf[0]);
+               break;
+
+       case 'm':
+       //horror of horrors parsing the ;
+       break;
+       case 'r':
+               v->top_margin=v->screen_start;
+               v->bottom_margin=v->screen_end;
+
+         if ((len>2) && (ptr=index(arg,';'))) {
+               ptr++;
+               v->top_margin.y=narg-1;
+               v->bottom_margin.y=atoi(ptr)-1;
+         } 
+
+       if (v->top_margin.y<v->screen_start.y) v->top_margin.y=v->screen_start.y;
+       if (v->top_margin.y>v->screen_end.y) v->top_margin.y=v->screen_end.y;
+       if (v->bottom_margin.y<v->screen_start.y) v->bottom_margin.y=v->screen_start.y;
+       if (v->bottom_margin.y>v->screen_end.y) v->bottom_margin.y=v->screen_end.y;
+
+       fprintf(stderr,"D: %d %d\n",v->top_margin.y,v->bottom_margin.y);
+        v->pos=v->top_margin;
+       break;
+
         default:
           fprintf (stderr, "A: CSI %s buf[0]=%c\n", buf,buf[0]);
         }
@@ -441,6 +473,9 @@ vt102_parse_char (VT102 * v, int c)
           vt102_cursor_motion (v, -1, 0, 1);
           break;
          /*HT*/ case 9:
+            v->pos.x+=8;
+            v->pos.x&=~7;
+               vt102_cursor_normalize(v,1,1);
           break;
          /*LF*/ case 10:
          /*VT*/ case 11: