Annotation of 43BSDTahoe/usr.bin/tbl/t8.c, revision 1.1

1.1     ! root        1: #ifndef lint
        !             2: static char sccsid[] = "@(#)t8.c       4.2 8/11/83";
        !             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, 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 (s>0 && s<128)
        !            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.