Annotation of researchv9/cmd/tbl/tv.c, revision 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 (!point(s)) return(0);
        !           137: if (s[0]== '\\') s++;
        !           138: if (s[1]!= 0)
        !           139:        return(0);
        !           140: switch(s[0])
        !           141:        {
        !           142:        case '_':
        !           143:                return('-');
        !           144:        case '=':
        !           145:                return('=');
        !           146:        }
        !           147: return(0);
        !           148: }

unix.superglobalmegacorp.com

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