version 1.238, 2014/11/01 06:03:13 |
version 1.242, 2014/12/16 03:53:43 |
Line 1236 roff_evalstrcond(const char *v, int *pos) |
|
Line 1236 roff_evalstrcond(const char *v, int *pos) |
|
out: |
out: |
if (NULL == s3) |
if (NULL == s3) |
s3 = strchr(s2, '\0'); |
s3 = strchr(s2, '\0'); |
else |
else if (*s3 != '\0') |
s3++; |
s3++; |
*pos = s3 - v; |
*pos = s3 - v; |
return(match); |
return(match); |
|
|
static int |
static int |
roff_evalcond(struct roff *r, int ln, const char *v, int *pos) |
roff_evalcond(struct roff *r, int ln, const char *v, int *pos) |
{ |
{ |
int wanttrue, number; |
int number, savepos, wanttrue; |
|
|
if ('!' == v[*pos]) { |
if ('!' == v[*pos]) { |
wanttrue = 0; |
wanttrue = 0; |
Line 1258 roff_evalcond(struct roff *r, int ln, const char *v, i |
|
Line 1258 roff_evalcond(struct roff *r, int ln, const char *v, i |
|
wanttrue = 1; |
wanttrue = 1; |
|
|
switch (v[*pos]) { |
switch (v[*pos]) { |
|
case '\0': |
|
return(0); |
case 'n': |
case 'n': |
/* FALLTHROUGH */ |
/* FALLTHROUGH */ |
case 'o': |
case 'o': |
Line 1272 roff_evalcond(struct roff *r, int ln, const char *v, i |
|
Line 1274 roff_evalcond(struct roff *r, int ln, const char *v, i |
|
case 'r': |
case 'r': |
/* FALLTHROUGH */ |
/* FALLTHROUGH */ |
case 't': |
case 't': |
|
/* FALLTHROUGH */ |
|
case 'v': |
(*pos)++; |
(*pos)++; |
return(!wanttrue); |
return(!wanttrue); |
default: |
default: |
break; |
break; |
} |
} |
|
|
|
savepos = *pos; |
if (roff_evalnum(r, ln, v, pos, &number, 0)) |
if (roff_evalnum(r, ln, v, pos, &number, 0)) |
return((number > 0) == wanttrue); |
return((number > 0) == wanttrue); |
else |
else if (*pos == savepos) |
return(roff_evalstrcond(v, pos) == wanttrue); |
return(roff_evalstrcond(v, pos) == wanttrue); |
|
else |
|
return (0); |
} |
} |
|
|
static enum rofferr |
static enum rofferr |