blob: 5cc59880165974a8ef51d2d1af76c235754e3869 [file] [log] [blame]
/* 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;
}