C-Kermit 6.0

Communications Software for UNIX, VMS, Stratus VOS, QNX, OS-9, AOS/VS, Plan 9 from Bell Labs, the Commodore Amiga, . . . IMPORTANT NOTE FOR LINUX USERS:
C-Kermit 6.0 is the current version of Kermit for UNIX (including Linux). It is distributed in source-code form, and there is also a large selection of prebuilt binaries for many platforms. There are also install packages for Red Hat, Debian, and Slackware Linux distributions as well as for other several other kinds of UNIX.

However, C-Kermit 6.0 is no longer appropriate for recent Linux releases. Linux has changed significantly out from under C-Kermit 6.0 (which was released in 1996): curses libraries have been renamed and shuffled around, there is the new libc vs glibc issue, serial port access has changed, etc.

We have addressed these issues in C-Kermit 7.0, which is presently in Beta test. So please pick up C-Kermit 7.0 Beta instead. It should build and work correctly on all Linux versions, including the most recent ones, as well as all other known UNIX platforms, plus Plan 9, VMS, and others. You can find it at:


There are, as yet, no package/install files (RPM, DEB, etc).

Quick start: Get the cku195.tar.gz file, gunzip it, tar xvf cku195.tar, and then "make linux". The resulting "wermit" file is the C-Kermit 7.0 Beta executable.

Report any problems back to kermit-support@columbia.edu.

[C-Kermit FAQ]

C-Kermit is a combined serial and network communication software package offering a consistent, medium-independent, cross-platform approach to connection establishment, terminal sessions, file transfer, character-set translation, and automation of communication tasks. C-Kermit includes:

  1. Personal or Internal Use: C-Kermit is freely downloadable by individuals for their own use and by organizations (companies, universities, government agencies, hospitals, etc) for internal use. In this case, we ask (but do not require) you to also purchase the user manual to (a) let you get the most out of the software; (b) reduce the load on our help desk; and (c) contribute some revenue to the nonprofit and entirely self-supporting Kermit Project.

  2. Redistribution: Redistribution of C-Kermit must be licensed. CLICK HERE for terms and conditions.

C-Kermit 6.0 is a major new release of C-Kermit communications for a wide variety of platforms including UNIX (all versions), VMS, QNX, OS-9, Plan 9, the BeBox, Data General AOS/VS, Stratus VOS, the Commodore Amiga, and others. It replaces C-Kermit 5A(190) of October 1994. (Previous releases of C-Kermit also supported the Apple Macintosh, Apollo Aegis, and the Atari ST; these versions are still available, and hopefully they will be brought up to 6.0 level soon.) C-Kermit 6.0 also forms the file-transfer and command / script language basis for Kermit 95 for Windows 95, Windows 98, Windows NT, and OS/2.

All of the new features of C-Kermit 6.0 -- as well as all those added in all releases since 5A(188) -- are completely documented in the new revised and expanded second edition of the Digital Press book, Using C-Kermit.

C-Kermit 6.0 is fully supported by the Kermit Project help desk and developers:
CLICK HERE for details.

  • Specifications
  • New Platforms
  • New Features
  • Reviews
  • New Book
  • How To Get It
  • Support
  • C-Kermit Compared with UUCP


    New platforms supported in C-Kermit 6.0 include:

    The complete list of supported platforms includes: (*) C-Kermit 6.0.192 has been tested successfully on 16-bit, 32-bit, and 64-bit architectures under portable UNIX versions including 4.2 and 4.3BSD, 4.4BSD, AT&T UNIX System III, AT&T UNIX System V Releases 2, 3, and 4; Mach and MachTen; POSIX, Linux, NeXTSTEP, OSF/1, AIX, and Solaris versions. C-Kermit version 5 or 6 has also been built and tested successfully on hundreds of specific UNIX platforms;
    CLICK HERE for a list.


    The major new features of C-Kermit 6.0 include:

    Serial Communications
    • Dialing - A major overhaul of C-Kermit's dialing capabilities
    • Modems - A major overhaul of C-Kermit's modem support plus support for many new modems
    • Speeds - more and higher serial port speeds allowed in many versions (e.g. VMS)
    • New ability to answer incoming calls
    • Ability to dial numeric and alphanumeric pagers
    • Automatic adjustment of flow control

    • New ability to accept incoming TCP/IP connections (UNIX and VMS only)
    • New Rlogin client (UNIX and VMS, requires privileges)
    • New network directory, like dialing directory but for network connections
    • New SET TELNET controls (binary mode, etc)
    • New SET TCP controls (buffer sizes, keepalive, "linger", etc)
    • New command-line option "-J " makes C-Kermit "be like Telnet"
    • X.25 support updated for Solaris / SunLink 8.00 and 9.00.

    File Transfer
    • Autodownload (automatic RECEIVE while in CONNECT mode) (VMS and UNIX)
    • Autoupload (and more) while in CONNECT mode (VMS and UNIX)
    • REGET (crash recovery, like RESEND, but for downloading from a server)
    • Automatic peer recognition for automatically switching into binary transfer mode
    • Dynamic packet timeouts and other improved error recovery procedures
    • Automatic packet length optimization
    • Lots of useful info added to the fullscreen file transfer display
    • Quick selection of transfer settings with FAST, CAUTIOUS, ROBUST commands and -Q command-line option
    • In the UNIX version, built-in support for external protocols (ZMODEM, etc)
    • ADD SEND-LIST (build up a list of files to send)
    • SET FILE DOWNLOAD-DIRECTORY (make all downloads go to same place)
    • SET PRINTER (file, device, or pipe)
    • Text-file record format selection

    • SET SERVER LOGIN (for incoming connections)
    • Redirection of REMOTE commands (to file, printer, or pipe)
    • SET SERVER GET-PATH (search path for GET requests)
    • RETRIEVE, like GET from server, but deletes original file after successful transfer
    • New REMOTE commands: RENAME, COPY

    Script Programming
    • New block structure for script programs.
    • Local (automatic) variables for macros
    • New SWITCH statement like in C
    • SET/IF/SHOW ALARM as in MS-DOS Kermit
    • PAUSE, SLEEP, WAIT, INPUT, SET ALARM also accept hh:mm:ss as in MS Kermit
    • Many new variables and functions
    • Long variable names now can be used with READ, ASK, etc
    • SET INPUT BUFFER-LENGTH allows you to make the INPUT buffer any size
    • Braces allowed for grouping in function arguments
    • Automatic evaluation of arithmetic expressions in many contexts

    • YEAR-2000 compatibility
    • Ability to become a fully transparent 8-bit link between 2 end systems
    • Improved context-sensitive "?" keyword and file menus
    • "More?" prompting for most menus, HELP, and SHOW text
    • More and better messages and help text
    • Default prompt now shows current directory
    • NOPUSH available at runtime to disable escape to shell
    • Many new file management commands, e.g. MKDIR, RMDIR
    • Improved speed & responsiveness
    • Bugs fixed


    The biggest change in version 6.0 concerns modems and dialing. In version 6.0, C-Kermit supports:

    But most significant is the new dialing directory and in C-Kermit's understanding of telephone numbers. The version 5A dialing directory couldn't have been simpler -- a single file that Kermit searched for a name and, if found, replaced it with the associated phone number and dialed it, literally, exactly as found.

    Version 6.0 supports multiple simultaneous dialing directories, multiple (thousands, even) entries under the same name (so, for example, if the first number is busy, Kermit immediately goes on to the second number, etc), and most of all, a thorough understanding of dialing procedures: country codes, area codes, toll-free calling, calling cards, PBXs, and lots more. This new knowledge about telephone numbers, in turn, allows "cheapest-first" dialing when multiple numbers are fetched from the dialing directory, and it allows dialing directories to be "portable" -- that is, the same entry can be dialed from anywhere -- local, long-distance, international, etc. Old-format directories are converted to new format automatically (if you approve, of course).


    The concepts of "dialing" and "modems", which had been lumped together in previous C-Kermit versions, are now cleanly separated. Dialing-related parameters (such as country codes, area codes, repeat dialing, pulse vs tone dialing, etc) are controlled by SET DIAL commands, and modem-related items (like error correction, data compression, speed buffering, flow control, and other modem configuration parameters) are controlled by SET MODEM commands. Every aspect of modem operation can be customized, and new modem types can be added easily. Furthermore, a lot of settings that previously had to be done by hand are now done automatically according to the built-in modem database when you choose a modem type. And modem configurations (e.g. with respect to error correction, data compression, flow-control, etc) follow the Kermit settings automatically.

    Modems directly supported in version 6.0 include:

      AT&T Dataport 
      AT&T Digital Terminal Data Module 
      AT&T ISN Network
      AT&T switched-network modems
      Boca modems
      Cardinal V.34
      CCITT / ITU-T V.25bis
      Cermetek Info-Mate 212 A
      Condor CDS 220 2400b
      DEC DF03-AC
      DEC DF100-series
      DEC DF200-series
      Digitel DT-22 CCITT variant
      Gateway 2000 Telepath
      GeneralDataComm 212A/ED
      Hayes 1200, 2400, and compatible modems
      Hayes Accura, Optima, and Ultra
      IBM Mwave
      Intel Fastalk and Lifestyle
      MaxTech modems
      Microlink modems
      Microcom DeskPorte FAST ES 28.8
      Microcom modems in native SX mode
      Motorola FasTalk II or Lifestyle
      Multitech modems
      Penril modems
      Practical Peripherals modems
      Racal Vadic VA4492E
      Rockwell V.32
      Rockwell V.32bis
      Rockwell V.34 Data/Fax
      Rolm 8000, 9000, 9751 CBX DCM
      Supra modems
      Telebit modems, all models
      USR Courier and Sportster
      Ven-Tel modems
      Zoltrix modems
      Zoom modems
      ZyXEL modems

    In general, C-Kermit is now much more attuned to the world of high-speed modems, much easier to use with them, and much easier for users to tune.


    C-Kermit 6.0 is the first version that is able to dial beepers, numeric pagers, and alphanumeric pagers. Pagers can be dialed not only through a modem that is connected to a serial port on the computer where C-Kermit is running, but also through modems mounted on TCP/IP "reverse terminal servers".

    Beepers and numeric pagers are dialed using a special form of the DIAL command that does not require the call to be answered with a carrier signal. Alpha pages are sent with a simple script implementing the Telocator Alphanumeric Protocol (TAP) of the Personal Communications Industry Association.

    As with other kinds of modem calls, automatic redialing is supported in the case of busy signals, etc, and the dialing directory may be used -- allowing the same pager number to be dialed from different areas or countries without having to enter different phone numbers for each calling location.


    During CONNECT mode, C-Kermit for UNIX and VMS (as well as Kermit 95 and MS-DOS Kermit 3.15) now handle not only "autodownloads", but also "autouploads" via automatic recognition of Kermit packets. Auto down- and uploads are disabled by default in the UNIX and VMS versions (to prevent confusion when C-Kermit is "in the middle"), and can be enabled with SET TERMINAL AUTODOWNLOAD ON. When this is ON, and you tell the remote Kermit to SEND a file, C-Kermit goes into RECEIVE mode automatically, and then re-CONNECTs automatically when the transfer is over. The new "autoupload" feature lets you tell the remote Kermit to GET a file; C-Kermit sends it automatically.


    During Kermit protocol operations, a new "who am i" mechanism allows the two Kermits furnish their system types (e.g. UNIX, VMS, etc) to each other. If this occurs (as it will with C-Kermit 6.0, Kermit 95 1.1.7, MS-DOS Kermit 3.15, and Kermit-370 4.3.2), and if the two system types match, then the two Kermits automatically switch into binary file-transfer mode with literal filenames (or, in the case of VMS, into labeled transfer mode). Upon exit from protocol, the previous file transfer and naming modes are restored. The other Kermit's system type, if known, is shown on the file transfer display and is also recorded in the transaction log if you have one going. This feature is enabled by default, but can be disabled/enabled explicitly with the new SET TRANSFER MODE { AUTOMATIC, MANUAL } command.


    In previous versions of C-Kermit, packet timeouts were fixed at some constant value, like 10 seconds. This could be changed by the user, but it still remained fixed throughout the file transfer. This had two unfortunate consequences:

    1. If the timeout was too short the file transfer would always fail.
    2. If it was too long, error recovery was slow.
    Situation (1) was surprisingly common. For example, if you dialed in with a slow modem (say, 1200 bps) and tried to transfer a file using long packets (say, 2400 bytes), then 2400 / 120 = 20 seconds would be needed for each packet. If C-Kermit knew the speed was 1200, it would take this into account, but often it would have no way to know, e.g. if you were going through a terminal server, in which case the system sets some default value for your speed, like 19200 or 38400, and Kermit never knows the real speed. Conversely, on a high-speed local area network connection, the 10 second timeout was unecessarily long.

    The new method, which is used unless you specify otherwise, calculates timeouts on a per-packet basis, based on the observed round-trip time (the time from when a packet is sent until its acknowledgement is received) and packet arrival rate. This lets Kermit adjust automatically to prevailing conditions -- slow connections, fast connections, bursty connections -- even if they are always changing, resulting in a minimum of unnecessary retransmissions and the quickest possible response to lost packets. The new fullscreen file transfer display shows the dynamically varying packet round-trip time (RTT) and timeout.


    As with timeouts, previous C-Kermit releases left it up to you to find the best packet length. If you chose one that too long, there could be buffer overruns, and expensive retransissions, sometimes hard failures because the specified size was simply too big. If too short, transfers would be needlessly slow.

    C-Kermit 6.0 lets you pick a maximum packet size that can be quite large (up to about 9000 bytes), but rather than using that size right away, it starts off smaller and works its way up. If there is an error, it goes back down to the largest size that did not have an error. It repeats this process throughout the transfer to ensure that packets are neither too big nor too small.


    C-Kermit's file-transfer performance options -- packet length, window size, control-character unprefixing, locking shifts -- have been refined and tuned for increased throughput, and have been made more easily accessible by the addition of several new commands:

    Selects a large window size and packet length, plus a broad range of control-characters to be unprefixed. The ROBUST command selects a window size of 1, short packets, and prefixes all control characters. And in between, the CAUTIOUS command selects a smaller window size, a medium packet length, and a conservative set of control characters for unprefixing.

    The new -Q command-line option is equivalent the FAST command. Use it (for example) in constructing aliases for starting up Kermit quickly to transfer files quickly, for example (UNIX ksh):
    alias "kbs=kermit -YQqD 0 -is"
    for binary send (Y means "skip the initialization file", q means "quiet, don't bother printing messages", D 0 means "delay 0 seconds before starting to send", which is useful when your terminal program supports Kermit autodownloads).

    This is a new shortcut for selecting various sets of control characters to unprefix, without have to list them individually. Try CAUTIOUS first.
    Of course, you can still fine-tune all parameters separately to optimally adapt the protocol to any type of connection.


    This is only a first step, and is so far available only in the UNIX and VMS versions, and then only in certain of them (the ones with a sockets library and that have the select() function available). The idea is that you can tell C-Kermit to wait for an incoming TCP/IP connection on a socket of your choice. What you do with it after the connection comes in is up to you. It can be put into server mode; it can run some kind of script (like a "host mode" script); you can even go into CONNECT mode and have a "chat" session.

    If you put it into server mode, you can also specify a username and password that must be supplied by the client before the server will honor any other requests, and you can also set up all sorts of restrictions on what the client can do. This gives ordinary users the ability to set up relatively secure and private file transfers with anybody else on the Internet, without any special privilege, without the need to create user IDs, without requiring access to directories (such as /pub/ftp) they do not own, etc.

    In future releases, we'll be expanding this to provide a kind of generic "Kermit service" on the Internet, similar to FTP service.


    C-Kermit's script programming features have been both expanded and simplified. The script programming language is now:

    To illustrate, here is a script program to print the day of the week in German (or something like it):

      switch \v(nday) {
        :0, echo Sonntag, break
        :1, echo Montag, break
        :2, echo Dienstag und zunaechst kommt...
        :3, echo Mittwoch, break
        :4, echo Donnerstag, break
        :5, echo Freitag - Gott sei dank, break
        :6, echo Samstag, break
        :default, echo Invalid day - \v(nday)!
    Note the new SWITCH statement, the block structure (accomplished by braces), and the absence of those confusing ",-" constructions at the end of each line.

    Besides the new features and simplified syntax (don't worry, the old syntax is still accepted!), C-Kermit 6.0 offers dozens of new variables and functions (listed in the next two sections), local variables for macros and command files, and automatic evaluation of arithmetic expressions in many contexts. Most of C-Kermit's new script programming features will also be found in MS-DOS Kermit 3.15. Thus, considering C-Kermit 6.0's wider coverage of platforms, the Kermit script language is not only more powerful and easy to use than ever before, but also more portable.

    So what? (you ask). In today's mass-market world of graphical workstation and clickable hyperlinks, there is an increasing need to automate complicated communications tasks -- connection, authentication, data transfer -- to create "canned" procedures for increasingly naive users, as well as for embedded applications. What better tool for this than Kermit: tried and true, available and tested on more platforms than any other communications software, well supported, and portable. That means that scripts you develop for Kermit are not limited to a single platform, but can be used and re-used on hundreds of different ones. Thus Kermit maximizes the return on your script-development investment like no other software.

      \v(charset)          (local character set)
      \v(connection)       (type of connection - serial, tcp/ip, etc)
      \v(cps)              (speed of most recent file transfer, chars per sec)
      \v(crc16)            (16-bit CRC of most recent file transfer)
      \v(d$xxx)            (various SET DIAL values)
      \v(dialstatus)       (numeric code for DIAL result)
      \v(dialnumber)       (number most recently dialed)
      \v(dialresult)       (literal string returned by modem after dialing)
      \v(download)         (download directory)
      \v(errno)            (value of the "errno" variable)
      \v(errstring)        (error message, if any, associated with errno)
      \v(evaluate)         (result of most recent EVALUATE command)
      \v(ftype)            (current FILE TYPE setting, e.g. "text" or "binary")
      \v(instatus)         (detailed result of the most recent INPUT command)
      \v(ipaddress)        (my IP address - if known, if any)
      \v(minput)           (tells which MINPUT search string was matched)
      \v(modem)            (current modem type)
      \v(m_xxx)            (various SET MODEM COMMAND values)
      \v(newline)          (newline character or sequence appropriate to the OS)
      \v(packetlen)        (current RECEIVE PACKET-LENGTH value)
      \v(parity)           (current PARITY setting)
      \v(protocol)         ("kermit")
      \v(rows)             (number of rows (lines) on your screen, if known)
      \v(cols)             (number of columns on your screen, if known)
      \v(terminal)         (terminal type, if known)
      \v(tmpdir)           (directory for creating temporary files)
      \v(query)            (result of most recent REMOTE QUERY command)
      \v(sysid)            (Kermit protocol system/OS code)
      \v(window)           (current SET WINDOW size)
      \v(xversion)         (product-specific C-Kermit version number, if any)
      \v(_line)            (current line number in current command file)

      \Fbasename(file)     (filespec with disk, path, etc, removed)
      \Fbreak(s,c)         (substring of string s up to first occurrence of char c)
      \Fcapitalize(s)      (string s capitalized)
      \Fchecksum(s)        (numeric checksum of string s)
      \Fcrc16(s)           (numeric 16-bit CRC of string s)
      \Fdate(file)         (creation or modification date of file)
      \Fhexify(s)          (hexadecimal representation of string s)   
      \Fipaddr(s,n)        (first IP address in s starting at position n)
      \Fltrim(s1,s2)       (trim all chars that are in s2 from left of s1)
      \Fmodulus(n1,n2)     (n1 mod n2)
      \Freplace(s1,s2,s3)  (replaces all occurrences of s2 in s1 with s3)
      \Frindex(s1,s2,n)    (rightmost occurrence of s1 in s2)
      \Fsize(file)         (size, in bytes, of file)
      \Fspan(s1,s2)        (left substring of s1 with only characters from s2)
      \Ftod2secs(hh:mm:ss) (convert hh:mm:ss to seconds since midnight)
      \Ftrim(s1,s2)        (trim all chars that are in s2 from right of s1)
      \Funhexify(string)   (opposite of \fhexify())
      \Fverify(s1,s2,n)    (position of the first char in s2 not also in s1)


    C-Kermit 6.0.192 has been verified (and in some cases, corrected) to handle post-millenium dates correctly in the UNIX, VMS, and other versions. This means:


    You can obtain C-Kermit 6.0 by mail order or by Internet FTP. To order by mail:

    To obtain C-Kermit sources and binaries on the Internet, use the links below or else use anonymous ftp to kermit.columbia.edu, directory kermit; follow the instructions in the "read me" files that pop up when log in, and each time you change directories.

    When obtaining Kermit software over the Internet, please remember:

    1. We ask you to also purchase the manual, to help fund our continuing development and support of C-Kermit and to help you get the most out of it.
    2. Be sure to abide by the copyright notices and terms & conditions.
    3. Please do not create FTP mirrors for this material without consulting with us first.
    Here is your key to the C-Kermit files: Questions? Comments? -- Send e-mail.


    C-Kermit 6.0 / Columbia University / kermit@columbia.edu / 8 Feb 1999