101 lines
1.7 KiB
C
101 lines
1.7 KiB
C
/* 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;
|
|
}
|
|
|
|
|