xref: /csrg-svn/old/tbl/tb.c (revision 11037)
1*11037Sshannon /*	tb.c	4.1	83/02/12	*/
2*11037Sshannon 
3*11037Sshannon  /* tb.c: check which entries exist, also storage allocation */
4*11037Sshannon # include "t..c"
5*11037Sshannon checkuse()
6*11037Sshannon {
7*11037Sshannon int i,c, k;
8*11037Sshannon for(c=0; c<ncol; c++)
9*11037Sshannon 	{
10*11037Sshannon 	used[c]=lused[c]=rused[c]=0;
11*11037Sshannon 	for(i=0; i<nlin; i++)
12*11037Sshannon 		{
13*11037Sshannon 		if (instead[i] || fullbot[i]) continue;
14*11037Sshannon 		k = ctype(i,c);
15*11037Sshannon 		if (k== '-' || k == '=') continue;
16*11037Sshannon 		if ((k=='n'||k=='a'))
17*11037Sshannon 			{
18*11037Sshannon 			rused[c]|= real(table[i][c].rcol);
19*11037Sshannon 			if( !real(table[i][c].rcol))
20*11037Sshannon 			used[c] |= real(table[i][c].col);
21*11037Sshannon 			if (table[i][c].rcol)
22*11037Sshannon 			lused[c] |= real(table[i][c].col);
23*11037Sshannon 			}
24*11037Sshannon 		else
25*11037Sshannon 			used[c] |= real(table[i][c].col);
26*11037Sshannon 		}
27*11037Sshannon 	}
28*11037Sshannon }
29*11037Sshannon real(s)
30*11037Sshannon 	char *s;
31*11037Sshannon {
32*11037Sshannon if (s==0) return(0);
33*11037Sshannon if (!point(s)) return(1);
34*11037Sshannon if (*s==0) return(0);
35*11037Sshannon return(1);
36*11037Sshannon }
37*11037Sshannon int spcount = 0;
38*11037Sshannon extern char * calloc();
39*11037Sshannon # define MAXVEC 20
40*11037Sshannon char *spvecs[MAXVEC];
41*11037Sshannon chspace()
42*11037Sshannon {
43*11037Sshannon char *pp;
44*11037Sshannon if (spvecs[spcount])
45*11037Sshannon 	return(spvecs[spcount++]);
46*11037Sshannon if (spcount>=MAXVEC)
47*11037Sshannon 	error("Too many characters in table");
48*11037Sshannon spvecs[spcount++]= pp = calloc(MAXCHS+200,1);
49*11037Sshannon if (pp== -1 || pp == 0)
50*11037Sshannon 	error("no space for characters");
51*11037Sshannon return(pp);
52*11037Sshannon }
53*11037Sshannon # define MAXPC 50
54*11037Sshannon char *thisvec;
55*11037Sshannon int tpcount = -1;
56*11037Sshannon char *tpvecs[MAXPC];
57*11037Sshannon alocv(n)
58*11037Sshannon {
59*11037Sshannon int *tp, *q;
60*11037Sshannon if (tpcount<0 || thisvec+n > tpvecs[tpcount]+MAXCHS)
61*11037Sshannon 	{
62*11037Sshannon 	tpcount++;
63*11037Sshannon 	if (tpvecs[tpcount]==0)
64*11037Sshannon 		{
65*11037Sshannon 		tpvecs[tpcount] = calloc(MAXCHS,1);
66*11037Sshannon 		}
67*11037Sshannon 	thisvec = tpvecs[tpcount];
68*11037Sshannon 	if (thisvec == -1)
69*11037Sshannon 		error("no space for vectors");
70*11037Sshannon 	}
71*11037Sshannon tp=thisvec;
72*11037Sshannon thisvec+=n;
73*11037Sshannon for(q=tp; q<thisvec; q++)
74*11037Sshannon 	*q=0;
75*11037Sshannon return(tp);
76*11037Sshannon }
77*11037Sshannon release()
78*11037Sshannon {
79*11037Sshannon extern char *exstore;
80*11037Sshannon /* give back unwanted space in some vectors */
81*11037Sshannon spcount=0;
82*11037Sshannon tpcount= -1;
83*11037Sshannon exstore=0;
84*11037Sshannon }
85