Subversion Repositories planix.SVN

Rev

Rev 2 | Blame | Compare with Previous | Last modification | View Log | RSS feed

/* tm.c: split numerical fields */
# include "t.h"

char    *
maknew(char *str)
{
                                /* make two numerical fields */
        int     c;
        char    *p, *q, *ba, *dpoint;

        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 = 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 = dpoint;
        } else
                str = ba;
        p = str;
        if (exstore == 0 || exstore > exlim) {
                exstore = exspace = chspace();
                exlim = exstore + MAXCHS;
        }
        q = exstore;
        while (*exstore++ = *str++)
                ;
        *p = 0;
        return(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);
}