1 % Set of macros for making index of a book
3 % This file is public domain.
6 \immediate\openout\indexfile=
\jobname.idx
%
12 \def\indexa#1{\indexat{#1}{#1}}%
14 \long\def\indexat#1#2{{%
15 \expandafter\ifx\csname index:
#1\endcsname\relax%
21 \loop\ifnum\count9<
14348906 %
22 \multiply\count9 by
27 %
24 \edef\thisindexnum{\thisindexnum\indexnum{\the\count9}}%
27 \ifnum\count9>
14348906 %
28 \edef\thisindexnum{\thisindexnum\indexnum{\the\count9}}%
31 \multiply\count9 by
27 %
32 \advance\count9 by
\uccode`#
#1%
33 \advance\count9 by -
64 %
39 \global\expandafter\let\csname index:
#1\endcsname\thisindexnum%
41 \let\postindex\allindex%
44 \advance\count9 by
1 %
45 \if\count9=
9 \let\indexnum\gobble\fi%
47 \count9=
0 \thisindexnum%
49 \ifnum#
#1>
\count\count9 %
51 \expandafter\ifx\csname index:###
#1\endcsname\relax%
56 \xdef\allindex{\preindex{#1}\postindex}%
59 \ifnum#
#1<
\count\count9 \let\indexnum\gobble\fi%
61 \advance\count9 by
1 %
62 \if\count9=
9 \let\indexnum\gobble\fi%
65 \expandafter\ifx\csname index:#
#1\endcsname\relax%
67 \xdef\allindex{\preindex{#1}}%
69 \count9=
0 \let\indexnum\temporary \csname index:#
#1\endcsname%
71 \edef\preindex{\preindex{#
#1}}%
72 \edef\postindex{\expandafter\gobble\postindex\empty}%
75 \expandafter\next\allindex{}%
77 \let\indexentry\relax%
78 \expandafter\gdef\csname Index:
#1\endcsname{#2}%
79 \write\indexfile{\noexpand\indexentry{#1}{\the\pageno}}%
82 \long\def\eindexat#1#2{\edef\next{\noexpand\indexat{#1}{#2}}\next}%
86 \def~#
#1/
{\indexnum{#
#1}}%
87 \expandafter\xdef\csname index:
#1\endcsname{#2}%
90 \def\indexshow#1{\expandafter\show\csname index:
#1\endcsname}%
93 \expandafter\xdef\csname index:
#1\endcsname{%
94 \csname index:
#1\endcsname%
102 \immediate\closeout\indexfile%
103 \let\indexnum\gobble%
104 \let\indexpage\relax%
105 \input \jobname.idx
%
107 \ifnum\count9=#
#1 \else%
108 \ifnum\count9>
0 ,
\fi%
120 \expandafter\ifx\csname index:#
#1\endcsname\relax%
123 \indent \csname Index:#
#1\endcsname :
%
124 \count9=
0 \csname index:#
#1\endcsname.
\par%
128 \expandafter\next\allindex{}%
132 \advance\dimen0 by
\dp0 %
137 \hbox{}\hrule height
0pt depth
0pt
%
139 \advance\dimen0 by -
\pagetotal %
140 \setbox1=
\vsplit0 to
\dimen0 %
141 \setbox2=
\vsplit0 to
\dimen0 %
144 \ifdim\ht0>
0pt
\repeat%