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