1 #ifndef lint
2 static char sccsid[] = "@(#)getstop.c 1.2 (CWI) 85/10/02";
3 #endif lint
4
5
6 /*
7 * find the start points for the line drawing routines
8 */
9
10 #include "defs.h"
11 #include "ext.h"
12
getstop()13 getstop()
14 {
15 register int i, c, k;
16 int junk, stopp;
17
18 stopp = 1;
19 for(i = 0; i < MAXLIN; i++)
20 linestop[i] = 0;
21 for(i = 0; i < nlin; i++){
22 for(c = 0; c < ncol; c++){
23 k = left(i, c, &junk);
24 if(k >= 0 && linestop[k] == 0)
25 linestop[k] = ++stopp;
26 }
27 }
28 if(boxflg || allflg || dboxflg)
29 linestop[0] = 1;
30 }
31
32 /*
33 * returns -1 if no line to left
34 * returns number of line where it starts
35 * stores into lwid the kind of line
36 */
left(i,c,lwidp)37 left(i, c, lwidp)
38 int i, c;
39 int *lwidp;
40 {
41 register int kind, li, lj;
42
43 *lwidp = 0;
44 kind = lefdata(i, c);
45 if(kind == 0)
46 return(-1);
47 if(i + 1 < nlin){
48 if(lefdata(next (i), c) == kind)
49 return(-1);
50 }
51 while(i >= 0 && lefdata(i, c) == kind)
52 i = prev(li = i);
53 if(prev(li) == -1)
54 li = 0;
55 *lwidp = kind;
56 for(lj = i + 1; lj < li; lj++){
57 if(instead[lj] && strcmp(instead[lj], ".TH") == 0)
58 return(li);
59 }
60 for(i = i + 1; i < li; i++){
61 if(fullbot[i])
62 li = i;
63 }
64 return(li);
65 }
66
lefdata(i,c)67 lefdata(i, c)
68 {
69 register int ck;
70
71 if(i >= nlin)
72 i = nlin - 1;
73 if(ctype(i, c) == 's'){
74 for(ck = c; ctype(i, ck) == 's'; ck--)
75 ;
76 if(thish(i, ck) == 0)
77 return(0);
78 }
79 i = stynum[i];
80 i = lefline[i][c];
81 if(i > 0)
82 return(i);
83 if(dboxflg && c == 0)
84 return(2);
85 if(allflg)
86 return(1);
87 if(boxflg && c == 0)
88 return(1);
89 return(0);
90 }
91
next(i)92 next(i)
93 {
94 while(i + 1 < nlin){
95 i++;
96 if(!fullbot[i] && !instead[i])
97 break;
98 }
99 return(i);
100 }
101
prev(i)102 prev(i){
103 while(--i >= 0 && (fullbot[i] || instead[i]))
104 ;
105 return(i);
106 }
107