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

1.1       root        1: #ifndef lint
                      2: static char sccsid[] = "@(#)tv.c       4.3 8/11/83";
                      3: #endif
                      4: 
                      5:  /* tv.c: draw vertical lines */
                      6: # include "t..c"
                      7: drawvert(start,end, c, lwid)
                      8: {
                      9: char *exb=0, *ext=0;
                     10: int tp=0, sl, ln, pos, epb, ept, vm;
                     11: end++;
                     12: vm='v';
                     13: /* note: nr 35 has value of 1m outside of linesize */
                     14: while (instead[end]) end++;
                     15: for(ln=0; ln<lwid; ln++)
                     16:        {
                     17:        epb=ept=0;
                     18:        pos = 2*ln-lwid+1;
                     19:        if (pos!=tp) fprintf(tabout, "\\h'%dp'", pos-tp);
                     20:        tp = pos;
                     21:        if (end<nlin)
                     22:                {
                     23:                if (fullbot[end]|| (!instead[end] && allh(end)))
                     24:                        epb=2;
                     25:                else
                     26:                switch (midbar(end,c))
                     27:                        {
                     28:                        case '-':
                     29:                        exb = "1v-.5m"; break;
                     30:                        case '=':
                     31:                        exb = "1v-.5m";
                     32:                        epb = 1; break;
                     33:                        }
                     34:                }
                     35:        if (lwid>1)
                     36:        switch(interh(end, c))
                     37:                {
                     38:                case THRU: epb -= 1; break;
                     39:                case RIGHT: epb += (ln==0 ? 1 : -1); break;
                     40:                case LEFT: epb += (ln==1 ? 1 : -1); break;
                     41:                }
                     42:        if (lwid==1)
                     43:        switch(interh(end,c))
                     44:                {
                     45:                case THRU: epb -= 1; break;
                     46:                case RIGHT: case LEFT: epb += 1; break;
                     47:                }
                     48:        if (start>0)
                     49:                {
                     50:                sl = start-1;
                     51:                while (sl>=0 && instead[sl]) sl--;
                     52:                if (sl>=0 && (fullbot[sl] || allh(sl)))
                     53:                        ept=0;
                     54:                else
                     55:                if (sl>=0)
                     56:                switch(midbar(sl,c))
                     57:                        {
                     58:                        case '-':
                     59:                        ext = ".5m"; break;
                     60:                        case '=':
                     61:                        ext= ".5m"; ept = -1; break;
                     62:                        default:
                     63:                                vm = 'm'; break;
                     64:                        }
                     65:                else
                     66:                        ept = -4;
                     67:                }
                     68:        else if (start==0 && allh(0))
                     69:                {
                     70:                ept=0;
                     71:                vm = 'm';
                     72:                }
                     73:        if (lwid>1)
                     74:                switch(interh(start,c))
                     75:                        {
                     76:                        case THRU: ept += 1; break;
                     77:                        case LEFT: ept += (ln==0 ? 1 : -1); break;
                     78:                        case RIGHT: ept += (ln==1 ? 1 : -1); break;
                     79:                        }
                     80:        else if (lwid==1)
                     81:                switch(interh(start,c))
                     82:                        {
                     83:                        case THRU: ept += 1; break;
                     84:                        case LEFT: case RIGHT: ept -= 1; break;
                     85:                        }
                     86:        if (exb)
                     87:                fprintf(tabout, "\\v'%s'", exb);
                     88:        if (epb)
                     89:                fprintf(tabout, "\\v'%dp'", epb);
                     90:        fprintf(tabout, "\\s\\n(%d",LSIZE);
                     91:        if (linsize)
                     92:                fprintf(tabout, "\\v'-\\n(%dp/6u'", LSIZE);
                     93:        fprintf(tabout, "\\h'-\\n(#~u'"); /* adjustment for T450 nroff boxes */
                     94:        fprintf(tabout, "\\L'|\\n(#%cu-%s", linestop[start]+'a'-1, vm=='v'? "1v" : "\\n(35u");
                     95:        if (ext)
                     96:                fprintf(tabout, "-(%s)",ext);
                     97:        if (exb)
                     98:                fprintf(tabout, "-(%s)", exb);
                     99:        pos = ept-epb;
                    100:        if (pos)
                    101:                fprintf(tabout, "%s%dp", pos>=0? "+" : "", pos);
                    102:        /* the string #d is either "nl" or ".d" depending
                    103:           on diversions; on GCOS not the same */
                    104:        fprintf(tabout, "'\\s0\\v'\\n(\\*(#du-\\n(#%cu+%s", linestop[start]+'a'-1,vm=='v' ? "1v" : "\\n(35u");
                    105:        if (ext)
                    106:                fprintf(tabout, "+%s",ext);
                    107:        if (ept)
                    108:                fprintf(tabout, "%s%dp", (-ept)>0 ? "+" : "", (-ept));
                    109:        fprintf(tabout, "'");
                    110:        if (linsize)
                    111:                fprintf(tabout, "\\v'\\n(%dp/6u'", LSIZE);
                    112:        }
                    113: }
                    114: 
                    115: 
                    116: midbar(i,c)
                    117: {
                    118: int k;
                    119: k = midbcol(i,c);
                    120: if (k==0 && c>0)
                    121:        k = midbcol(i, c-1);
                    122: return(k);
                    123: }
                    124: midbcol(i,c)
                    125: {
                    126: int ct;
                    127: while ( (ct=ctype(i,c)) == 's')
                    128:        c--;
                    129: if (ct=='-' || ct == '=')
                    130:        return(ct);
                    131: if (ct=barent(table[i][c].col))
                    132:        return(ct);
                    133: return(0);
                    134: }
                    135: 
                    136: barent(s)
                    137:        char *s;
                    138: {
                    139: if (s==0) return (1);
                    140: if (!point(s)) return(1);
                    141: if (s[0]== '\\') s++;
                    142: if (s[1]!= 0)
                    143:        return(0);
                    144: switch(s[0])
                    145:        {
                    146:        case '_':
                    147:                return('-');
                    148:        case '=':
                    149:                return('=');
                    150:        }
                    151: return(0);
                    152: }

unix.superglobalmegacorp.com

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