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