Merge branch 'obsd-master'

This commit is contained in:
Thomas Adam 2018-07-11 09:02:25 +01:00
commit a4a7c3c68d

19
grid.c
View File

@ -145,12 +145,14 @@ grid_extended_cell(struct grid_line *gl, struct grid_cell_entry *gce,
return (gcp); return (gcp);
} }
/* Get line data. */
struct grid_line * struct grid_line *
grid_get_line(struct grid *gd, u_int line) grid_get_line(struct grid *gd, u_int line)
{ {
return (&gd->linedata[line]); return (&gd->linedata[line]);
} }
/* Adjust number of lines. */
void void
grid_adjust_lines(struct grid *gd, u_int lines) grid_adjust_lines(struct grid *gd, u_int lines)
{ {
@ -284,6 +286,15 @@ grid_compare(struct grid *ga, struct grid *gb)
return (0); return (0);
} }
/* Trim lines from the history. */
static void
grid_trim_history(struct grid *gd, u_int ny)
{
grid_free_lines(gd, 0, ny);
memmove(&gd->linedata[0], &gd->linedata[ny],
(gd->hsize + gd->sy - ny) * (sizeof *gd->linedata));
}
/* /*
* Collect lines from the history if at the limit. Free the top (oldest) 10% * Collect lines from the history if at the limit. Free the top (oldest) 10%
* and shift up. * and shift up.
@ -306,9 +317,7 @@ grid_collect_history(struct grid *gd)
* Free the lines from 0 to ny then move the remaining lines over * Free the lines from 0 to ny then move the remaining lines over
* them. * them.
*/ */
grid_free_lines(gd, 0, ny); grid_trim_history(gd, ny);
memmove(&gd->linedata[0], &gd->linedata[ny],
(gd->hsize + gd->sy - ny) * (sizeof *gd->linedata));
gd->hsize -= ny; gd->hsize -= ny;
if (gd->hscrolled > gd->hsize) if (gd->hscrolled > gd->hsize)
@ -338,9 +347,7 @@ grid_scroll_history(struct grid *gd, u_int bg)
void void
grid_clear_history(struct grid *gd) grid_clear_history(struct grid *gd)
{ {
grid_free_lines(gd, 0, gd->hsize); grid_trim_history(gd, gd->hsize);
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;