   This file documents Taylor UUCP, version 1.05.

   Copyright (C) 1992, 1993 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.

   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.

Documentation References
========================

   I took a lot of the information from Jamie E. Hanrahan's paper in the
Fall 1990 DECUS Symposium, and from 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 O'Reilly &
Associates, Inc.

   Some information is originally due to a Usenet article by Chuck
Wegrzyn.  The information on the `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 `f' protocol comes from the source code by Piet
Berteema.  The information on the `t' protocol comes from the source
code by Rick Adams.  The information on the `e' protocol comes from a
Usenet article by Matthias Urlichs.

Hacking Taylor UUCP
*******************

   This chapter provides the briefest of guides to the Taylor UUCP
source code itself.

System Dependence
=================

   The code is carefully segregated into a system independent portion
and a system dependent portion.  The system dependent code is in the
`unix' subdirectory, and also in the files `tcp.c', `tli.c' and
`sysh.unx' (also known as `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 `lib' directory.  The replacement function
`strtol' in `lib/strtol.c' assumes that the characters `A' to `F' and
`a' to `f' appear in strictly sequential order.  The function
`igradecmp' in `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 is in use on a 16 bit segmented system with no function
prototypes, so I'm certain that all casts to long and pointers are done
when necessary.

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:

`a'
     array; the next character is the type of an element

`b'
     byte or character

`c'
     count of something

`e'
     stdio FILE *

`f'
     boolean

`i'
     generic integer

`l'
     double

`o'
     file descriptor (as returned by open, creat, etc.)

`p'
     generic pointer

`q'
     pointer to structure

`s'
     structure

`u'
     void (function return values only)

`z'
     character string

   A generic pointer (`p') is sometimes a `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 (`char *[]') would be named `az' (array of
string).  If this array were passed to a function, the function
parameter would be named `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 i may be
int, long or short.  Similarly, a variable prefixed with b may be a char
or an int; for example, the return value of getchar would be caught in
an int variable prefixed with 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 `protg.c', the `g' protocol source code, use a module
prefix of `g'.  This isn't too useful, as a number of modules use a
module prefix of `s'.

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 `diff'
program invoked with the `-c' option (if you have the GNU version of
`diff', use the `-p' option).  Always invoke `diff' with the original
file first and the modified file second.

   If your `diff' does not support `-c' (or you don't have `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 `diff' output without the `-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.

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,
at least for now) for permitting me to use their computers and `uunet'
access.  I would also like to thank Richard Stallman
`<rms@gnu.ai.mit.edu>' for founding the Free Software Foundation and
John Gilmore `<gnu@cygnus.com>' for writing the initial version of
gnuucp which was a direct inspiration for this somewhat larger project.
Chip Salzenberg `<chip@tct.com>' has contributed many patches.
Franc,ois Pinard `<pinard@iro.umontreal.ca>' tirelessly tested the code
and suggested many improvements.  He also put together the initial
version of this document.  Doug Evans contributed the zmodem protocol.
Marc Boucher `<marc@CAM.ORG>' contributed the code supporting the pipe
port type.  Finally, Verbus M. Counts `<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:

     "Earle F. Ake - SAIC" `<ake@Dayton.SAIC.COM>'
     `mra@searchtech.com' (Michael Almond)
     `cambler@zeus.calpoly.edu' (Christopher J. Ambler)
     Brian W. Antoine `<briana@tau-ceti.isc-br.com>'
     `jantypas@soft21.s21.com' (John Antypas)
     `james@bigtex.cactus.org' (James Van Artsdalen)
     `nba@sysware.DK' (Niels Baggesen)
     `uunet!hotmomma!sdb' (Scott Ballantyne)
     Zacharias Beckman `<zac@dolphin.com>'
     `mike@mbsun.ann-arbor.mi.us' (Mike Bernson)
     `bob@usixth.sublink.org' (Roberto Biancardi)
     `statsci!scott@coco.ms.washington.edu' (Scott Blachowicz)
     `bag%wood2.cs.kiev.ua@relay.ussr.eu.net' (Andrey G Blochintsev)
     `spider@Orb.Nashua.NH.US' (Spider Boardman)
     Gregory Bond `<gnb@bby.com.au>'
     Marc Boucher `<marc@CAM.ORG>'
     `dean@coplex.com' (Dean Brooks)
     `jbrow@radical.com' (Jim Brownfield)
     `dave@dlb.com' (Dave Buck)
     `gordon@sneaky.lonestar.org' (Gordon Burditt)
     `dburr@sbphy.physics.ucsb.edu' (Donald Burr)
     `mib@gnu.ai.mit.edu' (Michael I Bushnell)
     Brian Campbell `<brianc@quantum.on.ca>'
     Andrew A. Chernov `<ache@astral.msk.su>'
     `mafc!frank@bach.helios.de' (Frank Conrad)
     Ed Carp `<erc@apple.com>'
     `mpc@mbs.linet.org' (Mark Clements)
     `verbus@westmark.westmark.com' (Verbus M. Counts)
     `cbmvax!snark.thyrsus.com!cowan' (John Cowan)
     Bob Cunningham `<bob@soest.hawaii.edu>'
     `kdburg@incoahe.hanse.de' (Klaus Dahlenburg)
     Damon `<d@exnet.co.uk>'
     `hubert@arakis.fdn.org' (Hubert Delahaye)
     `markd@bushwire.apana.org.au' (Mark Delany)
     Allen Delaney `<allen@brc.ubc.ca>'
     `denny@dakota.alisa.com' (Bob Denny)
     `ssd@nevets.oau.org' (Steven S. Dick)
     `gert@greenie.gold.sub.org' (Gert Doering)
     `gemini@geminix.in-berlin.de' (Uwe Doering)
     Hans-Dieter Doll `<hd2@Insel.DE>'
     Mark W. Eichin `<eichin@cygnus.com>'
     Andrew Evans `<andrew@airs.com>'
     `dje@cygnus.com' (Doug Evans)
     Marc Evans `<marc@synergytics.com>'
     Dan Everhart `<dan@dyndata.com>'
     `kksys!kegworks!lfahnoe@cs.umn.edu' (Larry Fahnoe)
     `fenner@jazz.psu.edu' (Bill Fenner)
     "David J. Fiander" `<golem!david@news.lsuc.on.ca>'
     Thomas Fischer `<batman@olorin.dark.sub.org>'
     `louis@marco.de' (Ju"rgen Fluk)
     `erik@eab.retix.com' (Erik Forsberg)
     `andy@scp.caltech.edu' (Andy Fyfe)
     Lele Gaifax `<piggy@idea.sublink.org>'
     `Peter.Galbavy@micromuse.co.uk'
     `hunter@phoenix.pub.uu.oz.au' (James Gardiner [hunter])
     Terry Gardner `<cphpcom!tjg01>'
     `ol@infopro.spb.su' (Oleg Girko)
     `jimmy@tokyo07.info.com' (Jim Gottlieb)
     Benoit Grange `<ben@fizz.fdn.org>'
     `elg@elgamy.jpunix.com' (Eric Lee Green)
     `ryan@cs.umb.edu' (Daniel R. Guilderson)
     `greg@gagme.chi.il.us' (Gregory Gulik)
     Richard H. Gumpertz `<rhg@cps.com>'
     Michael Haberler `<mah@parrot.prv.univie.ac.at>'
     Daniel Hagerty `<hag@eddie.mit.edu>'
     `jh@moon.nbn.com' (John Harkin)
     `guy@auspex.auspex.com' (Guy Harris)
     Petri Helenius `<pete@fidata.fi>'
     `gabe@edi.com' (B. Gabriel Helou)
     Bob Hemedinger `<bob@dalek.mwc.com>'
     Andrew Herbert `<andrew@werple.pub.uu.oz.au>'
     Peter Honeyman `<honey@citi.umich.edu>'
     `jhood@smoke.marlboro.vt.us' (John Hood)
     Bill Irwin `<bill@twg.bc.ca>'
     `pmcgw!personal-media.co.jp!ishikawa' (Chiaki Ishikawa)
     `bei@dogface.austin.tx.us' (Bob Izenberg)
     `djamiga!djjames@fsd.com' (D.J.James)
     Rob Janssen `<cmgit!rob@relay.nluug.nl>'
     `harvee!esj' (Eric S Johansson)
     Kevin Johnson `<kjj@pondscum.phx.mcd.mot.com>'
     Alan Judge `<aj@dec4ie.IEunet.ie>'
     `chris@cj_net.in-berlin.de' (Christof Junge)
     `tron@Veritas.COM' (Ronald S. Karr)
     Brendan Kehoe `<brendan@cs.widener.edu>'
     `warlock@csuchico.edu' (John Kennedy)
     `kersing@nlmug.nl.mugnet.org' (Jac Kersing)
     Gabor Kiss `<kissg@sztaki.hu>'
     `gero@gkminix.han.de' (Gero Kuhlmann)
     `rob@pact.nl' (Rob Kurver)
     `kent@sparky.IMD.Sterling.COM' (Kent Landfield)
     `lebaron@inrs-telecom.uquebec.ca'  (Gregory LeBaron)
     `karl@sugar.NeoSoft.Com' (Karl Lehenbauer)
     `alex@hal.rhein-main.de' (Alexander Lehmann)
     `merlyn@digibd.com' (Merlyn LeRoy)
     `clewis@ferret.ocunix.on.ca' (Chris Lewis)
     `gdonl@ssi1.com' (Don Lewis)
     `libove@libove.det.dec.com' (Jay Vassos-Libove)
     `bruce%blilly@Broadcast.Sony.COM' (Bruce Lilly)
     Ted Lindgreen `<tlindgreen@encore.nl>'
     `andrew@cubetech.com' (Andrew Loewenstern)
     "Arne Ludwig" `<arne@rrzbu.hanse.de>'
     Matthew Lyle `<matt@mips.mitek.com>'
     `djm@eng.umd.edu' (David J. MacKenzie)
     John R MacMillan `<chance!john@sq.sq.com>'
     Giles D Malet `<shrdlu!gdm@provar.kwnet.on.ca>'
     `mem@mv.MV.COM' (Mark E. Mallett)
     `pepe@dit.upm.es' (Jose A. Manas)
     `peter@xpoint.ruessel.sub.org' (Peter Mandrella)
     `martelli@cadlab.sublink.org' (Alex Martelli)
     W Christopher Martin `<wcm@geek.ca.geac.com>'
     Yanek Martinson `<yanek@mthvax.cs.miami.edu>'
     `jm@aristote.univ-paris8.fr' (Jean Mehat)
     `me@halfab.freiburg.sub.org' (Udo Meyer)
     `les@chinet.chi.il.us' (Leslie Mikesell)
     `mmitchel@digi.lonestar.org' (Mitch Mitchell)
     Emmanuel Mogenet `<mgix@krainte.jpn.thomson-di.fr>'
     `rmohr@infoac.rmi.de' (Rupert Mohr)
     Jason Molenda `<molenda@sequent.com>'
     `ianm@icsbelf.co.uk' (Ian Moran)
     `brian@ilinx.wimsey.bc.ca' (Brian J. Murrell)
     `service@infohh.rmi.de' (Dirk Musstopf)
     `lyndon@cs.athabascau.ca' (Lyndon Nerenberg)
     `rolf@saans.north.de' (Rolf Nerstheimer)
     `tom@smart.bo.open.de' (Thomas Neumann)
     `mnichols@pacesetter.com'
     Richard E. Nickle `<trystro!rick@Think.COM>'
     `stephan@sunlab.ka.sub.org' (Stephan Niemz)
     `nolan@helios.unl.edu' (Michael Nolan)
     david nugent `<david@csource.oz.au>'
     Jim O'Connor `<jim@bahamut.fsc.com>'
     Petri Ojala `<ojala@funet.fi>'
     `oneill@cs.ulowell.edu' (Brian 'Doc' O'Neill)
     `abekas!dragoman!mikep@decwrl.dec.com' (Mike Park)
     Tim Peiffer `peiffer@cs.umn.edu'
     `don@blkhole.resun.com' (Don Phillips)
     "Mark Pizzolato 415-369-9366" `<mark@infocomm.com>'
     John Plate `<plate@infotek.dk>'
     `dplatt@ntg.com' (Dave Platt)
     `eldorado@tharr.UUCP' (Mark Powell)
     Mark Powell `<mark@inet-uk.co.uk>'
     `pozar@kumr.lns.com' (Tim Pozar)
     `putsch@uicc.com' (Jeff Putsch)
     `ar@nvmr.robin.de' (Andreas Raab)
     Jarmo Raiha `<jarmo@ksvltd.FI>'
     Scott Reynolds `<scott@clmqt.marquette.Mi.US>'
     `mcr@Sandelman.OCUnix.On.Ca' (Michael Richardson)
     Kenji Rikitake `<kenji@rcac.astem.or.jp>'
     `arnold@cc.gatech.edu' (Arnold Robbins)
     `steve@Nyongwa.cam.org' (Steve M. Robbins)
     Serge Robyns `<sr@denkart.be>'
     Lawrence E. Rosenman `<ler@lerami.lerctr.org>'
     `ross@sun490.fdu.edu' (Jeff Ross)
     Jeff Ross `<jeff@wisdom.bubble.org>'
     Aleksey P. Rudnev `<alex@kiae.su>'
     "Heiko W.Rupp" `<hwr@pilhuhn.ka.sub.org>'
     `wolfgang@wsrcc.com' (Wolfgang S. Rupprecht)
     `tbr@tfic.bc.ca' (Tom Rushworth)
     `rsalz@bbn.com' (Rich Salz)
     `sojurn!mike@hobbes.cert.sei.cmu.edu' (Mike Sangrey)
     Nickolay Saukh `<nms@ussr.EU.net>'
     `heiko@lotte.sax.de' (Heiko Schlittermann)
     Eric Schnoebelen `<eric@cirr.com>'
     `russell@alpha3.ersys.edmonton.ab.ca' (Russell Schulz)
     `scott@geom.umn.edu'
     Igor V. Semenyuk `<iga@argrd0.argonaut.su>'
     Christopher Sawtell `<chris@gerty.equinox.gen.nz>'
     `schuler@bds.sub.org' (Bernd Schuler)
     `uunet!gold.sub.org!root' (Christian Seyb)
     `s4mjs!mjs@nirvo.nirvonics.com' (M. J. Shannon Jr.)
     `peter@ficc.ferranti.com' (Peter da Silva)
     `vince@victrola.sea.wa.us' (Vince Skahan)
     `frumious!pat' (Patrick Smith)
     `roscom!monty@bu.edu' (Monty Solomon)
     `sommerfeld@orchard.medford.ma.us' (Bill Sommerfeld)
     Julian Stacey `<stacey@guug.de>'
     Harlan Stenn `<harlan@mumps.pfcs.com>'
     Ralf Stephan `<ralf@ark.abg.sub.org>'
     `johannes@titan.westfalen.de' (Johannes Stille)
     `chs@antic.apu.fi' (Hannu Strang)
     `ralf@reswi.ruhr.de' (Ralf E. Stranzenbach)
     `sullivan@Mathcom.com' (S. Sullivan)
     Shigeya Suzuki `<shigeya@dink.foretune.co.jp>'
     `swiers@plains.NoDak.edu'
     Oleg Tabarovsky `<olg@olghome.pccentre.msk.su>'
     John Theus `<john@theus.rain.com>'
     `rd@aii.com' (Bob Thrush)
     ppKarsten Thygesen `<karthy@dannug.dk>'
     Graham Toal `<gtoal@pizzabox.demon.co.uk>'
     `rmtodd@servalan.servalan.com' (Richard Todd)
     Martin Tomes `<mt00@controls.eurotherm.co.uk>'
     Len Tower `<tower-prep@ai.mit.edu>'
     Mark Towfiq `<justice!towfiq@Eingedi.Newton.MA.US>'
     `mju@mudos.ann-arbor.mi.us' (Marc Unangst)
     Tomi Vainio `<tomppa@fidata.fi>'
     Andrew Vignaux `<ajv@ferrari.datamark.co.nz>'
     `vogel@omega.ssw.de' (Andreas Vogel)
     `jos@bull.nl' (Jos Vos)
     `jv@nl.net' (Johan Vromans)
     David Vrona `<dave@sashimi.wwa.com>'
     `Marcel.Waldvogel@nice.usergroup.ethz.ch' (Marcel Waldvogel)
     `steve@nshore.org' (Stephen J. Walick)
     `syd@dsinc.dsi.com' (Syd Weinstein)
     `gerben@rna.indiv.nluug.nl' (Gerben Wierda)
     `jbw@cs.bu.edu' (Joe Wells)
     `frnkmth!twwells.com!bill' (T. William Wells)
     Peter Wemm `<Peter_Wemm@zeus.dialix.oz.au>'
     `mauxci!eci386!woods@apple.com' (Greg A. Woods)
     Michael Yu.Yaroslavtsev `<mike@yaranga.ipmce.su>'
     Alexei K. Yushin `<root@july.elis.crimea.ua>'
     `jon@console.ais.org' (Jon Zeeff)
     Matthias Zepf `<agnus@amylnd.stgt.sub.org>'
     Eric Ziegast `<uunet!ziegast>'