	Sketchy documentation for beta test gnuucp

	John Gilmore
	24 December 1987

This directory contains source for gnuucp, a free program that
implements the Unix uucp file transfer protocol on Unix systems and
on a variety of non-Unix systems.

Gnuucp is not derived from any AT&T or Unix code.  It is a further
development of the "uuslave" program, which was certified by AT&T to be
unlicensed.  (See the file ATT.CERTIFICATION in this directory.)
Gnuucp can be freely given to anyone, whether they have a Unix license
or not.  Gnuucp is copyright by the Free Software Foundation and can
only be distributed under the rules of the "GNU Emacs General Public
License".  Basically, you can give it to anyone, for free or for money,
but you have to provide source code, and the recipients must be able to
redistribute it on the same terms.

Currently gnuucp consists of these source files:

	gnuucp.c	main routine, high level protocol
	gio.c		"g" packet protocol implementation
	uumisc.c	miscellaneous subroutines
	locking.c	subroutines for multitask interlocking
	sysdep.c	this is a link to, or copy of, a file from below.

The system dependent part of gnuucp comes in a different file for each
supported system type.  You link or copy the right sysdep.foo file
to "sysdep.c" before compiling.  Pick one of these, or make your own:

	sysdep.unix	BSD and Sys V Unix
	sysdep.msdos	MSDOS (MSC and Turbo C)
	sysdep.st	Atari ST
	sysdep.cpm	CP/M-80
	sysdep.amiga	Commodore Amiga
	sysdep.vms	DEC VMS

Some of these ports have not been tested in a while, and will need work.

There are also some header files:

	uucp.h		General uucp information and configuration
	sysdep.h	Definitions of the routines in sysdep.c
	includes.h	System include files, #ifdef'd for each system

And some auxiliary programs:

	uuq.c		Queue display, detailed form
	uusnap.c	Queue display, compact form
	uuxqt.c		Executes jobs that arrive via uucp (sketchy)
	rmail.c		Receives mail that arrives via uucp (sketchy)

There are two more files for MSDOS systems, comport.h and comport.asm, which
contain an interrupt-driven routine for handling the serial port; and on
MSDOS, all the filenames are mashed.


Compiling gnuucp on a supported system

Pick which system you are on, and copy or link sysdep.whatever to
sysdep.c.

Edit the Makefile to change the DEFS variable for the options you
want.  First, the system you're compiling for:

	-DBSD	Berkeley Unix
	-DSYSV	Unix System V
	-DCPM	CP/M-80
	-DMSDOS	Mess-Dos
	-DST	Atari ST
	-DVMS
	-DAMIGA

It also has some other options:

	-DSUBDIR (Unix only) Keep queue files in subdirectories like 4.2BSD
	-DMSC	(MSDOS only) Microsoft C
	-DTURBO	(MSDOS only) Turbo C

For msdos, you have to assemble comport.asm and link with it too.
Two MSDOS makefiles are included.
VMS users see README.VMS and VMS.COM.


Running gnuucp

Gnuucp can receive phone calls as well as making phone calls.

When receiving calls, one way is designed for small micros
and such; gnuucp will sit and wait for someone to call on the modem,
and will then prompt them with "login: " and "Password:" and check the
answers.  When another machine calls in and supplies the right login
and password, it will run the uucp protocol to talk to that machine.
Then it hangs up the phone and goes back to listening for another call.
You get this mode by giving gnuucp an argument, which is the device
name of the serial port that it should listen on.

The other mode is for larger machines where there already exist
programs to listen for callers on the phones.  When such a program
decides that the caller is a uucp machine, it can run gnuucp with no
arguments, the same way Unix runs uucico.  Gnuucp will immediately
begin the uucp protocol negotiations on its standard input.  When it is
done transferring files, it will hang up the phone and exit.  In this
role, it acts much like the Unix "uucico" program which implements
uucp, and which is called when another machine logs in to your machine
with a login like "uucp" or "Uhoptoad".

Gnuucp can also be run in "master" mode, where it will call out on an
autodial modem.  If you run "gnuucp -S", it will call any system that
there is work queued up for.  If you run "gnuucp -Ssystem" it will
only call one system.  Currently there are no utilities for queueing
up transfers for other systems (on Unix, the "uucp" and "uux" programs
do this).  Anybody want to write free portable versions of them?

Except when listening for logins, gnuucp will change directories to
a standard place (/usr/spool/uucp on Unix systems) and will leave its
debugging logs in "gnuucp.log" in that directory.

A control file, (/usr/lib/uucp/gnuucp.ctl on Unix systems) is a text
file containing parameters like your system name, the name of the
gnuucp spool directory, the default debugging level, a list of
which serial ports exist, what baud rates work on them, and what kind
of dialers they have, etc.  You will need to edit it.  Gnuucp also
uses a standard Unix "L.sys" file, which supplies the system names,
phone numbers, and login sequences for neighboring machines.

Gnuucp takes an -xN option, where N is a number, to control the amount
of debugging output produced.  Specifying -x5, for example, gives you
all the output for levels 0 through 5.

	-1	no output (default)
	0	error messages and a copy of the LOGFILE output
	1	login trace -- errors only
	2	login trace -- full trace
	3	file transfer commands -- errors only
	4	file transfer commands -- full trace
	5	packets -- errors only
	6	packets -- full trace
	7	file name munging trace
	8	file directory scanning trace
	9	every byte that goes over the serial port

For hints on debugging and porting gnuucp, see the file PORTING.

Copyright 1987 John Gilmore; you can redistribute only if your recipients can.
{sun,ptsfa,lll-crg,ihnp4,ucbvax}!hoptoad!gnu	     		 gnu@toad.com
