summaryrefslogtreecommitdiff
path: root/manual
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>1997-08-05 23:36:21 +0000
committerUlrich Drepper <drepper@redhat.com>1997-08-05 23:36:21 +0000
commit044b16f4e9ae773187f4fee8a9a0a54f9a51f13f (patch)
tree58bc41e16535e0d0f61d51e6af15ce4128864fc9 /manual
parentc59a94711c6a9d38811b828863076f39000831b4 (diff)
update for 2.0.5pre1
Diffstat (limited to 'manual')
-rw-r--r--manual/.cvsignore4
-rw-r--r--manual/Makefile26
-rw-r--r--manual/dir16
-rw-r--r--manual/libc.texinfo14
-rw-r--r--manual/maint.texi2
-rw-r--r--manual/socket.texi184
-rw-r--r--manual/texinfo.tex276
7 files changed, 412 insertions, 110 deletions
diff --git a/manual/.cvsignore b/manual/.cvsignore
index 146fd188bf..7c305176da 100644
--- a/manual/.cvsignore
+++ b/manual/.cvsignore
@@ -8,5 +8,5 @@ glibc-*
*.toc *.aux *.log
*.cp *.cps *.fn *.fns *.vr *.vrs *.tp *.tps *.ky *.kys *.pg *.pgs
-chapters chapters-incl summary.texi stamp-*
-distinfo
+chapters chapters-incl1 chapters-incl2 summary.texi stamp-*
+distinfo dir-add.texi
diff --git a/manual/Makefile b/manual/Makefile
index c99f4974a8..056ec08135 100644
--- a/manual/Makefile
+++ b/manual/Makefile
@@ -23,11 +23,13 @@ export subdir := $(subdir)
# We need GNU awk for the xtract-typefun script.
GAWK = gawk
+# Allow override
+INSTALL_INFO = install-info
.PHONY: all dvi info
all: dvi info
dvi: libc.dvi
-info: libc.info
+info: libc.info dir-add.info
# Get glibc's configuration info.
ifneq (,$(wildcard ../Makeconfig))
@@ -66,8 +68,11 @@ stamp-summary: summary.awk $(chapters) $(chapters-incl)
# Generate a file which can be added to the `dir' content to provide direct
# access to the documentation of the function, variables, and other
# definitions.
-dir-add.texi: xtract-typefun.awk $(chapters)
- $(GAWK) -f $^ | sort > $@.new;
+dir-add.texi: xtract-typefun.awk $(chapters) $(chapters-incl)
+ (echo "@dircategory GNU C library functions"; \
+ echo "@direntry"; \
+ $(GAWK) -f $^ | sort; \
+ echo "@end direntry";) > $@.new
mv -f $@.new $@
# Generate Texinfo files from the C source for the example programs.
@@ -75,7 +80,7 @@ dir-add.texi: xtract-typefun.awk $(chapters)
sed -e 's,[{}],@&,g' \
-e 's,/\*\(@.*\)\*/,\1,g' \
-e 's,/\* *,/* @r{,g' -e 's, *\*/,} */,' \
- -e 's/\(@[a-z][a-z]*\)@{\([^}]*\)@}/\1{\2}/'\
+ -e 's/\(@[a-z][a-z]*\)@{\([^}]*\)@}/\1{\2}/g'\
$< | expand > $@.new
mv -f $@.new $@
@@ -89,7 +94,7 @@ distribute = $(minimal-dist) \
$(minimal-dist))) \
libc.info* libc.?? libc.??s texinfo.tex summary.texi \
stamp-summary chapters chapters-incl \
- xtract-typefun.awk
+ xtract-typefun.awk dir-add.texi dir-add.info dir
export distribute := $(distribute)
tar-it = tar chovf $@ $^
@@ -118,18 +123,23 @@ glibc-doc-$(edition).tar: $(doc-only-dist) $(distribute)
.PHONY: mostlyclean distclean realclean clean
mostlyclean:
- -rm -f libc.dvi libc.info*
+ -rm -f libc.dvi libc.info* dir-add.info
clean: mostlyclean
distclean: clean
indices = cp fn pg tp vr ky
realclean: distclean
-rm -f chapters chapters-incl summary.texi stamp-summary *.c.texi
-rm -f $(foreach index,$(indices),libc.$(index) libc.$(index)s)
- -rm -f libc.log libc.aux libc.toc
+ -rm -f libc.log libc.aux libc.toc dir-add.texi
.PHONY: install subdir_install installdirs install-data
install-data subdir_install: install
-install: $(inst_infodir)/libc.info
+install: $(inst_infodir)/libc.info dir-add.info
+ @if $(SHELL) -c '$(INSTALL_INFO) --version' >/dev/null 2>&1; then \
+ test -f $(inst_infodir)/dir || cp dir $(inst_infodir);\
+ $(INSTALL_INFO) --info-dir=$(inst_infodir) $(inst_infodir)/libc.info;\
+ $(INSTALL_INFO) --info-dir=$(inst_infodir) dir-add.info;\
+ else : ; fi
# Catchall implicit rule for other installation targets from the parent.
install-%: ;
diff --git a/manual/dir b/manual/dir
new file mode 100644
index 0000000000..f5920b12be
--- /dev/null
+++ b/manual/dir
@@ -0,0 +1,16 @@
+$Id$
+This is the file .../info/dir, which contains the topmost node of the
+Info hierarchy. The first time you invoke Info you start off
+looking at that node, which is (dir)Top.
+
+File: dir Node: Top This is the top of the INFO tree
+
+ This (the Directory node) gives a menu of major topics.
+ Typing "q" exits, "?" lists all Info commands, "d" returns here,
+ "h" gives a primer for first-timers,
+ "mEmacs<Return>" visits the Emacs topic, etc.
+
+ In Emacs, you can click mouse button 2 on a menu item or cross reference
+ to select it.
+
+* Menu:
diff --git a/manual/libc.texinfo b/manual/libc.texinfo
index 50d42b53d6..02fb7487fd 100644
--- a/manual/libc.texinfo
+++ b/manual/libc.texinfo
@@ -3,12 +3,18 @@
@setfilename libc.info
@settitle The GNU C Library
@setchapternewpage odd
-@comment %**end of header (This is for running Texinfo on a region.)
+
+@comment Tell install-info what to do.
+@dircategory GNU libraries
+@direntry
+* Libc: (libc). C library.
+@end direntry
@c This tells texinfo.tex to use the real section titles in xrefs in
@c place of the node name, when no section title is explicitly given.
@set xref-automatic-section-title
@smallbook
+@comment %**end of header (This is for running Texinfo on a region.)
@c sold 0.06/1.09, print run out 21may96
@set EDITION 0.07 DRAFT
@@ -22,7 +28,7 @@ This file documents the GNU C library.
This is Edition @value{EDITION}, last updated @value{UPDATED},
of @cite{The GNU C Library Reference Manual}, for Version @value{VERSION}.
-Copyright (C) 1993, '94, '95, '96 Free Software Foundation, Inc.
+Copyright (C) 1993, '94, '95, '96, '97 Free Software Foundation, Inc.
Permission is granted to make and distribute verbatim copies of
this manual provided the copyright notice and this permission notice
@@ -68,7 +74,7 @@ Foundation.
@center for version @value{VERSION}
@page
@vskip 0pt plus 1filll
-Copyright @copyright{} 1993, '94, '95, '96 Free Software Foundation, Inc.
+Copyright @copyright{} 1993, '94, '95, '96, '97 Free Software Foundation, Inc.
@sp 2
Published by the Free Software Foundation @*
59 Temple Place -- Suite 330, @*
@@ -508,7 +514,7 @@ Socket Addresses
Internet Domain
-* Internet Address Format:: How socket addresses are specified in the
+* Internet Address Formats:: How socket addresses are specified in the
Internet namespace.
* Host Addresses:: All about host addresses of Internet hosts.
* Protocols Database:: Referring to protocols by name.
diff --git a/manual/maint.texi b/manual/maint.texi
index 38d9786b9f..9c542a3ce3 100644
--- a/manual/maint.texi
+++ b/manual/maint.texi
@@ -223,7 +223,6 @@ following patterns:
@smallexample
alpha-@var{anything}-linux
-alpha-@var{anything}-linuxecoff
i@var{x}86-@var{anything}-gnu
i@var{x}86-@var{anything}-linux
m68k-@var{anything}-linux
@@ -234,6 +233,7 @@ versions) used to run on the following configurations:
@smallexample
alpha-dec-osf1
+alpha-@var{anything}-linuxecoff
i@var{x}86-@var{anything}-bsd4.3
i@var{x}86-@var{anything}-isc2.2
i@var{x}86-@var{anything}-isc3.@var{n}
diff --git a/manual/socket.texi b/manual/socket.texi
index 91084be16d..0353eb7ed3 100644
--- a/manual/socket.texi
+++ b/manual/socket.texi
@@ -128,6 +128,28 @@ protocol} which you can request by specifying 0 as the protocol
number. And that's what you should normally do---use the default.
@end itemize
+Throughout the following description at various places
+variables/parameters to denote sizes are required. And here the trouble
+starts. In the first implementations the type of these variables was
+simply @code{int}. This type was on almost all machines of this time 32
+bits wide and so a de-factor standard required 32 bit variables. This
+is important since references to variables of this type are passed to
+the kernel.
+
+But now the POSIX people came and unified the interface with their words
+"all size values are of type @code{size_t}". But on 64 bit machines
+@code{size_t} is 64 bits wide and so variable references are not anymore
+possible.
+
+A solution provides the Unix98 specification which finally introduces a
+type @code{socklen_t}. This type is used in all of the cases in
+previously changed to use @code{size_t}. The only requirement of this
+type is that it is an unsigned type of at least 32 bits. Therefore,
+implementations which require references to 32 bit variables be passed
+can be as happy as implementations which right from the start of 64 bit
+values.
+
+
@node Communication Styles
@section Communication Styles
@@ -323,7 +345,13 @@ This is a synonym for @code{AF_FILE}, for compatibility.
@vindex AF_INET
This designates the address format that goes with the Internet
namespace. (@code{PF_INET} is the name of that namespace.)
-@xref{Internet Address Format}.
+@xref{Internet Address Formats}.
+
+@comment sys/socket.h
+@comment IPv6 Basic API
+@item AF_INET6
+This is similar to @code{AF_INET}, but refers to the IPv6 protocol.
+(@code{PF_INET6} is the name of the corresponding namespace.)
@comment sys/socket.h
@comment BSD
@@ -352,7 +380,7 @@ For examples of use, see @ref{File Namespace}, or see @ref{Inet Example}.
@comment sys/socket.h
@comment BSD
-@deftypefun int bind (int @var{socket}, struct sockaddr *@var{addr}, size_t @var{length})
+@deftypefun int bind (int @var{socket}, struct sockaddr *@var{addr}, socklen_t @var{length})
The @code{bind} function assigns an address to the socket
@var{socket}. The @var{addr} and @var{length} arguments specify the
address; the detailed format of the address depends on the namespace.
@@ -400,7 +428,7 @@ Internet socket. The prototype for this function is in the header file
@comment sys/socket.h
@comment BSD
-@deftypefun int getsockname (int @var{socket}, struct sockaddr *@var{addr}, size_t *@var{length-ptr})
+@deftypefun int getsockname (int @var{socket}, struct sockaddr *@var{addr}, socklen_t *@var{length-ptr})
The @code{getsockname} function returns information about the
address of the socket @var{socket} in the locations specified by the
@var{addr} and @var{length-ptr} arguments. Note that the
@@ -566,7 +594,7 @@ A socket address for the Internet namespace includes the following components:
@item
The address of the machine you want to connect to. Internet addresses
can be specified in several ways; these are discussed in @ref{Internet
-Address Format}, @ref{Host Addresses}, and @ref{Host Names}.
+Address Formats}, @ref{Host Addresses}, and @ref{Host Names}.
@item
A port number for that machine. @xref{Ports}.
@@ -577,7 +605,7 @@ canonical format called @dfn{network byte order}. @xref{Byte Order},
for information about this.
@menu
-* Internet Address Format:: How socket addresses are specified in the
+* Internet Address Formats:: How socket addresses are specified in the
Internet namespace.
* Host Addresses:: All about host addresses of internet host.
* Protocols Database:: Referring to protocols by name.
@@ -589,16 +617,17 @@ for information about this.
* Inet Example:: Putting it all together.
@end menu
-@node Internet Address Format
-@subsection Internet Socket Address Format
+@node Internet Address Formats
+@subsection Internet Socket Address Formats
-In the Internet namespace, a socket address consists of a host address
+In the Internet namespace, for both IPv4 (@code{AF_INET}) and IPv6
+(@code{AF_INET6}), a socket address consists of a host address
and a port on that host. In addition, the protocol you choose serves
effectively as a part of the address because local port numbers are
meaningful only within a particular protocol.
-The data type for representing socket addresses in the Internet namespace
-is defined in the header file @file{netinet/in.h}.
+The data types for representing socket addresses in the Internet namespace
+are defined in the header file @file{netinet/in.h}.
@pindex netinet/in.h
@comment netinet/in.h
@@ -627,13 +656,39 @@ When you call @code{bind} or @code{getsockname}, you should specify
@code{sizeof (struct sockaddr_in)} as the @var{length} parameter if
you are using an Internet namespace socket address.
+@deftp {Data Type} {struct sockaddr_in6}
+This is the data type used to represent socket addresses in the IPv6
+namespace. It has the following members:
+
+@table @code
+@item short int sin6_family
+This identifies the address family or format of the socket address.
+You should store the value of @code{AF_INET6} in this member.
+@xref{Socket Addresses}.
+
+@item struct in6_addr sin6_addr
+This is the IPv6 address of the host machine. @xref{Host
+Addresses}, and @ref{Host Names}, for how to get a value to store
+here.
+
+@item uint32_t sin6_flowinfo
+This is a currently unimplemented field.
+
+@item uint16_t sin6_port
+This is the port number. @xref{Ports}.
+
+@end table
+@end deftp
+
@node Host Addresses
@subsection Host Addresses
Each computer on the Internet has one or more @dfn{Internet addresses},
numbers which identify that computer among all those on the Internet.
-Users typically write numeric host addresses as sequences of four
-numbers, separated by periods, as in @samp{128.52.46.32}.
+Users typically write IPv4 numeric host addresses as sequences of four
+numbers, separated by periods, as in @samp{128.52.46.32}, and IPv6
+numeric host addresses as sequences of up to eight numbers seperated by
+colons, as in @samp{5f03:1200:836f:c100::1}.
Each computer also has one or more @dfn{host names}, which are strings
of words separated by periods, as in @samp{churchy.gnu.ai.mit.edu}.
@@ -660,6 +715,9 @@ Each computer on the Internet has one or more Internet addresses,
numbers which identify that computer among all those on the Internet.
@end ifinfo
+@c I think this whole section could possibly be removed. It is slightly
+@c misleading these days.
+
@cindex network number
@cindex local network address number
An Internet host address is a number containing four bytes of data.
@@ -747,7 +805,7 @@ host address number as an @code{unsigned long int}.
@comment netinet/in.h
@comment BSD
-@deftypevr Macro {unsigned long int} INADDR_LOOPBACK
+@deftypevr Macro {unsigned int} INADDR_LOOPBACK
You can use this constant to stand for ``the address of this machine,''
instead of finding its actual address. It is the Internet address
@samp{127.0.0.1}, which is usually called @samp{localhost}. This
@@ -759,7 +817,7 @@ talking to itself.
@comment netinet/in.h
@comment BSD
-@deftypevr Macro {unsigned long int} INADDR_ANY
+@deftypevr Macro {unsigned int} INADDR_ANY
You can use this constant to stand for ``any incoming address,'' when
binding to an address. @xref{Setting Address}. This is the usual
address to give in the @code{sin_addr} member of @w{@code{struct
@@ -768,17 +826,42 @@ sockaddr_in}} when you want to accept Internet connections.
@comment netinet/in.h
@comment BSD
-@deftypevr Macro {unsigned long int} INADDR_BROADCAST
+@deftypevr Macro {unsigned int} INADDR_BROADCAST
This constant is the address you use to send a broadcast message.
@c !!! broadcast needs further documented
@end deftypevr
@comment netinet/in.h
@comment BSD
-@deftypevr Macro {unsigned long int} INADDR_NONE
+@deftypevr Macro {unsigned int} INADDR_NONE
This constant is returned by some functions to indicate an error.
@end deftypevr
+@comment netinet/in.h
+@comment IPv6 basic API
+@deftp {Data Type} {struct in6_addr}
+This data type is used to store an IPv6 address. It stores 128 bits of
+data, which can be accessed (via a union) in a variety of ways.
+@end deftp
+
+@comment netinet/in.h
+@comment IPv6 basic API
+@deftypevr Constant {struct in6_addr} in6addr_loopback.
+This constant is the IPv6 address @samp{::1}, the loopback address. See
+above for a description of what this means. The macro
+@code{IN6ADDR_LOOPBACK_INIT} is provided to allow you to initialise your
+own variables to this value.
+@end deftypevr
+
+@comment netinet/in.h
+@comment IPv6 basic API
+@deftypevr Constant {struct in6_addr} in6addr_any
+This constant is the IPv6 address @samp{::}, the unspecified address. See
+above for a description of what this means. The macro
+@code{IN6ADDR_ANY_INIT} is provided to allow you to initialise your
+own variables to this value.
+@end deftypevr
+
@node Host Address Functions
@subsubsection Host Address Functions
@@ -791,7 +874,7 @@ local-address-within-network numbers in host byte order.
@comment arpa/inet.h
@comment BSD
-@deftypefun {int} inet_aton (const char *@var{name}, struct in_addr *@var{addr})
+@deftypefun int inet_aton (const char *@var{name}, struct in_addr *@var{addr})
This function converts the Internet host address @var{name}
from the standard numbers-and-dots notation into binary data and stores
it in the @code{struct in_addr} that @var{addr} points to.
@@ -826,6 +909,10 @@ string in the standard numbers-and-dots notation. The return value is
a pointer into a statically-allocated buffer. Subsequent calls will
overwrite the same buffer, so you should copy the string if you need
to save it.
+
+In multi-threaded programs each thread has an own statically-allocated
+buffer. But still subsequent calls of @code{inet_ntoa} in the same
+thread will overwrite the result of the last call.
@end deftypefun
@comment arpa/inet.h
@@ -850,6 +937,28 @@ This function returns the network number part of the Internet host
address @var{addr}.
@end deftypefun
+@comment arpa/inet.h
+@comment IPv6 basic API
+@deftypefun int inet_pton (int @var{af}, const char *@var{cp}, void *@var{buf})
+This function converts an Internet address (either IPv4 or IPv6) from
+presentation (textual) to network (binary) format. @var{af} should be
+either @code{AF_INET} or @code{AF_INET6}, as appropriate for the type of
+address being converted. @var{cp} is a pointer to the input string, and
+@var{buf} is a pointer to a buffer for the result. It is the caller's
+responsibility to make sure the buffer is large enough.
+@end deftypefun
+
+@comment arpa/inet.h
+@comment IPv6 basic API
+@deftypefun {char *} inet_ntop (int @var{af}, const void *@var{cp}, char *@var{buf}, size_t @var{len})
+This function converts an Internet address (either IPv4 or IPv6) from
+network (binary) to presentation (textual) form. @var{af} should be
+either @code{AF_INET} or @code{AF_INET6}, as appropriate. @var{cp} is a
+pointer to the address to be converted. @var{buf} should be a pointer
+to a buffer to hold the result, and @var{len} is the length of this
+buffer. The return value from the function will be this buffer address.
+@end deftypefun
+
@node Host Names
@subsubsection Host Names
@cindex hosts database
@@ -887,11 +996,12 @@ These are alternative names for the host, represented as a null-terminated
vector of strings.
@item int h_addrtype
-This is the host address type; in practice, its value is always
-@code{AF_INET}. In principle other kinds of addresses could be
-represented in the data base as well as Internet addresses; if this were
-done, you might find a value in this field other than @code{AF_INET}.
-@xref{Socket Addresses}.
+This is the host address type; in practice, its value is always either
+@code{AF_INET} or @code{AF_INET6}, with the latter being used for IPv6
+hosts. In principle other kinds of addresses could be represented in
+the data base as well as Internet addresses; if this were done, you
+might find a value in this field other than @code{AF_INET} or
+@code{AF_INET6}. @xref{Socket Addresses}.
@item int h_length
This is the length, in bytes, of each address.
@@ -913,10 +1023,12 @@ implicit assumption that you can convert this to a @code{struct in_addr} or
an @code{unsigned long int}. Host addresses in a @code{struct hostent}
structure are always given in network byte order; see @ref{Byte Order}.
-You can use @code{gethostbyname} or @code{gethostbyaddr} to search the
-hosts database for information about a particular host. The information
-is returned in a statically-allocated structure; you must copy the
-information if you need to save it across calls.
+You can use @code{gethostbyname}, @code{gethostbyname2} or
+@code{gethostbyaddr} to search the hosts database for information about
+a particular host. The information is returned in a
+statically-allocated structure; you must copy the information if you
+need to save it across calls. You can also use @code{getaddrinfo} and
+@code{getnameinfo} to obtain this information.
@comment netdb.h
@comment BSD
@@ -926,6 +1038,14 @@ named @var{name}. If the lookup fails, it returns a null pointer.
@end deftypefun
@comment netdb.h
+@comment IPv6 Basic API
+@deftypefun {struct hostent *} gethostbyname2 (const char *@var{name}, int @var{af})
+The @code{gethostbyname2} function is like @code{gethostbyname}, but
+allows the caller to specify the desired address family (e.g.@:
+@code{AF_INET} or @code{AF_INET6}) for the result.
+@end deftypefun
+
+@comment netdb.h
@comment BSD
@deftypefun {struct hostent *} gethostbyaddr (const char *@var{addr}, int @var{length}, int @var{format})
The @code{gethostbyaddr} function returns information about the host
@@ -1590,7 +1710,7 @@ program must do, using the @code{connect} function, which is declared in
@comment sys/socket.h
@comment BSD
-@deftypefun int connect (int @var{socket}, struct sockaddr *@var{addr}, size_t @var{length})
+@deftypefun int connect (int @var{socket}, struct sockaddr *@var{addr}, socklen_t @var{length})
The @code{connect} function initiates a connection from the socket
with file descriptor @var{socket} to the socket whose address is
specified by the @var{addr} and @var{length} arguments. (This socket
@@ -1735,7 +1855,7 @@ queue.
@comment sys/socket.h
@comment BSD
-@deftypefun int accept (int @var{socket}, struct sockaddr *@var{addr}, size_t *@var{length-ptr})
+@deftypefun int accept (int @var{socket}, struct sockaddr *@var{addr}, socklen_t *@var{length-ptr})
This function is used to accept a connection request on the server
socket @var{socket}.
@@ -2229,7 +2349,7 @@ more information about the @code{connect} function.
@comment sys/socket.h
@comment BSD
-@deftypefun int sendto (int @var{socket}, void *@var{buffer}. size_t @var{size}, int @var{flags}, struct sockaddr *@var{addr}, size_t @var{length})
+@deftypefun int sendto (int @var{socket}, void *@var{buffer}. size_t @var{size}, int @var{flags}, struct sockaddr *@var{addr}, socklen_t @var{length})
The @code{sendto} function transmits the data in the @var{buffer}
through the socket @var{socket} to the destination address specified
by the @var{addr} and @var{length} arguments. The @var{size} argument
@@ -2258,7 +2378,7 @@ also tells you where it was sent from. This function is declared in
@comment sys/socket.h
@comment BSD
-@deftypefun int recvfrom (int @var{socket}, void *@var{buffer}, size_t @var{size}, int @var{flags}, struct sockaddr *@var{addr}, size_t *@var{length-ptr})
+@deftypefun int recvfrom (int @var{socket}, void *@var{buffer}, size_t @var{size}, int @var{flags}, struct sockaddr *@var{addr}, socklen_t *@var{length-ptr})
The @code{recvfrom} function reads one packet from the socket
@var{socket} into the buffer @var{buffer}. The @var{size} argument
specifies the maximum number of bytes to be read.
@@ -2485,7 +2605,7 @@ They are declared in @file{sys/socket.h}.
@comment sys/socket.h
@comment BSD
-@deftypefun int getsockopt (int @var{socket}, int @var{level}, int @var{optname}, void *@var{optval}, size_t *@var{optlen-ptr})
+@deftypefun int getsockopt (int @var{socket}, int @var{level}, int @var{optname}, void *@var{optval}, socklen_t *@var{optlen-ptr})
The @code{getsockopt} function gets information about the value of
option @var{optname} at level @var{level} for socket @var{socket}.
@@ -2515,7 +2635,7 @@ The @var{optname} doesn't make sense for the given @var{level}.
@comment sys/socket.h
@comment BSD
-@deftypefun int setsockopt (int @var{socket}, int @var{level}, int @var{optname}, void *@var{optval}, size_t @var{optlen})
+@deftypefun int setsockopt (int @var{socket}, int @var{level}, int @var{optname}, void *@var{optval}, socklen_t @var{optlen})
This function is used to set the socket option @var{optname} at level
@var{level} for socket @var{socket}. The value of the option is passed
in the buffer @var{optval}, which has size @var{optlen}.
diff --git a/manual/texinfo.tex b/manual/texinfo.tex
index e1a23e5c1a..6909ef3ac6 100644
--- a/manual/texinfo.tex
+++ b/manual/texinfo.tex
@@ -1,5 +1,5 @@
%% TeX macros to handle Texinfo files.
-%% $Id: texinfo.tex,v 2.196.2.1 1997/05/26 20:55:31 drepper Exp $
+%% $Id: texinfo.tex,v 2.196.2.2 1997/08/05 23:34:23 drepper Exp $
% Copyright (C) 1985, 86, 88, 90, 91, 92, 93,
% 94, 95, 96, 97 Free Software Foundation, Inc.
@@ -36,7 +36,7 @@
% This automatically updates the version number based on RCS.
\def\deftexinfoversion$#1: #2 ${\def\texinfoversion{#2}}
-\deftexinfoversion$Revision: 2.196.2.1 $
+\deftexinfoversion$Revision: 2.196.2.2 $
\message{Loading texinfo package [Version \texinfoversion]:}
% If in a .fmt file, print the version number
@@ -101,6 +101,7 @@
\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
@@ -185,7 +186,13 @@
%
\unvbox\headlinebox
\pagebody{#1}%
- \unvbox\footlinebox
+ \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
%
\ifcropmarks
\egroup % end of \vbox\bgroup
@@ -729,10 +736,11 @@ where each line of input produces a line of output.}
%
\def\ignore{\doignore{ignore}}
-% Also ignore @ifinfo, @ifhtml, @html, @menu, and @direntry text.
+% 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}}
@@ -759,6 +767,10 @@ where each line of input produces a line of output.}
% 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
+ %
% And now expand that command.
\doignoretext
}
@@ -850,7 +862,7 @@ where each line of input produces a line of output.}
\pretolerance = 10000
%
% Do not execute instructions in @tex
- \def\tex{\doignore{tex}}
+ \def\tex{\doignore{tex}}%
}
% @set VAR sets the variable VAR to an empty value.
@@ -926,11 +938,16 @@ where each line of input produces a line of output.}
\def\ifclearfail{\nestedignore{ifclear}}
\defineunmatchedend{ifclear}
-% @iftex always succeeds; we read the text following, through @end
-% iftex). But `@end iftex' should be valid only after an @iftex.
+% @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
@@ -1006,6 +1023,15 @@ where each line of input produces a line of output.}
\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.
}
@@ -1041,8 +1067,9 @@ where each line of input produces a line of output.}
% We don't need math for this one.
\def\ttsl{\tenttsl}
-%% Try out Computer Modern fonts at \magstephalf
-\let\mainmagstep=\magstephalf
+% 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').
@@ -1114,13 +1141,26 @@ where each line of input produces a line of output.}
\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{12}{\magstep2}
+\setfont\chapsf\sfbshape{17}{1000}
\let\chapbf=\chaprm
\setfont\chapsc\scbshape{10}{\magstep3}
\font\chapi=cmmi12 scaled \magstep2
@@ -1157,19 +1197,15 @@ where each line of input produces a line of output.}
\setfont\ssecit\itbshape{10}{1315}
\setfont\ssecsl\slbshape{10}{1315}
\setfont\ssectt\ttbshape{12}{\magstephalf}
-\setfont\ssecttsl\ttslshape{10}{\magstep1}
+\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 \magstep1
+\font\ssecsy=cmsy10 scaled 1315
% The smallcaps and symbol fonts should actually be scaled \magstep1.5,
% but that is not a standard magnification.
-% Fonts for title page:
-\setfont\titlerm\rmbshape{12}{\magstep3}
-\let\authorrm = \secrm
-
% 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
@@ -1194,6 +1230,13 @@ where each line of input produces a line of output.}
\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 #1}}
\def\chapfonts{%
\let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl
\let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc
@@ -1330,18 +1373,56 @@ where each line of input produces a line of output.}
% @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{\ttsl\look}}\fi
-\else{\tclose{\ttsl\look}}\fi}
+\else{\tclose{\kbdfont\look}}\fi
+\else{\tclose{\kbdfont\look}}\fi}
+
+% @url. Quotes do not seem necessary, so use \code.
+\let\url=\code
+
+% @uref (abbreviation for `urlref') takes an optional second argument
+% specifying the text to display. First (mandatory) arg is the url.
+% Perhaps eventually put in a hypertex \special here.
+%
+\def\uref#1{\urefxxx #1,,\finish}
+\def\urefxxx#1,#2,#3\finish{%
+ \setbox0 = \hbox{\ignorespaces #2}%
+ \ifdim\wd0 > 0pt
+ \unhbox0\ (\code{#1})%
+ \else
+ \code{#1}%
+ \fi
+}
-% @url, @email. Quotes do not seem necessary.
-\let\url=\code % perhaps include a hypertex \special eventually
% rms does not like the angle brackets --karl, 17may97.
+% So now @email is just like @uref.
%\def\email#1{$\langle${\tt #1}$\rangle$}
-\let\email=\code
+\let\email=\uref
% Check if we are currently using a typewriter font. Since all the
% Computer Modern typewriter fonts have zero interword stretch (and
@@ -1378,8 +1459,6 @@ where each line of input produces a line of output.}
\newskip\titlepagebottomglue \titlepagebottomglue = 2pc
% First the title page. Must do @settitle before @titlepage.
-\def\titlefont#1{{\titlerm #1}}
-
\newif\ifseenauthor
\newif\iffinishedtitlepage
@@ -1401,7 +1480,7 @@ where each line of input produces a line of output.}
%
% Now you can print the title using @title.
\def\title{\parsearg\titlezzz}%
- \def\titlezzz##1{\leftline{\titlefont{##1}}
+ \def\titlezzz##1{\leftline{\titlefonts\rm ##1}
% print a rule at the page bottom also.
\finishedtitlepagefalse
\vskip4pt \hrule height 4pt width \hsize \vskip4pt}%
@@ -1490,10 +1569,7 @@ where each line of input produces a line of output.}
\gdef\oddheadingyyy #1@|#2@|#3@|#4\finish{%
\global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
-\gdef\everyheadingxxx #1{\everyheadingyyy #1@|@|@|@|\finish}
-\gdef\everyheadingyyy #1@|#2@|#3@|#4\finish{%
-\global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}
-\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{%
@@ -1501,12 +1577,15 @@ where each line of input produces a line of output.}
\gdef\oddfootingxxx #1{\oddfootingyyy #1@|@|@|@|\finish}
\gdef\oddfootingyyy #1@|#2@|#3@|#4\finish{%
-\global\oddfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
+ \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{\everyfootingyyy #1@|@|@|@|\finish}
-\gdef\everyfootingyyy #1@|#2@|#3@|#4\finish{%
-\global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}
-\global\oddfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
+\gdef\everyfootingxxx#1{\oddfootingxxx{#1}\evenfootingxxx{#1}}
%
}% unbind the catcode of @.
@@ -1890,7 +1969,7 @@ July\or August\or September\or October\or November\or December\fi
\def\itemizeitem{%
\advance\itemno by 1
{\let\par=\endgraf \smallbreak}%
-\ifhmode \errmessage{\in hmode at itemizeitem}\fi
+\ifhmode \errmessage{In hmode at itemizeitem}\fi
{\parskip=0in \hskip 0pt
\hbox to 0pt{\hss \itemcontents\hskip \itemmargin}%
\vadjust{\penalty 1200}}%
@@ -2230,7 +2309,13 @@ width0pt\relax} \fi
%\def\char{\realbackslash char}%
\def\TeX{\realbackslash TeX}%
\def\dots{\realbackslash dots }%
-\def\copyright{\realbackslash copyright }%
+\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\dotless##1{\realbackslash dotless {##1}}%
@@ -2248,6 +2333,7 @@ width0pt\relax} \fi
\def\kbd##1{\realbackslash kbd {##1}}%
\def\dfn##1{\realbackslash dfn {##1}}%
\def\emph##1{\realbackslash emph {##1}}%
+\def\value##1{\realbackslash value {##1}}%
\unsepspaces
}
@@ -2682,6 +2768,12 @@ width0pt\relax} \fi
\def\print{\realbackslash print}%
\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\tt{\realbackslash tt}%
\def\bf{\realbackslash bf}%
@@ -3208,7 +3300,9 @@ width0pt\relax} \fi
\unnumbchapmacro{#1}\def\thischapter{}%
\begingroup % Set up to handle contents files properly.
\catcode`\\=0 \catcode`\{=1 \catcode`\}=2 \catcode`\@=11
- \catcode`\^=7 % to see ^^e4 as \"a etc. juha@piuha.ydi.vtt.fi
+ % 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.
}
@@ -3563,11 +3657,12 @@ width0pt\relax} \fi
%
\def\nonfillfinish{\afterenvbreak\endgroup}%
-% This macro is
\def\lisp{\begingroup
\nonfillstart
\let\Elisp = \nonfillfinish
\tt
+ % Make @kbd do something special, if requested.
+ \let\kbdfont\kbdexamplefont
\rawbackslash % have \ input char produce \ char from current font
\gobble
}
@@ -3685,16 +3780,17 @@ width0pt\relax} \fi
% 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 }
+\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 }
+ % 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\ }
%
@@ -3702,8 +3798,11 @@ width0pt\relax} \fi
} % 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`\(}} \def\clnr{{\sf\char`\)}} \def\ampnr{\&}
-\def\lbrb{{\bf\char`\[}} \def\rbrb{{\bf\char`\]}}
+\def\opnr{{\sf\char`\(}\global\advance\parencount by 1 }
+\def\clnr{{\sf\char`\)}\global\advance\parencount by -1 }
+\def\ampnr{\&}
+\def\lbrb{{\bf\char`\[}}
+\def\rbrb{{\bf\char`\]}}
% First, defname, which formats the header line itself.
% #1 should be the function name.
@@ -3880,7 +3979,7 @@ width0pt\relax} \fi
\hyphenchar\tensl=0
#1%
\hyphenchar\tensl=45
-\ifnum\parencount=0 \else \errmessage{unbalanced parens in @def arguments}\fi%
+\ifnum\parencount=0 \else \errmessage{Unbalanced parentheses in @def}\fi%
\interlinepenalty=10000
\advance\rightskip by 0pt plus 1fil
\endgraf\penalty 10000\vskip -\parskip\penalty 10000%
@@ -3981,6 +4080,7 @@ width0pt\relax} \fi
\def\defmacx #1 {\errmessage{@defmacx in invalid context}}
\def\defspecx #1 {\errmessage{@defspecx in invalid context}}
\def\deftypefnx #1 {\errmessage{@deftypefnx in invalid context}}
+\def\deftypemethodx #1 {\errmessage{@deftypemethodx in invalid context}}
\def\deftypeunx #1 {\errmessage{@deftypeunx in invalid context}}
% @defmethod, and so on
@@ -3996,6 +4096,16 @@ width0pt\relax} \fi
\defunargs {#3}\endgroup %
}
+% @deftypemethod foo-class return-type foo-method args
+%
+\def\deftypemethod{%
+ \defmethparsebody\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{%
+ \deftypefnheaderx{Method on #1}{#2}#3 #4\relax
+}
+
% @defmethod == @defop Method
\def\defmethod{\defmethparsebody\Edefmethod\defmethodx\defmethodheader}
@@ -4288,29 +4398,27 @@ width0pt\relax} \fi
% Read the last existing aux file, if any. No error if none exists.
\def\readauxfile{\begingroup
\catcode`\^^@=\other
- \catcode`\=\other
- \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`\ =\other
+ \catcode`\^^K=\other
\catcode`\^^L=\other
- \catcode`\=\other
- \catcode`\=\other
- \catcode`\=\other
- \catcode`\=\other
- \catcode`\=\other
- \catcode`\=\other
- \catcode`\=\other
- \catcode`\=\other
- \catcode`\=\other
- \catcode`\=\other
- \catcode`\=\other
- \catcode`\=\other
- \catcode26=\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
@@ -4388,7 +4496,7 @@ width0pt\relax} \fi
% space to prevent strange expansion errors.)
\def\supereject{\par\penalty -20000\footnoteno =0 }
-% @footnotestyle is meaningful for info output only..
+% @footnotestyle is meaningful for info output only.
\let\footnotestyle=\comment
\let\ptexfootnote=\footnote
@@ -4503,9 +4611,51 @@ width0pt\relax} \fi
%
\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 = xepsf.tex
+\ifeof 1 \else
+ \closein 1
+ \def\epsfannounce{\toks0 = }% do not bother showing banner
+ \input epsf.tex
+\fi
+%
+\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://ftp.tug.org/tex/epsf.tex.}
+%
+% Only complain once about lack of 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{%
+ % \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
+ \epsfbox{#1.eps}%
+}
% End of control word definitions.
+
\message{and turning on texinfo input format.}
\def\openindices{%