root/usr/src/cmd/tbl/t9.c
/*
 * Copyright 2003 Sun Microsystems, Inc.  All rights reserved.
 * Use is subject to license terms.
 */

/*      Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */
/*        All Rights Reserved   */


/*
 * Copyright (c) 1980 Regents of the University of California.
 * All rights reserved. The Berkeley software License Agreement
 * specifies the terms and conditions for redistribution.
 */

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

static int useln;

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

int
domore(char *dataln)
{
        int icol, ch;
if (prefix(".TE", dataln))
        return(0);
if (dataln[0] == '.' && !isdigit((unsigned char)dataln[1]))
        {
        puts(dataln);
        return(1);
        }
instead[0]=0;
fullbot[0]=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);
return(1);
}