| |
| 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 |