1 /* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */
2 /* All Rights Reserved */
3
4
5 /*
6 * Copyright (c) 1980 Regents of the University of California.
7 * All rights reserved. The Berkeley software License Agreement
8 * specifies the terms and conditions for redistribution.
9 */
10
11 /*
12 * Copyright (c) 1983, 1984 1985, 1986, 1987, 1988, Sun Microsystems, Inc.
13 * All Rights Reserved.
14 */
15
16 /* from OpenSolaris "ti.c 1.3 05/06/02 SMI" SVr4.0 1.1 */
17
18 /*
19 * Portions Copyright (c) 2005 Gunnar Ritter, Freiburg i. Br., Germany
20 *
21 * Sccsid @(#)ti.c 1.3 (gritter) 7/23/05
22 */
23
24 /* ti.c: classify line intersections */
25 # include "t..c"
26 /* determine local environment for intersections */
27 int
interv(int i,int c)28 interv(int i, int c)
29 {
30 int ku, kl;
31 if (c>=ncol || c == 0)
32 {
33 if (dboxflg)
34 {
35 if (i==0) return(BOT);
36 if (i>=nlin) return(TOP);
37 return(THRU);
38 }
39 if (c>=ncol)
40 return(0);
41 }
42 ku = i>0 ? lefdata(i-1,c) : 0;
43 if (i+1 >= nlin)
44 kl=0;
45 else
46 kl = lefdata(allh(i) ? i+1 : i, c);
47 if (ku==2 && kl==2) return(THRU);
48 if (ku ==2) return(TOP);
49 if (kl==BOT) return(2);
50 return(0);
51 }
52 int
interh(int i,int c)53 interh(int i, int c)
54 {
55 int kl, kr;
56 if (fullbot[i]== '=' || (dboxflg && (i==0 || i>= nlin-1)))
57 {
58 if (c==ncol)
59 return(LEFT);
60 if (c==0)
61 return(RIGHT);
62 return(THRU);
63 }
64 if (i>=nlin) return(0);
65 kl = c>0 ? thish (i,c-1) : 0;
66 if (kl<=1 && i>0 && allh(up1(i)))
67 kl = c>0 ? thish(up1(i),c-1) : 0;
68 kr = thish(i,c);
69 if (kr<=1 && i>0 && allh(up1(i)))
70 kr = c>0 ? thish(up1(i), c) : 0;
71 if (kl== '=' && kr == '=') return(THRU);
72 if (kl== '=') return(LEFT);
73 if (kr== '=') return(RIGHT);
74 return(0);
75 }
76 int
up1(int i)77 up1(int i)
78 {
79 i--;
80 while (instead[i] && i>0) i--;
81 return(i);
82 }
83