13e12c5d1SDavid du Colombier /* tm.c: split numerical fields */ 23e12c5d1SDavid du Colombier # include "t.h" 33e12c5d1SDavid du Colombier 43e12c5d1SDavid du Colombier char * maknew(char * str)53e12c5d1SDavid du Colombiermaknew(char *str) 63e12c5d1SDavid du Colombier { 73e12c5d1SDavid du Colombier /* make two numerical fields */ 8*5e91980fSDavid du Colombier int c; 9*5e91980fSDavid du Colombier char *p, *q, *ba, *dpoint; 103e12c5d1SDavid du Colombier 113e12c5d1SDavid du Colombier p = str; 123e12c5d1SDavid du Colombier for (ba = 0; c = *str; str++) 133e12c5d1SDavid du Colombier if (c == '\\' && *(str + 1) == '&') 143e12c5d1SDavid du Colombier ba = str; 153e12c5d1SDavid du Colombier str = p; 163e12c5d1SDavid du Colombier if (ba == 0) { 173e12c5d1SDavid du Colombier for (dpoint = 0; *str; str++) { 183e12c5d1SDavid du Colombier if (*str == '.' && !ineqn(str, p) && 193e12c5d1SDavid du Colombier (str > p && digit(*(str - 1)) || 203e12c5d1SDavid du Colombier digit(*(str + 1)))) 21*5e91980fSDavid du Colombier dpoint = str; 223e12c5d1SDavid du Colombier } 233e12c5d1SDavid du Colombier if (dpoint == 0) 243e12c5d1SDavid du Colombier for (; str > p; str--) { 253e12c5d1SDavid du Colombier if (digit( *(str - 1) ) && !ineqn(str, p)) 263e12c5d1SDavid du Colombier break; 273e12c5d1SDavid du Colombier } 283e12c5d1SDavid du Colombier if (!dpoint && p == str) /* not numerical, don't split */ 293e12c5d1SDavid du Colombier return(0); 303e12c5d1SDavid du Colombier if (dpoint) 31*5e91980fSDavid du Colombier str = dpoint; 323e12c5d1SDavid du Colombier } else 333e12c5d1SDavid du Colombier str = ba; 343e12c5d1SDavid du Colombier p = str; 353e12c5d1SDavid du Colombier if (exstore == 0 || exstore > exlim) { 363e12c5d1SDavid du Colombier exstore = exspace = chspace(); 373e12c5d1SDavid du Colombier exlim = exstore + MAXCHS; 383e12c5d1SDavid du Colombier } 393e12c5d1SDavid du Colombier q = exstore; 403e12c5d1SDavid du Colombier while (*exstore++ = *str++) 413e12c5d1SDavid du Colombier ; 423e12c5d1SDavid du Colombier *p = 0; 433e12c5d1SDavid du Colombier return(q); 443e12c5d1SDavid du Colombier } 453e12c5d1SDavid du Colombier 463e12c5d1SDavid du Colombier 473e12c5d1SDavid du Colombier int ineqn(char * s,char * p)483e12c5d1SDavid du Colombierineqn (char *s, char *p) 493e12c5d1SDavid du Colombier { 503e12c5d1SDavid du Colombier /* true if s is in a eqn within p */ 513e12c5d1SDavid du Colombier int ineq = 0, c; 523e12c5d1SDavid du Colombier 533e12c5d1SDavid du Colombier while (c = *p) { 543e12c5d1SDavid du Colombier if (s == p) 553e12c5d1SDavid du Colombier return(ineq); 563e12c5d1SDavid du Colombier p++; 573e12c5d1SDavid du Colombier if ((ineq == 0) && (c == delim1)) 583e12c5d1SDavid du Colombier ineq = 1; 593e12c5d1SDavid du Colombier else if ((ineq == 1) && (c == delim2)) 603e12c5d1SDavid du Colombier ineq = 0; 613e12c5d1SDavid du Colombier } 623e12c5d1SDavid du Colombier return(0); 633e12c5d1SDavid du Colombier } 643e12c5d1SDavid du Colombier 653e12c5d1SDavid du Colombier 66