|
|
1.1 ! root 1: #ifndef lint ! 2: static char sccsid[] = "@(#)t8.c 4.4 6/28/89"; ! 3: #endif ! 4: ! 5: /* t8.c: write out one line of output table */ ! 6: # include "t..c" ! 7: # define realsplit ((ct=='a'||ct=='n') && table[nl][c].rcol) ! 8: int watchout; ! 9: int once; ! 10: int topat[MAXCOL]; ! 11: putline(i, nl) ! 12: /* i is line number for deciding format */ ! 13: /* nl is line number for finding data usually identical */ ! 14: { ! 15: int c, lf, ct, form, lwid, vspf, ip = -1, cmidx, exvspen, vforml; ! 16: int vct, chfont; ! 17: char *s, *size, *fn; ! 18: watchout=vspf=exvspen=0; ! 19: if (i==0) once=0; ! 20: if (i==0 && ( allflg || boxflg || dboxflg)) ! 21: fullwide(0, dboxflg? '=' : '-'); ! 22: if (instead[nl]==0 && fullbot[nl] ==0) ! 23: for(c=0; c<ncol; c++) ! 24: { ! 25: s = table[nl][c].col; ! 26: if (s==0) continue; ! 27: if (vspen(s)) ! 28: { ! 29: for(ip=nl; ip<nlin; ip=next(ip)) ! 30: if (!vspen(s=table[ip][c].col)) break; ! 31: if (tx(s)) ! 32: fprintf(tabout, ".ne \\n(%c|u+\\n(.Vu\n",s); ! 33: continue; ! 34: } ! 35: if (point(s)) continue; ! 36: fprintf(tabout, ".ne \\n(%c|u+\\n(.Vu\n",s); ! 37: watchout=1; ! 38: } ! 39: if (linestop[nl]) ! 40: fprintf(tabout, ".mk #%c\n", linestop[nl]+'a'-1); ! 41: lf = prev(nl); ! 42: if (instead[nl]) ! 43: { ! 44: puts(instead[nl]); ! 45: return; ! 46: } ! 47: if (fullbot[nl]) ! 48: { ! 49: switch (ct=fullbot[nl]) ! 50: { ! 51: case '=': ! 52: case '-': ! 53: fullwide(nl,ct); ! 54: } ! 55: return; ! 56: } ! 57: for(c=0; c<ncol; c++) ! 58: { ! 59: if (instead[nl]==0 && fullbot[nl]==0) ! 60: if (vspen(table[nl][c].col)) vspf=1; ! 61: if (lf>=0) ! 62: if (vspen(table[lf][c].col)) vspf=1; ! 63: } ! 64: if (vspf) ! 65: { ! 66: fprintf(tabout, ".nr #^ \\n(\\*(#du\n"); ! 67: fprintf(tabout, ".nr #- \\n(#^\n"); /* current line position relative to bottom */ ! 68: } ! 69: vspf=0; ! 70: chfont=0; ! 71: for(c=0; c<ncol; c++) ! 72: { ! 73: s = table[nl][c].col; ! 74: if (s==0) continue; ! 75: chfont |= (int)(font[stynum[nl]][c]); ! 76: if (point(s) ) continue; ! 77: lf=prev(nl); ! 78: if (lf>=0 && vspen(table[lf][c].col)) ! 79: fprintf(tabout, ".if (\\n(%c|+\\n(^%c-1v)>\\n(#- .nr #- +(\\n(%c|+\\n(^%c-\\n(#--1v)\n",s,'a'+c,s,'a'+c); ! 80: else ! 81: fprintf(tabout, ".if (\\n(%c|+\\n(#^-1v)>\\n(#- .nr #- +(\\n(%c|+\\n(#^-\\n(#--1v)\n",s,s); ! 82: } ! 83: if (allflg && once>0 ) ! 84: fullwide(i,'-'); ! 85: once=1; ! 86: runtabs(i, nl); ! 87: if (allh(i) && !pr1403) ! 88: { ! 89: fprintf(tabout, ".nr %d \\n(.v\n", SVS); ! 90: fprintf(tabout, ".vs \\n(.vu-\\n(.sp\n"); ! 91: } ! 92: if (chfont) ! 93: fprintf(tabout, ".nr %2d \\n(.f\n", S1); ! 94: fprintf(tabout, ".nr 35 1m\n"); ! 95: fprintf(tabout, "\\&"); ! 96: vct = 0; ! 97: for(c=0; c<ncol; c++) ! 98: { ! 99: if (watchout==0 && i+1<nlin && (lf=left(i,c, &lwid))>=0) ! 100: { ! 101: tohcol(c); ! 102: drawvert(lf, i, c, lwid); ! 103: vct += 2; ! 104: } ! 105: if (rightl && c+1==ncol) continue; ! 106: vforml=i; ! 107: for(lf=prev(nl); lf>=0 && vspen(table[lf][c].col); lf=prev(lf)) ! 108: vforml= lf; ! 109: form= ctype(vforml,c); ! 110: if (form != 's') ! 111: { ! 112: ct = c+CLEFT; ! 113: if (form=='a') ct = c+CMID; ! 114: if (form=='n' && table[nl][c].rcol && lused[c]==0) ct= c+CMID; ! 115: fprintf(tabout, "\\h'|\\n(%du'", ct); ! 116: } ! 117: s= table[nl][c].col; ! 118: fn = font[stynum[vforml]][c]; ! 119: size = csize[stynum[vforml]][c]; ! 120: if (*size==0)size=0; ! 121: switch(ct=ctype(vforml, c)) ! 122: { ! 123: case 'n': ! 124: case 'a': ! 125: if (table[nl][c].rcol) ! 126: { ! 127: if (lused[c]) /*Zero field width*/ ! 128: { ! 129: ip = prev(nl); ! 130: if (ip>=0) ! 131: if (vspen(table[ip][c].col)) ! 132: { ! 133: if (exvspen==0) ! 134: { ! 135: fprintf(tabout, "\\v'-(\\n(\\*(#du-\\n(^%cu", c+'a'); ! 136: if (cmidx) ! 137: fprintf(tabout, "-((\\n(#-u-\\n(^%cu)/2u)", c+'a'); ! 138: vct++; ! 139: fprintf(tabout, "'"); ! 140: exvspen=1; ! 141: } ! 142: } ! 143: fprintf(tabout, "%c%c",F1,F2); ! 144: puttext(s,fn,size); ! 145: fprintf(tabout, "%c",F1); ! 146: } ! 147: s= table[nl][c].rcol; ! 148: form=1; ! 149: break; ! 150: } ! 151: case 'c': ! 152: form=3; break; ! 153: case 'r': ! 154: form=2; break; ! 155: case 'l': ! 156: form=1; break; ! 157: case '-': ! 158: case '=': ! 159: if (real(table[nl][c].col)) ! 160: fprintf(stderr,"%s: line %d: Data ignored on table line %d\n", ifile, iline-1, i+1); ! 161: makeline(i,c,ct); ! 162: continue; ! 163: default: ! 164: continue; ! 165: } ! 166: if (realsplit ? rused[c]: used[c]) /*Zero field width*/ ! 167: { ! 168: /* form: 1 left, 2 right, 3 center adjust */ ! 169: if (ifline(s)) ! 170: { ! 171: makeline(i,c,ifline(s)); ! 172: continue; ! 173: } ! 174: if (filler(s)) ! 175: { ! 176: printf("\\l'|\\n(%du\\&%s'", c+CRIGHT, s+2); ! 177: continue; ! 178: } ! 179: ip = prev(nl); ! 180: cmidx = ctop[stynum[nl]][c]==0; ! 181: if (ip>=0) ! 182: if (vspen(table[ip][c].col)) ! 183: { ! 184: if (exvspen==0) ! 185: { ! 186: fprintf(tabout, "\\v'-(\\n(\\*(#du-\\n(^%cu", c+'a'); ! 187: if (cmidx) ! 188: fprintf(tabout, "-((\\n(#-u-\\n(^%cu)/2u)", c+'a'); ! 189: vct++; ! 190: fprintf(tabout, "'"); ! 191: } ! 192: } ! 193: fprintf(tabout, "%c", F1); ! 194: if (form!= 1) ! 195: fprintf(tabout, "%c", F2); ! 196: if (vspen(s)) ! 197: vspf=1; ! 198: else ! 199: puttext(s, fn, size); ! 200: if (form !=2) ! 201: fprintf(tabout, "%c", F2); ! 202: fprintf(tabout, "%c", F1); ! 203: } ! 204: if (ip>=0) ! 205: if (vspen(table[ip][c].col)) ! 206: { ! 207: exvspen = (c+1 < ncol) && vspen(table[ip][c+1].col) && ! 208: (topat[c] == topat[c+1]) && ! 209: (cmidx == (ctop [stynum[nl]][c+1]==0)) && (left(i,c+1,&lwid)<0); ! 210: if (exvspen==0) ! 211: { ! 212: fprintf(tabout, "\\v'(\\n(\\*(#du-\\n(^%cu", c+'a'); ! 213: if (cmidx) ! 214: fprintf(tabout, "-((\\n(#-u-\\n(^%cu)/2u)", c+'a'); ! 215: vct++; ! 216: fprintf(tabout, "'"); ! 217: } ! 218: } ! 219: else ! 220: exvspen=0; ! 221: /* if lines need to be split for gcos here is the place for a backslash */ ! 222: if (vct > 7 && c < ncol) ! 223: { ! 224: fprintf(tabout, "\n.sp-1\n\\&"); ! 225: vct=0; ! 226: } ! 227: } ! 228: fprintf(tabout, "\n"); ! 229: if (allh(i) && !pr1403) fprintf(tabout, ".vs \\n(%du\n", SVS); ! 230: if (watchout) ! 231: funnies(i,nl); ! 232: if (vspf) ! 233: { ! 234: for(c=0; c<ncol; c++) ! 235: if (vspen(table[nl][c].col) && (nl==0 || (lf=prev(nl))<0 || !vspen(table[lf][c].col))) ! 236: { ! 237: fprintf(tabout, ".nr ^%c \\n(#^u\n", 'a'+c); ! 238: topat[c]=nl; ! 239: } ! 240: } ! 241: } ! 242: puttext(s,fn, size) ! 243: char *s, *size, *fn; ! 244: { ! 245: if (point(s)) ! 246: { ! 247: putfont(fn); ! 248: putsize(size); ! 249: fprintf(tabout, "%s",s); ! 250: if (*fn>0) fprintf(tabout, "\\f\\n(%2d", S1); ! 251: if (size!=0) putsize("0"); ! 252: } ! 253: } ! 254: funnies( stl, lin) ! 255: { ! 256: /* write out funny diverted things */ ! 257: int c, s, pl, lwid, dv, lf, ct; ! 258: char *fn; ! 259: fprintf(tabout, ".mk ##\n"); /* rmember current vertical position */ ! 260: fprintf(tabout, ".nr %d \\n(##\n", S1); /* bottom position */ ! 261: for(c=0; c<ncol; c++) ! 262: { ! 263: s = table[lin][c].col; ! 264: if (point(s)) continue; ! 265: if (s==0) continue; ! 266: fprintf(tabout, ".sp |\\n(##u-1v\n"); ! 267: fprintf(tabout, ".nr %d ", SIND); ! 268: for(pl=stl; pl>=0 && !isalpha(ct=ctype(pl,c)); pl=prev(pl)) ! 269: ; ! 270: switch (ct) ! 271: { ! 272: case 'n': ! 273: case 'c': ! 274: fprintf(tabout, "(\\n(%du+\\n(%du-\\n(%c-u)/2u\n",c+CLEFT,c-1+ctspan(lin,c)+CRIGHT, s); ! 275: break; ! 276: case 'l': ! 277: fprintf(tabout, "\\n(%du\n",c+CLEFT); ! 278: break; ! 279: case 'a': ! 280: fprintf(tabout, "\\n(%du\n",c+CMID); ! 281: break; ! 282: case 'r': ! 283: fprintf(tabout, "\\n(%du-\\n(%c-u\n", c+CRIGHT, s); ! 284: break; ! 285: } ! 286: fprintf(tabout, ".in +\\n(%du\n", SIND); ! 287: fn=font[stynum[stl]][c]; ! 288: putfont(fn); ! 289: pl = prev(stl); ! 290: if (stl>0 && pl>=0 && vspen(table[pl][c].col)) ! 291: { ! 292: fprintf(tabout, ".sp |\\n(^%cu\n", 'a'+c); ! 293: if (ctop[stynum[stl]][c]==0) ! 294: { ! 295: fprintf(tabout, ".nr %d \\n(#-u-\\n(^%c-\\n(%c|+1v\n",TMP, 'a'+c, s); ! 296: fprintf(tabout, ".if \\n(%d>0 .sp \\n(%du/2u\n", TMP, TMP); ! 297: } ! 298: } ! 299: fprintf(tabout, ".%c+\n",s); ! 300: fprintf(tabout, ".in -\\n(%du\n", SIND); ! 301: if (*fn>0) putfont("P"); ! 302: fprintf(tabout, ".mk %d\n", S2); ! 303: fprintf(tabout, ".if \\n(%d>\\n(%d .nr %d \\n(%d\n", S2, S1, S1, S2); ! 304: } ! 305: fprintf(tabout, ".sp |\\n(%du\n", S1); ! 306: for(c=dv=0; c<ncol; c++) ! 307: { ! 308: if (stl+1< nlin && (lf=left(stl,c,&lwid))>=0) ! 309: { ! 310: if (dv++ == 0) ! 311: fprintf(tabout, ".sp -1\n"); ! 312: tohcol(c); ! 313: dv++; ! 314: drawvert(lf, stl, c, lwid); ! 315: } ! 316: } ! 317: if (dv) ! 318: fprintf(tabout,"\n"); ! 319: } ! 320: putfont(fn) ! 321: char *fn; ! 322: { ! 323: if (fn && *fn) ! 324: fprintf(tabout, fn[1] ? "\\f(%.2s" : "\\f%.2s", fn); ! 325: } ! 326: putsize(s) ! 327: char *s; ! 328: { ! 329: if (s && *s) ! 330: fprintf(tabout, "\\s%s",s); ! 331: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.