123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- /* tb.c: check which entries exist, also storage allocation */
- # include "t.h"
- void
- checkuse(void)
- {
- int i, c, k;
- for (c = 0; c < ncol; c++) {
- used[c] = lused[c] = rused[c] = 0;
- for (i = 0; i < nlin; i++) {
- if (instead[i] || fullbot[i])
- continue;
- k = ctype(i, c);
- if (k == '-' || k == '=')
- continue;
- if ((k == 'n' || k == 'a')) {
- rused[c] |= real(table[i][c].rcol);
- if ( !real(table[i][c].rcol))
- used[c] |= real(table[i][c].col);
- if (table[i][c].rcol)
- lused[c] |= real(table[i][c].col);
- } else
- used[c] |= real(table[i][c].col);
- }
- }
- }
- int
- real(char *s)
- {
- if (s == 0)
- return(0);
- if (!point(s))
- return(1);
- if (*s == 0)
- return(0);
- return(1);
- }
- int spcount = 0;
- # define MAXVEC 20
- char *spvecs[MAXVEC];
- char *
- chspace(void)
- {
- char *pp;
- if (spvecs[spcount])
- return(spvecs[spcount++]);
- if (spcount >= MAXVEC)
- error("Too many characters in table");
- spvecs[spcount++] = pp = calloc(MAXCHS + MAXLINLEN, 1);
- if (pp == (char *) - 1 || pp == (char *)0)
- error("no space for characters");
- return(pp);
- }
- # define MAXPC 50
- char *thisvec;
- int tpcount = -1;
- char *tpvecs[MAXPC];
- int *
- alocv(int n)
- {
- int *tp, *q;
- if (tpcount < 0 || thisvec + n > tpvecs[tpcount] + MAXCHS) {
- tpcount++;
- if (tpvecs[tpcount] == 0) {
- tpvecs[tpcount] = calloc(MAXCHS, 1);
- }
- thisvec = tpvecs[tpcount];
- if (thisvec == (char *)0)
- error("no space for vectors");
- }
- tp = (int *)thisvec;
- thisvec += n;
- for (q = tp; q < (int *)thisvec; q++)
- *q = 0;
- return(tp);
- }
- void
- release(void)
- {
- /* give back unwanted space in some vectors */
- /* this should call free; it does not because
- alloc() is so buggy */
- spcount = 0;
- tpcount = -1;
- exstore = 0;
- }
|