blob: 0b146f3438d06b1aa97f0904cfb02a028b53de9a [file] [log] [blame]
#ifndef lint
static char sccsid[] = "@(#)tb.c 4.3 9/14/85";
#endif
/* tb.c: check which entries exist, also storage allocation */
# include "t..c"
extern int ctype(int il,int ic);
extern int real(char *s);
extern int point(int s);
extern void error(char *s);
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((int)s)) return(1);
if (*s==0) return(0);
return(1);
}
int spcount = 0;
extern char * calloc();
# 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+200,1);
if ((int)pp== -1 || (int)pp == 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 ((int)thisvec == -1)
error("no space for vectors");
}
tp=(int *) thisvec;
thisvec+=n;
for(q=tp; q<(int *)thisvec; q++)
*q=0;
return(tp);
}
void release(void)
{
extern char *exstore;
/* give back unwanted space in some vectors */
spcount=0;
tpcount= -1;
exstore=0;
}