\catcode`@=11 %-*-tex-*- % Copyright Michael J. Ferguson, INRS-Telecommunications % All rights reserved. % Fix on \firstcolumnoffset 11 May 87 ... MJF % Compensate for 1 inch standard print offsets Sept. 1991 ... ugh! \newdimen \hprintoffset \newdimen \vprintoffset \hprintoffset=1in \vprintoffset=1in % Postscript version with arbitrary page scaling/rotation % ======== INRSTeX Single/Multi Column Output Routine ======== % This is the entire output routine for INRSTeX. It does both single and % Multicolumn since there is a rather large repetition to do otherwise. %====== Debugging rules ======= % These can be turned on to outline the page %\def\testhrule{\hrule} \let\testhrule = \relax %\def\testvrule{\vrule} \let\testvrule =\relax % ====== single/multicolumn output routine \def\tmessage#1{} \output{\m@ultipleoutput} \def\m@ultipleoutput{\tmessage{Multiout - ms:\the\m@ultistate- cc:\the\c@urrentcolumn - nc:\the\numcolumns} \ifcase\m@ultistate % 0 - only state where shipout allowed \addcolumn{\pagecontents}\relax \global\advance\c@urrentcolumn by 1 \relax \ifnum\c@urrentcolumn > \numcolumns \finaloutput % in normal state \fi \or \s@etuprempage % 1 - into - always go this way \or \addcolumn{\pagecontents}\relax \s@etuprempage % 2 - outof - clean up the current col and store \fi } \def\s@etuprempage{ \global\setbox\t@opmultibox = \vbox{\boxmaxdepth 0pt \offinterlineskip \ifvoid\t@opmultibox \else \unvbox\t@opmultibox \fi \ifvoid\topmulticolumnbox \else \unvbox\topmulticolumnbox\fi \ifvoid\topins \else \unvbox\topins \fi \ifcase\m@ultistate \tmessage{TeX System Error - misplaced multistate -- \the\pageno} \or \ifvoid255 \else \unvbox255 \fi % top of pag \or \ifvoid\m@ulticolumnbox \else \box\m@ulticolumnbox \fi % multicol part page \fi} \global\setbox\b@otmultibox = \vbox{ \boxmaxdepth \maxdepth \offinterlineskip \ifvoid\footins \else \vskip\skip\footins \footnoterule \unvbox\footins \fi \ifvoid\botmulticolumnbox \else \unvbox\botmulticolumnbox \fi} \ifb@alance \advance\parskip by 0pt plus 0pt minus 0pt \fi \ifnum\m@ultistate=2 \global\b@alancevsize=\vinnerpagesize \global\numcolumns = 1 \global\b@alancefalse \fi \c@omputevsize \tmessage{Rempage: ms:\the\m@ultistate- ip:\the\vinnerpagesize- hc:\the\vcolumnsize- cc:\the\c@urrentcolumn- nc:\the\numcolumns} \global\c@urrentcolumn= 1\global\m@ultistate=0 \ifnum\vcolumnsize<\multicolpageshortfall \finaloutput \fi } \def\twoperpage{\xdef\l@page{0}\def\topPS{\ifnum\l@page=0 \special{ps:: /EOP {} bdf gsave 576 0 translate 90 rotate .7 .7 scale }\else \special{ps:: /EOP {} bdf gsave 576 396 translate 90 rotate .7 .7 scale }\fi } \def\botPS{\ifnum\l@page=0 \special{ps:: grestore }\xdef\l@page{1} \else \special{ps:: grestore showpage }\xdef\l@page{0}\fi } \let\d@one=\done \def\done{\ejectpage\ifnum\l@page=1 \finalversion \fullpagestyle \line{} \fi \d@one}} \newif\ifpageps \pagepsfalse \def\topPS{\ifpageps \t@opsc \fi} \def\botPS{\ifpageps \b@otsc \fi} \def\showpage{showpage } \def\pagescale htr:#1 vtr:#2 d:#3 hsc:#4 vsc:#5 { \xdef\t@opsc{\special{ps:: /EOP {} bdf gsave #1 #2 translate #3 rotate #4 #5 scale }} \xdef\b@otsc{\special{ps:: grestore \showpage }}\global\pagepstrue } \def\finaloutput{\shipout \hbox{\topPS\leftmarginskip \hskip -\hprintoffset \vbox to \vpapersize{\offinterlineskip % but boxes together \vskip -\vprintoffset \topmarginskip\testhrule \m@akeheadertext\testhrule \hbox{\hskip \firstcolumnoffset \relax \pagebody}\testhrule \m@akefootertext\testhrule \vfill \ifproofmode \vbox to 0pt{\boxmaxdepth 0pt \vss \hbox{\qquad \versionform}} \fi \vfill \vss}\botPS} \tmessage{Final Out: ms:\the\m@ultistate- cc:\the\c@urrentcolumn- nc:\the\numcolumns} \ifp@agenoadv \advancepageno \fi \global\p@agenoadvtrue \global\h@eadertype=\d@ocumentheader % default header style \global\f@ootertype=\d@ocumentfooter % default footer style \c@omputevsize \ifb@alance \advance\parskip by 0pt plus 0pt minus 0pt \fi \ifnum\outputpenalty>-\@MM \else\dosupereject\fi \global\c@urrentcolumn = 1 \global\m@ultistate=0} \def\addcolumn#1{\tmessage{addcol: ms:\the\m@ultistate- cc:\the\c@urrentcolumn- nc:\the\numcolumns} \global\setbox\m@ulticolumnbox = \hbox{\ifvoid\m@ulticolumnbox \else\unhbox\m@ulticolumnbox\the\intercolumnsep \fi \testvrule\hbox to \hcolumnsize{\vbox to \vcolumnsize{\boxmaxdepth\maxdepth #1}\hss}\testvrule} } \newbox\i@nnerpagebox \def\pagebody{\setbox\i@nnerpagebox = \vbox to\vinnerpagesize{\boxmaxdepth\maxdepth\offinterlineskip \ifvoid\t@opmultibox \else\unvbox\t@opmultibox \fi \ifvoid\m@ulticolumnbox \else\box\m@ulticolumnbox \fi \ifvoid\b@otmultibox\else\unvbox\b@otmultibox \fi}\relax \setbox2= \vbox to \vinnerpagesize{\hsize\h@marginboxsize \vskip 1cm \unvbox\m@arginbox \vss}\relax \hbox{\box\i@nnerpagebox\box2}} \def\pagecontents{\ifvoid\topins\else\unvbox\topins\fi \unvbox\@cclv % open up \box255 \ifvoid\footins\else % footnote info is present \vfill \vskip\skip\footins \footnoterule \unvbox\footins\fi \ifr@ggedbottom\vfil\fi} \def\footnoterule{\kern-3\p@ \hrule width .2\hcolumnsize \kern 2.6\p@} % the \hrule is .4pt high