| #ifndef lint |
| static char sccsid[] = "@(#)tm.c 4.2 8/11/83"; |
| #endif |
| |
| /* tm.c: split numerical fields */ |
| # include "t..c" |
| |
| extern int digit(int x); |
| |
| int ineqn (char *s,char *p); |
| |
| int maknew(char *str) |
| { |
| /* make two numerical fields */ |
| int dpoint, c; |
| char *p, *q, *ba; |
| 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=(int)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=(char *)dpoint; |
| } |
| else |
| str = ba; |
| p =str; |
| if (exstore ==0 || exstore >exlim) |
| { |
| exstore = chspace(); |
| exlim= exstore+MAXCHS; |
| } |
| q = exstore; |
| while (*exstore++ = *str++); |
| *p = 0; |
| return((int)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); |
| } |