TWO BUGS (printf doesn't take a FILE *, plus wrong arg to gettimeofday)
[unix-history] / usr / src / old / tbl / tm.c
CommitLineData
94bed826
KB
1/*-
2 * %sccs.include.proprietary.c%
3 */
4
476fcd16 5#ifndef lint
94bed826
KB
6static 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"
11maknew(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 }
54ineqn (s, p)
55 char *s, *p;
56{
57/* true if s is in a eqn within p */
58int ineq = 0, c;
59while (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 }
70return(0);
71}