% File:       TeX Inputs Cell3.tex
% Author:     J E Pittman
% Bitnet:     JEPTeX@TAMVenus
% Internet:   JEPTeX@Venus.TAMU.EDU
% Date:       October 11, 1988
%
% Process the column and row span info.
%
\declaredimen\expansion
%
\edef\everycolumn{\everycolumn\expansion=\zeropt\relax}%
\edef\everyrow{\everyrow\expansion=\zeropt\relax}%
%
\catcode`_=11 % used to protect local control sequence names.
%
%\message{\string\row_span_info=\the\row_span_info}% debug
%\message{\string\column_span_info=\the\column_span_info}% debug
%
\def\process#1#2#3{\relax
   \last_cell=#3\relax
   \first_cell=\last_cell
   \advance \first_cell \by -#1\relax
   \span_size=#2\relax
%
% Compute the gap between the size of the span and the total size of 
% the cells spanned.
%
   \gap=\span_size
   \forcount \cell_number=\first_cell to \last_cell by 1 do
      \everycell
      \get_cell_number_data
      \advance \gap \by -\cell_size
      \advance \gap \by -\expansion
      \endfor \cell_number
%  \message{\string\first_cell=\the\first_cell}% debug
%  \message{\string\last_cell=\the\last_cell}% debug
%  \message{\string\span_size=\the\span_size}% debug
%  \message{\string\gap=\the\gap}% debug
%
% If the gap is 0pt or less, nothing needs to be done, else search for 
% the minimum expansion that can be applied to every cell with a 
% current expansion less than the expansion found such that the span 
% is properly accomadated.
%
   \ifdim \gap>\zeropt
      \expandable_cells=#1\relax
      \advance \expandable_cells \by 1
      \trial_expansion=\zeropt
      \whilenot\search \ifdim\gap=\zeropt do
%        \message{\string\gap=\the\gap}% debug
         \ifnum \expandable_cells=0
            \advance \trial_expansion \by \expansion
         \else
            \multiply \trial_expansion \by \expandable_cells
            \advance \trial_expansion \by \gap
            \divide \trial_expansion \by \expandable_cells
            \expandable_cells=0
         \fi
         \gap=\span_size
%        \message{\string\trial_expansion=\the\trial_expansion}% debug
         \forcount \cell_number=\first_cell to \last_cell by 1 do
            \everycell
            \get_cell_number_data
            \advance \gap \by -\cell_size
            \ifdim \expansion>\trial_expansion
               \advance \gap \by -\expansion
            \else
               \advance \gap \by -\trial_expansion
               \advance \expandable_cells \by 1
            \fi
            \endfor \cell_number
         \temp_dimen=1sp
         \multiply \temp_dimen \by \expandable_cells
         \ifdim \gap>-\temp_dimen
            \ifdim \gap<\temp_dimen
               \gap=\zeropt
            \fi
         \fi
         \endwhilenot \search
      \forcount \cell_number=\first_cell to \last_cell by 1 do
         \everycell
         \get_cell_number_data
         \ifdim \expansion<\trial_expansion
            \let\info=\relax
            \edef\temp{\the\cell_number>\info
                  {\expansion=\the\trial_expansion\relax}}%
            \let\info=\cell_info
            \x_after \add_data \temp
            \ifnum\tracingexpansions>0
               \message{Expanded \the\cell_number}%
               \message{by \the\trial_expansion}%
               \message{from \the\cell_size}%
               \advance \cell_size \by \trial_expansion
               \message{to \the\cell_size.}%
            \fi
         \fi
         \endfor \cell_number
   \fi
   }%
%
\declarecount\first_cell
\declarecount\last_cell
\declaredimen\span_size
\let\expandable_cells=\temp_count
\declaredimen\trial_expansion
\let\gap=\scratch_dimen
%
\let\cell_number=\row_number
\let\everycell=\everyrow
\let\get_cell_number_data=\get_row_number_data
\let\cell_info=\row_info
\let\cell_size=\rowheight
\ifnum\tracingexpansions>0
   \message{Checking row expansions.}%
\fi
\the\row_span_info
%
\let\cell_number=\column_number
\let\everycell=\everycolumn
\let\get_cell_number_data=\get_column_number_data
\let\cell_info=\column_info
\let\cell_size=\columnwidth
\ifnum\tracingexpansions>0
   \message{Checking column expansions.}%
\fi
\the\column_span_info
%
\let\process=\relax
%
\catcode`_=8 % back to normal
%
\endinput

.
