Commit | Line | Data |
---|---|---|
ed8f60d3 | 1 | #ifndef lint |
3ab4bab3 | 2 | static char sccsid[] = "@(#)vertlines.c 1.2 (CWI) 85/10/02"; |
ed8f60d3 JA |
3 | #endif lint |
4 | ||
3ab4bab3 JA |
5 | /* |
6 | * draw vertical lines | |
7 | */ | |
ed8f60d3 JA |
8 | |
9 | #include "defs.h" | |
10 | #include "ext.h" | |
11 | ||
12 | drawvert(start, end, c, lwid){ | |
13 | char *exb = 0, *ext = 0; | |
14 | int tp = 0, sl, ln, pos, epb, ept, vm; | |
15 | ||
16 | end++; | |
17 | vm = 'v'; | |
18 | /* | |
19 | * note: nr 35 has value of 1m outside of linesize | |
20 | */ | |
21 | while(instead[end]) | |
22 | end++; | |
23 | for(ln = 0; ln < lwid; ln++){ | |
24 | epb = ept = 0; | |
25 | pos = 2 * ln - lwid + 1; | |
26 | if(pos != tp) | |
27 | printf("\\h'%dp'", pos - tp); | |
28 | tp = pos; | |
29 | if(end < nlin){ | |
30 | if(fullbot[end] || (!instead[end] && allh(end))) | |
31 | epb = 2; | |
32 | else { | |
33 | switch(midbar(end, c)){ | |
34 | ||
35 | case '-': | |
36 | exb = "1v-.5m"; | |
37 | break; | |
38 | case '=': | |
39 | exb = "1v-.5m"; | |
40 | epb = 1; | |
41 | break; | |
42 | } | |
43 | } | |
44 | } | |
45 | if(lwid > 1){ | |
46 | switch(interh(end, c)){ | |
47 | ||
48 | case THRU: | |
49 | epb -= 1; | |
50 | break; | |
51 | case RIGHT: | |
52 | epb += (ln == 0 ? 1 : -1); | |
53 | break; | |
54 | case LEFT: | |
55 | epb += (ln == 1 ? 1 : -1); | |
56 | break; | |
57 | } | |
58 | } | |
59 | if(lwid == 1){ | |
60 | switch(interh(end, c)){ | |
61 | ||
62 | case THRU: | |
63 | epb -= 1; | |
64 | break; | |
65 | case RIGHT: | |
66 | case LEFT: | |
67 | epb += 1; | |
68 | break; | |
69 | } | |
70 | } | |
71 | if(start > 0){ | |
72 | sl = start - 1; | |
73 | while(sl >= 0 && instead[sl]) | |
74 | sl--; | |
75 | if(sl >= 0 && (fullbot[sl] || allh(sl))) | |
76 | ept = 0; | |
77 | else { | |
78 | if(sl >= 0){ | |
79 | switch(midbar(sl, c)){ | |
80 | ||
81 | case '-': | |
82 | ext = ".5m"; | |
83 | break; | |
84 | case '=': | |
85 | ext = ".5m"; | |
86 | ept = -1; | |
87 | break; | |
88 | default: | |
89 | vm = 'm'; | |
90 | break; | |
91 | } | |
92 | } else | |
93 | ept = -4; | |
94 | } | |
95 | } else { | |
96 | if(start == 0 && allh(0)){ | |
97 | ept = 0; | |
98 | vm = 'm'; | |
99 | } | |
100 | } | |
101 | if(lwid > 1){ | |
102 | switch(interh(start, c)){ | |
103 | ||
104 | case THRU: | |
105 | ept += 1; | |
106 | break; | |
107 | case LEFT: | |
108 | ept += (ln == 0 ? 1 : -1); | |
109 | break; | |
110 | case RIGHT: | |
111 | ept += (ln == 1 ? 1 : -1); | |
112 | break; | |
113 | } | |
114 | } else { | |
115 | if(lwid == 1){ | |
116 | switch(interh(start, c)){ | |
117 | ||
118 | case THRU: | |
119 | ept += 1; | |
120 | break; | |
121 | case LEFT: | |
122 | case RIGHT: | |
123 | ept -= 1; | |
124 | break; | |
125 | } | |
126 | } | |
127 | } | |
128 | if(exb) | |
129 | printf("\\v'%s'", exb); | |
130 | if(epb) | |
131 | printf("\\v'%dp'", epb); | |
132 | printf("\\s\\n(%d", LSIZE); | |
bad19660 JA |
133 | printf("\\v'-\\n(%dp/6u'", LSIZE); |
134 | printf("\\h'-\\n(#~n/100u'"); | |
ed8f60d3 JA |
135 | |
136 | printf("\\L'|\\n(#%cu-%s", | |
137 | linestop[start] + 'a' -1, vm == 'v' ? "1v" : "\\n(35u"); | |
138 | if(ext) | |
139 | printf("-(%s)", ext); | |
140 | if(exb) | |
141 | printf("-(%s)", exb); | |
142 | pos = ept - epb; | |
143 | if(pos) | |
144 | printf("%s%dp", pos >= 0 ? "+" : "", pos); | |
bad19660 | 145 | printf("'"); |
ed8f60d3 JA |
146 | /* |
147 | * the string #d is either "nl" or ".d" depending on diversions; | |
148 | * on GCOS not the same | |
149 | */ | |
bad19660 JA |
150 | printf("\\h'-\\n(#~n/100u'"); |
151 | printf("\\s0\\v'\\n(\\*(#du-\\n(#%cu+%s", | |
ed8f60d3 JA |
152 | linestop[start] + 'a' -1, vm == 'v' ? "1v" : "\\n(35u"); |
153 | if(ext) | |
154 | printf("+%s", ext); | |
155 | if(ept) | |
156 | printf("%s%dp", (-ept) > 0 ? "+" : "", (-ept)); | |
157 | printf("'"); | |
bad19660 | 158 | printf("\\v'\\n(%dp/6u'", LSIZE); |
ed8f60d3 JA |
159 | } |
160 | } | |
161 | ||
162 | midbar(i, c){ | |
163 | int k; | |
164 | ||
165 | k = midbcol(i, c); | |
166 | if(k == 0 && c > 0) | |
167 | k = midbcol(i, c - 1); | |
168 | return(k); | |
169 | } | |
170 | ||
171 | midbcol(i, c){ | |
172 | int ct; | |
173 | ||
174 | while((ct = ctype(i, c)) == 's') | |
175 | c--; | |
176 | if(ct == '-' || ct == '=') | |
177 | return(ct); | |
178 | if(ct = barent(table[i][c].col)) | |
179 | return(ct); | |
180 | return(0); | |
181 | } | |
182 | ||
183 | barent(s) | |
184 | char *s; | |
185 | { | |
186 | if(s == 0) | |
187 | return(1); | |
188 | if(!point(s)) | |
189 | return(1); | |
190 | if(s[0] == '\\') | |
191 | s++; | |
192 | if(s[1] != 0) | |
193 | return(0); | |
194 | switch(s[0]){ | |
195 | ||
196 | case '_': | |
197 | return('-'); | |
198 | case '=': | |
199 | return('='); | |
200 | } | |
201 | return(0); | |
202 | } |