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: }