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