version 1.6, 2009/07/11 20:11:18 |
version 1.7, 2009/07/13 10:43:52 |
|
|
gd->sx = sx; |
gd->sx = sx; |
gd->sy = sy; |
gd->sy = sy; |
|
|
|
gd->flags = GRID_HISTORY; |
|
|
gd->hsize = 0; |
gd->hsize = 0; |
gd->hlimit = hlimit; |
gd->hlimit = hlimit; |
|
|
|
|
off--; |
off--; |
buf[off] = '\0'; |
buf[off] = '\0'; |
return (buf); |
return (buf); |
|
} |
|
|
|
/* |
|
* Duplicate a set of lines between two grids. If there aren't enough lines in |
|
* either source or destination, the number of lines is limited to the number |
|
* available. |
|
*/ |
|
void |
|
grid_duplicate_lines( |
|
struct grid *dst, u_int dy, struct grid *src, u_int sy, u_int ny) |
|
{ |
|
u_int yy; |
|
|
|
GRID_DEBUG(src, "dy=%u, sy=%u, ny=%u", dy, sy, ny); |
|
|
|
if (dy + ny > dst->hsize + dst->sy) |
|
ny = dst->hsize + dst->sy - dy; |
|
if (sy + ny > src->hsize + src->sy) |
|
ny = src->hsize + src->sy - sy; |
|
grid_clear_lines(dst, dy, ny); |
|
|
|
for (yy = 0; yy < ny; yy++) { |
|
dst->size[dy] = src->size[sy]; |
|
if (src->size[sy] == 0) |
|
dst->data[dy] = NULL; |
|
else { |
|
dst->data[dy] = xcalloc( |
|
src->size[sy], sizeof **dst->data); |
|
memcpy(dst->data[dy], src->data[sy], |
|
src->size[sy] * (sizeof **dst->data)); |
|
} |
|
|
|
dst->usize[dy] = src->usize[sy]; |
|
if (src->usize[sy] == 0) |
|
dst->udata[dy] = NULL; |
|
else { |
|
dst->udata[sy] = xcalloc( |
|
src->usize[sy], sizeof **dst->udata); |
|
memcpy(dst->udata[dy], src->udata[sy], |
|
src->usize[sy] * (sizeof **dst->udata)); |
|
} |
|
|
|
sy++; dy++; |
|
} |
} |
} |