xref: /csrg-svn/old/tbl/tt.c (revision 14514)
1 #ifndef lint
2 static char sccsid[] = "@(#)tt.c	4.2 08/11/83";
3 #endif
4 
5  /* tt.c: subroutines for drawing horizontal lines */
6 # include "t..c"
7 ctype(il, ic)
8 {
9 if (instead[il])
10 	return(0);
11 if (fullbot[il])
12 	return(0);
13 il = stynum[il];
14 return(style[il][ic]);
15 }
16 min(a,b)
17 {
18 return(a<b ? a : b);
19 }
20 fspan(i,c)
21 {
22 c++;
23 return(c<ncol && ctype(i,c)=='s');
24 }
25 lspan(i,c)
26 {
27 int k;
28 if (ctype(i,c) != 's') return(0);
29 c++;
30 if (c < ncol && ctype(i,c)== 's')
31 	return(0);
32 for(k=0; ctype(i,--c) == 's'; k++);
33 return(k);
34 }
35 ctspan(i,c)
36 {
37 int k;
38 c++;
39 for(k=1; c<ncol && ctype(i,c)=='s'; k++)
40 	c++;
41 return(k);
42 }
43 tohcol(ic)
44 {
45 			if (ic==0)
46 				fprintf(tabout, "\\h'|0'");
47 			else
48 				fprintf(tabout, "\\h'(|\\n(%du+|\\n(%du)/2u'", ic+CLEFT, ic+CRIGHT-1);
49 }
50 allh(i)
51 {
52 /* return true if every element in line i is horizontal */
53 /* also at least one must be horizontl */
54 int c, one, k;
55 if (fullbot[i]) return(1);
56 for(one=c=0; c<ncol; c++)
57 	{
58 	k = thish(i,c);
59 	if (k==0) return(0);
60 	if (k==1) continue;
61 	one=1;
62 	}
63 return(one);
64 }
65 thish(i,c)
66 {
67 	int t;
68 	char *s;
69 	struct colstr *pc;
70 	if (c<0)return(0);
71 	if (i<0) return(0);
72 	t = ctype(i,c);
73 	if (t=='_' || t == '-')
74 		return('-');
75 	if (t=='=')return('=');
76 	if (t=='^') return(1);
77 	if (fullbot[i] )
78 		return(fullbot[i]);
79 	if (t=='s') return(thish(i,c-1));
80 	if (t==0) return(1);
81 	pc = &table[i][c];
82 	s = (t=='a' ? pc->rcol : pc->col);
83 	if (s==0 || (point(s) && *s==0))
84 		return(1);
85 	if (vspen(s)) return(1);
86 	if (t=barent( s))
87 		return(t);
88 	return(0);
89 }
90