Blame


1 5cedca1b 2004-05-15 devnull /* tm.c: split numerical fields */
2 5cedca1b 2004-05-15 devnull # include "t.h"
3 5cedca1b 2004-05-15 devnull
4 5cedca1b 2004-05-15 devnull char *
5 5cedca1b 2004-05-15 devnull maknew(char *str)
6 5cedca1b 2004-05-15 devnull {
7 5cedca1b 2004-05-15 devnull /* make two numerical fields */
8 a5f3a00b 2006-04-20 devnull int c;
9 a5f3a00b 2006-04-20 devnull char *p, *q, *ba, *dpoint;
10 5cedca1b 2004-05-15 devnull
11 5cedca1b 2004-05-15 devnull p = str;
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;
15 5cedca1b 2004-05-15 devnull str = p;
16 5cedca1b 2004-05-15 devnull if (ba == 0) {
17 5cedca1b 2004-05-15 devnull for (dpoint = 0; *str; str++) {
18 fa325e9b 2020-01-10 cross if (*str == '.' && !ineqn(str, p) &&
19 fa325e9b 2020-01-10 cross (str > p && digit(*(str - 1)) ||
20 5cedca1b 2004-05-15 devnull digit(*(str + 1))))
21 a5f3a00b 2006-04-20 devnull dpoint = str;
22 5cedca1b 2004-05-15 devnull }
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))
26 5cedca1b 2004-05-15 devnull break;
27 5cedca1b 2004-05-15 devnull }
28 5cedca1b 2004-05-15 devnull if (!dpoint && p == str) /* not numerical, don't split */
29 5cedca1b 2004-05-15 devnull return(0);
30 fa325e9b 2020-01-10 cross if (dpoint)
31 a5f3a00b 2006-04-20 devnull str = dpoint;
32 5cedca1b 2004-05-15 devnull } else
33 5cedca1b 2004-05-15 devnull str = ba;
34 5cedca1b 2004-05-15 devnull p = str;
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;
38 5cedca1b 2004-05-15 devnull }
39 5cedca1b 2004-05-15 devnull q = exstore;
40 8a3cbc15 2004-05-17 devnull while (*exstore++ = *str++)
41 5cedca1b 2004-05-15 devnull ;
42 5cedca1b 2004-05-15 devnull *p = 0;
43 5cedca1b 2004-05-15 devnull return(q);
44 5cedca1b 2004-05-15 devnull }
45 5cedca1b 2004-05-15 devnull
46 5cedca1b 2004-05-15 devnull
47 5cedca1b 2004-05-15 devnull int
48 5cedca1b 2004-05-15 devnull ineqn (char *s, char *p)
49 5cedca1b 2004-05-15 devnull {
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;
52 5cedca1b 2004-05-15 devnull
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);
56 5cedca1b 2004-05-15 devnull p++;
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;
61 5cedca1b 2004-05-15 devnull }
62 5cedca1b 2004-05-15 devnull return(0);
63 5cedca1b 2004-05-15 devnull }