1 /*
2 * Copyright 1991 Sun Microsystems, Inc. All rights reserved.
3 * Use is subject to license terms.
4 */
5
6 /* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */
7 /* All Rights Reserved */
8
9 /*
10 * Copyright (c) 1980 Regents of the University of California.
11 * All rights reserved. The Berkeley software License Agreement
12 * specifies the terms and conditions for redistribution.
13 */
14
15 #pragma ident "%Z%%M% %I% %E% SMI"
16
17 /* tb.c: check which entries exist, also storage allocation */
18 # include "t..c"
19 #include <stdlib.h>
20
21 void
checkuse(void)22 checkuse(void)
23 {
24 int i,c, k;
25 for(c=0; c<ncol; c++)
26 {
27 used[c]=lused[c]=rused[c]=0;
28 for(i=0; i<nlin; i++)
29 {
30 if (instead[i] || fullbot[i]) continue;
31 k = ctype(i,c);
32 if (k== '-' || k == '=') continue;
33 if ((k=='n'||k=='a'))
34 {
35 rused[c]|= real(table[i][c].rcol);
36 if( !real(table[i][c].rcol))
37 used[c] |= real(table[i][c].col);
38 if (table[i][c].rcol)
39 lused[c] |= real(table[i][c].col);
40 }
41 else
42 used[c] |= real(table[i][c].col);
43 }
44 }
45 }
46
47 int
real(char * s)48 real(char *s)
49 {
50 if (s==0) return(0);
51 if (!point(s)) return(1);
52 if (*s==0) return(0);
53 return(1);
54 }
55
56 int spcount = 0;
57
58 # define MAXVEC 20
59
60 char *spvecs[MAXVEC];
61
62 char *
chspace(void)63 chspace(void)
64 {
65 char *pp;
66 if (spvecs[spcount])
67 return(spvecs[spcount++]);
68 if (spcount>=MAXVEC)
69 error(gettext("Too many characters in table"));
70 spvecs[spcount++]= pp = calloc(MAXCHS+MAXSTR,1);
71 if (pp == 0)
72 error(gettext("no space for characters"));
73 return(pp);
74 }
75
76 # define MAXPC 50
77
78 char *thisvec;
79 int tpcount = -1;
80 char *tpvecs[MAXPC];
81
82 int *
alocv(int n)83 alocv(int n)
84 {
85 int *tp, *q;
86 if (tpcount<0 || thisvec+n > tpvecs[tpcount]+MAXCHS)
87 {
88 tpcount++;
89 if (tpvecs[tpcount]==0)
90 {
91 tpvecs[tpcount] = calloc(MAXCHS,1);
92 }
93 thisvec = tpvecs[tpcount];
94 if (thisvec == 0)
95 error(gettext("no space for vectors"));
96 }
97 tp=(int *)thisvec;
98 thisvec+=n;
99 for(q=tp; q<(int *)thisvec; q++)
100 *q=0;
101 return(tp);
102 }
103
104 void
release(void)105 release(void)
106 {
107 extern char *exstore;
108 /* give back unwanted space in some vectors */
109 spcount=0;
110 tpcount= -1;
111 exstore=0;
112 }
113