Thank you for ordering Industrial ZMODEM(Tm).

This version contains optional code (-DLDP) for rejecting out of
sequence long delayed packets caused by certain transmission links.  It
is developmental and may be changed without notice.  -DLDP should not be
used in finished applications.

Most customers have no difficulty integrating Industrial ZMODEM(Tm) in
their applications.  One or two had an interesting time of it, and were
convinced there was a big fat bug lurking somewhere in Industrial
ZMODEM.  It was their implementation of readline().

Readline(50) should time out in 5 seconds if no characters are in the
queue or received within 5 seconds.  Anything from 2 to 10 seconds will
work fine, but 50 microseconds usually won't.  Be careful about
arithmetic overflows if you translate readline() to a primitive that
times out in microseconds.

IT IS ABSOLUTELY IMPERATIVE THAT READLINE() ALWAYS TIMES OUT.
THE READLINE() IN OLDRBUNIX.C SOMETIMES FAILS TO TIME OUT UNDER
EXTREME CONDITIONS SUCH AS STRESS TESTING.  
STRESS TESTING.

If the send module does not seem to respond to ZRPOS (error correction
request) packets, checkline() may not be working, or readline() may not
be able to receive data while sending.  Ideally the receive UART should
have a 16 or larger FIFO buffer.  If not, the receiver should be
interrupt driven so it can store incoming characters even when
transmitting.  If interrupts are not used it may be possible to fake it
by careful polling of the receive ready flag while waiting for the
transmit buffer to drain.

----------------------------------------------------------

The files yp.s and dos.mac are included for those who must write
interrupt driven routines for serial I/O. These are part of the PCDOS
DSZ, GSZ, ZCOMM, and Professional-YAM communications programs. They
support the 8250 and derivitave chips. They demonstrate techniques
used for interrupt driven serial I/O when this is not provided by the
underlying operating system.

----------------------------------------------------------

zclose() and closeit() may be called even if the file is closed,
so they should check for this condition.

----------------------------------------------------------

Industrial ZMODEM 2004 supports simple crash recovery.  The receiver
does most of the work.  The sender merely sets a bit in the ZFILE frame
asking the receiver to perform crash recovery.  The receiver may decide
for itself to perform crash recovery.

A file that grows by appending data is suitable for crash recovery.  One
that shrinks is not.  The sender's copy of the segment that has been
sent must not change, otherwise the receiver's copy will not match the
sender's copy.

----------------------------------------------------------

Flow control has not been a problem for Industrial ZMODEM users to date.
In the 1980s flow control was a common problem.  ZMODEM provides a
number of options for dealing with flow control issues.

Flow control may be implemented by hardware flow control (RS232 Clear to
Send (CTS) signal when available.  Standard ZMODEM is compatible with
Driver level XON/XOFF flow control.  If neither of these is available,
ZMODEM protcol flow control (see -l or -w otption) can be used.

Concerning the receive module: if your widget has a command decoder
(like the msdos DEBUG program), you can automatically receive files.
Add an "rz" command and a "*" command which call the receive module.
Some client software starts sending with "rz<cr>". Others just start
sending packets, which start with "*".

