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