1*48316Sbostic /*-
2*48316Sbostic * %sccs.include.proprietary.c%
3*48316Sbostic */
4*48316Sbostic
514514Ssam #ifndef lint
6*48316Sbostic static char sccsid[] = "@(#)tm.c 4.3 (Berkeley) 04/18/91";
7*48316Sbostic #endif /* not lint */
811043Sshannon
911043Sshannon /* tm.c: split numerical fields */
1011043Sshannon # include "t..c"
maknew(str)1111043Sshannon maknew(str)
1211043Sshannon char *str;
1311043Sshannon {
1411043Sshannon /* make two numerical fields */
1511043Sshannon int dpoint, c;
1611043Sshannon char *p, *q, *ba;
1711043Sshannon p = str;
1811043Sshannon for (ba= 0; c = *str; str++)
1911043Sshannon if (c == '\\' && *(str+1)== '&')
2011043Sshannon ba=str;
2111043Sshannon str=p;
2211043Sshannon if (ba==0)
2311043Sshannon {
2411043Sshannon for (dpoint=0; *str; str++)
2511043Sshannon {
2611043Sshannon if (*str=='.' && !ineqn(str,p) &&
2711043Sshannon (str>p && digit(*(str-1)) ||
2811043Sshannon digit(*(str+1))))
2911043Sshannon dpoint=str;
3011043Sshannon }
3111043Sshannon if (dpoint==0)
3211043Sshannon for(; str>p; str--)
3311043Sshannon {
3411043Sshannon if (digit( * (str-1) ) && !ineqn(str, p))
3511043Sshannon break;
3611043Sshannon }
3711043Sshannon if (!dpoint && p==str) /* not numerical, don't split */
3811043Sshannon return(0);
3911043Sshannon if (dpoint) str=dpoint;
4011043Sshannon }
4111043Sshannon else
4211043Sshannon str = ba;
4311043Sshannon p =str;
4411043Sshannon if (exstore ==0 || exstore >exlim)
4511043Sshannon {
4611043Sshannon exstore = chspace();
4711043Sshannon exlim= exstore+MAXCHS;
4811043Sshannon }
4911043Sshannon q = exstore;
5011043Sshannon while (*exstore++ = *str++);
5111043Sshannon *p = 0;
5211043Sshannon return(q);
5311043Sshannon }
ineqn(s,p)5411043Sshannon ineqn (s, p)
5511043Sshannon char *s, *p;
5611043Sshannon {
5711043Sshannon /* true if s is in a eqn within p */
5811043Sshannon int ineq = 0, c;
5911043Sshannon while (c = *p)
6011043Sshannon {
6111043Sshannon if (s == p)
6211043Sshannon return(ineq);
6311043Sshannon p++;
6411043Sshannon if ((ineq == 0) && (c == delim1))
6511043Sshannon ineq = 1;
6611043Sshannon else
6711043Sshannon if ((ineq == 1) && (c == delim2))
6811043Sshannon ineq = 0;
6911043Sshannon }
7011043Sshannon return(0);
7111043Sshannon }
72