static char sccsid
[] = "@(#)t6.c 4.3 %G%";
/* t6.c: compute tab stops */
# define tx(a) (a>0 && a<128)
# define FN(i,c) font[stynum[i]][c]
# define SZ(i,c) csize[stynum[i]][c]
/* define the tab stops of the table */
int icol
, ilin
, tsep
, k
, ik
, vforml
, il
, text
;
int doubled
[MAXCOL
], acase
[MAXCOL
];
for(icol
=0; icol
<ncol
; icol
++)
doubled
[icol
] = acase
[icol
] = 0;
fprintf(tabout
, ".nr %d 0\n", icol
+CRIGHT
);
for(text
=0; text
<2; text
++)
fprintf(tabout
, ".%02d\n.rm %02d\n", icol
+80, icol
+80);
for(ilin
=0; ilin
<nlin
; ilin
++)
if (instead
[ilin
]|| fullbot
[ilin
]) continue;
for(il
=prev(ilin
); il
>=0 && vspen(table
[il
][icol
].col
); il
=prev(il
))
if (fspan(vforml
,icol
)) continue;
if (filler(table
[ilin
][icol
].col
)) continue;
switch(ctype(vforml
,icol
))
s
= table
[ilin
][icol
].col
;
if (s
>0 && s
<128 && text
)
fprintf(tabout
, ".nr %d 0\n.nr %d 0\n",S1
,S2
);
fprintf(tabout
, ".if \\n(%c->\\n(%d .nr %d \\n(%c-\n",s
,S2
,S2
,s
);
if (table
[ilin
][icol
].rcol
!=0)
if (doubled
[icol
]==0 && text
==0)
fprintf(tabout
, ".nr %d 0\n.nr %d 0\n", S1
, S2
);
if (real(s
=table
[ilin
][icol
].col
) && !vspen(s
))
if (tx(s
) != text
) continue;
fprintf(tabout
, ".nr %d ", TMP
);
wide(s
, FN(vforml
,icol
), SZ(vforml
,icol
)); fprintf(tabout
, "\n");
fprintf(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
))
fprintf(tabout
, ".nr %d \\w%c%s%c\n",TMP
, F1
, s
, F1
);
fprintf(tabout
, ".if \\n(%d<\\n(%d .nr %d \\n(%d\n",S2
,TMP
,S2
,TMP
);
if (real(s
=table
[ilin
][icol
].col
) && !vspen(s
))
if (tx(s
) != text
) continue;
fprintf(tabout
, ".nr %d ", TMP
);
wide(s
, FN(vforml
,icol
), SZ(vforml
,icol
)); fprintf(tabout
, "\n");
fprintf(tabout
, ".if \\n(%d<\\n(%d .nr %d \\n(%d\n", icol
+CRIGHT
, TMP
, icol
+CRIGHT
, TMP
);
fprintf(tabout
, ".if \\n(%d>=\\n(%d .nr %d \\n(%du+2n\n",S2
,icol
+CRIGHT
,icol
+CRIGHT
,S2
);
fprintf(tabout
, ".nr %d \\n(%d\n", icol
+CMID
, S1
);
fprintf(tabout
, ".nr %d \\n(%d+\\n(%d\n",TMP
,icol
+CMID
,S2
);
fprintf(tabout
, ".if \\n(%d>\\n(%d .nr %d \\n(%d\n",TMP
,icol
+CRIGHT
,icol
+CRIGHT
,TMP
);
fprintf(tabout
, ".if \\n(%d<\\n(%d .nr %d +(\\n(%d-\\n(%d)/2\n",TMP
,icol
+CRIGHT
,icol
+CMID
,icol
+CRIGHT
,TMP
);
fprintf(tabout
, ".nr %d %sn\n", TMP
, cll
[icol
]);
fprintf(tabout
, ".if \\n(%d<\\n(%d .nr %d \\n(%d\n",icol
+CRIGHT
, TMP
, icol
+CRIGHT
, TMP
);
for(ilin
=0; ilin
<nlin
; ilin
++)
s
=table
[ilin
][icol
-k
].col
;
if (!real(s
) || barent(s
) || vspen(s
) ) continue;
fprintf(tabout
, ".nr %d ", TMP
);
wide(table
[ilin
][icol
-k
].col
, FN(ilin
,icol
-k
), SZ(ilin
,icol
-k
));
fprintf(tabout
, "-\\n(%d",CRIGHT
+icol
-ik
);
if (!expflg
&& ik
>0) fprintf(tabout
, "-%dn", sep
[icol
-ik
]);
fprintf(tabout
, ".if \\n(%d>0 .nr %d \\n(%d/%d\n", TMP
, TMP
, TMP
, k
);
fprintf(tabout
, ".if \\n(%d<0 .nr %d 0\n", TMP
, TMP
);
fprintf(tabout
, ".nr %d +\\n(%d/2\n", icol
-k
+ik
+CMID
, TMP
);
fprintf(tabout
, ".nr %d +\\n(%d\n", icol
-k
+ik
+CRIGHT
, TMP
);
/* if even requested, make all columns widest width */
fprintf(tabout
, ".nr %d 0\n", TMP
);
for(icol
=0; icol
<ncol
; icol
++)
if (evenup
[icol
]==0) continue;
fprintf(tabout
, ".if \\n(%d>\\n(%d .nr %d \\n(%d\n",
icol
+CRIGHT
, TMP
, TMP
, icol
+CRIGHT
);
for(icol
=0; icol
<ncol
; icol
++)
/* if column not evened just retain old interval */
fprintf(tabout
, ".nr %d (100*\\n(%d/\\n(%d)*\\n(%d/100\n",
icol
+CMID
, icol
+CMID
, icol
+CRIGHT
, TMP
);
/* that nonsense with the 100's and parens tries
to avoid overflow while proportionally shifting
the middle of the number */
fprintf(tabout
, ".nr %d \\n(%d\n", icol
+CRIGHT
, TMP
);
/* now adjust for total table width */
for(tsep
=icol
=0; icol
<ncol
; icol
++)
fprintf(tabout
, ".nr %d 0", TMP
);
for(icol
=0; icol
<ncol
; icol
++)
fprintf(tabout
, "+\\n(%d", icol
+CRIGHT
);
fprintf(tabout
, ".nr %d \\n(.l-\\n(%d\n", TMP
, TMP
);
if (boxflg
|| dboxflg
|| allflg
)
fprintf(tabout
, ".nr %d \\n(%d/%d\n", TMP
, TMP
, tsep
);
fprintf(tabout
, ".if \\n(%d<0 .nr %d 0\n", TMP
, TMP
);
fprintf(tabout
, ".nr %d 1n\n", TMP
);
fprintf(tabout
, ".nr %d 0\n",CRIGHT
-1);
tsep
= (boxflg
|| allflg
|| dboxflg
|| left1flg
) ? 1 : 0;
for(icol
=0; icol
<ncol
; icol
++)
fprintf(tabout
, ".nr %d \\n(%d+(%d*\\n(%d)\n",icol
+CLEFT
, icol
+CRIGHT
-1, tsep
, TMP
);
fprintf(tabout
, ".nr %d +\\n(%d\n",icol
+CRIGHT
, icol
+CLEFT
);
/* the next line is last-ditch effort to avoid zero field width */
/*fprintf(tabout, ".if \\n(%d=0 .nr %d 1\n",icol+CMID, icol+CMID);*/
fprintf(tabout
, ".nr %d +\\n(%d\n", icol
+CMID
, icol
+CLEFT
);
/* fprintf(tabout, ".if n .if \\n(%d%%24>0 .nr %d +12u\n",icol+CMID, icol+CMID); */
fprintf(tabout
, ".nr %d (\\n(%d+\\n(%d)/2\n",ncol
+CRIGHT
-1, ncol
+CLEFT
-1, ncol
+CRIGHT
-2);
fprintf(tabout
, ".nr TW \\n(%d\n", ncol
+CRIGHT
-1);
if (boxflg
|| allflg
|| dboxflg
)
fprintf(tabout
, ".nr TW +%d*\\n(%d\n", sep
[ncol
-1], TMP
);
".if t .if \\n(TW>\\n(.li .tm Table at line %d file %s is too wide - \\n(TW units\n", iline
-1, ifile
);
fprintf(tabout
, "\\w%c", F1
);
if (*size
) putsize(size
);
fprintf(tabout
, "%s", s
);
fprintf(tabout
, "%c",F1
);
fprintf(tabout
, "\\n(%c-", s
);
return (point(s
) && s
[0]=='\\' && s
[1] == 'R');