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