Category : Recently Uploaded Files
Archive   : RBCOM345.ZIP
Filename : RBCOMM.DOC

 
Output of file : RBCOMM.DOC contained in archive : RBCOM345.ZIP
RBcomm v3.45 Copyright (c) 1989-1995 Ralf Brown All Rights Reserved

You may redistribute this program provided that you provide unmodified
copies of all files, and do not charge any fee for making the copy.

--------------------------------------------------------------------------


RBcomm is a lean and mean comm program which will run in 47K without
file transfer capability or 65K with file transfer capability. Since it
is so lean, you will not get a lot of the fancy features of other comm
programs, though there are plenty of features to let you get your work
done (I've been using it exclusively for over five years, and have
added features as I've found that I could be more productive with them
than without).

Features:
small (runs in as little as 47K [65K with DSZ, 66K with Puma/MPt])
DESQview-aware
pop-up menus
'type' a file to the remote system, optionally expanding blank lines
seamless file transfer using DSZ, PCZ, or Puma/MPt
Zmodem autodownload (others easily added)
shell to DOS, using well under 1K while shelled
keyboard reassignment, powerful keystroke macros, "DOORWAY" mode
250-number dialing directory
ANSI/VT102, VT52, and AVATAR level 0 terminal emulations
[UnixWindows and AVATAR level 1 partially implemented]
ANSI music
132-column support
supports the 16550A UART's FIFOs and speeds to 115,200 bps
(a 4.77MHz 8088 can handle 19200)
scrollback buffer

Registration:
Continued use of DSZ requires registration with Omen Technology, Inc.
See the DSZ documentation for details.

Continued use of Puma/MPt requires registration with Matthew Thomas.
See the Puma or MPt documentation for details.

If you like RBcomm, send me a picture postcard of some sight in your
area. If you don't like RBcomm, feel free to send me a postcard
anyway, telling me what you don't like. I just might change the
thing you don't like in the next release.

Support:
None (after all, I'm not getting any money for this). I will try to
fix bugs as time allows. When reporting a suspected bug, please
include as much detail as possible (such as a verbose log if it
involves the terminal emulation).

DISCLAIMER: This software is distributed AS IS and without any express
or implied warranties. The author disclaims all responsibility
for any damages which might be incurred as the result of using
or misusing* the program. Although widely used by many people,
the software is not guaranteed to function on any system other
than the author's own.
*RBcomm has the ability to overwrite or delete files, which can
result in data loss if used indiscriminately.


Ralf Brown [valid until November 1, 1995]
813 Copeland Way, Suite 26
Pittsburgh, PA 15232

Internet: [email protected]
UUCP: {harvard,ucbvax,uunet}!cs.cmu.edu!ralf
BIT: ralf%cs.cmu.edu@cmuccvma
FIDO: Ralf Brown 1:129/26.1

Files in the RBcomm distribution archive:
RBCOMM.DOC this file
COMM.COM the RBcomm main program
RBCONFIG.COM the configuration program
MACRO.COM the keyboard macro compiler
DVPWIDTH.COM program to set maximum width in DESQview .DVP files
R?-PIF.DVP DESQview program information files
*.MAC keyboard macro definition sources
*.HLP help screens for corresponding macro files
TERMCAP Unix "termcap" entry for RBcomm

Availability:
The newest version is always available on:
SoundingBoard 1:129/26 File Requests
(412)621-4604
24 hours, USR HST 14.4

FTP.CS.CMU.EDU [128.2.222.173]
directory /afs/cs.cmu.edu/user/ralf/pub
You must change directly to this directory with a single
command due to the way our anonymous FTP works.

New versions will also be available here within a few days of release:
Rosedale Dataline
(301)866-4554
24 hours, USR HST 9600
TP Board

Fidonet nodes participating in DVNet

SimTel mirrors such as OAK.OAKLAND.EDU or WUARCHIVE.WUSTL.EDU
directory /SimTel/msdos/modem

System Requirements:
IBM PC or close compatible
at least 47K free memory (65K for file transfers)
one or more serial ports
DOS 2.0 or higher
48-128K disk space or EMS or XMS memory for swapping, depending
on configuration

-------------------------------------------------------------------------------
Installation
------------

Before you use RBcomm for the first time, you need to tell it where to find
its support files and how to talk to the modem. To do so, copy the RBcomm
files to the directory in which you wish to install them, change to that
directory, and type

RBCONFIG CONFIG COMM.COM

(if COMM.COM is not in the current directory, use the full path, i.e.
C:\COMM\COMM.COM, or RBCONFIG will not be able to find it)

Please do not use your original copy. If you forget to run RBCONFIG, you
will be told to do so when you attempt to run COMM.COM.

You will now be asked (via a menu) to fill in several groups of information.
Note that you may use either forward slashes ('/') or backward slashes
('\') to separate directories in a pathname.

Press 'D' to set the directories and extensions to use.
RBcomm dir: where the keyboard macro files and dialing directory are stored
Swap directory: where to store the swap file when running DSZ or COMMAND.COM
and neither EMS nor XMS is available. A RAMdisk is ideal for
storing the swap file, which will be about 64K (the exact size
depends on your setup).
Use XMS if available: if set to N, RBcomm will always swap to disk in the
directory specified by the previous item, or EMS if enabled.
If set to Y (default), RBcomm will swap to XMS memory if there
is enough available.
Use EMS if available: if set to N, RBcomm will always swap to either XMS
(if available) or to disk. If set to Y (default), RBcomm will
swap to EMS memory if XMS is unavailable and there is enough
free EMS.
Macro file extension: default extension to apply to keyboard macro files
Default macro file: keyboard macro file to load on startup and hangup
if this file does not exist, RBcomm will use a built-in set
of default key bindings

Press 'S' to select the serial port to use. You may setup
configurations for "COM1" through "COM4", as well as the default port to
use when not otherwise indicated in the dialing directory. The values
given for "COM3" and "COM4" need not bear any relationship to the
numbering of the actual serial ports in your system (you could, for
example, set them up to be the same as "COM1" except for the length of
the break signal). RBCOMM does check that "COM1" and "COM2" exist
according to the BIOS data area, however, to avoid running in a DESQview
window which has incorrect settings for supporting serial
communications. Break length specifies the length of the signal that is
sent when you give the break command (default Alt-B) in multiples of the
standard clock tick of 55ms. You may specify a separate setup string
for each port. The setup string needs to ensure that the modem echos
back any commands it is sent, and asserts carrier detect only while
actually connected with another modem (for Hayes-compatible "AT" command
sets, "E1&C1").

Press 'M' to define the modem setup. In this section, you need to enter
several strings to be sent to the modem, and the strings the modem will
return to RBcomm. Note that you may enter control characters such as ^M
(carriage return) by pressing control-Q followed immediately by the
desired control character. You can enter a DEL (ASCII 127) by pressing
Alt-D. Since most modems nowadays use the Hayes 'AT' command set, the
only entry you are likely to change is "dial prefix", which will be
"ATDT" for touch-tone dialing or "ATDP" for pulse dialing. Note that
the responses should be set to the shortest substring that uniquely
identifies the response.

Press 'P' to setup dialing parameters. You may specify the name of the
dialing directory, how long to try before declaring a time-out, and how long
to wait before trying again.

Press 'F' to set the commands and parameters to execute for the various
file transfer protocols. You may embed replaceable parameters
introduced by a percent sign into the command strings--see the EXEC
macro command for details. An additional replacement of %F is available
which expands to the name(s) of the file(s) to transfer. Note that the
default "portx" will cause DSZ to report the port as COM9, but it will
still use the correct serial port. You need to use "portx" if you will
be using more than one serial port.

Press 'C' to set the colors you want RBcomm to use. You may select the
default and "underlined" colors, as well as the colors to use on menus
and in the scrollback viewer.

Press 'V' to determine whether 132-column mode should be enabled, whether
to start in 132- or 80-column mode, and the register values needed to set
132-column mode. When running under DESQview, RBcomm can tell DESQview to
set the virtual screen size to 132 columns if you specify zero for AX.
DESQview will then display as much as it can at one time; this is useful
if you need a 132-column display but do not have a video board which
supports 132 columns.

Press 'T' to adjust a number of toggles. Many of these may also be changed
from within RBcomm.
"Local echo" allows you to turn on half-duplex operation by default.
"Verbose" sets whether to include terminal control sequences in a log file.
"Strip parity bit" specifies whether the high bit should be stripped from
all incoming characters, even when parity is set to None.
"Visual bell" specifies whether to flash the screen instead of sounding a
beep when a ^G is received (internally-generated beeps always use sound).
"Should backspace send delete" specifies whether the values sent by
backspace and control-backspace should be exchanged.
"Check for enhanced keyboard" determines whether RBcomm will use the
enhanced keyboard BIOS calls if it thinks those calls exist. Some
systems incorrectly indicate support for those calls. Set this to
'N' if RBcomm appears to hang your system.
"May RBcomm to change NumLock" determines whether RBcomm will change the
state of the NumLock key when it receives the "keypad numeric mode" or
"keypad application mode" commands. Disabling the NumLock changes is
useful for laptop users without a separate number pad.
"Save screen" specifies whether the current screen is saved prior to
executing external programs (except for file transfers) and restored
afterwards. If the screen is saved, you will be asked to press a
key before the screen is restored.

Finally, press 'O' for miscellaneous options.
"Heap size" determines how much memory RBcomm allocates for macro files,
macro execution, and some of RBcomm's own processing. This must be
set to at least 800 bytes more than the size of the largest macro
(.RBM) file. A larger setting will not harm, but will needlessly
use more memory. Should you get an "out of memory" or "stack full"
error message, you will need to increase this value. When set to
zero, RBcomm will grab as much heap space as it can (about 24K).
"Receive buffer size" determines how much memory RBcomm allocates
for storing characters received from the serial port which it has
not yet been able to process. The default of 2048 is sufficient
for most uses; a larger buffer may provide somewhat better
performance at very high speeds on a slow machine, while a smaller
buffer saves some memory.
"Number of screens" specifies how many virtual terminals to allocate
space for. This will become useful for the UnixWindows protocol;
most users will want to set this value to 1. Keeping multiple
screens allows you to remember one or more screens of data and
return to them at a later time.
"Time between sends in idle mode" determines how often Idle mode (see
Alt-I) sends some characters to keep the connection alive when you
are not actively using RBcomm.
"String idle mode sends" specifies what characters to send to keep the
connection alive.
"Answerback message" allows you to specify the string which RBcomm will
send when it receives a ^E. The ANSWERBACK macro command can override
this setting.
"Default pace character" determines which character RBcomm will wait for
after sending each line of text from the file being typed to the
remote system. Setting this value to ^@ means that RBcomm will not
pause after each line. This setting may be changed while RBcomm is
running by using the PACECHAR macro command.
"Use EMS for scrollback" determines whether RBcomm will allocate 32K
of expanded memory (if available) for the pager and scrollback
buffers. If set to Y and at least 32K of EMS is available, RBcomm
will give you a 6K pager buffer and 26K scrollback buffer regardless
of the next two settings.
"Size of non-EMS pager buffer" determines how much memory RBcomm will
allocate for the file pager's buffer when EMS is not available or
has been disabled. Larger values can improve the pager's performance
on files with long lines, but values greater than 6-8K will not have
much of an effect unless you have an extremely large screen. Values
smaller than the number of characters on the screen will cause
significant slowdowns when viewing files or displaying a directory,
due to thrashing as RBcomm constantly re-reads data.
"Size of non-EMS scrollback buffer" determines how much memory RBcomm
will set aside for storing text received from the serial port. As
new text comes in, the oldest will be discarded. Whatever text is
in the scrollback buffer may be viewed with Alt-O.

On choosing "Quit" from the menu, you will be asked whether to save the
new configuration to disk. If you specify that you want to save the changes,
the executable on disk will be updated.

---------------------
DESQview Installation

---------------------

After performing the file copy and configuration described in the
previous section, you need to install RBcomm on the DESQview Open
Window menu. In DESQview, tap the Alt key to bring up the DESQview
menu, then press "O" for the Open Window menu, and "AP" to add a
program. Select "Other", then fill in the directory in which you've
placed the RBcomm files and press Enter. You will be given the choice
of RBcomm, RBcomm plus DSZ, and RBcomm 132col; select one or more and
press Enter. Now use "CP" from the Open Window menu to change the
paths and/or the keys for starting RBcomm.

The only difference between "RBcomm" and "RBcomm + DSZ" is that the
former allocates the minimum amount of memory for RBcomm to run (46K),
which is not enough to invoke DSZ, but does save 19K when you do not
need file transfer capability. Should RBcomm complain about
insufficient memory (the window exits almost instantly), decrease the
heap size on the "Other options" menu in RBCONFIG. If your environment
is particularly large, you may need to use Change a Program to increase
the window sizes by a K or two. With certain screen sizes, you may
also need to give RBcomm 1K of system memory (on the advanced options
screen).

To get a 132-column display under DESQview, configure RBcomm to use
132-column mode and then make a .DVP file using "Change a Program"
which has all fields except for "maximum width" set to the desired
values. Change a Program only allows 127 columns in the window, so
choose an arbitrary size smaller than that. After pressing Enter to
save the .DVP, run the included DVPWIDTH program to change the maximum
width to 132 columns, i.e.
DVPWIDTH 132 RZ-PIF.DVP
You must give the full name of the .DVP file, including the extension.
Note that Change a Program will force you to change the window's width
if you have set the width greater than 127 and run Change a Program
again.

If you do not wish to use the DVPWIDTH program, or your version of
DESQview experiences difficulties with a 132-column setting in the .DVP
file, RBcomm can still use 132-column windows through an alternate
method. For this alternative, you must give it enough "system memory"
to store the entire maximum-size screen. Whatever memory is used to
store the initial screen size set under "Window Position" is then
wasted, so that size should be set fairly small (such as 15 columns by
the desired number of rows). If you are not interested in the reason,
skip the rest of this paragraph. DV normally reuses the same section
of memory when resizing the virtual screen. However, resizing it
beyond the maximum defined by the .DVP causes an entire new buffer to
be allocated. Thus, minimizing the "maximum screen size" also
minimizes the DESQview overhead by reducing the size of the screen
buffer which gets discarded.

RBcomm is sufficiently DESQview-aware to ask DV for the size of the
screen. If you want a 120x60 screen, just set the maximum window size
to 120 columns and 60 rows. DESQview will display as much as it can on
your screen, but RBcomm will use the full size. If you have enabled
132-column mode with RBCONFIG, RBcomm will also switch to 132 columns
by the given number of rows when it receives the sequence "[?3h".

RBcomm refuses to load itself twice on the same serial port when
running under DESQview. However, when shelled to DOS, you can load
another copy in a different window, but make sure to exit the second
copy before returning from the DOS shell, or the first copy will abort.
The method RBcomm uses is compatible with ONLY1.SHP using the names
"COM1" through "COM8" (depending on the serial port), so you can also
keep RBcomm from conflicting with other programs that use a serial
port, such as BBS mailers.

Finally, RBcomm returns the rest of its time-slice to DV if it doesn't
need a full slice. This improves the performance of programs in other
windows, and makes supplemental programs such as TAME unnecessary (as
phrased by TAME's author, RBcomm is "DV-polite").

-----------------------------------------------------------------------------
Dialing Directory
-----------------

The dialing directory is a specially formatted data file (rather than a
plain text file) containing up to 250 entries. This data file may be
created and maintained with RBCONFIG (see Editing the Dialing Directory
below).

For the convenience of those using RBcomm version 3.31 or earlier, or
those wishing to distribute dialing entries for other RBcomm users,
RBCONFIG has the capability to compile a plain text file into an RBcomm
dialing directory. In the plain text file, each dialing entry consists
of two lines, looking like this, with no blank lines between entries:

Doctor's WOC Inn
14126214604|4800N81|B|OPUS|password|\\N2

The first line contains the description which will be used on the dialing
directory screen and when dialing. The second line contains six fields
separated by vertical bars. These fields are

1. number to dial (direct connection if empty)
2. modem parameters, containing in order
baud rate (110, 150, 300, 600, 1200, 2400, 4800, 9600, 19200, 38400,
57600, 115k)
parity (N for none, E for even, O for odd, S for space,
M for mark)
data bits (5, 6, 7 or 8)
stop bits (1 or 2)
handshake to use when receive buffer is full
(H for hardware RTS/CTS, X for software XON/XOFF)
(optional, default is hardware)
timed call flag
(if handshake present and the character after the handshake
is T, a short "bip" will sound about 50 seconds into each
minute after establishing a connection. Every five
minutes, the "bip" sounds twice)
serial port number
(if handshake is present, following either the handshake
character or the "T" timed call flag with a comma and
the number of the serial port will tell RBcomm to switch
to that port before dialing)
3. terminal emulation
A for ANSI with VT102 extensions
B for ANSI-BBS (same as ANSI, but clearing screen also homes cursor,
and character set switching is disabled)
V for VT52 with H19 extensions
4. keyboard macro file to load
5. password for this system (used by PASSWORD macro command). Display of
passwords in the dialing directory may be turned on or off with
RBCONFIG.
6. optional modem setup string, minus command lead-in defined by RBCONFIG
(may include vertical bars). In the example above, the \\N2 tells
my modem to use MNP error correction.

If the keyboard macro file field is non-empty, the specified file will
be loaded immediately upon successfully connecting with the remote
system. Since each entry in the dialing directory can specify an
independent set of keyboard macros, you can have a different set of
keyboard bindings for each system. If the macro file specifies a
binding for the ONLOAD "key", that macro will be executed immediately.
Further, if the macro file specifies a binding for the AUTO "key", that
macro will be executed immediately after the ONLOAD macro (if any).

The setup string may contain the following special sequences:
~ pause for half a second
\n send a line feed
\r send a carriage return
\f send a form feed
\t send a horizontal tab
\a send a ^G
\b send a backspace
\! send a break
\~ send a tilde
\\ send a backslash

Example modem parameters:
1200E71X default COM port, 1200 bps, even parity, seven data
bits, one stop bit, use Xon/Xoff handshake when
receive buffer fills up
19200N81HT,2 COM2, 19,200 bps, no parity, eight data bits, one
stop bit, use hardware handshake, and sound off
every minute

Compiling the Dialing Directory
-------------------------------

Once you have created a plain-text dialing file, you must compile it
into the binary form used by COMM.COM. The directory compiler is
invoked with
RBCONFIG DIAL [-C]
where is the name of the dialing directory to compile and
is a number from 1 to 4 specifying which serial port is the
default port when none is explicitly given in the file. Any extension
given with the filename is ignored; the text file always has the
extension .DIR and the compiled binary file has the extension .RBD.

If you want to add entries from a dialing file to the dialing directory
rather than creating a dialing directory from scratch, you can append
new entries to an existing directory with
RBCONFIG DIAL [-A]

Editing the Dialing Directory
-----------------------------

To interactively edit a dialing directory, use
RBCONFIG DIAL [-E]

You may wish to read the section on the format of a plain-text dialing
file for information on the various options, and the special characters
you may use in the initialization string.


-----------------------------------------------------------------------------
Environment Variables
---------------------

RBcomm uses the following variables in its environment:

COMSPEC specifies which program to load for Shell-to-DOS (Alt-D) and
Execute-Program (Alt-G).

RBCOMM specifies default commandline options (which may be overridden by
the commandline). See below for the valid options. Note that only
the first 160 bytes will be used due to internal space limitations.

SWAPDIR overrides the default swap directory, where RBcomm stores itself
when swapping to disk.

-----------------------------------------------------------------------------
Commandline Options
-------------------

RBcomm may be invoked with one or more options, described below. These
options are processed from left to right; if an option is present
multiple times, the rightmost instance will be the one in effect. The
options in the RBCOMM environment variable (if present) are processed
before the commandline, and thus are overridden by the commandline.
Options are not case-sensitive.

-B use BIOS calls to display characters received from the
serial port (aka 'port check writes'). RBcomm's own
menus and messages will still use direct screen writes.
This option is primarily for the convenience of people
using screen readers.

-Cn select COMn, where 'n' may be 1 to 4. This option
overrides the default set with RBCONFIG.

-Ddir set the RBcomm directory to 'dir'. This option overrides
the RBCONFIG default.

-Mfile set the default macro file to use whenever not connected
to a remote system. This option overrides the RBCONFIG
default. Only the first 8 characters are used.

-Nfile set the RBcomm dialing directory to 'file'. This option
overrides the RBCONFIG default; it replaces the RBCDIAL
environment variable used by prior releases. Only the
first 12 characters are used; if no extension is given,
it defaults to .RBD.

-Pparm force default parameters for the current serial port.
Instead of reading the port's parameters, RBcomm will
set them to the value specified here. 'parm' is in the
same format as used in the dialing directory, except
that the port number is not allowed. You may intersperse
-C and -P options to set forced parameters for more than
one port.

numlst a list of numbers to dial as if typed at the dialing
directory (see Alt-Q below) prompt. Each number must
be separated from the next by a comma. No blanks are
allowed, as they signal the end of an argument on the
command line.

-----------------------------------------------------------------------------
Memory Requirements
-------------------

RBcomm's memory usage is approximately

38.1K + heap size + receive buffer + screens + pager buffer
+ scrollback buffer

where
screens = number_of_screens * (max_size + 352)
max_size = greater of (2*rows*columns) for 80 and 132-column modes
pager buffer and scrollback buffer are both 0 if allocated in EMS

If there is insufficient memory, the scrollback buffer is shrunk; if there
is still not enough memory, the pager buffer is shrunk as well; as a
last resort, the number of screens is reduced.

-----------------------------------------------------------------------------
Keyboard Commands
-----------------

The commands described here may be bound to other keys, but the default
keystroke named here may always be used when preceded by Alt-= (hold down
the Alt key and press the equal sign at the upper right of the typewriter
section of the keyboard).

Alt-A attack dial

Repeatedly dials the number you select from the dialing directory
until a connection is established. You may also manually enter a
number to attack-dial.

Alt-B send break

Alt-C call a number

Dial the number you select from the dialing directory (once only).
You may also manually enter a number to dial. If you are currently
connected to another system, you will be prompted whether to hang
up. Press Esc to abort the dial and return to the current session.
Press "Y" to disconnect and then dial a new number, or "N" to maintain
the current connection and load new macros and parameters without
dialing.

Note that the modem parameters always have an "H" appended when neither
"H" nor "X" is present in the dialing directory, since the handshake
defaults to hardware.

See also Alt-Q.

Alt-D DOS shell

Temporarily exit to DOS. Type "EXIT" to return to comm session.
RBcomm will swap itself out of memory, leaving only 448 bytes plus
its copy of the environment in memory (464 bytes when swapping to
EMS). When swapping to disk, a 46K-96K swap file will be created
in the directory you specified with RBCONFIG, and will be deleted
when you return to the comm session. File transfers also create
the temporary swap file.

Alt-E toggle local echo

By default, RBcomm assumes that the remote system will echo any
characters you need to see. After pressing Alt-E once, RBcomm will
display any characters you type without requiring the remote system
to echo them. After pressing Alt-E a second time, RBcomm will once
again assume that the remote system will echo characters.

Note: you may also toggle local echo by pressing 'L' on the Alt-P
parameters menu.

Alt-F list files

Display a three-up listing of the files matching a given filespec.
This command uses the pager, whose commands are listed in a separate
section below. Note that while the pager can back up past the
beginning of its buffer, doing so can be slow for large directories.
Please be patient if the screen is not updated instantly while backing
up.

Alt-G Go execute a program

You will be prompted to enter a command. Everything up to the first
blank is the program to execute, and the rest of the line is the
command tail to pass to the program. If you do not specify an explicit
path, RBcomm will search your PATH for you; similarly, if you do not
give an explicit extension, RBcomm will look for both .COM and .EXE
files.

(to execute a batch file or a COMMAND.COM internal command, you should
use
"%VCOMSPEC% /c cmd"
as the implicit COMMAND.COM invocation from earlier releases has been
removed)

Alt-H hang up

Terminate the connection. First drops DTR, and if Carrier Detect is
still active, sends the modem's hangup string. The default macro set
is reloaded from disk (if present) or from the built-in defaults.
If the CLEANUP "key" has a macro binding, it is executed before
hanging up; if it includes the LOWER_DTR command, DTR will remain
dropped.

Alt-I idle

This command allows you to keep a connection alive if you need to step
away from your computer for a while. Sends a space followed by a
backspace every two minutes (configurable with RBCONFIG) until you
press a key to cancel the command.

Alt-J jump to directory

Pops up a window displaying the current directory. You may switch to
a different directory by entering it in place of the displayed
directory. Relative paths without a leading slash or backslash will
change to a subdirectory of the current directory. If you specify a
drive letter, that drive will become the current drive as well.

Alt-K unused

Alt-L toggle logging to file

When pressed the first time, you will be asked for the name of a file
to which all characters received from the remote system will be
appended (percent signs introduce variable expansions--see the EXEC
and OPEN_LOG commands below). When pressed the second time, RBcomm
will no longer append received characters to that file. If verbose
(see Alt-Y) is active, all characters will be appended exactly as
received, otherwise any command sequences embedded in the received
data are stripped out.

Alt-M learn macro string

When you press Alt-M, you will be asked to enter a text string of up
to 79 characters, using the same editing keys used elsewhere. This
text string may be replayed with Alt-N.

Alt-N play back macro string

Plays back the last string recorded with Alt-M, sending it to the
remote system.

Alt-O scrOllback

This command pops up the scrollback pager, allowing you to review
text which has already scrolled off the screen. The keystrokes
which the pager understands are listed in a separate section below.
In addition, 'M' marks the top of the currently displayed screenfull
as the beginning of the region to write when 'W' is pressed. After
pressing 'W', you will be prompted for a filename. The section of
the scrollback buffer between the marked top (default: beginning of
buffer) and the bottom of the currently displayed screen is appended
to the specified file.

Alt-P set parameters

This command pops up a menu which allows you to set the following
parameters: COM port, speed, parity, parity stripping, handshake,
backspace translation, visual bell, and terminal emulation. You may
also reset the terminal emulation to its initial state, in case the
remote system leaves you stranded in a strange condition. Press Esc,
Enter, or 'R' to exit this menu.

Note that Alt-P will discard any characters which have been received
but not yet processed, because it always reinitializes the serial
port when it pops down.

Alt-Q dial queue of numbers

Repeatedly dials each number you specify until a connection is
established with one of the numbers. The numbers are dialed in
round-robin fashion until a connection is established. A beep will
sound to notify you of the connection, and the name of the remote
system and the modem's connect response will be displayed.

If there were multiple numbers in the previous dialing attempt,
Alt-Q will immediately continue dialing the numbers which to which
RBcomm has not yet successfully connected.

You specify the entries to dial by giving the numbers as they appear
in the dialing directory, separated by commas or blanks. A number
may be specified more than once, and will be dialed more than once
during a round of dialing attempts. As a shortcut, you may separate
two numbers by a dash to dial all numbers in the range, inclusive.

Alt-R receive file

Pops up a menu allowing you to select the protocol with which you wish
to receive a file from a remote system. Press ESCape if you do not
wish to receive a file. Note that Zmodem features automatic download,
so you do not need to press Alt-R unless you wish to give DSZ
additional parameters. You may also add additional autodownloading
protocols--see the WHEN macro command in the next section.

Not listed on the menu: ^G, ^Y, and ^Z pop up a parameter prompt,
then proceed with the download specified by the corresponding
non-control letter.

Alt-S send file

Pops up a menu allowing you to select the protocol with which you wish
to send a file to a remote system. Press ESCape if you do not wish to
send a file. After selecting a protocol, you will be asked to enter
the name of the file to send (Ymodem, Ymodem-G, and Zmodem allow
wildcards and multiple filespecs).

If you press the control character corresponding to the desired
protocol, the file(s) will be deleted after a successful transfer.
For batch transfers, only the files corresponding to the first
filespec are deleted.

Alt-T type ASCII file to other system

sends an ASCII file to the remote system, pausing after each line
for the return to be echoed. The send may be aborted at any time
by pressing Escape. The EXPAND_BLANK macro command may be used
to turn on blank-line expansion (send a single space instead of
blank lines). This feature is off by default.

Alt-U load/save user interface as defined in keyboard macro file

Note that keyboard macro files are always stored in the RBcomm
directory as defined by RBCONFIG.

WORDSTAR.RBM and EMACS.RBM contain the keyboard definitions for using
WordStar (tm) and Emacs cursor movement commands on the cursor pad
(i.e. Home goes to the start of the line, etc.) EMACS.RBM also binds
all Alt-letter keys to be Esc-letter, making the Alt key into a true
Emacs meta-key. You will need to use the Alt-= override to use the
RBcomm commands while EMACS.RBM is loaded.

Alt-V View file
(toggle verbose, which used to be on Alt-V, is now on Alt-Y)

Page through a text file. This uses a simple file lister which
only understands a few keystrokes; they are listed in a separate
section below.

Alt-W select Which screen is visible

Displays a menu of the available screens. Press the indicated
number to make that screen the visible screen. If UnixWindows
is not enabled, the selected screen will also be made the
active screen (characters received from the serial port are
displayed on the active screen). Under UnixWindows, the
visible and active screens may be different, as the active
screen is set by commands from the remote system; thus, only
the visible screen is set by this command.

Alt-X exit

Terminate RBcomm. If you are still connected to the remote system
(Carrier Detect asserted), you will be asked whether or not to hang
up.

Alt-Y toggle verbose
(previously Alt-V)

Toggles the verbose mode used with Alt-L. When not logging, the
control characters which are not used for terminal commands will be
displayed as ^X when received from the remote system. When logging to
a file, terminal command sequences will only be stored in the log file
if verbose mode is ON.

Alt-Z send file with Zmodem

This command will send the specified file(s) using the Zmodem
protocol.

Alt-1,2,3,4,5,6,7,8,9,0 dial first ten numbers in dialing directory

Alt-F1 through Alt-F10 dial 11th through 20th number in dialing directory

F1 pop up help screen

Displays the contents of the help file for the current macro file
(if that file is not found, RBcomm attempts to use RBCOMM.HLP).
Press an Alt or function key to execute the default binding for the
key. Escape exits immediately, and any other key pages through the
help file (if more than 20 lines long).

Alt-- cancel any pending WHEN, DELAYED, EVERY, or WINDOW commands

Alt-= use default binding of next keystroke

If the keyboard has been redefined, pressing Alt-= will allow you to
access the built-in default definitions (as listed in this section).
Press Alt-= and then immediately press the key whose default
definition you want to use. As a result, Alt-= is the only keystroke
which may not be redefined.

-----------------------------------------------------------------------------
Line Editor
-----------

Whenever you are prompted for a line of input, you may use the following
keys to edit the line:

Esc abort
Return finish input
Home move to start of line
^A move to start of line
End move to end of line
Right move a character right
^D move a character right
Left move a character left
^S move a character left
^Right move word right (to next blank)
^Left move word left (to previous blank)
Del delete the character under the cursor and shift remainder of
line left
Backsp delete the character to the left of the cursor, and shift the
remainder of the line left
Alt-G delete the word to the right of the cursor
Alt-H delete the word to the left of the cursor
^End delete from the cursor to the end of the line
^T transpose the two characters to the left of the cursor
Alt-D insert an ASCII DEL (127) character
Alt-P insert the contents of the cut buffer
^Q treat the next keystroke as a literal character to insert

-----------------------------------------------------------------------------
Pager
-----

The pager is used to display directories, files, help screens, and the
scrollback buffer. It is fairly simple, supporting the following
keystrokes:

Up move up one line
Down move down one line
PgUp move up one screenfull
PgDn move down one screenfull
Space move down one screenfull, exiting if already at end of
file/directory/buffer.
Right (files/scrollback only) shift the left margin right by eight
spaces, allowing you to view lines extending past the right
edge of the screen. When the left margin is other than
zero, the indent is shown at the right edge of the status
line.
Left (files/scrollback only) shift the left margin left by eight
spaces if it is not already zero.
Home restart the pager. For files and directories, you will
be put back at the beginning of the file; for the scroll-
back buffer, you will be placed at the end of the buffer.
Esc exit from the pager.

The scrollback pager adds the following keys to the above standard keys:
M mark the top of the region to write to a file
W write the marked region to a file

The dialing directory adds the following keys:
0-9 start entering the number(s) to dial
M specify a telephone number to dial manually
R recall the last list of numbers to dial

-----------------------------------------------------------------------------
Error Messages
--------------

file not found
RBcomm was unable to open the requested file. This may be due to
wildcards or a misspelling in the filename, an invalid path,
a lack of file handles (see FILES= in your DOS manual), or a file
sharing conflict.

invalid macro file
the macro file you wanted to load is either corrupted or from a
different version of RBcomm which uses an incompatible format for
macro files. Try recompiling the macro file with the same version
of the compiler as the version of RBcomm you are using.

MODEM NOT RESPONDING
RBcomm did not get an acknowledgement from the modem within four
seconds of the last command. If you only get this message on attack
or list dialing, you need to increase the delay before redialing
with RBCONFIG (under "dialing parameters")--some modems take longer
to reset after a hangup command than others.

--out of memory--
There was not enough memory to pop up the requested menu or prompt.
Increase the heap size with RBCONFIG and try again.

STACK FULL
Your macro was so deeply nested that it ran out of space. This can
be caused by an infinite recursion in your macro. Increase the heap
size with RBCONFIG (under "Other options") and try again.

-----------------------------------------------------------------------------
Warnings
--------

Don't try to load a TSR while shelled to DOS. RBcomm won't be able to swap
itself back in and will have to abort. Your connection will not be broken,
however.

Don't mess with the swap file while shelled. You'll be sorry.... (RBcomm
is able to detect a missing or truncated swap file on returning, but not
other changes)

IMPORTANT: if you are swapping to a floppy drive, DO NOT UNDER ANY
CIRCUMSTANCES replace that floppy disk while shelled to DOS or running a
file transfer. You will definitely trash the file allocation tables and
directory of the second disk. This is a problem with DOS itself (at least
through 3.10, later versions may have corrected it) when faced with a
diskette change while a file is open on the diskette which gets removed.
The swap file is such an open file.

-----------------------------------------------------------------------------
Known Bugs and Limitations
--------------------------

If you are using a serial port which the BIOS does not recognize, RBcomm
will most likely read garbage parameters from the port at startup, requiring
you to set the parameters by hand with Alt-P or the -P commandline option.

The pager has trouble with extremely long lines (>500 columns or so).
When encountering such a line, you may not be able to move up or down by
single lines. PgUp and PgDn will still work, however.

RBcomm requires that the EMS page frame contain at least three pages
in order to use EMS for the scrollback and pager buffers, and at least
one page in order to swap to EMS. This is important when running under
memory managers such as QEMM-386 which allow page frames smaller than
the standard four pages.

-----------------------------------------------------------------------------
Macro Compiler
--------------

Syntax: MACRO srcfile [srcfile ...]
compiles each of the specified source files in turn to a macro file
with the same name and the extension .RBM. If no extension is
specified for a source file, the default of .MAC is used.

Important Note:
RBcomm v3.4 and later macro files are INCOMPATIBLE with
earlier versions. You must recompile all your macro files
if RBcomm complains about invalid macro files.

-------------------
Macro File Commands
-------------------

Each command has the following form:

keyname commandword [args]

where keyname specifies to which key the command is to be bound. Keynames
(which are not case-sensitive) are:
F1 through F12 for the function keys
+F1 through +F12 for the shifted function keys
^F1 through ^F12 for the control function keys
@F1 through @F12 for the alt-function keys
@A through @Z for the alt-letter keys
@1 through @0 for the alt-digits
Gray+, Gray-, Gray*, Gray/ for plus, minus, star, slash keys on keypad
@Plus and @Minus, @Gr*, @Gr/ for Alt-Gray+, Alt-Gray-, Alt-Gray* and
Alt-Gray/
Left, Right, Up, Down for the cursor keys on the numeric pad
Home, End, PgUp, PgDn, Ins, and Del for the other keypad keys
KP5 for the '5' key on the number pad (enhanced keyboard)
^Home, etc. for the control versions of the numberpad keys
CP_Home Home key on gray cursor pad
CP_Up Up arrow on gray cursor pad
CP_Down Down arrow on gray cursor pad
CP_Enter Enter key on cursor pad
etc.
@Left, @Right, @Up, @Down, @Home, @End, @PgUp, @PgDn, @Ins, @Del for
Alt- versions of the cursor pad keys
^Left, ^Right, etc for Ctrl- versions of the cursor pad keys
^Break for control-break
@- @= @[ @\ @] @; @' @, @. @/ @` @* for various other Alt-keys

There are also some pseudo-keys to which you may assign a macro:
"OnLoad" is executed any time the macro file is loaded into memory
"AutoDL" is executed whenever the autodownload mechanism is
initialized. See the AUTO_XFER command for details.
"Auto" is executed automatically when a connection is established
"Reconnect" is executed automatically when reconnecting without
hanging up and redialing
"CleanUp" is executed when hanging up if carrier detect is active
"OnAbort" is executed whenever a macro other than OnAbort aborts and
displays the **ABORTED** message, just prior to displaying
the message
"Alarm" is executed whenever a connection is established with a remote
system or when a file transfer (including TYPEing a file)
completes. If not bound, a simple beep is generated.

And there is a no-operation pseudo-key for use by FORCE_CLEANUP:
"Null" does nothing and returns immediately

Finally, there are two sets of pseudo-keys which can be used to
override the default settings for file transfers.
"#upload_x" will override the command string for the upload
protocol with letter 'x' on the upload menu.
Format: #upload_z "upload command string"
"#download_x" will override the command string for the download
protocol with letter 'x' on the download menu.
Format: #download_z yes|no "download command string"
The first parameter indicates whether or not RBcomm
should prompt the user for a filename or parameters
(which may be inserted in the download command using
the %F substitution--see EXEC).

You may assign macros to control keys by specifying "^x" as the key name,
where "x" is the control key you want to use. Similarly, you may assign a
macro to a regular key by preceding the character representing the key by a
backslash (i.e. \A for capital 'A', \a for lowercase 'a'). Note that macros
are never in effect when you are prompted for information by RBcomm; they
only affect what (if anything) gets sent to the remote system.

Finally, you may use "#nnn" where nnn is the decimal scancode of the key
to which you wish to assign the macro (values of 224 through 255 are reserved,
167 through 223 are currently unused by any key combinations supported by
the IBM ROM BIOS).

Note that the cursor pad keys will execute the binding for the
corresponding number pad key if not specifically bound (but not vice
versa). CP_Enter defaults to the binding for @Enter.

The commandword is not case-sensitive, but you must include the underscore
if present and use the entire commandword (abbreviations are not
supported).

With the exception of the ANSWERBACK, TEST, TEXT, WAITFOR, and WHEN
commands, all commands which take a string argument pop up a prompt if the
string is empty (i.e. ""). Strings may include the following special
sequences:
^x specified control character
^? ASCII DEL (127)
\a ^G (bell)
\b backspace
\e escape
\f form feed
\n line feed
\r carriage return
\t horizontal tab
\v vertical tab
\\ backslash
\^ carat
\0 ASCII NUL (for TEXT command only)
For character arguments, you may specify either
'c'
where the character c is interpreted as for a string, or you may specify its
ASCII value.

Everything from a semicolon (unless it is in a string) to the end of the line
is considered a comment, as are blank lines.


If a line starts with #include rather than a key name, the specified file
will be compiled into the macro file as if it were part of the current text
file. Note that the string is processed just like any other strings, so
that you must double any backslashes (or use forward slashes, instead).
Format:
#INCLUDE "d:/path/filename"
an extension of .MAC is assumed if no extension is given, and the drive
letter and path are optional (default is current drive and directory).
#INCLUDEs may be nested up to twelve deep.

If a line starts with #ignore rather than a key name, any subsequent
occurrences of the keyname following the #ignore will be ignored, just as
if you had already defined a binding for the key. This is useful when
#include'ing a file if you do not want all the bindings in the included
file.
Format:
#IGNORE

For readability, you may give names to extended keys with the
#DEFKEY
command. For example, "#defkey Proc1 199" will let you refer to
"Proc1" and "#199" interchangeably.

ABORT
abort the current macro or operation as if the user had pressed Esc.

ABORT_UNTIL
Abort any currently executing UNTIL command after the command(s) it
controls complete. If multiple UNTIL commands are nested, each is
aborted as the commands it controls complete, until all pending
UNTILs have been aborted. Useful mainly in conjunction with the
DELAYED command to provide a timeout on UNTIL loops.

See also DELAYED, UNTIL.

ALARM
Execute the macro bound to the "Alarm" pseudo-key. If Alarm is not
bound, this command is equivalent to BEEP.

See also BEEP, SOUND.

ANSWERBACK "string"
sets the answerback message to the specified string. If the string is
empty (i.e. ""), answerback is disabled (making ^E a cursor-positioning
command), otherwise, answerback is enabled.

AT hh:mm:ss
execute the following line (or lines if a MULTI) at the specified
time. If the specified time is less than the current time, the
command(s) will be executed the next day. The seconds may be
omitted, in which case they default to 0.

Note: the command(s) may actually execute later than requested if
RBcomm is busy processing incoming characters at the time the
command should execute. The command will execute as soon as RBcomm
empties its receive buffer.

See also DELAYED, EVERY.

AUTO_XFER
reenable autodownloads/autouploads if they have been canceled by
an ENDWHEN ALL_XFER. If the AutoDL pseudokey has a binding, it
is executed; otherwise, a default routine equivalent to
WHEN 0 "**^XB00"
RECEIVE 'Z'
is executed. The command ENDWHEN ALL is implemented as an
ENDWHEN ALL_XFER followed by AUTO_XFER.

Further, the dialer does an ENDWHEN ALL_XFER followed by an
AUTO_XFER, so the AutoDL pseudokey will allow autodownloads to
be preserved across a dial attempt which does not cause a new
macro file to be loaded.

The autodownloads are also reenabled with AUTO_XFER when hanging
up and immediately after loading a new macro file.

Note: Puma autodownload may be enabled with the following lines
as part of the AutoDL pseudokey:
WHEN 0 "^X^H^XPuma^X^H^X"
RECEIVE 'P'
Although I have not yet seen MPt (the renamed Puma), I understand
that its autodownload string has changed, requiring
WHEN 0 "^V^H^VMPt ^V^H^V"
RECEIVE 'P'

WARNING: do not invoke while autodownload is enabled, as you will wind
up invoking a download multiple times for one download request....

See also ENDWHEN, WHEN.

AVATAR ON|OFF
Specify whether AVATAR command sequences should be honored by
the terminal emulator.

See also RBCOMM_CMDS.

AWAITKEY
pause until a key is pressed. The next function which reads a key
will read the key which was pressed. Returns immediately if there
was any typeahead (including RBcomm's key stack).

See also KFLUSH.

BEEP
sound the bell. Useful mainly in conjunction with the MULTI or
DELAYED commands (see below).

See also ALARM, SOUND.

BREAK
send a break to the remote system

CALL keyname
execute the macro (if any) bound to the specified key and then continue
executing the current macro (if inside a MULTI).

See also GOTO_KEY, PUSHKEY.

CANCEL_DELAYED which
cancel the specified delayed action. Currently supported:
ALL cancel all delayed actions
LAST cancel the last executed DELAYED or EVERY. If
called a second time without an intervening DELAYED
or EVERY, the second call is ignored.

See also DELAYED, EVERY.

CANCEL_NOTIFY
remove the notify window immediately instead of at the end of the
configured period of time.

CHDIR "dir"
change the DOS default directory to the specified directory.

CLOSE_LOG
close the current log file. If logging is off, this command has no
effect.
See also OPEN_LOG, TOGGLE_LOG.

CUT num dir "search"
search the screen backwards from the current cursor position until
the search string (case sensitive) is found, then copy "num"
characters in the indicated direction (AFTER or BEFORE) to the cut
buffer. The contents of the cut buffer remain unchanged if the search
string is not found (in which case the completion status is set to
FAILED for testing by IF or UNTIL). The cut buffer may be sent to
the remote system with the PASTE command, inserted into a line
being edited by pressing Alt-P, or inserted with the %C variable
expansion.

Note that trailing blanks are deleted from the cut buffer. In
addition, the CUT command treats the entire screen (even if a WINDOW
command was used to restrict output to a portion of the screen) as a
single long line, ignoring all line wrapping for both search and cut.

Examples:
Screen contains "1234test5678cursor here->" and the cursor is as
indicated. Then
CUT 3 BEFORE "test"
places "234" into the cut buffer, while
CUT 6 AFTER "test"
places "5678cu" into the cut buffer. Further,
CUT 7 BEFORE ""
will place " here->" into the cut buffer.

See also PASTE, TRIM.

DELAYED time
execute the macro on the next line (or lines if it is a MULTI) the
given amount of time from now. You may have up to six delayed
commands active at any given time. The maximum delay time is 18
hours; the macro compiler will complain if you attempt to use a
greater delay. Times are specified as
seconds
minutes:seconds
or hours:minutes:seconds

Note: the command may actually execute later than requested if RBcomm
is busy processing incoming characters at the time the command should
execute. The command will execute as soon as RBcomm empties its
receive buffer.

See also CANCEL_DELAYED, EVERY, WHEN.

DIAL number redial
dial the specified entry (0-39) from the dialing directory, or pop up
the dialing directory if 'number' is PROMPT. 'redial' specifies how
to dial:
ONCE make only one attempt
ATTACK try repeatedly until connected
RECONNECT make a single attempt if not connected, or set
parameters and password without dialing if already
connected

If the number is PROMPT, the user may enter multiple numbers. If
'redial' is RECONNECT, all but the first number will be ignored.
Otherwise, the entire list will be tried either once or until a
successful connect.

See also LISTDIAL, MDIAL.

DISPLAY "msg"
Display the variable-expanded version (see EXEC for details) of the
given string at the current cursor position, and update the cursor
position to be at the end of the string. This is similar to the
MESSAGE command, but it always displays at the current position;
MESSAGE also does not change the cursor position. The characters
^A through ^F and ^H in the string invoke special actions. ^C clears
from the current position to the end of the line while ^H backs up
one column if not already at the left edge; the other special
characters are detailed under "Writing your own Help FIles".

See also MESSAGE.

DVEXEC ON|OFF "DVP-command"
Start a program in a separate DESQview window. The first
parameter specifies whether RBcomm should keep its serial port
routines active; if OFF, the other program may safely perform
serial I/O and RBcomm will wait until it terminates (if ON,
RBcomm will continue immediately, but the new program may not
take over the serial port interrupt without disrupting RBcomm).
The second parameter specifies the full name of the .DVP file
to be launched and optionally commandline parameters to
override those stored in the .DVP.
Example:
DVEXEC OFF "C:/DV/OZ-PIF.DVP /X"
might call the OZSMALL program to perform a CompuServe
B+ file transfer, forcing its commandline to "/X"
(meaning exit on completion).

ECHO ON|OFF
ECHO ON forces half-duplex (local echo on) mode, ECHO OFF forces
full-duplex (local echo off).
(see Alt-E)

See also STRIP_PARITY, TOGGLE_ECHO.

ENDWHEN which
cancel the specified WHEN command. Currently supported:
ALL cancel all WHENs except the autodownloads
ALL_XFER cancel all WHENs including the autodownloads
LAST cancel the last executed WHEN. A second call without
an intervening WHEN acts the same as ENDWHEN ALL.

Note: ENDWHEN ALL is implemented as an ENDWHEN ALL_XFER followed
by an AUTO_XFER.

See also AUTO_XFER, WHEN.

EVERY delay-time repeat-interval
execute the macro on the next line (or lines if it is a MULTI) the
given amount of time from now, and then again every
'repeat-interval' seconds. You may have up to six delayed
commands active at any given time. The maximum delay time is 18
hours; the macro compiler will complain if you attempt to use a
greater delay. The maximum repeat interval is about 3595
seconds. The delay time is specified as
seconds
minutes:seconds
or hours:minutes:seconds

Note: the command may actually execute later than requested if RBcomm
is busy processing incoming characters at the time the command should
execute. The command will execute as soon as RBcomm empties its
receive buffer.

See also CANCEL_DELAYED, DELAYED, WHEN.

EXEC "command-to-execute"
everything up to the first blank in the string specifies the program to
execute (the PATH will be searched if no explicit path is given, and
both .COM and .EXE will be looked for if there is no explicit
extension), the remainder of the string is the command tail to pass to
the program. Note that a following IF command will always consider
the EXEC to have succeeded if you use COMMAND.COM to run the program
with the construct
"%VCOMSPEC% /c cmd"
due to a misfeature of COMMAND.COM.

If SAVE_SCREEN is ON, RBcomm will prompt for a key, then restore
the screen to the state it was in before the EXEC. No message will
be displayed if the program returns an error; however, an error
message will still be displayed if there was an error while attempting
to load the program.

Within the command, a percent sign introduces a variable substitution.
The following sequences are supported:
%a hexadecimal I/O base address being used
%C contents of the cut buffer (see CUT and PASTE)
%d current date, in format mm-dd-yy
%D current directory, including drive
%F file(s) to transfer; this substitution is only meaningful
for a file transfer parameter string, and has an undefined
action elsewhere
%i IRQ number being used (0-15)
%I get input from user. The following characters up to the next
percent sign are used as the prompt and then discarded.
%M current macro file name
%N name of current remote system (from dialing directory)
%p port number (1-4)
%P port parameters, in same format as dialing directory
display
%s current serial port speed
%t current time, in format hh:mm:ss
%V get an environment variable. The following characters up to
the next percent sign are used as the name of the variable
and then discarded.
%w current switch character
%% a percent sign
%/ a forward slash unless the last character of the expansion
for the string up to this point is a slash or backslash
%\ a backslash unless the last character of the expansion
for the string up to this point is a slash or backslash

See also EXECN, IF, SHELL.

EXECN "command-to-execute"
This command is identical to EXEC, except that no error box is
displayed in the event of an error. If SAVE_SCREEN is ON, the
screen is restored without pausing for a keystroke.

See also EXEC.

EXIT errorlevel
End RBcomm. Will prompt you whether or not to hang up if you are
still connected to another system. Returns the specified errorlevel
to DOS; usually this should be zero, but other values may be used
to control batch file execution.

EXPAND_BLANK ON|OFF
Specify whether RBcomm should send a single blank instead of a
completely blank line when TYPEing a file (see Alt-T and TYPE).
If ON, a blank will be sent to separate two consecutive
carriage returns (TYPE converts both CRLF and LF to CR to
simulate keyboard input); if OFF, no extra blanks will be
generated regardless of the data in the file.

See also TYPE.

FDELETE "filespec"
delete the file(s) named by filespec (which may include wildcards).
Note that there is no confirmation requested, so use this command
with care!!!

See also FILES.

FILES "filespec"
display a three-up list of the files matching the filespec. This
uses the file pager described above.

See also FDELETE.

FORCE_CLEANUP keyname
execute the following line(s), then execute the macro bound to
"keyname" regardless of how the commands are exited (i.e. normally,
ABORT, or ). FORCE_CLEANUPs may be nested, in which case
the innermost one is the only one to execute unless the cleanup
code executes an ABORT itself (then execution gets passed to the one
enclosing it, etc.). If no cleanup is needed and the FORCE_CLEANUP
is merely being used to prevent a complete abort on Esc, the pseudo-
key Null may be used. Null is guaranteed to perform no action and
return immediately.

GOTO_KEY keyname
continue execution with the specified macro (if bound). Never returns
to the current macro. If the key is not bound (i.e. GOTO_KEY Null),
execution resumes at the point from which the current macro was
CALLed, effectively producing a return from a nested macro.

See also CALL, PUSHKEY.

HANGUP
hang up. Executes macro bound to "CleanUp" before actually hanging
up if carrier detect is active. After hanging up, the default macro
file is reloaded (thus cancelling any remaining WHENs and DELAYEDs).

See also HANGUP_ONLY.

HANGUP_ONLY
hang up, but do not execute the "CleanUp" macro or reload macro files.

See also HANGUP.

HELP
pop up the help screen. If you currently have the macro file FOO
loaded, RBcomm first attempts to read the file FOO.HLP in the RBcomm
directory. If it is unable to do so, it then attempts to read
RBCOMM.HLP.

While viewing the help screen(s), you may enter an Alt-key command.
This will immediately exit the help system and execute the command
right away. If you press Alt=, that fact will be remembered, and
the Alt= will be used to quote the next Alt-key command you press
while in the help system.

IDLE
go into idle mode, sending a blank followed by a backspace every 2
minutes. Press Esc to end idle mode.

Both the interval and the sequence sent by idle mode may be configured
with RBCONFIG.

IF SUCCESS|FAILED|CONNECTED|OFFLINE|DV|NOT DV
IF SUCCESS and IF FAILED conditionally execute a command based on the
completion status of an immediately preceding EXEC, SHELL, SEND,
SENDFILE, RECEIVE, RECEIVEFILE, or WAITFOR. The following line (or
lines if a MULTI) is executed only if that prior command was
successful in the case of IF SUCCESS, or if it failed in the case of
IF FAILED.

IF CONNECTED executes the following command if carrier detect is
asserted, while IF OFFLINE executes the following command if
carrier detect is deasserted.

IF DV executes the following command if RBcomm has detected that it
is running under DESQview, while IF NOT DV executes the following
command only if RBcomm is not running under DESQview.

For example, if you want to execute a program only after failing to
see a particular string, you would use

MULTI
WAITFOR 10 "don't run program"
IF FAILED
EXEC "someprog args"
END

See also ABORT_UNTIL, EXEC, SHELL, SEND, RECEIVE, WAITFOR, UNTIL.

KFLUSH
empty the keyboard buffer (including RBcomm's key stack).

See also AWAITKEY, TFLUSH.

LEARN
start learning a macro string. The recorded string may be sent to
the remote system with RECALL.

See also LOAD_MACRO, RECALL.

LISTDIAL "numbers"
dial the specified numbers from the dialing directory repeatedly until
a connection is established with one of the numbers. If the empty
string is specified, the dialing directory is popped up and the
previous list of numbers (less the system to which RBcomm
established a connection) is recalled.

Each of the numbers in the list must be separated from the previous
number by one or more spaces or commas. For example, "1,5 7,2 4"
would attempt to dial entry 1, then entry 5, then 7, then 2, and
finally entry 4 before repeating. Any numbers in the list which are
higher than the highest-numbered entry in the current dialing
directory are silently skipped.

See also DIAL, MDIAL.

LOAD_MACRO "file"
load the specified macro file from the RBcomm directory. If an empty
filename is given, the user will be prompted for a name, which
defaults to the name of the currently loaded macro file. The current
macro (if any) and any that it had interrupted are aborted. However,
if the interruption occurred during a command of extended duration
such as a WAITFOR, that command will complete normally before the
macro is aborted.

See also LEARN, RECALL.

LOG "filename" "message"
append the specified message to the named file. Both the filename
and the message may contain variable expansions as described under
EXEC. If the filename is (or expands to) the empty string "", the
expanded message is appended to the current log file (if any).

See also OPEN_LOG.

LOWER_DTR
requests that DTR remain dropped after the next HANGUP or HANGUP_ONLY
command. The best place to put this command is in your CleanUp macro.

LTRIM CUTBUFFER "trimchars"
remove from the left (beginning) of the cut buffer (see CUT) the
longest sequence of characters consisting entirely of characters in
"trimchars". A future version of RBcomm supporting string variables
will permit trimming more than just the cut buffer.

Example: if a previous CUT command has placed "12 A22B 34" into the
cut buffer, the command
LTRIM CUTBUFFER " 1234"
will result in "A22B 34" becoming the contents of the cut buffer,
available for the next PASTE command or @P in the input editor.

See also CUT, RTRIM, TRIM.

MDIAL "number" ONCE|ATTACK
dial the specified phone number as if it had been entered as the
manual number for the dialing directory display.

See also DIAL, LISTDIAL.

MESSAGE row col msg
Display the result of expanding any variables in the specified message
(see EXEC for details) starting at the given row and column on the
screen. If either row or column is 255, use the current row or
column. Does not change the current cursor position, unlike the
DISPLAY command. As with DISPLAY, the characters ^A through ^F and ^H
specify special actions.

See also DISPLAY.

MESSAGEBOX msg
if running under TopView or DESQview, a window with the given message
will pop up for three seconds. This command is ignored otherwise.

The message has any variables expanded, and the first 40 characters
are displayed in the pop up window. See EXEC for the details of
the variable expansion.

See also NOTIFY, CANCEL_NOTIFY.

MULTI
the following lines, up to but not including a line starting with END,
are assigned to the specified key. The macros assigned to the key
may not total more than 253 bytes, and the macro compiler will
complain if they do.

The format of the following lines is the same as for a regular macro,
except that you do not specify a keyname. For example, to make
shift-F2 switch terminal emulation to VT52, use

+F2 MULTI
PUSHKEY 13 0
PUSHKEY 'V' 0
PARAM_MENU
END

You may also use { and } on separate lines as synonyms for MULTI
and END. The braces are preferred, as MULTI/END will be phased out
in future versions.

MUSIC ON|OFF
specify whether ANSI music should be enabled while using the
ANSI BBS terminal emulation. This switch is necessary because
the command to play music conflicts with a standard ANSI
control sequence (Esc [ M).

See also PLAY, SOUND.

NOTIFY msg
if running under TopView or DESQview, and RBcomm determines that it is
in the background, a window with the given message will pop up for
three seconds. This command is ignored otherwise.

The message has any variables expanded, and the first 40 characters
are displayed in the pop up window. See EXEC for the details of
the variable expansion.

See also CANCEL_NOTIFY, MESSAGEBOX.

OPEN_LOG "file"
if logging is on, the current log file will be closed. Then, the
specified log file will be opened (if no name is given, a prompt is
popped up). The same variable expansions which are valid for
the EXEC command are applied to the filename which is given (or
entered by the user).

For example, to allow the environment variable RBLOG to specify the
base name of the log file, use
OPEN_LOG "%VRBLOG%.LOG"

See also EXEC, CLOSE_LOG, TOGGLE_LOG, RECEIVE.

PACECHAR 'c'
set the pace character for the TYPE command to 'c'. RBcomm waits
up to three seconds for the pace character when TYPEing a file to
the remote system. RBcomm will not wait if the pace character is
ASCII 0 (^@).

See also TYPE.

PARAM_MENU
pop up the "Set Parameters" menu

PASSWORD
send the password defined in the dialing directory. Does not send
a carriage return or any other terminating sequence.

See also TEXT, TYPE.

PASTE
send the contents of the cut buffer to the remote system.

See also CUT.

PAUSE num-ticks
halt execution for num-ticks/18 seconds. Useful mainly in conjunction
with the MULTI command (see above).

PLAY "play-string"
play the notes specified by the string. The string may contain
the following directives:
An
Bn
Cn
Dn
En
Fn
Gn play the given note, 'n' specifies duration as
a fraction of a whole note, defaults to that
given by the last L command. A '#' or '+'
between the letter and 'n' produces a sharp
note, while a '-' produces a flat note.
Ln specify the default length of notes as 1/n of a
whole note
Mx specify music type, x=L, N, or S
L)egato: note uses entire period
N)ormal: note uses 7/8 of its time period
S)taccato: note uses 3/4 of its time period
Nn play note number 'n', from 1 to 95
On specify octave number, 0 to 9. O3 starts at
middle C
Pn rest for the specified period (1/n of a whole
note). If 'n' is not present, use the length
given by the last L command
Tn specify tempo, 32 to 255
. following A-G, N, or P, increases the note's
length by 1/2.

See also BEEP, SOUND.

PUSHKEY key scan
or
PUSHKEY keyname
put the specified key/scancode pair onto RBcomm's internal keyboard
stack, where the last pushed pair will be the next keystroke read
by RBcomm. The stack is currently eight keystrokes in size, and any
PUSHKEY executed while the stack is full will simply be ignored.
"keyname" may be the name of any keystroke recognized by the macro
compiler. is 0 for regular ASCII characters, and 1 for
extended ASCII codes (i.e. function keys).

Useful mainly in conjunction with the MULTI command (see above).

RBCOMM_CMDS ON|OFF
Specify whether the terminal emulator should honor RBcomm
private commands.

See also AVATAR.

RECALL
send the last string recorded with LEARN to the remote system.

See also LEARN.

RECEIVE 'type'
start receiving a file with the specified protocol
0 prompt for protocol
'A' ASCII (capture to file--equivalent to OPEN_LOG "")
'X' Xmodem with parameters
'K' Xmodem-K with parameters
'Y' Ymodem
'^Y' Ymodem with parameters
'G' Ymodem-G
'^G' Ymodem-G with parameters
'Z' Zmodem
'^Z' Zmodem with parameters

See also IF, OPEN_LOG, SEND, TYPE.

RECEIVEFILE 'type' "parameters"
start receiving using the specified protocol (which may be any of the
ones listed for RECEIVE except 0 or 'A'), passing the specified
parameters to the file transfer module. Unlike RECEIVE, this command
will not pop up any messages unless it is unable to load the file
transfer module; in case of an error, the completion status is set
to FAILED.

See also RECEIVE, SENDFILE.

REPEAT times
repeat the command on the next line (or lines if a MULTI) the specified
number of times.

RFLUSH
clear any characters which may still be in the serial port receive
buffer.

See also KFLUSH, TFLUSH.

RTRIM CUTBUFFER "trimchars"
remove from the right (end) of the cut buffer (see CUT) the longest
sequence of characters consisting entirely of characters in
"trimchars". A future version of RBcomm supporting string variables
will permit trimming more than just the cut buffer.

Example: if a previous CUT command has placed "12 A22B 34" into the
cut buffer, the command
RTRIM CUTBUFFER " 1234"
will result in "12 A22B" becoming the contents of the cut buffer,
available for the next PASTE command or @P in the input editor.

See also CUT, LTRIM, TRIM.

SAVE_MACRO "file"
no longer supported.

SAVE_SCREEN ON|OFF
determine whether or not to save the current screen while executing
external programs (other than file transfer). The state of this
flag slightly modifies the behavior of EXEC, EXECN, and SHELL.

See also EXEC, EXECN, SHELL.

SCROLLBACK
bring up the scrollback pager. In addition to the standard keystrokes
understood by the pager, 'M' marks the top of the currently displayed
screenfull as the beginning of the region to write when 'W' is pressed.
After pressing 'W', you will be prompted for a filename. The section
of the scrollback buffer between the marked top (default: beginning of
buffer) and the bottom of the currently displayed screen is appended
to the specified file.

SELECT_SCREEN num
select a new screen to be the visible and active screen. If "num" is
PROMPT, displays a menu of the available screens.

SEND 'type'
prepare to send a file with the specified protocol
0 prompt for protocol
'A' ASCII
'X' Xmodem
'K' Xmodem-K
'Y' Ymodem
'G' Ymodem-G
'Z' Zmodem
control character versions of any of the above ('^X', '^Y', etc) will
delete the file(s) corresponding to the first filespec after sending.

See also IF, SENDFILE, RECEIVE, TYPE.

SENDFILE 'type' "file"
send the specified file with the given protocol, which may be any of
the ones listed for SEND except 0 or 'A'. Unlike SEND, this command
will not pop up any messages unless it is unable to load the file
transfer module; in case of an error, the completion status is set
to FAILED.

See also RECEIVEFILE, SEND.

SHELL
shell to DOS. If SAVE_SCREEN is ON, the original screen will be
restored when you exit from the subshell.

See also EXEC, IF.

SOUND freq dur
Generate a tone with a frequency of Hertz for clock
ticks (max 255). If the frequency is 0, a musical pause of the
specified duration is created. If both frequency and duration are
zero, all queued tones are discarded (applies only to DESQview at
this time).

See also BEEP, PLAY.

STRIP_PARITY ON|OFF
Specify whether RBcomm should pass through the parity bit (OFF)
or remove it before further processing (ON). This command is
similar to the 'P' command on the Alt-P parameters menu.

See also ECHO.

TEST EXISTS "filespec"
determine whether any files matching the filespec exist. Sets the
status to SUCCESS if at least one exists, FAILED if none. The status
may be checked with IF or UNTIL commands.

See also TEST WHEN, IF.

TEST WHEN "str"
determine whether a WHEN with the specified search string is currently
active. Sets the status to SUCCESS if at least one exists, FAILED if
there are no WHENs with the specified string. The status may be
checked with IF or UNTIL commands.

See also IF, WHEN, TEST EXISTS.

TEXT "msg"
send the specified characters out the comm port. "msg" is limited to
253 characters.

TFLUSH
discard any characters queued for transmission to the remote system
which have not yet been sent.

See also KFLUSH, RFLUSH.

TOGGLE_ECHO
toggle the state of local echoing

See also ECHO.

TOGGLE_LOG
if logging is currently on, turns off logging received data to file
if logging is off, pops up a prompt for the name of the capture file

See also OPEN_LOG, CLOSE_LOG.

TOGGLE_VERBOSE
toggle the state of verbose mode (see Alt-Y)

See also VERBOSE.

TRANSLATE_BS ON|OFF
TRANSLATE_BS ON turns on backspace/delete swapping, TRANSLATE_BS OFF
turns it off.

TRIM CUTBUFFER "trimchars"
remove from both beginning and end of the cut buffer (see CUT) the
longest sequence of characters consisting entirely of characters in
"trimchars". A future version of RBcomm supporting string variables
will permit trimming more than just the cut buffer.

Example: if a previous CUT command has placed "12 A22B 34" into the
cut buffer, the command
TRIM CUTBUFFER " 1234"
will result in "A22B" becoming the contents of the cut buffer,
available for the next PASTE command or @P in the input editor.

See also CUT, LTRIM, RTRIM.

TYPE "file"
send the specified file to the remote system as a stream of ASCII
characters. Pauses at the end of each line and waits for the pace
character to be echoed (will continue after three seconds even if
the echo is not seen). Equivalent to
SEND 'A'
if no filename is given.

See also EXPAND_BLANK, PACECHAR, SEND.

UI_MENU
No longer supported. Use LOAD_MACRO "" instead.

See also LEARN, LOAD_MACRO.

UNTIL SUCCESS|FAILED|CONNECTED|OFFLINE
repeatedly executes the following line (or lines if a MULTI) until
the status of the last action is either success for UNTIL SUCCESS
or failure for UNTIL FAILED. UNTIL CONNECTED repeatedly executes
the following command until carrier detect becomes active, while
UNTIL OFFLINE repeats until carrier detect drops.

See also ABORT_UNTIL, IF.

VERBOSE ON|OFF
VERBOSE ON turns on verbose mode, VERBOSE OFF turns off verbose mode.
(see Alt-Y)

See also TOGGLE_VERBOSE.

VIEW "filename"
display the specified file one screenfull at a time. Pops up a prompt
if the null filename is given.

Pressing the space bar displays the next screen, Escape exits the
file view.

WAITFOR timeout "wait-string"
wait up to timeout seconds for the specified string of characters to
arrive over the comm port. Useful mainly in conjunction with the
MULTI command (see below).

You may test whether the string was actually received by following
the WAITFOR with IF SUCCESS or IF FAILED (unlike versions prior to
3.11, a failed WAITFOR does not abort the MULTI it is a part of).

See also IF.

WHEN iterations "when-string"
execute the command on the following line (or lines if it is a MULTI)
whenever the "when-string" is encountered in the data stream coming
from the remote system. After the string has been encountered
"iterations" times, the WHEN is automatically canceled (if iterations
is zero, the WHEN must be explicitly canceled with ENDWHEN).
You may have up to six WHENs active at any time (eight if you cancel
the autodownload [see ENDWHEN above]). All WHENs are canceled on
hanging up or dialing a number, and autodownload is re-enabled.

WHENs are tested in the order in which they were executed, so multiple
WHENs with the same when-string will trigger in the order in which
they were asserted.

This can be an extremely powerful command. For example, you can
implement another autodownloading (or uploading!) protocol simply by
adding
WHEN 0 "start-string"
EXEC "xfer-program parms"
to the AUTO or OnLoad macro. On CompuServe, you can make Ymodem
autodownloading by adding
WHEN 0 "initiate YMODEM receive"
RECEIVE 'Y'
to the OnLoad macro.

The built-in Zmodem autodownload corresponds to
WHEN 0 "**^XB00"
RECEIVE 'Z'
while Zmodem auto-upload can be added with
WHEN 0 "**^XB01"
SEND 'Z'

The standard Puma autodownload is equivalent to the lines
WHEN 0 "^X^H^XPuma^X^H^X"
RECEIVE 'P'
[thanks to Matthew Thomas for publishing his autodownload string!].

See also DELAYED, ENDWHEN, WHENI.

WHENI iterations "when-string"
identical to the WHEN command, but ignores case in both the
when-string and the incoming character stream. Thus, a
WHENI 0 "aBc" will match "abc", "ABC", "AbC", etc.

See also WHEN, ENDWHEN.

WINDOW row col width height
limit the terminal emulator to a portion of the full screen.

WINDOW 0 0 255 255 will restore use of the full screen regardless of
the screen size.

-----------
Time Limits
-----------

The maximal time intervals which may be specified for various commands are:
255 ticks (~14 seconds) PAUSE, SOUND
255 seconds (4.25 minutes) WAITFOR
3600 seconds (1 hour) EVERY repeat-interval
18 hours (64800 seconds) DELAYED, EVERY

-----------------------------------------------------------------------------
Ready-Made Macro Files
----------------------

The RBcomm distribution includes the following macro files:

AVATAR.MAC for use with a BBS that supports AVATAR emulation in
its full-screen editor. This file implements the so-
called "DOORWAY mode", passing through all keystrokes.
To access RBcomm's commands, you must use the Alt=
escape key before the RBcomm command key.

AVATOPUS.MAC for use with Opus 1.10 or later BBSs, or compatibles
such as Maximus. Implements DOORWAY mode as AVATAR.MAC
does, but also adds logon scripts for the OPUS CBCS

BAREOPUS.MAC

CPOINT.MAC logon to Central Point Software's BBS

DDJ.MAC logon to M&T Publishing's BBS to access the DDJ listings

EMACS.MAC for use with Unix systems. Turns your Alt key into a
Meta key.

EXAMPLES.MAC various sample macros illustrating different features.

LK201.MAC emulate an LK201 keyboard

OPUS.MAC

QDECK.MAC logon to Quarterdeck's BBS

RBCOMM.MAC default macros

VT100.MAC emulate a VT100 keyboard

VT3270.MAC emulate a VT100/IBM 3270 keyboard

VT52.MAC emulate a VT52 keyboard

WORDSTAR.MAC send WordStar motion commands using arrow keys

-----------------------------------------------------------------------------
Writing your own Help Files
---------------------------

Help files are plain ASCII files with the exception that several control
characters are used to change character attributes within a line (each
line starts with the default attributes).

^A (A)lternate foreground and background colors, thus turning
reverse video on or off
^B toggle the (B)old bit
^D reset to (D)efault attributes
^E switch to underlined color as defined by RBCONFIG
^F toggle (F)lashing (blink bit)

-----------------------------------------------------------------------------
Acknowledgements
----------------

Thanks to Thomas Zerucha for his numerous comments and suggestions, many of
which have been implemented.

Thanks to Walter Cox for his comments and suggestions on v2.81, one of the
included keyboard bindings, and his patience in testing new versions.

Thanks to Mike Weaver for his comments and suggestions, some of which have
been implemented.

Thanks to Dave Doren for banging on the macro language and reporting bugs
and possible enhancements.

-----------------------------------------------------------------------------
Program History
---------------

v2.72 9/3/89 first public release
v2.81 10/4/89 second public release
v3.01 1/6/90 third public release
v3.12 4/28/90 fourth public release
v3.21 7/29/90 fifth public release
v3.31 2/3/91 sixth public release

v3.32 2/17/91 restored command entry from help screen
added %/ and %\ expansions
dialing dir now uses pager, capacity increased to 40 entries
v3.33 3/17/91 removed SAVE_MACRO/UI_MENU, saving 380 bytes
simplified macro learning to single key, saving 330 bytes
macro file format changes
current macro file now kept if new file not found or invalid
new compiled dialing directory allows up to 250 entries
v3.34 4/10/91 directory pager can now back up on very large directories
scrollback buffer can now be written to a file
added ALARM, MUSIC, PLAY, SOUND, TFLUSH commands
v3.35 3/15/92 rearranged RBcomm private terminal functions
fixed scrollback and pager problems
added AVATAR, EXPAND_BLANK, and RBCOMM_CMDS commands
added optional BIOS writes for serial input
now supports 115200 bps
no longer randomly drops behind actual end of serial input at
extremely high speeds
v3.36 8/23/92 now hide DESQview mouse pointer while inside RBcomm window
speed optimizations
reworked RBCONFIG for greater ease of use
enhanced DIALDIR and merged it into RBCONFIG
v3.40 1/3/93 fixed RBCONFIG serial-port-info update & dialdir Move bugs
added DVEXEC, TRIM, LTRIM, and RTRIM commands
added #DOWNLOAD_x and #UPLOAD_x metacommands, %F expansion
the elusive dialing rollover bug has been squashed
the number pad with NumLock on can now be distinguished
from the typewriter number keys using the NP_n keynames
MACRO.COM can no longer decompile, but can compile
multiple macro files at one time
(seventh public release)
v3.41 1/10/93 fixed RBCONFIG "out of memory" bug when trying to edit dialdir
fixed macro compiler multiple-file bug (wasn't resetting
#defkeys between files)
WAITFOR and WHEN were broken when parity stripping was enabled
SENDFILE had been broken by v3.40. Fixed.
added STRIP_PARITY macro command
(eighth public release)
v3.42 12/11/94 numerous bugfixes (see README)
increased number of comm port definitions from four to eight
reworked display update code
added WHENI command
v3.43 12/28/94 reworked serial port code to support future enhancements
added EVERY command
v3.44 1/1/95 fixed RBCONFIG out-of-memory error for good
made receive buffer's size adjustable
moved terminal emulation command sequences into TERM-EMU.DOC
v3.45 1/22/95 fixed bugs introduced in v3.42-v3.44
(ninth public release)


  3 Responses to “Category : Recently Uploaded Files
Archive   : RBCOM345.ZIP
Filename : RBCOMM.DOC

  1. Very nice! Thank you for this wonderful archive. I wonder why I found it only now. Long live the BBS file archives!

  2. This is so awesome! 😀 I’d be cool if you could download an entire archive of this at once, though.

  3. But one thing that puzzles me is the “mtswslnkmcjklsdlsbdmMICROSOFT” string. There is an article about it here. It is definitely worth a read: http://www.os2museum.com/wp/mtswslnk/