1 /* tb.c: check which entries exist, also storage allocation */ 2 # include "t.h" 3 4 void checkuse(void)5checkuse(void) 6 { 7 int i, c, k; 8 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 } 28 29 30 int real(char * s)31real(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 } 41 42 43 int spcount = 0; 44 # define MAXVEC 20 45 char *spvecs[MAXVEC]; 46 47 char * chspace(void)48chspace(void) 49 { 50 char *pp; 51 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 } 61 62 63 # define MAXPC 50 64 char *thisvec; 65 int tpcount = -1; 66 char *tpvecs[MAXPC]; 67 68 int * alocv(int n)69alocv(int n) 70 { 71 int *tp, *q; 72 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 } 88 89 90 void release(void)91release(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 } 100 101 102