summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Weisgerber <naddy@cvs.openbsd.org>2000-12-21 13:44:26 +0000
committerChristian Weisgerber <naddy@cvs.openbsd.org>2000-12-21 13:44:26 +0000
commit489e837feddb9ae814302b6e1cfd39772e3b906c (patch)
tree9f754d0720535d9fc8482735fd72ba60dd3648ca
parent8b08c6285e914361243a6ba2a3bbeecf057d3d7a (diff)
Add UUCP info documentation.
Lack pointed out by Hans Guenter Weigand <hgw@d1906.inka.de>. - Virgin import of Taylor UUCP 1.06.1 texinfo doc. - Makefile largely by millert@ ok millert@
-rw-r--r--gnu/libexec/uucp/Makefile4
-rw-r--r--gnu/libexec/uucp/doc/Makefile21
-rw-r--r--gnu/libexec/uucp/doc/uucp.texi8366
3 files changed, 8389 insertions, 2 deletions
diff --git a/gnu/libexec/uucp/Makefile b/gnu/libexec/uucp/Makefile
index ad25c3f180e..ca23f05ab5e 100644
--- a/gnu/libexec/uucp/Makefile
+++ b/gnu/libexec/uucp/Makefile
@@ -1,9 +1,9 @@
# This is the Makefile for Taylor UUCP
-# $Id: Makefile,v 1.2 1996/12/08 22:39:31 tholo Exp $
+# $Id: Makefile,v 1.3 2000/12/21 13:44:25 naddy Exp $
SUBDIR= libunix libuucp libuuconf \
cu uuchk uucico uuconv uucp uulog uuname uupick uusched \
uustat uuto uux uuxqt \
- sample
+ doc sample
.include <bsd.subdir.mk>
diff --git a/gnu/libexec/uucp/doc/Makefile b/gnu/libexec/uucp/doc/Makefile
new file mode 100644
index 00000000000..025202d7ad8
--- /dev/null
+++ b/gnu/libexec/uucp/doc/Makefile
@@ -0,0 +1,21 @@
+# $OpenBSD: Makefile,v 1.1 2000/12/21 13:44:25 naddy Exp $
+
+INFO = uucp.info uucp.info-1 uucp.info-2 uucp.info-3 uucp.info-4 \
+ uucp.info-5 uucp.info-6 uucp.info-7 uucp.info-8
+SRCS = uucp.texi
+
+all: ${INFO}
+
+${INFO}: ${SRCS}
+ makeinfo ${.CURDIR}/${SRCS}
+
+clean cleandir:
+ -rm -f ${INFO}
+
+install: ${INFO}
+ ${INSTALL} ${INSTALL_COPY} -o ${DOCOWN} -g ${DOCGRP} -m ${DOCMODE} ${INFO} ${DESTDIR}${SHAREDIR}/info
+ install-info --info-dir=${DESTDIR}${SHAREDIR}/info uucp.info
+
+.include <bsd.own.mk>
+.include <bsd.obj.mk>
+.include <bsd.subdir.mk>
diff --git a/gnu/libexec/uucp/doc/uucp.texi b/gnu/libexec/uucp/doc/uucp.texi
new file mode 100644
index 00000000000..769225a549a
--- /dev/null
+++ b/gnu/libexec/uucp/doc/uucp.texi
@@ -0,0 +1,8366 @@
+\input texinfo @c -*-texinfo-*-
+@c %**start of header
+@setfilename uucp.info
+@settitle Taylor UUCP
+@setchapternewpage odd
+@c %**end of header
+
+@iftex
+@finalout
+@end iftex
+
+@ifinfo
+@format
+START-INFO-DIR-ENTRY
+* UUCP: (uucp). Transfer mail and news across phone lines.
+END-INFO-DIR-ENTRY
+@end format
+
+This file documents Taylor UUCP, version 1.06.
+
+Copyright @copyright{} 1992, 1993, 1994, 1995 Ian Lance Taylor
+
+Permission is granted to make and distribute verbatim copies of this
+manual provided the copyright notice and this permission notice are
+preserved on all copies.
+
+@ignore
+Permission is granted to process this file through TeX and print the
+results, provided the printed document carries a copying permission
+notice identical to this one except for the removal of this paragraph
+(this paragraph not being relevant to the printed manual).
+
+@end ignore
+Permission is granted to copy and distribute modified versions of this
+manual under the conditions for verbatim copying, provided also that the
+section entitled ``Copying'' are included exactly as in the original, and
+provided that the entire resulting derived work is distributed under the
+terms of a permission notice identical to this one.
+
+Permission is granted to copy and distribute translations of this manual
+into another language, under the above conditions for modified versions,
+except that the section entitled ``Copying'' may be included in a
+translation approved by the author instead of in the original English.
+@end ifinfo
+
+@titlepage
+@title Taylor UUCP
+@subtitle Version 1.06
+@author Ian Lance Taylor @code{<ian@@airs.com>}
+
+@page
+@vskip 0pt plus 1filll
+Copyright @copyright{} 1992, 1993, 1994, 1995 Ian Lance Taylor
+
+Published by Ian Lance Taylor @code{<ian@@airs.com>}.
+
+Permission is granted to make and distribute verbatim copies of this
+manual provided the copyright notice and this permission notice are
+preserved on all copies.
+
+Permission is granted to copy and distribute modified versions of this
+manual under the conditions for verbatim copying, provided also that the
+section entitled ``Copying'' are included exactly as in the original, and
+provided that the entire resulting derived work is distributed under the
+terms of a permission notice identical to this one.
+
+Permission is granted to copy and distribute translations of this manual
+into another language, under the above conditions for modified versions,
+except that the section entitled ``Copying'' may be included in a
+translation approved by the author instead of in the original English.
+@end titlepage
+
+@node Top, Copying, (dir), (dir)
+@top Taylor UUCP 1.06
+
+This is the documentation for the Taylor UUCP package, version 1.06.
+The programs were written by Ian Lance Taylor. The author can be
+reached at @code{<ian@@airs.com>}, or at
+@display
+Ian Lance Taylor
+c/o Cygnus Support
+48 Grove Street
+Somerville, MA 02144
+USA
+@end display
+
+There is a mailing list for discussion of the package. The list is
+hosted by Eric Schnoebelen at @code{cirr.com}. To join (or get off) the
+list, send mail to @code{taylor-uucp-request@@cirr.com}. Mail to this
+address is answered by the majordomo program. To join the list, send
+the message @samp{subscribe @var{address}} where @var{address} is your
+e-mail address. To send a message to the list, send it to
+@code{taylor-uucp@@cirr.com}. The old list address,
+@code{taylor-uucp@@gnu.ai.mit.edu}, will also work. There is an archive
+of all messages sent to the mailing list at @code{ftp.cirr.com}.
+
+@menu
+* Copying:: Taylor UUCP Copying Conditions
+* Introduction:: Introduction to Taylor UUCP
+* Invoking the UUCP Programs:: Invoking the UUCP Programs
+* Installing Taylor UUCP:: Installing Taylor UUCP
+* Using Taylor UUCP:: Using Taylor UUCP
+* Configuration Files:: Taylor UUCP Configuration Files
+* Protocols:: UUCP Protocol Descriptions
+* Hacking:: Hacking Taylor UUCP
+* Acknowledgements:: Acknowledgements
+
+* Index (concepts):: Concept Index
+* Index (configuration file):: Index to New Configuration Files
+
+ --- The Detailed Node Listing ---
+
+Invoking the UUCP Programs
+
+* Standard Options:: Standard Options for the UUCP Programs
+* Invoking uucp:: Invoking uucp
+* Invoking uux:: Invoking uux
+* Invoking uustat:: Invoking uustat
+* Invoking uuname:: Invoking uuname
+* Invoking uulog:: Invoking uulog
+* Invoking uuto:: Invoking uuto
+* Invoking uupick:: Invoking uupick
+* Invoking cu:: Invoking cu
+* Invoking uucico:: Invoking uucico
+* Invoking uuxqt:: Invoking uuxqt
+* Invoking uuchk:: Invoking uuchk
+* Invoking uuconv:: Invoking uuconv
+* Invoking uusched:: Invoking uusched
+
+Invoking uucp
+
+* uucp Description:: Description of uucp
+* uucp Options:: Options Supported by uucp
+
+Invoking uux
+
+* uux Description:: Description of uux
+* uux Options:: Options Supported by uux
+* uux Examples:: Examples of uux Usage
+
+Invoking uustat
+
+* uustat Description:: Description of uustat
+* uustat Options:: Options Supported by uustat
+* uustat Examples:: Examples of uustat Usage
+
+Invoking cu
+
+* cu Description:: Description of cu
+* cu Commands:: Commands Supported by cu
+* cu Variables:: Variables Supported by cu
+* cu Options:: Options Supported by cu
+
+Invoking uucico
+
+* uucico Description:: Description of uucico
+* uucico Options:: Options Supported by uucico
+
+Installing Taylor UUCP
+
+* Compilation:: Compiling Taylor UUCP
+* Testing the Compilation:: Testing the Compilation
+* Installing the Binaries:: Installing the Binaries
+* Configuration:: Configuring Taylor UUCP
+* Testing the Installation:: Testing the Installation
+
+Using Taylor UUCP
+
+* Calling Other Systems:: Calling Other Systems
+* Accepting Calls:: Accepting Calls
+* Mail and News:: Using UUCP for Mail and News
+* The Spool Directory Layout:: The Spool Directory Layout
+* Spool Directory Cleaning:: Cleaning the UUCP Spool Directory
+
+Using UUCP for Mail and News.
+
+* Sending mail or news:: Sending mail or news via UUCP
+* Receiving mail or news:: Receiving mail or news via UUCP
+
+The Spool Directory Layout
+
+* System Spool Directories:: System Spool Directories
+* Status Directory:: Status Spool Directory
+* Execution Subdirectories:: Execution Spool Subdirectories
+* Other Spool Subdirectories:: Other Spool Subdirectories
+* Spool Lock Files:: Spool Directory Lock Files
+
+Taylor UUCP Configuration Files
+
+* Configuration Overview:: Configuration File Overview
+* Configuration File Format:: Configuration File Format
+* Configuration Examples:: Examples of Configuration Files
+* Time Strings:: How to Write Time Strings
+* Chat Scripts:: How to Write Chat Scripts
+* config File:: The Main Configuration File
+* sys File:: The System Configuration File
+* port File:: The Port Configuration Files
+* dial File:: The Dialer Configuration Files
+* UUCP Over TCP:: UUCP Over TCP
+* Security:: Security Issues
+
+Examples of Configuration Files
+
+* config File Examples:: Examples of the Main Configuration File
+* Leaf Example:: Call a Single Remote Site
+* Gateway Example:: The Gateway for Several Local Systems
+
+The Main Configuration File
+
+* Miscellaneous (config):: Miscellaneous config File Commands
+* Configuration File Names:: Using Different Configuration Files
+* Log File Names:: Using Different Log Files
+* Debugging Levels:: Debugging Levels
+
+The System Configuration File
+
+* Defaults and Alternates:: Using Defaults and Alternates
+* Naming the System:: Naming the System
+* Calling Out:: Calling Out
+* Accepting a Call:: Accepting a Call
+* Protocol Selection:: Protocol Selection
+* File Transfer Control:: File Transfer Control
+* Miscellaneous (sys):: Miscellaneous sys File Commands
+* Default sys File Values:: Default Values
+
+Calling Out
+
+* When to Call:: When to Call
+* Placing the Call:: Placing the Call
+* Logging In:: Logging In
+
+UUCP Over TCP
+
+* TCP Client:: Connecting to Another System Over TCP
+* TCP Server:: Running a TCP Server
+
+UUCP Protocol Internals
+
+* UUCP Protocol Sources:: Sources for UUCP Protocol Information
+* UUCP Grades:: UUCP Grades
+* UUCP Lock Files:: UUCP Lock Files
+* Execution File Format:: Execution File Format
+* UUCP Protocol:: UUCP Protocol
+* g Protocol:: g protocol
+* f Protocol:: f protocol
+* t Protocol:: t protocol
+* e Protocol:: e protocol
+* Big G Protocol:: G protocol
+* i Protocol:: i protocol
+* j Protocol:: j protocol
+* x Protocol:: x protocol
+* y Protocol:: y protocol
+* d Protocol:: d protocol
+* h Protocol:: h protocol
+* v Protocol:: v protocol
+
+UUCP Protocol
+
+* The Initial Handshake:: The Initial Handshake
+* UUCP Protocol Commands:: UUCP Protocol Commands
+* The Final Handshake:: The Final Handshake
+
+UUCP Protocol Commands
+
+* The S Command:: The S Command
+* The R Command:: The R Command
+* The X Command:: The X Command
+* The E Command:: The E Command
+* The H Command:: The H Command
+
+Hacking Taylor UUCP
+
+* System Dependence:: System Dependence
+* Naming Conventions:: Naming Conventions
+* Patches:: Patches
+@end menu
+
+@node Copying, Introduction, Top, Top
+@unnumbered Taylor UUCP Copying Conditions
+
+This package is covered by the GNU Public License. See the file
+@file{COPYING} for details. If you would like to do something with this
+package that you feel is reasonable, but you feel is prohibited by the
+license, contact me to see if we can work it out.
+
+The rest of this section is some descriptive text from the Free Software
+Foundation.
+
+All the programs, scripts and documents relating to Taylor UUCP are
+@dfn{free}; this means that everyone is free to use them and free to
+redistribute them on a free basis. The Taylor UUCP-related programs are
+not in the public domain; they are copyrighted and there are
+restrictions on their distribution, but these restrictions are designed
+to permit everything that a good cooperating citizen would want to do.
+What is not allowed is to try to prevent others from further sharing any
+version of these programs that they might get from you.
+
+Specifically, we want to make sure that you have the right to give away
+copies of the programs that relate to Taylor UUCP, that you receive
+source code or else can get it if you want it, that you can change these
+programs or use pieces of them in new free programs, and that you know
+you can do these things.
+
+To make sure that everyone has such rights, we have to forbid you to
+deprive anyone else of these rights. For example, if you distribute
+copies of the Taylor UUCP related programs, you must give the recipients
+all the rights that you have. You must make sure that they, too,
+receive or can get the source code. And you must tell them their
+rights.
+
+Also, for our own protection, we must make certain that everyone finds
+out that there is no warranty for the programs that relate to Taylor
+UUCP. If these programs are modified by someone else and passed on, we
+want their recipients to know that what they have is not what we
+distributed, so that any problems introduced by others will not reflect
+on our reputation.
+
+The precise conditions of the licenses for the programs currently being
+distributed that relate to Taylor UUCP are found in the General Public
+Licenses that accompany them.
+
+@node Introduction, Invoking the UUCP Programs, Copying, Top
+@chapter Introduction to Taylor UUCP
+
+General introductions to UUCP are available, and perhaps one day I will
+write one. In the meantime, here is a very brief one that concentrates
+on the programs provided by Taylor UUCP.
+
+Taylor UUCP is a complete UUCP package. It is covered by the GNU Public
+License, which means that the source code is always available. It is
+composed of several programs; most of the names of these programs are
+based on earlier UUCP packages.
+
+@table @code
+
+@item uucp
+
+The @code{uucp} program is used to copy file between systems. It is
+similar to the standard Unix @code{cp} program, except that you can
+refer to a file on a remote system by using @samp{system!} before the
+file name. For example, to copy the file @file{notes.txt} to the system
+@samp{airs}, you would say @samp{uucp notes.txt airs!~/notes.txt}. In
+this example @samp{~} is used to name the UUCP public directory on
+@samp{airs}. For more details, see @ref{Invoking uucp, uucp}.
+
+@item uux
+
+The @code{uux} program is used to request the execution of a program on
+a remote system. This is how mail and news are transferred over UUCP.
+As with @code{uucp}, programs and files on remote systems may be named
+by using @samp{system!}. For example, to run the @code{rnews} program
+on @samp{airs}, passing it standard input, you would say @samp{uux -
+airs!rnews}. The @samp{-} means to read standard input and set things
+up such that when @code{rnews} runs on @samp{airs} it will receive the
+same standard input. For more details, see @ref{Invoking uux, uux}.
+
+@end table
+
+Neither @code{uucp} nor @code{uux} actually do any work immediately.
+Instead, they queue up requests for later processing. They then start a
+daemon process which processes the requests and calls up the appropriate
+systems. Normally the system will also start the daemon periodically to
+check if there is any work to be done. The advantage of this approach
+is that it all happens automatically. You don't have to sit around
+waiting for the files to be transferred. The disadvantage is that if
+anything goes wrong it might be a while before anybody notices.
+
+@table @code
+
+@item uustat
+
+The @code{uustat} program does many things. By default it will simply
+list all the jobs you have queued with @code{uucp} or @code{uux} that
+have not yet been processed. You can use @code{uustat} to remove any of
+your jobs from the queue. You can also it use it to show the status of
+the UUCP system in various ways, such as showing the connection status
+of all the remote systems your system knows about. The system
+administrator can use @code{uustat} to automatically discard old jobs
+while sending mail to the user who requested them. For more details,
+see @ref{Invoking uustat, uustat}.
+
+@item uuname
+
+The @code{uuname} program by default lists all the remote systems your
+system knows about. You can also use it to get the name of your local
+system. It is mostly useful for shell scripts. For more details, see
+@ref{Invoking uuname, uuname}.
+
+@item uulog
+
+The @code{uulog} program can be used to display entries in the UUCP log
+file. It can select the entries for a particular system or a particular
+user. You can use it to see what has happened to your queued jobs in
+the past. For more details, see @ref{Invoking uulog, uulog}.
+
+@item uuto
+@item uupick
+
+@code{uuto} is a simple shell script interface to @code{uucp}. It will
+transfer a file, or the contents of a directory, to a remote system, and
+notify a particular user on the remote system when it arrives. The
+remote user can then retrieve the file(s) with @code{uupick}. For more
+details, see @ref{Invoking uuto, uuto}, and see @ref{Invoking uupick,
+uupick}.
+
+@item cu
+
+The @code{cu} program can be used to call up another system and
+communicate with it as though you were directly connected. It can also
+do simple file transfers, though it does not provide any error checking.
+For more details, @ref{Invoking cu, cu}.
+
+@end table
+
+These eight programs just described, @code{uucp}, @code{uux},
+@code{uuto}, @code{uupick}, @code{uustat}, @code{uuname}, @code{uulog},
+and @code{cu} are the user programs provided by Taylor UUCP@.
+@code{uucp}, @code{uux}, and @code{uuto} add requests to the work queue,
+@code{uupick} extracts files from the UUCP public directory,
+@code{uustat} examines the work queue, @code{uuname} examines the
+configuration files, @code{uulog} examines the log files, and @code{cu}
+just uses the UUCP configuration files.
+
+The real work is actually done by two daemon processes, which are
+normally run automatically rather than by a user.
+
+@table @code
+
+@item uucico
+
+The @code{uucico} daemon is the program which actually calls the remote
+system and transfers files and requests. @code{uucico} is normally
+started automatically by @code{uucp} and @code{uux}. Most systems will
+also start it periodically to make sure that all work requests are
+handled. @code{uucico} checks the queue to see what work needs to be
+done, and then calls the appropriate systems. If the call fails,
+perhaps because the phone line is busy, @code{uucico} leaves the
+requests in the queue and goes on to the next system to call. It is
+also possible to force @code{uucico} to call a remote system even if
+there is no work to be done for it, so that it can pick up any work that
+may be queued up remotely. For more details, see @ref{Invoking uucico,
+uucico}.
+
+@need 1000
+@item uuxqt
+
+The @code{uuxqt} daemon processes execution requests made by the
+@code{uux} program on remote systems. It also processes requests made
+on the local system which require files from a remote system. It is
+normally started by @code{uucico}. For more details, see @ref{Invoking
+uuxqt, uuxqt}.
+
+@end table
+
+Suppose you, on the system @samp{bantam}, want to copy a file to the
+system @samp{airs}. You would run the @code{uucp} command locally, with
+a command like @samp{uucp notes.txt airs!~/notes.txt}. This would queue
+up a request on @samp{bantam} for @samp{airs}, and would then start the
+@code{uucico} daemon. @code{uucico} would see that there was a request
+for @samp{airs} and attempt to call it. When the call succeeded,
+another copy of @code{uucico} would be started on @samp{airs}. The two
+copies of @code{uucico} would tell each other what they had to do and
+transfer the file from @samp{bantam} to @samp{airs}. When the file
+transfer was complete the @code{uucico} on @samp{airs} would move it
+into the UUCP public directory.
+
+UUCP is often used to transfer mail. This is normally done
+automatically by mailer programs. When @samp{bantam} has a mail message
+to send to @samp{ian} at @samp{airs}, it executes @samp{uux - airs!rmail
+ian} and writes the mail message to the @code{uux} process as standard
+input. The @code{uux} program, running on @samp{bantam}, will read the
+standard input and store it, as well as the @code{rmail} request itself,
+on the work queue for @samp{airs}. @code{uux} will then start the
+@code{uucico} daemon. The @code{uucico} daemon will call up
+@samp{airs}, just as in the @code{uucp} example, and transfer the work
+request and the mail message. The @code{uucico} daemon on @samp{airs}
+will put the files on a local work queue. When the communication
+session is over, the @code{uucico} daemon on @samp{airs} will start the
+@code{uuxqt} daemon. @code{uuxqt} will see the request on the work
+queue, and will run @samp{rmail ian} with the mail message as standard
+input. The @code{rmail} program, which is not part of the UUCP package,
+is then responsible for either putting the message in the right mailbox
+on @samp{airs} or forwarding the message on to another system.
+
+Taylor UUCP comes with a few other programs that are useful when
+installing and configuring UUCP.
+
+@table @code
+
+@item uuchk
+
+The @code{uuchk} program reads the UUCP configuration files and displays
+a rather lengthy description of what it finds. This is useful when
+configuring UUCP to make certain that the UUCP package will do what you
+expect it to do. For more details, see @ref{Invoking uuchk, uuchk}.
+
+@item uuconv
+
+The @code{uuconv} program can be used to convert UUCP configuration
+files from one format to another. This can be useful for administrators
+converting from an older UUCP package. Taylor UUCP is able to read and
+use old configuration file formats, but some new features can not be
+selected using the old formats. For more details, see @ref{Invoking
+uuconv, uuconv}.
+
+@item uusched
+
+The @code{uusched} script is provided for compatibility with older UUCP
+releases. It starts @code{uucico} to call, one at a time, all the
+systems for which work has been queued. For more details, see
+@ref{Invoking uusched, uusched}.
+
+@item tstuu
+
+The @code{tstuu} program is a test harness for the UUCP package; it can
+help check that the package has been configured and compiled correctly.
+However, it uses pseudo-terminals, which means that it is less portable
+than the rest of the package. If it works, it can be useful when
+initially installing Taylor UUCP. For more details, see @ref{Testing
+the Compilation, tstuu}.
+
+@end table
+
+@node Invoking the UUCP Programs, Installing Taylor UUCP, Introduction, Top
+@chapter Invoking the UUCP Programs
+
+This chapter describes how to run the UUCP programs.
+
+@menu
+* Standard Options:: Standard Options for the UUCP Programs
+* Invoking uucp:: Invoking uucp
+* Invoking uux:: Invoking uux
+* Invoking uustat:: Invoking uustat
+* Invoking uuname:: Invoking uuname
+* Invoking uulog:: Invoking uulog
+* Invoking uuto:: Invoking uuto
+* Invoking uupick:: Invoking uupick
+* Invoking cu:: Invoking cu
+* Invoking uucico:: Invoking uucico
+* Invoking uuxqt:: Invoking uuxqt
+* Invoking uuchk:: Invoking uuchk
+* Invoking uuconv:: Invoking uuconv
+* Invoking uusched:: Invoking uusched
+@end menu
+
+@node Standard Options, Invoking uucp, Invoking the UUCP Programs, Invoking the UUCP Programs
+@section Standard Options
+
+All of the UUCP programs support a few standard options.
+
+@table @samp
+@item -x type
+@itemx --debug type
+Turn on particular debugging types. The following types are recognized:
+@samp{abnormal}, @samp{chat}, @samp{handshake}, @samp{uucp-proto},
+@samp{proto}, @samp{port}, @samp{config}, @samp{spooldir},
+@samp{execute}, @samp{incoming}, @samp{outgoing}. Not all types of
+debugging are effective for all programs. See the @code{debug}
+configuration command for details (@pxref{Debugging Levels}).
+
+Multiple types may be given, separated by commas, and the @samp{--debug}
+option may appear multiple times. A number may also be given, which
+will turn on that many types from the foregoing list; for example,
+@samp{--debug 2} is equivalent to @samp{--debug abnormal,chat}. To turn
+on all types of debugging, use @samp{-x all}.
+
+The @code{uulog} program uses @samp{-X} rather than @samp{-x} to select
+the debugging type; for @code{uulog}, @samp{-x} has a different meaning,
+for reasons of historical compatibility.
+
+@item -I file
+@itemx --config file
+Set the main configuration file to use. @xref{config File}. When this
+option is used, the programs will revoke any setuid privileges.
+
+@item -v
+@itemx --version
+Report version information and exit.
+
+@item --help
+Print a help message and exit.
+@end table
+
+@need 2000
+@node Invoking uucp, Invoking uux, Standard Options, Invoking the UUCP Programs
+@section Invoking uucp
+
+@menu
+* uucp Description:: Description of uucp
+* uucp Options:: Options Supported by uucp
+@end menu
+
+@node uucp Description, uucp Options, Invoking uucp, Invoking uucp
+@subsection uucp Description
+
+@example
+uucp [options] @file{source-file} @file{destination-file}
+uucp [options] @file{source-file}... @file{destination-directory}
+@end example
+
+The @code{uucp} command copies files between systems. Each @file{file}
+argument is either a file name on the local machine or is of the form
+@samp{system!file}. The latter is interpreted as being on a remote
+system.
+
+When @code{uucp} is used with two non-option arguments, the contents of
+the first file are copied to the second. With more than two non-option
+arguments, each source file is copied into the destination directory.
+
+A file may be transferred to or from @samp{system2} via @samp{system1}
+by using @samp{system1!system2!file}.
+
+Any file name that does not begin with @samp{/} or @samp{~} will be
+prepended with the current directory (unless the @samp{-W} or
+@samp{--noexpand} options are used). For example, if you are in the
+directory @samp{/home/ian}, then @samp{uucp foo remote!bar} is
+equivalent to @samp{uucp /home/ian/foo remote!/home/ian/bar}. Note that
+the resulting file name may not be valid on a remote system.
+
+A file name beginning with a simple @samp{~} starts at the UUCP public
+directory; a file name beginning with @samp{~name} starts at the home
+directory of the named user. The @samp{~} is interpreted on the
+appropriate system. Note that some shells will interpret an initial
+@samp{~} before @code{uucp} sees it; to avoid this the @samp{~} must be
+quoted.
+
+The shell metacharacters @samp{?} @samp{*} @samp{[} and @samp{]} are
+interpreted on the appropriate system, assuming they are quoted to
+prevent the shell from interpreting them first.
+
+The file copy does not take place immediately, but is queued up for the
+@code{uucico} daemon; the daemon is started immediately unless the
+@samp{-r} or @samp{--nouucico} option is given. The next time the
+remote system is called, the file(s) will be copied. @xref{Invoking
+uucico}.
+
+The file mode is not preserved, except for the execute bit. The
+resulting file is owned by the uucp user.
+
+@node uucp Options, , uucp Description, Invoking uucp
+@subsection uucp Options
+
+The following options may be given to @code{uucp}.
+
+@table @samp
+@item -c
+@itemx --nocopy
+Do not copy local source files to the spool directory. If they are
+removed before being processed by the @code{uucico} daemon, the copy
+will fail. The files must be readable by the @code{uucico} daemon, and
+by the invoking user.
+
+@item -C
+@itemx --copy
+Copy local source files to the spool directory. This is the default.
+
+@item -d
+@itemx --directories
+Create all necessary directories when doing the copy. This is the
+default.
+
+@item -f
+@itemx --nodirectories
+If any necessary directories do not exist for the destination file name,
+abort the copy.
+
+@item -R
+@itemx --recursive
+If any of the source file names are directories, copy their contents
+recursively to the destination (which must itself be a directory).
+
+@item -g grade
+@itemx --grade grade
+Set the grade of the file transfer command. Jobs of a higher grade are
+executed first. Grades run @kbd{0} to @kbd{9}, @kbd{A} to @kbd{Z},
+@kbd{a} to @kbd{z}, from high to low. @xref{When to Call}.
+
+@item -m
+@itemx --mail
+Report completion or failure of the file transfer by sending mail.
+
+@item -n user
+@itemx --notify user
+Report completion or failure of the file transfer by sending mail to the
+named user on the destination system.
+
+@item -r
+@itemx --nouucico
+Do not start the @code{uucico} daemon immediately; merely queue up the
+file transfer for later execution.
+
+@item -j
+@itemx --jobid
+Print the jobid on standard output. The job may be later cancelled by
+passing this jobid to the @samp{-kill} switch of @code{uustat}.
+@xref{Invoking uustat}.
+
+It is possible for some complex operations to produce more than one
+jobid, in which case each will be printed on a separate line. For
+example
+@example
+uucp sys1!~user1/file1 sys2!~user2/file2 ~user3
+@end example
+will generate two separate jobs, one for the system @samp{sys1} and one
+for the system @samp{sys2}.
+
+@item -W
+@itemx --noexpand
+Do not prepend remote relative file names with the current directory.
+
+@item -t
+@itemx --uuto
+This option is used by the @code{uuto} shell script; see @ref{Invoking
+uuto}. It causes @code{uucp} to interpret the final argument as
+@samp{system!user}. The file(s) are sent to
+@samp{~/receive/@var{user}/@var{local}} on the remote system, where
+@var{user} is from the final argument and @var{local} is the local UUCP
+system name. Also, @code{uucp} will act as though @samp{--notify user}
+were specified.
+
+@item -x type
+@itemx --debug type
+@itemx -I file
+@itemx --config file
+@itemx -v
+@itemx --version
+@itemx --help
+@xref{Standard Options}.
+@end table
+
+@node Invoking uux, Invoking uustat, Invoking uucp, Invoking the UUCP Programs
+@section Invoking uux
+
+@menu
+* uux Description:: Description of uux
+* uux Options:: Options Supported by uux
+* uux Examples:: Examples of uux Usage
+@end menu
+
+@node uux Description, uux Options, Invoking uux, Invoking uux
+@subsection uux Description
+
+@example
+uux [options] command
+@end example
+
+The @code{uux} command is used to execute a command on a remote system,
+or to execute a command on the local system using files from remote
+systems. The command is not executed immediately; the request is queued
+until the @code{uucico} daemon calls the system and transfers the
+necessary files. The daemon is started automatically unless one of the
+@samp{-r} or @samp{--nouucico} options is given.
+
+The actual command execution is done by the @code{uuxqt} daemon on the
+appropriate system.
+
+File arguments can be gathered from remote systems to the execution
+system, as can standard input. Standard output may be directed to a
+file on a remote system.
+
+The command name may be preceded by a system name followed by an
+exclamation point if it is to be executed on a remote system. An empty
+system name is taken as the local system.
+
+Each argument that contains an exclamation point is treated as naming a
+file. The system which the file is on is before the exclamation point,
+and the file name on that system follows it. An empty system name is
+taken as the local system; this form must be used to transfer a file to
+a command being executed on a remote system. If the file name is not
+absolute, the current working directory will be prepended to it; the
+result may not be meaningful on the remote system. A file name may
+begin with @samp{~/}, in which case it is relative to the UUCP public
+directory on the appropriate system. A file name may begin with
+@samp{~name/}, in which case it is relative to the home directory of the
+named user on the appropriate system.
+
+Standard input and output may be redirected as usual; the file names
+used may contain exclamation points to indicate that they are on remote
+systems. Note that the redirection characters must be quoted so that
+they are passed to @code{uux} rather than interpreted by the shell.
+Append redirection (@samp{>>}) does not work.
+
+All specified files are gathered together into a single directory
+before execution of the command begins. This means that each file
+must have a distinct name. For example,
+@example
+uux 'sys1!diff sys2!~user1/foo sys3!~user2/foo >!foo.diff'
+@end example
+will fail because both files will be copied to @samp{sys1} and stored
+under the name @file{foo}.
+
+Arguments may be quoted by parentheses to avoid interpretation of
+exclamation points. This is useful when executing the @code{uucp}
+command on a remote system.
+
+Most systems restrict the commands which may be executed using
+@samp{uux}. Many permit only the execution of @samp{rmail} and
+@samp{rnews}.
+
+A request to execute an empty command (e.g., @samp{uux sys!}) will
+create a poll file for the specified system; see @ref{Calling Other
+Systems} for an example of why this might be useful.
+
+@node uux Options, uux Examples, uux Description, Invoking uux
+@subsection uux Options
+
+The following options may be given to @code{uux}.
+
+@table @samp
+@item -
+@itemx -p
+@itemx --stdin
+Read standard input up to end of file, and use it as the standard input
+for the command to be executed.
+
+@item -c
+@itemx --nocopy
+Do not copy local files to the spool directory. This is the default.
+If they are removed before being processed by the @code{uucico} daemon,
+the copy will fail. The files must be readable by the @code{uucico}
+daemon, as well as the by the invoker of @code{uux}.
+
+@item -C
+@itemx --copy
+Copy local files to the spool directory.
+
+@item -l
+@itemx --link
+Link local files into the spool directory. If a file can not be linked
+because it is on a different device, it will be copied unless one of the
+@samp{-c} or @samp{--nocopy} options also appears (in other words, use
+of @samp{--link} switches the default from @samp{--nocopy} to
+@samp{--copy}). If the files are changed before being processed by the
+@code{uucico} daemon, the changed versions will be used. The files must
+be readable by the @code{uucico} daemon, as well as by the invoker of
+@code{uux}.
+
+@item -g grade
+@itemx --grade grade
+Set the grade of the file transfer command. Jobs of a higher grade are
+executed first. Grades run @kbd{0} to @kbd{9}, @kbd{A} to @kbd{Z},
+@kbd{a} to @kbd{z}, from high to low. @xref{When to Call}.
+
+@item -n
+@itemx --notification=no
+Do not send mail about the status of the job, even if it fails.
+
+@item -z
+@itemx --notification=error
+Send mail about the status of the job if an error occurs. For many
+@code{uuxqt} daemons, including the Taylor UUCP @code{uuxqt}, this is
+the default action; for those, @samp{--notification=error} will have no
+effect. However, some @code{uuxqt} daemons will send mail if the job
+succeeds, unless the @samp{--notification=error} option is used. Some
+other @code{uuxqt} daemons will not send mail even if the job fails,
+unless the @samp{--notification=error} option is used.
+
+@item -a address
+@itemx --requestor address
+Report job status, as controlled by the @samp{--notification} option, to
+the specified mail address.
+
+@item -r
+@itemx --nouucico
+Do not start the @code{uucico} daemon immediately; merely queue up the
+execution request for later processing.
+
+@item -j
+@itemx --jobid
+Print the jobid on standard output. A jobid will be generated for each
+file copy operation required to execute the command. These file copies
+may be later cancelled by passing the jobid to the @samp{-kill} switch
+of @code{uustat}. @xref{Invoking uustat}. Cancelling any file copies
+will make it impossible to complete execution of the job.
+
+@item -x type
+@itemx --debug type
+@itemx -v
+@itemx --version
+@itemx --help
+@xref{Standard Options}.
+@end table
+
+@node uux Examples, , uux Options, Invoking uux
+@subsection uux Examples
+
+Here are some examples of using @code{uux}.
+
+@example
+uux -z - sys1!rmail user1
+@end example
+This will execute the command @samp{rmail user1} on the system
+@samp{sys1}, giving it as standard input whatever is given to @code{uux}
+as standard input. If a failure occurs, mail will be sent to the user
+who ran the command.
+
+@example
+uux 'diff -c sys1!~user1/file1 sys2!~user2/file2 >!file.diff'
+@end example
+This will fetch the two named files from system @samp{sys1} and system
+@samp{sys2} and execute @samp{diff}, putting the result in
+@file{file.diff} in the current directory on the local system. The
+current directory must be writable by the @code{uuxqt} daemon for this
+to work.
+
+@example
+uux 'sys1!uucp ~user1/file1 (sys2!~user2/file2)'
+@end example
+Execute @code{uucp} on the system @samp{sys1} copying @file{file1} (on
+system @samp{sys1}) to @samp{sys2}. This illustrates the use of
+parentheses for quoting.
+
+@node Invoking uustat, Invoking uuname, Invoking uux, Invoking the UUCP Programs
+@section Invoking uustat
+
+@menu
+* uustat Description:: Description of uustat
+* uustat Options:: Options Supported by uustat
+* uustat Examples:: Examples of uustat Usage
+@end menu
+
+@node uustat Description, uustat Options, Invoking uustat, Invoking uustat
+@subsection uustat Description
+
+@example
+uustat -a
+uustat --all
+uustat [-eKRiMNQ] [-sS system] [-uU user] [-cC command] [-oy hours]
+ [-B lines] [--executions] [--kill-all] [--rejuvenate-all]
+ [--prompt] [--mail] [--notify] [--no-list] [--system system]
+ [--not-system system] [--user user] [--not-user user]
+ [--command command] [--not-command command] [--older-than hours]
+ [--younger-than hours] [--mail-lines lines]
+uustat [-kr jobid] [--kill jobid] [--rejuvenate jobid]
+uustat -q [-sS system] [-oy hours] [--system system]
+ [--not-system system ] [--older-than hours] [--younger-than hours]
+uustat --list [-sS system] [-oy hours] [--system system ]
+ [--not-system system] [--older-than hours] [--younger-than hours]
+uustat -m
+uustat --status
+uustat -p
+uustat --ps
+@end example
+
+The @code{uustat} command can display various types of status
+information about the UUCP system. It can also be used to cancel or
+rejuvenate requests made by @code{uucp} or @code{uux}.
+
+With no options, @code{uustat} displays all jobs queued up for the
+invoking user, as if given the @samp{--user} option with the appropriate
+argument.
+
+If any of the @samp{-a}, @samp{--all}, @samp{-e}, @samp{--executions},
+@samp{-s}, @samp{--system}, @samp{-S}, @samp{--not-system}, @samp{-u},
+@samp{--user}, @samp{-U}, @samp{--not-user}, @samp{-c},
+@samp{--command}, @samp{-C}, @samp{--not-command}, @samp{-o},
+@samp{--older-than}, @samp{-y}, or @samp{--younger-than} options are
+given, then all jobs which match the combined specifications are
+displayed.
+
+The @samp{-K} or @samp{--kill-all} option may be used to kill off a
+selected group of jobs, such as all jobs more than 7 days old.
+
+@node uustat Options, uustat Examples, uustat Description, Invoking uustat
+@subsection uustat Options
+
+The following options may be given to @code{uustat}.
+
+@table @samp
+@item -a
+@itemx --all
+List all queued file transfer requests.
+
+@item -e
+@itemx --executions
+List queued execution requests rather than queued file transfer
+requests. Queued execution requests are processed by @code{uuxqt}
+rather than @code{uucico}. Queued execution requests may be waiting for
+some file to be transferred from a remote system. They are created by
+an invocation of @code{uux}.
+
+@item -s system
+@itemx --system system
+List all jobs queued up for the named system. These options may be
+specified multiple times, in which case all jobs for all the named
+systems will be listed. If used with @samp{--list}, only the systems
+named will be listed.
+
+@item -S system
+@itemx --not-system system
+List all jobs queued for systems other than the one named. These
+options may be specified multiple times, in which case no jobs from any
+of the specified systems will be listed. If used with @samp{--list},
+only the systems not named will be listed. These options may not be
+used with @samp{-s} or @samp{--system}.
+
+@item -u user
+@itemx --user user
+List all jobs queued up for the named user. These options may be
+specified multiple times, in which case all jobs for all the named users
+will be listed.
+
+@item -U user
+@itemx --not-user user
+List all jobs queued up for users other than the one named. These
+options may be specified multiple times, in which case no jobs from any
+of the specified users will be listed. These options may not be used
+with @samp{-u} or @samp{--user}.
+
+@item -c command
+@itemx --command command
+List all jobs requesting the execution of the named command. If
+@samp{command} is @samp{ALL} this will list all jobs requesting the
+execution of some command (as opposed to simply requesting a file
+transfer). These options may be specified multiple times, in which case
+all jobs requesting any of the commands will be listed.
+
+@item -C command
+@itemx --not-command command
+List all jobs requesting execution of some command other than the named
+command, or, if @samp{command} is @samp{ALL}, list all jobs that simply
+request a file transfer (as opposed to requesting the execution of some
+command). These options may be specified multiple times, in which case
+no job requesting one of the specified commands will be listed. These
+options may not be used with @samp{-c} or @samp{--command}.
+
+@item -o hours
+@itemx --older-than hours
+List all queued jobs older than the given number of hours. If used with
+@samp{--list}, only systems whose oldest job is older than the given
+number of hours will be listed.
+
+@item -y hours
+@itemx --younger-than hours
+List all queued jobs younger than the given number of hours. If used
+with @samp{--list}, only systems whose oldest job is younger than the
+given number of hours will be listed.
+
+@item -k jobid
+@itemx --kill jobid
+Kill the named job. The job id is shown by the default output format,
+as well as by the @samp{-j} or @samp{--jobid} options to @code{uucp} or
+@code{uux}. A job may only be killed by the user who created the job,
+or by the UUCP administrator, or the superuser. The @samp{-k} or
+@samp{--kill} options may be used multiple times on the command line to
+kill several jobs.
+
+@item -r jobid
+@itemx --rejuvenate jobid
+Rejuvenate the named job. This will mark it as having been invoked at
+the current time, affecting the output of the @samp{-o},
+@samp{--older-than}, @samp{-y}, or @samp{--younger-than} options,
+possibly preserving it from any automated cleanup daemon. The job id is
+shown by the default output format, as well as by the @samp{-j} or
+@samp{--jobid} options to @code{uucp} or @code{uux}. A job may only be
+rejuvenated by the user who created the job, or by the UUCP
+administrator, or the superuser. The @samp{-r} or @samp{--rejuvenate}
+options may be used multiple times on the command line to rejuvenate
+several jobs.
+
+@item -q
+@itemx --list
+Display the status of commands, executions and conversations for all
+remote systems for which commands or executions are queued. The
+@samp{-s}, @samp{--system}, @samp{-S}, @samp{--not-system}, @samp{-o},
+@samp{--older-than}, @samp{-y}, and @samp{--younger-than} options may be
+used to restrict the systems which are listed. Systems for which no
+commands or executions are queued will never be listed.
+
+@item -m
+@itemx --status
+Display the status of conversations for all remote systems.
+
+@item -p
+@itemx --ps
+Display the status of all processes holding UUCP locks on systems or
+ports.
+
+@need 500
+@item -i
+@itemx --prompt
+For each listed job, prompt whether to kill the job or not. If the
+first character of the input line is @kbd{y} or @kbd{Y}, the job will be
+killed.
+
+@item -K
+@itemx --kill-all
+Automatically kill each listed job. This can be useful for automatic
+cleanup scripts, in conjunction with the @samp{--mail} and
+@samp{--notify} options.
+
+@item -R
+@itemx --rejuvenate-all
+Automatically rejuvenate each listed job. This may not be used with
+@samp{--kill-all}.
+
+@item -M
+@itemx --mail
+For each listed job, send mail to the UUCP administrator. If the job is
+killed (due to @samp{--kill-all}, or @samp{--prompt} with an affirmative
+response) the mail will indicate that. A comment specified by the
+@samp{--comment} option may be included. If the job is an execution,
+the initial portion of its standard input will be included in the mail
+message; the number of lines to include may be set with the
+@samp{--mail-lines} option (the default is 100). If the standard input
+contains null characters, it is assumed to be a binary file and is not
+included.
+
+@item -N
+@itemx --notify
+For each listed job, send mail to the user who requested the job. The
+mail is identical to that sent by the @samp{-M} or @samp{--mail}
+options.
+
+@item -W comment
+@itemx --comment comment
+Specify a comment to be included in mail sent with the @samp{-M},
+@samp{--mail}, @samp{-N}, or @samp{--notify} options.
+
+@item -B lines
+@itemx --mail-lines lines
+When the @samp{-M}, @samp{--mail}, @samp{-N}, or @samp{--notify} options
+are used to send mail about an execution with standard input, this
+option controls the number of lines of standard input to include in the
+message. The default is 100.
+
+@item -Q
+@itemx --no-list
+Do not actually list the job, but only take any actions indicated by the
+@samp{-i}, @samp{--prompt}, @samp{-K}, @samp{--kill-all}, @samp{-M},
+@samp{--mail}, @samp{-N} or @samp{--notify} options.
+
+@item -x type
+@itemx --debug type
+@itemx -I file
+@itemx --config file
+@itemx -v
+@itemx --version
+@itemx --help
+@xref{Standard Options}.
+@end table
+
+@node uustat Examples, , uustat Options, Invoking uustat
+@subsection uustat Examples
+
+@example
+uustat --all
+@end example
+Display status of all jobs. A sample output line is as follows:
+@smallexample
+bugsA027h bugs ian 04-01 13:50 Executing rmail ian@@airs.com (sending 12 bytes)
+@end smallexample
+The format is
+@example
+jobid system user queue-date command (size)
+@end example
+The jobid may be passed to the @samp{--kill} or @samp{--rejuvenate}
+options. The size indicates how much data is to be transferred to the
+remote system, and is absent for a file receive request. The
+@samp{--system}, @samp{--not-system}, @samp{--user}, @samp{--not-user},
+@samp{--command}, @samp{--not-command}, @samp{--older-than}, and
+@samp{--younger-than} options may be used to control which jobs are
+listed.
+
+@example
+uustat --executions
+@end example
+Display status of queued up execution requests. A sample output line
+is as follows:
+@smallexample
+bugs bugs!ian 05-20 12:51 rmail ian
+@end smallexample
+The format is
+@example
+system requestor queue-date command
+@end example
+The @samp{--system}, @samp{--not-system}, @samp{--user},
+@samp{--not-user}, @samp{--command}, @samp{--not-command},
+@samp{--older-than}, and @samp{--younger-than} options may be used to
+control which requests are listed.
+
+@example
+uustat --list
+@end example
+Display status for all systems with queued up commands. A sample
+output line is as follows:
+@smallexample
+bugs 4C (1 hour) 0X (0 secs) 04-01 14:45 Dial failed
+@end smallexample
+This indicates the system, the number of queued commands, the age of the
+oldest queued command, the number of queued local executions, the age of
+the oldest queued execution, the date of the last conversation, and the
+status of that conversation.
+
+@example
+uustat --status
+@end example
+Display conversation status for all remote systems. A sample output
+line is as follows:
+@smallexample
+bugs 04-01 15:51 Conversation complete
+@end smallexample
+This indicates the system, the date of the last conversation, and the
+status of that conversation. If the last conversation failed,
+@code{uustat} will indicate how many attempts have been made to call the
+system. If the retry period is currently preventing calls to that
+system, @code{uustat} also displays the time when the next call will be
+permitted.
+
+@example
+uustat --ps
+@end example
+Display the status of all processes holding UUCP locks. The output
+format is system dependent, as @code{uustat} simply invokes @code{ps} on
+each process holding a lock.
+
+@example
+uustat -c rmail -o 168 -K -Q -M -N -W "Queued for over 1 week"
+@end example
+This will kill all @samp{rmail} commands that have been queued up
+waiting for delivery for over 1 week (168 hours). For each such
+command, mail will be sent both to the UUCP administrator and to the
+user who requested the rmail execution. The mail message sent will
+include the string given by the @samp{-W} option. The @samp{-Q} option
+prevents any of the jobs from being listed on the terminal, so any
+output from the program will be error messages.
+
+@node Invoking uuname, Invoking uulog, Invoking uustat, Invoking the UUCP Programs
+@section Invoking uuname
+
+@example
+uuname [-a] [--aliases]
+uuname -l
+uuname --local
+@end example
+
+By default, the @code{uuname} program simply lists the names of all the
+remote systems mentioned in the UUCP configuration files.
+
+The @code{uuname} program may also be used to print the UUCP name of the
+local system.
+
+The @code{uuname} program is mainly for use by shell scripts.
+
+The following options may be given to @code{uuname}.
+
+@table @samp
+@item -a
+@itemx --aliases
+List all aliases for remote systems, as well as their canonical names.
+Aliases may be specified in the @file{sys} file (@pxref{Naming the
+System}).
+
+@item -l
+@itemx --local
+Print the UUCP name of the local system, rather than listing the names
+of all the remote systems.
+
+@item -x type
+@itemx --debug type
+@itemx -I file
+@itemx --config file
+@itemx -v
+@itemx --version
+@itemx --help
+@xref{Standard Options}.
+@end table
+
+@node Invoking uulog, Invoking uuto, Invoking uuname, Invoking the UUCP Programs
+@section Invoking uulog
+
+@example
+uulog [-#] [-n lines] [-sf system] [-u user] [-DSF] [--lines lines]
+ [--system system] [--user user] [--debuglog] [--statslog]
+ [--follow] [--follow=system]
+@end example
+
+The @code{uulog} program may be used to display the UUCP log file.
+Different options may be used to select which parts of the file to
+display.
+
+@table @samp
+@item -#
+@itemx -n lines
+@itemx --lines lines
+Here @samp{#} is a number; e.g., @samp{-10}. The specified number of
+lines is displayed from the end of the log file. The default is to
+display the entire log file, unless the @samp{-f}, @samp{-F}, or
+@samp{--follow} options are used, in which case the default is to
+display 10 lines.
+
+@item -s system
+@itemx --system system
+Display only log entries pertaining to the specified system.
+
+@item -u user
+@itemx --user user
+Display only log entries pertaining to the specified user.
+
+@item -D
+@itemx --debuglog
+Display the debugging log file.
+
+@item -S
+@itemx --statslog
+Display the statistics log file.
+
+@item -F
+@itemx --follow
+Keep displaying the log file forever, printing new lines as they are
+appended to the log file.
+
+@item -f system
+@itemx --follow=system
+Keep displaying the log file forever, displaying only log entries
+pertaining to the specified system.
+
+@item -X type
+@itemx --debug type
+@itemx -I file
+@itemx --config file
+@itemx -v
+@itemx --version
+@itemx --help
+@xref{Standard Options}. Note that @code{uulog} specifies the debugging
+type using @samp{-X} rather than the usual @samp{-x}.
+@end table
+
+The operation of @code{uulog} depends to some degree upon the type of
+log files generated by the UUCP programs. This is a compile time
+option. If the UUCP programs have been compiled to use HDB style log
+files, @code{uulog} changes in the following ways:
+
+@itemize @bullet
+@item
+The new options @samp{-x} and @samp{--uuxqtlog} may be used to list the
+@code{uuxqt} log file.
+
+@item
+It is no longer possible to omit all arguments: one of @samp{-s},
+@samp{--system}, @samp{-f}, @samp{--follow=system}, @samp{-D},
+@samp{--debuglog}, @samp{-S}, @samp{--statslog}, @samp{-x}, or
+@samp{--uuxqtlog} must be used.
+
+@item
+The option @samp{--system ANY} may be used to list log file entries
+which do not pertain to any particular system.
+@end itemize
+
+@node Invoking uuto, Invoking uupick, Invoking uulog, Invoking the UUCP Programs
+@section Invoking uuto
+
+@example
+uuto files... system!user
+@end example
+
+The @code{uuto} program may be used to conveniently send files to a
+particular user on a remote system. It will arrange for mail to be sent
+to the remote user when the files arrive on the remote system, and he or
+she may easily retrieve the files using the @code{uupick} program
+(@pxref{Invoking uupick}). Note that @code{uuto} does not provide any
+security---any user on the remote system can examine the files.
+
+The last argument specifies the system and user name to which to send
+the files. The other arguments are the files or directories to be sent.
+
+The @code{uuto} program is actually just a trivial shell script which
+invokes the @code{uucp} program with the appropriate arguments. Any
+option which may be given to @code{uucp} may also be given to
+@code{uuto}. @xref{Invoking uucp}.
+
+@need 2000
+@node Invoking uupick, Invoking cu, Invoking uuto, Invoking the UUCP Programs
+@section Invoking uupick
+
+@example
+uupick [-s system] [--system system]
+@end example
+
+The @code{uupick} program is used to conveniently retrieve files
+transferred by the @code{uuto} program.
+
+For each file transferred by @code{uuto}, @code{uupick} will display the
+source system, the file name, and whether the name refers to a regular
+file or a directory. It will then wait for the user to specify an
+action to take. One of the following commands must be entered:
+
+@table @samp
+@item q
+Quit out of @code{uupick}.
+
+@item RETURN
+Skip the file.
+
+@item m [directory]
+Move the file or directory to the specified directory. If no directory
+is specified, the file is moved to the current directory.
+
+@item a [directory]
+Move all files from this system to the specified directory. If no
+directory is specified, the files are moved to the current directory.
+
+@item p
+List the file on standard output.
+
+@item d
+Delete the file.
+
+@item ! [command]
+Execute @samp{command} as a shell escape.
+@end table
+
+The @samp{-s} or @samp{--system} option may be used to restrict
+@code{uupick} to only present files transferred from a particular
+system. The @code{uupick} program also supports the standard UUCP
+program options; see @ref{Standard Options}.
+
+@need 2000
+@node Invoking cu, Invoking uucico, Invoking uupick, Invoking the UUCP Programs
+@section Invoking cu
+
+@menu
+* cu Description:: Description of cu
+* cu Commands:: Commands Supported by cu
+* cu Variables:: Variables Supported by cu
+* cu Options:: Options Supported by cu
+@end menu
+
+@node cu Description, cu Commands, Invoking cu, Invoking cu
+@subsection cu Description
+
+@example
+cu [options] [system | phone | "dir"]
+@end example
+
+The @code{cu} program is used to call up another system and act as a
+dial in terminal. It can also do simple file transfers with no error
+checking.
+
+The @code{cu} program takes a single non-option argument.
+
+If the argument is the string @samp{dir} cu will make a direct
+connection to the port. This may only be used by users with write
+access to the port, as it permits reprogramming the modem.
+
+Otherwise, if the argument begins with a digit, it is taken to be a
+phone number to call.
+
+Otherwise, it is taken to be the name of a system to call.
+
+The @samp{-z} or @samp{--system} options may be used to name a system
+beginning with a digit, and the @samp{-c} or @samp{--phone} options may
+be used to name a phone number that does not begin with a digit.
+
+The @code{cu} program locates a port to use in the UUCP configuration
+files. If a simple system name is given, it will select a port
+appropriate for that system. The @samp{-p}, @samp{--port}, @samp{-l},
+@samp{--line}, @samp{-s}, and @samp{--speed} options may be used to
+control the port selection.
+
+When a connection is made to the remote system, @code{cu} forks into two
+processes. One reads from the port and writes to the terminal, while
+the other reads from the terminal and writes to the port.
+
+@node cu Commands, cu Variables, cu Description, Invoking cu
+@subsection cu Commands
+
+The @code{cu} program provides several commands that may be used during
+the conversation. The commands all begin with an escape character,
+which by default is @kbd{~} (tilde). The escape character is only
+recognized at the beginning of a line. To send an escape character to
+the remote system at the start of a line, it must be entered twice. All
+commands are either a single character or a word beginning with @kbd{%}
+(percent sign).
+
+The @code{cu} program recognizes the following commands.
+
+@table @samp
+@item ~.
+Terminate the conversation.
+
+@item ~! command
+Run command in a shell. If command is empty, starts up a shell.
+
+@item ~$ command
+Run command, sending the standard output to the remote system.
+
+@item ~| command
+Run command, taking the standard input from the remote system.
+
+@item ~+ command
+Run command, taking the standard input from the remote system and
+sending the standard output to the remote system.
+
+@item ~#, ~%break
+Send a break signal, if possible.
+
+@item ~c directory, ~%cd directory
+Change the local directory.
+
+@item ~> file
+Send a file to the remote system. This just dumps the file over the
+communication line. It is assumed that the remote system is expecting
+it.
+
+@item ~<
+Receive a file from the remote system. This prompts for the local file
+name and for the remote command to execute to begin the file transfer.
+It continues accepting data until the contents of the @samp{eofread}
+variable are seen.
+
+@item ~p from to
+@itemx ~%put from to
+Send a file to a remote Unix system. This runs the appropriate
+commands on the remote system.
+
+@item ~t from to
+@itemx ~%take from to
+Retrieve a file from a remote Unix system. This runs the appropriate
+commands on the remote system.
+
+@item ~s variable value
+Set a @code{cu} variable to the given value. If value is not given, the
+variable is set to @samp{true}.
+
+@item ~! variable
+Set a @code{cu} variable to @samp{false}.
+
+@item ~z
+Suspend the cu session. This is only supported on some systems. On
+systems for which @kbd{^Z} may be used to suspend a job, @samp{~^Z} will
+also suspend the session.
+
+@item ~%nostop
+Turn off XON/XOFF handling.
+
+@item ~%stop
+Turn on XON/XOFF handling.
+
+@item ~v
+List all the variables and their values.
+
+@item ~?
+List all commands.
+@end table
+
+@node cu Variables, cu Options, cu Commands, Invoking cu
+@subsection cu Variables
+
+The @code{cu} program also supports several variables. They may be
+listed with the @samp{~v} command, and set with the @samp{~s} or
+@samp{~!} commands.
+
+@table @samp
+@item escape
+The escape character. The default is @kbd{~} (tilde).
+
+@item delay
+If this variable is true, @code{cu} will delay for a second, after
+recognizing the escape character, before printing the name of the local
+system. The default is true.
+
+@item eol
+The list of characters which are considered to finish a line. The
+escape character is only recognized after one of these is seen. The
+default is @kbd{carriage return}, @kbd{^U}, @kbd{^C}, @kbd{^O},
+@kbd{^D}, @kbd{^S}, @kbd{^Q}, @kbd{^R}.
+
+@item binary
+Whether to transfer binary data when sending a file. If this is false,
+then newlines in the file being sent are converted to carriage returns.
+The default is false.
+
+@item binary-prefix
+A string used before sending a binary character in a file transfer, if
+the @samp{binary} variable is true. The default is @samp{^V}.
+
+@item echo-check
+Whether to check file transfers by examining what the remote system
+echoes back. This probably doesn't work very well. The default is
+false.
+
+@item echonl
+The character to look for after sending each line in a file. The
+default is carriage return.
+
+@item timeout
+The timeout to use, in seconds, when looking for a character, either
+when doing echo checking or when looking for the @samp{echonl}
+character. The default is 30.
+
+@item kill
+The character to use delete a line if the echo check fails. The default
+is @kbd{^U}.
+
+@item resend
+The number of times to resend a line if the echo check continues to
+fail. The default is 10.
+
+@item eofwrite
+The string to write after sending a file with the @samp{~>} command.
+The default is @samp{^D}.
+
+@item eofread
+The string to look for when receiving a file with the @samp{ ~<}
+command. The default is @samp{$}, which is intended to be a typical
+shell prompt.
+
+@item verbose
+Whether to print accumulated information during a file transfer. The
+default is true.
+@end table
+
+@node cu Options, , cu Variables, Invoking cu
+@subsection cu Options
+
+The following options may be given to @code{cu}.
+
+@table @samp
+@item -e
+@itemx --parity=even
+Use even parity.
+
+@item -o
+@itemx --parity=odd
+Use odd parity.
+
+@item --parity=none
+Use no parity. No parity is also used if both @samp{-e} and @samp{-o}
+are given.
+
+@item -h
+@itemx --halfduplex
+Echo characters locally (half-duplex mode).
+
+@item --nostop
+Turn off XON/XOFF handling (it is on by default).
+
+@item -E char
+@itemx --escape char
+Set the escape character. Initially @kbd{~} (tilde). To eliminate the
+escape character, use @samp{-E ''}.
+
+@item -z system
+@itemx --system system
+The system to call.
+
+@item -c phone-number
+@itemx --phone phone-number
+The phone number to call.
+
+@item -p port
+@itemx -a port
+@itemx --port port
+Name the port to use.
+
+@item -l line
+@itemx --line line
+Name the line to use by giving a device name. This may be used to dial
+out on ports that are not listed in the UUCP configuration files. Write
+access to the device is required.
+
+@item -s speed
+@itemx -#
+@itemx --speed speed
+The speed (baud rate) to use. Here, @samp{-#} means an actual number;
+e.g., @samp{-9600}.
+
+@item -n
+@itemx --prompt
+Prompt for the phone number to use.
+
+@item -d
+Enter debugging mode. Equivalent to @samp{--debug all}.
+
+@item -x type
+@itemx --debug type
+@itemx -I file
+@itemx --config file
+@itemx -v
+@itemx --version
+@itemx --help
+@xref{Standard Options}.
+@end table
+
+@node Invoking uucico, Invoking uuxqt, Invoking cu, Invoking the UUCP Programs
+@section Invoking uucico
+
+@menu
+* uucico Description:: Description of uucico
+* uucico Options:: Options Supported by uucico
+@end menu
+
+@node uucico Description, uucico Options, Invoking uucico, Invoking uucico
+@subsection uucico Description
+
+@example
+uucico [options]
+@end example
+
+The @code{uucico} daemon processes file transfer requests queued by
+@code{uucp} and @code{uux}. It is started when @code{uucp} or
+@code{uux} is run (unless they are given the @samp{-r} or
+@samp{--nouucico} options). It is also typically started periodically
+using entries in the @file{crontab} table(s).
+
+When @code{uucico} is invoked with @samp{-r1}, @samp{--master},
+@samp{-s}, @samp{--system}, or @samp{-S}, the daemon will place a call
+to a remote system, running in master mode. Otherwise the daemon will
+start in slave mode, accepting a call from a remote system. Typically a
+special login name will be set up for UUCP which automatically invokes
+@code{uucico} when a remote system calls in and logs in under that name.
+
+When @code{uucico} terminates, it invokes the @code{uuxqt} daemon,
+unless the @samp{-q} or @samp{--nouuxqt} options were given;
+@code{uuxqt} executes any work orders created by @code{uux} on a remote
+system, and any work orders created locally which have received remote
+files for which they were waiting.
+
+If a call fails, @code{uucico} will normally refuse to retry the call
+until a certain (configurable) amount of time has passed. This may be
+overriden by the @samp{-f}, @samp{--force}, or @samp{-S} options.
+
+The @samp{-l}, @samp{--prompt}, @samp{-e}, or @samp{--loop} options may
+be used to force @code{uucico} to produce its own prompts of
+@samp{login: } and @samp{Password:}. When another @code{uucico} daemon
+calls in, it will see these prompts and log in as usual. The login name
+and password will normally be checked against a separate list kept
+specially for @code{uucico}, rather than the @file{/etc/passwd} file
+(@pxref{Configuration File Names}). It is possible, on some systems, to
+configure @code{uucico} to use @file{/etc/passwd}. The @samp{-l} or
+@samp{--prompt} options will prompt once and then exit; in this mode the
+UUCP administrator, or the superuser, may use the @samp{-u} or
+@samp{--login} option to force a login name, in which case @code{uucico}
+will not prompt for one. The @samp{-e} or @samp{--loop} options will
+prompt again after the first session is over; in this mode @code{uucico}
+will permanently control a port.
+
+If @code{uucico} receives a @code{SIGQUIT}, @code{SIGTERM} or
+@code{SIGPIPE} signal, it will cleanly abort any current conversation
+with a remote system and exit. If it receives a @code{SIGHUP} signal it
+will abort any current conversation, but will continue to place calls to
+(if invoked with @samp{-r1} or @samp{--master}) and accept calls from
+(if invoked with @samp{-e} or @samp{--loop}) other systems. If it
+receives a @code{SIGINT} signal it will finish the current conversation,
+but will not place or accept any more calls.
+
+@node uucico Options, , uucico Description, Invoking uucico
+@subsection uucico Options
+
+The following options may be given to @code{uucico}.
+
+@table @samp
+@item -r1
+@itemx --master
+Start in master mode: call out to a remote system. Implied by
+@samp{-s}, @samp{--system}, or @samp{-S}. If no system is specified,
+sequentially call every system for which work is waiting to be done.
+
+@item -r0
+@itemx --slave
+Start in slave mode. This is the default.
+
+@item -s system
+@itemx --system system
+Call the specified system.
+
+@item -S system
+Call the specified system, ignoring any required wait. This is
+equivalent to @samp{-s system -f}.
+
+@item -f
+@itemx --force
+Ignore any required wait for any systems to be called.
+
+@item -l
+@itemx --prompt
+Prompt for login name and password using @samp{login: } and
+@samp{Password:}. This allows @code{uucico} to be easily run from
+@code{inetd}. The login name and password are checked against the UUCP
+password file, which need not be @file{/etc/passwd}. The @samp{--login}
+option may be used to force a login name, in which cause @code{uucico}
+will only prompt for a password.
+
+@item -p port
+@itemx --port port
+Specify a port to call out on or to listen to.
+
+@item -e
+@itemx --loop
+Enter an endless loop of login/password prompts and slave mode daemon
+execution. The program will not stop by itself; you must use
+@code{kill} to shut it down.
+
+@item -w
+@itemx --wait
+After calling out (to a particular system when @samp{-s},
+@samp{--system}, or @samp{-S} is specifed, or to all systems which have
+work when just @samp{-r1} or @samp{--master} is specifed), begin an
+endless loop as with @samp{--loop}.
+
+@item -q
+@itemx --nouuxqt
+Do not start the @code{uuxqt} daemon when finished.
+
+@item -c
+@itemx --quiet
+If no calls are permitted at this time, then don't make the call, but
+also do not put an error message in the log file and do not update the
+system status (as reported by @code{uustat}). This can be convenient
+for automated polling scripts, which may want to simply attempt to call
+every system rather than worry about which particular systems may be
+called at the moment. This option also suppresses the log message
+indicating that there is no work to be done.
+
+@item -C
+@itemx --ifwork
+Only call the system named by @samp{-s}, @samp{--system}, or @samp{-S}
+if there is work for that system.
+
+@item -D
+@itemx --nodetach
+Do not detach from the controlling terminal. Normally @code{uucico}
+detaches from the terminal before each call out to another system and
+before invoking @code{uuxqt}. This option prevents this.
+
+@item -u name
+@itemx --login name
+Set the login name to use instead of that of the invoking user. This
+option may only be used by the UUCP administrator or the superuser. If
+used with @samp{--prompt}, this will cause @code{uucico} to prompt only
+for the password, not the login name.
+
+@item -z
+@itemx --try-next
+If a call fails after the remote system is reached, try the next
+alternate rather than simply exiting.
+
+@item -i type
+@itemx --stdin type
+Set the type of port to use when using standard input. The only
+supported port type is TLI, and this is only available on machines which
+support the TLI networking interface. Specifying @samp{-i TLI} causes
+@code{uucico} to use TLI calls to perform I/O.
+
+@item -X type
+Same as the standard option @samp{-x type}. Provided for historical
+compatibility.
+
+@item -x type
+@itemx --debug type
+@itemx -I file
+@itemx --config file
+@itemx -v
+@itemx --version
+@itemx --help
+@xref{Standard Options}.
+@end table
+
+@node Invoking uuxqt, Invoking uuchk, Invoking uucico, Invoking the UUCP Programs
+@section Invoking uuxqt
+
+@example
+uuxqt [-c command] [-s system] [--command command] [--system system]
+@end example
+
+The @code{uuxqt} daemon executes commands requested by @code{uux} from
+either the local system or from remote systems. It is started
+automatically by the @code{uucico} daemon (unless @code{uucico} is given
+the @samp{-q} or @samp{--nouuxqt} options).
+
+There is normally no need to run @code{uuxqt}, since it will be invoked
+by @code{uucico}. However, @code{uuxqt} can be invoked directly to
+provide greater control over the processing of the work queue.
+
+Multiple invocations of @code{uuxqt} may be run at once, as controlled
+by the @code{max-uuxqts} configuration command; see @ref{Miscellaneous
+(config)}.
+
+The following options may be given to @code{uuxqt}.
+
+@table @samp
+@item -c command
+@itemx --command command
+Only execute requests for the specified command. For example,
+@samp{uuxqt --command rmail}.
+
+@item -s system
+@itemx --system system
+Only execute requests originating from the specified system.
+
+@item -x type
+@itemx --debug type
+@itemx -I file
+@itemx --config
+@itemx -v
+@itemx --version
+@itemx --help
+@xref{Standard Options}.
+@end table
+
+@node Invoking uuchk, Invoking uuconv, Invoking uuxqt, Invoking the UUCP Programs
+@section Invoking uuchk
+
+@example
+uuchk [-s system] [--system system]
+@end example
+
+The @code{uuchk} program displays information read from the UUCP
+configuration files. It should be used to ensure that UUCP has been
+configured correctly.
+
+The @samp{-s} or @samp{--system} options may be used to display the
+configuration for just the specified system, rather than for all
+systems. The @code{uuchk} program also supports the standard UUCP
+program options; see @ref{Standard Options}.
+
+@need 2000
+@node Invoking uuconv, Invoking uusched, Invoking uuchk, Invoking the UUCP Programs
+@section Invoking uuconv
+
+@example
+uuconv -i type -o type [-p program] [--program program]
+uuconv --input type --output type [-p program] [--program program]
+@end example
+
+The @code{uuconv} program converts UUCP configuration files from one
+format to another. The type of configuration file to read is specified
+using the @samp{-i} or @samp{--input} options. The type of
+configuration file to write is specified using the @samp{-o} or
+@samp{--output} options.
+
+The supported configuration file types are @samp{taylor}, @samp{v2}, and
+@samp{hdb}. For a description of the @samp{taylor} configuration files,
+see @ref{Configuration Files}. The other types of configuration files
+are used by traditional UUCP packages, and are not described in this
+manual.
+
+An input configuration of type @samp{v2} or @samp{hdb} is read from a
+compiled in directory (specified by @samp{oldconfigdir} in
+@file{Makefile}). An input configuration of type @samp{taylor} is read
+from a compiled in directory by default, but may be overridden with the
+standard @samp{-I} or @samp{--config} options (@pxref{Standard
+Options}).
+
+The output configuration is written to files in the directory in which
+@code{uuconv} is run.
+
+Some information in the input files may not be representable in the
+desired output format, in which case @code{uuconv} will silently discard
+it. The output of @code{uuconv} should be carefully checked before it
+is used. The @code{uuchk} program may be used for this purpose; see
+@ref{Invoking uuchk}.
+
+The @samp{-p} or @samp{--program} option may be used to convert specific
+@code{cu} configuration information, rather than the default of only
+converting the @code{uucp} configuration information; see @ref{config
+File}.
+
+The @code{uuchk} program also supports the standard UUCP program
+options; see @ref{Standard Options}.
+
+@node Invoking uusched, , Invoking uuconv, Invoking the UUCP Programs
+@section Invoking uusched
+
+The @code{uusched} program is actually just a shell script which invokes
+the @code{uucico} daemon. It is provided for backward compatibility.
+It causes @code{uucico} to call all systems for which there is work.
+Any option which may be given to @code{uucico} may also be given to
+@code{uusched}. @xref{Invoking uucico}.
+
+@node Installing Taylor UUCP, Using Taylor UUCP, Invoking the UUCP Programs, Top
+@chapter Installing Taylor UUCP
+
+These are the installation instructions for the Taylor UUCP package.
+
+@menu
+* Compilation:: Compiling Taylor UUCP
+* Testing the Compilation:: Testing the Compilation
+* Installing the Binaries:: Installing the Binaries
+* Configuration:: Configuring Taylor UUCP
+* Testing the Installation:: Testing the Installation
+@end menu
+
+@node Compilation, Testing the Compilation, Installing Taylor UUCP, Installing Taylor UUCP
+@section Compiling Taylor UUCP
+
+If you have a source code distribution, you must first compile it for
+your system. Free versions of Unix, such as Linux, NetBSD, or FreeBSD,
+often come with pre-compiled binary distributions of UUCP. If you are
+using a binary distribution, you may skip to the configuration section
+(@pxref{Configuration}).
+
+Follow these steps to compile the source code.
+
+@enumerate
+
+@item
+Take a look at the top of @file{Makefile.in} and set the appropriate
+values for your system. These control where the programs are installed
+and which user on the system owns them (normally they will be owned by a
+special user @code{uucp} rather than a real person; they should probably
+not be owned by @code{root}).
+
+@item
+Run the shell script @code{configure}. This script was generated using
+the @code{autoconf} program written by David MacKenzie of the Free
+Software Foundation. It takes a while to run. It will generate the
+file @file{config.h} based on @file{config.h.in}, and, for each source
+code directory, will generate @file{Makefile} based on
+@file{Makefile.in}.
+
+You can pass certain arguments to @code{configure} in the environment.
+Because @code{configure} will compile little test programs to see what
+is available on your system, you must tell it how to run your compiler.
+It recognizes the following environment variables:
+
+@table @samp
+@item CC
+The C compiler. If this is not set, then if @code{configure} can find
+@samp{gcc} it will use it, otherwise it will use @samp{cc}.
+@item CFLAGS
+Flags to pass to the C compiler when compiling the actual code. If this
+is not set, @code{configure} will use @samp{-g}.
+@item LDFLAGS
+Flags to pass to the C compiler when only linking, not compiling. If
+this is not set, @code{configure} will use the empty string.
+@item LIBS
+Libraries to pass to the C compiler. If this is not set,
+@code{configure} will use the empty string.
+@item INSTALL
+The program to run to install UUCP in the binary directory. If this is
+not set, then if @code{configure} finds the BSD @code{install} program,
+it will set this to @samp{install -c}; otherwise, it will use @samp{cp}.
+@end table
+
+Suppose, for example, you want to set the environment variable @samp{CC}
+to @samp{rcc}. If you are using @code{sh}, @code{bash}, or @code{ksh},
+invoke @code{configure} as @samp{CC=rcc configure}. If you are using
+@code{csh}, do @samp{setenv CC rcc; sh configure}.
+
+On some systems you will want to use @samp{LIBS=-lmalloc}. On Xenix
+derived versions of Unix do not use @samp{LIBS=-lx} because this will
+bring in the wrong versions of certain routines; if you want to use
+@samp{-lx} you must specify @samp{LIBS=-lc -lx}.
+
+If @code{configure} fails for some reason, or if you have a very weird
+system, you may have to configure the package by hand. To do this, copy
+the file @file{config.h.in} to @file{config.h} and edit it for your
+system. Then for each source directory (the top directory, and the
+subdirectories @file{lib}, @file{unix}, and @file{uuconf}) copy
+@file{Makefile.in} to @file{Makefile}, find the words within @kbd{@@}
+characters, and set them correctly for your system.
+
+@item
+Igor V. Semenyuk provided this (lightly edited) note about ISC Unix 3.0.
+The @code{configure} script will default to passing @samp{-posix} to
+@code{gcc}. However, using @samp{-posix} changes the environment to
+POSIX, and on ISC 3.0, at least, the default for @code{POSIX_NO_TRUNC}
+is 1. This can lead to a problem when @code{uuxqt} executes
+@code{rmail}. @code{IDA sendmail} has dbm configuration files named
+@file{mailertable.@{dir,pag@}}. Notice these names are 15 characters
+long. When @code{uuxqt} compiled with the @samp{-posix} executes
+@code{rmail}, which in turn executes @code{sendmail}, the later is run
+under the POSIX environment too. This leads to @code{sendmail} bombing
+out with @samp{'error opening 'M' database: name too long'
+(mailertable.dir)}. It's rather obscure behaviour, and it took me a day
+to find out the cause. I don't use the @samp{-posix} switch; instead, I
+run @code{gcc} with @samp{-D_POSIX_SOURCE}, and add @samp{-lcposix} to
+@samp{LIBS}.
+
+@item
+On some versions of BSDI there is a bug in the shell which causes the
+default value for @samp{CFLAGS} to be set incorrectly. If @samp{echo
+$@{CFLAGS--g@}} echoes @samp{g} rather than @samp{-g}, then you must set
+@samp{CFLAGS} in the environment before running configure. There is a
+patch available from BSDI for this bug. (Reported by David Vrona).
+
+@item
+On AIX 3.2.5, and possibly other versions, @samp{cc -E} does not work,
+reporting @samp{Option NOROCONST is not valid}. Test this before
+running configure by doing something like @samp{touch /tmp/foo.c; cc -E
+/tmp/foo.c}. This may give a warning about the file being empty, but it
+should not give the @samp{Option NOROCONST} warning. The workaround is
+to remove the @samp{,noroconst} entry from the @samp{options} clause in
+the @samp{cc} stanza in @file{/etc/xlc.cfg}. (Reported by Chris Lewis).
+
+@item
+You should verify that @code{configure} worked correctly by checking
+@file{config.h} and the instances of @file{Makefile}.
+
+@item
+Edit @file{policy.h} for your local system. The comments explain the
+various choices. The default values are intended to be reasonable, so
+you may not have to make any changes.
+
+You must decide what type of configuration files to use; for more
+information on the choices, see @ref{Configuration}.
+
+You must also decide what sort of spool directory you want to use. If
+this is a new installation, I recommend @samp{SPOOLDIR_TAYLOR};
+otherwise, select the spool directory corresponding to your existing
+UUCP package.
+
+@item
+Type @samp{make} to compile everything.
+
+The @file{tstuu.c} file is not particularly portable; if you can't
+figure out how to compile it you can safely ignore it, as it is only
+used for testing. To use STREAMS pseudo-terminals, tstuu.c must be
+compiled with @samp{-DHAVE_STREAMS_PTYS}; this is not determined by the
+configure script.
+
+If you have any other problems there is probably a bug in the
+@code{configure} script.
+
+@item
+Please report any problems you have. That is the only way they will get
+fixed for other people. Supply a patch if you can (@pxref{Patches}), or
+just ask for help.
+
+@end enumerate
+
+@node Testing the Compilation, Installing the Binaries, Compilation, Installing Taylor UUCP
+@section Testing the Compilation
+
+If your system supports pseudo-terminals, and you compiled the code to
+support the new style of configuration files (@code{HAVE_TAYLOR_CONFIG}
+was set to 1 in @file{policy.h}), you should be able to use the
+@code{tstuu} program to test the @code{uucico} daemon. If your system
+supports STREAMS based pseudo-terminals, you must compile tstuu.c with
+@samp{-DHAVE_STREAMS_PTYS}. (The STREAMS based code was contributed by
+Marc Boucher).
+
+To run @code{tstuu}, just type @samp{tstuu} with no arguments. You must
+run it in the compilation directory, since it runs @file{./uucp},
+@file{./uux} and @file{./uucico}. The @code{tstuu} program will run a
+lengthy series of tests (it takes over ten minutes on a slow VAX). You
+will need a fair amount of space available in @file{/usr/tmp}. You will
+probably want to put it in the background. Do not use @kbd{^Z}, because
+the program traps on @code{SIGCHLD} and winds up dying. The
+@code{tstuu} program will create a directory @file{/usr/tmp/tstuu} and
+fill it with configuration files, and create spool directories
+@file{/usr/tmp/tstuu/spool1} and @file{/usr/tmp/tstuu/spool2}.
+
+If your system does not support the @code{FIONREAD} call, the
+@samp{tstuu} program will run very slowly. This may or may not get
+fixed in a later version.
+
+The @code{tstuu} program will finish with an execute file named
+@file{X.@var{something}} and a data file named @file{D.@var{something}}
+in the directory @file{/usr/tmp/tstuu/spool1} (or, more likely, in
+subdirectories, depending on the choice of @code{SPOOLDIR} in
+@file{policy.h}). Two log files will be created in the directory
+@file{/usr/tmp/tstuu}. They will be named @file{Log1} and @file{Log2},
+or, if you have selected @code{HAVE_HDB_LOGGING} in @file{policy.h},
+@file{Log1/uucico/test2} and @file{Log2/uucico/test1}. There should be
+no errors in the log files.
+
+You can test @code{uuxqt} with @samp{./uuxqt -I /usr/tmp/tstuu/Config1}.
+This should leave a command file @file{C.@var{something}} and a data
+file @file{D.@var{something}} in @file{/usr/tmp/tstuu/spool1} or in
+subdirectories. Again, there should be no errors in the log file.
+
+Assuming you compiled the code with debugging enabled, the @samp{-x}
+switch can be used to set debugging modes; see the @code{debug} command
+for details (@pxref{Debugging Levels}). Use @samp{-x all} to turn on
+all debugging and generate far more output than you will ever want to
+see. The @code{uucico} daemons will put debugging output in the files
+@file{Debug1} and @file{Debug2} in the directory @file{/usr/tmp/tstuu}.
+After that, you're pretty much on your own.
+
+On some systems you can also use @code{tstuu} to test @code{uucico}
+against the system @code{uucico}, by using the @samp{-u} switch. For
+this to work, change the definitions of @code{ZUUCICO_CMD} and
+@code{UUCICO_EXECL} at the top of @file{tstuu.c} to something
+appropriate for your system. The definitions in @file{tstuu.c} are what
+I used for Ultrix 4.0, on which @file{/usr/lib/uucp/uucico} is
+particularly obstinate about being run as a child; I was only able to
+run it by creating a login name with no password whose shell was
+@file{/usr/lib/uucp/uucico}. Calling login in this way will leave fake
+entries in @file{wtmp} and @file{utmp}; if you compile @file{tstout.c}
+(in the @file{contrib} directory) as a setuid @code{root} program,
+@code{tstuu} will run it to clear those entries out. On most systems,
+such hackery should not be necessary, although on SCO I had to su to
+@code{root} (@code{uucp} might also have worked) before I could run
+@file{/usr/lib/uucp/uucico}.
+
+You can test @code{uucp} and @code{uux} (give them the @samp{-r} switch
+to keep them from starting @code{uucico}) to make sure they create the
+right sorts of files. Unfortunately, if you don't know what the right
+sorts of files are, I'm not going to tell you here.
+
+If you can not run @code{tstuu}, or if it fails inexplicably, don't
+worry about it too much. On some systems @code{tstuu} will fail because
+of problems using pseudo terminals, which will not matter in normal use.
+The real test of the package is talking to another system.
+
+@node Installing the Binaries, Configuration, Testing the Compilation, Installing Taylor UUCP
+@section Installing the Binaries
+
+You can install the executable files by becoming @code{root} and typing
+@samp{make install}. Or you can look at what @samp{make install} does
+and do it by hand. It tries to preserve your old programs, if any, but
+it only does this the first time Taylor UUCP is installed (so that if
+you install several versions of Taylor UUCP, you can still go back to
+your original UUCP programs). You can retrieve the original programs by
+typing @samp{make uninstall}.
+
+Note that by default the programs are compiled with debugging
+information, and they are not stripped when they are installed. You may
+want to strip the installed programs to save disk space. For more
+information, see your system documentation for the @code{strip} program.
+
+Of course, simply installing the executable files is not enough. You
+must also arrange for them to be used correctly.
+
+@node Configuration, Testing the Installation, Installing the Binaries, Installing Taylor UUCP
+@section Configuring Taylor UUCP
+
+You will have to decide what types of configuration files you want to
+use. This package supports a new sort of configuration file; see
+@ref{Configuration Files}. It also supports V2 configuration files
+(@file{L.sys}, @file{L-devices}, etc.) and HDB configuration files
+(@file{Systems}, @file{Devices}, etc.). No documentation is provided
+for V2 or HDB configuration files. All types of configuration files can
+be used at once, if you are so inclined. Currently using just V2
+configuration files is not really possible, because there is no way to
+specify a dialer (there are no built in dialers, and the program does
+not know how to read @file{acucap} or @file{modemcap}); however, V2
+configuration files can be used with a new style dial file (@pxref{dial
+File}), or with a HDB @file{Dialers} file.
+
+Use of HDB configuration files has two known bugs. A blank line in the
+middle of an entry in the @file{Permissions} file will not be ignored as
+it should be. Dialer programs, as found in some versions of HDB, are
+not recognized directly. If you must use a dialer program, rather than
+an entry in @file{Devices}, you must use the @code{chat-program} command
+in a new style dial file; see @ref{dial File}. You will have to invoke
+the dialer program via a shell script or another program, since an exit
+code of 0 is required to recognize success; the @code{dialHDB} program
+in the @file{contrib} directory may be used for this purpose.
+
+The @code{uuconv} (@pxref{Invoking uuconv}) program can be used to
+convert from V2 or HDB configuration files to the new style (it can also
+do the reverse translation, if you are so inclined). It will not do all
+of the work, and the results should be carefully checked, but it can be
+quite useful.
+
+If you are installing a new system, you will, of course, have to write
+the configuration files; see @ref{Configuration Files} for details on
+how to do this.
+
+After writing the configuration files, use the @code{uuchk} program to
+verify that they are what you expect; see @ref{Invoking uuchk}.
+
+@node Testing the Installation, , Configuration, Installing Taylor UUCP
+@section Testing the Installation
+
+After you have written the configuration files, and verified them with
+the @code{uuchk} program (@pxref{Invoking uuchk}), you must check that
+UUCP can correctly contact another system.
+
+Tell @code{uucico} to dial out to the system by using the @samp{-s}
+system switch (e.g., @samp{uucico -s uunet}). The log file should tell
+you what happens. The exact location of the log file depends upon the
+settings in @file{policy.h} when you compiled the program, and on the
+use of the @code{logfile} command in the @file{config} file. Typical
+locations are @file{/usr/spool/uucp/Log} or a subdirectory under
+@file{/usr/spool/uucp/.Log}.
+
+If you compiled the code with debugging enabled, you can use debugging
+mode to get a great deal of information about what sort of data is
+flowing back and forth; the various possibilities are described with the
+@code{debug} command (@pxref{Debugging Levels}). When initially setting
+up a connection @samp{-x chat} is probably the most useful (e.g.,
+@samp{uucico -s uunet -x chat}); you may also want to use @samp{-x
+handshake,incoming,outgoing}. You can use @samp{-x} multiple times on
+one command line, or you can give it comma separated arguments as in the
+last example. Use @samp{-x all} to turn on all possible debugging
+information.
+
+The debugging information is written to a file, normally
+@file{/usr/spool/uucp/Debug}, although the default can be changed in
+@file{policy.h}, and the @file{config} file can override the default
+with the @code{debugfile} command. The debugging file may contain
+passwords and some file contents as they are transmitted over the line,
+so the debugging file is only readable by the @code{uucp} user.
+
+You can use the @samp{-f} switch to force @code{uucico} to call out even
+if the last call failed recently; using @samp{-S} when naming a system
+has the same effect. Otherwise the status file (in the @file{.Status}
+subdirectory of the main spool directory, normally
+@file{/usr/spool/uucp}) (@pxref{Status Directory}) will prevent too many
+attempts from occurring in rapid succession.
+
+On older System V based systems which do not have the @code{setreuid}
+system call, problems may arise if ordinary users can start an execution
+of @code{uuxqt}, perhaps indirectly via @code{uucp} or @code{uux}. UUCP
+jobs may wind up executing with a real user ID of the user who invoked
+@code{uuxqt}, which can cause problems if the UUCP job checks the real
+user ID for security purposes. On such systems, it is safest to put
+@samp{run-uuxqt never} (@pxref{Miscellaneous (config)}) in the
+@file{config} file, so that @code{uucico} never starts @code{uuxqt}, and
+invoke @code{uuxqt} directly from a @file{crontab} file.
+
+Please let me know about any problems you have and how you got around
+them. If you do report a problem, please include the version number of
+the package you are using, the operating system you are running it on,
+and a sample of the debugging file showing the problem (debugging
+information is usually what is needed, not just the log file). General
+questions such as ``why doesn't @code{uucico} dial out'' are impossible
+to answer without much more information.
+
+@node Using Taylor UUCP, Configuration Files, Installing Taylor UUCP, Top
+@chapter Using Taylor UUCP
+
+@menu
+* Calling Other Systems:: Calling Other Systems
+* Accepting Calls:: Accepting Calls
+* Mail and News:: Using UUCP for Mail and News
+* The Spool Directory Layout:: The Spool Directory Layout
+* Spool Directory Cleaning:: Cleaning the UUCP Spool Directory
+@end menu
+
+@node Calling Other Systems, Accepting Calls, Using Taylor UUCP, Using Taylor UUCP
+@section Calling Other Systems
+@cindex calling out
+
+By default @code{uucp} and @code{uux} will automatically start up
+@code{uucico} to call another system whenever work is queued up.
+However, the call may fail, or you may have put in time restrictions
+which prevent the call at that time (perhaps because telephone rates are
+high) (@pxref{When to Call}). Also, a remote system may have work
+queued up for your system, but may not be calling you for some reason
+(perhaps you have agreed that your system should always place the call).
+To make sure that work gets transferred between the systems withing a
+reasonable time period, you should arrange to periodically invoke
+@code{uucico}.
+
+These periodic invocations are normally triggered by entries in the
+@file{crontab} file. The exact format of @file{crontab} files, and how
+new entries are added, varies from system to system; check your local
+documentation (try @samp{man cron}).
+
+To attempt to call all systems with outstanding work, use the command
+@samp{uucico -r1}. To attempt to call a particular system, use the
+command @samp{uucico -s @var{system}}. To attempt to call a particular
+system, but only if there is work for it, use the command @samp{uucico
+-C -s @var{system}}. (@pxref{Invoking uucico}).
+
+A common case is to want to try to call a system at a certain time, with
+periodic retries if the call fails. A simple way to do this is to
+create an empty UUCP command file, known as a @dfn{poll file}. If a
+poll file exists for a system, then @samp{uucico -r1} will place a call
+to it. If the call succeeds, the poll file will be deleted.
+
+A poll file can be easily created using the @samp{uux} command, by
+requesting the execution of an empty command. To create a poll file for
+@var{system}, just do something like this:
+@example
+uux -r @var{system}!
+@end example
+The @samp{-r} tells @samp{uux} to not start up @samp{uucico}
+immediately. Of course, if you do want @samp{uucico} to start up right
+away, omit the @samp{-r}; if the call fails, the poll file will be left
+around to cause a later call.
+
+For example, I use the following crontab entries locally:
+
+@example
+45 * * * * /bin/echo /usr/lib/uucp/uucico -r1 | /bin/su uucpa
+40 4,10,15 * * * /usr/bin/uux -r uunet!
+@end example
+
+Every hour, at 45 minutes past, this will check if there is any work to
+be done, and, if there is, will call the appropriate system. Also, at
+4:40am, 10:40am, and 3:40pm, this will create a poll file file for
+@samp{uunet}, forcing the next run of @code{uucico} to call
+@samp{uunet}.
+
+@node Accepting Calls, Mail and News, Calling Other Systems, Using Taylor UUCP
+@section Accepting Calls
+@cindex calling in
+@cindex accepting calls
+
+To accept calls from another system, you must arrange matters such that
+when that system calls in, it automatically invokes @code{uucico} on
+your system.
+
+The most common arrangement is to create a special user name and
+password for incoming UUCP calls. This user name typically uses the
+same user ID as the regular @code{uucp} user (Unix permits several user
+names to share the same user ID). The shell for this user name should
+be set to @code{uucico}.
+
+Here is a sample @file{/etc/passwd} line to accept calls from a remote
+system named airs:
+@example
+Uairs:@var{password}:4:8:airs UUCP:/usr/spool/uucp:/usr/lib/uucp/uucico
+@end example
+The details may vary on your system. You must use reasonable user and
+group ID's. You must use the correct file name for @code{uucico}. The
+@var{password} must appear in the UUCP configuration files on the remote
+system, but will otherwise never be seen or typed by a human.
+
+Note that @code{uucico} appears as the login shell, and that it will be
+run with no arguments. This means that it will start in slave mode and
+accept an incoming connection. @xref{Invoking uucico}.
+
+On some systems, creating an empty file named @file{.hushlogin} in the
+home directory will skip the printing of various bits of information
+when the remote @code{uucico} logs in, speeding up the UUCP connection
+process.
+
+For the greatest security, each system which calls in should use a
+different user name, each with a different password, and the
+@code{called-login} command should be used in the @file{sys} file to
+ensure that the correct login name is used. @xref{Accepting a Call},
+and see @ref{Security}.
+
+If you never need to dial out from your system, but only accept incoming
+calls, you can arrange for @code{uucico} to handle logins itself,
+completely controlling the port, by using the @samp{--endless} option.
+@xref{Invoking uucico}.
+
+@node Mail and News, The Spool Directory Layout, Accepting Calls, Using Taylor UUCP
+@section Using UUCP for Mail and News.
+@cindex mail
+@cindex news
+
+Taylor UUCP does not include a mail package. All Unix systems come with
+some sort of mail delivery agent, typically @code{sendmail} or
+@code{MMDF}. Source code is available for some alternative mail
+delivery agents, such as @code{IDA sendmail} and @code{smail}.
+
+Taylor UUCP also does not include a news package. The two major Unix
+news packages are @code{C-news} and @code{INN}. Both are available in
+source code form.
+
+Configuring and using mail delivery agents is a notoriously complex
+topic, and I will not be discussing it here. Configuring news systems
+is usually simpler, but I will not be discussing that either. I will
+merely describe the interactions between the mail and news systems and
+UUCP.
+
+A mail or news system interacts with UUCP in two ways: sending and
+receiving.
+
+@menu
+* Sending mail or news:: Sending mail or news via UUCP
+* Receiving mail or news:: Receiving mail or news via UUCP
+@end menu
+
+@node Sending mail or news, Receiving mail or news, Mail and News, Mail and News
+@subsection Sending mail or news via UUCP
+
+When mail is to be sent from your machine to another machine via UUCP,
+the mail delivery agent will invoke @code{uux}. It will generally run a
+command such as @samp{uux - @var{system}!rmail @var{address}}, where
+@var{system} is the remote system to which the mail is being sent. It
+may pass other options to @code{uux}, such as @samp{-r} or @samp{-g}
+(@pxref{Invoking uux}).
+
+The news system also invokes @code{uux} in order to transfer articles to
+another system. The only difference is that news will use @code{uux} to
+invoke @code{rnews} on the remote system, rather than @code{rmail}.
+
+You should arrange for your mail and news systems to invoke the Taylor
+UUCP version of @code{uux}. If you only have Taylor UUCP, or if you
+simply replace any existing version of @code{uux} with the Taylor UUCP
+version, this will probably happen automatically. However, if you have
+two UUCP packages installed on your system, you will probably have to
+modify the mail and news configuration files in some way.
+
+Actually, if both the system UUCP and Taylor UUCP are using the same
+spool directory format, the system @code{uux} will probably work fine
+with the Taylor @code{uucico} (the reverse is not the case: the Taylor
+@code{uux} requires the Taylor @code{uucico}). However, data transfer
+will be somewhat more efficient if the Taylor @code{uux} is used.
+
+@node Receiving mail or news, , Sending mail or news, Mail and News
+@subsection Receiving mail or news via UUCP
+
+To receive mail, all that is necessary is for UUCP to invoke
+@code{rmail}. Any mail delivery agent will provide an appropriate
+version of @code{rmail}; you must simply make sure that it is in the
+command path used by UUCP (it almost certainly already is). The default
+command path is set in @file{policy.h}, and it may be overridden for a
+particular system by the @code{command-path} command
+(@pxref{Miscellaneous (sys)}).
+
+Similarly, for news UUCP must be able to invoke @code{rnews}. Any news
+system will provide a version of @code{rnews}, and you must ensure that
+is in a directory on the path that UUCP will search.
+
+@node The Spool Directory Layout, Spool Directory Cleaning, Mail and News, Using Taylor UUCP
+@section The Spool Directory Layout
+@cindex spool directory
+
+In general, the layout of the spool directory may be safely ignored.
+However, it is documented here for the curious. This description only
+covers the @code{SPOOLDIR_TAYLOR} layout. The ways in which the other
+spool directory layouts differ are described in the source file
+@file{unix/spool.c}.
+
+Directories and files are only created when they are needed, so a
+typical system will not have all of the entries described here.
+
+@menu
+* System Spool Directories:: System Spool Directories
+* Status Directory:: Status Spool Directory
+* Execution Subdirectories:: Execution Spool Subdirectories
+* Other Spool Subdirectories:: Other Spool Subdirectories
+* Spool Lock Files:: Spool Directory Lock Files
+@end menu
+
+@node System Spool Directories, Status Directory, The Spool Directory Layout, The Spool Directory Layout
+@subsection System Spool Directories
+@cindex system spool directories
+
+@table @file
+@item @var{system}
+There is a subdirectory of the main spool directory for each remote
+system.
+
+@item @var{system}/C.
+This directory stores files describing file transfer commands to be sent
+to the @var{system}. Each file name starts with @file{C.@var{g}}, where
+@var{g} is the job grade. Each file contains one or more commands. For
+details of the commands, see @ref{UUCP Protocol Commands}.
+
+@item @var{system}/D.
+This directory stores data files. Files with names like
+@file{D.@var{g}@var{ssss}}, where @var{g} is the grade and @var{ssss} is
+a sequence number, are waiting to be transferred to the @var{system}, as
+directed by the files in the @file{@var{system}/C.} directory. Files
+with other names, typically @file{D.@var{system}@var{g}@var{ssss}}, have
+been received from @var{system} and are waiting to be processed by an
+execution file in the @file{@var{system}/X.} directory.
+
+@item @var{system}/D.X
+This directory stores data files which will become execution files on
+the remote system. In current practice, this directory rarely exists,
+because most simple executions, including typical uses of @code{rmail}
+and @code{rnews}, send an @samp{E} command rather than an execution file
+(@pxref{The E Command}).
+
+@item @var{system}/X.
+This directory stores execution files which have been received from
+@var{system}. This directory normally exists, even though the
+corresponding @file{D.X} directory does not, because @code{uucico} will
+create an execution file on the fly when it receives an @samp{E}
+command.
+
+@item @var{system}/SEQF
+This file holds the sequence number of the last job sent to
+@var{system}. The sequence number is used to ensure that file names are
+unique in the remote system spool directory. The file is four bytes
+long. Sequence numbers are composed of digits and the upper case
+letters.
+@end table
+
+@node Status Directory, Execution Subdirectories, System Spool Directories, The Spool Directory Layout
+@subsection Status Directory
+
+@table @file
+@item .Status
+@cindex .Status
+@cindex status files
+This directory holds status files for each remote system. The name of
+the status file is the name of the system which it describes. Each
+status file describes the last conversation with the system. Running
+@code{uustat --status} basically just formats and prints the contents of
+the status files (@pxref{uustat Examples}).
+
+Each status file has a single text line with six fields.
+
+@table @asis
+@item code
+A code indicating the status of the last conversation. The following
+values are defined, though not all are actually used.
+@table @samp
+@item 0
+Conversation completed normally.
+@item 1
+@code{uucico} was unable to open the port.
+@item 2
+The last call to the system failed while dailing.
+@item 3
+The last call to the system failed while logging in.
+@item 4
+The last call to the system failed during the initial UUCP protocol
+handshake (@pxref{The Initial Handshake}).
+@item 5
+The last call to the system failed after the initial handshake.
+@item 6
+@code{uucico} is currently talking to the system.
+@item 7
+The last call to the system failed because it was the wrong time to call
+(this is not used if calling the system is never permitted).
+@end table
+
+@item retries
+The number of retries since the last successful call.
+
+@item time of last call
+The time of the last call, in seconds since the epoch (as returned by
+the @code{time} system call).
+
+@item wait
+If the last call failed, this is the number of seconds since the last
+call before @code{uucico} may attempt another call. This is set based
+on the retry time; see @ref{When to Call}. The @samp{-f} or @samp{-S}
+options to @code{uucico} direct it to ignore this wait time; see
+@ref{Invoking uucico}.
+
+@item description
+A text description of the status, corresponding to the code in the first
+field. This may contain spaces.
+
+@item system name
+The name of the remote system.
+@end table
+@end table
+
+@node Execution Subdirectories, Other Spool Subdirectories, Status Directory, The Spool Directory Layout
+@subsection Execution Subdirectories
+
+@table @file
+@item .Xqtdir
+@cindex .Xqtdir
+When @code{uuxqt} executes a job requested by @code{uux}, it first
+changes the working directory to the @file{.Xqtdir} subdirectory. This
+permits the job to create any sort of temporary file without worrying
+about overwriting other files in the spool directory. Any files left
+in the @file{.Xqtdir} subdirectory are removed after each execution is
+complete.
+
+@item .Xqtdir@var{nnnn}
+When several instances of @code{uuxqt} are executing simultaneously,
+each one executes jobs in a separate directory. The first uses
+@file{.Xqtdir}, the second uses @file{.Xqtdir0001}, the third uses
+@file{.Xqtdir0002}, and so forth.
+
+@item .Corrupt
+@cindex .Corrupt
+If @code{uuxqt} encounters an execution file which it is unable to
+parse, it saves it in the @file{.Corrupt} directory, and sends mail
+about it to the UUCP administrator.
+
+@item .Failed
+@cindex .Failed
+If @code{uuxqt} executes a job, and the job fails, and there is enough
+disk space to hold the command file and all the data files, then
+@code{uuxqt} saves the files in the @file{.Failed} directory, and sends
+mail about it to the UUCP administrator.
+@end table
+
+@node Other Spool Subdirectories, Spool Lock Files, Execution Subdirectories, The Spool Directory Layout
+@subsection Other Spool Subdirectories
+
+@table @file
+@item .Sequence
+@cindex .Sequence
+This directory holds conversation sequence number files. These are used
+if the @code{sequence} command is used for a system
+(@pxref{Miscellaneous (sys)}). The sequence number for the system
+@var{system} is stored in the file @file{.Sequence/@var{system}}. It is
+simply stored as a printable number.
+
+@item .Temp
+@cindex .Temp
+This directory holds data files as they are being received from a remote
+system, before they are moved to their final destination. For file send
+requests which use a valid temporary file name in the @var{temp} field
+of the @samp{S} or @samp{E} command (@pxref{The S Command}),
+@code{uucico} receives the file into
+@file{.Temp/@var{system}/@var{temp}}, where @var{system} is the name of
+the remote system, and @var{temp} is the temporary file name. If a
+conversation fails during a file transfer, these files are used to
+automatically restart the file transfer from the point of failure.
+
+If the @samp{S} or @samp{E} command does not include a temporary file
+name, automatic restart is not possible. In this case, the files are
+received into a randomly named file in the @file{.Temp} directory
+itself.
+
+@item .Preserve
+@cindex .Preserve
+This directory holds data files which could not be transferred to a
+remote system for some reason (for example, the data file might be
+large, and exceed size restrictions imposed by the remote system). When
+a locally requested file transfer fails, @code{uucico} will store the
+data file in the @file{.Preserve} directory, and send mail to the
+requestor describing the failure and naming the saved file.
+
+@item .Received
+@cindex .Received
+This directory records which files have been received. If a
+conversation fails just after @code{uucico} acknowledges receipt of a
+file, it is possible for the acknowledgement to be lost. If this
+happens, the remote system will resend the file. If the file were an
+execution request, and @code{uucico} did not keep track of which files
+it had already received, this could lead to the execution being
+performed twice.
+
+To avoid this problem, when a conversation fails, @code{uucico} records
+each file that has been received, but for which the remote system may
+not have received the acknowledgement. It records this information by
+creating an empty file with the name
+@file{.Received/@var{system}/@var{temp}}, where @var{system} is the name
+of the remote system, and @var{temp} is the @var{temp} field of the
+@samp{S} or @samp{E} command from the remote system (@pxref{The S
+Command}). Then, if the remote system offers the file again in the next
+conversation, @code{uucico} refuses the send request and deletes the
+record in the @file{.Received} directory. This approach only works for
+file sends which use a temporary file name, but this is true of all
+execution requests.
+@end table
+
+@node Spool Lock Files, , Other Spool Subdirectories, The Spool Directory Layout
+@subsection Lock Files in the Spool Directory
+@cindex lock files in spool directory
+
+Lock files for devices and systems are stored in the lock directory,
+which may or may not be the same as the spool directory. The lock
+directory is set at compilation time by @code{LOCKDIR} in
+@file{policy.h}, which may be overridden by the @code{lockdir} command
+in the @file{config} file (@pxref{Miscellaneous (config)}).
+
+For a description of the names used for device lock files, and the
+format of the contents of a lock file, see @ref{UUCP Lock Files}.
+
+@table @file
+@item LCK..@var{sys}
+@cindex LCK..@var{sys}
+@cindex system lock files
+A lock file for a system, where @var{sys} is the system name. As noted
+above, these lock files are kept in the lock directory, which may not be
+the spool directory. These lock files are created by @code{uucico}
+while talking to a remote system, and are used to prevent multiple
+simultaneous conversations with a system.
+
+On systems which limit file names to 14 characters, only the first eight
+characters of the system name are used in the lock file name. This
+requires that the names of each directly connected remote system be
+unique in the first eight characters.
+
+@item LCK.XQT.@var{NN}
+@cindex LCK.XQT.@var{NN}
+When @code{uuxqt} starts up, it uses lock files to determine how many
+other @code{uuxqt} daemons are currently running. It first tries to
+lock @file{LCK.XQT.0}, then @file{LCK.XQT.1}, and so forth. This is
+used to implement the @code{max-uuxqts} command (@pxref{Miscellaneous
+(config)}). It is also used to parcel out the @file{.Xqtdir}
+subdirectories (@pxref{Execution Subdirectories}).
+
+@item LXQ.@var{cmd}
+@cindex LXQ.@var{cmd}
+When @code{uuxqt} is invoked with the @samp{-c} or @samp{--command}
+option (@pxref{Invoking uuxqt}), it creates a lock file named after the
+command it is executing. For example, @samp{uuxqt -c rmail} will create
+the lock file @file{LXQ.rmail}. This prevents other @code{uuxqt}
+daemons from executing jobs of the specified type.
+
+@item @var{system}/X./L.@var{xxx}
+@cindex L.@var{xxx}
+While @code{uuxqt} is executing a particular job, it creates a lock file
+with the same name as the @file{X.} file describing the job, but
+replacing the initial @samp{X} with @samp{L}. This ensures that if
+multiple @code{uuxqt} daemons are running, they do not simultaneously
+execute the same job.
+
+@item LCK..SEQ
+This lock file is used to control access to the sequence files for each
+system (@pxref{System Spool Directories}). It is only used on systems
+which do not support POSIX file locking using the @code{fcntl} system
+call.
+@end table
+
+@node Spool Directory Cleaning, , The Spool Directory Layout, Using Taylor UUCP
+@section Cleaning the Spool Directory
+@cindex spool directory, cleaning
+@cindex cleaning the spool directory
+
+The spool directory may need to be cleaned up periodically. Under some
+circumstances, files may accumulate in various subdirectories, such as
+@file{.Preserve} (@pxref{Other Spool Subdirectories}) or @file{.Corrupt}
+(@pxref{Execution Subdirectories}).
+
+Also, if a remote system stops calling in, you may want to arrange for
+any queued up mail to be returned to the sender. This can be done using
+the @code{uustat} command (@pxref{Invoking uustat}).
+
+The @file{contrib} directory includes a simple @file{uuclean} script
+which may be used as an example of a clean up script. It can be run
+daily out of @file{crontab}.
+
+You should periodically trim the UUCP log files, as they will otherwise
+grow without limit. The names of the log files are set in
+@file{policy.h}, and may be overridden in the configuration file
+(@pxref{config File}). By default they are are
+@file{/usr/spool/uucp/Log} and @file{/usr/spool/uucp/Stats}. You may
+find the @code{savelog} program in the @file{contrib} directory to be of
+use. There is a manual page for it in @file{contrib} as well.
+
+@node Configuration Files, Protocols, Using Taylor UUCP, Top
+@chapter Taylor UUCP Configuration Files
+
+This chapter describes the configuration files accepted by the Taylor
+UUCP package if compiled with @code{HAVE_TAYLOR_CONFIG} set to 1 in
+@file{policy.h}.
+
+The configuration files are normally found in the directory
+@var{newconfigdir}, which is defined by the @file{Makefile} variable
+@file{newconfigdir}; by default @var{newconfigdir} is
+@file{/usr/local/conf/uucp}. However, the main configuration file,
+@file{config}, is the only one which must be in that directory, since it
+may specify a different location for any or all of the other files. You
+may run any of the UUCP programs with a different main configuration
+file by using the @samp{-I} or @samp{--config} option; this can be
+useful when testing a new configuration. When you use the @samp{-I}
+option the programs will revoke any setuid privileges.
+
+@menu
+* Configuration Overview:: Configuration File Overview
+* Configuration File Format:: Configuration File Format
+* Configuration Examples:: Examples of Configuration Files
+* Time Strings:: How to Write Time Strings
+* Chat Scripts:: How to Write Chat Scripts
+* config File:: The Main Configuration File
+* sys File:: The System Configuration File
+* port File:: The Port Configuration Files
+* dial File:: The Dialer Configuration Files
+* UUCP Over TCP:: UUCP Over TCP
+* Security:: Security Issues
+@end menu
+
+@node Configuration Overview, Configuration File Format, Configuration Files, Configuration Files
+@section Configuration File Overview
+
+UUCP uses several different types of configuration files, each
+describing a different kind of information. The commands permitted in
+each file are described in detail below. This section is a brief
+description of some of the different types of files.
+
+The @file{config} file is the main configuration file. It describes
+general information not associated with a particular remote system, such
+as the location of various log files. There are reasonable defaults for
+everything that may be specified in the @file{config} file, so you may
+not actually need one on your system.
+
+There may be only one @file{config} file, but there may be one or more
+of each other type of file. The default is one file for each type, but
+more may be listed in the @file{config} file.
+
+The @file{sys} files are used to describe remote systems. Each remote
+system to which you connect must be listed in a @file{sys} file. A
+@file{sys} file will include information for a system, such as the speed
+(baud rate) to use, or when to place calls.
+
+For each system you wish to call, you must describe one or more ports;
+these ports may be defined directly in the @file{sys} file, or they may
+be defined in a @file{port} file.
+
+The @file{port} files are used to describe ports. A port is a
+particular hardware connection on your computer. You would normally
+define as many ports as there are modems attached to your computer. A
+TCP connection is also described using a port.
+
+The @file{dial} files are used to describe dialers. Dialer is
+essentially another word for modem. The @file{dial} file describes the
+commands UUCP should use to dial out on a particular type of modem. You
+would normally define as many dialers as there are types of modems
+attached to your computer. For example, if you have three Telebit
+modems used for UUCP, you would probably define three ports and one
+dialer.
+
+There are other types of configuration files, but these are the
+important ones. The other types are described below.
+
+@node Configuration File Format, Configuration Examples, Configuration Overview, Configuration Files
+@section Configuration File Format
+
+All the configuration files follow a simple line-oriented
+@samp{@var{keyword} @var{value}} format. Empty lines are ignored, as
+are leading spaces; unlike HDB, lines with leading spaces are read. The
+first word on each line is a keyword. The rest of the line is
+interpreted according to the keyword. Most keywords are followed by
+numbers, boolean values or simple strings with no embedded spaces.
+
+The @kbd{#} character is used for comments. Everything from a @kbd{#}
+to the end of the line is ignored unless the @kbd{#} is preceded by a
+@kbd{\} (backslash); if the @kbd{#} is preceeded by a @kbd{\}, the
+@kbd{\} is removed but the @kbd{#} remains in the line. This can be
+useful for a phone number containing a @kbd{#}. To enter the sequence
+@samp{\#}, use @samp{\\#}.
+
+The backslash character may be used to continue lines. If the last
+character in a line is a backslash, the backslash is removed and the
+line is continued by the next line. The second line is attached to the
+first with no intervening characters; if you want any whitespace between
+the end of the first line and the start of the second line, you must
+insert it yourself.
+
+However, the backslash is not a general quoting character. For example,
+you cannot use it to get an embedded space in a string argument.
+
+Everything after the keyword must be on the same line. A @var{boolean}
+may be specified as @kbd{y}, @kbd{Y}, @kbd{t}, or @kbd{T} for true and
+@kbd{n}, @kbd{N}, @kbd{f}, or @kbd{F} for false; any trailing characters
+are ignored, so @code{true}, @code{false}, etc., are also acceptable.
+
+@node Configuration Examples, Time Strings, Configuration File Format, Configuration Files
+@section Examples of Configuration Files
+
+This section provides few typical examples of configuration files.
+There are also sample configuration files in the @file{sample}
+subdirectory of the distribution.
+
+@menu
+* config File Examples:: Examples of the Main Configuration File
+* Leaf Example:: Call a Single Remote Site
+* Gateway Example:: The Gateway for Several Local Systems
+@end menu
+
+@node config File Examples, Leaf Example, Configuration Examples, Configuration Examples
+@subsection config File Examples
+@cindex config file examples
+
+To start with, here are some examples of uses of the main configuration
+file, @file{config}. For a complete description of the commands that
+are permitted in @file{config}, see @ref{config File}.
+
+In many cases you will not need to create a @file{config} file at all.
+The most common reason to create one is to give your machine a special
+UUCP name. Other reasons might be to change the UUCP spool directory,
+or to permit any remote system to call in.
+
+If you have an internal network of machines, then it is likely that the
+internal name of your UUCP machine is not the name you want to use when
+calling other systems. For example, here at @file{airs.com} our
+mail/news gateway machine is named @file{elmer.airs.com} (it is one of
+several machines all named @file{@var{localname}.airs.com}). If we did
+not provide a @file{config} file, then our UUCP name would be
+@file{elmer}; however, we actually want it to be @file{airs}.
+Therefore, we use the following line in @file{config}:
+
+@example
+nodename airs
+@end example
+
+@cindex changing spool directory
+@cindex spool directory, changing
+The UUCP spool directory name is set in @file{policy.h} when the code is
+compiled. You might at some point decide that it is appropriate to move
+the spool directory, perhaps to put it on a different disk partition.
+You would use the following commands in @file{config} to change to
+directories on the partition @file{/uucp}:
+
+@example
+spool /uucp/spool
+pubdir /uucp/uucppublic
+logfile /uucp/spool/Log
+debugfile /uucp/spool/Debug
+@end example
+
+You would then move the contents of the current spool directory to
+@file{/uucp/spool}. If you do this, make sure that no UUCP processes
+are running while you change @file{config} and move the spool directory.
+
+@cindex anonymous UUCP
+Suppose you wanted to permit any system to call in to your system and
+request files. This is generally known as @dfn{anonymous UUCP}, since
+the systems which call in are effectively anonymous. By default,
+unknown systems are not permitted to call in. To permit this you must
+use the @code{unknown} command in @file{config}. The @code{unknown}
+command is followed by any command that may appear in the system file;
+for full details, see @ref{sys File}.
+
+I will show two possible anonymous UUCP configurations. The first will
+let any system call in and download files, but will not permit them to
+upload files to your system.
+
+@example
+# No files may be transferred to this system
+unknown receive-request no
+# The public directory is /usr/spool/anonymous
+unknown pubdir /usr/spool/anonymous
+# Only files in the public directory may be sent (the default anyhow)
+unknown remote-send ~
+@end example
+
+@noindent
+Setting the public directory is convenient for the systems which call
+in. It permits to request a file by prefixing it with @file{~/}. For
+example, assuming your system is known as @samp{server}, then to
+retrieve the file @file{/usr/spool/anonymous/INDEX} a user on a remote
+site could just enter @samp{uucp server!~/INDEX ~}; this would transfer
+@file{INDEX} from @samp{server}'s public directory to the user's local
+public directory. Note that when using @samp{csh} or @samp{bash} the
+@kbd{!} and the second @kbd{~} must be quoted.
+
+The next example will permit remote systems to upload files to a special
+directory named @file{/usr/spool/anonymous/upload}. Permitting a remote
+system to upload files permits it to send work requests as well; this
+example is careful to prohibit commands from unknown systems.
+
+@example
+# No commands may be executed (the list of permitted commands is empty)
+unknown commands
+# The public directory is /usr/spool/anonymous
+unknown pubdir /usr/spool/anonymous
+# Only files in the public directory may be sent; users may not download
+# files from the upload directory
+unknown remote-send ~ !~/upload
+# May only upload files into /usr/spool/anonymous/upload
+unknown remote-receive ~/upload
+@end example
+
+@node Leaf Example, Gateway Example, config File Examples, Configuration Examples
+@subsection Leaf Example
+
+@cindex leaf site
+@cindex sys file example (leaf)
+A relatively common simple case is a @dfn{leaf site}, a system which
+only calls or is called by a single remote site. Here is a typical
+@file{sys} file that might be used in such a case. For full details on
+what commands can appear in the @file{sys} file, see @ref{sys File}.
+
+This is the @file{sys} file that is used at @file{airs.com}. We use a
+single modem to dial out to @file{uunet}. This example shows how you
+can specify the port and dialer information directly in the @file{sys}
+file for simple cases. It also shows the use of the following:
+
+@table @code
+
+@item call-login
+Using @code{call-login} and @code{call-password} allows the default
+login chat script to be used. In this case, the login name is specified
+in the call-out login file (@pxref{Configuration File Names}).
+
+@item call-timegrade
+@file{uunet} is requested to not send us news during the daytime.
+
+@item chat-fail
+If the modem returns @samp{BUSY} or @samp{NO CARRIER} the call is
+immediately aborted.
+
+@item protocol-parameter
+Since @file{uunet} tends to be slow, the default timeout has been
+increased.
+
+@end table
+
+This @file{sys} file relies on certain defaults. It will allow
+@file{uunet} to queue up @samp{rmail} and @samp{rnews} commands. It
+will allow users to request files from @file{uunet} into the UUCP public
+directory. It will also allow @file{uunet} to request files from the
+UUCP public directory; in fact @file{uunet} never requests files, but
+for additional security we could add the line @samp{request false}.
+
+@example
+# The following information is for uunet
+system uunet
+
+# The login name and password are kept in the callout password file
+call-login *
+call-password *
+
+# We can send anything at any time.
+time any
+
+# During the day we only accept grade `Z' or above; at other times
+# (not mentioned here) we accept all grades. uunet queues up news
+# at grade `d', which is lower than `Z'.
+call-timegrade Z Wk0755-2305,Su1655-2305
+
+# The phone number.
+phone 7389449
+
+# uunet tends to be slow, so we increase the timeout
+chat-timeout 120
+
+# We are using a preconfigured Telebit 2500.
+port type modem
+port device /dev/ttyd0
+port speed 19200
+port carrier true
+port dialer chat "" ATZ\r\d\c OK ATDT\D CONNECT
+port dialer chat-fail BUSY
+port dialer chat-fail NO\sCARRIER
+port dialer complete \d\d+++\d\dATH\r\c
+port dialer abort \d\d+++\d\dATH\r\c
+
+# Increase the timeout and the number of retries.
+protocol-parameter g timeout 20
+protocol-parameter g retries 10
+@end example
+
+@node Gateway Example, , Leaf Example, Configuration Examples
+@subsection Gateway Example
+
+@cindex gateway
+@cindex sys file example (gateway)
+Many organizations have several local machines which are connected by
+UUCP, and a single machine which connects to the outside world. This
+single machine is often referred to as a @dfn{gateway} machine.
+
+For this example I will assume a fairly simple case. It should still
+provide a good general example. There are three machines, @file{elmer},
+@file{comton} and @file{bugs}. @file{elmer} is the gateway machine for
+which I will show the configuration file. @file{elmer} calls out to
+@file{uupsi}. As an additional complication, @file{uupsi} knows
+@file{elmer} as @file{airs}; this will show how a machine can have one
+name on an internal network but a different name to the external world.
+@file{elmer} has two modems. It also has an TCP connection to
+@file{uupsi}, but since that is supposed to be reserved for interactive
+work (it is, perhaps, only a 9600 baud SLIP line) it will only use it if
+the modems are not available.
+
+A network this small would normally use a single @file{sys} file.
+However, for pedagogical purposes I will show two separate @file{sys}
+files, one for the local systems and one for @file{uupsi}. This is done
+with the @code{sysfile} command in the @file{config} file. Here is the
+@file{config} file.
+
+@example
+# This is config
+# The local sys file
+sysfile /usr/local/lib/uucp/sys.local
+# The remote sys file
+sysfile /usr/local/lib/uucp/sys.remote
+@end example
+
+Using the defaults feature of the @file{sys} file can greatly simplify
+the listing of local systems. Here is @file{sys.local}. Note that this
+assumes that the local systems are trusted; they are permited to request
+any world readable file and to write files into any world writable
+directory.
+
+@example
+# This is sys.local
+# Get the login name and password to use from the call-out file
+call-login *
+call-password *
+
+# The systems must use a particular login
+called-login Ulocal
+
+# Permit sending any world readable file
+local-send /
+remote-send /
+
+# Permit receiving into any world writable directory
+local-receive /
+remote-receive /
+
+# Call at any time
+time any
+
+# Use port1, then port2
+port port1
+
+alternate
+
+port port2
+
+# Now define the systems themselves. Because of all the defaults we
+# used, there is very little to specify for the systems themselves.
+
+system comton
+phone 5551212
+
+system bugs
+phone 5552424
+@end example
+
+The @file{sys.remote} file describes the @file{uupsi} connection. The
+@code{myname} command is used to change the UUCP name to @file{airs}
+when talking to @file{uupsi}.
+
+@example
+# This is sys.remote
+# Define uupsi
+system uupsi
+
+# The login name and password are in the call-out file
+call-login *
+call-password *
+
+# We can call out at any time
+time any
+
+# uupsi uses a special login name
+called-login Uuupsi
+
+# uuspi thinks of us as `airs'
+myname airs
+
+# The phone number
+phone 5554848
+
+# We use port2 first, then port1, then TCP
+
+port port2
+
+alternate
+
+port port1
+
+alternate
+
+# We don't bother to make a special entry in the port file for TCP, we
+# just describe the entire port right here. We use a special chat
+# script over TCP because the usual one confuses some TCP servers.
+port type TCP
+address uu.psi.com
+chat ogin: \L word: \P
+@end example
+
+The ports are defined in the file @file{port} (@pxref{port File}). For
+this example they are both connected to the same type of 2400 baud
+Hayes-compatible modem.
+
+@example
+# This is port
+
+port port1
+type modem
+device /dev/ttyd0
+dialer hayes
+speed 2400
+
+port port2
+type modem
+device /dev/ttyd1
+dialer hayes
+speed 2400
+@end example
+
+Dialers are described in the @file{dial} file (@pxref{dial File}).
+
+@example
+# This is dial
+
+dialer hayes
+
+# The chat script used to dial the phone. \D is the phone number.
+chat "" ATZ\r\d\c OK ATDT\D CONNECT
+
+# If we get BUSY or NO CARRIER we abort the dial immediately
+chat-fail BUSY
+chat-fail NO\sCARRIER
+
+# When the call is over we make sure we hangup the modem.
+complete \d\d+++\d\dATH\r\c
+abort \d\d+++\d\dATH\r\c
+@end example
+
+@node Time Strings, Chat Scripts, Configuration Examples, Configuration Files
+@section Time Strings
+@cindex time strings
+
+Several commands use time strings to specify a range of times. This
+section describes how to write time strings.
+
+A time string may be a list of simple time strings separated with a
+vertical bar @samp{|} or a comma @samp{,}.
+
+Each simple time string must begin with @samp{Su}, @samp{Mo}, @samp{Tu},
+@samp{We}, @samp{Th}, @samp{Fr}, or @samp{Sa}, or @samp{Wk} for any
+weekday, or @samp{Any} for any day.
+
+Following the day may be a range of hours separated with a hyphen using
+24 hour time. The range of hours may cross 0; for example
+@samp{2300-0700} means any time except 7 AM to 11 PM. If no time is
+given, calls may be made at any time on the specified day(s).
+
+The time string may also be the single word @samp{Never}, which does not
+match any time. The time string may also be a single word with a name
+defined in a previous @code{timetable} command (@pxref{Miscellaneous
+(config)}).
+
+Here are a few sample time strings with an explanation of what they
+mean.
+
+@table @samp
+
+@item Wk2305-0855,Sa,Su2305-1655
+
+This means weekdays before 8:55 AM or after 11:05 PM, any time Saturday,
+or Sunday before 4:55 PM or after 11:05 PM. These are approximately the
+times during which night rates apply to phone calls in the U.S.A. Note
+that this time string uses, for example, @samp{2305} rather than
+@samp{2300}; this will ensure a cheap rate phone call even if the
+computer clock is running up to five minutes ahead of the real time.
+
+@item Wk0905-2255,Su1705-2255
+
+This means weekdays from 9:05 AM to 10:55 PM, or Sunday from 5:05 PM to
+10:55 PM. This is approximately the opposite of the previous example.
+
+@item Any
+
+This means any day. Since no time is specified, it means any time on
+any day.
+
+@end table
+
+@node Chat Scripts, config File, Time Strings, Configuration Files
+@section Chat Scripts
+@cindex chat scripts
+
+Chat scripts are used in several different places, such as dialing out
+on modems or logging in to remote systems. Chat scripts are made up of
+pairs of strings. The program waits until it sees the first string,
+known as the @dfn{expect} string, and then sends out the second string,
+the @dfn{send} string.
+
+Each chat script is defined using a set of commands. These commands
+always end in a string beginning with @code{chat}, but may start with
+different strings. For example, in the @file{sys} file there is one set
+of commands beginning with @code{chat} and another set beginning with
+@code{called-chat}. The prefixes are only used to disambiguate
+different types of chat scripts, and this section ignores the prefixes
+when describing the commands.
+
+@table @code
+
+@item chat @var{strings}
+@findex chat
+
+Specify a chat script. The arguments to the @code{chat} command are
+pairs of strings separated by whitespace. The first string of each pair
+is an expect string, the second is a send string. The program will wait
+for the expect string to appear; when it does, the program will send the
+send string. If the expect string does not appear within a certain
+number of seconds (as set by the @code{chat-timeout} command), the chat
+script fails and, typically, the call is aborted. If the final expect
+string is seen (and the optional final send string has been sent), the
+chat script is successful.
+
+An expect string may contain additional subsend and subexpect strings,
+separated by hyphens. If the expect string is not seen, the subsend
+string is sent and the chat script continues by waiting for the
+subexpect string. This means that a hyphen may not appear in an expect
+string; on an ASCII system, use @samp{\055} instead.
+
+An expect string may simply be @samp{""}, meaning to skip the expect
+phase. Otherwise, the following escape characters may appear in expect
+strings:
+
+@table @samp
+@item \b
+a backspace character
+@item \n
+a newline or line feed character
+@item \N
+a null character (for HDB compatibility)
+@item \r
+a carriage return character
+@item \s
+a space character
+@item \t
+a tab character
+@item \\
+a backslash character
+@item \@var{ddd}
+character @var{ddd}, where @var{ddd} are up to three octal digits
+@item \x@var{ddd}
+character @var{ddd}, where @var{ddd} are hexadecimal digits.
+@end table
+
+As in C, there may be up to three octal digits following a backslash,
+but the hexadecimal escape sequence continues as far as possible. To
+follow a hexadecimal escape sequence with a hex digit, interpose a send
+string of @samp{""}.
+
+A chat script expect string may also specify a timeout. This is done by
+using the escape sequence @samp{\W@var{seconds}}. This escape sequence
+may only appear at the very end of the expect string. It temporarily
+overrides the timeout set by @code{chat-timeout} (described below) only
+for the expect string to which it is attached.
+
+A send string may simply be @samp{""} to skip the send phase.
+Otherwise, all of the escape characters legal for expect strings may be
+used, and the following escape characters are also permitted:
+
+@table @samp
+@item EOT
+send an end of transmission character (@kbd{^D})
+@item BREAK
+send a break character (may not work on all systems)
+@item \c
+suppress trailing carriage return at end of send string
+@item \d
+delay sending for 1 or 2 seconds
+@item \e
+disable echo checking
+@item \E
+enable echo checking
+@item \K
+same as @samp{BREAK} (for HDB compatibility)
+@item \p
+pause sending for a fraction of a second
+@end table
+
+Some specific types of chat scripts also define additional escape
+sequences that may appear in the send string. For example, the login
+chat script defines @samp{\L} and @samp{\P} to send the login name and
+password, respectively.
+
+A carriage return will be sent at the end of each send string, unless
+the @kbd{\c} escape sequence appears in the string. Note that some UUCP
+packages use @kbd{\b} for break, but here it means backspace.
+
+Echo checking means that after writing each character the program will
+wait until the character is echoed. Echo checking must be turned on
+separately for each send string for which it is desired; it will be
+turned on for characters following @kbd{\E} and turned off for characters
+following @kbd{\e}.
+
+@item chat-timeout @var{number}
+@findex chat-timeout
+
+The number of seconds to wait for an expect string in the chat script,
+before timing out and sending the next subsend, or failing the chat
+script entirely. The default value is 10 for a login chat or 60 for any
+other type of chat.
+
+@item chat-fail @var{string}
+@findex chat-fail
+
+If the @var{string} is seen at any time during a chat script, the chat
+script is aborted. The string may not contain any whitespace
+characters: escape sequences must be used for them. Multiple
+@code{chat-fail} commands may appear in a single chat script. The
+default is to have none.
+
+This permits a chat script to be quickly aborted if an error string is
+seen. For example, a script used to dial out on a modem might use the
+command @samp{chat-fail BUSY} to stop the chat script immediately if the
+string @samp{BUSY} was seen.
+
+The @code{chat-fail} strings are considered in the order they are
+listed, so if one string is a suffix of another the longer one should be
+listed first. This affects the error message which will be logged. Of
+course, if one string is contained within another, but is not a suffix,
+the smaller string will always be found before the larger string could
+match.
+
+@item chat-seven-bit @var{boolean}
+@findex chat-seven-bit
+
+If the argument is true, all incoming characters are stripped to seven
+bits when being compared to the expect string. Otherwise all eight bits
+are used in the comparison. The default is true, because some Unix
+systems generate parity bits during the login prompt which must be
+ignored while running a chat script. This has no effect on any
+@code{chat-program}, which must ignore parity by itself if necessary.
+
+@item chat-program @var{strings}
+@findex chat-program
+
+Specify a program to run before executing the chat script. This program
+could run its own version of a chat script, or it could do whatever it
+wants. If both @code{chat-program} and @code{chat} are specified, the
+program is executed first followed by the chat script.
+
+The first argument to the @code{chat-program} command is the program
+name to run. The remaining arguments are passed to the program. The
+following escape sequences are recognized in the arguments:
+
+@table @kbd
+@item \Y
+port device name
+@item \S
+port speed
+@item \\
+backslash
+@end table
+
+Some specific uses of @code{chat-program} define additional escape
+sequences.
+
+Arguments other than escape sequences are passed exactly as they appear
+in the configuration file, except that sequences of whitespace are
+compressed to a single space character (this exception may be removed in
+the future).
+
+If the @code{chat-program} command is not used, no program is run.
+
+On Unix, the standard input and standard output of the program will be
+attached to the port in use. Anything the program writes to standard
+error will be written to the UUCP log file. No other file descriptors
+will be open. If the program does not exit with a status of 0, it will
+be assumed to have failed. This means that the dialing programs used by
+some versions of HDB may not be used directly, but you may be able to
+run them via the @code{dialHDB} program in the @file{contrib} directory.
+
+The program will be run as the @code{uucp} user, and the environment
+will be that of the process that started @code{uucico}, so care must be
+taken to maintain security.
+
+No search path is used to find the program; a full file name must be
+given. If the program is an executable shell script, it will be passed
+to @file{/bin/sh} even on systems which are unable to execute shell
+scripts.
+
+@end table
+
+Here is a simple example of a chat script that might be used to reset a
+Hayes compatible modem.
+
+@example
+chat "" ATZ OK-ATZ-OK
+@end example
+
+The first expect string is @samp{""}, so it is ignored. The chat script
+then sends @samp{ATZ}. If the modem responds with @samp{OK}, the chat
+script finishes. If 60 seconds (the default timeout) pass before seeing
+@samp{OK}, the chat script sends another @samp{ATZ}. If it then sees
+@samp{OK}, the chat script succeeds. Otherwise, the chat script fails.
+
+For a more complex chat script example, see @ref{Logging In}.
+
+@node config File, sys File, Chat Scripts, Configuration Files
+@section The Main Configuration File
+@cindex config file
+@cindex main configuration file
+@cindex configuration file (config)
+
+The main configuration file is named @file{config}.
+
+Since all the values that may be specified in the main configuration
+file also have defaults, there need not be a main configuration file at
+all.
+
+Each command in @file{config} may have a program prefix, which is a
+separate word appearing at the beginning of the line. The currently
+supported prefixes are @samp{uucp} and @samp{cu}. Any command prefixed
+by @samp{uucp} will not be read by the @code{cu} program. Any command
+prefixed by @samp{cu} will only be read by the @code{cu} program. For
+example, to use a list of systems known only to @code{cu}, list them in
+a separate file @file{@var{file}} and put @samp{cu sysfile
+@file{@var{file}}} in @file{config}.
+
+@menu
+* Miscellaneous (config):: Miscellaneous config File Commands
+* Configuration File Names:: Using Different Configuration Files
+* Log File Names:: Using Different Log Files
+* Debugging Levels:: Debugging Levels
+@end menu
+
+@node Miscellaneous (config), Configuration File Names, config File, config File
+@subsection Miscellaneous config File Commands
+
+@table @code
+
+@item nodename @var{string}
+@findex nodename
+@itemx hostname @var{string}
+@findex hostname
+@itemx uuname @var{string}
+@findex uuname
+@cindex UUCP system name
+@cindex system name
+
+These keywords are equivalent. They specify the UUCP name of the local
+host. If there is no configuration file, an appropriate system function
+will be used to get the host name, if possible.
+
+@item spool @var{string}
+@findex spool
+@cindex spool directory, setting
+@cindex /usr/spool/uucp
+
+Specify the spool directory. The default is from @file{policy.h}. This
+is where UUCP files are queued. Status files and various sorts of
+temporary files are also stored in this directory and subdirectories of
+it.
+
+@item pubdir @var{string}
+@findex pubdir in config file
+@cindex public directory
+@cindex uucppublic
+@cindex /usr/spool/uucppublic
+
+Specify the public directory. The default is from @file{policy.h}.
+When a file is named using a leading @kbd{~/}, it is taken from or to
+the public directory. Each system may use a separate public directory
+by using the @code{pubdir} command in the system configuration file; see
+@ref{Miscellaneous (sys)}.
+
+@item lockdir @var{string}
+@findex lockdir
+@cindex lock directory
+
+Specify the directory to place lock files in. The default is from
+@file{policy.h}; see the information in that file. Normally the lock
+directory should be set correctly in @file{policy.h}, and not changed
+here. However, changing the lock directory is sometimes useful for
+testing purposes. This only affects lock files for devices and systems;
+it does not affect certain internal lock files which are stored in the
+spool directory (@pxref{Spool Lock Files}).
+
+@item unknown @var{string} @dots{}
+@findex unknown
+@cindex unknown systems
+
+The @var{string} and subsequent arguments are treated as though they
+appeared in the system file (@pxref{sys File}). They are used to apply
+to any unknown systems that may call in, probably to set file transfer
+permissions and the like. If the @code{unknown} command is not used,
+unknown systems are not permitted to call in.
+
+@item strip-login @var{boolean}
+@findex strip-login
+@cindex parity in login names
+
+If the argument is true, then, when @code{uucico} is doing its own login
+prompting with the @samp{-e}, @samp{-l}, or @samp{-w} switches, it will
+strip the parity bit when it reads the login name and password.
+Otherwise all eight bits will be used when checking the strings against
+the UUCP password file. The default is true, since some other UUCP
+packages send parity bits with the login name and password, and few
+systems use eight bit characters in the password file.
+
+@item strip-proto @var{boolean}
+@findex strip-proto
+
+If the argument is true, then @code{uucico} will strip the parity bit
+from incoming UUCP protocol commands. Otherwise all eight bits will be
+used. This only applies to commands which are not encapsulated in a
+link layer protocol. The default is true, which should always be
+correct unless your UUCP system names use eight bit characters.
+
+@item max-uuxqts @var{number}
+@findex max-uuxqts
+
+Specify the maximum number of @code{uuxqt} processes which may run at
+the same time. Having several @code{uuxqt} processes running at once
+can significantly slow down a system, but, since @code{uuxqt} is
+automatically started by @code{uucico}, it can happen quite easily. The
+default for @code{max-uuxqts} is 0, which means that there is no limit.
+If HDB configuration files are being read and the code was compiled
+without @code{HAVE_TAYLOR_CONFIG}, then, if the file @file{Maxuuxqts} in
+the configuration directory contains a readable number, it will be used
+as the value for @code{max-uuxqts}.
+
+@item run-uuxqt @var{string} or @var{number}
+@findex run-uuxqt
+
+Specify when @code{uuxqt} should be run by @code{uucico}. This may be a
+positive number, in which case @code{uucico} will start a @code{uuxqt}
+process whenever it receives the given number of execution files from
+the remote system, and, if necessary, at the end of the call. The
+argument may also be one of the strings @samp{once}, @samp{percall}, or
+@samp{never}. The string @samp{once} means that @code{uucico} will
+start @code{uuxqt} once at the end of execution. The string
+@samp{percall} means that @code{uucico} will start @code{uuxqt} once per
+call that it makes (this is only different from @code{once} when
+@code{uucico} is invoked in a way that causes it to make multiple calls,
+such as when the @samp{-r1} option is used without the @samp{-s}
+option). The string @samp{never} means that @code{uucico} will never
+start @code{uuxqt}, in which case @code{uuxqt} should be periodically
+run via some other mechanism. The default depends upon which type of
+configuration files are being used; if @code{HAVE_TAYLOR_CONFIG} is used
+the default is @samp{once}, otherwise if @code{HAVE_HDB_CONFIG} is used
+the default is @samp{percall}, and otherwise, for @code{HAVE_V2_CONFIG},
+the default is @samp{10}.
+
+@item timetable @var{string} @var{string}
+@findex timetable
+
+The @code{timetable} defines a timetable that may be used in
+subsequently appearing time strings; see @ref{Time Strings}. The first
+string names the timetable entry; the second is a time string.
+
+The following @code{timetable} commands are predefined. The NonPeak
+timetable is included for compatibility. It originally described the
+offpeak hours of Tymnet and Telenet, but both have since changed their
+schedules.
+
+@example
+timetable Evening Wk1705-0755,Sa,Su
+timetable Night Wk2305-0755,Sa,Su2305-1655
+timetable NonPeak Wk1805-0655,Sa,Su
+@end example
+
+If this command does not appear, then, obviously, no additional
+timetables will be defined.
+
+@item v2-files @var{boolean}
+@findex v2-files
+
+If the code was compiled to be able to read V2 configuration files, a
+false argument to this command will prevent them from being read.
+This can be useful while testing. The default is true.
+
+@item hdb-files @var{boolean}
+@findex hdb-files
+
+If the code was compiled to be able to read HDB configuration files, a
+false argument to this command will prevent them from being read.
+This can be useful while testing. The default is true.
+
+@end table
+
+@node Configuration File Names, Log File Names, Miscellaneous (config), config File
+@subsection Configuration File Names
+
+@table @code
+
+@item sysfile @var{strings}
+@findex sysfile
+
+Specify the system file(s). The default is the file @file{sys} in the
+directory @var{newconfigdir}. These files hold information about other
+systems with which this system communicates; see @ref{sys File}.
+Multiple system files may be given on the line, and the @code{sysfile}
+command may be repeated; each system file has its own set of defaults.
+
+@item portfile @var{strings}
+@findex portfile
+
+Specify the port file(s). The default is the file @file{port} in the
+directory @var{newconfigdir}. These files describe ports which are used
+to call other systems and accept calls from other systems; see @ref{port
+File}. No port files need be named at all. Multiple port files may be
+given on the line, and the @code{portfile} command may be repeated.
+
+@item dialfile @var{strings}
+@findex dialfile
+
+Specify the dial file(s). The default is the file @file{dial} in the
+directory @var{newconfigdir}. These files describe dialing devices
+(modems); see @ref{dial File}. No dial files need be named at all.
+Multiple dial files may be given on the line, and the @code{dialfile}
+command may be repeated.
+
+@item dialcodefile @var{strings}
+@findex dialcodefile
+@cindex configuration file (dialcode)
+@cindex dialcode file
+@cindex dialcode configuration file
+
+Specify the dialcode file(s). The default is the file @file{dialcode}
+in the directory @var{newconfigdir}. These files specify dialcodes that
+may be used when sending phone numbers to a modem. This permits using
+the same set of phone numbers in different area-codes or with different
+phone systems, by using dialcodes to specify the calling sequence. When
+a phone number goes through dialcode translation, the leading alphabetic
+characters are stripped off. The dialcode files are read line by line,
+just like any other configuration file, and when a line is found whose
+first word is the same as the leading characters from the phone number,
+the second word on the line (which would normally consist of numbers)
+replaces the dialcode in the phone number. No dialcode file need be
+used. Multiple dialcode files may be specified on the line, and the
+@code{dialcodefile} command may be repeated; all the dialcode files will
+be read in turn until a dialcode is located.
+
+@item callfile @var{strings}
+@findex callfile
+@cindex call out file
+@cindex call configuration file
+@cindex call out login name
+@cindex call out password
+@cindex configuration file (call)
+
+Specify the call out login name and password file(s). The default is
+the file @file{call} in the directory @var{newconfigdir}. If the call
+out login name or password for a system are given as @kbd{*}
+(@pxref{Logging In}), these files are read to get the real login name or
+password. Each line in the file(s) has three words: the system name,
+the login name, and the password. The login name and password may
+contain escape sequences like those in a chat script expect string
+(@pxref{Chat Scripts}). This file is only used when placing calls to
+remote systems; the password file described under @code{passwdfile}
+below is used for incoming calls. The intention of the call out file is
+to permit the system file to be publically readable; the call out files
+must obviously be kept secure. These files need not be used. Multiple
+call out files may be specified on the line, and the @code{callfile}
+command may be repeated; all the files will be read in turn until the
+system is found.
+
+@item passwdfile @var{strings}
+@findex passwdfile
+@cindex passwd file
+@cindex passwd configuration file
+@cindex configuration file (passwd)
+@cindex call in login name
+@cindex call in password
+
+Specify the password file(s) to use for login names when @code{uucico}
+is doing its own login prompting, which it does when given the
+@samp{-e}, @samp{-l} or @samp{-w} switches. The default is the file
+@file{passwd} in the directory @var{newconfigdir}. Each line in the
+file(s) has two words: the login name and the password (e.g., @code{Ufoo
+foopas}). They may contain escape sequences like those in a chat script
+expect string (@pxref{Chat Scripts}). The login name is accepted before
+the system name is known, so these are independent of which system is
+calling in; a particular login may be required for a system by using the
+@code{called-login} command in the system file (@pxref{Accepting a
+Call}). These password files are optional, although one must exist if
+@code{uucico} is to present its own login prompts.
+
+As a special exception, a colon may be used to separate the login name
+from the password, and a colon may be used to terminate the password.
+This means that the login name and password may not contain a colon.
+This feature, in conjunction with the @code{HAVE_ENCRYPTED_PASSWORDS}
+macro in @file{policy.h}, permits using a standard Unix
+@file{/etc/passwd} as a UUCP password file, providing the same set of
+login names and passwords for both @code{getty} and @code{uucico}.
+
+Multiple password files may be specified on the line, and the
+@code{passwdfile} command may be repeated; all the files will be read in
+turn until the login name is found.
+
+@end table
+
+@node Log File Names, Debugging Levels, Configuration File Names, config File
+@subsection Log File Names
+
+@table @code
+
+@item logfile @var{string}
+@findex logfile
+@cindex log file
+
+Name the log file. The default is from @file{policy.h}. Logging
+information is written to this file. If @code{HAVE_HDB_LOGGING} is
+defined in @file{policy.h}, then by default a separate log file is used
+for each system; using this command to name a log file will cause all
+the systems to use it.
+
+@item statfile @var{string}
+@findex statfile
+@cindex statistics file
+
+Name the statistics file. The default is from @file{policy.h}.
+Statistical information about file transfers is written to this file.
+
+@item debugfile @var{string}
+@findex debugfile
+@cindex debugging file
+
+Name the file to which all debugging information is written. The
+default is from @file{policy.h}. This command is only effective if the
+code has been compiled to include debugging (this is controlled by the
+@code{DEBUG} macro in @file{policy.h}). If debugging is on, messages
+written to the log file are also written to the debugging file to make
+it easier to keep the order of actions straight. The debugging file is
+different from the log file because information such as passwords can
+appear in it, so it must be not be publically readable.
+
+@end table
+
+@node Debugging Levels, , Log File Names, config File
+@subsection Debugging Levels
+
+@table @code
+
+@item debug @var{string} @dots{}
+@findex debug in config file
+
+Set the debugging level. This command is only effective if the code has
+been compiled to include debugging. The default is to have no
+debugging. The arguments are strings which name the types of debugging
+to be turned on. The following types of debugging are defined:
+
+@table @samp
+@item abnormal
+Output debugging messages for abnormal situations, such as recoverable errors.
+@item chat
+Output debugging messages for chat scripts.
+@item handshake
+Output debugging messages for the initial handshake.
+@item uucp-proto
+Output debugging messages for the UUCP session protocol.
+@item proto
+Output debugging messages for the individual link protocols.
+@item port
+Output debugging messages for actions on the communication port.
+@item config
+Output debugging messages while reading the configuration files.
+@item spooldir
+Output debugging messages for actions in the spool directory.
+@item execute
+Output debugging messages whenever another program is executed.
+@item incoming
+List all incoming data in the debugging file.
+@item outgoing
+List all outgoing data in the debugging file.
+@item all
+All of the above.
+@end table
+
+The debugging level may also be specified as a number. A 1 will set
+@samp{chat} debugging, a 2 will set both @samp{chat} and
+@samp{handshake} debugging, and so on down the possibilities. Currently
+an 11 will turn on all possible debugging, since there are 11 types of
+debugging messages listed above; more debugging types may be added in
+the future. The @code{debug} command may be used several times in the
+configuration file; every debugging type named will be turned on. When
+running any of the programs, the @samp{-x} switch (actually, for
+@code{uulog} it's the @samp{-X} switch) may be used to turn on
+debugging. The argument to the @samp{-x} switch is one of the strings
+listed above, or a number as described above, or a comma separated list
+of strings (e.g., @samp{-x chat,handshake}). The @samp{-x} switch may
+also appear several times on the command line, in which case all named
+debugging types will be turned on. The @samp{-x} debugging is in
+addition to any debugging specified by the @code{debug} command; there
+is no way to cancel debugging information. The debugging level may also
+be set specifically for calls to or from a specific system with the
+@code{debug} command in the system file (@pxref{Miscellaneous (sys)}).
+
+The debugging messages are somewhat idiosyncratic; it may be necessary
+to refer to the source code for additional information in some cases.
+
+@end table
+
+@node sys File, port File, config File, Configuration Files
+@section The System Configuration File
+@cindex sys file
+@cindex system configuration file
+@cindex configuration file (sys)
+
+By default there is a single system configuration, named @file{sys} in
+the directory @var{newconfigdir}. This may be overridden by the
+@code{sysfile} command in the main configuration file; see
+@ref{Configuration File Names}.
+
+These files describe all remote systems known to the UUCP package.
+
+@menu
+* Defaults and Alternates:: Using Defaults and Alternates
+* Naming the System:: Naming the System
+* Calling Out:: Calling Out
+* Accepting a Call:: Accepting a Call
+* Protocol Selection:: Protocol Selection
+* File Transfer Control:: File Transfer Control
+* Miscellaneous (sys):: Miscellaneous sys File Commands
+* Default sys File Values:: Default Values
+@end menu
+
+@node Defaults and Alternates, Naming the System, sys File, sys File
+@subsection Defaults and Alternates
+
+The first set of commands in the file, up to the first @code{system}
+command, specify defaults to be used for all systems in that file. Each
+@file{sys} file uses a different set of defaults.
+
+Subsequently, each set of commands from @code{system} up to the next
+@code{system} command describe a particular system. Default values may
+be overridden for specific systems.
+
+Each system may then have a series of alternate choices to use when
+calling out or calling in. The first set of commands for a particular
+system, up to the first @code{alternate} command, provide the first
+choice. Subsequently, each set of commands from @code{alternate} up to
+the next @code{alternate} command describe an alternate choice for
+calling out or calling in.
+
+When a system is called, the commands before the first @code{alternate}
+are used to select a phone number, port, and so forth; if the call fails
+for some reason, the commands between the first @code{alternate} and the
+second are used, and so forth. Well, not quite. Actually, each
+succeeding alternate will only be used if it is different in some
+relevant way (different phone number, different chat script, etc.). If
+you want to force the same alternate to be used again (to retry a phone
+call more than once, for example), enter the phone number (or any other
+relevant field) again to make it appear different.
+
+The alternates can also be used to give different permissions to an
+incoming call based on the login name. This will only be done if the
+first set of commands, before the first @code{alternate} command, uses
+the @code{called-login} command. The list of alternates will be
+searched, and the first alternate with a matching @code{called-login}
+command will be used. If no alternates match, the call will be
+rejected.
+
+The @code{alternate} command may also be used in the file-wide defaults
+(the set of commands before the first @code{system} command). This
+might be used to specify a list of ports which are available for all
+systems (for an example of this, see @ref{Gateway Example}) or to
+specify permissions based on the login name used by the remote system
+when it calls in. The first alternate for each system will default to
+the first alternate for the file-wide defaults (as modified by the
+commands used before the first @code{alternate} command for this
+system), the second alternate for each system to the second alternate
+for the file-wide defaults (as modified the same way), and so forth. If
+a system specifies more alternates than the file-wide defaults, the
+trailing ones will default to the last file-wide default alternate. If
+a system specifies fewer alternates than the file-wide defaults, the
+trailing file-wide default alternates will be used unmodified. The
+@code{default-alternates} command may be used to modify this behaviour.
+
+This can all get rather confusing, although it's easier to use than to
+describe concisely; the @code{uuchk} program may be used to ensure that
+you are getting what you want.
+
+@need 2000
+@node Naming the System, Calling Out, Defaults and Alternates, sys File
+@subsection Naming the System
+
+@table @code
+
+@item system @var{string}
+@findex system
+
+Specify the remote system name. Subsequent commands up to the next
+@code{system} command refer to this system.
+
+@item alternate [@var{string}]
+@findex alternate
+
+Start an alternate set of commands (@pxref{Defaults and Alternates}).
+An optional argument may be used to name the alternate. This name will
+be recorded in the log file if the alternate is used to call the system.
+There is no way to name the first alternate (the commands before the
+first @code{alternate} command).
+
+@item default-alternates @var{boolean}
+@findex default-alternates
+
+If the argument is false, any remaining default alternates (from the
+defaults specified at the top of the current system file) will not be
+used. The default is true.
+
+@item alias @var{string}
+@findex alias
+
+Specify an alias for the current system. The alias may be used by local
+@code{uucp} and @code{uux} commands, as well as by the remote system
+(which can be convenient if a remote system changes its name). The
+default is to have no aliases.
+
+@item myname @var{string}
+@findex myname
+
+Specifies a different system name to use when calling the remote system.
+Also, if @code{called-login} is used and is not @samp{ANY}, then, when a
+system logs in with that login name, @var{string} is used as the local
+system name. Because the local system name must be determined before
+the remote system has identified itself, using @code{myname} and
+@code{called-login} together for any system will set the local name for
+that login; this means that each locally used system name must have a
+unique login name associated with it. This allows a system to have
+different names for an external and an internal network. The default is
+to not use a special local name.
+
+@end table
+
+@node Calling Out, Accepting a Call, Naming the System, sys File
+@subsection Calling Out
+
+This section describes commands used when placing a call to another
+system.
+
+@menu
+* When to Call:: When to Call
+* Placing the Call:: Placing the Call
+* Logging In:: Logging In
+@end menu
+
+@need 2000
+@node When to Call, Placing the Call, Calling Out, Calling Out
+@subsubsection When to Call
+
+@table @code
+
+@item time @var{string} [@var{number}]
+@findex time
+
+Specify when the system may be called. The first argument is a time
+string; see @ref{Time Strings}. The optional second argument specifies
+a retry time in minutes. If a call made during a time that matches the
+time string fails, no more calls are permitted until the retry time has
+passed. By default an exponentially increasing retry time is used:
+after each failure the next retry period is longer. A retry time
+specified in the @code{time} command is always a fixed amount of time.
+
+The @code{time} command may appear multiple times in a single alternate,
+in which case if any time string matches the system may be called. When
+the @code{time} command is used for a particular system, any @code{time}
+or @code{timegrade} commands that appeared in the system defaults are
+ignored.
+
+The default time string is @samp{Never}.
+
+@item timegrade @var{character} @var{string} [@var{number}]
+@findex timegrade
+@cindex grades
+
+The @var{character} specifies a grade. It must be a single letter or
+digit. The @var{string} is a time string (@pxref{Time Strings}). All
+jobs of grade @var{character} or higher (where @kbd{0} > @kbd{9} >
+@kbd{A} > @kbd{Z} > @kbd{a} > @kbd{z}) may be run at the specified time.
+An ordinary @code{time} command is equivalent to using @code{timegrade}
+with a grade of @kbd{z}, permitting all jobs. If there are no jobs of a
+sufficiently high grade according to the time string, the system will
+not be called. Giving the @samp{-s} switch to @code{uucico} to force it
+to call a system causes it to assume there is a job of grade @kbd{0}
+waiting to be run.
+
+The optional third argument specifies a retry time in minutes. See the
+@code{time} command, above, for more details.
+
+Note that the @code{timegrade} command serves two purposes: 1) if there
+is no job of sufficiently high grade the system will not be called, and
+2) if the system is called anyway (because the @samp{-s} switch was
+given to @code{uucico}) only jobs of sufficiently high grade will be
+transferred. However, if the other system calls in, the
+@code{timegrade} commands are ignored, and jobs of any grade may be
+transferred (but see @code{call-timegrade} and @code{called-timegrade},
+below). Also, the @code{timegrade} command will not prevent the other
+system from transferring any job it chooses, regardless of who placed
+the call.
+
+The @code{timegrade} command may appear multiple times without using
+@code{alternate}. When the @code{timegrade} command is used for a
+particular system, any @code{time} or @code{timegrade} commands that
+appeared in the system defaults are ignored.
+
+If this command does not appear, there are no restrictions on what grade
+of work may be done at what time.
+
+@item max-retries @var{number}
+@findex max-retries
+
+Gives the maximum number of times this system may be retried. If this
+many calls to the system fail, it will be called at most once a day
+whatever the retry time is. The default is 26.
+
+@item success-wait @var{number}
+
+A retry time, in seconds, which applies after a successful call. This
+can be used to put a limit on how frequently the system is called. For
+example, an argument of 1800 means that the system will not be called
+more than once every half hour. The default is 0, which means that
+there is no limit.
+
+@item call-timegrade @var{character} @var{string}
+@findex call-timegrade
+
+The @var{character} is a single character @kbd{A} to @kbd{Z}, @kbd{a} to
+@kbd{z}, or @kbd{0} to @kbd{9} and specifies a grade. The @var{string}
+is a time string (@pxref{Time Strings}). If a call is placed to the
+other system during a time which matches the time string, the remote
+system will be requested to only run jobs of grade @var{character} or
+higher. Unfortunately, there is no way to guarantee that the other
+system will obey the request (this UUCP package will, but there are
+others which will not); moreover, job grades are historically somewhat
+arbitrary, so specifying a grade will only be meaningful if the other
+system cooperates in assigning grades. This grade restriction only
+applies when the other system is called, not when the other system calls
+in.
+
+The @code{call-timegrade} command may appear multiple times without
+using @code{alternate}. If this command does not appear, or if none of
+the time strings match, the remote system will be allowed to send
+whatever grades of work it chooses.
+
+@item called-timegrade @var{character} @var{string}
+@findex called-timegrade
+
+The @var{character} is a single character @kbd{A} to @kbd{Z}, @kbd{a} to
+@kbd{z}, or @kbd{0} to @kbd{9} and specifies a grade. The @var{string}
+is a time string (@pxref{Time Strings}). If a call is received from the
+other system during a time which matches the time string, only jobs of
+grade @var{character} or higher will be sent to the remote system. This
+allows the job grade to be set for incoming calls, overriding any
+request made by the remote uucico. As noted above, job grades are
+historically somewhat arbitrary, so specifying a grade will only be
+meaningful if the other system cooperates in assigning grades. This
+grade restriction only applies to jobs on the local system; it does not
+affect the jobs transferred by the remote system. This grade
+restriction only applies when the other system calls in, not when the
+other system is called.
+
+The @code{called-timegrade} command may appear multiple times. If this
+command does not appear, or if none of the time strings match, any grade
+may be sent to the remote system upon receiving a call.
+
+@end table
+
+@need 2000
+@node Placing the Call, Logging In, When to Call, Calling Out
+@subsubsection Placing the Call
+
+@table @code
+
+@itemx speed @var{number}
+@findex speed in sys file
+@item baud @var{number}
+@findex baud in sys file
+
+Specify the speed (the term @dfn{baud} is technically incorrect, but
+widely understood) at which to call the system. This will try all
+available ports with that speed until an unlocked port is found. The
+ports are defined in the port file. If both @code{speed} and
+@code{port} commands appear, both are used when selecting a port. To
+allow calls at more than one speed, the @code{alternate} command must be
+used (@pxref{Defaults and Alternates}). If this command does not
+appear, there is no default; the speed may be specified in the port
+file, but if it is not then the natural speed of the port will be used
+(whatever that means on the system). Specifying an explicit speed of 0
+will request the natural speed of the port (whatever the system sets it
+to), overriding any default speed from the defaults at the top of the
+file.
+
+@item port @var{string}
+@findex port in sys file
+
+Name a particular port or type of port to use when calling the system.
+The information for this port is obtained from the port file. If this
+command does not appear, there is no default; a port must somehow be
+specified in order to call out (it may be specified implicitly using the
+@code{speed} command or explicitly using the next version of
+@code{port}). There may be many ports with the same name; each will be
+tried in turn until an unlocked one is found which matches the desired
+speed.
+
+@item port @var{string} @dots{}
+
+If more than one string follows the @code{port} command, the strings are
+treated as a command that might appear in the port file (@pxref{port
+File}). If a port is named (by using a single string following
+@code{port}) these commands are ignored; their purpose is to permit
+defining the port completely in the system file rather than always
+requiring entries in two different files. In order to call out, a port
+must be specified using some version of the @code{port} command, or by
+using the @code{speed} command to select ports from the port file.
+
+@item phone @var{string}
+@findex phone
+@itemx address @var{string}
+@findex address
+
+Give a phone number to call (when using a modem port) or a remote host
+to contact (when using a TCP or TLI port). The commands @code{phone}
+and @code{address} are equivalent; the duplication is intended to
+provide a mnemonic choice depending on the type of port in use.
+
+When used with a modem port, an @kbd{=} character in the phone number
+means to wait for a secondary dial tone (although only some modems
+support this); a @kbd{-} character means to pause while dialing for 1
+second (again, only some modems support this). If the system has more
+than one phone number, each one must appear in a different alternate.
+The @code{phone} command must appear in order to call out on a modem;
+there is no default.
+
+When used with a TCP port, the string names the host to contact. It may
+be a domain name or a numeric Internet address. If no address is
+specified, the system name is used.
+
+When used with a TLI port, the string is treated as though it were an
+expect string in a chat script, allowing the use of escape characters
+(@pxref{Chat Scripts}). The @code{dialer-sequence} command in the port
+file may override this address (@pxref{port File}).
+
+When used with a port that not a modem or TCP or TLI, this command is
+ignored.
+
+@end table
+
+@node Logging In, , Placing the Call, Calling Out
+@subsubsection Logging In
+@table @code
+
+@item chat @var{strings}
+@findex chat in sys file
+@item chat-timeout @var{number}
+@findex chat-timeout in sys file
+@item chat-fail @var{string}
+@findex chat-fail in sys file
+@item chat-seven-bit @var{boolean}
+@findex chat-seven-bit in sys file
+@item chat-program @var{strings}
+@findex chat-program in sys file
+
+These commands describe a chat script to use when logging on to a remote
+system. This login chat script is run after any chat script defined in
+the @file{dial} file (@pxref{dial File}). Chat scripts are explained in
+@ref{Chat Scripts}.
+
+Two additional escape sequences may be used in send strings.
+
+@table @samp
+@item \L
+Send the login name, as set by the @code{call-login} command.
+@item \P
+Send the password, as set by the @code{call-password} command.
+@end table
+
+Three additional escape sequences may be used with the
+@code{chat-program} command. These are @samp{\L} and @samp{\P}, which
+become the login name and password, respectively, and @samp{\Z}, which
+becomes the name of the system of being called.
+
+The default chat script is:
+
+@example
+chat "" \r\c ogin:-BREAK-ogin:-BREAK-ogin: \L word: \P
+@end example
+
+This will send a carriage return (the @kbd{\c} suppresses the additional
+trailing carriage return that would otherwise be sent) and waits for the
+string @samp{ogin:} (which would be the last part of the @samp{login:}
+prompt supplied by a Unix system). If it doesn't see @samp{ogin:}, it
+sends a break and waits for @samp{ogin:} again. If it still doesn't see
+@samp{ogin:}, it sends another break and waits for @samp{ogin:} again.
+If it still doesn't see @samp{ogin:}, the chat script aborts and hangs
+up the phone. If it does see @samp{ogin:} at some point, it sends the
+login name (as specified by the @code{call-login} command) followed by a
+carriage return (since all send strings are followed by a carriage
+return unless @kbd{\c} is used) and waits for the string @samp{word:}
+(which would be the last part of the @samp{Password:} prompt supplied by
+a Unix system). If it sees @samp{word:}, it sends the password and a
+carriage return, completing the chat script. The program will then
+enter the handshake phase of the UUCP protocol.
+
+This chat script will work for most systems, so you will only be
+required to use the @code{call-login} and @code{call-password} commands.
+In fact, in the file-wide defaults you could set defaults of
+@samp{call-login *} and @samp{call-password *}; you would then just have
+to make an entry for each system in the call-out login file.
+
+Some systems seem to flush input after the @samp{login:} prompt, so they
+may need a version of this chat script with a @kbd{\d} before the
+@kbd{\L}. When using UUCP over TCP, some servers will not be handle the
+initial carriage return sent by this chat script; in this case you may
+have to specify the simple chat script @samp{ogin: \L word: \P}.
+
+@item call-login @var{string}
+@findex call-login
+
+Specify the login name to send with @kbd{\L} in the chat script. If the
+string is @samp{*} (e.g., @samp{call-login *}) the login name will be
+fetched from the call out login name and password file
+(@pxref{Configuration File Names}). The string may contain escape
+sequences as though it were an expect string in a chat script
+(@pxref{Chat Scripts}). There is no default.
+
+@item call-password @var{string}
+@findex call-password
+
+Specify the password to send with @kbd{\P} in the chat script. If the
+string is @samp{*} (e.g., @samp{call-password *}) the password will be
+fetched from the call-out login name and password file
+(@pxref{Configuration File Names}). The string may contain escape
+sequences as though it were an expect string in a chat script
+(@pxref{Chat Scripts}). There is no default.
+
+@end table
+
+@node Accepting a Call, Protocol Selection, Calling Out, sys File
+@subsection Accepting a Call
+
+@table @code
+
+@item called-login @var{strings}
+@findex called-login
+
+The first @var{string} specifies the login name that the system must use
+when calling in. If it is @samp{ANY} (e.g., @samp{called-login ANY}) any
+login name may be used; this is useful to override a file-wide default
+and to indicate that future alternates may have different login names.
+Case is significant. The default value is @samp{ANY}.
+
+Different alternates (@pxref{Defaults and Alternates}) may use different
+@code{called-login} commands, in which case the login name will be used
+to select which alternate is in effect; this will only work if the first
+alternate (before the first @code{alternate} command) uses the
+@code{called-login} command.
+
+Additional strings may be specified after the login name; they are a
+list of which systems are permitted to use this login name. If this
+feature is used, then normally the login name will only be given in a
+single @code{called-login} command. Only systems which appear on the
+list, or which use an explicit @code{called-login} command, will be
+permitted to use that login name. If the same login name is used more
+than once with a list of systems, all the lists are concatenated
+together. This feature permits you to restrict a login name to a
+particular set of systems without requiring you to use the
+@code{called-login} command for every single system; you can achieve a
+similar effect by using a different system file for each permitted login
+name with an appropriate @code{called-login} command in the file-wide
+defaults.
+
+@item callback @var{boolean}
+@findex callback
+
+If @var{boolean} is true, then when the remote system calls
+@code{uucico} will hang up the connection and prepare to call it back.
+The default is false.
+
+@item called-chat @var{strings}
+@findex called-chat
+@item called-chat-timeout @var{number}
+@findex called-chat-timeout
+@item called-chat-fail @var{string}
+@findex called-chat-fail
+@item called-chat-seven-bit @var{boolean}
+@findex called-chat-seven-bit
+@item called-chat-program @var{strings}
+@findex called-chat-program
+
+These commands may be used to define a chat script (@pxref{Chat
+Scripts}) that is run whenever the local system is called by the system
+being defined. The chat script defined by the @code{chat} command
+(@pxref{Logging In}), on the other hand, is used when the remote system
+is called. This called chat script might be used to set special modem
+parameters that are appropriate to a particular system. It is run after
+protocol negotiation is complete, but before the protocol has been
+started. For additional escape sequence which may be used besides those
+defined for all chat scripts, see @ref{Logging In}. There is no default
+called chat script. If the called chat script fails, the incoming call
+will be aborted.
+
+@end table
+
+@node Protocol Selection, File Transfer Control, Accepting a Call, sys File
+@subsection Protocol Selection
+
+@table @code
+
+@item protocol @var{string}
+@findex protocol in sys file
+
+Specifies which protocols to use for the other system, and in which
+order to use them. This would not normally be used. For example,
+@samp{protocol tfg}.
+
+The default depends on the characteristics of the port and the dialer,
+as specified by the @code{seven-bit} and @code{reliable} commands. If
+neither the port nor the dialer use either of these commands, the
+default is to assume an eight-bit reliable connection. The commands
+@samp{seven-bit true} or @samp{reliable false} might be used in either
+the port or the dialer to change this. Each protocol has particular
+requirements that must be met before it will be considered during
+negotiation with the remote side.
+
+The @samp{t} and @samp{e} protocols are intended for use over TCP or
+some other communication path with end to end reliability, as they do no
+checking of the data at all. They will only be considered on a TCP port
+which is both reliable and eight bit. For technical details, see @ref{t
+Protocol}, and @ref{e Protocol}.
+
+The @samp{i} protocol is a bidirectional protocol. It requires an
+eight-bit connection. It will run over a half-duplex link, such as
+Telebit modems in PEP mode, but for efficient use of such a connection
+you must use the @code{half-duplex} command (@pxref{port File}).
+@xref{i Protocol}.
+
+The @samp{g} protocol is robust, but requires an eight-bit connection.
+@xref{g Protocol}.
+
+The @samp{G} protocol is the System V Release 4 version of the @samp{g}
+protocol. @xref{Big G Protocol}.
+
+The @samp{a} protocol is a Zmodem like protocol, contributed by Doug
+Evans. It requires an eight-bit connection, but unlike the @samp{g} or
+@samp{i} protocol it will work if certain control characters may not be
+transmitted.
+
+The @samp{j} protocol is a variant of the @samp{i} protocol which can
+avoid certain control characters. The set of characters it avoids can
+be set by a parameter. While it technically does not require an eight
+bit connection (it could be configured to avoid all characters with the
+high bit set) it would be very inefficient to use it over one. It is
+useful over a eight-bit connection that will not transmit certain
+control characters. @xref{j Protocol}.
+
+The @samp{f} protocol is intended for use with X.25 connections; it
+checksums each file as a whole, so any error causes the entire file to
+be retransmitted. It requires a reliable connection, but only uses
+seven-bit transmissions. It is a streaming protocol, so, while it can
+be used on a serial port, the port must be completely reliable and flow
+controlled; many aren't. @xref{f Protocol}.
+
+The @samp{v} protocol is the @samp{g} protocol as used by the DOS
+program UUPC/Extended. It is provided only so that UUPC/Extended users
+can use it; there is no particular reason to select it. @xref{v
+Protocol}.
+
+The @samp{y} protocol is an efficient streaming protocol. It does error
+checking, but when it detects an error it immediately aborts the
+connection. This requires a reliable, flow controlled, eight-bit
+connection. In practice, it is only useful on a connection that is
+nearly always error-free. Unlike the @samp{t} and @samp{e} protocols,
+the connection need not be entirely error-free, so the @samp{y} protocol
+can be used on a serial port. @xref{y Protocol}.
+
+The protocols will be considered in the order shown above. This means
+that if neither the @code{seven-bit} nor the @code{reliable} command are
+used, the @samp{t} protocol will be used over a TCP connection and the
+@samp{i} protocol will be used over any other type of connection
+(subject, of course, to what is supported by the remote system; it may
+be assumed that all systems support the @samp{g} protocol).
+
+Note that currently specifying both @samp{seven-bit true} and
+@samp{reliable false} will not match any protocol. If this occurs
+through a combination of port and dialer specifications, you will have
+to use the @code{protocol} command for the system or no protocol will be
+selected at all (the only reasonable choice would be @samp{protocol f}).
+
+A protocol list may also be specified for a port (@pxref{port File}),
+but, if there is a list for the system, the list for the port is
+ignored.
+
+@item protocol-parameter @var{character} @var{string} @dots{}
+@findex protocol-parameter in sys file
+
+@var{character} is a single character specifying a protocol. The
+remaining strings are a command specific to that protocol which will be
+executed if that protocol is used. A typical command is something like
+@samp{window 7}. The particular commands are protocol specific.
+
+The @samp{i} protocol supports the following commands, all of which take
+numeric arguments:
+
+@table @code
+@item window
+The window size to request the remote system to use. This must be
+between 1 and 16 inclusive. The default is 16.
+@item packet-size
+The packet size to request the remote system to use. This must be
+between 1 and 4095 inclusive. The default is 1024.
+@item remote-packet-size
+If this is between 1 and 4095 inclusive, the packet size requested by
+the remote system is ignored, and this is used instead. The default is
+0, which means that the remote system's request is honored.
+@item sync-timeout
+The length of time, in seconds, to wait for a SYNC packet from the remote
+system. SYNC packets are exchanged when the protocol is started. The
+default is 10.
+@item sync-retries
+The number of times to retry sending a SYNC packet before giving up.
+The default is 6.
+@item timeout
+The length of time, in seconds, to wait for an incoming packet before
+sending a negative acknowledgement. The default is 10.
+@item retries
+The number of times to retry sending a packet or a negative
+acknowledgement before giving up and closing the connection. The
+default is 6.
+@item errors
+The maximum number of errors to permit before closing the connection.
+The default is 100.
+@item error-decay
+The rate at which to ignore errors. Each time this many packets are
+received, the error count is decreased by one, so that a long connection
+with an occasional error will not exceed the limit set by @code{errors}.
+The default is 10.
+@item ack-frequency
+The number of packets to receive before sending an acknowledgement. The
+default is half the requested window size, which should provide good
+performance in most cases.
+@end table
+
+The @samp{g}, @samp{G} and @samp{v} protocols support the following
+commands, all of which take numeric arguments, except
+@code{short-packets} which takes a boolean argument:
+
+@table @code
+@item window
+The window size to request the remote system to use. This must be
+between 1 and 7 inclusive. The default is 7.
+@item packet-size
+The packet size to request the remote system to use. This must be a
+power of 2 between 32 and 4096 inclusive. The default is 64 for the
+@samp{g} and @samp{G} protocols and 1024 for the @samp{v} protocol.
+Many older UUCP packages do not support packet sizes larger than 64, and
+many others do not support packet sizes larger than 128. Some UUCP
+packages will even dump core if a larger packet size is requested. The
+packet size is not a negotiation, and it may be different in each
+direction. If you request a packet size larger than the remote system
+supports, you will not be able to send any files.
+@item startup-retries
+The number of times to retry the initialization sequence. The default
+is 8.
+@item init-retries
+The number of times to retry one phase of the initialization sequence
+(there are three phases). The default is 4.
+@item init-timeout
+The timeout in seconds for one phase of the initialization sequence. The
+default is 10.
+@item retries
+The number of times to retry sending either a data packet or a request
+for the next packet. The default is 6.
+@item timeout
+The timeout in seconds when waiting for either a data packet or an
+acknowledgement. The default is 10.
+@item garbage
+The number of unrecognized bytes to permit before dropping the
+connection. This must be larger than the packet size. The default is
+10000.
+@item errors
+The number of errors (malformed packets, out of order packets, bad
+checksums, or packets rejected by the remote system) to permit before
+dropping the connection. The default is 100.
+@item error-decay
+The rate at which to ignore errors. Each time this many packets are
+received, the error count is decreased by one, so that a long connection
+with an occasional error will not exceed the limit set by @code{errors}.
+The default is 10.
+@item remote-window
+If this is between 1 and 7 inclusive, the window size requested by the
+remote system is ignored and this is used instead. This can be useful
+when dealing with some poor UUCP packages. The default is 0, which
+means that the remote system's request is honored.
+@item remote-packet-size
+If this is between 32 and 4096 inclusive the packet size requested by
+the remote system is ignored and this is used instead. There is
+probably no good reason to use this. The default is 0, which means that
+the remote system's request is honored.
+@item short-packets
+If this is true, then the code will optimize by sending shorter packets
+when there is less data to send. This confuses some UUCP packages, such
+as System V Release 4 (when using the @samp{G} protocol) and Waffle;
+when connecting to such a package, this parameter must be set to false.
+The default is true for the @samp{g} and @samp{v} protocols and false
+for the @samp{G} protocol.
+@end table
+
+The @samp{a} protocol is a Zmodem like protocol contributed by Doug
+Evans. It supports the following commands, all of which take numeric
+arguments except for @code{escape-control}, which takes a boolean
+argument:
+
+@table @code
+@item timeout
+Number of seconds to wait for a packet to arrive. The default is 10.
+@item retries
+The number of times to retry sending a packet. The default is 10.
+@item startup-retries
+The number of times to retry sending the initialization packet. The
+default is 4.
+@item garbage
+The number of garbage characters to accept before closing the
+connection. The default is 2400.
+@item send-window
+The number of characters that may be sent before waiting for an
+acknowledgement. The default is 1024.
+@item escape-control
+Whether to escape control characters. If this is true, the protocol may
+be used over a connection which does not transmit certain control
+characters, such as @code{XON} or @code{XOFF}. The connection must
+still transmit eight bit characters other than control characters. The
+default is false.
+@end table
+
+The @samp{j} protocol can be used over an eight bit connection that will
+not transmit certain control characters. It accepts the same protocol
+parameters that the @samp{i} protocol accepts, as well as one more:
+
+@table @code
+@item avoid
+A list of characters to avoid. This is a string which is interpreted as
+an escape sequence (@pxref{Chat Scripts}). The protocol does not have a
+way to avoid printable ASCII characters (byte values from 32 to 126,
+inclusive); only ASCII control characters and eight-bit characters may
+be avoided. The default value is @samp{\021\023}; these are the
+characters @code{XON} and @code{XOFF}, which many connections use for
+flow control. If the package is configured to use @code{HAVE_BSD_TTY},
+then on some versions of Unix you may have to avoid @samp{\377} as well,
+due to the way some implementations of the BSD terminal driver handle
+signals.
+@end table
+
+The @samp{f} protocol is intended for use with error-correcting modems
+only; it checksums each file as a whole, so any error causes the entire
+file to be retransmitted. It supports the following commands, both of
+which take numeric arguments:
+
+@table @code
+@item timeout
+The timeout in seconds before giving up. The default is 120.
+@item retries
+How many times to retry sending a file. The default is 2.
+@end table
+
+The @samp{t} and @samp{e} protocols are intended for use over TCP or
+some other communication path with end to end reliability, as they do no
+checking of the data at all. They both support a single command, which
+takes a numeric argument:
+
+@table @code
+@item timeout
+The timeout in seconds before giving up. The default is 120.
+@end table
+
+The @samp{y} protocol is a streaming protocol contributed by Jorge Cwik.
+It supports the following commands, both of which take numeric
+arguments:
+
+@table @code
+@item timeout
+The timeout in seconds when waiting for a packet. The default is 60.
+@item packet-size
+The packet size to use. The default is 1024.
+@end table
+
+The protocol parameters are reset to their default values after each
+call.
+
+@end table
+
+@node File Transfer Control, Miscellaneous (sys), Protocol Selection, sys File
+@subsection File Transfer Control
+
+@table @code
+
+@item send-request @var{boolean}
+@findex send-request
+
+The @var{boolean} determines whether the remote system is permitted to
+request files from the local system. The default is yes.
+
+@item receive-request @var{boolean}
+@findex receive-request
+
+The @var{boolean} determines whether the remote system is permitted to
+send files to the local system. The default is yes.
+
+@item request @var{boolean}
+@findex request
+
+A shorthand command, equivalent to specifying both @samp{send-request
+@var{boolean}} and @samp{receive-request @var{boolean}}.
+
+@item call-transfer @var{boolean}
+@findex call-transfer
+
+The @var{boolean} is checked when the local system places the call. It
+determines whether the local system may do file transfers queued up for
+the remote system. The default is yes.
+
+@item called-transfer @var{boolean}
+@findex called-transfer
+
+The @var{boolean} is checked when the remote system calls in. It
+determines whether the local system may do file transfers queued up for
+the remote system. The default is yes.
+
+@item transfer @var{boolean}
+@findex transfer
+
+A shorthand command, equivalent to specifying both @samp{call-transfer
+@var{boolean}} and @samp{called-transfer @var{boolean}}.
+
+@item call-local-size @var{number} @var{string}
+@findex call-local-size
+
+The @var{string} is a time string (@pxref{Time Strings}). The
+@var{number} is the size in bytes of the largest file that should be
+transferred at a time matching the time string, if the local system
+placed the call and the request was made by the local system. This
+command may appear multiple times in a single alternate. If this
+command does not appear, or if none of the time strings match, there are
+no size restrictions.
+
+With all the size control commands, the size of a file from the remote
+system (as opposed to a file from the local system) will only be checked
+if the other system is running this package: other UUCP packages will
+not understand a maximum size request, nor will they provide the size of
+remote files.
+
+@item call-remote-size @var{number} @var{string}
+@findex call-remote-size
+
+Specify the size in bytes of the largest file that should be transferred
+at a given time by remote request, when the local system placed the
+call. This command may appear multiple times in a single alternate. If
+this command does not appear, there are no size restrictions.
+
+@item called-local-size @var{number} @var{string}
+@findex called-local-size
+
+Specify the size in bytes of the largest file that should be transferred
+at a given time by local request, when the remote system placed the
+call. This command may appear multiple times in a single alternate. If
+this command does not appear, there are no size restrictions.
+
+@item called-remote-size @var{number} @var{string}
+@findex called-remote-size
+
+Specify the size in bytes of the largest file that should be transferred
+at a given time by remote request, when the remote system placed the
+call. This command may appear multiple times in a single alternate. If
+this command does not appear, there are no size restrictions.
+
+@item local-send @var{strings}
+@findex local-send
+
+Specifies that files in the directories named by the @var{strings} may
+be sent to the remote system when requested locally (using @code{uucp}
+or @code{uux}). The directories in the list should be separated by
+whitespace. A @samp{~} may be used for the public directory. On a Unix
+system, this is typically @file{/usr/spool/uucppublic}; the public
+directory may be set with the @code{pubdir} command. Here is an example
+of @code{local-send}:
+
+@example
+local-send ~ /usr/spool/ftp/pub
+@end example
+
+Listing a directory allows all files within the directory and all
+subdirectories to be sent. Directories may be excluded by preceding
+them with an exclamation point. For example:
+
+@example
+local-send /usr/ftp !/usr/ftp/private ~
+@end example
+
+@noindent
+means that all files in @file{/usr/ftp} or the public directory may be
+sent, except those files in @file{/usr/ftp/private}. The list of
+directories is read from left to right, and the last directory to apply
+takes effect; this means that directories should be listed from top
+down. The default is the root directory (i.e., any file at all may be
+sent by local request).
+
+@item remote-send @var{strings}
+@findex remote-send
+
+Specifies that files in the named directories may be sent to the remote
+system when requested by the remote system. The default is @samp{~}.
+
+@item local-receive @var{strings}
+@findex local-receive
+
+Specifies that files may be received into the named directories when
+requested by a local user. The default is @samp{~}.
+
+@item remote-receive @var{strings}
+@findex remote-receive
+
+Specifies that files may be received into the named directories when
+requested by the remote system. The default is @samp{~}. On Unix, the
+remote system may only request that files be received into directories
+that are writeable by the world, regardless of how this is set.
+
+@item forward-to @var{strings}
+@findex forward-to
+
+Specifies a list of systems to which files may be forwarded. The remote
+system may forward files through the local system on to any of the
+systems in this list. The string @samp{ANY} may be used to permit
+forwarding to any system. The default is to not permit forwarding to
+other systems. Note that if the remote system is permitted to execute
+the @code{uucp} command, it effectively has the ability to forward to
+any system.
+
+@item forward-from @var{strings}
+@findex forward-from
+
+Specifies a list of systems from which files may be forwarded. The
+remote system may request files via the local system from any of the
+systems in this list. The string @samp{ANY} may be used to permit
+forwarding to any system. The default is to not permit forwarding from
+other systems. Note that if a remote system is permitted to execute the
+@code{uucp} command, it effectively has the ability to request files
+from any system.
+
+@item forward @var{strings}
+@findex forward
+
+Equivalent to specifying both @samp{forward-to @var{strings}} and
+@samp{forward-from @var{strings}}. This would normally be used rather
+than either of the more specific commands.
+
+@end table
+
+@node Miscellaneous (sys), Default sys File Values, File Transfer Control, sys File
+@subsection Miscellaneous sys File Commands
+
+@table @code
+
+@item sequence @var{boolean}
+@findex sequence
+
+If @var{boolean} is true, then conversation sequencing is automatically
+used for the remote system, so that if somebody manages to spoof as the
+remote system, it will be detected the next time the remote system
+actually calls. This is false by default.
+
+@item command-path @var{strings}
+@findex command-path
+
+Specifies the path (a list of whitespace separated directories) to be
+searched to locate commands to execute. This is only used for commands
+requested by @code{uux}, not for chat programs. The default is from
+@file{policy.h}.
+
+@item commands @var{strings}
+@findex commands
+
+The list of commands which the remote system is permitted to execute
+locally. For example: @samp{commands rnews rmail}. If the value is
+@samp{ALL} (case significant), all commands may be executed. The
+default is @samp{rnews rmail}.
+
+@item free-space @var{number}
+@findex free-space
+
+Specify the minimum amount of file system space (in bytes) to leave free
+after receiving a file. If the incoming file will not fit, it will be
+rejected. This initial rejection will only work when talking to another
+instance of this package, since older UUCP packages do not provide the
+file size of incoming files. Also, while a file is being received,
+@code{uucico} will periodically check the amount of free space. If it
+drops below the amount given by the @code{free-space} command, the file
+transfer will be aborted. The default amount of space to leave free is
+from @file{policy.h}. This file space checking may not work on all
+systems.
+
+@item pubdir @var{string}
+@findex pubdir in sys file
+
+Specifies the public directory that is used when @samp{~} is specifed in
+a file transfer or a list of directories. This essentially overrides
+the public directory specified in the main configuration file for this
+system only. The default is the public directory specified in the main
+configuration file (which defaults to a value from @file{policy.h}).
+
+@item debug @var{string} @dots{}
+@findex debug in sys file
+
+Set additional debugging for calls to or from the system. This may be
+used to debug a connection with a specific system. It is particularly
+useful when debugging incoming calls, since debugging information will
+be generated whenever the call comes in. See the @code{debug} command
+in the main configuration file (@pxref{Debugging Levels}) for more
+details. The debugging information specified here is in addition to
+that specified in the main configuration file or on the command line.
+
+@item max-remote-debug @var{string} @dots{}
+@findex max-remote-debug
+
+When the system calls in, it may request that the debugging level be set
+to a certain value. The @code{max-remote-debug} command may be used to
+put a limit on the debugging level which the system may request, to
+avoid filling up the disk with debugging information. Only the
+debugging types named in the @code{max-remote-debug} command may be
+turned on by the remote system. To prohibit any debugging, use
+@samp{max-remote-debug none}.
+
+@end table
+
+@node Default sys File Values, , Miscellaneous (sys), sys File
+@subsection Default sys File Values
+
+The following are used as default values for all systems; they can be
+considered as appearing before the start of the file.
+
+@example
+time Never
+chat "" \r\c ogin:-BREAK-ogin:-BREAK-ogin: \L word: \P
+chat-timeout 10
+callback n
+sequence n
+request y
+transfer y
+local-send /
+remote-send ~
+local-receive ~
+remove-receive ~
+command-path [ from @file{policy.h} ]
+commands rnews rmail
+max-remote-debug abnormal,chat,handshake
+@end example
+
+@node port File, dial File, sys File, Configuration Files
+@section The Port Configuration File
+@cindex port file
+@cindex port configuration file
+@cindex configuration file (port)
+
+The port files may be used to name and describe ports. By default there
+is a single port file, named @file{port} in the directory
+@var{newconfigdir}. This may be overridden by the @code{portfile}
+command in the main configuration file; see @ref{Configuration File
+Names}.
+
+Any commands in a port file before the first @code{port} command specify
+defaults for all ports in the file; however, since the @code{type}
+command must appear before all other commands for a port, the defaults
+are only useful if all ports in the file are of the same type (this
+restriction may be lifted in a later version). All commands after a
+@code{port} command up to the next @code{port} command then describe
+that port. There are different types of ports; each type supports its
+own set of commands. Each command indicates which types of ports
+support it. There may be many ports with the same name; if a system
+requests a port by name then each port with that name will be tried
+until an unlocked one is found.
+
+@table @code
+
+@item port @var{string}
+@findex port in port file
+
+Introduces and names a port.
+
+@item type @var{string}
+@findex type
+
+Define the type of port. The default is @samp{modem}. If this command
+appears, it must immediately follow the @code{port} command. The type defines
+what commands are subsequently allowed. Currently the types are:
+
+@table @samp
+@item modem
+For a modem hookup.
+@item stdin
+For a connection through standard input and standard output, as when
+@code{uucico} is run as a login shell.
+@item direct
+For a direct connection to another system.
+@item tcp
+For a connection using TCP.
+@item tli
+For a connection using TLI.
+@item pipe
+For a connection through a pipe running another program.
+@end table
+
+@item protocol @var{string}
+@findex protocol in port file
+
+Specify a list of protocols to use for this port. This is just like the
+corresponding command for a system (@pxref{Protocol Selection}). A
+protocol list for a system takes precedence over a list for a port.
+
+@item protocol-parameter @var{character} @var{strings} [ any type ]
+@findex protocol-parameter in port file
+
+The same command as the @code{protocol-parameter} command used for
+systems (@pxref{Protocol Selection}). This one takes precedence.
+
+@item seven-bit @var{boolean} [ any type ]
+@findex seven-bit in port file
+
+This is only used during protocol negotiation; if the argument is true,
+it forces the selection of a protocol which works across a seven-bit
+link. It does not prevent eight bit characters from being transmitted.
+The default is false.
+
+@item reliable @var{boolean} [ any type ]
+@findex reliable in port file
+
+This is only used during protocol negotiation; if the argument is
+false, it forces the selection of a protocol which works across
+an unreliable communication link. The default is true. It would
+be more common to specify this for a dialer rather than a port.
+
+@item half-duplex @var{boolean} [ any type ]
+@findex half-duplex in port file
+
+If the argument is true, it means that the port only supports
+half-duplex connections. This only affects bidirectional protocols, and
+causes them to not do bidirectional transfers.
+
+@item device @var{string} [ modem, direct and tli only ]
+@findex device
+
+Names the device associated with this port. If the device is not named,
+the port name is taken as the device. Device names are system
+dependent. On Unix, a modem or direct connection might be something
+like @file{/dev/ttyd0}; a TLI port might be @file{/dev/inet/tcp}.
+
+@itemx speed @var{number} [modem and direct only ]
+@findex speed in port file
+@item baud @var{number} [ modem and direct only ]
+@findex baud in port file
+
+The speed this port runs at. If a system specifies a speed but no port
+name, then all ports which match the speed will be tried in order. If
+the speed is not specified here and is not specified by the system, the
+natural speed of the port will be used by default.
+
+@itemx speed-range @var{number} @var{number} [ modem only ]
+@findex speed-range
+@item baud-range @var{number} @var{number} [ modem only ]
+@findex baud-range
+
+Specify a range of speeds this port can run at. The first number is the
+minimum speed, the second number is the maximum speed. These numbers
+will be used when matching a system which specifies a desired speed.
+The simple @code{speed} (or @code{baud}) command is still used to
+determine the speed to run at if the system does not specify a speed.
+For example, the command @samp{speed-range 300 19200} means that the
+port will match any system which uses a speed from 300 to 19200 baud
+(and will use the speed specified by the system); this could be combined
+with @samp{speed 2400}, which means that when this port is used with a
+system that does not specify a speed, the port will be used at 2400
+baud.
+
+@item carrier @var{boolean} [ modem and direct only ]
+@findex carrier in port file
+
+The argument indicates whether the port supports carrier.
+
+If a modem port does not support carrier, the carrier detect signal will
+never be required on this port, regardless of what the modem chat script
+indicates. The default for a modem port is true.
+
+If a direct port supports carrier, the port will be set to expect
+carrier whenever it is used. The default for a direct port is false.
+
+@item hardflow @var{boolean} [ modem and direct only ]
+@findex hardflow
+
+The argument indicates whether the port supports hardware flow control.
+If it does not, hardware flow control will not be turned on for this
+port. The default is true. Hardware flow control is only supported on
+some systems.
+
+@item dial-device @var{string} [ modem only ]
+@findex dial-device
+
+Dialing instructions should be output to the named device, rather than
+to the normal port device. The default is to output to the normal port
+device.
+
+@item dialer @var{string} [ modem only ]
+@findex dialer in port file
+
+Name a dialer to use. The information is looked up in the dial file.
+There is no default. Some sort of dialer information must be specified
+to call out on a modem.
+
+@item dialer @var{string} @dots{} [ modem only ]
+
+If more than one string follows the @code{dialer} command, the strings
+are treated as a command that might appear in the dial file (@pxref{dial
+File}). If a dialer is named (by using the first form of this command,
+described just above), these commands are ignored. They may be used to
+specify dialer information directly in simple situations without needing
+to go to a separate file. There is no default. Some sort of dialer
+information must be specified to call out on a modem.
+
+@item dialer-sequence @var{strings} [ modem or tcp or tli only ]
+@findex dialer-sequence
+
+Name a sequence of dialers and tokens (phone numbers) to use. The first
+argument names a dialer, and the second argument names a token. The
+third argument names another dialer, and so on. If there are an odd
+number of arguments, the phone number specified with a @code{phone}
+command in the system file is used as the final token. The token is
+what is used for @kbd{\D} or @kbd{\T} in the dialer chat script. If the
+token in this string is @kbd{\D}, the system phone number will be used;
+if it is @kbd{\T}, the system phone number will be used after undergoing
+dialcodes translation. A missing final token is taken as @kbd{\D}.
+
+This command currently does not work if @code{dial-device} is specified;
+to handle this correctly will require a more systematic notion of chat
+scripts. Moreover, the @code{complete} and @code{abort} chat scripts,
+the protocol parameters, and the @code{carrier} and @code{dtr-toggle}
+commands are ignored for all but the first dialer.
+
+This command basically lets you specify a sequence of chat scripts to
+use. For example, the first dialer might get you to a local network and
+the second dialer might describe how to select a machine from the local
+network. This lets you break your dialing sequence into simple modules,
+and may make it easier to share dialer entries between machines.
+
+This command is to only way to use a chat script with a TCP port. This
+can be useful when using a modem which is accessed via TCP.
+
+When this command is used with a TLI port, then if the first dialer is
+@samp{TLI} or @samp{TLIS} the first token is used as the address to
+connect to. If the first dialer is something else, or if there is no
+token, the address given by the @code{address} command is used
+(@pxref{Placing the Call}). Escape sequences in the address are
+expanded as they are for chat script expect strings (@pxref{Chat
+Scripts}). The different between @samp{TLI} and @samp{TLIS} is that the
+latter implies the command @samp{stream true}. These contortions are
+all for HDB compatibility. Any subsequent dialers are treated as they
+are for a TCP port.
+
+@item lockname @var{string} [ modem and direct only ]
+@findex lockname
+
+Give the name to use when locking this port. On Unix, this is the name
+of the file that will be created in the lock directory. It is used as
+is, so on Unix it should generally start with @samp{LCK..}. For
+example, if a single port were named both @file{/dev/ttycu0} and
+@file{/dev/tty0} (perhaps with different characteristics keyed on the
+minor device number), then the command @code{lockname LCK..ttycu0} could
+be used to force the latter to use the same lock file name as the
+former.
+
+@item service @var{string} [ tcp only ]
+@findex service
+
+Name the TCP port number to use. This may be a number. If not, it will
+be looked up in @file{/etc/services}. If this is not specified, the
+string @samp{uucp} is looked up in @file{/etc/services}. If it is not
+found, port number 540 (the standard UUCP-over-TCP port number) will be
+used.
+
+@item push @var{strings} [ tli only ]
+@findex push
+
+Give a list of modules to push on to the TLI stream.
+
+@item stream @var{boolean} [ tli only ]
+@findex stream
+
+If this is true, and the @code{push} command was not used, the
+@samp{tirdwr} module is pushed on to the TLI stream.
+
+@item server-address @var{string} [ tli only ]
+@findex server-address
+
+Give the address to use when running as a TLI server. Escape sequences
+in the address are expanded as they are for chat script expect strings
+(@pxref{Chat Scripts}).
+
+The string is passed directly to the TLI @code{t_bind} function. The
+value needed may depend upon your particular TLI implementation. Check
+the manual pages, and, if necessary, try writing some sample programs.
+
+For AT&T 3B2 System V Release 3 using the Wollongong TCP/IP stack, which
+is probably typical, the format of TLI string is @samp{SSPPIIII}, where
+@samp{SS} is the service number (for TCP, this is 2), @samp{PP} is the
+TCP port number, and @samp{IIII} is the Internet address. For example,
+to accept a connection from on port 540 from any interface, use
+@samp{server-address \x00\x02\x02\x1c\x00\x00\x00\x00}. To only accept
+connections from a particular interface, replace the last four digits
+with the network address of the interface. (Thanks to Paul Pryor for
+the information in this paragraph).
+
+@item command @var{strings} [ pipe only ]
+@findex command
+
+Give the command, with arguments, to run when using a pipe port type.
+When a port of this type is used, the command is executed and
+@code{uucico} communicates with it over a pipe. This permits
+@code{uucico} or @code{cu} to communicate with another system which can
+only be reached through some unusual means. A sample use might be
+@samp{command /bin/rlogin -E -8 -l @var{login} @var{system}}. The
+command is run with the full privileges of UUCP; it is responsible for
+maintaining security.
+
+@end table
+
+@node dial File, UUCP Over TCP, port File, Configuration Files
+@section The Dialer Configuration File
+@cindex dial file
+@cindex dialer configuration file
+@cindex configuration file (dial)
+
+The dialer configuration files define dialers. By default there is a
+single dialer file, named @file{dial} in the directory
+@var{newconfigdir}. This may be overridden by the @code{dialfile}
+command in the main configuration file; see @ref{Configuration File
+Names}.
+
+Any commands in the file before the first @code{dialer} command specify
+defaults for all the dialers in the file. All commands after a
+@code{dialer} command up to the next @code{dialer} command are
+associated with the named dialer.
+
+@table @code
+
+@item dialer @var{string}
+@findex dialer in dial file
+
+Introduces and names a dialer.
+
+@item chat @var{strings}
+@findex chat in dial file
+@item chat-timeout @var{number}
+@findex chat-timeout in dial file
+@item chat-fail @var{string}
+@findex chat-fail in dial file
+@item chat-seven-bit @var{boolean}
+@findex chat-seven-bit in dial file
+@item chat-program @var{strings}
+@findex chat-program in dial file
+
+Specify a chat script to be used to dial the phone. This chat script is
+used before the login chat script in the @file{sys} file, if any
+(@pxref{Logging In}). For full details on chat scripts, see @ref{Chat
+Scripts}.
+
+The @code{uucico} daemon will sleep for one second between attempts to
+dial out on a modem. If your modem requires a longer wait period, you
+must start your chat script with delays (@samp{\d} in a send string).
+
+The chat script will be read from and sent to the port specified by the
+@code{dial-device} command for the port, if there is one.
+
+The following escape addition escape sequences may appear in send
+strings:
+
+@table @kbd
+@item \D
+send phone number without dialcode translation
+@item \T
+send phone number with dialcode translation
+@item \M
+do not require carrier
+@item \m
+require carrier (fail if not present)
+@end table
+
+See the description of the dialcodes file (@pxref{Configuration File
+Names}) for a description of dialcode translation. If the port does not
+support carrier, as set by the @code{carrier} command in the port file,
+@kbd{\M} and @kbd{\m} are ignored. If both the port and the dialer
+support carrier, as set by the @code{carrier} command in the port file
+and the @code{carrier} command in the dialer file, then every chat
+script implicitly begins with @kbd{\M} and ends with @kbd{\m}. There is
+no default chat script for dialers.
+
+The following additional escape sequences may be used in
+@code{chat-program}:
+
+@table @kbd
+@item \D
+phone number without dialcode translation
+@item \T
+phone number with dialcode translation
+@end table
+
+If the program changes the port in any way (e.g., sets parity) the
+changes will be preserved during protocol negotiation, but once the
+protocol is selected it will change the port settings.
+
+@item dialtone @var{string}
+@findex dialtone
+
+A string to output when dialing the phone number which causes the modem
+to wait for a secondary dial tone. This is used to translate the
+@kbd{=} character in a phone number. The default is a comma.
+
+@item pause @var{string}
+@findex pause
+
+A string to output when dialing the phone number which causes the modem
+to wait for 1 second. This is used to translate the @kbd{-} character
+in a phone number. The default is a comma.
+
+@item carrier @var{boolean}
+@findex carrier in dial file
+
+An argument of true means that the dialer supports the modem carrier
+signal. After the phone number is dialed, @code{uucico} will require
+that carrier be on. One some systems, it will be able to wait for it.
+If the argument is false, carrier will not be required. The default is
+true.
+
+@item carrier-wait @var{number}
+@findex carrier-wait
+
+If the port is supposed to wait for carrier, this may be used to
+indicate how many seconds to wait. The default is 60 seconds. Only
+some systems support waiting for carrier.
+
+@item dtr-toggle @var{boolean} @var{boolean}
+@findex dtr-toggle
+
+If the first argument is true, then DTR is toggled before using
+the modem. This is only supported on some systems and some ports. The
+second @var{boolean} need not be present; if it is, and it is
+true, the program will sleep for 1 second after toggling DTR.
+The default is to not toggle DTR.
+
+@need 500
+@item complete-chat @var{strings}
+@findex complete-chat
+@item complete-chat-timeout @var{number}
+@findex complete-chat-timeout
+@item complete-chat-fail @var{string}
+@findex complete-chat-fail
+@item complete-chat-seven-bit @var{boolean}
+@findex complete-chat-seven-bit
+@item complete-chat-program @var{strings}
+@findex complete-chat-program
+
+These commands define a chat script (@pxref{Chat Scripts}) which is run
+when a call is finished normally. This allows the modem to be reset.
+There is no default. No additional escape sequences may be used.
+
+@item complete @var{string}
+@findex complete
+
+This is a simple use of @code{complete-chat}. It is equivalent to
+@code{complete-chat "" @var{string}}; this has the effect of sending
+@var{string} to the modem when a call finishes normally.
+
+@item abort-chat @var{strings}
+@findex abort-chat
+@item abort-chat-timeout @var{number}
+@findex abort-chat-timeout
+@item abort-chat-fail @var{string}
+@findex abort-chat-fail
+@item abort-chat-seven-bit @var{boolean}
+@findex abort-chat-seven-bit
+@item abort-chat-program @var{strings}
+@findex abort-chat-program
+
+These commands define a chat script (@pxref{Chat Scripts}) to be run
+when a call is aborted. They may be used to interrupt and reset the
+modem. There is no default. No additional escape sequences may be
+used.
+
+@item abort @var{string}
+@findex abort
+
+This is a simple use of @code{abort-chat}. It is equivalent to
+@code{abort-chat "" @var{string}}; this has the effect of sending
+@var{string} to the modem when a call is aborted.
+
+@item protocol-parameter @var{character} @var{strings}
+@findex protocol-parameter in dial file
+
+Set protocol parameters, just like the @code{protocol-parameter} command
+in the system configuration file or the port configuration file; see
+@ref{Protocol Selection}. These parameters take precedence, then those
+for the port, then those for the system.
+
+@item seven-bit @var{boolean}
+@findex seven-bit in dial file
+
+This is only used during protocol negotiation; if it is true, it
+forces selection of a protocol which works across a seven-bit link. It
+does not prevent eight bit characters from being transmitted. The
+default is false. It would be more common to specify this for a
+port than for a dialer.
+
+@item reliable @var{boolean}
+@findex reliable in dial file
+
+This is only used during protocol negotiation; if it is false, it
+forces selection of a protocol which works across an unreliable
+communication link. The default is true.
+
+@item half-duplex @var{boolean} [ any type ]
+@findex half-duplex in dial file
+
+If the argument is true, it means that the dialer only supports
+half-duplex connections. This only affects bidirectional protocols, and
+causes them to not do bidirectional transfers.
+
+@end table
+
+@node UUCP Over TCP, Security, dial File, Configuration Files
+@section UUCP Over TCP
+
+If your system has a Berkeley style socket library, or a System V style
+TLI interface library, you can compile the code to permit making
+connections over TCP. Specifying that a system should be reached via
+TCP is easy, but nonobvious.
+
+@menu
+* TCP Client:: Connecting to Another System Over TCP
+* TCP Server:: Running a TCP Server
+@end menu
+
+@node TCP Client, TCP Server, UUCP Over TCP, UUCP Over TCP
+@subsection Connecting to Another System Over TCP
+
+If you are using the new style configuration files (@pxref{Configuration
+Files}), add the line @samp{port type tcp} to the entry in the
+@file{sys} file. By default UUCP will get the port number by looking up
+@samp{uucp} in @file{/etc/services}; if the @samp{uucp} service is not
+defined, port 540 will be used. You can set the port number to use with
+the command @samp{port service @var{xxx}}, where @var{xxx} can be either
+a number or a name to look up in @file{/etc/services}. You can specify
+the address of the remote host with @samp{address @var{a.b.c}}; if you
+don't give an address, the remote system name will be used. You should
+give an explicit chat script for the system when you use TCP; the
+default chat script begins with a carriage return, which will not work
+with some UUCP TCP servers.
+
+If you are using V2 configuration files, add a line like this to
+@file{L.sys}:
+@example
+@var{sys} Any TCP uucp @var{host}.@var{domain} chat-script
+@end example
+This will make an entry for system @var{sys}, to be called at any time,
+over TCP, using port number @samp{uucp} (as found in
+@file{/etc/services}; this may be specified as a number), using remote
+host @file{@var{host}.@var{domain}}, with some chat script.
+
+If you are using HDB configuration files, add a line like this to
+Systems:
+@example
+@var{sys} Any TCP - @var{host}.@var{domain} chat-script
+@end example
+and a line like this to @file{Devices}:
+@example
+TCP uucp - -
+@end example
+You only need one line in @file{Devices} regardless of how many systems
+you contact over TCP. This will make an entry for system @var{sys}, to
+be called at any time, over TCP, using port number @samp{uucp} (as found
+in @file{/etc/services}; this may be specified as a number), using
+remote host @file{@var{host}.@var{domain}}, with some chat script.
+
+@node TCP Server, , TCP Client, UUCP Over TCP
+@subsection Running a TCP Server
+
+The @code{uucico} daemon may be run as a TCP server. To use the default
+port number, which is a reserved port, @code{uucico} must be invoked by
+the superuser (or it must be set user ID to the superuser, but I don't
+recommend doing that).
+
+You must define a port, either using the port file (@pxref{port File}),
+if you are using the new configuration method, or with an entry in
+@file{Devices} if you are using HDB; there is no way to define a port
+using V2. If you are using HDB the port must be named @samp{TCP}; a
+line as shown above will suffice. You can then start @code{uucico} as
+@samp{uucico -p TCP} (after the @samp{-p}, name the port; in HDB it must
+be @samp{TCP}). This will wait for incoming connections, and fork off a
+child for each one. Each connection will be prompted with @samp{login:}
+and @samp{Password:}; the results will be checked against the UUCP (not
+the system) password file (@pxref{Configuration File Names}).
+
+Another way to run a UUCP TCP server is to use the BSD @code{uucpd}
+program.
+
+Yet another way to run a UUCP TCP server is to use @code{inetd}.
+Arrange for @code{inetd} to start up @code{uucico} with the @samp{-l}
+switch. This will cause @code{uucico} to prompt with @samp{login:} and
+@samp{Password:} and check the results against the UUCP (not the system)
+password file (you may want to also use the @samp{-D} switch to avoid a
+fork, which in this case is unnecessary).
+
+@node Security, , UUCP Over TCP, Configuration Files
+@section Security
+
+This discussion of UUCP security applies only to Unix. It is a bit
+cursory; suggestions for improvement are solicited.
+
+UUCP is traditionally not very secure. Taylor UUCP addresses some
+security issues, but is still far from being a secure system.
+
+If security is very important to you, then you should not permit any
+external access to your computer, including UUCP. Any opening to the
+outside world is a potential security risk.
+
+When local users use UUCP to transfer files, Taylor UUCP can do little
+to secure them from each other. You can allow somewhat increased
+security by putting the owner of the UUCP programs (normally
+@code{uucp}) into a separate group; the use of this is explained in the
+following paragraphs, which refer to this separate group as
+@code{uucp-group}.
+
+When the @code{uucp} program is invoked to copy a file to a remote
+system, it will, by default, copy the file into the UUCP spool
+directory. When the @code{uux} program is used, the @samp{-C} switch
+must be used to copy the file into the UUCP spool directory. In any
+case, once the file has been copied into the spool directory, other
+local users will not be able to access it.
+
+When a file is requested from a remote system, UUCP will only permit it
+to be placed in a directory which is writable by the requesting user.
+The directory must also be writable by UUCP. A local user can create a
+directory with a group of @code{uucp-group} and set the mode to permit
+group write access. This will allow the file be requested without
+permitting it to be viewed by any other user.
+
+There is no provision for security for @code{uucp} requests (as opposed
+to @code{uux} requests) made by a user on a remote system. A file sent
+over by a remote request may only be placed in a directory which is
+world writable, and the file will be world readable and writable. This
+will permit any local user to destroy or replace the contents of the
+file. A file requested by a remote system must be world readable, and
+the directory it is in must be world readable. Any local user will be
+able to examine, although not necessarily modify, the file before it is
+sent.
+
+There are some security holes and race conditions that apply to the
+above discussion which I will not elaborate on. They are not hidden
+from anybody who reads the source code, but they are somewhat technical
+and difficult (though scarcely impossible) to exploit. Suffice it to
+say that even under the best of conditions UUCP is not completely
+secure.
+
+For many sites, security from remote sites is a more important
+consideration. Fortunately, Taylor UUCP does provide some support in
+this area.
+
+The greatest security is provided by always dialing out to the other
+site. This prevents anybody from pretending to be the other site. Of
+course, only one side of the connection can do this.
+
+If remote dialins must be permitted, then it is best if the dialin line
+is used only for UUCP. If this is the case, then you should create a
+call-in password file (@pxref{Configuration File Names}) and let
+@code{uucico} do its own login prompting. For example, to let remote
+sites log in on a port named @samp{entry} in the port file (@pxref{port
+File}), you might invoke @samp{uucico -e -p entry}. This would cause
+@code{uucico} to enter an endless loop of login prompts and daemon
+executions. The advantage of this approach is that even if remote users
+break into the system by guessing or learning the password, they will
+only be able to do whatever @code{uucico} permits them to do. They will
+not be able to start a shell on your system.
+
+If remote users can dial in and log on to your system, then you have a
+security hazard more serious than that posed by UUCP. But then, you
+probably knew that already.
+
+Once your system has connected with the remote UUCP, there is a fair
+amount of control you can exercise. You can use the @code{remote-send}
+and @code{remote-receive} commands to control the directories the remote
+UUCP can access. You can use the @code{request} command to prevent the
+remote UUCP from making any requests of your system at all; however, if
+you do this it will not even be able to send you mail or news. If you
+do permit remote requests, you should be careful to restrict what
+commands may be executed at the remote system's request. The default is
+@code{rmail} and @code{rnews}, which will suffice for most systems.
+
+If different remote systems call in and they must be granted different
+privileges (perhaps some systems are within the same organization and
+some are not) then the @code{called-login} command should be used for
+each system to require that they use different login names. Otherwise,
+it would be simple for a remote system to use the @code{myname} command
+and pretend to be a different system. The @code{sequence} command can
+be used to detect when one system pretended to be another, but, since
+the sequence numbers must be reset manually after a failed handshake,
+this can sometimes be more trouble than it's worth.
+
+@c START-OF-FAQ
+@ignore
+This chapter is used to generate the comp.mail.uucp UUCP Internals FAQ,
+as well as being part of the Taylor UUCP manual. Text that should
+appear only in the manual is bracketed by ifclear faq. Text that should
+appear only in the FAQ is bracketed by ifset faq.
+@end ignore
+
+@ifset faq
+@paragraphindent asis
+@format
+Subject: UUCP Internals Frequently Asked Questions
+Newsgroups: comp.mail.uucp,comp.answers,news.answers
+Followup-To: comp.mail.uucp
+Reply-To: ian@@airs.com (Ian Lance Taylor)
+Keywords: UUCP, protocol, FAQ
+Approved: news-answers-request@@MIT.Edu
+
+Archive-name: uucp-internals
+Version: $Revision: 1.1 $
+Last-modified: $Date: 2000/12/21 13:44:25 $
+@end format
+@end ifset
+
+@node Protocols, Hacking, Configuration Files, Top
+@chapter UUCP Protocol Internals
+
+@ifclear faq
+This chapter describes how the various UUCP protocols work, and
+discusses some other internal UUCP issues.
+
+This chapter is quite technical. You do not need to understand it, or
+even read it, in order to use Taylor UUCP. It is intended for people
+who are interested in how the UUCP code works.
+
+The information in this chapter is posted monthly to the Usenet
+newsgroups @samp{comp.mail.uucp}, @samp{news.answers}, and
+@samp{comp.answers}. The posting is available from any
+@samp{news.answers} archive site, such as @samp{rtfm.mit.edu}. If you
+plan to use this information to write a UUCP program, please make sure
+you get the most recent version of the posting, in case there have been
+any corrections.
+@end ifclear
+
+@ifset faq
+Recent changes:
+@itemize @bullet
+@item Conversion to Texinfo format.
+@item Description of the @samp{E} command.
+@item Description of optional number following @samp{-N} and @samp{ROKN}
+in UUCP protocol startup.
+@item Detailed description of the @samp{y} protocol.
+@item Mention the name uuxqt uses for lock files.
+@end itemize
+
+This article was written by Ian Lance Taylor @samp{<ian@@airs.com>} and
+I may even update it periodically. Please send me mail about
+suggestions or inaccuracies.
+
+This article describes how the various UUCP protocols work, and
+discusses some other internal UUCP issues. It does not describe how to
+configure UUCP, nor how to solve UUCP connection problems, nor how to
+deal with UUCP mail. I do not know of any FAQ postings on these topics.
+There are some documents on the net describing UUCP configuration, but I
+can not keep an up to date list here; try using archie.
+
+If you haven't read the @samp{news.announce.newusers} articles, read
+them.
+
+This article is in digest format. Some newsreaders will be able to
+break it apart into separate articles. Please don't ask me how to do
+this, though.
+
+This article covers the following topics. If questions about one of
+these topics is posted to @samp{comp.mail.uucp}, please send mail to the
+poster referring her or him to this FAQ. There is no reason to post a
+followup, as most of us know the answer already.
+@end ifset
+
+@menu
+* UUCP Protocol Sources:: Sources for UUCP Protocol Information
+* UUCP Grades:: UUCP Grades
+* UUCP Lock Files:: UUCP Lock Files
+* Execution File Format:: Execution File Format
+* UUCP Protocol:: UUCP Protocol
+* g Protocol:: g protocol
+* f Protocol:: f protocol
+* t Protocol:: t protocol
+* e Protocol:: e protocol
+* Big G Protocol:: G protocol
+* i Protocol:: i protocol
+* j Protocol:: j protocol
+* x Protocol:: x protocol
+* y Protocol:: y protocol
+* d Protocol:: d protocol
+* h Protocol:: h protocol
+* v Protocol:: v protocol
+@end menu
+
+@ifset faq
+@format
+UUCP Protocol Sources
+Alarm in Debugging Output
+UUCP Grades
+UUCP Lock Files
+Execution File Format
+UUCP Protocol
+UUCP @samp{g} Protocol
+UUCP @samp{f} Protocol
+UUCP @samp{t} Protocol
+UUCP @samp{e} Protocol
+UUCP @samp{G} Protocol
+UUCP @samp{i} Protocol
+UUCP @samp{j} Protocol
+UUCP @samp{x} Protocol
+UUCP @samp{y} Protocol
+UUCP @samp{d} Protocol
+UUCP @samp{h} Protocol
+UUCP @samp{v} Protocol
+Thanks
+
+----------------------------------------------------------------------
+
+From: UUCP Protocol Sources
+Subject: UUCP Protocol Sources
+
+@end format
+@end ifset
+
+@node UUCP Protocol Sources, UUCP Grades, Protocols, Protocols
+@section UUCP Protocol Sources
+
+@quotation
+``Unix-to-Unix Copy Program,'' said PDP-1. ``You will never find a more
+wretched hive of bugs and flamers. We must be cautious.''
+@flushright
+---DECWars
+@end flushright
+@end quotation
+
+I took a lot of the information from Jamie E. Hanrahan's paper in the
+Fall 1990 DECUS Symposium, and from @cite{Managing UUCP and Usenet} by Tim
+O'Reilly and Grace Todino (with contributions by several other
+people). The latter includes most of the former, and is published by
+@example
+O'Reilly & Associates, Inc.
+103 Morris Street, Suite A
+Sebastopol, CA 95472
+@end example
+It is currently in its tenth edition. The ISBN number is
+@samp{0-937175-93-5}.
+
+Some information is originally due to a Usenet article by Chuck Wegrzyn.
+The information on execution files comes partially from Peter Honeyman.
+The information on the @samp{g} protocol comes partially from a paper by
+G.L.@: Chesson of Bell Laboratories, partially from Jamie E. Hanrahan's
+paper, and partially from source code by John Gilmore. The information
+on the @samp{f} protocol comes from the source code by Piet Berteema.
+The information on the @samp{t} protocol comes from the source code by
+Rick Adams. The information on the @samp{e} protocol comes from a
+Usenet article by Matthias Urlichs. The information on the @samp{d}
+protocol comes from Jonathan Clark, who also supplied information about
+QFT. The UUPlus information comes straight from Christopher J. Ambler,
+of UUPlus Development; it applies to version 1.52 and up of the
+shareware version of UUPlus Utilities, called FSUUCP 1.52, but referred
+to in this article as UUPlus.
+
+Although there are few books about UUCP, there are many about networks
+and protocols in general. I recommend two non-technical books which
+describe the sorts of things that are available on the network:
+@cite{The Whole Internet}, by Ed Krol, and @cite{Zen and the Art of the
+Internet}, by Brendan P. Kehoe. Good technical discussions of
+networking issues can be found in @cite{Internetworking with TCP/IP}, by
+Douglas E. Comer and David L. Stevens and in @cite{Design and Validation
+of Computer Protocols} by Gerard J. Holzmann.
+
+@ifset faq
+@c Note that this section is only in the FAQ, since it does not fit in
+@c here in the manual.
+@format
+------------------------------
+
+From: Alarm in Debugging Output
+Subject: Alarm in Debugging Output
+
+Alarm in Debugging Output
+=========================
+@end format
+
+The debugging output of many versions of UUCP will include messages like
+@samp{alarm 1} or @samp{pkcget: alarm 1}. Taylor UUCP does not use the
+word @samp{alarm}, but will instead log messages like @samp{Timed out
+waiting for packet}.
+
+These types of messages mean that the UUCP package has timed out while
+waiting for some sort of response from the remote system. If it happens
+consistently when trying to transfer a particular file, then the most
+likely problem is that one of the modems will not transmit the XON or
+XOFF characters. Several UUCP protocols require an eight bit clean
+connection, which means that the modems must treat XON or XOFF as normal
+data characters, not as flow control signals. This should always be
+checked first.
+
+Other possible problems are that the modems have simply dropped their
+connection, or perhaps on one side or the other the serial buffer is
+overflowing and dropping characters. Another possibility is that the
+UUCP packages disagree about some aspect of the UUCP protocol, which is
+uncommon but does happen occasionally.
+
+Using the information in the following sections, you should be able to
+figure out what type of data your UUCP was expecting to receive. This
+may give some indication as to exactly what the problem is. It is
+difficult to be more specific, since there are many possiblities.
+
+@format
+------------------------------
+
+From: UUCP Grades
+Subject: UUCP Grades
+@end format
+@end ifset
+
+@node UUCP Grades, UUCP Lock Files, UUCP Protocol Sources, Protocols
+@section UUCP Grades
+@cindex grades implementation
+
+Modern UUCP packages support a priority grade for each command. The
+grades generally range from @kbd{A} (the highest) to @kbd{Z} followed by
+@kbd{a} to @kbd{z}. Some UUCP packages (including Taylor UUCP) also
+support @kbd{0} to @kbd{9} before @kbd{A}. Some UUCP packages may
+permit any ASCII character as a grade.
+
+On Unix, these grades are encoded in the name of the command file
+created by @code{uucp} or @code{uux}. A command file name generally has
+the form @file{C.nnnngssss} where @samp{nnnn} is the remote system name
+for which the command is queued, @samp{g} is a single character grade,
+and @samp{ssss} is a four character sequence number. For example, a
+command file created for the system @samp{airs} at grade @samp{Z} might
+be named @file{C.airsZ2551}.
+
+The remote system name will be truncated to seven characters, to
+ensure that the command file name will fit in the 14 character file
+name limit of the traditional Unix file system. UUCP packages which
+have no other means of distinguishing which command files are intended
+for which systems thus require all systems they connect to to have
+names that are unique in the first seven characters. Some UUCP
+packages use a variant of this format which truncates the system name
+to six characters. HDB and Taylor UUCP use a different spool
+directory format, which allows up to fourteen characters to be used
+for each system name.
+
+The sequence number in the command file name may be a decimal integer,
+or it may be a hexadecimal integer, or it may contain any alphanumeric
+character. Different UUCP packages are different.
+@ifclear faq
+Taylor UUCP uses any alphanumeric character.
+@end ifclear
+
+UUPlus Utilities (as FSUUCP, a shareware DOS based UUCP and news
+package) uses up to 8 characters for file names in the spool (this is a
+DOS file system limitation; actually, with the extension, 11 characters
+are available, but FSUUCP reserves that for future use). FSUUCP
+defaults mail to grade @samp{D}, and news to grade @samp{N}, except that
+when the grade of incoming mail can be determined, that grade is
+preserved if the mail is forwarded to another system. The default grades
+may be changed by editing the @file{LIB/MAILRC} file for mail, or the
+@file{UUPLUS.CFG} file for news.
+
+UUPC/extended for DOS, OS/2 and Windows NT handles mail at grade
+@samp{C}, news at grade @samp{d}, and file transfers at grade @samp{n}.
+The UUPC/extended @code{UUCP} and @code{RMAIL} commands accept grades to
+override the default, the others do not.
+
+I do not know how command grades are handled in other non-Unix UUCP
+packages.
+
+Modern UUCP packages allow you to restrict file transfer by grade
+depending on the time of day. Typically this is done with a line in
+the @file{Systems} (or @file{L.sys}) file like this:
+@example
+ airs Any/Z,Any2305-0855 ...
+@end example
+This allows grades @samp{Z} and above to be transferred at any time.
+Lower grades may only be transferred at night. I believe that this
+grade restriction applies to local commands as well as to remote
+commands, but I am not sure. It may only apply if the UUCP package
+places the call, not if it is called by the remote system.
+
+Taylor UUCP can use the @code{timegrade} and @code{call-timegrade}
+commands to achieve the same effect.
+@ifclear faq
+@xref{When to Call}.
+@end ifclear
+It supports the above format when reading @file{Systems} or
+@file{L.sys}.
+
+UUPC/extended provides the @code{symmetricgrades} option to announce the
+current grade in effect when calling the remote system.
+
+UUPlus allows specification of the highest grade accepted on a per-call
+basis with the @samp{-g} option in @code{UUCICO}.
+
+This sort of grade restriction is most useful if you know what grades
+are being used at the remote site. The default grades used depend on
+the UUCP package. Generally @code{uucp} and @code{uux} have different
+defaults. A particular grade can be specified with the @samp{-g} option
+to @code{uucp} or @code{uux}. For example, to request execution of
+@samp{rnews} on @samp{airs} with grade @samp{d}, you might use something
+like
+@example
+ uux -gd - airs!rnews < article
+@end example
+
+Uunet queues up mail at grade @samp{C}, but increases the grade based on
+the size. News is queued at grade @samp{d}, and file transfers at grade
+@samp{n}. The example above would allow mail (below some large size) to
+be received at any time, but would only permit news to be transferred at
+night.
+
+@ifset faq
+@format
+------------------------------
+
+From: UUCP Lock Files
+Subject: UUCP Lock Files
+@end format
+@end ifset
+
+@node UUCP Lock Files, Execution File Format, UUCP Grades, Protocols
+@section UUCP Lock Files
+@cindex lock files
+
+This discussion applies only to Unix. I have no idea how UUCP locks
+ports on other systems.
+
+UUCP creates files to lock serial ports and systems. On most, if not
+all, systems, these same lock files are also used by @code{cu} to
+coordinate access to serial ports. On some systems @code{getty} also
+uses these lock files, often under the name @code{uugetty}.
+
+The lock file normally contains the process ID of the locking process.
+This makes it easy to determine whether a lock is still valid. The
+algorithm is to create a temporary file and then link it to the name
+that must be locked. If the link fails because a file with that name
+already exists, the existing file is read to get the process ID. If the
+process still exists, the lock attempt fails. Otherwise the lock file
+is deleted and the locking algorithm is retried.
+
+Older UUCP packages put the lock files in the main UUCP spool directory,
+@file{/usr/spool/uucp}. HDB UUCP generally puts the lock files in a
+directory of their own, usually @file{/usr/spool/locks} or
+@file{/etc/locks}.
+
+The original UUCP lock file format encodes the process ID as a four byte
+binary number. The order of the bytes is host-dependent. HDB UUCP
+stores the process ID as a ten byte ASCII decimal number, with a
+trailing newline. For example, if process 1570 holds a lock file, it
+would contain the eleven characters space, space, space, space, space,
+space, one, five, seven, zero, newline. Some versions of UUCP add a
+second line indicating which program created the lock (@code{uucp},
+@code{cu}, or @code{getty/uugetty}). I have also seen a third type of
+UUCP lock file which does not contain the process ID at all.
+
+The name of the lock file is traditionally @file{LCK..} followed by the
+base name of the device. For example, to lock @file{/dev/ttyd0} the
+file @file{LCK..ttyd0} would be created. On SCO Unix, the lock file
+name is always forced to lower case even if the device name has upper
+case letters.
+
+System V Release 4 UUCP names the lock file using the major and minor
+device numbers rather than the device name. The file is named
+@file{LK.@var{XXX}.@var{YYY}.@var{ZZZ}}, where @var{XXX}, @var{YYY} and
+@var{ZZZ} are all three digit decimal numbers. @var{XXX} is the major
+device number of the device holding the directory holding the device
+file (e.g., @file{/dev}). @var{YYY} is the major device number of the
+device file itself. @var{ZZZ} is the minor device number of the device
+file itself. If @code{s} holds the result of passing the device to the
+stat system call (e.g., @code{stat ("/dev/ttyd0", &s)}), the following
+line of C code will print out the corresponding lock file name:
+@example
+ printf ("LK.%03d.%03d.%03d", major (s.st_dev),
+ major (s.st_rdev), minor (s.st_rdev));
+@end example
+The advantage of this system is that even if there are several links to
+the same device, they will all use the same lock file name.
+
+When two or more instances of @code{uuxqt} are executing, some sort of
+locking is needed to ensure that a single execution job is only started
+once. I don't know how most UUCP packages deal with this. Taylor UUCP
+uses a lock file for each execution job. The name of the lock file is
+the same as the name of the @file{X.*} file, except that the initial
+@samp{X} is changed to an @samp{L}. The lock file holds the process ID
+as described above.
+
+@ifset faq
+@format
+------------------------------
+
+From: Execution File Format
+Subject: Execution File Format
+@end format
+@end ifset
+
+@node Execution File Format, UUCP Protocol, UUCP Lock Files, Protocols
+@section Execution File Format
+@cindex execution file format
+@cindex @file{X.*} file format
+
+UUCP @file{X.*} files control program execution. They are created by
+@code{uux}. They are transferred between systems just like any other
+file. The @code{uuxqt} daemon reads them to figure out how to execute
+the job requested by @code{uux}.
+
+An @file{X.*} file is simply a text file. The first character of each
+line is a command, and the remainder of the line supplies arguments.
+The following commands are defined:
+
+@table @samp
+@item C command
+This gives the command to execute, including the program and all
+arguments. For example, @samp{rmail ian@@airs.com}.
+
+@item U user system
+This names the user who requested the command, and the system from which
+the request came.
+
+@item I standard-input
+This names the file from which standard input is taken. If no standard
+input file is given, the standard input will probably be attached to
+@file{/dev/null}. If the standard input file is not from the system on
+which the execution is to occur, it will also appear in an @samp{F}
+command.
+
+@item O standard-output [system]
+This names the standard output file. The optional second argument names
+the system to which the file should be sent. If there is no second
+argument, the file should be created on the executing system.
+
+@item F required-file [filename-to-use]
+The @samp{F} command can appear multiple times. Each @samp{F} command
+names a file which must exist before the execution can proceed. This
+will usually be a file which is transferred from the system on which
+@code{uux} was executed, but it can also be a file from the local system
+or some other system. If the file is not from the local system, then
+the command will usually name a file in the spool directory. If the
+optional second argument appears, then the file should be copied to the
+execution directory under that name. This is necessary for any file
+other than the standard input file. If the standard input file is not
+from the local system, it will appear in both an @samp{F} command and an
+@samp{I} command.
+
+@item R requestor-address
+This is the address to which mail about the job should be sent. It is
+relative to the system named in the @samp{U} command. If the @samp{R}
+command does not appear, then mail is sent to the user named in the
+@samp{U} command.
+
+@item Z
+This command takes no arguments. It means that a mail message should be
+sent if the command failed. This is the default behaviour for most
+modern UUCP packages, and for them the @samp{Z} command does not
+actually do anything.
+
+@item N
+This command takes no arguments. It means that no mail message should
+be sent, even if the command failed.
+
+@item n
+This command takes no arguments. It means that a mail message should be
+sent if the command succeeded. Normally a message is sent only if the
+command failed.
+
+@item B
+This command takes no arguments. It means that the standard input
+should be returned with any error message. This can be useful in cases
+where the input would otherwise be lost.
+
+@item e
+This command takes no arguments. It means that the command should be
+processed with @file{/bin/sh}. For some packages this is the default
+anyhow. Most packages will refuse to execute complex commands or
+commands containing wildcards, because of the security holes this opens.
+
+@item E
+This command takes no arguments. It means that the command should be
+processed with the @code{execve} system call. For some packages this is
+the default anyhow.
+
+@item M status-file
+This command means that instead of mailing a message, the message should
+be copied to the named file on the system named by the @samp{U} command.
+
+@item # comment
+This command is ignored, as is any other unrecognized command.
+@end table
+
+Here is an example. Given the following command executed on system
+test1
+@example
+ uux - test2!cat - test2!~ian/bar !qux '>~/gorp'
+@end example
+(this is only an example, as most UUCP systems will not permit the cat
+command to be executed) Taylor UUCP will produce something like the
+following @file{X.} file:
+@example
+U ian test1
+F D.test1N003r qux
+O /usr/spool/uucppublic test1
+F D.test1N003s
+I D.test1N003s
+C cat - ~ian/bar qux
+@end example
+The standard input will be read into a file and then transferred to the
+file @file{D.test1N003s} on system @samp{test2}. The file @file{qux}
+will be transferred to @file{D.test1N003r} on system @samp{test2}. When
+the command is executed, the latter file will be copied to the execution
+directory under the name @samp{qux}. Note that since the file
+@file{~ian/bar} is already on the execution system, no action need be
+taken for it. The standard output will be collected in a file, then
+copied to the directory @file{/usr/spool/uucppublic} on the system
+@samp{test1}.
+
+@ifset faq
+@format
+------------------------------
+
+From: UUCP Protocol
+Subject: UUCP Protocol
+@end format
+@end ifset
+
+@node UUCP Protocol, g Protocol, Execution File Format, Protocols
+@section UUCP Protocol
+@cindex UUCP protocol
+@cindex protocol, UUCP
+
+The UUCP protocol is a conversation between two UUCP packages. A UUCP
+conversation consists of three parts: an initial handshake, a series of
+file transfer requests, and a final handshake.
+
+@menu
+* The Initial Handshake:: The Initial Handshake
+* UUCP Protocol Commands:: UUCP Protocol Commands
+* The Final Handshake:: The Final Handshake
+@end menu
+
+@node The Initial Handshake, UUCP Protocol Commands, UUCP Protocol, UUCP Protocol
+@subsection The Initial Handshake
+@cindex initial handshake
+
+Before the initial handshake, the caller will usually have logged in the
+called machine and somehow started the UUCP package there. On Unix this
+is normally done by setting the shell of the login name used to
+@file{/usr/lib/uucp/uucico}.
+
+All messages in the initial handshake begin with a @kbd{^P} (a byte with
+the octal value @samp{\020}) and end with a null byte (@samp{\000}). A
+few systems end these messages with a line feed character (@samp{\012})
+instead of a null byte; the examples below assume a null byte is being
+used.
+
+Some options below are supported by QFT, which stands for Queued File
+Transfer, and is (or was) an internal Bell Labs version of UUCP.
+
+Taylor UUCP size negotiation was introduced by Taylor UUCP, and is
+also supported by DOS based UUPlus and Amiga based wUUCP and
+UUCP-1.17.
+
+The initial handshake goes as follows. It is begun by the called
+machine.
+
+@table @asis
+@item called: @samp{\020Shere=hostname\000}
+The hostname is the UUCP name of the called machine. Older UUCP
+packages do not output it, and simply send @samp{\020Shere\000}.
+
+@item caller: @samp{\020Shostname options\000}
+The hostname is the UUCP name of the calling machine. The following
+options may appear (or there may be none):
+
+@table @samp
+@item -QSEQ
+Report sequence number for this conversation. The sequence number is
+stored at both sites, and incremented after each call. If there is a
+sequence number mismatch, something has gone wrong (somebody may have
+broken security by pretending to be one of the machines) and the call is
+denied. If the sequence number changes on one of the machines, perhaps
+because of an attempted breakin or because a disk backup was restored,
+the sequence numbers on the two machines must be reconciled manually.
+
+@item -xLEVEL
+Requests the called system to set its debugging level to the specified
+value. This is not supported by all systems.
+
+@item -pGRADE
+@itemx -vgrade=GRADE
+Requests the called system to only transfer files of the specified grade
+or higher. This is not supported by all systems. Some systems support
+@samp{-p}, some support @samp{-vgrade=}. UUPlus allows either @samp{-p}
+or @samp{-v} to be specified on a per-system basis in the @file{SYSTEMS}
+file (@samp{gradechar} option).
+
+@item -R
+Indicates that the calling UUCP understands how to restart failed file
+transmissions. Supported only by System V Release 4 UUCP, QFT, and
+Taylor UUCP.
+
+@item -ULIMIT
+Reports the ulimit value of the calling UUCP. The limit is specified as
+a base 16 number in C notation (e.g., @samp{-U0x1000000}). This number
+is the number of 512 byte blocks in the largest file which the calling
+UUCP can create. The called UUCP may not transfer a file larger than
+this. Supported only by System V Release 4 UUCP, QFT and UUPlus.
+UUPlus reports the lesser of the available disk space on the spool
+directory drive and the ulimit variable in @file{UUPLUS.CFG}. Taylor
+UUCP understands this option, but does not generate it.
+
+@item -N[NUMBER]
+Indicates that the calling UUCP understands the Taylor UUCP size
+negotiation extension. Not supported by traditional UUCP packages.
+Supported by UUPlus. The optional number is a bitmask of features
+supported by the calling UUCP, and is described below.
+@end table
+
+@item called: @samp{\020ROK\000}
+There are actually several possible responses.
+@table @samp
+@item ROK
+The calling UUCP is acceptable, and the handshake proceeds to the
+protocol negotiation. Some options may also appear; see below.
+@item ROKN[NUMBER]
+The calling UUCP is acceptable, it specified @samp{-N}, and the called
+UUCP also understands the Taylor UUCP size limiting extensions. The
+optional number is a bitmask of features supported by the called UUCP,
+and is described below.
+@item RLCK
+The called UUCP already has a lock for the calling UUCP, which normally
+indicates the two machines are already communicating.
+@item RCB
+The called UUCP will call back. This may be used to avoid impostors
+(but only one machine out of each pair should call back, or no
+conversation will ever begin).
+@item RBADSEQ
+The call sequence number is wrong (see the @samp{-Q} discussion above).
+@item RLOGIN
+The calling UUCP is using the wrong login name.
+@item RYou are unknown to me
+The calling UUCP is not known to the called UUCP, and the called UUCP
+does not permit connections from unknown systems. Some versions of UUCP
+just drop the line rather than sending this message.
+@end table
+
+If the response is @samp{ROK}, the following options are supported by
+System V Release 4 UUCP and QFT.
+@table @samp
+@item -R
+The called UUCP knows how to restart failed file transmissions.
+@item -ULIMIT
+Reports the ulimit value of the called UUCP. The limit is specified as
+a base 16 number in C notation. This number is the number of 512 byte
+blocks in the largest file which the called UUCP can create. The
+calling UUCP may not send a file larger than this. Also supported by
+UUPlus. Taylor UUCP understands this option, but does not generate it.
+@item -xLEVEL
+I'm not sure just what this means. It may request the
+calling UUCP to set its debugging level to the specified
+value.
+@end table
+
+If the response is not @samp{ROK} (or @samp{ROKN}) both sides hang up
+the phone, abandoning the call.
+
+@item called: @samp{\020Pprotocols\000}
+Note that the called UUCP outputs two strings in a row. The protocols
+string is a list of UUCP protocols supported by the caller. Each UUCP
+protocol has a single character name. These protocols are discussed in
+more detail later in this document. For example, the called UUCP might
+send @samp{\020Pgf\000}.
+
+@item caller: @samp{\020Uprotocol\000}
+The calling UUCP selects which protocol to use out of the protocols
+offered by the called UUCP. If there are no mutually supported
+protocols, the calling UUCP sends @samp{\020UN\000} and both sides hang
+up the phone. Otherwise the calling UUCP sends something like
+@samp{\020Ug\000}.
+@end table
+
+Most UUCP packages will consider each locally supported protocol in turn
+and select the first one supported by the called UUCP. With some
+versions of HDB UUCP, this can be modified by giving a list of protocols
+after the device name in the @file{Devices} file or the @file{Systems}
+file. For example, to select the @samp{e} protocol in @file{Systems},
+@example
+ airs Any ACU,e ...
+@end example
+or in Devices,
+@example
+ ACU,e ttyXX ...
+@end example
+Taylor UUCP provides the @code{protocol}
+command which may be used either
+for a system
+@ifclear faq
+(@pxref{Protocol Selection})
+@end ifclear
+or a
+@ifclear faq
+port (@pxref{port File}).
+@end ifclear
+@ifset faq
+port.
+@end ifset
+UUPlus allows specification of the protocol string on a per-system basis
+in the @file{SYSTEMS} file.
+
+The optional number following a @samp{-N} sent by the calling system, or
+an @samp{ROKN} sent by the called system, is a bitmask of features
+supported by the UUCP package. The optional number was introduced in
+Taylor UUCP version 1.04. The number is sent as an octal number with a
+leading zero. The following bits are currently defined. A missing
+number should be taken as @samp{011}.
+
+@table @samp
+@item 01
+UUCP supports size negotiation.
+
+@item 02
+UUCP supports file restart.
+
+@item 04
+UUCP supports the @samp{E} command.
+
+@item 010
+UUCP requires the file size in the @samp{S} and @samp{R} commands to be
+in base 10. This bit is used by default if no number appears, but
+should not be explicitly sent.
+
+@item 020
+UUCP expects a dummy string between the notify field and the size field
+in an @samp{S} command. This is true of SVR4 UUCP. This bit should not
+be used.
+@end table
+
+After the protocol has been selected and the initial handshake has been
+completed, both sides turn on the selected protocol. For some protocols
+(notably @samp{g}) a further handshake is done at this point.
+
+@node UUCP Protocol Commands, The Final Handshake, The Initial Handshake, UUCP Protocol
+@subsection UUCP Protocol Commands
+
+Each protocol supports a method for sending a command to the remote
+system. This method is used to transmit a series of commands between
+the two UUCP packages. At all times, one package is the master and the
+other is the slave. Initially, the calling UUCP is the master.
+
+If a protocol error occurs during the exchange of commands, both sides
+move immediately to the final handshake.
+
+The master will send one of five commands: @samp{S}, @samp{R}, @samp{X},
+@samp{E}, or @samp{H}.
+
+Any file name referred to below is either an absolute file name
+beginning with @file{/}, a public directory file name beginning with
+@file{~/}, a file name relative to a user's home directory beginning
+with @file{~@var{USER}/}, or a spool directory file name. File names in
+the spool directory are not absolute, but instead are converted to file
+names within the spool directory by UUCP. They always begin with
+@file{C.} (for a command file created by @code{uucp} or @code{uux}),
+@file{D.} (for a data file created by @code{uucp}, @code{uux} or by an
+execution, or received from another system for an execution), or
+@file{X.} (for an execution file created by @code{uux} or received from
+another system).
+
+@menu
+* The S Command:: The S Command
+* The R Command:: The R Command
+* The X Command:: The X Command
+* The E Command:: The E Command
+* The H Command:: The H Command
+@end menu
+
+@node The S Command, The R Command, UUCP Protocol Commands, UUCP Protocol Commands
+@subsubsection The S Command
+@cindex S UUCP protocol command
+@cindex UUCP protocol S command
+
+@table @asis
+@item master: @samp{S @var{from} @var{to} @var{user} -@var{options} @var{temp} @var{mode} @var{notify} @var{size}}
+The @samp{S} and the @samp{-} are literal characters. This is a request
+by the master to send a file to the slave.
+
+@table @var
+@item from
+The name of the file to send. If the @samp{C} option does not appear in
+@var{options}, the master will actually open and send this file.
+Otherwise the file has been copied to the spool directory, where it is
+named @var{temp}. The slave ignores this field unless @var{to} is a
+directory, in which case the basename of @var{from} will be used as the
+file name. If @var{from} is a spool directory filename, it must be a
+data file created for or by an execution, and must begin with @file{D.}.
+
+@item to
+The name to give the file on the slave. If this field names a directory
+the file is placed within that directory with the basename of
+@var{from}. A name ending in @samp{/} is taken to be a directory even
+if one does not already exist with that name. If @var{to} begins with
+@file{X.}, an execution file will be created on the slave. Otherwise,
+if @var{to} begins with @file{D.} it names a data file to be used by
+some execution file. Otherwise, @var{to} should not be in the spool
+directory.
+
+@item user
+The name of the user who requested the transfer.
+
+@item options
+A list of options to control the transfer. The following
+options are defined (all options are single characters):
+@table @samp
+@item C
+The file has been copied to the spool directory
+(the master should use @var{temp} rather than @var{from}).
+@item c
+The file has not been copied to the spool directory (this is the
+default).
+@item d
+The slave should create directories as necessary (this is the default).
+@item f
+The slave should not create directories if necessary, but should fail
+the transfer instead.
+@item m
+The master should send mail to @var{user} when the transfer is complete.
+@item n
+The slave should send mail to @var{notify} when the transfer is
+complete.
+@end table
+
+@item temp
+If the @samp{C} option appears in @var{options}, this names the file to
+be sent. Otherwise if @var{from} is in the spool directory, @var{temp}
+is the same as @var{from}. Otherwise @var{temp} may be a dummy string,
+such as @file{D.0}. After the transfer has been succesfully completed,
+the master will delete the file @var{temp}.
+
+@item mode
+This is an octal number giving the mode of the file on the master. If
+the file is not in the spool directory, the slave will always create it
+with mode 0666, except that if (@var{mode} & 0111) is not zero (the file
+is executable), the slave will create the file with mode 0777. If the
+file is in the spool directory, some UUCP packages will use the
+algorithm above and some will always create the file with mode 0600.
+This field is ignored by UUPlus, since it is meaningless on DOS; UUPlus
+uses 0666 for outgoing files.
+
+@item notify
+This field may not be present, and in any case is only meaningful if the
+@samp{n} option appears in @var{options}. If the @samp{n} option
+appears, then, when the transfer is successfully completed, the slave
+will send mail to @var{notify}, which must be a legal mailing address on
+the slave. If a @var{size} field will appear but the @samp{n} option
+does not appear, @var{notify} will always be present, typically as the
+string @samp{dummy} or simply a pair of double quotes.
+
+@item size
+This field is only present when doing Taylor UUCP or SVR4 UUCP size
+negotiation. It is the size of the file in bytes. Taylor UUCP version
+1.03 sends the size as a decimal integer, while versions 1.04 and up,
+and all other UUCP packages that support size negotiation, send the size
+in base 16 with a leading 0x.
+@end table
+
+The slave then responds with an @samp{S} command response.
+
+@table @samp
+@item SY @var{start}
+The slave is willing to accept the file, and file transfer begins. The
+@var{start} field will only be present when using file restart. It
+specifies the byte offset into the file at which to start sending. If
+this is a new file, @var{start} will be 0x0.
+
+@item SN2
+The slave denies permission to transfer the file. This can mean that
+the destination directory may not be accessed, or that no requests are
+permitted. It implies that the file transfer will never succeed.
+
+@item SN4
+The slave is unable to create the necessary temporary file. This
+implies that the file transfer might succeed later.
+
+@item SN6
+This is only used by Taylor UUCP size negotiation. It means that the
+slave considers the file too large to transfer at the moment, but it may
+be possible to transfer it at some other time.
+
+@item SN7
+This is only used by Taylor UUCP size negotiation. It means that the
+slave considers the file too large to ever transfer.
+
+@item SN8
+This is only used by Taylor UUCP. It means that the file was already
+received in a previous conversation. This can happen if the receive
+acknowledgement was lost after it was sent by the receiver but before it
+was received by the sender.
+
+@item SN9
+This is only used by Taylor UUCP (versions 1.05 and up) and UUPlus
+(versions 2.0 and up). It means that the remote system was unable to
+open another channel (see the discussion of the @samp{i} protocol for
+more information about channels). This implies that the file transfer
+might succeed later.
+
+@item SN10
+This is reportedly used by SVR4 UUCP to mean that the file size is too
+large.
+@end table
+
+If the slave responds with @samp{SY}, a file transfer begins. When the
+file transfer is complete, the slave sends a @samp{C} command response.
+
+@table @samp
+@item CY
+The file transfer was successful.
+@item CYM
+The file transfer was successful, and the slave wishes to become the
+master; the master should send an @samp{H} command, described below.
+@item CN5
+The temporary file could not be moved into the final location. This
+implies that the file transfer will never succeed.
+@end table
+@end table
+
+After the @samp{C} command response has been received (in the @samp{SY}
+case) or immediately (in an @samp{SN} case) the master will send another
+command.
+
+@node The R Command, The X Command, The S Command, UUCP Protocol Commands
+@subsubsection The R Command
+@cindex R UUCP protocol command
+@cindex UUCP protocol R command
+
+@table @asis
+@item master: @samp{R @var{from} @var{to} @var{user} -@var{options} @var{size}}
+The @samp{R} and the @samp{-} are literal characters. This is a request
+by the master to receive a file from the slave. I do not know how SVR4
+UUCP or QFT implement file transfer restart in this case.
+
+@table @var
+@item from
+This is the name of the file on the slave which the master wishes to
+receive. It must not be in the spool directory, and it may not contain
+any wildcards.
+
+@item to
+This is the name of the file to create on the master. I do not believe
+that it can be a directory. It may only be in the spool directory if
+this file is being requested to support an execution either on the
+master or on some system other than the slave.
+
+@item user
+The name of the user who requested the transfer.
+
+@item options
+A list of options to control the transfer. The following
+options are defined (all options are single characters):
+@table @samp
+@item d
+The master should create directories as necessary (this is the default).
+@item f
+The master should not create directories if necessary, but should fail
+the transfer instead.
+@item m
+The master should send mail to @var{user} when the transfer is complete.
+@end table
+
+@item size
+This only appears if Taylor UUCP size negotiation is being used. It
+specifies the largest file which the master is prepared to accept (when
+using SVR4 UUCP or QFT, this was specified in the @samp{-U} option
+during the initial handshake).
+@end table
+
+The slave then responds with an @samp{R} command response. UUPlus does
+not support @samp{R} requests, and always responds with @samp{RN2}.
+
+@table @samp
+@item RY @var{mode} [@var{size}]
+The slave is willing to send the file, and file transfer begins. The
+@var{mode} argument is the octal mode of the file on the slave. The
+master treats this just as the slave does the @var{mode} argument in the
+send command, q.v. I am told that SVR4 UUCP sends a trailing @var{size}
+argument. For some versions of BSD UUCP, the @var{mode} argument may
+have a trailing @samp{M} character (e.g., @samp{RY 0666M}). This means
+that the slave wishes to become the master.
+
+@item RN2
+The slave is not willing to send the file, either because it is not
+permitted or because the file does not exist. This implies that the
+file request will never succeed.
+
+@item RN6
+This is only used by Taylor UUCP size negotiation. It means that the
+file is too large to send, either because of the size limit specifies by
+the master or because the slave considers it too large. The file
+transfer might succeed later, or it might not (this may be cleared up in
+a later release of Taylor UUCP).
+
+@item RN9
+This is only used by Taylor UUCP (versions 1.05 and up) and FSUUCP
+(versions 1.5 and up). It means that the remote system was unable to
+open another channel (see the discussion of the @samp{i} protocol for
+more information about channels). This implies that the file transfer
+might succeed later.
+@end table
+
+If the slave responds with @samp{RY}, a file transfer begins. When the
+file transfer is complete, the master sends a @samp{C} command. The
+slave pretty much ignores this, although it may log it.
+
+@table @samp
+@item CY
+The file transfer was successful.
+@item CN5
+The temporary file could not be moved into the final location.
+@end table
+
+After the @samp{C} command response has been sent (in the @samp{RY}
+case) or immediately (in an @samp{RN} case) the master will send another
+command.
+@end table
+
+@node The X Command, The E Command, The R Command, UUCP Protocol Commands
+@subsubsection The X Command
+@cindex X UUCP protocol command
+@cindex UUCP protocol X command
+
+@table @asis
+@item master: @samp{X @var{from} @var{to} @var{user} -@var{options}}
+The @samp{X} and the @samp{-} are literal characters. This is a request
+by the master to, in essence, execute uucp on the slave. The slave
+should execute @samp{uucp @var{from} @var{to}}.
+
+@table @var
+@item from
+This is the name of the file or files on the slave which the master
+wishes to transfer. Any wildcards are expanded on the slave. If the
+master is requesting that the files be transferred to itself, the
+request would normally contain wildcard characters, since otherwise an
+@samp{R} command would suffice. The master can also use this command to
+request that the slave transfer files to a third system.
+
+@item to
+This is the name of the file or directory to which the files should be
+transferred. This will normally use a UUCP name. For example, if the
+master wishes to receive the files itself, it would use
+@samp{master!path}.
+
+@item user
+The name of the user who requested the transfer.
+
+@item options
+A list of options to control the transfer. It is not clear which, if
+any, options are supported by most UUCP packages.
+@end table
+
+The slave then responds with an @samp{X} command response. FSUUCP does
+not support @samp{X} requests, and always responds with @samp{XN}.
+
+@table @samp
+@item XY
+The request was accepted, and the appropriate file transfer commands
+have been queued up for later processing.
+
+@item XN
+The request was denied. No particular reason is given.
+@end table
+
+In either case, the master will then send another command.
+@end table
+
+@node The E Command, The H Command, The X Command, UUCP Protocol Commands
+@subsubsection The E Command
+@cindex E UUCP protocol command
+@cindex UUCP protocol E command
+
+@table @asis
+@item master: @samp{E @var{from} @var{to} @var{user} -@var{options} @var{temp} @var{mode} @var{notify} @var{size} @var{command}}
+The @samp{E} command is only supported by Taylor UUCP 1.04 and up. It
+is used to make an execution request without requiring a separate
+@file{X.*} file.
+@ifclear faq
+@xref{Execution File Format}.
+@end ifclear
+It is only used when the command to be executed requires a single input
+file which is passed to it as standard input.
+
+All the fields have the same meaning as they do for an @samp{S} command,
+except for @var{options} and @var{command}.
+
+@table @var
+@item options
+A list of options to control the transfer. The following options are
+defined (all options are single characters):
+@table @samp
+@item C
+The file has been copied to the spool directory (the master should use
+@var{temp} rather than @var{from}).
+@item c
+The file has not been copied to the spool directory (this is the
+default).
+@item N
+No mail message should be sent, even if the command fails. This is the
+equivalent of the @samp{N} command in an @file{X.*} file.
+@item Z
+A mail message should be sent if the command fails (this is generally
+the default in any case). This is the equivalent of the @samp{Z}
+command in an @file{X.*} file.
+@item R
+Mail messages about the execution should be sent to the address in the
+@var{notify} field. This is the equivalent of the @samp{R} command in
+an @file{X.*} file.
+@item e
+The execution should be done with @file{/bin/sh}. This is the
+equivalent of the @samp{e} command in an @file{X.*} file.
+@end table
+
+@item command
+The command which should be executed. This is the equivalent of the
+@samp{C} command in an @file{X.*} file.
+@end table
+
+The slave then responds with an @samp{E} command response. These are
+the same as the @samp{S} command responses, but the initial character is
+@samp{E} rather than @samp{S}.
+
+If the slave responds with @samp{EY}, the file transfer begins. When
+the file transfer is complete, the slave sends a @samp{C} command
+response, just as for the @samp{S} command. After a successful file
+transfer, the slave is responsible for arranging for the command to be
+executed. The transferred file is passed as standard input, as though
+it were named in the @samp{I} and @samp{F} commands of an @file{X.*}
+file.
+
+After the @samp{C} command response has been received (in the @samp{EY}
+case) or immediately (in an @samp{EN} case) the master will send another
+command.
+@end table
+
+@node The H Command, , The E Command, UUCP Protocol Commands
+@subsubsection The H Command
+@cindex H UUCP protocol command
+@cindex UUCP protocol H command
+
+@table @asis
+@item master: @samp{H}
+This is used by the master to hang up the connection. The slave will
+respond with an @samp{H} command response.
+
+@table @samp
+@item HY
+The slave agrees to hang up the connection. In this case the master
+sends another @samp{HY} command. In some UUCP packages the slave will
+then send a third @samp{HY} command. At this point the protocol is shut
+down, and the final handshake is begun.
+@item HN
+The slave does not agree to hang up. In this case the master and the
+slave exchange roles. The next command will be sent by the former
+slave, which is the new master. The roles may be reversed several times
+during a single connection.
+@end table
+@end table
+
+@node The Final Handshake, , UUCP Protocol Commands, UUCP Protocol
+@subsection The Final Handshake
+@cindex final handshake
+
+After the protocol has been shut down, the final handshake is performed.
+This handshake has no real purpose, and some UUCP packages simply drop
+the connection rather than do it (in fact, some will drop the connection
+immediately after both sides agree to hangup, without even closing down
+the protocol).
+
+@table @asis
+@item caller: @samp{\020OOOOOO\000}
+
+@item called: @samp{\020OOOOOOO\000}
+@end table
+
+That is, the calling UUCP sends six @samp{O} characters and the called
+UUCP replies with seven @samp{O} characters. Some UUCP packages always
+send six @samp{O} characters.
+
+@ifset faq
+@format
+------------------------------
+
+From: UUCP @samp{g} Protocol
+Subject: UUCP @samp{g} Protocol
+@end format
+@end ifset
+
+@node g Protocol, f Protocol, UUCP Protocol, Protocols
+@section UUCP @samp{g} Protocol
+@cindex @samp{g} protocol
+@cindex protocol @samp{g}
+
+The @samp{g} protocol is a packet based flow controlled error correcting
+protocol that requires an eight bit clear connection. It is the
+original UUCP protocol, and is supported by all UUCP implementations.
+Many implementations of it are only able to support small window and
+packet sizes, specifically a window size of 3 and a packet size of 64
+bytes, but the protocol itself can support up to a window size of 7 and
+a packet size of 4096 bytes. Complaints about the inefficiency of the
+@samp{g} protocol generally refer to specific implementations, rather
+than to the correctly implemented protocol.
+
+The @samp{g} protocol was originally designed for general packet
+drivers, and thus contains some features that are not used by UUCP,
+including an alternate data channel and the ability to renegotiate
+packet and window sizes during the communication session.
+
+The @samp{g} protocol is spoofed by many Telebit modems. When spoofing
+is in effect, each Telebit modem uses the @samp{g} protocol to
+communicate with the attached computer, but the data between the modems
+is sent using a Telebit proprietary error correcting protocol. This
+allows for very high throughput over the Telebit connection, which,
+because it is half-duplex, would not normally be able to handle the
+@samp{g} protocol very well at all. When a Telebit is spoofing the
+@samp{g} protocol, it forces the packet size to be 64 bytes and the
+window size to be 3.
+
+This discussion of the @samp{g} protocol explains how it works, but does
+not discuss useful error handling techniques. Some discussion of this
+can be found in Jamie E. Hanrahan's paper, cited
+@ifclear faq
+above (@pxref{UUCP Protocol Sources}).
+@end ifclear
+@ifset faq
+above.
+@end ifset
+
+All @samp{g} protocol communication is done with packets. Each packet
+begins with a six byte header. Control packets consist only of the
+header. Data packets contain additional data.
+
+The header is as follows:
+
+@table @asis
+@item @samp{\020}
+Every packet begins with a @kbd{^P}.
+
+@item @var{k} (1 <= @var{k} <= 9)
+The @var{k} value is always 9 for a control packet. For a data packet,
+the @var{k} value indicates how much data follows the six byte header.
+The amount of data is
+@ifinfo
+2 ** (@var{k} + 4), where ** indicates exponentiation.
+@end ifinfo
+@iftex
+@tex
+$2^{k + 4}$.
+@end tex
+@end iftex
+Thus a @var{k} value of 1 means 32 data bytes and a
+@var{k} value of 8 means 4096 data bytes. The @var{k} value for a data
+packet must be between 1 and 8 inclusive.
+
+@item checksum low byte
+@itemx checksum high byte
+The checksum value is described below.
+
+@item control byte
+The control byte indicates the type of packet, and is described below.
+
+@item xor byte
+This byte is the xor of @var{k}, the checksum low byte, the checksum
+high byte and the control byte (i.e., the second, third, fourth and
+fifth header bytes). It is used to ensure that the header data is
+valid.
+@end table
+
+The control byte in the header is composed of three bit fields, referred
+to here as @var{tt} (two bits), @var{xxx} (three bits) and @var{yyy}
+(three bits). The control is @var{tt}@var{xxx}@var{yyy}, or @code{(@var{tt}
+<< 6) + (@var{xxx} << 3) + @var{yyy}}.
+
+The @var{TT} field takes on the following values:
+
+@table @samp
+@item 0
+This is a control packet. In this case the @var{k} byte in the
+header must be 9. The @var{xxx} field indicates the type of control
+packet; these types are described below.
+
+@item 1
+This is an alternate data channel packet. This is not used by UUCP.
+
+@item 2
+This is a data packet, and the entire contents of the attached data
+field (whose length is given by the @var{k} byte in the header) are
+valid. The @var{xxx} and @var{yyy} fields are described below.
+
+@item 3
+This is a short data packet. Let the length of the data field (as given
+by the @var{k} byte in the header) be @var{l}. Let the first byte in
+the data field be @var{b1}. If @var{b1} is less than 128 (if the most
+significant bit of @var{b1} is 0), then there are @code{@var{l} -
+@var{b1}} valid bytes of data in the data field, beginning with the
+second byte. If @code{@var{b1} >= 128}, let @var{b2} be the second byte
+in the data field. Then there are @code{@var{l} - ((@var{b1} & 0x7f) +
+(@var{b2} << 7))} valid bytes of data in the data field, beginning with
+the third byte. In all cases @var{l} bytes of data are sent (and all
+data bytes participate in the checksum calculation) but some of the
+trailing bytes may be dropped by the receiver. The @var{xxx} and
+@var{yyy} fields are described below.
+@end table
+
+In a data packet (short or not) the @var{xxx} field gives the sequence
+number of the packet. Thus sequence numbers can range from 0 to 7,
+inclusive. The @var{yyy} field gives the sequence number of the last
+correctly received packet.
+
+Each communication direction uses a window which indicates how many
+unacknowledged packets may be transmitted before waiting for an
+acknowledgement. The window may range from 1 to 7, and may be different
+in each direction. For example, if the window is 3 and the last packet
+acknowledged was packet number 6, packet numbers 7, 0 and 1 may be sent
+but the sender must wait for an acknowledgement before sending packet
+number 2. This acknowledgement could come as the @var{yyy} field of a
+data packet, or as the @var{yyy} field of a @samp{RJ} or @samp{RR}
+control packet (described below).
+
+Each packet must be transmitted in order (the sender may not skip
+sequence numbers). Each packet must be acknowledged, and each packet
+must be acknowledged in order.
+
+In a control packet, the @var{xxx} field takes on the following values:
+
+@table @asis
+@item 1 @samp{CLOSE}
+The connection should be closed immediately. This is typically sent
+when one side has seen too many errors and wants to give up. It is also
+sent when shutting down the protocol. If an unexpected @samp{CLOSE}
+packet is received, a @samp{CLOSE} packet should be sent in reply and
+the @samp{g} protocol should halt, causing UUCP to enter the final
+handshake.
+
+@item 2 @samp{RJ} or @samp{NAK}
+The last packet was not received correctly. The @var{yyy} field
+contains the sequence number of the last correctly received packet.
+
+@item 3 @samp{SRJ}
+Selective reject. The @var{yyy} field contains the sequence number of a
+packet that was not received correctly, and should be retransmitted.
+This is not used by UUCP, and most implementations will not recognize
+it.
+
+@item 4 @samp{RR} or @samp{ACK}
+Packet acknowledgement. The @var{yyy} field contains the sequence
+number of the last correctly received packet.
+
+@item 5 @samp{INITC}
+Third initialization packet. The @var{yyy} field contains the maximum
+window size to use.
+
+@item 6 @samp{INITB}
+Second initialization packet. The @var{yyy} field contains the
+packet size to use. It requests a size of
+@ifinfo
+2 ** (@var{yyy} + 5).
+@end ifinfo
+@iftex
+@tex
+$2^{yyy + 5}$.
+@end tex
+@end iftex
+Note that this is not the same coding used for the @var{k} byte in the
+packet header (it is 1 less). Most UUCP implementations that request a
+packet size larger than 64 bytes can handle any packet size up to that
+specified.
+
+@item 7 @samp{INITA}
+First initialization packet. The @var{yyy} field contains the maximum
+window size to use.
+@end table
+
+To compute the checksum, call the control byte (the fifth byte in the
+header) @var{c}.
+
+The checksum of a control packet is simply @code{0xaaaa - @var{c}}.
+
+The checksum of a data packet is @code{0xaaaa - (@var{check} ^
+@var{c})}, where @code{^} denotes exclusive or, and @var{check} is the
+result of the following routine as run on the contents of the data field
+(every byte in the data field participates in the checksum, even for a
+short data packet). Below is the routine used by an early version of
+Taylor UUCP; it is a slightly modified version of a routine which John
+Gilmore patched from G.L.@: Chesson's original paper. The @code{z}
+argument points to the data and the @code{c} argument indicates how much
+data there is.
+
+@example
+int
+igchecksum (z, c)
+ register const char *z;
+ register int c;
+@{
+ register unsigned int ichk1, ichk2;
+
+ ichk1 = 0xffff;
+ ichk2 = 0;
+
+ do
+ @{
+ register unsigned int b;
+
+ /* Rotate ichk1 left. */
+ if ((ichk1 & 0x8000) == 0)
+ ichk1 <<= 1;
+ else
+ @{
+ ichk1 <<= 1;
+ ++ichk1;
+ @}
+
+ /* Add the next character to ichk1. */
+ b = *z++ & 0xff;
+ ichk1 += b;
+
+ /* Add ichk1 xor the character position in the buffer counting from
+ the back to ichk2. */
+ ichk2 += ichk1 ^ c;
+
+ /* If the character was zero, or adding it to ichk1 caused an
+ overflow, xor ichk2 to ichk1. */
+ if (b == 0 || (ichk1 & 0xffff) < b)
+ ichk1 ^= ichk2;
+ @}
+ while (--c > 0);
+
+ return ichk1 & 0xffff;
+@}
+@end example
+
+When the @samp{g} protocol is started, the calling UUCP sends an
+@samp{INITA} control packet with the window size it wishes the called
+UUCP to use. The called UUCP responds with an @samp{INITA} packet with
+the window size it wishes the calling UUCP to use. Pairs of
+@samp{INITB} and @samp{INITC} packets are then similarly exchanged.
+When these exchanges are completed, the protocol is considered to have
+been started.
+
+Note that the window and packet sizes are not a negotiation. Each
+system announces the window and packet size which the other system
+should use. It is possible that different window and packet sizes will
+be used in each direction. The protocol works this way on the theory
+that each system knows how much data it can accept without getting
+overrun. Therefore, each system tells the other how much data to send
+before waiting for an acknowledgement.
+
+When a UUCP package transmits a command, it sends one or more data
+packets. All the data packets will normally be complete, although some
+UUCP packages may send the last one as a short packet. The command
+string is sent with a trailing null byte, to let the receiving package
+know when the command is finished. Some UUCP packages require the last
+byte of the last packet sent to be null, even if the command ends
+earlier in the packet. Some packages may require all the trailing bytes
+in the last packet to be null, but I have not confirmed this.
+
+When a UUCP package sends a file, it will send a sequence of data
+packets. The end of the file is signalled by a short data packet
+containing zero valid bytes (it will normally be preceeded by a short
+data packet containing the last few bytes in the file).
+
+Note that the sequence numbers cover the entire communication session,
+including both command and file data.
+
+When the protocol is shut down, each UUCP package sends a @samp{CLOSE}
+control packet.
+
+@ifset faq
+@format
+------------------------------
+
+From: UUCP @samp{f} Protocol
+Subject: UUCP @samp{f} Protocol
+@end format
+@end ifset
+
+@node f Protocol, t Protocol, g Protocol, Protocols
+@section UUCP @samp{f} Protocol
+@cindex @samp{f} protocol
+@cindex protocol @samp{f}
+
+The @samp{f} protocol is a seven bit protocol which checksums an entire
+file at a time. It only uses the characters between @samp{\040} and
+@samp{\176} (ASCII @kbd{space} and @kbd{~}) inclusive, as well as the
+carriage return character. It can be very efficient for transferring
+text only data, but it is very inefficient at transferring eight bit
+data (such as compressed news). It is not flow controlled, and the
+checksum is fairly insecure over large files, so using it over a serial
+connection requires handshaking (XON/XOFF can be used) and error
+correcting modems. Some people think it should not be used even under
+those circumstances.
+
+I believe that the @samp{f} protocol originated in BSD versions of UUCP.
+It was originally intended for transmission over X.25 PAD links.
+
+The @samp{f} protocol has no startup or finish protocol. However, both
+sides typically sleep for a couple of seconds before starting up,
+because they switch the terminal into XON/XOFF mode and want to allow
+the changes to settle before beginning transmission.
+
+When a UUCP package transmits a command, it simply sends a string
+terminated by a carriage return.
+
+When a UUCP package transmits a file, each byte @var{b} of the file is
+translated according to the following table:
+
+@example
+ 0 <= @var{b} <= 037: 0172, @var{b} + 0100 (0100 to 0137)
+ 040 <= @var{b} <= 0171: @var{b} ( 040 to 0171)
+ 0172 <= @var{b} <= 0177: 0173, @var{b} - 0100 ( 072 to 077)
+ 0200 <= @var{b} <= 0237: 0174, @var{b} - 0100 (0100 to 0137)
+ 0240 <= @var{b} <= 0371: 0175, @var{b} - 0200 ( 040 to 0171)
+ 0372 <= @var{b} <= 0377: 0176, @var{b} - 0300 ( 072 to 077)
+@end example
+
+That is, a byte between @samp{\040} and @samp{\171} inclusive is
+transmitted as is, and all other bytes are prefixed and modified as
+shown.
+
+When all the file data is sent, a seven byte sequence is sent: two bytes
+of @samp{\176} followed by four ASCII bytes of the checksum as printed
+in base 16 followed by a carriage return. For example, if the checksum
+was 0x1234, this would be sent: @samp{\176\1761234\r}.
+
+The checksum is initialized to 0xffff. For each byte that is sent it is
+modified as follows (where @var{b} is the byte before it has been
+transformed as described above):
+
+@example
+ /* Rotate the checksum left. */
+ if ((ichk & 0x8000) == 0)
+ ichk <<= 1;
+ else
+ @{
+ ichk <<= 1;
+ ++ichk;
+ @}
+
+ /* Add the next byte into the checksum. */
+ ichk += @var{b};
+@end example
+
+When the receiving UUCP sees the checksum, it compares it against its
+own calculated checksum and replies with a single character followed
+by a carriage return.
+
+@table @samp
+@item G
+The file was received correctly.
+
+@item R
+The checksum did not match, and the file should be resent from the
+beginning.
+
+@item Q
+The checksum did not match, but too many retries have occurred and the
+communication session should be abandoned.
+@end table
+
+The sending UUCP checks the returned character and acts accordingly.
+
+@ifset faq
+@format
+------------------------------
+
+From: UUCP @samp{t} Protocol
+Subject: UUCP @samp{t} Protocol
+@end format
+@end ifset
+
+@node t Protocol, e Protocol, f Protocol, Protocols
+@section UUCP @samp{t} Protocol
+@cindex @samp{t} protocol
+@cindex protocol @samp{t}
+
+The @samp{t} protocol is intended for use on links which provide
+reliable end-to-end connections, such as TCP. It does no error checking
+or flow control, and requires an eight bit clear channel.
+
+I believe the @samp{t} protocol originated in BSD versions of UUCP.
+
+When a UUCP package transmits a command, it first gets the length of the
+command string, @var{c}. It then sends @code{((@var{c} / 512) + 1) *
+512} bytes (the smallest multiple of 512 which can hold @var{c} bytes
+plus a null byte) consisting of the command string itself followed by
+trailing null bytes.
+
+When a UUCP package sends a file, it sends it in blocks. Each block
+contains at most 1024 bytes of data. Each block consists of four bytes
+containing the amount of data in binary (most significant byte first,
+the same format as used by the Unix function @code{htonl}) followed by
+that amount of data. The end of the file is signalled by a block
+containing zero bytes of data.
+
+@ifset faq
+@format
+------------------------------
+
+From: UUCP @samp{e} Protocol
+Subject: UUCP @samp{e} Protocol
+@end format
+@end ifset
+
+@node e Protocol, Big G Protocol, t Protocol, Protocols
+@section UUCP @samp{e} Protocol
+@cindex @samp{e} protocol
+@cindex protocol @samp{e}
+
+The @samp{e} protocol is similar to the @samp{t} protocol. It does no
+flow control or error checking and is intended for use over networks
+providing reliable end-to-end connections, such as TCP.
+
+The @samp{e} protocol originated in versions of HDB UUCP.
+
+When a UUCP package transmits a command, it simply sends the command
+as an ASCII string terminated by a null byte.
+
+When a UUCP package transmits a file, it sends the complete size of the
+file as an ASCII decimal number. The ASCII string is padded out to 20
+bytes with null bytes (i.e. if the file is 1000 bytes long, it sends
+@samp{1000\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0}). It then sends the entire
+file.
+
+@ifset faq
+@format
+------------------------------
+
+From: UUCP @samp{G} Protocol
+Subject: UUCP @samp{G} Protocol
+@end format
+@end ifset
+
+@node Big G Protocol, i Protocol, e Protocol, Protocols
+@section UUCP @samp{G} Protocol
+@cindex @samp{G} protocol
+@cindex protocol @samp{G}
+
+The @samp{G} protocol is used by SVR4 UUCP. It is identical to the
+@samp{g} protocol, except that it is possible to modify the window and
+packet sizes. The SVR4 implementation of the @samp{g} protocol
+reportedly is fixed at a packet size of 64 and a window size of 7.
+Supposedly SVR4 chose to implement a new protocol using a new letter to
+avoid any potential incompatibilities when using different packet or
+window sizes.
+
+Most implementations of the @samp{g} protocol that accept packets larger
+than 64 bytes will also accept packets smaller than whatever they
+requested in the @samp{INITB} packet. The SVR4 @samp{G} implementation
+is an exception; it will only accept packets of precisely the size it
+requests in the INITB packet.
+
+@ifset faq
+@format
+------------------------------
+
+From: UUCP @samp{i} Protocol
+Subject: UUCP @samp{i} Protocol
+@end format
+@end ifset
+
+@node i Protocol, j Protocol, Big G Protocol, Protocols
+@section UUCP @samp{i} Protocol
+@cindex @samp{i} protocol
+@cindex protocol @samp{i}
+
+The @samp{i} protocol was written by Ian Lance Taylor (who also wrote
+this
+@ifclear faq
+manual).
+@end ifclear
+@ifset faq
+FAQ).
+@end ifset
+It was first used by Taylor UUCP version 1.04.
+
+It is a sliding window packet protocol, like the @samp{g} protocol, but
+it supports bidirectional transfers (i.e., file transfers in both
+directions simultaneously). It requires an eight bit clear connection.
+Several ideas for the protocol were taken from the paper @cite{A
+High-Throughput Message Transport System} by P.@: Lauder. I don't know
+where the paper was published, but the author's e-mail address is
+@code{piers@@cs.su.oz.au}. The @samp{i} protocol does not adopt his
+main idea, which is to dispense with windows entirely. This is because
+some links still do require flow control and, more importantly, because
+using windows sets a limit to the amount of data which the protocol must
+be able to resend upon request. To reduce the costs of window
+acknowledgements, the protocol uses a large window and only requires an
+ack at the halfway point.
+
+Each packet starts with a six byte header, optionally followed by data
+bytes with a four byte checksum. There are currently five defined
+packet types (@samp{DATA}, @samp{SYNC}, @samp{ACK}, @samp{NAK},
+@samp{SPOS}, @samp{CLOSE}) which are described below. Although any
+packet type may include data, any data provided with an @samp{ACK},
+@samp{NAK} or @samp{CLOSE} packet is ignored.
+
+Every @samp{DATA}, @samp{SPOS} and @samp{CLOSE} packet has a sequence
+number. The sequence numbers are independent for each side. The first
+packet sent by each side is always number 1. Each packet is numbered
+one greater than the previous packet, modulo 32.
+
+Every packet has a local channel number and a remote channel number.
+For all packets at least one channel number is zero. When a UUCP
+command is sent to the remote system, it is assigned a non-zero local
+channel number. All packets associated with that UUCP command sent by
+the local system are given the selected local channel number. All
+associated packets sent by the remote system are given the selected
+number as the remote channel number. This permits each UUCP command
+to be uniquely identified by the channel number on the originating
+system, and therefore each UUCP package can associate all file data
+and UUCP command responses with the appropriate command. This is a
+requirement for bidirectional UUCP transfers.
+
+The protocol maintains a single global file position, which starts at 0.
+For each incoming packet, any associated data is considered to occur at
+the current file position, and the file position is incremented by the
+amount of data contained. The exception is a packet of type
+@samp{SPOS}, which is used to change the file position. The reason for
+keeping track of the file position is described below.
+
+The header is as follows:
+
+@table @asis
+@item @samp{\007}
+Every packet begins with @kbd{^G}.
+
+@item @code{(@var{packet} << 3) + @var{locchan}}
+The five bit packet number combined with the three bit local channel
+number. @samp{DATA}, @samp{SPOS} and @samp{CLOSE} packets use the
+packet sequence number for the @var{packet} field. @samp{NAK} packet
+types use the @var{packet} field for the sequence number to be resent.
+@samp{ACK} and @samp{SYNC} do not use the @var{packet} field, and
+generally leave it set to 0. Packets which are not associated with a
+UUCP command from the local system use a local channel number of 0.
+
+@item @code{(@var{ack} << 3) + @var{remchan}}
+The five bit packet acknowledgement combined with the three bit remote
+channel number. The packet acknowledgement is the number of the last
+packet successfully received; it is used by all packet types. Packets
+which are not sent in response to a UUCP command from the remote system
+use a remote channel number of 0.
+
+@item @code{(@var{type} << 5) + (@var{caller} << 4) + @var{len1}}
+The three bit packet type combined with the one bit packet direction
+combined with the upper four bits of the data length. The packet
+direction bit is always 1 for packets sent by the calling UUCP, and 0
+for packets sent by the called UUCP. This prevents confusion caused by
+echoed packets.
+
+@item @var{len2}
+The lower eight bits of the data length. The twelve bits of data length
+permit packets ranging in size from 0 to 4095 bytes.
+
+@item @var{check}
+The exclusive or of the second through fifth bytes of the header. This
+provides an additional check that the header is valid.
+@end table
+
+If the data length is non-zero, the packet is immediately followed by
+the specified number of data bytes. The data bytes are followed by a
+four byte CRC 32 checksum, with the most significant byte first. The
+CRC is calculated over the contents of the data field.
+
+The defined packet types are as follows:
+
+@table @asis
+@item 0 @samp{DATA}
+This is a plain data packet.
+
+@item 1 @samp{SYNC}
+@samp{SYNC} packets are exchanged when the protocol is initialized, and
+are described further below. @samp{SYNC} packets do not carry sequence
+numbers (that is, the @var{packet} field is ignored).
+
+@item 2 @samp{ACK}
+This is an acknowledgement packet. Since @samp{DATA} packets also carry
+packet acknowledgements, @samp{ACK} packets are only used when one side
+has no data to send. @samp{ACK} packets do not carry sequence numbers.
+
+@item 3 @samp{NAK}
+This is a negative acknowledgement. This is sent when a packet is
+received incorrectly, and means that the packet number appearing in the
+@var{packet} field must be resent. @samp{NAK} packets do not carry
+sequence numbers (the @var{packet} field is already used).
+
+@item 4 @samp{SPOS}
+This packet changes the file position. The packet contains four bytes
+of data holding the file position, most significant byte first. The
+next packet received will be considered to be at the named file
+position.
+
+@item 5 @samp{CLOSE}
+When the protocol is shut down, each side sends a @samp{CLOSE} packet.
+This packet does have a sequence number, which could be used to ensure
+that all packets were correctly received (this is not needed by UUCP,
+however, which uses the higher level @samp{H} command with an @samp{HY}
+response).
+@end table
+
+When the protocol starts up, both systems send a @samp{SYNC} packet.
+The @samp{SYNC} packet includes at least three bytes of data. The first
+two bytes are the maximum packet size the remote system should send,
+most significant byte first. The third byte is the window size the
+remote system should use. The remote system may send packets of any
+size up to the maximum. If there is a fourth byte, it is the number of
+channels the remote system may use (this must be between 1 and 7,
+inclusive). Additional data bytes may be defined in the future.
+
+The window size is the number of packets that may be sent before a
+packet is acknowledged. There is no requirement that every packet be
+acknowledged; any acknowledgement is considered to acknowledge all
+packets through the number given. In the current implementation, if one
+side has no data to send, it sends an @samp{ACK} when half the window is
+received.
+
+Note that the @samp{NAK} packet corresponds to the unused @samp{g}
+protocol @samp{SRJ} packet type, rather than to the @samp{RJ} packet
+type. When a @samp{NAK} is received, only the named packet should be
+resent, not any subsequent packets.
+
+Note that if both sides have data to send, but a packet is lost, it is
+perfectly reasonable for one side to continue sending packets, all of
+which will acknowledge the last packet correctly received, while the
+system whose packet was lost will be unable to send a new packet because
+the send window will be full. In this circumstance, neither side will
+time out and one side of the communication will be effectively shut down
+for a while. Therefore, any system with outstanding unacknowledged
+packets should arrange to time out and resend a packet even if data is
+being received.
+
+Commands are sent as a sequence of data packets with a non-zero local
+channel number. The last data packet for a command includes a trailing
+null byte (normally a command will fit in a single data packet). Files
+are sent as a sequence of data packets ending with one of length zero.
+
+The channel numbers permit a more efficient implementation of the UUCP
+file send command. Rather than send the command and then wait for the
+@samp{SY} response before sending the file, the file data is sent
+beginning immediately after the @samp{S} command is sent. If an
+@samp{SN} response is received, the file send is aborted, and a final
+data packet of length zero is sent to indicate that the channel number
+may be reused. If an @samp{SY} reponse with a file position indicator
+is received, the file send adjusts to the file position; this is why the
+protocol maintains a global file position.
+
+Note that the use of channel numbers means that each UUCP system may
+send commands and file data simultaneously. Moreover, each UUCP system
+may send multiple files at the same time, using the channel number to
+disambiguate the data. Sending a file before receiving an
+acknowledgement for the previous file helps to eliminate the round trip
+delays inherent in other UUCP protocols.
+
+@ifset faq
+@format
+------------------------------
+
+From: UUCP @samp{j} Protocol
+Subject: UUCP @samp{j} Protocol
+@end format
+@end ifset
+
+@node j Protocol, x Protocol, i Protocol, Protocols
+@section UUCP @samp{j} Protocol
+@cindex @samp{j} protocol
+@cindex protocol @samp{j}
+
+The @samp{j} protocol is a variant of the @samp{i} protocol. It was
+also written by Ian Lance Taylor, and first appeared in Taylor UUCP
+version 1.04.
+
+The @samp{j} protocol is a version of the @samp{i} protocol designed for
+communication links which intercept a few characters, such as XON or
+XOFF. It is not efficient to use it on a link which intercepts many
+characters, such as a seven bit link. The @samp{j} protocol performs no
+error correction or detection; that is presumed to be the responsibility
+of the @samp{i} protocol.
+
+When the @samp{j} protocol starts up, each system sends a printable
+ASCII string indicating which characters it wants to avoid using. The
+string begins with the ASCII character @kbd{^} (octal 136) and ends with
+the ASCII character @kbd{~} (octal 176). After sending this string,
+each system looks for the corresponding string from the remote system.
+The strings are composed of escape sequences: @samp{\ooo}, where
+@samp{o} is an octal digit. For example, sending the string
+@samp{^\021\023~} means that the ASCII XON and XOFF characters should be
+avoided. The union of the characters described in both strings (the
+string which is sent and the string which is received) is the set of
+characters which must be avoided in this conversation. Avoiding a
+printable ASCII character (octal 040 to octal 176, inclusive) is not
+permitted.
+
+After the exchange of characters to avoid, the normal @samp{i} protocol
+start up is done, and the rest of the conversation uses the normal
+@samp{i} protocol. However, each @samp{i} protocol packet is wrapped to
+become a @samp{j} protocol packet.
+
+Each @samp{j} protocol packet consists of a seven byte header, followed
+by data bytes, followed by index bytes, followed by a one byte trailer.
+The packet header looks like this:
+
+@table @asis
+@item @kbd{^}
+Every packet begins with the ASCII character @kbd{^}, octal 136.
+
+@item @var{high}
+@itemx @var{low}
+These two characters give the total number of bytes in the packet. Both
+@var{high} and @var{low} are printable ASCII characters. The length of
+the packet is @code{(@var{high} - 040) * 0100 + (@var{low} - 040)},
+where @code{040 <= @var{high} < 0177} and @code{040 <= @var{low} <
+0140}. This permits a length of 6079 bytes, but there is a further
+restriction on packet size described below.
+
+@item @kbd{=}
+The ASCII character @kbd{=}, octal 075.
+
+@item @var{data-high}
+@itemx @var{data-low}
+These two characters give the total number of data bytes in the packet.
+The encoding is as described for @var{high} and @var{low}. The number
+of data bytes is the size of the @samp{i} protocol packet wrapped inside
+this @samp{j} protocol packet.
+
+@item @kbd{@@}
+The ASCII character @kbd{@@}, octal 100.
+@end table
+
+The header is followed by the number of data bytes given in
+@var{data-high} and @var{data-low}. These data bytes are the @samp{i}
+protocol packet which is being wrapped in the @samp{j} protocol packet.
+However, each character in the @samp{i} protocol packet which the
+@samp{j} protocol must avoid is transformed into a printable ASCII
+character (recall that avoiding a printable ASCII character is not
+permitted). Two index bytes are used for each character which must be
+transformed.
+
+The index bytes immediately follow the data bytes. The index bytes are
+created in pairs. Each pair of index bytes encodes the location of a
+character in the @samp{i} protocol packet which was transformed to
+become a printable ASCII character. Each pair of index bytes also
+encodes the precise transformation which was performed.
+
+When the sender finds a character which must be avoided, it will
+transform it using one or two operations. If the character is 0200 or
+greater, it will subtract 0200. If the resulting character is less than
+020, or is equal to 0177, it will xor by 020. The result is a printable
+ASCII character.
+
+The zero based byte index of the character within the @samp{i} protocol
+packet is determined. This index is turned into a two byte printable
+ASCII index, @var{index-high} and @var{index-low}, such that the index
+is @code{(@var{index-high} - 040) * 040 + (@var{index-low} - 040)}.
+@var{index-low} is restricted such that @code{040 <= @var{index-low} <
+0100}. @var{index-high} is not permitted to be 0176, so @code{040 <=
+@var{index-high} < 0176}. @var{index-low} is then modified to encode
+the transformation:
+
+@itemize @bullet
+@item If the character transformation only had to subtract 0200, then
+@var{index-low} is used as is.
+
+@item If the character transformation only had to xor by 020, then 040
+is added to @var{index-low}.
+
+@item If both operations had to be performed, then 0100 is added to
+@var{index-low}. However, if the value of @var{index-low} was initially
+077, then adding 0100 would result in 0177, which is not a printable
+ASCII character. For that special case, @var{index-high} is set to
+0176, and @var{index-low} is set to the original value of
+@var{index-high}.
+@end itemize
+
+The receiver decodes the index bytes as follows (this is the reverse of
+the operations performed by the sender, presented here for additional
+clarity):
+
+@itemize @bullet
+@item The first byte in the index is @var{index-high}, and the second is
+@var{index-low}.
+
+@item If @code{040 <= @var{index-high} < 0176}, the index refers to the
+data byte at position @code{(@var{index-high} - 040) * 040 +
+@var{index-low} % 040}.
+
+@item If @code{040 <= @var{index-low} < 0100}, then 0200 must be added
+to indexed byte.
+
+@item If @code{0100 <= @var{index-low} < 0140}, then 020 must be xor'ed
+to the indexed byte.
+
+@item If @code{0140 <= @var{index-low} < 0177}, then 0200 must be added
+to the indexed byte, and 020 must be xor'ed to the indexed byte.
+
+@item If @code{@var{index-high} == 0176}, the index refers to the data
+byte at position @code{(@var{index-low} - 040) * 040 + 037}. 0200 must
+be added to the indexed byte, and 020 must be xor'ed to the indexed
+byte.
+@end itemize
+
+This means the largest @samp{i} protocol packet which may be wrapped
+inside a @samp{j} protocol packet is @code{(0175 - 040) * 040 + (077 -
+040) == 3007} bytes.
+
+The final character in a @samp{j} protocol packet, following the index
+bytes, is the ASCII character @kbd{~} (octal 176).
+
+The motivation behind using an indexing scheme, rather than escape
+characters, is to avoid data movement. The sender may simply add a
+header and a trailer to the @samp{i} protocol packet. Once the receiver
+has loaded the @samp{j} protocol packet, it may scan the index bytes,
+transforming the data bytes, and then pass the data bytes directly on to
+the @samp{i} protocol routine.
+
+@ifset faq
+@format
+------------------------------
+
+From: UUCP @samp{x} Protocol
+Subject: UUCP @samp{x} Protocol
+@end format
+@end ifset
+
+@node x Protocol, y Protocol, j Protocol, Protocols
+@section UUCP @samp{x} Protocol
+@cindex @samp{x} protocol
+@cindex protocol @samp{x}
+
+The @samp{x} protocol is used in Europe (and probably elsewhere) with
+machines that contain an builtin X.25 card and can send eight bit data
+transparently across X.25 circuits, without interference from the X.28
+or X.29 layers. The protocol sends packets of 512 bytes, and relies on
+a write of zero bytes being read as zero bytes without stopping
+communication. It first appeared in the original System V UUCP
+implementation.
+
+@ifset faq
+@format
+------------------------------
+
+From: UUCP @samp{y} Protocol
+Subject: UUCP @samp{y} Protocol
+@end format
+@end ifset
+
+@node y Protocol, d Protocol, x Protocol, Protocols
+@section UUCP @samp{y} Protocol
+@cindex @samp{y} protocol
+@cindex protocol @samp{y}
+
+The @samp{y} protocol was developed by Jorge Cwik for use in FX UUCICO,
+a PC uucico program. It is designed for communication lines which
+handle error correction and flow control. It requires an eight bit
+clean connection. It performs error detection, but not error
+correction: when an error is detected, the line is dropped. It is a
+streaming protocol, like the @samp{f} protocol; there are no packet
+acknowledgements, so the protocol is efficient over a half-duplex
+communication line such as PEP.
+
+Every packet contains a six byte header:
+
+@table @asis
+@item sequence low byte
+@itemx sequence high byte
+A two byte sequence number, in little endian order. The first sequence
+number is 0. Since the first packet is always a sync packet (described
+below) the sequence number of the first data packet is always 1. Each
+system counts sequence numbers independently.
+
+@item length low byte
+@itemx length high byte
+A two byte data length, in little endian order. If the high bit of the
+sixteen bit field is clear, this is the number of data bytes which
+follow the six byte header. If the high bit is set, there is no data,
+and the length field is a type of control packet.
+
+@item checksum low byte
+@itemx checksum high byte
+A two byte checksum, in little endian order. The checksum is computed
+over the data bytes. The checksum algorithm is described below. If
+there are no data bytes, the checksum is sent as 0.
+@end table
+
+When the protocol starts up, each side must send a sync packet. This is
+a packet with a normal six byte header followed by data. The sequence
+number of the sync packet should be 0. Currently at least four bytes of
+data must be sent with the sync packet. Additional bytes should be
+ignored. They are defined as follows:
+
+@table @asis
+@item version
+The version number of the protocol. Currently this must be 1. Larger
+numbers should be ignored; it is the responsibility of the newer version
+to accommodate the older one.
+
+@item packet size
+The maximum data length to use divided by 256. This is sent as a single
+byte. The maximum data length permitted is 32768, which would be sent
+as 128. Customarily both systems will use the same maximum data length,
+the lower of the two requested.
+
+@item flags low byte
+@itemx flags high byte
+Two bytes of flags. None are currently defined. These bytes should be
+sent as 0, and ignored by the receiver.
+@end table
+
+A length field with the high bit set is a control packet. The
+following control packet types are defined:
+
+@table @asis
+@item 0xfffe @samp{YPKT_ACK}
+Acknowledges correct receipt of a file.
+
+@item 0xfffd @samp{YPKT_ERR}
+Indicates an incorrect checksum.
+
+@item 0xfffc @samp{YPKT_BAD}
+Indicates a bad sequence number, an invalid length, or some other error.
+@end table
+
+If a control packet other than @samp{YPKT_ACK} is received, the
+connection is dropped. If a checksum error is detected for a received
+packet, a @samp{YPKT_ERR} control packet is sent, and the connection is
+dropped. If a packet is received out of sequence, a @samp{YPKT_BAD}
+control packet is sent, and the connection is dropped.
+
+The checksum is initialized to 0xffff. For each data byte in a packet
+it is modified as follows (where @var{b} is the byte before it has been
+transformed as described above):
+
+@example
+ /* Rotate the checksum left. */
+ if ((ichk & 0x8000) == 0)
+ ichk <<= 1;
+ else
+ @{
+ ichk <<= 1;
+ ++ichk;
+ @}
+
+ /* Add the next byte into the checksum. */
+ ichk += @var{b};
+@end example
+
+This is the same algorithm as that used by the @samp{f} protocol.
+
+A command is sent as a sequence of data packets followed by a null byte.
+In the normal case, a command will fit into a single packet. The packet
+should be exactly the length of the command plus a null byte. If the
+command is too long, more packets are sent as required.
+
+A file is sent as a sequence of data packets, ending with a zero length
+packet. The data packets may be of any length greater than zero and
+less than or equal to the maximum permitted packet size specified in the
+initial sync packet.
+
+After the zero length packet ending a file transfer has been received,
+the receiving system sends a @samp{YPKT_ACK} control packet. The
+sending system waits for the @samp{YPKT_ACK} control packet before
+continuing; this wait should be done with a large timeout, since there
+may be a considerable amount of data buffered on the communication path.
+
+@ifset faq
+@format
+------------------------------
+
+From: UUCP @samp{d} Protocol
+Subject: UUCP @samp{d} Protocol
+@end format
+@end ifset
+
+@node d Protocol, h Protocol, y Protocol, Protocols
+@section UUCP @samp{d} Protocol
+@cindex @samp{d} protocol
+@cindex protocol @samp{d}
+
+The @samp{d} protocol is apparently used for DataKit muxhost (not
+RS-232) connections. No file size is sent. When a file has been
+completely transferred, a write of zero bytes is done; this must be read
+as zero bytes on the other end.
+
+@ifset faq
+@format
+------------------------------
+
+From: UUCP @samp{h} Protocol
+Subject: UUCP @samp{h} Protocol
+@end format
+@end ifset
+
+@node h Protocol, v Protocol, d Protocol, Protocols
+@section UUCP @samp{h} Protocol
+@cindex @samp{h} protocol
+@cindex protocol @samp{h}
+
+The @samp{h} protocol is apparently used in some places with HST modems.
+It does no error checking, and is not that different from the @samp{t}
+protocol. I don't know the details.
+
+@ifset faq
+@format
+------------------------------
+
+From: UUCP @samp{v} Protocol
+Subject: UUCP @samp{v} Protocol
+@end format
+@end ifset
+
+@node v Protocol, , h Protocol, Protocols
+@section UUCP @samp{v} Protocol
+@cindex @samp{v} protocol
+@cindex protocol @samp{v}
+
+The @samp{v} protocol is used by UUPC/extended, a PC UUCP program. It
+is simply a version of the @samp{g} protocol which supports packets of
+any size, and also supports sending packets of different sizes during
+the same conversation. There are many @samp{g} protocol implementations
+which support both, but there are also many which do not. Using
+@samp{v} ensures that everything is supported.
+
+@ifset faq
+@format
+------------------------------
+
+From: Thanks
+Subject: Thanks
+@end format
+
+Besides the papers and information acknowledged at the top of this
+article, the following people have contributed help, advice,
+suggestions and information:
+@format
+ Earle Ake 513-429-6500 <ake@@Dayton.SAIC.COM>
+ chris@@uuplus.com (Christopher J. Ambler)
+ jhc@@iscp.bellcore.com (Jonathan Clark)
+ jorge@@laser.satlink.net (Jorge Cwik)
+ celit!billd@@UCSD.EDU (Bill Davidson)
+ "Drew Derbyshire" <ahd@@kew.com>
+ erik@@pdnfido.fidonet.org
+ Matthew Farwell <dylan@@ibmpcug.co.uk>
+ dgilbert@@gamiga.guelphnet.dweomer.org (David Gilbert)
+ kherron@@ms.uky.edu (Kenneth Herron)
+ Mike Ipatow <mip@@fido.itc.e-burg.su>
+ Romain Kang <romain@@pyramid.com>
+ "Jonathan I. Kamens" <jik@@GZA.COM>
+ "David J. MacKenzie" <djm@@eng.umd.edu>
+ jum@@helios.de (Jens-Uwe Mager)
+ peter@@xpoint.ruessel.sub.org (Peter Mandrella)
+ david nugent <david@@csource.oz.au>
+ Stephen.Page@@prg.oxford.ac.uk
+ joey@@tessi.UUCP (Joey Pruett)
+ James Revell <revell@@uunet.uu.net>
+ Larry Rosenman <ler@@lerami.lerctr.org>
+ Rich Salz <rsalz@@bbn.com>
+ evesg@@etlrips.etl.go.jp (Gjoen Stein)
+ kls@@ditka.Chicago.COM (Karl Swartz)
+ Dima Volodin <dvv@@hq.demos.su>
+ John.Woods@@proteon.com (John Woods)
+ jon@@console.ais.org (Jon Zeeff)
+ Eric Ziegast <ziegast@@uunet.uu.net>
+
+------------------------------
+
+End of UUCP Internals Frequently Asked Questions
+******************************
+@end format
+@end ifset
+@c END-OF-FAQ
+
+@node Hacking, Acknowledgements, Protocols, Top
+@chapter Hacking Taylor UUCP
+
+This chapter provides the briefest of guides to the Taylor UUCP source
+code itself.
+
+@menu
+* System Dependence:: System Dependence
+* Naming Conventions:: Naming Conventions
+* Patches:: Patches
+@end menu
+
+@node System Dependence, Naming Conventions, Hacking, Hacking
+@section System Dependence
+
+The code is carefully segregated into a system independent portion and a
+system dependent portion. The system dependent code is in the
+@file{unix} subdirectory, and also in the file @file{sysh.unx} (also
+known as @file{sysdep.h}).
+
+With the right configuration parameters, the system independent code
+calls only ANSI C functions. Some of the less common ANSI C functions
+are also provided in the @file{lib} directory. The replacement function
+@code{strtol} in @file{lib/strtol.c} assumes that the characters @kbd{A}
+to @kbd{F} and @kbd{a} to @kbd{f} appear in strictly sequential order.
+The function @code{igradecmp} in @file{uuconf/grdcmp.c} assumes that the
+upper and lower case letters appear in order. Both assumptions are true
+for ASCII and EBCDIC, but neither is guaranteed by ANSI C. Disregarding
+these caveats, I believe that the system independent portion of the code
+is strictly conforming.
+
+That's not too exciting, since all the work is done in the system
+dependent code. I think that this code can conform to POSIX 1003.1,
+given the right compilation parameters. I'm a bit less certain about
+this, though.
+
+The code has been used on a 16 bit segmented system with no function
+prototypes, so I'm fairly certain that all casts to long and pointers
+are done when necessary.
+
+@node Naming Conventions, Patches, System Dependence, Hacking
+@section Naming Conventions
+
+I use a modified Hungarian naming convention for my variables and
+functions. As with all naming conventions, the code is rather opaque if
+you are not familiar with it, but becomes clear and easy to use with
+time.
+
+The first character indicates the type of the variable (or function
+return value). Sometimes additional characters are used. I use the
+following type prefixes:
+
+@table @samp
+@item a
+array; the next character is the type of an element
+@item b
+byte or character
+@item c
+count of something
+@item e
+stdio FILE *
+@item f
+boolean
+@item i
+generic integer
+@item l
+double
+@item o
+file descriptor (as returned by open, creat, etc.)
+@item p
+generic pointer
+@item q
+pointer to structure
+@item s
+structure
+@item u
+void (function return values only)
+@item z
+character string
+@end table
+
+A generic pointer (@code{p}) is sometimes a @code{void *}, sometimes a
+function pointer in which case the prefix is pf, and sometimes a pointer
+to another type, in which case the next character is the type to which
+it points (pf is overloaded).
+
+An array of strings (@code{char *[]}) would be named @code{az} (array of
+string). If this array were passed to a function, the function
+parameter would be named @code{paz} (pointer to array of string).
+
+Note that the variable name prefixes do not necessarily indicate the
+type of the variable. For example, a variable prefixed with @kbd{i} may
+be int, long or short. Similarly, a variable prefixed with @kbd{b} may
+be a char or an int; for example, the return value of @code{getchar}
+would be caught in an int variable prefixed with @kbd{b}.
+
+For a non-local variable (extern or file static), the first character
+after the type prefix is capitalized.
+
+Most static variables and functions use another letter after the type
+prefix to indicate which module they come from. This is to help
+distinguish different names in the debugger. For example, all static
+functions in @file{protg.c}, the @samp{g} protocol source code, use a
+module prefix of @samp{g}. This isn't too useful, as a number of
+modules use a module prefix of @samp{s}.
+
+@node Patches, , Naming Conventions, Hacking
+@section Patches
+
+I am always grateful for any patches sent in. Much of the flexibility
+and portability of the code is due to other people. Please do not
+hesitate to send me any changes you have found necessary or useful.
+
+When sending a patch, please send the output of the Unix @code{diff}
+program invoked with the @samp{-c} option (if you have the GNU version
+of @code{diff}, use the @samp{-p} option). Always invoke @code{diff}
+with the original file first and the modified file second.
+
+If your @code{diff} does not support @samp{-c} (or you don't have
+@code{diff}), send a complete copy of the modified file (if you have
+just changed a single function, you can just send the new version of the
+function). In particular, please do not send @code{diff} output without
+the @samp{-c} option, as it is useless.
+
+If you have made a number of changes, it is very convenient for me if
+you send each change as a separate mail message. Sometimes I will think
+that one change is useful but another one is not. If they are in
+different messages it is much easier for me to apply one but not the
+other.
+
+I rarely apply the patches directly. Instead I work my way through the
+hunks and apply each one separately. This ensures that the naming
+remains consistent, and that I understand all the code.
+
+If you can not follow all these rules, then don't. But if you do, it
+makes it more likely that I will incorporate your changes. I am not
+paid for my UUCP work, and my available time is unfortunately very
+restricted. The package is important to me, and I do what I can, but I
+can not do all that I would like, much less all that everybody else
+would like.
+
+Finally, please do not be offended if I do not reply to messages for
+some time, even a few weeks. I am often behind on my mail, and if I
+think your message deserves a considered reply I will often put it aside
+until I have time to deal with it.
+
+@node Acknowledgements, Index (concepts), Hacking, Top
+@chapter Acknowledgements
+
+This is a list of people who gave help or suggestions while I was
+working on the Taylor UUCP project. Appearance on this list does not
+constitute endorsement of the program, particularly since some of the
+comments were criticisms. I've probably left some people off, and I
+apologize for any oversight; it does not mean your contribution was
+unappreciated.
+
+First of all, I would like to thank the people at Infinity Development
+Systems (formerly AIRS, which lives on in the domain name) for
+permitting me to use their computers and @file{uunet} access. I would
+also like to thank Richard Stallman @code{<rms@@gnu.ai.mit.edu>} for
+founding the Free Software Foundation, and John Gilmore
+@code{<gnu@@cygnus.com>} for writing the initial version of gnuucp which
+was a direct inspiration for this somewhat larger project. Chip
+Salzenberg @code{<chip@@tct.com>} has contributed many patches.
+@ifinfo
+Franc,ois
+@end ifinfo
+@iftex
+@tex
+Fran\c cois
+@end tex
+@end iftex
+Pinard @code{<pinard@@iro.umontreal.ca>} tirelessly tested the code and
+suggested many improvements. He also put together the initial version
+of this manual. Doug Evans contributed the zmodem protocol. Marc
+Boucher @code{<marc@@CAM.ORG>} contributed the code supporting the pipe
+port type. Jorge Cwik @code{jorge@@laser.satlink.net} contributed the
+@samp{y} protocol code. Finally, Verbus M. Counts
+@code{<verbus@@westmark.com>} and Centel Federal Systems, Inc., deserve
+special thanks, since they actually paid me money to port this code to
+System III.
+
+In alphabetical order:
+
+@example
+"Earle F. Ake - SAIC" @code{<ake@@Dayton.SAIC.COM>}
+@code{mra@@searchtech.com} (Michael Almond)
+@code{cambler@@zeus.calpoly.edu} (Christopher J. Ambler)
+Brian W. Antoine @code{<briana@@tau-ceti.isc-br.com>}
+@code{jantypas@@soft21.s21.com} (John Antypas)
+@code{james@@bigtex.cactus.org} (James Van Artsdalen)
+@code{jima@@netcom.com} (Jim Avera)
+@code{nba@@sysware.DK} (Niels Baggesen)
+@code{uunet!hotmomma!sdb} (Scott Ballantyne)
+Zacharias Beckman @code{<zac@@dolphin.com>}
+@code{mike@@mbsun.ann-arbor.mi.us} (Mike Bernson)
+@code{bob@@usixth.sublink.org} (Roberto Biancardi)
+@code{statsci!scott@@coco.ms.washington.edu} (Scott Blachowicz)
+@code{bag%wood2.cs.kiev.ua@@relay.ussr.eu.net} (Andrey G Blochintsev)
+@code{spider@@Orb.Nashua.NH.US} (Spider Boardman)
+Gregory Bond @code{<gnb@@bby.com.au>}
+Marc Boucher @code{<marc@@CAM.ORG>}
+Ard van Breemen @code{<ard@@cstmel.hobby.nl>}
+@code{dean@@coplex.com} (Dean Brooks)
+@code{jbrow@@radical.com} (Jim Brownfield)
+@code{dave@@dlb.com} (Dave Buck)
+@code{gordon@@sneaky.lonestar.org} (Gordon Burditt)
+@code{dburr@@sbphy.physics.ucsb.edu} (Donald Burr)
+@code{mib@@gnu.ai.mit.edu} (Michael I Bushnell)
+Brian Campbell @code{<brianc@@quantum.on.ca>}
+Andrew A. Chernov @code{<ache@@astral.msk.su>}
+@code{jhc@@iscp.bellcore.com} (Jonathan Clark)
+@code{mafc!frank@@bach.helios.de} (Frank Conrad)
+Ed Carp @code{<erc@@apple.com>}
+@code{mpc@@mbs.linet.org} (Mark Clements)
+@code{verbus@@westmark.westmark.com} (Verbus M. Counts)
+@code{cbmvax!snark.thyrsus.com!cowan} (John Cowan)
+Bob Cunningham @code{<bob@@soest.hawaii.edu>}
+@code{jorge@@laser.satlink.net} (Jorge Cwik)
+@code{kdburg@@incoahe.hanse.de} (Klaus Dahlenburg)
+Damon @code{<d@@exnet.co.uk>}
+@code{celit!billd@@UCSD.EDU} (Bill Davidson)
+@code{hubert@@arakis.fdn.org} (Hubert Delahaye)
+@code{markd@@bushwire.apana.org.au} (Mark Delany)
+Allen Delaney @code{<allen@@brc.ubc.ca>}
+Gerriet M. Denkmann @code{gerriet@@hazel.north.de}
+@code{denny@@dakota.alisa.com} (Bob Denny)
+Drew Derbyshire @code{<ahd@@kew.com>}
+@code{ssd@@nevets.oau.org} (Steven S. Dick)
+@code{gert@@greenie.gold.sub.org} (Gert Doering)
+@code{gemini@@geminix.in-berlin.de} (Uwe Doering)
+Hans-Dieter Doll @code{<hd2@@Insel.DE>}
+@code{deane@@deane.teleride.on.ca} (Dean Edmonds)
+Mark W. Eichin @code{<eichin@@cygnus.com>}
+@code{erik@@pdnfido.fidonet.org}
+Andrew Evans @code{<andrew@@airs.com>}
+@code{dje@@cygnus.com} (Doug Evans)
+Marc Evans @code{<marc@@synergytics.com>}
+Dan Everhart @code{<dan@@dyndata.com>}
+@code{kksys!kegworks!lfahnoe@@cs.umn.edu} (Larry Fahnoe)
+Matthew Farwell @code{<dylan@@ibmpcug.co.uk>}
+@code{fenner@@jazz.psu.edu} (Bill Fenner)
+@code{jaf@@inference.com} (Jose A. Fernandez)
+"David J. Fiander" @code{<golem!david@@news.lsuc.on.ca>}
+Thomas Fischer @code{<batman@@olorin.dark.sub.org>}
+Mister Flash @code{<flash@@sam.imash.ras.ru>}
+@code{louis@@marco.de} (Ju"rgen Fluk)
+@code{erik@@eab.retix.com} (Erik Forsberg)
+@code{andy@@scp.caltech.edu} (Andy Fyfe)
+Lele Gaifax @code{<piggy@@idea.sublink.org>}
+@code{Peter.Galbavy@@micromuse.co.uk}
+@code{hunter@@phoenix.pub.uu.oz.au} (James Gardiner [hunter])
+Terry Gardner @code{<cphpcom!tjg01>}
+@code{dgilbert@@gamiga.guelphnet.dweomer.org} (David Gilbert)
+@code{ol@@infopro.spb.su} (Oleg Girko)
+@code{jimmy@@tokyo07.info.com} (Jim Gottlieb)
+Benoit Grange @code{<ben@@fizz.fdn.org>}
+@code{elg@@elgamy.jpunix.com} (Eric Lee Green)
+@code{ryan@@cs.umb.edu} (Daniel R. Guilderson)
+@code{greg@@gagme.chi.il.us} (Gregory Gulik)
+Richard H. Gumpertz @code{<rhg@@cps.com>}
+Scott Guthridge @code{<scooter@@cube.rain.com>}
+Michael Haberler @code{<mah@@parrot.prv.univie.ac.at>}
+Daniel Hagerty @code{<hag@@eddie.mit.edu>}
+@code{jh@@moon.nbn.com} (John Harkin)
+@code{guy@@auspex.auspex.com} (Guy Harris)
+@code{hsw1@@papa.attmail.com} (Stephen Harris)
+Petri Helenius @code{<pete@@fidata.fi>}
+@code{gabe@@edi.com} (B. Gabriel Helou)
+Bob Hemedinger @code{<bob@@dalek.mwc.com>}
+Andrew Herbert @code{<andrew@@werple.pub.uu.oz.au>}
+@code{kherron@@ms.uky.edu} (Kenneth Herron)
+Peter Honeyman @code{<honey@@citi.umich.edu>}
+@code{jhood@@smoke.marlboro.vt.us} (John Hood)
+Mike Ipatow @code{<mip@@fido.itc.e-burg.su>}
+Bill Irwin @code{<bill@@twg.bc.ca>}
+@code{pmcgw!personal-media.co.jp!ishikawa} (Chiaki Ishikawa)
+@code{ai@@easy.in-chemnitz.de} (Andreas Israel)
+@code{iverson@@lionheart.com} (Tim Iverson)
+@code{bei@@dogface.austin.tx.us} (Bob Izenberg)
+@code{djamiga!djjames@@fsd.com} (D.J.James)
+Rob Janssen @code{<cmgit!rob@@relay.nluug.nl>}
+@code{harvee!esj} (Eric S Johansson)
+Kevin Johnson @code{<kjj@@pondscum.phx.mcd.mot.com>}
+@code{rj@@rainbow.in-berlin.de} (Robert Joop)
+Alan Judge @code{<aj@@dec4ie.IEunet.ie>}
+@code{chris@@cj_net.in-berlin.de} (Christof Junge)
+Romain Kang @code{<romain@@pyramid.com>}
+@code{tron@@Veritas.COM} (Ronald S. Karr)
+Brendan Kehoe @code{<brendan@@cs.widener.edu>}
+@code{warlock@@csuchico.edu} (John Kennedy)
+@code{kersing@@nlmug.nl.mugnet.org} (Jac Kersing)
+@code{ok@@daveg.PFM-Mainz.de} (Olaf Kirch)
+Gabor Kiss @code{<kissg@@sztaki.hu>}
+@code{gero@@gkminix.han.de} (Gero Kuhlmann)
+@code{rob@@pact.nl} (Rob Kurver)
+"C.A. Lademann" @code{<cal@@zls.gtn.com>}
+@code{kent@@sparky.IMD.Sterling.COM} (Kent Landfield)
+Tin Le @code{<tin@@saigon.com>}
+@code{lebaron@@inrs-telecom.uquebec.ca} (Gregory LeBaron)
+@code{karl@@sugar.NeoSoft.Com} (Karl Lehenbauer)
+@code{alex@@hal.rhein-main.de} (Alexander Lehmann)
+@code{merlyn@@digibd.com} (Merlyn LeRoy)
+@code{clewis@@ferret.ocunix.on.ca} (Chris Lewis)
+@code{gdonl@@ssi1.com} (Don Lewis)
+@code{libove@@libove.det.dec.com} (Jay Vassos-Libove)
+@code{bruce%blilly@@Broadcast.Sony.COM} (Bruce Lilly)
+Godfrey van der Linden @code{<Godfrey_van_der_Linden@@NeXT.COM>}
+Ted Lindgreen @code{<tlindgreen@@encore.nl>}
+@code{andrew@@cubetech.com} (Andrew Loewenstern)
+"Arne Ludwig" @code{<arne@@rrzbu.hanse.de>}
+Matthew Lyle @code{<matt@@mips.mitek.com>}
+@code{djm@@eng.umd.edu} (David J. MacKenzie)
+John R MacMillan @code{<chance!john@@sq.sq.com>}
+@code{jum@@helios.de} (Jens-Uwe Mager)
+Giles D Malet @code{<shrdlu!gdm@@provar.kwnet.on.ca>}
+@code{mem@@mv.MV.COM} (Mark E. Mallett)
+@code{pepe@@dit.upm.es} (Jose A. Manas)
+@code{peter@@xpoint.ruessel.sub.org} (Peter Mandrella)
+@code{martelli@@cadlab.sublink.org} (Alex Martelli)
+W Christopher Martin @code{<wcm@@geek.ca.geac.com>}
+Yanek Martinson @code{<yanek@@mthvax.cs.miami.edu>}
+@code{thomasm@@mechti.wupper.de} (Thomas Mechtersheimer)
+@code{jm@@aristote.univ-paris8.fr} (Jean Mehat)
+@code{me@@halfab.freiburg.sub.org} (Udo Meyer)
+@code{les@@chinet.chi.il.us} (Leslie Mikesell)
+@code{bug@@cyberdex.cuug.ab.ca} (Trever Miller)
+@code{mmitchel@@digi.lonestar.org} (Mitch Mitchell)
+Emmanuel Mogenet @code{<mgix@@krainte.jpn.thomson-di.fr>}
+@code{rmohr@@infoac.rmi.de} (Rupert Mohr)
+Jason Molenda @code{<molenda@@sequent.com>}
+@code{ianm@@icsbelf.co.uk} (Ian Moran)
+@code{jmorriso@@bogomips.ee.ubc.ca} (John Paul Morrison)
+@code{brian@@ilinx.wimsey.bc.ca} (Brian J. Murrell)
+@code{service@@infohh.rmi.de} (Dirk Musstopf)
+@code{lyndon@@cs.athabascau.ca} (Lyndon Nerenberg)
+@code{rolf@@saans.north.de} (Rolf Nerstheimer)
+@code{tom@@smart.bo.open.de} (Thomas Neumann)
+@code{mnichols@@pacesetter.com}
+Richard E. Nickle @code{<trystro!rick@@Think.COM>}
+@code{stephan@@sunlab.ka.sub.org} (Stephan Niemz)
+@code{nolan@@helios.unl.edu} (Michael Nolan)
+david nugent @code{<david@@csource.oz.au>}
+Jim O'Connor @code{<jim@@bahamut.fsc.com>}
+@code{kevin%kosman.uucp@@nrc.com} (Kevin O'Gorman)
+Petri Ojala @code{<ojala@@funet.fi>}
+@code{oneill@@cs.ulowell.edu} (Brian 'Doc' O'Neill)
+@code{Stephen.Page@@prg.oxford.ac.uk}
+@code{abekas!dragoman!mikep@@decwrl.dec.com} (Mike Park)
+Tim Peiffer @code{peiffer@@cs.umn.edu}
+@code{don@@blkhole.resun.com} (Don Phillips)
+"Mark Pizzolato 415-369-9366" @code{<mark@@infocomm.com>}
+John Plate @code{<plate@@infotek.dk>}
+@code{dplatt@@ntg.com} (Dave Platt)
+@code{eldorado@@tharr.UUCP} (Mark Powell)
+Mark Powell @code{<mark@@inet-uk.co.uk>}
+@code{pozar@@kumr.lns.com} (Tim Pozar)
+@code{joey@@tessi.UUCP} (Joey Pruett)
+Paul Pryor @code{ptp@@fallschurch-acirs2.army.mil}
+@code{putsch@@uicc.com} (Jeff Putsch)
+@code{ar@@nvmr.robin.de} (Andreas Raab)
+Jarmo Raiha @code{<jarmo@@ksvltd.FI>}
+James Revell @code{<revell@@uunet.uu.net>}
+Scott Reynolds @code{<scott@@clmqt.marquette.Mi.US>}
+@code{mcr@@Sandelman.OCUnix.On.Ca} (Michael Richardson)
+Kenji Rikitake @code{<kenji@@rcac.astem.or.jp>}
+@code{arnold@@cc.gatech.edu} (Arnold Robbins)
+@code{steve@@Nyongwa.cam.org} (Steve M. Robbins)
+Ollivier Robert @code{<Ollivier.Robert@@keltia.frmug.fr.net>}
+Serge Robyns @code{<sr@@denkart.be>}
+Lawrence E. Rosenman @code{<ler@@lerami.lerctr.org>}
+Jeff Ross @code{<jeff@@wisdom.bubble.org>}
+Aleksey P. Rudnev @code{<alex@@kiae.su>}
+"Heiko W.Rupp" @code{<hwr@@pilhuhn.ka.sub.org>}
+@code{wolfgang@@wsrcc.com} (Wolfgang S. Rupprecht)
+@code{tbr@@tfic.bc.ca} (Tom Rushworth)
+@code{jsacco@@ssl.com} (Joseph E. Sacco)
+@code{rsalz@@bbn.com} (Rich Salz)
+@code{sojurn!mike@@hobbes.cert.sei.cmu.edu} (Mike Sangrey)
+Nickolay Saukh @code{<nms@@ussr.EU.net>}
+@code{heiko@@lotte.sax.de} (Heiko Schlittermann)
+Eric Schnoebelen @code{<eric@@cirr.com>}
+@code{russell@@alpha3.ersys.edmonton.ab.ca} (Russell Schulz)
+@code{scott@@geom.umn.edu}
+Igor V. Semenyuk @code{<iga@@argrd0.argonaut.su>}
+Christopher Sawtell @code{<chris@@gerty.equinox.gen.nz>}
+@code{schuler@@bds.sub.org} (Bernd Schuler)
+@code{uunet!gold.sub.org!root} (Christian Seyb)
+@code{s4mjs!mjs@@nirvo.nirvonics.com} (M. J. Shannon Jr.)
+@code{shields@@tembel.org} (Michael Shields)
+@code{peter@@ficc.ferranti.com} (Peter da Silva)
+@code{vince@@victrola.sea.wa.us} (Vince Skahan)
+@code{frumious!pat} (Patrick Smith)
+@code{roscom!monty@@bu.edu} (Monty Solomon)
+@code{sommerfeld@@orchard.medford.ma.us} (Bill Sommerfeld)
+Julian Stacey @code{<stacey@@guug.de>}
+@code{evesg@@etlrips.etl.go.jp} (Gjoen Stein)
+Harlan Stenn @code{<harlan@@mumps.pfcs.com>}
+Ralf Stephan @code{<ralf@@ark.abg.sub.org>}
+@code{johannes@@titan.westfalen.de} (Johannes Stille)
+@code{chs@@antic.apu.fi} (Hannu Strang)
+@code{ralf@@reswi.ruhr.de} (Ralf E. Stranzenbach)
+@code{sullivan@@Mathcom.com} (S. Sullivan)
+Shigeya Suzuki @code{<shigeya@@dink.foretune.co.jp>}
+@code{kls@@ditka.Chicago.COM} (Karl Swartz)
+@code{swiers@@plains.NoDak.edu}
+Oleg Tabarovsky @code{<olg@@olghome.pccentre.msk.su>}
+@code{ikeda@@honey.misystems.co.jp} (Takatoshi Ikeda)
+John Theus @code{<john@@theus.rain.com>}
+@code{rd@@aii.com} (Bob Thrush)
+ppKarsten Thygesen @code{<karthy@@dannug.dk>}
+Graham Toal @code{<gtoal@@pizzabox.demon.co.uk>}
+@code{rmtodd@@servalan.servalan.com} (Richard Todd)
+Martin Tomes @code{<mt00@@controls.eurotherm.co.uk>}
+Len Tower @code{<tower-prep@@ai.mit.edu>}
+Mark Towfiq @code{<justice!towfiq@@Eingedi.Newton.MA.US>}
+@code{mju@@mudos.ann-arbor.mi.us} (Marc Unangst)
+Matthias Urlichs @code{<urlichs@@smurf.noris.de>}
+Tomi Vainio @code{<tomppa@@fidata.fi>}
+@code{a3@@a3.xs4all.nl} (Adri Verhoef)
+Andrew Vignaux @code{<ajv@@ferrari.datamark.co.nz>}
+@code{vogel@@omega.ssw.de} (Andreas Vogel)
+Dima Volodin @code{<dvv@@hq.demos.su>}
+@code{jos@@bull.nl} (Jos Vos)
+@code{jv@@nl.net} (Johan Vromans)
+David Vrona @code{<dave@@sashimi.wwa.com>}
+@code{Marcel.Waldvogel@@nice.usergroup.ethz.ch} (Marcel Waldvogel)
+@code{steve@@nshore.org} (Stephen J. Walick)
+@code{syd@@dsinc.dsi.com} (Syd Weinstein)
+@code{gerben@@rna.indiv.nluug.nl} (Gerben Wierda)
+@code{jbw@@cs.bu.edu} (Joe Wells)
+@code{frnkmth!twwells.com!bill} (T. William Wells)
+Peter Wemm @code{<Peter_Wemm@@zeus.dialix.oz.au>}
+@code{mauxci!eci386!woods@@apple.com} (Greg A. Woods)
+@code{John.Woods@@proteon.com} (John Woods)
+Michael Yu.Yaroslavtsev @code{<mike@@yaranga.ipmce.su>}
+Alexei K. Yushin @code{<root@@july.elis.crimea.ua>}
+@code{jon@@console.ais.org} (Jon Zeeff)
+Matthias Zepf @code{<agnus@@amylnd.stgt.sub.org>}
+Eric Ziegast @code{<uunet!ziegast>}
+@end example
+
+@node Index (concepts), Index (configuration file), Acknowledgements, Top
+@unnumbered Concept Index
+
+@printindex cp
+
+@node Index (configuration file), , Index (concepts), Top
+@unnumbered Configuration File Index
+
+@printindex fn
+
+@contents
+@bye