Annotation of 42BSD/usr.bin/tbl/tv.c, revision 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.