/* tm.c: split numerical fields */
# include "t.h"

char	*
maknew(char *str)
{
				/* make two numerical fields */
	int	c;
	char	*p, *q, *ba, *dpoint;

	p = str;
	for (ba = 0; c = *str; str++)
		if (c == '\\' && *(str + 1) == '&')
			ba = str;
	str = p;
	if (ba == 0) {
		for (dpoint = 0; *str; str++) {
			if (*str == '.' && !ineqn(str, p) && 
			    (str > p && digit(*(str - 1)) || 
			    digit(*(str + 1))))
				dpoint = str;
		}
		if (dpoint == 0)
			for (; str > p; str--) {
				if (digit( *(str - 1) ) && !ineqn(str, p))
					break;
			}
		if (!dpoint && p == str) /* not numerical, don't split */
			return(0);
		if (dpoint) 
			str = dpoint;
	} else
		str = ba;
	p = str;
	if (exstore == 0 || exstore > exlim) {
		exstore = exspace = chspace();
		exlim = exstore + MAXCHS;
	}
	q = exstore;
	while (*exstore++ = *str++)
		;
	*p = 0;
	return(q);
}


int
ineqn (char *s, char *p)
{
				/* true if s is in a eqn within p */
	int	ineq = 0, c;

	while (c = *p) {
		if (s == p)
			return(ineq);
		p++;
		if ((ineq == 0) && (c == delim1))
			ineq = 1;
		else if ((ineq == 1) && (c == delim2))
			ineq = 0;
	}
	return(0);
}


