Commit | Line | Data |
---|---|---|
94bed826 KB |
1 | /*- |
2 | * %sccs.include.proprietary.c% | |
3 | */ | |
4 | ||
476fcd16 | 5 | #ifndef lint |
94bed826 KB |
6 | static char sccsid[] = "@(#)tm.c 4.3 (Berkeley) %G%"; |
7 | #endif /* not lint */ | |
ae4ebdcf BS |
8 | |
9 | /* tm.c: split numerical fields */ | |
10 | # include "t..c" | |
11 | maknew(str) | |
12 | char *str; | |
13 | { | |
14 | /* make two numerical fields */ | |
15 | int dpoint, c; | |
16 | char *p, *q, *ba; | |
17 | p = str; | |
18 | for (ba= 0; c = *str; str++) | |
19 | if (c == '\\' && *(str+1)== '&') | |
20 | ba=str; | |
21 | str=p; | |
22 | if (ba==0) | |
23 | { | |
24 | for (dpoint=0; *str; str++) | |
25 | { | |
26 | if (*str=='.' && !ineqn(str,p) && | |
27 | (str>p && digit(*(str-1)) || | |
28 | digit(*(str+1)))) | |
29 | dpoint=str; | |
30 | } | |
31 | if (dpoint==0) | |
32 | for(; str>p; str--) | |
33 | { | |
34 | if (digit( * (str-1) ) && !ineqn(str, p)) | |
35 | break; | |
36 | } | |
37 | if (!dpoint && p==str) /* not numerical, don't split */ | |
38 | return(0); | |
39 | if (dpoint) str=dpoint; | |
40 | } | |
41 | else | |
42 | str = ba; | |
43 | p =str; | |
44 | if (exstore ==0 || exstore >exlim) | |
45 | { | |
46 | exstore = chspace(); | |
47 | exlim= exstore+MAXCHS; | |
48 | } | |
49 | q = exstore; | |
50 | while (*exstore++ = *str++); | |
51 | *p = 0; | |
52 | return(q); | |
53 | } | |
54 | ineqn (s, p) | |
55 | char *s, *p; | |
56 | { | |
57 | /* true if s is in a eqn within p */ | |
58 | int ineq = 0, c; | |
59 | while (c = *p) | |
60 | { | |
61 | if (s == p) | |
62 | return(ineq); | |
63 | p++; | |
64 | if ((ineq == 0) && (c == delim1)) | |
65 | ineq = 1; | |
66 | else | |
67 | if ((ineq == 1) && (c == delim2)) | |
68 | ineq = 0; | |
69 | } | |
70 | return(0); | |
71 | } |