XFER 1.0
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 Andrew Bartels.
If there are any questions, you may contact me at:
Digital Innovations
Andrew Bartels
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 program.
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 becomes default.
Command :
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 later versions.
[Options] :
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.
Path\File :
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 be supported.
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.
Code Definition
---------------------------------------------------------------
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
the transfer.
3 Remote computer cancelled transfer
4 Maximum number of timeouts or other block errors
has been exceeded (usually 10), and transfer is
aborting.
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.
253 Invalid [Options] selected on command line. Only
-C and -K are valid, any others will cause this
exit code.
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
19200.
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.PAS Main source code file. Contains
constant definitions, CRC calculation code
and command line parameter processing.
SXRX.INC Include file for XFER.PAS. Contains
functions to send and receive Xmodem.
XFER10.DOC This documentation file.
XFER.EXE The complete compiled version, in case you
don't have the IBMCOM unit or Turbo Pascal.
|