summaryrefslogtreecommitdiffstatshomepage
path: root/roff.c
diff options
context:
space:
mode:
authorKristaps Dzonsons <kristaps@bsd.lv>2010-06-27 16:36:22 +0000
committerKristaps Dzonsons <kristaps@bsd.lv>2010-06-27 16:36:22 +0000
commit6cada7207531441ac6e3c2092d5039902122137b (patch)
tree4860615c512cd8c77e9b4659d92be388389da8b5 /roff.c
parentdc95dcaff23f7235529d0b5d9866a252ca3f8c06 (diff)
downloadmandoc-6cada7207531441ac6e3c2092d5039902122137b.tar.gz
mandoc-6cada7207531441ac6e3c2092d5039902122137b.tar.zst
mandoc-6cada7207531441ac6e3c2092d5039902122137b.zip
Allow registers to be unset. Implement and document the `.nr nS val'.
Diffstat (limited to 'roff.c')
-rw-r--r--roff.c21
1 files changed, 12 insertions, 9 deletions
diff --git a/roff.c b/roff.c
index 4bb34f68..60aced8b 100644
--- a/roff.c
+++ b/roff.c
@@ -1,4 +1,4 @@
-/* $Id: roff.c,v 1.90 2010/06/27 15:52:41 kristaps Exp $ */
+/* $Id: roff.c,v 1.91 2010/06/27 16:36:22 kristaps Exp $ */
/*
* Copyright (c) 2010 Kristaps Dzonsons <kristaps@bsd.lv>
*
@@ -155,7 +155,7 @@ static int roffnode_push(struct roff *,
enum rofft, int, int);
static void roffnode_pop(struct roff *);
static enum rofft roff_parse(const char *, int *);
-static int roff_parse_nat(const char *, int *);
+static int roff_parse_nat(const char *, unsigned int *);
/* See roff_hash_find() */
#define ROFF_HASH(p) (p[0] - ASCII_LO)
@@ -425,7 +425,7 @@ roff_parse(const char *buf, int *pos)
static int
-roff_parse_nat(const char *buf, int *res)
+roff_parse_nat(const char *buf, unsigned int *res)
{
char *ep;
long lval;
@@ -436,10 +436,10 @@ roff_parse_nat(const char *buf, int *res)
return(0);
if ((errno == ERANGE &&
(lval == LONG_MAX || lval == LONG_MIN)) ||
- (lval > INT_MAX || lval <= 0))
+ (lval > INT_MAX || lval < 0))
return(0);
- *res = (int)lval;
+ *res = (unsigned int)lval;
return(1);
}
@@ -882,8 +882,10 @@ static enum rofferr
roff_nr(ROFF_ARGS)
{
const char *key, *val;
+ struct reg *rg;
key = &(*bufp)[pos];
+ rg = r->regs->regs;
/* Parse register request. */
while ((*bufp)[pos] && ' ' != (*bufp)[pos])
@@ -905,11 +907,12 @@ roff_nr(ROFF_ARGS)
/* Process register token. */
if (0 == strcmp(key, "nS")) {
- if ( ! roff_parse_nat(val, &r->regs->regs[(int)REG_nS].i))
- r->regs->regs[(int)REG_nS].i = 0;
+ rg[(int)REG_nS].set = 1;
+ if ( ! roff_parse_nat(val, &rg[(int)REG_nS].v.u))
+ rg[(int)REG_nS].v.u = 0;
- ROFF_DEBUG("roff: register nS: %d\n",
- r->regs->regs[(int)REG_nS].i);
+ ROFF_DEBUG("roff: register nS: %u\n",
+ rg[(int)REG_nS].v.u);
} else
ROFF_DEBUG("roff: ignoring register: %s\n", key);