Contents of the XFER10.DOC file
By Andrew Bartels
A Product of Digital Innovations
In the interest of programming, yes, please do distribute copies
of this program and source code!
This program is placed in the Public Domain, January, 1990, By
If there are any questions, you may contact me at:
1859 East 8th Street
Mesa, AZ 85203-6649
(602) 827-1934 - Home
(602) 834-1565 - Work
You are using this program at your own risk. Neither the author
nor Digital Innovations is responsible for any damages as a
result of use, misuse, or failure to perform on the part of this
This source code will compile under Turbo Pascal 5 or 5.5,
Copyright (C) 1987, 1989 Borland International, Inc.
Many thanks go to Wayne Conrad of Pascalaholics Anonymous BBS
(602-484-9356, 300/1200/2400 baud) for writing the IBMCOM 3.0
unit and placing it in the Public Domain. Without IBMCOM, this
program would not have been possible.
This program provides full support for Xmodem Checksum, CRC, and
1K file transfers for the IBM PC and compatibles. Great pains
have been taken to heavily document the code for clarity in the
operations that take place in an Xmodem transfer. I realize that
there are other much more sophisticated programs out there which
support Xmodem ** AND A BUNCH MORE PROTOCOLS **, which you all
will be using for transfers with your terminal programs. This
program does not intend to compete with these other protocol
drivers. Its main attraction is the fact that I have made the
source code open and available to all programmers to review. It
is dedicated to all those fine individuals who once helped me
with questions or problems in programming, and I release the
source code to all in hopes that it may be of help to others
attempting to support Xmodem.
Use of this program is very simple. The program is invoked by
entering a command line according to the following description:
XFER [Port n] [Speed n] Command [Options] Path\File
[Port n] :
This optional parameter tells XFER which COM Port to use for the
transfer. This can be from 1 to 4. If [port n] is omitted, the
default port is 1.
[Speed n] :
This optional parameter sets the speed of the transfer. This can
be 300, 600, 1200, 2400, 4800, 9600, or 19200 baud. If this
parameter is omitted, the current speed of the port being used
This parameter indicates which operation to perform. As of this
version, you may use 'sx' to send Xmodem, or 'rx' to receive
Xmodem. It is expected that other protocols will be supported in
These consist of '-C' for CRC mode transfers, and '-K' for
support of Xmodem 1K transfers. If no options are selected, the
protocol becomes Xmodem Checksum, with 128 byte blocks.
This parameter determines which file is to be sent or received.
Wild cards are not permitted, as Xmodem transfers are not batch
transfers. As batch protocols become available, wild cards will
When exiting, this program provides an error code which can be
detected by ERRORLEVEL in batch files. The following are valid
codes, followed by their meanings.
0 No error occurred. Transfer terminated normally.
1 Error opening file. Possibly bad disk, or file
is not found.
2 Operator aborted transfer by pressing a key during
3 Remote computer cancelled transfer
4 Maximum number of timeouts or other block errors
has been exceeded (usually 10), and transfer is
5 Block received out of sequence. Protocol aborts
promptly under these conditions.
6 Timeout while waiting for final EOT from
transmitter. Some implementations of Xmodem do
not wait for the final EOT to be ACK'd before
exiting, and thus will not re-send it when it is
NAK'd the first time. This causes a timeout while
waiting for the second EOT, and not receiving one.
Nothing serious is wrong here, except that the
transmitter is not fully supporting the now
recognized Xmodem standard. When this code is
received, it is nothing more than a warning, and
should only be worried about if the file received
seems incomplete at the end.
7 No carrier. Must have carrier to transfer.
252 Invalid operation on command line. The only valid
operations are SX (send Xmodem) and RX (receive
Xmodem). Any others will cause this exit code.
253Invalid [Options] selected on command line. Only
-C and -K are valid, any others will cause this
254 Invalid baud rate specified. This is caused when
using [Speed n] to select a baud rate that is
other than 300, 600, 1200, 2400, 4800, 9600, and
255 Invalid COM Port number. This is caused by using
[Port n] to specify a COM port other than 1 - 4,
or when specifying a COM port that does not exist.
For example, specifying 'PORT 3' on a system that
only has two COM ports, will cause this error.
Examples of use:
Specify Xmodem Checksum send, COM1, current baud:
xfer sx myfile.zip
Specify Xmodem CRC send, COM1, current baud:
xfer sx -c myfile.zip
Specify Xmodem 1K send, COM1, current baud:
xfer sx -k myfile.zip or
xfer sx -k -c myfile.zip
Specify Xmodem Checksum receive, COM1, current baud:
xfer rx myfile.zip
Specify Xmodem CRC or 1K receive, COM1, current baud:
xfer rx -c myfile.zip or
xfer rx -c -k myfile.zip or
xfer rx -k myfile.zip
* Note that all three of these commands will receive
Xmodem 1K or Xmodem CRC, whichever the xmitter decides
to transmit. As always, if the xmitter does not support
CRC, the protocol will drop back to Xmodem Checksum.
All Xmodem 1K transfers are assumed to be CRC by default
(thus the third command line possibility is listed as
an alternative to the second one). It is possible to
initiate an Xmodem Checksum 1K transfer if the xmitter
forces a drop back to checksum, but then sends 1K
blocks (this is not recommended due to the checksum
being less accurate as block size increases).
Specify Xmodem Checksum send, COM2, current baud rate:
xfer port 2 sx myfile.zip
Specify Xmodem CRC send, COM4, at 9600 baud:
xfer port 4 speed 9600 sx -c myfile.zip
Files in this archive:
XFER.PASMain source code file. Contains
constant definitions, CRC calculation code
and command line parameter processing.
SXRX.INCInclude file for XFER.PAS. Contains
functions to send and receive Xmodem.
XFER10.DOCThis documentation file.
XFER.EXEThe complete compiled version, in case you
don't have the IBMCOM unit or Turbo Pascal.