1 #ifndef lint
2 static char sccsid[] = "@(#)subr.c 1.2 (CWI) 85/10/02";
3 #endif lint
4
5
6 /*
7 * variuos subroutines for f.i drawing horizontal lines
8 *
9 * We could stuff more routines in this file which are used in various modules
10 * of tbl, like reg in misc.c etc. We leave this for later.
11 */
12
13 #include "defs.h"
14 #include "ext.h"
15
ctype(il,ic)16 ctype(il, ic)
17 {
18
19 if(instead[il])
20 return(0);
21 if(fullbot[il])
22 return(0);
23 il = stynum[il];
24 return(style[il][ic]);
25 }
26
fspan(i,c)27 fspan(i, c)
28 {
29
30 c++;
31 return(c < ncol && ctype (i, c) == 's');
32 }
33
lspan(i,c)34 lspan(i, c)
35 {
36 register int k;
37
38 if(ctype(i, c) != 's')
39 return(0);
40 c++;
41 if(c < ncol && ctype(i, c) == 's')
42 return(0);
43 for(k = 0; ctype(i, --c) == 's'; k++)
44 ;
45 return(k);
46 }
47
ctspan(i,c)48 ctspan(i, c)
49 {
50 register int k;
51
52 c++;
53 for(k = 1; c < ncol && ctype(i, c) == 's'; k++)
54 c++;
55 return(k);
56 }
57
tohcol(ic)58 tohcol(ic)
59 {
60 if(ic == 0)
61 printf("\\h'|0'");
62 else
63 printf("\\h'(|\\n(%2su+|\\n(%2su)/2u'", reg(ic, CLEFT),
64 reg(ic - 1, CRIGHT));
65 }
66
67 /*
68 * Return true if every element in line i is horizontal
69 * Also at least one must be horizontal
70 */
allh(i)71 allh(i)
72 {
73 register int c, one, k;
74
75 if(fullbot[i])
76 return(1);
77 for(one = c = 0; c < ncol; c++){
78 k = thish(i, c);
79 if(k == 0)
80 return(0);
81 if(k == 1)
82 continue;
83 one = 1;
84 }
85 return(one);
86 }
87
thish(i,c)88 thish(i, c)
89 {
90 register int t;
91 register char *s;
92 register struct colstr *pc;
93
94 if(c < 0)
95 return(0);
96 if(i < 0)
97 return(0);
98 t = ctype(i, c);
99 if(t == '_' || t == '-')
100 return('-');
101 if(t == '=')
102 return('=');
103 if(t == '^')
104 return(1);
105 if(fullbot[i])
106 return(fullbot[i]);
107 if(t == 's')
108 return(thish (i, c - 1));
109 if(t == 0)
110 return(1);
111 pc = &table[i][c];
112 s = (t == 'a' ? pc -> rcol : pc -> col);
113 if(s == 0 || (point(s) && *s == 0))
114 return(1);
115 if(vspen(s))
116 return(1);
117 if(t = barent(s))
118 return(t);
119 return(0);
120 }
121
122
prefix(small,big)123 prefix(small, big)
124 char *small, *big;
125 {
126 register int c;
127 while ((c= *small++) == *big++)
128 if (c==0) return(1);
129 return(c==0);
130 }
131