rokicki@neon.Stanford.EDU (Tomas G. Rokicki) (05/24/91)
%
% 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