1 /*-
2 * %sccs.include.proprietary.c%
3 */
4
5 #ifndef lint
6 static char sccsid[] = "@(#)tv.c 4.4 (Berkeley) 04/18/91";
7 #endif /* not lint */
8
9 /* tv.c: draw vertical lines */
10 # include "t..c"
drawvert(start,end,c,lwid)11 drawvert(start,end, c, lwid)
12 {
13 char *exb=0, *ext=0;
14 int tp=0, sl, ln, pos, epb, ept, vm;
15 end++;
16 vm='v';
17 /* note: nr 35 has value of 1m outside of linesize */
18 while (instead[end]) end++;
19 for(ln=0; ln<lwid; ln++)
20 {
21 epb=ept=0;
22 pos = 2*ln-lwid+1;
23 if (pos!=tp) fprintf(tabout, "\\h'%dp'", pos-tp);
24 tp = pos;
25 if (end<nlin)
26 {
27 if (fullbot[end]|| (!instead[end] && allh(end)))
28 epb=2;
29 else
30 switch (midbar(end,c))
31 {
32 case '-':
33 exb = "1v-.5m"; break;
34 case '=':
35 exb = "1v-.5m";
36 epb = 1; break;
37 }
38 }
39 if (lwid>1)
40 switch(interh(end, c))
41 {
42 case THRU: epb -= 1; break;
43 case RIGHT: epb += (ln==0 ? 1 : -1); break;
44 case LEFT: epb += (ln==1 ? 1 : -1); break;
45 }
46 if (lwid==1)
47 switch(interh(end,c))
48 {
49 case THRU: epb -= 1; break;
50 case RIGHT: case LEFT: epb += 1; break;
51 }
52 if (start>0)
53 {
54 sl = start-1;
55 while (sl>=0 && instead[sl]) sl--;
56 if (sl>=0 && (fullbot[sl] || allh(sl)))
57 ept=0;
58 else
59 if (sl>=0)
60 switch(midbar(sl,c))
61 {
62 case '-':
63 ext = ".5m"; break;
64 case '=':
65 ext= ".5m"; ept = -1; break;
66 default:
67 vm = 'm'; break;
68 }
69 else
70 ept = -4;
71 }
72 else if (start==0 && allh(0))
73 {
74 ept=0;
75 vm = 'm';
76 }
77 if (lwid>1)
78 switch(interh(start,c))
79 {
80 case THRU: ept += 1; break;
81 case LEFT: ept += (ln==0 ? 1 : -1); break;
82 case RIGHT: ept += (ln==1 ? 1 : -1); break;
83 }
84 else if (lwid==1)
85 switch(interh(start,c))
86 {
87 case THRU: ept += 1; break;
88 case LEFT: case RIGHT: ept -= 1; break;
89 }
90 if (exb)
91 fprintf(tabout, "\\v'%s'", exb);
92 if (epb)
93 fprintf(tabout, "\\v'%dp'", epb);
94 fprintf(tabout, "\\s\\n(%d",LSIZE);
95 if (linsize)
96 fprintf(tabout, "\\v'-\\n(%dp/6u'", LSIZE);
97 fprintf(tabout, "\\h'-\\n(#~u'"); /* adjustment for T450 nroff boxes */
98 fprintf(tabout, "\\L'|\\n(#%cu-%s", linestop[start]+'a'-1, vm=='v'? "1v" : "\\n(35u");
99 if (ext)
100 fprintf(tabout, "-(%s)",ext);
101 if (exb)
102 fprintf(tabout, "-(%s)", exb);
103 pos = ept-epb;
104 if (pos)
105 fprintf(tabout, "%s%dp", pos>=0? "+" : "", pos);
106 /* the string #d is either "nl" or ".d" depending
107 on diversions; on GCOS not the same */
108 fprintf(tabout, "'\\s0\\v'\\n(\\*(#du-\\n(#%cu+%s", linestop[start]+'a'-1,vm=='v' ? "1v" : "\\n(35u");
109 if (ext)
110 fprintf(tabout, "+%s",ext);
111 if (ept)
112 fprintf(tabout, "%s%dp", (-ept)>0 ? "+" : "", (-ept));
113 fprintf(tabout, "'");
114 if (linsize)
115 fprintf(tabout, "\\v'\\n(%dp/6u'", LSIZE);
116 }
117 }
118
119
midbar(i,c)120 midbar(i,c)
121 {
122 int k;
123 k = midbcol(i,c);
124 if (k==0 && c>0)
125 k = midbcol(i, c-1);
126 return(k);
127 }
midbcol(i,c)128 midbcol(i,c)
129 {
130 int ct;
131 while ( (ct=ctype(i,c)) == 's')
132 c--;
133 if (ct=='-' || ct == '=')
134 return(ct);
135 if (ct=barent(table[i][c].col))
136 return(ct);
137 return(0);
138 }
139
barent(s)140 barent(s)
141 char *s;
142 {
143 if (s==0) return (1);
144 if (!point(s)) return(1);
145 if (s[0]== '\\') s++;
146 if (s[1]!= 0)
147 return(0);
148 switch(s[0])
149 {
150 case '_':
151 return('-');
152 case '=':
153 return('=');
154 }
155 return(0);
156 }
157