|
|
1.1 root 1: #ifndef lint
2: static char sccsid[] = "@(#)tv.c 4.3 8/11/83";
3: #endif
4:
5: /* tv.c: draw vertical lines */
6: # include "t..c"
7: drawvert(start,end, c, lwid)
8: {
9: char *exb=0, *ext=0;
10: int tp=0, sl, ln, pos, epb, ept, vm;
11: end++;
12: vm='v';
13: /* note: nr 35 has value of 1m outside of linesize */
14: while (instead[end]) end++;
15: for(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:
116: midbar(i,c)
117: {
118: int k;
119: k = midbcol(i,c);
120: if (k==0 && c>0)
121: k = midbcol(i, c-1);
122: return(k);
123: }
124: midbcol(i,c)
125: {
126: int ct;
127: while ( (ct=ctype(i,c)) == 's')
128: c--;
129: if (ct=='-' || ct == '=')
130: return(ct);
131: if (ct=barent(table[i][c].col))
132: return(ct);
133: return(0);
134: }
135:
136: barent(s)
137: char *s;
138: {
139: if (s==0) return (1);
140: if (!point(s)) return(1);
141: if (s[0]== '\\') s++;
142: if (s[1]!= 0)
143: return(0);
144: switch(s[0])
145: {
146: case '_':
147: return('-');
148: case '=':
149: return('=');
150: }
151: return(0);
152: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.