125062Sjaap #ifndef lint
2*25087Sjaap static char sccsid[] = "@(#)getstop.c	1.2 (CWI) 85/10/02";
325062Sjaap #endif lint
425062Sjaap 
525062Sjaap 
6*25087Sjaap /*
7*25087Sjaap  * find the start points for the line drawing routines
8*25087Sjaap  */
925062Sjaap 
1025062Sjaap #include "defs.h"
1125062Sjaap #include "ext.h"
1225062Sjaap 
getstop()1325062Sjaap getstop()
1425062Sjaap {
1525062Sjaap 	register int i, c, k;
1625062Sjaap 	int junk, stopp;
1725062Sjaap 
1825062Sjaap 	stopp = 1;
1925062Sjaap 	for(i = 0; i < MAXLIN; i++)
2025062Sjaap 		linestop[i] = 0;
2125062Sjaap 	for(i = 0; i < nlin; i++){
2225062Sjaap 		for(c = 0; c < ncol; c++){
2325062Sjaap 			k = left(i, c, &junk);
2425062Sjaap 			if(k >= 0 && linestop[k] == 0)
2525062Sjaap 				linestop[k] = ++stopp;
2625062Sjaap 		}
2725062Sjaap 	}
2825062Sjaap 	if(boxflg || allflg || dboxflg)
2925062Sjaap 		linestop[0] = 1;
3025062Sjaap }
3125062Sjaap 
3225062Sjaap /*
3325062Sjaap  * returns -1 if no line to left
3425062Sjaap  * returns number of line where it starts
3525062Sjaap  * stores into lwid the kind of line
3625062Sjaap  */
left(i,c,lwidp)3725062Sjaap left(i, c, lwidp)
3825062Sjaap int i, c;
3925062Sjaap int *lwidp;
4025062Sjaap {
4125062Sjaap 	register int kind, li, lj;
4225062Sjaap 
4325062Sjaap 	*lwidp = 0;
4425062Sjaap 	kind = lefdata(i, c);
4525062Sjaap 	if(kind == 0)
4625062Sjaap 		return(-1);
4725062Sjaap 	if(i + 1 < nlin){
4825062Sjaap 		if(lefdata(next (i), c) == kind)
4925062Sjaap 			return(-1);
5025062Sjaap 	}
5125062Sjaap 	while(i >= 0 && lefdata(i, c) == kind)
5225062Sjaap 		i = prev(li = i);
5325062Sjaap 	if(prev(li) == -1)
5425062Sjaap 		li = 0;
5525062Sjaap 	*lwidp = kind;
5625062Sjaap 	for(lj = i + 1; lj < li; lj++){
5725062Sjaap 		if(instead[lj] && strcmp(instead[lj], ".TH") == 0)
5825062Sjaap 			return(li);
5925062Sjaap 	}
6025062Sjaap 	for(i = i + 1; i < li; i++){
6125062Sjaap 		if(fullbot[i])
6225062Sjaap 			li = i;
6325062Sjaap 	}
6425062Sjaap 	return(li);
6525062Sjaap }
6625062Sjaap 
lefdata(i,c)6725062Sjaap lefdata(i, c)
6825062Sjaap {
6925062Sjaap 	register int ck;
7025062Sjaap 
7125062Sjaap 	if(i >= nlin)
7225062Sjaap 		i = nlin - 1;
7325062Sjaap 	if(ctype(i, c) == 's'){
7425062Sjaap 		for(ck = c; ctype(i, ck) == 's'; ck--)
7525062Sjaap 			;
7625062Sjaap 		if(thish(i, ck) == 0)
7725062Sjaap 			return(0);
7825062Sjaap 	}
7925062Sjaap 	i = stynum[i];
8025062Sjaap 	i = lefline[i][c];
8125062Sjaap 	if(i > 0)
8225062Sjaap 		return(i);
8325062Sjaap 	if(dboxflg && c == 0)
8425062Sjaap 		return(2);
8525062Sjaap 	if(allflg)
8625062Sjaap 		return(1);
8725062Sjaap 	if(boxflg && c == 0)
8825062Sjaap 		return(1);
8925062Sjaap 	return(0);
9025062Sjaap }
9125062Sjaap 
next(i)9225062Sjaap next(i)
9325062Sjaap {
9425062Sjaap 	while(i + 1 < nlin){
9525062Sjaap 		i++;
9625062Sjaap 		if(!fullbot[i] && !instead[i])
9725062Sjaap 			break;
9825062Sjaap 	}
9925062Sjaap 	return(i);
10025062Sjaap }
10125062Sjaap 
prev(i)10225062Sjaap prev(i){
10325062Sjaap 	while(--i >= 0 && (fullbot[i] || instead[i]))
10425062Sjaap 		;
10525062Sjaap 	return(i);
10625062Sjaap }
107