|  | /* 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); | 
|  | } | 
|  |  | 
|  |  |