13e12c5d1SDavid du Colombier /* tv.c: draw vertical lines */
23e12c5d1SDavid du Colombier # include "t.h"
33e12c5d1SDavid du Colombier
43e12c5d1SDavid du Colombier void
drawvert(int start,int end,int c,int lwid)53e12c5d1SDavid du Colombier drawvert(int start, int end, int c, int lwid)
63e12c5d1SDavid du Colombier {
73e12c5d1SDavid du Colombier char *exb = 0, *ext = 0;
83e12c5d1SDavid du Colombier int tp = 0, sl, ln, pos, epb, ept, vm;
93e12c5d1SDavid du Colombier
103e12c5d1SDavid du Colombier end++;
113e12c5d1SDavid du Colombier vm = 'v';
123e12c5d1SDavid du Colombier /* note: nr 35 has value of 1m outside of linesize */
133e12c5d1SDavid du Colombier while (instead[end])
143e12c5d1SDavid du Colombier end++;
153e12c5d1SDavid du Colombier for (ln = 0; ln < lwid; ln++) {
163e12c5d1SDavid du Colombier epb = ept = 0;
173e12c5d1SDavid du Colombier pos = 2 * ln - lwid + 1;
183e12c5d1SDavid du Colombier if (pos != tp)
19*219b2ee8SDavid du Colombier Bprint(&tabout, "\\h'%dp'", pos - tp);
203e12c5d1SDavid du Colombier tp = pos;
213e12c5d1SDavid du Colombier if (end < nlin) {
223e12c5d1SDavid du Colombier if (fullbot[end] || (!instead[end] && allh(end)))
233e12c5d1SDavid du Colombier epb = 2;
243e12c5d1SDavid du Colombier else
253e12c5d1SDavid du Colombier switch (midbar(end, c)) {
263e12c5d1SDavid du Colombier case '-':
273e12c5d1SDavid du Colombier exb = "1v-.5m";
283e12c5d1SDavid du Colombier break;
293e12c5d1SDavid du Colombier case '=':
303e12c5d1SDavid du Colombier exb = "1v-.5m";
313e12c5d1SDavid du Colombier epb = 1;
323e12c5d1SDavid du Colombier break;
333e12c5d1SDavid du Colombier }
343e12c5d1SDavid du Colombier }
353e12c5d1SDavid du Colombier if (lwid > 1)
363e12c5d1SDavid du Colombier switch (interh(end, c)) {
373e12c5d1SDavid du Colombier case THRU:
383e12c5d1SDavid du Colombier epb -= 1;
393e12c5d1SDavid du Colombier break;
403e12c5d1SDavid du Colombier case RIGHT:
413e12c5d1SDavid du Colombier epb += (ln == 0 ? 1 : -1);
423e12c5d1SDavid du Colombier break;
433e12c5d1SDavid du Colombier case LEFT:
443e12c5d1SDavid du Colombier epb += (ln == 1 ? 1 : -1);
453e12c5d1SDavid du Colombier break;
463e12c5d1SDavid du Colombier }
473e12c5d1SDavid du Colombier if (lwid == 1)
483e12c5d1SDavid du Colombier switch (interh(end, c)) {
493e12c5d1SDavid du Colombier case THRU:
503e12c5d1SDavid du Colombier epb -= 1;
513e12c5d1SDavid du Colombier break;
523e12c5d1SDavid du Colombier case RIGHT:
533e12c5d1SDavid du Colombier case LEFT:
543e12c5d1SDavid du Colombier epb += 1;
553e12c5d1SDavid du Colombier break;
563e12c5d1SDavid du Colombier }
573e12c5d1SDavid du Colombier if (start > 0) {
583e12c5d1SDavid du Colombier sl = start - 1;
593e12c5d1SDavid du Colombier while (sl >= 0 && instead[sl])
603e12c5d1SDavid du Colombier sl--;
613e12c5d1SDavid du Colombier if (sl >= 0 && (fullbot[sl] || allh(sl)))
623e12c5d1SDavid du Colombier ept = 0;
633e12c5d1SDavid du Colombier else if (sl >= 0)
643e12c5d1SDavid du Colombier switch (midbar(sl, c)) {
653e12c5d1SDavid du Colombier case '-':
663e12c5d1SDavid du Colombier ext = ".5m";
673e12c5d1SDavid du Colombier break;
683e12c5d1SDavid du Colombier case '=':
693e12c5d1SDavid du Colombier ext = ".5m";
703e12c5d1SDavid du Colombier ept = -1;
713e12c5d1SDavid du Colombier break;
723e12c5d1SDavid du Colombier default:
733e12c5d1SDavid du Colombier vm = 'm';
743e12c5d1SDavid du Colombier break;
753e12c5d1SDavid du Colombier }
763e12c5d1SDavid du Colombier else
773e12c5d1SDavid du Colombier ept = -4;
783e12c5d1SDavid du Colombier } else if (start == 0 && allh(0)) {
793e12c5d1SDavid du Colombier ept = 0;
803e12c5d1SDavid du Colombier vm = 'm';
813e12c5d1SDavid du Colombier }
823e12c5d1SDavid du Colombier if (lwid > 1)
833e12c5d1SDavid du Colombier switch (interh(start, c)) {
843e12c5d1SDavid du Colombier case THRU:
853e12c5d1SDavid du Colombier ept += 1;
863e12c5d1SDavid du Colombier break;
873e12c5d1SDavid du Colombier case LEFT:
883e12c5d1SDavid du Colombier ept += (ln == 0 ? 1 : -1);
893e12c5d1SDavid du Colombier break;
903e12c5d1SDavid du Colombier case RIGHT:
913e12c5d1SDavid du Colombier ept += (ln == 1 ? 1 : -1);
923e12c5d1SDavid du Colombier break;
933e12c5d1SDavid du Colombier }
943e12c5d1SDavid du Colombier else if (lwid == 1)
953e12c5d1SDavid du Colombier switch (interh(start, c)) {
963e12c5d1SDavid du Colombier case THRU:
973e12c5d1SDavid du Colombier ept += 1;
983e12c5d1SDavid du Colombier break;
993e12c5d1SDavid du Colombier case LEFT:
1003e12c5d1SDavid du Colombier case RIGHT:
1013e12c5d1SDavid du Colombier ept -= 1;
1023e12c5d1SDavid du Colombier break;
1033e12c5d1SDavid du Colombier }
1043e12c5d1SDavid du Colombier if (exb)
105*219b2ee8SDavid du Colombier Bprint(&tabout, "\\v'%s'", exb);
1063e12c5d1SDavid du Colombier if (epb)
107*219b2ee8SDavid du Colombier Bprint(&tabout, "\\v'%dp'", epb);
108*219b2ee8SDavid du Colombier Bprint(&tabout, "\\s\\n(%d", LSIZE);
1093e12c5d1SDavid du Colombier if (linsize)
110*219b2ee8SDavid du Colombier Bprint(&tabout, "\\v'-\\n(%dp/6u'", LSIZE);
111*219b2ee8SDavid du Colombier Bprint(&tabout, "\\h'-\\n(#~u'"); /* adjustment for T450 nroff boxes */
112*219b2ee8SDavid du Colombier Bprint(&tabout, "\\L'|\\n(#%cu-%s", linestop[start] + 'a' - 1,
1133e12c5d1SDavid du Colombier vm == 'v' ? "1v" : "\\n(35u");
1143e12c5d1SDavid du Colombier if (ext)
115*219b2ee8SDavid du Colombier Bprint(&tabout, "-(%s)", ext);
1163e12c5d1SDavid du Colombier if (exb)
117*219b2ee8SDavid du Colombier Bprint(&tabout, "-(%s)", exb);
1183e12c5d1SDavid du Colombier pos = ept - epb;
1193e12c5d1SDavid du Colombier if (pos)
120*219b2ee8SDavid du Colombier Bprint(&tabout, "%s%dp", pos >= 0 ? "+" : "", pos);
1213e12c5d1SDavid du Colombier /* the string #d is either "nl" or ".d" depending
1223e12c5d1SDavid du Colombier on diversions; on GCOS not the same */
123*219b2ee8SDavid du Colombier Bprint(&tabout, "'\\s0\\v'\\n(\\*(#du-\\n(#%cu+%s",
1243e12c5d1SDavid du Colombier linestop[start] + 'a' - 1, vm == 'v' ? "1v" : "\\n(35u");
1253e12c5d1SDavid du Colombier if (ext)
126*219b2ee8SDavid du Colombier Bprint(&tabout, "+%s", ext);
1273e12c5d1SDavid du Colombier if (ept)
128*219b2ee8SDavid du Colombier Bprint(&tabout, "%s%dp", (-ept) > 0 ? "+" : "", (-ept));
129*219b2ee8SDavid du Colombier Bprint(&tabout, "'");
1303e12c5d1SDavid du Colombier if (linsize)
131*219b2ee8SDavid du Colombier Bprint(&tabout, "\\v'\\n(%dp/6u'", LSIZE);
1323e12c5d1SDavid du Colombier }
1333e12c5d1SDavid du Colombier }
1343e12c5d1SDavid du Colombier
1353e12c5d1SDavid du Colombier
1363e12c5d1SDavid du Colombier int
midbar(int i,int c)1373e12c5d1SDavid du Colombier midbar(int i, int c)
1383e12c5d1SDavid du Colombier {
1393e12c5d1SDavid du Colombier int k;
1403e12c5d1SDavid du Colombier
1413e12c5d1SDavid du Colombier k = midbcol(i, c);
1423e12c5d1SDavid du Colombier if (k == 0 && c > 0)
1433e12c5d1SDavid du Colombier k = midbcol(i, c - 1);
1443e12c5d1SDavid du Colombier return(k);
1453e12c5d1SDavid du Colombier }
1463e12c5d1SDavid du Colombier
1473e12c5d1SDavid du Colombier
1483e12c5d1SDavid du Colombier int
midbcol(int i,int c)1493e12c5d1SDavid du Colombier midbcol(int i, int c)
1503e12c5d1SDavid du Colombier {
1513e12c5d1SDavid du Colombier int ct;
1523e12c5d1SDavid du Colombier
1533e12c5d1SDavid du Colombier while ( (ct = ctype(i, c)) == 's')
1543e12c5d1SDavid du Colombier c--;
1553e12c5d1SDavid du Colombier if (ct == '-' || ct == '=')
1563e12c5d1SDavid du Colombier return(ct);
1573e12c5d1SDavid du Colombier if (ct = barent(table[i][c].col))
1583e12c5d1SDavid du Colombier return(ct);
1593e12c5d1SDavid du Colombier return(0);
1603e12c5d1SDavid du Colombier }
1613e12c5d1SDavid du Colombier
1623e12c5d1SDavid du Colombier
1633e12c5d1SDavid du Colombier int
barent(char * s)1643e12c5d1SDavid du Colombier barent(char *s)
1653e12c5d1SDavid du Colombier {
1663e12c5d1SDavid du Colombier if (s == 0)
1673e12c5d1SDavid du Colombier return (1);
1683e12c5d1SDavid du Colombier if (!point(s))
1693e12c5d1SDavid du Colombier return(0);
1703e12c5d1SDavid du Colombier if (s[0] == '\\')
1713e12c5d1SDavid du Colombier s++;
1723e12c5d1SDavid du Colombier if (s[1] != 0)
1733e12c5d1SDavid du Colombier return(0);
1743e12c5d1SDavid du Colombier switch (s[0]) {
1753e12c5d1SDavid du Colombier case '_':
1763e12c5d1SDavid du Colombier return('-');
1773e12c5d1SDavid du Colombier case '=':
1783e12c5d1SDavid du Colombier return('=');
1793e12c5d1SDavid du Colombier }
1803e12c5d1SDavid du Colombier return(0);
1813e12c5d1SDavid du Colombier }
1823e12c5d1SDavid du Colombier
1833e12c5d1SDavid du Colombier
184