#ifndef lint
static char sccsid[] = "@(#)checkuse.c	1.2 (CWI) 85/10/02";
#endif lint


/*
 * check which entries exist, also storage allocation
 */

#include "defs.h"
#include "ext.h"

checkuse()
{
	register 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);
		}
	}
}

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

#define MAXVEC 20

static int spcount = 0;
extern char *calloc();
static char *spvecs[MAXVEC];

char *
chspace()
{
	register 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(pp == (char *) -1 || pp ==  (char *) 0)
		error("no space for characters");
	return(pp);
}

#define MAXPC 50

static char *thisvec;
static int tpcount = -1;
static char *tpvecs[MAXPC];

int *
alocv(n)
{
	register 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 *) -1)
			error("no space for vectors");
	}
	tp = (int *)thisvec;
	thisvec += n;
	for(q = tp; q < (int *)thisvec; q++)
		*q = 0;
	return(tp);
}

release(){
	extern char *exstore;

	/*
	 * give back unwanted space in some vectors
	 */
	spcount = 0;
	tpcount = -1;
	exstore = 0;
}
