--------------------
Public Domain Zmodem
--------------------
Release 1.26
by Peter Mandrella, 1994-98
NOTE: I did everything I could to avoid and remove bugs and errors
in this program. Though, I do not guarantee that this program will
work in the way you expect. I will take no responsibility for
anything it does or does not. It is released without any warranty
or support.
What is Zmodem?
---------------
Zmodem is a fast, reliable and popular "file transfer protocol" -
a program for transfering files from one computer to another over
a serial connection. Because of its speed, robustness and easy of
use, Zmodem has replaced the formerly common protocols "Xmodem"
and "Kermit" in most applications.
Besides the original Unix Zmodem and the DOS implementations DSZ
and GSZ, there are many other implementations for nearly any type
of hardware and operating system. There are many wide-spread
Zmodems for DOS - e.g. DSZ, GSZ, Texas Zmodem, CE-XYZ and others.
So why had just another Zmodem clone to be invented? Because none
of the existing implementations offers all of the below mentioned
features.
What is PD Zmodem?
------------------
PD Zmodem is a new Zmodem program for DOS, featuring ...
+ full Public Domain status, including commercial use
+ support of any IBM compatible serial interface, using any IRQ
up to #15
+ FOSSIL support
+ high throughput, especially with ISDN; optimum throughput on
bad lines due to calculation of the best data block size
+ all standard Zmodem functions
+ ZedZap support (8k data blocks)
+ optional transfer of whole directory trees
+ chat function
+ automatic cps rate and transfer time control
+ time synchronization
+ minimum system load under OS/2 or DesqView
+ choice of English or German user interface
There are three or four things (depending on how you count) which
are not supported and currently not being considered for future
versions of PD Zmodem:
- built-in Xmodem and Ymodem
- XON/XOFF (software) handshake
The latter one may be accomplished, though, by using a FOSSIL
driver.
PD Zmodem assumes the following hardware and software environment:
o any DOS compatible or emulating system
o DOS version 3.0 or higher
o about 130 KB of free DOS main memory
o IBM compatible serial interface, or FOSSIL driver
Syntax
------
Receive files:
ZM [options] rz [path][file name]
If a path name is issued, all received files will be stored there.
If a file name is issued with or without path, the files are
stored under this file name; of course, this only makes sense if
only one file is transmitted. If "rz" is used without a path or
file name, all files are received into the current directory.
Send files:
ZM [options] sz
may be a single file name, a wild card (like "*.*") or a
space-separated list of several file names and/or wild cards. All
file names may include a path name.
Instead of including the paramaters in the command line, you may
put them into a seperate file - one parameter in each line - and
issue the name of this file with a preceeding "@", e.g.
ZM sz @FILELIST
ZM will read the parameters line by line from FILELIST and handle
them exactly like parameters typed in a DOS command line. The main
purpose of this feature is to enable a large list of files to be
send - as you know, the length of the DOS command line is limited.
The parameters "rz" and "sz" may be abbreviated as "r" and "s".
Options
-------
All Options start with "-" or "/" and are separated from other
options or parameters by at least one space. Options may be inser-
ted at any place and in any order. So,
ZM -c1 -b19200 -d sz FILE1.ZIP FILE2.ZIP
is the same as
ZM -d sz FILE.ZIP /b19200 -c1 FILE2.ZIP
*All* options are, as their name says, optional and may be
omitted. ZM assumes a default setting for any option.
Serial interface settings:
-cN Selects the serial interface. You may either use a
-cXXX,YY COM number (N), e.g. "-c1" for COM1, or a combina-
tion of address and IRQ (XXX,YY), like "-c2e8,5".
If you issue a COM number, ZM uses the following
addresses and IRQs:
-c1 = -c3f8,4 -c3 = -c3e8,4
-c2 = -c2f8,3 -c4 = -c2e8,3
Default is "-c2". When using FOSSIL, possible COM
numbers range from 1 to 50, otherwise from 1 to 4.
-f Use FOSSIL driver. If you use this switch, you have
to use the "-cN" form for the serial interface
number.
-bN Selects the DTE speed, i.e. the speed (bps rate,
"baud rate") between modem and CPU, e.g. "-b38400"
for 38400 bps. If -bN is omitted, ZM uses the
currently selected speed.
-d Ignore Carrier Detect (CD). Normally, your modem
should indicate a connection by the CD signal. If
your modem is not properly configured or if you are
using a null modem (direct connection between two
computers) without a CD line, then you may consider
disabling the CD detection by "-d". Warning! If
"-d" is used, ZM will not be able to detect a "NO
CARRIER" connection breakdown! Instead, it will
time out after at least 70 seconds.
-h Ignore CTS. Normally, the modem uses CTS to signal
when it is ready to receive. If the modem is not
properly configured or if your null modem connec-
tion lacks a CTS line, there might be no CTS
signal. Warning! Do not use "-h" when sending files
over modem connections with data compression! It
will inevitably cause transmission errors.
Hint: When transfering files from a very slow com-
puter via null modem, the -h switch may increase
speed by up to 10 per cent.
-rts (1) PD-Zmodem uses RTS handshake and thus prevents
receive buffer overruns at high transfer speeds on
slow machines. If periodic transmission errors
occur, try -rts.
(2) If transmission errors occur while writing data
to disk, you should issue "-rts". This will suspend
the transmission during disk access. Warning: When
being used with old ZyXEL ROM releases (4.x), the
use of RTS handshake will cause the modem to crash.
-n Disable the serial interface's 16550A FIFO buffer.
This switch is intended for test purpose only. The
FIFO buffer is necessary for stable data transmis-
sion at high speeds (38.400 bps or more).
-tlX selects a FIFO trigger level of 2, 4, 8 (default)
or 14. This setting applies only to 16550A chips
and not to FOSSIL drivers. Under DOS changing the
trigger level may change the transfer stability.
The effect of a lower or higher trigger level
depends on the hardware. A level of 8 will work
fine in most circumstances.
Note: PD Zmodem 1.0 used a trigger level of 14.
-dtr drops the DTR signal when PD Zmodem is finished. If
you use the right modem settings, this causes your
modem to drop the carrier. This feature is useful
to end a connection after an unsupervised Zmodem
transfer. -dtr may not work under OS/2.
Zmodem settings:
(rz) = setting is valid for receiving files
(sz) = setting is valid for sending files
-r (rz/sz) Disable Crash Recovery. If crash recovery is
enabled, an aborted file transfer may be resumed at
the position where the connection was lost. If the
file is already complete, it will be skipped.
When receiving, "-r" will work under any condition.
If it works when sending, too, depends on the
receiver's Zmodem implementation. If "-r" has been
issued and the transfer is aborted, the incomplete
file will be deleted.
-oX (rz) Determines what will happen if the received file
already exists and crash recovery is not appli-
cable:
-o0 = refuse new file
-o1 = replace old by new file
-o2 = rename new file (default)
-o3 = rename old file
The old -o switch does still exist and is the same
as -o1.
-16 (rz/sz) Use 16 bit instead of 32 bit checksums. This
feature has been implemented for Zmodem standard
conformance only. Actually, all Zmodem implemen-
tations use the more secure 32 bit checksums.
-8 (sz) Increase the maximum block size from 1024 to 8192
bytes ("ZedZap"). This will increase the throughput
by about 0.5 per cent if the connection is error
free. When "-8" is issued, ZM starts with normal 1k
blocks and increases the block size slowly up to 8k
if the transmission stays error free. When recei-
ving, ZM automatically adapts to any block size up
to 8k, independend of the "-8" switch.
Warning! "ZedZap" is not a Zmodem but a FidoNet
standard. It will work only if the receiver
supports this special Fido feature, too.
-8N (sz) Like "-8", with the exception that file transfers
start immediately with N KB sized blocks. Possible
values of N are 1, 2, 4 and 8. This switch only
makes sense if the connection is stable and a maxi-
mum of one error - including connection breakdowns
- occurs per MB of transferred data.
-p (sz) Transfer path names. Normally, ZM strips path names
when transferring file names. If "-p" is issued and
the receiver is configured properly, you may use
this feature to send files into any directory path.
The transferred path name is the same as the one
given as paramater. If you specify only file names
without paths, "-p" has no effect, except for the
case that you used "-s" to transfer subdirectories.
-s (sz) Sends files from subdirectories, too. If combined
with "-p" and "*.*" as file name, you may use this
feature for transmitting a whole directory tree.
-s (rz) Allows receiving into any directory and creates
directories, if necessary. If "-s" is omitted, all
incoming files are stored in the current directory
or the one which is given as command line parame-
ter. More details are given in a section below.
Warning! If "-s" is issued without an additional
receive path name, the sending program will be able
to write files into any directories on your hard
disk! When combined with "-o", it may even over-
write any existing files that are not protected by
a "read only" attribute. DO NOT USE THE "-s"
RECEIVER SWITCH WITHIN A BBS! IT WILL CAUSE A GIANT
SECURITY HOLE!
-e (sz) Encode all control characters. This switch is
useful if the line is not "8 bit clean", i.e. if
certain control characters cannot be transmitted.
This applies especially to Unix-like terminal
connections. "-e" reduces the data transfer rate by
about 22 per cent.
-ts (sz/rz) Synchonizes the receiver's system clock to the
sender's clock. This works only if PD Zmodem is
used and -ts is issued on both sides. If a PD
Zmodem style log file (switch -lz) is created, the
last log file entry shows the time difference. The
accuracy is +/- 4 seconds.
Warning: If PD Zmodem is used as external protocol
within a program that does not recognize the PD
Zmodem log file, time synchronization may result in
calculating a wrong transfer time.
| -iKB (rz) Limits the size of received files. Files that are
| larger than the given number of KBytes will be
| refused.
Settings for transfer time restrictions:
-zN sets a minimum transfer speed of N cps. If the cps
rate drops for at least two minutes below N, the
transfer will be aborted. ZM then returns errorle-
vel 4.
-tN sets a maximum transfer time of N minutes or an end
-thh:mm time (e.g. -t20:15 fr 8:15pm). If the given time
limit was exceeded, but at least after two minutes,
ZM aborts the transfer with errorlevel 5.
-xtN Like -t, but instead of the real time, the
-xthh:mm currently calculated transfer time is used. The
transfer will be aborted "preventive" if PD Zmodem
has recognized that it probably cannot be finished
within the given time limit.
Note: -t and -xt cannot be combined.
-tiN sets timeout in seconds. If the Zmodem on the other
end does not react for more than N seconds, the
transfer is aborted. N is rounded up to a multiple
of 10 seconds and may range between 30 and 600. The
default is 80 seconds.
Other settings:
-ld creates a DSZ style log file (see below). Replace
by the desired file name, optionally inclu-
ding a full path specifier. This switch supersedes
the environment settings DSZLOG= and ZMLOG=.
-\ uses "\" as separator in DSZ style log files
instead of the Zmodem standard separator "/".
-lz creates a PD Zmodem style log file (see below).
This switch supersedes the environment settings
DSZLOG= and ZMLOG= and the switch -ld.
-m Monochrome Display, e.g. for VGA mono screens or
for laptop LC displays.
-nochat Disables ZM's chat feature. More details are
described below.
-nologo Disables any screen output before and after
displaying the Zmodem transfer window.
-nowin Disables the Zmodem transfer window display.
-beep Enables an acoustic signal before program termi-
nation.
-q Disables the 1 to 2 seconds pause before program
termination. The pause shall make readable the last
displayed message before closing the Zmodem window.
If you do not use a FOSSIL driver, characters
received during this pause may be lost, which might
be annoying if ZM is used as external protocol
within a terminal program.
-os2x reduces the system load under OS/2. "x" may be any
character from a to d and selects different methods
for releasing time slices:
-os2a uses int 15h/86h (BIOS)
-os2b uses int 28h (DOS)
-os2c uses sti/hlt/35h/cah (OS/2)
-os2d uses int 2fh/1680h (DPMI)
You will have to try which method works best. All
four methods use undocumented OS/2 functions and at
least -os2a and -os2d are not supported by all OS/2
versions. Using unsupported functions may result in
OS malfuncions, including a total system stop
(Trap).
-dv reduces the system load when receiving data under
DesqView.
-w suppress startup warnings, e.g. if no files to send
are specified.
Transmission of subdirectories
------------------------------
If PD Zmodem is running on both sides of the connection, you may
use it to transfer whole directory trees. Example:
Sender: ZM -b38400 -s -p sz C:\TEXT\*.*
Receiver: ZM -b38400 -s rz
Here, the whole directory tree contents of C:\TEXT\... are trans-
ferred at 38.400 bps via COM2 to the receiving system. Note that
the disk letter "C:" is stripped. If the current directory of the
receiver is D:, the files will be stored into D:\TEXT\...
If the receiver specifies a directory path, too, e.g.
ZM -b38400 -s rz C:\COPY
then the receiver's path will be inserted before the sender's
path. So our example files will end up in C:\COPY\TEXT\... If the
sender used only a relative path name without the leading "\" and
if the receiver did not specify a receive path, then the files
will be stored within and/or below the receiver's current direc-
tory. Example:
Sender: C:\> ZM -b38400 -s -p sz TEXT\*.*
Receiver: D:\DOWNLOAD> ZM -b38400 -s rz
Here, the files will be stored in D:\DOWNLOAD\TEXT\...
Skipping files
--------------
You may use Ctrl-S to skip the rest of the currently received
file. This is not a Zmodem standard function. The result depends
on the sending Zmodem:
PD-Zmodem, CeXYZ, Terminate, miscellaneous Fido Mailers:
The rest of the current file is skipped. The sender handles the
file as "correctly transmitted", but of course it is incom-
plete.
Telemate:
The rest of the current file is skipped. The file is incomplete
and the sender considered it to be bad.
GSZ:
The skip command is not accepted, but the senders reacts in the
right way. PD Zmodem says "file skip failed" and proceeds with
receiving. The file will be received complete and correctly.
Not seen yet, but ...
The skip command doesn't work, and the sender is dumb. The
transfer is either continued, or it will be or must be aborted.
The received file is bad.
Chat
----
PD Zmodem features a built in chat function. When ZM is used on
both sides of the connection, it will display an additional window
within which you may "talk" to the person at the other side.
Note that pressing a key during the transmission may cause a loss
of characters by the serial interface and thus transmission
errors, if no 16550A FIFO chip is present and the speed is 38400
bps or above. The errors will be corrected by Zmodem, but this
will slow down the transfer.
If chat characters were transmitted during the last 10 seconds of
file transmission, ZM will stay in chat mode until no character
was transmitted for at least 15 seconds or until the Escape key is
pressed.
You may clear the chat window at any time using Ctrl-L.
ZM's chat function is NOT compatible to chat functions of other
Zmodem implementations, e.g. Super Zmodem. It is not part of the
Zmodem standard, but a special PD Zmodem extension. In the very
unlikely case that the chat extension may cause problems when
starting transmissions to other Zmodem programs, you may disable
it by the command line switch "-nochat".
When chat mode is active, ZM uses a turbo mode to increase the
data transfer rate by about 1 per cent. This turbo mode is not
part of the Zmodem standard, too, and is implemented in different
ways in different programs (GSZ, Super Zmodem). It works only if
the same program is used at both ends of the line.
Examples
--------
ZM sz FILE.ZIP sends the file FILE.ZIP on COM2 at
the current baud rate.
ZM -c3e8,5 -d sz @FILELIST sends all files that are listed in
the file FILELIST (one file name each
line) on COM3 (address 3e8) / IRQ 5,
ignoring the Carrier signal.
ZM -c1 -b38400 -f rz receives files on COM1 at 38.400 bps
using a FOSSIL driver.
ZM -o rz D:\DOWN\FILE.ZIP receives files on COM2 and stores
them in the directory D:\DOWN, over-
writing any existing files.
ZM -c1 -b9600 -e sz *.* sends all files from the current
directory on COM1 at 9600 bps over a
terminal connection to something like
a unix host.
ZCONFIG
-------
You may use the program ZCONFIG to customize ZM's colors. Besides
that, ZCONFIG allows changing the language for all screen outputs
of ZM between English and German. Changes within ZCONFIG must be
saved explicitely using the menu choice "Save changes".
If you do not have the file ZCONFIG.EXE, your PD Zmodem package is
incomplete.
Renaming of ZM
--------------
You may rename or copy ZM.EXE into RZ.EXE and SZ.EXE. When star-
ting RZ or SZ, you don't have to issue the parameter "rz" resp.
"sz". Thus, you may e.g. receive files on COM2 at the current baud
rate by only typing the two letters "RZ".
PD Zmodem and CrossPoint
------------------------
When using PD Zmodem as external Protocol for the point and
offline software CrossPoint, you should use the following
settings:
Uploader: ZM.EXE -c$ADDRESS,$IRQ sz $UPFILE
Downloader: ZM.EXE -c$ADDRESS,$IRQ rz $DOWNFILE
If you enabled "ignore CD" and "ignore CTS" at /Config/Modem, you
must add the switch -d resp. -h. It might be useful to add the
following switches for download:
-rts if periodic transmission errors occur during download
-beep if you wish an acoustic signal at the end of netcall
When using a FOSSIL driver, the settings are:
Uploader: ZM.EXE -c$PORT -f sz $UPFILE
Downloader: ZM.EXE -c$PORT -f rz $DOWNFILE
Log file
--------
[All properties of GSZ mentioned below refer to the Nov-29-93
release.]
ZM scans the DOS environment for the entry "DSZLOG=" and creates
or appends to a DSZ compatible log file if "DSZLOG=" contains a
valid file name. The same is done if the switch -ld is issued. -ld
supersedes DSZLOG=.
Example:
Z 1201 19200 bps 1286 cps 0 errors 0 1024 turbo.pck -1
z 1226 19200 bps 1313 cps 0 errors 0 1024 turbo.tp -1
z 25811 19200 bps 1753 cps 0 errors 0 1024 zm-recv.inc -1
e 17408 19200 bps 1864 cps 1 errors 0 1024 zm-recv.bak -1
The first character means:
Z = file was received successfully
z = file was sent successfully
E = file reception was aborted
e = file sending was aborted
L = carrier lost while receiving
l = carrier lost while sending
Note: GSZ ignores at this point the "d" switch (ignore carrier
signal) and creates a "L" or "l" instead of "E" or "e" if no
carrier is present. ZM never creates a "L" or "l" entry if the "-
d" switch is issued.
The other columns contain (from left to right):
- Number of transferred Bytes, including bytes skipped by crash
recovery
- DTE bps rate
- average cps rate (characters per second)
- Number of transmission errors
- Number of "CTS lows", i.e. a count how often the CTS handshake
was used (the number the CTS LED of your modem went off and on
during the transmission).
- The size of the last but one data block, or some useless number
if the file consists of only one block (it is *not* the size of
the last data block, as stated in the GSZ documentation).
- The file name, including a path name if present. Instead of the
DOS "\" separators, Unix-like "/" separators are used - except
if you specify the "-\" switch.
- The other program's serial number, or -1 if not present. GSZ
puts its registration number here.
Note that the columns have no fixed width. If the file size, the
number of errors or another field exceeds the width of the corres-
ponding column, the other fields will be moved to the right. GSZ
may give any number up to the file's size as cps rate when crash
recovery is used, which may significantly disturb the logfile's
format. Thus, DSZLOG processing programs should interpret any line
as a space-separated list of fields and should be aware of false
entries created by buggy programs.
If the environment variable "ZMLOG=" is present and contains a
valid file name, or if the switch -lz is issued, ZM appends to or
creates a log file with this file name. -lz supersedes ZMLOG=. The
PD Zmodem log file is preferred to a DSZ log file, if both are
issued.
Example:
Z 03-05-95 21:28:05 c:\test\turbo.pck, 1201 bytes, 1 s, 1286 cps
z 03-05-95 21:28:06 e:\turbo.tp, 1226 bytes, 0 s, 1753 cps
e 03-05-95 21:28:32 e:\test.bak, 17408 bytes, 9 s, 1864 cps,
1 errors
T 03-05-95 21:28:52 +10s
The coloumns except for the first one are not fixed. The first
four entries on each line are separated by one ore more spaces.
The meaning of these entries is (from left to right):
- tag like in DSZ log file, or one of the following:
T time synchronization entry
S received file was skipped by Ctrl-S
- transfer start date (mm-tt-jj)
- transfer start time (hh:mm:ss)
- within "T" lines: the time difference in seconds; otherwise:
full path and name of the transferred file
After this, there may be any additional entries in any order,
separated by ",". Each entry consists of a value, one or more
spaces and a label. There may be spaces before and after the ",".
The following additional entries are defined at the moment:
- bytes: number of transferred bytes. If crash recovery was used,
two numbers are given, separated by "/". The first one
is the number of bytes transmitted and the second one
the total file size.
- s: transfer time, rounded to full seconds, including wai-
ting time before and after the file transmission itself.
- cps: characters per second, calculated using a 1/18 seconds
clock, *without* waiting time before and after the file
transmission.
- errors: number of transfer errors.
Future PD Zmodem releases may add more entries and more tags in
the first coloumn.
Transfer abortion
-----------------
ZM will abort the transfer if one of the following conditions is
true:
- You have pressed the Escape key. (*)
- The other side's Zmodem wants to stop the transfer.
- Someone at the other end has pressed Ctrl-X several times
- ZM made 25 subsequent unsuccessful tries to transmit a single
data block
- Nothing has happened for more than 70 seconds resp. the time
issued by the -ti switch (timeout).
- Your hard disk is full.
- You have issued -o0 and a file was refused.
- The cps rated dropped for at least two minutes below the
minimum given by the -z switch
- The maximum transfer time given by -t or -xt was exceeded.
- When Ctrl-S is pressed, the rest of current file is aborted and
the transfer continues with the next file.
(*) If the other side does not react, it may take up to 10 seconds
until the transfer is aborted. You may force an instant
transfer shutdown by pressing Escape twice.
Errorlevel
----------
ZM returns the following errorlevels:
0 = transfer was completed successfully
1 = transfer was aborted
4 = cps rate too low (see -z switch)
5 = the maximum transfer time (-t/-xt switch) was exceeded
9 = wrong or missing parameter(s)
Please note that errorlevel 4 and and 5 normally occur only on the
one connection side that stopped the transfer - even if PD-ZM is
used on both sides and the same time limits are given. The two
Zmodem programs never work totally synchrone. On the other side,
PD-ZM returns errorlevel 1.
Drawbacks
---------
PD Zmodem does not support the Zmodem windowing mode. This may
result in a lower throughput if errors occur on a buffered conenc-
tion, e.g. over packet-switching networks. With normal point-to-
point operation this restriction doesn't matter.
Glossary
--------
16550A Serial interface chip which reduces the CPU load
by an I/O buffer (FIFO) and thus increases the
transfer stability at high speeds. It is absolute-
ly necessary when transfering at more than 38400
bps oder when using a multitasking environment.
Unfortunately, most manufacturers still equip
their serial intefaces with a cheap 16450 chip.
Batch Concerning Zmodem: Transmission of multiple files
within one transfer.
baud Steps per seconds. That's NOT the same as bps! A
14400 bps modem works at 2400 baud and transmits 6
bits with each step. One exception from the rule
are serial interfaces, where 1 baud is equal to 1
cps because only one bit is transmitted per step.
bps Bits (information units) per second
Carrier If a modem carrier is present, a connection
between two modems has been established.
Carrier Detect Serial interface line which is used by the modem
to signal a connection to the CPU
cps Characters per second
Crash Recovery Zmodem feature for resuming an interrupted file
transfer
CRC Cyclic Redundancy Check - checksum method for
securing data integrity. It is used by Zmodem, by
Modems, by Archivers and by other data equipment
and software to detect damaged data blocks.
CTS Clear to Send - Control signal which means that
the modem is ready to receive data
DSZ / GSZ Wide-spread Zmodem implementation from Omen Tech-
nologies. DSZ and GSZ have some minor bugs but are
very stable and reliable, though.
FidoNet largest non-commercial BBS net
FIFO see 16550A
Flow Control Method for controlling the data flow, e.g. over a
serial interface. Common forms of flow control are
hardware (RTS/CTS) and software (XON/XOFF) flow
control. PD-ZM supports only the hardware version.
Handshake see "Flow Control"
IRQ Interrupt Request. It is used e.g. by the serial
interface to signal reception or transmission of
data to the CPU. Each interface needs an own IRQ.
XTs have IRQs from 0 to 7; ATs add IRQ 8 to 15.
Kermit relatively secure, very slow and pretty
complicated file transfer protocol
Overhead The amount of control data added to transferred or
stored data. If 20 additional bytes are needed for
transferring 1000 data bytes, the overhead is 2
per cent. Zmodem's minimum overhead is about 3.5
per cent.
RTS Ready to Send - control line used by the CPU to
signal to the modem that it is ready to receive
data
Windows Graphical operating system extension which makes
an adventure of data communications once more
Xmodem unsecure, slow and primitive file transfer
protocol, invented in 1974 by Ward Christiansen
Ymodem fairly secure, medium fast, but rather primitive
file transfer protocol
ZedZap Zmodem extension with 8k data blocks, originating
in FidoNet. The only advantage compared to stan-
dard Zmodem is a neglectable 0.5 per cent increase
of throughput over error free lines.
Zmodem secure, fast and powerful file transfer protocol,
created in 1986 by Chuck Forsberg.
Copyrights, Credits, Trademarks ...
-----------------------------------
The CRC routines within PD Zmodem are used courtesy of Stephen
Satchell. The Zmodem implementation is based on a port of Chuck
Forsberg's public domain source "rz/sz", released in the beginnig
of 1988 (later releases os this C source are not public domain,
but shareware with certain restrictions).
My very special thanks to Anders Hejlsberg for the world's finest
(Pascal) compiler.
Thanks to Mike Ehlert for proof reading this text.
Any product names mentioned in this text may be (and in most cases
are) trademarks or registered trademarks.
PD Zmodem is not copyrighted, -lefted, -upped, -downed or
registered in any way and may be used for anyting that is fun for
you (as long as you consider using a Zmodem for it). You may debug
and reverse engineer it until you become mad.
Bug reports and other hints concerning PD Zmodem are welcome.
Please write to
Internet: pm@daisy.de
Fidonet: Peter Mandrella @ 2:2454/97.80
Please do not ask me any questions about Zmodem or the use of PD
Zmodem! If you don't find answers within this text, please ask
your hardware manufacturer, your software dealer, your mom, your
dad, your wife, your psychiatrist, or even post your questions
into an appropriate net newsgroup.
Please don't send me any fido crash mails with RREQ flag, because
my bossnode's software doesn't like them.
Programmer's literature
-----------------------
Chuck Forsberg, 1986-88: "The ZMODEM Inter Application File
Transfer Protocol". Available as file (ZMODEM.DOC) on the
net.
Chuck Forsberg, 1986-88: C source of "rz" and "sz" (Public
Domain). Available on the net (especially Internet).
J.R.Louvau, Philip R. Burn: TPZ - Pascal Zmodem source. The public
available TPZ release(s?), or at least one of them, is/are
extremely buggy. Anyway, they are useful for demonstration
purpose and for understanding Chuck's C source.
Rick Moore, 1988: "Fundamentals of FOSSIL implementation and use".
Avaliable as file (FSC-0015.*) on the net (especially
FidoNet).
Arne Schaepers: "Turbo Pascal 4.0/5.0", Volume 2, Addison Wesley.
A German book that contains a very useful discussion of
serial interface programming with Turbo Pascal.
Wolfgang Hartung, Michael Felsmann, Andreas Stiller:
Programming of UART 8250. c't 5/88, page 204 (German)
Martin Ernst, Andreas Stiller: PC interrupt programming.
c't 8/88, page 174 (German)
Markus Maeder: 16550 FIFO programming. c't 2/92, page 170 (German)
If you know any good English sources of information about UART and
interrupt programming, e.g. from Byte or Dr. Dobb's journal,
please let me know, so that I may mention them in future versions
of this text.
The Inevitable Version History (TM)
-----------------------------------
+ = new * = changed ! = fixed - = removed
0.97 10-10-94
first release including English documentation
1.0 11-05-94
* DSZ logfile is kept open only when needed
+ sz: new switch -88
+ new switch -beep
* online time display until end of chat
1.1b 12-12-94
! sz: corrected internal timeouts
! corrected remaining transfer time after files were skipped
+ Switches -z, -t and -xt limit connection time
+ Switch -os2 reduces OS/2 system load
1.1 03-10-95
+ Switches -nologo and -nowin deactivate screen output
+ COM port numbers up to 255 when using FOSSIL
+ Switch -tl selects FIFO trigger level
+ Switch -dv reduces DesqView system load
! corrected CTS timeout
1.15b 03-18-95
+ switch -ld for DSZ log file
+ ZMLOG= and switch -lz for PD Zmodem log file
+ switch -w suppresses warnings
+ additional options for switch -o
! minor chat display error fixed
! correct "L" tag in log file on carrier loss
* send speed optimized
* changed FOSSIL support from byte to block transfers
! fixed timeout bug on date change (23:59 -> 00:00)
+ switch -ti for timeout
+ switches -82 and -84 for starting block sizes 2k resp. 4k
+ switch -ts for time synchronization
1.2 06-02-95
+ switches -os2a to -os2d
+ switch -\ for backslashes in DSZ log files
1.21 08-07-95
! fixed -os2a bug
! -ts works now without PD-ZM log file, too
+ Ctrl-S skips rest of the file being received
+ -dtr switch
* improved RTS handshake
1.22 09-18-95
! sz: fixed problem when skipping existing files
1.23 11-03-95
* fixed SMC chipset problem
1.24 04-06-96
! fixed chat time extension bug
* increased FOSSIL send buffer size
| 1.26 01-08-98
| ! fixed bug when running on fast Pentium CPUs
| + -i switch for receive file size limit