aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/term.c
diff options
context:
space:
mode:
authorIngo Schwarze <schwarze@openbsd.org>2014-12-23 13:48:57 +0000
committerIngo Schwarze <schwarze@openbsd.org>2014-12-23 13:48:57 +0000
commite98af5414161553ffd7b765ad3a2451626334232 (patch)
tree71e081d88f9d7e31540b032aa105d2794f17c438 /term.c
parentff9ffdaa32c8d8843620079281b5c445b548babc (diff)
downloadmandoc-e98af5414161553ffd7b765ad3a2451626334232.tar.gz
mandoc-e98af5414161553ffd7b765ad3a2451626334232.tar.zst
mandoc-e98af5414161553ffd7b765ad3a2451626334232.zip
support negative horizontal widths in man(7);
minus twenty lines of code in spite of enhanced functionality
Diffstat (limited to 'term.c')
-rw-r--r--term.c24
1 files changed, 9 insertions, 15 deletions
diff --git a/term.c b/term.c
index 8d05afc4..d884ba70 100644
--- a/term.c
+++ b/term.c
@@ -1,4 +1,4 @@
-/* $Id: term.c,v 1.239 2014/12/23 06:16:46 schwarze Exp $ */
+/* $Id: term.c,v 1.240 2014/12/23 13:48:57 schwarze Exp $ */
/*
* Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2010-2014 Ingo Schwarze <schwarze@openbsd.org>
@@ -101,7 +101,6 @@ term_flushln(struct termp *p)
size_t j; /* temporary loop index for p->buf */
size_t jhy; /* last hyph before overflow w/r/t j */
size_t maxvis; /* output position of visible boundary */
- size_t rmargin; /* the rightmost of the two margins */
/*
* First, establish the maximum columns of "visible" content.
@@ -114,8 +113,7 @@ term_flushln(struct termp *p)
* is negative, it gets sign extended. Subtracting that
* very large size_t effectively adds a small number to dv.
*/
- rmargin = p->rmargin > p->offset ? p->rmargin : p->offset;
- dv = p->rmargin - p->offset;
+ dv = p->rmargin > p->offset ? p->rmargin - p->offset : 0;
maxvis = (int)dv > p->overstep ? dv - (size_t)p->overstep : 0;
if (p->flags & TERMP_NOBREAK) {
@@ -193,8 +191,9 @@ term_flushln(struct termp *p)
(*p->endline)(p);
p->viscol = 0;
if (TERMP_BRIND & p->flags) {
- vbl = rmargin;
- vend += rmargin - p->offset;
+ vbl = p->rmargin;
+ vend += p->rmargin;
+ vend -= p->offset;
} else
vbl = p->offset;
@@ -770,7 +769,7 @@ term_strlen(const struct termp *p, const char *cp)
return(sz);
}
-size_t
+int
term_vspan(const struct termp *p, const struct roffsu *su)
{
double r;
@@ -809,19 +808,14 @@ term_vspan(const struct termp *p, const struct roffsu *su)
abort();
/* NOTREACHED */
}
-
- if (r < 0.0)
- r = 0.0;
- return((size_t)(r + 0.4995));
+ return(r > 0.0 ? r + 0.4995 : r - 0.4995);
}
-size_t
+int
term_hspan(const struct termp *p, const struct roffsu *su)
{
double v;
v = (*p->hspan)(p, su);
- if (v < 0.0)
- v = 0.0;
- return((size_t)(v + 0.0005));
+ return(v > 0.0 ? v + 0.0005 : v - 0.0005);
}