summaryrefslogtreecommitdiff
path: root/Docs
diff options
context:
space:
mode:
authorunknown <lenz@mysql.com>2005-04-13 19:46:26 +0200
committerunknown <lenz@mysql.com>2005-04-13 19:46:26 +0200
commit3d73ea281d4ed65497b92d592c1bbf1caa0e5b2d (patch)
tree062cab7826ac51a8508bc7ee6ea88cd0b833514c /Docs
parent26d7574462a8abb69c55f5280d43ce15b66b3a29 (diff)
parentc80e4f1affc9b037f56428f18642c5768300bdac (diff)
downloadmariadb-git-3d73ea281d4ed65497b92d592c1bbf1caa0e5b2d.tar.gz
- After merge fixes
BitKeeper/deleted/.del-Do-compile~d1a6d7e535befea3: Auto merged BitKeeper/deleted/.del-Makefile.am~8eda4336dfcaefc: Auto merged BitKeeper/deleted/.del-mysqld_error.txt~95f167eb567c789d: Auto merged scripts/Makefile.am: Auto merged scripts/make_win_src_distribution.sh: Auto merged BitKeeper/deleted/.del-texi2html~74632fe370dcec73: Auto merged configure.in: - manual merge support-files/mysql.spec.sh: - manual merge
Diffstat (limited to 'Docs')
-rw-r--r--Docs/Images/Attic/html-fs.gifbin3349 -> 0 bytes
-rw-r--r--Docs/Images/Attic/mysql-01.gifbin4097 -> 0 bytes
-rw-r--r--Docs/Images/Attic/mysql-02.gifbin4811 -> 0 bytes
-rw-r--r--Docs/Images/Attic/mysql-03.gifbin716 -> 0 bytes
-rw-r--r--Docs/Images/Attic/mysql-04.gifbin909 -> 0 bytes
-rw-r--r--Docs/Images/Attic/mysql-05.gifbin2192 -> 0 bytes
-rw-r--r--Docs/Images/Attic/mysql-06.gifbin3082 -> 0 bytes
-rw-r--r--Docs/Images/Attic/mysql-07.gifbin4209 -> 0 bytes
-rw-r--r--Docs/Images/Attic/mysql-08.gifbin1595 -> 0 bytes
-rw-r--r--Docs/Images/Attic/mysql-09.gifbin2627 -> 0 bytes
-rw-r--r--Docs/Images/Attic/mysql-10.gifbin2455 -> 0 bytes
-rw-r--r--Docs/Images/Attic/mysql-11.gifbin1436 -> 0 bytes
-rw-r--r--Docs/Images/Attic/mysql-12.gifbin2642 -> 0 bytes
-rw-r--r--Docs/Images/Attic/mysql-13.gifbin2914 -> 0 bytes
-rw-r--r--Docs/Images/Attic/mysql-14.gifbin2686 -> 0 bytes
-rw-r--r--Docs/Images/Attic/mysql-15.gifbin2310 -> 0 bytes
-rw-r--r--Docs/Images/Attic/mysql-16.gifbin19192 -> 0 bytes
-rw-r--r--Docs/Images/Attic/mysql-17.gifbin2059 -> 0 bytes
-rw-r--r--Docs/Images/Attic/mysql-18.gifbin918 -> 0 bytes
-rw-r--r--Docs/Images/Attic/mysql-19.gifbin2607 -> 0 bytes
-rw-r--r--Docs/Images/Attic/mysql-compatible.jpgbin2809 -> 0 bytes
-rw-r--r--Docs/Images/Attic/mysql5.gifbin2192 -> 0 bytes
-rw-r--r--Docs/Images/Attic/mysql_anim-01.gifbin15008 -> 0 bytes
-rw-r--r--Docs/Images/Attic/mysql_anim-02.gifbin21236 -> 0 bytes
-rw-r--r--Docs/Images/Attic/mysql_anim-03.gifbin16958 -> 0 bytes
-rw-r--r--Docs/Images/Attic/mysql_anim-04.gifbin12716 -> 0 bytes
-rw-r--r--Docs/Images/Attic/mysql_anim-05.gifbin22962 -> 0 bytes
-rw-r--r--Docs/Images/Attic/mysql_anim-06.gifbin42606 -> 0 bytes
-rw-r--r--Docs/Images/Attic/powered-by-MySQL-transparent.gifbin4209 -> 0 bytes
-rw-r--r--Docs/Images/Makefile.am31
-rw-r--r--Docs/Images/empty.pngbin108 -> 0 bytes
-rwxr-xr-xDocs/Images/flag-background.pnmbin2170 -> 0 bytes
-rw-r--r--Docs/Images/mysql-logo.gifbin13197 -> 0 bytes
-rw-r--r--Docs/Makefile.am180
-rwxr-xr-xDocs/Support/generate-mirror-listing.pl27
-rwxr-xr-xDocs/Support/texi2html2259
-rw-r--r--Docs/Support/texinfo.tex5868
-rwxr-xr-xDocs/Support/update-reserved-words.pl98
-rw-r--r--Docs/To-be-included-in-the-manual/MySQL-for-dummies271
-rw-r--r--Docs/Translations/myodbc-br.texi272
-rw-r--r--Docs/manual-license-spanish.texi709
-rw-r--r--Docs/manual.de.texi107
-rw-r--r--Docs/manual.texi107
-rw-r--r--Docs/manual_toc.html9
-rw-r--r--Docs/mirrors.texi446
-rw-r--r--Docs/mysql.info27
-rw-r--r--Docs/mysqld_error.txt599
-rw-r--r--Docs/reservedwords.texi14
48 files changed, 32 insertions, 10992 deletions
diff --git a/Docs/Images/Attic/html-fs.gif b/Docs/Images/Attic/html-fs.gif
deleted file mode 100644
index 73f9ab5bec6..00000000000
--- a/Docs/Images/Attic/html-fs.gif
+++ /dev/null
Binary files differ
diff --git a/Docs/Images/Attic/mysql-01.gif b/Docs/Images/Attic/mysql-01.gif
deleted file mode 100644
index 773453f8dd7..00000000000
--- a/Docs/Images/Attic/mysql-01.gif
+++ /dev/null
Binary files differ
diff --git a/Docs/Images/Attic/mysql-02.gif b/Docs/Images/Attic/mysql-02.gif
deleted file mode 100644
index 12d984b55e0..00000000000
--- a/Docs/Images/Attic/mysql-02.gif
+++ /dev/null
Binary files differ
diff --git a/Docs/Images/Attic/mysql-03.gif b/Docs/Images/Attic/mysql-03.gif
deleted file mode 100644
index abb16f2aa59..00000000000
--- a/Docs/Images/Attic/mysql-03.gif
+++ /dev/null
Binary files differ
diff --git a/Docs/Images/Attic/mysql-04.gif b/Docs/Images/Attic/mysql-04.gif
deleted file mode 100644
index e207e1790f7..00000000000
--- a/Docs/Images/Attic/mysql-04.gif
+++ /dev/null
Binary files differ
diff --git a/Docs/Images/Attic/mysql-05.gif b/Docs/Images/Attic/mysql-05.gif
deleted file mode 100644
index f78b8a17b93..00000000000
--- a/Docs/Images/Attic/mysql-05.gif
+++ /dev/null
Binary files differ
diff --git a/Docs/Images/Attic/mysql-06.gif b/Docs/Images/Attic/mysql-06.gif
deleted file mode 100644
index c660e1d1f4f..00000000000
--- a/Docs/Images/Attic/mysql-06.gif
+++ /dev/null
Binary files differ
diff --git a/Docs/Images/Attic/mysql-07.gif b/Docs/Images/Attic/mysql-07.gif
deleted file mode 100644
index be309d0de1c..00000000000
--- a/Docs/Images/Attic/mysql-07.gif
+++ /dev/null
Binary files differ
diff --git a/Docs/Images/Attic/mysql-08.gif b/Docs/Images/Attic/mysql-08.gif
deleted file mode 100644
index 3d5b2135655..00000000000
--- a/Docs/Images/Attic/mysql-08.gif
+++ /dev/null
Binary files differ
diff --git a/Docs/Images/Attic/mysql-09.gif b/Docs/Images/Attic/mysql-09.gif
deleted file mode 100644
index 75d08592795..00000000000
--- a/Docs/Images/Attic/mysql-09.gif
+++ /dev/null
Binary files differ
diff --git a/Docs/Images/Attic/mysql-10.gif b/Docs/Images/Attic/mysql-10.gif
deleted file mode 100644
index 8d0a8551e9e..00000000000
--- a/Docs/Images/Attic/mysql-10.gif
+++ /dev/null
Binary files differ
diff --git a/Docs/Images/Attic/mysql-11.gif b/Docs/Images/Attic/mysql-11.gif
deleted file mode 100644
index e5f3770a7bd..00000000000
--- a/Docs/Images/Attic/mysql-11.gif
+++ /dev/null
Binary files differ
diff --git a/Docs/Images/Attic/mysql-12.gif b/Docs/Images/Attic/mysql-12.gif
deleted file mode 100644
index b045aaf3549..00000000000
--- a/Docs/Images/Attic/mysql-12.gif
+++ /dev/null
Binary files differ
diff --git a/Docs/Images/Attic/mysql-13.gif b/Docs/Images/Attic/mysql-13.gif
deleted file mode 100644
index 0d5aaf88f6f..00000000000
--- a/Docs/Images/Attic/mysql-13.gif
+++ /dev/null
Binary files differ
diff --git a/Docs/Images/Attic/mysql-14.gif b/Docs/Images/Attic/mysql-14.gif
deleted file mode 100644
index 9bce287b4b3..00000000000
--- a/Docs/Images/Attic/mysql-14.gif
+++ /dev/null
Binary files differ
diff --git a/Docs/Images/Attic/mysql-15.gif b/Docs/Images/Attic/mysql-15.gif
deleted file mode 100644
index d70ffec83dd..00000000000
--- a/Docs/Images/Attic/mysql-15.gif
+++ /dev/null
Binary files differ
diff --git a/Docs/Images/Attic/mysql-16.gif b/Docs/Images/Attic/mysql-16.gif
deleted file mode 100644
index 9b30833dc1d..00000000000
--- a/Docs/Images/Attic/mysql-16.gif
+++ /dev/null
Binary files differ
diff --git a/Docs/Images/Attic/mysql-17.gif b/Docs/Images/Attic/mysql-17.gif
deleted file mode 100644
index 5b228496b66..00000000000
--- a/Docs/Images/Attic/mysql-17.gif
+++ /dev/null
Binary files differ
diff --git a/Docs/Images/Attic/mysql-18.gif b/Docs/Images/Attic/mysql-18.gif
deleted file mode 100644
index 71211350aa2..00000000000
--- a/Docs/Images/Attic/mysql-18.gif
+++ /dev/null
Binary files differ
diff --git a/Docs/Images/Attic/mysql-19.gif b/Docs/Images/Attic/mysql-19.gif
deleted file mode 100644
index 38e6691d9c6..00000000000
--- a/Docs/Images/Attic/mysql-19.gif
+++ /dev/null
Binary files differ
diff --git a/Docs/Images/Attic/mysql-compatible.jpg b/Docs/Images/Attic/mysql-compatible.jpg
deleted file mode 100644
index cce9cf84b91..00000000000
--- a/Docs/Images/Attic/mysql-compatible.jpg
+++ /dev/null
Binary files differ
diff --git a/Docs/Images/Attic/mysql5.gif b/Docs/Images/Attic/mysql5.gif
deleted file mode 100644
index f78b8a17b93..00000000000
--- a/Docs/Images/Attic/mysql5.gif
+++ /dev/null
Binary files differ
diff --git a/Docs/Images/Attic/mysql_anim-01.gif b/Docs/Images/Attic/mysql_anim-01.gif
deleted file mode 100644
index f537d60da41..00000000000
--- a/Docs/Images/Attic/mysql_anim-01.gif
+++ /dev/null
Binary files differ
diff --git a/Docs/Images/Attic/mysql_anim-02.gif b/Docs/Images/Attic/mysql_anim-02.gif
deleted file mode 100644
index cfd3e1cfc3e..00000000000
--- a/Docs/Images/Attic/mysql_anim-02.gif
+++ /dev/null
Binary files differ
diff --git a/Docs/Images/Attic/mysql_anim-03.gif b/Docs/Images/Attic/mysql_anim-03.gif
deleted file mode 100644
index 6ac6b3ebcc1..00000000000
--- a/Docs/Images/Attic/mysql_anim-03.gif
+++ /dev/null
Binary files differ
diff --git a/Docs/Images/Attic/mysql_anim-04.gif b/Docs/Images/Attic/mysql_anim-04.gif
deleted file mode 100644
index d3150860ecf..00000000000
--- a/Docs/Images/Attic/mysql_anim-04.gif
+++ /dev/null
Binary files differ
diff --git a/Docs/Images/Attic/mysql_anim-05.gif b/Docs/Images/Attic/mysql_anim-05.gif
deleted file mode 100644
index 46f288ef71d..00000000000
--- a/Docs/Images/Attic/mysql_anim-05.gif
+++ /dev/null
Binary files differ
diff --git a/Docs/Images/Attic/mysql_anim-06.gif b/Docs/Images/Attic/mysql_anim-06.gif
deleted file mode 100644
index 3dc283dbfb6..00000000000
--- a/Docs/Images/Attic/mysql_anim-06.gif
+++ /dev/null
Binary files differ
diff --git a/Docs/Images/Attic/powered-by-MySQL-transparent.gif b/Docs/Images/Attic/powered-by-MySQL-transparent.gif
deleted file mode 100644
index be309d0de1c..00000000000
--- a/Docs/Images/Attic/powered-by-MySQL-transparent.gif
+++ /dev/null
Binary files differ
diff --git a/Docs/Images/Makefile.am b/Docs/Images/Makefile.am
deleted file mode 100644
index 8ba1ff7382c..00000000000
--- a/Docs/Images/Makefile.am
+++ /dev/null
@@ -1,31 +0,0 @@
-# Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Library General Public
-# License as published by the Free Software Foundation; either
-# version 2 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Library General Public License for more details.
-#
-# You should have received a copy of the GNU Library General Public
-# License along with this library; if not, write to the Free
-# Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
-# MA 02111-1307, USA
-
-## Process this file with automake to create Makefile.in
-
-# This is a dummy file to satisfy the hierarchy of Makefiles.
-# When a release is built, the true Makefile will be copied
-# together with the "real" files in this directory.
-
-EXTRA_DIST =
-
-# Nothing to create in this dummy directory.
-all:
- :
-
-# Don't update the files from bitkeeper
-%::SCCS/s.%
diff --git a/Docs/Images/empty.png b/Docs/Images/empty.png
deleted file mode 100644
index 71ac39b37f0..00000000000
--- a/Docs/Images/empty.png
+++ /dev/null
Binary files differ
diff --git a/Docs/Images/flag-background.pnm b/Docs/Images/flag-background.pnm
deleted file mode 100755
index 2bd7b604298..00000000000
--- a/Docs/Images/flag-background.pnm
+++ /dev/null
Binary files differ
diff --git a/Docs/Images/mysql-logo.gif b/Docs/Images/mysql-logo.gif
deleted file mode 100644
index f8110ddcb93..00000000000
--- a/Docs/Images/mysql-logo.gif
+++ /dev/null
Binary files differ
diff --git a/Docs/Makefile.am b/Docs/Makefile.am
index 681046543bd..92f3c56a504 100644
--- a/Docs/Makefile.am
+++ b/Docs/Makefile.am
@@ -9,184 +9,17 @@
# If you know how to fix any of this more elegantly please mail
# docs@mysql.com
-TEXI2HTML_FLAGS = -iso -number -acc
-DVIPS = dvips
-MAKEINFO = @MAKEINFO@
-TEXINFO_TEX = Support/texinfo.tex
+noinst_SCRIPTS = Support/generate-text-files.pl
-noinst_SCRIPTS = Support/texi2html Support/generate-text-files.pl \
- Support/generate-mirror-listing.pl
-info_TEXINFOS = manual.texi
+EXTRA_DIST = $(noinst_SCRIPTS) mysql.info INSTALL-BINARY
-targets = manual.txt mysql.info manual.html
-
-BUILT_SOURCES = $(targets) manual_toc.html include.texi
-EXTRA_DIST = $(noinst_SCRIPTS) $(BUILT_SOURCES) mysqld_error.txt \
- INSTALL-BINARY reservedwords.texi internals.texi
-
-SUBDIRS = Images
-
-all: $(targets) txt_files
+all: txt_files
txt_files: ../INSTALL-SOURCE ../COPYING ../INSTALL-WIN-SOURCE ../EXCEPTIONS-CLIENT \
INSTALL-BINARY ../support-files/MacOSX/ReadMe.txt
-CLEAN_FILES: $(BUILD_SOURCES)
- touch $(BUILD_SOURCES)
-
-# The PostScript and PDF version are so big that they are not included in the
-# standard distribution. It is available for download from the home page.
-paper: manual_a4.ps manual_letter.ps $(PDFMANUAL)
-
-#########################################################################
-
-# The Makefile contains the previous version so we can not use that
-include.texi: ../configure.in
- echo "@c This file is autogenerated by the Makefile" > $@
- echo -n "@set mysqlversion " >> $@
- grep "AM_INIT_AUTOMAKE(mysql, " ../configure.in | \
- sed -e 's;AM_INIT_AUTOMAKE(mysql, ;;' -e 's;);;' >> $@
- echo -n "@set defaultport " >> $@
- grep "MYSQL_TCP_PORT_DEFAULT=" ../configure.in | \
- sed -e 's;MYSQL_TCP_PORT_DEFAULT=;;' >> $@
-
-
-#
-# English Manual
-#
-
-# GNU Info
-mysql.info: manual.texi include.texi
- cd $(srcdir) && $(MAKEINFO) --no-split -I $(srcdir) $<
-
-# Plain Text
-manual.txt: manual.texi include.texi
- cd $(srcdir) && \
- $(MAKEINFO) -I $(srcdir) --no-headers --no-split --output $@ $<
-
-# HTML, all in one file
-manual.html: manual.texi include.texi $(srcdir)/Support/texi2html
- cd $(srcdir) && @PERL@ $(srcdir)/Support/texi2html $(TEXI2HTML_FLAGS) $<
-manual_toc.html: manual.html
-
-# PDF, Portable Document Format
-manual.pdf: manual.texi
- sed -e 's|@image{[^}]*} *||g' <$< >manual-tmp.texi
- pdftex --interaction=nonstopmode manual-tmp.texi
- texindex manual-tmp.??
- pdftex --interaction=nonstopmode manual-tmp.texi
- texindex manual-tmp.??
- pdftex --interaction=nonstopmode manual-tmp.texi
- mv manual-tmp.pdf $@
- rm -f manual-tmp.*
- touch $@
-
-# XML, DocBook 4.0
-mysql.xml: manual.texi include.texi
- $(MAKEINFO) --force --no-ifinfo --docbook $<
- mv $@ mysql-tmp.xml
- Support/docbook-fixup.pl <mysql-tmp.xml >$@
- rm -f mysql-tmp.xml
-
-# Postscript, A4 Paper
-manual_a4.ps: manual.texi include.texi
- TEXINPUTS=$(srcdir):$$TEXINPUTS \
- MAKEINFO='$(MAKEINFO) -I $(srcdir)' \
- $(TEXI2DVI) --batch --texinfo --quiet '@afourpaper' $<
- $(DVIPS) -t a4 manual.dvi -o $@
- touch $@
-
-# Postscript, US Letter Paper
-manual_letter.ps: manual.texi include.texi
- TEXINPUTS=$(srcdir):$$TEXINPUTS \
- MAKEINFO='$(MAKEINFO) -I $(srcdir)' \
- $(TEXI2DVI) --batch $<
- $(DVIPS) -t letter manual.dvi -o $@
- touch $@
-
-
-#
-# German Manual
-#
-
-# GNU Info
-mysql.de.info: manual.de.texi include.texi
- cd $(srcdir) && $(MAKEINFO) --no-split -I $(srcdir) $<
-
-# Plain Text
-manual.de.txt: manual.de.texi include.texi
- cd $(srcdir) && \
- $(MAKEINFO) -I $(srcdir) --no-headers --no-split --output $@ $<
-
-# HTML, all in one file
-manual.de.html: manual.de.texi include.texi $(srcdir)/Support/texi2html
- cd $(srcdir) && @PERL@ $(srcdir)/Support/texi2html $(TEXI2HTML_FLAGS) $<
-manual_toc.de.html: manual.html
-
-# PDF, Portable Document Format
-manual.de.pdf: manual.de.texi
- sed -e 's|@image{[^}]*} *||g' <$< >manual-tmp.texi
- pdftex --interaction=nonstopmode manual-tmp.texi
- texindex manual-tmp.??
- pdftex --interaction=nonstopmode manual-tmp.texi
- texindex manual-tmp.??
- pdftex --interaction=nonstopmode manual-tmp.texi
- mv manual-tmp.pdf $@
- rm -f manual-tmp.*
- touch $@
-
-# XML, DocBook 4.0
-mysql.de.xml: manual.de.texi include.texi
- $(MAKEINFO) --force --no-ifinfo --docbook $<
- mv $@ mysql-tmp.xml
- Support/docbook-fixup.pl <mysql-tmp.xml >$@
- rm -f mysql-tmp.xml
-
-# Postscript, A4 Paper
-manual_a4.de.ps: manual.de.texi include.texi
- TEXINPUTS=$(srcdir):$$TEXINPUTS \
- MAKEINFO='$(MAKEINFO) -I $(srcdir)' \
- $(TEXI2DVI) --batch --texinfo --quiet '@afourpaper' $<
- $(DVIPS) -t a4 manual.de.dvi -o $@
- touch $@
-
-# Postscript, US Letter Paper
-manual_letter.de.ps: manual.de.texi include.texi
- TEXINPUTS=$(srcdir):$$TEXINPUTS \
- MAKEINFO='$(MAKEINFO) -I $(srcdir)' \
- $(TEXI2DVI) --batch $<
- $(DVIPS) -t letter manual.de.dvi -o $@
- touch $@
-
-#
-# Miscellaneous
-#
-
-# Target to produce NuSphere Manual
-nusphere.pdf: manual.texi
- sed -e 's/@example/@smallexample/g' \
- -e 's/@end example/@end smallexample/g' \
- -e 's/@c ifnusphere //g' \
- -e 's|@image{[^}]*} *||g' \
- <$< >manual-tmp.texi
- pdftex --interaction=nonstopmode manual-tmp.texi
- texindex manual-tmp.??
- pdftex --interaction=nonstopmode manual-tmp.texi
- texindex manual-tmp.??
- pdftex --interaction=nonstopmode manual-tmp.texi
- mv manual-tmp.pdf $@
- rm -f manual-tmp.*
- touch $@
-
-# Include images for the manual in the distribution
-dist-hook:
- BD=`cd $(top_srcdir); pwd`; \
- echo "PostScript and PDF versions suitable for printing" \
- > $(distdir)/manual.ps
- echo "are available from http://dev.mysql.com/doc/" \
- >> $(distdir)/manual.ps
- echo "or any mirror site" \
- >> $(distdir)/manual.ps
+CLEAN_FILES: $(txt_files)
+ touch $(txt_files)
GT = $(srcdir)/Support/generate-text-files.pl
@@ -202,9 +35,6 @@ GT = $(srcdir)/Support/generate-text-files.pl
INSTALL-BINARY: mysql.info $(GT)
perl -w $(GT) mysql.info "Installing binary" "Installing source" > $@
-../COPYING: mysql.info $(GT)
- perl -w $(GT) mysql.info "GPL license" "MySQL FLOSS License Exception" > $@
-
../EXCEPTIONS-CLIENT: mysql.info $(GT)
perl -w $(GT) mysql.info "MySQL FLOSS License Exception" "Function Index" > $@
diff --git a/Docs/Support/generate-mirror-listing.pl b/Docs/Support/generate-mirror-listing.pl
deleted file mode 100755
index 1c6e579b330..00000000000
--- a/Docs/Support/generate-mirror-listing.pl
+++ /dev/null
@@ -1,27 +0,0 @@
-#!/my/gnu/bin/perl -w -*- perl -*-
-
-# Generate a mirror listing
-
-line: while (<>) { last line if /START_OF_MIRROR_LISTING/;};
-
-print "MySQL mirror listing\n";
-
-line: while (<>)
-{
- last line if /END_OF_MIRROR_LISTING/;
- if (/^\@strong\{([A-Za-z ]+):\}$/)
- {
- print "\n*** $1\n";
- }
- elsif (m|^\@image\{Img/[a-z-]+\} ([A-Za-z]+) \[(.*)\]|)
- {
- print "\n$1 [$2]\n";
- }
- # A hacky URL regexp
- # (m!^\@uref\{((http\|ftp)://[^,]*), (FTP\|WWW)\}!)
- elsif (m!^\@uref\{((http|ftp)://[^,]*), (FTP|WWW)\}!)
- {
- $addr = $1;
- print " $addr\n";
- }
-}
diff --git a/Docs/Support/texi2html b/Docs/Support/texi2html
deleted file mode 100755
index f13c006c7dc..00000000000
--- a/Docs/Support/texi2html
+++ /dev/null
@@ -1,2259 +0,0 @@
-#!/usr/bin/perl
-# Add path to perl on the previous line and make this executable
-# if you want to use this as a normal script.
-'di ';
-'ig 00 ';
-#+##############################################################################
-# #
-# File: texi2html #
-# #
-# Description: Program to transform most Texinfo documents to HTML #
-# #
-#-##############################################################################
-
-# @(#)texi2html 1.52 971230 Written (mainly) by Lionel Cons, Lionel.Cons@cern.ch
-# Enhanced by David Axmark
-
-# The man page for this program is included at the end of this file and can be
-# viewed using the command 'nroff -man texi2html'.
-# Please read the copyright at the end of the man page.
-
-#+++############################################################################
-# #
-# Constants #
-# #
-#---############################################################################
-
-$DEBUG_TOC = 1;
-$DEBUG_INDEX = 2;
-$DEBUG_BIB = 4;
-$DEBUG_GLOSS = 8;
-$DEBUG_DEF = 16;
-$DEBUG_HTML = 32;
-$DEBUG_USER = 64;
-
-$BIBRE = '\[[\w\/]+\]'; # RE for a bibliography reference
-$FILERE = '[\/\w.+-]+'; # RE for a file name
-$VARRE = '[^\s\{\}]+'; # RE for a variable name
-$NODERE = '[^@{}:\'`",]+'; # RE for a node name
-$NODESRE = '[^@{}:\'`"]+'; # RE for a list of node names
-$XREFRE = '[^@{}]+'; # RE for a xref (should use NODERE)
-
-$ERROR = "***"; # prefix for errors and warnings
-$THISPROG = "texi2html 1.52 (with additions by MySQL AB)"; # program name and version
-$TODAY = &pretty_date; # like "20 September 1993"
-$SPLITTAG = "<!-- SPLIT HERE -->\n"; # tag to know where to split
-$PROTECTTAG = "_ThisIsProtected_"; # tag to recognize protected sections
-$html2_doctype = '<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0 Strict Level 2//EN">';
-
-#
-# language dependent constants
-#
-#$LDC_SEE = 'see';
-#$LDC_SECTION = 'section';
-#$LDC_IN = 'in';
-#$LDC_TOC = 'Table of Contents';
-#$LDC_GOTO = 'Go to the';
-#$LDC_FOOT = 'Footnotes';
-# TODO: @def* shortcuts
-
-#$user_sub{"email"} = "fix_email";
-
-#
-# pre-defined indices
-#
-%predefined_index = (
- 'cp', 'c',
- 'fn', 'f',
- 'vr', 'v',
- 'ky', 'k',
- 'pg', 'p',
- 'tp', 't',
- );
-
-#
-# valid indices
-#
-%valid_index = (
- 'c', 1,
- 'f', 1,
- 'v', 1,
- 'k', 1,
- 'p', 1,
- 't', 1,
- );
-
-#
-# texinfo section names to level
-#
-%sec2level = (
- 'top', 0,
- 'chapter', 1,
- 'unnumbered', 1,
- 'majorheading', 1,
- 'chapheading', 1,
- 'appendix', 1,
- 'section', 2,
- 'unnumberedsec', 2,
- 'heading', 2,
- 'appendixsec', 2,
- 'appendixsection', 2,
- 'subsection', 3,
- 'unnumberedsubsec', 3,
- 'subheading', 3,
- 'appendixsubsec', 3,
- 'subsubsection', 4,
- 'unnumberedsubsubsec', 4,
- 'subsubheading', 4,
- 'appendixsubsubsec', 4,
- );
-
-#
-# accent map, TeX command to ISO name
-#
-%accent_map = (
- '"', 'uml',
- '\'', 'acute',
- ',{', 'cedil',
- '~', 'tilde',
- '^', 'circ',
- '`', 'grave',
- 'ringaccent{', 'ring',
- );
-
-#
-# texinfo "simple things" (@foo) to HTML ones
-#
-%simple_map = (
- # cf. makeinfo.c
- "*", "<br />", # HTML+
- " ", " ",
- "\n", "\n",
- "|", "",
- # spacing commands
- ":", "",
- "!", "!",
- "?", "?",
- ".", ".",
- # @- means "allow word break", not &mdash;
- "-", "",
- );
-
-#
-# texinfo "things" (@foo{}) to HTML ones
-#
-%things_map = (
- 'TeX', 'TeX',
- 'br', '<p>', # paragraph break
- 'bullet', '*',
- 'copyright', '(C)',
- 'registeredsymbol', '(R)',
- 'dots', '...',
- 'equiv', '==',
- 'error', 'error-->',
- 'expansion', '==>',
- 'minus', '-',
- 'point', '-!-',
- 'print', '-|',
- 'result', '=>',
- 'today', $TODAY,
- );
-
-#
-# texinfo styles (@foo{bar}) to HTML ones
-#
-%style_map = (
- 'asis', '',
- 'b', 'B',
- 'cite', 'cite',
- 'code', 'code',
- 'command', 'code',
- 'ctrl', '&do_ctrl', # special case
- 'dfn', 'strong', # DFN tag is illegal in the standard
- 'dmn', '', # useless
- 'email', '&fix_email', # special
- 'emph', 'em',
- 'file', '"tt', # will put quotes, cf. &apply_style
- 'i', 'i',
- 'kbd', 'kbd',
- 'key', 'kbd',
- 'r', '', # unsupported
- 'samp', '"samp', # will put quotes, cf. &apply_style
- 'sc', '&do_sc', # special case
- 'strong', 'strong',
- 't', 'tt',
- 'titlefont', '', # useless
- 'image', '&fix_image', # Image
- 'url', '&fix_url', # URL
- 'uref', '&fix_uref', # URL Reference
- 'var', 'var',
- 'w', '', # unsupported
- );
-
-#
-# texinfo format (@foo/@end foo) to HTML ones
-#
-%format_map = (
- 'display', 'PRE',
- 'example', 'PRE',
- 'format', 'PRE',
- 'lisp', 'PRE',
- 'quotation', 'BLOCKQUOTE',
- 'smallexample', 'PRE',
- 'smalllisp', 'PRE',
- # lists
- 'itemize', 'UL',
- 'enumerate', 'OL',
- # poorly supported
- 'flushleft', 'PRE',
- 'flushright', 'PRE',
- );
-
-#
-# texinfo definition shortcuts to real ones
-#
-%def_map = (
- # basic commands
- 'deffn', 0,
- 'defvr', 0,
- 'deftypefn', 0,
- 'deftypevr', 0,
- 'defcv', 0,
- 'defop', 0,
- 'deftp', 0,
- # basic x commands
- 'deffnx', 0,
- 'defvrx', 0,
- 'deftypefnx', 0,
- 'deftypevrx', 0,
- 'defcvx', 0,
- 'defopx', 0,
- 'deftpx', 0,
- # shortcuts
- 'defun', 'deffn Function',
- 'defmac', 'deffn Macro',
- 'defspec', 'deffn {Special Form}',
- 'defvar', 'defvr Variable',
- 'defopt', 'defvr {User Option}',
- 'deftypefun', 'deftypefn Function',
- 'deftypevar', 'deftypevr Variable',
- 'defivar', 'defcv {Instance Variable}',
- 'defmethod', 'defop Method',
- # x shortcuts
- 'defunx', 'deffnx Function',
- 'defmacx', 'deffnx Macro',
- 'defspecx', 'deffnx {Special Form}',
- 'defvarx', 'defvrx Variable',
- 'defoptx', 'defvrx {User Option}',
- 'deftypefunx', 'deftypefnx Function',
- 'deftypevarx', 'deftypevrx Variable',
- 'defivarx', 'defcvx {Instance Variable}',
- 'defmethodx', 'defopx Method',
- );
-
-#
-# things to skip
-#
-%to_skip = (
- # comments
- 'c', 1,
- 'comment', 1,
- # useless
- 'contents', 1,
- 'shortcontents', 1,
- 'summarycontents', 1,
- 'footnotestyle', 1,
- 'end ifclear', 1,
- 'end ifset', 1,
- 'titlepage', 1,
- 'end titlepage', 1,
- # unsupported commands (formatting)
- 'afourpaper', 1,
- 'cropmarks', 1,
- 'finalout', 1,
- 'headings', 1,
- 'need', 1,
- 'page', 1,
- 'setchapternewpage', 1,
- 'everyheading', 1,
- 'everyfooting', 1,
- 'evenheading', 1,
- 'evenfooting', 1,
- 'oddheading', 1,
- 'oddfooting', 1,
- 'smallbook', 1,
- 'vskip', 1,
- 'filbreak', 1,
- # unsupported formats
- 'cartouche', 1,
- 'end cartouche', 1,
- 'group', 1,
- 'end group', 1,
- );
-
-#+++############################################################################
-# #
-# Argument parsing, initialisation #
-# #
-#---############################################################################
-
-%value = (); # hold texinfo variables
-
-$use_bibliography = 1;
-$use_acc = 0;
-$debug = 0;
-$doctype = '';
-$check = 0;
-$expandinfo = 0;
-$use_glossary = 0;
-$invisible_mark = '';
-$use_iso = 0;
-@include_dirs = ();
-$show_menu = 0;
-$number_sections = 0;
-$split_node = 0;
-$split_chapter = 0;
-$monolithic = 0;
-$verbose = 0;
-$opt_use_numbers = 0;
-$opt_empty_headers = 0;
-$opt_special_links = "";
-$usage = <<EOT;
-This is $THISPROG
-To convert a Texinfo file to HMTL: $0 [options] file
-where options can be:
--acc : convert @"-like accents to &entities;
--expandinfo : use \@ifinfo sections, not \@iftex
--glossary : handle a glossary
--invisible name: use 'name' as an invisible anchor
--I dir : search also for files in 'dir'
--Dvar=value : define a variable, as with \@set
--menu : handle menus
--monolithic : output only one file including ToC
--number : number sections
--split_chapter : split on main sections
--split_node : split on nodes
--ref_num : use numeric names when spliting
--empty_headers : no headers and implicit links (for inclusion into other documents)
--usage : print usage instructions
--verbose : verbose output
-To check converted files: $0 -check [-verbose] files
-EOT
- #
-while ($#ARGV >= 0 && $ARGV[0] =~ /^-/)
-{
- $_ = shift(@ARGV);
- if (/^-acc$/) { $use_acc = 1; next; }
- if (/^-d(ebug)?(\d+)?$/) { $debug = $2 || shift(@ARGV); next; }
- if (/^-doctype$/) { $doctype = shift(@ARGV); next; }
- if (/^-c(heck)?$/) { $check = 1; next; }
- if (/^-e(xpandinfo)?$/) { $expandinfo = 1; next; }
- if (/^-g(lossary)?$/) { $use_glossary = 1; next; }
- if (/^-i(nvisible)?$/) { $invisible_mark = shift(@ARGV); next; }
- if (/^-iso$/) { $use_iso = 1; next; }
- if (/^-I(.+)?$/) { push(@include_dirs, $2 || shift(@ARGV)); next; }
- if (/^-D([a-zA-Z0-9]+)=?(.+)?$/)
- { $value{$1} = $2 ? $2 : 1; next; }
- if (/^-m(enu)?$/) { $show_menu = 1; next; }
- if (/^-mono(lithic)?$/) { $monolithic = 1; next; }
- if (/^-n(umber)?$/) { $number_sections = 1; next; }
- if (/^-ref_num$/) { $opt_use_numbers = 1; next; }
- if (/^-empty_headers$/) { $opt_empty_headers = 1; next; }
- if (/^-special_links$/) { $opt_special_links = $2 || shift(@ARGV); next; }
- if (/^-s(plit)?_?(n(ode)?|c(hapter)?)?$/) {
- if ($2 =~ /^n/) {
- $split_node = 1;
- } else {
- $split_chapter = 1;
- }
- next;
- }
- if (/^-v(erbose)?$/) { $verbose = 1; next; }
- die $usage;
-}
-if ($check) {
- die $usage unless @ARGV > 0;
- &check;
- exit;
-}
-
-die "Can't use -special_links with -ref_num.\n"
- if $opt_special_links && $opt_use_numbers;
-die "Must have -split_node with -special_links.\n"
- if $opt_special_links && !$split_node;
-
-if (($split_node || $split_chapter) && $monolithic) {
- warn "Can't use -monolithic with -split, -monolithic ignored.\n";
- $monolithic = 0;
-}
-if ($expandinfo) {
- $to_skip{'ifinfo'}++;
- $to_skip{'end ifinfo'}++;
-} else {
- $to_skip{'iftex'}++;
- $to_skip{'end iftex'}++;
-}
-$invisible_mark = '<IMG SRC="invisible.xbm">' if $invisible_mark eq 'xbm';
-die $usage unless @ARGV == 1;
-$docu = shift(@ARGV);
-if ($docu =~ /.*\//) {
- chop($docu_dir = $&);
- $docu_name = $';
-} else {
- $docu_dir = '.';
- $docu_name = $docu;
-}
-unshift(@include_dirs, $docu_dir);
-$docu_name =~ s/\.te?x(i|info)?$//; # basename of the document
-
-$docu_doc = "$docu_name.html"; # document's contents
-$link_doc = $docu_doc;
-if ($monolithic) {
- $docu_toc = $docu_foot = $docu_doc;
-} else {
- $docu_toc = "${docu_name}_toc.html"; # document's table of contents
- $docu_foot = "${docu_name}_foot.html"; # document's footnotes
-}
-
-#
-# variables
-#
-$value{'html'} = 1; # predefine html (the output format)
-$value{'texi2html'} = '1.52'; # predefine texi2html (the translator)
-# _foo: internal to track @foo
-foreach ('_author', '_title', '_subtitle',
- '_settitle', '_setfilename') {
- $value{$_} = ''; # prevent -w warnings
-}
-%node2sec = (); # node to section name
-%node2href = (); # node to HREF
-%bib2href = (); # bibliography reference to HREF
-%gloss2href = (); # glossary term to HREF
-@sections = (); # list of sections
-%tag2pro = (); # protected sections
-
-#
-# initial indexes
-#
-$bib_num = 0;
-$foot_num = 0;
-$gloss_num = 0;
-$idx_num = 0;
-$sec_num = 0;
-$doc_num = 0;
-$current_chapter_link = "";
-@maybe_wrong_links = ();
-$html_num = 0;
-
-#
-# can I use ISO8879 characters? (HTML+)
-#
-if ($use_iso) {
- $things_map{'bullet'} = "&bull;";
- $things_map{'copyright'} = "&copy;";
- $things_map{'registeredsymbol'} = "&reg;";
- $things_map{'dots'} = "&hellip;";
- $things_map{'equiv'} = "&equiv;";
- $things_map{'expansion'} = "&rarr;";
- $things_map{'point'} = "&lowast;";
- $things_map{'result'} = "&rArr;";
- $things_map{'ss'} = "&szlig;";
- $things_map{'o'} = "&oslash;";
- $things_map{'O'} = "&Oslash;";
-}
-
-#
-# read texi2html extensions (if any)
-#
-$extensions = 'texi2html.ext'; # extensions in working directory
-if (-f $extensions) {
- print "# reading extensions from $extensions\n" if $verbose;
- require($extensions);
-}
-($progdir = $0) =~ s/[^\/]+$//;
-if ($progdir && ($progdir ne './'))
-{
- $extensions = "${progdir}texi2html.ext"; # extensions in texi2html directory
- if (-f $extensions) {
- print "# reading extensions from $extensions\n" if $verbose;
- require($extensions);
- }
-}
-
- print "# reading from $docu\n" if $verbose;
-
-#+++############################################################################
-# #
-# Pass 1: read source, handle command, variable, simple substitution #
-# #
-#---############################################################################
-
-@lines = (); # whole document
-@toc_lines = (); # table of contents
-$toplevel = 0; # top level seen in hierarchy
-$curlevel = 0; # current level in TOC
-$node = ''; # current node name
-$in_table = 0; # am I inside a table
-$table_type = ''; # type of table ('', 'f', 'v')
-@tables = (); # nested table support
-$in_bibliography = 0; # am I inside a bibliography
-$in_glossary = 0; # am I inside a glossary
-$in_top = 0; # am I inside the top node
-$in_pre = 0; # am I inside a preformatted section
-$in_list = 0; # am I inside a list
-$in_html = 0; # am I inside an HTML section
-$first_line = 1; # is it the first line
-$dont_html = 0; # don't protect HTML on this line
-$split_num = 0; # split index
-$deferred_ref = ''; # deferred reference for indexes
-@html_stack = (); # HTML elements stack
-$html_element = ''; # current HTML element
-&html_reset;
-
-# build code for simple substitutions
-# the maps used (%simple_map and %things_map) MUST be aware of this
-# watch out for regexps, / and escaped characters!
-$subst_code = '';
-foreach (keys(%simple_map)) {
- $re = quotemeta $_; # protect regexp chars
- $sub = quotemeta $simple_map{$_};
- $subst_code .= "s/\\\@$re/$sub/g;\n";
-}
-foreach (keys(%things_map)) {
- $re = quotemeta $_; # protect regexp chars
- $sub = quotemeta $things_map{$_};
- $subst_code .= "s/\\\@$re\\{\\}/$sub/g;\n";
-}
-if ($use_acc) {
- # accentuated characters
- foreach (keys(%accent_map)) {
- my $brace = /{$/ ? '}' : '';
- if ($_ eq "`") {
- $subst_code .= "s/$;3";
- } elsif ($_ eq "'") {
- $subst_code .= "s/$;4";
- } else {
- $subst_code .= "s/\\\@\\Q$_\\E";
- }
- $subst_code .= "(\\w)$brace/&\${1}$accent_map{$_};/gi;\n";
- }
-}
-eval("sub simple_substitutions { $subst_code }");
-
-&init_input;
-READ_LINE: while ($_ = &next_line)
-{
- #
- # remove \input on the first lines only
- #
- if ($first_line) {
- next if /^\\input/;
- $first_line = 0;
- }
- #
- # parse texinfo tags
- #
- $tag = '';
- $end_tag = '';
- if (/^\s*\@end\s+(\w+)\b/) {
- $end_tag = $1;
- } elsif (/^\s*\@(\w+)\b/) {
- $tag = $1;
- }
- #
- # handle @ifhtml / @end ifhtml
- #
- if ($in_html) {
- if ($end_tag eq 'ifhtml') {
- $in_html = 0;
- } else {
- $tag2pro{$in_html} .= $_;
- }
- next;
- } elsif ($tag eq 'ifhtml') {
- $in_html = $PROTECTTAG . ++$html_num;
- push(@lines, $in_html);
- next;
- }
- #
- # try to skip the line
- #
- if ($end_tag) {
- next if $to_skip{"end $end_tag"};
- } elsif ($tag) {
- next if $to_skip{$tag};
- last if $tag eq 'bye';
- }
- if ($in_top) {
- # parsing the top node
- if ($tag eq 'node' || $tag eq 'include' || $sec2level{$tag}) {
- # no more in top
- $in_top = 0;
- } else {
- # skip it
- next;
- }
- }
- #
- # try to remove inlined comments
- # syntax from tex-mode.el comment-start-skip
- #
- s/((^|[^\s*\@])(\@\@)*)\@c(omment)? .*/$1/;
- # non-@ substitutions cf. texinfmt.el
- # Since these changes break code examples in the source they were removed. David 990729
- #s/``/\"/g;
- #s/''/\"/g;
- s/([\w ])---([\w ])/$1--$2/g;
- #
- # analyze the tag
- #
- if ($tag) {
- # skip lines
- &skip_until($tag), next if $tag eq 'ignore';
- if ($expandinfo) {
- &skip_until($tag), next if $tag eq 'iftex';
- } else {
- &skip_until($tag), next if $tag eq 'ifinfo';
- }
- &skip_until($tag), next if $tag eq 'tex';
- # handle special tables
- if ($tag eq 'table') {
- $table_type = '';
- } elsif ($tag eq 'ftable') {
- $tag = 'table';
- $table_type = 'f';
- } elsif ($tag eq 'vtable') {
- $tag = 'table';
- $table_type = 'v';
- }
- # special cases
- if ($tag eq 'top' || ($tag eq 'node' && /^\s*\@node\s+top\s*,/i)) {
- $in_top = 1;
- @lines = (); # ignore all lines before top (title page garbage)
- next;
- } elsif ($tag eq 'node') {
- $in_top = 0;
- warn "$ERROR Bad node line: $_" unless $_ =~ /^\s*\@node\s$NODESRE$/o;
- $_ = &protect_html($_); # if node contains '&' for instance
- s/^\s*\@node\s+//;
- ($node) = split(/,/);
- &normalise_node($node);
- if ($split_node) {
- ($doc_node_name[$doc_num + 1] = $node) =~ s|[ /]|_|g;
- $doc_node_name_links[$doc_num + 1] = $current_chapter_link;
- &next_doc;
- push(@lines, $SPLITTAG) if $split_num++;
- push(@sections, $node);
- }
- next;
- } elsif ($tag eq 'include') {
- if (/^\s*\@include\s+($FILERE)\s*$/o) {
- $file = $1;
- unless (-e $file) {
- foreach $dir (@include_dirs) {
- $file = "$dir/$1";
- last if -e $file;
- }
- }
- if (-e $file) {
- &open($file);
- print "# including $file\n" if $verbose;
- } else {
- warn "$ERROR Can't find $file, skipping";
- }
- } else {
- warn "$ERROR Bad include line: $_";
- }
- next;
- } elsif ($tag eq 'ifclear') {
- if (/^\s*\@ifclear\s+($VARRE)\s*$/o) {
- next unless defined($value{$1});
- &skip_until($tag);
- } else {
- warn "$ERROR Bad ifclear line: $_";
- }
- next;
- } elsif ($tag eq 'ifset') {
- if (/^\s*\@ifset\s+($VARRE)\s*$/o) {
- next if defined($value{$1});
- &skip_until($tag);
- } else {
- warn "$ERROR Bad ifset line: $_";
- }
- next;
- } elsif ($tag eq 'menu') {
- unless ($show_menu) {
- &skip_until($tag);
- next;
- }
- &html_push_if($tag);
- push(@lines, &html_debug("\n", __LINE__));
- } elsif ($format_map{$tag}) {
- $in_pre = 1 if $format_map{$tag} eq 'PRE';
- &html_push_if($format_map{$tag});
- push(@lines, &html_debug("\n", __LINE__));
- $in_list++ if $format_map{$tag} eq 'UL' || $format_map{$tag} eq 'OL' ;
- push(@lines, &debug("<$format_map{$tag}>\n", __LINE__));
- next;
- } elsif ($tag eq 'table') {
- if (/^\s*\@[fv]?table\s+\@(\w+)\s*$/) {
- $in_table = $1;
- unshift(@tables, join($;, $table_type, $in_table));
- push(@lines, &debug("<DL COMPACT>\n", __LINE__));
- &html_push_if('DL');
- push(@lines, &html_debug("\n", __LINE__));
- } else {
- warn "$ERROR Bad table line: $_";
- }
- next;
- } elsif ($tag eq 'multitable') {
- if (/^\s*\@multitable\s*\@columnfractions\s+([\.\d\s]+)\s*$/ ||
- /^\s*\@multitable\s*({[^{}]+})+\s*$/)
- {
- $in_multitable = 1;
- html_push('TABLE');
- my($col_list) = $1;
- $multitable_cols = ($col_list =~ /\@columnfractions/ ? s/[\d.]+\s+//g :
- s/{[^{}]+}//g);
- print "# Multitable with $multitable_cols columns\n"
- if $debug and $DEBUG_USER;
- push(@lines, &debug("<TABLE BORDER>\n", __LINE__));
- } else {
- warn "$ERROR Bad table line: $_";
- }
- next;
- } elsif ($tag eq 'synindex' || $tag eq 'syncodeindex') {
- if (/^\s*\@$tag\s+(\w)\w\s+(\w)\w\s*$/) {
- eval("*${1}index = *${2}index");
- } else {
- warn "$ERROR Bad syn*index line: $_";
- }
- next;
- } elsif ($tag eq 'sp') {
- push(@lines, &debug("<P>\n", __LINE__));
- next;
- } elsif ($tag eq 'setref') {
- &protect_html; # if setref contains '&' for instance
- if (/^\s*\@$tag\s*{($NODERE)}\s*$/) {
- $setref = $1;
- $setref =~ s/\s+/ /g; # normalize
- $setref =~ s/ $//;
- $node2sec{$setref} = $name;
- $node2href{$setref} = "$link_doc#$docid";
- push(@maybe_wrong_links, $setref);
- } else {
- warn "$ERROR Bad setref line: $_";
- }
- next;
- } elsif ($tag eq 'defindex' || $tag eq 'defcodeindex') {
- if (/^\s*\@$tag\s+(\w\w)\s*$/) {
- $valid_index{$1} = 1;
- } else {
- warn "$ERROR Bad defindex line: $_";
- }
- next;
- } elsif (defined($def_map{$tag})) {
- if ($def_map{$tag}) {
- s/^\s*\@$tag\s+//;
- $tag = $def_map{$tag};
- $_ = "\@$tag $_";
- $tag =~ s/\s.*//;
- }
- } elsif (defined($user_sub{$tag})) {
- s/^\s*\@$tag\s+//;
- $sub = $user_sub{$tag};
- print "# user $tag = $sub, arg: $_" if $debug & $DEBUG_USER;
- if (defined(&$sub)) {
- chop($_);
- &$sub($_);
- } else {
- warn "$ERROR Bad user sub for $tag: $sub\n";
- }
- next;
- }
- if (defined($def_map{$tag})) {
- s/^\s*\@$tag\s+//;
- if ($tag =~ /x$/) {
- # extra definition line
- $tag = $`;
- $is_extra = 1;
- } else {
- $is_extra = 0;
- }
- while (/\{([^\{\}]*)\}/) {
- # this is a {} construct
- ($before, $contents, $after) = ($`, $1, $');
- # protect spaces
- $contents =~ s/\s+/$;9/g;
- # restore $_ protecting {}
- $_ = "$before$;7$contents$;8$after";
- }
- @args = split(/\s+/, &protect_html($_));
- foreach (@args) {
- s/$;9/ /g; # unprotect spaces
- s/$;7/\{/g; # ... {
- s/$;8/\}/g; # ... }
- }
- $type = shift(@args);
- $type =~ s/^\{(.*)\}$/$1/;
- print "# def ($tag): {$type} ", join(', ', @args), "\n"
- if $debug & $DEBUG_DEF;
- $type .= ':'; # it's nicer like this
- $name = shift(@args);
- $name =~ s/^\{(.*)\}$/$1/;
- if ($is_extra) {
- $_ = &debug("<DT>", __LINE__);
- } else {
- $_ = &debug("<DL>\n<DT>", __LINE__);
- }
- if ($tag eq 'deffn' || $tag eq 'defvr' || $tag eq 'deftp') {
- $_ .= "<U>$type</U> <B>$name</B>";
- $_ .= " <I>@args</I>" if @args;
- } elsif ($tag eq 'deftypefn' || $tag eq 'deftypevr'
- || $tag eq 'defcv' || $tag eq 'defop') {
- $ftype = $name;
- $name = shift(@args);
- $name =~ s/^\{(.*)\}$/$1/;
- $_ .= "<U>$type</U> $ftype <B>$name</B>";
- $_ .= " <I>@args</I>" if @args;
- } else {
- warn "$ERROR Unknown definition type: $tag\n";
- $_ .= "<U>$type</U> <B>$name</B>";
- $_ .= " <I>@args</I>" if @args;
- }
- $_ .= &debug("\n<DD>", __LINE__);
- $name = &unprotect_html($name);
- if ($tag eq 'deffn' || $tag eq 'deftypefn') {
- unshift(@input_spool, "\@findex $name\n");
- } elsif ($tag eq 'defop') {
- unshift(@input_spool, "\@findex $name on $ftype\n");
- } elsif ($tag eq 'defvr' || $tag eq 'deftypevr' || $tag eq 'defcv') {
- unshift(@input_spool, "\@vindex $name\n");
- } else {
- unshift(@input_spool, "\@tindex $name\n");
- }
- $dont_html = 1;
- }
- } elsif ($end_tag) {
- if ($format_map{$end_tag}) {
- $in_pre = 0 if $format_map{$end_tag} eq 'PRE';
- $in_list-- if $format_map{$end_tag} eq 'UL' || $format_map{$end_tag} eq 'OL' ;
- &html_pop_if('LI', 'P');
- &html_pop_if();
- push(@lines, &debug("</$format_map{$end_tag}>\n", __LINE__));
- push(@lines, &html_debug("\n", __LINE__));
- } elsif ($end_tag eq 'table' ||
- $end_tag eq 'ftable' ||
- $end_tag eq 'vtable') {
- shift(@tables);
- if (@tables) {
- ($table_type, $in_table) = split($;, $tables[0]);
- } else {
- $in_table = 0;
- $table_type = '';
- }
- push(@lines, "</DL>\n");
- &html_pop_if('DD');
- &html_pop_if();
- } elsif ($end_tag eq 'multitable') {
- print "# end of multitable with $multitable_cols columns\n"
- if $debug and $DEBUG_USER;
- $in_multitable = 0;
- push(@lines, "</TD></TR>\n");
- &html_pop_if('TR');
- push(@lines, "</TABLE>\n");
-&html_pop_if('TABLE');
- } elsif (defined($def_map{$end_tag})) {
- push(@lines, &debug("</DL>\n", __LINE__));
- } elsif ($end_tag eq 'menu') {
- &html_pop_if();
- push(@lines, $_); # must keep it for pass 2
- }
- next;
- }
- #
- # misc things
- #
- # protect texi and HTML things
- &protect_texi;
- $_ = &protect_html($_) unless $dont_html;
- $dont_html = 0;
- # substitution (unsupported things)
- s/^\s*\@center\s+//g;
- s/^\s*\@exdent\s+//g;
- s/\@noindent\s+//g;
- s/\@refill\s+//g;
- # other substitutions
- &simple_substitutions;
- s/\@value{($VARRE)}/$value{$1}/eg;
- s/\@footnote\{/\@footnote$docu_doc\{/g; # mark footnotes, cf. pass 4
- s/(^|\s+)\@tab\s*/ <\/TD><TD> /g if ($in_multitable);
-
- #
- # analyze the tag again
- #
- if ($tag) {
- if (defined($sec2level{$tag}) && $sec2level{$tag} > 0) {
- if (/^\s*\@$tag\s+(.+)$/) {
- $name = $1;
- $name =~ s/\s+$//;
- $level = $sec2level{$tag};
- $name = &update_sec_num($tag, $level) . " $name"
- if $number_sections && $tag !~ /^unnumbered/ && $tag ne 'subsubheading';
- if ($tag =~ /heading$/) {
- push(@lines, &html_debug("\n", __LINE__));
- if ($html_element ne 'body') {
- # We are in a nice pickle here. We are trying to get a H? heading
- # even though we are not in the body level. So, we convert
- # it to a nice, bold, line by itself.
- $_ = &debug("\n\n<P><STRONG>$name</STRONG></P>\n\n", __LINE__);
- } else {
- $_ = &debug("<H$level>$name</H$level>\n", __LINE__);
- &html_push_if('body');
- }
- print "# heading, section $name, level $level\n"
- if $debug & $DEBUG_TOC;
- } else {
- if ($split_chapter) {
- unless ($toplevel) {
- # first time we see a "section"
- unless ($level == 1) {
- warn "$ERROR The first section found is not of level 1: $_";
- warn "$ERROR I'll split on sections of level $level...\n";
- }
- $toplevel = $level;
- };
- if ($level == $toplevel) {
- print "# Splitting at section $name\n"
- if $debug & $DEBUG_TOC;
- ($doc_node_name[$doc_num + 1] = $node) =~ s|[ /]|_|g;
- &next_doc;
- push(@lines, $SPLITTAG) if $split_num++;
- push(@sections, $name);
- }
- } elsif ($split_node && $opt_special_links) {
- $toplevel = $level unless $toplevel;
- if ($level == $toplevel) {
- ($current_chapter_link = $node) =~ s|[ /]|_|g;
- # Set this again to the right value.
- $doc_node_name_links[$doc_num] = $current_chapter_link;
- ($docu_doc, $link_doc) = &doc_name($doc_num);
- }
- }
- $sec_num++;
- # Was "SEC$sec_num"
- ($docid = "$node") =~ s|[ /]|_|g;
- ($tocid = "$node") =~ s|[ /]|_|g;
-$docid = "SEC$sec_num" unless $docid;
-$tocid = "SEC$sec_num" unless $tocid;
- # check biblio and glossary
- $in_bibliography =
- ($name =~ /^([A-Z]|\d+)?(\.\d+)*\s*bibliography$/i);
- $in_glossary = ($name =~ /^([A-Z]|\d+)?(\.\d+)*\s*glossary$/i);
- # check node
- if ($node) {
- if ($node2sec{$node}) {
- warn "$ERROR Duplicate node found: $node\n";
- } else {
- $node2sec{$node} = $name;
- $node2href{$node} = "$link_doc#$docid";
- push(@maybe_wrong_links, $node);
- print "# node $node, section $name, level $level\n"
- if $debug & $DEBUG_TOC;
- }
- $node = '';
- } else {
- print "# no node, section $name, level $level\n"
- if $debug & $DEBUG_TOC;
- }
- # update TOC
- while ($level > $curlevel) {
- $curlevel++;
- push(@toc_lines, "<UL>\n");
- }
- while ($level < $curlevel) {
- $curlevel--;
- push(@toc_lines, "</UL>\n");
- }
- $_ = "<LI>" . &anchor($tocid, "$link_doc#$docid", $name, 1);
- push(@toc_lines, &substitute_style($_));
- # update DOC
- push(@lines, &html_debug("\n", __LINE__));
- &html_reset;
- $_ = "<H$level>".&anchor($docid, $opt_empty_headers ? "" : "$docu_toc#$tocid",
- $name)."</H$level>\n";
- $_ = &debug($_, __LINE__);
- push(@lines, &html_debug("\n", __LINE__));
- }
- # update DOC
- foreach $line (split(/\n+/, $_)) {
- push(@lines, "$line\n");
- }
- next;
- } else {
- warn "$ERROR Bad section line: $_";
- }
- } else {
- # track variables
- $value{$1} = $2, next if /^\s*\@set\s+($VARRE)\s+(.*)$/o;
- delete $value{$1}, next if /^\s*\@clear\s+($VARRE)\s*$/o;
- # store things
- $value{'_setfilename'} = $1, next if /^\s*\@setfilename\s+(.*)$/;
- $value{'_settitle'} = $1, next if /^\s*\@settitle\s+(.*)$/;
- $value{'_author'} .= "$1\n", next if /^\s*\@author\s+(.*)$/;
- $value{'_subtitle'} .= "$1\n", next if /^\s*\@subtitle\s+(.*)$/;
- $value{'_title'} .= "$1\n", next if /^\s*\@title\s+(.*)$/;
- # index
- if (/^\s*\@(..?)index\s+/) {
- unless ($valid_index{$1}) {
- warn "$ERROR Undefined index command: $_";
- next;
- }
- $id = 'IDX' . ++$idx_num;
- $index = $1 . 'index';
- $what = &substitute_style($');
- $what =~ s/\s+$//;
- print "# found $index for '$what' id $id\n"
- if $debug & $DEBUG_INDEX;
- eval(<<EOC);
- if (defined(\$$index\{\$what\})) {
- \$$index\{\$what\} .= "$;$link_doc#$id";
- } else {
- \$$index\{\$what\} = "$link_doc#$id";
- }
-EOC
- #
- # dirty hack to see if I can put an invisible anchor...
- #
- if ($html_element eq 'P' ||
- $html_element eq 'LI' ||
- $html_element eq 'DT' ||
- $html_element eq 'DD' ||
- $html_element eq 'ADDRESS' ||
- $html_element eq 'B' ||
- $html_element eq 'BLOCKQUOTE' ||
- $html_element eq 'PRE' ||
- $html_element eq 'SAMP') {
- push(@lines, &anchor($id, '', $invisible_mark, !$in_pre));
- } elsif ($html_element eq 'body') {
- push(@lines, &debug("<P>\n", __LINE__));
- push(@lines, &anchor($id, '', $invisible_mark, !$in_pre));
- &html_push('P');
- } elsif ($html_element eq 'DL' ||
- $html_element eq 'UL' ||
- $html_element eq 'OL' ||
- $html_element eq 'TR') {
- $deferred_ref .=
- &anchor($id, '', $invisible_mark, !$in_pre) . " ";
- }
- next;
- }
- # list item
- if (/^\s*\@itemx?\s+/)
- {
- $what = $';
- $what =~ s/\s+$//;
-
- # add an index before the item if applicable
- if ($table_type ne '' && !$in_multitable) {
- print "# Adding table index (type $table_type) for $what\n"
- if $debug & $DEBUG_INDEX;
- # This is realy ugly. We should do a pass before this to
- # add index entrys before instead.
- if ($global_added_this_index) {
- $global_added_this_index = 0;
- } else {
- unshift(@input_spool, "\@${table_type}index $what\n", $_);
- $global_added_this_index = 1;
- next READ_LINE;
- }
- }
-
- if ($in_bibliography && $use_bibliography) {
- if ($what =~ /^$BIBRE$/o) {
- $id = 'BIB' . ++$bib_num;
- $bib2href{$what} = "$link_doc#$id";
- print "# found bibliography for '$what' id $id\n"
- if $debug & $DEBUG_BIB;
- $what = &anchor($id, '', $what);
- }
- } elsif ($in_glossary && $use_glossary) {
- $id = 'GLOSS' . ++$gloss_num;
- $entry = $what;
- $entry =~ tr/A-Z/a-z/ unless $entry =~ /^[A-Z\s]+$/;
- $gloss2href{$entry} = "$link_doc#$id";
- print "# found glossary for '$entry' id $id\n"
- if $debug & $DEBUG_GLOSS;
- $what = &anchor($id, '', $what);
- }
- if ($in_multitable)
- {
- # All this is a **HACK**.
- # It does only work for a FEW SIMPLE CASES !!!
- push(@lines, &debug("</TD></TR>\n", __LINE__))
- unless $html_element eq 'TABLE';
- &html_pop_if('TR');
- $what =~ s/(^|\s+)\@tab\s*/ <\/TD><TD> /g;
- push(@lines, &debug("<TR><TD>$what\n", __LINE__));
- &html_push('TR');
- if ($deferred_ref)
- {
- push(@lines, &debug("$deferred_ref\n", __LINE__));
- $deferred_ref = '';
- }
- next;
- }
- else
- {
- &html_pop_if('P');
- if ($html_element eq 'DL' || $html_element eq 'DD') {
- if ($things_map{$in_table} && !$what) {
- # special case to allow @table @bullet for instance
- push(@lines, &debug("<DT>$things_map{$in_table}\n", __LINE__));
- } else {
- push(@lines, &debug("<DT>\@$in_table\{$what\}\n", __LINE__));
- }
- push(@lines, "<DD>");
- &html_push('DD') unless $html_element eq 'DD';
- # Old index add was here
- } else {
- push(@lines, &debug("<LI>$what\n", __LINE__));
- &html_push('LI') unless $html_element eq 'LI';
- }
- push(@lines, &html_debug("\n", __LINE__));
- if ($deferred_ref) {
- push(@lines, &debug("$deferred_ref\n", __LINE__));
- $deferred_ref = '';
- }
- next;
- }
- }
- }
- }
- # paragraph separator
- if ($_ eq "\n") {
- next if $#lines >= 0 && $lines[$#lines] eq "\n";
- if ($html_element eq 'P') {
- push(@lines, "\n");
- $_ = &debug("</P>\n", __LINE__);
- &html_pop;
- }
- } elsif ($html_element eq 'body' || $html_element eq 'BLOCKQUOTE') {
- push(@lines, "<P>\n");
- &html_push('P');
- $_ = &debug($_, __LINE__);
- }
- # otherwise
- push(@lines, $_);
-}
-
-# finish TOC
-$level = 0;
-while ($level < $curlevel)
-{
- $curlevel--;
- push(@toc_lines, "</UL>\n");
-}
-
-print "# end of pass 1\n" if $verbose;
-
-#+++############################################################################
-# #
-# Pass 2/3: handle style, menu, index, cross-reference #
-# #
-#---############################################################################
-
-@lines2 = (); # whole document (2nd pass)
-@lines3 = (); # whole document (3rd pass)
-$in_menu = 0; # am I inside a menu
-
-while (@lines)
-{
- $_ = shift(@lines);
- #
- # special case (protected sections)
- #
- if (/^$PROTECTTAG/o) {
- push(@lines2, $_);
- next;
- }
- #
- # menu
- #
- $in_menu = 1, push(@lines2, &debug("<UL>\n", __LINE__)), next if /^\s*\@menu\b/;
- $in_menu = 0, push(@lines2, &debug("</UL>\n", __LINE__)), next if /^\s*\@end\s+menu\b/;
- if ($in_menu) {
- if (/^\*\s+($NODERE)::/o) {
- $descr = $';
- chop($descr);
- &menu_entry($1, $1, $descr);
- } elsif (/^\*\s+(.+):\s+([^\t,\.\n]+)[\t,\.\n]/) {
- $descr = $';
- chop($descr);
- &menu_entry($1, $2, $descr);
- } elsif (/^\*/) {
- warn "$ERROR Bad menu line: $_";
- } else { # description continued?
- push(@lines2, $_);
- }
- next;
- }
- #
- # printindex
- #
- if (/^\s*\@printindex\s+(\w\w)\b/) {
- local($index, *ary, @keys, $key, $letter, $last_letter, @refs);
- if ($predefined_index{$1}) {
- $index = $predefined_index{$1} . 'index';
- } else {
- $index = $1 . 'index';
- }
- eval("*ary = *$index");
- @keys = keys(%ary);
- foreach $key (@keys) {
- $_ = $key;
- 1 while s/<(\w+)>\`(.*)\'<\/\1>/$2/; # remove HTML tags with quotes
- 1 while s/<(\w+)>(.*)<\/\1>/$2/; # remove HTML tags
- $_ = &unprotect_html($_);
- &unprotect_texi;
- tr/A-Z/a-z/; # lowercase
- $key2alpha{$key} = $_;
- print "# index $key sorted as $_\n"
- if $key ne $_ && $debug & $DEBUG_INDEX;
- }
- $last_letter = undef;
- foreach $key (sort byalpha @keys) {
- $letter = substr($key2alpha{$key}, 0, 1);
- $letter = substr($key2alpha{$key}, 0, 2) if $letter eq $;;
- $letter = " " unless $letter =~ /[a-zA-Z]/;
- if (!defined($last_letter) || $letter ne $last_letter) {
- push(@lines2, "</DIR>\n") if defined($last_letter);
- push(@lines2, "<H2>" . &protect_html(uc($letter)) . "</H2>\n");
- push(@lines2, "<DIR>\n");
- $last_letter = $letter;
- }
- @refs = ();
- foreach (split(/$;/, $ary{$key})) {
- push(@refs, &anchor('', $_, $key, 0));
- }
- push(@lines2, "<LI>" . join(", ", @refs) . "\n");
- }
- push(@lines2, "</DIR>\n") if defined($last_letter);
- next;
- }
- #
- # simple style substitutions
- #
- $_ = &substitute_style($_);
- #
- # xref
- #
- while (/\@(x|px|info|)ref{($XREFRE)(}?)/o) {
- # note: Texinfo may accept other characters
- ($type, $nodes, $full) = ($1, $2, $3);
- ($before, $after) = ($`, $');
- if (! $full && $after) {
- warn "$ERROR Bad xref (no ending } on line): $_";
- $_ = "$before$;0${type}ref\{$nodes$after";
- next; # while xref
- }
- if ($type eq 'x') {
- $type = 'See ';
- } elsif ($type eq 'px') {
- $type = 'see ';
- } elsif ($type eq 'info') {
- $type = 'See Info';
- } elsif ($type eq 'u') {
- $type = 'See ';
- } else {
- $type = '';
- }
- unless ($full) {
- $next = shift(@lines);
- $next = &substitute_style($next);
- chop($nodes); # remove final newline
- if ($next =~ /\}/) { # split on 2 lines
- $nodes .= " $`";
- $after = $';
- } else {
- $nodes .= " $next";
- $next = shift(@lines);
- $next = &substitute_style($next);
- chop($nodes);
- if ($next =~ /\}/) { # split on 3 lines
- $nodes .= " $`";
- $after = $';
- } else {
- warn "$ERROR Bad xref (no ending }): $_";
- $_ = "$before$;0xref\{$nodes$after";
- unshift(@lines, $next);
- next; # while xref
- }
- }
- }
- $nodes =~ s/\s+/ /g; # remove useless spaces
- @args = split(/\s*,\s*/, $nodes);
- $node = $args[0]; # the node is always the first arg
- &normalise_node($node);
- $sec = $node2sec{$node};
- if (@args == 5) { # reference to another manual
- $sec = $args[2] || $node;
- $man = $args[4] || $args[3];
- $_ = "${before}${type}section `$sec' in \@cite{$man}$after";
- } elsif ($type =~ /Info/) { # inforef
- warn "$ERROR Wrong number of arguments: $_" unless @args == 3;
- ($nn, $_, $in) = @args;
- $_ = "${before}${type} file `$in', node `$nn'$after";
- } elsif ($sec) {
- $href = $node2href{$node};
- $_ = "${before}${type}section " . &anchor('', $href, $sec) . $after;
- } else {
- warn "$ERROR Undefined node ($node): $_";
- $_ = "$before$;0xref{$nodes}$after";
- }
- }
- #
- # try to guess bibliography references or glossary terms
- #
- # This checked for NAME="SEC\d". The current version is probably broken.
- unless (/^<H\d><A NAME=\"/) {
- if ($use_bibliography) {
- $done = '';
- while (/$BIBRE/o) {
- ($pre, $what, $post) = ($`, $&, $');
- $href = $bib2href{$what};
- if (defined($href) && $post !~ /^[^<]*<\/A>/) {
- $done .= $pre . &anchor('', $href, $what);
- } else {
- $done .= "$pre$what";
- }
- $_ = $post;
- }
- $_ = $done . $_;
- }
- if ($use_glossary) {
- $done = '';
- while (/\b\w+\b/) {
- ($pre, $what, $post) = ($`, $&, $');
- $entry = $what;
- $entry =~ tr/A-Z/a-z/ unless $entry =~ /^[A-Z\s]+$/;
- $href = $gloss2href{$entry};
- if (defined($href) && $post !~ /^[^<]*<\/A>/) {
- $done .= $pre . &anchor('', $href, $what);
- } else {
- $done .= "$pre$what";
- }
- $_ = $post;
- }
- $_ = $done . $_;
- }
- }
- # otherwise
- push(@lines2, $_);
-}
-print "# end of pass 2\n" if $verbose;
-
-#
-# split style substitutions
-#
-while (@lines2)
-{
- $_ = shift(@lines2);
- #
- # special case (protected sections)
- #
- if (/^$PROTECTTAG/o) {
- push(@lines3, $_);
- next;
- }
- #
- # split style substitutions
- #
- $old = '';
- while ($old ne $_) {
- $old = $_;
- if (/\@(\w+)\{/) {
- ($before, $style, $after) = ($`, $1, $');
- if (defined($style_map{$style})) {
- $_ = $after;
- $text = '';
- $after = '';
- $failed = 1;
- while (@lines2) {
- if (/\}/) {
- $text .= $`;
- $after = $';
- $failed = 0;
- last;
- } else {
- $text .= $_;
- $_ = shift(@lines2);
- }
- }
- if ($failed) {
- die "* Bad syntax (\@$style) after: $before\n";
- } else {
- $text = &apply_style($style, $text);
- $_ = "$before$text$after";
- }
- }
- }
- }
- # otherwise
- push(@lines3, $_);
-}
-print "# end of pass 3\n" if $verbose;
-
-#+++############################################################################
-# #
-# Pass 4: foot notes, final cleanup #
-# #
-#---############################################################################
-
-@foot_lines = (); # footnotes
-@doc_lines = (); # final document
-$end_of_para = 0; # true if last line is <P>
-
-while (@lines3)
-{
- $_ = shift(@lines3);
- #
- # special case (protected sections)
- #
- if (/^$PROTECTTAG/o) {
- push(@doc_lines, $_);
- $end_of_para = 0;
- next;
- }
- #
- # footnotes
- #
- while (/\@footnote([^\{\s]+)\{/) {
- ($before, $d, $after) = ($`, $1, $');
- $_ = $after;
- $text = '';
- $after = '';
- $failed = 1;
- while (@lines3) {
- if (/\}/) {
- $text .= $`;
- $after = $';
- $failed = 0;
- last;
- } else {
- $text .= $_;
- $_ = shift(@lines3);
- }
- }
- if ($failed) {
- die "* Bad syntax (\@footnote) after: $before\n";
- } else {
- $foot_num++;
- $docid = "DOCF$foot_num";
- $footid = "FOOT$foot_num";
- $foot = "($foot_num)";
- push(@foot_lines, "<H3>" . &anchor($footid, "$d#$docid", $foot) . "</H3>\n");
- $text = "<P>$text" unless $text =~ /^\s*<P>/;
- push(@foot_lines, "$text\n");
- $_ = $before . &anchor($docid, "$docu_foot#$footid", $foot) . $after;
- }
- }
- #
- # remove unnecessary <P>
- #
- if (/^\s*<P>\s*$/) {
- next if $end_of_para++;
- } else {
- $end_of_para = 0;
- }
- # otherwise
- push(@doc_lines, $_);
-}
-print "# end of pass 4\n" if $verbose;
-
-#+++############################################################################
-# #
-# Pass 5: print things #
-# #
-#---############################################################################
-
- $header = '';
- $full_title = $value{'_title'} || $value{'_settitle'} || "Untitled Document";
- $title = $value{'_settitle'} || $full_title;
- $_ = &substitute_style($full_title);
- &unprotect_texi;
- s/\n$//; # rmv last \n (if any)
- $full_title = "<H1>" . join("</H1>\n<H1>", split(/\n/, $_)) . "</H1>\n";
-
-#
-# print ToC
-#
-if (!$monolithic && @toc_lines)
-{
- if (open(FILE, "> $docu_toc")) {
- print "# creating $docu_toc...\n" if $verbose;
- &print_toplevel_header("$title - Table of Contents");
- &print_ruler;
- &print(*toc_lines, FILE);
- &print_toplevel_footer;
- close(FILE);
- } else {
- warn "$ERROR Can't write (toc) to $docu_toc: $!\n";
- }
-}
-
-#
-# print footnotes
-#
-if (!$monolithic && @foot_lines)
-{
- if (open(FILE, "> $docu_foot")) {
- print "# creating $docu_foot...\n" if $verbose;
- &print_toplevel_header("$title - Footnotes");
- &print_ruler;
- &print(*foot_lines, FILE);
- &print_toplevel_footer;
- close(FILE);
- } else {
- warn "$ERROR Can't write (foot) to $docu_foot: $!\n";
- }
-}
-
-#
-# print document
-#
-
-if ($split_chapter || $split_node)
-{ # split
- $doc_num = 0;
- $last_num = scalar(@sections);
- $first_doc = &doc_name(1);
- $last_doc = &doc_name($last_num);
- while (@sections) {
- $section = shift(@sections);
- &next_doc;
- # Remove added links part
- if (open(FILE, ">$docu_doc")) {
- print "# creating $docu_doc... ($section)\n" if $verbose;
- &print_header("$title - $section") unless $opt_empty_headers;
- $prev_doc = ($doc_num == 1 ? undef : &doc_name($doc_num - 1));
- $next_doc = ($doc_num == $last_num ? undef : &doc_name($doc_num + 1));
- $navigation = "Go to the ";
- $navigation .= ($prev_doc ? &anchor('', $first_doc, "first") : "first");
- $navigation .= ", ";
- $navigation .= ($prev_doc ? &anchor('', $prev_doc, "previous") : "previous");
- $navigation .= ", ";
- $navigation .= ($next_doc ? &anchor('', $next_doc, "next") : "next");
- $navigation .= ", ";
- $navigation .= ($next_doc ? &anchor('', $last_doc, "last") : "last");
- $navigation .= " section, " . &anchor('', $docu_toc, "table of contents") . ".\n";
- print FILE $navigation unless $opt_empty_headers;
- &print_ruler unless $opt_empty_headers;
- # find corresponding lines
- @tmp_lines = ();
- while (@doc_lines) {
- $_ = shift(@doc_lines);
- last if ($_ eq $SPLITTAG);
- push(@tmp_lines, $_);
- }
- &print(*tmp_lines, FILE);
- &print_ruler unless $opt_empty_headers;
- print FILE $navigation unless $opt_empty_headers;
- &print_footer unless $opt_empty_headers;
- close(FILE);
- } else {
- warn "$ERROR Can't write (doc) to $docu_doc: $!\n";
- }
- }
-}
-else
-{ # not split
- if (open(FILE, ">$docu_doc")) {
- print "# creating $docu_doc...\n" if $verbose;
- if ($monolithic || !@toc_lines) {
- &print_toplevel_header($title);
- } else {
- &print_header($title);
- print FILE $full_title;
- }
- if ($monolithic && @toc_lines) {
- &print_ruler;
- print FILE "<H1>Table of Contents</H1>\n";
- &print(*toc_lines, FILE);
- }
- &print_ruler;
- &print(*doc_lines, FILE);
- if ($monolithic && @foot_lines) {
- &print_ruler;
- print FILE "<H1>Footnotes</H1>\n";
- &print(*foot_lines, FILE);
- }
- if ($monolithic || !@toc_lines) {
- &print_toplevel_footer;
- } else {
- &print_footer;
- }
- close(FILE);
- } else {
- warn "$ERROR Can't write (doc2) to $docu_doc: $!\n";
- }
-}
-
-print "# that's all folks\n" if $verbose;
-
-#+++############################################################################
-# #
-# Low level functions #
-# #
-#---############################################################################
-
-sub update_sec_num
-{
- local($name, $level) = @_;
-
- $level--; # here we start at 0
- if ($name =~ /^appendix/) {
- # appendix style
- if (defined(@appendix_sec_num)) {
- &incr_sec_num($level, @appendix_sec_num);
- } else {
- @appendix_sec_num = ('A', 0, 0, 0);
- }
- return(join('.', @appendix_sec_num[0..$level]));
- } else {
- # normal style
- if (defined(@normal_sec_num)) {
- &incr_sec_num($level, @normal_sec_num);
- } else {
- @normal_sec_num = (1, 0, 0, 0);
- }
- return(join('.', @normal_sec_num[0..$level]));
- }
-}
-
-sub incr_sec_num
-{
- local($level, $l);
- $level = shift(@_);
- $_[$level]++;
- foreach $l ($level+1 .. 3) {
- $_[$l] = 0;
- }
-}
-
-sub check
-{
- local($_, %seen, %context, $before, $match, $after);
-
- while (<>) {
- if (/\@(\*|\.|\:|\@|\{|\})/) {
- $seen{$&}++;
- $context{$&} .= "> $_" if $verbose;
- $_ = "$`XX$'";
- redo;
- }
- if (/\@(\w+)/) {
- ($before, $match, $after) = ($`, $&, $');
- if ($before =~ /\b[\w-]+$/ && $after =~ /^[\w-.]*\b/) { # e-mail address
- $seen{'e-mail address'}++;
- $context{'e-mail address'} .= "> $_" if $verbose;
- } else {
- $seen{$match}++;
- $context{$match} .= "> $_" if $verbose;
- }
- $match =~ s/^\s*\@/X/;
- $_ = "$before$match$after";
- redo;
- }
- }
-
- foreach (sort(keys(%seen))) {
- if ($verbose) {
- print "$_\n";
- print $context{$_};
- } else {
- print "$_ ($seen{$_})\n";
- }
- }
-}
-
-sub open
-{
- local($name) = @_;
-
- ++$fh_name;
- if (open($fh_name, $name)) {
- unshift(@fhs, $fh_name);
- } else {
- warn "$ERROR Can't read file $name: $!\n";
- }
-}
-
-sub init_input
-{
- @fhs = (); # hold the file handles to read
- @input_spool = (); # spooled lines to read
- $fh_name = 'FH000';
- &open($docu);
-}
-
-sub next_line
-{
- local($fh, $line);
-
- if (@input_spool) {
- $line = shift(@input_spool);
- return($line);
- }
- while (@fhs) {
- $fh = $fhs[0];
- $line = <$fh>;
- return($line) if $line;
- close($fh);
- shift(@fhs);
- }
- return(undef);
-}
-
-# used in pass 1, use &next_line
-sub skip_until
-{
- local($tag) = @_;
- local($_);
-
- while ($_ = &next_line) {
- return if /^\s*\@end\s+$tag\s*$/;
- }
- die "* Failed to find '$tag' after: " . $lines[$#lines];
-}
-
-#
-# HTML stacking to have a better HTML output
-#
-
-sub html_reset
-{
- @html_stack = ('html');
- $html_element = 'body';
-}
-
-sub html_push
-{
- local($what) = @_;
- push(@html_stack, $html_element);
- $html_element = $what;
-}
-
-sub html_push_if
-{
- local($what) = @_;
- push(@html_stack, $html_element)
- if ($html_element && $html_element ne 'P');
- $html_element = $what;
-}
-
-sub html_pop
-{
- $html_element = pop(@html_stack);
-}
-
-sub html_pop_if
-{
- local($elt);
-
- if (@_) {
- foreach $elt (@_) {
- if ($elt eq $html_element) {
- $html_element = pop(@html_stack) if @html_stack;
- last;
- }
- }
- } else {
- $html_element = pop(@html_stack) if @html_stack;
- }
-}
-
-sub html_debug
-{
- local($what, $line) = @_;
- return("<!-- $line @html_stack, $html_element -->$what")
- if $debug & $DEBUG_HTML;
- return($what);
-}
-
-# to debug the output...
-sub debug
-{
- local($what, $line) = @_;
- return("<!-- $line -->$what")
- if $debug & $DEBUG_HTML;
- return($what);
-}
-
-sub normalise_node
-{
- $_[0] =~ s/\s+/ /g;
- $_[0] =~ s/ $//;
- $_[0] =~ s/^ //;
-}
-
-sub menu_entry
-{
- local($entry, $node, $descr) = @_;
- local($href);
-
- &normalise_node($node);
- $href = $node2href{$node};
- if ($href) {
- $descr =~ s/^\s+//;
- $descr = ": $descr" if $descr;
- push(@lines2, "<LI>" . &anchor('', $href, $entry) . "$descr\n");
- } else {
- warn "$ERROR Undefined node ($node): $_";
- }
-}
-
-sub do_ctrl { "^$_[0]" }
-
-sub do_sc { "\U$_[0]\E" }
-
-sub fix_image
-{
- my($text) = @_;
- my($arg1, $ext);
- $text =~ /^([^,]*)/;
- die "error in image: '$text'" unless defined($1);
- $arg1 = $1;
- $arg1 =~ s/@@/@/g;
- foreach (@include_dirs) {
- $ext = "jpg" if -f "$_/$arg1.jpg";
- $ext = "gif" if -f "$_/$arg1.gif";
- }
- if (defined($ext))
- {
- "<IMG SRC=\"$arg1.$ext\">";
- }
- else
- {
- warn "Image $arg1 not found";
- "";
- }
-}
-
-sub fix_url
-{
- my($text) = @_;
- $text =~ s/@@/@/g;
- $text;
-}
-
-sub fix_uref
-{
- my($text) = @_;
- my($arg1, $arg2);
- $text =~ /^([^,]*),?([^,]*)?$/;
- die "error in uref: '$text'" unless defined($1);
- $arg1 = $1;
- $arg2 = (defined($2) && $2) ? $2 : $arg1;
- $arg1 =~ s/@@/@/g;
- $arg2 =~ s/@@/@/g;
- "<a HREF=\"$arg1\">$arg2</a>";
-}
-
-sub fix_email
-{
- my($text) = @_;
- my($arg1, $arg2);
- $text =~ /^([^,]*)(,[^,]*)?$/;
- die "error in email: '$text'" unless defined($1);
- $arg1 = $1;
- $arg2 = defined($2) ? $2 : $arg1;
- $arg1 =~ s/@@/@/g;
- $arg2 =~ s/@@/@/g;
- "<a HREF=\"mailto:$arg1\">$arg2</a>";
-}
-
-sub apply_style
-{
- local($texi_style, $text) = @_;
- local($style);
-
- $style = $style_map{$texi_style};
- if (defined($style)) { # known style
- if ($style =~ /^\"/) { # add quotes
- $style = $';
- $text = "\`$text\'";
- }
- if ($style =~ /^\&/) { # custom
- $style = $';
- $text = &$style($text);
- } elsif ($style) { # good style
- $text = "<$style>$text</$style>";
- } else { # no style
- }
- } else { # unknown style
- $text = undef;
- }
- return($text);
-}
-
-# remove Texinfo styles
-sub remove_style
-{
- local($_) = @_;
- s/\@\w+{([^\{\}]+)}/$1/g;
- return($_);
-}
-
-sub substitute_style
-{
- local($_) = @_;
- local($changed, $done, $style, $text);
-
- $changed = 1;
- while ($changed) {
- $changed = 0;
- $done = '';
- while (/\@(\w+){([^\{\}]+)}/) {
- $text = &apply_style($1, $2);
- if ($text) {
- $_ = "$`$text$'";
- $changed = 1;
- } else {
- $done .= "$`\@$1";
- $_ = "{$2}$'";
- }
- }
- $_ = $done . $_;
- }
- return($_);
-}
-
-sub anchor
-{
- local($name, $href, $text, $newline) = @_;
- local($result);
-
- $result = "<A";
- $result .= " NAME=\"$name\"" if $name;
- $result .= " HREF=\"$href\"" if $href;
- $result .= ">$text</A>";
- $result .= "\n" if $newline;
- return($result);
-}
-
-sub pretty_date
-{
- local(@MoY, $sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst);
-
- @MoY = ('January', 'Febuary', 'March', 'April', 'May', 'June',
- 'July', 'August', 'September', 'October', 'November', 'December');
- ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time);
- $year += ($year < 70) ? 2000 : 1900;
- return("$mday $MoY[$mon] $year");
-}
-
-sub doc_name
-{
- local($num) = @_;
- my($real_name, $link_name);
- $real_name = ($opt_use_numbers) ? $num : $doc_node_name[$num];
- $link_name = ($opt_special_links) ?
- $doc_node_name_links[$num] : $real_name;
- # print "# num $num osl $opt_special_links link $link_name\n";
- return("${docu_name}_$real_name.html",
- "$opt_special_links${docu_name}_$link_name.html");
-}
-
-sub next_doc
-{
- ($docu_doc, $link_doc) = &doc_name(++$doc_num);
-}
-
-sub print
-{
- local(*lines, $fh) = @_;
- local($_);
-
- while (@lines) {
- $_ = shift(@lines);
- if (/^$PROTECTTAG/o) {
- $_ = $tag2pro{$_};
- } else {
- &unprotect_texi;
- }
- print $fh $_;
- }
-}
-
-sub print_ruler
-{
- print FILE "<P><HR><P>\n";
-}
-
-sub print_header
-{
- local($_);
-
- # clean the title
- $_ = &remove_style($_[0]);
- &unprotect_texi;
- # print the header
- if ($doctype eq 'html2') {
- print FILE $html2_doctype;
- } elsif ($doctype) {
- print FILE $doctype;
- }
- my($tags) = defined($value{"_body_tags"}) ? " " . $value{"_body_tags"} : "";
- my($et) = defined($value{"_extra_head"}) ? " " . $value{"_extra_head"} : "";
- $et = &unprotect_html($et);
- print FILE <<EOT;
- <HTML>
- <HEAD>
- $header
- <TITLE>$_</TITLE>
- $et
- </HEAD>
- <BODY$tags>
-EOT
-}
-
-sub print_toplevel_header
-{
- local($_);
-
- &print_header unless $opt_empty_headers; # pass given arg...
- print FILE $full_title;
- if ($value{'_subtitle'}) {
- $value{'_subtitle'} =~ s/\n+$//;
- foreach (split(/\n/, $value{'_subtitle'})) {
- $_ = &substitute_style($_);
- &unprotect_texi;
- print FILE "<H2>$_</H2>\n";
- }
- }
- if ($value{'_author'}) {
- $value{'_author'} =~ s/\n+$//;
- foreach (split(/\n/, $value{'_author'})) {
- $_ = &substitute_style($_);
- &unprotect_texi;
- s/[\w.-]+\@[\w.-]+/<A HREF="mailto:$&">$&<\/A>/g;
- print FILE "<ADDRESS>$_</ADDRESS>\n";
- }
- }
- print FILE "<P>\n";
-}
-
-sub print_footer
-{
- print FILE <<EOT;
- </BODY>
- </HTML>
-EOT
-}
-
-sub print_toplevel_footer
-{
- &print_footer unless $opt_empty_headers;
-}
-
-sub protect_texi
-{
- # protect @ { } ` '
- s/\@\@/$;0/go;
- s/\@\{/$;1/go;
- s/\@\}/$;2/go;
- s/\@\`/$;3/go;
- s/\@\'/$;4/go;
-}
-
-sub protect_html
-{
- local($what) = @_;
- # protect & < >
- # hack for the two entity-like variable reference in existing examples
- $what =~ s/\&(length|ts);/\&\#38;$1;/g;
- # this leaves alone entities, but encodes standalone ampersands
- $what =~ s/\&(?!([a-z0-9]+|#\d+);)/\&\#38;/ig;
- $what =~ s/\</\&\#60;/g;
- $what =~ s/\>/\&\#62;/g;
- # but recognize some HTML things
- $what =~ s/\&\#60;\/A\&\#62;/<\/A>/g; # </A>
- $what =~ s/\&\#60;A ([^\&]+)\&\#62;/<A $1>/g; # <A [^&]+>
- $what =~ s/\&\#60;IMG ([^\&]+)\&\#62;/<IMG $1>/g; # <IMG [^&]+>
- return($what);
-}
-
-sub unprotect_texi
-{
- s/$;0/\@/go;
- s/$;1/\{/go;
- s/$;2/\}/go;
- s/$;3/\`/go;
- s/$;4/\'/go;
-}
-
-sub unprotect_html
-{
- local($what) = @_;
- $what =~ s/\&\#38;/\&/g;
- $what =~ s/\&\#60;/\</g;
- $what =~ s/\&\#62;/\>/g;
- return($what);
-}
-
-sub byalpha
-{
- $key2alpha{$a} cmp $key2alpha{$b};
-}
-
-##############################################################################
-
- # These next few lines are legal in both Perl and nroff.
-
- .00 ; # finish .ig
-
- 'di \" finish diversion--previous line must be blank
-.nr nl 0-1 \" fake up transition to first page again
-.nr % 0 \" start at page 1
-'; __END__ ############# From here on it's a standard manual page ############
-.TH TEXI2HTML 1 "09/10/96"
-.AT 3
-.SH NAME
-texi2html \- a Texinfo to HTML converter
-.SH SYNOPSIS
-.B texi2html [options] file
-.PP
-.B texi2html -check [-verbose] files
-.SH DESCRIPTION
-.I Texi2html
-converts the given Texinfo file to a set of HTML files. It tries to handle
-most of the Texinfo commands. It creates hypertext links for cross-references,
-footnotes...
-.PP
-It also tries to add links from a reference to its corresponding entry in the
-bibliography (if any). It may also handle a glossary (see the
-.B \-glossary
-option).
-.PP
-.I Texi2html
-creates several files depending on the contents of the Texinfo file and on
-the chosen options (see FILES).
-.PP
-The HTML files created by
-.I texi2html
-are closer to TeX than to Info, that's why
-.I texi2html
-converts @iftex sections and not @ifinfo ones by default. You can reverse
-this with the \-expandinfo option.
-.SH OPTIONS
-.TP 12
-.B \-check
-Check the given file and give the list of all things that may be Texinfo commands.
-This may be used to check the output of
-.I texi2html
-to find the Texinfo commands that have been left in the HTML file.
-.TP
-.B \-expandinfo
-Expand @ifinfo sections, not @iftex ones.
-.TP
-.B \-glossary
-Use the section named 'Glossary' to build a list of terms and put links in the HTML
-document from each term toward its definition.
-.TP
-.B \-invisible \fIname\fP
-Use \fIname\fP to create invisible destination anchors for index links. This is a workaround
-for a known bug of many WWW browsers, including xmosaic.
-.TP
-.B \-I \fIdir\fP
-Look also in \fIdir\fP to find included files.
-.TP
-.B \-menu
-Show the Texinfo menus; by default they are ignored.
-.TP
-.B \-monolithic
-Output only one file, including the table of contents and footnotes.
-.TP
-.B \-number
-Number the sections.
-.TP
-.B \-split_chapter
-Split the output into several HTML files (one per main section:
-chapter, appendix...).
-.TP
-.B \-split_node
-Split the output into several HTML files (one per node).
-.TP
-.B \-usage
-Print usage instructions, listing the current available command-line options.
-.TP
-.B \-verbose
-Give a verbose output. Can be used with the
-.B \-check
-option.
-.PP
-.SH FILES
-By default
-.I texi2html
-creates the following files (foo being the name of the Texinfo file):
-.TP 16
-.B foo_toc.html
-The table of contents.
-.TP
-.B foo.html
-The document's contents.
-.TP
-.B foo_foot.html
-The footnotes (if any).
-.PP
-When used with the
-.B \-split
-option, it creates several files (one per chapter or node), named
-.B foo_n.html
-(n being the indice of the chapter or node), instead of the single
-.B foo.html
-file.
-.PP
-When used with the
-.B \-monolithic
-option, it creates only one file:
-.B foo.html
-.SH VARIABLES
-.I texi2html
-predefines the following variables: \fBhtml\fP, \fBtexi2html\fP.
-.SH ADDITIONAL COMMANDS
-.I texi2html
-implements the following non-Texinfo commands:
-.TP 16
-.B @ifhtml
-This indicates the start of an HTML section, this section will passed through
-without any modofication.
-.TP
-.B @end ifhtml
-This indcates the end of an HTML section.
-.SH VERSION
-This is \fItexi2html\fP version 1.52, 09/10/96.
-.PP
-The latest version of \fItexi2html\fP can be found in WWW, cf. URL
-http://wwwcn.cern.ch/dci/texi2html/
-.SH AUTHOR
-The main author is Lionel Cons, CERN CN/DCI/UWS, Lionel.Cons@cern.ch.
-Many other people around the net contributed to this program.
-.SH COPYRIGHT
-This program is the intellectual property of the European
-Laboratory for Particle Physics (known as CERN). No guarantee whatsoever is
-provided by CERN. No liability whatsoever is accepted for any loss or damage
-of any kind resulting from any defect or inaccuracy in this information or
-code.
-.PP
-CERN, 1211 Geneva 23, Switzerland
-.SH "SEE ALSO"
-GNU Texinfo Documentation Format,
-HyperText Markup Language (HTML),
-World Wide Web (WWW).
-.SH BUGS
-This program does not understand all Texinfo commands (yet).
-.PP
-TeX specific commands (normally enclosed in @iftex) will be
-passed unmodified.
-.ex
diff --git a/Docs/Support/texinfo.tex b/Docs/Support/texinfo.tex
deleted file mode 100644
index 3299693244b..00000000000
--- a/Docs/Support/texinfo.tex
+++ /dev/null
@@ -1,5868 +0,0 @@
-% texinfo.tex -- TeX macros to handle Texinfo files.
-%
-% Load plain if necessary, i.e., if running under initex.
-\expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi
-%
-\def\texinfoversion{1999-05-25.6}%
-%
-% Copyright (C) 1985, 86, 88, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99
-% Free Software Foundation, Inc.
-%
-% This texinfo.tex file is free software; you can redistribute it and/or
-% modify it under the terms of the GNU General Public License as
-% published by the Free Software Foundation; either version 2, or (at
-% your option) any later version.
-%
-% This texinfo.tex file is distributed in the hope that it will be
-% useful, but WITHOUT ANY WARRANTY; without even the implied warranty
-% of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-% General Public License for more details.
-%
-% You should have received a copy of the GNU General Public License
-% along with this texinfo.tex file; see the file COPYING. If not, write
-% to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-% Boston, MA 02111-1307, USA.
-%
-% In other words, you are welcome to use, share and improve this program.
-% You are forbidden to forbid anyone else to use, share and improve
-% what you give them. Help stamp out software-hoarding!
-%
-% Please try the latest version of texinfo.tex before submitting bug
-% reports; you can get the latest version from:
-% ftp://ftp.gnu.org/pub/gnu/texinfo.tex
-% (and all GNU mirrors, see http://www.gnu.org/order/ftp.html)
-% ftp://tug.org/tex/texinfo.tex
-% ftp://ctan.org/macros/texinfo/texinfo.tex
-% (and all CTAN mirrors, finger ctan@ctan.org for a list).
-% /home/gd/gnu/doc/texinfo.tex on the GNU machines.
-% The texinfo.tex in any given Texinfo distribution could well be out
-% of date, so if that's what you're using, please check.
-% There is a small home page for Texinfo at http://texinfo.org/.
-%
-% Send bug reports to bug-texinfo@gnu.org. Please include including a
-% complete document in each bug report with which we can reproduce the
-% problem. Patches are, of course, greatly appreciated.
-%
-% To process a Texinfo manual with TeX, it's most reliable to use the
-% texi2dvi shell script that comes with the distribution. For a simple
-% manual foo.texi, however, you can get away with this:
-% tex foo.texi
-% texindex foo.??
-% tex foo.texi
-% tex foo.texi
-% dvips foo.dvi -o # or whatever, to process the dvi file; this makes foo.ps.
-% The extra runs of TeX get the cross-reference information correct.
-% Sometimes one run after texindex suffices, and sometimes you need more
-% than two; texi2dvi does it as many times as necessary.
-%
-% It is possible to adapt texinfo.tex for other languages. You can get
-% the existing language-specific files from ftp://ftp.gnu.org/gnu/texinfo/.
-
-\message{Loading texinfo [version \texinfoversion]:}
-
-% If in a .fmt file, print the version number
-% and turn on active characters that we couldn't do earlier because
-% they might have appeared in the input file name.
-\everyjob{\message{[Texinfo version \texinfoversion]}%
- \catcode`+=\active \catcode`\_=\active}
-
-% Save some parts of plain tex whose names we will redefine.
-\let\ptexb=\b
-\let\ptexbullet=\bullet
-\let\ptexc=\c
-\let\ptexcomma=\,
-\let\ptexdot=\.
-\let\ptexdots=\dots
-\let\ptexend=\end
-\let\ptexequiv=\equiv
-\let\ptexexclam=\!
-\let\ptexi=\i
-\let\ptexlbrace=\{
-\let\ptexrbrace=\}
-\let\ptexstar=\*
-\let\ptext=\t
-
-% We never want plain's outer \+ definition in Texinfo.
-% For @tex, we can use \tabalign.
-\let\+ = \relax
-
-% Get ready for pdf.
-\newif\ifpdf
-\ifx\pdfoutput\undefined\else
- \input pdfcolor
- \pdfoutput=1
- \pdftrue
-\fi
-
-\message{Basics,}
-\chardef\other=12
-
-% If this character appears in an error message or help string, it
-% starts a new line in the output.
-\newlinechar = `^^J
-
-% Set up fixed words for English if not already set.
-\ifx\putwordAppendix\undefined \gdef\putwordAppendix{Appendix}\fi
-\ifx\putwordChapter\undefined \gdef\putwordChapter{Chapter}\fi
-\ifx\putwordfile\undefined \gdef\putwordfile{file}\fi
-\ifx\putwordin\undefined \gdef\putwordin{in}\fi
-\ifx\putwordIndexIsEmpty\undefined \gdef\putwordIndexIsEmpty{(Index is empty)}\fi
-\ifx\putwordIndexNonexistent\undefined \gdef\putwordIndexNonexistent{(Index is nonexistent)}\fi
-\ifx\putwordInfo\undefined \gdef\putwordInfo{Info}\fi
-\ifx\putwordInstanceVariableof\undefined \gdef\putwordInstanceVariableof{Instance Variable of}\fi
-\ifx\putwordMethodon\undefined \gdef\putwordMethodon{Method on}\fi
-\ifx\putwordNoTitle\undefined \gdef\putwordNoTitle{No Title}\fi
-\ifx\putwordof\undefined \gdef\putwordof{of}\fi
-\ifx\putwordon\undefined \gdef\putwordon{on}\fi
-\ifx\putwordpage\undefined \gdef\putwordpage{page}\fi
-\ifx\putwordsection\undefined \gdef\putwordsection{section}\fi
-\ifx\putwordSection\undefined \gdef\putwordSection{Section}\fi
-\ifx\putwordsee\undefined \gdef\putwordsee{see}\fi
-\ifx\putwordSee\undefined \gdef\putwordSee{See}\fi
-\ifx\putwordShortTOC\undefined \gdef\putwordShortTOC{Short Contents}\fi
-\ifx\putwordTOC\undefined \gdef\putwordTOC{Table of Contents}\fi
-%
-\ifx\putwordMJan\undefined \gdef\putwordMJan{January}\fi
-\ifx\putwordMFeb\undefined \gdef\putwordMFeb{February}\fi
-\ifx\putwordMMar\undefined \gdef\putwordMMar{March}\fi
-\ifx\putwordMApr\undefined \gdef\putwordMApr{April}\fi
-\ifx\putwordMMay\undefined \gdef\putwordMMay{May}\fi
-\ifx\putwordMJun\undefined \gdef\putwordMJun{June}\fi
-\ifx\putwordMJul\undefined \gdef\putwordMJul{July}\fi
-\ifx\putwordMAug\undefined \gdef\putwordMAug{August}\fi
-\ifx\putwordMSep\undefined \gdef\putwordMSep{September}\fi
-\ifx\putwordMOct\undefined \gdef\putwordMOct{October}\fi
-\ifx\putwordMNov\undefined \gdef\putwordMNov{November}\fi
-\ifx\putwordMDec\undefined \gdef\putwordMDec{December}\fi
-%
-\ifx\putwordDefmac\undefined \gdef\putwordDefmac{Macro}\fi
-\ifx\putwordDefspec\undefined \gdef\putwordDefspec{Special Form}\fi
-\ifx\putwordDefvar\undefined \gdef\putwordDefvar{Variable}\fi
-\ifx\putwordDefopt\undefined \gdef\putwordDefopt{User Option}\fi
-\ifx\putwordDeftypevar\undefined\gdef\putwordDeftypevar{Variable}\fi
-\ifx\putwordDeffunc\undefined \gdef\putwordDeffunc{Function}\fi
-\ifx\putwordDeftypefun\undefined\gdef\putwordDeftypefun{Function}\fi
-
-% Ignore a token.
-%
-\def\gobble#1{}
-
-\hyphenation{ap-pen-dix}
-\hyphenation{mini-buf-fer mini-buf-fers}
-\hyphenation{eshell}
-\hyphenation{white-space}
-
-% Margin to add to right of even pages, to left of odd pages.
-\newdimen \bindingoffset
-\newdimen \normaloffset
-\newdimen\pagewidth \newdimen\pageheight
-
-% Sometimes it is convenient to have everything in the transcript file
-% and nothing on the terminal. We don't just call \tracingall here,
-% since that produces some useless output on the terminal.
-%
-\def\gloggingall{\begingroup \globaldefs = 1 \loggingall \endgroup}%
-\ifx\eTeXversion\undefined
-\def\loggingall{\tracingcommands2 \tracingstats2
- \tracingpages1 \tracingoutput1 \tracinglostchars1
- \tracingmacros2 \tracingparagraphs1 \tracingrestores1
- \showboxbreadth\maxdimen\showboxdepth\maxdimen
-}%
-\else
-\def\loggingall{\tracingcommands3 \tracingstats2
- \tracingpages1 \tracingoutput1 \tracinglostchars1
- \tracingmacros2 \tracingparagraphs1 \tracingrestores1
- \tracingscantokens1 \tracingassigns1 \tracingifs1
- \tracinggroups1 \tracingnesting2
- \showboxbreadth\maxdimen\showboxdepth\maxdimen
-}%
-\fi
-
-% For @cropmarks command.
-% Do @cropmarks to get crop marks.
-%
-\newif\ifcropmarks
-\let\cropmarks = \cropmarkstrue
-%
-% Dimensions to add cropmarks at corners.
-% Added by P. A. MacKay, 12 Nov. 1986
-%
-\newdimen\outerhsize \newdimen\outervsize % set by the paper size routines
-\newdimen\cornerlong \cornerlong=1pc
-\newdimen\cornerthick \cornerthick=.3pt
-\newdimen\topandbottommargin \topandbottommargin=.75in
-
-% Main output routine.
-\chardef\PAGE = 255
-\output = {\onepageout{\pagecontents\PAGE}}
-
-\newbox\headlinebox
-\newbox\footlinebox
-
-% \onepageout takes a vbox as an argument. Note that \pagecontents
-% does insertions, but you have to call it yourself.
-\def\onepageout#1{%
- \ifcropmarks \hoffset=0pt \else \hoffset=\normaloffset \fi
- %
- \ifodd\pageno \advance\hoffset by \bindingoffset
- \else \advance\hoffset by -\bindingoffset\fi
- %
- % Do this outside of the \shipout so @code etc. will be expanded in
- % the headline as they should be, not taken literally (outputting ''code).
- \setbox\headlinebox = \vbox{\let\hsize=\pagewidth \makeheadline}%
- \setbox\footlinebox = \vbox{\let\hsize=\pagewidth \makefootline}%
- %
- {%
- % Have to do this stuff outside the \shipout because we want it to
- % take effect in \write's, yet the group defined by the \vbox ends
- % before the \shipout runs.
- %
- \escapechar = `\\ % use backslash in output files.
- \indexdummies % don't expand commands in the output.
- \normalturnoffactive % \ in index entries must not stay \, e.g., if
- % the page break happens to be in the middle of an example.
- \shipout\vbox{%
- \ifcropmarks \vbox to \outervsize\bgroup
- \hsize = \outerhsize
- \vskip-\topandbottommargin
- \vtop to0pt{%
- \line{\ewtop\hfil\ewtop}%
- \nointerlineskip
- \line{%
- \vbox{\moveleft\cornerthick\nstop}%
- \hfill
- \vbox{\moveright\cornerthick\nstop}%
- }%
- \vss}%
- \vskip\topandbottommargin
- \line\bgroup
- \hfil % center the page within the outer (page) hsize.
- \ifodd\pageno\hskip\bindingoffset\fi
- \vbox\bgroup
- \fi
- %
- \unvbox\headlinebox
- \pagebody{#1}%
- \ifdim\ht\footlinebox > 0pt
- % Only leave this space if the footline is nonempty.
- % (We lessened \vsize for it in \oddfootingxxx.)
- % The \baselineskip=24pt in plain's \makefootline has no effect.
- \vskip 2\baselineskip
- \unvbox\footlinebox
- \fi
- %
- \ifpdf\pdfmkdest{\the\pageno}\fi
- %
- \ifcropmarks
- \egroup % end of \vbox\bgroup
- \hfil\egroup % end of (centering) \line\bgroup
- \vskip\topandbottommargin plus1fill minus1fill
- \boxmaxdepth = \cornerthick
- \vbox to0pt{\vss
- \line{%
- \vbox{\moveleft\cornerthick\nsbot}%
- \hfill
- \vbox{\moveright\cornerthick\nsbot}%
- }%
- \nointerlineskip
- \line{\ewbot\hfil\ewbot}%
- }%
- \egroup % \vbox from first cropmarks clause
- \fi
- }% end of \shipout\vbox
- }% end of group with \turnoffactive
- \advancepageno
- \ifnum\outputpenalty>-20000 \else\dosupereject\fi
-}
-
-\newinsert\margin \dimen\margin=\maxdimen
-
-\def\pagebody#1{\vbox to\pageheight{\boxmaxdepth=\maxdepth #1}}
-{\catcode`\@ =11
-\gdef\pagecontents#1{\ifvoid\topins\else\unvbox\topins\fi
-% marginal hacks, juha@viisa.uucp (Juha Takala)
-\ifvoid\margin\else % marginal info is present
- \rlap{\kern\hsize\vbox to\z@{\kern1pt\box\margin \vss}}\fi
-\dimen@=\dp#1 \unvbox#1
-\ifvoid\footins\else\vskip\skip\footins\footnoterule \unvbox\footins\fi
-\ifr@ggedbottom \kern-\dimen@ \vfil \fi}
-}
-
-% Here are the rules for the cropmarks. Note that they are
-% offset so that the space between them is truly \outerhsize or \outervsize
-% (P. A. MacKay, 12 November, 1986)
-%
-\def\ewtop{\vrule height\cornerthick depth0pt width\cornerlong}
-\def\nstop{\vbox
- {\hrule height\cornerthick depth\cornerlong width\cornerthick}}
-\def\ewbot{\vrule height0pt depth\cornerthick width\cornerlong}
-\def\nsbot{\vbox
- {\hrule height\cornerlong depth\cornerthick width\cornerthick}}
-
-% Parse an argument, then pass it to #1. The argument is the rest of
-% the input line (except we remove a trailing comment). #1 should be a
-% macro which expects an ordinary undelimited TeX argument.
-%
-\def\parsearg#1{%
- \let\next = #1%
- \begingroup
- \obeylines
- \futurelet\temp\parseargx
-}
-
-% If the next token is an obeyed space (from an @example environment or
-% the like), remove it and recurse. Otherwise, we're done.
-\def\parseargx{%
- % \obeyedspace is defined far below, after the definition of \sepspaces.
- \ifx\obeyedspace\temp
- \expandafter\parseargdiscardspace
- \else
- \expandafter\parseargline
- \fi
-}
-
-% Remove a single space (as the delimiter token to the macro call).
-{\obeyspaces %
- \gdef\parseargdiscardspace {\futurelet\temp\parseargx}}
-
-{\obeylines %
- \gdef\parseargline#1^^M{%
- \endgroup % End of the group started in \parsearg.
- %
- % First remove any @c comment, then any @comment.
- % Result of each macro is put in \toks0.
- \argremovec #1\c\relax %
- \expandafter\argremovecomment \the\toks0 \comment\relax %
- %
- % Call the caller's macro, saved as \next in \parsearg.
- \expandafter\next\expandafter{\the\toks0}%
- }%
-}
-
-% Since all \c{,omment} does is throw away the argument, we can let TeX
-% do that for us. The \relax here is matched by the \relax in the call
-% in \parseargline; it could be more or less anything, its purpose is
-% just to delimit the argument to the \c.
-\def\argremovec#1\c#2\relax{\toks0 = {#1}}
-\def\argremovecomment#1\comment#2\relax{\toks0 = {#1}}
-
-% \argremovec{,omment} might leave us with trailing spaces, though; e.g.,
-% @end itemize @c foo
-% will have two active spaces as part of the argument with the
-% `itemize'. Here we remove all active spaces from #1, and assign the
-% result to \toks0.
-%
-% This loses if there are any *other* active characters besides spaces
-% in the argument -- _ ^ +, for example -- since they get expanded.
-% Fortunately, Texinfo does not define any such commands. (If it ever
-% does, the catcode of the characters in questionwill have to be changed
-% here.) But this means we cannot call \removeactivespaces as part of
-% \argremovec{,omment}, since @c uses \parsearg, and thus the argument
-% that \parsearg gets might well have any character at all in it.
-%
-\def\removeactivespaces#1{%
- \begingroup
- \ignoreactivespaces
- \edef\temp{#1}%
- \global\toks0 = \expandafter{\temp}%
- \endgroup
-}
-
-% Change the active space to expand to nothing.
-%
-\begingroup
- \obeyspaces
- \gdef\ignoreactivespaces{\obeyspaces\let =\empty}
-\endgroup
-
-
-\def\flushcr{\ifx\par\lisppar \def\next##1{}\else \let\next=\relax \fi \next}
-
-%% These are used to keep @begin/@end levels from running away
-%% Call \inENV within environments (after a \begingroup)
-\newif\ifENV \ENVfalse \def\inENV{\ifENV\relax\else\ENVtrue\fi}
-\def\ENVcheck{%
-\ifENV\errmessage{Still within an environment; press RETURN to continue}
-\endgroup\fi} % This is not perfect, but it should reduce lossage
-
-% @begin foo is the same as @foo, for now.
-\newhelp\EMsimple{Press RETURN to continue.}
-
-\outer\def\begin{\parsearg\beginxxx}
-
-\def\beginxxx #1{%
-\expandafter\ifx\csname #1\endcsname\relax
-{\errhelp=\EMsimple \errmessage{Undefined command @begin #1}}\else
-\csname #1\endcsname\fi}
-
-% @end foo executes the definition of \Efoo.
-%
-\def\end{\parsearg\endxxx}
-\def\endxxx #1{%
- \removeactivespaces{#1}%
- \edef\endthing{\the\toks0}%
- %
- \expandafter\ifx\csname E\endthing\endcsname\relax
- \expandafter\ifx\csname \endthing\endcsname\relax
- % There's no \foo, i.e., no ``environment'' foo.
- \errhelp = \EMsimple
- \errmessage{Undefined command `@end \endthing'}%
- \else
- \unmatchedenderror\endthing
- \fi
- \else
- % Everything's ok; the right environment has been started.
- \csname E\endthing\endcsname
- \fi
-}
-
-% There is an environment #1, but it hasn't been started. Give an error.
-%
-\def\unmatchedenderror#1{%
- \errhelp = \EMsimple
- \errmessage{This `@end #1' doesn't have a matching `@#1'}%
-}
-
-% Define the control sequence \E#1 to give an unmatched @end error.
-%
-\def\defineunmatchedend#1{%
- \expandafter\def\csname E#1\endcsname{\unmatchedenderror{#1}}%
-}
-
-
-% Single-spacing is done by various environments (specifically, in
-% \nonfillstart and \quotations).
-\newskip\singlespaceskip \singlespaceskip = 12.5pt
-\def\singlespace{%
- % Why was this kern here? It messes up equalizing space above and below
- % environments. --karl, 6may93
- %{\advance \baselineskip by -\singlespaceskip
- %\kern \baselineskip}%
- \setleading \singlespaceskip
-}
-
-%% Simple single-character @ commands
-
-% @@ prints an @
-% Kludge this until the fonts are right (grr).
-\def\@{{\tt\char64}}
-
-% This is turned off because it was never documented
-% and you can use @w{...} around a quote to suppress ligatures.
-%% Define @` and @' to be the same as ` and '
-%% but suppressing ligatures.
-%\def\`{{`}}
-%\def\'{{'}}
-
-% Used to generate quoted braces.
-\def\mylbrace {{\tt\char123}}
-\def\myrbrace {{\tt\char125}}
-\let\{=\mylbrace
-\let\}=\myrbrace
-\begingroup
- % Definitions to produce actual \{ & \} command in an index.
- \catcode`\{ = 12 \catcode`\} = 12
- \catcode`\[ = 1 \catcode`\] = 2
- \catcode`\@ = 0 \catcode`\\ = 12
- @gdef@lbracecmd[\{]%
- @gdef@rbracecmd[\}]%
-@endgroup
-
-% Accents: @, @dotaccent @ringaccent @ubaraccent @udotaccent
-% Others are defined by plain TeX: @` @' @" @^ @~ @= @v @H.
-\let\, = \c
-\let\dotaccent = \.
-\def\ringaccent#1{{\accent23 #1}}
-\let\tieaccent = \t
-\let\ubaraccent = \b
-\let\udotaccent = \d
-
-% Other special characters: @questiondown @exclamdown
-% Plain TeX defines: @AA @AE @O @OE @L (and lowercase versions) @ss.
-\def\questiondown{?`}
-\def\exclamdown{!`}
-
-% Dotless i and dotless j, used for accents.
-\def\imacro{i}
-\def\jmacro{j}
-\def\dotless#1{%
- \def\temp{#1}%
- \ifx\temp\imacro \ptexi
- \else\ifx\temp\jmacro \j
- \else \errmessage{@dotless can be used only with i or j}%
- \fi\fi
-}
-
-% Be sure we're in horizontal mode when doing a tie, since we make space
-% equivalent to this in @example-like environments. Otherwise, a space
-% at the beginning of a line will start with \penalty -- and
-% since \penalty is valid in vertical mode, we'd end up putting the
-% penalty on the vertical list instead of in the new paragraph.
-{\catcode`@ = 11
- % Avoid using \@M directly, because that causes trouble
- % if the definition is written into an index file.
- \global\let\tiepenalty = \@M
- \gdef\tie{\leavevmode\penalty\tiepenalty\ }
-}
-
-% @: forces normal size whitespace following.
-\def\:{\spacefactor=1000 }
-
-% @* forces a line break.
-\def\*{\hfil\break\hbox{}\ignorespaces}
-
-% @. is an end-of-sentence period.
-\def\.{.\spacefactor=3000 }
-
-% @! is an end-of-sentence bang.
-\def\!{!\spacefactor=3000 }
-
-% @? is an end-of-sentence query.
-\def\?{?\spacefactor=3000 }
-
-% @w prevents a word break. Without the \leavevmode, @w at the
-% beginning of a paragraph, when TeX is still in vertical mode, would
-% produce a whole line of output instead of starting the paragraph.
-\def\w#1{\leavevmode\hbox{#1}}
-
-% @group ... @end group forces ... to be all on one page, by enclosing
-% it in a TeX vbox. We use \vtop instead of \vbox to construct the box
-% to keep its height that of a normal line. According to the rules for
-% \topskip (p.114 of the TeXbook), the glue inserted is
-% max (\topskip - \ht (first item), 0). If that height is large,
-% therefore, no glue is inserted, and the space between the headline and
-% the text is small, which looks bad.
-%
-\def\group{\begingroup
- \ifnum\catcode13=\active \else
- \errhelp = \groupinvalidhelp
- \errmessage{@group invalid in context where filling is enabled}%
- \fi
- %
- % The \vtop we start below produces a box with normal height and large
- % depth; thus, TeX puts \baselineskip glue before it, and (when the
- % next line of text is done) \lineskip glue after it. (See p.82 of
- % the TeXbook.) Thus, space below is not quite equal to space
- % above. But it's pretty close.
- \def\Egroup{%
- \egroup % End the \vtop.
- \endgroup % End the \group.
- }%
- %
- \vtop\bgroup
- % We have to put a strut on the last line in case the @group is in
- % the midst of an example, rather than completely enclosing it.
- % Otherwise, the interline space between the last line of the group
- % and the first line afterwards is too small. But we can't put the
- % strut in \Egroup, since there it would be on a line by itself.
- % Hence this just inserts a strut at the beginning of each line.
- \everypar = {\strut}%
- %
- % Since we have a strut on every line, we don't need any of TeX's
- % normal interline spacing.
- \offinterlineskip
- %
- % OK, but now we have to do something about blank
- % lines in the input in @example-like environments, which normally
- % just turn into \lisppar, which will insert no space now that we've
- % turned off the interline space. Simplest is to make them be an
- % empty paragraph.
- \ifx\par\lisppar
- \edef\par{\leavevmode \par}%
- %
- % Reset ^^M's definition to new definition of \par.
- \obeylines
- \fi
- %
- % Do @comment since we are called inside an environment such as
- % @example, where each end-of-line in the input causes an
- % end-of-line in the output. We don't want the end-of-line after
- % the `@group' to put extra space in the output. Since @group
- % should appear on a line by itself (according to the Texinfo
- % manual), we don't worry about eating any user text.
- \comment
-}
-%
-% TeX puts in an \escapechar (i.e., `@') at the beginning of the help
-% message, so this ends up printing `@group can only ...'.
-%
-\newhelp\groupinvalidhelp{%
-group can only be used in environments such as @example,^^J%
-where each line of input produces a line of output.}
-
-% @need space-in-mils
-% forces a page break if there is not space-in-mils remaining.
-
-\newdimen\mil \mil=0.001in
-
-\def\need{\parsearg\needx}
-
-% Old definition--didn't work.
-%\def\needx #1{\par %
-%% This method tries to make TeX break the page naturally
-%% if the depth of the box does not fit.
-%{\baselineskip=0pt%
-%\vtop to #1\mil{\vfil}\kern -#1\mil\nobreak
-%\prevdepth=-1000pt
-%}}
-
-\def\needx#1{%
- % Go into vertical mode, so we don't make a big box in the middle of a
- % paragraph.
- \par
- %
- % Don't add any leading before our big empty box, but allow a page
- % break, since the best break might be right here.
- \allowbreak
- \nointerlineskip
- \vtop to #1\mil{\vfil}%
- %
- % TeX does not even consider page breaks if a penalty added to the
- % main vertical list is 10000 or more. But in order to see if the
- % empty box we just added fits on the page, we must make it consider
- % page breaks. On the other hand, we don't want to actually break the
- % page after the empty box. So we use a penalty of 9999.
- %
- % There is an extremely small chance that TeX will actually break the
- % page at this \penalty, if there are no other feasible breakpoints in
- % sight. (If the user is using lots of big @group commands, which
- % almost-but-not-quite fill up a page, TeX will have a hard time doing
- % good page breaking, for example.) However, I could not construct an
- % example where a page broke at this \penalty; if it happens in a real
- % document, then we can reconsider our strategy.
- \penalty9999
- %
- % Back up by the size of the box, whether we did a page break or not.
- \kern -#1\mil
- %
- % Do not allow a page break right after this kern.
- \nobreak
-}
-
-% @br forces paragraph break
-
-\let\br = \par
-
-% @dots{} output an ellipsis using the current font.
-% We do .5em per period so that it has the same spacing in a typewriter
-% font as three actual period characters.
-%
-\def\dots{%
- \leavevmode
- \hbox to 1.5em{%
- \hskip 0pt plus 0.25fil minus 0.25fil
- .\hss.\hss.%
- \hskip 0pt plus 0.5fil minus 0.5fil
- }%
-}
-
-% @enddots{} is an end-of-sentence ellipsis.
-%
-\def\enddots{%
- \leavevmode
- \hbox to 2em{%
- \hskip 0pt plus 0.25fil minus 0.25fil
- .\hss.\hss.\hss.%
- \hskip 0pt plus 0.5fil minus 0.5fil
- }%
- \spacefactor=3000
-}
-
-
-% @page forces the start of a new page
-%
-\def\page{\par\vfill\supereject}
-
-% @exdent text....
-% outputs text on separate line in roman font, starting at standard page margin
-
-% This records the amount of indent in the innermost environment.
-% That's how much \exdent should take out.
-\newskip\exdentamount
-
-% This defn is used inside fill environments such as @defun.
-\def\exdent{\parsearg\exdentyyy}
-\def\exdentyyy #1{{\hfil\break\hbox{\kern -\exdentamount{\rm#1}}\hfil\break}}
-
-% This defn is used inside nofill environments such as @example.
-\def\nofillexdent{\parsearg\nofillexdentyyy}
-\def\nofillexdentyyy #1{{\advance \leftskip by -\exdentamount
-\leftline{\hskip\leftskip{\rm#1}}}}
-
-% @inmargin{TEXT} puts TEXT in the margin next to the current paragraph.
-
-\def\inmargin#1{%
-\strut\vadjust{\nobreak\kern-\strutdepth
- \vtop to \strutdepth{\baselineskip\strutdepth\vss
- \llap{\rightskip=\inmarginspacing \vbox{\noindent #1}}\null}}}
-\newskip\inmarginspacing \inmarginspacing=1cm
-\def\strutdepth{\dp\strutbox}
-
-%\hbox{{\rm#1}}\hfil\break}}
-
-% @include file insert text of that file as input.
-% Allow normal characters that we make active in the argument (a file name).
-\def\include{\begingroup
- \catcode`\\=12
- \catcode`~=12
- \catcode`^=12
- \catcode`_=12
- \catcode`|=12
- \catcode`<=12
- \catcode`>=12
- \catcode`+=12
- \parsearg\includezzz}
-% Restore active chars for included file.
-\def\includezzz#1{\endgroup\begingroup
- % Read the included file in a group so nested @include's work.
- \def\thisfile{#1}%
- \input\thisfile
-\endgroup}
-
-\def\thisfile{}
-
-% @center line outputs that line, centered
-
-\def\center{\parsearg\centerzzz}
-\def\centerzzz #1{{\advance\hsize by -\leftskip
-\advance\hsize by -\rightskip
-\centerline{#1}}}
-
-% @sp n outputs n lines of vertical space
-
-\def\sp{\parsearg\spxxx}
-\def\spxxx #1{\vskip #1\baselineskip}
-
-% @comment ...line which is ignored...
-% @c is the same as @comment
-% @ignore ... @end ignore is another way to write a comment
-
-\def\comment{\begingroup \catcode`\^^M=\other%
-\catcode`\@=\other \catcode`\{=\other \catcode`\}=\other%
-\commentxxx}
-{\catcode`\^^M=\other \gdef\commentxxx#1^^M{\endgroup}}
-
-\let\c=\comment
-
-% @paragraphindent NCHARS
-% We'll use ems for NCHARS, close enough.
-% We cannot implement @paragraphindent asis, though.
-%
-\def\asisword{asis} % no translation, these are keywords
-\def\noneword{none}
-%
-\def\paragraphindent{\parsearg\doparagraphindent}
-\def\doparagraphindent#1{%
- \def\temp{#1}%
- \ifx\temp\asisword
- \else
- \ifx\temp\noneword
- \defaultparindent = 0pt
- \else
- \defaultparindent = #1em
- \fi
- \fi
- \parindent = \defaultparindent
-}
-
-% @exampleindent NCHARS
-% We'll use ems for NCHARS like @paragraphindent.
-% It seems @exampleindent asis isn't necessary, but
-% I preserve it to make it similar to @paragraphindent.
-\def\exampleindent{\parsearg\doexampleindent}
-\def\doexampleindent#1{%
- \def\temp{#1}%
- \ifx\temp\asisword
- \else
- \ifx\temp\noneword
- \lispnarrowing = 0pt
- \else
- \lispnarrowing = #1em
- \fi
- \fi
-}
-
-% @asis just yields its argument. Used with @table, for example.
-%
-\def\asis#1{#1}
-
-% @math means output in math mode.
-% We don't use $'s directly in the definition of \math because control
-% sequences like \math are expanded when the toc file is written. Then,
-% we read the toc file back, the $'s will be normal characters (as they
-% should be, according to the definition of Texinfo). So we must use a
-% control sequence to switch into and out of math mode.
-%
-% This isn't quite enough for @math to work properly in indices, but it
-% seems unlikely it will ever be needed there.
-%
-\let\implicitmath = $
-\def\math#1{\implicitmath #1\implicitmath}
-
-% @bullet and @minus need the same treatment as @math, just above.
-\def\bullet{\implicitmath\ptexbullet\implicitmath}
-\def\minus{\implicitmath-\implicitmath}
-
-% @refill is a no-op.
-\let\refill=\relax
-
-% If working on a large document in chapters, it is convenient to
-% be able to disable indexing, cross-referencing, and contents, for test runs.
-% This is done with @novalidate (before @setfilename).
-%
-\newif\iflinks \linkstrue % by default we want the aux files.
-\let\novalidate = \linksfalse
-
-% @setfilename is done at the beginning of every texinfo file.
-% So open here the files we need to have open while reading the input.
-% This makes it possible to make a .fmt file for texinfo.
-\def\setfilename{%
- \iflinks
- \readauxfile
- \fi % \openindices needs to do some work in any case.
- \openindices
- \fixbackslash % Turn off hack to swallow `\input texinfo'.
- \global\let\setfilename=\comment % Ignore extra @setfilename cmds.
- %
- % If texinfo.cnf is present on the system, read it.
- % Useful for site-wide @afourpaper, etc.
- % Just to be on the safe side, close the input stream before the \input.
- \openin 1 texinfo.cnf
- \ifeof1 \let\temp=\relax \else \def\temp{\input texinfo.cnf }\fi
- \closein1
- \temp
- %
- \comment % Ignore the actual filename.
-}
-
-% Called from \setfilename.
-%
-\def\openindices{%
- \newindex{cp}%
- \newcodeindex{fn}%
- \newcodeindex{vr}%
- \newcodeindex{tp}%
- \newcodeindex{ky}%
- \newcodeindex{pg}%
-}
-
-% @bye.
-\outer\def\bye{\pagealignmacro\tracingstats=1\ptexend}
-
-
-\message{pdf,}
-% adobe `portable' document format
-
-\newcount\tempnum
-\newcount\lnkcount
-\newtoks\filename
-\newcount\filenamelength
-\newcount\pgn
-
-\ifpdf
-\def\pdfmkdest#1{\pdfdest name{#1@} xyz}
-\def\pdfmkpgn#1{#1@}
-
-% Adding outlines to PDF; macros for calculating structure of outlines
-% come from Petr Olsak
-\def\expnumber#1{\expandafter\ifx\csname#1\endcsname\relax 0%
- \else \csname#1\endcsname \fi}
-\def\advancenumber#1{\tempnum=\expnumber{#1}\relax
- \advance\tempnum by1
- \expandafter\xdef\csname#1\endcsname{\the\tempnum}}
-\def\pdfmakeoutlines{{%
- \openin 1 \jobname.toc
- \ifeof 1\else\bgroup
- \closein 1
- \def\code##1{##1}
- \def\file##1{##1}
- \def\TeX##1{TeX}
- \def\tt{}
- \def\char{char}
- \def\samp##1{##1}
- \def\kbd##1{##1}
- \def\key##1{##1}
- \def\rawbackslashxx{\string\\}
- \def\chapentry ##1##2##3{}
- \def\unnumbchapentry ##1##2{}
- \def\secentry ##1##2##3##4{\advancenumber{chap##2}}
- \def\unnumbsecentry ##1##2{}
- \def\subsecentry ##1##2##3##4##5{\advancenumber{sec##2.##3}}
- \def\unnumbsubsecentry ##1##2{}
- \def\subsubsecentry ##1##2##3##4##5##6{\advancenumber{subsec##2.##3.##4}}
- \def\unnumbsubsubsecentry ##1##2{}
- \input \jobname.toc
- \def\chapentry ##1##2##3{%
- \pdfoutline goto name{\pdfmkpgn{##3}}count-\expnumber{chap##2}{##1}}
- \def\unnumbchapentry ##1##2{%
- \pdfoutline goto name{\pdfmkpgn{##2}}{##1}}
- \def\secentry ##1##2##3##4{%
- \pdfoutline goto name{\pdfmkpgn{##4}}count-\expnumber{sec##2.##3}{##1}}
- \def\unnumbsecentry ##1##2{%
- \pdfoutline goto name{\pdfmkpgn{##2}}{##1}}
- \def\subsecentry ##1##2##3##4##5{%
- \pdfoutline goto name{\pdfmkpgn{##5}}count-\expnumber{subsec##2.##3.##4}{##1}}
- \def\unnumbsubsecentry ##1##2{%
- \pdfoutline goto name{\pdfmkpgn{##2}}{##1}}
- \def\subsubsecentry ##1##2##3##4##5##6{%
- \pdfoutline goto name{\pdfmkpgn{##6}}{##1}}
- \def\unnumbsubsubsecentry ##1##2{%
- \pdfoutline goto name{\pdfmkpgn{##2}}{##1}}
- \input \jobname.toc
- \egroup\fi
-}}
-\pdfmakeoutlines
-
-\def\makelinks #1,{%
- \def\params{#1}\def\E{END}%
- \ifx\params\E
- \let\nextmakelinks=\relax
- \else
- \let\nextmakelinks=\makelinks
- \ifnum\lnkcount>0,\fi
- \picknum{#1}%
- \Blue\pdfannotlink attr{/Border [0 0 0]}
- goto name{\pdfmkpgn{\the\pgn}}%
- #1%
- \advance\lnkcount by 1%
- \Black\pdfendlink
- \fi
- \nextmakelinks
-}
-
-\def\picknum#1{\expandafter\pn#1}
-\def\pn#1{%
- \def\p{#1}%
- \ifx\p\lbrace
- \let\nextpn=\ppn
- \else
- \let\nextpn=\ppnn
- \def\first{#1}
- \fi
- \nextpn
-}
-\def\ppn#1{\pgn=#1\gobble}
-\def\ppnn{\pgn=\first}
-\def\pdfmklnk#1{\lnkcount=0\makelinks #1,END,}
-
-\def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks}
-\def\skipspaces#1{\def\PP{#1}\def\D{|}%
- \ifx\PP\D\let\nextsp\relax
- \else\let\nextsp\skipspaces
- \ifx\p\space\else\addtokens{\filename}{\PP}%
- \advance\filenamelength by 1
- \fi
- \fi
- \nextsp}
-\def\getfilename#1{\filenamelength=0\expandafter\skipspaces#1|\relax}
-
-\def\pdflink#1{%
- \leavevmode\Red
- \begingroup
- \normalturnoffactive\def\@{@}%
- \pdfannotlink
- attr{/Border [0 0 0]}%
- user{/Subtype /Link /A << /S /URI /URI (#1) >>}%
- \endgroup
-}
-
-\else
-\let\pdflink = \gobble
-\fi % end \ifpdf
-
-\message{fonts,}
-% Font-change commands.
-
-% Texinfo sort of supports the sans serif font style, which plain TeX does not.
-% So we set up a \sf analogous to plain's \rm, etc.
-\newfam\sffam
-\def\sf{\fam=\sffam \tensf}
-\let\li = \sf % Sometimes we call it \li, not \sf.
-
-% We don't need math for this one.
-\def\ttsl{\tenttsl}
-
-% Use Computer Modern fonts at \magstephalf (11pt).
-\newcount\mainmagstep
-\mainmagstep=\magstephalf
-
-% Set the font macro #1 to the font named #2, adding on the
-% specified font prefix (normally `cm').
-% #3 is the font's design size, #4 is a scale factor
-\def\setfont#1#2#3#4{\font#1=\fontprefix#2#3 scaled #4}
-
-% Use cm as the default font prefix.
-% To specify the font prefix, you must define \fontprefix
-% before you read in texinfo.tex.
-\ifx\fontprefix\undefined
-\def\fontprefix{cm}
-\fi
-% Support font families that don't use the same naming scheme as CM.
-\def\rmshape{r}
-\def\rmbshape{bx} %where the normal face is bold
-\def\bfshape{b}
-\def\bxshape{bx}
-\def\ttshape{tt}
-\def\ttbshape{tt}
-\def\ttslshape{sltt}
-\def\itshape{ti}
-\def\itbshape{bxti}
-\def\slshape{sl}
-\def\slbshape{bxsl}
-\def\sfshape{ss}
-\def\sfbshape{ss}
-\def\scshape{csc}
-\def\scbshape{csc}
-
-\ifx\bigger\relax
-\let\mainmagstep=\magstep1
-\setfont\textrm\rmshape{12}{1000}
-\setfont\texttt\ttshape{12}{1000}
-\else
-\setfont\textrm\rmshape{10}{\mainmagstep}
-\setfont\texttt\ttshape{10}{\mainmagstep}
-\fi
-% Instead of cmb10, you many want to use cmbx10.
-% cmbx10 is a prettier font on its own, but cmb10
-% looks better when embedded in a line with cmr10.
-\setfont\textbf\bfshape{10}{\mainmagstep}
-\setfont\textit\itshape{10}{\mainmagstep}
-\setfont\textsl\slshape{10}{\mainmagstep}
-\setfont\textsf\sfshape{10}{\mainmagstep}
-\setfont\textsc\scshape{10}{\mainmagstep}
-\setfont\textttsl\ttslshape{10}{\mainmagstep}
-\font\texti=cmmi10 scaled \mainmagstep
-\font\textsy=cmsy10 scaled \mainmagstep
-
-% A few fonts for @defun, etc.
-\setfont\defbf\bxshape{10}{\magstep1} %was 1314
-\setfont\deftt\ttshape{10}{\magstep1}
-\def\df{\let\tentt=\deftt \let\tenbf = \defbf \bf}
-
-% Fonts for indices and small examples (9pt).
-% We actually use the slanted font rather than the italic,
-% because texinfo normally uses the slanted fonts for that.
-% Do not make many font distinctions in general in the index, since they
-% aren't very useful.
-\setfont\ninett\ttshape{9}{1000}
-\setfont\ninettsl\ttslshape{10}{900}
-\setfont\indrm\rmshape{9}{1000}
-\setfont\indit\itshape{9}{1000}
-\setfont\indsl\slshape{9}{1000}
-\let\indtt=\ninett
-\let\indttsl=\ninettsl
-\let\indsf=\indrm
-\let\indbf=\indrm
-\setfont\indsc\scshape{10}{900}
-\font\indi=cmmi9
-\font\indsy=cmsy9
-
-% Fonts for title page:
-\setfont\titlerm\rmbshape{12}{\magstep3}
-\setfont\titleit\itbshape{10}{\magstep4}
-\setfont\titlesl\slbshape{10}{\magstep4}
-\setfont\titlett\ttbshape{12}{\magstep3}
-\setfont\titlettsl\ttslshape{10}{\magstep4}
-\setfont\titlesf\sfbshape{17}{\magstep1}
-\let\titlebf=\titlerm
-\setfont\titlesc\scbshape{10}{\magstep4}
-\font\titlei=cmmi12 scaled \magstep3
-\font\titlesy=cmsy10 scaled \magstep4
-\def\authorrm{\secrm}
-
-% Chapter (and unnumbered) fonts (17.28pt).
-\setfont\chaprm\rmbshape{12}{\magstep2}
-\setfont\chapit\itbshape{10}{\magstep3}
-\setfont\chapsl\slbshape{10}{\magstep3}
-\setfont\chaptt\ttbshape{12}{\magstep2}
-\setfont\chapttsl\ttslshape{10}{\magstep3}
-\setfont\chapsf\sfbshape{17}{1000}
-\let\chapbf=\chaprm
-\setfont\chapsc\scbshape{10}{\magstep3}
-\font\chapi=cmmi12 scaled \magstep2
-\font\chapsy=cmsy10 scaled \magstep3
-
-% Section fonts (14.4pt).
-\setfont\secrm\rmbshape{12}{\magstep1}
-\setfont\secit\itbshape{10}{\magstep2}
-\setfont\secsl\slbshape{10}{\magstep2}
-\setfont\sectt\ttbshape{12}{\magstep1}
-\setfont\secttsl\ttslshape{10}{\magstep2}
-\setfont\secsf\sfbshape{12}{\magstep1}
-\let\secbf\secrm
-\setfont\secsc\scbshape{10}{\magstep2}
-\font\seci=cmmi12 scaled \magstep1
-\font\secsy=cmsy10 scaled \magstep2
-
-% \setfont\ssecrm\bxshape{10}{\magstep1} % This size an font looked bad.
-% \setfont\ssecit\itshape{10}{\magstep1} % The letters were too crowded.
-% \setfont\ssecsl\slshape{10}{\magstep1}
-% \setfont\ssectt\ttshape{10}{\magstep1}
-% \setfont\ssecsf\sfshape{10}{\magstep1}
-
-%\setfont\ssecrm\bfshape{10}{1315} % Note the use of cmb rather than cmbx.
-%\setfont\ssecit\itshape{10}{1315} % Also, the size is a little larger than
-%\setfont\ssecsl\slshape{10}{1315} % being scaled magstep1.
-%\setfont\ssectt\ttshape{10}{1315}
-%\setfont\ssecsf\sfshape{10}{1315}
-
-%\let\ssecbf=\ssecrm
-
-% Subsection fonts (13.15pt).
-\setfont\ssecrm\rmbshape{12}{\magstephalf}
-\setfont\ssecit\itbshape{10}{1315}
-\setfont\ssecsl\slbshape{10}{1315}
-\setfont\ssectt\ttbshape{12}{\magstephalf}
-\setfont\ssecttsl\ttslshape{10}{1315}
-\setfont\ssecsf\sfbshape{12}{\magstephalf}
-\let\ssecbf\ssecrm
-\setfont\ssecsc\scbshape{10}{\magstep1}
-\font\sseci=cmmi12 scaled \magstephalf
-\font\ssecsy=cmsy10 scaled 1315
-% The smallcaps and symbol fonts should actually be scaled \magstep1.5,
-% but that is not a standard magnification.
-
-% In order for the font changes to affect most math symbols and letters,
-% we have to define the \textfont of the standard families. Since
-% texinfo doesn't allow for producing subscripts and superscripts, we
-% don't bother to reset \scriptfont and \scriptscriptfont (which would
-% also require loading a lot more fonts).
-%
-\def\resetmathfonts{%
- \textfont0 = \tenrm \textfont1 = \teni \textfont2 = \tensy
- \textfont\itfam = \tenit \textfont\slfam = \tensl \textfont\bffam = \tenbf
- \textfont\ttfam = \tentt \textfont\sffam = \tensf
-}
-
-
-% The font-changing commands redefine the meanings of \tenSTYLE, instead
-% of just \STYLE. We do this so that font changes will continue to work
-% in math mode, where it is the current \fam that is relevant in most
-% cases, not the current font. Plain TeX does \def\bf{\fam=\bffam
-% \tenbf}, for example. By redefining \tenbf, we obviate the need to
-% redefine \bf itself.
-\def\textfonts{%
- \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl
- \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc
- \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy \let\tenttsl=\textttsl
- \resetmathfonts}
-\def\titlefonts{%
- \let\tenrm=\titlerm \let\tenit=\titleit \let\tensl=\titlesl
- \let\tenbf=\titlebf \let\tentt=\titlett \let\smallcaps=\titlesc
- \let\tensf=\titlesf \let\teni=\titlei \let\tensy=\titlesy
- \let\tenttsl=\titlettsl
- \resetmathfonts \setleading{25pt}}
-\def\titlefont#1{{\titlefonts\rm #1}}
-\def\chapfonts{%
- \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl
- \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc
- \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy \let\tenttsl=\chapttsl
- \resetmathfonts \setleading{19pt}}
-\def\secfonts{%
- \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl
- \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc
- \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy \let\tenttsl=\secttsl
- \resetmathfonts \setleading{16pt}}
-\def\subsecfonts{%
- \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl
- \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc
- \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy \let\tenttsl=\ssecttsl
- \resetmathfonts \setleading{15pt}}
-\let\subsubsecfonts = \subsecfonts % Maybe make sssec fonts scaled magstephalf?
-\def\indexfonts{%
- \let\tenrm=\indrm \let\tenit=\indit \let\tensl=\indsl
- \let\tenbf=\indbf \let\tentt=\indtt \let\smallcaps=\indsc
- \let\tensf=\indsf \let\teni=\indi \let\tensy=\indsy \let\tenttsl=\indttsl
- \resetmathfonts \setleading{12pt}}
-
-% Set up the default fonts, so we can use them for creating boxes.
-%
-\textfonts
-
-% Define these so they can be easily changed for other fonts.
-\def\angleleft{$\langle$}
-\def\angleright{$\rangle$}
-
-% Count depth in font-changes, for error checks
-\newcount\fontdepth \fontdepth=0
-
-% Fonts for short table of contents.
-\setfont\shortcontrm\rmshape{12}{1000}
-\setfont\shortcontbf\bxshape{12}{1000}
-\setfont\shortcontsl\slshape{12}{1000}
-
-%% Add scribe-like font environments, plus @l for inline lisp (usually sans
-%% serif) and @ii for TeX italic
-
-% \smartitalic{ARG} outputs arg in italics, followed by an italic correction
-% unless the following character is such as not to need one.
-\def\smartitalicx{\ifx\next,\else\ifx\next-\else\ifx\next.\else\/\fi\fi\fi}
-\def\smartslanted#1{{\sl #1}\futurelet\next\smartitalicx}
-\def\smartitalic#1{{\it #1}\futurelet\next\smartitalicx}
-
-\let\i=\smartitalic
-\let\var=\smartslanted
-\let\dfn=\smartslanted
-\let\emph=\smartitalic
-\let\cite=\smartslanted
-
-\def\b#1{{\bf #1}}
-\let\strong=\b
-
-% We can't just use \exhyphenpenalty, because that only has effect at
-% the end of a paragraph. Restore normal hyphenation at the end of the
-% group within which \nohyphenation is presumably called.
-%
-\def\nohyphenation{\hyphenchar\font = -1 \aftergroup\restorehyphenation}
-\def\restorehyphenation{\hyphenchar\font = `- }
-
-\def\t#1{%
- {\tt \rawbackslash \frenchspacing #1}%
- \null
-}
-\let\ttfont=\t
-\def\samp#1{`\tclose{#1}'\null}
-\setfont\smallrm\rmshape{8}{1000}
-\font\smallsy=cmsy9
-\def\key#1{{\smallrm\textfont2=\smallsy \leavevmode\hbox{%
- \raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{%
- \vbox{\hrule\kern-0.4pt
- \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}%
- \kern-0.4pt\hrule}%
- \kern-.06em\raise0.4pt\hbox{\angleright}}}}
-% The old definition, with no lozenge:
-%\def\key #1{{\ttsl \nohyphenation \uppercase{#1}}\null}
-\def\ctrl #1{{\tt \rawbackslash \hat}#1}
-
-% @file, @option are the same as @samp.
-\let\file=\samp
-\let\option=\samp
-
-% @code is a modification of @t,
-% which makes spaces the same size as normal in the surrounding text.
-\def\tclose#1{%
- {%
- % Change normal interword space to be same as for the current font.
- \spaceskip = \fontdimen2\font
- %
- % Switch to typewriter.
- \tt
- %
- % But `\ ' produces the large typewriter interword space.
- \def\ {{\spaceskip = 0pt{} }}%
- %
- % Turn off hyphenation.
- \nohyphenation
- %
- \rawbackslash
- \frenchspacing
- #1%
- }%
- \null
-}
-
-% We *must* turn on hyphenation at `-' and `_' in \code.
-% Otherwise, it is too hard to avoid overfull hboxes
-% in the Emacs manual, the Library manual, etc.
-
-% Unfortunately, TeX uses one parameter (\hyphenchar) to control
-% both hyphenation at - and hyphenation within words.
-% We must therefore turn them both off (\tclose does that)
-% and arrange explicitly to hyphenate at a dash.
-% -- rms.
-{
- \catcode`\-=\active
- \catcode`\_=\active
- %
- \global\def\code{\begingroup
- \catcode`\-=\active \let-\codedash
- \catcode`\_=\active \let_\codeunder
- \codex
- }
- %
- % If we end up with any active - characters when handling the index,
- % just treat them as a normal -.
- \global\def\indexbreaks{\catcode`\-=\active \let-\realdash}
-}
-
-\def\realdash{-}
-\def\codedash{-\discretionary{}{}{}}
-\def\codeunder{\ifusingtt{\normalunderscore\discretionary{}{}{}}{\_}}
-\def\codex #1{\tclose{#1}\endgroup}
-
-%\let\exp=\tclose %Was temporary
-
-% @kbd is like @code, except that if the argument is just one @key command,
-% then @kbd has no effect.
-
-% @kbdinputstyle -- arg is `distinct' (@kbd uses slanted tty font always),
-% `example' (@kbd uses ttsl only inside of @example and friends),
-% or `code' (@kbd uses normal tty font always).
-\def\kbdinputstyle{\parsearg\kbdinputstylexxx}
-\def\kbdinputstylexxx#1{%
- \def\arg{#1}%
- \ifx\arg\worddistinct
- \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}%
- \else\ifx\arg\wordexample
- \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\tt}%
- \else\ifx\arg\wordcode
- \gdef\kbdexamplefont{\tt}\gdef\kbdfont{\tt}%
- \fi\fi\fi
-}
-\def\worddistinct{distinct}
-\def\wordexample{example}
-\def\wordcode{code}
-
-% Default is kbdinputdistinct. (Too much of a hassle to call the macro,
-% the catcodes are wrong for parsearg to work.)
-\gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}
-
-\def\xkey{\key}
-\def\kbdfoo#1#2#3\par{\def\one{#1}\def\three{#3}\def\threex{??}%
-\ifx\one\xkey\ifx\threex\three \key{#2}%
-\else{\tclose{\kbdfont\look}}\fi
-\else{\tclose{\kbdfont\look}}\fi}
-
-% For @url, @env, @command quotes seem unnecessary, so use \code.
-\let\url=\code
-\let\env=\code
-\let\command=\code
-
-% @uref (abbreviation for `urlref') takes an optional (comma-separated)
-% second argument specifying the text to display and an optional third
-% arg as text to display instead of (rather than in addition to) the url
-% itself. First (mandatory) arg is the url. Perhaps eventually put in
-% a hypertex \special here.
-%
-\def\uref#1{\douref #1,,,\finish}
-\def\douref#1,#2,#3,#4\finish{%
- \pdflink{#1}%
- \setbox0 = \hbox{\ignorespaces #3}%
- \ifdim\wd0 > 0pt
- \unhbox0 % third arg given, show only that
- \else
- \setbox0 = \hbox{\ignorespaces #2}%
- \ifdim\wd0 > 0pt
- \ifpdf
- \unhbox0 % PDF: 2nd arg given, show only it
- \else
- \unhbox0\ (\code{#1})% DVI: 2nd arg given, show both it and url
- \fi
- \else
- \code{#1}% only url given, so show it
- \fi
- \fi
- %
- \ifpdf
- \Black\pdfendlink
- \fi
-}
-
-% rms does not like angle brackets --karl, 17may97.
-% So now @email is just like @uref, unless we are pdf.
-%
-%\def\email#1{\angleleft{\tt #1}\angleright}
-\ifpdf
- \def\email#1{\doemail#1,,\finish}
- \def\doemail#1,#2,#3\finish{%
- \pdflink{mailto:#1}%
- \setbox0 = \hbox{\ignorespaces #2}%
- \ifdim\wd0>0pt\unhbox0\else\code{#1}\fi
- \Black\pdfendlink
- }
-\else
- \let\email=\uref
-\fi
-
-% Check if we are currently using a typewriter font. Since all the
-% Computer Modern typewriter fonts have zero interword stretch (and
-% shrink), and it is reasonable to expect all typewriter fonts to have
-% this property, we can check that font parameter.
-%
-\def\ifmonospace{\ifdim\fontdimen3\font=0pt }
-
-% Typeset a dimension, e.g., `in' or `pt'. The only reason for the
-% argument is to make the input look right: @dmn{pt} instead of @dmn{}pt.
-%
-\def\dmn#1{\thinspace #1}
-
-\def\kbd#1{\def\look{#1}\expandafter\kbdfoo\look??\par}
-
-% @l was never documented to mean ``switch to the Lisp font'',
-% and it is not used as such in any manual I can find. We need it for
-% Polish suppressed-l. --karl, 22sep96.
-%\def\l#1{{\li #1}\null}
-
-% Explicit font changes: @r, @sc, undocumented @ii.
-\def\r#1{{\rm #1}} % roman font
-\def\sc#1{{\smallcaps#1}} % smallcaps font
-\def\ii#1{{\it #1}} % italic font
-
-% @acronym downcases the argument and prints in smallcaps.
-\def\acronym#1{{\smallcaps \lowercase{#1}}}
-
-% @pounds{} is a sterling sign.
-\def\pounds{{\it\$}}
-
-
-\message{page headings,}
-
-\newskip\titlepagetopglue \titlepagetopglue = 1.5in
-\newskip\titlepagebottomglue \titlepagebottomglue = 2pc
-
-% First the title page. Must do @settitle before @titlepage.
-\newif\ifseenauthor
-\newif\iffinishedtitlepage
-
-% Do an implicit @contents or @shortcontents after @end titlepage if the
-% user says @setcontentsaftertitlepage or @setshortcontentsaftertitlepage.
-%
-\newif\ifsetcontentsaftertitlepage
- \let\setcontentsaftertitlepage = \setcontentsaftertitlepagetrue
-\newif\ifsetshortcontentsaftertitlepage
- \let\setshortcontentsaftertitlepage = \setshortcontentsaftertitlepagetrue
-
-\def\shorttitlepage{\parsearg\shorttitlepagezzz}
-\def\shorttitlepagezzz #1{\begingroup\hbox{}\vskip 1.5in \chaprm \centerline{#1}%
- \endgroup\page\hbox{}\page}
-
-\def\titlepage{\begingroup \parindent=0pt \textfonts
- \let\subtitlerm=\tenrm
- \def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines}%
- %
- \def\authorfont{\authorrm \normalbaselineskip = 16pt \normalbaselines}%
- %
- % Leave some space at the very top of the page.
- \vglue\titlepagetopglue
- %
- % Now you can print the title using @title.
- \def\title{\parsearg\titlezzz}%
- \def\titlezzz##1{\leftline{\titlefonts\rm ##1}
- % print a rule at the page bottom also.
- \finishedtitlepagefalse
- \vskip4pt \hrule height 4pt width \hsize \vskip4pt}%
- % No rule at page bottom unless we print one at the top with @title.
- \finishedtitlepagetrue
- %
- % Now you can put text using @subtitle.
- \def\subtitle{\parsearg\subtitlezzz}%
- \def\subtitlezzz##1{{\subtitlefont \rightline{##1}}}%
- %
- % @author should come last, but may come many times.
- \def\author{\parsearg\authorzzz}%
- \def\authorzzz##1{\ifseenauthor\else\vskip 0pt plus 1filll\seenauthortrue\fi
- {\authorfont \leftline{##1}}}%
- %
- % Most title ``pages'' are actually two pages long, with space
- % at the top of the second. We don't want the ragged left on the second.
- \let\oldpage = \page
- \def\page{%
- \iffinishedtitlepage\else
- \finishtitlepage
- \fi
- \oldpage
- \let\page = \oldpage
- \hbox{}}%
-% \def\page{\oldpage \hbox{}}
-}
-
-\def\Etitlepage{%
- \iffinishedtitlepage\else
- \finishtitlepage
- \fi
- % It is important to do the page break before ending the group,
- % because the headline and footline are only empty inside the group.
- % If we use the new definition of \page, we always get a blank page
- % after the title page, which we certainly don't want.
- \oldpage
- \endgroup
- %
- % If they want short, they certainly want long too.
- \ifsetshortcontentsaftertitlepage
- \shortcontents
- \contents
- \global\let\shortcontents = \relax
- \global\let\contents = \relax
- \fi
- %
- \ifsetcontentsaftertitlepage
- \contents
- \global\let\contents = \relax
- \global\let\shortcontents = \relax
- \fi
- %
- \HEADINGSon
-}
-
-\def\finishtitlepage{%
- \vskip4pt \hrule height 2pt width \hsize
- \vskip\titlepagebottomglue
- \finishedtitlepagetrue
-}
-
-%%% Set up page headings and footings.
-
-\let\thispage=\folio
-
-\newtoks\evenheadline % headline on even pages
-\newtoks\oddheadline % headline on odd pages
-\newtoks\evenfootline % footline on even pages
-\newtoks\oddfootline % footline on odd pages
-
-% Now make Tex use those variables
-\headline={{\textfonts\rm \ifodd\pageno \the\oddheadline
- \else \the\evenheadline \fi}}
-\footline={{\textfonts\rm \ifodd\pageno \the\oddfootline
- \else \the\evenfootline \fi}\HEADINGShook}
-\let\HEADINGShook=\relax
-
-% Commands to set those variables.
-% For example, this is what @headings on does
-% @evenheading @thistitle|@thispage|@thischapter
-% @oddheading @thischapter|@thispage|@thistitle
-% @evenfooting @thisfile||
-% @oddfooting ||@thisfile
-
-\def\evenheading{\parsearg\evenheadingxxx}
-\def\oddheading{\parsearg\oddheadingxxx}
-\def\everyheading{\parsearg\everyheadingxxx}
-
-\def\evenfooting{\parsearg\evenfootingxxx}
-\def\oddfooting{\parsearg\oddfootingxxx}
-\def\everyfooting{\parsearg\everyfootingxxx}
-
-{\catcode`\@=0 %
-
-\gdef\evenheadingxxx #1{\evenheadingyyy #1@|@|@|@|\finish}
-\gdef\evenheadingyyy #1@|#2@|#3@|#4\finish{%
-\global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
-
-\gdef\oddheadingxxx #1{\oddheadingyyy #1@|@|@|@|\finish}
-\gdef\oddheadingyyy #1@|#2@|#3@|#4\finish{%
-\global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
-
-\gdef\everyheadingxxx#1{\oddheadingxxx{#1}\evenheadingxxx{#1}}%
-
-\gdef\evenfootingxxx #1{\evenfootingyyy #1@|@|@|@|\finish}
-\gdef\evenfootingyyy #1@|#2@|#3@|#4\finish{%
-\global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
-
-\gdef\oddfootingxxx #1{\oddfootingyyy #1@|@|@|@|\finish}
-\gdef\oddfootingyyy #1@|#2@|#3@|#4\finish{%
- \global\oddfootline = {\rlap{\centerline{#2}}\line{#1\hfil#3}}%
- %
- % Leave some space for the footline. Hopefully ok to assume
- % @evenfooting will not be used by itself.
- \global\advance\pageheight by -\baselineskip
- \global\advance\vsize by -\baselineskip
-}
-
-\gdef\everyfootingxxx#1{\oddfootingxxx{#1}\evenfootingxxx{#1}}
-%
-}% unbind the catcode of @.
-
-% @headings double turns headings on for double-sided printing.
-% @headings single turns headings on for single-sided printing.
-% @headings off turns them off.
-% @headings on same as @headings double, retained for compatibility.
-% @headings after turns on double-sided headings after this page.
-% @headings doubleafter turns on double-sided headings after this page.
-% @headings singleafter turns on single-sided headings after this page.
-% By default, they are off at the start of a document,
-% and turned `on' after @end titlepage.
-
-\def\headings #1 {\csname HEADINGS#1\endcsname}
-
-\def\HEADINGSoff{
-\global\evenheadline={\hfil} \global\evenfootline={\hfil}
-\global\oddheadline={\hfil} \global\oddfootline={\hfil}}
-\HEADINGSoff
-% When we turn headings on, set the page number to 1.
-% For double-sided printing, put current file name in lower left corner,
-% chapter name on inside top of right hand pages, document
-% title on inside top of left hand pages, and page numbers on outside top
-% edge of all pages.
-\def\HEADINGSdouble{
-\global\pageno=1
-\global\evenfootline={\hfil}
-\global\oddfootline={\hfil}
-\global\evenheadline={\line{\folio\hfil\thistitle}}
-\global\oddheadline={\line{\thischapter\hfil\folio}}
-\global\let\contentsalignmacro = \chapoddpage
-}
-\let\contentsalignmacro = \chappager
-
-% For single-sided printing, chapter title goes across top left of page,
-% page number on top right.
-\def\HEADINGSsingle{
-\global\pageno=1
-\global\evenfootline={\hfil}
-\global\oddfootline={\hfil}
-\global\evenheadline={\line{\thischapter\hfil\folio}}
-\global\oddheadline={\line{\thischapter\hfil\folio}}
-\global\let\contentsalignmacro = \chappager
-}
-\def\HEADINGSon{\HEADINGSdouble}
-
-\def\HEADINGSafter{\let\HEADINGShook=\HEADINGSdoublex}
-\let\HEADINGSdoubleafter=\HEADINGSafter
-\def\HEADINGSdoublex{%
-\global\evenfootline={\hfil}
-\global\oddfootline={\hfil}
-\global\evenheadline={\line{\folio\hfil\thistitle}}
-\global\oddheadline={\line{\thischapter\hfil\folio}}
-\global\let\contentsalignmacro = \chapoddpage
-}
-
-\def\HEADINGSsingleafter{\let\HEADINGShook=\HEADINGSsinglex}
-\def\HEADINGSsinglex{%
-\global\evenfootline={\hfil}
-\global\oddfootline={\hfil}
-\global\evenheadline={\line{\thischapter\hfil\folio}}
-\global\oddheadline={\line{\thischapter\hfil\folio}}
-\global\let\contentsalignmacro = \chappager
-}
-
-% Subroutines used in generating headings
-% Produces Day Month Year style of output.
-\def\today{%
- \number\day\space
- \ifcase\month
- \or\putwordMJan\or\putwordMFeb\or\putwordMMar\or\putwordMApr
- \or\putwordMMay\or\putwordMJun\or\putwordMJul\or\putwordMAug
- \or\putwordMSep\or\putwordMOct\or\putwordMNov\or\putwordMDec
- \fi
- \space\number\year}
-
-% @settitle line... specifies the title of the document, for headings.
-% It generates no output of its own.
-\def\thistitle{\putwordNoTitle}
-\def\settitle{\parsearg\settitlezzz}
-\def\settitlezzz #1{\gdef\thistitle{#1}}
-
-
-\message{tables,}
-% Tables -- @table, @ftable, @vtable, @item(x), @kitem(x), @xitem(x).
-
-% default indentation of table text
-\newdimen\tableindent \tableindent=.8in
-% default indentation of @itemize and @enumerate text
-\newdimen\itemindent \itemindent=.3in
-% margin between end of table item and start of table text.
-\newdimen\itemmargin \itemmargin=.1in
-
-% used internally for \itemindent minus \itemmargin
-\newdimen\itemmax
-
-% Note @table, @vtable, and @vtable define @item, @itemx, etc., with
-% these defs.
-% They also define \itemindex
-% to index the item name in whatever manner is desired (perhaps none).
-
-\newif\ifitemxneedsnegativevskip
-
-\def\itemxpar{\par\ifitemxneedsnegativevskip\nobreak\vskip-\parskip\nobreak\fi}
-
-\def\internalBitem{\smallbreak \parsearg\itemzzz}
-\def\internalBitemx{\itemxpar \parsearg\itemzzz}
-
-\def\internalBxitem "#1"{\def\xitemsubtopix{#1} \smallbreak \parsearg\xitemzzz}
-\def\internalBxitemx "#1"{\def\xitemsubtopix{#1} \itemxpar \parsearg\xitemzzz}
-
-\def\internalBkitem{\smallbreak \parsearg\kitemzzz}
-\def\internalBkitemx{\itemxpar \parsearg\kitemzzz}
-
-\def\kitemzzz #1{\dosubind {kw}{\code{#1}}{for {\bf \lastfunction}}%
- \itemzzz {#1}}
-
-\def\xitemzzz #1{\dosubind {kw}{\code{#1}}{for {\bf \xitemsubtopic}}%
- \itemzzz {#1}}
-
-\def\itemzzz #1{\begingroup %
- \advance\hsize by -\rightskip
- \advance\hsize by -\tableindent
- \setbox0=\hbox{\itemfont{#1}}%
- \itemindex{#1}%
- \nobreak % This prevents a break before @itemx.
- %
- % If the item text does not fit in the space we have, put it on a line
- % by itself, and do not allow a page break either before or after that
- % line. We do not start a paragraph here because then if the next
- % command is, e.g., @kindex, the whatsit would get put into the
- % horizontal list on a line by itself, resulting in extra blank space.
- \ifdim \wd0>\itemmax
- %
- % Make this a paragraph so we get the \parskip glue and wrapping,
- % but leave it ragged-right.
- \begingroup
- \advance\leftskip by-\tableindent
- \advance\hsize by\tableindent
- \advance\rightskip by0pt plus1fil
- \leavevmode\unhbox0\par
- \endgroup
- %
- % We're going to be starting a paragraph, but we don't want the
- % \parskip glue -- logically it's part of the @item we just started.
- \nobreak \vskip-\parskip
- %
- % Stop a page break at the \parskip glue coming up. Unfortunately
- % we can't prevent a possible page break at the following
- % \baselineskip glue.
- \nobreak
- \endgroup
- \itemxneedsnegativevskipfalse
- \else
- % The item text fits into the space. Start a paragraph, so that the
- % following text (if any) will end up on the same line.
- \noindent
- % Do this with kerns and \unhbox so that if there is a footnote in
- % the item text, it can migrate to the main vertical list and
- % eventually be printed.
- \nobreak\kern-\tableindent
- \dimen0 = \itemmax \advance\dimen0 by \itemmargin \advance\dimen0 by -\wd0
- \unhbox0
- \nobreak\kern\dimen0
- \endgroup
- \itemxneedsnegativevskiptrue
- \fi
-}
-
-\def\item{\errmessage{@item while not in a table}}
-\def\itemx{\errmessage{@itemx while not in a table}}
-\def\kitem{\errmessage{@kitem while not in a table}}
-\def\kitemx{\errmessage{@kitemx while not in a table}}
-\def\xitem{\errmessage{@xitem while not in a table}}
-\def\xitemx{\errmessage{@xitemx while not in a table}}
-
-% Contains a kludge to get @end[description] to work.
-\def\description{\tablez{\dontindex}{1}{}{}{}{}}
-
-% @table, @ftable, @vtable.
-\def\table{\begingroup\inENV\obeylines\obeyspaces\tablex}
-{\obeylines\obeyspaces%
-\gdef\tablex #1^^M{%
-\tabley\dontindex#1 \endtabley}}
-
-\def\ftable{\begingroup\inENV\obeylines\obeyspaces\ftablex}
-{\obeylines\obeyspaces%
-\gdef\ftablex #1^^M{%
-\tabley\fnitemindex#1 \endtabley
-\def\Eftable{\endgraf\afterenvbreak\endgroup}%
-\let\Etable=\relax}}
-
-\def\vtable{\begingroup\inENV\obeylines\obeyspaces\vtablex}
-{\obeylines\obeyspaces%
-\gdef\vtablex #1^^M{%
-\tabley\vritemindex#1 \endtabley
-\def\Evtable{\endgraf\afterenvbreak\endgroup}%
-\let\Etable=\relax}}
-
-\def\dontindex #1{}
-\def\fnitemindex #1{\doind {fn}{\code{#1}}}%
-\def\vritemindex #1{\doind {vr}{\code{#1}}}%
-
-{\obeyspaces %
-\gdef\tabley#1#2 #3 #4 #5 #6 #7\endtabley{\endgroup%
-\tablez{#1}{#2}{#3}{#4}{#5}{#6}}}
-
-\def\tablez #1#2#3#4#5#6{%
-\aboveenvbreak %
-\begingroup %
-\def\Edescription{\Etable}% Necessary kludge.
-\let\itemindex=#1%
-\ifnum 0#3>0 \advance \leftskip by #3\mil \fi %
-\ifnum 0#4>0 \tableindent=#4\mil \fi %
-\ifnum 0#5>0 \advance \rightskip by #5\mil \fi %
-\def\itemfont{#2}%
-\itemmax=\tableindent %
-\advance \itemmax by -\itemmargin %
-\advance \leftskip by \tableindent %
-\exdentamount=\tableindent
-\parindent = 0pt
-\parskip = \smallskipamount
-\ifdim \parskip=0pt \parskip=2pt \fi%
-\def\Etable{\endgraf\afterenvbreak\endgroup}%
-\let\item = \internalBitem %
-\let\itemx = \internalBitemx %
-\let\kitem = \internalBkitem %
-\let\kitemx = \internalBkitemx %
-\let\xitem = \internalBxitem %
-\let\xitemx = \internalBxitemx %
-}
-
-% This is the counter used by @enumerate, which is really @itemize
-
-\newcount \itemno
-
-\def\itemize{\parsearg\itemizezzz}
-
-\def\itemizezzz #1{%
- \begingroup % ended by the @end itemize
- \itemizey {#1}{\Eitemize}
-}
-
-\def\itemizey #1#2{%
-\aboveenvbreak %
-\itemmax=\itemindent %
-\advance \itemmax by -\itemmargin %
-\advance \leftskip by \itemindent %
-\exdentamount=\itemindent
-\parindent = 0pt %
-\parskip = \smallskipamount %
-\ifdim \parskip=0pt \parskip=2pt \fi%
-\def#2{\endgraf\afterenvbreak\endgroup}%
-\def\itemcontents{#1}%
-\let\item=\itemizeitem}
-
-% Set sfcode to normal for the chars that usually have another value.
-% These are `.?!:;,'
-\def\frenchspacing{\sfcode46=1000 \sfcode63=1000 \sfcode33=1000
- \sfcode58=1000 \sfcode59=1000 \sfcode44=1000 }
-
-% \splitoff TOKENS\endmark defines \first to be the first token in
-% TOKENS, and \rest to be the remainder.
-%
-\def\splitoff#1#2\endmark{\def\first{#1}\def\rest{#2}}%
-
-% Allow an optional argument of an uppercase letter, lowercase letter,
-% or number, to specify the first label in the enumerated list. No
-% argument is the same as `1'.
-%
-\def\enumerate{\parsearg\enumeratezzz}
-\def\enumeratezzz #1{\enumeratey #1 \endenumeratey}
-\def\enumeratey #1 #2\endenumeratey{%
- \begingroup % ended by the @end enumerate
- %
- % If we were given no argument, pretend we were given `1'.
- \def\thearg{#1}%
- \ifx\thearg\empty \def\thearg{1}\fi
- %
- % Detect if the argument is a single token. If so, it might be a
- % letter. Otherwise, the only valid thing it can be is a number.
- % (We will always have one token, because of the test we just made.
- % This is a good thing, since \splitoff doesn't work given nothing at
- % all -- the first parameter is undelimited.)
- \expandafter\splitoff\thearg\endmark
- \ifx\rest\empty
- % Only one token in the argument. It could still be anything.
- % A ``lowercase letter'' is one whose \lccode is nonzero.
- % An ``uppercase letter'' is one whose \lccode is both nonzero, and
- % not equal to itself.
- % Otherwise, we assume it's a number.
- %
- % We need the \relax at the end of the \ifnum lines to stop TeX from
- % continuing to look for a <number>.
- %
- \ifnum\lccode\expandafter`\thearg=0\relax
- \numericenumerate % a number (we hope)
- \else
- % It's a letter.
- \ifnum\lccode\expandafter`\thearg=\expandafter`\thearg\relax
- \lowercaseenumerate % lowercase letter
- \else
- \uppercaseenumerate % uppercase letter
- \fi
- \fi
- \else
- % Multiple tokens in the argument. We hope it's a number.
- \numericenumerate
- \fi
-}
-
-% An @enumerate whose labels are integers. The starting integer is
-% given in \thearg.
-%
-\def\numericenumerate{%
- \itemno = \thearg
- \startenumeration{\the\itemno}%
-}
-
-% The starting (lowercase) letter is in \thearg.
-\def\lowercaseenumerate{%
- \itemno = \expandafter`\thearg
- \startenumeration{%
- % Be sure we're not beyond the end of the alphabet.
- \ifnum\itemno=0
- \errmessage{No more lowercase letters in @enumerate; get a bigger
- alphabet}%
- \fi
- \char\lccode\itemno
- }%
-}
-
-% The starting (uppercase) letter is in \thearg.
-\def\uppercaseenumerate{%
- \itemno = \expandafter`\thearg
- \startenumeration{%
- % Be sure we're not beyond the end of the alphabet.
- \ifnum\itemno=0
- \errmessage{No more uppercase letters in @enumerate; get a bigger
- alphabet}
- \fi
- \char\uccode\itemno
- }%
-}
-
-% Call itemizey, adding a period to the first argument and supplying the
-% common last two arguments. Also subtract one from the initial value in
-% \itemno, since @item increments \itemno.
-%
-\def\startenumeration#1{%
- \advance\itemno by -1
- \itemizey{#1.}\Eenumerate\flushcr
-}
-
-% @alphaenumerate and @capsenumerate are abbreviations for giving an arg
-% to @enumerate.
-%
-\def\alphaenumerate{\enumerate{a}}
-\def\capsenumerate{\enumerate{A}}
-\def\Ealphaenumerate{\Eenumerate}
-\def\Ecapsenumerate{\Eenumerate}
-
-% Definition of @item while inside @itemize.
-
-\def\itemizeitem{%
-\advance\itemno by 1
-{\let\par=\endgraf \smallbreak}%
-\ifhmode \errmessage{In hmode at itemizeitem}\fi
-{\parskip=0in \hskip 0pt
-\hbox to 0pt{\hss \itemcontents\hskip \itemmargin}%
-\vadjust{\penalty 1200}}%
-\flushcr}
-
-% @multitable macros
-% Amy Hendrickson, 8/18/94, 3/6/96
-%
-% @multitable ... @end multitable will make as many columns as desired.
-% Contents of each column will wrap at width given in preamble. Width
-% can be specified either with sample text given in a template line,
-% or in percent of \hsize, the current width of text on page.
-
-% Table can continue over pages but will only break between lines.
-
-% To make preamble:
-%
-% Either define widths of columns in terms of percent of \hsize:
-% @multitable @columnfractions .25 .3 .45
-% @item ...
-%
-% Numbers following @columnfractions are the percent of the total
-% current hsize to be used for each column. You may use as many
-% columns as desired.
-
-
-% Or use a template:
-% @multitable {Column 1 template} {Column 2 template} {Column 3 template}
-% @item ...
-% using the widest term desired in each column.
-%
-% For those who want to use more than one line's worth of words in
-% the preamble, break the line within one argument and it
-% will parse correctly, i.e.,
-%
-% @multitable {Column 1 template} {Column 2 template} {Column 3
-% template}
-% Not:
-% @multitable {Column 1 template} {Column 2 template}
-% {Column 3 template}
-
-% Each new table line starts with @item, each subsequent new column
-% starts with @tab. Empty columns may be produced by supplying @tab's
-% with nothing between them for as many times as empty columns are needed,
-% ie, @tab@tab@tab will produce two empty columns.
-
-% @item, @tab, @multitable or @end multitable do not need to be on their
-% own lines, but it will not hurt if they are.
-
-% Sample multitable:
-
-% @multitable {Column 1 template} {Column 2 template} {Column 3 template}
-% @item first col stuff @tab second col stuff @tab third col
-% @item
-% first col stuff
-% @tab
-% second col stuff
-% @tab
-% third col
-% @item first col stuff @tab second col stuff
-% @tab Many paragraphs of text may be used in any column.
-%
-% They will wrap at the width determined by the template.
-% @item@tab@tab This will be in third column.
-% @end multitable
-
-% Default dimensions may be reset by user.
-% @multitableparskip is vertical space between paragraphs in table.
-% @multitableparindent is paragraph indent in table.
-% @multitablecolmargin is horizontal space to be left between columns.
-% @multitablelinespace is space to leave between table items, baseline
-% to baseline.
-% 0pt means it depends on current normal line spacing.
-%
-\newskip\multitableparskip
-\newskip\multitableparindent
-\newdimen\multitablecolspace
-\newskip\multitablelinespace
-\multitableparskip=0pt
-\multitableparindent=6pt
-\multitablecolspace=12pt
-\multitablelinespace=0pt
-
-% Macros used to set up halign preamble:
-%
-\let\endsetuptable\relax
-\def\xendsetuptable{\endsetuptable}
-\let\columnfractions\relax
-\def\xcolumnfractions{\columnfractions}
-\newif\ifsetpercent
-
-% #1 is the part of the @columnfraction before the decimal point, which
-% is presumably either 0 or the empty string (but we don't check, we
-% just throw it away). #2 is the decimal part, which we use as the
-% percent of \hsize for this column.
-\def\pickupwholefraction#1.#2 {%
- \global\advance\colcount by 1
- \expandafter\xdef\csname col\the\colcount\endcsname{.#2\hsize}%
- \setuptable
-}
-
-\newcount\colcount
-\def\setuptable#1{%
- \def\firstarg{#1}%
- \ifx\firstarg\xendsetuptable
- \let\go = \relax
- \else
- \ifx\firstarg\xcolumnfractions
- \global\setpercenttrue
- \else
- \ifsetpercent
- \let\go\pickupwholefraction
- \else
- \global\advance\colcount by 1
- \setbox0=\hbox{#1\unskip }% Add a normal word space as a separator;
- % typically that is always in the input, anyway.
- \expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}%
- \fi
- \fi
- \ifx\go\pickupwholefraction
- % Put the argument back for the \pickupwholefraction call, so
- % we'll always have a period there to be parsed.
- \def\go{\pickupwholefraction#1}%
- \else
- \let\go = \setuptable
- \fi%
- \fi
- \go
-}
-
-% This used to have \hskip1sp. But then the space in a template line is
-% not enough. That is bad. So let's go back to just & until we
-% encounter the problem it was intended to solve again.
-% --karl, nathan@acm.org, 20apr99.
-\def\tab{&}
-
-% @multitable ... @end multitable definitions:
-%
-\def\multitable{\parsearg\dotable}
-\def\dotable#1{\bgroup
- \vskip\parskip
- \let\item\crcr
- \tolerance=9500
- \hbadness=9500
- \setmultitablespacing
- \parskip=\multitableparskip
- \parindent=\multitableparindent
- \overfullrule=0pt
- \global\colcount=0
- \def\Emultitable{\global\setpercentfalse\cr\egroup\egroup}%
- %
- % To parse everything between @multitable and @item:
- \setuptable#1 \endsetuptable
- %
- % \everycr will reset column counter, \colcount, at the end of
- % each line. Every column entry will cause \colcount to advance by one.
- % The table preamble
- % looks at the current \colcount to find the correct column width.
- \everycr{\noalign{%
- %
- % \filbreak%% keeps underfull box messages off when table breaks over pages.
- % Maybe so, but it also creates really weird page breaks when the table
- % breaks over pages. Wouldn't \vfil be better? Wait until the problem
- % manifests itself, so it can be fixed for real --karl.
- \global\colcount=0\relax}}%
- %
- % This preamble sets up a generic column definition, which will
- % be used as many times as user calls for columns.
- % \vtop will set a single line and will also let text wrap and
- % continue for many paragraphs if desired.
- \halign\bgroup&\global\advance\colcount by 1\relax
- \multistrut\vtop{\hsize=\expandafter\csname col\the\colcount\endcsname
- %
- % In order to keep entries from bumping into each other
- % we will add a \leftskip of \multitablecolspace to all columns after
- % the first one.
- %
- % If a template has been used, we will add \multitablecolspace
- % to the width of each template entry.
- %
- % If the user has set preamble in terms of percent of \hsize we will
- % use that dimension as the width of the column, and the \leftskip
- % will keep entries from bumping into each other. Table will start at
- % left margin and final column will justify at right margin.
- %
- % Make sure we don't inherit \rightskip from the outer environment.
- \rightskip=0pt
- \ifnum\colcount=1
- % The first column will be indented with the surrounding text.
- \advance\hsize by\leftskip
- \else
- \ifsetpercent \else
- % If user has not set preamble in terms of percent of \hsize
- % we will advance \hsize by \multitablecolspace.
- \advance\hsize by \multitablecolspace
- \fi
- % In either case we will make \leftskip=\multitablecolspace:
- \leftskip=\multitablecolspace
- \fi
- % Ignoring space at the beginning and end avoids an occasional spurious
- % blank line, when TeX decides to break the line at the space before the
- % box from the multistrut, so the strut ends up on a line by itself.
- % For example:
- % @multitable @columnfractions .11 .89
- % @item @code{#}
- % @tab Legal holiday which is valid in major parts of the whole country.
- % Is automatically provided with highlighting sequences respectively marking
- % characters.
- \noindent\ignorespaces##\unskip\multistrut}\cr
-}
-
-\def\setmultitablespacing{% test to see if user has set \multitablelinespace.
-% If so, do nothing. If not, give it an appropriate dimension based on
-% current baselineskip.
-\ifdim\multitablelinespace=0pt
-%% strut to put in table in case some entry doesn't have descenders,
-%% to keep lines equally spaced
-\let\multistrut = \strut
-%% Test to see if parskip is larger than space between lines of
-%% table. If not, do nothing.
-%% If so, set to same dimension as multitablelinespace.
-\else
-\gdef\multistrut{\vrule height\multitablelinespace depth\dp0
-width0pt\relax} \fi
-\ifdim\multitableparskip>\multitablelinespace
-\global\multitableparskip=\multitablelinespace
-\global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller
- %% than skip between lines in the table.
-\fi%
-\ifdim\multitableparskip=0pt
-\global\multitableparskip=\multitablelinespace
-\global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller
- %% than skip between lines in the table.
-\fi}
-
-
-\message{conditionals,}
-% Prevent errors for section commands.
-% Used in @ignore and in failing conditionals.
-\def\ignoresections{%
- \let\chapter=\relax
- \let\unnumbered=\relax
- \let\top=\relax
- \let\unnumberedsec=\relax
- \let\unnumberedsection=\relax
- \let\unnumberedsubsec=\relax
- \let\unnumberedsubsection=\relax
- \let\unnumberedsubsubsec=\relax
- \let\unnumberedsubsubsection=\relax
- \let\section=\relax
- \let\subsec=\relax
- \let\subsubsec=\relax
- \let\subsection=\relax
- \let\subsubsection=\relax
- \let\appendix=\relax
- \let\appendixsec=\relax
- \let\appendixsection=\relax
- \let\appendixsubsec=\relax
- \let\appendixsubsection=\relax
- \let\appendixsubsubsec=\relax
- \let\appendixsubsubsection=\relax
- \let\contents=\relax
- \let\smallbook=\relax
- \let\titlepage=\relax
-}
-
-% Used in nested conditionals, where we have to parse the Texinfo source
-% and so want to turn off most commands, in case they are used
-% incorrectly.
-%
-\def\ignoremorecommands{%
- \let\defcodeindex = \relax
- \let\defcv = \relax
- \let\deffn = \relax
- \let\deffnx = \relax
- \let\defindex = \relax
- \let\defivar = \relax
- \let\defmac = \relax
- \let\defmethod = \relax
- \let\defop = \relax
- \let\defopt = \relax
- \let\defspec = \relax
- \let\deftp = \relax
- \let\deftypefn = \relax
- \let\deftypefun = \relax
- \let\deftypeivar = \relax
- \let\deftypevar = \relax
- \let\deftypevr = \relax
- \let\defun = \relax
- \let\defvar = \relax
- \let\defvr = \relax
- \let\ref = \relax
- \let\xref = \relax
- \let\printindex = \relax
- \let\pxref = \relax
- \let\settitle = \relax
- \let\setchapternewpage = \relax
- \let\setchapterstyle = \relax
- \let\everyheading = \relax
- \let\evenheading = \relax
- \let\oddheading = \relax
- \let\everyfooting = \relax
- \let\evenfooting = \relax
- \let\oddfooting = \relax
- \let\headings = \relax
- \let\include = \relax
- \let\lowersections = \relax
- \let\down = \relax
- \let\raisesections = \relax
- \let\up = \relax
- \let\set = \relax
- \let\clear = \relax
- \let\item = \relax
-}
-
-% Ignore @ignore ... @end ignore.
-%
-\def\ignore{\doignore{ignore}}
-
-% Ignore @ifinfo, @ifhtml, @ifnottex, @html, @menu, and @direntry text.
-%
-\def\ifinfo{\doignore{ifinfo}}
-\def\ifhtml{\doignore{ifhtml}}
-\def\ifnottex{\doignore{ifnottex}}
-\def\html{\doignore{html}}
-\def\menu{\doignore{menu}}
-\def\direntry{\doignore{direntry}}
-
-% @dircategory CATEGORY -- specify a category of the dir file
-% which this file should belong to. Ignore this in TeX.
-\let\dircategory = \comment
-
-% Ignore text until a line `@end #1'.
-%
-\def\doignore#1{\begingroup
- % Don't complain about control sequences we have declared \outer.
- \ignoresections
- %
- % Define a command to swallow text until we reach `@end #1'.
- % This @ is a catcode 12 token (that is the normal catcode of @ in
- % this texinfo.tex file). We change the catcode of @ below to match.
- \long\def\doignoretext##1@end #1{\enddoignore}%
- %
- % Make sure that spaces turn into tokens that match what \doignoretext wants.
- \catcode32 = 10
- %
- % Ignore braces, too, so mismatched braces don't cause trouble.
- \catcode`\{ = 9
- \catcode`\} = 9
- %
- % We must not have @c interpreted as a control sequence.
- \catcode`\@ = 12
- %
- % Make the letter c a comment character so that the rest of the line
- % will be ignored. This way, the document can have (for example)
- % @c @end ifinfo
- % and the @end ifinfo will be properly ignored.
- % (We've just changed @ to catcode 12.)
- \catcode`\c = 14
- %
- % And now expand that command.
- \doignoretext
-}
-
-% What we do to finish off ignored text.
-%
-\def\enddoignore{\endgroup\ignorespaces}%
-
-\newif\ifwarnedobs\warnedobsfalse
-\def\obstexwarn{%
- \ifwarnedobs\relax\else
- % We need to warn folks that they may have trouble with TeX 3.0.
- % This uses \immediate\write16 rather than \message to get newlines.
- \immediate\write16{}
- \immediate\write16{WARNING: for users of Unix TeX 3.0!}
- \immediate\write16{This manual trips a bug in TeX version 3.0 (tex hangs).}
- \immediate\write16{If you are running another version of TeX, relax.}
- \immediate\write16{If you are running Unix TeX 3.0, kill this TeX process.}
- \immediate\write16{ Then upgrade your TeX installation if you can.}
- \immediate\write16{ (See ftp://ftp.gnu.org/pub/gnu/TeX.README.)}
- \immediate\write16{If you are stuck with version 3.0, run the}
- \immediate\write16{ script ``tex3patch'' from the Texinfo distribution}
- \immediate\write16{ to use a workaround.}
- \immediate\write16{}
- \global\warnedobstrue
- \fi
-}
-
-% **In TeX 3.0, setting text in \nullfont hangs tex. For a
-% workaround (which requires the file ``dummy.tfm'' to be installed),
-% uncomment the following line:
-\font\nullfont=dummy\let\obstexwarn=\relax
-
-% Ignore text, except that we keep track of conditional commands for
-% purposes of nesting, up to an `@end #1' command.
-%
-\def\nestedignore#1{%
- \obstexwarn
- % We must actually expand the ignored text to look for the @end
- % command, so that nested ignore constructs work. Thus, we put the
- % text into a \vbox and then do nothing with the result. To minimize
- % the change of memory overflow, we follow the approach outlined on
- % page 401 of the TeXbook: make the current font be a dummy font.
- %
- \setbox0 = \vbox\bgroup
- % Don't complain about control sequences we have declared \outer.
- \ignoresections
- %
- % Define `@end #1' to end the box, which will in turn undefine the
- % @end command again.
- \expandafter\def\csname E#1\endcsname{\egroup\ignorespaces}%
- %
- % We are going to be parsing Texinfo commands. Most cause no
- % trouble when they are used incorrectly, but some commands do
- % complicated argument parsing or otherwise get confused, so we
- % undefine them.
- %
- % We can't do anything about stray @-signs, unfortunately;
- % they'll produce `undefined control sequence' errors.
- \ignoremorecommands
- %
- % Set the current font to be \nullfont, a TeX primitive, and define
- % all the font commands to also use \nullfont. We don't use
- % dummy.tfm, as suggested in the TeXbook, because not all sites
- % might have that installed. Therefore, math mode will still
- % produce output, but that should be an extremely small amount of
- % stuff compared to the main input.
- %
- \nullfont
- \let\tenrm = \nullfont \let\tenit = \nullfont \let\tensl = \nullfont
- \let\tenbf = \nullfont \let\tentt = \nullfont \let\smallcaps = \nullfont
- \let\tensf = \nullfont
- % Similarly for index fonts (mostly for their use in
- % smallexample)
- \let\indrm = \nullfont \let\indit = \nullfont \let\indsl = \nullfont
- \let\indbf = \nullfont \let\indtt = \nullfont \let\indsc = \nullfont
- \let\indsf = \nullfont
- %
- % Don't complain when characters are missing from the fonts.
- \tracinglostchars = 0
- %
- % Don't bother to do space factor calculations.
- \frenchspacing
- %
- % Don't report underfull hboxes.
- \hbadness = 10000
- %
- % Do minimal line-breaking.
- \pretolerance = 10000
- %
- % Do not execute instructions in @tex
- \def\tex{\doignore{tex}}%
- % Do not execute macro definitions.
- % `c' is a comment character, so the word `macro' will get cut off.
- \def\macro{\doignore{ma}}%
-}
-
-% @set VAR sets the variable VAR to an empty value.
-% @set VAR REST-OF-LINE sets VAR to the value REST-OF-LINE.
-%
-% Since we want to separate VAR from REST-OF-LINE (which might be
-% empty), we can't just use \parsearg; we have to insert a space of our
-% own to delimit the rest of the line, and then take it out again if we
-% didn't need it. Make sure the catcode of space is correct to avoid
-% losing inside @example, for instance.
-%
-\def\set{\begingroup\catcode` =10
- \catcode`\-=12 \catcode`\_=12 % Allow - and _ in VAR.
- \parsearg\setxxx}
-\def\setxxx#1{\setyyy#1 \endsetyyy}
-\def\setyyy#1 #2\endsetyyy{%
- \def\temp{#2}%
- \ifx\temp\empty \global\expandafter\let\csname SET#1\endcsname = \empty
- \else \setzzz{#1}#2\endsetzzz % Remove the trailing space \setxxx inserted.
- \fi
- \endgroup
-}
-% Can't use \xdef to pre-expand #2 and save some time, since \temp or
-% \next or other control sequences that we've defined might get us into
-% an infinite loop. Consider `@set foo @cite{bar}'.
-\def\setzzz#1#2 \endsetzzz{\expandafter\gdef\csname SET#1\endcsname{#2}}
-
-% @clear VAR clears (i.e., unsets) the variable VAR.
-%
-\def\clear{\parsearg\clearxxx}
-\def\clearxxx#1{\global\expandafter\let\csname SET#1\endcsname=\relax}
-
-% @value{foo} gets the text saved in variable foo.
-{
- \catcode`\_ = \active
- %
- % We might end up with active _ or - characters in the argument if
- % we're called from @code, as @code{@value{foo-bar_}}. So \let any
- % such active characters to their normal equivalents.
- \gdef\value{\begingroup
- \catcode`\-=12 \catcode`\_=12
- \indexbreaks \let_\normalunderscore
- \valuexxx}
-}
-\def\valuexxx#1{\expandablevalue{#1}\endgroup}
-
-% We have this subroutine so that we can handle at least some @value's
-% properly in indexes (we \let\value to this in \indexdummies). Ones
-% whose names contain - or _ still won't work, but we can't do anything
-% about that. The command has to be fully expandable, since the result
-% winds up in the index file. This means that if the variable's value
-% contains other Texinfo commands, it's almost certain it will fail
-% (although perhaps we could fix that with sufficient work to do a
-% one-level expansion on the result, instead of complete).
-%
-\def\expandablevalue#1{%
- \expandafter\ifx\csname SET#1\endcsname\relax
- {[No value for ``#1'']}%
- \else
- \csname SET#1\endcsname
- \fi
-}
-
-% @ifset VAR ... @end ifset reads the `...' iff VAR has been defined
-% with @set.
-%
-\def\ifset{\parsearg\ifsetxxx}
-\def\ifsetxxx #1{%
- \expandafter\ifx\csname SET#1\endcsname\relax
- \expandafter\ifsetfail
- \else
- \expandafter\ifsetsucceed
- \fi
-}
-\def\ifsetsucceed{\conditionalsucceed{ifset}}
-\def\ifsetfail{\nestedignore{ifset}}
-\defineunmatchedend{ifset}
-
-% @ifclear VAR ... @end ifclear reads the `...' iff VAR has never been
-% defined with @set, or has been undefined with @clear.
-%
-\def\ifclear{\parsearg\ifclearxxx}
-\def\ifclearxxx #1{%
- \expandafter\ifx\csname SET#1\endcsname\relax
- \expandafter\ifclearsucceed
- \else
- \expandafter\ifclearfail
- \fi
-}
-\def\ifclearsucceed{\conditionalsucceed{ifclear}}
-\def\ifclearfail{\nestedignore{ifclear}}
-\defineunmatchedend{ifclear}
-
-% @iftex, @ifnothtml, @ifnotinfo always succeed; we read the text
-% following, through the first @end iftex (etc.). Make `@end iftex'
-% (etc.) valid only after an @iftex.
-%
-\def\iftex{\conditionalsucceed{iftex}}
-\def\ifnothtml{\conditionalsucceed{ifnothtml}}
-\def\ifnotinfo{\conditionalsucceed{ifnotinfo}}
-\defineunmatchedend{iftex}
-\defineunmatchedend{ifnothtml}
-\defineunmatchedend{ifnotinfo}
-
-% We can't just want to start a group at @iftex (for example) and end it
-% at @end iftex, since then @set commands inside the conditional have no
-% effect (they'd get reverted at the end of the group). So we must
-% define \Eiftex to redefine itself to be its previous value. (We can't
-% just define it to fail again with an ``unmatched end'' error, since
-% the @ifset might be nested.)
-%
-\def\conditionalsucceed#1{%
- \edef\temp{%
- % Remember the current value of \E#1.
- \let\nece{prevE#1} = \nece{E#1}%
- %
- % At the `@end #1', redefine \E#1 to be its previous value.
- \def\nece{E#1}{\let\nece{E#1} = \nece{prevE#1}}%
- }%
- \temp
-}
-
-% We need to expand lots of \csname's, but we don't want to expand the
-% control sequences after we've constructed them.
-%
-\def\nece#1{\expandafter\noexpand\csname#1\endcsname}
-
-% @defininfoenclose.
-\let\definfoenclose=\comment
-
-
-\message{indexing,}
-% Index generation facilities
-
-% Define \newwrite to be identical to plain tex's \newwrite
-% except not \outer, so it can be used within \newindex.
-{\catcode`\@=11
-\gdef\newwrite{\alloc@7\write\chardef\sixt@@n}}
-
-% \newindex {foo} defines an index named foo.
-% It automatically defines \fooindex such that
-% \fooindex ...rest of line... puts an entry in the index foo.
-% It also defines \fooindfile to be the number of the output channel for
-% the file that accumulates this index. The file's extension is foo.
-% The name of an index should be no more than 2 characters long
-% for the sake of vms.
-%
-\def\newindex#1{%
- \iflinks
- \expandafter\newwrite \csname#1indfile\endcsname
- \openout \csname#1indfile\endcsname \jobname.#1 % Open the file
- \fi
- \expandafter\xdef\csname#1index\endcsname{% % Define @#1index
- \noexpand\doindex{#1}}
-}
-
-% @defindex foo == \newindex{foo}
-
-\def\defindex{\parsearg\newindex}
-
-% Define @defcodeindex, like @defindex except put all entries in @code.
-
-\def\newcodeindex#1{%
- \iflinks
- \expandafter\newwrite \csname#1indfile\endcsname
- \openout \csname#1indfile\endcsname \jobname.#1
- \fi
- \expandafter\xdef\csname#1index\endcsname{%
- \noexpand\docodeindex{#1}}
-}
-
-\def\defcodeindex{\parsearg\newcodeindex}
-
-% @synindex foo bar makes index foo feed into index bar.
-% Do this instead of @defindex foo if you don't want it as a separate index.
-% The \closeout helps reduce unnecessary open files; the limit on the
-% Acorn RISC OS is a mere 16 files.
-\def\synindex#1 #2 {%
- \expandafter\let\expandafter\synindexfoo\expandafter=\csname#2indfile\endcsname
- \expandafter\closeout\csname#1indfile\endcsname
- \expandafter\let\csname#1indfile\endcsname=\synindexfoo
- \expandafter\xdef\csname#1index\endcsname{% define \xxxindex
- \noexpand\doindex{#2}}%
-}
-
-% @syncodeindex foo bar similar, but put all entries made for index foo
-% inside @code.
-\def\syncodeindex#1 #2 {%
- \expandafter\let\expandafter\synindexfoo\expandafter=\csname#2indfile\endcsname
- \expandafter\closeout\csname#1indfile\endcsname
- \expandafter\let\csname#1indfile\endcsname=\synindexfoo
- \expandafter\xdef\csname#1index\endcsname{% define \xxxindex
- \noexpand\docodeindex{#2}}%
-}
-
-% Define \doindex, the driver for all \fooindex macros.
-% Argument #1 is generated by the calling \fooindex macro,
-% and it is "foo", the name of the index.
-
-% \doindex just uses \parsearg; it calls \doind for the actual work.
-% This is because \doind is more useful to call from other macros.
-
-% There is also \dosubind {index}{topic}{subtopic}
-% which makes an entry in a two-level index such as the operation index.
-
-\def\doindex#1{\edef\indexname{#1}\parsearg\singleindexer}
-\def\singleindexer #1{\doind{\indexname}{#1}}
-
-% like the previous two, but they put @code around the argument.
-\def\docodeindex#1{\edef\indexname{#1}\parsearg\singlecodeindexer}
-\def\singlecodeindexer #1{\doind{\indexname}{\code{#1}}}
-
-\def\indexdummies{%
-\def\ { }%
-% Take care of the plain tex accent commands.
-\def\"{\realbackslash "}%
-\def\`{\realbackslash `}%
-\def\'{\realbackslash '}%
-\def\^{\realbackslash ^}%
-\def\~{\realbackslash ~}%
-\def\={\realbackslash =}%
-\def\b{\realbackslash b}%
-\def\c{\realbackslash c}%
-\def\d{\realbackslash d}%
-\def\u{\realbackslash u}%
-\def\v{\realbackslash v}%
-\def\H{\realbackslash H}%
-% Take care of the plain tex special European modified letters.
-\def\oe{\realbackslash oe}%
-\def\ae{\realbackslash ae}%
-\def\aa{\realbackslash aa}%
-\def\OE{\realbackslash OE}%
-\def\AE{\realbackslash AE}%
-\def\AA{\realbackslash AA}%
-\def\o{\realbackslash o}%
-\def\O{\realbackslash O}%
-\def\l{\realbackslash l}%
-\def\L{\realbackslash L}%
-\def\ss{\realbackslash ss}%
-% Take care of texinfo commands likely to appear in an index entry.
-% (Must be a way to avoid doing expansion at all, and thus not have to
-% laboriously list every single command here.)
-\def\@{@}% will be @@ when we switch to @ as escape char.
-% Need these in case \tex is in effect and \{ is a \delimiter again.
-% But can't use \lbracecmd and \rbracecmd because texindex assumes
-% braces and backslashes are used only as delimiters.
-\let\{ = \mylbrace
-\let\} = \myrbrace
-\def\_{{\realbackslash _}}%
-\def\w{\realbackslash w }%
-\def\bf{\realbackslash bf }%
-%\def\rm{\realbackslash rm }%
-\def\sl{\realbackslash sl }%
-\def\sf{\realbackslash sf}%
-\def\tt{\realbackslash tt}%
-\def\gtr{\realbackslash gtr}%
-\def\less{\realbackslash less}%
-\def\hat{\realbackslash hat}%
-\def\TeX{\realbackslash TeX}%
-\def\dots{\realbackslash dots }%
-\def\result{\realbackslash result}%
-\def\equiv{\realbackslash equiv}%
-\def\expansion{\realbackslash expansion}%
-\def\print{\realbackslash print}%
-\def\error{\realbackslash error}%
-\def\point{\realbackslash point}%
-\def\copyright{\realbackslash copyright}%
-\def\tclose##1{\realbackslash tclose {##1}}%
-\def\code##1{\realbackslash code {##1}}%
-\def\uref##1{\realbackslash uref {##1}}%
-\def\url##1{\realbackslash url {##1}}%
-\def\env##1{\realbackslash env {##1}}%
-\def\command##1{\realbackslash command {##1}}%
-\def\option##1{\realbackslash option {##1}}%
-\def\dotless##1{\realbackslash dotless {##1}}%
-\def\samp##1{\realbackslash samp {##1}}%
-\def\,##1{\realbackslash ,{##1}}%
-\def\t##1{\realbackslash t {##1}}%
-\def\r##1{\realbackslash r {##1}}%
-\def\i##1{\realbackslash i {##1}}%
-\def\b##1{\realbackslash b {##1}}%
-\def\sc##1{\realbackslash sc {##1}}%
-\def\cite##1{\realbackslash cite {##1}}%
-\def\key##1{\realbackslash key {##1}}%
-\def\file##1{\realbackslash file {##1}}%
-\def\var##1{\realbackslash var {##1}}%
-\def\kbd##1{\realbackslash kbd {##1}}%
-\def\dfn##1{\realbackslash dfn {##1}}%
-\def\emph##1{\realbackslash emph {##1}}%
-\def\acronym##1{\realbackslash acronym {##1}}%
-%
-% Handle some cases of @value -- where the variable name does not
-% contain - or _, and the value does not contain any
-% (non-fully-expandable) commands.
-\let\value = \expandablevalue
-%
-\unsepspaces
-% Turn off macro expansion
-\turnoffmacros
-}
-
-% If an index command is used in an @example environment, any spaces
-% therein should become regular spaces in the raw index file, not the
-% expansion of \tie (\\leavevmode \penalty \@M \ ).
-{\obeyspaces
- \gdef\unsepspaces{\obeyspaces\let =\space}}
-
-% \indexnofonts no-ops all font-change commands.
-% This is used when outputting the strings to sort the index by.
-\def\indexdummyfont#1{#1}
-\def\indexdummytex{TeX}
-\def\indexdummydots{...}
-
-\def\indexnofonts{%
-% Just ignore accents.
-\let\,=\indexdummyfont
-\let\"=\indexdummyfont
-\let\`=\indexdummyfont
-\let\'=\indexdummyfont
-\let\^=\indexdummyfont
-\let\~=\indexdummyfont
-\let\==\indexdummyfont
-\let\b=\indexdummyfont
-\let\c=\indexdummyfont
-\let\d=\indexdummyfont
-\let\u=\indexdummyfont
-\let\v=\indexdummyfont
-\let\H=\indexdummyfont
-\let\dotless=\indexdummyfont
-% Take care of the plain tex special European modified letters.
-\def\oe{oe}%
-\def\ae{ae}%
-\def\aa{aa}%
-\def\OE{OE}%
-\def\AE{AE}%
-\def\AA{AA}%
-\def\o{o}%
-\def\O{O}%
-\def\l{l}%
-\def\L{L}%
-\def\ss{ss}%
-\let\w=\indexdummyfont
-\let\t=\indexdummyfont
-\let\r=\indexdummyfont
-\let\i=\indexdummyfont
-\let\b=\indexdummyfont
-\let\emph=\indexdummyfont
-\let\strong=\indexdummyfont
-\let\cite=\indexdummyfont
-\let\sc=\indexdummyfont
-%Don't no-op \tt, since it isn't a user-level command
-% and is used in the definitions of the active chars like <, >, |...
-%\let\tt=\indexdummyfont
-\let\tclose=\indexdummyfont
-\let\code=\indexdummyfont
-\let\url=\indexdummyfont
-\let\uref=\indexdummyfont
-\let\env=\indexdummyfont
-\let\command=\indexdummyfont
-\let\option=\indexdummyfont
-\let\file=\indexdummyfont
-\let\samp=\indexdummyfont
-\let\kbd=\indexdummyfont
-\let\key=\indexdummyfont
-\let\var=\indexdummyfont
-\let\TeX=\indexdummytex
-\let\dots=\indexdummydots
-\def\@{@}%
-}
-
-% To define \realbackslash, we must make \ not be an escape.
-% We must first make another character (@) an escape
-% so we do not become unable to do a definition.
-
-{\catcode`\@=0 \catcode`\\=\other
- @gdef@realbackslash{\}}
-
-\let\indexbackslash=0 %overridden during \printindex.
-\let\SETmarginindex=\relax % put index entries in margin (undocumented)?
-
-% For \ifx comparisons.
-\def\emptymacro{\empty}
-
-% Most index entries go through here, but \dosubind is the general case.
-%
-\def\doind#1#2{\dosubind{#1}{#2}\empty}
-
-% Workhorse for all \fooindexes.
-% #1 is name of index, #2 is stuff to put there, #3 is subentry --
-% \empty if called from \doind, as we usually are. The main exception
-% is with defuns, which call us directly.
-%
-\def\dosubind#1#2#3{%
- % Put the index entry in the margin if desired.
- \ifx\SETmarginindex\relax\else
- \insert\margin{\hbox{\vrule height8pt depth3pt width0pt #2}}%
- \fi
- {%
- \count255=\lastpenalty
- {%
- \indexdummies % Must do this here, since \bf, etc expand at this stage
- \escapechar=`\\
- {%
- \let\folio = 0% We will expand all macros now EXCEPT \folio.
- \def\rawbackslashxx{\indexbackslash}% \indexbackslash isn't defined now
- % so it will be output as is; and it will print as backslash.
- %
- \def\thirdarg{#3}%
- %
- % If third arg is present, precede it with space in sort key.
- \ifx\thirdarg\emptymacro
- \let\subentry = \empty
- \else
- \def\subentry{ #3}%
- \fi
- %
- % First process the index entry with all font commands turned
- % off to get the string to sort by.
- {\indexnofonts \xdef\indexsorttmp{#2\subentry}}%
- %
- % Now the real index entry with the fonts.
- \toks0 = {#2}%
- %
- % If third (subentry) arg is present, add it to the index
- % string. And include a space.
- \ifx\thirdarg\emptymacro \else
- \toks0 = \expandafter{\the\toks0 \space #3}%
- \fi
- %
- % Set up the complete index entry, with both the sort key
- % and the original text, including any font commands. We write
- % three arguments to \entry to the .?? file, texindex reduces to
- % two when writing the .??s sorted result.
- \edef\temp{%
- \write\csname#1indfile\endcsname{%
- \realbackslash entry{\indexsorttmp}{\folio}{\the\toks0}}%
- }%
- %
- % If a skip is the last thing on the list now, preserve it
- % by backing up by \lastskip, doing the \write, then inserting
- % the skip again. Otherwise, the whatsit generated by the
- % \write will make \lastskip zero. The result is that sequences
- % like this:
- % @end defun
- % @tindex whatever
- % @defun ...
- % will have extra space inserted, because the \medbreak in the
- % start of the @defun won't see the skip inserted by the @end of
- % the previous defun.
- %
- % But don't do any of this if we're not in vertical mode. We
- % don't want to do a \vskip and prematurely end a paragraph.
- %
- % Avoid page breaks due to these extra skips, too.
- %
- \iflinks
- \ifvmode
- \skip0 = \lastskip
- \ifdim\lastskip = 0pt \else \nobreak\vskip-\lastskip \fi
- \fi
- %
- \temp % do the write
- %
- %
- \ifvmode \ifdim\skip0 = 0pt \else \nobreak\vskip\skip0 \fi \fi
- \fi
- }%
- }%
- \penalty\count255
- }%
-}
-
-% The index entry written in the file actually looks like
-% \entry {sortstring}{page}{topic}
-% or
-% \entry {sortstring}{page}{topic}{subtopic}
-% The texindex program reads in these files and writes files
-% containing these kinds of lines:
-% \initial {c}
-% before the first topic whose initial is c
-% \entry {topic}{pagelist}
-% for a topic that is used without subtopics
-% \primary {topic}
-% for the beginning of a topic that is used with subtopics
-% \secondary {subtopic}{pagelist}
-% for each subtopic.
-
-% Define the user-accessible indexing commands
-% @findex, @vindex, @kindex, @cindex.
-
-\def\findex {\fnindex}
-\def\kindex {\kyindex}
-\def\cindex {\cpindex}
-\def\vindex {\vrindex}
-\def\tindex {\tpindex}
-\def\pindex {\pgindex}
-
-\def\cindexsub {\begingroup\obeylines\cindexsub}
-{\obeylines %
-\gdef\cindexsub "#1" #2^^M{\endgroup %
-\dosubind{cp}{#2}{#1}}}
-
-% Define the macros used in formatting output of the sorted index material.
-
-% @printindex causes a particular index (the ??s file) to get printed.
-% It does not print any chapter heading (usually an @unnumbered).
-%
-\def\printindex{\parsearg\doprintindex}
-\def\doprintindex#1{\begingroup
- \dobreak \chapheadingskip{10000}%
- %
- \indexfonts \rm
- \tolerance = 9500
- \indexbreaks
- %
- % See if the index file exists and is nonempty.
- % Change catcode of @ here so that if the index file contains
- % \initial {@}
- % as its first line, TeX doesn't complain about mismatched braces
- % (because it thinks @} is a control sequence).
- \catcode`\@ = 11
- \openin 1 \jobname.#1s
- \ifeof 1
- % \enddoublecolumns gets confused if there is no text in the index,
- % and it loses the chapter title and the aux file entries for the
- % index. The easiest way to prevent this problem is to make sure
- % there is some text.
- \putwordIndexNonexistent
- \else
- %
- % If the index file exists but is empty, then \openin leaves \ifeof
- % false. We have to make TeX try to read something from the file, so
- % it can discover if there is anything in it.
- \read 1 to \temp
- \ifeof 1
- \putwordIndexIsEmpty
- \else
- % Index files are almost Texinfo source, but we use \ as the escape
- % character. It would be better to use @, but that's too big a change
- % to make right now.
- \def\indexbackslash{\rawbackslashxx}%
- \catcode`\\ = 0
- \escapechar = `\\
- \begindoublecolumns
- \input \jobname.#1s
- \enddoublecolumns
- \fi
- \fi
- \closein 1
-\endgroup}
-
-% These macros are used by the sorted index file itself.
-% Change them to control the appearance of the index.
-
-\def\initial#1{{%
- % Some minor font changes for the special characters.
- \let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt
- %
- % Remove any glue we may have, we'll be inserting our own.
- \removelastskip
- %
- % We like breaks before the index initials, so insert a bonus.
- \penalty -300
- %
- % Typeset the initial. Making this add up to a whole number of
- % baselineskips increases the chance of the dots lining up from column
- % to column. It still won't often be perfect, because of the stretch
- % we need before each entry, but it's better.
- %
- % No shrink because it confuses \balancecolumns.
- \vskip 1.67\baselineskip plus .5\baselineskip
- \leftline{\secbf #1}%
- \vskip .33\baselineskip plus .1\baselineskip
- %
- % Do our best not to break after the initial.
- \nobreak
-}}
-
-% This typesets a paragraph consisting of #1, dot leaders, and then #2
-% flush to the right margin. It is used for index and table of contents
-% entries. The paragraph is indented by \leftskip.
-%
-\def\entry#1#2{\begingroup
- %
- % Start a new paragraph if necessary, so our assignments below can't
- % affect previous text.
- \par
- %
- % Do not fill out the last line with white space.
- \parfillskip = 0in
- %
- % No extra space above this paragraph.
- \parskip = 0in
- %
- % Do not prefer a separate line ending with a hyphen to fewer lines.
- \finalhyphendemerits = 0
- %
- % \hangindent is only relevant when the entry text and page number
- % don't both fit on one line. In that case, bob suggests starting the
- % dots pretty far over on the line. Unfortunately, a large
- % indentation looks wrong when the entry text itself is broken across
- % lines. So we use a small indentation and put up with long leaders.
- %
- % \hangafter is reset to 1 (which is the value we want) at the start
- % of each paragraph, so we need not do anything with that.
- \hangindent = 2em
- %
- % When the entry text needs to be broken, just fill out the first line
- % with blank space.
- \rightskip = 0pt plus1fil
- %
- % A bit of stretch before each entry for the benefit of balancing columns.
- \vskip 0pt plus1pt
- %
- % Start a ``paragraph'' for the index entry so the line breaking
- % parameters we've set above will have an effect.
- \noindent
- %
- % Insert the text of the index entry. TeX will do line-breaking on it.
- #1%
- % The following is kludged to not output a line of dots in the index if
- % there are no page numbers. The next person who breaks this will be
- % cursed by a Unix daemon.
- \def\tempa{{\rm }}%
- \def\tempb{#2}%
- \edef\tempc{\tempa}%
- \edef\tempd{\tempb}%
- \ifx\tempc\tempd\ \else%
- %
- % If we must, put the page number on a line of its own, and fill out
- % this line with blank space. (The \hfil is overwhelmed with the
- % fill leaders glue in \indexdotfill if the page number does fit.)
- \hfil\penalty50
- \null\nobreak\indexdotfill % Have leaders before the page number.
- %
- % The `\ ' here is removed by the implicit \unskip that TeX does as
- % part of (the primitive) \par. Without it, a spurious underfull
- % \hbox ensues.
- \ #2% The page number ends the paragraph.
- \fi%
- \par
-\endgroup}
-
-% Like \dotfill except takes at least 1 em.
-\def\indexdotfill{\cleaders
- \hbox{$\mathsurround=0pt \mkern1.5mu ${\it .}$ \mkern1.5mu$}\hskip 1em plus 1fill}
-
-\def\primary #1{\line{#1\hfil}}
-
-\newskip\secondaryindent \secondaryindent=0.5cm
-
-\def\secondary #1#2{
-{\parfillskip=0in \parskip=0in
-\hangindent =1in \hangafter=1
-\noindent\hskip\secondaryindent\hbox{#1}\indexdotfill #2\par
-}}
-
-% Define two-column mode, which we use to typeset indexes.
-% Adapted from the TeXbook, page 416, which is to say,
-% the manmac.tex format used to print the TeXbook itself.
-\catcode`\@=11
-
-\newbox\partialpage
-\newdimen\doublecolumnhsize
-
-\def\begindoublecolumns{\begingroup % ended by \enddoublecolumns
- % Grab any single-column material above us.
- \output = {%
- %
- % Here is a possibility not foreseen in manmac: if we accumulate a
- % whole lot of material, we might end up calling this \output
- % routine twice in a row (see the doublecol-lose test, which is
- % essentially a couple of indexes with @setchapternewpage off). In
- % that case we just ship out what is in \partialpage with the normal
- % output routine. Generally, \partialpage will be empty when this
- % runs and this will be a no-op. See the indexspread.tex test case.
- \ifvoid\partialpage \else
- \onepageout{\pagecontents\partialpage}%
- \fi
- %
- \global\setbox\partialpage = \vbox{%
- % Unvbox the main output page.
- \unvbox\PAGE
- \kern-\topskip \kern\baselineskip
- }%
- }%
- \eject % run that output routine to set \partialpage
- %
- % Use the double-column output routine for subsequent pages.
- \output = {\doublecolumnout}%
- %
- % Change the page size parameters. We could do this once outside this
- % routine, in each of @smallbook, @afourpaper, and the default 8.5x11
- % format, but then we repeat the same computation. Repeating a couple
- % of assignments once per index is clearly meaningless for the
- % execution time, so we may as well do it in one place.
- %
- % First we halve the line length, less a little for the gutter between
- % the columns. We compute the gutter based on the line length, so it
- % changes automatically with the paper format. The magic constant
- % below is chosen so that the gutter has the same value (well, +-<1pt)
- % as it did when we hard-coded it.
- %
- % We put the result in a separate register, \doublecolumhsize, so we
- % can restore it in \pagesofar, after \hsize itself has (potentially)
- % been clobbered.
- %
- \doublecolumnhsize = \hsize
- \advance\doublecolumnhsize by -.04154\hsize
- \divide\doublecolumnhsize by 2
- \hsize = \doublecolumnhsize
- %
- % Double the \vsize as well. (We don't need a separate register here,
- % since nobody clobbers \vsize.)
- \advance\vsize by -\ht\partialpage
- \vsize = 2\vsize
-}
-
-% The double-column output routine for all double-column pages except
-% the last.
-%
-\def\doublecolumnout{%
- \splittopskip=\topskip \splitmaxdepth=\maxdepth
- % Get the available space for the double columns -- the normal
- % (undoubled) page height minus any material left over from the
- % previous page.
- \dimen@ = \vsize
- \divide\dimen@ by 2
- %
- % box0 will be the left-hand column, box2 the right.
- \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@
- \onepageout\pagesofar
- \unvbox255
- \penalty\outputpenalty
-}
-\def\pagesofar{%
- % Re-output the contents of the output page -- any previous material,
- % followed by the two boxes we just split, in box0 and box2.
- \unvbox\partialpage
- %
- \hsize = \doublecolumnhsize
- \wd0=\hsize \wd2=\hsize
- \hbox to\pagewidth{\box0\hfil\box2}%
-}
-\def\enddoublecolumns{%
- \output = {%
- % Split the last of the double-column material. Leave it on the
- % current page, no automatic page break.
- \balancecolumns
- %
- % If we end up splitting too much material for the current page,
- % though, there will be another page break right after this \output
- % invocation ends. Having called \balancecolumns once, we do not
- % want to call it again. Therefore, reset \output to its normal
- % definition right away. (We hope \balancecolumns will never be
- % called on to balance too much material, but if it is, this makes
- % the output somewhat more palatable.)
- \global\output = {\onepageout{\pagecontents\PAGE}}%
- }%
- \eject
- \endgroup % started in \begindoublecolumns
- %
- % \pagegoal was set to the doubled \vsize above, since we restarted
- % the current page. We're now back to normal single-column
- % typesetting, so reset \pagegoal to the normal \vsize (after the
- % \endgroup where \vsize got restored).
- \pagegoal = \vsize
-}
-\def\balancecolumns{%
- % Called at the end of the double column material.
- \setbox0 = \vbox{\unvbox255}% like \box255 but more efficient, see p.120.
- \dimen@ = \ht0
- \advance\dimen@ by \topskip
- \advance\dimen@ by-\baselineskip
- \divide\dimen@ by 2 % target to split to
- %debug\message{final 2-column material height=\the\ht0, target=\the\dimen@.}%
- \splittopskip = \topskip
- % Loop until we get a decent breakpoint.
- {%
- \vbadness = 10000
- \loop
- \global\setbox3 = \copy0
- \global\setbox1 = \vsplit3 to \dimen@
- \ifdim\ht3>\dimen@
- \global\advance\dimen@ by 1pt
- \repeat
- }%
- %debug\message{split to \the\dimen@, column heights: \the\ht1, \the\ht3.}%
- \setbox0=\vbox to\dimen@{\unvbox1}%
- \setbox2=\vbox to\dimen@{\unvbox3}%
- %
- \pagesofar
-}
-\catcode`\@ = \other
-
-
-\message{sectioning,}
-% Chapters, sections, etc.
-
-\newcount\chapno
-\newcount\secno \secno=0
-\newcount\subsecno \subsecno=0
-\newcount\subsubsecno \subsubsecno=0
-
-% This counter is funny since it counts through charcodes of letters A, B, ...
-% The \the is necessary, despite appearances, because \appendixletter is
-% expanded while writing the .toc file. \char\appendixno is not
-% expandable, thus it is written literally, thus all appendixes come out
-% with the same letter (or @) in the toc without it.
-\newcount\appendixno \appendixno = `\@
-\def\appendixletter{\char\the\appendixno}
-
-% Each @chapter defines this as the name of the chapter.
-% page headings and footings can use it. @section does likewise.
-\def\thischapter{}
-\def\thissection{}
-
-\newcount\absseclevel % used to calculate proper heading level
-\newcount\secbase\secbase=0 % @raise/lowersections modify this count
-
-% @raisesections: treat @section as chapter, @subsection as section, etc.
-\def\raisesections{\global\advance\secbase by -1}
-\let\up=\raisesections % original BFox name
-
-% @lowersections: treat @chapter as section, @section as subsection, etc.
-\def\lowersections{\global\advance\secbase by 1}
-\let\down=\lowersections % original BFox name
-
-% Choose a numbered-heading macro
-% #1 is heading level if unmodified by @raisesections or @lowersections
-% #2 is text for heading
-\def\numhead#1#2{\absseclevel=\secbase\advance\absseclevel by #1
-\ifcase\absseclevel
- \chapterzzz{#2}
-\or
- \seczzz{#2}
-\or
- \numberedsubseczzz{#2}
-\or
- \numberedsubsubseczzz{#2}
-\else
- \ifnum \absseclevel<0
- \chapterzzz{#2}
- \else
- \numberedsubsubseczzz{#2}
- \fi
-\fi
-}
-
-% like \numhead, but chooses appendix heading levels
-\def\apphead#1#2{\absseclevel=\secbase\advance\absseclevel by #1
-\ifcase\absseclevel
- \appendixzzz{#2}
-\or
- \appendixsectionzzz{#2}
-\or
- \appendixsubseczzz{#2}
-\or
- \appendixsubsubseczzz{#2}
-\else
- \ifnum \absseclevel<0
- \appendixzzz{#2}
- \else
- \appendixsubsubseczzz{#2}
- \fi
-\fi
-}
-
-% like \numhead, but chooses numberless heading levels
-\def\unnmhead#1#2{\absseclevel=\secbase\advance\absseclevel by #1
-\ifcase\absseclevel
- \unnumberedzzz{#2}
-\or
- \unnumberedseczzz{#2}
-\or
- \unnumberedsubseczzz{#2}
-\or
- \unnumberedsubsubseczzz{#2}
-\else
- \ifnum \absseclevel<0
- \unnumberedzzz{#2}
- \else
- \unnumberedsubsubseczzz{#2}
- \fi
-\fi
-}
-
-% @chapter, @appendix, @unnumbered.
-\def\thischaptername{No Chapter Title}
-\outer\def\chapter{\parsearg\chapteryyy}
-\def\chapteryyy #1{\numhead0{#1}} % normally numhead0 calls chapterzzz
-\def\chapterzzz #1{%
-\secno=0 \subsecno=0 \subsubsecno=0
-\global\advance \chapno by 1 \message{\putwordChapter\space \the\chapno}%
-\chapmacro {#1}{\the\chapno}%
-\gdef\thissection{#1}%
-\gdef\thischaptername{#1}%
-% We don't substitute the actual chapter name into \thischapter
-% because we don't want its macros evaluated now.
-\xdef\thischapter{\putwordChapter{} \the\chapno: \noexpand\thischaptername}%
-\toks0 = {#1}%
-\edef\temp{\noexpand\writetocentry{\realbackslash chapentry{\the\toks0}%
- {\the\chapno}}}%
-\temp
-\donoderef
-\global\let\section = \numberedsec
-\global\let\subsection = \numberedsubsec
-\global\let\subsubsection = \numberedsubsubsec
-}
-
-\outer\def\appendix{\parsearg\appendixyyy}
-\def\appendixyyy #1{\apphead0{#1}} % normally apphead0 calls appendixzzz
-\def\appendixzzz #1{%
-\secno=0 \subsecno=0 \subsubsecno=0
-\global\advance \appendixno by 1
-\message{\putwordAppendix\space \appendixletter}%
-\chapmacro {#1}{\putwordAppendix{} \appendixletter}%
-\gdef\thissection{#1}%
-\gdef\thischaptername{#1}%
-\xdef\thischapter{\putwordAppendix{} \appendixletter: \noexpand\thischaptername}%
-\toks0 = {#1}%
-\edef\temp{\noexpand\writetocentry{\realbackslash chapentry{\the\toks0}%
- {\putwordAppendix{} \appendixletter}}}%
-\temp
-\appendixnoderef
-\global\let\section = \appendixsec
-\global\let\subsection = \appendixsubsec
-\global\let\subsubsection = \appendixsubsubsec
-}
-
-% @centerchap is like @unnumbered, but the heading is centered.
-\outer\def\centerchap{\parsearg\centerchapyyy}
-\def\centerchapyyy #1{{\let\unnumbchapmacro=\centerchapmacro \unnumberedyyy{#1}}}
-
-% @top is like @unnumbered.
-\outer\def\top{\parsearg\unnumberedyyy}
-
-\outer\def\unnumbered{\parsearg\unnumberedyyy}
-\def\unnumberedyyy #1{\unnmhead0{#1}} % normally unnmhead0 calls unnumberedzzz
-\def\unnumberedzzz #1{%
-\secno=0 \subsecno=0 \subsubsecno=0
-%
-% This used to be simply \message{#1}, but TeX fully expands the
-% argument to \message. Therefore, if #1 contained @-commands, TeX
-% expanded them. For example, in `@unnumbered The @cite{Book}', TeX
-% expanded @cite (which turns out to cause errors because \cite is meant
-% to be executed, not expanded).
-%
-% Anyway, we don't want the fully-expanded definition of @cite to appear
-% as a result of the \message, we just want `@cite' itself. We use
-% \the<toks register> to achieve this: TeX expands \the<toks> only once,
-% simply yielding the contents of <toks register>. (We also do this for
-% the toc entries.)
-\toks0 = {#1}\message{(\the\toks0)}%
-%
-\unnumbchapmacro {#1}%
-\gdef\thischapter{#1}\gdef\thissection{#1}%
-\toks0 = {#1}%
-\edef\temp{\noexpand\writetocentry{\realbackslash unnumbchapentry{\the\toks0}}}%
-\temp
-\unnumbnoderef
-\global\let\section = \unnumberedsec
-\global\let\subsection = \unnumberedsubsec
-\global\let\subsubsection = \unnumberedsubsubsec
-}
-
-% Sections.
-\outer\def\numberedsec{\parsearg\secyyy}
-\def\secyyy #1{\numhead1{#1}} % normally calls seczzz
-\def\seczzz #1{%
-\subsecno=0 \subsubsecno=0 \global\advance \secno by 1 %
-\gdef\thissection{#1}\secheading {#1}{\the\chapno}{\the\secno}%
-\toks0 = {#1}%
-\edef\temp{\noexpand\writetocentry{\realbackslash secentry{\the\toks0}%
- {\the\chapno}{\the\secno}}}%
-\temp
-\donoderef
-\nobreak
-}
-
-\outer\def\appendixsection{\parsearg\appendixsecyyy}
-\outer\def\appendixsec{\parsearg\appendixsecyyy}
-\def\appendixsecyyy #1{\apphead1{#1}} % normally calls appendixsectionzzz
-\def\appendixsectionzzz #1{%
-\subsecno=0 \subsubsecno=0 \global\advance \secno by 1 %
-\gdef\thissection{#1}\secheading {#1}{\appendixletter}{\the\secno}%
-\toks0 = {#1}%
-\edef\temp{\noexpand\writetocentry{\realbackslash secentry{\the\toks0}%
- {\appendixletter}{\the\secno}}}%
-\temp
-\appendixnoderef
-\nobreak
-}
-
-\outer\def\unnumberedsec{\parsearg\unnumberedsecyyy}
-\def\unnumberedsecyyy #1{\unnmhead1{#1}} % normally calls unnumberedseczzz
-\def\unnumberedseczzz #1{%
-\plainsecheading {#1}\gdef\thissection{#1}%
-\toks0 = {#1}%
-\edef\temp{\noexpand\writetocentry{\realbackslash unnumbsecentry{\the\toks0}}}%
-\temp
-\unnumbnoderef
-\nobreak
-}
-
-% Subsections.
-\outer\def\numberedsubsec{\parsearg\numberedsubsecyyy}
-\def\numberedsubsecyyy #1{\numhead2{#1}} % normally calls numberedsubseczzz
-\def\numberedsubseczzz #1{%
-\gdef\thissection{#1}\subsubsecno=0 \global\advance \subsecno by 1 %
-\subsecheading {#1}{\the\chapno}{\the\secno}{\the\subsecno}%
-\toks0 = {#1}%
-\edef\temp{\noexpand\writetocentry{\realbackslash subsecentry{\the\toks0}%
- {\the\chapno}{\the\secno}{\the\subsecno}}}%
-\temp
-\donoderef
-\nobreak
-}
-
-\outer\def\appendixsubsec{\parsearg\appendixsubsecyyy}
-\def\appendixsubsecyyy #1{\apphead2{#1}} % normally calls appendixsubseczzz
-\def\appendixsubseczzz #1{%
-\gdef\thissection{#1}\subsubsecno=0 \global\advance \subsecno by 1 %
-\subsecheading {#1}{\appendixletter}{\the\secno}{\the\subsecno}%
-\toks0 = {#1}%
-\edef\temp{\noexpand\writetocentry{\realbackslash subsecentry{\the\toks0}%
- {\appendixletter}{\the\secno}{\the\subsecno}}}%
-\temp
-\appendixnoderef
-\nobreak
-}
-
-\outer\def\unnumberedsubsec{\parsearg\unnumberedsubsecyyy}
-\def\unnumberedsubsecyyy #1{\unnmhead2{#1}} %normally calls unnumberedsubseczzz
-\def\unnumberedsubseczzz #1{%
-\plainsubsecheading {#1}\gdef\thissection{#1}%
-\toks0 = {#1}%
-\edef\temp{\noexpand\writetocentry{\realbackslash unnumbsubsecentry%
- {\the\toks0}}}%
-\temp
-\unnumbnoderef
-\nobreak
-}
-
-% Subsubsections.
-\outer\def\numberedsubsubsec{\parsearg\numberedsubsubsecyyy}
-\def\numberedsubsubsecyyy #1{\numhead3{#1}} % normally numberedsubsubseczzz
-\def\numberedsubsubseczzz #1{%
-\gdef\thissection{#1}\global\advance \subsubsecno by 1 %
-\subsubsecheading {#1}
- {\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno}%
-\toks0 = {#1}%
-\edef\temp{\noexpand\writetocentry{\realbackslash subsubsecentry{\the\toks0}%
- {\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno}}}%
-\temp
-\donoderef
-\nobreak
-}
-
-\outer\def\appendixsubsubsec{\parsearg\appendixsubsubsecyyy}
-\def\appendixsubsubsecyyy #1{\apphead3{#1}} % normally appendixsubsubseczzz
-\def\appendixsubsubseczzz #1{%
-\gdef\thissection{#1}\global\advance \subsubsecno by 1 %
-\subsubsecheading {#1}
- {\appendixletter}{\the\secno}{\the\subsecno}{\the\subsubsecno}%
-\toks0 = {#1}%
-\edef\temp{\noexpand\writetocentry{\realbackslash subsubsecentry{\the\toks0}%
- {\appendixletter}{\the\secno}{\the\subsecno}{\the\subsubsecno}}}%
-\temp
-\appendixnoderef
-\nobreak
-}
-
-\outer\def\unnumberedsubsubsec{\parsearg\unnumberedsubsubsecyyy}
-\def\unnumberedsubsubsecyyy #1{\unnmhead3{#1}} %normally unnumberedsubsubseczzz
-\def\unnumberedsubsubseczzz #1{%
-\plainsubsubsecheading {#1}\gdef\thissection{#1}%
-\toks0 = {#1}%
-\edef\temp{\noexpand\writetocentry{\realbackslash unnumbsubsubsecentry%
- {\the\toks0}}}%
-\temp
-\unnumbnoderef
-\nobreak
-}
-
-% These are variants which are not "outer", so they can appear in @ifinfo.
-% Actually, they should now be obsolete; ordinary section commands should work.
-\def\infotop{\parsearg\unnumberedzzz}
-\def\infounnumbered{\parsearg\unnumberedzzz}
-\def\infounnumberedsec{\parsearg\unnumberedseczzz}
-\def\infounnumberedsubsec{\parsearg\unnumberedsubseczzz}
-\def\infounnumberedsubsubsec{\parsearg\unnumberedsubsubseczzz}
-
-\def\infoappendix{\parsearg\appendixzzz}
-\def\infoappendixsec{\parsearg\appendixseczzz}
-\def\infoappendixsubsec{\parsearg\appendixsubseczzz}
-\def\infoappendixsubsubsec{\parsearg\appendixsubsubseczzz}
-
-\def\infochapter{\parsearg\chapterzzz}
-\def\infosection{\parsearg\sectionzzz}
-\def\infosubsection{\parsearg\subsectionzzz}
-\def\infosubsubsection{\parsearg\subsubsectionzzz}
-
-% These macros control what the section commands do, according
-% to what kind of chapter we are in (ordinary, appendix, or unnumbered).
-% Define them by default for a numbered chapter.
-\global\let\section = \numberedsec
-\global\let\subsection = \numberedsubsec
-\global\let\subsubsection = \numberedsubsubsec
-
-% Define @majorheading, @heading and @subheading
-
-% NOTE on use of \vbox for chapter headings, section headings, and such:
-% 1) We use \vbox rather than the earlier \line to permit
-% overlong headings to fold.
-% 2) \hyphenpenalty is set to 10000 because hyphenation in a
-% heading is obnoxious; this forbids it.
-% 3) Likewise, headings look best if no \parindent is used, and
-% if justification is not attempted. Hence \raggedright.
-
-
-\def\majorheading{\parsearg\majorheadingzzz}
-\def\majorheadingzzz #1{%
-{\advance\chapheadingskip by 10pt \chapbreak }%
-{\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
- \parindent=0pt\raggedright
- \rm #1\hfill}}\bigskip \par\penalty 200}
-
-\def\chapheading{\parsearg\chapheadingzzz}
-\def\chapheadingzzz #1{\chapbreak %
-{\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
- \parindent=0pt\raggedright
- \rm #1\hfill}}\bigskip \par\penalty 200}
-
-% @heading, @subheading, @subsubheading.
-\def\heading{\parsearg\plainsecheading}
-\def\subheading{\parsearg\plainsubsecheading}
-\def\subsubheading{\parsearg\plainsubsubsecheading}
-
-% These macros generate a chapter, section, etc. heading only
-% (including whitespace, linebreaking, etc. around it),
-% given all the information in convenient, parsed form.
-
-%%% Args are the skip and penalty (usually negative)
-\def\dobreak#1#2{\par\ifdim\lastskip<#1\removelastskip\penalty#2\vskip#1\fi}
-
-\def\setchapterstyle #1 {\csname CHAPF#1\endcsname}
-
-%%% Define plain chapter starts, and page on/off switching for it
-% Parameter controlling skip before chapter headings (if needed)
-
-\newskip\chapheadingskip
-
-\def\chapbreak{\dobreak \chapheadingskip {-4000}}
-\def\chappager{\par\vfill\supereject}
-\def\chapoddpage{\chappager \ifodd\pageno \else \hbox to 0pt{} \chappager\fi}
-
-\def\setchapternewpage #1 {\csname CHAPPAG#1\endcsname}
-
-\def\CHAPPAGoff{%
-\global\let\contentsalignmacro = \chappager
-\global\let\pchapsepmacro=\chapbreak
-\global\let\pagealignmacro=\chappager}
-
-\def\CHAPPAGon{%
-\global\let\contentsalignmacro = \chappager
-\global\let\pchapsepmacro=\chappager
-\global\let\pagealignmacro=\chappager
-\global\def\HEADINGSon{\HEADINGSsingle}}
-
-\def\CHAPPAGodd{
-\global\let\contentsalignmacro = \chapoddpage
-\global\let\pchapsepmacro=\chapoddpage
-\global\let\pagealignmacro=\chapoddpage
-\global\def\HEADINGSon{\HEADINGSdouble}}
-
-\CHAPPAGon
-
-\def\CHAPFplain{
-\global\let\chapmacro=\chfplain
-\global\let\unnumbchapmacro=\unnchfplain
-\global\let\centerchapmacro=\centerchfplain}
-
-% Plain chapter opening.
-% #1 is the text, #2 the chapter number or empty if unnumbered.
-\def\chfplain#1#2{%
- \pchapsepmacro
- {%
- \chapfonts \rm
- \def\chapnum{#2}%
- \setbox0 = \hbox{#2\ifx\chapnum\empty\else\enspace\fi}%
- \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright
- \hangindent = \wd0 \centerparametersmaybe
- \unhbox0 #1\par}%
- }%
- \nobreak\bigskip % no page break after a chapter title
- \nobreak
-}
-
-% Plain opening for unnumbered.
-\def\unnchfplain#1{\chfplain{#1}{}}
-
-% @centerchap -- centered and unnumbered.
-\let\centerparametersmaybe = \relax
-\def\centerchfplain#1{{%
- \def\centerparametersmaybe{%
- \advance\rightskip by 3\rightskip
- \leftskip = \rightskip
- \parfillskip = 0pt
- }%
- \chfplain{#1}{}%
-}}
-
-\CHAPFplain % The default
-
-\def\unnchfopen #1{%
-\chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
- \parindent=0pt\raggedright
- \rm #1\hfill}}\bigskip \par\nobreak
-}
-
-\def\chfopen #1#2{\chapoddpage {\chapfonts
-\vbox to 3in{\vfil \hbox to\hsize{\hfil #2} \hbox to\hsize{\hfil #1} \vfil}}%
-\par\penalty 5000 %
-}
-
-\def\centerchfopen #1{%
-\chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
- \parindent=0pt
- \hfill {\rm #1}\hfill}}\bigskip \par\nobreak
-}
-
-\def\CHAPFopen{
-\global\let\chapmacro=\chfopen
-\global\let\unnumbchapmacro=\unnchfopen
-\global\let\centerchapmacro=\centerchfopen}
-
-
-% Section titles.
-\newskip\secheadingskip
-\def\secheadingbreak{\dobreak \secheadingskip {-1000}}
-\def\secheading#1#2#3{\sectionheading{sec}{#2.#3}{#1}}
-\def\plainsecheading#1{\sectionheading{sec}{}{#1}}
-
-% Subsection titles.
-\newskip \subsecheadingskip
-\def\subsecheadingbreak{\dobreak \subsecheadingskip {-500}}
-\def\subsecheading#1#2#3#4{\sectionheading{subsec}{#2.#3.#4}{#1}}
-\def\plainsubsecheading#1{\sectionheading{subsec}{}{#1}}
-
-% Subsubsection titles.
-\let\subsubsecheadingskip = \subsecheadingskip
-\let\subsubsecheadingbreak = \subsecheadingbreak
-\def\subsubsecheading#1#2#3#4#5{\sectionheading{subsubsec}{#2.#3.#4.#5}{#1}}
-\def\plainsubsubsecheading#1{\sectionheading{subsubsec}{}{#1}}
-
-
-% Print any size section title.
-%
-% #1 is the section type (sec/subsec/subsubsec), #2 is the section
-% number (maybe empty), #3 the text.
-\def\sectionheading#1#2#3{%
- {%
- \expandafter\advance\csname #1headingskip\endcsname by \parskip
- \csname #1headingbreak\endcsname
- }%
- {%
- % Switch to the right set of fonts.
- \csname #1fonts\endcsname \rm
- %
- % Only insert the separating space if we have a section number.
- \def\secnum{#2}%
- \setbox0 = \hbox{#2\ifx\secnum\empty\else\enspace\fi}%
- %
- \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright
- \hangindent = \wd0 % zero if no section number
- \unhbox0 #3}%
- }%
- \ifdim\parskip<10pt \nobreak\kern10pt\nobreak\kern-\parskip\fi \nobreak
-}
-
-
-\message{toc,}
-% Table of contents.
-\newwrite\tocfile
-
-% Write an entry to the toc file, opening it if necessary.
-% Called from @chapter, etc. We supply {\folio} at the end of the
-% argument, which will end up as the last argument to the \...entry macro.
-%
-% We open the .toc file here instead of at @setfilename or any other
-% given time so that @contents can be put in the document anywhere.
-%
-\newif\iftocfileopened
-\def\writetocentry#1{%
- \iftocfileopened\else
- \immediate\openout\tocfile = \jobname.toc
- \global\tocfileopenedtrue
- \fi
- \iflinks \write\tocfile{#1{\folio}}\fi
-}
-
-\newskip\contentsrightmargin \contentsrightmargin=1in
-\newcount\savepageno
-\newcount\lastnegativepageno \lastnegativepageno = -1
-
-% Finish up the main text and prepare to read what we've written
-% to \tocfile.
-%
-\def\startcontents#1{%
- % If @setchapternewpage on, and @headings double, the contents should
- % start on an odd page, unlike chapters. Thus, we maintain
- % \contentsalignmacro in parallel with \pagealignmacro.
- % From: Torbjorn Granlund <tege@matematik.su.se>
- \contentsalignmacro
- \immediate\closeout\tocfile
- %
- % Don't need to put `Contents' or `Short Contents' in the headline.
- % It is abundantly clear what they are.
- \unnumbchapmacro{#1}\def\thischapter{}%
- \savepageno = \pageno
- \begingroup % Set up to handle contents files properly.
- \catcode`\\=0 \catcode`\{=1 \catcode`\}=2 \catcode`\@=11
- % We can't do this, because then an actual ^ in a section
- % title fails, e.g., @chapter ^ -- exponentiation. --karl, 9jul97.
- %\catcode`\^=7 % to see ^^e4 as \"a etc. juha@piuha.ydi.vtt.fi
- \raggedbottom % Worry more about breakpoints than the bottom.
- \advance\hsize by -\contentsrightmargin % Don't use the full line length.
- %
- % Roman numerals for page numbers.
- \ifnum \pageno>0 \pageno = \lastnegativepageno \fi
-}
-
-
-% Normal (long) toc.
-\def\contents{%
- \startcontents{\putwordTOC}%
- \openin 1 \jobname.toc
- \ifeof 1 \else
- \closein 1
- \input \jobname.toc
- \fi
- \vfill \eject
- \contentsalignmacro % in case @setchapternewpage odd is in effect
- \endgroup
- \lastnegativepageno = \pageno
- \pageno = \savepageno
-}
-
-% And just the chapters.
-\def\summarycontents{%
- \startcontents{\putwordShortTOC}%
- %
- \let\chapentry = \shortchapentry
- \let\unnumbchapentry = \shortunnumberedentry
- % We want a true roman here for the page numbers.
- \secfonts
- \let\rm=\shortcontrm \let\bf=\shortcontbf \let\sl=\shortcontsl
- \rm
- \hyphenpenalty = 10000
- \advance\baselineskip by 1pt % Open it up a little.
- \def\secentry ##1##2##3##4{}
- \def\unnumbsecentry ##1##2{}
- \def\subsecentry ##1##2##3##4##5{}
- \def\unnumbsubsecentry ##1##2{}
- \def\subsubsecentry ##1##2##3##4##5##6{}
- \def\unnumbsubsubsecentry ##1##2{}
- \openin 1 \jobname.toc
- \ifeof 1 \else
- \closein 1
- \input \jobname.toc
- \fi
- \vfill \eject
- \contentsalignmacro % in case @setchapternewpage odd is in effect
- \endgroup
- \lastnegativepageno = \pageno
- \pageno = \savepageno
-}
-\let\shortcontents = \summarycontents
-
-\ifpdf
- \pdfcatalog{/PageMode /UseOutlines}%
-\fi
-
-% These macros generate individual entries in the table of contents.
-% The first argument is the chapter or section name.
-% The last argument is the page number.
-% The arguments in between are the chapter number, section number, ...
-
-% Chapter-level things, for both the long and short contents.
-\def\chapentry#1#2#3{\dochapentry{#2\labelspace#1}{#3}}
-
-% See comments in \dochapentry re vbox and related settings
-\def\shortchapentry#1#2#3{%
- \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno{#3}}%
-}
-
-% Typeset the label for a chapter or appendix for the short contents.
-% The arg is, e.g. `Appendix A' for an appendix, or `3' for a chapter.
-% We could simplify the code here by writing out an \appendixentry
-% command in the toc file for appendices, instead of using \chapentry
-% for both, but it doesn't seem worth it.
-\setbox0 = \hbox{\shortcontrm \putwordAppendix }
-\newdimen\shortappendixwidth \shortappendixwidth = \wd0
-
-\def\shortchaplabel#1{%
- % We typeset #1 in a box of constant width, regardless of the text of
- % #1, so the chapter titles will come out aligned.
- \setbox0 = \hbox{#1}%
- \dimen0 = \ifdim\wd0 > \shortappendixwidth \shortappendixwidth \else 0pt \fi
- %
- % This space should be plenty, since a single number is .5em, and the
- % widest letter (M) is 1em, at least in the Computer Modern fonts.
- % (This space doesn't include the extra space that gets added after
- % the label; that gets put in by \shortchapentry above.)
- \advance\dimen0 by 1.1em
- \hbox to \dimen0{#1\hfil}%
-}
-
-\def\unnumbchapentry#1#2{\dochapentry{#1}{#2}}
-\def\shortunnumberedentry#1#2{\tocentry{#1}{\doshortpageno{#2}}}
-
-% Sections.
-\def\secentry#1#2#3#4{\dosecentry{#2.#3\labelspace#1}{#4}}
-\def\unnumbsecentry#1#2{\dosecentry{#1}{#2}}
-
-% Subsections.
-\def\subsecentry#1#2#3#4#5{\dosubsecentry{#2.#3.#4\labelspace#1}{#5}}
-\def\unnumbsubsecentry#1#2{\dosubsecentry{#1}{#2}}
-
-% And subsubsections.
-\def\subsubsecentry#1#2#3#4#5#6{%
- \dosubsubsecentry{#2.#3.#4.#5\labelspace#1}{#6}}
-\def\unnumbsubsubsecentry#1#2{\dosubsubsecentry{#1}{#2}}
-
-% This parameter controls the indentation of the various levels.
-\newdimen\tocindent \tocindent = 3pc
-
-% Now for the actual typesetting. In all these, #1 is the text and #2 is the
-% page number.
-%
-% If the toc has to be broken over pages, we want it to be at chapters
-% if at all possible; hence the \penalty.
-\def\dochapentry#1#2{%
- \penalty-300 \vskip1\baselineskip plus.33\baselineskip minus.25\baselineskip
- \begingroup
- \chapentryfonts
- \tocentry{#1}{\dopageno{#2}}%
- \endgroup
- \nobreak\vskip .25\baselineskip plus.1\baselineskip
-}
-
-\def\dosecentry#1#2{\begingroup
- \secentryfonts \leftskip=\tocindent
- \tocentry{#1}{\dopageno{#2}}%
-\endgroup}
-
-\def\dosubsecentry#1#2{\begingroup
- \subsecentryfonts \leftskip=2\tocindent
- \tocentry{#1}{\dopageno{#2}}%
-\endgroup}
-
-\def\dosubsubsecentry#1#2{\begingroup
- \subsubsecentryfonts \leftskip=3\tocindent
- \tocentry{#1}{\dopageno{#2}}%
-\endgroup}
-
-% Final typesetting of a toc entry; we use the same \entry macro as for
-% the index entries, but we want to suppress hyphenation here. (We
-% can't do that in the \entry macro, since index entries might consist
-% of hyphenated-identifiers-that-do-not-fit-on-a-line-and-nothing-else.)
-\def\tocentry#1#2{\begingroup
- \vskip 0pt plus1pt % allow a little stretch for the sake of nice page breaks
- % Do not use \turnoffactive in these arguments. Since the toc is
- % typeset in cmr, so characters such as _ would come out wrong; we
- % have to do the usual translation tricks.
- \entry{#1}{#2}%
-\endgroup}
-
-% Space between chapter (or whatever) number and the title.
-\def\labelspace{\hskip1em \relax}
-
-\def\dopageno#1{{\rm #1}}
-\def\doshortpageno#1{{\rm #1}}
-
-\def\chapentryfonts{\secfonts \rm}
-\def\secentryfonts{\textfonts}
-\let\subsecentryfonts = \textfonts
-\let\subsubsecentryfonts = \textfonts
-
-
-\message{environments,}
-% @foo ... @end foo.
-
-% Since these characters are used in examples, it should be an even number of
-% \tt widths. Each \tt character is 1en, so two makes it 1em.
-% Furthermore, these definitions must come after we define our fonts.
-\newbox\dblarrowbox \newbox\longdblarrowbox
-\newbox\pushcharbox \newbox\bullbox
-\newbox\equivbox \newbox\errorbox
-
-%{\tentt
-%\global\setbox\dblarrowbox = \hbox to 1em{\hfil$\Rightarrow$\hfil}
-%\global\setbox\longdblarrowbox = \hbox to 1em{\hfil$\mapsto$\hfil}
-%\global\setbox\pushcharbox = \hbox to 1em{\hfil$\dashv$\hfil}
-%\global\setbox\equivbox = \hbox to 1em{\hfil$\ptexequiv$\hfil}
-% Adapted from the manmac format (p.420 of TeXbook)
-%\global\setbox\bullbox = \hbox to 1em{\kern.15em\vrule height .75ex width .85ex
-% depth .1ex\hfil}
-%}
-
-% @point{}, @result{}, @expansion{}, @print{}, @equiv{}.
-\def\point{$\star$}
-\def\result{\leavevmode\raise.15ex\hbox to 1em{\hfil$\Rightarrow$\hfil}}
-\def\expansion{\leavevmode\raise.1ex\hbox to 1em{\hfil$\mapsto$\hfil}}
-\def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}}
-\def\equiv{\leavevmode\lower.1ex\hbox to 1em{\hfil$\ptexequiv$\hfil}}
-
-% Adapted from the TeXbook's \boxit.
-{\tentt \global\dimen0 = 3em}% Width of the box.
-\dimen2 = .55pt % Thickness of rules
-% The text. (`r' is open on the right, `e' somewhat less so on the left.)
-\setbox0 = \hbox{\kern-.75pt \tensf error\kern-1.5pt}
-
-\global\setbox\errorbox=\hbox to \dimen0{\hfil
- \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right.
- \advance\hsize by -2\dimen2 % Rules.
- \vbox{
- \hrule height\dimen2
- \hbox{\vrule width\dimen2 \kern3pt % Space to left of text.
- \vtop{\kern2.4pt \box0 \kern2.4pt}% Space above/below.
- \kern3pt\vrule width\dimen2}% Space to right.
- \hrule height\dimen2}
- \hfil}
-
-% The @error{} command.
-\def\error{\leavevmode\lower.7ex\copy\errorbox}
-
-% @tex ... @end tex escapes into raw Tex temporarily.
-% One exception: @ is still an escape character, so that @end tex works.
-% But \@ or @@ will get a plain tex @ character.
-
-\def\tex{\begingroup
- \catcode `\\=0 \catcode `\{=1 \catcode `\}=2
- \catcode `\$=3 \catcode `\&=4 \catcode `\#=6
- \catcode `\^=7 \catcode `\_=8 \catcode `\~=13 \let~=\tie
- \catcode `\%=14
- \catcode 43=12 % plus
- \catcode`\"=12
- \catcode`\==12
- \catcode`\|=12
- \catcode`\<=12
- \catcode`\>=12
- \escapechar=`\\
- %
- \let\b=\ptexb
- \let\bullet=\ptexbullet
- \let\c=\ptexc
- \let\,=\ptexcomma
- \let\.=\ptexdot
- \let\dots=\ptexdots
- \let\equiv=\ptexequiv
- \let\!=\ptexexclam
- \let\i=\ptexi
- \let\{=\ptexlbrace
- \let\+=\tabalign
- \let\}=\ptexrbrace
- \let\*=\ptexstar
- \let\t=\ptext
- %
- \def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}%
- \def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}%
- \def\@{@}%
-\let\Etex=\endgroup}
-
-% Define @lisp ... @endlisp.
-% @lisp does a \begingroup so it can rebind things,
-% including the definition of @endlisp (which normally is erroneous).
-
-% Amount to narrow the margins by for @lisp.
-\newskip\lispnarrowing \lispnarrowing=0.4in
-
-% This is the definition that ^^M gets inside @lisp, @example, and other
-% such environments. \null is better than a space, since it doesn't
-% have any width.
-\def\lisppar{\null\endgraf}
-
-% Make each space character in the input produce a normal interword
-% space in the output. Don't allow a line break at this space, as this
-% is used only in environments like @example, where each line of input
-% should produce a line of output anyway.
-%
-{\obeyspaces %
-\gdef\sepspaces{\obeyspaces\let =\tie}}
-
-% Define \obeyedspace to be our active space, whatever it is. This is
-% for use in \parsearg.
-{\sepspaces%
-\global\let\obeyedspace= }
-
-% This space is always present above and below environments.
-\newskip\envskipamount \envskipamount = 0pt
-
-% Make spacing and below environment symmetrical. We use \parskip here
-% to help in doing that, since in @example-like environments \parskip
-% is reset to zero; thus the \afterenvbreak inserts no space -- but the
-% start of the next paragraph will insert \parskip
-%
-\def\aboveenvbreak{{\advance\envskipamount by \parskip
-\endgraf \ifdim\lastskip<\envskipamount
-\removelastskip \penalty-50 \vskip\envskipamount \fi}}
-
-\let\afterenvbreak = \aboveenvbreak
-
-% \nonarrowing is a flag. If "set", @lisp etc don't narrow margins.
-\let\nonarrowing=\relax
-
-% @cartouche ... @end cartouche: draw rectangle w/rounded corners around
-% environment contents.
-\font\circle=lcircle10
-\newdimen\circthick
-\newdimen\cartouter\newdimen\cartinner
-\newskip\normbskip\newskip\normpskip\newskip\normlskip
-\circthick=\fontdimen8\circle
-%
-\def\ctl{{\circle\char'013\hskip -6pt}}% 6pt from pl file: 1/2charwidth
-\def\ctr{{\hskip 6pt\circle\char'010}}
-\def\cbl{{\circle\char'012\hskip -6pt}}
-\def\cbr{{\hskip 6pt\circle\char'011}}
-\def\carttop{\hbox to \cartouter{\hskip\lskip
- \ctl\leaders\hrule height\circthick\hfil\ctr
- \hskip\rskip}}
-\def\cartbot{\hbox to \cartouter{\hskip\lskip
- \cbl\leaders\hrule height\circthick\hfil\cbr
- \hskip\rskip}}
-%
-\newskip\lskip\newskip\rskip
-
-\long\def\cartouche{%
-\begingroup
- \lskip=\leftskip \rskip=\rightskip
- \leftskip=0pt\rightskip=0pt %we want these *outside*.
- \cartinner=\hsize \advance\cartinner by-\lskip
- \advance\cartinner by-\rskip
- \cartouter=\hsize
- \advance\cartouter by 18.4pt % allow for 3pt kerns on either
-% side, and for 6pt waste from
-% each corner char, and rule thickness
- \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip
- % Flag to tell @lisp, etc., not to narrow margin.
- \let\nonarrowing=\comment
- \vbox\bgroup
- \baselineskip=0pt\parskip=0pt\lineskip=0pt
- \carttop
- \hbox\bgroup
- \hskip\lskip
- \vrule\kern3pt
- \vbox\bgroup
- \hsize=\cartinner
- \kern3pt
- \begingroup
- \baselineskip=\normbskip
- \lineskip=\normlskip
- \parskip=\normpskip
- \vskip -\parskip
-\def\Ecartouche{%
- \endgroup
- \kern3pt
- \egroup
- \kern3pt\vrule
- \hskip\rskip
- \egroup
- \cartbot
- \egroup
-\endgroup
-}}
-
-
-% This macro is called at the beginning of all the @example variants,
-% inside a group.
-\def\nonfillstart{%
- \aboveenvbreak
- \inENV % This group ends at the end of the body
- \hfuzz = 12pt % Don't be fussy
- \sepspaces % Make spaces be word-separators rather than space tokens.
- \singlespace
- \let\par = \lisppar % don't ignore blank lines
- \obeylines % each line of input is a line of output
- \parskip = 0pt
- \parindent = 0pt
- \emergencystretch = 0pt % don't try to avoid overfull boxes
- % @cartouche defines \nonarrowing to inhibit narrowing
- % at next level down.
- \ifx\nonarrowing\relax
- \advance \leftskip by \lispnarrowing
- \exdentamount=\lispnarrowing
- \let\exdent=\nofillexdent
- \let\nonarrowing=\relax
- \fi
-}
-
-% Define the \E... control sequence only if we are inside the particular
-% environment, so the error checking in \end will work.
-%
-% To end an @example-like environment, we first end the paragraph (via
-% \afterenvbreak's vertical glue), and then the group. That way we keep
-% the zero \parskip that the environments set -- \parskip glue will be
-% inserted at the beginning of the next paragraph in the document, after
-% the environment.
-%
-\def\nonfillfinish{\afterenvbreak\endgroup}
-
-% @lisp: indented, narrowed, typewriter font.
-\def\lisp{\begingroup
- \nonfillstart
- \let\Elisp = \nonfillfinish
- \tt
- \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special.
- \gobble % eat return
-}
-
-% @example: Same as @lisp.
-\def\example{\begingroup \def\Eexample{\nonfillfinish\endgroup}\lisp}
-
-% @small... is usually equivalent to the non-small (@smallbook
-% redefines). We must call \example (or whatever) last in the
-% definition, since it reads the return following the @example (or
-% whatever) command.
-%
-% This actually allows (for example) @end display inside an
-% @smalldisplay. Too bad, but makeinfo will catch the error anyway.
-%
-\def\smalldisplay{\begingroup\def\Esmalldisplay{\nonfillfinish\endgroup}\display}
-\def\smallexample{\begingroup\def\Esmallexample{\nonfillfinish\endgroup}\lisp}
-\def\smallformat{\begingroup\def\Esmallformat{\nonfillfinish\endgroup}\format}
-\def\smalllisp{\begingroup\def\Esmalllisp{\nonfillfinish\endgroup}\lisp}
-
-% Real @smallexample and @smalllisp (when @smallbook): use smaller fonts.
-% Originally contributed by Pavel@xerox.
-\def\smalllispx{\begingroup
- \def\Esmalllisp{\nonfillfinish\endgroup}%
- \def\Esmallexample{\nonfillfinish\endgroup}%
- \indexfonts
- \lisp
-}
-
-% @display: same as @lisp except keep current font.
-%
-\def\display{\begingroup
- \nonfillstart
- \let\Edisplay = \nonfillfinish
- \gobble
-}
-
-% @smalldisplay (when @smallbook): @display plus smaller fonts.
-%
-\def\smalldisplayx{\begingroup
- \def\Esmalldisplay{\nonfillfinish\endgroup}%
- \indexfonts \rm
- \display
-}
-
-% @format: same as @display except don't narrow margins.
-%
-\def\format{\begingroup
- \let\nonarrowing = t
- \nonfillstart
- \let\Eformat = \nonfillfinish
- \gobble
-}
-
-% @smallformat (when @smallbook): @format plus smaller fonts.
-%
-\def\smallformatx{\begingroup
- \def\Esmallformat{\nonfillfinish\endgroup}%
- \indexfonts \rm
- \format
-}
-
-% @flushleft (same as @format).
-%
-\def\flushleft{\begingroup \def\Eflushleft{\nonfillfinish\endgroup}\format}
-
-% @flushright.
-%
-\def\flushright{\begingroup
- \let\nonarrowing = t
- \nonfillstart
- \let\Eflushright = \nonfillfinish
- \advance\leftskip by 0pt plus 1fill
- \gobble
-}
-
-% @quotation does normal linebreaking (hence we can't use \nonfillstart)
-% and narrows the margins.
-%
-\def\quotation{%
- \begingroup\inENV %This group ends at the end of the @quotation body
- {\parskip=0pt \aboveenvbreak}% because \aboveenvbreak inserts \parskip
- \singlespace
- \parindent=0pt
- % We have retained a nonzero parskip for the environment, since we're
- % doing normal filling. So to avoid extra space below the environment...
- \def\Equotation{\parskip = 0pt \nonfillfinish}%
- %
- % @cartouche defines \nonarrowing to inhibit narrowing at next level down.
- \ifx\nonarrowing\relax
- \advance\leftskip by \lispnarrowing
- \advance\rightskip by \lispnarrowing
- \exdentamount = \lispnarrowing
- \let\nonarrowing = \relax
- \fi
-}
-
-
-\message{defuns,}
-% @defun etc.
-
-% Allow user to change definition object font (\df) internally
-\def\setdeffont #1 {\csname DEF#1\endcsname}
-
-\newskip\defbodyindent \defbodyindent=.4in
-\newskip\defargsindent \defargsindent=50pt
-\newskip\deftypemargin \deftypemargin=12pt
-\newskip\deflastargmargin \deflastargmargin=18pt
-
-\newcount\parencount
-% define \functionparens, which makes ( and ) and & do special things.
-% \functionparens affects the group it is contained in.
-\def\activeparens{%
-\catcode`\(=\active \catcode`\)=\active \catcode`\&=\active
-\catcode`\[=\active \catcode`\]=\active}
-
-% Make control sequences which act like normal parenthesis chars.
-\let\lparen = ( \let\rparen = )
-
-{\activeparens % Now, smart parens don't turn on until &foo (see \amprm)
-
-% Be sure that we always have a definition for `(', etc. For example,
-% if the fn name has parens in it, \boldbrax will not be in effect yet,
-% so TeX would otherwise complain about undefined control sequence.
-\global\let(=\lparen \global\let)=\rparen
-\global\let[=\lbrack \global\let]=\rbrack
-
-\gdef\functionparens{\boldbrax\let&=\amprm\parencount=0 }
-\gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb}
-% This is used to turn on special parens
-% but make & act ordinary (given that it's active).
-\gdef\boldbraxnoamp{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb\let&=\ampnr}
-
-% Definitions of (, ) and & used in args for functions.
-% This is the definition of ( outside of all parentheses.
-\gdef\oprm#1 {{\rm\char`\(}#1 \bf \let(=\opnested
- \global\advance\parencount by 1
-}
-%
-% This is the definition of ( when already inside a level of parens.
-\gdef\opnested{\char`\(\global\advance\parencount by 1 }
-%
-\gdef\clrm{% Print a paren in roman if it is taking us back to depth of 0.
- % also in that case restore the outer-level definition of (.
- \ifnum \parencount=1 {\rm \char `\)}\sl \let(=\oprm \else \char `\) \fi
- \global\advance \parencount by -1 }
-% If we encounter &foo, then turn on ()-hacking afterwards
-\gdef\amprm#1 {{\rm\&#1}\let(=\oprm \let)=\clrm\ }
-%
-\gdef\normalparens{\boldbrax\let&=\ampnr}
-} % End of definition inside \activeparens
-%% These parens (in \boldbrax) actually are a little bolder than the
-%% contained text. This is especially needed for [ and ]
-\def\opnr{{\sf\char`\(}\global\advance\parencount by 1 }
-\def\clnr{{\sf\char`\)}\global\advance\parencount by -1 }
-\let\ampnr = \&
-\def\lbrb{{\bf\char`\[}}
-\def\rbrb{{\bf\char`\]}}
-
-% Active &'s sneak into the index arguments, so make sure it's defined.
-{
- \catcode`& = 13
- \global\let& = \ampnr
-}
-
-% First, defname, which formats the header line itself.
-% #1 should be the function name.
-% #2 should be the type of definition, such as "Function".
-
-\def\defname #1#2{%
-% Get the values of \leftskip and \rightskip as they were
-% outside the @def...
-\dimen2=\leftskip
-\advance\dimen2 by -\defbodyindent
-\noindent
-\setbox0=\hbox{\hskip \deflastargmargin{\rm #2}\hskip \deftypemargin}%
-\dimen0=\hsize \advance \dimen0 by -\wd0 % compute size for first line
-\dimen1=\hsize \advance \dimen1 by -\defargsindent %size for continuations
-\parshape 2 0in \dimen0 \defargsindent \dimen1
-% Now output arg 2 ("Function" or some such)
-% ending at \deftypemargin from the right margin,
-% but stuck inside a box of width 0 so it does not interfere with linebreaking
-{% Adjust \hsize to exclude the ambient margins,
-% so that \rightline will obey them.
-\advance \hsize by -\dimen2
-\rlap{\rightline{{\rm #2}\hskip -1.25pc }}}%
-% Make all lines underfull and no complaints:
-\tolerance=10000 \hbadness=10000
-\advance\leftskip by -\defbodyindent
-\exdentamount=\defbodyindent
-{\df #1}\enskip % Generate function name
-}
-
-% Actually process the body of a definition
-% #1 should be the terminating control sequence, such as \Edefun.
-% #2 should be the "another name" control sequence, such as \defunx.
-% #3 should be the control sequence that actually processes the header,
-% such as \defunheader.
-
-\def\defparsebody #1#2#3{\begingroup\inENV% Environment for definitionbody
-\medbreak %
-% Define the end token that this defining construct specifies
-% so that it will exit this group.
-\def#1{\endgraf\endgroup\medbreak}%
-\def#2{\begingroup\obeylines\activeparens\spacesplit#3}%
-\parindent=0in
-\advance\leftskip by \defbodyindent
-\exdentamount=\defbodyindent
-\begingroup %
-\catcode 61=\active % 61 is `='
-\obeylines\activeparens\spacesplit#3}
-
-% #1 is the \E... control sequence to end the definition (which we define).
-% #2 is the \...x control sequence for consecutive fns (which we define).
-% #3 is the control sequence to call to resume processing.
-% #4, delimited by the space, is the class name.
-%
-\def\defmethparsebody#1#2#3#4 {\begingroup\inENV %
-\medbreak %
-% Define the end token that this defining construct specifies
-% so that it will exit this group.
-\def#1{\endgraf\endgroup\medbreak}%
-\def#2##1 {\begingroup\obeylines\activeparens\spacesplit{#3{##1}}}%
-\parindent=0in
-\advance\leftskip by \defbodyindent
-\exdentamount=\defbodyindent
-\begingroup\obeylines\activeparens\spacesplit{#3{#4}}}
-
-% @deftypemethod has an extra argument that nothing else does. Sigh.
-% #1 is the \E... control sequence to end the definition (which we define).
-% #2 is the \...x control sequence for consecutive fns (which we define).
-% #3 is the control sequence to call to resume processing.
-% #4, delimited by the space, is the class name.
-% #5 is the method's return type.
-%
-\def\deftypemethparsebody#1#2#3#4 #5 {\begingroup\inENV %
-\medbreak %
-% Define the end token that this defining construct specifies
-% so that it will exit this group.
-\def#1{\endgraf\endgroup\medbreak}%
-\def#2##1 ##2 {\begingroup\obeylines\activeparens\spacesplit{#3{##1}{##2}}}%
-\parindent=0in
-\advance\leftskip by \defbodyindent
-\exdentamount=\defbodyindent
-\begingroup\obeylines\activeparens\spacesplit{#3{#4}{#5}}}
-
-\def\defopparsebody #1#2#3#4#5 {\begingroup\inENV %
-\medbreak %
-% Define the end token that this defining construct specifies
-% so that it will exit this group.
-\def#1{\endgraf\endgroup\medbreak}%
-\def#2##1 ##2 {\def#4{##1}%
-\begingroup\obeylines\activeparens\spacesplit{#3{##2}}}%
-\parindent=0in
-\advance\leftskip by \defbodyindent
-\exdentamount=\defbodyindent
-\begingroup\obeylines\activeparens\spacesplit{#3{#5}}}
-
-% These parsing functions are similar to the preceding ones
-% except that they do not make parens into active characters.
-% These are used for "variables" since they have no arguments.
-
-\def\defvarparsebody #1#2#3{\begingroup\inENV% Environment for definitionbody
-\medbreak %
-% Define the end token that this defining construct specifies
-% so that it will exit this group.
-\def#1{\endgraf\endgroup\medbreak}%
-\def#2{\begingroup\obeylines\spacesplit#3}%
-\parindent=0in
-\advance\leftskip by \defbodyindent
-\exdentamount=\defbodyindent
-\begingroup %
-\catcode 61=\active %
-\obeylines\spacesplit#3}
-
-% This is used for \def{tp,vr}parsebody. It could probably be used for
-% some of the others, too, with some judicious conditionals.
-%
-\def\parsebodycommon#1#2#3{%
- \begingroup\inENV %
- \medbreak %
- % Define the end token that this defining construct specifies
- % so that it will exit this group.
- \def#1{\endgraf\endgroup\medbreak}%
- \def#2##1 {\begingroup\obeylines\spacesplit{#3{##1}}}%
- \parindent=0in
- \advance\leftskip by \defbodyindent
- \exdentamount=\defbodyindent
- \begingroup\obeylines
-}
-
-\def\defvrparsebody#1#2#3#4 {%
- \parsebodycommon{#1}{#2}{#3}%
- \spacesplit{#3{#4}}%
-}
-
-% This loses on `@deftp {Data Type} {struct termios}' -- it thinks the
-% type is just `struct', because we lose the braces in `{struct
-% termios}' when \spacesplit reads its undelimited argument. Sigh.
-% \let\deftpparsebody=\defvrparsebody
-%
-% So, to get around this, we put \empty in with the type name. That
-% way, TeX won't find exactly `{...}' as an undelimited argument, and
-% won't strip off the braces.
-%
-\def\deftpparsebody #1#2#3#4 {%
- \parsebodycommon{#1}{#2}{#3}%
- \spacesplit{\parsetpheaderline{#3{#4}}}\empty
-}
-
-% Fine, but then we have to eventually remove the \empty *and* the
-% braces (if any). That's what this does.
-%
-\def\removeemptybraces\empty#1\relax{#1}
-
-% After \spacesplit has done its work, this is called -- #1 is the final
-% thing to call, #2 the type name (which starts with \empty), and #3
-% (which might be empty) the arguments.
-%
-\def\parsetpheaderline#1#2#3{%
- #1{\removeemptybraces#2\relax}{#3}%
-}%
-
-\def\defopvarparsebody #1#2#3#4#5 {\begingroup\inENV %
-\medbreak %
-% Define the end token that this defining construct specifies
-% so that it will exit this group.
-\def#1{\endgraf\endgroup\medbreak}%
-\def#2##1 ##2 {\def#4{##1}%
-\begingroup\obeylines\spacesplit{#3{##2}}}%
-\parindent=0in
-\advance\leftskip by \defbodyindent
-\exdentamount=\defbodyindent
-\begingroup\obeylines\spacesplit{#3{#5}}}
-
-% Split up #2 at the first space token.
-% call #1 with two arguments:
-% the first is all of #2 before the space token,
-% the second is all of #2 after that space token.
-% If #2 contains no space token, all of it is passed as the first arg
-% and the second is passed as empty.
-
-{\obeylines
-\gdef\spacesplit#1#2^^M{\endgroup\spacesplitfoo{#1}#2 \relax\spacesplitfoo}%
-\long\gdef\spacesplitfoo#1#2 #3#4\spacesplitfoo{%
-\ifx\relax #3%
-#1{#2}{}\else #1{#2}{#3#4}\fi}}
-
-% So much for the things common to all kinds of definitions.
-
-% Define @defun.
-
-% First, define the processing that is wanted for arguments of \defun
-% Use this to expand the args and terminate the paragraph they make up
-
-\def\defunargs#1{\functionparens \sl
-% Expand, preventing hyphenation at `-' chars.
-% Note that groups don't affect changes in \hyphenchar.
-% Set the font temporarily and use \font in case \setfont made \tensl a macro.
-{\tensl\hyphenchar\font=0}%
-#1%
-{\tensl\hyphenchar\font=45}%
-\ifnum\parencount=0 \else \errmessage{Unbalanced parentheses in @def}\fi%
-\interlinepenalty=10000
-\advance\rightskip by 0pt plus 1fil
-\endgraf\nobreak\vskip -\parskip\nobreak
-}
-
-\def\deftypefunargs #1{%
-% Expand, preventing hyphenation at `-' chars.
-% Note that groups don't affect changes in \hyphenchar.
-% Use \boldbraxnoamp, not \functionparens, so that & is not special.
-\boldbraxnoamp
-\tclose{#1}% avoid \code because of side effects on active chars
-\interlinepenalty=10000
-\advance\rightskip by 0pt plus 1fil
-\endgraf\nobreak\vskip -\parskip\nobreak
-}
-
-% Do complete processing of one @defun or @defunx line already parsed.
-
-% @deffn Command forward-char nchars
-
-\def\deffn{\defmethparsebody\Edeffn\deffnx\deffnheader}
-
-\def\deffnheader #1#2#3{\doind {fn}{\code{#2}}%
-\begingroup\defname {#2}{#1}\defunargs{#3}\endgroup %
-\catcode 61=\other % Turn off change made in \defparsebody
-}
-
-% @defun == @deffn Function
-
-\def\defun{\defparsebody\Edefun\defunx\defunheader}
-
-\def\defunheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index
-\begingroup\defname {#1}{\putwordDeffunc}%
-\defunargs {#2}\endgroup %
-\catcode 61=\other % Turn off change made in \defparsebody
-}
-
-% @deftypefun int foobar (int @var{foo}, float @var{bar})
-
-\def\deftypefun{\defparsebody\Edeftypefun\deftypefunx\deftypefunheader}
-
-% #1 is the data type. #2 is the name and args.
-\def\deftypefunheader #1#2{\deftypefunheaderx{#1}#2 \relax}
-% #1 is the data type, #2 the name, #3 the args.
-\def\deftypefunheaderx #1#2 #3\relax{%
-\doind {fn}{\code{#2}}% Make entry in function index
-\begingroup\defname {\defheaderxcond#1\relax$$$#2}{\putwordDeftypefun}%
-\deftypefunargs {#3}\endgroup %
-\catcode 61=\other % Turn off change made in \defparsebody
-}
-
-% @deftypefn {Library Function} int foobar (int @var{foo}, float @var{bar})
-
-\def\deftypefn{\defmethparsebody\Edeftypefn\deftypefnx\deftypefnheader}
-
-% \defheaderxcond#1\relax$$$
-% puts #1 in @code, followed by a space, but does nothing if #1 is null.
-\def\defheaderxcond#1#2$$${\ifx#1\relax\else\code{#1#2} \fi}
-
-% #1 is the classification. #2 is the data type. #3 is the name and args.
-\def\deftypefnheader #1#2#3{\deftypefnheaderx{#1}{#2}#3 \relax}
-% #1 is the classification, #2 the data type, #3 the name, #4 the args.
-\def\deftypefnheaderx #1#2#3 #4\relax{%
-\doind {fn}{\code{#3}}% Make entry in function index
-\begingroup
-\normalparens % notably, turn off `&' magic, which prevents
-% at least some C++ text from working
-\defname {\defheaderxcond#2\relax$$$#3}{#1}%
-\deftypefunargs {#4}\endgroup %
-\catcode 61=\other % Turn off change made in \defparsebody
-}
-
-% @defmac == @deffn Macro
-
-\def\defmac{\defparsebody\Edefmac\defmacx\defmacheader}
-
-\def\defmacheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index
-\begingroup\defname {#1}{\putwordDefmac}%
-\defunargs {#2}\endgroup %
-\catcode 61=\other % Turn off change made in \defparsebody
-}
-
-% @defspec == @deffn Special Form
-
-\def\defspec{\defparsebody\Edefspec\defspecx\defspecheader}
-
-\def\defspecheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index
-\begingroup\defname {#1}{\putwordDefspec}%
-\defunargs {#2}\endgroup %
-\catcode 61=\other % Turn off change made in \defparsebody
-}
-
-% @defop CATEGORY CLASS OPERATION ARG...
-%
-\def\defop #1 {\def\defoptype{#1}%
-\defopparsebody\Edefop\defopx\defopheader\defoptype}
-%
-\def\defopheader #1#2#3{%
-\dosubind {fn}{\code{#2}}{\putwordon\ #1}% Make entry in function index
-\begingroup\defname {#2}{\defoptype\ \putwordon\ #1}%
-\defunargs {#3}\endgroup %
-}
-
-% @deftypemethod CLASS RETURN-TYPE METHOD ARG...
-%
-\def\deftypemethod{%
- \deftypemethparsebody\Edeftypemethod\deftypemethodx\deftypemethodheader}
-%
-% #1 is the class name, #2 the data type, #3 the method name, #4 the args.
-\def\deftypemethodheader#1#2#3#4{%
- \dosubind{fn}{\code{#3}}{\putwordon\ \code{#1}}% entry in function index
- \begingroup
- \defname{\defheaderxcond#2\relax$$$#3}{\putwordMethodon\ \code{#1}}%
- \deftypefunargs{#4}%
- \endgroup
-}
-
-% @deftypeivar CLASS TYPE VARNAME
-%
-\def\deftypeivar{%
- \deftypemethparsebody\Edeftypeivar\deftypeivarx\deftypeivarheader}
-%
-% #1 is the class name, #2 the data type, #3 the variable name.
-\def\deftypeivarheader#1#2#3{%
- \dosubind{vr}{\code{#3}}{\putwordof\ \code{#1}}% entry in variable index
- \begingroup
- \defname{#3}{\putwordInstanceVariableof\ \code{#1}}%
- \defvarargs{#3}%
- \endgroup
-}
-
-% @defmethod == @defop Method
-%
-\def\defmethod{\defmethparsebody\Edefmethod\defmethodx\defmethodheader}
-%
-% #1 is the class name, #2 the method name, #3 the args.
-\def\defmethodheader#1#2#3{%
- \dosubind{fn}{\code{#2}}{\putwordon\ \code{#1}}% entry in function index
- \begingroup
- \defname{#2}{\putwordMethodon\ \code{#1}}%
- \defunargs{#3}%
- \endgroup
-}
-
-% @defcv {Class Option} foo-class foo-flag
-
-\def\defcv #1 {\def\defcvtype{#1}%
-\defopvarparsebody\Edefcv\defcvx\defcvarheader\defcvtype}
-
-\def\defcvarheader #1#2#3{%
-\dosubind {vr}{\code{#2}}{\putwordof\ #1}% Make entry in var index
-\begingroup\defname {#2}{\defcvtype\ \putwordof\ #1}%
-\defvarargs {#3}\endgroup %
-}
-
-% @defivar CLASS VARNAME == @defcv {Instance Variable} CLASS VARNAME
-%
-\def\defivar{\defvrparsebody\Edefivar\defivarx\defivarheader}
-%
-\def\defivarheader#1#2#3{%
- \dosubind {vr}{\code{#2}}{\putwordof\ #1}% entry in var index
- \begingroup
- \defname{#2}{\putwordInstanceVariableof\ #1}%
- \defvarargs{#3}%
- \endgroup
-}
-
-% @defvar
-% First, define the processing that is wanted for arguments of @defvar.
-% This is actually simple: just print them in roman.
-% This must expand the args and terminate the paragraph they make up
-\def\defvarargs #1{\normalparens #1%
-\interlinepenalty=10000
-\endgraf\nobreak\vskip -\parskip\nobreak}
-
-% @defvr Counter foo-count
-
-\def\defvr{\defvrparsebody\Edefvr\defvrx\defvrheader}
-
-\def\defvrheader #1#2#3{\doind {vr}{\code{#2}}%
-\begingroup\defname {#2}{#1}\defvarargs{#3}\endgroup}
-
-% @defvar == @defvr Variable
-
-\def\defvar{\defvarparsebody\Edefvar\defvarx\defvarheader}
-
-\def\defvarheader #1#2{\doind {vr}{\code{#1}}% Make entry in var index
-\begingroup\defname {#1}{\putwordDefvar}%
-\defvarargs {#2}\endgroup %
-}
-
-% @defopt == @defvr {User Option}
-
-\def\defopt{\defvarparsebody\Edefopt\defoptx\defoptheader}
-
-\def\defoptheader #1#2{\doind {vr}{\code{#1}}% Make entry in var index
-\begingroup\defname {#1}{\putwordDefopt}%
-\defvarargs {#2}\endgroup %
-}
-
-% @deftypevar int foobar
-
-\def\deftypevar{\defvarparsebody\Edeftypevar\deftypevarx\deftypevarheader}
-
-% #1 is the data type. #2 is the name, perhaps followed by text that
-% is actually part of the data type, which should not be put into the index.
-\def\deftypevarheader #1#2{%
-\dovarind#2 \relax% Make entry in variables index
-\begingroup\defname {\defheaderxcond#1\relax$$$#2}{\putwordDeftypevar}%
-\interlinepenalty=10000
-\endgraf\nobreak\vskip -\parskip\nobreak
-\endgroup}
-\def\dovarind#1 #2\relax{\doind{vr}{\code{#1}}}
-
-% @deftypevr {Global Flag} int enable
-
-\def\deftypevr{\defvrparsebody\Edeftypevr\deftypevrx\deftypevrheader}
-
-\def\deftypevrheader #1#2#3{\dovarind#3 \relax%
-\begingroup\defname {\defheaderxcond#2\relax$$$#3}{#1}
-\interlinepenalty=10000
-\endgraf\nobreak\vskip -\parskip\nobreak
-\endgroup}
-
-% Now define @deftp
-% Args are printed in bold, a slight difference from @defvar.
-
-\def\deftpargs #1{\bf \defvarargs{#1}}
-
-% @deftp Class window height width ...
-
-\def\deftp{\deftpparsebody\Edeftp\deftpx\deftpheader}
-
-\def\deftpheader #1#2#3{\doind {tp}{\code{#2}}%
-\begingroup\defname {#2}{#1}\deftpargs{#3}\endgroup}
-
-% These definitions are used if you use @defunx (etc.)
-% anywhere other than immediately after a @defun or @defunx.
-%
-\def\defcvx#1 {\errmessage{@defcvx in invalid context}}
-\def\deffnx#1 {\errmessage{@deffnx in invalid context}}
-\def\defivarx#1 {\errmessage{@defivarx in invalid context}}
-\def\defmacx#1 {\errmessage{@defmacx in invalid context}}
-\def\defmethodx#1 {\errmessage{@defmethodx in invalid context}}
-\def\defoptx #1 {\errmessage{@defoptx in invalid context}}
-\def\defopx#1 {\errmessage{@defopx in invalid context}}
-\def\defspecx#1 {\errmessage{@defspecx in invalid context}}
-\def\deftpx#1 {\errmessage{@deftpx in invalid context}}
-\def\deftypefnx#1 {\errmessage{@deftypefnx in invalid context}}
-\def\deftypefunx#1 {\errmessage{@deftypefunx in invalid context}}
-\def\deftypeivarx#1 {\errmessage{@deftypeivarx in invalid context}}
-\def\deftypemethodx#1 {\errmessage{@deftypemethodx in invalid context}}
-\def\deftypevarx#1 {\errmessage{@deftypevarx in invalid context}}
-\def\deftypevrx#1 {\errmessage{@deftypevrx in invalid context}}
-\def\defunx#1 {\errmessage{@defunx in invalid context}}
-\def\defvarx#1 {\errmessage{@defvarx in invalid context}}
-\def\defvrx#1 {\errmessage{@defvrx in invalid context}}
-
-
-\message{macros,}
-% @macro.
-
-% To do this right we need a feature of e-TeX, \scantokens,
-% which we arrange to emulate with a temporary file in ordinary TeX.
-\ifx\eTeXversion\undefined
- \newwrite\macscribble
- \def\scanmacro#1{%
- \begingroup \newlinechar`\^^M
- % Undo catcode changes of \startcontents and \doprintindex
- \catcode`\@=0 \catcode`\\=12 \escapechar=`\@
- % Append \endinput to make sure that TeX does not see the ending newline.
- \toks0={#1\endinput}%
- \immediate\openout\macscribble=\jobname.tmp
- \immediate\write\macscribble{\the\toks0}%
- \immediate\closeout\macscribble
- \let\xeatspaces\eatspaces
- \input \jobname.tmp
- \endgroup
-}
-\else
-\def\scanmacro#1{%
-\begingroup \newlinechar`\^^M
-% Undo catcode changes of \startcontents and \doprintindex
-\catcode`\@=0 \catcode`\\=12 \escapechar=`\@
-\let\xeatspaces\eatspaces\scantokens{#1\endinput}\endgroup}
-\fi
-
-\newcount\paramno % Count of parameters
-\newtoks\macname % Macro name
-\newif\ifrecursive % Is it recursive?
-\def\macrolist{} % List of all defined macros in the form
- % \do\macro1\do\macro2...
-
-% Utility routines.
-% Thisdoes \let #1 = #2, except with \csnames.
-\def\cslet#1#2{%
-\expandafter\expandafter
-\expandafter\let
-\expandafter\expandafter
-\csname#1\endcsname
-\csname#2\endcsname}
-
-% Trim leading and trailing spaces off a string.
-% Concepts from aro-bend problem 15 (see CTAN).
-{\catcode`\@=11
-\gdef\eatspaces #1{\expandafter\trim@\expandafter{#1 }}
-\gdef\trim@ #1{\trim@@ @#1 @ #1 @ @@}
-\gdef\trim@@ #1@ #2@ #3@@{\trim@@@\empty #2 @}
-\def\unbrace#1{#1}
-\unbrace{\gdef\trim@@@ #1 } #2@{#1}
-}
-
-% Trim a single trailing ^^M off a string.
-{\catcode`\^^M=12\catcode`\Q=3%
-\gdef\eatcr #1{\eatcra #1Q^^MQ}%
-\gdef\eatcra#1^^MQ{\eatcrb#1Q}%
-\gdef\eatcrb#1Q#2Q{#1}%
-}
-
-% Macro bodies are absorbed as an argument in a context where
-% all characters are catcode 10, 11 or 12, except \ which is active
-% (as in normal texinfo). It is necessary to change the definition of \.
-
-% It's necessary to have hard CRs when the macro is executed. This is
-% done by making ^^M (\endlinechar) catcode 12 when reading the macro
-% body, and then making it the \newlinechar in \scanmacro.
-
-\def\macrobodyctxt{%
- \catcode`\~=12
- \catcode`\^=12
- \catcode`\_=12
- \catcode`\|=12
- \catcode`\<=12
- \catcode`\>=12
- \catcode`\+=12
- \catcode`\{=12
- \catcode`\}=12
- \catcode`\@=12
- \catcode`\^^M=12
- \usembodybackslash}
-
-\def\macroargctxt{%
- \catcode`\~=12
- \catcode`\^=12
- \catcode`\_=12
- \catcode`\|=12
- \catcode`\<=12
- \catcode`\>=12
- \catcode`\+=12
- \catcode`\@=12
- \catcode`\\=12}
-
-% \mbodybackslash is the definition of \ in @macro bodies.
-% It maps \foo\ => \csname macarg.foo\endcsname => #N
-% where N is the macro parameter number.
-% We define \csname macarg.\endcsname to be \realbackslash, so
-% \\ in macro replacement text gets you a backslash.
-
-{\catcode`@=0 @catcode`@\=@active
- @gdef@usembodybackslash{@let\=@mbodybackslash}
- @gdef@mbodybackslash#1\{@csname macarg.#1@endcsname}
-}
-\expandafter\def\csname macarg.\endcsname{\realbackslash}
-
-\def\macro{\recursivefalse\parsearg\macroxxx}
-\def\rmacro{\recursivetrue\parsearg\macroxxx}
-
-\def\macroxxx#1{%
- \getargs{#1}% now \macname is the macname and \argl the arglist
- \ifx\argl\empty % no arguments
- \paramno=0%
- \else
- \expandafter\parsemargdef \argl;%
- \fi
- \if1\csname ismacro.\the\macname\endcsname
- \message{Warning: redefining \the\macname}%
- \else
- \expandafter\ifx\csname \the\macname\endcsname \relax
- \else \errmessage{The name \the\macname\space is reserved}\fi
- \global\cslet{macsave.\the\macname}{\the\macname}%
- \global\expandafter\let\csname ismacro.\the\macname\endcsname=1%
- % Add the macroname to \macrolist
- \toks0 = \expandafter{\macrolist\do}%
- \xdef\macrolist{\the\toks0
- \expandafter\noexpand\csname\the\macname\endcsname}%
- \fi
- \begingroup \macrobodyctxt
- \ifrecursive \expandafter\parsermacbody
- \else \expandafter\parsemacbody
- \fi}
-
-\def\unmacro{\parsearg\unmacroxxx}
-\def\unmacroxxx#1{%
- \if1\csname ismacro.#1\endcsname
- \global\cslet{#1}{macsave.#1}%
- \global\expandafter\let \csname ismacro.#1\endcsname=0%
- % Remove the macro name from \macrolist
- \begingroup
- \edef\tempa{\expandafter\noexpand\csname#1\endcsname}%
- \def\do##1{%
- \def\tempb{##1}%
- \ifx\tempa\tempb
- % remove this
- \else
- \toks0 = \expandafter{\newmacrolist\do}%
- \edef\newmacrolist{\the\toks0\expandafter\noexpand\tempa}%
- \fi}%
- \def\newmacrolist{}%
- % Execute macro list to define \newmacrolist
- \macrolist
- \global\let\macrolist\newmacrolist
- \endgroup
- \else
- \errmessage{Macro #1 not defined}%
- \fi
-}
-
-% This makes use of the obscure feature that if the last token of a
-% <parameter list> is #, then the preceding argument is delimited by
-% an opening brace, and that opening brace is not consumed.
-\def\getargs#1{\getargsxxx#1{}}
-\def\getargsxxx#1#{\getmacname #1 \relax\getmacargs}
-\def\getmacname #1 #2\relax{\macname={#1}}
-\def\getmacargs#1{\def\argl{#1}}
-
-% Parse the optional {params} list. Set up \paramno and \paramlist
-% so \defmacro knows what to do. Define \macarg.blah for each blah
-% in the params list, to be ##N where N is the position in that list.
-% That gets used by \mbodybackslash (above).
-
-% We need to get `macro parameter char #' into several definitions.
-% The technique used is stolen from LaTeX: let \hash be something
-% unexpandable, insert that wherever you need a #, and then redefine
-% it to # just before using the token list produced.
-%
-% The same technique is used to protect \eatspaces till just before
-% the macro is used.
-
-\def\parsemargdef#1;{\paramno=0\def\paramlist{}%
- \let\hash\relax\let\xeatspaces\relax\parsemargdefxxx#1,;,}
-\def\parsemargdefxxx#1,{%
- \if#1;\let\next=\relax
- \else \let\next=\parsemargdefxxx
- \advance\paramno by 1%
- \expandafter\edef\csname macarg.\eatspaces{#1}\endcsname
- {\xeatspaces{\hash\the\paramno}}%
- \edef\paramlist{\paramlist\hash\the\paramno,}%
- \fi\next}
-
-% These two commands read recursive and nonrecursive macro bodies.
-% (They're different since rec and nonrec macros end differently.)
-
-\long\def\parsemacbody#1@end macro%
-{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}%
-\long\def\parsermacbody#1@end rmacro%
-{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}%
-
-% This defines the macro itself. There are six cases: recursive and
-% nonrecursive macros of zero, one, and many arguments.
-% Much magic with \expandafter here.
-% \xdef is used so that macro definitions will survive the file
-% they're defined in; @include reads the file inside a group.
-\def\defmacro{%
- \let\hash=##% convert placeholders to macro parameter chars
- \ifrecursive
- \ifcase\paramno
- % 0
- \expandafter\xdef\csname\the\macname\endcsname{%
- \noexpand\scanmacro{\temp}}%
- \or % 1
- \expandafter\xdef\csname\the\macname\endcsname{%
- \bgroup\noexpand\macroargctxt
- \noexpand\braceorline
- \expandafter\noexpand\csname\the\macname xxx\endcsname}%
- \expandafter\xdef\csname\the\macname xxx\endcsname##1{%
- \egroup\noexpand\scanmacro{\temp}}%
- \else % many
- \expandafter\xdef\csname\the\macname\endcsname{%
- \bgroup\noexpand\macroargctxt
- \noexpand\csname\the\macname xx\endcsname}%
- \expandafter\xdef\csname\the\macname xx\endcsname##1{%
- \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}%
- \expandafter\expandafter
- \expandafter\xdef
- \expandafter\expandafter
- \csname\the\macname xxx\endcsname
- \paramlist{\egroup\noexpand\scanmacro{\temp}}%
- \fi
- \else
- \ifcase\paramno
- % 0
- \expandafter\xdef\csname\the\macname\endcsname{%
- \noexpand\norecurse{\the\macname}%
- \noexpand\scanmacro{\temp}\egroup}%
- \or % 1
- \expandafter\xdef\csname\the\macname\endcsname{%
- \bgroup\noexpand\macroargctxt
- \noexpand\braceorline
- \expandafter\noexpand\csname\the\macname xxx\endcsname}%
- \expandafter\xdef\csname\the\macname xxx\endcsname##1{%
- \egroup
- \noexpand\norecurse{\the\macname}%
- \noexpand\scanmacro{\temp}\egroup}%
- \else % many
- \expandafter\xdef\csname\the\macname\endcsname{%
- \bgroup\noexpand\macroargctxt
- \expandafter\noexpand\csname\the\macname xx\endcsname}%
- \expandafter\xdef\csname\the\macname xx\endcsname##1{%
- \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}%
- \expandafter\expandafter
- \expandafter\xdef
- \expandafter\expandafter
- \csname\the\macname xxx\endcsname
- \paramlist{%
- \egroup
- \noexpand\norecurse{\the\macname}%
- \noexpand\scanmacro{\temp}\egroup}%
- \fi
- \fi}
-
-\def\norecurse#1{\bgroup\cslet{#1}{macsave.#1}}
-
-% \braceorline decides whether the next nonwhitespace character is a
-% {. If so it reads up to the closing }, if not, it reads the whole
-% line. Whatever was read is then fed to the next control sequence
-% as an argument (by \parsebrace or \parsearg)
-\def\braceorline#1{\let\next=#1\futurelet\nchar\braceorlinexxx}
-\def\braceorlinexxx{%
- \ifx\nchar\bgroup\else
- \expandafter\parsearg
- \fi \next}
-
-% We mant to disable all macros during \shipout so that they are not
-% expanded by \write.
-\def\turnoffmacros{\begingroup \def\do##1{\let\noexpand##1=\relax}%
- \edef\next{\macrolist}\expandafter\endgroup\next}
-
-
-% @alias.
-\def\alias#1=#2{\gdef#1{#2}}
-
-
-\message{cross references,}
-% @xref etc.
-
-\newwrite\auxfile
-
-\newif\ifhavexrefs % True if xref values are known.
-\newif\ifwarnedxrefs % True if we warned once that they aren't known.
-
-% @inforef is relatively simple.
-\def\inforef #1{\inforefzzz #1,,,,**}
-\def\inforefzzz #1,#2,#3,#4**{\putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}},
- node \samp{\ignorespaces#1{}}}
-
-% @node's job is to define \lastnode.
-\def\node{\ENVcheck\parsearg\nodezzz}
-\def\nodezzz#1{\nodexxx [#1,]}
-\def\nodexxx[#1,#2]{\gdef\lastnode{#1}}
-\let\nwnode=\node
-\let\lastnode=\relax
-
-% The sectioning commands (@chapter, etc.) call these.
-\def\donoderef{%
- \ifx\lastnode\relax\else
- \expandafter\expandafter\expandafter\setref{\lastnode}%
- {Ysectionnumberandtype}%
- \global\let\lastnode=\relax
- \fi
-}
-\def\unnumbnoderef{%
- \ifx\lastnode\relax\else
- \expandafter\expandafter\expandafter\setref{\lastnode}{Ynothing}%
- \global\let\lastnode=\relax
- \fi
-}
-\def\appendixnoderef{%
- \ifx\lastnode\relax\else
- \expandafter\expandafter\expandafter\setref{\lastnode}%
- {Yappendixletterandtype}%
- \global\let\lastnode=\relax
- \fi
-}
-
-
-% @anchor{NAME} -- define xref target at arbitrary point.
-%
-{ \catcode`\@ = 11
-% From latex.ltx, to make @anchor truely invisible.
-\newdimen\@savsk
-\newcount\@savsf
-\gdef\@bsphack{\relax
- \ifhmode \@savsk\lastskip \@savsf\spacefactor \fi
-}
-\gdef\@esphack{\relax
- \ifhmode \spacefactor\@savsf
- \ifdim\@savsk>\z@ \ignorespaces \fi
- \fi
-}
-\gdef\anchor#1{\@bsphack \setref{#1}{Ynothing}\@esphack}
-}
-
-% \setref{NAME}{SNT} defines a cross-reference point NAME, namely
-% NAME-title, NAME-pg, and NAME-SNT. Called from \foonoderef. We have
-% to set \indexdummies so commands such as @code in a section title
-% aren't expanded. It would be nicer not to expand the titles in the
-% first place, but there's so many layers that that is hard to do.
-%
-\def\setref#1#2{{%
- \indexdummies
- \ifpdf \pdfmkdest{#1}\fi
- \dosetq{#1-title}{Ytitle}%
- \dosetq{#1-pg}{Ypagenumber}%
- \dosetq{#1-snt}{#2}%
-}}
-
-% @xref, @pxref, and @ref generate cross-references. For \xrefX, #1 is
-% the node name, #2 the name of the Info cross-reference, #3 the printed
-% node name, #4 the name of the Info file, #5 the name of the printed
-% manual. All but the node name can be omitted.
-%
-\def\pxref#1{\putwordsee{} \xrefX[#1,,,,,,,]}
-\def\xref#1{\putwordSee{} \xrefX[#1,,,,,,,]}
-\def\ref#1{\xrefX[#1,,,,,,,]}
-\def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup
- \def\printedmanual{\ignorespaces #5}%
- \def\printednodename{\ignorespaces #3}%
- \setbox1=\hbox{\printedmanual}%
- \setbox0=\hbox{\printednodename}%
- \ifdim \wd0 = 0pt
- % No printed node name was explicitly given.
- \expandafter\ifx\csname SETxref-automatic-section-title\endcsname\relax
- % Use the node name inside the square brackets.
- \def\printednodename{\ignorespaces #1}%
- \else
- % Use the actual chapter/section title appear inside
- % the square brackets. Use the real section title if we have it.
- \ifdim \wd1 > 0pt
- % It is in another manual, so we don't have it.
- \def\printednodename{\ignorespaces #1}%
- \else
- \ifhavexrefs
- % We know the real title if we have the xref values.
- \def\printednodename{\refx{#1-title}{}}%
- \else
- % Otherwise just copy the Info node name.
- \def\printednodename{\ignorespaces #1}%
- \fi%
- \fi
- \fi
- \fi
- %
- % If we use \unhbox0 and \unhbox1 to print the node names, TeX does not
- % insert empty discretionaries after hyphens, which means that it will
- % not find a line break at a hyphen in a node names. Since some manuals
- % are best written with fairly long node names, containing hyphens, this
- % is a loss. Therefore, we give the text of the node name again, so it
- % is as if TeX is seeing it for the first time.
- \ifpdf
- \leavevmode
- \getfilename{#4}%
- \ifnum\filenamelength>0
- \pdfannotlink attr{/Border [0 0 0]}%
- goto file{\the\filename.pdf} name{#1@}%
- \else
- \pdfannotlink attr{/Border [0 0 0]}%
- goto name{#1@}%
- \fi
- \BlueGreen
- \fi
- %
- \ifdim \wd1 > 0pt
- \putwordsection{} ``\printednodename'' \putwordin{} \cite{\printedmanual}%
- \else
- % _ (for example) has to be the character _ for the purposes of the
- % control sequence corresponding to the node, but it has to expand
- % into the usual \leavevmode...\vrule stuff for purposes of
- % printing. So we \turnoffactive for the \refx-snt, back on for the
- % printing, back off for the \refx-pg.
- {\normalturnoffactive
- % Only output a following space if the -snt ref is nonempty; for
- % @unnumbered and @anchor, it won't be.
- \setbox2 = \hbox{\ignorespaces \refx{#1-snt}{}}%
- \ifdim \wd2 > 0pt \refx{#1-snt}\space\fi
- }%
- % [mynode],
- [\printednodename],\space
- % page 3
- \turnoffactive \putwordpage\tie\refx{#1-pg}{}%
- \fi
- \ifpdf \Black\pdfendlink \fi
-\endgroup}
-
-% \dosetq is the interface for calls from other macros
-
-% Use \normalturnoffactive so that punctuation chars such as underscore
-% and backslash work in node names. (\turnoffactive doesn't do \.)
-\def\dosetq#1#2{%
- {\let\folio=0%
- \normalturnoffactive
- \edef\next{\write\auxfile{\internalsetq{#1}{#2}}}%
- \iflinks
- \next
- \fi
- }%
-}
-
-% \internalsetq {foo}{page} expands into
-% CHARACTERS 'xrdef {foo}{...expansion of \Ypage...}
-% When the aux file is read, ' is the escape character
-
-\def\internalsetq #1#2{'xrdef {#1}{\csname #2\endcsname}}
-
-% Things to be expanded by \internalsetq
-
-\def\Ypagenumber{\folio}
-
-\def\Ytitle{\thissection}
-
-\def\Ynothing{}
-
-\def\Ysectionnumberandtype{%
-\ifnum\secno=0 \putwordChapter\xreftie\the\chapno %
-\else \ifnum \subsecno=0 \putwordSection\xreftie\the\chapno.\the\secno %
-\else \ifnum \subsubsecno=0 %
-\putwordSection\xreftie\the\chapno.\the\secno.\the\subsecno %
-\else %
-\putwordSection\xreftie\the\chapno.\the\secno.\the\subsecno.\the\subsubsecno %
-\fi \fi \fi }
-
-\def\Yappendixletterandtype{%
-\ifnum\secno=0 \putwordAppendix\xreftie'char\the\appendixno{}%
-\else \ifnum \subsecno=0 \putwordSection\xreftie'char\the\appendixno.\the\secno %
-\else \ifnum \subsubsecno=0 %
-\putwordSection\xreftie'char\the\appendixno.\the\secno.\the\subsecno %
-\else %
-\putwordSection\xreftie'char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno %
-\fi \fi \fi }
-
-\gdef\xreftie{'tie}
-
-% Use TeX 3.0's \inputlineno to get the line number, for better error
-% messages, but if we're using an old version of TeX, don't do anything.
-%
-\ifx\inputlineno\thisisundefined
- \let\linenumber = \empty % Non-3.0.
-\else
- \def\linenumber{\the\inputlineno:\space}
-\fi
-
-% Define \refx{NAME}{SUFFIX} to reference a cross-reference string named NAME.
-% If its value is nonempty, SUFFIX is output afterward.
-
-\def\refx#1#2{%
- \expandafter\ifx\csname X#1\endcsname\relax
- % If not defined, say something at least.
- \angleleft un\-de\-fined\angleright
- \iflinks
- \ifhavexrefs
- \message{\linenumber Undefined cross reference `#1'.}%
- \else
- \ifwarnedxrefs\else
- \global\warnedxrefstrue
- \message{Cross reference values unknown; you must run TeX again.}%
- \fi
- \fi
- \fi
- \else
- % It's defined, so just use it.
- \csname X#1\endcsname
- \fi
- #2% Output the suffix in any case.
-}
-
-% This is the macro invoked by entries in the aux file.
-%
-\def\xrdef#1{\begingroup
- % Reenable \ as an escape while reading the second argument.
- \catcode`\\ = 0
- \afterassignment\endgroup
- \expandafter\gdef\csname X#1\endcsname
-}
-
-% Read the last existing aux file, if any. No error if none exists.
-\def\readauxfile{\begingroup
- \catcode`\^^@=\other
- \catcode`\^^A=\other
- \catcode`\^^B=\other
- \catcode`\^^C=\other
- \catcode`\^^D=\other
- \catcode`\^^E=\other
- \catcode`\^^F=\other
- \catcode`\^^G=\other
- \catcode`\^^H=\other
- \catcode`\^^K=\other
- \catcode`\^^L=\other
- \catcode`\^^N=\other
- \catcode`\^^P=\other
- \catcode`\^^Q=\other
- \catcode`\^^R=\other
- \catcode`\^^S=\other
- \catcode`\^^T=\other
- \catcode`\^^U=\other
- \catcode`\^^V=\other
- \catcode`\^^W=\other
- \catcode`\^^X=\other
- \catcode`\^^Z=\other
- \catcode`\^^[=\other
- \catcode`\^^\=\other
- \catcode`\^^]=\other
- \catcode`\^^^=\other
- \catcode`\^^_=\other
- \catcode`\@=\other
- \catcode`\^=\other
- % It was suggested to define this as 7, which would allow ^^e4 etc.
- % in xref tags, i.e., node names. But since ^^e4 notation isn't
- % supported in the main text, it doesn't seem desirable. Furthermore,
- % that is not enough: for node names that actually contain a ^
- % character, we would end up writing a line like this: 'xrdef {'hat
- % b-title}{'hat b} and \xrdef does a \csname...\endcsname on the first
- % argument, and \hat is not an expandable control sequence. It could
- % all be worked out, but why? Either we support ^^ or we don't.
- %
- % The other change necessary for this was to define \auxhat:
- % \def\auxhat{\def^{'hat }}% extra space so ok if followed by letter
- % and then to call \auxhat in \setq.
- %
- \catcode`\~=\other
- \catcode`\[=\other
- \catcode`\]=\other
- \catcode`\"=\other
- \catcode`\_=\other
- \catcode`\|=\other
- \catcode`\<=\other
- \catcode`\>=\other
- \catcode`\$=\other
- \catcode`\#=\other
- \catcode`\&=\other
- \catcode`+=\other % avoid \+ for paranoia even though we've turned it off
- % Make the characters 128-255 be printing characters
- {%
- \count 1=128
- \def\loop{%
- \catcode\count 1=\other
- \advance\count 1 by 1
- \ifnum \count 1<256 \loop \fi
- }%
- }%
- % The aux file uses ' as the escape (for now).
- % Turn off \ as an escape so we do not lose on
- % entries which were dumped with control sequences in their names.
- % For example, 'xrdef {$\leq $-fun}{page ...} made by @defun ^^
- % Reference to such entries still does not work the way one would wish,
- % but at least they do not bomb out when the aux file is read in.
- \catcode`\{=1
- \catcode`\}=2
- \catcode`\%=\other
- \catcode`\'=0
- \catcode`\\=\other
- %
- \openin 1 \jobname.aux
- \ifeof 1 \else
- \closein 1
- \input \jobname.aux
- \global\havexrefstrue
- \global\warnedobstrue
- \fi
- % Open the new aux file. TeX will close it automatically at exit.
- \openout\auxfile=\jobname.aux
-\endgroup}
-
-
-% Footnotes.
-
-\newcount \footnoteno
-
-% The trailing space in the following definition for supereject is
-% vital for proper filling; pages come out unaligned when you do a
-% pagealignmacro call if that space before the closing brace is
-% removed. (Generally, numeric constants should always be followed by a
-% space to prevent strange expansion errors.)
-\def\supereject{\par\penalty -20000\footnoteno =0 }
-
-% @footnotestyle is meaningful for info output only.
-\let\footnotestyle=\comment
-
-\let\ptexfootnote=\footnote
-
-{\catcode `\@=11
-%
-% Auto-number footnotes. Otherwise like plain.
-\gdef\footnote{%
- \global\advance\footnoteno by \@ne
- \edef\thisfootno{$^{\the\footnoteno}$}%
- %
- % In case the footnote comes at the end of a sentence, preserve the
- % extra spacing after we do the footnote number.
- \let\@sf\empty
- \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\/\fi
- %
- % Remove inadvertent blank space before typesetting the footnote number.
- \unskip
- \thisfootno\@sf
- \footnotezzz
-}%
-
-% Don't bother with the trickery in plain.tex to not require the
-% footnote text as a parameter. Our footnotes don't need to be so general.
-%
-% Oh yes, they do; otherwise, @ifset and anything else that uses
-% \parseargline fail inside footnotes because the tokens are fixed when
-% the footnote is read. --karl, 16nov96.
-%
-\long\gdef\footnotezzz{\insert\footins\bgroup
- % We want to typeset this text as a normal paragraph, even if the
- % footnote reference occurs in (for example) a display environment.
- % So reset some parameters.
- \interlinepenalty\interfootnotelinepenalty
- \splittopskip\ht\strutbox % top baseline for broken footnotes
- \splitmaxdepth\dp\strutbox
- \floatingpenalty\@MM
- \leftskip\z@skip
- \rightskip\z@skip
- \spaceskip\z@skip
- \xspaceskip\z@skip
- \parindent\defaultparindent
- %
- % Hang the footnote text off the number.
- \hang
- \textindent{\thisfootno}%
- %
- % Don't crash into the line above the footnote text. Since this
- % expands into a box, it must come within the paragraph, lest it
- % provide a place where TeX can split the footnote.
- \footstrut
- \futurelet\next\fo@t
-}
-\def\fo@t{\ifcat\bgroup\noexpand\next \let\next\f@@t
- \else\let\next\f@t\fi \next}
-\def\f@@t{\bgroup\aftergroup\@foot\let\next}
-\def\f@t#1{#1\@foot}
-\def\@foot{\strut\egroup}
-
-}%end \catcode `\@=11
-
-% Set the baselineskip to #1, and the lineskip and strut size
-% correspondingly. There is no deep meaning behind these magic numbers
-% used as factors; they just match (closely enough) what Knuth defined.
-%
-\def\lineskipfactor{.08333}
-\def\strutheightpercent{.70833}
-\def\strutdepthpercent {.29167}
-%
-\def\setleading#1{%
- \normalbaselineskip = #1\relax
- \normallineskip = \lineskipfactor\normalbaselineskip
- \normalbaselines
- \setbox\strutbox =\hbox{%
- \vrule width0pt height\strutheightpercent\baselineskip
- depth \strutdepthpercent \baselineskip
- }%
-}
-
-% @| inserts a changebar to the left of the current line. It should
-% surround any changed text. This approach does *not* work if the
-% change spans more than two lines of output. To handle that, we would
-% have adopt a much more difficult approach (putting marks into the main
-% vertical list for the beginning and end of each change).
-%
-\def\|{%
- % \vadjust can only be used in horizontal mode.
- \leavevmode
- %
- % Append this vertical mode material after the current line in the output.
- \vadjust{%
- % We want to insert a rule with the height and depth of the current
- % leading; that is exactly what \strutbox is supposed to record.
- \vskip-\baselineskip
- %
- % \vadjust-items are inserted at the left edge of the type. So
- % the \llap here moves out into the left-hand margin.
- \llap{%
- %
- % For a thicker or thinner bar, change the `1pt'.
- \vrule height\baselineskip width1pt
- %
- % This is the space between the bar and the text.
- \hskip 12pt
- }%
- }%
-}
-
-% For a final copy, take out the rectangles
-% that mark overfull boxes (in case you have decided
-% that the text looks ok even though it passes the margin).
-%
-\def\finalout{\overfullrule=0pt}
-
-% @image. We use the macros from epsf.tex to support this.
-% If epsf.tex is not installed and @image is used, we complain.
-%
-% Check for and read epsf.tex up front. If we read it only at @image
-% time, we might be inside a group, and then its definitions would get
-% undone and the next image would fail.
-\openin 1 = epsf.tex
-\ifeof 1 \else
- \closein 1
- % Do not bother showing banner with post-v2.7 epsf.tex (available in
- % doc/epsf.tex until it shows up on ctan).
- \def\epsfannounce{\toks0 = }%
- \input epsf.tex
-\fi
-%
-% We will only complain once about lack of epsf.tex.
-\newif\ifwarnednoepsf
-\newhelp\noepsfhelp{epsf.tex must be installed for images to
- work. It is also included in the Texinfo distribution, or you can get
- it from ftp://tug.org/tex/epsf.tex.}
-%
-\def\image#1{%
- \ifx\epsfbox\undefined
- \ifwarnednoepsf \else
- \errhelp = \noepsfhelp
- \errmessage{epsf.tex not found, images will be ignored}%
- \global\warnednoepsftrue
- \fi
- \else
- \imagexxx #1,,,\finish
- \fi
-}
-%
-% Arguments to @image:
-% #1 is (mandatory) image filename; we tack on .eps extension.
-% #2 is (optional) width, #3 is (optional) height.
-% #4 is just the usual extra ignored arg for parsing this stuff.
-\def\imagexxx#1,#2,#3,#4\finish{%
- \ifx\pdfoutput\undefined
- % \epsfbox itself resets \epsf?size at each figure.
- \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi
- \setbox0 = \hbox{\ignorespaces #3}\ifdim\wd0 > 0pt \epsfysize=#3\relax \fi
- \begingroup
- \catcode`\^^M = 5 % in case we're inside an example
- % If the image is by itself, center it.
- \ifvmode
- \nobreak\bigskip
- % Usually we'll have text after the image which will insert
- % \parskip glue, so insert it here too to equalize the space
- % above and below.
- \nobreak\vskip\parskip
- \nobreak
- \centerline{\epsfbox{#1.eps}}%
- \bigbreak
- \else
- % In the middle of a paragraph, no extra space.
- \epsfbox{#1.eps}%
- \fi
- \endgroup
- \else
- \centerline{\pdfimage #1.pdf}%
- \fi
-}
-
-
-\message{localization,}
-% and i18n.
-
-% @documentlanguage is usually given very early, just after
-% @setfilename. If done too late, it may not override everything
-% properly. Single argument is the language abbreviation.
-% It would be nice if we could set up a hyphenation file here.
-%
-\def\documentlanguage{\parsearg\dodocumentlanguage}
-\def\dodocumentlanguage#1{%
- \tex % read txi-??.tex file in plain TeX.
- % Read the file if it exists.
- \openin 1 txi-#1.tex
- \ifeof1
- \errhelp = \nolanghelp
- \errmessage{Cannot read language file txi-#1.tex}%
- \let\temp = \relax
- \else
- \def\temp{\input txi-#1.tex }%
- \fi
- \temp
- \endgroup
-}
-\newhelp\nolanghelp{The given language definition file cannot be found or
-is empty. Maybe you need to install it? In the current directory
-should work if nowhere else does.}
-
-
-% @documentencoding should change something in TeX eventually, most
-% likely, but for now just recognize it.
-\let\documentencoding = \comment
-
-
-% Page size parameters.
-%
-\newdimen\defaultparindent \defaultparindent = 15pt
-
-\chapheadingskip = 15pt plus 4pt minus 2pt
-\secheadingskip = 12pt plus 3pt minus 2pt
-\subsecheadingskip = 9pt plus 2pt minus 2pt
-
-% Prevent underfull vbox error messages.
-\vbadness = 10000
-
-% Don't be so finicky about underfull hboxes, either.
-\hbadness = 2000
-
-% Following George Bush, just get rid of widows and orphans.
-\widowpenalty=10000
-\clubpenalty=10000
-
-% Use TeX 3.0's \emergencystretch to help line breaking, but if we're
-% using an old version of TeX, don't do anything. We want the amount of
-% stretch added to depend on the line length, hence the dependence on
-% \hsize. We call this whenever the paper size is set.
-%
-\def\setemergencystretch{%
- \ifx\emergencystretch\thisisundefined
- % Allow us to assign to \emergencystretch anyway.
- \def\emergencystretch{\dimen0}%
- \else
- \emergencystretch = .15\hsize
- \fi
-}
-
-% Parameters in order: 1) textheight; 2) textwidth; 3) voffset;
-% 4) hoffset; 5) binding offset; 6) topskip. Then whoever calls us can
-% set \parskip and call \setleading for \baselineskip.
-%
-\def\internalpagesizes#1#2#3#4#5#6{%
- \voffset = #3\relax
- \topskip = #6\relax
- \splittopskip = \topskip
- %
- \vsize = #1\relax
- \advance\vsize by \topskip
- \outervsize = \vsize
- \advance\outervsize by 2\topandbottommargin
- \pageheight = \vsize
- %
- \hsize = #2\relax
- \outerhsize = \hsize
- \advance\outerhsize by 0.5in
- \pagewidth = \hsize
- %
- \normaloffset = #4\relax
- \bindingoffset = #5\relax
- %
- \parindent = \defaultparindent
- \setemergencystretch
-}
-
-% @letterpaper (the default).
-\def\letterpaper{{\globaldefs = 1
- \parskip = 3pt plus 2pt minus 1pt
- \setleading{13.2pt}%
- %
- % If page is nothing but text, make it come out even.
- \internalpagesizes{46\baselineskip}{6in}{\voffset}{.25in}{\bindingoffset}{36pt}%
-}}
-
-% Use @smallbook to reset parameters for 7x9.5 (or so) format.
-\def\smallbook{{\globaldefs = 1
- \parskip = 2pt plus 1pt
- \setleading{12pt}%
- %
- \internalpagesizes{7.5in}{5.in}{\voffset}{.25in}{\bindingoffset}{16pt}%
- %
- \lispnarrowing = 0.3in
- \tolerance = 700
- \hfuzz = 1pt
- \contentsrightmargin = 0pt
- \deftypemargin = 0pt
- \defbodyindent = .5cm
- %
- \let\smalldisplay = \smalldisplayx
- \let\smallexample = \smalllispx
- \let\smallformat = \smallformatx
- \let\smalllisp = \smalllispx
-}}
-
-% Use @afourpaper to print on European A4 paper.
-\def\afourpaper{{\globaldefs = 1
- \setleading{12pt}%
- \parskip = 3pt plus 2pt minus 1pt
- %
- \internalpagesizes{53\baselineskip}{160mm}{\voffset}{4mm}{\bindingoffset}{44pt}%
- %
- \tolerance = 700
- \hfuzz = 1pt
-}}
-
-% A specific text layout, 24x15cm overall, intended for A4 paper. Top margin
-% 29mm, hence bottom margin 28mm, nominal side margin 3cm.
-\def\afourlatex{{\globaldefs = 1
- \setleading{13.6pt}%
- %
- \afourpaper
- \internalpagesizes{237mm}{150mm}{3.6mm}{3.6mm}{3mm}{7mm}%
- %
- \globaldefs = 0
-}}
-
-% Use @afourwide to print on European A4 paper in wide format.
-\def\afourwide{%
- \afourpaper
- \internalpagesizes{9.5in}{6.5in}{\hoffset}{\normaloffset}{\bindingoffset}{7mm}%
- %
- \globaldefs = 0
-}
-
-% @pagesizes TEXTHEIGHT[,TEXTWIDTH]
-% Perhaps we should allow setting the margins, \topskip, \parskip,
-% and/or leading, also. Or perhaps we should compute them somehow.
-%
-\def\pagesizes{\parsearg\pagesizesxxx}
-\def\pagesizesxxx#1{\pagesizesyyy #1,,\finish}
-\def\pagesizesyyy#1,#2,#3\finish{{%
- \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \hsize=#2\relax \fi
- \globaldefs = 1
- %
- \parskip = 3pt plus 2pt minus 1pt
- \setleading{13.2pt}%
- %
- \internalpagesizes{#1}{\hsize}{\voffset}{\normaloffset}{\bindingoffset}{44pt}%
-}}
-
-% Set default to letter.
-%
-\letterpaper
-
-
-\message{and turning on texinfo input format.}
-
-% Define macros to output various characters with catcode for normal text.
-\catcode`\"=\other
-\catcode`\~=\other
-\catcode`\^=\other
-\catcode`\_=\other
-\catcode`\|=\other
-\catcode`\<=\other
-\catcode`\>=\other
-\catcode`\+=\other
-\catcode`\$=\other
-\def\normaldoublequote{"}
-\def\normaltilde{~}
-\def\normalcaret{^}
-\def\normalunderscore{_}
-\def\normalverticalbar{|}
-\def\normalless{<}
-\def\normalgreater{>}
-\def\normalplus{+}
-\def\normaldollar{$}
-
-% This macro is used to make a character print one way in ttfont
-% where it can probably just be output, and another way in other fonts,
-% where something hairier probably needs to be done.
-%
-% #1 is what to print if we are indeed using \tt; #2 is what to print
-% otherwise. Since all the Computer Modern typewriter fonts have zero
-% interword stretch (and shrink), and it is reasonable to expect all
-% typewriter fonts to have this, we can check that font parameter.
-%
-\def\ifusingtt#1#2{\ifdim \fontdimen3\font=0pt #1\else #2\fi}
-
-% Same as above, but check for italic font. Actually this also catches
-% non-italic slanted fonts since it is impossible to distinguish them from
-% italic fonts. But since this is only used by $ and it uses \sl anyway
-% this is not a problem.
-\def\ifusingit#1#2{\ifdim \fontdimen1\font>0pt #1\else #2\fi}
-
-% Turn off all special characters except @
-% (and those which the user can use as if they were ordinary).
-% Most of these we simply print from the \tt font, but for some, we can
-% use math or other variants that look better in normal text.
-
-\catcode`\"=\active
-\def\activedoublequote{{\tt\char34}}
-\let"=\activedoublequote
-\catcode`\~=\active
-\def~{{\tt\char126}}
-\chardef\hat=`\^
-\catcode`\^=\active
-\def^{{\tt \hat}}
-
-\catcode`\_=\active
-\def_{\ifusingtt\normalunderscore\_}
-% Subroutine for the previous macro.
-\def\_{\leavevmode \kern.06em \vbox{\hrule width.3em height.1ex}}
-
-\catcode`\|=\active
-\def|{{\tt\char124}}
-\chardef \less=`\<
-\catcode`\<=\active
-\def<{{\tt \less}}
-\chardef \gtr=`\>
-\catcode`\>=\active
-\def>{{\tt \gtr}}
-\catcode`\+=\active
-\def+{{\tt \char 43}}
-\catcode`\$=\active
-\def${\ifusingit{{\sl\$}}\normaldollar}
-%\catcode 27=\active
-%\def^^[{$\diamondsuit$}
-
-% Set up an active definition for =, but don't enable it most of the time.
-{\catcode`\==\active
-\global\def={{\tt \char 61}}}
-
-\catcode`+=\active
-\catcode`\_=\active
-
-% If a .fmt file is being used, characters that might appear in a file
-% name cannot be active until we have parsed the command line.
-% So turn them off again, and have \everyjob (or @setfilename) turn them on.
-% \otherifyactive is called near the end of this file.
-\def\otherifyactive{\catcode`+=\other \catcode`\_=\other}
-
-\catcode`\@=0
-
-% \rawbackslashxx output one backslash character in current font
-\global\chardef\rawbackslashxx=`\\
-%{\catcode`\\=\other
-%@gdef@rawbackslashxx{\}}
-
-% \rawbackslash redefines \ as input to do \rawbackslashxx.
-{\catcode`\\=\active
-@gdef@rawbackslash{@let\=@rawbackslashxx }}
-
-% \normalbackslash outputs one backslash in fixed width font.
-\def\normalbackslash{{\tt\rawbackslashxx}}
-
-% \catcode 17=0 % Define control-q
-\catcode`\\=\active
-
-% Used sometimes to turn off (effectively) the active characters
-% even after parsing them.
-@def@turnoffactive{@let"=@normaldoublequote
-@let\=@realbackslash
-@let~=@normaltilde
-@let^=@normalcaret
-@let_=@normalunderscore
-@let|=@normalverticalbar
-@let<=@normalless
-@let>=@normalgreater
-@let+=@normalplus
-@let$=@normaldollar}
-
-@def@normalturnoffactive{@let"=@normaldoublequote
-@let\=@normalbackslash
-@let~=@normaltilde
-@let^=@normalcaret
-@let_=@normalunderscore
-@let|=@normalverticalbar
-@let<=@normalless
-@let>=@normalgreater
-@let+=@normalplus
-@let$=@normaldollar}
-
-% Make _ and + \other characters, temporarily.
-% This is canceled by @fixbackslash.
-@otherifyactive
-
-% If a .fmt file is being used, we don't want the `\input texinfo' to show up.
-% That is what \eatinput is for; after that, the `\' should revert to printing
-% a backslash.
-%
-@gdef@eatinput input texinfo{@fixbackslash}
-@global@let\ = @eatinput
-
-% On the other hand, perhaps the file did not have a `\input texinfo'. Then
-% the first `\{ in the file would cause an error. This macro tries to fix
-% that, assuming it is called before the first `\' could plausibly occur.
-% Also back turn on active characters that might appear in the input
-% file name, in case not using a pre-dumped format.
-%
-@gdef@fixbackslash{%
- @ifx\@eatinput @let\ = @normalbackslash @fi
- @catcode`+=@active
- @catcode`@_=@active
-}
-
-% Say @foo, not \foo, in error messages.
-@escapechar = `@@
-
-% These look ok in all fonts, so just make them not special.
-@catcode`@& = @other
-@catcode`@# = @other
-@catcode`@% = @other
-
-@c Set initial fonts.
-@textfonts
-@rm
-
-
-@c Local variables:
-@c eval: (add-hook 'write-file-hooks 'time-stamp)
-@c page-delimiter: "^\\\\message"
-@c time-stamp-start: "def\\\\texinfoversion{"
-@c time-stamp-format: "%:y-%02m-%02d.%H"
-@c time-stamp-end: "}"
-@c End:
diff --git a/Docs/Support/update-reserved-words.pl b/Docs/Support/update-reserved-words.pl
deleted file mode 100755
index 2920e083c9c..00000000000
--- a/Docs/Support/update-reserved-words.pl
+++ /dev/null
@@ -1,98 +0,0 @@
-#!/usr/bin/perl
-
-# Based on a Emacs macro by david@mysql.com
-# Implemented in Perl by jeremy@mysql.com
-# 2001-11-20 Fixups by arjen@mysql.com, 2 keywords and 15 synonyms were missing
-# 2001-12-07 Fixup by arjen@mysql.com, add column headings for multitable.
-# 2002-05-01 Fixup by arjen@mysql.com, use 3 columns instead of 4.
-# 2002-05-03 Fixup by arjen@mysql.com, fill last row to full # of columns.
-# 2002-06-14 Fixup by arjen@mysql.com, Issue a "bk edit manual.texi".
-
-print STDERR "Scanning lex.h for symbols..\n";
-open LEX, "<../sql/lex.h";
-while($line = <LEX>) {
- if($line =~ /\{\s*\"([A-Z_]+)\"/) {
- $words{$1} = $1;
- } elsif($line =~ /sql_functions/) {
- last;
- };
-};
-close LEX;
-
-print STDERR "Scanning sql_yacc.yy for non-reserved words...\n";
-open YACC, "<../sql/sql_yacc.yy";
-while(<YACC> !~ /^keyword:/) {};
-while(($line = <YACC>) =~ /[\s|]+([A-Z_]+)/) {
- $keyword = $1;
- $keyword =~ s/_SYM//;
- delete $words{$keyword};
-};
-close YACC;
-
-
-print STDERR "Copying reserved words to an array...\n";
-foreach(keys %words) { push @words, $words{$_}; };
-
-print STDERR "Sorting array...\n";
-@words = sort @words;
-
-printf STDERR "There are %i reserved words.\n", scalar @words;
-
-@pre = ("\@item", " \@tab", " \@tab");
-
-$list = "";
-for($i=0; $word = shift(@words); $i++) {
- $list .= sprintf "%s %s\n", $pre[$i%3], "\@code\{$word\}";
-}
-# Fill last row to full # of columns.
-for( ; $i%3; $i++) {
- $list .= sprintf "%s\n", $pre[$i%3];
-}
-
-`bk edit manual.texi`;
-
-open OLD, "<manual.texi";
-open NEW, ">manual-tmp.texi";
-
-print STDERR "Copying beginning of manual.texi...\n";
-while(($line = <OLD>) !~ /START_OF_RESERVED_WORDS/) { print NEW $line; };
-print NEW "\@c START_OF_RESERVED_WORDS\n\n";
-printf NEW "\@c Reserved word list updated %s by %s.\n".
- "\@c To regenerate, use Support/update-reserved-words.pl.\n\n",
- &pretty_date, $ENV{USER};
-
-print STDERR "Inserting list of reserved words...\n";
-# Ensure the fractions add up to 100% otherwise it looks funny in print:
-print NEW "\@multitable \@columnfractions .33 .33 .34\n";
-print NEW "\@item \@strong{Word}\n \@tab \@strong{Word}\n \@tab \@strong{Word}\n";
-print NEW $list;
-print NEW "\@end multitable\n";
-print STDERR "Skipping over old list...\n";
-while(($line = <OLD>) !~ /END_OF_RESERVED_WORDS/) {};
-print NEW "\n\@c END_OF_RESERVED_WORDS\n";
-print STDERR "Copying end of manual.texi...\n";
-while($line = <OLD>) { print NEW $line; };
-
-close OLD;
-close NEW;
-
-print STDERR "Moving manual-tmp.texi to manual.texi...\n";
-unlink "manual.texi";
-rename "manual-tmp.texi", "manual.texi";
-
-print STDERR "Reserved word list updated successfully!\n";
-
-sub pretty_date {
- @time = ($time = shift)?((localtime($time))[0..6]):((localtime)[0..6]);
-
- ($sec, $min, $hour, $mday, $mon, $year, $wday) = @time;
- $wday = (Sun,Mon,Tue,Wed,Thu,Fri,Sat)[$wday];
- $mon = (Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec)[$mon];
- $year += 1900;
-
- $pretty = sprintf("%s %s %2i %02i:%02i:%02i %i",
- $wday, $mon, $mday, $hour, $min, $sec, $year);
-
- return $pretty;
-};
-
diff --git a/Docs/To-be-included-in-the-manual/MySQL-for-dummies b/Docs/To-be-included-in-the-manual/MySQL-for-dummies
deleted file mode 100644
index 7b669af18dc..00000000000
--- a/Docs/To-be-included-in-the-manual/MySQL-for-dummies
+++ /dev/null
@@ -1,271 +0,0 @@
-===============================================================================
-installing/mysql/binary Fri Jul 17 13:03:03 1998 has
-===============================================================================
-
- MySQL for dummies - Part 1
- How to get the binary distribution running on a UNIX system
-
- MySQL is a trademark of TcX, Sweden.
-
-===============================================================================
-
-Introduction:
-
-This is a simple cookbook for the helpless newbie taking his very first steps
-with MySQL, when he needs a few hints about the options and access rights
-installing the system and starting the basic modules, before he has "aha"ed
-on how simple and clean the basic structure of MySQL is. It will not help
-you with the intricacies and subtle possibilities of SQL as implemented in
-MySQL.
-
-The information in this document is all contained in the MySQL manual in a
-more or less obvious form, but for the newbie that document is a bit over-
-whelming in size, and it contains some new concepts that take some getting
-used to. Sorry if it is pitched too low for some readers. It is only
-intended to get the binary distribution up and running.
-
-I successfully got MySQL going on both a Sun SparcStation 1 running SunOS 4.1.2
-and 2 Linux systems running SuSE release 5.0, one with kernel version 2.0.30,
-one with 2.0.33 by doing exactly what is given here. If it doesn't work
-for you, I suggest the problem is with your system and not with the
-MySQL binary distribution.
-
--- Howard Schultens hs@neuro-physiol.med.uni-goettingen.de
-
--------------------------------------------------------------------------------
-
-Nomenclature:
-
-In the following, 'MySQL' refers to the entire database system distributed
-and licensed by TcX. 'mysql' means a specific program in this system.
-
--------------------------------------------------------------------------------
-
-MySQL user administration and access rights ("privileges"):
-
-It is obvious that MySQL needs its own user management because it is a system
-that is implemented on a number of architectures -- you should be able to use
-it in an identical way on different operating systems. The MySQL user names
-and passwords have basically nothing at all to do with user names and
-passwords on whatever operating system you install it on. You will,
-unfortunately, have to install your users again on MySQL. But this system has
-some big advantages: it is a secure system that allows you to finely
-differentiate access rights based on WHO is using a database from WHERE. It
-does this by the use of its own database containing 3 tables "user" for the
-user names, "db" for the databases, and "host" for the machines that access
-databases. "user" and "db" are the most important for the newbie.
-
-Section 6 of the manual describes all this in detail.
-
--------------------------------------------------------------------------------
-
-Doing it:
-
-In the following, "foo>" denotes the prompt from your system in user mode,
-"foo#" as root/superuser.
-
-
-1) Get the appropriate binary distribution from a mirror site or directly
- from TcX at URL http://www.tcx.se. The file name has the form
- mysql-VERSION-SYSTEM.tgz
-
- VERSION = Version number, e.g. 3.21.33
- SYSTEM = OS and architecture, e.g. sunos4.1.4-sparc
-
- i.e., you would download a file mysql-3.21.33-sunos4.1.4-sparc.tgz.
-
- This example is for SunOS, but it works exactly analogously on Linux.
-
-2) cd to /usr/local and unpack this with, e.g. the command
-
- foo#gzip -c -d mysql-VERSION-SYSTEM.tgz|tar xvf -
-
-3) The files are stored in a directory /usr/local/mysql-VERSION-SYSTEM
- Make a symbolic link to this directory:
-
- foo#ln -s mysql-VERSION-SYSTEM mysql
-
- At this point, you might want to create a special user for all your
- MySQL stuff. I use "mysql". Then you could do
-
- foo#chown -R mysql mysql-VERSION-SYSTEM
-
-4) FIRST, take care of all the PERL stuff:
-
- o) You need PERL 5.004 or later already installed on your system. Take
- care of this first if necessary.
-
- a) cd to /usr/local/mysql/perl/DBI and do
- foo#perl Makefile.PL
- foo#make
- foo#make test
- foo#make install (if "make test" is successful)
-
- b) cd to /usr/local/mysql/perl/Mysql/modules and do
- foo#perl Makefile.PL
- foo#make
- foo#make test
- foo#make install (if "make test" is successful)
-
- c) As an option, you can install Data::ShowTable, but this is not absolutely
- necessary for mysql. Get the PERL module Data-ShowTable-VER.tar.gz
- (VER = version, eg. 3.3) from a CPAN mirror: I got mine at
-
- ftp://ftp.gwdg.de/pub/languages/perl/CPAN/modules/by-category/06_Data_Type_Utilities/Data/Data-ShowTable-3.3.tar.gz
-
- (You should be able to replace "ftp.gwdg.de" by the name of another
- FTP mirror)
-
- Put this into /usr/local/mysql/perl and unpack it.
- You get a directory 'Data-ShowTable-VER'. cd into there and
- (as root/superuser)
- foo#perl Makefile.PL
- foo#make
- foo#make test
- foo#make install (if "make test" is successful)
-
-5) cd to /usr/local/mysql and do
- foo#scripts/mysql_install_db
-
- you should be in /usr/local/mysql when you start the script.
-
-==>*NOTE* you might want to edit this script before you run it the first
- time. See method 9b) below.
-
- If this is successful, one or more copies of the mysql daemon, mysqld,
- will be running. On SunOS 4.1.x, you get one. On Linux, 3 are running.
-
--------------------------------------------------------------------------------
-In the rest of this, I will always suppose you are starting in the directory
-/usr/local/mysql, even if it seems mildly inconvenient
--------------------------------------------------------------------------------
-
-6) You can now select the database 'test' and mess around with it using
- the client program bin/mysql: start it with
-
- foo>bin/mysql -u root test
-
- This says, "start up the MySQL command-line client with the user name
- 'root' and use the database named 'test', which is a subdirectory in
- '/usr/local/mysql/data". (n.b. this is NOT the root user of your UNIX
- system, it is a MySQL user with the same name. You will notice that you
- don't need a password for this user to use mysql).
-
- Actually, the way the system is set up by bin/mysql_install_db, you
- don't even need a user name to access the database 'test'. You can start
- the client simply with
-
- foo>bin/mysql test
-
- 'mysql' should start up with a greeting and a line telling you what your
- connection id and server version is. At this point, the database 'test'
- is empty, no tables or anything are defined.
-
- When you issue SQL commands, DON'T FORGET THE FINAL SEMICOLON, or mysql acts
- dumb:
-
- mysql>select * from user
- ->
- ->
-
- and you wonder what's going on. 'mysql' reminds you of this on startup.
-
-7) When you want to close down the server, do
- foo>bin/mysqladmin shutdown
-
-8) I recommend editing the script bin/safe_mysqld for the binary release
- so that it always starts up with the correct directories. I replaced
- the entire header up to but not including
-
- pidfile=$DATADIR/`/bin/hostname`.pid
- log=$DATADIR/`/bin/hostname`.log
- err=$DATADIR/`/bin/hostname`.err
-
- with
-
- MY_BASEDIR_VERSION=/usr/local/mysql
- DATADIR=$MY_BASEDIR_VERSION/data
- ledir=$MY_BASEDIR_VERSION/bin
- cd $MY_BASEDIR_VERSION
-
- This lets you start the mysql daemon from wherever you like.
-
-9) Now let's say you want to put some of your own databases and users into
- the system. The simplest, most powerful, and dangerous way to do this is
- to start up the mysql daemon again with:
-
- foo>bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data -Sg
-
- This skips loading the grant tables. The system is open to every kind of
- mistake now, so be careful. Any user can muck up the grant tables, ie.
- the lists of users, hosts, and databases themselves, so only use this
- mode to do these first, very basic things.
-
- Start the client again now, with
- foo>bin/mysql mysql
-
- This tells the client to use the database 'mysql', which is the directory
- that contains the lists (ie. the tables) of all the users, hosts, and
- databases in the system, so be careful!!!!!!!!!!!!
-
- All of what follows is taken essentially from section 6 of the manual.
-
- a) For the start, just define a couple of users for the MySQL system:
- i) an administrator, such as 'mysql', with its own password, that
- can do everything with the system:
-
- mysql> insert into user values('localhost','mysql',password('xyzzy'),
- 'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
-
- * For some reason, on my Linux system with a German keyboard, I have *
- * to use the acute accent instead of the apostrophe, otherwise I get *
- * parse errors. *
-
- This defines the user name 'mysql' with password 'xyzzy' that can
- do everything. To look at what you just did, type in
-
- mysql> select * from user;
-
- mysql types out a table with all the known users and their privileges.
-
- ii) a privileged user for playing around:
-
- mysql> insert into user values('localhost','john',password('blah0x1'),
- 'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
-
- iii) create your own database for a todo list, phone numbers, whatever:
-
- mysql> create database johns_DB;
- mysql> insert into db values('localhost','johns_DB','john','Y','Y','Y','Y','Y','Y');
-
- The first line creates the databse "johns_DB", but that doesn't
- make it visible to mysql. The second line does that.
-
- iv) When you are done installing users and databases, quit mysql and
- issue the command
-
- foo>bin/mysqladmin reload
-
- b) Another method to do this was suggested by Sinisa Milivojevic, and that
- is to edit the script /usr/local/mysql/scripts/mysql_install_db to
- define the databases and install the more important users when you
- start the system the very first time. This would have the advantage
- that you can save the script and re-install the system with it if you
- have to, automatically defining the important structures. It requires
- a little more knowledge of the MySQL system to do this.
-
- You might want to use this method anyway since it saves editing
- mysql_install_db to have it install a superuser with a name other
- than "root". The places to change are easy to find. You can, of
- course, use the first method above and remove the user named 'root'
- when you are done.
-
-
-===============================================================================
-
-If anyone is interested enough in this document to make suggestions on how
-to improve it, I would be glad to get emails on it. I hope it helps
-someone get going with MySQL a little easier.
-
---Howard
- hs@neuro-physiol.med.uni-goettingen.de
diff --git a/Docs/Translations/myodbc-br.texi b/Docs/Translations/myodbc-br.texi
deleted file mode 100644
index 6cf7edd3e75..00000000000
--- a/Docs/Translations/myodbc-br.texi
+++ /dev/null
@@ -1,272 +0,0 @@
-@chapter MySQL ODBC Suporte
-
-@menu
-* Quais ODBC OS:: Sistemas Operacionais săo suportados por @strong{MyODBC}
-* Problemas ODBC:: Como informar problemas com @strong{MySQL} ODBC
-* Clientes MyODBC:: Programas que já foram testados com @strong{MyODBC}
-* Administrador ODBC:: Como preencher os diversos campos com o programa Administrador
-* ODBC e last_insert_id:: Como obter o valor de uma coluna @code{AUTO_INCREMENT} em ODBC
-* Informando bug do MyODBC:: Informando problemas com MyODBC
-@end menu
-
-@strong{MySQL} fornece suporte para ODBC através do programa @strong{MyODBC}.
-
-
-@node Quais ODBC OS, ODBC Problemas, ODBC, ODBC
-@section Sistemas Operacionais suportados por MyODBC
-
-@strong{MyODBC} é um driver 32-bit ODBC (2.50) nível 0 para Windows95
-e Windows NT. Nós esperamos que alguém porte o mesmo para o Windows 3.x.
-
-@node Problemas ODBC, clientes MyODBC, Quais ODBC OS, ODBC
-@section Como informar problemas com MyODBC
-
-@strong{MyODBC} tem sido testado com Access, Admndemo.exe, C++-Builder,
-Centura Team Developer (formalmente Gupta SQL/Windows), ColdFusion (no
-Solaris e NT com svc pack 5), Crystal Reports, DataJunction, Delphi,
-ERwin, Excel, iHTML, FileMaker Pro, FoxPro, Notes 4.5/4.6, SBSS, Perl
-DBD-ODBC, Paradox, Powerbuilder, Powerdesigner 32 bit, VC++ e Visual
-Basic.
-
-Se vocę souber de algum outro aplicativo que funcione com @strong{MyODBC}, por favor
-nos escreva sobre isso através do email @email{myodbc@@lists.mysql.com}.
-
-@node Clientes MyODBC, Administrador ODBC, Problemas com ODBC, ODBC
-@section Programas testados que funcionam com MyODBC
-
-A maioria dos programas que tęm suporte para ODBC, funcionam com o @strong{MyODBC},
-mas cada um dos listados abaixo, tęm sido testados por nós ou por informaçőes de
-usuários que confirmaram o seu funcionamento.
-
-@table @asis
-@item @strong{Program}
-@strong{Comment}
-@item Access
-Como fazer Accces funcionar:
-@itemize @bullet
-@item
-Vocę deverá ter uma chave primária na tabela.
-@item
-Vocę deve ter um campo timestamp em todas as tabelas em que vocę quer controlar a
-atualizaçăo.
-
-@item
-Somente use campos doubles float. Access falha quando faz comparaçőes com campos float
-simples.
-@item
-Configure a opçăo `Return matching rows' quando conectar com o @strong{MySQL}.
-@item
-O Access no NT acusará colunas @code{BLOB} como @code{OLE OBJECTS}.
-Se ao invés disso vocę quer colunas @code{MEMO}, deve trocar a coluna para
-@code{TEXT} usando @code{ALTER TABLE}.
-@item
-Access ŕs vezes năo lida adequadamente com colunas do tipo @code{DATE}.
-Se vocę tiver problemas com essas colunas, mude as colunas para @code{DATETIME}.
-@item
-Em certas situaçőes, o Access cria consultas SQL ilegais que o
-@strong{MySQL} năo pode processar. Vocę pode resolver isso selecionando o tipo de
-consulta @code{"Query|SQLSpecific|Pass-Through"} no menu do Access.
-@end itemize
-@item DataJunction
-Vocę tem que trocar para mandar @code{VARCHAR} ao invés de @code{ENUM}, porque
-o mesmo exporta o último de uma maneira que causa fadiga ao @strong{MySQL}.
-@item Excel
-Funciona. Algumas dicas:
-@itemize @bullet
-@item
-Se vocę tem problemas com datas, tente selecioná-las como strings usando a
-funçăo @code{CONCAT()}. Por exemplo:
-@example
-select CONCAT(rise_time), CONCAT(set_time)
- from sunrise_sunset;
-@end example
-Os dados de datas enviadas como string săo corretamente reconhecidas pelo
-Excel97 como dados do tipo time.
-
-Neste exemplo o propósito de @code{CONCAT()} é enganar o ODBC, fazendo-o pensar
-que a coluna é do 'tipo string'. Sem o @code{CONCAT()}, ODBC sabe que a coluna
-é do tipo time e o Excel năo entenderá isso.
-
-Note que isso é um bug no Excel, porque o mesmo converte automaticamente a
-string para time. Isto é muito bom quando o fonte é um arquivo
-texto, mas năo se pode dizer o mesmo quando o fonte é uma conexăo
-ODBC que informa o tipo exato para cada coluna.
-@end itemize
-@item odbcadmin
-Programa Teste para ODBC.
-@item Delphi
-Vocę deverá usar DBE 3.2 ou mais atualizado. Configure o campo de opçăo
-`Don't optimize column width' quando conectando com @strong{MySQL}.
-
-Também, há aqui um código muito útil que configura tanto a
-inserçăo ODBC e a inserçăo BDE para MyODBC (a inserçăo BDE requer um BDE
-Alias Editor que pode ser obtido de graça numa Delphi Super Page
-perto de vocę.): (Obrigado a Bryan Brunton @email{bryan@@flesherfab.com} por isto)
-
-@example
-fReg:= TRegistry.Create;
- fReg.OpenKey('\Software\ODBC\ODBC.INI\DocumentsFab', True);
- fReg.WriteString('Database', 'Documents');
- fReg.WriteString('Description', ' ');
- fReg.WriteString('Driver', 'C:\WINNT\System32\myodbc.dll');
- fReg.WriteString('Flag', '1');
- fReg.WriteString('Password', '');
- fReg.WriteString('Port', ' ');
- fReg.WriteString('Server', 'xmark');
- fReg.WriteString('User', 'winuser');
- fReg.OpenKey('\Software\ODBC\ODBC.INI\ODBC Data Sources', True);
- fReg.WriteString('DocumentsFab', 'MySQL');
- fReg.CloseKey;
- fReg.Free;
-
- Memo1.Lines.Add('DATABASE NAME=');
- Memo1.Lines.Add('USER NAME=');
- Memo1.Lines.Add('ODBC DSN=DocumentsFab');
- Memo1.Lines.Add('OPEN MODE=READ/WRITE');
- Memo1.Lines.Add('BATCH COUNT=200');
- Memo1.Lines.Add('LANGDRIVER=');
- Memo1.Lines.Add('MAX ROWS=-1');
- Memo1.Lines.Add('SCHEMA CACHE DIR=');
- Memo1.Lines.Add('SCHEMA CACHE SIZE=8');
- Memo1.Lines.Add('SCHEMA CACHE TIME=-1');
- Memo1.Lines.Add('SQLPASSTHRU MODE=SHARED AUTOCOMMIT');
- Memo1.Lines.Add('SQLQRYMODE=');
- Memo1.Lines.Add('ENABLE SCHEMA CACHE=FALSE');
- Memo1.Lines.Add('ENABLE BCD=FALSE');
- Memo1.Lines.Add('ROWSET SIZE=20');
- Memo1.Lines.Add('BLOBS TO CACHE=64');
- Memo1.Lines.Add('BLOB SIZE=32');
-
- AliasEditor.Add('DocumentsFab','MySQL',Memo1.Lines);
-@end example
-
-@item C++Builder
-Testado com BDE 3.0. O único problema conhecido é que quando o esquema da tabela
-muda, os campos da consulta năo săo atualizados. BDE entretanto, parece năo
-reconhecer chaves primárias, somente Índice PRIMARY, năo entanto isto năo
-tem sido um problema.
-
-@item Visual basic
-Para atualizar uma tabela, vocę deverá definir uma chave primária para a tabela.
-@end table
-
-@node Administrador ODBC, ODBC e last_insert_id, Clientes MyODBC, ODBC
-@section Como preencher os diversos campos com o programa Administrador
-
-Existem tręs possibilidades para especificar o nome do servidor em
-Windows95:
-
-@itemize @bullet
-@item
-Usando o endereço IP do servidor.
-@item
-Adicionar um arquivo @file{lmhosts} com a seguinte informaçăo:
-
-@example
-ip nomeservidor
-@end example
-
-Por exemplo:
-
-@example
-194.216.84.21 my
-@end example
-
-@item
-Configurar o PC para usar DNS.
-@end itemize
-
-Exemplo de como preencher o ``ODBC setup'':
-@example
-Windows DSN name: teste
-Description: Este é o meu banco de dados teste
-MySql Database: teste
-Server: 194.216.84.21
-User: monty
-Password: minha_senha
-Port:
-@end example
-
-O valor para o campo @code{Windows DSN name} é qualquer nome que seja único
-em seu Windows ODBC setup.
-
-Vocę năo precisa especificar os valores para os seguintes campos: @code{Server},
-@code{User}, @code{Password} ou @code{Port} na hora de configurar o ODBC.
-Entretanto, se vocę o faz, esses valores devem ser usados como padrăo para fazer
-uma conexăo. Vocę tem a opçăo de trocar os valores nesse instante.
-
-Se o número da porta năo for especificado, o valor padrăo da porta (@value{default_port})
-é usado.
-
-Se vocę especificar a opçăo @code{Read options from C:\my.cnf}, os
-grupos @code{client} e @code{odbc} devem ser lidos do arquivo @file{C:\my.cnf}.
-Vocę pode usar todas as opçőes que săo usadas por @code{mysql_options()}.
-@xref{mysql_options, , @code{mysql_options}}.
-
-@node ODBC e last_insert_id, Informando bug do MyODBC, Administrador ODBC, ODBC
-@section Como obter o valor de uma coluna @code{AUTO_INCREMENT} no ODBC
-
-Um problema muito usual consiste em como saber o valor de uma coluna do tipo
-@code{INSERT} quando a mesma é gerada automaticamente. Com ODBC, vocę pode
-fazer uma coisa como esta (assumindo que @code{auto} é um campo @code{AUTO_INCREMENT}):
-
-@example
-INSERT INTO foo (auto,text) VALUES(NULL,'text');
-SELECT LAST_INSERT_ID();
-@end example
-
-Ou se vocę somente quer adicionar o valor noutra tabela, faça o
-seguinte:
-
-@example
-INSERT INTO foo (auto,text) VALUES(NULL,'text');
-INSERT INTO foo2 (id,text) VALUES(LAST_INSERT_ID(),'text');
-@end example
-
-Para o benefício de algumas aplicaçőes ODBC (pelo menos Delphi e Access),
-a seguinte consulta pode ser usada para encontrar o valor do novo registro
-adicionado:
-
-@example
-SELECT * FROM tbl_name WHERE auto IS NULL;
-@end example
-
-@node Informando bug do MyODBC, , ODBC e last_insert_id, ODBC
-@section Informando problemas com MyODBC
-
-Se vocę encontra dificuldades com MyODBC, deve começar por fazer
-um arquivo log no Administrador ODBC (o log vocę tem quando
-solicita logs do ODBCADMIN) e um log @strong{MyODBC}. Para gerar um log @strong{MyODBC},
-clique a opçăo `Trace MyODBC' na tela de configuraçăo da conexăo
-@strong{MyODBC}.
-O log será escrito no arquivo @file{C:\myodbc.log}.
-Note que vocę deve usar a @code{MYSQL.DLL} e năo a
-@code{MYSQL2.DLL} para que esta opçăo funcione!
-
-Verifique as consultas que MyODBC envia para o servidor @strong{MySQL};
-Vocę deverá ser capaz de encontrar isto através da pesquisa da
-string @code{>mysql_real_query} no arquivo @file{myodbc.log}.
-
-Vocę deve também tentar duplicar as consultas no monitor @code{mysql}
-ou @code{admndemo} para encontrar se o erro é do MyODBC ou do @strong{MySQL}.
-
-Se vocę encontrar algo errado, por favor envie somente as linhas
-relevantes (máximo 40 linhas) para o @email{myodbc@@lists.mysql.com}. Favor nunca
-enviar os arquivos log completos do MyODBC ou do ODBC !
-
-Se vocę năo encontra o quę está errado, a última opçăo
-é fazer um arquivo (tar ou zip) que contenha um arquivo log do MyODBC,
-o arquivo log ODBC e um arquivo README que explique o problema.
-Vocę o manda para @uref{ftp://www.mysql.com/pub/mysql/secret}. Somente nós da TCX
-devemos ter acesso a esses arquivos que vocę manda e nós seremos muito discretos com
-os dados !
-
-Se vocę pode fazer um programa que também mostre o mesmo problema, favor mandá-lo
-também!
-
-Se o programa funciona com outro servidor SQL, vocę pode fazer um
-arquivo log que faça exatamente a mesma coisa com o outro servidor
-SQL.
-
-Lembre que quanto mais informaçăo vocę nos fornece, o resultado é
-que nós podemos resolver o problema!
diff --git a/Docs/manual-license-spanish.texi b/Docs/manual-license-spanish.texi
deleted file mode 100644
index c9cf2bd53da..00000000000
--- a/Docs/manual-license-spanish.texi
+++ /dev/null
@@ -1,709 +0,0 @@
-@cindex Licensing terms
-@cindex Support terms
-@node Licensing and Support, Installing, Questions, Top
-@chapter MySQL licensing and support
-
-@menu
-* Licensing policy:: Política de licenciamento do @strong{MySQL}
-* Copyright:: Direitos autorais usados por @strong{MySQL}
-* Commercial use:: Distribuindo comercialmente @strong{MySQL}
-* Licensing examples:: Exemplos de situaçőes de licenciamento
-* Cost:: Preços de licenciamento e suporte @strong{MySQL}
-* Support:: Tipos de suporte comercial
-@end menu
-
-Este capítulo descreve os tipos de licenciamento e suporte do @strong{MySQL}, incluindo:
-
-@itemize @bullet
-@item
-Nossa política de licenciamento para sistemas operacionais năo Microsoft e Microsoft
-
-@item
-Os direitos autorais sob os quais o @strong{MySQL} é distribuído
-(@pxref{Copyright})
-
-@item
-Exemplo de situaçőes quando uma licença é necessária
-(@pxref{Licensing examples})
-
-@item
-Preços de licenciamento e suporte (@pxref{Cost}), e
-benefícios do suporte (@pxref{Support})
-@end itemize
-
-@cindex Licensing policy
-@node Licensing policy, Copyright, Licensing and Support, Licensing and Support
-@section MySQL licensing policy
-
-Os termos formais do licenciamento para sistemas operacionais năo Microsoft tais como
-Unix ou OS/2 săo especificados em @ref{Public license}. Basicamente, nossa política de
-licenciamento é como segue:
-
-@itemize @bullet
-@item
-Para uso interno normal, o @strong{MySQL} geralmente năo custa nada. Vocę năo precisa
-nos pagar se năo o quiser.
-
-@item
-Uma licença é requerida se:
-
-@itemize @minus
-@item
-Vocę vende o servidor @strong{MySQL} diretamente ou como parte de outro produto ou serviço.
-
-@item
-Vocę cobra para instalar e manter um servidor @strong{MySQL} no local do cliente
-
-@item
-Vocę incluie o @strong{MySQL} numa distribuiçăo que năo é redistribuída
-e vocę cobra por alguma parte dessa distribuiçăo
-@end itemize
-
-@item
-Para circunstâncias sob as quais uma licença do @strong{MySQL} é requerida,
-vocę necessita uma licença por mâquina que roda o servidor @code{mysqld}.
-Entretanto, uma mâquina com múltiplos processadores conta como uma mâquina
-simples e năo há restriçăo no número de servidores que rodam numa só mâquina
-ou no número de clientes concurrentes conectados ao servidor em essa mâquina.
-
-@item
-Vocę năo necessita uma licença para incluir código de programas clientes
-comerciais. O acesso de parte de clientes para o @strong{MySQL} é de
-domínio público. O código do cliente @code{mysql} de linha de comando
-incluie código da livraria @code{readline} que está sob a licença pública
-GNU.
-
-@item
-@cindex @code{myisampack}
-Para clientes que tem comprado 1 licença ou suporte MySQL, nós fornecemos
-funcionalidade adicional. Atualmente, isso significa o fornecimento do
-utilitário @code{myisampack} para banco de dados somente de leitura,
-rápidos e compactados. (O servidor incluie suporte para ler tais bancos
-de dados mas năo a ferramenta de compactar usada para criar os mesmos).
-Quando os acordos de suporte gerem suficientes recursos, nós liberaremos
-esta ferramenta sob a mesma licença do servidor @strong{MySQL}.
-
-@item
-Se seu uso do @strong{MySQL} năo requer uma licença, porém vocę gosta
-do @strong{MySQL} e deseja encorajar um maior desenvolvimento, vocę é
-certamente bem-vindo a adquirir uma licença de qualquer forma.
-
-@item
-Se usa o @strong{MySQL} num contexto comercial de tal forma
-que obtęm benefícios no seu uso, nós lhe solicitamos que apoie
-o desenvolvimento do @strong{MySQL} através da compra de algum
-nível de suporte. Nós achamos que se o @strong{MySQL} o ajuda
-em seu negócio, é razoável que solicitemos sua ajuda para o @strong{MySQL}.
-Por outro lado, se vocę nós faz perguntas de suporte, năo somente está
-usando de graça algo no qual nós colocamos um enorme trabalho, vocę
-também está pedindo suporte de graça.
-@end itemize
-
-Para uso em sistemas operacionais Microsoft (Win95/Win98/WinNT),
-vocę precisa de uma licença @strong{MySQL} depois de 30 dias
-de experięncia, com a exceçăo que licenças podem ser requeridas
-sem nenhum custo para uso educacional ou para suportar pesquisas
-de governo ou universidades. @xref{Winlicense}.
-Uma versăo shareware do @strong{MySQL}-Win32 que vocę pode experimentar
-antes de comprar está disponível em @uref{http://www.mysql.com/mysql_w32.htmy}.
-Depois que vocę tenha pago, vocę terá uma senha que permite seu acesso a uma
-nova versăo @strong{MySQL}-Win32.
-
-Se vocę tem uma pergunta se for o caso ou năo de requerer uma licença para
-seu caso em particular do @strong{MySQL}, favor entrar em contato com nós.
-@xref{Contact information}.
-
-Se vocę requer uma licença @strong{MySQL}, a forma mais fácil para pagar
-a mesma é usar o formulário no seguro servidor TcX em @url{https://www.mysql.com/license.htmy}.
-Outras formas de pagamento săo mencionadas em @ref{Payment information}.
-
-@cindex Copyright
-@node Copyright, Commercial use, Licensing policy, Licensing and Support
-@section Copyrights used by MySQL
-
-@menu
-* Copyright changes:: Possível futura mudança no direito autoral
-@end menu
-
-Existem vários direitos autorais diferentes na distribuiçăo @strong{MySQL}:
-
-@enumerate
-@item
-
-O fonte específico @strong{MySQL}necessário para construir o @code{mysqlclient}
-livrarias e programas no diretório @file{client} está em domínio público.
-Cada arquivo que está em domínio público tem um cabeçalho que claramente notifica
-este estado. Isto incluie tudo no diretório @file{client}e algumas partes
-do @code{mysys}, @code{mystring} e @code{dbug} livrarias.
-
-@item
-Algumas pequenas partes do fonte (GNU @code{getopt}) estăo cobertas pela
-``GNU LIBRARY LIBRARY GENERAL PUBLIC LICENSE''. Ver o arquivo
-@file{mysys/COPYING.LIB}.
-
-@item
-Algumas pequenas partes do fonte ( (GNU @code{readline}) estăo cobertas pela
-``GNU GENERAL PUBLIC LICENSE''. Ver o arquivo @file{readline/COPYING}.
-
-@item
-Algumas partes do fonte (a @code{regexp} livraria) está coberta pelo estilo de
-direito autoral Berkeley.
-
-@item
-O outro fonte necessário para o servidor @strong{MySQL} em plataformas năo Microsoft
-está coberta pela ``MySQL FREE PUBLIC LICENSE'', a qual é baseada na
-``Aladdin FREE PUBLIC LICENSE.'' @xref{Public license}. Quando o @strong{MySQL}
-está rodando em qualquer sistema operacional Microsoft, outro licenciamento é aplicado.
-@end enumerate
-
-Os seguintes pontos direcionam a filosofia sob nossa política de direito autoral:
-
-@itemize @bullet
-@item
-A livraria cliente SQL deve ser totalmente livre tal que a mesma pode ser incluída
-em produtos comerciais sem nenhuma limitaçăo.
-
-@item
-Pessoas que querem livre acesso ao programa no qual nós temos colocado uma grande
-quantidade de trabalho, podem tę-lo, tal que năo procurem ganhar dinheiro diretamente
-pela distribuiçăo e para benefício.
-
-@item
-Pessoas que querem manter o direito da propriedade de seu programa, porém também
-querem o valor de nosso trabalho, podem pagar pelo previlégio.
-
-@item
-O uso normal em casa é de GRAÇA. Mas se vocę usa o @strong{MySQL} para algo
-importante para vocę, vocę pode ajudar o desenvolvimento futuro pela
-compra de uma licença ou contrato de suporte.@xref{Support}.
-@end itemize
-
-@node Copyright changes, , Copyright, Copyright
-@subsection Possible future copyright changes
-
-Nós poderemos optar para distribuir versőes antigas do @strong{MySQL}
-com a GPL no futuro. Entretanto, essas versőes devem ser identificadas
-como @strong{GNU MySQL}. Também, todas notas de direitos autorais dos
-arquivos relativos devem ser mudados para a GPL.
-
-@node Commercial use, Licensing examples, Copyright, Licensing and Support
-@section Distributing MySQL commercially
-
-Esta seçăo é um esclarecimento dos termos de licença que săo a base na
-``MySQL FREE PUBLIC LICENSE'' (FPL). @xref{Public license}.
-
-O @strong{MySQL} pode ser @strong{usado} livremente , incluindo
-entidades comerciais para avaliaçăo ou uso interno sem suporte.
-Entretanto, @strong{distribuiçăo} para propósitos comerciais
-do @strong{MySQL}, ou qualquer coisa contendo ou derivando do @strong{MySQL}
-no seu todo ou parte, requer uma licença comercial escrita da TcX AB,
-a única entidade autorizada para garantir tais licenças.
-
-Vocę năo pode incluir o @strong{MySQL} ``de graça'' num pacote contendo
-qualquer coisa pela qual um pagamento está sendo feito, exceto como
-notado abaixo:
-
-A intençăo da exceçăo providenciada na segunda claúsula da licença é
-para permitir que organizaçőes comerciais operando um servidor FTP ou
-uma agęncia de notícias possam distribuir livremente o @strong{MySQL},
-desde que:
-
-@enumerate
-@item
-A organizaçăo complace com as outras provisőes da FPL, a qual
-incluie entre outras coisas um requerimento para distribuir o
-código fonte inteiro do @strong{MySQL} e qualquer outro trabalho
-derivado, e para distribuir a FPL em si junto com @strong{MySQL};
-
-@item
-A única cobrança para abaixar o @strong{MySQL} é a cobrança baseada
-na distribuiçăo do serviço e năo numa baseada no contexto da
-informaçăo sendo recebida (ex: a cobrança deverá ser a mesma para
-o recebimento de uma coleçăo qualquer de bits do mesmo tamanho);
-
-@item
-O servidor ou BBS é acessível para o público em geral, ex. o número de
-telefone ou enedereço IP năo é guardado em secreto, e qualquer um pode
-obter acesso para a informaçăo (possivelmente pagando uma inscriçăo ou
-acesso cobrado que năo é dependente ou relacionado para comprar qualquer
-outra coisa).
-@end enumerate
-
-Se vocę quer para distribuir programas em um contexto comercial que
-incorpora @strong{MySQL} e vocę @strong{năo} quer encontrar essas
-condiçőes, vocę deve contatar TcX AB para encontrar um licenciamento
-comercial, o qual envolve um pagamento. O único meio legal que
-vocę pode distribuir @strong{MySQL} ou qualquer coisa contendo @strong{MySQL}
-săo pela distribuiçăo do @strong{MySQL} sob os requerimentos da FPL, ou pela
-obtençăo de uma licença comercial da TcX AB.
-
-@node Licensing examples, Cost, Commercial use, Licensing and Support
-@section Example licensing situations
-
-@menu
-* Products that use MySQL:: Vendendo produtos que usam @strong{MySQL}
-* MySQL services:: Vendendo serviços relacionados ao @strong{MySQL}
-* ISP:: Serviços de ISP com @strong{MySQL}
-* Web server:: Rodando um servidor web usando o @strong{MySQL}.
-@end menu
-
-Esta seçăo descreve algumas situaçőes ilustrando se é o caso ou năo que
-vocę deve licençar o servidor @strong{MySQL}. Geralmente esses exemplos
-envolvem o fornecimento do @strong{MySQL} como parte de um produto ou
-serviço que vocę está vendendo para um cliente, ou requer que o @strong{MySQL}
-seja usado em conjunto com seu produto. Em tais casos, é sua responsabilidade
-para obter uma licença para o cliente se uma é necessária (Este requerimento
-pode ser deixado de lado se seu cliente já tem uma licença @strong{MySQL}.
-Porém, o vendedor deve enviar informaçăo do cliente e o número da licença
-para TcX, e a licença deverá ser completa, năo uma licença OEM).
-
-Note que uma simples licença do @strong{MySQL} cobre qualquer número de
-CPUs/usuários/clientes/servidores @code{mysqld} numa só mâquina!
-
-@node Products that use MySQL, MySQL services, Licensing examples, Licensing examples
-@subsection Selling products that use MySQL
-
-Para determinar caso seja necessário ou năo uma licença @strong{MySQL}
-quando vendendo a sua aplicaçăo, vocę deve perguntar caso seja necessário
-para o funcionamento adequado de sua aplicaçăo a contingęncia no uso do
-@strong{MySQL} e seja necessário vocę incluir o @strong{MySQL} com seu
-produto. Existem vários casos a considerar:
-
-@itemize @bullet
-@item
-Sua aplicaçăo precisa do @strong{MySQL} para funcionar adequadamente ?
-
-Se o seu produto precisa do @strong{MySQL}, vocę necessita uma licença
-para cada mâquina que roda o servidor @code{mysqld}. Por exemplo,
-se vocę projeta uma aplicaçăo sobre o @strong{MySQL}, entăo vocę tem
-feito realmente um produto comercial que necessita do servidor, tal que
-necessita de uma licença.
-
-Se sua aplicaçăo năo requer o @strong{MySQL}, vocę năo necessita obter uma
-licença. Por exemplo, se o @strong{MySQL} apenas adiciona uma nova característica
-a seu produto (tal como adicionando loggin a um banco de dados e se o @strong{MySQL}
-é usado no lugar de um arquivo texto), o mesmo entra como um uso normal, e uma
-licença năo precisa ser requerida.
-
-Em outras palavras, vocę necessita de uma licença se vocę vende um produto
-projetado para uso com o @strong{MySQL} ou que precisa do servidor @strong{MySQL}
-para um funcionamento completo. Isto é verdadeiro caso haja necessidade ou năo de fornecer
-o @strong{MySQL} para seu cliente como parte da distribuiçăo de seu produto.
-
-Isso também depende no que vocę está fazendo para o cliente. Vocę planeja fornecer
-a seu cliente com instruçőes e detalhes na instalaçăo do @strong{MySQL} com seu
-programa ?. Entăo seu produto contencialmente precisa do @strong{MySQL};
-Sim é tal, vocę necessita comprar uma licença. Se vocę simplesmente usa um banco de
-dados que espera já estiver instalado no instante en seu programa é comprado, entăo
-provavelmente năo necessita de uma licença.
-
-@item
-Vocę incluie o @strong{MySQL} numa distribuiçăo e cobra pela mesma ?
-
-Se vocę incluie @strong{MySQL} com a distribuiçăo que vende para os clientes,
-vocę necessita uma licença para cada mâquina que roda o servidor @code{mysqld},
-porque neste caso vocę está vendendo um sistema que incluie @strong{MySQL}.
-
-Isto é verdadeiro no caso que o @strong{MySQL} com seu produto seja requerido
-ou opcional.
-
-@item
-Vocę năo requer nem incluie o @strong{MySQL} com seu produto ?
-
-Suponha que quer vender um produto projetado de uma maneira geral para usar
-com "qualquer banco de dados" e que pode ser configurado para usar qualquer
-uma das várias alternativas de sistemas de banco de dados (@strong{MySQL},
-PostgreSQL, ou qualquer outro. Isto é, seu produto năo requer @strong{MySQL},
-mas pode suportar qualquer banco de dados com o nível base de funcionalidade
-e vocę năo depende de qualquer coisa que somente @strong{MySQL} suporta.
-Nenhum de vocęs paga para nós se o seu cliente realmente seleciona para
-usar @strong{MySQL}?
-
-Neste caso, se vocę năo fornece, obtęm ou configura o @strong{MySQL} para
-o cliente e decide o cliente para usá-lo, nenhum de vocęs precisa de uma
-licença. Se vocę faz um serviço, vide @ref{MySQL services, ,
-@strong{MySQL} serviços}.
-@end itemize
-
-@node MySQL services, ISP, Products that use MySQL, Licensing examples
-@subsection Selling MySQL-related services
-
-Se vocę faz uma instalaçăo numa mâquina de um cliente do @strong{MySQL}
-e há cobrança pelo serviço (direta ou indiretamente), entăo vocę comprar
-uma licença @strong{MySQL}.
-
-Se vocę vende uma aplicaçăo para a qual o @strong{MySQL} năo é estritamente
-requerido, porém pode ser usado, uma licença deve indicada, dependendo
-como o @strong{MySQL} é configurado. Suponha que seu produto năo requera e
-năo incluia o @strong{MySQL} na sua distribuiçăo, porém pode ser configurado
-para usar o @strong{MySQL} para os clientes que assim o desejar. (Este pode ser
-o caso, por exemplo, se seu produto pode usar qualquer um de servidores de
-banco de dados).
-
-Se o cliente obtęm e instala o @strong{MySQL}, nenhuma licença é necessária.
-Entretanto, se vocę faz o serviço para seu cliente, entăo é necessário uma
-licença, porque vocę está vendendo um serviço que incluie o @strong{MySQL}.
-
-@node ISP, Web server, MySQL services, Licensing examples
-@subsection ISP MySQL services
-
-Provedores de Serviço Internet (ISPs) ŕs vezes hospedam servidores @strong{MySQL}
-para seus cliente.
-
-Se vocę é um ISP que permite a seus clientes instalar e administrar o
-@strong{MySQL} por si próprios na sua mâquina sem nenhuma assistęncia
-de sua parte, nem vocę nem o cliente precisa de uma licença @strong{MySQL}.
-
-Se vocę cobra para instalar e administrar o @strong{MySQL} como parte de seu
-serviço para o cliente, entăo vocę precisa de uma licença, porque está vendendo
-um serviço que incluie o @strong{MySQL}.
-
-@node Web server, , ISP, Licensing examples
-@subsection Running a web server using MySQL
-
-Se vocę usa o @strong{MySQL} em conjunto com um servidor web, vocę năo tem
-que pagar uma licença.
-
-Isto é verdadeiro se vocę roda um servidor web comercial que usa @strong{MySQL},
-desde que vocę năo esteja vendendo o @strong{MySQL}. Entretanto, neste caso
-nós gostariamos que vocę compre suporte @strong{MySQL}, porque @strong{MySQL}
-está ajudando a sua empresa.
-
-@cindex Costs, licensing and support
-@cindex Licensing costs
-@cindex Support costs
-@node Cost, Support, Licensing examples, Licensing and Support
-@section MySQL licensing and support costs
-
-@menu
-* Payment information:: Informaçăo de Pagamento
-* Contact information:: Informaçăo de contato
-@end menu
-
-Nossos preços atuais de licença săo mostrados abaixo. Todos os preços săo
-em US Dólar. Se vocę paga com cartăo de crédito, a moeda é o EURO (European Union Euro),
-tais preços diferem levemente.
-
-@multitable @columnfractions .25 .2 .3
-@item @strong{Número de licenças} @tab @strong{Preço por cópia} @tab @strong{Total}
-@item 1 @tab US $200 @tab US $200
-@item 10 pacotes @tab US $150 @tab US $1500
-@item 50 pacotes @tab US $120 @tab US $6000
-@end multitable
-
-Para compras em alto volume (OEM), os seguintes preços săo aplicados:
-
-@multitable @columnfractions .25 .2 .3 .25
-@item @strong{Número de licenças} @tab @strong{Preço por cópia} @tab @strong{Mínimo de uma vez} @tab @strong{Pagamento mínimo}
-@item 100-999 @tab US $40 @tab 100 @tab US $4000
-@item 1000-2499 @tab US $25 @tab 200 @tab US $5000
-@item 2500-4999 @tab US $20 @tab 400 @tab US $8000
-@end multitable
-
-Para compras OEM, vocę deve atuar como o intermediário para eventuais
-problemas ou solicitaçőes de seus usuários. Nós também requeremos que
-clientes OEM tenham ao menos um contrato de suporte extended email.
-
-Se vocę tem uma margem baixa em alto volume de produtos, vocę pode falar
-com nós sobre outros termos (por exemplo, a porcentagem dos preços de
-venda). Se vocę faz, por favor seja informativo sobre seu produto, preço,
-mercado e qualquer outra informaçăo que seja relevante.
-
-@cindex @code{myisampack}
-Depois de comprar 1 licença @strong{MySQL}, vocę terá uma cópia pessoal
-do utilitário @code{myisampack}. Vocę năo está permitido em distribuir
-esse utilitário porém vocę pode distribuir tabelas compactadas com ele.
-
-Um preço completo de uma licença năo é um acordo de suporte e incluie um
-mínimo suporte. Isto significa que nós tentamos responder qualquer pergunta
-relevante. Se a resposta está na documentaçăo, nós direcionamos vocę ŕ
-apropriada seçăo. Se vocę năo tem comprado uma licença ou suporte, nós
-provavelmente năo responderemos ao tudo.
-
-Se vocę descobre o que consideramos um real bug, nós estamos prontificados
-a solucionar o erro em qualquer caso. Porém se vocę paga por suporte nós
-o notificaremos sobre o andamento da soluçăo ao invés de soluncioná-lo
-nos próximos lançamentos.
-
-Suporte mais amplo é vendido separadamente. Descriçőes do que incluie cada
-nível de suporte săo dadas em @ref{Support}. Custos para os vários tipos
-comerciais de suporte săo mostrados abaixo. O nível de preços de suporte
-estăo em EURO (European Union Euro). Um EURO é aproximadamente 1.17 USD.
-
-@multitable @columnfractions .3 .3
-@item @strong{Tipo de suporte} @tab @strong{Custo por ano}
-@item Basic email support @tab EURO 170
-@item Extended email support @tab EURO 1000
-@item Login support @tab EURO 2000
-@item Extended login support @tab EURO 5000
-@end multitable
-
-Vocę pode atualizar um nível mais baixo sw suporte para um de maior
-nível, pela diferença entre os preços dos dois níveis.
-
-@cindex Payment information
-@node Payment information, Contact information, Cost, Cost
-@subsection Payment information
-
-Correntemente nós podemos tomar pagamentos SWIFT, cheques ou cartőes de crédito.
-
-O pagamento poderá ser feito a:
-@example
-Postgirot Bank AB
-105 06 STOCKHOLM, SWEDEN
-
-TCX DataKonsult AB
-BOX 6434
-11382 STOCKHOLM, SWEDEN
-
-SWIFT address: PGSI SESS
-Número da Conta: 96 77 06 - 3
-@end example
-
-Especificar: licença e/ou suporte, seu nome e endereço de e-mail.
-
-Em europa e Japăo vocę pode usar EuroGiro (que pode ser menos caro) para a mesma
-conta.
-
-Se vocę quer pagar através de cheque, faça-o nominal a ``Monty Program KB'' e mande
-um e-mail para o endereço abaixo:
-
-@example
-TCX DataKonsult AB
-BOX 6434, Torsgatan 21
-11382 STOCKHOLM, SWEDEN
-@end example
-
-Se vocę quer pagar com cartăo de crédito usando a Internet, vocę pode
-usar o seguro formulário de licença da TcX:
-@uref{https://www.mysql.com/license.htmy.
-
-Vocę pode também imprimir uma cópia do formulário de licença, prenché-lo e mandá-lo
-via fax para:
-
-
-+46-8-729 69 05
-
-Se vocę quer que nós uma cobrança para vocę, vocę pode usar o formulário de
-licença e escrever ``bill us'' no campo de comentários. Vocę pode também
-mandar uma mensagem via e-mail para @email{sales@@mysql.com} (@strong{not}
-@email{mysql@@lists.mysql.com}!) com a informaçăo de sua companhia e pedir
-para nós para efetuar a cobrança.
-
-@cindex Contact information
-@node Contact information, , Payment information, Cost
-@subsection Contact information
-
-Para licenciamento comercial, ou se vocę tęm qualquer pergunta sobre
-informaçăo desta seçăo, por favor contatar a equipe de licenciamento
-do @strong{MySQL}. O mais preferido método é o e-mail para
-@email{mysql-licensing@@mysql.com}. Fax é também possível porém sua
-manipulaçăo pode demorar muito (Fax +46-8-729 69 05).
-
-@example
-David Axmark
-Detron HB
-Kungsgatan 65 B
-753 21 UPPSALA
-SWEDEN
-Fone Voz +46-18-10 22 80 (Timezone GMT+1. Fala Sueco e Inglés)
-@end example
-
-@cindex Support, types
-@cindex Types of support
-@node Support, , Cost, Licensing and Support
-@section Types of commercial support
-
-@menu
-* Basic email support:: Basic email support
-* Extended email support:: Extended email support
-* Login support:: Login support
-* Extended login support:: Extended login support
-@end menu
-
-@node Basic email support, Extended email support, Support, Support
-@subsection Basic email support
-
-Basic email support é a opçăo mais barata de suporte e deverá ser vista
-como uma forma de suportar nosso desenvolvimento do @strong{MySQL} que
-uma real opçăo de suporte.
-
-Neste nível de suporte, a lista de e-mail do @strong{MySQL} é o preferido
-meio de comunicaçăo. Perguntas normalmente podem ser enviadas para a
-principal lista de e-mail (@email{mysql@@lists.mysql.com}) ou uma das outras
-listas regulares (por exemplo, @email{mysql-win32@@lists.mysql.com} relacionada
-ŕs perguntas para o @strong{MySQL} Windows, tal que qualquer pessoa pode já ter
-experimentado e resolvido o problema que vocę tem. @xref{Asking questions}.
-
-Entretanto, comprando o suporte basic email support, vocę também tem acesso
-ao e-mail @email{mysql-support@@mysql.com}, o qual năo é disponível
-como parte do suporte mínimo que se tem quando se adquire uma licença @strong{MySQL}.
-Isto significa que para perguntas críticas, vocę pode mandar sua mensagem para
-@email{mysql-support@@mysql.com}. (Se a mensagem tem dados privados, vocę só
-deve mandar para o @email{mysql-support@@mysql.com}.)
-
-@emph{LEMBRE-SE!} para SEMPRE incluir o número de registro e data de
-término quando mandar uma mensagem para
-@email{mysql-support@@mysql.com}.
-
-Basic email support incluie os seguintes tipos de serviços:
-
-@itemize @bullet
-@item
-Se sua pergunta já está respondida no manual, nós o informamos da correta
-seçăo na qual pode encontrar a resposta. Se a resposta năo está no manual,
-nós o colocamos na direçăo certa para resolver seu problema.
-
-@item
-Nós garantimos em tempo apropriado a resposta das mensagem de seu e-mail.
-Nós năo podemos garantir que podemos resolver qualquer problema, porém ao
-menos vocę receve uma resposta se podemos contatá-lo por e-mail.
-
-@item
-Nós podemos ajudá-lo com problemas inesperados quando instala @strong{MySQL}
-a partir de uma distribuiçăo binária em plataformas suportadas. Este nível de
-suporte năo cobre instalaçăo do @strong{MySQL} a partir de uma distribuiçăo
-fonte. Plataformas ``Suportadas'' săo aquelas plataformas nas quais o @strong{MySQL}
-é conhecido que funciona.
-@xref{Which OS}.
-
-@item
-Nós ajudaremos vocę com bugs e problemas de características. Qualquer
-bug que for encontrado nós o solucionamos no próximo lançamento do @strong{MySQL}.
-Se o bug é crítico para vocę, nós enviamos um e-mail com o patch
-tăo logo como o bug é resolvido. Bugs críticos tęm sempre para nós a maior
-prioridade, para assegurar que sejam solucionados tăo pronto como possível.
-
-@item
-Suas sugestőes para desenvolvimento posterior do @strong{MySQL} săo tomadas
-em consideraçăo. Obtendo o email support, vocę já ajuda o desenvolvimento
-posterior do @strong{MySQL}. Se vocę quer pôr mais, faça a atualizaçăo
-para um nível mais alto de suporte.
-
-@item
-Se vocę quer nós ajudar a otimizar seu sistema, vocę deve atualizar
-para um nível maior de suporte.
-
-@item
-@cindex @code{myisampack}
-Nós incluimos uma versăo binária da ferramenta de compactaçăo @code{myisampack}
-para criar rápidos bancos de dados compactados, somente de leitura. O atual
-servidor incluie suporte para ler esses bancos de dados mas năo a ferramenta
-para criar os mesmos.
-@end itemize
-
-@node Extended email support, Login support, Basic email support, Support
-@subsection Extended email support
-
-Extended email support incluie tudo o do basic email support com estas
-adiçőes:
-
-@itemize @bullet
-@item
-Seu e-mail será tratado antes dos e-amil dos usuários do basic email support
-e dos usuários năo registrados.
-
-@item
-Suas sugestőes para o próximo desenvolvimento do @strong{MySQL} receberá
-uma forte consideraçăo. Simples extensőes que fazem os gols do @strong{MySQL}
-săo a implementaçăo em questăo de dias. adquirindo o extended email support
-vocę auxilia daqui para frente o desenvolvimento do @strong{MySQL}.
-
-@item
-Perguntas típicas que săo cobertas pelo extended email support săo:
-
-@itemize @minus
-@item
-Nós respondemos e (dentro do razoável) resolvemos as perguntas relacionadas
-a possíveis bugs no @strong{MySQL}. Tăo pronto como os bugs săo encontrados
-e corregidoa, nós mandamos por e-mail o pacth para ele.
-
-@item
-Nós auxiliamos com inesperados problemas quando vocę instala o @strong{MySQL}
-a partir do fonte ou distribuiçăo binária nas plataformas suportadas.
-
-@item
-Nós responderemos perguntas sobre características perdidad e ofereceremos
-dicas como trabalhar e contornar elas.
-
-@item
-Nós forneceremos dicas na otimizaçăo do @code{mysqld}para sua situaçăo.
-@end itemize
-
-@item
-Vocę está permitido a influenciar a prioridade de itens do TODO do @strong{MySQL}.
-Isso assegura que as características que vocę realmente precisa sejam implementadas
-rapidamente que as mesmas poderia ser de outra forma.
-@end itemize
-
-@node Login support, Extended login support, Extended email support, Support
-@subsection Login support
-
-O Login support incluie tudo do extended email support com estas adiçőes:
-
-@itemize @bullet
-@item
-Seu e-mail terá prioridade sobre os usuários do suporte extended email.
-
-@item
-Suas sugestőes para o próximo desenvolvimento do @strong{MySQL} será tomado
-com uma alta consideraçăo. Extensőes reais que podem ser implementadas num
-par de horas e que fazem os gols do @strong{MySQL} serăo implementadas
-tăo logo como possível.
-
-@item
-Se vocę tem um problema muito específico, nós tentaremos logar no seu
-sistema para resolver o problema ''no local''.
-
-@item
-Tal como qualquer outro vendedor de banco de dados, năo podemos garantir que
-podemos recuperar qualquer dado de tabelas corrompidas, porém se o pior acontece
-nós poderemos a recuperar tanto quanto seja possível. O @strong{MySQL}tem provado
-ser muito seguro, porém qualquer é possível devido a circuntâncias fora de nosso
-controle (por exemplo, se seu sistema crash ou alguém kill o servidor executando
-um comando @code{kill -9}).
-
-@item
-Nós providenciaremos dicas na otimizaçăo de seu sistema e consultas.
-
-@item
-Vocę está permitido para chamar um desenvolvedor @strong{MySQL} (moderadamente) e
-discutir seu problemas relacionados com o @strong{MySQL}.
-@end itemize
-
-@node Extended login support, , Login support, Support
-@subsection Extended login support
-
-O Extended login support incluie tudo do login support com estas adiçőes:
-
-@itemize @bullet
-@item
-Seu e-mail tem a mais alta prioridade possível.
-
-@item
-Nós ativamente examinamos seu sistema e ajudamos a otimizá-lo assim como suas
-consultas. Nós também podemos otimizar e/ou extender o @strong{MySQL}
-para suprir melhor suas necessidades.
-
-@item
-Vocę também pode solicitar extensőes es peciais apenas para vocę. Por exemplo:
-@example
-mysql> select MY_CALCULATION(col_name1,col_name2) from tbl_name;
-@end example
-
-@item
-Nós podemos fornecer uma distribuiçăo binária para todas as atualizaçőes
-mais importantes do @strong{MySQL} para seu sistema, tăo logo como podemos
-obter uma conta em um sistema similar. No pior dos casos, nós podemos requerer
-acesso para seu sistema para ser capaz de criar uma distribuiçăo binária.
-
-@item
-Se vocę pode providenciar acomodaçőes e pagar os custos de viagem para um
-desenvolvedor @strong{MySQL} para vistá-lo e oferecer ajuda com seus problemas.
-O suporte Extended login support entitula vocę para um encontro pessoal por
-ano, porém nós sempre somos muito flexíveis para levar para frente nossos
-clientes!.
-@end itemize
-
-@node Installing, Compatibility, Licensing and Support, Top
-
diff --git a/Docs/manual.de.texi b/Docs/manual.de.texi
deleted file mode 100644
index 902a9496bbb..00000000000
--- a/Docs/manual.de.texi
+++ /dev/null
@@ -1,107 +0,0 @@
-\input texinfo @c -*-texinfo-*-
-@c
-@c *********************************************************
-@c
-@c This is a dummy placeholder file for manual.de.texi in the
-@c MySQL source trees.
-@c
-@c Note, that the manual has been moved into a separate
-@c BitKeeper source tree named "mysqldoc" - do not attempt
-@c to add NEWS entries or documentation to this file! All
-@c changes to the manual should be done in the mysqldoc tree.
-@c
-@c See http://www.mysql.com/doc/en/Installing_source_tree.html
-@c for information about how to work with BitKeeper source trees.
-@c
-@c This dummy file is being replaced with the real manual from the
-@c mysqldoc tree when building the official source distribution.
-@c
-@c Please e-mail docs@mysql.com for more information or if
-@c you are interested in doing a translation.
-@c
-@c *********************************************************
-@c
-@c %**start of header
-
-@setfilename mysql.de.info
-
-@c We want the types in the same index
-@syncodeindex tp fn
-
-@c Get version information. This file is generated by the Makefile!!
-@include include.texi
-
-@ifclear tex-debug
-@c This removes the black squares in the right margin
-@finalout
-@end ifclear
-
-@c Set background for HTML
-@set _body_tags BGCOLOR=silver TEXT=#000000 LINK=#101090 VLINK=#7030B0
-@c Set some style elements for the manual in HTML form. 'suggested'
-@c natural language colors: aqua, black, blue, fuchsia, gray, green,
-@c lime, maroon, navy, olive, purple, red, silver, teal, white, and
-@c yellow. From Steeve Buehler <ahr@YogElements.com>
-@set _extra_head <style> code {color:purple} tt {color:green} samp {color:navy} pre {color:maroon} </style>
-
-@settitle Dummy MySQL Reference Manual for version @value{mysql_version}.
-
-@c We want single-sided heading format, with chapters on new pages. To
-@c get double-sided format change 'on' below to 'odd'
-@setchapternewpage on
-
-@paragraphindent 0
-
-@c %**end of header
-
-@ifinfo
-@format
-START-INFO-DIR-ENTRY
-* mysql: (mysql). MySQL documentation.
-END-INFO-DIR-ENTRY
-@end format
-@end ifinfo
-
-@titlepage
-@sp 10
-@center @titlefont{Empty placeholder for the MySQL Reference Manual}
-@sp 10
-@center Copyright @copyright{} 1995-2002 MySQL AB
-@c blank page after title page makes page 1 be a page front.
-@c also makes the back of the title page blank.
-@page
-@end titlepage
-
-@c This should be added. The HTML conversion also needs a MySQL version
-@c number somewhere.
-
-@iftex
-@c change this to double if you want formatting for double-sided
-@c printing
-@headings single
-
-@oddheading @thischapter @| @| @thispage
-@evenheading @thispage @| @| MySQL Technical Reference for Version @value{mysql_version}
-
-@end iftex
-
-@node Top, (dir), (dir), (dir)
-
-@ifinfo
-This is an empty placeholder file for the MySQL manual.
-
-The MySQL manual is now maintained in a separate BitKeeper source tree!
-Please see @url{http://www.mysql.com/doc/en/Installing_source_tree.html}
-for more info on how to work with BitKeeper.
-
-Please do not attempt to edit this file to add NEWS entries or to add
-documentation! Use the one in the @code{mysqldoc} BK tree instead.
-
-This file will be replaced with the current @code{manual.de.texi} when building
-the official source distribution.
-
-You can find a specific manual for any older version of MySQL
-in the binary or source distribution for that version.
-@end ifinfo
-
-@bye
diff --git a/Docs/manual.texi b/Docs/manual.texi
deleted file mode 100644
index 989a1836a15..00000000000
--- a/Docs/manual.texi
+++ /dev/null
@@ -1,107 +0,0 @@
-\input texinfo @c -*-texinfo-*-
-@c
-@c *********************************************************
-@c
-@c This is a dummy placeholder file for manual.texi in the
-@c MySQL source trees.
-@c
-@c Note, that the manual has been moved into a separate
-@c BitKeeper source tree named "mysqldoc" - do not attempt
-@c to add NEWS entries or documentation to this file! All
-@c changes to the manual should be done in the mysqldoc tree.
-@c
-@c See http://www.mysql.com/doc/en/Installing_source_tree.html
-@c for information about how to work with BitKeeper source trees.
-@c
-@c This dummy file is being replaced with the real manual from the
-@c mysqldoc tree when building the official source distribution.
-@c
-@c Please e-mail docs@mysql.com for more information or if
-@c you are interested in doing a translation.
-@c
-@c *********************************************************
-@c
-@c %**start of header
-
-@setfilename mysql.info
-
-@c We want the types in the same index
-@syncodeindex tp fn
-
-@c Get version information. This file is generated by the Makefile!!
-@include include.texi
-
-@ifclear tex-debug
-@c This removes the black squares in the right margin
-@finalout
-@end ifclear
-
-@c Set background for HTML
-@set _body_tags BGCOLOR=silver TEXT=#000000 LINK=#101090 VLINK=#7030B0
-@c Set some style elements for the manual in HTML form. 'suggested'
-@c natural language colors: aqua, black, blue, fuchsia, gray, green,
-@c lime, maroon, navy, olive, purple, red, silver, teal, white, and
-@c yellow. From Steeve Buehler <ahr@YogElements.com>
-@set _extra_head <style> code {color:purple} tt {color:green} samp {color:navy} pre {color:maroon} </style>
-
-@settitle Dummy MySQL Reference Manual for version @value{mysql_version}.
-
-@c We want single-sided heading format, with chapters on new pages. To
-@c get double-sided format change 'on' below to 'odd'
-@setchapternewpage on
-
-@paragraphindent 0
-
-@c %**end of header
-
-@ifinfo
-@format
-START-INFO-DIR-ENTRY
-* mysql: (mysql). MySQL documentation.
-END-INFO-DIR-ENTRY
-@end format
-@end ifinfo
-
-@titlepage
-@sp 10
-@center @titlefont{Empty placeholder for the MySQL Reference Manual}
-@sp 10
-@center Copyright @copyright{} 1995-2002 MySQL AB
-@c blank page after title page makes page 1 be a page front.
-@c also makes the back of the title page blank.
-@page
-@end titlepage
-
-@c This should be added. The HTML conversion also needs a MySQL version
-@c number somewhere.
-
-@iftex
-@c change this to double if you want formatting for double-sided
-@c printing
-@headings single
-
-@oddheading @thischapter @| @| @thispage
-@evenheading @thispage @| @| MySQL Technical Reference for Version @value{mysql_version}
-
-@end iftex
-
-@node Top, (dir), (dir), (dir)
-
-@ifinfo
-This is an empty placeholder file for the MySQL manual.
-
-The MySQL manual is now maintained in a separate BitKeeper source tree!
-Please see @url{http://www.mysql.com/doc/en/Installing_source_tree.html}
-for more info on how to work with BitKeeper.
-
-Please do not attempt to edit this file to add NEWS entries or to add
-documentation! Use the one in the @code{mysqldoc} BK tree instead.
-
-This file will be replaced with the current @code{manual.texi} when building
-the official source distribution.
-
-You can find a specific manual for any older version of MySQL
-in the binary or source distribution for that version.
-@end ifinfo
-
-@bye
diff --git a/Docs/manual_toc.html b/Docs/manual_toc.html
deleted file mode 100644
index b9014e5efb9..00000000000
--- a/Docs/manual_toc.html
+++ /dev/null
@@ -1,9 +0,0 @@
-<html>
-<head>
-<title>Place holder for manual_toc.html</title>
-</head>
-<body>
-This is just a place holder for the autogenerated manual_toc.html
-to make "make dist" happy.
-</body>
-</html>
diff --git a/Docs/mirrors.texi b/Docs/mirrors.texi
deleted file mode 100644
index 651963c57c3..00000000000
--- a/Docs/mirrors.texi
+++ /dev/null
@@ -1,446 +0,0 @@
-@strong{Europe:}
-
-@itemize @bullet
-
-@item
-@image{Flags/armenia} Armenia [AbideWeb Technologies] @@
-WWW (@uref{http://mysql.abideweb.com/})
-FTP (@uref{ftp://mysql.abideweb.com/mirrors/MySQL/})
-
-@item
-@image{Flags/austria} Austria [Univ. of Technology/Vienna] @@
-WWW (@uref{http://gd.tuwien.ac.at/db/mysql/})
-FTP (@uref{ftp://gd.tuwien.ac.at/db/mysql/})
-
-@item
-@image{Flags/belgium} Belgium [BELNET] @@
-WWW (@uref{http://mysql.belnet.be/})
-FTP (@uref{ftp://ftp.belnet.be/mirror/ftp.mysql.com/pub/mysql/})
-
-@item
-@image{Flags/bulgaria} Bulgaria [online.bg/Sofia] @@
-WWW (@uref{http://mysql.online.bg/})
-FTP (@uref{ftp://mysql.online.bg/})
-
-@item
-@image{Flags/czech-republic} Czech Republic [Masaryk University in Brno] @@
-WWW (@uref{http://mysql.linux.cz/})
-FTP (@uref{ftp://ftp.fi.muni.cz/pub/mysql/})
-
-@item
-@image{Flags/czech-republic} Czech Republic [www.gin.cz] @@
-WWW (@uref{http://mysql.gin.cz/})
-FTP (@uref{ftp://ftp.gin.cz/pub/MIRRORS/www.mysql.com/})
-
-@item
-@image{Flags/czech-republic} Czech Republic [www.sopik.cz] @@
-WWW (@uref{http://www.mysql.cz/})
-
-@item
-@image{Flags/denmark} Denmark [Borsen] @@
-WWW (@uref{http://mysql.borsen.dk/})
-
-@item
-@image{Flags/denmark} Denmark [Cybercity Internet] @@
-WWW (@uref{http://mysql.mirrors.cybercity.dk/})
-
-@item
-@image{Flags/denmark} Denmark [SunSITE] @@
-WWW (@uref{http://mirrors.sunsite.dk/mysql/})
-FTP (@uref{ftp://sunsite.dk/mirrors/mysql/})
-
-@item
-@image{Flags/estonia} Estonia [OK Interactive] @@
-WWW (@uref{http://mysql.mirror.ok.ee/})
-
-@item
-@image{Flags/finland} Finland [KPNQwest] @@
-WWW (@uref{http://mysql.kpnqwest.fi/})
-
-@item
-@image{Flags/finland} Finland [Mediatraffic] @@
-WWW (@uref{http://mysql.mediatraffic.fi/})
-
-@item
-@image{Flags/finland} Finland [tonnikala.net] @@
-WWW (@uref{http://mysql.tonnikala.org/})
-
-@item
-@image{Flags/france} France [free.fr] @@
-WWW (@uref{http://mysql-mirror.free.fr/})
-FTP (@uref{ftp://ftp.free.fr/pub/MySQL/})
-
-@item
-@image{Flags/france} France [mir2.ovh.net/] @@
-WWW (@uref{http://mir2.ovh.net/ftp.mysql.com/})
-FTP (@uref{ftp://mir1.ovh.net/ftp.mysql.com/})
-
-@item
-@image{Flags/france} France [Netsample] @@
-WWW (@uref{http://www.mysql.netsample.com/})
-
-@item
-@image{Flags/france} France [Universite Paris 10] @@
-WWW (@uref{http://ftp.u-paris10.fr/mysql.com})
-FTP (@uref{ftp://ftp.u-paris10.fr/mysql.com})
-
-@item
-@image{Flags/germany} Germany [GWDG] @@
-WWW (@uref{http://ftp.gwdg.de/pub/misc/mysql/})
-FTP (@uref{ftp://ftp.gwdg.de/pub/misc/mysql/})
-
-@item
-@image{Flags/germany} Germany [SunSITE Central Europe] @@
-WWW (@uref{http://sunsite.informatik.rwth-aachen.de/mysql/})
-FTP (@uref{ftp://sunsite.informatik.rwth-aachen.de/pub/mirror/www.mysql.com/})
-
-@item
-@image{Flags/germany} Germany [Tiscali] @@
-WWW (@uref{http://filepile.tiscali.de/mirror/mysql/})
-FTP (@uref{ftp://filepile.tiscali.de/mirror/mysql/})
-
-@item
-@image{Flags/germany} Germany [Wolfenbuettel] @@
-WWW (@uref{http://www.fh-wolfenbuettel.de/ftp/pub/database/mysql/})
-FTP (@uref{ftp://ftp.fh-wolfenbuettel.de/pub/database/mysql/})
-
-@item
-@image{Flags/greece} Greece [NTUA, Athens] @@
-WWW (@uref{http://www.ntua.gr/mysql/})
-FTP (@uref{ftp://ftp.ntua.gr/pub/databases/mysql/})
-
-@item
-@image{Flags/hungary} Hungary [stop.hu] @@
-WWW (@uref{http://mysql.mirror.stop.hu/})
-
-@item
-@image{Flags/hungary} Hungary [TiszaneT] @@
-WWW (@uref{http://mysql.tiszanet.hu/})
-FTP (@uref{ftp://mysql.tiszanet.hu/pub/mirrors/mysql/})
-
-@item
-@image{Flags/hungary} Hungary [Xenia] @@
-WWW (@uref{http://mysql.sote.hu/})
-FTP (@uref{ftp://xenia.sote.hu/pub/mirrors/www.mysql.com/})
-
-@item
-@image{Flags/iceland} Iceland [Tvíund] @@
-WWW (@uref{http://mysql.tviund.is/})
-
-@item
-@image{Flags/ireland} Ireland [Esat Net] @@
-WWW (@uref{http://ftp.esat.net/mirrors/download.sourceforge.net/pub/mirrors/mysql/})
-FTP (@uref{ftp://ftp.esat.net/mirrors/download.sourceforge.net/pub/mirrors/mysql/})
-
-@item
-@image{Flags/ireland} Ireland [MD NMTB Media] @@
-WWW (@uref{http://mirrors.nmtbmedia.com/mysql/})
-
-@item
-@image{Flags/israel} Israel [fresh.co.il] @@
-WWW (@uref{http://mysql.fresh.co.il/})
-
-@item
-@image{Flags/italy} Italy [feelinglinux.com] @@
-WWW (@uref{http://mysql.feelinglinux.com/})
-
-@item
-@image{Flags/italy} Italy [Teta Srl] @@
-WWW (@uref{http://www.teta.it/mysql/})
-
-@item
-@image{Flags/italy} Italy [tzone.it] @@
-WWW (@uref{http://mysql.tzone.it/})
-
-@item
-@image{Flags/latvia} Latvia [linux.lv] @@
-FTP (@uref{ftp://ftp.linux.lv/pub/software/mysql/})
-
-@item
-@image{Flags/netherlands} Netherlands [OMS-Net] @@
-WWW (@uref{http://mysql.oms-net.nl/})
-
-@item
-@image{Flags/netherlands} Netherlands [ProServe] @@
-WWW (@uref{http://mysql.proserve.nl/})
-
-@item
-@image{Flags/netherlands} Netherlands [WideXS BV] @@
-WWW (@uref{http://mysql.mirror.widexs.nl/})
-FTP (@uref{ftp://mirror.widexs.nl/pub/mysql/})
-
-@item
-@image{Flags/norway} Norway [Brainpeddlers AS] @@
-WWW (@uref{http://mysql.brainpeddlers.com/})
-
-@item
-@image{Flags/poland} Poland [ncservice.com/Gdansk] @@
-WWW (@uref{http://mysql.service.net.pl/})
-
-@item
-@image{Flags/poland} Poland [SunSITE] @@
-WWW (@uref{http://sunsite.icm.edu.pl/mysql/})
-FTP (@uref{ftp://sunsite.icm.edu.pl/pub/unix/mysql/})
-
-@item
-@image{Flags/portugal} Portugal [Instituto Supertior Técnico] @@
-WWW (@uref{http://darkstar.ist.utl.pt/mysql/})
-FTP (@uref{ftp://darkstar.ist.utl.pt/pub/mysql/})
-
-@item
-@image{Flags/portugal} Portugal [Netvisăo] @@
-WWW (@uref{http://mysql.netvisao.pt/})
-FTP (@uref{ftp://mirrors2.netvisao.pt/pub/mysql/})
-
-@item
-@image{Flags/portugal} Portugal [VIZZAVI] @@
-WWW (@uref{http://ftp.vizzavi.pt/pub/mysql/})
-FTP (@uref{ftp://ftp.vizzavi.pt/pub/mysql/})
-
-@item
-@image{Flags/romania} Romania [roedu.net/Bucharest] @@
-FTP (@uref{ftp://ftp.roedu.net/pub/mirrors/ftp.mysql.com/})
-
-@item
-@image{Flags/russia} Russia [DirectNet] @@
-WWW (@uref{http://mysql.directnet.ru/})
-FTP (@uref{ftp://ftp.dn.ru/pub/MySQL/})
-
-@item
-@image{Flags/russia} Russia [Scientific Center/Chernogolovka] @@
-FTP (@uref{ftp://ftp.chg.ru/pub/databases/mysql/})
-
-@item
-@image{Flags/slovenia} Slovenia [ARNES] @@
-WWW (@uref{http://ftp.arnes.si/mysql/})
-FTP (@uref{ftp://ftp.arnes.si/packages/mysql/})
-
-@item
-@image{Flags/sweden} Sweden [Sunet] @@
-WWW (@uref{http://ftp.sunet.se/pub/unix/databases/relational/mysql/})
-FTP (@uref{ftp://ftp.sunet.se/pub/unix/databases/relational/mysql/})
-
-@item
-@image{Flags/switzerland} Switzerland [SunSITE] @@
-WWW (@uref{http://sunsite.cnlab-switch.ch/ftp/mirror/mysql/})
-FTP (@uref{ftp://sunsite.cnlab-switch.ch/mirror/mysql/})
-
-@item
-@image{Flags/turkey} Turkey [proGEN] @@
-WWW (@uref{http://mysql.progen.com.tr/})
-
-@item
-@image{Flags/turkey} Turkey [Turkish National Academic Network & Information Center] @@
-WWW (@uref{http://mysql.ulak.net.tr/})
-
-@item
-@image{Flags/great-britain} UK [PLiG/UK] @@
-WWW (@uref{http://ftp.plig.org/pub/mysql/})
-FTP (@uref{ftp://ftp.plig.org/pub/mysql/})
-
-@item
-@image{Flags/ukraine} Ukraine [ISP Alkar Teleport/Dnepropetrovsk] @@
-WWW (@uref{http://mysql.dp.ua/})
-FTP (@uref{ftp://ftp.tlk-l.net/pub/mirrors/mysql.com/})
-
-@item
-@image{Flags/ukraine} Ukraine [PACO] @@
-WWW (@uref{http://mysql.paco.net.ua/})
-FTP (@uref{ftp://mysql.paco.net.ua/})
-
-@item
-@image{Flags/yugoslavia} Yugoslavia [Open Source Network of Yugoslavia] @@
-WWW (@uref{http://mysql.boa.org.yu/})
-FTP (@uref{ftp://ftp.linux.org.yu/pub/MySQL/})
-
-@end itemize
-
-@strong{North America:}
-
-@itemize @bullet
-
-@item
-@image{Flags/canada} Canada [Tryc] @@
-WWW (@uref{http://web.tryc.on.ca/mysql/})
-
-@item
-@image{Flags/mexico} Mexico [UAM] @@
-WWW (@uref{http://mysql.azc.uam.mx/})
-FTP (@uref{ftp://mysql.azc.uam.mx/mirrors/mysql/})
-
-@item
-@image{Flags/mexico} Mexico [UNAM] @@
-WWW (@uref{http://mysql.unam.mx/})
-FTP (@uref{ftp://mysql.unam.mx/pub/mysql/})
-
-@item
-@image{Flags/usa} USA [adgrafix.com / Boston, MA] @@
-WWW (@uref{http://mysql.adgrafix.com/})
-
-@item
-@image{Flags/usa} USA [Argonne National Laboratory / Chicago, IL] @@
-FTP (@uref{ftp://mirror.mcs.anl.gov/pub/mysql/})
-
-@item
-@image{Flags/usa} USA [Hurricane Electric / San Jose, CA] @@
-WWW (@uref{http://mysql.he.net/})
-
-@item
-@image{Flags/usa} USA [netNumina / Cambridge, MA] @@
-WWW (@uref{http://mysql.mirrors.netnumina.com/})
-
-@item
-@image{Flags/usa} USA [NIXC / Vienna, VA] @@
-WWW (@uref{http://mysql.nixc.net/})
-FTP (@uref{ftp://mysql.nixc.net/pub/mysql/})
-
-@item
-@image{Flags/usa} USA [Oregon State University / Corvallis, OR] @@
-WWW (@uref{http://mysql.orst.edu/})
-FTP (@uref{ftp://ftp.orst.edu/pub/mysql/})
-
-@item
-@image{Flags/usa} USA [University of Wisconsin / Wisconsin] @@
-WWW (@uref{http://mirror.sit.wisc.edu/mysql/})
-FTP (@uref{ftp://mirror.sit.wisc.edu/mirrors/mysql/})
-
-@item
-@image{Flags/usa} USA [UUNet] @@
-WWW (@uref{http://mysql.secsup.org/})
-FTP (@uref{ftp://mysql.secsup.org/pub/software/mysql/})
-
-@end itemize
-
-@strong{South America:}
-
-@itemize @bullet
-
-@item
-@image{Flags/argentina} Argentina [bannerlandia.com] @@
-WWW (@uref{http://mysql.bannerlandia.com.ar/})
-FTP (@uref{ftp://mysql.bannerlandia.com.ar/mirrors/mysql/})
-
-@item
-@image{Flags/chile} Chile [PSINet] @@
-WWW (@uref{http://mysql.psinet.cl/})
-FTP (@uref{ftp://ftp.psinet.cl/pub/database/mysql/})
-
-@item
-@image{Flags/chile} Chile [Tecnoera] @@
-WWW (@uref{http://mysql.tecnoera.com/})
-
-@item
-@image{Flags/chile} Chile [Vision] @@
-WWW (@uref{http://mysql.vision.cl/})
-
-@item
-@image{Flags/costa-rica} Costa Rica [Ogmios Communications] @@
-WWW (@uref{http://mysql.ogmios.co.cr/})
-FTP (@uref{ftp://mysql.ogmios.co.cr/pub/mysql/})
-
-@end itemize
-
-@strong{Asia:}
-
-@itemize @bullet
-
-@item
-@image{Flags/china} China [HKLPG/Hong Kong] @@
-WWW (@uref{http://mysql.hklpg.org/})
-
-@item
-@image{Flags/china} China [linuxforum.net] @@
-FTP (@uref{http://www2.linuxforum.net/mirror/mysql/})
-
-@item
-@image{Flags/china} China [shellhung.org/Hong Kong] @@
-WWW (@uref{http://mysql.shellhung.org/})
-FTP (@uref{ftp://ftp.shellhung.org/pub/Mirror/mysql/})
-
-@item
-@image{Flags/indonesia} Indonesia [CBN] @@
-WWW (@uref{http://mysql.cbn.net.id/})
-
-@item
-@image{Flags/indonesia} Indonesia [incaf.net] @@
-WWW (@uref{http://mysql.incaf.net/})
-FTP (@uref{ftp://mysql.incaf.net/})
-
-@item
-@image{Flags/indonesia} Indonesia [M-Web] @@
-WWW (@uref{http://mysql.mweb.net.id/})
-FTP (@uref{ftp://mysql.mweb.net.id/pub/database/mysql/})
-
-@item
-@image{Flags/indonesia} Indonesia [web.id] @@
-WWW (@uref{http://mysql.itb.web.id/})
-FTP (@uref{ftp://mysql.itb.web.id/pub/MySQL/})
-
-@item
-@image{Flags/japan} Japan [Soft Agency] @@
-WWW (@uref{http://www.softagency.co.jp/MySQL/})
-
-@item
-@image{Flags/japan} Japan [u-aizu.ac.jp/Aizu] @@
-FTP (@uref{ftp://ftp.u-aizu.ac.jp/ftp/pub/dbms/mysql/mysql.com/})
-
-@item
-@image{Flags/philippines} Philippines [Ateneo de Zamboanga University] @@
-WWW (@uref{http://mysql.adzu.edu.ph/})
-
-@item
-@image{Flags/singapore} Singapore [HJC] @@
-WWW (@uref{http://mysql.hjc.edu.sg/})
-FTP (@uref{ftp://ftp.hjc.edu.sg/mysql/})
-
-@item
-@image{Flags/south-korea} South Korea [HolyNet] @@
-WWW (@uref{http://mysql.holywar.net/})
-
-@item
-@image{Flags/south-korea} South Korea [Webiiz] @@
-WWW (@uref{http://mysql.webiiz.com/})
-
-@item
-@image{Flags/taiwan} Taiwan [I-SHOU University] @@
-WWW (@uref{http://mysql.isu.edu.tw/})
-
-@item
-@image{Flags/taiwan} Taiwan [nctu.edu/HsinChu] @@
-WWW (@uref{http://mysql.nctu.edu.tw/})
-
-@item
-@image{Flags/taiwan} Taiwan [TTN] @@
-WWW (@uref{http://mysql.ttn.net/})
-
-@end itemize
-
-@strong{Australia:}
-
-@itemize @bullet
-
-@item
-@image{Flags/australia} Australia [InterActive Consulting] @@
-WWW (@uref{http://mysql.oranged.to})
-
-@item
-@image{Flags/australia} Australia [planetmirror.com] @@
-WWW (@uref{http://mysql.planetmirror.com/})
-FTP (@uref{ftp://planetmirror.com/pub/mysql/})
-
-@item
-@image{Flags/new-zealand} New Zealand [Cubalan] @@
-WWW (@uref{http://mysql.soa.co.nz/})
-
-@end itemize
-
-@strong{Africa:}
-
-@itemize @bullet
-
-@item
-@image{Flags/south-africa} South African Republic [The Internet Solution/Johannesburg] @@
-FTP (@uref{ftp://ftp.is.co.za/linux/mysql/})
-
-@end itemize
-
diff --git a/Docs/mysql.info b/Docs/mysql.info
new file mode 100644
index 00000000000..5846d7aadf6
--- /dev/null
+++ b/Docs/mysql.info
@@ -0,0 +1,27 @@
+This is mysql.info, produced by makeinfo version 4.8 from manual.texi.
+
+START-INFO-DIR-ENTRY
+* mysql: (mysql). MySQL documentation.
+END-INFO-DIR-ENTRY
+
+
+File: mysql.info, Node: Top, Next: (dir), Prev: (dir), Up: (dir)
+
+This is an empty placeholder file for the MySQL manual.
+
+The MySQL manual is now maintained in a separate BitKeeper source tree!
+Please see `http://www.mysql.com/doc/en/Installing_source_tree.html'
+for more info on how to work with BitKeeper.
+
+This file will be replaced with the current `mysql.info' when building
+the official source distribution.
+
+You can find a specific manual for any older version of MySQL in the
+binary or source distribution for that version.
+
+
+
+Tag Table:
+Node: Top166
+
+End Tag Table
diff --git a/Docs/mysqld_error.txt b/Docs/mysqld_error.txt
deleted file mode 100644
index 7f5560a5914..00000000000
--- a/Docs/mysqld_error.txt
+++ /dev/null
@@ -1,599 +0,0 @@
-/* Copyright Abandoned 1997 TCX DataKonsult AB & Monty Program KB & Detron HB
- This file is public domain and comes with NO WARRANTY of any kind */
-
-character-set=latin1
-
-#define ER_HASHCHK 1000
-"hashchk",
-#define ER_NISAMCHK 1001
-"isamchk",
-#define ER_NO 1002
-"NO",
-#define ER_YES 1003
-"YES",
-#define ER_CANT_CREATE_FILE 1004
-"Can't create file '%-.64s' (errno: %d)",
-#define ER_CANT_CREATE_TABLE 1005
-"Can't create table '%-.64s' (errno: %d)",
-#define ER_CANT_CREATE_DB 1006
-"Can't create database '%-.64s' (errno: %d)",
-#define ER_DB_CREATE_EXISTS 1007
-"Can't create database '%-.64s'; database exists",
-#define ER_DB_DROP_EXISTS 1008
-"Can't drop database '%-.64s'; database doesn't exist",
-#define ER_DB_DROP_DELETE 1009
-"Error dropping database (can't delete '%-.64s', errno: %d)",
-#define ER_DB_DROP_RMDIR 1010
-"Error dropping database (can't rmdir '%-.64s', errno: %d)",
-#define ER_CANT_DELETE_FILE 1011
-"Error on delete of '%-.64s' (errno: %d)",
-#define ER_CANT_FIND_SYSTEM_REC 1012
-"Can't read record in system table",
-#define ER_CANT_GET_STAT 1013
-"Can't get status of '%-.64s' (errno: %d)",
-#define ER_CANT_GET_WD 1014
-"Can't get working directory (errno: %d)",
-#define ER_CANT_LOCK 1015
-"Can't lock file (errno: %d)",
-#define ER_CANT_OPEN_FILE 1016
-"Can't open file: '%-.64s' (errno: %d)",
-#define ER_FILE_NOT_FOUND 1017
-"Can't find file: '%-.64s' (errno: %d)",
-#define ER_CANT_READ_DIR 1018
-"Can't read dir of '%-.64s' (errno: %d)",
-#define ER_CANT_SET_WD 1019
-"Can't change dir to '%-.64s' (errno: %d)",
-#define ER_CHECKREAD 1020
-"Record has changed since last read in table '%-.64s'",
-#define ER_DISK_FULL 1021
-"Disk full (%s). Waiting for someone to free some space...",
-#define ER_DUP_KEY 1022
-"Can't write, duplicate key in table '%-.64s'",
-#define ER_ERROR_ON_CLOSE 1023
-"Error on close of '%-.64s' (errno: %d)",
-#define ER_ERROR_ON_READ 1024
-"Error reading file '%-.64s' (errno: %d)",
-#define ER_ERROR_ON_RENAME 1025
-"Error on rename of '%-.64s' to '%-.64s' (errno: %d)",
-#define ER_ERROR_ON_WRITE 1026
-"Error writing file '%-.64s' (errno: %d)",
-#define ER_FILE_USED 1027
-"'%-.64s' is locked against change",
-#define ER_FILSORT_ABORT 1028
-"Sort aborted",
-#define ER_FORM_NOT_FOUND 1029
-"View '%-.64s' doesn't exist for '%-.64s'",
-#define ER_GET_ERRNO 1030
-"Got error %d from storage engine",
-#define ER_ILLEGAL_HA 1031
-"Table storage engine for '%-.64s' doesn't have this option",
-#define ER_KEY_NOT_FOUND 1032
-"Can't find record in '%-.64s'",
-#define ER_NOT_FORM_FILE 1033
-"Incorrect information in file: '%-.64s'",
-#define ER_NOT_KEYFILE 1034
-"Incorrect key file for table: '%-.64s'; try to repair it",
-#define ER_OLD_KEYFILE 1035
-"Old key file for table '%-.64s'; repair it!",
-#define ER_OPEN_AS_READONLY 1036
-"Table '%-.64s' is read only",
-#define ER_OUTOFMEMORY 1037
-"Out of memory. Restart daemon and try again (needed %d bytes)",
-#define ER_OUT_OF_SORTMEMORY 1038
-"Out of sort memory. Increase daemon sort buffer size",
-#define ER_UNEXPECTED_EOF 1039
-"Unexpected eof found when reading file '%-.64s' (errno: %d)",
-#define ER_CON_COUNT_ERROR 1040
-"Too many connections",
-#define ER_OUT_OF_RESOURCES 1041
-"Out of memory; Check if mysqld or some other process uses all available memory. If not you may have to use 'ulimit' to allow mysqld to use more memory or you can add more swap space",
-#define ER_BAD_HOST_ERROR 1042
-"Can't get hostname for your address",
-#define ER_HANDSHAKE_ERROR 1043
-"Bad handshake",
-#define ER_DBACCESS_DENIED_ERROR 1044
-"Access denied for user: '%-.32s'@'%-.64s' to database '%-.64s'",
-#define ER_ACCESS_DENIED_ERROR 1045
-"Access denied for user: '%-.32s'@'%-.64s' (Using password: %s)",
-#define ER_NO_DB_ERROR 1046
-"No Database Selected",
-#define ER_UNKNOWN_COM_ERROR 1047
-"Unknown command",
-#define ER_BAD_NULL_ERROR 1048
-"Column '%-.64s' cannot be null",
-#define ER_BAD_DB_ERROR 1049
-"Unknown database '%-.64s'",
-#define ER_TABLE_EXISTS_ERROR 1050
-"Table '%-.64s' already exists",
-#define ER_BAD_TABLE_ERROR 1051
-"Unknown table '%-.64s'",
-#define ER_NON_UNIQ_ERROR 1052
-"Column: '%-.64s' in %-.64s is ambiguous",
-#define ER_SERVER_SHUTDOWN 1053
-"Server shutdown in progress",
-#define ER_BAD_FIELD_ERROR 1054
-"Unknown column '%-.64s' in '%-.64s'",
-#define ER_WRONG_FIELD_WITH_GROUP 1055
-"'%-.64s' isn't in GROUP BY",
-#define ER_WRONG_GROUP_FIELD 1056
-"Can't group on '%-.64s'",
-#define ER_WRONG_SUM_SELECT 1057
-"Statement has sum functions and columns in same statement",
-#define ER_WRONG_VALUE_COUNT 1058
-"Column count doesn't match value count",
-#define ER_TOO_LONG_IDENT 1059
-"Identifier name '%-.100s' is too long",
-#define ER_DUP_FIELDNAME 1060
-"Duplicate column name '%-.64s'",
-#define ER_DUP_KEYNAME 1061
-"Duplicate key name '%-.64s'",
-#define ER_DUP_ENTRY 1062
-"Duplicate entry '%-.64s' for key %d",
-#define ER_WRONG_FIELD_SPEC 1063
-"Incorrect column specifier for column '%-.64s'",
-#define ER_PARSE_ERROR 1064
-"%s near '%-.80s' at line %d",
-#define ER_EMPTY_QUERY 1065
-"Query was empty",
-#define ER_NONUNIQ_TABLE 1066
-"Not unique table/alias: '%-.64s'",
-#define ER_INVALID_DEFAULT 1067
-"Invalid default value for '%-.64s'",
-#define ER_MULTIPLE_PRI_KEY 1068
-"Multiple primary key defined",
-#define ER_TOO_MANY_KEYS 1069
-"Too many keys specified; max %d keys allowed",
-#define ER_TOO_MANY_KEY_PARTS 1070
-"Too many key parts specified. Max %d parts allowed",
-#define ER_TOO_LONG_KEY 1071
-"Specified key was too long; max key length is %d bytes",
-#define ER_KEY_COLUMN_DOES_NOT_EXITS 1072
-"Key column '%-.64s' doesn't exist in table",
-#define ER_BLOB_USED_AS_KEY 1073
-"BLOB column '%-.64s' can't be used in key specification with the used table type",
-#define ER_TOO_BIG_FIELDLENGTH 1074
-"Too big column length for column '%-.64s' (max = %d). Use BLOB instead",
-#define ER_WRONG_AUTO_KEY 1075
-"Incorrect table definition; There can only be one auto column and it must be defined as a key",
-#define ER_READY 1076
-"%s: ready for connections.\nVersion: '%s' socket: '%s' port: %d\n",
-#define ER_NORMAL_SHUTDOWN 1077
-"%s: Normal shutdown\n",
-#define ER_GOT_SIGNAL 1078
-"%s: Got signal %d. Aborting!\n",
-#define ER_SHUTDOWN_COMPLETE 1079
-"%s: Shutdown Complete\n",
-#define ER_FORCING_CLOSE 1080
-"%s: Forcing close of thread %ld user: '%-.32s'\n",
-#define ER_IPSOCK_ERROR 1081
-"Can't create IP socket",
-#define ER_NO_SUCH_INDEX 1082
-"Table '%-.64s' has no index like the one used in CREATE INDEX. Recreate the table",
-#define ER_WRONG_FIELD_TERMINATORS 1083
-"Field separator argument is not what is expected. Check the manual",
-#define ER_BLOBS_AND_NO_TERMINATED 1084
-"You can't use fixed rowlength with BLOBs. Please use 'fields terminated by'",
-#define ER_TEXTFILE_NOT_READABLE 1085
-"The file '%-.64s' must be in the database directory or be readable by all",
-#define ER_FILE_EXISTS_ERROR 1086
-"File '%-.80s' already exists",
-#define ER_LOAD_INFO 1087
-"Records: %ld Deleted: %ld Skipped: %ld Warnings: %ld",
-#define ER_ALTER_INFO 1088
-"Records: %ld Duplicates: %ld",
-#define ER_WRONG_SUB_KEY 1089
-"Incorrect sub part key. The used key part isn't a string, the used length is longer than the key part or the storage engine doesn't support unique sub keys",
-#define ER_CANT_REMOVE_ALL_FIELDS 1090
-"You can't delete all columns with ALTER TABLE. Use DROP TABLE instead",
-#define ER_CANT_DROP_FIELD_OR_KEY 1091
-"Can't DROP '%-.64s'. Check that column/key exists",
-#define ER_INSERT_INFO 1092
-"Records: %ld Duplicates: %ld Warnings: %ld",
-#define ER_UPDATE_TABLE_USED 1093
-"You can't specify target table '%-.64s' for update in FROM clause",
-#define ER_NO_SUCH_THREAD 1094
-"Unknown thread id: %lu",
-#define ER_KILL_DENIED_ERROR 1095
-"You are not owner of thread %lu",
-#define ER_NO_TABLES_USED 1096
-"No tables used",
-#define ER_TOO_BIG_SET 1097
-"Too many strings for column %-.64s and SET",
-#define ER_NO_UNIQUE_LOGFILE 1098
-"Can't generate a unique log-filename %-.64s.(1-999)\n",
-#define ER_TABLE_NOT_LOCKED_FOR_WRITE 1099
-"Table '%-.64s' was locked with a READ lock and can't be updated",
-#define ER_TABLE_NOT_LOCKED 1100
-"Table '%-.64s' was not locked with LOCK TABLES",
-#define ER_BLOB_CANT_HAVE_DEFAULT 1101
-"BLOB/TEXT column '%-.64s' can't have a default value",
-#define ER_WRONG_DB_NAME 1102
-"Incorrect database name '%-.100s'",
-#define ER_WRONG_TABLE_NAME 1103
-"Incorrect table name '%-.100s'",
-#define ER_TOO_BIG_SELECT 1104
-"The SELECT would examine more rows than MAX_JOIN_SIZE. Check your WHERE and use SET SQL_BIG_SELECTS=1 or SET SQL_MAX_JOIN_SIZE=# if the SELECT is ok",
-#define ER_UNKNOWN_ERROR 1105
-"Unknown error",
-#define ER_UNKNOWN_PROCEDURE 1106
-"Unknown procedure '%-.64s'",
-#define ER_WRONG_PARAMCOUNT_TO_PROCEDURE 1107
-"Incorrect parameter count to procedure '%-.64s'",
-#define ER_WRONG_PARAMETERS_TO_PROCEDURE 1108
-"Incorrect parameters to procedure '%-.64s'",
-#define ER_UNKNOWN_TABLE 1109
-"Unknown table '%-.64s' in %-.32s",
-#define ER_FIELD_SPECIFIED_TWICE 1110
-"Column '%-.64s' specified twice",
-#define ER_INVALID_GROUP_FUNC_USE 1111
-"Invalid use of group function",
-#define ER_UNSUPPORTED_EXTENSION 1112
-"Table '%-.64s' uses an extension that doesn't exist in this MySQL version",
-#define ER_TABLE_MUST_HAVE_COLUMNS 1113
-"A table must have at least 1 column",
-#define ER_RECORD_FILE_FULL 1114
-"The table '%-.64s' is full",
-#define ER_UNKNOWN_CHARACTER_SET 1115
-"Unknown character set: '%-.64s'",
-#define ER_TOO_MANY_TABLES 1116
-"Too many tables. MySQL can only use %d tables in a join",
-#define ER_TOO_MANY_FIELDS 1117
-"Too many columns",
-#define ER_TOO_BIG_ROWSIZE 1118
-"Too big row size. The maximum row size for the used table type, not counting BLOBs, is %ld. You have to change some fields to TEXT or BLOBs",
-#define ER_STACK_OVERRUN 1119
-"Thread stack overrun: Used: %ld of a %ld stack. Use 'mysqld -O thread_stack=#' to specify a bigger stack if needed",
-#define ER_WRONG_OUTER_JOIN 1120
-"Cross dependency found in OUTER JOIN. Examine your ON conditions",
-#define ER_NULL_COLUMN_IN_INDEX 1121
-"Column '%-.64s' is used with UNIQUE or INDEX but is not defined as NOT NULL",
-#define ER_CANT_FIND_UDF 1122
-"Can't load function '%-.64s'",
-#define ER_CANT_INITIALIZE_UDF 1123
-"Can't initialize function '%-.64s'; %-.80s",
-#define ER_UDF_NO_PATHS 1124
-"No paths allowed for shared library",
-#define ER_UDF_EXISTS 1125
-"Function '%-.64s' already exist",
-#define ER_CANT_OPEN_LIBRARY 1126
-"Can't open shared library '%-.64s' (errno: %d %-.64s)",
-#define ER_CANT_FIND_DL_ENTRY 1127
-"Can't find function '%-.64s' in library'",
-#define ER_FUNCTION_NOT_DEFINED 1128
-"Function '%-.64s' is not defined",
-#define ER_HOST_IS_BLOCKED 1129
-"Host '%-.64s' is blocked because of many connection errors. Unblock with 'mysqladmin flush-hosts'",
-#define ER_HOST_NOT_PRIVILEGED 1130
-"Host '%-.64s' is not allowed to connect to this MySQL server",
-#define ER_PASSWORD_ANONYMOUS_USER 1131
-"You are using MySQL as an anonymous users and anonymous users are not allowed to change passwords",
-#define ER_PASSWORD_NOT_ALLOWED 1132
-"You must have privileges to update tables in the mysql database to be able to change passwords for others",
-#define ER_PASSWORD_NO_MATCH 1133
-"Can't find any matching row in the user table",
-#define ER_UPDATE_INFO 1134
-"Rows matched: %ld Changed: %ld Warnings: %ld",
-#define ER_CANT_CREATE_THREAD 1135
-"Can't create a new thread (errno %d). If you are not out of available memory, you can consult the manual for a possible OS-dependent bug",
-#define ER_WRONG_VALUE_COUNT_ON_ROW 1136
-"Column count doesn't match value count at row %ld",
-#define ER_CANT_REOPEN_TABLE 1137
-"Can't reopen table: '%-.64s'",
-#define ER_INVALID_USE_OF_NULL 1138
-"Invalid use of NULL value",
-#define ER_REGEXP_ERROR 1139
-"Got error '%-.64s' from regexp",
-#define ER_MIX_OF_GROUP_FUNC_AND_FIELDS 1140
-"Mixing of GROUP columns (MIN(),MAX(),COUNT()...) with no GROUP columns is illegal if there is no GROUP BY clause",
-#define ER_NONEXISTING_GRANT 1141
-"There is no such grant defined for user '%-.32s' on host '%-.64s'",
-#define ER_TABLEACCESS_DENIED_ERROR 1142
-"%-.16s command denied to user: '%-.32s'@'%-.64s' for table '%-.64s'",
-#define ER_COLUMNACCESS_DENIED_ERROR 1143
-"%-.16s command denied to user: '%-.32s'@'%-.64s' for column '%-.64s' in table '%-.64s'",
-#define ER_ILLEGAL_GRANT_FOR_TABLE 1144
-"Illegal GRANT/REVOKE command. Please consult the manual which privileges can be used",
-#define ER_GRANT_WRONG_HOST_OR_USER 1145
-"The host or user argument to GRANT is too long",
-#define ER_NO_SUCH_TABLE 1146
-"Table '%-.64s.%-.64s' doesn't exist",
-#define ER_NONEXISTING_TABLE_GRANT 1147
-"There is no such grant defined for user '%-.32s' on host '%-.64s' on table '%-.64s'",
-#define ER_NOT_ALLOWED_COMMAND 1148
-"The used command is not allowed with this MySQL version",
-#define ER_SYNTAX_ERROR 1149
-"You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use",
-#define ER_DELAYED_CANT_CHANGE_LOCK 1150
-"Delayed insert thread couldn't get requested lock for table %-.64s",
-#define ER_TOO_MANY_DELAYED_THREADS 1151
-"Too many delayed threads in use",
-#define ER_ABORTING_CONNECTION 1152
-"Aborted connection %ld to db: '%-.64s' user: '%-.32s' (%-.64s)",
-#define ER_NET_PACKET_TOO_LARGE 1153
-"Got a packet bigger than 'max_allowed_packet'",
-#define ER_NET_READ_ERROR_FROM_PIPE 1154
-"Got a read error from the connection pipe",
-#define ER_NET_FCNTL_ERROR 1155
-"Got an error from fcntl()",
-#define ER_NET_PACKETS_OUT_OF_ORDER 1156
-"Got packets out of order",
-#define ER_NET_UNCOMPRESS_ERROR 1157
-"Couldn't uncompress communication packet",
-#define ER_NET_READ_ERROR 1158
-"Got an error reading communication packets",
-#define ER_NET_READ_INTERRUPTED 1159
-"Got timeout reading communication packets",
-#define ER_NET_ERROR_ON_WRITE 1160
-"Got an error writing communication packets",
-#define ER_NET_WRITE_INTERRUPTED 1161
-"Got timeout writing communication packets",
-#define ER_TOO_LONG_STRING 1162
-"Result string is longer than max_allowed_packet",
-#define ER_TABLE_CANT_HANDLE_BLOB 1163
-"The used table type doesn't support BLOB/TEXT columns",
-#define ER_TABLE_CANT_HANDLE_AUTO_INCREMENT 1164
-"The used table type doesn't support AUTO_INCREMENT columns",
-#define ER_DELAYED_INSERT_TABLE_LOCKED 1165
-"INSERT DELAYED can't be used with table '%-.64s' because it is locked with LOCK TABLES",
-#define ER_WRONG_COLUMN_NAME 1166
-"Incorrect column name '%-.100s'",
-#define ER_WRONG_KEY_COLUMN 1167
-"The used storage engine can't index column '%-.64s'",
-#define ER_WRONG_MRG_TABLE 1168
-"All tables in the MERGE table are not identically defined",
-#define ER_DUP_UNIQUE 1169
-"Can't write, because of unique constraint, to table '%-.64s'",
-#define ER_BLOB_KEY_WITHOUT_LENGTH 1170
-"BLOB/TEXT column '%-.64s' used in key specification without a key length",
-#define ER_PRIMARY_CANT_HAVE_NULL 1171
-"All parts of a PRIMARY KEY must be NOT NULL; If you need NULL in a key, use UNIQUE instead",
-#define ER_TOO_MANY_ROWS 1172
-"Result consisted of more than one row",
-#define ER_REQUIRES_PRIMARY_KEY 1173
-"This table type requires a primary key",
-#define ER_NO_RAID_COMPILED 1174
-"This version of MySQL is not compiled with RAID support",
-#define ER_UPDATE_WITHOUT_KEY_IN_SAFE_MODE 1175
-"You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column",
-#define ER_KEY_DOES_NOT_EXITS 1176
-"Key '%-.64s' doesn't exist in table '%-.64s'",
-#define ER_CHECK_NO_SUCH_TABLE 1177
-"Can't open table",
-#define ER_CHECK_NOT_IMPLEMENTED 1178
-"The storage engine for the table doesn't support %s",
-#define ER_CANT_DO_THIS_DURING_AN_TRANSACTION 1179
-"You are not allowed to execute this command in a transaction",
-#define ER_ERROR_DURING_COMMIT 1180
-"Got error %d during COMMIT",
-#define ER_ERROR_DURING_ROLLBACK 1181
-"Got error %d during ROLLBACK",
-#define ER_ERROR_DURING_FLUSH_LOGS 1182
-"Got error %d during FLUSH_LOGS",
-#define ER_ERROR_DURING_CHECKPOINT 1183
-"Got error %d during CHECKPOINT",
-#define ER_NEW_ABORTING_CONNECTION 1184
-"Aborted connection %ld to db: '%-.64s' user: '%-.32s' host: `%-.64s' (%-.64s)",
-#define ER_DUMP_NOT_IMPLEMENTED 1185
-"The storage engine for the table does not support binary table dump",
-#define ER_FLUSH_MASTER_BINLOG_CLOSED 1186
-"Binlog closed, cannot RESET MASTER",
-#define ER_INDEX_REBUILD 1187
-"Failed rebuilding the index of dumped table '%-.64s'",
-#define ER_MASTER 1188
-"Error from master: '%-.64s'",
-#define ER_MASTER_NET_READ 1189
-"Net error reading from master",
-#define ER_MASTER_NET_WRITE 1190
-"Net error writing to master",
-#define ER_FT_MATCHING_KEY_NOT_FOUND 1191
-"Can't find FULLTEXT index matching the column list",
-#define ER_LOCK_OR_ACTIVE_TRANSACTION 1192
-"Can't execute the given command because you have active locked tables or an active transaction",
-#define ER_UNKNOWN_SYSTEM_VARIABLE 1193
-"Unknown system variable '%-.64s'",
-#define ER_CRASHED_ON_USAGE 1194
-"Table '%-.64s' is marked as crashed and should be repaired",
-#define ER_CRASHED_ON_REPAIR 1195
-"Table '%-.64s' is marked as crashed and last (automatic?) repair failed",
-#define ER_WARNING_NOT_COMPLETE_ROLLBACK 1196
-"Some non-transactional changed tables couldn't be rolled back",
-#define ER_TRANS_CACHE_FULL 1197
-"Multi-statement transaction required more than 'max_binlog_cache_size' bytes of storage. Increase this mysqld variable and try again",
-#define ER_SLAVE_MUST_STOP 1198
-"This operation cannot be performed with a running slave, run STOP SLAVE first",
-#define ER_SLAVE_NOT_RUNNING 1199
-"This operation requires a running slave, configure slave and do START SLAVE",
-#define ER_BAD_SLAVE 1200
-"The server is not configured as slave, fix in config file or with CHANGE MASTER TO",
-#define ER_MASTER_INFO 1201
-"Could not initialize master info structure, more error messages can be found in the MySQL error log",
-#define ER_SLAVE_THREAD 1202
-"Could not create slave thread, check system resources",
-#define ER_TOO_MANY_USER_CONNECTIONS 1203
-"User %-.64s has already more than 'max_user_connections' active connections",
-#define ER_SET_CONSTANTS_ONLY 1204
-"You may only use constant expressions with SET",
-#define ER_LOCK_WAIT_TIMEOUT 1205
-"Lock wait timeout exceeded; Try restarting transaction",
-#define ER_LOCK_TABLE_FULL 1206
-"The total number of locks exceeds the lock table size",
-#define ER_READ_ONLY_TRANSACTION 1207
-"Update locks cannot be acquired during a READ UNCOMMITTED transaction",
-#define ER_DROP_DB_WITH_READ_LOCK 1208
-"DROP DATABASE not allowed while thread is holding global read lock",
-#define ER_CREATE_DB_WITH_READ_LOCK 1209
-"CREATE DATABASE not allowed while thread is holding global read lock",
-#define ER_WRONG_ARGUMENTS 1210
-"Wrong arguments to %s",
-#define ER_NO_PERMISSION_TO_CREATE_USER 1211
-"'%-.32s'@'%-.64s' is not allowed to create new users",
-#define ER_UNION_TABLES_IN_DIFFERENT_DIR 1212
-"Incorrect table definition; all MERGE tables must be in the same database",
-#define ER_LOCK_DEADLOCK 1213
-"Deadlock found when trying to get lock; Try restarting transaction",
-#define ER_TABLE_CANT_HANDLE_FT 1214
-"The used table type doesn't support FULLTEXT indexes",
-#define ER_CANNOT_ADD_FOREIGN 1215
-"Cannot add foreign key constraint",
-#define ER_NO_REFERENCED_ROW 1216
-"Cannot add or update a child row: a foreign key constraint fails",
-#define ER_ROW_IS_REFERENCED 1217
-"Cannot delete or update a parent row: a foreign key constraint fails",
-#define ER_CONNECT_TO_MASTER 1218
-"Error connecting to master: %-.128s",
-#define ER_QUERY_ON_MASTER 1219
-"Error running query on master: %-.128s",
-#define ER_ERROR_WHEN_EXECUTING_COMMAND 1220
-"Error when executing command %s: %-.128s",
-#define ER_WRONG_USAGE 1221
-"Wrong usage of %s and %s",
-#define ER_WRONG_NUMBER_OF_COLUMNS_IN_SELECT 1222
-"The used SELECT statements have a different number of columns",
-#define ER_CANT_UPDATE_WITH_READLOCK 1223
-"Can't execute the query because you have a conflicting read lock",
-#define ER_MIXING_NOT_ALLOWED 1224
-"Mixing of transactional and non-transactional tables is disabled",
-#define ER_DUP_ARGUMENT 1225
-"Option '%s' used twice in statement",
-#define ER_USER_LIMIT_REACHED 1226
-"User '%-.64s' has exceeded the '%s' resource (current value: %ld)",
-#define ER_SPECIFIC_ACCESS_DENIED_ERROR 1227
-"Access denied. You need the %-.128s privilege for this operation",
-#define ER_LOCAL_VARIABLE 1228
-"Variable '%-.64s' is a SESSION variable and can't be used with SET GLOBAL",
-#define ER_GLOBAL_VARIABLE 1229
-"Variable '%-.64s' is a GLOBAL variable and should be set with SET GLOBAL",
-#define ER_NO_DEFAULT 1230
-"Variable '%-.64s' doesn't have a default value",
-#define ER_WRONG_VALUE_FOR_VAR 1231
-"Variable '%-.64s' can't be set to the value of '%-.64s'",
-#define ER_WRONG_TYPE_FOR_VAR 1232
-"Wrong argument type to variable '%-.64s'",
-#define ER_VAR_CANT_BE_READ 1233
-"Variable '%-.64s' can only be set, not read",
-#define ER_CANT_USE_OPTION_HERE 1234
-"Wrong usage/placement of '%s'",
-#define 1235
-"This version of MySQL doesn't yet support '%s'",
-#define ER_MASTER_FATAL_ERROR_READING_BINLOG 1236
-"Got fatal error %d: '%-.128s' from master when reading data from binary log",
-#define ER_SLAVE_IGNORED_TABLE 1237
-"Slave SQL thread ignored the query because of replicate-*-table rules",
-#define ER_INCORRECT_GLOBAL_LOCAL_VAR 1238
-"Variable '%-.64s' is a %s variable",
-#define ER_WRONG_FK_DEF 1239
-"Wrong foreign key definition for '%-.64s': %s",
-#define ER_KEY_REF_DO_NOT_MATCH_TABLE_REF 1240
-"Key reference and table reference doesn't match",
-#define ER_OPERAND_COLUMNS 1241
-"Operand should contain %d column(s)",
-#define ER_SUBQUERY_NO_1_ROW 1242
-"Subquery returns more than 1 row",
-#define ER_UNKNOWN_STMT_HANDLER 1243
-"Unknown prepared statement handler (%ld) given to %s",
-#define ER_CORRUPT_HELP_DB 1244
-"Help database is corrupt or does not exist",
-#define ER_CYCLIC_REFERENCE 1245
-"Cyclic reference on subqueries",
-#define ER_AUTO_CONVERT 1246
-"Converting column '%s' from %s to %s",
-#define ER_ILLEGAL_REFERENCE 1247
-"Reference '%-.64s' not supported (%s)",
-#define ER_DERIVED_MUST_HAVE_ALIAS 1248
-"Every derived table must have it's own alias",
-#define ER_SELECT_REDUCED 1249
-"Select %u was reduced during optimisation",
-#define ER_TABLENAME_NOT_ALLOWED_HERE 1250
-"Table '%-.64s' from one of SELECT's can not be used in %-.32s",
-#define ER_NOT_SUPPORTED_AUTH_MODE 1251
-"Client does not support authentication protocol requested by server; consider upgrading MySQL client",
-#define ER_SPATIAL_CANT_HAVE_NULL 1252
-"All parts of a SPATIAL KEY must be NOT NULL",
-#define ER_COLLATION_CHARSET_MISMATCH 1253
-"COLLATION '%s' is not valid for CHARACTER SET '%s'",
-#define ER_SLAVE_WAS_RUNNING 1254
-"Slave is already running",
-#define ER_SLAVE_WAS_NOT_RUNNING 1255
-"Slave has already been stopped",
-#define ER_TOO_BIG_FOR_UNCOMPRESS 1256
-"Too big size of uncompressed data. The maximum size is %d. (probably, length of uncompressed data was corrupted)",
-#define ER_ZLIB_Z_MEM_ERROR 1257
-"ZLIB: Not enough memory",
-#define ER_ZLIB_Z_BUF_ERROR 1258
-"ZLIB: Not enough room in the output buffer (probably, length of uncompressed data was corrupted)",
-#define ER_ZLIB_Z_DATA_ERROR 1259
-"ZLIB: Input data corrupted",
-#define ER_CUT_VALUE_GROUP_CONCAT 1260
-"%d line(s) was(were) cut by group_concat()",
-#define ER_WARN_TOO_FEW_RECORDS 1261
-"Row %ld doesn't contain data for all columns",
-#define ER_WARN_TOO_MANY_RECORDS 1262
-"Row %ld was truncated; It contained more data than there were input columns",
-#define ER_WARN_NULL_TO_NOTNULL 1263
-"Data truncated, NULL supplied to NOT NULL column '%s' at row %ld",
-#define ER_WARN_DATA_OUT_OF_RANGE 1264
-"Data truncated, out of range for column '%s' at row %ld",
-#define ER_WARN_DATA_TRUNCATED 1265
-"Data truncated for column '%s' at row %ld",
-#define ER_WARN_USING_OTHER_HANDLER 1266
-"Using storage engine %s for table '%s'",
-#define ER_CANT_AGGREGATE_2COLLATIONS 1267
-"Illegal mix of collations (%s,%s) and (%s,%s) for operation '%s'",
-#define ER_HANDLE_USER 1268
-"Operation %s failed for %d of the requested users",
-#define ER_REVOKE_GRANTS 1269
-"Can't revoke all privileges, grant for one or more of the requested users",
-#define ER_CANT_AGGREGATE_3COLLATIONS 1270
-"Illegal mix of collations (%s,%s), (%s,%s), (%s,%s) for operation '%s'",
-#define ER_CANT_AGGREGATE_NCOLLATIONS 1271
-"Illegal mix of collations for operation '%s'",
-#define ER_VARIABLE_IS_NOT_STRUCT 1272
-"Variable '%-.64s' is not a variable component (Can't be used as XXXX.variable_name)",
-#define ER_UNKNOWN_COLLATION 1273
-"Unknown collation: '%-.64s'",
-#define ER_SLAVE_IGNORED_SSL_PARAMS 1274
-"SSL parameters in CHANGE MASTER are ignored because this MySQL slave was compiled without SSL support; they can be used later when MySQL slave with SSL will be started",
-#define ER_SERVER_IS_IN_SECURE_AUTH_MODE 1275
-"Server is running in --secure-auth mode, but '%s'@'%s' has a password in the old format; please change the password to the new format",
-#define ER_WARN_FIELD_RESOLVED 1276
-"Field or reference '%-.64s%s%-.64s%s%-.64s' of SELECT #%d was resolved in SELECT #%d",
-#define ER_BAD_SLAVE_UNTIL_COND 1277
-"Wrong parameter or combination of parameters for START SLAVE UNTIL",
-#define ER_MISSING_SKIP_SLAVE 1278
-"It is recommended to use --skip-slave-start when doing step-by-step replication with START SLAVE UNTIL. Otherwise you will get problems if you get an unexpected slave's mysqld restart",
-#define ER_UNTIL_COND_IGNORED 1279
-"SQL thread is not to be started so UNTIL options are ignored",
-#define ER_WRONG_NAME_FOR_INDEX 1280
-"Incorrect index name '%-.100s'",
-#define ER_WRONG_NAME_FOR_CATALOG 1281
-"Incorrect catalog name '%-.100s'",
-#define ER_WARN_QC_RESIZE 1282
-"Query cache failed to set size %lu, new query cache size is %lu",
-#define ER_BAD_FT_COLUMN 1283
-"Column '%-.64s' cannot be part of FULLTEXT index",
-#define ER_UNKNOWN_KEY_CACHE 1284
-"Unknown key cache '%-.100s'",
-#define ER_WARN_HOSTNAME_WONT_WORK 1285
-"MySQL is started in --skip-name-resolve mode. You need to restart it without this switch for this grant to work",
-#define ER_UNKNOWN_STORAGE_ENGINE 1286
-"Unknown table engine '%s'",
-#define ER_WARN_DEPRECATED_SYNTAX 1287
-"'%s' is deprecated, use '%s' instead",
-#define ER_NON_UPDATABLE_TABLE 1288
-"The target table %-.100s of the %s is not updatable",
-#define ER_FEATURE_DISABLED 1289
-"The '%s' feature was disabled; you need MySQL built with '%s' to have it working",
-#define ER_OPTION_PREVENTS_STATEMENT 1290
-"The MySQL server is running with the %s option so it cannot execute this statement",
-#define ER_DUPLICATED_VALUE_IN_TYPE 1291
-"Column '%-.100s' has duplicated value '%-.64s' in %s"
-#define ER_TRUNCATED_WRONG_VALUE 1292
-"Truncated wrong %-.32s value: '%-.128s'"
-#define ER_TOO_MUCH_AUTO_TIMESTAMP_COLS 1293
-"Incorrect table definition; There can only be one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause"
-#define ER_INVALID_ON_UPDATE 1294
-"Invalid ON UPDATE clause for '%-.64s' field",
-#define ER_UNSUPPORTED_PS 1295
-"This command is not supported in the prepared statement protocol yet",
-#define ER_CANT_CREATE_USER_WITH_GRANT 1296
-"You are not allowed to create a user with GRANT"
diff --git a/Docs/reservedwords.texi b/Docs/reservedwords.texi
deleted file mode 100644
index a6dddfe9a7a..00000000000
--- a/Docs/reservedwords.texi
+++ /dev/null
@@ -1,14 +0,0 @@
-@c This is a placeholder file for the autogenerated MySQL reserved
-@c word list "reservedwords.texi", which is being included in
-@c manual.texi when building the manual.
-@c
-@c This file will be replaced with the actual reserved word list
-@c from the "mysqldoc" BK source tree when building the official
-@c source distribution.
-@c
-@c Please note, that the manual is now maintained in a separate
-@c "mysqldoc" BitKeeper tree! See
-@c
-@c http://www.mysql.com/doc/en/Installing_source_tree.html
-@c
-@c for more info on how to work with the MySQL BK source trees.