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