xref: /csrg-svn/old/tbl/tb.c (revision 24737)
114513Ssam #ifndef lint
2*24737Sbloom static char sccsid[] = "@(#)tb.c	4.3 09/14/85";
314513Ssam #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];
43*24737Sbloom 
44*24737Sbloom char *
4511037Sshannon chspace()
4611037Sshannon {
4711037Sshannon char *pp;
4811037Sshannon if (spvecs[spcount])
4911037Sshannon 	return(spvecs[spcount++]);
5011037Sshannon if (spcount>=MAXVEC)
5111037Sshannon 	error("Too many characters in table");
5211037Sshannon spvecs[spcount++]= pp = calloc(MAXCHS+200,1);
5311037Sshannon if (pp== -1 || pp == 0)
5411037Sshannon 	error("no space for characters");
5511037Sshannon return(pp);
5611037Sshannon }
5711037Sshannon # define MAXPC 50
5811037Sshannon char *thisvec;
5911037Sshannon int tpcount = -1;
6011037Sshannon char *tpvecs[MAXPC];
61*24737Sbloom 
62*24737Sbloom int *
6311037Sshannon alocv(n)
6411037Sshannon {
6511037Sshannon int *tp, *q;
6611037Sshannon if (tpcount<0 || thisvec+n > tpvecs[tpcount]+MAXCHS)
6711037Sshannon 	{
6811037Sshannon 	tpcount++;
6911037Sshannon 	if (tpvecs[tpcount]==0)
7011037Sshannon 		{
7111037Sshannon 		tpvecs[tpcount] = calloc(MAXCHS,1);
7211037Sshannon 		}
7311037Sshannon 	thisvec = tpvecs[tpcount];
7411037Sshannon 	if (thisvec == -1)
7511037Sshannon 		error("no space for vectors");
7611037Sshannon 	}
7711037Sshannon tp=thisvec;
7811037Sshannon thisvec+=n;
7911037Sshannon for(q=tp; q<thisvec; q++)
8011037Sshannon 	*q=0;
8111037Sshannon return(tp);
8211037Sshannon }
8311037Sshannon release()
8411037Sshannon {
8511037Sshannon extern char *exstore;
8611037Sshannon /* give back unwanted space in some vectors */
8711037Sshannon spcount=0;
8811037Sshannon tpcount= -1;
8911037Sshannon exstore=0;
9011037Sshannon }
91