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