From 6ebe3b32116a128e8196bae1fe85219442b98c23 Mon Sep 17 00:00:00 2001 From: WormHeamer Date: Tue, 4 Nov 2025 16:21:28 -0500 Subject: various changes --- main.c | 31 +++++++++++++++++++++++++------ 1 file changed, 25 insertions(+), 6 deletions(-) diff --git a/main.c b/main.c index d3ceecd..0aeb63d 100644 --- a/main.c +++ b/main.c @@ -101,15 +101,19 @@ void vui_getwinsz(unsigned *w, unsigned *h) { *h = wsz.ws_row; } -static void vui_clrtoeol(VuiBuffer *buf, unsigned x0, unsigned y) { - for (unsigned x = x0; x < buf->width; x++) { +static void vui_clrspan(VuiBuffer *buf, unsigned x0, unsigned x1, unsigned y) { + for (unsigned x = x0; x < x1; x++) { BCHR(buf, x, y) = ' '; } - for (unsigned x = x0; x < buf->width; x++) { + for (unsigned x = x0; x < x1; x++) { BATTR(buf, x, y) = ATTR_DEFAULT; } } +static void vui_clrtoeol(VuiBuffer *buf, unsigned x0, unsigned y) { + vui_clrspan(buf, x0, buf->width, y); +} + static void clear_buf(VuiBuffer *buf) { for (unsigned y = 0; y < buf->height; y++) { vui_clrtoeol(buf, 0, y); @@ -274,8 +278,7 @@ static void attr_chg(VuiAttr *ptr, VuiAttr to) { if (chg_fg || chg_bg || chg_attr) { *s++ = 'm'; - *s = '\0'; - fputs(buf, stdout); + fwrite(buf, 1, s - buf, stdout); } *ptr = to; @@ -320,7 +323,8 @@ void vui_blit(void) { vui_changes++; curs_move(cur_x, cur_y, x0, y); attr_chg(&attr_last, a); - printf("%.*s", x - x0, &CHR(x0, y)); + fwrite(&CHR(x0, y), 1, x - x0, stdout); + //printf("%.*s", x - x0, ); cur_x = x; cur_y = y; vui_repainted += x - x0; @@ -405,9 +409,11 @@ void vui_scroll_buf(VuiBuffer *b, int dx, int dy) { if (dy > 0) { memmove(b->chr + (b->width * dy), b->chr, sizeof(*b->chr) * b->width * (b->height - dy)); memmove(b->attr + (b->width * dy), b->attr, sizeof(*b->attr) * b->width * (b->height - dy)); + for (int y = 0; y < dy; y++) vui_clrtoeol(b, 0, y); } else if (dy < 0) { memmove(b->chr, b->chr + (b->width * -dy), sizeof(*b->chr) * b->width * (b->height + dy)); memmove(b->attr, b->attr + (b->width * -dy), sizeof(*b->attr) * b->width * (b->height + dy)); + for (int y = b->height - 1; y > b->height + dy - 1; y--) vui_clrtoeol(b, 0, y); } if (dx > 0) { for (unsigned i = 0; i < b->height; i++) { @@ -416,6 +422,9 @@ void vui_scroll_buf(VuiBuffer *b, int dx, int dy) { for (unsigned i = 0; i < b->height; i++) { memmove(b->attr + (i * b->width) + dx, b->attr + (i * b->width), sizeof(*b->attr) * (b->width - dx)); } + for (unsigned i = 0; i < b->height; i++) { + vui_clrspan(b, 0, dx, i); + } } else if (dx < 0) { for (unsigned i = 0; i < b->height; i++) { memmove(b->chr + (i * b->width), b->chr + (i * b->width) - dx, sizeof(*b->chr) * (b->width + dx)); @@ -423,6 +432,10 @@ void vui_scroll_buf(VuiBuffer *b, int dx, int dy) { for (unsigned i = 0; i < b->height; i++) { memmove(b->attr + (i * b->width), b->attr + (i * b->width) - dx, sizeof(*b->attr) * (b->width + dx)); } + for (unsigned i = 0; i < b->height; i++) { + vui_clrspan(b, b->width + dx - 1, b->width, i); + } + } } @@ -539,10 +552,16 @@ int main(int argc, const char **argv) { if (c == 'q') break; if (c > 0x20 && c < 0x7f) C = c; switch (c) { + /* case 'j': dx=-1; dy=0; break; case 'i': dx=0; dy=-1; break; case 'k': dx=0; dy=1; break; case 'l': dx=1; dy=0; break; + */ + case 'j': dx--; break; + case 'l': dx++; break; + case 'i': dy--; break; + case 'k': dy++; break; case ' ': paused = !paused; break; } } -- cgit v1.2.3