The Kermit Project   |   Now hosted by Panix.com
New York City USA   •   kermit@kermitproject.org
…since 1981
C-Kermit 9.0   Using C-Kermit   Kermit 95

C-Kermit “Daily” Source-Code Archive

Frank da Cruz

As of C-Kermit 9.0.304 Dev.09, 20 January 2014.
This page last updated: Mon Jan 20 12:02:06 2014 Eastern USA time
▶▶ Go to change log

Between formal C-Kermit releases, and even between Alpha and Beta releases during C-Kermit testing periods, the current working sources are uploaded to the Kermit FTP and Web site whenever there is something new to show and reasonable consistency checks don't fail. Since 2010, new builds aren't as frequent; "daily" is a slight overstatement due to the cancellation of the Kermit Project as a day job.

DOWNLOAD Filename Description
FTP HTTP x.tar.gz C-Kermit for Unix source code, Tar archive, Gzip compression (gunzip)
FTP HTTP x.tar.Z Ditto, Compress compression (uncompress).
FTP HTTP x.zip Unix and VMS source code, ZIP archive (unzip -a).
FTP   kermit/test/tar/ Directory listing of the kermit/test/tar directory.
FTP   kermit/test/text/ Separate source files, makefile, and update notes.

Included in the archive is a plain-text file, NOTES.TXT, which contains the detailed edit history, with the newest edits described at the bottom. The daily upload is not guaranteed to build successfully on the many platforms where a true release or Beta builds, but it does build on at least 2 or 3 of our primary development platforms (NetBSD, Linux, Mac OS X, Solaris, or whatever we're working on that day).

Download the archive into a fresh directory. To build for Unix (CLICK HERE for greater detail)…

  1. Unpack the archive (e.g. "gunzip x.tar.gz ; tar xvf x.tar.gz" or "unzip -a x.zip").
  2. "make xxx" (xxx = platform target, e.g. "linux", "aix", "solaris10", "macosx", etc).
  3. This makes an executable, "wermit" in your current directory.
  4. If you will be using it to dial out or to make serial-port connections, give it the same owner, group, and permissions as cu, minicom, tip, or whatever (this doesn't apply to Mac OS X).
  5. "./wermit" to start it (only a real release should be called 'kermit').

To build for VMS, "unzip -aa" the Zip file into a fresh directory and type "@ckvker.com". This makes an executable "WERMIT.EXE". For greater detail, CLICK HERE. NOTE: if the build fails immediately with "%DCL-W-USGOTO, target of GOTO not found - label \\SKIP_HELP", it means you forgot the "-a" option to unzip.

Change Log

The changes in C-Kermit since version 8.0.211 was released 10 April 2004 are listed newest first.

20 Jan 2014
9.0.304 Dev.09
§ A fix from Jeff for SET AUTH TLS VERIFY NO to allow scripts to run with no user interaction when server does not provide a certificate. § Fixed a core dump that could happen in the TOUCH command. § New briefer current-directory string in C-Kermit prompt on Unix. § Further adaptations for Windows.
06 Dec 2013
9.0.304 Dev.08
§ Some more fixes and changes for a Windows version of C-Kermit. § Improved error messages from scripts. § Suppression of spurious parse errors in certain IF commands. § Locale support enabled for certain sorting operations, e.g. of directory listings.
24 Nov 2013
9.0.304 Dev.07
Fixes to the new CHANGE command. Fixes for NetBSD 6.1 (time_t change). Fixes to \fpictureinfo() and a new return code, 3, for square images. Fixes to some of the new locale-aware date/time functions. Fixes for latest Android SDK from Jake Thompson. Changes to make C-Kermit 9.0 integrate with the Open Source modules for Windows, as a first step in releasing an Open Source followon to Kermit 95, to be announced later.
25 Jul 2013
9.0.304 Dev.06
§ LOCALE SUPPORT for platforms that have locales (internationalization features for languages, character sets, etc). This begins with new functions (next item) to get day and month names in the language and character set specified in the locale, but also has other ramifications that might not please everybody; for example, that it can change the behavior of certain functions like \fupper() \flower(), and \fcapitalize(), making them work as expected for the first time for languages other than English (at least so long as they are encoded in a single-byte character set such as ISO-8859-1). Perhaps most noticeable: any messages generated by the operating system or C-language APIs (if they are internationized) can come out in the language and character set specified in the locale; for example “Archivo o directorio inexistente” rather than “No such file or directory”. However, since the user interface of C-Kermit itself is not internationalized, its own commands and messages are still in English.

§ Internationalized day and month names: New functions \fdayname() and \fmonthname() to supply the name of the day of the week or month of the year that corresponds to a given date, a day or month number, or the current date, in the language and character-set of the current locale. HELP FUNCTION DAYNAME and HELP FUNCTION MONTHNAME for details.

§ Disabling the locale features. To return Kermit to its previous anglocentric behavior, you can (a) start it with a special command-line option, (b) define a certain environment variable, or (c) give a SET LOCALE command at the C-Kermit> prompt.

§ New CHANGE command, to change strings in text files. For example, suppose you manage a website with thousands of files in a directory tree, many of which link to an offsite page whose URL has just changed. Now you can fix them all with a single C-Kermit command:

change /recursive ~/web/*.html www.oldname.com www.newname.com
The CHANGE command has lots of options:
 /after:         /dotfiles       /modtime:       /not-before:
 /before:        /except:        /nodotfiles     /recursive
 /case:          /larger-than:   /norecursive    /simulate
 /count:         /list           /not-after:     /smaller-than:
...for file selection (size, date, exception lists, dot-files), directory traversal (flat or recursive), modification time of changed files (updated or preserved), and reporting of results. HELP CHANGE for details and options.

§ Added GREP /ARRAY:&a to get the names of all the files that contain text that matches a given pattern into an array, which can be looped through later to take any desired actions with the files: moving them, renaming them, transferring them, etc. The GREP command has lots of options, too, like CHANGE and TOUCH do, for file selection, recursion, what to do with results, etc.

§ Added a new \fcvtdate() format code, 5, which produces a result in fully-delimited numerics: yyyy:mm:dd:hh:mm:ss, so individual fields can be easily picked out; for example, with \fword(), e.g.:

\fword(\fcvtdate(today,5),3) (third word of today's date, day of month)
Also, just for symmetry with \v(day) and \v(nday) (which have been in C-Kermit forever), I added \v(nmonth), \v(month), and \v(year), that evaluate to the current month (numeric), current month (English 3-letter abbreviation), and year, respectively.

§ Added a way for a Kermit script to test whether a file is text or binary: IF BINARY filename, IF TEXT filename. Also the new \ffileinfo() function now returns a more detailed result, which gives some more detail about the encoding if it's a text file: 7-bit, 8-bit, UTF-8, UCS-2.

§ New IF conditions for lexical comparisons: NEQ, LLE, LGE. Previously these could only be done with IF NOT EQU, IF NOT LGT, IF NOT LLT.

15 Apr 2013
9.0.304 Dev.05
§  Fixed a problem with SET TELNET WAIT OFF being overridden by faulty Telnet protocol negotiations and fixed a deadlock when negotiating Telnet parameters with the Synchronet BBS.  § Added IF FUNCTION to test for availability of a given built-in function.  § Expanded the \fpictureinfo() function to extract the internal “date taken” timestamp (if any) from a JPG photo or scan.  § Added a new \ffilecompare() function to check whether two files are identical.  § Some bug fixes and cosmetic changes noted at the bottom of the NOTES.TXT file. The two new built-in functions are used in a new script, renamejpgs, that renames digital-camera and scanner generated JPGs according to the date taken or scanned.
22 Mar 2013
9.0.304 Dev.04
(1) Added SET EXIT MESSAGE { ON, OFF, STDOUT, STDERR }, so the text (if any) from an EXIT command, e.g.:
EXIT 1 "File not found"
can be supressed, printed normally, or sent to stderr. Added EXIT MESSAGE status to SHOW EXIT and updated HELP SET EXIT.  

(2) Made a new function \ffileinfo(name,&a) that populates the specified array with 7 or 8 (or 9) elements:

  1. the file's name;
  2. the full path of the directory where the file resides;
  3. the file's modification date-time yyyymmdd hh:mm:ss;
  4. platform-specific permissions string, e.g. "drwxrwxr-x" or "RWED,RWE,RE,E";
  5. platform-specific permissions code, e.g. an octal number like 40775;
  6. the file's size in bytes;
  7. file type: 1=regular file; 2=executable; 3=directory; 4=link; 0=unknown.
  8. (if filename is link) name of linked-to file.
  9. (in Dev.06) "binary" or "text:xxx", where xxx is 8bit, 7bit, utf8, etc.
12 Mar 2013
9.0.304 Dev.03
§ The TOUCH command was updated to allow an arbitrary modification date-time to be applied to the touched file(s), rather than always the current date-time. Kermit's TOUCH command is quite powerful in its file selection capabilities, including size, date, type, patterns, exception lists, recursion, etc. Type HELP TOUCH at the C-Kermit prompt for details. § C-Kermit now shortens pathnames as much as possible for the file-transfer display, necessary because Unix paths are getting longer and longer and the name of the file increasingly tends to disappear off the end. This was done by replacing the user's home path with "~/" and/or leaving the path off entirely when the file is in C-Kermit's current directory.
11 Mar 2013
9.0.304 Dev.02
This is a development version, not widely tested and therefore not ready for release. Since the Kermit Project at Columbia University was canceled, I no longer have access to a wide variety of platforms for development and testing.   What's new in 9.0.304: § Android support via the "make linux" path (Tim Sneddon). § Noted in makefile that "make linux" works for Raspberry Pi. § Fixes for OpenSSL 1.0.0 and later; C-Kermit built with OpenSSL was sometimes supriously refusing to run when a new SSL version was detected (Adam Friedlander and Jeff Altman). § Support for multiarchitecture libraries in Linux (curses, resolv, etc) (Ian Beckwith). § Fix for a core dump when transferring a file on OpenBSD on Sparc64 due to some inconsistencies in declarations between modules (the edit with just this fix was marked 9.0.303 and may have made its way into some OpenBSD distributions). § Various minor fixes described at the bottom of NOTES.TXT. Thanks also to Bruce Skelly for verification on the Raspberry Pi.
20 Aug 2011
The C-Kermit 9.0.302 release, contains corrections applying only to FreeBSD 8 and 9.
11 Jul 2011
The C-Kermit 9.0.301 release, contains a correction applying only to Solaris 10 and 11.
06 Jul 2011
Beta.01
C-Kermit 9.0.301 Beta.01. Fixes DNS lookup in Solaris 10 and 11 (which apparently has never worked); suppresses a couple compiler warnings in the SSL module. So far there is no need for 9.0.301 on any platform but Solaris 10 and 11.
30 Jun 2011
The C-Kermit 9.0.300 release (actually released 28 June but dated 30 June).
21 Jun 2011
Beta.02
Builds correctly on more and more platforms with and without MIT Kerberos 5 and/or OpenSSL.
16 Jun 2011
Beta.01
First Open Source version. FORCE-3 error checking. Simple variable evaluation. See the C-Kermit 9.0 Beta Test release notes.
21 Sep 2010
Alpha.09
SSL feature detection updates in Solaris and Linux; pseudoterminal support update in Solaris.
23 Aug 2010
Alpha.08
CSV support for \fjoin(), Suse Linux UUCP lockfile update.
05 Aug 2010
Alpha.07
Several bug fixes, new \fstrcmp() function.
07 Apr 2010
Alpha.06
Comma-Separated Value files, documented HERE.
05 Apr 2010
Alpha.05
New functions: \fcvtcsets() (converts a string from one character set to another); \fdecodehex() (decodes hex escapes in a string); \fstringtype() (tells if a string is 7-bit, 8-bit, or UTF-8). Documented HERE.
29 Mar 2010
Alpha.04
FTP connections could not be made from 64-bit Unix platforms like Mac OS X or RHEL5 on x86_64, or any Unix OS on Alpha hardware. This should be fixed now. Also various unrelated compile-time warnings fixed.
19 Mar 2010
Alpha.03
See notes for details. General: § Escape-sequence stripping from session log by INPUT as well as by CONNECT. § New commands for selectively issuing progress or debugging messages from scripts. § A fix to prevent the fixed packet-timeout interval from going to an unexpected value. Unix: § Relaunching a closed SSH connection with the CONNECT command is now possible. § Unlike Alpha.02, Alpha.03 can be built on FreeBSD 8.0 and SunOS 4.1. § New aixg target for building on AIX with gcc. § New aix+ibmssl target for building on AIX with IBM SSL. VMS: § "Large File Support" now included by default on 64-bit hardware on VMS 7.3 and later § Kermit's internal FTP client is now included by default in any build that also includes TCP/IP networking. § In network builds that request OpenSSL support are more self-configuring. § Preliminary limited support for the ODS-5 file system on VMS 7.2 and later. § Support for older and older VMS versions.
01 Feb 2010
Alpha.02
§ Fix for unbalanced #ifdefs in ckuusy.c from SMS, which affected VMS only. § A fix for INPUT /COUNT:n from Gerry Belanger. § New \fsqueeze() function to squeeze each instance of multiple whitespace in a string into a single blank (and to remove leading and trailing whitespace). § For Kerberos builds NO_KRB5_INIT_ETS now defined by default, since krb5_init_ets() is no longer used and may be missing from the Kerberos libs. § Improvements to FSEEK /FIND:pattern. § Improvements to \fword() and \fsplit() so they work as expected with strings encoded in 8-bit character sets. § A fix to serial port handling from John Dunlap when trying to disable RTS/CTS flow control on a 3-wire cable. § The C-Kermit program herald now announces if SSL, Kerberos 4, or Kerberos 5 support is included. § Adaptation to MINIX 3.1.5, except for the FTP client. § ckuker.nr (Nroff man page source) is now included in the tarball so "make install" will work.
20 Nov 2009
Alpha.01
First C-Kermit 9.0.299 Alpha-test release, Described here.
20 Dec 2006
Dev.27
Very minor, fixed some compiler warnings in the VMS version.
20 Dec 2006
Dev.26
Fixed FTP timeouts to work on the command channel as well the data channel, e.g. for directory listings, and added code to make timeouts work for uploads as well as downloads, but so far this is untested. Fixed some compiler warnings from HP-UX 9 and earlier over the new timeout code. § Fixed a bug in the VMS version of C-Kermit in which downloading a file with SET DESTINATION NOWHERE (or /CALIBRATE) could fail if there was not enough space on the disk to hold the file, even though the file was not going to be stored on the disk. § Changed \fkeywordvalue() (which parses name=value pairs) to allow alternative separators to be specified; e.g. in CGI scripts where the separator can be either = or &.
13 Dec 2006
Dev.25
Fixed a bug in INPUT /COUNT:. Removed an unnecessary debug() statement in ckufio.c that caused some compiler warnings.
11 Dec 2006
Dev.24
By popular demand (especially this week with the Kermit FTP site server malfunctioning), I added a SET FTP TIMEOUT feature. For now, it works on downloads only, only on the data connection (so, for example, it doesn't help with stuck DIRECTORY commands). Works as expected in conjunction with SET FTP ERROR-ACTION when downloading multiple files with MGET. Needs a lot of testing on both clear-text FTP and FTPS (SSL/TLS) sessions. I'll flesh it out later.
Other changes…  § Fixed a bad bug in the date-parsing routines; it's been there for years: if a date string includes a timezone, e.g. "Sat, 9 Dec 2006 19:26:23 EST", and converting it to GMT changes the date, the separate variables for day, month, and year (which are used later) were not updated, and the final result was a day off.  § For communication protocols: INPUT /COUNT:n to read exactly n characters without any matching. Can be used, for example, with $CONTENT_LENGTH in CGI scripts; NUL characters are counted but not collected.  § Added an optional 4th argument to \findex(), \frindex(), \fsearch(), and \frsearch(): the desired occurrence number of the searched-for string.  § Added \fcount(s1,s2) to tell the number of occurrences of s1 in s2.  § Added \ffunction(s1) to tell whether a given built-in function exists.  § Changed RENAME /COLLISION:PROCEED to be /COLLISION:SKIP, which is clearer (but kept PROCEED as an invisible synonym).  § Made "help locus" a synonym for "help set locus".  § Fixed several places where a string variable was being compared by "==" to a string literal, reported by Pavol Rusnak.
01 Dec 2006
Dev.23
Added COPY /PRESERVE (like "cp -p" in Unix) and COPY /OVERWRITE:option. DIRECTORY /BRIEF fixed to pay attention to other switches. SHOW CONNECTION fixed to show TCP Port (service, socket) number in TCP connections; ditto for the connection log. DECLARE command fixed to allow for empty array element initializers (e.g. undefined variables). Fixed DIRECTORY /ARRAY:&a to behave sensibly when no files are found, i.e. to create a 0-dimension array. Fixed the general treatment of 0-dimension arrays to be consistent. Fixed DIR /ARRAY:&a to produce an array of correct dimension when file selection switches are included. Added the ability to compose the name of a function, e.g. "define \%a upper, \f\%a(abc)". Fixed a few obscure parsing programs in the Lisp subsystem, e.g. (=) would hang. Changed predicate operators to work even if there is only one operand, the same as Franz Lisp.
12 Oct 2006
Dev.22
New TOUCH command, like UNIX but accepts all the same file-selection switches as Kermit's DIRECTORY command. New netbsd+openssl makefile target. Fixed the new RENAME command to work in the case where the source and destination file names both include paths. Fixed the FOPEN and FCLOSE commands to make sure to scrub and reinitialize all the file information (previously it was possible that some of the old info, e.g. current line number, could be inherited from a previously closed file). Fixed an unguarded variable reference in \fdialmessage() that broke compilation when NODIAL was defined.
05 Oct 2006
Dev.21
One fairly major change: code was added to not drop DTR on a serial connection when closing the connection and/or EXITing if SET EXIT HANGUP is OFF. I don't have a good way to test this just now, but at least it seems to compile OK on a fair number of platforms. And then some minor things... Added DIRECTORY /COUNT:x to count the number of files that match the given criteria and store the result in the given variable. Fixed DIRECTORY /TOP to work if the number of lines was omitted, displaying the top 10. Added HDIRECTORY as an invisible synonym for DIR /SORT:SIZE /REVERSE, i.e. show the biggest ("H"ugest) files first; can be used with other switches, e.g. HDIR /TOP to show the 10 biggest files. Fixed DIRECTORY /FOLLOWLINKS and /NOFOLLOWLINKS, which apparently always behaved the same. Added \v(dialmessage) which is the text string corresponding to \v(dialstatus) (e.g. 2 = "Communication device not specified"). Added a missing UUCP lock directory name definition for Linux (used only for display). Even more minor: Improved error messages for new RENAME command. Made IF KERBANG more reliable. Fixed \fkeywordval(xxx) to undefine xxx (e.g. when a keyword parameter xxx is defined with no value). Truncated super-verbose syntax error messages to be just one line long.
09 Jul 2006
Dev.20
New \fpictureinfo() function for getting information about JPG and GIF images; CLICK HERE for a demonstration script that creates a website from a collection of JPGs. Also: Verified that Kermit's FTP client transfers large files correctly in both directions with the 64-bit Tru64 FTP server, and also handles recovery correctly in both directions (apparently results are mixed with other FTP servers that supposedly handle large files). I added FTP REPUT and FTP RESEND as FTP-specific synonyms for RESEND, just as FTP REGET was already available as an FTP-specific synonym for REGET. I fixed the IF command to use large integers in all numeric comparisons, e.g.

if > \%a 3000000001 ...

(this didn't work before).

I fixed \fkeywordvalue() to allow for values comprised of more than one word, and I added \v(lastkeywordvalue) to represent the keyword most recently processed by \fkeywordvalue(). I changed \f_status(\%c), when the argument was not defined, to behave the same as if it contained a channel number of a file that was not open. This makes it possible to write commands lines like this:

if \f_status(\%c) fwrite /line \%c blah blah blah...

without having to worry about whether we have opened the file yet. What else... I fixed \fstripb() to not dump core if called without the optional second argument. Added \fgetpidinfo(n) to get information about Process ID n; currently only for Unix, returns 1 if the process is alive; 0 if the process does not exist.

Also: New invisible WDIRECTORY command = DIR /SORT:DATE /REVERSE. And new /TOP:n DIRECTORY command switch says to show only the top n lines of the listing.

12 Jun 2006
Dev.19
Large file support added for IRIX 6.5 by Scott Kasten. File transfer display fixed for RESEND/REGET of large files. tru64-51b+openssl makefile target fixed, SSL/TLS versions now build OK on Tru64 Unix.
14 May 2006
Dev.18
New feature: SET SEXPRESSION TRUNCATE-ALL-RESULTS lets you force S-Expressions to do only integer arithmetic (see the two Easter date calculation scripts). Big new feature: A new set of switches for the RENAME command, allowing you to rename groups of files at once, changing case of letters or changing the character set, removing spaces or changing them to something else, and doing anchored or floating or occurrence-based string replacement, described HERE. Other changes: the FILE commands (FOPEN, FREAD, FWRITE, FCLOSE, etc) have been changed to consume far less memory. Various #ifdefs corrected for different feature-selection combinations.
27 Mar 2006
Dev.17
New secure builds for Linux: linux+ssl (OpenSSL 0.9.7 or later); linux+krb5 (Kerberos 5); linux+krb5+ssl (both), tested on Red Hat AS4.3 (the old targets don't seem to work any more). Warnings about getsockopt() and getsockname() in Mac OS X fixed. Improved targets for HP-UX with OpenSSL, with and without Zlib.
13 Mar 2006
Dev.16
Fixed FTP [M]GET /DELETE /MOVE-TO:xxx. This combination never worked. Created a new target for HP-UX 10 and 11 with OpenSSL but not Zlib, for systems where Zlib is not installed. Added OpenSSL version number display to SHOW FEATURES. Verified this edit with AIX 5.3.
04 Mar 2006
Dev.15
Added large file support for AIX 4.2 and later. Added SSL option for AIX 5.1 and later. Fixes for IRIX 6.4 and 6.5 (DIRECTORY command would loop forever). HELP command fixed to work for tokens as well as keywords. Thanks to J. Scott Kasten for the IRIX fixes.
23 Feb 2006
Dev.14
Attempted to squelch a few more SSL messages when SET QUIET ON. Adjustments to the HP-UX 7.00 makefile target. New makefile targets for NetBSD and IRIX 6.5 with SSL/TLS, SRP, and ZLIB. New NetBSD target omitting curses. New IRIX 6.5 target for building with GCC. Updated Linux-with-no-curses (linuxnc), Linux-with-curses-rather-than-ncurses (linuxc) targets. Old NetBSD targets retired since the new ones should work with any NetBSD release.
09 Feb 2006
Dev.13
Fixed a couple typos that caused warnings or build failures on some platforms. Finally determined that large file support (LFS) can be the default on all Solaris builds (Sparc and PC), Solaris 9 and later. Maybe earlier versions also but I don't have access to them any more to check. So all the regular "solarisxxx" targets were changed to select LFS, and the previous "solarisxxxlfs" targets are now just synonyms.
08 Feb 2006
Dev.12
Fixed "value too large for switch case" compilation errors in S-Expression parser. Fixed setting of serial speed to 921600bps on platforms that support it. Restored the ability to use arithmétic expressions in compact substring notation, which I broke back in August, and this required a small change in syntax in the [startpos-endpos] form (changing the separator from "-" to "_" but that shouldn't bother anyone because this is a new and as-yet undocumented feature. Fixes for the HP-UX 6 and 7 makefile targets. A new build for SCO OSR6, which required a fair amount of source-code changes plus a new makefile target. Fixed a bug that has been in C-Kermit ever since command switches were added in version 7.0: variables were not expanded in the the RECEIVE command as-name. The current list of 32-32/64-64 bit builds is now in a table HERE.
09 Jan 2006
Dev.11
Large-file access and large-integer arithmetic working in FreeBSD, NetBSD, OpenBSD, HP-UX, and UnixWare. Here is the current status of 32-bit builds that support 63-bit file lengths and integer arithmetic. All known pure 64-bit builds (Tru64 Unix, Solaris with -xarch=generic64, Linux on X86_64, etc) handle large files and big numbers automatically. All the regular 32-bit builds (QNX 4.25, older HP-UX versions, etc) seem OK.

Linux OK on all versions I've tried back to Red Hat 6.1.
Solaris OK in Solaris 9 on Sparc. Not tested on Intel or in other Solaris releases.
HP-UX Tested OK on HP-UX 11.11 PA-RISC and 11i v2 IA64.
FreeBSD Tested OK on Intel back to FreeBSD 3.3.
NetBSD OK on Intel in NetBSD 2.0.3. LFS apparently not ready in NetBSD 1.x.
OpenBSD Tested OK on Intel back to OpenBSD 2.5
Mac OS X Tested OK on Mac OS X 10.3.9 and later.
UnixWare Tested OK on SCO UnixWare 7.1.4.
AIX LFS should work but not tested, I have no access.
IRIX 6.5 LFS requires changing all APIs to blah64().

Other changes in Dev.11:

  • New command FSEEK /FIND:pattern, seeks to the first line in an FOPEN'd file containing the given string or matching the given pattern.
  • FSTATUS can now be given without a channel number if only one file is FOPEN'd.
  • Another correction to the pattern matcher involving clists; "if match index.html [a-hj-z]*" succeeded when it should have failed.
  • Got rid of LONGLONG feature test, we don't need it.
  • Made command error messages less verbose - no more dumping the command stack unless you request it.
  • Fixed WRITE SESSION to report success when it succeeds.
  • Copyrights updated to 2006.
29 Dec 2005
Dev.10
Implemented X/Open Single UNIX Specification Version 2 (UNIX 98) Large File Support (LFS), allowing 32-bit platforms to access, manage, and transfer files bigger than 2GB on platforms that support LFS. These include Linux on Intel PC hardware, Mac OS X 10.3.9 or 10.4.x, and Solaris 9 and 10 (Solaris on Sparc, of course, also supports pure 64-bit builds, but the LFS version has a much smaller footprint). This should work for both Kermit and FTP protocol transfers, although I have not yet found a way to test it in the FTP client. It also has the side benefit that new 64-bit signed integer data type can also be used elsewhere, e.g. in arithmetic, so the S-Expression and regular arithmetic expression evaluators were upgraded to use it when available. This applies to both 32-bit LFS platforms as well as 100% 64-bit platforms. All of this involved massive changes in the code, touching virtually every module, and there are sure to be spots I missed, so thorough testing is warranted. I've built and tested to some extent on both 32- and 64-bit versions of Linux going back to 1999, plus OpenVMS, SCO Unixware 7.1, FreeBSD 4.11, Tru64 Unix 4.0F, and Mac OS X 10.3.9 and 10.4.2. Areas to watch out for:

  • Does the SEND command work for regular files as well as long files?
  • Can both regular and long files be received?
  • Do versions that do not support long files properly refuse to receive them?
  • On the file-transfer display screen, do all the numbers look right?
  • Do numbers look right in debug and transaction logs?
  • Does the DIRECTORY command show the correct file size for all files?
  • Can you use FOPEN and FSEEK on both regular and long files?
  • What are the results of the following S-Expressions?
    (^ 2 30) (^ 2 31) (^ 2 32) (^ 2 62) (^ 2 63) (^ 2 64) (^ 2 99)
  • Do all your scripts still work?
  • etc. etc.

When building, use "make linux" to build any Linux version. This should automatically include LFS support on Linuxes that include it. I haven't been able to find any Linux platforms that don't, but in case it causes trouble, use "make linuxnolfs". For Solaris, use "make solaris9lfs" or "make solaris10lfs". I didn't make this the default for Solaris yet because I don't seem to have access to the i386 version of Solaris any more to make sure it works there too (Sun cc or gcc). For Mac OS X 10.3.9 or later, use "make macosx10.4".

Adding LFS to other builds on other platforms that support it should be easy: just do this:

make clean
make xxx "KFLAGS=-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"

where xxx is any makefile target. If you do this, let me know the results. Other changes in this edit are:

  • Fixed S-Expressions in the Mac OS X version.
  • Added HTTP support to FreeBSD and OpenBSD versions.
  • Added a new switch, /EXCEPT:pattern, to the GREP command.
15 Dec 2005
Dev.09
Added buffering code to speed up HTTP GET and all other input from an HTTP server; result is about 20 × faster on a fast network connection (clear-text, non-SSL connections only). Changed DIRECTORY and DELETE commands to not show filenames in braces when printing error messages. An updated HP-UX 9.xx makefile target to avoid core dumps from stack exhaustion. Fixed a typo in the non-ANSIC definition of ckfstoa().
04 Dec 2005
Dev.08
Discovered that on a SET PORT /SSL connection, Kermit treats incoming 0xff data bytes (e.g. sent from the POP server) as IACs and goes into Telnet negotiations. This makes it impossible to retrieve email from a SSL or TLS POP server if the mail contains any 0xff bytes, because the POP server doesn't do Telnet protocol. Kermit's current SSL and TLS methods both allowed for Telnet negotiations to be initiated by one side or the other. Added two new ones: /SSL-RAW and /TLS-RAW, which do not respond to Telnet IACs but, rather, accept them as data. Also: Updated INPUT and MINPUT help text; changed "make netbsd" to be a synonym for "make netbsd2" because the original netbsd target was ancient and got compiler warnings.
03 Dec 2005
Dev.07
In the DATE command and related functions, fixed parsing of dates like "Wed, 13 Feb 2002 17:43:02 -0800 (PST)", commonly used in email. Added a new format code 4 to \fcvtdate() to emit asctime() format, used in BSD-format email message envelopes. Added a new function \femailaddress() which, given a From: or Sender: header line from an RFC2822-format email address, extracts and returns the actual email address. Added INPUT /CLEAR so INPUT can be started with a clean buffer without requiring a separate CLEAR INPUT command. Added INPUT /NOWRAP which is explained HERE. Fixed some SSL/TLS messages that were not suppressed if SET QUIET ON. Fixed FOPEN /APPEND to work right even if the file didn't exist. Fixed IF KERBANG to not spuriously succeed if used in a Kerbang script that was invoked by another Kerbang script; it should succeed only for the top-level script. Changed \flop() and flopx() functions to take a third argument, a number signifying at which occurrence of the break character to lop, so:

\flopx(sesame.cc.columbia.edu) = edu
\flopx(sesame.cc.columbia.edu,,2) = columbia.edu

Laid some more groundwork for hybrid 32/64-bit builds (to allow "long" files to be transferred on 32-bit platforms that supply an appropriate API).

14 Nov 2005
Dev.06
Strictly for debugging an isolated FTP/SSL problem; one debug statement added.
11 Nov 2005
Dev.05
More data-type tests in SHOW FEATURES. •• A typo in the HP-UX 7.00 Makefile target was corrected. •• Even after the previous changes, it was still possible for SWITCH to produce incorrect results if the value of a case-label variable was too long. Any such error is now fatal to the script where it occurs. •• An idea popped into my head after having typed too many commands like "dir ck[cuw]*.[cwh]" to check the list of matching files, and then having to retype the same filespec in a SEND command: Why not unleash some unused control character such as Ctrl-K to spit out the most recently entered input filespec? So I did that, and also added a new variable \v(lastfilespec) that expands to the same last filespec, for use in scripts. •• The Unix version of C-Kermit failed to put anything in the session log if SET TERMINAL DEBUG ON. I changed it to log the debugging format, since that's what user who noticed this wanted. The alternative would be to just log the raw incoming stream as usual, or to add Yet Another SET Command to choose.
26 Oct 2005
Dev.04
Adjustment of builds for various old platforms to avoid the "long long not defined" compilation failure (older HP-UX versions, etc). Please notify me of any further failures. Adaptation to OpenSSL 0.9.8. More data-type feature tests for SHOW FEATURES (remember, this is to shake out the platforms differences in advance of attempting long-file support for 32-bit architectures). Major fixes to the SWITCH statement; it did not allow for long case labels (including variables that are expanded into long strings) and under certain circumstances it could execute the wrong case, e.g. if two case labels were not unique in their first 50 characters. The length limit for labels has been raised to 8K, overflows are now detected, and certain other failures have been corrected that are too hard to explain.
23 Oct 2005
Dev.03
Nothing major. In no special order: Prevented HTTP POST from adding an extraneous CRLF at the end. Fixed warnings in network and FTP for socket-related functions on HP-UX 11i V2, and got long-file transfers working on HP-UX 11i. Added tests to SHOW FEATURES for macros like INT_MAX, LONG_MAX, LLONG_MAX, as well as sizeof(long long) to shake out where we're going to have trouble when we start implementing the hybrid long-file support. Fixed some old-style prototypes for get/setuid-type functions. Continued work on the pattern matcher: patterns such as "*[abc]" could make Kermit loop or dump core; this is fixed. FREAD was fixed to fail and give a message if it tries to read a record that is too big for its buffer. FREAD /SIZE:n was fixed to make sure it reads n bytes or else fails. \Flen() and some other built-in functions would fail on string arguments longer than 8K, this is fixed. ASKQ was changed to not echo anything unless requested to do so, by adding a new switch /ECHO:c, allowing a character (such as asterisk) to be specified for echoing. Not echoing makes ASKQ very convenient for use in CGI scripts. FTP GET /COMMAND (used e.g. for piping an incoming file into more or less) always dumped core, fixed now. Various minor code corrections and cleanups. And, with this edit, C-Kermit is MINIX3-ready!
27 Aug 2005
Dev.02
More 64-bit work. When a 32-bit versions of Kermit is sent a long file, the result isn't pretty. First it truncates the file size that was announced in the sender's Attribute packet so the file-transfer display statistics are all wrong, and then in most cases when the 2^31 (or 2^32) byte boundary was hit, a trap would occur causing Kermit to exit immediately. As a first step in adapting 32-bit versions of C-Kermit to long files, I fixed these problems. And discovered that on some platforms, (such as in 32-bit C-Kermit builds on Mac OS X 10.3.9) the file would be received successfully anyway -- don't ask me how. Began to add some consciousness of 64-bitness at compile time (new CK_64BIT macro) and runtime (new \v(bits) variable). 64-bit builds now announce themselves as such in the startup banner. Got rid of numerous compiler warnings for socket-related calls in 64-bit builds and I hope also most 32-bit ones. In other areas: fixed ASKQ asterisk-echoing in VMS; fixed reception of files that had device specifications but no directory field in VMS; fixed REMOTE DIRECTORY listings to terminate lines correctly (with CRLF, not just LF); replaced all the silly FreeBSD makefile targets with a consolidated one ("make freebsd"); added a new makefile target ("macosx10.4_64") for 64-bit builds on Mac OS 10.4, and starting now I'm bumping the "Dev.xx" number each time there's a new upload; this one is Dev.02.
17 Aug 2005 Some work on 64-bit versions of C-Kermit. New targets 'solaris10_64' and 'solaris9_64' that actually work (Sun CC only, I'm still having problems with gcc). Having built them, I found some runtime problems: some versions (notably Solaris) would not make Telnet connections; other versions (such as Linux on ia64 or x86_64) would not make ssh connections. These are now fixed. The big news is that 64-bit builds transfer large files correctly between themselves. So far these include Solaris 9 and 10, Linux on AMD x86_64, Linux on ia64, and Tru64 Unix on Alpha. These versions also handle long files in all the other ways that Kermit deals with files -- the DIRECTORY command, the file-related functions, the local file interface (FOPEN / FREAD / FWRITE / FCLOSE). I believe the FTP client also works, but it's hard to prove. The next -- and much more difficult -- step is to handle long files on those 32-bit platforms that support them, through any of several "transitional APIs". Also in this edit, I changed the plain-text version of ASKQ to echo asterisks.
14 Aug 2005 New build target for Mac OS X 10.x that automatically picks up Mac OS version, e.g. 10.4.2, for the program herald. Updated UnixWare 7 target (uw7) to also pick up UnixWare version automatically. Fixed FOPEN to set the channel variable to -1 if it fails rather than possibly leaving it undefined. Added two special channel values, -8 and -9, that turn all FILE i/o commands (FREAD, FWRITE, FSEEK, etc) into noops that succeed (-8) or fail (-9). Fixed IF DIRECTORY to work for Unix pathnames that begin with tilde. Fixed the NONOSETBUF compile-time directive (which instructs Kermit to make stdout unbuffered) as well as the corresponding runtime --unbuffered command-line option. Cleared up some compiler warnings.
11 Aug 2005 Compact substring notation extended to allow ending position to be specified instead of length; thus \s(foo[12:18]) means the substring of foo starting at position 12 of length 18, and the new \s(foo[12_18]) means the substring of foo starting at position 12 and ending with position 18. // Fixed a six-year-old bug relating to disconnected compound ELSE parts. Now those who prefer to put the ELSE on the line after the closing brace of the IF clause can do so once again. // Added HTTP support in Mac OS X 10.3 and later, and on BSDI 4.x. // Built on Mac OS X 10.3.9 and 10.4.2, Solaris 9 and 10, RH Linux AS4, Tru64 Unix 4.0F, and SCO Unixware 7.1.4.
18 Jul 2005 Added OpenSSL support for Tru64 Unix. Added HTTP support for NetBSD. Fixed HTTP GET command work with URLs that contain metacharacters. Fixed the June 16th fix to the pattern matcher. Added some missing HELP text.
27 Jun 2005 New makefile targets for Solaris 10.
16 Jun 2005 Fixed some problems matching patterns that use the [a-z] construct.
15 Jun 2005 New build target for Mac OS X 10.3 with Kerberos 5 and OpenSSL. Fixed error in herald generation for NetBSD 1.5, 1.6. Fixed SET TERMINAL IDLE-ACTION OUTPUT to work as documented, i.e. to send a NUL character if the OUTPUT string is empty. New SET WILDCARD-EXPANSION { ON, OFF } command allows straightforward processing of filenames obtained programmatically if they happen to contain literal metacharacters, or for that matter if you want to type them interactively without all the quoting.
12 Jun 2005 New IF LINK command (Unix only) to test for symlinks. New SET TERMINAL LF-DISPLAY command. New --unbuffered command-line option for Unix, to force unbuffered console i/o. New \flopx() function returns rightmost field from string (such as file extension). Improved IDLE-ACTION OUTPUT interpretation in SHOW TERMINAL display. Automatic version number generation for herald in NetBSD 2.0 and later. Security updates. Fixed \fdirectory() when used with nonwild directory name. Fixed date/time differencing across year boundary. Fixed FTP HELP to override verbosity setting. Fixed some incorrect prototypes. Fixed a syntax error in CKVKER.COM.
23 May 2004 Fix automatic redialing of numbers that contain spaces when DIAL MACRO is defined. Add client and server side of REMOTE MESSAGE. Fix FTP CD to strip quotes or braces from around argument.
10 May 2004 Allow access to FTP ports above 16383. Fix FTP output of Unicode text to screen. Relax FTP FEAT parsing to allow different kinds of whitespace. Fix short-circuit property of S-Expressions like (AND X Y). Inhibit automatic switching from SPACE parity to NONE on autodownload. Fix DIAL MACRO to work with multi-word phone numbers. Deal with compile-time warning on certain Red Hat systems regarding <baudboy.h>.
17 Apr 2004 The UUCP lockfile for Mac OS X was /var/spool/uucp, which does not exist. Fixed it to be /var/spool/lock, which does exist, and re-uploaded version 8.0.211. You can tell the difference because SHOW VERSIONS has a 17 Apr 2004 for the Communications I/O module. Also the 10.3 executable now has a designer banner: "Mac OS X 10.3".

C-Kermit 9.0 / The Kermit Project / kermit@kermitproject.org