Contents
--------

- Smodem protocol overview
- Multiplexed Serial Link Protocol (MSLP)
- Command line options
- Error levels
- Error messages
- Keyboard
- Menu options


Smodem protocol overview
------------------------

Smodem is a new generation file transfer protocol. Unlike older protocols,
like Zmodem, it has a separate low level multiplexed transfer layer (MSLP)
and a high level file transfer layer. This new design simplifies protocol
design and will give a maximum efficiency of as high as 99,5%.

Multiplexing has made it possible to send one or more files in one
continuous stream without any breaks between files. This will boost
multiple file transfers dramatically.

Multiplexing has also made it possible to add a full screen ANSI-BBS
terminal emulator with a local full featured line editor and colored
back scroll buffer of unlimited size to Smodem. Locally buffered terminal 
emulation allows you to chat during full speed bidirectional file transfers.

The protocol has a symmetrical nature. You can connect Smodem with itself
by looping transmitted characters back to the receiver. There is no reason
to limit transfers in one direction. Smodem will transfer files in both
directions at the same time without noticeable performance loss.

Smodem detects DESQview and DPMI (Windows, OS/2) and will free all unused
processor capacity to the host system.

Smodem is *totally* written in the C language and compiled with Microsoft
Visual C++ v1.0 compiler using full optimizations for the i286 CPU. It
needs over 200KB free memory to function properly and more if you want
to shell from Smodem. There is no magical multitasking to continue file
transfer if you drop to DOS!


Multiplexed Serial Link Protocol (MSLP)
---------------------------------------

MSLP has the capability to manage 32 independent channels simultaneously.
Every single channel uses a traditional two phase ack/nak type subprotocol.
Maximum efficiency is achieved by using multiple parallel channels
simultaneously to keep the transmitter busy.

Maximum packet size floats between 16 to 1024 bytes. Transfer errors will
reduce packet size depending on error frequency. One important detail is,
that MSLP needs to resend only failed packets. The transmitter window size
(total size of transmitted packets which have not been acknowledged) can be
limited to get faster response.

The packet frame contains one byte for channel number and two bytes
for a 16-bit CCITT(ITU)-CRC. (Same algorithm, which is used in error
correcting modems.) Acknowledgements and enquiries will be included
in the packet frame when needed.

Packet separators contain two bytes. If those two bytes are found in
transferred data, one byte is inserted for capsulation. The possibility
to find those separator bytes in random data is so small, that it will
not affect protocol efficiency like old style one byte separators do.

Maximum efficiency in one-direction error free transfers will be:

       max packetsize           1024
--------------------------- = -------- = 0.9951 = 99.5%
max packetsize + frame size   1024 + 5

If packet size is limited to 256 bytes, the efficiency will be 98.1% and
still better than original Zmodem!

If the data link can not transfer some special characters, then the
traditional character encapsulation mode could be activated. This mode
encapsulates selected character codes, which inflicts performance about
0.4% + additional 0.4% for every selected code.

If the data link is limited to 7 data bits, then a special bit collection
mode could be activated. The highest bits for every seven bytes are
collected to one byte. This collection inflicts performance about 12.4%
and doubles character encapsulation possibility.

Maximum transfer line correction mode of MSLP uses five characters to
transmit four characters using only printable 7-bit ASCII codes. This
mode should work on almost every non transparent transmission line.
Maximum correction mode inflicts performance 20%. It should be used only
for test purposes, if default settings do not work, or, if limitations
of transfer line are unknown or too complex to handle with separate
adjustments.


Command line options
--------------------

/-

Disables MSLP initialization messages. This option prevents user
information to scroll out from screen in some situations. See also
/l and /L options.

/+

Displays transfer statistics screen. You can add this option for your
convenience. Without this option you can still open statistics screen
with F2 key.

/0        

Special option (rs-port close). Try this if program hangs when you 
exit from Smodem.

/1        

Special option (16550 buffer). Try this if protocol hangs or you get
receiving errors with 16550 type uart.

/@:setupfile	(Pro version only)

Reads setup parameters from specified file. If your parameters doesn't
fit to the command line limits (128 characters) you can use smodem 
environment setting to expand this limit or you can use external file
with this option.

/a:addr

Uses special uart chip address (100..3ff). You need this parameter if
you are not using one of the standard communication ports COM1-COM4.
See also /p: and /i: options.

/A:file		(Pro version only)

Selects ASCII capture file name. Normally terminal screen is captured
in binary format for colored backscroll. This option enables capturing
to file, which you can read using a standard ASCII browser.

/b

Uses black and white colors. This is normally detected automatically.
Use this when you use monocrome display with color adaptor. See also
/B option.

/B

Forces to use colors. This is normally detected automatically.
Use this when you use computer with color monitor to control computer
with black and white video adapter.

/c

Disables carrier detection. You need this option if you are dialing out
from terminal mode (/t) or if your modem does not inform carrier status
properly. Some modems drop the carrier signal occasionally. Use this
option if you get erraneous "Carrier lost" messages.

/C

Enables maximum corrections for a non transparent transfer line. This
option is only for test purposes. Use it only if you have problems to
initiate file transfer or transfer hangs. If this option removes your
problem, then it is possible to configure Smodem to work properly.
See also /I, /I:, /O, /O:, /h and /H options.

/d

Downloads subsequent files and selects default download path. After /d 
parameter you can enter download directory paths or file names or a list 
of them with at (@) sign. You have to use this option for file names only 
when you need to force received filename different than original filename 
and limit the number of received files. Only first download directory is 
used to store downloaded files but every directory is scanned for 
duplicates before accepting new files. See also /U, /u, /f, /o, /j, /w, 
/R, /N, /x and /X options.

/D

Download startup with download trigger string ^XSMODEM^Y. This option
allows user to start uploading manually if the BBS software can not 
request files automatically from the user. It is also possible to
activate upload selection in terminal program with this alternate trigger 
string. Default trigger string is ^XSMODEM^X. ^X is ASCII character 18h 
and the alternate character ^Y is 19h. See also /F, /U, /u and /d options.

/e:sec

Exits after inactivity (0..600 sec) when all file transfers done. This
option is useful in BBS environment to stop chatting when file transfer
is done and user is not chatting any more. There is a fixed delay of 120 
seconds at the beginning of transfer to allow user to select files to 
upload. See also /E: and /T: options.

/E:sec

Exits after delay (0..600 sec) when all file transfers done. This option
is useful in BBS environment to stop chatting when file transfer is done.
There is a fixed delay of 120 seconds at the beginning of transfer to
allow user to select files to upload. See also /e: and /T: options.

/f			(Pro version only)

Frees up/download path restrictions. If you specify this option, then
user from other end of connection can download from and upload into any
directory in your computer. Use with care! You have to use this option
if you want to select separate download directory from download dialog.

/F

Removes control codes from startup trigger string. Some transmission 
lines can not handle ^X and ^Y codes, which are used in trigger string 
of Smodem. With this option no control codes are sent to the line. It 
is also necessary to add /C or /O: option to prevent sending of ^X codes 
in transmitted data. See also /D, /C and /O: options.

/g

Disables default terminal log file. Default name is smodem.$$$.
Log is used for coloured back scroll buffer. This log is not in ASCII 
format. You can not read it with editor. See also /g: and /G options.

/g:file

Selects terminal log file name. This option changes default log file
name SMODEM.$$$. You can also specify different drive or directory for
the log file. See also /G and /g options.

/G

Removes terminal log file after use. Normally log file is saved for
later use. With this option log file will be removed after use.
See also /g and /g: options.

/h

Disables rts/cts flow control. Normally rts/cts handshakes are used
to control modem buffering. Use this option if your modem does not
support this kind of action. See also /H and /n options.

/H

Enables xon/xoff flow control. Use this option only if your modem
does not support rts/cts handshakes because it reduces maximum transfer
speed. See also /h option.

/i:irq

Uses special uart chip irq (2..15). You need this parameter if your
communication port irq is changed from default setting or you are
using special uart chip address. See also /p: and /a: options.

/I:hex[-hex]|S|X	(Pro version only)

Encapsulates specified input characters. You can enter only one character
code or a range on codes. There are two special codes available. Code S
will use a 7-bit transmission line and code X will use maximum 
encapsulation mode. See also /O: and /C options.

/j

Disables auto download. This option prevents downloads totally.
It should be used in BBS systems which do not support bidirectional
file transfers when downloading from BBS system. See also /r option.

/J			(Group chat version only)

Adds user name into transfer log. This option is useful when creating
special doors for user supported file transfers. All transfers can be
logged into same log file with the user name.

/k

Disables wild cards. This option can be used in BBS systems to prevent
users from downloading files from upload directory without specifying
full filename. See also /j option.

/l:lines

Selects number of rows (20-50) from bottom of the screen. If your BBS
system displays user information at the top of the screen, then you
can reserve part of the screen from this information. See also /L: option.

/L:lines

Selects number of rows (20-50) from top of the screen. If your BBS
system displays user information at the bottom of the screen, then you
can reserve part of the screen from this information. See also /l: option.

/m

Disables error messages. In BBS system there is no need to show error
messages locally. This option hides them. See also /q and /q: options.

/M:file		(Pro version only)

Enables message file display. This option is useful when you build a 
host system using Smodem. Smodem displays the contents of specified
file to the remote user. You can create a new message file before Smodem
is started and during external command execution. See also /S: and /@: 
options.

/n

Disables slow RTS handshakes from disk operations. This option may give
slightly better performance or it can ruin the whole thing depending
on your hardware performance. Some modems need this option to work
properly. See also /h option.

/N			(Group chat version only)

Disables "Press enter to join group chat." prompt. This option is
available only in the Group chat version for PCBoard.

/o

Allows to overwrite files. Without this option you can not download
files which already exists on your disk. You can still resume aborted
downloads. See also /j and /w options.

/O:hex[-hex]|S|X	(Pro version only)

Encapsulates specified output characters. You can enter only one 
character code or a range on codes. There are two special codes
available: Code S will use 7-bit transmission line and code X will use 
maximum encapsulation mode. See also /I:, /C and /F options.

/p:port

Selects com port number (1..4). This setting is mandatory. Without this 
or corresponding setting, you will only get internal help information.
See also /a: and /i: options.

/P:prompt

Displays user defined prompt. With this option you can enter 1-39
characters long prompt to your local line editor.

/q

Quiets alarm bell. This option prevents you to hear warning message
beeps and yelling noise. You can change the quiet status from menu.
See also /q: and /m options.

/q:hh-hh		(Pro version only)

Disables alarm bell at specified hours. This option lets you to hear 
warning message beeps and yelling noise during selected time range. 
You can still change the quiet status from menu. See also /q and /m 
options.

/r

Enables auto upload. If you specify this option, then user from other
end of connection can download files from your computer. See also /f
option.

/R

Allows to renumber files. Normally existing files are overwritten or
transfer is aborted. When this option is enabled, new files are
renumbered to prevent conflicts. For example file ABC.DEF is renamed
to ABC.DE0 and next ABC.DEF is renamed to ABC.DE1. See also /R option.

/s:speed

Changes dte baud rate (50..115200) using 8,N,1 configuration. If this
parameter is omitted, then baud rate and line parameters are reserved
on their current values.

/S:file		(Pro version only)

Enables external command shell. This option is useful when you build a 
host system using Smodem. External command shell is a program or batch file,
which interpretes commands entered by the remote user. See also /M: and /@: 
options.

/t			(Pro version only)

Enables terminal mode. In this mode Smodem does not send initialization
strings until it receives one. You may need ansi.sys or some replacement
for full ANSI support.

/T:min		(Pro Version only)

Exits after selected time. Normally users can stay unlimited time in 
transfer protocol. This option limits this time. See also /T option.

/T    		(Pro Version only)

Disables time limit while transferring. Normally time limit is checked 
during file transfers. This option allows to transfer longer than time 
limit but still prevents to stay chatting after such transfer.

/u

Uploads subsequent files and selects default upload path(s). After /u 
parameter you can enter upload directory paths or file names or a list 
of them with 'at' (@) sign. You can enter as many upload directories 
as you need. All upload directories will be scanned when uploading 
a file without pathname. See also /U, /d, /f, /k and /y options.

/U

Requests subsequent files and selects download path(s). After /U 
parameter you can enter download directory names, file names or list 
of directory or file names with at (@) sign. You have to use this 
option only for requesting files for download. Only first download 
directory is used to store downloaded files but every directory is 
scanned for duplicates before accepting new files. See also /d, /u, 
/f, /o, /j, /w, /R, /N, /x and /X options.

/v:mode

Changes default packet and transmitting window size. Possible values
are T(iny), S(mall), C(ompact), M(edium), L(arge) and H(uge) (default).
Larger values will give slightly better throughput. Smaller values will
give much faster terminal response.

/V

Disables virtual screen memory when used in DESQview. This option has
meaning only when used in DESQview environment. In some cases there are
problems to update display properly. If you can not change virtual 
display settings from DESQview, then you have to use this option to correct 
the problem.

/w

Disables resumed downloads. Normally file transfer will continue
if it has broken in some reason. This option can be used in BBS systems
to prevent users to resume uploads in some reason. See also /x option.

/W[:init]	(Pro version only)

Wait for carrier and drop dtr at exit. This option is useful when you
build a host system using Smodem. Using additional init string you can
dial out (ATDT<number>) or enable autoanswer (ATS0=1).

/x

Removes aborted downloads. This option can be used in BBS system which
does not support resumed uploading. See also /w and /X options.

/X

Enables aborted download entries to transfer log file. This option
is added to get more specified information about file transfers. Normally,
when upload is aborted, the BBS system will not be informed to remove
aborted file. See also /x, /w and /z: options.

/y

Removes successfully uploaded files. This option can be used in some
special situations to keep upload directory automatically clean.

/z:file

Enables file transfer log file. Created log file is DSZLOG compatible.
File transfer information is appended to the end of this file. If there
is no /z: parameter, then DSZLOG environment string will be used.
See also /X option.


Error messges
-------------

Can not open file transfer log file: nnn

        Transfer log is not available for some reason.
        Check path and directory rights.

Carrier lost.

        Carrier signal dropped from modem. Use /c option to disable
        carrier check.

CTS signal is not ready.

        Modem is not ready for communication. Use /h to disable CTS.

Download aborted

        Remote station can not receive file for some reason.

Download request denied

        Attempt to download files when it is not allowed.

Duplicate file ignored

        Same file has already queued for upload.

Error initializing rs-port.

        Specified rs-port does not exist. Try /a and /i options to correct.

Fatal internal error

        Internal protocol check error.

File already exist

        Uploaded file already exists and is not allowed to overwrite.

File already transferred

        Uploaded file has already been transferred.

File not found: nnn

        Up-/download list file not found. Check path and command syntax.

File open error

        Can not open file for some reason.

File read error

        Disk read error while sending file.

File size error

        File size has changed unexpectedly during transfer.

File write error

        Disk write error while receiving file.

Incompatible program version.

        Remote station has a different program version.

Invalid parameter: nnn

        Specified option value is out of range. Check available range.

Initialization cancelled.

        User interrupted initialization phase.

Initialization interrupted.

        Remote station interrupted initialization phase.

MSLP data link error.

        Protocol has lost synchronisation and terminated.

MSLP data link failure.

        Excessive errors in transmit line detected. Try /C option 
        for maximum transmit line corrections.

MSLP data link interrupted.

        Remote station interrupted link.

MSLP data link terminated.

        Link terminated by remote station.

MSLP data link time-out.

        Remote station stopped responding. 

Waiting for MSLP termination... cancelled

        User interrupted termination phase.

Waiting for MSLP termination... time-out

        Remote station stopped responding at termination phase.

Out of memory.

        Not enough conventional memory to initialize protocol.

Requested file not found

        Requested file does not exist or wild cards have been disabled.

This test release is not valid!

        New version is available and this version is not supported.
        New versions are available from many sites.

Too many files to transfer

        Out of memory to queue more files to transfer.

Unknown option: nnn

        Used option is unknown. Check available options.

Upload aborted

        Remote station can not send file for some reason.

Upload request denied

        Attempt to upload files when it is not allowed.


Error levels
------------

Available error leves are:

	0 transfer completed
	1 download error
	2 upload error
	3 upload & download error
	4 (or greater) initialization error


Keyboard
--------

Use esc to hide popup windows and dialogs. Use cursor keys to edit
your entry or to move back scroll window position. You can open menu 
by pressing Alt+letter or F10.


Menu options
------------

File/About          Shows information about program version.
File/Tools          Opens file manager window.
File/Download       Displays download selection dialog.
File/Upload         Displays upload selection dialog.
File/Edit Batch		Displays selected files.
File/Yell           Sends calling noise to other end of connect.
File/Erase Log      Erases backscroll buffer file contents.
File/DOS Shell      Drops to dos temporarily.
File/Exit           Aborts all file transfers and terminates protocol.
Set/Packet size     Selects one of the possible packet/window sizes.
Set/Exit when done  Terminates protocol after file transfer if checked.
Set/Command mode    Enabled or disables external command processing.
Set/Quiet           Quiets alarm sounds if checked.
Set/Clear screen    Clears terminal screen.
View/Statistics     Displays transfer statistics.
View/Log File       Displays back scroll buffer.
