=================================================================== RCS file: /cvs/mandoc/Attic/mdocterm.c,v retrieving revision 1.13 retrieving revision 1.15 diff -u -p -r1.13 -r1.15 --- mandoc/Attic/mdocterm.c 2009/02/25 17:02:47 1.13 +++ mandoc/Attic/mdocterm.c 2009/02/26 17:11:38 1.15 @@ -1,4 +1,4 @@ -/* $Id: mdocterm.c,v 1.13 2009/02/25 17:02:47 kristaps Exp $ */ +/* $Id: mdocterm.c,v 1.15 2009/02/26 17:11:38 kristaps Exp $ */ /* * Copyright (c) 2008 Kristaps Dzonsons * @@ -168,7 +168,7 @@ flushln(struct termp *p) * the line with TERMP_NOBREAK). */ - if (vis && vis + vsz >= maxvis) { + if (vis && vis + vsz > maxvis) { /* FIXME */ if (p->flags & TERMP_NOBREAK) errx(1, "word breaks right margin"); @@ -176,7 +176,7 @@ flushln(struct termp *p) for (j = 0; j < p->offset; j++) putchar(' '); vis = 0; - } else if (vis + vsz >= maxvis) + } else if (vis + vsz > maxvis) /* FIXME */ errx(1, "word breaks right margin"); @@ -203,8 +203,9 @@ flushln(struct termp *p) */ if (p->flags & TERMP_NOBREAK) { - for ( ; vis < maxvis; vis++) - putchar(' '); + if ( ! (p->flags & TERMP_NORPAD)) + for ( ; vis < maxvis; vis++) + putchar(' '); } else putchar('\n'); @@ -487,7 +488,6 @@ footer(struct termp *p, const struct mdoc_meta *meta) { struct tm *tm; char *buf, *os; - size_t sz, osz, ssz, i; if (NULL == (buf = malloc(p->rmargin))) err(1, "malloc"); @@ -503,27 +503,25 @@ footer(struct termp *p, const struct mdoc_meta *meta) #endif err(1, "strftime"); - osz = strlcpy(os, meta->os, p->rmargin); + (void)strlcpy(os, meta->os, p->rmargin); - sz = strlen(buf); - ssz = sz + osz + 1; + vspace(p); - if (ssz > p->rmargin) { - ssz -= p->rmargin; - assert(ssz <= osz); - os[osz - ssz] = 0; - ssz = 1; - } else - ssz = p->rmargin - ssz + 1; + p->flags |= TERMP_NOSPACE | TERMP_NOBREAK; + p->rmargin = p->maxrmargin - strlen(buf); + p->offset = 0; - printf("\n"); - printf("%s", os); - for (i = 0; i < ssz; i++) - printf(" "); + word(p, os); + flushln(p); - printf("%s\n", buf); - fflush(stdout); + p->flags |= TERMP_NOLPAD | TERMP_NOSPACE; + p->offset = p->rmargin; + p->rmargin = p->maxrmargin; + p->flags &= ~TERMP_NOBREAK; + word(p, buf); + flushln(p); + free(buf); free(os); } @@ -584,23 +582,22 @@ header(struct termp *p, const struct mdoc_meta *meta) p->offset = 0; p->rmargin = (p->maxrmargin - strlen(buf)) / 2; - p->flags |= TERMP_NOBREAK; - p->flags |= TERMP_NOSPACE; + p->flags |= TERMP_NOBREAK | TERMP_NOSPACE; word(p, title); flushln(p); + p->flags |= TERMP_NOLPAD | TERMP_NOSPACE; p->offset = p->rmargin; - p->rmargin += strlen(buf); + p->rmargin = p->maxrmargin - strlen(title); word(p, buf); flushln(p); - exit(1); - p->offset = p->rmargin; p->rmargin = p->maxrmargin; p->flags &= ~TERMP_NOBREAK; + p->flags |= TERMP_NOLPAD | TERMP_NOSPACE; word(p, title); flushln(p);