Subversion Repositories planix.SVN

Rev

Blame | Last modification | View Log | RSS feed

/* tc.c: find character not in table to delimit fields */
# include "t.h"

# define COMMON "\002\003\005\006\007!%&#/?,:;<=>@`^~_{}+-*" \
        "ABCDEFGHIJKMNOPQRSTUVWXZabcdefgjkoqrstwxyz"

void
choochar(void)
{
                                /* choose funny characters to delimit fields */
        int     had[128], ilin, icol, k;
        char    *s;

        for (icol = 0; icol < 128; icol++)
                had[icol] = 0;
        F1 = F2 = 0;
        for (ilin = 0; ilin < nlin; ilin++) {
                if (instead[ilin] || fullbot[ilin])
                        continue;
                for (icol = 0; icol < ncol; icol++) {
                        k = ctype(ilin, icol);
                        if (k == 0 || k == '-' || k == '=')
                                continue;
                        s = table[ilin][icol].col;
                        if (point(s))
                                for (; *s; s++)
                                        if((unsigned char)*s < 128)
                                                had[(unsigned char)*s] = 1;
                        s = table[ilin][icol].rcol;
                        if (point(s))
                                for (; *s; s++)
                                        if((unsigned char)*s < 128)
                                                had[(unsigned char)*s] = 1;
                }
        }
                                /* choose first funny character */
        for (s = COMMON "Y"; *s; s++) {
                if (had[*s] == 0) {
                        F1 = *s;
                        had[F1] = 1;
                        break;
                }
        }
                                /* choose second funny character */
        for (s = COMMON "u"; *s; s++) {
                if (had[*s] == 0) {
                        F2 = *s;
                        break;
                }
        }
        if (F1 == 0 || F2 == 0)
                error("couldn't find characters to use for delimiters");
}

int
point(char *ss)
{
        vlong s = (uintptr)ss;

        return(s >= 128 || s < 0);
}