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  */
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 
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 
71 up1(i){
72 	i--;
73 	while(instead[i] && i > 0)
74 		i--;
75 	return(i);
76 }
77