|
|
1.1 ! root 1: #ifndef lint ! 2: static char sccsid[] = "@(#)tu.c 4.3 7/22/88"; ! 3: #endif ! 4: ! 5: /* tu.c: draws horizontal lines */ ! 6: # include "t..c" ! 7: makeline(i,c,lintype) ! 8: { ! 9: int cr, type, shortl; ! 10: type = thish(i,c); ! 11: if (type==0) return; ! 12: cr=c; ! 13: shortl = (table[i][c].col[0]=='\\'); ! 14: if (c>0 && !shortl && thish(i,c-1) == type)return; ! 15: if (shortl==0) ! 16: for(cr=c; cr < ncol && (ctype(i,cr)=='s'||type==thish(i,cr)); cr++); ! 17: else ! 18: for(cr=c+1; cr<ncol && ctype(i,cr)=='s'; cr++); ! 19: drawline(i, c, cr-1, lintype, 0, shortl); ! 20: } ! 21: fullwide(i, lintype) ! 22: { ! 23: int cr, cl; ! 24: if (!pr1403) ! 25: fprintf(tabout, ".nr %d \\n(.v\n.vs \\n(.vu-\\n(.sp\n", SVS); ! 26: cr= 0; ! 27: while (cr<ncol) ! 28: { ! 29: cl=cr; ! 30: while (i>0 && vspand(prev(i),cl,1)) ! 31: cl++; ! 32: for(cr=cl; cr<ncol; cr++) ! 33: if (i>0 && vspand(prev(i),cr,1)) ! 34: break; ! 35: if (cl<ncol) ! 36: drawline(i,cl,(cr<ncol?cr-1:cr),lintype,1,0); ! 37: } ! 38: fprintf(tabout, "\n"); ! 39: if (!pr1403) ! 40: fprintf(tabout, ".vs \\n(%du\n", SVS); ! 41: } ! 42: ! 43: drawline(i, cl, cr, lintype, noheight, shortl) ! 44: { ! 45: char *exhr, *exhl, *lnch; ! 46: int lcount, ln, linpos, oldpos, nodata; ! 47: lcount=0; ! 48: exhr=exhl= ""; ! 49: switch(lintype) ! 50: { ! 51: case '-': lcount=1;break; ! 52: case '=': lcount = pr1403? 1 : 2; break; ! 53: case SHORTLINE: lcount=1; break; ! 54: } ! 55: if (lcount<=0) return; ! 56: nodata = cr-cl>=ncol || noheight || allh(i); ! 57: if (!nodata) ! 58: fprintf(tabout, "\\v'-.5m'"); ! 59: for(ln=oldpos=0; ln<lcount; ln++) ! 60: { ! 61: linpos = 2*ln - lcount +1; ! 62: if (linpos != oldpos) ! 63: fprintf(tabout, "\\v'%dp'", linpos-oldpos); ! 64: oldpos=linpos; ! 65: if (shortl==0) ! 66: { ! 67: tohcol(cl); ! 68: if (lcount>1) ! 69: { ! 70: switch(interv(i,cl)) ! 71: { ! 72: case TOP: exhl = ln==0 ? "1p" : "-1p"; break; ! 73: case BOT: exhl = ln==1 ? "1p" : "-1p"; break; ! 74: case THRU: exhl = "1p"; break; ! 75: } ! 76: if (exhl[0]) ! 77: fprintf(tabout, "\\h'%s'", exhl); ! 78: } ! 79: else if (lcount==1) ! 80: { ! 81: switch(interv(i,cl)) ! 82: { ! 83: case TOP: case BOT: exhl = "-1p"; break; ! 84: case THRU: exhl = "1p"; break; ! 85: } ! 86: if (exhl[0]) ! 87: fprintf(tabout, "\\h'%s'", exhl); ! 88: } ! 89: if (lcount>1) ! 90: { ! 91: switch(interv(i,cr+1)) ! 92: { ! 93: case TOP: exhr = ln==0 ? "-1p" : "+1p"; break; ! 94: case BOT: exhr = ln==1 ? "-1p" : "+1p"; break; ! 95: case THRU: exhr = "-1p"; break; ! 96: } ! 97: } ! 98: else if (lcount==1) ! 99: { ! 100: switch(interv(i,cr+1)) ! 101: { ! 102: case TOP: case BOT: exhr = "+1p"; break; ! 103: case THRU: exhr = "-1p"; break; ! 104: } ! 105: } ! 106: } ! 107: else ! 108: fprintf(tabout, "\\h'|\\n(%du'", cl+CLEFT); ! 109: fprintf(tabout, "\\s\\n(%d",LSIZE); ! 110: if (linsize) ! 111: fprintf(tabout, "\\v'-\\n(%dp/6u'", LSIZE); ! 112: if (shortl) ! 113: fprintf(tabout, "\\l'|\\n(%du'", cr+CRIGHT); ! 114: else ! 115: { ! 116: lnch = "\\(ul"; ! 117: if (pr1403) ! 118: lnch = lintype==2 ? "=" : "\\(ru"; ! 119: if (cr+1>=ncol) ! 120: fprintf(tabout, "\\l'|\\n(TWu%s%s'", exhr,lnch); ! 121: else ! 122: fprintf(tabout, "\\l'(|\\n(%du+|\\n(%du)/2u%s%s'", cr+CRIGHT, ! 123: cr+1+CLEFT, exhr, lnch); ! 124: } ! 125: if (linsize) ! 126: fprintf(tabout, "\\v'\\n(%dp/6u'", LSIZE); ! 127: fprintf(tabout, "\\s0"); ! 128: } ! 129: if (oldpos!=0) ! 130: fprintf(tabout, "\\v'%dp'", -oldpos); ! 131: if (!nodata) ! 132: fprintf(tabout, "\\v'+.5m'"); ! 133: } ! 134: getstop() ! 135: { ! 136: int i,c,k,junk, stopp; ! 137: stopp=1; ! 138: for(i=0; i<MAXLIN; i++) ! 139: linestop[i]=0; ! 140: for(i=0; i<nlin; i++) ! 141: for(c=0; c<ncol; c++) ! 142: { ! 143: k = left(i,c,&junk); ! 144: if (k>=0 && linestop[k]==0) ! 145: linestop[k]= ++stopp; ! 146: } ! 147: if (boxflg || allflg || dboxflg) ! 148: linestop[0]=1; ! 149: } ! 150: left(i,c, lwidp) ! 151: int *lwidp; ! 152: { ! 153: int kind, li, lj; ! 154: /* returns -1 if no line to left */ ! 155: /* returns number of line where it starts */ ! 156: /* stores into lwid the kind of line */ ! 157: *lwidp=0; ! 158: kind = lefdata(i,c); ! 159: if (kind==0) return(-1); ! 160: if (i+1<nlin) ! 161: if (lefdata(next(i),c)== kind) return(-1); ! 162: while (i>=0 && lefdata(i,c)==kind) ! 163: i=prev(li=i); ! 164: if (prev(li)== -1) li=0; ! 165: *lwidp=kind; ! 166: for(lj= i+1; lj<li; lj++) ! 167: if (instead[lj] && strcmp(instead[lj], ".TH")==0) ! 168: return(li); ! 169: for(i= i+1; i<li; i++) ! 170: if (fullbot[i]) ! 171: li=i; ! 172: return(li); ! 173: } ! 174: lefdata(i,c) ! 175: { ! 176: int ck; ! 177: if (i>=nlin) i=nlin-1; ! 178: if (ctype(i,c) == 's') ! 179: { ! 180: for(ck=c; ctype(i,ck)=='s'; ck--); ! 181: if (thish(i,ck)==0) ! 182: return(0); ! 183: } ! 184: i =stynum[i]; ! 185: i = lefline[i][c]; ! 186: if (i>0) return(i); ! 187: if (dboxflg && c==0) return(2); ! 188: if (allflg)return(1); ! 189: if (boxflg && c==0) return(1); ! 190: return(0); ! 191: } ! 192: next(i) ! 193: { ! 194: while (i+1 <nlin) ! 195: { ! 196: i++; ! 197: if (!fullbot[i] && !instead[i]) break; ! 198: } ! 199: return(i); ! 200: } ! 201: prev(i) ! 202: { ! 203: while (--i >=0 && (fullbot[i] || instead[i])) ! 204: ; ! 205: return(i); ! 206: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.