Annotation of researchv10no/cmd/tbl/t8.c, revision 1.1.1.1

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

unix.superglobalmegacorp.com

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