[BACK]Return to grid.c CVS log [TXT][DIR] Up to [local] / src / usr.bin / tmux

Diff for /src/usr.bin/tmux/grid.c between version 1.74 and 1.75

version 1.74, 2017/05/16 12:57:26 version 1.75, 2017/08/30 18:13:47
Line 162 
Line 162 
         return (memcmp(gca->data.data, gcb->data.data, gca->data.size) == 0);          return (memcmp(gca->data.data, gcb->data.data, gca->data.size) == 0);
 }  }
   
   /* Free one line. */
   static void
   grid_free_line(struct grid *gd, u_int py)
   {
           free(gd->linedata[py].celldata);
           gd->linedata[py].celldata = NULL;
           free(gd->linedata[py].extddata);
           gd->linedata[py].extddata = NULL;
   }
   
   /* Free several lines. */
   static void
   grid_free_lines(struct grid *gd, u_int py, u_int ny)
   {
           u_int   yy;
   
           for (yy = py; yy < py + ny; yy++)
                   grid_free_line(gd, yy);
   }
   
 /* Create a new grid. */  /* Create a new grid. */
 struct grid *  struct grid *
 grid_create(u_int sx, u_int sy, u_int hlimit)  grid_create(u_int sx, u_int sy, u_int hlimit)
Line 187 
Line 207 
 void  void
 grid_destroy(struct grid *gd)  grid_destroy(struct grid *gd)
 {  {
         struct grid_line        *gl;          grid_free_lines(gd, 0, gd->hsize + gd->sy);
         u_int                    yy;  
   
         for (yy = 0; yy < gd->hsize + gd->sy; yy++) {  
                 gl = &gd->linedata[yy];  
                 free(gl->celldata);  
                 free(gl->extddata);  
         }  
   
         free(gd->linedata);          free(gd->linedata);
   
         free(gd);          free(gd);
Line 233 
Line 246 
  * and shift up.   * and shift up.
  */   */
 void  void
 grid_collect_history(struct grid *gd, u_int bg)  grid_collect_history(struct grid *gd)
 {  {
         u_int   yy;          u_int   ny;
   
         if (gd->hsize < gd->hlimit)          if (gd->hsize < gd->hlimit)
                 return;                  return;
   
         yy = gd->hlimit / 10;          ny = gd->hlimit / 10;
         if (yy < 1)          if (ny < 1)
                 yy = 1;                  ny = 1;
   
         grid_move_lines(gd, 0, yy, gd->hsize + gd->sy - yy, bg);          /*
         gd->hsize -= yy;           * Free the lines from 0 to ny then move the remaining lines over
            * them.
            */
           grid_free_lines(gd, 0, ny);
           memmove(&gd->linedata[0], &gd->linedata[ny],
               (gd->hsize + gd->sy - ny) * (sizeof *gd->linedata));
   
           gd->hsize -= ny;
         if (gd->hscrolled > gd->hsize)          if (gd->hscrolled > gd->hsize)
                 gd->hscrolled = gd->hsize;                  gd->hscrolled = gd->hsize;
 }  }
Line 272 
Line 292 
 void  void
 grid_clear_history(struct grid *gd)  grid_clear_history(struct grid *gd)
 {  {
         grid_clear_lines(gd, 0, gd->hsize, 8);          grid_free_lines(gd, 0, gd->hsize);
         grid_move_lines(gd, 0, gd->hsize, gd->sy, 8);          memmove(&gd->linedata[0], &gd->linedata[gd->hsize],
               gd->sy * (sizeof *gd->linedata));
   
         gd->hscrolled = 0;          gd->hscrolled = 0;
         gd->hsize = 0;          gd->hsize = 0;
Line 481 
Line 502 
 void  void
 grid_clear_lines(struct grid *gd, u_int py, u_int ny, u_int bg)  grid_clear_lines(struct grid *gd, u_int py, u_int ny, u_int bg)
 {  {
         struct grid_line        *gl;          u_int   yy;
         u_int                    yy;  
   
         if (ny == 0)          if (ny == 0)
                 return;                  return;
Line 493 
Line 513 
                 return;                  return;
   
         for (yy = py; yy < py + ny; yy++) {          for (yy = py; yy < py + ny; yy++) {
                 gl = &gd->linedata[yy];                  grid_free_line(gd, yy);
                 free(gl->celldata);  
                 free(gl->extddata);  
                 grid_empty_line(gd, yy, bg);                  grid_empty_line(gd, yy, bg);
         }          }
 }  }
Line 522 
Line 540 
         for (yy = dy; yy < dy + ny; yy++) {          for (yy = dy; yy < dy + ny; yy++) {
                 if (yy >= py && yy < py + ny)                  if (yy >= py && yy < py + ny)
                         continue;                          continue;
                 grid_clear_lines(gd, yy, 1, bg);                  grid_free_line(gd, yy);
         }          }
   
         memmove(&gd->linedata[dy], &gd->linedata[py],          memmove(&gd->linedata[dy], &gd->linedata[py],
             ny * (sizeof *gd->linedata));              ny * (sizeof *gd->linedata));
   
         /* Wipe any lines that have been moved (without freeing them). */          /*
            * Wipe any lines that have been moved (without freeing them - they are
            * still present).
            */
         for (yy = py; yy < py + ny; yy++) {          for (yy = py; yy < py + ny; yy++) {
                 if (yy < dy || yy >= dy + ny)                  if (yy < dy || yy >= dy + ny)
                         grid_empty_line(gd, yy, bg);                          grid_empty_line(gd, yy, bg);
Line 845 
Line 866 
 }  }
   
 /*  /*
  * Duplicate a set of lines between two grids. If there aren't enough lines in   * Duplicate a set of lines between two grids. Both source and destination
  * either source or destination, the number of lines is limited to the number   * should be big enough.
  * available.  
  */   */
 void  void
 grid_duplicate_lines(struct grid *dst, u_int dy, struct grid *src, u_int sy,  grid_duplicate_lines(struct grid *dst, u_int dy, struct grid *src, u_int sy,
Line 860 
Line 880 
                 ny = dst->hsize + dst->sy - dy;                  ny = dst->hsize + dst->sy - dy;
         if (sy + ny > src->hsize + src->sy)          if (sy + ny > src->hsize + src->sy)
                 ny = src->hsize + src->sy - sy;                  ny = src->hsize + src->sy - sy;
         grid_clear_lines(dst, dy, ny, 8);          grid_free_lines(dst, dy, ny);
   
         for (yy = 0; yy < ny; yy++) {          for (yy = 0; yy < ny; yy++) {
                 srcl = &src->linedata[sy];                  srcl = &src->linedata[sy];

Legend:
Removed from v.1.74  
changed lines
  Added in v.1.75