version 1.190, 2021/01/18 10:27:54 |
version 1.191, 2021/01/22 11:28:33 |
|
|
struct screen_write_collect_item *ci, *tmp; |
struct screen_write_collect_item *ci, *tmp; |
struct screen_write_collect_line *cl; |
struct screen_write_collect_line *cl; |
u_int y, cx, cy, items = 0; |
u_int y, cx, cy, items = 0; |
int clear = 0; |
|
struct tty_ctx ttyctx; |
struct tty_ctx ttyctx; |
size_t written = 0; |
size_t written = 0; |
|
|
|
|
cx = s->cx; cy = s->cy; |
cx = s->cx; cy = s->cy; |
for (y = 0; y < screen_size_y(s); y++) { |
for (y = 0; y < screen_size_y(s); y++) { |
cl = &ctx->s->write_list[y]; |
cl = &ctx->s->write_list[y]; |
|
if (cl->bg != 0) { |
|
screen_write_set_cursor(ctx, 0, y); |
|
screen_write_initctx(ctx, &ttyctx, 1); |
|
ttyctx.bg = cl->bg - 1; |
|
tty_write(tty_cmd_clearline, &ttyctx); |
|
} |
TAILQ_FOREACH_SAFE(ci, &cl->items, entry, tmp) { |
TAILQ_FOREACH_SAFE(ci, &cl->items, entry, tmp) { |
if (clear != -1 && |
|
(u_int)clear != ci->x && |
|
cl->bg != 0) { |
|
screen_write_set_cursor(ctx, clear, y); |
|
screen_write_initctx(ctx, &ttyctx, 1); |
|
ttyctx.bg = cl->bg - 1; |
|
ttyctx.num = ci->x - clear; |
|
log_debug("clear %u at %u", ttyctx.num, clear); |
|
tty_write(tty_cmd_clearcharacter, &ttyctx); |
|
} |
|
|
|
screen_write_set_cursor(ctx, ci->x, y); |
screen_write_set_cursor(ctx, ci->x, y); |
if (ci->type == CLEAR_END) { |
if (ci->type == CLEAR_END) { |
screen_write_initctx(ctx, &ttyctx, 1); |
screen_write_initctx(ctx, &ttyctx, 1); |
ttyctx.bg = ci->bg; |
ttyctx.bg = ci->bg; |
tty_write(tty_cmd_clearendofline, &ttyctx); |
tty_write(tty_cmd_clearendofline, &ttyctx); |
clear = -1; |
|
} else if (ci->type == CLEAR_START) { |
} else if (ci->type == CLEAR_START) { |
screen_write_initctx(ctx, &ttyctx, 1); |
screen_write_initctx(ctx, &ttyctx, 1); |
ttyctx.bg = ci->bg; |
ttyctx.bg = ci->bg; |
tty_write(tty_cmd_clearstartofline, &ttyctx); |
tty_write(tty_cmd_clearstartofline, &ttyctx); |
clear = ci->x + 1; |
|
} else { |
} else { |
screen_write_initctx(ctx, &ttyctx, 0); |
screen_write_initctx(ctx, &ttyctx, 0); |
ttyctx.cell = &ci->gc; |
ttyctx.cell = &ci->gc; |
|
|
ttyctx.ptr = cl->data + ci->x; |
ttyctx.ptr = cl->data + ci->x; |
ttyctx.num = ci->used; |
ttyctx.num = ci->used; |
tty_write(tty_cmd_cells, &ttyctx); |
tty_write(tty_cmd_cells, &ttyctx); |
clear = ci->x + ci->used; |
|
} |
} |
|
|
items++; |
items++; |
|
|
TAILQ_REMOVE(&cl->items, ci, entry); |
TAILQ_REMOVE(&cl->items, ci, entry); |
free(ci); |
free(ci); |
} |
} |
if (clear != -1 && |
|
(u_int)clear != screen_size_x(s) - 1 && |
|
cl->bg != 0) { |
|
screen_write_set_cursor(ctx, clear, y); |
|
screen_write_initctx(ctx, &ttyctx, 1); |
|
ttyctx.bg = cl->bg - 1; |
|
log_debug("clear to end at %u", clear); |
|
tty_write(tty_cmd_clearendofline, &ttyctx); |
|
} |
|
clear = 0; |
|
cl->bg = 0; |
cl->bg = 0; |
} |
} |
s->cx = cx; s->cy = cy; |
s->cx = cx; s->cy = cy; |