Change the way the grid is stored, previously it was:

- a two-dimensional array of cells;
- a two-dimensional array of utf8 data;
- an array of line lengths.

Now it is a single array of a new struct grid_line each of which represents a
line and containts the length and an array of cells and an array of utf8 data.

This will make it easier to add additional per-line members, such as flags.
This commit is contained in:
Nicholas Marriott
2009-08-08 13:29:27 +00:00
parent e89e70e715
commit 5e01b6d663
7 changed files with 111 additions and 123 deletions

View File

@ -194,10 +194,8 @@ screen_resize_y(struct screen *s, u_int sy)
}
/* Resize line arrays. */
gd->size = xrealloc(gd->size, gd->hsize + sy, sizeof *gd->size);
gd->data = xrealloc(gd->data, gd->hsize + sy, sizeof *gd->data);
gd->usize = xrealloc(gd->usize, gd->hsize + sy, sizeof *gd->usize);
gd->udata = xrealloc(gd->udata, gd->hsize + sy, sizeof *gd->udata);
gd->linedata = xrealloc(
gd->linedata, gd->hsize + sy, sizeof *gd->linedata);
/* Size increasing. */
if (sy > oldy) {
@ -218,12 +216,8 @@ screen_resize_y(struct screen *s, u_int sy)
needed -= available;
/* Then fill the rest in with blanks. */
for (i = gd->hsize + sy - needed; i < gd->hsize + sy; i++) {
gd->size[i] = 0;
gd->data[i] = NULL;
gd->usize[i] = 0;
gd->udata[i] = NULL;
}
for (i = gd->hsize + sy - needed; i < gd->hsize + sy; i++)
memset(&gd->linedata[i], 0, sizeof gd->linedata[i]);
}
/* Set the new size, and reset the scroll region. */