Annotation of 41BSD/cmd/tbl/tv.c, revision 1.1.1.1

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

unix.superglobalmegacorp.com

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