summaryrefslogtreecommitdiff
path: root/macros/plain/contrib/misc/label.tex
blob: 7e21962e0a7e9c3f21f1195e52dcb92e7beb05a0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
%
%   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