Annotation of 43BSDReno/usr.bin/tbl/tm.c, revision 1.1.1.1

1.1       root        1: #ifndef lint
                      2: static char sccsid[] = "@(#)tm.c       4.2 8/11/83";
                      3: #endif
                      4: 
                      5:  /* tm.c: split numerical fields */
                      6: # include "t..c"
                      7: maknew(str)
                      8:        char *str;
                      9: {
                     10:        /* make two numerical fields */
                     11:        int dpoint, c;
                     12:        char *p, *q, *ba;
                     13:        p = str;
                     14:        for (ba= 0; c = *str; str++)
                     15:                if (c == '\\' && *(str+1)== '&')
                     16:                        ba=str;
                     17:        str=p;
                     18:        if (ba==0)
                     19:                {
                     20:                for (dpoint=0; *str; str++)
                     21:                        {
                     22:                        if (*str=='.' && !ineqn(str,p) &&
                     23:                                (str>p && digit(*(str-1)) ||
                     24:                                digit(*(str+1))))
                     25:                                        dpoint=str;
                     26:                        }
                     27:                if (dpoint==0)
                     28:                        for(; str>p; str--)
                     29:                        {
                     30:                        if (digit( * (str-1) ) && !ineqn(str, p))
                     31:                                break;
                     32:                        }
                     33:                if (!dpoint && p==str) /* not numerical, don't split */
                     34:                        return(0);
                     35:                if (dpoint) str=dpoint;
                     36:                }
                     37:        else
                     38:                str = ba;
                     39:        p =str;
                     40:        if (exstore ==0 || exstore >exlim)
                     41:                {
                     42:                exstore = chspace();
                     43:                exlim= exstore+MAXCHS;
                     44:                }
                     45:        q = exstore;
                     46:        while (*exstore++ = *str++);
                     47:        *p = 0;
                     48:        return(q);
                     49:        }
                     50: ineqn (s, p)
                     51:        char *s, *p;
                     52: {
                     53: /* true if s is in a eqn within p */
                     54: int ineq = 0, c;
                     55: while (c = *p)
                     56:        {
                     57:        if (s == p)
                     58:                return(ineq);
                     59:        p++;
                     60:        if ((ineq == 0) && (c == delim1))
                     61:                ineq = 1;
                     62:        else
                     63:        if ((ineq == 1) && (c == delim2))
                     64:                ineq = 0;
                     65:        }
                     66: return(0);
                     67: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.