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;