Annotation of 43BSDReno/usr.bin/tbl/t8.c, revision 1.1.1.1

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

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.