Subversion Repositories planix.SVN

Rev

Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

/* tb.c: check which entries exist, also storage allocation */
# include "t.h"

void
checkuse(void)
{
        int     i, c, k;

        for (c = 0; c < ncol; c++) {
                used[c] = lused[c] = rused[c] = 0;
                for (i = 0; i < nlin; i++) {
                        if (instead[i] || fullbot[i]) 
                                continue;
                        k = ctype(i, c);
                        if (k == '-' || k == '=') 
                                continue;
                        if ((k == 'n' || k == 'a')) {
                                rused[c] |= real(table[i][c].rcol);
                                if ( !real(table[i][c].rcol))
                                        used[c] |= real(table[i][c].col);
                                if (table[i][c].rcol)
                                        lused[c] |= real(table[i][c].col);
                        } else
                                used[c] |= real(table[i][c].col);
                }
        }
}


int
real(char *s)
{
        if (s == 0) 
                return(0);
        if (!point(s)) 
                return(1);
        if (*s == 0) 
                return(0);
        return(1);
}


int     spcount = 0;
# define MAXVEC 20
char    *spvecs[MAXVEC];

char    *
chspace(void)
{
        char    *pp;

        if (spvecs[spcount])
                return(spvecs[spcount++]);
        if (spcount >= MAXVEC)
                error("Too many characters in table");
        spvecs[spcount++] = pp = calloc(MAXCHS + MAXLINLEN, 1);
        if (pp == (char *) - 1 || pp == (char *)0)
                error("no space for characters");
        return(pp);
}


# define MAXPC 50
char    *thisvec;
int     tpcount = -1;
char    *tpvecs[MAXPC];

int     *
alocv(int n)
{
        int     *tp, *q;

        if (tpcount < 0 || thisvec + n > tpvecs[tpcount] + MAXCHS) {
                tpcount++;
                if (tpvecs[tpcount] == 0) {
                        tpvecs[tpcount] = calloc(MAXCHS, 1);
                }
                thisvec = tpvecs[tpcount];
                if (thisvec == (char *)0)
                        error("no space for vectors");
        }
        tp = (int *)thisvec;
        thisvec += n;
        for (q = tp; q < (int *)thisvec; q++)
                *q = 0;
        return(tp);
}


void
release(void)
{
                        /* give back unwanted space in some vectors */
                        /* this should call free; it does not because
                                alloc() is so buggy */
        spcount = 0;
        tpcount = -1;
        exstore = 0;
}