+++ /dev/null
-
- 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