|
|
1.1 ! root 1: /* tm.c: split numerical fields */ ! 2: # include "t..c" ! 3: char *maknew(str) ! 4: char *str; ! 5: { ! 6: /* make two numerical fields */ ! 7: extern char *chspace(); ! 8: int dpoint, c; ! 9: char *p, *q, *ba; ! 10: p = str; ! 11: for (ba= 0; c = *str; str++) ! 12: if (c == '\\' && *(str+1)== '&') ! 13: ba=str; ! 14: str=p; ! 15: if (ba==0) ! 16: { ! 17: for (dpoint=0; *str; str++) ! 18: { ! 19: if (*str=='.' && !ineqn(str,p) && ! 20: (str>p && digit(*(str-1)) || ! 21: digit(*(str+1)))) ! 22: dpoint=(int)str; ! 23: } ! 24: if (dpoint==0) ! 25: for(; str>p; str--) ! 26: { ! 27: if (digit( * (str-1) ) && !ineqn(str, p)) ! 28: break; ! 29: } ! 30: if (!dpoint && p==str) /* not numerical, don't split */ ! 31: return(0); ! 32: if (dpoint) str=(char *)dpoint; ! 33: } ! 34: else ! 35: str = ba; ! 36: p =str; ! 37: if (exstore ==0 || exstore >exlim) ! 38: { ! 39: exstore = exspace = chspace(); ! 40: exlim= exstore+MAXCHS; ! 41: } ! 42: q = exstore; ! 43: while (*exstore++ = *str++); ! 44: *p = 0; ! 45: return(q); ! 46: } ! 47: ineqn (s, p) ! 48: char *s, *p; ! 49: { ! 50: /* true if s is in a eqn within p */ ! 51: int ineq = 0, c; ! 52: while (c = *p) ! 53: { ! 54: if (s == p) ! 55: return(ineq); ! 56: p++; ! 57: if ((ineq == 0) && (c == delim1)) ! 58: ineq = 1; ! 59: else ! 60: if ((ineq == 1) && (c == delim2)) ! 61: ineq = 0; ! 62: } ! 63: return(0); ! 64: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.