Subversion Repositories planix.SVN

Rev

Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

/* t9.c: write lines for tables over 200 lines */
# include "t.h"
static useln;

void
yetmore(void)
{
        for (useln = 0; useln < MAXLIN && table[useln] == 0; useln++)
                ;
        if (useln >= MAXLIN)
                error("Wierd.  No data in table.");
        table[0] = table[useln];
        for (useln = nlin - 1; useln >= 0 && (fullbot[useln] || instead[useln]); useln--)
                ;
        if (useln < 0)
                error("Wierd.  No real lines in table.");
        domore(leftover);
        while (gets1(cstore = cspace, MAXCHS) && domore(cstore))
                ;
        last = cstore;
}


int
domore(char *dataln)
{
        int     icol, ch;

        if (prefix(".TE", dataln))
                return(0);
        if (dataln[0] == '.' && !isdigit(dataln[1])) {
                Bprint(&tabout, "%s\n", dataln);
                return(1);
        }
        fullbot[0] = 0;
        instead[0] = (char *)0;
        if (dataln[1] == 0)
                switch (dataln[0]) {
                case '_': 
                        fullbot[0] = '-'; 
                        putline(useln, 0);  
                        return(1);
                case '=': 
                        fullbot[0] = '='; 
                        putline(useln, 0); 
                        return(1);
                }
        for (icol = 0; icol < ncol; icol++) {
                table[0][icol].col = dataln;
                table[0][icol].rcol = 0;
                for (; (ch = *dataln) != '\0' && ch != tab; dataln++)
                        ;
                *dataln++ = '\0';
                switch (ctype(useln, icol)) {
                case 'n':
                        table[0][icol].rcol = maknew(table[0][icol].col);
                        break;
                case 'a':
                        table[0][icol].rcol = table[0][icol].col;
                        table[0][icol].col = "";
                        break;
                }
                while (ctype(useln, icol + 1) == 's') /* spanning */
                        table[0][++icol].col = "";
                if (ch == '\0') 
                        break;
        }
        while (++icol < ncol)
                table[0][icol].col = "";
        putline(useln, 0);
        exstore = exspace;               /* reuse space for numerical items */
        return(1);
}