summaryrefslogtreecommitdiff
path: root/main.c
diff options
context:
space:
mode:
authorWormHeamer2025-11-04 16:21:28 -0500
committerWormHeamer2025-11-04 16:21:28 -0500
commit6ebe3b32116a128e8196bae1fe85219442b98c23 (patch)
treed43537e2eddf315d3b25f92a29db79986b0cdd08 /main.c
parent90b67b81fae38540b7a9257d23c4b50820ca5b1d (diff)
various changes
Diffstat (limited to 'main.c')
-rw-r--r--main.c31
1 files 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;
}
}