date and time created 88/07/21 17:35:19 by marc
[unix-history] / usr / src / local / ditroff / ditroff.okeeffe / tbl / checkuse.c
#ifndef lint
static char sccsid[] = "@(#)checkuse.c 1.2 (CWI) 85/10/02";
#endif lint
/*
* check which entries exist, also storage allocation
*/
#include "defs.h"
#include "ext.h"
checkuse()
{
register 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);
}
}
}
real(s)
char *s;
{
if(s == 0)
return(0);
if(!point(s))
return(1);
if(*s == 0)
return(0);
return(1);
}
#define MAXVEC 20
static int spcount = 0;
extern char *calloc();
static char *spvecs[MAXVEC];
char *
chspace()
{
register char *pp;
if(spvecs[spcount])
return(spvecs[spcount++]);
if(spcount >= MAXVEC)
error("Too many characters in table");
spvecs[spcount++] = pp = calloc(MAXCHS + 200, 1);
if(pp == (char *) -1 || pp == (char *) 0)
error("no space for characters");
return(pp);
}
#define MAXPC 50
static char *thisvec;
static int tpcount = -1;
static char *tpvecs[MAXPC];
int *
alocv(n)
{
register 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 *) -1)
error("no space for vectors");
}
tp = (int *)thisvec;
thisvec += n;
for(q = tp; q < (int *)thisvec; q++)
*q = 0;
return(tp);
}
release(){
extern char *exstore;
/*
* give back unwanted space in some vectors
*/
spcount = 0;
tpcount = -1;
exstore = 0;
}