
               ZSX v3.10 - a general purpose protocol driver
                    (C) 1990, 1994 by Jan R. Terpstra



  WHAT IS ZSX
  ===========
  ZSX is a general purpose protocol driver for Bulletin Board Systems. It
  features SEAlink (with overdrive), Xmodem, Ymodem, Ymodem-Batch, Ymodem-G
  and Zmodem (with RLE) protocols and requires only 55KB free RAM to run.

  The DOS executable ZSX.EXE requires a FOSSIL driver like OPUS!COMM, x00
  or BNU to drive the communication port. With x00 and BNU, up to 8 ports
  are supported.
  NOTE: Use x00 v1.24 or later or BNU v1.50 or later.

  The OS/2 executable ZSX2.EXE runs best with Ray Gwinn's SIO serial port
  device drivers for OS/2.

  ZSX is a protocol driver for Bulletin Board systems, NOT a universal file
  transfer program like DSZ, PCKERMIT, JMODEM, SuperK or Lynx. Compared to
  other (tm) programs, ZSX is slightly crippled:

   - Zmodem receive has no crash-recovery. This prevents files on your BBS
     from being overwritten or changed by a user.  Zmodem send does support
     recovery so aborted downloads from your BBS can be picked up at the point
     where they aborted.
   - NAK, CANcel and Carrier Lost are ignored for the last block of a download.
     This is to prevent nasty users to evade the up/download counter of your
     BBS. The bozos do so by aborting the download between the last block of
     the file and the subsequent NAK/ACK sequence on the EOT signal. That
     trick won't work with ZSX.
   - During Zmodem, Ymodem and SEAlink receive of a specific file, ZSX refuses
     additional files to prevent existing files from being overwritten.


  Running ZSX
  ===========
  To run ZSX, type ZSX followed by one or more of these options:
  NOTE: Options are CaSe SeNsItIvE!!!!

    port N      communications port to be used. N Can be 1....16, depending
                on the type of FOSSIL driver used. Defaults to COM1.
                The OS/2 version (ZSX2) can take either the absolute port
                number (1.....16) or can be passed the com port's filehandle
                from the parent process via the 'handle' option.

|   handle N    Handle of the com port to be used. Under OS/2, this handle is
|               passed by the parent (calling) program. ZSX2 inherits all port
|               characteristics set by the parent (e.g. TE/2, Maximus).
|               For stand-alone operation, you may specify a real port number
|               via the 'port' option. Either 'handle' or 'port' can be given,
|               NOT both.

|   speed N     Modem-to-PC baudrate. Valid speeds are: 300, 1200, 2400, 4800,
|               9600, 19200 and 38400 bps. This is either the true line speed
|               or the fixed speed between your modem and computer.
|               If a non standard baudrate (7200, 12000, 14400, or 16800) is
|               passed as speed parameter, it is ignored. The FOSSIL settings
|               are left tas they are. and the speed value will only be used
|               to calculate estimated transfer times and transfer efficiency.
|               This allows you to use the "actual connect rate" feature of
|               your modem is used
|               Telebit modems is used (connect value of 7200, 12000, 14400,
|               16800 or 19200 bps), ZSX will also leave the FOSSIL settings
|               as they are.
|               If NO speed is given, ZSX will leave the FOSSIL settings as
|               they are.

    line N      Actual modem-to-modem connect rate. If a fixed PC-to-modem
                baudrate is used (i.e. the baudrate of the FOSSIL is locked),
                the LINE parameter causes ZSX to give correct results for
                estimated transfer time and throughput. If not given, LINE
                takes the same value as SPEED.
                NOTE: You must specify a value for either SPEED or LINE!

|   b           Shutup bell at end of transfers. The bell is only active in
|               ZSXW, the windowing version of ZSX.

    D           (upper case D) Drop DTR when carrier is lost. Some BBS
                programs act a little odd when an external protocol does not
                reset the modem on carrier loss.

    d           (lower case d) Disable carrier monitor. Comes in handy when
                sending files over a null-modem that isn't wired correclty.

    e           Escape all control characters for Zmodem. This slows down
                transfer by up to 50%, but it allows Zmodem transfer over
                non-transparent networks.

    f           Relaxed ACK/NAK timing. ZSX will be forgiving about Xmodem,
                Ymodem and SEAlink timing. Usefull if transferring files over
                slow network or via satellite links.

    L N         Length override for Zmodem subpackets (N = 32.....1024).

    o           Run SEAlink in Overdrive (ackless) mode. The fastest method
                of transferring files over half-duplex mode ARQ links like
                V.29, HST or PEP.

    q           Quiet mode. Do not send closing notice at end of transfer.

|   w N         SEAlink window size (N = 1....128). Some people believe big
|               buffers is everything. If you have set an 8 KB xmit buffer
|               in your FOSSIL driver, try this option. ZSX allows up to 128
|               blocks "run ahead" with SEAlink send. A 128 block window size
|               keeps the FOSSIL transmit buffer filled as much as possible.
|               If you use x00 under DESQView, set the xmit buffer to 8192
|               bytes and set a 64 block window. This may improve SEAlink
|               performance JUST A TINY BIT at 9600 bps and higher.
|               Default value for SEAlink window size is calculated by ZSX via
|               the formula "linespeed/400". So at 1200 bps the window size is
|               3 blocks, at 9600 bps ZSX uses 24 blocks SEAlink window size.

    y           Allow receive to overwrite existing files.

|   Z           Use Zmodem RLE compression. ZSX automatically detects when it
|               is sending already compressed ARC, ARJ, DWC, GIF, LZH, PAK,
|               ZIP and ZOO files and ignores this command line switch.

    log         Filename to log succesful or failed transfers to. The logfile
                is compatible with DSZ's log file. ZSX will recognize the
                "DSZLOG=" environment variable.

    list        Filename where the names and sizes of received files are stored
                when receiving multiple files. This file can later used by the
                BBS program to prompt the user to enter the descriptions for
                the uploaded files.

    cmd         sz = Zmodem send file(s)
                ss = SEAlink send file(s)
                sb = Ymodem-Batch (True-Ymodem) send file(s)
                sy = Ymodem (Xmodem-1K) send file
                sg = Ymodem-G send file
                sx = Xmodem send file
                rz = Zmodem receive file(s)
                rs = SEAlink receive file(s)
                rb = Ymodem-Batch (True-Ymodem) receive file(s)
                ry = Ymodem (Xmodem-1K) receive file
                rg = Ymodem-G receive file
                rx = Xmodem receive file

    file        filename to be send/received (may include wildcards).

    @file       Name of the response file that lists all files to be send in
                one batch.

| ENVIRONMENT SETTINGS
| ====================
| The environment variable DSZLOG is recognized by ZSX. If it is set, ZSX will
| write a DSZ/GSZ compatible logfile.
| Under OS/2, you may set the size of the transmit and receive buffers used
| by ZSX/2 via the RBUF and TBUF environment variables. ZSX/2 uses transmit
| and receive buffers of a maximum of 4096 bytes. The buffers can be made
| smaller by setting the environment variables TXBUF=xxxx (for the transmit
| buffer) and RBUF=xxxx (for the receive buffer), where xxxx is a multiple
| of 2.

  SOME EXAMPLES
  =============
  ZSX port 1 speed 2400 Z rz C:\MYFILES\AAA.BBB
   receive Zmodem/Compressed file AAA.BBB to subdir C:\MYFILES via port 1
   at 2400 bps Only AAA.BBB will be received, additional file(s) will be
   refused.

  ZSX port 1 speed 9600 o ss @FIL.LST
   send Sealink-Overdrive files listed in FIL.LST via port 1 at 9600 bps

  ZSX port 1 line 1200 w 32 o ss @FIL.LST
   send Sealink-Overdrive files listed in FIL.LST via port 1. Leave the port
   at the current baudrate, but use actual linerate of 1200 bps to calculate
   ETA and efficiency. Set SEAlink run-ahead to 32 blocks.

  ZSX port 2 speed 9600 rb C:\FILES\
   receive Ymodem-Batch via port 2 at 9600 bps. Received file(s) will be
   written to subdir C:\FILES\

  ZSX port 8 speed 300 rx C:\FILES\FILE.NEW
   receive Xmodem FILE.NEW into subdir C:\FILES\ via port 8 at 300 bps

  ZSX port 5 speed 38400 list UPLOADED.LST d y rz C:\FILES\
   receive Zmodem via port 5 at 38400 bps. Omit carrier check. Received
   file(s) will be written to subdir C:\FILES\ and existing file(s) will
   be overwritten. Names and filesizes of received files will be written
   to list-file UPLOADED.LST.

  ZSX port 2 speed 19200 line 2400 o sg *.*
   send all files in the current directory using Ymodem-G via port 2. The
   modem to PC baudrate is 19200 bps, but the actual linerate of 2400 bps
   will be used for estimated transfer time and throughput calculations.

  ZSX port 1 speed 2400 f sx C:\FILES\*.*
   Send all files in the current directory using Xmodem via port 2 at 2400 bps.
   Because Xmodem and Ymodem (rather, Xmodem-1K) are not batch protocols, ZSX
   will send the name of the file about to be sent as a readable string to the
   receiver's end, right before the file is transmitted.
   Use relaxed ACK/NACK timing.

  Notice: ZSX reports the relative throughput at the end of the transfer,
  using either the Modem to PC baudrate or (if specified) the actual modem
  to modem line rate.
  Contrary to other popular transfer utiltities, ZSX reports the ACTUAL
  efficiency, including the protocol's overhead (init handshake, header
  block transfer and EOF handshake). Thus the relative througput reported
  will be slightly less (but more honest) when compared to other protocol
  drivers.
  Because the granularity of the throughput timer is 1 second, transferring
  small files (i.e. transfers that take less then about 30 seconds) may
  report an efficiency of over 100% or an efficiency that seems way to low.


  COPYRIGHTS AND SUCH
  ===================
  Apart from the rights on those parts of the code by Omen Tech and System
  Enhancement Associates, this program is free of idiosyncratic license
  requirements. You may use this program in a non-commercial environment in
  whatever way you like. You may use it as a doorstop or feed it to your cat.

  Some product names mentioned in this document may be registered trademarks
  of their respective owners.

  Use in a commercial environment may require you to enter a license agreement
  with either Omen Tech or System Enhancement Associates. I don't want to get
  involved in all sorts of legal discussions. Ask them and don't bug me.

  However, regisation of this product is required! Simply register by
  sending a postcard to:
    J.R. Terpstra
    P.O.Box 66
    1462 ZH  Beemster
    The Netherlands

  Registration won't buy you anything and you're not entitled to anything
  special. I just happen to like postcards :-)


| RELEASE NOTES
| =============
| January 24, 1994 - v3.10
| Fixed line noise filter in Zmodem handshake routines. The filter was too
| agressive and "lesser" implementations of Zmodem would fail to handshake
| properly with ZSX.
| Fixed some cosmetics in ZSXW.
| ZSXW is now fully (S)VGA aware and will adjust its scrreen output to the
| number of rows and coloms of the current video mode (80x25 thru 132x50).
| Recompiled all ZSX flavours with 80286 instructions. You need at least a
| 80286 equipped PC to use ZSX 3.10 (and later).

  December 24, 1993 - v3.01
  Cosmetic fix in the log file

  November 16, 1993 - v3.00
  There are now 3 flavors of ZSX:
   ZSX.EXE      - straight DOS executable
   ZSXW.EXE     - DOS executable with windowing user interface
   ZSX2.EXE     - 16 bit OS/2 executable
  Improved SEAlink and Zmodem performance by 15..20%
  Fixed some cosmetics and some minor bugs.

  November 26, 1991 - v2.40
  Fixed problem with SEAlink EOT/EOF handshake.
  Fixed receiver CRC recovery problem at speeds above 9600 bps.
  Receiver timing now more forgiving.

  November 21, 1991 - v2.32
  Fixed problem with garbled SEAlink blocknumbers that would make SEAlink
  transfers go in an endless NAK loop.
  Fixed initial ACK/NAK handshake for Sealink and Ymodem.

  November 19, 1991 - v2.31
  Fixed problem in receive CRC routines (it turns out that Microsoft's
  optimizing C compiler doesn't always "optimize" :-(

  November 17, 1991 - v2.30
  Fixed EOF handshake in Ymodem-Batch and Ymodem-G.
  Receivers preference for Xmodem-CRC or Xmodem-Checksum now automatically
  detected properly.
  Fixed Xmitter timeout problem when sending at 300 or 1200 bps.

  Oktober 9, 1991 - v2.21  **BETA**
  Added QUIET option to suppress closing banner at end of transfer.
  Added variable window size option for SEAlink send.
  Fixed bug in automatic detection of SEALink Overdrive/non-Overdrive receive.
  Fixed bug in relaxed ACK/NACK timing.

  September 27, 1991 - v2.20  **BETA**
  Changed the low level XMIT routines. SEAlink/Overdrive and Zmodem now
  run at an efficinecy of over 95%, even at 38400 bps.
  ZSX now returns DOS ERRORLEVEL 0 if at least 1 file was transferred
  succesfully, or ERRORLEVEL=1 if the transfer was aborted or carrier was
  lost during transfer.

  July 27th, 1991 - v2.10
  I rather not talk about that, since v 2.10 was severely brain damaged....

  June 24, 1991 - v2.01
  Fixed a minor bug in carrier detect of Zmodem routines

  June 16, 1990 - v2.00
  Added Zmodem/Compressed (RLE compression) and Zmodem variable headers.
  Changed all CRC routines to assembler.
  Changed logging, ZSX now writes a DSZ style logfile.
  Bugs fixed:
  - SEAlink/Overdrive timeout problem.
  - Zmodem receive failure on last block.

  December 1, 1990 - v1.70
  After several beta-test releases, version 1.70 is now released to the
  general public. The documentation is a bit sparse and the program needs
  some minor cosmetic fixes, but the program is functional.


  KUDOS
  =====
  ZSX was based on (and contains parts of) Chuck Forsberg's Zmodem routines
  and SEAlink routines by Thom Henderson. Some of the ideas in this program
  were blatantly stolen from Opus' Zmodem download driver and BinkleyTerm.
  You have to thank the original authors for whatever quality is present in
  this program. I merely glued the existing pieces together as a learning
  project and to sink my teeth in some C code.

  Many thanks to Doug Azzarito for scrutinizing the code. Also my thanks to
  Heiko Rommelman for sending me the Proficient C book, which was the main
  reason for me to start programming in C. Though my wife didn't understand
  why I wanted to learn yet another programming language, I think it was
  worth doing it.....


              It is not :-) nor :-( nor ;-)
              It is C:\>


                                                <JT>
                                        Fidonet:  2:280/216.0
                                        OS2NET:   81:431/1.0
                                        internet: dutchman@vnet.ibm.com
                                        X.400:    nlibmggm@ibmmail


