From 53f467a336f6dc21844578528f7dceba831fba92 Mon Sep 17 00:00:00 2001 From: CismonX Date: Fri, 8 Jan 2021 08:21:28 +0800 Subject: [PATCH] Update sixdraw. --- examples/sixdraw.c | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/examples/sixdraw.c b/examples/sixdraw.c index c7652e7..c14e496 100644 --- a/examples/sixdraw.c +++ b/examples/sixdraw.c @@ -172,26 +172,32 @@ static void print_sixel_dot(struct sixdraw_ctx *ctx, unsigned x, unsigned y) { char *sixel_seq = get_sixel_buffer(); - size_t offset = sizeof(SIXEL_SEQ_HEAD) - 1; - offset += sprintf(sixel_seq + offset, "%d;%d", ctx->ch_width, ctx->ch_height); + size_t seq_len = sizeof(SIXEL_SEQ_HEAD) - 1; + seq_len += sprintf(sixel_seq + seq_len, "%d;%d", ctx->ch_width, ctx->ch_height); - // Select color + // Select color. unsigned red, green, blue; get_sixel_color(ctx->line_color, &red, &green, &blue); - offset += sprintf(sixel_seq + offset, "#0;2;%d;%d;%d#0", red, green, blue); + seq_len += sprintf(sixel_seq + seq_len, "#0;2;%d;%d;%d#0", red, green, blue); - // Move cursor + // Move cursor. unsigned row = y / ctx->ch_height + 1; unsigned col = x / ctx->ch_width + 1; dprintf(ctx->out_fd, CTLSEQS_CUP("%d", "%d"), row, col); - // Print dot + // Draw dot. row = y % ctx->ch_height; col = x % ctx->ch_width; - offset += sprintf(sixel_seq + offset, "%.*s", row / 6, "----------------"); - offset += sprintf(sixel_seq + offset, "!%u?%c" CTLSEQS_ST, col, (1 << row % 6) + 0x3F); + seq_len += sprintf(sixel_seq + seq_len, "%.*s", row / 6, "------------------------"); + seq_len += sprintf(sixel_seq + seq_len, "!%u?%c" CTLSEQS_ST, col, (1 << row % 6) + 0x3F); - write(ctx->out_fd, sixel_seq, offset); + // Output sixel sequence. + do { + ssize_t nbytes = write(ctx->out_fd, sixel_seq, seq_len); + if (nbytes > 0) { + seq_len -= nbytes; + } + } while (seq_len > 0); } static bool