% FILE HAS BEEN CONVERTED TO 2.03
%
%     MULTIPLE COLUMN FORMATS FIXED MODE, two and three column
%     Harvey 1/29/86
%
\catcode`*=11 \catcode`@=11
%
\global\let\newcolumn=\np              % new column in fixed mode is the
\global\let\nc=\np                     % same as newpage in single column
%
\gdef\pagebody{\vbox to\vsize{\boxmaxdepth=\maxdepth
    \pagecontents\vfill}}% redefine from plain.tex to add vfil
                                     % prevents underfull vbox in last column
%
\gdef\flexibleformat{\write16{<TEXT1> Warning! You can't change to%
 flexible format while in fixed format. }}%
 
%
\gdef\full*pgw{\hbox to \the\*txtw}%    Output box to full pagewidth
%
\gdef\*colbox{\leftline{\pagebody}}%    TeXbook definition
%
\gdef\*page{% MAKEPAGE, *mkpg, ships out the complete page body
    \*badj                        % check for binding offset
    \if*title\shipout             % titlepage, no headline
       \vbox{\*pgmat %                    page template
       \makefootline}
       \notitlepage
    \else\shipout\vbox{ %           normal page with head and footlines
         \makeheadline %
         \*pgmat %                  page template
         \makefootline}
    \fi
     \ifnum\*pcount>0 \*blkpg\fi %  call for empty page, BLANK PAGE MACRO
     \advancepageno}% END, makepage routine
%
\gdef\*fixtwc{% BEGIN TWO COLUMNS FIXED FORMAT---set-up
    \if*plain \par\vfill\eject \fi   % new page prevents mixed formats
    \if*dbl\e*fixtwc\fi              % end any active double columns
    \if*tpl \par\vfill\eject \fi     % new page prevents mixed multicolumn format
                                     % vfil eject prevents mixing formats
    \def\*fixout{% TWO COLUMN OUTPUT, Fixed method
        \if L\lr                     % if column indicator is left
           \global\setbox\*lftcol=\*colbox % first column page
           \global\let\lr=R          % switch to second column
        \else                        % print page and reset column indicator
           \*page                    % format actual double column page
           \global\let\lr=L          % switch to first column
        \fi
        \ifnum\outputpenalty>-20000  % do nothing if no insert material
        \else\dosupereject\fi        % flush any held over material
        }% End, normal fixed mode two column output routine
%
    \def\*pgmat{% PAGEMAT, formats columns and rules
       \D=\the\*twcgut \D=.5\D       % split gutter width in half
       \full*pgw{\box\*lftcol        % print left column
       \hskip\D\vrule width\the\*clrw\hskip\D % gutter and rule
       \*colbox\hfil}                % print right column and fill
       }% END, pagemat
%
    \def\newpage{\par\supereject     % fills remainder of page with white
       \if R\lr \null\vfill\eject\fi}% space and goes to next page
    \let\np=\newpage
%
    \begingroup % BEGIN DOUBLE COLUMNS, fixed method
    \tolerance=6400                  % line breaking tolerance
    \hbadness=6400                   % message tolerance
    \brokenpenalty=0                 % setting these penalties to zero prevents
    \clubpenalty=0                   % strange page breaks that might otherwise
    \widowpenalty=0
    \hyphenpenalty=0
    \exhyphenpenalty=0
    \hsize=\the\*twcw                % set column width
    \let\lr=L                        % set switch to left (L) % begin with left
    \output={\*multout}              % fixed format output rou  tine
    \global\*plainfalse              % plainoutput indicator false
    \global\*dbltrue}% END FIXED TWO COLUMN FORMAT---set-up
\global\let\twc=\*fixtwc
%
\gdef\e*fixtwc{\par\supereject % END FIXED TWO COLUMN FORMAT, called
    \if R\lr \null\vfill\eject\fi    % from onecolumn
    \endgroup                        % two column fixed formatting ends
    \global\*dblfalse                % fixed double column indicator false
    \global\*plaintrue}%               plainoutput indicator true
%
\gdef\*fixthc{% BEGIN THREE COLUMNS FIXED FORMAT---set-up
    \if*plain \par\vfill\eject\fi    % new page prevents mixed formats
    \if*tpl\e*fixthc\fi              % end any active triple columns
    \if*dbl \par\vfill\eject\fi      % new page prevents mixed multicolumn formatting
%
    \def\*fixout{% THREE COLUMN OUTPUT, Fixed method
       \if L\lr                      % if column indicator is left
       \global\setbox\*lftcol=\*colbox
       \global\let\lr=M              % switch to middle column
       \else\if M\lr                 % if middle column indicator is true
          \global\setbox\*midcol=\*colbox
          \global\let\lr=R           % switch column indicator to right
             \else
                \*page               % make the page
                \global\let\lr=L     % reset column indicator to left
             \fi\fi %
        \ifnum\outputpenalty>-20000 %  no held over material
        \else\dosupereject\fi}%        eject held over insertions
%
    \def\*pgmat{% PAGEMAT, *pgmat, the page template routine
       \D=\the\*thcgut \D=.5\D       % half gutter width on each side of rule
       \full*pgw{\box\*lftcol        % print leftcolumn
                 \hskip\D\vrule width\the\*clrw\hskip\D % rule and gut.
                 \box\*midcol        % print middle column
       \if*norule \hskip2\D          % supress rule on empty page call
       \else                         % else set rules normally
          \hskip\D\vrule width\the\*clrw\hskip\D\fi % rule and gut.
          \*colbox\hfil}             %  print right column and fil
          \global\*norulefalse
       }% END, Pagemat
%
    \def\newpage{\par\supereject
       \if M\lr \null\vfill\eject
          \null\vfill\eject\global\*noruletrue\fi % supress column rules
       \if R\lr \null\vfill\eject\global\*noruletrue\fi}
    \let\np=\newpage
%
    \begingroup % BEGIN THREE COLUMNS, fixed method
    \widowpenalty=0
    \clubpenalty=0
    \brokenpenalty=0
    \hyphenpenalty=0
    \exhyphenpenalty=0
    \tolerance=9400
    \hbadness=9400
    \hsize=\the\*thcw                % column width = three column width  tokens
    \let\lr=L                        % set column switch to left column
    \output={\*multout}              % fixed format output routine
    \global\*plainfalse              % plainoutput indicator false
    \global\*tpltrue}                % end 3 col fixed format
\global\let\thc=\*fixthc             %      reset abbreviation for (thc)
%
\gdef\e*fixthc{\par\supereject       % end 3 columns fixed mode
    \if M\lr \null\vfill\eject \null\vfill\eject\fi % called from
    \if R\lr \null\vfill\eject\fi    % onecolumn
    \endgroup                        % three column fixed formatting indicator f
    \global\*tplfalse                % end triple column indicator
    \global\*plaintrue}%               plainoutput indicator true
%
\gdef\*multout{\*badj
              \*fixout
    }% end fixed format output routine
 
\gdef\onecolumn{\if*dbl\e*fixtwc\fi   % end double column formatting
               \if*tpl\e*fixthc\fi   % end triple column formatting
               \global\output={\*mkpg} % set single column output
    }%  end multiple column formatting
\global\let\oc=\onecolumn
%
\catcode`*=12 \catcode`@=3
