summaryrefslogtreecommitdiff
path: root/indexing/makeindex
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /indexing/makeindex
Initial commit
Diffstat (limited to 'indexing/makeindex')
-rw-r--r--indexing/makeindex/ACK17
-rw-r--r--indexing/makeindex/CONTRIB24
-rw-r--r--indexing/makeindex/COPYING42
-rw-r--r--indexing/makeindex/FILES38
-rw-r--r--indexing/makeindex/PORTING11
-rw-r--r--indexing/makeindex/README160
-rw-r--r--indexing/makeindex/auto26
-rw-r--r--indexing/makeindex/doc/Makefile127
-rw-r--r--indexing/makeindex/doc/deblank.awk14
-rw-r--r--indexing/makeindex/doc/makeindex.dvibin0 -> 21840 bytes
-rw-r--r--indexing/makeindex/doc/makeindex.hlp1056
-rw-r--r--indexing/makeindex/doc/makeindex.info1172
-rw-r--r--indexing/makeindex/doc/makeindex.l1204
-rw-r--r--indexing/makeindex/doc/makeindex.l.orig1167
-rw-r--r--indexing/makeindex/doc/makeindex.pdfbin0 -> 82528 bytes
-rw-r--r--indexing/makeindex/doc/makeindex.ps4885
-rw-r--r--indexing/makeindex/doc/makeindex.tex475
-rw-r--r--indexing/makeindex/doc/makeindex.vms812
-rw-r--r--indexing/makeindex/doc/manpages.dvibin0 -> 39164 bytes
-rw-r--r--indexing/makeindex/ist/din.ist45
-rw-r--r--indexing/makeindex/ist/icase.ist44
-rw-r--r--indexing/makeindex/ist/latex.ist20
-rw-r--r--indexing/makeindex/ist/math.ist97
-rw-r--r--indexing/makeindex/ist/mkind.ist32
-rw-r--r--indexing/makeindex/ist/puncts.ist57
-rw-r--r--indexing/makeindex/ist/tex.ist33
-rw-r--r--indexing/makeindex/lib/idxmac-amstex.tex323
-rw-r--r--indexing/makeindex/lib/idxmac.tex200
-rw-r--r--indexing/makeindex/lib/makeidx.doc9
-rw-r--r--indexing/makeindex/lib/makeidx.sty5
-rw-r--r--indexing/makeindex/lib/showidx.sty41
-rw-r--r--indexing/makeindex/paper/Makefile17
-rw-r--r--indexing/makeindex/paper/README26
-rw-r--r--indexing/makeindex/paper/fig1.ps252
-rw-r--r--indexing/makeindex/paper/fig1.tex65
-rw-r--r--indexing/makeindex/paper/ind.bbl147
-rw-r--r--indexing/makeindex/paper/ind.pdfbin0 -> 139034 bytes
-rw-r--r--indexing/makeindex/paper/ind.tex1245
-rw-r--r--indexing/makeindex/paper/indminus.tex1
-rw-r--r--indexing/makeindex/paper/indplus.tex23
-rw-r--r--indexing/makeindex/paper/logo.tex126
-rw-r--r--indexing/makeindex/paper/regmar.sty44
-rw-r--r--indexing/makeindex/paper/undhead.sty6
-rw-r--r--indexing/makeindex/src/LOG554
-rw-r--r--indexing/makeindex/src/Makefile357
-rw-r--r--indexing/makeindex/src/NOTES84
-rw-r--r--indexing/makeindex/src/RCS/README,v302
-rw-r--r--indexing/makeindex/src/RCS/mkind.h,v812
-rw-r--r--indexing/makeindex/src/README263
-rw-r--r--indexing/makeindex/src/genind.c477
-rw-r--r--indexing/makeindex/src/genind.h73
-rw-r--r--indexing/makeindex/src/make-kcc.mic13
-rw-r--r--indexing/makeindex/src/make-lc.bat9
-rw-r--r--indexing/makeindex/src/make-msc.bat7
-rw-r--r--indexing/makeindex/src/make-pcc.mic13
-rw-r--r--indexing/makeindex/src/make-tcc.bat7
-rw-r--r--indexing/makeindex/src/make-vms.com10
-rw-r--r--indexing/makeindex/src/makefile.bsd141
-rw-r--r--indexing/makeindex/src/makefile.kcc123
-rw-r--r--indexing/makeindex/src/makefile.lc139
-rw-r--r--indexing/makeindex/src/makefile.msc144
-rw-r--r--indexing/makeindex/src/makefile.os2138
-rw-r--r--indexing/makeindex/src/makefile.pcc124
-rw-r--r--indexing/makeindex/src/makefile.tcc146
-rw-r--r--indexing/makeindex/src/makefile.usg134
-rw-r--r--indexing/makeindex/src/makefile.vms124
-rw-r--r--indexing/makeindex/src/makeindx.def2
-rw-r--r--indexing/makeindex/src/mkind.c720
-rw-r--r--indexing/makeindex/src/mkind.h757
-rw-r--r--indexing/makeindex/src/qsort.c222
-rw-r--r--indexing/makeindex/src/scanid.c830
-rw-r--r--indexing/makeindex/src/scanid.h170
-rw-r--r--indexing/makeindex/src/scanst.c616
-rw-r--r--indexing/makeindex/src/scanst.h232
-rw-r--r--indexing/makeindex/src/sortid.c360
-rw-r--r--indexing/makeindex/test/Makefile81
-rw-r--r--indexing/makeindex/test/b209a.idx5
-rw-r--r--indexing/makeindex/test/b209a.ilg6
-rw-r--r--indexing/makeindex/test/b209a.ind5
-rw-r--r--indexing/makeindex/test/b209b.idx5
-rw-r--r--indexing/makeindex/test/b209b.ilg6
-rw-r--r--indexing/makeindex/test/b209b.ind13
-rw-r--r--indexing/makeindex/test/b209c.idx5
-rw-r--r--indexing/makeindex/test/b209c.ilg6
-rw-r--r--indexing/makeindex/test/b209c.ind13
-rw-r--r--indexing/makeindex/test/b209d.idx5
-rw-r--r--indexing/makeindex/test/b209e.idx85
-rw-r--r--indexing/makeindex/test/b209f.idx76
-rw-r--r--indexing/makeindex/test/b210a.idx12
-rw-r--r--indexing/makeindex/test/b210a.ist10
-rw-r--r--indexing/makeindex/test/b211a.idx13
-rw-r--r--indexing/makeindex/test/b211b.idx23
-rw-r--r--indexing/makeindex/test/b211b.ist2
-rw-r--r--indexing/makeindex/test/b211c.idx12
-rw-r--r--indexing/makeindex/test/b211c.ist10
-rw-r--r--indexing/makeindex/test/b211d.idx4
-rw-r--r--indexing/makeindex/test/b211e.idx257
-rw-r--r--indexing/makeindex/test/b211e.ltx13
-rw-r--r--indexing/makeindex/test/b211f.idx4
-rw-r--r--indexing/makeindex/test/b211g.idx39
-rw-r--r--indexing/makeindex/test/b211h.idx256
-rw-r--r--indexing/makeindex/test/b211h.ltx13
-rw-r--r--indexing/makeindex/test/book.idx4241
-rw-r--r--indexing/makeindex/test/dosdiff.bat138
-rw-r--r--indexing/makeindex/test/foo.bat138
-rw-r--r--indexing/makeindex/test/ok-b209a.ilg6
-rw-r--r--indexing/makeindex/test/ok-b209a.ind5
-rw-r--r--indexing/makeindex/test/ok-b209b.ilg6
-rw-r--r--indexing/makeindex/test/ok-b209b.ind13
-rw-r--r--indexing/makeindex/test/ok-b209c.ilg6
-rw-r--r--indexing/makeindex/test/ok-b209c.ind13
-rw-r--r--indexing/makeindex/test/ok-b209d.ilg6
-rw-r--r--indexing/makeindex/test/ok-b209d.ind13
-rw-r--r--indexing/makeindex/test/ok-b209e.ilg15
-rw-r--r--indexing/makeindex/test/ok-b209e.ind30
-rw-r--r--indexing/makeindex/test/ok-b209f.ilg6
-rw-r--r--indexing/makeindex/test/ok-b209f.ind116
-rw-r--r--indexing/makeindex/test/ok-b210a.ilg7
-rw-r--r--indexing/makeindex/test/ok-b210a.ind21
-rw-r--r--indexing/makeindex/test/ok-b211a.ilg11
-rw-r--r--indexing/makeindex/test/ok-b211a.ind34
-rw-r--r--indexing/makeindex/test/ok-b211b.ilg7
-rw-r--r--indexing/makeindex/test/ok-b211b.ind45
-rw-r--r--indexing/makeindex/test/ok-b211c.ilg7
-rw-r--r--indexing/makeindex/test/ok-b211c.ind21
-rw-r--r--indexing/makeindex/test/ok-b211d.ilg6
-rw-r--r--indexing/makeindex/test/ok-b211d.ind5
-rw-r--r--indexing/makeindex/test/ok-b211e.ilg6
-rw-r--r--indexing/makeindex/test/ok-b211e.ind823
-rw-r--r--indexing/makeindex/test/ok-b211f.ilg6
-rw-r--r--indexing/makeindex/test/ok-b211f.ind5
-rw-r--r--indexing/makeindex/test/ok-b211g.ilg39
-rw-r--r--indexing/makeindex/test/ok-b211g.ind43
-rw-r--r--indexing/makeindex/test/ok-b211h.ilg6
-rw-r--r--indexing/makeindex/test/ok-b211h.ind819
-rw-r--r--indexing/makeindex/test/ok-book.ilg6
-rw-r--r--indexing/makeindex/test/ok-book.ind785
-rw-r--r--indexing/makeindex/test/ok-test.ilg9
-rw-r--r--indexing/makeindex/test/ok-test.ind164
-rw-r--r--indexing/makeindex/test/ok-test.tex686
-rw-r--r--indexing/makeindex/test/ok-tort.ilg47
-rw-r--r--indexing/makeindex/test/ok-tort.ind24
-rw-r--r--indexing/makeindex/test/test.idx125
-rw-r--r--indexing/makeindex/test/test.tex686
-rw-r--r--indexing/makeindex/test/tort.idx44
-rw-r--r--indexing/makeindex/test/vmsdiff.com137
-rw-r--r--indexing/makeindex/troff/ixmac6
-rw-r--r--indexing/makeindex/troff/makeind23
-rw-r--r--indexing/makeindex/troff/sample.idx4
-rw-r--r--indexing/makeindex/troff/sample.ilg7
-rw-r--r--indexing/makeindex/troff/sample.ind72
-rw-r--r--indexing/makeindex/troff/sample.txt14
-rw-r--r--indexing/makeindex/troff/troff.ist54
153 files changed, 32726 insertions, 0 deletions
diff --git a/indexing/makeindex/ACK b/indexing/makeindex/ACK
new file mode 100644
index 0000000000..870339c54b
--- /dev/null
+++ b/indexing/makeindex/ACK
@@ -0,0 +1,17 @@
+ Acknowledgements
+
+The author would like to thank the copyright holders for agreeing to
+release MakeIndex to the public domain and for allowing the author to
+continue his support for this software.
+
+The author would also like to express his gratitude to the users of
+MakeIndex for reporting bugs, and in many instances, for fixing them.
+In particular, thanks must go to the contributors who have made
+substantial contributions to the MakeIndex software. Their names are
+listed in the CONTRIB file which comes with this release.
+
+
+
+ Pehong Chen
+ 11/11/1989
+
diff --git a/indexing/makeindex/CONTRIB b/indexing/makeindex/CONTRIB
new file mode 100644
index 0000000000..a6ff1918ac
--- /dev/null
+++ b/indexing/makeindex/CONTRIB
@@ -0,0 +1,24 @@
+Key contributors of this MakeIndex distribution include
+
+ Pehong Chen chen@renoir.berkeley.edu
+ Leslie Lamport lamport@src.dec.com
+
+and, in reverse alphabetical order by last name,
+
+ Klaus Zuenkler kl%falke@ztivax.siemens.com
+ Martha Wershofen-Mersbach grztex%dbngmd21.bitnet@net.bio.net
+ Art Werschulz werschulz@cs.columbia.edu
+ Ed Sznyter ews@pescadero.stanford.edu
+ Joachim Schrod schrod@iti.informatik.th-darmstadt.de
+ Rainer Schoepf schoepf@sc.zib-berlin.de
+ Rick Rodgers rodgers@maxwell.mmwb.ucsf.edu
+ Sebastian Rahtz spqr@ecs.southampton.ac.uk
+ Eberhard Mattes mattes@azu.informatik.uni-stuttgart.de
+ Charles Karney karney%ppc.mfenet@nmfecc.arpa
+ Mark James mark@bdblues.altair.fr
+ Anita Hoover anita@brahms.udel.edu
+ Michael Harrison harrison@berkeley.edu
+ Baron Grey baron@cs.ucla.edu
+ Andreas Brosig brosig@gmdzi.gmd.de
+ Johannes Braams braams@hlsdnl5.bitnet
+ Nelson Beebe beebe@math.utah.edu
diff --git a/indexing/makeindex/COPYING b/indexing/makeindex/COPYING
new file mode 100644
index 0000000000..20c03550f3
--- /dev/null
+++ b/indexing/makeindex/COPYING
@@ -0,0 +1,42 @@
+
+ MakeIndex Distribution Notice
+
+ 11/11/1989
+
+ Copyright (C) 1989 by Chen & Harrison International Systems, Inc.
+ Copyright (C) 1988 by Olivetti Research Center
+ Copyright (C) 1987 by Regents of the University of California
+
+ Author:
+ Pehong Chen (phc@renoir.berkeley.edu)
+ Chen & Harrison International Systems, Inc.
+ Palo Alto, California
+ USA
+
+Permission is hereby granted to make and distribute original copies of
+this program provided that the copyright notice and this permission
+notice are preserved and provided that the recipient is not asked to
+waive or limit his right to redistribute copies as allowed by this
+permission notice and provided that anyone who receives an executable
+form of this program is granted access to a machine-readable form of
+the source code for this program at a cost not greater than reasonable
+reproduction, shipping, and handling costs. Executable forms of this
+program distributed without the source code must be accompanied by a
+conspicuous copy of this permission notice and a statement that tells
+the recipient how to obtain the source code.
+
+Permission is granted to distribute modified versions of all or part
+of this program under the conditions above with the additional
+requirement that the entire modified work must be covered by a
+permission notice identical to this permission notice. Anything
+distributed with and usable only in conjunction with something derived
+from this program, whose useful purpose is to extend or adapt or add
+capabilities to this program, is to be considered a modified version
+of this program under the requirement above. Ports of this program to
+other systems not supported in the distribution are also considered
+modified versions. All modified versions should be reported back to
+the author.
+
+This program is distributed with no warranty of any sort. No
+contributor accepts responsibility for the consequences of using this
+program or for whether it serves any particular purpose.
diff --git a/indexing/makeindex/FILES b/indexing/makeindex/FILES
new file mode 100644
index 0000000000..c683e53ee0
--- /dev/null
+++ b/indexing/makeindex/FILES
@@ -0,0 +1,38 @@
+ ----- Files sent under Automatic Mail Distribution -----
+
+ Copyright (C) 1989 by Chen & Harrison International Systems, Inc.
+ Copyright (C) 1988 by Olivetti Research Center
+ Copyright (C) 1987 by Regents of the University of California
+
+If you receive MakeIndex by ftp or from any distribution tape, you can
+ignore this file because you should have the complete version. This
+file explains what you should receive by mail on a file by file basis.
+There is a shell script that will send the files listed below to you
+automatically. This facility is intended for people with no access to
+other distribution channels.
+
+What follows is a subset of the current MakeIndex distribution. It
+contains the following files for important info about MakeIndex:
+
+FILES README CONTRIB ACK COPYING PORTING
+
+This distribution includes the file test.tex, which is a documentation
+written by Leslie Lamport on the use of MakeIndex with LaTeX. Nelson
+Beebe added index terms to the document, so that you can try out
+MakeIndex with the test.idx file generated by running LaTeX on
+test.tex. Also included is makeindex.l, which is a UNIX man page on
+the general use of MakeIndex.
+
+You should also receice the following files, which comprise the full
+MakeIndex source directory.
+
+ Makefile.kcc Makefile.vms mkind.c scanid.h
+ Makefile.msc VMSmake.com mkind.h scanst.c
+LOG Makefile.pcc genind.c qsort.c scanst.h
+Makefile Makefile.unx genind.h scanid.c sortid.c
+
+Altogether, you should receive 26 messages, each containing one file,
+from this automatic mail distribution of MakeIndex.
+
+ Pehong Chen
+ 10/11/1989
diff --git a/indexing/makeindex/PORTING b/indexing/makeindex/PORTING
new file mode 100644
index 0000000000..2f6daaf653
--- /dev/null
+++ b/indexing/makeindex/PORTING
@@ -0,0 +1,11 @@
+ ----- MakeIndex Porting Note -----
+
+You are welcome and encouraged to port MakeIndex to any system not
+support under the current distribution. The standard way of doing
+that is by adding patches with enclosed #ifdef ... #endif pairs. You
+can invent your own variables with the OS_ prefix attached in the
+front. Please report your port back to me, so that I can make it
+available to other people.
+
+ Pehong Chen
+ 11/11/1989
diff --git a/indexing/makeindex/README b/indexing/makeindex/README
new file mode 100644
index 0000000000..0ae677040f
--- /dev/null
+++ b/indexing/makeindex/README
@@ -0,0 +1,160 @@
+------------------------------------------------------------------------------
+ MakeIndex General Release Information
+
+ Copyright (C) 1989 by Chen & Harrison International Systems, Inc.
+ Copyright (C) 1988 by Olivetti Research Center
+ Copyright (C) 1987 by Regents of the University of California
+
+ Author: Pehong Chen
+
+MakeIndex is a general purpose index processor. This release contains
+a FILES file, this README file, a CONTRIB file, an ACK file, a COPYING
+notice, a brief PORTING instruction, a doc directory, a paper
+directory, a src directory, a lib directory, and a test directory.
+
+------------------------------------------------------------------------------
+Everyone should read COPYING before installing or distributing MakeIndex.
+
+------------------------------------------------------------------------------
+The CONTRIB file lists the names of people who have contributed to
+to this release.
+
+------------------------------------------------------------------------------
+The ACK file contains the author's acknowledgements.
+
+------------------------------------------------------------------------------
+FILES is a note to people receiving MakeIndex from the automatic mail
+distribution, which is done by the shell script "auto".
+
+------------------------------------------------------------------------------
+PORTING contains some information for people interested in porting
+MakeIndex to systems not supported under the current distribution.
+
+------------------------------------------------------------------------------
+The doc directory contains
+
+deblank.awk AWK script used in the Makefile steps
+
+makeindex.hlp ASCII version of makeindex.l
+
+makeindex.info an Emacs (TOPS-20 and GNU) INFO node produced
+ automatically from makeindex.vms by vmshelp2
+ (available from Utah)
+
+makeindex.l a UNIX man page
+
+makeindex.ps PostScript translation of makeindex.l
+
+makeindex.tex documentation for the use under LaTeX
+ by Leslie Lamport
+
+makeindex.vms VAX/VMS equivalent of makeindex.l suitable
+ for inclusion in a local help library
+
+------------------------------------------------------------------------------
+For a detailed discussion on the design of MakeIndex, please read
+
+ Pehong Chen and Michael Harrison, ``Automating Index Preparation'',
+ Tech. Report No. 87/347, Computer Science Division,
+ University of California, Berkeley, March 1987.
+
+A version of this report is included in the paper directory. A
+somewhat condensed version entitled
+
+ ``Index Preparation and Processing''
+
+appears in Software: Practice and Experience, 18(9):897-915, September 1988.
+
+------------------------------------------------------------------------------
+
+The src directory contains the C source of MakeIndex. This current
+version is known to compile and run on UNIX (BSD and System V, cc and
+gcc), VAX/VMS (VMS cc), TOPS-20 (kcc-20 and pcc-20), and IBM PC DOS
+(Microsoft C Version 5.0, Turbo C Version 2.0), Atari ST, Siemens
+BS2000 (CCD-2000), and IBM MVS/XA (IBM-C370). Consult the files
+README and LOG in the src directory for further details.
+
+Type make to compile under BSD UNIX. Makefiles or command scripts for
+the other operating systems are included as well. Implementations of
+Make for them are available as part of the Utah DVI driver
+distribution (send e-mail to beebe@math.utah.edu).
+
+Early porting work was carried out by Charles Karney
+(karney%ppc.mfenet@nmfecc.arpa) at Princeton University and David J.
+Buerger (dbeurger%scu.bitnet@jade.berkeley.edu) at University of Santa
+Clara. These efforts were independent of the port to PC DOS, TOPS-20,
+VAX VMS, and the draft-ANSI C environment for version 2.3 carried out
+by Nelson H.F. Beebe (beebe@math.utah.edu). That port is described
+in the file LOG in the src directory.
+
+------------------------------------------------------------------------------
+The lib directory contains the file idxmac.tex, which is an excerpt of
+LaTeX's macros for indexing. This file can be included in plain TeX
+documents to generate the .idx file. Similarly, the file
+idxmac-amstex.tex can be used with AmSTeX. Some hacking may be
+necessary to incorporate it with other dialects. Some people have
+complained not having the LaTeX sty file mentioned in
+doc/makeindex.tex in their library, so a copy of makeidx.sty and
+makeidx.doc is also included in the lib directory.
+
+The file showidx.sty provides a LaTeX document style option that
+records index references on each page in marginal notes; this
+facilitates checking that important phrases have been indexed, without
+the need to continually consult the index.
+
+------------------------------------------------------------------------------
+The test directory contains several sets of test files:
+
+b209*.idx Miscellaneous tests that uncovered bugs at
+ makeindex version 2.09 which were fixed for
+ version 2.10.
+
+book.idx Raw index generated from ``The Technology War'',
+ David Brandin and Michael Harrison,
+ John Wiley and Sons, New York, 1988.
+
+tort.idx a host of odd raw index entries
+
+test.tex, test.idx a version of doc/makeindex.tex (due to Leslie
+ Lamport) that incorporates index entries
+ (prepared by Nelson Beebe).
+ This can be used both to test MakeIndex, as well as to
+ illustrate the production of an index for new users.
+ Read src/README for more info.
+
+ok-*.inx, ok-*.ilg Correct output for files without the ok- prefix.
+
+Makefile UNIX makefile to run regression tests on
+ ../src/makeindex
+
+vmsdiff.com VAX VMS command file to run differences; its
+ definition of the symbol MAKEINDEX must be
+ adapted for each site, since VAX VMS foreign
+ command symbols require an absolute file
+ directory name.
+
+------------------------------------------------------------------------------
+The troff directory contains
+
+troff.ist a sample style file
+ixmac defines macros to be used for indexing under troff
+sample.txt a sample troff document with embedded index commands
+sample.idx raw index file
+sample.ind the pre-formatted index file
+makeind a shell script that creates the raw index file (.idx),
+ invokes makeindex which creates the final index file
+ (.ind). Note that
+ makeind sample.txt
+ will create sample.idx, sample.ilg, and sample.ind.
+
+------------------------------------------------------------------------------
+ Pehong Chen
+ 11-Nov-1989
+
+ Nelson H.F. Beebe
+ 28-Jan-1988, 05-Jul-1991
+
+ Joachim Schrod
+ 21-Jun-1990
+
+------------------------------------------------------------------------------
diff --git a/indexing/makeindex/auto b/indexing/makeindex/auto
new file mode 100644
index 0000000000..fe52db4bed
--- /dev/null
+++ b/indexing/makeindex/auto
@@ -0,0 +1,26 @@
+#!/bin/sh
+
+req=$*
+
+for i in FILES ACK CONTRIB COPYING PORTING README
+do
+ mail -s $i $req < $i
+ echo "Done sending $i to $req."
+done
+
+cd ./test
+i=test.tex
+mail -s $i $req < $i
+echo "Done sending $i to $req."
+
+cd ../doc
+i=makeindex.l
+mail -s $i $req < $i
+echo "Done sending $i to $req."
+
+cd ../src
+for i in *
+do
+ mail -s $i $req < $i
+ echo "Done sending $i to $req."
+done
diff --git a/indexing/makeindex/doc/Makefile b/indexing/makeindex/doc/Makefile
new file mode 100644
index 0000000000..4a6cf8dd1d
--- /dev/null
+++ b/indexing/makeindex/doc/Makefile
@@ -0,0 +1,127 @@
+#=======================================================================
+# Make auxiliary documentation using nroff and LaTeX. makeindex.l is
+# the nroff/troff input file for the UNIX manual pages. From it, we
+# produce:
+# makeindex.hlp (printable ASCII help file),
+# makeindex.info (GNU Emacs INFO node file),
+# makeindex.ps (PostScript version of typeset manual pages), and
+# makeindex.vms (VAX VMS hierarchical help file),
+# manpages.dvi (.dvi file of manual pages)
+#
+# Targets:
+# all
+# clean
+# clobber
+# distclean
+# install
+# makeindex.dvi
+# makeindex.hlp
+# makeindex.ps
+# makeindex.info
+# makeindex.vms
+# manpages.dvi
+# mostlyclean
+# realclean
+# reallyclean
+# uninstall
+#
+# [26-May-1993] -- update for 2.12beta release (add GNU Project
+# standard targets)
+# [15-Aug-1991]
+#=======================================================================
+
+CATDIR = $(MANTOP)/cat1
+CP = cp
+LATEX = latex
+MANTOP = /usr/local/man
+MANDIR = $(MANTOP)/man1
+MANEXT = 1
+RM = /bin/rm -f
+SHELL = /bin/sh
+
+all: makeindex.dvi makeindex.hlp makeindex.info makeindex.ps \
+ makeindex.vms manpages.dvi
+
+clean mostlyclean:
+ $(RM) *~
+ $(RM) \#*
+ $(RM) core
+ $(RM) makeindex.aux
+ $(RM) makeindex.dvi
+ $(RM) makeindex.log
+
+clobber distclean realclean reallyclean: clean
+ $(RM) makeindex.hlp
+ $(RM) makeindex.info
+ $(RM) makeindex.ps
+ $(RM) makeindex.vms
+ $(RM) manpages.dvi
+
+install: uninstall
+ $(CP) makeindex.l $(MANDIR)/makeindex.$(MANEXT)
+ chmod 774 $(MANDIR)/makeindex.$(MANEXT)
+
+makeindex.dvi: makeindex.tex
+ $(LATEX) makeindex.tex
+ $(LATEX) makeindex.tex
+
+makeindex.hlp: makeindex.l
+ nroff -man makeindex.l | col -b >makeindex.hlp
+
+# ======================================================================
+# NB: The vmshelp* and uhelp* convertors are available for anonymous ftp
+# on math.utah.edu from ~ftp/pub/tex/pub/info or via e-mail from the
+# tuglib server with requests "help" and "send index from
+# ftp/pub/tex/pub/info"
+# ======================================================================
+makeindex.info: makeindex.vms
+ vmshelp2 makeindex.vms >makeindex.info
+
+makeindex.ps: makeindex.l
+# To convert a manual page to PostScript:
+# on BSD: tbl | eqn | ditroff -man | psdit | psrev
+# on AIX: tbl | eqn | psroff -t -man | psrev
+# Omit psrev if your printer stacks pages face down.
+# tbl and eqn are not required for makeindex.l.
+# This pipeline is hidden in a private script:
+ man2ps <makeindex.l >makeindex.ps
+
+# Reduce makeindex.hlp to makeindex.vms with the help of sed and awk.
+# Alas, the output of nroff recorded in makeindex.hlp is somewhat
+# system dependent. The sed patterns here suffice for SunOS 4.1.1
+# and IBM RS/6000 AIX 3.1, but may require modifications on other
+# UNIX systems.
+
+makeindex.vms: makeindex.hlp
+ echo '1 MAKEINDEX' >makeindex.vms
+ expand < makeindex.hlp | \
+ sed -e '/^ *MAKEINDEX(1L).*MAKEINDEX(1L)/d' \
+ -e '/^ *Page.*(printed.*)/d' \
+ -e '/^Sun Release [0-9]/d' \
+ -e 's/^ *INPUT STYLE SPECIFIERS/3 INPUT STYLE SPECIFIERS/' \
+ -e 's/^ *OUTPUT STYLE SPECIFIERS/3 OUTPUT STYLE SPECIFIERS/' \
+ -e 's/^ *TeX EXAMPLE/3 TeX EXAMPLE/' \
+ -e 's/^ *TROFF EXAMPLE/3 TROFF EXAMPLE/' \
+ -e 's/^ *CREATING THE INDEX FILE/3 CREATING THE INDEX FILE/' \
+ -e 's/^ *COMPLETING THE INDEX/3 COMPLETING THE INDEX/' \
+ -e 's/^ / /' \
+ -e 's/^ \([A-Z][A-Z /]*\)$$/2 \1/' \
+ -e 's/^\([A-Z][A-Z /]*\)$$/2 \1/' |\
+ awk -f deblank.awk >> makeindex.vms
+
+# We create a .dvi file for the manual pages under a different name to
+# avoid a collision with makeindex.dvi. GNU groff works quite nicely,
+# and gives us a .dvi file that anyone can process, even if they do not
+# have a PostScript printer. groff's font selection is a bit unusual;
+# it wants a few Computer Modern fonts in magnifications 0.8 and 0.9.
+# For manpages.dvi, it needs these additional font files: cmbx10.240pk
+# cmbx10.270pk cmcsc10.240pk cmcsc10.270pk cmr10.240pk cmr10.270pk
+# cmti10.240pk cmti10.270pk. If your DVI driver can substitute a nearby
+# size, you should be able to manage without them.
+manpages.dvi: makeindex.l
+ groff -Tdvi -man makeindex.l >manpages.dvi
+
+uninstall:
+ if [ -f $(CATDIR)/makeindex.1 ] ; then $(RM) $(CATDIR)/makeindex.1 ; fi
+ if [ -f $(MANDIR)/makeindex.1 ] ; then $(RM) $(MANDIR)/makeindex.1 ; fi
+
diff --git a/indexing/makeindex/doc/deblank.awk b/indexing/makeindex/doc/deblank.awk
new file mode 100644
index 0000000000..3b48f325ce
--- /dev/null
+++ b/indexing/makeindex/doc/deblank.awk
@@ -0,0 +1,14 @@
+# /u/beebe/tex/makeindex/2-10/makeindex/doc/deblank.awk, Sat Jul 6 12:06:09 1991
+# Edit by Nelson H. F. Beebe <beebe@rios.math.utah.edu>
+# ========================================================================
+# Reduce consecutive blank lines to single blank line.
+# Usage:
+# awk -f deblank.awk <infile >outfile
+# [06-Jul-1991]
+# ========================================================================
+NF == 0 { nb++ }
+
+NF > 0 { if (nb > 0) print "";
+ nb = 0;
+ print $0;
+ }
diff --git a/indexing/makeindex/doc/makeindex.dvi b/indexing/makeindex/doc/makeindex.dvi
new file mode 100644
index 0000000000..fada476cfc
--- /dev/null
+++ b/indexing/makeindex/doc/makeindex.dvi
Binary files differ
diff --git a/indexing/makeindex/doc/makeindex.hlp b/indexing/makeindex/doc/makeindex.hlp
new file mode 100644
index 0000000000..51626e8096
--- /dev/null
+++ b/indexing/makeindex/doc/makeindex.hlp
@@ -0,0 +1,1056 @@
+
+
+
+MAKEINDEX(1L) MISC. REFERENCE MANUAL PAGES MAKEINDEX(1L)
+
+
+
+NAME
+ makeindex - a general purpose, formatter-independent index
+ processor
+
+SYNOPSIS
+ makeindex [-c] [-g] [-i] [-l] [-o ind] [-p num] [-q] [-r]
+ [-s sfile] [-t log] [idx0 idx1 idx2...]
+
+DESCRIPTION
+ The program makeindex is a general purpose hierarchical
+ index generator; it accepts one or more input files (often
+ produced by a text formatter such as TeX (tex(1L)) or
+ troff(1), sorts the entries, and produces an output file
+ which can be formatted. The index can have up to three lev-
+ els (0, 1, and 2) of subitem nesting. The way in which
+ words are flagged for indexing within the main document is
+ specific to the formatter used; makeindex does not automate
+ the process of selecting these words. As the output index
+ is hierarchical, makeindex can be considered complimentary
+ to the awk(1)-based make.index(1L) system of Bentley and
+ Kernighan, which is specific to troff(1), generates non-
+ hierarchical indices, and employs a much simpler syntax for
+ indicating index entries. For illustration of use with
+ troff and TeX, see the section EXAMPLES below.
+
+ The formats of the input and output files are specified in a
+ style file; by default, input is assumed to be a .idx file,
+ as generated by LaTeX.
+
+ Unless specified explicitly, the base name of the first
+ input file (idx0) is used to determine the names of other
+ files. For each input file name specified, a file of that
+ name is sought. If this file is not found and the file name
+ has no extension, the extension .idx is appended. If no
+ file with this name is found, makeindex aborts.
+
+ For important notes on how to select index keywords, see the
+ document by Lamport cited below. As an issue separate from
+ selecting index keywords, a systematic mechanism for placing
+ index terms in a document is suggested in Index Preparation
+ and Processing, a paper cited below.
+
+OPTIONS
+ -c Compress intermediate blanks (ignoring leading and
+ trailing blanks and tabs). By default, blanks in
+ the index key are retained.
+
+ -g Employ German word ordering in the index, in
+ accord with rules set forth in DIN 5007. By
+ default, makeindex employs a word ordering in
+ which precedence is: symbols, numbers, uppercase
+ letters, lowercase letters. The sequence in
+
+
+
+Sun Release 4.1 Last change: 10 December 1991 1
+
+
+
+
+
+
+MAKEINDEX(1L) MISC. REFERENCE MANUAL PAGES MAKEINDEX(1L)
+
+
+
+ German word ordering is: symbols, lowercase
+ letters, uppercase letters, numbers. Addition-
+ ally, this option enables makeindex to recognize
+ the German TeX-commands {"a, "o, "u and "s} as
+ {ae, oe, ue and ss} during the sorting of the
+ entries. The quote character must be redefined in
+ a style file (for example, redefine quote as '+').
+ If the quote character is not redefined, makeindex
+ will produce an error message and abort.
+
+ -i Take input from stdin. When this option is speci-
+ fied and -o is not, output is written to stdout.
+
+ -l Letter ordering; by default, word ordering is used
+ (see the ORDERING section).
+
+ -o ind Employ ind as the output index file. By default,
+ the file name is created by appending the exten-
+ sion .ind to the base name of the first input file
+ (idx0).
+
+ -p num Set the starting page number of the output index
+ file to be num (useful when the index file is to
+ be formatted separately). The argument num may be
+ numerical or one of the following:
+
+ any The starting page is the last source
+ page number plus 1.
+
+ odd The starting page is the first odd page
+ following the last source page number.
+
+ even The starting page is the first even page
+ following the last source page number.
+
+ The last source page is obtained by searching
+ backward in the log file for the first instance of
+ a number included within paired square brackets
+ ([...]). If a page number is missing or the log
+ file is not found, no attempt will be made to set
+ the starting page number. The source log file
+ name is determined by appending the extension .log
+ to the base name of the first input file (idx0).
+
+ -q Quiet mode; send no messages to stderr. By
+ default, progress and error messages are sent to
+ stderr as well as to the transcript file.
+
+ -r Disable implicit page range formation; page ranges
+ must be created by using explicit range operators;
+ see SPECIAL EFFECTS below. By default, three or
+ more successive pages are automatically
+
+
+
+Sun Release 4.1 Last change: 10 December 1991 2
+
+
+
+
+
+
+MAKEINDEX(1L) MISC. REFERENCE MANUAL PAGES MAKEINDEX(1L)
+
+
+
+ abbreviated as a range (e.g. 1-5).
+
+ -s sty Employ sty as the style file (no default). The
+ environment variable INDEXSTYLE defines the path
+ where the style file should be found.
+
+ -t log Employ log as the transcript file. By default,
+ the file name is created by appending the exten-
+ sion .ilg to the base name of the first input file
+ (idx0).
+
+STYLE FILE
+ The style file informs makeindex about the format of the
+ .idx input files and the intended format of the final output
+ file; examples appear below. This file can reside anywhere
+ in the path defined by the environment variable INDEXSTYLE.
+ The style file contains a list of <specifier, attribute>
+ pairs. There are two types of specifiers: input and output.
+ Pairs do not have to appear in any particular order. A line
+ begun by `%' is a comment. In the following list of specif-
+ iers and arguments, <string> is an arbitrary string delim-
+ ited by double quotes ("..."), <char> is a single letter
+ embraced by single quotes ('...'), and <number> is a nonne-
+ gative integer. The maximum length of a <string> is 2048.
+ A literal backslash or quote must be escaped (by a
+ backslash). Anything not specified in the style file will
+ be assigned a default value, which is shown at the head of
+ the rightmost column.
+
+ INPUT STYLE SPECIFIERS
+ actual <char> '@'
+ Symbol indicating that the next
+ entry is to appear in the output
+ file.
+
+ arg_close <char> '}'
+ Closing delimiter for the index
+ entry argument.
+
+ arg_open <char> '{'
+ Opening delimiter for the index
+ entry argument.
+
+ encap <char> '|'
+ Symbol indicating that the rest of
+ the argument list is to be used as
+ the encapsulating command for the
+ page number.
+
+ escape <char> '\\'
+ Symbol which escapes the following
+ letter, unless its preceding letter
+
+
+
+Sun Release 4.1 Last change: 10 December 1991 3
+
+
+
+
+
+
+MAKEINDEX(1L) MISC. REFERENCE MANUAL PAGES MAKEINDEX(1L)
+
+
+
+ is escape. Note: quote is used to
+ escape the letter which immediately
+ follows it, but if it is preceded
+ by escape, it is treated as a ordi-
+ nary character. These two symbols
+ must be distinct.
+
+ keyword <string> "\\indexentry"
+ Command which tells makeindex that
+ its argument is an index entry.
+
+ level <char> '!'
+ Delimiter denoting a new level of
+ subitem.
+
+ quote <char> '"'
+ Note: quote is used to escape the
+ letter which immediately follows
+ it, but if it is preceded by
+ escape, it is treated as a ordinary
+ character. These two symbols must
+ be distinct.
+
+ range_close <char> ')'
+ Closing delimiter indicating the
+ end of an explicit page range.
+
+ range_open <char> '('
+ Opening delimiter indicating the
+ beginning of an explicit page
+ range.
+
+ OUTPUT STYLE SPECIFIERS
+ preamble <string> "\\begin{theindex}\n"
+ Preamble of output file.
+
+ postamble <string> "\n\n\\end{theindex}\n"
+ Postamble of output file.
+
+ setpage_prefix <string> "\n \\setcounter{page}{"
+ Prefix of command which sets the
+ starting page number.
+
+ setpage_suffix <string> "}\n"
+ Suffix of command which sets the
+ starting page number.
+
+ group_skip <string> "\n\n \\indexspace\n"
+ Vertical space to be inserted
+ before a new group begins.
+
+ headings_flag <string> 0
+
+
+
+Sun Release 4.1 Last change: 10 December 1991 4
+
+
+
+
+
+
+MAKEINDEX(1L) MISC. REFERENCE MANUAL PAGES MAKEINDEX(1L)
+
+
+
+ Flag indicating treatment of new
+ group headers, which are inserted
+ when before a new group (symbols,
+ numbers, and the 26 letters): posi-
+ tive values cause an uppercase
+ letter to be inserted between pre-
+ fix and suffix, and negative values
+ cause a lowercase letter to be
+ inserted (default is 0, which pro-
+ duces no header).
+
+ heading_prefix <string> ""
+ Header prefix to be inserted before
+ a new letter begins.
+
+ symhead_positive <string>
+ "Symbols"
+ Heading for symbols to be inserted
+ if headings_flag is positive.
+
+ symhead_negative <string>
+ "symbols"
+ Heading for symbols to be inserted
+ if headings_flag is negative.
+
+ numhead_positive <string>
+ "Numbers"
+ Heading for numbers to be inserted
+ if headings_flag is positive.
+
+ numhead_negative <string>
+ "numbers"
+ Heading for numbers to be inserted
+ if headings_flag is negative.
+
+ item_0 <string> "\n \\item "
+ Command to be inserted between two
+ primary (level 0) items.
+
+ item_1 <string> "\n \\subitem "
+ Command to be inserted between two
+ secondary (level 1) items.
+
+ item_2 <string> "\n \\subsubitem "
+ Command to be inserted between two
+ level 2 items.
+
+ item_01 <string> "\n \\subitem "
+ Command to be inserted between a
+ level 0 item and a level 1 item.
+
+ item_x1 <string> "\n \\subitem "
+
+
+
+Sun Release 4.1 Last change: 10 December 1991 5
+
+
+
+
+
+
+MAKEINDEX(1L) MISC. REFERENCE MANUAL PAGES MAKEINDEX(1L)
+
+
+
+ Command to be inserted between a
+ level 0 item and a level 1 item,
+ where the level 0 item does not
+ have associated page numbers.
+
+ item_12 <string> "\n \\subsubitem "
+ Command to be inserted between a
+ level 1 item and a level 2 item.
+
+ item_x2 <string> "\n \\subsubitem "
+ Command to be inserted between a
+ level 1 item and a level 2 item,
+ where the level 1 item does not
+ have associated page numbers.
+
+ delim_0 <string> ", "
+ Delimiter to be inserted between a
+ level 0 key and its first page
+ number (default: comma followed by
+ a blank).
+
+ delim_1 <string> ", "
+ Delimiter to be inserted between a
+ level 1 key and its first page
+ number (default: comma followed by
+ a blank).
+
+ delim_2 <string> ", "
+ Delimiter to be inserted between a
+ level 2 key and its first page
+ number (default: comma followed by
+ a blank).
+
+ delim_n <string> ", "
+ Delimiter to be inserted between
+ two page numbers for the same key
+ in any level (default: comma fol-
+ lowed by a blank).
+
+ delim_r <string> "--"
+ Delimiter to be inserted between
+ the starting and ending page
+ numbers of a range.
+
+ delim_t <string> ""
+ Delimiter to be inserted at the end
+ of a page list. This delimiter has
+ no effect on entries which have no
+ associated page list.
+
+ encap_prefix <string> "\\"
+ First part of prefix for the
+
+
+
+Sun Release 4.1 Last change: 10 December 1991 6
+
+
+
+
+
+
+MAKEINDEX(1L) MISC. REFERENCE MANUAL PAGES MAKEINDEX(1L)
+
+
+
+ command which encapsulates the page
+ number.
+
+ encap_infix <string> "{"
+ Second part of prefix for the com-
+ mand which encapsulates the page
+ number.
+
+ encap_suffix <string> "}".
+ Suffix for the command which encap-
+ sulates the page number.
+
+ line_max <number> 72
+ Maximum length of a line in the
+ output, beyond which a line wraps.
+
+ indent_space <string> "\t\t"
+ Space to be inserted in front of a
+ wrapped line (default: two tabs).
+
+ indent_length <number> 16
+ Length of indent_space (default:
+ 16, equivalent to 2 tabs).
+
+EXAMPLES
+ TeX EXAMPLE
+ The following example shows a style file called book.ist,
+ which defines an index for a book which can be formatted
+ independently of the main source:
+
+ preamble
+ "\\documentstyle[12pt]{book}
+ \\begin{document}
+ \\begin{theindex}
+ {\\small\n"
+ postamble
+ "\n\n}
+ \\end{theindex}
+ \\end{document}\n"
+
+ Assuming that a particular book style requires the index (as
+ well as any chapters) to start from an odd page number, and
+ that the input file is named foo.idx, the following command
+ line produces output in file footmp.ind:
+
+ makeindex -s book.ist -o footmp.ind -p odd foo
+
+ Here a non-default output file name is used to avoid
+ clobbering the output for the book itself (presumably
+ foo.dvi, which would have been the default name for the
+ index output file!).
+
+
+
+
+Sun Release 4.1 Last change: 10 December 1991 7
+
+
+
+
+
+
+MAKEINDEX(1L) MISC. REFERENCE MANUAL PAGES MAKEINDEX(1L)
+
+
+
+ TROFF EXAMPLE
+ A sample control file for creating an index, which we will
+ assume resides in the file sample.ist:
+
+ keyword "IX:"
+ preamble
+ ".\\\" start of index output
+ \".\\\" enter two column mode
+ .2C
+ .SH
+ .ce
+ INDEX
+ .XS
+ INDEX
+ .XE
+ .R
+ .ps 9p
+ .vs 11p
+ .sp
+ .de I1
+ .ti 0.25i
+ ..
+ .de I2
+ .ti 0.5i
+ .."
+ postamble "\n.\\\" end of index output"
+ setpage_prefix "\n.nr % "
+ setpage_suffix ""
+ group_skip "\n.sp 1.0"
+ headings_flag 1
+ heading_prefix "\n.IS\n"
+ heading_suffix "\n.IE"
+ item_0 "\n.br\n"
+ item_1 "\n.I1\n"
+ item_2 "\n.I2\n"
+ item_01 "\n.I1\n"
+ item_x1 "\n.I1\n"
+ item_12 "\n.I2\n"
+ item_x2 "\n.I2\n"
+ delim_0 ", "
+ delim_1 ", "
+ delim_2 ", "
+ delim_r "-"
+ delim_t "."
+ encap_prefix "\\fB"
+ encap_infix ""
+ encap_suffix "\\fP"
+ indent_space ""
+ indent_length 0
+
+ The local macro package may require modification, as in this
+ example of an extension to the -ms macros (note that at some
+
+
+
+Sun Release 4.1 Last change: 10 December 1991 8
+
+
+
+
+
+
+MAKEINDEX(1L) MISC. REFERENCE MANUAL PAGES MAKEINDEX(1L)
+
+
+
+ sites, this macro should replace a pre-existing macro of the
+ same name):
+
+ .
+ .de IX
+ .ie '\\n(.z'' .tm IX: \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 {\\n(PN}
+ .el \\!.IX \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 {\\n(PN}
+ ..
+
+ (note that the string {\\n(PN} is separated from the rest of
+ the line by a tab. If your local macro package does not
+ contain this extension, just include those lines at the
+ beginning of your file. Here is a simple troff(1) input
+ file, which we will assume is named sample.txt:
+
+ This is a sample file to test the \fImakeindex\fP(1L)
+ program, and see
+ .IX {indexing!programs!C language}
+ .IX {makeindex@\fImakeindex\fP(1L)}
+ .bp
+ .rs
+ .IX {Knuth}
+ .IX {typesetting!computer-aided}
+ how well it functions in the \fItroff\fP(1) environment.
+
+ Note that index entries are indicated by the .IX macro,
+ which causes the following text to be written to stdout
+ along with the current page number.
+
+ CREATING THE INDEX FILE IN THE BOURNE SHELL
+ To create an input file for makeindex, in the Bourne shell
+ environment, do the equivalent at your site of the command:
+
+ psroff -ms -Tpsc -t sample.txt > /dev/null 2> sample.tmp
+
+ Some sites will require ditroff instead of psroff. To
+ filter out any genuine error messages, invoke grep(1):
+
+ grep '^IX: ' sample.tmp > sample.idx
+
+ CREATING THE INDEX FILE USING UCSF ENHANCED TROFF/TRANSCRIPT
+
+ With UCSF Enhanced troff/TRANSCRIPT, the -I option of
+ psroff(1L) can produce both formatter output and an index
+ file:
+
+ psroff -ms -I sample.inp -Tpsc sample.txt
+
+ If it is wished to suppress the formatter output:
+
+ psroff -ms -I sample.inp -Tpsc -t sample.txt > /dev/null
+
+
+
+
+Sun Release 4.1 Last change: 10 December 1991 9
+
+
+
+
+
+
+MAKEINDEX(1L) MISC. REFERENCE MANUAL PAGES MAKEINDEX(1L)
+
+
+
+ COMPLETING THE INDEX
+ Any of the above procedures leaves the input for makeindex
+ in sample.inp. The next step is to invoke makeindex:
+
+ makeindex -s sample.ist sample.idx
+
+ This leaves troff(1)-ready output in the file sample.ind.
+
+ORDERING
+ By default, makeindex assumes word ordering; if the -l
+ option is in effect, letter ordering is used. In word ord-
+ ering, a blank precedes any letter in the alphabet, whereas
+ in letter ordering, it does not count at all. This is
+ illustrated by the following example:
+
+ word order letter order
+ sea lion seal
+ seal sea lion
+
+ Numbers are always sorted in numeric order. For instance,
+
+ 9 (nine), 123
+ 10 (ten), see Derek, Bo
+
+ Letters are first sorted without regard to case; when words
+ are identical, the uppercase version precedes its lowercase
+ counterpart.
+
+ A special symbol is defined here to be any character not
+ appearing in the union of digits and the English alphabetic
+ characters. Patterns starting with special symbols precede
+ numbers, which precede patterns starting with letters. As a
+ special case, a string starting with a digit but mixed with
+ non-digits is considered to be a pattern starting with a
+ special character.
+
+SPECIAL EFFECTS
+ Entries such as
+
+ \indexentry{alpha}{1}
+ \indexentry{alpha!beta}{3}
+ \indexentry{alpha!beta!gamma}{10}
+
+ in the input file will be converted to
+
+ \item alpha, 1
+ \subitem beta, 3
+ \subsubitem gamma, 10
+
+ in the output index file. Notice that the level symbol
+ (`!') is used above to delimit hierarchical levels.
+
+
+
+
+Sun Release 4.1 Last change: 10 December 1991 10
+
+
+
+
+
+
+MAKEINDEX(1L) MISC. REFERENCE MANUAL PAGES MAKEINDEX(1L)
+
+
+
+ It is possible to make an item appear in a designated form
+ by using the actual (`@') operator. For instance,
+
+ \indexentry{alpha@{\it alpha\/}}{1}
+
+ will become
+
+ \item {\it alpha\/}, 1
+
+ after processing. The pattern preceding `@' is used as sort
+ key, whereas the one following it is written to the output
+ file. Note that two appearances of the same key, one with
+ and one without the actual operator, are regarded as dis-
+ tinct entries.
+
+ The item, subitem, and subsubitem fields may have individual
+ sort keys:
+
+ \indexentry{aa@{\it aa\/}!bb@{\it bb\/}!cc@{\it cc\/}}{1}
+
+ This will be converted to
+
+ \item {\it aa}, 1
+ \subitem {\it bb}, 3
+ \subsubitem {\it cc}, 10
+
+ It is possible to encapsulate a page number with a desig-
+ nated command using the encap (`|') operator:
+
+ \indexentry{alpha|bold}{1}
+
+ will be converted to
+
+ \item alpha, \bold{1}
+
+ where, with a suitable definition for TeX, \bold{n} will
+ expand to {\bf n}. In this example, the three output attri-
+ butes associated with page encapsulation encap_prefix,
+ encap_infix, and encap_suffix, correspond to backslash, left
+ brace, and right brace, respectively. This mechanism allows
+ page numbers to be set in different fonts. For example, the
+ page where the definition of a keyword appears can be in one
+ font, the location of a primary example can be in another
+ font, and other appearances in yet a third font.
+
+ The encap operator can also be used to create cross refer-
+ ences in the index:
+
+ \indexentry{alpha|see{beta}}{1}
+
+ will become
+
+
+
+
+Sun Release 4.1 Last change: 10 December 1991 11
+
+
+
+
+
+
+MAKEINDEX(1L) MISC. REFERENCE MANUAL PAGES MAKEINDEX(1L)
+
+
+
+ \item alpha, \see{beta}{1}
+
+ in the output file, where
+
+ \see{beta}{1}
+
+ will expand to
+
+ {\it see\/} beta
+
+ Note that in a cross reference like this the page number
+ disappears.
+
+ A pair of encap concatenated with range_open (`|(') and
+ range_close (`|)') creates an explicit page range:
+
+ \indexentry{alpha|(}{1}
+ \indexentry{alpha|)}{5}
+
+ will become
+
+ \item alpha, 1-5
+
+ Intermediate pages indexed by the same key will be merged
+ into the range implicitly. This is especially useful when
+ an entire section about a particular subject is to be
+ indexed, in which case only the range opening and closing
+ operators need to be inserted at the beginning and end of
+ the section. Explicit page range formation can also include
+ an extra command to set the page range in a designated font:
+
+ \indexentry{alpha|(bold}{1}
+ \indexentry{alpha|)}{5}
+
+ will become
+
+ \item alpha, \bold{1--5}
+
+ Several potential problems are worth mentioning. First,
+ entries like
+
+ \indexentry{alpha|(}{1}
+ \indexentry{alpha|bold}{3}
+ \indexentry{alpha|)}{5}
+
+ will be interpreted as
+
+ \item alpha, \bold{3}, 1--5
+
+ but with a warning message in the transcript about
+ encountering an inconsistent page encapsulator. An explicit
+ range beginning in a Roman page number and ending in Arabic
+
+
+
+Sun Release 4.1 Last change: 10 December 1991 12
+
+
+
+
+
+
+MAKEINDEX(1L) MISC. REFERENCE MANUAL PAGES MAKEINDEX(1L)
+
+
+
+ is also considered an error. In this instance, (if possi-
+ ble) the range is broken into two subranges, one in Roman
+ and the other in Arabic. For instance,
+
+ \indexentry{alpha|(}{i}
+ \indexentry{alpha}{iv}
+ \indexentry{alpha}{3}
+ \indexentry{alpha|)}{7}
+
+ will be turned into
+
+ \item alpha, i--iv, 3--7
+
+ with a warning message in the transcript file complaining
+ about an illegal range formation.
+
+ Finally, every special symbol mentioned in this section may
+ be escaped by the quote operator (`"'). Thus
+
+ \indexentry{alpha"@beta}{1}
+
+ will actually become
+
+ \item alpha@beta, 1
+
+ as a result of executing makeindex. The quoting power of
+ quote is eliminated if it is immediately preceded by escape
+ (`\'). For example,
+
+ \indexentry{f\"ur}{1}
+
+ becomes
+
+ \item f\"ur, 1
+
+ which represents an umlaut-accented `u' to the TeX family of
+ processors.
+
+ From version 2.11 of makeindex, the quote operator may quote
+ any character in the range 1 ... 255. Character 0 is
+ excluded because it is used internally in the makeindex
+ source code as a string terminator. With this change, sort
+ keys can be created for all eight-bit characters except 0.
+ The sorting order is
+
+ punctuation characters (in ASCII order),
+ digits,
+ control characters (1 ... 31),
+ space (32),
+ letters (ignoring case),
+ characters 127 ... 255.
+
+
+
+
+Sun Release 4.1 Last change: 10 December 1991 13
+
+
+
+
+
+
+MAKEINDEX(1L) MISC. REFERENCE MANUAL PAGES MAKEINDEX(1L)
+
+
+
+ Here is an example showing the indexing of all printable
+ ASCII characters other than letters and digits, assuming the
+ default TeX format. For convenience, the page number refer-
+ ences are the corresponding ASCII ordinal values.
+
+ \indexentry{" @" (space)}{32}
+ \indexentry{"!@"! (exclamation point)}{33}
+ \indexentry{""@"" (quotation mark)}{34}
+ \indexentry{"#@"\# (sharp sign)}{35}
+ \indexentry{"$@"\$ (dollar sign)}{36}
+ \indexentry{"%@"\% (percent sign)}{37}
+ \indexentry{"&@"\& (ampersand)}{38}
+ \indexentry{"<@"$<$ (left angle bracket)}{60}
+ \indexentry{"=@"= (equals)}{61}
+ \indexentry{">@"$>$ (right angle bracket)}{62}
+ \indexentry{"?@"? (query)}{63}
+ \indexentry{"@@"@ (at sign)}{64}
+ \indexentry{"[@"[ (left square bracket)}{91}
+ \indexentry{"\@"\verb=\= (backslash)}{92}
+ \indexentry{"]@"] (right square bracket)}{93}
+ \indexentry{"^@"\verb=^= (caret)}{94}
+ \indexentry{"_@"\verb=_= (underscore)}{95}
+ \indexentry{"`@"\verb=~= (grave accent)}{96}
+ \indexentry{"{@"\"{ (left brace)}{123}
+ \indexentry{"|@"\verb="|= (vertical bar)}{124}
+ \indexentry{"}@"\"} (right brace)}{125}
+ \indexentry{"~@"\verb=~= (tilde)}{126}
+
+ Characters in the actual fields following the `@' character
+ which have special significance to TeX must be represented
+ as control sequences, or as math mode characters. Note par-
+ ticularly how the entries for the at sign, left and right
+ braces, and the vertical bar, are coded. The index file
+ output by makeindex for this example looks like this:
+
+ \begin{theindex}
+
+ \item ! (exclamation point), 33
+ \item " (quotation mark), 34
+ \item \# (sharp sign), 35
+ \item \$ (dollar sign), 36
+ \item \% (percent sign), 37
+ \item \& (ampersand), 38
+ \item $<$ (left angle bracket), 60
+ \item = (equals), 61
+ \item $>$ (right angle bracket), 62
+ \item ? (query), 63
+ \item @ (at sign), 64
+ \item [ (left square bracket), 91
+ \item \verb=\= (backslash), 92
+ \item ] (right square bracket), 93
+ \item \verb=^= (caret), 94
+
+
+
+Sun Release 4.1 Last change: 10 December 1991 14
+
+
+
+
+
+
+MAKEINDEX(1L) MISC. REFERENCE MANUAL PAGES MAKEINDEX(1L)
+
+
+
+ \item \verb=_= (underscore), 95
+ \item \verb=~= (grave accent), 96
+ \item \{ (left brace), 123
+ \item \verb=|= (vertical bar), 124
+ \item \} (right brace), 125
+ \item \verb=~= (tilde), 126
+
+ \indexspace
+
+ \item (space), 32
+
+ \end{theindex}
+
+FILES
+ /usr/local/bin/makeindex
+ executable file
+
+ /usr/local/lib/tex/macros/idxmac-amstex.tex
+ TeX macro file used by makeindex
+
+ /usr/local/lib/tex/macros/idxmac.tex
+ TeX macro file used by makeindex
+
+ /usr/local/lib/tex/macros/makeidx.doc
+ TeX macro file used by makeindex
+
+ /usr/local/lib/tex/macros/makeidx.sty
+ TeX macro file used by makeindex
+
+SEE ALSO
+ ditroff(1L), latex(1L), make.index (1L), qsort(3), tex(1L),
+ troff(1L)
+
+ UCSF Enhanced troff/TRANSCRIPT - An Overview, R. P. C. Rodg-
+ ers and Conrad Huang, LSMB Technical Report 90-2, UCSF
+ School of Pharmacy, San Francisco, 1990.
+
+ Index Preparation and Processing, Pehong Chen and Michael A.
+ Harrison, Software: Practice and Experience, 19(9), 897915,
+ September 1988.
+
+ Automating Index Preparation, Pehong Chen and Michael A.
+ Harrison. Technical Report 87/347, Computer Science Divi-
+ sion, University of California, Berkeley, 1987 (a LaTeX
+ document supplied with makeindex).
+
+ MakeIndex: An Index Processor for LaTeX, Leslie Lamport,
+ February 1987 (a LaTeX document supplied with makeindex).
+
+ Tools for Printing Indices, Jon L. Bentley and Brian W. Ker-
+ nighan, Electronic Publishing - Origination, Dissemination,
+ and Design, 1(1), 318, June 1988 (also available as:
+
+
+
+Sun Release 4.1 Last change: 10 December 1991 15
+
+
+
+
+
+
+MAKEINDEX(1L) MISC. REFERENCE MANUAL PAGES MAKEINDEX(1L)
+
+
+
+ Computing Science Technical Report No. 128, AT&T Bell
+ Laboratories, Murray Hill, NJ 07974, 1986).
+
+AUTHOR
+ Pehong Chen, Chen & Harrison International Systems, Inc.
+ Palo Alto, California, USA <chen@renoir.berkeley.edu>.
+ Manual page extensively revised and corrected, and troff(1)
+ examples created by Rick P. C. Rodgers, UCSF School of Phar-
+ macy <rodgers@cca.ucsf.edu>.
+
+ACKNOWLEDGMENTS
+ Leslie Lamport contributed significantly to the design.
+ Michael Harrison provided valuable comments and suggestions.
+ Nelson Beebe improved on the portable version, and maintains
+ the source distribution for the TeX Users Group. Andreas
+ Brosig contributed to the German word ordering. The modifi-
+ cation to the -ms macros was derived from a method proposed
+ by Ravi Sethi of AT&T Bell Laboratories. The LOG and CON-
+ TRIB files in the makeindex source distribution record other
+ contributions.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Sun Release 4.1 Last change: 10 December 1991 16
+
+
+
diff --git a/indexing/makeindex/doc/makeindex.info b/indexing/makeindex/doc/makeindex.info
new file mode 100644
index 0000000000..5c6019bbdd
--- /dev/null
+++ b/indexing/makeindex/doc/makeindex.info
@@ -0,0 +1,1172 @@
+-*-Text-*-
+***WARNING***: Do NOT edit this file. It was created automatically from
+the corresponding .HLP file:
+ makeindex.vms
+by the vmshelp2 utility on Tue Dec 10 07:34:30 1991
+
+File: makeindex, Node: Top, Previous: MAKEINDEX, Up: (dir), Next: MAKEINDEX
+
+* Menu:
+
+* MAKEINDEX::
+
+File: makeindex, Node: MAKEINDEX, Previous: Top, Up: Top, Next: Top
+MAKEINDEX
+
+
+* Menu:
+
+* NAME-[MAKEINDEX]::
+* SYNOPSIS-[MAKEINDEX]::
+* DESCRIPTION-[MAKEINDEX]::
+* The program makeindex is a general purpose hierarchical-[MAKEINDEX]::
+* Kernighan, which is specific to troff(1), generates non--[MAKEINDEX]::
+* The formats of the input and output files are specified in a-[MAKEINDEX]::
+* Unless specified explicitly, the base name of the first-[MAKEINDEX]::
+* For important notes on how to select index keywords, see the-[MAKEINDEX]::
+* OPTIONS-[MAKEINDEX]::
+* STYLE FILE-[MAKEINDEX]::
+* The style file informs makeindex about the format of the-[MAKEINDEX]::
+* The style file contains a list of <specifier, attribute>-[MAKEINDEX]::
+* Pairs do not have to appear in any particular order. A line-[MAKEINDEX]::
+* A literal backslash or quote must be escaped (by a-[MAKEINDEX]::
+* EXAMPLES-[MAKEINDEX]::
+* The following example shows a style file called book.ist,-[MAKEINDEX]::
+* Assuming that a particular book style requires the index (as-[MAKEINDEX]::
+* Here a non-default output file name is used to avoid-[MAKEINDEX]::
+* A sample control file for creating an index, which we will-[MAKEINDEX]::
+* The local macro package may require modification, as in this-[MAKEINDEX]::
+* Note that index entries are indicated by the .IX macro,-[MAKEINDEX]::
+* To create an input file for makeindex, in the Bourne shell-[MAKEINDEX]::
+* Some sites will require ditroff instead of psroff. To-[MAKEINDEX]::
+* With UCSF Enhanced troff/TRANSCRIPT, the -I option of-[MAKEINDEX]::
+* If it is wished to suppress the formatter output-[MAKEINDEX]::
+* Any of the above procedures leaves the input for makeindex-[MAKEINDEX]::
+* This leaves troff(1)-ready output in the file sample.ind.-[MAKEINDEX]::
+* ORDERING-[MAKEINDEX]::
+* By default, makeindex assumes word ordering; if the -l-[MAKEINDEX]::
+* Numbers are always sorted in numeric order. For instance,-[MAKEINDEX]::
+* Letters are first sorted without regard to case; when words-[MAKEINDEX]::
+* A special symbol is defined here to be any character not-[MAKEINDEX]::
+* SPECIAL EFFECTS-[MAKEINDEX]::
+* Entries such as-[MAKEINDEX]::
+* It is possible to make an item appear in a designated form-[MAKEINDEX]::
+* The item, subitem, and subsubitem fields may have individual-[MAKEINDEX]::
+* This will be converted to-[MAKEINDEX]::
+* It is possible to encapsulate a page number with a desig--[MAKEINDEX]::
+* The encap operator can also be used to create cross refer--[MAKEINDEX]::
+* Note that in a cross reference like this the page number-[MAKEINDEX]::
+* A pair of encap concatenated with range_open (`|(') and-[MAKEINDEX]::
+* Intermediate pages indexed by the same key will be merged-[MAKEINDEX]::
+* Several potential problems are worth mentioning. First,-[MAKEINDEX]::
+* Finally, every special symbol mentioned in this section may-[MAKEINDEX]::
+* From version 2.11 of makeindex, the quote operator may quote-[MAKEINDEX]::
+* The sorting order is-[MAKEINDEX]::
+* Here is an example showing the indexing of all printable-[MAKEINDEX]::
+* ASCII characters other than letters and digits, assuming the-[MAKEINDEX]::
+* Characters in the actual fields following the `@' character-[MAKEINDEX]::
+* FILES-[MAKEINDEX]::
+* SEE ALSO-[MAKEINDEX]::
+* UCSF Enhanced troff/TRANSCRIPT - An Overview, R. P. C. Rodg--[MAKEINDEX]::
+* School of Pharmacy, San Francisco, 1990.-[MAKEINDEX]::
+* Index Preparation and Processing, Pehong Chen and Michael A.-[MAKEINDEX]::
+* Harrison, Software-[MAKEINDEX]:: Practice and Experience, 19(9), 897915,
+* September 1988.-[MAKEINDEX]::
+* Automating Index Preparation, Pehong Chen and Michael A.-[MAKEINDEX]::
+* Harrison. Technical Report 87/347, Computer Science Divi--[MAKEINDEX]::
+* MakeIndex-[MAKEINDEX]:: An Index Processor for LaTeX, Leslie Lamport,
+* February 1987 (a LaTeX document supplied with makeindex).-[MAKEINDEX]::
+* Tools for Printing Indices, Jon L. Bentley and Brian W. Ker--[MAKEINDEX]::
+* Computing Science Technical Report No. 128, AT&T Bell-[MAKEINDEX]::
+* Laboratories, Murray Hill, NJ 07974, 1986).-[MAKEINDEX]::
+* AUTHOR-[MAKEINDEX]::
+* Pehong Chen, Chen & Harrison International Systems, Inc.-[MAKEINDEX]::
+* Palo Alto, California, USA <chen@renoir.berkeley.edu>.-[MAKEINDEX]::
+* Manual page extensively revised and corrected, and troff(1)-[MAKEINDEX]::
+* ACKNOWLEDGMENTS-[MAKEINDEX]::
+* Leslie Lamport contributed significantly to the design.-[MAKEINDEX]::
+* Michael Harrison provided valuable comments and suggestions.-[MAKEINDEX]::
+* Nelson Beebe improved on the portable version, and maintains-[MAKEINDEX]::
+* Brosig contributed to the German word ordering. The modifi--[MAKEINDEX]::
+* TRIB files in the makeindex source distribution record other-[MAKEINDEX]::
+
+File: makeindex, Node: NAME-[MAKEINDEX], Previous: MAKEINDEX, Up: MAKEINDEX, Next: SYNOPSIS-[MAKEINDEX]
+NAME
+ makeindex - a general purpose, formatter-independent index
+ processor
+
+
+File: makeindex, Node: SYNOPSIS-[MAKEINDEX], Previous: NAME-[MAKEINDEX], Up: MAKEINDEX, Next: DESCRIPTION-[MAKEINDEX]
+SYNOPSIS
+ makeindex [-c] [-g] [-i] [-l] [-o ind] [-p num] [-q] [-r]
+ [-s sfile] [-t log] [idx0 idx1 idx2...]
+
+
+File: makeindex, Node: DESCRIPTION-[MAKEINDEX], Previous: SYNOPSIS-[MAKEINDEX], Up: MAKEINDEX, Next: The program makeindex is a general purpose hierarchical-[MAKEINDEX]
+DESCRIPTION
+
+File: makeindex, Node: The program makeindex is a general purpose hierarchical-[MAKEINDEX], Previous: DESCRIPTION-[MAKEINDEX], Up: MAKEINDEX, Next: Kernighan, which is specific to troff(1), generates non--[MAKEINDEX]
+The program makeindex is a general purpose hierarchical
+ index generator; it accepts one or more input files (often
+ produced by a text formatter such as TeX (tex(1L)) or
+ troff(1), sorts the entries, and produces an output file
+ which can be formatted. The index can have up to three lev-
+ els (0, 1, and 2) of subitem nesting. The way in which
+ words are flagged for indexing within the main document is
+ specific to the formatter used; makeindex does not automate
+ the process of selecting these words. As the output index
+ is hierarchical, makeindex can be considered complimentary
+ to the awk(1)-based make.index(1L) system of Bentley and
+
+File: makeindex, Node: Kernighan, which is specific to troff(1), generates non--[MAKEINDEX], Previous: The program makeindex is a general purpose hierarchical-[MAKEINDEX], Up: MAKEINDEX, Next: The formats of the input and output files are specified in a-[MAKEINDEX]
+Kernighan, which is specific to troff(1), generates non-
+ hierarchical indices, and employs a much simpler syntax for
+ indicating index entries. For illustration of use with
+ troff and TeX, see the section EXAMPLES below.
+
+
+File: makeindex, Node: The formats of the input and output files are specified in a-[MAKEINDEX], Previous: Kernighan, which is specific to troff(1), generates non--[MAKEINDEX], Up: MAKEINDEX, Next: Unless specified explicitly, the base name of the first-[MAKEINDEX]
+The formats of the input and output files are specified in a
+ style file; by default, input is assumed to be a .idx file,
+ as generated by LaTeX.
+
+
+File: makeindex, Node: Unless specified explicitly, the base name of the first-[MAKEINDEX], Previous: The formats of the input and output files are specified in a-[MAKEINDEX], Up: MAKEINDEX, Next: For important notes on how to select index keywords, see the-[MAKEINDEX]
+Unless specified explicitly, the base name of the first
+ input file (idx0) is used to determine the names of other
+ files. For each input file name specified, a file of that
+ name is sought. If this file is not found and the file name
+ has no extension, the extension .idx is appended. If no
+ file with this name is found, makeindex aborts.
+
+
+File: makeindex, Node: For important notes on how to select index keywords, see the-[MAKEINDEX], Previous: Unless specified explicitly, the base name of the first-[MAKEINDEX], Up: MAKEINDEX, Next: OPTIONS-[MAKEINDEX]
+For important notes on how to select index keywords, see the
+ document by Lamport cited below. As an issue separate from
+ selecting index keywords, a systematic mechanism for placing
+ index terms in a document is suggested in Index Preparation
+ and Processing, a paper cited below.
+
+
+File: makeindex, Node: OPTIONS-[MAKEINDEX], Previous: For important notes on how to select index keywords, see the-[MAKEINDEX], Up: MAKEINDEX, Next: STYLE FILE-[MAKEINDEX]
+OPTIONS
+ -c Compress intermediate blanks (ignoring leading and
+ trailing blanks and tabs). By default, blanks in
+ the index key are retained.
+
+ -g Employ German word ordering in the index, in
+ accord with rules set forth in DIN 5007. By
+ default, makeindex employs a word ordering in
+ which precedence is: symbols, numbers, uppercase
+ letters, lowercase letters. The sequence in
+
+ German word ordering is: symbols, lowercase
+ letters, uppercase letters, numbers. Addition-
+ ally, this option enables makeindex to recognize
+ the German TeX-commands {"a, "o, "u and "s} as
+ {ae, oe, ue and ss} during the sorting of the
+ entries. The quote character must be redefined in
+ a style file (for example, redefine quote as '+').
+ If the quote character is not redefined, makeindex
+ will produce an error message and abort.
+
+ -i Take input from stdin. When this option is speci-
+ fied and -o is not, output is written to stdout.
+
+ -l Letter ordering; by default, word ordering is used
+ (see the ORDERING section).
+
+ -o ind Employ ind as the output index file. By default,
+ the file name is created by appending the exten-
+ sion .ind to the base name of the first input file
+ (idx0).
+
+ -p num Set the starting page number of the output index
+ file to be num (useful when the index file is to
+ be formatted separately). The argument num may be
+ numerical or one of the following:
+
+ any The starting page is the last source
+ page number plus 1.
+
+ odd The starting page is the first odd page
+ following the last source page number.
+
+ even The starting page is the first even page
+ following the last source page number.
+
+ The last source page is obtained by searching
+ backward in the log file for the first instance of
+ a number included within paired square brackets
+ ([...]). If a page number is missing or the log
+ file is not found, no attempt will be made to set
+ the starting page number. The source log file
+ name is determined by appending the extension .log
+ to the base name of the first input file (idx0).
+
+ -q Quiet mode; send no messages to stderr. By
+ default, progress and error messages are sent to
+ stderr as well as to the transcript file.
+
+ -r Disable implicit page range formation; page ranges
+ must be created by using explicit range operators;
+ see SPECIAL EFFECTS below. By default, three or
+ more successive pages are automatically
+
+ abbreviated as a range (e.g. 1-5).
+
+ -s sty Employ sty as the style file (no default). The
+ environment variable INDEXSTYLE defines the path
+ where the style file should be found.
+
+ -t log Employ log as the transcript file. By default,
+ the file name is created by appending the exten-
+ sion .ilg to the base name of the first input file
+ (idx0).
+
+
+File: makeindex, Node: STYLE FILE-[MAKEINDEX], Previous: OPTIONS-[MAKEINDEX], Up: MAKEINDEX, Next: The style file informs makeindex about the format of the-[MAKEINDEX]
+STYLE FILE
+
+File: makeindex, Node: The style file informs makeindex about the format of the-[MAKEINDEX], Previous: STYLE FILE-[MAKEINDEX], Up: MAKEINDEX, Next: The style file contains a list of <specifier, attribute>-[MAKEINDEX]
+The style file informs makeindex about the format of the
+ .idx input files and the intended format of the final output
+ file; examples appear below. This file can reside anywhere
+ in the path defined by the environment variable INDEXSTYLE.
+
+File: makeindex, Node: The style file contains a list of <specifier, attribute>-[MAKEINDEX], Previous: The style file informs makeindex about the format of the-[MAKEINDEX], Up: MAKEINDEX, Next: Pairs do not have to appear in any particular order. A line-[MAKEINDEX]
+The style file contains a list of <specifier, attribute>
+ pairs. There are two types of specifiers: input and output.
+
+File: makeindex, Node: Pairs do not have to appear in any particular order. A line-[MAKEINDEX], Previous: The style file contains a list of <specifier, attribute>-[MAKEINDEX], Up: MAKEINDEX, Next: A literal backslash or quote must be escaped (by a-[MAKEINDEX]
+Pairs do not have to appear in any particular order. A line
+ begun by `%' is a comment. In the following list of specif-
+ iers and arguments, <string> is an arbitrary string delim-
+ ited by double quotes ("..."), <char> is a single letter
+ embraced by single quotes ('...'), and <number> is a nonne-
+ gative integer. The maximum length of a <string> is 2048.
+
+File: makeindex, Node: A literal backslash or quote must be escaped (by a-[MAKEINDEX], Previous: Pairs do not have to appear in any particular order. A line-[MAKEINDEX], Up: MAKEINDEX, Next: EXAMPLES-[MAKEINDEX]
+A literal backslash or quote must be escaped (by a
+ backslash). Anything not specified in the style file will
+ be assigned a default value, which is shown at the head of
+ the rightmost column.
+
+
+* Menu:
+
+* INPUT STYLE SPECIFIERS-[A literal backslash or quote must be escaped (by a-[MAKEINDEX]]::
+* OUTPUT STYLE SPECIFIERS-[A literal backslash or quote must be escaped (by a-[MAKEINDEX]]::
+
+File: makeindex, Node: INPUT STYLE SPECIFIERS-[A literal backslash or quote must be escaped (by a-[MAKEINDEX]], Previous: A literal backslash or quote must be escaped (by a-[MAKEINDEX], Up: A literal backslash or quote must be escaped (by a-[MAKEINDEX], Next: OUTPUT STYLE SPECIFIERS-[A literal backslash or quote must be escaped (by a-[MAKEINDEX]]
+INPUT STYLE SPECIFIERS
+ actual <char> '@'
+ Symbol indicating that the next
+ entry is to appear in the output
+ file.
+
+ arg_close <char> '}'
+ Closing delimiter for the index
+ entry argument.
+
+ arg_open <char> '{'
+ Opening delimiter for the index
+ entry argument.
+
+ encap <char> '|'
+ Symbol indicating that the rest of
+ the argument list is to be used as
+ the encapsulating command for the
+ page number.
+
+ escape <char> '\\'
+ Symbol which escapes the following
+ letter, unless its preceding letter
+
+ is escape. Note: quote is used to
+ escape the letter which immediately
+ follows it, but if it is preceded
+ by escape, it is treated as a ordi-
+ nary character. These two symbols
+ must be distinct.
+
+ keyword <string> "\\indexentry"
+ Command which tells makeindex that
+ its argument is an index entry.
+
+ level <char> '!'
+ Delimiter denoting a new level of
+ subitem.
+
+ quote <char> '"'
+ Note: quote is used to escape the
+ letter which immediately follows
+ it, but if it is preceded by
+ escape, it is treated as a ordinary
+ character. These two symbols must
+ be distinct.
+
+ range_close <char> ')'
+ Closing delimiter indicating the
+ end of an explicit page range.
+
+ range_open <char> '('
+ Opening delimiter indicating the
+ beginning of an explicit page
+ range.
+
+
+File: makeindex, Node: OUTPUT STYLE SPECIFIERS-[A literal backslash or quote must be escaped (by a-[MAKEINDEX]], Previous: INPUT STYLE SPECIFIERS-[A literal backslash or quote must be escaped (by a-[MAKEINDEX]], Up: A literal backslash or quote must be escaped (by a-[MAKEINDEX], Next: A literal backslash or quote must be escaped (by a-[MAKEINDEX]
+OUTPUT STYLE SPECIFIERS
+ preamble <string> "\\begin{theindex}\n"
+ Preamble of output file.
+
+ postamble <string> "\n\n\\end{theindex}\n"
+ Postamble of output file.
+
+ setpage_prefix <string> "\n \\setcounter{page}{"
+ Prefix of command which sets the
+ starting page number.
+
+ setpage_suffix <string> "}\n"
+ Suffix of command which sets the
+ starting page number.
+
+ group_skip <string> "\n\n \\indexspace\n"
+ Vertical space to be inserted
+ before a new group begins.
+
+ headings_flag <string> 0
+
+ Flag indicating treatment of new
+ group headers, which are inserted
+ when before a new group (symbols,
+ numbers, and the 26 letters): posi-
+ tive values cause an uppercase
+ letter to be inserted between pre-
+ fix and suffix, and negative values
+ cause a lowercase letter to be
+ inserted (default is 0, which pro-
+ duces no header).
+
+ heading_prefix <string> ""
+ Header prefix to be inserted before
+ a new letter begins.
+
+ symhead_positive <string>
+ "Symbols"
+ Heading for symbols to be inserted
+ if headings_flag is positive.
+
+ symhead_negative <string>
+ "symbols"
+ Heading for symbols to be inserted
+ if headings_flag is negative.
+
+ numhead_positive <string>
+ "Numbers"
+ Heading for numbers to be inserted
+ if headings_flag is positive.
+
+ numhead_negative <string>
+ "numbers"
+ Heading for numbers to be inserted
+ if headings_flag is negative.
+
+ item_0 <string> "\n \\item "
+ Command to be inserted between two
+ primary (level 0) items.
+
+ item_1 <string> "\n \\subitem "
+ Command to be inserted between two
+ secondary (level 1) items.
+
+ item_2 <string> "\n \\subsubitem "
+ Command to be inserted between two
+ level 2 items.
+
+ item_01 <string> "\n \\subitem "
+ Command to be inserted between a
+ level 0 item and a level 1 item.
+
+ item_x1 <string> "\n \\subitem "
+
+ Command to be inserted between a
+ level 0 item and a level 1 item,
+ where the level 0 item does not
+ have associated page numbers.
+
+ item_12 <string> "\n \\subsubitem "
+ Command to be inserted between a
+ level 1 item and a level 2 item.
+
+ item_x2 <string> "\n \\subsubitem "
+ Command to be inserted between a
+ level 1 item and a level 2 item,
+ where the level 1 item does not
+ have associated page numbers.
+
+ delim_0 <string> ", "
+ Delimiter to be inserted between a
+ level 0 key and its first page
+ number (default: comma followed by
+ a blank).
+
+ delim_1 <string> ", "
+ Delimiter to be inserted between a
+ level 1 key and its first page
+ number (default: comma followed by
+ a blank).
+
+ delim_2 <string> ", "
+ Delimiter to be inserted between a
+ level 2 key and its first page
+ number (default: comma followed by
+ a blank).
+
+ delim_n <string> ", "
+ Delimiter to be inserted between
+ two page numbers for the same key
+ in any level (default: comma fol-
+ lowed by a blank).
+
+ delim_r <string> "--"
+ Delimiter to be inserted between
+ the starting and ending page
+ numbers of a range.
+
+ delim_t <string> ""
+ Delimiter to be inserted at the end
+ of a page list. This delimiter has
+ no effect on entries which have no
+ associated page list.
+
+ encap_prefix <string> "\\"
+ First part of prefix for the
+
+ command which encapsulates the page
+ number.
+
+ encap_infix <string> "{"
+ Second part of prefix for the com-
+ mand which encapsulates the page
+ number.
+
+ encap_suffix <string> "}".
+ Suffix for the command which encap-
+ sulates the page number.
+
+ line_max <number> 72
+ Maximum length of a line in the
+ output, beyond which a line wraps.
+
+ indent_space <string> "\t\t"
+ Space to be inserted in front of a
+ wrapped line (default: two tabs).
+
+ indent_length <number> 16
+ Length of indent_space (default:
+ 16, equivalent to 2 tabs).
+
+
+File: makeindex, Node: EXAMPLES-[MAKEINDEX], Previous: A literal backslash or quote must be escaped (by a-[MAKEINDEX], Up: MAKEINDEX, Next: The following example shows a style file called book.ist,-[MAKEINDEX]
+EXAMPLES
+
+* Menu:
+
+* TeX EXAMPLE-[EXAMPLES-[MAKEINDEX]]::
+
+File: makeindex, Node: TeX EXAMPLE-[EXAMPLES-[MAKEINDEX]], Previous: EXAMPLES-[MAKEINDEX], Up: EXAMPLES-[MAKEINDEX], Next: EXAMPLES-[MAKEINDEX]
+TeX EXAMPLE
+
+File: makeindex, Node: The following example shows a style file called book.ist,-[MAKEINDEX], Previous: EXAMPLES-[MAKEINDEX], Up: MAKEINDEX, Next: Assuming that a particular book style requires the index (as-[MAKEINDEX]
+The following example shows a style file called book.ist,
+ which defines an index for a book which can be formatted
+ independently of the main source:
+
+ preamble
+ "\\documentstyle[12pt]{book}
+ \\begin{document}
+ \\begin{theindex}
+ {\\small\n"
+ postamble
+ "\n\n}
+ \\end{theindex}
+ \\end{document}\n"
+
+
+File: makeindex, Node: Assuming that a particular book style requires the index (as-[MAKEINDEX], Previous: The following example shows a style file called book.ist,-[MAKEINDEX], Up: MAKEINDEX, Next: Here a non-default output file name is used to avoid-[MAKEINDEX]
+Assuming that a particular book style requires the index (as
+ well as any chapters) to start from an odd page number, and
+ that the input file is named foo.idx, the following command
+ line produces output in file footmp.ind:
+
+ makeindex -s book.ist -o footmp.ind -p odd foo
+
+
+File: makeindex, Node: Here a non-default output file name is used to avoid-[MAKEINDEX], Previous: Assuming that a particular book style requires the index (as-[MAKEINDEX], Up: MAKEINDEX, Next: A sample control file for creating an index, which we will-[MAKEINDEX]
+Here a non-default output file name is used to avoid
+ clobbering the output for the book itself (presumably
+ foo.dvi, which would have been the default name for the
+ index output file!).
+
+
+* Menu:
+
+* TROFF EXAMPLE-[Here a non-default output file name is used to avoid-[MAKEINDEX]]::
+
+File: makeindex, Node: TROFF EXAMPLE-[Here a non-default output file name is used to avoid-[MAKEINDEX]], Previous: Here a non-default output file name is used to avoid-[MAKEINDEX], Up: Here a non-default output file name is used to avoid-[MAKEINDEX], Next: Here a non-default output file name is used to avoid-[MAKEINDEX]
+TROFF EXAMPLE
+
+File: makeindex, Node: A sample control file for creating an index, which we will-[MAKEINDEX], Previous: Here a non-default output file name is used to avoid-[MAKEINDEX], Up: MAKEINDEX, Next: The local macro package may require modification, as in this-[MAKEINDEX]
+A sample control file for creating an index, which we will
+ assume resides in the file sample.ist:
+
+ keyword "IX:"
+ preamble
+ ".\\\" start of index output
+ \".\\\" enter two column mode
+ .2C
+ .SH
+ .ce
+ INDEX
+ .XS
+ INDEX
+ .XE
+ .R
+ .ps 9p
+ .vs 11p
+ .sp
+ .de I1
+ .ti 0.25i
+ ..
+ .de I2
+ .ti 0.5i
+ .."
+ postamble "\n.\\\" end of index output"
+ setpage_prefix "\n.nr % "
+ setpage_suffix ""
+ group_skip "\n.sp 1.0"
+ headings_flag 1
+ heading_prefix "\n.IS\n"
+ heading_suffix "\n.IE"
+ item_0 "\n.br\n"
+ item_1 "\n.I1\n"
+ item_2 "\n.I2\n"
+ item_01 "\n.I1\n"
+ item_x1 "\n.I1\n"
+ item_12 "\n.I2\n"
+ item_x2 "\n.I2\n"
+ delim_0 ", "
+ delim_1 ", "
+ delim_2 ", "
+ delim_r "-"
+ delim_t "."
+ encap_prefix "\\fB"
+ encap_infix ""
+ encap_suffix "\\fP"
+ indent_space ""
+ indent_length 0
+
+
+File: makeindex, Node: The local macro package may require modification, as in this-[MAKEINDEX], Previous: A sample control file for creating an index, which we will-[MAKEINDEX], Up: MAKEINDEX, Next: Note that index entries are indicated by the .IX macro,-[MAKEINDEX]
+The local macro package may require modification, as in this
+ example of an extension to the -ms macros (note that at some
+
+ sites, this macro should replace a pre-existing macro of the
+ same name):
+
+ .
+ .de IX
+ .ie '\\n(.z'' .tm IX: \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 {\\n(PN}
+ .el \\!.IX \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 {\\n(PN}
+ ..
+
+ (note that the string {\\n(PN} is separated from the rest of
+ the line by a tab. If your local macro package does not
+ contain this extension, just include those lines at the
+ beginning of your file. Here is a simple troff(1) input
+ file, which we will assume is named sample.txt:
+
+ This is a sample file to test the \fImakeindex\fP(1L)
+ program, and see
+ .IX {indexing!programs!C language}
+ .IX {makeindex@\fImakeindex\fP(1L)}
+ .bp
+ .rs
+ .IX {Knuth}
+ .IX {typesetting!computer-aided}
+ how well it functions in the \fItroff\fP(1) environment.
+
+
+File: makeindex, Node: Note that index entries are indicated by the .IX macro,-[MAKEINDEX], Previous: The local macro package may require modification, as in this-[MAKEINDEX], Up: MAKEINDEX, Next: To create an input file for makeindex, in the Bourne shell-[MAKEINDEX]
+Note that index entries are indicated by the .IX macro,
+ which causes the following text to be written to stdout
+ along with the current page number.
+
+
+* Menu:
+
+* CREATING THE INDEX FILE IN THE BOURNE SHELL-[Note that index entries are indicated by the .IX macro,-[MAKEINDEX]]::
+
+File: makeindex, Node: CREATING THE INDEX FILE IN THE BOURNE SHELL-[Note that index entries are indicated by the .IX macro,-[MAKEINDEX]], Previous: Note that index entries are indicated by the .IX macro,-[MAKEINDEX], Up: Note that index entries are indicated by the .IX macro,-[MAKEINDEX], Next: Note that index entries are indicated by the .IX macro,-[MAKEINDEX]
+CREATING THE INDEX FILE IN THE BOURNE SHELL
+
+File: makeindex, Node: To create an input file for makeindex, in the Bourne shell-[MAKEINDEX], Previous: Note that index entries are indicated by the .IX macro,-[MAKEINDEX], Up: MAKEINDEX, Next: Some sites will require ditroff instead of psroff. To-[MAKEINDEX]
+To create an input file for makeindex, in the Bourne shell
+ environment, do the equivalent at your site of the command:
+
+ psroff -ms -Tpsc -t sample.txt > /dev/null 2> sample.tmp
+
+
+File: makeindex, Node: Some sites will require ditroff instead of psroff. To-[MAKEINDEX], Previous: To create an input file for makeindex, in the Bourne shell-[MAKEINDEX], Up: MAKEINDEX, Next: With UCSF Enhanced troff/TRANSCRIPT, the -I option of-[MAKEINDEX]
+Some sites will require ditroff instead of psroff. To
+ filter out any genuine error messages, invoke grep(1):
+
+ grep '^IX: ' sample.tmp > sample.idx
+
+
+* Menu:
+
+* CREATING THE INDEX FILE USING UCSF ENHANCED TROFF/TRANSCRIPT-[Some sites will require ditroff instead of psroff. To-[MAKEINDEX]]::
+
+File: makeindex, Node: CREATING THE INDEX FILE USING UCSF ENHANCED TROFF/TRANSCRIPT-[Some sites will require ditroff instead of psroff. To-[MAKEINDEX]], Previous: Some sites will require ditroff instead of psroff. To-[MAKEINDEX], Up: Some sites will require ditroff instead of psroff. To-[MAKEINDEX], Next: Some sites will require ditroff instead of psroff. To-[MAKEINDEX]
+CREATING THE INDEX FILE USING UCSF ENHANCED TROFF/TRANSCRIPT
+
+
+File: makeindex, Node: With UCSF Enhanced troff/TRANSCRIPT, the -I option of-[MAKEINDEX], Previous: Some sites will require ditroff instead of psroff. To-[MAKEINDEX], Up: MAKEINDEX, Next: If it is wished to suppress the formatter output-[MAKEINDEX]
+With UCSF Enhanced troff/TRANSCRIPT, the -I option of
+ psroff(1L) can produce both formatter output and an index
+ file:
+
+ psroff -ms -I sample.inp -Tpsc sample.txt
+
+
+File: makeindex, Node: If it is wished to suppress the formatter output-[MAKEINDEX], Previous: With UCSF Enhanced troff/TRANSCRIPT, the -I option of-[MAKEINDEX], Up: MAKEINDEX, Next: Any of the above procedures leaves the input for makeindex-[MAKEINDEX]
+If it is wished to suppress the formatter output:
+
+ psroff -ms -I sample.inp -Tpsc -t sample.txt > /dev/null
+
+
+* Menu:
+
+* COMPLETING THE INDEX-[If it is wished to suppress the formatter output-[MAKEINDEX]]::
+
+File: makeindex, Node: COMPLETING THE INDEX-[If it is wished to suppress the formatter output-[MAKEINDEX]], Previous: If it is wished to suppress the formatter output-[MAKEINDEX], Up: If it is wished to suppress the formatter output-[MAKEINDEX], Next: If it is wished to suppress the formatter output-[MAKEINDEX]
+COMPLETING THE INDEX
+
+File: makeindex, Node: Any of the above procedures leaves the input for makeindex-[MAKEINDEX], Previous: If it is wished to suppress the formatter output-[MAKEINDEX], Up: MAKEINDEX, Next: This leaves troff(1)-ready output in the file sample.ind.-[MAKEINDEX]
+Any of the above procedures leaves the input for makeindex
+ in sample.inp. The next step is to invoke makeindex:
+
+ makeindex -s sample.ist sample.idx
+
+
+File: makeindex, Node: This leaves troff(1)-ready output in the file sample.ind.-[MAKEINDEX], Previous: Any of the above procedures leaves the input for makeindex-[MAKEINDEX], Up: MAKEINDEX, Next: ORDERING-[MAKEINDEX]
+This leaves troff(1)-ready output in the file sample.ind.
+
+
+File: makeindex, Node: ORDERING-[MAKEINDEX], Previous: This leaves troff(1)-ready output in the file sample.ind.-[MAKEINDEX], Up: MAKEINDEX, Next: By default, makeindex assumes word ordering; if the -l-[MAKEINDEX]
+ORDERING
+
+File: makeindex, Node: By default, makeindex assumes word ordering; if the -l-[MAKEINDEX], Previous: ORDERING-[MAKEINDEX], Up: MAKEINDEX, Next: Numbers are always sorted in numeric order. For instance,-[MAKEINDEX]
+By default, makeindex assumes word ordering; if the -l
+ option is in effect, letter ordering is used. In word ord-
+ ering, a blank precedes any letter in the alphabet, whereas
+ in letter ordering, it does not count at all. This is
+ illustrated by the following example:
+
+ word order letter order
+ sea lion seal
+ seal sea lion
+
+
+File: makeindex, Node: Numbers are always sorted in numeric order. For instance,-[MAKEINDEX], Previous: By default, makeindex assumes word ordering; if the -l-[MAKEINDEX], Up: MAKEINDEX, Next: Letters are first sorted without regard to case; when words-[MAKEINDEX]
+Numbers are always sorted in numeric order. For instance,
+
+ 9 (nine), 123
+ 10 (ten), see Derek, Bo
+
+
+File: makeindex, Node: Letters are first sorted without regard to case; when words-[MAKEINDEX], Previous: Numbers are always sorted in numeric order. For instance,-[MAKEINDEX], Up: MAKEINDEX, Next: A special symbol is defined here to be any character not-[MAKEINDEX]
+Letters are first sorted without regard to case; when words
+ are identical, the uppercase version precedes its lowercase
+ counterpart.
+
+
+File: makeindex, Node: A special symbol is defined here to be any character not-[MAKEINDEX], Previous: Letters are first sorted without regard to case; when words-[MAKEINDEX], Up: MAKEINDEX, Next: SPECIAL EFFECTS-[MAKEINDEX]
+A special symbol is defined here to be any character not
+ appearing in the union of digits and the English alphabetic
+ characters. Patterns starting with special symbols precede
+ numbers, which precede patterns starting with letters. As a
+ special case, a string starting with a digit but mixed with
+ non-digits is considered to be a pattern starting with a
+ special character.
+
+
+File: makeindex, Node: SPECIAL EFFECTS-[MAKEINDEX], Previous: A special symbol is defined here to be any character not-[MAKEINDEX], Up: MAKEINDEX, Next: Entries such as-[MAKEINDEX]
+SPECIAL EFFECTS
+
+File: makeindex, Node: Entries such as-[MAKEINDEX], Previous: SPECIAL EFFECTS-[MAKEINDEX], Up: MAKEINDEX, Next: It is possible to make an item appear in a designated form-[MAKEINDEX]
+Entries such as
+
+ \indexentry{alpha}{1}
+ \indexentry{alpha!beta}{3}
+ \indexentry{alpha!beta!gamma}{10}
+
+ in the input file will be converted to
+
+ \item alpha, 1
+ \subitem beta, 3
+ \subsubitem gamma, 10
+
+ in the output index file. Notice that the level symbol
+ (`!') is used above to delimit hierarchical levels.
+
+
+File: makeindex, Node: It is possible to make an item appear in a designated form-[MAKEINDEX], Previous: Entries such as-[MAKEINDEX], Up: MAKEINDEX, Next: The item, subitem, and subsubitem fields may have individual-[MAKEINDEX]
+It is possible to make an item appear in a designated form
+ by using the actual (`@') operator. For instance,
+
+ \indexentry{alpha@{\it alpha\/}}{1}
+
+ will become
+
+ \item {\it alpha\/}, 1
+
+ after processing. The pattern preceding `@' is used as sort
+ key, whereas the one following it is written to the output
+ file. Note that two appearances of the same key, one with
+ and one without the actual operator, are regarded as dis-
+ tinct entries.
+
+
+File: makeindex, Node: The item, subitem, and subsubitem fields may have individual-[MAKEINDEX], Previous: It is possible to make an item appear in a designated form-[MAKEINDEX], Up: MAKEINDEX, Next: This will be converted to-[MAKEINDEX]
+The item, subitem, and subsubitem fields may have individual
+ sort keys:
+
+ \indexentry{aa@{\it aa\/}!bb@{\it bb\/}!cc@{\it cc\/}}{1}
+
+
+File: makeindex, Node: This will be converted to-[MAKEINDEX], Previous: The item, subitem, and subsubitem fields may have individual-[MAKEINDEX], Up: MAKEINDEX, Next: It is possible to encapsulate a page number with a desig--[MAKEINDEX]
+This will be converted to
+
+ \item {\it aa}, 1
+ \subitem {\it bb}, 3
+ \subsubitem {\it cc}, 10
+
+
+File: makeindex, Node: It is possible to encapsulate a page number with a desig--[MAKEINDEX], Previous: This will be converted to-[MAKEINDEX], Up: MAKEINDEX, Next: The encap operator can also be used to create cross refer--[MAKEINDEX]
+It is possible to encapsulate a page number with a desig-
+ nated command using the encap (`|') operator:
+
+ \indexentry{alpha|bold}{1}
+
+ will be converted to
+
+ \item alpha, \bold{1}
+
+ where, with a suitable definition for TeX, \bold{n} will
+ expand to {\bf n}. In this example, the three output attri-
+ butes associated with page encapsulation encap_prefix,
+ encap_infix, and encap_suffix, correspond to backslash, left
+ brace, and right brace, respectively. This mechanism allows
+ page numbers to be set in different fonts. For example, the
+ page where the definition of a keyword appears can be in one
+ font, the location of a primary example can be in another
+ font, and other appearances in yet a third font.
+
+
+File: makeindex, Node: The encap operator can also be used to create cross refer--[MAKEINDEX], Previous: It is possible to encapsulate a page number with a desig--[MAKEINDEX], Up: MAKEINDEX, Next: Note that in a cross reference like this the page number-[MAKEINDEX]
+The encap operator can also be used to create cross refer-
+ ences in the index:
+
+ \indexentry{alpha|see{beta}}{1}
+
+ will become
+
+ \item alpha, \see{beta}{1}
+
+ in the output file, where
+
+ \see{beta}{1}
+
+ will expand to
+
+ {\it see\/} beta
+
+
+File: makeindex, Node: Note that in a cross reference like this the page number-[MAKEINDEX], Previous: The encap operator can also be used to create cross refer--[MAKEINDEX], Up: MAKEINDEX, Next: A pair of encap concatenated with range_open (`|(') and-[MAKEINDEX]
+Note that in a cross reference like this the page number
+ disappears.
+
+
+File: makeindex, Node: A pair of encap concatenated with range_open (`|(') and-[MAKEINDEX], Previous: Note that in a cross reference like this the page number-[MAKEINDEX], Up: MAKEINDEX, Next: Intermediate pages indexed by the same key will be merged-[MAKEINDEX]
+A pair of encap concatenated with range_open (`|(') and
+ range_close (`|)') creates an explicit page range:
+
+ \indexentry{alpha|(}{1}
+ \indexentry{alpha|)}{5}
+
+ will become
+
+ \item alpha, 1-5
+
+
+File: makeindex, Node: Intermediate pages indexed by the same key will be merged-[MAKEINDEX], Previous: A pair of encap concatenated with range_open (`|(') and-[MAKEINDEX], Up: MAKEINDEX, Next: Several potential problems are worth mentioning. First,-[MAKEINDEX]
+Intermediate pages indexed by the same key will be merged
+ into the range implicitly. This is especially useful when
+ an entire section about a particular subject is to be
+ indexed, in which case only the range opening and closing
+ operators need to be inserted at the beginning and end of
+ the section. Explicit page range formation can also include
+ an extra command to set the page range in a designated font:
+
+ \indexentry{alpha|(bold}{1}
+ \indexentry{alpha|)}{5}
+
+ will become
+
+ \item alpha, \bold{1--5}
+
+
+File: makeindex, Node: Several potential problems are worth mentioning. First,-[MAKEINDEX], Previous: Intermediate pages indexed by the same key will be merged-[MAKEINDEX], Up: MAKEINDEX, Next: Finally, every special symbol mentioned in this section may-[MAKEINDEX]
+Several potential problems are worth mentioning. First,
+ entries like
+
+ \indexentry{alpha|(}{1}
+ \indexentry{alpha|bold}{3}
+ \indexentry{alpha|)}{5}
+
+ will be interpreted as
+
+ \item alpha, \bold{3}, 1--5
+
+ but with a warning message in the transcript about
+ encountering an inconsistent page encapsulator. An explicit
+ range beginning in a Roman page number and ending in Arabic
+
+ is also considered an error. In this instance, (if possi-
+ ble) the range is broken into two subranges, one in Roman
+ and the other in Arabic. For instance,
+
+ \indexentry{alpha|(}{i}
+ \indexentry{alpha}{iv}
+ \indexentry{alpha}{3}
+ \indexentry{alpha|)}{7}
+
+ will be turned into
+
+ \item alpha, i--iv, 3--7
+
+ with a warning message in the transcript file complaining
+ about an illegal range formation.
+
+
+File: makeindex, Node: Finally, every special symbol mentioned in this section may-[MAKEINDEX], Previous: Several potential problems are worth mentioning. First,-[MAKEINDEX], Up: MAKEINDEX, Next: From version 2.11 of makeindex, the quote operator may quote-[MAKEINDEX]
+Finally, every special symbol mentioned in this section may
+ be escaped by the quote operator (`"'). Thus
+
+ \indexentry{alpha"@beta}{1}
+
+ will actually become
+
+ \item alpha@beta, 1
+
+ as a result of executing makeindex. The quoting power of
+ quote is eliminated if it is immediately preceded by escape
+ (`\'). For example,
+
+ \indexentry{f\"ur}{1}
+
+ becomes
+
+ \item f\"ur, 1
+
+ which represents an umlaut-accented `u' to the TeX family of
+ processors.
+
+
+File: makeindex, Node: From version 2.11 of makeindex, the quote operator may quote-[MAKEINDEX], Previous: Finally, every special symbol mentioned in this section may-[MAKEINDEX], Up: MAKEINDEX, Next: The sorting order is-[MAKEINDEX]
+From version 2.11 of makeindex, the quote operator may quote
+ any character in the range 1 ... 255. Character 0 is
+ excluded because it is used internally in the makeindex
+ source code as a string terminator. With this change, sort
+ keys can be created for all eight-bit characters except 0.
+
+File: makeindex, Node: The sorting order is-[MAKEINDEX], Previous: From version 2.11 of makeindex, the quote operator may quote-[MAKEINDEX], Up: MAKEINDEX, Next: Here is an example showing the indexing of all printable-[MAKEINDEX]
+The sorting order is
+
+ punctuation characters (in ASCII order),
+ digits,
+ control characters (1 ... 31),
+ space (32),
+ letters (ignoring case),
+ characters 127 ... 255.
+
+
+File: makeindex, Node: Here is an example showing the indexing of all printable-[MAKEINDEX], Previous: The sorting order is-[MAKEINDEX], Up: MAKEINDEX, Next: ASCII characters other than letters and digits, assuming the-[MAKEINDEX]
+Here is an example showing the indexing of all printable
+
+File: makeindex, Node: ASCII characters other than letters and digits, assuming the-[MAKEINDEX], Previous: Here is an example showing the indexing of all printable-[MAKEINDEX], Up: MAKEINDEX, Next: Characters in the actual fields following the `@' character-[MAKEINDEX]
+ASCII characters other than letters and digits, assuming the
+ default TeX format. For convenience, the page number refer-
+ ences are the corresponding ASCII ordinal values.
+
+ \indexentry{" @" (space)}{32}
+ \indexentry{"!@"! (exclamation point)}{33}
+ \indexentry{""@"" (quotation mark)}{34}
+ \indexentry{"#@"\# (sharp sign)}{35}
+ \indexentry{"$@"\$ (dollar sign)}{36}
+ \indexentry{"%@"\% (percent sign)}{37}
+ \indexentry{"&@"\& (ampersand)}{38}
+ \indexentry{"<@"$<$ (left angle bracket)}{60}
+ \indexentry{"=@"= (equals)}{61}
+ \indexentry{">@"$>$ (right angle bracket)}{62}
+ \indexentry{"?@"? (query)}{63}
+ \indexentry{"@@"@ (at sign)}{64}
+ \indexentry{"[@"[ (left square bracket)}{91}
+ \indexentry{"\@"\verb=\= (backslash)}{92}
+ \indexentry{"]@"] (right square bracket)}{93}
+ \indexentry{"^@"\verb=^= (caret)}{94}
+ \indexentry{"_@"\verb=_= (underscore)}{95}
+ \indexentry{"`@"\verb=~= (grave accent)}{96}
+ \indexentry{"{@"\"{ (left brace)}{123}
+ \indexentry{"|@"\verb="|= (vertical bar)}{124}
+ \indexentry{"}@"\"} (right brace)}{125}
+ \indexentry{"~@"\verb=~= (tilde)}{126}
+
+
+File: makeindex, Node: Characters in the actual fields following the `@' character-[MAKEINDEX], Previous: ASCII characters other than letters and digits, assuming the-[MAKEINDEX], Up: MAKEINDEX, Next: FILES-[MAKEINDEX]
+Characters in the actual fields following the `@' character
+ which have special significance to TeX must be represented
+ as control sequences, or as math mode characters. Note par-
+ ticularly how the entries for the at sign, left and right
+ braces, and the vertical bar, are coded. The index file
+ output by makeindex for this example looks like this:
+
+ \begin{theindex}
+
+ \item ! (exclamation point), 33
+ \item " (quotation mark), 34
+ \item \# (sharp sign), 35
+ \item \$ (dollar sign), 36
+ \item \% (percent sign), 37
+ \item \& (ampersand), 38
+ \item $<$ (left angle bracket), 60
+ \item = (equals), 61
+ \item $>$ (right angle bracket), 62
+ \item ? (query), 63
+ \item @ (at sign), 64
+ \item [ (left square bracket), 91
+ \item \verb=\= (backslash), 92
+ \item ] (right square bracket), 93
+ \item \verb=^= (caret), 94
+
+ \item \verb=_= (underscore), 95
+ \item \verb=~= (grave accent), 96
+ \item \{ (left brace), 123
+ \item \verb=|= (vertical bar), 124
+ \item \} (right brace), 125
+ \item \verb=~= (tilde), 126
+
+ \indexspace
+
+ \item (space), 32
+
+ \end{theindex}
+
+
+File: makeindex, Node: FILES-[MAKEINDEX], Previous: Characters in the actual fields following the `@' character-[MAKEINDEX], Up: MAKEINDEX, Next: SEE ALSO-[MAKEINDEX]
+FILES
+ /usr/local/bin/makeindex
+ executable file
+
+ /usr/local/lib/tex/macros/idxmac-amstex.tex
+ TeX macro file used by makeindex
+
+ /usr/local/lib/tex/macros/idxmac.tex
+ TeX macro file used by makeindex
+
+ /usr/local/lib/tex/macros/makeidx.doc
+ TeX macro file used by makeindex
+
+ /usr/local/lib/tex/macros/makeidx.sty
+ TeX macro file used by makeindex
+
+
+File: makeindex, Node: SEE ALSO-[MAKEINDEX], Previous: FILES-[MAKEINDEX], Up: MAKEINDEX, Next: UCSF Enhanced troff/TRANSCRIPT - An Overview, R. P. C. Rodg--[MAKEINDEX]
+SEE ALSO
+ ditroff(1L), latex(1L), make.index (1L), qsort(3), tex(1L),
+ troff(1L)
+
+
+File: makeindex, Node: UCSF Enhanced troff/TRANSCRIPT - An Overview, R. P. C. Rodg--[MAKEINDEX], Previous: SEE ALSO-[MAKEINDEX], Up: MAKEINDEX, Next: School of Pharmacy, San Francisco, 1990.-[MAKEINDEX]
+UCSF Enhanced troff/TRANSCRIPT - An Overview, R. P. C. Rodg-
+ ers and Conrad Huang, LSMB Technical Report 90-2, UCSF
+
+File: makeindex, Node: School of Pharmacy, San Francisco, 1990.-[MAKEINDEX], Previous: UCSF Enhanced troff/TRANSCRIPT - An Overview, R. P. C. Rodg--[MAKEINDEX], Up: MAKEINDEX, Next: Index Preparation and Processing, Pehong Chen and Michael A.-[MAKEINDEX]
+School of Pharmacy, San Francisco, 1990.
+
+
+File: makeindex, Node: Index Preparation and Processing, Pehong Chen and Michael A.-[MAKEINDEX], Previous: School of Pharmacy, San Francisco, 1990.-[MAKEINDEX], Up: MAKEINDEX, Next: Harrison, Software-[MAKEINDEX]
+Index Preparation and Processing, Pehong Chen and Michael A.
+
+File: makeindex, Node: Harrison, Software-[MAKEINDEX], Previous: Index Preparation and Processing, Pehong Chen and Michael A.-[MAKEINDEX], Up: MAKEINDEX, Next: September 1988.-[MAKEINDEX]
+Harrison, Software: Practice and Experience, 19(9), 897915,
+
+File: makeindex, Node: September 1988.-[MAKEINDEX], Previous: Harrison, Software-[MAKEINDEX], Up: MAKEINDEX, Next: Automating Index Preparation, Pehong Chen and Michael A.-[MAKEINDEX]
+September 1988.
+
+
+File: makeindex, Node: Automating Index Preparation, Pehong Chen and Michael A.-[MAKEINDEX], Previous: September 1988.-[MAKEINDEX], Up: MAKEINDEX, Next: Harrison. Technical Report 87/347, Computer Science Divi--[MAKEINDEX]
+Automating Index Preparation, Pehong Chen and Michael A.
+
+File: makeindex, Node: Harrison. Technical Report 87/347, Computer Science Divi--[MAKEINDEX], Previous: Automating Index Preparation, Pehong Chen and Michael A.-[MAKEINDEX], Up: MAKEINDEX, Next: MakeIndex-[MAKEINDEX]
+Harrison. Technical Report 87/347, Computer Science Divi-
+ sion, University of California, Berkeley, 1987 (a LaTeX
+ document supplied with makeindex).
+
+
+File: makeindex, Node: MakeIndex-[MAKEINDEX], Previous: Harrison. Technical Report 87/347, Computer Science Divi--[MAKEINDEX], Up: MAKEINDEX, Next: February 1987 (a LaTeX document supplied with makeindex).-[MAKEINDEX]
+MakeIndex: An Index Processor for LaTeX, Leslie Lamport,
+
+File: makeindex, Node: February 1987 (a LaTeX document supplied with makeindex).-[MAKEINDEX], Previous: MakeIndex-[MAKEINDEX], Up: MAKEINDEX, Next: Tools for Printing Indices, Jon L. Bentley and Brian W. Ker--[MAKEINDEX]
+February 1987 (a LaTeX document supplied with makeindex).
+
+
+File: makeindex, Node: Tools for Printing Indices, Jon L. Bentley and Brian W. Ker--[MAKEINDEX], Previous: February 1987 (a LaTeX document supplied with makeindex).-[MAKEINDEX], Up: MAKEINDEX, Next: Computing Science Technical Report No. 128, AT&T Bell-[MAKEINDEX]
+Tools for Printing Indices, Jon L. Bentley and Brian W. Ker-
+ nighan, Electronic Publishing - Origination, Dissemination,
+ and Design, 1(1), 318, June 1988 (also available as:
+
+
+File: makeindex, Node: Computing Science Technical Report No. 128, AT&T Bell-[MAKEINDEX], Previous: Tools for Printing Indices, Jon L. Bentley and Brian W. Ker--[MAKEINDEX], Up: MAKEINDEX, Next: Laboratories, Murray Hill, NJ 07974, 1986).-[MAKEINDEX]
+Computing Science Technical Report No. 128, AT&T Bell
+
+File: makeindex, Node: Laboratories, Murray Hill, NJ 07974, 1986).-[MAKEINDEX], Previous: Computing Science Technical Report No. 128, AT&T Bell-[MAKEINDEX], Up: MAKEINDEX, Next: AUTHOR-[MAKEINDEX]
+Laboratories, Murray Hill, NJ 07974, 1986).
+
+
+File: makeindex, Node: AUTHOR-[MAKEINDEX], Previous: Laboratories, Murray Hill, NJ 07974, 1986).-[MAKEINDEX], Up: MAKEINDEX, Next: Pehong Chen, Chen & Harrison International Systems, Inc.-[MAKEINDEX]
+AUTHOR
+
+File: makeindex, Node: Pehong Chen, Chen & Harrison International Systems, Inc.-[MAKEINDEX], Previous: AUTHOR-[MAKEINDEX], Up: MAKEINDEX, Next: Palo Alto, California, USA <chen@renoir.berkeley.edu>.-[MAKEINDEX]
+Pehong Chen, Chen & Harrison International Systems, Inc.
+
+File: makeindex, Node: Palo Alto, California, USA <chen@renoir.berkeley.edu>.-[MAKEINDEX], Previous: Pehong Chen, Chen & Harrison International Systems, Inc.-[MAKEINDEX], Up: MAKEINDEX, Next: Manual page extensively revised and corrected, and troff(1)-[MAKEINDEX]
+Palo Alto, California, USA <chen@renoir.berkeley.edu>.
+
+File: makeindex, Node: Manual page extensively revised and corrected, and troff(1)-[MAKEINDEX], Previous: Palo Alto, California, USA <chen@renoir.berkeley.edu>.-[MAKEINDEX], Up: MAKEINDEX, Next: ACKNOWLEDGMENTS-[MAKEINDEX]
+Manual page extensively revised and corrected, and troff(1)
+ examples created by Rick P. C. Rodgers, UCSF School of Phar-
+ macy <rodgers@cca.ucsf.edu>.
+
+
+File: makeindex, Node: ACKNOWLEDGMENTS-[MAKEINDEX], Previous: Manual page extensively revised and corrected, and troff(1)-[MAKEINDEX], Up: MAKEINDEX, Next: Leslie Lamport contributed significantly to the design.-[MAKEINDEX]
+ACKNOWLEDGMENTS
+
+File: makeindex, Node: Leslie Lamport contributed significantly to the design.-[MAKEINDEX], Previous: ACKNOWLEDGMENTS-[MAKEINDEX], Up: MAKEINDEX, Next: Michael Harrison provided valuable comments and suggestions.-[MAKEINDEX]
+Leslie Lamport contributed significantly to the design.
+
+File: makeindex, Node: Michael Harrison provided valuable comments and suggestions.-[MAKEINDEX], Previous: Leslie Lamport contributed significantly to the design.-[MAKEINDEX], Up: MAKEINDEX, Next: Nelson Beebe improved on the portable version, and maintains-[MAKEINDEX]
+Michael Harrison provided valuable comments and suggestions.
+
+File: makeindex, Node: Nelson Beebe improved on the portable version, and maintains-[MAKEINDEX], Previous: Michael Harrison provided valuable comments and suggestions.-[MAKEINDEX], Up: MAKEINDEX, Next: Brosig contributed to the German word ordering. The modifi--[MAKEINDEX]
+Nelson Beebe improved on the portable version, and maintains
+ the source distribution for the TeX Users Group. Andreas
+
+File: makeindex, Node: Brosig contributed to the German word ordering. The modifi--[MAKEINDEX], Previous: Nelson Beebe improved on the portable version, and maintains-[MAKEINDEX], Up: MAKEINDEX, Next: TRIB files in the makeindex source distribution record other-[MAKEINDEX]
+Brosig contributed to the German word ordering. The modifi-
+ cation to the -ms macros was derived from a method proposed
+ by Ravi Sethi of AT&T Bell Laboratories. The LOG and CON-
+
+File: makeindex, Node: TRIB files in the makeindex source distribution record other-[MAKEINDEX], Previous: Brosig contributed to the German word ordering. The modifi--[MAKEINDEX], Up: MAKEINDEX, Next: MAKEINDEX
+TRIB files in the makeindex source distribution record other
+ contributions.
+
+Tag table:
+File: makeindex, Node: Top210
+File: makeindex, Node: MAKEINDEX319
+File: makeindex, Node: NAME-[MAKEINDEX]5198
+File: makeindex, Node: SYNOPSIS-[MAKEINDEX]5388
+File: makeindex, Node: DESCRIPTION-[MAKEINDEX]5625
+File: makeindex, Node: The program makeindex is a general purpose hierarchical-[MAKEINDEX]5863
+File: makeindex, Node: Kernighan, which is specific to troff(1), generates non--[MAKEINDEX]6773
+File: makeindex, Node: The formats of the input and output files are specified in a-[MAKEINDEX]7285
+File: makeindex, Node: Unless specified explicitly, the base name of the first-[MAKEINDEX]7711
+File: makeindex, Node: For important notes on how to select index keywords, see the-[MAKEINDEX]8348
+File: makeindex, Node: OPTIONS-[MAKEINDEX]8806
+File: makeindex, Node: STYLE FILE-[MAKEINDEX]12379
+File: makeindex, Node: The style file informs makeindex about the format of the-[MAKEINDEX]12615
+File: makeindex, Node: The style file contains a list of <specifier, attribute>-[MAKEINDEX]13090
+File: makeindex, Node: Pairs do not have to appear in any particular order. A line-[MAKEINDEX]13491
+File: makeindex, Node: A literal backslash or quote must be escaped (by a-[MAKEINDEX]14140
+File: makeindex, Node: INPUT STYLE SPECIFIERS-[A literal backslash or quote must be escaped (by a-[MAKEINDEX]]14815
+File: makeindex, Node: OUTPUT STYLE SPECIFIERS-[A literal backslash or quote must be escaped (by a-[MAKEINDEX]]17463
+File: makeindex, Node: EXAMPLES-[MAKEINDEX]23832
+File: makeindex, Node: TeX EXAMPLE-[EXAMPLES-[MAKEINDEX]]24130
+File: makeindex, Node: The following example shows a style file called book.ist,-[MAKEINDEX]24327
+File: makeindex, Node: Assuming that a particular book style requires the index (as-[MAKEINDEX]24905
+File: makeindex, Node: Here a non-default output file name is used to avoid-[MAKEINDEX]25469
+File: makeindex, Node: TROFF EXAMPLE-[Here a non-default output file name is used to avoid-[MAKEINDEX]]26074
+File: makeindex, Node: A sample control file for creating an index, which we will-[MAKEINDEX]26429
+File: makeindex, Node: The local macro package may require modification, as in this-[MAKEINDEX]27700
+File: makeindex, Node: Note that index entries are indicated by the .IX macro,-[MAKEINDEX]28967
+File: makeindex, Node: CREATING THE INDEX FILE IN THE BOURNE SHELL-[Note that index entries are indicated by the .IX macro,-[MAKEINDEX]]29585
+File: makeindex, Node: To create an input file for makeindex, in the Bourne shell-[MAKEINDEX]29970
+File: makeindex, Node: Some sites will require ditroff instead of psroff. To-[MAKEINDEX]30430
+File: makeindex, Node: CREATING THE INDEX FILE USING UCSF ENHANCED TROFF/TRANSCRIPT-[Some sites will require ditroff instead of psroff. To-[MAKEINDEX]]31083
+File: makeindex, Node: With UCSF Enhanced troff/TRANSCRIPT, the -I option of-[MAKEINDEX]31486
+File: makeindex, Node: If it is wished to suppress the formatter output-[MAKEINDEX]31920
+File: makeindex, Node: COMPLETING THE INDEX-[If it is wished to suppress the formatter output-[MAKEINDEX]]32422
+File: makeindex, Node: Any of the above procedures leaves the input for makeindex-[MAKEINDEX]32748
+File: makeindex, Node: This leaves troff(1)-ready output in the file sample.ind.-[MAKEINDEX]33167
+File: makeindex, Node: ORDERING-[MAKEINDEX]33400
+File: makeindex, Node: By default, makeindex assumes word ordering; if the -l-[MAKEINDEX]33684
+File: makeindex, Node: Numbers are always sorted in numeric order. For instance,-[MAKEINDEX]34335
+File: makeindex, Node: Letters are first sorted without regard to case; when words-[MAKEINDEX]34725
+File: makeindex, Node: A special symbol is defined here to be any character not-[MAKEINDEX]35139
+File: makeindex, Node: SPECIAL EFFECTS-[MAKEINDEX]35719
+File: makeindex, Node: Entries such as-[MAKEINDEX]35923
+File: makeindex, Node: It is possible to make an item appear in a designated form-[MAKEINDEX]36514
+File: makeindex, Node: The item, subitem, and subsubitem fields may have individual-[MAKEINDEX]37214
+File: makeindex, Node: This will be converted to-[MAKEINDEX]37561
+File: makeindex, Node: It is possible to encapsulate a page number with a desig--[MAKEINDEX]37958
+File: makeindex, Node: The encap operator can also be used to create cross refer--[MAKEINDEX]38943
+File: makeindex, Node: Note that in a cross reference like this the page number-[MAKEINDEX]39481
+File: makeindex, Node: A pair of encap concatenated with range_open (`|(') and-[MAKEINDEX]39834
+File: makeindex, Node: Intermediate pages indexed by the same key will be merged-[MAKEINDEX]40325
+File: makeindex, Node: Several potential problems are worth mentioning. First,-[MAKEINDEX]41148
+File: makeindex, Node: Finally, every special symbol mentioned in this section may-[MAKEINDEX]42279
+File: makeindex, Node: From version 2.11 of makeindex, the quote operator may quote-[MAKEINDEX]43036
+File: makeindex, Node: The sorting order is-[MAKEINDEX]43543
+File: makeindex, Node: Here is an example showing the indexing of all printable-[MAKEINDEX]44021
+File: makeindex, Node: ASCII characters other than letters and digits, assuming the-[MAKEINDEX]44320
+File: makeindex, Node: Characters in the actual fields following the `@' character-[MAKEINDEX]45783
+File: makeindex, Node: FILES-[MAKEINDEX]47194
+File: makeindex, Node: SEE ALSO-[MAKEINDEX]47829
+File: makeindex, Node: UCSF Enhanced troff/TRANSCRIPT - An Overview, R. P. C. Rodg--[MAKEINDEX]48135
+File: makeindex, Node: School of Pharmacy, San Francisco, 1990.-[MAKEINDEX]48444
+File: makeindex, Node: Index Preparation and Processing, Pehong Chen and Michael A.-[MAKEINDEX]48764
+File: makeindex, Node: Harrison, Software-[MAKEINDEX]49001
+File: makeindex, Node: September 1988.-[MAKEINDEX]49250
+File: makeindex, Node: Automating Index Preparation, Pehong Chen and Michael A.-[MAKEINDEX]49504
+File: makeindex, Node: Harrison. Technical Report 87/347, Computer Science Divi--[MAKEINDEX]49798
+File: makeindex, Node: MakeIndex-[MAKEINDEX]50134
+File: makeindex, Node: February 1987 (a LaTeX document supplied with makeindex).-[MAKEINDEX]50467
+File: makeindex, Node: Tools for Printing Indices, Jon L. Bentley and Brian W. Ker--[MAKEINDEX]50753
+File: makeindex, Node: Computing Science Technical Report No. 128, AT&T Bell-[MAKEINDEX]51214
+File: makeindex, Node: Laboratories, Murray Hill, NJ 07974, 1986).-[MAKEINDEX]51519
+File: makeindex, Node: AUTHOR-[MAKEINDEX]51734
+File: makeindex, Node: Pehong Chen, Chen & Harrison International Systems, Inc.-[MAKEINDEX]52002
+File: makeindex, Node: Palo Alto, California, USA <chen@renoir.berkeley.edu>.-[MAKEINDEX]52275
+File: makeindex, Node: Manual page extensively revised and corrected, and troff(1)-[MAKEINDEX]52608
+File: makeindex, Node: ACKNOWLEDGMENTS-[MAKEINDEX]52944
+File: makeindex, Node: Leslie Lamport contributed significantly to the design.-[MAKEINDEX]53238
+File: makeindex, Node: Michael Harrison provided valuable comments and suggestions.-[MAKEINDEX]53532
+File: makeindex, Node: Nelson Beebe improved on the portable version, and maintains-[MAKEINDEX]53871
+File: makeindex, Node: Brosig contributed to the German word ordering. The modifi--[MAKEINDEX]54272
+File: makeindex, Node: TRIB files in the makeindex source distribution record other-[MAKEINDEX]54735
+
+End tag table
diff --git a/indexing/makeindex/doc/makeindex.l b/indexing/makeindex/doc/makeindex.l
new file mode 100644
index 0000000000..b3c85d9680
--- /dev/null
+++ b/indexing/makeindex/doc/makeindex.l
@@ -0,0 +1,1204 @@
+.if t .ds LX L\\h'-0.36m'\\v'-0.15v'\\s-2A\\s+2\\h'-0.15m'\\v'0.15v'T\\h'-0.1667m'\\v'0.20v'E\\v'-0.20v'\\h'-0.125m'X
+.if n .ds LX LaTeX
+.if t .ds TX T\\h'-0.1667m'\\v'0.20v'E\\v'-0.20v'\\h'-0.125m'X
+.if n .ds TX TeX
+.ds Ts T\s-2RAN\s+2S\s-2CRIPT\s+2
+.if t .ds Uc \fIU\\h'-0.12m'C\\v'0.27m'\\h'-.23m'S\\h'-0.11m'F\\v'-0.27m'\fP
+.if n .ds Uc UCSF
+.ds Et \\f(boE\\h'-0.1667m'\\v'-0.20v'T\\v'0.20v'\\h'-0.125m'T\\fP
+.TH MAKEINDEX 1L "10 December 1991"
+.\"=====================================================================
+.SH NAME
+makeindex \- a general purpose, formatter-independent index processor
+.\"=====================================================================
+.SH SYNOPSIS
+.B makeindex
+.BR [ \-c ]
+.BR [ \-g ]
+.BR [ \-i ]
+.BR [ \-l ]
+.BR [ \-o
+.IR ind ]
+.BR [ \-p
+.IR num ]
+.BR [ \-q ]
+.BR [ \-r ]
+.BR [ \-s
+.IR sfile ]
+.BR [ \-t
+.IR log ]
+.BI [ idx0
+.I idx1
+.IR idx2 .\|.\|.]
+.\"=====================================================================
+.SH DESCRIPTION
+The program
+.I makeindex
+is a general purpose hierarchical index generator; it accepts one or
+more input files (often produced by a text formatter such as \*(TX
+.RI ( tex (1L))
+or
+.IR troff (1),
+sorts the entries, and produces an output file which can be formatted.
+The index can have up to three levels (0, 1, and 2) of subitem nesting.
+The way in which words are flagged for indexing within the main document
+is specific to the formatter used;
+.I makeindex
+does
+.I not
+automate the process of selecting these words. As the output index
+is hierarchical,
+.I makeindex
+can be considered complimentary to the
+.IR awk (1)-based
+.IR make.index (1L)
+system of Bentley and Kernighan, which is specific to
+.IR troff (1),
+generates non-hierarchical indices, and employs a much simpler syntax
+for indicating index entries. For illustration of use with
+.I troff
+and
+.IR \*(TX ,
+see the section \s-2EXAMPLES\s+2 below.
+.LP
+The formats of the input and output files are
+specified in a style file; by default, input is assumed to be a
+.I \&.idx
+file, as generated by \*(LX.
+.LP
+Unless specified explicitly, the base name of the first input file
+.RI ( idx0 )
+is used to determine the names of other files. For each input file
+name specified, a file of that name is sought. If this file is not
+found and the file name has no extension, the extension
+.I \&.idx
+is appended. If no file with this name is found,
+.I makeindex
+aborts.
+.LP
+If exactly one input file was given and no explicit style file was
+specified using
+.BR \-s ,
+.I makeindex
+uses a file with the extension
+.I \&.mst
+as default style file (when present).
+.LP
+For important notes on how to select index keywords, see the document
+by Lamport cited below. As an issue separate from selecting index
+keywords, a systematic mechanism for placing index terms in a document
+is suggested in
+.IR "Index Preparation and Processing" ,
+a paper cited below.
+.\"=====================================================================
+.SH OPTIONS
+.TP 10
+.B \-c
+Compress intermediate blanks (ignoring leading and trailing blanks and
+tabs). By default, blanks in the index key are retained.
+.TP 10
+.B \-g
+Employ German word ordering in the index, in accord with rules set forth
+in DIN 5007. By default,
+.I makeindex
+employs a word ordering in which precedence is: symbols, numbers,
+uppercase letters, lowercase letters. The sequence in German word
+ordering is: symbols, lowercase letters, uppercase letters, numbers.
+Additionally, this option enables
+.I makeindex
+to recognize the German \*(TX-commands {"a, "o, "u and "s} as {ae, oe,
+ue and ss} during the sorting of the entries. The quote character
+must be redefined in a style file (for example, redefine quote
+as '+'). If the quote character is not redefined,
+.I makeindex
+will produce an error message and abort.
+.TP 10
+.B \-i
+Take input from
+.IR stdin .
+When this option is specified and
+.B \-o
+is not, output is written to
+.IR stdout .
+.TP 10
+.B \-l
+Letter ordering; by default, word ordering is used (see
+the \s-2ORDERING\s+2 section).
+.TP 10
+.BI \-o " ind"
+Employ
+.I ind
+as the output index file. By default, the file name
+is created by appending the extension
+.I .ind
+to the base name of
+the first input file
+.RI ( idx0 ).
+.TP 10
+.BI \-p " num"
+Set the starting page number of the output index file to be
+.I num
+(useful when the index file is to be formatted separately). The
+argument
+.I num
+may be numerical or one of the following:
+.RS
+.TP 10
+.I any
+The starting page is the last source page number plus 1.
+.TP
+.I odd
+The starting page is the first odd page following the last source page
+number.
+.TP
+.I even
+The starting page is the first even page following the last source
+page number.
+.RE
+.IP
+The last source page is obtained by searching backward in the log file
+for the first instance of a number included within paired square
+brackets
+.RB ( [ .\|.\|. ] ).
+If a page number is missing or the log file is not found, no attempt
+will be made to set the starting page number. The source log file
+name is determined by appending the extension
+.I \&.log
+to the base name of the first input file
+.RI ( idx0 ).
+.TP 10
+.B \-q
+Quiet mode; send no messages to
+.IR stderr .
+By default, progress
+and error messages are sent to
+.I stderr
+as well as to the
+transcript file.
+.TP 10
+.B \-r
+Disable implicit page range formation; page ranges must be created by
+using explicit range operators; see \s-2SPECIAL EFFECTS\s+2 below. By
+default, three or more successive pages are automatically abbreviated
+as a range (e.g. 1\(em5).
+.TP 10
+.BR \-s " sty"
+Employ
+.I sty
+as the style file (no default). The environment
+variable \s-2INDEXSTYLE\s+2 defines the path where the style file
+should be found.
+.TP 10
+.BR \-t " log"
+Employ
+.I log
+as the transcript file. By default, the file name is
+created by appending the extension
+.I .ilg
+to the base name of the
+first input file
+.RI ( idx0 ).
+.\"=====================================================================
+.SH "STYLE FILE"
+The style file informs
+.I makeindex
+about the format of the
+.I \&.idx
+input files and the intended format of the final output file; examples
+appear below. This file can reside anywhere in the path defined by
+the environment variable \s-2INDEXSTYLE\s+2. The style file contains
+a list of
+.RI < specifier , " attribute" >
+pairs. There are two types of specifiers: input and output.
+Pairs do not have to appear in any particular order.
+A line begun by `%' is a comment. In the following list of
+specifiers and arguments, <string> is an arbitrary string delimited by
+double quotes (".\|.\|."), <char> is a single letter embraced by
+single quotes ('.\|.\|.'), and <number> is a nonnegative integer.
+The maximum length of a <string> is 2048. A literal backslash or
+quote must be escaped (by a backslash). Anything not specified in the
+style file will be assigned a default value, which is shown at the
+head of the rightmost column.
+.\"----------------------------------------------------------------------
+.SS "INPUT STYLE SPECIFIERS"
+.TP 25
+.BR actual " <char>"
+\'@\'
+.RS
+Symbol indicating that the next entry is to appear in the output file.
+.RE
+.TP
+.BR arg_close " <char>"
+\'}\'
+.RS
+Closing delimiter for the index entry argument.
+.RE
+.TP
+.BR arg_open " <char>"
+\'{\'
+.RS
+Opening delimiter for the index entry argument.
+.RE
+.TP
+.BR encap " <char>"
+\'|\'
+.RS
+Symbol indicating that the rest of the argument list
+is to be used as the encapsulating command for the page number.
+.RE
+.TP
+.BR escape " <char>"
+\'\\\\\'
+.RS
+Symbol which escapes the following letter, unless its preceding letter
+is
+.BR escape .
+Note:
+.B quote
+is used to escape the letter which immediately follows it, but if it is
+preceded by
+.BR escape ,
+it is treated as a ordinary character. These two symbols
+.I must
+be distinct.
+.RE
+.TP
+.BR keyword " <string>"
+"\\\\indexentry"
+.RS
+Command which tells
+.I makeindex
+that its argument is an index entry.
+.RE
+.TP
+.BR level " <char>"
+\'!\'
+.RS
+Delimiter denoting a new level of subitem.
+.RE
+.TP
+.BR quote " <char>"
+\'"\'
+.RS
+Note:
+.B quote
+is used to escape the letter which immediately follows it, but if it is
+preceded by
+.BR escape ,
+it is treated as a ordinary character. These two symbols
+.I must
+be distinct.
+.RE
+.TP
+.BR range_close " <char>"
+\')\'
+.RS
+Closing delimiter indicating the end of an explicit page range.
+.RE
+.TP
+.BR range_open " <char>"
+\'(\'
+.RS
+Opening delimiter indicating the beginning of an explicit page range.
+.RE
+.\"---------------------------------------------------------------------
+.SS "OUTPUT STYLE SPECIFIERS"
+.TP 25
+.BR preamble " <string>"
+"\\\\begin{theindex}\\n"
+.RS
+Preamble of output file.
+.RE
+.TP
+.BR postamble " <string>"
+"\\n\\n\\\\end{theindex}\\n"
+.RS
+Postamble of output file.
+.RE
+.TP
+.BR setpage_prefix " <string>"
+"\\n \\\\setcounter{page}{"
+.RS
+Prefix of command which sets the starting page number.
+.RE
+.TP
+.BR setpage_suffix " <string>"
+"}\\n"
+.RS
+Suffix of command which sets the starting page number.
+.RE
+.TP
+.BR group_skip " <string>"
+"\\n\\n \\\\indexspace\\n"
+.RS
+Vertical space to be inserted before a new group begins.
+.RE
+.TP
+.BR headings_flag " <string>"
+0
+.RS
+Flag indicating treatment of new group headers, which are inserted
+when before a new group (symbols, numbers, and the 26 letters):
+positive values cause an uppercase letter to be inserted between
+prefix and suffix, and negative values cause a lowercase letter to be
+inserted (default is 0, which produces no header).
+.RE
+.TP
+.BR heading_prefix " <string>"
+""
+.RS
+Header prefix to be inserted before a new letter begins.
+.RE
+.TP
+.BR symhead_positive " <string>"
+"Symbols"
+.RS
+Heading for symbols to be inserted if
+.B headings_flag
+is positive.
+.RE
+.TP
+.BR symhead_negative " <string>"
+"symbols"
+.RS
+Heading for symbols to be inserted if
+.B headings_flag
+is negative.
+.RE
+.TP
+.BR numhead_positive " <string>"
+"Numbers"
+.RS
+Heading for numbers to be inserted if
+.B headings_flag
+is positive.
+.RE
+.TP
+.BR numhead_negative " <string>"
+"numbers"
+.RS
+Heading for numbers to be inserted if
+.B headings_flag
+is negative.
+.RE
+.TP
+.BR item_0 " <string>"
+"\\n \\\\item "
+.RS
+Command to be inserted between two primary (level 0) items.
+.RE
+.TP
+.BR item_1 " <string>"
+"\\n \\\\subitem "
+.RS
+Command to be inserted between two secondary (level 1) items.
+.RE
+.TP
+.BR item_2 " <string>"
+"\\n \\\\subsubitem "
+.RS
+Command to be inserted between two level 2 items.
+.RE
+.TP
+.B item_01 " <string>"
+"\\n \\\\subitem "
+.RS
+Command to be inserted between a level 0 item and a level 1 item.
+.RE
+.TP
+.BR item_x1 " <string>"
+"\\n \\\\subitem "
+.RS
+Command to be inserted between a level 0 item and a level 1 item,
+where the level 0 item does not have associated page numbers.
+.RE
+.TP
+.BR item_12 " <string>"
+"\\n \\\\subsubitem "
+.RS
+Command to be inserted between a level 1 item and a level 2 item.
+.RE
+.TP
+.BR item_x2 " <string>"
+"\\n \\\\subsubitem "
+.RS
+Command to be inserted between a level 1 item and a level 2 item,
+where the level 1 item does not have associated page numbers.
+.RE
+.TP
+.BR delim_0 " <string>"
+", "
+.RS
+Delimiter to be inserted between a level 0 key and its first page number
+(default: comma followed by a blank).
+.RE
+.TP
+.BR delim_1 " <string>"
+", "
+.RS
+Delimiter to be inserted between a level 1 key and its first page number
+(default: comma followed by a blank).
+.RE
+.TP
+.BR delim_2 " <string>"
+", "
+.RS
+Delimiter to be inserted between a level 2 key and its first page number
+(default: comma followed by a blank).
+.RE
+.TP
+.BR delim_n " <string>"
+", "
+.RS
+Delimiter to be inserted between two page numbers for the same key
+in any level (default: comma followed by a blank).
+.RE
+.TP
+.BR delim_r " <string>"
+"--"
+.RS
+Delimiter to be inserted between the starting and ending page numbers
+of a range.
+.RE
+.TP
+.BR delim_t " <string>"
+""
+.RS
+Delimiter to be inserted at the end of a page list. This delimiter
+has no effect on entries which have no associated page list.
+.RE
+.TP
+.BR encap_prefix " <string>"
+"\\\\"
+.RS
+First part of prefix for the command which encapsulates the page number.
+.RE
+.TP
+.BR encap_infix " <string>"
+"{"
+.RS
+Second part of prefix for the command which encapsulates the page
+number.
+.RE
+.TP
+.BR encap_suffix " <string>"
+"}".
+.RS
+Suffix for the command which encapsulates the page number.
+.RE
+.TP
+.BR line_max " <number>"
+72
+.RS
+Maximum length of a line in the output, beyond which a line wraps.
+.RE
+.TP
+.BR indent_space " <string>"
+"\\t\\t"
+.RS
+Space to be inserted in front of a wrapped line (default: two tabs).
+.RE
+.TP
+.BR indent_length " <number>"
+16
+.RS
+Length of
+.B indent_space
+(default: 16, equivalent to 2 tabs).
+.RE
+.TP
+.BR suffix_2p " <string>"
+""
+.RS
+Delimiter to replace the range delimiter and the second page number of
+a two page list. When present, it overrides
+.BR delim_r .
+Example: "f.".
+.RE
+.TP
+.BR suffix_3p " <string>"
+""
+.RS
+Delimiter to replace the range delimiter and the second page number of
+a three page list. When present, it overrides
+.B delim_r
+and
+.BR suffix_mp .
+Example: "ff.".
+.RE
+.TP
+.BR suffix_mp " <string>"
+""
+.RS
+Delimiter to replace the range delimiter and the second page number of
+a multiple page list (three or more pages). When present, it overrides
+.BR delim_r .
+Example: "f.".
+.RE
+.\"=====================================================================
+.SH EXAMPLES
+.\"---------------------------------------------------------------------
+.SS "\*(TX EXAMPLE"
+The following example shows a style file called
+.IR book.ist ,
+which defines an index for a book which can be formatted independently
+of the main source:
+.LP
+.RS
+.nf
+\fCpreamble
+"\\\\documentstyle[12pt]{book}
+\\\\begin{document}
+\\\\begin{theindex}
+{\\\\small\\n"
+postamble
+"\\n\\n}
+\\\\end{theindex}
+\\\\end{document}\\n\fP"
+.fi
+.RE
+.LP
+Assuming that a particular book style requires the index (as well as any
+chapters) to start from an odd page number, and that the input file is
+named
+.IR foo.idx ,
+the following command line produces output in file
+.IR footmp.ind :
+.LP
+.RS
+\fCmakeindex \-s book.ist \-o footmp.ind \-p odd foo\fP
+.RE
+.LP
+Here a non-default output file name is used to avoid clobbering the
+output for the book itself (presumably
+.IR foo.dvi ,
+which would have been the default name for the index output file!).
+.\"---------------------------------------------------------------------
+.SS "TROFF EXAMPLE"
+A sample control file for creating an index, which we will assume
+resides in the file
+.IR sample.ist :
+.LP
+.RS
+.nf
+\&\fCkeyword "IX:"
+\&preamble
+\&".\\\\\\" start of index output
+\&\\".\\\\\\" enter two column mode
+\&.2C
+\&.SH
+\&.ce
+\&INDEX
+\&.XS
+\&INDEX
+\&.XE
+\&.R
+\&.ps 9p
+\&.vs 11p
+\&.sp
+\&.de I1
+\&.ti 0.25i
+\&..
+\&.de I2
+\&.ti 0.5i
+\&.."
+\&postamble "\\n.\\\\\\" end of index output"
+\&setpage_prefix "\\n.nr % "
+\&setpage_suffix ""
+\&group_skip "\\n.sp 1.0"
+\&headings_flag 1
+\&heading_prefix "\\n.IS\\n"
+\&heading_suffix "\\n.IE"
+\&item_0 "\\n.br\\n"
+\&item_1 "\\n.I1\\n"
+\&item_2 "\\n.I2\\n"
+\&item_01 "\\n.I1\\n"
+\&item_x1 "\\n.I1\\n"
+\&item_12 "\\n.I2\\n"
+\&item_x2 "\\n.I2\\n"
+\&delim_0 ", "
+\&delim_1 ", "
+\&delim_2 ", "
+\&delim_r "-"
+\&delim_t "."
+\&encap_prefix "\\\\fB"
+\&encap_infix ""
+\&encap_suffix "\\\\fP"
+\&indent_space ""
+\&indent_length 0\fP
+.fi
+.RE
+.LP
+The local macro package may require modification, as in this example
+of an extension to the
+.B \-ms
+macros (note that at some sites, this macro should
+.I replace
+a pre-existing macro of the same name):
+.LP
+.RS
+.nf
+\fC\&.\" IX - index words to stderr
+\&.de IX
+\&.ie '\\\\n(.z'' .tm IX: \\\\$1 \\\\$2 \\\\$3 \\\\$4 \\\\$5 \\\\$6 \\\\$7 \\\\$8 \\\\$9 {\\\\n(PN}
+\&.el \\\\!.IX \\\\$1 \\\\$2 \\\\$3 \\\\$4 \\\\$5 \\\\$6 \\\\$7 \\\\$8 \\\\$9 {\\\\n(PN}
+\&..\fP
+.fi
+.RE
+.LP
+(note that the string {\fC\\\\n(PN\fP} is separated from the rest of the
+line by a tab.
+If your local macro package does not contain this extension,
+just include those lines at the beginning of your file.
+Here is a simple
+.IR troff (1)
+input file, which we will assume is named
+.IR sample.txt :
+.LP
+.RS
+.nf
+\fC\&This is a sample file to test the \\fImakeindex\\fP(1L)
+\&program, and see
+\&.IX {indexing!programs!C language}
+\&.IX {makeindex@\\fImakeindex\\fP(1L)}
+\&.bp
+\&.rs
+\&.IX {Knuth}
+\&.IX {typesetting!computer-aided}
+\&how well it functions in the \\fItroff\\fP(1) environment.\fP
+.fi
+.RE
+.LP
+Note that index entries are indicated by the
+.B .IX
+macro, which
+causes the following text to be written to
+.I stdout
+along with the
+current page number.
+.\"---------------------------------------------------------------------
+.SS "CREATING THE INDEX FILE IN THE BOURNE SHELL"
+To create an input file for
+.IR makeindex ,
+.B "in the Bourne shell"
+environment, do the equivalent at your site of the command:
+.LP
+.nf
+\fCpsroff -ms -Tpsc -t sample.txt > /dev/null 2> sample.tmp\fP
+.fi
+.LP
+Some sites will require
+.I ditroff
+instead of
+.IR psroff .
+To filter out any genuine error messages, invoke
+.IR grep (1):
+.LP
+.RS
+\fCgrep '^IX: ' sample.tmp > sample.idx\fP
+.RE
+.\"---------------------------------------------------------------------
+.SS "CREATING THE INDEX FILE USING \*(Uc ENHANCED TROFF/\*(Ts"
+With \*(Uc Enhanced troff/\*(Ts, the
+.B \-I
+option of
+.IR psroff (1L)
+can produce both formatter output and an index file:
+.LP
+.RS
+\fCpsroff -ms -I sample.inp -Tpsc sample.txt\fP
+.RE
+.LP
+If it is wished to suppress the formatter output:
+.RS
+.LP
+.nf
+\fCpsroff -ms -I sample.inp -Tpsc -t sample.txt > /dev/null\fP
+.fi
+.RE
+.\"---------------------------------------------------------------------
+.SS "COMPLETING THE INDEX"
+Any of the above procedures leaves the input for
+.I makeindex
+in
+.IR sample.inp .
+The next step is to invoke
+.IR makeindex :
+.LP
+.RS
+\fCmakeindex -s sample.ist sample.idx\fP
+.RE
+.LP
+This leaves
+.IR troff (1)-ready
+output in the file
+.IR sample.ind .
+.\"=====================================================================
+.SH "ORDERING"
+By default,
+.I makeindex
+assumes
+.IR "word ordering" ;
+if the
+.B \-l
+option is in effect,
+.I "letter ordering"
+is used. In word ordering, a blank precedes any letter in the
+alphabet, whereas in letter ordering, it does not count at all. This
+is illustrated by the following example:
+.LP
+.RS
+\fIword order letter order\fP
+.br
+sea lion seal
+.br
+seal sea lion
+.RE
+.LP
+Numbers are always sorted in numeric order. For instance,
+.LP
+.RS
+9 (nine), 123
+.br
+10 (ten), see Derek, Bo
+.RE
+.LP
+Letters are first sorted without regard to case; when words are
+identical, the uppercase version precedes its lowercase counterpart.
+.LP
+A special symbol is defined here to be any character not appearing in
+the union of digits and the English alphabetic characters. Patterns
+starting with special symbols precede numbers, which precede patterns
+starting with letters. As a special case, a string starting with a
+digit but mixed with non-digits is considered to be a pattern starting
+with a special character.
+.\"=====================================================================
+.SH "SPECIAL EFFECTS"
+Entries such as
+.LP
+.RS
+.nf
+\fC\\indexentry{alpha}{1}
+\\indexentry{alpha!beta}{3}
+\\indexentry{alpha!beta!gamma}{10}\fP
+.fi
+.RE
+.LP
+in the input file will be converted to
+.LP
+.RS
+.nf
+\fC\\item alpha, 1
+\0\0\0\\subitem beta, 3
+\0\0\0\0\0\0\\subsubitem gamma, 10\fP
+.fi
+.RE
+.LP
+in the output index file.
+Notice that the
+.B level
+symbol (`!') is used above to delimit
+hierarchical levels.
+.LP
+It is possible to make an item appear in a designated form by
+using the
+.B actual
+(`@') operator. For instance,
+.LP
+.RS
+\fC\\indexentry{alpha@{\\it alpha\\/}}{1}\fP
+.RE
+.LP
+will become
+.LP
+.RS
+\fC\\item {\\it alpha\\/}, 1\fP
+.RE
+.LP
+after processing. The pattern preceding `@' is
+used as sort key, whereas the one following it is written to the
+output file. Note that two appearances of the same key, one with and
+one without the
+.B actual
+operator, are regarded as
+.I distinct
+entries.
+.LP
+The item, subitem, and subsubitem fields may have individual sort keys:
+.LP
+.RS
+.nf
+\fC\\indexentry{aa@{\\it aa\\/}!bb@{\\it bb\\/}!cc@{\\it cc\\/}}{1}\fP
+.fi
+.RE
+.LP
+This will be converted to
+.LP
+.RS
+.nf
+\fC\\item {\\it aa}, 1
+\0\0\0\\subitem {\\it bb}, 3
+\0\0\0\0\0\0\\subsubitem {\\it cc}, 10\fP
+.fi
+.RE
+.LP
+It is possible to encapsulate a page number with a designated
+command using the
+.B encap
+(`|') operator:
+.LP
+.RS
+\fC\\indexentry{alpha|bold}{1}\fP
+.RE
+.LP
+will be converted to
+.LP
+.RS
+\fC\\item alpha, \\bold{1}\fP
+.RE
+.LP
+where, with a suitable definition for \*(TX, \fC\\bold{n}\fP
+will expand to \fC{\\bf n}\fP.
+In this example, the three output attributes associated with page
+encapsulation
+.BR encap_prefix ,
+.BR encap_infix ,
+and
+.BR encap_suffix ,
+correspond to backslash, left brace, and right brace, respectively.
+This mechanism allows page numbers to be set in different fonts. For
+example, the page where the definition of a keyword appears can be in
+one font, the location of a primary example can be in another font,
+and other appearances in yet a third font.
+.LP
+The
+.B encap
+operator can also be used to create cross references in
+the index:
+.LP
+.RS
+\fC\\indexentry{alpha|see{beta}}{1}\fP
+.RE
+.LP
+will become
+.LP
+.RS
+\fC\\item alpha, \\see{beta}{1}\fP
+.RE
+.LP
+in the output file, where
+.LP
+.RS
+\fC\\see{beta}{1}\fP
+.RE
+.LP
+will expand to
+.LP
+.RS
+\fC{\\it see\\/} beta\fP
+.RE
+.LP
+Note that in a cross reference like this the page number disappears.
+.LP
+A pair of
+.B encap
+concatenated with
+.B range_open
+(`|(') and
+.B range_close
+(`|)') creates an explicit page range:
+.LP
+.RS
+.nf
+\fC\\indexentry{alpha|(}{1}
+\\indexentry{alpha|)}{5}\fP
+.fi
+.RE
+.LP
+will become
+.LP
+.RS
+\fC\\item alpha, 1\(em5\fP
+.RE
+.LP
+Intermediate pages indexed by the same key will be merged into the
+range implicitly. This is especially useful when an entire section
+about a particular subject is to be indexed, in which case only the
+range opening and closing operators need to be inserted at the
+beginning and end of the section. Explicit page range formation can
+also include an extra command to set the page range in a designated
+font:
+.LP
+.RS
+.nf
+\fC\\indexentry{alpha|(bold}{1}
+\\indexentry{alpha|)}{5}\fP
+.fi
+.RE
+.LP
+will become
+.LP
+.RS
+\fC\\item alpha, \\bold{1--5}\fP
+.RE
+.LP
+Several potential problems are worth mentioning. First, entries like
+.LP
+.RS
+.nf
+\fC\\indexentry{alpha|(}{1}
+\\indexentry{alpha|bold}{3}
+\\indexentry{alpha|)}{5}\fP
+.fi
+.RE
+.LP
+will be interpreted as
+.LP
+.RS
+\fC\\item alpha, \\bold{3}, 1--5\fP
+.RE
+.LP
+but with a warning message in the transcript about encountering an
+inconsistent page encapsulator.
+An explicit range beginning in a Roman page number and ending
+in Arabic is also considered an error. In this instance, (if
+possible) the range is broken into two subranges, one in Roman and the
+other in Arabic. For instance,
+.LP
+.RS
+.nf
+\fC\\indexentry{alpha|(}{i}
+\\indexentry{alpha}{iv}
+\\indexentry{alpha}{3}
+\\indexentry{alpha|)}{7}\fP
+.fi
+.RE
+.LP
+will be turned into
+.LP
+.RS
+\fC\\item alpha, i--iv, 3--7\fP
+.RE
+.LP
+with a warning message in the transcript file complaining about an
+illegal range formation.
+.LP
+Finally, every special symbol mentioned in this section may be
+escaped by the
+.B quote
+operator (`"'). Thus
+.LP
+.RS
+\fC\\indexentry{alpha"@beta}{1}\fP
+.RE
+.LP
+will actually become
+.LP
+.RS
+\fC\\item alpha@beta, 1\fP
+.RE
+.LP
+as a result of executing
+.IR makeindex .
+The quoting power of
+.B quote
+is eliminated if it is immediately preceded
+by
+.B escape
+(`\\'). For example,
+.LP
+.RS
+\fC\\indexentry{f\\"ur}{1}\fP
+.RE
+.LP
+becomes
+.LP
+.RS
+\fC\\item f\\"ur, 1\fP
+.RE
+.LP
+which represents an umlaut-accented `u' to the \*(TX family of
+processors.
+.PP
+From version 2.11 of
+.IR makeindex ,
+the
+.B quote
+operator may quote
+.I any
+character in the range 1 .\|.\|. 255. Character 0 is excluded because
+it is used internally in the
+.I makeindex
+source code as a string terminator. With this change, sort keys can
+be created for all eight-bit characters except 0. The sorting order
+is
+.RS
+.nf
+
+punctuation characters (in ASCII order),
+digits,
+control characters (1 .\|.\|. 31),
+space (32),
+letters (ignoring case),
+characters 127 .\|.\|. 255.
+
+.fi
+.RE
+Here is an example showing the indexing of all printable ASCII
+characters other than letters and digits, assuming the default
+\*(TX format. For convenience, the page number references are
+the corresponding ASCII ordinal values.
+.RS
+.nf
+
+\fC\\indexentry{" @" (space)}{32}
+\\indexentry{"!@"! (exclamation point)}{33}
+\\indexentry{""@"" (quotation mark)}{34}
+\\indexentry{"#@"\\# (sharp sign)}{35}
+\\indexentry{"$@"\\$ (dollar sign)}{36}
+\\indexentry{"%@"\\% (percent sign)}{37}
+\\indexentry{"&@"\\& (ampersand)}{38}
+\\indexentry{"<@"$<$ (left angle bracket)}{60}
+\\indexentry{"=@"= (equals)}{61}
+\\indexentry{">@"$>$ (right angle bracket)}{62}
+\\indexentry{"?@"? (query)}{63}
+\\indexentry{"@@"@ (at sign)}{64}
+\\indexentry{"[@"[ (left square bracket)}{91}
+\\indexentry{"\\@"\\verb=\\= (backslash)}{92}
+\\indexentry{"]@"] (right square bracket)}{93}
+\\indexentry{"^@"\\verb=^= (caret)}{94}
+\\indexentry{"_@"\\verb=_= (underscore)}{95}
+\\indexentry{"`@"\\verb=~= (grave accent)}{96}
+\\indexentry{"{@"\\"{ (left brace)}{123}
+\\indexentry{"|@"\\verb="|= (vertical bar)}{124}
+\\indexentry{"}@"\\"} (right brace)}{125}
+\\indexentry{"~@"\\verb=~= (tilde)}{126}\fP
+
+.fi
+.RE
+Characters in the actual fields following the `@' character which
+have special significance to \*(TX must be represented as control
+sequences, or as math mode characters. Note particularly how the
+entries for the at sign, left and right braces, and the vertical
+bar, are coded. The index file output by
+.I makeindex
+for this example looks like this:
+.RS
+.nf
+
+\fC\\begin{theindex}
+
+ \\item ! (exclamation point), 33
+ \\item " (quotation mark), 34
+ \\item \\# (sharp sign), 35
+ \\item \\$ (dollar sign), 36
+ \\item \\% (percent sign), 37
+ \\item \\& (ampersand), 38
+ \\item $<$ (left angle bracket), 60
+ \\item = (equals), 61
+ \\item $>$ (right angle bracket), 62
+ \\item ? (query), 63
+ \\item @ (at sign), 64
+ \\item [ (left square bracket), 91
+ \\item \\verb=\\= (backslash), 92
+ \\item ] (right square bracket), 93
+ \\item \\verb=^= (caret), 94
+ \\item \\verb=_= (underscore), 95
+ \\item \\verb=~= (grave accent), 96
+ \\item \\{ (left brace), 123
+ \\item \\verb=|= (vertical bar), 124
+ \\item \\} (right brace), 125
+ \\item \\verb=~= (tilde), 126
+
+ \\indexspace
+
+ \\item (space), 32
+
+\\end{theindex}\fP
+.fi
+.RE
+.\"=====================================================================
+.SH "FILES"
+.TP 2.2i
+.I /usr/local/bin/makeindex
+executable file
+.TP
+.I /usr/local/lib/tex/macros/idxmac-amstex.tex
+\*(TX macro file used by
+.I makeindex
+.TP
+.I /usr/local/lib/tex/macros/idxmac.tex
+\*(TX macro file used by
+.I makeindex
+.TP
+.I /usr/local/lib/tex/macros/makeidx.doc
+\*(TX macro file used by
+.I makeindex
+.TP
+.I /usr/local/lib/tex/macros/makeidx.sty
+\*(TX macro file used by
+.I makeindex
+.\"=====================================================================
+.SH "SEE ALSO"
+ditroff(1L),
+latex(1L),
+make.index (1L),
+qsort(3),
+tex(1L),
+troff(1L)
+.LP
+.IR "\*(Uc Enhanced troff/\*(Ts \(em An Overview" ,
+R. P. C. Rodgers and Conrad Huang, LSMB Technical Report 90-2,
+UCSF School of Pharmacy, San Francisco, 1990.
+.LP
+.IR "Index Preparation and Processing" ,
+Pehong Chen and Michael A. Harrison,
+.IR "Software: Practice and Experience" ,
+.BR 19 (9),
+897\(en915,
+September 1988.
+.LP
+.IR "Automating Index Preparation" ,
+Pehong Chen and Michael A. Harrison. Technical Report 87/347,
+Computer Science Division, University of California, Berkeley, 1987
+(a \*(LX document supplied with
+.IR makeindex ).
+.LP
+.IR "MakeIndex: An Index Processor for \*(LX" ,
+Leslie Lamport, February 1987 (a \*(LX document supplied
+with
+.IR makeindex ).
+.LP
+.IR "Tools for Printing Indices" ,
+Jon L. Bentley and Brian W. Kernighan,
+.IR "Electronic Publishing \(em Origination, Dissemination, and Design" ,
+1(1), 3\(en18, June 1988 (also available as: Computing Science
+Technical Report No. 128,
+AT&T Bell Laboratories, Murray Hill, NJ 07974, 1986).
+.\"=====================================================================
+.SH "AUTHOR"
+Pehong Chen, Chen & Harrison International Systems, Inc.
+Palo Alto, California, USA <chen@renoir.berkeley.edu>.
+.br
+Manual page extensively revised and corrected, and
+.IR troff (1)
+examples created by Rick P. C. Rodgers, UCSF School
+of Pharmacy <rodgers@cca.ucsf.edu>.
+.\"=====================================================================
+.SH ACKNOWLEDGMENTS
+Leslie Lamport contributed significantly to the design.
+Michael Harrison provided valuable comments and suggestions.
+Nelson Beebe improved on the portable version, and maintains the
+source distribution for the \*(TX Users Group.
+Andreas Brosig contributed to the German word ordering.
+The modification to the
+.B \-ms
+macros was derived from a method proposed by Ravi Sethi of AT&T
+Bell Laboratories.
+The
+.I LOG
+and
+.I CONTRIB
+files in the
+.I makeindex
+source distribution record other contributions.
diff --git a/indexing/makeindex/doc/makeindex.l.orig b/indexing/makeindex/doc/makeindex.l.orig
new file mode 100644
index 0000000000..aac4034cd8
--- /dev/null
+++ b/indexing/makeindex/doc/makeindex.l.orig
@@ -0,0 +1,1167 @@
+.if t .ds LX L\\h'-0.36m'\\v'-0.15v'\\s-2A\\s+2\\h'-0.15m'\\v'0.15v'T\\h'-0.1667m'\\v'0.20v'E\\v'-0.20v'\\h'-0.125m'X
+.if n .ds LX LaTeX
+.if t .ds TX T\\h'-0.1667m'\\v'0.20v'E\\v'-0.20v'\\h'-0.125m'X
+.if n .ds TX TeX
+.ds Ts T\s-2RAN\s+2S\s-2CRIPT\s+2
+.if t .ds Uc \fIU\\h'-0.12m'C\\v'0.27m'\\h'-.23m'S\\h'-0.11m'F\\v'-0.27m'\fP
+.if n .ds Uc UCSF
+.ds Et \\f(boE\\h'-0.1667m'\\v'-0.20v'T\\v'0.20v'\\h'-0.125m'T\\fP
+.TH MAKEINDEX 1L "10 December 1991"
+.\"=====================================================================
+.SH NAME
+makeindex \- a general purpose, formatter-independent index processor
+.\"=====================================================================
+.SH SYNOPSIS
+.B makeindex
+.BR [ \-c ]
+.BR [ \-g ]
+.BR [ \-i ]
+.BR [ \-l ]
+.BR [ \-o
+.IR ind ]
+.BR [ \-p
+.IR num ]
+.BR [ \-q ]
+.BR [ \-r ]
+.BR [ \-s
+.IR sfile ]
+.BR [ \-t
+.IR log ]
+.BI [ idx0
+.I idx1
+.IR idx2 .\|.\|.]
+.\"=====================================================================
+.SH DESCRIPTION
+The program
+.I makeindex
+is a general purpose hierarchical index generator; it accepts one or
+more input files (often produced by a text formatter such as \*(TX
+.RI ( tex (1L))
+or
+.IR troff (1),
+sorts the entries, and produces an output file which can be formatted.
+The index can have up to three levels (0, 1, and 2) of subitem nesting.
+The way in which words are flagged for indexing within the main document
+is specific to the formatter used;
+.I makeindex
+does
+.I not
+automate the process of selecting these words. As the output index
+is hierarchical,
+.I makeindex
+can be considered complimentary to the
+.IR awk (1)-based
+.IR make.index (1L)
+system of Bentley and Kernighan, which is specific to
+.IR troff (1),
+generates non-hierarchical indices, and employs a much simpler syntax
+for indicating index entries. For illustration of use with
+.I troff
+and
+.IR \*(TX ,
+see the section \s-2EXAMPLES\s+2 below.
+.LP
+The formats of the input and output files are
+specified in a style file; by default, input is assumed to be a
+.I \&.idx
+file, as generated by \*(LX.
+.LP
+Unless specified explicitly, the base name of the first input file
+.RI ( idx0 )
+is used to determine the names of other files. For each input file
+name specified, a file of that name is sought. If this file is not
+found and the file name has no extension, the extension
+.I \&.idx
+is appended. If no file with this name is found,
+.I makeindex
+aborts.
+.LP
+For important notes on how to select index keywords, see the document
+by Lamport cited below. As an issue separate from selecting index
+keywords, a systematic mechanism for placing index terms in a document
+is suggested in
+.IR "Index Preparation and Processing" ,
+a paper cited below.
+.\"=====================================================================
+.SH OPTIONS
+.TP 10
+.B \-c
+Compress intermediate blanks (ignoring leading and trailing blanks and
+tabs). By default, blanks in the index key are retained.
+.TP 10
+.B \-g
+Employ German word ordering in the index, in accord with rules set forth
+in DIN 5007. By default,
+.I makeindex
+employs a word ordering in which precedence is: symbols, numbers,
+uppercase letters, lowercase letters. The sequence in German word
+ordering is: symbols, lowercase letters, uppercase letters, numbers.
+Additionally, this option enables
+.I makeindex
+to recognize the German \*(TX-commands {"a, "o, "u and "s} as {ae, oe,
+ue and ss} during the sorting of the entries. The quote character
+must be redefined in a style file (for example, redefine quote
+as '+'). If the quote character is not redefined,
+.I makeindex
+will produce an error message and abort.
+.TP 10
+.B \-i
+Take input from
+.IR stdin .
+When this option is specified and
+.B \-o
+is not, output is written to
+.IR stdout .
+.TP 10
+.B \-l
+Letter ordering; by default, word ordering is used (see
+the \s-2ORDERING\s+2 section).
+.TP 10
+.BI \-o " ind"
+Employ
+.I ind
+as the output index file. By default, the file name
+is created by appending the extension
+.I .ind
+to the base name of
+the first input file
+.RI ( idx0 ).
+.TP 10
+.BI \-p " num"
+Set the starting page number of the output index file to be
+.I num
+(useful when the index file is to be formatted separately). The
+argument
+.I num
+may be numerical or one of the following:
+.RS
+.TP 10
+.I any
+The starting page is the last source page number plus 1.
+.TP
+.I odd
+The starting page is the first odd page following the last source page
+number.
+.TP
+.I even
+The starting page is the first even page following the last source
+page number.
+.RE
+.IP
+The last source page is obtained by searching backward in the log file
+for the first instance of a number included within paired square
+brackets
+.RB ( [ .\|.\|. ] ).
+If a page number is missing or the log file is not found, no attempt
+will be made to set the starting page number. The source log file
+name is determined by appending the extension
+.I \&.log
+to the base name of the first input file
+.RI ( idx0 ).
+.TP 10
+.B \-q
+Quiet mode; send no messages to
+.IR stderr .
+By default, progress
+and error messages are sent to
+.I stderr
+as well as to the
+transcript file.
+.TP 10
+.B \-r
+Disable implicit page range formation; page ranges must be created by
+using explicit range operators; see \s-2SPECIAL EFFECTS\s+2 below. By
+default, three or more successive pages are automatically abbreviated
+as a range (e.g. 1\(em5).
+.TP 10
+.BR \-s " sty"
+Employ
+.I sty
+as the style file (no default). The environment
+variable \s-2INDEXSTYLE\s+2 defines the path where the style file
+should be found.
+.TP 10
+.BR \-t " log"
+Employ
+.I log
+as the transcript file. By default, the file name is
+created by appending the extension
+.I .ilg
+to the base name of the
+first input file
+.RI ( idx0 ).
+.\"=====================================================================
+.SH "STYLE FILE"
+The style file informs
+.I makeindex
+about the format of the
+.I \&.idx
+input files and the intended format of the final output file; examples
+appear below. This file can reside anywhere in the path defined by
+the environment variable \s-2INDEXSTYLE\s+2. The style file contains
+a list of
+.RI < specifier , " attribute" >
+pairs. There are two types of specifiers: input and output.
+Pairs do not have to appear in any particular order.
+A line begun by `%' is a comment. In the following list of
+specifiers and arguments, <string> is an arbitrary string delimited by
+double quotes (".\|.\|."), <char> is a single letter embraced by
+single quotes ('.\|.\|.'), and <number> is a nonnegative integer.
+The maximum length of a <string> is 2048. A literal backslash or
+quote must be escaped (by a backslash). Anything not specified in the
+style file will be assigned a default value, which is shown at the
+head of the rightmost column.
+.\"----------------------------------------------------------------------
+.SS "INPUT STYLE SPECIFIERS"
+.TP 25
+.BR actual " <char>"
+\'@\'
+.RS
+Symbol indicating that the next entry is to appear in the output file.
+.RE
+.TP
+.BR arg_close " <char>"
+\'}\'
+.RS
+Closing delimiter for the index entry argument.
+.RE
+.TP
+.BR arg_open " <char>"
+\'{\'
+.RS
+Opening delimiter for the index entry argument.
+.RE
+.TP
+.BR encap " <char>"
+\'|\'
+.RS
+Symbol indicating that the rest of the argument list
+is to be used as the encapsulating command for the page number.
+.RE
+.TP
+.BR escape " <char>"
+\'\\\\\'
+.RS
+Symbol which escapes the following letter, unless its preceding letter
+is
+.BR escape .
+Note:
+.B quote
+is used to escape the letter which immediately follows it, but if it is
+preceded by
+.BR escape ,
+it is treated as a ordinary character. These two symbols
+.I must
+be distinct.
+.RE
+.TP
+.BR keyword " <string>"
+"\\\\indexentry"
+.RS
+Command which tells
+.I makeindex
+that its argument is an index entry.
+.RE
+.TP
+.BR level " <char>"
+\'!\'
+.RS
+Delimiter denoting a new level of subitem.
+.RE
+.TP
+.BR quote " <char>"
+\'"\'
+.RS
+Note:
+.B quote
+is used to escape the letter which immediately follows it, but if it is
+preceded by
+.BR escape ,
+it is treated as a ordinary character. These two symbols
+.I must
+be distinct.
+.RE
+.TP
+.BR range_close " <char>"
+\')\'
+.RS
+Closing delimiter indicating the end of an explicit page range.
+.RE
+.TP
+.BR range_open " <char>"
+\'(\'
+.RS
+Opening delimiter indicating the beginning of an explicit page range.
+.RE
+.\"---------------------------------------------------------------------
+.SS "OUTPUT STYLE SPECIFIERS"
+.TP 25
+.BR preamble " <string>"
+"\\\\begin{theindex}\\n"
+.RS
+Preamble of output file.
+.RE
+.TP
+.BR postamble " <string>"
+"\\n\\n\\\\end{theindex}\\n"
+.RS
+Postamble of output file.
+.RE
+.TP
+.BR setpage_prefix " <string>"
+"\\n \\\\setcounter{page}{"
+.RS
+Prefix of command which sets the starting page number.
+.RE
+.TP
+.BR setpage_suffix " <string>"
+"}\\n"
+.RS
+Suffix of command which sets the starting page number.
+.RE
+.TP
+.BR group_skip " <string>"
+"\\n\\n \\\\indexspace\\n"
+.RS
+Vertical space to be inserted before a new group begins.
+.RE
+.TP
+.BR headings_flag " <string>"
+0
+.RS
+Flag indicating treatment of new group headers, which are inserted
+when before a new group (symbols, numbers, and the 26 letters):
+positive values cause an uppercase letter to be inserted between
+prefix and suffix, and negative values cause a lowercase letter to be
+inserted (default is 0, which produces no header).
+.RE
+.TP
+.BR heading_prefix " <string>"
+""
+.RS
+Header prefix to be inserted before a new letter begins.
+.RE
+.TP
+.BR symhead_positive " <string>"
+"Symbols"
+.RS
+Heading for symbols to be inserted if
+.B headings_flag
+is positive.
+.RE
+.TP
+.BR symhead_negative " <string>"
+"symbols"
+.RS
+Heading for symbols to be inserted if
+.B headings_flag
+is negative.
+.RE
+.TP
+.BR numhead_positive " <string>"
+"Numbers"
+.RS
+Heading for numbers to be inserted if
+.B headings_flag
+is positive.
+.RE
+.TP
+.BR numhead_negative " <string>"
+"numbers"
+.RS
+Heading for numbers to be inserted if
+.B headings_flag
+is negative.
+.RE
+.TP
+.BR item_0 " <string>"
+"\\n \\\\item "
+.RS
+Command to be inserted between two primary (level 0) items.
+.RE
+.TP
+.BR item_1 " <string>"
+"\\n \\\\subitem "
+.RS
+Command to be inserted between two secondary (level 1) items.
+.RE
+.TP
+.BR item_2 " <string>"
+"\\n \\\\subsubitem "
+.RS
+Command to be inserted between two level 2 items.
+.RE
+.TP
+.B item_01 " <string>"
+"\\n \\\\subitem "
+.RS
+Command to be inserted between a level 0 item and a level 1 item.
+.RE
+.TP
+.BR item_x1 " <string>"
+"\\n \\\\subitem "
+.RS
+Command to be inserted between a level 0 item and a level 1 item,
+where the level 0 item does not have associated page numbers.
+.RE
+.TP
+.BR item_12 " <string>"
+"\\n \\\\subsubitem "
+.RS
+Command to be inserted between a level 1 item and a level 2 item.
+.RE
+.TP
+.BR item_x2 " <string>"
+"\\n \\\\subsubitem "
+.RS
+Command to be inserted between a level 1 item and a level 2 item,
+where the level 1 item does not have associated page numbers.
+.RE
+.TP
+.BR delim_0 " <string>"
+", "
+.RS
+Delimiter to be inserted between a level 0 key and its first page number
+(default: comma followed by a blank).
+.RE
+.TP
+.BR delim_1 " <string>"
+", "
+.RS
+Delimiter to be inserted between a level 1 key and its first page number
+(default: comma followed by a blank).
+.RE
+.TP
+.BR delim_2 " <string>"
+", "
+.RS
+Delimiter to be inserted between a level 2 key and its first page number
+(default: comma followed by a blank).
+.RE
+.TP
+.BR delim_n " <string>"
+", "
+.RS
+Delimiter to be inserted between two page numbers for the same key
+in any level (default: comma followed by a blank).
+.RE
+.TP
+.BR delim_r " <string>"
+"--"
+.RS
+Delimiter to be inserted between the starting and ending page numbers
+of a range.
+.RE
+.TP
+.BR delim_t " <string>"
+""
+.RS
+Delimiter to be inserted at the end of a page list. This delimiter
+has no effect on entries which have no associated page list.
+.RE
+.TP
+.BR encap_prefix " <string>"
+"\\\\"
+.RS
+First part of prefix for the command which encapsulates the page number.
+.RE
+.TP
+.BR encap_infix " <string>"
+"{"
+.RS
+Second part of prefix for the command which encapsulates the page
+number.
+.RE
+.TP
+.BR encap_suffix " <string>"
+"}".
+.RS
+Suffix for the command which encapsulates the page number.
+.RE
+.TP
+.BR line_max " <number>"
+72
+.RS
+Maximum length of a line in the output, beyond which a line wraps.
+.RE
+.TP
+.BR indent_space " <string>"
+"\\t\\t"
+.RS
+Space to be inserted in front of a wrapped line (default: two tabs).
+.RE
+.TP
+.BR indent_length " <number>"
+16
+.RS
+Length of
+.B indent_space
+(default: 16, equivalent to 2 tabs).
+.RE
+.\"=====================================================================
+.SH EXAMPLES
+.\"---------------------------------------------------------------------
+.SS "\*(TX EXAMPLE"
+The following example shows a style file called
+.IR book.ist ,
+which defines an index for a book which can be formatted independently
+of the main source:
+.LP
+.RS
+.nf
+\fCpreamble
+"\\\\documentstyle[12pt]{book}
+\\\\begin{document}
+\\\\begin{theindex}
+{\\\\small\\n"
+postamble
+"\\n\\n}
+\\\\end{theindex}
+\\\\end{document}\\n\fP"
+.fi
+.RE
+.LP
+Assuming that a particular book style requires the index (as well as any
+chapters) to start from an odd page number, and that the input file is
+named
+.IR foo.idx ,
+the following command line produces output in file
+.IR footmp.ind :
+.LP
+.RS
+\fCmakeindex \-s book.ist \-o footmp.ind \-p odd foo\fP
+.RE
+.LP
+Here a non-default output file name is used to avoid clobbering the
+output for the book itself (presumably
+.IR foo.dvi ,
+which would have been the default name for the index output file!).
+.\"---------------------------------------------------------------------
+.SS "TROFF EXAMPLE"
+A sample control file for creating an index, which we will assume
+resides in the file
+.IR sample.ist :
+.LP
+.RS
+.nf
+\&\fCkeyword "IX:"
+\&preamble
+\&".\\\\\\" start of index output
+\&\\".\\\\\\" enter two column mode
+\&.2C
+\&.SH
+\&.ce
+\&INDEX
+\&.XS
+\&INDEX
+\&.XE
+\&.R
+\&.ps 9p
+\&.vs 11p
+\&.sp
+\&.de I1
+\&.ti 0.25i
+\&..
+\&.de I2
+\&.ti 0.5i
+\&.."
+\&postamble "\\n.\\\\\\" end of index output"
+\&setpage_prefix "\\n.nr % "
+\&setpage_suffix ""
+\&group_skip "\\n.sp 1.0"
+\&headings_flag 1
+\&heading_prefix "\\n.IS\\n"
+\&heading_suffix "\\n.IE"
+\&item_0 "\\n.br\\n"
+\&item_1 "\\n.I1\\n"
+\&item_2 "\\n.I2\\n"
+\&item_01 "\\n.I1\\n"
+\&item_x1 "\\n.I1\\n"
+\&item_12 "\\n.I2\\n"
+\&item_x2 "\\n.I2\\n"
+\&delim_0 ", "
+\&delim_1 ", "
+\&delim_2 ", "
+\&delim_r "-"
+\&delim_t "."
+\&encap_prefix "\\\\fB"
+\&encap_infix ""
+\&encap_suffix "\\\\fP"
+\&indent_space ""
+\&indent_length 0\fP
+.fi
+.RE
+.LP
+The local macro package may require modification, as in this example
+of an extension to the
+.B \-ms
+macros (note that at some sites, this macro should
+.I replace
+a pre-existing macro of the same name):
+.LP
+.RS
+.nf
+\fC\&.\" IX - index words to stderr
+\&.de IX
+\&.ie '\\\\n(.z'' .tm IX: \\\\$1 \\\\$2 \\\\$3 \\\\$4 \\\\$5 \\\\$6 \\\\$7 \\\\$8 \\\\$9 {\\\\n(PN}
+\&.el \\\\!.IX \\\\$1 \\\\$2 \\\\$3 \\\\$4 \\\\$5 \\\\$6 \\\\$7 \\\\$8 \\\\$9 {\\\\n(PN}
+\&..\fP
+.fi
+.RE
+.LP
+(note that the string {\fC\\\\n(PN\fP} is separated from the rest of the
+line by a tab.
+If your local macro package does not contain this extension,
+just include those lines at the beginning of your file.
+Here is a simple
+.IR troff (1)
+input file, which we will assume is named
+.IR sample.txt :
+.LP
+.RS
+.nf
+\fC\&This is a sample file to test the \\fImakeindex\\fP(1L)
+\&program, and see
+\&.IX {indexing!programs!C language}
+\&.IX {makeindex@\\fImakeindex\\fP(1L)}
+\&.bp
+\&.rs
+\&.IX {Knuth}
+\&.IX {typesetting!computer-aided}
+\&how well it functions in the \\fItroff\\fP(1) environment.\fP
+.fi
+.RE
+.LP
+Note that index entries are indicated by the
+.B .IX
+macro, which
+causes the following text to be written to
+.I stdout
+along with the
+current page number.
+.\"---------------------------------------------------------------------
+.SS "CREATING THE INDEX FILE IN THE BOURNE SHELL"
+To create an input file for
+.IR makeindex ,
+.B "in the Bourne shell"
+environment, do the equivalent at your site of the command:
+.LP
+.nf
+\fCpsroff -ms -Tpsc -t sample.txt > /dev/null 2> sample.tmp\fP
+.fi
+.LP
+Some sites will require
+.I ditroff
+instead of
+.IR psroff .
+To filter out any genuine error messages, invoke
+.IR grep (1):
+.LP
+.RS
+\fCgrep '^IX: ' sample.tmp > sample.idx\fP
+.RE
+.\"---------------------------------------------------------------------
+.SS "CREATING THE INDEX FILE USING \*(Uc ENHANCED TROFF/\*(Ts"
+With \*(Uc Enhanced troff/\*(Ts, the
+.B \-I
+option of
+.IR psroff (1L)
+can produce both formatter output and an index file:
+.LP
+.RS
+\fCpsroff -ms -I sample.inp -Tpsc sample.txt\fP
+.RE
+.LP
+If it is wished to suppress the formatter output:
+.RS
+.LP
+.nf
+\fCpsroff -ms -I sample.inp -Tpsc -t sample.txt > /dev/null\fP
+.fi
+.RE
+.\"---------------------------------------------------------------------
+.SS "COMPLETING THE INDEX"
+Any of the above procedures leaves the input for
+.I makeindex
+in
+.IR sample.inp .
+The next step is to invoke
+.IR makeindex :
+.LP
+.RS
+\fCmakeindex -s sample.ist sample.idx\fP
+.RE
+.LP
+This leaves
+.IR troff (1)-ready
+output in the file
+.IR sample.ind .
+.\"=====================================================================
+.SH "ORDERING"
+By default,
+.I makeindex
+assumes
+.IR "word ordering" ;
+if the
+.B \-l
+option is in effect,
+.I "letter ordering"
+is used. In word ordering, a blank precedes any letter in the
+alphabet, whereas in letter ordering, it does not count at all. This
+is illustrated by the following example:
+.LP
+.RS
+\fIword order letter order\fP
+.br
+sea lion seal
+.br
+seal sea lion
+.RE
+.LP
+Numbers are always sorted in numeric order. For instance,
+.LP
+.RS
+9 (nine), 123
+.br
+10 (ten), see Derek, Bo
+.RE
+.LP
+Letters are first sorted without regard to case; when words are
+identical, the uppercase version precedes its lowercase counterpart.
+.LP
+A special symbol is defined here to be any character not appearing in
+the union of digits and the English alphabetic characters. Patterns
+starting with special symbols precede numbers, which precede patterns
+starting with letters. As a special case, a string starting with a
+digit but mixed with non-digits is considered to be a pattern starting
+with a special character.
+.\"=====================================================================
+.SH "SPECIAL EFFECTS"
+Entries such as
+.LP
+.RS
+.nf
+\fC\\indexentry{alpha}{1}
+\\indexentry{alpha!beta}{3}
+\\indexentry{alpha!beta!gamma}{10}\fP
+.fi
+.RE
+.LP
+in the input file will be converted to
+.LP
+.RS
+.nf
+\fC\\item alpha, 1
+\0\0\0\\subitem beta, 3
+\0\0\0\0\0\0\\subsubitem gamma, 10\fP
+.fi
+.RE
+.LP
+in the output index file.
+Notice that the
+.B level
+symbol (`!') is used above to delimit
+hierarchical levels.
+.LP
+It is possible to make an item appear in a designated form by
+using the
+.B actual
+(`@') operator. For instance,
+.LP
+.RS
+\fC\\indexentry{alpha@{\\it alpha\\/}}{1}\fP
+.RE
+.LP
+will become
+.LP
+.RS
+\fC\\item {\\it alpha\\/}, 1\fP
+.RE
+.LP
+after processing. The pattern preceding `@' is
+used as sort key, whereas the one following it is written to the
+output file. Note that two appearances of the same key, one with and
+one without the
+.B actual
+operator, are regarded as
+.I distinct
+entries.
+.LP
+The item, subitem, and subsubitem fields may have individual sort keys:
+.LP
+.RS
+.nf
+\fC\\indexentry{aa@{\\it aa\\/}!bb@{\\it bb\\/}!cc@{\\it cc\\/}}{1}\fP
+.fi
+.RE
+.LP
+This will be converted to
+.LP
+.RS
+.nf
+\fC\\item {\\it aa}, 1
+\0\0\0\\subitem {\\it bb}, 3
+\0\0\0\0\0\0\\subsubitem {\\it cc}, 10\fP
+.fi
+.RE
+.LP
+It is possible to encapsulate a page number with a designated
+command using the
+.B encap
+(`|') operator:
+.LP
+.RS
+\fC\\indexentry{alpha|bold}{1}\fP
+.RE
+.LP
+will be converted to
+.LP
+.RS
+\fC\\item alpha, \\bold{1}\fP
+.RE
+.LP
+where, with a suitable definition for \*(TX, \fC\\bold{n}\fP
+will expand to \fC{\\bf n}\fP.
+In this example, the three output attributes associated with page
+encapsulation
+.BR encap_prefix ,
+.BR encap_infix ,
+and
+.BR encap_suffix ,
+correspond to backslash, left brace, and right brace, respectively.
+This mechanism allows page numbers to be set in different fonts. For
+example, the page where the definition of a keyword appears can be in
+one font, the location of a primary example can be in another font,
+and other appearances in yet a third font.
+.LP
+The
+.B encap
+operator can also be used to create cross references in
+the index:
+.LP
+.RS
+\fC\\indexentry{alpha|see{beta}}{1}\fP
+.RE
+.LP
+will become
+.LP
+.RS
+\fC\\item alpha, \\see{beta}{1}\fP
+.RE
+.LP
+in the output file, where
+.LP
+.RS
+\fC\\see{beta}{1}\fP
+.RE
+.LP
+will expand to
+.LP
+.RS
+\fC{\\it see\\/} beta\fP
+.RE
+.LP
+Note that in a cross reference like this the page number disappears.
+.LP
+A pair of
+.B encap
+concatenated with
+.B range_open
+(`|(') and
+.B range_close
+(`|)') creates an explicit page range:
+.LP
+.RS
+.nf
+\fC\\indexentry{alpha|(}{1}
+\\indexentry{alpha|)}{5}\fP
+.fi
+.RE
+.LP
+will become
+.LP
+.RS
+\fC\\item alpha, 1\(em5\fP
+.RE
+.LP
+Intermediate pages indexed by the same key will be merged into the
+range implicitly. This is especially useful when an entire section
+about a particular subject is to be indexed, in which case only the
+range opening and closing operators need to be inserted at the
+beginning and end of the section. Explicit page range formation can
+also include an extra command to set the page range in a designated
+font:
+.LP
+.RS
+.nf
+\fC\\indexentry{alpha|(bold}{1}
+\\indexentry{alpha|)}{5}\fP
+.fi
+.RE
+.LP
+will become
+.LP
+.RS
+\fC\\item alpha, \\bold{1--5}\fP
+.RE
+.LP
+Several potential problems are worth mentioning. First, entries like
+.LP
+.RS
+.nf
+\fC\\indexentry{alpha|(}{1}
+\\indexentry{alpha|bold}{3}
+\\indexentry{alpha|)}{5}\fP
+.fi
+.RE
+.LP
+will be interpreted as
+.LP
+.RS
+\fC\\item alpha, \\bold{3}, 1--5\fP
+.RE
+.LP
+but with a warning message in the transcript about encountering an
+inconsistent page encapsulator.
+An explicit range beginning in a Roman page number and ending
+in Arabic is also considered an error. In this instance, (if
+possible) the range is broken into two subranges, one in Roman and the
+other in Arabic. For instance,
+.LP
+.RS
+.nf
+\fC\\indexentry{alpha|(}{i}
+\\indexentry{alpha}{iv}
+\\indexentry{alpha}{3}
+\\indexentry{alpha|)}{7}\fP
+.fi
+.RE
+.LP
+will be turned into
+.LP
+.RS
+\fC\\item alpha, i--iv, 3--7\fP
+.RE
+.LP
+with a warning message in the transcript file complaining about an
+illegal range formation.
+.LP
+Finally, every special symbol mentioned in this section may be
+escaped by the
+.B quote
+operator (`"'). Thus
+.LP
+.RS
+\fC\\indexentry{alpha"@beta}{1}\fP
+.RE
+.LP
+will actually become
+.LP
+.RS
+\fC\\item alpha@beta, 1\fP
+.RE
+.LP
+as a result of executing
+.IR makeindex .
+The quoting power of
+.B quote
+is eliminated if it is immediately preceded
+by
+.B escape
+(`\\'). For example,
+.LP
+.RS
+\fC\\indexentry{f\\"ur}{1}\fP
+.RE
+.LP
+becomes
+.LP
+.RS
+\fC\\item f\\"ur, 1\fP
+.RE
+.LP
+which represents an umlaut-accented `u' to the \*(TX family of
+processors.
+.PP
+From version 2.11 of
+.IR makeindex ,
+the
+.B quote
+operator may quote
+.I any
+character in the range 1 .\|.\|. 255. Character 0 is excluded because
+it is used internally in the
+.I makeindex
+source code as a string terminator. With this change, sort keys can
+be created for all eight-bit characters except 0. The sorting order
+is
+.RS
+.nf
+
+punctuation characters (in ASCII order),
+digits,
+control characters (1 .\|.\|. 31),
+space (32),
+letters (ignoring case),
+characters 127 .\|.\|. 255.
+
+.fi
+.RE
+Here is an example showing the indexing of all printable ASCII
+characters other than letters and digits, assuming the default
+\*(TX format. For convenience, the page number references are
+the corresponding ASCII ordinal values.
+.RS
+.nf
+
+\fC\\indexentry{" @" (space)}{32}
+\\indexentry{"!@"! (exclamation point)}{33}
+\\indexentry{""@"" (quotation mark)}{34}
+\\indexentry{"#@"\\# (sharp sign)}{35}
+\\indexentry{"$@"\\$ (dollar sign)}{36}
+\\indexentry{"%@"\\% (percent sign)}{37}
+\\indexentry{"&@"\\& (ampersand)}{38}
+\\indexentry{"<@"$<$ (left angle bracket)}{60}
+\\indexentry{"=@"= (equals)}{61}
+\\indexentry{">@"$>$ (right angle bracket)}{62}
+\\indexentry{"?@"? (query)}{63}
+\\indexentry{"@@"@ (at sign)}{64}
+\\indexentry{"[@"[ (left square bracket)}{91}
+\\indexentry{"\\@"\\verb=\\= (backslash)}{92}
+\\indexentry{"]@"] (right square bracket)}{93}
+\\indexentry{"^@"\\verb=^= (caret)}{94}
+\\indexentry{"_@"\\verb=_= (underscore)}{95}
+\\indexentry{"`@"\\verb=~= (grave accent)}{96}
+\\indexentry{"{@"\\"{ (left brace)}{123}
+\\indexentry{"|@"\\verb="|= (vertical bar)}{124}
+\\indexentry{"}@"\\"} (right brace)}{125}
+\\indexentry{"~@"\\verb=~= (tilde)}{126}\fP
+
+.fi
+.RE
+Characters in the actual fields following the `@' character which
+have special significance to \*(TX must be represented as control
+sequences, or as math mode characters. Note particularly how the
+entries for the at sign, left and right braces, and the vertical
+bar, are coded. The index file output by
+.I makeindex
+for this example looks like this:
+.RS
+.nf
+
+\fC\\begin{theindex}
+
+ \\item ! (exclamation point), 33
+ \\item " (quotation mark), 34
+ \\item \\# (sharp sign), 35
+ \\item \\$ (dollar sign), 36
+ \\item \\% (percent sign), 37
+ \\item \\& (ampersand), 38
+ \\item $<$ (left angle bracket), 60
+ \\item = (equals), 61
+ \\item $>$ (right angle bracket), 62
+ \\item ? (query), 63
+ \\item @ (at sign), 64
+ \\item [ (left square bracket), 91
+ \\item \\verb=\\= (backslash), 92
+ \\item ] (right square bracket), 93
+ \\item \\verb=^= (caret), 94
+ \\item \\verb=_= (underscore), 95
+ \\item \\verb=~= (grave accent), 96
+ \\item \\{ (left brace), 123
+ \\item \\verb=|= (vertical bar), 124
+ \\item \\} (right brace), 125
+ \\item \\verb=~= (tilde), 126
+
+ \\indexspace
+
+ \\item (space), 32
+
+\\end{theindex}\fP
+.fi
+.RE
+.\"=====================================================================
+.SH "FILES"
+.TP 2.2i
+.I /usr/local/bin/makeindex
+executable file
+.TP
+.I /usr/local/lib/tex/macros/idxmac-amstex.tex
+\*(TX macro file used by
+.I makeindex
+.TP
+.I /usr/local/lib/tex/macros/idxmac.tex
+\*(TX macro file used by
+.I makeindex
+.TP
+.I /usr/local/lib/tex/macros/makeidx.doc
+\*(TX macro file used by
+.I makeindex
+.TP
+.I /usr/local/lib/tex/macros/makeidx.sty
+\*(TX macro file used by
+.I makeindex
+.\"=====================================================================
+.SH "SEE ALSO"
+ditroff(1L),
+latex(1L),
+make.index (1L),
+qsort(3),
+tex(1L),
+troff(1L)
+.LP
+.IR "\*(Uc Enhanced troff/\*(Ts \(em An Overview" ,
+R. P. C. Rodgers and Conrad Huang, LSMB Technical Report 90-2,
+UCSF School of Pharmacy, San Francisco, 1990.
+.LP
+.IR "Index Preparation and Processing" ,
+Pehong Chen and Michael A. Harrison,
+.IR "Software: Practice and Experience" ,
+.BR 19 (9),
+897\(en915,
+September 1988.
+.LP
+.IR "Automating Index Preparation" ,
+Pehong Chen and Michael A. Harrison. Technical Report 87/347,
+Computer Science Division, University of California, Berkeley, 1987
+(a \*(LX document supplied with
+.IR makeindex ).
+.LP
+.IR "MakeIndex: An Index Processor for \*(LX" ,
+Leslie Lamport, February 1987 (a \*(LX document supplied
+with
+.IR makeindex ).
+.LP
+.IR "Tools for Printing Indices" ,
+Jon L. Bentley and Brian W. Kernighan,
+.IR "Electronic Publishing \(em Origination, Dissemination, and Design" ,
+1(1), 3\(en18, June 1988 (also available as: Computing Science
+Technical Report No. 128,
+AT&T Bell Laboratories, Murray Hill, NJ 07974, 1986).
+.\"=====================================================================
+.SH "AUTHOR"
+Pehong Chen, Chen & Harrison International Systems, Inc.
+Palo Alto, California, USA <chen@renoir.berkeley.edu>.
+.br
+Manual page extensively revised and corrected, and
+.IR troff (1)
+examples created by Rick P. C. Rodgers, UCSF School
+of Pharmacy <rodgers@cca.ucsf.edu>.
+.\"=====================================================================
+.SH ACKNOWLEDGMENTS
+Leslie Lamport contributed significantly to the design.
+Michael Harrison provided valuable comments and suggestions.
+Nelson Beebe improved on the portable version, and maintains the
+source distribution for the \*(TX Users Group.
+Andreas Brosig contributed to the German word ordering.
+The modification to the
+.B \-ms
+macros was derived from a method proposed by Ravi Sethi of AT&T
+Bell Laboratories.
+The
+.I LOG
+and
+.I CONTRIB
+files in the
+.I makeindex
+source distribution record other contributions.
diff --git a/indexing/makeindex/doc/makeindex.pdf b/indexing/makeindex/doc/makeindex.pdf
new file mode 100644
index 0000000000..7bca29363c
--- /dev/null
+++ b/indexing/makeindex/doc/makeindex.pdf
Binary files differ
diff --git a/indexing/makeindex/doc/makeindex.ps b/indexing/makeindex/doc/makeindex.ps
new file mode 100644
index 0000000000..1e58e51b0c
--- /dev/null
+++ b/indexing/makeindex/doc/makeindex.ps
@@ -0,0 +1,4885 @@
+%!PS-Adobe-1.0
+%%Creator: cs.utah.edu:beebe (Nelson Beebe,220 S Phy,5254,)
+%%Title: stdin (ditroff)
+%%CreationDate: Tue Dec 10 07:36:30 1991
+%%EndComments
+% Start of psdit.pro -- prolog for ditroff translator
+% Copyright (c) 1985,1987 Adobe Systems Incorporated. All Rights Reserved.
+% GOVERNMENT END USERS: See Notice file in TranScript library directory
+% -- probably /usr/lib/ps/Notice
+% RCS: $Header: psdit.pro,v 2.2 87/11/17 16:40:42 byron Rel $
+/$DITroff 140 dict def $DITroff begin
+/fontnum 1 def /fontsize 10 def /fontheight 10 def /fontslant 0 def
+/xi {0 72 11 mul translate 72 resolution div dup neg scale 0 0 moveto
+ /fontnum 1 def /fontsize 10 def /fontheight 10 def /fontslant 0 def F
+ /pagesave save def}def
+/PB{save /psv exch def currentpoint translate
+ resolution 72 div dup neg scale 0 0 moveto}def
+/PE{psv restore}def
+/m1 matrix def /m2 matrix def /m3 matrix def /oldmat matrix def
+/tan{dup sin exch cos div}bind def
+/point{resolution 72 div mul}bind def
+/dround {transform round exch round exch itransform}bind def
+/xT{/devname exch def}def
+/xr{/mh exch def /my exch def /resolution exch def}def
+/xp{}def
+/xs{docsave restore end}def
+/xt{}def
+/xf{/fontname exch def /slotno exch def fontnames slotno get fontname eq not
+ {fonts slotno fontname findfont put fontnames slotno fontname put}if}def
+/xH{/fontheight exch def F}bind def
+/xS{/fontslant exch def F}bind def
+/s{/fontsize exch def /fontheight fontsize def F}bind def
+/f{/fontnum exch def F}bind def
+/F{fontheight 0 le {/fontheight fontsize def}if
+ fonts fontnum get fontsize point 0 0 fontheight point neg 0 0 m1 astore
+ fontslant 0 ne{1 0 fontslant tan 1 0 0 m2 astore m3 concatmatrix}if
+ makefont setfont .04 fontsize point mul 0 dround pop setlinewidth}bind def
+/X{exch currentpoint exch pop moveto show}bind def
+/N{3 1 roll moveto show}bind def
+/Y{exch currentpoint pop exch moveto show}bind def
+/S /show load def
+/ditpush{}def/ditpop{}def
+/AX{3 -1 roll currentpoint exch pop moveto 0 exch ashow}bind def
+/AN{4 2 roll moveto 0 exch ashow}bind def
+/AY{3 -1 roll currentpoint pop exch moveto 0 exch ashow}bind def
+/AS{0 exch ashow}bind def
+/MX{currentpoint exch pop moveto}bind def
+/MY{currentpoint pop exch moveto}bind def
+/MXY /moveto load def
+/cb{pop}def % action on unknown char -- nothing for now
+/n{}def/w{}def
+/p{pop showpage pagesave restore /pagesave save def}def
+/abspoint{currentpoint exch pop add exch currentpoint pop add exch}def
+/dstroke{currentpoint stroke moveto}bind def
+/Dl{2 copy gsave rlineto stroke grestore rmoveto}bind def
+/arcellipse{oldmat currentmatrix pop
+ currentpoint translate 1 diamv diamh div scale /rad diamh 2 div def
+ rad 0 rad -180 180 arc oldmat setmatrix}def
+/Dc{gsave dup /diamv exch def /diamh exch def arcellipse dstroke
+ grestore diamh 0 rmoveto}def
+/De{gsave /diamv exch def /diamh exch def arcellipse dstroke
+ grestore diamh 0 rmoveto}def
+/Da{currentpoint /by exch def /bx exch def /fy exch def /fx exch def
+ /cy exch def /cx exch def /rad cx cx mul cy cy mul add sqrt def
+ /ang1 cy neg cx neg atan def /ang2 fy fx atan def cx bx add cy by add
+ 2 copy rad ang1 ang2 arcn stroke exch fx add exch fy add moveto}def
+/Barray 200 array def % 200 values in a wiggle
+/D~{mark}def
+/D~~{counttomark Barray exch 0 exch getinterval astore /Bcontrol exch def pop
+ /Blen Bcontrol length def Blen 4 ge Blen 2 mod 0 eq and
+ {Bcontrol 0 get Bcontrol 1 get abspoint /Ycont exch def /Xcont exch def
+ Bcontrol 0 2 copy get 2 mul put Bcontrol 1 2 copy get 2 mul put
+ Bcontrol Blen 2 sub 2 copy get 2 mul put
+ Bcontrol Blen 1 sub 2 copy get 2 mul put
+ /Ybi /Xbi currentpoint 3 1 roll def def 0 2 Blen 4 sub
+ {/i exch def
+ Bcontrol i get 3 div Bcontrol i 1 add get 3 div
+ Bcontrol i get 3 mul Bcontrol i 2 add get add 6 div
+ Bcontrol i 1 add get 3 mul Bcontrol i 3 add get add 6 div
+ /Xbi Xcont Bcontrol i 2 add get 2 div add def
+ /Ybi Ycont Bcontrol i 3 add get 2 div add def
+ /Xcont Xcont Bcontrol i 2 add get add def
+ /Ycont Ycont Bcontrol i 3 add get add def
+ Xbi currentpoint pop sub Ybi currentpoint exch pop sub rcurveto
+ }for dstroke}if}def
+end
+/ditstart{$DITroff begin
+ /nfonts 60 def % NFONTS makedev/ditroff dependent!
+ /fonts[nfonts{0}repeat]def
+ /fontnames[nfonts{()}repeat]def
+/docsave save def
+}def
+
+% character outcalls
+/oc {/pswid exch def /cc exch def /name exch def
+ /ditwid pswid fontsize mul resolution mul 72000 div def
+ /ditsiz fontsize resolution mul 72 div def
+ ocprocs name known{ocprocs name get exec}{name cb}
+ ifelse}def
+/fractm [.65 0 0 .6 0 0] def
+/fraction
+ {/fden exch def /fnum exch def gsave /cf currentfont def
+ cf fractm makefont setfont 0 .3 dm 2 copy neg rmoveto
+ fnum show rmoveto currentfont cf setfont(\244)show setfont fden show
+ grestore ditwid 0 rmoveto} def
+/oce {grestore ditwid 0 rmoveto}def
+/dm {ditsiz mul}def
+/ocprocs 50 dict def ocprocs begin
+(14){(1)(4)fraction}def
+(12){(1)(2)fraction}def
+(34){(3)(4)fraction}def
+(13){(1)(3)fraction}def
+(23){(2)(3)fraction}def
+(18){(1)(8)fraction}def
+(38){(3)(8)fraction}def
+(58){(5)(8)fraction}def
+(78){(7)(8)fraction}def
+(sr){gsave .05 dm .16 dm rmoveto(\326)show oce}def
+(is){gsave 0 .15 dm rmoveto(\362)show oce}def
+(->){gsave 0 .02 dm rmoveto(\256)show oce}def
+(<-){gsave 0 .02 dm rmoveto(\254)show oce}def
+(==){gsave 0 .05 dm rmoveto(\272)show oce}def
+end
+% DIThacks fonts for some special chars
+50 dict dup begin
+/FontType 3 def
+/FontName /DIThacks def
+/FontMatrix [.001 0.0 0.0 .001 0.0 0.0] def
+/FontBBox [-220 -280 900 900] def% a lie but ...
+/Encoding 256 array def
+0 1 255{Encoding exch /.notdef put}for
+Encoding
+ dup 8#040/space put %space
+ dup 8#110/rc put %right ceil
+ dup 8#111/lt put %left top curl
+ dup 8#112/bv put %bold vert
+ dup 8#113/lk put %left mid curl
+ dup 8#114/lb put %left bot curl
+ dup 8#115/rt put %right top curl
+ dup 8#116/rk put %right mid curl
+ dup 8#117/rb put %right bot curl
+ dup 8#120/rf put %right floor
+ dup 8#121/lf put %left floor
+ dup 8#122/lc put %left ceil
+ dup 8#140/sq put %square
+ dup 8#141/bx put %box
+ dup 8#142/ci put %circle
+ dup 8#143/br put %box rule
+ dup 8#144/rn put %root extender
+ dup 8#145/vr put %vertical rule
+ dup 8#146/ob put %outline bullet
+ dup 8#147/bu put %bullet
+ dup 8#150/ru put %rule
+ dup 8#151/ul put %underline
+ pop
+/DITfd 100 dict def
+/BuildChar{0 begin
+ /cc exch def /fd exch def
+ /charname fd /Encoding get cc get def
+ /charwid fd /Metrics get charname get def
+ /charproc fd /CharProcs get charname get def
+ charwid 0 fd /FontBBox get aload pop setcachedevice
+ 40 setlinewidth
+ newpath 0 0 moveto gsave charproc grestore
+ end}def
+/BuildChar load 0 DITfd put
+%/UniqueID 5 def
+/CharProcs 50 dict def
+CharProcs begin
+/space{}def
+/.notdef{}def
+/ru{500 0 rls}def
+/rn{0 750 moveto 500 0 rls}def
+/vr{20 800 moveto 0 -770 rls}def
+/bv{20 800 moveto 0 -1000 rls}def
+/br{20 770 moveto 0 -1040 rls}def
+/ul{0 -250 moveto 500 0 rls}def
+/ob{200 250 rmoveto currentpoint newpath 200 0 360 arc closepath stroke}def
+/bu{200 250 rmoveto currentpoint newpath 200 0 360 arc closepath fill}def
+/sq{80 0 rmoveto currentpoint dround newpath moveto
+ 640 0 rlineto 0 640 rlineto -640 0 rlineto closepath stroke}def
+/bx{80 0 rmoveto currentpoint dround newpath moveto
+ 640 0 rlineto 0 640 rlineto -640 0 rlineto closepath fill}def
+/ci{355 333 rmoveto currentpoint newpath 333 0 360 arc
+ 50 setlinewidth stroke}def
+
+/lt{20 -200 moveto 0 550 rlineto currx 800 2cx s4 add exch s4 a4p stroke}def
+/lb{20 800 moveto 0 -550 rlineto currx -200 2cx s4 add exch s4 a4p stroke}def
+/rt{20 -200 moveto 0 550 rlineto currx 800 2cx s4 sub exch s4 a4p stroke}def
+/rb{20 800 moveto 0 -500 rlineto currx -200 2cx s4 sub exch s4 a4p stroke}def
+/lk{20 800 moveto 20 300 -280 300 s4 arcto pop pop 1000 sub
+ currentpoint stroke moveto
+ 20 300 4 2 roll s4 a4p 20 -200 lineto stroke}def
+/rk{20 800 moveto 20 300 320 300 s4 arcto pop pop 1000 sub
+ currentpoint stroke moveto
+ 20 300 4 2 roll s4 a4p 20 -200 lineto stroke}def
+/lf{20 800 moveto 0 -1000 rlineto s4 0 rls}def
+/rf{20 800 moveto 0 -1000 rlineto s4 neg 0 rls}def
+/lc{20 -200 moveto 0 1000 rlineto s4 0 rls}def
+/rc{20 -200 moveto 0 1000 rlineto s4 neg 0 rls}def
+end
+
+/Metrics 50 dict def Metrics begin
+/.notdef 0 def
+/space 500 def
+/ru 500 def
+/br 0 def
+/lt 250 def
+/lb 250 def
+/rt 250 def
+/rb 250 def
+/lk 250 def
+/rk 250 def
+/rc 250 def
+/lc 250 def
+/rf 250 def
+/lf 250 def
+/bv 250 def
+/ob 350 def
+/bu 350 def
+/ci 750 def
+/bx 750 def
+/sq 750 def
+/rn 500 def
+/ul 500 def
+/vr 0 def
+end
+
+DITfd begin
+/s2 500 def /s4 250 def /s3 333 def
+/a4p{arcto pop pop pop pop}def
+/2cx{2 copy exch}def
+/rls{rlineto stroke}def
+/currx{currentpoint pop}def
+/dround{transform round exch round exch itransform} def
+end
+end
+/DIThacks exch definefont pop
+
+ditstart
+(psc)xT
+576 1 1 xr
+1(Times-Roman)xf 1 f
+2(Times-Italic)xf 2 f
+3(Times-Bold)xf 3 f
+4(Times-BoldItalic)xf 4 f
+5(Helvetica)xf 5 f
+6(Helvetica-Bold)xf 6 f
+7(Courier)xf 7 f
+8(Courier-Bold)xf 8 f
+9(Symbol)xf 9 f
+10(DIThacks)xf 10 f
+10 s
+1 f
+xi
+%%EndProlog
+
+%%Page: 11 11
+10 s 0 xH 0 xS 1 f
+555 384(MAKEINDEX)N
+1054(\()X
+1094(1L)X
+1196(\))X
+1954(UNIX)X
+2175(Programmer's)X
+2654(Manual)X
+3631(MAKEINDEX)X
+4130(\()X
+4170(1L)X
+4272(\))X
+3 f
+9 s
+555 768(ACKNOWLEDGMENTS)N
+1 f
+10 s
+843 864(Leslie)N
+1062(Lamport)X
+1361(contributed)X
+1749(signi\256cantly)X
+2167(to)X
+2252(the)X
+2372(design.)X
+2643(Michael)X
+2928(Harrison)X
+3231(provided)X
+3538(valuable)X
+3832(comments)X
+4183(and)X
+843 960(suggestions.)N
+1279(Nelson)X
+1529(Beebe)X
+1753(improved)X
+2083(on)X
+2186(the)X
+2307(portable)X
+2593(version,)X
+2872(and)X
+3010(maintains)X
+3343(the)X
+3463(source)X
+3695(distribution)X
+4085(for)X
+4201(the)X
+843 1056(T)N
+879 1075(E)N
+918 1056(X)N
+998(Users)X
+1203(Group.)X
+1470(Andreas)X
+1760(Brosig)X
+1995(contributed)X
+2382(to)X
+2466(the)X
+2585(German)X
+2865(word)X
+3051(ordering.)X
+3384(The)X
+3530(modi\256cation)X
+3955(to)X
+4038(the)X
+3 f
+9 f
+4157(-)X
+3 f
+4201(ms)X
+1 f
+843 1152(macros)N
+1105(was)X
+1260(derived)X
+1531(from)X
+1717(a)X
+1783(method)X
+2053(proposed)X
+2377(by)X
+2487(Ravi)X
+2667(Sethi)X
+2860(of)X
+2956(AT&T)X
+3203(Bell)X
+3365(Laboratories.)X
+3840(The)X
+2 f
+3994(LOG)X
+1 f
+4183(and)X
+2 f
+843 1248(CONTRIB)N
+1 f
+1196(\256les)X
+1349(in)X
+1431(the)X
+2 f
+1549(makeindex)X
+1 f
+1913(source)X
+2143(distribution)X
+2531(record)X
+2757(other)X
+2942(contributions.)X
+555 6144(7th)N
+677(Edition)X
+2121(10)X
+2221(December)X
+2572(1991)X
+4219(11)X
+
+11 p
+%%Page: 10 10
+10 s 0 xH 0 xS 1 f
+555 384(MAKEINDEX)N
+1054(\()X
+1094(1L)X
+1196(\))X
+1954(UNIX)X
+2175(Programmer's)X
+2654(Manual)X
+3631(MAKEINDEX)X
+4130(\()X
+4170(1L)X
+4272(\))X
+7 f
+1227 768(\\item)N
+1515($<$)X
+1707(\(left)X
+1995(angle)X
+2283(bracket\),)X
+2763(60)X
+1227 864(\\item)N
+1515(=)X
+1611(\(equals\),)X
+2091(61)X
+1227 960(\\item)N
+1515($>$)X
+1707(\(right)X
+2043(angle)X
+2331(bracket\),)X
+2811(62)X
+1227 1056(\\item)N
+1515(?)X
+1611(\(query\),)X
+2043(63)X
+1227 1152(\\item)N
+1515(@)X
+1611(\(at)X
+1803(sign\),)X
+2139(64)X
+1227 1248(\\item)N
+1515([)X
+1611(\(left)X
+1899(square)X
+2235(bracket\),)X
+2715(91)X
+1227 1344(\\item)N
+1515(\\verb=\\=)X
+1947(\(backslash\),)X
+2571(92)X
+1227 1440(\\item)N
+1515(])X
+1611(\(right)X
+1947(square)X
+2283(bracket\),)X
+2763(93)X
+1227 1536(\\item)N
+1515(\\verb=\303=)X
+1947(\(caret\),)X
+2379(94)X
+1227 1632(\\item)N
+1515(\\verb=_=)X
+1947(\(underscore\),)X
+2619(95)X
+1227 1728(\\item)N
+1515(\\verb=\304=)X
+1947(\(grave)X
+2283(accent\),)X
+2715(96)X
+1227 1824(\\item)N
+1515(\\{)X
+1659(\(left)X
+1947(brace\),)X
+2331(123)X
+1227 1920(\\item)N
+1515(\\verb=)X
+9 f
+(|)S
+7 f
+(=)S
+1915(\(vertical)X
+2395(bar\),)X
+2683(124)X
+1227 2016(\\item)N
+1515(\\})X
+1659(\(right)X
+1995(brace\),)X
+2379(125)X
+1227 2112(\\item)N
+1515(\\verb=\304=)X
+1947(\(tilde\),)X
+2379(126)X
+1227 2304(\\indexspace)N
+1227 2496(\\item)N
+1611(\(space\),)X
+2043(32)X
+1131 2688(\\end{theindex})N
+3 f
+9 s
+555 2822(FILES)N
+2 f
+10 s
+843 2918(/usr/local/bin/makeindex)N
+1 f
+2110(executable)X
+2474(\256le)X
+2 f
+843 3052(/usr/local/lib/tex/macros/idxmac-amstex.tex)N
+1 f
+2110 3148(T)N
+2146 3167(E)N
+2185 3148(X)N
+2263(macro)X
+2484(\256le)X
+2606(used)X
+2773(by)X
+2 f
+2873(makeindex)X
+843 3282(/usr/local/lib/tex/macros/idxmac.tex)N
+1 f
+2110(T)X
+2146 3301(E)N
+2185 3282(X)N
+2263(macro)X
+2484(\256le)X
+2606(used)X
+2773(by)X
+2 f
+2873(makeindex)X
+843 3416(/usr/local/lib/tex/macros/makeidx.doc)N
+1 f
+2110(T)X
+2146 3435(E)N
+2185 3416(X)N
+2263(macro)X
+2484(\256le)X
+2606(used)X
+2773(by)X
+2 f
+2873(makeindex)X
+843 3550(/usr/local/lib/tex/macros/makeidx.sty)N
+1 f
+2110(T)X
+2146 3569(E)N
+2185 3550(X)N
+2263(macro)X
+2484(\256le)X
+2606(used)X
+2773(by)X
+2 f
+2873(makeindex)X
+3 f
+9 s
+555 3684(SEE)N
+709(ALSO)X
+1 f
+10 s
+843 3780(ditroff\(1L\),)N
+1231(latex\(1L\),)X
+1570(make.index)X
+1962(\(1L\),)X
+2145(qsort\(3\),)X
+2439(tex\(1L\),)X
+2720(troff\(1L\))X
+2 f
+843 3914(U)N
+892(C)X
+927 3935(S)N
+959(F)X
+1032 3914(Enhanced)N
+1377(troff/T)X
+8 s
+1580(RAN)X
+10 s
+1701(S)X
+8 s
+(CRIPT)S
+10 s
+1943(\320)X
+2038(An)X
+2151(Overview)X
+1 f
+2466(,)X
+2510(R.)X
+2607(P.)X
+2695(C.)X
+2792(Rodgers)X
+3083(and)X
+3223(Conrad)X
+3483(Huang,)X
+3741(LSMB)X
+3982(Technical)X
+843 4010(Report)N
+1081(90-2,)X
+1268(UCSF)X
+1487(School)X
+1729(of)X
+1816(Pharmacy,)X
+2177(San)X
+2317(Francisco,)X
+2669(1990.)X
+2 f
+843 4144(Index)N
+1043(Preparation)X
+1455(and)X
+1596(Processing)X
+1 f
+1959(,)X
+2000(Pehong)X
+2261(Chen)X
+2451(and)X
+2588(Michael)X
+2872(A.)X
+2971(Harrison,)X
+2 f
+3293(Software:)X
+3625(Practice)X
+3918(and)X
+4058(Experi-)X
+843 4240(ence)N
+1 f
+998(,)X
+3 f
+1038(19)X
+1 f
+(\(9\),)S
+1252(897\261915,)X
+1572(September)X
+1935(1988.)X
+2 f
+843 4374(Automating)N
+1245(Index)X
+1453(Preparation)X
+1 f
+1851(,)X
+1900(Pehong)X
+2169(Chen)X
+2366(and)X
+2510(Michael)X
+2801(A.)X
+2907(Harrison.)X
+3256(Technical)X
+3601(Report)X
+3847(87/347,)X
+4117(Com-)X
+843 4470(puter)N
+1031(Science)X
+1303(Division,)X
+1620(University)X
+1980(of)X
+2069(California,)X
+2436(Berkeley,)X
+2768(1987)X
+2950(\(a)X
+3035(L)X
+8 s
+3056 4456(A)N
+10 s
+3090 4470(T)N
+3126 4489(E)N
+3165 4470(X)N
+3245(document)X
+3583(supplied)X
+3876(with)X
+2 f
+4040(makein-)X
+843 4566(dex)N
+1 f
+962(\).)X
+2 f
+843 4700 0.3472(MakeIndex:)AN
+1260(An)X
+1381(Index)X
+1592(Processor)X
+1949(for)X
+2074(L)X
+8 s
+2090 4686(A)N
+10 s
+2117 4700(T)N
+2148 4719(E)N
+2187 4700(X)N
+1 f
+2243(,)X
+2295(Leslie)X
+2523(Lamport,)X
+2851(February)X
+3173(1987)X
+3365(\(a)X
+3460(L)X
+8 s
+3481 4686(A)N
+10 s
+3515 4700(T)N
+3551 4719(E)N
+3590 4700(X)N
+3680(document)X
+4028(supplied)X
+843 4796(with)N
+2 f
+1005(makeindex)X
+1 f
+1356(\).)X
+2 f
+843 4930(Tools)N
+1044(for)X
+1161(Printing)X
+1451(Indices)X
+1 f
+1690(,)X
+1734(Jon)X
+1869(L.)X
+1962(Bentley)X
+2235(and)X
+2375(Brian)X
+2577(W.)X
+2697(Kernighan,)X
+2 f
+3080(Electronic)X
+3438(Publishing)X
+3808(\320)X
+3902(Origination,)X
+843 5026(Dissemination,)N
+1347(and)X
+1489(Design)X
+1 f
+1723(,)X
+1765(1\(1\),)X
+1941(3\26118,)X
+2143(June)X
+2312(1988)X
+2494(\(also)X
+2671(available)X
+2982(as:)X
+3092(Computing)X
+3472(Science)X
+3743(Technical)X
+4081(Report)X
+843 5122(No.)N
+981(128,)X
+1141(AT&T)X
+1379(Bell)X
+1532(Laboratories,)X
+1978(Murray)X
+2239(Hill,)X
+2403(NJ)X
+2512(07974,)X
+2752(1986\).)X
+3 f
+9 s
+555 5256(AUTHOR)N
+1 f
+10 s
+843 5352(Pehong)N
+1162(Chen,)X
+1430(Chen)X
+1678(&)X
+1819(Harrison)X
+2179(International)X
+2668(Systems,)X
+3033(Inc.)X
+3255(Palo)X
+3476(Alto,)X
+3716(California,)X
+4139(USA)X
+843 5448 0.1611(<chen@renoir.berkeley.edu>.)AN
+843 5544(Manual)N
+1123(page)X
+1310(extensively)X
+1710(revised)X
+1977(and)X
+2128(corrected,)X
+2482(and)X
+2 f
+2632(troff)X
+1 f
+2776(\(1\))X
+2904(examples)X
+3241(created)X
+3508(by)X
+3622(Rick)X
+3807(P.)X
+3905(C.)X
+4012(Rodgers,)X
+843 5640(UCSF)N
+1062(School)X
+1304(of)X
+1391(Pharmacy)X
+1732 0.1790(<rodgers@cca.ucsf.edu>.)AX
+555 6144(7th)N
+677(Edition)X
+2121(10)X
+2221(December)X
+2572(1991)X
+4219(10)X
+
+11 p
+%%Page: 9 9
+10 s 0 xH 0 xS 1 f
+555 384(MAKEINDEX)N
+1054(\()X
+1094(1L)X
+1196(\))X
+1954(UNIX)X
+2175(Programmer's)X
+2654(Manual)X
+3631(MAKEINDEX)X
+4130(\()X
+4170(1L)X
+4272(\))X
+7 f
+1131 768(\\item)N
+1419(f\\"ur,)X
+1755(1)X
+1 f
+843 902(which)N
+1059(represents)X
+1405(an)X
+1501(umlaut-accented)X
+2052(`u')X
+2166(to)X
+2248(the)X
+2366(T)X
+2402 921(E)N
+2441 902(X)N
+2519(family)X
+2748(of)X
+2835(processors.)X
+843 1036(From)N
+1051(version)X
+1321(2.11)X
+1495(of)X
+2 f
+1596(makeindex)X
+1 f
+1947(,)X
+2001(the)X
+3 f
+2133(quote)X
+1 f
+2358(operator)X
+2660(may)X
+2832(quote)X
+2 f
+3044(any)X
+1 f
+3194(character)X
+3524(in)X
+3620(the)X
+3752(range)X
+3965(1)X
+4039(.)X
+4072(.)X
+4105(.)X
+4159(255.)X
+843 1132(Character)N
+1183(0)X
+1250(is)X
+1330(excluded)X
+1647(because)X
+1929(it)X
+2000(is)X
+2080(used)X
+2253(internally)X
+2586(in)X
+2674(the)X
+2 f
+2798(makeindex)X
+1 f
+3168(source)X
+3404(code)X
+3582(as)X
+3675(a)X
+3737(string)X
+3945(terminator.)X
+843 1228(With)N
+1023(this)X
+1158(change,)X
+1426(sort)X
+1566(keys)X
+1733(can)X
+1865(be)X
+1961(created)X
+2214(for)X
+2328(all)X
+2428(eight-bit)X
+2719(characters)X
+3066(except)X
+3296(0.)X
+3396(The)X
+3541(sorting)X
+3783(order)X
+3973(is)X
+1131 1420(punctuation)N
+1529(characters)X
+1876(\(in)X
+1985(ASCII)X
+2214(order\),)X
+1131 1516(digits,)N
+1131 1612(control)N
+1378(characters)X
+1725(\(1)X
+1812(.)X
+1845(.)X
+1878(.)X
+1918(31\),)X
+1131 1708(space)N
+1330(\(32\),)X
+1131 1804(letters)N
+1347(\(ignoring)X
+1665(case\),)X
+1131 1900(characters)N
+1478(127)X
+1618(.)X
+1651(.)X
+1684(.)X
+1724(255.)X
+843 2092(Here)N
+1030(is)X
+1113(an)X
+1219(example)X
+1521(showing)X
+1822(the)X
+1949(indexing)X
+2258(of)X
+2354(all)X
+2463(printable)X
+2777(ASCII)X
+3015(characters)X
+3371(other)X
+3565(than)X
+3732(letters)X
+3957(and)X
+4102(digits,)X
+843 2188(assuming)N
+1179(the)X
+1310(default)X
+1566(T)X
+1602 2207(E)N
+1641 2188(X)N
+1732(format.)X
+2019(For)X
+2163(convenience,)X
+2618(the)X
+2749(page)X
+2934(number)X
+3212 0.3889(references)AX
+3577(are)X
+3709(the)X
+3840(corresponding)X
+843 2284(ASCII)N
+1072(ordinal)X
+1319(values.)X
+7 f
+1131 2476(\\indexentry{")N
+1803(@")X
+1995(\(space\)}{32})X
+1131 2572(\\indexentry{"!@"!)N
+1995(\(exclamation)X
+2619(point\)}{33})X
+1131 2668(\\indexentry{""@"")N
+1995(\(quotation)X
+2523(mark\)}{34})X
+1131 2764(\\indexentry{"#@"\\#)N
+2043(\(sharp)X
+2379(sign\)}{35})X
+1131 2860(\\indexentry{"$@"\\$)N
+2043(\(dollar)X
+2427(sign\)}{36})X
+1131 2956(\\indexentry{"%@"\\%)N
+2043(\(percent)X
+2475(sign\)}{37})X
+1131 3052(\\indexentry{"&@"\\&)N
+2043(\(ampersand\)}{38})X
+1131 3148(\\indexentry{"<@"$<$)N
+2091(\(left)X
+2379(angle)X
+2667(bracket\)}{60})X
+1131 3244(\\indexentry{"=@"=)N
+1995(\(equals\)}{61})X
+1131 3340(\\indexentry{">@"$>$)N
+2091(\(right)X
+2427(angle)X
+2715(bracket\)}{62})X
+1131 3436(\\indexentry{"?@"?)N
+1995(\(query\)}{63})X
+1131 3532(\\indexentry{"@@"@)N
+1995(\(at)X
+2187(sign\)}{64})X
+1131 3628(\\indexentry{"[@"[)N
+1995(\(left)X
+2283(square)X
+2619(bracket\)}{91})X
+1131 3724(\\indexentry{"\\@"\\verb=\\=)N
+2331(\(backslash\)}{92})X
+1131 3820(\\indexentry{"]@"])N
+1995(\(right)X
+2331(square)X
+2667(bracket\)}{93})X
+1131 3916(\\indexentry{"\303@"\\verb=\303=)N
+2331(\(caret\)}{94})X
+1131 4012(\\indexentry{"_@"\\verb=_=)N
+2331(\(underscore\)}{95})X
+1131 4108(\\indexentry{"`@"\\verb=\304=)N
+2331(\(grave)X
+2667(accent\)}{96})X
+1131 4204(\\indexentry{"{@"\\"{)N
+2091(\(left)X
+2379(brace\)}{123})X
+1131 4300(\\indexentry{")N
+9 f
+(|)S
+7 f
+(@"\\verb=")S
+9 f
+(|)S
+7 f
+(=)S
+2315(\(vertical)X
+2795(bar\)}{124})X
+1131 4396(\\indexentry{"}@"\\"})N
+2091(\(right)X
+2427(brace\)}{125})X
+1131 4492(\\indexentry{"\304@"\\verb=\304=)N
+2331(\(tilde\)}{126})X
+1 f
+843 4684(Characters)N
+1211(in)X
+1297(the)X
+1419(actual)X
+1635(\256elds)X
+1832(following)X
+2167(the)X
+2288(`@')X
+2439(character)X
+2758(which)X
+2977(have)X
+3152(special)X
+3398(signi\256cance)X
+3804(to)X
+3889(T)X
+3925 4703(E)N
+3964 4684(X)N
+4045(must)X
+4223(be)X
+843 4780(represented)N
+1238(as)X
+1329(control)X
+1580(sequences,)X
+1950(or)X
+2041(as)X
+2132(math)X
+2316(mode)X
+2518(characters.)X
+2909(Note)X
+3089(particularly)X
+3483(how)X
+3645(the)X
+3766(entries)X
+4003(for)X
+4120(the)X
+4241(at)X
+843 4876(sign,)N
+1027(left)X
+1165(and)X
+1312(right)X
+1494(braces,)X
+1751(and)X
+1898(the)X
+2027(vertical)X
+2299(bar,)X
+2453(are)X
+2583(coded.)X
+2846(The)X
+3002(index)X
+3210(\256le)X
+3342(output)X
+3576(by)X
+2 f
+3686(makeindex)X
+1 f
+4060(for)X
+4184(this)X
+843 4972(example)N
+1135(looks)X
+1328(like)X
+1468(this:)X
+7 f
+1131 5164(\\begin{theindex})N
+1227 5356(\\item)N
+1515(!)X
+1611(\(exclamation)X
+2235(point\),)X
+2619(33)X
+1227 5452(\\item)N
+1515(")X
+1611(\(quotation)X
+2139(mark\),)X
+2475(34)X
+1227 5548(\\item)N
+1515(\\#)X
+1659(\(sharp)X
+1995(sign\),)X
+2331(35)X
+1227 5644(\\item)N
+1515(\\$)X
+1659(\(dollar)X
+2043(sign\),)X
+2379(36)X
+1227 5740(\\item)N
+1515(\\%)X
+1659(\(percent)X
+2091(sign\),)X
+2427(37)X
+1227 5836(\\item)N
+1515(\\&)X
+1659(\(ampersand\),)X
+2283(38)X
+1 f
+555 6220(7th)N
+677(Edition)X
+2121(10)X
+2221(December)X
+2572(1991)X
+4259(9)X
+
+10 p
+%%Page: 8 8
+10 s 0 xH 0 xS 1 f
+555 384(MAKEINDEX)N
+1054(\()X
+1094(1L)X
+1196(\))X
+1954(UNIX)X
+2175(Programmer's)X
+2654(Manual)X
+3631(MAKEINDEX)X
+4130(\()X
+4170(1L)X
+4272(\))X
+843 768(will)N
+987(expand)X
+1239(to)X
+7 f
+1131 902({\\it)N
+1371(see\\/})X
+1707(beta)X
+1 f
+843 1036(Note)N
+1019(that)X
+1159(in)X
+1241(a)X
+1297(cross)X
+1482 0.4531(reference)AX
+1803(like)X
+1943(this)X
+2078(the)X
+2196(page)X
+2368(number)X
+2633(disappears.)X
+843 1170(A)N
+921(pair)X
+1066(of)X
+3 f
+1153(encap)X
+1 f
+1373(concatenated)X
+1813(with)X
+3 f
+1975(range_open)X
+1 f
+2395(\(`)X
+9 f
+2449(|)X
+1 f
+(\('\))S
+2566(and)X
+3 f
+2702(range_close)X
+1 f
+3123(\(`)X
+9 f
+3177(|)X
+1 f
+(\)'\))S
+3294(creates)X
+3538(an)X
+3634(explicit)X
+3894(page)X
+4066(range:)X
+7 f
+1131 1304(\\indexentry{alpha)N
+9 f
+(|)S
+7 f
+(\(}{1})S
+1131 1400(\\indexentry{alpha)N
+9 f
+(|)S
+7 f
+(\)}{5})S
+1 f
+843 1534(will)N
+987(become)X
+7 f
+1131 1668(\\item)N
+1419(alpha,)X
+1755(1\3205)X
+1 f
+843 1802(Intermediate)N
+1277(pages)X
+1488(indexed)X
+1770(by)X
+1878(the)X
+2004(same)X
+2197(key)X
+2341(will)X
+2493(be)X
+2597(merged)X
+2866(into)X
+3018(the)X
+3144(range)X
+3351(implicitly.)X
+3729(This)X
+3898(is)X
+3978(especially)X
+843 1898(useful)N
+1060(when)X
+1255(an)X
+1352(entire)X
+1556(section)X
+1804(about)X
+2003(a)X
+2060(particular)X
+2388(subject)X
+2635(is)X
+2708(to)X
+2790(be)X
+2886(indexed,)X
+3180(in)X
+3262(which)X
+3478(case)X
+3637(only)X
+3799(the)X
+3917(range)X
+4116(open-)X
+843 1994(ing)N
+970(and)X
+1111(closing)X
+1367(operators)X
+1691(need)X
+1868(to)X
+1955(be)X
+2056(inserted)X
+2335(at)X
+2417(the)X
+2539(beginning)X
+2883(and)X
+3023(end)X
+3163(of)X
+3254(the)X
+3376(section.)X
+3667(Explicit)X
+3944(page)X
+4120(range)X
+843 2090(formation)N
+1179(can)X
+1311(also)X
+1460(include)X
+1716(an)X
+1812(extra)X
+1993(command)X
+2329(to)X
+2411(set)X
+2520(the)X
+2638(page)X
+2810(range)X
+3009(in)X
+3091(a)X
+3147(designated)X
+3510(font:)X
+7 f
+1131 2224(\\indexentry{alpha)N
+9 f
+(|)S
+7 f
+(\(bold}{1})S
+1131 2320(\\indexentry{alpha)N
+9 f
+(|)S
+7 f
+(\)}{5})S
+1 f
+843 2454(will)N
+987(become)X
+7 f
+1131 2588(\\item)N
+1419(alpha,)X
+1755(\\bold{1--5})X
+1 f
+843 2722(Several)N
+1104(potential)X
+1404(problems)X
+1722(are)X
+1841(worth)X
+2048(mentioning.)X
+2472(First,)X
+2658(entries)X
+2892(like)X
+7 f
+1131 2856(\\indexentry{alpha)N
+9 f
+(|)S
+7 f
+(\(}{1})S
+1131 2952(\\indexentry{alpha)N
+9 f
+(|)S
+7 f
+(bold}{3})S
+1131 3048(\\indexentry{alpha)N
+9 f
+(|)S
+7 f
+(\)}{5})S
+1 f
+843 3182(will)N
+987(be)X
+1083(interpreted)X
+1451(as)X
+7 f
+1131 3316(\\item)N
+1419(alpha,)X
+1755(\\bold{3},)X
+2235(1--5)X
+1 f
+843 3450(but)N
+976(with)X
+1149(a)X
+1216(warning)X
+1510(message)X
+1813(in)X
+1906(the)X
+2035(transcript)X
+2368(about)X
+2576(encountering)X
+3025(an)X
+3131(inconsistent)X
+3543(page)X
+3725(encapsulator.)X
+4201(An)X
+843 3546(explicit)N
+1105(range)X
+1306(beginning)X
+1648(in)X
+1732(a)X
+1790(Roman)X
+2043(page)X
+2217(number)X
+2484(and)X
+2622(ending)X
+2862(in)X
+2946(Arabic)X
+3187(is)X
+3262(also)X
+3412(considered)X
+3781(an)X
+3878(error.)X
+4096(In)X
+4184(this)X
+843 3642(instance,)N
+1151(\(if)X
+1252(possible\))X
+1566(the)X
+1689(range)X
+1893(is)X
+1971(broken)X
+2219(into)X
+2368(two)X
+2513(subranges,)X
+2879(one)X
+3020(in)X
+3107(Roman)X
+3363(and)X
+3504(the)X
+3627(other)X
+3817(in)X
+3904(Arabic.)X
+4188(For)X
+843 3738(instance,)N
+7 f
+1131 3872(\\indexentry{alpha)N
+9 f
+(|)S
+7 f
+(\(}{i})S
+1131 3968(\\indexentry{alpha}{iv})N
+1131 4064(\\indexentry{alpha}{3})N
+1131 4160(\\indexentry{alpha)N
+9 f
+(|)S
+7 f
+(\)}{7})S
+1 f
+843 4294(will)N
+987(be)X
+1083(turned)X
+1308(into)X
+7 f
+1131 4428(\\item)N
+1419(alpha,)X
+1755(i--iv,)X
+2091(3--7)X
+1 f
+843 4562(with)N
+1005(a)X
+1061(warning)X
+1344(message)X
+1636(in)X
+1718(the)X
+1836(transcript)X
+2159(\256le)X
+2281(complaining)X
+2701(about)X
+2899(an)X
+2995(illegal)X
+3215(range)X
+3414(formation.)X
+843 4696(Finally,)N
+1109(every)X
+1308(special)X
+1551(symbol)X
+1806(mentioned)X
+2164(in)X
+2246(this)X
+2381(section)X
+2628(may)X
+2786(be)X
+2882(escaped)X
+3157(by)X
+3257(the)X
+3 f
+3375(quote)X
+1 f
+3586(operator)X
+3874(\(`"'\).)X
+4075(Thus)X
+7 f
+1131 4830(\\indexentry{alpha"@beta}{1})N
+1 f
+843 4964(will)N
+987(actually)X
+1261(become)X
+7 f
+1131 5098(\\item)N
+1419(alpha@beta,)X
+2043(1)X
+1 f
+843 5232(as)N
+931(a)X
+988(result)X
+1187(of)X
+1275(executing)X
+2 f
+1608(makeindex)X
+1 f
+1959(.)X
+2020(The)X
+2166(quoting)X
+2431(power)X
+2653(of)X
+3 f
+2740(quote)X
+1 f
+2951(is)X
+3024(eliminated)X
+3382(if)X
+3451(it)X
+3515(is)X
+3588(immediately)X
+4008(preceded)X
+843 5328(by)N
+3 f
+943(escape)X
+1 f
+1186(\(`\\'\).)X
+1376(For)X
+1507(example,)X
+7 f
+1131 5462(\\indexentry{f\\"ur}{1})N
+1 f
+843 5596(becomes)N
+555 6144(7th)N
+677(Edition)X
+2121(10)X
+2221(December)X
+2572(1991)X
+4259(8)X
+
+9 p
+%%Page: 7 7
+10 s 0 xH 0 xS 1 f
+555 384(MAKEINDEX)N
+1054(\()X
+1094(1L)X
+1196(\))X
+1954(UNIX)X
+2175(Programmer's)X
+2654(Manual)X
+3631(MAKEINDEX)X
+4130(\()X
+4170(1L)X
+4272(\))X
+843 768(A)N
+928(special)X
+1178(symbol)X
+1440(is)X
+1520(de\256ned)X
+1783(here)X
+1948(to)X
+2036(be)X
+2138(any)X
+2280(character)X
+2602(not)X
+2730(appearing)X
+3073(in)X
+3161(the)X
+3285(union)X
+3493(of)X
+3586(digits)X
+3789(and)X
+3931(the)X
+4055(English)X
+843 864(alphabetic)N
+1208(characters.)X
+1610(Patterns)X
+1903(starting)X
+2178(with)X
+2355(special)X
+2613(symbols)X
+2914(precede)X
+3200(numbers,)X
+3530(which)X
+3760(precede)X
+4045(patterns)X
+843 960(starting)N
+1105(with)X
+1269(letters.)X
+1526(As)X
+1636(a)X
+1693(special)X
+1937(case,)X
+2117(a)X
+2174(string)X
+2377(starting)X
+2638(with)X
+2801(a)X
+2858(digit)X
+3025(but)X
+3148(mixed)X
+3369(with)X
+3532(non-digits)X
+3877(is)X
+3951(considered)X
+843 1056(to)N
+925(be)X
+1021(a)X
+1077(pattern)X
+1320(starting)X
+1580(with)X
+1742(a)X
+1798(special)X
+2041(character.)X
+3 f
+9 s
+555 1190(SPECIAL)N
+885(EFFECTS)X
+1 f
+10 s
+843 1286(Entries)N
+1090(such)X
+1257(as)X
+7 f
+1131 1420(\\indexentry{alpha}{1})N
+1131 1516(\\indexentry{alpha!beta}{3})N
+1131 1612(\\indexentry{alpha!beta!gamma}{10})N
+1 f
+843 1746(in)N
+925(the)X
+1043(input)X
+1227(\256le)X
+1349(will)X
+1493(be)X
+1589(converted)X
+1926(to)X
+7 f
+1131 1880(\\item)N
+1419(alpha,)X
+1755(1)X
+1275 1976(\\subitem)N
+1707(beta,)X
+1995(3)X
+1419 2072(\\subsubitem)N
+1995(gamma,)X
+2331(10)X
+1 f
+843 2206(in)N
+925(the)X
+1043(output)X
+1267(index)X
+1465(\256le.)X
+1627(Notice)X
+1861(that)X
+2001(the)X
+3 f
+2119(level)X
+1 f
+2295(symbol)X
+2550(\(`!'\))X
+2705(is)X
+2778(used)X
+2945(above)X
+3157(to)X
+3239(delimit)X
+3485(hierarchical)X
+3885(levels.)X
+843 2340(It)N
+912(is)X
+985(possible)X
+1267(to)X
+1349(make)X
+1543(an)X
+1639(item)X
+1801(appear)X
+2036(in)X
+2118(a)X
+2174(designated)X
+2537(form)X
+2713(by)X
+2813(using)X
+3006(the)X
+3 f
+3124(actual)X
+1 f
+3353(\(`@'\))X
+3555(operator.)X
+3883(For)X
+4014(instance,)X
+7 f
+1131 2474(\\indexentry{alpha@{\\it)N
+2235(alpha\\/}}{1})X
+1 f
+843 2608(will)N
+987(become)X
+7 f
+1131 2742(\\item)N
+1419({\\it)X
+1659(alpha\\/},)X
+2187(1)X
+1 f
+843 2876(after)N
+1016(processing.)X
+1424(The)X
+1573(pattern)X
+1820(preceding)X
+2161(`@')X
+2313(is)X
+2390(used)X
+2561(as)X
+2652(sort)X
+2796(key,)X
+2956(whereas)X
+3244(the)X
+3366(one)X
+3506(following)X
+3841(it)X
+3909(is)X
+3986(written)X
+4237(to)X
+843 2972(the)N
+965(output)X
+1193(\256le.)X
+1359(Note)X
+1539(that)X
+1683(two)X
+1827 0.3250(appearances)AX
+2245(of)X
+2336(the)X
+2458(same)X
+2647(key,)X
+2807(one)X
+2947(with)X
+3113(and)X
+3252(one)X
+3391(without)X
+3658(the)X
+3 f
+3779(actual)X
+1 f
+4011(operator,)X
+843 3068(are)N
+962(regarded)X
+1264(as)X
+2 f
+1351(distinct)X
+1 f
+1606(entries.)X
+843 3202(The)N
+988(item,)X
+1170(subitem,)X
+1463(and)X
+1599(subsubitem)X
+1983(\256elds)X
+2176(may)X
+2334(have)X
+2506(individual)X
+2850(sort)X
+2990(keys:)X
+7 f
+1131 3336(\\indexentry{aa@{\\it)N
+2091(aa\\/}!bb@{\\it)X
+2763(bb\\/}!cc@{\\it)X
+3435(cc\\/}}{1})X
+1 f
+843 3470(This)N
+1005(will)X
+1149(be)X
+1245(converted)X
+1582(to)X
+7 f
+1131 3604(\\item)N
+1419({\\it)X
+1659(aa},)X
+1899(1)X
+1275 3700(\\subitem)N
+1707({\\it)X
+1947(bb},)X
+2187(3)X
+1419 3796(\\subsubitem)N
+1995({\\it)X
+2235(cc},)X
+2475(10)X
+1 f
+843 3930(It)N
+912(is)X
+985(possible)X
+1267(to)X
+1349(encapsulate)X
+1744(a)X
+1800(page)X
+1972(number)X
+2237(with)X
+2399(a)X
+2455(designated)X
+2818(command)X
+3154(using)X
+3347(the)X
+3 f
+3465(encap)X
+1 f
+3685(\(`)X
+9 f
+3739(|)X
+1 f
+('\))S
+3829(operator:)X
+7 f
+1131 4064(\\indexentry{alpha)N
+9 f
+(|)S
+7 f
+(bold}{1})S
+1 f
+843 4198(will)N
+987(be)X
+1083(converted)X
+1420(to)X
+7 f
+1131 4332(\\item)N
+1419(alpha,)X
+1755(\\bold{1})X
+1 f
+843 4466(where,)N
+1090(with)X
+1262(a)X
+1328(suitable)X
+1607(de\256nition)X
+1943(for)X
+2067(T)X
+2103 4485(E)N
+2142 4466(X,)N
+7 f
+2278(\\bold{n})X
+1 f
+2692(will)X
+2846(expand)X
+3107(to)X
+7 f
+3226({\\bf)X
+3475(n})X
+1 f
+(.)S
+3640(In)X
+3736(this)X
+3880(example,)X
+4201(the)X
+843 4562(three)N
+1034(output)X
+1268(attributes)X
+1596(associated)X
+1956(with)X
+2128(page)X
+2310(encapsulation)X
+3 f
+2780(encap_pre\256x)X
+1 f
+(,)S
+3 f
+3269(encap_in\256x)X
+1 f
+3659(,)X
+3708(and)X
+3 f
+3853(encap_suf\256x)X
+1 f
+4279(,)X
+843 4658(correspond)N
+1222(to)X
+1306(backslash,)X
+1660(left)X
+1789(brace,)X
+2006(and)X
+2144(right)X
+2317(brace,)X
+2534(respectively.)X
+2984(This)X
+3148(mechanism)X
+3535(allows)X
+3766(page)X
+3940(numbers)X
+4237(to)X
+843 4754(be)N
+946(set)X
+1062(in)X
+1151(different)X
+1455(fonts.)X
+1682(For)X
+1820(example,)X
+2139(the)X
+2264(page)X
+2442(where)X
+2665(the)X
+2789(de\256nition)X
+3121(of)X
+3214(a)X
+3276(keyword)X
+3583(appears)X
+3855(can)X
+3993(be)X
+4095(in)X
+4183(one)X
+843 4850(font,)N
+1012(the)X
+1130(location)X
+1408(of)X
+1495(a)X
+1551(primary)X
+1825(example)X
+2117(can)X
+2249(be)X
+2345(in)X
+2427(another)X
+2688(font,)X
+2857(and)X
+2993(other)X
+3178 0.3250(appearances)AX
+3592(in)X
+3674(yet)X
+3792(a)X
+3848(third)X
+4019(font.)X
+843 4984(The)N
+3 f
+988(encap)X
+1 f
+1208(operator)X
+1496(can)X
+1628(also)X
+1777(be)X
+1873(used)X
+2040(to)X
+2122(create)X
+2335(cross)X
+2520 0.3889(references)AX
+2872(in)X
+2954(the)X
+3072(index:)X
+7 f
+1131 5118(\\indexentry{alpha)N
+9 f
+(|)S
+7 f
+(see{beta}}{1})S
+1 f
+843 5252(will)N
+987(become)X
+7 f
+1131 5386(\\item)N
+1419(alpha,)X
+1755(\\see{beta}{1})X
+1 f
+843 5520(in)N
+925(the)X
+1043(output)X
+1267(\256le,)X
+1409(where)X
+7 f
+1131 5654(\\see{beta}{1})N
+1 f
+555 6144(7th)N
+677(Edition)X
+2121(10)X
+2221(December)X
+2572(1991)X
+4259(7)X
+
+8 p
+%%Page: 6 6
+10 s 0 xH 0 xS 1 f
+555 384(MAKEINDEX)N
+1054(\()X
+1094(1L)X
+1196(\))X
+1954(UNIX)X
+2175(Programmer's)X
+2654(Manual)X
+3631(MAKEINDEX)X
+4130(\()X
+4170(1L)X
+4272(\))X
+7 f
+1131 768(.el)N
+1323(\\\\!.IX)X
+1659(\\\\$1)X
+1899(\\\\$2)X
+2139(\\\\$3)X
+2379(\\\\$4)X
+2619(\\\\$5)X
+2859(\\\\$6)X
+3099(\\\\$7)X
+3339(\\\\$8)X
+3579(\\\\$9)X
+3819({\\\\n\(PN})X
+1131 864(..)N
+1 f
+843 998(\(note)N
+1030(that)X
+1172(the)X
+1292(string)X
+1496({)X
+7 f
+1534(\\\\n\(PN)X
+1 f
+(})S
+1882(is)X
+1957(separated)X
+2283(from)X
+2461(the)X
+2581(rest)X
+2719(of)X
+2808(the)X
+2928(line)X
+3070(by)X
+3172(a)X
+3230(tab.)X
+3390(If)X
+3466(your)X
+3635(local)X
+3813(macro)X
+4035(package)X
+843 1094(does)N
+1022(not)X
+1156(contain)X
+1424(this)X
+1571(extension,)X
+1930(just)X
+2077(include)X
+2345(those)X
+2546(lines)X
+2729(at)X
+2818(the)X
+2947(beginning)X
+3298(of)X
+3396(your)X
+3574(\256le.)X
+3747(Here)X
+3935(is)X
+4019(a)X
+4086(simple)X
+2 f
+843 1190(troff)N
+1 f
+987(\(1\))X
+1101(input)X
+1285(\256le,)X
+1427(which)X
+1643(we)X
+1757(will)X
+1901(assume)X
+2157(is)X
+2230(named)X
+2 f
+2464(sample.txt)X
+1 f
+2798(:)X
+7 f
+1131 1324(This)N
+1371(is)X
+1515(a)X
+1611(sample)X
+1947(file)X
+2187(to)X
+2331(test)X
+2571(the)X
+2763(\\fImakeindex\\fP\(1L\))X
+1131 1420(program,)N
+1563(and)X
+1755(see)X
+1131 1516(.IX)N
+1323({indexing!programs!C)X
+2331(language})X
+1131 1612(.IX)N
+1323({makeindex@\\fImakeindex\\fP\(1L\)})X
+1131 1708(.bp)N
+1131 1804(.rs)N
+1131 1900(.IX)N
+1323({Knuth})X
+1131 1996(.IX)N
+1323({typesetting!computer-aided})X
+1131 2092(how)N
+1323(well)X
+1563(it)X
+1707(functions)X
+2187(in)X
+2331(the)X
+2523(\\fItroff\\fP\(1\))X
+3243(environment.)X
+1 f
+843 2226(Note)N
+1029(that)X
+1179(index)X
+1387(entries)X
+1630(are)X
+1758(indicated)X
+2081(by)X
+2190(the)X
+3 f
+2317(.IX)X
+1 f
+2455(macro,)X
+2705(which)X
+2930(causes)X
+3169(the)X
+3296(following)X
+3636(text)X
+3785(to)X
+3876(be)X
+3981(written)X
+4237(to)X
+2 f
+843 2322(stdout)N
+1 f
+1058(along)X
+1256(with)X
+1418(the)X
+1536(current)X
+1784(page)X
+1956(number.)X
+3 f
+843 2456(CREATING)N
+1294(THE)X
+1482(INDEX)X
+1760(FILE)X
+1966(IN)X
+2075(THE)X
+2263(BOURNE)X
+2625(SHELL)X
+1 f
+843 2552(To)N
+958(create)X
+1177(an)X
+1279(input)X
+1469(\256le)X
+1597(for)X
+2 f
+1717(makeindex)X
+1 f
+2068(,)X
+3 f
+2114(in)X
+2206(the)X
+2339(Bourne)X
+2618(shell)X
+1 f
+2799(environment,)X
+3250(do)X
+3356(the)X
+3480(equivalent)X
+3840(at)X
+3924(your)X
+4096(site)X
+4232(of)X
+843 2648(the)N
+961(command:)X
+7 f
+843 2782(psroff)N
+1179(-ms)X
+1371(-Tpsc)X
+1659(-t)X
+1803(sample.txt)X
+2331(>)X
+2427(/dev/null)X
+2907(2>)X
+3051(sample.tmp)X
+1 f
+843 2916(Some)N
+1045(sites)X
+1207(will)X
+1351(require)X
+2 f
+1599(ditroff)X
+1 f
+1818(instead)X
+2065(of)X
+2 f
+2152(psroff)X
+1 f
+2345(.)X
+2405(To)X
+2514(\256lter)X
+2685(out)X
+2807(any)X
+2943(genuine)X
+3217(error)X
+3394(messages,)X
+3737(invoke)X
+2 f
+3975(grep)X
+1 f
+4129(\(1\):)X
+7 f
+1131 3050(grep)N
+1371('\303IX:)X
+1659(')X
+1755(sample.tmp)X
+2283(>)X
+2379(sample.idx)X
+3 f
+843 3184(CREATING)N
+1294(THE)X
+1482(INDEX)X
+1760(FILE)X
+1966(USING)X
+2 f
+2239(U)X
+2288(C)X
+2323 3205(S)N
+2355(F)X
+3 f
+2424 3184(ENHANCED)N
+2902(TROFF/T)X
+8 s
+3248(RAN)X
+10 s
+3386(S)X
+8 s
+3430(CRIPT)X
+10 s
+1 f
+843 3280(With)N
+2 f
+1025(U)X
+1074(C)X
+1109 3301(S)N
+1141(F)X
+1 f
+1212 3280(Enhanced)N
+1551(troff/T)X
+8 s
+1765(RAN)X
+10 s
+1900(S)X
+8 s
+1944(CRIPT)X
+10 s
+2126(,)X
+2168(the)X
+3 f
+9 f
+2288(-)X
+3 f
+2332(I)X
+1 f
+2385(option)X
+2611(of)X
+2 f
+2700(psroff)X
+1 f
+2893(\(1L\))X
+3058(can)X
+3192(produce)X
+3473(both)X
+3637(formatter)X
+3958(output)X
+4183(and)X
+843 3376(an)N
+939(index)X
+1137(\256le:)X
+7 f
+1131 3510(psroff)N
+1467(-ms)X
+1659(-I)X
+1803(sample.inp)X
+2331(-Tpsc)X
+2619(sample.txt)X
+1 f
+843 3644(If)N
+917(it)X
+981(is)X
+1054(wished)X
+1301(to)X
+1383(suppress)X
+1679(the)X
+1797(formatter)X
+2116(output:)X
+7 f
+1131 3778(psroff)N
+1467(-ms)X
+1659(-I)X
+1803(sample.inp)X
+2331(-Tpsc)X
+2619(-t)X
+2763(sample.txt)X
+3291(>)X
+3387(/dev/null)X
+3 f
+843 3912(COMPLETING)N
+1418(THE)X
+1606(INDEX)X
+1 f
+843 4008(Any)N
+1002(of)X
+1090(the)X
+1209(above)X
+1421(procedures)X
+1794(leaves)X
+2015(the)X
+2133(input)X
+2317(for)X
+2 f
+2431(makeindex)X
+1 f
+2795(in)X
+2 f
+2877(sample.inp)X
+1 f
+3233(.)X
+3293(The)X
+3438(next)X
+3596(step)X
+3745(is)X
+3818(to)X
+3900(invoke)X
+2 f
+4138(mak-)X
+843 4104(eindex)N
+1 f
+1060(:)X
+7 f
+1131 4238(makeindex)N
+1611(-s)X
+1755(sample.ist)X
+2283(sample.idx)X
+1 f
+843 4372(This)N
+1005(leaves)X
+2 f
+1226(troff)X
+1 f
+1370(\(1\)-ready)X
+1690(output)X
+1914(in)X
+1996(the)X
+2114(\256le)X
+2 f
+2236(sample.ind)X
+1 f
+2592(.)X
+3 f
+9 s
+555 4506(ORDERING)N
+1 f
+10 s
+843 4602(By)N
+958(default,)X
+2 f
+1222(makeindex)X
+1 f
+1587(assumes)X
+2 f
+1875(word)X
+2060(ordering)X
+1 f
+2347(;)X
+2390(if)X
+2460(the)X
+3 f
+9 f
+2579(-)X
+3 f
+2623(l)X
+1 f
+2666(option)X
+2891(is)X
+2965(in)X
+3048(effect,)X
+2 f
+3273(letter)X
+3463(ordering)X
+1 f
+3764(is)X
+3838(used.)X
+4046(In)X
+4134(word)X
+843 4698(ordering,)N
+1165(a)X
+1230(blank)X
+1437(precedes)X
+1748(any)X
+1893(letter)X
+2087(in)X
+2178(the)X
+2305(alphabet,)X
+2626(whereas)X
+2919(in)X
+3010(letter)X
+3204(ordering,)X
+3525(it)X
+3598(does)X
+3774(not)X
+3905(count)X
+4112(at)X
+4199(all.)X
+843 4794(This)N
+1005(is)X
+1078(illustrated)X
+1418(by)X
+1518(the)X
+1636(following)X
+1967(example:)X
+2 f
+1131 4928(word)N
+1315(order)X
+1933(letter)X
+2122(order)X
+1 f
+1131 5024(sea)N
+1254(lion)X
+1858(seal)X
+1131 5120(seal)N
+1816(sea)X
+1939(lion)X
+843 5254(Numbers)N
+1157(are)X
+1276(always)X
+1519(sorted)X
+1735(in)X
+1817(numeric)X
+2100(order.)X
+2330(For)X
+2461(instance,)X
+1131 5388(9)N
+1191(\(nine\),)X
+1443(123)X
+1131 5484(10)N
+1231(\(ten\),)X
+1423(see)X
+1546(Derek,)X
+1783(Bo)X
+843 5618(Letters)N
+1089(are)X
+1211(\256rst)X
+1358(sorted)X
+1577(without)X
+1844(regard)X
+2073(to)X
+2158(case;)X
+2342(when)X
+2539(words)X
+2758(are)X
+2880(identical,)X
+3198(the)X
+3318(uppercase)X
+3662(version)X
+3920(precedes)X
+4224(its)X
+843 5714(lowercase)N
+1185(counterpart.)X
+555 6144(7th)N
+677(Edition)X
+2121(10)X
+2221(December)X
+2572(1991)X
+4259(6)X
+
+7 p
+%%Page: 5 5
+10 s 0 xH 0 xS 1 f
+555 384(MAKEINDEX)N
+1054(\()X
+1094(1L)X
+1196(\))X
+1954(UNIX)X
+2175(Programmer's)X
+2654(Manual)X
+3631(MAKEINDEX)X
+4130(\()X
+4170(1L)X
+4272(\))X
+3 f
+843 768(TROFF)N
+1134(EXAMPLE)X
+1 f
+843 864(A)N
+921(sample)X
+1168(control)X
+1415(\256le)X
+1537(for)X
+1651(creating)X
+1930(an)X
+2026(index,)X
+2244(which)X
+2460(we)X
+2574(will)X
+2718(assume)X
+2974(resides)X
+3217(in)X
+3299(the)X
+3417(\256le)X
+2 f
+3539(sample.ist)X
+1 f
+3868(:)X
+7 f
+1131 998(keyword)N
+1515("IX:")X
+1131 1094(preamble)N
+1131 1190(".\\\\\\")N
+1467(start)X
+1755(of)X
+1899(index)X
+2187(output)X
+1131 1286(\\".\\\\\\")N
+1515(enter)X
+1803(two)X
+1995(column)X
+2331(mode)X
+1131 1382(.2C)N
+1131 1478(.SH)N
+1131 1574(.ce)N
+1131 1670(INDEX)N
+1131 1766(.XS)N
+1131 1862(INDEX)N
+1131 1958(.XE)N
+1131 2054(.R)N
+1131 2150(.ps)N
+1323(9p)X
+1131 2246(.vs)N
+1323(11p)X
+1131 2342(.sp)N
+1131 2438(.de)N
+1323(I1)X
+1131 2534(.ti)N
+1323(0.25i)X
+1131 2630(..)N
+1131 2726(.de)N
+1323(I2)X
+1131 2822(.ti)N
+1323(0.5i)X
+1131 2918(..")N
+1131 3014(postamble)N
+1611("\\n.\\\\\\")X
+2043(end)X
+2235(of)X
+2379(index)X
+2667(output")X
+1131 3110(setpage_prefix)N
+1851("\\n.nr)X
+2187(%)X
+2283(")X
+1131 3206(setpage_suffix)N
+1851("")X
+1131 3302(group_skip)N
+1659("\\n.sp)X
+1995(1.0")X
+1131 3398(headings_flag)N
+1803(1)X
+1131 3494(heading_prefix)N
+1851("\\n.IS\\n")X
+1131 3590(heading_suffix)N
+1851("\\n.IE")X
+1131 3686(item_0)N
+1467("\\n.br\\n")X
+1131 3782(item_1)N
+1467("\\n.I1\\n")X
+1131 3878(item_2)N
+1467("\\n.I2\\n")X
+1131 3974(item_01)N
+1515("\\n.I1\\n")X
+1131 4070(item_x1)N
+1515("\\n.I1\\n")X
+1131 4166(item_12)N
+1515("\\n.I2\\n")X
+1131 4262(item_x2)N
+1515("\\n.I2\\n")X
+1131 4358(delim_0)N
+1515(",)X
+1659(")X
+1131 4454(delim_1)N
+1515(",)X
+1659(")X
+1131 4550(delim_2)N
+1515(",)X
+1659(")X
+1131 4646(delim_r)N
+1515("-")X
+1131 4742(delim_t)N
+1515(".")X
+1131 4838(encap_prefix)N
+1755("\\\\fB")X
+1131 4934(encap_infix)N
+1707("")X
+1131 5030(encap_suffix)N
+1755("\\\\fP")X
+1131 5126(indent_space)N
+1755("")X
+1131 5222(indent_length)N
+1803(0)X
+1 f
+843 5356(The)N
+993(local)X
+1174(macro)X
+1400(package)X
+1689(may)X
+1852(require)X
+2105(modi\256cation,)X
+2554(as)X
+2646(in)X
+2733(this)X
+2873(example)X
+3170(of)X
+3262(an)X
+3362(extension)X
+3693(to)X
+3779(the)X
+3 f
+9 f
+3901(-)X
+3 f
+3945(ms)X
+1 f
+4067(macros)X
+843 5452(\(note)N
+1028(that)X
+1168(at)X
+1246(some)X
+1435(sites,)X
+1617(this)X
+1752(macro)X
+1973(should)X
+2 f
+2206(replace)X
+1 f
+2467(a)X
+2523(pre-existing)X
+2926(macro)X
+3147(of)X
+3234(the)X
+3352(same)X
+3537(name\):)X
+7 f
+1131 5586(.)N
+1131 5682(.de)N
+1323(IX)X
+1131 5778(.ie)N
+1323('\\\\n\(.z'')X
+1803(.tm)X
+1995(IX:)X
+2187(\\\\$1)X
+2427(\\\\$2)X
+2667(\\\\$3)X
+2907(\\\\$4)X
+3147(\\\\$5)X
+3387(\\\\$6)X
+3627(\\\\$7)X
+3867(\\\\$8)X
+4107(\\\\$9)X
+4347({\\\\n\(PN})X
+1 f
+555 6162(7th)N
+677(Edition)X
+2121(10)X
+2221(December)X
+2572(1991)X
+4259(5)X
+
+6 p
+%%Page: 4 4
+10 s 0 xH 0 xS 1 f
+555 384(MAKEINDEX)N
+1054(\()X
+1094(1L)X
+1196(\))X
+1954(UNIX)X
+2175(Programmer's)X
+2654(Manual)X
+3631(MAKEINDEX)X
+4130(\()X
+4170(1L)X
+4272(\))X
+3 f
+843 768(delim_1)N
+1 f
+1134(<string>)X
+1843(",)X
+1916(")X
+1843 864(Delimiter)N
+2183(to)X
+2278(be)X
+2387(inserted)X
+2674(between)X
+2975(a)X
+3044(level)X
+3233(1)X
+3306(key)X
+3455(and)X
+3604(its)X
+3712(\256rst)X
+3869(page)X
+4054(number)X
+1843 960(\(default:)N
+2135(comma)X
+2391(followed)X
+2696(by)X
+2796(a)X
+2852(blank\).)X
+3 f
+843 1094(delim_2)N
+1 f
+1134(<string>)X
+1843(",)X
+1916(")X
+1843 1190(Delimiter)N
+2183(to)X
+2278(be)X
+2387(inserted)X
+2674(between)X
+2975(a)X
+3044(level)X
+3233(2)X
+3306(key)X
+3455(and)X
+3604(its)X
+3712(\256rst)X
+3869(page)X
+4054(number)X
+1843 1286(\(default:)N
+2135(comma)X
+2391(followed)X
+2696(by)X
+2796(a)X
+2852(blank\).)X
+3 f
+843 1420(delim_n)N
+1 f
+1138(<string>)X
+1843(",)X
+1916(")X
+1843 1516(Delimiter)N
+2173(to)X
+2258(be)X
+2357(inserted)X
+2634(between)X
+2924(two)X
+3066(page)X
+3240(numbers)X
+3538(for)X
+3654(the)X
+3774(same)X
+3961(key)X
+4099(in)X
+4183(any)X
+1843 1612(level)N
+2019(\(default:)X
+2311(comma)X
+2567(followed)X
+2872(by)X
+2972(a)X
+3028(blank\).)X
+3 f
+843 1746(delim_r)N
+1 f
+1130(<string>)X
+1843("--")X
+1843 1842(Delimiter)N
+2174(to)X
+2260(be)X
+2360(inserted)X
+2638(between)X
+2930(the)X
+3052(starting)X
+3316(and)X
+3456(ending)X
+3698(page)X
+3874(numbers)X
+4173(of)X
+4263(a)X
+1843 1938(range.)N
+3 f
+843 2072(delim_t)N
+1 f
+1121(<string>)X
+1843("")X
+1843 2168(Delimiter)N
+2184(to)X
+2280(be)X
+2390(inserted)X
+2678(at)X
+2770(the)X
+2902(end)X
+3052(of)X
+3153(a)X
+3223(page)X
+3409(list.)X
+3580(This)X
+3756(delimiter)X
+4079(has)X
+4219(no)X
+1843 2264(effect)N
+2047(on)X
+2147(entries)X
+2381(which)X
+2597(have)X
+2769(no)X
+2869(associated)X
+3219(page)X
+3391(list.)X
+3 f
+843 2398(encap_pre\256x)N
+1 f
+1303(<string>)X
+1843("\\\\")X
+1843 2494(First)N
+2009(part)X
+2154(of)X
+2241(pre\256x)X
+2448(for)X
+2562(the)X
+2680(command)X
+3016(which)X
+3232(encapsulates)X
+3658(the)X
+3776(page)X
+3948(number.)X
+3 f
+843 2628(encap_in\256x)N
+1 f
+1253(<string>)X
+1843("{")X
+1843 2724(Second)N
+2128(part)X
+2301(of)X
+2416(pre\256x)X
+2651(for)X
+2793(the)X
+2939(command)X
+3303(which)X
+3547(encapsulates)X
+4001(the)X
+4147(page)X
+1843 2820(number.)N
+3 f
+843 2954(encap_suf\256x)N
+1 f
+1289(<string>)X
+1843("}".)X
+1843 3050(Suf\256x)N
+2058(for)X
+2172(the)X
+2290(command)X
+2626(which)X
+2842(encapsulates)X
+3268(the)X
+3386(page)X
+3558(number.)X
+3 f
+843 3184(line_max)N
+1 f
+1174(<number>)X
+1843(72)X
+1843 3280(Maximum)N
+2196(length)X
+2416(of)X
+2503(a)X
+2559(line)X
+2699(in)X
+2781(the)X
+2899(output,)X
+3143(beyond)X
+3399(which)X
+3615(a)X
+3671(line)X
+3811(wraps.)X
+3 f
+843 3414(indent_space)N
+1 f
+1307(<string>)X
+1843("\\t\\t")X
+1843 3510(Space)N
+2055(to)X
+2137(be)X
+2233(inserted)X
+2507(in)X
+2589(front)X
+2765(of)X
+2852(a)X
+2908(wrapped)X
+3205(line)X
+3345(\(default:)X
+3637(two)X
+3777(tabs\).)X
+3 f
+843 3644(indent_length)N
+1 f
+1333(<number>)X
+1843(16)X
+1843 3740(Length)N
+2090(of)X
+3 f
+2177(indent_space)X
+1 f
+2641(\(default:)X
+2933(16,)X
+3053(equivalent)X
+3407(to)X
+3489(2)X
+3549(tabs\).)X
+3 f
+9 s
+555 3874(EXAMPLES)N
+10 s
+843 3970(T)N
+883 3989(E)N
+926 3970(X)N
+1004(EXAMPLE)X
+1 f
+843 4066(The)N
+993(following)X
+1329(example)X
+1626(shows)X
+1851(a)X
+1912(style)X
+2088(\256le)X
+2214(called)X
+2 f
+2430(book.ist)X
+1 f
+2688(,)X
+2732(which)X
+2952(de\256nes)X
+3203(an)X
+3303(index)X
+3505(for)X
+3623(a)X
+3683(book)X
+3867(which)X
+4087(can)X
+4223(be)X
+843 4162(formatted)N
+1175(independently)X
+1649(of)X
+1736(the)X
+1854(main)X
+2034(source:)X
+7 f
+1131 4296(preamble)N
+1131 4392("\\\\documentstyle[12pt]{book})N
+1131 4488(\\\\begin{document})N
+1131 4584(\\\\begin{theindex})N
+1131 4680({\\\\small\\n")N
+1131 4776(postamble)N
+1131 4872("\\n\\n})N
+1131 4968(\\\\end{theindex})N
+1131 5064(\\\\end{document}\\n)N
+1 f
+(")S
+843 5198(Assuming)N
+1189(that)X
+1331(a)X
+1389(particular)X
+1719(book)X
+1901(style)X
+2074(requires)X
+2355(the)X
+2475(index)X
+2675(\(as)X
+2790(well)X
+2949(as)X
+3037(any)X
+3174(chapters\))X
+3490(to)X
+3573(start)X
+3732(from)X
+3909(an)X
+4006(odd)X
+4147(page)X
+843 5294(number,)N
+1144(and)X
+1296(that)X
+1452(the)X
+1586(input)X
+1786(\256le)X
+1924(is)X
+2013(named)X
+2 f
+2263(foo.idx)X
+1 f
+2490(,)X
+2546(the)X
+2680(following)X
+3027(command)X
+3379(line)X
+3535(produces)X
+3861(output)X
+4100(in)X
+4197(\256le)X
+2 f
+843 5390(footmp.ind)N
+1 f
+1194(:)X
+7 f
+1131 5524(makeindex)N
+9 f
+1659(-)X
+7 f
+1703(s)X
+1799(book.ist)X
+9 f
+2279(-)X
+7 f
+2323(o)X
+2419(footmp.ind)X
+9 f
+2995(-)X
+7 f
+3039(p)X
+3135(odd)X
+3375(foo)X
+1 f
+843 5658(Here)N
+1025(a)X
+1086(non-default)X
+1481(output)X
+1710(\256le)X
+1837(name)X
+2036(is)X
+2114(used)X
+2285(to)X
+2371(avoid)X
+2573(clobbering)X
+2940(the)X
+3062(output)X
+3290(for)X
+3408(the)X
+3530(book)X
+3714(itself)X
+3898(\(presumably)X
+2 f
+843 5754(foo.dvi)N
+1 f
+1070(,)X
+1110(which)X
+1326(would)X
+1546(have)X
+1718(been)X
+1890(the)X
+2008(default)X
+2251(name)X
+2445(for)X
+2559(the)X
+2677(index)X
+2875(output)X
+3099(\256le!\).)X
+555 6144(7th)N
+677(Edition)X
+2121(10)X
+2221(December)X
+2572(1991)X
+4259(4)X
+
+5 p
+%%Page: 3 3
+10 s 0 xH 0 xS 1 f
+555 384(MAKEINDEX)N
+1054(\()X
+1094(1L)X
+1196(\))X
+1954(UNIX)X
+2175(Programmer's)X
+2654(Manual)X
+3631(MAKEINDEX)X
+4130(\()X
+4170(1L)X
+4272(\))X
+3 f
+843 768(OUTPUT)N
+1196(STYLE)X
+1477(SPECIFIERS)X
+843 902(preamble)N
+1 f
+1188(<string>)X
+1843("\\\\begin{theindex}\\n")X
+1843 998(Preamble)N
+2166(of)X
+2253(output)X
+2477(\256le.)X
+3 f
+843 1132(postamble)N
+1 f
+1214(<string>)X
+1843("\\n\\n\\\\end{theindex}\\n")X
+1843 1228(Postamble)N
+2196(of)X
+2283(output)X
+2507(\256le.)X
+3 f
+843 1362(setpage_pre\256x)N
+1 f
+1357(<string>)X
+1843("\\n)X
+1978(\\\\setcounter{page}{")X
+1843 1458(Pre\256x)N
+2054(of)X
+2141(command)X
+2477(which)X
+2693(sets)X
+2833(the)X
+2951(starting)X
+3211(page)X
+3383(number.)X
+3 f
+843 1592(setpage_suf\256x)N
+1 f
+1343(<string>)X
+1843("}\\n")X
+1843 1688(Suf\256x)N
+2058(of)X
+2145(command)X
+2481(which)X
+2697(sets)X
+2837(the)X
+2955(starting)X
+3215(page)X
+3387(number.)X
+3 f
+843 1822(group_skip)N
+1 f
+1248(<string>)X
+1843("\\n\\n)X
+2040(\\\\indexspace\\n")X
+1843 1918(Vertical)N
+2122(space)X
+2321(to)X
+2403(be)X
+2499(inserted)X
+2773(before)X
+2999(a)X
+3055(new)X
+3209(group)X
+3416(begins.)X
+3 f
+843 2052(headings_\257ag)N
+1 f
+1328(<string>)X
+1843(0)X
+1843 2148(Flag)N
+2017(indicating)X
+2369(treatment)X
+2704(of)X
+2803(new)X
+2968(group)X
+3186(headers,)X
+3483(which)X
+3710(are)X
+3840(inserted)X
+4125(when)X
+1843 2244(before)N
+2076(a)X
+2138(new)X
+2298(group)X
+2511(\(symbols,)X
+2850(numbers,)X
+3172(and)X
+3314(the)X
+3438(26)X
+3544(letters\):)X
+3815(positive)X
+4094(values)X
+1843 2340(cause)N
+2044(an)X
+2142(uppercase)X
+2485(letter)X
+2671(to)X
+2754(be)X
+2851(inserted)X
+3126(between)X
+3415(pre\256x)X
+3623(and)X
+3760(suf\256x,)X
+3983(and)X
+4120(nega-)X
+1843 2436(tive)N
+1990(values)X
+2222(cause)X
+2428(a)X
+2491(lowercase)X
+2840(letter)X
+3032(to)X
+3120(be)X
+3222(inserted)X
+3502(\(default)X
+3778(is)X
+3857(0,)X
+3943(which)X
+4165(pro-)X
+1843 2532(duces)N
+2046(no)X
+2146(header\).)X
+3 f
+843 2666(heading_pre\256x)N
+1 f
+1373(<string>)X
+1843("")X
+1843 2762(Header)N
+2096(pre\256x)X
+2303(to)X
+2385(be)X
+2481(inserted)X
+2755(before)X
+2981(a)X
+3037(new)X
+3191(letter)X
+3376(begins.)X
+3 f
+843 2896(symhead_positive)N
+1 f
+1467(<string>)X
+1843("Symbols")X
+1843 2992(Heading)N
+2135(for)X
+2249(symbols)X
+2535(to)X
+2617(be)X
+2713(inserted)X
+2987(if)X
+3 f
+3056(headings_\257ag)X
+1 f
+3541(is)X
+3614(positive.)X
+3 f
+843 3126(symhead_negative)N
+1 f
+1490(<string>)X
+1843("symbols")X
+1843 3222(Heading)N
+2135(for)X
+2249(symbols)X
+2535(to)X
+2617(be)X
+2713(inserted)X
+2987(if)X
+3 f
+3056(headings_\257ag)X
+1 f
+3541(is)X
+3614(negative.)X
+3 f
+843 3356(numhead_positive)N
+1 f
+1484(<string>)X
+1843("Numbers")X
+1843 3452(Heading)N
+2135(for)X
+2249(numbers)X
+2545(to)X
+2627(be)X
+2723(inserted)X
+2997(if)X
+3 f
+3066(headings_\257ag)X
+1 f
+3551(is)X
+3624(positive.)X
+3 f
+843 3586(numhead_negative)N
+1 f
+1507(<string>)X
+1843("numbers")X
+1843 3682(Heading)N
+2135(for)X
+2249(numbers)X
+2545(to)X
+2627(be)X
+2723(inserted)X
+2997(if)X
+3 f
+3066(headings_\257ag)X
+1 f
+3551(is)X
+3624(negative.)X
+3 f
+843 3816(item_0)N
+1 f
+1095(<string>)X
+1843("\\n)X
+1978(\\\\item)X
+2184(")X
+1843 3912(Command)N
+2196(to)X
+2278(be)X
+2374(inserted)X
+2648(between)X
+2936(two)X
+3076(primary)X
+3350(\(level)X
+3553(0\))X
+3640(items.)X
+3 f
+843 4046(item_1)N
+1 f
+1095(<string>)X
+1843("\\n)X
+2038(\\\\subitem)X
+2355(")X
+1843 4142(Command)N
+2196(to)X
+2278(be)X
+2374(inserted)X
+2648(between)X
+2936(two)X
+3076(secondary)X
+3422(\(level)X
+3625(1\))X
+3712(items.)X
+3 f
+843 4276(item_2)N
+1 f
+1095(<string>)X
+1843("\\n)X
+2078(\\\\subsubitem)X
+2506(")X
+1843 4372(Command)N
+2196(to)X
+2278(be)X
+2374(inserted)X
+2648(between)X
+2936(two)X
+3076(level)X
+3252(2)X
+3312(items.)X
+3 f
+843 4506(item_01)N
+1155(<string>)X
+1 f
+1843("\\n)X
+2018(\\\\subitem)X
+2335(")X
+1843 4602(Command)N
+2196(to)X
+2278(be)X
+2374(inserted)X
+2648(between)X
+2936(a)X
+2992(level)X
+3168(0)X
+3228(item)X
+3390(and)X
+3526(a)X
+3582(level)X
+3758(1)X
+3818(item.)X
+3 f
+843 4736(item_x1)N
+1 f
+1135(<string>)X
+1843("\\n)X
+2018(\\\\subitem)X
+2335(")X
+1843 4832(Command)N
+2204(to)X
+2294(be)X
+2398(inserted)X
+2680(between)X
+2975(a)X
+3038(level)X
+3221(0)X
+3288(item)X
+3457(and)X
+3600(a)X
+3663(level)X
+3846(1)X
+3913(item,)X
+4102(where)X
+1843 4928(the)N
+1961(level)X
+2137(0)X
+2197(item)X
+2359(does)X
+2526(not)X
+2648(have)X
+2820(associated)X
+3170(page)X
+3342(numbers.)X
+3 f
+843 5062(item_12)N
+1 f
+1135(<string>)X
+1843("\\n)X
+2018(\\\\subsubitem)X
+2446(")X
+1843 5158(Command)N
+2196(to)X
+2278(be)X
+2374(inserted)X
+2648(between)X
+2936(a)X
+2992(level)X
+3168(1)X
+3228(item)X
+3390(and)X
+3526(a)X
+3582(level)X
+3758(2)X
+3818(item.)X
+3 f
+843 5292(item_x2)N
+1 f
+1135(<string>)X
+1843("\\n)X
+2018(\\\\subsubitem)X
+2446(")X
+1843 5388(Command)N
+2204(to)X
+2294(be)X
+2398(inserted)X
+2680(between)X
+2975(a)X
+3038(level)X
+3221(1)X
+3288(item)X
+3457(and)X
+3600(a)X
+3663(level)X
+3846(2)X
+3913(item,)X
+4102(where)X
+1843 5484(the)N
+1961(level)X
+2137(1)X
+2197(item)X
+2359(does)X
+2526(not)X
+2648(have)X
+2820(associated)X
+3170(page)X
+3342(numbers.)X
+3 f
+843 5618(delim_0)N
+1 f
+1134(<string>)X
+1843(",)X
+1916(")X
+1843 5714(Delimiter)N
+2183(to)X
+2278(be)X
+2387(inserted)X
+2674(between)X
+2975(a)X
+3044(level)X
+3233(0)X
+3306(key)X
+3455(and)X
+3604(its)X
+3712(\256rst)X
+3869(page)X
+4054(number)X
+1843 5810(\(default:)N
+2135(comma)X
+2391(followed)X
+2696(by)X
+2796(a)X
+2852(blank\).)X
+555 6194(7th)N
+677(Edition)X
+2121(10)X
+2221(December)X
+2572(1991)X
+4259(3)X
+
+4 p
+%%Page: 2 2
+10 s 0 xH 0 xS 1 f
+555 384(MAKEINDEX)N
+1054(\()X
+1094(1L)X
+1196(\))X
+1954(UNIX)X
+2175(Programmer's)X
+2654(Manual)X
+3631(MAKEINDEX)X
+4130(\()X
+4170(1L)X
+4272(\))X
+3 f
+9 f
+843 768(-)N
+3 f
+887(q)X
+1 f
+1243(Quiet)X
+1446(mode;)X
+1671(send)X
+1843(no)X
+1948(messages)X
+2276(to)X
+2 f
+2363(stderr)X
+1 f
+2561(.)X
+2626(By)X
+2744(default,)X
+3012(progress)X
+3309(and)X
+3450(error)X
+3632(messages)X
+3960(are)X
+4084(sent)X
+4237(to)X
+2 f
+1243 864(stderr)N
+1 f
+1454(as)X
+1541(well)X
+1699(as)X
+1786(to)X
+1868(the)X
+1986(transcript)X
+2309(\256le.)X
+3 f
+9 f
+843 998(-)N
+3 f
+887(r)X
+1 f
+1243(Disable)X
+1519(implicit)X
+1798(page)X
+1981(range)X
+2191(formation;)X
+2560(page)X
+2743(ranges)X
+2983(must)X
+3168(be)X
+3274(created)X
+3537(by)X
+3647(using)X
+3850(explicit)X
+4120(range)X
+1243 1094(operators;)N
+1608(see)X
+8 s
+1751(SPECIAL)X
+2051(EFFECTS)X
+10 s
+2363(below.)X
+2643(By)X
+2780(default,)X
+3067(three)X
+3272(or)X
+3383(more)X
+3592(successive)X
+3974(pages)X
+4200(are)X
+1243 1190(automatically)N
+1699(abbreviated)X
+2094(as)X
+2181(a)X
+2237(range)X
+2436(\(e.g.)X
+2599(1\3205\).)X
+3 f
+9 f
+843 1324(-)N
+3 f
+887(s)X
+1 f
+938(sty)X
+1243(Employ)X
+2 f
+1527(sty)X
+1 f
+1647(as)X
+1744(the)X
+1872(style)X
+2053(\256le)X
+2185(\(no)X
+2322(default\).)X
+2642(The)X
+2797(environment)X
+3232(variable)X
+8 s
+3517(INDEXSTYLE)X
+10 s
+3944(de\256nes)X
+4201(the)X
+1243 1420(path)N
+1401(where)X
+1618(the)X
+1736(style)X
+1907(\256le)X
+2029(should)X
+2262(be)X
+2358(found.)X
+3 f
+9 f
+843 1554(-)N
+3 f
+887(t)X
+1 f
+934(log)X
+1243(Employ)X
+2 f
+1520(log)X
+1 f
+1646(as)X
+1737(the)X
+1859(transcript)X
+2186(\256le.)X
+2352(By)X
+2469(default,)X
+2736(the)X
+2858(\256le)X
+2984(name)X
+3182(is)X
+3259(created)X
+3516(by)X
+3620(appending)X
+3977(the)X
+4098(exten-)X
+1243 1650(sion)N
+2 f
+1396(.ilg)X
+1 f
+1520(to)X
+1602(the)X
+1720(base)X
+1883(name)X
+2077(of)X
+2164(the)X
+2282(\256rst)X
+2426(input)X
+2610(\256le)X
+2732(\()X
+2 f
+2759(idx0)X
+1 f
+2904(\).)X
+3 f
+9 s
+555 1784(STYLE)N
+809(FILE)X
+1 f
+10 s
+843 1880(The)N
+990(style)X
+1163(\256le)X
+1287(informs)X
+2 f
+1558(makeindex)X
+1 f
+1924(about)X
+2123(the)X
+2242(format)X
+2477(of)X
+2565(the)X
+2 f
+2684(.idx)X
+1 f
+2823(input)X
+3008(\256les)X
+3162(and)X
+3299(the)X
+3418(intended)X
+3715(format)X
+3950(of)X
+4038(the)X
+4157(\256nal)X
+843 1976(output)N
+1072(\256le;)X
+1221(examples)X
+1549(appear)X
+1789(below.)X
+2050(This)X
+2217(\256le)X
+2344(can)X
+2481(reside)X
+2698(anywhere)X
+3036(in)X
+3123(the)X
+3246(path)X
+3408(de\256ned)X
+3668(by)X
+3772(the)X
+3894(environment)X
+843 2072(variable)N
+8 s
+1124(INDEXSTYLE)X
+10 s
+1521(.)X
+1587(The)X
+1738(style)X
+1915(\256le)X
+2043(contains)X
+2336(a)X
+2398(list)X
+2521(of)X
+2614(<)X
+2 f
+2659(speci\256er)X
+1 f
+2938(,)X
+2 f
+2983(attribute)X
+1 f
+3265(>)X
+3335(pairs.)X
+3556(There)X
+3769(are)X
+3893(two)X
+4038(types)X
+4232(of)X
+843 2168(speci\256ers:)N
+1192(input)X
+1380(and)X
+1520(output.)X
+1788(Pairs)X
+1972(do)X
+2076(not)X
+2202(have)X
+2378(to)X
+2464(appear)X
+2703(in)X
+2789(any)X
+2929(particular)X
+3261(order.)X
+3495(A)X
+3577(line)X
+3721(begun)X
+3940(by)X
+4043(`%')X
+4187(is)X
+4263(a)X
+843 2264(comment.)N
+1212(In)X
+1310(the)X
+1439(following)X
+1781(list)X
+1909(of)X
+2007(speci\256ers)X
+2341(and)X
+2488(arguments,)X
+2873(<string>)X
+3176(is)X
+3260(an)X
+3367(arbitrary)X
+3675(string)X
+3887(delimited)X
+4219(by)X
+843 2360(double)N
+1083(quotes)X
+1314(\(".)X
+1407(.)X
+1440(."\),)X
+1561(<char>)X
+1811(is)X
+1885(a)X
+1942(single)X
+2154(letter)X
+2340(embraced)X
+2674(by)X
+2775(single)X
+2987(quotes)X
+3217(\('.)X
+3304(.)X
+3337(.'\),)X
+3452(and)X
+3589(<number>)X
+3945(is)X
+4019(a)X
+4076(nonne-)X
+843 2456(gative)N
+1065(integer.)X
+1354(The)X
+1505(maximum)X
+1855(length)X
+2081(of)X
+2174(a)X
+2236(<string>)X
+2533(is)X
+2611(2048.)X
+2836(A)X
+2919(literal)X
+3131(backslash)X
+3468(or)X
+3560(quote)X
+3763(must)X
+3943(be)X
+4044(escaped)X
+843 2552(\(by)N
+971(a)X
+1028(backslash\).)X
+1428(Anything)X
+1751(not)X
+1874(speci\256ed)X
+2180(in)X
+2263(the)X
+2381(style)X
+2552(\256le)X
+2674(will)X
+2818(be)X
+2914(assigned)X
+3210(a)X
+3266(default)X
+3509(value,)X
+3723(which)X
+3939(is)X
+4012(shown)X
+4241(at)X
+843 2648(the)N
+961(head)X
+1133(of)X
+1220(the)X
+1338(rightmost)X
+1664(column.)X
+3 f
+843 2782(INPUT)N
+1112(STYLE)X
+1393(SPECIFIERS)X
+843 2916(actual)N
+1 f
+1072(<char>)X
+1843(\302@\302)X
+1843 3012(Symbol)N
+2111(indicating)X
+2451(that)X
+2591(the)X
+2709(next)X
+2867(entry)X
+3052(is)X
+3125(to)X
+3207(appear)X
+3442(in)X
+3524(the)X
+3642(output)X
+3866(\256le.)X
+3 f
+843 3146(arg_close)N
+1 f
+1184(<char>)X
+1843(\302}\302)X
+1843 3242(Closing)N
+2111(delimiter)X
+2420(for)X
+2534(the)X
+2652(index)X
+2850(entry)X
+3035(argument.)X
+3 f
+843 3376(arg_open)N
+1 f
+1183(<char>)X
+1843(\302{\302)X
+1843 3472(Opening)N
+2139(delimiter)X
+2448(for)X
+2562(the)X
+2680(index)X
+2878(entry)X
+3063(argument.)X
+3 f
+843 3606(encap)N
+1 f
+1063(<char>)X
+1843(\302)X
+9 f
+1870(|)X
+1 f
+(\302)S
+1843 3702(Symbol)N
+2126(indicating)X
+2481(that)X
+2636(the)X
+2769(rest)X
+2920(of)X
+3022(the)X
+3155(argument)X
+3493(list)X
+3625(is)X
+3713(to)X
+3809(be)X
+3919(used)X
+4100(as)X
+4201(the)X
+1843 3798(encapsulating)N
+2304(command)X
+2640(for)X
+2754(the)X
+2872(page)X
+3044(number.)X
+3 f
+843 3932(escape)N
+1 f
+1086(<char>)X
+1843(\302\\\\\302)X
+1843 4028(Symbol)N
+2128(which)X
+2361(escapes)X
+2643(the)X
+2777(following)X
+3124(letter,)X
+3345(unless)X
+3581(its)X
+3692(preceding)X
+4045(letter)X
+4246(is)X
+3 f
+1843 4124(escape)N
+1 f
+2066(.)X
+2129(Note:)X
+3 f
+2330(quote)X
+1 f
+2544(is)X
+2620(used)X
+2790(to)X
+2875(escape)X
+3112(the)X
+3232(letter)X
+3419(which)X
+3637(immediately)X
+4059(follows)X
+1843 4220(it,)N
+1928(but)X
+2051(if)X
+2121(it)X
+2186(is)X
+2260(preceded)X
+2572(by)X
+3 f
+2673(escape)X
+1 f
+2896(,)X
+2937(it)X
+3002(is)X
+3076(treated)X
+3316(as)X
+3403(a)X
+3459(ordinary)X
+3751(character.)X
+4107(These)X
+1843 4316(two)N
+1983(symbols)X
+2 f
+2269(must)X
+1 f
+2440(be)X
+2536(distinct.)X
+3 f
+843 4450(keyword)N
+1 f
+1161(<string>)X
+1843("\\\\indexentry")X
+1843 4546(Command)N
+2196(which)X
+2412(tells)X
+2 f
+2565(makeindex)X
+1 f
+2929(that)X
+3069(its)X
+3164(argument)X
+3487(is)X
+3560(an)X
+3656(index)X
+3854(entry.)X
+3 f
+843 4680(level)N
+1 f
+1019(<char>)X
+1843(\302!\302)X
+1843 4776(Delimiter)N
+2170(denoting)X
+2470(a)X
+2526(new)X
+2680(level)X
+2856(of)X
+2943(subitem.)X
+3 f
+843 4910(quote)N
+1 f
+1054(<char>)X
+1843(\302"\302)X
+1843 5006(Note:)N
+3 f
+2044(quote)X
+1 f
+2258(is)X
+2334(used)X
+2504(to)X
+2589(escape)X
+2827(the)X
+2948(letter)X
+3136(which)X
+3355(immediately)X
+3778(follows)X
+4040(it,)X
+4126(but)X
+4250(if)X
+1843 5102(it)N
+1919(is)X
+2004(preceded)X
+2327(by)X
+3 f
+2438(escape)X
+1 f
+2661(,)X
+2712(it)X
+2787(is)X
+2871(treated)X
+3121(as)X
+3219(a)X
+3286(ordinary)X
+3589(character.)X
+3956(These)X
+4179(two)X
+1843 5198(symbols)N
+2 f
+2129(must)X
+1 f
+2300(be)X
+2396(distinct.)X
+3 f
+843 5332(range_close)N
+1 f
+1264(<char>)X
+1843(\302\)\302)X
+1843 5428(Closing)N
+2111(delimiter)X
+2420(indicating)X
+2760(the)X
+2878(end)X
+3014(of)X
+3101(an)X
+3197(explicit)X
+3457(page)X
+3629(range.)X
+3 f
+843 5562(range_open)N
+1 f
+1263(<char>)X
+1843(\302\(\302)X
+1843 5658(Opening)N
+2139(delimiter)X
+2448(indicating)X
+2788(the)X
+2906(beginning)X
+3246(of)X
+3333(an)X
+3429(explicit)X
+3689(page)X
+3861(range.)X
+555 6144(7th)N
+677(Edition)X
+2121(10)X
+2221(December)X
+2572(1991)X
+4259(2)X
+
+3 p
+%%Page: 1 1
+10 s 0 xH 0 xS 1 f
+555 384(MAKEINDEX)N
+1054(\()X
+1094(1L)X
+1196(\))X
+1954(UNIX)X
+2175(Programmer's)X
+2654(Manual)X
+3631(MAKEINDEX)X
+4130(\()X
+4170(1L)X
+4272(\))X
+3 f
+9 s
+555 768(NAME)N
+1 f
+10 s
+843 864(makeindex)N
+9 f
+1215(-)X
+1 f
+1279(a)X
+1335(general)X
+1592(purpose,)X
+1886(formatter-independent)X
+2624(index)X
+2822(processor)X
+3 f
+9 s
+555 998(SYNOPSIS)N
+10 s
+843 1094(makeindex)N
+1236([)X
+1 f
+9 f
+1263(-)X
+1 f
+1307(c)X
+3 f
+1343(])X
+1390([)X
+1 f
+9 f
+1417(-)X
+1 f
+1461(g)X
+3 f
+(])S
+1548([)X
+1 f
+9 f
+1575(-)X
+1 f
+1619(i)X
+3 f
+1641(])X
+1688([)X
+1 f
+9 f
+1715(-)X
+1 f
+1759(l)X
+3 f
+1781(])X
+1828([)X
+1 f
+9 f
+1855(-)X
+1 f
+1899(o)X
+2 f
+1959(ind)X
+1 f
+2068(])X
+3 f
+2115([)X
+1 f
+9 f
+2142(-)X
+1 f
+2186(p)X
+2 f
+2246(num)X
+1 f
+2391(])X
+3 f
+2438([)X
+1 f
+9 f
+2465(-)X
+1 f
+2509(q)X
+3 f
+(])S
+2596([)X
+1 f
+9 f
+2623(-)X
+1 f
+2667(r)X
+3 f
+2694(])X
+2741([)X
+1 f
+9 f
+2768(-)X
+1 f
+2812(s)X
+2 f
+2863(s\256le)X
+1 f
+2999(])X
+3 f
+3046([)X
+1 f
+9 f
+3073(-)X
+1 f
+3117(t)X
+2 f
+3159(log)X
+1 f
+3268(])X
+3 f
+3315([)X
+2 f
+3342(idx0)X
+3500(idx1)X
+3658(idx2)X
+1 f
+3803(.)X
+3836(.)X
+3869(.])X
+3 f
+9 s
+555 1228(DESCRIPTION)N
+1 f
+10 s
+843 1324(The)N
+989(program)X
+2 f
+1282(makeindex)X
+1 f
+1647(is)X
+1721(a)X
+1778(general)X
+2035(purpose)X
+2309(hierarchical)X
+2709(index)X
+2907(generator;)X
+3253(it)X
+3317(accepts)X
+3574(one)X
+3710(or)X
+3797(more)X
+3982(input)X
+4166(\256les)X
+843 1420(\(often)N
+1056(produced)X
+1376(by)X
+1477(a)X
+1534(text)X
+1675(formatter)X
+1995(such)X
+2162(as)X
+2249(T)X
+2285 1439(E)N
+2324 1420(X)N
+2402(\()X
+2 f
+2429(tex)X
+1 f
+2530(\(1L\)\))X
+2720(or)X
+2 f
+2807(troff)X
+1 f
+2951(\(1\),)X
+3085(sorts)X
+3256(the)X
+3374(entries,)X
+3628(and)X
+3764(produces)X
+4074(an)X
+4170(out-)X
+843 1516(put)N
+973(\256le)X
+1103(which)X
+1327(can)X
+1467(be)X
+1571(formatted.)X
+1951(The)X
+2104(index)X
+2310(can)X
+2450(have)X
+2630(up)X
+2738(to)X
+2828(three)X
+3017(levels)X
+3232(\(0,)X
+3347(1,)X
+3435(and)X
+3579(2\))X
+3674(of)X
+3768(subitem)X
+4048(nesting.)X
+843 1612(The)N
+998(way)X
+1162(in)X
+1254(which)X
+1480(words)X
+1706(are)X
+1835(\257agged)X
+2100(for)X
+2223(indexing)X
+2532(within)X
+2765(the)X
+2892(main)X
+3081(document)X
+3426(is)X
+3508(speci\256c)X
+3782(to)X
+3873(the)X
+4000(formatter)X
+843 1708(used;)N
+2 f
+1036(makeindex)X
+1 f
+1404(does)X
+2 f
+1575(not)X
+1 f
+1701(automate)X
+2019(the)X
+2140(process)X
+2404(of)X
+2494(selecting)X
+2802(these)X
+2990(words.)X
+3249(As)X
+3361(the)X
+3482(output)X
+3709(index)X
+3910(is)X
+3986(hierarchi-)X
+843 1804(cal,)N
+2 f
+985(makeindex)X
+1 f
+1356(can)X
+1495(be)X
+1598(considered)X
+1973(complimentary)X
+2485(to)X
+2574(the)X
+2 f
+2699(awk)X
+1 f
+2835(\(1\)-based)X
+2 f
+3166(make.index)X
+1 f
+3537(\(1L\))X
+3707(system)X
+3956(of)X
+4050(Bentley)X
+843 1900(and)N
+997(Kernighan,)X
+1394(which)X
+1628(is)X
+1719(speci\256c)X
+2002(to)X
+2 f
+2102(troff)X
+1 f
+2246(\(1\),)X
+2398(generates)X
+2739(non-hierarchical)X
+3303(indices,)X
+3587(and)X
+3740(employs)X
+4048(a)X
+4121(much)X
+843 1996(simpler)N
+1104(syntax)X
+1334(for)X
+1449(indicating)X
+1790(index)X
+1989(entries.)X
+2264(For)X
+2396(illustration)X
+2763(of)X
+2851(use)X
+2979(with)X
+2 f
+3142(troff)X
+1 f
+3300(and)X
+2 f
+3437(T)X
+3468 2015(E)N
+3507 1996(X)N
+1 f
+3563(,)X
+3604(see)X
+3728(the)X
+3847(section)X
+8 s
+4090(EXAM-)X
+843 2092(PLES)N
+10 s
+1013(below.)X
+843 2226(The)N
+995(formats)X
+1267(of)X
+1361(the)X
+1486(input)X
+1677(and)X
+1820(output)X
+2051(\256les)X
+2211(are)X
+2337(speci\256ed)X
+2649(in)X
+2738(a)X
+2800(style)X
+2977(\256le;)X
+3127(by)X
+3233(default,)X
+3502(input)X
+3692(is)X
+3771(assumed)X
+4073(to)X
+4161(be)X
+4263(a)X
+2 f
+843 2322(.idx)N
+1 f
+981(\256le,)X
+1123(as)X
+1210(generated)X
+1543(by)X
+1643(L)X
+8 s
+1664 2308(A)N
+10 s
+1698 2322(T)N
+1734 2341(E)N
+1773 2322(X.)N
+843 2456(Unless)N
+1090(speci\256ed)X
+1404(explicitly,)X
+1755(the)X
+1882(base)X
+2054(name)X
+2256(of)X
+2351(the)X
+2477(\256rst)X
+2629(input)X
+2821(\256le)X
+2951(\()X
+2 f
+2978(idx0)X
+1 f
+3123(\))X
+3178(is)X
+3259(used)X
+3434(to)X
+3524(determine)X
+3873(the)X
+3999(names)X
+4232(of)X
+843 2552(other)N
+1030(\256les.)X
+1225(For)X
+1358(each)X
+1528(input)X
+1714(\256le)X
+1838(name)X
+2034(speci\256ed,)X
+2361(a)X
+2419(\256le)X
+2543(of)X
+2632(that)X
+2774(name)X
+2970(is)X
+3045(sought.)X
+3320(If)X
+3396(this)X
+3533(\256le)X
+3657(is)X
+3732(not)X
+3856(found)X
+4064(and)X
+4201(the)X
+843 2648(\256le)N
+972(name)X
+1173(has)X
+1307(no)X
+1413(extension,)X
+1766(the)X
+1890(extension)X
+2 f
+2223(.idx)X
+1 f
+2367(is)X
+2446(appended.)X
+2820(If)X
+2900(no)X
+3006(\256le)X
+3134(with)X
+3302(this)X
+3443(name)X
+3643(is)X
+3722(found,)X
+2 f
+3955(makeindex)X
+1 f
+843 2744(aborts.)N
+843 2878(For)N
+982(important)X
+1321(notes)X
+1518(on)X
+1625(how)X
+1790(to)X
+1879(select)X
+2089(index)X
+2294(keywords,)X
+2653(see)X
+2783(the)X
+2908(document)X
+3251(by)X
+3358(Lamport)X
+3661(cited)X
+3844(below.)X
+4107(As)X
+4223(an)X
+843 2974(issue)N
+1028(separate)X
+1317(from)X
+1498(selecting)X
+1808(index)X
+2011(keywords,)X
+2368(a)X
+2429(systematic)X
+2792(mechanism)X
+3182(for)X
+3301(placing)X
+3562(index)X
+3765(terms)X
+3968(in)X
+4055(a)X
+4116(docu-)X
+843 3070(ment)N
+1023(is)X
+1096(suggested)X
+1432(in)X
+2 f
+1514(Index)X
+1713(Preparation)X
+2124(and)X
+2264(Processing)X
+1 f
+2627(,)X
+2667(a)X
+2723(paper)X
+2922(cited)X
+3098(below.)X
+3 f
+9 s
+555 3204(OPTIONS)N
+10 s
+9 f
+843 3300(-)N
+3 f
+887(c)X
+1 f
+1243(Compress)X
+1599(intermediate)X
+2036(blanks)X
+2281(\(ignoring)X
+2614(leading)X
+2885(and)X
+3036(trailing)X
+3302(blanks)X
+3546(and)X
+3697(tabs\).)X
+3928(By)X
+4056(default,)X
+1243 3396(blanks)N
+1472(in)X
+1554(the)X
+1672(index)X
+1870(key)X
+2006(are)X
+2125(retained.)X
+3 f
+9 f
+843 3530(-)N
+3 f
+887(g)X
+1 f
+1243(Employ)X
+1523(German)X
+1809(word)X
+2001(ordering)X
+2300(in)X
+2389(the)X
+2514(index,)X
+2739(in)X
+2828(accord)X
+3070(with)X
+3239(rules)X
+3422(set)X
+3538(forth)X
+3721(in)X
+3810(DIN)X
+3980(5007.)X
+4206(By)X
+1243 3626(default,)N
+2 f
+1527(makeindex)X
+1 f
+1912(employs)X
+2224(a)X
+2301(word)X
+2507(ordering)X
+2820(in)X
+2923(which)X
+3159 0.3750(precedence)AX
+3562(is:)X
+3677(symbols,)X
+4003(numbers,)X
+1243 3722(uppercase)N
+1604(letters,)X
+1859(lowercase)X
+2220(letters.)X
+2494(The)X
+2657(sequence)X
+2990(in)X
+3090(German)X
+3387(word)X
+3590(ordering)X
+3900(is:)X
+4013(symbols,)X
+1243 3818(lowercase)N
+1593(letters,)X
+1837(uppercase)X
+2187(letters,)X
+2431(numbers.)X
+2774(Additionally,)X
+3225(this)X
+3367(option)X
+3598(enables)X
+2 f
+3866(makeindex)X
+1 f
+4237(to)X
+1243 3914(recognize)N
+1586(the)X
+1714(German)X
+2003(T)X
+2039 3933(E)N
+2078 3914(X-commands)N
+2540({"a,)X
+2697("o,)X
+2820("u)X
+2923(and)X
+3069("s})X
+3201(as)X
+3298({ae,)X
+3458(oe,)X
+3584(ue)X
+3689(and)X
+3834(ss})X
+3963(during)X
+4201(the)X
+1243 4010(sorting)N
+1500(of)X
+1602(the)X
+1735(entries.)X
+2024(The)X
+2184(quote)X
+2397(character)X
+2728(must)X
+2918(be)X
+3029(rede\256ned)X
+3363(in)X
+3460(a)X
+3531(style)X
+3716(\256le)X
+3852(\(for)X
+4007(example,)X
+1243 4106(rede\256ne)N
+1524(quote)X
+1724(as)X
+1813('+'\).)X
+2001(If)X
+2077(the)X
+2197(quote)X
+2397(character)X
+2715(is)X
+2790(not)X
+2914(rede\256ned,)X
+2 f
+3255(makeindex)X
+1 f
+3620(will)X
+3765(produce)X
+4045(an)X
+4142(error)X
+1243 4202(message)N
+1535(and)X
+1671(abort.)X
+3 f
+9 f
+843 4336(-)N
+3 f
+887(i)X
+1 f
+1243(Take)X
+1424(input)X
+1608(from)X
+2 f
+1784(stdin)X
+1 f
+1946(.)X
+2006(When)X
+2218(this)X
+2353(option)X
+2577(is)X
+2650(speci\256ed)X
+2955(and)X
+3 f
+9 f
+3091(-)X
+3 f
+3135(o)X
+1 f
+3195(is)X
+3268(not,)X
+3410(output)X
+3634(is)X
+3707(written)X
+3954(to)X
+2 f
+4036(stdout)X
+1 f
+4238(.)X
+3 f
+9 f
+843 4470(-)N
+3 f
+887(l)X
+1 f
+1243(Letter)X
+1455(ordering;)X
+1769(by)X
+1869(default,)X
+2132(word)X
+2317(ordering)X
+2609(is)X
+2682(used)X
+2849(\(see)X
+2999(the)X
+8 s
+3113(ORDERING)X
+10 s
+3463(section\).)X
+3 f
+9 f
+843 4604(-)N
+3 f
+887(o)X
+2 f
+947(ind)X
+1 f
+1243(Employ)X
+2 f
+1528(ind)X
+1 f
+1662(as)X
+1761(the)X
+1891(output)X
+2127(index)X
+2337(\256le.)X
+2511(By)X
+2636(default,)X
+2910(the)X
+3039(\256le)X
+3172(name)X
+3377(is)X
+3461(created)X
+3725(by)X
+3836(appending)X
+4201(the)X
+1243 4700(extension)N
+2 f
+1570(.ind)X
+1 f
+1712(to)X
+1794(the)X
+1912(base)X
+2075(name)X
+2269(of)X
+2356(the)X
+2474(\256rst)X
+2618(input)X
+2802(\256le)X
+2924(\()X
+2 f
+2951(idx0)X
+1 f
+3096(\).)X
+3 f
+9 f
+843 4834(-)N
+3 f
+887(p)X
+2 f
+951(num)X
+1 f
+1243(Set)X
+1367(the)X
+1487(starting)X
+1749(page)X
+1923(number)X
+2190(of)X
+2278(the)X
+2397(output)X
+2622(index)X
+2821(\256le)X
+2944(to)X
+3027(be)X
+2 f
+3124(num)X
+1 f
+3283(\(useful)X
+3527(when)X
+3722(the)X
+3841(index)X
+4040(\256le)X
+4163(is)X
+4237(to)X
+1243 4930(be)N
+1339(formatted)X
+1671(separately\).)X
+2084(The)X
+2229(argument)X
+2 f
+2552(num)X
+1 f
+2710(may)X
+2868(be)X
+2964(numerical)X
+3305(or)X
+3392(one)X
+3528(of)X
+3615(the)X
+3733(following:)X
+2 f
+1243 5064(any)N
+1 f
+1643(The)X
+1788(starting)X
+2048(page)X
+2220(is)X
+2293(the)X
+2411(last)X
+2542(source)X
+2772(page)X
+2944(number)X
+3209(plus)X
+3362(1.)X
+2 f
+1243 5198(odd)N
+1 f
+1643(The)X
+1788(starting)X
+2048(page)X
+2220(is)X
+2293(the)X
+2411(\256rst)X
+2555(odd)X
+2695(page)X
+2867(following)X
+3198(the)X
+3316(last)X
+3447(source)X
+3677(page)X
+3849(number.)X
+2 f
+1243 5332(even)N
+1 f
+1643(The)X
+1788(starting)X
+2048(page)X
+2220(is)X
+2293(the)X
+2411(\256rst)X
+2555(even)X
+2727(page)X
+2899(following)X
+3230(the)X
+3348(last)X
+3479(source)X
+3709(page)X
+3881(number.)X
+1243 5466(The)N
+1390(last)X
+1523(source)X
+1755(page)X
+1929(is)X
+2003(obtained)X
+2300(by)X
+2401(searching)X
+2730(backward)X
+3064(in)X
+3147(the)X
+3266(log)X
+3389(\256le)X
+3512(for)X
+3627(the)X
+3746(\256rst)X
+3891(instance)X
+4175(of)X
+4263(a)X
+1243 5562(number)N
+1513(included)X
+1814(within)X
+2043(paired)X
+2268(square)X
+2502(brackets)X
+2794(\()X
+3 f
+2821([)X
+1 f
+2848(.)X
+2881(.)X
+2914(.)X
+3 f
+(])S
+1 f
+2961(\).)X
+3052(If)X
+3130(a)X
+3190(page)X
+3366(number)X
+3635(is)X
+3712(missing)X
+3984(or)X
+4075(the)X
+4197(log)X
+1243 5658(\256le)N
+1370(is)X
+1447(not)X
+1573(found,)X
+1804(no)X
+1908(attempt)X
+2172(will)X
+2320(be)X
+2420(made)X
+2618(to)X
+2704(set)X
+2817(the)X
+2939(starting)X
+3203(page)X
+3379(number.)X
+3688(The)X
+3837(source)X
+4071(log)X
+4197(\256le)X
+1243 5754(name)N
+1448(is)X
+1532(determined)X
+1924(by)X
+2035(appending)X
+2400(the)X
+2529(extension)X
+2 f
+2867(.log)X
+1 f
+3020(to)X
+3113(the)X
+3242(base)X
+3416(name)X
+3621(of)X
+3719(the)X
+3848(\256rst)X
+4003(input)X
+4197(\256le)X
+1243 5850(\()N
+2 f
+1270(idx0)X
+1 f
+1415(\).)X
+555 6234(7th)N
+677(Edition)X
+2121(10)X
+2221(December)X
+2572(1991)X
+4259(1)X
+
+2 p
+%%Trailer
+xt
+
+xs
diff --git a/indexing/makeindex/doc/makeindex.tex b/indexing/makeindex/doc/makeindex.tex
new file mode 100644
index 0000000000..960ac29509
--- /dev/null
+++ b/indexing/makeindex/doc/makeindex.tex
@@ -0,0 +1,475 @@
+% makeindex.tex -- released 17 February 1987
+% Copyright(c) 1987 by Leslie Lamport
+% for LaTeX version 2.09
+%
+\documentstyle[11pt]{article}
+
+%&v&\verb|#|&
+%&i&\verb|\index{#}|&
+%&t&{\tt #}&
+\newcommand{\MakeIndex}{{\it MakeIndex\/}}
+\newcommand{\fn}{}
+\newcommand{\ff}
+
+
+% Definition of the iexample environment and \sindex command.
+% They are used as follows:
+% \begin{iexample}
+% Page 7 & \verb|\index{foo}|\\
+% Page 22 & \verb|\index{bar}|
+% \sindex
+% bar, 22 \\
+% foo, 7
+% \end{iexample}
+\newenvironment{iexample}{\begin{quote}
+ \begin{tabular}[t]{@{}ll||@{\hspace{1em}}}}{\end{tabbing}\end{minipage}
+ \end{quote}}
+\newcommand{\sindex}{\end{tabular}\hspace{1em}\begin{minipage}[t]{\textwidth}
+ \begin{tabbing}}
+
+\newcommand{\sitem}{\hspace*{20pt}}
+\newcommand{\ssitem}{\hspace*{30pt}}
+
+
+\title{\MakeIndex: An Index Processor For \LaTeX}
+
+\author{Leslie Lamport}
+\date{17 February 1987}
+\begin{document}
+\maketitle
+
+\section{How to Use \MakeIndex}
+
+\MakeIndex\ is a program for
+making an index in a document generated with \LaTeX. The first step in
+producing the index is to put the necessary \verb|\index| commands in
+your document, as described in the next section. Here, I describe how
+to generate the index after the \verb|\index| commands are in place.
+
+Let's suppose that the root file of your document is {\tt myfile.tex}.
+You must make the following changes to your document:
+\begin{itemize}
+
+\item Add the {\tt makeidx} document-style option to the list of
+options in the \verb|\documentstyle| command. (See page 21 of the
+\LaTeX\ manual.)
+
+\item Put a \verb|\makeindex| command in the preamble (between the
+ \linebreak%%%%%
+\verb|\documentstyle| and \verb|\begin{document}| commands).
+
+\item Put a \verb|\printindex| command where you want the index to
+appear---usually at the end, right before the \verb|\end{document}|
+command.
+\end{itemize}
+You then run \LaTeX\ on your entire document, causing it to
+generate the file {\tt myfile.idx}, which I will call the {\tt idx} file.
+Next, run the \MakeIndex\ program by
+typing the following Unix command:
+\begin{quote}
+ {\tt makeindex myfile.idx}
+\end{quote}
+This produces the file {\tt myfile.ind}, which I will call the {\tt
+ind} file. If \MakeIndex\ generated no error messages, you can now rerun
+\LaTeX\ on your document and the index will appear. (You can remove
+the \verb|\makeindex| command first so the {\tt idx} file is not
+regenerated.) If there were error messages, see
+Section~\ref{sec:errors}.
+
+By reading the index, you may discover additional mistakes. These should be
+corrected by changing the appropriate \verb|\index| commands in the
+document and regenerating the {\tt ind} file. If there are
+problems that cannot be corrected in this way, you can always edit
+the {\tt ind} file directly. However, such editing is to be
+avoided because it must be repeated every time you generate a new
+version of the index.
+
+
+\section{How to Generate Index Entries}
+
+\subsection{When, Why, What, and How to Index}
+
+It's tempting to generate the index as you write the document. Resist
+the temptation. It is virtually impossible to obtain any consistency
+in an index that is generated in this way.
+
+An index is there to help the reader find what he's looking for. With
+this in mind, common sense can help in figuring out what should be in
+the index and how it should be organized. Since it's often hard to
+distinguish common sense from equally common nonsense, professional
+advice is useful. Many style guides discuss indexing; the pamphlet
+{\em Indexing Your Book\/} by Sina Spiker (The University of Wisconsin
+Press, 1954) is, according to its subtitle, ``A Practical
+Guide for Authors''.
+
+Unfortunately, these guides to indexing seem to have been written when
+high tech meant using a ball-point pen instead of a quill, so their
+advice on the mechanics of creating an index revolve around how to
+stack your $3\times 5$ index cards. You'll have to figure out your own
+method of using the computer to lighten the chore. An alphabetical
+list of every word in your document, with duplicates removed, is not a
+bad place to start. If your system has Howard Trickey's {\tt delatex}
+program, then the following Unix command generates such a list from the
+file {\tt myfile.tex} and puts it on the file {\tt foo}:
+\begin{quote}
+\tt delatex myfile.tex | sort -uf > foo
+\end{quote}
+
+The computer is only a tool; it can't write the index for you. It may
+be easy to choose which words are important and mechanically generate
+an index citing every occurrence of those words, but the resulting
+index will not be as useful to the reader as one prepared with more
+care.
+
+
+
+
+\subsection{The Basics}
+
+Each \verb|\index| command causes \LaTeX\ to write an entry on the {\tt
+idx} file. The following example shows some simple
+\verb|\index| commands and the index entries that they produce. The
+page number refers to the page containing the text where the
+\verb|\index| command appears.\footnote{To avoid any ambiguity if a
+page break occurs right at an {\tt \symbol{'134}index} command, it's a
+good idea to attach the command to a word instead of putting it between
+words.}
+\begin{iexample}
+Page ii & \verb|\index{Alpha}| \\
+Page viii: & \verb|\index{alpha}| \\
+Page ix: & \verb|\index{alpha}| \\
+ & \verb|\index{Alphabet}| \\
+Page 22: & \verb|\index{alpha}| \\
+ & \verb|\index{alphas}| \\
+Page 23: & \verb|\index{alphabet}| \\
+ & \verb|\index{alphabet}| \\
+Page 24: & \verb|\index{alpha bet}|
+\sindex
+Alpha, ii \\
+alpha, viii, ix, 22 \\
+alpha bet, 24\\
+Alphabet, ix\\
+alphabet, 23\\
+alphas, 22
+\end{iexample}
+Note that the duplicate \verb|\index{alphabet}| commands on
+page 23 produce only one ``23'' in the index.
+
+
+To produce a subentry, the argument of the \verb|\index|
+command should contain both the main entry and the subentry, separated
+by a \verb|!| character.
+\begin{iexample}
+Page 7: & \verb|\index{gnat!size of}| \\
+Page 32: & \verb|\index{gnat}| \\
+Page 35: & \verb|\index{gnat!anatomy}| \\
+ & \verb|\index{gnus!good}| \\
+Page 38: & \verb|\index{gnus!bad}| \\
+ &
+\sindex
+gnat, 32 \\
+\sitem anatomy, 35 \\
+\sitem size of, 7\\
+gnus \\
+\sitem bad, 38\\
+\sitem good, 35
+\end{iexample}
+You can also have subsubentries.
+\begin{iexample}
+Page 8: & \verb|\index{bites!animal!gnats}| \\
+Page 10: & \verb|\index{bites!animal!gnus}| \\
+Page 12 : & \verb|\index{bites!vegetable}| \\
+ & \\
+ &
+\sindex
+bites \\
+\sitem animal \\
+\ssitem gnats, 8 \\
+\ssitem gnus, 10 \\
+\sitem vegetable, 12
+\end{iexample}
+\LaTeX\ and \MakeIndex\ support only three levels of indexing; you
+can't have subsubsubentries.
+
+
+To specify a page range, put an \verb/\index{...|(}/
+command at the beginning of the range and an \verb/\index{...|)}/
+command at the end of the range.
+\begin{iexample}
+Page vi: & \verb/\index{gnat|(}/ \\
+Page x: & \verb/\index{gnat|)}/ \\
+Page 22: & \verb|\index{gnat}| \\
+ & \verb/\index{gnus!bad|(}/ \\
+ & \verb/\index{gnus!bad|)}/ \\
+Page 28: & \verb/\index{gnus!good|(}/ \\
+Page 30: & \verb|\index{gnus!good}| \\
+Page 32: & \verb/\index{gnus!good|)}/
+\sindex
+gnat, vi--x, 22 \\
+gnus \\
+\sitem bad, 22\\
+\sitem good, 28--32
+\end{iexample}
+Note that \MakeIndex\ does the right thing when both ends of the range
+fall on the same page.\footnote{The use of ``28ff.'' rather than
+``28--32'' is frowned upon by the experts.}
+
+Sometimes, you want to add a cross-reference with no page
+number. This is done as follows;
+\begin{iexample}
+Page 2: & \verb|\index{at}| \\
+Page 2: & \verb/\index{at!bat|see{bat, at}}/
+\sindex
+at, 2 \\
+\sitem bat, {\em see\/} bat, at
+\end{iexample}
+Since the ``see'' entry does not print any page number, it doesn't
+matter where the \verb/\index{...|see{...}}/ command goes, so
+long as it follows the \verb|\begin{document}| command. You
+might want to put all such cross-referencing commands in one place.
+
+
+If you specify an entry of the form $\sigma$\verb|@|$\tau$, the string
+$\sigma$ determines the alphabetical position of the entry, while the
+string $\tau$ produces the text of the entry.
+\begin{iexample}
+Page 44: & \verb|\index{twenty}| \\
+Page 46: & \verb|\index{twenty-one}| \\
+Page 55: & \verb|\index{twenty@xx}|
+\sindex
+twenty, 44 \\
+xx, 55 \\
+twenty-one, 46
+\end{iexample}
+This feature is useful because the argument of the \verb|\index|
+command provides the actual input string that \LaTeX\ uses to generate
+the index entry. In the following example, the input \verb|$\alpha$|
+produces the symbol $\alpha$,
+\begin{iexample}
+Page 12: & \verb|\index{alphas}| \\
+Page 13: & \verb|\index{alpha}| \\
+Page 14: & \verb|\index{alpha@$\alpha$}|
+\sindex
+alpha, 13 \\
+$\alpha$, 14 \\
+alphas, 12
+\end{iexample}
+Similarly, the command \verb|\index{gnu@{\bf gnu}}| produces
+a boldface {\bf gnu} index entry.
+
+In some indexes, certain page numbers are specially formatted---for
+example, an italic page number may indicate the primary reference, and
+an {\em n\/} after a page number may denote that the item appears in a
+footnote on that page. \MakeIndex\ makes it easy to format an
+individual page number any way you want. For any string of characters
+$\sigma$, the command \verb/\index{...|/$\sigma$\verb|}| produces a
+page number of the form \verb|\|$\sigma$\verb|{|$n$\verb|}|.
+Similarly, the command \verb/\index{...|(/$\sigma$\verb|}| may produce
+a page number of the form \verb|\|$\sigma$\verb|{|$n$--$m$\verb|}|.
+Thus, suppose the document contains the following command definitions:
+\begin{quote}
+\verb|\newcommand{\ii}[1]{{\it #1}}| \\
+\verb|\newcommand{\nn}[1]{#1n}|
+\end{quote}
+We could then have:
+\begin{iexample}
+Page 3: & \verb/\index{gnat|ii}/ \\
+Page 4: & \verb/\index{gnat|nn}/ \\
+Page 5: & \verb/\index{gnu}/ \\
+Page 44: & \verb/\index{gnu|(ii}/ \\
+Page 46: & \verb/\index{gnu|)}/
+\sindex
+gnat, {\em 3}, 4n \\
+gnu, 5, {\em 44--46}
+\end{iexample}
+The ``see'' option is a special case of this facility, where the
+\verb|\see| command is predefined by the {\tt makeidx} document-style
+option.
+
+
+\subsection{The Fine Print}
+
+Commands in an index entry are expanded when the index is typeset,
+not when the {\tt idx} file is written. Hence, the command
+\verb|\index{\gnu}| produces an entry that is alphabetized by
+\verb|\gnu|, regardless of how the \verb|\gnu| command is defined.
+
+Recall that special characters like \verb|\| may appear in the argument
+of an \verb|\index| command only if that command is not itself
+contained in the argument of another command. This is most likely to
+be a problem when indexing items in a footnote. Even in this case,
+robust commands can be placed in the ``\verb|@|'' part of an entry, as
+in \verb|\index{gnu@{\it gnu}}|, and fragile commands can be used
+if protected with the \verb|\protect| command.\footnote{In
+versions of \LaTeX\ released before 3 February 1987, you must
+use the {\tt\symbol{'134}string} command instead of
+{\tt\symbol{'134}protect}.}
+
+Remember that the argument of an \verb|\index| command must always have
+matching braces, where the brace in a \verb|\{| or \verb|\}| command
+counts.
+
+\MakeIndex\ assumes that all page numbers are either arabic or lower-case
+roman numerals; it assumes that pages numbered with roman numerals
+precede those numbered with arabic numerals.
+
+To put a \verb|!|, \verb|@|, or \verb/|/ character in an index entry,
+{\em quote\/} it by preceding the character with a \verb|"|. More
+precisely, any a character is said to be quoted if it follows an
+unquoted \verb|"| that is not part of a \verb|\"| command. A quoted
+\verb|!|, \verb|@|, or \verb/|/ character is treated like an
+ordinary character rather than having its usual meaning. The
+\verb|"| preceding a quoted character is deleted before the
+entries are alphabetized.
+\begin{iexample}
+Page 2: & \verb|\index{exclaim ("!)}| \\
+Page 3: & \verb|\index{exclaim ("!)!loudly}| \\
+Page 4: & \verb|\index{fur@f\"{u}r}| \\
+Page 5: & \verb|\index{quote (\verb+""+)}|
+\sindex
+exclaim (!), 2 \\
+\sitem loudly, 3\\
+f\"{u}r, 4\\
+quote (\verb+""+), 5
+\end{iexample}
+
+
+\MakeIndex\ regards spaces as ordinary characters when alphabetizing the
+entries and deciding whether two entries are the same. Thus, letting
+``\verb*| |'' denote a space character, the commands
+\verb*|\index{gnu}|, \verb*|\index{ gnu}|, and \verb*|\index{gnu }|
+produce three separate entries, the first appearing near the beginning
+of the index, since \verb*| | comes before any letter in \MakeIndex's
+``alphabetical'' order. All three entries look the same when
+printed, since \LaTeX\ ignores extra spaces in the input. Similarly,
+ \verb*|\index{a space}| and \verb*|\index{a space}| produce two
+different entries that look the same when printed. Do not
+split the argument of an \verb|\index| command across lines in the
+input file.
+
+
+
+\section{Error Messages} \label{sec:errors}
+
+\MakeIndex\ types out on the terminal the number of lines read and
+written and how many errors were found. Message to identify the error
+are written on a file with extension {\tt ilg}. There are two phases
+in which \MakeIndex\ can produce error messages: when it is reading the
+{\tt idx} file, and when it is writing the {\tt ind} file. Each error
+message prints the nature of the error followed by a line number,
+identifying where in the file the error occurs. In the reading phase,
+the line number refers to the {\tt idx} file; in the writing phase, it
+refers to the {\tt ind} file.
+
+\subsection{Errors in Reading Phase}
+
+\subsubsection*{\tt Extra `!' at position ...}
+
+The \verb|\index| command's argument has more than two unquoted
+\verb|!| characters. Perhaps some of them should be quoted.
+
+\subsubsection*{\tt Extra `@' at position ...}
+
+The \verb|\index| command argument has two or more unquoted \verb|@|
+characters with no intervening \verb|!|. Perhaps one of the \verb|@|
+characters should be quoted.
+
+\subsubsection*{\tt Extra `|' at position ...}
+
+The \verb|\index| command's argument has more than one unquoted \verb|!|
+characters. Perhaps the extras should be quoted.
+
+\subsubsection*{\tt Illegal null field}
+
+The \verb|\index| command argument doesn't make sense because some
+string is null that shouldn't be. The command \verb|\index{!big}| will
+produce this error, since it specifies a subentry ``big'' with no
+entry. Similarly, the command \verb|\index{@big}| is incorrect because
+it specifies a null string for alphabetizing.
+
+%\subsubsection*{\tt No \symbol{'134}indexentry}
+%
+%Each line of an {\tt idx} file written by \LaTeX\ should contain an
+%\verb|\indexentry| command. \MakeIndex\ has found a line in the {\tt idx}
+%file that does not contain an \verb|\indexentry| command. The {\tt
+%idx} file has probably been corrupted.
+%
+%\subsubsection*{\tt Missing \symbol{'173}}
+%
+%\MakeIndex\ believes that the braces in the argument of the \verb|\index|
+%command are not properly matched. Since \LaTeX\ must
+%have thought that the braces were properly matched, the problem
+%is probably due to a corrupted {\tt idx} file.
+%
+%\subsubsection*{\tt Missing \symbol{'175}}
+%
+%See ``{\tt Missing \symbol{'173}}'' error.
+
+\subsubsection*{\tt Argument ... too long (max 1024).}
+
+Your document contained an \verb|\index| command with a very long
+argument. You probably forgot the right brace that was supposed
+to delimit the argument.
+
+\subsubsection*{Other errors}
+
+\MakeIndex\ can produce a variety of other error messages indicating
+that something is seriously wrong with the {\tt idx} file. If you
+get one, it probably means that the {\tt idx} file was corrupted in
+some way. If \LaTeX\ did not generate any errors when it created
+the {\tt idx} file, then it is highly unlikely to have produced
+a bad {\tt idx} file. If it did, you'll have to examine the
+{\tt idx} file to figure out what went wrong.
+
+
+\subsection{Errors in Writing Phase}
+
+\subsubsection*{\tt Unmatched range opening operator}
+
+An \verb/\index{...|(}/ command was not followed by a matching
+ \linebreak%%%%%
+\verb/\index{...|)}/ command. The ``\verb|...|'' in the two
+commands must be completely identical.
+
+
+\subsubsection*{\tt Unmatched range closing operator }
+
+An \verb/\index{...|(}/ command was not preceded by a matching
+ \linebreak%%%%%
+\verb/\index{...|)}/ command.
+
+\subsubsection*{\tt Extra range opening operator }
+
+Two \verb/\index{...|(}/ commands appear in the document with no intervening
+\verb/\index{...|)}/ command.
+
+
+
+\subsubsection*{\tt Inconsistent page encapsulator ... within range}
+
+\MakeIndex\ has been instructed to include a page range for an entry
+and a single page number within that range that is formatted
+differently---for example, by having a
+\verb+\index{gnu|ii}+ command between a \verb+\index{gnu|(}+
+and a \verb+\index{gnu|)}+ command.
+
+
+\subsubsection*{\tt Conflicting entries}
+
+\MakeIndex\ thinks it has been instructed to print the same page number
+twice in two different ways---for example, by the commands
+\verb|\index{gnu}| and \verb/\index{gnu|(see{...}}/ appearing on the
+same page.
+
+
+
+\section*{Acknowledgements}
+
+\MakeIndex\ is a C program written by Pehong Chen, with a little
+advice from me. It was inspired by a program written by Mike Urban,
+which was based on a program written by Marshall Rose. Perhaps someday
+someone will rewrite \MakeIndex\ in Web, making it available to all
+\LaTeX\ users.
+
+\end{document}
+
diff --git a/indexing/makeindex/doc/makeindex.vms b/indexing/makeindex/doc/makeindex.vms
new file mode 100644
index 0000000000..50ff4d7175
--- /dev/null
+++ b/indexing/makeindex/doc/makeindex.vms
@@ -0,0 +1,812 @@
+1 MAKEINDEX
+
+2 NAME
+ makeindex - a general purpose, formatter-independent index
+ processor
+
+2 SYNOPSIS
+ makeindex [-c] [-g] [-i] [-l] [-o ind] [-p num] [-q] [-r]
+ [-s sfile] [-t log] [idx0 idx1 idx2...]
+
+2 DESCRIPTION
+ The program makeindex is a general purpose hierarchical
+ index generator; it accepts one or more input files (often
+ produced by a text formatter such as TeX (tex(1L)) or
+ troff(1), sorts the entries, and produces an output file
+ which can be formatted. The index can have up to three lev-
+ els (0, 1, and 2) of subitem nesting. The way in which
+ words are flagged for indexing within the main document is
+ specific to the formatter used; makeindex does not automate
+ the process of selecting these words. As the output index
+ is hierarchical, makeindex can be considered complimentary
+ to the awk(1)-based make.index(1L) system of Bentley and
+ Kernighan, which is specific to troff(1), generates non-
+ hierarchical indices, and employs a much simpler syntax for
+ indicating index entries. For illustration of use with
+ troff and TeX, see the section EXAMPLES below.
+
+ The formats of the input and output files are specified in a
+ style file; by default, input is assumed to be a .idx file,
+ as generated by LaTeX.
+
+ Unless specified explicitly, the base name of the first
+ input file (idx0) is used to determine the names of other
+ files. For each input file name specified, a file of that
+ name is sought. If this file is not found and the file name
+ has no extension, the extension .idx is appended. If no
+ file with this name is found, makeindex aborts.
+
+ For important notes on how to select index keywords, see the
+ document by Lamport cited below. As an issue separate from
+ selecting index keywords, a systematic mechanism for placing
+ index terms in a document is suggested in Index Preparation
+ and Processing, a paper cited below.
+
+2 OPTIONS
+ -c Compress intermediate blanks (ignoring leading and
+ trailing blanks and tabs). By default, blanks in
+ the index key are retained.
+
+ -g Employ German word ordering in the index, in
+ accord with rules set forth in DIN 5007. By
+ default, makeindex employs a word ordering in
+ which precedence is: symbols, numbers, uppercase
+ letters, lowercase letters. The sequence in
+
+ German word ordering is: symbols, lowercase
+ letters, uppercase letters, numbers. Addition-
+ ally, this option enables makeindex to recognize
+ the German TeX-commands {"a, "o, "u and "s} as
+ {ae, oe, ue and ss} during the sorting of the
+ entries. The quote character must be redefined in
+ a style file (for example, redefine quote as '+').
+ If the quote character is not redefined, makeindex
+ will produce an error message and abort.
+
+ -i Take input from stdin. When this option is speci-
+ fied and -o is not, output is written to stdout.
+
+ -l Letter ordering; by default, word ordering is used
+ (see the ORDERING section).
+
+ -o ind Employ ind as the output index file. By default,
+ the file name is created by appending the exten-
+ sion .ind to the base name of the first input file
+ (idx0).
+
+ -p num Set the starting page number of the output index
+ file to be num (useful when the index file is to
+ be formatted separately). The argument num may be
+ numerical or one of the following:
+
+ any The starting page is the last source
+ page number plus 1.
+
+ odd The starting page is the first odd page
+ following the last source page number.
+
+ even The starting page is the first even page
+ following the last source page number.
+
+ The last source page is obtained by searching
+ backward in the log file for the first instance of
+ a number included within paired square brackets
+ ([...]). If a page number is missing or the log
+ file is not found, no attempt will be made to set
+ the starting page number. The source log file
+ name is determined by appending the extension .log
+ to the base name of the first input file (idx0).
+
+ -q Quiet mode; send no messages to stderr. By
+ default, progress and error messages are sent to
+ stderr as well as to the transcript file.
+
+ -r Disable implicit page range formation; page ranges
+ must be created by using explicit range operators;
+ see SPECIAL EFFECTS below. By default, three or
+ more successive pages are automatically
+
+ abbreviated as a range (e.g. 1-5).
+
+ -s sty Employ sty as the style file (no default). The
+ environment variable INDEXSTYLE defines the path
+ where the style file should be found.
+
+ -t log Employ log as the transcript file. By default,
+ the file name is created by appending the exten-
+ sion .ilg to the base name of the first input file
+ (idx0).
+
+2 STYLE FILE
+ The style file informs makeindex about the format of the
+ .idx input files and the intended format of the final output
+ file; examples appear below. This file can reside anywhere
+ in the path defined by the environment variable INDEXSTYLE.
+ The style file contains a list of <specifier, attribute>
+ pairs. There are two types of specifiers: input and output.
+ Pairs do not have to appear in any particular order. A line
+ begun by `%' is a comment. In the following list of specif-
+ iers and arguments, <string> is an arbitrary string delim-
+ ited by double quotes ("..."), <char> is a single letter
+ embraced by single quotes ('...'), and <number> is a nonne-
+ gative integer. The maximum length of a <string> is 2048.
+ A literal backslash or quote must be escaped (by a
+ backslash). Anything not specified in the style file will
+ be assigned a default value, which is shown at the head of
+ the rightmost column.
+
+3 INPUT STYLE SPECIFIERS
+ actual <char> '@'
+ Symbol indicating that the next
+ entry is to appear in the output
+ file.
+
+ arg_close <char> '}'
+ Closing delimiter for the index
+ entry argument.
+
+ arg_open <char> '{'
+ Opening delimiter for the index
+ entry argument.
+
+ encap <char> '|'
+ Symbol indicating that the rest of
+ the argument list is to be used as
+ the encapsulating command for the
+ page number.
+
+ escape <char> '\\'
+ Symbol which escapes the following
+ letter, unless its preceding letter
+
+ is escape. Note: quote is used to
+ escape the letter which immediately
+ follows it, but if it is preceded
+ by escape, it is treated as a ordi-
+ nary character. These two symbols
+ must be distinct.
+
+ keyword <string> "\\indexentry"
+ Command which tells makeindex that
+ its argument is an index entry.
+
+ level <char> '!'
+ Delimiter denoting a new level of
+ subitem.
+
+ quote <char> '"'
+ Note: quote is used to escape the
+ letter which immediately follows
+ it, but if it is preceded by
+ escape, it is treated as a ordinary
+ character. These two symbols must
+ be distinct.
+
+ range_close <char> ')'
+ Closing delimiter indicating the
+ end of an explicit page range.
+
+ range_open <char> '('
+ Opening delimiter indicating the
+ beginning of an explicit page
+ range.
+
+3 OUTPUT STYLE SPECIFIERS
+ preamble <string> "\\begin{theindex}\n"
+ Preamble of output file.
+
+ postamble <string> "\n\n\\end{theindex}\n"
+ Postamble of output file.
+
+ setpage_prefix <string> "\n \\setcounter{page}{"
+ Prefix of command which sets the
+ starting page number.
+
+ setpage_suffix <string> "}\n"
+ Suffix of command which sets the
+ starting page number.
+
+ group_skip <string> "\n\n \\indexspace\n"
+ Vertical space to be inserted
+ before a new group begins.
+
+ headings_flag <string> 0
+
+ Flag indicating treatment of new
+ group headers, which are inserted
+ when before a new group (symbols,
+ numbers, and the 26 letters): posi-
+ tive values cause an uppercase
+ letter to be inserted between pre-
+ fix and suffix, and negative values
+ cause a lowercase letter to be
+ inserted (default is 0, which pro-
+ duces no header).
+
+ heading_prefix <string> ""
+ Header prefix to be inserted before
+ a new letter begins.
+
+ symhead_positive <string>
+ "Symbols"
+ Heading for symbols to be inserted
+ if headings_flag is positive.
+
+ symhead_negative <string>
+ "symbols"
+ Heading for symbols to be inserted
+ if headings_flag is negative.
+
+ numhead_positive <string>
+ "Numbers"
+ Heading for numbers to be inserted
+ if headings_flag is positive.
+
+ numhead_negative <string>
+ "numbers"
+ Heading for numbers to be inserted
+ if headings_flag is negative.
+
+ item_0 <string> "\n \\item "
+ Command to be inserted between two
+ primary (level 0) items.
+
+ item_1 <string> "\n \\subitem "
+ Command to be inserted between two
+ secondary (level 1) items.
+
+ item_2 <string> "\n \\subsubitem "
+ Command to be inserted between two
+ level 2 items.
+
+ item_01 <string> "\n \\subitem "
+ Command to be inserted between a
+ level 0 item and a level 1 item.
+
+ item_x1 <string> "\n \\subitem "
+
+ Command to be inserted between a
+ level 0 item and a level 1 item,
+ where the level 0 item does not
+ have associated page numbers.
+
+ item_12 <string> "\n \\subsubitem "
+ Command to be inserted between a
+ level 1 item and a level 2 item.
+
+ item_x2 <string> "\n \\subsubitem "
+ Command to be inserted between a
+ level 1 item and a level 2 item,
+ where the level 1 item does not
+ have associated page numbers.
+
+ delim_0 <string> ", "
+ Delimiter to be inserted between a
+ level 0 key and its first page
+ number (default: comma followed by
+ a blank).
+
+ delim_1 <string> ", "
+ Delimiter to be inserted between a
+ level 1 key and its first page
+ number (default: comma followed by
+ a blank).
+
+ delim_2 <string> ", "
+ Delimiter to be inserted between a
+ level 2 key and its first page
+ number (default: comma followed by
+ a blank).
+
+ delim_n <string> ", "
+ Delimiter to be inserted between
+ two page numbers for the same key
+ in any level (default: comma fol-
+ lowed by a blank).
+
+ delim_r <string> "--"
+ Delimiter to be inserted between
+ the starting and ending page
+ numbers of a range.
+
+ delim_t <string> ""
+ Delimiter to be inserted at the end
+ of a page list. This delimiter has
+ no effect on entries which have no
+ associated page list.
+
+ encap_prefix <string> "\\"
+ First part of prefix for the
+
+ command which encapsulates the page
+ number.
+
+ encap_infix <string> "{"
+ Second part of prefix for the com-
+ mand which encapsulates the page
+ number.
+
+ encap_suffix <string> "}".
+ Suffix for the command which encap-
+ sulates the page number.
+
+ line_max <number> 72
+ Maximum length of a line in the
+ output, beyond which a line wraps.
+
+ indent_space <string> "\t\t"
+ Space to be inserted in front of a
+ wrapped line (default: two tabs).
+
+ indent_length <number> 16
+ Length of indent_space (default:
+ 16, equivalent to 2 tabs).
+
+2 EXAMPLES
+3 TeX EXAMPLE
+ The following example shows a style file called book.ist,
+ which defines an index for a book which can be formatted
+ independently of the main source:
+
+ preamble
+ "\\documentstyle[12pt]{book}
+ \\begin{document}
+ \\begin{theindex}
+ {\\small\n"
+ postamble
+ "\n\n}
+ \\end{theindex}
+ \\end{document}\n"
+
+ Assuming that a particular book style requires the index (as
+ well as any chapters) to start from an odd page number, and
+ that the input file is named foo.idx, the following command
+ line produces output in file footmp.ind:
+
+ makeindex -s book.ist -o footmp.ind -p odd foo
+
+ Here a non-default output file name is used to avoid
+ clobbering the output for the book itself (presumably
+ foo.dvi, which would have been the default name for the
+ index output file!).
+
+3 TROFF EXAMPLE
+ A sample control file for creating an index, which we will
+ assume resides in the file sample.ist:
+
+ keyword "IX:"
+ preamble
+ ".\\\" start of index output
+ \".\\\" enter two column mode
+ .2C
+ .SH
+ .ce
+ INDEX
+ .XS
+ INDEX
+ .XE
+ .R
+ .ps 9p
+ .vs 11p
+ .sp
+ .de I1
+ .ti 0.25i
+ ..
+ .de I2
+ .ti 0.5i
+ .."
+ postamble "\n.\\\" end of index output"
+ setpage_prefix "\n.nr % "
+ setpage_suffix ""
+ group_skip "\n.sp 1.0"
+ headings_flag 1
+ heading_prefix "\n.IS\n"
+ heading_suffix "\n.IE"
+ item_0 "\n.br\n"
+ item_1 "\n.I1\n"
+ item_2 "\n.I2\n"
+ item_01 "\n.I1\n"
+ item_x1 "\n.I1\n"
+ item_12 "\n.I2\n"
+ item_x2 "\n.I2\n"
+ delim_0 ", "
+ delim_1 ", "
+ delim_2 ", "
+ delim_r "-"
+ delim_t "."
+ encap_prefix "\\fB"
+ encap_infix ""
+ encap_suffix "\\fP"
+ indent_space ""
+ indent_length 0
+
+ The local macro package may require modification, as in this
+ example of an extension to the -ms macros (note that at some
+
+ sites, this macro should replace a pre-existing macro of the
+ same name):
+
+ .
+ .de IX
+ .ie '\\n(.z'' .tm IX: \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 {\\n(PN}
+ .el \\!.IX \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 {\\n(PN}
+ ..
+
+ (note that the string {\\n(PN} is separated from the rest of
+ the line by a tab. If your local macro package does not
+ contain this extension, just include those lines at the
+ beginning of your file. Here is a simple troff(1) input
+ file, which we will assume is named sample.txt:
+
+ This is a sample file to test the \fImakeindex\fP(1L)
+ program, and see
+ .IX {indexing!programs!C language}
+ .IX {makeindex@\fImakeindex\fP(1L)}
+ .bp
+ .rs
+ .IX {Knuth}
+ .IX {typesetting!computer-aided}
+ how well it functions in the \fItroff\fP(1) environment.
+
+ Note that index entries are indicated by the .IX macro,
+ which causes the following text to be written to stdout
+ along with the current page number.
+
+3 CREATING THE INDEX FILE IN THE BOURNE SHELL
+ To create an input file for makeindex, in the Bourne shell
+ environment, do the equivalent at your site of the command:
+
+ psroff -ms -Tpsc -t sample.txt > /dev/null 2> sample.tmp
+
+ Some sites will require ditroff instead of psroff. To
+ filter out any genuine error messages, invoke grep(1):
+
+ grep '^IX: ' sample.tmp > sample.idx
+
+3 CREATING THE INDEX FILE USING UCSF ENHANCED TROFF/TRANSCRIPT
+
+ With UCSF Enhanced troff/TRANSCRIPT, the -I option of
+ psroff(1L) can produce both formatter output and an index
+ file:
+
+ psroff -ms -I sample.inp -Tpsc sample.txt
+
+ If it is wished to suppress the formatter output:
+
+ psroff -ms -I sample.inp -Tpsc -t sample.txt > /dev/null
+
+3 COMPLETING THE INDEX
+ Any of the above procedures leaves the input for makeindex
+ in sample.inp. The next step is to invoke makeindex:
+
+ makeindex -s sample.ist sample.idx
+
+ This leaves troff(1)-ready output in the file sample.ind.
+
+2 ORDERING
+ By default, makeindex assumes word ordering; if the -l
+ option is in effect, letter ordering is used. In word ord-
+ ering, a blank precedes any letter in the alphabet, whereas
+ in letter ordering, it does not count at all. This is
+ illustrated by the following example:
+
+ word order letter order
+ sea lion seal
+ seal sea lion
+
+ Numbers are always sorted in numeric order. For instance,
+
+ 9 (nine), 123
+ 10 (ten), see Derek, Bo
+
+ Letters are first sorted without regard to case; when words
+ are identical, the uppercase version precedes its lowercase
+ counterpart.
+
+ A special symbol is defined here to be any character not
+ appearing in the union of digits and the English alphabetic
+ characters. Patterns starting with special symbols precede
+ numbers, which precede patterns starting with letters. As a
+ special case, a string starting with a digit but mixed with
+ non-digits is considered to be a pattern starting with a
+ special character.
+
+2 SPECIAL EFFECTS
+ Entries such as
+
+ \indexentry{alpha}{1}
+ \indexentry{alpha!beta}{3}
+ \indexentry{alpha!beta!gamma}{10}
+
+ in the input file will be converted to
+
+ \item alpha, 1
+ \subitem beta, 3
+ \subsubitem gamma, 10
+
+ in the output index file. Notice that the level symbol
+ (`!') is used above to delimit hierarchical levels.
+
+ It is possible to make an item appear in a designated form
+ by using the actual (`@') operator. For instance,
+
+ \indexentry{alpha@{\it alpha\/}}{1}
+
+ will become
+
+ \item {\it alpha\/}, 1
+
+ after processing. The pattern preceding `@' is used as sort
+ key, whereas the one following it is written to the output
+ file. Note that two appearances of the same key, one with
+ and one without the actual operator, are regarded as dis-
+ tinct entries.
+
+ The item, subitem, and subsubitem fields may have individual
+ sort keys:
+
+ \indexentry{aa@{\it aa\/}!bb@{\it bb\/}!cc@{\it cc\/}}{1}
+
+ This will be converted to
+
+ \item {\it aa}, 1
+ \subitem {\it bb}, 3
+ \subsubitem {\it cc}, 10
+
+ It is possible to encapsulate a page number with a desig-
+ nated command using the encap (`|') operator:
+
+ \indexentry{alpha|bold}{1}
+
+ will be converted to
+
+ \item alpha, \bold{1}
+
+ where, with a suitable definition for TeX, \bold{n} will
+ expand to {\bf n}. In this example, the three output attri-
+ butes associated with page encapsulation encap_prefix,
+ encap_infix, and encap_suffix, correspond to backslash, left
+ brace, and right brace, respectively. This mechanism allows
+ page numbers to be set in different fonts. For example, the
+ page where the definition of a keyword appears can be in one
+ font, the location of a primary example can be in another
+ font, and other appearances in yet a third font.
+
+ The encap operator can also be used to create cross refer-
+ ences in the index:
+
+ \indexentry{alpha|see{beta}}{1}
+
+ will become
+
+ \item alpha, \see{beta}{1}
+
+ in the output file, where
+
+ \see{beta}{1}
+
+ will expand to
+
+ {\it see\/} beta
+
+ Note that in a cross reference like this the page number
+ disappears.
+
+ A pair of encap concatenated with range_open (`|(') and
+ range_close (`|)') creates an explicit page range:
+
+ \indexentry{alpha|(}{1}
+ \indexentry{alpha|)}{5}
+
+ will become
+
+ \item alpha, 1-5
+
+ Intermediate pages indexed by the same key will be merged
+ into the range implicitly. This is especially useful when
+ an entire section about a particular subject is to be
+ indexed, in which case only the range opening and closing
+ operators need to be inserted at the beginning and end of
+ the section. Explicit page range formation can also include
+ an extra command to set the page range in a designated font:
+
+ \indexentry{alpha|(bold}{1}
+ \indexentry{alpha|)}{5}
+
+ will become
+
+ \item alpha, \bold{1--5}
+
+ Several potential problems are worth mentioning. First,
+ entries like
+
+ \indexentry{alpha|(}{1}
+ \indexentry{alpha|bold}{3}
+ \indexentry{alpha|)}{5}
+
+ will be interpreted as
+
+ \item alpha, \bold{3}, 1--5
+
+ but with a warning message in the transcript about
+ encountering an inconsistent page encapsulator. An explicit
+ range beginning in a Roman page number and ending in Arabic
+
+ is also considered an error. In this instance, (if possi-
+ ble) the range is broken into two subranges, one in Roman
+ and the other in Arabic. For instance,
+
+ \indexentry{alpha|(}{i}
+ \indexentry{alpha}{iv}
+ \indexentry{alpha}{3}
+ \indexentry{alpha|)}{7}
+
+ will be turned into
+
+ \item alpha, i--iv, 3--7
+
+ with a warning message in the transcript file complaining
+ about an illegal range formation.
+
+ Finally, every special symbol mentioned in this section may
+ be escaped by the quote operator (`"'). Thus
+
+ \indexentry{alpha"@beta}{1}
+
+ will actually become
+
+ \item alpha@beta, 1
+
+ as a result of executing makeindex. The quoting power of
+ quote is eliminated if it is immediately preceded by escape
+ (`\'). For example,
+
+ \indexentry{f\"ur}{1}
+
+ becomes
+
+ \item f\"ur, 1
+
+ which represents an umlaut-accented `u' to the TeX family of
+ processors.
+
+ From version 2.11 of makeindex, the quote operator may quote
+ any character in the range 1 ... 255. Character 0 is
+ excluded because it is used internally in the makeindex
+ source code as a string terminator. With this change, sort
+ keys can be created for all eight-bit characters except 0.
+ The sorting order is
+
+ punctuation characters (in ASCII order),
+ digits,
+ control characters (1 ... 31),
+ space (32),
+ letters (ignoring case),
+ characters 127 ... 255.
+
+ Here is an example showing the indexing of all printable
+ ASCII characters other than letters and digits, assuming the
+ default TeX format. For convenience, the page number refer-
+ ences are the corresponding ASCII ordinal values.
+
+ \indexentry{" @" (space)}{32}
+ \indexentry{"!@"! (exclamation point)}{33}
+ \indexentry{""@"" (quotation mark)}{34}
+ \indexentry{"#@"\# (sharp sign)}{35}
+ \indexentry{"$@"\$ (dollar sign)}{36}
+ \indexentry{"%@"\% (percent sign)}{37}
+ \indexentry{"&@"\& (ampersand)}{38}
+ \indexentry{"<@"$<$ (left angle bracket)}{60}
+ \indexentry{"=@"= (equals)}{61}
+ \indexentry{">@"$>$ (right angle bracket)}{62}
+ \indexentry{"?@"? (query)}{63}
+ \indexentry{"@@"@ (at sign)}{64}
+ \indexentry{"[@"[ (left square bracket)}{91}
+ \indexentry{"\@"\verb=\= (backslash)}{92}
+ \indexentry{"]@"] (right square bracket)}{93}
+ \indexentry{"^@"\verb=^= (caret)}{94}
+ \indexentry{"_@"\verb=_= (underscore)}{95}
+ \indexentry{"`@"\verb=~= (grave accent)}{96}
+ \indexentry{"{@"\"{ (left brace)}{123}
+ \indexentry{"|@"\verb="|= (vertical bar)}{124}
+ \indexentry{"}@"\"} (right brace)}{125}
+ \indexentry{"~@"\verb=~= (tilde)}{126}
+
+ Characters in the actual fields following the `@' character
+ which have special significance to TeX must be represented
+ as control sequences, or as math mode characters. Note par-
+ ticularly how the entries for the at sign, left and right
+ braces, and the vertical bar, are coded. The index file
+ output by makeindex for this example looks like this:
+
+ \begin{theindex}
+
+ \item ! (exclamation point), 33
+ \item " (quotation mark), 34
+ \item \# (sharp sign), 35
+ \item \$ (dollar sign), 36
+ \item \% (percent sign), 37
+ \item \& (ampersand), 38
+ \item $<$ (left angle bracket), 60
+ \item = (equals), 61
+ \item $>$ (right angle bracket), 62
+ \item ? (query), 63
+ \item @ (at sign), 64
+ \item [ (left square bracket), 91
+ \item \verb=\= (backslash), 92
+ \item ] (right square bracket), 93
+ \item \verb=^= (caret), 94
+
+ \item \verb=_= (underscore), 95
+ \item \verb=~= (grave accent), 96
+ \item \{ (left brace), 123
+ \item \verb=|= (vertical bar), 124
+ \item \} (right brace), 125
+ \item \verb=~= (tilde), 126
+
+ \indexspace
+
+ \item (space), 32
+
+ \end{theindex}
+
+2 FILES
+ /usr/local/bin/makeindex
+ executable file
+
+ /usr/local/lib/tex/macros/idxmac-amstex.tex
+ TeX macro file used by makeindex
+
+ /usr/local/lib/tex/macros/idxmac.tex
+ TeX macro file used by makeindex
+
+ /usr/local/lib/tex/macros/makeidx.doc
+ TeX macro file used by makeindex
+
+ /usr/local/lib/tex/macros/makeidx.sty
+ TeX macro file used by makeindex
+
+2 SEE ALSO
+ ditroff(1L), latex(1L), make.index (1L), qsort(3), tex(1L),
+ troff(1L)
+
+ UCSF Enhanced troff/TRANSCRIPT - An Overview, R. P. C. Rodg-
+ ers and Conrad Huang, LSMB Technical Report 90-2, UCSF
+ School of Pharmacy, San Francisco, 1990.
+
+ Index Preparation and Processing, Pehong Chen and Michael A.
+ Harrison, Software: Practice and Experience, 19(9), 897915,
+ September 1988.
+
+ Automating Index Preparation, Pehong Chen and Michael A.
+ Harrison. Technical Report 87/347, Computer Science Divi-
+ sion, University of California, Berkeley, 1987 (a LaTeX
+ document supplied with makeindex).
+
+ MakeIndex: An Index Processor for LaTeX, Leslie Lamport,
+ February 1987 (a LaTeX document supplied with makeindex).
+
+ Tools for Printing Indices, Jon L. Bentley and Brian W. Ker-
+ nighan, Electronic Publishing - Origination, Dissemination,
+ and Design, 1(1), 318, June 1988 (also available as:
+
+ Computing Science Technical Report No. 128, AT&T Bell
+ Laboratories, Murray Hill, NJ 07974, 1986).
+
+2 AUTHOR
+ Pehong Chen, Chen & Harrison International Systems, Inc.
+ Palo Alto, California, USA <chen@renoir.berkeley.edu>.
+ Manual page extensively revised and corrected, and troff(1)
+ examples created by Rick P. C. Rodgers, UCSF School of Phar-
+ macy <rodgers@cca.ucsf.edu>.
+
+2 ACKNOWLEDGMENTS
+ Leslie Lamport contributed significantly to the design.
+ Michael Harrison provided valuable comments and suggestions.
+ Nelson Beebe improved on the portable version, and maintains
+ the source distribution for the TeX Users Group. Andreas
+ Brosig contributed to the German word ordering. The modifi-
+ cation to the -ms macros was derived from a method proposed
+ by Ravi Sethi of AT&T Bell Laboratories. The LOG and CON-
+ TRIB files in the makeindex source distribution record other
+ contributions.
diff --git a/indexing/makeindex/doc/manpages.dvi b/indexing/makeindex/doc/manpages.dvi
new file mode 100644
index 0000000000..2d081feef7
--- /dev/null
+++ b/indexing/makeindex/doc/manpages.dvi
Binary files differ
diff --git a/indexing/makeindex/ist/din.ist b/indexing/makeindex/ist/din.ist
new file mode 100644
index 0000000000..8e4a23eea4
--- /dev/null
+++ b/indexing/makeindex/ist/din.ist
@@ -0,0 +1,45 @@
+%
+%
+% This file is part of
+% MakeIndex - A formatter and format independent index processor
+%
+% Author: Gabor Herr
+%
+%
+% $Log: din.ist,v $
+% Revision 1.1 1991/12/13 16:45:51 schrod
+% Initial revision
+%
+% Revision 1.1 1991/08/26 17:49:03 herr
+% Initial revision
+%
+%
+% german DIN 5007 sort rules for TeX and LaTeX
+
+% sort rules for TeX-style umlaut-macros
+sort_rule "\\\"A" "ae"
+sort_rule "\\\"a" "ae"
+sort_rule "\\\"O" "oe"
+sort_rule "\\\"o" "oe"
+sort_rule "\\\"U" "ue"
+sort_rule "\\\"u" "ue"
+sort_rule "\\ss({})?" "ss"
+
+% sort rules for german LaTeX-style umlaut-macros
+sort_rule "\"A" "ae"
+sort_rule "\"a" "ae"
+sort_rule "\"O" "oe"
+sort_rule "\"o" "oe"
+sort_rule "\"U" "ue"
+sort_rule "\"u" "ue"
+sort_rule "\"s" "ss"
+
+% define merge rules:
+include "german/umlaut.ist" % don't remove umlaut-macros
+include "tex.ist" % handle TeX and
+include "latex.ist" % LaTeX stuff
+
+% define sort rules
+include "german/digit.ist" % sort rules for digits
+include "german/special.ist" % sort rules for special characters
+include "icase.ist" % we sort case insensitive
diff --git a/indexing/makeindex/ist/icase.ist b/indexing/makeindex/ist/icase.ist
new file mode 100644
index 0000000000..9cec882fa8
--- /dev/null
+++ b/indexing/makeindex/ist/icase.ist
@@ -0,0 +1,44 @@
+%
+%
+% This file is part of
+% MakeIndex - A formatter and format independent index processor
+%
+% Author: Gabor Herr
+%
+%
+% $Log: icase.ist,v $
+% Revision 1.1 1991/12/13 16:39:39 schrod
+% Initial revision
+%
+% Revision 1.1 1991/08/26 17:46:55 herr
+% Initial revision
+%
+%
+% rules for case insensitive letter sort
+
+sort_rule "A" "a"
+sort_rule "B" "b"
+sort_rule "C" "c"
+sort_rule "D" "d"
+sort_rule "E" "e"
+sort_rule "F" "f"
+sort_rule "G" "g"
+sort_rule "H" "h"
+sort_rule "I" "i"
+sort_rule "J" "j"
+sort_rule "K" "k"
+sort_rule "L" "l"
+sort_rule "M" "m"
+sort_rule "N" "n"
+sort_rule "O" "o"
+sort_rule "P" "p"
+sort_rule "Q" "q"
+sort_rule "R" "r"
+sort_rule "S" "s"
+sort_rule "T" "t"
+sort_rule "U" "u"
+sort_rule "V" "v"
+sort_rule "W" "w"
+sort_rule "X" "x"
+sort_rule "Y" "y"
+sort_rule "Z" "z"
diff --git a/indexing/makeindex/ist/latex.ist b/indexing/makeindex/ist/latex.ist
new file mode 100644
index 0000000000..f29e66b23b
--- /dev/null
+++ b/indexing/makeindex/ist/latex.ist
@@ -0,0 +1,20 @@
+%
+%
+% This file is part of
+% MakeIndex - A formatter and format independent index processor
+%
+% Author: Gabor Herr
+%
+%
+% $Log: latex.ist,v $
+% Revision 1.1 1991/12/13 16:39:45 schrod
+% Initial revision
+%
+% Revision 1.1 1991/08/26 17:47:40 herr
+% Initial revision
+%
+%
+% merge rules to handle LaTeX macros
+
+% save the LaTeX logo
+merge_rule "\\LaTeX" "LaTeX"
diff --git a/indexing/makeindex/ist/math.ist b/indexing/makeindex/ist/math.ist
new file mode 100644
index 0000000000..e6b8866ec1
--- /dev/null
+++ b/indexing/makeindex/ist/math.ist
@@ -0,0 +1,97 @@
+%
+%
+% This file is part of
+% MakeIndex - A formatter and format independent index processor
+%
+% Author: Gabor Herr
+%
+%
+% $Log: math.ist,v $
+% Revision 1.1 1991/12/13 16:39:49 schrod
+% Initial revision
+%
+% Revision 1.1 1991/08/27 12:07:11 herr
+% Initial revision
+%
+%
+% merge rules for TeX math-mode macros
+
+% first remove enclosing '$'-characters
+*merge_rule "\$(.*)\$" "\1"
+
+% function-name macros will be sorted like the function they stay for
+merge_rule "\\log" "log"
+merge_rule "\\lg" "lg"
+merge_rule "\\ln" "ln"
+merge_rule "\\lim" "lim"
+merge_rule "\\limsup" "limsup"
+merge_rule "\\liminf" "liminf"
+merge_rule "\\sin" "sin"
+merge_rule "\\arcsin" "arcsin"
+merge_rule "\\sinh" "sinh"
+merge_rule "\\cos" "cos"
+merge_rule "\\arccos" "arccos"
+merge_rule "\\cosh" "cosh"
+merge_rule "\\tan" "tan"
+merge_rule "\\arctan" "arctan"
+merge_rule "\\tanh" "tanh"
+merge_rule "\\cot" "cot"
+merge_rule "\\coth" "coth"
+merge_rule "\\sec" "sec"
+merge_rule "\\csc" "csc"
+merge_rule "\\max" "max"
+merge_rule "\\min" "min"
+merge_rule "\\sup" "sup"
+merge_rule "\\inf" "inf"
+merge_rule "\\arg" "arg"
+merge_rule "\\ker" "ker"
+merge_rule "\\dim" "dim"
+merge_rule "\\hom" "hom"
+merge_rule "\\det" "det"
+merge_rule "\\exp" "exp"
+merge_rule "\\Pr" "Pr"
+merge_rule "\\gcd" "gcd"
+merge_rule "\\deg" "deg"
+
+% the pronounciation of Greek letters decides their sort order
+merge_rule "\\alpha" "alpha"
+merge_rule "\\beta" "beta"
+merge_rule "\\gamma" "gamma"
+merge_rule "\\delta" "delta"
+merge_rule "\\epsilon" "epsilon"
+merge_rule "\\zeta" "zeta"
+merge_rule "\\eta" "eta"
+merge_rule "\\theta" "theta"
+merge_rule "\\iota" "iota"
+merge_rule "\\kappa" "kappa"
+merge_rule "\\lambda" "lambda"
+merge_rule "\\mu" "mu"
+merge_rule "\\nu" "nu"
+merge_rule "\\xi" "xi"
+merge_rule "\\pi" "pi"
+merge_rule "\\rho" "rho"
+merge_rule "\\sigma" "sigma"
+merge_rule "\\tau" "tau"
+merge_rule "\\upsilon" "upsilon"
+merge_rule "\\phi" "phi"
+merge_rule "\\chi" "chi"
+merge_rule "\\psi" "psi"
+merge_rule "\\omega" "omega"
+merge_rule "\\varepsilon" "epsilon"
+merge_rule "\\vartheta" "theta"
+merge_rule "\\varpi" "pi"
+merge_rule "\\varrho" "rho"
+merge_rule "\\varsigma" "sigma"
+merge_rule "\\varphi" "phi"
+merge_rule "\\Gamma" "Gamma"
+merge_rule "\\Delta" "Delta"
+merge_rule "\\Theta" "Theta"
+merge_rule "\\Lambda" "Lambda"
+merge_rule "\\Xi" "Xi"
+merge_rule "\\Pi" "Pi"
+merge_rule "\\Sigma" "Sigma"
+merge_rule "\\Upsilon" "Upsilon"
+merge_rule "\\Phi" "Phi"
+merge_rule "\\Psi" "Psi"
+merge_rule "\\Omega" "Omega"
+merge_rule "\\aleph" "aleph"
diff --git a/indexing/makeindex/ist/mkind.ist b/indexing/makeindex/ist/mkind.ist
new file mode 100644
index 0000000000..c705d59808
--- /dev/null
+++ b/indexing/makeindex/ist/mkind.ist
@@ -0,0 +1,32 @@
+%
+%
+% This file is part of
+% MakeIndex - A formatter and format independent index processor
+%
+% Author: Gabor Herr
+%
+%
+% $Log: mkind.ist,v $
+% Revision 1.1 1991/12/13 16:39:53 schrod
+% Initial revision
+%
+% Revision 1.1 1991/08/26 17:50:38 herr
+% Initial revision
+%
+%
+% MakeIndex 2.x 'word ordering'
+
+% words beginning with a digit should sorted like special characters
+sort_rule "\b.*" "&"
+*sort_rule "[0-9].*" "\b&"
+
+% define merge rules
+include "tex.ist"
+include "latex.ist"
+
+% define sort rules
+include "english/digit.ist"
+include "english/special.ist"
+include "icase.ist"
+
+
diff --git a/indexing/makeindex/ist/puncts.ist b/indexing/makeindex/ist/puncts.ist
new file mode 100644
index 0000000000..db2aa70002
--- /dev/null
+++ b/indexing/makeindex/ist/puncts.ist
@@ -0,0 +1,57 @@
+%
+%
+% This file is part of
+% MakeIndex - A formatter and format independent index processor
+%
+% Author: Gabor Herr
+%
+%
+% $Log: puncts.ist,v $
+% Revision 1.2 1991/12/18 16:19:35 schrod
+% Corrected typo in space sort rule.
+%
+% Revision 1.1 1991/08/26 17:49:18 herr
+% Initial revision
+%
+%
+% sort rules for punctuations
+
+% special characters come first
+sort_rule "\." "\b\."
+sort_rule "\:" "\b\:"
+sort_rule "\," "\b\,"
+sort_rule "\;" "\b\;"
+sort_rule "\!" "\b\!"
+sort_rule "\?" "\b\?"
+sort_rule "\'" "\b\'"
+sort_rule "\`" "\b\`"
+sort_rule "\"" "\b\""
+sort_rule "\+" "\b\+"
+sort_rule "\-" "\b\-"
+sort_rule "\%" "\b\%"
+sort_rule "\&" "\b\&"
+sort_rule "\/" "\b\/"
+sort_rule "\(" "\b\("
+sort_rule "\)" "\b\)"
+sort_rule "\@" "\b\@"
+sort_rule "\ " "\b\ "
+
+% special characters build a sort group
+sort_group "\b." 110
+sort_group "\b:" 110
+sort_group "\b," 110
+sort_group "\b;" 110
+sort_group "\b!" 110
+sort_group "\b?" 110
+sort_group "\b'" 110
+sort_group "\b`" 110
+sort_group "\b\"" 110
+sort_group "\b+" 110
+sort_group "\b-" 110
+sort_group "\b%" 110
+sort_group "\b&" 110
+sort_group "\b/" 110
+sort_group "\b(" 110
+sort_group "\b)" 110
+sort_group "\b@" 110
+sort_group "\b " 110
diff --git a/indexing/makeindex/ist/tex.ist b/indexing/makeindex/ist/tex.ist
new file mode 100644
index 0000000000..fa69f24ab6
--- /dev/null
+++ b/indexing/makeindex/ist/tex.ist
@@ -0,0 +1,33 @@
+%
+%
+% This file is part of
+% MakeIndex - A formatter and format independent index processor
+%
+% Author: Gabor Herr
+%
+%
+% $Log: tex.ist,v $
+% Revision 1.1 1991/12/13 16:40:01 schrod
+% Initial revision
+%
+% Revision 1.1 1991/08/26 17:48:31 herr
+% Initial revision
+%
+%
+% merge rules to handle TeX macros
+
+% save printable macros
+merge_rule "\\TeX" "TeX"
+
+% handle mathematical formulas
+include "math.ist"
+
+% remove all other macros...
+merge_rule "\\[A-Za-z]+[\t ]?" ""
+
+% remove TeX grouping symbols
+merge_rule "{" ""
+merge_rule "}" ""
+
+% white space is treated as one token
+merge_rule "[ \t\n]+" " "
diff --git a/indexing/makeindex/lib/idxmac-amstex.tex b/indexing/makeindex/lib/idxmac-amstex.tex
new file mode 100644
index 0000000000..09d5c2e094
--- /dev/null
+++ b/indexing/makeindex/lib/idxmac-amstex.tex
@@ -0,0 +1,323 @@
+
+% /u/lex2/agw/ibc/ibc.sty, Thu Jul 9 10:02:23 1987, edit by agw
+
+\documentstyle{amsppt}
+
+\font\twelverm=cmr12
+\font\twelvebf=cmbx12
+
+\def\makeatletter{\catcode`\@=11\relax}
+\def\makeatother{\catcode`\@=12\relax}
+\makeatletter
+
+\def\B@{B } \def\D@{D }
+\def\askstyle{\immediate\write\sixt@@n{Do you want B(ook style)
+ or D(raft style)? (Type B or D, follow by <return>:) }\loop
+ \read\m@ne to\ans@
+ \xdef\next{\def\noexpand\Ans@{\ans@}}%
+ \uppercase\expandafter{\next}%
+ \ifx\Ans@\B@\badans@false\bookstyle\else
+ \ifx\Ans@\D@\badans@false\draftstyle\else
+ \badans@true\fi\fi
+ \ifbadans@\immediate\write\sixt@@n{Type B or D, follow by <return>: }%
+ \repeat}
+
+\def\bookstyle{\hsize=28truepc\vsize=46truepc}
+\def\draftstyle{\magnification 1200\parindent=10pt\baselineskip=15pt}
+\askstyle
+
+\newif\iftitle % for title pages of chapters
+\titlefalse % in case we start in the middle of a chapter
+
+\def\chapterbeg#1#2{
+ \global\titletrue
+ \vfill\eject
+ \null\vskip 8 truepc
+ \centerline{\twelverm Chapter #1}
+ \line{\hrulefill}
+ \centerline{\twelvebf #2}
+ \global\def\chaptertitle{#1. \lowercase{#2}}
+ \global\def\currentsectiontitle{\lowercase{#2}}
+ \message{#1. #2: }
+ \null\vskip 9 truepc
+}
+
+\def\unnumberedchapterbeg#1{
+ \global\titletrue
+ \null\vskip 8 truepc
+ \vskip 12 pt
+ \line{\hrulefill}
+ \centerline{\twelvebf #1}
+ \global\def\chaptertitle{\lowercase{#1}}
+ \global\def\currentsectiontitle{\lowercase{#1}}
+ \message{#1}
+ \null\vskip 9 truepc
+}
+
+\def\sectionbeg#1#2\medskip{
+ \vskip 2 truepc
+ \centerline{\bf #1. #2}
+ \nopagebreak\vskip 1truepc\nopagebreak
+ \global\def\currentsectiontitle{#1. \lowercase{#2}}
+ \message{#1. #2}
+}
+
+\newif\if@nobreak \@nobreakfalse
+\newif\ifignore
+\def\@makeother#1{\catcode`#112\relax}
+\def\newwrite{\alloc@7\write\chardef\sixt@@n}
+\newwrite\@unused
+\def\typeout#1{{\let\protect\string\immediate\write\@unused{#1}}}
+
+\newdimen\@savsk
+\newcount\@savsf
+
+\def\@bsphack{\@savsk\lastskip
+ \ifhmode\@savsf\spacefactor\fi}
+
+\def\@esphack{\relax\ifhmode\spacefactor\@savsf
+ {}\ifdim \@savsk >\z@ \global\ignoretrue \ignorespaces
+ \fi \fi}
+
+\def\@sanitize{\@makeother\ \@makeother\\\@makeother\$\@makeother\&%
+\@makeother\#\@makeother\^\@makeother\^^K\@makeother\_\@makeother\^^A%
+\@makeother\%\@makeother\~}
+
+\def\makeindex{\newwrite\@indexfile
+ \immediate\openout\@indexfile=\jobname.idx
+ \def\index{\@bsphack\begingroup\@sanitize\@wrindex\@indexfile}
+ \typeout{Writing index file \jobname.idx }}
+
+\def\thepage{\the\pageno}
+
+\def\@wrindex#1#2{\let\thepage\relax
+ \xdef\gtempa{\write#1{\string
+ \indexentry{#2}{\thepage}}}\endgroup\gtempa
+ \if@nobreak \ifvmode\@nobreak\fi\fi\@esphack}
+
+\def\index{\@bsphack\begingroup\@sanitize\@index}
+\def\@index#1{\endgroup\@esphack}
+
+\def\@idxitem{\par\hangindent 40pt}
+\def\subitem{\par\hangindent 40pt \hskip 20pt}
+\def\subsubitem{\par\hangindent 40pt \hskip 30pt}
+\def\indexspace{\par \vskip 10pt plus 5pt minus 3pt\relax}
+
+\def\beginindex{\begingroup\let\item\@idxitem\begindoublecolumns}
+\def\endindex{\enddoublecolumns\endgroup}
+
+\newbox\partialpage
+\newdimen\pagewidth \pagewidth=\hsize
+\newdimen\pageheight \pageheight=\vsize
+\newdimen\colwidth \colwidth=\pagewidth \divide\colwidth by 2
+\newdimen\twicecolheight \twicecolheight=\pageheight
+ \multiply\twicecolheight by 2
+ \advance\twicecolheight by 1truepc % well, a little more than twice
+\def\begindoublecolumns{\begingroup
+ \output={\global\setbox\partialpage=\vbox{\unvbox255\bigskip}}\eject
+ \raggedright
+ \output={\splitcolumns}
+ \hsize=\colwidth
+ \vsize=\twicecolheight
+ \let\item\@idxitem}
+\def\enddoublecolumns{\output={\balancecolumns}\eject
+ \endgroup \pagegoal=\vsize}
+\def\splitcolumns{\splittopskip=\topskip \splitmaxdepth=\maxdepth
+ \dimen@=\pageheight \advance\dimen@ by-\ht\partialpage
+ \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@
+ \unvbox255 \penalty\outputpenalty
+ \doublecolumnout}
+\def\doublecolumnout{\shipout\vbox{%
+ \hsize=\pagewidth
+ \iftitle\else\makeheadline\fi%
+ \unvbox\partialpage
+ \wd0=\colwidth \wd2=\colwidth
+ \hbox to\pagewidth{\box0\hfil\box2}
+ \iftitle\makefootline\global\titlefalse\fi
+ \hsize=\colwidth}
+ \advancepageno
+ \global\def\sectiontitle{\currentsectiontitle}
+ \ifnum\outputpenalty>-\@MM \else\dosupereject\fi}
+
+\def\balancecolumns{\setbox0=\vbox{\unvbox255} \dimen@=\ht0
+ \advance\dimen@ by\topskip \advance\dimen@ by-\baselineskip
+ \divide\dimen@ by2 \splittopskip=\topskip
+ {\vbadness=10000 \loop \global\setbox3=\copy0
+ \global\setbox1=\vsplit3 to\dimen@
+ \ifdim\ht3>\dimen@ \global\advance\dimen@ by1pt \repeat}
+ \setbox0=\vbox to\dimen@{\unvbox1}
+ \setbox2=\vbox to\dimen@{\unvbox3}
+ \doublecolumnout}
+
+\output={\ibcoutput}
+
+\def\leftheadline{\eightbf\folio\hfil\smc\chaptertitle}
+\def\rightheadline{\smc\sectiontitle\hfil\eightbf\folio}
+\headline={\ifodd\pageno\rightheadline\else\leftheadline\fi}
+
+\def\leftfootline{\eightbf\folio\hfil}
+\def\rightfootline{\eightbf\hfil\folio}
+\footline={\ifodd\pageno\rightfootline\else\leftfootline\fi}
+
+\def\ibcoutput{\shipout\vbox{%
+ \iftitle\else\makeheadline\fi
+ \pagebody
+ \iftitle\makefootline\global\titlefalse\fi}
+ \advancepageno
+ \global\def\sectiontitle{\currentsectiontitle}
+ \ifnum\outputpenalty>-\@MM \else\dosupereject\fi}
+
+\def\Y@{Y } \def\N@{N }
+\def\makingindex{\immediate\write\sixt@@n{Do you want to make an
+index? (Type Y or N, follow by <return>:) }\loop
+ \read\m@ne to\ans@
+ \xdef\next{\def\noexpand\Ans@{\ans@}}%
+ \uppercase\expandafter{\next}%
+ \ifx\Ans@\Y@\badans@false\makeindex\else
+ \ifx\Ans@\N@\badans@false\else
+ \badans@true\fi\fi
+ \ifbadans@\immediate\write\sixt@@n{Type Y or N, follow by <return>: }%
+ \repeat}
+\makingindex
+
+\makeatother
+
+% various abbreviations ... form Greg and Henryk
+
+\define\a{\operatorname{a}}
+\define\avg{\operatorname{avg}}
+\define\card{\operatorname{card}}
+\define\codim{\operatorname{codim}}
+\define\comp{\operatorname{comp}}
+\define\cost{\operatorname{cost}}
+\define\trace{\operatorname{trace}}
+\define\diam{\operatorname{diam}}
+\define\dist{\operatorname{dist}}
+\define\e{\varepsilon}
+\define\E{\operatorname{E}}
+\define\error{\operatorname{error}}
+\define\non{\operatorname{non}}
+\define\nor{\operatorname{nor}}
+\define\sspan{\operatorname{span}}
+\define\var{\operatorname{var}}
+\define\ER{\operatorname{ER}}
+\define\HH{\operatorname{H}}
+\define\ter{\operatorname{ter}}
+\define\pre{\operatorname{pre}}
+\define\prob{\operatorname{prob}}
+\define\prerel{\operatorname{pre-rel}}
+\define\rad{\operatorname{rad}}
+\define\ran{\operatorname{ran}}
+\define\wor{\operatorname{wor}}
+\define\rel{\operatorname{rel}}
+\define\REL{\operatorname{REL}}
+\define\per{\operatorname{per}}
+\define\sign{\operatorname{sign}}
+\define\infp{\operatornamewithlimits{inf\vphantom{p}}}
+\define\maxp{\operatornamewithlimits{max\vphantom{p}}}
+\define\Prob{\operatorname{Prob}}
+\def\reals{\operatorname{I\negthinspace\bold R}}
+\def\Re{\reals}
+\def\complexes{\operatorname{\bold C}}
+\define\ofi{\overline \phi }
+\define\ofig{\overline {\phi^*}}
+\define\ofis{\overline {\phi^s}}
+\define\on{\overline N }
+\define\norm{||Sf-\phi_n(N_n(f))||}
+\define\norg{||Sf-\phi_n^*\,(N_n(f))||}
+\define\nors{||Sf-\phi_n^s\,(N_n(f))||}
+\define\ong{\overline {N^*}}
+\define\ongg{\overline {N^{**}}}
+\define\nnn{N^{\non}}
+\define\kr{\operatorname{kr}}
+\define\mr{\operatorname{mr}}
+\define\gmr{\operatorname{gmr}}
+\def\bullet{\raise.5ex\hbox{\bf .}}
+\def\liminf{\mathop{\underline{\text{lim}}}}
+
+% various abbreviations ... from Art
+
+\def\epsilon{\varepsilon}
+\def\COMP{\operatorname{\hbox{\smc comp}}}
+\def\esssup{\operatornamewithlimits{ess\ sup}}
+\def\FEM{\operatorname{\hbox{\smc fem}}}
+\def\FEMQ{\operatorname{\hbox{\smc femq}}}
+\def\interior{\operatorname{int}}
+\def\lin{\operatorname{lin}}
+\def\range{\operatorname{ran}}
+\def\SPLINE{\operatorname{\hbox{\smc spline}}}
+\def\ter{\operatorname{ter}}
+\def\volume{\operatorname{vol}}
+\define\Lstd{\Lambda^{\operatorname{std}}}
+\define\MFEM{\operatorname{\hbox{\smc mfem}}}
+
+%\def\reals{\Bbb R}
+%\def\complexes{\Bbb C}
+\def\reals{\operatorname{I\negthinspace\bold R}}
+
+%---For remarks and the like
+\define\demonp#1{\demo\nofrills{#1\usualspace}}
+
+%---Start a new section
+\define\subsection#1{\par\vskip 1pc\noindent{\bf #1}
+ \nopagebreak\medskip\nopagebreak}
+
+%---Start and end the Notes & Remarks/Exercises (smaller type, single space)
+\define\startNRE{\bgroup\eightpoint\parindent=5pt}
+\define\endNRE{\egroup}
+\define\NR #1 {\noindent{\bf NR #1: }} % Notes and Remarks
+\define\Ex #1 {\noindent{\bf E #1: }} % Exercises
+
+% angle brackets for inner products
+\define\<{\langle}
+\define\>{\rangle}
+
+% Script letters and other useful control sequences
+\define\Sscr{{\Cal S}}
+\define\Tscr{{\Cal T}}
+\define\Sn{{\Cal S}_{n,k}}
+\define\Tn{{\Cal T}_n}
+\define\Snset{\{\Sn\}_{n=1}^\infty}
+\define\Tnset{\{\Tn\}_{n=1}^\infty}
+
+\define\phisn{\phi^{\operatorname{s}}_{n,k}}
+
+% Needed for References
+
+\define\BabAz{Babu\u ska and Aziz~[72]}
+\define\Bakhvalov{Bakhvalov~[77]}
+\define\Carasso{Carasso and Stone~[75]}
+\define\Ciarlet{Ciarlet~[78]}
+\define\CiarletRaviart{Ciarlet and Raviart~[72]}
+\define\Dunford{Dunford and Schwartz~[63]}
+\define\Dunn{Dunn~[67]}
+\define\Emel{Emelyanov and Ilin~[67]}
+\define\Fried{Fried~[73]}
+\define\Gehatia{Gehatia and Wiff~[70]}
+\define\Gelfand{Gel'fand and Vilenkin~[64]}
+\define\Hadamard{Hadamard~[52]}
+\define\Hammerlin{H\"ammerlin and Hoffman~[83]}
+\define\Kuo{Kuo~[75]}
+\define\Lattes{Lattes and Lions~[69]}
+\define\Morozov{Morozov~[85]}
+\define\OdRed{Oden and Reddy~[76]}
+\define\Pinkus{Pinkus~[85]}
+\define\Poggio{Poggio, Torre, and Koch~[85]}
+\define\Pour{Pour-El and Richards~[83]}
+\define\Rokhlin{Rokhlin~[86]}
+\define\Shilov{Shilov and Fan Dyk Tin~[67]}
+\define\Skorohod{Skorohod~[74]}
+\define\Tikhonov{Tikhonov~[63]}
+\define\TikhonovArsenin{Tikhonov and Arsenin~[77]}
+\define\GTOA{GOTA}
+\define\Twomey{Twomey~[77]}
+\define\GregVarying{Wasilkowski~[86]} %needed?
+\define\WWAvg{Wasilkowski and Wo\'zniakowski~[84]} %needed?
+\define\SecondOrder{Werschulz~[82]}
+\define\Fredholm{Werschulz~[85]}
+\define\Indef{Werschulz~[86a]}
+\define\IllPosed{Werschulz~[86b]}
+\define\Fembad{Werschulz~[87a]}
+\define\AprilAGW{Werschulz~[87b]}
+\define\Resid{Werschulz~[87c]}
+\define\Zen{Zeni\v sek~[72]}
diff --git a/indexing/makeindex/lib/idxmac.tex b/indexing/makeindex/lib/idxmac.tex
new file mode 100644
index 0000000000..3782293b69
--- /dev/null
+++ b/indexing/makeindex/lib/idxmac.tex
@@ -0,0 +1,200 @@
+%
+% idxmac.tex
+%
+% Most of the code in this file are excerpts from latex.tex and manmac.tex.
+% The actual style of the index environment \beginindex ... \endindex
+% at the end of this file is left empty.
+%
+%
+\def\makeatletter{\catcode`\@=11\relax}
+\def\makeatother{\catcode`\@=12\relax}
+\makeatletter
+\newif\if@filesw \@fileswtrue
+\newif\if@nobreak \@nobreakfalse
+\def\@makeother#1{\catcode`#112\relax}
+\def\newwrite{\alloc@7\write\chardef\sixt@@n}
+\newwrite\@unused
+\def\typeout#1{{\let\protect\string\immediate\write\@unused{#1}}}
+
+% ****************************************
+% * PAGE NUMBERING *
+% ****************************************
+%
+% Page numbers are produced by a page counter, used just like any other
+% counter. The only difference is that \c@page contains the number of
+% the next page to be output (the one currently being produced), rather
+% than one minus it. Thus, it is normally initialized to 1 rather than
+% 0. \c@page is defined to be \count0, rather than a count assigned by
+% \newcount.
+%
+% The user sets the pagenumber style with the \pagenumbering{FOO}
+% command, which sets the page counter to 1 and defines \thepage to be
+% \FOO. For example, \pagenumbering{roman} causes pages to be numbered
+% i, ii, etc.
+
+% Numbering commands for definitions of \theCOUNTER and \list arguments.
+% \fnsymbol produces the standard footnoting symbols: asterisk, dagger, etc.
+% They can be used only in math mode.
+
+\def\arabic#1{\@arabic{\@nameuse{c@#1}}}
+\def\roman#1{\@roman{\@nameuse{c@#1}}}
+\def\Roman#1{\@Roman{\@nameuse{c@#1}}}
+\def\alph#1{\@alph{\@nameuse{c@#1}}}
+\def\Alph#1{\@Alph{\@nameuse{c@#1}}}
+\def\fnsymbol#1{\@fnsymbol{\@nameuse{c@#1}}}
+
+\def\@arabic#1{\ifnum #1>0 \number #1\fi}
+\def\@roman#1{\romannumeral #1}
+\def\@Roman#1{\expandafter\uppercase\expandafter{\romannumeral #1}}
+\def\@alph#1{\ifcase#1\or a\or b\or c\or d\else\@ialph{#1}\fi}
+\def\@ialph#1{\ifcase#1\or \or \or \or \or e\or f\or g\or h\or i\or j\or
+ k\or l\or m\or n\or o\or p\or q\or r\or s\or t\or u\or v\or w\or x\or y\or
+ z\else\@ctrerr\fi}
+\def\@Alph#1{\ifcase#1\or A\or B\or C\or D\else\@Ialph{#1}\fi}
+\def\@Ialph#1{\ifcase#1\or \or \or \or \or E\or F\or G\or H\or I\or J\or
+ K\or L\or M\or N\or O\or P\or Q\or R\or S\or T\or U\or V\or W\or X\or Y\or
+ Z\else\@ctrerr\fi}
+\def\@fnsymbol#1{\ifcase#1\or *\or \dagger\or \ddagger\or
+ \mathchar "278\or \mathchar "27B\or \|\or **\or \dagger\dagger
+ \or \ddagger\ddagger \else\@ctrerr\fi\relax}
+
+\countdef\c@page=0 \c@page=1
+\def\cl@page{}
+\def\pagenumbering#1{\global\c@page \@ne \gdef\thepage{\csname @#1\endcsname
+ \c@page}}
+\pagenumbering{arabic}
+
+% \@bsphack ... \@esphack
+% used by macros such as \index and \begin{@float} ... \end{@float}
+% that want to be invisible -- i.e.,
+% not leave any extra space when used in the middle of text. Such
+% a macro should begin with \@bsphack and end with \@esphack
+% The macro in question should not create any text, nor change the
+% mode.
+%
+% \@bsphack ==
+% BEGIN
+% \dimen\@savsk := \lastskip
+% if hmode then \@savsf := \spacefactor fi
+% END
+%
+% \@esphack ==
+% BEGIN
+% if hmode
+% then \spacefactor := \@savsf
+% if \dimen\@savsk > 0pt then \ignorespaces
+% \global\ignoretrue fi
+% fi
+% END
+%
+
+\newdimen\@savsk
+\newcount\@savsf
+
+\def\@bsphack{\@savsk\lastskip
+ \ifhmode\@savsf\spacefactor\fi}
+
+\def\@esphack{\relax\ifhmode\spacefactor\@savsf
+ {}\ifdim \@savsk >\z@ \global\ignoretrue \ignorespaces
+ \fi \fi}
+
+% The command \@sanitize changes the catcode of all special characters
+% except for braces to 'other'. It can be used for commands like
+% \index that want to write their arguments verbatim. Needless to
+% say, this command should only be executed within a group, or chaos
+% will ensue.
+
+\def\@sanitize{\@makeother\ \@makeother\\\@makeother\$\@makeother\&%
+\@makeother\#\@makeother\^\@makeother\^^K\@makeother\_\@makeother\^^A%
+\@makeother\%\@makeother\~}
+
+% ****************************************
+% * INDEX COMMANDS *
+% ****************************************
+%
+% \makeindex ==
+% BEGIN
+% if \@filesw = T
+% then open file \jobname.IDX as \indexfile
+% \index == BEGIN \@bsphack
+% \begingroup
+% re-\catcode special characters to 'other'
+% \wrindex
+% fi
+% END
+%
+% \wrindex{ITEM} ==
+% BEGIN
+% write of {\indexentry{ITEM}{page number}}
+% \endgroup
+% \@esphack
+% END
+
+% INITIALIZATION:
+%
+% \index == BEGIN \@bsphack
+% \begingroup
+% re-\catcode special characters (in case '%' there)
+% \index
+% END
+%
+% \index{ITEM} == BEGIN \endgroup \@esphack END
+%
+\def\makeindex{\if@filesw \newwrite\@indexfile
+ \immediate\openout\@indexfile=\jobname.idx
+ \def\index{\@bsphack\begingroup\@sanitize\@wrindex\@indexfile}
+ \typeout{Writing index file \jobname.idx }\fi}
+
+\def\@wrindex#1#2{\let\thepage\relax
+ \xdef\gtempa{\write#1{\string
+ \indexentry{#2}{\thepage}}}\endgroup\gtempa
+ \if@nobreak \ifvmode\@nobreak\fi\fi\@esphack}
+
+\def\index{\@bsphack\begingroup\@sanitize\@index}
+\def\@index#1{\endgroup\@esphack}
+
+\def\makeglossary{\if@@filesw \newwrite\@glossaryfile
+ \immediate\openout\@glossaryfile=\jobname.glo
+ \def\glossary{\@bsphack\begingroup\@sanitize\@wrindex\@glossaryfile}\typeout
+ {Writing glossary file \jobname.glo }\fi}
+
+\def\glossary{\@bsphack\begingroup\@sanitize\index}
+
+\newdimen\pagewidth
+\pagewidth=\hsize
+\newbox\partialpage
+\def\begindoublecolumns{\begingroup
+ \output={\global\setbox\partialpage=\vbox{\unvbox255\bigskip}}\eject
+ \output={\doublecolumnout} \hsize=14pc \vsize=89pc
+ \let\item\@idxitem}
+\def\enddoublecolumns{\output={\balancecolumns}\eject
+ \endgroup \pagegoal=\vsize}
+\def\doublecolumnout{\splittopskip=\topskip \splitmaxdepth=\maxdepth
+ \dimen@=44pc \advance\dimen@ by-\ht\partialpage
+ \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@
+ \onepageout\pagesofar
+ \unvbox255 \penalty\outputpenalty}
+\def\pagesofar{\unvbox\partialpage
+ \wd0=\hsize \wd2=\hsize \hbox to\pagewidth{\box0\hfil\box2}}
+\def\balancecolumns{\setbox0=\vbox{\unvbox255} \dimen@=\ht0
+ \advance\dimen@ by\topskip \advance\dimen@ by-\baselineskip
+ \divide\dimen@ by2 \splittopskip=\topskip
+ {\vbadness=10000 \loop \global\setbox3=\copy0
+ \global\setbox1=\vsplit3 to\dimen@
+ \ifdim\ht3>\dimen@ \global\advance\dimen@ by1pt \repeat}
+ \setbox0=\vbox to\dimen@{\unvbox1}
+ \setbox2=\vbox to\dimen@{\unvbox3}
+ \pagesofar}
+
+\def\@idxitem{\par\hangindent 40pt}
+\def\subitem{\par\hangindent 40pt \hskip 20pt}
+\def\subsubitem{\par\hangindent 40pt \hskip 30pt}
+\def\indexspace{\par \vskip 10pt plus 5pt minus 3pt\relax}
+
+\def\beginindex{\begingroup\let\item\@idxitem
+% Output opening routines go here
+}
+\def\endindex{
+% Output closing routines go here.
+\endgroup}
+\makeatother
diff --git a/indexing/makeindex/lib/makeidx.doc b/indexing/makeindex/lib/makeidx.doc
new file mode 100644
index 0000000000..6c501bd890
--- /dev/null
+++ b/indexing/makeindex/lib/makeidx.doc
@@ -0,0 +1,9 @@
+% MAKEIDX DOCUMENT-STYLE OPTION FOR ARTICLE STYLE
+% RELEASED 20 January 1987 -- for LaTeX version 2.09
+% Copyright (C) 1987 by Leslie Lamport, all rights reserved
+
+% Defines the \see and \printindex commands.
+
+\def\see#1#2{{\em see\/} #1}
+
+\def\printindex{\@input{\jobname.ind}}
diff --git a/indexing/makeindex/lib/makeidx.sty b/indexing/makeindex/lib/makeidx.sty
new file mode 100644
index 0000000000..ab41d11a23
--- /dev/null
+++ b/indexing/makeindex/lib/makeidx.sty
@@ -0,0 +1,5 @@
+% makeidx.sty 20-Jan-87
+
+\def\see#1#2{{\em see\/} #1}
+\def\printindex{\@input{\jobname.ind}}
+
diff --git a/indexing/makeindex/lib/showidx.sty b/indexing/makeindex/lib/showidx.sty
new file mode 100644
index 0000000000..4a6a57ff53
--- /dev/null
+++ b/indexing/makeindex/lib/showidx.sty
@@ -0,0 +1,41 @@
+% showidx.sty 29-Oct-85
+
+\newinsert\@margin
+\newinsert\indexbox
+\dimen\indexbox=\maxdimen
+\def\@showidx#1{\insert\indexbox{\small
+ \hsize\marginparwidth
+ \hangindent\marginparsep \parindent\z@
+ \everypar{}\let\par\@@par \parfillskip\@flushglue
+ \lineskip\normallineskip
+ \baselineskip .8\normalbaselineskip\sloppy
+ \raggedright \leavevmode
+ \vrule height .7\normalbaselineskip width \z@ #1\vrule
+ height \z@ depth .3\normalbaselineskip width \z@}}
+
+\def\@leftidx{\hskip-\marginparsep \hskip-\marginparwidth}
+\def\@rightidx{\hskip\columnwidth \hskip\marginparsep}
+\def\@mkidx{\vbox to 0pt{\hbox{\if@twocolumn
+ \if@firstcolumn \@leftidx \else \@rightidx \fi
+ \else \if@twoside \ifodd\c@page \@rightidx
+ \else \@leftidx \fi
+ \else \@rightidx \fi
+ \fi
+ \box\indexbox}\vss}}
+\def\raggedbottom{\def\@textbottom{\vskip
+ \z@ plus.0001fil}\let\@texttop\@mkidx}
+\def\flushbottom{\let\@textbottom\relax \let\@texttop\@mkidx}
+
+\def\@wrindex#1#2{\let\thepage\relax
+ \xdef\@gtempa{\write#1{\string
+ \indexentry{#2}{\thepage}}}\endgroup\@gtempa
+ \@showidx{#2}\if@nobreak \ifvmode\nobreak\fi\fi\@esphack}
+\def\@index#1{\@showidx{#1}\endgroup\@esphack}
+
+\def\index{\@bsphack\begingroup\@sanitize\catcode"20=10\relax\@index}
+\def\makeindex{\if@filesw \newwrite\@indexfile
+ \immediate\openout\@indexfile=\jobname.idx
+ \def\index{\@bsphack\begingroup\@sanitize
+ \catcode"20=10 \@wrindex\@indexfile}\typeout
+ {Writing index file \jobname.idx }\fi}
+\flushbottom
diff --git a/indexing/makeindex/paper/Makefile b/indexing/makeindex/paper/Makefile
new file mode 100644
index 0000000000..84352c859b
--- /dev/null
+++ b/indexing/makeindex/paper/Makefile
@@ -0,0 +1,17 @@
+LATEX = latex
+RM = /bin/rm -f
+SHELL = /bin/sh
+
+all: ind.dvi
+
+ind.dvi: ind.tex fig1.tex
+ $(LATEX) ind
+
+clean mostlyclean:
+ $(RM) core
+ $(RM) *~
+ $(RM) \#*
+ $(RM) ind.dvi
+ $(RM) ind.log
+
+clobber distclean realclean reallyclean: clean
diff --git a/indexing/makeindex/paper/README b/indexing/makeindex/paper/README
new file mode 100644
index 0000000000..af469f7c29
--- /dev/null
+++ b/indexing/makeindex/paper/README
@@ -0,0 +1,26 @@
+PreScript:
+I have replaced the PostScript figure, fig1.ps, with a LaTeX picture
+mode equivalent that will permit this document to be formatted and
+printed at any TeX installation.
+ Nelson H.F. Beebe
+ Beebe@math.utah.edu
+ [08-Jul-1991]
+
+This directory contains a paper which describes design tradeoffs of
+MakeIndex. It is written in LaTeX and contains a figure in PostScript
+specifed in the psfig format. Run LaTeX on the file ind.tex to obtain
+a DVI file. All style files involved are included in this directory.
+To print it, you need to have a PostScript-based printer and the
+DVI-to-PostScript driver must understand the psfig format. A
+PostScipt version of this paper, ind.ps, can be printed directly to a
+PostScript printer.
+
+This paper appears in Software: Practice and Experience, Vol 19, No.
+9, Sep. 1988, pp. 897-915. A more complete version is available as
+Computer Science Tech. Report 87/347, University of California,
+Berkeley, March 1987.
+
+
+ Pehong Chen
+ phc@renoir.berkeley.edu
+ 10/1/1988
diff --git a/indexing/makeindex/paper/fig1.ps b/indexing/makeindex/paper/fig1.ps
new file mode 100644
index 0000000000..9bef97a1e8
--- /dev/null
+++ b/indexing/makeindex/paper/fig1.ps
@@ -0,0 +1,252 @@
+%!
+% converted gremlin output
+%%BoundingBox: 140 -35 440 250
+
+0.5 0.5 scale
+300 -50 translate
+
+/Helvetica findfont 14 scalefont setfont
+
+280 46 moveto
+0 1 rmoveto
+(III) show
+
+0.3 setlinewidth
+newpath 360 280 moveto
+ 356.49 274.49 lineto
+ 360 276.49 lineto
+ 363.51 274.49 lineto
+ 360 280 lineto
+stroke
+
+newpath 360 280 moveto
+ 360 100 lineto
+stroke
+
+newpath 312 64 moveto
+ 306.49 67.51 lineto
+ 308.49 64 lineto
+ 306.49 60.49 lineto
+ 312 64 lineto
+stroke
+
+newpath 268 64 moveto
+ 308 64 lineto
+stroke
+
+340 48 moveto
+0 1 rmoveto
+(Index) show
+
+320 72 moveto
+0 1 rmoveto
+(Alphabetized) show
+
+newpath 312 100 moveto
+ 312 28 lineto
+ 404 28 lineto
+ 404 100 lineto
+ 312 100 lineto
+stroke
+
+436 332 moveto
+0 1 rmoveto
+(IV) show
+
+376 184 moveto
+0 1 rmoveto
+(IV) show
+
+284 124 moveto
+0 1 rmoveto
+(III) show
+
+184 128 moveto
+0 1 rmoveto
+(III) show
+
+300 256 moveto
+0 1 rmoveto
+(II) show
+
+296 396 moveto
+0 1 rmoveto
+(II) show
+
+136 396 moveto
+0 1 rmoveto
+(I) show
+
+newpath 480 328 moveto
+ 474.49 331.51 lineto
+ 476.49 328 lineto
+ 474.49 324.49 lineto
+ 480 328 lineto
+stroke
+
+newpath 404 328 moveto
+ 476 328 lineto
+stroke
+
+504 316 moveto
+0 1 rmoveto
+(Index) show
+
+504 336 moveto
+0 1 rmoveto
+(Final) show
+
+newpath 480 360 moveto
+ 480 296 lineto
+ 556 296 lineto
+ 556 360 lineto
+ 480 360 lineto
+stroke
+
+192 52 moveto
+0 1 rmoveto
+(Processor) show
+
+204 76 moveto
+0 1 rmoveto
+(Index) show
+
+newpath 160 160 moveto
+ 188 100 lineto
+stroke
+
+newpath 192 96 moveto
+ 190.59 102.38 lineto
+ 189.52 98.48 lineto
+ 185.62 97.41 lineto
+ 192 96 lineto
+stroke
+
+newpath 288 160 moveto
+ 260 100 lineto
+stroke
+
+newpath 256 96 moveto
+ 261.98 98.64 lineto
+ 257.95 98.92 lineto
+ 256.14 102.53 lineto
+ 256 96 lineto
+stroke
+
+newpath 336 288 moveto
+ 292 228 lineto
+stroke
+
+newpath 288 224 moveto
+ 293.98 226.64 lineto
+ 289.95 226.92 lineto
+ 288.14 230.53 lineto
+ 288 224 lineto
+stroke
+
+newpath 224 64 45.2548 0 360 arc stroke
+
+144 168 moveto
+0 1 rmoveto
+(Style) show
+
+140 188 moveto
+0 1 rmoveto
+(Output) show
+
+144 204 moveto
+0 1 rmoveto
+(Input) show
+
+276 172 moveto
+0 1 rmoveto
+(File) show
+
+272 188 moveto
+0 1 rmoveto
+(Index) show
+
+276 204 moveto
+0 1 rmoveto
+(Raw) show
+
+newpath 256 224 moveto
+ 256 160 lineto
+ 320 160 lineto
+ 320 224 lineto
+ 256 224 lineto
+stroke
+
+newpath 128 224 moveto
+ 128 160 lineto
+ 192 160 lineto
+ 192 224 lineto
+ 128 224 lineto
+stroke
+
+332 324 moveto
+0 1 rmoveto
+(Formatter) show
+
+newpath 264 420 moveto
+ 320 360 lineto
+stroke
+
+newpath 324 356 moveto
+ 322.59 362.38 lineto
+ 321.52 358.48 lineto
+ 317.62 357.41 lineto
+ 324 356 lineto
+stroke
+
+newpath 260 424 moveto
+ 261.41 417.62 lineto
+ 262.48 421.52 lineto
+ 266.38 422.59 lineto
+ 260 424 lineto
+stroke
+
+newpath 360 328 45.2548 0 360 arc stroke
+
+204 440 moveto
+0 1 rmoveto
+(Source) show
+
+192 468 moveto
+0 1 rmoveto
+(Document) show
+
+newpath 180 420 moveto
+ 124 364 lineto
+stroke
+
+newpath 120 360 moveto
+ 126.38 361.41 lineto
+ 122.48 362.48 lineto
+ 121.41 366.38 lineto
+ 120 360 lineto
+stroke
+
+newpath 184 424 moveto
+ 177.55 422.99 lineto
+ 181.37 421.68 lineto
+ 182.19 417.72 lineto
+ 184 424 lineto
+stroke
+
+newpath 185.33 424 moveto
+ 185.33 488 lineto
+ 260.01 488 lineto
+ 260.01 424 lineto
+ 185.33 424 lineto
+stroke
+
+68 308 moveto
+0 1 rmoveto
+(Editor) show
+
+52 332 moveto
+0 1 rmoveto
+(Interactive) show
+
+newpath 88 328 45.2548 0 360 arc stroke
diff --git a/indexing/makeindex/paper/fig1.tex b/indexing/makeindex/paper/fig1.tex
new file mode 100644
index 0000000000..7a0d3ef03e
--- /dev/null
+++ b/indexing/makeindex/paper/fig1.tex
@@ -0,0 +1,65 @@
+\setlength{\unitlength}{0.6pt}
+\newcommand{\ctext}[1]{\makebox(0,0){#1}}
+
+ \begin{picture}(600,500)(0,0)
+ \small
+ \put(90,330){\circle{90}}
+ \put(90,335){\ctext{Interactive}}
+ \put(90,315){\ctext{Editor}}
+
+ \put(120,360){\vector(1,1){65}}
+ \put(185,425){\vector(-1,-1){65}}
+ \put(140,400){\ctext{I}}
+
+ \put(185,425){\framebox(75,75){}}
+ \put(225,475){\ctext{Document}}
+ \put(225,445){\ctext{Source}}
+
+ \put(260,425){\vector(1,-1){70}}
+ \put(330,355){\vector(-1,1){70}}
+ \put(300,400){\ctext{II}}
+
+ \put(360,330){\circle{90}}
+ \put(360,330){\ctext{Formatter}}
+
+ \put(400,330){\vector(1,0){80}}
+ \put(440,340){\ctext{IV}}
+
+ \put(335,295){\vector(-1,-1){65}}
+ \put(310,260){\ctext{II}}
+
+ \put(480,295){\framebox(75,65){}}
+ \put(520,346){\ctext{Final}}
+ \put(520,321){\ctext{Index}}
+
+ \put(130,160){\framebox(65,65){}}
+ \put(160,205){\ctext{Input}}
+ \put(160,190){\ctext{Output}}
+ \put(160,175){\ctext{Style}}
+
+ \put(160,160){\vector(1,-2){35}}
+ \put(190,135){\ctext{III}}
+
+ \put(255,160){\framebox(65,65){}}
+ \put(290,205){\ctext{Raw}}
+ \put(290,190){\ctext{Index}}
+ \put(290,175){\ctext{File}}
+
+ \put(290,160){\vector(-1,-2){35}}
+ \put(290,130){\ctext{III}}
+
+ \put(225,65){\circle{90}}
+ \put(225,80){\ctext{Index}}
+ \put(225,55){\ctext{Processor}}
+
+ \put(260,65){\vector(1,0){40}}
+ \put(285,55){\ctext{III}}
+
+ \put(300,30){\framebox(110,70){}}
+ \put(355,75){\ctext{Alphabetized}}
+ \put(355,55){\ctext{Index}}
+
+ \put(360,100){\vector(0,1){195}}
+ \put(375,190){\ctext{IV}}
+
+ \end{picture}
diff --git a/indexing/makeindex/paper/ind.bbl b/indexing/makeindex/paper/ind.bbl
new file mode 100644
index 0000000000..c18c03c487
--- /dev/null
+++ b/indexing/makeindex/paper/ind.bbl
@@ -0,0 +1,147 @@
+\begin{thebibliography}{10}
+
+\bibitem{seybold}
+\newblock {\em The Seybold Report on Publishing Systems}.
+\newblock Seybold Publications Inc., Media, Pennsylvania.
+\newblock Published 22 times a year.
+
+\bibitem{knuth:pgm}
+Donald~E. Knuth.
+\newblock {\em {\TeX}: The Program}, volume~B of {\em Computers \&
+ Typesetting}.
+\newblock Addison-Wesley Publishing Company, Reading, Massachusetts, 1986.
+
+\bibitem{knuth:lp}
+Donald~E. Knuth.
+\newblock Literate programming.
+\newblock {\em The Computer Journal}, 27(2):97--111, May 1984.
+
+\bibitem{chicago:style}
+\newblock {\em The Chicago Manual of Style}, 13th edition, 1982.
+\newblock University of Chicago Press, Chicago, Illinois.
+
+\bibitem{phc:int}
+Pehong Chen and Michael~A. Harrison.
+\newblock Integrating noninteractive document processors into an interactive
+ environment.
+\newblock Technical Report 87/349, Computer Science Division, University of
+ California, Berkeley, California, April 1987.
+\newblock Submitted for publication.
+
+\bibitem{brandin:war}
+David~H. Brandin and Michael~A. Harrison.
+\newblock {\em The Technology War}.
+\newblock John Wiley and Sons, Inc., New York, New York, 1987.
+
+\bibitem{traub:ibc}
+J.~F. Traub, G.~W. Wasilkowski, and H.~Wo\'zniakowski.
+\newblock {\em Information-Based Complexity}.
+\newblock Academic Press, New York, New York, 1988.
+
+\bibitem{hutchins:dm}
+Edwin~L. Hutchins, James~D. Hollan, and Donald~A. Norman.
+\newblock Direct manipulation interfaces.
+\newblock In D.~A. Norman and S.~W. Draper, editors, {\em User-Centered System
+ Design}, pages 87--124 (Chapter 5), Hillsdale, New Jersey, 1986. Lawrence
+ Erlbaum Associates, Inc.
+
+\bibitem{shneiderman:dm}
+Ben Shneiderman.
+\newblock Direct manipulation: A step beyond programming languages.
+\newblock {\em IEEE Computer}, 16(8):57--69, August 1983.
+
+\bibitem{lamport:latex}
+Leslie Lamport.
+\newblock {\em {\Lit}: A Document Preparation System. User's Guide and
+ Reference Manual}.
+\newblock Addison-Wesley Publishing Company, Reading, Massachusetts, 1986.
+
+\bibitem{knuth:tex}
+Donald~E. Knuth.
+\newblock {\em The {\TeX} Book}.
+\newblock Addison-Wesley Publishing Company, Reading, Massachusetts, 1984.
+\newblock Reprinted as Vol. A of {\it Computers \& Typesetting\/}, 1986.
+
+\bibitem{reid:phd}
+Brian~K. Reid.
+\newblock {\em Scribe: A document specification language and its compiler}.
+\newblock PhD thesis, Computer Science Department, Carnegie-Mellon University,
+ Pittsburgh, Pennsylvania, October 1980.
+\newblock Available as technical report CMU-CS-81-100.
+
+\bibitem{ossanna:nroff}
+Joseph~F. Ossanna.
+\newblock Nroff/troff user's manual.
+\newblock Computer Science Technical Report No. 54, AT\&T Bell Laboratories,
+ Murray Hill, New Jersey, October 1976.
+\newblock Also available in UNIX User's Manual.
+
+\bibitem{xerox:star}
+\newblock {\em 8010 STAR Information System Reference Library, Release 4.2}.
+\newblock Xerox Office Systems, El Segundo, California. 1984.
+
+\bibitem{frame:1.0}
+\newblock {\em Frame Maker Reference Manual, Version 1.0}.
+\newblock Frame Technology Corporation, San Jose, California. February 1987.
+
+\bibitem{ms:word}
+\newblock {\em Reference to Microsoft Word, Word Processing Program for the
+ Apple Macintosh, Version 3.0}.
+\newblock Microsoft Corporation, Seattle, Washington. January 1987.
+
+\bibitem{ventura:1.1}
+\newblock {\em Ventura Publisher --- Professional Publishing Program, Reference
+ Guide, version 1.1}.
+\newblock Ventura Software, Inc., Salinas, California. July 1987.
+
+\bibitem{phc:aip}
+Pehong Chen and Michael~A. Harrison.
+\newblock Automating index preparation.
+\newblock Technical Report 87/347, Computer Science Division, University of
+ California, Berkeley, California, March 1987.
+
+\bibitem{stallman:gnu}
+Richard~M. Stallman.
+\newblock {\em {GNU} Emacs Manual, Fifth Edition, Version 18}.
+\newblock Free Software Foundation, Cambridge, Massachusetts, December 1986.
+
+\bibitem{teitelman:cedar}
+Warren Teitelman.
+\newblock A tour through {Cedar}.
+\newblock {\em IEEE Software}, 1(2):44--73, April 1984.
+
+\bibitem{beach:index}
+Richard~J. Beach.
+\newblock Personal communication.
+
+\bibitem{yank:eb}
+Nicole Yankelovich, Morman Meyrowitz, and Andries van Dam.
+\newblock Reading and writing the electronic book.
+\newblock {\em IEEE Computer}, 18(10):15--30, October 1985.
+
+\bibitem{bentley:index}
+Jon~J. Bentley and Brian~W. Kernighan.
+\newblock Tools for printing indexes.
+\newblock {\em Electronic Publishing}, 1(1), June 1988.
+\newblock Also available as Computer Science Technical Report No. 128, AT\&T
+ Bell Laboratories, Murray Hill, October 1986.
+
+\bibitem{mcmahon:sed}
+Lee~E. McMahon.
+\newblock Sed -- a non-interactive text editor.
+\newblock Computer Science Technical Report No. 77, AT\&T Bell Laboratories,
+ Murray Hill, August 1978.
+\newblock Also available in UNIX User's Manual.
+
+\bibitem{aho:awkb}
+Alfred~V. Aho, Brian~W. Kernighan, and Peter~J. Weinberger.
+\newblock {\em The {AWK} Programming Language}.
+\newblock Addison-Wesley Publishing Company, Reading, Massachusetts, 1988.
+
+\bibitem{aurbach:idxtex}
+Richard~L Aurbach.
+\newblock Automated index generation for {\LaTeX}.
+\newblock {\em TUGBoat}, 8(2):201--209, July 1987.
+
+\end{thebibliography}
+
diff --git a/indexing/makeindex/paper/ind.pdf b/indexing/makeindex/paper/ind.pdf
new file mode 100644
index 0000000000..a7922db8dc
--- /dev/null
+++ b/indexing/makeindex/paper/ind.pdf
Binary files differ
diff --git a/indexing/makeindex/paper/ind.tex b/indexing/makeindex/paper/ind.tex
new file mode 100644
index 0000000000..92e902ee14
--- /dev/null
+++ b/indexing/makeindex/paper/ind.tex
@@ -0,0 +1,1245 @@
+% Document Type: LaTeX
+% Master File: ind.tex
+
+\input{indplus.tex}
+
+\title{Index Preparation and Processing\thanks{Sponsored
+in part by the National Science Foundation under Grant MCS-8311787,
+and by the Defense Advanced Research Projects Agency (DoD),
+ARPA Order No. 4871, monitored by Space and Naval Warfare Systems Command,
+under Contract No. N00039-84-C-0089.}
+}
+
+\author{{\sl Pehong Chen}\thanks{Additional support has been provided
+by an IBM Graduate Fellowship.}\\
+ {\sl Michael A. Harrison}\\\\
+ Computer Science Division \\
+ University of California \\
+ Berkeley, CA 94720
+}
+
+\def\today{}
+\maketitle
+
+\begin{abstract}
+\singlespace
+Index preparation is a tedious and time-consuming task.
+This paper indicates how the indexing process can be automated
+in a way that is largely independent of a specific typesetting system
+and independent of the format being used.
+Fundamental issues related to this process are identified and analyzed.
+Specifically, we develop a framework for placing index
+commands in the document. In addition, the design of
+a general purpose index processor that
+transforms a raw index into an alphabetized version is described.
+The resulting system has proved very useful and effective in producing
+indexes for several books, technical reports, and manuals.
+A comparison of our system with indexing facilities
+available from a variety of other document preparation environments is given.
+
+{\it Keywords\/}: index placement, index processing, source-language model,
+direct manipulation.
+\end{abstract}
+
+\section{Introduction}
+Although there has been a great deal of activity in
+electronic publishing~[1],
+there are still aspects of document composition that have not been
+fully automated.
+One of the most time-consuming concerns is the preparation of an index.
+In ordinary books, an index allows a reader to
+access essential information easily.
+A poor index with many omissions or poorly chosen concepts
+detracts from other aspects of the book.
+For highly complex technical material that may include computer programs,
+different kinds of indices may
+reference even the identifiers of a programming language. A good example
+of an elaborate indexing scheme can be found in Knuth's
+{\it {\TeX}: The Program\/}~[2] and his WEB system~[3] in general.
+For computer programs like these,
+completeness is essential and the accuracy of
+traditional hand methods will not suffice for software engineering
+applications.
+
+Standard authors' guides, such as Reference~[4],
+recommend that index terms be marked on page proofs or on a separate set of
+galley proofs.
+The traditional method is to use $3 \times 5$ cards, appropriately called
+index cards.
+A page number is added to a card when a reference is encountered.
+Sorting is done by hand and the process is tedious and error-prone.
+Computers offer an opportunity to significantly reduce the amount of labor
+invested in this process while noticeably improving the quality of the
+resulting index.
+
+This paper indicates how the indexing process can be automated
+in a way that is largely independent of a specific typesetting system
+and independent of the format being used.
+Specifically, we develop a framework for placing index
+commands in the document. In addition, the design of
+a general purpose index processor that
+transforms a raw index into an alphabetized version is described.
+These concepts have been implemented as part of an extensive authoring
+environment~[5]. This environment includes a suite of Lisp programs
+for the index placing facility and a C program for the
+index processor. The resulting system has been successfully
+used in producing indexes for some books~[6,7]
+and a number of technical reports and manuals.
+
+Indexing issues under both {\it source-language\/} and
+{\it direct-manipulation\/}~[8,9] paradigms are considered.
+In a source-language based system, the user specifies
+the document with interspersed commands, which is then passed to a formatter,
+and the output is obtained. The source-language usually provides some
+abstraction and control mechanisms such as procedures, macros,
+conditionals, variables, etc. in much the same way as a high-level programming
+language does. In a direct-manipulation environment,
+the user manipulates the document output appearance directly
+by invoking built-in operators available through menus and buttons.
+These systems are highly interactive; the result of invoking an operation
+is observed instantaneously, thereby creating an illusion that the user
+is ``directly'' manipulating the underlying object.
+
+The document attributes in direct-manipulation systems
+are usually specified by a declarative language encapsulated as
+form-based property sheets. These property sheets
+correspond to textual markup tags that can be imported to
+or exported from the direct-manipulation system for document interchange
+purposes. While a source representation is maintained explicitly in the
+source-language model, the notion of a document semantics specification
+language is somewhat implicit in direct-manipulation systems.
+
+Some people have called direct-manipulation systems {\W}
+({\it what-you-see-is-what-you-get\/}).
+The two concepts are not equivalent, however.
+{\W} refers to the correspondence between what is presented on a video display
+and what can be generated on some other device. In the context of
+electronic publishing, {\W} means that there is a very close relationship
+in terms of document appearance
+between a screen representation and the final hardcopy.
+Direct manipulation is a more general concept that models user interfaces.
+A direct-manipulation document preparation system may not have
+a {\W} relationship between its display representation and the final hardcopy.
+Conversely, a batch-oriented, source-language based formatter
+may be coupled with a previewer that is {\W}.
+
+This paper presents some general indexing problems and our solutions
+in a top-down fashion.
+First we discuss the desirable features of an index processor
+and then some design and implementation considerations for such a processor.
+Our goal is to arrive at general purpose solutions.
+Next, a framework is introduced under which an author enters index commands
+or tags with much reduced overhead.
+The examples shown are in {\LaTeX}~[10], a high-level
+document preparation language based on {\TeX}~[11].
+The model, however, is not restricted to any particular formatting language,
+nor to the source-language paradigm.
+We also examine some unique indexing issues in
+electronic document development environments that do not seem to find
+appropriate counterparts in traditional printed material.
+Finally our indexing facilities are evaluated against those available in
+other formatting systems such as {\SB}~[12],
+{\TF}~[13], and some direct-manipulation environments.
+
+%\newpage
+\begin{figure}[p]
+%% \centerline{
+%% \psfig{figure=fig1.ps,height=4.5in}
+%% }
+%% Replace PostScript figure with LaTeX picture mode version
+%% designed to closely match the original fig1.ps output
+%% so that this document can be formatted and printed on any
+%% system. -- Nelson H. F. Beebe <beebe@math.utah.edu> [08-Jul-1991]
+\input{fig1.tex}
+\caption[{\it The sequential flow of index processing\/}.]{Circles
+in the picture represent processors,
+squares are documents or auxiliary files. In Step~I, the author uses an
+editor to place index commands in the document. In Step~II, a raw index
+is generated as a by-product of formatting. In Step~III, this raw index
+together with some optional style information are taken as input to
+the index processor and an alphabetized version is created.
+Finally in Step~IV, the index is formatted to yield the ultimate result.}
+\end{figure}
+%\newpage
+
+\section{Basic Tasks}
+Index preparation is a process involving the following steps:
+\renewcommand{\labelenumi}{\Roman{enumi}.} % set the enumerated list in roman
+\begin{enumerate}
+ \item Placing index commands in the document source, which presumably
+ comprises multiple files. An index command takes a single
+ argument: the key to be indexed.
+ \item Creating a raw index file whose entries each consists
+ of two arguments: the index key and the page on which the index
+ command appears.
+ \item Processing the raw index file. Here, all index keys are
+ sorted alphabetically. Page numbers under the same key are merged
+ and successive numbers may be collected into
+ intervals (e.g., \verb|1, 2, 3, 4, 5| is replaced by \verb|1-5|).
+ Subitems within an entry, if any, are properly handled.
+ \item Formatting the processed index. The result is the actual index.
+\end{enumerate}
+\renewcommand{\labelenumi}{\arabic{enumi}.} % reset the list back to arabic
+The idea is illustrated in Figure~1, where roman capitals I--IV marking
+the edges correspond to the four steps here.
+This procedure is a highly sequential,
+for the input to one step depends upon the result from the previous one.
+
+Figure~2 exemplifies a stepwise development of the process.
+In {\LaTeX} and {\TeX}, all commands begin with a backslash
+(\verb|\|). Figure~2.a shows some occurrences of index
+commands (\verb|\index|) in the document source, with corresponding pages
+listed on the left. The page number is not part of the source file since at
+file-preparation time, it is unclear on which page a given textual material
+will eventually appear. Figure~2.a includes these numbers just to
+indicate that ultimately these entries would appear on those pages.
+Figure~2.b shows a raw index file generated by {\LaTeX}.
+After running through the index processor, it becomes an alphabetized index
+with commands specifying a particular output appearance (Figure~2.c).
+The result after formatting is shown in Figure~2.d.
+
+\begin{figure}
+\begin{iexample}
+&\\
+{\sl Page iv\/}: & \verb|\index{alpha}| \\
+{\sl Page 1\/}: & \verb|\index{alpha}| \\
+{\sl Page 2\/}: & \verb|\index{alpha}| \\
+{\sl Page 3\/}: & \verb|\index{alpha}| \\
+{\sl Page 11\/}: & \verb#\index{alphabeta|see{beta}}# \\
+{\sl Page 14\/}: & \verb|\index{alpha@{\it alpha\/}}| \\
+ & \verb#\index{beta|bold}# \\
+{\sl Page 22\/}: & \verb|\index{alpha!beta!gamma}| \\
+{\sl Page 38\/}: & \verb|\index{alpha!delta}| \\
+ & \\
+\sindex
+\\
+\verb|\indexentry{alpha}{iv}| \\
+\verb|\indexentry{alpha}{1}| \\
+\verb|\indexentry{alpha}{2}| \\
+\verb|\indexentry{alpha}{3}| \\
+\verb#\indexentry{alphabeta|see{beta}}{11}# \\
+\verb|\indexentry{alpha@{\it alpha\/}}{14}| \\
+\verb#\indexentry{beta|bold}{14}# \\
+\verb|\indexentry{alpha!beta!gamma}{22}| \\
+\verb|\indexentry{alpha!delta}{38}| \\
+\end{iexample}
+\hrule
+\begin{iexample}
+&\\
+\verb|\begin{theindex}| &\\
+&\\
+\verb|\item alpha, iv, 1-3| &\\
+\verb| \subitem beta| &\\
+\verb| \subsubitem gamma, 22| &\\
+\verb| \subitem delta, 38| &\\
+\verb|\item {\it alpha\/}, 14| &\\
+\verb|\item alphabeta, \see{beta}{11}| &\\
+&\\
+\verb|\indexspace| &\\
+&\\
+\verb|\item beta, \bold{14}| &\\
+&\\
+\verb|\end{theindex}| &\\
+\tindex
+\\
+alpha, iv, 1--3 \\
+\sitem beta \\
+\ssitem gamma, 22\\
+\sitem delta, 38 \\
+{\it alpha\/}, 14\\
+alphabeta, {\it see\/} beta\\
+\\
+beta, {\bf 14}\\
+\end{iexample}
+\caption{{\it The stepwise development of index processing\/}.
+This example is specified in {\LaTeX}.
+(a) {\sl Top Left\/}: Occurrences of index commands in the document source.
+Note that page numbers are unknown at the time of input when a source-based
+formatter like {\LaTeX} is used. Page numbers are included here simply to
+illustrate where each instance will occur.
+ (b) {\sl Top Right\/}: raw index file generated by {\LaTeX}.
+ (c) {\sl Bottom Left\/}: alphabetized index file.
+ (d) {\sl Bottom Right\/}: formatted final index.}
+\end{figure}
+
+Based on the example given in Figure~2, these four steps are explained
+below, where Steps~I and III are further expanded in subsequent sections.
+Issues involved in Steps~II and IV are less complex
+and are covered only in this section.
+
+\subsection{Placing Index Commands}
+Step~I deals with placing index commands in the document.
+In a source-language based environment, the commands can simply be inserted
+in the document source with a text editor.
+They will be utilized by the formatter in generating
+raw index entries (Step~II), but will contribute nothing to the output
+appearance as far as the corresponding pages are concerned.
+
+In a direct-manipulation system, index commands cannot be entered directly in
+the document under manipulation. A possible solution is to put them
+in ``shadow pages'' instead of the document output representation.
+A shadow document is the original document plus
+special tags that, among other things,
+mark logical objects like comments, bibliographical citations,
+cross references, indexes, etc.
+These tags are essential to document composition but do not correspond to
+physical appearance in their original forms. Upon request, the corresponding
+markers of these tags can be displayed along with the original document
+for editing purposes. For the user's visual cue, each type of tags can be
+represented by a different marker symbol.
+Normally for each tag entered in the
+document, an embedded annotation can be specified.
+An additional window can be created to show the associated annotation
+if necessary. This shadow document approach is widely adopted by
+direct-manipulation document development or desktop publishing systems
+such as Xerox {\ST}~[14], {\FM}~[15],
+{\WD}~[16], and {\VP}~[17].
+
+The primary issue in step I for both paradigms
+is whether or not a systematic mechanism
+can be derived for the entering of index commands or tags.
+Details of a general model that accomplishes this task are given below.
+
+
+\subsection{Generating the Raw Index}
+Step~II concerns attaching the current page number to each index
+command placed in the document. The command used in the generated
+raw index file may be renamed (in our example, it is changed
+from \verb|\index| to \verb|\indexentry|).
+The entries are in the exact order in which they appear in the document source.
+Thus, as long as the current page number is accessible, be it
+source-language or direct-manipulation based, generating raw index entries
+is relatively straightforward.
+
+There are minor differences between the two paradigms in this step,
+however. The generation of raw index entries in a source-language based
+system, like formatting itself, is by and large a ``batch job''.
+In a direct-manipulation editor, it is easier to maintain the list of raw index entries
+incrementally because the document being manipulated is always formatted
+so the page number is always current.
+
+\subsection{Index Processing}
+Processing raw index entries raises several issues.
+Some high-level issues are described below with references to the example given
+in Figure~2; how these tasks can be realized is detailed in the next section.
+
+{\it Permutation\/}. Index entries are sorted alphabetically (Figure~2.c).
+The index processor must differentiate among different types of keys
+such as strings, numbers, and special symbols.
+Upper and lower case letters should be distinguished.
+Furthermore, it may be necessary to handle roman, arabic, and
+alphabetic page numbers.
+
+{\it Merging\/}. Different page numbers corresponding to the same
+index key are merged into one list. Also, three or more
+successive page numbers are abbreviated as a range (as in the
+case of \verb|alpha, iv, 1-3|, Figure~2.c). If citations on successive
+pages are logically distinct, good indexing practice suggests that they
+should not be represented by a range. Our system allows user control
+of this practice.
+
+{\it Subindexing\/}. Multi-level indexing is supported.
+Here, entries sharing a common prefix are grouped together
+under the same prefix key.
+The special symbol `\verb|!|' serves as the level operator
+in the example (Figure~2.a and 2.b). Primary indexes are
+converted to first level items (the \verb|\item| entries in Figure~2.c)
+while subindexes are converted to lower level items
+(e.g., \verb|\subitem| or \verb|\subsubitem| entries in Figure~2.c).
+
+{\it Actual Field\/}. The distinction between a {\it sort key\/}
+and its {\it actual field\/} is made explicit.
+Sort keys are used in comparison while their actual counterparts are
+what end up being placed in the printed index.
+In the example, the `\verb|@|'
+sign is used as the actual field operator, which means its
+preceding string is the sort key and its succeeding string
+is the actual key (e.g., the \verb|\index{alpha@{\it alpha\/}}|
+in Figure~2.a).
+The same sort key with and without an actual field
+are treated as two separate entries (cf. \verb|alpha| and {\it alpha\/}
+in the example). If a key contains no actual operator,
+it is used as both the sort field and the actual field.
+
+The separation of a sort key from its actual field makes entry sorting
+much easier. If there were only one field,
+the comparison routine would have to ignore syntactic sugar related to
+output appearance and compare only the ``real'' keywords.
+For instance, in \verb|{\it alpha\/}|, the program has to ignore the font
+setting command \verb|\it|, the italic correction command \verb|\/|,
+and the scope delimiters \verb|{}|.
+In general, it is impossible to know
+all the patterns that the index processor should ignore,
+but with the separation of the fields, the sort key is used as a verbatim string
+in comparison; any special effect can be achieved via the actual field.
+
+{\it Page Encapsulation\/}. Page numbers can be encapsulated
+using the `\verb#|#' operator. In the example,
+page 14 on which \verb|\index{beta}| occurs is set in boldface, as
+represented by the command \verb|\bold|. The ability to set
+page numbers in different fonts allows the index to convey
+more information about whatever is being indexed. For instance,
+the place where a definition occurs can be set in one font, its
+primary example in a second, and others in a third.
+
+{\it Cross Referencing\/}. Some index entries make references to
+others. In our example the \verb|alphabeta| entry is a reference
+to \verb|beta|, as indicated by the {\it see\/} phrase.
+The page number, however, disappears after formatting (Step~IV),
+hence it is immaterial where index commands dealing with cross references
+like {\it see\/} occur in the document.
+This is a special case of page encapsulation (\verb|see{beta}| appears
+after the `\verb#|#' operator).
+Variations like {\it see also\/}, which gives page numbers as well
+as references to other entries, work similarly.
+
+{\it Input/Output Style\/}. In order to be
+formatter- and format-independent, the index processor must be able
+to handle a variety of formats. There are two reasons for considering
+this independence issue in the input side:
+Raw index files generated by systems
+other than {\LaTeX} may not comply to the default format, and
+the basic framework established for processing indexes can also be
+used to process other objects of similar nature (e.g., glossaries).
+But these other objects will certainly have a different keyword
+(e.g., \verb|\glossaryentry| as opposed to \verb|\indexentry|)
+in the very least.
+Similarly in the output side the index style
+may vary for different systems. Even within the same formatting
+system, the index may have to look differently under different
+publishing requirements. In other words, there must be a way to inform
+the processor of the input format and the output style.
+
+
+\subsection{Index Formatting}
+Two key issues in this last step are
+support for multiple styles and formatting independence.
+First, the formatting style macros used in Step~III output
+must be defined. In our example,
+the global environment (\verb|\begin{theindex}...\end{theindex}|) tells
+{\LaTeX} to use a two-column page layout. Each \verb|\item| is
+left justified against the column margin and each \verb|\subitem| is indented
+by 20 points, \verb|\subsubitem| by 30, etc.
+There is a vertical space bound to
+\verb|\indexspace| inserted before the beginning of a new letter
+(e.g., before \verb|beta|).
+
+The formatting independence problem refers to whether or not the final index
+can be formatted independently of the entire document.
+Indexing is typically the last step of document preparation, and
+is attempted only when the entire document is finalized.
+It is desirable to be able to generate the index without
+reformatting the entire document. To be able to format
+the index separately, the global context must be known, which is made possible
+by the extensible style facility in our design.
+One can redefine \verb|preamble| and \verb|postamble| to
+invoke a style consistent with the original document.
+
+The other information needed to perform effective separate formatting
+is the starting page number for the index.
+Some styles require that the index
+start on an even or odd page number.
+In either case, there must be provisions for including the correct
+starting page number in the pre-formatted version of index.
+
+
+\section{Index Processing}
+The index processor performs the tasks indicated above ---
+permutation, page number merging, subindexing, style handling, and other
+special effects. In order to achieve format and formatter independence,
+the index processor must be able to accept raw index
+terms designated by different keywords and delimiters.
+Likewise, it must be able to generate output in a specific style
+so that the result can be processed by the corresponding formatter.
+The intended tasks can be performed in multiple passes:
+First the input format file and output style file are scanned and analyzed.
+Entries in the input file are then processed. Next, all legal entries are
+sorted. Finally, the output index is generated in the last pass.
+The remainder of this section discusses the essential attributes
+for input formats and output styles and points out relevant issues
+for sorting and generating the entries.
+
+
+\begin{table}
+\begin{center}
+{\small
+\begin{tabular}{l|c|c|l}
+\hline
+\hd{specifier} & \hd{attribute} & \hd{default} & \hdr{meaning} \\
+\hline\hline
+\verb|keyword| & {\it string\/} & \verb|"\\indexentry"| &
+index command\\
+\hline
+\verb|arg_open| & {\it char\/} & \verb|'{'| &
+argument opening delimiter\\
+\hline
+\verb|arg_close| & {\it char\/} & \verb|'}'| &
+argument closing delimiter\\
+\hline
+\verb|range_open| & {\it char\/} & \verb|'('| &
+page range opening delimiter\\
+\hline
+\verb|range_close| & {\it char\/} & \verb|')'| &
+page range closing delimiter\\
+\hline
+\verb|level| & {\it char\/} & \verb|'!'| &
+index level delimiter\\
+\hline
+\verb|actual| & {\it char\/} & \verb|'@'| &
+actual key designator\\
+\hline
+\verb|encap| & {\it char\/} & \verb#'|'# &
+page number encapsulator\\
+\hline
+\verb|quote| & {\it char\/} & \verb|'"'| &
+quote symbol\\
+\hline
+\verb|escape| & {\it char\/} & \verb|'\\'| &
+symbol that escapes \verb|quote|\\
+\hline
+\verb|page_compositor| & {\it string\/} & \verb|"-"| &
+composite page delimiter\\
+\hline
+\end{tabular}
+}
+\end{center}
+\caption{Input format parameters.}
+\end{table}
+
+\subsection{Input Format}
+Table~1 is a summary of the input format that consists of a list
+of \verb|<|{\it specifier\/}, {\it attribute\/}\verb|>| pairs.
+These attributes
+are the essential tokens and delimiters needed in scanning the
+input index file. Default string constants are enclosed in
+double quotes (\verb|"..."|) and character constants are
+in single quotes (\verb|'x'|). The user can override
+the default value by specifying a specifier and a new attribute
+in the format file or property sheet.
+The attribute of \verb|keyword| is self-explanatory;
+\verb|arg_open| and \verb|arg_close| denote the argument opening and
+closing delimiters, respectively.
+The meanings of special operators such as \verb|level|,
+\verb|actual|, and \verb|encap| are described above.
+
+The two range delimiters \verb|range_open| and \verb|range_close| are
+used with the \verb|encap| operator.
+When \verb|range_open| immediately follows \verb|encap|
+(i.e., \verb#\index{...|(...}#),
+it tells the index processor that an explicit range is starting.
+Conversely \verb|range_close| signals the closing of a range.
+In our design, three or more successive page numbers are abbreviated as
+a range implicitly. This {\it implicit\/} range formation can be turned
+off if an indexed term represents logically distinct concepts in different
+pages. When the implicit range is disabled, {\it explicit\/} page ranges
+can be enforced by using the two range delimiters
+\verb|range_open| and \verb|range_close|.
+Therefore, it is possible to index an entire section or a large piece
+of text related to a certain concept without having to insert an index
+command in every single page.
+
+The \verb|quote| operator is used to escape symbols.
+Thus \verb|\index{foo"@goo}| means a sort key of \verb|foo@goo|
+rather than a sort key of \verb|foo"| and an actual key of \verb|goo|.
+As an exception, \verb|quote|, when preceded by \verb|escape| (i.e.
+\verb|\index{...\"...}|), does not escape its succeeding letter.
+This special case is included because \verb|\"| is the umlaut
+command in {\TeX}. Requiring \verb|quote| itself to be quoted
+in this case (i.e. \verb|\""|) is feasible but somewhat awkward;
+\verb|quote| and \verb|escape| must be distinct.
+
+A page number can be a composite of one or more fields
+separated by the delimiter bound to \verb|page_compositor|
+(e.g., II-12 for page 12 of Chapter II).
+This attribute allows the lexical analyzer to separate
+these fields, simplifying the sorting of page numbers.
+
+\subsection{Output Style}
+Table~2 summarizes the output style parameters. Again, it is a list
+of \verb|<|{\it specifier\/}, {\it attribute\/}\verb|>| pairs.
+In the default column, `\verb|\n|' and `\verb|\t|' denote a new line
+and a tab, respectively. These parameters can be further divided into
+the following groups:
+
+\begin{table}
+\begin{center}
+{\small
+\begin{tabular}{l|c|l|l}
+\hline
+\hd{specifier} & \hd{attribute} & \hd{default} & \hdr{meaning} \\
+\hline\hline
+\verb|preamble| & {\it string\/} & \verb|"\\begin{theindex}\n"| &
+index preamble\\
+\hline
+\verb|postamble| & {\it string\/} & \verb|"\n\n\\end{theindex}\n"| &
+index postamble\\
+\hline
+\verb|setpage_prefix| & {\it string\/} & \verb|"\n \\setcounter{page}{"| &
+page setting command prefix\\
+\hline
+\verb|setpage_suffix| & {\it string\/} & \verb|"}\n"| &
+page setting command suffix\\
+\hline
+\verb|group_skip| & {\it string\/} & \verb|"\n\n \\indexspace\n"| &
+intergroup vertical space\\
+\hline
+\verb|lethead_prefix| & {\it string\/} & \verb|""| &
+new letter heading prefix\\
+\hline
+\verb|lethead_suffix| & {\it string\/} & \verb|""| &
+new letter heading suffix\\
+\hline
+\verb|lethead_flag| & {\it number\/} & \verb|0| &
+flag designating new letter\\
+\hline
+\verb|item_0| & {\it string\/} & \verb|"\n \\item "| &
+level 0 item separator\\
+\hline
+\verb|item_1| & {\it string\/} & \verb|"\n \\subitem "| &
+level 1 item separator\\
+\hline
+\verb|item_2| & {\it string\/} & \verb|"\n \\subsubitem "| &
+level 2 item separator\\
+\hline
+\verb|item_01| & {\it string\/} & \verb|"\n \\subitem "| &
+levels 0/1 separator\\
+\hline
+\verb|item_x1| & {\it string\/} & \verb|"\n \\subitem "| &
+levels x/1 separator\\
+\hline
+\verb|item_12| & {\it string\/} & \verb|"\n \\subsubitem "| &
+levels 1/2 separator\\
+\hline
+\verb|item_x2| & {\it string\/} & \verb|"\n \\subsubitem "| &
+levels x/2 separator\\
+\hline
+\verb|delim_0| & {\it string\/} & \verb|", "| &
+level 0 key/page delimiter\\
+\hline
+\verb|delim_1| & {\it string\/} & \verb|", "| &
+level 1 key/page delimiter\\
+\hline
+\verb|delim_2| & {\it string\/} & \verb|", "| &
+level 2 key/page delimiter\\
+\hline
+\verb|delim_n| & {\it string\/} & \verb|", "| &
+inter page number delimiter\\
+\hline
+\verb|delim_r| & {\it string\/} & \verb|"--"| &
+page range designator\\
+\hline
+\verb|encap_prefix| & {\it string\/} & \verb|"\\"| &
+page encapsulator prefix\\
+\hline
+\verb|encap_infix| & {\it string\/} & \verb|"{"| &
+page encapsulator infix\\
+\hline
+\verb|encap_suffix| & {\it string\/} & \verb|"}".| &
+page encapsulator suffix\\
+\hline
+\verb|page_precedence| & {\it string\/} & \verb|"rnaRA"| &
+page type precedence\\
+\hline
+\verb|line_max| & {\it number\/} & \verb|72| &
+maximum line length\\
+\hline
+\verb|indent_space| & {\it string\/} & \verb|"\t\t"| &
+indentation for wrapped lines\\
+\hline
+\verb|indent_length| & {\it number\/} & \verb|16| &
+length of indentation\\
+\hline
+\end{tabular}
+}
+\end{center}
+\caption{Output style parameters.}
+\end{table}
+
+{\it Context\/}. Together, \verb|preamble| and \verb|postamble|
+ define the context in which the index is to be formatted.
+
+{\it Starting Page\/}. The starting page number can either be supplied
+ by the user or retrieved automatically from the document transcript.
+ In either case, this number can be enclosed with \verb|setpage_prefix|
+ and \verb|setpage_suffix| to yield a page number initializing command.
+
+{\it New Group/Letter\/}. The string bound to \verb|group_skip|
+denotes the extra vertical space needed when a group is started.
+For a group beginning with a different letter,
+the parameters \verb|lethead_prefix| and \verb|lethead_suffix| (both with
+a default nil string) denote the group heading.
+The flag \verb|lethead_flag| has a default value of 0, which
+means other than \verb|group_skip| nothing else will be inserted before
+the group.
+On the other hand, if this flag is positive, the strings bound
+to \verb|lethead_prefix| and \verb|lethead_suffix| will be inserted with
+an instance of the new letter in uppercase in between. Similarly,
+a lowercase letter will be inserted if the flag is negative.
+
+{\it Entry Separators\/}. This group includes everything with the
+\verb|item_| prefix. First, \verb|item_|$i$
+denotes the command and indentation to be inserted when
+a key is started from a level greater than or equal to $i$.
+Second, \verb|item_|$ij$ has a similar meaning, but with
+$i = j-1$. Finally, the two \verb|item_x|$j$'s
+are included to handle the situation where the parent level has no
+page numbers. Some styles require cases like these to be
+different from those with page numbers.
+
+Table~2 depicts a system that supports three levels of
+subindexing. In general, suppose $n$ is the number of index
+levels supported, there will be $n$ \verb|item_|$i$'s
+($0 \leq i \leq n-1$), $(n-1)$ \verb|item_|$ij$'s
+($1 \leq j \leq n-1, i = j-1$), and
+$(n-1)$ \verb|item_x|$j$'s ($1 \leq j \leq n-1$).
+
+{\it Page Delimiters\/}. Each level has a key/page delimiter
+that defines what is to be inserted between a key and its first
+page number. The inter-page delimiter is specified by \verb|delim_n|,
+while the range designator is given by \verb|delim_r|.
+
+{\it Page Encapsulator\/}. The attributes of
+\verb|encap_prefix|, \verb|encap_infix|, and \verb|encap_suffix|
+form what is to be placed into the output
+ when an encapsulator is specified
+for a certain entry. Suppose \verb|foo| is the specified encapsulator
+and \verb|N| is the page number, the output sequence is
+\begin{verbatim}
+ encap_prefix foo encap_infix N encap_suffix
+\end{verbatim}
+
+{\it Page Precedence\/}. Five different types of numerals are
+supported by most systems for page numbering. These are
+lowercase roman (\verb|r|), numeric or arabic (\verb|n|),
+lowercase alphabetic (\verb|a|), uppercase roman (\verb|R|),
+and uppercase alphabetic (\verb|A|). The string bound to
+\verb|page_precedence| (default \verb|"rnaRA"|)
+specifies their order.
+
+{\it Line Wrapping\/}. In the output index file,
+the merged list of page numbers can be wrapped in multiple lines,
+if it is longer than \verb|line_max|. The newly wrapped
+line is indented by \verb|indent_space| whose length is
+\verb|indent_length|. This artificial line wrapping does not
+make any difference in formatting, but does provide increased
+readability for the pre-formatted final index.
+This feature may seem somewhat trivial at first glance, but if no
+formatters are involved whatsoever, the readability of the
+verbatim output index is important.
+
+\subsection{Sorting Entries}
+Entries in the raw index file are sorted primarily on their index keys
+and secondarily on their page numbers.
+Index keys are sorted first; within the same index key,
+page numbers are sorted numerically.
+Sort keys and numeric page numbers are used in the comparison, while
+actual keys and literal page fields are entered into the
+resulting index. In our design,
+a complete index key is an aggregate of one or more sort keys plus the same
+or a smaller number of actual keys. The comparison is based on
+sort keys, but if two aggregates have identical sort fields and
+page numbers, the actual keys can be used to distinguish their order.
+
+Index keys can be categorized into the following groups:
+{\it strings\/}, {\it numbers\/}, and {\it symbols\/}.
+A string is a pattern whose leading character is a letter in the alphabet.
+A number is a pattern consisting of all digits. A symbol is a pattern
+beginning with a character not in the union of the English alphabet and
+arabic digits or starting with a digit but mixed with non-digits.
+Members of the same group should appear in sequence.
+Hence there are two issues concerning ordering:
+one deals with entries within a group; the other is
+the global precedence among the three groups in question.
+Details of sorting index keys can be found in Reference~[18].
+
+There are three basic types of numerals for page numbers: {\it roman\/},
+{\it alphabetic\/}, and {\it arabic\/}.
+The sorting of arbitrary combinations of these three types of numerals
+(e.g., 112, iv, II-12, A.1.3, etc.)
+must be based on their numeric values and relative precedence.
+The attribute of \verb|page_precedence| in Table~2, for instance, specifies
+the precedence. Again, details of sorting page numbers can be found in
+Reference~[18].
+
+\newpage
+\subsection{Creating Output Index Entries}
+Once all input entries are sorted, the output index file can be
+created. First the attribute bound to \verb|preamble| is placed into
+the output file, followed by the string
+\begin{quote}
+ \verb|setpage_prefix |{\sl N\/}\verb| setpage_suffix|,
+\end{quote}
+provided {\sl N\/} is the starting page number and
+such a setting is requested. Next, each entry in the sorted list
+is processed in order. Finally, the attribute bound to \verb|postamble|
+is appended at the end of the output file.
+The algorithm for generating each entry with appropriate formatter-specific
+commands or delimiters (i.e. \verb|item_|$i$'s, \verb|delim_|$i$'s, etc.)
+is described in Reference~[18].
+
+\section{Placing Index Commands}
+This section discusses a simple framework for placing index commands
+in a document. It assumes an interactive editor is available with
+{\it string search\/}, which positions the cursor to a specified pattern, and
+{\it query-insert\/}, which displays a menu of
+options and, upon the user's selection, inserts
+a specified key, together with other constant strings (e.g.,
+the index command and its argument delimiters).
+
+We implemented this framework on top of
+GNU {\E}~[19] as part of an interactive environment for
+composing {\TeX}-based documents~[5].
+The underlying model applies not just to conventional text
+editors, but to direct-manipulation systems as well.
+
+\subsection{Basic Framework}
+The basic framework is very simple. All the author needs is
+to specify a {\it pattern\/} and a {\it key\/}.
+The editor then finds the pattern,
+issues a menu of options and inserts the index command along with the key
+as its argument upon the user's request.
+In our example, suppose both {\it pattern\/} and {\it key\/} are
+\verb|alpha|, then the inserted string after an instance
+of \verb|alpha| in the document is \verb|\index{alpha}|.
+This insertion will be visible in a source-language based system and will be
+invisible for a direct-manipulation system (or visible as hidden text
+for its shadow pages).
+
+Before the actual insertion is made, it is desirable to make a confirmation
+request that presents a menu of options, of which
+{\it confirm\/} and {\it ignore\/} are the most obvious ones.
+Thus for each instance of the pattern found, the user can decide if
+it is to be indexed.
+
+Representing patterns as regular expressions gives significantly more power
+to this query-insert operation. The same key can represent a complicated
+string of a basic pattern, its capitalized form, its acronym, and other
+abbreviations. For instance, the following patterns may all be indexed
+by the key \verb|UCB|,
+\begin{verbatim}
+ University of California, Berkeley
+ Berkeley
+ berkeley
+ UCB
+\end{verbatim}
+
+As a special case of this \verb|<|{\it key\/}, {\it pattern\/}\verb|>|
+setup, one can use words in the neighborhood of current cursor position
+as the implicit value for both the key and the pattern.
+Some editors allow the use of special characters to delimit word boundaries.
+These characters can be used in searching to reduce on the number of
+``false drops''. For example, one can position the cursor
+after the desired pattern and with one editor command (typically
+in two or three key strokes), an index entry will
+be inserted with the preceding word (or words) as the implicit key.
+The advantage of this facility is that there is no need to type
+the key-pattern pair.
+The same idea also applies to a region of text, which is a piece of
+continuous text in the document. In {\E}, a region is
+everything between a marker and the current cursor position.
+More generally, the implicit operand can be the {\it current selection\/},
+in which case the bounding positions of the selected text
+are not necessarily the insertion point.
+
+In our system, there is also a special facility to index every author name
+that appears in the bibliography or references section of a document.
+This feature involves skipping citation entries without an author field and
+for each author name found, issuing a query-insert prompt similar to
+the normal case. Instead of entering a name directly as the index term,
+it is better to display it in the form of last name followed by first
+and middle names for confirmation, as in
+\begin{quote}
+\verb|Confirm: Knuth, Donald E.|
+\end{quote}
+This reordering yields last names as primary sort keys.
+Our name separation heuristic does not always
+work for multi-word last names. The confirmation prompt
+allows the user to correct it before insertion.
+
+\subsection{Key-Pattern List}
+A collection of these \verb|<|{\it key\/}, {\it pattern\/}\verb|>| pairs
+can be compiled in a list. A global function can then be invoked to
+process each pair for the entire document or parts of it.
+This list can be created off-line by the user, or automatically
+in an incremental fashion as the
+user confirms new index insertions in an interactive session. The pattern
+matching mechanism must be able to recognize and skip instances already
+indexed so that unnecessary repetitions are avoided.
+In our system, this key-pattern list is a per document list.
+If a document includes multiple files, the global function processes
+each of them according to the preorder traversal of the file inclusion tree.
+
+
+\subsection{Indexing Menu}
+For each instance of the pattern found, a menu of options such as the
+following may be presented.
+%\newpage
+\begin{itemize}
+ \item {\it Confirm\/}.
+ \item {\it Ignore\/}.
+ \item {\it Key-Pattern List\/}. Add the current
+ \verb|<|{\it key\/}, {\it pattern\/}\verb|>| pair to the list
+ associated with the current document.
+ \item {\it Index Level\/}. Prompt the user for an index prefix.
+ The \verb|level| operator (`\verb|!|'), if not given at the end
+ of the specified string, should be inserted automatically between
+ the prefix and the current key.
+ \item {\it Actual Field\/}. Prompt the user for the actual field
+ corresponding to the current (sort) key. The \verb|actual|
+ operator (`\verb|@|') should be automatically inserted in between.
+ \item {\it Page Encapsulator\/}. Prompt the user for the page
+ number encapsulator. The \verb|encap| operator (`\verb#|#'),
+ if not given, should be attached in front of the specified string.
+ Encapsulators corresponding to popular fonts such as bold, italic,
+ and slanted, or to cross references like {\it see\/} and
+ {\it see also\/} can be implemented as a submenu.
+\end{itemize}
+
+\subsection{Extended Framework}
+A typical scenario for placing index commands under the extended framework
+is as follows. There are two query-insert modes:
+one based on a single key-pattern pair and the other
+on multiple key-pattern pairs.
+In the former mode, the user specifies a pattern and a key, and for
+every instance of the pattern found, decides whether to insert the
+index command with the specified key, or a variant of it (i.e., a combination
+of \verb|level|, \verb|actual|, and \verb|encap|).
+In the latter mode, there is a collection of entries that may be represented
+as a long list for an entire document, or as a short list for a section.
+Each key-pattern pair in the list is processed as in the former case.
+Provisions are also available to help construct the list.
+
+With such powerful mechanisms available, there is a tendency to ``over index''
+because it is so easy to be comprehensive.
+In some cases, ``less may be more''. Therefore, one should be extremely
+careful in confirming the insertion of {\it key\/}
+to avoid false drops picked up by the search mechanism.
+
+
+\section{Direct Manipulation}
+Although our implementation of these facilities was for a source-based system,
+a number of direct-manipulation systems do support a similar indexing facility.
+Four systems are described briefly to indicate
+the applicability of the principles depicted in the previous sections.
+Also examined is a more elaborate on-line
+indexing facility made possible using the electronic media.
+
+
+\subsection{Indexing under Direct Manipulation}
+In Xerox PARC's {\CD} environment~[20],
+the {\TG} editor supports an
+application called {\sl IndexTool\/}~[21]
+that automatically prepares multiple
+multi-level indexes (general index, author index, etc.) with cross
+references ({\it see\/} and {\it see also\/})
+and with substitution phrases (index the
+phrase ``data structures'' under ``data structure'' to handle these
+automatically). {\sl IndexTool\/} takes a selection and creates an
+index entry attached to the document over the selection range. Index
+entries can be edited in a separate tool to permit creating the cross
+references and substitution text. {\TG} also has a regular expression search
+capability via {\sl EditTool\/}, which also
+permits a wide range of search and replace operations.
+
+In {\FM} 1.0~[15], index tags can be placed and edited
+using a combination of the {\sl Markers\/} and the {\sl Search\/} tools.
+{\sl Markers\/} allows one to specify invisible tags such as
+subjects, comments, and of course, index entries.
+For each marker, an associated annotation can be specified.
+In the indexing case, the annotation is the key to appear in the final index.
+Attributes of page encapsulation discussed previously can also be specified
+in the {\sl Markers\/} window.
+These attributes include explicit page range, fonts, and an option to disable
+page numbers so that cross references like {\it see\/} can be realized.
+{\FM}'s {\sl Search\/} can be used to locate the desired pattern in plain
+or regular expressions. An invisible character \verb|\m|
+can be specified in {\sl Search\/} to identify each occurrence
+of index markers in the document.
+Whenever a marker is found, the corresponding
+annotation is displayed in the {\sl Markers\/} window.
+The annotated text can incorporate special symbols to yield
+multi-level indexing and actual field substitution similar to the ones
+described in above. A processor called
+{\sl fmBook\/} can be executed off-line to collect index markers,
+sort them, and finally generate a formatted index whose style
+is customizable via system supplied property sheets.
+
+In the Macintosh version of {\WD} 3.0~[16], an index command is
+designated by the ``index code'' \verb|.i.| The text between \verb|.i.|
+and an ``end-of-entry code'', such as a semicolon, is regarded
+as the index key. A colon (\verb|:|) in the entry text acts as the index
+level operator. The output appearance can be refined by using
+variants of the index code. For instance,
+\verb|.iB.| and \verb|.iI.| set the page number in boldface and
+italic fonts, respectively, \verb|.i(.| and \verb|.i).| create
+an explicit page range, etc. Index entries are ``compiled''
+into the actual index that appears at the end of the document.
+Before that takes place, the system must be notified that these index codes
+are {\it hidden text\/}. An option in the preference sheet
+can be set to display hidden text embedded in the document.
+Hidden text must be ``hidden'' when index entries are being compiled;
+otherwise page number computation will be incorrect.
+There are no special tools for entering index codes.
+The {\sl find\/} and {\sl change\/} commands in the {\sl Search Menu\/}
+do not support regular expressions. There are no query-insert
+modes in the search mechanism. Although abbreviations can be registered
+as glossary entries, a great many keystrokes are still required in placing
+a single index entry.
+
+In {\VP} 1.1~[17], a desktop publishing system
+for documents prepared on any of several word processing
+programs on the IBM PC, index entries can be placed in the document by
+invoking a dialogue box at the desired position.
+An alternative is to use a word processor to enter a markup tag such as
+\begin{quote}
+\verb|<$I<I>alpha<L>[alpha];beta>|
+\end{quote}
+where \verb|<$I|$\cdots$\verb|>| marks $\cdots$ as an index term,
+\verb|<I>alpha<L>| is the actual key in italic,
+\verb|[|$\cdots$\verb|]| designates $\cdots$ as the corresponding sort key,
+and the semicolon is the index level operator.
+It supports two levels of subindexing as well as {\it see\/} and
+{\it see also\/}. Index terms are hidden text; the word {\tt Index}
+will be displayed by its {\it Current Selection Indicator\/} when
+the cursor is placed at a location where an index term is anchored.
+The output index style can be specified by changing attributes in
+a property sheet called {\tt GENERATE INDEX}. The collection of
+attributes is a proper subset of Table~2. Index processing is executed
+as a batch job similar to {\sl fmBook\/} in {\FM}. Searching is unavailable
+in {\VP}, therefore an automated index placing subsystem is not possible.
+
+
+\subsection{Dynamic Indexing and Hypertext}
+Our proposed implementation of an indexing facility under direct manipulation
+and the four real systems discussed previously all operate
+in a multi-pass fashion, much the same as a source-language based system.
+However, based on its interactive nature, a direct-manipulation document
+editor can be constructed with an indexing subsystem that follows the same
+central ideas, but with an user interface more closely related to the
+direct-manipulation paradigm.
+
+The ``directness'' may be observed in the following scenario.
+The author specifies input/output styles by selecting options available
+in system supplied property sheets. For each key selected
+in the document, its corresponding entry in the index is immediately
+displayed, along with entries already entered.
+Sorting is done as the entry is generated for the output.
+Consequently, the internal structure for these entries can no longer be
+an array that is suitable for fast sorting algorithms.
+Instead, a balanced tree may be the preferred structure.
+Insertion and deletion reorganize the tree automatically and
+a traversal of the tree yields the correct ordering.
+A link between a page number in the index entry and its corresponding
+actual page is required so that the index needs not be regenerated
+when the document is reformatted. In other words, when a page
+number changes due to reformatting, all instances of that page in the index
+change automatically.
+
+One possible extension to this model is the ability to point at an entry
+in the index and
+have the corresponding page located automatically with a keyword highlighted.
+Thus indexing becomes a dynamic activity from the reader's point of view.
+This feature typifies the power of ``dynamics'' that an electronic document
+environment is able to offer, which does not exist in traditional
+static printed material. In addition to dynamic indexing,
+one can do such hypertext operations as navigation, filtering, summarizing,
+etc.~[22] effectively based on markup tags, embedded annotations, and
+links among compound objects in the document.
+
+
+\section{Evaluation}
+\subsection{Index Placing Subsystem}
+An important aspect of our system is the framework for
+placing index commands in the document.
+This task has been performed traditionally in an ad hoc fashion.
+It is unclear how placement is done in the
+UNIX {\TF} environment. Reference~[23] does not describe
+any automated assistance for the author.
+
+Entering index codes in {\WD} is awkward because
+its search mechanism lacks full regular expression support
+and query-insert mode is unavailable.
+To mark one piece of text as an index entry, an ordinary session
+requires 8 mouse clicks and 4 keystrokes. Even with accelerated keyboard
+abbreviations, it still takes 2 mouse clicks and 8 keystrokes to mark a single
+index entry. The premise, however, is that the index pattern has been
+located and that it is identical to the index key.
+Locating the pattern may involve extra mouse clicks and keystrokes.
+Moreover, if the index key and the search pattern are distinct, more
+keystrokes would be necessary to enter the text for the index key.
+This situation happens to the marking of each and every instance
+of index entries. No global scheme is available in {\WD}.
+
+{\VP} does not support any searching mechanism; it assumes
+searching is performed in a front-end word processor.
+Therefore, systematic index placing in the stand-alone {\VP} is difficult.
+
+The situation in {\FM} is somewhat better because of its more powerful
+keyboard macro registration capability and the support for regular
+expression search. In {\FM}, a specific combination
+of tools can be used to enter index tags at desired places.
+Operations can be recorded as keyboard macros so that repetitions
+can be done by a single keystroke (the invocation of the keyboard macro).
+The problem is that a new keyboard macro has to be defined for each
+key-pattern pair. Furthermore, it
+lacks the systematic global scheme available in our extended
+framework to make the whole process efficient.
+
+In our system, it takes only 1 to 3 keystrokes to mark an index entry.
+Also available is a global scheme for marking index entries in the entire
+document that may span over multiple files. In the single key-pattern
+case, the same key can be inserted at a variety of places
+described by a single regular expression. Patterns already indexed
+are skipped automatically. A number of options are
+available upon each occurrence of the pattern. Thus, marking each instance
+takes just one keystroke to confirm and it works uniformly and continuously
+throughout the entire document. This can be expanded to a scheme of
+multiple key-pattern pairs that works iteratively on a list of
+different index entries.
+In our system,
+a significant amount of time is saved not just in typing {\it per se\/}, but
+in the user's mental reaction time due to the side effect of
+unautomated discrete repetitions as in {\FM}, {\WD}, and {\VP}.
+
+In the production of an index for a book~[6], our {\E} Lisp
+implementation of the index placing subsystem has proved very useful
+and effective. The provision for multi-pair
+\verb|<|{\it key\/}, {\it pattern\/}\verb|>| query-insert has been the most
+time-saving operation in our experience.
+With minor modifications, the same facility should work on
+placing index commands for other formatting languages like
+{\TF} and {\SB}. Adapting it to direct-manipulation environments is more
+involved, but given proper editor programming power,
+the basic principles discussed above should apply.
+
+\subsection{Index Processor}
+The other major portion of our work is
+a complete index processor implementation.
+The resulting processor
+is a single C program called {\MI}. Actually, {\MI}
+had several predecessors all written as UNIX shell scripts with
+embedded \verb|sed|~[24] and \verb|awk|~[25] code.
+We quickly became unsatisfied with them for various reasons.
+One of the concerns was efficiency.
+Interpreted languages such as \verb|sed| and \verb|awk| are satisfactory for
+rapid prototyping, but they are slow.
+In our experience, {\MI} was able to process
+a book index of 3,300 entries in less
+than 50 seconds of user time plus an extra 5\% of system time on
+a client node of SUN 3/50 (MC68020 at 12.5 MHz).
+This is at least an order of magnitude faster than
+using its most recent \verb|sed|/\verb|awk| predecessor, which has only
+half the features of {\MI}.
+
+%The efficiency issue is not that significant since normally
+%an index processor is not needed until the document is at its
+%final stage. Most of the time is spent in placing index commands
+%in the document. There are relatively few invocations to
+%process raw index entries. A speedup of over an order of magnitude, however,
+%can be significant.
+
+The decision to do a C implementation was made because of C's dynamic
+storage allocation and data structures.
+Since we wanted as general a solution as possible, it would be difficult,
+if not impossible, to implement all the desired features using \verb|sed/awk|.
+For instance, in \verb|awk| a dynamically linked list of index entries is
+impossible, and the style handling mechanism with a comprehensive error
+processing facility is difficult to realize. Originally developed
+in UNIX C with portability in mind, {\MI} also runs on VAX/VMS,
+TOPS-20, MS/DOS systems with a few trivial changes.
+This portability would have
+been very difficult for an implementation in UNIX shell scripts.
+Furthermore, {\MI} has more features and is more extensible than tools like
+{\sl Idx{\TeX}\/}~[26], a {\LaTeX}-specific index processor
+that runs only on VAX/VMS systems.
+
+Our approach is the direct opposite of that taken by \verb|make.index|,
+a host of indexing tools~[23] built for {\TF}.
+As part of the UNIX {\TF} document
+preparation environment, these tools are canonical examples of
+the pipelining model. They are a collection of small \verb|awk|
+programs working together in a very long pipeline.
+The claim is that by breaking the system down into small pieces, it is
+easier for the user to adapt the package to various situations
+not possible to envision in advance. Their approach, therefore, seems
+to follow the ``do it yourself'' metaphor whereby you get a toolkit
+and assemble the final product yourself. The basic package covers
+only those features used by its authors. A third party user has to
+modify their \verb|awk| code if something different is desired.
+
+The design of {\MI} is quite different.
+Our intention is to build a complete system by analyzing
+the tasks involved in index processing. Parameters are derived
+to form a table-driven style handling facility.
+Formatter and format independence is achieved by
+simple style specification. All the underlying
+data structures and processing mechanisms are transparent.
+Yet it is robust enough to handle different precedence schemes,
+ordering rules, etc.
+To use the system, the user needs not deal with the processing
+details. If the default is inappropriate,
+the only adaptation required is a table specification for the style facility.
+
+For instance, by assigning the output index header \verb|index.head|
+defined in \verb|make.index| to our \verb|preamble| and
+other related commands to \verb|item_|$i$'s, it is easy to produce
+an alphabetized index in {\TF} format from a raw index generated by {\TF}.
+The same technique applies to other formatting systems.
+{\SB}, for example, has an indexing subsystem
+that supports a subset of the functionality described above.
+By adapting its raw index file format as input style and
+its output appearance commands as output style, its indexing capability
+can be readily expanded using {\MI}. In both cases,
+there is no need to modify the original code used to generate
+the raw index (Step II), nor is it necessary to modify {\MI} itself.
+Likewise, {\MI} can be integrated with direct-manipulation
+document development or publishing systems by binding their descriptive
+markup tags to the attributes of {\MI}'s input format and output style.
+
+To summarize the differences in approach between {\MI} and \verb|make.index|,
+let us examine the points of comparison: speed, size of the
+programs, ease of use, portability, and extensibility.
+{\MI} is an order of magnitude faster. The \verb|awk| programs
+of \verb|make.index| are less than 100 lines of code, while {\MI} is large:
+6,000 lines of C code and a binary of 70K bytes. {\MI} is a self-contained
+C program, adapted from our original UNIX implementation, to run on
+a variety of machines from micros to mainframes. The \verb|make.index|
+system will run on any UNIX system which has \verb|awk| so it too spans
+many systems, although it is UNIX-specific while {\MI} is not.
+
+{\MI} is easy to use. It is monolithic and covers almost every conceivable
+case likely to occur. We actually examined many of the books in the
+Addison-Wesley Computer Science Series and found that more than 95\% of the
+cases could be handled by the program. The \verb|make.index| suite, on the
+other hand, handles the standard cases and all customizations must be done
+by the user by modifying \verb|awk| code. With {\MI}, user changes will
+very rarely occur. If they should occur, and we have never had them happen,
+then the user must change the C source code. The question as to whether it is
+easier to modify \verb|awk| code or C code is left to the reader.
+Our answer is given in {\MI}.
+
+
+\section{Acknowledgements}
+We would like to thank Leslie Lamport for his collaboration in the design
+of {\MI}. He provided the initial specification and did some serious testing.
+Charles Karney furnished the patches for {\MI} to run under VMS.
+Nelson Beebe ported {\MI} to TOPS-20 and MS/DOS.
+Some useful feedback came from Art Werschulz who tried out both {\MI}
+and the index placing facility with {\AmSTeX}.
+We are grateful to Richard Beach for his description of {\TG}'s
+index processing facility, to Ravi Sethi for the information on {\TF}'s
+index processing tools, and to Ventura Software, Inc. for giving us
+documentation on their indexing mechanism.
+Thanks also go to Ethan Munson and the anonymous referees for their helpful
+comments on earlier drafts of this paper.
+
+%\newpage
+% Bibliography
+% \bibliography{int,doc,env,hyper}
+% \bibliographystyle{unsrt}
+
+{\small
+\singlespace
+\input ind.bbl
+}
+\input{indminus.tex}
diff --git a/indexing/makeindex/paper/indminus.tex b/indexing/makeindex/paper/indminus.tex
new file mode 100644
index 0000000000..6b47932f52
--- /dev/null
+++ b/indexing/makeindex/paper/indminus.tex
@@ -0,0 +1 @@
+\end{document}
diff --git a/indexing/makeindex/paper/indplus.tex b/indexing/makeindex/paper/indplus.tex
new file mode 100644
index 0000000000..39dbd14b9c
--- /dev/null
+++ b/indexing/makeindex/paper/indplus.tex
@@ -0,0 +1,23 @@
+% Master File: ind.tex
+% Document preamble for ind.tex
+
+\documentstyle[11pt,doublespace,regmar]{article}
+\input{logo}
+%% psfig not needed after picture mode version of fig1.ps created
+%% -- Nelson H. F. Beebe <beebe@math.utah.edu> [08-Jul-1991]
+%% \input{psfig}
+\nofiles
+\begin{document}
+\pagestyle{phcheadings} % defined in undhead.tex
+\def\s{\thinspace}
+\newcommand{\sitem}{\hspace*{20pt}}
+\newcommand{\ssitem}{\hspace*{30pt}}
+\newenvironment{iexample}{\begin{center}
+ \begin{tabular}[t]{@{}ll|@{\hspace{.2em}}}}{\end{tabbing}\end{minipage}
+ \end{center}}
+\newcommand{\sindex}{\end{tabular}\hspace{.3em}\begin{minipage}[t]{\textwidth}
+ \begin{tabbing}}
+\newcommand{\tindex}{\end{tabular}\hspace{1em}\begin{minipage}[t]{\textwidth}
+ \begin{tabbing}}
+\newcommand{\hd}[1]{\multicolumn{1}{c|}{\sl #1\/}}
+\newcommand{\hdr}[1]{\multicolumn{1}{c}{\sl #1\/}}
diff --git a/indexing/makeindex/paper/logo.tex b/indexing/makeindex/paper/logo.tex
new file mode 100644
index 0000000000..ffa944537d
--- /dev/null
+++ b/indexing/makeindex/paper/logo.tex
@@ -0,0 +1,126 @@
+
+% Special fonts
+\font\mf=manfnt
+\font\b=cmb10
+\font\Bigbf=cmbx10 scaled\magstep3
+\font\bigbf=cmbx10 scaled\magstep2
+\font\medbf=cmbx10 scaled\magstep1
+\font\medsl=cmsl10 scaled\magstep1
+\font\medit=cmmi10 scaled\magstep1
+\font\medrm=cmr10 scaled\magstep1
+\font\ssl=cmsl8
+\font\sit=cmmi8
+\font\sbf=cmbx8
+\font\sc=cmcsc10
+
+
+% Various TeX logos
+
+\def\MF{\mf METAFONT}
+\def\AmSTeX{$\cal A$\kern-.1667em\lower.5ex\hbox{$\cal M$}\kern-.125em
+ $\cal S$-\TeX}
+\def\BibTeX{{\rm B\kern-.05em{\sc i\kern-.025em b}\kern-.08em
+ T\kern-.1667em\lower.7ex\hbox{E}\kern-.125emX}}
+\def\LaTeX{{\rm L\kern-.36em\raise.3ex\hbox{\sc a}\kern-.15em
+ T\kern-.1667em\lower.7ex\hbox{E}\kern-.125emX}}
+\def\SliTeX{S\kern-.065em L\kern-.18em\raise.32ex\hbox{i}\kern-.03em\TeX}
+\def\VorTeX{V\kern-2.7pt\lower.5ex\hbox{O\kern-1.4pt R}\kern-2.6pt
+ T\kern-.1667em\lower.7ex\hbox{E}\kern-.125emX}
+\def\TM{\sl {\TeX}-mode\/}
+\def\BM{\sl B\kern-.05em{\ssl I\kern-.025em B}\kern-.08em
+ T\kern-.1667em\lower.7ex\hbox{E}\kern-.125emX-mode}
+\def\Lit{\it L\kern-.25em\raise.3ex\hbox{\sit a}\kern-.15em
+ T\kern-.1667em\lower.7ex\hbox{E}\kern-.125emX}
+\def\Lbf{\bf L\kern-.25em\raise.3ex\hbox{\sbf a}\kern-.15em
+ T\kern-.1667em\lower.7ex\hbox{E}\kern-.125emX}
+\def\Lsl{\sl L\kern-.25em\raise.3ex\hbox{\ssl a}\kern-.15em
+ T\kern-.1667em\lower.7ex\hbox{E}\kern-.125emX}
+\def\Bit{\it B\kern-.05em{\sit I\kern-.025em B}\kern-.08em
+ T\kern-.1667em\lower.7ex\hbox{E}\kern-.125emX}
+\def\Bbf{\Bigbf B\kern-.05em{\bigbf I\kern-.025em B}\kern-.08em{\TeX}}
+\def\Mbf{\medbf B\kern-.05em{\sbf I\kern-.025em B}\kern-.08em{\TeX}}
+\def\Bsl{\ssl B\kern-.05em{\sit I\kern-.025em B}\kern-.08em{\TeX}}
+
+\def\AL{\sl Aloe\/}
+\def\GAN{\sl Gandalf\/}
+\def\ET{\sl Etude\/}
+\def\PEN{\sl Pen\/}
+\def\PAN{\sl Pan\/}
+\def\DIT{\sl Ditroff\/}
+\def\DVI{\sc DVI}
+\def\DT{\sl DviTool\/}
+\def\E{\sl Emacs\/}
+\def\EASE{\sl Ease\/}
+\def\GLN{\sl Gremlin\/}
+\def\IL{\sl Illustrator\/}
+\def\BR{\sl Bravo\/}
+\def\ST{\sl Star\/}
+\def\MW{\sl MacWrite\/}
+\def\MD{\sl MacDraw\/}
+\def\MP{\sl MacPaint\/}
+\def\ID{\sl ideal\/}
+\def\INI{\tt initex}
+\def\PIC{\sl pic\/}
+\def\TBL{\sl tbl\/}
+\def\EQN{\sl eqn\/}
+\def\PS{\sl PostScript\/}
+\def\DDL{\sl DDL\/}
+\def\IP{\sl Interpress\/}
+\def\SB{\sl Scribe\/}
+\def\TF{\sl troff\/}
+\def\VI{\sl vi\/}
+\def\VIR{\tt virtex}
+\def\unix{\sc UNIX}
+\def\TG{\sl Tioga\/}
+\def\GG{\sl Gargoyle\/}
+\def\ST{\sl Star\/}
+\def\CD{\sl Cedar\/}
+\def\AD{\sl Andrew\/}
+\def\DI{\sl Diamond\/}
+\def\IPS{\sl Interleaf Publishing System\/}
+\def\FM{\sl FrameMaker\/}
+\def\PM{\sl PageMaker\/}
+\def\RSG{\sl Ready-Set-Go!\/}
+\def\WD{\sl MicroSoft Word\/}
+\def\CW{\sl CricketDraw\/}
+\def\TW{\sl Tweedle\/}
+\def\JN{\sl Juno\/}
+\def\JAN{\sl Janus\/}
+\def\SP{\sl Sketchpad\/}
+\def\TL{\sl ThingLab\/}
+\def\MT{\sl Mint\/}
+\def\LR{\sl Lara\/}
+\def\W{\sc WYSIWYG}
+\def\NW{\sl NeWS\/}
+\def\QL{\sl Quill\/}
+\def\LL{\sl Lilac\/}
+\def\TNT{\sl tnt\/}
+\def\PI{\sl Pico\/}
+\def\QD{\sl QuickDraw\/}
+\def\VP{\sl Ventura Publisher\/}
+\def\MI{\sl MakeIndex\/}
+\def\SGML{\sl SGML\/}
+\def\IS{\sl Interscript\/}
+\def\ODA{\sl ODA\/}
+
+\def\BF#1{{\bf #1}}
+\def\IT#1{{\it #1\/}}
+\def\SL#1{{\sl #1\/}}
+\def\RM#1{{\rm #1}}
+\def\TT#1{{\tt #1}}
+
+\def\IF{{\bf if}}
+\def\ELSE{{\bf else}}
+\def\ELIF{{\bf else if}}
+\def\WHILE{{\bf while}}
+\def\FOR{{\bf for}}
+\def\DO{{\bf do}}
+\def\UNTIL{{\bf until}}
+\def\LOOP{{\bf loop}}
+\def\RETURN{{\bf return}}
+\def\CONTINUE{{\bf continue}}
+\def\TRUE{{\bf true}}
+\def\FALSE{{\bf false}}
+\def\NOT{{\bf not}}
+\def\AND{{\bf and}}
+\def\OR{{\bf or}}
diff --git a/indexing/makeindex/paper/regmar.sty b/indexing/makeindex/paper/regmar.sty
new file mode 100644
index 0000000000..38d586cee7
--- /dev/null
+++ b/indexing/makeindex/paper/regmar.sty
@@ -0,0 +1,44 @@
+%
+% "moretext" document style option.
+% Jean-Francois Lamy, July 86
+%% Date: 07 Sep 86 20:49:56 EDT (Sun)
+%% From: Jean-Francois Lamy <lamy%utai.toronto.edu@RELAY.CS.NET>
+%
+% Redefines the margins so that they are more in line with
+% what we are used to see.
+%
+
+\ifcase \@ptsize
+ % mods for 10 pt
+ \oddsidemargin 0.15 true in % Left margin on odd-numbered pages.
+ \evensidemargin 0.35 true in % Left margin on even-numbered pages.
+ \marginparwidth 1 true in % Width of marginal notes.
+ \oddsidemargin 0.25 true in % Note that \oddsidemargin = \evensidemargin
+ \evensidemargin 0.25 true in
+ \marginparwidth 0.75 true in
+ \topmargin 0 true pt % Nominal distance from top of page to top of
+ \textheight 8 true in % Height of text (including footnotes and figures)
+ \textwidth 5.875 true in % Width of text line.
+\or % mods for 11 pt
+ \oddsidemargin 0.1 true in % Left margin on odd-numbered pages.
+ \evensidemargin 0.15 true in % Left margin on even-numbered pages.
+ \marginparwidth 1 true in % Width of marginal notes.
+ \oddsidemargin 0.125 true in % Note that \oddsidemargin = \evensidemar
+ \evensidemargin 0.125 true in
+ \marginparwidth 0.75 true in
+ \topmargin 0 true pt % Nominal distance from top of page to top of
+ \textheight 8 true in % Height of text (including footnotes and figures)
+ \textwidth 6.125 true in % Width of text line.
+\or % mods for 12 pt
+ \oddsidemargin -10 true pt % Left margin on odd-numbered pages.
+ \evensidemargin 10 true pt % Left margin on even-numbered pages.
+ \marginparwidth 1 true in % Width of marginal notes.
+ \oddsidemargin 0 true in % Note that \oddsidemargin = \evensidemargi
+ \evensidemargin 0 true in
+ \marginparwidth 0.75 true in
+ \topmargin 0 true in % Nominal distance from top of page to top of
+ \textheight 8 true in % Height of text (including footnotes and figures)
+ \textwidth 6.375 true in % Width of text line.
+\fi
+
+\def\baselinestretch{1.5} % overwrite baselineskip
diff --git a/indexing/makeindex/paper/undhead.sty b/indexing/makeindex/paper/undhead.sty
new file mode 100644
index 0000000000..3e6859c2a3
--- /dev/null
+++ b/indexing/makeindex/paper/undhead.sty
@@ -0,0 +1,6 @@
+% Modifications to LaTeX
+
+% Underline page headings
+\def\ps@phcheadings{\def\@oddhead{\vbox{\hbox{}\sl\rightmark \hfil\rm\thepage\break\smallskip\hrule}}\def\@oddfoot{}
+\def\@evenhead{\vbox{\rm \thepage\hfil \sl\leftmark\hbox {}\break\smallskip\hrule}}
+\def\@evenfoot{}\def\sectionmark##1{}\def\subsectionmark##1{}}
diff --git a/indexing/makeindex/src/LOG b/indexing/makeindex/src/LOG
new file mode 100644
index 0000000000..7d31a56dd4
--- /dev/null
+++ b/indexing/makeindex/src/LOG
@@ -0,0 +1,554 @@
+ Revision History for MakeIndex
+
+This is a reverse time-ordered history of changes to MakeIndex.
+
+-----------------------------------------------------------------
+[19-Oct-1991]
+ Merged in small set of changes into mkind.c and mkind.h for
+ IBM VM/CMS support. Since there are no operational changes,
+ and 2.11 has only been distributed to the beta test list,
+ I'm leaving the version number at 2.11, and advancing the date.
+
+[11-Sep-1991]
+ Version 2.11 released by Nelson H.F. Beebe <beebe@math.utah.edu>
+
+ This version incorporates feedback from test sites for 2.10,
+ and importantly, replaces memory-gobbling fixed strings in the
+ index entries with dynamically-allocated strings, reducing the
+ storage per entry from 1844 bytes to 80 bytes + actual string
+ lengths. For details, see the new NOTES file. The use of
+ dynamic strings now lets MakeIndex 2.11 process all of the
+ entries in test/b209f.idx; with MakeIndex 2.10 and earlier, 6
+ were rejected because of long fields.
+
+ Reorder two lines in doc/makeindex.l to avoid single quote at
+ beginning of line, which nroff and troff then lose.
+
+ Move typeout of version string in mkind.c to before parsing of
+ style file; otherwise, MakeIndex can terminate with an error
+ message before identifying itself.
+
+ Correct argument parsing in mkind.c to check for a following
+ argument before assuming it is there.
+
+ Change long macro PUT_HEADER in genind.h to function
+ put_header() in genind.c; it was too long for some compilers.
+
+ Correct bad args to STY_ERROR2() in scanst.c (had LINE_MAX
+ instead of LINEMAX).
+
+ Correct array dimension in flush_line() in genind.c from
+ tmp[LINE_MAX] to tmp[sizeof(buff)]; long index entries
+ otherwise overwrote stack storage.
+
+ Correct array dimension in mkind.c from pageno[STRING_MAX] to
+ pageno[NUMBER_MAX].
+
+ Correct array dimension in scanid.c from keyword[STRING_MAX]
+ to keyword[ARRAY_MAX].
+
+ Correct two array dimensions in genind.c from 2*STRING_MAX to
+ 2*ARGUMENT_MAX.
+
+ Document array sizes xxx_MAX in mkind.h (note above corrections).
+
+ Add more code in scanid.c to check for overflow of field[]. A
+ case was found where overwriting occurred if an idx_escape is
+ found when i == ARRAY_MAX - 1. In this new version, the length
+ is no longer ARRAY_MAX, but is passed as an additional argument
+ to the function scan_field().
+
+ In sortid.c, change type of idx_gc from `int' to `long' to avoid
+ integer overflow or wraparound when there are more than 32767
+ (or whatever the host INT_MAX value is) comparisons.
+
+ Change two tests in scanid.c in scan_roman_lower() and
+ scan_roman_upper() from "if (... && (new = ...))" to
+ "if (... & ((new = ...) != 0))" to suppress compiler warnings on
+ some systems about possible error in use of = instead of ==.
+
+ Add test/b211a.idx to test MakeIndex with very long
+ index fields near, at, and beyond the standard internal array
+ dimensions.
+
+ Add test/b211b.{idx,ist} to test MakeIndex with the German
+ sort option.
+
+ Add missing "level = i;" in genind.c; this fixes an obscure bug
+ that is seen only when certain style files are used. The
+ test/b211b.idx file tests the fix.
+
+ Lattice has gone out of business, so the files src/make-lc.bat
+ and src/makefile.lc are in some sense obsolete, and will receive
+ no further maintenance. They are retained in the distribution
+ for now because some sites may still be using that compiler.
+
+ Revise scanid.c to permit idx_quote (by default, a quotation
+ mark) to quote ANY input character in the first argument to
+ the indexentry macro. Revise sortid.c to use unsigned char
+ data for sorting, removing architecture dependence. This also
+ requires a change in the TOLOWER and TOUPPER macros in mkind.h.
+ This is an important extension to MakeIndex: it permits sort
+ keys to be created for all ASCII characters, including braces
+ and others that otherwise have significance to MakeIndex (by
+ default, @, |, !). It also permits the user to get characters
+ 1..255 into the actual field; this will be important for TeX
+ 3.0 which can support a 256-character set. Character 0 cannot
+ be easily supported, because it is a string terminator in C,
+ the language in which MakeIndex is currently implemented. A
+ future extension might support an escape mechanism for it.
+ Too bad MakeIndex was not originally designed to support
+ C-like \ooo (octal) and \xhh (hexadecimal) escape sequences!
+ The file test/b211e.idx tests the sorting and display of all
+ characters in 1..255, and the file test/b211e.ltx typesets the
+ test index. Because Ctl-Z is an end-of-file marker in PC DOS
+ text files, test/b211h.idx is derived from test/b211e.idx by
+ removing the line with that character, and used in dosdiff.bat
+ in place of b211e. Note that MakeIndex collates space and the
+ characters in 1..31 and 127..255 somewhat differently than
+ ASCII. The MakeIndex order is:
+
+ punctuation characters (in ASCII order),
+ digits,
+ control characters (1..31),
+ space (32),
+ letters (ignoring case),
+ characters 127 .. 255.
+
+ In prepare_idx() in mkind.c, add a check for a NULL `head';
+ this can arise if the input file is garbage (e.g. you type
+ makeindex foo, meaning foo.idx, but a foo file already exists,
+ and is used instead of foo.idx). Without this check, a NULL
+ pointer is subsequently dereferenced, with core dumps on some
+ machines. The problem really lies in process_index() in
+ mkind.c, where idx_tc gets incremented before we know we have
+ a valid entry, such that in main(), idx_gt gets set to 1, when
+ `head' is still NULL. It seems easier to catch this error in
+ prepare_idx() instead of process_index().
+
+ Add additional architecture-specific targets to Makefile
+ to incorporate the compiler switches shown under the 2.10
+ LOG file entry below.
+
+ The book.idx file is still too big for a Turbo C 2.0 compiled
+ version of MakeIndex 2.11 on MS DOS to handle.
+
+ Fix several loops that called GET_CHAR() without checking
+ for an EOF result (genind.c, mkind.c, mkind.h, scanid.c,
+ scanst.h).
+
+ Fix range handling error in compare_page() in sortid.c; the file
+ test/b211f.idx tests that the fix is correct.
+
+ Incorporate bug repairs from:
+
+ Eberhard Mattes <mattes@azu.informatik.uni-stuttgart.de>
+
+ Mark James <mark@bdblues.altair.fr>, <mark@nuri.inria.fr>
+
+-----------------------------------------------------------------
+[05-Jul-1991]
+ Version 2.10 released by Nelson H.F. Beebe <beebe@math.utah.edu>
+
+ Testing of this version has been carried out on these systems:
+
+ =================================== =================
+ System Compile Defines
+ =================================== =================
+ Apollo DN/10000 -DOS_SYSV -U__STDC__
+ DECstation Ultrix 4.2
+ HP 375 (4.3BSD)
+ HP 9000/720 (HP-UX, System V UNIX) -DOS_SYSV
+ HP 9000/850S (HP-UX, System V UNIX) -DOS_SYSV
+ IBM 3090/600S-VF AIX -D_BSD
+ IBM PC DOS
+ IBM RS/6000 AIX 3.1
+ NeXT Mach
+ Silicon Graphics 4D-240 -DOS_SYSV
+ Stardent 1520 UNIX Release 2.2
+ SunOS 4.1.1 (BSD UNIX)
+ VAX VMS 5.3
+ =================================== =================
+
+ This version addresses all outstanding bug reports that I am
+ aware of, and brings the code completely up to the level of
+ Standard C (ANSI X3.159-1989 Programming Language--C, ISO C
+ 1990).
+
+ In test/, rename long filenames to shorter ones, and add
+ several new test files, and a Makefile to automate the testing
+ of a new version on UNIX.
+
+ Add a README file with compilation instructions.
+
+ In mkind.c, mkind.h, and scanst.c, rename LONG_MAX to
+ ARRAY_MAX. LONG_MAX is used in Standard C for the largest
+ long integer.
+
+ In mkind.h, drop IBM_PC_LATTICE. There were no uses of it
+ elsewhere in the code, and Lattice is no longer in business, and
+ Microsoft C and Turbo C are now the major compilers on PC DOS
+ (Waterloo and TopSpeed lag far behind). Existing support for
+ TOPS-20 will be retained for now, even though by the end of
+ 1991, there may not be any more TOPS-20 systems alive; ours was
+ retired 31-Oct-1990, and the American Mathematical Society's on
+ 31-Mar-1991.
+
+ In mkind.h, except in OS_PCDOS, increase STRING_MAX from 128 to
+ 256, and in genind.c, change dimensions of 2*LINE_MAX to
+ 2*STRING_MAX. Anita Hoover <anita@brahms.udel.edu> reported a
+ need for this.
+
+ Fix sort bug reported by Andreas Brosig <brosig@gmdzi.gmd.de>
+ and Ed Sznyter <ews@Pescadero.Stanford.EDU>. This bug was
+ introduced in sortid.c at version 2.8 by the fix for another
+ bug. The code in compare_page() did not handle the case where
+ two entries were the same in index fields and page numbers, but
+ differed in their encap fields. The resulting incorrect
+ comparison could then later cause bogus page ranges to be
+ produced. Test file b209e.idx has been included for future
+ testing. From version 2.10, bugs reported in version x.yy will
+ have files test/bxyy*.idx (* = a, b, ...) that will be preserved
+ for regression testing.
+
+ In doc/, in the manual page file, makeindex.l, alphabetize
+ command-line switch descriptions, correct some spelling errors,
+ and add new descriptions. Add a Makefile and targets to
+ automatically create the .dvi, .hlp, .info, .ps, and .vms files,
+ and to install and uninstall the manual pages. The .hlp, .info,
+ .ps, and .vms files will be included with the distribution since
+ they can be generated only on some UNIX systems.
+
+ In paper/, add a Makefile, and create LaTeX picture mode
+ equivalent of fig1.ps, so that ind.tex can be formatted and
+ printed at any TeX installation. Remove the old output
+ PostScript file, ind.ps, saving 300KB of disk space, since it is
+ no longer needed.
+
+ Incorporate additional contributions from:
+
+ Johannes Braams <braams@hlsdnl5.bitnet> (bug fixes for
+ VAX VMS)
+
+ Joachim Schrod <xitijsch@ddathd21.bitnet> (2.9.1
+ changes)
+
+ Rainer Schoepf <bk4@dhdurz1.bitnet> (more Atari TOS
+ changes)
+
+ Eberhard Mattes <mattes@azu.informatik.uni-stuttgart.de>
+ (OS/2 Makefile and .def description file)
+
+ Richard P. C. Rodgers <rodgers@maxwell.mmwb.ucsf.edu>
+ (manual page additions)
+
+------------------------------------------------------------------------
+[22-Jun-1990]
+ Version 2.9.1 by Joachim Schrod <xitijsch@ddathd21.bitnet>
+
+ Testing carried out on:
+ PC DOS Microsoft C 5.1
+ BSD Sun OS 4.0 cc
+ gcc 1.37.1
+ System V R3 MUNIX cc
+ IBM AIX/2 cc
+ IBM AIX/370 cc
+
+ Added difference between BSD (OS_BSD) and System V R3 (OS_SYSV).
+ Deleted UNIX (OS_UNIX).
+
+ There doesn't exist a single `UNIX' system, e.g. the naming of
+ index/rindex versus strchr/strrchr may be called a `cultural
+ difference'.
+
+ Updated comments concerning the preprocessor constants to reflect
+ the actual state of the source.
+
+ Please note that the Atari port seems to be incorrect; look for
+ FIXME in mkind.h.
+
+ By the way, it is not mentioned what compiler is used on the
+ Atari -- it is one that uses index/rindex.
+
+-----------------------------------------------------------------
+[12-Dec-1989]
+ Version 2.9 released by Nelson H.F. Beebe <beebe@math.utah.edu>
+
+ Testing carried out on:
+ PC DOS Microsoft C 5.0, Turbo C 2.0, Lattice C 6.02
+ TOPS-20 KCC-20 and PCC-20
+ UNIX Sun OS 4.0.3 cc and gcc 1.36
+ VAX ULTRIX-32 cc
+ VAX VMS VMS C 2.3
+
+ Added support for Turbo C 2.0 and Lattice C 6.02 on IBM PC DOS.
+
+ Although compilation and linking were successful with Lattice
+ C, the executable produced a 'Not enough core...abort' message
+ at run time under the D, L, and H memory models. Replacing
+ malloc(n) calls by halloc(1L,n) did not remove the problem;
+ debugging statements (selected by defining DEBUG at compile
+ time) showed that calls to malloc() and calloc() allocated
+ less than 15KB before the abort. Curiously, a separate little
+ test program that allocated 1000-byte blocks with malloc() or
+ calloc() could allocate over 55KB in the small memory model,
+ and over 500KB in the large models, before aborting. Thus, we
+ conclude for now that Lattice C 6.02 is not usable for
+ MakeIndex.
+
+ Added ARGS macro to simplify function declarations in ANSI and
+ pre-ANSI styles.
+
+ Added missing definition of OS_XENIX in mkind.h.
+
+ Moved declarations of static functions from mkind.h to relevant
+ *.c files to remove compiler warnings about declared, but unused,
+ objects.
+
+ Removed a couple of unreachable break statements that raised
+ compiler warnings.
+
+ Use ANSI strchr/strrchr instead of K&R index/rindex; the former
+ are #defined to the latter for systems that have only the old
+ names.
+
+ Fixed scan_arabic() in scanid.c to allow ARABIC_MAX digits,
+ instead of one less than that, and fix condition on which the
+ error message about too many Arabic digits is triggered.
+
+ Repair widespread confusion between NUL (the character '\0'),
+ and NULL (the pointer). NUL is a user-definable name, while
+ NULL is defined by the implementation; on segmented memory
+ machines, pointers and integers need not be equivalent, so it
+ may hold that NULL != NUL. Previous versions of MakeIndex used
+ NULL to mean both, and redefined NULL to be '\0'. In general,
+ NULL must be typecast to a pointer of the appropriate type,
+ since under ANSI C, it will usually be defined to be something
+ like (void*)0 or (void*)0L.
+
+-----------------------------------------------------------------
+[11-Nov-1989]
+ Version 2.8 released by Pehong Chen <chen@renoir.berkeley.edu>.
+ (1) ARABic_MAX changed from 4 to 5, duo to Sebastian Rahtz's
+ <spqr%ecs.southampton.ac.uk@NSFnet-Relay.AC.UK> report
+ on TeXhax #87 (9/17/1989).
+ (2) A nasty sorting bug was fixed due to a report from
+ Martha Wershofen-Mersbach <GRZTEX%dbngmd21.bitnet@NET.BIO.NET>
+ of the German National Research Center For Computer Science (GMD).
+ (3) Siemens BS2000 ported done by Andreas Brosig of the German
+ National Research Center For Computer Science (GMD).
+ (4) German word ordering, the "-g" option contributed by Brosig.
+ (5) Miscellaneous bug fixes by Brosig:
+ A. Blank compression routine ("-c") fixed.
+ B. The "-p" option now works for MSDOS and MVS. Have to open
+ logfile in binary mode for OS_PCDOS and add OS_MVSXA to an
+ existing #if because fseek(...) does not work under MVS.
+ C. If an indexentry contains more than 2 IDX_LEVEL '!' or more
+ than 3 IDX_ACTUAL '@', MakeIndex would ignore this entry
+ and writes "Extra ... at position ..." to the transcript file.
+ This is now fixed.
+ D. If an indexentry is too long (> STRING_MAX), MakeIndex would
+ ignore it and write a message to the transcript file.
+ This is now fixed.
+ E. For MSDOS(OS_PCDOS) LONG_MAX is set back to 144
+ and STRING_MAX to 64. Otherwise a core error will occur
+ in the case of a big IDX-file.
+
+-----------------------------------------------------------------
+[1-Oct-1988]
+ Version 2.7 released by Pehong Chen <chen@orc.olivetti.com>.
+ (1) Fixed a string printing bug reported by anita@brahms.udel.edu
+ through Leslie Lamport. The string should be an argument
+ to the printf format, instead of the format itself.
+
+-----------------------------------------------------------------
+[14-Jul-1988]
+ Version 2.6 released by Pehong Chen <chen@orc.olivetti.com>.
+ (1) The documentation for UNIX man page makeindex.l went through
+ revision by Rick P. C. Rodgers of UCSF <rodgers@cca.ucsf.edu>.
+ Rick also provided a sample style file for MakeIndex to work
+ with troff (see the man page for details).
+ (2) String length (LONG_MAX) was increased from 144 to 1024.
+ (3) Fixed a letter heading bug. It used to put the heading
+ below the first index entry.
+ (4) Added a new feature, the terminating delimiter for page list.
+ This delim_t string is null by default. It can be redefined
+ as a period if one would like a page list to be terminated
+ by a period, for example. This delimeter has no effect
+ on an index entry which does not have any page number
+ associated with it.
+
+-----------------------------------------------------------------
+[14-Apr-1988]
+ Version 2.5 released by Pehong Chen <phc@berkeley.edu>,
+ with VAX/VMS extensions by
+ Charles Karney
+ Plasma Physics Laboratory Phone: +1 609 243 2607
+ Princeton University MFEnet: Karney@PPC.MFEnet
+ PO Box 451 ARPAnet: Karney%PPC.MFEnet@NMFECC.ARPA
+ Princeton, NJ 08543-0451 Bitnet: Karney%PPC.MFEnet@ANLVMS.Bitnet
+ The file VMSmake.com for VAX/VMS users who don't have make.
+ This version also includes a fix under XENIX by
+ Baron O.A. Grey UCLA Computer Science Department
+ baron@CS.UCLA.EDU ...!(ucbvax,ihnp4)!ucla-cs!baron
+
+-----------------------------------------------------------------
+[20-Mar-1988]
+ Version 2.4 released by Pehong Chen <phc@berkeley.edu>,
+ the ``official'' version of MakeIndex that enters public domain.
+
+ * length() (originally defined in mkind.c) is replaced by
+ the standard function strlen(), which in some C implementations
+ is, or can be, expanded to in-line efficient hardware instructions
+ (e.g. Microsoft C and VAX Unix); I have not yet done this.
+
+-----------------------------------------------------------------
+[20-Jan-1988]
+ Portable version 2.3 released by Nelson H.F. Beebe
+ <beebe@math.utah.edu>.
+
+ I spent 3 days implementing MakeIndex on Sun OS3.3 Unix
+ (cc and gcc), TOPS-20 (KCC-20 and PCC-20 compilers), PC
+ DOS (Microsoft C Version 5.0), and VAX VMS. This was at
+ times a frustrating experience, because the effort
+ revealed a great many portability problems in the
+ original code (from VAX Unix, I think), plus some genuine
+ bugs in MakeIndex, plus a bug in each of two compilers
+ (KCC-20 and PCC-20)!
+
+ The changes for this version over 2.2 are exclusively bug
+ fixes and portability enhancements. Thanks to the
+ original authors' careful design, no functionality
+ changes are likely to be necessary.
+
+ Besides getting the code working correctly on 4 systems
+ and 6 compilers, I have made several passes over the code
+ to reduce the lint complaints to a minimum, and remove
+ all of the warnings produced by the IBM PC Microsoft C
+ Version 5.0 compiler, which is the only one of the above
+ systems which completely implements October 1986 draft
+ ANSI C; the ANSI function prototype checking caught
+ numerous problems.
+
+ With these changes, I believe that we now have a version
+ of MakeIndex that satisfies the important goal of TeX --
+ the same input will produce identical output results on
+ all machines, whether they be micros, minis, mainframes,
+ or supercomputers. This is true at least for the 6
+ systems for which testing has been possible at Utah.
+
+ Here is a summary of bug corrections and other changes:
+
+ * Several routines fell off the end without returning a
+ value, when the caller expected it; this was particularly
+ hard to trace (2 days of effort--the code only failed on
+ PCC-20, and work correctly with the other 4).
+
+ * Equivalence of *short and *int was incorrectly assumed
+ in one routine; this made the code dependent on the byte
+ storage order (it works on the little-Endian VAX
+ architecture, but will fail on big-Endian architectures
+ (IBM et al)).
+
+ * Equivalence of *int and *char was incorrectly assumed
+ in the call to qsort(); the only one of the 6 compilers
+ which uses a different format for *char values is KCC-20,
+ and that feature caught this bug (the compiler didn't
+ find it for me, but when the sort failed, I tracked it down).
+
+ * Routines which do not return a value are now explicitly
+ typed `void' instead of nothing or `int', and mkind.h has
+ both K&R old-style and new ANSI style function
+ declarations for all routines; the choice is made on the
+ basis of the compiler and operating-system switch
+ selections.
+
+ * A single (incorrect) use of backslash-dot (\.) escape
+ sequence in scanid.h has been reduced to dot (.).
+
+ * exit() was called without a valid argument in mkind.h.
+
+ * In several places, code of the form
+ char c;
+ while ((c = getchar()) != EOF)
+ existed; this is incorrect and will fail on many machines
+ when the EOF (== -1) value returned by getchar() is
+ truncated to a byte value for storage in c, then extended
+ to an integer again and compared with EOF. The correct
+ approach is to use "int c;" instead of "char c;". Type
+ declarations have been changed from "short" or "int" to
+ "char" or vice versa in several places in order to
+ achieve consistency, and explicit typecasts are used when
+ data types are intentionally changed by assignment or
+ argument association.
+
+ * mkind.h now has a SHORTNAMES section to define short
+ names for the 45 long ones which clash when reduced to 6
+ characters (although KCC-20 and PCC-20 both handle long
+ names, they produce assembly code output, and the
+ assembler limits names to 6 case-insensitive chars).
+
+ * File names have been reduced to 6 characters, allowing
+ the source to be ported to all of the above systems
+ without tedious file renaming. The TOPS-20 LINK program
+ also runs under TOPS-10, and because TOPS-10 has a
+ 6-character file name limit, LINK-20 does too, sigh...
+ The executable is called makeindex on all systems except
+ PC DOS, where the 8-character limit reduces it to
+ makeindx. Similarly, filenames with special characters
+ (ind+ and ind-) have been renamed to portable names.
+
+ * Reference to sys/file.h has been eliminated; it was
+ only needed for the symbol R_OK passed to access().
+ sys/file.h is missing from most non-Unix C
+ implementations, while the value of R_OK (4) for access()
+ is consistent for all but PCC-20, where only F_OK (0) is
+ implemented.
+
+ * Makefiles have been produced for each of the above
+ systems (I have the same version of a public-domain make
+ running on all of them).
+
+ * A public version of qsort.c has been included in
+ MakeIndex for two reasons. First, some non-Unix C
+ implementations lack it. Second, quicksort is not a
+ `stable' sorting algorithm; that is, the order of items
+ with equal keys is not necessarily identical between the
+ input and the output. Different implementations of the
+ sort algorithm in the host qsort() can therefore give
+ different ordering in such cases (PCC-20 and KCC-20
+ differed, which is how I caught this). qsort is
+ #define'd to qqsort for all systems, in order to avoid
+ possible clashes with the standard library version (this
+ happens with IBM PC Microsoft C and with VAX VMS).
+
+ * Version 2.2 did not come with any documents containing
+ index entries to test MakeIndex with. I have taken the
+ liberty of preparing an index for Leslie Lamport's
+ article, ../doc/makeindex.tex for a test version,
+ ../test/test.tex. This can be used both to test MakeIndex,
+ as well as to illustrate the production of an index for
+ new users (I'm using it in a class that I am teaching on
+ LaTeX). test.tex uses the showidx document style option
+ to get the index entries displayed as marginal notes, and
+ the index entries in test.tex have been carefully
+ formatted to always begin a line; that way, they can be
+ easily extracted (e.g. by grep), so that one can see the
+ original entries, the LaTeX output .idx file, and the
+ MakeIndex output .ind file.
+
+ * The bug fix for PCC-20 has been posted to the TOPS-20
+ bulletin board; PCC-20 was developed at CS.UTAH.EDU, but
+ we (SCIENCE.UTAH.EDU) now have their DEC-20, so I guess
+ we have become the default PCC bug-fix site. The bug in
+ KCC-20's preprocessor has been reported to the KCC
+ developers at SRI-NIC.ARPA but cannot be easily fixed
+ until the draft ANSI C support in KCC-20 is complete; in
+ the meantime, conditional compilation is used to provide
+ alternate code which compiles correctly.
+
+-----------------------------------------------------------------
+[29-May-1987]
+ Version 2.2 (5/29/1987) released by Pehong Chen <phc@berkeley.edu>.
+
+-----------------------------------------------------------------
diff --git a/indexing/makeindex/src/Makefile b/indexing/makeindex/src/Makefile
new file mode 100644
index 0000000000..d833e47765
--- /dev/null
+++ b/indexing/makeindex/src/Makefile
@@ -0,0 +1,357 @@
+#=======================================================================
+# Makefile for the program `makeindex'
+#
+# Copyright (C) 1987 Pehong Chen (phc@renoir.berkeley.edu)
+# Computer Science Division
+# University of California, Berkeley
+#
+# On many UNIX systems, do
+# make
+# to build MakeIndex, and
+# make install
+# to install it. You may need to modify BINDIR, MANDIR, and MANEXT
+# for your system.
+#
+# For systems that require different compile flags, there are
+# additional targets apollo .. vms that can be used, e.g.
+# make hp720
+#
+# Current target list:
+# all
+# $(BINDIR)/$(PROGRAM)
+# distclean
+# depend
+# dist
+# index
+# install
+# man
+# mostlyclean
+# print
+# program
+# $(PROGRAM)
+# realclean
+# reallyclean
+# shar
+# tar
+# tags
+# TAGS
+# test
+# uninstall
+# update
+#
+# apollo
+# du42
+# du43
+# du42-gcc
+# du43-gcc
+# du42-lcc
+# du43-lcc
+# hp375
+# hp720
+# hp850
+# hp850-c89
+# ibm370
+# ibm370-c++
+# ibmpc
+# ibmps2
+# ibmrs6000
+# ibmrs6000-c++
+# mips
+# next
+# next-g++
+# next-objc
+# sgi
+# sgi-c++
+# sgi-g++
+# solaris
+# solaris-apcc
+# solaris-c++
+# solaris-g++
+# stardent
+# sun
+# sun-apcc
+# sun-c++
+# sun-g++
+# vms
+#
+# [26-May-1993] -- update for 2.12beta release (add GNU Project
+# standard targets, alphabetize macros and targets,
+# replace use of install command)
+# [20-Apr-1993] -- remove references to system include files
+# [07-Aug-1991]
+#=======================================================================
+
+ALL = $(MAKEFILE) $(DOC) $(MANUAL) $(HDRS) $(SRCS)
+
+BINDIR = /usr/local/bin
+
+CFLAGS = -O
+
+CHMOD = chmod
+
+CP = /bin/cp
+
+DOC = makeindex.tex
+
+#EXTHDRS = /usr/include/ctype.h \
+# /usr/include/stdio.h
+
+HDRS = genind.h \
+ mkind.h \
+ scanid.h \
+ scanst.h
+
+LDFLAGS = $(CFLAGS)
+
+LIBS =
+
+LINKER = $(CC)
+
+MAKEFILE = Makefile
+
+MANDIR = /usr/local/man/man1
+
+MANEXT = 1
+
+MANUAL = makeindex.l
+
+OBJS = genind.o \
+ mkind.o \
+ qsort.o \
+ scanid.o \
+ scanst.o \
+ sortid.o
+
+PRINT = psgrind
+
+PROGRAM = makeindex
+
+RM = /bin/rm -f
+
+SHAR = $(PROGRAM).shar
+
+SHELL = /bin/sh
+
+SRCS = genind.c \
+ mkind.c \
+ qsort.c \
+ scanid.c \
+ scanst.c \
+ sortid.c
+
+STRIP = strip
+
+TAR = $(PROGRAM).tar
+
+#=======================================================================
+
+all: $(PROGRAM)
+
+$(BINDIR)/$(PROGRAM): $(SRCS) $(HDRS) $(EXTHDRS)
+ @$(MAKE) -f $(MAKEFILE) BINDIR=$(BINDIR) install
+
+clean mostlyclean:
+ -$(RM) $(OBJS)
+ -$(RM) $(PROGRAM)
+ -$(RM) *.out
+ -$(RM) *~
+ -$(RM) \#*
+ -$(RM) core
+
+clobber realclean reallyclean: clean
+
+distclean: clobber
+ -$(RM) $(SHAR) $(TAR) tags TAGS
+
+depend:
+ -@$(RM) -f .#*.[chly]
+ mkmf -f $(MAKEFILE) PROGRAM=$(PROGRAM) BINDIR=$(BINDIR)
+
+dist:
+ $(CP) $(PROGRAM) $(BINDIR)
+ rcp $(PROGRAM) monet:$(BINDIR)
+ rcp $(PROGRAM) arpa:$(BINDIR)
+ rcp $(PROGRAM) harrison@vangogh:bin
+
+index:
+ @ctags -wx $(HDRS) $(SRCS)
+
+install: $(PROGRAM)
+ $(CP) $(PROGRAM) $(BINDIR)/$(PROGRAM)
+ $(STRIP) $(BINDIR)/$(PROGRAM)
+ $(CHMOD) 0755 $(BINDIR)/$(PROGRAM)
+ $(CP) ../doc/$(MANUAL) $(MANDIR)/makeindex.$(MANEXT)
+ $(CHMOD) 0744 $(MANDIR)/makeindex.$(MANEXT)
+ @ls -lgs $(BINDIR)/$(PROGRAM) $(MANDIR)/makeindex.$(MANEXT)
+
+man:
+ ptroff -man $(MANUAL)
+
+print:
+ @$(PRINT) $(HDRS) $(SRCS)
+
+program: $(PROGRAM)
+
+$(PROGRAM): $(OBJS)
+ -@$(RM) -f $(PROGRAM)
+ $(LINKER) $(LDFLAGS) $(OBJS) $(LIBS) -o $(PROGRAM)
+ @size $(PROGRAM)
+
+shar:
+ -@$(RM) -f $(SHAR)
+ shar $(SHAR) $(ALL)
+
+tar:
+ -@$(RM) $(TAR)
+ tar -cf $(TAR) $(ALL)
+
+tags: $(HDRS) $(SRCS)
+ @ctags $(HDRS) $(SRCS)
+
+TAGS: $(HDRS) $(SRCS)
+ @etags $(HDRS) $(SRCS)
+
+test: $(PROGRAM)
+ cd ../test ; $(MAKE)
+
+uninstall:
+ -$(RM) $(BINDIR)/$(PROGRAM)
+ -$(RM) $(MANDIR)/makeindex.$(MANEXT)
+
+update: $(BINDIR)/$(PROGRAM)
+
+.DEFAULT:
+ co $@
+
+#=======================================================================
+# Machine-specific targets to simplify installation when additional
+# compile flags are needed.
+#
+# Apollo DN/10000
+apollo:
+ $(MAKE) CFLAGS='-DOS_SYSV -U__STDC__' $(PROGRAM)
+
+# DECstation Ultrix 4.2 and 4.3
+du42 du43: all
+
+# DECstation Ultrix 4.2 and 4.3 with gcc
+du42-gcc du43-gcc:
+ $(MAKE) CC=gcc $(PROGRAM)
+
+# DECstation Ultrix 4.2 and 4.3 with lcc
+du42-lcc du43-lcc:
+ $(MAKE) CC=lcc CFLAGS= $(PROGRAM)
+
+# HP 375 (4.3BSD)
+hp375: all
+
+# HP 9000/720 (HP-UX, System V UNIX)
+hp720:
+ $(MAKE) CFLAGS='-DOS_SYSV' $(PROGRAM)
+
+# HP 9000/850S (HP-UX, System V UNIX)
+hp850:
+ $(MAKE) CFLAGS='-DOS_SYSV' $(PROGRAM)
+
+# HP 9000/850S (HP-UX, System V UNIX) with Standard C compiler
+hp850-c89:
+ $(MAKE) CC=c89 CFLAGS='-DOS_SYSV' $(PROGRAM)
+
+# IBM 3090/600S-VF AIX
+ibm370:
+ $(MAKE) CFLAGS='-D_BSD' $(PROGRAM)
+
+# IBM 3090/600S-VF AIX with C++
+ibm370-c++:
+ $(MAKE) CC-'CC +a1 +p +w -D_POSIX_SOURCE -Hansi -D__STDC__ \
+ -D_BSD -D_AIX -D_AIX370' CFLAGS='-D_BSD' $(PROGRAM)
+
+# IBM PC DOS
+ibmpc: all
+
+# IBM PS/2 AIX 2.1
+ibmps2: all
+
+# IBM PS/2 AIX 2.1 with C++
+ibmps2-c++:
+ $(MAKE) CC='CC +a1 +p +w -D_POSIX_SOURCE -Hansi -D__STDC__ \
+ -D_BSD -D_AIX -Dps2' CFLAGS='-D_BSD' $(PROGRAM)
+
+# IBM RS/6000 AIX 3.1
+ibmrs6000:
+ $(MAKE) $(PROGRAM)
+
+# IBM RS/6000 AIX 3.1 with C++
+ibmrs6000-c++:
+ $(MAKE) CC=xlC $(PROGRAM)
+
+# MIPS R6000 RISC/os 5.0
+mips:
+ $(MAKE) CFLAGS='-DOS_SYSV -O' $(PROGRAM)
+
+# NeXT Mach
+next: all
+
+# NeXT Mach with C++
+next-g++:
+ $(MAKE) CC=g++ $(PROGRAM)
+
+# NeXT Mach with Objective C
+next-objc:
+ $(MAKE) CC='cc -ObjC' $(PROGRAM)
+
+# Silicon Graphics IRIX 3.x and 4.x
+sgi:
+ $(MAKE) CFLAGS='-DOS_SYSV -O2' $(PROGRAM)
+
+sgi-c++:
+ $(MAKE) CC=CC CFLAGS='-DOS_SYSV -O2' $(PROGRAM)
+
+sgi-g++:
+ $(MAKE) CC=g++ CFLAGS='-DOS_SYSV -O2' $(PROGRAM)
+
+# Sun Solaris 2.x (AT&T SysVR4): must compile in ANSI environment
+solaris:
+ $(MAKE) CFLAGS='-Xc -xO4' all
+
+# Sun Solaris 2.x (AT&T SysVR4) with Apogee C
+solaris-apcc:
+ $(MAKE) CC='apcc -Xc=ansi' CFLAGS='-O4' all
+
+# Sun Solaris 2.x (AT&T SysVR4) with C++
+solaris-c++:
+ $(MAKE) CC=CC CFLAGS='-O4' all
+
+# Sun Solaris 2.x (AT&T SysVR4) with C++
+solaris-g++:
+ $(MAKE) CC=g++ all
+
+# Stardent 1520 UNIX Release 2.2
+stardent: all
+
+# SunOS 4.1.x (BSD UNIX)
+sun: all
+
+# SunOS 4.1.x (BSD UNIX) with Apogee C
+sun-apcc:
+ $(MAKE) CC=apcc all
+
+# SunOS 4.1.x (BSD UNIX) with C++
+sun-c++:
+ $(MAKE) CC=CC all
+
+# SunOS 4.1.x (BSD UNIX) with g++
+sun-g++:
+ $(MAKE) CC=g++ all
+
+# VAX VMS 5.3
+vms: all
+
+#=======================================================================
+###
+genind.o: mkind.h genind.h
+mkind.o: mkind.h
+qsort.o: mkind.h
+scanid.o: mkind.h scanid.h
+scanst.o: mkind.h scanst.h
+sortid.o: mkind.h
diff --git a/indexing/makeindex/src/NOTES b/indexing/makeindex/src/NOTES
new file mode 100644
index 0000000000..ca81552fe5
--- /dev/null
+++ b/indexing/makeindex/src/NOTES
@@ -0,0 +1,84 @@
+ Investigation of Size Reduction in MakeIndex
+ [25-Jul-1991]
+
+Joachim Schrod in his work on MakeIndex 3.0 (to be reported at
+EuroTeX'91 in Paris, September 1991) found that substantial
+storage economizations in MakeIndex are possible by dynamically
+allocating some arrays. Since that version is not yet available, it
+seemed worthwhile to try to apply such changes to version 2.10, making
+version 2.11.
+
+The major memory consumption in MakeIndex is by the arrays af[][] and
+sf[][] in
+
+#define FIELD_MAX 3
+#define STRING_MAX 256
+
+typedef struct KFIELD
+{
+ char sf[FIELD_MAX][STRING_MAX]; /* sort key */
+ char af[FIELD_MAX][STRING_MAX]; /* actual key */
+...
+} FIELD, *FIELD_PTR;
+
+These arrays are referenced in genind.c, scanid.c, and sortid.c. They
+are defined in mkind.h, and initialized to empty strings in scanid.c.
+
+Each index entry has one such struct KFIELD slot, and with current
+dimension limits, sizeof(FIELD) == 1844. book.idx has 4241 index
+entries, so we need 1844*4241 = 7820404 bytes of dynamic storage.
+However, book.idx is only 142027 bytes long, and in entry, 16
+characters ("\indexentry{}{}") need not be stored; the true storage
+requirement is therefore 142027 - 4241*16 = 74171 so 99.05% of the
+storage is being wasted,
+
+After sorting and removal of duplicate lines, book.idx reduces to
+85935 bytes and 2531 entries, so the actual storage required is
+1844*2531 = 4667164 bytes; the wastage is still high: 98.4%.
+
+If we change to
+
+typedef struct KFIELD
+{
+ char *sf[FIELD_MAX]; /* sort key */
+ char *af[FIELD_MAX]; /* actual key */
+...
+} FIELD, *FIELD_PTR;
+
+then sizeof(FIELD) = 332, and the required storage is 332*2531 =
+840292 bytes. This is still too large for an IBM PC. However, KFIELD
+also contains
+
+ char encap[STRING_MAX]; /* encapsulator */
+
+and that field is only rarely used, so by dynamically allocating it
+when needed, we can reduce the KFIELD node storage by 256 - 4 = 252
+bytes, reducing sizeof(FIELD) to 80 bytes. For book.idx, we then need
+80*2531 = 202480 bytes, and that should be small enough to run on the
+PC.
+
+encap is used in genind.c, scanid.c, and sortid.c, and defined in
+mkind.h.
+
+We can handle dynamic allocation of af[] and sf[] three ways: (1)
+initialize them both to (char*)NULL, then allocate space as needed,
+(2) initialize them both to calloc(1), and (3) initialize them both to
+a constant empty string, "". MakeIndex makes many references to the
+first character (*af[i] or af[i][0]), the first scheme would require
+many changes to avoid dereferencing NULL pointers. The second scheme
+would not have this problem, but would require a lot of overhead in
+malloc'ing 1-character blocks. The third scheme seems the best
+choice, and requires few changes; no free() or realloc() calls are
+made by MakeIndex, so we need take no precautions about attempting to
+free or reallocate constant string storage.
+
+Examination of the code in genind.c, scanid.c, and sortid.c which
+references af[] and sf[] shows that changes are needed only in
+scanid.c, where we introduce a new function, make_string(), to handle
+the dynamic allocation of strings when needed. Similarly, of the
+encap[] uses in genind.c, scanid.c, and sortid.c, only scanid.c needs
+changes. The definition of struct KFIELD in mkind.h must be updated
+so that af, sf, and encap become pointers to strings, rather than
+arrays of characters.
+
+
diff --git a/indexing/makeindex/src/RCS/README,v b/indexing/makeindex/src/RCS/README,v
new file mode 100644
index 0000000000..910acbd270
--- /dev/null
+++ b/indexing/makeindex/src/RCS/README,v
@@ -0,0 +1,302 @@
+head 1.2;
+access;
+symbols;
+locks
+ beebe:1.2; strict;
+comment @# @;
+
+
+1.2
+date 93.06.04.18.29.20; author beebe; state Exp;
+branches;
+next 1.1;
+
+1.1
+date 93.06.04.18.29.04; author beebe; state Exp;
+branches;
+next ;
+
+
+desc
+@@
+
+
+1.2
+log
+@Update list of systems with successful tests.
+@
+text
+@% /u/sy/beebe/tex/makeindex/2-12/makeindex/src/README, Wed May 26 11:25:46 1993
+% Edit by Nelson H. F. Beebe <beebe@@plot79.math.utah.edu>
+=================================================================
+= As of the release of MakeIndex version 2.9, the original
+= author, Pehong Chen, is no longer able to maintain it, and is
+= inaccessible via electronic mail. The maintenance job has been
+= taken over for the TeX User's Group by
+=
+= Nelson H. F. Beebe
+= Center for Scientific Computing
+= Department of Mathematics
+= University of Utah
+= Salt Lake City, UT 84112
+= USA
+= Tel: +1 801 581 5254
+= FAX: +1 801 581 4148
+= Email: <beebe@@math.utah.edu>
+=
+= to whom reports of problems, ports to new environments, and
+= general correspondence about MakeIndex, should be addressed.
+=================================================================
+
+
+==================
+Building MakeIndex
+==================
+
+Makefiles for numerous systems are provided in the distribution
+as the files makefile.*; select the appropriate one, and copy it
+to Makefile. For systems that lack a suitable make
+implementation, command files (*.bat and *.com) are provided.
+
+In many cases, once the makefile has been selected, you should be
+able to do
+
+ make
+ (cd ../test; make)
+
+and if the acceptance tests in that second step all pass (there
+should be no output from any of the files differences, except on
+VAX VMS, where a couple of lines differing only in letter case,
+are expected), then on many UNIX systems, you may be able to do
+
+ make install
+
+to install the executable and manual pages on your system.
+
+For version 2.12, the code has been updated to support compilation
+with numerous C++ compilers. No features of the C++ language are used
+that do not also exist in C, but the stricter compile-time checking
+provided by C++ compilers provides additional confidence in the code.
+Thanks go to P. J. Plauger for his efforts in the ANSI/ISO Standard C
+and C++ environments, and for promoting the idea of using C++
+compilers for C code development.
+
+If you have a C++ compiler, please try a build of MakeIndex with a
+command like (select the one that corresponds to the name of your C++
+compiler)
+
+ make CC=CC
+ make CC=xlC
+ make CC=g++
+
+Any problems with C++ compilations should be reported back to the
+address above.
+
+Before doing so however, check that BINDIR and MANDIR are set to
+your local conventions (you can override the values in the
+Makefile by setting them on the command-line), and also verify
+that you do not have a brain-damaged install implementation that
+either requires root privileges to run (e.g. IBM AIX), or moves
+(instead of copies) files (e.g. Stardent or DEC ULTRIX). In the
+latter case, you might be able to instead do
+
+ make cp-install
+
+If you want to undo the installation,
+
+ make uninstall
+
+should work.
+
+There are additional documentation files in ../doc that you may
+want to install manually (Emacs info, local help systems, VAX VMS
+help).
+
+
+====================
+Compilation Problems
+====================
+
+The standardization of the C language by ANSI X3.159-1989
+Programming Language--C (December 15, 1989), and ISO C 1990, has
+resulted in C implementations gradually being adapted to conform
+to the requirements of the Standard, but released for use before
+Standard conformance has been reached. For a lot of C code, this
+affects several main areas:
+
+ (1) system header files, and what symbols they define
+ (2) function prototype declarations
+ (3) new preprocessor statements, and more
+ precisely-defined preprocessor behavior
+ (4) new features introduced by Standard C (const,
+ adjacent string concatenation, new style function
+ definitions, new string escape sequences, trigraphs,
+ new data types)
+
+MakeIndex has successfully compiled and run on many different
+operating systems and C implementations, but until Standard C
+becomes uniformly implemented, the first two above are the most
+troublesome.
+
+The code in MakeIndex is written to conform to Standard C, which
+is distinguished by the preprocessor symbol __STDC__ being
+permanently defined to a non-zero value. Unfortunately, some
+implementations define this symbol without having
+Standard-conforming header files, or without accepting some of
+the new language features.
+
+In MakeIndex, function definitions are done in the old Kernighan and
+Ritchie style in a pre-Standard C environment, but in Standard C and
+C++ style if __STDC__ or __cplusplus are defined.
+
+All functions referenced are declared by function prototype
+declarations of the form
+
+static void check_idx ARGS((char *fn,int open_fn));
+
+where ARGS is defined in mkind.h to expand such a declaration to
+
+static void check_idx (char *fn,int open_fn);
+
+or
+
+static void check_idx ();
+
+depending on whether the compiler supports function prototype
+declarations or not. If you get syntax errors from the new
+style, you may need to revert to the old style by introducing a
+
+#define STDC_PROTOTYPES 0
+
+statement in the appropriate section of mkind.h. Some compilers
+partly support the function prototypes, but without variable
+names; use the old-style for them, and complain to your compiler
+supplier.
+
+When STDC_PROTOTYPES is non-zero, it is assumed that the Standard
+C type modifier "const" is recognized; if your compiler complains
+about it, add a
+
+#define const
+
+definition in mkind.h, or use a compile-time option -Dconst=;
+either of these make it expand to an empty string, so the
+compiler doesn't see it.
+
+Standard C specifies the data types of all library functions and
+their arguments, and the system header files are required to
+declare them appropriately. Nevertheless, some implementations
+have a few erroneous declarations in the header files and still
+claim to be Standard conforming (by defining the symbol __STDC__
+to a non-zero value). On such systems, the extra compile-time
+type checking provided by function prototype declarations may
+raise compilation errors, and it may be necessary to adjust
+declarations in any of the files that use the ARGS macro
+(genind.c, mkind.c, mkind.h, qsort.c, scanid.c, scanst.c, and
+sortid.c) to make the code conform to the local implementation's
+erroneous declarations.
+
+Numerous external variables and functions in MakeIndex require
+long names (at least 12 unique characters). For older systems
+that do not support long names, make sure the symbol SHORTNAMES
+is defined to a non-zero value in mkind.h; this is already done
+for supported systems that need it. Standard C requires
+uniqueness in the first 6 characters of external names, WITHOUT
+distinction between upper- and lower-case letters, so
+implementations that do not allow long external names are NOT in
+violation of the Standard.
+
+If you get compiler warnings about conversion of integers to
+pointers, or find that rindex() or index() cannot be unresolved
+by the linker, then check the settings in mkind.h. The default
+is to use the Standard C functions strchr() and strrchr(), but on
+a few non-conforming systems, to remap these names to index() and
+rindex() instead. Any other integer-to-pointer conversion
+warnings are likely to be traced to missing function prototype
+declarations, which is either because of an omission in system
+header files, or because the MakeIndex declaration in one of its
+source files was not selected during the preprocessing step.
+When the MakeIndex source code is compiled correctly, EVERY
+function used by MakeIndex will have been declared in a function
+prototype prior to its first use.
+
+
+======================
+VAX VMS Considerations
+======================
+
+Different versions of VAX VMS C have used different
+interpretations of the arguments to return() and exit()
+statements. The convention on UNIX and many other systems is
+that a 0 value denotes success, and a non-zero value, failure.
+The EXIT() macro in mkind.h hides the remapping of this value for
+VAX VMS; for other systems, it calls exit() directly.
+
+For VAX VMS, MakeIndex should be declared to be a foreign command
+symbol in a system-wide, or user, startup file that is executed
+at each login. Here is an example:
+
+$ makeindex :== $public$disk:[beebe.MakeIndex.src]makeindex.exe
+
+The leading dollar sign identifies this as a foreign command
+symbol, and must be followed by an ABSOLUTE file specification
+for the executable program; this regrettably makes it site
+dependent, and the definitions in ../test/vmsdiff.com and
+elsewhere must be adjusted accordingly.
+
+The symbol SW_PREFIX in mkind.h can be redefined from '-' to '/'
+for those VAX VMS sites that prefer to retain VMS-style
+command-line options; the default value is '-' on all systems.
+This redefinition can be done on the command line, or by changing
+the setting in mkind.h.
+
+
+===============
+Machines Tested
+===============
+
+Here is a list of machines, operating systems, and compilers under
+which MakeIndex 2.12 has been successfully tested. Convenience targets
+in the Makefile provide support for them on UNIX. Command files are
+provided for MS DOS and VAX VMS.
+
+------------------------------------------------------------------------
+Machine O/S Compiler(s)
+------------------------------------------------------------------------
+
+DEC Alpha 3000/500X OSF 1.2 cc, c89, cxx
+
+DECstation 3100 ULTRIX 4.2 and 4.3 cc, gcc, g++, lcc
+
+DEC VAX VMS 5.4-2 cc
+
+HP 9000/735 HP-UX 9.01 cc, c89, CC, gcc, g++
+
+HP 9000/850 HP-UX 9.0 cc, c89
+
+IBM 3090/600S-VF AIX 2.1 cc (Metaware High C
+ 2.1t), CC
+
+IBM PS/2 AIX 2.1 cc (Metaware High C
+ 2.2g), CC
+
+IBM RS/6000 AIX 3.2 cc, xlC
+
+MIPS R6000 RISC/os 5.0 cc
+
+NeXT Mach 3.0 cc, Objective C, gcc
+
+Sun SPARCstation SunOS 4.1.3 apcc, cc, CC, gcc, g++
+
+------------------------------------------------------------------------
+@
+
+
+1.1
+log
+@Initial revision
+@
+text
+@d238 3
+d244 2
+@
diff --git a/indexing/makeindex/src/RCS/mkind.h,v b/indexing/makeindex/src/RCS/mkind.h,v
new file mode 100644
index 0000000000..dc864553a7
--- /dev/null
+++ b/indexing/makeindex/src/RCS/mkind.h,v
@@ -0,0 +1,812 @@
+head 1.2;
+access;
+symbols;
+locks
+ beebe:1.2; strict;
+comment @ * @;
+
+
+1.2
+date 93.06.04.21.58.00; author beebe; state Exp;
+branches;
+next 1.1;
+
+1.1
+date 93.06.04.21.03.53; author beebe; state Exp;
+branches;
+next ;
+
+
+desc
+@@
+
+
+1.2
+log
+@Move definitions of R_OK to end of file to avoid conflict with
+system definitions. Change dummy argument R_OK to mode in access().
+@
+text
+@/*
+ *
+ * This file is part of
+ * MakeIndex - A formatter and format independent index processor
+ *
+ * Copyright (C) 1989 by Chen & Harrison International Systems, Inc.
+ * Copyright (C) 1988 by Olivetti Research Center
+ * Copyright (C) 1987 by Regents of the University of California
+ *
+ * Author:
+ * Pehong Chen
+ * Chen & Harrison International Systems, Inc.
+ * Palo Alto, California
+ * USA
+ * (phc@@renoir.berkeley.edu or chen@@orc.olivetti.com)
+ *
+ * Contributors:
+ * Please refer to the CONTRIB file that comes with this release
+ * for a list of people who have contributed to this and/or previous
+ * release(s) of MakeIndex.
+ *
+ * All rights reserved by the copyright holders. See the copyright
+ * notice distributed with this software for a complete description of
+ * the conditions under which it is made available.
+ *
+ */
+
+/***********************************************************************
+
+ INSTALLATION NOTES
+ <11-Nov-1989>
+
+ At compile-time (or here, if compile-time definition is not
+ available), set non-zero ONE OS_xxxx operating system flag, and if
+ more than one compiler is available, ONE compiler flag:
+
+ Operating Systems Compiler(s)
+ ================= ===========
+ OS_ATARI
+ OS_BS2000 CCD_2000
+ OS_BSD
+ OS_MVSXA IBM_C370
+ OS_VMCMS IBM_C370
+ OS_PCDOS IBM_PC_MICROSOFT
+ OS_SYSV
+ OS_TOPS20 KCC_20 or PCC_20
+ OS_VAXVMS
+ OS_XENIX
+ ================= ===========
+
+ If no OS_xxxx symbol is defined, OS_BSD is assumed.
+
+ If Standard C prototypes are supported, define the symbol
+ STDC_PROTOTYPES in the appropriate OS_xxxx section below, and insert
+ #include's for the standard system files which define library
+ prototypes. STDC_PROTOTYPES will be defined automatically if
+ __STDC__ is; the latter must be defined by all Standard C conformant
+ implementations.
+
+ All function declarations in MakeIndex are contained at the end of
+ this file. If 185STDC_PROTOTYPES is not selected, then all the standard
+ library functions must be declared explicitly.
+
+ If the host system restricts external names to 6 characters, set
+ SHORTNAMES non-zero in the appropriate OS_xxxx section below.
+
+ Installing MakeIndex under BS2000 requires at least Version 8.5
+ supporting Multiple Public Volume Sets (MPVS). Define WORK in this
+ file to your CATID (default :w:) for temporary files (.ilg, .ind),
+ in case of no MPVS support define WORK to NIL.
+
+*/
+
+/**********************************************************************/
+
+#define STDC (__STDC__ || __cplusplus)
+
+/*
+ * Establish needed operating symbols (defaulting to OS_BSD if none
+ * specified at compile time). If you add one, add it to the check
+ * list at the end of this section, too.
+ */
+
+#ifndef OS_ATARI
+#define OS_ATARI 0
+#endif
+
+#ifndef OS_PCDOS
+#define OS_PCDOS 0
+#endif
+
+#ifndef IBM_PC_MICROSOFT
+#define IBM_PC_MICROSOFT 0
+#endif
+
+#ifndef IBM_PC_TURBO
+#define IBM_PC_TURBO 0
+#endif
+
+#ifdef __TURBOC__
+#define IBM_PC_TURBO 1
+#endif
+
+#ifndef OS_SYSV
+#define OS_SYSV 0
+#endif
+
+#ifndef OS_TOPS20
+#define OS_TOPS20 0
+#endif
+
+#ifndef KCC_20
+#define KCC_20 0
+#endif
+
+#ifndef PCC_20
+#define PCC_20 0
+#endif
+
+#ifndef OS_BSD
+#define OS_BSD 0
+#endif
+
+#ifndef OS_VAXVMS
+#define OS_VAXVMS 0
+#endif
+
+#ifndef IBM_C370
+#define IBM_C370 0
+#endif
+
+#ifndef CCD_2000
+#define CCD_2000 0
+#endif
+
+#if OS_TOPS20
+#if (KCC_20 || PCC_20)
+#else
+#undef PCC_20
+#define PCC_20 1 /* PCC-20 is default for Tops-20 */
+#endif /* KCC_20 || PCC_20) */
+#endif /* OS_TOPS20 */
+
+#ifndef OS_BS2000
+#define OS_BS2000 0
+#endif
+
+#ifndef OS_MVSXA
+#define OS_MVSXA 0
+#endif
+
+#ifndef OS_VMCMS
+#define OS_VMCMS 0
+#endif
+
+#ifndef OS_XENIX
+#define OS_XENIX 0
+#endif
+
+#if (OS_ATARI || OS_BSD || OS_BS2000 || OS_MVSXA || OS_PCDOS || OS_VMCMS)
+#else
+#if (OS_SYSV || OS_TOPS20 || OS_VAXVMS || OS_XENIX)
+#else
+#undef OS_BSD
+#define OS_BSD 1 /* Unix is default operating system */
+#endif
+#endif
+
+#if (OS_MVSXA || OS_VMCMS)
+#undef IBM_C370
+#define IBM_C370 1 /* IBM_C370 is default for OS_MVSXA and OS_VMCMS */
+#endif
+
+#if OS_BS2000
+#undef CCD_2000
+#define CCD_2000 1 /* CCD_2000 is default for OS_BS2000 */
+#endif
+
+#if (CCD_2000 || OS_MVSXA || OS_TOPS20 || OS_VMCMS)
+#define SHORTNAMES 1
+#else
+#define SHORTNAMES 0
+#endif
+
+#define STDC_PROTOTYPES STDC
+
+/**********************************************************************/
+
+#include <stdio.h>
+#include <ctype.h>
+
+#if (CCD_2000 || OS_SYSV || OS_PCDOS || STDC || _AIX || ardent )
+#include <string.h>
+#else
+
+#if (OS_ATARI || OS_BSD || PCC_20 || OS_XENIX)
+#define strchr index /* convert STDC form to old K&R form */
+#define strrchr rindex /* convert STDC form to old K&R form */
+#endif /* (OS_ATARI || OS_BSD || PCC_20 || OS_XENIX) */
+
+#endif /* (CCD_2000 || OS_SYSV || OS_PCDOS || STDC || _AIX || ardent) */
+
+#if OS_PCDOS
+
+#if (IBM_PC_MICROSOFT || IBM_PC_TURBO)
+#include <io.h> /* for function declarations */
+#endif /* (IBM_PC_MICROSOFT || IBM_PC_TURBO) */
+
+#include <stddef.h> /* for function declarations */
+#include <stdlib.h> /* for function declarations */
+#undef STDC_PROTOTYPES
+#define STDC_PROTOTYPES 1 /* so we get full argument
+ type checking */
+#endif /* OS_PCDOS */
+
+#if (OS_VMCMS || OS_MVSXA)
+#include <stdefs.h> /* for function declarations */
+#include <string.h> /* for function declarations */
+#undef STDC_PROTOTYPES
+#define STDC_PROTOTYPES 1 /* so we get full argument
+ type checking */
+#if 0
+#undef __STDC__
+#define __STDC__ 1
+#endif
+#endif /* OS_MVSXA || OS_VMCMS */
+
+#if OS_ATARI
+
+#if ATARI_ST_TURBO
+#define access(fn, mode) 0 /* function not available */
+#endif
+
+#if __GNUC__
+#include <string.h>
+#include <types.h>
+#endif
+
+#undef STDC_PROTOTYPES
+#define STDC_PROTOTYPES 1 /* so we get full argument checking */
+
+#endif /* OS_ATARI */
+
+#if IBM_C370
+#define access(fn, mode) 0 /* function not available */
+#endif
+
+#if CCD_2000 /* function not available */
+#define getenv(P) 0
+#endif /* CCD_2000 */
+
+#if SHORTNAMES
+/*
+ * Provide alternate external names which are unique in the first SIX
+ * characters as required for portability (and Standard C)
+ */
+#define check_all chk_all
+#define check_idx chk_idx
+#define check_mixsym chk_mix
+#define compare_one cmp_one
+#define compare_page cmp_page
+#define compare_string cmp_string
+#define delim_n dlm_n
+#define delim_p dlm_p
+#define delim_r dlm_r
+#define delim_t dlm_t
+#define encap_i ecp_i
+#define encap_p ecp_p
+#define encap_range ecp_range
+#define encap_s ecp_s
+#define group_skip grp_skip
+#define group_type grp_type
+#define idx_aclose idxaclose
+#define idx_actual idxactual
+#define idx_keyword idx_kwd
+#define indent_length ind_length
+#define indent_space ind_space
+#define headings_flag hd_flag
+#define heading_pre hd_pre
+#define heading_suf hd_suf
+#define symhead_pos sym_pos
+#define symhead_neg sym_neg
+#define numhead_pos num_pos
+#define numhead_neg num_neg
+#define process_idx prc_idx
+#define process_precedence prc_pre
+#define range_ptr rng_ptr
+#define scan_alpha_lower scnalw
+#define scan_alpha_upper scnaup
+#define scan_arabic scnarabic
+#define scan_arg1 scna1
+#define scan_arg2 scna2
+#define scan_char scnchr
+#define scan_field scnfld
+#define scan_idx scnidx
+#define scan_key scnkey
+#define scan_no scnno
+#define scan_roman_lower scnrlw
+#define scan_roman_upper scnrup
+#define scan_spec scnspc
+#define scan_string scnstr
+#define scan_style scnsty
+#define setpagelen spg_len
+#define setpage_close spg_close
+#define setpage_open spg_open
+#define suffix_2p suf_2p
+#define suffix_3p suf_3p
+#define suffix_mp suf_mp
+#endif /* SHORTNAMES */
+
+#if OS_VAXVMS
+#define EXIT(code) exit( ((code) == 0) ? 1 : (1 << 28) + 2 )
+#else /* NOT OS_VAXVMS */
+#define EXIT exit
+#endif /* OS_VAXVMS */
+
+#undef TRUE
+#define TRUE 1
+
+#undef FALSE
+#define FALSE 0
+
+#undef NUL
+#define NUL '\0'
+
+#undef NIL
+#define NIL ""
+
+#define TAB '\t'
+#define LFD '\n'
+#define SPC ' '
+#define LSQ '['
+#define RSQ ']'
+#define BSH '\\'
+
+#if OS_ATARI
+#define ENV_SEPAR ';'
+#define DIR_DELIM '\\'
+#endif /* OS_ATARI */
+
+#if (OS_BSD || OS_SYSV || OS_XENIX)
+#define ENV_SEPAR ':'
+#define DIR_DELIM '/'
+#endif /* (OS_BSD || OS_SYSV || OS_XENIX)*/
+
+#if OS_BS2000
+#define ENV_SEPAR '#'
+#define DIR_DELIM '$'
+#endif /* OS_BS2000 */
+
+#if (OS_MVSXA || OS_VMCMS)
+#define ENV_SEPAR '.'
+#define DIR_DELIM '.'
+#endif /* OS_MVSXA || OS_VMCMS */
+
+#if OS_PCDOS
+#define ENV_SEPAR ';'
+#define DIR_DELIM '\\'
+#endif /* OS_PCDOS */
+
+#if OS_TOPS20
+#define ENV_SEPAR ','
+#define DIR_DELIM ':'
+#endif /* OS_TOPS20 */
+
+#if OS_BSD
+#define ENV_SEPAR ':'
+#define DIR_DELIM '/'
+#endif /* OS_BSD */
+
+#if OS_VAXVMS
+#define ENV_SEPAR ',' /* In fact these aren't used */
+#define DIR_DELIM ':'
+#endif /* OS_VAXVMS */
+
+#ifndef SW_PREFIX /* can override at compile time */
+#define SW_PREFIX '-'
+#endif
+
+#define EXT_DELIM '.'
+#define ROMAN_SIGN '*'
+#define EVEN "even"
+#define ODD "odd"
+#define ANY "any"
+
+#define GET_CHAR getc
+
+#if (CCD_2000 || OS_MVSXA)
+#define TOASCII(i) (char)((i) + '0')
+#else
+#define TOASCII(i) (char)((i) + 48)
+#endif /* (CCD_2000 || OS_MVSXA) */
+
+/* NB: The typecasts here are CRITICAL for correct sorting of entries
+ that use characters in the range 128..255! */
+#define TOLOWER(C) (isupper((unsigned char)(C)) ? \
+ (unsigned char)tolower((unsigned char)(C)) : (unsigned char)(C))
+#define TOUPPER(C) (isupper((unsigned char)(C)) ? \
+ (unsigned char)(C) : (unsigned char)toupper((unsigned char)(C)))
+
+#define STREQ(A, B) (strcmp(A, B) == 0)
+#define STRNEQ(A, B) (strcmp(A, B) != 0)
+
+#define MESSAGE(F, S) { \
+ if (verbose) \
+ fprintf(stderr, F, S); \
+ fprintf(ilg_fp, F, S); \
+}
+
+#define FATAL(F, S) { \
+ fprintf(stderr, F, S); \
+ fprintf(stderr, USAGE, pgm_fn); \
+ EXIT(1); \
+}
+
+#define FATAL2(F, D1, D2) { \
+ fprintf(stderr, F, D1, D2); \
+ fprintf(stderr, USAGE, pgm_fn); \
+ EXIT(1); \
+}
+
+#if OS_PCDOS /* open file in binary mode */
+#define OPEN_IN_B(FP) fopen(FP, "rb")
+#endif
+
+#define OPEN_IN(FP) fopen(FP, "r")
+#define OPEN_OUT(FP) fopen(FP, "w")
+#define CLOSE(FP) fclose(FP)
+
+#if (CCD_2000 || OS_MVSXA)
+#define ASCII 1
+#define ISDIGIT(C) isdigit(C)
+#define ISSYMBOL(C) (! (isdigit(C) || isalpha(C) || iscntrl(C) || C == SPC))
+#else
+#define ISDIGIT(C) ('0' <= C && C <= '9')
+#define ISSYMBOL(C) (('!' <= C && C <= '@@') || \
+ ('[' <= C && C <= '`') || \
+ ('{' <= C && C <= '~'))
+#endif /* (CCD_2000 || OS_MVSXA) */
+
+/*====================================================================
+Many arrays in MakeIndex are dimensioned [xxx_MAX], where the xxx_MAX
+values are defined below. The use of each of these is described in
+comments. However, no run-time check is made to ensure that these are
+consistent, or reasonable! Therefore, change them only with great
+care.
+
+The array sizes should be made generously large: there are a great
+many uses of strings in MakeIndex with the strxxx() and sprintf()
+functions where no checking is done for adequate target storage sizes.
+Although some input checking is done to avoid this possibility, it is
+highly likely that there are still several places where storage
+violations are possible, with core dumps, or worse, incorrect output,
+ensuing.
+======================================================================*/
+
+#define ARABIC_MAX 5 /* maximum digits in an Arabic page */
+ /* number field */
+
+#define ARGUMENT_MAX 1024 /* maximum length of sort or actual key */
+ /* in index entry */
+
+#define ARRAY_MAX 1024 /* maximum length of constant values in */
+ /* style file */
+
+#define FIELD_MAX 3 /* maximum levels of index entries (item, */
+ /* subitem, subsubitem); cannot be */
+ /* increased beyond 3 without */
+ /* significant design changes (no field */
+ /* names are known beyond 3 levels) */
+
+#ifdef LINE_MAX /* IBM RS/6000 AIX has this in <sys/limits.h> */
+#undef LINE_MAX
+#endif
+#define LINE_MAX 72 /* maximum output line length (longer */
+ /* ones wrap if possible) */
+
+#define NUMBER_MAX 16 /* maximum digits in a Roman or Arabic */
+ /* page number */
+ /* (MAX(ARABIC_MAX,ROMAN_MAX)) */
+
+#define PAGEFIELD_MAX 10 /* maximum fields in a composite page */
+ /* number */
+
+#define PAGETYPE_MAX 5 /* fixed at 5; see use in scanst.c */
+
+#define ROMAN_MAX 16 /* maximum length of Roman page number */
+ /* field */
+
+#define STRING_MAX 256 /* maximum length of host filename */
+
+/*====================================================================*/
+
+#define VERSION "portable version 2.12 [26-May-1993]"
+
+#if 0
+#define VERSION "portable version 2.11 [19-Oct-1991]"
+#define VERSION "portable version 2.10 [05-Jul-1991]"
+#define VERSION "portable version 2.9.1 [21-Jun-1990]"
+#define VERSION "portable version 2.9 [13-Dec-1989]"
+#define VERSION "portable version 2.8 [11-Nov-1989]"
+#define VERSION "portable version 2.7 [01-Oct-1988]"
+#define VERSION "portable version 2.6 [14-Jul-1988]"
+#define VERSION "portable version 2.5 [14-Apr-1988]"
+#define VERSION "portable version 2.4 [20-Mar-1988]"
+#define VERSION "portable version 2.3 [20-Jan-1988]"
+#define VERSION "version 2.2 [29-May-1987]"
+#endif
+
+#define PUT_VERSION { \
+ MESSAGE("This is %s, ", pgm_fn); \
+ MESSAGE("%s.\n", VERSION); \
+ need_version = FALSE; \
+}
+
+#define USAGE \
+ "Usage: %s [-ilqrcg] [-s sty] [-o ind] [-t log] [-p num] [idx0 idx1 ...]\n"
+
+#define STYLE_PATH "INDEXSTYLE" /* environment variable defining search */
+ /* path for style files */
+#define INDEX_IDX ".idx"
+#define INDEX_ILG ".ilg"
+#define INDEX_IND ".ind"
+#define INDEX_STY ".mst"
+
+#if OS_VAXVMS
+#define INDEX_LOG ".lis"
+#else
+#define INDEX_LOG ".log"
+#endif
+
+#if OS_BS2000 /* Define WORK disk */
+#define WORK ":w:"
+#define CATID ':'
+#endif /* OS_BS2000 */
+
+#define EMPTY -9999
+#define ROML 0
+#define ROMU 1
+#define ARAB 2
+#define ALPL 3
+#define ALPU 4
+#define DUPLICATE 9999
+
+#define SYMBOL -1
+#define ALPHA -2
+
+#define GERMAN 0
+
+typedef struct KFIELD
+{
+ char *sf[FIELD_MAX]; /* sort key */
+ char *af[FIELD_MAX]; /* actual key */
+ int group; /* key group */
+ char lpg[NUMBER_MAX]; /* literal page */
+ short npg[PAGEFIELD_MAX]; /* page field array */
+ short count; /* page field count */
+ short type; /* page number type */
+ char *encap; /* encapsulator */
+ char *fn; /* input filename */
+ int lc; /* line number */
+} FIELD, *FIELD_PTR;
+
+typedef struct KNODE
+{
+ FIELD data;
+ struct KNODE *next;
+} NODE, *NODE_PTR;
+
+extern int letter_ordering;
+extern int compress_blanks;
+extern int init_page;
+extern int merge_page;
+extern int even_odd;
+extern int verbose;
+extern int german_sort;
+
+extern char idx_keyword[ARRAY_MAX];
+extern char idx_aopen;
+extern char idx_aclose;
+extern char idx_level;
+extern char idx_ropen;
+extern char idx_rclose;
+extern char idx_quote;
+extern char idx_actual;
+extern char idx_encap;
+extern char idx_escape;
+
+extern char page_comp[ARRAY_MAX];
+extern int page_offset[PAGETYPE_MAX];
+
+extern char preamble[ARRAY_MAX];
+extern char postamble[ARRAY_MAX];
+extern char setpage_open[ARRAY_MAX];
+extern char setpage_close[ARRAY_MAX];
+extern char group_skip[ARRAY_MAX];
+extern int headings_flag;
+extern char heading_pre[ARRAY_MAX];
+extern char heading_suf[ARRAY_MAX];
+extern char symhead_pos[ARRAY_MAX];
+extern char symhead_neg[ARRAY_MAX];
+extern char numhead_pos[ARRAY_MAX];
+extern char numhead_neg[ARRAY_MAX];
+extern int prelen;
+extern int postlen;
+extern int skiplen;
+extern int headprelen;
+extern int headsuflen;
+extern int setpagelen;
+
+extern char item_r[FIELD_MAX][ARRAY_MAX];
+extern char item_u[FIELD_MAX][ARRAY_MAX];
+extern char item_x[FIELD_MAX][ARRAY_MAX];
+extern int ilen_r[FIELD_MAX];
+extern int ilen_u[FIELD_MAX];
+extern int ilen_x[FIELD_MAX];
+
+extern char delim_p[FIELD_MAX][ARRAY_MAX];
+extern char delim_n[ARRAY_MAX];
+extern char delim_r[ARRAY_MAX];
+extern char delim_t[ARRAY_MAX];
+
+extern char suffix_2p[ARRAY_MAX];
+extern char suffix_3p[ARRAY_MAX];
+extern char suffix_mp[ARRAY_MAX];
+
+extern char encap_p[ARRAY_MAX];
+extern char encap_i[ARRAY_MAX];
+extern char encap_s[ARRAY_MAX];
+
+extern int linemax;
+extern char indent_space[ARRAY_MAX];
+extern int indent_length;
+
+extern FILE *idx_fp;
+extern FILE *sty_fp;
+extern FILE *ind_fp;
+extern FILE *ilg_fp;
+
+#if OS_BS2000
+extern FILE *widx_fp;
+extern char widx_fn[STRING_MAX + 5];
+#endif /* OS_BS2000 */
+
+extern char *idx_fn;
+extern char *pgm_fn;
+extern char *ind_fn;
+extern char *ilg_fn;
+
+#ifndef MKIND_C
+extern char sty_fn[];
+extern char ind[];
+extern char ilg[];
+extern char pageno[];
+
+#ifdef DEBUG
+extern long totmem;
+#endif /* DEBUG */
+
+#endif
+
+extern FIELD_PTR *idx_key;
+extern NODE_PTR head;
+extern NODE_PTR tail;
+
+extern int idx_dot;
+extern int idx_tt;
+extern int idx_gt;
+extern int idx_et;
+extern int idx_dc;
+
+#define DOT "."
+#define DOT_MAX 1000
+#define CMP_MAX 1500
+
+#define IDX_DOT(MAX) { \
+ idx_dot = TRUE; \
+ if (idx_dc++ == 0) { \
+ if (verbose) \
+ fprintf(stderr, DOT); \
+ fprintf(ilg_fp, DOT); \
+ } \
+ if (idx_dc == MAX) \
+ idx_dc = 0; \
+}
+
+#define ALL_DONE { \
+ if (fn_no > 0) { \
+ if (verbose) \
+fprintf(stderr, \
+ "Overall %d files read (%d entries accepted, %d rejected).\n", \
+ fn_no+1, idx_gt, idx_et); \
+fprintf(ilg_fp, \
+ "Overall %d files read (%d entries accepted, %d rejected).\n", \
+ fn_no+1, idx_gt, idx_et); \
+ } \
+}
+
+#define DONE(A, B, C, D) { \
+ if (verbose) \
+ fprintf(stderr, "done (%d %s, %d %s).\n", (A), B, C, D); \
+ fprintf(ilg_fp, "done (%d %s, %d %s).\n", (A), B, C, D); \
+}
+
+#if STDC_PROTOTYPES
+#define ARGS(arg_list) arg_list
+#define VOIDP void*
+#define VOID_ARG void
+#else
+#define ARGS(arg_list) ()
+#define const
+#define VOIDP char*
+#define VOID_ARG
+#endif
+
+extern void gen_ind ARGS((void));
+extern int group_type ARGS((char *str));
+extern int main ARGS((int argc, char **argv));
+extern void qqsort ARGS((char *base, int n, int size,
+ int (*compar)ARGS((char*,char*))));
+extern void scan_idx ARGS((void));
+extern void scan_sty ARGS((void));
+extern void sort_idx ARGS((void));
+extern int strtoint ARGS((char *str));
+
+#if STDC
+#include <stdlib.h>
+#undef strchr
+#undef strrchr
+#if __NeXT__
+int access ARGS((const char *, int));
+#else
+#include <unistd.h>
+#endif
+#else
+/* Miscellaneous standard library routines */
+int access ARGS((const char *, int));
+VOIDP calloc ARGS((size_t nitems,size_t size));
+
+#if CCD_2000 /* function not available */
+#define getenv(P) 0
+#else
+char *getenv ARGS((const char *name));
+#endif
+
+VOIDP malloc ARGS((size_t size));
+char *strchr ARGS((const char *s,int c));
+char *strrchr ARGS((const char *s,int c));
+#endif /* __STDC__ */
+
+#if PCC_20
+#define R_OK 0 /* PCC-20 access(file,mode) */
+#endif /* only understands mode=0 */
+
+#ifndef R_OK
+#define R_OK 4 /* only symbol from sys/file.h */
+#endif
+@
+
+
+1.1
+log
+@Initial revision
+@
+text
+@d231 1
+a231 1
+#define access(fn, R_OK) 0 /* function not available */
+d245 1
+a245 1
+#define access(fn, R_OK) 0 /* function not available */
+a251 4
+#if PCC_20
+#define R_OK 0 /* PCC-20 access(file,mode) */
+#endif /* only understands mode=0 */
+
+a316 4
+#ifndef R_OK
+#define R_OK 4 /* only symbol from sys/file.h */
+#endif
+
+d750 8
+@
diff --git a/indexing/makeindex/src/README b/indexing/makeindex/src/README
new file mode 100644
index 0000000000..4b3413ec93
--- /dev/null
+++ b/indexing/makeindex/src/README
@@ -0,0 +1,263 @@
+% /u/sy/beebe/tex/makeindex/2-12/makeindex/src/README, Wed May 26 11:25:46 1993
+% Edit by Nelson H. F. Beebe <beebe@plot79.math.utah.edu>
+=================================================================
+= As of the release of MakeIndex version 2.9, the original
+= author, Pehong Chen, is no longer able to maintain it, and is
+= inaccessible via electronic mail. The maintenance job has been
+= taken over for the TeX User's Group by
+=
+= Nelson H. F. Beebe
+= Center for Scientific Computing
+= Department of Mathematics
+= University of Utah
+= Salt Lake City, UT 84112
+= USA
+= Tel: +1 801 581 5254
+= FAX: +1 801 581 4148
+= Email: <beebe@math.utah.edu>
+=
+= to whom reports of problems, ports to new environments, and
+= general correspondence about MakeIndex, should be addressed.
+=================================================================
+
+
+==================
+Building MakeIndex
+==================
+
+Makefiles for numerous systems are provided in the distribution
+as the files makefile.*; select the appropriate one, and copy it
+to Makefile. For systems that lack a suitable make
+implementation, command files (*.bat and *.com) are provided.
+
+In many cases, once the makefile has been selected, you should be
+able to do
+
+ make
+ (cd ../test; make)
+
+and if the acceptance tests in that second step all pass (there
+should be no output from any of the files differences, except on
+VAX VMS, where a couple of lines differing only in letter case,
+are expected), then on many UNIX systems, you may be able to do
+
+ make install
+
+to install the executable and manual pages on your system.
+
+For version 2.12, the code has been updated to support compilation
+with numerous C++ compilers. No features of the C++ language are used
+that do not also exist in C, but the stricter compile-time checking
+provided by C++ compilers provides additional confidence in the code.
+Thanks go to P. J. Plauger for his efforts in the ANSI/ISO Standard C
+and C++ environments, and for promoting the idea of using C++
+compilers for C code development.
+
+If you have a C++ compiler, please try a build of MakeIndex with a
+command like (select the one that corresponds to the name of your C++
+compiler)
+
+ make CC=CC
+ make CC=xlC
+ make CC=g++
+
+Any problems with C++ compilations should be reported back to the
+address above.
+
+Before doing so however, check that BINDIR and MANDIR are set to
+your local conventions (you can override the values in the
+Makefile by setting them on the command-line), and also verify
+that you do not have a brain-damaged install implementation that
+either requires root privileges to run (e.g. IBM AIX), or moves
+(instead of copies) files (e.g. Stardent or DEC ULTRIX). In the
+latter case, you might be able to instead do
+
+ make cp-install
+
+If you want to undo the installation,
+
+ make uninstall
+
+should work.
+
+There are additional documentation files in ../doc that you may
+want to install manually (Emacs info, local help systems, VAX VMS
+help).
+
+
+====================
+Compilation Problems
+====================
+
+The standardization of the C language by ANSI X3.159-1989
+Programming Language--C (December 15, 1989), and ISO C 1990, has
+resulted in C implementations gradually being adapted to conform
+to the requirements of the Standard, but released for use before
+Standard conformance has been reached. For a lot of C code, this
+affects several main areas:
+
+ (1) system header files, and what symbols they define
+ (2) function prototype declarations
+ (3) new preprocessor statements, and more
+ precisely-defined preprocessor behavior
+ (4) new features introduced by Standard C (const,
+ adjacent string concatenation, new style function
+ definitions, new string escape sequences, trigraphs,
+ new data types)
+
+MakeIndex has successfully compiled and run on many different
+operating systems and C implementations, but until Standard C
+becomes uniformly implemented, the first two above are the most
+troublesome.
+
+The code in MakeIndex is written to conform to Standard C, which
+is distinguished by the preprocessor symbol __STDC__ being
+permanently defined to a non-zero value. Unfortunately, some
+implementations define this symbol without having
+Standard-conforming header files, or without accepting some of
+the new language features.
+
+In MakeIndex, function definitions are done in the old Kernighan and
+Ritchie style in a pre-Standard C environment, but in Standard C and
+C++ style if __STDC__ or __cplusplus are defined.
+
+All functions referenced are declared by function prototype
+declarations of the form
+
+static void check_idx ARGS((char *fn,int open_fn));
+
+where ARGS is defined in mkind.h to expand such a declaration to
+
+static void check_idx (char *fn,int open_fn);
+
+or
+
+static void check_idx ();
+
+depending on whether the compiler supports function prototype
+declarations or not. If you get syntax errors from the new
+style, you may need to revert to the old style by introducing a
+
+#define STDC_PROTOTYPES 0
+
+statement in the appropriate section of mkind.h. Some compilers
+partly support the function prototypes, but without variable
+names; use the old-style for them, and complain to your compiler
+supplier.
+
+When STDC_PROTOTYPES is non-zero, it is assumed that the Standard
+C type modifier "const" is recognized; if your compiler complains
+about it, add a
+
+#define const
+
+definition in mkind.h, or use a compile-time option -Dconst=;
+either of these make it expand to an empty string, so the
+compiler doesn't see it.
+
+Standard C specifies the data types of all library functions and
+their arguments, and the system header files are required to
+declare them appropriately. Nevertheless, some implementations
+have a few erroneous declarations in the header files and still
+claim to be Standard conforming (by defining the symbol __STDC__
+to a non-zero value). On such systems, the extra compile-time
+type checking provided by function prototype declarations may
+raise compilation errors, and it may be necessary to adjust
+declarations in any of the files that use the ARGS macro
+(genind.c, mkind.c, mkind.h, qsort.c, scanid.c, scanst.c, and
+sortid.c) to make the code conform to the local implementation's
+erroneous declarations.
+
+Numerous external variables and functions in MakeIndex require
+long names (at least 12 unique characters). For older systems
+that do not support long names, make sure the symbol SHORTNAMES
+is defined to a non-zero value in mkind.h; this is already done
+for supported systems that need it. Standard C requires
+uniqueness in the first 6 characters of external names, WITHOUT
+distinction between upper- and lower-case letters, so
+implementations that do not allow long external names are NOT in
+violation of the Standard.
+
+If you get compiler warnings about conversion of integers to
+pointers, or find that rindex() or index() cannot be unresolved
+by the linker, then check the settings in mkind.h. The default
+is to use the Standard C functions strchr() and strrchr(), but on
+a few non-conforming systems, to remap these names to index() and
+rindex() instead. Any other integer-to-pointer conversion
+warnings are likely to be traced to missing function prototype
+declarations, which is either because of an omission in system
+header files, or because the MakeIndex declaration in one of its
+source files was not selected during the preprocessing step.
+When the MakeIndex source code is compiled correctly, EVERY
+function used by MakeIndex will have been declared in a function
+prototype prior to its first use.
+
+
+======================
+VAX VMS Considerations
+======================
+
+Different versions of VAX VMS C have used different
+interpretations of the arguments to return() and exit()
+statements. The convention on UNIX and many other systems is
+that a 0 value denotes success, and a non-zero value, failure.
+The EXIT() macro in mkind.h hides the remapping of this value for
+VAX VMS; for other systems, it calls exit() directly.
+
+For VAX VMS, MakeIndex should be declared to be a foreign command
+symbol in a system-wide, or user, startup file that is executed
+at each login. Here is an example:
+
+$ makeindex :== $public$disk:[beebe.MakeIndex.src]makeindex.exe
+
+The leading dollar sign identifies this as a foreign command
+symbol, and must be followed by an ABSOLUTE file specification
+for the executable program; this regrettably makes it site
+dependent, and the definitions in ../test/vmsdiff.com and
+elsewhere must be adjusted accordingly.
+
+The symbol SW_PREFIX in mkind.h can be redefined from '-' to '/'
+for those VAX VMS sites that prefer to retain VMS-style
+command-line options; the default value is '-' on all systems.
+This redefinition can be done on the command line, or by changing
+the setting in mkind.h.
+
+
+===============
+Machines Tested
+===============
+
+Here is a list of machines, operating systems, and compilers under
+which MakeIndex 2.12 has been successfully tested. Convenience targets
+in the Makefile provide support for them on UNIX. Command files are
+provided for MS DOS and VAX VMS.
+
+------------------------------------------------------------------------
+Machine O/S Compiler(s)
+------------------------------------------------------------------------
+
+DEC Alpha 3000/500X OSF 1.2 cc, c89, cxx
+
+DECstation 3100 ULTRIX 4.2 and 4.3 cc, gcc, g++, lcc
+
+DEC VAX VMS 5.4-2 cc
+
+HP 9000/735 HP-UX 9.01 cc, c89, CC, gcc, g++
+
+HP 9000/850 HP-UX 9.0 cc, c89
+
+IBM 3090/600S-VF AIX 2.1 cc (Metaware High C
+ 2.1t), CC
+
+IBM PS/2 AIX 2.1 cc (Metaware High C
+ 2.2g), CC
+
+IBM RS/6000 AIX 3.2 cc, xlC
+
+MIPS R6000 RISC/os 5.0 cc
+
+NeXT Mach 3.0 cc, Objective C, gcc
+
+Sun SPARCstation SunOS 4.1.3 apcc, cc, CC, gcc, g++
+
+------------------------------------------------------------------------
diff --git a/indexing/makeindex/src/genind.c b/indexing/makeindex/src/genind.c
new file mode 100644
index 0000000000..3d176cec0f
--- /dev/null
+++ b/indexing/makeindex/src/genind.c
@@ -0,0 +1,477 @@
+/*
+ *
+ * This file is part of
+ * MakeIndex - A formatter and format independent index processor
+ *
+ * Copyright (C) 1989 by Chen & Harrison International Systems, Inc.
+ * Copyright (C) 1988 by Olivetti Research Center
+ * Copyright (C) 1987 by Regents of the University of California
+ *
+ * Author:
+ * Pehong Chen
+ * Chen & Harrison International Systems, Inc.
+ * Palo Alto, California
+ * USA
+ * (phc@renoir.berkeley.edu or chen@orc.olivetti.com)
+ *
+ * Contributors:
+ * Please refer to the CONTRIB file that comes with this release
+ * for a list of people who have contributed to this and/or previous
+ * release(s) of MakeIndex.
+ *
+ * All rights reserved by the copyright holders. See the copyright
+ * notice distributed with this software for a complete description of
+ * the conditions under which it is made available.
+ *
+ */
+
+#include "mkind.h"
+#include "genind.h"
+
+#if sun /* avoid conflict with symbol in */
+ /* /usr/lang/SC1.0/include/CC/stdlib.h */
+#define end the_end
+#endif
+
+static FIELD_PTR curr = NULL;
+static FIELD_PTR prev = NULL;
+static FIELD_PTR begin = NULL;
+static FIELD_PTR end = NULL;
+static FIELD_PTR range_ptr;
+static int level = 0;
+static int prev_level = 0;
+static char *encap = NULL;
+static char *prev_encap = NULL;
+static int in_range = FALSE;
+static int encap_range = FALSE;
+static char buff[2 * ARGUMENT_MAX];
+static char line[2 * ARGUMENT_MAX]; /* output buffer */
+static int ind_lc = 0; /* overall line count */
+static int ind_ec = 0; /* erroneous line count */
+static int ind_indent;
+
+static void flush_line ARGS((int print));
+static void insert_page ARGS((void));
+static int make_entry ARGS((int n));
+static void make_item ARGS((char* term));
+static void new_entry ARGS((void));
+static void old_entry ARGS((void));
+static int page_diff ARGS((struct KFIELD *a,struct KFIELD *b));
+static void put_header ARGS((int let));
+static void wrap_line ARGS((int print));
+
+void
+gen_ind(VOID_ARG)
+{
+ int n;
+ int tmp_lc;
+
+ MESSAGE("Generating output file %s...", ind_fn);
+ PUT(preamble);
+ ind_lc += prelen;
+ if (init_page)
+ insert_page();
+
+ /* reset counters for putting out dots */
+ idx_dc = 0;
+ for (n = 0; n < idx_gt; n++) {
+ if (idx_key[n]->type != DUPLICATE)
+ if (make_entry(n)) {
+ IDX_DOT(DOT_MAX);
+ }
+ }
+ tmp_lc = ind_lc;
+ if (in_range) {
+ curr = range_ptr;
+ IND_ERROR("Unmatched range opening operator %c.\n", idx_ropen);
+ }
+ prev = curr;
+ flush_line(TRUE);
+ PUT(delim_t);
+ PUT(postamble);
+ tmp_lc = ind_lc + postlen;
+ if (ind_ec == 1) {
+ DONE(tmp_lc, "lines written", ind_ec, "warning");
+ } else {
+ DONE(tmp_lc, "lines written", ind_ec, "warnings");
+ }
+}
+
+
+static int
+#if STDC
+make_entry(int n)
+#else
+make_entry(n)
+int n;
+#endif
+{
+ int let;
+
+ /* determine current and previous pointer */
+ prev = curr;
+ curr = idx_key[n];
+ /* check if current entry is in range */
+ if ((*curr->encap == idx_ropen) || (*curr->encap == idx_rclose))
+ encap = &(curr->encap[1]);
+ else
+ encap = curr->encap;
+
+ /* determine the current nesting level */
+ if (n == 0) {
+ prev_level = level = 0;
+ let = *curr->sf[0];
+ put_header(let);
+ make_item(NIL);
+ } else {
+ prev_level = level;
+ for (level = 0; level < FIELD_MAX; level++)
+ if (STRNEQ(curr->sf[level], prev->sf[level]) ||
+ STRNEQ(curr->af[level], prev->af[level]))
+ break;
+ if (level < FIELD_MAX)
+ new_entry();
+ else
+ old_entry();
+ }
+
+ if (*curr->encap == idx_ropen)
+ if (in_range) {
+ IND_ERROR("Extra range opening operator %c.\n", idx_ropen);
+ } else {
+ in_range = TRUE;
+ range_ptr = curr;
+ }
+ else if (*curr->encap == idx_rclose)
+ if (in_range) {
+ in_range = FALSE;
+ if (STRNEQ(&(curr->encap[1]), "") &&
+ STRNEQ(prev_encap, &(curr->encap[1]))) {
+IND_ERROR("Range closing operator has an inconsistent encapsulator %s.\n",
+ &(curr->encap[1]));
+ }
+ } else {
+ IND_ERROR("Unmatched range closing operator %c.\n", idx_rclose);
+ }
+ else if ((*curr->encap != NUL) &&
+ STRNEQ(curr->encap, prev_encap) && in_range)
+ IND_ERROR("Inconsistent page encapsulator %s within range.\n",
+ curr->encap);
+ return (1);
+}
+
+
+static void
+#if STDC
+make_item(char *term)
+#else
+make_item(term)
+char *term;
+#endif
+{
+ int i;
+
+ if (level > prev_level) {
+ /* ascending level */
+ if (*curr->af[level] == NUL)
+ sprintf(line, "%s%s%s", term, item_u[level], curr->sf[level]);
+ else
+ sprintf(line, "%s%s%s", term, item_u[level], curr->af[level]);
+ ind_lc += ilen_u[level];
+ } else {
+ /* same or descending level */
+ if (*curr->af[level] == NUL)
+ sprintf(line, "%s%s%s", term, item_r[level], curr->sf[level]);
+ else
+ sprintf(line, "%s%s%s", term, item_r[level], curr->af[level]);
+ ind_lc += ilen_r[level];
+ }
+
+ i = level + 1;
+ while (i < FIELD_MAX && *curr->sf[i] != NUL) {
+ PUT(line);
+ if (*curr->af[i] == NUL)
+ sprintf(line, "%s%s", item_x[i], curr->sf[i]);
+ else
+ sprintf(line, "%s%s", item_x[i], curr->af[i]);
+ ind_lc += ilen_x[i];
+ level = i; /* Added at 2.11 <brosig@gmdzi.gmd.de> */
+ i++;
+ }
+
+ ind_indent = 0;
+ strcat(line, delim_p[level]);
+ SAVE;
+}
+
+
+static void
+new_entry(VOID_ARG)
+{
+ int let;
+ FIELD_PTR ptr;
+
+ if (in_range) {
+ ptr = curr;
+ curr = range_ptr;
+ IND_ERROR("Unmatched range opening operator %c.\n", idx_ropen);
+ in_range = FALSE;
+ curr = ptr;
+ }
+ flush_line(TRUE);
+
+ /* beginning of a new group? */
+
+ if (((curr->group != ALPHA) && (curr->group != prev->group) &&
+ (prev->group == SYMBOL)) ||
+ ((curr->group == ALPHA) &&
+ ((unsigned char)(let = TOLOWER(curr->sf[0][0]))
+ != (TOLOWER(prev->sf[0][0])))) ||
+ (german_sort &&
+ (curr->group != ALPHA) && (prev->group == ALPHA))) {
+ PUT(delim_t);
+ PUT(group_skip);
+ ind_lc += skiplen;
+ /* beginning of a new letter? */
+ put_header(let);
+ make_item(NIL);
+ } else
+ make_item(delim_t);
+}
+
+
+static void
+old_entry(VOID_ARG)
+{
+ int diff;
+
+ /* current entry identical to previous one: append pages */
+ diff = page_diff(end, curr);
+
+ if ((prev->type == curr->type) && (diff != -1) &&
+ (((diff == 0) && (prev_encap != NULL) && STREQ(encap, prev_encap)) ||
+ (merge_page && (diff == 1) &&
+ (prev_encap != NULL) && STREQ(encap, prev_encap)) ||
+ in_range)) {
+ end = curr;
+ /* extract in-range encaps out */
+ if (in_range &&
+ (*curr->encap != NUL) &&
+ (*curr->encap != idx_rclose) &&
+ STRNEQ(curr->encap, prev_encap)) {
+ sprintf(buff, "%s%s%s%s%s", encap_p, curr->encap,
+ encap_i, curr->lpg, encap_s);
+ wrap_line(FALSE);
+ }
+ if (in_range)
+ encap_range = TRUE;
+ } else {
+ flush_line(FALSE);
+ if ((diff == 0) && (prev->type == curr->type)) {
+IND_ERROR(
+"Conflicting entries: multiple encaps for the same page under same key.\n",
+"");
+ } else if (in_range && (prev->type != curr->type)) {
+IND_ERROR(
+"Illegal range formation: starting & ending pages are of different types.\n",
+"");
+ } else if (in_range && (diff == -1)) {
+IND_ERROR(
+"Illegal range formation: starting & ending pages cross chap/sec breaks.\n",
+"");
+ }
+ SAVE;
+ }
+}
+
+
+static int
+#if STDC
+page_diff(FIELD_PTR a,FIELD_PTR b)
+#else
+page_diff(a, b)
+FIELD_PTR a;
+FIELD_PTR b;
+#endif
+{
+ short i;
+
+ if (a->count != b->count)
+ return (-1);
+ for (i = 0; i < a->count - 1; i++)
+ if (a->npg[i] != b->npg[i])
+ return (-1);
+ return (b->npg[b->count - 1] - a->npg[a->count - 1]);
+}
+
+static void
+#if STDC
+put_header(int let)
+#else
+put_header(let)
+int let;
+#endif
+{
+ if (headings_flag)
+ {
+ PUT(heading_pre);
+ ind_lc += headprelen;
+ switch (curr->group)
+ {
+ case SYMBOL:
+ if (headings_flag > 0)
+ {
+ PUT(symhead_pos);
+ }
+ else
+ {
+ PUT(symhead_neg);
+ }
+ break;
+ case ALPHA:
+ if (headings_flag > 0)
+ {
+ let = TOUPPER(let);
+ PUTC(let);
+ }
+ else
+ {
+ let = TOLOWER(let);
+ PUTC(let);
+ }
+ break;
+ default:
+ if (headings_flag > 0)
+ {
+ PUT(numhead_pos);
+ }
+ else
+ {
+ PUT(numhead_neg);
+ }
+ break;
+ }
+ PUT(heading_suf);
+ ind_lc += headsuflen;
+ }
+}
+
+
+/* changes for 2.12 (May 20, 1993) by Julian Reschke (jr@ms.maus.de):
+ Use keywords suffix_2p, suffix_3p or suffix_mp for one, two or
+ multiple page ranges (when defined) */
+
+static void
+#if STDC
+flush_line(int print)
+#else
+flush_line(print)
+int print;
+#endif
+{
+ char tmp[sizeof(buff)];
+
+ if (page_diff(begin, end) != 0)
+ if (encap_range || (page_diff(begin, prev) > (*suffix_2p ? 0 : 1)))
+ {
+ int diff = page_diff(begin, end);
+
+ if ((diff == 1) && *suffix_2p)
+ sprintf(buff, "%s%s", begin->lpg, suffix_2p);
+ else if ((diff == 2) && *suffix_3p)
+ sprintf(buff, "%s%s", begin->lpg, suffix_3p);
+ else if ((diff >= 2) && *suffix_mp)
+ sprintf(buff, "%s%s", begin->lpg, suffix_mp);
+ else
+ sprintf(buff, "%s%s%s", begin->lpg, delim_r, end->lpg);
+
+ encap_range = FALSE;
+ }
+ else
+ sprintf(buff, "%s%s%s", begin->lpg, delim_n, end->lpg);
+ else
+ {
+ encap_range = FALSE; /* might be true from page range on same page */
+ strcpy(buff, begin->lpg);
+ }
+
+ if (*prev_encap != NUL)
+ {
+ strcpy(tmp, buff);
+ sprintf(buff, "%s%s%s%s%s",
+ encap_p, prev_encap, encap_i, tmp, encap_s);
+ }
+ wrap_line(print);
+}
+
+static void
+#if STDC
+wrap_line(int print)
+#else
+wrap_line(print)
+int print;
+#endif
+{
+ int len;
+
+ len = strlen(line) + strlen(buff) + ind_indent;
+ if (print) {
+ if (len > linemax) {
+ PUTLN(line);
+ PUT(indent_space);
+ ind_indent = indent_length;
+ } else
+ PUT(line);
+ PUT(buff);
+ } else {
+ if (len > linemax) {
+ PUTLN(line);
+ sprintf(line, "%s%s%s", indent_space, buff, delim_n);
+ ind_indent = indent_length;
+ } else {
+ strcat(buff, delim_n);
+ strcat(line, buff);
+ }
+ }
+}
+
+
+static void
+insert_page(VOID_ARG)
+{
+ int i = 0;
+ int j = 0;
+ int page = 0;
+
+ if (even_odd >= 0) {
+ /* find the rightmost digit */
+ while (pageno[i++] != NUL);
+ j = --i;
+ /* find the leftmost digit */
+ while (isdigit(pageno[--i]) && i > 0);
+ if (!isdigit(pageno[i]))
+ i++;
+ /* convert page from literal to numeric */
+ page = strtoint(&pageno[i]) + 1;
+ /* check even-odd numbering */
+ if (((even_odd == 1) && (page % 2 == 0)) ||
+ ((even_odd == 2) && (page % 2 == 1)))
+ page++;
+ pageno[j + 1] = NUL;
+ /* convert page back to literal */
+ while (page >= 10) {
+ pageno[j--] = TOASCII(page % 10);
+ page = page / 10;
+ }
+ pageno[j] = TOASCII(page);
+ if (i < j) {
+ while (pageno[j] != NUL)
+ pageno[i++] = pageno[j++];
+ pageno[i] = NUL;
+ }
+ }
+ PUT(setpage_open);
+ PUT(pageno);
+ PUT(setpage_close);
+ ind_lc += setpagelen;
+}
diff --git a/indexing/makeindex/src/genind.h b/indexing/makeindex/src/genind.h
new file mode 100644
index 0000000000..6d0cef06ee
--- /dev/null
+++ b/indexing/makeindex/src/genind.h
@@ -0,0 +1,73 @@
+/*
+ *
+ * This file is part of
+ * MakeIndex - A formatter and format independent index processor
+ *
+ * Copyright (C) 1989 by Chen & Harrison International Systems, Inc.
+ * Copyright (C) 1988 by Olivetti Research Center
+ * Copyright (C) 1987 by Regents of the University of California
+ *
+ * Author:
+ * Pehong Chen
+ * Chen & Harrison International Systems, Inc.
+ * Palo Alto, California
+ * USA
+ * (phc@renoir.berkeley.edu or chen@orc.olivetti.com)
+ *
+ * Contributors:
+ * Please refer to the CONTRIB file that comes with this release
+ * for a list of people who have contributed to this and/or previous
+ * release(s) of MakeIndex.
+ *
+ * All rights reserved by the copyright holders. See the copyright
+ * notice distributed with this software for a complete description of
+ * the conditions under which it is made available.
+ *
+ */
+
+#if KCC_20
+/* KCC preprocessor bug collapses multiple blanks to single blank */
+#define IND_ERROR(F, D) { \
+ if (idx_dot) { \
+ fprintf(ilg_fp, "\n"); \
+ idx_dot = FALSE; \
+ } \
+ fprintf(ilg_fp, \
+"## Warning (input = %s, line = %d; output = %s, line = %d):\n\040\040 -- ", \
+ curr->fn, curr->lc, ind_fn, ind_lc+1); \
+ fprintf(ilg_fp, F, D); \
+ ind_ec++; \
+}
+#else
+#define IND_ERROR(F, D) { \
+ if (idx_dot) { \
+ fprintf(ilg_fp, "\n"); \
+ idx_dot = FALSE; \
+ } \
+ fprintf(ilg_fp, \
+ "## Warning (input = %s, line = %d; output = %s, line = %d):\n -- ", \
+ curr->fn, curr->lc, ind_fn, ind_lc+1); \
+ fprintf(ilg_fp, F, D); \
+ ind_ec++; \
+}
+#endif
+
+#define PUTC(C) { \
+ fputc(C, ind_fp); \
+}
+
+#define PUT(S) { \
+ fputs(S, ind_fp); \
+}
+
+#define PUTLN(S) { \
+ fputs(S, ind_fp); \
+ fputc('\n', ind_fp); \
+ ind_lc++; \
+}
+
+#define SAVE { \
+ begin = end = curr; \
+ prev_encap = encap; \
+}
+
diff --git a/indexing/makeindex/src/make-kcc.mic b/indexing/makeindex/src/make-kcc.mic
new file mode 100644
index 0000000000..3a02daeca5
--- /dev/null
+++ b/indexing/makeindex/src/make-kcc.mic
@@ -0,0 +1,13 @@
+! Command file to build MakeIndex on TOPS-20 with KCC
+! [12-Dec-89]
+
+kcc -DOS_TOPS20 -DKCC_20 -DSHORTNAMES -Dshort=int -c genind.c
+kcc -DOS_TOPS20 -DKCC_20 -DSHORTNAMES -Dshort=int -c mkind.c
+kcc -DOS_TOPS20 -DKCC_20 -DSHORTNAMES -Dshort=int -c qsort.c
+kcc -DOS_TOPS20 -DKCC_20 -DSHORTNAMES -Dshort=int -c scanid.c
+kcc -DOS_TOPS20 -DKCC_20 -DSHORTNAMES -Dshort=int -c scanst.c
+kcc -DOS_TOPS20 -DKCC_20 -DSHORTNAMES -Dshort=int -c sortid.c
+kcc -DOS_TOPS20 -DKCC_20 -DSHORTNAMES -Dshort=int genind.rel mkind.rel -
+ qsort.rel scanid.rel scanst.rel sortid.rel -o makidx.exe
+reset
+rename makidx.exe makeindex.exe
diff --git a/indexing/makeindex/src/make-lc.bat b/indexing/makeindex/src/make-lc.bat
new file mode 100644
index 0000000000..23a969b59f
--- /dev/null
+++ b/indexing/makeindex/src/make-lc.bat
@@ -0,0 +1,9 @@
+lc -dOS_PCDOS=1 -dIBM_PC_LATTICE=1 -c -ca -cf -cs -cz -f -ml -S=32K genind.c
+lc -dOS_PCDOS=1 -dIBM_PC_LATTICE=1 -c -ca -cf -cs -cz -f -ml -S=32K mkind.c
+lc -dOS_PCDOS=1 -dIBM_PC_LATTICE=1 -c -ca -cf -cs -cz -f -ml -S=32K qsort.c
+lc -dOS_PCDOS=1 -dIBM_PC_LATTICE=1 -c -ca -cf -cs -cz -f -ml -S=32K scanid.c
+lc -dOS_PCDOS=1 -dIBM_PC_LATTICE=1 -c -ca -cf -cs -cz -f -ml -S=32K scanst.c
+lc -dOS_PCDOS=1 -dIBM_PC_LATTICE=1 -c -ca -cf -cs -cz -f -ml -S=32K sortid.c
+lc -L -f -ml genind.obj mkind.obj qsort.obj scanid.obj scanst.obj sortid.obj
+del makeindx.exe
+ren genind.exe makeindx.exe
diff --git a/indexing/makeindex/src/make-msc.bat b/indexing/makeindex/src/make-msc.bat
new file mode 100644
index 0000000000..5c0dddeecd
--- /dev/null
+++ b/indexing/makeindex/src/make-msc.bat
@@ -0,0 +1,7 @@
+cl -c -AL -Zd -Oailt -W3 -Zi -DOS_PCDOS -DIBM_PC_MICROSOFT genind.c
+cl -c -AL -Zd -Oailt -W3 -Zi -DOS_PCDOS -DIBM_PC_MICROSOFT mkind.c
+cl -c -AL -Zd -Oailt -W3 -Zi -DOS_PCDOS -DIBM_PC_MICROSOFT qsort.c
+cl -c -AL -Zd -Oailt -W3 -Zi -DOS_PCDOS -DIBM_PC_MICROSOFT scanid.c
+cl -c -AL -Zd -Oailt -W3 -Zi -DOS_PCDOS -DIBM_PC_MICROSOFT scanst.c
+cl -c -AL -Zd -Oailt -W3 -Zi -DOS_PCDOS -DIBM_PC_MICROSOFT sortid.c
+cl -o makeindx.exe genind.obj mkind.obj qsort.obj scanid.obj scanst.obj sortid.obj
diff --git a/indexing/makeindex/src/make-pcc.mic b/indexing/makeindex/src/make-pcc.mic
new file mode 100644
index 0000000000..c7226cc3d0
--- /dev/null
+++ b/indexing/makeindex/src/make-pcc.mic
@@ -0,0 +1,13 @@
+! Command file to build MakeIndex on TOPS-20 with PCC
+! [12-Dec-89]
+
+cc -DOS_TOPS20 -DPCC_20 -DSHORTNAMES -c genind.c
+cc -DOS_TOPS20 -DPCC_20 -DSHORTNAMES -c mkind.c
+cc -DOS_TOPS20 -DPCC_20 -DSHORTNAMES -c qsort.c
+cc -DOS_TOPS20 -DPCC_20 -DSHORTNAMES -c scanid.c
+cc -DOS_TOPS20 -DPCC_20 -DSHORTNAMES -c scanst.c
+cc -DOS_TOPS20 -DPCC_20 -DSHORTNAMES -c sortid.c
+cc -DOS_TOPS20 -DPCC_20 -DSHORTNAMES genind.rel mkind.rel qsort.rel -
+ scanid.rel scanst.rel sortid.rel -o makidx.exe
+reset
+rename makidx.exe makeindex.exe
diff --git a/indexing/makeindex/src/make-tcc.bat b/indexing/makeindex/src/make-tcc.bat
new file mode 100644
index 0000000000..a1296828d9
--- /dev/null
+++ b/indexing/makeindex/src/make-tcc.bat
@@ -0,0 +1,7 @@
+tcc -c -A -N -ml -v -y -DOS_PCDOS=1 -DIBM_PC_TURBO=1 genind.c
+tcc -c -A -N -ml -v -y -DOS_PCDOS=1 -DIBM_PC_TURBO=1 mkind.c
+tcc -c -A -N -ml -v -y -DOS_PCDOS=1 -DIBM_PC_TURBO=1 qsort.c
+tcc -c -A -N -ml -v -y -DOS_PCDOS=1 -DIBM_PC_TURBO=1 scanid.c
+tcc -c -A -N -ml -v -y -DOS_PCDOS=1 -DIBM_PC_TURBO=1 scanst.c
+tcc -c -A -N -ml -v -y -DOS_PCDOS=1 -DIBM_PC_TURBO=1 sortid.c
+tcc -A -N -ml -v -y -emakeindx.exe genind.obj mkind.obj qsort.obj scanid.obj scanst.obj sortid.obj
diff --git a/indexing/makeindex/src/make-vms.com b/indexing/makeindex/src/make-vms.com
new file mode 100644
index 0000000000..91abdde610
--- /dev/null
+++ b/indexing/makeindex/src/make-vms.com
@@ -0,0 +1,10 @@
+$! Compile and link MakeIndex under VAX/VMS for people who don't have make.
+$ cc = "CC/NOLIST/DEFINE=(""OS_VAXVMS=1"")"
+$ cc genind
+$ cc mkind
+$ cc qsort
+$ cc scanid
+$ cc scanst
+$ cc sortid
+$ link genind,mkind,qsort,scanid,scanst,sortid,-
+ sys$library:vaxcrtl/lib /exe=makeindex
diff --git a/indexing/makeindex/src/makefile.bsd b/indexing/makeindex/src/makefile.bsd
new file mode 100644
index 0000000000..6f1331bf29
--- /dev/null
+++ b/indexing/makeindex/src/makefile.bsd
@@ -0,0 +1,141 @@
+#
+# Makefile for the program `makeindex'
+#
+# Copyright (C) 1987 Pehong Chen (phc@renoir.berkeley.edu)
+# Computer Science Division
+# University of California, Berkeley
+#
+
+BINDIR = /usr/local/bin
+
+CP = /bin/cp
+
+MANDIR = /usr/local/man/man1
+
+MANUAL = makeindex.l
+
+DOC = makeindex.tex
+
+EXTHDRS = /usr/include/ctype.h \
+ /usr/include/stdio.h
+
+HDRS = genind.h \
+ mkind.h \
+ scanid.h \
+ scanst.h
+
+CFLAGS = -O
+
+LDFLAGS = $(CFLAGS)
+
+LIBS =
+
+LINKER = $(CC)
+
+MAKEFILE = Makefile
+
+OBJS = genind.o \
+ mkind.o \
+ qsort.o \
+ scanid.o \
+ scanst.o \
+ sortid.o
+
+PRINT = psgrind
+
+RM = /bin/rm -f
+
+SRCS = genind.c \
+ mkind.c \
+ qsort.c \
+ scanid.c \
+ scanst.c \
+ sortid.c
+
+PROGRAM = makeindex
+
+TAR = $(PROGRAM).tar
+
+SHAR = $(PROGRAM).shar
+
+ALL = $(MAKEFILE) $(DOC) $(MANUAL) $(HDRS) $(SRCS)
+
+$(PROGRAM): $(OBJS)
+ @ $(RM) -f $(PROGRAM)
+ $(LINKER) $(LDFLAGS) $(OBJS) $(LIBS) -o $(PROGRAM)
+ @size $(PROGRAM)
+
+install: $(PROGRAM)
+ install -c -s -m 0755 $(PROGRAM) $(BINDIR)
+ install -c -m 0744 ../doc/makeindex.l $(MANDIR)/makeindex.1
+ @ls -lgs $(BINDIR)/$(PROGRAM)
+
+cp-install:
+ $(CP) $(PROGRAM) $(BINDIR)
+ strip $(BINDIR)/$(PROGRAM)
+ chmod 755 $(BINDIR)/$(PROGRAM)
+ $(CP) ../doc/makeindex.l $(MANDIR)/makeindex.1
+ chmod 744 $(MANDIR)/makeindex.1
+
+uninstall:
+ $(RM) $(BINDIR)/$(PROGRAM)
+ $(RM) $(MANDIR)/makeindex.1
+
+tar:
+ @ $(RM) -f $(TAR)
+ tar -cf $(TAR) $(ALL)
+
+shar:
+ @ $(RM) -f $(SHAR)
+ shar $(SHAR) $(ALL)
+
+dist:
+ cp $(PROGRAM) $(BINDIR)
+ rcp $(PROGRAM) monet:$(BINDIR)
+ rcp $(PROGRAM) arpa:$(BINDIR)
+ rcp $(PROGRAM) harrison@vangogh:bin
+
+clean:
+ - $(RM) $(OBJS)
+ - $(RM) core
+ - $(RM) $(PROGRAM)
+ - $(RM) *.out
+
+clobber: clean
+
+depend:
+ @ $(RM) -f .#*.[chly]
+ mkmf -f $(MAKEFILE) PROGRAM=$(PROGRAM) BINDIR=$(BINDIR)
+
+index:
+ @ctags -wx $(HDRS) $(SRCS)
+
+print:
+ @$(PRINT) $(HDRS) $(SRCS)
+
+man:
+ ptroff -man $(MANUAL)
+
+program: $(PROGRAM)
+
+tags: $(HDRS) $(SRCS)
+ @ctags $(HDRS) $(SRCS)
+
+update: $(BINDIR)/$(PROGRAM)
+
+$(BINDIR)/$(PROGRAM): $(SRCS) $(HDRS) $(EXTHDRS)
+ @make -f $(MAKEFILE) BINDIR=$(BINDIR) install
+
+.DEFAULT:
+ co $@
+###
+genind.o: mkind.h /usr/include/stdio.h /usr/include/ctype.h \
+ genind.h
+mkind.o: mkind.h /usr/include/stdio.h /usr/include/ctype.h
+qsort.o: mkind.h /usr/include/stdio.h
+scanid.o: mkind.h /usr/include/stdio.h /usr/include/ctype.h \
+ scanid.h
+scanst.o: mkind.h /usr/include/stdio.h /usr/include/ctype.h \
+ scanst.h
+sortid.o: mkind.h /usr/include/stdio.h /usr/include/ctype.h
+
diff --git a/indexing/makeindex/src/makefile.kcc b/indexing/makeindex/src/makefile.kcc
new file mode 100644
index 0000000000..034e734a77
--- /dev/null
+++ b/indexing/makeindex/src/makefile.kcc
@@ -0,0 +1,123 @@
+# Makefile modified for DEC-20 (KCC-20 compiler) [13-Jan-88] (only major
+# targets supported)
+#
+# Makefile for the program `makeindex'
+#
+# Copyright (C) 1987 Pehong Chen (phc@renoir.berkeley.edu)
+# Computer Science Division
+# University of California, Berkeley
+#
+
+CC = kcc
+O = .rel
+X = .exe
+INCLUDE = /usr/include/
+INCLUDE = c:
+
+DEST = /usr/local/bin
+DEST = TEX:
+
+MANDIR = /usr/local/man/manl
+MANDIR = NUL:
+
+MANUAL = makeindex.l
+
+DOC = makeindex.tex
+
+EXTHDRS = ${INCLUDE}ctype.h \
+ ${INCLUDE}stdio.h
+
+HDRS = genind.h \
+ mkind.h \
+ scanid.h \
+ scanst.h
+
+# The -Dshort=int is needed for KCC versions before 583 (13-Jan-88);
+# that version or later works correctly if it is dropped
+CFLAGS = -DOS_TOPS20 -DKCC_20 -DSHORTNAMES -Dshort=int
+
+LDFLAGS = $(CFLAGS)
+
+LIBS =
+
+LINKER = $(CC)
+
+MAKEFILE = Makefile
+
+OBJS = genind${O} \
+ mkind${O} \
+ qsort${O} \
+ scanid${O} \
+ scanst${O} \
+ sortid${O}
+
+PRINT = psgrind
+
+SRCS = genind.c \
+ mkind.c \
+ qsort.c \
+ scanid.c \
+ scanst.c \
+ sortid.c
+
+PROGRAM = makeindex
+
+TAR = $(PROGRAM).tar
+
+SHAR = $(PROGRAM).shar
+
+ALL = $(MAKEFILE) $(DOC) $(MANUAL) $(HDRS) $(SRCS)
+
+$(PROGRAM): $(PROGRAM)$(X)
+
+$(PROGRAM)$(X): $(OBJS)
+ $(LINKER) $(LDFLAGS) $(OBJS) $(LIBS) -o makidx$(X)
+ reset
+ ${MV} makidx$(X) $(PROGRAM)$(X)
+
+install: $(PROGRAM)
+ install -c -s -m 0755 $(PROGRAM) $(DEST)
+ @ls -lgs $(DEST)/$(PROGRAM)
+
+tar:; @rm -f $(TAR)
+ tar -cf $(TAR) $(ALL)
+
+shar:; @rm -f $(SHAR)
+ shar $(SHAR) $(ALL)
+
+dist:; cp $(PROGRAM) $(DEST)
+ rcp $(PROGRAM) monet:$(DEST)
+ rcp $(PROGRAM) arpa:$(DEST)
+ rcp $(PROGRAM) harrison@vangogh:bin
+
+clean:; @rm -f $(OBJS) core $(PROGRAM) *${O}ut
+
+depend:; @rm -f .#*.[chly]
+ mkmf -f $(MAKEFILE) PROGRAM=$(PROGRAM) DEST=$(DEST)
+
+index:; @ctags -wx $(HDRS) $(SRCS)
+
+print:; @$(PRINT) $(HDRS) $(SRCS)
+
+man:; ptroff -man $(MANUAL)
+
+program: $(PROGRAM)
+
+tags: $(HDRS) $(SRCS); @ctags $(HDRS) $(SRCS)
+
+update: $(DEST)/$(PROGRAM)
+
+$(DEST)/$(PROGRAM): $(SRCS) $(HDRS) $(EXTHDRS)
+ @make -f $(MAKEFILE) DEST=$(DEST) install
+
+# .DEFAULT:; co $@
+###
+genind${O}: mkind.h ${INCLUDE}stdio.h ${INCLUDE}ctype.h \
+ genind.h
+mkind${O}: mkind.h ${INCLUDE}stdio.h ${INCLUDE}ctype.h
+qsort${O}: mkind.h ${INCLUDE}stdio.h
+scanid${O}: mkind.h ${INCLUDE}stdio.h ${INCLUDE}ctype.h \
+ scanid.h
+scanst${O}: mkind.h ${INCLUDE}stdio.h ${INCLUDE}ctype.h \
+ scanst.h
+sortid${O}: mkind.h ${INCLUDE}stdio.h ${INCLUDE}ctype.h
diff --git a/indexing/makeindex/src/makefile.lc b/indexing/makeindex/src/makefile.lc
new file mode 100644
index 0000000000..f1d5725bef
--- /dev/null
+++ b/indexing/makeindex/src/makefile.lc
@@ -0,0 +1,139 @@
+# Makefile modified for IBM PC DOS (Lattice C 6.0.1) [11-Dec-89] (only major
+# targets supported)
+#
+# Makefile for the program `makeindex'
+#
+# Copyright (C) 1987 Pehong Chen (phc@renoir.berkeley.edu)
+# Computer Science Division
+# University of California, Berkeley
+#
+
+CC = lc
+O = .obj
+X = .exe
+INCLUDE = /usr/include
+INCLUDE = c:/sys/lc/include
+
+DEST = /usr/local/bin
+DEST = c:/usr/bin
+
+MANDIR = /usr/local/man/manl
+MANDIR = nul
+
+MANUAL = makeindex.l
+
+DOC = makeindex.tex
+
+EXTHDRS = ${INCLUDE}\ctype.h \
+ ${INCLUDE}\stdio.h
+
+HDRS = genind.h \
+ mkind.h \
+ scanid.h \
+ scanst.h
+
+XCFLAGS=
+
+LDFLAGS = -L -f -ml $(XCFLAGS)
+
+CFLAGS = -dOS_PCDOS=1 -dIBM_PC_LATTICE=1 -c -ca -cf -cs -cz -f -ml -S=32K
+
+LIBS =
+
+LINKER = link
+
+MAKEFILE = Makefile
+
+OBJS = genind${O} mkind${O} qsort${O} scanid${O} scanst${O} sortid${O}
+
+PRINT = psgrind
+
+SRCS = genind.c \
+ mkind.c \
+ qsort.c \
+ scanid.c \
+ scanst.c \
+ sortid.c
+
+PROGRAM = makeindx
+
+TAR = $(PROGRAM).tar
+
+SHAR = $(PROGRAM).shar
+
+ALL = $(MAKEFILE) $(DOC) $(MANUAL) $(HDRS) $(SRCS)
+
+# Default stack is too small--increase
+STACKSIZE=8000
+
+LINKFLAGS=/MAP/LINE/ST:$(STACKSIZE)
+
+# Rules...
+
+.SUFFIXES:
+.SUFFIXES: .obj .c
+
+.c.obj:
+ $(CC) $(CFLAGS) $*.c
+
+RM = del
+
+$(PROGRAM): $(PROGRAM)$(X)
+
+$(PROGRAM)$(X): $(OBJS)
+ $(CC) $(LDFLAGS) $(OBJS)
+ del $(PROGRAM)$(X)
+ ren genind$(X) $(PROGRAM)$(X)
+
+install: $(PROGRAM)
+ install -c -s -m 0755 $(PROGRAM) $(DEST)
+ @ls -lgs $(DEST)/$(PROGRAM)
+
+tar:
+ @rm -f $(TAR)
+ tar -cf $(TAR) $(ALL)
+
+shar:
+ @rm -f $(SHAR)
+ shar $(SHAR) $(ALL)
+
+dist:
+ cp $(PROGRAM) $(DEST)
+ rcp $(PROGRAM) monet:$(DEST)
+ rcp $(PROGRAM) arpa:$(DEST)
+ rcp $(PROGRAM) harrison@vangogh:bin
+
+clean:
+ @rm -f $(OBJS) core $(PROGRAM) *${O}ut
+
+depend:
+ @rm -f .#*.[chly]
+ mkmf -f $(MAKEFILE) PROGRAM=$(PROGRAM) DEST=$(DEST)
+
+index:
+ @ctags -wx $(HDRS) $(SRCS)
+
+print:
+ @$(PRINT) $(HDRS) $(SRCS)
+
+man:
+ ptroff -man $(MANUAL)
+
+program: $(PROGRAM)
+
+tags: $(HDRS) $(SRCS)
+ @ctags $(HDRS) $(SRCS)
+
+# update: $(DEST)/$(PROGRAM)
+
+# $(DEST)/$(PROGRAM): $(SRCS) $(HDRS) $(EXTHDRS)
+# @make -f $(MAKEFILE) DEST=$(DEST) install
+
+# .DEFAULT:; co $@
+###
+genind${O}: mkind.h genind.h
+mkind${O}: mkind.h
+qsort${O}: mkind.h
+scanid${O}: mkind.h scanid.h
+scanst${O}: mkind.h scanst.h
+sortid${O}: mkind.h
diff --git a/indexing/makeindex/src/makefile.msc b/indexing/makeindex/src/makefile.msc
new file mode 100644
index 0000000000..8e37e8f79a
--- /dev/null
+++ b/indexing/makeindex/src/makefile.msc
@@ -0,0 +1,144 @@
+# Makefile modified for IBM PC DOS (Microsoft C) [13-Jan-88] (only major
+# targets supported)
+#
+# Makefile for the program `makeindex'
+#
+# Copyright (C) 1987 Pehong Chen (phc@renoir.berkeley.edu)
+# Computer Science Division
+# University of California, Berkeley
+#
+
+CC = cl
+O = .obj
+X = .exe
+INCLUDE = /usr/include
+INCLUDE = c:/sys/msc/include
+
+DEST = /usr/local/bin
+DEST = c:/usr/bin
+
+MANDIR = /usr/local/man/manl
+MANDIR = nul
+
+MANUAL = makeindex.l
+
+DOC = makeindex.tex
+
+EXTHDRS = ${INCLUDE}\ctype.h \
+ ${INCLUDE}\stdio.h
+
+HDRS = genind.h \
+ mkind.h \
+ scanid.h \
+ scanst.h
+
+XCFLAGS=
+
+CFLAGS= -AL -Zd -Oailt -W3 -Zi -DOS_PCDOS -DIBM_PC_MICROSOFT $(XCFLAGS)
+
+LDFLAGS = $(CFLAGS)
+
+LIBS =
+
+LINKER = link
+
+MAKEFILE = Makefile
+
+OBJS = genind${O} mkind${O} qsort${O} scanid${O} scanst${O} sortid${O}
+
+PRINT = psgrind
+
+SRCS = genind.c \
+ mkind.c \
+ qsort.c \
+ scanid.c \
+ scanst.c \
+ sortid.c
+
+PROGRAM = makeindx
+
+TAR = $(PROGRAM).tar
+
+SHAR = $(PROGRAM).shar
+
+ALL = $(MAKEFILE) $(DOC) $(MANUAL) $(HDRS) $(SRCS)
+
+# Default stack is too small--increase
+STACKSIZE=8000
+
+LINKFLAGS=/MAP/LINE/ST:$(STACKSIZE)
+
+# Rules...
+
+.SUFFIXES:
+.SUFFIXES: .obj .c .sym .map
+
+.c.obj:
+ $(CC) -c $(CFLAGS) $*.c
+# $(CC) -c $(CFLAGS) $*.c >$*.clg
+# errshow <$*.clg >$*.cer
+# del $*.clg
+
+.map.sym:
+ mapsym $*
+ del $*.map
+
+RM = del
+
+$(PROGRAM): $(PROGRAM)$(X)
+
+$(PROGRAM)$(X): $(OBJS)
+ $(CC) -o $(PROGRAM)$(X) $(OBJS)
+
+install: $(PROGRAM)
+ install -c -s -m 0755 $(PROGRAM) $(DEST)
+ @ls -lgs $(DEST)/$(PROGRAM)
+
+tar:
+ @rm -f $(TAR)
+ tar -cf $(TAR) $(ALL)
+
+shar:
+ @rm -f $(SHAR)
+ shar $(SHAR) $(ALL)
+
+dist:
+ cp $(PROGRAM) $(DEST)
+ rcp $(PROGRAM) monet:$(DEST)
+ rcp $(PROGRAM) arpa:$(DEST)
+ rcp $(PROGRAM) harrison@vangogh:bin
+
+clean:
+ @rm -f $(OBJS) $(PROGRAM)$(X)
+
+depend:
+ @rm -f .#*.[chly]
+ mkmf -f $(MAKEFILE) PROGRAM=$(PROGRAM) DEST=$(DEST)
+
+index:
+ @ctags -wx $(HDRS) $(SRCS)
+
+print:
+ @$(PRINT) $(HDRS) $(SRCS)
+
+man:
+ ptroff -man $(MANUAL)
+
+program: $(PROGRAM)
+
+tags: $(HDRS) $(SRCS)
+ @ctags $(HDRS) $(SRCS)
+
+# update: $(DEST)/$(PROGRAM)
+
+# $(DEST)/$(PROGRAM): $(SRCS) $(HDRS) $(EXTHDRS)
+# @make -f $(MAKEFILE) DEST=$(DEST) install
+
+# .DEFAULT:; co $@
+###
+genind${O}: mkind.h genind.h
+mkind${O}: mkind.h
+qsort${O}: mkind.h
+scanid${O}: mkind.h scanid.h
+scanst${O}: mkind.h scanst.h
+sortid${O}: mkind.h
diff --git a/indexing/makeindex/src/makefile.os2 b/indexing/makeindex/src/makefile.os2
new file mode 100644
index 0000000000..ac4b7efd03
--- /dev/null
+++ b/indexing/makeindex/src/makefile.os2
@@ -0,0 +1,138 @@
+# Makefile modified for IBM PC DOS (Microsoft C) [13-Jan-88] (only major
+# targets supported)
+#
+# Modified by Eberhard Mattes for OS/2 and MS C 6.0 [18-Jul-90]
+#
+# Makefile for the program `makeindex'
+#
+# Copyright (C) 1987 Pehong Chen (phc@renoir.berkeley.edu)
+# Computer Science Division
+# University of California, Berkeley
+#
+
+CC = cl
+O = .obj
+X = .exe
+# INCLUDE = /usr/include
+# INCLUDE = c:/sys/msc/include
+
+DEST = /usr/local/bin
+DEST = c:/usr/bin
+
+MANDIR = /usr/local/man/manl
+MANDIR = nul
+
+MANUAL = makeindex.l
+
+DOC = makeindex.tex
+
+HDRS = genind.h \
+ mkind.h \
+ scanid.h \
+ scanst.h
+
+XCFLAGS=
+
+CFLAGS= -AL -Ocegls -W3 -F 2000 -Lp -Fb -B2 C2L -DOS_PCDOS -DIBM_PC_MICROSOFT $(XCFLAGS)
+#
+# -AL Large model
+# -Oc Block-level common subexpression optimization
+# -Oe Global register allocation
+# -Og Global code optimization
+# -Ol Loop code optimization
+# -Os Optimize for space (I prefer small and slow programs)
+# -Oi Generate intrinsic functions (not used, see line above)
+# -W3 Set warning level (level 4 not required)
+# -F 2000 Set stack size (hexadecimal!)
+# -Lp Link for protected mode (use llibceP.lib)
+# -Fb Invoke bind
+# -B2 C2L Large-model pass 2 (OS/2 only, required for -Og)
+
+
+LDFLAGS = $(CFLAGS)
+
+LIBS =
+
+LINKER = link
+
+MAKEFILE = Makefile
+
+OBJS = genind$(O) mkind$(O) qsort$(O) scanid$(O) scanst$(O) sortid$(O)
+
+PRINT = psgrind
+
+SRCS = genind.c \
+ mkind.c \
+ qsort.c \
+ scanid.c \
+ scanst.c \
+ sortid.c
+
+PROGRAM = makeindx
+
+TAR = $(PROGRAM).tar
+
+SHAR = $(PROGRAM).shar
+
+ALL = $(MAKEFILE) $(DOC) $(MANUAL) $(HDRS) $(SRCS)
+
+# Rules...
+
+.SUFFIXES:
+.SUFFIXES: .obj .c
+
+.c.obj:
+ $(CC) -c $(CFLAGS) $*.c
+
+RM = del
+
+$(PROGRAM): $(PROGRAM)$(X)
+
+$(PROGRAM)$(X): $(OBJS) $(PROGRAM).def
+ $(CC) -o $(PROGRAM)$(X) $(CFLAGS) $(OBJS) $(PROGRAM).def
+
+install: $(PROGRAM)
+ install -c -s -m 0755 $(PROGRAM) $(DEST)
+ @ls -lgs $(DEST)/$(PROGRAM)
+
+tar:
+ @rm -f $(TAR)
+ tar -cf $(TAR) $(ALL)
+
+shar:
+ @rm -f $(SHAR)
+ shar $(SHAR) $(ALL)
+
+dist:
+ cp $(PROGRAM) $(DEST)
+ rcp $(PROGRAM) monet:$(DEST)
+ rcp $(PROGRAM) arpa:$(DEST)
+ rcp $(PROGRAM) harrison@vangogh:bin
+
+clean:
+ @rm -f $(OBJS) core $(PROGRAM) *$(O)
+
+depend:
+ @rm -f .#*.[chly]
+ mkmf -f $(MAKEFILE) PROGRAM=$(PROGRAM) DEST=$(DEST)
+
+index:
+ @ctags -wx $(HDRS) $(SRCS)
+
+print:
+ @$(PRINT) $(HDRS) $(SRCS)
+
+man:
+ ptroff -man $(MANUAL)
+
+program: $(PROGRAM)
+
+tags: $(HDRS) $(SRCS)
+ @ctags $(HDRS) $(SRCS)
+
+genind$(O): mkind.h genind.h
+mkind$(O): mkind.h
+qsort$(O): mkind.h
+scanid$(O): mkind.h scanid.h
+scanst$(O): mkind.h scanst.h
+sortid$(O): mkind.h
diff --git a/indexing/makeindex/src/makefile.pcc b/indexing/makeindex/src/makefile.pcc
new file mode 100644
index 0000000000..1471626de1
--- /dev/null
+++ b/indexing/makeindex/src/makefile.pcc
@@ -0,0 +1,124 @@
+# Makefile modified for DEC-20 (PCC-20 compiler) [13-Jan-88] (only major
+# targets supported)
+#
+# Makefile for the program `makeindex'
+#
+# Copyright (C) 1987 Pehong Chen (phc@renoir.berkeley.edu)
+# Computer Science Division
+# University of California, Berkeley
+#
+
+CC = cc
+O = .rel
+X = .exe
+INCLUDE = /usr/include/
+INCLUDE = pcc:
+
+DEST = /usr/local/bin
+DEST = TEX:
+
+MANDIR = /usr/local/man/manl
+MANDIR = NUL:
+
+MANUAL = makeindex.l
+
+DOC = makeindex.tex
+
+EXTHDRS = ${INCLUDE}ctype.h \
+ ${INCLUDE}stdio.h
+
+HDRS = genind.h \
+ mkind.h \
+ scanid.h \
+ scanst.h
+
+CFLAGS = -DOS_TOPS20 -DPCC_20 -DSHORTNAMES
+
+LDFLAGS = $(CFLAGS)
+
+LIBS =
+
+LINKER = $(CC)
+
+MAKEFILE = Makefile
+
+OBJS = genind${O} \
+ mkind${O} \
+ qsort${O} \
+ scanid${O} \
+ scanst${O} \
+ sortid${O}
+
+PRINT = psgrind
+
+SRCS = genind.c \
+ mkind.c \
+ qsort.c \
+ scanid.c \
+ scanst.c \
+ sortid.c
+
+PROGRAM = makeindex
+
+TAR = $(PROGRAM).tar
+
+SHAR = $(PROGRAM).shar
+
+ALL = $(MAKEFILE) $(DOC) $(MANUAL) $(HDRS) $(SRCS)
+
+$(PROGRAM): $(PROGRAM)$(X)
+
+$(PROGRAM)$(X): $(OBJS)
+# @rm -f $(PROGRAM)
+ $(LINKER) $(LDFLAGS) $(OBJS) $(LIBS) -o makidx$(X)
+ reset
+ ${MV} makidx$(X) $(PROGRAM)$(X)
+# @size $(PROGRAM)
+
+install: $(PROGRAM)
+ install -c -s -m 0755 $(PROGRAM) $(DEST)
+ @ls -lgs $(DEST)/$(PROGRAM)
+
+tar:; @rm -f $(TAR)
+ tar -cf $(TAR) $(ALL)
+
+shar:; @rm -f $(SHAR)
+ shar $(SHAR) $(ALL)
+
+dist:; cp $(PROGRAM) $(DEST)
+ rcp $(PROGRAM) monet:$(DEST)
+ rcp $(PROGRAM) arpa:$(DEST)
+ rcp $(PROGRAM) harrison@vangogh:bin
+
+clean:; @rm -f $(OBJS) core $(PROGRAM) *${O}ut
+
+depend:; @rm -f .#*.[chly]
+ mkmf -f $(MAKEFILE) PROGRAM=$(PROGRAM) DEST=$(DEST)
+
+index:; @ctags -wx $(HDRS) $(SRCS)
+
+print:; @$(PRINT) $(HDRS) $(SRCS)
+
+man:; ptroff -man $(MANUAL)
+
+program: $(PROGRAM)
+
+tags: $(HDRS) $(SRCS); @ctags $(HDRS) $(SRCS)
+
+update: $(DEST)/$(PROGRAM)
+
+$(DEST)/$(PROGRAM): $(SRCS) $(HDRS) $(EXTHDRS)
+ @make -f $(MAKEFILE) DEST=$(DEST) install
+
+# .DEFAULT:; co $@
+###
+genind${O}: mkind.h ${INCLUDE}stdio.h ${INCLUDE}ctype.h \
+ genind.h
+mkind${O}: mkind.h ${INCLUDE}stdio.h ${INCLUDE}ctype.h
+qsort${O}: mkind.h ${INCLUDE}stdio.h
+scanid${O}: mkind.h ${INCLUDE}stdio.h ${INCLUDE}ctype.h \
+ scanid.h
+scanst${O}: mkind.h ${INCLUDE}stdio.h ${INCLUDE}ctype.h \
+ scanst.h
+sortid${O}: mkind.h ${INCLUDE}stdio.h ${INCLUDE}ctype.h
+
diff --git a/indexing/makeindex/src/makefile.tcc b/indexing/makeindex/src/makefile.tcc
new file mode 100644
index 0000000000..7ad0c12c91
--- /dev/null
+++ b/indexing/makeindex/src/makefile.tcc
@@ -0,0 +1,146 @@
+# Makefile modified for IBM PC DOS (Turbo C 2.0) [11-Dec-89] (only major
+# targets supported)
+#
+# Makefile for the program `makeindex'
+#
+# Copyright (C) 1987 Pehong Chen (phc@renoir.berkeley.edu)
+# Computer Science Division
+# University of California, Berkeley
+#
+
+CC = tcc
+O = .obj
+X = .exe
+INCLUDE = /usr/include
+INCLUDE = c:/sys/tc/include
+
+DEST = /usr/local/bin
+DEST = c:/usr/bin
+
+MANDIR = /usr/local/man/manl
+MANDIR = nul
+
+MANUAL = makeindex.l
+
+DOC = makeindex.tex
+
+EXTHDRS = ${INCLUDE}\ctype.h \
+ ${INCLUDE}\stdio.h
+
+HDRS = genind.h \
+ mkind.h \
+ scanid.h \
+ scanst.h
+
+XCFLAGS=
+
+LDFLAGS = -A -N -ml -v -y $(XCFLAGS)
+
+CFLAGS = -DOS_PCDOS=1 -DIBM_PC_TURBO=1 $(LDFLAGS)
+
+LIBS =
+
+LINKER = link
+
+MAKEFILE = Makefile
+
+OBJS = genind${O} mkind${O} qsort${O} scanid${O} scanst${O} sortid${O}
+
+PRINT = psgrind
+
+SRCS = genind.c \
+ mkind.c \
+ qsort.c \
+ scanid.c \
+ scanst.c \
+ sortid.c
+
+PROGRAM = makeindx
+
+TAR = $(PROGRAM).tar
+
+SHAR = $(PROGRAM).shar
+
+ALL = $(MAKEFILE) $(DOC) $(MANUAL) $(HDRS) $(SRCS)
+
+# Default stack is too small--increase
+STACKSIZE=8000
+
+LINKFLAGS=/MAP/LINE/ST:$(STACKSIZE)
+
+# Rules...
+
+.SUFFIXES:
+.SUFFIXES: .obj .c .sym .map
+
+.c.obj:
+ $(CC) -c $(CFLAGS) $*.c
+# $(CC) -c $(CFLAGS) $*.c >$*.clg
+# errshow <$*.clg >$*.cer
+# del $*.clg
+
+.map.sym:
+ mapsym $*
+ del $*.map
+
+RM = del
+
+$(PROGRAM): $(PROGRAM)$(X)
+
+$(PROGRAM)$(X): $(OBJS)
+# @rm -f $(PROGRAM)
+ $(CC) $(LDFLAGS) -e$(PROGRAM)$(X) $(OBJS)
+# @size $(PROGRAM)
+
+install: $(PROGRAM)
+ install -c -s -m 0755 $(PROGRAM) $(DEST)
+ @ls -lgs $(DEST)/$(PROGRAM)
+
+tar:
+ @rm -f $(TAR)
+ tar -cf $(TAR) $(ALL)
+
+shar:
+ @rm -f $(SHAR)
+ shar $(SHAR) $(ALL)
+
+dist:
+ cp $(PROGRAM) $(DEST)
+ rcp $(PROGRAM) monet:$(DEST)
+ rcp $(PROGRAM) arpa:$(DEST)
+ rcp $(PROGRAM) harrison@vangogh:bin
+
+clean:
+ @rm -f $(OBJS) core $(PROGRAM) *${O}ut
+
+depend:
+ @rm -f .#*.[chly]
+ mkmf -f $(MAKEFILE) PROGRAM=$(PROGRAM) DEST=$(DEST)
+
+index:
+ @ctags -wx $(HDRS) $(SRCS)
+
+print:
+ @$(PRINT) $(HDRS) $(SRCS)
+
+man:
+ ptroff -man $(MANUAL)
+
+program: $(PROGRAM)
+
+tags: $(HDRS) $(SRCS)
+ @ctags $(HDRS) $(SRCS)
+
+# update: $(DEST)/$(PROGRAM)
+
+# $(DEST)/$(PROGRAM): $(SRCS) $(HDRS) $(EXTHDRS)
+# @make -f $(MAKEFILE) DEST=$(DEST) install
+
+# .DEFAULT:; co $@
+###
+genind${O}: mkind.h genind.h
+mkind${O}: mkind.h
+qsort${O}: mkind.h
+scanid${O}: mkind.h scanid.h
+scanst${O}: mkind.h scanst.h
+sortid${O}: mkind.h
diff --git a/indexing/makeindex/src/makefile.usg b/indexing/makeindex/src/makefile.usg
new file mode 100644
index 0000000000..634c53d243
--- /dev/null
+++ b/indexing/makeindex/src/makefile.usg
@@ -0,0 +1,134 @@
+
+#
+# Makefile for the program `makeindex'
+#
+# Copyright (C) 1987 Pehong Chen (phc@renoir.berkeley.edu)
+# Computer Science Division
+# University of California, Berkeley
+#
+
+BINDIR = /usr/local/bin
+
+MANDIR = /usr/local/man/manl
+
+MANUAL = makeindex.l
+
+DOC = makeindex.tex
+
+EXTHDRS = /usr/include/ctype.h \
+ /usr/include/stdio.h
+
+HDRS = genind.h \
+ mkind.h \
+ scanid.h \
+ scanst.h
+
+CFLAGS = -O -DOS_SYSV
+
+LDFLAGS = $(CFLAGS)
+
+LIBS =
+
+LINKER = $(CC)
+
+MAKEFILE = Makefile
+
+OBJS = genind.o \
+ mkind.o \
+ qsort.o \
+ scanid.o \
+ scanst.o \
+ sortid.o
+
+PRINT = psgrind
+
+SRCS = genind.c \
+ mkind.c \
+ qsort.c \
+ scanid.c \
+ scanst.c \
+ sortid.c
+
+PROGRAM = makeindex
+
+TAR = $(PROGRAM).tar
+
+SHAR = $(PROGRAM).shar
+
+ALL = $(MAKEFILE) $(DOC) $(MANUAL) $(HDRS) $(SRCS)
+
+$(PROGRAM): $(OBJS)
+ @rm -f $(PROGRAM)
+ $(LINKER) $(LDFLAGS) $(OBJS) $(LIBS) -o $(PROGRAM)
+ @size $(PROGRAM)
+
+install: $(PROGRAM)
+ install -c -s -m 0755 $(PROGRAM) $(BINDIR)
+ install -c -m 0744 ../doc/makeindex.l $(MANDIR)/makeindex.1
+ @ls -lgs $(BINDIR)/$(PROGRAM)
+
+cp-install:
+ $(CP) $(PROGRAM) $(BINDIR)
+ strip $(BINDIR)/$(PROGRAM)
+ chmod 755 $(BINDIR)/$(PROGRAM)
+ $(CP) ../doc/makeindex.l $(MANDIR)/makeindex.1
+ chmod 744 $(MANDIR)/makeindex.1
+
+uninstall:
+ $(RM) $(BINDIR)/$(PROGRAM)
+ $(RM) $(MANDIR)/makeindex.1
+
+
+tar:
+ @rm -f $(TAR)
+ tar -cf $(TAR) $(ALL)
+
+shar:
+ @rm -f $(SHAR)
+ shar $(SHAR) $(ALL)
+
+dist:
+ cp $(PROGRAM) $(BINDIR)
+ rcp $(PROGRAM) monet:$(BINDIR)
+ rcp $(PROGRAM) arpa:$(BINDIR)
+ rcp $(PROGRAM) harrison@vangogh:bin
+
+clean:
+ @rm -f $(OBJS) core $(PROGRAM) *.out
+
+depend:
+ @rm -f .#*.[chly]
+ mkmf -f $(MAKEFILE) PROGRAM=$(PROGRAM) BINDIR=$(BINDIR)
+
+index:
+ @ctags -wx $(HDRS) $(SRCS)
+
+print:
+ @$(PRINT) $(HDRS) $(SRCS)
+
+man:
+ ptroff -man $(MANUAL)
+
+program: $(PROGRAM)
+
+tags: $(HDRS) $(SRCS)
+ @ctags $(HDRS) $(SRCS)
+
+update: $(BINDIR)/$(PROGRAM)
+
+$(BINDIR)/$(PROGRAM): $(SRCS) $(HDRS) $(EXTHDRS)
+ @make -f $(MAKEFILE) BINDIR=$(BINDIR) install
+
+.DEFAULT:
+ co $@
+###
+genind.o: mkind.h /usr/include/stdio.h /usr/include/ctype.h \
+ genind.h
+mkind.o: mkind.h /usr/include/stdio.h /usr/include/ctype.h
+qsort.o: mkind.h /usr/include/stdio.h
+scanid.o: mkind.h /usr/include/stdio.h /usr/include/ctype.h \
+ scanid.h
+scanst.o: mkind.h /usr/include/stdio.h /usr/include/ctype.h \
+ scanst.h
+sortid.o: mkind.h /usr/include/stdio.h /usr/include/ctype.h
+
diff --git a/indexing/makeindex/src/makefile.vms b/indexing/makeindex/src/makefile.vms
new file mode 100644
index 0000000000..46159bee6a
--- /dev/null
+++ b/indexing/makeindex/src/makefile.vms
@@ -0,0 +1,124 @@
+# Makefile modified for DEC VAX VMS [13-Jan-88] (only major
+# targets supported)
+#
+# Makefile for the program `makeindex'
+#
+# Copyright (C) 1987 Pehong Chen (phc@renoir.berkeley.edu)
+# Computer Science Division
+# University of California, Berkeley
+#
+
+CC = cc
+O = .obj
+X = .exe
+INCLUDE = /usr/include/
+INCLUDE = sys$$library:
+
+DEST = /usr/local/bin
+DEST = TEX:
+
+MANDIR = /usr/local/man/manl
+MANDIR = NUL:
+
+MANUAL = makeindex.l
+
+DOC = makeindex.tex
+
+EXTHDRS = ${INCLUDE}ctype.h \
+ ${INCLUDE}stdio.h
+
+HDRS = genind.h \
+ mkind.h \
+ scanid.h \
+ scanst.h
+
+CFLAGS = /DEFINE=("OS_VAXVMS=1")
+
+LDFLAGS =
+
+LIBS = sys$$library:vaxcrtl/lib
+#LIBS = plt:unixclib/lib,sys$$library:vaxcrtl/lib
+
+LINKER = link
+
+MAKEFILE = Makefile
+
+OBJS = genind${O} \
+ mkind${O} \
+ qsort${O} \
+ scanid${O} \
+ scanst${O} \
+ sortid${O}
+
+OBJLIST = genind${O},mkind${O},qsort${O},scanid${O},scanst${O},sortid${O}
+
+PRINT = psgrind
+
+SRCS = genind.c \
+ mkind.c \
+ qsort.c \
+ scanid.c \
+ scanst.c \
+ sortid.c
+
+PROGRAM = makeindex
+
+TAR = $(PROGRAM).tar
+
+SHAR = $(PROGRAM).shar
+
+ALL = $(MAKEFILE) $(DOC) $(MANUAL) $(HDRS) $(SRCS)
+
+$(PROGRAM): $(PROGRAM)$(X)
+
+$(PROGRAM)$(X): $(OBJS)
+# @rm -f $(PROGRAM)
+ $(LINKER) /exec=$(PROGRAM) $(LDFLAGS) $(OBJLIST),$(LIBS)
+# @size $(PROGRAM)
+
+install: $(PROGRAM)
+ install -c -s -m 0755 $(PROGRAM) $(DEST)
+ @ls -lgs $(DEST)/$(PROGRAM)
+
+tar:; @rm -f $(TAR)
+ tar -cf $(TAR) $(ALL)
+
+shar:; @rm -f $(SHAR)
+ shar $(SHAR) $(ALL)
+
+dist:; cp $(PROGRAM) $(DEST)
+ rcp $(PROGRAM) monet:$(DEST)
+ rcp $(PROGRAM) arpa:$(DEST)
+ rcp $(PROGRAM) harrison@vangogh:bin
+
+clean:; @rm -f $(OBJS) core $(PROGRAM) *${O}ut
+
+depend:; @rm -f .#*.[chly]
+ mkmf -f $(MAKEFILE) PROGRAM=$(PROGRAM) DEST=$(DEST)
+
+index:; @ctags -wx $(HDRS) $(SRCS)
+
+print:; @$(PRINT) $(HDRS) $(SRCS)
+
+man:; ptroff -man $(MANUAL)
+
+program: $(PROGRAM)
+
+tags: $(HDRS) $(SRCS); @ctags $(HDRS) $(SRCS)
+
+update: $(DEST)/$(PROGRAM)
+
+$(DEST)/$(PROGRAM): $(SRCS) $(HDRS) $(EXTHDRS)
+ @make -f $(MAKEFILE) DEST=$(DEST) install
+
+.DEFAULT:; co $@
+###
+genind${O}: mkind.h ${INCLUDE}stdio.h ${INCLUDE}ctype.h \
+ genind.h
+mkind${O}: mkind.h ${INCLUDE}stdio.h ${INCLUDE}ctype.h
+qsort${O}: mkind.h ${INCLUDE}stdio.h
+scanid${O}: mkind.h ${INCLUDE}stdio.h ${INCLUDE}ctype.h \
+ scanid.h
+scanst${O}: mkind.h ${INCLUDE}stdio.h ${INCLUDE}ctype.h \
+ scanst.h
+sortid${O}: mkind.h ${INCLUDE}stdio.h ${INCLUDE}ctype.h
diff --git a/indexing/makeindex/src/makeindx.def b/indexing/makeindex/src/makeindx.def
new file mode 100644
index 0000000000..6d31171722
--- /dev/null
+++ b/indexing/makeindex/src/makeindx.def
@@ -0,0 +1,2 @@
+NAME Makeindx WINDOWCOMPAT
+DESCRIPTION 'MakeIndex - General purpose index processor'
diff --git a/indexing/makeindex/src/mkind.c b/indexing/makeindex/src/mkind.c
new file mode 100644
index 0000000000..4df0015d1e
--- /dev/null
+++ b/indexing/makeindex/src/mkind.c
@@ -0,0 +1,720 @@
+/*
+ *
+ * This file is part of
+ * MakeIndex - A formatter and format independent index processor
+ *
+ * Copyright (C) 1989 by Chen & Harrison International Systems, Inc.
+ * Copyright (C) 1988 by Olivetti Research Center
+ * Copyright (C) 1987 by Regents of the University of California
+ *
+ * Author:
+ * Pehong Chen
+ * Chen & Harrison International Systems, Inc.
+ * Palo Alto, California
+ * USA
+ * (phc@renoir.berkeley.edu or chen@orc.olivetti.com)
+ *
+ * Contributors:
+ * Please refer to the CONTRIB file that comes with this release
+ * for a list of people who have contributed to this and/or previous
+ * release(s) of MakeIndex.
+ *
+ * All rights reserved by the copyright holders. See the copyright
+ * notice distributed with this software for a complete description of
+ * the conditions under which it is made available.
+ *
+ */
+
+#define MKIND_C 1
+#include "mkind.h"
+#undef MKIND_C
+
+int letter_ordering = FALSE;
+int compress_blanks = FALSE;
+int merge_page = TRUE;
+int init_page = FALSE;
+int even_odd = -1;
+int verbose = TRUE;
+int german_sort = FALSE;
+int fn_no = -1; /* total number of files */
+int idx_dot = TRUE; /* flag which shows dot in ilg being
+ * active */
+int idx_tt = 0; /* total entry count (all files) */
+int idx_et = 0; /* erroneous entry count (all files) */
+int idx_gt = 0; /* good entry count (all files) */
+
+FIELD_PTR *idx_key;
+FILE *log_fp;
+FILE *sty_fp;
+FILE *idx_fp;
+FILE *ind_fp;
+FILE *ilg_fp;
+
+#if OS_BS2000
+FILE *widx_fp;
+char widx_fn[STRING_MAX + 5];
+#endif /* OS_BS2000 */
+
+char *pgm_fn;
+char sty_fn[LINE_MAX];
+char *idx_fn;
+char ind[STRING_MAX];
+char *ind_fn;
+char ilg[STRING_MAX];
+char *ilg_fn;
+char pageno[NUMBER_MAX];
+
+static char log_fn[STRING_MAX];
+static char base[STRING_MAX];
+static int need_version = TRUE;
+
+static void check_all ARGS((char *fn,int ind_given,int ilg_given,
+ int log_given));
+static void check_idx ARGS((char *fn,int open_fn));
+static void find_pageno ARGS((void));
+static void open_sty ARGS((char *fn));
+static void prepare_idx ARGS((void));
+static void process_idx ARGS((char * *fn,int use_stdin,int sty_given,
+ int ind_given,int ilg_given,int log_given));
+
+#if OS_PCDOS
+#if IBM_PC_TURBO
+unsigned _stklen = 0xf000; /* Turbo C ignores size set in
+ .exe file by LINK or EXEMOD,
+ sigh... */
+#endif /* IBM_PC_TURBO */
+#endif /* OS_PCDOS */
+
+#if OS_ATARI
+long _stksize = 20000L; /* make the stack larger than 2KB */
+/* size must be given */
+#endif /* OS_ATARI */
+
+#ifdef DEBUG
+long totmem = 0L; /* for debugging memory usage */
+#endif /* DEBUG */
+
+int
+#if STDC
+main(int argc, char *argv[])
+#else
+main(argc, argv)
+int argc;
+char *argv[];
+#endif
+{
+ char *fns[ARRAY_MAX];
+ char *ap;
+ int use_stdin = FALSE;
+ int sty_given = FALSE;
+ int ind_given = FALSE;
+ int ilg_given = FALSE;
+ int log_given = FALSE;
+
+ /* determine program name */
+#if (OS_ATARI | OS_VAXVMS | OS_BS2000 | OS_MVSXA | OS_VMCMS)
+ pgm_fn = "MakeIndex"; /* Use symbolic name on some systems */
+#else
+ pgm_fn = strrchr(*argv, DIR_DELIM);
+ if (pgm_fn == NULL)
+ pgm_fn = *argv;
+ else
+ pgm_fn++;
+
+#if OS_PCDOS
+ {
+ register char *ext = pgm_fn + strlen(pgm_fn)-4;
+ if ( *ext == '.' )
+ *ext = NUL; /* cut off ".EXE" */
+ }
+ (void)strlwr(pgm_fn); /* lower program name */
+#endif /* OS_PCDOS */
+
+#endif /* OS_VAXVMS | OS_BS2000 | OS_MVSXA */
+
+ /* process command line options */
+ while (--argc > 0) {
+ if (**++argv == SW_PREFIX) {
+ if (*(*argv + 1) == NUL)
+ break;
+ for (ap = ++*argv; *ap != NUL; ap++)
+#if (OS_BS2000 | OS_MVSXA | OS_VAXVMS)
+ switch (tolower(*ap)) {
+#else
+ switch (*ap) {
+#endif /* (OS_BS2000 | OS_MVSXA | OS_VAXVMS) */
+
+ /* use standard input */
+ case 'i':
+ use_stdin = TRUE;
+ break;
+
+ /* enable letter ordering */
+ case 'l':
+ letter_ordering = TRUE;
+ break;
+
+ /* disable range merge */
+ case 'r':
+ merge_page = FALSE;
+ break;
+
+ /* supress progress message -- quiet mode */
+ case 'q':
+ verbose = FALSE;
+ break;
+
+ /* compress blanks */
+ case 'c':
+ compress_blanks = TRUE;
+ break;
+
+ /* style file */
+ case 's':
+ argc--;
+ if (argc <= 0)
+ FATAL("Expected -s <stylefile>\n","");
+ open_sty(*++argv);
+ sty_given = TRUE;
+ break;
+
+ /* output index file name */
+ case 'o':
+ argc--;
+ if (argc <= 0)
+ FATAL("Expected -o <ind>\n","");
+ ind_fn = *++argv;
+ ind_given = TRUE;
+ break;
+
+ /* transcript file name */
+ case 't':
+ argc--;
+ if (argc <= 0)
+ FATAL("Expected -t <logfile>\n","");
+ ilg_fn = *++argv;
+ ilg_given = TRUE;
+ break;
+
+ /* initial page */
+ case 'p':
+ argc--;
+ if (argc <= 0)
+ FATAL("Expected -p <num>\n","");
+ strcpy(pageno, *++argv);
+ init_page = TRUE;
+ if (STREQ(pageno, EVEN)) {
+ log_given = TRUE;
+ even_odd = 2;
+ } else if (STREQ(pageno, ODD)) {
+ log_given = TRUE;
+ even_odd = 1;
+ } else if (STREQ(pageno, ANY)) {
+ log_given = TRUE;
+ even_odd = 0;
+ }
+ break;
+
+ /* enable german sort */
+ case 'g':
+ german_sort = TRUE;
+ break;
+
+ /* bad option */
+ default:
+ FATAL("Unknown option -%c.\n", *ap);
+ break;
+ }
+ } else {
+ if (fn_no < ARRAY_MAX) {
+ check_idx(*argv, FALSE);
+ fns[++fn_no] = *argv;
+ } else {
+ FATAL("Too many input files (max %d).\n", ARRAY_MAX);
+ }
+ }
+ }
+
+/* changes for 2.12 (May 20, 1993) by Julian Reschke (jr@ms.maus.de):
+ if only one input file and no explicit style file was given */
+#if OS_BS2000
+/* not supported */
+#else
+ if (fn_no == 0 && !sty_given)
+ {
+ char tmp[STRING_MAX + 5];
+
+ /* base set by last call to check_idx */
+ sprintf (tmp, "%s%s", base, INDEX_STY);
+ if (0 == access(tmp, R_OK)) {
+ open_sty (tmp);
+ sty_given = TRUE;
+ }
+ }
+#endif
+
+ process_idx(fns, use_stdin, sty_given, ind_given, ilg_given, log_given);
+ idx_gt = idx_tt - idx_et;
+ ALL_DONE;
+ if (idx_gt > 0) {
+ prepare_idx();
+ sort_idx();
+ gen_ind();
+ MESSAGE("Output written in %s.\n", ind_fn);
+ } else
+ MESSAGE("Nothing written in %s.\n", ind_fn);
+
+ MESSAGE("Transcript written in %s.\n", ilg_fn);
+ CLOSE(ind_fp);
+ CLOSE(ilg_fp);
+ EXIT(0);
+
+ return (0); /* never executed--avoids complaints */
+ /* about no return value */
+}
+
+
+static void
+prepare_idx(VOID_ARG)
+{
+ NODE_PTR ptr = head;
+ int i = 0;
+
+#ifdef DEBUG
+ totmem += idx_gt * sizeof(FIELD_PTR);
+ (void)fprintf(stderr,"prepare_idx(): calloc(%d,%d)\ttotmem = %ld\n",
+ idx_gt,sizeof(FIELD_PTR),totmem);
+#endif /* DEBUG */
+
+ if (head == (NODE_PTR)NULL)
+ FATAL("No valid index entries collected.\n", "");
+
+ if ((idx_key = (FIELD_PTR *) calloc(idx_gt, sizeof(FIELD_PTR))) == NULL) {
+ FATAL("Not enough core...abort.\n", "");
+ }
+ for (i = 0; i < idx_gt; i++) {
+ idx_key[i] = &(ptr->data);
+ ptr = ptr->next;
+ }
+}
+
+
+static void
+#if STDC
+process_idx(char *fn[], int use_stdin, int sty_given, int ind_given,
+ int ilg_given, int log_given)
+#else
+process_idx(fn, use_stdin, sty_given, ind_given, ilg_given, log_given)
+char *fn[];
+int use_stdin;
+int sty_given;
+int ind_given;
+int ilg_given;
+int log_given;
+#endif
+{
+ int i;
+
+ if (fn_no == -1)
+ /* use stdin if no input files specified */
+ use_stdin = TRUE;
+ else {
+ check_all(fn[0], ind_given, ilg_given, log_given);
+ PUT_VERSION;
+ if (sty_given)
+ scan_sty();
+ if (german_sort && (idx_quote == '"'))
+FATAL("Option -g invalid, quote character must be different from '%c'.\n",
+'"');
+ scan_idx();
+ ind_given = TRUE;
+ ilg_given = TRUE;
+ for (i = 1; i <= fn_no; i++) {
+ check_idx(fn[i], TRUE);
+ scan_idx();
+ }
+ }
+
+ if (use_stdin) {
+ idx_fn = "stdin";
+ idx_fp = stdin;
+
+ if (ind_given) {
+ if (!ind_fp && ((ind_fp = OPEN_OUT(ind_fn)) == NULL))
+ FATAL("Can't create output index file %s.\n", ind_fn);
+ } else {
+ ind_fn = "stdout";
+ ind_fp = stdout;
+ }
+
+ if (ilg_given) {
+ if (!ilg_fp && ((ilg_fp = OPEN_OUT(ilg_fn)) == NULL))
+ FATAL("Can't create transcript file %s.\n", ilg_fn);
+ } else {
+ ilg_fn = "stderr";
+ ilg_fp = stderr;
+ }
+
+ if ((fn_no == -1) && (sty_given))
+ scan_sty();
+ if (german_sort && (idx_quote == '"'))
+FATAL("Option -g ignored, quote character must be different from '%c'.\n",
+'"');
+
+ if (need_version) {
+ PUT_VERSION;
+ }
+ scan_idx();
+ fn_no++;
+ }
+}
+
+
+static void
+#if STDC
+check_idx(char *fn, int open_fn)
+#else
+check_idx(fn, open_fn)
+char *fn;
+int open_fn;
+#endif
+{
+ char *ptr = fn;
+ char *ext;
+ int with_ext = FALSE;
+ int i = 0;
+
+#if OS_BS2000
+ char message[256]; /* error message */
+ char arg[8]; /* argument for sprintf() */
+
+ ext = strrchr(fn, EXT_DELIM);
+ if ((ext != NULL) &&
+ (((*fn == CATID) && (*(fn + 3) != DIR_DELIM)) ||
+ (((*fn == DIR_DELIM) || (*fn == CATID)) &&
+ (strchr(fn, EXT_DELIM) < ext)))) {
+#else
+ ext = strrchr(fn, EXT_DELIM);
+ if ((ext != NULL) && (ext != fn) && (*(ext + 1) != DIR_DELIM)) {
+#endif /* OS_BS2000 */
+ with_ext = TRUE;
+ while ((ptr != ext) && (i < STRING_MAX))
+ base[i++] = *ptr++;
+ } else
+ while ((*ptr != NUL) && (i < STRING_MAX))
+ base[i++] = *ptr++;
+
+ if (i < STRING_MAX)
+ base[i] = NUL;
+ else
+ FATAL2("Index file name %s too long (max %d).\n",
+ base, STRING_MAX);
+
+ idx_fn = fn;
+
+#if OS_BS2000 /* Search both on HOME-PVS and
+ * WORK-PVS */
+ sprintf(widx_fn, "%s%s", WORK, idx_fn);
+ if (((((idx_fp = OPEN_IN(idx_fn)) == NULL) && open_fn) ||
+ !(open_fn || idx_fp)) &&
+ ((((widx_fp = OPEN_IN(widx_fn)) == NULL) && open_fn) ||
+ !(open_fn || widx_fp)))
+ if (with_ext) {
+ sprintf(message, "Input index file %s%%s not found.\n",
+ (strchr(idx_fn, ':') || (strlen(WORK) == 0)) ?
+ NIL : "<" WORK ">");
+ FATAL(message, idx_fn);
+ } else {
+
+#ifdef DEBUG
+ totmem += STRING_MAX;
+ (void)fprintf(stderr,"check_idx()-1: malloc(%d)\ttotmem = %ld\n",
+ STRING_MAX,totmem);
+#endif /* DEBUG */
+
+ if ((idx_fn = (char *) malloc(STRING_MAX)) == NULL)
+ FATAL("Not enough core...abort.\n", "");
+ sprintf(idx_fn, "%s%s", base, INDEX_IDX);
+ sprintf(widx_fn, "%s%s%s", WORK, base, INDEX_IDX);
+ if (((((idx_fp = OPEN_IN(idx_fn)) == NULL) && open_fn) ||
+ !(open_fn || idx_fp)) &&
+ ((((widx_fp = OPEN_IN(widx_fn)) == NULL) && open_fn) ||
+ !(open_fn || widx_fp))) {
+ sprintf(arg, "%s",
+ (strchr(idx_fn, ':') || (strlen(WORK) == 0)) ?
+ NIL : "<" WORK ">");
+ sprintf(message,
+ "Couldn't find neither input file %s%%s nor %s%%s.\n",
+ arg, arg);
+ FATAL2(message, base, idx_fn);
+ }
+ }
+ if (!open_fn) { /* Close files if open */
+ if (idx_fp)
+ FCLOSE(idx_fp);
+ if (widx_fp)
+ FCLOSE(widx_fp);
+ }
+ if (open_fn && (!idx_fp) && widx_fp) { /* File was found on PVS W */
+ idx_fp = widx_fp;
+ idx_fn = widx_fn;
+ }
+#else /* NOT OS_BS2000 */
+ if ( ( open_fn &&
+ ((idx_fp = OPEN_IN(idx_fn)) == NULL)
+ ) ||
+ ((!open_fn) && (access(idx_fn, R_OK) != 0)))
+ if (with_ext) {
+ FATAL("Input index file %s not found.\n", idx_fn);
+ } else {
+
+#ifdef DEBUG
+ totmem += STRING_MAX;
+ (void)fprintf(stderr,"check_idx()-2: malloc(%d)\ttotmem = %ld\n",
+ STRING_MAX,totmem);
+#endif /* DEBUG */
+
+ if ((idx_fn = (char *) malloc(STRING_MAX)) == NULL)
+ FATAL("Not enough core...abort.\n", "");
+ sprintf(idx_fn, "%s%s", base, INDEX_IDX);
+ if ((open_fn &&
+ ((idx_fp = OPEN_IN(idx_fn)) == NULL)
+ ) ||
+ ((!open_fn) && (access(idx_fn, R_OK) != 0))) {
+ FATAL2("Couldn't find input index file %s nor %s.\n", base,
+ idx_fn);
+ }
+ }
+#endif /* OS_BS2000 */
+}
+
+
+static void
+#if STDC
+check_all(char *fn, int ind_given, int ilg_given, int log_given)
+#else
+check_all(fn, ind_given, ilg_given, log_given)
+char *fn;
+int ind_given;
+int ilg_given;
+int log_given;
+#endif
+{
+ check_idx(fn, TRUE);
+
+ /* index output file */
+ if (!ind_given) {
+ sprintf(ind, "%s%s", base, INDEX_IND);
+ ind_fn = ind;
+#if OS_BS2000 /* Look on HOME-, then WORK-PVS */
+ if ((ind_fp = OPEN_IN(ind_fn)) == NULL) {
+ sprintf(ind, "%s%s%s", strchr(base, ':') ?
+ NIL : WORK, base, INDEX_IND);
+ ind_fn = ind;
+ } else
+ fclose(ind_fp);
+#endif /* OS_BS2000 */
+ }
+ if ((ind_fp = OPEN_OUT(ind_fn)) == NULL)
+ FATAL("Can't create output index file %s.\n", ind_fn);
+
+ /* index transcript file */
+ if (!ilg_given) {
+ sprintf(ilg, "%s%s", base, INDEX_ILG);
+ ilg_fn = ilg;
+#if OS_BS2000 /* Look on HOME-, then WORK-PVS */
+ if ((ilg_fp = OPEN_IN(ilg_fn)) == NULL) {
+ sprintf(ilg, "%s%s%s", strchr(base, ':') ?
+ NIL : WORK, base, INDEX_ILG);
+ ilg_fn = ilg;
+ } else
+ fclose(ilg_fp);
+#endif /* OS_BS2000 */
+ }
+ if ((ilg_fp = OPEN_OUT(ilg_fn)) == NULL)
+ FATAL("Can't create transcript file %s.\n", ilg_fn);
+
+#if OS_BS2000 /* Search both on HOME-PVS ans
+ * WORK-PVS */
+ if (log_given) {
+ sprintf(log_fn, "%s%s%s", strchr(base, ':') ? NIL : WORK,
+ base, INDEX_LOG);
+ if ((log_fp = OPEN_IN(log_fn)) == NULL) {
+ if (strchr(base, ':'))
+ sprintf(log_fn, "%s%s", strrchr(base, ':') + 1, INDEX_LOG);
+ else
+ sprintf(log_fn, "%s%s", base, INDEX_LOG);
+ if ((log_fp = OPEN_IN(log_fn)) == NULL)
+ FATAL2("Source log file %s%s not found.\n", WORK, log_fn);
+ } else {
+ find_pageno();
+ CLOSE(log_fp);
+ }
+ }
+#else
+ if (log_given) {
+ sprintf(log_fn, "%s%s", base, INDEX_LOG);
+#if OS_PCDOS /* open in binary mode (CR-LF) */
+ if ((log_fp = OPEN_IN_B(log_fn)) == NULL) {
+#else
+ if ((log_fp = OPEN_IN(log_fn)) == NULL) {
+#endif /* OS_PCDOS */
+ FATAL("Source log file %s not found.\n", log_fn);
+ } else {
+ find_pageno();
+ CLOSE(log_fp);
+ }
+ }
+#endif /* OS_BS2000 */
+}
+
+
+static void
+find_pageno(VOID_ARG)
+{
+ int i = 0;
+ int p, c;
+
+#if (OS_VAXVMS | OS_BS2000 | OS_MVSXA)
+ /*
+ * Scan forward through the file for VMS, because fseek doesn't work on
+ * variable record files
+ */
+ c = GET_CHAR(log_fp);
+ while (c != EOF) {
+ p = c;
+ c = GET_CHAR(log_fp);
+ if (p == LSQ && isdigit(c)) {
+ i = 0;
+ do {
+ pageno[i++] = c;
+ c = GET_CHAR(log_fp);
+ } while (isdigit(c));
+ pageno[i] = NUL;
+ }
+ }
+ if (i == 0) {
+ fprintf(ilg_fp, "Couldn't find any page number in %s...ignored\n",
+ log_fn);
+ init_page = FALSE;
+ }
+#else /* NOT (OS_VAXVMS | ...) */
+ fseek(log_fp, -1L, 2);
+ p = GET_CHAR(log_fp);
+ fseek(log_fp, -2L, 1);
+ do {
+ c = p;
+ p = GET_CHAR(log_fp);
+ } while (!(((p == LSQ) && isdigit(c)) || (fseek(log_fp, -2L, 1) != 0)));
+ if (p == LSQ) {
+ while ((c = GET_CHAR(log_fp)) == SPC);
+ do {
+ pageno[i++] = (char) c;
+ c = GET_CHAR(log_fp);
+ } while (isdigit(c));
+ pageno[i] = NUL;
+ } else {
+ fprintf(ilg_fp, "Couldn't find any page number in %s...ignored\n",
+ log_fn);
+ init_page = FALSE;
+ }
+#endif /* (OS_VAXVMS | ...) */
+}
+
+static void
+#if STDC
+open_sty(char *fn)
+#else
+open_sty(fn)
+char *fn;
+#endif
+{
+ char *path;
+ char *ptr;
+ int i;
+ int len;
+
+ if ((path = getenv(STYLE_PATH)) == NULL) {
+ /* style input path not defined */
+ strcpy(sty_fn, fn);
+ sty_fp = OPEN_IN(sty_fn);
+ } else {
+#if OS_VAXVMS
+ if ((strlen(STYLE_PATH) + strlen(fn) + 1) > ARRAY_MAX) {
+ FATAL2("Path %s too long (max %d).\n", STYLE_PATH, ARRAY_MAX);
+ } else {
+ sprintf(sty_fn, "%s:%s", STYLE_PATH, fn);
+ sty_fp = OPEN_IN(sty_fn);
+ }
+#else /* NOT OS_VAXVMS */
+ len = ARRAY_MAX - strlen(fn) - 1;
+ while (*path != NUL) {
+#if OS_XENIX
+ i = 0;
+ while ((*path != ENV_SEPAR) && (*path != NUL) && (i < len))
+ sty_fn[i++] = *path++;
+#else /* NOT OS_XENIX */
+ ptr = strchr(path, ENV_SEPAR);
+ i = 0;
+ if (ptr == (char*)NULL)
+ {
+ int j = strlen(path);
+
+ while (i < j)
+ sty_fn[i++] = *path++;
+ }
+ else
+ {
+ while ((path != ptr) && (i < len))
+ sty_fn[i++] = *path++;
+ }
+#endif /* OS_XENIX */
+ if (i == len) {
+ FATAL2("Path %s too long (max %d).\n", sty_fn, ARRAY_MAX);
+ } else {
+#ifdef OS_VAXVMS
+ if (sty_fn[i-1] != ']')
+ sty_fn[i++] = DIR_DELIM;
+#else
+ sty_fn[i++] = DIR_DELIM;
+#endif
+ sty_fn[i] = NUL;
+ strcat(sty_fn, fn);
+#if OS_XENIX
+ if (((sty_fp = OPEN_IN(sty_fn)) == NULL) && (*path != NUL))
+#else /* NOT OS_XENIX */
+ if ((sty_fp = OPEN_IN(sty_fn)) == NULL)
+#endif /* OS_XENIX */
+ path++;
+ else
+ break;
+ }
+ }
+#endif /* OS_VAXVMS */
+ }
+
+ if (sty_fp == NULL)
+ FATAL("Index style file %s not found.\n", fn);
+}
+
+
+int
+#if STDC
+strtoint(char *str)
+#else
+strtoint(str)
+char *str;
+#endif
+{
+ int val = 0;
+
+ while (*str != NUL) {
+#if (OS_BS2000 | OS_MVSXA)
+ val = 10 * val + *str - '0';
+#else
+ val = 10 * val + *str - 48;
+#endif /* (OS_BS2000 | OS_MVSXA) */
+ str++;
+ }
+ return (val);
+}
diff --git a/indexing/makeindex/src/mkind.h b/indexing/makeindex/src/mkind.h
new file mode 100644
index 0000000000..86f5ad884d
--- /dev/null
+++ b/indexing/makeindex/src/mkind.h
@@ -0,0 +1,757 @@
+/*
+ *
+ * This file is part of
+ * MakeIndex - A formatter and format independent index processor
+ *
+ * Copyright (C) 1989 by Chen & Harrison International Systems, Inc.
+ * Copyright (C) 1988 by Olivetti Research Center
+ * Copyright (C) 1987 by Regents of the University of California
+ *
+ * Author:
+ * Pehong Chen
+ * Chen & Harrison International Systems, Inc.
+ * Palo Alto, California
+ * USA
+ * (phc@renoir.berkeley.edu or chen@orc.olivetti.com)
+ *
+ * Contributors:
+ * Please refer to the CONTRIB file that comes with this release
+ * for a list of people who have contributed to this and/or previous
+ * release(s) of MakeIndex.
+ *
+ * All rights reserved by the copyright holders. See the copyright
+ * notice distributed with this software for a complete description of
+ * the conditions under which it is made available.
+ *
+ */
+
+/***********************************************************************
+
+ INSTALLATION NOTES
+ <11-Nov-1989>
+
+ At compile-time (or here, if compile-time definition is not
+ available), set non-zero ONE OS_xxxx operating system flag, and if
+ more than one compiler is available, ONE compiler flag:
+
+ Operating Systems Compiler(s)
+ ================= ===========
+ OS_ATARI
+ OS_BS2000 CCD_2000
+ OS_BSD
+ OS_MVSXA IBM_C370
+ OS_VMCMS IBM_C370
+ OS_PCDOS IBM_PC_MICROSOFT
+ OS_SYSV
+ OS_TOPS20 KCC_20 or PCC_20
+ OS_VAXVMS
+ OS_XENIX
+ ================= ===========
+
+ If no OS_xxxx symbol is defined, OS_BSD is assumed.
+
+ If Standard C prototypes are supported, define the symbol
+ STDC_PROTOTYPES in the appropriate OS_xxxx section below, and insert
+ #include's for the standard system files which define library
+ prototypes. STDC_PROTOTYPES will be defined automatically if
+ __STDC__ is; the latter must be defined by all Standard C conformant
+ implementations.
+
+ All function declarations in MakeIndex are contained at the end of
+ this file. If 185STDC_PROTOTYPES is not selected, then all the standard
+ library functions must be declared explicitly.
+
+ If the host system restricts external names to 6 characters, set
+ SHORTNAMES non-zero in the appropriate OS_xxxx section below.
+
+ Installing MakeIndex under BS2000 requires at least Version 8.5
+ supporting Multiple Public Volume Sets (MPVS). Define WORK in this
+ file to your CATID (default :w:) for temporary files (.ilg, .ind),
+ in case of no MPVS support define WORK to NIL.
+
+*/
+
+/**********************************************************************/
+
+#define STDC (__STDC__ || __cplusplus)
+
+/*
+ * Establish needed operating symbols (defaulting to OS_BSD if none
+ * specified at compile time). If you add one, add it to the check
+ * list at the end of this section, too.
+ */
+
+#ifndef OS_ATARI
+#define OS_ATARI 0
+#endif
+
+#ifndef OS_PCDOS
+#define OS_PCDOS 0
+#endif
+
+#ifndef IBM_PC_MICROSOFT
+#define IBM_PC_MICROSOFT 0
+#endif
+
+#ifndef IBM_PC_TURBO
+#define IBM_PC_TURBO 0
+#endif
+
+#ifdef __TURBOC__
+#define IBM_PC_TURBO 1
+#endif
+
+#ifndef OS_SYSV
+#define OS_SYSV 0
+#endif
+
+#ifndef OS_TOPS20
+#define OS_TOPS20 0
+#endif
+
+#ifndef KCC_20
+#define KCC_20 0
+#endif
+
+#ifndef PCC_20
+#define PCC_20 0
+#endif
+
+#ifndef OS_BSD
+#define OS_BSD 0
+#endif
+
+#ifndef OS_VAXVMS
+#define OS_VAXVMS 0
+#endif
+
+#ifndef IBM_C370
+#define IBM_C370 0
+#endif
+
+#ifndef CCD_2000
+#define CCD_2000 0
+#endif
+
+#if OS_TOPS20
+#if (KCC_20 || PCC_20)
+#else
+#undef PCC_20
+#define PCC_20 1 /* PCC-20 is default for Tops-20 */
+#endif /* KCC_20 || PCC_20) */
+#endif /* OS_TOPS20 */
+
+#ifndef OS_BS2000
+#define OS_BS2000 0
+#endif
+
+#ifndef OS_MVSXA
+#define OS_MVSXA 0
+#endif
+
+#ifndef OS_VMCMS
+#define OS_VMCMS 0
+#endif
+
+#ifndef OS_XENIX
+#define OS_XENIX 0
+#endif
+
+#if (OS_ATARI || OS_BSD || OS_BS2000 || OS_MVSXA || OS_PCDOS || OS_VMCMS)
+#else
+#if (OS_SYSV || OS_TOPS20 || OS_VAXVMS || OS_XENIX)
+#else
+#undef OS_BSD
+#define OS_BSD 1 /* Unix is default operating system */
+#endif
+#endif
+
+#if (OS_MVSXA || OS_VMCMS)
+#undef IBM_C370
+#define IBM_C370 1 /* IBM_C370 is default for OS_MVSXA and OS_VMCMS */
+#endif
+
+#if OS_BS2000
+#undef CCD_2000
+#define CCD_2000 1 /* CCD_2000 is default for OS_BS2000 */
+#endif
+
+#if (CCD_2000 || OS_MVSXA || OS_TOPS20 || OS_VMCMS)
+#define SHORTNAMES 1
+#else
+#define SHORTNAMES 0
+#endif
+
+#define STDC_PROTOTYPES STDC
+
+/**********************************************************************/
+
+#include <stdio.h>
+#include <ctype.h>
+
+#if (CCD_2000 || OS_SYSV || OS_PCDOS || STDC || _AIX || ardent )
+#include <string.h>
+#else
+
+#if (OS_ATARI || OS_BSD || PCC_20 || OS_XENIX)
+#define strchr index /* convert STDC form to old K&R form */
+#define strrchr rindex /* convert STDC form to old K&R form */
+#endif /* (OS_ATARI || OS_BSD || PCC_20 || OS_XENIX) */
+
+#endif /* (CCD_2000 || OS_SYSV || OS_PCDOS || STDC || _AIX || ardent) */
+
+#if OS_PCDOS
+
+#if (IBM_PC_MICROSOFT || IBM_PC_TURBO)
+#include <io.h> /* for function declarations */
+#endif /* (IBM_PC_MICROSOFT || IBM_PC_TURBO) */
+
+#include <stddef.h> /* for function declarations */
+#include <stdlib.h> /* for function declarations */
+#undef STDC_PROTOTYPES
+#define STDC_PROTOTYPES 1 /* so we get full argument
+ type checking */
+#endif /* OS_PCDOS */
+
+#if (OS_VMCMS || OS_MVSXA)
+#include <stdefs.h> /* for function declarations */
+#include <string.h> /* for function declarations */
+#undef STDC_PROTOTYPES
+#define STDC_PROTOTYPES 1 /* so we get full argument
+ type checking */
+#if 0
+#undef __STDC__
+#define __STDC__ 1
+#endif
+#endif /* OS_MVSXA || OS_VMCMS */
+
+#if OS_ATARI
+
+#if ATARI_ST_TURBO
+#define access(fn, mode) 0 /* function not available */
+#endif
+
+#if __GNUC__
+#include <string.h>
+#include <types.h>
+#endif
+
+#undef STDC_PROTOTYPES
+#define STDC_PROTOTYPES 1 /* so we get full argument checking */
+
+#endif /* OS_ATARI */
+
+#if IBM_C370
+#define access(fn, mode) 0 /* function not available */
+#endif
+
+#if CCD_2000 /* function not available */
+#define getenv(P) 0
+#endif /* CCD_2000 */
+
+#if SHORTNAMES
+/*
+ * Provide alternate external names which are unique in the first SIX
+ * characters as required for portability (and Standard C)
+ */
+#define check_all chk_all
+#define check_idx chk_idx
+#define check_mixsym chk_mix
+#define compare_one cmp_one
+#define compare_page cmp_page
+#define compare_string cmp_string
+#define delim_n dlm_n
+#define delim_p dlm_p
+#define delim_r dlm_r
+#define delim_t dlm_t
+#define encap_i ecp_i
+#define encap_p ecp_p
+#define encap_range ecp_range
+#define encap_s ecp_s
+#define group_skip grp_skip
+#define group_type grp_type
+#define idx_aclose idxaclose
+#define idx_actual idxactual
+#define idx_keyword idx_kwd
+#define indent_length ind_length
+#define indent_space ind_space
+#define headings_flag hd_flag
+#define heading_pre hd_pre
+#define heading_suf hd_suf
+#define symhead_pos sym_pos
+#define symhead_neg sym_neg
+#define numhead_pos num_pos
+#define numhead_neg num_neg
+#define process_idx prc_idx
+#define process_precedence prc_pre
+#define range_ptr rng_ptr
+#define scan_alpha_lower scnalw
+#define scan_alpha_upper scnaup
+#define scan_arabic scnarabic
+#define scan_arg1 scna1
+#define scan_arg2 scna2
+#define scan_char scnchr
+#define scan_field scnfld
+#define scan_idx scnidx
+#define scan_key scnkey
+#define scan_no scnno
+#define scan_roman_lower scnrlw
+#define scan_roman_upper scnrup
+#define scan_spec scnspc
+#define scan_string scnstr
+#define scan_style scnsty
+#define setpagelen spg_len
+#define setpage_close spg_close
+#define setpage_open spg_open
+#define suffix_2p suf_2p
+#define suffix_3p suf_3p
+#define suffix_mp suf_mp
+#endif /* SHORTNAMES */
+
+#if OS_VAXVMS
+#define EXIT(code) exit( ((code) == 0) ? 1 : (1 << 28) + 2 )
+#else /* NOT OS_VAXVMS */
+#define EXIT exit
+#endif /* OS_VAXVMS */
+
+#undef TRUE
+#define TRUE 1
+
+#undef FALSE
+#define FALSE 0
+
+#undef NUL
+#define NUL '\0'
+
+#undef NIL
+#define NIL ""
+
+#define TAB '\t'
+#define LFD '\n'
+#define SPC ' '
+#define LSQ '['
+#define RSQ ']'
+#define BSH '\\'
+
+#if OS_ATARI
+#define ENV_SEPAR ';'
+#define DIR_DELIM '\\'
+#endif /* OS_ATARI */
+
+#if (OS_BSD || OS_SYSV || OS_XENIX)
+#define ENV_SEPAR ':'
+#define DIR_DELIM '/'
+#endif /* (OS_BSD || OS_SYSV || OS_XENIX)*/
+
+#if OS_BS2000
+#define ENV_SEPAR '#'
+#define DIR_DELIM '$'
+#endif /* OS_BS2000 */
+
+#if (OS_MVSXA || OS_VMCMS)
+#define ENV_SEPAR '.'
+#define DIR_DELIM '.'
+#endif /* OS_MVSXA || OS_VMCMS */
+
+#if OS_PCDOS
+#define ENV_SEPAR ';'
+#define DIR_DELIM '\\'
+#endif /* OS_PCDOS */
+
+#if OS_TOPS20
+#define ENV_SEPAR ','
+#define DIR_DELIM ':'
+#endif /* OS_TOPS20 */
+
+#if OS_BSD
+#define ENV_SEPAR ':'
+#define DIR_DELIM '/'
+#endif /* OS_BSD */
+
+#if OS_VAXVMS
+#define ENV_SEPAR ',' /* In fact these aren't used */
+#define DIR_DELIM ':'
+#endif /* OS_VAXVMS */
+
+#ifndef SW_PREFIX /* can override at compile time */
+#define SW_PREFIX '-'
+#endif
+
+#define EXT_DELIM '.'
+#define ROMAN_SIGN '*'
+#define EVEN "even"
+#define ODD "odd"
+#define ANY "any"
+
+#define GET_CHAR getc
+
+#if (CCD_2000 || OS_MVSXA)
+#define TOASCII(i) (char)((i) + '0')
+#else
+#define TOASCII(i) (char)((i) + 48)
+#endif /* (CCD_2000 || OS_MVSXA) */
+
+/* NB: The typecasts here are CRITICAL for correct sorting of entries
+ that use characters in the range 128..255! */
+#define TOLOWER(C) (isupper((unsigned char)(C)) ? \
+ (unsigned char)tolower((unsigned char)(C)) : (unsigned char)(C))
+#define TOUPPER(C) (isupper((unsigned char)(C)) ? \
+ (unsigned char)(C) : (unsigned char)toupper((unsigned char)(C)))
+
+#define STREQ(A, B) (strcmp(A, B) == 0)
+#define STRNEQ(A, B) (strcmp(A, B) != 0)
+
+#define MESSAGE(F, S) { \
+ if (verbose) \
+ fprintf(stderr, F, S); \
+ fprintf(ilg_fp, F, S); \
+}
+
+#define FATAL(F, S) { \
+ fprintf(stderr, F, S); \
+ fprintf(stderr, USAGE, pgm_fn); \
+ EXIT(1); \
+}
+
+#define FATAL2(F, D1, D2) { \
+ fprintf(stderr, F, D1, D2); \
+ fprintf(stderr, USAGE, pgm_fn); \
+ EXIT(1); \
+}
+
+#if OS_PCDOS /* open file in binary mode */
+#define OPEN_IN_B(FP) fopen(FP, "rb")
+#endif
+
+#define OPEN_IN(FP) fopen(FP, "r")
+#define OPEN_OUT(FP) fopen(FP, "w")
+#define CLOSE(FP) fclose(FP)
+
+#if (CCD_2000 || OS_MVSXA)
+#define ASCII 1
+#define ISDIGIT(C) isdigit(C)
+#define ISSYMBOL(C) (! (isdigit(C) || isalpha(C) || iscntrl(C) || C == SPC))
+#else
+#define ISDIGIT(C) ('0' <= C && C <= '9')
+#define ISSYMBOL(C) (('!' <= C && C <= '@') || \
+ ('[' <= C && C <= '`') || \
+ ('{' <= C && C <= '~'))
+#endif /* (CCD_2000 || OS_MVSXA) */
+
+/*====================================================================
+Many arrays in MakeIndex are dimensioned [xxx_MAX], where the xxx_MAX
+values are defined below. The use of each of these is described in
+comments. However, no run-time check is made to ensure that these are
+consistent, or reasonable! Therefore, change them only with great
+care.
+
+The array sizes should be made generously large: there are a great
+many uses of strings in MakeIndex with the strxxx() and sprintf()
+functions where no checking is done for adequate target storage sizes.
+Although some input checking is done to avoid this possibility, it is
+highly likely that there are still several places where storage
+violations are possible, with core dumps, or worse, incorrect output,
+ensuing.
+======================================================================*/
+
+#define ARABIC_MAX 5 /* maximum digits in an Arabic page */
+ /* number field */
+
+#define ARGUMENT_MAX 1024 /* maximum length of sort or actual key */
+ /* in index entry */
+
+#define ARRAY_MAX 1024 /* maximum length of constant values in */
+ /* style file */
+
+#define FIELD_MAX 3 /* maximum levels of index entries (item, */
+ /* subitem, subsubitem); cannot be */
+ /* increased beyond 3 without */
+ /* significant design changes (no field */
+ /* names are known beyond 3 levels) */
+
+#ifdef LINE_MAX /* IBM RS/6000 AIX has this in <sys/limits.h> */
+#undef LINE_MAX
+#endif
+#define LINE_MAX 72 /* maximum output line length (longer */
+ /* ones wrap if possible) */
+
+#define NUMBER_MAX 16 /* maximum digits in a Roman or Arabic */
+ /* page number */
+ /* (MAX(ARABIC_MAX,ROMAN_MAX)) */
+
+#define PAGEFIELD_MAX 10 /* maximum fields in a composite page */
+ /* number */
+
+#define PAGETYPE_MAX 5 /* fixed at 5; see use in scanst.c */
+
+#define ROMAN_MAX 16 /* maximum length of Roman page number */
+ /* field */
+
+#define STRING_MAX 256 /* maximum length of host filename */
+
+/*====================================================================*/
+
+#define VERSION "portable version 2.12 [26-May-1993]"
+
+#if 0
+#define VERSION "portable version 2.11 [19-Oct-1991]"
+#define VERSION "portable version 2.10 [05-Jul-1991]"
+#define VERSION "portable version 2.9.1 [21-Jun-1990]"
+#define VERSION "portable version 2.9 [13-Dec-1989]"
+#define VERSION "portable version 2.8 [11-Nov-1989]"
+#define VERSION "portable version 2.7 [01-Oct-1988]"
+#define VERSION "portable version 2.6 [14-Jul-1988]"
+#define VERSION "portable version 2.5 [14-Apr-1988]"
+#define VERSION "portable version 2.4 [20-Mar-1988]"
+#define VERSION "portable version 2.3 [20-Jan-1988]"
+#define VERSION "version 2.2 [29-May-1987]"
+#endif
+
+#define PUT_VERSION { \
+ MESSAGE("This is %s, ", pgm_fn); \
+ MESSAGE("%s.\n", VERSION); \
+ need_version = FALSE; \
+}
+
+#define USAGE \
+ "Usage: %s [-ilqrcg] [-s sty] [-o ind] [-t log] [-p num] [idx0 idx1 ...]\n"
+
+#define STYLE_PATH "INDEXSTYLE" /* environment variable defining search */
+ /* path for style files */
+#define INDEX_IDX ".idx"
+#define INDEX_ILG ".ilg"
+#define INDEX_IND ".ind"
+#define INDEX_STY ".mst"
+
+#if OS_VAXVMS
+#define INDEX_LOG ".lis"
+#else
+#define INDEX_LOG ".log"
+#endif
+
+#if OS_BS2000 /* Define WORK disk */
+#define WORK ":w:"
+#define CATID ':'
+#endif /* OS_BS2000 */
+
+#define EMPTY -9999
+#define ROML 0
+#define ROMU 1
+#define ARAB 2
+#define ALPL 3
+#define ALPU 4
+#define DUPLICATE 9999
+
+#define SYMBOL -1
+#define ALPHA -2
+
+#define GERMAN 0
+
+typedef struct KFIELD
+{
+ char *sf[FIELD_MAX]; /* sort key */
+ char *af[FIELD_MAX]; /* actual key */
+ int group; /* key group */
+ char lpg[NUMBER_MAX]; /* literal page */
+ short npg[PAGEFIELD_MAX]; /* page field array */
+ short count; /* page field count */
+ short type; /* page number type */
+ char *encap; /* encapsulator */
+ char *fn; /* input filename */
+ int lc; /* line number */
+} FIELD, *FIELD_PTR;
+
+typedef struct KNODE
+{
+ FIELD data;
+ struct KNODE *next;
+} NODE, *NODE_PTR;
+
+extern int letter_ordering;
+extern int compress_blanks;
+extern int init_page;
+extern int merge_page;
+extern int even_odd;
+extern int verbose;
+extern int german_sort;
+
+extern char idx_keyword[ARRAY_MAX];
+extern char idx_aopen;
+extern char idx_aclose;
+extern char idx_level;
+extern char idx_ropen;
+extern char idx_rclose;
+extern char idx_quote;
+extern char idx_actual;
+extern char idx_encap;
+extern char idx_escape;
+
+extern char page_comp[ARRAY_MAX];
+extern int page_offset[PAGETYPE_MAX];
+
+extern char preamble[ARRAY_MAX];
+extern char postamble[ARRAY_MAX];
+extern char setpage_open[ARRAY_MAX];
+extern char setpage_close[ARRAY_MAX];
+extern char group_skip[ARRAY_MAX];
+extern int headings_flag;
+extern char heading_pre[ARRAY_MAX];
+extern char heading_suf[ARRAY_MAX];
+extern char symhead_pos[ARRAY_MAX];
+extern char symhead_neg[ARRAY_MAX];
+extern char numhead_pos[ARRAY_MAX];
+extern char numhead_neg[ARRAY_MAX];
+extern int prelen;
+extern int postlen;
+extern int skiplen;
+extern int headprelen;
+extern int headsuflen;
+extern int setpagelen;
+
+extern char item_r[FIELD_MAX][ARRAY_MAX];
+extern char item_u[FIELD_MAX][ARRAY_MAX];
+extern char item_x[FIELD_MAX][ARRAY_MAX];
+extern int ilen_r[FIELD_MAX];
+extern int ilen_u[FIELD_MAX];
+extern int ilen_x[FIELD_MAX];
+
+extern char delim_p[FIELD_MAX][ARRAY_MAX];
+extern char delim_n[ARRAY_MAX];
+extern char delim_r[ARRAY_MAX];
+extern char delim_t[ARRAY_MAX];
+
+extern char suffix_2p[ARRAY_MAX];
+extern char suffix_3p[ARRAY_MAX];
+extern char suffix_mp[ARRAY_MAX];
+
+extern char encap_p[ARRAY_MAX];
+extern char encap_i[ARRAY_MAX];
+extern char encap_s[ARRAY_MAX];
+
+extern int linemax;
+extern char indent_space[ARRAY_MAX];
+extern int indent_length;
+
+extern FILE *idx_fp;
+extern FILE *sty_fp;
+extern FILE *ind_fp;
+extern FILE *ilg_fp;
+
+#if OS_BS2000
+extern FILE *widx_fp;
+extern char widx_fn[STRING_MAX + 5];
+#endif /* OS_BS2000 */
+
+extern char *idx_fn;
+extern char *pgm_fn;
+extern char *ind_fn;
+extern char *ilg_fn;
+
+#ifndef MKIND_C
+extern char sty_fn[];
+extern char ind[];
+extern char ilg[];
+extern char pageno[];
+
+#ifdef DEBUG
+extern long totmem;
+#endif /* DEBUG */
+
+#endif
+
+extern FIELD_PTR *idx_key;
+extern NODE_PTR head;
+extern NODE_PTR tail;
+
+extern int idx_dot;
+extern int idx_tt;
+extern int idx_gt;
+extern int idx_et;
+extern int idx_dc;
+
+#define DOT "."
+#define DOT_MAX 1000
+#define CMP_MAX 1500
+
+#define IDX_DOT(MAX) { \
+ idx_dot = TRUE; \
+ if (idx_dc++ == 0) { \
+ if (verbose) \
+ fprintf(stderr, DOT); \
+ fprintf(ilg_fp, DOT); \
+ } \
+ if (idx_dc == MAX) \
+ idx_dc = 0; \
+}
+
+#define ALL_DONE { \
+ if (fn_no > 0) { \
+ if (verbose) \
+fprintf(stderr, \
+ "Overall %d files read (%d entries accepted, %d rejected).\n", \
+ fn_no+1, idx_gt, idx_et); \
+fprintf(ilg_fp, \
+ "Overall %d files read (%d entries accepted, %d rejected).\n", \
+ fn_no+1, idx_gt, idx_et); \
+ } \
+}
+
+#define DONE(A, B, C, D) { \
+ if (verbose) \
+ fprintf(stderr, "done (%d %s, %d %s).\n", (A), B, C, D); \
+ fprintf(ilg_fp, "done (%d %s, %d %s).\n", (A), B, C, D); \
+}
+
+#if STDC_PROTOTYPES
+#define ARGS(arg_list) arg_list
+#define VOIDP void*
+#define VOID_ARG void
+#else
+#define ARGS(arg_list) ()
+#define const
+#define VOIDP char*
+#define VOID_ARG
+#endif
+
+extern void gen_ind ARGS((void));
+extern int group_type ARGS((char *str));
+extern int main ARGS((int argc, char **argv));
+extern void qqsort ARGS((char *base, int n, int size,
+ int (*compar)ARGS((char*,char*))));
+extern void scan_idx ARGS((void));
+extern void scan_sty ARGS((void));
+extern void sort_idx ARGS((void));
+extern int strtoint ARGS((char *str));
+
+#if STDC
+#include <stdlib.h>
+#undef strchr
+#undef strrchr
+#if __NeXT__
+int access ARGS((const char *, int));
+#else
+#include <unistd.h>
+#endif
+#else
+/* Miscellaneous standard library routines */
+int access ARGS((const char *, int));
+VOIDP calloc ARGS((size_t nitems,size_t size));
+
+#if CCD_2000 /* function not available */
+#define getenv(P) 0
+#else
+char *getenv ARGS((const char *name));
+#endif
+
+VOIDP malloc ARGS((size_t size));
+char *strchr ARGS((const char *s,int c));
+char *strrchr ARGS((const char *s,int c));
+#endif /* __STDC__ */
+
+#if PCC_20
+#define R_OK 0 /* PCC-20 access(file,mode) */
+#endif /* only understands mode=0 */
+
+#ifndef R_OK
+#define R_OK 4 /* only symbol from sys/file.h */
+#endif
diff --git a/indexing/makeindex/src/qsort.c b/indexing/makeindex/src/qsort.c
new file mode 100644
index 0000000000..7223a20545
--- /dev/null
+++ b/indexing/makeindex/src/qsort.c
@@ -0,0 +1,222 @@
+/*
+ *
+ * This file is part of
+ * MakeIndex - A formatter and format independent index processor
+ *
+ * This file is public domain software donated by
+ * Nelson Beebe (beebe@science.utah.edu).
+ *
+ */
+
+/*
+ * qsort.c: Our own version of the system qsort routine which is faster by an
+ * average of 25%, with lows and highs of 10% and 50%. The THRESHold below is
+ * the insertion sort threshold, and has been adjusted for records of size 48
+ * bytes. The MTHREShold is where we stop finding a better median.
+ */
+
+/* #include <stdio.h> -- mkind.h includes this */
+#include "mkind.h" /* only for type declarations */
+
+#define THRESH 4 /* threshold for insertion */
+#define MTHRESH 6 /* threshold for median */
+
+static int qsz; /* size of each record */
+static int thresh; /* THRESHold in chars */
+static int mthresh; /* MTHRESHold in chars */
+
+static int (*qcmp) ARGS((char*,char*)); /* the comparison routine */
+static void qst ARGS((char *base, char *max));
+/*
+ * qqsort: First, set up some global parameters for qst to share. Then,
+ * quicksort with qst(), and then a cleanup insertion sort ourselves. Sound
+ * simple? It's not...
+ */
+
+void
+#if STDC
+qqsort(char *base, int n, int size, int (*compar) ARGS((char*,char*)))
+#else
+qqsort(base, n, size, compar)
+char *base;
+int n;
+int size;
+int (*compar) ARGS((char*,char*));
+#endif
+{
+ register char *i;
+ register char *j;
+ register char *lo;
+ register char *hi;
+ register char *min;
+ register char c;
+ char *max;
+
+ if (n <= 1)
+ return;
+ qsz = size;
+ qcmp = compar;
+ thresh = qsz * THRESH;
+ mthresh = qsz * MTHRESH;
+ max = base + n * qsz;
+ if (n >= THRESH) {
+ qst(base, max);
+ hi = base + thresh;
+ } else {
+ hi = max;
+ }
+ /*
+ * First put smallest element, which must be in the first THRESH, in the
+ * first position as a sentinel. This is done just by searching the
+ * first THRESH elements (or the first n if n < THRESH), finding the min,
+ * and swapping it into the first position.
+ */
+ for (j = lo = base; (lo += qsz) < hi;) {
+ if ((*qcmp) (j, lo) > 0)
+ j = lo;
+ }
+ if (j != base) { /* swap j into place */
+ for (i = base, hi = base + qsz; i < hi;) {
+ c = *j;
+ *j++ = *i;
+ *i++ = c;
+ }
+ }
+ /*
+ * With our sentinel in place, we now run the following hyper-fast
+ * insertion sort. For each remaining element, min, from [1] to [n-1],
+ * set hi to the index of the element AFTER which this one goes. Then, do
+ * the standard insertion sort shift on a character at a time basis for
+ * each element in the frob.
+ */
+ for (min = base; (hi = min += qsz) < max;) {
+ while ((*qcmp) (hi -= qsz, min) > 0);
+ if ((hi += qsz) != min) {
+ for (lo = min + qsz; --lo >= min;) {
+ c = *lo;
+ for (i = j = lo; (j -= qsz) >= hi; i = j)
+ *i = *j;
+ *i = c;
+ }
+ }
+ }
+}
+
+
+
+/*
+ * qst: Do a quicksort. First, find the median element, and put that one in
+ * the first place as the discriminator. (This "median" is just the median
+ * of the first, last and middle elements). (Using this median instead of
+ * the first element is a big win). Then, the usual partitioning/swapping,
+ * followed by moving the discriminator into the right place. Then, figure
+ * out the sizes of the two partions, do the smaller one recursively and the
+ * larger one via a repeat of this code. Stopping when there are less than
+ * THRESH elements in a partition and cleaning up with an insertion sort (in
+ * our caller) is a huge win. All data swaps are done in-line, which is
+ * space-losing but time-saving. (And there are only three places where this
+ * is done).
+ */
+
+static void
+#if STDC
+qst(char *base, char *max)
+#else
+qst(base, max)
+char *base;
+char *max;
+#endif
+{
+ register char *i;
+ register char *j;
+ register char *jj;
+ register char *mid;
+ register int ii;
+ register char c;
+ char *tmp;
+ int lo;
+ int hi;
+
+ lo = (int)(max - base); /* number of elements as chars */
+ do {
+ /*
+ * At the top here, lo is the number of characters of elements in the
+ * current partition. (Which should be max - base). Find the median
+ * of the first, last, and middle element and make that the middle
+ * element. Set j to largest of first and middle. If max is larger
+ * than that guy, then it's that guy, else compare max with loser of
+ * first and take larger. Things are set up to prefer the middle,
+ * then the first in case of ties.
+ */
+ mid = i = base + qsz * ((unsigned) (lo / qsz) >> 1);
+ if (lo >= mthresh) {
+ j = ((*qcmp) ((jj = base), i) > 0 ? jj : i);
+ if ((*qcmp) (j, (tmp = max - qsz)) > 0) {
+ /* switch to first loser */
+ j = (j == jj ? i : jj);
+ if ((*qcmp) (j, tmp) < 0)
+ j = tmp;
+ }
+ if (j != i) {
+ ii = qsz;
+ do {
+ c = *i;
+ *i++ = *j;
+ *j++ = c;
+ } while (--ii);
+ }
+ }
+ /* Semi-standard quicksort partitioning/swapping */
+ for (i = base, j = max - qsz;;) {
+ while (i < mid && (*qcmp) (i, mid) <= 0)
+ i += qsz;
+ while (j > mid) {
+ if ((*qcmp) (mid, j) <= 0) {
+ j -= qsz;
+ continue;
+ }
+ tmp = i + qsz; /* value of i after swap */
+ if (i == mid) { /* j <-> mid, new mid is j */
+ mid = jj = j;
+ } else { /* i <-> j */
+ jj = j;
+ j -= qsz;
+ }
+ goto swap;
+ }
+ if (i == mid) {
+ break;
+ } else { /* i <-> mid, new mid is i */
+ jj = mid;
+ tmp = mid = i; /* value of i after swap */
+ j -= qsz;
+ }
+ swap:
+ ii = qsz;
+ do {
+ c = *i;
+ *i++ = *jj;
+ *jj++ = c;
+ } while (--ii);
+ i = tmp;
+ }
+ /*
+ * Look at sizes of the two partitions, do the smaller one first by
+ * recursion, then do the larger one by making sure lo is its size,
+ * base and max are update correctly, and branching back. But only
+ * repeat (recursively or by branching) if the partition is of at
+ * least size THRESH.
+ */
+ i = (j = mid) + qsz;
+ if ((lo = (int)(j - base)) <= (hi = (int)(max - i))) {
+ if (lo >= thresh)
+ qst(base, j);
+ base = i;
+ lo = hi;
+ } else {
+ if (hi >= thresh)
+ qst(i, max);
+ max = j;
+ }
+ } while (lo >= thresh);
+}
diff --git a/indexing/makeindex/src/scanid.c b/indexing/makeindex/src/scanid.c
new file mode 100644
index 0000000000..4426110517
--- /dev/null
+++ b/indexing/makeindex/src/scanid.c
@@ -0,0 +1,830 @@
+/*
+ *
+ * This file is part of
+ * MakeIndex - A formatter and format independent index processor
+ *
+ * Copyright (C) 1989 by Chen & Harrison International Systems, Inc.
+ * Copyright (C) 1988 by Olivetti Research Center
+ * Copyright (C) 1987 by Regents of the University of California
+ *
+ * Author:
+ * Pehong Chen
+ * Chen & Harrison International Systems, Inc.
+ * Palo Alto, California
+ * USA
+ * (phc@renoir.berkeley.edu or chen@orc.olivetti.com)
+ *
+ * Contributors:
+ * Please refer to the CONTRIB file that comes with this release
+ * for a list of people who have contributed to this and/or previous
+ * release(s) of MakeIndex.
+ *
+ * All rights reserved by the copyright holders. See the copyright
+ * notice distributed with this software for a complete description of
+ * the conditions under which it is made available.
+ *
+ */
+
+#include "mkind.h"
+#include "scanid.h"
+
+#define CHECK_LENGTH() if (i > len_field) goto OVERFLOW
+
+int idx_lc; /* line count */
+int idx_tc; /* total entry count */
+int idx_ec; /* erroneous entry count */
+int idx_dc; /* number of dots printed so far */
+
+static int first_entry = TRUE;
+static int comp_len;
+static char key[ARGUMENT_MAX];
+static char no[NUMBER_MAX];
+extern char *strchr ARGS((const char* s,int c));
+
+NODE_PTR head;
+NODE_PTR tail;
+
+static void flush_to_eol ARGS((void));
+static int make_key ARGS((void));
+static void make_string ARGS((char **ppstr,int n));
+static int scan_alpha_lower ARGS((char *no,short *npg,short *count));
+static int scan_alpha_upper ARGS((char *no,short *npg,short *count));
+static int scan_arabic ARGS((char *no,short *npg,short *count));
+static int scan_arg1 ARGS((void));
+static int scan_arg2 ARGS((void));
+static int scan_field ARGS((int *n,char field[],int len_field,
+ int ck_level, int ck_encap,int ck_actual));
+static int scan_key ARGS((struct KFIELD *data));
+static int scan_no ARGS((char *no,short *npg,short *count,short *type));
+static int scan_roman_lower ARGS((char *no,short *npg,short *count));
+static int scan_roman_upper ARGS((char *no,short *npg,short *count));
+static void search_quote ARGS((char sort_key[],char actual_key[]));
+
+#if (OS_BS2000 | OS_MVSXA)
+char UPCC[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
+#endif
+
+void
+scan_idx(VOID_ARG)
+{
+ char keyword[ARRAY_MAX];
+ int c;
+ int i = 0;
+ int not_eof = TRUE;
+ int arg_count = -1;
+
+ MESSAGE("Scanning input file %s...", idx_fn);
+ idx_lc = idx_tc = idx_ec = idx_dc = 0;
+ comp_len = strlen(page_comp);
+ while (not_eof) {
+ switch (c = GET_CHAR(idx_fp)) {
+ case EOF:
+ if (arg_count == 2) {
+ idx_lc++;
+ if (make_key())
+ IDX_DOT(DOT_MAX);
+ arg_count = -1;
+ } else
+ not_eof = FALSE;
+ break;
+
+ case LFD:
+ idx_lc++;
+ if (arg_count == 2) {
+ if (make_key())
+ IDX_DOT(DOT_MAX);
+ arg_count = -1;
+ } else if (arg_count > -1) {
+ IDX_ERROR("Missing arguments -- need two (premature LFD).\n",
+ NULL);
+ arg_count = -1;
+ }
+ case TAB:
+ case SPC:
+ break;
+
+ default:
+ switch (arg_count) {
+ case -1:
+ i = 0;
+ keyword[i++] = (char) c;
+ arg_count++;
+ idx_tc++;
+ break;
+ case 0:
+ if (c == idx_aopen) {
+ arg_count++;
+ keyword[i] = NUL;
+ if (STREQ(keyword, idx_keyword)) {
+ if (!scan_arg1()) {
+ arg_count = -1;
+ }
+ } else {
+ IDX_SKIPLINE;
+ IDX_ERROR("Unknown index keyword %s.\n", keyword);
+ }
+ } else {
+ if (i < ARRAY_MAX)
+ keyword[i++] = (char) c;
+ else {
+ IDX_SKIPLINE;
+ IDX_ERROR2("Index keyword %s too long (max %d).\n",
+ keyword, ARRAY_MAX);
+ }
+ }
+ break;
+ case 1:
+ if (c == idx_aopen) {
+ arg_count++;
+ if (!scan_arg2()) {
+ arg_count = -1;
+ }
+ } else {
+ IDX_SKIPLINE;
+IDX_ERROR(
+"No opening delimiter for second argument (illegal character `%c').\n", c);
+ }
+ break;
+ case 2:
+ IDX_SKIPLINE;
+IDX_ERROR(
+"No closing delimiter for second argument (illegal character `%c').\n", c);
+ break;
+ }
+ break;
+ }
+ }
+
+ /* fixup the total counts */
+ idx_tt += idx_tc;
+ idx_et += idx_ec;
+
+ DONE(idx_tc - idx_ec, "entries accepted", idx_ec, "rejected");
+ CLOSE(idx_fp);
+}
+
+static void
+flush_to_eol(VOID_ARG)
+{ /* flush to end-of-line, or end-of-file, whichever is first */
+ int a;
+
+ while ( ((a = GET_CHAR(idx_fp)) != LFD) && (a != EOF) )
+ /* NO-OP */;
+}
+
+static int
+make_key(VOID_ARG)
+{
+ NODE_PTR ptr;
+ int i;
+
+ /* allocate and initialize a node */
+
+#ifdef DEBUG
+ totmem += sizeof(NODE);
+ (void)fprintf(stderr,"make_key(): malloc(%d)\ttotmem = %ld\n",
+ sizeof(NODE),totmem);
+#endif /* DEBUG */
+
+ if ((ptr = (NODE_PTR) malloc(sizeof(NODE))) == NULL)
+ FATAL("Not enough core...abort.\n", "");
+
+ for (i = 0; i < FIELD_MAX; i++)
+ {
+ ptr->data.sf[i] = ""; /* initialize fields to pointers */;
+ ptr->data.af[i] = ""; /* to constant empty strings */
+ }
+ ptr->data.encap = "";
+ ptr->data.lpg[0] = NUL;
+ ptr->data.count = 0;
+ ptr->data.type = EMPTY;
+
+ /* process index key */
+ if (!scan_key(&(ptr->data)))
+ return (FALSE);
+
+ /* determine group type */
+ ptr->data.group = group_type(ptr->data.sf[0]);
+
+ /* process page number */
+ strcpy(ptr->data.lpg, no);
+ if (!scan_no(no, ptr->data.npg, &(ptr->data.count), &(ptr->data.type)))
+ return (FALSE);
+
+ if (first_entry) {
+ head = tail = ptr;
+ first_entry = FALSE;
+ } else {
+ tail->next = ptr;
+ tail = ptr;
+ }
+ ptr->data.lc = idx_lc;
+ ptr->data.fn = idx_fn;
+ tail->next = NULL;
+
+ return (TRUE);
+}
+
+static void
+#if STDC
+make_string(char **ppstr, int n)
+#else
+make_string(ppstr,n) /* allocate n-byte string if *ppstr */
+char **ppstr; /* points to an empty string */
+int n;
+#endif
+{
+ if ((*ppstr)[0] == NUL) /* then we have an empty string */
+ {
+ (*ppstr) = (char*)malloc(n);
+ if ((*ppstr) == (char*)NULL)
+ FATAL("Not enough core...abort.\n", "");
+ (*ppstr)[0] = NUL;
+ }
+}
+
+static int
+#if STDC
+scan_key(FIELD_PTR data)
+#else
+scan_key(data)
+FIELD_PTR data;
+#endif
+{
+ int i = 0; /* current level */
+ int n = 0; /* index to the key[] array */
+ int second_round = FALSE;
+ int last = FIELD_MAX - 1;
+
+ while (TRUE) {
+ if (key[n] == NUL)
+ break;
+ if (key[n] == idx_encap)
+ {
+ n++;
+ make_string(&(data->encap),strlen(key) + 1);
+ if (scan_field(&n, data->encap, strlen(key), FALSE, FALSE, FALSE))
+ break;
+ else
+ return (FALSE);
+ }
+ if (key[n] == idx_actual) {
+ n++;
+ if (i == last)
+ {
+ make_string(&(data->af[i]),strlen(key) + 1);
+ if (!scan_field(&n, data->af[i], strlen(key),
+ FALSE, TRUE, FALSE))
+ return (FALSE);
+ }
+ else
+ {
+ make_string(&(data->af[i]),strlen(key) + 1);
+ if (!scan_field(&n, data->af[i], strlen(key),
+ TRUE, TRUE, FALSE))
+ return (FALSE);
+ }
+ } else {
+ /* Next nesting level */
+ if (second_round) {
+ i++;
+ n++;
+ }
+ if (i == last)
+ {
+ make_string(&(data->sf[i]),strlen(key) + 1);
+ if (!scan_field(&n, data->sf[i], strlen(key),
+ FALSE, TRUE, TRUE))
+ return (FALSE);
+ }
+ else
+ {
+ make_string(&(data->sf[i]),strlen(key) + 1);
+ if (!scan_field(&n, data->sf[i], strlen(key),
+ TRUE, TRUE, TRUE))
+ return (FALSE);
+ }
+ second_round = TRUE;
+ if (german_sort && strchr(data->sf[i], '"'))
+ {
+ make_string(&(data->af[i]),strlen(data->sf[i]) + 1);
+ search_quote(data->sf[i], data->af[i]);
+ }
+ }
+ }
+
+ /* check for empty fields which shouldn't be empty */
+ if (*data->sf[0] == NUL) {
+ NULL_RTN;
+ }
+ for (i = 1; i < FIELD_MAX - 1; i++)
+ if ((*data->sf[i] == NUL) &&
+ ((*data->af[i] != NUL) || (*data->sf[i + 1] != NUL))) {
+ NULL_RTN;
+ }
+ /* i == FIELD_MAX-1 */
+ if ((*data->sf[i] == NUL) && (*data->af[i] != NUL)) {
+ NULL_RTN;
+ }
+ return (TRUE);
+}
+
+static int
+#if STDC
+scan_field(int *n, char field[], int len_field, int ck_level, int ck_encap,
+ int ck_actual)
+#else
+scan_field(n, field, len_field, ck_level, ck_encap, ck_actual)
+int *n;
+char field[];
+int len_field; /* length of field[], EXCLUDING space for final NUL */
+int ck_level;
+int ck_encap;
+int ck_actual;
+#endif
+{
+ int i = 0;
+ int nbsh; /* backslash count */
+
+ if (compress_blanks && ((key[*n] == SPC) || (key[*n] == TAB)))
+ ++* n;
+
+ while (TRUE) {
+ nbsh = 0;
+ while (key[*n] == idx_escape)
+ {
+ nbsh++;
+ field[i++] = key[*n];
+ CHECK_LENGTH();
+ ++*n;
+ }
+
+ if (key[*n] == idx_quote)
+ {
+ if (nbsh % 2 == 0)
+ field[i++] = key[++*n];
+ else
+ field[i++] = key[*n];
+ CHECK_LENGTH();
+ }
+ else if ((ck_level && (key[*n] == idx_level)) ||
+ (ck_encap && (key[*n] == idx_encap)) ||
+ (ck_actual && (key[*n] == idx_actual)) ||
+ (key[*n] == NUL))
+ {
+ if ((i > 0) && compress_blanks && (field[i - 1] == SPC))
+ field[i - 1] = NUL;
+ else
+ field[i] = NUL;
+ return (TRUE);
+ } else {
+ field[i++] = key[*n];
+ CHECK_LENGTH();
+ if ((!ck_level) && (key[*n] == idx_level)) {
+ IDX_ERROR2("Extra `%c' at position %d of first argument.\n",
+ idx_level, *n + 1);
+ return (FALSE);
+ } else if ((!ck_encap) && (key[*n] == idx_encap)) {
+ IDX_ERROR2("Extra `%c' at position %d of first argument.\n",
+ idx_encap, *n + 1);
+ return (FALSE);
+ } else if ((!ck_actual) && (key[*n] == idx_actual)) {
+ IDX_ERROR2("Extra `%c' at position %d of first argument.\n",
+ idx_actual, *n + 1);
+ return (FALSE);
+ }
+ }
+ /* check if max field length is reached */
+ if (i > len_field)
+ {
+ OVERFLOW:
+ if (!ck_encap) {
+ IDX_ERROR("Encapsulator of page number too long (max. %d).\n",
+ len_field);
+ } else if (ck_actual) {
+ IDX_ERROR("Index sort key too long (max. %d).\n", len_field);
+ } else {
+ IDX_ERROR("Text of key entry too long (max. %d).\n", len_field);
+ }
+ return (FALSE);
+ }
+ ++*n;
+ }
+#if IBM_PC_TURBO
+ return (FALSE); /* not reached, but keeps compiler happy */
+#endif
+}
+
+int
+#if STDC
+group_type(char *str)
+#else
+group_type(str)
+char *str;
+#endif
+{
+ int i = 0;
+
+ while ((str[i] != NUL) && ISDIGIT(str[i]))
+ i++;
+
+ if (str[i] == NUL) {
+ sscanf(str, "%d", &i);
+ return (i);
+ } else if (ISSYMBOL(str[0]))
+ return (SYMBOL);
+ else
+ return (ALPHA);
+}
+
+static int
+#if STDC
+scan_no(char no[], short npg[], short *count, short *type)
+#else
+scan_no(no, npg, count, type)
+char no[];
+short npg[];
+short *count;
+short *type;
+#endif
+{
+ int i = 1;
+
+ if (isdigit(no[0])) {
+ *type = ARAB;
+ if (!scan_arabic(no, npg, count))
+ return (FALSE);
+ /* simple heuristic to determine if a letter is Roman or Alpha */
+ } else if (IS_ROMAN_LOWER(no[0]) && (!IS_COMPOSITOR)) {
+ *type = ROML;
+ if (!scan_roman_lower(no, npg, count))
+ return (FALSE);
+ /* simple heuristic to determine if a letter is Roman or Alpha */
+ } else if (IS_ROMAN_UPPER(no[0]) &&
+ ((no[0] == ROMAN_I) || (!IS_COMPOSITOR))) {
+ *type = ROMU;
+ if (!scan_roman_upper(no, npg, count))
+ return (FALSE);
+ } else if (IS_ALPHA_LOWER(no[0])) {
+ *type = ALPL;
+ if (!scan_alpha_lower(no, npg, count))
+ return (FALSE);
+ } else if (IS_ALPHA_UPPER(no[0])) {
+ *type = ALPU;
+ if (!scan_alpha_upper(no, npg, count))
+ return (FALSE);
+ } else {
+ IDX_ERROR("Illegal page number %s.\n", no);
+ return (FALSE);
+ }
+ return (TRUE);
+}
+
+
+static int
+#if STDC
+scan_arabic(char no[], short npg[], short *count)
+#else
+scan_arabic(no, npg, count)
+char no[];
+short npg[];
+short *count;
+#endif
+{
+ short i = 0;
+ char str[ARABIC_MAX+1]; /* space for trailing NUL */
+
+ while ((no[i] != NUL) && (i <= ARABIC_MAX) && (!IS_COMPOSITOR)) {
+ if (isdigit(no[i])) {
+ str[i] = no[i];
+ i++;
+ } else {
+IDX_ERROR2("Illegal Arabic digit: position %d in %s.\n", i + 1, no);
+ return (FALSE);
+ }
+ }
+ if (i > ARABIC_MAX) {
+ IDX_ERROR2("Arabic page number %s too big (max %d digits).\n",
+ no, ARABIC_MAX);
+ return (FALSE);
+ }
+ str[i] = NUL;
+
+ ENTER(strtoint(str) + page_offset[ARAB]);
+
+ if (IS_COMPOSITOR)
+ return (scan_no(&no[i + comp_len], npg, count, &i));
+ else
+ return (TRUE);
+}
+
+
+static int
+#if STDC
+scan_roman_lower(char no[], short npg[], short *count)
+#else
+scan_roman_lower(no, npg, count)
+char no[];
+short npg[];
+short *count;
+#endif
+{
+ short i = 0;
+ int inp = 0;
+ int prev = 0;
+ int the_new;
+
+ while ((no[i] != NUL) && (i < ROMAN_MAX) && (!IS_COMPOSITOR)) {
+ if ((IS_ROMAN_LOWER(no[i])) &&
+ ((the_new = ROMAN_LOWER_VAL(no[i])) != 0)) {
+ if (prev == 0)
+ prev = the_new;
+ else {
+ if (prev < the_new) {
+ prev = the_new - prev;
+ the_new = 0;
+ }
+ inp += prev;
+ prev = the_new;
+ }
+ } else {
+IDX_ERROR2("Illegal Roman number: position %d in %s.\n", i + 1, no);
+ return (FALSE);
+ }
+ i++;
+ }
+ if (i == ROMAN_MAX) {
+ IDX_ERROR2("Roman page number %s too big (max %d digits).\n",
+ no, ROMAN_MAX);
+ return (FALSE);
+ }
+ inp += prev;
+
+ ENTER(inp + page_offset[ROML]);
+
+ if (IS_COMPOSITOR)
+ return (scan_no(&no[i + comp_len], npg, count, &i));
+ else
+ return (TRUE);
+}
+
+
+static int
+#if STDC
+scan_roman_upper(char no[], short npg[], short *count)
+#else
+scan_roman_upper(no, npg, count)
+char no[];
+short npg[];
+short *count;
+#endif
+{
+ short i = 0;
+ int inp = 0;
+ int prev = 0;
+ int the_new;
+
+ while ((no[i] != NUL) && (i < ROMAN_MAX) && (!IS_COMPOSITOR)) {
+ if ((IS_ROMAN_UPPER(no[i])) &&
+ ((the_new = ROMAN_UPPER_VAL(no[i])) != 0)) {
+ if (prev == 0)
+ prev = the_new;
+ else {
+ if (prev < the_new) {
+ prev = the_new - prev;
+ the_new = 0;
+ }
+ inp += prev;
+ prev = the_new;
+ }
+ } else {
+IDX_ERROR2("Illegal Roman number: position %d in %s.\n", i + 1, no);
+ return (FALSE);
+ }
+ i++;
+ }
+ if (i == ROMAN_MAX) {
+ IDX_ERROR2("Roman page number %s too big (max %d digits).\n",
+ no, ROMAN_MAX);
+ return (FALSE);
+ }
+ inp += prev;
+
+ ENTER(inp + page_offset[ROMU]);
+
+ if (IS_COMPOSITOR)
+ return (scan_no(&no[i + comp_len], npg, count, &i));
+ else
+ return (TRUE);
+}
+
+
+static int
+#if STDC
+scan_alpha_lower(char no[], short npg[], short *count)
+#else
+scan_alpha_lower(no, npg, count)
+char no[];
+short npg[];
+short *count;
+#endif
+{
+ short i;
+
+ ENTER(ALPHA_VAL(no[0]) + page_offset[ALPL]);
+
+ i = 1;
+ if (IS_COMPOSITOR)
+ return (scan_no(&no[comp_len + 1], npg, count, &i));
+ else
+ return (TRUE);
+}
+
+
+static int
+#if STDC
+scan_alpha_upper(char no[], short npg[], short *count)
+#else
+scan_alpha_upper(no, npg, count)
+char no[];
+short npg[];
+short *count;
+#endif
+{
+ short i;
+
+ ENTER(ALPHA_VAL(no[0]) + page_offset[ALPU]);
+
+ i = 1;
+ if (IS_COMPOSITOR)
+ return (scan_no(&no[comp_len + 1], npg, count, &i));
+ else
+ return (TRUE);
+}
+
+
+static int
+scan_arg1(VOID_ARG)
+{
+ int i = 0;
+ int n = 0; /* delimiter count */
+ int a;
+
+ if (compress_blanks)
+ while (((a = GET_CHAR(idx_fp)) == SPC) || (a == TAB));
+ else
+ a = GET_CHAR(idx_fp);
+
+ while ((i < ARGUMENT_MAX) && (a != EOF))
+ {
+ if ((a == idx_quote) || (a == idx_escape))
+ { /* take next character literally */
+ key[i++] = (char) a; /* but preserve quote or escape */
+ a = GET_CHAR(idx_fp);
+ key[i++] = (char) a; /* save literal character */
+ }
+ else if (a == idx_aopen)
+ { /* opening delimiters within the argument list */
+ key[i++] = (char) a;
+ n++;
+ }
+ else if (a == idx_aclose)
+ {
+ if (n == 0) /* end of argument */
+ {
+ if (compress_blanks && key[i - 1] == SPC)
+ key[i - 1] = NUL;
+ else
+ key[i] = NUL;
+ return (TRUE);
+ }
+ else /* nested delimiters */
+ {
+ key[i++] = (char) a;
+ n--;
+ }
+ }
+ else
+ {
+ switch (a)
+ {
+ case LFD:
+ idx_lc++;
+ IDX_ERROR("Incomplete first argument (premature LFD).\n", "");
+ return (FALSE);
+ case TAB:
+ case SPC:
+ /* compress successive SPC's to one SPC */
+ if (compress_blanks)
+ {
+ if ((i > 0) && (key[i - 1] != SPC) && (key[i - 1] != TAB))
+ key[i++] = SPC;
+ break;
+ }
+ default:
+ key[i++] = (char) a;
+ break;
+ }
+ }
+ a = GET_CHAR(idx_fp);
+ }
+
+ flush_to_eol(); /* Skip to end of line */
+ idx_lc++;
+ IDX_ERROR("First argument too long (max %d).\n", ARGUMENT_MAX);
+ return (FALSE);
+}
+
+
+static int
+scan_arg2(VOID_ARG)
+{
+ int i = 0;
+ int a;
+ int hit_blank = FALSE;
+
+ while (((a = GET_CHAR(idx_fp)) == SPC) || (a == TAB));
+
+ while (i < NUMBER_MAX) {
+ if (a == idx_aclose) {
+ no[i] = NUL;
+ return (TRUE);
+ } else
+ switch (a) {
+ case LFD:
+ idx_lc++;
+IDX_ERROR("Incomplete second argument (premature LFD).\n", "");
+ return (FALSE);
+ case TAB:
+ case SPC:
+ hit_blank = TRUE;
+ break;
+ default:
+ if (hit_blank) {
+ flush_to_eol(); /* Skip to end of line */
+ idx_lc++;
+IDX_ERROR("Illegal space within numerals in second argument.\n", "");
+ return (FALSE);
+ }
+ no[i++] = (char) a;
+ break;
+ }
+ a = GET_CHAR(idx_fp);
+ }
+ flush_to_eol(); /* Skip to end of line */
+ idx_lc++;
+ IDX_ERROR("Second argument too long (max %d).\n", NUMBER_MAX);
+ return (FALSE);
+}
+
+
+static void
+#if STDC
+search_quote(char sort_key[], char actual_key[])
+#else
+search_quote(sort_key, actual_key)
+char sort_key[];
+char actual_key[];
+#endif
+{
+ char *ptr; /* pointer to sort_key */
+ char *sort; /* contains sorting text */
+ int char_found = FALSE;
+
+ strcpy(actual_key, sort_key);
+ ptr = strchr(sort_key, '"'); /* look for first double quote */
+ while (ptr != (char*)NULL)
+ {
+ sort = "";
+ switch (*(ptr + 1))
+ { /* skip to umlaut or sharp S */
+ case 'a':
+ case 'A':
+ sort = isupper(*(ptr + 1)) ? "Ae" : "ae";
+ break;
+ case 'o':
+ case 'O':
+ sort = isupper(*(ptr + 1)) ? "Oe" : "oe";
+ break;
+ case 'u':
+ case 'U':
+ sort = isupper(*(ptr + 1)) ? "Ue" : "ue";
+ break;
+ case 's':
+ sort = "ss";
+ break;
+ default:
+ break;
+ }
+ if (sort[0] != NUL)
+ {
+ char_found = TRUE;
+ *ptr = sort[0]; /* write to sort_key */
+ *(ptr + 1) = sort[1];
+ }
+ ptr = strchr(ptr + 1, '"'); /* next double quote */
+ }
+ if (!char_found) /* reset actual_key ? */
+ actual_key[0] = NUL;
+ return;
+}
diff --git a/indexing/makeindex/src/scanid.h b/indexing/makeindex/src/scanid.h
new file mode 100644
index 0000000000..cd48b083c4
--- /dev/null
+++ b/indexing/makeindex/src/scanid.h
@@ -0,0 +1,170 @@
+/*
+ *
+ * This file is part of
+ * MakeIndex - A formatter and format independent index processor
+ *
+ * Copyright (C) 1989 by Chen & Harrison International Systems, Inc.
+ * Copyright (C) 1988 by Olivetti Research Center
+ * Copyright (C) 1987 by Regents of the University of California
+ *
+ * Author:
+ * Pehong Chen
+ * Chen & Harrison International Systems, Inc.
+ * Palo Alto, California
+ * USA
+ * (phc@renoir.berkeley.edu or chen@orc.olivetti.com)
+ *
+ * Contributors:
+ * Please refer to the CONTRIB file that comes with this release
+ * for a list of people who have contributed to this and/or previous
+ * release(s) of MakeIndex.
+ *
+ * All rights reserved by the copyright holders. See the copyright
+ * notice distributed with this software for a complete description of
+ * the conditions under which it is made available.
+ *
+ */
+
+#define IS_COMPOSITOR (strncmp(&no[i], page_comp, comp_len) == 0)
+
+#define ROMAN_I 'I'
+#define ROMAN_V 'V'
+#define ROMAN_X 'X'
+#define ROMAN_L 'L'
+#define ROMAN_C 'C'
+#define ROMAN_D 'D'
+#define ROMAN_M 'M'
+
+#define ROMAN_i 'i'
+#define ROMAN_v 'v'
+#define ROMAN_x 'x'
+#define ROMAN_l 'l'
+#define ROMAN_c 'c'
+#define ROMAN_d 'd'
+#define ROMAN_m 'm'
+
+#define VAL_I 1
+#define VAL_V 5
+#define VAL_X 10
+#define VAL_L 50
+#define VAL_C 100
+#define VAL_D 500
+#define VAL_M 1000
+
+#define ROMAN_LOWER_VAL(C) \
+ ((C == ROMAN_i) ? VAL_I : \
+ (C == ROMAN_v) ? VAL_V : \
+ (C == ROMAN_x) ? VAL_X : \
+ (C == ROMAN_l) ? VAL_L : \
+ (C == ROMAN_c) ? VAL_C : \
+ (C == ROMAN_d) ? VAL_D : \
+ (C == ROMAN_m) ? VAL_M : 0)
+
+#define ROMAN_UPPER_VAL(C) \
+ ((C == ROMAN_I) ? VAL_I : \
+ (C == ROMAN_V) ? VAL_V : \
+ (C == ROMAN_X) ? VAL_X : \
+ (C == ROMAN_L) ? VAL_L : \
+ (C == ROMAN_C) ? VAL_C : \
+ (C == ROMAN_D) ? VAL_D : \
+ (C == ROMAN_M) ? VAL_M : 0)
+
+#define IS_ROMAN_LOWER(C) \
+ ((C == ROMAN_i) || (C == ROMAN_v) || (C == ROMAN_x) || \
+ (C == ROMAN_l) || (C == ROMAN_c) || (C == ROMAN_d) || (C == ROMAN_m))
+
+#define IS_ROMAN_UPPER(C) \
+ ((C == ROMAN_I) || (C == ROMAN_V) || (C == ROMAN_X) || \
+ (C == ROMAN_L) || (C == ROMAN_C) || (C == ROMAN_D) || (C == ROMAN_M))
+
+#if (CCD_2000 | OS_MVSXA)
+#define ALPHA_VAL(C) ((isalpha(C)) ? (strchr(UPCC,toupper(C))-UPCC) : 0)
+
+#define IS_ALPHA_LOWER(C) (isalpha(C) && islower(C))
+
+#define IS_ALPHA_UPPER(C) (isalpha(C) && isupper(C))
+#else
+#define ALPHA_VAL(C) \
+ ((('A' <= C) && (C <= 'Z')) ? C - 'A' : \
+ (('a' <= C) && (C <= 'z')) ? C - 'a' : 0)
+
+#define IS_ALPHA_LOWER(C) \
+ (('a' <= C) && (C <= 'z'))
+
+#define IS_ALPHA_UPPER(C) \
+ (('A' <= C) && (C <= 'Z'))
+#endif /* CCD_2000 | OS_MVSXA */
+
+#define IDX_SKIPLINE { \
+ int tmp; \
+ while ((tmp = GET_CHAR(idx_fp)) != LFD) \
+ if (tmp == EOF) \
+ break; \
+ idx_lc++; \
+ arg_count = -1; \
+}
+
+#define NULL_RTN { \
+ IDX_ERROR("Illegal null field.\n", NULL); \
+ return (FALSE); \
+}
+
+#if KCC_20
+/* KCC preprocessor bug collapses multiple blanks to single blank */
+#define IDX_ERROR(F, D) { \
+ if (idx_dot) { \
+ fprintf(ilg_fp, "\n"); \
+ idx_dot = FALSE; \
+ } \
+ fprintf(ilg_fp, \
+ "!! Input index error (file = %s, line = %d):\n\040\040 -- ", \
+ idx_fn, idx_lc); \
+ fprintf(ilg_fp, F, D); \
+ idx_ec++; \
+}
+
+#define IDX_ERROR2(F, D1, D2) { \
+ if (idx_dot) { \
+ fprintf(ilg_fp, "\n"); \
+ idx_dot = FALSE; \
+ } \
+ fprintf(ilg_fp, \
+ "!! Input index error (file = %s, line = %d):\n\040\040 -- ", \
+ idx_fn, idx_lc); \
+ fprintf(ilg_fp, F, D1, D2); \
+ idx_ec++; \
+}
+#else
+#define IDX_ERROR(F, D) { \
+ if (idx_dot) { \
+ fprintf(ilg_fp, "\n"); \
+ idx_dot = FALSE; \
+ } \
+ fprintf(ilg_fp, "!! Input index error (file = %s, line = %d):\n -- ", \
+ idx_fn, idx_lc); \
+ fprintf(ilg_fp, F, D); \
+ idx_ec++; \
+}
+
+#define IDX_ERROR2(F, D1, D2) { \
+ if (idx_dot) { \
+ fprintf(ilg_fp, "\n"); \
+ idx_dot = FALSE; \
+ } \
+ fprintf(ilg_fp, "!! Input index error (file = %s, line = %d):\n -- ", \
+ idx_fn, idx_lc); \
+ fprintf(ilg_fp, F, D1, D2); \
+ idx_ec++; \
+}
+#endif
+
+
+#define ENTER(V) { \
+ if (*count >= PAGEFIELD_MAX) { \
+ IDX_ERROR2("Page number %s has too many fields (max. %d).", \
+ no, PAGEFIELD_MAX); \
+ return (FALSE); \
+ } \
+ npg[*count] = (V); \
+ ++*count; \
+}
diff --git a/indexing/makeindex/src/scanst.c b/indexing/makeindex/src/scanst.c
new file mode 100644
index 0000000000..ed3e9654d8
--- /dev/null
+++ b/indexing/makeindex/src/scanst.c
@@ -0,0 +1,616 @@
+/*
+ *
+ * This file is part of
+ * MakeIndex - A formatter and format independent index processor
+ *
+ * Copyright (C) 1989 by Chen & Harrison International Systems, Inc.
+ * Copyright (C) 1988 by Olivetti Research Center
+ * Copyright (C) 1987 by Regents of the University of California
+ *
+ * Author:
+ * Pehong Chen
+ * Chen & Harrison International Systems, Inc.
+ * Palo Alto, California
+ * USA
+ * (phc@renoir.berkeley.edu or chen@orc.olivetti.com)
+ *
+ * Contributors:
+ * Please refer to the CONTRIB file that comes with this release
+ * for a list of people who have contributed to this and/or previous
+ * release(s) of MakeIndex.
+ *
+ * All rights reserved by the copyright holders. See the copyright
+ * notice distributed with this software for a complete description of
+ * the conditions under which it is made available.
+ *
+ */
+
+#include "mkind.h"
+#include "scanst.h"
+
+static int sty_lc = 0; /* line count */
+static int sty_tc = 0; /* total count */
+static int sty_ec = 0; /* error count */
+
+char idx_keyword[ARRAY_MAX] = IDX_KEYWORD;
+char idx_aopen = IDX_AOPEN;
+char idx_aclose = IDX_ACLOSE;
+char idx_level = IDX_LEVEL;
+char idx_ropen = IDX_ROPEN;
+char idx_rclose = IDX_RCLOSE;
+char idx_quote = IDX_QUOTE;
+char idx_actual = IDX_ACTUAL;
+char idx_encap = IDX_ENCAP;
+char idx_escape = IDX_ESCAPE;
+
+char preamble[ARRAY_MAX] = PREAMBLE_DEF;
+char postamble[ARRAY_MAX] = POSTAMBLE_DEF;
+int prelen = PREAMBLE_LEN;
+int postlen = POSTAMBLE_LEN;
+
+char setpage_open[ARRAY_MAX] = SETPAGEOPEN_DEF;
+char setpage_close[ARRAY_MAX] = SETPAGECLOSE_DEF;
+int setpagelen = SETPAGE_LEN;
+
+char group_skip[ARRAY_MAX] = GROUPSKIP_DEF;
+int skiplen = GROUPSKIP_LEN;
+
+int headings_flag = HEADINGSFLAG_DEF;
+char heading_pre[ARRAY_MAX] = HEADINGPRE_DEF;
+char heading_suf[ARRAY_MAX] = HEADINGSUF_DEF;
+int headprelen = HEADINGPRE_LEN;
+int headsuflen = HEADINGSUF_LEN;
+
+char symhead_pos[ARRAY_MAX] = SYMHEADPOS_DEF;
+char symhead_neg[ARRAY_MAX] = SYMHEADNEG_DEF;
+
+char numhead_pos[ARRAY_MAX] = NUMHEADPOS_DEF;
+char numhead_neg[ARRAY_MAX] = NUMHEADNEG_DEF;
+
+char item_r[FIELD_MAX][ARRAY_MAX] = {ITEM0_DEF, ITEM1_DEF, ITEM2_DEF};
+char item_u[FIELD_MAX][ARRAY_MAX] = {"", ITEM1_DEF, ITEM2_DEF};
+char item_x[FIELD_MAX][ARRAY_MAX] = {"", ITEM1_DEF, ITEM2_DEF};
+
+int ilen_r[FIELD_MAX] = {ITEM_LEN, ITEM_LEN, ITEM_LEN};
+int ilen_u[FIELD_MAX] = {0, ITEM_LEN, ITEM_LEN};
+int ilen_x[FIELD_MAX] = {0, ITEM_LEN, ITEM_LEN};
+
+char delim_p[FIELD_MAX][ARRAY_MAX] = {DELIM_DEF, DELIM_DEF, DELIM_DEF};
+char delim_n[ARRAY_MAX] = DELIM_DEF; /* page number separator */
+char delim_r[ARRAY_MAX] = DELIMR_DEF;/* page range designator */
+char delim_t[ARRAY_MAX] = DELIMT_DEF;/* page list terminating delimiter */
+
+char suffix_2p[ARRAY_MAX] = ""; /* suffix for two page ranges */
+char suffix_3p[ARRAY_MAX] = ""; /* suffix for three page ranges */
+char suffix_mp[ARRAY_MAX] = ""; /* suffix for multiple page ranges */
+
+char encap_p[ARRAY_MAX] = ENCAP0_DEF;/* encapsulator prefix */
+char encap_i[ARRAY_MAX] = ENCAP1_DEF;/* encapsulator infix */
+char encap_s[ARRAY_MAX] = ENCAP2_DEF;/* encapsulator postfix */
+
+int linemax = LINE_MAX;
+
+int indent_length = INDENTLEN_DEF;
+char indent_space[ARRAY_MAX] = INDENTSPC_DEF;
+
+char page_comp[ARRAY_MAX] = COMPOSITOR_DEF;
+int page_offset[PAGETYPE_MAX] = {
+0,
+ROMAN_LOWER_OFFSET,
+ROMAN_LOWER_OFFSET + ARABIC_OFFSET,
+ROMAN_LOWER_OFFSET + ARABIC_OFFSET + ALPHA_LOWER_OFFSET,
+ROMAN_LOWER_OFFSET + ARABIC_OFFSET + ALPHA_LOWER_OFFSET + ROMAN_UPPER_OFFSET
+};
+static char page_prec[ARRAY_MAX] = PRECEDENCE_DEF;
+
+static int put_dot;
+
+static int count_lfd ARGS((char *str));
+static int next_nonblank ARGS((void));
+static int process_precedence ARGS((void));
+static int scan_char ARGS((char *c));
+static int scan_spec ARGS((char *spec));
+static int scan_string ARGS((char *str));
+
+void
+scan_sty(VOID_ARG)
+{
+ char spec[STRING_MAX];
+ int tmp;
+
+ MESSAGE("Scanning style file %s", sty_fn);
+ while (scan_spec(spec)) {
+ sty_tc++;
+ put_dot = TRUE;
+
+ /* output pre- and post-ambles */
+ if (STREQ(spec, PREAMBLE)) {
+ (void) scan_string(preamble);
+ prelen = count_lfd(preamble);
+ } else if (STREQ(spec, POSTAMBLE)) {
+ (void) scan_string(postamble);
+ postlen = count_lfd(postamble);
+ } else if (STREQ(spec, GROUP_SKIP)) {
+ (void) scan_string(group_skip);
+ skiplen = count_lfd(group_skip);
+ } else if (STREQ(spec, HEADINGS_FLAG)) {
+ SCAN_NO(&headings_flag);
+ } else if (STREQ(spec, HEADING_PRE)) {
+ (void) scan_string(heading_pre);
+ headprelen = count_lfd(heading_pre);
+ } else if (STREQ(spec, HEADING_SUF)) {
+ (void) scan_string(heading_suf);
+ headsuflen = count_lfd(heading_suf);
+ } else if (STREQ(spec, SYMHEAD_POS)) {
+ (void) scan_string(symhead_pos);
+ } else if (STREQ(spec, SYMHEAD_NEG)) {
+ (void) scan_string(symhead_neg);
+ } else if (STREQ(spec, NUMHEAD_POS)) {
+ (void) scan_string(numhead_pos);
+ } else if (STREQ(spec, NUMHEAD_NEG)) {
+ (void) scan_string(numhead_neg);
+ } else if (STREQ(spec, SETPAGEOPEN)) {
+ (void) scan_string(setpage_open);
+ setpagelen = count_lfd(setpage_open);
+ } else if (STREQ(spec, SETPAGECLOSE)) {
+ (void) scan_string(setpage_close);
+ setpagelen = count_lfd(setpage_close);
+ /* output index item commands */
+ } else if (STREQ(spec, ITEM_0)) {
+ (void) scan_string(item_r[0]);
+ ilen_r[0] = count_lfd(item_r[0]);
+ } else if (STREQ(spec, ITEM_1)) {
+ (void) scan_string(item_r[1]);
+ ilen_r[1] = count_lfd(item_r[1]);
+ } else if (STREQ(spec, ITEM_2)) {
+ (void) scan_string(item_r[2]);
+ ilen_r[2] = count_lfd(item_r[2]);
+ } else if (STREQ(spec, ITEM_01)) {
+ (void) scan_string(item_u[1]);
+ ilen_u[1] = count_lfd(item_u[1]);
+ } else if (STREQ(spec, ITEM_12)) {
+ (void) scan_string(item_u[2]);
+ ilen_u[2] = count_lfd(item_u[2]);
+ } else if (STREQ(spec, ITEM_x1)) {
+ (void) scan_string(item_x[1]);
+ ilen_x[1] = count_lfd(item_x[1]);
+ } else if (STREQ(spec, ITEM_x2)) {
+ (void) scan_string(item_x[2]);
+ ilen_x[2] = count_lfd(item_x[2]);
+ /* output encapsulators */
+ } else if (STREQ(spec, ENCAP_0))
+ (void) scan_string(encap_p);
+ else if (STREQ(spec, ENCAP_1))
+ (void) scan_string(encap_i);
+ else if (STREQ(spec, ENCAP_2))
+ (void) scan_string(encap_s);
+ /* output delimiters */
+ else if (STREQ(spec, DELIM_0))
+ (void) scan_string(delim_p[0]);
+ else if (STREQ(spec, DELIM_1))
+ (void) scan_string(delim_p[1]);
+ else if (STREQ(spec, DELIM_2))
+ (void) scan_string(delim_p[2]);
+ else if (STREQ(spec, DELIM_N))
+ (void) scan_string(delim_n);
+ else if (STREQ(spec, DELIM_R))
+ (void) scan_string(delim_r);
+ else if (STREQ(spec, DELIM_T))
+ (void) scan_string(delim_t);
+ else if (STREQ(spec, SUFFIX_2P))
+ (void) scan_string(suffix_2p);
+ else if (STREQ(spec, SUFFIX_3P))
+ (void) scan_string(suffix_3p);
+ else if (STREQ(spec, SUFFIX_MP))
+ (void) scan_string(suffix_mp);
+ /* output line width */
+ else if (STREQ(spec, LINEMAX)) {
+ SCAN_NO(&tmp);
+ if (tmp > 0)
+ linemax = tmp;
+ else
+ STY_ERROR2("%s must be positive (got %d)",
+ LINEMAX, tmp);
+ /* output line indentation length */
+ } else if (STREQ(spec, INDENT_LENGTH)) {
+ SCAN_NO(&tmp);
+ if (tmp >= 0)
+ indent_length = tmp;
+ else
+ STY_ERROR2("%s must be nonnegative (got %d)",
+ INDENT_LENGTH, tmp);
+ /* output line indentation */
+ } else if (STREQ(spec, INDENT_SPACE)) {
+ (void) scan_string(indent_space);
+ /* composite page delimiter */
+ } else if (STREQ(spec, COMPOSITOR)) {
+ (void) scan_string(page_comp);
+ /* page precedence */
+ } else if (STREQ(spec, PRECEDENCE)) {
+ (void) scan_string(page_prec);
+ (void) process_precedence();
+ /* index input format */
+ } else if (STREQ(spec, KEYWORD))
+ (void) scan_string(idx_keyword);
+ else if (STREQ(spec, AOPEN))
+ (void) scan_char(&idx_aopen);
+ else if (STREQ(spec, ACLOSE))
+ (void) scan_char(&idx_aclose);
+ else if (STREQ(spec, LEVEL))
+ (void) scan_char(&idx_level);
+ else if (STREQ(spec, ROPEN))
+ (void) scan_char(&idx_ropen);
+ else if (STREQ(spec, RCLOSE))
+ (void) scan_char(&idx_rclose);
+ else if (STREQ(spec, QUOTE))
+ (void) scan_char(&idx_quote);
+ else if (STREQ(spec, ACTUAL))
+ (void) scan_char(&idx_actual);
+ else if (STREQ(spec, ENCAP))
+ (void) scan_char(&idx_encap);
+ else if (STREQ(spec, ESCAPE))
+ (void) scan_char(&idx_escape);
+ else {
+ (void) next_nonblank();
+ STY_SKIPLINE;
+ STY_ERROR("Unknown specifier %s.\n", spec);
+ put_dot = FALSE;
+ }
+ if (put_dot) {
+ STY_DOT;
+ }
+ }
+
+ /* check if quote and escape are distinct */
+ if (idx_quote == idx_escape) {
+ STY_ERROR(
+ "Quote and escape symbols must be distinct (both `%c' now).\n",
+ idx_quote);
+ idx_quote = IDX_QUOTE;
+ idx_escape = IDX_ESCAPE;
+ }
+ DONE(sty_tc - sty_ec, "attributes redefined", sty_ec, "ignored");
+ CLOSE(sty_fp);
+}
+
+static int
+#if STDC
+scan_spec(char spec[])
+#else
+scan_spec(spec)
+char spec[];
+#endif
+{
+ int i = 0;
+ int c;
+
+ while (TRUE)
+ if ((c = next_nonblank()) == -1)
+ return (FALSE);
+ else if (c == COMMENT) {
+ STY_SKIPLINE;
+ } else
+ break;
+
+ spec[0] = TOLOWER(c);
+ while ((i++ < STRING_MAX) && ((c = GET_CHAR(sty_fp)) != SPC) &&
+ (c != TAB) && (c != LFD) && (c != EOF))
+ spec[i] = TOLOWER(c);
+ if (i < STRING_MAX) {
+ spec[i] = NUL;
+ if (c == EOF) {
+ STY_ERROR(
+ "No attribute for specifier %s (premature EOF)\n",
+ spec);
+ return (-1);
+ }
+ if (c == LFD)
+ sty_lc++;
+ return (TRUE);
+ } else {
+ STY_ERROR2("Specifier %s too long (max %d).\n",
+ spec, STRING_MAX);
+ return (FALSE);
+ }
+}
+
+
+static int
+next_nonblank(VOID_ARG)
+{
+ int c;
+
+ while (TRUE) {
+ switch (c = GET_CHAR(sty_fp)) {
+ case EOF:
+ return (-1);
+
+ case LFD:
+ sty_lc++;
+ case SPC:
+ case TAB:
+ break;
+ default:
+ return (c);
+ }
+ }
+#if IBM_PC_TURBO
+ return (-1); /* not reached, but keeps compiler happy */
+#endif
+}
+
+
+static int
+#if STDC
+scan_string(char str[])
+#else
+scan_string(str)
+char str[];
+#endif
+{
+ char clone[ARRAY_MAX];
+ int i = 0;
+ int c;
+
+ switch (c = next_nonblank()) {
+ case STR_DELIM:
+ while (TRUE)
+ switch (c = GET_CHAR(sty_fp)) {
+ case EOF:
+ STY_ERROR("No closing delimiter in %s.\n",
+ clone);
+ return (FALSE);
+ case STR_DELIM:
+ clone[i] = NUL;
+ strcpy(str, clone);
+ return (TRUE);
+ case BSH:
+ switch (c = GET_CHAR(sty_fp)) {
+ case 't':
+ clone[i++] = TAB;
+ break;
+ case 'n':
+ clone[i++] = LFD;
+ break;
+
+ default:
+ clone[i++] = (char) c;
+ break;
+ }
+ break;
+ default:
+ if (c == LFD)
+ sty_lc++;
+ if (i < ARRAY_MAX)
+ clone[i++] = (char) c;
+ else {
+ STY_SKIPLINE;
+ STY_ERROR2(
+ "Attribute string %s too long (max %d).\n",
+ clone, ARRAY_MAX);
+ return (FALSE);
+ }
+ break;
+ }
+ break;
+ case COMMENT:
+ STY_SKIPLINE;
+ break;
+ default:
+ STY_SKIPLINE;
+ STY_ERROR("No opening delimiter.\n", "");
+ return (FALSE);
+ }
+ return (TRUE); /* function value no longer used */
+}
+
+
+static int
+#if STDC
+scan_char(char *c)
+#else
+scan_char(c)
+char *c;
+#endif
+{
+ int clone;
+
+ switch (clone = next_nonblank()) {
+ case CHR_DELIM:
+ switch (clone = GET_CHAR(sty_fp)) {
+ case CHR_DELIM:
+ STY_SKIPLINE;
+ STY_ERROR("Premature closing delimiter.\n", "");
+ return (FALSE);
+ case LFD:
+ sty_lc++;
+ case EOF:
+ STY_ERROR("No character (premature EOF).\n", "");
+ return (FALSE);
+ case BSH:
+ clone = GET_CHAR(sty_fp);
+ default:
+ if (GET_CHAR(sty_fp) == CHR_DELIM) {
+ *c = (char) clone;
+ return (TRUE);
+ } else {
+ STY_ERROR("No closing delimiter or too many letters.\n", "");
+ return (FALSE);
+ }
+ }
+ /* break; */ /* NOT REACHED */
+ case COMMENT:
+ STY_SKIPLINE;
+ break;
+ default:
+ STY_SKIPLINE;
+ STY_ERROR("No opening delimiter.\n", "");
+ return (FALSE);
+ }
+ return (TRUE); /* function value no longer used */
+}
+
+
+static int
+#if STDC
+count_lfd(char *str)
+#else
+count_lfd(str)
+char *str;
+#endif
+{
+ int i = 0;
+ int n = 0;
+
+ while (str[i] != NUL) {
+ if (str[i] == LFD)
+ n++;
+ i++;
+ }
+ return (n);
+}
+
+
+static int
+process_precedence(VOID_ARG)
+{
+ int order[PAGETYPE_MAX];
+ int type[PAGETYPE_MAX];
+ int i = 0;
+ int last;
+ int roml = FALSE;
+ int romu = FALSE;
+ int arab = FALSE;
+ int alpl = FALSE;
+ int alpu = FALSE;
+
+ /* check for llegal specifiers first */
+ while ((i < PAGETYPE_MAX) && (page_prec[i] != NUL)) {
+ switch (page_prec[i]) {
+ case ROMAN_LOWER:
+ if (roml) {
+ MULTIPLE(ROMAN_LOWER);
+ } else
+ roml = TRUE;
+ break;
+ case ROMAN_UPPER:
+ if (romu) {
+ MULTIPLE(ROMAN_UPPER);
+ } else
+ romu = TRUE;
+ break;
+ case ARABIC:
+ if (arab) {
+ MULTIPLE(ARABIC);
+ } else
+ arab = TRUE;
+ break;
+ case ALPHA_LOWER:
+ if (alpl) {
+ MULTIPLE(ALPHA_UPPER);
+ } else
+ alpl = TRUE;
+ break;
+ case ALPHA_UPPER:
+ if (alpu) {
+ MULTIPLE(ALPHA_UPPER);
+ } else
+ alpu = TRUE;
+ break;
+ default:
+ STY_SKIPLINE;
+ STY_ERROR("Unknow type `%c' in page precedence specification.\n",
+ page_prec[i]);
+ return (FALSE);
+ }
+ i++;
+ }
+ if (page_prec[i] != NUL) {
+ STY_SKIPLINE;
+ STY_ERROR("Page precedence specification string too long.\n", "");
+ return (FALSE);
+ }
+ last = i;
+ switch (page_prec[0]) {
+ case ROMAN_LOWER:
+ order[0] = ROMAN_LOWER_OFFSET;
+ type[0] = ROML;
+ break;
+ case ROMAN_UPPER:
+ order[0] = ROMAN_UPPER_OFFSET;
+ type[0] = ROMU;
+ break;
+ case ARABIC:
+ order[0] = ARABIC_OFFSET;
+ type[0] = ARAB;
+ break;
+ case ALPHA_LOWER:
+ order[0] = ALPHA_LOWER_OFFSET;
+ type[0] = ALPL;
+ break;
+ case ALPHA_UPPER:
+ order[0] = ALPHA_LOWER_OFFSET;
+ type[0] = ALPU;
+ break;
+ }
+
+ i = 1;
+ while (i < last) {
+ switch (page_prec[i]) {
+ case ROMAN_LOWER:
+ order[i] = order[i - 1] + ROMAN_LOWER_OFFSET;
+ type[i] = ROML;
+ break;
+ case ROMAN_UPPER:
+ order[i] = order[i - 1] + ROMAN_UPPER_OFFSET;
+ type[i] = ROMU;
+ break;
+ case ARABIC:
+ order[i] = order[i - 1] + ARABIC_OFFSET;
+ type[i] = ARAB;
+ break;
+ case ALPHA_LOWER:
+ order[i] = order[i - 1] + ALPHA_LOWER_OFFSET;
+ type[i] = ALPL;
+ break;
+ case ALPHA_UPPER:
+ order[i] = order[i - 1] + ALPHA_LOWER_OFFSET;
+ type[i] = ALPU;
+ break;
+ }
+ i++;
+ }
+
+ for (i = 0; i < PAGETYPE_MAX; i++) {
+ page_offset[i] = -1;
+ }
+ page_offset[type[0]] = 0;
+ for (i = 1; i < last; i++) {
+ page_offset[type[i]] = order[i - 1];
+ }
+ for (i = 0; i < PAGETYPE_MAX; i++) {
+ if (page_offset[i] == -1) {
+ switch (type[last - 1]) {
+ case ROML:
+ order[last] = order[last - 1] + ROMAN_LOWER_OFFSET;
+ break;
+ case ROMU:
+ order[last] = order[last - 1] + ROMAN_UPPER_OFFSET;
+ break;
+ case ARAB:
+ order[last] = order[last - 1] + ARABIC_OFFSET;
+ break;
+ case ALPL:
+ order[last] = order[last - 1] + ALPHA_LOWER_OFFSET;
+ break;
+ case ALPU:
+ order[last] = order[last - 1] + ALPHA_UPPER_OFFSET;
+ break;
+ }
+ type[last] = i;
+ page_offset[i] = order[last];
+ last++;
+ }
+ }
+ return (TRUE); /* function value no longer used */
+}
diff --git a/indexing/makeindex/src/scanst.h b/indexing/makeindex/src/scanst.h
new file mode 100644
index 0000000000..b766ed4c99
--- /dev/null
+++ b/indexing/makeindex/src/scanst.h
@@ -0,0 +1,232 @@
+/*
+ *
+ * This file is part of
+ * MakeIndex - A formatter and format independent index processor
+ *
+ * Copyright (C) 1989 by Chen & Harrison International Systems, Inc.
+ * Copyright (C) 1988 by Olivetti Research Center
+ * Copyright (C) 1987 by Regents of the University of California
+ *
+ * Author:
+ * Pehong Chen
+ * Chen & Harrison International Systems, Inc.
+ * Palo Alto, California
+ * USA
+ * (phc@renoir.berkeley.edu or chen@orc.olivetti.com)
+ *
+ * Contributors:
+ * Please refer to the CONTRIB file that comes with this release
+ * for a list of people who have contributed to this and/or previous
+ * release(s) of MakeIndex.
+ *
+ * All rights reserved by the copyright holders. See the copyright
+ * notice distributed with this software for a complete description of
+ * the conditions under which it is made available.
+ *
+ */
+
+#define COMMENT '%'
+#define STR_DELIM '"'
+#define CHR_DELIM '\''
+
+#define KEYWORD "keyword"
+#define AOPEN "arg_open"
+#define ACLOSE "arg_close"
+#define ROPEN "range_open"
+#define RCLOSE "range_close"
+#define LEVEL "level"
+#define QUOTE "quote"
+#define ACTUAL "actual"
+#define ENCAP "encap"
+#define ESCAPE "escape"
+
+#define IDX_KEYWORD "\\indexentry"
+#define IDX_AOPEN '{'
+#define IDX_ACLOSE '}'
+#define IDX_ROPEN '('
+#define IDX_RCLOSE ')'
+#define IDX_LEVEL '!'
+#define IDX_QUOTE '"'
+#define IDX_ACTUAL '@'
+#define IDX_ENCAP '|'
+#define IDX_ESCAPE '\\'
+
+#define COMPOSITOR "page_compositor"
+#define COMPOSITOR_DEF "-"
+#define PRECEDENCE "page_precedence"
+#define PRECEDENCE_DEF "rnaRA"
+#define ROMAN_LOWER 'r'
+#define ROMAN_UPPER 'R'
+#define ARABIC 'n'
+#define ALPHA_LOWER 'a'
+#define ALPHA_UPPER 'A'
+#define ROMAN_LOWER_OFFSET 10000
+#define ROMAN_UPPER_OFFSET 10000
+#define ARABIC_OFFSET 10000
+#define ALPHA_LOWER_OFFSET 26
+#define ALPHA_UPPER_OFFSET 26
+
+#define PREAMBLE "preamble"
+#define PREAMBLE_DEF "\\begin{theindex}\n"
+#define PREAMBLE_LEN 1
+#define POSTAMBLE "postamble"
+#define POSTAMBLE_DEF "\n\n\\end{theindex}\n"
+#define POSTAMBLE_LEN 3
+
+#define SETPAGEOPEN "setpage_prefix"
+#define SETPAGECLOSE "setpage_suffix"
+
+#if KCC_20
+/* KCC preprocessor bug collapses multiple blanks to single blank */
+#define SETPAGEOPEN_DEF "\n\040\040\\setcounter{page}{"
+#else
+#define SETPAGEOPEN_DEF "\n \\setcounter{page}{"
+#endif /* KCC_20 */
+
+#define SETPAGECLOSE_DEF "}\n"
+#define SETPAGE_LEN 2
+
+#define GROUP_SKIP "group_skip"
+#if KCC_20
+/* KCC preprocessor bug collapses multiple blanks to single blank */
+#define GROUPSKIP_DEF "\n\n\040\040\\indexspace\n"
+#else
+#define GROUPSKIP_DEF "\n\n \\indexspace\n"
+#endif /* KCC_20 */
+#define GROUPSKIP_LEN 3
+
+#define HEADINGS_FLAG "headings_flag"
+#define HEADINGSFLAG_DEF 0
+#define HEADING_PRE "heading_prefix"
+#define HEADINGPRE_DEF ""
+#define HEADINGPRE_LEN 0
+#define HEADING_SUF "heading_suffix"
+#define HEADINGSUF_DEF ""
+#define HEADINGSUF_LEN 0
+#define SYMHEAD_POS "symhead_positive"
+#define SYMHEADPOS_DEF "Symbols"
+#define SYMHEAD_NEG "symhead_negative"
+#define SYMHEADNEG_DEF "symbols"
+#define NUMHEAD_POS "numhead_positive"
+#define NUMHEADPOS_DEF "Numbers"
+#define NUMHEAD_NEG "numhead_negative"
+#define NUMHEADNEG_DEF "numbers"
+
+#define ITEM_0 "item_0"
+#define ITEM_1 "item_1"
+#define ITEM_2 "item_2"
+#define ITEM_01 "item_01"
+#define ITEM_x1 "item_x1"
+#define ITEM_12 "item_12"
+#define ITEM_x2 "item_x2"
+
+#if KCC_20
+/* KCC preprocessor bug collapses multiple blanks to single blank */
+#define ITEM0_DEF "\n\040\040\\item\040"
+#define ITEM1_DEF "\n\040\040\040\040\\subitem\040"
+#define ITEM2_DEF "\n\040\040\040\040\040\040\\subsubitem\040"
+#else
+#define ITEM0_DEF "\n \\item "
+#define ITEM1_DEF "\n \\subitem "
+#define ITEM2_DEF "\n \\subsubitem "
+#endif /* KCC_20 */
+
+#define ITEM_LEN 1
+
+#define DELIM_0 "delim_0"
+#define DELIM_1 "delim_1"
+#define DELIM_2 "delim_2"
+#define DELIM_N "delim_n"
+#define DELIM_R "delim_r"
+#define DELIM_T "delim_t"
+#define DELIM_DEF ", "
+#define DELIMR_DEF "--"
+#define DELIMT_DEF ""
+
+#define SUFFIX_2P "suffix_2p"
+#define SUFFIX_3P "suffix_3p"
+#define SUFFIX_MP "suffix_mp"
+
+#define ENCAP_0 "encap_prefix"
+#define ENCAP_1 "encap_infix"
+#define ENCAP_2 "encap_suffix"
+#define ENCAP0_DEF "\\"
+#define ENCAP1_DEF "{"
+#define ENCAP2_DEF "}"
+
+#define LINEMAX "line_max"
+#define INDENT_SPACE "indent_space"
+#define INDENT_LENGTH "indent_length"
+
+#if (OS_BS2000 | OS_MVSXA)
+#define INDENTSPC_DEF " "
+#else
+#define INDENTSPC_DEF "\t\t"
+#endif /* OS_BS2000 | OS_MVSXA */
+
+#define INDENTLEN_DEF 16
+
+#define STY_ERROR(F, D) { \
+ if (idx_dot) { \
+ fprintf(ilg_fp, "\n"); \
+ idx_dot = FALSE; \
+ } \
+ fprintf(ilg_fp, "** Input style error (file = %s, line = %d):\n -- ", \
+ sty_fn, sty_lc); \
+ fprintf(ilg_fp, F, D); \
+ sty_ec++; \
+ put_dot = FALSE; \
+}
+
+#if KCC_20
+/* KCC preprocessor bug collapses multiple blanks to single blank */
+#define STY_ERROR2(F, D1, D2) { \
+ if (idx_dot) { \
+ fprintf(ilg_fp, "\n"); \
+ idx_dot = FALSE; \
+ } \
+ fprintf(ilg_fp, \
+ "** Input style error (file = %s, line = %d):\n\040\040 -- ", \
+ sty_fn, sty_lc); \
+ fprintf(ilg_fp, F, D1, D2); \
+ sty_ec++; \
+ put_dot = FALSE; \
+}
+#else
+#define STY_ERROR2(F, D1, D2) { \
+ if (idx_dot) { \
+ fprintf(ilg_fp, "\n"); \
+ idx_dot = FALSE; \
+ } \
+ fprintf(ilg_fp, "** Input style error (file = %s, line = %d):\n -- ", \
+ sty_fn, sty_lc); \
+ fprintf(ilg_fp, F, D1, D2); \
+ sty_ec++; \
+ put_dot = FALSE; \
+}
+#endif /* KCC_20 */
+
+#define STY_DOT { \
+ idx_dot = TRUE; \
+ if (verbose) \
+ fprintf(stderr, DOT); \
+ fprintf(ilg_fp, DOT); \
+}
+
+#define STY_SKIPLINE { \
+ int a; \
+ while ( ((a = GET_CHAR(sty_fp)) != LFD) && (a != EOF) ); \
+ sty_lc++; \
+}
+
+#define SCAN_NO(N) { \
+ fscanf(sty_fp, "%d", N); \
+}
+
+#define MULTIPLE(C) { \
+ STY_SKIPLINE; \
+STY_ERROR2( \
+"Multiple instances of type `%c' in page precedence specification `%s'.\n", \
+C, page_prec); \
+ return (FALSE); \
+}
diff --git a/indexing/makeindex/src/sortid.c b/indexing/makeindex/src/sortid.c
new file mode 100644
index 0000000000..d1ca0ac9fc
--- /dev/null
+++ b/indexing/makeindex/src/sortid.c
@@ -0,0 +1,360 @@
+/*
+ *
+ * This file is part of
+ * MakeIndex - A formatter and format independent index processor
+ *
+ * Copyright (C) 1989 by Chen & Harrison International Systems, Inc.
+ * Copyright (C) 1988 by Olivetti Research Center
+ * Copyright (C) 1987 by Regents of the University of California
+ *
+ * Author:
+ * Pehong Chen
+ * Chen & Harrison International Systems, Inc.
+ * Palo Alto, California
+ * USA
+ * (phc@renoir.berkeley.edu or chen@orc.olivetti.com)
+ *
+ * Contributors:
+ * Please refer to the CONTRIB file that comes with this release
+ * for a list of people who have contributed to this and/or previous
+ * release(s) of MakeIndex.
+ *
+ * All rights reserved by the copyright holders. See the copyright
+ * notice distributed with this software for a complete description of
+ * the conditions under which it is made available.
+ *
+ */
+
+#include "mkind.h"
+
+static long idx_gc;
+
+static int check_mixsym ARGS((char *x,char *y));
+static int compare ARGS((struct KFIELD * *a,struct KFIELD * *b));
+static int compare_one ARGS((char *x,char *y));
+static int compare_page ARGS((struct KFIELD * *a,struct KFIELD * *b));
+static int compare_string ARGS((unsigned char *a,unsigned char *b));
+static int new_strcmp ARGS((unsigned char *a, unsigned char *b,
+ int option));
+
+void
+sort_idx(VOID_ARG)
+{
+ MESSAGE("Sorting entries...", "");
+ idx_dc = 0;
+ idx_gc = 0L;
+ qqsort((char *) idx_key, (int) idx_gt, (int) sizeof(FIELD_PTR),
+ (int (*) ARGS((char*,char*)))compare);
+ MESSAGE("done (%ld comparisons).\n", idx_gc);
+}
+
+static int
+#if STDC
+compare(FIELD_PTR *a, FIELD_PTR *b)
+#else
+compare(a, b)
+FIELD_PTR *a;
+FIELD_PTR *b;
+#endif
+{
+ int i;
+ int dif;
+
+ idx_gc++;
+ IDX_DOT(CMP_MAX);
+
+ for (i = 0; i < FIELD_MAX; i++) {
+ /* compare the sort fields */
+ if ((dif = compare_one((*a)->sf[i], (*b)->sf[i])) != 0)
+ break;
+
+ /* compare the actual fields */
+ if ((dif = compare_one((*a)->af[i], (*b)->af[i])) != 0)
+ break;
+ }
+
+ /* both key aggregates are identical, compare page numbers */
+ if (i == FIELD_MAX)
+ dif = compare_page(a, b);
+ return (dif);
+}
+
+static int
+#if STDC
+compare_one(char *x,char *y)
+#else
+compare_one(x, y)
+char *x;
+char *y;
+#endif
+{
+ int m;
+ int n;
+
+ if ((x[0] == NUL) && (y[0] == NUL))
+ return (0);
+
+ if (x[0] == NUL)
+ return (-1);
+
+ if (y[0] == NUL)
+ return (1);
+
+ m = group_type(x);
+ n = group_type(y);
+
+ /* both pure digits */
+ if ((m >= 0) && (n >= 0))
+ return (m - n);
+
+ /* x digit, y non-digit */
+ if (m >= 0) {
+ if (german_sort)
+ return (1);
+ else
+ return ((n == -1) ? 1 : -1);
+ }
+ /* x non-digit, y digit */
+ if (n >= 0) {
+ if (german_sort)
+ return (-1);
+ else
+ return ((m == -1) ? -1 : 1);
+ }
+ /* strings started with a symbol (including digit) */
+ if ((m == SYMBOL) && (n == SYMBOL))
+ return (check_mixsym(x, y));
+
+ /* x symbol, y non-symbol */
+ if (m == SYMBOL)
+ return (-1);
+
+ /* x non-symbol, y symbol */
+ if (n == SYMBOL)
+ return (1);
+
+ /* strings with a leading letter, the ALPHA type */
+ return (compare_string((unsigned char*)x, (unsigned char*)y));
+}
+
+static int
+#if STDC
+check_mixsym(char *x, char *y)
+#else
+check_mixsym(x, y)
+char *x;
+char *y;
+#endif
+{
+ int m;
+ int n;
+
+ m = ISDIGIT(x[0]);
+ n = ISDIGIT(y[0]);
+
+ if (m && !n)
+ return (1);
+
+ if (!m && n)
+ return (-1);
+
+ return (strcmp(x, y));
+}
+
+
+static int
+#if STDC
+compare_string(unsigned char *a, unsigned char *b)
+#else
+compare_string(a, b)
+unsigned char *a;
+unsigned char *b;
+#endif
+{
+ int i = 0;
+ int j = 0;
+ int al;
+ int bl;
+
+ while ((a[i] != NUL) || (b[j] != NUL)) {
+ if (a[i] == NUL)
+ return (-1);
+ if (b[j] == NUL)
+ return (1);
+ if (letter_ordering) {
+ if (a[i] == SPC)
+ i++;
+ if (b[j] == SPC)
+ j++;
+ }
+ al = TOLOWER(a[i]);
+ bl = TOLOWER(b[j]);
+
+ if (al != bl)
+ return (al - bl);
+ i++;
+ j++;
+ }
+ if (german_sort)
+ return (new_strcmp(a, b, GERMAN));
+#if (OS_BS2000 | OS_MVSXA) /* in EBCDIC 'a' is lower than 'A' */
+ else
+ return (new_strcmp(a, b, ASCII));
+#else
+ else
+ return (strcmp((char*)a, (char*)b));
+#endif /* (OS_BS2000 | OS_MVSXA) */
+}
+
+static int
+#if STDC
+compare_page(FIELD_PTR *a, FIELD_PTR *b)
+#else
+compare_page(a, b)
+FIELD_PTR *a;
+FIELD_PTR *b;
+#endif
+{
+ int m = 0;
+ short i = 0;
+
+ while ((i < (*a)->count) && (i < (*b)->count) &&
+ ((m = (*a)->npg[i] - (*b)->npg[i]) == 0))
+ {
+ i++;
+ }
+ if (m == 0)
+ { /* common leading page numbers match */
+ if ((i == (*a)->count) && (i == (*b)->count))
+ { /* all page numbers match */
+#if 0 /* Faulty code replaced at 2.11 */
+ /* identical entries, except possibly in encap fields */
+ if (STREQ((*a)->encap, (*b)->encap))
+ { /* encap fields identical */
+ if (((*a)->type != DUPLICATE) &&
+ ((*b)->type != DUPLICATE))
+ (*b)->type = DUPLICATE;
+
+ else if ((*(*a)->encap == idx_ropen) ||
+ (*(*b)->encap == idx_rclose))
+ m = -1;
+ else if ((*(*a)->encap == idx_rclose) ||
+ (*(*b)->encap == idx_ropen))
+ m = 1;
+ }
+ else /* encap fields differ */
+ {
+ if ((*(*a)->encap == idx_ropen) &&
+ (*(*b)->encap == idx_rclose))
+ m = -1;
+ else if ((*(*a)->encap == idx_rclose) &&
+ (*(*b)->encap == idx_ropen))
+ m = 1;
+ /* else leave m == 0 */
+ }
+#else /* new 2.11 code */
+ /***********************************************************
+ We have identical entries, except possibly in encap fields.
+ The ordering is tricky here. Consider the following input
+ sequence of index names, encaps, and page numbers:
+
+ foo|( 2
+ foo|) 6
+ foo|( 6
+ foo|) 10
+
+ This might legimately occur when a page range ends, and
+ subsequently, a new range starts, on the same page. If we
+ just order by range_open and range_close (here, parens),
+ then we will produce
+
+ foo|( 2
+ foo|( 6
+ foo|) 6
+ foo|) 10
+
+ This will later generate the index entry
+
+ foo, 2--6, \({6}, 10
+
+ which is not only wrong, but has also introduced an illegal
+ LaTeX macro, \({6}, because the merging step treated this
+ like a \see{6} entry.
+
+ The solution is to preserve the original input order, which
+ we can do by treating range_open and range_close as equal,
+ and then ordering by input line number. This will then
+ generate the correct index entry
+
+ foo, 2--10
+
+ Ordering inconsistencies from missing range open or close
+ entries, or mixing roman and arabic page numbers, will be
+ detected later.
+ ***********************************************************/
+
+#define isrange(c) ( ((c) == idx_ropen) || ((c) == idx_rclose) )
+
+ /* Order two range values by input line number */
+
+ if (isrange(*(*a)->encap) && isrange(*(*b)->encap))
+ m = (*a)->lc - (*b)->lc;
+
+ /* Handle identical encap fields; neither is a range delimiter */
+
+ else if (STREQ((*a)->encap, (*b)->encap))
+ {
+ /* If neither are yet marked duplicate, mark the second
+ of them to be ignored. */
+ if (((*a)->type != DUPLICATE) &&
+ ((*b)->type != DUPLICATE))
+ (*b)->type = DUPLICATE;
+ /* leave m == 0 to show equality */
+ }
+
+ /* Encap fields differ: only one may be a range delimiter, */
+ /* or else neither of them is. If either of them is a range */
+ /* delimiter, order by input line number; otherwise, order */
+ /* by name. */
+
+ else
+ {
+ if ( isrange(*(*a)->encap) || isrange(*(*b)->encap) )
+ m = (*a)->lc - (*b)->lc; /* order by input line number */
+ else /* order non-range items by */
+ /* their encap strings */
+ m = compare_string((unsigned char*)((*a)->encap),
+ (unsigned char*)((*b)->encap));
+ }
+#endif
+ }
+ else if ((i == (*a)->count) && (i < (*b)->count))
+ m = -1;
+ else if ((i < (*a)->count) && (i == (*b)->count))
+ m = 1;
+ }
+ return (m);
+}
+
+
+static int
+#if STDC
+new_strcmp(unsigned char *s1, unsigned char *s2, int option)
+#else
+new_strcmp(s1, s2, option)
+unsigned char *s1;
+unsigned char *s2;
+int option;
+#endif
+{
+ int i;
+
+ i = 0;
+ while (s1[i] == s2[i])
+ if (s1[i++] == NUL)
+ return (0);
+ if (option) /* ASCII */
+ return (isupper(s1[i]) ? -1 : 1);
+ else /* GERMAN */
+ return (isupper(s1[i]) ? 1 : -1);
+}
diff --git a/indexing/makeindex/test/Makefile b/indexing/makeindex/test/Makefile
new file mode 100644
index 0000000000..43f886dda5
--- /dev/null
+++ b/indexing/makeindex/test/Makefile
@@ -0,0 +1,81 @@
+# ======================================================================
+# This UNIX Makefile runs the makeindex in the src directory on several
+# test files, *.idx. The output from each file foo.* is compared with
+# correct output saved in files ok-foo.*. As new bugs are discovered
+# and fixed, test files that exhibit them should be incorporated in
+# this directory. Names should be kept within the 8+3 limit of PC DOS.
+# [11-Sep-1991]
+# ======================================================================
+
+FILES = b209a b209b b209c b209d b209e b209f \
+ b211a b211d b211e b211f b211g b211h \
+ book test tort
+
+# These files have private MakeIndex styles (*.ist) with the same base name
+# The German ones must be run with -g
+GERMAN-FILES = b211b
+
+STYLE-FILES = b210a b211c
+
+MAKEINDEX = ../src/makeindex
+
+RM = /bin/rm -f
+
+SHELL = /bin/sh
+
+all:
+ @echo "==================================================================="
+ @echo "If makeindex has compiled correctly, there should be no differences"
+ @echo "output by these tests, except possibly in the version lines"
+ @echo "in the *.ilg files."
+ @echo "==================================================================="
+ -for f in $(FILES);\
+ do\
+ echo "";\
+ echo "==================================================";\
+ echo "Test file = $$f";\
+ echo "";\
+ $(MAKEINDEX) $$f;\
+ echo Comparing ok-$$f.ind $$f.ind;\
+ diff ok-$$f.ind $$f.ind;\
+ echo Comparing ok-$$f.ilg $$f.ilg;\
+ diff ok-$$f.ilg $$f.ilg;\
+ done
+ @echo "==================================================================="
+ -for f in $(GERMAN-FILES);\
+ do\
+ echo "";\
+ echo "==================================================";\
+ echo "Test file = $$f (German sort option)";\
+ echo "";\
+ $(MAKEINDEX) -s $$f.ist -g $$f;\
+ echo Comparing ok-$$f.ind $$f.ind;\
+ diff ok-$$f.ind $$f.ind;\
+ echo Comparing ok-$$f.ilg $$f.ilg;\
+ diff ok-$$f.ilg $$f.ilg;\
+ done
+ @echo "==================================================================="
+ -for f in $(STYLE-FILES);\
+ do\
+ echo "";\
+ echo "==================================================";\
+ echo "Test file = $$f (Private style file)";\
+ echo "";\
+ $(MAKEINDEX) -s $$f.ist $$f;\
+ echo Comparing ok-$$f.ind $$f.ind;\
+ diff ok-$$f.ind $$f.ind;\
+ echo Comparing ok-$$f.ilg $$f.ilg;\
+ diff ok-$$f.ilg $$f.ilg;\
+ done
+ @echo "=================================================="
+
+clean mostlyclean:
+ $(RM) \#*
+ $(RM) *~
+ $(RM) core
+ -for f in $(FILES) $(GERMAN-FILES) $(STYLE-FILES);\
+ do\
+ $(RM) $$f.ind $$f.ilg;\
+ done
+
+clobber distclean realclean reallyclean: clean
diff --git a/indexing/makeindex/test/b209a.idx b/indexing/makeindex/test/b209a.idx
new file mode 100644
index 0000000000..9b11e9ba22
--- /dev/null
+++ b/indexing/makeindex/test/b209a.idx
@@ -0,0 +1,5 @@
+\indexentry{alignment@{\Ss alignment}|(bf}{215}
+\indexentry{alignment@{\Ss alignment}|)}{215}
+\indexentry{alignment@{\Ss alignment}}{216}
+\indexentry{alignment@{\Ss alignment}}{217}
+
diff --git a/indexing/makeindex/test/b209a.ilg b/indexing/makeindex/test/b209a.ilg
new file mode 100644
index 0000000000..b08b254f1e
--- /dev/null
+++ b/indexing/makeindex/test/b209a.ilg
@@ -0,0 +1,6 @@
+This is makeindx, portable version 2.12 [26-May-1993].
+Scanning input file b209a.idx....done (4 entries accepted, 0 rejected).
+Sorting entries....done (9 comparisons).
+Generating output file b209a.ind....done (5 lines written, 0 warnings).
+Output written in b209a.ind.
+Transcript written in b209a.ilg.
diff --git a/indexing/makeindex/test/b209a.ind b/indexing/makeindex/test/b209a.ind
new file mode 100644
index 0000000000..7c6952f575
--- /dev/null
+++ b/indexing/makeindex/test/b209a.ind
@@ -0,0 +1,5 @@
+\begin{theindex}
+
+ \item {\Ss alignment}, \bf{215}, 216, 217
+
+\end{theindex}
diff --git a/indexing/makeindex/test/b209b.idx b/indexing/makeindex/test/b209b.idx
new file mode 100644
index 0000000000..5dadc2bb8a
--- /dev/null
+++ b/indexing/makeindex/test/b209b.idx
@@ -0,0 +1,5 @@
+\indexentry{foo|(}{93}
+\indexentry{foo|)}{93}
+\indexentry{gnu}{111}
+\indexentry{bar|(}{193}
+\indexentry{bar|)}{194}
diff --git a/indexing/makeindex/test/b209b.ilg b/indexing/makeindex/test/b209b.ilg
new file mode 100644
index 0000000000..78b9830773
--- /dev/null
+++ b/indexing/makeindex/test/b209b.ilg
@@ -0,0 +1,6 @@
+This is makeindx, portable version 2.12 [26-May-1993].
+Scanning input file b209b.idx....done (5 entries accepted, 0 rejected).
+Sorting entries....done (15 comparisons).
+Generating output file b209b.ind....done (13 lines written, 0 warnings).
+Output written in b209b.ind.
+Transcript written in b209b.ilg.
diff --git a/indexing/makeindex/test/b209b.ind b/indexing/makeindex/test/b209b.ind
new file mode 100644
index 0000000000..5e9a273b10
--- /dev/null
+++ b/indexing/makeindex/test/b209b.ind
@@ -0,0 +1,13 @@
+\begin{theindex}
+
+ \item bar, 193--194
+
+ \indexspace
+
+ \item foo, 93
+
+ \indexspace
+
+ \item gnu, 111
+
+\end{theindex}
diff --git a/indexing/makeindex/test/b209c.idx b/indexing/makeindex/test/b209c.idx
new file mode 100644
index 0000000000..fdc9493bb8
--- /dev/null
+++ b/indexing/makeindex/test/b209c.idx
@@ -0,0 +1,5 @@
+\indexentry{gnu}{111}
+\indexentry{foo|(}{93}
+\indexentry{foo|)}{93}
+\indexentry{bar|(}{193}
+\indexentry{bar|)}{194}
diff --git a/indexing/makeindex/test/b209c.ilg b/indexing/makeindex/test/b209c.ilg
new file mode 100644
index 0000000000..df3f68c3a2
--- /dev/null
+++ b/indexing/makeindex/test/b209c.ilg
@@ -0,0 +1,6 @@
+This is makeindx, portable version 2.12 [26-May-1993].
+Scanning input file b209c.idx....done (5 entries accepted, 0 rejected).
+Sorting entries....done (12 comparisons).
+Generating output file b209c.ind....done (13 lines written, 0 warnings).
+Output written in b209c.ind.
+Transcript written in b209c.ilg.
diff --git a/indexing/makeindex/test/b209c.ind b/indexing/makeindex/test/b209c.ind
new file mode 100644
index 0000000000..5e9a273b10
--- /dev/null
+++ b/indexing/makeindex/test/b209c.ind
@@ -0,0 +1,13 @@
+\begin{theindex}
+
+ \item bar, 193--194
+
+ \indexspace
+
+ \item foo, 93
+
+ \indexspace
+
+ \item gnu, 111
+
+\end{theindex}
diff --git a/indexing/makeindex/test/b209d.idx b/indexing/makeindex/test/b209d.idx
new file mode 100644
index 0000000000..cd2f2c3bc7
--- /dev/null
+++ b/indexing/makeindex/test/b209d.idx
@@ -0,0 +1,5 @@
+\indexentry{Noll}{11}
+\indexentry{continuum mechanics}{11}
+\indexentry{Noll}{12}
+\indexentry{axiomatic method|(}{13}
+\indexentry{axiomatic method|)}{13}
diff --git a/indexing/makeindex/test/b209e.idx b/indexing/makeindex/test/b209e.idx
new file mode 100644
index 0000000000..b2add8d33f
--- /dev/null
+++ b/indexing/makeindex/test/b209e.idx
@@ -0,0 +1,85 @@
+\indexentry{abstract@{\Ss abstract}|(bf}{177}
+\indexentry{abstract@{\Ss abstract}|)}{177}
+\indexentry{abstract@{\Ss abstract}}{166}
+\indexentry{access rights@{\Ss access rights}|bf}{183}
+\indexentry{access rights@{\Ss access rights}}{166}
+\indexentry{access rights@{\Ss access rights}}{183}
+\indexentry{active position|bf}{198}
+\indexentry{additional information@{\Ss additional information}|bf}{185}
+\indexentry{additional information@{\Ss additional information}}{166}
+\indexentry{additional information@{\Ss additional information}}{184}
+\indexentry{aggregate@{\Ss aggregate}}{77}
+\indexentry{aggregate@{\Ss aggregate}}{78}
+\indexentry{aligned around|bf}{201}
+\indexentry{aligned-around@{\Ss aligned-around}}{216}
+\indexentry{aligned-around@{\Ss aligned-around}}{217}
+\indexentry{alignment string@{\Ss alignment string}}{216}
+\indexentry{alignment string@{\Ss alignment string}}{217}
+\indexentry{alignment@{\Ss alignment}|(bf}{215}
+\indexentry{alignment@{\Ss alignment}|)}{215}
+\indexentry{alignment@{\Ss alignment}}{111}
+\indexentry{alignment@{\Ss alignment}}{112}
+\indexentry{alignment@{\Ss alignment}}{113}
+\indexentry{alignment@{\Ss alignment}}{156}
+\indexentry{alignment@{\Ss alignment}}{207}
+\indexentry{alignment@{\Ss alignment}}{216}
+\indexentry{alignment@{\Ss alignment}}{217}
+\indexentry{alignment@{\Ss alignment}}{219}
+\indexentry{alignment@{\Ss alignment}}{227}
+\indexentry{alignment@{\Ss alignment}}{236}
+\indexentry{alignment@{\Ss alignment}}{240}
+\indexentry{alternative representation character sets@{\Ss alternative representation character sets}|(bf}{174}
+\indexentry{alternative representation character sets@{\Ss alternative representation character sets}|)}{174}
+\indexentry{alternative representation character sets@{\Ss alternative representation character sets}}{166}
+\indexentry{alternative representation character sets@{\Ss alternative representation character sets}}{173}
+\indexentry{alternative representation character sets@{\Ss alternative representation character sets}}{64}
+\indexentry{alternative representation character sets@{\Ss alternative representation character sets}}{93}
+\indexentry{alternative representation character sets@{\Ss alternative representation character sets}}{94}
+\indexentry{alternative representation character string@{\it alternative representation character string\/}}{94}
+\indexentry{alternative representation character string|bf}{64}
+\indexentry{alternative representation@{\Ss alternative representation}|(bf}{94}
+\indexentry{alternative representation@{\Ss alternative representation}|)}{94}
+\indexentry{alternative representation@{\Ss alternative representation}}{149}
+\indexentry{alternative representation@{\Ss alternative representation}}{150}
+\indexentry{alternative representation@{\Ss alternative representation}}{152}
+\indexentry{alternative representation@{\Ss alternative representation}}{174}
+\indexentry{alternative representation@{\Ss alternative representation}}{60}
+\indexentry{alternative representation@{\Ss alternative representation}}{61}
+\indexentry{alternative representation@{\Ss alternative representation}}{80}
+\indexentry{alternative representation@{\Ss alternative representation}}{92}
+\indexentry{alternative representation@{\Ss alternative representation}}{93}
+\indexentry{application comments@{\Ss application comments}|bf}{103}
+\indexentry{application comments@{\Ss application comments}}{102}
+\indexentry{application comments@{\Ss application comments}}{103}
+\indexentry{application comments@{\Ss application comments}}{137}
+\indexentry{application comments@{\Ss application comments}}{43}
+\indexentry{application comments@{\Ss application comments}}{44}
+\indexentry{application comments@{\Ss application comments}}{45}
+\indexentry{application comments@{\Ss application comments}}{46}
+\indexentry{application comments@{\Ss application comments}}{47}
+\indexentry{application comments@{\Ss application comments}}{48}
+\indexentry{application comments@{\Ss application comments}}{49}
+\indexentry{application comments@{\Ss application comments}}{50}
+\indexentry{application comments@{\Ss application comments}}{51}
+\indexentry{application comments@{\Ss application comments}}{53}
+\indexentry{application comments@{\Ss application comments}}{54}
+\indexentry{application comments@{\Ss application comments}}{55}
+\indexentry{application comments@{\Ss application comments}}{56}
+\indexentry{application comments@{\Ss application comments}}{57}
+\indexentry{application comments@{\Ss application comments}}{58}
+\indexentry{application comments@{\Ss application comments}}{59}
+\indexentry{application comments@{\Ss application comments}}{80}
+\indexentry{applies@{\Ss applies}}{113}
+\indexentry{applies@{\Ss applies}}{114}
+\indexentry{assured reproduction area}{161}
+\indexentry{atomic string expression@{\it atomic string expression\/}|bf}{69}
+\indexentry{atomic string expression|bf}{69}
+\indexentry{attribute|bf}{38}
+\indexentry{author's organization@{\Ss author's organization}}{180}
+\indexentry{authorization@{\Ss authorization}|bf}{181}
+\indexentry{authorization@{\Ss authorization}}{166}
+\indexentry{authorization@{\Ss authorization}}{179}
+\indexentry{authors@{\Ss authors}|bf}{180}
+\indexentry{authors@{\Ss authors}}{166}
+\indexentry{authors@{\Ss authors}}{179}
+\indexentry{authors@{\Ss authors}}{180}
diff --git a/indexing/makeindex/test/b209f.idx b/indexing/makeindex/test/b209f.idx
new file mode 100644
index 0000000000..a9a47a04e4
--- /dev/null
+++ b/indexing/makeindex/test/b209f.idx
@@ -0,0 +1,76 @@
+\indexentry{ADD-INTERVAL-CONSTRAINT|ITIDX}{5}
+\indexentry{ADD-INTERVAL-CONSTRAINT|ITIDX}{5}
+\indexentry{GET-INTERVAL-CONSTRAINT|ITIDX}{5}
+\indexentry{:FLOATS|ITIDX}{6}
+\indexentry{ADD-INTERVAL-CONSTRAINT|ITIDX}{7}
+\indexentry{ADD-INTERVAL-CONSTRAINT|ITIDX}{7}
+\indexentry{GET-INTERVAL-CONSTRAINT|ITIDX}{7}
+\indexentry{TIMELOGIC-BACKTRACK|ITIDX}{15}
+\indexentry{:AUTO-BACKTRACK|ITIDX}{16}
+\indexentry{:AUTO-BACKTRACK|ITIDX}{18}
+\indexentry{ADD-INTERVAL-CONSTRAINT|ITIDX}{18}
+\indexentry{TIMELOGIC-INIT@\CL {(TIMELOGIC-INIT)}}{18}
+\indexentry{TIMELOGIC-RESET-PROPS|ITIDX}{18}
+\indexentry{DEFINE-CONTEXT@\CL {(DEFINE-CONTEXT {\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss {\pem {}{\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss \&Optional}}\relax name parent\/}}}\relax )}}{18}
+\indexentry{DEFINED-CONTEXTS@\CL {(DEFINED-CONTEXTS)}}{18}
+\indexentry{CONTEXT-DEFINED-P@\CL {(CONTEXT-DEFINED-P {\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss {\pem {}name\/}}}\relax )}}{18}
+\indexentry{DELETE-CONTEXT@\CL {(DELETE-CONTEXT {\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss {\pem {}name\/}}}\relax )}}{18}
+\indexentry{SWITCH-CONTEXT@\CL {(SWITCH-CONTEXT {\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss {\pem {}name\/}}}\relax )}}{18}
+\indexentry{PUSH-CONTEXT@\CL {(PUSH-CONTEXT)}}{18}
+\indexentry{POP-CONTEXT@\CL {(POP-CONTEXT {\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss {\pem {}{\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss \&Optional}}\relax dont-delete-p\/}}}\relax )}}{18}
+\indexentry{CONTEXT-TREE@\CL {(CONTEXT-TREE {\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss {\pem {}{\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss \&Optional}}\relax {\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss ({\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss {\pem {}name\/}}}\relax T)}}\relax \/}}}\relax )}}{19}
+\indexentry{DEFINE-INTERVAL@\CL {(DEFINE-INTERVAL {\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss {\pem {}{\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss \&Optional}}\relax int ref {\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss \&Key}}\relax context\/}}}\relax )}}{19}
+\indexentry{:AUTO-REFERENCE|ITIDX}{19}
+\indexentry{INTERVAL-DEFINED-P@\CL {(INTERVAL-DEFINED-P {\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss {\pem {}int\/}}}\relax )}}{19}
+\indexentry{DEFINED-INTERVALS@\CL {(DEFINED-INTERVALS)}}{19}
+\indexentry{RELATED-INTERVALS@\CL {(RELATED-INTERVALS {\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss {\pem {}int {\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss \&Key}}\relax context type\/}}}\relax )}}{19}
+\indexentry{REFERENCE-INTERVALS@\CL {(REFERENCE-INTERVALS {\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss {\pem {}int {\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss \&Optional}}\relax inverse-p {\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss \&Key}}\relax context\/}}}\relax )}}{19}
+\indexentry{ADD-INTERVAL-CONSTRAINT@\CL {(ADD-INTERVAL-CONSTRAINT {\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss {\pem {}x constraint y {\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss \&Key}}\relax context {\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss ({\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss {\pem {}type\/}}}\relax :REL)}}\relax \/}}}\relax )}}{19}
+\indexentry{:AUTO-DEFINE|ITIDX}{19}
+\indexentry{:AUTO-BACKTRACK|ITIDX}{19}
+\indexentry{TIMELOGIC-BACKTRACK|ITIDX}{20}
+\indexentry{ADD-INTERVAL-CONSTRAINT|ITIDX}{20}
+\indexentry{GET-INTERVAL-CONSTRAINT@\CL {(GET-INTERVAL-CONSTRAINT {\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss {\pem {}x y {\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss \&Key}}\relax context {\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss ({\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss {\pem {}type\/}}}\relax :REL)}}\relax \/}}}\relax )}}{20}
+\indexentry{TEST-INTERVAL-CONSTRAINT@\CL {(TEST-INTERVAL-CONSTRAINT {\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss {\pem {}x constraint y {\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss \&Key}}\relax context {\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss ({\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss {\pem {}type\/}}}\relax :REL) ({\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss {\pem {}test\/}}}\relax :INTERSECT)}}\relax \/}}}\relax )}}{20}
+\indexentry{TIMELOGIC-BACKTRACK@\CL {(TIMELOGIC-BACKTRACK {\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss {\pem {}{\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss \&Optional}}\relax btpoint\/}}}\relax )}}{20}
+\indexentry{ADD-INTERVAL-CONSTRAINT|ITIDX}{20}
+\indexentry{TIMELOGIC-CHECKPOINT|ITIDX}{20}
+\indexentry{TIMELOGIC-CHECKPOINT@\CL {(TIMELOGIC-CHECKPOINT)}}{20}
+\indexentry{TIMELOGIC-CHECKPOINT-P@\CL {(TIMELOGIC-CHECKPOINT-P {\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss {\pem {}{\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss \&Optional}}\relax btpoint\/}}}\relax )}}{20}
+\indexentry{SHOW-INTERVAL-CONSTRAINTS@\CL {(SHOW-INTERVAL-CONSTRAINTS {\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss {\pem {}int {\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss \&Key}}\relax with-ints context {\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss ({\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss {\pem {}type\/}}}\relax :REL)}}\relax \/}}}\relax )}}{20}
+\indexentry{DISPLAY-INTERVALS@\CL {(DISPLAY-INTERVALS {\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss {\pem {}{\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss \&Key}}\relax ints context {\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss ({\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss {\pem {}clear\/}}}\relax T)}}\relax \/}}}\relax )}}{20}
+\indexentry{TRACE-INTERVAL|ITIDX}{20}
+\indexentry{GRAPH-INTERVALS@\CL {(GRAPH-INTERVALS {\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss {\pem {}{\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss \&Optional}}\relax ints\/}}}\relax )}}{21}
+\indexentry{TRACE-INTERVAL@\CL {(TRACE-INTERVAL {\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss {\pem {}int {\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss \&Optional}}\relax with-ints\/}}}\relax )}}{21}
+\indexentry{:TRACE|ITIDX}{21}
+\indexentry{UNTRACE-INTERVAL@\CL {(UNTRACE-INTERVAL {\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss {\pem {}{\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss \&Optional}}\relax int\/}}}\relax )}}{21}
+\indexentry{TRACE-INTERVAL|ITIDX}{21}
+\indexentry{TIMELOGIC-STATS@\CL {(TIMELOGIC-STATS)}}{21}
+\indexentry{:STATS|ITIDX}{21}
+\indexentry{:STATS|ITIDX}{21}
+\indexentry{TIMELOGIC-RESET-PROPS@\CL {(TIMELOGIC-RESET-PROPS {\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss {\pem {}{\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss \&Rest}}\relax keywords\/}}}\relax )}}{21}
+\indexentry{TIMELOGIC-PROP@\CL {(TIMELOGIC-PROP {\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss {\pem {}propname {\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss \&Optional}}\relax newpropvalue\/}}}\relax )}}{21}
+\indexentry{TIMELOGIC-INIT|ITIDX}{21}
+\indexentry{:ALL-PATHS@\CL {:ALL-PATHS}}{22}
+\indexentry{:AUTO-BACKTRACK@\CL {:AUTO-BACKTRACK}}{22}
+\indexentry{:AUTO-DEFINE@\CL {:AUTO-DEFINE}}{22}
+\indexentry{:AUTO-REFERENCE@\CL {:AUTO-REFERENCE}}{22}
+\indexentry{:DEPTH-FIRST@\CL {:DEPTH-FIRST}}{22}
+\indexentry{:DISPLAY@\CL {:DISPLAY}}{22}
+\indexentry{:TRACE|ITIDX}{22}
+\indexentry{:TRACE|ITIDX}{22}
+\indexentry{:TRACE|ITIDX}{22}
+\indexentry{:DURATIONS@\CL {:DURATIONS}}{22}
+\indexentry{:FLOATS@\CL {:FLOATS}}{22}
+\indexentry{:TOLERANCE|ITIDX}{22}
+\indexentry{:LEAVES-ONLY@\CL {:LEAVES-ONLY}}{23}
+\indexentry{:RELATIONS@\CL {:RELATIONS}}{23}
+\indexentry{:SORT@\CL {:SORT}}{23}
+\indexentry{:DISPLAY|ITIDX}{23}
+\indexentry{:STATS@\CL {:STATS}}{23}
+\indexentry{TIMELOGIC-PROP|ITIDX}{23}
+\indexentry{:TOLERANCE@\CL {:TOLERANCE}}{23}
+\indexentry{:FLOATS|ITIDX}{23}
+\indexentry{:TRACE@\CL {:TRACE}}{23}
+\indexentry{:WAIT@\CL {:WAIT}}{24}
+\indexentry{:DISPLAY|ITIDX}{24}
diff --git a/indexing/makeindex/test/b210a.idx b/indexing/makeindex/test/b210a.idx
new file mode 100644
index 0000000000..52a2376ec9
--- /dev/null
+++ b/indexing/makeindex/test/b210a.idx
@@ -0,0 +1,12 @@
+\indexentry{a}{1}
+\indexentry{a!ab}{2}
+\indexentry{a!ac}{3}
+\indexentry{a!ad}{4}
+\indexentry{a!ad!ae}{5}
+\indexentry{a!ad!af}{6}
+\indexentry{a!ad!ag}{7}
+\indexentry{b!bb}{1}
+\indexentry{b!bc}{2}
+\indexentry{b!bd!be}{3}
+\indexentry{b!bd!bf}{4}
+\indexentry{b!bd!bg}{5}
diff --git a/indexing/makeindex/test/b210a.ist b/indexing/makeindex/test/b210a.ist
new file mode 100644
index 0000000000..a3c7c19ccf
--- /dev/null
+++ b/indexing/makeindex/test/b210a.ist
@@ -0,0 +1,10 @@
+item_0 "\n 0\\item "
+item_1 "\n 1\\subitem "
+item_2 "\n 2\\subsubitem "
+item_01 "\n 01\\subitem "
+item_x1 "\n x1\\subitem "
+item_12 "\n 12\\subsubitem "
+item_x2 "\n x2\\subsubitem "
+delim_0 "-delim0-"
+delim_1 "-delim1-"
+delim_2 "-delim2-"
diff --git a/indexing/makeindex/test/b211a.idx b/indexing/makeindex/test/b211a.idx
new file mode 100644
index 0000000000..a46f2605bf
--- /dev/null
+++ b/indexing/makeindex/test/b211a.idx
@@ -0,0 +1,13 @@
+
+\indexentry{xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx}{256}
+\indexentry{yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy}{257}
+\indexentry{zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz}{1023}
+\indexentry{ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ}{1024}
+\indexentry{@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@}{1025}
+\indexentry{xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx@AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA}{1023}
+\indexentry{xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx|EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE}{1023}
+\indexentry{xyz|bold}{3}
+\indexentry{abc|italic}{3}
+\indexentry{bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb|BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB}{513}
+\indexentry{xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx|EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE}{1021}
+\indexentry{xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx|EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE}{1005}
diff --git a/indexing/makeindex/test/b211b.idx b/indexing/makeindex/test/b211b.idx
new file mode 100644
index 0000000000..b4c6022063
--- /dev/null
+++ b/indexing/makeindex/test/b211b.idx
@@ -0,0 +1,23 @@
+\indexentry{Gleitk"asten}{1}
+\indexentry{Gleitkaesten}{2}
+\indexentry{Gleitkasten}{3}
+\indexentry{l"a"st}{1}
+\indexentry{laesst}{2}
+\indexentry{Schriftgr"o"sen}{19}
+\indexentry{Schriftgroessen}{3}
+\indexentry{"asel}{1}
+\indexentry{aesel}{2}
+\indexentry{"Asel}{10}
+\indexentry{Aesel}{20}
+\indexentry{"ostrig}{3}
+\indexentry{oestrig}{4}
+\indexentry{"Ostrig}{30}
+\indexentry{Oestrig}{40}
+\indexentry{"uber}{5}
+\indexentry{ueber}{6}
+\indexentry{"Uber}{50}
+\indexentry{Ueber}{60}
+\indexentry{wa"ser}{7}
+\indexentry{wasser}{8}
+\indexentry{Wa"ser}{70}
+\indexentry{Wasser}{80}
diff --git a/indexing/makeindex/test/b211b.ist b/indexing/makeindex/test/b211b.ist
new file mode 100644
index 0000000000..3121d6a64d
--- /dev/null
+++ b/indexing/makeindex/test/b211b.ist
@@ -0,0 +1,2 @@
+quote '+'
+
diff --git a/indexing/makeindex/test/b211c.idx b/indexing/makeindex/test/b211c.idx
new file mode 100644
index 0000000000..52a2376ec9
--- /dev/null
+++ b/indexing/makeindex/test/b211c.idx
@@ -0,0 +1,12 @@
+\indexentry{a}{1}
+\indexentry{a!ab}{2}
+\indexentry{a!ac}{3}
+\indexentry{a!ad}{4}
+\indexentry{a!ad!ae}{5}
+\indexentry{a!ad!af}{6}
+\indexentry{a!ad!ag}{7}
+\indexentry{b!bb}{1}
+\indexentry{b!bc}{2}
+\indexentry{b!bd!be}{3}
+\indexentry{b!bd!bf}{4}
+\indexentry{b!bd!bg}{5}
diff --git a/indexing/makeindex/test/b211c.ist b/indexing/makeindex/test/b211c.ist
new file mode 100644
index 0000000000..a3c7c19ccf
--- /dev/null
+++ b/indexing/makeindex/test/b211c.ist
@@ -0,0 +1,10 @@
+item_0 "\n 0\\item "
+item_1 "\n 1\\subitem "
+item_2 "\n 2\\subsubitem "
+item_01 "\n 01\\subitem "
+item_x1 "\n x1\\subitem "
+item_12 "\n 12\\subsubitem "
+item_x2 "\n x2\\subsubitem "
+delim_0 "-delim0-"
+delim_1 "-delim1-"
+delim_2 "-delim2-"
diff --git a/indexing/makeindex/test/b211d.idx b/indexing/makeindex/test/b211d.idx
new file mode 100644
index 0000000000..d6fcd31f38
--- /dev/null
+++ b/indexing/makeindex/test/b211d.idx
@@ -0,0 +1,4 @@
+\indexentry{foo|(}{27}
+\indexentry{foo|)}{27}
+\indexentry{foo|(}{27}
+\indexentry{foo|)}{28}
diff --git a/indexing/makeindex/test/b211e.idx b/indexing/makeindex/test/b211e.idx
new file mode 100644
index 0000000000..d6a9c932aa
--- /dev/null
+++ b/indexing/makeindex/test/b211e.idx
@@ -0,0 +1,257 @@
+\indexentry{"@\char1 (character 1 (octal 1) (hex 1))}{1}
+\indexentry{"@\char2 (character 2 (octal 2) (hex 2))}{2}
+\indexentry{"@\char3 (character 3 (octal 3) (hex 3))}{3}
+\indexentry{"@\char4 (character 4 (octal 4) (hex 4))}{4}
+\indexentry{"@\char5 (character 5 (octal 5) (hex 5))}{5}
+\indexentry{"@\char6 (character 6 (octal 6) (hex 6))}{6}
+\indexentry{"@\char7 (character 7 (octal 7) (hex 7))}{7}
+\indexentry{"@\char8 (character 8 (octal 10) (hex 8))}{8}
+\indexentry{" @\char9 (character 9 (octal 11) (hex 9))}{9}
+\indexentry{"
+@\char10 (character 10 (octal 12) (hex a))}{10}
+\indexentry{" @\char11 (character 11 (octal 13) (hex b))}{11}
+\indexentry{" @\char12 (character 12 (octal 14) (hex c))}{12}
+\indexentry{" @\char13 (character 13 (octal 15) (hex d))}{13}
+\indexentry{"@\char14 (character 14 (octal 16) (hex e))}{14}
+\indexentry{"@\char15 (character 15 (octal 17) (hex f))}{15}
+\indexentry{"@\char16 (character 16 (octal 20) (hex 10))}{16}
+\indexentry{"@\char17 (character 17 (octal 21) (hex 11))}{17}
+\indexentry{"@\char18 (character 18 (octal 22) (hex 12))}{18}
+\indexentry{"@\char19 (character 19 (octal 23) (hex 13))}{19}
+\indexentry{"@\char20 (character 20 (octal 24) (hex 14))}{20}
+\indexentry{"@\char21 (character 21 (octal 25) (hex 15))}{21}
+\indexentry{"@\char22 (character 22 (octal 26) (hex 16))}{22}
+\indexentry{"@\char23 (character 23 (octal 27) (hex 17))}{23}
+\indexentry{"@\char24 (character 24 (octal 30) (hex 18))}{24}
+\indexentry{"@\char25 (character 25 (octal 31) (hex 19))}{25}
+\indexentry{"@\char26 (character 26 (octal 32) (hex 1a))}{26}
+\indexentry{"@\char27 (character 27 (octal 33) (hex 1b))}{27}
+\indexentry{"@\char28 (character 28 (octal 34) (hex 1c))}{28}
+\indexentry{"@\char29 (character 29 (octal 35) (hex 1d))}{29}
+\indexentry{"@\char30 (character 30 (octal 36) (hex 1e))}{30}
+\indexentry{"@\char31 (character 31 (octal 37) (hex 1f))}{31}
+\indexentry{" @" (space)}{32}
+\indexentry{"!@"! (exclamation point)}{33}
+\indexentry{""@"" (quotation mark))}{34}
+\indexentry{"#@"\# (sharp sign)}{35}
+\indexentry{"$@"\$ (dollar sign)}{36}
+\indexentry{"%@"\% (percent sign)}{37}
+\indexentry{"&@"\& (ampersand)}{38}
+\indexentry{"'@"' (apostrophe)}{39}
+\indexentry{"(@"( (left parenthesis)}{40}
+\indexentry{")@") (right parenthesis)}{41}
+\indexentry{"*@"* (asterisk)}{42}
+\indexentry{"+@"+ (plus)}{43}
+\indexentry{",@", (comma)}{44}
+\indexentry{"-@"- (minus)}{45}
+\indexentry{".@". (period)}{46}
+\indexentry{"/@"/ (slash)}{47}
+\indexentry{0@0}{48}
+\indexentry{1@1}{49}
+\indexentry{2@2}{50}
+\indexentry{3@3}{51}
+\indexentry{4@4}{52}
+\indexentry{5@5}{53}
+\indexentry{6@6}{54}
+\indexentry{7@7}{55}
+\indexentry{8@8}{56}
+\indexentry{9@9}{57}
+\indexentry{":@": (colon)}{58}
+\indexentry{";@"; (semicolon)}{59}
+\indexentry{"<@"$<$ (left angle bracket)}{60}
+\indexentry{"=@"= (equals)}{61}
+\indexentry{">@"$>$ (right angle bracket)}{62}
+\indexentry{"?@"? (query)}{63}
+\indexentry{"@@"@ (at sign)}{64}
+\indexentry{A@A}{65}
+\indexentry{B@B}{66}
+\indexentry{C@C}{67}
+\indexentry{D@D}{68}
+\indexentry{E@E}{69}
+\indexentry{F@F}{70}
+\indexentry{G@G}{71}
+\indexentry{H@H}{72}
+\indexentry{I@I}{73}
+\indexentry{J@J}{74}
+\indexentry{K@K}{75}
+\indexentry{L@L}{76}
+\indexentry{M@M}{77}
+\indexentry{N@N}{78}
+\indexentry{O@O}{79}
+\indexentry{P@P}{80}
+\indexentry{Q@Q}{81}
+\indexentry{R@R}{82}
+\indexentry{S@S}{83}
+\indexentry{T@T}{84}
+\indexentry{U@U}{85}
+\indexentry{V@V}{86}
+\indexentry{W@W}{87}
+\indexentry{X@X}{88}
+\indexentry{Y@Y}{89}
+\indexentry{Z@Z}{90}
+\indexentry{"[@"[ (left square bracket)}{91}
+\indexentry{"\@"\verb=\= (backslash)}{92}
+\indexentry{"]@"] (right square bracket)}{93}
+\indexentry{"^@"\verb=^= (caret)}{94}
+\indexentry{"_@"\verb=_= (underscore)}{95}
+\indexentry{"`@"\verb=~= (grave accent)}{96}
+\indexentry{a@a}{97}
+\indexentry{b@b}{98}
+\indexentry{c@c}{99}
+\indexentry{d@d}{100}
+\indexentry{e@e}{101}
+\indexentry{f@f}{102}
+\indexentry{g@g}{103}
+\indexentry{h@h}{104}
+\indexentry{i@i}{105}
+\indexentry{j@j}{106}
+\indexentry{k@k}{107}
+\indexentry{l@l}{108}
+\indexentry{m@m}{109}
+\indexentry{n@n}{110}
+\indexentry{o@o}{111}
+\indexentry{p@p}{112}
+\indexentry{q@q}{113}
+\indexentry{r@r}{114}
+\indexentry{s@s}{115}
+\indexentry{t@t}{116}
+\indexentry{u@u}{117}
+\indexentry{v@v}{118}
+\indexentry{w@w}{119}
+\indexentry{x@x}{120}
+\indexentry{y@y}{121}
+\indexentry{z@z}{122}
+\indexentry{"{@"\"{ (left brace)}{123}
+\indexentry{"|@"\verb="|= (vertical bar)}{124}
+\indexentry{"}@"\"} (right brace)}{125}
+\indexentry{"~@"\verb=~= (tilde)}{126}
+\indexentry{"@"\verb== (DELete)}{127}
+\indexentry{€@€ (character 128 (octal 200) (hex 80))}{128}
+\indexentry{@ (character 129 (octal 201) (hex 81))}{129}
+\indexentry{‚@‚ (character 130 (octal 202) (hex 82))}{130}
+\indexentry{ƒ@ƒ (character 131 (octal 203) (hex 83))}{131}
+\indexentry{„@„ (character 132 (octal 204) (hex 84))}{132}
+\indexentry{…@… (character 133 (octal 205) (hex 85))}{133}
+\indexentry{†@† (character 134 (octal 206) (hex 86))}{134}
+\indexentry{‡@‡ (character 135 (octal 207) (hex 87))}{135}
+\indexentry{ˆ@ˆ (character 136 (octal 210) (hex 88))}{136}
+\indexentry{‰@‰ (character 137 (octal 211) (hex 89))}{137}
+\indexentry{Š@Š (character 138 (octal 212) (hex 8a))}{138}
+\indexentry{‹@‹ (character 139 (octal 213) (hex 8b))}{139}
+\indexentry{Œ@Œ (character 140 (octal 214) (hex 8c))}{140}
+\indexentry{@ (character 141 (octal 215) (hex 8d))}{141}
+\indexentry{Ž@Ž (character 142 (octal 216) (hex 8e))}{142}
+\indexentry{@ (character 143 (octal 217) (hex 8f))}{143}
+\indexentry{@ (character 144 (octal 220) (hex 90))}{144}
+\indexentry{‘@‘ (character 145 (octal 221) (hex 91))}{145}
+\indexentry{’@’ (character 146 (octal 222) (hex 92))}{146}
+\indexentry{“@“ (character 147 (octal 223) (hex 93))}{147}
+\indexentry{”@” (character 148 (octal 224) (hex 94))}{148}
+\indexentry{•@• (character 149 (octal 225) (hex 95))}{149}
+\indexentry{–@– (character 150 (octal 226) (hex 96))}{150}
+\indexentry{—@— (character 151 (octal 227) (hex 97))}{151}
+\indexentry{˜@˜ (character 152 (octal 230) (hex 98))}{152}
+\indexentry{™@™ (character 153 (octal 231) (hex 99))}{153}
+\indexentry{š@š (character 154 (octal 232) (hex 9a))}{154}
+\indexentry{›@› (character 155 (octal 233) (hex 9b))}{155}
+\indexentry{œ@œ (character 156 (octal 234) (hex 9c))}{156}
+\indexentry{@ (character 157 (octal 235) (hex 9d))}{157}
+\indexentry{ž@ž (character 158 (octal 236) (hex 9e))}{158}
+\indexentry{Ÿ@Ÿ (character 159 (octal 237) (hex 9f))}{159}
+\indexentry{ @  (character 160 (octal 240) (hex a0))}{160}
+\indexentry{¡@¡ (character 161 (octal 241) (hex a1))}{161}
+\indexentry{¢@¢ (character 162 (octal 242) (hex a2))}{162}
+\indexentry{£@£ (character 163 (octal 243) (hex a3))}{163}
+\indexentry{¤@¤ (character 164 (octal 244) (hex a4))}{164}
+\indexentry{¥@¥ (character 165 (octal 245) (hex a5))}{165}
+\indexentry{¦@¦ (character 166 (octal 246) (hex a6))}{166}
+\indexentry{§@§ (character 167 (octal 247) (hex a7))}{167}
+\indexentry{¨@¨ (character 168 (octal 250) (hex a8))}{168}
+\indexentry{©@© (character 169 (octal 251) (hex a9))}{169}
+\indexentry{ª@ª (character 170 (octal 252) (hex aa))}{170}
+\indexentry{«@« (character 171 (octal 253) (hex ab))}{171}
+\indexentry{¬@¬ (character 172 (octal 254) (hex ac))}{172}
+\indexentry{­@­ (character 173 (octal 255) (hex ad))}{173}
+\indexentry{®@® (character 174 (octal 256) (hex ae))}{174}
+\indexentry{¯@¯ (character 175 (octal 257) (hex af))}{175}
+\indexentry{°@° (character 176 (octal 260) (hex b0))}{176}
+\indexentry{±@± (character 177 (octal 261) (hex b1))}{177}
+\indexentry{²@² (character 178 (octal 262) (hex b2))}{178}
+\indexentry{³@³ (character 179 (octal 263) (hex b3))}{179}
+\indexentry{´@´ (character 180 (octal 264) (hex b4))}{180}
+\indexentry{µ@µ (character 181 (octal 265) (hex b5))}{181}
+\indexentry{¶@¶ (character 182 (octal 266) (hex b6))}{182}
+\indexentry{·@· (character 183 (octal 267) (hex b7))}{183}
+\indexentry{¸@¸ (character 184 (octal 270) (hex b8))}{184}
+\indexentry{¹@¹ (character 185 (octal 271) (hex b9))}{185}
+\indexentry{º@º (character 186 (octal 272) (hex ba))}{186}
+\indexentry{»@» (character 187 (octal 273) (hex bb))}{187}
+\indexentry{¼@¼ (character 188 (octal 274) (hex bc))}{188}
+\indexentry{½@½ (character 189 (octal 275) (hex bd))}{189}
+\indexentry{¾@¾ (character 190 (octal 276) (hex be))}{190}
+\indexentry{¿@¿ (character 191 (octal 277) (hex bf))}{191}
+\indexentry{À@À (character 192 (octal 300) (hex c0))}{192}
+\indexentry{Á@Á (character 193 (octal 301) (hex c1))}{193}
+\indexentry{Â@Â (character 194 (octal 302) (hex c2))}{194}
+\indexentry{Ã@Ã (character 195 (octal 303) (hex c3))}{195}
+\indexentry{Ä@Ä (character 196 (octal 304) (hex c4))}{196}
+\indexentry{Å@Å (character 197 (octal 305) (hex c5))}{197}
+\indexentry{Æ@Æ (character 198 (octal 306) (hex c6))}{198}
+\indexentry{Ç@Ç (character 199 (octal 307) (hex c7))}{199}
+\indexentry{È@È (character 200 (octal 310) (hex c8))}{200}
+\indexentry{É@É (character 201 (octal 311) (hex c9))}{201}
+\indexentry{Ê@Ê (character 202 (octal 312) (hex ca))}{202}
+\indexentry{Ë@Ë (character 203 (octal 313) (hex cb))}{203}
+\indexentry{Ì@Ì (character 204 (octal 314) (hex cc))}{204}
+\indexentry{Í@Í (character 205 (octal 315) (hex cd))}{205}
+\indexentry{Î@Î (character 206 (octal 316) (hex ce))}{206}
+\indexentry{Ï@Ï (character 207 (octal 317) (hex cf))}{207}
+\indexentry{Ð@Ð (character 208 (octal 320) (hex d0))}{208}
+\indexentry{Ñ@Ñ (character 209 (octal 321) (hex d1))}{209}
+\indexentry{Ò@Ò (character 210 (octal 322) (hex d2))}{210}
+\indexentry{Ó@Ó (character 211 (octal 323) (hex d3))}{211}
+\indexentry{Ô@Ô (character 212 (octal 324) (hex d4))}{212}
+\indexentry{Õ@Õ (character 213 (octal 325) (hex d5))}{213}
+\indexentry{Ö@Ö (character 214 (octal 326) (hex d6))}{214}
+\indexentry{×@× (character 215 (octal 327) (hex d7))}{215}
+\indexentry{Ø@Ø (character 216 (octal 330) (hex d8))}{216}
+\indexentry{Ù@Ù (character 217 (octal 331) (hex d9))}{217}
+\indexentry{Ú@Ú (character 218 (octal 332) (hex da))}{218}
+\indexentry{Û@Û (character 219 (octal 333) (hex db))}{219}
+\indexentry{Ü@Ü (character 220 (octal 334) (hex dc))}{220}
+\indexentry{Ý@Ý (character 221 (octal 335) (hex dd))}{221}
+\indexentry{Þ@Þ (character 222 (octal 336) (hex de))}{222}
+\indexentry{ß@ß (character 223 (octal 337) (hex df))}{223}
+\indexentry{à@à (character 224 (octal 340) (hex e0))}{224}
+\indexentry{á@á (character 225 (octal 341) (hex e1))}{225}
+\indexentry{â@â (character 226 (octal 342) (hex e2))}{226}
+\indexentry{ã@ã (character 227 (octal 343) (hex e3))}{227}
+\indexentry{ä@ä (character 228 (octal 344) (hex e4))}{228}
+\indexentry{å@å (character 229 (octal 345) (hex e5))}{229}
+\indexentry{æ@æ (character 230 (octal 346) (hex e6))}{230}
+\indexentry{ç@ç (character 231 (octal 347) (hex e7))}{231}
+\indexentry{è@è (character 232 (octal 350) (hex e8))}{232}
+\indexentry{é@é (character 233 (octal 351) (hex e9))}{233}
+\indexentry{ê@ê (character 234 (octal 352) (hex ea))}{234}
+\indexentry{ë@ë (character 235 (octal 353) (hex eb))}{235}
+\indexentry{ì@ì (character 236 (octal 354) (hex ec))}{236}
+\indexentry{í@í (character 237 (octal 355) (hex ed))}{237}
+\indexentry{î@î (character 238 (octal 356) (hex ee))}{238}
+\indexentry{ï@ï (character 239 (octal 357) (hex ef))}{239}
+\indexentry{ð@ð (character 240 (octal 360) (hex f0))}{240}
+\indexentry{ñ@ñ (character 241 (octal 361) (hex f1))}{241}
+\indexentry{ò@ò (character 242 (octal 362) (hex f2))}{242}
+\indexentry{ó@ó (character 243 (octal 363) (hex f3))}{243}
+\indexentry{ô@ô (character 244 (octal 364) (hex f4))}{244}
+\indexentry{õ@õ (character 245 (octal 365) (hex f5))}{245}
+\indexentry{ö@ö (character 246 (octal 366) (hex f6))}{246}
+\indexentry{÷@÷ (character 247 (octal 367) (hex f7))}{247}
+\indexentry{ø@ø (character 248 (octal 370) (hex f8))}{248}
+\indexentry{ù@ù (character 249 (octal 371) (hex f9))}{249}
+\indexentry{ú@ú (character 250 (octal 372) (hex fa))}{250}
+\indexentry{û@û (character 251 (octal 373) (hex fb))}{251}
+\indexentry{ü@ü (character 252 (octal 374) (hex fc))}{252}
+\indexentry{ý@ý (character 253 (octal 375) (hex fd))}{253}
+\indexentry{þ@þ (character 254 (octal 376) (hex fe))}{254}
+\indexentry{ÿ@ÿ (character 255 (octal 377) (hex ff))}{255}
+
diff --git a/indexing/makeindex/test/b211e.ltx b/indexing/makeindex/test/b211e.ltx
new file mode 100644
index 0000000000..f274ad7078
--- /dev/null
+++ b/indexing/makeindex/test/b211e.ltx
@@ -0,0 +1,13 @@
+% -*-latex-*-
+% Document name: /u/beebe/tex/makeindex/2-11/makeindex/test/b211e.ltx
+% Creator: Nelson H. F. Beebe [beebe@rios.math.utah.edu]
+% Creation Date: Tue Aug 6 11:14:52 1991
+\documentstyle[makeidx]{article}
+\begin{document}
+\typeout{===============================================================}
+\typeout{=== LaTeX will complain that DELete entry (127) is invalid. ===}
+\typeout{=== Just type a RETurn to continue ===}
+\typeout{===============================================================}
+\hfuzz=10pt
+\printindex
+\end{document}
diff --git a/indexing/makeindex/test/b211f.idx b/indexing/makeindex/test/b211f.idx
new file mode 100644
index 0000000000..0b39a307a9
--- /dev/null
+++ b/indexing/makeindex/test/b211f.idx
@@ -0,0 +1,4 @@
+\indexentry{C++ language|(}{7-2}
+\indexentry{C++ language|)}{7-6}
+\indexentry{C++ language|(}{7-6}
+\indexentry{C++ language|)}{7-10}
diff --git a/indexing/makeindex/test/b211g.idx b/indexing/makeindex/test/b211g.idx
new file mode 100644
index 0000000000..bd812c4639
--- /dev/null
+++ b/indexing/makeindex/test/b211g.idx
@@ -0,0 +1,39 @@
+\indexentry{aa@{\it aa\/}!bb@{\it bb\/}!cc@{\it cc\/}}{1}
+\indexentry{alpha!beta!gamma}{10}
+\indexentry{alpha!beta}{3}
+\indexentry{alpha"@beta}{1}
+\indexentry{alpha"@beta}{1}
+\indexentry{alpha|(}{1}
+\indexentry{alpha|)}{5}
+\indexentry{alpha}{1}
+\indexentry{beta@{\it beta\/}}{1}
+\indexentry{beta|(bold}{1}
+\indexentry{beta|)}{5}
+\indexentry{delta|(}{i}
+\indexentry{delta|)}{7}
+\indexentry{delta|see{beta}}{1}
+\indexentry{delta}{3}
+\indexentry{delta}{iv}
+\indexentry{epsilon|(}{1}
+\indexentry{epsilon|)}{5}
+\indexentry{eta|(}{1}
+\indexentry{eta|)}{5}
+\indexentry{eta|bold}{3}
+\indexentry{f\"ur}{1}
+\indexentry{foo|bold}{5}
+\indexentry{foo|italic}{5}
+\indexentry{foo|roman}{5}
+\indexentry{foo|sanserif}{5}
+\indexentry{foo|slanted}{5}
+\indexentry{foo|smallcaps}{5}
+\indexentry{foo}{5}
+\indexentry{gamma|(}{1}
+\indexentry{gamma|)}{5}
+\indexentry{gamma|bold}{1}
+\indexentry{gamma|bold}{3}
+\indexentry{theta|(}{i}
+\indexentry{theta|)}{7}
+\indexentry{theta}{3}
+\indexentry{theta}{iv}
+\indexentry{zeta|(bold}{1}
+\indexentry{zeta|)}{5}
diff --git a/indexing/makeindex/test/b211h.idx b/indexing/makeindex/test/b211h.idx
new file mode 100644
index 0000000000..793437f25b
--- /dev/null
+++ b/indexing/makeindex/test/b211h.idx
@@ -0,0 +1,256 @@
+\indexentry{"@\char1 (character 1 (octal 1) (hex 1))}{1}
+\indexentry{"@\char2 (character 2 (octal 2) (hex 2))}{2}
+\indexentry{"@\char3 (character 3 (octal 3) (hex 3))}{3}
+\indexentry{"@\char4 (character 4 (octal 4) (hex 4))}{4}
+\indexentry{"@\char5 (character 5 (octal 5) (hex 5))}{5}
+\indexentry{"@\char6 (character 6 (octal 6) (hex 6))}{6}
+\indexentry{"@\char7 (character 7 (octal 7) (hex 7))}{7}
+\indexentry{"@\char8 (character 8 (octal 10) (hex 8))}{8}
+\indexentry{" @\char9 (character 9 (octal 11) (hex 9))}{9}
+\indexentry{"
+@\char10 (character 10 (octal 12) (hex a))}{10}
+\indexentry{" @\char11 (character 11 (octal 13) (hex b))}{11}
+\indexentry{" @\char12 (character 12 (octal 14) (hex c))}{12}
+\indexentry{" @\char13 (character 13 (octal 15) (hex d))}{13}
+\indexentry{"@\char14 (character 14 (octal 16) (hex e))}{14}
+\indexentry{"@\char15 (character 15 (octal 17) (hex f))}{15}
+\indexentry{"@\char16 (character 16 (octal 20) (hex 10))}{16}
+\indexentry{"@\char17 (character 17 (octal 21) (hex 11))}{17}
+\indexentry{"@\char18 (character 18 (octal 22) (hex 12))}{18}
+\indexentry{"@\char19 (character 19 (octal 23) (hex 13))}{19}
+\indexentry{"@\char20 (character 20 (octal 24) (hex 14))}{20}
+\indexentry{"@\char21 (character 21 (octal 25) (hex 15))}{21}
+\indexentry{"@\char22 (character 22 (octal 26) (hex 16))}{22}
+\indexentry{"@\char23 (character 23 (octal 27) (hex 17))}{23}
+\indexentry{"@\char24 (character 24 (octal 30) (hex 18))}{24}
+\indexentry{"@\char25 (character 25 (octal 31) (hex 19))}{25}
+
+\indexentry{"@\char27 (character 27 (octal 33) (hex 1b))}{27}
+\indexentry{"@\char28 (character 28 (octal 34) (hex 1c))}{28}
+\indexentry{"@\char29 (character 29 (octal 35) (hex 1d))}{29}
+\indexentry{"@\char30 (character 30 (octal 36) (hex 1e))}{30}
+\indexentry{"@\char31 (character 31 (octal 37) (hex 1f))}{31}
+\indexentry{" @" (space)}{32}
+\indexentry{"!@"! (exclamation point)}{33}
+\indexentry{""@"" (quotation mark))}{34}
+\indexentry{"#@"\# (sharp sign)}{35}
+\indexentry{"$@"\$ (dollar sign)}{36}
+\indexentry{"%@"\% (percent sign)}{37}
+\indexentry{"&@"\& (ampersand)}{38}
+\indexentry{"'@"' (apostrophe)}{39}
+\indexentry{"(@"( (left parenthesis)}{40}
+\indexentry{")@") (right parenthesis)}{41}
+\indexentry{"*@"* (asterisk)}{42}
+\indexentry{"+@"+ (plus)}{43}
+\indexentry{",@", (comma)}{44}
+\indexentry{"-@"- (minus)}{45}
+\indexentry{".@". (period)}{46}
+\indexentry{"/@"/ (slash)}{47}
+\indexentry{0@0}{48}
+\indexentry{1@1}{49}
+\indexentry{2@2}{50}
+\indexentry{3@3}{51}
+\indexentry{4@4}{52}
+\indexentry{5@5}{53}
+\indexentry{6@6}{54}
+\indexentry{7@7}{55}
+\indexentry{8@8}{56}
+\indexentry{9@9}{57}
+\indexentry{":@": (colon)}{58}
+\indexentry{";@"; (semicolon)}{59}
+\indexentry{"<@"$<$ (left angle bracket)}{60}
+\indexentry{"=@"= (equals)}{61}
+\indexentry{">@"$>$ (right angle bracket)}{62}
+\indexentry{"?@"? (query)}{63}
+\indexentry{"@@"@ (at sign)}{64}
+\indexentry{A@A}{65}
+\indexentry{B@B}{66}
+\indexentry{C@C}{67}
+\indexentry{D@D}{68}
+\indexentry{E@E}{69}
+\indexentry{F@F}{70}
+\indexentry{G@G}{71}
+\indexentry{H@H}{72}
+\indexentry{I@I}{73}
+\indexentry{J@J}{74}
+\indexentry{K@K}{75}
+\indexentry{L@L}{76}
+\indexentry{M@M}{77}
+\indexentry{N@N}{78}
+\indexentry{O@O}{79}
+\indexentry{P@P}{80}
+\indexentry{Q@Q}{81}
+\indexentry{R@R}{82}
+\indexentry{S@S}{83}
+\indexentry{T@T}{84}
+\indexentry{U@U}{85}
+\indexentry{V@V}{86}
+\indexentry{W@W}{87}
+\indexentry{X@X}{88}
+\indexentry{Y@Y}{89}
+\indexentry{Z@Z}{90}
+\indexentry{"[@"[ (left square bracket)}{91}
+\indexentry{"\@"\verb=\= (backslash)}{92}
+\indexentry{"]@"] (right square bracket)}{93}
+\indexentry{"^@"\verb=^= (caret)}{94}
+\indexentry{"_@"\verb=_= (underscore)}{95}
+\indexentry{"`@"\verb=~= (grave accent)}{96}
+\indexentry{a@a}{97}
+\indexentry{b@b}{98}
+\indexentry{c@c}{99}
+\indexentry{d@d}{100}
+\indexentry{e@e}{101}
+\indexentry{f@f}{102}
+\indexentry{g@g}{103}
+\indexentry{h@h}{104}
+\indexentry{i@i}{105}
+\indexentry{j@j}{106}
+\indexentry{k@k}{107}
+\indexentry{l@l}{108}
+\indexentry{m@m}{109}
+\indexentry{n@n}{110}
+\indexentry{o@o}{111}
+\indexentry{p@p}{112}
+\indexentry{q@q}{113}
+\indexentry{r@r}{114}
+\indexentry{s@s}{115}
+\indexentry{t@t}{116}
+\indexentry{u@u}{117}
+\indexentry{v@v}{118}
+\indexentry{w@w}{119}
+\indexentry{x@x}{120}
+\indexentry{y@y}{121}
+\indexentry{z@z}{122}
+\indexentry{"{@"\"{ (left brace)}{123}
+\indexentry{"|@"\verb="|= (vertical bar)}{124}
+\indexentry{"}@"\"} (right brace)}{125}
+\indexentry{"~@"\verb=~= (tilde)}{126}
+\indexentry{"@"\verb== (DELete)}{127}
+\indexentry{€@€ (character 128 (octal 200) (hex 80))}{128}
+\indexentry{@ (character 129 (octal 201) (hex 81))}{129}
+\indexentry{‚@‚ (character 130 (octal 202) (hex 82))}{130}
+\indexentry{ƒ@ƒ (character 131 (octal 203) (hex 83))}{131}
+\indexentry{„@„ (character 132 (octal 204) (hex 84))}{132}
+\indexentry{…@… (character 133 (octal 205) (hex 85))}{133}
+\indexentry{†@† (character 134 (octal 206) (hex 86))}{134}
+\indexentry{‡@‡ (character 135 (octal 207) (hex 87))}{135}
+\indexentry{ˆ@ˆ (character 136 (octal 210) (hex 88))}{136}
+\indexentry{‰@‰ (character 137 (octal 211) (hex 89))}{137}
+\indexentry{Š@Š (character 138 (octal 212) (hex 8a))}{138}
+\indexentry{‹@‹ (character 139 (octal 213) (hex 8b))}{139}
+\indexentry{Œ@Œ (character 140 (octal 214) (hex 8c))}{140}
+\indexentry{@ (character 141 (octal 215) (hex 8d))}{141}
+\indexentry{Ž@Ž (character 142 (octal 216) (hex 8e))}{142}
+\indexentry{@ (character 143 (octal 217) (hex 8f))}{143}
+\indexentry{@ (character 144 (octal 220) (hex 90))}{144}
+\indexentry{‘@‘ (character 145 (octal 221) (hex 91))}{145}
+\indexentry{’@’ (character 146 (octal 222) (hex 92))}{146}
+\indexentry{“@“ (character 147 (octal 223) (hex 93))}{147}
+\indexentry{”@” (character 148 (octal 224) (hex 94))}{148}
+\indexentry{•@• (character 149 (octal 225) (hex 95))}{149}
+\indexentry{–@– (character 150 (octal 226) (hex 96))}{150}
+\indexentry{—@— (character 151 (octal 227) (hex 97))}{151}
+\indexentry{˜@˜ (character 152 (octal 230) (hex 98))}{152}
+\indexentry{™@™ (character 153 (octal 231) (hex 99))}{153}
+\indexentry{š@š (character 154 (octal 232) (hex 9a))}{154}
+\indexentry{›@› (character 155 (octal 233) (hex 9b))}{155}
+\indexentry{œ@œ (character 156 (octal 234) (hex 9c))}{156}
+\indexentry{@ (character 157 (octal 235) (hex 9d))}{157}
+\indexentry{ž@ž (character 158 (octal 236) (hex 9e))}{158}
+\indexentry{Ÿ@Ÿ (character 159 (octal 237) (hex 9f))}{159}
+\indexentry{ @  (character 160 (octal 240) (hex a0))}{160}
+\indexentry{¡@¡ (character 161 (octal 241) (hex a1))}{161}
+\indexentry{¢@¢ (character 162 (octal 242) (hex a2))}{162}
+\indexentry{£@£ (character 163 (octal 243) (hex a3))}{163}
+\indexentry{¤@¤ (character 164 (octal 244) (hex a4))}{164}
+\indexentry{¥@¥ (character 165 (octal 245) (hex a5))}{165}
+\indexentry{¦@¦ (character 166 (octal 246) (hex a6))}{166}
+\indexentry{§@§ (character 167 (octal 247) (hex a7))}{167}
+\indexentry{¨@¨ (character 168 (octal 250) (hex a8))}{168}
+\indexentry{©@© (character 169 (octal 251) (hex a9))}{169}
+\indexentry{ª@ª (character 170 (octal 252) (hex aa))}{170}
+\indexentry{«@« (character 171 (octal 253) (hex ab))}{171}
+\indexentry{¬@¬ (character 172 (octal 254) (hex ac))}{172}
+\indexentry{­@­ (character 173 (octal 255) (hex ad))}{173}
+\indexentry{®@® (character 174 (octal 256) (hex ae))}{174}
+\indexentry{¯@¯ (character 175 (octal 257) (hex af))}{175}
+\indexentry{°@° (character 176 (octal 260) (hex b0))}{176}
+\indexentry{±@± (character 177 (octal 261) (hex b1))}{177}
+\indexentry{²@² (character 178 (octal 262) (hex b2))}{178}
+\indexentry{³@³ (character 179 (octal 263) (hex b3))}{179}
+\indexentry{´@´ (character 180 (octal 264) (hex b4))}{180}
+\indexentry{µ@µ (character 181 (octal 265) (hex b5))}{181}
+\indexentry{¶@¶ (character 182 (octal 266) (hex b6))}{182}
+\indexentry{·@· (character 183 (octal 267) (hex b7))}{183}
+\indexentry{¸@¸ (character 184 (octal 270) (hex b8))}{184}
+\indexentry{¹@¹ (character 185 (octal 271) (hex b9))}{185}
+\indexentry{º@º (character 186 (octal 272) (hex ba))}{186}
+\indexentry{»@» (character 187 (octal 273) (hex bb))}{187}
+\indexentry{¼@¼ (character 188 (octal 274) (hex bc))}{188}
+\indexentry{½@½ (character 189 (octal 275) (hex bd))}{189}
+\indexentry{¾@¾ (character 190 (octal 276) (hex be))}{190}
+\indexentry{¿@¿ (character 191 (octal 277) (hex bf))}{191}
+\indexentry{À@À (character 192 (octal 300) (hex c0))}{192}
+\indexentry{Á@Á (character 193 (octal 301) (hex c1))}{193}
+\indexentry{Â@Â (character 194 (octal 302) (hex c2))}{194}
+\indexentry{Ã@Ã (character 195 (octal 303) (hex c3))}{195}
+\indexentry{Ä@Ä (character 196 (octal 304) (hex c4))}{196}
+\indexentry{Å@Å (character 197 (octal 305) (hex c5))}{197}
+\indexentry{Æ@Æ (character 198 (octal 306) (hex c6))}{198}
+\indexentry{Ç@Ç (character 199 (octal 307) (hex c7))}{199}
+\indexentry{È@È (character 200 (octal 310) (hex c8))}{200}
+\indexentry{É@É (character 201 (octal 311) (hex c9))}{201}
+\indexentry{Ê@Ê (character 202 (octal 312) (hex ca))}{202}
+\indexentry{Ë@Ë (character 203 (octal 313) (hex cb))}{203}
+\indexentry{Ì@Ì (character 204 (octal 314) (hex cc))}{204}
+\indexentry{Í@Í (character 205 (octal 315) (hex cd))}{205}
+\indexentry{Î@Î (character 206 (octal 316) (hex ce))}{206}
+\indexentry{Ï@Ï (character 207 (octal 317) (hex cf))}{207}
+\indexentry{Ð@Ð (character 208 (octal 320) (hex d0))}{208}
+\indexentry{Ñ@Ñ (character 209 (octal 321) (hex d1))}{209}
+\indexentry{Ò@Ò (character 210 (octal 322) (hex d2))}{210}
+\indexentry{Ó@Ó (character 211 (octal 323) (hex d3))}{211}
+\indexentry{Ô@Ô (character 212 (octal 324) (hex d4))}{212}
+\indexentry{Õ@Õ (character 213 (octal 325) (hex d5))}{213}
+\indexentry{Ö@Ö (character 214 (octal 326) (hex d6))}{214}
+\indexentry{×@× (character 215 (octal 327) (hex d7))}{215}
+\indexentry{Ø@Ø (character 216 (octal 330) (hex d8))}{216}
+\indexentry{Ù@Ù (character 217 (octal 331) (hex d9))}{217}
+\indexentry{Ú@Ú (character 218 (octal 332) (hex da))}{218}
+\indexentry{Û@Û (character 219 (octal 333) (hex db))}{219}
+\indexentry{Ü@Ü (character 220 (octal 334) (hex dc))}{220}
+\indexentry{Ý@Ý (character 221 (octal 335) (hex dd))}{221}
+\indexentry{Þ@Þ (character 222 (octal 336) (hex de))}{222}
+\indexentry{ß@ß (character 223 (octal 337) (hex df))}{223}
+\indexentry{à@à (character 224 (octal 340) (hex e0))}{224}
+\indexentry{á@á (character 225 (octal 341) (hex e1))}{225}
+\indexentry{â@â (character 226 (octal 342) (hex e2))}{226}
+\indexentry{ã@ã (character 227 (octal 343) (hex e3))}{227}
+\indexentry{ä@ä (character 228 (octal 344) (hex e4))}{228}
+\indexentry{å@å (character 229 (octal 345) (hex e5))}{229}
+\indexentry{æ@æ (character 230 (octal 346) (hex e6))}{230}
+\indexentry{ç@ç (character 231 (octal 347) (hex e7))}{231}
+\indexentry{è@è (character 232 (octal 350) (hex e8))}{232}
+\indexentry{é@é (character 233 (octal 351) (hex e9))}{233}
+\indexentry{ê@ê (character 234 (octal 352) (hex ea))}{234}
+\indexentry{ë@ë (character 235 (octal 353) (hex eb))}{235}
+\indexentry{ì@ì (character 236 (octal 354) (hex ec))}{236}
+\indexentry{í@í (character 237 (octal 355) (hex ed))}{237}
+\indexentry{î@î (character 238 (octal 356) (hex ee))}{238}
+\indexentry{ï@ï (character 239 (octal 357) (hex ef))}{239}
+\indexentry{ð@ð (character 240 (octal 360) (hex f0))}{240}
+\indexentry{ñ@ñ (character 241 (octal 361) (hex f1))}{241}
+\indexentry{ò@ò (character 242 (octal 362) (hex f2))}{242}
+\indexentry{ó@ó (character 243 (octal 363) (hex f3))}{243}
+\indexentry{ô@ô (character 244 (octal 364) (hex f4))}{244}
+\indexentry{õ@õ (character 245 (octal 365) (hex f5))}{245}
+\indexentry{ö@ö (character 246 (octal 366) (hex f6))}{246}
+\indexentry{÷@÷ (character 247 (octal 367) (hex f7))}{247}
+\indexentry{ø@ø (character 248 (octal 370) (hex f8))}{248}
+\indexentry{ù@ù (character 249 (octal 371) (hex f9))}{249}
+\indexentry{ú@ú (character 250 (octal 372) (hex fa))}{250}
+\indexentry{û@û (character 251 (octal 373) (hex fb))}{251}
+\indexentry{ü@ü (character 252 (octal 374) (hex fc))}{252}
+\indexentry{ý@ý (character 253 (octal 375) (hex fd))}{253}
+\indexentry{þ@þ (character 254 (octal 376) (hex fe))}{254}
+\indexentry{ÿ@ÿ (character 255 (octal 377) (hex ff))}{255}
diff --git a/indexing/makeindex/test/b211h.ltx b/indexing/makeindex/test/b211h.ltx
new file mode 100644
index 0000000000..77607a5c3c
--- /dev/null
+++ b/indexing/makeindex/test/b211h.ltx
@@ -0,0 +1,13 @@
+% -*-latex-*-
+% Document name: /u/beebe/tex/makeindex/2-11/makeindex/test/b211h.ltx
+% Creator: Nelson H. F. Beebe [beebe@rios.math.utah.edu]
+% Creation Date: Tue Aug 6 11:14:52 1991
+\documentstyle[makeidx]{article}
+\begin{document}
+\typeout{===============================================================}
+\typeout{=== LaTeX will complain that DELete entry (127) is invalid. ===}
+\typeout{=== Just type a RETurn to continue ===}
+\typeout{===============================================================}
+\hfuzz=10pt
+\printindex
+\end{document}
diff --git a/indexing/makeindex/test/book.idx b/indexing/makeindex/test/book.idx
new file mode 100644
index 0000000000..dd362cece3
--- /dev/null
+++ b/indexing/makeindex/test/book.idx
@@ -0,0 +1,4241 @@
+\indexentry{Ada}{i}
+\indexentry{Department of Defense}{i}
+\indexentry{Sun Microsystems Inc.}{i}
+\indexentry{Bell Laboratories}{i}
+\indexentry{Moto-Oka, Tohru}{i}
+\indexentry{war!Technology War}{v}
+\indexentry{war!technology}{v}
+\indexentry{information technology}{v}
+\indexentry{war!nuclear}{v}
+\indexentry{war!conventional}{v}
+\indexentry{war}{v}
+\indexentry{war!conventional}{v}
+\indexentry{war!nuclear}{v}
+\indexentry{standard of living}{v}
+\indexentry{weapons}{v}
+\indexentry{capitalism}{v}
+\indexentry{war!Technology War}{v}
+\indexentry{World War II}{v}
+\indexentry{United States}{v}
+\indexentry{United States}{v}
+\indexentry{agriculture}{v}
+\indexentry{United States}{v}
+\indexentry{Asia}{vi}
+\indexentry{United States}{vi}
+\indexentry{Vietnam War}{vi}
+\indexentry{unemployment}{vi}
+\indexentry{war!Technology War}{vi}
+\indexentry{war!Technology War}{vi}
+\indexentry{weapons}{vi}
+\indexentry{information technology}{vi}
+\indexentry{information technology}{vi}
+\indexentry{engineering}{vi}
+\indexentry{intellectual property!laws}{vi}
+\indexentry{capital}{vi}
+\indexentry{education}{vi}
+\indexentry{education}{vi}
+\indexentry{Europe}{vi}
+\indexentry{information technology}{vi}
+\indexentry{education}{vi}
+\indexentry{Strategic Computing Initiative}{vii}
+\indexentry{Strategic Computing Initiative}{vii}
+\indexentry{Strategic Defense Initiative}{vii}
+\indexentry{ICOT}{vii}
+\indexentry{Fifth Generation Computer Program}{vii}
+\indexentry{information technology}{vii}
+\indexentry{ESPRIT}{vii}
+\indexentry{United States}{vii}
+\indexentry{Brandin, David~H.}{vii}
+\indexentry{Department of Commerce}{vii}
+\indexentry{computer science}{vii}
+\indexentry{Harrison, Michael~A.}{vii}
+\indexentry{computer science}{vii}
+\indexentry{information technology}{vii}
+\indexentry{Japan}{vii}
+\indexentry{China}{vii}
+\indexentry{Europe}{vii}
+\indexentry{United States}{vii}
+\indexentry{Buchanan, Ian}{vii}
+\indexentry{Chen, Pehong}{vii}
+\indexentry{Coker, John}{vii}
+\indexentry{Goldberg, Adele J.}{vii}
+\indexentry{Jacob, Jean Paul}{vii}
+\indexentry{Jacobs, Michael A.}{vii}
+\indexentry{Kahn, Robert E.}{vii}
+\indexentry{Kelly, Erin A.}{vii}
+\indexentry{Kelly, Joseph}{vii}
+\indexentry{Kobayashi, Hishashi}{vii}
+\indexentry{Kuo, Franklin F.}{vii}
+\indexentry{McCarrell, Jeff}{vii}
+\indexentry{Miller, William F.}{vii}
+\indexentry{Prestowitz, Clyde}{vii}
+\indexentry{Procter, Steven}{vii}
+\indexentry{Roubine, Olivier}{vii}
+\indexentry{Rubin, Harry}{vii}
+\indexentry{Telecki, George}{vii}
+\indexentry{Turner, Fran Peche}{vii}
+\indexentry{Association for Computing Machinery}{vii}
+\indexentry{Cezar Industries, Ltd.}{vii}
+\indexentry{University of California at Berkeley}{vii}
+\indexentry{National Academy of Sciences}{vii}
+\indexentry{National Science Foundation}{vii}
+\indexentry{Department of Commerce}{vii}
+\indexentry{Department of Defense}{vii}
+\indexentry{DARPA}{vii}
+\indexentry{DARPA}{vii}
+\indexentry{SRI International}{viii}
+\indexentry{Brandin, Ellen}{viii}
+\indexentry{Harrison, Susan G.}{viii}
+\indexentry{Graham, Susan L.}{viii}
+\indexentry{Brandin, David~H.}{viii}
+\indexentry{Harrison, Michael~A.}{viii}
+\indexentry{United States}{3}
+\indexentry{Japan}{3}
+\indexentry{IBM}{3}
+\indexentry{artificial intelligence}{3}
+\indexentry{computer}{3}
+\indexentry{artificial intelligence}{3}
+\indexentry{knowledge engineering}{3}
+\indexentry{United States}{3}
+\indexentry{Department of Defense}{3}
+\indexentry{Department of Justice}{3}
+\indexentry{antitrust laws}{3}
+\indexentry{antitrust laws}{3}
+\indexentry{European Economic Community}{3}
+\indexentry{ESPRIT}{3}
+\indexentry{information technology}{3}
+\indexentry{ESPRIT}{3}
+\indexentry{United States}{3}
+\indexentry{International Traffic in Arms Regulations}{3}
+\indexentry{information technology}{3}
+\indexentry{engineering}{3}
+\indexentry{information technology}{3}
+\indexentry{Great Britain}{4}
+\indexentry{Great Britain}{4}
+\indexentry{export control}{4}
+\indexentry{standard of living}{4}
+\indexentry{Department of Commerce}{4}
+\indexentry{Japan}{4}
+\indexentry{Europe}{4}
+\indexentry{International Computers Ltd.}{4}
+\indexentry{Japan}{4}
+\indexentry{Europe}{4}
+\indexentry{United States}{4}
+\indexentry{employment}{4}
+\indexentry{smokestack industries}{4}
+\indexentry{United States}{4}
+\indexentry{unemployment}{4}
+\indexentry{war!Technology War}{5}
+\indexentry{Japan}{5}
+\indexentry{World War II}{5}
+\indexentry{Soviet Union}{5}
+\indexentry{Soviet Union}{5}
+\indexentry{war!Technology War}{5}
+\indexentry{information technology}{5}
+\indexentry{war!Technology War}{5}
+\indexentry{United States}{5}
+\indexentry{Japan}{5}
+\indexentry{Soviet Union}{5}
+\indexentry{computer}{5}
+\indexentry{education}{5}
+\indexentry{computer!literacy}{5}
+\indexentry{computer science}{5}
+\indexentry{Great Britain!Very High Performance Integrated Circuit Program}{5}
+\indexentry{Soviet Union}{5}
+\indexentry{Soviet Union}{5}
+\indexentry{Nobel Prize}{5}
+\indexentry{computer}{5}
+\indexentry{United States}{5}
+\indexentry{information technology}{5}
+\indexentry{information technology}{5}
+\indexentry{communications}{6}
+\indexentry{information technology}{6}
+\indexentry{information technology}{6}
+\indexentry{information technology}{6}
+\indexentry{software!market}{6}
+\indexentry{information technology}{6}
+\indexentry{employment}{6}
+\indexentry{United States}{6}
+\indexentry{information technology}{6}
+\indexentry{Europe}{6}
+\indexentry{Japan}{6}
+\indexentry{United States}{6}
+\indexentry{unemployment}{6}
+\indexentry{marketshare}{6}
+\indexentry{employment}{6}
+\indexentry{savings}{6}
+\indexentry{marketshare}{6}
+\indexentry{information technology}{6}
+\indexentry{automobile}{7}
+\indexentry{communications}{7}
+\indexentry{computer}{7}
+\indexentry{communications}{7}
+\indexentry{service economy}{7}
+\indexentry{communications}{7}
+\indexentry{Department of Justice}{7}
+\indexentry{IBM}{7}
+\indexentry{marketshare}{7}
+\indexentry{marketshare}{7}
+\indexentry{marketshare}{7}
+\indexentry{research and development}{7}
+\indexentry{marketshare}{7}
+\indexentry{information technology}{7}
+\indexentry{capital}{7}
+\indexentry{capital}{7}
+\indexentry{capital}{7}
+\indexentry{information technology}{7}
+\indexentry{information technology}{8}
+\indexentry{United States}{8}
+\indexentry{information technology}{8}
+\indexentry{computer}{8}
+\indexentry{World War II}{8}
+\indexentry{computer}{8}
+\indexentry{UNIVAC!Model I}{8}
+\indexentry{computer}{8}
+\indexentry{computer}{8}
+\indexentry{weapons!nuclear}{8}
+\indexentry{Carter, President Jimmy}{8}
+\indexentry{Federal Automatic Data Processing Reorganization Study}{8}
+\indexentry{Department of Defense}{8}
+\indexentry{computer}{8}
+\indexentry{weapons}{8}
+\indexentry{computer}{8}
+\indexentry{computer}{8}
+\indexentry{computer}{8}
+\indexentry{United States!Army}{8}
+\indexentry{computer}{9}
+\indexentry{World War II}{9}
+\indexentry{computer}{9}
+\indexentry{encryption}{9}
+\indexentry{communications}{9}
+\indexentry{National Security Agency}{9}
+\indexentry{computer}{9}
+\indexentry{information technology}{9}
+\indexentry{weapons}{9}
+\indexentry{information technology}{9}
+\indexentry{Strategic Defense Initiative}{9}
+\indexentry{computer}{9}
+\indexentry{computer}{9}
+\indexentry{computer}{9}
+\indexentry{Air Traffic Control}{9}
+\indexentry{microelectronics}{9}
+\indexentry{supercomputer}{9}
+\indexentry{software}{9}
+\indexentry{Air Traffic Control}{9}
+\indexentry{computer}{9}
+\indexentry{Federal Aviation Agency}{9}
+\indexentry{computer}{9}
+\indexentry{computer}{9}
+\indexentry{microelectronics}{10}
+\indexentry{computer!architecture}{10}
+\indexentry{software!engineering}{10}
+\indexentry{war!Technology War}{10}
+\indexentry{World War II}{10}
+\indexentry{China!Cultural Revolution}{10}
+\indexentry{war!Technology War}{10}
+\indexentry{marketshare}{11}
+\indexentry{engineering}{11}
+\indexentry{hardware}{11}
+\indexentry{software}{11}
+\indexentry{microelectronics}{11}
+\indexentry{artificial intelligence}{11}
+\indexentry{technology transfer}{11}
+\indexentry{education}{11}
+\indexentry{United States}{11}
+\indexentry{war!Technology War}{13}
+\indexentry{Europe}{13}
+\indexentry{Japan}{13}
+\indexentry{employment}{13}
+\indexentry{war!Technology War}{13}
+\indexentry{innovation}{13}
+\indexentry{physics}{13}
+\indexentry{biotechnology}{13}
+\indexentry{computer science}{13}
+\indexentry{IBM}{14}
+\indexentry{NEC}{14}
+\indexentry{engineering}{14}
+\indexentry{information technology}{14}
+\indexentry{engineering}{14}
+\indexentry{transistor}{14}
+\indexentry{Department of Commerce}{14}
+\indexentry{Department of Commerce}{14}
+\indexentry{JTECH}{14}
+\indexentry{engineering}{14}
+\indexentry{computer science}{14}
+\indexentry{microelectronics}{14}
+\indexentry{optoelectronics}{14}
+\indexentry{mechatronics}{14}
+\indexentry{robotics}{14}
+\indexentry{biotechnology}{14}
+\indexentry{engineering}{15}
+\indexentry{Japan}{15}
+\indexentry{United States}{15}
+\indexentry{Japan}{15}
+\indexentry{United States}{15}
+\indexentry{engineering}{15}
+\indexentry{United States}{15}
+\indexentry{United States}{15}
+\indexentry{engineering}{15}
+\indexentry{optoelectronics}{15}
+\indexentry{United States}{15}
+\indexentry{United States}{15}
+\indexentry{optics}{15}
+\indexentry{software}{15}
+\indexentry{biotechnology}{15}
+\indexentry{United States}{15}
+\indexentry{robotics}{15}
+\indexentry{United States}{15}
+\indexentry{software}{15}
+\indexentry{United States}{15}
+\indexentry{Japan}{15}
+\indexentry{Japan}{15}
+\indexentry{employment}{15}
+\indexentry{innovation}{15}
+\indexentry{employment}{16}
+\indexentry{Germany}{16}
+\indexentry{World War II}{16}
+\indexentry{Europe}{16}
+\indexentry{Japan}{16}
+\indexentry{United States}{16}
+\indexentry{Great Britain}{16}
+\indexentry{standard of living}{16}
+\indexentry{capital}{16}
+\indexentry{capital}{16}
+\indexentry{United States}{16}
+\indexentry{Japan}{16}
+\indexentry{capital}{16}
+\indexentry{Japan}{16}
+\indexentry{microelectronics}{16}
+\indexentry{microelectronics}{16}
+\indexentry{RAM}{16}
+\indexentry{capital}{17}
+\indexentry{Japan}{17}
+\indexentry{semiconductor manufacturers!merchant}{17}
+\indexentry{Japan}{17}
+\indexentry{RAM}{17}
+\indexentry{United States}{17}
+\indexentry{computer science}{17}
+\indexentry{United States}{17}
+\indexentry{Japan}{17}
+\indexentry{Japan}{17}
+\indexentry{United States}{17}
+\indexentry{United States}{17}
+\indexentry{war!Technology War}{17}
+\indexentry{United States}{17}
+\indexentry{gross national product}{17}
+\indexentry{research and development}{18}
+\indexentry{computer}{18}
+\indexentry{World War II}{18}
+\indexentry{Great Britain!Ministry of Defense}{18}
+\indexentry{cryptology}{18}
+\indexentry{United States}{18}
+\indexentry{innovation}{18}
+\indexentry{United States}{18}
+\indexentry{computer science}{18}
+\indexentry{Fifth Generation Computer Program}{18}
+\indexentry{computer science}{18}
+\indexentry{United States}{18}
+\indexentry{information technology}{18}
+\indexentry{United States}{18}
+\indexentry{hardware}{18}
+\indexentry{software}{18}
+\indexentry{hardware}{18}
+\indexentry{software}{18}
+\indexentry{Republic of Korea}{19}
+\indexentry{Singapore}{19}
+\indexentry{Taiwan}{19}
+\indexentry{India}{19}
+\indexentry{Malaysia}{19}
+\indexentry{education}{19}
+\indexentry{software!market}{19}
+\indexentry{software}{19}
+\indexentry{Japan}{19}
+\indexentry{software}{19}
+\indexentry{United States}{19}
+\indexentry{software!market}{19}
+\indexentry{JTECH}{19}
+\indexentry{software}{19}
+\indexentry{software}{19}
+\indexentry{software!market!Japanese}{19}
+\indexentry{software}{19}
+\indexentry{McClellan, Stephen~T.}{19}
+\indexentry{software}{19}
+\indexentry{software!custom}{19}
+\indexentry{United States}{19}
+\indexentry{software!market}{19}
+\indexentry{creativity}{19}
+\indexentry{software}{19}
+\indexentry{Great Britain}{19}
+\indexentry{United States}{19}
+\indexentry{World War II}{19}
+\indexentry{Great Britain}{19}
+\indexentry{unemployment}{19}
+\indexentry{Great Britain}{19}
+\indexentry{United States}{19}
+\indexentry{United States}{20}
+\indexentry{Japan}{20}
+\indexentry{United States}{20}
+\indexentry{war!Technology War}{20}
+\indexentry{Japan}{20}
+\indexentry{information technology}{20}
+\indexentry{Japan}{20}
+\indexentry{World War II}{20}
+\indexentry{United States}{20}
+\indexentry{Japan}{20}
+\indexentry{Fifth Generation Computer Program}{20}
+\indexentry{Moto-Oka, Tohru}{20}
+\indexentry{information technology}{20}
+\indexentry{research and development}{20}
+\indexentry{Japan}{20}
+\indexentry{Moto-Oka, Tohru}{20}
+\indexentry{Japan}{20}
+\indexentry{computer science}{20}
+\indexentry{artificial intelligence}{20}
+\indexentry{Moto-Oka, Tohru}{20}
+\indexentry{war!Technology War}{20}
+\indexentry{Japan}{20}
+\indexentry{United States}{20}
+\indexentry{technology transfer}{21}
+\indexentry{war!Technology War}{21}
+\indexentry{weapons}{21}
+\indexentry{Ministry of Intl. Trade and Industry (MITI)}{21}
+\indexentry{research and development}{21}
+\indexentry{United States}{21}
+\indexentry{Europe}{21}
+\indexentry{Japan}{21}
+\indexentry{innovation}{21}
+\indexentry{innovation}{22}
+\indexentry{creativity}{22}
+\indexentry{JTECH}{22}
+\indexentry{Nishizawa, Junichi}{22}
+\indexentry{communications!optical}{22}
+\indexentry{patent}{22}
+\indexentry{communications!optical}{22}
+\indexentry{Nishizawa, Junichi}{22}
+\indexentry{Nishizawa, Junichi}{22}
+\indexentry{United States}{22}
+\indexentry{Japan}{22}
+\indexentry{creativity}{22}
+\indexentry{Nishizawa, Junichi}{23}
+\indexentry{patent}{23}
+\indexentry{Nishizawa, Junichi}{23}
+\indexentry{thyristor}{23}
+\indexentry{United States}{23}
+\indexentry{thyristor}{23}
+\indexentry{United States}{23}
+\indexentry{United States}{23}
+\indexentry{creativity}{23}
+\indexentry{Nishizawa, Junichi}{23}
+\indexentry{Esaki, Leo}{23}
+\indexentry{Nobel Prize}{23}
+\indexentry{physics}{23}
+\indexentry{Nobel Prize}{23}
+\indexentry{Sony}{23}
+\indexentry{IBM}{23}
+\indexentry{innovation}{23}
+\indexentry{creativity}{23}
+\indexentry{innovation}{23}
+\indexentry{employment}{24}
+\indexentry{technology transfer}{24}
+\indexentry{engineering}{24}
+\indexentry{engineering}{24}
+\indexentry{Europe}{24}
+\indexentry{technology transfer}{24}
+\indexentry{United States}{24}
+\indexentry{United States}{24}
+\indexentry{technology transfer}{24}
+\indexentry{Japan}{24}
+\indexentry{standards}{24}
+\indexentry{standards}{24}
+\indexentry{Japan}{25}
+\indexentry{United States}{25}
+\indexentry{Japan}{25}
+\indexentry{Republic of Korea}{25}
+\indexentry{automobile}{25}
+\indexentry{Japan}{25}
+\indexentry{Asia}{25}
+\indexentry{communications}{25}
+\indexentry{telecommunications}{25}
+\indexentry{Asia}{25}
+\indexentry{United States}{25}
+\indexentry{telecommunications}{25}
+\indexentry{Japan}{25}
+\indexentry{Japan}{25}
+\indexentry{war!Technology War}{25}
+\indexentry{United States}{25}
+\indexentry{software}{25}
+\indexentry{Japan}{25}
+\indexentry{software}{25}
+\indexentry{United States}{26}
+\indexentry{Japan}{26}
+\indexentry{software}{26}
+\indexentry{computer!architecture}{26}
+\indexentry{computer!architecture}{26}
+\indexentry{United States}{26}
+\indexentry{IBM!compatibility}{26}
+\indexentry{IBM!compatibility}{26}
+\indexentry{IBM}{26}
+\indexentry{intellectual property!laws}{26}
+\indexentry{intellectual property!rights}{26}
+\indexentry{prototype}{26}
+\indexentry{computer!architecture}{26}
+\indexentry{computer!architecture}{26}
+\indexentry{computer!architecture}{26}
+\indexentry{computer!architecture}{26}
+\indexentry{prototype}{26}
+\indexentry{Great Britain}{26}
+\indexentry{Great Britain}{26}
+\indexentry{prototype}{26}
+\indexentry{prototype}{26}
+\indexentry{Europe}{26}
+\indexentry{Japan}{26}
+\indexentry{Europe}{26}
+\indexentry{marketshare}{27}
+\indexentry{Europe}{27}
+\indexentry{United States}{27}
+\indexentry{Europe}{27}
+\indexentry{United States}{27}
+\indexentry{creativity}{27}
+\indexentry{innovation}{27}
+\indexentry{information technology}{27}
+\indexentry{Bell, Eric~T.}{27}
+\indexentry{Europe}{27}
+\indexentry{Bell, Eric~T.}{27}
+\indexentry{Great Britain}{27}
+\indexentry{Great Britain}{27}
+\indexentry{artificial intelligence}{27}
+\indexentry{Great Britain}{27}
+\indexentry{Lighthill, Sir James}{27}
+\indexentry{artificial intelligence}{27}
+\indexentry{Lighthill, Sir James}{27}
+\indexentry{artificial intelligence}{27}
+\indexentry{Great Britain}{27}
+\indexentry{robotics}{28}
+\indexentry{Lighthill, Sir James}{28}
+\indexentry{robotics}{28}
+\indexentry{robotics}{28}
+\indexentry{Japan}{28}
+\indexentry{Lighthill, Sir James}{28}
+\indexentry{artificial intelligence}{28}
+\indexentry{United States}{28}
+\indexentry{United States}{28}
+\indexentry{National Academy of Sciences}{28}
+\indexentry{Europe}{28}
+\indexentry{European Economic Community}{28}
+\indexentry{North Atlantic Treaty Organization}{28}
+\indexentry{standards}{28}
+\indexentry{standards}{28}
+\indexentry{agriculture}{28}
+\indexentry{Europe}{28}
+\indexentry{ESPRIT}{28}
+\indexentry{European Economic Community}{28}
+\indexentry{Europe}{28}
+\indexentry{Europe}{28}
+\indexentry{United States}{28}
+\indexentry{Japan}{28}
+\indexentry{Europe}{29}
+\indexentry{PTT}{29}
+\indexentry{PTT}{29}
+\indexentry{France}{29}
+\indexentry{France}{29}
+\indexentry{PTT}{29}
+\indexentry{Europe}{29}
+\indexentry{Europe}{29}
+\indexentry{United States}{29}
+\indexentry{Japan}{29}
+\indexentry{Europe}{29}
+\indexentry{Jefferson, Thomas}{29}
+\indexentry{Europe}{29}
+\indexentry{war!Technology War}{29}
+\indexentry{United States}{29}
+\indexentry{Japan}{29}
+\indexentry{war!Technology War}{29}
+\indexentry{United States}{29}
+\indexentry{education}{29}
+\indexentry{war!Technology War}{33}
+\indexentry{war!Technology War}{33}
+\indexentry{information technology}{33}
+\indexentry{World War II}{33}
+\indexentry{Germany}{33}
+\indexentry{World War II}{33}
+\indexentry{war!conventional}{33}
+\indexentry{Soviet Union}{33}
+\indexentry{computer}{33}
+\indexentry{weapons}{33}
+\indexentry{Great Britain}{33}
+\indexentry{Argentina}{33}
+\indexentry{weapons}{33}
+\indexentry{missile}{33}
+\indexentry{missile}{33}
+\indexentry{Argentina}{34}
+\indexentry{information technology}{34}
+\indexentry{information technology}{34}
+\indexentry{weapons!nuclear}{34}
+\indexentry{weapons}{34}
+\indexentry{information technology}{34}
+\indexentry{computer}{34}
+\indexentry{war!Technology War}{34}
+\indexentry{computer}{34}
+\indexentry{software}{34}
+\indexentry{missile}{34}
+\indexentry{information technology}{34}
+\indexentry{hardware}{34}
+\indexentry{computer!architecture}{34}
+\indexentry{software}{34}
+\indexentry{communications}{34}
+\indexentry{artificial intelligence}{34}
+\indexentry{hardware}{34}
+\indexentry{computer!architecture}{34}
+\indexentry{computer}{34}
+\indexentry{computer}{34}
+\indexentry{computer}{35}
+\indexentry{computer}{35}
+\indexentry{automobile}{35}
+\indexentry{hardware}{35}
+\indexentry{computer!architecture}{35}
+\indexentry{computer!architecture}{35}
+\indexentry{computer}{35}
+\indexentry{von Neumann architecture}{35}
+\indexentry{von Neumann, John}{35}
+\indexentry{World War II}{35}
+\indexentry{computer}{35}
+\indexentry{supercomputer}{35}
+\indexentry{von Neumann architecture}{35}
+\indexentry{computer!architecture}{35}
+\indexentry{computer!architecture}{35}
+\indexentry{computer!memory}{35}
+\indexentry{computer!memory}{35}
+\indexentry{computer!memory}{35}
+\indexentry{computer!memory}{35}
+\indexentry{computer!memory}{35}
+\indexentry{computer!memory}{35}
+\indexentry{computer!memory}{35}
+\indexentry{computer!memory}{35}
+\indexentry{computer!address}{35}
+\indexentry{computer!address}{36}
+\indexentry{computer!address}{36}
+\indexentry{microelectronics}{36}
+\indexentry{microelectronics}{36}
+\indexentry{computer}{36}
+\indexentry{computer}{36}
+\indexentry{transistor}{36}
+\indexentry{transistor}{36}
+\indexentry{microelectronics}{36}
+\indexentry{integrated circuits}{36}
+\indexentry{transistor}{36}
+\indexentry{transistor}{36}
+\indexentry{byte}{36}
+\indexentry{bit}{36}
+\indexentry{transistor}{37}
+\indexentry{bit}{37}
+\indexentry{computer!memory}{37}
+\indexentry{Fujitsu}{37}
+\indexentry{Hitachi}{37}
+\indexentry{Toshiba}{37}
+\indexentry{NEC}{37}
+\indexentry{Oki Electric Company}{37}
+\indexentry{bit}{37}
+\indexentry{dynamic RAM}{37}
+\indexentry{computer!memory}{37}
+\indexentry{Nippon Telephone and Telegraph}{37}
+\indexentry{prototype}{37}
+\indexentry{hardware}{37}
+\indexentry{hardware}{37}
+\indexentry{engineering}{37}
+\indexentry{microelectronics}{37}
+\indexentry{computer!memory}{37}
+\indexentry{microelectronics}{37}
+\indexentry{minicomputer}{37}
+\indexentry{computer!personal}{37}
+\indexentry{computer}{37}
+\indexentry{computer!memory}{37}
+\indexentry{byte}{37}
+\indexentry{computer!personal}{38}
+\indexentry{computer}{38}
+\indexentry{bit}{38}
+\indexentry{bit}{38}
+\indexentry{workstation}{38}
+\indexentry{computer!personal}{38}
+\indexentry{computer}{38}
+\indexentry{bit}{38}
+\indexentry{workstation}{38}
+\indexentry{byte}{38}
+\indexentry{computer!memory}{38}
+\indexentry{workstation}{38}
+\indexentry{software!engineering}{38}
+\indexentry{workstation}{38}
+\indexentry{workstation}{38}
+\indexentry{workstation}{38}
+\indexentry{workstation}{38}
+\indexentry{workstation}{38}
+\indexentry{workstation}{38}
+\indexentry{supercomputer}{38}
+\indexentry{computer}{38}
+\indexentry{computer}{38}
+\indexentry{supercomputer}{39}
+\indexentry{weapons!nuclear}{39}
+\indexentry{physics}{39}
+\indexentry{weapons}{39}
+\indexentry{Strategic Defense Initiative}{39}
+\indexentry{supercomputer}{39}
+\indexentry{research and development}{39}
+\indexentry{computational science}{39}
+\indexentry{supercomputer}{39}
+\indexentry{computer}{39}
+\indexentry{supercomputer}{39}
+\indexentry{supercomputer}{39}
+\indexentry{supercomputer}{39}
+\indexentry{software}{39}
+\indexentry{hardware}{39}
+\indexentry{United States}{39}
+\indexentry{Japan}{39}
+\indexentry{supercomputer}{39}
+\indexentry{United States}{39}
+\indexentry{software}{39}
+\indexentry{software!supercomputer}{39}
+\indexentry{supercomputer}{39}
+\indexentry{supercomputer}{39}
+\indexentry{FORTRAN}{39}
+\indexentry{software}{40}
+\indexentry{software!supercomputer}{40}
+\indexentry{supercomputer}{40}
+\indexentry{software}{40}
+\indexentry{engineering}{40}
+\indexentry{supercomputer}{40}
+\indexentry{Japan}{40}
+\indexentry{software!supercomputer}{40}
+\indexentry{supercomputer}{40}
+\indexentry{software}{40}
+\indexentry{United States}{40}
+\indexentry{supercomputer}{40}
+\indexentry{supercomputer}{40}
+\indexentry{Cray, Seymour}{40}
+\indexentry{computer}{40}
+\indexentry{supercomputer}{40}
+\indexentry{IBM!compatibility}{40}
+\indexentry{IBM}{40}
+\indexentry{software}{40}
+\indexentry{software}{40}
+\indexentry{software!engineering}{40}
+\indexentry{hardware}{40}
+\indexentry{software}{40}
+\indexentry{computer}{40}
+\indexentry{computer}{40}
+\indexentry{computer}{40}
+\indexentry{machine language}{40}
+\indexentry{software}{40}
+\indexentry{machine language}{40}
+\indexentry{computer}{40}
+\indexentry{machine language}{41}
+\indexentry{software}{41}
+\indexentry{compiler}{41}
+\indexentry{hardware}{41}
+\indexentry{software}{41}
+\indexentry{computer!memory}{41}
+\indexentry{compiler}{41}
+\indexentry{computer}{41}
+\indexentry{software}{41}
+\indexentry{hardware}{41}
+\indexentry{hardware}{41}
+\indexentry{software}{41}
+\indexentry{standards}{41}
+\indexentry{machine language}{41}
+\indexentry{hardware}{41}
+\indexentry{software}{41}
+\indexentry{software}{41}
+\indexentry{software}{41}
+\indexentry{communications}{42}
+\indexentry{communications}{42}
+\indexentry{communications}{42}
+\indexentry{computer}{42}
+\indexentry{communications}{42}
+\indexentry{hardware}{42}
+\indexentry{software}{42}
+\indexentry{communications}{42}
+\indexentry{Department of Defense}{42}
+\indexentry{AT\&T}{42}
+\indexentry{hardware}{42}
+\indexentry{communications}{42}
+\indexentry{software}{42}
+\indexentry{artificial intelligence}{42}
+\indexentry{artificial intelligence}{42}
+\indexentry{computer}{42}
+\indexentry{computer}{42}
+\indexentry{artificial intelligence}{43}
+\indexentry{Strategic Defense Initiative}{43}
+\indexentry{weapons}{43}
+\indexentry{artificial intelligence}{43}
+\indexentry{artificial intelligence}{43}
+\indexentry{artificial intelligence}{43}
+\indexentry{Turing!test}{43}
+\indexentry{Turing, Alan}{43}
+\indexentry{artificial intelligence}{43}
+\indexentry{computer}{43}
+\indexentry{computer}{43}
+\indexentry{Association for Computing Machinery}{43}
+\indexentry{computer}{43}
+\indexentry{machines, thinking}{43}
+\indexentry{computer}{43}
+\indexentry{war!Technology War}{43}
+\indexentry{machines, thinking}{44}
+\indexentry{machines, thinking}{44}
+\indexentry{machines, thinking}{44}
+\indexentry{artificial intelligence}{44}
+\indexentry{war!Technology War}{44}
+\indexentry{machines, thinking}{44}
+\indexentry{artificial intelligence}{44}
+\indexentry{computer}{44}
+\indexentry{Europe}{44}
+\indexentry{machines, thinking}{45}
+\indexentry{machines, thinking}{45}
+\indexentry{expert systems}{45}
+\indexentry{knowledge-based systems}{45}
+\indexentry{expert systems}{45}
+\indexentry{machine inference}{45}
+\indexentry{knowledge-based systems}{45}
+\indexentry{expert systems}{45}
+\indexentry{artificial intelligence}{45}
+\indexentry{knowledge-based systems}{45}
+\indexentry{expert systems}{45}
+\indexentry{Prospector}{45}
+\indexentry{expert systems}{45}
+\indexentry{Prospector}{46}
+\indexentry{uranium}{46}
+\indexentry{Prospector}{46}
+\indexentry{expert systems}{46}
+\indexentry{McCarthy, John}{46}
+\indexentry{expert systems}{46}
+\indexentry{Stanford University}{46}
+\indexentry{knowledge-based systems}{46}
+\indexentry{expert systems}{46}
+\indexentry{knowledge-based systems}{46}
+\indexentry{war!Technology War}{47}
+\indexentry{computer-aided design}{47}
+\indexentry{computer-aided design}{47}
+\indexentry{computer-aided engineering}{47}
+\indexentry{computer-aided manufacturing}{47}
+\indexentry{computer-integrated manufacturing}{47}
+\indexentry{computer-integrated manufacturing}{47}
+\indexentry{robotics}{47}
+\indexentry{flexible manufacturing systems}{47}
+\indexentry{flexible manufacturing systems}{47}
+\indexentry{mechatronics}{47}
+\indexentry{mechatronics}{47}
+\indexentry{flexible manufacturing systems}{47}
+\indexentry{computer-integrated manufacturing}{47}
+\indexentry{software}{47}
+\indexentry{computer-integrated manufacturing}{47}
+\indexentry{mechatronics}{47}
+\indexentry{robotics}{47}
+\indexentry{computer-aided design}{47}
+\indexentry{computer-aided engineering}{47}
+\indexentry{software}{47}
+\indexentry{computer-aided process planning}{47}
+\indexentry{computer-aided manufacturing}{48}
+\indexentry{robotics}{48}
+\indexentry{flexible manufacturing systems}{48}
+\indexentry{numerical control}{48}
+\indexentry{computer-aided manufacturing}{48}
+\indexentry{numerical control}{48}
+\indexentry{computer}{48}
+\indexentry{Boeing Aircraft Corporation}{48}
+\indexentry{computer-aided manufacturing}{48}
+\indexentry{numerical control}{48}
+\indexentry{numerical control}{48}
+\indexentry{United States}{48}
+\indexentry{United States}{48}
+\indexentry{numerical control}{48}
+\indexentry{flexible manufacturing systems}{48}
+\indexentry{computer}{49}
+\indexentry{engineering}{49}
+\indexentry{computer-integrated manufacturing}{49}
+\indexentry{robotics}{49}
+\indexentry{robotics}{49}
+\indexentry{robotics}{49}
+\indexentry{Europe}{49}
+\indexentry{robotics}{49}
+\indexentry{robotics}{49}
+\indexentry{Japan!robots}{49}
+\indexentry{robotics}{49}
+\indexentry{capital}{49}
+\indexentry{Japan}{49}
+\indexentry{Japan!robots}{49}
+\indexentry{robotics}{49}
+\indexentry{Japan}{49}
+\indexentry{robotics}{49}
+\indexentry{United States}{49}
+\indexentry{Europe}{49}
+\indexentry{Japan!robots}{49}
+\indexentry{robotics}{49}
+\indexentry{United States}{49}
+\indexentry{robotics}{49}
+\indexentry{Japan!robots}{49}
+\indexentry{robotics}{49}
+\indexentry{war!Technology War}{49}
+\indexentry{war!Technology War}{50}
+\indexentry{technology transfer}{50}
+\indexentry{technology transfer}{50}
+\indexentry{technology transfer}{51}
+\indexentry{war!Technology War}{51}
+\indexentry{technology transfer}{51}
+\indexentry{technology transfer}{51}
+\indexentry{war!Technology War}{51}
+\indexentry{technology transfer}{51}
+\indexentry{education}{52}
+\indexentry{physics!nuclear}{52}
+\indexentry{atomic bomb}{52}
+\indexentry{Einstein, Albert}{52}
+\indexentry{weapons}{52}
+\indexentry{Einstein, Albert}{52}
+\indexentry{uranium}{52}
+\indexentry{Einstein, Albert}{52}
+\indexentry{uranium}{52}
+\indexentry{uranium}{52}
+\indexentry{uranium}{52}
+\indexentry{uranium}{52}
+\indexentry{uranium}{52}
+\indexentry{uranium}{52}
+\indexentry{atomic bomb}{52}
+\indexentry{uranium}{53}
+\indexentry{plutonium}{53}
+\indexentry{plutonium}{53}
+\indexentry{uranium}{53}
+\indexentry{plutonium}{53}
+\indexentry{uranium}{53}
+\indexentry{weapons!nuclear}{53}
+\indexentry{weapons}{53}
+\indexentry{uranium}{53}
+\indexentry{plutonium}{53}
+\indexentry{uranium}{53}
+\indexentry{World War II}{53}
+\indexentry{uranium}{53}
+\indexentry{uranium}{53}
+\indexentry{uranium}{53}
+\indexentry{uranium}{53}
+\indexentry{uranium}{53}
+\indexentry{engineering}{53}
+\indexentry{weapons}{53}
+\indexentry{technology transfer}{53}
+\indexentry{atomic bomb}{53}
+\indexentry{Germany}{53}
+\indexentry{physics!nuclear}{53}
+\indexentry{Europe}{53}
+\indexentry{United States}{53}
+\indexentry{innovation}{53}
+\indexentry{Norway}{53}
+\indexentry{Germany}{53}
+\indexentry{technology transfer}{54}
+\indexentry{technology transfer}{54}
+\indexentry{technology transfer}{54}
+\indexentry{Food and Drug Administration}{54}
+\indexentry{technology transfer}{54}
+\indexentry{biotechnology}{54}
+\indexentry{biotechnology}{54}
+\indexentry{United States}{54}
+\indexentry{biotechnology}{54}
+\indexentry{innovation}{54}
+\indexentry{Federal Communications Commission}{54}
+\indexentry{Japan}{54}
+\indexentry{IBM}{55}
+\indexentry{antitrust laws}{55}
+\indexentry{innovation}{55}
+\indexentry{IBM}{55}
+\indexentry{communications}{55}
+\indexentry{technology transfer}{55}
+\indexentry{technology transfer}{55}
+\indexentry{technology transfer}{55}
+\indexentry{Xerox}{55}
+\indexentry{Xerox!Palo Alto Research Center}{55}
+\indexentry{innovation}{55}
+\indexentry{workstation}{55}
+\indexentry{Xerox!Palo Alto Research Center}{55}
+\indexentry{Xerox}{55}
+\indexentry{Xerox!copiers}{55}
+\indexentry{Xerox}{55}
+\indexentry{Xerox}{55}
+\indexentry{computer}{55}
+\indexentry{Xerox!STAR computer}{55}
+\indexentry{Xerox!Palo Alto Research Center}{55}
+\indexentry{Apple Computer Company}{55}
+\indexentry{Xerox}{56}
+\indexentry{innovation}{56}
+\indexentry{Apple Computer Company!Macintosh}{56}
+\indexentry{Xerox}{56}
+\indexentry{IBM}{56}
+\indexentry{technology transfer}{56}
+\indexentry{IBM}{56}
+\indexentry{IBM}{56}
+\indexentry{technology transfer}{56}
+\indexentry{Xerox}{56}
+\indexentry{technology transfer}{56}
+\indexentry{Spencer, William~J.}{56}
+\indexentry{Xerox!Palo Alto Research Center}{56}
+\indexentry{technology transfer}{56}
+\indexentry{technology transfer}{57}
+\indexentry{Israel}{57}
+\indexentry{Israel}{57}
+\indexentry{United States}{57}
+\indexentry{France}{57}
+\indexentry{Israel}{57}
+\indexentry{Israel}{57}
+\indexentry{Israel}{57}
+\indexentry{exports}{57}
+\indexentry{Israel}{57}
+\indexentry{technology transfer}{57}
+\indexentry{Germany}{57}
+\indexentry{University of California at Berkeley}{57}
+\indexentry{Germany}{57}
+\indexentry{Germany}{57}
+\indexentry{Germany}{57}
+\indexentry{Germany}{57}
+\indexentry{physics}{57}
+\indexentry{Germany}{57}
+\indexentry{physics}{57}
+\indexentry{technology transfer}{57}
+\indexentry{Meiji Period}{58}
+\indexentry{Dutch Learning}{58}
+\indexentry{Great Britain}{58}
+\indexentry{technology transfer}{58}
+\indexentry{World War II}{58}
+\indexentry{technology transfer}{58}
+\indexentry{physics!nuclear}{58}
+\indexentry{United States}{58}
+\indexentry{Great Britain}{58}
+\indexentry{Germany}{58}
+\indexentry{Soviet Union}{58}
+\indexentry{intellectual property!laws}{58}
+\indexentry{United States}{59}
+\indexentry{United States!Constitution}{59}
+\indexentry{United States!Constitution}{59}
+\indexentry{trademark}{59}
+\indexentry{trade secret}{59}
+\indexentry{patent}{59}
+\indexentry{copyright}{59}
+\indexentry{intellectual property!laws}{59}
+\indexentry{technology transfer}{59}
+\indexentry{intellectual property!laws}{59}
+\indexentry{United States}{59}
+\indexentry{technology transfer}{59}
+\indexentry{copyright}{59}
+\indexentry{software}{59}
+\indexentry{intellectual property!laws}{59}
+\indexentry{copyright}{59}
+\indexentry{machine language}{59}
+\indexentry{copyright}{59}
+\indexentry{software!protection}{59}
+\indexentry{machine language}{59}
+\indexentry{software}{59}
+\indexentry{machine language}{59}
+\indexentry{software}{59}
+\indexentry{standards}{59}
+\indexentry{software}{60}
+\indexentry{Apple Computer Company!Lisa}{60}
+\indexentry{Xerox!Palo Alto Research Center}{60}
+\indexentry{Apple Computer Company}{60}
+\indexentry{software}{60}
+\indexentry{software!protection}{60}
+\indexentry{algorithm}{60}
+\indexentry{copyright}{60}
+\indexentry{trade secret}{60}
+\indexentry{software!protection}{60}
+\indexentry{algorithm}{60}
+\indexentry{patent}{60}
+\indexentry{hardware}{60}
+\indexentry{algorithm}{60}
+\indexentry{software!protection}{60}
+\indexentry{software}{60}
+\indexentry{patent}{60}
+\indexentry{trade secret}{60}
+\indexentry{patent!Patent Secrecy act}{60}
+\indexentry{Public Crypto. Study Group}{60}
+\indexentry{cryptology}{60}
+\indexentry{patent}{60}
+\indexentry{weapons}{60}
+\indexentry{technology transfer}{61}
+\indexentry{venture capital}{61}
+\indexentry{patent}{61}
+\indexentry{copyright}{61}
+\indexentry{trade secret}{61}
+\indexentry{intellectual property!rights}{61}
+\indexentry{software}{61}
+\indexentry{innovation}{61}
+\indexentry{Universal Copyright Convention}{61}
+\indexentry{Berne Convention}{61}
+\indexentry{United States}{61}
+\indexentry{Department of Commerce}{61}
+\indexentry{China}{61}
+\indexentry{Hong Kong}{61}
+\indexentry{Taiwan}{61}
+\indexentry{Singapore}{61}
+\indexentry{Indonesia}{61}
+\indexentry{software}{61}
+\indexentry{innovation}{61}
+\indexentry{Singapore}{62}
+\indexentry{software!protection}{62}
+\indexentry{software}{62}
+\indexentry{Singapore!National Computer Board}{62}
+\indexentry{software!protection}{62}
+\indexentry{Department of Education}{62}
+\indexentry{copyright}{62}
+\indexentry{Singapore}{62}
+\indexentry{software}{62}
+\indexentry{intellectual property!laws}{62}
+\indexentry{Japan}{62}
+\indexentry{Ministry of Intl. Trade and Industry (MITI)}{62}
+\indexentry{software}{62}
+\indexentry{Ministry of Intl. Trade and Industry (MITI)}{62}
+\indexentry{software}{62}
+\indexentry{copyright}{62}
+\indexentry{software!protection}{62}
+\indexentry{software}{62}
+\indexentry{Japan}{63}
+\indexentry{Japan}{63}
+\indexentry{Asia}{63}
+\indexentry{United States}{63}
+\indexentry{Department of Commerce}{63}
+\indexentry{exports}{63}
+\indexentry{computer}{63}
+\indexentry{software}{63}
+\indexentry{United States}{63}
+\indexentry{National Academy of Sciences}{64}
+\indexentry{exports}{64}
+\indexentry{Commodity Control List}{64}
+\indexentry{license!general}{64}
+\indexentry{license!validated}{64}
+\indexentry{computer}{64}
+\indexentry{software}{64}
+\indexentry{hardware}{64}
+\indexentry{Commodity Control List}{64}
+\indexentry{United States}{64}
+\indexentry{Soviet Union}{64}
+\indexentry{computer}{64}
+\indexentry{export control}{64}
+\indexentry{IBM!compatibility}{64}
+\indexentry{computer!personal}{64}
+\indexentry{Department of State}{64}
+\indexentry{Department of Defense}{64}
+\indexentry{software}{64}
+\indexentry{Military Critical Technologies List (MCTL)}{64}
+\indexentry{Military Critical Technologies List (MCTL)}{65}
+\indexentry{war!Technology War}{65}
+\indexentry{export control}{65}
+\indexentry{International Traffic in Arms Regulations}{65}
+\indexentry{exports}{65}
+\indexentry{export control}{65}
+\indexentry{encryption}{65}
+\indexentry{telecommunications}{65}
+\indexentry{export control}{65}
+\indexentry{International Traffic in Arms Regulations}{65}
+\indexentry{United States}{65}
+\indexentry{International Traffic in Arms Regulations}{65}
+\indexentry{International Traffic in Arms Regulations}{65}
+\indexentry{Commodity Control List}{65}
+\indexentry{Japan}{65}
+\indexentry{Coordinating Committee}{65}
+\indexentry{Coordinating Committee}{65}
+\indexentry{Department of State}{65}
+\indexentry{Department of Commerce}{65}
+\indexentry{Department of Defense}{65}
+\indexentry{Central Intelligence Agency}{65}
+\indexentry{Department of Energy}{65}
+\indexentry{National Aeronautics and Space Administration (NASA)}{65}
+\indexentry{Commodity Control List}{65}
+\indexentry{Coordinating Committee}{66}
+\indexentry{export control}{66}
+\indexentry{exports}{66}
+\indexentry{export control}{66}
+\indexentry{technology transfer}{66}
+\indexentry{Department of Defense}{66}
+\indexentry{exports}{66}
+\indexentry{Europe}{66}
+\indexentry{Japan}{66}
+\indexentry{Alvey program}{66}
+\indexentry{Europe}{66}
+\indexentry{United States}{66}
+\indexentry{Reagan, President Ronald}{66}
+\indexentry{export control}{66}
+\indexentry{United States!Senate}{66}
+\indexentry{South Africa}{66}
+\indexentry{Libya}{66}
+\indexentry{United States!Senate}{66}
+\indexentry{software}{67}
+\indexentry{technology transfer}{67}
+\indexentry{weapons}{67}
+\indexentry{intellectual property}{67}
+\indexentry{intellectual property!rights}{67}
+\indexentry{United States}{67}
+\indexentry{war!Technology War}{67}
+\indexentry{United States}{67}
+\indexentry{Japan}{67}
+\indexentry{Digital Equipment Corporation}{67}
+\indexentry{Hewlett-Packard}{67}
+\indexentry{IBM}{67}
+\indexentry{AT\&T}{67}
+\indexentry{Apple Computer Company}{67}
+\indexentry{war!Technology War}{67}
+\indexentry{war!conventional}{67}
+\indexentry{Inman, Admiral Bobby R.}{67}
+\indexentry{United States}{67}
+\indexentry{France}{68}
+\indexentry{Japan}{68}
+\indexentry{United States}{68}
+\indexentry{automobile}{68}
+\indexentry{education}{69}
+\indexentry{antitrust laws}{70}
+\indexentry{Japan}{70}
+\indexentry{Ministry of Intl. Trade and Industry (MITI)}{70}
+\indexentry{Japan}{70}
+\indexentry{Ministry of Intl. Trade and Industry (MITI)}{70}
+\indexentry{Ministry of Intl. Trade and Industry (MITI)}{70}
+\indexentry{World War II}{70}
+\indexentry{Japan}{70}
+\indexentry{Ministry of Intl. Trade and Industry (MITI)}{70}
+\indexentry{Ministry of Intl. Trade and Industry (MITI)}{70}
+\indexentry{Japan}{70}
+\indexentry{Ministry of Intl. Trade and Industry (MITI)}{70}
+\indexentry{Ministry of Intl. Trade and Industry (MITI)}{70}
+\indexentry{University of Tokyo}{70}
+\indexentry{World War II}{70}
+\indexentry{Ministry of Intl. Trade and Industry (MITI)}{70}
+\indexentry{MacArthur, General Douglas}{70}
+\indexentry{SCAP}{70}
+\indexentry{Ministry of Intl. Trade and Industry (MITI)}{70}
+\indexentry{SCAP}{70}
+\indexentry{SCAP}{70}
+\indexentry{Ministry of Intl. Trade and Industry (MITI)}{70}
+\indexentry{Ministry of Intl. Trade and Industry (MITI)}{70}
+\indexentry{SCAP}{71}
+\indexentry{Ministry of Intl. Trade and Industry (MITI)}{71}
+\indexentry{United States}{71}
+\indexentry{Japan}{71}
+\indexentry{Ministry of Intl. Trade and Industry (MITI)}{71}
+\indexentry{patent}{71}
+\indexentry{Ministry of Intl. Trade and Industry (MITI)}{71}
+\indexentry{Japan}{71}
+\indexentry{Japan}{71}
+\indexentry{war!Technology War}{71}
+\indexentry{Ministry of Intl. Trade and Industry (MITI)}{71}
+\indexentry{IBM}{71}
+\indexentry{Japan}{71}
+\indexentry{IBM}{71}
+\indexentry{IBM}{71}
+\indexentry{Japan}{71}
+\indexentry{yen}{71}
+\indexentry{IBM}{71}
+\indexentry{Ministry of Intl. Trade and Industry (MITI)}{71}
+\indexentry{IBM}{71}
+\indexentry{patent}{71}
+\indexentry{IBM}{71}
+\indexentry{Ministry of Intl. Trade and Industry (MITI)}{71}
+\indexentry{Ministry of Intl. Trade and Industry (MITI)}{71}
+\indexentry{Ministry of Intl. Trade and Industry (MITI)}{71}
+\indexentry{Johnson, Chalmers}{71}
+\indexentry{Ministry of Intl. Trade and Industry (MITI)}{71}
+\indexentry{Ministry of Intl. Trade and Industry (MITI)}{71}
+\indexentry{Ministry of Intl. Trade and Industry (MITI)}{72}
+\indexentry{Ministry of Intl. Trade and Industry (MITI)}{72}
+\indexentry{Ministry of Intl. Trade and Industry (MITI)}{72}
+\indexentry{steel}{72}
+\indexentry{automobile}{72}
+\indexentry{Japan}{72}
+\indexentry{Ministry of Intl. Trade and Industry (MITI)}{72}
+\indexentry{Germany}{72}
+\indexentry{Ministry of Intl. Trade and Industry (MITI)}{72}
+\indexentry{Japan!Incorporated}{72}
+\indexentry{Ministry of Intl. Trade and Industry (MITI)}{72}
+\indexentry{Japan}{72}
+\indexentry{Japan}{72}
+\indexentry{computer}{72}
+\indexentry{United States}{72}
+\indexentry{Ministry of Intl. Trade and Industry (MITI)}{72}
+\indexentry{Ministry of Intl. Trade and Industry (MITI)}{72}
+\indexentry{United States}{72}
+\indexentry{Department of Commerce}{72}
+\indexentry{Department of Defense}{72}
+\indexentry{Ministry of Intl. Trade and Industry (MITI)}{72}
+\indexentry{Department of Defense}{72}
+\indexentry{information technology}{72}
+\indexentry{Ministry of Intl. Trade and Industry (MITI)}{73}
+\indexentry{Japan}{73}
+\indexentry{Ministry of Intl. Trade and Industry (MITI)}{73}
+\indexentry{Department of Defense}{73}
+\indexentry{Japan}{73}
+\indexentry{Ministry of Intl. Trade and Industry (MITI)}{73}
+\indexentry{United States}{73}
+\indexentry{Iacocca, Lee}{73}
+\indexentry{United States}{73}
+\indexentry{antitrust laws}{73}
+\indexentry{Japan}{73}
+\indexentry{Ministry of Intl. Trade and Industry (MITI)}{73}
+\indexentry{antitrust laws}{73}
+\indexentry{United States}{73}
+\indexentry{information technology}{73}
+\indexentry{United States versus IBM suit}{73}
+\indexentry{IBM}{73}
+\indexentry{International Trade Commission}{73}
+\indexentry{Department of Commerce}{73}
+\indexentry{antitrust laws}{73}
+\indexentry{innovation}{73}
+\indexentry{antitrust laws}{73}
+\indexentry{research and development}{73}
+\indexentry{Baxter, William~F.}{74}
+\indexentry{antitrust laws}{74}
+\indexentry{Department of Justice}{74}
+\indexentry{Baxter, William~F.}{74}
+\indexentry{Department of Justice}{74}
+\indexentry{marketshare}{74}
+\indexentry{Department of Justice}{74}
+\indexentry{United States}{74}
+\indexentry{Microelectronics and Computer Technology Corporation}{74}
+\indexentry{Microelectronics Center of North Carolina}{74}
+\indexentry{Software Productivity Consortium}{74}
+\indexentry{National Productivity and Innovation Act}{74}
+\indexentry{antitrust laws}{74}
+\indexentry{intellectual property}{74}
+\indexentry{war!Technology War}{74}
+\indexentry{information technology}{74}
+\indexentry{capital}{74}
+\indexentry{exchange rate}{75}
+\indexentry{savings}{75}
+\indexentry{United States!procurement system}{75}
+\indexentry{information technology}{75}
+\indexentry{World War II}{75}
+\indexentry{Japan}{75}
+\indexentry{Japan}{75}
+\indexentry{Japan}{75}
+\indexentry{steel}{75}
+\indexentry{capital}{75}
+\indexentry{capital}{75}
+\indexentry{capital}{75}
+\indexentry{savings}{75}
+\indexentry{Bergamini, David}{75}
+\indexentry{Japan}{75}
+\indexentry{savings}{75}
+\indexentry{savings}{75}
+\indexentry{capital}{76}
+\indexentry{capital}{76}
+\indexentry{imports}{76}
+\indexentry{exports}{76}
+\indexentry{employment}{76}
+\indexentry{exchange rate}{76}
+\indexentry{Japan}{76}
+\indexentry{yen}{76}
+\indexentry{exchange rate}{76}
+\indexentry{exports}{76}
+\indexentry{employment}{76}
+\indexentry{unemployment}{76}
+\indexentry{yen}{76}
+\indexentry{Japan}{76}
+\indexentry{employment}{76}
+\indexentry{exports}{76}
+\indexentry{balance of trade}{77}
+\indexentry{capital}{77}
+\indexentry{capital}{77}
+\indexentry{information technology}{77}
+\indexentry{capital}{77}
+\indexentry{workstation}{77}
+\indexentry{capital}{77}
+\indexentry{VLSI}{77}
+\indexentry{computer!architecture}{77}
+\indexentry{computer!architecture}{77}
+\indexentry{capital}{77}
+\indexentry{war!Technology War}{77}
+\indexentry{exchange rate}{77}
+\indexentry{capital}{77}
+\indexentry{war!Technology War}{77}
+\indexentry{United States}{77}
+\indexentry{information technology}{77}
+\indexentry{balance of trade}{77}
+\indexentry{exports}{77}
+\indexentry{hardware}{77}
+\indexentry{imports}{77}
+\indexentry{hardware}{77}
+\indexentry{balance of trade}{77}
+\indexentry{exports}{77}
+\indexentry{imports}{77}
+\indexentry{exports}{77}
+\indexentry{imports}{77}
+\indexentry{Japan}{78}
+\indexentry{Asia}{78}
+\indexentry{Republic of Korea}{78}
+\indexentry{balance of trade}{78}
+\indexentry{balance of trade}{78}
+\indexentry{Great Britain}{78}
+\indexentry{United States}{78}
+\indexentry{exchange rate}{78}
+\indexentry{yen}{78}
+\indexentry{United States}{78}
+\indexentry{Europe}{78}
+\indexentry{Europe}{78}
+\indexentry{Europe}{78}
+\indexentry{Europe}{78}
+\indexentry{balance of trade}{78}
+\indexentry{Great Britain}{79}
+\indexentry{imports}{79}
+\indexentry{New Zealand}{79}
+\indexentry{France}{79}
+\indexentry{imports}{79}
+\indexentry{European Economic Community}{79}
+\indexentry{Great Britain}{79}
+\indexentry{yen}{79}
+\indexentry{Japan}{79}
+\indexentry{yen}{79}
+\indexentry{exports}{79}
+\indexentry{imports}{79}
+\indexentry{exports}{79}
+\indexentry{imports}{79}
+\indexentry{balance of trade}{79}
+\indexentry{United States}{80}
+\indexentry{Europe}{80}
+\indexentry{Japan}{80}
+\indexentry{Fujitsu}{80}
+\indexentry{Fairchild Camera and Instrument Corporation}{80}
+\indexentry{microelectronics}{80}
+\indexentry{yen}{80}
+\indexentry{balance of trade}{80}
+\indexentry{Japan}{80}
+\indexentry{Japan}{81}
+\indexentry{marketshare}{81}
+\indexentry{war!Technology War}{81}
+\indexentry{International Trade Commission}{81}
+\indexentry{Department of Commerce}{81}
+\indexentry{Japan}{81}
+\indexentry{marketshare}{81}
+\indexentry{employment}{81}
+\indexentry{Department of Commerce}{81}
+\indexentry{research and development}{81}
+\indexentry{United States}{81}
+\indexentry{Republic of Korea}{82}
+\indexentry{Europe}{82}
+\indexentry{marketshare}{82}
+\indexentry{Matsushita Electric Industrial Co.}{82}
+\indexentry{Germany}{82}
+\indexentry{microelectronics}{82}
+\indexentry{United States}{82}
+\indexentry{Japan}{82}
+\indexentry{Japan}{82}
+\indexentry{telecommunications}{82}
+\indexentry{microelectronics}{82}
+\indexentry{United States}{83}
+\indexentry{Japan}{83}
+\indexentry{United States}{83}
+\indexentry{United States}{83}
+\indexentry{RAM}{83}
+\indexentry{war!Technology War}{83}
+\indexentry{Johnson, Chalmers}{83}
+\indexentry{Ministry of Intl. Trade and Industry (MITI)}{83}
+\indexentry{bushido}{83}
+\indexentry{Japan}{83}
+\indexentry{Japan}{84}
+\indexentry{Soviet Union}{84}
+\indexentry{Soviet Union}{84}
+\indexentry{United States!Senate}{84}
+\indexentry{United States}{84}
+\indexentry{Japan}{84}
+\indexentry{Mexico}{84}
+\indexentry{Panama}{84}
+\indexentry{Japan}{84}
+\indexentry{employment!lifetime}{84}
+\indexentry{Japan}{84}
+\indexentry{Churchill, Winston}{84}
+\indexentry{engineering}{84}
+\indexentry{Japan}{85}
+\indexentry{gross national product}{85}
+\indexentry{gross national product}{85}
+\indexentry{research and development}{85}
+\indexentry{United States}{85}
+\indexentry{United States}{85}
+\indexentry{research and development}{85}
+\indexentry{gross national product}{85}
+\indexentry{United States}{85}
+\indexentry{technology transfer}{85}
+\indexentry{technology transfer}{85}
+\indexentry{Japan}{85}
+\indexentry{Ministry of Intl. Trade and Industry (MITI)}{85}
+\indexentry{technology transfer}{85}
+\indexentry{Japan}{85}
+\indexentry{war!Technology War}{86}
+\indexentry{Japan}{86}
+\indexentry{war!Technology War}{86}
+\indexentry{Europe}{86}
+\indexentry{war!Technology War}{87}
+\indexentry{war!Technology War}{87}
+\indexentry{Asia}{87}
+\indexentry{war!Technology War}{87}
+\indexentry{education}{89}
+\indexentry{war!Technology War}{89}
+\indexentry{scientists and engineers!demographics of}{89}
+\indexentry{algorithm}{89}
+\indexentry{software}{89}
+\indexentry{United States}{89}
+\indexentry{United States versus IBM suit}{89}
+\indexentry{IBM}{89}
+\indexentry{education}{90}
+\indexentry{United States}{90}
+\indexentry{Nobel Prize}{90}
+\indexentry{innovation}{90}
+\indexentry{xerography}{90}
+\indexentry{Bell, Alexander Graham}{90}
+\indexentry{Edison, Thomas A.}{90}
+\indexentry{Eastman, George}{90}
+\indexentry{Land, Edward}{90}
+\indexentry{innovation}{90}
+\indexentry{United States}{90}
+\indexentry{Nobel Prize}{90}
+\indexentry{Nobel Prize}{90}
+\indexentry{creativity}{90}
+\indexentry{United States}{90}
+\indexentry{patent}{90}
+\indexentry{patent}{90}
+\indexentry{United States}{90}
+\indexentry{innovation}{90}
+\indexentry{education}{90}
+\indexentry{physics}{90}
+\indexentry{physics}{90}
+\indexentry{United States}{90}
+\indexentry{France}{91}
+\indexentry{Germany}{91}
+\indexentry{Soviet Union}{91}
+\indexentry{physics}{91}
+\indexentry{United States}{91}
+\indexentry{education}{91}
+\indexentry{United States}{91}
+\indexentry{education}{91}
+\indexentry{education!engineering}{91}
+\indexentry{United States}{91}
+\indexentry{scientists and engineers!demographics of}{91}
+\indexentry{United States}{91}
+\indexentry{research and development}{91}
+\indexentry{United States}{91}
+\indexentry{Japan}{91}
+\indexentry{United States}{91}
+\indexentry{education}{91}
+\indexentry{engineering!education}{91}
+\indexentry{United States}{91}
+\indexentry{accreditation}{91}
+\indexentry{education}{92}
+\indexentry{United States}{92}
+\indexentry{degrees!master's}{92}
+\indexentry{engineering}{92}
+\indexentry{United States}{92}
+\indexentry{scientists and engineers!demographics of}{92}
+\indexentry{education!engineering}{92}
+\indexentry{computer science}{92}
+\indexentry{computer science}{92}
+\indexentry{degrees!master's}{92}
+\indexentry{engineering}{92}
+\indexentry{engineering!faculty}{92}
+\indexentry{degrees!doctoral}{92}
+\indexentry{engineering}{92}
+\indexentry{scientists and engineers!demographics of}{92}
+\indexentry{education!engineering}{92}
+\indexentry{Great Britain}{92}
+\indexentry{India}{92}
+\indexentry{Harvard University}{92}
+\indexentry{education}{93}
+\indexentry{engineering}{93}
+\indexentry{United States}{93}
+\indexentry{computer science}{93}
+\indexentry{Wozniak, Stephen}{93}
+\indexentry{University of California at Berkeley}{93}
+\indexentry{Apple Computer Company}{93}
+\indexentry{Wozniak, Stephen}{93}
+\indexentry{Bechtolsheim, Andy}{93}
+\indexentry{Joy, William N.}{93}
+\indexentry{Sun Microsystems Inc.}{93}
+\indexentry{degrees!doctoral}{93}
+\indexentry{degrees!doctoral}{93}
+\indexentry{engineering!faculty}{93}
+\indexentry{degrees!master's}{93}
+\indexentry{education}{93}
+\indexentry{computer science}{93}
+\indexentry{computer science}{93}
+\indexentry{Vietnam War}{94}
+\indexentry{Asia}{94}
+\indexentry{engineering!faculty}{94}
+\indexentry{scientists and engineers!demographics of}{94}
+\indexentry{education!engineering}{94}
+\indexentry{engineering!education}{94}
+\indexentry{United States}{94}
+\indexentry{United States}{94}
+\indexentry{engineering!faculty}{94}
+\indexentry{Department of Defense}{94}
+\indexentry{World War II}{94}
+\indexentry{scientists and engineers!demographics of}{94}
+\indexentry{education!engineering}{94}
+\indexentry{engineering!faculty}{94}
+\indexentry{engineering!faculty}{94}
+\indexentry{scientists and engineers!demographics of}{94}
+\indexentry{education!engineering}{94}
+\indexentry{United States}{94}
+\indexentry{engineering!faculty}{94}
+\indexentry{education}{95}
+\indexentry{MIT}{95}
+\indexentry{Stanford University}{95}
+\indexentry{National Science Foundation}{95}
+\indexentry{National Science Foundation!Engineering Research Centers}{95}
+\indexentry{biotechnology}{95}
+\indexentry{telecommunications}{95}
+\indexentry{robotics}{95}
+\indexentry{United States}{95}
+\indexentry{research and development}{95}
+\indexentry{research and development}{95}
+\indexentry{engineering}{96}
+\indexentry{education!engineering}{96}
+\indexentry{education}{96}
+\indexentry{accreditation}{96}
+\indexentry{education!engineering}{96}
+\indexentry{Shapley, Deborah}{96}
+\indexentry{Roy, Rustum}{96}
+\indexentry{United States}{96}
+\indexentry{France}{96}
+\indexentry{United States}{96}
+\indexentry{engineering}{96}
+\indexentry{education}{96}
+\indexentry{engineering!education}{96}
+\indexentry{Wang Institute}{97}
+\indexentry{degrees!master's}{97}
+\indexentry{software!engineering}{97}
+\indexentry{Wang, An}{97}
+\indexentry{Wang Computers}{97}
+\indexentry{engineering}{97}
+\indexentry{Wang Institute}{97}
+\indexentry{education}{97}
+\indexentry{education!continuing}{97}
+\indexentry{education}{97}
+\indexentry{education!continuing}{97}
+\indexentry{education}{97}
+\indexentry{education!continuing}{97}
+\indexentry{professional societies}{97}
+\indexentry{professional societies}{97}
+\indexentry{education}{97}
+\indexentry{Japan}{97}
+\indexentry{war!Technology War}{97}
+\indexentry{Japan}{98}
+\indexentry{United States}{98}
+\indexentry{United States}{98}
+\indexentry{Japan}{98}
+\indexentry{education}{98}
+\indexentry{Japan}{98}
+\indexentry{University of Tokyo}{98}
+\indexentry{Kyoto University}{98}
+\indexentry{Osaka University}{98}
+\indexentry{Tohoku University}{98}
+\indexentry{Hokaido University}{98}
+\indexentry{Nagoya University}{98}
+\indexentry{Kyushu University}{98}
+\indexentry{University of Tokyo}{98}
+\indexentry{Japan}{98}
+\indexentry{Harvard University}{98}
+\indexentry{United States}{98}
+\indexentry{education!engineering}{98}
+\indexentry{University of Tokyo}{98}
+\indexentry{Kyoto University}{98}
+\indexentry{United States}{98}
+\indexentry{education!engineering}{98}
+\indexentry{Japan}{98}
+\indexentry{United States}{98}
+\indexentry{Japan}{98}
+\indexentry{Japan}{98}
+\indexentry{United States}{98}
+\indexentry{Ministry of Intl. Trade and Industry (MITI)}{98}
+\indexentry{Japan}{98}
+\indexentry{Japan}{99}
+\indexentry{United States}{99}
+\indexentry{Japan}{99}
+\indexentry{Kyoto University}{99}
+\indexentry{United States}{99}
+\indexentry{University of California at Berkeley}{99}
+\indexentry{degrees!bachelor's}{99}
+\indexentry{Japan}{99}
+\indexentry{United States}{99}
+\indexentry{education!engineering}{99}
+\indexentry{Japan}{99}
+\indexentry{Meiji Period}{100}
+\indexentry{engineering}{100}
+\indexentry{education!engineering}{100}
+\indexentry{engineering}{100}
+\indexentry{Japan}{100}
+\indexentry{education!engineering}{100}
+\indexentry{Japan}{100}
+\indexentry{education}{100}
+\indexentry{scientists and engineers!demographics of}{100}
+\indexentry{education!engineering}{100}
+\indexentry{United States}{100}
+\indexentry{degrees!bachelor's}{100}
+\indexentry{degrees!master's}{100}
+\indexentry{degrees!master's}{100}
+\indexentry{degrees!doctoral}{100}
+\indexentry{degrees!master's}{100}
+\indexentry{Japan}{101}
+\indexentry{United States}{101}
+\indexentry{Japan}{101}
+\indexentry{Europe}{101}
+\indexentry{education}{101}
+\indexentry{education}{101}
+\indexentry{Europe}{101}
+\indexentry{China}{101}
+\indexentry{Europe}{101}
+\indexentry{China}{101}
+\indexentry{China!Cultural Revolution}{101}
+\indexentry{education}{101}
+\indexentry{China}{101}
+\indexentry{unemployment}{101}
+\indexentry{China}{101}
+\indexentry{computer science}{102}
+\indexentry{China}{102}
+\indexentry{computer science}{102}
+\indexentry{computer science}{102}
+\indexentry{education}{102}
+\indexentry{computer science}{102}
+\indexentry{computer}{102}
+\indexentry{computer science}{102}
+\indexentry{China}{102}
+\indexentry{Association for Computing Machinery}{102}
+\indexentry{war!Technology War}{102}
+\indexentry{education}{102}
+\indexentry{computer science}{102}
+\indexentry{China!Cultural Revolution}{102}
+\indexentry{computer science}{102}
+\indexentry{China}{102}
+\indexentry{United States}{102}
+\indexentry{China}{103}
+\indexentry{China}{103}
+\indexentry{education}{103}
+\indexentry{degrees!master's}{103}
+\indexentry{degrees!master's}{103}
+\indexentry{degrees!doctoral}{103}
+\indexentry{degrees!doctoral}{103}
+\indexentry{computer science}{103}
+\indexentry{China}{103}
+\indexentry{China}{103}
+\indexentry{war!Technology War}{103}
+\indexentry{war!Technology War}{103}
+\indexentry{China}{103}
+\indexentry{Great Britain}{103}
+\indexentry{Great Britain}{103}
+\indexentry{education}{103}
+\indexentry{Great Britain}{103}
+\indexentry{Babbage, Charles}{103}
+\indexentry{Lovelace, Countess Augusta Ada Byron}{103}
+\indexentry{Turing, Alan}{103}
+\indexentry{education}{103}
+\indexentry{scientists and engineers!demographics of}{103}
+\indexentry{Great Britain}{103}
+\indexentry{Great Britain}{103}
+\indexentry{scientists and engineers!demographics of}{103}
+\indexentry{education!engineering}{103}
+\indexentry{information technology}{103}
+\indexentry{United States}{103}
+\indexentry{Japan}{103}
+\indexentry{capital}{104}
+\indexentry{education}{104}
+\indexentry{research and development}{104}
+\indexentry{war!Technology War}{104}
+\indexentry{Great Britain}{104}
+\indexentry{United States}{104}
+\indexentry{degrees!doctoral}{104}
+\indexentry{graduate schools of business}{104}
+\indexentry{United States}{104}
+\indexentry{United States}{104}
+\indexentry{Japan}{104}
+\indexentry{research and development}{104}
+\indexentry{Great Britain}{104}
+\indexentry{Alvey program}{104}
+\indexentry{education}{104}
+\indexentry{Great Britain}{104}
+\indexentry{Great Britain}{104}
+\indexentry{education}{104}
+\indexentry{Germany}{105}
+\indexentry{Germany}{105}
+\indexentry{education!engineering}{105}
+\indexentry{Technical University of Munich}{105}
+\indexentry{University of Berlin}{105}
+\indexentry{University of Karlsruhe}{105}
+\indexentry{University of Erlangen}{105}
+\indexentry{University of Saarbr\"ucken}{105}
+\indexentry{Germany}{105}
+\indexentry{computer science}{105}
+\indexentry{Informatik}{105}
+\indexentry{physics}{105}
+\indexentry{Germany}{105}
+\indexentry{education}{105}
+\indexentry{United States}{105}
+\indexentry{Germany}{105}
+\indexentry{United States}{105}
+\indexentry{Germany}{105}
+\indexentry{Szilard, Leo}{105}
+\indexentry{Einstein, Albert}{105}
+\indexentry{Roosevelt, President Franklin}{105}
+\indexentry{atomic bomb}{105}
+\indexentry{Teller, Edward}{105}
+\indexentry{hydrogen bomb}{105}
+\indexentry{Bethe, Hans}{105}
+\indexentry{Franck, James}{105}
+\indexentry{Nordheim, Lothar W.}{105}
+\indexentry{Rabinowitch, Eugene}{105}
+\indexentry{United States}{105}
+\indexentry{World War II}{105}
+\indexentry{Germany}{105}
+\indexentry{Germany}{105}
+\indexentry{Germany}{106}
+\indexentry{Germany}{106}
+\indexentry{Germany}{106}
+\indexentry{war!Technology War}{106}
+\indexentry{France}{106}
+\indexentry{education}{106}
+\indexentry{physics}{106}
+\indexentry{creativity}{106}
+\indexentry{France}{106}
+\indexentry{education}{106}
+\indexentry{United States}{106}
+\indexentry{degrees!doctoral}{106}
+\indexentry{education}{107}
+\indexentry{France}{107}
+\indexentry{France}{107}
+\indexentry{scientists and engineers!demographics of}{107}
+\indexentry{education!engineering}{107}
+\indexentry{scientists and engineers!demographics of}{107}
+\indexentry{education!engineering}{107}
+\indexentry{France}{107}
+\indexentry{scientists and engineers!demographics of}{107}
+\indexentry{education!engineering}{107}
+\indexentry{scientists and engineers!demographics of}{107}
+\indexentry{education!engineering}{107}
+\indexentry{education!engineering}{107}
+\indexentry{education!engineering}{107}
+\indexentry{education}{107}
+\indexentry{war!Technology War}{107}
+\indexentry{war!conventional}{107}
+\indexentry{degrees!doctoral}{107}
+\indexentry{Nazis}{107}
+\indexentry{United States}{108}
+\indexentry{education}{108}
+\indexentry{Japan}{108}
+\indexentry{education!engineering}{108}
+\indexentry{Japan}{108}
+\indexentry{education}{108}
+\indexentry{Japan}{108}
+\indexentry{education}{108}
+\indexentry{engineering!education}{108}
+\indexentry{engineering}{108}
+\indexentry{Japan}{108}
+\indexentry{engineering}{108}
+\indexentry{employment!lifetime}{108}
+\indexentry{employment}{108}
+\indexentry{technology transfer}{108}
+\indexentry{technology transfer}{108}
+\indexentry{Japan}{108}
+\indexentry{employment!lifetime}{109}
+\indexentry{employment}{109}
+\indexentry{Europe}{109}
+\indexentry{Japan}{109}
+\indexentry{United States}{109}
+\indexentry{Europe}{109}
+\indexentry{venture capital}{109}
+\indexentry{Japan}{109}
+\indexentry{Europe}{109}
+\indexentry{United States}{109}
+\indexentry{Japan}{109}
+\indexentry{employment!lifetime}{109}
+\indexentry{Europe}{109}
+\indexentry{Europe}{109}
+\indexentry{education}{109}
+\indexentry{war!Technology War}{109}
+\indexentry{United States}{109}
+\indexentry{education}{109}
+\indexentry{education}{109}
+\indexentry{computer science}{109}
+\indexentry{engineering!education}{109}
+\indexentry{innovation}{109}
+\indexentry{United States}{109}
+\indexentry{education}{109}
+\indexentry{Germany}{109}
+\indexentry{France}{109}
+\indexentry{education}{109}
+\indexentry{engineering!education}{109}
+\indexentry{Great Britain}{109}
+\indexentry{Japan}{109}
+\indexentry{education}{109}
+\indexentry{education!continuing}{109}
+\indexentry{education}{110}
+\indexentry{education!engineering}{110}
+\indexentry{marketshare}{110}
+\indexentry{unemployment}{110}
+\indexentry{Singapore}{110}
+\indexentry{Japan}{110}
+\indexentry{United States}{110}
+\indexentry{education}{110}
+\indexentry{war!Technology War}{110}
+\indexentry{war!Technology War}{110}
+\indexentry{education}{110}
+\indexentry{war!Technology War}{113}
+\indexentry{capital}{113}
+\indexentry{Japan}{113}
+\indexentry{United States}{113}
+\indexentry{Europe}{113}
+\indexentry{United States}{113}
+\indexentry{National Science Foundation}{113}
+\indexentry{National Aeronautics and Space Administration (NASA)}{113}
+\indexentry{information technology}{113}
+\indexentry{United States}{113}
+\indexentry{Department of Defense}{113}
+\indexentry{Department of Defense}{113}
+\indexentry{United States}{113}
+\indexentry{war!conventional}{113}
+\indexentry{war!nuclear}{113}
+\indexentry{Soviet Union}{114}
+\indexentry{Department of Defense}{114}
+\indexentry{Soviet Union}{114}
+\indexentry{United States}{114}
+\indexentry{weapons}{114}
+\indexentry{North Atlantic Treaty Organization}{114}
+\indexentry{United States}{114}
+\indexentry{weapons}{114}
+\indexentry{World War II}{114}
+\indexentry{war!Technology War}{114}
+\indexentry{war!conventional}{114}
+\indexentry{war!Technology War}{114}
+\indexentry{weapons}{114}
+\indexentry{weapons}{114}
+\indexentry{Department of Defense}{115}
+\indexentry{engineering}{115}
+\indexentry{DARPA}{115}
+\indexentry{Department of Defense}{115}
+\indexentry{research and development}{115}
+\indexentry{National Aeronautics and Space Administration (NASA)}{115}
+\indexentry{DARPA}{115}
+\indexentry{National Aeronautics and Space Administration (NASA)}{115}
+\indexentry{DARPA}{115}
+\indexentry{missile}{115}
+\indexentry{ballistic missile defense}{115}
+\indexentry{DARPA}{115}
+\indexentry{DARPA}{115}
+\indexentry{DARPA}{115}
+\indexentry{DARPA}{115}
+\indexentry{DARPA}{116}
+\indexentry{Department of Defense}{116}
+\indexentry{DARPA}{116}
+\indexentry{artificial intelligence}{116}
+\indexentry{DARPA}{116}
+\indexentry{computer}{116}
+\indexentry{United States}{116}
+\indexentry{ARPANET}{116}
+\indexentry{research support!computing}{116}
+\indexentry{communications}{116}
+\indexentry{computer science}{116}
+\indexentry{ARPANET}{116}
+\indexentry{communications}{116}
+\indexentry{Department of Defense}{116}
+\indexentry{ARPANET}{116}
+\indexentry{TELENET}{116}
+\indexentry{DARPA}{116}
+\indexentry{Strategic Computing Initiative}{116}
+\indexentry{computer!architecture}{116}
+\indexentry{computer!architecture}{116}
+\indexentry{DARPA}{116}
+\indexentry{expert systems}{116}
+\indexentry{DARPA}{117}
+\indexentry{DARPA}{117}
+\indexentry{Strategic Computing Initiative}{117}
+\indexentry{missile}{117}
+\indexentry{DARPA}{117}
+\indexentry{Pilot's Associate}{117}
+\indexentry{weapons}{117}
+\indexentry{weapons}{117}
+\indexentry{DARPA}{117}
+\indexentry{Pilot's Associate}{117}
+\indexentry{expert systems}{117}
+\indexentry{DARPA}{117}
+\indexentry{DARPA}{118}
+\indexentry{Strategic Defense Initiative}{118}
+\indexentry{Reagan, President Ronald}{118}
+\indexentry{weapons!nuclear}{118}
+\indexentry{weapons}{118}
+\indexentry{Strategic Defense Initiative}{118}
+\indexentry{Strategic Defense Initiative}{118}
+\indexentry{information technology}{118}
+\indexentry{Strategic Defense Initiative}{118}
+\indexentry{DARPA}{118}
+\indexentry{DARPA}{118}
+\indexentry{gallium arsenide}{118}
+\indexentry{Strategic Defense Initiative}{118}
+\indexentry{Strategic Defense Initiative}{118}
+\indexentry{DARPA}{118}
+\indexentry{Strategic Defense Initiative}{118}
+\indexentry{war!nuclear}{119}
+\indexentry{North Atlantic Treaty Organization}{119}
+\indexentry{United States}{119}
+\indexentry{Strategic Defense Initiative}{119}
+\indexentry{Strategic Defense Initiative}{119}
+\indexentry{Japan}{119}
+\indexentry{weapons!nuclear}{119}
+\indexentry{United States}{119}
+\indexentry{gallium arsenide}{119}
+\indexentry{United States}{119}
+\indexentry{Japan}{119}
+\indexentry{Strategic Defense Initiative}{119}
+\indexentry{Strategic Defense Initiative}{119}
+\indexentry{software}{119}
+\indexentry{computer science}{119}
+\indexentry{Strategic Defense Initiative}{119}
+\indexentry{missile}{119}
+\indexentry{ballistic missile defense}{119}
+\indexentry{software}{119}
+\indexentry{Strategic Defense Initiative}{119}
+\indexentry{weapons!nuclear}{119}
+\indexentry{software}{119}
+\indexentry{Strategic Defense Initiative}{120}
+\indexentry{Department of Defense}{120}
+\indexentry{Strategic Defense Initiative}{120}
+\indexentry{software}{120}
+\indexentry{computer!architecture}{120}
+\indexentry{computer!architecture}{120}
+\indexentry{information technology}{120}
+\indexentry{United States}{120}
+\indexentry{war!Technology War}{120}
+\indexentry{Strategic Defense Initiative}{120}
+\indexentry{Strategic Defense Initiative}{120}
+\indexentry{physics}{120}
+\indexentry{Strategic Defense Initiative}{121}
+\indexentry{war!Technology War}{121}
+\indexentry{information technology}{121}
+\indexentry{Strategic Defense Initiative}{121}
+\indexentry{National Aeronautics and Space Administration (NASA)}{121}
+\indexentry{Department of Defense}{121}
+\indexentry{Strategic Defense Initiative}{121}
+\indexentry{war!Technology War}{121}
+\indexentry{Department of Defense}{121}
+\indexentry{software}{121}
+\indexentry{software!market}{121}
+\indexentry{software}{121}
+\indexentry{Department of Defense}{121}
+\indexentry{Department of Defense}{121}
+\indexentry{software}{122}
+\indexentry{computer}{122}
+\indexentry{software}{122}
+\indexentry{software}{122}
+\indexentry{technology transfer}{122}
+\indexentry{algorithm}{122}
+\indexentry{software}{122}
+\indexentry{algorithm}{122}
+\indexentry{Department of Defense}{122}
+\indexentry{technology transfer}{122}
+\indexentry{software}{122}
+\indexentry{Department of Defense}{122}
+\indexentry{software}{122}
+\indexentry{standards}{122}
+\indexentry{Department of Defense}{122}
+\indexentry{Ada}{122}
+\indexentry{Ada}{122}
+\indexentry{Lovelace, Countess Augusta Ada Byron}{122}
+\indexentry{Babbage, Charles}{122}
+\indexentry{computer}{122}
+\indexentry{Ada}{122}
+\indexentry{hardware}{123}
+\indexentry{Ada}{123}
+\indexentry{Department of Defense}{123}
+\indexentry{Ada}{123}
+\indexentry{compiler}{123}
+\indexentry{Ada}{123}
+\indexentry{compiler}{123}
+\indexentry{computer}{123}
+\indexentry{compiler}{123}
+\indexentry{Ada}{123}
+\indexentry{Ada}{123}
+\indexentry{Ada}{123}
+\indexentry{Department of Defense}{123}
+\indexentry{Ada}{123}
+\indexentry{software}{123}
+\indexentry{Ada}{123}
+\indexentry{STARS Program}{123}
+\indexentry{STARS Program}{123}
+\indexentry{software}{123}
+\indexentry{STARS Program}{123}
+\indexentry{United States!procurement system}{123}
+\indexentry{Department of Defense}{123}
+\indexentry{software!engineering}{123}
+\indexentry{Software Engineering Institute}{123}
+\indexentry{Department of Defense}{123}
+\indexentry{Carnegie-Mellon University}{123}
+\indexentry{technology transfer}{123}
+\indexentry{software}{123}
+\indexentry{Department of Defense}{124}
+\indexentry{technology transfer}{124}
+\indexentry{education}{124}
+\indexentry{technology transfer}{124}
+\indexentry{degrees!master's}{124}
+\indexentry{software!engineering}{124}
+\indexentry{software}{124}
+\indexentry{Department of Defense}{124}
+\indexentry{United States!procurement system}{124}
+\indexentry{software}{124}
+\indexentry{software!engineering}{124}
+\indexentry{software!engineering}{124}
+\indexentry{software!engineering}{124}
+\indexentry{Department of Defense}{124}
+\indexentry{integrated circuits}{124}
+\indexentry{VHSIC}{124}
+\indexentry{VHSIC}{124}
+\indexentry{VHSIC}{124}
+\indexentry{weapons}{124}
+\indexentry{computer-aided design}{124}
+\indexentry{integrated circuits}{124}
+\indexentry{prototype}{124}
+\indexentry{VHSIC}{124}
+\indexentry{VHSIC}{124}
+\indexentry{STARS Program}{124}
+\indexentry{National Science Foundation}{125}
+\indexentry{National Science Foundation}{125}
+\indexentry{engineering}{125}
+\indexentry{National Science Foundation}{125}
+\indexentry{National Science Foundation}{125}
+\indexentry{education!engineering}{125}
+\indexentry{education}{125}
+\indexentry{National Science Foundation!Presidential Young Investigators}{125}
+\indexentry{National Science Foundation}{125}
+\indexentry{National Science Foundation}{125}
+\indexentry{National Science Foundation}{125}
+\indexentry{computational science}{125}
+\indexentry{National Science Foundation}{125}
+\indexentry{National Science Foundation}{125}
+\indexentry{National Science Foundation!CISE Program}{125}
+\indexentry{information technology}{125}
+\indexentry{National Science Foundation!CISE Program}{125}
+\indexentry{robotics}{125}
+\indexentry{microelectronics}{125}
+\indexentry{supercomputer}{125}
+\indexentry{robotics}{125}
+\indexentry{National Science Foundation}{126}
+\indexentry{Bloch, Erich}{126}
+\indexentry{engineering}{126}
+\indexentry{National Science Foundation}{126}
+\indexentry{National Science Foundation}{126}
+\indexentry{National Science Foundation!CISE Program}{126}
+\indexentry{DARPA}{126}
+\indexentry{Department of Defense}{126}
+\indexentry{National Science Foundation}{126}
+\indexentry{computer science}{126}
+\indexentry{National Science Foundation}{126}
+\indexentry{United States}{126}
+\indexentry{National Science Foundation}{126}
+\indexentry{DARPA}{126}
+\indexentry{Reagan, President Ronald}{126}
+\indexentry{National Science Foundation}{126}
+\indexentry{White House}{126}
+\indexentry{Department of Energy}{126}
+\indexentry{Argonne National Laboratory}{126}
+\indexentry{Brookhaven National Laboratory}{126}
+\indexentry{Lawrence Livermore National Laboratory}{126}
+\indexentry{Los Alamos National Laboratories}{126}
+\indexentry{Oak Ridge National Laboratory}{126}
+\indexentry{Sandia National Laboratory}{126}
+\indexentry{physics!nuclear}{127}
+\indexentry{Department of Energy}{127}
+\indexentry{computer}{127}
+\indexentry{computer science}{127}
+\indexentry{Department of Energy}{127}
+\indexentry{supercomputer}{127}
+\indexentry{supercomputer}{127}
+\indexentry{Department of Energy}{127}
+\indexentry{Department of Energy}{127}
+\indexentry{supercomputer}{127}
+\indexentry{Department of Energy}{127}
+\indexentry{Soviet Union}{127}
+\indexentry{China}{127}
+\indexentry{Department of State}{127}
+\indexentry{Department of Energy}{127}
+\indexentry{Department of Defense}{127}
+\indexentry{supercomputer}{127}
+\indexentry{Europe}{127}
+\indexentry{Department of Commerce}{127}
+\indexentry{Cray Research}{127}
+\indexentry{supercomputer}{127}
+\indexentry{supercomputer}{127}
+\indexentry{Europe}{127}
+\indexentry{Department of Energy}{128}
+\indexentry{Lawrence Livermore National Laboratory}{128}
+\indexentry{supercomputer}{128}
+\indexentry{supercomputer}{128}
+\indexentry{Lawrence Livermore National Laboratory}{128}
+\indexentry{prototype}{128}
+\indexentry{computer}{128}
+\indexentry{supercomputer}{128}
+\indexentry{Lawrence Livermore National Laboratory}{128}
+\indexentry{World War II}{128}
+\indexentry{weapons}{128}
+\indexentry{physics}{128}
+\indexentry{engineering}{128}
+\indexentry{weapons}{128}
+\indexentry{technology transfer}{128}
+\indexentry{technology transfer}{128}
+\indexentry{research support!computing}{128}
+\indexentry{research and development}{128}
+\indexentry{Department of Defense}{128}
+\indexentry{research and development}{128}
+\indexentry{Reagan, President Ronald}{128}
+\indexentry{Department of Defense}{128}
+\indexentry{Department of Defense}{128}
+\indexentry{research support!computing}{129}
+\indexentry{computer!architecture}{129}
+\indexentry{computer!architecture}{129}
+\indexentry{research support!computing}{129}
+\indexentry{computer!architecture}{129}
+\indexentry{computer!architecture}{129}
+\indexentry{Strategic Defense Initiative}{130}
+\indexentry{Department of Defense}{130}
+\indexentry{gross national product}{130}
+\indexentry{gross national product}{130}
+\indexentry{United States}{130}
+\indexentry{United States}{130}
+\indexentry{research and development}{130}
+\indexentry{Japan}{130}
+\indexentry{gross national product}{130}
+\indexentry{Japan}{130}
+\indexentry{research and development}{130}
+\indexentry{IBM}{130}
+\indexentry{capital}{130}
+\indexentry{information technology}{131}
+\indexentry{computer science}{131}
+\indexentry{artificial intelligence}{131}
+\indexentry{TRW}{131}
+\indexentry{General Motors}{131}
+\indexentry{information technology}{131}
+\indexentry{war!Technology War}{131}
+\indexentry{IBM}{131}
+\indexentry{IBM}{131}
+\indexentry{IBM}{131}
+\indexentry{computer}{131}
+\indexentry{UNIVAC}{131}
+\indexentry{IBM}{131}
+\indexentry{computer science}{131}
+\indexentry{IBM}{132}
+\indexentry{information technology}{132}
+\indexentry{IBM!compatibility}{132}
+\indexentry{IBM}{132}
+\indexentry{IBM!System 360}{132}
+\indexentry{information technology}{132}
+\indexentry{IBM}{132}
+\indexentry{computer!MARK I}{132}
+\indexentry{Harvard University}{132}
+\indexentry{World War II}{132}
+\indexentry{IBM}{132}
+\indexentry{IBM}{132}
+\indexentry{IBM}{132}
+\indexentry{IBM!compatibility}{132}
+\indexentry{IBM}{132}
+\indexentry{hardware}{132}
+\indexentry{software}{132}
+\indexentry{IBM}{132}
+\indexentry{balance of trade}{132}
+\indexentry{IBM}{132}
+\indexentry{marketshare}{132}
+\indexentry{Gartner Group}{132}
+\indexentry{IBM}{132}
+\indexentry{computer}{132}
+\indexentry{Gartner Group}{133}
+\indexentry{IBM}{133}
+\indexentry{marketshare}{133}
+\indexentry{IBM}{133}
+\indexentry{software!market}{133}
+\indexentry{software}{133}
+\indexentry{software}{133}
+\indexentry{marketshare}{133}
+\indexentry{marketshare}{133}
+\indexentry{standards}{133}
+\indexentry{computer!personal}{133}
+\indexentry{IBM}{133}
+\indexentry{Malik, Rex}{133}
+\indexentry{IBM}{133}
+\indexentry{IBM}{133}
+\indexentry{Europe}{133}
+\indexentry{Europe}{133}
+\indexentry{IBM}{133}
+\indexentry{IBM}{133}
+\indexentry{balance of trade}{133}
+\indexentry{Department of Commerce}{133}
+\indexentry{Department of Defense}{133}
+\indexentry{IBM}{133}
+\indexentry{IBM}{133}
+\indexentry{Department of Justice}{133}
+\indexentry{antitrust laws}{133}
+\indexentry{IBM}{133}
+\indexentry{United States}{133}
+\indexentry{antitrust laws}{133}
+\indexentry{IBM}{133}
+\indexentry{antitrust laws}{133}
+\indexentry{IBM}{133}
+\indexentry{Reagan, President Ronald}{133}
+\indexentry{Reagan administration}{134}
+\indexentry{IBM}{134}
+\indexentry{IBM}{134}
+\indexentry{war!Technology War}{134}
+\indexentry{research and development}{134}
+\indexentry{IBM}{134}
+\indexentry{IBM!Research Centers}{134}
+\indexentry{IBM!Research Centers!San Jose}{134}
+\indexentry{Switzerland}{134}
+\indexentry{IBM}{134}
+\indexentry{IBM}{134}
+\indexentry{research and development}{134}
+\indexentry{engineering}{134}
+\indexentry{IBM}{134}
+\indexentry{IBM}{134}
+\indexentry{hardware}{134}
+\indexentry{IBM}{134}
+\indexentry{RAMAC}{134}
+\indexentry{IBM}{134}
+\indexentry{RAMAC}{134}
+\indexentry{bit}{134}
+\indexentry{IBM}{134}
+\indexentry{IBM!3380 disk unit}{134}
+\indexentry{bit}{134}
+\indexentry{Silicon Valley}{134}
+\indexentry{computer}{134}
+\indexentry{software}{135}
+\indexentry{IBM}{135}
+\indexentry{Codd, Ted}{135}
+\indexentry{relational database}{135}
+\indexentry{Codd, Ted}{135}
+\indexentry{IBM!Research Centers!San Jose}{135}
+\indexentry{System R}{135}
+\indexentry{relational database}{135}
+\indexentry{relational database}{135}
+\indexentry{Codd, Ted}{135}
+\indexentry{Association for Computing Machinery}{135}
+\indexentry{Turing!award}{135}
+\indexentry{IBM}{135}
+\indexentry{physics!surface}{135}
+\indexentry{IBM}{135}
+\indexentry{bit}{135}
+\indexentry{bit}{135}
+\indexentry{dynamic RAM}{135}
+\indexentry{RAM}{135}
+\indexentry{IBM}{135}
+\indexentry{ballistic transport}{135}
+\indexentry{IBM}{135}
+\indexentry{innovation}{135}
+\indexentry{IBM}{135}
+\indexentry{IBM}{135}
+\indexentry{IBM!Fellow}{135}
+\indexentry{IBM!Fellow}{135}
+\indexentry{IBM!Fellow}{135}
+\indexentry{IBM}{136}
+\indexentry{computer science}{136}
+\indexentry{Bell Laboratories}{136}
+\indexentry{Xerox}{136}
+\indexentry{Xerox!Palo Alto Research Center}{136}
+\indexentry{Bell Laboratories}{136}
+\indexentry{IBM}{136}
+\indexentry{IBM}{136}
+\indexentry{innovation}{136}
+\indexentry{artificial intelligence}{136}
+\indexentry{IBM}{136}
+\indexentry{artificial intelligence}{136}
+\indexentry{IBM}{136}
+\indexentry{IBM!Research Centers}{136}
+\indexentry{innovation}{136}
+\indexentry{technology transfer}{136}
+\indexentry{United States}{136}
+\indexentry{Xerox}{136}
+\indexentry{Bell Laboratories}{136}
+\indexentry{innovation}{136}
+\indexentry{AT\&T}{136}
+\indexentry{Bell, Alexander Graham}{136}
+\indexentry{United States}{136}
+\indexentry{Department of Justice}{137}
+\indexentry{antitrust laws}{137}
+\indexentry{AT\&T}{137}
+\indexentry{AT\&T}{137}
+\indexentry{AT\&T}{137}
+\indexentry{communications}{137}
+\indexentry{antitrust laws}{137}
+\indexentry{Federal Communications Commission}{137}
+\indexentry{communications}{137}
+\indexentry{innovation}{137}
+\indexentry{communications}{137}
+\indexentry{Federal Communications Commission}{137}
+\indexentry{communications}{137}
+\indexentry{communications}{137}
+\indexentry{communications}{137}
+\indexentry{Federal Communications Commission}{137}
+\indexentry{communications}{138}
+\indexentry{AT\&T}{138}
+\indexentry{computer}{138}
+\indexentry{Radio Corporation of America}{138}
+\indexentry{Philco Corporation}{138}
+\indexentry{Xerox}{138}
+\indexentry{General Electric Company}{138}
+\indexentry{communications}{138}
+\indexentry{war!Technology War}{138}
+\indexentry{NEC}{138}
+\indexentry{Nippon Telephone and Telegraph}{138}
+\indexentry{Japan}{138}
+\indexentry{Japan}{138}
+\indexentry{Bell Laboratories}{138}
+\indexentry{Japan}{138}
+\indexentry{Electro-Technical Laboratories}{138}
+\indexentry{Bell Laboratories}{138}
+\indexentry{Bell Laboratories}{138}
+\indexentry{war!Technology War}{138}
+\indexentry{AT\&T}{138}
+\indexentry{Bell Laboratories}{138}
+\indexentry{patent}{139}
+\indexentry{Bell Laboratories}{139}
+\indexentry{Bell Laboratories}{139}
+\indexentry{transistor}{139}
+\indexentry{Bell Laboratories}{139}
+\indexentry{transistor}{139}
+\indexentry{technology transfer}{139}
+\indexentry{transistor}{139}
+\indexentry{transistor}{139}
+\indexentry{Bell Laboratories}{139}
+\indexentry{UNIX operating system}{139}
+\indexentry{Bell Laboratories}{139}
+\indexentry{Ritchie, Dennis~M.}{139}
+\indexentry{Thompson, Ken}{139}
+\indexentry{technology transfer}{139}
+\indexentry{UNIX operating system}{139}
+\indexentry{Thompson, Ken}{139}
+\indexentry{Digital Equipment Corporation}{139}
+\indexentry{Digital Equipment Corporation!PDP-7}{139}
+\indexentry{computer}{139}
+\indexentry{computer!personal}{139}
+\indexentry{Ritchie, Dennis~M.}{139}
+\indexentry{UNIX operating system}{139}
+\indexentry{Ritchie, Dennis~M.}{139}
+\indexentry{Thompson, Ken}{139}
+\indexentry{Association for Computing Machinery}{139}
+\indexentry{Turing!award}{139}
+\indexentry{Ritchie, Dennis~M.}{139}
+\indexentry{Bell Laboratories}{139}
+\indexentry{Bell Laboratories}{139}
+\indexentry{UNIX operating system}{139}
+\indexentry{IBM}{139}
+\indexentry{computer}{139}
+\indexentry{AT\&T}{140}
+\indexentry{AT\&T}{140}
+\indexentry{Bell Communication Research}{140}
+\indexentry{United States}{140}
+\indexentry{Bell Communication Research}{140}
+\indexentry{United States}{140}
+\indexentry{computer science}{140}
+\indexentry{physics!solid state}{140}
+\indexentry{communications}{140}
+\indexentry{software}{140}
+\indexentry{Bell Laboratories}{140}
+\indexentry{Bell Laboratories}{140}
+\indexentry{technology transfer}{140}
+\indexentry{Bell Laboratories}{140}
+\indexentry{technology transfer}{140}
+\indexentry{Bell Laboratories}{140}
+\indexentry{Karmarkar, Narendra}{140}
+\indexentry{algorithm}{140}
+\indexentry{linear programming}{140}
+\indexentry{linear programming}{140}
+\indexentry{linear programming}{140}
+\indexentry{linear programming}{140}
+\indexentry{algorithm}{140}
+\indexentry{algorithm!Khachiyan's}{140}
+\indexentry{algorithm}{140}
+\indexentry{Karmarkar, Narendra}{141}
+\indexentry{algorithm!Karmarkar's}{141}
+\indexentry{algorithm}{141}
+\indexentry{linear programming}{141}
+\indexentry{Bell Laboratories}{141}
+\indexentry{Bell Laboratories}{141}
+\indexentry{Karmarkar, Narendra}{141}
+\indexentry{algorithm!Karmarkar's}{141}
+\indexentry{algorithm}{141}
+\indexentry{Bell Laboratories}{141}
+\indexentry{Bell Laboratories}{141}
+\indexentry{technology transfer}{141}
+\indexentry{Digital Equipment Corporation}{141}
+\indexentry{United States}{141}
+\indexentry{Olsen, Kenneth H.}{141}
+\indexentry{minicomputer}{141}
+\indexentry{Digital Equipment Corporation}{141}
+\indexentry{minicomputer}{141}
+\indexentry{Digital Equipment Corporation!PDP-8}{141}
+\indexentry{minicomputer}{141}
+\indexentry{minicomputer}{141}
+\indexentry{Digital Equipment Corporation}{141}
+\indexentry{Digital Equipment Corporation}{141}
+\indexentry{Digital Equipment Corporation}{141}
+\indexentry{computer!VAX}{141}
+\indexentry{Digital Equipment Corporation!VAX}{141}
+\indexentry{computer}{141}
+\indexentry{hardware}{141}
+\indexentry{communications}{141}
+\indexentry{Digital Equipment Corporation}{141}
+\indexentry{IBM}{141}
+\indexentry{Digital Equipment Corporation}{141}
+\indexentry{computer}{142}
+\indexentry{Digital Equipment Corporation}{142}
+\indexentry{IBM}{142}
+\indexentry{Digital Equipment Corporation}{142}
+\indexentry{computer!personal}{142}
+\indexentry{Digital Equipment Corporation}{142}
+\indexentry{computer!personal}{142}
+\indexentry{Digital Equipment Corporation}{142}
+\indexentry{minicomputer}{142}
+\indexentry{Digital Equipment Corporation}{142}
+\indexentry{Digital Equipment Corporation}{142}
+\indexentry{IBM}{142}
+\indexentry{IBM}{142}
+\indexentry{Sun Microsystems Inc.}{142}
+\indexentry{Unisys}{142}
+\indexentry{Digital Equipment Corporation}{142}
+\indexentry{IBM}{142}
+\indexentry{Digital Equipment Corporation}{142}
+\indexentry{war!Technology War}{142}
+\indexentry{Digital Equipment Corporation}{142}
+\indexentry{marketshare}{142}
+\indexentry{workstation}{142}
+\indexentry{Digital Equipment Corporation}{142}
+\indexentry{Digital Equipment Corporation}{142}
+\indexentry{war!Technology War}{142}
+\indexentry{Digital Equipment Corporation}{142}
+\indexentry{Digital Equipment Corporation!VAX}{142}
+\indexentry{Digital Equipment Corporation}{142}
+\indexentry{Digital Equipment Corporation}{142}
+\indexentry{Xerox}{142}
+\indexentry{technology transfer}{143}
+\indexentry{Digital Equipment Corporation}{143}
+\indexentry{IBM}{143}
+\indexentry{BUNCH}{143}
+\indexentry{BUNCH}{143}
+\indexentry{Burroughs}{143}
+\indexentry{Sperry Univac}{143}
+\indexentry{Unisys}{143}
+\indexentry{Burroughs}{143}
+\indexentry{Sperry Univac}{143}
+\indexentry{National Cash Register Company}{143}
+\indexentry{Control Data Corp.}{143}
+\indexentry{Honeywell}{143}
+\indexentry{BUNCH}{143}
+\indexentry{Digital Equipment Corporation}{143}
+\indexentry{IBM}{143}
+\indexentry{IBM!compatibility}{143}
+\indexentry{United States}{143}
+\indexentry{BUNCH}{143}
+\indexentry{hardware}{143}
+\indexentry{BUNCH}{143}
+\indexentry{General Electric Company}{143}
+\indexentry{Radio Corporation of America}{143}
+\indexentry{BUNCH}{143}
+\indexentry{Seven Dwarfs}{143}
+\indexentry{IBM}{143}
+\indexentry{General Electric Company}{143}
+\indexentry{Radio Corporation of America}{143}
+\indexentry{General Electric Company}{143}
+\indexentry{Radio Corporation of America}{143}
+\indexentry{Seven Dwarfs}{143}
+\indexentry{BUNCH}{143}
+\indexentry{IBM}{143}
+\indexentry{war!Technology War}{143}
+\indexentry{IBM}{143}
+\indexentry{war!Technology War}{143}
+\indexentry{hardware}{144}
+\indexentry{software}{144}
+\indexentry{IBM}{144}
+\indexentry{IBM!compatibility}{144}
+\indexentry{IBM}{144}
+\indexentry{Anderson, William S.}{144}
+\indexentry{National Cash Register Company}{144}
+\indexentry{BUNCH}{144}
+\indexentry{BUNCH}{144}
+\indexentry{marketshare}{144}
+\indexentry{BUNCH}{144}
+\indexentry{IBM}{144}
+\indexentry{IBM}{144}
+\indexentry{IBM!compatibility}{144}
+\indexentry{IBM}{144}
+\indexentry{IBM}{144}
+\indexentry{IBM!compatibility}{144}
+\indexentry{BUNCH}{144}
+\indexentry{marketshare}{144}
+\indexentry{BUNCH}{144}
+\indexentry{minicomputer}{144}
+\indexentry{Digital Equipment Corporation}{144}
+\indexentry{Hewlett-Packard}{144}
+\indexentry{BUNCH}{144}
+\indexentry{BUNCH}{145}
+\indexentry{IBM!compatibility}{145}
+\indexentry{IBM}{145}
+\indexentry{IBM}{145}
+\indexentry{BUNCH}{145}
+\indexentry{IBM}{145}
+\indexentry{computer}{145}
+\indexentry{Unisys}{145}
+\indexentry{Burroughs}{145}
+\indexentry{Sperry Univac}{145}
+\indexentry{communications}{145}
+\indexentry{Burroughs}{145}
+\indexentry{hardware}{145}
+\indexentry{IBM}{145}
+\indexentry{marketshare}{145}
+\indexentry{marketshare}{145}
+\indexentry{Sperry Univac}{145}
+\indexentry{communications}{145}
+\indexentry{UNIVAC!Model I}{145}
+\indexentry{UNIVAC}{145}
+\indexentry{transistor}{145}
+\indexentry{Sperry Univac}{145}
+\indexentry{Sperry Univac}{145}
+\indexentry{Radio Corporation of America}{145}
+\indexentry{Sperry Univac}{145}
+\indexentry{Burroughs}{145}
+\indexentry{Unisys}{146}
+\indexentry{Sperry Univac}{146}
+\indexentry{Burroughs}{146}
+\indexentry{Honeywell}{146}
+\indexentry{General Electric Company}{146}
+\indexentry{National Cash Register Company}{146}
+\indexentry{Watson, Sr., Thomas J.}{146}
+\indexentry{IBM}{146}
+\indexentry{computer}{146}
+\indexentry{National Cash Register Company}{146}
+\indexentry{IBM!compatibility}{146}
+\indexentry{communications}{146}
+\indexentry{UNIX operating system}{146}
+\indexentry{Control Data Corp.}{146}
+\indexentry{computer}{146}
+\indexentry{Plato system}{146}
+\indexentry{supercomputer}{146}
+\indexentry{supercomputer}{146}
+\indexentry{Cray Research}{146}
+\indexentry{IBM}{146}
+\indexentry{antitrust laws}{146}
+\indexentry{Control Data Corp.}{146}
+\indexentry{Control Data Corp.}{146}
+\indexentry{war!Technology War}{146}
+\indexentry{Microelectronics and Computer Technology Corporation}{146}
+\indexentry{Honeywell}{146}
+\indexentry{General Electric Company}{146}
+\indexentry{Honeywell}{146}
+\indexentry{Xerox}{147}
+\indexentry{marketshare}{147}
+\indexentry{IBM}{147}
+\indexentry{Fishman, Katherine~D.}{147}
+\indexentry{IBM}{147}
+\indexentry{IBM!System 360}{147}
+\indexentry{Honeywell}{147}
+\indexentry{IBM}{147}
+\indexentry{Honeywell}{147}
+\indexentry{NEC}{147}
+\indexentry{Bull}{147}
+\indexentry{NEC}{147}
+\indexentry{hardware}{147}
+\indexentry{Honeywell}{147}
+\indexentry{war!Technology War}{147}
+\indexentry{Hewlett-Packard}{147}
+\indexentry{Silicon Valley}{147}
+\indexentry{Hewlett-Packard}{147}
+\indexentry{technology transfer}{147}
+\indexentry{Hewlett-Packard}{147}
+\indexentry{Hewlett-Packard}{147}
+\indexentry{Hewlett-Packard}{147}
+\indexentry{minicomputer}{147}
+\indexentry{Hewlett-Packard}{147}
+\indexentry{software}{148}
+\indexentry{Hewlett-Packard}{148}
+\indexentry{Hewlett-Packard}{148}
+\indexentry{Hewlett-Packard}{148}
+\indexentry{computer}{148}
+\indexentry{Hewlett-Packard}{148}
+\indexentry{minicomputer}{148}
+\indexentry{Hewlett-Packard}{148}
+\indexentry{computer}{148}
+\indexentry{Hewlett-Packard}{148}
+\indexentry{minicomputer}{148}
+\indexentry{workstation}{148}
+\indexentry{Apple Computer Company}{148}
+\indexentry{Xerox}{148}
+\indexentry{Sun Microsystems Inc.}{148}
+\indexentry{innovation}{148}
+\indexentry{Apple Computer Company}{149}
+\indexentry{computer!personal}{149}
+\indexentry{Apple Computer Company!II}{149}
+\indexentry{Apple Computer Company}{149}
+\indexentry{Apple Computer Company}{149}
+\indexentry{Apple Computer Company}{149}
+\indexentry{Apple Computer Company}{149}
+\indexentry{Apple Computer Company!III}{149}
+\indexentry{McKenna, Regis}{149}
+\indexentry{Apple Computer Company!III}{149}
+\indexentry{Apple Computer Company!II}{149}
+\indexentry{Apple Computer Company!IIe}{149}
+\indexentry{Apple Computer Company}{149}
+\indexentry{Apple Computer Company!IIe}{149}
+\indexentry{Jobs, Steve}{149}
+\indexentry{computer!personal}{149}
+\indexentry{software}{149}
+\indexentry{Xerox}{149}
+\indexentry{Xerox!Palo Alto Research Center}{149}
+\indexentry{Jobs, Steve}{149}
+\indexentry{Apple Computer Company!Lisa}{149}
+\indexentry{Apple Computer Company!Lisa}{149}
+\indexentry{Apple Computer Company!Lisa}{149}
+\indexentry{computer!personal}{149}
+\indexentry{IBM!compatibility}{149}
+\indexentry{Apple Computer Company!Macintosh}{149}
+\indexentry{software}{149}
+\indexentry{Apple Computer Company!Macintosh}{149}
+\indexentry{Apple Computer Company}{149}
+\indexentry{Apple Computer Company!Macintosh}{150}
+\indexentry{Apple Computer Company!Macintosh}{150}
+\indexentry{Apple Computer Company}{150}
+\indexentry{technology transfer}{150}
+\indexentry{Apple Computer Company}{150}
+\indexentry{intellectual property!rights}{150}
+\indexentry{intellectual property!laws}{150}
+\indexentry{copyright}{150}
+\indexentry{software!protection}{150}
+\indexentry{software}{150}
+\indexentry{Apple Computer Company}{150}
+\indexentry{war!Technology War}{150}
+\indexentry{Xerox}{150}
+\indexentry{Xerox!914 copier}{150}
+\indexentry{Xerox!copiers}{150}
+\indexentry{Xerox!914 copier}{150}
+\indexentry{Xerox}{150}
+\indexentry{Xerox!914 copier}{150}
+\indexentry{Xerox}{150}
+\indexentry{Xerox}{150}
+\indexentry{marketshare}{150}
+\indexentry{Xerox!copiers}{150}
+\indexentry{Canon Inc.}{150}
+\indexentry{Ricoh Inc.}{150}
+\indexentry{Xerox}{150}
+\indexentry{Xerox}{150}
+\indexentry{Japan}{150}
+\indexentry{Eastman Kodak Company}{150}
+\indexentry{IBM}{150}
+\indexentry{Xerox}{150}
+\indexentry{computer}{150}
+\indexentry{Xerox}{150}
+\indexentry{Xerox}{151}
+\indexentry{Scientific Data Systems}{151}
+\indexentry{minicomputer}{151}
+\indexentry{Xerox}{151}
+\indexentry{Xerox}{151}
+\indexentry{Xerox}{151}
+\indexentry{Xerox!Palo Alto Research Center}{151}
+\indexentry{workstation}{151}
+\indexentry{Xerox}{151}
+\indexentry{computer}{151}
+\indexentry{Xerox}{151}
+\indexentry{Xerox!STAR computer}{151}
+\indexentry{workstation}{151}
+\indexentry{Xerox}{151}
+\indexentry{Xerox!STAR computer}{151}
+\indexentry{Xerox}{151}
+\indexentry{marketshare}{151}
+\indexentry{Xerox!copiers}{151}
+\indexentry{Xerox}{151}
+\indexentry{Fuji Xerox}{151}
+\indexentry{Xerox}{151}
+\indexentry{Xerox!copiers}{151}
+\indexentry{computer}{151}
+\indexentry{IBM}{151}
+\indexentry{communications}{151}
+\indexentry{Sun Microsystems Inc.}{151}
+\indexentry{Sun Microsystems Inc.}{151}
+\indexentry{workstation}{151}
+\indexentry{Sun Microsystems Inc.}{151}
+\indexentry{venture capital}{151}
+\indexentry{Sun Microsystems Inc.}{152}
+\indexentry{Joy, William N.}{152}
+\indexentry{University of California at Berkeley}{152}
+\indexentry{Sun Microsystems Inc.}{152}
+\indexentry{Joy, William N.}{152}
+\indexentry{UNIX operating system!4.2 BSD}{152}
+\indexentry{software}{152}
+\indexentry{Sun Microsystems Inc.}{152}
+\indexentry{Sun Microsystems Inc.}{152}
+\indexentry{Sun Microsystems Inc.}{152}
+\indexentry{workstation}{152}
+\indexentry{Digital Equipment Corporation}{152}
+\indexentry{Sun Microsystems Inc.}{152}
+\indexentry{Sun Microsystems Inc.}{152}
+\indexentry{Sun Microsystems Inc.}{152}
+\indexentry{Motorola}{152}
+\indexentry{computer!memory}{152}
+\indexentry{Sun Microsystems Inc.}{152}
+\indexentry{UNIX operating system}{152}
+\indexentry{UNIX operating system}{152}
+\indexentry{UNIX operating system!System V}{152}
+\indexentry{AT\&T}{152}
+\indexentry{workstation}{152}
+\indexentry{Sun Microsystems Inc.}{152}
+\indexentry{IBM}{152}
+\indexentry{computer!personal}{152}
+\indexentry{workstation}{152}
+\indexentry{IBM}{152}
+\indexentry{Sun Microsystems Inc.}{152}
+\indexentry{innovation}{152}
+\indexentry{IBM}{152}
+\indexentry{Sun Microsystems Inc.}{152}
+\indexentry{technology transfer}{152}
+\indexentry{war!Technology War}{152}
+\indexentry{information technology}{153}
+\indexentry{NEC}{153}
+\indexentry{Department of Justice}{153}
+\indexentry{Department of Commerce}{153}
+\indexentry{Norris, William C.}{153}
+\indexentry{Control Data Corp.}{153}
+\indexentry{capital}{153}
+\indexentry{Norris, William C.}{153}
+\indexentry{Inman, Admiral Bobby R.}{153}
+\indexentry{Central Intelligence Agency}{153}
+\indexentry{National Security Agency}{153}
+\indexentry{Inman, Admiral Bobby R.}{153}
+\indexentry{United States}{153}
+\indexentry{United States}{153}
+\indexentry{Inman, Admiral Bobby R.}{153}
+\indexentry{United States!Congress}{154}
+\indexentry{Inman, Admiral Bobby R.}{154}
+\indexentry{Norris, William C.}{154}
+\indexentry{microelectronics}{154}
+\indexentry{Microelectronics and Computer Technology Corporation}{154}
+\indexentry{Microelectronics and Computer Technology Corporation}{154}
+\indexentry{research and development}{154}
+\indexentry{Microelectronics and Computer Technology Corporation}{154}
+\indexentry{Microelectronics and Computer Technology Corporation}{154}
+\indexentry{artificial intelligence}{154}
+\indexentry{computer!architecture}{154}
+\indexentry{computer!architecture}{154}
+\indexentry{expert systems}{154}
+\indexentry{computer!architecture}{154}
+\indexentry{computer!architecture}{154}
+\indexentry{Microelectronics and Computer Technology Corporation}{154}
+\indexentry{computer-aided design}{154}
+\indexentry{Microelectronics and Computer Technology Corporation}{154}
+\indexentry{Microelectronics and Computer Technology Corporation}{154}
+\indexentry{software}{154}
+\indexentry{computer science}{154}
+\indexentry{Microelectronics and Computer Technology Corporation}{154}
+\indexentry{Microelectronics and Computer Technology Corporation}{154}
+\indexentry{Microelectronics and Computer Technology Corporation}{154}
+\indexentry{technology transfer}{154}
+\indexentry{Microelectronics and Computer Technology Corporation}{154}
+\indexentry{technology transfer}{154}
+\indexentry{Inman, Admiral Bobby R.}{155}
+\indexentry{Microelectronics and Computer Technology Corporation}{155}
+\indexentry{technology transfer}{155}
+\indexentry{Microelectronics and Computer Technology Corporation}{155}
+\indexentry{Inman, Admiral Bobby R.}{155}
+\indexentry{Microelectronics and Computer Technology Corporation}{155}
+\indexentry{Semiconductor Research Corporation}{155}
+\indexentry{microelectronics}{155}
+\indexentry{marketshare}{155}
+\indexentry{United States}{155}
+\indexentry{research and development}{155}
+\indexentry{Semiconductor Research Corporation}{155}
+\indexentry{Semiconductor Research Corporation}{155}
+\indexentry{Semiconductor Research Corporation}{155}
+\indexentry{Semiconductor Research Corporation}{155}
+\indexentry{patent}{155}
+\indexentry{microelectronics}{155}
+\indexentry{Microelectronics Center of North Carolina}{155}
+\indexentry{microelectronics}{155}
+\indexentry{Microelectronics Center of North Carolina}{155}
+\indexentry{Research Triangle Institute}{155}
+\indexentry{research and development}{155}
+\indexentry{computer science}{155}
+\indexentry{computer-aided design}{155}
+\indexentry{Microelectronics Center of North Carolina}{156}
+\indexentry{microelectronics}{156}
+\indexentry{computer!architecture}{156}
+\indexentry{computer!architecture}{156}
+\indexentry{Microelectronics Center of North Carolina}{156}
+\indexentry{Fifth Generation Computer Program}{156}
+\indexentry{Japan}{157}
+\indexentry{World War II}{157}
+\indexentry{Japan}{157}
+\indexentry{Japan}{157}
+\indexentry{Japan}{157}
+\indexentry{exports}{157}
+\indexentry{exports}{157}
+\indexentry{marketshare}{157}
+\indexentry{war!Technology War}{157}
+\indexentry{World War II}{157}
+\indexentry{Japan}{158}
+\indexentry{Ministry of Intl. Trade and Industry (MITI)}{158}
+\indexentry{Japan}{158}
+\indexentry{Ministry of Intl. Trade and Industry (MITI)}{158}
+\indexentry{Japan}{158}
+\indexentry{war!Technology War}{158}
+\indexentry{Ministry of Intl. Trade and Industry (MITI)}{158}
+\indexentry{war!Technology War}{158}
+\indexentry{robotics}{158}
+\indexentry{Ministry of Intl. Trade and Industry (MITI)}{158}
+\indexentry{research and development}{158}
+\indexentry{information technology}{158}
+\indexentry{Ministry of Intl. Trade and Industry (MITI)}{158}
+\indexentry{Japan}{158}
+\indexentry{Fujitsu}{158}
+\indexentry{Hitachi}{158}
+\indexentry{Mitsubishi Electric Company}{158}
+\indexentry{Matsushita Electric Industrial Co.}{158}
+\indexentry{NEC}{158}
+\indexentry{Toshiba}{158}
+\indexentry{Oki Electric Company}{158}
+\indexentry{Ministry of Intl. Trade and Industry (MITI)}{158}
+\indexentry{Ministry of Intl. Trade and Industry (MITI)}{158}
+\indexentry{capital}{158}
+\indexentry{Ministry of Intl. Trade and Industry (MITI)}{158}
+\indexentry{Ministry of Intl. Trade and Industry (MITI)}{158}
+\indexentry{steel}{158}
+\indexentry{Sumitomo Steel}{158}
+\indexentry{Ministry of Intl. Trade and Industry (MITI)}{159}
+\indexentry{marketshare}{159}
+\indexentry{steel}{159}
+\indexentry{Ministry of Intl. Trade and Industry (MITI)}{159}
+\indexentry{Toshiba}{159}
+\indexentry{NEC}{159}
+\indexentry{Mitsubishi Electric Company}{159}
+\indexentry{UNIVAC}{159}
+\indexentry{Oki Electric Company}{159}
+\indexentry{Ministry of Intl. Trade and Industry (MITI)}{159}
+\indexentry{NEC}{159}
+\indexentry{Ministry of Intl. Trade and Industry (MITI)}{159}
+\indexentry{NEC}{159}
+\indexentry{IBM}{159}
+\indexentry{Ministry of Intl. Trade and Industry (MITI)}{159}
+\indexentry{Ministry of Intl. Trade and Industry (MITI)}{159}
+\indexentry{Ministry of Education}{159}
+\indexentry{Ministry of Intl. Trade and Industry (MITI)}{159}
+\indexentry{University of Tokyo}{159}
+\indexentry{Keio University}{159}
+\indexentry{Kyoto University}{159}
+\indexentry{University of Tsukuba}{159}
+\indexentry{Ministry of Intl. Trade and Industry (MITI)}{159}
+\indexentry{Japan}{159}
+\indexentry{United States}{159}
+\indexentry{National Bureau of Standards}{159}
+\indexentry{Ministry of Intl. Trade and Industry (MITI)}{159}
+\indexentry{Ministry of Intl. Trade and Industry (MITI)}{159}
+\indexentry{Electro-Technical Laboratories}{159}
+\indexentry{Tsukuba}{159}
+\indexentry{Electro-Technical Laboratories}{159}
+\indexentry{Ministry of Intl. Trade and Industry (MITI)}{159}
+\indexentry{research and development}{159}
+\indexentry{Electro-Technical Laboratories}{159}
+\indexentry{National Bureau of Standards}{160}
+\indexentry{Los Alamos National Laboratories}{160}
+\indexentry{Electro-Technical Laboratories}{160}
+\indexentry{information technology}{160}
+\indexentry{computer science}{160}
+\indexentry{Electro-Technical Laboratories}{160}
+\indexentry{Ministry of Intl. Trade and Industry (MITI)}{160}
+\indexentry{Electro-Technical Laboratories}{160}
+\indexentry{Japan}{160}
+\indexentry{Ministry of Intl. Trade and Industry (MITI)}{160}
+\indexentry{Tsukuba}{160}
+\indexentry{Japan}{160}
+\indexentry{Tsukuba}{160}
+\indexentry{Ministry of Intl. Trade and Industry (MITI)}{160}
+\indexentry{information technology}{160}
+\indexentry{ICOT}{160}
+\indexentry{ICOT}{160}
+\indexentry{ICOT}{160}
+\indexentry{Electro-Communications Laboratories}{160}
+\indexentry{Nippon Telephone and Telegraph}{160}
+\indexentry{Electro-Technical Laboratories}{160}
+\indexentry{ICOT}{160}
+\indexentry{ICOT}{160}
+\indexentry{technology transfer}{160}
+\indexentry{ICOT}{160}
+\indexentry{ICOT}{160}
+\indexentry{technology transfer}{160}
+\indexentry{ICOT}{160}
+\indexentry{Toshiba}{161}
+\indexentry{ICOT}{161}
+\indexentry{Toshiba}{161}
+\indexentry{ICOT}{161}
+\indexentry{ICOT}{161}
+\indexentry{Ministry of Intl. Trade and Industry (MITI)}{161}
+\indexentry{ICOT}{161}
+\indexentry{ICOT}{161}
+\indexentry{Fifth Generation Computer Program}{161}
+\indexentry{ICOT}{161}
+\indexentry{computer}{161}
+\indexentry{knowledge engineering}{161}
+\indexentry{expert systems}{161}
+\indexentry{war!Technology War}{161}
+\indexentry{computer}{161}
+\indexentry{transistor}{161}
+\indexentry{transistor}{161}
+\indexentry{VLSI}{161}
+\indexentry{computer}{161}
+\indexentry{computer!architecture}{162}
+\indexentry{hardware}{162}
+\indexentry{software}{162}
+\indexentry{United States}{162}
+\indexentry{Europe}{162}
+\indexentry{VLSI}{162}
+\indexentry{computer-aided design}{162}
+\indexentry{ICOT}{162}
+\indexentry{Fuchi, Kazuhiro}{162}
+\indexentry{ICOT}{162}
+\indexentry{ICOT}{162}
+\indexentry{Ministry of Intl. Trade and Industry (MITI)}{162}
+\indexentry{hardware}{162}
+\indexentry{ICOT}{162}
+\indexentry{personal sequential inference machine}{162}
+\indexentry{machine inference}{162}
+\indexentry{personal sequential inference machine}{162}
+\indexentry{PROLOG}{162}
+\indexentry{personal sequential inference machine}{162}
+\indexentry{Mitsubishi Electric Company}{162}
+\indexentry{PROLOG}{162}
+\indexentry{PROLOG}{162}
+\indexentry{United States}{162}
+\indexentry{artificial intelligence}{162}
+\indexentry{United States}{162}
+\indexentry{PROLOG}{162}
+\indexentry{artificial intelligence}{162}
+\indexentry{Japan}{162}
+\indexentry{ICOT}{162}
+\indexentry{ICOT}{162}
+\indexentry{Fuchi, Kazuhiro}{163}
+\indexentry{ICOT}{163}
+\indexentry{Moto-Oka, Tohru}{163}
+\indexentry{artificial intelligence}{163}
+\indexentry{Japan}{163}
+\indexentry{artificial intelligence}{163}
+\indexentry{artificial intelligence}{163}
+\indexentry{ICOT}{163}
+\indexentry{ICOT}{163}
+\indexentry{National Science Foundation}{163}
+\indexentry{ICOT}{163}
+\indexentry{ICOT}{163}
+\indexentry{ICOT}{163}
+\indexentry{ICOT}{163}
+\indexentry{National Science Foundation}{163}
+\indexentry{ICOT}{163}
+\indexentry{United States}{163}
+\indexentry{Fifth Generation Computer Program}{163}
+\indexentry{Ministry of Intl. Trade and Industry (MITI)}{163}
+\indexentry{information technology}{163}
+\indexentry{Ministry of Intl. Trade and Industry (MITI)}{163}
+\indexentry{information technology}{163}
+\indexentry{Japan!National Superspeed Computer Project}{163}
+\indexentry{computer}{163}
+\indexentry{computer!memory}{164}
+\indexentry{Ministry of Intl. Trade and Industry (MITI)}{164}
+\indexentry{Fujitsu}{164}
+\indexentry{Hitachi}{164}
+\indexentry{computer!architecture}{164}
+\indexentry{computer!architecture}{164}
+\indexentry{Mitsubishi Electric Company}{164}
+\indexentry{gallium arsenide}{164}
+\indexentry{NEC}{164}
+\indexentry{Oki Electric Company}{164}
+\indexentry{computer!architecture}{164}
+\indexentry{computer!architecture}{164}
+\indexentry{Toshiba}{164}
+\indexentry{Ministry of Intl. Trade and Industry (MITI)}{164}
+\indexentry{Ministry of Intl. Trade and Industry (MITI)}{164}
+\indexentry{Ministry of Intl. Trade and Industry (MITI)}{164}
+\indexentry{Japan!National Superspeed Computer Project}{164}
+\indexentry{Ministry of Intl. Trade and Industry (MITI)}{164}
+\indexentry{Ministry of Intl. Trade and Industry (MITI)}{164}
+\indexentry{Electro-Technical Laboratories}{164}
+\indexentry{Mitsubishi Electric Company}{164}
+\indexentry{supercomputer}{165}
+\indexentry{Aiso, Hideo}{165}
+\indexentry{Keio University}{165}
+\indexentry{supercomputer}{165}
+\indexentry{Ministry of Intl. Trade and Industry (MITI)}{165}
+\indexentry{Moto-Oka, Tohru}{165}
+\indexentry{Fifth Generation Computer Program}{165}
+\indexentry{Japan!Next Generation Industries Program}{165}
+\indexentry{microelectronics}{165}
+\indexentry{Sigma Program}{165}
+\indexentry{Ministry of Intl. Trade and Industry (MITI)}{165}
+\indexentry{software}{165}
+\indexentry{software}{165}
+\indexentry{Japan}{165}
+\indexentry{software}{165}
+\indexentry{Japan}{165}
+\indexentry{Ministry of Intl. Trade and Industry (MITI)}{165}
+\indexentry{Sigma Program}{165}
+\indexentry{software!engineering}{165}
+\indexentry{software}{165}
+\indexentry{Sigma Program}{165}
+\indexentry{software}{165}
+\indexentry{Japan}{165}
+\indexentry{software}{165}
+\indexentry{Sigma Program}{165}
+\indexentry{Japan}{165}
+\indexentry{software!market!Japanese}{165}
+\indexentry{Japan}{166}
+\indexentry{software!engineering}{166}
+\indexentry{Sigma Program}{166}
+\indexentry{Japan}{166}
+\indexentry{software!market!Japanese}{166}
+\indexentry{war!Technology War}{166}
+\indexentry{optoelectronics!Joint Research Laboratory}{166}
+\indexentry{Japan}{166}
+\indexentry{Ministry of Intl. Trade and Industry (MITI)}{166}
+\indexentry{optoelectronics!Joint Research Laboratory}{166}
+\indexentry{ICOT}{166}
+\indexentry{JTECH}{166}
+\indexentry{optoelectronics}{166}
+\indexentry{Japan}{166}
+\indexentry{Japan}{166}
+\indexentry{Mu Program}{166}
+\indexentry{Japan!Science and Technology Agency}{166}
+\indexentry{Mu Program}{166}
+\indexentry{Japan}{166}
+\indexentry{Ministry of Intl. Trade and Industry (MITI)}{167}
+\indexentry{Fujitsu}{167}
+\indexentry{Japan}{167}
+\indexentry{marketshare}{167}
+\indexentry{Fujitsu}{167}
+\indexentry{research and development}{167}
+\indexentry{Fujitsu}{167}
+\indexentry{research and development}{167}
+\indexentry{computer!architecture}{167}
+\indexentry{computer!architecture}{167}
+\indexentry{artificial intelligence}{167}
+\indexentry{software!engineering}{167}
+\indexentry{knowledge engineering}{167}
+\indexentry{computer!architecture}{167}
+\indexentry{computer!architecture}{167}
+\indexentry{Fujitsu}{167}
+\indexentry{IBM}{167}
+\indexentry{Japan}{167}
+\indexentry{Fujitsu}{167}
+\indexentry{hardware}{167}
+\indexentry{yen}{167}
+\indexentry{computer}{167}
+\indexentry{Hitachi}{167}
+\indexentry{Fujitsu}{167}
+\indexentry{software!market!Japanese}{167}
+\indexentry{Japan}{167}
+\indexentry{United States}{167}
+\indexentry{Fujitsu}{167}
+\indexentry{TRW}{167}
+\indexentry{Fairchild Camera and Instrument Corporation}{167}
+\indexentry{microelectronics}{167}
+\indexentry{GTE}{167}
+\indexentry{Fujitsu}{167}
+\indexentry{communications}{167}
+\indexentry{communications}{167}
+\indexentry{Fujitsu}{168}
+\indexentry{Ministry of Intl. Trade and Industry (MITI)}{168}
+\indexentry{computer}{168}
+\indexentry{IBM!compatibility}{168}
+\indexentry{IBM}{168}
+\indexentry{computer!architecture}{168}
+\indexentry{supercomputer}{168}
+\indexentry{Fujitsu}{168}
+\indexentry{IBM}{168}
+\indexentry{NEC}{168}
+\indexentry{communications}{168}
+\indexentry{marketshare}{168}
+\indexentry{Japan}{168}
+\indexentry{NEC}{168}
+\indexentry{Honeywell}{168}
+\indexentry{Bull}{168}
+\indexentry{NEC}{168}
+\indexentry{IBM!compatibility}{168}
+\indexentry{IBM}{168}
+\indexentry{Nippon Telephone and Telegraph}{168}
+\indexentry{NEC}{168}
+\indexentry{communications}{168}
+\indexentry{NEC}{168}
+\indexentry{software!engineering}{168}
+\indexentry{software}{168}
+\indexentry{NEC}{168}
+\indexentry{software}{168}
+\indexentry{NEC}{168}
+\indexentry{UNIX operating system}{168}
+\indexentry{Digital Equipment Corporation}{168}
+\indexentry{computer!VAX}{168}
+\indexentry{Digital Equipment Corporation!VAX}{168}
+\indexentry{United States}{168}
+\indexentry{Hitachi}{168}
+\indexentry{supercomputer}{168}
+\indexentry{marketshare}{168}
+\indexentry{IBM}{168}
+\indexentry{marketshare}{168}
+\indexentry{Japan}{168}
+\indexentry{computer}{168}
+\indexentry{Hitachi}{168}
+\indexentry{Hitachi}{168}
+\indexentry{Hitachi}{169}
+\indexentry{information technology}{169}
+\indexentry{computer!architecture}{169}
+\indexentry{computer!architecture}{169}
+\indexentry{knowledge engineering}{169}
+\indexentry{Hitachi}{169}
+\indexentry{intellectual property!laws}{169}
+\indexentry{intellectual property!rights}{169}
+\indexentry{war!Technology War}{169}
+\indexentry{Stanford University}{169}
+\indexentry{hardware}{169}
+\indexentry{software}{169}
+\indexentry{IBM}{169}
+\indexentry{IBM}{169}
+\indexentry{Federal Bureau of Investigation}{169}
+\indexentry{Federal Bureau of Investigation}{169}
+\indexentry{Hitachi}{169}
+\indexentry{United States}{169}
+\indexentry{Japan}{169}
+\indexentry{IBM}{169}
+\indexentry{Hitachi}{169}
+\indexentry{IBM}{169}
+\indexentry{Hitachi}{169}
+\indexentry{IBM}{169}
+\indexentry{Hitachi}{169}
+\indexentry{Hitachi}{169}
+\indexentry{Toshiba}{169}
+\indexentry{Toshiba}{169}
+\indexentry{research and development}{170}
+\indexentry{Toshiba}{170}
+\indexentry{integrated circuits}{170}
+\indexentry{computer-aided design}{170}
+\indexentry{computer-aided manufacturing}{170}
+\indexentry{software!engineering}{170}
+\indexentry{Toshiba}{170}
+\indexentry{Mitsubishi Electric Company}{170}
+\indexentry{Ministry of Intl. Trade and Industry (MITI)}{170}
+\indexentry{ICOT}{170}
+\indexentry{Mitsubishi Electric Company}{170}
+\indexentry{software!engineering}{170}
+\indexentry{Mitsubishi Electric Company}{170}
+\indexentry{software!engineering}{170}
+\indexentry{Mitsubishi Electric Company}{170}
+\indexentry{Mitsubishi Electric Company}{170}
+\indexentry{personal sequential inference machine}{170}
+\indexentry{Japan}{170}
+\indexentry{ICOT}{170}
+\indexentry{workstation}{170}
+\indexentry{personal sequential inference machine}{170}
+\indexentry{VLSI}{170}
+\indexentry{Nippon Telephone and Telegraph}{171}
+\indexentry{information technology}{171}
+\indexentry{Nippon Telephone and Telegraph}{171}
+\indexentry{communications}{171}
+\indexentry{Nippon Telephone and Telegraph}{171}
+\indexentry{Bell Laboratories}{171}
+\indexentry{Nippon Telephone and Telegraph}{171}
+\indexentry{Electro-Communications Laboratories}{171}
+\indexentry{Electro-Communications Laboratories}{171}
+\indexentry{Bell Laboratories}{171}
+\indexentry{Ministry of Intl. Trade and Industry (MITI)}{171}
+\indexentry{Electro-Communications Laboratories}{171}
+\indexentry{Ministry of Intl. Trade and Industry (MITI)}{171}
+\indexentry{Nippon Telephone and Telegraph}{171}
+\indexentry{communications}{171}
+\indexentry{Electro-Communications Laboratories}{171}
+\indexentry{Nippon Telephone and Telegraph}{171}
+\indexentry{Nippon Telephone and Telegraph!information network system}{171}
+\indexentry{Nippon Telephone and Telegraph!information network system}{171}
+\indexentry{VLSI}{171}
+\indexentry{Nippon Telephone and Telegraph}{171}
+\indexentry{Nippon Telephone and Telegraph!information network system}{171}
+\indexentry{Japan}{171}
+\indexentry{Nippon Telephone and Telegraph}{171}
+\indexentry{Nippon Telephone and Telegraph!information network system}{171}
+\indexentry{optoelectronics}{171}
+\indexentry{Nippon Telephone and Telegraph!information network system}{172}
+\indexentry{United States}{172}
+\indexentry{France}{172}
+\indexentry{Nippon Telephone and Telegraph}{172}
+\indexentry{research and development}{172}
+\indexentry{computer}{172}
+\indexentry{telecommunications}{172}
+\indexentry{Electro-Communications Laboratories}{172}
+\indexentry{communications}{172}
+\indexentry{microelectronics}{172}
+\indexentry{VLSI}{172}
+\indexentry{computer-aided design}{172}
+\indexentry{gallium arsenide}{172}
+\indexentry{Japan}{172}
+\indexentry{marketshare}{172}
+\indexentry{Japan}{172}
+\indexentry{Eastman Kodak Company}{172}
+\indexentry{Xerox}{172}
+\indexentry{Ministry of Intl. Trade and Industry (MITI)}{173}
+\indexentry{ICOT}{173}
+\indexentry{Fujitsu}{173}
+\indexentry{NEC}{173}
+\indexentry{Hitachi}{173}
+\indexentry{Japan}{173}
+\indexentry{Xerox}{173}
+\indexentry{Xerox}{173}
+\indexentry{Xerox!copiers}{173}
+\indexentry{microelectronics}{173}
+\indexentry{computer-integrated manufacturing}{173}
+\indexentry{Japan}{173}
+\indexentry{General Motors}{173}
+\indexentry{automobile}{173}
+\indexentry{Japan}{173}
+\indexentry{Boeing Aircraft Corporation}{173}
+\indexentry{information technology}{173}
+\indexentry{Japan}{173}
+\indexentry{research and development}{173}
+\indexentry{United States}{173}
+\indexentry{war!Technology War}{174}
+\indexentry{Japan}{174}
+\indexentry{yen}{174}
+\indexentry{exports}{174}
+\indexentry{unemployment}{174}
+\indexentry{Asia}{174}
+\indexentry{Japan}{174}
+\indexentry{software}{174}
+\indexentry{workstation}{174}
+\indexentry{computer!personal}{174}
+\indexentry{Apple Computer Company}{174}
+\indexentry{Sun Microsystems Inc.}{174}
+\indexentry{Japan}{174}
+\indexentry{Japan}{174}
+\indexentry{war!Technology War}{175}
+\indexentry{United States}{175}
+\indexentry{Japan}{175}
+\indexentry{Europe}{175}
+\indexentry{Asia}{175}
+\indexentry{Europe}{175}
+\indexentry{standards}{175}
+\indexentry{Industrial Revolution}{175}
+\indexentry{war!Technology War}{175}
+\indexentry{Asia}{175}
+\indexentry{marketshare}{175}
+\indexentry{Europe}{176}
+\indexentry{Japan}{176}
+\indexentry{Fifth Generation Computer Program}{176}
+\indexentry{ESPRIT}{176}
+\indexentry{ESPRIT}{176}
+\indexentry{Europe}{176}
+\indexentry{information technology}{176}
+\indexentry{ESPRIT}{176}
+\indexentry{Cie. Generale de L'\'Electricit\'e}{176}
+\indexentry{information technology}{176}
+\indexentry{European Economic Community}{176}
+\indexentry{Europe}{176}
+\indexentry{Japan}{176}
+\indexentry{Europe}{176}
+\indexentry{ESPRIT}{176}
+\indexentry{microelectronics}{176}
+\indexentry{software}{176}
+\indexentry{computer-integrated manufacturing}{176}
+\indexentry{ESPRIT}{176}
+\indexentry{ESPRIT}{176}
+\indexentry{European Economic Community}{176}
+\indexentry{ESPRIT}{176}
+\indexentry{Europe}{177}
+\indexentry{ESPRIT}{177}
+\indexentry{European Economic Community}{177}
+\indexentry{Europe}{177}
+\indexentry{ESPRIT}{177}
+\indexentry{Europe}{177}
+\indexentry{war!Technology War}{177}
+\indexentry{Microelectronics and Computer Technology Corporation}{177}
+\indexentry{European Economic Community}{177}
+\indexentry{ESPRIT}{177}
+\indexentry{European Economic Community}{177}
+\indexentry{Austria}{177}
+\indexentry{Finland}{177}
+\indexentry{Iceland}{177}
+\indexentry{Norway}{177}
+\indexentry{Sweden}{177}
+\indexentry{Switzerland}{177}
+\indexentry{Jefferson, Thomas}{177}
+\indexentry{ESPRIT}{177}
+\indexentry{ESPRIT}{177}
+\indexentry{ESPRIT}{177}
+\indexentry{microelectronics}{177}
+\indexentry{standards}{177}
+\indexentry{standards}{177}
+\indexentry{standards}{177}
+\indexentry{standards}{177}
+\indexentry{Europe}{177}
+\indexentry{ESPRIT}{177}
+\indexentry{software!engineering}{177}
+\indexentry{ESPRIT}{177}
+\indexentry{VLSI}{177}
+\indexentry{Europe}{177}
+\indexentry{ESPRIT}{178}
+\indexentry{Europe}{178}
+\indexentry{telecommunications}{178}
+\indexentry{Europe}{178}
+\indexentry{RACE}{178}
+\indexentry{Europe}{178}
+\indexentry{Europe}{178}
+\indexentry{Nippon Telephone and Telegraph}{178}
+\indexentry{Nippon Telephone and Telegraph!information network system}{178}
+\indexentry{Europe}{178}
+\indexentry{RACE}{178}
+\indexentry{ESPRIT}{178}
+\indexentry{communications}{178}
+\indexentry{Europe}{178}
+\indexentry{Europe}{178}
+\indexentry{war!Technology War}{178}
+\indexentry{ECRC}{178}
+\indexentry{Eureka}{178}
+\indexentry{Bull}{178}
+\indexentry{International Computers Ltd.}{178}
+\indexentry{Siemens}{178}
+\indexentry{artificial intelligence}{178}
+\indexentry{expert systems}{178}
+\indexentry{ECRC}{178}
+\indexentry{ESPRIT}{178}
+\indexentry{ECRC}{179}
+\indexentry{Inst. for New Generation Computer Technology}{179}
+\indexentry{ECRC}{179}
+\indexentry{Gallaire, Herv\'e}{179}
+\indexentry{United States}{179}
+\indexentry{ECRC}{179}
+\indexentry{ECRC}{179}
+\indexentry{knowledge-based systems}{179}
+\indexentry{expert systems}{179}
+\indexentry{computer!architecture}{179}
+\indexentry{computer!architecture}{179}
+\indexentry{Microelectronics and Computer Technology Corporation}{179}
+\indexentry{Inst. for New Generation Computer Technology}{179}
+\indexentry{technology transfer}{179}
+\indexentry{Europe}{179}
+\indexentry{United States}{179}
+\indexentry{Eureka}{179}
+\indexentry{Europe}{179}
+\indexentry{Strategic Defense Initiative}{179}
+\indexentry{United States}{179}
+\indexentry{Europe}{179}
+\indexentry{United States}{179}
+\indexentry{Strategic Defense Initiative}{179}
+\indexentry{Europe}{179}
+\indexentry{Strategic Defense Initiative}{179}
+\indexentry{Eureka}{179}
+\indexentry{Europe}{179}
+\indexentry{Strategic Defense Initiative}{179}
+\indexentry{Europe}{180}
+\indexentry{information technology}{180}
+\indexentry{North Atlantic Treaty Organization}{180}
+\indexentry{France}{180}
+\indexentry{Strategic Defense Initiative}{180}
+\indexentry{Strategic Defense Initiative}{180}
+\indexentry{optoelectronics}{180}
+\indexentry{artificial intelligence}{180}
+\indexentry{microelectronics}{180}
+\indexentry{Eurobot}{180}
+\indexentry{robotics}{180}
+\indexentry{Eurocom}{180}
+\indexentry{communications}{180}
+\indexentry{France}{180}
+\indexentry{Germany}{180}
+\indexentry{Europe}{180}
+\indexentry{Strategic Defense Initiative}{180}
+\indexentry{Germany}{180}
+\indexentry{Eureka}{180}
+\indexentry{Germany}{180}
+\indexentry{France}{180}
+\indexentry{Great Britain}{180}
+\indexentry{Eureka}{180}
+\indexentry{Soviet Union}{180}
+\indexentry{Eureka}{180}
+\indexentry{Eureka}{180}
+\indexentry{Coordinating Committee}{180}
+\indexentry{Japan}{180}
+\indexentry{exports}{180}
+\indexentry{Eureka}{180}
+\indexentry{supercomputer}{180}
+\indexentry{Europe}{181}
+\indexentry{ESPRIT}{181}
+\indexentry{research and development}{181}
+\indexentry{information technology}{181}
+\indexentry{ESPRIT}{181}
+\indexentry{Alvey program}{181}
+\indexentry{Great Britain}{181}
+\indexentry{France}{181}
+\indexentry{Fifth Generation Computer Program}{181}
+\indexentry{information technology}{181}
+\indexentry{Great Britain}{181}
+\indexentry{Alvey program}{181}
+\indexentry{Great Britain}{182}
+\indexentry{Alvey program}{182}
+\indexentry{Alvey, John}{182}
+\indexentry{British Telecom}{182}
+\indexentry{Great Britain!Department of Trade and Industry}{182}
+\indexentry{Great Britain!Ministry of Defense}{182}
+\indexentry{Alvey program}{182}
+\indexentry{Ministry of Intl. Trade and Industry (MITI)}{182}
+\indexentry{Inst. for New Generation Computer Technology}{182}
+\indexentry{DARPA}{182}
+\indexentry{Alvey program}{182}
+\indexentry{software!engineering}{182}
+\indexentry{VLSI}{182}
+\indexentry{knowledge-based systems}{182}
+\indexentry{microelectronics}{182}
+\indexentry{integrated circuits}{182}
+\indexentry{knowledge-based systems}{182}
+\indexentry{gallium arsenide}{182}
+\indexentry{VLSI}{182}
+\indexentry{Great Britain!Ministry of Defense}{182}
+\indexentry{Great Britain!Very High Performance Integrated Circuit Program}{182}
+\indexentry{VLSI}{182}
+\indexentry{Alvey program}{182}
+\indexentry{Alvey program}{182}
+\indexentry{Great Britain}{183}
+\indexentry{United States}{183}
+\indexentry{Japan}{183}
+\indexentry{war!Technology War}{183}
+\indexentry{International Computers Ltd.}{183}
+\indexentry{International Computers Ltd.}{183}
+\indexentry{Great Britain}{183}
+\indexentry{International Telephone and Telegraph}{183}
+\indexentry{International Computers Ltd.}{183}
+\indexentry{International Computers Ltd.}{183}
+\indexentry{International Computers Ltd.}{183}
+\indexentry{Great Britain}{183}
+\indexentry{North Atlantic Treaty Organization}{183}
+\indexentry{Alvey program}{183}
+\indexentry{ESPRIT}{183}
+\indexentry{ECRC}{183}
+\indexentry{computer-aided design}{183}
+\indexentry{International Computers Ltd.}{183}
+\indexentry{innovation}{183}
+\indexentry{marketshare}{183}
+\indexentry{General Electric Company (UK)}{183}
+\indexentry{General Electric Company (UK)}{183}
+\indexentry{General Electric Company (UK)}{183}
+\indexentry{General Electric Company (UK)}{184}
+\indexentry{VLSI}{184}
+\indexentry{gallium arsenide}{184}
+\indexentry{artificial intelligence}{184}
+\indexentry{software!engineering}{184}
+\indexentry{computer science}{184}
+\indexentry{General Electric Company (UK)}{184}
+\indexentry{Great Britain}{184}
+\indexentry{Plessey Company Ltd.}{184}
+\indexentry{communications}{184}
+\indexentry{Ferranti}{184}
+\indexentry{INMOS}{184}
+\indexentry{Thorn EMI}{184}
+\indexentry{Great Britain}{184}
+\indexentry{microelectronics}{184}
+\indexentry{INMOS}{184}
+\indexentry{United States}{184}
+\indexentry{Great Britain}{184}
+\indexentry{INMOS}{184}
+\indexentry{RAM}{184}
+\indexentry{United States}{184}
+\indexentry{information technology}{184}
+\indexentry{Mitterrand, President Fran\c cois}{184}
+\indexentry{France}{184}
+\indexentry{France}{185}
+\indexentry{Chirac, Premier Jacques}{185}
+\indexentry{denationalization}{185}
+\indexentry{privatization}{185}
+\indexentry{IBM}{185}
+\indexentry{PTT}{185}
+\indexentry{AT\&T}{185}
+\indexentry{Nippon Telephone and Telegraph}{185}
+\indexentry{British Telecom}{185}
+\indexentry{France}{185}
+\indexentry{Groupe de Recherche Coordonn\'e}{185}
+\indexentry{Centre National de Recherche Scientifique}{185}
+\indexentry{Bull}{185}
+\indexentry{Cie. Generale de L'\'Electricit\'e}{185}
+\indexentry{Thompson-Brandt}{185}
+\indexentry{robotics}{185}
+\indexentry{relational database}{185}
+\indexentry{knowledge-based systems}{185}
+\indexentry{artificial intelligence}{185}
+\indexentry{software!engineering}{185}
+\indexentry{France!Ministry of Defense}{185}
+\indexentry{Direction de Recherche d'\'Etudes et Technique}{185}
+\indexentry{DARPA}{185}
+\indexentry{United States}{185}
+\indexentry{Nippon Telephone and Telegraph!information network system}{185}
+\indexentry{software}{186}
+\indexentry{Colmerauer, Alain}{186}
+\indexentry{PROLOG}{186}
+\indexentry{Ichbiah, Jean}{186}
+\indexentry{Ada}{186}
+\indexentry{France}{186}
+\indexentry{telecommunications}{186}
+\indexentry{United States}{186}
+\indexentry{information technology}{186}
+\indexentry{Mitterrand, President Fran\c cois}{186}
+\indexentry{research and development}{186}
+\indexentry{research and development}{186}
+\indexentry{de Vignemont, Minister C.}{186}
+\indexentry{de Vignemont, Minister C.}{186}
+\indexentry{France}{186}
+\indexentry{war!Technology War}{186}
+\indexentry{Bull}{186}
+\indexentry{International Computers Ltd.}{186}
+\indexentry{Great Britain}{186}
+\indexentry{Siemens}{186}
+\indexentry{Germany}{186}
+\indexentry{Bull}{186}
+\indexentry{Bull}{186}
+\indexentry{IBM}{186}
+\indexentry{IBM}{186}
+\indexentry{software}{186}
+\indexentry{Bull}{187}
+\indexentry{Stern, Jacques}{187}
+\indexentry{Bull}{187}
+\indexentry{Honeywell}{187}
+\indexentry{NEC}{187}
+\indexentry{research and development}{187}
+\indexentry{Bull}{187}
+\indexentry{research and development}{187}
+\indexentry{Bull}{187}
+\indexentry{privatization}{187}
+\indexentry{Bull}{187}
+\indexentry{Germany}{187}
+\indexentry{expert systems}{187}
+\indexentry{robotics}{187}
+\indexentry{computer!architecture}{187}
+\indexentry{computer!architecture}{187}
+\indexentry{expert systems}{187}
+\indexentry{Nixdorf Computers}{187}
+\indexentry{Siemens}{187}
+\indexentry{expert systems}{187}
+\indexentry{Germany!BMFT}{187}
+\indexentry{Germany}{187}
+\indexentry{Germany}{187}
+\indexentry{communications}{187}
+\indexentry{Germany!Bundespost}{188}
+\indexentry{telecommunications}{188}
+\indexentry{videoconferencing}{188}
+\indexentry{Germany}{188}
+\indexentry{Germany}{188}
+\indexentry{war!Technology War}{188}
+\indexentry{physics!nuclear}{188}
+\indexentry{Beckurts, Karl Heinz}{188}
+\indexentry{Siemens}{188}
+\indexentry{Strategic Defense Initiative}{188}
+\indexentry{Dornier}{188}
+\indexentry{Sperry Univac}{188}
+\indexentry{Strategic Defense Initiative}{188}
+\indexentry{Siemens}{188}
+\indexentry{Siemens}{188}
+\indexentry{communications}{188}
+\indexentry{war!Technology War}{188}
+\indexentry{IBM}{188}
+\indexentry{Europe}{188}
+\indexentry{Siemens}{188}
+\indexentry{Germany}{188}
+\indexentry{research and development}{188}
+\indexentry{Germany!BMFT}{188}
+\indexentry{GTE}{188}
+\indexentry{communications}{188}
+\indexentry{GTE}{188}
+\indexentry{Siemens}{188}
+\indexentry{GTE}{188}
+\indexentry{Italy}{188}
+\indexentry{Belgium}{188}
+\indexentry{Taiwan}{188}
+\indexentry{Siemens}{188}
+\indexentry{ECRC}{188}
+\indexentry{ESPRIT}{188}
+\indexentry{computer!architecture}{188}
+\indexentry{computer!architecture}{188}
+\indexentry{computer!personal}{188}
+\indexentry{VLSI}{188}
+\indexentry{Siemens}{188}
+\indexentry{bit}{188}
+\indexentry{RAM}{188}
+\indexentry{bit}{189}
+\indexentry{Siemens}{189}
+\indexentry{workstation}{189}
+\indexentry{Siemens}{189}
+\indexentry{information technology}{189}
+\indexentry{Europe}{189}
+\indexentry{marketshare}{189}
+\indexentry{Nixdorf Computers}{189}
+\indexentry{Siemens}{189}
+\indexentry{Germany}{189}
+\indexentry{war!Technology War}{189}
+\indexentry{war!Technology War}{189}
+\indexentry{Europe}{189}
+\indexentry{Philips' Gloeilampenfabrieken}{189}
+\indexentry{NEC}{189}
+\indexentry{Philips' Gloeilampenfabrieken}{189}
+\indexentry{Europe}{189}
+\indexentry{microelectronics}{189}
+\indexentry{ESPRIT}{189}
+\indexentry{Siemens}{189}
+\indexentry{Philips' Gloeilampenfabrieken}{189}
+\indexentry{Europe}{189}
+\indexentry{United States}{189}
+\indexentry{Olivetti SPA}{189}
+\indexentry{Siemens}{189}
+\indexentry{Olivetti SPA}{189}
+\indexentry{Nixdorf Computers}{189}
+\indexentry{AEG-Telefunken AG}{189}
+\indexentry{ESPRIT}{189}
+\indexentry{Europe}{189}
+\indexentry{International Computers Ltd.}{190}
+\indexentry{Great Britain}{190}
+\indexentry{Asia}{190}
+\indexentry{Republic of Korea}{190}
+\indexentry{Taiwan}{190}
+\indexentry{Singapore}{190}
+\indexentry{Malaysia}{190}
+\indexentry{Japan}{190}
+\indexentry{China}{190}
+\indexentry{Big Dragon}{190}
+\indexentry{China}{190}
+\indexentry{war!Technology War}{190}
+\indexentry{China}{190}
+\indexentry{China}{190}
+\indexentry{China}{190}
+\indexentry{Big Dragon}{190}
+\indexentry{education}{190}
+\indexentry{China}{190}
+\indexentry{China}{190}
+\indexentry{China!Cultural Revolution}{190}
+\indexentry{China}{190}
+\indexentry{China!Cultural Revolution}{190}
+\indexentry{China}{190}
+\indexentry{China}{191}
+\indexentry{gross national product}{191}
+\indexentry{China}{191}
+\indexentry{research and development}{191}
+\indexentry{Soviet Union}{191}
+\indexentry{China}{191}
+\indexentry{venture capital}{191}
+\indexentry{venture capital}{191}
+\indexentry{China}{191}
+\indexentry{China}{191}
+\indexentry{Japan}{191}
+\indexentry{patent!law}{191}
+\indexentry{China}{191}
+\indexentry{exports}{191}
+\indexentry{China}{192}
+\indexentry{China}{192}
+\indexentry{China}{192}
+\indexentry{China}{192}
+\indexentry{China}{192}
+\indexentry{Republic of Korea}{192}
+\indexentry{Little Dragons}{192}
+\indexentry{China}{192}
+\indexentry{Big Dragon}{192}
+\indexentry{Republic of Korea}{192}
+\indexentry{Singapore}{192}
+\indexentry{Taiwan}{192}
+\indexentry{Hong Kong}{192}
+\indexentry{Little Dragons}{192}
+\indexentry{Little Dragons}{192}
+\indexentry{information technology}{192}
+\indexentry{Republic of Korea}{192}
+\indexentry{Japan}{192}
+\indexentry{United States}{192}
+\indexentry{gross national product}{192}
+\indexentry{Singapore}{192}
+\indexentry{Republic of Korea}{192}
+\indexentry{Republic of Korea}{193}
+\indexentry{computer}{193}
+\indexentry{automobile}{193}
+\indexentry{automobile}{193}
+\indexentry{United States}{193}
+\indexentry{Republic of Korea}{193}
+\indexentry{automobile}{193}
+\indexentry{Japan}{193}
+\indexentry{Republic of Korea}{193}
+\indexentry{automobile}{193}
+\indexentry{computer!personal}{193}
+\indexentry{microelectronics}{193}
+\indexentry{microelectronics}{193}
+\indexentry{Republic of Korea}{193}
+\indexentry{war!Technology War}{193}
+\indexentry{microelectronics}{193}
+\indexentry{International Telephone and Telegraph}{193}
+\indexentry{VLSI}{193}
+\indexentry{Republic of Korea}{193}
+\indexentry{Daewoo Telecom}{193}
+\indexentry{ZyMos}{193}
+\indexentry{microelectronics}{193}
+\indexentry{automobile}{193}
+\indexentry{dynamic RAM}{193}
+\indexentry{Republic of Korea}{193}
+\indexentry{Japan}{193}
+\indexentry{capital}{193}
+\indexentry{standard of living}{193}
+\indexentry{Republic of Korea}{193}
+\indexentry{Republic of Korea}{194}
+\indexentry{Republic of Korea}{194}
+\indexentry{intellectual property}{194}
+\indexentry{intellectual property!rights}{194}
+\indexentry{Singapore}{194}
+\indexentry{Singapore}{194}
+\indexentry{standard of living}{194}
+\indexentry{information technology}{194}
+\indexentry{robotics}{194}
+\indexentry{artificial intelligence}{194}
+\indexentry{microelectronics}{194}
+\indexentry{optics}{194}
+\indexentry{communications}{194}
+\indexentry{information technology}{194}
+\indexentry{information technology}{194}
+\indexentry{Singapore}{194}
+\indexentry{information technology}{194}
+\indexentry{Singapore}{194}
+\indexentry{Singapore!National Computer Board}{194}
+\indexentry{telecommunications}{194}
+\indexentry{Singapore}{194}
+\indexentry{Singapore}{194}
+\indexentry{Ministry of Intl. Trade and Industry (MITI)}{194}
+\indexentry{Japan}{194}
+\indexentry{software}{194}
+\indexentry{Singapore}{194}
+\indexentry{knowledge-based systems}{194}
+\indexentry{expert systems}{194}
+\indexentry{computer-aided design}{195}
+\indexentry{computer-aided manufacturing}{195}
+\indexentry{telecommunications}{195}
+\indexentry{computer!literacy}{195}
+\indexentry{Singapore}{195}
+\indexentry{Singapore}{195}
+\indexentry{research and development}{195}
+\indexentry{gross national product}{195}
+\indexentry{United States}{195}
+\indexentry{Singapore}{195}
+\indexentry{scientists and engineers!demographics of}{195}
+\indexentry{United States}{195}
+\indexentry{Singapore}{195}
+\indexentry{Singapore}{195}
+\indexentry{Japan}{195}
+\indexentry{Asia}{195}
+\indexentry{Taiwan}{195}
+\indexentry{Singapore}{195}
+\indexentry{Little Dragons}{195}
+\indexentry{Israel}{195}
+\indexentry{Taiwan}{195}
+\indexentry{Taiwan}{195}
+\indexentry{software}{195}
+\indexentry{VLSI}{195}
+\indexentry{information technology}{195}
+\indexentry{software}{195}
+\indexentry{Taiwan}{195}
+\indexentry{software!market}{195}
+\indexentry{Hong Kong}{195}
+\indexentry{China}{195}
+\indexentry{Little Dragons}{195}
+\indexentry{Asia}{195}
+\indexentry{Hong Kong}{196}
+\indexentry{China}{196}
+\indexentry{China}{196}
+\indexentry{Little Dragons}{196}
+\indexentry{China}{196}
+\indexentry{Singapore}{196}
+\indexentry{Hong Kong}{196}
+\indexentry{war!Technology War}{196}
+\indexentry{Hong Kong}{196}
+\indexentry{United States}{196}
+\indexentry{Apple Computer Company}{196}
+\indexentry{Hong Kong}{196}
+\indexentry{copyright}{196}
+\indexentry{Little Dragons}{196}
+\indexentry{Malaysia}{196}
+\indexentry{microelectronics}{196}
+\indexentry{Malaysia}{196}
+\indexentry{integrated circuits}{196}
+\indexentry{employment}{196}
+\indexentry{microelectronics}{196}
+\indexentry{Malaysia}{196}
+\indexentry{research and development}{196}
+\indexentry{microelectronics}{196}
+\indexentry{Malaysia}{196}
+\indexentry{research and development}{196}
+\indexentry{microelectronics}{196}
+\indexentry{microelectronics}{196}
+\indexentry{Malaysia}{196}
+\indexentry{war!Technology War}{196}
+\indexentry{war!Technology War}{197}
+\indexentry{Telex Corporation}{197}
+\indexentry{Memorex}{197}
+\indexentry{General Electric Company}{197}
+\indexentry{Radio Corporation of America}{197}
+\indexentry{Sperry Univac}{197}
+\indexentry{GTE}{197}
+\indexentry{International Telephone and Telegraph}{197}
+\indexentry{ZyMos}{197}
+\indexentry{innovation}{197}
+\indexentry{war!Technology War}{197}
+\indexentry{war!Technology War}{201}
+\indexentry{United States}{201}
+\indexentry{education}{201}
+\indexentry{United States}{201}
+\indexentry{smokestack industries}{201}
+\indexentry{steel}{201}
+\indexentry{automobile}{201}
+\indexentry{innovation}{201}
+\indexentry{World War II}{201}
+\indexentry{war!Technology War}{202}
+\indexentry{agriculture}{202}
+\indexentry{agriculture}{202}
+\indexentry{service economy}{202}
+\indexentry{service economy}{202}
+\indexentry{service economy}{202}
+\indexentry{agriculture}{202}
+\indexentry{deficit!budget}{202}
+\indexentry{deficit!trade}{202}
+\indexentry{education}{202}
+\indexentry{war!Technology War}{202}
+\indexentry{capital}{202}
+\indexentry{General Motors}{202}
+\indexentry{Perot, H. Ross}{202}
+\indexentry{unemployment}{202}
+\indexentry{United States}{202}
+\indexentry{unemployment}{203}
+\indexentry{Japan}{203}
+\indexentry{unemployment}{203}
+\indexentry{Republic of Korea}{203}
+\indexentry{education}{203}
+\indexentry{Reagan, President Ronald}{203}
+\indexentry{education}{203}
+\indexentry{robotics}{203}
+\indexentry{United States}{203}
+\indexentry{computer!personal}{203}
+\indexentry{Fujitsu}{204}
+\indexentry{TOW missile}{204}
+\indexentry{missile}{204}
+\indexentry{national debt}{204}
+\indexentry{service economy}{204}
+\indexentry{education}{204}
+\indexentry{Nakasone, Prime Minister Yasuhiro}{204}
+\indexentry{unemployment}{204}
+\indexentry{education}{204}
+\indexentry{Republic of Korea}{204}
+\indexentry{Japan}{204}
+\indexentry{Europe}{204}
+\indexentry{standard of living}{205}
+\indexentry{war!Technology War}{205}
+\indexentry{Nobel Prize}{205}
+\indexentry{education}{205}
+\indexentry{innovation}{205}
+\indexentry{Japan}{205}
+\indexentry{United States}{205}
+\indexentry{Chrysler Corporation}{205}
+\indexentry{automobile}{205}
+\indexentry{United States}{205}
+\indexentry{marketshare}{205}
+\indexentry{moon}{205}
+\indexentry{supercollider}{205}
+\indexentry{deficit!budget}{205}
+\indexentry{deficit!budget}{205}
+\indexentry{Gramm-Rudman bill}{206}
+\indexentry{Rudman, Senator Warren B.}{206}
+\indexentry{war!Technology War}{206}
+\indexentry{Cohen, Steven}{206}
+\indexentry{JTECH}{206}
+\indexentry{Japan}{206}
+\indexentry{automobile}{206}
+\indexentry{imports}{206}
+\indexentry{war!Technology War}{206}
+\indexentry{education}{206}
+\indexentry{war!Technology War}{206}
+\indexentry{graduate schools of business}{207}
+\indexentry{graduate schools of business}{207}
+\indexentry{service economy}{207}
+\indexentry{moon}{207}
+\indexentry{United States}{207}
+\indexentry{Nixon, President Richard M.}{207}
+\indexentry{Presidential Science Advisor}{207}
+\indexentry{Reagan, President Ronald}{207}
+\indexentry{Presidential Science Advisor}{207}
+\indexentry{White House}{207}
+\indexentry{White House}{207}
+\indexentry{war!Technology War}{207}
+\indexentry{Ministry of Intl. Trade and Industry (MITI)}{208}
+\indexentry{Department of Defense}{208}
+\indexentry{Industrial Revolution}{208}
+\indexentry{United States}{208}
+\indexentry{war!Technology War}{208}
+\indexentry{capital}{208}
+\indexentry{deficit!budget}{208}
+\indexentry{missile}{208}
+\indexentry{deficit!budget}{208}
+\indexentry{Germany}{208}
+\indexentry{German mark}{208}
+\indexentry{Bingaman, Senator Jeff}{208}
+\indexentry{deficit!trade}{208}
+\indexentry{Rudman, Senator Warren B.}{208}
+\indexentry{Glenn, Senator John}{209}
+\indexentry{Silicon Valley}{209}
+\indexentry{level playing field}{209}
+\indexentry{imports}{209}
+\indexentry{marketshare}{209}
+\indexentry{Japan}{209}
+\indexentry{Japan}{209}
+\indexentry{marketshare}{209}
+\indexentry{United States}{209}
+\indexentry{steel}{209}
+\indexentry{innovation}{209}
+\indexentry{creativity}{209}
+\indexentry{marketshare}{210}
+\indexentry{employment}{210}
+\indexentry{marketshare}{210}
+\indexentry{employment}{210}
+\indexentry{intellectual property!rights}{210}
+\indexentry{capital}{210}
+\indexentry{war!Technology War}{210}
+\indexentry{education}{210}
+\indexentry{war!Technology War}{210}
+\indexentry{Department of Defense}{210}
+\indexentry{Department of State}{210}
+\indexentry{World War II}{211}
+\indexentry{Department of Commerce and Technology (DCT)}{211}
+\indexentry{Ministry of Intl. Trade and Industry (MITI)}{211}
+\indexentry{Department of Commerce}{211}
+\indexentry{National Bureau of Standards}{211}
+\indexentry{National Science Foundation}{211}
+\indexentry{White House!Office of Science and Technology Policy (OSTP)}{211}
+\indexentry{White House}{211}
+\indexentry{Department of Defense}{211}
+\indexentry{research and development}{211}
+\indexentry{Department of Commerce and Technology (DCT)}{211}
+\indexentry{Great Britain!Department of Trade and Industry}{211}
+\indexentry{war!Technology War}{211}
+\indexentry{capital}{212}
+\indexentry{education}{212}
+\indexentry{semiconductor manufacturers!merchant}{212}
+\indexentry{United States!Congress}{212}
+\indexentry{United States!Senate}{212}
+\indexentry{Glenn, Senator John}{212}
+\indexentry{Brown, Representative George~E.}{212}
+\indexentry{United States!Congress}{212}
+\indexentry{war!Technology War}{212}
+\indexentry{war!Technology War}{212}
+\indexentry{Sanders, Jerry}{212}
+\indexentry{American Micro Devices}{212}
+\indexentry{United States}{212}
+\indexentry{Japan}{212}
+\indexentry{deficit!trade}{212}
+\indexentry{balance of trade}{212}
+\indexentry{deficit!trade}{212}
+\indexentry{deficit!trade}{212}
+\indexentry{Japan}{212}
+\indexentry{yen}{212}
+\indexentry{deficit!budget}{213}
+\indexentry{deficit!trade}{213}
+\indexentry{Japan}{213}
+\indexentry{Republic of Korea}{213}
+\indexentry{International Trade Commission}{213}
+\indexentry{Japan}{213}
+\indexentry{employment}{213}
+\indexentry{yen}{213}
+\indexentry{Republic of Korea}{213}
+\indexentry{United States}{213}
+\indexentry{microelectronics}{213}
+\indexentry{International Computers Ltd.}{213}
+\indexentry{United States!Congress}{214}
+\indexentry{Gephardt amendment}{214}
+\indexentry{Gephardt, Representative Richard~A.}{214}
+\indexentry{Japan}{214}
+\indexentry{deficit!trade}{214}
+\indexentry{United States}{214}
+\indexentry{weapons}{214}
+\indexentry{engineering!faculty}{214}
+\indexentry{Europe}{214}
+\indexentry{Soviet Union}{214}
+\indexentry{technology transfer}{214}
+\indexentry{technology transfer}{215}
+\indexentry{United States}{215}
+\indexentry{Libya}{215}
+\indexentry{technology transfer}{215}
+\indexentry{war!Technology War}{215}
+\indexentry{research and development}{215}
+\indexentry{war!Technology War}{215}
+\indexentry{Strategic Defense Initiative}{216}
+\indexentry{spinoff}{216}
+\indexentry{spinoff}{216}
+\indexentry{spinoff}{216}
+\indexentry{Boeing 707 airplane}{216}
+\indexentry{spinoff}{216}
+\indexentry{Reagan, President Ronald}{216}
+\indexentry{spinoff}{216}
+\indexentry{research and development}{216}
+\indexentry{Department of Defense}{216}
+\indexentry{National Aeronautics and Space Administration (NASA)}{216}
+\indexentry{supercollider}{216}
+\indexentry{exports}{217}
+\indexentry{National Academy of Sciences}{217}
+\indexentry{export control}{217}
+\indexentry{marketshare}{217}
+\indexentry{export control}{217}
+\indexentry{export control}{217}
+\indexentry{Perle, Richard}{217}
+\indexentry{war!Technology War}{217}
+\indexentry{gross national product}{217}
+\indexentry{spinoff}{217}
+\indexentry{United States!Congress}{218}
+\indexentry{United States}{218}
+\indexentry{Department of Defense}{218}
+\indexentry{United States!Congress}{218}
+\indexentry{war!Technology War}{218}
+\indexentry{education}{218}
+\indexentry{education}{218}
+\indexentry{education}{218}
+\indexentry{education}{218}
+\indexentry{Wright, Speaker James~C.}{218}
+\indexentry{Reagan, President Ronald}{218}
+\indexentry{education}{218}
+\indexentry{Wright, Speaker James~C.}{218}
+\indexentry{weapons}{218}
+\indexentry{education}{218}
+\indexentry{engineering!faculty}{219}
+\indexentry{education}{219}
+\indexentry{technology transfer}{219}
+\indexentry{White House}{219}
+\indexentry{Reagan, President Ronald}{219}
+\indexentry{war!Technology War}{219}
+\indexentry{Soviet Union}{220}
+\indexentry{Soviet Union}{220}
+\indexentry{Russian Revolution}{220}
+\indexentry{Pearl Harbor}{220}
+\indexentry{Watergate}{220}
+\indexentry{Kahn, Robert E.}{220}
+\indexentry{DARPA}{220}
+\indexentry{United States}{220}
+\indexentry{war!Technology War}{220}
+\indexentry{unemployment}{220}
+\indexentry{war!Technology War}{220}
+\indexentry{war!Technology War}{220}
+\indexentry{education}{220}
+\indexentry{Fisher, Franklin~M.}{221}
+\indexentry{McGowen, John~J.}{221}
+\indexentry{Greenwood, Joel~E.}{221}
+\indexentry{Wriston, Walter~B.}{221}
+\indexentry{Clarke, Arthur~C.}{221}
+\indexentry{Barzini, Luigi}{221}
+\indexentry{Davis, K.}{221}
+\indexentry{Blomstrom, R.~L.}{221}
+\indexentry{Reischauer, Edwin~O.}{221}
+\indexentry{Crawford, Mark}{221}
+\indexentry{McClellan, Stephen~T.}{221}
+\indexentry{Solomon, Ezra}{222}
+\indexentry{Tzu, Sun}{222}
+\indexentry{Rudzinski, Joe}{222}
+\indexentry{Murakami, Kunio}{222}
+\indexentry{Brandin, David~H.}{222}
+\indexentry{Bentley, J.}{222}
+\indexentry{Gannon, T.}{222}
+\indexentry{Harrison, Michael~A.}{222}
+\indexentry{Riganati, J.}{222}
+\indexentry{Ris, F.}{222}
+\indexentry{Sondheimer, N.}{222}
+\indexentry{Yukuta, Toshio}{222}
+\indexentry{Kitihara, Eiji}{222}
+\indexentry{Hegg, Warren}{222}
+\indexentry{Brodie, Ivor}{222}
+\indexentry{Murray, Julius}{222}
+\indexentry{Cullinan, Terrence}{222}
+\indexentry{Nishizawa, Junichi}{222}
+\indexentry{Lohr, Steve}{222}
+\indexentry{Bell, Eric~T.}{222}
+\indexentry{Feigenbaum, Edward}{222}
+\indexentry{McCorduck, Pamela}{222}
+\indexentry{Borrus, Michael}{223}
+\indexentry{Millstein, James}{223}
+\indexentry{Zysman, John}{223}
+\indexentry{Morris, J.}{223}
+\indexentry{Chandler, A.~R.}{223}
+\indexentry{Dreyfus, Herbert~L.}{223}
+\indexentry{Dreyfus, Stuart~E.}{223}
+\indexentry{Nevins, J.}{223}
+\indexentry{Albus, J.}{223}
+\indexentry{Binford, T.}{223}
+\indexentry{Brady, M.}{223}
+\indexentry{Caplan, N.}{223}
+\indexentry{Kutcher, M.}{223}
+\indexentry{MacVicar-Whelan, P.~J.}{223}
+\indexentry{Miller, G.~L.}{223}
+\indexentry{Rossol, L.}{223}
+\indexentry{Schutz, K.}{223}
+\indexentry{Kahn, David}{223}
+\indexentry{Spencer, William~J.}{223}
+\indexentry{Davis III, G.~Gervaise}{223}
+\indexentry{Gilchrist, Bruce}{224}
+\indexentry{Wessel, Milton~R.}{224}
+\indexentry{Rositzke, Harry}{224}
+\indexentry{Hirschon, Michael~Wels}{224}
+\indexentry{Bergamini, David}{224}
+\indexentry{Johnson, Chalmers}{224}
+\indexentry{Iacocca, Lee}{224}
+\indexentry{Novak, William}{224}
+\indexentry{Baxter, William~F.}{224}
+\indexentry{Baxter, William~F.}{224}
+\indexentry{Borrus, Michael}{225}
+\indexentry{Millstein, James}{225}
+\indexentry{Zysman, John}{225}
+\indexentry{Simpson, Janice~C.}{225}
+\indexentry{Weidenbaum, Murray~L.}{225}
+\indexentry{Tuchman, Barbara~W.}{225}
+\indexentry{Churchill, Winston}{225}
+\indexentry{Kato, K.}{225}
+\indexentry{Grayson, Lawrence~P.}{225}
+\indexentry{Smith, Bruce~L.}{225}
+\indexentry{Bloch, Erich}{225}
+\indexentry{Snyder, Robert~G.}{226}
+\indexentry{Doigan, Paul}{226}
+\indexentry{Brooks, Harvey}{226}
+\indexentry{Willenbrock, F.~Karl}{226}
+\indexentry{Shapley, Deborah}{226}
+\indexentry{Roy, Rustum}{226}
+\indexentry{Miller, Judith}{226}
+\indexentry{Vogel, Ezra}{227}
+\indexentry{Etzold, Thomas~H.}{227}
+\indexentry{Waldrop, M.~Mitchell}{227}
+\indexentry{Smith, R.}{227}
+\indexentry{Vliet, J.~C. van}{227}
+\indexentry{Lieblein, Edward}{227}
+\indexentry{Harrison, Michael~A.}{227}
+\indexentry{Malik, Rex}{228}
+\indexentry{Robinson, Arthur~L.}{228}
+\indexentry{Fagen, M.~D.}{228}
+\indexentry{Smits, F.~M.}{228}
+\indexentry{Ritchie, Dennis~M.}{228}
+\indexentry{Beardsley, Tim}{228}
+\indexentry{Kurihara, T.}{228}
+\indexentry{Hunter, Philip}{228}
+\indexentry{Ewing, Tom}{229}
+\indexentry{Fishman, Katherine~D.}{229}
+\indexentry{McKenna, Regis}{229}
+\indexentry{Jacobson, Gary}{229}
+\indexentry{Hillkirk, John}{229}
+\indexentry{Donlon, J.~P.}{229}
+\indexentry{Ouichi, William}{229}
+\indexentry{Wieder, H.}{229}
+\indexentry{Spicer, W.}{229}
+\indexentry{Bauer, R.}{229}
+\indexentry{Capasso, F.}{229}
+\indexentry{Collins, D.}{229}
+\indexentry{Hess, K.}{229}
+\indexentry{Kroger, H.}{229}
+\indexentry{Scace, R.}{229}
+\indexentry{Nagao, Makoto}{229}
+\indexentry{Nishida, Toyoaki}{229}
+\indexentry{Tsujii, Junichi}{229}
+\indexentry{Archbold, Pamela}{229}
+\indexentry{Hodges, Parker}{229}
+\indexentry{Tajima, Denji}{229}
+\indexentry{Matsubara, Tomoo}{229}
+\indexentry{Lulin, Gao}{230}
+\indexentry{Zhaoxiang, Xu}{230}
+\indexentry{Teng, Teng}{230}
+\indexentry{Kraar, Louis}{230}
+\indexentry{Jonas, Norman}{230}
+\indexentry{Boyd, Gerald~M.}{230}
+\indexentry{Sollorzano, Lucia}{230}
+\indexentry{Port, Otis}{230}
+\indexentry{Wilson, John~W. }{230}
+\indexentry{Diamond, S.}{231}
+\indexentry{Brookes, Warren~T.}{231}
+\indexentry{Tolchin, Martin}{231}
+\indexentry{Glenn, Senator John}{231}
+\indexentry{Clark, Don}{231}
+\indexentry{Thurow, Lester~C.}{231}
+\indexentry{Solomon, Steven}{231}
+\indexentry{Greenhouse, Linda}{231}
+\indexentry{Brandin, David~H.}{231}
diff --git a/indexing/makeindex/test/dosdiff.bat b/indexing/makeindex/test/dosdiff.bat
new file mode 100644
index 0000000000..5f808fdd83
--- /dev/null
+++ b/indexing/makeindex/test/dosdiff.bat
@@ -0,0 +1,138 @@
+:# Test of MakeIndex for PC DOS
+:# [12-Sep-1991]
+
+
+echo off
+echo ##################################################
+echo Expect only letter case differences in the output,
+echo and differences in the program name in the banner.
+echo ##################################################
+
+
+echo ##################################################
+echo test file = b209a
+..\src\makeindx b209a
+diff b209a.ind ok-b209a.ind
+diff b209a.ilg ok-b209a.ilg
+
+
+echo ##################################################
+echo test file = b209b
+..\src\makeindx b209b
+diff b209b.ind ok-b209b.ind
+diff b209b.ilg ok-b209b.ilg
+
+
+echo ##################################################
+echo test file = b209c
+..\src\makeindx b209c
+diff b209c.ind ok-b209c.ind
+diff b209c.ilg ok-b209c.ilg
+
+
+echo ##################################################
+echo test file = b209d
+..\src\makeindx b209d
+diff b209d.ind ok-b209d.ind
+diff b209d.ilg ok-b209d.ilg
+
+
+echo ##################################################
+echo test file = b209e
+..\src\makeindx b209e
+diff b209e.ind ok-b209e.ind
+diff b209e.ilg ok-b209e.ilg
+
+
+echo ##################################################
+echo test file = b209f
+..\src\makeindx b209f
+diff b209f.ind ok-b209f.ind
+diff b209f.ilg ok-b209f.ilg
+
+
+echo ##################################################
+echo test file = b211a
+..\src\makeindx b211a
+diff b211a.ind ok-b211a.ind
+diff b211a.ilg ok-b211a.ilg
+
+
+echo ##################################################
+echo test file = b211d
+..\src\makeindx b211d
+diff b211d.ind ok-b211d.ind
+diff b211d.ilg ok-b211d.ilg
+
+
+:# b211e has a Ctl-Z, which is a problem on PC DOS
+:# b211h is the same file, minus that one line
+:# echo ##################################################
+:# echo test file = b211e
+:# ..\src\makeindx b211e
+:# diff b211e.ind ok-b211e.ind
+:# diff b211e.ilg ok-b211e.ilg
+
+
+echo ##################################################
+echo test file = b211f
+..\src\makeindx b211f
+diff b211f.ind ok-b211f.ind
+diff b211f.ilg ok-b211f.ilg
+
+
+echo ##################################################
+echo test file = b211g
+..\src\makeindx b211g
+diff b211g.ind ok-b211g.ind
+diff b211g.ilg ok-b211g.ilg
+
+
+echo ##################################################
+echo test file = b211h
+..\src\makeindx b211h
+diff b211h.ind ok-b211h.ind
+diff b211h.ilg ok-b211h.ilg
+
+
+echo ##################################################
+echo test file = book
+..\src\makeindx book
+diff book.ind ok-book.ind
+diff book.ilg ok-book.ilg
+
+
+echo ##################################################
+echo test file = test
+..\src\makeindx test
+diff test.ind ok-test.ind
+diff test.ilg ok-test.ilg
+
+
+echo ##################################################
+echo test file = tort
+..\src\makeindx tort
+diff tort.ind ok-tort.ind
+diff tort.ilg ok-tort.ilg
+
+
+echo ##################################################
+echo test file = b211b (German sort option)
+..\src\makeindx -s b211b.ist -g b211b
+diff b211b.ind ok-b211b.ind
+diff b211b.ilg ok-b211b.ilg
+
+
+echo ##################################################
+echo test file = b210a (Private style file)
+..\src\makeindx -s b210a.ist b210a
+diff b210a.ind ok-b210a.ind
+diff b210a.ilg ok-b210a.ilg
+
+
+echo ##################################################
+echo test file = b211c (Private style file)
+..\src\makeindx -s b211c.ist b211c
+diff b211c.ind ok-b211c.ind
+diff b211c.ilg ok-b211c.ilg
+
diff --git a/indexing/makeindex/test/foo.bat b/indexing/makeindex/test/foo.bat
new file mode 100644
index 0000000000..3737a55ac6
--- /dev/null
+++ b/indexing/makeindex/test/foo.bat
@@ -0,0 +1,138 @@
+:# Test of MakeIndex for PC DOS
+:# [12-Sep-1991]
+
+
+echo off
+echo ##################################################
+echo Expect only letter case differences in the output,
+echo and differences in the program name in the banner.
+echo ##################################################
+
+
+echo ##################################################
+echo test file = b209a
+makeindx b209a
+diff b209a.ind ok-b209a.ind
+diff b209a.ilg ok-b209a.ilg
+
+
+echo ##################################################
+echo test file = b209b
+makeindx b209b
+diff b209b.ind ok-b209b.ind
+diff b209b.ilg ok-b209b.ilg
+
+
+echo ##################################################
+echo test file = b209c
+makeindx b209c
+diff b209c.ind ok-b209c.ind
+diff b209c.ilg ok-b209c.ilg
+
+
+echo ##################################################
+echo test file = b209d
+makeindx b209d
+diff b209d.ind ok-b209d.ind
+diff b209d.ilg ok-b209d.ilg
+
+
+echo ##################################################
+echo test file = b209e
+makeindx b209e
+diff b209e.ind ok-b209e.ind
+diff b209e.ilg ok-b209e.ilg
+
+
+echo ##################################################
+echo test file = b209f
+makeindx b209f
+diff b209f.ind ok-b209f.ind
+diff b209f.ilg ok-b209f.ilg
+
+
+echo ##################################################
+echo test file = b211a
+makeindx b211a
+diff b211a.ind ok-b211a.ind
+diff b211a.ilg ok-b211a.ilg
+
+
+echo ##################################################
+echo test file = b211d
+makeindx b211d
+diff b211d.ind ok-b211d.ind
+diff b211d.ilg ok-b211d.ilg
+
+
+:# b211e has a Ctl-Z, which is a problem on PC DOS
+:# b211h is the same file, minus that one line
+:# echo ##################################################
+:# echo test file = b211e
+:# makeindx b211e
+:# diff b211e.ind ok-b211e.ind
+:# diff b211e.ilg ok-b211e.ilg
+
+
+echo ##################################################
+echo test file = b211f
+makeindx b211f
+diff b211f.ind ok-b211f.ind
+diff b211f.ilg ok-b211f.ilg
+
+
+echo ##################################################
+echo test file = b211g
+makeindx b211g
+diff b211g.ind ok-b211g.ind
+diff b211g.ilg ok-b211g.ilg
+
+
+echo ##################################################
+echo test file = b211h
+makeindx b211h
+diff b211h.ind ok-b211h.ind
+diff b211h.ilg ok-b211h.ilg
+
+
+echo ##################################################
+echo test file = book
+makeindx book
+diff book.ind ok-book.ind
+diff book.ilg ok-book.ilg
+
+
+echo ##################################################
+echo test file = test
+makeindx test
+diff test.ind ok-test.ind
+diff test.ilg ok-test.ilg
+
+
+echo ##################################################
+echo test file = tort
+makeindx tort
+diff tort.ind ok-tort.ind
+diff tort.ilg ok-tort.ilg
+
+
+echo ##################################################
+echo test file = b211b (German sort option)
+makeindx -s b211b.ist -g b211b
+diff b211b.ind ok-b211b.ind
+diff b211b.ilg ok-b211b.ilg
+
+
+echo ##################################################
+echo test file = b210a (Private style file)
+makeindx -s b210a.ist b210a
+diff b210a.ind ok-b210a.ind
+diff b210a.ilg ok-b210a.ilg
+
+
+echo ##################################################
+echo test file = b211c (Private style file)
+makeindx -s b211c.ist b211c
+diff b211c.ind ok-b211c.ind
+diff b211c.ilg ok-b211c.ilg
+
diff --git a/indexing/makeindex/test/ok-b209a.ilg b/indexing/makeindex/test/ok-b209a.ilg
new file mode 100644
index 0000000000..54b3127dc0
--- /dev/null
+++ b/indexing/makeindex/test/ok-b209a.ilg
@@ -0,0 +1,6 @@
+This is makeindex, portable version 2.12 [26-May-1993].
+Scanning input file b209a.idx....done (4 entries accepted, 0 rejected).
+Sorting entries....done (9 comparisons).
+Generating output file b209a.ind....done (5 lines written, 0 warnings).
+Output written in b209a.ind.
+Transcript written in b209a.ilg.
diff --git a/indexing/makeindex/test/ok-b209a.ind b/indexing/makeindex/test/ok-b209a.ind
new file mode 100644
index 0000000000..d0fe6e0088
--- /dev/null
+++ b/indexing/makeindex/test/ok-b209a.ind
@@ -0,0 +1,5 @@
+\begin{theindex}
+
+ \item {\Ss alignment}, \bf{215}, 216, 217
+
+\end{theindex}
diff --git a/indexing/makeindex/test/ok-b209b.ilg b/indexing/makeindex/test/ok-b209b.ilg
new file mode 100644
index 0000000000..3fcd6612a3
--- /dev/null
+++ b/indexing/makeindex/test/ok-b209b.ilg
@@ -0,0 +1,6 @@
+This is makeindex, portable version 2.12 [26-May-1993].
+Scanning input file b209b.idx....done (5 entries accepted, 0 rejected).
+Sorting entries....done (15 comparisons).
+Generating output file b209b.ind....done (13 lines written, 0 warnings).
+Output written in b209b.ind.
+Transcript written in b209b.ilg.
diff --git a/indexing/makeindex/test/ok-b209b.ind b/indexing/makeindex/test/ok-b209b.ind
new file mode 100644
index 0000000000..2c9820abb2
--- /dev/null
+++ b/indexing/makeindex/test/ok-b209b.ind
@@ -0,0 +1,13 @@
+\begin{theindex}
+
+ \item bar, 193--194
+
+ \indexspace
+
+ \item foo, 93
+
+ \indexspace
+
+ \item gnu, 111
+
+\end{theindex}
diff --git a/indexing/makeindex/test/ok-b209c.ilg b/indexing/makeindex/test/ok-b209c.ilg
new file mode 100644
index 0000000000..d2cf18597d
--- /dev/null
+++ b/indexing/makeindex/test/ok-b209c.ilg
@@ -0,0 +1,6 @@
+This is makeindex, portable version 2.12 [26-May-1993].
+Scanning input file b209c.idx....done (5 entries accepted, 0 rejected).
+Sorting entries....done (12 comparisons).
+Generating output file b209c.ind....done (13 lines written, 0 warnings).
+Output written in b209c.ind.
+Transcript written in b209c.ilg.
diff --git a/indexing/makeindex/test/ok-b209c.ind b/indexing/makeindex/test/ok-b209c.ind
new file mode 100644
index 0000000000..2c9820abb2
--- /dev/null
+++ b/indexing/makeindex/test/ok-b209c.ind
@@ -0,0 +1,13 @@
+\begin{theindex}
+
+ \item bar, 193--194
+
+ \indexspace
+
+ \item foo, 93
+
+ \indexspace
+
+ \item gnu, 111
+
+\end{theindex}
diff --git a/indexing/makeindex/test/ok-b209d.ilg b/indexing/makeindex/test/ok-b209d.ilg
new file mode 100644
index 0000000000..b8a1d457a8
--- /dev/null
+++ b/indexing/makeindex/test/ok-b209d.ilg
@@ -0,0 +1,6 @@
+This is makeindex, portable version 2.12 [26-May-1993].
+Scanning input file b209d.idx....done (5 entries accepted, 0 rejected).
+Sorting entries....done (14 comparisons).
+Generating output file b209d.ind....done (13 lines written, 0 warnings).
+Output written in b209d.ind.
+Transcript written in b209d.ilg.
diff --git a/indexing/makeindex/test/ok-b209d.ind b/indexing/makeindex/test/ok-b209d.ind
new file mode 100644
index 0000000000..04e8830f28
--- /dev/null
+++ b/indexing/makeindex/test/ok-b209d.ind
@@ -0,0 +1,13 @@
+\begin{theindex}
+
+ \item axiomatic method, 13
+
+ \indexspace
+
+ \item continuum mechanics, 11
+
+ \indexspace
+
+ \item Noll, 11, 12
+
+\end{theindex}
diff --git a/indexing/makeindex/test/ok-b209e.ilg b/indexing/makeindex/test/ok-b209e.ilg
new file mode 100644
index 0000000000..1db294fcf4
--- /dev/null
+++ b/indexing/makeindex/test/ok-b209e.ilg
@@ -0,0 +1,15 @@
+This is makeindex, portable version 2.12 [26-May-1993].
+Scanning input file b209e.idx....done (85 entries accepted, 0 rejected).
+Sorting entries....done (525 comparisons).
+Generating output file b209e.ind....
+## Warning (input = b209e.idx, line = 4; output = b209e.ind, line = 4):
+ -- Conflicting entries: multiple encaps for the same page under same key.
+
+## Warning (input = b209e.idx, line = 51; output = b209e.ind, line = 19):
+ -- Conflicting entries: multiple encaps for the same page under same key.
+
+## Warning (input = b209e.idx, line = 82; output = b209e.ind, line = 28):
+ -- Conflicting entries: multiple encaps for the same page under same key.
+done (30 lines written, 3 warnings).
+Output written in b209e.ind.
+Transcript written in b209e.ilg.
diff --git a/indexing/makeindex/test/ok-b209e.ind b/indexing/makeindex/test/ok-b209e.ind
new file mode 100644
index 0000000000..827ecf63b0
--- /dev/null
+++ b/indexing/makeindex/test/ok-b209e.ind
@@ -0,0 +1,30 @@
+\begin{theindex}
+
+ \item {\Ss abstract}, 166, \bf{177}
+ \item {\Ss access rights}, 166, 183, \bf{183}
+ \item active position, \bf{198}
+ \item {\Ss additional information}, 166, 184, \bf{185}
+ \item {\Ss aggregate}, 77, 78
+ \item aligned around, \bf{201}
+ \item {\Ss aligned-around}, 216, 217
+ \item {\Ss alignment}, 111--113, 156, 207, \bf{215}, 216, 217, 219,
+ 227, 236, 240
+ \item {\Ss alignment string}, 216, 217
+ \item {\Ss alternative representation}, 60, 61, 80, 92, 93, \bf{94},
+ 149, 150, 152, 174
+ \item {\Ss alternative representation character sets}, 64, 93, 94,
+ 166, 173, \bf{174}
+ \item alternative representation character string, \bf{64}
+ \item {\it alternative representation character string\/}, 94
+ \item {\Ss application comments}, 43--51, 53--59, 80, 102, 103,
+ \bf{103}, 137
+ \item {\Ss applies}, 113, 114
+ \item assured reproduction area, 161
+ \item atomic string expression, \bf{69}
+ \item {\it atomic string expression\/}, \bf{69}
+ \item attribute, \bf{38}
+ \item {\Ss author's organization}, 180
+ \item {\Ss authorization}, 166, 179, \bf{181}
+ \item {\Ss authors}, 166, 179, 180, \bf{180}
+
+\end{theindex}
diff --git a/indexing/makeindex/test/ok-b209f.ilg b/indexing/makeindex/test/ok-b209f.ilg
new file mode 100644
index 0000000000..b7cdce749d
--- /dev/null
+++ b/indexing/makeindex/test/ok-b209f.ilg
@@ -0,0 +1,6 @@
+This is makeindex, portable version 2.12 [26-May-1993].
+Scanning input file b209f.idx....done (76 entries accepted, 0 rejected).
+Sorting entries....done (484 comparisons).
+Generating output file b209f.ind....done (116 lines written, 0 warnings).
+Output written in b209f.ind.
+Transcript written in b209f.ilg.
diff --git a/indexing/makeindex/test/ok-b209f.ind b/indexing/makeindex/test/ok-b209f.ind
new file mode 100644
index 0000000000..60ae3a515c
--- /dev/null
+++ b/indexing/makeindex/test/ok-b209f.ind
@@ -0,0 +1,116 @@
+\begin{theindex}
+
+ \item \CL {:ALL-PATHS}, 22
+ \item :AUTO-BACKTRACK, \ITIDX{16}, \ITIDX{18, 19}
+ \item \CL {:AUTO-BACKTRACK}, 22
+ \item :AUTO-DEFINE, \ITIDX{19}
+ \item \CL {:AUTO-DEFINE}, 22
+ \item :AUTO-REFERENCE, \ITIDX{19}
+ \item \CL {:AUTO-REFERENCE}, 22
+ \item \CL {:DEPTH-FIRST}, 22
+ \item :DISPLAY, \ITIDX{23, 24}
+ \item \CL {:DISPLAY}, 22
+ \item \CL {:DURATIONS}, 22
+ \item :FLOATS, \ITIDX{6}, \ITIDX{23}
+ \item \CL {:FLOATS}, 22
+ \item \CL {:LEAVES-ONLY}, 23
+ \item \CL {:RELATIONS}, 23
+ \item \CL {:SORT}, 23
+ \item :STATS, \ITIDX{21}
+ \item \CL {:STATS}, 23
+ \item :TOLERANCE, \ITIDX{22}
+ \item \CL {:TOLERANCE}, 23
+ \item :TRACE, \ITIDX{21, 22}
+ \item \CL {:TRACE}, 23
+ \item \CL {:WAIT}, 24
+
+ \indexspace
+
+ \item ADD-INTERVAL-CONSTRAINT, \ITIDX{5}, \ITIDX{7}, \ITIDX{18},
+ \ITIDX{20}
+ \item \CL {(ADD-INTERVAL-CONSTRAINT {\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss {\pem {}x constraint y {\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss \&Key}}\relax context {\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss ({\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss {\pem {}type\/}}}\relax :REL)}}\relax \/}}}\relax )},
+ 19
+
+ \indexspace
+
+ \item \CL {(CONTEXT-DEFINED-P {\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss {\pem {}name\/}}}\relax )},
+ 18
+ \item \CL {(CONTEXT-TREE {\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss {\pem {}{\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss \&Optional}}\relax {\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss ({\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss {\pem {}name\/}}}\relax T)}}\relax \/}}}\relax )},
+ 19
+
+ \indexspace
+
+ \item \CL {(DEFINE-CONTEXT {\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss {\pem {}{\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss \&Optional}}\relax name parent\/}}}\relax )},
+ 18
+ \item \CL {(DEFINE-INTERVAL {\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss {\pem {}{\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss \&Optional}}\relax int ref {\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss \&Key}}\relax context\/}}}\relax )},
+ 19
+ \item \CL {(DEFINED-CONTEXTS)}, 18
+ \item \CL {(DEFINED-INTERVALS)}, 19
+ \item \CL {(DELETE-CONTEXT {\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss {\pem {}name\/}}}\relax )},
+ 18
+ \item \CL {(DISPLAY-INTERVALS {\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss {\pem {}{\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss \&Key}}\relax ints context {\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss ({\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss {\pem {}clear\/}}}\relax T)}}\relax \/}}}\relax )},
+ 20
+
+ \indexspace
+
+ \item GET-INTERVAL-CONSTRAINT, \ITIDX{5}, \ITIDX{7}
+ \item \CL {(GET-INTERVAL-CONSTRAINT {\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss {\pem {}x y {\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss \&Key}}\relax context {\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss ({\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss {\pem {}type\/}}}\relax :REL)}}\relax \/}}}\relax )},
+ 20
+ \item \CL {(GRAPH-INTERVALS {\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss {\pem {}{\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss \&Optional}}\relax ints\/}}}\relax )},
+ 21
+
+ \indexspace
+
+ \item \CL {(INTERVAL-DEFINED-P {\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss {\pem {}int\/}}}\relax )},
+ 19
+
+ \indexspace
+
+ \item \CL {(POP-CONTEXT {\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss {\pem {}{\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss \&Optional}}\relax dont-delete-p\/}}}\relax )},
+ 18
+ \item \CL {(PUSH-CONTEXT)}, 18
+
+ \indexspace
+
+ \item \CL {(REFERENCE-INTERVALS {\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss {\pem {}int {\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss \&Optional}}\relax inverse-p {\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss \&Key}}\relax context\/}}}\relax )},
+ 19
+ \item \CL {(RELATED-INTERVALS {\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss {\pem {}int {\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss \&Key}}\relax context type\/}}}\relax )},
+ 19
+
+ \indexspace
+
+ \item \CL {(SHOW-INTERVAL-CONSTRAINTS {\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss {\pem {}int {\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss \&Key}}\relax with-ints context {\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss ({\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss {\pem {}type\/}}}\relax :REL)}}\relax \/}}}\relax )},
+ 20
+ \item \CL {(SWITCH-CONTEXT {\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss {\pem {}name\/}}}\relax )},
+ 18
+
+ \indexspace
+
+ \item \CL {(TEST-INTERVAL-CONSTRAINT {\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss {\pem {}x constraint y {\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss \&Key}}\relax context {\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss ({\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss {\pem {}type\/}}}\relax :REL) ({\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss {\pem {}test\/}}}\relax :INTERSECT)}}\relax \/}}}\relax )},
+ 20
+ \item TIMELOGIC-BACKTRACK, \ITIDX{15}, \ITIDX{20}
+ \item \CL {(TIMELOGIC-BACKTRACK {\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss {\pem {}{\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss \&Optional}}\relax btpoint\/}}}\relax )},
+ 20
+ \item TIMELOGIC-CHECKPOINT, \ITIDX{20}
+ \item \CL {(TIMELOGIC-CHECKPOINT)}, 20
+ \item \CL {(TIMELOGIC-CHECKPOINT-P {\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss {\pem {}{\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss \&Optional}}\relax btpoint\/}}}\relax )},
+ 20
+ \item TIMELOGIC-INIT, \ITIDX{21}
+ \item \CL {(TIMELOGIC-INIT)}, 18
+ \item TIMELOGIC-PROP, \ITIDX{23}
+ \item \CL {(TIMELOGIC-PROP {\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss {\pem {}propname {\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss \&Optional}}\relax newpropvalue\/}}}\relax )},
+ 21
+ \item TIMELOGIC-RESET-PROPS, \ITIDX{18}
+ \item \CL {(TIMELOGIC-RESET-PROPS {\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss {\pem {}{\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss \&Rest}}\relax keywords\/}}}\relax )},
+ 21
+ \item \CL {(TIMELOGIC-STATS)}, 21
+ \item TRACE-INTERVAL, \ITIDX{20, 21}
+ \item \CL {(TRACE-INTERVAL {\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss {\pem {}int {\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss \&Optional}}\relax with-ints\/}}}\relax )},
+ 21
+
+ \indexspace
+
+ \item \CL {(UNTRACE-INTERVAL {\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss {\pem {}{\let \pem {}=\tenssi \let \pbf =\tenssbx {\tenss \&Optional}}\relax int\/}}}\relax )},
+ 21
+
+\end{theindex}
diff --git a/indexing/makeindex/test/ok-b210a.ilg b/indexing/makeindex/test/ok-b210a.ilg
new file mode 100644
index 0000000000..f25fcbbb6d
--- /dev/null
+++ b/indexing/makeindex/test/ok-b210a.ilg
@@ -0,0 +1,7 @@
+This is makeindex, portable version 2.12 [26-May-1993].
+Scanning style file b210a.ist..........done (10 attributes redefined, 0 ignored).
+Scanning input file b210a.idx....done (12 entries accepted, 0 rejected).
+Sorting entries....done (38 comparisons).
+Generating output file b210a.ind....done (21 lines written, 0 warnings).
+Output written in b210a.ind.
+Transcript written in b210a.ilg.
diff --git a/indexing/makeindex/test/ok-b210a.ind b/indexing/makeindex/test/ok-b210a.ind
new file mode 100644
index 0000000000..a08619d7de
--- /dev/null
+++ b/indexing/makeindex/test/ok-b210a.ind
@@ -0,0 +1,21 @@
+\begin{theindex}
+
+ 0\item a-delim0-1
+ 01\subitem ab-delim1-2
+ 1\subitem ac-delim1-3
+ 1\subitem ad-delim1-4
+ 12\subsubitem ae-delim2-5
+ 2\subsubitem af-delim2-6
+ 2\subsubitem ag-delim2-7
+
+ \indexspace
+
+ 0\item b
+ x1\subitem bb-delim1-1
+ 1\subitem bc-delim1-2
+ 1\subitem bd
+ x2\subsubitem be-delim2-3
+ 2\subsubitem bf-delim2-4
+ 2\subsubitem bg-delim2-5
+
+\end{theindex}
diff --git a/indexing/makeindex/test/ok-b211a.ilg b/indexing/makeindex/test/ok-b211a.ilg
new file mode 100644
index 0000000000..0b5e90c959
--- /dev/null
+++ b/indexing/makeindex/test/ok-b211a.ilg
@@ -0,0 +1,11 @@
+This is makeindex, portable version 2.12 [26-May-1993].
+Scanning input file b211a.idx....
+!! Input index error (file = b211a.idx, line = 5):
+ -- First argument too long (max 1024).
+!! Input index error (file = b211a.idx, line = 6):
+ -- First argument too long (max 1024).
+done (10 entries accepted, 2 rejected).
+Sorting entries....done (35 comparisons).
+Generating output file b211a.ind....done (34 lines written, 0 warnings).
+Output written in b211a.ind.
+Transcript written in b211a.ilg.
diff --git a/indexing/makeindex/test/ok-b211a.ind b/indexing/makeindex/test/ok-b211a.ind
new file mode 100644
index 0000000000..e5dfcaba64
--- /dev/null
+++ b/indexing/makeindex/test/ok-b211a.ind
@@ -0,0 +1,34 @@
+\begin{theindex}
+
+ \item abc, \italic{3}
+
+ \indexspace
+
+ \item bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,
+ \BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB{513}
+
+ \indexspace
+
+ \item xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,
+ 256
+ \item xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,
+ \EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE{1005}
+ \item xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,
+ \EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE{1021}
+ \item xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,
+ \EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE{1023}
+ \item AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA,
+ 1023
+ \item xyz, \bold{3}
+
+ \indexspace
+
+ \item yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy,
+ 257
+
+ \indexspace
+
+ \item zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz,
+ 1023
+
+\end{theindex}
diff --git a/indexing/makeindex/test/ok-b211b.ilg b/indexing/makeindex/test/ok-b211b.ilg
new file mode 100644
index 0000000000..53598d5b20
--- /dev/null
+++ b/indexing/makeindex/test/ok-b211b.ilg
@@ -0,0 +1,7 @@
+This is makeindex, portable version 2.12 [26-May-1993].
+Scanning style file b211b.ist.done (1 attributes redefined, 0 ignored).
+Scanning input file b211b.idx....done (23 entries accepted, 0 rejected).
+Sorting entries....done (102 comparisons).
+Generating output file b211b.ind....done (45 lines written, 0 warnings).
+Output written in b211b.ind.
+Transcript written in b211b.ilg.
diff --git a/indexing/makeindex/test/ok-b211b.ind b/indexing/makeindex/test/ok-b211b.ind
new file mode 100644
index 0000000000..965f47cb0d
--- /dev/null
+++ b/indexing/makeindex/test/ok-b211b.ind
@@ -0,0 +1,45 @@
+\begin{theindex}
+
+ \item aesel, 2
+ \item "asel, 1
+ \item Aesel, 20
+ \item "Asel, 10
+
+ \indexspace
+
+ \item Gleitkaesten, 2
+ \item Gleitk"asten, 1
+ \item Gleitkasten, 3
+
+ \indexspace
+
+ \item laesst, 2
+ \item l"a"st, 1
+
+ \indexspace
+
+ \item oestrig, 4
+ \item "ostrig, 3
+ \item Oestrig, 40
+ \item "Ostrig, 30
+
+ \indexspace
+
+ \item Schriftgroessen, 3
+ \item Schriftgr"o"sen, 19
+
+ \indexspace
+
+ \item ueber, 6
+ \item "uber, 5
+ \item Ueber, 60
+ \item "Uber, 50
+
+ \indexspace
+
+ \item wasser, 8
+ \item wa"ser, 7
+ \item Wasser, 80
+ \item Wa"ser, 70
+
+\end{theindex}
diff --git a/indexing/makeindex/test/ok-b211c.ilg b/indexing/makeindex/test/ok-b211c.ilg
new file mode 100644
index 0000000000..9fb8f69b45
--- /dev/null
+++ b/indexing/makeindex/test/ok-b211c.ilg
@@ -0,0 +1,7 @@
+This is makeindex, portable version 2.12 [26-May-1993].
+Scanning style file b211c.ist..........done (10 attributes redefined, 0 ignored).
+Scanning input file b211c.idx....done (12 entries accepted, 0 rejected).
+Sorting entries....done (38 comparisons).
+Generating output file b211c.ind....done (21 lines written, 0 warnings).
+Output written in b211c.ind.
+Transcript written in b211c.ilg.
diff --git a/indexing/makeindex/test/ok-b211c.ind b/indexing/makeindex/test/ok-b211c.ind
new file mode 100644
index 0000000000..a08619d7de
--- /dev/null
+++ b/indexing/makeindex/test/ok-b211c.ind
@@ -0,0 +1,21 @@
+\begin{theindex}
+
+ 0\item a-delim0-1
+ 01\subitem ab-delim1-2
+ 1\subitem ac-delim1-3
+ 1\subitem ad-delim1-4
+ 12\subsubitem ae-delim2-5
+ 2\subsubitem af-delim2-6
+ 2\subsubitem ag-delim2-7
+
+ \indexspace
+
+ 0\item b
+ x1\subitem bb-delim1-1
+ 1\subitem bc-delim1-2
+ 1\subitem bd
+ x2\subsubitem be-delim2-3
+ 2\subsubitem bf-delim2-4
+ 2\subsubitem bg-delim2-5
+
+\end{theindex}
diff --git a/indexing/makeindex/test/ok-b211d.ilg b/indexing/makeindex/test/ok-b211d.ilg
new file mode 100644
index 0000000000..40409a024e
--- /dev/null
+++ b/indexing/makeindex/test/ok-b211d.ilg
@@ -0,0 +1,6 @@
+This is makeindex, portable version 2.12 [26-May-1993].
+Scanning input file b211d.idx....done (4 entries accepted, 0 rejected).
+Sorting entries....done (9 comparisons).
+Generating output file b211d.ind....done (5 lines written, 0 warnings).
+Output written in b211d.ind.
+Transcript written in b211d.ilg.
diff --git a/indexing/makeindex/test/ok-b211d.ind b/indexing/makeindex/test/ok-b211d.ind
new file mode 100644
index 0000000000..4351eca4a6
--- /dev/null
+++ b/indexing/makeindex/test/ok-b211d.ind
@@ -0,0 +1,5 @@
+\begin{theindex}
+
+ \item foo, 27--28
+
+\end{theindex}
diff --git a/indexing/makeindex/test/ok-b211e.ilg b/indexing/makeindex/test/ok-b211e.ilg
new file mode 100644
index 0000000000..7a33d08870
--- /dev/null
+++ b/indexing/makeindex/test/ok-b211e.ilg
@@ -0,0 +1,6 @@
+This is makeindex, portable version 2.12 [26-May-1993].
+Scanning input file b211e.idx....done (255 entries accepted, 0 rejected).
+Sorting entries.....done (1996 comparisons).
+Generating output file b211e.ind....done (823 lines written, 0 warnings).
+Output written in b211e.ind.
+Transcript written in b211e.ilg.
diff --git a/indexing/makeindex/test/ok-b211e.ind b/indexing/makeindex/test/ok-b211e.ind
new file mode 100644
index 0000000000..91093827d2
--- /dev/null
+++ b/indexing/makeindex/test/ok-b211e.ind
@@ -0,0 +1,823 @@
+\begin{theindex}
+
+ \item ! (exclamation point), 33
+ \item " (quotation mark)), 34
+ \item \# (sharp sign), 35
+ \item \$ (dollar sign), 36
+ \item \% (percent sign), 37
+ \item \& (ampersand), 38
+ \item ' (apostrophe), 39
+ \item ( (left parenthesis), 40
+ \item ) (right parenthesis), 41
+ \item * (asterisk), 42
+ \item + (plus), 43
+ \item , (comma), 44
+ \item - (minus), 45
+ \item . (period), 46
+ \item / (slash), 47
+ \item : (colon), 58
+ \item ; (semicolon), 59
+ \item $<$ (left angle bracket), 60
+ \item = (equals), 61
+ \item $>$ (right angle bracket), 62
+ \item ? (query), 63
+ \item @ (at sign), 64
+ \item [ (left square bracket), 91
+ \item \verb=\= (backslash), 92
+ \item ] (right square bracket), 93
+ \item \verb=^= (caret), 94
+ \item \verb=_= (underscore), 95
+ \item \verb=~= (grave accent), 96
+ \item \{ (left brace), 123
+ \item \verb=|= (vertical bar), 124
+ \item \} (right brace), 125
+ \item \verb=~= (tilde), 126
+
+ \indexspace
+
+ \item 0, 48
+ \item 1, 49
+ \item 2, 50
+ \item 3, 51
+ \item 4, 52
+ \item 5, 53
+ \item 6, 54
+ \item 7, 55
+ \item 8, 56
+ \item 9, 57
+
+ \indexspace
+
+ \item \char1 (character 1 (octal 1) (hex 1)), 1
+
+ \indexspace
+
+ \item \char2 (character 2 (octal 2) (hex 2)), 2
+
+ \indexspace
+
+ \item \char3 (character 3 (octal 3) (hex 3)), 3
+
+ \indexspace
+
+ \item \char4 (character 4 (octal 4) (hex 4)), 4
+
+ \indexspace
+
+ \item \char5 (character 5 (octal 5) (hex 5)), 5
+
+ \indexspace
+
+ \item \char6 (character 6 (octal 6) (hex 6)), 6
+
+ \indexspace
+
+ \item \char7 (character 7 (octal 7) (hex 7)), 7
+
+ \indexspace
+
+ \item \char8 (character 8 (octal 10) (hex 8)), 8
+
+ \indexspace
+
+ \item \char9 (character 9 (octal 11) (hex 9)), 9
+
+ \indexspace
+
+ \item \char10 (character 10 (octal 12) (hex a)), 10
+
+ \indexspace
+
+ \item \char11 (character 11 (octal 13) (hex b)), 11
+
+ \indexspace
+
+ \item \char12 (character 12 (octal 14) (hex c)), 12
+
+ \indexspace
+
+ \item \char13 (character 13 (octal 15) (hex d)), 13
+
+ \indexspace
+
+ \item \char14 (character 14 (octal 16) (hex e)), 14
+
+ \indexspace
+
+ \item \char15 (character 15 (octal 17) (hex f)), 15
+
+ \indexspace
+
+ \item \char16 (character 16 (octal 20) (hex 10)), 16
+
+ \indexspace
+
+ \item \char17 (character 17 (octal 21) (hex 11)), 17
+
+ \indexspace
+
+ \item \char18 (character 18 (octal 22) (hex 12)), 18
+
+ \indexspace
+
+ \item \char19 (character 19 (octal 23) (hex 13)), 19
+
+ \indexspace
+
+ \item \char20 (character 20 (octal 24) (hex 14)), 20
+
+ \indexspace
+
+ \item \char21 (character 21 (octal 25) (hex 15)), 21
+
+ \indexspace
+
+ \item \char22 (character 22 (octal 26) (hex 16)), 22
+
+ \indexspace
+
+ \item \char23 (character 23 (octal 27) (hex 17)), 23
+
+ \indexspace
+
+ \item \char24 (character 24 (octal 30) (hex 18)), 24
+
+ \indexspace
+
+ \item \char25 (character 25 (octal 31) (hex 19)), 25
+
+ \indexspace
+
+ \item \char26 (character 26 (octal 32) (hex 1a)), 26
+
+ \indexspace
+
+ \item \char27 (character 27 (octal 33) (hex 1b)), 27
+
+ \indexspace
+
+ \item \char28 (character 28 (octal 34) (hex 1c)), 28
+
+ \indexspace
+
+ \item \char29 (character 29 (octal 35) (hex 1d)), 29
+
+ \indexspace
+
+ \item \char30 (character 30 (octal 36) (hex 1e)), 30
+
+ \indexspace
+
+ \item \char31 (character 31 (octal 37) (hex 1f)), 31
+
+ \indexspace
+
+ \item (space), 32
+
+ \indexspace
+
+ \item A, 65
+ \item a, 97
+
+ \indexspace
+
+ \item B, 66
+ \item b, 98
+
+ \indexspace
+
+ \item C, 67
+ \item c, 99
+
+ \indexspace
+
+ \item D, 68
+ \item d, 100
+
+ \indexspace
+
+ \item E, 69
+ \item e, 101
+
+ \indexspace
+
+ \item F, 70
+ \item f, 102
+
+ \indexspace
+
+ \item G, 71
+ \item g, 103
+
+ \indexspace
+
+ \item H, 72
+ \item h, 104
+
+ \indexspace
+
+ \item I, 73
+ \item i, 105
+
+ \indexspace
+
+ \item J, 74
+ \item j, 106
+
+ \indexspace
+
+ \item K, 75
+ \item k, 107
+
+ \indexspace
+
+ \item L, 76
+ \item l, 108
+
+ \indexspace
+
+ \item M, 77
+ \item m, 109
+
+ \indexspace
+
+ \item N, 78
+ \item n, 110
+
+ \indexspace
+
+ \item O, 79
+ \item o, 111
+
+ \indexspace
+
+ \item P, 80
+ \item p, 112
+
+ \indexspace
+
+ \item Q, 81
+ \item q, 113
+
+ \indexspace
+
+ \item R, 82
+ \item r, 114
+
+ \indexspace
+
+ \item S, 83
+ \item s, 115
+
+ \indexspace
+
+ \item T, 84
+ \item t, 116
+
+ \indexspace
+
+ \item U, 85
+ \item u, 117
+
+ \indexspace
+
+ \item V, 86
+ \item v, 118
+
+ \indexspace
+
+ \item W, 87
+ \item w, 119
+
+ \indexspace
+
+ \item X, 88
+ \item x, 120
+
+ \indexspace
+
+ \item Y, 89
+ \item y, 121
+
+ \indexspace
+
+ \item Z, 90
+ \item z, 122
+
+ \indexspace
+
+ \item \verb== (DELete), 127
+
+ \indexspace
+
+ \item € (character 128 (octal 200) (hex 80)), 128
+
+ \indexspace
+
+ \item (character 129 (octal 201) (hex 81)), 129
+
+ \indexspace
+
+ \item ‚ (character 130 (octal 202) (hex 82)), 130
+
+ \indexspace
+
+ \item ƒ (character 131 (octal 203) (hex 83)), 131
+
+ \indexspace
+
+ \item „ (character 132 (octal 204) (hex 84)), 132
+
+ \indexspace
+
+ \item … (character 133 (octal 205) (hex 85)), 133
+
+ \indexspace
+
+ \item † (character 134 (octal 206) (hex 86)), 134
+
+ \indexspace
+
+ \item ‡ (character 135 (octal 207) (hex 87)), 135
+
+ \indexspace
+
+ \item ˆ (character 136 (octal 210) (hex 88)), 136
+
+ \indexspace
+
+ \item ‰ (character 137 (octal 211) (hex 89)), 137
+
+ \indexspace
+
+ \item Š (character 138 (octal 212) (hex 8a)), 138
+
+ \indexspace
+
+ \item ‹ (character 139 (octal 213) (hex 8b)), 139
+
+ \indexspace
+
+ \item Π(character 140 (octal 214) (hex 8c)), 140
+
+ \indexspace
+
+ \item (character 141 (octal 215) (hex 8d)), 141
+
+ \indexspace
+
+ \item Ž (character 142 (octal 216) (hex 8e)), 142
+
+ \indexspace
+
+ \item (character 143 (octal 217) (hex 8f)), 143
+
+ \indexspace
+
+ \item (character 144 (octal 220) (hex 90)), 144
+
+ \indexspace
+
+ \item ‘ (character 145 (octal 221) (hex 91)), 145
+
+ \indexspace
+
+ \item ’ (character 146 (octal 222) (hex 92)), 146
+
+ \indexspace
+
+ \item “ (character 147 (octal 223) (hex 93)), 147
+
+ \indexspace
+
+ \item ” (character 148 (octal 224) (hex 94)), 148
+
+ \indexspace
+
+ \item • (character 149 (octal 225) (hex 95)), 149
+
+ \indexspace
+
+ \item – (character 150 (octal 226) (hex 96)), 150
+
+ \indexspace
+
+ \item — (character 151 (octal 227) (hex 97)), 151
+
+ \indexspace
+
+ \item ˜ (character 152 (octal 230) (hex 98)), 152
+
+ \indexspace
+
+ \item ™ (character 153 (octal 231) (hex 99)), 153
+
+ \indexspace
+
+ \item š (character 154 (octal 232) (hex 9a)), 154
+
+ \indexspace
+
+ \item › (character 155 (octal 233) (hex 9b)), 155
+
+ \indexspace
+
+ \item œ (character 156 (octal 234) (hex 9c)), 156
+
+ \indexspace
+
+ \item (character 157 (octal 235) (hex 9d)), 157
+
+ \indexspace
+
+ \item ž (character 158 (octal 236) (hex 9e)), 158
+
+ \indexspace
+
+ \item Ÿ (character 159 (octal 237) (hex 9f)), 159
+
+ \indexspace
+
+ \item   (character 160 (octal 240) (hex a0)), 160
+
+ \indexspace
+
+ \item ¡ (character 161 (octal 241) (hex a1)), 161
+
+ \indexspace
+
+ \item ¢ (character 162 (octal 242) (hex a2)), 162
+
+ \indexspace
+
+ \item £ (character 163 (octal 243) (hex a3)), 163
+
+ \indexspace
+
+ \item ¤ (character 164 (octal 244) (hex a4)), 164
+
+ \indexspace
+
+ \item ¥ (character 165 (octal 245) (hex a5)), 165
+
+ \indexspace
+
+ \item ¦ (character 166 (octal 246) (hex a6)), 166
+
+ \indexspace
+
+ \item § (character 167 (octal 247) (hex a7)), 167
+
+ \indexspace
+
+ \item ¨ (character 168 (octal 250) (hex a8)), 168
+
+ \indexspace
+
+ \item © (character 169 (octal 251) (hex a9)), 169
+
+ \indexspace
+
+ \item ª (character 170 (octal 252) (hex aa)), 170
+
+ \indexspace
+
+ \item « (character 171 (octal 253) (hex ab)), 171
+
+ \indexspace
+
+ \item ¬ (character 172 (octal 254) (hex ac)), 172
+
+ \indexspace
+
+ \item ­ (character 173 (octal 255) (hex ad)), 173
+
+ \indexspace
+
+ \item ® (character 174 (octal 256) (hex ae)), 174
+
+ \indexspace
+
+ \item ¯ (character 175 (octal 257) (hex af)), 175
+
+ \indexspace
+
+ \item ° (character 176 (octal 260) (hex b0)), 176
+
+ \indexspace
+
+ \item ± (character 177 (octal 261) (hex b1)), 177
+
+ \indexspace
+
+ \item ² (character 178 (octal 262) (hex b2)), 178
+
+ \indexspace
+
+ \item ³ (character 179 (octal 263) (hex b3)), 179
+
+ \indexspace
+
+ \item ´ (character 180 (octal 264) (hex b4)), 180
+
+ \indexspace
+
+ \item µ (character 181 (octal 265) (hex b5)), 181
+
+ \indexspace
+
+ \item ¶ (character 182 (octal 266) (hex b6)), 182
+
+ \indexspace
+
+ \item · (character 183 (octal 267) (hex b7)), 183
+
+ \indexspace
+
+ \item ¸ (character 184 (octal 270) (hex b8)), 184
+
+ \indexspace
+
+ \item ¹ (character 185 (octal 271) (hex b9)), 185
+
+ \indexspace
+
+ \item º (character 186 (octal 272) (hex ba)), 186
+
+ \indexspace
+
+ \item » (character 187 (octal 273) (hex bb)), 187
+
+ \indexspace
+
+ \item ¼ (character 188 (octal 274) (hex bc)), 188
+
+ \indexspace
+
+ \item ½ (character 189 (octal 275) (hex bd)), 189
+
+ \indexspace
+
+ \item ¾ (character 190 (octal 276) (hex be)), 190
+
+ \indexspace
+
+ \item ¿ (character 191 (octal 277) (hex bf)), 191
+
+ \indexspace
+
+ \item À (character 192 (octal 300) (hex c0)), 192
+
+ \indexspace
+
+ \item Á (character 193 (octal 301) (hex c1)), 193
+
+ \indexspace
+
+ \item  (character 194 (octal 302) (hex c2)), 194
+
+ \indexspace
+
+ \item à (character 195 (octal 303) (hex c3)), 195
+
+ \indexspace
+
+ \item Ä (character 196 (octal 304) (hex c4)), 196
+
+ \indexspace
+
+ \item Å (character 197 (octal 305) (hex c5)), 197
+
+ \indexspace
+
+ \item Æ (character 198 (octal 306) (hex c6)), 198
+
+ \indexspace
+
+ \item Ç (character 199 (octal 307) (hex c7)), 199
+
+ \indexspace
+
+ \item È (character 200 (octal 310) (hex c8)), 200
+
+ \indexspace
+
+ \item É (character 201 (octal 311) (hex c9)), 201
+
+ \indexspace
+
+ \item Ê (character 202 (octal 312) (hex ca)), 202
+
+ \indexspace
+
+ \item Ë (character 203 (octal 313) (hex cb)), 203
+
+ \indexspace
+
+ \item Ì (character 204 (octal 314) (hex cc)), 204
+
+ \indexspace
+
+ \item Í (character 205 (octal 315) (hex cd)), 205
+
+ \indexspace
+
+ \item Î (character 206 (octal 316) (hex ce)), 206
+
+ \indexspace
+
+ \item Ï (character 207 (octal 317) (hex cf)), 207
+
+ \indexspace
+
+ \item Ð (character 208 (octal 320) (hex d0)), 208
+
+ \indexspace
+
+ \item Ñ (character 209 (octal 321) (hex d1)), 209
+
+ \indexspace
+
+ \item Ò (character 210 (octal 322) (hex d2)), 210
+
+ \indexspace
+
+ \item Ó (character 211 (octal 323) (hex d3)), 211
+
+ \indexspace
+
+ \item Ô (character 212 (octal 324) (hex d4)), 212
+
+ \indexspace
+
+ \item Õ (character 213 (octal 325) (hex d5)), 213
+
+ \indexspace
+
+ \item Ö (character 214 (octal 326) (hex d6)), 214
+
+ \indexspace
+
+ \item × (character 215 (octal 327) (hex d7)), 215
+
+ \indexspace
+
+ \item Ø (character 216 (octal 330) (hex d8)), 216
+
+ \indexspace
+
+ \item Ù (character 217 (octal 331) (hex d9)), 217
+
+ \indexspace
+
+ \item Ú (character 218 (octal 332) (hex da)), 218
+
+ \indexspace
+
+ \item Û (character 219 (octal 333) (hex db)), 219
+
+ \indexspace
+
+ \item Ü (character 220 (octal 334) (hex dc)), 220
+
+ \indexspace
+
+ \item Ý (character 221 (octal 335) (hex dd)), 221
+
+ \indexspace
+
+ \item Þ (character 222 (octal 336) (hex de)), 222
+
+ \indexspace
+
+ \item ß (character 223 (octal 337) (hex df)), 223
+
+ \indexspace
+
+ \item à (character 224 (octal 340) (hex e0)), 224
+
+ \indexspace
+
+ \item á (character 225 (octal 341) (hex e1)), 225
+
+ \indexspace
+
+ \item â (character 226 (octal 342) (hex e2)), 226
+
+ \indexspace
+
+ \item ã (character 227 (octal 343) (hex e3)), 227
+
+ \indexspace
+
+ \item ä (character 228 (octal 344) (hex e4)), 228
+
+ \indexspace
+
+ \item å (character 229 (octal 345) (hex e5)), 229
+
+ \indexspace
+
+ \item æ (character 230 (octal 346) (hex e6)), 230
+
+ \indexspace
+
+ \item ç (character 231 (octal 347) (hex e7)), 231
+
+ \indexspace
+
+ \item è (character 232 (octal 350) (hex e8)), 232
+
+ \indexspace
+
+ \item é (character 233 (octal 351) (hex e9)), 233
+
+ \indexspace
+
+ \item ê (character 234 (octal 352) (hex ea)), 234
+
+ \indexspace
+
+ \item ë (character 235 (octal 353) (hex eb)), 235
+
+ \indexspace
+
+ \item ì (character 236 (octal 354) (hex ec)), 236
+
+ \indexspace
+
+ \item í (character 237 (octal 355) (hex ed)), 237
+
+ \indexspace
+
+ \item î (character 238 (octal 356) (hex ee)), 238
+
+ \indexspace
+
+ \item ï (character 239 (octal 357) (hex ef)), 239
+
+ \indexspace
+
+ \item ð (character 240 (octal 360) (hex f0)), 240
+
+ \indexspace
+
+ \item ñ (character 241 (octal 361) (hex f1)), 241
+
+ \indexspace
+
+ \item ò (character 242 (octal 362) (hex f2)), 242
+
+ \indexspace
+
+ \item ó (character 243 (octal 363) (hex f3)), 243
+
+ \indexspace
+
+ \item ô (character 244 (octal 364) (hex f4)), 244
+
+ \indexspace
+
+ \item õ (character 245 (octal 365) (hex f5)), 245
+
+ \indexspace
+
+ \item ö (character 246 (octal 366) (hex f6)), 246
+
+ \indexspace
+
+ \item ÷ (character 247 (octal 367) (hex f7)), 247
+
+ \indexspace
+
+ \item ø (character 248 (octal 370) (hex f8)), 248
+
+ \indexspace
+
+ \item ù (character 249 (octal 371) (hex f9)), 249
+
+ \indexspace
+
+ \item ú (character 250 (octal 372) (hex fa)), 250
+
+ \indexspace
+
+ \item û (character 251 (octal 373) (hex fb)), 251
+
+ \indexspace
+
+ \item ü (character 252 (octal 374) (hex fc)), 252
+
+ \indexspace
+
+ \item ý (character 253 (octal 375) (hex fd)), 253
+
+ \indexspace
+
+ \item þ (character 254 (octal 376) (hex fe)), 254
+
+ \indexspace
+
+ \item ÿ (character 255 (octal 377) (hex ff)), 255
+
+\end{theindex}
diff --git a/indexing/makeindex/test/ok-b211f.ilg b/indexing/makeindex/test/ok-b211f.ilg
new file mode 100644
index 0000000000..1e8f9adcbe
--- /dev/null
+++ b/indexing/makeindex/test/ok-b211f.ilg
@@ -0,0 +1,6 @@
+This is makeindex, portable version 2.12 [26-May-1993].
+Scanning input file b211f.idx....done (4 entries accepted, 0 rejected).
+Sorting entries....done (9 comparisons).
+Generating output file b211f.ind....done (5 lines written, 0 warnings).
+Output written in b211f.ind.
+Transcript written in b211f.ilg.
diff --git a/indexing/makeindex/test/ok-b211f.ind b/indexing/makeindex/test/ok-b211f.ind
new file mode 100644
index 0000000000..b1dad11e78
--- /dev/null
+++ b/indexing/makeindex/test/ok-b211f.ind
@@ -0,0 +1,5 @@
+\begin{theindex}
+
+ \item C++ language, 7-2--7-10
+
+\end{theindex}
diff --git a/indexing/makeindex/test/ok-b211g.ilg b/indexing/makeindex/test/ok-b211g.ilg
new file mode 100644
index 0000000000..88718562d8
--- /dev/null
+++ b/indexing/makeindex/test/ok-b211g.ilg
@@ -0,0 +1,39 @@
+This is makeindex, portable version 2.12 [26-May-1993].
+Scanning input file b211g.idx....done (39 entries accepted, 0 rejected).
+Sorting entries....done (196 comparisons).
+Generating output file b211g.ind....
+## Warning (input = b211g.idx, line = 14; output = b211g.ind, line = 18):
+ -- Illegal range formation: starting & ending pages are of different types.
+
+## Warning (input = b211g.idx, line = 21; output = b211g.ind, line = 23):
+ -- Inconsistent page encapsulator bold within range.
+
+## Warning (input = b211g.idx, line = 23; output = b211g.ind, line = 28):
+ -- Conflicting entries: multiple encaps for the same page under same key.
+
+## Warning (input = b211g.idx, line = 24; output = b211g.ind, line = 28):
+ -- Conflicting entries: multiple encaps for the same page under same key.
+
+## Warning (input = b211g.idx, line = 25; output = b211g.ind, line = 28):
+ -- Conflicting entries: multiple encaps for the same page under same key.
+
+## Warning (input = b211g.idx, line = 26; output = b211g.ind, line = 28):
+ -- Conflicting entries: multiple encaps for the same page under same key.
+
+## Warning (input = b211g.idx, line = 27; output = b211g.ind, line = 28):
+ -- Conflicting entries: multiple encaps for the same page under same key.
+
+## Warning (input = b211g.idx, line = 28; output = b211g.ind, line = 29):
+ -- Conflicting entries: multiple encaps for the same page under same key.
+
+## Warning (input = b211g.idx, line = 32; output = b211g.ind, line = 33):
+ -- Inconsistent page encapsulator bold within range.
+
+## Warning (input = b211g.idx, line = 33; output = b211g.ind, line = 33):
+ -- Inconsistent page encapsulator bold within range.
+
+## Warning (input = b211g.idx, line = 36; output = b211g.ind, line = 37):
+ -- Illegal range formation: starting & ending pages are of different types.
+done (43 lines written, 11 warnings).
+Output written in b211g.ind.
+Transcript written in b211g.ilg.
diff --git a/indexing/makeindex/test/ok-b211g.ind b/indexing/makeindex/test/ok-b211g.ind
new file mode 100644
index 0000000000..d0a25e9018
--- /dev/null
+++ b/indexing/makeindex/test/ok-b211g.ind
@@ -0,0 +1,43 @@
+\begin{theindex}
+
+ \item {\it aa\/}
+ \subitem {\it bb\/}
+ \subsubitem {\it cc\/}, 1
+ \item alpha, 1--5
+ \subitem beta, 3
+ \subsubitem gamma, 10
+ \item alpha@beta, 1
+
+ \indexspace
+
+ \item beta, \bold{1--5}
+ \item {\it beta\/}, 1
+
+ \indexspace
+
+ \item delta, i--iv, \see{beta}{1--7}
+
+ \indexspace
+
+ \item epsilon, 1--5
+ \item eta, \bold{3}, 1--5
+
+ \indexspace
+
+ \item f\"ur, 1
+ \item foo, 5, \bold{5}, \italic{5}, \roman{5}, \sanserif{5},
+ \slanted{5}, \smallcaps{5}
+
+ \indexspace
+
+ \item gamma, \bold{1}, \bold{3}, 1--5
+
+ \indexspace
+
+ \item theta, i--iv, 3--7
+
+ \indexspace
+
+ \item zeta, \bold{1--5}
+
+\end{theindex}
diff --git a/indexing/makeindex/test/ok-b211h.ilg b/indexing/makeindex/test/ok-b211h.ilg
new file mode 100644
index 0000000000..42b162a588
--- /dev/null
+++ b/indexing/makeindex/test/ok-b211h.ilg
@@ -0,0 +1,6 @@
+This is makeindex, portable version 2.12 [26-May-1993].
+Scanning input file b211h.idx....done (254 entries accepted, 0 rejected).
+Sorting entries.....done (1930 comparisons).
+Generating output file b211h.ind....done (819 lines written, 0 warnings).
+Output written in b211h.ind.
+Transcript written in b211h.ilg.
diff --git a/indexing/makeindex/test/ok-b211h.ind b/indexing/makeindex/test/ok-b211h.ind
new file mode 100644
index 0000000000..2d91b74920
--- /dev/null
+++ b/indexing/makeindex/test/ok-b211h.ind
@@ -0,0 +1,819 @@
+\begin{theindex}
+
+ \item ! (exclamation point), 33
+ \item " (quotation mark)), 34
+ \item \# (sharp sign), 35
+ \item \$ (dollar sign), 36
+ \item \% (percent sign), 37
+ \item \& (ampersand), 38
+ \item ' (apostrophe), 39
+ \item ( (left parenthesis), 40
+ \item ) (right parenthesis), 41
+ \item * (asterisk), 42
+ \item + (plus), 43
+ \item , (comma), 44
+ \item - (minus), 45
+ \item . (period), 46
+ \item / (slash), 47
+ \item : (colon), 58
+ \item ; (semicolon), 59
+ \item $<$ (left angle bracket), 60
+ \item = (equals), 61
+ \item $>$ (right angle bracket), 62
+ \item ? (query), 63
+ \item @ (at sign), 64
+ \item [ (left square bracket), 91
+ \item \verb=\= (backslash), 92
+ \item ] (right square bracket), 93
+ \item \verb=^= (caret), 94
+ \item \verb=_= (underscore), 95
+ \item \verb=~= (grave accent), 96
+ \item \{ (left brace), 123
+ \item \verb=|= (vertical bar), 124
+ \item \} (right brace), 125
+ \item \verb=~= (tilde), 126
+
+ \indexspace
+
+ \item 0, 48
+ \item 1, 49
+ \item 2, 50
+ \item 3, 51
+ \item 4, 52
+ \item 5, 53
+ \item 6, 54
+ \item 7, 55
+ \item 8, 56
+ \item 9, 57
+
+ \indexspace
+
+ \item \char1 (character 1 (octal 1) (hex 1)), 1
+
+ \indexspace
+
+ \item \char2 (character 2 (octal 2) (hex 2)), 2
+
+ \indexspace
+
+ \item \char3 (character 3 (octal 3) (hex 3)), 3
+
+ \indexspace
+
+ \item \char4 (character 4 (octal 4) (hex 4)), 4
+
+ \indexspace
+
+ \item \char5 (character 5 (octal 5) (hex 5)), 5
+
+ \indexspace
+
+ \item \char6 (character 6 (octal 6) (hex 6)), 6
+
+ \indexspace
+
+ \item \char7 (character 7 (octal 7) (hex 7)), 7
+
+ \indexspace
+
+ \item \char8 (character 8 (octal 10) (hex 8)), 8
+
+ \indexspace
+
+ \item \char9 (character 9 (octal 11) (hex 9)), 9
+
+ \indexspace
+
+ \item \char10 (character 10 (octal 12) (hex a)), 10
+
+ \indexspace
+
+ \item \char11 (character 11 (octal 13) (hex b)), 11
+
+ \indexspace
+
+ \item \char12 (character 12 (octal 14) (hex c)), 12
+
+ \indexspace
+
+ \item \char13 (character 13 (octal 15) (hex d)), 13
+
+ \indexspace
+
+ \item \char14 (character 14 (octal 16) (hex e)), 14
+
+ \indexspace
+
+ \item \char15 (character 15 (octal 17) (hex f)), 15
+
+ \indexspace
+
+ \item \char16 (character 16 (octal 20) (hex 10)), 16
+
+ \indexspace
+
+ \item \char17 (character 17 (octal 21) (hex 11)), 17
+
+ \indexspace
+
+ \item \char18 (character 18 (octal 22) (hex 12)), 18
+
+ \indexspace
+
+ \item \char19 (character 19 (octal 23) (hex 13)), 19
+
+ \indexspace
+
+ \item \char20 (character 20 (octal 24) (hex 14)), 20
+
+ \indexspace
+
+ \item \char21 (character 21 (octal 25) (hex 15)), 21
+
+ \indexspace
+
+ \item \char22 (character 22 (octal 26) (hex 16)), 22
+
+ \indexspace
+
+ \item \char23 (character 23 (octal 27) (hex 17)), 23
+
+ \indexspace
+
+ \item \char24 (character 24 (octal 30) (hex 18)), 24
+
+ \indexspace
+
+ \item \char25 (character 25 (octal 31) (hex 19)), 25
+
+ \indexspace
+
+ \item \char27 (character 27 (octal 33) (hex 1b)), 27
+
+ \indexspace
+
+ \item \char28 (character 28 (octal 34) (hex 1c)), 28
+
+ \indexspace
+
+ \item \char29 (character 29 (octal 35) (hex 1d)), 29
+
+ \indexspace
+
+ \item \char30 (character 30 (octal 36) (hex 1e)), 30
+
+ \indexspace
+
+ \item \char31 (character 31 (octal 37) (hex 1f)), 31
+
+ \indexspace
+
+ \item (space), 32
+
+ \indexspace
+
+ \item A, 65
+ \item a, 97
+
+ \indexspace
+
+ \item B, 66
+ \item b, 98
+
+ \indexspace
+
+ \item C, 67
+ \item c, 99
+
+ \indexspace
+
+ \item D, 68
+ \item d, 100
+
+ \indexspace
+
+ \item E, 69
+ \item e, 101
+
+ \indexspace
+
+ \item F, 70
+ \item f, 102
+
+ \indexspace
+
+ \item G, 71
+ \item g, 103
+
+ \indexspace
+
+ \item H, 72
+ \item h, 104
+
+ \indexspace
+
+ \item I, 73
+ \item i, 105
+
+ \indexspace
+
+ \item J, 74
+ \item j, 106
+
+ \indexspace
+
+ \item K, 75
+ \item k, 107
+
+ \indexspace
+
+ \item L, 76
+ \item l, 108
+
+ \indexspace
+
+ \item M, 77
+ \item m, 109
+
+ \indexspace
+
+ \item N, 78
+ \item n, 110
+
+ \indexspace
+
+ \item O, 79
+ \item o, 111
+
+ \indexspace
+
+ \item P, 80
+ \item p, 112
+
+ \indexspace
+
+ \item Q, 81
+ \item q, 113
+
+ \indexspace
+
+ \item R, 82
+ \item r, 114
+
+ \indexspace
+
+ \item S, 83
+ \item s, 115
+
+ \indexspace
+
+ \item T, 84
+ \item t, 116
+
+ \indexspace
+
+ \item U, 85
+ \item u, 117
+
+ \indexspace
+
+ \item V, 86
+ \item v, 118
+
+ \indexspace
+
+ \item W, 87
+ \item w, 119
+
+ \indexspace
+
+ \item X, 88
+ \item x, 120
+
+ \indexspace
+
+ \item Y, 89
+ \item y, 121
+
+ \indexspace
+
+ \item Z, 90
+ \item z, 122
+
+ \indexspace
+
+ \item \verb== (DELete), 127
+
+ \indexspace
+
+ \item € (character 128 (octal 200) (hex 80)), 128
+
+ \indexspace
+
+ \item (character 129 (octal 201) (hex 81)), 129
+
+ \indexspace
+
+ \item ‚ (character 130 (octal 202) (hex 82)), 130
+
+ \indexspace
+
+ \item ƒ (character 131 (octal 203) (hex 83)), 131
+
+ \indexspace
+
+ \item „ (character 132 (octal 204) (hex 84)), 132
+
+ \indexspace
+
+ \item … (character 133 (octal 205) (hex 85)), 133
+
+ \indexspace
+
+ \item † (character 134 (octal 206) (hex 86)), 134
+
+ \indexspace
+
+ \item ‡ (character 135 (octal 207) (hex 87)), 135
+
+ \indexspace
+
+ \item ˆ (character 136 (octal 210) (hex 88)), 136
+
+ \indexspace
+
+ \item ‰ (character 137 (octal 211) (hex 89)), 137
+
+ \indexspace
+
+ \item Š (character 138 (octal 212) (hex 8a)), 138
+
+ \indexspace
+
+ \item ‹ (character 139 (octal 213) (hex 8b)), 139
+
+ \indexspace
+
+ \item Π(character 140 (octal 214) (hex 8c)), 140
+
+ \indexspace
+
+ \item (character 141 (octal 215) (hex 8d)), 141
+
+ \indexspace
+
+ \item Ž (character 142 (octal 216) (hex 8e)), 142
+
+ \indexspace
+
+ \item (character 143 (octal 217) (hex 8f)), 143
+
+ \indexspace
+
+ \item (character 144 (octal 220) (hex 90)), 144
+
+ \indexspace
+
+ \item ‘ (character 145 (octal 221) (hex 91)), 145
+
+ \indexspace
+
+ \item ’ (character 146 (octal 222) (hex 92)), 146
+
+ \indexspace
+
+ \item “ (character 147 (octal 223) (hex 93)), 147
+
+ \indexspace
+
+ \item ” (character 148 (octal 224) (hex 94)), 148
+
+ \indexspace
+
+ \item • (character 149 (octal 225) (hex 95)), 149
+
+ \indexspace
+
+ \item – (character 150 (octal 226) (hex 96)), 150
+
+ \indexspace
+
+ \item — (character 151 (octal 227) (hex 97)), 151
+
+ \indexspace
+
+ \item ˜ (character 152 (octal 230) (hex 98)), 152
+
+ \indexspace
+
+ \item ™ (character 153 (octal 231) (hex 99)), 153
+
+ \indexspace
+
+ \item š (character 154 (octal 232) (hex 9a)), 154
+
+ \indexspace
+
+ \item › (character 155 (octal 233) (hex 9b)), 155
+
+ \indexspace
+
+ \item œ (character 156 (octal 234) (hex 9c)), 156
+
+ \indexspace
+
+ \item (character 157 (octal 235) (hex 9d)), 157
+
+ \indexspace
+
+ \item ž (character 158 (octal 236) (hex 9e)), 158
+
+ \indexspace
+
+ \item Ÿ (character 159 (octal 237) (hex 9f)), 159
+
+ \indexspace
+
+ \item   (character 160 (octal 240) (hex a0)), 160
+
+ \indexspace
+
+ \item ¡ (character 161 (octal 241) (hex a1)), 161
+
+ \indexspace
+
+ \item ¢ (character 162 (octal 242) (hex a2)), 162
+
+ \indexspace
+
+ \item £ (character 163 (octal 243) (hex a3)), 163
+
+ \indexspace
+
+ \item ¤ (character 164 (octal 244) (hex a4)), 164
+
+ \indexspace
+
+ \item ¥ (character 165 (octal 245) (hex a5)), 165
+
+ \indexspace
+
+ \item ¦ (character 166 (octal 246) (hex a6)), 166
+
+ \indexspace
+
+ \item § (character 167 (octal 247) (hex a7)), 167
+
+ \indexspace
+
+ \item ¨ (character 168 (octal 250) (hex a8)), 168
+
+ \indexspace
+
+ \item © (character 169 (octal 251) (hex a9)), 169
+
+ \indexspace
+
+ \item ª (character 170 (octal 252) (hex aa)), 170
+
+ \indexspace
+
+ \item « (character 171 (octal 253) (hex ab)), 171
+
+ \indexspace
+
+ \item ¬ (character 172 (octal 254) (hex ac)), 172
+
+ \indexspace
+
+ \item ­ (character 173 (octal 255) (hex ad)), 173
+
+ \indexspace
+
+ \item ® (character 174 (octal 256) (hex ae)), 174
+
+ \indexspace
+
+ \item ¯ (character 175 (octal 257) (hex af)), 175
+
+ \indexspace
+
+ \item ° (character 176 (octal 260) (hex b0)), 176
+
+ \indexspace
+
+ \item ± (character 177 (octal 261) (hex b1)), 177
+
+ \indexspace
+
+ \item ² (character 178 (octal 262) (hex b2)), 178
+
+ \indexspace
+
+ \item ³ (character 179 (octal 263) (hex b3)), 179
+
+ \indexspace
+
+ \item ´ (character 180 (octal 264) (hex b4)), 180
+
+ \indexspace
+
+ \item µ (character 181 (octal 265) (hex b5)), 181
+
+ \indexspace
+
+ \item ¶ (character 182 (octal 266) (hex b6)), 182
+
+ \indexspace
+
+ \item · (character 183 (octal 267) (hex b7)), 183
+
+ \indexspace
+
+ \item ¸ (character 184 (octal 270) (hex b8)), 184
+
+ \indexspace
+
+ \item ¹ (character 185 (octal 271) (hex b9)), 185
+
+ \indexspace
+
+ \item º (character 186 (octal 272) (hex ba)), 186
+
+ \indexspace
+
+ \item » (character 187 (octal 273) (hex bb)), 187
+
+ \indexspace
+
+ \item ¼ (character 188 (octal 274) (hex bc)), 188
+
+ \indexspace
+
+ \item ½ (character 189 (octal 275) (hex bd)), 189
+
+ \indexspace
+
+ \item ¾ (character 190 (octal 276) (hex be)), 190
+
+ \indexspace
+
+ \item ¿ (character 191 (octal 277) (hex bf)), 191
+
+ \indexspace
+
+ \item À (character 192 (octal 300) (hex c0)), 192
+
+ \indexspace
+
+ \item Á (character 193 (octal 301) (hex c1)), 193
+
+ \indexspace
+
+ \item  (character 194 (octal 302) (hex c2)), 194
+
+ \indexspace
+
+ \item à (character 195 (octal 303) (hex c3)), 195
+
+ \indexspace
+
+ \item Ä (character 196 (octal 304) (hex c4)), 196
+
+ \indexspace
+
+ \item Å (character 197 (octal 305) (hex c5)), 197
+
+ \indexspace
+
+ \item Æ (character 198 (octal 306) (hex c6)), 198
+
+ \indexspace
+
+ \item Ç (character 199 (octal 307) (hex c7)), 199
+
+ \indexspace
+
+ \item È (character 200 (octal 310) (hex c8)), 200
+
+ \indexspace
+
+ \item É (character 201 (octal 311) (hex c9)), 201
+
+ \indexspace
+
+ \item Ê (character 202 (octal 312) (hex ca)), 202
+
+ \indexspace
+
+ \item Ë (character 203 (octal 313) (hex cb)), 203
+
+ \indexspace
+
+ \item Ì (character 204 (octal 314) (hex cc)), 204
+
+ \indexspace
+
+ \item Í (character 205 (octal 315) (hex cd)), 205
+
+ \indexspace
+
+ \item Î (character 206 (octal 316) (hex ce)), 206
+
+ \indexspace
+
+ \item Ï (character 207 (octal 317) (hex cf)), 207
+
+ \indexspace
+
+ \item Ð (character 208 (octal 320) (hex d0)), 208
+
+ \indexspace
+
+ \item Ñ (character 209 (octal 321) (hex d1)), 209
+
+ \indexspace
+
+ \item Ò (character 210 (octal 322) (hex d2)), 210
+
+ \indexspace
+
+ \item Ó (character 211 (octal 323) (hex d3)), 211
+
+ \indexspace
+
+ \item Ô (character 212 (octal 324) (hex d4)), 212
+
+ \indexspace
+
+ \item Õ (character 213 (octal 325) (hex d5)), 213
+
+ \indexspace
+
+ \item Ö (character 214 (octal 326) (hex d6)), 214
+
+ \indexspace
+
+ \item × (character 215 (octal 327) (hex d7)), 215
+
+ \indexspace
+
+ \item Ø (character 216 (octal 330) (hex d8)), 216
+
+ \indexspace
+
+ \item Ù (character 217 (octal 331) (hex d9)), 217
+
+ \indexspace
+
+ \item Ú (character 218 (octal 332) (hex da)), 218
+
+ \indexspace
+
+ \item Û (character 219 (octal 333) (hex db)), 219
+
+ \indexspace
+
+ \item Ü (character 220 (octal 334) (hex dc)), 220
+
+ \indexspace
+
+ \item Ý (character 221 (octal 335) (hex dd)), 221
+
+ \indexspace
+
+ \item Þ (character 222 (octal 336) (hex de)), 222
+
+ \indexspace
+
+ \item ß (character 223 (octal 337) (hex df)), 223
+
+ \indexspace
+
+ \item à (character 224 (octal 340) (hex e0)), 224
+
+ \indexspace
+
+ \item á (character 225 (octal 341) (hex e1)), 225
+
+ \indexspace
+
+ \item â (character 226 (octal 342) (hex e2)), 226
+
+ \indexspace
+
+ \item ã (character 227 (octal 343) (hex e3)), 227
+
+ \indexspace
+
+ \item ä (character 228 (octal 344) (hex e4)), 228
+
+ \indexspace
+
+ \item å (character 229 (octal 345) (hex e5)), 229
+
+ \indexspace
+
+ \item æ (character 230 (octal 346) (hex e6)), 230
+
+ \indexspace
+
+ \item ç (character 231 (octal 347) (hex e7)), 231
+
+ \indexspace
+
+ \item è (character 232 (octal 350) (hex e8)), 232
+
+ \indexspace
+
+ \item é (character 233 (octal 351) (hex e9)), 233
+
+ \indexspace
+
+ \item ê (character 234 (octal 352) (hex ea)), 234
+
+ \indexspace
+
+ \item ë (character 235 (octal 353) (hex eb)), 235
+
+ \indexspace
+
+ \item ì (character 236 (octal 354) (hex ec)), 236
+
+ \indexspace
+
+ \item í (character 237 (octal 355) (hex ed)), 237
+
+ \indexspace
+
+ \item î (character 238 (octal 356) (hex ee)), 238
+
+ \indexspace
+
+ \item ï (character 239 (octal 357) (hex ef)), 239
+
+ \indexspace
+
+ \item ð (character 240 (octal 360) (hex f0)), 240
+
+ \indexspace
+
+ \item ñ (character 241 (octal 361) (hex f1)), 241
+
+ \indexspace
+
+ \item ò (character 242 (octal 362) (hex f2)), 242
+
+ \indexspace
+
+ \item ó (character 243 (octal 363) (hex f3)), 243
+
+ \indexspace
+
+ \item ô (character 244 (octal 364) (hex f4)), 244
+
+ \indexspace
+
+ \item õ (character 245 (octal 365) (hex f5)), 245
+
+ \indexspace
+
+ \item ö (character 246 (octal 366) (hex f6)), 246
+
+ \indexspace
+
+ \item ÷ (character 247 (octal 367) (hex f7)), 247
+
+ \indexspace
+
+ \item ø (character 248 (octal 370) (hex f8)), 248
+
+ \indexspace
+
+ \item ù (character 249 (octal 371) (hex f9)), 249
+
+ \indexspace
+
+ \item ú (character 250 (octal 372) (hex fa)), 250
+
+ \indexspace
+
+ \item û (character 251 (octal 373) (hex fb)), 251
+
+ \indexspace
+
+ \item ü (character 252 (octal 374) (hex fc)), 252
+
+ \indexspace
+
+ \item ý (character 253 (octal 375) (hex fd)), 253
+
+ \indexspace
+
+ \item þ (character 254 (octal 376) (hex fe)), 254
+
+ \indexspace
+
+ \item ÿ (character 255 (octal 377) (hex ff)), 255
+
+\end{theindex}
diff --git a/indexing/makeindex/test/ok-book.ilg b/indexing/makeindex/test/ok-book.ilg
new file mode 100644
index 0000000000..7c492f9ea3
--- /dev/null
+++ b/indexing/makeindex/test/ok-book.ilg
@@ -0,0 +1,6 @@
+This is makeindex, portable version 2.12 [26-May-1993].
+Scanning input file book.idx........done (4241 entries accepted, 0 rejected).
+Sorting entries...........................................done (59366 comparisons).
+Generating output file book.ind......done (785 lines written, 0 warnings).
+Output written in book.ind.
+Transcript written in book.ilg.
diff --git a/indexing/makeindex/test/ok-book.ind b/indexing/makeindex/test/ok-book.ind
new file mode 100644
index 0000000000..49b939289b
--- /dev/null
+++ b/indexing/makeindex/test/ok-book.ind
@@ -0,0 +1,785 @@
+\begin{theindex}
+
+ \item accreditation, 91, 96
+ \item Ada, i, 122, 123, 186
+ \item AEG-Telefunken AG, 189
+ \item agriculture, v, 28, 202
+ \item Air Traffic Control, 9
+ \item Aiso, Hideo, 165
+ \item Albus, J., 223
+ \item algorithm, 60, 89, 122, 140, 141
+ \subitem Karmarkar's, 141
+ \subitem Khachiyan's, 140
+ \item Alvey program, 66, 104, 181--183
+ \item Alvey, John, 182
+ \item American Micro Devices, 212
+ \item Anderson, William S., 144
+ \item antitrust laws, 3, 55, 70, 73, 74, 133, 137, 146
+ \item Apple Computer Company, 55, 60, 67, 93, 148--150, 174, 196
+ \subitem II, 149
+ \subitem IIe, 149
+ \subitem III, 149
+ \subitem Lisa, 60, 149
+ \subitem Macintosh, 56, 149, 150
+ \item Archbold, Pamela, 229
+ \item Argentina, 33, 34
+ \item Argonne National Laboratory, 126
+ \item ARPANET, 116
+ \item artificial intelligence, 3, 11, 20, 27, 28, 34, 42--45, 116,
+ 131, 136, 154, 162, 163, 167, 178, 180, 184, 185, 194
+ \item Asia, vi, 25, 63, 78, 87, 94, 174, 175, 190, 195
+ \item Association for Computing Machinery, vii, 43, 102, 135, 139
+ \item AT\&T, 42, 67, 136--138, 140, 152, 185
+ \item atomic bomb, 52, 53, 105
+ \item Austria, 177
+ \item automobile, 7, 25, 35, 68, 72, 173, 193, 201, 205, 206
+
+ \indexspace
+
+ \item Babbage, Charles, 103, 122
+ \item balance of trade, 77--80, 132, 133, 212
+ \item ballistic missile defense, 115, 119
+ \item ballistic transport, 135
+ \item Barzini, Luigi, 221
+ \item Bauer, R., 229
+ \item Baxter, William~F., 74, 224
+ \item Beardsley, Tim, 228
+ \item Bechtolsheim, Andy, 93
+ \item Beckurts, Karl Heinz, 188
+ \item Belgium, 188
+ \item Bell Communication Research, 140
+ \item Bell Laboratories, i, 136, 138--141, 171
+ \item Bell, Alexander Graham, 90, 136
+ \item Bell, Eric~T., 27, 222
+ \item Bentley, J., 222
+ \item Bergamini, David, 75, 224
+ \item Berne Convention, 61
+ \item Bethe, Hans, 105
+ \item Big Dragon, 190, 192
+ \item Binford, T., 223
+ \item Bingaman, Senator Jeff, 208
+ \item biotechnology, 13--15, 54, 95
+ \item bit, 36--38, 134, 135, 188, 189
+ \item Bloch, Erich, 126, 225
+ \item Blomstrom, R.~L., 221
+ \item Boeing 707 airplane, 216
+ \item Boeing Aircraft Corporation, 48, 173
+ \item Borrus, Michael, 223, 225
+ \item Boyd, Gerald~M., 230
+ \item Brady, M., 223
+ \item Brandin, David~H., vii, viii, 222, 231
+ \item Brandin, Ellen, viii
+ \item British Telecom, 182, 185
+ \item Brodie, Ivor, 222
+ \item Brookes, Warren~T., 231
+ \item Brookhaven National Laboratory, 126
+ \item Brooks, Harvey, 226
+ \item Brown, Representative George~E., 212
+ \item Buchanan, Ian, vii
+ \item Bull, 147, 168, 178, 185--187
+ \item BUNCH, 143--145
+ \item Burroughs, 143, 145, 146
+ \item bushido, 83
+ \item byte, 36--38
+
+ \indexspace
+
+ \item Canon Inc., 150
+ \item Capasso, F., 229
+ \item capital, vi, 7, 16, 17, 49, 74--77, 104, 113, 130, 153, 158,
+ 193, 202, 208, 210, 212
+ \item capitalism, v
+ \item Caplan, N., 223
+ \item Carnegie-Mellon University, 123
+ \item Carter, President Jimmy, 8
+ \item Central Intelligence Agency, 65, 153
+ \item Centre National de Recherche Scientifique, 185
+ \item Cezar Industries, Ltd., vii
+ \item Chandler, A.~R., 223
+ \item Chen, Pehong, vii
+ \item China, vii, 61, 101--103, 127, 190--192, 195, 196
+ \subitem Cultural Revolution, 10, 101, 102, 190
+ \item Chirac, Premier Jacques, 185
+ \item Chrysler Corporation, 205
+ \item Churchill, Winston, 84, 225
+ \item Cie. Generale de L'\'Electricit\'e, 176, 185
+ \item Clark, Don, 231
+ \item Clarke, Arthur~C., 221
+ \item Codd, Ted, 135
+ \item Cohen, Steven, 206
+ \item Coker, John, vii
+ \item Collins, D., 229
+ \item Colmerauer, Alain, 186
+ \item Commodity Control List, 64, 65
+ \item communications, 6, 7, 9, 25, 34, 42, 55, 116, 137, 138,
+ 140, 141, 145, 146, 151, 167, 168, 171, 172, 178, 180,
+ 184, 187, 188, 194
+ \subitem optical, 22
+ \item compiler, 41, 123
+ \item computational science, 39, 125
+ \item computer, 3, 5, 7--9, 18, 33--44, 48, 49, 55, 63, 64, 72, 102,
+ 116, 122, 123, 127, 128, 131, 132, 134, 138, 139,
+ 141, 142, 145, 146, 148, 150, 151, 161, 163, 167, 168,
+ 172, 193
+ \subitem address, 35, 36
+ \subitem architecture, 10, 26, 34, 35, 77, 116, 120, 129, 154, 156,
+ 162, 164, 167--169, 179, 187, 188
+ \subitem literacy, 5, 195
+ \subitem MARK I, 132
+ \subitem memory, 35, 37, 38, 41, 152, 164
+ \subitem personal, 37, 38, 64, 133, 139, 142, 149, 152, 174, 188,
+ 193, 203
+ \subitem VAX, 141, 168
+ \item computer science, vii, 5, 13, 14, 17, 18, 20, 92, 93, 102, 103,
+ 105, 109, 116, 119, 126, 127, 131, 136, 140, 154, 155,
+ 160, 184
+ \item computer-aided design, 47, 124, 154, 155, 162, 170, 172, 183,
+ 195
+ \item computer-aided engineering, 47
+ \item computer-aided manufacturing, 47, 48, 170, 195
+ \item computer-aided process planning, 47
+ \item computer-integrated manufacturing, 47, 49, 173, 176
+ \item Control Data Corp., 143, 146, 153
+ \item Coordinating Committee, 65, 66, 180
+ \item copyright, 59--62, 150, 196
+ \item Crawford, Mark, 221
+ \item Cray Research, 127, 146
+ \item Cray, Seymour, 40
+ \item creativity, 19, 22, 23, 27, 90, 106, 209
+ \item cryptology, 18, 60
+ \item Cullinan, Terrence, 222
+
+ \indexspace
+
+ \item Daewoo Telecom, 193
+ \item DARPA, vii, 115--118, 126, 182, 185, 220
+ \item Davis III, G.~Gervaise, 223
+ \item Davis, K., 221
+ \item de Vignemont, Minister C., 186
+ \item deficit
+ \subitem budget, 202, 205, 208, 213
+ \subitem trade, 202, 208, 212--214
+ \item degrees
+ \subitem bachelor's, 99, 100
+ \subitem doctoral, 92, 93, 100, 103, 104, 106, 107
+ \subitem master's, 92, 93, 97, 100, 103, 124
+ \item denationalization, 185
+ \item Department of Commerce, vii, 4, 14, 61, 63, 65, 72, 73, 81, 127,
+ 133, 153, 211
+ \item Department of Commerce and Technology (DCT), 211
+ \item Department of Defense, i, vii, 3, 8, 42, 64--66, 72, 73, 94,
+ 113--116, 120--124, 126--128, 130, 133, 208, 210, 211,
+ 216, 218
+ \item Department of Education, 62
+ \item Department of Energy, 65, 126--128
+ \item Department of Justice, 3, 7, 74, 133, 137, 153
+ \item Department of State, 64, 65, 127, 210
+ \item Diamond, S., 231
+ \item Digital Equipment Corporation, 67, 139, 141--144, 152, 168
+ \subitem PDP-7, 139
+ \subitem PDP-8, 141
+ \subitem VAX, 141, 142, 168
+ \item Direction de Recherche d'\'Etudes et Technique, 185
+ \item Doigan, Paul, 226
+ \item Donlon, J.~P., 229
+ \item Dornier, 188
+ \item Dreyfus, Herbert~L., 223
+ \item Dreyfus, Stuart~E., 223
+ \item Dutch Learning, 58
+ \item dynamic RAM, 37, 135, 193
+
+ \indexspace
+
+ \item Eastman Kodak Company, 150, 172
+ \item Eastman, George, 90
+ \item ECRC, 178, 179, 183, 188
+ \item Edison, Thomas A., 90
+ \item education, vi, 5, 11, 19, 29, 52, 69, 89--93, 95--98, 100--110,
+ 124, 125, 190, 201--206, 210, 212, 218--220
+ \subitem continuing, 97, 109
+ \subitem engineering, 91, 92, 94, 96, 98--100, 103, 105, 107, 108,
+ 110, 125
+ \item Einstein, Albert, 52, 105
+ \item Electro-Communications Laboratories, 160, 171, 172
+ \item Electro-Technical Laboratories, 138, 159, 160, 164
+ \item employment, 4, 6, 13, 15, 16, 24, 76, 81, 108, 109, 196, 210,
+ 213
+ \subitem lifetime, 84, 108, 109
+ \item encryption, 9, 65
+ \item engineering, vi, 3, 11, 14, 15, 24, 37, 40, 49, 53, 84, 92, 93,
+ 96, 97, 100, 108, 115, 125, 126, 128, 134
+ \subitem education, 91, 94, 96, 108, 109
+ \subitem faculty, 92--94, 214, 219
+ \item Esaki, Leo, 23
+ \item ESPRIT, vii, 3, 28, 176--178, 181, 183, 188, 189
+ \item Etzold, Thomas~H., 227
+ \item Eureka, 178--180
+ \item Eurobot, 180
+ \item Eurocom, 180
+ \item Europe, vi, vii, 4, 6, 13, 16, 21, 24, 26--29, 44, 49, 53, 66,
+ 78, 80, 82, 86, 101, 109, 113, 127, 133, 162, 175--181,
+ 188, 189, 204, 214
+ \item European Economic Community, 3, 28, 79, 176, 177
+ \item Ewing, Tom, 229
+ \item exchange rate, 75--78
+ \item expert systems, 45, 46, 116, 117, 154, 161, 178, 179, 187, 194
+ \item export control, 4, 64--66, 217
+ \item exports, 57, 63--66, 76, 77, 79, 157, 174, 180, 191, 217
+
+ \indexspace
+
+ \item Fagen, M.~D., 228
+ \item Fairchild Camera and Instrument Corporation, 80, 167
+ \item Federal Automatic Data Processing Reorganization Study, 8
+ \item Federal Aviation Agency, 9
+ \item Federal Bureau of Investigation, 169
+ \item Federal Communications Commission, 54, 137
+ \item Feigenbaum, Edward, 222
+ \item Ferranti, 184
+ \item Fifth Generation Computer Program, vii, 18, 20, 156, 161, 163,
+ 165, 176, 181
+ \item Finland, 177
+ \item Fisher, Franklin~M., 221
+ \item Fishman, Katherine~D., 147, 229
+ \item flexible manufacturing systems, 47, 48
+ \item Food and Drug Administration, 54
+ \item FORTRAN, 39
+ \item France, 29, 57, 68, 79, 91, 96, 106, 107, 109, 172, 180, 181,
+ 184--186
+ \subitem Ministry of Defense, 185
+ \item Franck, James, 105
+ \item Fuchi, Kazuhiro, 162, 163
+ \item Fuji Xerox, 151
+ \item Fujitsu, 37, 80, 158, 164, 167, 168, 173, 204
+
+ \indexspace
+
+ \item Gallaire, Herv\'e, 179
+ \item gallium arsenide, 118, 119, 164, 172, 182, 184
+ \item Gannon, T., 222
+ \item Gartner Group, 132, 133
+ \item General Electric Company, 138, 143, 146, 197
+ \item General Electric Company (UK), 183, 184
+ \item General Motors, 131, 173, 202
+ \item Gephardt amendment, 214
+ \item Gephardt, Representative Richard~A., 214
+ \item German mark, 208
+ \item Germany, 16, 33, 53, 57, 58, 72, 82, 91, 105, 106, 109, 180,
+ 186--189, 208
+ \subitem BMFT, 187, 188
+ \subitem Bundespost, 188
+ \item Gilchrist, Bruce, 224
+ \item Glenn, Senator John, 209, 212, 231
+ \item Goldberg, Adele J., vii
+ \item graduate schools of business, 104, 207
+ \item Graham, Susan L., viii
+ \item Gramm-Rudman bill, 206
+ \item Grayson, Lawrence~P., 225
+ \item Great Britain, 4, 16, 19, 26, 27, 33, 58, 78, 79, 92, 103, 104,
+ 109, 180--184, 186, 190
+ \subitem Department of Trade and Industry, 182, 211
+ \subitem Ministry of Defense, 18, 182
+ \subitem Very High Performance Integrated Circuit Program, 5, 182
+ \item Greenhouse, Linda, 231
+ \item Greenwood, Joel~E., 221
+ \item gross national product, 17, 85, 130, 191, 192, 195, 217
+ \item Groupe de Recherche Coordonn\'e, 185
+ \item GTE, 167, 188, 197
+
+ \indexspace
+
+ \item hardware, 11, 18, 34, 35, 37, 39--42, 60, 64, 77, 123, 132, 134,
+ 141, 143--145, 147, 162, 167, 169
+ \item Harrison, Michael~A., vii, viii, 222, 227
+ \item Harrison, Susan G., viii
+ \item Harvard University, 92, 98, 132
+ \item Hegg, Warren, 222
+ \item Hess, K., 229
+ \item Hewlett-Packard, 67, 144, 147, 148
+ \item Hillkirk, John, 229
+ \item Hirschon, Michael~Wels, 224
+ \item Hitachi, 37, 158, 164, 167--169, 173
+ \item Hodges, Parker, 229
+ \item Hokaido University, 98
+ \item Honeywell, 143, 146, 147, 168, 187
+ \item Hong Kong, 61, 192, 195, 196
+ \item Hunter, Philip, 228
+ \item hydrogen bomb, 105
+
+ \indexspace
+
+ \item Iacocca, Lee, 73, 224
+ \item IBM, 3, 7, 14, 23, 26, 40, 55, 56, 67, 71, 73, 89, 130--136,
+ 139, 141--147, 150--152, 159, 167--169, 185, 186, 188
+ \subitem 3380 disk unit, 134
+ \subitem compatibility, 26, 40, 64, 132, 143--146, 149, 168
+ \subitem Fellow, 135
+ \subitem Research Centers, 134, 136
+ \subsubitem San Jose, 134, 135
+ \subitem System 360, 132, 147
+ \item Iceland, 177
+ \item Ichbiah, Jean, 186
+ \item ICOT, vii, 160--163, 166, 170, 173
+ \item imports, 76, 77, 79, 206, 209
+ \item India, 19, 92
+ \item Indonesia, 61
+ \item Industrial Revolution, 175, 208
+ \item Informatik, 105
+ \item information technology, v--vii, 3, 5--9, 14, 18, 20, 27, 33, 34,
+ 72--75, 77, 103, 113, 118, 120, 121, 125, 131, 132,
+ 153, 158, 160, 163, 169, 171, 173, 176, 180, 181, 184,
+ 186, 189, 192, 194, 195
+ \item Inman, Admiral Bobby R., 67, 153--155
+ \item INMOS, 184
+ \item innovation, 13, 15, 18, 21--23, 27, 53--56, 61, 73, 90, 109,
+ 135--137, 148, 152, 183, 197, 201, 205, 209
+ \item Inst. for New Generation Computer Technology, 179, 182
+ \item integrated circuits, 36, 124, 170, 182, 196
+ \item intellectual property, 67, 74, 194
+ \subitem laws, vi, 26, 58, 59, 62, 150, 169
+ \subitem rights, 26, 61, 67, 150, 169, 194, 210
+ \item International Computers Ltd., 4, 178, 183, 186, 190, 213
+ \item International Telephone and Telegraph, 183, 193, 197
+ \item International Trade Commission, 73, 81, 213
+ \item International Traffic in Arms Regulations, 3, 65
+ \item Israel, 57, 195
+ \item Italy, 188
+
+ \indexspace
+
+ \item Jacob, Jean Paul, vii
+ \item Jacobs, Michael A., vii
+ \item Jacobson, Gary, 229
+ \item Japan, vii, 3--6, 13, 15--17, 19--22, 24--26, 28, 29, 39, 40,
+ 49, 54, 62, 63, 65--68, 70--73, 75, 76, 78--86, 91,
+ 97--101, 103, 104, 108--110, 113, 119, 130, 138, 150,
+ 157--160, 162, 163, 165--176, 180, 183, 190--195,
+ 203--206, 209, 212--214
+ \subitem Incorporated, 72
+ \subitem National Superspeed Computer Project, 163, 164
+ \subitem Next Generation Industries Program, 165
+ \subitem robots, 49
+ \subitem Science and Technology Agency, 166
+ \item Jefferson, Thomas, 29, 177
+ \item Jobs, Steve, 149
+ \item Johnson, Chalmers, 71, 83, 224
+ \item Jonas, Norman, 230
+ \item Joy, William N., 93, 152
+ \item JTECH, 14, 19, 22, 166, 206
+
+ \indexspace
+
+ \item Kahn, David, 223
+ \item Kahn, Robert E., vii, 220
+ \item Karmarkar, Narendra, 140, 141
+ \item Kato, K., 225
+ \item Keio University, 159, 165
+ \item Kelly, Erin A., vii
+ \item Kelly, Joseph, vii
+ \item Kitihara, Eiji, 222
+ \item knowledge engineering, 3, 161, 167, 169
+ \item knowledge-based systems, 45, 46, 179, 182, 185, 194
+ \item Kobayashi, Hishashi, vii
+ \item Kraar, Louis, 230
+ \item Kroger, H., 229
+ \item Kuo, Franklin F., vii
+ \item Kurihara, T., 228
+ \item Kutcher, M., 223
+ \item Kyoto University, 98, 99, 159
+ \item Kyushu University, 98
+
+ \indexspace
+
+ \item Land, Edward, 90
+ \item Lawrence Livermore National Laboratory, 126, 128
+ \item level playing field, 209
+ \item Libya, 66, 215
+ \item license
+ \subitem general, 64
+ \subitem validated, 64
+ \item Lieblein, Edward, 227
+ \item Lighthill, Sir James, 27, 28
+ \item linear programming, 140, 141
+ \item Little Dragons, 192, 195, 196
+ \item Lohr, Steve, 222
+ \item Los Alamos National Laboratories, 126, 160
+ \item Lovelace, Countess Augusta Ada Byron, 103, 122
+ \item Lulin, Gao, 230
+
+ \indexspace
+
+ \item MacArthur, General Douglas, 70
+ \item machine inference, 45, 162
+ \item machine language, 40, 41, 59
+ \item machines, thinking, 43--45
+ \item MacVicar-Whelan, P.~J., 223
+ \item Malaysia, 19, 190, 196
+ \item Malik, Rex, 133, 228
+ \item marketshare, 6, 7, 11, 27, 74, 81, 82, 110, 132, 133, 142,
+ 144, 145, 147, 150, 151, 155, 157, 159, 167, 168, 172,
+ 175, 183, 189, 205, 209, 210, 217
+ \item Matsubara, Tomoo, 229
+ \item Matsushita Electric Industrial Co., 82, 158
+ \item McCarrell, Jeff, vii
+ \item McCarthy, John, 46
+ \item McClellan, Stephen~T., 19, 221
+ \item McCorduck, Pamela, 222
+ \item McGowen, John~J., 221
+ \item McKenna, Regis, 149, 229
+ \item mechatronics, 14, 47
+ \item Meiji Period, 58, 100
+ \item Memorex, 197
+ \item Mexico, 84
+ \item microelectronics, 9--11, 14, 16, 36, 37, 80, 82, 125, 154--156,
+ 165, 167, 172, 173, 176, 177, 180, 182, 184, 189,
+ 193, 194, 196, 213
+ \item Microelectronics and Computer Technology Corporation, 74, 146,
+ 154, 155, 177, 179
+ \item Microelectronics Center of North Carolina, 74, 155, 156
+ \item Military Critical Technologies List (MCTL), 64, 65
+ \item Miller, G.~L., 223
+ \item Miller, Judith, 226
+ \item Miller, William F., vii
+ \item Millstein, James, 223, 225
+ \item minicomputer, 37, 141, 142, 144, 147, 148, 151
+ \item Ministry of Education, 159
+ \item Ministry of Intl. Trade and Industry (MITI), 21, 62, 70--73, 83,
+ 85, 98, 158--168, 170, 171, 173, 182, 194, 208, 211
+ \item missile, 33, 34, 115, 117, 119, 204, 208
+ \item MIT, 95
+ \item Mitsubishi Electric Company, 158, 159, 162, 164, 170
+ \item Mitterrand, President Fran\c cois, 184, 186
+ \item moon, 205, 207
+ \item Morris, J., 223
+ \item Moto-Oka, Tohru, i, 20, 163, 165
+ \item Motorola, 152
+ \item Mu Program, 166
+ \item Murakami, Kunio, 222
+ \item Murray, Julius, 222
+
+ \indexspace
+
+ \item Nagao, Makoto, 229
+ \item Nagoya University, 98
+ \item Nakasone, Prime Minister Yasuhiro, 204
+ \item National Academy of Sciences, vii, 28, 64, 217
+ \item National Aeronautics and Space Administration (NASA), 65, 113,
+ 115, 121, 216
+ \item National Bureau of Standards, 159, 160, 211
+ \item National Cash Register Company, 143, 144, 146
+ \item national debt, 204
+ \item National Productivity and Innovation Act, 74
+ \item National Science Foundation, vii, 95, 113, 125, 126, 163, 211
+ \subitem CISE Program, 125, 126
+ \subitem Engineering Research Centers, 95
+ \subitem Presidential Young Investigators, 125
+ \item National Security Agency, 9, 153
+ \item Nazis, 107
+ \item NEC, 14, 37, 138, 147, 153, 158, 159, 164, 168, 173, 187, 189
+ \item Nevins, J., 223
+ \item New Zealand, 79
+ \item Nippon Telephone and Telegraph, 37, 138, 160, 168, 171, 172,
+ 178, 185
+ \subitem information network system, 171, 172, 178, 185
+ \item Nishida, Toyoaki, 229
+ \item Nishizawa, Junichi, 22, 23, 222
+ \item Nixdorf Computers, 187, 189
+ \item Nixon, President Richard M., 207
+ \item Nobel Prize, 5, 23, 90, 205
+ \item Nordheim, Lothar W., 105
+ \item Norris, William C., 153, 154
+ \item North Atlantic Treaty Organization, 28, 114, 119, 180, 183
+ \item Norway, 53, 177
+ \item Novak, William, 224
+ \item numerical control, 48
+
+ \indexspace
+
+ \item Oak Ridge National Laboratory, 126
+ \item Oki Electric Company, 37, 158, 159, 164
+ \item Olivetti SPA, 189
+ \item Olsen, Kenneth H., 141
+ \item optics, 15, 194
+ \item optoelectronics, 14, 15, 166, 171, 180
+ \subitem Joint Research Laboratory, 166
+ \item Osaka University, 98
+ \item Ouichi, William, 229
+
+ \indexspace
+
+ \item Panama, 84
+ \item patent, 22, 23, 59--61, 71, 90, 139, 155
+ \subitem law, 191
+ \subitem Patent Secrecy act, 60
+ \item Pearl Harbor, 220
+ \item Perle, Richard, 217
+ \item Perot, H. Ross, 202
+ \item personal sequential inference machine, 162, 170
+ \item Philco Corporation, 138
+ \item Philips' Gloeilampenfabrieken, 189
+ \item physics, 13, 23, 39, 57, 90, 91, 105, 106, 120, 128
+ \subitem nuclear, 52, 53, 58, 127, 188
+ \subitem solid state, 140
+ \subitem surface, 135
+ \item Pilot's Associate, 117
+ \item Plato system, 146
+ \item Plessey Company Ltd., 184
+ \item plutonium, 53
+ \item Port, Otis, 230
+ \item Presidential Science Advisor, 207
+ \item Prestowitz, Clyde, vii
+ \item privatization, 185, 187
+ \item Procter, Steven, vii
+ \item professional societies, 97
+ \item PROLOG, 162, 186
+ \item Prospector, 45, 46
+ \item prototype, 26, 37, 124, 128
+ \item PTT, 29, 185
+ \item Public Crypto. Study Group, 60
+
+ \indexspace
+
+ \item Rabinowitch, Eugene, 105
+ \item RACE, 178
+ \item Radio Corporation of America, 138, 143, 145, 197
+ \item RAM, 16, 17, 83, 135, 184, 188
+ \item RAMAC, 134
+ \item Reagan administration, 134
+ \item Reagan, President Ronald, 66, 118, 126, 128, 133, 203, 207, 216,
+ 218, 219
+ \item Reischauer, Edwin~O., 221
+ \item relational database, 135, 185
+ \item Republic of Korea, 19, 25, 78, 82, 190, 192--194, 203, 204, 213
+ \item research and development, 7, 18, 20, 21, 39, 73, 81, 85, 91, 95,
+ 104, 115, 128, 130, 134, 154, 155, 158, 159, 167, 170,
+ 172, 173, 181, 186--188, 191, 195, 196, 211, 215, 216
+ \item research support
+ \subitem computing, 116, 128, 129
+ \item Research Triangle Institute, 155
+ \item Ricoh Inc., 150
+ \item Riganati, J., 222
+ \item Ris, F., 222
+ \item Ritchie, Dennis~M., 139, 228
+ \item Robinson, Arthur~L., 228
+ \item robotics, 14, 15, 28, 47--49, 95, 125, 158, 180, 185, 187, 194,
+ 203
+ \item Roosevelt, President Franklin, 105
+ \item Rositzke, Harry, 224
+ \item Rossol, L., 223
+ \item Roubine, Olivier, vii
+ \item Roy, Rustum, 96, 226
+ \item Rubin, Harry, vii
+ \item Rudman, Senator Warren B., 206, 208
+ \item Rudzinski, Joe, 222
+ \item Russian Revolution, 220
+
+ \indexspace
+
+ \item Sanders, Jerry, 212
+ \item Sandia National Laboratory, 126
+ \item savings, 6, 75
+ \item Scace, R., 229
+ \item SCAP, 70, 71
+ \item Schutz, K., 223
+ \item Scientific Data Systems, 151
+ \item scientists and engineers
+ \subitem demographics of, 89, 91, 92, 94, 100, 103, 107, 195
+ \item semiconductor manufacturers
+ \subitem merchant, 17, 212
+ \item Semiconductor Research Corporation, 155
+ \item service economy, 7, 202, 204, 207
+ \item Seven Dwarfs, 143
+ \item Shapley, Deborah, 96, 226
+ \item Siemens, 178, 186--189
+ \item Sigma Program, 165, 166
+ \item Silicon Valley, 134, 147, 209
+ \item Simpson, Janice~C., 225
+ \item Singapore, 19, 61, 62, 110, 190, 192, 194--196
+ \subitem National Computer Board, 62, 194
+ \item Smith, Bruce~L., 225
+ \item Smith, R., 227
+ \item Smits, F.~M., 228
+ \item smokestack industries, 4, 201
+ \item Snyder, Robert~G., 226
+ \item software, 9, 11, 15, 18, 19, 25, 26, 34, 39--42, 47, 59--64, 67,
+ 89, 119--124, 132, 133, 135, 140, 144, 148--150, 152,
+ 154, 162, 165, 168, 169, 174, 176, 186, 194, 195
+ \subitem custom, 19
+ \subitem engineering, 10, 38, 40, 97, 123, 124, 165--168, 170, 177,
+ 182, 184, 185
+ \subitem market, 6, 19, 121, 133, 195
+ \subsubitem Japanese, 19, 165--167
+ \subitem protection, 59, 60, 62, 150
+ \subitem supercomputer, 39, 40
+ \item Software Engineering Institute, 123
+ \item Software Productivity Consortium, 74
+ \item Sollorzano, Lucia, 230
+ \item Solomon, Ezra, 222
+ \item Solomon, Steven, 231
+ \item Sondheimer, N., 222
+ \item Sony, 23
+ \item South Africa, 66
+ \item Soviet Union, 5, 33, 58, 64, 84, 91, 114, 127, 180, 191, 214,
+ 220
+ \item Spencer, William~J., 56, 223
+ \item Sperry Univac, 143, 145, 146, 188, 197
+ \item Spicer, W., 229
+ \item spinoff, 216, 217
+ \item SRI International, viii
+ \item standard of living, v, 4, 16, 193, 194, 205
+ \item standards, 24, 28, 41, 59, 122, 133, 175, 177
+ \item Stanford University, 46, 95, 169
+ \item STARS Program, 123, 124
+ \item steel, 72, 75, 158, 159, 201, 209
+ \item Stern, Jacques, 187
+ \item Strategic Computing Initiative, vii, 116, 117
+ \item Strategic Defense Initiative, vii, 9, 39, 43, 118--121, 130,
+ 179, 180, 188, 216
+ \item Sumitomo Steel, 158
+ \item Sun Microsystems Inc., i, 93, 142, 148, 151, 152, 174
+ \item supercollider, 205, 216
+ \item supercomputer, 9, 35, 38--40, 125, 127, 128, 146, 165, 168, 180
+ \item Sweden, 177
+ \item Switzerland, 134, 177
+ \item System R, 135
+ \item Szilard, Leo, 105
+
+ \indexspace
+
+ \item Taiwan, 19, 61, 188, 190, 192, 195
+ \item Tajima, Denji, 229
+ \item Technical University of Munich, 105
+ \item technology transfer, 11, 21, 24, 50, 51, 53--59, 61, 66, 67, 85,
+ 108, 122--124, 128, 136, 139--141, 143, 147, 150, 152,
+ 154, 155, 160, 179, 214, 215, 219
+ \item Telecki, George, vii
+ \item telecommunications, 25, 65, 82, 95, 172, 178, 186, 188,
+ 194, 195
+ \item TELENET, 116
+ \item Telex Corporation, 197
+ \item Teller, Edward, 105
+ \item Teng, Teng, 230
+ \item Thompson, Ken, 139
+ \item Thompson-Brandt, 185
+ \item Thorn EMI, 184
+ \item Thurow, Lester~C., 231
+ \item thyristor, 23
+ \item Tohoku University, 98
+ \item Tolchin, Martin, 231
+ \item Toshiba, 37, 158, 159, 161, 164, 169, 170
+ \item TOW missile, 204
+ \item trade secret, 59--61
+ \item trademark, 59
+ \item transistor, 14, 36, 37, 139, 145, 161
+ \item TRW, 131, 167
+ \item Tsujii, Junichi, 229
+ \item Tsukuba, 159, 160
+ \item Tuchman, Barbara~W., 225
+ \item Turing
+ \subitem award, 135, 139
+ \subitem test, 43
+ \item Turing, Alan, 43, 103
+ \item Turner, Fran Peche, vii
+ \item Tzu, Sun, 222
+
+ \indexspace
+
+ \item unemployment, vi, 4, 6, 19, 76, 101, 110, 174, 202--204, 220
+ \item Unisys, 142, 143, 145, 146
+ \item United States, v--vii, 3--6, 8, 11, 15--29, 39, 40, 48, 49,
+ 53, 54, 57--59, 61, 63--68, 71--74, 77, 78, 80--85,
+ 89--96, 98--106, 108--110, 113, 114, 116, 119, 120,
+ 126, 130, 133, 136, 140, 141, 143, 153, 155, 159,
+ 162, 163, 167--169, 172, 173, 175, 179, 183--186, 189,
+ 192, 193, 195, 196, 201--203, 205, 207--209, 212--215,
+ 218, 220
+ \subitem Army, 8
+ \subitem Congress, 154, 212, 214, 218
+ \subitem Constitution, 59
+ \subitem procurement system, 75, 123, 124
+ \subitem Senate, 66, 84, 212
+ \item United States versus IBM suit, 73, 89
+ \item UNIVAC, 131, 145, 159
+ \subitem Model I, 8, 145
+ \item Universal Copyright Convention, 61
+ \item University of Berlin, 105
+ \item University of California at Berkeley, vii, 57, 93, 99, 152
+ \item University of Erlangen, 105
+ \item University of Karlsruhe, 105
+ \item University of Saarbr\"ucken, 105
+ \item University of Tokyo, 70, 98, 159
+ \item University of Tsukuba, 159
+ \item UNIX operating system, 139, 146, 152, 168
+ \subitem 4.2 BSD, 152
+ \subitem System V, 152
+ \item uranium, 46, 52, 53
+
+ \indexspace
+
+ \item venture capital, 61, 109, 151, 191
+ \item VHSIC, 124
+ \item videoconferencing, 188
+ \item Vietnam War, vi, 94
+ \item Vliet, J.~C. van, 227
+ \item VLSI, 77, 161, 162, 170--172, 177, 182, 184, 188, 193, 195
+ \item Vogel, Ezra, 227
+ \item von Neumann architecture, 35
+ \item von Neumann, John, 35
+
+ \indexspace
+
+ \item Waldrop, M.~Mitchell, 227
+ \item Wang Computers, 97
+ \item Wang Institute, 97
+ \item Wang, An, 97
+ \item war, v
+ \subitem conventional, v, 33, 67, 107, 113, 114
+ \subitem nuclear, v, 113, 119
+ \subitem technology, v
+ \subitem Technology War, v, vi, 5, 10, 13, 17, 20, 21, 25, 29,
+ 33, 34, 43, 44, 47, 49--51, 65, 67, 71, 74, 77, 81, 83,
+ 86, 87, 89, 97, 102--104, 106, 107, 109, 110, 113, 114,
+ 120, 121, 131, 134, 138, 142, 143, 146, 147, 150, 152,
+ 157, 158, 161, 166, 169, 174, 175, 177, 178, 183, 186,
+ 188--190, 193, 196, 197, 201, 202, 205--208, 210--212,
+ 215, 217--220
+ \item Watergate, 220
+ \item Watson, Sr., Thomas J., 146
+ \item weapons, v, vi, 8, 9, 21, 33, 34, 39, 43, 52, 53, 60, 67, 114,
+ 117, 118, 124, 128, 214, 218
+ \subitem nuclear, 8, 34, 39, 53, 118, 119
+ \item Weidenbaum, Murray~L., 225
+ \item Wessel, Milton~R., 224
+ \item White House, 126, 207, 211, 219
+ \subitem Office of Science and Technology Policy (OSTP), 211
+ \item Wieder, H., 229
+ \item Willenbrock, F.~Karl, 226
+ \item Wilson, John~W. , 230
+ \item workstation, 38, 55, 77, 142, 148, 151, 152, 170, 174, 189
+ \item World War II, v, 5, 8--10, 16, 18--20, 33, 35, 53, 58, 70, 75,
+ 94, 105, 114, 128, 132, 157, 201, 211
+ \item Wozniak, Stephen, 93
+ \item Wright, Speaker James~C., 218
+ \item Wriston, Walter~B., 221
+
+ \indexspace
+
+ \item xerography, 90
+ \item Xerox, 55, 56, 136, 138, 142, 147--151, 172, 173
+ \subitem 914 copier, 150
+ \subitem copiers, 55, 150, 151, 173
+ \subitem Palo Alto Research Center, 55, 56, 60, 136, 149, 151
+ \subitem STAR computer, 55, 151
+
+ \indexspace
+
+ \item yen, 71, 76, 78--80, 167, 174, 212, 213
+ \item Yukuta, Toshio, 222
+
+ \indexspace
+
+ \item Zhaoxiang, Xu, 230
+ \item ZyMos, 193, 197
+ \item Zysman, John, 223, 225
+
+\end{theindex}
diff --git a/indexing/makeindex/test/ok-test.ilg b/indexing/makeindex/test/ok-test.ilg
new file mode 100644
index 0000000000..6b25b629a4
--- /dev/null
+++ b/indexing/makeindex/test/ok-test.ilg
@@ -0,0 +1,9 @@
+This is makeindex, portable version 2.12 [26-May-1993].
+Scanning input file test.idx....done (125 entries accepted, 0 rejected).
+Sorting entries....done (956 comparisons).
+Generating output file test.ind....
+## Warning (input = test.idx, line = 85; output = test.ind, line = 121):
+ -- Conflicting entries: multiple encaps for the same page under same key.
+done (164 lines written, 1 warning).
+Output written in test.ind.
+Transcript written in test.ilg.
diff --git a/indexing/makeindex/test/ok-test.ind b/indexing/makeindex/test/ok-test.ind
new file mode 100644
index 0000000000..cd9ab1ac9e
--- /dev/null
+++ b/indexing/makeindex/test/ok-test.ind
@@ -0,0 +1,164 @@
+\begin{theindex}
+
+ \item \verb=!= character, 3, 7
+ \item \verb="= character, 6
+ \item \verb=@= character, 4, 7
+
+ \indexspace
+
+ \item ambiguities, 3
+
+ \indexspace
+
+ \item Beebe, Nelson H.F., 8
+ \item behavior
+ \subitem frowned-upon, 4
+ \item braces
+ \subitem matching, 6
+
+ \indexspace
+
+ \item C language, 8
+ \item cards
+ \subitem index, 2
+ \item Chen, Pehong, 8
+ \item commands
+ \subitem fragile, 5
+ \subitem robust, 5
+ \item cross-reference, 4
+
+ \indexspace
+
+ \item {\tt delatex}, 2
+
+ \indexspace
+
+ \item editing
+ \subitem avoiding, 2
+ \item entries
+ \subitem subsubsubentries (can't have), 3
+ \item error messages, 1, 6
+ \item examples, 3--6
+ \item experts, 4
+ \subitem behavior of, 4
+
+ \indexspace
+
+ \item ff.
+ \subitem avoiding, 4
+ \item files
+ \subitem {\tt idx}, 1, 3, 5--7
+ \subitem {\tt ilg}, 6
+ \subitem {\tt ind}, 1, 6
+ \item fragile commands, 5
+
+ \indexspace
+
+ \item {\tt idx} file, 1, 3, 5--7
+ \item {\tt ilg} file, 6
+ \item {\tt ind} file, 1, 6
+ \item index
+ \subitem alphabetizing, 4
+ \subitem cards, 2
+ \subitem conflicting entries in, 8
+ \subitem cross-reference, 4
+ \subitem don't split across lines, 6
+ \subitem entries, 3
+ \subitem expansion of commands in, 5
+ \subitem funny characters in, 4, 6
+ \subitem getting started, 2
+ \subitem long arguments, 7
+ \subitem main entries, 3
+ \subitem making a word list, 2
+ \subitem maximum levels allowed, 3
+ \subitem professional guidelines, 2
+ \subitem quoting characters in, 6
+ \subitem spaces in, 6
+ \subitem subentries, 3
+ \subitem subsubentries, 3
+ \subitem the hard way, 2
+ \subitem unique words, 2
+ \item \verb=\index=, 1, 3
+ \subitem duplicates, 3
+ \item indexing
+ \subitem professional advice, 2
+
+ \indexspace
+
+ \item \LaTeX\ commands
+ \subitem stripping, 2
+ \item \LaTeX\ manual, 1
+
+ \indexspace
+
+ \item {\tt makeidx} document-style option, 1, 5
+ \item \MakeIndex
+ \subitem in Web language, 8
+ \subitem running, 1
+ \item \verb=\makeindex= command
+ \subitem removing, 1
+ \item mistakes, 2, \see{errors}{8}
+
+ \indexspace
+
+ \item page breaks, \see{ambiguities}{8}
+ \item page numbers, 5
+ \subitem arabic, 6
+ \subitem entries in footnotes, 5
+ \subitem italic, 5
+ \subitem order of, 6
+ \subitem roman numerals, 6
+ \item page range, 4, 8
+ \subitem avoiding ff., 4
+ \subitem closing command, 4
+ \subitem opening command, 4
+ \item Pascal language, \see{Web language}{8}
+ \item pen
+ \subitem ball-point, 2
+ \subitem quill, 2
+ \item \verb=\printindex=, 1
+ \item producing the index, 1
+ \item \verb=\protect=, 5, \see{{\tt \symbol{'134}string}}{5}
+ \item \verb=\string=, \see{{\tt \symbol{'134}protect}}{5}
+
+ \indexspace
+
+ \item quote character, 6
+
+ \indexspace
+
+ \item range, \see{page}{8}
+ \subitem of pages, 8
+ \item robust commands, 5
+ \item Rose, Marshall, 8
+ \item running \MakeIndex, 1
+
+ \indexspace
+
+ \item {\tt see} command
+ \subitem example, 5
+ \subitem placement of, 4
+ \subitem using, 4
+ \item Spiker, Sina, 2
+ \item {\tt \symbol{'134}string}, 5
+ \item subentries, 3
+ \item subsubentries, 3
+ \item subsubsubentries, 3
+
+ \indexspace
+
+ \item Trickey, Howard, 2
+
+ \indexspace
+
+ \item unique words, 2
+ \item Urban, Mike, 8
+
+ \indexspace
+
+ \item Web language, 8
+ \item Wisconsin Press, 2
+ \item word list, 2
+ \subitem making a, 2
+
+\end{theindex}
diff --git a/indexing/makeindex/test/ok-test.tex b/indexing/makeindex/test/ok-test.tex
new file mode 100644
index 0000000000..a3797c143c
--- /dev/null
+++ b/indexing/makeindex/test/ok-test.tex
@@ -0,0 +1,686 @@
+
+% Test LaTeX file for MakeIndex, adapted from makeindex.tex by addition
+% of several (not entirely useful) index entries
+% makeindex.tex -- released 17 February 1987
+% Copyright(c) 1987 by Leslie Lamport
+% for LaTeX version 2.09
+%
+\documentstyle[11pt,makeidx,showidx]{article}
+\makeindex
+%&v&\verb|#|&
+%&i&\verb|\index{#}|&
+%&t&{\tt #}&
+\newcommand{\MakeIndex}{{\it MakeIndex\/}}
+\newcommand{\fn}{}
+\newcommand{\ff}
+
+
+% Definition of the iexample environment and \sindex command.
+% They are used as follows:
+% \begin{iexample}
+% Page 7 & \verb|\index{foo}|\\
+% Page 22 & \verb|\index{bar}|
+% \sindex
+% bar, 22 \\
+% foo, 7
+% \end{iexample}
+\newenvironment{iexample}{\begin{quote}
+ \begin{tabular}[t]{@{}ll||@{\hspace{1em}}}}{\end{tabbing}\end{minipage}
+ \end{quote}}
+\newcommand{\sindex}{\end{tabular}\hspace{1em}\begin{minipage}[t]{\textwidth}
+ \begin{tabbing}}
+
+\newcommand{\sitem}{\hspace*{20pt}}
+\newcommand{\ssitem}{\hspace*{30pt}}
+
+
+\title{\MakeIndex: An Index Processor For \LaTeX}
+
+\author{Leslie Lamport}
+\date{17 February 1987}
+\begin{document}
+\maketitle
+
+\section{How to Use \MakeIndex}
+
+\MakeIndex\ is a program for
+making an index in a document generated with \LaTeX. The first step in
+producing%
+\index{producing the index}
+the index
+is to put the necessary \verb|\index|%
+\index{index@\verb=\index=}
+commands in
+your document, as described in the next section. Here, I describe how
+to generate the index after the \verb|\index| commands are in place.
+
+Let's suppose that the root file of your document is {\tt myfile.tex}.
+You must make the following changes to your document:
+\begin{itemize}
+
+\item Add the {\tt makeidx}%
+\index{makeidx document-style option@{\tt makeidx} document-style option}
+document-style option to the list of
+options in the \verb|\documentstyle| command. (See page 21 of the
+\LaTeX\ manual.)%
+\index{LaTeX manual@\LaTeX\ manual}
+
+\item Put a \verb|\makeindex| command in the preamble (between the
+ \linebreak%%%%%
+\verb|\documentstyle| and \verb|\begin{document}| commands).
+
+\item Put a \verb|\printindex| command%
+\index{printindex@\verb=\printindex=}
+where you want the index to
+appear---usually at the end, right before the \verb|\end{document}|
+command.
+\end{itemize}
+You then run \LaTeX\ on your entire document, causing it to
+generate the file {\tt myfile.idx}, which I will call the
+{\tt idx}%
+\index{idx file@{\tt idx} file}
+\index{files@files!{\tt idx}}
+file.
+Next, run the \MakeIndex\ program by
+typing the following Unix command:
+\begin{quote}
+ {\tt makeindex myfile.idx}
+\end{quote}
+\index{running makeindex@running \MakeIndex}
+\index{makeindex@\MakeIndex!running}
+This produces the file {\tt myfile.ind}, which I will call the {\tt
+ind}%
+\index{ind file@{\tt ind} file}
+\index{files@files!{\tt ind}}
+file. If \MakeIndex\ generated no error messages, you can now rerun
+\LaTeX\ on your document and the index will appear. (You can remove
+the \verb|\makeindex|%
+\index{makeindex command@\verb=\makeindex= command!removing}
+command first so the
+{\tt idx}%
+\index{idx file@{\tt idx} file}
+\index{files@files!{\tt idx}}
+file is not
+regenerated.) If there were error messages,%
+\index{error messages}
+see
+Section~\ref{sec:errors}.
+
+By reading the index, you may discover additional
+mistakes.%
+\index{mistakes}
+These should be
+corrected by changing the appropriate \verb|\index| commands in the
+document and regenerating the {\tt ind} file. If there are
+problems that cannot be corrected in this way, you can always edit
+the {\tt ind} file directly. However, such
+editing%
+\index{editing!avoiding}
+is to be
+avoided because it must be repeated every time you generate a new
+version of the index.
+
+
+\section{How to Generate Index Entries}
+
+\subsection{When, Why, What, and How to Index}
+
+It's tempting to generate the index as you write the document. Resist
+the temptation. It is virtually impossible to obtain any consistency
+in an index that is generated in this way.
+
+An index is there to help the reader find what he's looking for. With
+this in mind, common sense can help in figuring out what should be in
+the index and how it should be organized. Since it's often hard to
+distinguish common sense from equally common nonsense, professional
+advice%
+\index{indexing!professional advice}
+is useful. Many style guides discuss indexing; the pamphlet
+{\em Indexing Your Book\/} by Sina Spiker%
+\index{Spiker, Sina}
+(The University of Wisconsin%
+\index{Wisconsin Press}
+Press, 1954) is, according to its subtitle, ``A Practical
+Guide for Authors''.%
+\index{index!professional guidelines}
+
+Unfortunately, these guides to indexing seem to have been written when
+high tech meant using a ball-point pen%
+\index{pen!ball-point}
+instead of a quill,%
+\index{pen!quill}
+so their
+advice on the mechanics of creating an index revolve around how to
+stack your $3\times 5$ index cards.%
+\index{index!cards}
+\index{cards!index}
+\index{index!the hard way}
+You'll have to figure out your own
+method of using the computer to lighten the chore. An alphabetical
+list of every word%
+\index{word list!making a}
+in your document, with duplicates removed, is not a
+bad place to start. If your system has Howard Trickey's
+\index{Trickey, Howard}
+{\tt delatex}%
+\index{delatex@{\tt delatex}}
+\index{LaTeX commands@\LaTeX\ commands!stripping}
+program, then the following Unix command generates such a list from the
+file {\tt myfile.tex} and puts it on the file {\tt foo}:
+\begin{quote}
+\index{index!getting started}
+\index{index!making a word list}
+\index{index!unique words}
+\index{unique words}
+\index{word list}
+\tt delatex myfile.tex | sort -uf > foo
+\end{quote}
+
+The computer is only a tool; it can't write the index for you. It may
+be easy to choose which words are important and mechanically generate
+an index citing every occurrence of those words, but the resulting
+index will not be as useful to the reader as one prepared with more
+care.
+
+
+
+
+\subsection{The Basics}
+
+Each \verb|\index|%
+\index{index@\verb=\index=}
+\index{index!entries}
+command causes \LaTeX\ to write an entry on the {\tt
+idx}%
+\index{idx file@{\tt idx} file}
+\index{files@files!{\tt idx}}
+file. The following example shows some simple
+\verb|\index| commands and the index entries that they produce. The
+page number refers to the page containing the text where the
+\verb|\index| command appears.\footnote{To avoid any ambiguity if a
+page break%
+\index{ambiguities}
+occurs right at an {\tt \symbol{'134}index} command, it's a
+good idea to attach the command to a word instead of putting it between
+words.}
+\begin{iexample}%
+\index{examples}
+Page ii & \verb|\index{Alpha}| \\
+Page viii: & \verb|\index{alpha}| \\
+Page ix: & \verb|\index{alpha}| \\
+ & \verb|\index{Alphabet}| \\
+Page 22: & \verb|\index{alpha}| \\
+ & \verb|\index{alphas}| \\
+Page 23: & \verb|\index{alphabet}| \\
+ & \verb|\index{alphabet}| \\
+Page 24: & \verb|\index{alpha bet}|
+\sindex
+Alpha, ii \\
+alpha, viii, ix, 22 \\
+alpha bet, 24\\
+Alphabet, ix\\
+alphabet, 23\\
+alphas, 22
+\end{iexample}
+Note that the duplicate
+\verb|\index{alphabet}|%
+\index{index@\verb=\index=!duplicates}
+commands on
+page 23 produce only one ``23'' in the index.
+
+
+To produce a subentry,%
+\index{subentries}
+\index{index!subentries}
+the argument of the \verb|\index|
+command should contain both the main%
+\index{index!main entries}
+entry and the subentry, separated
+by a \verb|!| character.%
+\index{"! character@\verb="!= character}
+\begin{iexample}%
+\index{examples}
+Page 7: & \verb|\index{gnat!size of}| \\
+Page 32: & \verb|\index{gnat}| \\
+Page 35: & \verb|\index{gnat!anatomy}| \\
+ & \verb|\index{gnus!good}| \\
+Page 38: & \verb|\index{gnus!bad}| \\
+ &
+\sindex
+gnat, 32 \\
+\sitem anatomy, 35 \\
+\sitem size of, 7\\
+gnus \\
+\sitem bad, 38\\
+\sitem good, 35
+\end{iexample}
+You can also have
+subsubentries.%
+\index{subsubentries}
+\index{index!subsubentries}
+\begin{iexample}%
+\index{examples}
+Page 8: & \verb|\index{bites!animal!gnats}| \\
+Page 10: & \verb|\index{bites!animal!gnus}| \\
+Page 12 : & \verb|\index{bites!vegetable}| \\
+ & \\
+ &
+\sindex
+bites \\
+\sitem animal \\
+\ssitem gnats, 8 \\
+\ssitem gnus, 10 \\
+\sitem vegetable, 12
+\end{iexample}
+\LaTeX\ and \MakeIndex\ support only three levels of indexing; you
+can't have
+subsubsubentries.%
+\index{subsubsubentries}
+\index{entries!subsubsubentries (can't have)}
+\index{index!maximum levels allowed}
+
+To specify a page range,%
+\index{page range}
+put an \verb/\index{...|(}/%
+\index{page range!opening command}
+command at the beginning of the range and an \verb/\index{...|)}/
+command at the end of the range.
+\index{page range!closing command}
+\begin{iexample}%
+\index{examples}
+Page vi: & \verb/\index{gnat|(}/ \\
+Page x: & \verb/\index{gnat|)}/ \\
+Page 22: & \verb|\index{gnat}| \\
+ & \verb/\index{gnus!bad|(}/ \\
+ & \verb/\index{gnus!bad|)}/ \\
+Page 28: & \verb/\index{gnus!good|(}/ \\
+Page 30: & \verb|\index{gnus!good}| \\
+Page 32: & \verb/\index{gnus!good|)}/
+\sindex
+gnat, vi--x, 22 \\
+gnus \\
+\sitem bad, 22\\
+\sitem good, 28--32
+\end{iexample}
+Note that \MakeIndex\ does the right thing when both ends of the range
+fall on the same page.\footnote{The use of
+``28ff.''%
+\index{page range!avoiding ff.}
+\index{ff.!avoiding}
+rather than
+``28--32'' is frowned%
+\index{behavior!frowned-upon}
+upon by the experts.%
+\index{experts}
+\index{experts!behavior of}}
+
+Sometimes, you want to add a cross-reference%
+\index{index!cross-reference}
+\index{cross-reference}
+\index{see command@{\tt see} command!using}
+with no page
+number. This is done as follows;
+\begin{iexample}%
+\index{examples}
+Page 2: & \verb|\index{at}| \\
+Page 2: & \verb/\index{at!bat|see{bat, at}}/
+\sindex
+at, 2 \\
+\sitem bat, {\em see\/} bat, at
+\end{iexample}
+Since the ``see'' entry does not print any page number, it doesn't
+matter where the \verb/\index{...|see{...}}/
+command%
+\index{see command@{\tt see} command!placement of}
+goes, so
+long as it follows the \verb|\begin{document}| command. You
+might want to put all such cross-referencing commands in one place.
+
+
+If you specify an entry of the form
+$\sigma$\verb|@|$\tau$,%
+\index{"@ character@\verb="@= character}
+the string
+$\sigma$ determines the
+alphabetical%
+\index{index!alphabetizing}
+\index{index!funny characters in}
+position of the entry, while the
+string $\tau$ produces the text of the entry.
+\begin{iexample}
+Page 44: & \verb|\index{twenty}| \\
+Page 46: & \verb|\index{twenty-one}| \\
+Page 55: & \verb|\index{twenty@xx}|
+\sindex
+twenty, 44 \\
+xx, 55 \\
+twenty-one, 46
+\end{iexample}
+This feature is useful because the argument of the \verb|\index|
+command provides the actual input string that \LaTeX\ uses to generate
+the index entry. In the following example, the input \verb|$\alpha$|
+produces the symbol $\alpha$,
+\begin{iexample}
+Page 12: & \verb|\index{alphas}| \\
+Page 13: & \verb|\index{alpha}| \\
+Page 14: & \verb|\index{alpha@$\alpha$}|
+\sindex
+alpha, 13 \\
+$\alpha$, 14 \\
+alphas, 12
+\end{iexample}
+Similarly, the command \verb|\index{gnu@{\bf gnu}}| produces
+a boldface {\bf gnu} index entry.
+
+In some indexes, certain page numbers%
+\index{page numbers}
+are specially formatted---for
+example, an italic page number%
+\index{page numbers!italic}
+may indicate the primary reference, and
+an {\em n\/} after a page number may denote that the item appears in a
+footnote%
+\index{page numbers!entries in footnotes}
+on that page. \MakeIndex\ makes it easy to format an
+individual page number any way you want. For any string of characters
+$\sigma$, the command \verb/\index{...|/$\sigma$\verb|}| produces a
+page number of the form \verb|\|$\sigma$\verb|{|$n$\verb|}|.
+Similarly, the command \verb/\index{...|(/$\sigma$\verb|}| may produce
+a page number of the form \verb|\|$\sigma$\verb|{|$n$--$m$\verb|}|.
+Thus, suppose the document contains the following command definitions:
+\begin{quote}
+\verb|\newcommand{\ii}[1]{{\it #1}}| \\
+\verb|\newcommand{\nn}[1]{#1n}|
+\end{quote}
+We could then have:
+\begin{iexample}
+\index{examples}
+Page 3: & \verb/\index{gnat|ii}/ \\
+Page 4: & \verb/\index{gnat|nn}/ \\
+Page 5: & \verb/\index{gnu}/ \\
+Page 44: & \verb/\index{gnu|(ii}/ \\
+Page 46: & \verb/\index{gnu|)}/
+\sindex
+gnat, {\em 3}, 4n \\
+gnu, 5, {\em 44--46}
+\end{iexample}
+The ``see''%
+\index{see command@{\tt see} command!example}
+option is a special case of this facility, where the
+\verb|\see| command is predefined by the {\tt makeidx}
+\index{makeidx document-style option@{\tt makeidx} document-style option}
+document-style
+option.
+
+
+\subsection{The Fine Print}
+
+Commands in an index entry are expanded when the index is typeset,
+not when the {\tt idx}%
+\index{idx file@{\tt idx} file}
+\index{files@files!{\tt idx}}
+file is written.%
+\index{index!expansion of commands in}
+Hence, the command
+\verb|\index{\gnu}| produces an entry that is alphabetized by
+\verb|\gnu|, regardless of how the \verb|\gnu| command is defined.
+
+Recall that special characters like \verb|\| may appear in the argument
+of an \verb|\index| command only if that command is not itself
+contained in the argument of another command. This is most likely to
+be a problem when indexing items in a footnote. Even in this case,
+robust commands%
+\index{robust commands}
+\index{commands!robust}
+can be placed in the ``\verb|@|'' part of an entry, as
+in \verb|\index{gnu@{\it gnu}}|, and
+fragile commands%
+\index{fragile commands}
+\index{commands!fragile}
+can be used
+if protected with the \verb|\protect|%
+\index{protect@\verb=\protect=}
+\index{protect@\verb=\protect=|see{{\tt \symbol{'134}string}}}
+\index{protect@\verb=\string=|see{{\tt \symbol{'134}protect}}}
+command.\footnote{In
+versions of \LaTeX\ released before 3 February 1987, you must
+use the {\tt\symbol{'134}string}
+command instead of
+{\tt\symbol{'134}protect}.}%
+\index{string@{\tt \symbol{'134}string}}
+
+Remember that the argument of an \verb|\index| command must always have
+matching braces,%
+\index{braces!matching}
+where the brace in a \verb|\{| or \verb|\}| command
+counts.
+
+\MakeIndex\ assumes that all page numbers are either
+arabic%
+\index{page numbers!arabic}
+or lower-case
+roman numerals;%
+\index{page numbers!roman numerals}
+it assumes that pages
+numbered with roman numerals
+precede those numbered with arabic numerals.%
+\index{page numbers!order of}
+
+To put a \verb|!|, \verb|@|, or \verb/|/ character in an index entry,
+\index{index!funny characters in}
+{\em quote\/} it by preceding the character with a
+\verb|"|.%
+\index{"" character@\verb=""= character}
+\index{quote character}
+\index{index!quoting characters in}
+More
+precisely, any a character is said to be quoted if it follows an
+unquoted \verb|"| that is not part of a \verb|\"| command. A quoted
+\verb|!|, \verb|@|, or \verb/|/ character is treated like an
+ordinary character rather than having its usual meaning. The
+\verb|"| preceding a quoted character is deleted before the
+entries are alphabetized.
+\begin{iexample}%
+\index{examples}
+Page 2: & \verb|\index{exclaim ("!)}| \\
+Page 3: & \verb|\index{exclaim ("!)!loudly}| \\
+Page 4: & \verb|\index{fur@f\"{u}r}| \\
+Page 5: & \verb|\index{quote (\verb+""+)}|
+\sindex
+exclaim (!), 2 \\
+\sitem loudly, 3\\
+f\"{u}r, 4\\
+quote (\verb+""+), 5
+\end{iexample}
+
+
+\MakeIndex\ regards spaces%
+\index{index!spaces in}
+as ordinary characters when alphabetizing the
+entries and deciding whether two entries are the same. Thus, letting
+``\verb*| |'' denote a space character, the commands
+\verb*|\index{gnu}|, \verb*|\index{ gnu}|, and \verb*|\index{gnu }|
+produce three separate entries, the first appearing near the beginning
+of the index, since \verb*| | comes before any letter in \MakeIndex's
+``alphabetical'' order. All three entries look the same when
+printed, since \LaTeX\ ignores extra spaces in the input. Similarly,
+ \verb*|\index{a space}| and \verb*|\index{a space}| produce two
+different entries that look the same when printed. Do not
+split the argument of an \verb|\index| command across lines in the
+input file.%
+\index{index!don't split across lines}
+
+
+
+\section{Error Messages} \label{sec:errors}
+\index{error messages}
+
+\MakeIndex\ types out on the terminal the number of lines read and
+written and how many errors were found. Message to identify the error
+are written on a file with extension
+{\tt ilg}.%
+\index{ilg file@{\tt ilg} file}
+\index{files@files!{\tt ilg}}
+There are two phases
+in which \MakeIndex\ can produce error messages: when it is reading the
+{\tt idx}%
+\index{idx file@{\tt idx} file}
+\index{files@files!{\tt idx}}
+file, and when it is writing the
+{\tt ind}%
+\index{ind file@{\tt ind} file}
+\index{files@files!{\tt ind}}
+file. Each error
+message prints the nature of the error followed by a line number,
+identifying where in the file the error occurs. In the reading phase,
+the line number refers to the {\tt idx} file; in the writing phase, it
+refers to the {\tt ind} file.
+
+\subsection{Errors in Reading Phase}
+
+\subsubsection*{\tt Extra `!' at position ...}
+
+\index{"! character@\verb="!= character}
+The \verb|\index| command's argument has more than two unquoted
+\verb|!| characters. Perhaps some of them should be quoted.
+
+\subsubsection*{\tt Extra `@' at position ...}
+
+\index{"@ character@\verb="@= character}
+The \verb|\index| command argument has two or more unquoted \verb|@|
+characters with no intervening \verb|!|. Perhaps one of the \verb|@|
+characters should be quoted.
+
+\subsubsection*{\tt Extra `|' at position ...}
+
+\index{"! character@\verb="!= character}
+The \verb|\index| command's argument has more than one unquoted \verb|!|
+characters. Perhaps the extras should be quoted.
+
+\subsubsection*{\tt Illegal null field}
+
+The \verb|\index| command argument doesn't make sense because some
+string is null that shouldn't be. The command \verb|\index{!big}| will
+produce this error, since it specifies a subentry ``big'' with no
+entry. Similarly, the command \verb|\index{@big}| is incorrect because
+it specifies a null string for alphabetizing.
+
+%\subsubsection*{\tt No \symbol{'134}indexentry}
+%
+%Each line of an {\tt idx} file written by \LaTeX\ should contain an
+%\verb|\indexentry| command. \MakeIndex\ has found a line in the {\tt idx}
+%file that does not contain an \verb|\indexentry| command. The {\tt
+%idx} file has probably been corrupted.
+%
+%\subsubsection*{\tt Missing \symbol{'173}}
+%
+%\MakeIndex\ believes that the braces in the argument of the \verb|\index|
+%command are not properly matched. Since \LaTeX\ must
+%have thought that the braces were properly matched, the problem
+%is probably due to a corrupted {\tt idx} file.
+%
+%\subsubsection*{\tt Missing \symbol{'175}}
+%
+%See ``{\tt Missing \symbol{'173}}'' error.
+
+\subsubsection*{\tt Argument ... too long (max 1024).}
+
+\index{index!long arguments}
+Your document contained an \verb|\index| command with a very long
+argument. You probably forgot the right brace that was supposed
+to delimit the argument.
+
+\subsubsection*{Other errors}
+
+\MakeIndex\ can produce a variety of other error messages indicating
+that something is seriously wrong with the
+{\tt idx}%
+\index{idx file@{\tt idx} file}
+\index{files@files!{\tt idx}}
+file. If you
+get one, it probably means that the {\tt idx} file was corrupted in
+some way. If \LaTeX\ did not generate any errors when it created
+the {\tt idx} file, then it is highly unlikely to have produced
+a bad {\tt idx} file. If it did, you'll have to examine the
+{\tt idx} file to figure out what went wrong.
+
+
+\subsection{Errors in Writing Phase}
+
+\subsubsection*{\tt Unmatched range opening operator}
+
+An \verb/\index{...|(}/ command was not followed by a matching
+ \linebreak%%%%%
+\verb/\index{...|)}/ command. The ``\verb|...|'' in the two
+commands must be completely identical.
+
+
+\subsubsection*{\tt Unmatched range closing operator }
+
+An \verb/\index{...|(}/ command was not preceded by a matching
+ \linebreak%%%%%
+\verb/\index{...|)}/ command.
+
+\subsubsection*{\tt Extra range opening operator }
+
+Two \verb/\index{...|(}/ commands appear in the document with no intervening
+\verb/\index{...|)}/ command.
+
+
+
+\subsubsection*{\tt Inconsistent page encapsulator ... within range}
+
+\MakeIndex\ has been instructed to include a page
+range%
+\index{page range}
+\index{range!of pages}
+for an entry
+and a single page number within that range that is formatted
+differently---for example, by having a
+\verb+\index{gnu|ii}+ command between a \verb+\index{gnu|(}+
+and a \verb+\index{gnu|)}+ command.
+
+
+\subsubsection*{\tt Conflicting entries}
+
+\index{index!conflicting entries in}
+\MakeIndex\ thinks it has been instructed to print the same page number
+twice in two different ways---for example, by the commands
+\verb|\index{gnu}| and \verb/\index{gnu|(see{...}}/ appearing on the
+same page.
+
+
+
+\section*{Acknowledgements}
+
+\MakeIndex\ is a C
+\index{C language}
+ program written by Pehong Chen,%
+\index{Chen, Pehong}
+with a little
+advice from me. It was inspired by a program written by Mike Urban,%
+\index{Urban, Mike}
+which was based on a program written by Marshall Rose.%
+\index{Rose, Marshall}
+ Perhaps someday
+someone will rewrite \MakeIndex\ in Web,%
+\index{Web language}
+\index{Pascal language|see{Web language}}
+\index{makeindex@\MakeIndex!in Web language}
+making it available to all
+\LaTeX\ users.
+
+This version of {\tt makeindex.\-tex}, {\tt test.\-tex}, has index
+entries generated by Nelson H.F.~Beebe%
+\index{Beebe, Nelson H.F.}
+to serve as a test file for the
+\MakeIndex{} program.
+
+\index{mistakes|see{errors}}
+\index{page breaks|see{ambiguities}}
+\index{range|see{page}}
+
+
+%\printindex
+\input{\jobname.ind}
+\end{document}
diff --git a/indexing/makeindex/test/ok-tort.ilg b/indexing/makeindex/test/ok-tort.ilg
new file mode 100644
index 0000000000..b0ade0b681
--- /dev/null
+++ b/indexing/makeindex/test/ok-tort.ilg
@@ -0,0 +1,47 @@
+This is makeindex, portable version 2.12 [26-May-1993].
+Scanning input file tort.idx...
+!! Input index error (file = tort.idx, line = 1):
+ -- Illegal null field.
+!! Input index error (file = tort.idx, line = 2):
+ -- Illegal null field.
+!! Input index error (file = tort.idx, line = 3):
+ -- Extra `@' at position 14 of first argument.
+!! Input index error (file = tort.idx, line = 4):
+ -- Extra `!' at position 18 of first argument.
+!! Input index error (file = tort.idx, line = 5):
+ -- Extra `|' at position 15 of first argument.
+.done (29 entries accepted, 5 rejected).
+Sorting entries....done (135 comparisons).
+Generating output file tort.ind....
+## Warning (input = tort.idx, line = 23; output = tort.ind, line = 3):
+ -- Range closing operator has an inconsistent encapsulator iii.
+
+## Warning (input = tort.idx, line = 26; output = tort.ind, line = 8):
+ -- Inconsistent page encapsulator ii within range.
+
+## Warning (input = tort.idx, line = 30; output = tort.ind, line = 9):
+ -- Inconsistent page encapsulator ii within range.
+
+## Warning (input = tort.idx, line = 7; output = tort.ind, line = 10):
+ -- Conflicting entries: multiple encaps for the same page under same key.
+
+## Warning (input = tort.idx, line = 14; output = tort.ind, line = 14):
+ -- Unmatched range closing operator ).
+
+## Warning (input = tort.idx, line = 15; output = tort.ind, line = 15):
+ -- Unmatched range opening operator (.
+
+## Warning (input = tort.idx, line = 34; output = tort.ind, line = 16):
+ -- Illegal range formation: starting & ending pages are of different types.
+
+## Warning (input = tort.idx, line = 38; output = tort.ind, line = 17):
+ -- Illegal range formation: starting & ending pages are of different types.
+
+## Warning (input = tort.idx, line = 42; output = tort.ind, line = 18):
+ -- Inconsistent page encapsulator xx within range.
+
+## Warning (input = tort.idx, line = 43; output = tort.ind, line = 18):
+ -- Illegal range formation: starting & ending pages are of different types.
+done (24 lines written, 10 warnings).
+Output written in tort.ind.
+Transcript written in tort.ilg.
diff --git a/indexing/makeindex/test/ok-tort.ind b/indexing/makeindex/test/ok-tort.ind
new file mode 100644
index 0000000000..bbd7178301
--- /dev/null
+++ b/indexing/makeindex/test/ok-tort.ind
@@ -0,0 +1,24 @@
+\begin{theindex}
+
+ \item bad-encaps, \ii{5--7}
+
+ \indexspace
+
+ \item implicit-range, 10--12
+ \item incons-encaps, \ii{6}, 5--7
+ \item incons-encaps2, \ii{5}, 5
+ \item incons-entries, 6, \xx{6}
+
+ \indexspace
+
+ \item missing(, 6
+ \item missing), 6
+ \item mixed-range, i, 6
+ \item mixed-range1, i--iv, 3--6
+ \item mixed-range2, \xx{ii}, i--ii, \yy{3--6}
+
+ \indexspace
+
+ \item ok-encaps, \ii{5--7}
+
+\end{theindex}
diff --git a/indexing/makeindex/test/test.idx b/indexing/makeindex/test/test.idx
new file mode 100644
index 0000000000..d0a9688b1e
--- /dev/null
+++ b/indexing/makeindex/test/test.idx
@@ -0,0 +1,125 @@
+\indexentry{producing the index}{1}
+\indexentry{index@\verb=\index=}{1}
+\indexentry{makeidx document-style option@{\tt makeidx} document-style option}{1}
+\indexentry{LaTeX manual@\LaTeX\ manual}{1}
+\indexentry{printindex@\verb=\printindex=}{1}
+\indexentry{idx file@{\tt idx} file}{1}
+\indexentry{files@files!{\tt idx}}{1}
+\indexentry{running makeindex@running \MakeIndex}{1}
+\indexentry{makeindex@\MakeIndex!running}{1}
+\indexentry{ind file@{\tt ind} file}{1}
+\indexentry{files@files!{\tt ind}}{1}
+\indexentry{makeindex command@\verb=\makeindex= command!removing}{1}
+\indexentry{idx file@{\tt idx} file}{1}
+\indexentry{files@files!{\tt idx}}{1}
+\indexentry{error messages}{1}
+\indexentry{mistakes}{2}
+\indexentry{editing!avoiding}{2}
+\indexentry{indexing!professional advice}{2}
+\indexentry{Spiker, Sina}{2}
+\indexentry{Wisconsin Press}{2}
+\indexentry{index!professional guidelines}{2}
+\indexentry{pen!ball-point}{2}
+\indexentry{pen!quill}{2}
+\indexentry{index!cards}{2}
+\indexentry{cards!index}{2}
+\indexentry{index!the hard way}{2}
+\indexentry{word list!making a}{2}
+\indexentry{Trickey, Howard}{2}
+\indexentry{delatex@{\tt delatex}}{2}
+\indexentry{LaTeX commands@\LaTeX\ commands!stripping}{2}
+\indexentry{index!getting started}{2}
+\indexentry{index!making a word list}{2}
+\indexentry{index!unique words}{2}
+\indexentry{unique words}{2}
+\indexentry{word list}{2}
+\indexentry{index@\verb=\index=}{3}
+\indexentry{index!entries}{3}
+\indexentry{idx file@{\tt idx} file}{3}
+\indexentry{files@files!{\tt idx}}{3}
+\indexentry{examples}{3}
+\indexentry{index@\verb=\index=!duplicates}{3}
+\indexentry{subentries}{3}
+\indexentry{index!subentries}{3}
+\indexentry{index!main entries}{3}
+\indexentry{"! character@\verb="!= character}{3}
+\indexentry{examples}{3}
+\indexentry{subsubentries}{3}
+\indexentry{index!subsubentries}{3}
+\indexentry{examples}{3}
+\indexentry{subsubsubentries}{3}
+\indexentry{entries!subsubsubentries (can't have)}{3}
+\indexentry{index!maximum levels allowed}{3}
+\indexentry{ambiguities}{3}
+\indexentry{page range}{4}
+\indexentry{page range!opening command}{4}
+\indexentry{page range!closing command}{4}
+\indexentry{examples}{4}
+\indexentry{index!cross-reference}{4}
+\indexentry{cross-reference}{4}
+\indexentry{see command@{\tt see} command!using}{4}
+\indexentry{examples}{4}
+\indexentry{see command@{\tt see} command!placement of}{4}
+\indexentry{"@ character@\verb="@= character}{4}
+\indexentry{index!alphabetizing}{4}
+\indexentry{index!funny characters in}{4}
+\indexentry{page range!avoiding ff.}{4}
+\indexentry{ff.!avoiding}{4}
+\indexentry{behavior!frowned-upon}{4}
+\indexentry{experts}{4}
+\indexentry{experts!behavior of}{4}
+\indexentry{page numbers}{5}
+\indexentry{page numbers!italic}{5}
+\indexentry{page numbers!entries in footnotes}{5}
+\indexentry{examples}{5}
+\indexentry{see command@{\tt see} command!example}{5}
+\indexentry{makeidx document-style option@{\tt makeidx} document-style option}{5}
+\indexentry{idx file@{\tt idx} file}{5}
+\indexentry{files@files!{\tt idx}}{5}
+\indexentry{index!expansion of commands in}{5}
+\indexentry{robust commands}{5}
+\indexentry{commands!robust}{5}
+\indexentry{fragile commands}{5}
+\indexentry{commands!fragile}{5}
+\indexentry{protect@\verb=\protect=}{5}
+\indexentry{protect@\verb=\protect=|see{{\tt \symbol{'134}string}}}{5}
+\indexentry{protect@\verb=\string=|see{{\tt \symbol{'134}protect}}}{5}
+\indexentry{string@{\tt \symbol{'134}string}}{5}
+\indexentry{braces!matching}{6}
+\indexentry{page numbers!arabic}{6}
+\indexentry{page numbers!roman numerals}{6}
+\indexentry{page numbers!order of}{6}
+\indexentry{index!funny characters in}{6}
+\indexentry{"" character@\verb=""= character}{6}
+\indexentry{quote character}{6}
+\indexentry{index!quoting characters in}{6}
+\indexentry{examples}{6}
+\indexentry{index!spaces in}{6}
+\indexentry{index!don't split across lines}{6}
+\indexentry{error messages}{6}
+\indexentry{ilg file@{\tt ilg} file}{6}
+\indexentry{files@files!{\tt ilg}}{6}
+\indexentry{idx file@{\tt idx} file}{6}
+\indexentry{files@files!{\tt idx}}{6}
+\indexentry{ind file@{\tt ind} file}{6}
+\indexentry{files@files!{\tt ind}}{6}
+\indexentry{"! character@\verb="!= character}{7}
+\indexentry{"@ character@\verb="@= character}{7}
+\indexentry{"! character@\verb="!= character}{7}
+\indexentry{index!long arguments}{7}
+\indexentry{idx file@{\tt idx} file}{7}
+\indexentry{files@files!{\tt idx}}{7}
+\indexentry{page range}{8}
+\indexentry{range!of pages}{8}
+\indexentry{index!conflicting entries in}{8}
+\indexentry{C language}{8}
+\indexentry{Chen, Pehong}{8}
+\indexentry{Urban, Mike}{8}
+\indexentry{Rose, Marshall}{8}
+\indexentry{Web language}{8}
+\indexentry{Pascal language|see{Web language}}{8}
+\indexentry{makeindex@\MakeIndex!in Web language}{8}
+\indexentry{Beebe, Nelson H.F.}{8}
+\indexentry{mistakes|see{errors}}{8}
+\indexentry{page breaks|see{ambiguities}}{8}
+\indexentry{range|see{page}}{8}
diff --git a/indexing/makeindex/test/test.tex b/indexing/makeindex/test/test.tex
new file mode 100644
index 0000000000..a3797c143c
--- /dev/null
+++ b/indexing/makeindex/test/test.tex
@@ -0,0 +1,686 @@
+
+% Test LaTeX file for MakeIndex, adapted from makeindex.tex by addition
+% of several (not entirely useful) index entries
+% makeindex.tex -- released 17 February 1987
+% Copyright(c) 1987 by Leslie Lamport
+% for LaTeX version 2.09
+%
+\documentstyle[11pt,makeidx,showidx]{article}
+\makeindex
+%&v&\verb|#|&
+%&i&\verb|\index{#}|&
+%&t&{\tt #}&
+\newcommand{\MakeIndex}{{\it MakeIndex\/}}
+\newcommand{\fn}{}
+\newcommand{\ff}
+
+
+% Definition of the iexample environment and \sindex command.
+% They are used as follows:
+% \begin{iexample}
+% Page 7 & \verb|\index{foo}|\\
+% Page 22 & \verb|\index{bar}|
+% \sindex
+% bar, 22 \\
+% foo, 7
+% \end{iexample}
+\newenvironment{iexample}{\begin{quote}
+ \begin{tabular}[t]{@{}ll||@{\hspace{1em}}}}{\end{tabbing}\end{minipage}
+ \end{quote}}
+\newcommand{\sindex}{\end{tabular}\hspace{1em}\begin{minipage}[t]{\textwidth}
+ \begin{tabbing}}
+
+\newcommand{\sitem}{\hspace*{20pt}}
+\newcommand{\ssitem}{\hspace*{30pt}}
+
+
+\title{\MakeIndex: An Index Processor For \LaTeX}
+
+\author{Leslie Lamport}
+\date{17 February 1987}
+\begin{document}
+\maketitle
+
+\section{How to Use \MakeIndex}
+
+\MakeIndex\ is a program for
+making an index in a document generated with \LaTeX. The first step in
+producing%
+\index{producing the index}
+the index
+is to put the necessary \verb|\index|%
+\index{index@\verb=\index=}
+commands in
+your document, as described in the next section. Here, I describe how
+to generate the index after the \verb|\index| commands are in place.
+
+Let's suppose that the root file of your document is {\tt myfile.tex}.
+You must make the following changes to your document:
+\begin{itemize}
+
+\item Add the {\tt makeidx}%
+\index{makeidx document-style option@{\tt makeidx} document-style option}
+document-style option to the list of
+options in the \verb|\documentstyle| command. (See page 21 of the
+\LaTeX\ manual.)%
+\index{LaTeX manual@\LaTeX\ manual}
+
+\item Put a \verb|\makeindex| command in the preamble (between the
+ \linebreak%%%%%
+\verb|\documentstyle| and \verb|\begin{document}| commands).
+
+\item Put a \verb|\printindex| command%
+\index{printindex@\verb=\printindex=}
+where you want the index to
+appear---usually at the end, right before the \verb|\end{document}|
+command.
+\end{itemize}
+You then run \LaTeX\ on your entire document, causing it to
+generate the file {\tt myfile.idx}, which I will call the
+{\tt idx}%
+\index{idx file@{\tt idx} file}
+\index{files@files!{\tt idx}}
+file.
+Next, run the \MakeIndex\ program by
+typing the following Unix command:
+\begin{quote}
+ {\tt makeindex myfile.idx}
+\end{quote}
+\index{running makeindex@running \MakeIndex}
+\index{makeindex@\MakeIndex!running}
+This produces the file {\tt myfile.ind}, which I will call the {\tt
+ind}%
+\index{ind file@{\tt ind} file}
+\index{files@files!{\tt ind}}
+file. If \MakeIndex\ generated no error messages, you can now rerun
+\LaTeX\ on your document and the index will appear. (You can remove
+the \verb|\makeindex|%
+\index{makeindex command@\verb=\makeindex= command!removing}
+command first so the
+{\tt idx}%
+\index{idx file@{\tt idx} file}
+\index{files@files!{\tt idx}}
+file is not
+regenerated.) If there were error messages,%
+\index{error messages}
+see
+Section~\ref{sec:errors}.
+
+By reading the index, you may discover additional
+mistakes.%
+\index{mistakes}
+These should be
+corrected by changing the appropriate \verb|\index| commands in the
+document and regenerating the {\tt ind} file. If there are
+problems that cannot be corrected in this way, you can always edit
+the {\tt ind} file directly. However, such
+editing%
+\index{editing!avoiding}
+is to be
+avoided because it must be repeated every time you generate a new
+version of the index.
+
+
+\section{How to Generate Index Entries}
+
+\subsection{When, Why, What, and How to Index}
+
+It's tempting to generate the index as you write the document. Resist
+the temptation. It is virtually impossible to obtain any consistency
+in an index that is generated in this way.
+
+An index is there to help the reader find what he's looking for. With
+this in mind, common sense can help in figuring out what should be in
+the index and how it should be organized. Since it's often hard to
+distinguish common sense from equally common nonsense, professional
+advice%
+\index{indexing!professional advice}
+is useful. Many style guides discuss indexing; the pamphlet
+{\em Indexing Your Book\/} by Sina Spiker%
+\index{Spiker, Sina}
+(The University of Wisconsin%
+\index{Wisconsin Press}
+Press, 1954) is, according to its subtitle, ``A Practical
+Guide for Authors''.%
+\index{index!professional guidelines}
+
+Unfortunately, these guides to indexing seem to have been written when
+high tech meant using a ball-point pen%
+\index{pen!ball-point}
+instead of a quill,%
+\index{pen!quill}
+so their
+advice on the mechanics of creating an index revolve around how to
+stack your $3\times 5$ index cards.%
+\index{index!cards}
+\index{cards!index}
+\index{index!the hard way}
+You'll have to figure out your own
+method of using the computer to lighten the chore. An alphabetical
+list of every word%
+\index{word list!making a}
+in your document, with duplicates removed, is not a
+bad place to start. If your system has Howard Trickey's
+\index{Trickey, Howard}
+{\tt delatex}%
+\index{delatex@{\tt delatex}}
+\index{LaTeX commands@\LaTeX\ commands!stripping}
+program, then the following Unix command generates such a list from the
+file {\tt myfile.tex} and puts it on the file {\tt foo}:
+\begin{quote}
+\index{index!getting started}
+\index{index!making a word list}
+\index{index!unique words}
+\index{unique words}
+\index{word list}
+\tt delatex myfile.tex | sort -uf > foo
+\end{quote}
+
+The computer is only a tool; it can't write the index for you. It may
+be easy to choose which words are important and mechanically generate
+an index citing every occurrence of those words, but the resulting
+index will not be as useful to the reader as one prepared with more
+care.
+
+
+
+
+\subsection{The Basics}
+
+Each \verb|\index|%
+\index{index@\verb=\index=}
+\index{index!entries}
+command causes \LaTeX\ to write an entry on the {\tt
+idx}%
+\index{idx file@{\tt idx} file}
+\index{files@files!{\tt idx}}
+file. The following example shows some simple
+\verb|\index| commands and the index entries that they produce. The
+page number refers to the page containing the text where the
+\verb|\index| command appears.\footnote{To avoid any ambiguity if a
+page break%
+\index{ambiguities}
+occurs right at an {\tt \symbol{'134}index} command, it's a
+good idea to attach the command to a word instead of putting it between
+words.}
+\begin{iexample}%
+\index{examples}
+Page ii & \verb|\index{Alpha}| \\
+Page viii: & \verb|\index{alpha}| \\
+Page ix: & \verb|\index{alpha}| \\
+ & \verb|\index{Alphabet}| \\
+Page 22: & \verb|\index{alpha}| \\
+ & \verb|\index{alphas}| \\
+Page 23: & \verb|\index{alphabet}| \\
+ & \verb|\index{alphabet}| \\
+Page 24: & \verb|\index{alpha bet}|
+\sindex
+Alpha, ii \\
+alpha, viii, ix, 22 \\
+alpha bet, 24\\
+Alphabet, ix\\
+alphabet, 23\\
+alphas, 22
+\end{iexample}
+Note that the duplicate
+\verb|\index{alphabet}|%
+\index{index@\verb=\index=!duplicates}
+commands on
+page 23 produce only one ``23'' in the index.
+
+
+To produce a subentry,%
+\index{subentries}
+\index{index!subentries}
+the argument of the \verb|\index|
+command should contain both the main%
+\index{index!main entries}
+entry and the subentry, separated
+by a \verb|!| character.%
+\index{"! character@\verb="!= character}
+\begin{iexample}%
+\index{examples}
+Page 7: & \verb|\index{gnat!size of}| \\
+Page 32: & \verb|\index{gnat}| \\
+Page 35: & \verb|\index{gnat!anatomy}| \\
+ & \verb|\index{gnus!good}| \\
+Page 38: & \verb|\index{gnus!bad}| \\
+ &
+\sindex
+gnat, 32 \\
+\sitem anatomy, 35 \\
+\sitem size of, 7\\
+gnus \\
+\sitem bad, 38\\
+\sitem good, 35
+\end{iexample}
+You can also have
+subsubentries.%
+\index{subsubentries}
+\index{index!subsubentries}
+\begin{iexample}%
+\index{examples}
+Page 8: & \verb|\index{bites!animal!gnats}| \\
+Page 10: & \verb|\index{bites!animal!gnus}| \\
+Page 12 : & \verb|\index{bites!vegetable}| \\
+ & \\
+ &
+\sindex
+bites \\
+\sitem animal \\
+\ssitem gnats, 8 \\
+\ssitem gnus, 10 \\
+\sitem vegetable, 12
+\end{iexample}
+\LaTeX\ and \MakeIndex\ support only three levels of indexing; you
+can't have
+subsubsubentries.%
+\index{subsubsubentries}
+\index{entries!subsubsubentries (can't have)}
+\index{index!maximum levels allowed}
+
+To specify a page range,%
+\index{page range}
+put an \verb/\index{...|(}/%
+\index{page range!opening command}
+command at the beginning of the range and an \verb/\index{...|)}/
+command at the end of the range.
+\index{page range!closing command}
+\begin{iexample}%
+\index{examples}
+Page vi: & \verb/\index{gnat|(}/ \\
+Page x: & \verb/\index{gnat|)}/ \\
+Page 22: & \verb|\index{gnat}| \\
+ & \verb/\index{gnus!bad|(}/ \\
+ & \verb/\index{gnus!bad|)}/ \\
+Page 28: & \verb/\index{gnus!good|(}/ \\
+Page 30: & \verb|\index{gnus!good}| \\
+Page 32: & \verb/\index{gnus!good|)}/
+\sindex
+gnat, vi--x, 22 \\
+gnus \\
+\sitem bad, 22\\
+\sitem good, 28--32
+\end{iexample}
+Note that \MakeIndex\ does the right thing when both ends of the range
+fall on the same page.\footnote{The use of
+``28ff.''%
+\index{page range!avoiding ff.}
+\index{ff.!avoiding}
+rather than
+``28--32'' is frowned%
+\index{behavior!frowned-upon}
+upon by the experts.%
+\index{experts}
+\index{experts!behavior of}}
+
+Sometimes, you want to add a cross-reference%
+\index{index!cross-reference}
+\index{cross-reference}
+\index{see command@{\tt see} command!using}
+with no page
+number. This is done as follows;
+\begin{iexample}%
+\index{examples}
+Page 2: & \verb|\index{at}| \\
+Page 2: & \verb/\index{at!bat|see{bat, at}}/
+\sindex
+at, 2 \\
+\sitem bat, {\em see\/} bat, at
+\end{iexample}
+Since the ``see'' entry does not print any page number, it doesn't
+matter where the \verb/\index{...|see{...}}/
+command%
+\index{see command@{\tt see} command!placement of}
+goes, so
+long as it follows the \verb|\begin{document}| command. You
+might want to put all such cross-referencing commands in one place.
+
+
+If you specify an entry of the form
+$\sigma$\verb|@|$\tau$,%
+\index{"@ character@\verb="@= character}
+the string
+$\sigma$ determines the
+alphabetical%
+\index{index!alphabetizing}
+\index{index!funny characters in}
+position of the entry, while the
+string $\tau$ produces the text of the entry.
+\begin{iexample}
+Page 44: & \verb|\index{twenty}| \\
+Page 46: & \verb|\index{twenty-one}| \\
+Page 55: & \verb|\index{twenty@xx}|
+\sindex
+twenty, 44 \\
+xx, 55 \\
+twenty-one, 46
+\end{iexample}
+This feature is useful because the argument of the \verb|\index|
+command provides the actual input string that \LaTeX\ uses to generate
+the index entry. In the following example, the input \verb|$\alpha$|
+produces the symbol $\alpha$,
+\begin{iexample}
+Page 12: & \verb|\index{alphas}| \\
+Page 13: & \verb|\index{alpha}| \\
+Page 14: & \verb|\index{alpha@$\alpha$}|
+\sindex
+alpha, 13 \\
+$\alpha$, 14 \\
+alphas, 12
+\end{iexample}
+Similarly, the command \verb|\index{gnu@{\bf gnu}}| produces
+a boldface {\bf gnu} index entry.
+
+In some indexes, certain page numbers%
+\index{page numbers}
+are specially formatted---for
+example, an italic page number%
+\index{page numbers!italic}
+may indicate the primary reference, and
+an {\em n\/} after a page number may denote that the item appears in a
+footnote%
+\index{page numbers!entries in footnotes}
+on that page. \MakeIndex\ makes it easy to format an
+individual page number any way you want. For any string of characters
+$\sigma$, the command \verb/\index{...|/$\sigma$\verb|}| produces a
+page number of the form \verb|\|$\sigma$\verb|{|$n$\verb|}|.
+Similarly, the command \verb/\index{...|(/$\sigma$\verb|}| may produce
+a page number of the form \verb|\|$\sigma$\verb|{|$n$--$m$\verb|}|.
+Thus, suppose the document contains the following command definitions:
+\begin{quote}
+\verb|\newcommand{\ii}[1]{{\it #1}}| \\
+\verb|\newcommand{\nn}[1]{#1n}|
+\end{quote}
+We could then have:
+\begin{iexample}
+\index{examples}
+Page 3: & \verb/\index{gnat|ii}/ \\
+Page 4: & \verb/\index{gnat|nn}/ \\
+Page 5: & \verb/\index{gnu}/ \\
+Page 44: & \verb/\index{gnu|(ii}/ \\
+Page 46: & \verb/\index{gnu|)}/
+\sindex
+gnat, {\em 3}, 4n \\
+gnu, 5, {\em 44--46}
+\end{iexample}
+The ``see''%
+\index{see command@{\tt see} command!example}
+option is a special case of this facility, where the
+\verb|\see| command is predefined by the {\tt makeidx}
+\index{makeidx document-style option@{\tt makeidx} document-style option}
+document-style
+option.
+
+
+\subsection{The Fine Print}
+
+Commands in an index entry are expanded when the index is typeset,
+not when the {\tt idx}%
+\index{idx file@{\tt idx} file}
+\index{files@files!{\tt idx}}
+file is written.%
+\index{index!expansion of commands in}
+Hence, the command
+\verb|\index{\gnu}| produces an entry that is alphabetized by
+\verb|\gnu|, regardless of how the \verb|\gnu| command is defined.
+
+Recall that special characters like \verb|\| may appear in the argument
+of an \verb|\index| command only if that command is not itself
+contained in the argument of another command. This is most likely to
+be a problem when indexing items in a footnote. Even in this case,
+robust commands%
+\index{robust commands}
+\index{commands!robust}
+can be placed in the ``\verb|@|'' part of an entry, as
+in \verb|\index{gnu@{\it gnu}}|, and
+fragile commands%
+\index{fragile commands}
+\index{commands!fragile}
+can be used
+if protected with the \verb|\protect|%
+\index{protect@\verb=\protect=}
+\index{protect@\verb=\protect=|see{{\tt \symbol{'134}string}}}
+\index{protect@\verb=\string=|see{{\tt \symbol{'134}protect}}}
+command.\footnote{In
+versions of \LaTeX\ released before 3 February 1987, you must
+use the {\tt\symbol{'134}string}
+command instead of
+{\tt\symbol{'134}protect}.}%
+\index{string@{\tt \symbol{'134}string}}
+
+Remember that the argument of an \verb|\index| command must always have
+matching braces,%
+\index{braces!matching}
+where the brace in a \verb|\{| or \verb|\}| command
+counts.
+
+\MakeIndex\ assumes that all page numbers are either
+arabic%
+\index{page numbers!arabic}
+or lower-case
+roman numerals;%
+\index{page numbers!roman numerals}
+it assumes that pages
+numbered with roman numerals
+precede those numbered with arabic numerals.%
+\index{page numbers!order of}
+
+To put a \verb|!|, \verb|@|, or \verb/|/ character in an index entry,
+\index{index!funny characters in}
+{\em quote\/} it by preceding the character with a
+\verb|"|.%
+\index{"" character@\verb=""= character}
+\index{quote character}
+\index{index!quoting characters in}
+More
+precisely, any a character is said to be quoted if it follows an
+unquoted \verb|"| that is not part of a \verb|\"| command. A quoted
+\verb|!|, \verb|@|, or \verb/|/ character is treated like an
+ordinary character rather than having its usual meaning. The
+\verb|"| preceding a quoted character is deleted before the
+entries are alphabetized.
+\begin{iexample}%
+\index{examples}
+Page 2: & \verb|\index{exclaim ("!)}| \\
+Page 3: & \verb|\index{exclaim ("!)!loudly}| \\
+Page 4: & \verb|\index{fur@f\"{u}r}| \\
+Page 5: & \verb|\index{quote (\verb+""+)}|
+\sindex
+exclaim (!), 2 \\
+\sitem loudly, 3\\
+f\"{u}r, 4\\
+quote (\verb+""+), 5
+\end{iexample}
+
+
+\MakeIndex\ regards spaces%
+\index{index!spaces in}
+as ordinary characters when alphabetizing the
+entries and deciding whether two entries are the same. Thus, letting
+``\verb*| |'' denote a space character, the commands
+\verb*|\index{gnu}|, \verb*|\index{ gnu}|, and \verb*|\index{gnu }|
+produce three separate entries, the first appearing near the beginning
+of the index, since \verb*| | comes before any letter in \MakeIndex's
+``alphabetical'' order. All three entries look the same when
+printed, since \LaTeX\ ignores extra spaces in the input. Similarly,
+ \verb*|\index{a space}| and \verb*|\index{a space}| produce two
+different entries that look the same when printed. Do not
+split the argument of an \verb|\index| command across lines in the
+input file.%
+\index{index!don't split across lines}
+
+
+
+\section{Error Messages} \label{sec:errors}
+\index{error messages}
+
+\MakeIndex\ types out on the terminal the number of lines read and
+written and how many errors were found. Message to identify the error
+are written on a file with extension
+{\tt ilg}.%
+\index{ilg file@{\tt ilg} file}
+\index{files@files!{\tt ilg}}
+There are two phases
+in which \MakeIndex\ can produce error messages: when it is reading the
+{\tt idx}%
+\index{idx file@{\tt idx} file}
+\index{files@files!{\tt idx}}
+file, and when it is writing the
+{\tt ind}%
+\index{ind file@{\tt ind} file}
+\index{files@files!{\tt ind}}
+file. Each error
+message prints the nature of the error followed by a line number,
+identifying where in the file the error occurs. In the reading phase,
+the line number refers to the {\tt idx} file; in the writing phase, it
+refers to the {\tt ind} file.
+
+\subsection{Errors in Reading Phase}
+
+\subsubsection*{\tt Extra `!' at position ...}
+
+\index{"! character@\verb="!= character}
+The \verb|\index| command's argument has more than two unquoted
+\verb|!| characters. Perhaps some of them should be quoted.
+
+\subsubsection*{\tt Extra `@' at position ...}
+
+\index{"@ character@\verb="@= character}
+The \verb|\index| command argument has two or more unquoted \verb|@|
+characters with no intervening \verb|!|. Perhaps one of the \verb|@|
+characters should be quoted.
+
+\subsubsection*{\tt Extra `|' at position ...}
+
+\index{"! character@\verb="!= character}
+The \verb|\index| command's argument has more than one unquoted \verb|!|
+characters. Perhaps the extras should be quoted.
+
+\subsubsection*{\tt Illegal null field}
+
+The \verb|\index| command argument doesn't make sense because some
+string is null that shouldn't be. The command \verb|\index{!big}| will
+produce this error, since it specifies a subentry ``big'' with no
+entry. Similarly, the command \verb|\index{@big}| is incorrect because
+it specifies a null string for alphabetizing.
+
+%\subsubsection*{\tt No \symbol{'134}indexentry}
+%
+%Each line of an {\tt idx} file written by \LaTeX\ should contain an
+%\verb|\indexentry| command. \MakeIndex\ has found a line in the {\tt idx}
+%file that does not contain an \verb|\indexentry| command. The {\tt
+%idx} file has probably been corrupted.
+%
+%\subsubsection*{\tt Missing \symbol{'173}}
+%
+%\MakeIndex\ believes that the braces in the argument of the \verb|\index|
+%command are not properly matched. Since \LaTeX\ must
+%have thought that the braces were properly matched, the problem
+%is probably due to a corrupted {\tt idx} file.
+%
+%\subsubsection*{\tt Missing \symbol{'175}}
+%
+%See ``{\tt Missing \symbol{'173}}'' error.
+
+\subsubsection*{\tt Argument ... too long (max 1024).}
+
+\index{index!long arguments}
+Your document contained an \verb|\index| command with a very long
+argument. You probably forgot the right brace that was supposed
+to delimit the argument.
+
+\subsubsection*{Other errors}
+
+\MakeIndex\ can produce a variety of other error messages indicating
+that something is seriously wrong with the
+{\tt idx}%
+\index{idx file@{\tt idx} file}
+\index{files@files!{\tt idx}}
+file. If you
+get one, it probably means that the {\tt idx} file was corrupted in
+some way. If \LaTeX\ did not generate any errors when it created
+the {\tt idx} file, then it is highly unlikely to have produced
+a bad {\tt idx} file. If it did, you'll have to examine the
+{\tt idx} file to figure out what went wrong.
+
+
+\subsection{Errors in Writing Phase}
+
+\subsubsection*{\tt Unmatched range opening operator}
+
+An \verb/\index{...|(}/ command was not followed by a matching
+ \linebreak%%%%%
+\verb/\index{...|)}/ command. The ``\verb|...|'' in the two
+commands must be completely identical.
+
+
+\subsubsection*{\tt Unmatched range closing operator }
+
+An \verb/\index{...|(}/ command was not preceded by a matching
+ \linebreak%%%%%
+\verb/\index{...|)}/ command.
+
+\subsubsection*{\tt Extra range opening operator }
+
+Two \verb/\index{...|(}/ commands appear in the document with no intervening
+\verb/\index{...|)}/ command.
+
+
+
+\subsubsection*{\tt Inconsistent page encapsulator ... within range}
+
+\MakeIndex\ has been instructed to include a page
+range%
+\index{page range}
+\index{range!of pages}
+for an entry
+and a single page number within that range that is formatted
+differently---for example, by having a
+\verb+\index{gnu|ii}+ command between a \verb+\index{gnu|(}+
+and a \verb+\index{gnu|)}+ command.
+
+
+\subsubsection*{\tt Conflicting entries}
+
+\index{index!conflicting entries in}
+\MakeIndex\ thinks it has been instructed to print the same page number
+twice in two different ways---for example, by the commands
+\verb|\index{gnu}| and \verb/\index{gnu|(see{...}}/ appearing on the
+same page.
+
+
+
+\section*{Acknowledgements}
+
+\MakeIndex\ is a C
+\index{C language}
+ program written by Pehong Chen,%
+\index{Chen, Pehong}
+with a little
+advice from me. It was inspired by a program written by Mike Urban,%
+\index{Urban, Mike}
+which was based on a program written by Marshall Rose.%
+\index{Rose, Marshall}
+ Perhaps someday
+someone will rewrite \MakeIndex\ in Web,%
+\index{Web language}
+\index{Pascal language|see{Web language}}
+\index{makeindex@\MakeIndex!in Web language}
+making it available to all
+\LaTeX\ users.
+
+This version of {\tt makeindex.\-tex}, {\tt test.\-tex}, has index
+entries generated by Nelson H.F.~Beebe%
+\index{Beebe, Nelson H.F.}
+to serve as a test file for the
+\MakeIndex{} program.
+
+\index{mistakes|see{errors}}
+\index{page breaks|see{ambiguities}}
+\index{range|see{page}}
+
+
+%\printindex
+\input{\jobname.ind}
+\end{document}
diff --git a/indexing/makeindex/test/tort.idx b/indexing/makeindex/test/tort.idx
new file mode 100644
index 0000000000..207fa68136
--- /dev/null
+++ b/indexing/makeindex/test/tort.idx
@@ -0,0 +1,44 @@
+\indexentry{@illegal-null-field}{9}
+\indexentry{!illegal-null-field}{10}
+\indexentry{too-may-ats@x@}{10}
+\indexentry{too-may-bangs!x!y!z}{10}
+\indexentry{too-may-bars|x|}{10}
+
+\indexentry{incons-entries|xx}{6}
+\indexentry{incons-entries}{6}
+
+\indexentry{implicit-range}{10}
+\indexentry{implicit-range}{11}
+\indexentry{implicit-range}{12}
+
+\indexentry{missing(|)}{6}
+\indexentry{missing)|(}{6}
+
+\indexentry{ok-encaps|(ii}{5}
+\indexentry{ok-encaps|ii}{6}
+\indexentry{ok-encaps|)}{7}
+
+\indexentry{bad-encaps|(ii}{5}
+\indexentry{bad-encaps|ii}{6}
+\indexentry{bad-encaps|)iii}{7}
+
+\indexentry{incons-encaps|(}{5}
+\indexentry{incons-encaps|ii}{6}
+\indexentry{incons-encaps|)}{7}
+
+\indexentry{incons-encaps2|(}{5}
+\indexentry{incons-encaps2|ii}{5}
+\indexentry{incons-encaps2|)}{5}
+
+\indexentry{mixed-range|(}{i}
+\indexentry{mixed-range|)}{6}
+
+\indexentry{mixed-range1|(}{i}
+\indexentry{mixed-range1}{iv}
+\indexentry{mixed-range1}{3}
+\indexentry{mixed-range1|)}{6}
+
+\indexentry{mixed-range2|(}{i}
+\indexentry{mixed-range2|xx}{ii}
+\indexentry{mixed-range2|yy}{3}
+\indexentry{mixed-range2|)}{6}
diff --git a/indexing/makeindex/test/vmsdiff.com b/indexing/makeindex/test/vmsdiff.com
new file mode 100644
index 0000000000..dde35d7c67
--- /dev/null
+++ b/indexing/makeindex/test/vmsdiff.com
@@ -0,0 +1,137 @@
+$ ! Test of MakeIndex for VAX VMS
+$ ! [12-Sep-1991]
+$ !
+$ ! ****** Edit this line to suit local conventions *****
+$ makeindex :== $public$disk:[beebe.makeindex.src]makeindex.exe
+$
+$ write sys$output "=================================================="
+$ write sys$output "Expect only letter case differences in the output"
+$ write sys$output "=================================================="
+$ !
+$ !
+$ write sys$output "=================================================="
+$ write sys$output "test file = b209a"
+$ makeindex b209a
+$ diff b209a.ind ok-b209a.ind
+$ diff b209a.ilg ok-b209a.ilg
+$ !
+$ !
+$ write sys$output "=================================================="
+$ write sys$output "test file = b209b"
+$ makeindex b209b
+$ diff b209b.ind ok-b209b.ind
+$ diff b209b.ilg ok-b209b.ilg
+$ !
+$ !
+$ write sys$output "=================================================="
+$ write sys$output "test file = b209c"
+$ makeindex b209c
+$ diff b209c.ind ok-b209c.ind
+$ diff b209c.ilg ok-b209c.ilg
+$ !
+$ !
+$ write sys$output "=================================================="
+$ write sys$output "test file = b209d"
+$ makeindex b209d
+$ diff b209d.ind ok-b209d.ind
+$ diff b209d.ilg ok-b209d.ilg
+$ !
+$ !
+$ write sys$output "=================================================="
+$ write sys$output "test file = b209e"
+$ makeindex b209e
+$ diff b209e.ind ok-b209e.ind
+$ diff b209e.ilg ok-b209e.ilg
+$ !
+$ !
+$ write sys$output "=================================================="
+$ write sys$output "test file = b209f"
+$ makeindex b209f
+$ diff b209f.ind ok-b209f.ind
+$ diff b209f.ilg ok-b209f.ilg
+$ !
+$ !
+$ write sys$output "=================================================="
+$ write sys$output "test file = b211a"
+$ makeindex b211a
+$ diff b211a.ind ok-b211a.ind
+$ diff b211a.ilg ok-b211a.ilg
+$ !
+$ !
+$ write sys$output "=================================================="
+$ write sys$output "test file = b211d"
+$ makeindex b211d
+$ diff b211d.ind ok-b211d.ind
+$ diff b211d.ilg ok-b211d.ilg
+$ !
+$ !
+$ write sys$output "=================================================="
+$ write sys$output "test file = b211e"
+$ makeindex b211e
+$ diff b211e.ind ok-b211e.ind
+$ diff b211e.ilg ok-b211e.ilg
+$ !
+$ !
+$ write sys$output "=================================================="
+$ write sys$output "test file = b211f"
+$ makeindex b211f
+$ diff b211f.ind ok-b211f.ind
+$ diff b211f.ilg ok-b211f.ilg
+$ !
+$ !
+$ write sys$output "=================================================="
+$ write sys$output "test file = b211g"
+$ makeindex b211g
+$ diff b211g.ind ok-b211g.ind
+$ diff b211g.ilg ok-b211g.ilg
+$ !
+$ !
+$ write sys$output "=================================================="
+$ write sys$output "test file = b211h"
+$ makeindex b211h
+$ diff b211h.ind ok-b211h.ind
+$ diff b211h.ilg ok-b211h.ilg
+$ !
+$ !
+$ write sys$output "=================================================="
+$ write sys$output "test file = book"
+$ makeindex book
+$ diff book.ind ok-book.ind
+$ diff book.ilg ok-book.ilg
+$ !
+$ !
+$ write sys$output "=================================================="
+$ write sys$output "test file = test"
+$ makeindex test
+$ diff test.ind ok-test.ind
+$ diff test.ilg ok-test.ilg
+$ !
+$ !
+$ write sys$output "=================================================="
+$ write sys$output "test file = tort"
+$ makeindex tort
+$ diff tort.ind ok-tort.ind
+$ diff tort.ilg ok-tort.ilg
+$ !
+$ !
+$ write sys$output "=================================================="
+$ write sys$output "test file = b211b (German sort option)"
+$ makeindex -s b211b.ist -g b211b
+$ diff b211b.ind ok-b211b.ind
+$ diff b211b.ilg ok-b211b.ilg
+$ !
+$ !
+$ write sys$output "=================================================="
+$ write sys$output "test file = b210a (Private style file)"
+$ makeindex -s b210a.ist b210a
+$ diff b210a.ind ok-b210a.ind
+$ diff b210a.ilg ok-b210a.ilg
+$ !
+$ !
+$ write sys$output "=================================================="
+$ write sys$output "test file = b211c (Private style file)"
+$ makeindex -s b211c.ist b211c
+$ diff b211c.ind ok-b211c.ind
+$ diff b211c.ilg ok-b211c.ilg
+$ !
+$ !
diff --git a/indexing/makeindex/troff/ixmac b/indexing/makeindex/troff/ixmac
new file mode 100644
index 0000000000..7205947fad
--- /dev/null
+++ b/indexing/makeindex/troff/ixmac
@@ -0,0 +1,6 @@
+.
+.de IX
+.ie '\\n(.z'' .tm IX: \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 {\\n(PN}
+.el \\!.IX \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 {\\n(PN}
+..
+
diff --git a/indexing/makeindex/troff/makeind b/indexing/makeindex/troff/makeind
new file mode 100644
index 0000000000..a3621f0c6b
--- /dev/null
+++ b/indexing/makeindex/troff/makeind
@@ -0,0 +1,23 @@
+#!/bin/sh
+
+extract="ptroff -ms -t"
+grep=egrep
+in=$1
+out=/dev/null
+base=`echo $in | sed 's/\(.*\)\..*/\1/'`
+idx=$base.idx
+tmp=/tmp/$idx
+cmd='^IX:'
+sty = troff.ist
+
+echo -n "Extracting index terms from $in..."
+$extract $in > $out 2> $tmp
+echo "done"
+
+echo -n "Writing index terms to $idx..."
+$grep $cmd $tmp > $idx
+rm -f $tmp
+echo "done"
+
+makeindex -s $sty $idx
+
diff --git a/indexing/makeindex/troff/sample.idx b/indexing/makeindex/troff/sample.idx
new file mode 100644
index 0000000000..1ac7603a64
--- /dev/null
+++ b/indexing/makeindex/troff/sample.idx
@@ -0,0 +1,4 @@
+IX: {indexing!programs!C language} {1}
+IX: {makeindex@\fImakeindex\fP(1L)} {1}
+IX: {Knuth} {2}
+IX: {typesetting!computer-aided} {2}
diff --git a/indexing/makeindex/troff/sample.ilg b/indexing/makeindex/troff/sample.ilg
new file mode 100644
index 0000000000..5b65bbba86
--- /dev/null
+++ b/indexing/makeindex/troff/sample.ilg
@@ -0,0 +1,7 @@
+This is makeindex, portable version 2.6 [7-14-88].
+Scanning style file troff.ist..........................done (26 attributes redefined, 0 ignored).
+Scanning input file sample.idx....done (4 entries accepted, 0 rejected).
+Sorting entries....done (9 comparisons).
+Generating output file sample.ind....done (71 lines written, 0 warnings).
+Output written in sample.ind.
+Transcript written in sample.ilg.
diff --git a/indexing/makeindex/troff/sample.ind b/indexing/makeindex/troff/sample.ind
new file mode 100644
index 0000000000..48fdd068f2
--- /dev/null
+++ b/indexing/makeindex/troff/sample.ind
@@ -0,0 +1,72 @@
+.\" start of index output
+
+.SH
+.ce
+\s+2INDEX\s-2
+
+.2C
+.de IS
+.sp 0.5
+\s+2\fB
+.ce
+..
+.de IE
+.sp 0.5
+\s-2\fP
+..
+.de I1
+.ti 0.25i
+..
+.de 1I
+.ti 0.25i
+..
+.de I2
+.ti 0.5i
+..
+.de 2I
+.ti 0.5i
+..
+
+
+
+.IS
+I
+.IE
+
+.br
+indexing
+.1I
+programs
+.2I
+C language, 1.
+.sp
+
+
+.IS
+K
+.IE
+
+.br
+Knuth, 2.
+.sp
+
+
+.IS
+M
+.IE
+
+.br
+\fImakeindex\fP(1L), 1.
+.sp
+
+
+.IS
+T
+.IE
+
+.br
+typesetting
+.1I
+computer-aided, 2.
+
+.\" end of index output \ No newline at end of file
diff --git a/indexing/makeindex/troff/sample.txt b/indexing/makeindex/troff/sample.txt
new file mode 100644
index 0000000000..a30633e6d3
--- /dev/null
+++ b/indexing/makeindex/troff/sample.txt
@@ -0,0 +1,14 @@
+.
+.de IX
+.ie '\\n(.z'' .tm IX: \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 {\\n(PN}
+.el \\!.IX \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 {\\n(PN}
+..
+
+This is a sample file to test the \fImakeindex\fP(1L) program, and see
+.IX {indexing!programs!C language}
+.IX {makeindex@\fImakeindex\fP(1L)}
+.bp
+.rs
+.IX {Knuth}
+.IX {typesetting!computer-aided}
+how well if functions in the \fItroff\fP(1) environment.
diff --git a/indexing/makeindex/troff/troff.ist b/indexing/makeindex/troff/troff.ist
new file mode 100644
index 0000000000..9e0df84d40
--- /dev/null
+++ b/indexing/makeindex/troff/troff.ist
@@ -0,0 +1,54 @@
+keyword "IX:"
+preamble
+".\\\" start of index output
+
+.SH
+.ce
+\\s+2INDEX\\s-2
+
+.2C
+.de IS
+.sp 0.5
+\\s+2\\fB
+.ce
+..
+.de IE
+.sp 0.5
+\\s-2\\fP
+..
+.de I1
+.ti 0.25i
+..
+.de 1I
+.ti 0.25i
+..
+.de I2
+.ti 0.5i
+..
+.de 2I
+.ti 0.5i
+..\n"
+postamble "\n\n.\\\" end of index output\n"
+setpage_prefix "\n.nr % 1\n"
+setpage_suffix ""
+group_skip "\n.sp"
+headings_flag 1
+heading_prefix "\n\n\n.IS\n"
+heading_suffix "\n.IE\n"
+item_0 "\n.br\n"
+item_1 "\n.I1\n"
+item_2 "\n.I2\n"
+item_01 "\n.I1\n"
+item_x1 "\n.1I\n"
+item_12 "\n.I2\n"
+item_x2 "\n.2I\n"
+delim_0 ", "
+delim_1 ", "
+delim_2 ", "
+delim_r "-"
+delim_t "."
+encap_prefix "\\fB"
+encap_infix ""
+encap_suffix "\\fP"
+indent_space " "
+indent_length 8