Let's try this. It's BUGGERED.
This commit is contained in:
parent
76e6aca867
commit
5cedca1b69
118 changed files with 26947 additions and 1 deletions
65
src/cmd/tbl/tm.c
Normal file
65
src/cmd/tbl/tm.c
Normal file
|
|
@ -0,0 +1,65 @@
|
|||
/* tm.c: split numerical fields */
|
||||
# include "t.h"
|
||||
|
||||
char *
|
||||
maknew(char *str)
|
||||
{
|
||||
/* make two numerical fields */
|
||||
int dpoint, c;
|
||||
char *p, *q, *ba;
|
||||
|
||||
p = str;
|
||||
for (ba = 0; c = *str; str++)
|
||||
if (c == '\\' && *(str + 1) == '&')
|
||||
ba = str;
|
||||
str = p;
|
||||
if (ba == 0) {
|
||||
for (dpoint = 0; *str; str++) {
|
||||
if (*str == '.' && !ineqn(str, p) &&
|
||||
(str > p && digit(*(str - 1)) ||
|
||||
digit(*(str + 1))))
|
||||
dpoint = (int)str;
|
||||
}
|
||||
if (dpoint == 0)
|
||||
for (; str > p; str--) {
|
||||
if (digit( *(str - 1) ) && !ineqn(str, p))
|
||||
break;
|
||||
}
|
||||
if (!dpoint && p == str) /* not numerical, don't split */
|
||||
return(0);
|
||||
if (dpoint)
|
||||
str = (char *)dpoint;
|
||||
} else
|
||||
str = ba;
|
||||
p = str;
|
||||
if (exstore == 0 || exstore > exlim) {
|
||||
exstore = exspace = chspace();
|
||||
exlim = exstore + MAXCHS;
|
||||
}
|
||||
q = exstore;
|
||||
while (*exstore++ = *str++)
|
||||
;
|
||||
*p = 0;
|
||||
return(q);
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
ineqn (char *s, char *p)
|
||||
{
|
||||
/* true if s is in a eqn within p */
|
||||
int ineq = 0, c;
|
||||
|
||||
while (c = *p) {
|
||||
if (s == p)
|
||||
return(ineq);
|
||||
p++;
|
||||
if ((ineq == 0) && (c == delim1))
|
||||
ineq = 1;
|
||||
else if ((ineq == 1) && (c == delim2))
|
||||
ineq = 0;
|
||||
}
|
||||
return(0);
|
||||
}
|
||||
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue