Blob


1 /* tb.c: check which entries exist, also storage allocation */
2 # include "t.h"
4 void
5 checkuse(void)
6 {
7 int i, c, k;
9 for (c = 0; c < ncol; c++) {
10 used[c] = lused[c] = rused[c] = 0;
11 for (i = 0; i < nlin; i++) {
12 if (instead[i] || fullbot[i])
13 continue;
14 k = ctype(i, c);
15 if (k == '-' || k == '=')
16 continue;
17 if ((k == 'n' || k == 'a')) {
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 } else
24 used[c] |= real(table[i][c].col);
25 }
26 }
27 }
30 int
31 real(char *s)
32 {
33 if (s == 0)
34 return(0);
35 if (!point(s))
36 return(1);
37 if (*s == 0)
38 return(0);
39 return(1);
40 }
43 int spcount = 0;
44 # define MAXVEC 20
45 char *spvecs[MAXVEC];
47 char *
48 chspace(void)
49 {
50 char *pp;
52 if (spvecs[spcount])
53 return(spvecs[spcount++]);
54 if (spcount >= MAXVEC)
55 error("Too many characters in table");
56 spvecs[spcount++] = pp = calloc(MAXCHS + MAXLINLEN, 1);
57 if (pp == (char *) - 1 || pp == (char *)0)
58 error("no space for characters");
59 return(pp);
60 }
63 # define MAXPC 50
64 char *thisvec;
65 int tpcount = -1;
66 char *tpvecs[MAXPC];
68 int *
69 alocv(int n)
70 {
71 int *tp, *q;
73 if (tpcount < 0 || thisvec + n > tpvecs[tpcount] + MAXCHS) {
74 tpcount++;
75 if (tpvecs[tpcount] == 0) {
76 tpvecs[tpcount] = calloc(MAXCHS, 1);
77 }
78 thisvec = tpvecs[tpcount];
79 if (thisvec == (char *)0)
80 error("no space for vectors");
81 }
82 tp = (int *)thisvec;
83 thisvec += n;
84 for (q = tp; q < (int *)thisvec; q++)
85 *q = 0;
86 return(tp);
87 }
90 void
91 release(void)
92 {
93 /* give back unwanted space in some vectors */
94 /* this should call free; it does not because
95 alloc() is so buggy */
96 spcount = 0;
97 tpcount = -1;
98 exstore = 0;
99 }