From 0a4a98390d5f3b361fe2e9e63f018a3979c1498e Mon Sep 17 00:00:00 2001 From: Eric Date: Thu, 29 May 2025 00:51:00 +0200 Subject: [PATCH] improve printw to write faster Now all encoding options are faster. --- output.c | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/output.c b/output.c index b48713e..171c083 100644 --- a/output.c +++ b/output.c @@ -9,11 +9,29 @@ printw(FILE *fp, unsigned char *s, int slen) int c; c = '\n'; - while (slen--) { - fputc((c = *s++), fp); - ++col; - if (!(col %= WRAPCOL)) - fputc((c = '\n'), fp); + if (col) { + if (slen >= WRAPCOL-col) { + fwrite(s, sizeof(*s), WRAPCOL-col, fp); + s += WRAPCOL-col; + slen -= WRAPCOL-col; + col = 0; + fputc('\n', fp); + } else { + fwrite(s, sizeof(*s), slen, fp); + s += slen; + col += slen; + slen -= slen; + c = *(s+slen-1); + } + } + for (; slen >= WRAPCOL; slen -= WRAPCOL, s += WRAPCOL) { + fwrite(s, sizeof(*s), WRAPCOL, fp); + fputc('\n', fp); + } + if (slen > 0) { + fwrite(s, sizeof(*s), slen, fp); + col += slen; + c = *(s+slen-1); } return c;