xref: /csrg-svn/old/tbl/tb.c (revision 14513)
1*14513Ssam #ifndef lint
2*14513Ssam static char sccsid[] = "@(#)tb.c	4.2 08/11/83";
3*14513Ssam #endif
411037Sshannon 
511037Sshannon  /* tb.c: check which entries exist, also storage allocation */
611037Sshannon # include "t..c"
711037Sshannon checkuse()
811037Sshannon {
911037Sshannon int i,c, k;
1011037Sshannon for(c=0; c<ncol; c++)
1111037Sshannon 	{
1211037Sshannon 	used[c]=lused[c]=rused[c]=0;
1311037Sshannon 	for(i=0; i<nlin; i++)
1411037Sshannon 		{
1511037Sshannon 		if (instead[i] || fullbot[i]) continue;
1611037Sshannon 		k = ctype(i,c);
1711037Sshannon 		if (k== '-' || k == '=') continue;
1811037Sshannon 		if ((k=='n'||k=='a'))
1911037Sshannon 			{
2011037Sshannon 			rused[c]|= real(table[i][c].rcol);
2111037Sshannon 			if( !real(table[i][c].rcol))
2211037Sshannon 			used[c] |= real(table[i][c].col);
2311037Sshannon 			if (table[i][c].rcol)
2411037Sshannon 			lused[c] |= real(table[i][c].col);
2511037Sshannon 			}
2611037Sshannon 		else
2711037Sshannon 			used[c] |= real(table[i][c].col);
2811037Sshannon 		}
2911037Sshannon 	}
3011037Sshannon }
3111037Sshannon real(s)
3211037Sshannon 	char *s;
3311037Sshannon {
3411037Sshannon if (s==0) return(0);
3511037Sshannon if (!point(s)) return(1);
3611037Sshannon if (*s==0) return(0);
3711037Sshannon return(1);
3811037Sshannon }
3911037Sshannon int spcount = 0;
4011037Sshannon extern char * calloc();
4111037Sshannon # define MAXVEC 20
4211037Sshannon char *spvecs[MAXVEC];
4311037Sshannon chspace()
4411037Sshannon {
4511037Sshannon char *pp;
4611037Sshannon if (spvecs[spcount])
4711037Sshannon 	return(spvecs[spcount++]);
4811037Sshannon if (spcount>=MAXVEC)
4911037Sshannon 	error("Too many characters in table");
5011037Sshannon spvecs[spcount++]= pp = calloc(MAXCHS+200,1);
5111037Sshannon if (pp== -1 || pp == 0)
5211037Sshannon 	error("no space for characters");
5311037Sshannon return(pp);
5411037Sshannon }
5511037Sshannon # define MAXPC 50
5611037Sshannon char *thisvec;
5711037Sshannon int tpcount = -1;
5811037Sshannon char *tpvecs[MAXPC];
5911037Sshannon alocv(n)
6011037Sshannon {
6111037Sshannon int *tp, *q;
6211037Sshannon if (tpcount<0 || thisvec+n > tpvecs[tpcount]+MAXCHS)
6311037Sshannon 	{
6411037Sshannon 	tpcount++;
6511037Sshannon 	if (tpvecs[tpcount]==0)
6611037Sshannon 		{
6711037Sshannon 		tpvecs[tpcount] = calloc(MAXCHS,1);
6811037Sshannon 		}
6911037Sshannon 	thisvec = tpvecs[tpcount];
7011037Sshannon 	if (thisvec == -1)
7111037Sshannon 		error("no space for vectors");
7211037Sshannon 	}
7311037Sshannon tp=thisvec;
7411037Sshannon thisvec+=n;
7511037Sshannon for(q=tp; q<thisvec; q++)
7611037Sshannon 	*q=0;
7711037Sshannon return(tp);
7811037Sshannon }
7911037Sshannon release()
8011037Sshannon {
8111037Sshannon extern char *exstore;
8211037Sshannon /* give back unwanted space in some vectors */
8311037Sshannon spcount=0;
8411037Sshannon tpcount= -1;
8511037Sshannon exstore=0;
8611037Sshannon }
87