xref: /csrg-svn/old/tbl/tm.c (revision 14514)
1*14514Ssam #ifndef lint
2*14514Ssam static char sccsid[] = "@(#)tm.c	4.2 08/11/83";
3*14514Ssam #endif
411043Sshannon 
511043Sshannon  /* tm.c: split numerical fields */
611043Sshannon # include "t..c"
711043Sshannon maknew(str)
811043Sshannon 	char *str;
911043Sshannon {
1011043Sshannon 	/* make two numerical fields */
1111043Sshannon 	int dpoint, c;
1211043Sshannon 	char *p, *q, *ba;
1311043Sshannon 	p = str;
1411043Sshannon 	for (ba= 0; c = *str; str++)
1511043Sshannon 		if (c == '\\' && *(str+1)== '&')
1611043Sshannon 			ba=str;
1711043Sshannon 	str=p;
1811043Sshannon 	if (ba==0)
1911043Sshannon 		{
2011043Sshannon 		for (dpoint=0; *str; str++)
2111043Sshannon 			{
2211043Sshannon 			if (*str=='.' && !ineqn(str,p) &&
2311043Sshannon 				(str>p && digit(*(str-1)) ||
2411043Sshannon 				digit(*(str+1))))
2511043Sshannon 					dpoint=str;
2611043Sshannon 			}
2711043Sshannon 		if (dpoint==0)
2811043Sshannon 			for(; str>p; str--)
2911043Sshannon 			{
3011043Sshannon 			if (digit( * (str-1) ) && !ineqn(str, p))
3111043Sshannon 				break;
3211043Sshannon 			}
3311043Sshannon 		if (!dpoint && p==str) /* not numerical, don't split */
3411043Sshannon 			return(0);
3511043Sshannon 		if (dpoint) str=dpoint;
3611043Sshannon 		}
3711043Sshannon 	else
3811043Sshannon 		str = ba;
3911043Sshannon 	p =str;
4011043Sshannon 	if (exstore ==0 || exstore >exlim)
4111043Sshannon 		{
4211043Sshannon 		exstore = chspace();
4311043Sshannon 		exlim= exstore+MAXCHS;
4411043Sshannon 		}
4511043Sshannon 	q = exstore;
4611043Sshannon 	while (*exstore++ = *str++);
4711043Sshannon 	*p = 0;
4811043Sshannon 	return(q);
4911043Sshannon 	}
5011043Sshannon ineqn (s, p)
5111043Sshannon 	char *s, *p;
5211043Sshannon {
5311043Sshannon /* true if s is in a eqn within p */
5411043Sshannon int ineq = 0, c;
5511043Sshannon while (c = *p)
5611043Sshannon 	{
5711043Sshannon 	if (s == p)
5811043Sshannon 		return(ineq);
5911043Sshannon 	p++;
6011043Sshannon 	if ((ineq == 0) && (c == delim1))
6111043Sshannon 		ineq = 1;
6211043Sshannon 	else
6311043Sshannon 	if ((ineq == 1) && (c == delim2))
6411043Sshannon 		ineq = 0;
6511043Sshannon 	}
6611043Sshannon return(0);
6711043Sshannon }
68