1 #ifndef lint
2 static char sccsid[] = "@(#)intersect.c 1.2 (CWI) 85/10/02";
3 #endif lint
4
5
6 /*
7 * classify line intersections
8 */
9
10 #include "defs.h"
11 #include "ext.h"
12
13 /*
14 * determine local environment for intersections
15 */
interv(i,c)16 interv(i, c){
17 register int ku, kl;
18
19 if(c >= ncol || c == 0){
20 if(dboxflg){
21 if(i == 0)
22 return(BOT);
23 if(i >= nlin)
24 return(TOP);
25 return(THRU);
26 }
27 if(c >= ncol)
28 return(0);
29 }
30 ku = i > 0 ? lefdata(i - 1, c) : 0;
31 if(i + 1 >= nlin)
32 kl = 0;
33 else
34 kl = lefdata(allh (i) ? i + 1 : i, c);
35 if(ku == 2 && kl == 2)
36 return(THRU);
37 if(ku == 2)
38 return(TOP);
39 if(kl == BOT)
40 return(2);
41 return(0);
42 }
43
interh(i,c)44 interh(i, c){
45 register int kl, kr;
46
47 if(fullbot[i] == '=' || (dboxflg && (i == 0 || i >= nlin - 1))){
48 if(c == ncol)
49 return(LEFT);
50 if(c == 0)
51 return(RIGHT);
52 return(THRU);
53 }
54 if(i >= nlin)
55 return(0);
56 kl = c > 0 ? thish(i, c - 1) : 0;
57 if(kl <= 1 && i > 0 && allh(up1 (i)))
58 kl = c > 0 ? thish(up1 (i), c - 1) : 0;
59 kr = thish(i, c);
60 if(kr <= 1 && i > 0 && allh(up1 (i)))
61 kr = c > 0 ? thish(up1 (i), c) : 0;
62 if(kl == '=' && kr == '=')
63 return(THRU);
64 if(kl == '=')
65 return(LEFT);
66 if(kr == '=')
67 return(RIGHT);
68 return(0);
69 }
70
up1(i)71 up1(i){
72 i--;
73 while(instead[i] && i > 0)
74 i--;
75 return(i);
76 }
77