Merge branch 'upstream' into test
[ckermit.git] / ckcbwr.txt
diff --git a/ckcbwr.txt b/ckcbwr.txt
deleted file mode 100644 (file)
index 5e70e65..0000000
+++ /dev/null
@@ -1,1467 +0,0 @@
-
-                      C-Kermit 8.0 General Hints and Tips
-
-     Frank da Cruz
-     [1]The Kermit Project, [2]Columbia University
-
-   As of: C-Kermit 8.0.211, 17 March 2003
-   This page last updated: Sat Apr 10 16:37:37 2004 (New York USA Time)
-
-     IF YOU ARE READING A PLAIN-TEXT version of this document, it is a
-     plain-text dump of a Web page. You can visit the original (and
-     possibly more up-to-date) Web page here:
-
-  [3]http://www.columbia.edu/kermit/ckcbwr.html
-
-   This document contains platform-independent C-Kermit hints and tips.
-   Also see the platform-specific C-Kermit hints and tips document for
-   your platform, for example:
-
-  [4]http://www.columbia.edu/kermit/ckubwr.html
-
-   for Unix. This document also applies to [5]Kermit 95 for Windows,
-   which is based on C-Kermit.
-
-   [ [6]C-Kermit ] [ [7]TUTORIAL ]
-    ________________________________________________________________________
-
-  CONTENTS
-
-   0. [8]PATCHES
-   1. [9]INCOMPATIBLE CHANGES
-   2. [10]THE C-KERMIT COMMAND PARSER
-   3. [11]MULTIPLE SESSIONS
-   4. [12]NETWORK CONNECTIONS
-   5. [13]MODEMS AND DIALING
-   6. [14]DIALING HINTS AND TIPS
-   7. [15]TERMINAL SERVERS
-   8. [16]TERMINAL EMULATION
-   9. [17]KEY MAPPING
-  10. [18]FILE TRANSFER
-  11. [19]SCRIPT PROGRAMMING
-    ________________________________________________________________________
-
-  0. PATCHES
-
-   [ [20]Top ] [ [21]Contents ] [ [22]Next ]
-
-   Source-level patches for C-Kermit 8.0.211:
-
-     (None)
-    ________________________________________________________________________
-
-  1. INCOMPATIBLE CHANGES
-
-   [ [23]Top ] [ [24]Contents ] [ [25]Next ]
-
-   These are not necessarily exhaustive lists.
-
-  1.1. C-Kermit 6.0
-
-   C-Kermit 6.0 was released 6 September 1996 and is completely
-   documented in [26]Using C-Kermit, 2nd Edition. The following
-   incompatible changes were made in C-Kermit 6.0:
-
-     * Unless you tell C-Kermit otherwise, if a serial or network
-       connection seems to be open, and you attempt to EXIT or to open a
-       new connection, C-Kermit warns you that an active connection
-       appears to be open and asks you if you really want to close it. If
-       you do not want these warnings, add SET EXIT WARNING OFF to your
-       customization file or script, or give this command at the prompt.
-     * The default for SET { SEND, RECEIVE } PATHNAMES was changed from
-       ON to OFF, to prevent unexpected creation of directories and
-       depositing of incoming files in places you might not know to look.
-     * The default for SET FILE INCOMPLETE was changed from DISCARD to
-       KEEP to allow for file transfer recovery.
-     * The default file-transfer block-check is now 3, rather than 1. If
-       the other Kermit does not support this, the two will drop back to
-       type 1 automatically unless the other Kermit fails to follow the
-       protocol specification.
-     * The default flow-control is now "auto" ("do the right thing for
-       each type of connection"), not Xon/Xoff.
-     * Backslash (\) is no longer a command continuation character. Only
-       - (hyphen, dash) may be used for this in C-Kermit 6.0 and later.
-     * Negative INPUT timeout now results in infinite wait, rather than 1
-       second.
-
-  1.2. C-Kermit 7.0
-
-   C-Kermit 7.0 was released 1 January 2000. Its new features are
-   documented in the C-Kermit 7.0 Supplement,
-   [27]http://www.columbia.edu/kermit/ckermit2.html. The following
-   incompatible changes were made in C-Kermit 7.0:
-     * The "multiline GET" command is gone. Now use either of the
-       following forms instead:
-  get remote-name local-name
-  get /as-name:local-name remote-name
-       If either name contains spaces, enclose it in braces (or, in
-       C-Kermit 8.0, doublequotes).
-     * To include multiple file specifications in a GET command, you must
-       now use MGET rather than GET:
-  mget file1 file2 file3 ...
-     * C-Kermit 7.0 and later use FAST Kermit protocol settings by
-       default. This includes "unprefixing" of certain control
-       characters. Because of this, file transfers that worked with
-       previous releases might not work in the new release especially
-       against a non-Kermit-Project Kermit protocol implementation (but
-       it is more likely that they will work, and much faster). If a
-       transfer fails, you'll get a context-sensitive hint suggesting
-       possible causes and cures. Usually SET PREFIXING ALL does the
-       trick.
-     * By default C-Kermit 7.0 and later send files in text or binary
-       mode by looking at each file to see which is the appropriate mode.
-       To restore the previous behavior, put SET TRANSFER MODE MANUAL and
-       the desired SET FILE TYPE (TEXT or BINARY) in your C-Kermit
-       initialization file.
-     * The RESEND and REGET commands automatically switch to binary mode;
-       previously if RESEND or REGET were attempted when FILE TYPE was
-       TEXT, these commands would fail immediately, with a message
-       telling you they work only when the FILE TYPE is BINARY. Now they
-       simply do this for you.
-     * SET PREFIXING CAUTIOUS and MINIMAL now both prefix linefeed (10
-       and 138) in case rlogin, ssh, or cu are "in the middle", since
-       otherwise <LF>~ might appear in Kermit packets, and this would
-       cause rlogin, ssh, or cu to disconnect, suspend,escape back, or
-       otherwise wreck the file transfer. Xon and Xoff are now always
-       prefixed too, even when Xon/Xoff flow control is not in effect,
-       since unprefixing them has proven dangerous on TCP/IP connections.
-     * In UNIX, VMS, Windows, and OS/2, the DIRECTORY command is built
-       into C-Kermit itself rather than implemented by running an
-       external command or program. The built-in command might not behave
-       the way the platform-specific external one did, but many options
-       are available for customization. Of course the underlying
-       platform-specific command can still be accessed with "!", "@", or
-       "RUN" wherever the installation does not forbid. In UNIX, the "ls"
-       command can be accessed directly as "ls" in C-Kermit.
-     * SEND ? prints a list of switches rather than a list of filenames.
-       If you want to see a list of filenames, use a (system-dependent)
-       construction such as SEND ./? (for UNIX, Windows, or OS/2), SEND
-       []? (VMS), etc.
-     * In UNIX, OS-9, and Kermit 95, the wildcard characters in previous
-       versions were * and ?. In C-Kermit 7.0 they are *, ?, [, ], {, and
-       }, with dash used inside []'s to denote ranges and comma used
-       inside {} to separate list elements. If you need to include any of
-       these characters literally in a filename, precede each one with
-       backslash (\).
-     * SET QUIET { ON, OFF } is now on the command stack, just like SET
-       INPUT CASE, SET COUNT, SET MACRO ERROR, etc, as described on p.458
-       of [28]Using C-Kermit, 2nd Edition. This allows any macro or
-       command file to SET QUIET ON or OFF without worrying about saving
-       and restoring the global QUIET value. For example, this lets you
-       write a script that tries SET LINE on lots of devices until it
-       finds one free without spewing out loads of error messages, and
-       also without disturbing the global QUIET setting, whatever it was.
-     * Because of the new "." operator (which introduces assignments),
-       macros whose names begin with "." can not be invoked "by name".
-       However, they still can be invoked with DO or \fexecute().
-     * The syntax of the EVALUATE command has changed. To restore the
-       previous syntax, use SET EVALUATE OLD.
-     * The \v(directory) variable now includes the trailing directory
-       separator; in previous releases it did not. This is to allow
-       constructions such as:
-  cd \v(dir)data.tmp
-       to work across platforms that might have different directory
-       notation, such as UNIX, Windows, and VMS.
-     * Prior to C-Kermit 7.0, the FLOW-CONTROL setting was global and
-       sticky. In C-Kermit 7.0, there is an array of default flow-control
-       values for each kind of connection, that are applied automatically
-       at SET LINE/PORT/HOST time. Thus a SET FLOW command given before
-       SET LINE/PORT/HOST is likely to be undone. Therefore SET FLOW can
-       be guaranteed to have the desired effect only if given after the
-       SET LINE/PORT/HOST command.
-     * Character-set translation works differently in the TRANSMIT
-       command when (a) the file character-set is not the same as the
-       local end of the terminal character-set, or (b) when the terminal
-       character-set is TRANSPARENT.
-
-  1.3. C-Kermit 8.0
-
-   The following incompatible changes were made in C-Kermit 8.0:
-     * C-Kermit now accepts doublequotes in most contexts where you
-       previously had to use braces to group multiple words into a single
-       field, or to force inclusion of leading or trailing blanks. This
-       might cause problems in contexts where you wanted the doublequote
-       characters to be taken literally. Consult [29]Section 5 of the
-       [30]C-Kermit 8.0 Update Notes for further information.
-     * Using the SET HOST command to make HTTP connections is no longer
-       supported. Instead, use the new [31]HTTP OPEN command.
-    ________________________________________________________________________
-
-  2. THE C-KERMIT COMMAND PARSER
-
-   [ [32]Top ] [ [33]Contents ] [ [34]Next ] [ [35]Previous ]
-
-   Various command-related limits are shown in the following table, in
-   which the sample values are for a "large memory model" build of
-   C-Kermit, typical for modern platforms (Linux, Solaris, AIX, VMS,
-   etc). You can see the values for your version of Kermit by giving the
-   SHOW FEATURES command. The maximum length for a Kermit command (CMDBL)
-   also determines the maximum length for a macro definition, since
-   DEFINE is itself a command. The maximum length for a variable name is
-   between 256 and 4096 characters, depending on the platform; for array
-   declarations and references, that includes the subscript.
-       ______________________________________________________________
-
-   Item Symbol Sample
-   Value Definition
-   Number of characters in a command CMDBL 32763 ckucmd.h
-   Number of chars in a field of a command    ATMBL 10238 ckucmd.h
-   Nesting level for command files MAXTAKE 54   ckuusr.h
-   Nesting level for macros MACLEVEL 128 ckuusr.h
-   Nesting level for FOR / WHILE loops FORDEPTH 32 ckuusr.h
-   Number of macros MAC_MAX 16384 ckuusr.h
-   Size of INPUT buffer INPBUFSIZ 4096 ckuusr.h
-   Maximum files to match a wildcard MAXWLD    102400 ckcdeb.h
-   Filespecs in MSEND command MSENDMAX 1024 ckuusr.h
-   Length for GOTO target label LBLSIZ 50 ckuusr.h
-   \fexecute() recursion depth limit CMDDEP 64 ckucmd.h
-       ______________________________________________________________
-
-   If you need to define a macro that is longer than CMDBL, you can break
-   the macro up into sub-macros or rewrite the macro as a command file.
-   In a pinch you can also redefine CMDBL and recompile C-Kermit. All of
-   these numbers represent tradeoffs: the bigger the number, the more
-   "powerful" Kermit in the corresponding area, but also the bigger the
-   program image and possibly disk footprint, and the longer it takes to
-   load and initialize.
-
-   In the interactive command parser:
-
-     * EMACS- or VI-style command line editing is not supported.
-     * Editing keys are hardwired (Ctrl-U, Ctrl-W, etc).
-
-   If you interrupt C-Kermit before it has issued its first prompt, it
-   will exit. This means that you cannot interrupt execution of the
-   initialization file, or of an "application file" (file whose name is
-   given as the first command-line argument), or of an alternative
-   initialization file ("-y filename"), and get to the prompt. There is,
-   however, one exception to this rule: you *can* interrupt commands --
-   including TAKE commands -- given in the '-C "command list"'
-   command-line argument and -- if there were no action commands among
-   the command-line arguments -- you will be returned to the C-Kermit
-   prompt. So, for example, if you want to start C-Kermit in such a way
-   that it executes a command file before issuing its first prompt, and
-   you also want to be able to interrupt the command file and get to the
-   prompt, include a TAKE command for the desired command in the -C
-   argument, for example:
-
-  kermit -C "take dial.scr"
-
-   At the command prompt, if you use the backslash (\) prefix to enter a
-   control character, space, or question mark into a command literally,
-   the backslash disappears and is replaced by the quoted character. If
-   it was a control character, it is shown as a circumflex (^). This
-   allows editing (backspace, delete, Ctrl-W) to work correctly even for
-   control characters.
-
-   Priot to C-Kermit 8.0, the only way to include a comma literally in a
-   macro definition -- as opposed to having it separate commands within
-   the definition -- is to enter its ASCII value (44) in backslash
-   notation, e.g.:
-
-  DEFINE ROWS RUN MODE CO80\{44}\%1
-
-   In C-Kermit 8.0 you can use constructions like this:
-
-  DEFINE ROWS RUN MODE "CO80,\%1"
-
-   If you quote special characters in a filename (e.g. in the SEND
-   command), filename completion may seem to work incorrectly. For
-   example, if you have a file whose name is a*b (the name really
-   contains an asterisk), and you type "send a\\*<ESC>", the "b" does not
-   appear, nor will Ctrl-R redisplay the completed name correctly. But
-   internally the file name is recognized anyway.
-
-   Question-mark help does not work during execution of an ASKQ command.
-   The question marks are simply accepted as text.
-
-   In OUTPUT commands only, \B sends a BREAK signal, \L sends a Long
-   BREAK signal, and \N sends a NUL (ASCII 0). BREAK and Long BREAK are
-   special signals, not characters, and NUL is a character that normally
-   cannot be included in a C string, since it is the C string terminator.
-   If you really want to output a backslash followed by a B, an L, or an
-   N (as is needed to configure certain modems, etc), double the
-   backslash, e.g. "output \\B". In C-Kermit 7.0 or later, you can disarm
-   and re-arm the special OUTPUT-command escapes (\B, \L, and \N) with
-   SET OUTPUT SPECIAL-ESCAPES { OFF, ON }.
-
-   When using the command-line processor ("kermit -l /dev/tty00 -b
-   19200", etc), note that in some cases the order of the command-line
-   options makes a difference, contrary to the expectation that order of
-   command-line options should not matter. For example, the -b option
-   must be given after the -l option if it is to affect the device
-   specified in the -l option.
-    ________________________________________________________________________
-
-  3. MULTIPLE SESSIONS
-
-   [ [36]Top ] [ [37]Contents ] [ [38]Next ] [ [39]Previous ]
-
-   C-Kermit 7.0 and earlier do not support multiple sessions. When you
-   SET LINE (or SET PORT, same thing) to a new device, or SET HOST to a
-   new host, the previous SET LINE device or network host connection is
-   closed, resulting in hangup of the modem or termination of the network
-   connection. In windowing environments like HP-VUE, NeXTSTEP, Windows,
-   OS/2, etc, you can run separate copies of Kermit in different windows
-   to achieve multiple sessions.
-
-   To achieve multiple sessions through a single serial port (e.g. when
-   dialing up), you can install SLIP or PPP on your computer and then use
-   C-Kermit's TCP/IP support over the SLIP or PPP connection, assuming
-   you also have TCP/IP networking installed on your computer.
-
-   C-Kermit 8.0 has the same restriction on SET LINE and SET HOST
-   sessions: only one regular session (dialout, Telnet, etc) can be open
-   at a time. However, version 8.0 adds two new kinds of sessions: FTP
-   and HTTP; one or both of these can be open at the same as a regular
-   session.
-    ________________________________________________________________________
-
-  4. NETWORK CONNECTIONS
-
-   [ [40]Top ] [ [41]Contents ] [ [42]Next ] [ [43]Previous ]
-
-  FTP Client Bugs
-
-   The Unix C-Kermit 8.0.206 FTP client had the following bugs at the
-   time most of the 8.0.206 binaries were built for the C-Kermit 8.0
-   CDROM:
-
-    1. FTP MGET fails when directory segments contain wildcards, as in
-       "ftp mget */data/*.dat". Work around by doing a separate MGET for
-       each source directory.
-    2. FTP MGET can fail or produce random side effects if you have a
-       TMPDIR or CK_TMP environment variable definition in effect, or a
-       SET TEMP-DIRECTORY value, longer than 7 characters. Work around by
-       giving a SET TEMP-DIRECTORY command with a short value, such as
-       "/tmp".
-
-   These two bugs are fixed in the source code that is included on the
-   CDROM, and also in Kermit 95 2.1.1. You can tell if a C-Kermit 8.0.206
-   binary has these fixes by typing SHOW VERSION; if it says "FTP Client,
-   8.0.200, 24 Oct 2002" it has the fixes; if the edit number is less
-   that 200, it doesn't, in which case can build a new binary from the
-   source code (or contact us and we'll try to get get one for you).
-
-  Making TCP/IP Connections Can Take a Long Time
-
-   The most frequently asked question in many newsgroups is "Why does it
-   take such a long time to make a Telnet connection to (or from) my
-   (e.g.) Linux PC?" (this applies to Kermit as well as to regular Telnet
-   clients):
-
-    1. Most Telnet servers perform reverse DNS lookups on the client for
-       security and/or logging reasons. If the Telnet client's host
-       cannot be found by the server's local DNS server, the DNS request
-       goes out to the Internet at large, and this can take quite some
-       time. The solution to this problem is to make sure that both
-       client and host are registered in DNS.
-    2. C-Kermit itself performs reverse DNS lookups unless you tell it
-       not to. This is to allow C-Kermit to let you know which host it is
-       actually connected to in case you have made a connection to a
-       "host pool" (multihomed host). You can disable C-Kermit's reverse
-       DNS lookup with SET TCP REVERSE-DNS-LOOKUP OFF.
-    3. C-Kermit 7.0 and later strictly enforce Telnet protocol rules. One
-       such rule is that certain negotiations must be responded to. If
-       C-Kermit sends a such a negotiation and the host does not respond,
-       C-Kermit waits a long time for the reply (in case the network is
-       congested or the host is slow), but eventually will time out. To
-       eliminate the waits (and therefore risk possible protocol
-       mismatches -- or worse -- between Telnet client and server), tell
-       C-Kermit to SET TELNET WAIT OFF (or include the /NOWAIT switch
-       with the TELNET command).
-
-  The Rlogin Client
-
-   In multiuser operating systems such as UNIX and VMS, TCP/IP Rlogin
-   connections are available only to privileged users, since "login" is a
-   privileged socket. Assuming you are allowed to use it in the first
-   place, it is likely to behave differently depending on what type of
-   host you are rlogging in to, due to technical reasons having to do
-   with conflicting interpretations of RFC793 (Out-Of-Band Data) and
-   Rlogin (RFC1122)... "Specifically, the TCP urgent pointer in BSD
-   points to the byte after the urgent data byte, and an RFC-compliant
-   TCP urgent pointer points to the urgent data byte. As a result, if an
-   application sends urgent data from a BSD-compatible implementation to
-   an [44]RFC-1122 compatible implementation then the receiver will read
-   the wrong urgent data byte (it will read the byte located after the
-   correct byte in the data stream as the urgent data byte)." Rlogin
-   requires the use of OOB data while Telnet does not. Therefore, it is
-   possible for Telnet to work between all systems while BSD and System V
-   TCP/IP implementations are almost always a bad mix.
-
-  The Telnet Client
-
-   On a TCP/IP TELNET connection, you should normally have PARITY set to
-   NONE and (except in VMS C-Kermit) FLOW-CONTROL also set to NONE. If
-   file transfer does not work with these settings (for example, because
-   the remote TELNET server only gives a 7-bit data path), use SET PARITY
-   SPACE. Do not use SET PARITY MARK, EVEN, or ODD on a TELNET connection
-   -- it interferes with TELNET protocol.
-
-   If echoing does not work right after connecting to a network host or
-   after dialing through a TCP/IP modem server, it probably means that
-   the TELNET server on the far end of the connection is executing the
-   TELNET protocol incorrectly. After initially connecting and
-   discovering incorrect echoing (characters are echoed twice, or not at
-   all), escape back, give the appropriate SET DUPLEX command (FULL or
-   HALF), and then CONNECT again. For a consistently misbehaving
-   connection, you can automate this process in a macro or TAKE file.
-
-   TELNET sessions are treated just like serial communications sessions
-   as far as "terminal bytesize" and "command bytesize" are concerned. If
-   you need to view and/or enter 8-bit characters during a TELNET
-   session, you must tell C-Kermit to SET TERMINAL BYTESIZE 8, SET
-   COMMAND BYTESIZE 8, and SET PARITY NONE.
-
-   If you SET TELNET DEBUG ON prior to making a connection, protocol
-   negotiations will be displayed on your screen. You can also capture
-   them in the debug log (along with everything else) and then extract
-   them easily, since all Telnet negotiations lines begin with
-   (uppercase) "TELNET".
-    ________________________________________________________________________
-
-  5. MODEMS AND DIALING
-
-   [ [45]Top ] [ [46]Contents ] [ [47]Next ] [ [48]Previous ]
-
-   External modems are recommended because:
-
-     * They don't need any special drivers.
-     * They are less likely to interfere with normal operation of your
-       computer.
-     * You can use the lights and speaker to troubleshoot dialing.
-     * You can share them among all types of computers.
-     * You can easily turn them off and on when power-cycling seems
-       warranted.
-     * They are more likely to have manuals.
-
-   Modems can be used by C-Kermit only when they are visible as or
-   through a regular serial port device. Certain modems can not be used
-   in this normal way on many kinds of computers: Winmodems, RPI modems,
-   Controllerless modems, the IBM Mwave, etc; all of these require
-   special drivers that perform some, most, or all of the modem's
-   functions in software. Such drivers are generally NOT available in
-   UNIX or other non-Windows (or non-OS/2, in the case of the Mwave)
-   platforms.
-
-   In order to dial a modem, C-Kermit must know its repertoire of
-   commands and responses. Each modem make and model is likely to have a
-   different repertoire. Since Kermit has no way of knowhing which kind
-   of modem will be dialed, normally you have to tell it with a SET MODEM
-   TYPE command, e.g.:
-
-  set modem type usrobotics
-  set line /dev/cua0
-  set speed 57600
-  dial 7654321
-
-   In the early days, there was a wide variety of modems and command
-   languages. Nowadays, almost every modem uses the Hayes AT command set
-   (but with some differences in the details) and its startup
-   configuration includes error correction, data compression, and
-   hardware (RTS/CTS) flow control. As long as C-Kermit is capable of
-   hardware flow control (as it is on many, but not all, the platforms
-   where it runs, since some operating systems don't support it), the
-   modem can be dailed immediately, without lengthy configuration
-   dialogs, and in fact this is what SET MODEM TYPE GENERIC-HIGH-SPEED
-   does. In C-Kermit 8.0, GENERIC-HIGH-SPEED has become the default modem
-   type, so now it is usually possible to SET LINE, SET SPEED, and DIAL
-   without having to identify your modem. If this doesn't work, of
-   course, then you might have to fall back to the tradiational method:
-   Give a SET MODEM TYPE for a specific modem first, then SET LINE, SET
-   SPEED, and DIAL.
-
-   An important change in C-Kermit 6.0 is that when you give a SET MODEM
-   TYPE command to tell Kermit what kind of modem you have, Kermit also
-   sets a number of other modem-related parameters automatically from its
-   internal modem database. Thus, the order in which you give
-   modem-related commands is significant, whereas in prior releases they
-   could be given in any order.
-
-   In particular, MODEM SPEED-MATCHING is set according to whether the
-   modem is known to be capable of speed buffering. SET MODEM TYPE
-   HAYES-2400 automatically turns SPEED-MATCHING ON, because when the
-   Hayes 2400 reports a particular speed in its CONNECT message, that
-   means its interface speed has changed to that speed, and C-Kermit's
-   must change accordingly if it is to continue communicating. This might
-   cause some confusion if you use "set modem type hayes" for dialing a
-   more advanced type of modem.
-
-   The new default for flow control is "auto", meaning "do the right
-   thing for each type of connection". So (for example) if your version
-   of C-Kermit supports SET FLOW RTS/CTS and your modem also supports
-   RTS/CTS, then Kermit automatically sets its flow control to RTS/CTS
-   and set modem's flow control to RTS/CTS too before attempting to use
-   the modem.
-
-   For these reasons, don't assume that "set modem type hayes" should be
-   used for all modems that uses the Hayes AT command set. "set modem
-   type hayes" really does mean Hayes 1200 or 2400, which in turn means
-   no hardware flow control, and no speed buffering. This choice will
-   rarely work with a modern high-speed modem.
-    ________________________________________________________________________
-
-  6. DIALING HINTS AND TIPS
-
-   [ [49]Top ] [ [50]Contents ] [ [51]Next ] [ [52]Previous ]
-
-   If you have a high-speed, error-correcting, data-compressing,
-   speed-buffering modem, you should fix the modem's interface speed as
-   high as possible, preferably (at least) four times higher than its
-   maximum connection (modulation) speed to allow compression to work at
-   full advantage. In this type of setup, you must also have an effective
-   means of flow control enabled between C-Kermit and the modem,
-   preferably hardware (RTS/CTS) flow control. On platforms that do not
-   support hardware flow control, it is usually possible to select
-   software flow control (Xon/Xoff), and C-Kermit will do its best to set
-   the modem for local Xon/Xoff flow control too (but then, of course,
-   Ctrl-S and Ctrl-Q characters can not be transmitted on the
-   connection).
-
-   If you are having trouble dialing your modem, SET DIAL DISPLAY ON to
-   watch the dialing interactions between C-Kermit and your modem.
-   Consult Chapters 3-4 of [53]Using C-Kermit (2nd Ed) for modem-dialing
-   troubleshooting instructions. The following sections offer some
-   addtional hints and tips.
-
-  6.1. Syntax
-
-   If you want to dial a number that starts with #, you'll need to quote
-   the "#" character (as \# or \{35}), since it is also a comment
-   introducer:
-
-  C-Kermit>dial #98765421-1-212-5551212   ; Looks like a comment
-  ?You must specify a number to dial
-  C-Kermit>dial \#98765421-1-212-5551212  ; Works OK
-  C-Kermit>dial =#98765421-1-212-5551212  ; This works too
-
-   When using a dialing directory, remember what happens if a name is not
-   found:
-
-  C-Kermit>dial xyzcorp
-  Lookup: "xyzcorp" - not found - dialing as given
-
-   This normally does no harm, but some modems might behave strangely
-   when given dial strings that contain certain letters. For example, a
-   certain German modem treats any dial string that contains the letter
-   "s" as a command to fetch a number from its internal list, and replies
-   OK to the ATD command, which is normally not a valid response except
-   for partial dialing. To avoid this situation, use:
-
-  lookup xyzcorp
-  if success dial
-
-  6.2. The Carrier Signal
-
-   Remember: In many C-Kermit implementations (depending on the
-   underlying operating system -- mostly Windows, OS/2, and
-   System-V-based UNIX versions, and in C-Kermit 7.0, also VMS), you
-   can't CONNECT to a modem and type the modem's dialing command (like
-   "ATDT7654321") manually, unless you first tell C-Kermit to:
-
-  SET CARRIER-WATCH OFF
-
-   This is because (in these implementations), the CONNECT command
-   requires the modem's Carrier Detect (CD) signal to be on, but the CD
-   signal doesn't come on until after dialing is complete. This
-   requirement is what allows C-Kermit to pop back to its prompt
-   automatically when the connection is hung up. See the description of
-   SET CARRIER-WATCH in "Using C-Kermit".
-
-   Similarly, if your dialed connection drops when CARRIER-WATCH is set
-   to AUTO or ON, you can't CONNECT back to the (now disconnected) screen
-   to see what might have happened unless you first SET CARRIER-WATCH
-   OFF. But sometimes not even SET CARRIER-WATCH OFF will help in this
-   situation: certain platforms (for example Unixware 2.1), once carrier
-   drops, won't let the application do i/o with the device any more. In
-   that case, if you want to use the device again, you have to CLOSE it
-   and OPEN it again. Or you can have Kermit do this for you
-   automatically by telling it to SET CLOSE-ON-DISCONNECT ON.
-
-  6.3. Dialing and Flow Control
-
-   Don't SET FLOW RTS/CTS if your modem is turned off, or if it is not
-   presenting the CTS signal. Otherwise, the serial device driver can get
-   stuck waiting for this signal to appear.
-
-   Most modern modems support RTS/CTS (if they support any hardware flow
-   control at all), but some computers use different RS-232 circuits for
-   the same purposes, e.g. DTR and CD, or DTR and CTS. In such cases, you
-   might be able to make your computer work with your modem by
-   appropriately cross-wiring the circuits in the cable connector, for
-   example the computer's DTR to the modem's RTS, and modem's CD to the
-   computer's CTS. HOWEVER, C-Kermit does not know you have done this. So
-   if you have (say) SET FLOW DTR/CD, C-Kermit will make no attempt to
-   tell the modem to use RTS/CTS. You probably did this yourself when you
-   configured the modem.
-
-  6.4. The Dial Timeout
-
-   If it takes your call longer to be completed than the timeout interval
-   that C-Kermit calculates, you can use the SET DIAL TIMEOUT command to
-   override C-Kermit's value. But beware: the modem has its own timeout
-   for completing the call. If it is a Hayes-like modem, C-Kermit adjusts
-   the modem's value too by setting register S7. But the maximum value
-   for S7 might be smaller than the time you need! In that case, C-Kermit
-   sets S7 to 0, 255, or other (modem-specific) value to signify "no
-   timeout". If Kermit attempts to set register S7 to a value higher than
-   your modem's maximum, the modem will say "ERROR" and you will get a
-   "Failure to initialize modem" error. In that case, use SET DIAL
-   TIMEOUT to override C-Kermit's calculation of the timeout value with
-   the highest value that is legal for your modem, e.g. 60.
-
-  6.5. Escape Sequence Guard Time
-
-   A "TIES" (Time-Independent Escape Sequence) modem does not require any
-   guard time around its escape sequence. The following text:
-
-  +++ATH0
-
-   if sent through a TIES modem, for example because you were uploading
-   this file through it, could pop the modem back into command mode and
-   make it hang up the connection. Later versions of the Telebit T1600
-   and T3000 (version LA3.01E firmware and later), and all WorldBlazers,
-   use TIES.
-
-   Although the probability of "+++" appearing in a Kermit packet is
-   markedly lower than with most other protocols (see the [54]File
-   Transfer section below), it can still happen under certain
-   circumstances. It can also happen when using C-Kermit's TRANSMIT
-   command. If you are using a Telebit TIES modem, you can change the
-   modem's escape sequence to an otherwise little-used control character
-   such as Ctrl-_ (Control-Underscore):
-
-  AT S2=31
-
-   A sequence of three consecutive Ctrl-_ characters will not appear in a
-   Kermit packet unless you go to extraordinary lengths to defeat more
-   than a few of Kermit's built-in safety mechanisms. And if you do this,
-   then you should also turn off the modem's escape-sequence recognition
-   altogether:
-
-  AT S48=0 S2=255
-
-   But when escape sequence recognition is turned off, "modem hangup"
-   (<pause>+++<pause>ATH0<CR>) will not work, so you should also SET
-   MODEM HANGUP RS232-SIGNAL (rather then MODEM-COMMAND).
-
-  6.6. Adaptive Dialing
-
-   Some modems have a feature called adaptive dialing. When they are told
-   to dial a number using Tone dialing, they check to make sure that
-   dialtone has gone away after dialing the first digit. If it has not,
-   the modem assumes the phone line does not accept Tone dialing and so
-   switches to Pulse. When dialing out from a PBX, there is almost always
-   a secondary dialtone. Typically you take the phone off-hook, get the
-   PBX dialtone, dial "9" to get an outside line, and then get the phone
-   company's dialtone. In a situation like this, you need to tell the
-   modem to expect the secondary dialtone. On Hayes and compatible
-   modems, this is done by putting a "W" in the dial string at the
-   appropriate place. For example, to dial 9 for an outside line, and
-   then 7654321, use ATDT9W7654321:
-
-  SET PBX-OUTSIDE-PREFIX 9W
-
-   (replace "9" with whatever your PBX's outside-line prefix is).
-
-  6.7. The Busy Signal
-
-   Some phone companies are eliminating the busy signal. Instead, they
-   issue a voice message such as "press 1 to automatically redial until
-   the number answers, or...". Obviously this is a disaster for modem
-   calls. If your service has this feature, there's nothing Kermit can do
-   about it. Your modem will respond with NO CARRIER (after a long time)
-   rather than BUSY (immediately), and Kermit will declare the call a
-   failure, rather than trying to redial the same number.
-
-  6.8. Hanging Up
-
-   There are two ways to hang up a modem: by turning off the serial
-   port's DTR signal (SET MODEM HANGUP-METHOD RS232-SIGNAL) or sending
-   the modem its escape sequence followed by its hangup command (SET
-   MODEM HANGUP-METHOD MODEM-COMMAND). If one doesn't work, try the
-   other. If the automatic hangup performed at the beginning of a DIAL
-   command causes trouble, then SET DIAL HANGUP OFF.
-
-   The HANGUP command has no effect when C-Kermit is in remote mode. This
-   is on purpose. If C-Kermit could hang up its own controlling terminal,
-   this would (a) most likely leave behind zombie processes, and (b) pose
-   a security risk.
-
-   If you DIAL a modem, disconnect, then SET HOST or TELNET, and then
-   HANGUP, Kermit sends the modem's hangup command, such as "+++ATHO".
-   There is no good way to avoid this, because this case can't reliably
-   be distinguished from the case in which the user does SET HOST
-   terminal-server, SET MODEM TYPE name, DIAL. In both cases we have a
-   valid modem type selected and we have a network connection. If you
-   want to DIAL and then later make a regular network connection, you
-   will have to SET MODEM TYPE NONE or SET DIAL HANGUP OFF to avoid this
-   phenomenon.
-    ________________________________________________________________________
-
-  7. TERMINAL SERVERS
-
-   [ [55]Top ] [ [56]Contents ] [ [57]Next ] [ [58]Previous ]
-
-   Watch out for terminal server's escape character -- usually a control
-   character such as Ctrl-Circumflex (Ctrl-^). Don't unprefix it in
-   Kermit!
-
-   Ciscos -- must often be told to "terminal download"... Cisco ASM
-   models don't have hardware flow control in both directions.
-
-   Many terminal servers only give you a 7-bit connection, so if you
-   can't make it 8-bit, tell Kermit to "set parity space".
-
-   The following story, regarding trouble transferring 8-bit files
-   through a reverse terminal server, was contributed by an Annex
-   terminal server user:
-
-     Using C-Kermit on an HP 9000 712/80 running the HP-UX 10.0
-     operating system. The HP was connected to a Xylogics Annex
-     MICRO-ELS-UX R7.1 8 port terminal server via ethernet. On the
-     second port of the terminal server is an AT&T Paradyne 3810 modem,
-     which is connected to a telephone line. There is a program which
-     runs on the HP to establish a Telnet connection between a serial
-     line on the Annex and a character special file on the HP (/dev
-     file). This is an Annex specific program called rtelnet (reverse
-     telnet) and is provided with the terminal server software. The
-     rtelnet utility runs on top of the pseudo-terminal facility
-     provided by UNIX. It creates host-originiated connections to
-     devices attached ot Annex serial ports. There are several command
-     line arguments to be specified with this program: the IP address of
-     the terminal server, the number of the port to attach to, and the
-     name of the pseudo-device to create. In addition to these there are
-     options to tell rtelnet how to operate on the connect: -b requests
-     negotiation for Telnet binary mode, -d turns on socket-leve
-     debugging, -f enables "connect on the fly" mode, -r removes the
-     device-name if it already exists, etc. The most important of these
-     to be specified when using 8 data bits and no parity, as we found
-     out, was the -t option. This creates a transparent TCP connection
-     to the terminal server. Again, what we assumed to be happening was
-     that the rtelnet program encountered a character sequence special
-     to itself and then "eating" those kermit packets. I think this is
-     all of the information I can give you on the configuration, short
-     of the values associated with the port on the terminal server.
-
-   How to DIAL from a TCP/IP reverse terminal server (modem server):
-
-    1. (only if necessary) SET TELNET ECHO REMOTE
-    2. SET HOST terminal-server-ip-name-or-address [ port ]
-    3. SET MODEM TYPE modem-type
-    4. (only if necessary) SET DIAL HANGUP OFF
-    5. (for troubleshooting) SET DIAL DISPLAY ON
-    6. DIAL phone-number
-
-   The order is important: SET HOST before SET MODEM TYPE. Since this is
-   a Telnet connection, serial-port related commands such as SET SPEED,
-   SET STOP-BITS, HANGUP (when MODEM HANGUP-METHOD is RS232), etc, have
-   no effect. However, in C-Kermit 8.0, if the modem server supports
-   [59]RFC-2217 Telnet Com-Port Control protocol, these commands do
-   indeed take effect at the server's serial port.
-    ________________________________________________________________________
-
-  8. TERMINAL EMULATION
-
-   [ [60]Top ] [ [61]Contents ] [ [62]Next ] [ [63]Previous ]
-
-   Except for the Windows, OS/2, and Macintosh versions, C-Kermit does
-   not emulate any kind of terminal. Rather, it acts as a
-   "semitransparent pipe", passing the characters you type during a
-   CONNECT session to the remote host, and sending the characters
-   received from the remote host to your screen. Whatever is controlling
-   your keyboard and screen provides the specific terminal emulation: a
-   real terminal, a PC running a terminal emulator, etc, or (in the case
-   of a self-contained workstation) your console driver, a terminal
-   window, xterm, etc.
-
-   Kermit is semitrantsparent rather than fully transparent in the
-   following ways:
-
-     * During a TELNET ("set host") session, C-Kermit itself executes the
-       TELNET protocol and performs TELNET negotiations. (But it does not
-       perform TN3270 protocol or any other type of 3270 terminal
-       emulation.)
-     * If you have changed your keyboard mapping using SET KEY, C-Kermit
-       replaces the characters you type with the characters or strings
-       they are mapped to.
-     * If you SET your TERMINAL CHARACTER-SET to anything but
-       TRANSPARENT, C-Kermit translates your keystrokes (after applying
-       any SET KEY definitions) before transmitting them, and translates
-       received characters before showing them on your screen.
-     * If your remote and/or local TERMINAL CHARACTER-SET is an ISO 646
-       7-bit national character set, such as German, French, Italian,
-       Swedish, etc, or Short KOI used for Cyrillic, C-Kermit's CONNECT
-       command automatically skips over ANSI escape sequences to avoid
-       translating their characters. Only ANSI/ISO standard
-       (VT100/200/300-like) 7-bit escape sequence formats are supported
-       for this purpose, no proprietary schemes like H-P, Televideo,
-       Tektronix, etc.
-     * If your version of C-Kermit includes SET TERMINAL APC command,
-       then C-Kermit's CONNECT command will handle APC escape sequences
-       if TERMINAL APC is not set to OFF (which is the default).
-
-   You can make C-Kermit fully transparent by starting it with the -0
-   (dash zero) command-line option.
-
-   If you are running C-Kermit under a console driver, or in a terminal
-   window, that emulates the VT100, and use C-Kermit to log in to a VMS
-   system, the console driver or terminal window (not Kermit) is supposed
-   to reply to the "what are you?" query (ESC Z) from the VAX. If it
-   doesn't, and you can't make it do so, then you can (a) live with the
-   "unknown terminal" problem; (b) tell VMS to SET TERMINAL/DEVICE=VT100;
-   (c) program a key using SET KEY to send the appropriate sequence and
-   then punch the key at the right time; or (d) use the VMSLOGIN macro
-   that is defined in CKERMIT.INI to do this for you automatically.
-
-   SET SESSION-LOG { TEXT, BINARY }, which is effective in UNIX and
-   AOS/VS but not other C-Kermit versions, removes CR, DEL, NUL, XON, and
-   XOFF characters (Using C-Kermit neglects to mention that XON and XOFF
-   are removed). The TEXT-mode setting is ineffective during SCRIPT
-   command execution, as well as on X.25 connections.
-    ________________________________________________________________________
-
-  9. KEY MAPPING
-
-   [ [64]Top ] [ [65]Contents ] [ [66]Next ] [ [67]Previous ]
-
-   Except in the terminal-emulating versions, C-Kermit's key mapping
-   facilities are limited to normal "ASCII" keys, and cannot be used with
-   function keys, arrow keys, arcane key combinations, etc. Since
-   C-Kermit runs on such a wide variety of hardware platforms (including,
-   for example, more than 360 different UNIX platforms), it is not
-   possible for C-Kermit to support every conceivable keyboard under
-   every release of every UNIX (or VMS, or ...) product on every
-   different kind of computer possibly under all manner of different
-   console drivers, even if it had the means to do so.
-
-   In technical terms, C-Kermit uses the read() function to read
-   keystrokes, and read() returns a single byte (value 0 through 255).
-   C-Kermit's SET KEY function applies to these single-byte codes.
-   "Extended function" keys, such as F-keys, arrow keys, etc, usually
-   return either a 2-byte "scan code" or else a character string (such as
-   an escape sequence like "<ESC> O p"). In both cases, C-Kermit has no
-   way to tell the difference between such multibyte key values, and the
-   corresponding series of single-byte key values. This could only be
-   done by accessing the keyboard at a much lower level in a highly
-   platform-dependent manner, probably requiring tens of thousands of
-   lines of code to support even a sampling of the most popular
-   workstation / OS combinations.
-
-   However, most workstation console drivers (terminal emulation windows,
-   etc) include their own key-mapping facility. For example in AIX, the
-   AIXterm program (in whose window you would run C-Kermit) allows
-   rebinding of the F1-F12 keys to arbitrary strings. The same is true of
-   Xterm and DECterm windows, etc. Consult the technical documentation
-   for your workstation or emulator. See sample Xterm (Xmodmap) mappings
-   in the [68]Unix C-Kermit Hints and Tips document.
-
-   The SET KEY command (except in Kermit 95) does not allow a key
-   definition to be (or contain) the NUL (\0) character.
-    ________________________________________________________________________
-
-  10. FILE TRANSFER
-
-   [ [69]Top ] [ [70]Contents ] [ [71]Next ] [ [72]Previous ]
-
-   C-Kermit 7.0 is the first release of C-Kermit to use fast (rather than
-   robust and therefore slow) protocol defaults: long packets, sliding
-   windows, control-character unprefixing, and streaming where possible.
-   This makes most transfers (partner willing) dramatically faster "out
-   of the box" but might break some combinations that worked before. If
-   transfers with C-Kermit 7.0 or later fail where transfers worked with
-   earlier C-Kermit versions, try the following (one at a time, in this
-   order):
-
-    1. SET PREFIXING ALL: Disables control-character unprefixing.
-    2. SET STREAMING OFF: Disables streaming.
-    3. CAUTIOUS: Selects medium but cautious protocol settings.
-    4. ROBUST: this command reverts to the most conservative protocol
-       settings.
-
-   Execution of multiple file transfers by C-Kermit from a command file
-   when in remote mode might exhibit long delays between each transfer.
-   To avoid this, just include the command "SET DELAY 0" in your command
-   file before any of the file-transfer commands.
-
-   File transfer failures can occur for all sorts of reasons, most of
-   them listed in Chapter 10 of [73]Using C-Kermit. The following
-   sections touch on some that aren't.
-
-   The [74]C-Kermit 7.0 Release Notes document SEND /COMMAND as taking an
-   argument, but it doesn't. Instead of SEND /COMMAND:{some command},
-   use:
-
-SEND /COMMAND [ other switches such as /AS-NAME: ] command [ arguments... ]
-
-  10.1. Laptops
-
-   Watch out for laptops and their assorted power-saver features; for
-   example, a built-in modem's "auto timeout delay" hanging up the
-   connection in the middle of a file transfer. Most modems, even if they
-   have this feature, do not have it enabled by default. But if you
-   experience otherwise inexplicable disconnections in the midst of your
-   Kermit sessions, check the modem manual for such things as "idle
-   timeout", "auto timeout", etc, and add the command to disable this
-   feature to Kermit's init string for this modem.
-
-  10.2. NFS
-
-   If uploading a large file to an NFS-mounted disk fails (or is
-   painfully slow), try uploading it to a local disk (e.g. /tmp on Unix)
-   and then copying to the NFS disk later.
-
-  10.3. Modems
-
-   If you are dialing out and find that downloads work but uploads don't,
-   try again with a lower serial-port speed. Case in point: dialing out
-   on a certain PC from Linux at 115200 bps using a USR Courier 56K
-   "V.Everything" external modem and RTS/CTS flow control. Downloads
-   worked flawlessly, uploads stopped dead after the first few packets
-   were sent. The modem lights showed constant retraining (ARQ light
-   blinks slowly), and the CTS light was off 95% of the time, allowing
-   nothing to get through. Reducing the serial port speed to 57600 bps
-   made the problems go away. Evidently the PC in question has a very
-   fast serial port, since dialing the same modem with a different PC at
-   115200 bps works without incident.
-
-  10.4. TCP/IP Connections
-
-   If you have trouble transferring files over a TCP/IP connection, tell
-   Kermit to SET PARITY SPACE and try again. If that doesn't work, also
-   try a shorter packet length or smaller window size (to compensate for
-   certain well-known broken Telnet servers), and/or SET RELIABLE OFF.
-
-  10.5. Multihop Connections
-
-   If you have a multihop connection, with the interior nodes in CONNECT
-   mode (Kermit, Telnet, Rlogin, or any other), you can expect (a) file
-   transfer to be slower, and (b) the connection to be less transparent
-   (to control characters, perhaps to the 8th bit) than a more direct
-   connection. C-Kermit 7.0 and later have a "-0" (dash-zero)
-   command-line option to make it 100% transparent in cases where it is
-   to be used in the middle.
-
-  10.6. Recovery
-
-   The recovery feature (RESEND command) that was added in version
-   5A(190) works only for binary-mode transfers. In order for this
-   feature to be useful at all, the default for SET FILE INCOMPLETE was
-   changed from DISCARD to KEEP. Otherwise an interrupted transfer would
-   leave no partial file behind unless you had remembered to change the
-   default. But now you have to pay closer attention to Kermit's messages
-   to know whether a transfer succeeded or failed -- previously, if it
-   failed, the file would not show up on the receiving end at all; in
-   5A(190) and later, you'll get a partial file which could easily be
-   mistaken for the complete file unless you change the default back to
-   DISCARD or read the screen messages, or keep a transaction log.
-
-  10.7. Filename Collisions
-
-   SET FILE COLLISION BACKUP is the default. This means:
-
-     * If you send the same file lots of times, there will be many backup
-       files. There is no automatic mechanism within Kermit to delete
-       them, no notion of a "version retention count", etc, but you can
-       use the PURGE command to clean them up.
-     * If a file arrives that has the same name as a directory, the file
-       transfer fails because Kermit will not rename a directory. Send
-       the file with another name, or use SET FILE COLLISION RENAME.
-     * If the directory lacks write permission, the file transfer fails
-       even if you have write access to the file that is being backed up;
-       in that case, switch to SET FILE COLLISION OVERWRITE or APPEND, or
-       send to a different directory.
-
-   SET FILE COLLISION UPDATE depends on the date/time stamp in the
-   attribute packet. However, this is recorded in local time, not
-   Universal Time (GMT), and there is no indication of time zone. The
-   time is expressed to the precision of 1 second, but some file systems
-   do not record with this precision -- for example, MS-DOS records the
-   file date/time only to the nearest 2 seconds. This might cause update
-   operations to send more files than necessary.
-
-   (This paragraph does NOT apply to UNIX, where, as of C-Kermit 7.0,
-   C-Kermit pipes incoming mail and print material directly the mail or
-   print program): When C-Kermit is receiving files from another Kermit
-   program that has been given the MAIL or REMOTE PRINT command, C-Kermit
-   follows the current filename collision action. This can be
-   disconcerting if the action was (for example) BACKUP, because the
-   existing file will be renamed, and the new file will be mailed (or
-   printed) and then deleted. Kermit cannot temporarily change to RENAME
-   because the file collision action occurs when the filename packet is
-   received, and the PRINT or MAIL disposition only comes later, in the
-   Attribute packet.
-
-   Watch out for SET FILE COLLISION RENAME, especially when used in
-   conjunction with recovery. Recall that this option (which is NOT the
-   default) renames the incoming file if a file already exists with the
-   same name (the default is to rename the previously existing file, and
-   store the incoming file with its own name). It is strongly recommended
-   that you do not use SET FILE COLLISION RENAME if you ever intend to
-   use the recovery feature:
-
-     * When the file is first received by C-Kermit, its name is changed
-       if another file already has the same name. When you RESEND the
-       same file after a failure, C-Kermit will probably try to append
-       the re-sent portion to the wrong file.
-     * Assuming that you get RESEND to work with FILE COLLISION RENAME,
-       C-Kermit, when receiving the remainder of the file during a RESEND
-       operation, will report back the wrong name. Nothing can be done
-       about this because the name is reported back before the receiving
-       Kermit program finds out that it is a recovery operation.
-
-   Also watch out for DISABLE DELETE, since this implicitly sets FILE
-   COLLISION to RENAME. And note tht DELETE is DISABLEd automatically any
-   time you Kermit is in local mode (i.e. it makes a connection). Also
-   note that for purposes of DISABLE and ENABLE, "set host *" connections
-   do not count as local mode even though, strictly speaking, they are.
-
-  10.8. DOS Pathnames
-
-   When referring to foreign MS-DOS, Windows, Atari ST, OS/2, or other
-   file specifications that contain backslash characters in a C-Kermit
-   command, you might have to double each backslash, for example:
-
-  C-Kermit>get c:\\directory\\foo.txt
-
-   This is because backslash is used in C-Kermit commands for introducing
-   special character codes, variables, functions, etc.
-
-  10.9. Cancellation
-
-   If attempting to cancel local-mode file reception at a very early
-   stage (i.e. before data packets are exchanged) with X or Z does not
-   work, use E or Ctrl-C instead, or wait until the first data packets
-   are sent.
-
-   If you cancel a transfer that is underway using X or Z, and a lot of
-   window slots are in use, it might take a while for the cancellation to
-   take effect, especially if you do this on the receiving end; that's
-   because a lot of packets might already be on their way to you. In that
-   case, just be patient and let Kermit "drain" them.
-
-   If C-Kermit is sending a file, remote-mode packet-mode breakout (three
-   consecutive Ctrl-C's by default) is not effective until after C-Kermit
-   sends its first packet. If C-Kermit is receiving a file or is in
-   server mode, it is effective right away. In the former case, the SET
-   DELAY value determines the earliest time at which you can break out of
-   packet mode.
-
-  10.10. Partner Peculiarities
-
-   When one or both partners is on an SCO operating system such as OSR5,
-   you might issue the command:
-
-mapchan -n
-
-   to disable character-set conversion by the terminal driver. Similarly
-   for AIX:
-
-setmaps -t NOMAP
-
-   When using C-Kermit to transfer files with the HP48SX calculator, you
-   must SET FLOW NONE. The HP48SX does not support flow control, and
-   evidently also becomes confused if you attempt to use it. You might
-   also need to use SET SEND PAUSE 100 (or other number). For greater
-   detail about transferring files the the HP-48, see:
-
-  [75]http://www.columbia.edu/kermit/hp48.html
-
-   Some communication programs have errors in their implementation of
-   Kermit attribute packets. If you get an error message from your
-   communication program like "Attribute error", tell C-Kermit to SET
-   ATTRIBUTES OFF. Better yet, switch to a real Kermit program.
-
-   Some communication software claims to implement Kermit sliding
-   windows, but does so incorrectly. If sliding window transfers fail,
-   set C-Kermit's window size to the smallest one that works, for
-   example, SET WINDOW 1.
-
-   For lots more detail about how to cope with defective Kermit partners,
-   see:
-
-     * [76]Coping with Faulty Kermit Implementations (C-Kermit 7.0 and
-       later).
-     * [77]Coping with Broken Kermit Partners (C-Kermit 8.0 and later).
-
-   The UNIX version of C-Kermit discards carriage returns when receiving
-   files in text mode. Thus, "bare" carriage returns (sometimes used to
-   achieve overstriking) are lost.
-    ________________________________________________________________________
-
-  11. SCRIPT PROGRAMMING
-
-   [ [78]Top ] [ [79]Contents ] [ [80]Previous ]
-
-  11.1. Comments Versus the SCRIPT Command
-
-   Remember that ";" and "#" introduce comments when (a) they are the
-   first character on the line, or (b) they are preceded by at least one
-   blank or tab within a line. Thus constructions like:
-
-  INPUT 5 ;
-  SCRIPT ~0 #--#--#
-
-   must be coded using backslash notation to keep the data from being
-   ignored:
-
-  INPUT 5 \59                   ; 59 is the decimal ASCII code for ";"
-  SCRIPT ~0 \35--#--#           ; 43 is the decimal ASCII code for "#"
-
-   or, more simply:
-
-  INPUT 5 \;                    ; Just quote the semicolon
-  SCRIPT ~0 \#--#--#            ; Just quote the "#"
-    ________________________________________________________________________
-
-  11.2. Alphabetic Case and the INPUT Command
-
-   INPUT and MINPUT caseless string comparisons do not work for non-ASCII
-   (international) characters. Workaround: SET INPUT CASE OBSERVE. Even
-   then, the "lexically less than" and "lexically greater than"
-   operations (IF LLT, IF LGT) probably won't work as expected. The same
-   is true for the case-conversion functions \Flower() and \Fupper().
-   C-Kermit does not know the collating sequence for different character
-   sets and languages. (On the other hand, it might work depending on
-   such items as how Kermit was linked, whether your operating supports
-   "locales", etc)
-    ________________________________________________________________________
-
-  11.3. NUL (0) Characters in C-Kermit Commands
-
-   You can't include a NUL character (\0) in C-Kermit command text
-   without terminating the character string in which it appears. For
-   example:
-
-  echo In these brackets [\0] is a NUL
-
-   will echo "In these brackets [". This applies to ECHO, INPUT, OUTPUT,
-   and all other commands (but you can represent NUL by "\N" in an OUTPUT
-   string). This is because C-language strings are terminated internally
-   by the NUL character, and it allows all of C-Kermit's string
-   comparison and manipulation functions to work in the normal "C" way.
-
-   To illustrate:
-
-  INPUT 5 \0
-
-   is equivalent to:
-
-  INPUT 5
-
-   and:
-
-  INPUT 5 ABC\0DEF
-
-   is equivalent to:
-
-  INPUT 5 ABC
-
-   INPUT operations discard and ignore NUL characters that arrive from
-   the communication device, meaning that they do not figure into
-   matching operations (e.g. A<NUL>B matches AB); they are not deposited
-   in the INPUT buffer (\v(input)); and they are not counted in
-   \v(incount), with two exceptions:
-
-    1. An arriving NUL character restarts the INPUT SILENCE timer.
-    2. An arriving NUL character terminates the INPUT command with the
-       SUCCESS condition if the INPUT command was given an empty search
-       string. In this case \v(incount) is set to 1.
-
-   Also, the \v(inchar) variable is null (completely empty) if the last
-   INPUT character was NUL. That is, there is no way to tell only by
-   looking at \v(inchar) the difference between a NUL that was INPUT and
-   no INPUT at all. If the INPUT command succeeded but \v(inchar) is
-   empty, then a NUL character was input. Also, \v(incount) will be set
-   to 1.
-
-   Here's a sample script fragment to read characters, possibly including
-   NUL, from the communication connection and write them to a file:
-
-  while true {
-      input 1                      ; read one byte
-      if fail break                ; timed out or connection closed
-      fwrite /char \%c \v(inchar)  ; record the byte
-  }
-
-   This works because when \v(inchar) is NUL, that's equivalent to FWRITE
-   /CHAR having no text argument at all, in which case it writes a NUL
-   character.
-
-   \v(incount) and \v(inchar) are NOT affected by the CLEAR command.
-    ________________________________________________________________________
-
-  11.4. \ffiles() and \fnextfile() Peculiarities
-
-   The following script program:
-
-  for \%i 1 \ffiles(oofa.*) 1 {
-      send \fnextfile()
-  }
-
-   did not work as expected in C-Kermit 6.0 and earlier but does work in
-   C-Kermit 7.0 and later.
-    ________________________________________________________________________
-
-  11.5. Commands That Have Only Local Effect
-
-   Certain settings are local to each command level, meaning that
-   subordinate command levels (macros or command files) can change them
-   without affecting their values at higher command levels. When a new
-   command level is invoked, the value is inherited from the previous
-   level. These settings are:
-
-  CASE
-  COUNT and \v(count)
-  INPUT CASE
-  INPUT TIMEOUT
-  MACRO ERROR
-  QUIET
-  TAKE ERROR
-
-   This arrangement allows CASE, TIMEOUT, and ERROR settings, which are
-   used to control automatic exit from a command file or macro upon
-   error, to be automatically restored when the command file or macro
-   exits.
-
-   The COUNT variable follows this rule too, which permits nested SET
-   COUNT / IF COUNT loops, as in this example in which the inner loop
-   counts down from the current COUNT value of the outer loop (try it):
-
-  DEFINE INNER WHILE COUNT { WRITE SCREEN {   Inner:}, SHOW COUNT }
-  SET COUNT 5
-  WHILE COUNT { WRITE SCREEN Outer:, SHOW COUNT, DO INNER }
-
-   Keep in mind that an inferior command level cannot manipulate the
-   COUNT value held by a higher level. For example:
-
-  DEFINE OOFA SHOW COUNT, IF COUNT GOTO LOOP
-  SET COUNT 5
-  :LOOP
-  OOFA
-  ECHO Done
-
-   results in an infinite loop; the COUNT value remains at 5 because it
-   is never decremented at the same level at which it was set.
-    ________________________________________________________________________
-
-  11.6. Literal Braces in Function Calls
-
-   Since braces are used in function calls to indicate grouping, there is
-   no way to pass literal braces to the function itself. Solution: Define
-   a variable containing the string that has braces. Example:
-
-  define \%a ab{cd
-  echo \fsubstring(\%a)
-  ab{cd
-
-   If the string is to start with a leading brace and end with a closing
-   brace, then double braces must appear around the string (which itself
-   is enclosed in braces):
-
-  define \%a {{{foo}}}
-  echo \fsubstring(\%a)
-  {foo}
-
-   This also works for any other kind of string:
-
-  define \%a {{ab{cd}}
-  echo \fsubstring(\%a)
-  ab{cd
-    ________________________________________________________________________
-
-  11.7. Defining Variables on the C-Kermit Command Line
-
-   To define variables on the C-Kermit command line, use the -C
-   command-line option with one or more DEFINE or ASSIGN commands. Note
-   that the C-Kermit command line must cope with the quoting rules of
-   your shell. Examples:
-
-  kermit -C "define \\%a foo, define phonenumber 7654321"
-
-   In this case we follow UNIX quoting rules by doubling the backslash.
-   Once C-Kermit starts, the \%a and \m(phonenumber) variables are
-   defined as indicated and can be used in the normal way.
-
-   In DOS or Windows or OS/2 the command would be:
-
-  kermit -C "define \%%a foo, define phonenumber 7654321"
-
-   Here we need to double the percent sign rather than the backslash
-   because of DOS shell quoting rules.
-    ________________________________________________________________________
-
-  11.8. Per-Character Echo Check with the OUTPUT Command
-
-   Sometimes the OUTPUT command must be used to send commands or data to
-   a device in "echoplex" mode, meaning that characters must be sent one
-   at a time, and the next character can not be sent until the echo from
-   the previous one has been received. For example, a certain PBX might
-   have this characteristic. Let's say a Kermit script is used to program
-   the PBX. If characters are sent too fast, they can be lost. It would
-   seem that the command:
-
-  SET OUTPUT PACING milliseconds
-
-   could be used to take care of this, but the pacing interval is
-   constant and must be set large enough to allow even the slowest echo
-   to finish. If the script is large (an actual example is 14,000 lines
-   long), this can cause it to take hours longer than it needs to.
-
-   Here is a macro you can use to OUTPUT a string in an Echoplex
-   environment:
-
-  define XOUTPUT {
-      local \%c \%i
-      set output pacing 0
-      for \%i 1 \flen(\%*) 1 {
-          asg \%c \fsubstr(\%*,\%i,1)
-          output \%c
-          input 2 \%c
-      }
-  }
-
-   C-Kermit 7.0 or later is required.
-
-   It sends one character at a time and then waits up to 2 seconds for
-   the character to be echoed back, but continues to the next character
-   as soon as the echo appears, so no time is wasted. You can add an IF
-   FAIL clause after the INPUT in case you want to do something special
-   about failure to detect an echo within the timeout period. Obviously
-   you can also change the 2-second limit, and adjust the script in any
-   other desired way.
-    ________________________________________________________________________
-
-  11.9. Scripted File Transfer
-
-   Sometimes a user complains that when she makes a connection by hand,
-   logs in, and transfers a file, there are no problems, but when she
-   scripts the the exact same sequence, the file transfer always fails
-   after a few packets. Here's a scenario where this can happen:
-
-    1. Upon logging in to the remote computer, it sends a "What Are You?"
-       escape sequence.
-    2. When you log in interactively, your terminal emulator sends the
-       response. This is invisible to you; you don't know it's happening.
-    3. When you script the login, and begin a file transfer immediately
-       upon logging in, the host still sends the "What Are You?"
-       sequence. Kermit's INPUT ECHO setting is ON by default, so the
-       escape sequence passes through to the terminal, and the terminal
-       sends its response. But by this time Kermit has already started
-       the file transfer.
-    4. By default, the local Kermit program examines the keyboard for
-       interruption characters between every packet. The "What Are You"
-       response is sitting in the keyboard buffer. Eventually Kermit will
-       read a character such as "c" that is a valid interruption
-       character, and the file transfer stops with "User cancelled".
-
-   The right way to handle this situation is to have your look for the
-   "What Are You?" sequence and send the response itself, as described in
-   Using C-Kermit, pp.429-431. Or you can work around it by telling the
-   local Kermit to "set input echo off" and/or "set transfer interruption
-   off".
-    ________________________________________________________________________
-
-  11.10. Other...
-
-   Escape sequences (or any strings that contain control characters)
-   can't be used as labels, GOTO targets, or SWITCH cases.
-
-   [ [81]Top ] [ [82]Contents ] [ [83]C-Kermit Home ] [ [84]C-Kermit 8.0
-   Overview ] [ [85]Kermit Home ]
-     _________________________________________________________________
-
-   C-Kermit 8.0 Unix Hints and Tips / [86]The Kermit Project /
-   [87]Columbia University / [88]kermit@columbia.edu / 10 April 2004
-
-References
-
-   1. http://www.columbia.edu/kermit/
-   2. http://www.columbia.edu/
-   3. http://www.columbia.edu/kermit/ckcbwr.html
-   4. http://www.columbia.edu/kermit/ckubwr.html
-   5. http://www.columbia.edu/kermit/k95.html
-   6. http://www.columbia.edu/kermit/ckermit.html
-   7. http://www.columbia.edu/kermit/ckututor.html
-   8. http://www.columbia.edu/kermit/ckcbwr.html#x0
-   9. http://www.columbia.edu/kermit/ckcbwr.html#x1
-  10. http://www.columbia.edu/kermit/ckcbwr.html#x2
-  11. http://www.columbia.edu/kermit/ckcbwr.html#x3
-  12. http://www.columbia.edu/kermit/ckcbwr.html#x4
-  13. http://www.columbia.edu/kermit/ckcbwr.html#x5
-  14. http://www.columbia.edu/kermit/ckcbwr.html#x6
-  15. http://www.columbia.edu/kermit/ckcbwr.html#x7
-  16. http://www.columbia.edu/kermit/ckcbwr.html#x8
-  17. http://www.columbia.edu/kermit/ckcbwr.html#x9
-  18. http://www.columbia.edu/kermit/ckcbwr.html#x10
-  19. http://www.columbia.edu/kermit/ckcbwr.html#x11
-  20. http://www.columbia.edu/kermit/ckcbwr.html#top
-  21. http://www.columbia.edu/kermit/ckcbwr.html#contents
-  22. http://www.columbia.edu/kermit/ckcbwr.html#x2
-  23. http://www.columbia.edu/kermit/ckcbwr.html#top
-  24. http://www.columbia.edu/kermit/ckcbwr.html#contents
-  25. http://www.columbia.edu/kermit/ckcbwr.html#x2
-  26. http://www.columbia.edu/kermit/ck60manual.html
-  27. http://www.columbia.edu/kermit/ckermit2.html
-  28. http://www.columbia.edu/kermit/ck60manual.html
-  29. http://www.columbia.edu/kermit/ckermit80.html#x5
-  30. http://www.columbia.edu/kermit/ckermit80.html
-  31. http://www.columbia.edu/kermit/ckermit80.html#x2.2
-  32. http://www.columbia.edu/kermit/ckcbwr.html#top
-  33. http://www.columbia.edu/kermit/ckcbwr.html#contents
-  34. http://www.columbia.edu/kermit/ckcbwr.html#x3
-  35. http://www.columbia.edu/kermit/ckcbwr.html#x1
-  36. http://www.columbia.edu/kermit/ckcbwr.html#top
-  37. http://www.columbia.edu/kermit/ckcbwr.html#contents
-  38. http://www.columbia.edu/kermit/ckcbwr.html#x4
-  39. http://www.columbia.edu/kermit/ckcbwr.html#x2
-  40. http://www.columbia.edu/kermit/ckcbwr.html#top
-  41. http://www.columbia.edu/kermit/ckcbwr.html#contents
-  42. http://www.columbia.edu/kermit/ckcbwr.html#x5
-  43. http://www.columbia.edu/kermit/ckcbwr.html#x3
-  44. ftp://ftp.isi.edu/in-notes/rfc1122.txt
-  45. http://www.columbia.edu/kermit/ckcbwr.html#top
-  46. http://www.columbia.edu/kermit/ckcbwr.html#contents
-  47. http://www.columbia.edu/kermit/ckcbwr.html#x6
-  48. http://www.columbia.edu/kermit/ckcbwr.html#x4
-  49. http://www.columbia.edu/kermit/ckcbwr.html#top
-  50. http://www.columbia.edu/kermit/ckcbwr.html#contents
-  51. http://www.columbia.edu/kermit/ckcbwr.html#x7
-  52. http://www.columbia.edu/kermit/ckcbwr.html#x5
-  53. http://www.columbia.edu/kermit/ck60manual.html
-  54. http://www.columbia.edu/kermit/ckcbwr.html#x10
-  55. http://www.columbia.edu/kermit/ckcbwr.html#top
-  56. http://www.columbia.edu/kermit/ckcbwr.html#contents
-  57. http://www.columbia.edu/kermit/ckcbwr.html#x8
-  58. http://www.columbia.edu/kermit/ckcbwr.html#x6
-  59. ftp://ftp.isi.edu/in-notes/rfc2217.txt
-  60. http://www.columbia.edu/kermit/ckcbwr.html#top
-  61. http://www.columbia.edu/kermit/ckcbwr.html#contents
-  62. http://www.columbia.edu/kermit/ckcbwr.html#x9
-  63. http://www.columbia.edu/kermit/ckcbwr.html#x7
-  64. http://www.columbia.edu/kermit/ckcbwr.html#top
-  65. http://www.columbia.edu/kermit/ckcbwr.html#contents
-  66. http://www.columbia.edu/kermit/ckcbwr.html#x10
-  67. http://www.columbia.edu/kermit/ckcbwr.html#x8
-  68. http://www.columbia.edu/kermit/ckubwr.html
-  69. http://www.columbia.edu/kermit/ckcbwr.html#top
-  70. http://www.columbia.edu/kermit/ckcbwr.html#contents
-  71. http://www.columbia.edu/kermit/ckcbwr.html#x11
-  72. http://www.columbia.edu/kermit/ckcbwr.html#x9
-  73. http://www.columbia.edu/kermit/ck60manual.html
-  74. http://www.columbia.edu/kermit/ckermi70.htm
-  75. http://www.columbia.edu/kermit/hp48.html
-  76. http://www.columbia.edu/kermit/ckermit70.html#x4.22
-  77. http://www.columbia.edu/kermit/ckermit80.html#x15
-  78. http://www.columbia.edu/kermit/ckcbwr.html#top
-  79. http://www.columbia.edu/kermit/ckcbwr.html#contents
-  80. http://www.columbia.edu/kermit/ckcbwr.html#x10
-  81. http://www.columbia.edu/kermit/ckcbwr.html#top
-  82. http://www.columbia.edu/kermit/ckcbwr.html#contents
-  83. http://www.columbia.edu/kermit/ckermit.html
-  84. http://www.columbia.edu/kermit/ck80.html
-  85. http://www.columbia.edu/kermit/index.html
-  86. http://www.columbia.edu/kermit/index.html
-  87. http://www.columbia.edu/
-  88. mailto:kermit@columbia.edu