Change all instances of "Follow Mode" to "Follow mode" in docstrings and messages.
[bpt/emacs.git] / lispref / processes.texi
index d63ddc4..40bec38 100644 (file)
@@ -1,7 +1,7 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1998, 1999, 2002, 2003,
-@c   2004, 2005 Free Software Foundation, Inc.
+@c Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1998, 1999, 2001,
+@c   2002, 2003, 2004, 2005, 2006, 2007  Free Software Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @setfilename ../info/processes
 @node Processes, Display, Abbrevs, Top
@@ -23,7 +23,7 @@ subprocess, the Lisp program waits for the subprocess to terminate
 before continuing execution.  When you create an asynchronous
 subprocess, it can run in parallel with the Lisp program.  This kind of
 subprocess is represented within Emacs by a Lisp object which is also
-called a ``process''.  Lisp programs can use this object to communicate
+called a ``process.''  Lisp programs can use this object to communicate
 with the subprocess or to control it.  For example, you can send
 signals, obtain status information, receive output from the process, or
 send input to it.
@@ -146,6 +146,8 @@ file name.
 
 @node Shell Arguments
 @section Shell Arguments
+@cindex arguments for shell commands
+@cindex shell command arguments
 
   Lisp programs sometimes need to run a shell and give it a command
 that contains file names that were specified by the user.  These
@@ -347,7 +349,7 @@ handler could be different from the handler chosen for the
 @var{infile} is on another remote host.  Or @code{default-directory}
 could be non-special, whereas @var{infile} is on a remote host.)
 
-If @var{buffer} has the form @code{(@var{real-destination}
+If @var{buffer} is a list of the form @code{(@var{real-destination}
 @var{error-destination})}, and @var{error-destination} names a file,
 then the same remarks as for @var{infile} apply.
 
@@ -840,7 +842,6 @@ The function returns @var{process}.
 @end defun
 
 @defun process-running-child-p process
-@tindex process-running-child-p process
 This function will tell you whether a subprocess has given control of
 its terminal to its own child process.  The value is @code{t} if this is
 true, or if Emacs cannot tell; it is @code{nil} if Emacs can be certain
@@ -1237,6 +1238,7 @@ there is no filter function:
 
 @node Decoding Output
 @subsection Decoding Process Output
+@cindex decode process output
 
   When Emacs writes process output directly into a multibyte buffer,
 it decodes the output according to the process output coding system.
@@ -1286,6 +1288,7 @@ This function returns the filter multibyte flag of @var{process}.
 
 @node Accepting Output
 @subsection Accepting Output from Processes
+@cindex accept input from processes
 
   Output from asynchronous subprocesses normally arrives only while
 Emacs is waiting for some sort of external event, such as elapsed time
@@ -1304,17 +1307,13 @@ The arguments @var{seconds} and @var{millisec} let you specify timeout
 periods.  The former specifies a period measured in seconds and the
 latter specifies one measured in milliseconds.  The two time periods
 thus specified are added together, and @code{accept-process-output}
-returns after that much time whether or not there has been any
+returns after that much time, whether or not there has been any
 subprocess output.
-
-The argument @var{seconds} need not be an integer.  If it is a floating
-point number, this function waits for a fractional number of seconds.
-Some systems support only a whole number of seconds; on these systems,
-@var{seconds} is rounded down.
-
-Not all operating systems support waiting periods other than multiples
-of a second; on those that do not, you get an error if you specify
-nonzero @var{millisec}.
+  
+The argument @var{millisec} is semi-obsolete nowadays because
+@var{seconds} can be a floating point number to specify waiting a
+fractional number of seconds.  If @var{seconds} is 0, the function
+accepts whatever output is pending but does not wait.
 
 @c Emacs 22.1 feature
 If @var{process} is a process, and the argument @var{just-this-one} is
@@ -1333,7 +1332,7 @@ arrived.
 @node Sentinels
 @section Sentinels: Detecting Process Status Changes
 @cindex process sentinel
-@cindex sentinel
+@cindex sentinel (of process)
 
   A @dfn{process sentinel} is a function that is called whenever the
 associated process changes status for any reason, including signals
@@ -1458,12 +1457,10 @@ non-@code{nil}, says that Emacs should ask for confirmation before
 exiting and thus killing that process.  The default for the query flag
 is @code{t}, meaning @emph{do} query.
 
-@tindex process-query-on-exit-flag
 @defun process-query-on-exit-flag process
 This returns the query flag of @var{process}.
 @end defun
 
-@tindex set-process-query-on-exit-flag
 @defun set-process-query-on-exit-flag process flag
 This function sets the query flag of @var{process} to @var{flag}.  It
 returns @var{flag}.
@@ -1514,7 +1511,7 @@ process, or it may be a TCP connection to a server, possibly on another
 machine.
 @end defun
 
-@defun tq-enqueue queue question regexp closure fn
+@defun tq-enqueue queue question regexp closure fn &optional delay-question
 This function sends a transaction to queue @var{queue}.  Specifying the
 queue has the effect of specifying the subprocess to talk to.
 
@@ -1527,6 +1524,10 @@ The argument @var{regexp} is a regular expression that should match
 text at the end of the entire answer, but nothing before; that's how
 @code{tq-enqueue} determines where the answer ends.
 
+If the argument @var{delay-question} is non-nil, delay sending this
+question until the process has finished replying to any previous
+questions.  This produces more reliable results with some processes.
+
 The return value of @code{tq-enqueue} itself is not meaningful.
 @end defun
 
@@ -1627,7 +1628,7 @@ The associated value is the process filter function.
 @item :sentinel
 The associated value is the process sentinel function.
 @item :remote
-In a connection, this is the address in internal format of the remote peer.
+In a connection, the address in internal format of the remote peer.
 @item :local
 The local address, in internal format.
 @item :service
@@ -1646,6 +1647,7 @@ For an ordinary child process, this function always returns @code{t}.
 
 @node Network Servers
 @section Network Servers
+@cindex network servers
 
   You create a server by calling @code{make-network-process} with
 @code{:server t}.  The server will listen for connection requests from
@@ -1725,17 +1727,18 @@ sets its remote peer address to @var{address}.
 @section Low-Level Network Access
 
   You can also create network connections by operating at a lower
-level that that of @code{open-network-stream}, using
+level than that of @code{open-network-stream}, using
 @code{make-network-process}.
 
 @menu
-* Make Network::             Using @code{make-network-process}.
-* Network Options::          Further control over network connections.
-* Network Feature Testing::  Determining which network features work on
+* Proc: Network Processes.   Using @code{make-network-process}.
+* Options: Network Options.  Further control over network connections.
+* Features: Network Feature Testing.
+                             Determining which network features work on
                                the machine you are using.
 @end menu
 
-@node Make Network
+@node Network Processes
 @subsection @code{make-network-process}
 
    The basic function for creating network connections and network
@@ -1768,7 +1771,7 @@ connections to the server.  The default queue length is 5.
 
 @item :host @var{host}
 Specify the host to connect to.  @var{host} should be a host name or
-internet address, as a string, or the symbol @code{local} to specify
+Internet address, as a string, or the symbol @code{local} to specify
 the local host.  If you specify @var{host} for a server, it must
 specify a valid address for the local host, and only clients
 connecting to that address will be accepted.
@@ -1782,8 +1785,11 @@ the system select an unused port number.
 
 @item :family @var{family}
 @var{family} specifies the address (and protocol) family for
-communication.  @code{nil} stands for IPv4.  @code{local} specifies a
-Unix socket, in which case @var{host} is ignored.
+communication.  @code{nil} means determine the proper address family
+automatically for the given @var{host} and @var{service}.
+@code{local} specifies a Unix socket, in which case @var{host} is
+ignored.  @code{ipv4} and @code{ipv6} specify to use IPv4 and IPv6
+respectively.
 
 @item :local @var{local-address}
 For a server process, @var{local-address} is the address to listen on.
@@ -1803,9 +1809,18 @@ the address family:
 
 @itemize -
 @item
-An IPv4 address is represented as a vector of integers @code{[@var{a}
-@var{b} @var{c} @var{d} @var{p}]} corresponding to numeric IP address
-@var{a}.@var{b}.@var{c}.@var{d} and port number @var{p}.
+An IPv4 address is represented as a five-element vector of four 8-bit
+integers and one 16-bit integer
+@code{[@var{a} @var{b} @var{c} @var{d} @var{p}]} corresponding to
+numeric IPv4 address @var{a}.@var{b}.@var{c}.@var{d} and port number
+@var{p}.
+
+@item
+An IPv6 address is represented as a nine-element vector of 16-bit
+integers @code{[@var{a} @var{b} @var{c} @var{d} @var{e} @var{f}
+@var{g} @var{h} @var{p}]} corresponding to numeric IPv6 address
+@var{a}:@var{b}:@var{c}:@var{d}:@var{e}:@var{f}:@var{g}:@var{h} and
+port number @var{p}.
 
 @item
 A local address is represented as a string which specifies the address
@@ -1978,7 +1993,9 @@ Non-@code{nil} if non-blocking connect is supported.
 @item (:type datagram)
 Non-@code{nil} if datagrams are supported.
 @item (:family local)
-Non-@code{nil} if local (aka ``UNIX domain'') sockets are supported.
+Non-@code{nil} if local (a.k.a.@: ``UNIX domain'') sockets are supported.
+@item (:family ipv6)
+Non-@code{nil} if IPv6 is supported.
 @item (:service t)
 Non-@code{nil} if the system can select the port for a server.
 @end table
@@ -2010,7 +2027,8 @@ That particular network option is supported by
 @section Misc Network Facilities
 
   These additional functions are useful for creating and operating
-on network connections.
+on network connections.  Note that they are supported only on some
+systems.
 
 @defun network-interface-list
 This function returns a list describing the network interfaces
@@ -2027,7 +2045,7 @@ This function returns information about the network interface named
 
 @table @var
 @item addr
-The internet protocol address.
+The Internet protocol address.
 @item bcast
 The broadcast address.
 @item netmask
@@ -2041,18 +2059,27 @@ The current flags of the interface.
 
 @defun format-network-address address &optional omit-port
 This function converts the Lisp representation of a network address to
-a string.  For example, a five-element vector @code{[@var{a} @var{b}
-@var{c} @var{d} @var{p}]} represents an IP address
-@var{a}.@var{b}.@var{c}.@var{d} and port number @var{p}.
-@code{format-network-address} converts that to the string
-@code{"@var{a}.@var{b}.@var{c}.@var{d}:@var{p}"}.
+a string.
+
+A five-element vector @code{[@var{a} @var{b} @var{c} @var{d} @var{p}]}
+represents an IPv4 address @var{a}.@var{b}.@var{c}.@var{d} and port
+number @var{p}.  @code{format-network-address} converts that to the
+string @code{"@var{a}.@var{b}.@var{c}.@var{d}:@var{p}"}.
 
-If @var{omit-port} is non-@code{nil}, the value does not include
-the port number.
+A nine-element vector @code{[@var{a} @var{b} @var{c} @var{d} @var{e}
+@var{f} @var{g} @var{h} @var{p}]} represents an IPv6 address along
+with a port number.  @code{format-network-address} converts that to
+the string
+@code{"[@var{a}:@var{b}:@var{c}:@var{d}:@var{e}:@var{f}:@var{g}:@var{h}]:@var{p}"}.
+
+If the vector does not include the port number, @var{p}, or if
+@var{omit-port} is non-@code{nil}, the result does not include the
+@code{:@var{p}} suffix.
 @end defun
 
 @node Byte Packing
 @section Packing and Unpacking Byte Arrays
+@cindex byte packing and unpacking
 
   This section describes how to pack and unpack arrays of bytes,
 usually for binary network protocols.  These functions convert byte arrays
@@ -2080,7 +2107,9 @@ direction is also known as @dfn{serializing} or @dfn{packing}.
   To control unpacking and packing, you write a @dfn{data layout
 specification}, a special nested list describing named and typed
 @dfn{fields}.  This specification controls length of each field to be
-processed, and how to pack or unpack it.
+processed, and how to pack or unpack it.  We normally keep bindat specs
+in variables whose names end in @samp{-bindat-spec}; that kind of name
+is automatically recognized as ``risky.''
 
 @cindex endianness
 @cindex big endian
@@ -2090,7 +2119,7 @@ processed, and how to pack or unpack it.
 that the field represents and, in the case of multibyte fields, how
 the bytes are ordered within the field.  The two possible orderings
 are ``big endian'' (also known as ``network byte ordering'') and
-``little endian''.  For instance, the number @code{#x23cd} (decimal
+``little endian.''  For instance, the number @code{#x23cd} (decimal
 9165) in big endian would be the two bytes @code{#x23} @code{#xcd};
 and in little endian, @code{#xcd} @code{#x23}.  Here are the possible
 type values:
@@ -2123,10 +2152,13 @@ Unsigned integer in little endian order, with length 2, 3 and 4, respectively.
 String of length @var{len}.
 
 @item strz @var{len}
-Zero-terminated string of length @var{len}.
+Zero-terminated string, in a fixed-size field with length @var{len}.
 
-@item vec @var{len}
-Vector of @var{len} bytes.
+@item vec @var{len} [@var{type}]
+Vector of @var{len} elements of type @var{type}, or bytes if not
+@var{type} is specified.
+The @var{type} is any of the simple types above, or another vector
+specified as a list @code{(vec @var{len} [@var{type}])}.
 
 @item ip
 Four-byte vector representing an Internet address.  For example:
@@ -2145,6 +2177,16 @@ unpacked or packed.  The result of the evaluation should be one of the
 above-listed type specifications.
 @end table
 
+For a fixed-size field, the length @var{len} is given as an integer
+specifying the number of bytes in the field.
+
+When the length of a field is not fixed, it typically depends on the
+value of a preceding field.  In this case, the length @var{len} can be
+given either as a list @code{(@var{name} ...)} identifying a
+@dfn{field name} in the format specified for @code{bindat-get-field}
+below, or by an expression @code{(eval @var{form})} where @var{form}
+should evaluate to an integer, specifying the field length.
+
 A field specification generally has the form @code{([@var{name}]
 @var{handler})}.  The square braces indicate that @var{name} is
 optional.  (Don't use names that are symbols meaningful as type
@@ -2163,21 +2205,6 @@ Unpack/pack this field according to the type specification @var{type}.
 @item eval @var{form}
 Evaluate @var{form}, a Lisp expression, for side-effect only.  If the
 field name is specified, the value is bound to that field name.
-@var{form} can access and update these dynamically bound variables:
-
-@table @code
-@item raw-data
-The data as a byte array.
-
-@item pos
-Current position of the unpacking or packing operation.
-
-@item struct
-Alist.
-
-@item last
-Value of the last field processed.
-@end table
 
 @item fill @var{len}
 Skip @var{len} bytes.  In packing, this leaves them unchanged,
@@ -2211,24 +2238,54 @@ of @var{form}.  A non-@code{nil} result indicates a match.
 @var{tag} matches unconditionally if it is @code{t}.
 @end itemize
 
-@item repeat @var{count} @var{field-spec}@dots{}
-@var{count} may be an integer, or a list of one element naming a
-previous field.  For correct operation, each @var{field-spec} must
-include a name.
-@c ??? What does it MEAN?
+@item repeat @var{count} @var{field-specs}@dots{}
+Process the @var{field-specs} recursively, in order, then repeat
+starting from the first one, processing all the specs @var{count}
+times overall.  The @var{count} is given using the same formats as a
+field length---if an @code{eval} form is used, it is evaluated just once.
+For correct operation, each spec in @var{field-specs} must include a name.
+@end table
+
+For the @code{(eval @var{form})} forms used in a bindat specification,
+the @var{form} can access and update these dynamically bound variables
+during evaluation:
+
+@table @code
+@item last
+Value of the last field processed.
+
+@item bindat-raw
+The data as a byte array.
+
+@item bindat-idx
+Current index (within @code{bindat-raw}) for unpacking or packing.
+
+@item struct
+The alist containing the structured data that have been unpacked so
+far, or the entire structure being packed.  You can use
+@code{bindat-get-field} to access specific fields of this structure.
+
+@item count
+@itemx index
+Inside a @code{repeat} block, these contain the maximum number of
+repetitions (as specified by the @var{count} parameter), and the
+current repetition number (counting from 0).  Setting @code{count} to
+zero will terminate the inner-most repeat block after the current
+repetition has completed.
 @end table
 
 @node Bindat Functions
 @subsection Functions to Unpack and Pack Bytes
 
   In the following documentation, @var{spec} refers to a data layout
-specification, @code{raw-data} to a byte array, and @var{struct} to an
+specification, @code{bindat-raw} to a byte array, and @var{struct} to an
 alist representing unpacked field data.
 
-@defun bindat-unpack spec raw-data &optional pos
-This function unpacks data from the byte array @code{raw-data}
+@defun bindat-unpack spec bindat-raw &optional bindat-idx
+This function unpacks data from the unibyte string or byte
+array @code{bindat-raw}
 according to @var{spec}.  Normally this starts unpacking at the
-beginning of the byte array, but if @var{pos} is non-@code{nil}, it
+beginning of the byte array, but if @var{bindat-idx} is non-@code{nil}, it
 specifies a zero-based starting position to use instead.
 
 The value is an alist or nested alist in which each element describes
@@ -2244,27 +2301,33 @@ arguments specify repeated lookup of sub-structures.  An integer name
 acts as an array index.
 
 For example, if @var{name} is @code{(a b 2 c)}, that means to find
-field @code{c} in the second element of subfield @code{b} of field
+field @code{c} in the third element of subfield @code{b} of field
 @code{a}.  (This corresponds to @code{struct.a.b[2].c} in C.)
 @end defun
 
+  Although packing and unpacking operations change the organization of
+data (in memory), they preserve the data's @dfn{total length}, which is
+the sum of all the fields' lengths, in bytes.  This value is not
+generally inherent in either the specification or alist alone; instead,
+both pieces of information contribute to its calculation.  Likewise, the
+length of a string or array being unpacked may be longer than the data's
+total length as described by the specification.
+
 @defun bindat-length spec struct
-@c ??? I don't understand this at all -- rms
-This function returns the length in bytes of @var{struct}, according
-to @var{spec}.
+This function returns the total length of the data in @var{struct},
+according to @var{spec}.
 @end defun
 
-@defun bindat-pack spec struct &optional raw-data pos
+@defun bindat-pack spec struct &optional bindat-raw bindat-idx
 This function returns a byte array packed according to @var{spec} from
 the data in the alist @var{struct}.  Normally it creates and fills a
-new byte array starting at the beginning.  However, if @var{raw-data}
-is non-@code{nil}, it specifies a pre-allocated string or vector to
-pack into.  If @var{pos} is non-@code{nil}, it specifies the starting
-offset for packing into @code{raw-data}.
+new byte array starting at the beginning.  However, if @var{bindat-raw}
+is non-@code{nil}, it specifies a pre-allocated unibyte string or vector to
+pack into.  If @var{bindat-idx} is non-@code{nil}, it specifies the starting
+offset for packing into @code{bindat-raw}.
 
-@c ??? Isn't this a bug?  Shouldn't it always be unibyte?
-Note: The result is a multibyte string; use @code{string-make-unibyte}
-on it to make it unibyte if necessary.
+When pre-allocating, you should make sure @code{(length @var{bindat-raw})}
+meets or exceeds the total length to avoid an out-of-range error.
 @end defun
 
 @defun bindat-ip-to-string ip
@@ -2348,18 +2411,17 @@ COOKIES, indicates the border between entries."
     (with-temp-buffer
       (set-buffer-multibyte nil)
       (insert
-       (string-make-unibyte
-        (bindat-pack
-         fcookie-index-spec
-         `((:version . 2)
-           (:count . ,count)
-           (:longest . ,max)
-           (:shortest . ,min)
-           (:flags . 0)
-           (:delim . ,delim)
-           (:offset . ,(mapcar (lambda (o)
-                                 (list (cons :foo o)))
-                               (nreverse offsets)))))))
+       (bindat-pack
+        fcookie-index-spec
+        `((:version . 2)
+          (:count . ,count)
+          (:longest . ,max)
+          (:shortest . ,min)
+          (:flags . 0)
+          (:delim . ,delim)
+          (:offset . ,(mapcar (lambda (o)
+                                (list (cons :foo o)))
+                              (nreverse offsets))))))
       (let ((coding-system-for-write 'raw-text-unix))
         (write-file (or index (concat cookies ".dat")))))))
 @end lisp
@@ -2378,13 +2440,14 @@ struct header @{
 struct data @{
     unsigned char    type;
     unsigned char    opcode;
-    unsigned long    length;  /* In little endian order */
+    unsigned short   length;  /* In network byte order */
     unsigned char    id[8];   /* null-terminated string  */
     unsigned char    data[/* (length + 3) & ~3 */];
 @};
 
 struct packet @{
     struct header    header;
+    unsigned long    counters[2];  /* In little endian order */
     unsigned char    items;
     unsigned char    filler[3];
     struct data      item[/* items */];
@@ -2404,13 +2467,14 @@ The corresponding data layout specification:
 (setq data-spec
       '((type      u8)
         (opcode    u8)
-        (length    u16r) ;; little endian order
+        (length    u16)  ;; network byte order
         (id        strz 8)
         (data      vec (length))
         (align     4)))
 
 (setq packet-spec
       '((header    struct header-spec)
+        (counters  vec 2 u32r)   ;; little endian order
         (items     u8)
         (fill      3)
         (item      repeat (items)
@@ -2421,9 +2485,10 @@ A binary data representation:
 
 @lisp
 (setq binary-data
-      [ 192 168 1 100 192 168 1 101 01 28 21 32 2 0 0 0
-        2 3 5 0 ?A ?B ?C ?D ?E ?F 0 0 1 2 3 4 5 0 0 0
-        1 4 7 0 ?B ?C ?D ?E ?F ?G 0 0 6 7 8 9 10 11 12 0 ])
+      [ 192 168 1 100 192 168 1 101 01 28 21 32
+        160 134 1 0 5 1 0 0 2 0 0 0
+        2 3 0 5 ?A ?B ?C ?D ?E ?F 0 0 1 2 3 4 5 0 0 0
+        1 4 0 7 ?B ?C ?D ?E ?F ?G 0 0 6 7 8 9 10 11 12 0 ])
 @end lisp
 
 The corresponding decoded structure:
@@ -2436,6 +2501,7 @@ The corresponding decoded structure:
   (src-ip    . [192 168 1 101])
   (dest-port . 284)
   (src-port  . 5408))
+ (counters . [100000 261])
  (items . 2)
  (item ((data . [1 2 3 4 5])
         (id . "ABCDEF")