]> git.lizzy.rs Git - plan9front.git/blob - sys/src/cmd/tbl/tm.c
upas/fs: remove useless loop in rf822()
[plan9front.git] / sys / src / cmd / tbl / tm.c
1 /* tm.c: split numerical fields */
2 # include "t.h"
3
4 char    *
5 maknew(char *str)
6 {
7                                 /* make two numerical fields */
8         int     c;
9         char    *p, *q, *ba, *dpoint;
10
11         p = str;
12         for (ba = 0; c = *str; str++)
13                 if (c == '\\' && *(str + 1) == '&')
14                         ba = str;
15         str = p;
16         if (ba == 0) {
17                 for (dpoint = 0; *str; str++) {
18                         if (*str == '.' && !ineqn(str, p) && 
19                             (str > p && digit(*(str - 1)) || 
20                             digit(*(str + 1))))
21                                 dpoint = str;
22                 }
23                 if (dpoint == 0)
24                         for (; str > p; str--) {
25                                 if (digit( *(str - 1) ) && !ineqn(str, p))
26                                         break;
27                         }
28                 if (!dpoint && p == str) /* not numerical, don't split */
29                         return(0);
30                 if (dpoint) 
31                         str = dpoint;
32         } else
33                 str = ba;
34         p = str;
35         if (exstore == 0 || exstore > exlim) {
36                 exstore = exspace = chspace();
37                 exlim = exstore + MAXCHS;
38         }
39         q = exstore;
40         while (*exstore++ = *str++)
41                 ;
42         *p = 0;
43         return(q);
44 }
45
46
47 int
48 ineqn (char *s, char *p)
49 {
50                                 /* true if s is in a eqn within p */
51         int     ineq = 0, c;
52
53         while (c = *p) {
54                 if (s == p)
55                         return(ineq);
56                 p++;
57                 if ((ineq == 0) && (c == delim1))
58                         ineq = 1;
59                 else if ((ineq == 1) && (c == delim2))
60                         ineq = 0;
61         }
62         return(0);
63 }
64
65