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