%
%   Either:
%      \address 3
%
%   then enter three addresses, blank lines between them, or
%
%      \faddress foo.tex
%
%   where foo.tex contains a bunch of labels, with blank lines between them.
%
%   Make sure to use \done to exit, rather than \bye.
%
\hsize=8.25truein\hoffset=-0.875truein
\vsize=11truein\voffset=-1.0truein
\nopagenumbers\raggedbottom\offinterlineskip
%
\newdimen\vlsize\newdimen\hlsize
\vlsize=1.56truein
\hlsize=2.75truein
%
\font\huge=cmbx12 scaled\magstep 4
\font\notsohuge=cmbx10 scaled\magstep3
\font\bigtt=cmtt10 scaled 1200
\font\lbls=cmbx10 scaled\magstephalf
\font\hugelogo=logobf10 scaled\magstep 5
\def\hugeMF{{\hugelogo METAFONT}}
%
\def\prompt{\immediate\write0{\noexpand\address\noexpand\faddress\noexpand\done}
   \immediate\write0{<\number\labcount> Total Labels}}
%
\newcount\n
\def\dotimes #1 #2{\n=#1
   \loop
      #2
   \advance\n by -1
   \ifnum\n>0\repeat}
%
\let\LMR=L
\newbox\leftbox
\newbox\midbox
\newcount\labcount
\labcount=0
\def\ship#1{\if L\LMR
      \global\setbox\leftbox=#1 \global\let\LMR=M
   \else\if M\LMR
      \global\setbox\midbox=#1 \global\let\LMR=R
   \else
      \line{\box\leftbox\hss\box\midbox\hss #1} \global\let\LMR=L
   \fi\fi
   \global\advance\labcount by1}
%
\def\emptybox{\vbox to \vlsize{\hsize=\hlsize\vfill\centerline{\strut}}}
\def\done{\if M\LMR \ship\emptybox\ship\emptybox
   \else\if R\LMR \ship\emptybox
   \fi\fi\vfill\eject\end}
%
\def\oninterlineskip{\baselineskip=12pt\lineskip=1pt\lineskiplimit=0pt}
%
\newif\ifok
\def\blankline{\par}
\newif\ifcont
%
\newdimen\maxadsize
\maxadsize=2.6truein
\newbox\addbox
\def\makeadd{\vbox{\oninterlineskip
   \loop
      \read0 to\add
      \ifx\add\blankline
         \global\contfalse
      \else
         \global\conttrue
      \fi
      \ifcont
         \setbox\addbox=\hbox{\add}
         \ifdim\maxadsize<\wd\addbox
            \message{Line too wide!}
         \else
            \box\addbox
         \fi
   \repeat}}
%
\def\address #1 {\dotimes #1
   {\ship{\vbox to \vlsize{\hsize=\hlsize
       \oninterlineskip
       \lbls
       \vss\hbox to\hlsize{\hss
          \makeadd
       \hss}\vss}}}
   \prompt}
%
\newread\filein
\def\fakeadd{\vbox{\oninterlineskip
   \loop
      \read\filein to\add
      \ifx\add\blankline
         \global\contfalse
      \else
         \global\conttrue
      \fi
      \ifcont
         \setbox\addbox=\hbox{\add}
         \ifdim\maxadsize<\wd\addbox
            \message{\add: }
            \message{Line too wide!}
         \else
            \box\addbox
         \fi
   \repeat}}
%
\newif\ifstillokay
\def\dofadds{
   \loop
      \ship{\vbox to \vlsize{\hsize=\hlsize
         \oninterlineskip
         \lbls
         \vss\hbox to\hlsize{\hss\fakeadd\hss}
      \vss}}
      \ifeof\filein
         \stillokayfalse
      \else
         \stillokaytrue
      \fi
      \ifstillokay
   \repeat
   \closein\filein}
%
\def\faddress #1 {
   \openin\filein=#1
   \ifeof\filein
      \message{#1: File not found}
   \else
      \dofadds
   \fi
   \prompt}
%
\prompt

.
