1 5cedca1b 2004-05-15 devnull /* tm.c: split numerical fields */
2 5cedca1b 2004-05-15 devnull # include "t.h"
5 5cedca1b 2004-05-15 devnull maknew(char *str)
7 5cedca1b 2004-05-15 devnull /* make two numerical fields */
8 5cedca1b 2004-05-15 devnull int dpoint, c;
9 5cedca1b 2004-05-15 devnull char *p, *q, *ba;
12 8a3cbc15 2004-05-17 devnull for (ba = 0; c = *str; str++)
13 5cedca1b 2004-05-15 devnull if (c == '\\' && *(str + 1) == '&')
14 5cedca1b 2004-05-15 devnull ba = str;
16 5cedca1b 2004-05-15 devnull if (ba == 0) {
17 5cedca1b 2004-05-15 devnull for (dpoint = 0; *str; str++) {
18 5cedca1b 2004-05-15 devnull if (*str == '.' && !ineqn(str, p) &&
19 8a3cbc15 2004-05-17 devnull (str > p && digit(*(str - 1)) ||
20 5cedca1b 2004-05-15 devnull digit(*(str + 1))))
21 5cedca1b 2004-05-15 devnull dpoint = (int)str;
23 5cedca1b 2004-05-15 devnull if (dpoint == 0)
24 5cedca1b 2004-05-15 devnull for (; str > p; str--) {
25 5cedca1b 2004-05-15 devnull if (digit( *(str - 1) ) && !ineqn(str, p))
28 5cedca1b 2004-05-15 devnull if (!dpoint && p == str) /* not numerical, don't split */
29 5cedca1b 2004-05-15 devnull return(0);
30 5cedca1b 2004-05-15 devnull if (dpoint)
31 5cedca1b 2004-05-15 devnull str = (char *)dpoint;
33 5cedca1b 2004-05-15 devnull str = ba;
35 5cedca1b 2004-05-15 devnull if (exstore == 0 || exstore > exlim) {
36 5cedca1b 2004-05-15 devnull exstore = exspace = chspace();
37 5cedca1b 2004-05-15 devnull exlim = exstore + MAXCHS;
39 5cedca1b 2004-05-15 devnull q = exstore;
40 8a3cbc15 2004-05-17 devnull while (*exstore++ = *str++)
43 5cedca1b 2004-05-15 devnull return(q);
48 5cedca1b 2004-05-15 devnull ineqn (char *s, char *p)
50 5cedca1b 2004-05-15 devnull /* true if s is in a eqn within p */
51 5cedca1b 2004-05-15 devnull int ineq = 0, c;
53 8a3cbc15 2004-05-17 devnull while (c = *p) {
54 5cedca1b 2004-05-15 devnull if (s == p)
55 5cedca1b 2004-05-15 devnull return(ineq);
57 5cedca1b 2004-05-15 devnull if ((ineq == 0) && (c == delim1))
58 5cedca1b 2004-05-15 devnull ineq = 1;
59 5cedca1b 2004-05-15 devnull else if ((ineq == 1) && (c == delim2))
60 5cedca1b 2004-05-15 devnull ineq = 0;
62 5cedca1b 2004-05-15 devnull return(0);