URI: 
       t64-bit safe - plan9port - [fork] Plan 9 from user space
  HTML git clone git://src.adamsgaard.dk/plan9port
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
   DIR commit a5f3a00bcd0452d78afc5d8064da611d4b448093
   DIR parent 71e936d7166b088aa3e2ec55d14b53cb2a3ac5ec
  HTML Author: rsc <devnull@localhost>
       Date:   Thu, 20 Apr 2006 21:00:21 +0000
       
       64-bit safe
       
       Diffstat:
         M src/cmd/tbl/t6.c                    |      35 +++++++++++++++++--------------
         M src/cmd/tbl/t8.c                    |      52 +++++++++++++++++--------------
         M src/cmd/tbl/tc.c                    |       8 ++++----
         M src/cmd/tbl/tg.c                    |       9 +++++++--
         M src/cmd/tbl/tm.c                    |       8 ++++----
       
       5 files changed, 62 insertions(+), 50 deletions(-)
       ---
   DIR diff --git a/src/cmd/tbl/t6.c b/src/cmd/tbl/t6.c
       t@@ -9,8 +9,8 @@
        void
        maktab(void)                        /* define the tab stops of the table */
        {
       -        int        icol, ilin, tsep, k, ik, vforml, il, text;
       -        char        *s;
       +        int        icol, ilin, tsep, k, ik, vforml, il, s, text;
       +        char        *ss;
        
                for (icol = 0; icol < ncol; icol++) {
                        doubled[icol] = acase[icol] = 0;
       t@@ -34,14 +34,15 @@ maktab(void)                        /* define the tab stops of the table */
                                        switch (ctype(vforml, icol)) {
                                        case 'a':
                                                acase[icol] = 1;
       -                                        s = table[ilin][icol].col;
       -                                        if ((int)s > 0 && (int)s < 128 && text) {
       +                                        ss = table[ilin][icol].col;
       +                                        s = (int)(uintptr)ss;
       +                                        if (s > 0 && s < 128 && text) {
                                                        if (doubled[icol] == 0)
                                                                Bprint(&tabout, ".nr %d 0\n.nr %d 0\n",
                                                                    S1, S2);
                                                        doubled[icol] = 1;
                                                        Bprint(&tabout, ".if \\n(%c->\\n(%d .nr %d \\n(%c-\n",
       -                                                    (int)s, S2, S2, (int)s);
       +                                                    s, S2, S2, s);
                                                }
                                        case 'n':
                                                if (table[ilin][icol].rcol != 0) {
       t@@ -49,18 +50,19 @@ maktab(void)                        /* define the tab stops of the table */
                                                                Bprint(&tabout, ".nr %d 0\n.nr %d 0\n",
                                                                    S1, S2);
                                                        doubled[icol] = 1;
       -                                                if (real(s = table[ilin][icol].col) && !vspen(s)) {
       -                                                        if (tx((int)s) != text) 
       +                                                if (real(ss = table[ilin][icol].col) && !vspen(ss)) {
       +                                                        s = (int)(uintptr)ss;
       +                                                        if (tx(s) != text) 
                                                                        continue;
                                                                Bprint(&tabout, ".nr %d ", TMP);
       -                                                        wide(s, FN(vforml, icol), SZ(vforml, icol)); 
       +                                                        wide(ss, FN(vforml, icol), SZ(vforml, icol)); 
                                                                Bprint(&tabout, "\n");
                                                                Bprint(&tabout, ".if \\n(%d<\\n(%d .nr %d \\n(%d\n",
                                                                    S1, TMP, S1, TMP);
                                                        }
       -                                                if (text == 0 && real(s = table[ilin][icol].rcol) && !vspen(s) && !barent(s)) {
       +                                                if (text == 0 && real(ss = table[ilin][icol].rcol) && !vspen(ss) && !barent(ss)) {
                                                                Bprint(&tabout, ".nr %d \\w%c%s%c\n",
       -                                                            TMP, F1, s, F1);
       +                                                            TMP, F1, ss, F1);
                                                                Bprint(&tabout, ".if \\n(%d<\\n(%d .nr %d \\n(%d\n", S2, TMP, S2,
                                                                     TMP);
                                                        }
       t@@ -69,11 +71,12 @@ maktab(void)                        /* define the tab stops of the table */
                                        case 'r':
                                        case 'c':
                                        case 'l':
       -                                        if (real(s = table[ilin][icol].col) && !vspen(s)) {
       -                                                if (tx((int)s) != text) 
       +                                        if (real(ss = table[ilin][icol].col) && !vspen(ss)) {
       +                                                s = (int)(uintptr)ss;
       +                                                if (tx(s) != text) 
                                                                continue;
                                                        Bprint(&tabout, ".nr %d ", TMP);
       -                                                wide(s, FN(vforml, icol), SZ(vforml, icol)); 
       +                                                wide(ss, FN(vforml, icol), SZ(vforml, icol)); 
                                                        Bprint(&tabout, "\n");
                                                        Bprint(&tabout, ".if \\n(%2s<\\n(%d .nr %2s \\n(%d\n",
                                                             reg(icol, CRIGHT), TMP, reg(icol, CRIGHT), TMP);
       t@@ -100,8 +103,8 @@ maktab(void)                        /* define the tab stops of the table */
                        }
                        for (ilin = 0; ilin < nlin; ilin++)
                                if (k = lspan(ilin, icol)) {
       -                                s = table[ilin][icol-k].col;
       -                                if (!real(s) || barent(s) || vspen(s) ) 
       +                                ss = table[ilin][icol-k].col;
       +                                if (!real(ss) || barent(ss) || vspen(ss) ) 
                                                continue;
                                        Bprint(&tabout, ".nr %d ", TMP);
                                        wide(table[ilin][icol-k].col, FN(ilin, icol - k), SZ(ilin, icol - k));
       t@@ -210,7 +213,7 @@ wide(char *s, char *fn, char *size)
                                putsize("0");
                        Bprint(&tabout, "%c", F1);
                } else
       -                Bprint(&tabout, "\\n(%c-", (int)s);
       +                Bprint(&tabout, "\\n(%c-", (int)(uintptr)s);
        }
        
        
   DIR diff --git a/src/cmd/tbl/t8.c b/src/cmd/tbl/t8.c
       t@@ -9,9 +9,9 @@ putline(int i, int nl)
                                        /* i is line number for deciding format */
                                        /* nl is line number for finding data   usually identical */
        {
       -        int        c, lf, ct, form, lwid, vspf, ip, cmidx, exvspen, vforml;
       +        int        c, s, lf, ct, form, lwid, vspf, ip, cmidx, exvspen, vforml;
                int        vct, chfont, uphalf;
       -        char        *s, *size, *fn, *rct;
       +        char        *ss, *size, *fn, *rct;
        
                cmidx = watchout = vspf = exvspen = 0;
                if (i == 0) 
       t@@ -20,20 +20,22 @@ putline(int i, int nl)
                        fullwide(0,   dboxflg ? '=' : '-');
                if (instead[nl] == 0 && fullbot[nl] == 0)
                        for (c = 0; c < ncol; c++) {
       -                        s = table[nl][c].col;
       -                        if (s == 0) 
       +                        ss = table[nl][c].col;
       +                        if (ss == 0) 
                                        continue;
       -                        if (vspen(s)) {
       +                        if (vspen(ss)) {
                                        for (ip = nl; ip < nlin; ip = next(ip))
       -                                        if (!vspen(s = table[ip][c].col)) 
       +                                        if (!vspen(ss = table[ip][c].col)) 
                                                        break;
       -                                if ((int)s > 0 && (int)s < 128)
       +                                s = (int)(uintptr)ss;
       +                                if (s > 0 && s < 128)
                                                Bprint(&tabout, ".ne \\n(%c|u+\\n(.Vu\n", (int)s);
                                        continue;
                                }
       -                        if (point(s)) 
       +                        if (point(ss)) 
                                        continue;
       -                        Bprint(&tabout, ".ne \\n(%c|u+\\n(.Vu\n", (int)s);
       +                        s = (int)(uintptr)ss;
       +                        Bprint(&tabout, ".ne \\n(%c|u+\\n(.Vu\n", s);
                                watchout = 1;
                        }
                if (linestop[nl])
       t@@ -66,17 +68,19 @@ putline(int i, int nl)
                vspf = 0;
                chfont = 0;
                for (c = 0; c < ncol; c++) {
       -                s = table[nl][c].col;
       -                if (s == 0) 
       +                ss = table[nl][c].col;
       +                if (ss == 0) 
                                continue;
       -                chfont |= (int)(font[c][stynum[nl]]);
       -                if (point(s) ) 
       +                if(font[c][stynum[nl]])
       +                        chfont = 1;
       +                if (point(ss) )
                                continue;
       +                s = (int)(uintptr)ss;
                        lf = prev(nl);
                        if (lf >= 0 && vspen(table[lf][c].col))
                                Bprint(&tabout,
                                   ".if (\\n(%c|+\\n(^%c-1v)>\\n(#- .nr #- +(\\n(%c|+\\n(^%c-\\n(#--1v)\n",
       -                            (int)s, 'a' + c, (int)s, 'a' + c);
       +                            s, 'a' + c, s, 'a' + c);
                        else
                                Bprint(&tabout,
                                    ".if (\\n(%c|+\\n(#^-1v)>\\n(#- .nr #- +(\\n(%c|+\\n(#^-\\n(#--1v)\n",
       t@@ -117,7 +121,7 @@ putline(int i, int nl)
                                        rct = reg(c, CMID);
                                Bprint(&tabout, "\\h'|\\n(%2su'", rct);
                        }
       -                s = table[nl][c].col;
       +                ss = table[nl][c].col;
                        fn = font[c][stynum[vforml]];
                        size = csize[c][stynum[vforml]];
                        if (*size == 0)
       t@@ -150,12 +154,12 @@ putline(int i, int nl)
                                                Bprint(&tabout, "%c%c", F1, F2);
                                                if (uphalf) 
                                                        Bprint(&tabout, "\\u");
       -                                        puttext(s, fn, size);
       +                                        puttext(ss, fn, size);
                                                if (uphalf) 
                                                        Bprint(&tabout, "\\d");
                                                Bprint(&tabout, "%c", F1);
                                        }
       -                                s = table[nl][c].rcol;
       +                                ss = table[nl][c].rcol;
                                        form = 1;
                                        break;
                                }
       t@@ -179,12 +183,12 @@ putline(int i, int nl)
                        }
                        if (realsplit ? rused[c] : used[c]) /*Zero field width*/ {
                                /* form: 1 left, 2 right, 3 center adjust */
       -                        if (ifline(s)) {
       -                                makeline(i, c, ifline(s));
       +                        if (ifline(ss)) {
       +                                makeline(i, c, ifline(ss));
                                        continue;
                                }
       -                        if (filler(s)) {
       -                                Bprint(&tabout, "\\l'|\\n(%2su\\&%s'", reg(c, CRIGHT), s + 2);
       +                        if (filler(ss)) {
       +                                Bprint(&tabout, "\\l'|\\n(%2su\\&%s'", reg(c, CRIGHT), ss + 2);
                                        continue;
                                }
                                ip = prev(nl);
       t@@ -204,13 +208,13 @@ putline(int i, int nl)
                                Bprint(&tabout, "%c", F1);
                                if (form != 1)
                                        Bprint(&tabout, "%c", F2);
       -                        if (vspen(s))
       +                        if (vspen(ss))
                                        vspf = 1;
                                else
                                 {
                                        if (uphalf) 
                                                Bprint(&tabout, "\\u");
       -                                puttext(s, fn, size);
       +                                puttext(ss, fn, size);
                                        if (uphalf) 
                                                Bprint(&tabout, "\\d");
                                }
       t@@ -289,7 +293,7 @@ funnies(int stl, int lin)
                                continue;
                        if (ss == 0) 
                                continue;
       -                s = (int)ss;
       +                s = (int)(uintptr)ss;
                        Bprint(&tabout, ".sp |\\n(##u-1v\n");
                        Bprint(&tabout, ".nr %d ", SIND);
                        ct = 0;
   DIR diff --git a/src/cmd/tbl/tc.c b/src/cmd/tbl/tc.c
       t@@ -5,7 +5,7 @@ void
        choochar(void)
        {
                                        /* choose funny characters to delimit fields */
       -        int        had[128], ilin, icol, k;
       +        int        had[256], ilin, icol, k;
                char        *s;
        
                for (icol = 0; icol < 128; icol++)
       t@@ -56,10 +56,10 @@ choochar(void)
        
        
        int
       -point(char *s)
       +point(char *ss)
        {
       -        int        ss = (int)s;
       -        return(ss >= 128 || ss < 0);
       +        int        s = (int)(uintptr)ss;
       +        return(s >= 128 || s < 0);
        }
        
        
   DIR diff --git a/src/cmd/tbl/tg.c b/src/cmd/tbl/tg.c
       t@@ -6,9 +6,10 @@ gettext(char *sp, int ilin, int icol, char *fn, char *sz)
        {
                                                /* get a section of text */
                char        line[4096];
       -        int        oname;
       +        int        oname, startline;
                char        *vs;
        
       +        startline = iline;
                if (texname == 0) 
                        error("Too many text block diversions");
                if (textflg == 0) {
       t@@ -42,7 +43,11 @@ gettext(char *sp, int ilin, int icol, char *fn, char *sz)
                if (ctype(ilin, icol) == 'a')
                        Bprint(&tabout, ".ll -2n\n");
                Bprint(&tabout, ".in 0\n");
       -        while (gets1(line, sizeof(line))) {
       +        for (;;) {
       +                if (gets1(line, sizeof(line)) == nil) {
       +                        iline = startline;
       +                        error("missing closing T}");
       +                }
                        if (line[0] == 'T' && line[1] == '}' && line[2] == tab) 
                                break;
                        if (match("T}", line)) 
   DIR diff --git a/src/cmd/tbl/tm.c b/src/cmd/tbl/tm.c
       t@@ -5,8 +5,8 @@ char        *
        maknew(char *str)
        {
                                        /* make two numerical fields */
       -        int        dpoint, c;
       -        char        *p, *q, *ba;
       +        int        c;
       +        char        *p, *q, *ba, *dpoint;
        
                p = str;
                for (ba = 0; c = *str; str++)
       t@@ -18,7 +18,7 @@ maknew(char *str)
                                if (*str == '.' && !ineqn(str, p) && 
                                    (str > p && digit(*(str - 1)) || 
                                    digit(*(str + 1))))
       -                                dpoint = (int)str;
       +                                dpoint = str;
                        }
                        if (dpoint == 0)
                                for (; str > p; str--) {
       t@@ -28,7 +28,7 @@ maknew(char *str)
                        if (!dpoint && p == str) /* not numerical, don't split */
                                return(0);
                        if (dpoint) 
       -                        str = (char *)dpoint;
       +                        str = dpoint;
                } else
                        str = ba;
                p = str;