125076Sjaap #ifndef lint
2*25093Sjaap static char sccsid[] = "@(#)subr.c	1.2 (CWI) 85/10/02";
325076Sjaap #endif lint
425076Sjaap 
525076Sjaap 
6*25093Sjaap /*
7*25093Sjaap  * variuos subroutines for f.i drawing horizontal lines
8*25093Sjaap  *
9*25093Sjaap  * We could stuff more routines in this file which are used in various modules
10*25093Sjaap  * of tbl, like reg in misc.c etc. We leave this for later.
11*25093Sjaap  */
1225076Sjaap 
1325076Sjaap #include "defs.h"
1425076Sjaap #include "ext.h"
1525076Sjaap 
ctype(il,ic)1625076Sjaap ctype(il, ic)
1725076Sjaap {
1825076Sjaap 
1925076Sjaap 	if(instead[il])
2025076Sjaap 		return(0);
2125076Sjaap 	if(fullbot[il])
2225076Sjaap 		return(0);
2325076Sjaap 	il = stynum[il];
2425076Sjaap 	return(style[il][ic]);
2525076Sjaap }
2625076Sjaap 
fspan(i,c)2725076Sjaap fspan(i, c)
2825076Sjaap {
2925076Sjaap 
3025076Sjaap 	c++;
3125076Sjaap 	return(c < ncol && ctype (i, c) == 's');
3225076Sjaap }
3325076Sjaap 
lspan(i,c)3425076Sjaap lspan(i, c)
3525076Sjaap {
36*25093Sjaap 	register int k;
3725076Sjaap 
3825076Sjaap 	if(ctype(i, c) != 's')
3925076Sjaap 		return(0);
4025076Sjaap 	c++;
4125076Sjaap 	if(c < ncol && ctype(i, c) == 's')
4225076Sjaap 		return(0);
4325076Sjaap 	for(k = 0; ctype(i, --c) == 's'; k++)
4425076Sjaap 		;
4525076Sjaap 	return(k);
4625076Sjaap }
4725076Sjaap 
ctspan(i,c)4825076Sjaap ctspan(i, c)
4925076Sjaap {
50*25093Sjaap 	register int k;
5125076Sjaap 
5225076Sjaap 	c++;
5325076Sjaap 	for(k = 1; c < ncol && ctype(i, c) == 's'; k++)
5425076Sjaap 		c++;
5525076Sjaap 	return(k);
5625076Sjaap }
5725076Sjaap 
tohcol(ic)5825076Sjaap tohcol(ic)
5925076Sjaap {
6025076Sjaap 	if(ic == 0)
6125076Sjaap 		printf("\\h'|0'");
6225076Sjaap 	else
6325076Sjaap 		printf("\\h'(|\\n(%2su+|\\n(%2su)/2u'", reg(ic, CLEFT),
6425076Sjaap 							reg(ic - 1, CRIGHT));
6525076Sjaap }
6625076Sjaap 
6725076Sjaap /*
6825076Sjaap  * Return true if every element in line i is horizontal
6925076Sjaap  * Also at least one must be horizontal
7025076Sjaap  */
allh(i)7125076Sjaap allh(i)
7225076Sjaap {
73*25093Sjaap 	register int c, one, k;
7425076Sjaap 
7525076Sjaap 	if(fullbot[i])
7625076Sjaap 		return(1);
7725076Sjaap 	for(one = c = 0; c < ncol; c++){
7825076Sjaap 		k = thish(i, c);
7925076Sjaap 		if(k == 0)
8025076Sjaap 			return(0);
8125076Sjaap 		if(k == 1)
8225076Sjaap 			continue;
8325076Sjaap 		one = 1;
8425076Sjaap 	}
8525076Sjaap 	return(one);
8625076Sjaap }
8725076Sjaap 
thish(i,c)8825076Sjaap thish(i, c)
8925076Sjaap {
90*25093Sjaap 	register int t;
91*25093Sjaap 	register char *s;
92*25093Sjaap 	register struct colstr *pc;
9325076Sjaap 
9425076Sjaap 	if(c < 0)
9525076Sjaap 		return(0);
9625076Sjaap 	if(i < 0)
9725076Sjaap 		return(0);
9825076Sjaap 	t = ctype(i, c);
9925076Sjaap 	if(t == '_' || t == '-')
10025076Sjaap 		return('-');
10125076Sjaap 	if(t == '=')
10225076Sjaap 		return('=');
10325076Sjaap 	if(t == '^')
10425076Sjaap 		return(1);
10525076Sjaap 	if(fullbot[i])
10625076Sjaap 		return(fullbot[i]);
10725076Sjaap 	if(t == 's')
10825076Sjaap 		return(thish (i, c - 1));
10925076Sjaap 	if(t == 0)
11025076Sjaap 		return(1);
11125076Sjaap 	pc = &table[i][c];
11225076Sjaap 	s = (t == 'a' ? pc -> rcol : pc -> col);
11325076Sjaap 	if(s == 0 || (point(s) && *s == 0))
11425076Sjaap 		return(1);
11525076Sjaap 	if(vspen(s))
11625076Sjaap 		return(1);
11725076Sjaap 	if(t = barent(s))
11825076Sjaap 		return(t);
11925076Sjaap 	return(0);
12025076Sjaap }
12125076Sjaap 
12225076Sjaap 
prefix(small,big)12325076Sjaap prefix(small, big)
12425076Sjaap char *small, *big;
12525076Sjaap {
12625076Sjaap 	register int c;
12725076Sjaap 	while ((c= *small++) == *big++)
12825076Sjaap 		if (c==0) return(1);
12925076Sjaap 	return(c==0);
13025076Sjaap }
131