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