imported 9.0.301 upstream/301
authorIan Beckwith <ianb@erislabs.net>
Tue, 12 Jul 2011 01:47:40 +0000 (02:47 +0100)
committerIan Beckwith <ianb@erislabs.net>
Tue, 12 Jul 2011 01:47:40 +0000 (02:47 +0100)
15 files changed:
ckc299.txt [deleted file]
ckc300.txt [deleted file]
ckc301.txt [new file with mode: 0644]
ckcbwr.txt
ckccfg.txt
ckcmai.c
ckcplm.txt
ckermit70.txt
ckermit80.txt
ckermit90.txt
ckubwr.txt
ckuins.txt
ckuker.nr
ckututor.txt
makefile

diff --git a/ckc299.txt b/ckc299.txt
deleted file mode 100644 (file)
index 10de5d5..0000000
+++ /dev/null
@@ -1,7816 +0,0 @@
-C-KERMIT CHANGE LOG (Changes since 8.0.207 / K95 2.1.3 January 2003)
-
-  Chronological order.
-  Go to the bottom to find the newest edits.
-
-  F. da Cruz, The Kermit Project, Columbia University, NYC.
-
-FTP USER, FTP ACCOUNT, plus the various prompts and switches for FTP username,
-password, and account all neglected to strip quotes, and in most cases quotes
-are necessary to specify a username that contains spaces.  ckcftp.c,
-15 Jan 2003.
-
-FTP MPUT f1 f2 f3... gets a parse error if any of the fn's do not match an
-existing file.  This is bad for scripts.  In doftpput(), cmfdb() looks for
-keywords (switches) or CMIFI.  When it hits CMIFI, it exits from the initial
-parse loop and then does additional cmifi()s in a loop until done.  The most
-obvious fix is to parse each field with cmfdb(CMIFI,CMFLD), i.e. fall back to
-CMFLD if CMIFI doesn't match anything.  Then if CMFLD was used, we don't add
-the filespec to the list.  This is a rather big change but it seems to work.
-No error messages or failures happen for non-matching fields, but an error
-message is printed (and the MPUT command fails) if none of the fields match
-any files.  This fix got in too late for 2.1.3; workaround: use C-Shell
-like wildcard list (ftp mput "{*.abc,foo.*}").  ckcftp.c, 16 Jan 2003.
-
-GREP did not pass its pattern through the expander, thus variables could
-not be used for patterns.  This must have been an oversight -- I can't find
-anything in my notes about it.  Fixed in dogrep(): ckuus6.c, 24 Jan 2003.
-
-New makefile target for HP-UX 11.xx with OpenSSL from Tapani Tarvainen.
-makefile, 31 Jan 2003.
-
-From Jeff:
- . Avoid core dump when dereferencing tnc_get_signature(): ckuus4.c.
- . Bump version numbers to 8.0.208, 2.1.4: ckcmai.c.
-
-Added /NOLOGIN to FTP [OPEN].  ckcftp.c, 10 Feb 2003.
-
-Don't dump core if FTP DEBUG is ON and FTP OPEN does not include a service.
-openftp(): ckcftp.c, 10 Feb 2003.
-
-HELP PATTERN text incorrectly identified commands and functions with
-floating and anchored patterns.  The corrected lists are:
-Floating: GREP, TYPE /MATCH:, /EXCEPT: patterns, \farraylook(),
-Anchored: IF MATCH, file-matching wildcards, \fsearch(), \frsearch()
-ckuus2.c, 10 Feb 2003.     
-
-INPUT n \fpattern(xxx) did not work for case-independent comparisons.
-Fixed in doinput(): ckuus4.c, 10 Feb 2003.
-
-It seems \fpattern() didn't work with MINPUT at all.  There was no code to
-handle \fpattern() in the MINPUT parse loop, so it never worked.  The code
-had to be totally rewritten to use cmfld() in a loop, rather than cmtxt()
-and then cksplit().  Furthermore, whenever any of the fields was an
-\fjoin(), this had to be split.  ckuusr.c, 10 Feb 2003.
-
-Macro replacement via \m() and \fdefinition() does not work as advertised
-(i.e. case sensitively) for associative array elements; e.g. \m(xxx<abc>) is
-treated the same as \m(xxx<ABC>), contrary to section 7.10.10 of the C-Kermit
-7.0 update notes, and to the fact that the two really do exist separately.
-Fixed by adding a static function isaarray(s) which succeeds if s is an
-associative array reference and fails otherwise, and then having \m()
-and \fdef() call mxxlook() (case-sensitive lookup) if isaarray(), otherwise
-(as before) mxlook()).  ckuus4.c, 11 Feb 2003.
-
-Fixed FTP OPEN to allow the /USER switch to override SET FTP AUTOLOGIN OFF,
-just as /NOLOGIN overrides SET FTP AUTOLOGIN ON.  ckcftp.c, 11 Feb 2003.
-
-In K95, "set key \1234 \27H" (any SET KEY command in which the first char of
-the definition was backslash, and the ONLY character after the backslash
-quantity was an uppercase letter, that letter would be lowercased).  Diagnosis:
-xlookup() poking its argument (see notes from July 2000).  Jeff sent a fix.
-ckucmd.c, 15 Feb 2003.
-
-Ran my S-Expression torture test to make sure Sexps still worked.  They do,
-except the bitwise & and | operators were broken, e.g. (& 7 2) and (| 1 2 4)
-get "Invalid operand" errors.  Jeff's code had added an early failure return
-from the lookup loop when when a single-byte keyword matched a keyword that
-started with the same byte but was more than one byte long.  So "&" would hit
-"&&" and fail instead of continuing its search (xlookup tables aren't sorted
-so there can be no early return).  Fixed in xlookup(): ckucmd.c, 16 Feb 2003.
-
-Got rid of "krbmit" target from makefile.  It's still there, but we don't
-use it any more.  All secure targets now use "xermit", and produce a binary
-called wermit, just like the regular ones do (except the old ckucon.c ones).
-Non-secure targets, since they don't define any of the security symbols,
-wind up compiling and linking to (mostly) empty security modules.  makefile,
-15 Feb 2003.
-
-Added \fcvtdate(xxx,3) to format its result in MDTM format (yyyymmddhhmmss,
-all numeric, no spaces or punctuation).  Of course these numeric strings
-are too big to be 32-bit numbers and are useless for arithmetic, but they're
-useful for lexical comparison, etc.  ckuus[24].c, 16 Feb 2003.
-
-The following FTP commands did not set FAILURE when they failed: RMDIR,
-CD, CDUP, Fixed in the corresponding doftpblah() routines.  ckcftp.c,
-16 Feb 2003.
-
-RENAME would sometimes not print an error message when it failed, e.g. in K95
-when the destination file already existed.  ckuus6.c, 17 Feb 2003.
-
-Fixed COPY error messages, which did not come out in standard format when
-/LIST was not included.  ckuus6.c, 17 Feb 2003.
-
-Fixed #ifdefs in ck_crp.c to allow nonsecure builds on old platforms like
-System V/68 R3.  19 Feb 2003.
-
-Similar treatment for ck_ssl.c.  20 Feb 2003.
-
-From Jeff, 21 Feb 2003:
- . AIX53 and AIX52 symbols for ckcdeb.h, makefile.
- . New gcc targets for various AIX 4.x/5.x versions: makefile.
- . Copyright date updates: ck_crp.c, ck_ssl.c.
- . ENABLE/DISABLE QUERY broken because keyword table out of order: ckuusr.c.
- . Fixed the use of HTTP proxies for HTTP [RE]OPEN for Unix: ckcnet.c.
-
-Also for K95 only: Allow file transfer when K95 is invoked on the remote end
-of a connection to a Pragma Systems Terminal Server connection; automatically
-SET EXIT HANGUP OFF when invoked with open port handle ("k95 -l nnnn").
-
-"cd a*" failed even when "a*" matched only one directory.  Fixed in cmifi():
-ckucmd.c, 21 Feb 2003.
-
-In the Unix version, replace "extern int errno;" with "#include <errno.h>"
-if __GLIBC__ is defined, since glibc now defines a thread-specific errno.
-ckcdeb.h, 26 Feb 2003.
-
-Added #ifdefs to skip compilation of ckuath.c in nonsecure builds.  Tested
-by building both secure and regular versions in Linux.  ckuath.c, 26 Feb 2003.
-
-Ran the build-in-84-different-configurations script on Linux to make sure it
-still builds with all different combinations of feature selection options.
-All OK.  26 Feb 2003.
-
-Built on VMS.  Needed to add a prototype for mxxlook*() to ckuusr.h; built
-OK otherwise.  26 Feb 2003.
-
-From Jeff: More #ifdef shuffling for nonsecure builds: ckuath.c, ck_ssl.c,
-27 Feb 2003.
-
-Added code to ensure \v(download) ends in a directory separator in Unix,
-Windows, and OS/2.  ckuus7.c, 27 Feb 2003.
-
-Added code to K95 zfnqfp() to tack on directory separator when returning
-a directory name.  ckofio.c, 27 Feb 2003.
-
-Somehow an old copy of ckuath.c popped to replace the new one.  Put the new
-one back.  28 Feb 2003.
-
-From Jeff: Fix typo in my K95 zfnqfp() code from yesterday; fixes for handling
-UNCs uniformly, no matter which way their slashes are leaning.  ckofio.c,
-28 Feb 2003.
-
-At Jeff Mezei's suggestion, separate text and binary mode open sequences
-for VMS session log.  ckvfio.c, 28 Feb 2003.
-
-Added freebsd48 target for FreeBSD 4.8.  makefile, 1 Mar 2003.
-
-Changed Mac OS X entries to include -DUSE_STRERROR.  makefile, 2 Mar 2003.
-
-Fixed GETOK /GUI to evaluate its text argument.  ckuus6.c, 3 Mar 2003.
-
-Jeff fixed the K95 Dialer QUICK dialog to (a) allow templates, and (b) have
-a Save-As option.  3 Mar 2003.
-
-Jeff fixed a problem with the Xmodem-CRC checksum being crunched whenever
-there was a retransmission.  7 Mar 2003.
-
-Added target/banner for Tru64 5.1B.  makefile, ckuver.h, 5 Mar 2003.
-
-In Unix, the zcopy() routine (used by the COPY command) reset the user's umask
-to 0 for the remainder of the Kermit process lifetime.  The bug was in
-ckufio.c 8.0.194, 24 Oct 2002, and is fixed in ckufio.c 8.0.195, 6 Mar 2003.
-Of course this happened after building 155 C-Kermit 8.0.208 binaries.  (But
-before officially releasing 8.0.208.)
-
-In the VMS version, changed:
-
-        while ((n--) && xx_inc(2) > -1) ;
-to:
-        while ((n--) && xx_inc(2) >= 0) ;
-
-to suppress the "...is being compared with a relational operator to a constant
-whose value is not greater than zero" warning.  ckvtio.c, 7 Mar 2002.
-
-Added a debug call to dologend in hopes of catching overzealous Locus
-switching, which seems to happen only in K95.  ckuus3.c, 7 Mar 2002.
-
-Rebuilt binaries for some of the more current Unix releases: AIX 4.3.3-5.1,
-Solaris 7-9 , Red Hat 7.0-8.0, Slackware 8.1, Freebsd 4.7-4.8, NetBSD 1.6,
-OpenBSD 3.2, Unixware 7.1.3, Open Unix 8, OSR5.0.6a, etc.  A Unix binary with
-COPY umask fix shows a 6 Mar 2003 date for "UNIX File support" in SHOW
-VERSIONS; a binary without the fix shows 24 Oct 2002.
-
-C-Kermit 8.0.208 dated 14 March 2003 released on 10 March 2003.
-
----8.0.208---
-
-From Jeff 13 Mar 2003:
- . Updated SSL module allows importation of tickets from host.
- . freebsd50+openssl target: makefile.
- . FTP PUT /PERMISSIONS error message for K95: ckcftp.c.
-Fixed MINPUT to strip quotes or braces from around targets (this was broken
-on Feb 10th).  Thanks to Jason Heskett for discovering and reporting this
-(killer) bug.  ckuusr.c, 14 Mar 2003.
-
-Changed version number to 209 Dev.00.  ckcmai.c, 14 Mar 2003.
-
-While debugging the alphapage script, I found that the command "minput 8 \6\13
-\21\13 \13\27\4\13 \30\13" gets "?Not confirmed" in 8.0.208 and 8.0.209, but
-not in 206 and earlier.  This problem too was introduced on Feb 10th by
-changing MINPUT parsing from cmtxt() followed by cksplit() to cmfld() in a
-loop.  cmfld() uses setatm() to return its result and of course setatm()
-breaks on \13.  Changing setatm() not to do this would break everything else.
-But cmfld() has no arguments that let us tell it to do anything different in
-this case.  Changing the API would be a disaster.  The only solution is to add
-an "MINPUT ACTIVE" (minputactive) global variable that tells cmfld() to tell
-setatm() not to break on CR.  Now MINPUT with braced targets containing CR
-and/or LF works in 209, 206, and 201 (but not 208).  ckucmd.c, ckuusr.c,
-ckuus5.c, 15 Mar 2003.
-
-MINPUT n \fjoin(&a) works OK if all the members of \&a[] are text strings, but
-if they are strings of control chars (as above), they don't get separated by
-the spaces.  For example in:
-
-  dcl \&a[] = "\4\5" "\6\7" xxx
-  minput 10 \fjoin(&a)
-
-MINPUT gets two targets: "aaa" and "\4\5 \6\7 xxx".  The bug was in the
-cksplit() call in the \fjoin() case of MINPUT: it needed to specify an
-include set consisting of all the control characters except NUL.  ckuusr.c,
-16 Mar 2003.
-
-But there's still a problem:
-
-  dcl \&a[] = "\4\5\13\10" "\6\7" "xxx"
-
-creates an array whose first member is "^D^E (one doublequote included).  But
-if braces are used instead, there's no problem.  Same deal as MINPUT: cmfld()
-breaks on CR or LF, thus the end quote is lost.  If I set minputactive for
-DECLARE initializers too, that fixes it.  Is there any reason not to do this?
-Can't think of any (famous last words)...  ckuusr.c, 16 Mar 2003.
-
-Since it has multiple applications, changed the flag's name from minputactive
-to keepallchars.  ckucmd.c, ckuus[r5].c, 16 Mar 2003.
-
-\v(exedir) wasn't being set correctly (it included the program name as well
-as the directory).  Fixed in getexedir(): ckuus4.c, 16 Mar 2003.
-
-SET CARRIER-WATCH <Esc> "auto matic" (spurious space in supplied keyword).
-Cosmetic only; it still worked.  Fixed in setdcd(): ckuus3.c, 16 Mar 2003.
-
-"directory a b c" listed too many files -- all files whose names END WITH a,
-b, or c, rather than the files whose names WERE a, b, or c.  Diagnosis: The
-filespec is changed into a pattern: {a,b,c}, which is the correct form.  It is
-passed to nzxpand(), which goes through the directory getting filenames and
-sending each one to ckmatch() with the given pattern.  ckmatch() receives the
-correct pattern but then prepends a "*" -- that's not right.  It's not just
-in filename matching either.  The following succeeds when it shouldn't:
-
-  if match xxxxc {{a,b,c}} <command>
-
-Changing ckmatch() to not prepend the "*" to each segment fixes the command
-above but breaks lots of others.  Running through the "match" torture-test
-script shows the problem occurs only when the {a,b,c} list is the entire
-pattern, and not embedded within a larger pattern.  Testing for this case
-fixed the problem.  ckmatch(): ckclib.c, 16 Mar 2003.
-
-Fixed FTP MODTIME to not print anything if QUIET ON.  ckcftp.c, 16 Mar 2003.
-
-Picked up a new ckuath.c from Jeff, not sure what the changes are. 16 Mar 2003.
-
-Did a few regular and secure builds to make sure I didn't wreck anything.
-
-Changed version number to 209 (final).  ckcmai.c, 16 Mar 2003.
-
-Jason Heskett found another bug: if you define a macro FOO inside the
-definition of another macro BAR, and FOO's definition includes an odd number
-of doublequotes (such as 1), FOO's definition absorbs the rest of BAR's
-definition.  Example:
-
-  def TEST {
-    .foo = {X"}
-    sho mac foo
-  }
-  do test
-  sho mac foo
-
-Results in:
-
-  foo = {X"}, sho mac foo
-
-Diagnosis: the TEST definition becomes:
-
-  def TEST .foo = {X"}, sho mac foo
-
-and the macro reader is erroneously treating the doublequote as an open
-quote, and then automatically closes the quote at the end of the definition.
-The error is that a doublequote should be significant only at the beginning of
-a field.  But the macro reader isn't a command parser; it doesn't know what
-a field is -- it's just looking for commas and skipping over quoted ones.
-First we have to fix an oversight: SET COMMAND DOUBLEQUOTING OFF should have
-worked here, but it wasn't tested in this case.  Fixed in getncm(): ckuus5.c,
-17 Mar 2003.
-
-There are only certain cases where it makes sense to treat doublequotes as
-signicant:
-
- . An open quote must be at the beginning or preceded by a space.
- . A close quote is only at the end or else followed by a space.
-
-This too was fixed in getncm(): ckuus5.c, 17 Mar 2003.
-
-A fix from Jeff SSL/TLS FTP data decoding.  ckcftp.c, 18 Mar 2003.
-
-Tried building C-Kermit on a Cray Y-MP with UNICOS 9.0.  "int suspend",
-declared in ckcmai.c and used in many modules, conflicts with:
-
-  unistd.h:extern int suspend __((int _Category, int _Id));
-
-The "=Dsuspend=xsuspend" trick doesn't work for this; there is no way around
-the conflict other than to rename the variable: ckcmai.c, ckutio.c,
-ckuus[35xy].c.  26 Mar 2003.  VMS and K95 not affected.
-
-OK that gets us past ckcmai.c...  Then in ckutio.c I had to add a new #ifdef
-around the LFDEVNO setting, because the Cray didn't have mkdev.h.  Could not
-find a Cray-specific manifest symbol, so I made a new makefile target (cray9)
-that sets this symbol.  Having done this I have no idea what kind of lockfile
-would be created, but I also doubt if anybody dials out from a Cray.  The
-binary should run a C90, J90, or Y-MP.  makefile, 26 Mar 2003.
-
-Added a target for SCO OSR5.0.7.  makefile, ckuver.h, 30 Mar 2003.
-
-Changed since 208:
-makefile ckuver.h ckcmai.c ckclib.c ckcftp.c ckucmd.c ckuus*.c ckutio.c.
-
----8.0.209---
-
-From Mark Sapiro, a fix for the March 17th doubleqote fix, getncm(): ckuus5.c,
-4 Apr 2003.
-
-From Jeff, 29 Apr 2003:
- . Corrected target for HP-UX 11.00 + OpenSSL: makefile, 
- . Do not allow WILL AUTH before WONT START_TLS: ckctel.h ckctel.c
- . Add hooks for SFTP and SET/SHOW SFTP: ckcdeb.h ckuusr.h ckuusr.c ckuus3.c
- . Add SKERMIT ckuusr.h ckuusr.c
- . Add ADM-5 terminal emulation: ckuus7.c, ckuus5.c
- . Uncomment and update HELP SET SSH V2 AUTO-REKEY: ckuus2.c
- . Enable IF TERMINAL-MACRO and IF STARTED-FROM-DIALER for C-Kermit: ckuus6.c
- . Fix conflicting NOSCROLL keyword definition: ckuusr.h
- . Set ttname when I_AM_SSH: ckuusy.c
- . Add extended arg parsing for SSH, Rlogin, Telnet: ckuusy.c, ckuus4.c
- . Security updates: ckuath.c, ck_ssl.c
- . Change K95 version number to 2.2.0: ckcmai.c
- . Save K95 term i/o state before executing keyboard macro: ckuus4.c
- . Add tests for SSH Subsystem active during INPUT/OUTPUT/CONNECT: ckuus[45].c
- . Enable K95 SET SSH V2 AUTO-REKEY: ckuus3.c
-
-SFTP and SET SFTP subcommands are implemented up to the case statements.
-
-Files of mine that Jeff hadn't picked up:
-  ckuver.h ckcftp.c ckutio.c ckuusx.c (just minor changes for last build-all)
-
-On 4 Jan 2003, SET RECEIVE MOVE-TO was changed to convert is argument to an
-absolute path, which made it impossible to specify a relative path, then
-move to different directories and have it apply relatively to each directory.
-Changed this as follows:
-
- . Parser uses cmtxt() rather than cmdir() so it won't fail at parse time.
- . If path is absolute, we fail at parse time if directory doesn't exist.
- . In reof() we run the the path through xxstring (again, in case deferred
-   evaluation of variables is desired) and then, if not null, use it.
- . If the directory doesn't exist, rename() fails and reof() returns -4,
-   resulting in a protocol error (this is not a change).  We do NOT create
-   the directory on the fly. 
-
-I also fixed SET SEND/RECEIVE RENAME-TO to parse with cmtxt() rather than
-cmdir(), since it's parsing a text template, not a directory name, e.g.
-"set receive rename-to file-\v(time)-v(date)-\v(pid)".  This was totally
-broken, since when I don't know.  We don't call xxstring() in this parse, so
-evaluation is always deferred -- I'd better not change this.  ckuus7.c,
-ckcfns.c, 1 May 2003.
-
-From Jeff, Sat May  3 14:15:23 2003:
- . Pick up the right isascii definition for K95: ckctel.c
- . malloc...  ckuath.c (new safe malloc routines for K95)
- . Add author listing: ckuus5.c
- . SSH Heartbeat support (K95 only): ckuus[23].c
- . Prescan --height and --width to avoid window resizing at startup: ckuusy.c
- . Add checks for fatal() or doexit() called from sysinit(): ckuusx.c
- . Move some K95-specific definitions to ckoker.h: ckcdeb.h
- . Add support for ON_CD macro in zchdir(): ckufio.c
- . Add a command to let FTP client authenticate with SSLv2: ckcftp.c
- . Fix parsing of FTP file facts like "UNIX.mode": ckcftp.c
-
-ON_CD will need some explaining (to be done).  It's implemented for Unix,
-VMS, WIndows, and OS/2.
-
-The FTP file facts fix came from first exposure to the new OpenBSD FTP
-server: ftp://ftp7.usa.openbsd.org/pub/os/OpenBSD/3.3/i386/
-The period in "UNIX.mode" caused an erroneous word break, adding junk to
-the filename.
-
-About the malloc changes, Jeff says "K95 is not behaving well in low memory
-environments.  I'm not sure that C-Kermit does much better.  The program does
-not crash but it certainly does not behave the way the user expects it to.
-I'm beginning to think that any malloc() error should be treated as fatal."
-
-Not visible in these changes because it's in K95-specific modules: Jeff made
-SET ATTRIBUTES OFF and SET ATTRIBUTES DATE OFF apply to XYZMODEM transfers.
-
-From Jeff, 11 May 2003:
- . Add support for SSH Keepalive to relevant SET command (K95): ckuus3.c
- . Reduce max overlapped i/o requests from 30 to 7 (K95): ckuus7.c
- . Don't call sysinit() in fatal(): ckuusx.c.
- . Some new conditionalizations for SSL module: ck_ssl.c
-
-The doublequote-parsing fixes from March and April broke the SWITCH statement,
-which is implemented by internally defining, then executing, a macro.  If I
-drop back to the old dumb handling of doublequotes, everything is fixed except
-the problem of March 17th.  But can we really expect getncm() to pre-guess
-what the parser is going to do?  getncm()'s only job is to find command
-boundaries, which are represented by commas.  Commas, however, is needed IN
-commands too.  We take a comma literally if it is quoted with \, or is inside
-a matched pair of braces, parens, or doublequotes.  It is not unreasonable to
-require a doublequote in a macro definition to be prefixed by \ when it is to
-be taken literally.  The proper response to Jason Heskett's complaint of March
-17th should have been to leave the code alone and recommand an appropriate
-form of quoting:
-
-  def TEST {
-      .foo = {X\"}
-      sho mac foo
-  }
-
-And this is what I have done.  Another reason for sticking with the old method
-is that it's explainable.  The "improved" method, even if it worked, would be
-be impossible to explain.  Btw, in testing this I noticed that the switch-test
-script made 8.0.201 dump core.  Today's version is fine.  The problem with
-quoted strings inside of IF {...} clauses and FOR and WHILE loops is fixed
-too.  Perhaps "unbroken" would be a better word.  ckuus5.c, 11 May 2003.
-
-Vace discovered that FTP MGET /EXCEPT:{... (with an unterminated /EXCEPT list)
-could crash Kermit.  Fixed in ckcftp.c, 11 May 2003.
-
-CONTINUE should not affect SUCCESS/FAILURE status.  ckuusr.c, 11 May 2003.
-
-Fixed an oversight that goes back 15 years.  While \{123} is allowed for
-decimal codes, \x{12} and \o{123} were never handled.  ckucmd.c, 11 May 2003.
-
-Added support for Red Hat <baudboy.h> and /usr/sbin/lockdev.  Supposedly this
-allows Kermit to be installed without setuid or setgid bits and still be able
-to lock and use the serial device.  Compiles and starts, but not tested.
-ckcdeb.h, makefile, ckutio.c, ckuus5.c, 16 May 2003.
-
-From Jeff: FTP ASCII send data to host when FTP /SSL was in use was broken.
-ftp_dpl is set to Clear when FTP /SSL is in use.  This was causing the data to
-be written to the socket with send() instead of the OpenSSL routines.
-ckcftp.c, ckuath.c, 21 May 2003.
-
-From Jeff: Stuff for Kerberos 524: ckcdeb.h.  Fixes for FTP; "FTP ASCII send
-data did not properly compute the end of line translations.  On Unix (and
-similar platforms) the end of line was correct for no character sets but
-incorrect when character sets were specified.  On Windows/OS2, the end of line
-was correct when character sets were specified and incorrect when they were
-not.  On MAC, both were broken.  Also, FTP Send Byte counts were incorrect
-when character sets were specified."  ckcftp.c.  17 Jun 2003.
-
-From Jeff: fixes to HTTP /AGENT: and /USER: switch action: ckcnet.c ckuus3.c
-ck_crp.c ckcftp.c ckuus2.c ckuusy.c ckuusr.c ckcnet.h, 21 Jun 2003.
-
-From Jeff: Fix SET DIALER BACKSPACE so it can override a previous SET KEY
-(e.g. from INI file): ckuus7.c.  Some SSL/TLS updates: ck_ssl.c.  HTTP support
-for VMS and other VMS improvements (e.g. a way to not have to hardwire the
-C-Kermit version number into the build script) from Martin Vorlaender:
-ckcnet.h, ckuus[r3].c, ckcdeb.h, ckvtio.c, ckcnet.c, ckvker.com.  Built on
-Solaris (gcc/ansi) and SunOS (cc/k&r).  The new VMS script tests the VMS
-version and includes HTTP support only for VMS 6.2 or later.  2 Jul 2003.
-
-Tried to build on our last VMS system but it seems to be dead.  Looks like a
-head crash (makes really loud noises, boot says DKA0 not recognized) (fooey, I
-just paid good money to renew the VMS license).  Tried building at another
-site with:
-
-  Process Software MultiNet V4.3 Rev A-X,
-  Compaq AlphaServer ES40, OpenVMS AXP V7.3
-  Compaq C V6.4-008 on OpenVMS Alpha V7.3
-
-Had to make a few corrections to ckvker.com.  But still, compilation of
-ckcnet.c bombs, indicating that the SELECT definition somehow got lost
-somewhere since the 209 release (i.e. no SELECT type is defined so it falls
-thru to "SELECT is required for this code").  But I don't see anything in
-ckcdeb.h or ckcnet.[ch] that would explain this.  Not ckvker.com either
-(putting the old one back gives the same result).  OK, I give up, maybe it's
-just that I haven't tried building it on MultiNet recently.  What about UCX?
-Aha, builds fine there except for warnings about mlook, dodo, and parser in
-ckvfio.c (because of ON_CD) -- I suppose I have #include <ckucmd.h>... (done)
-Anyhow it builds OK and the HTTP code is active and almost works (HTTP OPEN
-works; HTTP GET seems to succeed but creates an empty file every time).  Tried
-building under MultiNet at another installation; same bad result.
-
-OK so why won't it build for MultiNet?  Comparing ckcnet.c with the 209
-version, not a single #ifdef or #include is changed.  Tried building with
-p3="NOHTTP" -- builds OK, aha.  Where's the problem?  Not ckcnet.h...
-Not ckcdeb.h...  OK I give up, will revisit this next time I get time to
-do anything with the code.
-
-Later Jeff said "Martin did not implement VMS networking for the HTTP code.
-All he did was activate the #define HTTP which happens to work because his
-connections are using SSL/TLS connections.  http_inc(), http_tol(), etc have
-no support for VMS networking regardless of whether it is UCX or MULTINET.
-The vast majority of HTTP connections are not secured by SSL/TLS.  It makes no
-sense to support HTTP on VMS until someone is willing to either do the work or
-pay have the work done to implement VMS networking in that code base."  So the
-fix is to not enable HTTP for VMS after all.  Removed the CKHTTP definition
-for VMS from ckcdeb.h, 6 Jul 2003.
-
-Fixed ckvfio.c to #include <ckuusr.h> (instead of <ckucmd.h>) to pick up 
-missing prototypes.  6 Jul 2003.
-
-From Arthur Marsh: solaris2xg+openssl+zlib+srp+pam+shadow and the corresponding
-Solaris 7 target.  makefile, 6 Jul 2003.
-
-Remove duplicate #includes for <sys/stat.h>, <errno.h>, and <ctype.h> from
-ckcftp.c.  6 Jul 2003.
-
-Add -DUSE_MEMCPY to Motorola SV/68 targets because of shuffled #includes in 
-ckcftp.c.  8 Jul 2003.
-
-From Jeff: Fix problems mixing SSL and SRP without Kerberos.  Plus a few minor
-#define comment changes and a reshuffling of #defines in ckcdeb.h to allow me
-to build on X86 Windows without Kerberos.  ckcdeb.h, ck_crp.c, ckuath.c,
-10 Jul 2003.
-
-From Jeff: updated ckuat2.h and ckuath.c, 29 Jul 2003.
-
-Mats Peterson noticed that a very small Latin-1 file would be incorrectly
-identified as UCS-2 by scanfile().  Fixed in ckuusx.c, 29 Jul 2003.
-
-Fixed ACCESS macro definition to account for the fact that FIND is now a
-built-in command.  ckermit.ini, 30 Jul 2003.
-
-From Jeff: Fix for typo in urlparse() (svc/hos): ckuusy.c, 18 Aug 2003.
-
-From Jeff: Redhat9 makefile targets (needed for for OpenSSL 0.9.7):
-makefile, 19 Aug 2003.
-
-GREP /NOLIST and /COUNT did too much magic, with some undesirable fallout:
-"GREP /NOLIST /COUNT:x args" printed "file:count" for each file.  "GREP
-/COUNT:x /NOLIST args" did not print "file:count", but neither did it set the
-count variable.  Removed the magic.  Also one of the GREP switches,
-/LINENUMBERS, was out of order.  Fixed in ckuus6.c, 20 Aug 2003.
-
-From Jeff: "Reorganizing code to enable building with different subsets of
-options; a few typos corrected as well."  ckcdeb.h, ckuver.h (for RH9),
-ckcnet.c, ckuus7.c, ckuus3.c: 24 Aug 2003.
-
-Scanfile misidentified a big PDF file as text because the first 800K of it
-*was* text (most other PDF files were correctly tagged as binary).  Fixed
-by adding a check for the PDF signature at the beginning of the file.
-scanfile(): ckuusx.c, 25 Aug 2003.
-
-Ditto for PostScript files, but conservatively.  Signature at beginning of
-file must begin with "%!PS-Ado".  If it's just "%!" (or something nonstandard
-like "%%Creator: Windows PSCRIPT") we do a regular scan.  Also added "*.ps"
-to all binary filename patterns.  ckuusx.c, 4 Sep 2003.
-
-Ditto (but within #ifndef NOPCLSCAN) for PCL (<ESC>E) and PJL (<ESC>%) files,
-but no binpatterns (note: ".PCL" is the extension for TOPS-20 EXEC scripts).
-ckuusx.c, 4 Sep 2003.
-
-Added comments about OpenSSL 0.9.7 to all linux+openssl targets.
-makefile, 4 Sep 2003.
-
-From Jeff: Added - #define ALLOW_KRB_3DES_ENCRYPT.  When this symbol is defined
-at compilation Kermit will allow non-DES session keys to be used during Telnet
-Auth.  These session keys can then be used for Telnet Encrypt.  The reason
-this is not compiled on by default is that the MIT Kerberos Telnet does not
-follow the RFC for constructing keys for ENCRYPT DES when the keys are longer
-than 8 bytes in length.  ckuath.c, ckuus5.c, 4 Sep 2003.
-
-"ftp mget a b c" succeeded if one or more of the files did not exist, even
-with "set ftp error-action proceed".  This is because the server's NLST file
-list does not include any files that don't exist, so the client never even
-tries to get them.  Fortunately, the way the code is structured, this one was
-easy to fix.  ckcftp.c, 14 Sep 2003.
-
-From Jeff: Corrected code in ckcnet.c to ensure that Reverse DNS Lookups are
-not performed if tcp_rdns is OFF.  Fixed ck_krb5_getrealm() to actually return
-the realm of the credentials cache and not the default realm specified in the
-krb5.conf file.  Previously krb5_cc_get_principal() was not being called.
-Fixed ck_krb5_is_tgt_valid() to test the TGT in the current ccache and not the
-TGT constructed from the default realm.  ckcnet.c, ckuath.c, 14 Sep 2003.
-
-Marco Bernardi noticed that IF DIRECTORY could produce a false positive if
-the argument directory had previously been referenced but then removed.  This
-is because of the clever isdir() cache that was added to speed up recursion
-through big directory trees.  Changed IF DIRECTORY to make a second check
-(definitive but more expensive) if isdir() succeeds, and changed the
-directory-deleting routine, ckmkdir(), to flush the directory cache (UNIX
-only -- this also should be done in K95 but it's not critical).  This was
-done by adding a routine, clrdircache() to ckufio.c, which sets prevstat
-to -1 and prevpath[0] to NUL.  ckcfn3.c, ckuus6.c, ckufio.c, 18 Sep 2003.
-
-Marco reported the second fix still didn't work for him (even though it did
-for me).  Rather than try to figure out why, I concluded that the directory
-cache is just not safe: a directory found a second ago might have been deleted
-or renamed not only by Kermit but by some other process.  Why did I add this
-in the first place?  The log says:
-
-  Some debug logs showed that isdir() is often called twice in a row on the
-  same file.  Rather than try to sort out clients, I added a 1-element cache
-  to Unix isdir().  ckufio.c, 24 Apr 2000.
-
-Experimentation with DIR and DIR /RECURSIVE does not show this happening at
-all.  So I #ifdef'd out the directory cache (see #ifdef ISDIRCACHE in ckufio.c;
-ISDIRCACHE is not defined) and backed off the previous changes: ckufio.c,
-ckcfn3.c, ckuus6.c, 28 Sep 2003.
-
-From Jeff: Replace the compile time ALLOW_KRB_3DES_ENCRYPT with a run-time
-command SET TELNET BUG AUTH-KRB5-DES which defaults to ON: ckctel.[ch],
-ckuus[234].c, ck_crp.c, ckuath.c.  4 Oct 2003.
-
-Allow DIAL RETRIES to be any positive number, and catch negative ones.
-Also added code to check for atoi() errors (e.g. truncation).  At least on
-some platforms (e.g. Solaris) atoi() is supposed to set errno, but it
-doesn't.  ckuus3.c, ckucmd.c, 4 Oct 2003.
-
-Added /DEFAULT: to ASK-class commands (ASK, ASKQ, GETOK):
-
- . For popups: no way to send defaults to popup_readtext() or popup_readpass().
- . For GUI ASK[Q], pass default to gui_txt_dialog().
- . For GUI GETOK, convert "yes" "ok" or "no" default to number for uq_ok().
- . For Text GETOK, add default to cmkey().
- . For Text ASK[Q], add default to cmtxt().
- . For GETC, GETKEY, and READ: no changes.
-
-GETOK, ASK, and ASKQ with /TIMEOUT: no longer fail when the timer goes off
-if a /DEFAULT was supplied.  The GUI functions (uq_blah) don't seem to
-support timeouts.  Only the text version has been tested.  ckuus[26].c,
-4 Oct 2003.
-
-From Jeff: add /DEFAULT: for popups.  ckuus6.c. 6 Oct 2003.
-
-Change SET DIAL INTERVAL to be like SET DIAL RETRIES.  ckuus[34].c, 6 Oct 2003.
-
-Added target for HP-UX 10/11 + OpenSSL built with gcc, from Chris Cheney.
-Makefile, 12 Oct 2003.
-
-From Jeff, 6 Nov 2003:
- . #ifdef adjustments: ckcftp.c, ckcdeb.h
- . Fix spurious consumption of first byte(s) on Telnet connection: ckctel.c
- . Another HP PJL test for scanfile: ckuusx.c.
- . K95: Recognize DG4xx protected fields in DG2xx emulation: ckuus7.c.
- . Add SSLeay version display to SHOW AUTH command: ckuus7.c
- . Improved SET MOUSE CLEAR help text: ckuus2.c.
- . Improved Kverbs help text: ckuus2.c (+ new IBM-3151 Kverbs).
- . Some changes to ck_ssl.c, ckuath.c.
-
-From PeterE, 10 Nov 2003:
- . Improved HP-UX 10/11 makefile targets for OpenSSL.
- . #ifdef fix for OpenSSL on HP-UX: ck_ssl.c.
-
-Another new makefile from PeterE with improved and integrated HP-UX targets.
-12 Nov 2003.
-
-A couple fixes to the solaris9g+krb5+krb4+openssl+shadow+pam+zlib target
-from Jeff.  Added a solaris9g+openssl+shadow+pam+zlib target.  makefile,
-21 Nov 2003.
-
-From Jeff, 30 Nov 2003:
- . Fix SEND /MOVE-TO: ckuusr.c.
- . Fix K95 SET TITLE to allow quotes/braces around text: ckuus7.c.
- . Improved "set term autodownload ?" response: ckuus5.c.
- . Fix SHOW FEATURES to specify the protocol for encryption: ckuus5.c
- . Make {SEND, RECEIVE} {MOVE-TO, RENAME-TO} work for XYZMODEM (K95 only).
-
-From Jeff: 7 Jan 2004:
- . At one point Frank started to add a timer parameter to the
-   uq_txt() function but he only did it for the non-ANSI
-   compilers.  I added it for the ANSI compilers, fixed the
-   prototypes and provided a default value easily changed
-   DEFAULT_UQ_TIMEOUT: ckcker.h, ckuus[36].c, ck_ssl.c, ckcftp.c, ckuath.c.
- . Fixed SET TERMINAL DEBUG ON (typo in variable name): ckuus7.c.
- . Fixed BEEP INFORMATION; previously it made no sound, now uses
-   MB_ICONQUESTION.  ckuusx.c.
-
-From Ian Beckwith <ian@nessie.mcc.ac.uk> (Debianization), 7 Jan 2004:
- . Search dir/ckermit for docs, as well as dir/kermit in cmdini(): ckuus5.c.
- . New linux+krb5+krb4+openssl+shadow+pam target (kitchen sink minus SRP,
-   which Debian does not distribute): makefile.
- ? Mangles the DESTDIR support in makefile to install into a staging area:
-   makefile (I didn't take this one yet).
-
-Updated copyright notices for 2004, all modules.  7 Jan 2004.
-
-Added INPUT /NOMATCH, allowing INPUT to be used for a fixed amount of time
-without attempting to match any text or patterns, so it's no longer
-necessary to "input 600 STRING_THAT_WILL_NEVER_COME".  If /NOMATCH is
-included, INPUT succeeds if the timeout expires, with \v(instatus) = 1
-(meaning "timed out"); fails upon interruption or i/o error.  ckuusr.h,
-ckuus[r24].c, 7 Jan 2004.
-
-Added SET INPUT SCALE-FACTOR <float>.  This scales all INPUT timeouts by the
-given factor, allowing time-sensitive scripts to be adjusted to changing
-conditions such as congested networks or different-speed modems without
-having to change each INPUT-class command.  This affects only those timeouts
-that are given in seconds, not as wall-clock times.  Although the scale
-factor can have a fractional part, the INPUT timeout is still an integer.
-Added this to SHOW INPUT, and added a \v(inscale) variable for it.
-ckuusr.h, ckuus[r257].c, 7 Jan 2004.
-
-undef \%a, \fverify(abc,\%a) returns 0, which makes it look as if \%a is a
-string composed of a's, b's, and/or c's, when in fact it contains nothing.
-Changed \fverify() to return -1 in this case.  ckuus4.c, 12 Jan 2004.
-
-\fcode(xxx) returned an empty string if its argument string was empty.  This
-makes it unsafe to use in arithmetic or boolean expressions.  Changed it to
-return 0 if its argument was missing, null, or empty.  ckuus4.c, 12 Jan 2004.
-
-Updated \verify() and \fcode() help text.  ckuus2.c, 12 Jan 2004.
-
-While setting up IKSD, Ian Beckwith noticed that including the --initfile:
-option caused Kermit to start parsing its own Copyright string as if it were
-the command line, and eventually crash.  I couldn't reproduce on Solaris /
-Sparc but I could in Linux / i386 (what Ian is using) -- a change from Jeff
-on 28 Apr 2003 set the command-line arg pointer to a literal empty string in
-prescan() about line 1740 of of ckuus4.c; the pointer is incremented next
-time thru the loop, resulting in random memory being referenced.  Fixed by
-setting the pointer to NULL instead of "".  ckuus4.c, 12 Jan 2004.
-
-declare \&a[999999999999999] would dump core on some platforms.  atoi()
-or whatever would truncate the dimension to maxint.  When we add 1 to the
-result, we get a negative number, which is used as an index, loop test, etc.
-Fixed both dodcl() and dclarray() to check for (n+1 < 0).  ckuus[r5].c,
-12 Jan 2004.
-
-Unix zchki() would fail on /dev/tty, which is unreasonable.  This prevented
-FOPEN /READ from reading from the terminal.  zchki() already allowed for
-/dev/null, so I added /dev/tty to the list of specials.  Ditto for FOPEN
-/WRITE and zchko().  ckufio.c 13 Jan 2004.
-
-Added untabify() routine to ckclib.[ch], 13 Jan 2004.
-Added FREAD /TRIM and /UNTABIFY.  ckuus[27].c, 13 Jan 2004.
-Added \funtabify().  ckuusr.h, ckuus[24].c, 13 Jan 2004.
-
-Dat Nguyen noticed that (setq u 'p') followed by (u) dumped core.  This was
-caused by an over-clever optimization that skipped mallocs for short
-literals, but then went on later to try to free one that hadn't been
-malloc'd.  Fixed in dosexp(): ckuus3.c, 14 Jan 2004.
-
-Catch another copyright date.  ckuus5.c, 14 Jan 2004.
-
-Fixed SWITCH to work even when SET COMMAND DOUBLEQUOTE OFF (from Mark
-Sapiro).  ckuus5.c, 15 Jan 2004.
-
-Changed version to 8.0.211 so scripts can test for recently added features.
-ckcmai.c, 15 Jan 2004.
-
-Fixed a glitch in K95 "help set port".  ckuus2.c, 20 Jan 2004.
-
-Fix from Jeff: Connections to a TLS-aware protocol which require a reconnect
-upon certificate verification failure could not reconnect if the connection
-was initiated from the command line or via a URL.  ckctel.c ckcmai.c
-ckuusr.c ckuus7.c ckuusy.c, 20 Jan 2004.
-
-From Alex Lewin: makefile target and #ifdef for Mac OS X 10.3 (Panther):
-makefile, ckcnet.c, 7 Feb 2004.
-
-Added KFLAGS to sco32v507 targets to make PTY and SSH commands work.  The
-same flags could probably also be added to earlier OSR5 targets but they
-have not been tested there.  makefile, 7 Feb 2004.
-
-Checked a complaint that "LOCAL &a" did not make array \&a[] local.  Indeed
-it did not, and can not.  You have to use the full syntax in the LOCAL
-command, "LOCAL \&a[]", or else it doesn't know it's not a macro named &a.
-7 Feb 2004.
-
-Fixed some confusion in creating IKSD database file and temp-file names.
-I was calling zfnqfp() without remembering that the path member of the
-returned struct included the filename, so to get just the directory name,
-I needed to strip the filename from the right.  ckuusy.c, 2 Mar 2004.
-
-New ckuath.c, ck_ssl.c from Jeff.  2 Mar 2004.
-
-Updated Jeff's affiliation in VERSION command text.  ckuusr.c, 2 Mar 2004.
-
-Designation changed from Dev.00 to Beta.01.  ckcmai.c, 2 Mar 2004.
-
-Fixed zrename() syslogging -- it had success and failure reversed.
-Beta.02: ckufio.c, 4 Mar 2004.
-
-Problem: when accessing IKSD via a kermit:// or iksd:// URL, and a user ID
-is given but no password, doxarg() set the password to "" instead of leaving
-it NULL, but all the tests in dourl() are for NULL.  Fixed in doxarg():
-ckuusy.c, 5 Mar 2004.
-
-The logic in dourl() about which macro to construct (login and connect,
-login and get directory listing, or login and fetch a file) was a bit off,
-so all three cases were not handled.  ckcmai.c, 5 Mar 2004.
-
-Trial Beta builds:
- . HP-UX B.11.11 PA-RISC
- . HP-UX B.11.23 IA64
- . Tru64 4.0G Alpha
- . Tru64 5.1B Alpha
- . Debian 3.0 i386
- . Red Hat ES 2.1 i386
- . Slackware 9.1 i386
- . VMS 7.3-1 Alpha + UCX 5.3
- . VMS 7.3-1 Alpha no TCP/IP
- . VMS 7.3 Alpha MultiNet 4.3 A-X
- . SCO UnixWare 7.1.4 i386
- . SCO OSR5.0.7 i386
- . Solaris 9 Sparc
-
-Fixed compiler warning in doxarg() caused by typo (NULL instead of NUL) in
-the 5 March doxarg() edit.  ckuusy.c, 9 Mar 2004.
-
-IKSD (kermit://) command-line URLs did not work right if the client had
-already preauthenticated with Kerberos or somesuch because they tried to log
-in again with REMOTE LOGIN.  The macros constructed in doxarg() needed to
-check \v(authstate) before attempting REMOTE LOGIN.  ckcmai.c, 10 Mar 2004.
-
-Added ckuker.nr to x.sh (ckdaily upload) and updated ckuker.nr with current
-version number and dates.  10 Mar 2004.
-
-Replaced hardwired references to /usr/local in makefile with $(prefix)
-(which defaults to /usr/local, but can be overridden on the command line),
-suggested by Nelson Beebe for use with Configure.  10 Mar 2004.
-
-From Nelson Beebe: In the Kermit makefile in the install target commands,
-line 981 reads:
-
-        cp $(BINARY) $(DESTDIR)$(BINDIR)/kermit || exit 1;\
-
-Could you please add this line before it:
-
-        rm -f $(DESTDIR)$(BINDIR)/kermit;\
-
-Some sites (mine included) keep multiple versions of software around,
-with hard links between $(prefix)/progname and $(prefix)/progname-x.y.z.
-Failure to remove the $(prefix)/progname at "make install" time then
-replaces the old $(prefix)/progname-x.y.z with the new one, destroying
-an old version that the site wanted to be preserved.  makefile, 10 Mar 2004.
-
-Minor syntax and typo fixes (mostly prototypes): ckcdeb.h, ckcfns.c,
-ckclib.c, ckufio.c, ckuusr.h, ckuusx.c, 10 Mar 2004.  (I still have a few
-more to do.)
-
-Added CC=$(CC) CC2=$(CC2) to many (but not all) makefile targets that
-reference other makefile targets.  On some platforms (notably AIX, Solaris,
-SunOS) there are specific targets for different compilers, so I skipped
-those.  makefile, 10 Mar 2004.
-
-Added error checking to kermit:// URL macros, so they don't plow ahead
-after the connection is closed.  ckcmai.c, 11 Mar 2004.
-
-Added FreeBSD 4.9 and 5.1 targets (only the herald is affected).
-makefile, ckuver.h, 11 Mar 2004.
-
-Added "LIBS=-lcrypt" to bsd44 targets since nowadays crypt is almost always
-unbundled from libc.  Also added explanatory notes.  makefile, 11 Mar 2004.
-
-Changed MANDIR to default to $(manroot)/man/man1, and manroot to default
-to $(prefix).  More adding of CC=$(CC) clauses: {Free,Net,Open}BSD, 4.4BSD.
-makefile, 11 Mar 2004.
-
-Miscellaneous cleanups: ckuusx.c, ckcnet.c, ckufio.c, 11 Mar 2004.
-
-Corrected the check in the linux target to see if /usr/include/crypt.h
-exists, and if so to define HAVE_CRYPT_H, which is used in ckcdeb.h to
-#include <crypt.h> to get the prototype for crypt() and prevent bogus
-conversions on its return type on 64-bit platforms (the previous test wasn't
-quite right and the resulting symbol wasn't spelled right).  makefile,
-12 Mar 2004.
-
-From Jeff, 14 Mar 2004:
- . Initialize localuidbuf[] in tn_snenv(): ckctel.c.
- . Remove remote-mode checks in hupok() for K95G only (why?): ckuus3.c.
- . Add help text for new K95-only TYPE /GUI switches: ckuus2.c.
- . TYPE /GUI parsing, ...: ckuusr.c.
- . TYPE /GUI action, dotype(): ckuus6.c
- . Change Jeff's affiliation: most modules.
-
-20 Mar 2004: Looked into adding long file support, i.e. handling files more
-than 2GB (or 4GB) long.  Discovered very quickly this would be a major
-project.  Each platform has a different API, or environment, or transition
-plan, or whatever -- a nightmare to handle in portable code.  At the very
-least we'll need to convert a lot of Kermit variables from long or unsigned
-long to some new Kermit type, which in turn is #defined or typedef'd
-appropriately for each platform (to off_t or size_t or whatever).  Then we
-have to worry about the details of open() vs fopen(); printf() formats (%lld
-vs %Ld vs %"PRId64"...), platforms like HP-UX where you might have to use
-different APIs for different file systems on the same computer, etc.  We'll
-need to confront this soon, but let's get a good stable 8.0.211 release out
-first!  Meanwhile, for future reference, here are a few articles:
-
-General: http://freshmeat.net/articles/view/709/
-Linux:   http://www.ece.utexas.edu/~luo/linux_lfs.html
-HP-UX:   http://devrsrc1.external.hp.com/STK/partner/lg_files.pdf
-Solaris: http://wwws.sun.com/software/whitepapers/wp-largefiles/largefiles.pdf
-
-Looked into FTP timeouts.  It appears I can just call empty() (which is
-nothing more than a front end for select()) with the desired timeout before
-any kind of network read.  If it returns <= 0, we have a timeout.  This is
-not quite the same as using alarm() / signal() around a recv() (which could
-get stuck) but alarm() / signal() are not not used in the FTP module and are
-not naturally portable to Windows, but select() is already in use in the FTP
-module for both Unix and Windows.  This form of timeout could be used
-portably for both command response and data reads.  What about writes to the
-command or data socket?  They can get stuck for hours and hours without
-returning too, but the select() approach won't help here -- we need the
-actual send() or recv() to time out, or be wrapped in an alarm()/signal()
-kind of mechanism.  But if we can do that for sends, we can also do it for
-receives.  Better check with Jeff before I start programming anything.
-20 Mar 2004.
-
-Later: Decided to postpone the above two projects (ditto IPv6) until after
-8.0.211 is released because both will have major impacts on portability.
-Grumble: all i/o APIs should have been designed from the beginning with a
-timeout parameter.  To this day, hardly any have this feature.
-
-3-4 Apr 2004: More 8.0.211 Beta.02+ test builds:
-
- . FreeBSD 3.3
- . FreeBSD 4.4
- . Linux Debian 2.1
- . Linux RH 6.1
- . Linux RH 7.1
- . Linux RH 7.2
- . Linux RH 9 (with 84 different combinations of feature selection)
- . Linux SuSE 6.4
- . Linux SuSE 7.0
- . NetBSD 1.4.1
- . NetBSD 1.5.2
- . OpenBSD 2.5
- . OpenBSD 3.0
- . QNX 4.25
- . SCO UnixWare 2.1.3
- . SCO UnixWare 7.1.4
- . SCO OpenServer 5.0.7
- . SCO XENIX 2.3.4 (no TCP)
-
-Changes needed: None.
-
-Problem: SCO XENIX 2.3.4 network build failed in the FTP module with
-header-file syntax and conflicting-definitions trouble.  I'm not going to
-try to fix it; 8.0.209 built OK with FTP, so we'll just keep that one
-available.
-
-Got access to VMS 8.1 on IA64.  Building the nonet version of C-Kermit
-required minor modifications to ckvvms.h, ckv[ft]io.c, and ckvcon.c, to
-account for a third architecture.  Also to SHOW FEATURES in ckuus5.c.  Once
-that was done, the UCX 5.5 version built OK too.  Starts OK, makes Telnet
-connection OK, sends files.  Has some obvious glitches though -- "stat"
-after a file transfer reports 0 elapsed time (in fact it was 00:09:48) and
-1219174400 cps (when in fact it was 10364).  This doesn't happen on the
-Alpha.  Btw, the IA64 binary is twice as big as the Alpha one.  Changed
-to Beta.03.  5 Apr 2004.
-
-Fixed the ckdaily script to include the makefile and man page in the Zip
-file (they were not included because the Zip file was intended mainly for
-VMS users, but some Unix users prefer Zip to tar.gz).  6 Apr 2004.
-
-Traced problems in VMS/IA64 statistics report to rftimer()/gftimer() in
-ckvtio.c, which use sys$ and lib$ calls to figure elapsed time.  These work
-on VAX and Alpha but not IA64.  Sent a report to the chief engineer of the
-IA64 VMS port; he says it's probably a bug in VMS 8.1 (which is not a real
-release); he'll make sure it's fixed in 8.2.  As an experiment, tried
-swapping in the Unix versions of these routines (which call gettimeofday()
-etc).  They seem work just fine (it hung a couple times but I think that's
-because the underlying system hung too; trying it later on a new connection,
-it was fine; however I noticed a BIG discrepancy in throughput between
-sending and receiving).  Moved definitions for VMS64BIT and VMSI64 to
-ckcdeb.h so all modules can use them and added them to the SHOW FEATURES
-display.  Added VMSV80 definition to build procedure.  Beta.03+.  ckcdeb.h,
-ckcuus5.c, ckcvvms.h, ckvtio.c, ckvker.com, 6 Apr 2004.
-
-While doing the build-all, I noticed the VMS version did not build with
-Multinet or older UCX versions, always with the same errors -- undeclared
-variables, undefined symbols, all TCP/IP related.  This didn't happen a
-couple weeks ago...  Somehow the order of #includes was messed up --
-ckuusr.h depended on symbols that are defined in ckcnet.h, but ckcnet.h
-was being included after ckuusr.h...  this was compounded by two missing
-commas in ckvker.com.  11 Apr 2004.
-
-Removed Beta designation, released as 8.0.211, 10 Apr 2004.
-
-I had somehow lost the edit to ckutio.c that changed the UUCP lockfile for
-Mac OS X from /var/spool/uucp to /var/spool/lock.  So I slipped it in and
-re-uploaded version 8.0.211.  You can tell the difference because SHOW
-VERSIONS has 17 Apr 2004 for the Communications I/O module.  Also the 10.3
-executable now has a designer banner: "Mac OS X 10.3".  makefile, ckuver.h,
-ckutio.c, ckuus[45].c, 17 Apr 2004.
-
----8.0.211---
-
-Removed "wermit" from "make clean" (how did it get there?).  makefile.
-
-From Jeff, applied 10 May 2004.
- . Rearrange #ifdefs that define OS/2-only features. ckcdeb.h.
- . Fix two strncat()s that should have been ckstrncat()s.  ckuus7.c.
- . Fix two strncat()s that should have been ckstrncat()s.  ckuus4.c.
- . Fix one strncat(). ckcfns.c.
- . SET FTP CHAR ON used backwards byte order when output to screen.  ckcfns.c.
- . Fix two strncat()s.  ckuus3.c.
- . Add SET NETWORK TYPE NAMED-PIPE for K95.  ckuus3.c.
- . Add "No active connections" message to hupok().  ckuus3.c.
- . Fix many strncat()s.  ckcnet.c.
- . Fix some strncat()s.  ckcftp.c
- . Make FTP port unsigned short for 16383 < port < 65536.  ckcftp.c.
- . Improvements to FTP USER command.  ckcftp.c.
- . Fix FEAT parsing to allow for various forms of whitespace.  ckcftp.c.
-
-S-Expression (AND FOO BAR) would not short-circuit if FOO's value was 0,
-even though short-circuiting code has been there since Day 1.  Similarly for
-(OR BAR FOO).  Turns out the first operand was a special case that bypassed
-the short-circuit check.  Fixed in dosexp(): ckuus3.c, 10 May 2004.
-
-Red Hat 7.3 (and maybe others) <baudboy.h> referenced open() without first
-ensuring it was declared.  The declaration is in <fcntl.h>, which is after
-<baudboy.h> in ckutio.c series of #includes.  Made a special case for this.
-ckutio.c (see comments), 10 May 2004.
-
-If the local Kermit's parity is set to SPACE and then a file arrives via
-autodownload, automatic parity detection improperly switches it to NONE.
-Fixed in rpack() by switching parity automatically only if parchk() returns
-> 0 (rather than > -1), since NONE and SPACE are indistinguishable.  A
-bigger problem still remains: autodownload does not work at all if the
-sender is using actual parity bits (even, odd, or mark) and the receiver's
-parity is NONE.  ckcfn2.c, 10 May 2004.
-
-When a DIAL MACRO is defined and the phone number is comprised of more than
-one "word" (i.e. contains spaces), the dial macro loses the second and
-subsequent words after the first call. Fixed in xdial() by inserting quotes
-around phone number before passing it to xdial(). ckuus6.c, 10 May 2004.
-
-DIAL MACRO fix was not right; the quotes were kept as part of the phone
-number and sent to the modem.  dodo() pokes its argument to separate the
-macro argument string into its component arguments.  xdial() is called
-repeatedly on the same string, so after the first time, a NUL has been
-deposited after the first word of the telephone number.  The fix is to have
-xdial() create a pokeable copy of its argument string before calling
-dodo(dial-macro,args...).  It might seem odd that dodo pokes its argument,
-but making copies would be would be prohibitive in space and time.
-ckuus6.c, 23 May 2004.
-
-FTP CD did not strip braces or quotes from around its argument.  Fixed in
-doftprmt(): ckcftp.c, 23 May 2004.
-
-Added client side of REMOTE MESSAGE/RMESSAGE/RMSG: ckuus[r27].c, 23 May 2004.
-
-Server side of REMOTE MESSAGE: ckcpro.w, 23 May 2004.
-
-From Dave Sneddon: an updated CKVKER.COM containing a fix where the
-COMPAQ_SSL symbol was not defined but later referenced which generated an
-undefined symbol error.  ckvker.com, 5 Jan 2005.
-
-From Andy Tanenbaum (28 May 2005):
- . Fix an errant prototype in ckcker.h and ckucmd.h - () instead of (void).
- . Add support for MINIX 3.0.  makefile, ckutio.c, ckufio.c, ckuver.h.
-
-Fixed messed-up sndhlp() call which apparently had been jiggered to
-compensate for the bad prototype which has now been fixed, ckcpro.w,
-12 Jun 2005.
-
-From Jeff (12 June 2005):
- . Security updates.  ck_ssl.c, ck_crp.c, ckuath.c.
- . Fix bug in K95 SET PRINTER CHARACTER-SET. ckuus3.c.
- . Add printer character-set to K95 SHOW PRINTER display. ckuus5,c
- . Add SET MSKERMIT FILE-RENAMING to K95. ckuus7.c, ckuusr.h.
- . Add help for K95 SET MSKERMIT.  ckuus2.c.
- . Add SET GUI CLOSE to K95.  ckuusr.h, ckuus2.c, ckuus3.c
- . Add help text for K95 SET GUI MENUBAR and TOOLBAR.  ckuus2.c.
- . Add --noclose command-line option for K95.  ckuusy.c
- . Add PAM support for Mac OS X.  ckufio.c.
- . Add GSSAPI support for Mac OS X.  ckcftp.c.
- . Pick up more URL options.  ckcker.h, ckuusy.c.
- . Fix bug in delta-time calculation across year boundary.  ckucmd.c.
- . Add Secure Endpoints to copyright notices.  ckcmai.c.
- . Fix FTP HELP to override unverbose setting.  ckcftp.c.
- . Fix assorted minor typos.
-
-From Matthias Kurz: automatic herald generation for NetBSD 2.0 and later,
-"make netbsd2".  ckuver.h, makefile, 12 Jun 2005.
-
-Added SET TERMINAL LF-DISPLAY, like CR-DISPLAY but for linefeed rather than
-carriage return.  ckuusr.h, ckuus[257x].c, 12 Jun 2005.
-
-Made a command-line option --unbuffered to do what the -DNONOSETBUF
-compile-time option does, i.e. force unbuffered console i/o.  Unix only.
-ckuusr.h, ckuusy.c, ckutio.c, 12 Jun 2005.
-
-Fixed getiact() (which displays TERM IDLE-ACTION setting) to display
-space as \{32}.  ckuus7.c, 12 Jun 2005.
-
-Added LMV as a synonym for LRENAME, which is itself a synonym for LOCAL
-RENAME.  ckuusr.c, 12 Jun 2005.
-
-Put HELP SET TERMINAL DG-UNIX-MODE text where it belonged.  ckuus2.c,
-12 Jun 2005.
-
-Added IF LINK (Unix only) to test if a filename is a symlink.  Uses the most
-simpleminded possible method, calls readlink() to see if it succeeds or fails.
-No other method is dependable across different Unixes.  This code should be
-portable because I already use readlink() elsewhere within exactly the same
-#ifdefs.  ckufio.c, ckuus2.c, ckuus6.c, 12 Jun 2005.
-
-Fixed a bug in which \fdir() wouldn't work when its argument was the nonwild
-name of a directory file.  zxpand(): ckufio.c, 12 Jun 2005.
-
-Made \fdirectory() a synonym for \fdirectories().  Made \fdir() an
-acceptable abbreviation for these, even though it clashes with \fdirname(),
-which still works as before.  ckuus4.c, 12 Jun 2005.
-
-Added the long-needed \flopx() function, to return rightmost pieces of
-strings, such as file extensions.  \fstripx() and \flopx() are the
-orthogonal functions we need to pick filenames apart from the right:
-\stripx(foo.tar.gz) = foo.tar; flopx(foo.tar.gz) = gz.  ckuusr.h, ckuusr.c,
-ckuus2.c, 12 Jun 2005.
-
-Removed reference to defunct fax number, ckcmai.c, 12 Jun 2005.
-
-Added -DHAVE_PTMX to linux+krb5+openssl+zlib+shadow+pam.  From Timothy Folks.
-makefile, 12 Jun 2005.
-
-Built on Solaris 9 and NetBSD 2.0.
-
-From Jeff: New build target for Mac OS X 10.3 with Kerberos 5 and SSL.
-makefile, 14 Jun 2005.
-
-Fixed error in ckuver.h NetBSD #ifdefs.  15 Jun 2005.
-
-Fixed SET TERMINAL IDLE-ACTION OUTPUT to work as documented, namely if the
-output string is empty, to send a NUL.  Previously there was no way to make
-it send a NUL.  ckuus7.c, 15 Jun 2005.
-
-Suppose (in Unix, for example) a filename contains wildcard characters, such
-as {abc}.txt.  When referring to such a file (e.g. in a SEND command), these
-characters can be quoted, e.g. \{abc\}.txt.  But if the file list has been
-obtained programmatically, e.g. stored in an array, there is no way, short
-of tedious, complicated, and error-prone string processing, to reference the
-file.  For this we need a way to disable wildcard processing.  I added { ON,
-OFF } choices for the SET WILD and SHOW FILE commands: ckuusr.h, ckuus[234].c.
-{ ON, OFF } turns wildcarding off and on without affecting the { KERMIT,
-SHELL } agent choice; it does this by setting a new and separate global
-variable, wildena.  Added semantics to ckufio.c.  Crude but effective.  It
-might have been more Unixlike to add Yet Another form of quoting but we
-have enough of that already (later maybe I'll add a \function() for this).
-Needs to be propogated to Windows and VMS.  15 Jun 2005.
-
-Improved and fixed typos in HELP WILDCARD and HELP PATTERN.  ckuus2.c,
-15 Jun 2005.
-
-The GREP command, and probably anything else that uses ckmatch() for pattern
-matching, failed on patterns like */[0-3]*.html.  The [a-b] handler, when
-failing to match at the current position, neglected to back up the pattern
-and try again on the remainder of the string.  I also fixed another case, in
-which matching a literal string a*b?c against the pattern a[*?]*[?*]c caused
-ckmatch() to recurse until it blew up.  ckclib.c, 16 Jun 2005.
-
-Added builds and designer banner for Solaris 10.  makefile, ckuver.h,
-27 Jun 2005.
-
-Defined CKHTTP for NetBSD, the HTTP code builds and works fine there.
-ckcdeb.h, 2 Jul 2005.
-
-Added #ifndef OSF40..#endif around definition of inet_aton() in ck_ssl()
-to allow building in Tru64.  Added tru64-51b+openssl to makefile.
-15 Jul 2005.
-
-HTTP GET would fail if the URL contained any metacharacters, no matter how
-much you quoted them.  Although it uses cmfld() to parse the (partial) URL,
-it then uses cmofi() to get the output filename, which by default is the
-"filename" from the URL, which might be something like "rankem.asp?id=1639".
-cmofi() refuses to accept unquoted metacharacters in "filenames" and that's
-what happens in this case if the output filename is not specified.  Worked
-around this by disabling wildcard processing around HTTP GET using the new
-"wildena" variable from June 15th.  ckuusr.c, 18 Jul 2005.
-
-Fixed the June 16th fix to the pattern matcher.  I fixed a real problem, but
-I made an unrelated optimization that introduced new ones.  ckclib.c,
-18 Jul 2005.
-
-Added missing help text for \fb64encode() and \fb64decode().  ckuus2.c,
-18 Jul 2005.
-
-Changed SET WILD OFF help text to warn that this setting prevents the
-creation of backup files (later I'll have to see if something more useful
-can be done about this).  ckuus2.c, 18 Jul 2005.
-
-Built OK on Mac OS X 10.4.2 using macosx103 target (but with some
-"signedness" warnings in ckcnet.c and ckcftp.c).  Built on Unixware 7.1.4
-with uw7 target.  27-28 Jul 2005. 
-
-Added -DCKHTTP to Mac OS X 10.3-.4 KFLAGS.  Makefile, 4 Aug 2005.
-
-Built on BSDI 4.3.1.  Added -DCKHTTP.  
-
-Compact substring notation extended to accept not only start:length but also
-start-end notation.  Thus \s(foo[12:18]) means the substring of foo starting
-at position 12 of length 18, and tne new \s(foo[12-18]) means the substring
-of foo starting at position 12 and ending with position 18.  Ditto for
-\:(\%a), etc.  ckuus4.c, 9 Aug 2005.
-
-See correspondence with Mark Sapiro, Nov 2003 and Sep 2004, about certain
-variations on IF syntax having been broken by the introduction of "immediate
-macros" circa 1999.  It seems the problem -- variables not being expanded --
-always occurs in the ELSE part when (a) the IF condition is false; (b) the
-ELSE command is "standalone", i.e. expressed as a separate command after the
-IF command (original C-Kermit 5A syntax), and (c) its command list is a block.
-This would suggest the problem is in the XXELS parser.
-
-Going back to 1999, I find this:
-  Fixed a problem Jim Whitby noticed with quoting in ELSE statements.  This
-  problem was introduced when I unified IF and XIF, and occurs only when
-  ELSE begins on a line, followed by a { command list } rather than a single
-  command.  The solution (gross) was to make a special version of pushcmd()
-  (called pushqcmd()) for this situation, which doubles backslashes while
-  copying, BUT ONLY IF it's a command list (i.e. starts with "{"); otherwise
-  we break lots of other stuff.  Result passes Jim's test and still passes
-  ckedemo.ksc and iftest.ksc.  ckucmd.c, ckuus6.c, 27 Sep 99.
-
-I undid this change and it made no difference to all the other IF
-constructions (in fact, it fixed an urelated one that was broken, so now
-iftest scores 54 out of 54, instead of 53).  However, it does not fix the
-ELSE problem; in fact it pushes it all the way in the other direction:
-
-  The opposite occurs any time you try to execute an immediate macro inside a
-  macro or any other { block }: not only is the variable evaluated, it is
-  evaluated into nothing.  It looks like this happens only in immediate
-  macros, i.e. *commands* that start with '{'.  So maybe we really have two
-  isolated problems, that can each be fixed.
-
-The situation is illustrated by this simple script:
-
-  def xx {
-      if false { echo \%1, echo \%2 }
-      else { echo \%3, echo \%4 }
-  }
-  xx one two three four
-
-With pushqcmd() it echoes the variable names literally; with pushcmd() it 
-echoes empty lines.  Since ELSE, when its argument is a block, dispatches
-to the immediate-macro handler, it seems we have unified the two problems,
-so fixing one should fix the other.
-
-The problem is that we define a new temporary macro and then call dodo() to
-execute it.  But if the definition contains macro arguments, we have added a
-new level of macro invocation, thus wiping out the current level of args.
-The cure is to expand the variables in the immediate macro in the current
-context, before executing it.  This means simply changing the cmtxt() call
-that reads the immediate macro to specify xxsting as its processing
-function, rather than NULL, which is used for real macros to defer their
-argument evaluation until after the macro entered.  ckuusr.c, 11 Aug 2005.
-
-Added a new makefile target, macosx10.4, for Mac OS X 10.4.  This one uses
-an undocumented trick to get the otherwise unavailable-except-by-clicking
-Mac OS X version number (in this case 10.4.2) and stuff it into the HERALD
-string.  makefile, 11 Aug 2005.
-
-Built OK on Solaris 9, Solaris 10 (with a few implicit declaration warnings
-in ckuusx.c), Mac OS X 10.4.2 (with some warnings in ckcnet.c and ckcftp.c),
-Mac OS X 10.3.9 (also using the macos10.4 entry, which gets the right
-version number, and gets no warnings at all), RH Enterprise Linux AS4 on AMD
-x86_64, Tru64 Unix 4.0F, SCO UnixWare 7.1.4
-
-For docs and/or scriptlib:  Unix C-Kermit can be a stdin/out filter.  The
-trick is to use the ASK, ASKQ, or GETC command for input, specifying no
-prompt, and ECHO or XECHO for output, e.g.:
-
-while true {
-    ask line
-    if fail exit 0
-    echo \freverse(\m(line))
-}
-exit 0
-
-FOPEN didn't do anything with the channel number if the open failed, so any
-subsequent command that tried to reference it would get a parse error it was
-undefined or non-numeric, not very helpful.  Changed FOPEN to set the
-channel number to -1 if the file can't be opened.  Now subsequent operations
-on the channel fail with "Channel -1: File not open".  I also added two
-magic channel numbers: -8 means that any FILE command (besides OPEN and
-STATUS) on that channel is a noop that succeeds silently; -9 is a noop that
-fails silently.  So now it's possible to simply set a channel number to one
-of these values to disable i/o to certain file without getting lots of error
-messages.  dofile(): ckuus7.c, 12 Aug 2005.
-
-Added automatic herald construction for UnixWare 7.  makefile, 12 Aug 2005.
-
-Unix isdir() never allowed for arguments that started with tilde, so gave
-incorrect results for ~/tmp/ or ~fdc.  The problem was mainly invisible
-since most commands that parsed file or directory names used cmifi(), cmdir(),
-etc, which did the conversions themselves.  But IF DIRECTORY was an exception,
-since its operand had to be treated as just text, and then tested after it
-was parsed.  ckufio.c, 13 Aug 2005.
-
-Fixed the following:
-"ckuusx.c", line 8959: warning: implicit function declaration: ckgetpeer
-"ckufio.c", line 1869: warning: implicit function declaration: ttwait
-"ckufio.c", line 2941: warning: implicit function declaration: mlook
-"ckufio.c", line 2943: warning: implicit function declaration: dodo
-"ckufio.c", line 2944: warning: implicit function declaration: parser
-"ckcftp.c", line 2625: warning: implicit function declaration: delta2sec
-"ckcftp.c", line 4071: warning: no explicit type given for parameter: prm
-"ckcftp.c", line 8389: warning: no explicit type given for parameter: brief
-ckuusx.c, ckufio.c, ckcftp.c, ckucmd.h.  13 Aug 2005.
-
-Unbuffered stdout code has never worked because the setbuf(stdout,NULL) call
-has to occur before the stdout has been used.  The reason it's needed is
-that some Kermit code writes to stderr (which is unbuffered) and other code
-writes to stdout, and therefore typescripts can come out jumbled.  Robert
-Simmons <robertls@nortel.com> provided the needed clue when he insisted it
-worked only when executed at the very beginning of main().  So I moved the
-code to that spot.  But since now we also want to make unbuffered a runtime
-(command-line) option, I had to do a clunky by-hand pre-prescan inline in
-main() to look thru argv[], even before prescan() was called.  ckcmai.c,
-ckutio.c, ckuusy.c, 13 Aug 2005.  (Now that this works, it might be a good
-idea to remove all use of stderr from Kermit.)
-
-Managed, after some finagling, to build a 64-bit version on Solaris 10 at
-Utah Math with Sun cc.  (Can't make any gcc builds at all, 32- or 64-bit,
-they all blow up in <sys/siginfo.h>.)  New target: solaris10_64.  makefile,
-15 Aug 2005.
-
-The 64-bit Solaris 10 version compiles and links OK and transfers files in
-remote mode.  It can make FTP connections and use them, but Telnet connections
-always fail with "network unreachable".  This is with all default libs and
-include files.  Nelson has a separate set in /usr/local, which he references
-explicitly in all his 64-bit builds, but using these makes no difference.
-Some data type is wrong in ckcnet.c.  But telnet works fine in 64-bit Linux
-and Tru64 builds.  Debug logs trace the difference to netopen() (of course),
-the spot where we test the results of inet_addr(), which is already marked
-suspicious for 64-bit builds.  It seems that inet_addr() is of type in_addr_t,
-which in turn is u_int32, i.e. an unsigned 32-bit int.  Yet the man page says
-that failure is indicated by returning -1.  I guess this doesn't matter in
-32-bit builds, but in the 64-bit world, the test for failure didn't work
-right.  I made a Solaris-specific workaround, and checked that it works in
-both 32-bit and 64-builds.  I really hate typedefs.  ckcnet.c, 15 Aug 2005.
-
-Changed the plain-text version (as opposed to the popup or GUI version - the
-GUI version, at least, already does this) of ASKQ to echo keystrokes
-asterisks rather than simply not echo anything, so it's easier to see what
-you're doing, the effects of editing, etc.  Experimental; for now, there's
-no way to disable this.  Not sure if there needs to be.  Anyway, to get this
-working required a fair amount of cleaning up of gtword(), which was echoing
-different ways in different places.  ckuus6.c, ckucmd.c, 15 Aug 2005.
-
-Added a solaris9_64 target for building a 64-bit version on Solaris 9 with
-Sun cc.  Verified, using the DIR command and \fsize() function on a 4.4GB
-file, that the Solaris 64-bit version of Kermit gets the size correctly, and
-that it can copy such a file (thus its fopen/fread/fwrite/fclose interface
-works right).  Initiated a large-file transfer between here and Utah over
-SSH and verified that it puts the correct file size in the A packet when
-sending; the right quantites are shown on the file transfer display (file
-size CPS, percent done, etc).  But even at 5Mb/sec, it takes a good while to
-transfer 4.4GB, more than 2 hours (not streaming; 30 window slots, 4K
-packets, maybe it would go faster with streaming)...  After an hour or so,
-it filled up the partition and gave up (gracefully) before it reached the
-2GB frontier (drained its pending packets, closed the partial file).
-Restarted at 12:54, this time with streaming and 8K packets (the speed
-wasn't significantly different).  This time it transferred 95% of the file
-(4187660288 bytes) before failing because the disk filled up.  Went to Utah
-and started a transfer between two Solaris 10/Sparc hosts; this goes about 8
-times faster.  The transfer completed successfully after 17m41s.  All fields
-in the f.t. display looked right the whole time.  Then I verified various
-other 64-bit combinations transferring the same 4.4GB file:
-
-        To................
-  From  Sol  Amd  i64  Tru      
-  Sol   OK   OK   OK   OK      Sol = Solaris 10 / Sparc
-  Amd   OK                     Amd = AMD x86_64 RH Enterprise Linux AS4
-  i64   OK                     i64 = Intel IA64, RH 2.1AS
-  Tru                          Tru = Tru64 Unix 4.0F Alpha
-
-(The other combinations are difficult to test for logistical reasons.)
-
-Tried sending the same long file with Kermit's FTP client.  It chugged along
-for a while until I stopped it; it would have taken hours to complete.
-There is no indication that it wouldn't have worked, assuming the FTP server
-could also handle long files, which who knows.  Anyway, Kermit showed all
-the right data on the display screen.  17 Aug 2005.
-
-On AMD x86_64 and IA64 native 64-bit Linux builds, the pty routines did not
-work at all.  ptsname() dumped core.  If I commented out ptsname(), then the
-next thing dumped core.  The same code works on the other 64-bit builds.
-Poking around, I see that this version of Linux has an openpty() function,
-which I could try using instead of the current API -- grantpty(), etc.  Then
-I see that openpty() is already coded into Kermit's pty module,
-conditionalized under HAVE_OPENPTY, which has never before been defined for
-any build.  I added a test to the makefile linux target (look for the
-openpty() prototype in <pty.h>, if found define HAVE_OPENPTY as a CFLAG and
-also add -lutil to LNKFLAGS).  Works fine on the problem builds, and also
-on previously working 32-bit builds.  makefile, 17 Aug 2005.
-
-Fixed a bug in the ASKQ echo asterisks code, which made the VMS version of
-C-Kermit always echo asterisks.  Turns out that some code in the main parse
-loop to reset command-specific flags was in the wrong place, which had other
-effects too, for example ASKQ temporarily turns off debug logging as a
-security measure, but the code to turn it back on was skipped in most cases.
-Some other side effects related to the DIRECTORY and CD commands might have
-been possible but I haven't seen them.  ckuus[56].c, 23 Aug 2005.
-
-Problem reported when sending a file to VMS when the name in the F packet
-starts with a device specification and does not include a directory field,
-and PATHNAMES are RELATIVE.  Example: dsk:foo.bar becomes f_oo.bar.  The
-code assumes that if there is a device field, it is followed by a directory
-field, and it inserts a dot after the '[', which in this case is not there.
-Later the dot becomes '_' because of the only-one-dot rule.  Solution: only
-insert the dot if there really is an opening bracket.  nzrtol(): ckvfio.c,
-23 Aug 2005.
-
-A report on the newsgroup complains that C-Kermit and K95 servers were
-sending REMOTE DIR listings with only #J line terminators, rather than #M#J.
-Yet all the other REMOTE xxx responses arrived with #M#J.  snddir() was
-neglecting to switch to text mode.  ckcfns.c, 26 Aug 2005.
-
-Back to long files.  What happens if 32-bit Kermit is sent a long file?
-It gets an A-packet that looks like this:
-
-  ^A_"A."U1""B8#120050815 18:28:03!'42920641*4395073536,#775-!7@ )CP
-
-The 32-bit receiver reacts like so:
-
-  gattr length[4395073536]=100106240
-
-the first number being the string from the A-packet, the second being the
-value of the long int it was converted to by atol().  Clearly not equal in
-this case.  When this happens Kermit should reject the file instead of
-accepting it and then getting a horrible error a long time later.  Added
-code to gattr() to convert the result of atol() back to a string and compare
-it with the original string; if they're not equal, reject the file on the
-assumption that the only reason this could happen is overflow.  Also some
-other code in case the sender sends the only LENGTHK attribute.  Now files
-whose lengths are too big for a long int are rejected right away, provided
-the sender sends the length in an A packet ahead of the file itself.  If
-this new code should ever cause a problem, it can be bypassed with SET
-ATTRIBUTE LENGTH OFF.  ckcfn3.c, 26 Aug 2005.
-
-As I recall from when I was testing this a few weeks ago, when the too-big
-length is not caught at A-packet time, the transfer fails more or less
-gracefully when the first attempt is made to write past the limit.  I went
-to doublecheck this by sending a big file from the 64-bit Solaris10 version
-to a 32-bit Mac OS X version that does not have today's code.  The Mac
-thinks the incoming file is 2GB long when it's really 4GB+.  But in this
-case, something new happens!  Although the percent done and transfer rate go
-negative, the file keeps coming.  It would seem that Mac OS X lets us create
-long files without using any special APIs.  The transfer runs to completion.
-Mac OS X Kermit says SUCCESS (but gets the byte count and cps wrong, of
-course).  But then a STATUS command says FAILURE.  The file was, however,
-transferred successfully; it is exactly the same length and compares byte
-for byte with the original.  This tells me that in the Mac OS X version --
-and how many others like it??? -- today's rejection code should not be
-enabled.  Meanwhile I put today's new code in #ifndef NOCHECKOVERFLOW..#endif,
-and defined this symbol in the Mac OS X 10.4 target.  Over time, I'll have
-to find out what other platforms have this characteristic.  And of course
-I'll also have to do something about file-transfer display, statistics, and
-status.  makefile, ckcfn3.c, 26 Aug 2005.
-
-From now on I'm going to bump the Dev.xx number each time I upload a new
-ckdaily.  This one will be Dev.02.  ckckmai.c, 26 Aug 2005.
-
-Got rid of all the extraneous FreeBSD 4 and 5 build targets.  Now there's
-one (freebsd) for all FreeBSD 4.1 and later.  makefile, 27 Aug 2005.
-
-Mac OS X 10.4 (Tiger) is a 64-bit OS.  Building C-Kermit 0n 10.4.2 without
-any special switches stilll gives a 32-bit executable.  Ditto building with
--mpowerpc64.  Further investigation turned up a tip sheet on MySQL that says
-you have to include all of these: -mpowerpc64 -mcpu=G5 -mtune=G5 -arch
-ppc64.  That did the trick.  New makefile target: macosx10.4_64.  But the
-10.4.2 system I tried did not have 64-bit [n]curses or resolv libs, so this
-build has no -DNOCURSES -DNO_DNS_SRV.  makefile, 27 Aug 2005.
-
-Created a symbol CK_64BIT to indicate true 64-bit builds at compile time.
-Added 64-bit announcement to the startup herald and the VERSION text.
-ckcdeb.h, ckuus[r5].c, 27 Aug 2005.
-
-Added a built-in variable \v(bits) to indicate the size of the build
-(16, 32, 64, or whatever else sizeof() might report).  ckuusr.h, ckuus4.c,
-27 Aug 2005.
-
-Got rid of all the warnings in 64-bit Mac OS X about args to getsockopt(),
-getsockname(), and getpeername(), and the comparisons on the return value
-of inet_addr().  ckcnet.[ch], 27 Aug 2005.
-
-Now to check the effects on other builds...
-  Linux on AMD64: ok.
-  Linux on IA64: ok.
-  Linux on i386: ok.
-  Mac OS X 10.3.9 32-bit: ok.
-  Solaris 10 64-bit: ok.
-  Solaris 9 32-bit: ok.
-  Tru64 4.0F: ok.
-  FreeBSD 4.11: ok.
-  FreeBSD 5.4 ia64 (64-bit): ok.
-  FreeBSD 5.4 i386 (32-bit): ok.
-
-The Tru64 5.1B build totally blew up because they have their own unique
-sockopt/etc length-argument data type (int!), so I had to roll back on using
-socklen_t for this in all 64-bit builds.  Checked to make sure it still
-builds on Tru64 4.0F after this change (it does).  ckcnet.h, 27 Aug 2005.
-
-The HP-UX 11i/ia64 build comes out to be 32-bit but thinks it's 64-bit.
-CK_64BIT is set because __ia64 is defined.  So how do I actually make a
-64-bit HP-UX build?  I tried adding +DD64 to CFLAGS, and this generates
-64-bit object files but linking fails to find the needed 64-bit libs
-(e.g. -lm).  For now I added an exception for HPUX to the CK_64BIT
-definition section.  ckcdeb.h, 27 Aug 2005.
-
-Took the time to verify my recollection about the "graceful failure" on a
-regular Pentium Linux system when receiving a too-big file...  OK, it's not
-exactly graceful.  It gets a "File size limit exceeded" error; the message
-is printed in the middle of the file-transfer display, apparently not by
-Kermit, and Kermit exits immediately.  Looks like a trap...  Yup.  "File
-size limit exceeded" is SIGXFSZ (25).  What happens if we set it to SIG_IGN?
-Just the right thing: The receiver gets "Error writing data" at 2147483647
-bytes, sends E-packet to sender with this message, and recovers with total
-grace (drains packet buffers, returns to prompt).  ckutio.c, 27 Aug 2005.
-
-Backed off from rejecting a file because its announced size overflows a
-long.  Now instead, I set the file size to -2 (a negative size means the
-size is unknown, but we have always used -1 for this; -2 means "unknown and
-probably too big").  In this case, the f-t display says:
-
-  File Size: POSSIBLY EXCEEDS LOCAL FILE SIZE LIMIT
-
-then the user can interrupt it with X or whatever, or can let it run and
-see if maybe (as in the case of Mac OS X) it will be accepted anyway.  This
-way, we skip all the bogus calculations of percent done, time remaining, etc.
-ckcfn3.c, ckuusx.c, 27 Aug 2005.
-
-Discovered that VMS C-Kermit on Alpha and IA64 is a 32-bit application;
-sizeof(long) == sizeof(char *) == 4.  Tried adding /POINTER_SIZE=64 to VMS
-DECC builds on Alpha and IA64, but the results aren't great.  Tons of
-warnings about pointer size mismatches between Kermit pointers and RMS ones,
-and the executable doesn't run.  It appears that access to long files
-would require a lot of hacking, similar to what's needed for 32-bit Linux.
-
---- Dev.02: 27 Aug 2005 ---
-
-From Jeff, 28 Aug 2005.
- . Fix SSH GLOBAL-KNOWN-HOSTS-FILE / USER-KNOWN-HOSTS-FILE parsing, ckuus3.c.
- . Pick up K95STARTFLAGS from environment, ckuus4.c.
- . Fix some typos in command-line processing (-q), ckuus4.c.
- . Be sure to suppress herald if started with -q, ckuus7.c.
- . Fix ssh command-line switches, ckuusy.c.
-
-Eric Smutz complained that HTTP POST was adding an extraneous blank line,
-which prevented his application from successfully posting.  RFC 2616 states
-(in Section 4.1):
-
-   In the interest of robustness, servers SHOULD ignore any empty
-   line(s) received where a Request-Line is expected. In other words, if
-   the server is reading the protocol stream at the beginning of a
-   message and receives a CRLF first, it should ignore the CRLF.
-
-   Certain buggy HTTP/1.0 client implementations generate extra CRLF's
-   after a POST request. To restate what is explicitly forbidden by the
-   BNF, an HTTP/1.1 client MUST NOT preface or follow a request with an
-   extra CRLF.
-
-This seems pretty clear.  One section of code in http_post() (just above the
-postopen: label) was appending a CRLF to a buffer whose last already was
-terminated by CRLF, and then appended a second CRLF; thus two empty lines.
-I removed the second one.  ckcnet.c, 28 Aug 2005.
-
-I looked into the 64-bitness of NetBSD, it seems to be like Linux and
-FreeBSD on 64-bit hardware, i.e. you just build it there and it works, at
-least on Alpha and AMD64, going back to NetBSD 1.4 or 1.5.  But I don't have
-access to any of these for verification and documentation on the Web is
-scanty.
-
-Checked PeterE's complaint again of warnings in ckutio.c about parameter
-list of get[ug]id() and gete[ug]id().  When I "make hpux1100o" on HP-UX
-11.11 (PA-RISC), there are definitely no warnings.  He says the same thing
-happens on 10.xx, but I don't have access to that any more.  I also did
-"make hpux1100o" on HP-UX 11.23 (11i v2) (PA-RISC), also no warnings.
-(Except in both cases, a warning about a comment within a comment in
-/usr/include/sys/ptyio.h).  On HP-UX 11i v2 on Itanium, however, there are
-TONS of warnings, mostly of the "variable set but never used" kind.  Also
-"dollar sign used in identifier".  Tracking this last one down, I see it's
-complaining about code that's in #ifdefs for other platforms, such as
-Apollo Aegis.  Is "aegis" defined in HP-UX 11i v2/IA64?  No!  (It would show
-up in SHOW FEATURES if it was.)  Some phase of the compiler is complaining
-about code that it should be skipping (and that, in fact, it *is* skipping
-it because the build is successful).  It's as if cc is running lint for me
-but not telling lint which macros are defined and which are not.
-
-Verified that 64-bit linking fails in the same way for HP-UX 11i v2 on both
-IA64 and PA-RISC.  Sent a query to HP.
-
-Compiling ckcnet.c and ckcftp.c got the familiar sockopt-related warnings on
-HP-UX 11i v2; turns out it is just like Tru64 Unix in using an int for the
-length argument.  Added another special case and the warnings went away.
-ckcnet.h, 28 Aug 2005.
-
-Added some stuff to SHOW FEATURES to see what kinds of macros are exposed
-(e.g. INT_MAX, LONG_MAX, LLONG_MAX, etc) and also show sizeof(long long) and
-sizeof(off_t).  Building this code all over the place will give me an idea
-of how widespread these data types are, and to what extent I can tell
-whether they are available from clues in the header files.  (At first
-glance, it appears that I'm not picking up <limits.h>, but adding an
-#include for it is just asking for trouble.)  No complaints about long long
-or off_t from Solaris 9 or recent Linuxes.  ckuus5.c, 28 Aug 2005.
-
-Fixed a warning in HP-UX 10 and 11 stemming from some old-style prototypes
-in ckutio.c for get[re][gu]id().  ckutio.c, 29 Aug 2005.
-
-Updated minix3 target from Andy Tanenbaum.  makefile, 29 Aug 2005.
-
-PeterE confirms that "long long" and off_t are available in all HP-UX 10 and
-11, and in HP-UX 9 on PA-RISC but not Motorola.  30 Aug 2005.
-
-Got 64-bit builds to work on HP-UX.  According to my notes, John Bigg of HP
-said (in 1999) that HP-UX 10.30 and later require PA-RISC 1.1, and do not
-work on PA-RISC 1.0.  But is PA 1.0 64-bit or what?  Today, Alex McKale of
-HP said "The 64-bit binaries will work on all machines that have the same or
-later release of HP-UX (excluding PA-RISC 1.1 machines)".  Still need
-clarification...  Maybe it's that all IA64 builds can be 64-bit but I need
-dual builds for PA-RISC.  Meanwhile I started transfer of a 4GB+ file from
-Solaris to HP-UX 11i but it exceeded some quota on the HP long before it
-approached the 2G point.  It failed cleanly and up until then it was working
-fine (numbers, stats, etc).  30 Aug 2005.
-
-Support of large files in 32-bit builds began in 10.20.  64-bit application
-support began in 11.00, but not all machines that run 11.00 support 64 bits.
-About long files, see HP /usr/share/doc/lg_files.txt.
-
-PeterE found that certain patterns can still make Kermit loop; example:
-
-  if match T01011-00856-21-632-073 *[abc] { echo GOOD } else { echo BAD }
-  if match T01011-00856-21-632-073 *[a-z] { echo GOOD } else { echo BAD }
-
-The minimum offending pattern is * followed immediately by an [xxx]
-construction, followed by anything else, including nothing.  Previous
-versions of Kermit handled this one correctly, without looping (but failed
-certain matches that should have succeeded).  The new section of code I
-added on 15 June, upon failure to match, advances the string pointer and
-backs up the pattern to the previous pattern, and starts again
-(recursively).  However, there needed to be a corresponding check at entry
-for an empty target string.  ckmatch(): ckclib.c, 12 Sep 2005.
-
-PeterE discovered that "kermit -y filethatdoesnotexit" gives an erroneous
-error message that names the user's customization, rather than the name
-given on the command line.  doinit(): ckuus5.c, 12 Sep 2005.
-
-FREAD does not get an error if it tries to read a record or file or piece of
-file that is too big for its buffer.  In particular, FREAD /SIZE:xxx seems
-to succeed even if less than xxx was read.  It should fail unless, perhaps,
-it successfully read up to the end of the file.  Furthermore, if xxx is
-bigger than the file buffer size, it should complain.  The buffer is
-line[LINBUFSIZ], 32K.  The lack of failure was due to code in dofile() that
-adjusted the given size silently if it was greater than the buffer size,
-which I removed, and also added a check when parsing the /SIZE: switch.
-dofile(): ckuus7.c, 12 Sep 2005.
-
-That still didn't help with FREAD /SIZE:n returning less than n bytes, even
-when they were available.  That's because the underlying routine, z_in(),
-didn't check fread()'s return code, which is the number of bytes read.
-If fread() has smaller buffers, it needs to be called in a loop.  z_in():
-ckuus7.c, 12 Sep 2005.
-
-Flen() fails on strings of length 8192 or more.  The limitation is in the
-callers of zzstring, which seem to be specifying an 8K buffer, in this case
-fneval().  The operable symbols are FNVALL (max length of value returned by
-a function) and MAXARGLEN (maximum length of an argument to a function).  I
-changed both of these for BIGBUFOK builds to be CMDBL.  Buffers can never be
-infinite, there has to be a limit.  It's important to make everything work
-consistently within that limit, and to make something useful happen when the
-limit is exceeded.  At this point, I can probably also increase the limits
-for modern 32-bit systems, and certainly for 64-bit ones.  Also there's no
-point in worrying about 16-bit platforms any more; earlier C-Kermit versions
-can still be used on them if necessary. ckuusr.h, 12 Sep 2005.
-
-Special #ifdefs for finding resolv.h and nameser.h in MINIX3 from Andy
-Tanenbaum.  ckcnet.c, 20 Sep 2005.
-
-PeterE noticed that ckmatch(), even though it works pretty well now, does a
-lot of extra and unnecessary recursion after determining the string and
-pattern do not match, at least when the pattern is of the form *[abc].
-After several false starts I was able reduce this effect to a minor level
-(but not eliminate it all together) by changing a while loop into a do loop.
-ckmatch(): ckclib.c, 15 Oct 2005.
-
-Added -DNOLONGLONG to HP-UX 8.00 and earlier builds, and to Motorola-based
-HP-UX 9.00 builds.  This is simply to inhibit the test for whether "long
-long" is supported by the compiler, since when it isn't, the module
-containing the test won't compile.  makefile, ckuus5.c, 16 Oct 2005.
-
-Making ASKQ always echo askterisks is a bad idea, because when it doesn't
-echo, it's the perfect way to read silently from stdin, e.g. in a CGI script
-(INPUT can also be used for this but it's not as straightforward).  So I put
-the default for ASKQ back to no echoing, then gave ASKQ its own switch
-table, which is the same as for ASK with the addition of an /ECHO:x switch,
-which tells what character to echo.  ckucmd.c, ckuus[26].c, 17 Oct 2005.
-
-Fixed a bug in FTP GET /COMMAND filename commandname; it always dumped core
-dereferencing a null string (the nonexistent local asname).  ckcftp.c,
-17 Oct 2005.
-
-For docs: if you don't like the funny business that happens when you type
-an IF command at the prompt, use XIF instead and it won't happen.  Also note
-that commands like "if xxx { echo blah } else { echo blah blah }" don't
-work when typed at the prompt; you have to use XIF for this. 
-
-Back to ckmatch()...  Under certain conditions (e.g. patterns like *[abc])
-failure to match would not stop the recursion because the string and pattern
-arguments are on the stack, as they must be, so there was no way for level
-n-1 to know that level n had detected a definitive nonmatch and that no
-further attempts at matching were required.  The right way to handle this is
-to recode the whole thing as coroutines, the cheap way out is with a global
-static flag.  Works perfectly, in the sense that the match.ksc test results
-are identical to what they were before and the extra backing up and
-recursion are eliminated.  (The Oct 15th fix wasn't really a fix, it broke
-a couple of cases.)  ckclib.c, 20 Oct 2005.
-
-ckuus7.c(2987): warning #267: the format string requires additional arguments
-(in PURGE command); fixed 20 Oct 2005.
-
-From Andy Tanenbaum, final changes for MINIX3: #ifdef out the inline
-definitions for gettimeofday() and readlink().  ckutio.c, 23 Oct 2005.
-
-From Jeff: struct gss_trials initializers changed from gss_mech_krb5 to
-ck_gss_mech_krb5.  ckcftp.c, 23 Oct 2005.
-
-From Jeff: some improvements to K95 GUI SHOW TERMINAL.  ckuus5.c, 23 Oct 2005.
-
-Found and corrected some misplaced #ifdefs in shofeat(), ckuus5.c, 23 Oct 2005.
-
---- Dev.03 ---
-
-Fixed a compiler warning in a debug() statement in zzstring() by adding
-parens.  ckuus4.c, 24 Oct 2005.
-
-Added -DNOLONGLONG to sv68r3v6 target, makefile, 25 Oct 2005.
-
-New makefile targets for HP-UX from PeterE to handle the 'long long'
-situation.   26 Oct 2005.
-
-From Jeff: changes to support OpenSSL 0.9.8, ck_ssl.h.  ckcasc.h has had
-short names defined for ASCII control characters for 20-some years but now
-they are causing conflicts, so EM becomes XEM (also for OpenSSL 0.9.8).
-Changed K95's default terminal type from VT320 to VT220 because VT320
-termcaps/terminfos are disappearing from Unix hosts: ckuus7.c.  Reorganize
-the data-types section of SHOW FEATURES to add more macro tests for integral
-sizes and to provide for the proper printf formatting in order to allow the
-sizes to be output ("You are going to need to be careful because %llx is not
-supported on all platforms.  On Windows, it is the same as %lx, 32 bits"):
-ckuus5.c, 26 Oct 2005.
-
-Defined NOLONGLONG ckcdeb.h for various old platforms where we know we are
-never going to need 64-bit ints (even if they support a long long datatype,
-chances are pretty slim they supported 64-bit file sizes).  ckcdeb.h,
-26 Oct 2005.
-
-PeterE noticed that GOTO targets can only be 50 characters long.  This was
-by design, a long time ago, on the assumption that nobody would make longer
-labels.  But in SWITCH statements, case labels can be variables that expand
-to anything at all.  If we chop them off at 50, we might execute the wrong
-case.  Changed the maximum label size to be 8K, and added code to dogoto()
-to check when a label or target is too long and fail, to prevent spurious
-GOTO or SWITCH results.  ckuusr.h, ckuus[r6].c, 26 Oct 2005.
-
-Testing revealed there was still a problem with SWITCH case labels that were
-variables that expanded into long strings.  Turns out that I was being
-too clever when I decided that, if the SWITCH macro was n1 characters long
-and the case-label search target was n2 characters long, I only had to
-search the first n1-n2+1 characters of the macro definition.  That was true
-before I allowed case labels to be variables, but not any more!  Fixed in
-dogoto(): ckuus5.c, 26 Oct 2005.
-
---- Dev.04 ---
-
-Dev.04 didn't actually contain Jeff's data-type changes to shofeat(),
-I think I saved the wrong buffer in EMACS...  Fixed now.  27 Oct 2005.
-
-PeterE corrected a typo in the HP-UX 7.00 makefile target.  27 Oct 2005.
-
-PeterE had been reporting problems stress-testing the new SWITCH code, but
-only on HP-UX 9, primarily stack overrun.  Turns out to be the HP-UX 9
-optimizing compiler's fault.  No optimization, no problems.
-
-PeterE found that even when dogoto() detects a string that is too long
-and fails, this does not stop SWITCH from producing a result, which can not
-possibly be trusted.  Changed the part of dogoto() that handles this to
-not just fail, but also to exit the script immediately and return to top
-level.  ckuus6.c, 28 Oct 2005.
-
-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?  It was easy, just a few lines in cmifi2() and gtword(), plus a
-couple declarations.  To see all the changes, search for "lastfile" (all the
-new code is protected by #ifndef NOLASTFILE).  ckucmd.c, 28 Oct 2005.
-
-I added a new variable \v(lastfilespec) that expands to the same last
-filespec, for use in scripts.  ckuusr.h, ckuus4.c, 28 Oct 2005.
-
-The Unix version of C-Kermit failed to put anything in the session log if
-SET TERMINAL DEBUG ON.  Rearranged the pertinent clause so logging happens
-independent of TERMINAL DEBUG.  For now, since the user who noticed this
-wanted debug format to go into the session log, that's what I do.  The
-alternative would be to just log the raw incoming stream as usual, or to add
-Yet Another SET Command to choose.  ckucns.c, 11 Nov 2005.
-
-Fixed HELP INTRO text.  ckuus2.c, 11 Nov 2005.
-
-Added NOLONGLONG for SV68.  ckcdeb.h, 11 Nov 2005.
-
---- Dev.05 ---
-
-Added a debug() statement in FTP secure_getbyte() to see what's going on
-with Muhamad Taufiq Tajuddin's 205-byte-per-second FTP/SSL downloads.
-
---- Dev.06 ---
-
-Result: nothing, SSL_get_error() does not report any errors.  Suggested
-testing SSL_read()'s return code, if 0 don't update the screen.
-
-Created a new data type CK_OFF_T in ckcdeb.h that will eventually resolve
-to whatever each platform uses for file sizes and offsets.  ckcdeb.h,
-17 Nov 2005.
-
-Made a new library routine ckfstoa() that converts a file size or offset to
-a string.  This is to solve the problem with having to use different
-printf() formats for different representations of file size (int, long, long
-long, off_t, signed, unsigned, etc).  Replaced a few printf("%l",size) with
-printf("%s",ckfstoa(size)) with the expected results.  This is just a start,
-the definitions will need adjustment for many platforms, variables need to
-be redeclared, and all the offending printf's (and printw's) will have to
-hunted down and converted.  ckclib.[ch], ckuus4.c, 17 Nov 2005.
-
-Built a minimal version on Linux with:
-make linux "KFLAGS=-DNOLOCAL -DNOICP -DNOCSETS -DNODEBUG"
-Worked fine, result was 260K on i686.  21 Nov 2005.
-
-Discovered that Kermit's date parser, contrary to the documentation, failed
-to handle strings like "Wed, 13 Feb 2002 17:43:02 -0800 (PST)", which are
-commonly found in email.  This was because of an overzealous and misguided
-check in the code; once removed, all was well.  ckucmd.c, 26 Nov 2005.
-
-Added a new format code 4 to \fcvtdate() to emit asctime() format, used in
-BSD-format email message envelopes (i.e. the "From " line).  shuffledate(),
-ckucmd.c, ckuus[24].c, 26 Nov 2005.
-
-Added a new function \femailaddress().  Given a From: or Sender: header line
-from an RFC2822-format email address, extracts and returns the actual email
-address, such as kermit@columbia.edu.  ckuusr.h, ckuus[42].c, 26 Nov 2005.
-
-Using the new functions, I wrote a script to fetch mail from a POP3 server
-over a TLS connection.  But the line-at-a-time input (needed for changing
-line terminators and byte-stuffing text lines that start with "From ") is
-slow, 17 sec to read 29 messages totaling 175K.
-
-Added INPUT /CLEAR so INPUT can be started with a clean buffer without
-requiring a sepearate CLEAR INPUT command.  ckuusr.h, ckuus[r24].c,
-27 Nov 2005.
-
-One thing that INPUT was never able to do well was read and save the
-complete incoming data stream.  That's because, while waiting for its
-target, the buffer might overflow wrap around.  Yet there was never a way to
-tell it to stop when its buffer fills up and let me save it.  I added a
-/NOWRAP switch that does this.  If the buffer fills up before any other
-completion criterion is met, INPUT returns failure, but with \v(instatus)
-set to 6 (the next available instatus value).  Thus a program that wants to
-read and save (say) an email message from a POP server, which could be any
-length at all, and which terminates with <CRLF>.<CRLF> could do this:
-
-  set flag off
-  while open connection {
-      input /nowrap 10 \13\10.\13\10 # Wait for <CRLF>.<CRLF>
-      if success {
-          frwrite /string \%o {\freplace(\v(input),\13\10.\13\10,\13\10)}
-          set flag on
-          break
-      } else if ( == \v(instatus) 6 || == \v(instatus) 1 ) {
-          frwrite /string \%o {\v(input)}
-          continue
-      }
-      break
-  }
-  if flag (handle success)
-
-Note carefully the braces around the FWRITE text; without them, trailing
-spaces would be lost.
-
-Previously the only way to INPUT an entire data stream without losing
-anything (assuming it was ordinary lines of text that were not "too long"),
-was line-by-line:
-
-  while open connection {
-      input /clear 10 \13\10
-      if fail break
-      if eq "\v(input)" "$ \13\10" break
-      fwrite /string \%o {\freplace(\v(input),\13\10,\10)}
-  }
-
-The new code is 3 times faster using the default INPUT buffer length of 4K.
-Raising it to 16K makes it 3.6 times faster (not worth it).  Changing the
-POP3 script to use INPUT /NOWRAP makes it about twice as fast (it does more;
-it has to do all the byte-stuffing and unstuffing).  27 Nov 2005.
-
-Changed ssl_display_xxx() to just return if SET QUIET ON.  Otherwise there
-is no way to suppress the messages.  Also protected a previously unprotected
-printf("[SSL - OK]\r\n"); by if ( ssl_verbose_flag ).  ck_ssl.c,
-28 Nov 2005.
-
-Discovered that FOPEN /APPEND doesn't work if the file doesn't exist.  It
-uses cmiofi() which is a super-hokey front end to cmifi2().  I had code to
-call it but for some reason it was commented out, with a note to the effect
-it didn't work.  I uncommented it but that didn't help much.  So I wrote an
-entirely new cmiofi() that works exactly as it should, using chained FDBs,
-_CMIFI to _CMOFI (I think the original cmiofi() predated chained FDBs).
-ckuus7.c, ckucmd.c, 29 Nov 2005.
-
-Getting rid of the awful hacks required to call cmiofi() meant I also had to
-change the EDIT command, which is the only other place where it's used.
-Unfortunately now it's no longer possible to give EDIT without a filename
-(to just start an empty editor) but I doubt anyone will notice.  ckuusr.c,
-29 Nov 2005.
-
-IF KERBANG didn't always work right.  If a kerbang script TAKEs another
-kerbang script, the second one should have IF KERBANG false, but it didn't.
-Added a check for \v(cmdlevel) == 1.  Now you can write a wrapper that runs
-a kerbang script in a loop, and the latter can use IF KERBANG to know
-whether to EXIT (if called at top level) or END (if called by another
-script, thus allowing -- in this case -- the loop to continue).  ckuus6.c,
-29 Nov 2005.
-
-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
-
-ckuus[24].c, 1 Dec 2005.
-
-Built OK on VMS 7.2-1 with MultiNet 4.4.  Built with and without OpenSSL on
-Linux OK, ditto Solaris 9.  Built OK on RH Linux AS4 on X86_64 (64-bit);
-"show var fsize" (using new ckfstoa()) works OK there.  Also Mac OS X 10.3.9
-(32-bit), Tru64 UNIX 4.0F (64-bit), HP-UX 11iv2 (64-bit) (picky new compiler
-spews out tons of useless warnings), FreeBSD 6.0 on ia64 (64-bit).
-
---- Dev.07 ---
-
-Changed "make netbsd" to be a synonym for "make netbsd2" because the
-original netbsd target was ancient.  Renamed it to netbsd-old.  makefile,
-3 Dec 2005.
-
-Updated INPUT and MINPUT help text.  ckuus2.c, 3 Dec 2005.
-
-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.  Jeff says "You will need to implement NP_SSLRAW and NP_TLSRAW
-that do the same as NP_TCPRAW but negotiate SSL or TLS as appropriate."
-This was not as easy as it sounded, because apparently a lot of the Telnet
-code is used by SSL and TLS even when Telnet protocol is not being executed.
-I wound up doing this as follows: I added /SSL-RAW and /TLS-RAW to the
-switch table.  Rather than disable Telnet, they do exactly what the /SSL and
-/TLS switches do, but also set a special flag.  This flag is checked in only
-two place: netclos() (to prevent Kermit from sending TELNET LOGOUT when
-closing the connection), and tn_doop() (to prevent Kermit from reacting to
-incoming IACs; it makes tn_doop() return(3), which means "quoted IAC", which
-causes the caller to keep the IAC as data).  ckcnet.h, ckctel.h, ckctel.c,
-ckuus7.c, 4 Dec 2005.
-
-The INPUT command did not account for tn_doop() returning 3.  Fixed in
-doinput(), ckuus4.c, 4 Dec 2005.
-
-Added another debug() statement in FTP secure_getbyte() to see what's going on
-with Muhamad Taufiq Tajuddin's 205-byte-per-second FTP/SSL downloads, plus
-new code to test SSL_read()'s return code (byte count); if 0 don't update
-the screen.  ckcftp.c, 4 Dec 2005.
-
---- Dev.08 ---
-
-Fixed a typo in the non-ANSIC definition of ckfstoa().  ckclib.c, 7 Dec 2005.
-
-Our Ctrl-C trap (the ON_CTRLC macro) wasn't working for kerbang files.
-Rearranged some code to make it work.  ckcmai.c, 8 Dec 2005.
-
-Started converting code to use CK_OFF_T for file sizes and offsets, and
-all [s]printf's to replace "%ld" or whatever with "%s", and the size
-variable with a call to ckfstoa().  Since I haven't actually changed the
-definition of CK_OFF_T from what all the size variables were to begin
-with (i.e. long), it shouldn't do any harm.  So far just ckcfn3.c
-10 Dec 2005.
-
-An updated HP-UX 9.xx makefile target from PeterE to fix a core dump that
-happens on that platform due to insufficient resources.  14 Dec 2005.
-
-Added debug() statements to http_blah() routines to tell whether the
-connection is "chunked".  There seems to be a bad performance problem.
-ckcnet.c, 14 Dec 2005.
-
-PeterE complained about ugly DIRECTORY error message, ?No files match -
-"{blah}".  The braces are used internally in case the user typed more than
-one filespec.  I changed the error message to remove them.  Ditto DELETE.
-ckuus6.c, 15 Dec 2005.
-
-The problem with HTTP downloads is that Kermit always does single-character
-read() or socket_read() calls (or the SSL equivalent); see http_inc().  I
-added buffering code for non-SSL connections only but it's gross because it
-has to swap ttyfd and httpfd before calling nettchk().  I tried making a
-nettchk() clone that accepts a file descriptor as an argument but it didn't
-work because too many other routines that are invoked directly or implicitly
-by nettchk() (such as in_chk()) are still hardwired to use ttyfd.  HTTP GETs
-are now 20 times faster on the local network (the improvement is less
-dramatic over a clogged Internet).  ckcnet.[ch], 15 Dec 2005.
-
---- Dev.09 ---
-
-HTTP file-descriptor swapping is not thread safe.  Doing it right, of
-course, is a big deal, so for now I just don't define HTTP_BUFFERING for
-Windows.  ckcnet.c, 15 Dec 2005.
-
-Noticed that HTTP not included in FreeBSD and OpenBSD builds.  Fixed in
-ckcdeb.h, 22 Dec 2005.
-
-Fleshed out 32/64-bit data type definitions and changed struct zattr
-(file attribute structure) members length and lengthk to have the new
-CK_OFF_T type.  Changed final arguments of debug() and tlog() to be the new
-LONGLONG type.  ckcdeb.h, 22 Dec 2005.
-
-Changed ckfstoa() to return a signed number in string form, rather than an
-unsigned one.  That's because off_t is signed (thank goodness).  Added the
-inverse function, ckatofs() so we can convert file sizes and offsets back
-and forth between binary number and string.  ckclib.c, 22 Dec 2005.
-
-Changed Attribute Packet reader to convert incoming file size attribute
-with ckatofs() rather than atol().  ckcfn3.c, 22 Dec 2005.
-
-Converted debug(), tlog(), ckscreen(), etc, to handle potentially "long long"
-arguments by making their "n" argument CK_OFF_T.  ckuusx.c, ckcdeb.h,
-22 Dec 2005.
-
-Converted the rest of the source files to use CK_OFF_T for all file size
-and offset and byte-count related variables, and converted all references to
-these variables in printfs to go through ckfstoa().  Then I built it on
-Linux/i386 with:
-
-  make linux "KFLAGS=-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
-
-which makes off_t be 64 bits and magically makes all the regular file APIs
-use 64-bit sizes and offsets without changing the API calls in the source
-code.  It's going to be a lot of work to get through all the kinks but I was
-able to send a long file, do directory listings of long files, do
-\fsize(longfile), etc.  When it sends a file, the length is shown correctly
-in the A packet.  If the receiver does not support big numbers, it receives
-the file OK anyway, without showing the size, the thermometer, or percent
-done (and then will get an error when the file keeps coming after the 2G
-mark).  Kermit 95 actually refuses long files for "Size", but only if the
-announced is less than 2^63 bytes.  When today's Linux version receives a
-file, it shows the length correctly in the file-transfer display, as well as
-percent done, thermometer, etc.  Also built this version on true 64-bit
-Linux, and it worked fine.  Many files changed, 22 Dec 2005.
-
-For the record, this API is specified in X/Open's Single UNIX Specification
-Version 2, which is branded as UNIX 98.  It is called Large File Support, or
-LFS, and was developed at the Large File Summit.
-
-It looks like the operative feature-test macro in glibc for transitional
-large file support is __USE_LARGEFILE64.  So if this is defined, we can also
-supply _LARGEFILE_SOURCE and _FILE_OFFSET_BITS=64 automatically for 32-bit
-Linux builds.  But there's a Catch-22, you don't know if this is defined
-until you read the header files, but you have to define _LARGEFILE_SOURCE
-and _FILE_OFFSET_BITS before you read the header files.  Maybe it's good
-enough to grep through <features.h> for __USE_LARGEFILE64.  makefile,
-23 Dec 2005.
-
-Checked this on true 64-bit Linux.  The same symbols are defined in CFLAGS,
-but they do no harm; it builds without complaint and works fine.  24 Dec 2005.
-
-Built it on Red Hat Linux 6.1 from 1999.  This picked up the long file
-support too.  Guess 6.1 isn't old enough to not have it!  Kermit seems to
-work OK on regular files but I don't have enough disk space to create a long
-file, and my bigfile.c program (which creates a long file containing only 1
-byte) doesn't work ("fseeko: invalid argument").  It looks like parts of
-this API were visible in Linux before they were actually working.
-24 Dec 2005.
-
-Converted all fseek() and ftell() to macros that expand to fseek() and ftell()
-or fseeko() and ftello() depending on whether _LARGEFILE_SOURCE is defined.
-ckufio.c, ckuus7.c, ckuusx.c, 24 Dec 2005.
-
-Made a CK_OFF_T version of cmnum().  It would be a very big deal to just
-change cmnum() to return a new type, so another idea is to rename cmnum() to
-something else, cmnumw(), change its result argument to CK_OFF_T, and then
-make a stub cmnum() to call it to get an int, then call cmnumw() explicitly
-any time we need a big number.  ckucmd.c, 24 Dec 2005.
-
-Calling cmnumw() directly requires changes to each routine that uses it.
-The INCREMENT and DECREMENT commands, for example, required changes to
-doincr(), varval(), and incvar(), and all references to them.  ckuusr.[ch],
-ckuus[56].c, 24 Dec 2005.
-
-Calling cmnumw() in chained FDBs required defining a new function code,
-_CMNUW, adding a new member to the OFDB struct for returning wide results,
-and adding a new case to cmfdb().  ckucmd.[ch], 24 Dec 2005.
-
-Changed FSEEK and FCOUNT to use the new chained FDB interface, now we can
-seek and look past 2GB.  ckuus7.c, 24 Dec 2005.
-
-Next come switches, which store their results in a struct stringint.  This
-struct was defined in each module where it was used (ckuus[r367].c, ckcftp.c).
-I moved the definition to ckuusr.h and added a wval member, which can be
-referenced by any switch-parsing code that calls cmnumw().  24 Dec 2005.
-
-Changed SEND /CALIBRATE:n to allow big values of n.  This makes it possible
-to test the protocol aspects of long-file transfer without actually having a
-long file handy.  ckuusr.c, 24 Dec 2005.
-
-SEND /SMALLER-THAN:n, SEND /LARGER-THAN:n, and and SEND /START:n also now
-allow large values of n.  ckuusr.c, 24 Dec 2005.
-
-Changed the algebraic expression evaluator to use wide values.
-ckuus5.c, 24 Dec 2005.
-
-Fixed ckfstoa() to handle the case when n is negative and (0 - n) is also
-negative, which happens for numbers 2^(n-1) or greater, where n is the
-number of bits in the word size we're dealing with, e.g. 64, in which case
-2^63 has its sign bit set so seems to be negative.  In such cases, ckfstoa()
-returns "OVERFLOW" instead of a numeric string.  We'll have to see how this
-plays out but I think it's better to cause a parse error and stop things
-dead than to return a spurious number.  ckclib.c, 24 Dec 2005.
-
-Converted the S-Expression handler to use wide integers. ckuus3.c, 24 Dec 2005.
-
-Took all the LONGLONG stuff out of ckcdeb.h, we don't need it.
-
-All of these changes result in 64-bit arithmetic (more or less) on 32-bit
-Linux, as well as on true 64-bit platforms.
-
-Rebuilt today's code on Solaris 9 in the 32-bit and 64-bit worlds, on Red
-Hat 6.1, Red Hat AS4.2.  I haven't bothered trying a 32/64 hybrid build for
-Solaris, since I can build a pure 64-bit version there.  Quick tests show
-the large-number arithmetic works OK in all cases except, of course, on pure
-32-bit builds (unfortunately I can't find a running Linux system old enough
-to verify this for Linux, but it's true for other 32-bit platforms).
-24 Dec 2005.
-
-Tried building a hybrid version on Solaris 9 after all since the LFS API is
-ostensibly the same as for Linux:
-
- make solaris9 "KFLAGS=-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
-
-It built smoothly and the resulting binary is 2.5MB compared to 3.4MB for
-the 100% 64-bit version.  Looks like a keeper.  For now, added solaris9lfs
-and solaris10lfs entries to the makefile but if these work on PCs we can
-make these the regular entries for Solaris 9 and 10.  27 Dec 2005.
-
-Built on Mac OS X 10.4 with the regular target.  It seems that in that case,
-off_t is 64 bits anyway.  Noticed that a lot of stuff didn't work, like
-exponentiation in S-Expressions.  Tried building it as above, which worked,
-and now CK_OFF_T is 64 bits instead of 32, but (^ 2 30) is still 2.0.  In
-fact 2-to-the-any-power is 2.0.  It seems that the Mac OS X version did not
-have FNFLOAT defined.  It also seems that every test in dosexp() like:
-
-  if (result != fpresult) fpflag++;
-
-should have been protected by #ifdef FNFLOAT..#endif /* FNFLOAT */ -- a
-double-ended break, as they say in the nuclear power industry.  ckuus3.c,
-27 Dec 2005.
-
-Added GREP /EXCEPT:pattern.  ckuus[26].c, 27 Dec 2005.
-
-Fixed a problem with uninitialized pv[].wval (switch-parsing parameter-value)
-members that showed up on certain platforms or with certain compilers.  Now
-the Mac OS X 10.4 version works.  ckuus[r367].c, ckcftp.c, 28 Dec 2005.
-
-Built on Unixware 7.1.1, a pure 32-bit build, seems fine.  Rebuilt on Red
-Hat AS 4.2 just to make sure I didn't break anything, it's OK.  No testing
-on HP-UX, etc, because HP testdrive file sytem is full, can't upload anything.
-29 Dec 2005.
-
-Commented out the SHOW FEATURES section that displays constants like
-INT_MAX, CHAR_MAX, etc, because printing each value in the appropriate
-format is too tricky, and we don't need them anyway.  ckuus5.c, 29 Dec 2005.
-
-Updated ckvfio.c to use CK_OFF_T for the relevant variables.  Built and
-tested on VMS/Alpha 7.2: file transfer in remote mode; making a Telnet
-connection and then local-mode file transfer; S-Expressions, all OK.  Also
-built a no-net version OK.  29 Dec 2005.
-
-Built and tested on Red Hat AS4 AMD X86_64, used it to upload new sources to
-FreeBSD 4.11.  Built on FreeBSD 4.11/i386.  Here's another one where off_t
-is 64 bits, even though long is 32 bits.  But it seems to work ok, not sure
-why, when CK_OFF_T is 32 bits.  There is no _LARGEFILE_SOURCE stuff in the
-header files.  29 Dec 2005.
-
-Built on Mac OS X 10.3.9 using the new macosx10.4 target to pick up LFS.
-Works fine.
-
-Built on Red Hat Linux 4WS on IA64 (64-bit).  Now this one is odd, stat()
-fails on big files.  It happens also if I use the "linuxnolfs" target, which
-does not define _USE_LARGEFILE or _FILE_OFFSET_BITS=64.  DIRECTORY BIGFILE
-shows the size as -1, but if "log debug", it says "no files match", i.e.
-different behavior, observer effect.  I hate when that happens.
-
-Let's see if that's an anomoly...  Built on Tru64 Unix 4.0F (64-bit Alpha).
-It sees long files just fine.  Rebuilt and checked on x86_64 again... fine.
-OK, let's not worry about IA64 yet.
-
-Another small fix to the HP-UX 9.0 target from PeterE.  makefile, 29 Dec 2005.
-
----Dev.10---
-
-Code adjustments from Jeff, mainly to the SSL and TLS Raw mode code from
-several weeks ago, plus changing some data types in the security code to
-CK_OFF_T, plus a different data type for CK_OFF_T for K95 because Windows
-size_T isn't signed.  This presumably will allow large-number arithmetic but
-it will not give large file access because that will require replacing all C
-library file i/o calls (esp. in ckofio.c) with native Windows APIs.  Build
-on Solaris 9 with and without SSL and on Linux RH AS4.2 with and without
-SSL.  ck_crp.c, ck_ssl.c, ck_ssl.h, ckcdeb.h, ckcftp.c, ckcmai.c, ckcnet.c,
-ckcnet.h, ckctel.c, ckuat2.h, ckuus4.c, ckuus7.c, ckuusr.c, 30 Dec 2005.
-
-It was reported that WRITE SESSION always returned a failure status, even
-when it succeeded.  The problem was that Unix versions of zsout() and
-zsoutl(), for the session log only, were using write() and returning
-write()'s return code, which is different from what zsout() and zsoutl() are
-documented to return.  Also plugged a couple potential holes in zsoutx()
-that I noticed while I was in the neighborhood.  ckufio.c, 30 Dec 2005.
-
-Added FSEEK /FIND:pattern.  This form of FSEEK accepts all the other
-switches and arguments and performs the desired seek.  Then, if the seek was
-successful, it starts from that point and reads through the file, line by
-line, searching for the first line that contains the given string or matches
-the given (unanchored) pattern and, if found, sets the file pointer to the
-beginning of that line.  Useful, e.g., for very long timestamped logs, where
-you want to start processing at a certain date or time; searching for a
-particular string is much faster than doing date comparisons on each line.
-ckuus[27].c, 30 Dec 2005.
-
-It was annoying me that FILE STATUS (FSTATUS) required a channel number to
-be given even if only one file was open, so I supplied the correct default
-in that case.  ckuus7.c, 30 Dec 2005.
-
-INPUT /NOWRAP, added recently, is used for efficiently copying the INPUT
-stream intact, but it's not good for matching because if the INPUT target is
-broken between the end of the previous buffer and the beginning of the next
-one, the context is lost and the match does not occur.  I thought of several
-ways around this, but they all involve saving a huge amount of context --
-old input buffers, the arrays of target strings and corresponding match
-positions, etc.  The alternative is fairly simple but it's not transparent
-to the user.  Here's what I did in a POP script:
-
-    .eom := "\13\10.\13\10"
-    set flag off                           # FLAG ON = success
-    while ( open connection && not flag ) {
-        .oldinput := \fright(\v(input),8)  # Save tail of previous INPUT buffer
-        input /clear /nowrap 4 \m(eom)     # Get new INPUT buffer
-        if success {                       # INPUT matched - good
-            .s := {\freplace(\v(input),\m(eom),\13\10)}
-            set flag on
-        } else {                           # No match
-            .s := \v(input)                # Check if target crossed the border
-            .oldinput := \m(oldinput)\fsubstr(\v(input),1,8)
-            if \findex(\m(eom),\m(oldinput)) set flag on
-        }
-        ...
-    }
-
-I think this will be easier to explain than any dangerous and grotesque
-magic I might put into doinput() itself.  For now, added a few words about
-this to HELP INPUT.  ckuus2.c, 30 Dec 2005.
-
-Back to the pattern matcher.  Noticed that "IF MATCH index.html [a-hj-z]*"
-succeeded when it should have failed.  In ckmatch(), the clist section
-needed one more clause: it can't float the pattern if an asterisk does not
-occur in the pattern before the clist.  This change fixes the problem
-without breaking any other cases that weren't already broken, most of which
-involve slists, i.e. {string,string,string,...}.  ckclib.c, 30 Dec 2005.
-
-Tried FSEEK /FIND: on a largish file (over 100,000 lines), using it to seek
-to a line near the end.  It took 0.756 seconds, compared with Unix grep,
-which did the same thing in 0.151 sec.  That's because C-Kermit is using
-ckmatch().  But if the search target is not a pattern, it should be a bit
-faster to use ckindex().  Yup, 0.554 sec, a 36% improvement.  Can't expect
-to compete with grep, though; it's highly tuned for its single purpose.
-ckclib.[ch], ckuus7.c, 1 Jan 2006.
-
-Updated visible copyright dates to 2006: ckcmai.c, ckuus2.c, ckuus5.c,
-1 Jan 2006.
-
-Noticed that NetBSD 2.0.3 has 64-bit off_t, and that _LARGEFILE_SOURCE is
-mentioned in <stdio.h>.  Tried building Kermit with _LARGEFILE_SOURCE added
-to CFLAGS, it's good.  Added it to the netbsd target.  makefile, 1 Jan 2006.
-
-Fixed typo, #ifdef CK_NOLONGLONG in ckuus5.c should have been #ifndef
-CK_LONGLONG (which, it turns out, we don't use anyway).  2 Jan 2005.
-
-Observed that FreeBSD 4.x has a 64-bit off_t, but does not use the
-_LARGEFILE_SOURCE convention.  Reasoning that all versions of FreeBSD have
-off_t (I was able to check back to FreeBSD 3.3), I simply #define CK_OFF_T
-to be off_t in ckcdeb.h within #ifdef __FreeBSD__ .. #endif.  Another one
-down.  This can be done for any platform that is guaranteed to have off_t.
-Turns out FreeBSD 3.3 has 64-bit off_t too.  2 Jan 2005.
-
-OpenBSD, same as FreeBSD.  Also, added OS-version-getting thing to makefile
-target for the program herald, as in the other BSDs.  Built on OpenBSD 2.5
-from 1998, it has 64-bit off_t too.  ckcdeb.h, makefile, 2 Jan 2005.
-
-Dumping the command stack every time there's an error is really too much.
-I added SET COMMAND ERROR-DISPLAY {0,1,2,3} to set the verbosity level of
-error messages.  Only level 3 dumps the stack.  ckuus[235].c, 2 Jan 2005.
-
-Built on HP-UX 11.11 with _LARGEFILE_SOURCE and _FILE_OFFSET_BITS=64.  The
-result works fine as far as I can tell.  It sees big files, it can open
-them, seek to positions past the 2^31 boundary.  It can send large files.
-It can do large-number arithmetic (^ 2 62).  The only problem is that during
-compilation, every single modules warns:
-
-  cc: "/usr/include/sys/socket.h", line 504: warning 562: Redeclaration of
-  "sendfile" with a different storage class specifier: "sendfile" will have
-  internal linkage.
-  cc: "/usr/include/sys/socket.h", line 505: warning 562: Redeclaration of
-  "sendpath" with a different storage class specifier: "sendpath" will have
-  internal linkage.
-
-These warnings should be perfectly harmless since they are not coming from
-C-Kermit code, nor does C-Kermit use either one of those functions.  These
-warnings don't come out in HP-UX 11i v2, but on that one we get tons and tons
-of picky compiler warnings (variables set but not used, defined but not
-referenced, etc).  A couple, however, turned out to be valid; one case of
-"expression has no effect", and two of "string format incompatible with
-data type" (I missed a couple file-size printfs).
-
-There were also numerous warnings about signedness mismatch or sign
-conversion of constants like IAC (0xff).  Does the HP-UX Optimizing Compiler
-have a compiler flag to make all chars unsigned?  Yes, +uc, but the man page
-says "Be careful when using this option.  Your application may have problems
-interfacing with HP-UX system libraries and other libraries that do not use
-this option".  Sigh, better not use it.
-
-After reviewing "HP-UX Large Files White Paper Version 1.4" and HP's
-"Writing Portable Code" documents, I added -D_LARGEFILE_SOURCE
--D_FILE_OFFSET_BITS=64 to the hpux1000 target, which is the basis for all
-HP-UX 10.00 and later builds.  Large files are available in HP-UX 10.20 and
-later.  10.00 and 10.10 were not real releases, and anyway these flags
-should be harmless there unless the large-file implementation was only
-partly done.  Built OK on both PA-RISC and IA64, optimized and plain.
-makefile, 4 Jan 2006.
-
-Built on FreeBSD 6.0 on IA64.  All OK except I got a warning about the
-argument passed to time() in logwtmp() in ckufio.c.  This section had
-already been partially fixed; thus I put the improved version into
-#ifdef CK_64BIT, which is our newly available symbol that should be
-automatically defined for any true 64-bit build.  ckufio.c, 4 Jan 2006.
-
-Finally got around to testing Jeff's changes to SSL/TLS RAW mode from
-December 30th against our POP server.  It didn't work, couldn't log in.
-Tried backing off the ckctel.c changes first; that allowed login and
-communication, but it did not suppress activation of Telnet protocol
-whenever a 0xff byte arrived.  Backed off the rest of the changes and now
-all is OK again.  ckctel.c, ckcnet.c, ckuus7.c, 9 Jan 2006.
-
-Built on NetBSD 1.4.1 (1999), found that it did not like the large file
-assumption -- fseeko() and ftello() do not exist; added a clause to the
-netbsd target to check for fseeko and not define _LARGEFILE_SOURCE if not
-found.  Oddly enough, off_t is 64 bits anyway, but it doesn't look like the
-APIs are half-done.  For example, stat() uses off_t (64 bits) for the file
-length, but fseek() uses long (32 bits) and there is no 64-bit analog.
-Anyway the new netbsd target works on both 1.4.1 and 1.5.2 (no large files)
-and on 2.0.3 (large files).  makefile, 9 Jan 2006.
-
-Built on QNX-32 4.25, which has no large file support.  Got a few strange
-compiler (WatCom) warnings, but it built and runs OK.  Noticed that file
-transfers into QNX over a Telnet connection can't use streaming, but that's
-nothing new to this version; same thing happens with C-Kermit 7.0.  9 Jan 2006.
-
-Built on IRIX 6.5.  I didn't bother with large files there because it does
-not support the _LARGEFILE_SOURCE interface; you have to change all the APIs
-at the source level from blah() to blah64().  Seems to work fine as a 32-bit
-app even though its off_t is 64 bits.  Tried a pure 64-bit IRIX 6.5 build
-but it dies in ckcnet.c when it hits SOCKOPT_T and GSOCKNAME_T with "The
-identifier 'socklen_t' is undefined".
-
-Looks like I no longer have access to SCO OSR5.
-
-Made a pure 32-bit build on SCO UnixWare 7.1.4, all OK.  Found that this
-version also supports LFS, added it to the uw7 target.  makefile, 9 Jan 2006.
-
---- Dev.11 ---
-
-Evidently the HP-UX bundled (non-ANSI non-optimizing) compiler doesn't like
-long integers in switch expressions.  Changed three examples of these in the
-S-expression code.  ckuus3.c, 10 Jan 2006.
-
-A section of tstats() where GFTIMER isn't defined (e.g. on Motorola
-sv68r3v6) was garbled.  Fixed in ckcfn2.c, 10 Jan 2006.
-
-A fix for setting 921600 bps on Linux from Paul Fulghum, Microgate Systems Ltd.
-ttgspd(): ckutio.c, 11 Jan 2006.
-
-Noticed that when I changed the compact substring notation code back on
-August 9th, I broke the ability to use arithmetic expressions within the
-brackets, which explains some rather odd behavior I saw with some of my
-scripts.  Looking more deeply into this, I also see that all the parsers I
-have been using up to now for this, as well as for array bounds pairs, have
-been inadequate because they never allowed for nested constructions, such as
-a member of a bounds pair that itself was an array element, possibly with
-another array element as a subscript.  I wrote a new routine for this,
-called boundspair(), which is like arraybounds() except it accepts an extra
-argument, an array of characters that can serve as bounds-pair delimiters,
-and it returns the pair separator that was encountered in another new
-argument.  For the alternative substring notation for [startpos-endpos] I
-had to change the delimiter from '-' to '_' because '-' can be used in
-arithmetic but '_' is not a recognized operator.  This is so I can parse,
-e.g. [a:b] or [a_b] in the same context, and then find out which form was
-used, e.g. \s(line[9:12]) or \s(line[9_12]); the first string is 4 bytes
-long, the second is 12.  Everything seems to be OK now.  \s(line[10]) gives
-everything starting at 10, but \s(line[10:0]) gives the null string.  Bad
-syntax in the bounds pairs results in a null string; missing pieces of the
-bounds pair result in defaults that should be compatible with previous
-behavior.  ckuus[45].c, ckuusr.h, 13 Jan 2005.
-
-Changed arraybounds() to call boundsdpair().  This was a rather drastic
-change, not strictly necessary, but I think I got all the kinks out.
-ckuus5.c, 13 Jan 2005.
-
-Changes from PeterE to the makefile for HP-UX 6 and 7, to accommodate bigger
-symbol tables, etc.  19 Jan 2005.
-
-Determined that SCO OSR5.0.6 (and earlier) do(es) not support large files.
-Don't know about 5.0.7.  30 Jan 2005.
-
-Created a new build target for SCO OSR6.0.0.  Gets the exact 6.x.x version
-dynamically.  Supports large files and big-number arithmetic via CK_OFF_T.
-The sockopt() family of functions changed the data types of some of their
-arguments since OSR5.  It was already possible to define SOCKOPT_T and
-GSOCKNAME_T from the command line but I had to add code to also allow this
-for GPEERNAME_T too.  ckcnet.c, makefile, 30 Jan 2005.
-
-Apparently, ever since C-Kermit 7.0 was released, it has never been possible
-to use a variable for the as-name in a RECEIVE command in Kermit 95.  This
-is because evaluation of the as-name field was deferred until after we could
-check whether it might be a directory name (which, in Windows, could start
-with a backslash).   This little bit of magic was not a good idea, magic
-hardly ever is.  I changed the code to evaluate both as-name fields in the
-normal way.  If they want to receive to a directory called "\%1", they'll
-just have to spell it differently.  The workaround is to turn the whole
-command into a macro and evaluate it before executing it, e.g.:
-
-  assign xx receive /as-name:\%1
-  do xx
-
-ckuus6.c, 1 Feb 2006.
-
-Built OK on FreeBSD 6.1 on AMD64.  Adjusted some copyrights and date stamps.
-ckcmai.c, makefile, 8 Feb 2006.
-
---- Dev.12 ---
-
-Fixed a signed/unsigned char warning in the new boundspair() calling code
-in the compact substring notation handler.  ckuus4.c, 9 Feb 2006.
-
-Removed a spurious extra linux+openssl label from the makefile, added
-solaris10g_64 synonym.  9 Feb 2006.
-
-Satisfied myself that LFS is OK on Solaris 10 i386, and I'm going to assume
-it's also OK on Solaris 9.  Made LFS standard for all Solaris 9 and 10
-builds (including the secure ones) except the explicitly 64-bit ones, and
-made the provisional solarisXXlfs targets into synonyms.  makefile, 9 Feb 2006.
-
---- Dev.13 ---
-
-Further attempts at SSL/TLS message suppression when QUIET is ON.
-ck_ssl.c, 16 Feb 2006.
-
-From J.Scott Kasten: (quote...) I just uploaded a patch to /kermit/incoming.
-The file name is "jsk-patch-for-cku211.diff".  I have also included the
-patch as ASCII text in this email below.  This patch may be applied to the
-cku211.tar.gz source code via:
-  cd cku211, patch -p1 <../jsk-patch-for-cku211.diff
-The patch adds 4 new build targets:
-  netbsdwoc - a stripped no curses target for iksd used.
-  netbsdse  - security enhanced target with srp, ssl, and zlib.
-  irix65gcc - build on SGI Irix 6.5 platform using gcc.
-  irix65se  - security enhanced target with srp, ssl, and zlib.
-The patch fixes one build target:
-  irix64gcc - The "-s" option is not supported by gcc under Irix.
-I thank all of you in the Kermit Project for such a fine utility.  I
-recently had to get a 16 MB file overseas across a spotty communications
-link to repair a computer remotely.  Kermit was the only thing that could do
-the job, so I wanted to contribute these patches back to the mainstream to
-say thanks.  This digitally signed email is a binding contract that
-officially assigns the rights to the source code patch (shown below) that I
-developed to the Kermit Project at Columbia University. (...end quote)
-ck_ssl.c, makefile, 23 Feb 2006.
-
-Changed the new NetBSD target names to be consistent with the conventions
-used in most other targets:
-
-  netbsdwoc -> netbsdnc
-  netbsdse  -> netbsd+ssl+srp+zlib
-  irix65se  -> irix65+ssl+srp+zlib
-
-and removed old, now superfluous, NetBSD targets (old-netbsd, netbst15,
-netbst16), leaving synonym labels in their place.  Also updated (crudely)
-the Linux target variations (curses instead of nocurses, no curses at all)
-to be (appropriately modified) copies of the current linux target.  It would
-be nicer to combine them, but this gets the job done.  makefile, 23 Feb 2006.
-
---- Dev.14 ---
-
-Fixed the HELP command when used with tokens like @, ^, #, and ;.  The first
-two had been omitted from the table.  The second two required a new path
-into the guts of the parser, since comments are normally stripped at a very
-low level.  ckuus[r2].c, ckucmd.c, 24 Feb 2006.
-
-Built on AIX 5.1 ("make aix51") without incident.  Then I tried:
-
- make aix51 "KFLAGS=-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
-
-This had no effect.  I found the relevant document ath the IBM website.  It
-says to use -D_LARGE_FILES instead.  I added this to the AIX 4.2 target
-since (a) IBM says large files are supported by AIX 4.2 and later, and (b)
-all Kermit AIX targets past 4.2 use the 4.2 one.  Plus a clause to make
-sure CK_OFF_T is defined appropriately.  ckcdeb.h, makefile, 6 Mar 2006.
-
-Added a 32-bit aix51+openssl target.  Builds OK, works fine (tested against
-our SSL POP server).  Tried I tried adding -D_LARGE_FILES.  It seems to work
-fine, so we'll keep it.  Cleaned up the other aix5blah entries a bit also.
-makefile, 6 Mar 2006.
-
-Fixes from J. Scott Kasten to the IRIX 6.4 and 6.5 makefile targets.  They
-were badly wrong.  makefile, 6 Mar 2006.
-
-The reason Kermit was looping on directories in IRIX was a classic
-"double-ended break".  The makefile targets failed to define DIRENT so
-Kermit was open/read on directories rather than opendir()/readdir().  But
-then it was also failing to account for the fact that read() would return -1
-on error.  The makefile fix adds -DDIRENT, and the read() case in traverse()
-now properly terminates its loop on error.  ckufio.c, 6 Mar 2006.
-
---- Dev.14 ---
-
-In response to a complaint that C-Kermit would not build on HP-UX 11 with
-OpenSSL, I tried it myself on both 11.11/PA-RISC and 11i v2/Itanium.  It built
-OK on both but I had to add a new target (hpux1000o+openssl-nozlib) for no
-Zlib since these boxes did not have it installed.  makefile, 9 Mar 2006.
-
-Added OpenSSL version number display to SHOW FEATURES.  ckuus5.c, 9 Mar 2006.
-
-Gavin Graham noticed that FTP [M]GET /DELETE /MOVE-TO: was rejected with
-"?Sorry, /DELETE conflicts with /MOVE or /RENAME".  This check belongs in the
-PUT code but not in the GET code.  Commented it out and tested the result.
-The combination is now accepted but then Kermit refuses the incoming file as
-if it had been given a /SMALLER-THAN: or /LARGER-THAN: switch, which it didn't
-happen.  Turns out there was one more place where I wasn't initializing the
-new "wide int" member of the switch-parsing pv[] struct.  Once this was fixed,
-the /MOVE-TO part still didn't work.  Turned out the /DELETE case was part of
-a long if-else-if-else- chain, which effectively made /DELETE and /MOVE-TO: or
-/RENAME-TO: mutually exclusive.  Fixed this, now it works fine.  ckcftp.c,
-13 Mar 2006.
-
-Got access to AIX 5.3, built there, all OK, including large files. 13 Mar 2006.
-
---- Dev.16 ---
-
-Patches from Mark Sapiro to suppress getsockopt() and getsockname() warnings
-in Mac OS X.  ckcnet.[ch], 18 Mar 2006.
-
-In response to a complaint from Clarence Dold, tried "make redhat9" (which
-is the rather dated target that tried to include all forms of security) on
-RH Linux AS4.3, it failed miserably.  I made a new makefile target, removing
-Kerberos IV and got a lot farther.  But then in ckcftp.c, the following
-struct definition:
-
-  struct {
-      CONST gss_OID_desc * CONST * mech_type;
-      char *service_name;
-  } gss_trials[] = {
-      { &ck_gss_mech_krb5, "ftp" },
-      { &ck_gss_mech_krb5, "host" },
-  };
-
-refers to a variable, ck_gss_mech_krb5, that is not defined anywhere.  Up
-above, however, is a static definition for gss_mech_krb5, so I changed the
-struct definition to match.  Next, in ckuath.c, the compiler could not find
-the com_err.h file.  Turns out in Linux this is in a subdirectory, et, so we
-have to add a -I clause to the makefile target for this.  Made a target for
-Linux+SSL only.  Made a target for Linux+Krb5 only; this required moving an
-#ifdef in ckuus7.c to prevent an unguarded reference to SSLEAY_VERSION.
-New targets: linux+krb5+ssl, linux+krb5, linux+krb5.  ckcftp.c, ckuus7.c,
-makefile, 27 Mar 2006.  
-
-New targets of HP-UX 10/11 with OpenSSL from PeterE.  makefile, 27 Mar 2006.
-
-Added large file/integer support to SHOW FEATURES.  ckuus5.c, 27 Mar 2006.
-
-Built OK on Solaris 9 and 10 with gcc (someone was complaining that this
-didn't work, but that was 8.0.211).
-
-Started build on a Sun 3/80 mc68030 with NetBSD 2.0 and gcc 3.3.3.  But it
-died with an assembler error in ckcfn2.c (compiler bug).  27 Mar 2006.
-
---- Dev.17 ---
-
-NebBSD 2.0 build completed by turning off optimization on ckcfn2.c
-("KFLAGS=-O0").  Result supports 64-bit ints and, presumably, large files.
-uname -p = "m68k", -m = "sun3". 29 Mar 2006.
-
-Corrected an omission in applying PeterE's updates to the HP-UX targets.
-makefile, 28 Mar 2006.
-
-solaris2xg+krb5+krb4+openssl+shadow:
-
-Tried resurrecting the solaris2xg+krb5+krb4+openssl+shadow target.  It asks
-to link with libdes but there is no libdes.  Removed -ldes from the target,
-now at least it builds and runs wart.  The compilation blows up in ckcftp.c
-for missing header files:
-
-  ckcftp.c:462: kerberosIV/krb.h: No such file or directory
-  ckcftp.c:500: gssapi/gssapi_generic.h: No such file or directory
-  ckcftp.c:501: gssapi/gssapi_krb5.h: No such file or directory
-
-Got a bit farther by adding appropriate -I's and -L's to KFLAGS but it still
-dies compiling (or linking?) ckcftp.c, but it doesn't say exactly why.  OK,
-deferred.
-
-Added SET SEXPRESSION TRUNCATE-ALL-RESULTS { ON, OFF }.  This can be used
-for force integer arithmetic in any kind of calculation that requires it,
-such as date calculations.  This is a global setting, not on any kind of
-stack.  Also, updated SHOW SEXP and added HELP SET SEXP which wasn't there
-before.  ckuus[23].c, 30 Mar 2006.
-
-To make the RENAME command a bit more useful, need to add some switches.
-But it shares a switch table, qvswtab[], with some other commands.  Broke
-this off into its own switch table.  ckuus6.c, 17 Apr 2006.
-
-Added RENAME switch values that can be used in the same table with the DELETE
-switch values, which are shared by many commands.  ckuusr.h, 17 Apr 2006.
-
-Discovered that the RENAME command could be entered without any arguments
-and it would still succeed.  Fixed in dorenam(): ckuus6.c, 17 Apr 2006.
-
-Added parsing for RENAME /UPPER:option (to uppercase the file name(s)),
-/LOWER:option (to lowercase), and /REPLACE:{{s1}{s2}} (to do string
-replacement on the filename(s)), but not the semantics.  When any of these
-switches is given, the target ("to") name is not parsed; they act on the
-source name.  The /LOWER: switch takes keyword args to specify whether it
-should act only only files that have all UPPER case latters, or on ALL files
-(i.e., including files with mixed-case names); similarly for the /UPPER:
-switch.  There is some creative parsing allowing these to be given with or
-without a colon and keyword argument, which works fine except if you include
-the colon but no argument, execute the command (which works fine), and then
-recall the command.  I haven't yet decided about the interaction among these
-switches.  Clearly if /UPPER is given after /LOWER, it overrides.  But if
-/UPPER (or /LOWER) is given with /REPLACE, what should happen?  ckuus6.c,
-17 Apr 2006.
-
-Filled in actions for RENAME /UPPER: and /LOWER: for the single file case,
-and tested all combinations of switch values and filename configurations.
-Once that was OK, moved the code out into a separate routine, renameone(),
-and then called it from both the single-file case and the multifile case.
-ckuus6.c, 19 Apr 2006.
-
-Added RENAME /SIMULATE.  Filled in the code for string replacement, needs
-testing.  ckuus6.c, 20 Apr 2006.
-
-Changed /REPLACE options to allow a negative number to specify an occurrence
-from the right, so -1 means the last occurrence, -2 means the next-to-last,
-etc.  ckuus6.c, 24 Apr 2006.
-
-Added RENAME /COLLISION:{OVERWRITE,PROCEED,FAIL}.  This is implemented but
-not tested.  ckuus6.c, 24 Apr 2006.
-
-Worked on RENAME /COLLISION:FAIL.  I decided it was less than useful to ...
-
-Added SET RENAME { COLLISION, LIST } to let user change default collision
-and listing actions.  ckuusr.[ch], ckuus[36].c, 25 Apr 2006.
-
-Experimented with parsing for /CONVERT:cset1:cset2.  The problem here is
-that there is no straightforward way for a switch to have multiple
-arguments.  Or is there...?  If I parse cset1 with cmswi() rather than
-cmkey(), it almost works; the only problem is that the character-set
-keywords don't have CM_ARG set, so they don't know to stop on, and ignore, a
-colon.  If I make a copy of the table and set CM_ARG in the flags field for
-each keyword, it works fine: if I Tab in the first name, it fills itself
-out, supplies a colon, and waits for the second name.  So in the code, the
-first time that RENAME /CONVERT is invoked, I put code to copy fcstab[] and
-set CM_ARG in each flags field.  Works fine, and now we know how to make a
-switch that takes multiple arguments.  ckuus6.c, 24 Apr 2006.
-
-I thought I had a function to convert the character set of a string but I
-don't, so actually implementing /CONVERT: will be difficult.
-
-Actually the parsing wasn't that easy either.  It works OK interactively,
-but not in a TAKE file.  To make a long story short, I had to change
-gtword() and cmkey2() to not require "/" at the beginning of a switch, and
-then to parse arguments-that-are-followed-by-other-arguments as if they were
-switches, so that they can end with colon rather than space.  This might
-seem dangerous, but switches always have "/" at the beginning, so the check
-is superfluous.  ckucmd.c, 26 Apr 2006.
-
-Back to /CONVERT...  Once I was able to get the code to call cvtstring() I
-was able to debug it (at first it was skipping every second character).  And
-now we have a general-purpose string-translating function we can call from
-anywhere.  Requires that C-Kermit be built with Unicode support.
-ckuus6.c, 26 Apr 2006.
-
-Added SHOW RENAME.  ckuusr.h, ckuus[r5].c, 26 Apr 2006.
-
-Conditionalized some Unix/Windows assumptions in renameone() so the code
-could work in VMS.  ckuus6.c, 2 May 2006.
-
-Added RENAME /FIXSPACES to change all spaces in the filename(s) to
-underscore or any other character or string that is given.  This is just a
-special case of RENAME /REPLACE:{{ }{x}} with easier syntax.
-ckuusr.h, ckuus6.c, 2 May 2006.
-
-Added an "all-but" control to the /REPLACE options:
-/REPLACE:{{.}{_}{~1}} means replace all but the first (this one works);
-/REPLACE:{{.}{_}{~-1}} means replace all but the last (this one not yet).
-ckuus6.c, 2 May 2006.
-
-Filled in the second one ("all but" the given occurrence).  The algorithm is
-simply to reverse the three strings and then use the same code as we use in
-the left-right-case, and then unreverse the result.  At first I used
-yystring() for this but yikes, what a bad design!  So I made a better
-string-reversal routine, gnirts(), for this (luckily yystring() is only used
-in one place, for which its design is appropriate). ckuus6.c, 3-4 May 2006.
-
-Added code to handle the case where the file being renamed includes a path
-specification.  In this case we separate the path, apply the renaming
-functions to the filename only, and then at the end rejoin the original
-filename with the path, and join the new name with same path or, if a
-destination directory was given, with that.  ckuus6.c, 4 May 2006.
-
-Added HELP SET RENAME and updated HELP RENAME.  ckuus2.c, 4 May 2006.
-
-"Tom Violin" (Tom Hansen) noticed that the first time you FOPEN a file,
-Kermit's memory consumption goes way up.  In fact there's a warning to that
-effect in the code, where, upon first open, a potentially big array of
-potentially big structs is allocated.  I rewrote the code to allocate each
-array member (struct ckz_file) as needed, i.e. when a file is opened, and to
-free it when the file is closed (or the open fails).  This was actually
-quite a lot of work, which is why I didn't do it the first time around:
-every single "."  had to be changed to "->".  Every check for a valid
-channel first had to check if the channel's struct was allocated and every
-other reference to z_file[i]->anything had to be prechecked that z_file[i]
-was not a NULL pointer.  Also I made some improvements to FILE STATUS, and I
-fixed FILE CLOSE to default the channel number if only one channel was open,
-as I did for FILE STATUS a while back.  ckuus7.c, Cinco de mayo 2006.
-
-Ran my old BUILDS script that builds C-Kermit with about 100 different
-combinations of feature-selection switches.  Fixed a few small glitches so
-now they all build OK (except can't do NOANSI builds any more on recent
-Linuxes because of varargs()).  ckuus3.c, ckuus5.c, ckuus6.c, ckuus7.c,
-ckucmd.c, ckcfns.c, 6 May 2006.
-
-Fixed RENAME /LOWER and /UPPER, when given with no colon or agrument, to
-default to ALL.  ckuus6.c, 13 May 2006.
-
-Built on VMS 7.2-1, tested new RENAME command there; seems to be OK.
-13 May 2006.
-
---- Dev.18 ---
-
-I wanted to test large files against RESEND but I don't have access to any
-system that can run C-Kermit and that also has enough space for a large
-file.  I created a "fake" large file on Linux (3G hole plus 1 byte), and
-sent it over a localhost connection, and interrupted it repeatedly and then
-initiated a RESEND at the sender.  In each case, it picked up where it left
-off.  But before the 2G boundary was crossed the disk filled up.
-Inconclusive.  14 May 2006.
-
-PeterE got a warning in the new FILE OPEN code when building in HP-UX 9.
-I added a cast, built on HP-UX 11, no more complaint.  However there
-are warnings about internal vs external bindings of sendpath and sendfile
-in every module.  Too bad, these are not Kermit tokens, it's a conflict in
-HP's header files.  Marc Sapiro doesn't see them; probably it's something
-on the HP testdrive site.  ckuus7.c, 17 May 2006.
-
-Fixed the tru64-51b+openssl target -- the terminating doublequote of KFLAGS
-was missing -- and also the osf target, which failed to import the LIBS
-definition from whatever other target invoked it.  Now the SSL build goes OK
-on Tru64 5.1B.  Replaced x.tar.z in the download areas without declaring a
-new Dev number.  The new one has a makefile with today's date.  Software
-engineering at its best!  makefile, 18 May 2006.
-
-Scott Kasten noted that the estimated-time-remaining calculation would go
-bonkers on LFS systems when RESENDing a large file.  It looks like the
-shocps() and shoetl() functions escaped the CK_OFF_T conversion.  I made
-what seemed to be the right adjustments, and then was lucky enough to find a
-computer that had enough free disk space for me to send a large file,
-interrupt it several times, resend it, all seems to be OK.  28 May 2006.
-Later Scott verified these changes independently for Linux, but the problems
-in IRIX remain.
-
-Patches from Scott Kasten for large files on IRIX 6.5: ckcdeb.h, makefile,
-12 Jun 2006.
-
---- Dev.19 ---
-
-Added a new function for dealing with JPGs and GIFs:
-
-\fpicture(filename,&a)
-  returns 0 if file not recognized or can't be opened;
-  returns 1 if landscape, 2 if portrait or square.
-  If array given, element 1 is width, element 2 is height.
-
-ckuusr.h, ckuus4.c, 19 Jun 2006.
-
-Scott Kasten reports that the FTP client can transfer large files OK, at
-least in Linux, but has trouble with recovery:
-
- . Kermit takes a very long time to start the transfer, sometimes over
-   30 minutes.  Suspect the ftp server is counting the bytes in a long file?
-   Or maybe it's a text-mode transfer and it's counting the lines?  Probably
-   in response to Kermit's SIZE command.
-
- . The size shown in the FT display is wrong by a random amount.  And of
-   course so are the progress bar, percent done, and time remaining.
-
- . The file, however, is transferred correctly.  REGET works correctly too.
-
-I tried setting up a test scenario locally but our Solaris FTP server does
-not support large files:
-
-  FTP SENT [SIZE BIGFILE]
-  FTP RCVD [550 BIGFILE: not a plain file.]
-  FTP SENT [PASV]
-  FTP RCVD [227 Entering Passive Mode (128,59,48,24,246,37)]
-  FTP SENT [RETR BIGFILE]
-  FTP RCVD [550 BIGFILE: Value too large for defined data type.]
-
-Created the same 3GB on a Tru64 Unix system that allows FTP access.  Made
-the connection from C-Kermit on Solaris (32-bit with LFS):
-
-  16:46:12.908 FTP SENT [SIZE BIGFILE]
-  16:46:12.947 FTP RCVD [213 3000000001]
-
-Note that it takes less than half a second to get the reply.  Now I start
-the download and then interrupt it at about 2%:
-
-  16:46:12.979 FTP SENT [TYPE I]
-  16:46:13.174 FTP RCVD [200 Type set to I.]
-  16:46:13.226 FTP SENT [PASV]
-  16:46:13.262 FTP RCVD [227 Entering Passive Mode (15,170,178,171,11,37)]
-  16:46:13.299 FTP SENT [RETR BIGFILE]
-  16:46:13.337 FTP RCVD [150 Opening BINARY mode data connection for BIGFILE..]
-  16:47:24.895 FTP RCVD [426 Transfer aborted. Data connection closed.]
-  16:47:24.934 FTP RCVD [226 Abort successful]
-  16:47:24.991 FTP SENT [MDTM BIGFILE]
-  16:47:25.028 FTP RCVD [213 20060706204458]
-
-Now I do a REGET:
-
-  16:51:55.321 FTP SENT [PASV]
-  16:51:55.357 FTP RCVD [227 Entering Passive Mode (15,170,178,171,11,43)]
-  16:51:55.394 FTP SENT [REST 122736640]
-  16:51:55.430 FTP RCVD [350 Restarting at 122736640. Send STORE or RETRIEVE..]
-  16:51:55.431 FTP SENT [RETR BIGFILE]
-  16:51:55.469 FTP RCVD [150 Opening BINARY mode data connection for BIGFILE..]
-
-This worked perfectly, as far as I can tell; the FT display picked up in the
-right place; the thermometer, percent done, and estimated time remaining
-were the same as when we left off last time.  I did the same thing several
-more times, everything was OK.  It would have taken a really long time to
-let this run to completion, but I think this demonstrates that Scott's
-symptoms are server-dependent.  No changes.  6 July 2006.
-
-Checked current code on VMS 8.2-1 on IA64 / UCX 5.5, builds fine.
-No changes.  Updated listing at HP.  6 July 2006.
-
-Checked FTP GET of large file in ASCII mode against Tru64 FTP server.  It
-was fine, and there was no delay in the server's response to our SIZE command
-(as there would be if it were scanning the entire file to count how many
-bytes would be required to send it in text mode).  7 Jul 2006.
-
-Tested FTP PUT big file against Tru64, OK.  Ditto FTP RESEND big file:
-
-  C-Kermit>resend BIGFILE
-   PUT BIGFILE (binary) (3000000001 bytes)---> PASV
-  227 Entering Passive Mode (15,170,178,171,13,186)
-  ---> SIZE BIGFILE
-  213 343211280
-  ---> MDTM BIGFILE
-  213 20060707141243
-  ---> APPE BIGFILE
-  150 Opening BINARY mode data connection for BIGFILE (128.59.59.56,45470).
-
-Made REPUT a synonym for RESEND.  ckuusr.c, 7 Jul 2006.
-
-Added FTP REPUT and FTP RESEND since previously there was no FTP-prefixed
-command for recovering uploads, only the regular RESEND command, which might
-not have been obvious to people.  ckcftp.c, 7 Jul 2006.
-
-Added help text for FTP RESEND and REPUT and amended RESEND help text.
-ckcftp.c, ckuus2.c, 7 Jul 2006.
-
-Changed name of \fpicture() to \fpictureinfo() and added help text.  By the
-way, ImageMagick can do this too: identify -format "%w %h" dscf0520.jpg.
-The advantage of having it in Kermit is that not everybody has ImageMagick.
-ckuus[24].c, 7 Jul 2006.
-
-Changed the numeric comparisons = < > <= >= != to allow long integers by
-changing the data type to CK_OFF_T, etc.  ckuus6.c, 7 Jul 2006.
-
-Noticed that \fkeywordvalue(foo=this is a string) only kept the first word.
-Fixed it to keep the whole definition.  Also added \fkwvalue() as a briefer
-synomym.  ckuus4.c, 7 Jul 2006
-
-Sometimes we want to check if a file's status before we've FOPEN'd it, in
-which case the channel variable is likely to be empty and \f_status(\%c)
-would get an error.  Making the obvious change didn't fix this, however.  It
-turns out that the function evaluator failed to adjust argn (argument count)
-when trailing arguments were empty, and argn was being used in this case,
-and probably others, to test whether an argument existed.  I added code to
-adjust argn to reflect the number of aruments up to and including the
-rightmost non-empty one.  ckuus4.c, 7 Jul 2006.
-
-Fixed \fstripb() to not dump core if second argument is missing.
-ckuus4.c, 7 Jul 2006.
-
-Discovered that it was not obvious what pattern to use to match strings
-enclosed in square brackets.  "if match [abc] \[*\]" didn't work.  Neither
-did various other tricks like NCRs for the brackets.  However, "if match
-[abc] \\[*\\]" does work.  Trying to fix this would no doubt break 100 other
-things, so let's call it a feature.  7 Jul 2006.
-
-Added \fgetpidinfo(n) to return info about a process ID; for now it simply
-returns 1 if the process is alive and 0 if not (or -1 if the argument is
-bad or missing or on any kind of error).  ckuusr.h, ckuus[24].c, 7 Jul 2006.
-
-The "where-did-my-file-go" message seemed to be ending with a LF rather
-than CRLF, probably because the terminal modes had not yet been restored,
-leaving the next prompt hanging below it, rather than on the left margin,
-if C-Kermit exited immediately after the transfer.  Fixed by changing
-all \n's to \r\n's in wheremsg(): ckcpro.w, 8 Jul 2006.
-
-Added \v(lastkwval) so we can retrieve programmatically the keyword most
-recently processed by \fkeywordval().  ckuusr.h, ckuus4.c, 9 Jul 2006.
-
---- Dev.20 ---
-
-Added #ifdef SV68, #include <unistd.h>, #endif because Unix System V/68 on
-Motorola choked on the SEEK_CUR reference without it.  ckuus4.c, 10 Jul 2006.
-
-Make \fkeywordval(xxx) undefine xxx (i.e. when a keyword is given with no
-value).  This way command-line keywords will always override preexisting
-default definitions, whether they have a value or not, which makes it easier
-to parse command lines like "foo=bar blah xx=yy".  ckuus[24].c, 12 Jul 2006.
-
-On 29 Nov 2005 I changed IF KERBANG to solve a problem (see entry for that
-date), but introduced a new one; namely that you can't have (e.g.)  a FATAL
-macro that uses IF KERBANG to decide whether to EXIT all the way or STOP
-back to the prompt.  Changed it again, this time to require not that the
-command level be 1, but that the command *file* level be 0 (i.e. that we are
-in the top-level command file, irrespective of the command or macro level,
-but not in a subfile).  ckuus6.c, 12 Jul 2006.
-
-It is unhelpful when Kermit gets a syntax error in the middle of a big
-compound statement block (e.g. FOR or WHILE loop) and dumps out the whole
-thing in an error message.  I changed the two places where this can happen
-to call a new routine that, instead of dumping out the entire cmdbuf,
-checks its length first and if it's more than a line long, truncates it
-and adds an ellipsis.  ckuus6.c, 12 Jul 2006.
-
-The new RENAME command didn't give very good error messages, e.g. if the
-filespec didn't match any files.  Fixed in dorenam(): ckuus6.c, 12 Jul 2006.
-
-Fixed DIR /TOP to work if the /TOP:n argument was omitted, defaulting
-to 10.  domydir(): ckuus6.c, 12 Jul 2006.
-
-Added DIR /COUNT:v to count the number of files that match the given
-criteria and store result in the variable v.  ckuusr.h, ckuus[r26].c,
-24 Aug 2006.
-
-Added HDIRECTORY as an invisible synonym for DIR /SORT:SIZE /REVERSE.
-Can be used with other switches, of course, so (e.g.) HD /TOP shows the
-ten biggest files.  ckuusr.h, ckuus[r26].c, 24 Aug 2006.
-
-DIR /FOLLOWLINKS and /NOFOLLOWLINKS always did the same thing; the switch
-was ignored, a symlink is always followed.  Fixed in ckuus6.c, 24 Aug 2006.
-
-Added DIR /NOLINKS, which means don't show or count symlinks at all.
-ckuusr.h, ckuus[r26].c, 24 Aug 2006.
-
-Build on Solaris 9 and NetBSD 3.0, 24 Aug 2006.
-
-Added a missing definition for LOCK_DIR in the Linux HAVE_BAUDBOY case,
-suggested by Gerry Belanger.  ckutio.c, 6 Oct 2006.
-
-Suggested by Jim Crapuchettes: \v(dialmessage) is the text string
-corresponding to \v(dialstatus).  ckuusr.h, ckuus4.c, 6 Oct 2006.
-
-Soewono Effendi sent code for exit sequence to leave DTR on; this amounted
-to unsetting HPUCL in c_cflag.  I did it a simpler way, hopefully portable
-to all Unixes, but who knows at this late date.  The code is inside
-#ifndef CK_NOHUPCL..#endif in case it causes trouble.  It is executed if
-SET EXIT HANGUP is OFF and a serial port was open at the time Kermit exits
-(or closes it explicitly).  ttclos(): ckutio.c, 6 Oct 2006.
-
-Built on Solaris9/Sparc; FreeBSD 6.2/AMD64; NetBSD 3.0/i386; HP-UX 11i v2;
-SCO OSR6.00.
-
---- Dev.21 ---
-
-Added netbsd+openssl target to makefile.  Built OK (NetBSD 3.0, OpenSSL
-0.9.7d) except with some warnings in ck_crp.c.  Connects and logs in OK to a
-secure site.  10 Oct 2006.
-
-Added a debug statement to ftp_hookup() to record the TCP port that was used.
-ckcftp.c, 11 Oct 2006.
-
-Built with OpenSSL 0.9.7l on Solaris 9.  Built with OpenSSL 0.9.8d on
-Solaris 9; connects and logs in to a secure site.  11 Oct 2006.
-
-The new RENAME command didn't work if both the source and destination names
-included directory segments, e.g. "rename /tmp/foo ~/bar" (see notes of
-4 May 2006).  This was fixed in renameone() by a special case in which
-the second argument is given but it is a filename, not a directory name.
-ckuus6.c, 11 Oct 2006.
-
-Fixed unguarded reference to dialmsg[] for \fdialmessage(), noticed by
-Gerry Belanger.  ckuus4.c, 12 Oct 2006.
-
-Added a TOUCH command that does what UNIX touch does: creates the file if it
-does not exist, updates the timestamp if it does.  If a wildcard is given,
-it operates only on existing files.  It shares the DIRECTORY command parser,
-so all the same file selection switches can be given.  ckuusr.[ch],
-ckuus[26].c, 12 Oct 2006.
-
-PeterE noticed that if you FOPEN a file, do some seeks or reads, then FCLOSE
-it, then FOPEN it again (or open a different one), some of the old
-information is still there (e.g. current line number).  This is an artifact
-of the changes of May 4th.  Now the file closing and opening routines are a
-bit more careful about scrubbing and initializing the file info struct.
-ckuus7.c, 12 Oct 2006.
-
---- Dev.22 ---
-
-Built OK on Red Hat Linux AS4 with both "make linux" and "make linuxnc". 
-15 Oct 2006.
-
-DIRECTORY /BRIEF ignored file selection switches and always listed all
-files.  This was because of how I cleverly called filhelp() (the routine
-that lists matching files when ? is typed in a filename field) and, of
-course, filhelp() doesn't know anything about the DIRECTORY command's file
-selections.  Changed filhelp() to accept all the args needed for passing
-along to fileselect(), renamed it to xfilhelp(), and made a filhelp() stub
-that chains to xfilhelp() with null selections.  ckcker.h, ckucmd.[ch],
-ckuus6.c, 29 Nov 2006.
-
-SHOW CONNECTION for an SSH connection said the connection type was "NET"
-rather than "SSH".  Fixed in dolognet(): ckuus3.c, 29 Nov 2006.
-
-SHOW CONNECTION didn't show the TCP port number.  This command works by
-parsing the current connection log entry string, which doesn't have a field
-for this, but which sometimes shows the port number as part of the hostname
-(but more often not).  Added code to dolognet() to log the TCP port number,
-if known.  This involved adding a gettcpport() function to ckcnet.c.
-ckcnet.[ch], ckuus3.c, 29 Nov 2006.
-
-This was impossible: def \%1 upper, echo \f\%1(abc) -- i.e. to "compose" a
-function name.  Fixed in zzstring().  But note that it's still not possible
-to do this: def \%1 \fupper, echo \%1(abc) -- because at the point where
-"\fupper" is encountered, which is automatically fed to fneval(), the
-argument list hasn't been read yet.  ckuus4.c, 29 Nov 2006.
-
-The meaningless Lisp command (=) would cause Kermit to hang.  Due to some
-idiosyncracy in the parser, it would see this as ((=) and would go into
-"wait for the closing paren" mode.  There was already a hack in the code to
-compensate for this, but it didn't work.  I fixed the hack but I don't
-understand the real problem.  Anyway, comparing Kermit with real (Franz)
-Lisp I discovered that comparison operators do not require two arguments, as
-Kermit has been doing, although they do require at least one.  I changed
-Kermit to not require two, so now all the comparison predicates behave
-exactly like Franz Lisp, including getting an error if there are no args).
-ckuus[r3].c, 29 Nov 2006.
-
-From to-do list: Make a way to inhibit pattern matching in SWITCH labels.
-It's already there; just quote the wildcard characters; the only trick is
-that for some reason (such as that SWITCH is really an internally defined
-macro), a double quote is needed:
-
-  switch \%1 {
-    :a\\*z, echo literally "a*z", break
-    :abcxyz, echo literally "abcxyz", break
-    :a*z, echo a...z, break
-    :default, echo NO MATCH
-  }
-
-In first case, the asterisk is taken literally; in the third it's a
-metacharacter and the label matches any string that starts with 'a' and
-ends with 'z'.
-
-Array initializion would quit early if any initializers were undefined,
-e.g. "decl \&a[] = \%a \%b \%c" would stop at the first element if \%b
-was not defined, even though \%c might be defined.  Fixed in dodcl():
-ckuusr.c, 30 Nov 2006.
-
-DIR /ARRAY:a filespec, when the filespec does not match any files,
-terminates with the array undeclared.  It would be better to return a
-declared but empty array (\&a[0] = 0).  The code is already there to do
-that, but isn't working.  And yet "declare \&a[0]" does indeed create a
-0-element array ("show array" shows a dimension of 0).  Turns out there were
-two problems; one was the careless recycling of a local variable ("array"),
-resulting in failure to create \&a[] (but not any other array).  Fixed in
-domydir(): ckuus6.c, 30 Nov 2006.
-
-The other problem was that dclarray(), when called with an array name and a
-dimension of zero, does two different things depending on whether the array
-already existed.  There is still a fair amount of confusion about whether a
-dimension of 0 indicates an array with 1 element (as it should) or a
-nonexistent array.  We call dclarray() with a size of 0 to undeclare an
-array but we also need to able able to declare an array with only element 0.
-I changed dclarray() to treat a negative dimension as a command to destroy
-the array, and 0 or positive as a command to create the array with the given
-dimension.  ckuus[r56].c, 30 Nov 2006.
-
-Next problem: when chkarray() returns 0, this should not be interpreted to
-mean the array does not exist.  Looks like the only place this happened was
-in \fcontents(); fixed in ckuus4.c, 30 Nov 2006.
-
-If we include file selectors with DIR /ARRAY:&a and some of the files that
-match the given filespec but don't fit the selectors, the array's dimension
-is bigger than its number of elements.  Added code at the end of domydir()
-to resize the array so \fdim() returns the number of filenames in the array,
-and also made sure that element 0 contains that number too.  ckuus6.c,
-30 Nov 2006.
-
-This would be a nice elegant way to loop over a bunch of files, if it worked:
-
-  for \%i 1 \ffiles(*) 1 { rename \fnextfile() xxx_\flpad(\%i,3,0) }
-
-But in this loop, Kermit skips every other file (beginning with the first)
-and then runs out of files halfway through the loop.  Why?  Because in
-commands like RENAME and DELETE, the filename parser is in a chained FDB
-with the switch parser.  First the switch parser, cmswi(), gets its hands on
-\fnextfile(), passing it through the evaluator and thus getting the first
-filename, which it then sees is not a switch, so now the field is parsed by
-the next parser in the chain, cmifi(), which causes \fnextfile() to be 
-executed again.  In fact, the FOR loop has nothing to do with; the same
-thing happens like this:
-
-  void \ffiles(*)
-  delete \fnextfile()
-
-This deletes not the first file, but the second one.  Obviously users can be
-told not to refer to \fnextfile() in chained-fdb fields:
-
-  for \%i 1 \ffiles(*) 1 { .f := \fnextfile(), delete \m(f) }
-
-but this is hardly intuitive.  I had some clever ideas of how to make
-\fnextfile() work as expected in this context but it's way too much magic.
-Better to simply document that \fnextfile() is "deprecated" and the array
-format should be used:
-
-  for \%i 1 \ffiles(*,&a) 1 { delete \&a[\%i] }
-
-The difference is, an array element doesn't change every time it's referred to!
-
-Added a /PRESERVE switch to the COPY command to preserve the timestamp and
-permissions of the file.  I did this using the Kermit APIs so it should work
-for any version of C-Kermit or K95.  ckuus[26].c, 30 Nov 2006.
-
-Added COPY /OVERWRITE:{ALWAYS,NEVER,OLDER,NEWER} to control name collisions
-when copying across directories.  ckuus[26].c, 1 Dec 2006.
-
---- Dev.23 ---
-
-Fixed a bug in SET TELNET PROMPT-FOR-USERID, SET AUTH KERBEROS[45] PROMPT,
-and SET AUTH SRP PROMPT in which the user's string was compared with a
-literal (s == ""), reported by Pavol Rusnak.  Worse, empty strings (if the
-test succeeded) were turned into null pointers, and then fed to strlen().
-Fixed in ckuus3.c, 5 Dec 2006.
-
-Added an optional 4th argument to \findex(), \frindex(), \fsearch(), and
-\frsearch(): the desired occurrence number of the searched-for string.
-\frsearch() was a bit tricky.  ckuus[24].c, 7 Dec 2006.
-
-Added \fcount(s1,s2) to tell the number of occurrences of s1 in s2.
-ckuus[24].c, 8 Dec 2006.
-
-Added \ffunction(s1) to tell if a given built-in function is available.
-ckuus[24].c, 8 Dec 2006.
-
-Changed RENAME /COLLISION:PROCEED to be /COLLISION:SKIP, which is clearer.
-ckuus[26].c, 8 Dec 2006.
-
-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.  ckuusr.[ch],
-ckuus4.c, 8 Dec 2006.
-
-There was 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 to GMT changes the date, the variables for day, month, and
-year (which are used later) were not updated, and the final result was a day
-off.  Fixed in cmcvtdate(): ckucmd.c, 10 Dec 2006.
-
-Built OK with SSL/TLS.  Tested with the POP script, found that I broke INPUT
-when adding the /COUNT feature; there was a path through the code that could
-leave the "anychar" variable unset and therefore random.  Fixed in
-doinput().  The POP script, which does not use /COUNT, works again and so
-does a new CGI script, which does use /COUNT.  ckuus4.c, 10 Dec 2006.
-
-Supplied a missing comma in the help-text array for HELP SET TERMINAL, which
-resulted in bad formatting in K95 around SET SNI-FIRMWARE-VERSIONS.
-ckuus2.c, 10 Dec 2006.
-
-Made "help locus" a synonym for "help set locus".  ckuusr.[ch], ckuus2.c,
-11 Dec 2006.
-
-This morning the Columbia FTP server was malfunctioning in a perfect way
-for me to implement and test an FTP timeout mechanism.  The server would
-close the data connection after sending the file, but the client never saw
-the close and was stuck forever in a recv().  I added code to do a select()
-on the data connection prior to entering the recv(), with a timeout on the
-select() that the user can establish with SET FTP TIMEOUT.  Built and tested
-on Solaris 9, clear-text FTP.  Also built cleanly for FTPS and tested
-against a server that does not hang; I don't have access to an FTPS server
-that would tickle the timeout code.  ckcftp.c, 11 Dec 2006.
-
---- Dev.24 ---
-
-Fixed a bug in the INPUT /COUNT: parser: the array of search strings was
-never initialized, which didn't matter before, but with /COUNT:, if the
-first element was not a NULL pointer, we'd treat it as a search string, and
-then if it happened to match something in the input stream, the operation
-would stop before the count was exhausted.  Fixed by (a) initializing the
-array, and (b) ignoring any search strings if /COUNT: was given.  ckuusr.c,
-13 Dec 2006.
-
-Removed a debug() statement from zsattr() that suddenly started making some
-version of gcc complain, reported by Gerry Belanger.  ckufio.c, 13 Dec 2006.
-
---- Dev.25 ---
-
-Some casts for the 3 interior args of the new select() call in ckcftp.c
-for HP-UX 9.  14 Dec 2006.
-
-Changed \fkeywordvalue() to accept a string rather than a single word
-as its second argument, so that more than one separator could be specified,
-and to return -1 on error, 0 if it found nothing, 1 if given a kewyord but
-no value, and 2 if there was a keyword and a value.  dokwval(): ckuus[24].c,
-14 Dec 2006.
-
-Checked FTP timeout on command channel with FTP DIRECTORY of a big directory
-using a path into our ftp server that preserves the hanging behavior.  The
-timeout was actually working, but the failure condition wasn't propogating
-back to the user, and there was no error message.  Fixed in doftprecv2() and
-failftprecv2(): ckcftp.c, 15 Dec 2006.
-
-Added the obvious timeout checks for FTP uploads, but I have no way to test
-the code since our misbehaving FTP server does not hang when receiving
-files, only when sending them.  But uploads work both with and without a
-timeout set, so at least no harm is done.  ckcftp.c, 17 Dec 2006.
-
-When downloading with FILE DESTINATION NOWHERE (= /CALIBRATE), Kermit still
-checked the size of the incoming file and refused it if there wasn't enough
-free disk space, on platforms (such as VMS) where zchkspa()) actually works;
-reported by Bob Gezelter.  ckcfn3.c, 18 Dec 2006.
-
-Built on Mac OS X 10.4.8 and NetBSD 3.1_RC3, all OK.  19 Dec 2006.
-
---- Dev.26 ---
-
-Built on VMS 7.3-2/Alpha.  Had to squelch a couple compiler warnings by
-changing some ints in the new \fpictureinfo() code from unsigned to signed,
-and fix a typo in the prototype for the new gettcpport() function.
-ckcnet.h, ckuus4.c, 22 Dec 2006.
-
---- Dev.27 ---
-
-Parameterized pty routines and all references to them for file descriptor,
-rather than to use global ttyfd, thus allowing ptys to be created for
-different purposes.  Tested on Solaris 9 and Mac OS X 10.4.8, with "set host
-/connect /pty emacs" (fine in both cases), and (more to the point) "set host
-/connect /pty kermit" -- here we make a connection from one Kermit process
-to another and transfer a file; works fine and wasn't especially slow either;
-a good sign.  ckcdeb.h, ckutio.c, ckupty.c, 22 Dec 2006.
-
-Created a new version of ttruncmd() called ttyptycmd(), which works by
-calling do_pty() to get a pty to run the command on, and then in a loop,
-reads from the pty and writes to the net and reads from the net and writes
-to the pty, using select() to which of those it should do on each pass.
-First cut just uses single-byte reads and writes.  Tested using Kermit
-itself as an external protocol.  Works but slowly: 6000cps.  Zmodem doesn't
-work at all.  ckutio.c, 24 Dec 2006.
-
-Changed single-character read() and write() to buffered reads and writes,
-with ttxin() and ttol() used for network i/o.  Using Kermit as the external
-protocol, this gives 450Kcps (about 1/3 normal on this connection).  
-
-But now there's a problem: the loop doesn't know when to stop.  How does it
-know when the process that is running on the pty has exited?  With single
-character read()'s that are executed unconditionally when select() says the
-pty has data waiting, as in the first pass, I get EIO if there actually
-isn't any, and can exit the loop.  But now, to avoid blocking, I call
-in_chk() to see how much data is waiting, and I don't try to read anything
-if it says nothing is waiting.  If the process associated with the pty file
-descriptor has terminated, in_chk() would presumably get some kind of error,
-but it doesn't.  I changed do_pty to return the pid of the fork where it
-execs its command so we can check the pid with kill(pid,0) when in_chk() of
-the pty says 0, but this doesn't help either; it seems like the process is
-not exiting, but of course it is.
-
-I could not find any legitimate way to test when the pty fork terminated.
-Select() always says the pty file descriptor was ready, no matter what.
-Select() never reports an exception on the pty file descriptor;
-in_chk(ptyfd) returns 0 and not an error.  read(ptyfd,...) gets 0 but not an
-error.  fcntl(ptyfd,...) doesn't get an error.  Finally I tried
-write(ptyfd,c,0) and this indeed gets EIO (i/o error).  With this, using
-Kermit as the external protocol works fine in Solaris but I tend to think
-this trick will not be very portable (it isn't).  24 Dec 2006.
-
-Made ttptycmd() use a more intelligent buffering scheme, fixed a few things
-about how I was setting up the select() call that should address some of
-yesterday's problems.  Still doesn't work but it's progress.  A: 25 Dec 2006.
-
-Debugging yesterday's code...  Still, the error conditions are never set,
-we never detect when the pty closes.  In Solaris, if select() says ptyfd is
-ready to read but in_chk() says there are no characters there, we can treat
-this as a loop-exit condition.  But in NetBSD, in_chk() always says 0 when
-used on a pty (but works OK on a serial or net connection).
-
-Realized I could not use in_chk() on the pty because there is too much
-baggage with the communication path -- myread(), etc etc) -- so I replaced
-this with a simple ioctl(ptyfd,FIONREAD,&n).  This works fine in Solaris but
-always returns 0 in NetBSD, despite what the man page says (i.e. that this
-function can be used on any file descriptor).
-
-OK, let's see.... select() does not return useful results.  It says
-characters are waiting on ptyfd when they are not, and it never detects the
-closure of the pty.....  Well of course not, because we are the ones who
-have to close it.  Just because the process has stopped doesn't mean the pty
-is closed.  So we're back to square one, how do we know when to close it?
-ckupty.c seems to keep the process ID in a global variable, pty_fork_pid
-(which is not the same as the pid now returned by do_pty(), which is
-useless, but I don't understand why).  But it doesn't matter because when we
-kill(pty_fork_pid,0), we still get no error of any kind, even after we know
-the process has exited.  I am completely flummoxed.  select() lies, and even
-if it didn't, there is simply no completion criterion.  In the loop,
-select() always says that the pty is ready to read.  To be continued.
-26 Dec 2006.
-
-Back to Square One, single-byte reads and writes.
-
- . This works for both ripple and Kermit.
- . Doesn't work for Zmodem but we'll deal with that later.
- . In this case FD_ISSET(ptyfd) is still true after pty closes.
-
-But the ensuing read() gets EIO so we know the pty is gone.  That means the
-same thing should happen in the buffered version, no?  Yes; I went back to
-the buffered version and replaced all the other nonworking tests by a
-blocking read of 1 byte on the pty and this detects the termination.  Now:
-
- . ripple works perfectly (of course it's only one-way).
- . Kermit fails
-
-Let's call the remote, forked, redirected, external Kermit A and its
-local partner B.  A sends its S-packet, B receives it OK and Acks.
-A apparently does not receive the ACK in time, so sends the S again, but OK.
-followed immediately by the F.  B Acks the F.  A sends the A, B Acks it.
-But now A sends a piece of the previous F packet and the the first piece
-of a D packet.
-
-Clearly the buffering is messed up.  Sure enough, there was an extraneous
-statement incrementing a read pointer in a write section.  Removing that
-cleared up the problems with Kermit, now we can send and receive substantial
-files efficiently in remote mode.  Zmodem seems to work too, except that at
-the beginning a bunch of "**B0800000000022d"'s are stuffed into Kermit's
-command buffer, so after the transfer we get some error messages.
-
-In local mode, over a Telnet connection, Kermit works fine.  Zmodem works
-OK too except it doesn't finish right, so at the very end rz on the far end
-is still waiting for something; if I cancel out of it with ^X^X^X^X^X, it
-deletes the file.  So there still is something wrong with the termination
-test.
-
-Also you don't see anything on your screen when running Kermit or Zmodem
-this way.  That's to be expected, since they are using stdio for the
-transfer, so they can't also be displaying progress or other messages.
-
-Built this on NetBSD again...  Seems to work this time, but has trouble
-finishing, like Zmodem.  Hmmm, on closer examination, it turns out that
-since in_chk() always returns 0 on the ptyfd, we fall into our new
-single-byte read code, so it's really slow, like 10K cps on a connection
-where 1M is the norm.  27 Dec 2006.
-
-Switched the pty from buffer peeking (FIONREAD) and blocking reads to to
-nonblocking reads (O_NONBLOCK / O_NDELAY).  Works just fine on NetBSD except
-now we no longer get EIO at the end when trying to read from the pty process
-that has exited.  In fact, we're back to square one again.  not ioctl(), not
-fcntl(), not select(), not even read() gets an i/o error after the pty
-process exits.  But in NetBSD, we have to use nonblocking reads because ...
-Hmmmm, maybe switch the fd between blocking and nonblocking for the test...
-Nope, NetBSD seems to be hopeless (later, Ed Ravin confirmed that similar
-problems have been observed with other applications that try to do this).
-
-Switching to Linux, I see that yesterday's Solaris code (blocking reads)
-works exactly the same way on Linux.
-
-Tried today's O_NDELAY method on Solaris.  It works perfectly.  And then I
-moved this one to Linux and it works perfectly there too.  Except in both
-cases we have the wierd thing with Zmodem at the end, but I think that's
-because rz/sz don't use standard i/o.  On NetBSD, it still hangs at the end.
-
-Turns out that testing the pid works in NetBSD, even though it didn't in
-Solaris.  Turns out read() gets an i/o error in Solaris and Linux but not
-in NetBSD.  So checking the read result first, and then checking the pid
-if read() got zero bytes catches all three.  28 Dec 2006.
-
-Now the question of return code.  In the original ttruncmd() function, we do
-a fork() and a wait().  When the external protocol program finishes, wait()
-gives us its return code and we can pass it on through \v(pexitstat) as well
-ttruncmd's own return code.  But ttptycmd() has to interact with the pty
-continuously, so it can't just sit back and wait() for it.  Instead we have
-to detect when the process has exited and then call waitpid() on the fork
-pid, before shutting down the pty.  Tested on Solaris using Kermit as the
-external protocol and then inducing failure, or letting it run to
-completion.  FAILURE and SUCCESS set appropriately in each case.  Tested
-with Zmodem too, works OK except for the aforementioned cosmetic glitch at
-the end.  Tested on NetBSD, all OK.
-
-To make K5 connection to Panix from Spam:
-
- set telnet debug on
- authenticate K5 init /realm:PANIX.COM /password:xxxxx
- set host shell.panix.com 23 /k5login
-
-Good...  Now I try to send a file from Spam to Panix over the K5 connection
-using Kermit itself as the external protocol.  It fails.  Inspection of the
-debug log on the far side shows that the S-Packet was received correctly,
-good!  This means we are reading the clear-text S-Packet from the external
-Kermit program, and that ttol() is encrypting appropriately.
-
-The remote Kermit sends the Ack and goes to read the next packet: ttinl()
-calls myfillbuf() and:
-
-  SVORPOSIX myfillbuf calling read()
-  SVORPOSIX myfillbuf=0                <-- read returns 0
-  SVORPOSIX myfillbuf ttcarr=2
-  SVORPOSIX myfillbuf errno=0          <-- and reports no error
-  HEXDUMP: mygetbuf read (-3 bytes)
-  mygetbuf errno=0
-  ttinl myread failure, n=-3
-  ttinl myread errno=0
-  ttinl non-EINTR -3[closing]
-
-This happens because myfillbuf() deliberately returns -3 when read() gets 0
-bytes.  I don't understand why this happens but the real problem is yet to
-come.  The local Kermit (the one that has made the secure connection and is
-running the external protocol through ttptycmd()) eventually figures out
-that the transfer failed and when we reconnect, we get total garbage -- the
-encryption either stopped happening, or got out of sync.
-
-Looking at the local debug log, ttol() is doing its job, converting the
-initial "kermit -r\13" from plaintext to cyphertext, as shown by the
-hexdumps.  Then it enters ttptycmd()...  Hmmmm, wait, how can it send the
-"kermit -r" before it starts the external protocol?  Never mind, worry about
-that later...  Anyway, ttptycmd() says:
-
-  ttptycmd loop top have_pty=1
-  ttptycmd loop top have_net=1
-  ttptycmd FD_SET ptyfd in
-  ttptycmd FD_SET ttyfd in
-  ttptycmd nfds=5
-  ttptycmd select=1
-  ttptycmd FD_ISSET ttyfd in
-  ...
-  ttptycmd in_chk(ttyfd) n=11
-  ttptycmd ttxin n=11
-
-ttxin() asks for 11 bytes, myfillbuf() gets 11 bytes, and hexdump() shows
-the cyphertext, there doesn't seem to be any decrypting going on.  Hmmm, it
-looks like the regular code calls ttinc() in a loop, rather than ttxin().
-Maybe ttxin() doesn't have decryption hooks.  No, that's not it, the code is
-there, but the Kermit packet reader does not use ttxin(), it uses ttinl().
-But of course we can't use that for external protocols because it's designed
-only to read Kermit packets.  Substituting a loop of ttinc()s for the ttxin()
-call fixes things (and stangely enough, it seems to be faster).  And now we
-have our first external protocol transfer over a secure connection (external
-Kermit program, Linux over Kerberos 5 to NetBSD).  Zmodem worked too for a
-short file but "something happens" with longer ones.  29 Dec 2006.
-
-New makefile target for Linux with Kerberos 5, linux+krb5, that doesn't
-include anything extra from SSL or other security methods (but apparently it
-is still necessary to include -DOPENSSL_097 in order to get the right names
-for the DES routines?).  Ditto netbsd+krb5 for NetBSD, except in this case
--DOPENSSL_097 is not necessary.  makefile, 30 Dec 2006.
-
-Note to myself: On Panix:
-
-  export LD_LIBRARY_PATH=/usr/local/kerblib
-  make netbsd+krb5 "K5LIB=-L/usr/local/kerblib" "K5INC=-I/usr/local/include"
-
-Can't telnet-k5 from newly built Kermit on NetBSD; partway through the
-negotiations, just after "TELNET RCVD SB ENCRYPTION SUPPORT DES_CFB64
-DES_OFB64 IAC SE" it dumps core.  The last two lines in debug.log after
-this are:
-
-  tn_sb[len]=5
-  encrypt_support[cnt]=2
-
-Rebuilding with -DOPENSSL_097 doesn't change anything.  Ed Ravin said they
-have two different Kerberos installations, Heimdahl and MIT; maybe some
-mixup between the two explains the problem (Jeff concurs). The core dump
-occurs in ck_crp: encrypt_support():
-
-   debug(F100,"XXX ep not NULL","",0);
-   type = ep->start ? (*ep->start)(DIR_ENCRYPT, 0) : 0; <-- Here
-   debug(F101,"XXX new type","",type);
-
-Anyway, I can log in with Kerberos 5 to Panix OK from Columbia (sesame)
-using 8.0.201.  So let's try to resurrect the Solaris version with everything:
-
-  solaris9g+krb5+krb4+openssl+shadow+pam+zlib
-
-I hunted around to find where the current library and header file
-directories were...  Last time I tried this (March 2006) it bombed, not
-finding libdes.  Instead we have /opt/kerberos5125/lib/libdes425.a.  Made a
-new cu-specific target that includes this; now we get farther; it blows up
-in ckcftp.c with tons of errors and warnings, which we can worry about
-later.  Building again with -DNOFTP, it gets to ckuath.c (the first security
-module) and:
-
-  ckuath.c:151:18: error: krb5.h: No such file or directory
-  ckuath.c:152:21: error: profile.h: No such file or directory
-  ckuath.c:153:21: error: com_err.h: No such file or directory
-  ckuath.c:176:28: error: kerberosIV/krb.h: No such file or directory
-  In file included from /opt/openssl-0.9.8d/include/openssl/des.h:101,
-                  from ckuath.c:219:
-
-Found krb5.h in /opt/kerberos5125/include/krb5.h, added a -I for this
-directory ...  Now we get lots of warnings in ckuath.c, but it completes OK,
-then we wind up bombing out in ck_crp.c; I don't know why -- there are all
-the same warnings (related to argument passing to DES functions), but no
-errors.  I have no clue.
-
-Tried to resurrect the solaris2x+krb4 target; this required changing -lkrb
-to -lkrb4 and -ldes to -ldes425.  Lots of warnings in ckutio.c, ckcnet.c,
-ckctel.c, then it bombs out in ckcftp.c because it can't find krb.h.  I
-found it, adjusted the -I flags, but now it bombs because krb.h itself
-#includes <kerberosIV/des.h>, which of course it can't find because the
-brackets mean it's looking in /usr/include/kerberosIV/, which, of course,
-the sys folks have removed.  Giving up on Solaris again.  Later, Jeff said
-"Solaris does not publicly export the krb5 libraries.  You need to build
-the MIT Kerberos libraries separately and link to them."  30 December 2006.
-
-Changed copyright date to 2007.  ckcmai.c, 1 Jan 2007.
-
-With Ed Ravin's help, successfully built C-Kermit with Kerberos 5 and
-OpenSSL (netbsd+krb5+openssl+zlib), but it does not make K5 connections; it
-gets hung up in the Telnet negotiations.  3 Jan 2007.
-
-Downloaded MIT Kerberos 5 v1.4.4 to Solaris 9, 54MB worth.  This is just so
-I can build a Kerberized C-Kermit for testing ttyptycmd().  Ran the
-configure program, got a few warnings but it didn't fail (should it?)  Did
-"make install", specifying a private directory but it failed immediately
-with "cannot stat libkrb5support.so.0.0: No such file or directory".
-OK, I tried.  3 Jan 2007.
-
-Made a new makefile target for Mac OS X, macosx10.4+krb5+ssl, ran it on Mac
-OS X 10.4.8.  It bombs out in ckcftp.c with: ckcftp.c:551: error: static
-declaration of 'gss_mech_krb5' follows non-static declaration
-/usr/include/gssapi/gssapi_krb5.h:76: error: previous declaration of
-'gss_mech_krb5' was here".  Ditto for gss_mech_krb5_old, gss_nt_krb5_name,
-and gss_nt_krb5_principal.  Tried again with -DNOFTP.  We get lots of
-warnings in the network modules, but they complete.  But ck_ssl.c bombed
-with a conflict between its own declarations of encrypt_output and
-decrypt_input and the ones in ckuat2.h; removed the prototypes from the
-latter (as Jeff advised) it built OK and it works OK too.  Built with FTP
-too, but with link-time warnings about the aformentioned gss_* symbols.
-#ifdef'd them out (gss_mech_krb5, gss_mech_krb5_old, gss_mech_name, and
-gss_mech_principal) for MACOSX, where these symbols are exported by the
-library.  Now it all compiles and links OK, and runs OK too.  3 Jan 2007.
-
-Spent a day hunting around for a version of Zmodem that would build and
-execute on Mac OS X, finally found one.  Now at last I could try a Zmodem
-external-protocol transfer over a secure connection.  But phooey, C-Kermit's
-pty support didn't work on this box.  Kermit finds master /dev/ptypa OK,
-then in ptyint_void_association() tries to open /dev/tty but gets ERRNO=6
-"device not configured" (which is apparently OK, because the same thing
-happens on other platforms where this works), then tries to open slave
-/dev/ttypa and gets ERRNO=13 "permission denied" because, indeed, I don't
-have r/w permission on the device.  Left a message.  4 Jan 2007.
-
-Changed TRANSMIT /BINARY output buffer size from 252 to 508 to avoid
-TCP fragmentation.  Need to add a SET command for this later.
-ckuus4.c, 5 Jan 2007.
-
-Found another Mac where the ptys weren't protected against me, make a K5
-connection and transferred a largish file with Zmodem with zero glitches,
-except it was kind of slow, 84K cps.  Well, we're doing single-character
-reads on the net (ttinc()'s instead of ttxin()).  Hmmm, but then I did it
-again and got 2.2Mcps.  Success was reported, but it actually didn't work;
-it only sent the first quarter of the file....  Oh well, at least now we
-have a testbed.  5 Jan 2007.
-
-Tried again, saw that the file is actually transferred instantly but then
-we're not picking up the protocol at the end.  Theory: after the transfer
-finishes, we come back to the prompt on the remote host, which means we have
-something to read from the net and write to the pty, but the pty has already
-exited.  AFTER THE PTY IS GONE, WE DO NOT WANT TO READ FROM THE NET ANY
-MORE.  Adding this test makes Kermit succeed right away when sending the
-same largish file, with a transfer rate of 4M cps, that's better.  But the
-rz program on the far end is evidently not receiving the goodbye handshake
-from the receiver, because it sits there foreever in its *B09002402009418
-mode until I ^X^X^X^X^X out of it, at which point it deletes the file it
-already received, not very helpful.  In the code, I read from the pty if the
-pty is open and there is room in the buffer.  This means that when we get to
-the end, either there is no room in the buffer (unlikely) or the last bit
-sent by sz before exiting was cut off when the fork closed.  Why do we get
-in this fix only with Zmodem and not with Kermit?
-
-In Mac OS X, after sz exits, we get ERRNO=5 if we try to write to the pty,
-but we still get no errors after that if we try to read from it.  Still,
-prior to this we did more than 20 unproductive nonblocking reads from the
-pty (no error, no bytes) without incident; there did not seem to be anything
-waiting.  In fact, the last thing we read from the pty were the text
-messages that are issued at the end of the transfer: "rz 3.73 1-30-03
-finished."  After which it pauses a second and spits out a message about
-UNREGISTERED COPY.
-
-Figured out how to build lrzsz, in hopes that the previous problems were
-with rzsz and crzsz's fiddling with file descriptors, but I get the same
-behavior.  Which is good, I guess, because if I can fix one, I fix them all.
-Or not...  Testing lrz by itself (not under C-Kermit), I see that it doesn't
-work at all with Kermit's own Zmodem implementation.
-
-OK, here's one problem: at the end of the transfer, the Omen Zmodems print
-stuff like "Please read the license agreement", Kermit dutifully reads this
-from the pty and sends it to the host, the host shell says "Please: command
-not found", issues its prompt again, which Kermit reads, feeds to the pty,
-and apparently the pty echoes it, so we send it back to the host, and there
-ensues an infinite loop of getty babble until the pty closes.  Now, there
-ought to be a way to make the external protocol shut up, like Kermit's
--q(uiet) flag, but these are unregistered versions so you can't shut up the
-messages.  In fact, the transfer works, but the getty babble at the end
-ruins the experience.  Now I'm beginning to wonder how any of these programs
-ever worked as external protocols.  Hmmm, now that I try it, I see the
-same thing happens the old way, when using ttruncmd() rather than ttptycmd().
-
-Reading the crzsz documentation I see it says that messages come out on
-stderr.  OK, that's progress.  In ckupty.c I try redirecting 2 to /dev/null.
-Well good, this filters out the messages from csz, but we still get getty
-babble on the prompt.  In the debug log, we read the last bunch of stuff
-from net, 618 bytes of Zmodem stuff...   Now what happens?
-
-Zmodem on the remote exits, the host prints its prompt.  Kermit, of course,
-reads the prompt from the net, now come to the bottom of the loop and we
-have 7 bytes to write to the pty, and no error condition, so we continue the
-loop.  select() says that the pty is ready for writing.  We write the 7
-bytes and and get no error.  Loop again, this time select() says the pty has
-data waiting.  Sure enough we get the prompt back, and send it to the net,
-and thus begins the getty babble.  There are two causes for this:
-
-  1. crzsz does not exit immediately; it sleeps for 10 seconds after
-     printing its nag message.
-
-  2. During this interval the pty seems to be echoing what is sent to it.
-     csz is not echoing; I checked.  Anyway, removing the pause doesn't
-     seem to make a difference.
-
-ttptycmd() needs to:
-
- . TELL the pty module to redirect stderr to /dev/null
- . SET PTY TO NOECHO (master or slave?)
-
-Tried setting the pty to noecho:
-
-  termbuf.c_lflag &= ~(ECHO|ECHOE|ECHOK);
-
-and this seemed to stop the getty babble.  After the file transfer, I read
-back the prompt from the host shell, I write the prompt bytes to the pty;
-there is no error.  And now select() simply hangs forever (or times out if
-a timeout is set).  The question here is: why didn't writing to the pty
-produce an error?  And, because we never detect the pty has exited, we can't
-set a good return code.  5 Jan 2007.
-
-Moved pty fork testing to a separate routine, pty_get_status(), and 
-added a call to it from the place where we time out, in case the fork
-terminated; then we can get and return its status.  6 Jan 2007.
-
-Added calls to pty_get_status() to every place where we suspect a pty error,
-tried again with lrzsz, crzsz, and regular rzsz.  All three work, but in
-each case waitpid() indicates that the sz program gave exit code 1 (failure).
-ckutio.c, 7 Jan 2007.
-
-Changing the subject...  On my test system, every time I execute ttptycmd(),
-I get "permission denied" on /dev/ttyp3.  Then I run it again and get to
-ttyp4 which is OK.  I wanted to skip past any pty for which I lack
-permission and try the next without raising an error.  Added debugging code:
-
-  16:25:23.524 pty_getpty() pty master open error[/dev/ptyp0]=5
-  16:25:23.524 pty_getpty() pty master open error[/dev/ptyp1]=5
-  16:25:23.524 pty_getpty() pty master open error[/dev/ptyp2]=5
-  16:25:23.524 pty_getpty() found pty master[/dev/ptyp3]
-  16:25:23.524 pty_getpty() slavebuf [2][/dev/ttyp3]
-
-So it already was skipping past open errors; ttyp3 was opened successfully.
-The problem is that ptyp3 is rw-rw-rw-, but the corresponding master,
-ttyp3, is rw--r----.  It seems the code assumes that if the master can be
-opened, then so can the corresponding slave.  Unfortunately, the code is
-not structured to allow us to skip ahead to the next master if the slave
-can't be opened.  7 Jan 2007.
-
-Spent a couple hours trying to rearrange the code in the pty module to skip
-past inaccessible slaves but it was a rabbit hole, not worth it, backed off.
-8 Jan 2008.
-
-Tried an upload over a secure connection using lsz.  Unexpectedly, this time
-it worked; not only was the file (about 0.5MB) transferred correctly, but
-Kermit detected the fork's termination and got the pid's exit status, and,
-for the first time, correctly reported a successful transfer.  I have no
-idea why this works today and not yesterday.  More tests; it works most of
-the time.  It works with csz and with regular sz too.
-
-(days later...)
-
-ckucns.c seems to do the right thing; it recognize the ZSTART string,
-activates the Zmodem-Receive APC, and returns.  doconect() sees the APC and
-begins to execute it.  The RECEIVE command results in a call to the GET
-command parser, doxget() (IS THAT RIGHT?), then comes a ttflui(), which
-throws away a bunch of stuff.  Finally we get to ttptycmd(), we get a pty
-and run lrz in it, select() says stuff is waiting from the pty, but read
-returns 0, errno 0.  Skipping the ttflui() in doxget() if the protocol was
-not Kermit didn't seem to make difference.  ckuus6.c, 8 Jan 2007.
-
-The problem is that in this case, reads from the pty never get anything (no
-data, no error), write always gets an error.  It's as if the pty was not
-being set up right, or we're using the wrong file descriptor.  And if we
-skip the autodownload?  Same thing.
-
-OK, putting downloads aside for a moment, let's get uploads working as well
-as possible.  At this point we have the odd situation (at least in this
-configuration) that the upload succeeds, but now for some reason we are
-unable to read the exit status from the process, even though this was
-working before, so ttptycmd() returns 0 (failure), yet Kermit reports
-success.
-
-Well, it turns out that kill(pty_fork_pid,0) was gumming up the works.
-If we use only waitpid() all is well, I think.  waitpid() with WNOHANG
-returns -1 with status -1 errno 0 if the pid has not exited, and it returns
-the pid and status > -1 if the process has exited.  Fixed pty_get_status()
-to do it this way.  ckutio.c, 7 Jan 2007.
-
-Let's move this from Mac OS to NetBSD and see how it works.  Well, the file
-transfer was just fine, but then I used some sexps to calculate the elapsed
-time and transfer rate, and Kermit hung in dosexp().  Fine, ignoring that...
-The debug log shows that ttptycmd() gets the pty OK, master and slave, the
-i/o goes smoothly, and waitpid() does its job perfectly.  Solaris, same
-deal; ttruncmd() goes smoothly, but then the sexps afterward get "Arithmetic
-exception".  Turns out there was a BAD bug in dosexp() that allowed an
-integer division by 0 to occur under certain circumstances; it's always been
-there.  Fixed in dosexp(): ckuus3.c, 8 Jan 2007.
-
-After noticing a few problems running the pop.ksc script in production over
-the past year, rewrote \femailaddress() to be more reliable and a lot
-simpler.  ckuus4.c, 9 Jan 2007.
-
-Back to ttptycmd()...  When we left off, we could send but not receive.  Set
-up a test case using Kermit as the external protocol for receiving a short
-file.  If I SET STREAMING OFF and use short packets, it actually does work,
-so it's not a complete failure to function, but apparently a lack of flow
-control for the pty.  Began by completing the parameterization of the pty
-module, so it can be called for interactive use (fc 0) or for running
-protocols (1).  Confirmed that everything works at least as well as before
-(e.g. "set host /pty emacs" vs external protocols).  ckcdeb.h, ckutio.c,
-ckupty.c, 9 Jan 2007.
-
-Found in HP-UX "man 7 pty" a description of ioctl(fd,TIOCTTY,fc) which is
-exactly what we want: fc 0 turns off all termio processing and guarantees an
-ininterrupted, unmolested, flow-controlled stream of bytes in both
-directions.  This function also exists in Linux, but not in Solaris, NetBSD,
-or Mac OS X (TIOCNOTTY is not what we want, it does something else entirely).
-
-Another possibility is TIOCREMOTE, which "causes input to the pseudoterminal
-to be flow controlled and not input edited, regardless of the terminal
-mode".  This one exists in at least HPUX, NetBSD, Solaris, and Mac OS X.
-
-Solaris: builds OK, but at runtime we get ENOTTY ("Inappropriate ioctl for
-device").  By the time this happens, it's hard to tell from the code whether
-the fd we're using is for the master or the slave; TIOCREMOTE can be used
-only on the master.  Close inspection shows that I am indeed doing that;
-ptyfd as seen by ttptycmd() is truly the master, i.e. the /dev/ptyXX device,
-not the /dev/ttyXX device (the slave fd can't be seen at all, as it exists
-only in a separate fork).  OK, so now we know that TIOCREMOTE can't be used
-on Solaris.
-
-NetBSD: Somehow, whether as a result of today's fiddling or the phase of the
-moon, the code in pty_open_slave() that tries to open /dev/tty started
-failing on NetBSD ("Device not configured").  Changing it to be run only if
-fc == 0 (which doesn't seem to hurt anything), once again I get ENOTTY on
-the TIOCREMOTE ioctl.  Zmodem works but Kermit totally fails (the fork exits
-immediately with an exit code of 0, even though it didn't do anything).
-
-Mac OS X: Exactly the same sequence and results as NetBSD.
-
-Linux:  It did not execute the new ioctl at all; apparently the TIOC symbols
-are hidden or not exported or something.
-
-Where we stand:
- . Downloads don't work
- . Uploads got slow again
- . Kermit doesn't work at all as an external protocol
-
-Actually if I take the debugging out it goes fast, but it doesn't finish.
-
-All today's work on ttptycmd() looks like a dead end.  To roll back to
-yesterday:
-
-  cp ckutio.c-20070108 ckutio.c
-  cp ckupty.c-20070108 ckupty.c
-  cp ckupty.h-20070108 ckupty.h
-
-or to continue with today's:
-
-  cp ckutio.c-20070109 ckutio.c
-  cp ckupty.c-20070109 ckupty.c
-  cp ckupty.h-20070109 ckupty.h
-
-Comparing Monday's and Tuesday's pty-related code, the differences are:
- 1. Passing of function code to and among pty modules.
- 2. Skipping the TIOCSCTTY ioctl and the open("/dev/tty") test.
- 3. Attempting to put pty in TIOCTTY or TIOCREMOTE mode.
-
-Commenting out 2 and 3 should put us back where we were on Monday if the
-parameterization was done right.  And with this, on Solaris, downloading
-with Kermit external protocol works but slowly, 8K cps, with or without
-debugging.  Debug log does not show any obvious bottlenecks; select() takes
-anywhere between no time at all and 0.1 seconds to return.  If I increase
-the pty-net buffer size from 1K to 4K, the rate goes up to 55K cps.  If I
-make it 8K I get 136K cps.  With 16K I get 346K cps.  32K: 395K cps -- this
-last one isn't worth the doubling.  But at 24K I get 490K cps, sometimes
-twice that.  Let's stick with 24K for now.  Downloading with Zmodem (rzsz)
-works at the same rate, but now we're back to seeing the getty babble
-(Several "**B0800000000022d") at the end. 10 Jan 2007.
-
-Moving to Mac OS X, everything works the same as on Solaris, except I don't
-get the Zmodem getty babble there, not even with Omen rzsz.  Tested sends
-in both remote and local mode, the latter over a secure Kerberos 5 Telnet
-connection, using C-Kermit, rzsz, lrzsz, and crzsz, all good.  10 Jan 2007.
-
-Now we're back where we were yesterday morning, but with better throughput.
-The big issue then was receiving files.  But yikes, now it works!  Not only
-that, I got a transfer rate of 2.1M cps.  That's using Kermit protocol,
-streaming, and big (4K) packets.  Which didn't work before.  Not a fluke
-either, I uploaded bigger and bigger files up to 6MB, they all went
-smoothly, at rates between 1 and 2 MBps.  10 Jan 2007.
-
-Not so great in Zmodem land, however.  If I start the external-protocol
-receiver on the far end, escape back and start a Zmodem send... nothing.
-If I leave the remote C-Kermit at its prompt (where it supposed to recognize
-the Zmodem start string), still nothing.  On the other hand, if I do it
-with a script instead of by hand:
-
-  def xx output take blah\13, send /proto:zmodem \%1
-  
-it works, at least intermittently.  But that's in remote mode.  We won't be
-using this in remote mode.  In local mode, where we have a secure connection
-to another computer, it seems we can read from the pty and write to the net,
-but we time out waiting to read from the net; nothing arrives.  Well, we
-know that i/o works both ways, so there is some kind of screwup with the
-Zmodem protocol start itself.  Increasing the (still hardwired timeout) from
-5 to 22sec and driving the whole process with a script so as to avoid
-autodownload as well as manual dexterity effects...  It just sits there
-forever, way longer than 22 sec.  ^C'ing out, I see that sz was indeed
-started on the far end and the protocol was executing.  But it looks like
-the receiver (the one running under ttptycmd()) is getting trashed packets,
-because (a) it seems to be sending the same thing over and over again, and
-(b) sometimes it waits as long as 10 seconds before anything arrives from
-the remote.  Maybe I was too impatient; I interrupted it after 4 minutes but
-it seems to have been making some progress.  Whenever there was data
-available to read from the net, it was always 65 bytes, and it was not
-actually the same data over and over.  This is using lrz as the external
-protocol.  crz gets a bit farther.  In this case we read up to 24K at a
-gulp, but the amount varies a lot.  It looks like we took in about 1.2MB of
-Zmodem protocol data, but were only able to output the first 20K of the
-file.  Clearly there were lots of errors.  In the end, the crz exits with
-status 1 (failure).
-
-Anyway it looks like we're back at needing to find a way to accomplish
-something like TIOCREMOTE on the pty, which is where we came in.  10 Jan 2007.
-
-Without any way to make the pty transparent and flow controlled, it would
-seem to make sense to write to the pty in smaller chunks than we do to the
-net.  I left the read-from-pty-write-to-net buffer at 24K and changed the
-read-from-net-write-to-pty buffer to 48 bytes.
-
-Upload using lsz worked but took about 3 minutes.  Actually it didn't work.
-On the local end it seemed to work, but the file did not appear on the
-remote end.  Tried this several times, each time with different results,
-adding more debugging each time.  The problem this time was that the pty
-read could get EWOULDBLOCK.  Changed the code to not treat this as an error,
-now Zmodem uploads are solid again except I never got EWOULDBLOCK again
-either, even though I repeated the same upload about 1000 times (with
-throughput of over 2MBps even with debugging on), so the test for it has
-not been exercised.
-
-OK, uploads still work.  Back to downloading...  The very first pty read
-gets 0 bytes, followed by the fork test that shows that it exited with
-exit status 2. 
-
-Next we try starting sz with some different options on the far end:
-
- -q: quiet (no messages):
-     for some reason this gets totally stuck.
-     it looks as if this option is misdocumented;
-     sz seems to be sending the letter C (as in Xmodem 1K or whatever)
-
- -e: escape (all control chars):
-     first attempt to read pty finds the process gone with exit status 2.
-
- -k: send 1k blocks:
-     this one didn't stop immediately.  It reads 48 bytes from net, writes
-     48 to the pty with no error.  Then reads 21 bytes from the pty, writes
-     them to the net OK.  Then reads 48 bytes from net, writes them to pty OK,
-     reads 21 from pty, writes to net OK, etc etc...  It appears to have
-     worked but (final read from pty returned 0, fork test showed lrz exited
-     with status 0), but only 754 bytes were received from the net when the
-     file is 420K...
-
-Well this only goes to show that the faster we shove stuff into the pty, the
-worse it gets.  Zmodem downloads won't work unless we can make the pty
-transparent and flow-controlled.  So to summarize today's developments:
-
- . separated in/out buffer sizes
- . handled EWOULDBLOCK
- . found out that sz options don't help much
-
-11 Jan 2007.
-
-Next day.  This has got to be the most delicate code ever, it's like
-Whack-A-Mole, fix A and B pops up.  Even without touching it, something that
-worked perfectly a 2:00 doesn't work at all an hour later.  Maybe I could
-have used pipes instead of ptys, but pipes have problems of their own.
-There has to be a way to do this.  The telnet server, the SSH server, etc --
-they all run on ptys, and we can upload files to them with Kermit.  Why?
-Because Kermit puts its terminal into all the right modes using the
-time-honored methods of ttpkt() and ttvt().  Perhaps all we need is a copy
-of ttpkt() that operates on the pty.
-
-On that theory, let's go back to Kermit as the external protocol.
-It's important to suppress all messages and displays.  With that,
-uploads work fine, no hitches.
-
-Downloads:  We fail right away.  The debug log shows the Kermit program that
-we are starting in the pty says:
-
-  "" - Invalid command-line option, type "kermit -h" for help.
-
-But of course we are not giving it an invalid command-line option.
-Switching to gkermit for the external protocol, now we see that no matter
-command-line options we use, we read 0d 0d 0a from the pty and then the
-next time we go to read from the pty we get 0 bytes and waitpid() says the
-program has exited with status 1.
-
-Why should downloading be different from uploading?  ttptycmd has no idea,
-it does everything the same.  The only difference would seem to be which
-side sends first, but even that tends to get washed out by each program's
-startup messages.
-
-Downloading with Kermit worked 2 days ago, what's different now?  The buffer
-sizes.  Putting the net-to-pty back up to 24K (from 48 bytes)...  Now it
-works again.
-
-Conclusion: Kermit conditions the pty correctly, Zmodem does not.  Therefore
-ttruncmd() must duplicate what ttpkt() does.
-
-Or not.  Because rz works fine on ssh/telnet ptys too.  But not on our pty.
-lrz exits immediately with status code 2 = 01000 but there are no clues in
-the lrz.c source code, I don't even see this exit status set anywhere.
-Unredirecting stderr, I see that the error is "lrz: garbage on command line".
-
-Why do both Kermit and Zmodem sometimes think they are receiving an invalid
-command line?  If I could capture the garbage...
-
-Side trip #1: ("pty.log",O_WRONLY) gives "no such file or directory".
-Changed this to ("pty.log",O_CREAT,0644) and now it doesn't get an error,
-and it creates the file, but not with 0644 permissions, and with nothing
-written in it.  How come nothing works?
-
-Fine, the debug log shows that ttptycmd() receives the correct string
-(e.g. "lrz -v").  It passes it to do_pty() correctly, and do_pty() passes it
-to exec_cmd(), which runs cksplit() on it, coming up (in this case) with
-"lrz" and "-v", which is right, and then:
-
-    args = q->a_head + 1;
-    execvp(args[0],args);
-
-execvp() wants the args array to have a null element at the end.  cksplit()
-does indeed do that, or at least the code is there.  Added code to exec_cmd()
-to verify the argument list and that it is null-terminated.  So far it is.
-
-Anyway, we have traffic between the Zmodem partners, but no joy.
-Commenting out the bit that redirects stderr, now I can see it on my screen
-in real time:
-
-  lrz waiting to receive.Retry 0: Bad CRC
-  Retry 0: Got ERROR
-  Retry 0: TIMEOUT
-  Retry 0: TIMEOUT
-  Retry 0: TIMEOUT
-  Retry 0: TIMEOUT
-
-etc etc, forever.  Trying sz -e on the far end, I get:
-
-  Retry 0: Bad CRC
-  Retry 0: Garbage count exceeded
-  Retry 0: Garbage count exceeded
-  Retry 0: Garbage count exceeded
-  Retry 0: Garbage count exceeded
-  Retry 0: Garbage count exceeded
-  Retry 0: Garbage count exceeded
-  Retry 0: Garbage count exceeded
-  ...
-  Retry 0: Got ERROR
-  Retry 0: Bad CRC
-  Retry 0: Got ERROR
-  Retry 0: Got ERROR
-  lrz: xxufio.c removed.
-
-So apparently it's not a matter of escaping.  Trying some other stuff, I
-caught the command-line problem in the act:
-
-  lrz: garbage on commandline
-  Try `lrz --help' for more information.
-
-Debug log shows:
-
-  cksplit result[lrz]=1
-  cksplit result[-v]=2
-  exec_cmd arg[lrz]=0
-  exec_cmd arg[-v]=1
-  exec_cmd arg[]=2
-
-An empty string at the end instead of a null pointer.  I really do not see
-any way that could happen, but rather than dig into cksplit() again after
-all these years I added a test for this in exec_cmd(), which, of course
-after adding it, never encountered this behavior again.
-
-Fiddled with pty buffer size again.  Made it 512 bytes instead of 24K.
-Zmodem downloads are the same (Rety 0: TIMEOUT, over and over).  But I don't
-see what the problem is -- every time we receive n bytes from the net, we
-write n bytes successfully to the pty and there are no errors.  But it also
-looks like the remote sender is sending the file header over and over
-because it's not receiving an acknowledgment.  If we're not losing data,
-then maybe it's a transparency problem.
-
-Tried uncommenting the TIOCblah stuff I commented out before.  Now instead
-of only timeouts I get:
-
-  lrz waiting to receive.Retry 0: Bad CRC
-  Retry 0: Got ERROR
-  Retry 0: Bad CRC
-  Retry 0: Got ERROR
-  Retry 0: Bad CRC
-  Retry 0: Got ERROR
-  Retry 0: TIMEOUT
-
-which is odd because the TIOCREMOTE ioctl failed with errno 14, EFAULT,
-bad address, which should indicate it had no effect.  We're still receiving
-data from the remote in tiny chunks (from 12 to 65 bytes), apparently the
-same stuff (file header), and writing them to the pty successfully but
-nothing...
-
-Looked at cloning ttpkt() for the pty, but these stupid routines use global
-tty mode structs so it's not going to be easy.
-
-Well, we got exactly nowhere today, but I think I'll leave stderr as it is
-so users will see some feedback; no reason not to.
-
-WHY DO KERMIT DOWNLOADS WORK AND ZMODEM NOT?
-
-Is it 8-bit transparency?  Up til now I've been testing with text files.
-If I try to download a binary what happens?  Fails after 99 seconds.  Packet
-log from the far end shows that as soon as the first packet containing 8-bit
-data is sent, everything stops.  At least I got one of these:
-
-  17:23:56.475 exec_cmd arg[gkermit]=0
-  17:23:56.475 exec_cmd arg[-qr]=1
-  17:23:56.475 exec_cmd arg[]=2
-  17:23:56.475 exec_cmd SUBSTITUTING NULL=2  <-- the code I just added
-
-Doing this again shows the same thing on the near end.  All the 7-bit-only
-packets are sent and acknowledged OK.  Three 8-bit data packets arrive and
-nothing else happens after that.  This is with G-Kermit.
-
-The same thing happens with C-Kermit receiving.  But if I change C-Kermit's
-.kermrc to turn off streaming and use a short packet length:
-
-The transfer works, even though it's sending 8-bit bytes.  So the problem is
-not 8-bit data after all, per se.  Facts:
-
- . Kermit can receive streaming transfers of 7-bit files.
- . Kermit can not receive streaming transfers of 8-bit files.
- . Kermit can receive nonstreaming transfers of 8-bit files with short packets.
- . Kermit can receive nonstreaming transfers of 8-bit files with 1K packets.
- . Kermit can receive nonstreaming transfers of 8-bit files with 4K packets.
-
-So it's the combination of streaming and 8-bit data?  12 Jan 2007.
-
-As a test I made a new routine pty_make_raw() that does cfmakeraw() (a
-nonportable "POSIX-like" function known to be used on ptys in applications
-that do approximately what we're attempting).  Results:
-
- Solaris: errno 25 - inappropriate ioctl for device.
-
-This happens even when we try to get the terminal modes with tcgetattr(),
-which is completely nuts.  We pass it the file descriptor of the pty master,
-which is supposed to work.  But in Mac OS X, there are no errors.  But
-downloads still don't work; lots of errors but the pattern is different.
-Using a very small buffer:
-
-  Retry 0: Bad CRC
-  Retry 0: Garbage count exceeded
-  Retry 0: Garbage count exceeded
-  Retry 0: Got TIMEOUT
-  Retry 0: TIMEOUT
-  Retry 0: Bad CRC
-  Retry 0: Bad CRC
-  Retry 0: Garbage count exceeded
-  Retry 0: Garbage count exceeded
-  Retry 0: TIMEOUT
-  Retry 0: Got ERROR
-  Retry 0: TIMEOUT
-  Retry 0: Garbage count exceeded
-  Retry 0: Garbage count exceeded
-  Retry 0: Bad CRC
-
-Using a bigger buffer:
-
-  Retry 0: Garbage count exceeded
-  Retry 0: Garbage count exceeded
-  Retry 0: Garbage count exceeded
-  Retry 0: Garbage count exceeded
-  Retry 0: Garbage count exceeded
-  Retry 0: Garbage count exceeded
-  (several screensful)
-
-Various other combinations... Nothing seems to work.
-
-Insight: telnetd does exactly what we want to do, sort of.
-But it uses TIOCPKT, so every time it reads from pty, it receives
-one control byte and then the data bytes, which would complicate our
-buffering scheme considerably.  Anyway the TIOCPKT ioctl() fails on
-Mac OS X with 14 "Bad address".
-
-Also see: snoopserver.c (found in Google).  It seems to do things in a
-slightly different way -- it sets stdout to raw and then dups it to the
-slave side of the pty?
-
-Maybe it's a mistake to use the ckupty.c routines.  They are designed for
-creating and accessing an interactive session.  Maybe just copy one of the
-other programs.
-
-18 Jan 2007.  Tried going back to blocking rather than nonblocking reads
-to see if it would make a difference, after all the other changes.  Nope.
-OK, let's look at some of these other programs...
-
-snoopserver.c.  I don't know exactly what this is or where it's from or what
-platform it runs on and there are no comments to speak of, but it does
-approximately what ttptycmd() does.  To get a pty it uses openpty():
-
-  if (openpty(&pty, &tty, NULL, NULL, NULL) == -1)
-
-then creates a fork.  In the fork, it closes the pty (master) and
-manipulates the modes of the tty (slave), dups tty to be stdio, and then
-doex execv() on the command.  Meanwhile the upper fork closes the tty
-(slave), gets the attributes of stdin, using atexit() to have them
-automatically restored on exit.  Then it sets stdin to raw mode and enters
-the select() loop on stdin, the pty master, and the net.  It uses regular
-blocking reads.  It does not use TIOCPKT or anything like it.
-
-openpty() is supported on: Linux, Mac OS X, NetBSD, FreeBSD, ...
-openpty() is NOT supported on: Solaris, HP-UX, ...
-
- 1. Try copying the pty code, but keep everything else the same.
-
-I did this; it compiles and starts OK, upper fork (ttptycmd) debug log shows
-no errors, but nothing happens.  Logs show that the Kermit program that is
-started in the subfork seems to die as soon as it reaches eof on its init
-file.  The good news, at least, is that select() doesn't report report that
-the pty is ready to be read.  Clearly the file descriptors aren't being
-assigned as expected, or as before.
-  
-In ckupty.c getptyslave() dup2's the slave fd to 0 and 1.  The new code
-does exactly the same thing.  Debug log makes it look like the forked kermit
-is not receiving its command line.  But now I'm not even sure that the
-forked kermit started at all.  ps from another terminal doesn't show it.
-
-19 Jan 2007: Noticed that in snoopserver, the select() calls use standard
-input and output file descriptors, rather than the pty master.  Made that
-change...  In doing that I had to look at every file descriptor in every
-line of code and discovered a couple mistakes, fixed them, put back the
-original code but with the fixes, tried it, but no change; can upload OK but
-still can't download with Zmodem without lots of errors and ultimate
-failure.  Going back to the alternative version and trying to get the the
-file descriptors sorted out, now it appears that the external Kermit program
-never even starts in the lower fork.  After a bit more fiddling I sort that
-out, but now when the lower Kermit program goes to open "/dev/tty" it gets
-errno 6 "Device not configured".  Forcing it to use stdio with "-l 0", it
-gets past this and actually sends its first packet.  But the Kermit on top
-reads nothing from the pty.
-
-Next, I change the pty fd from STDIN_FILENO and STDOUT_FILENO to slavefd.
-No difference.  Next I comment out the dup2() calls.  This time I get some
-action.  The transfer starts, but only one packet comes.  Log shows that
-the lower Kermit sends its S packet.  The upper Kermit receives the ACK
-but the lower Kermit never gets it.  The write to the pty succeeds, no
-error.  Different combinations give different results.  If write to master
-and read from the slave, I get packets in both directions but tons of
-errors....  This happens only if I comment out the dup2()'s.
-
-25 Jan 2007: After leaving it sit for a while, and realizing that what I'm
-trying to do has to be possible because so much other software does the same
-thing (e.g. Telnet servers), I put things back to how they were originally
--- the upper fork (Kermit) uses the master and the lower fork the slave.
-The upper fork puts the master in raw mode, the lower fork puts the slave in
-raw mode.  The lower fork dup2's the slave fd to stdin/out.  Send file in
-remote mode using external Kermit: works OK but select() times out at the
-end.  This means that the self-contained pty code in ttptycmd() is sorted
-out -- all the file descriptors go to the right place, etc, and now we can
-use this routine as a testbed, rather than the original ckupty.c-based one.
-
-But send with lsz, csz, and regular rz: Nothing happens, times out after 0
-bytes of i/o.  Once again, Kermit works, Zmodem doesn't.  The reason for
-running Zmodem in a pty is so its i/o will work as it does on a terminal,
-no matter how it may fiddle the file descriptors.  So why don't we see a
-single byte come out?
-
-Commenting out pty_make_raw(), I get a successful Zmodem send using lsz.
-csz manages to get the filename across, but then gets stuck.  regular sz, on
-the other hand, works perfectly.  Testing csz by itself (not under Kermit),
-I see it fails in exactly the same way ("Got phony ZEOF", etc).  OK, forget
-crzsz.
-
-OK, let's move to local mode over a Kerberized Telnet connection...
-Uploading (sending) with external Kermit protocol... works.
-Downloading (receiving) with external Kermit protocol... works.
-Uploading with sz... works.
-Downloading with lrz...  Gets tons of errors and fails.
-
-Running pty_make_raw() on the slave but not on the master: no difference.
-Running pty_make_raw() on the master but not on the slave: no difference.
-
-Back where we started...  Either:
-
- . Zmodem is overdriving the pty, no matter what modes we put it in.  
- . It's a transparency problem.
-
-Theoretically we should be able to test these by using different sz switches:
-  -q:    quiet (should always use this)
-  -e:    escape all control characters
-  -B n:  Buffer n bytes (rather than whole file)
-  -L n:  Packet length
-  -l n:  Frame length (>= packet length)
-  -w n:  Window size
-  -4:    4K blocksize (doesn't help)
-
--q by itself doesn't help.
--q -e, this one worked but still got about 100 errors and was very slow.
--q -e -l 200 -L 100, failed fast and bad.
--q -e -w 1.  Failed quickly.
--q -e -w 1 -B 100.  Eventually failed.
--q -w 1, Eventually failed.
--q -l 1024, this gets much more errors, definitely need -e.
--q -e -l 1024, got pretty far before failing.
--q -e -w 1 -l 1024, also got pretty far before failing.
--q -e, this one got farthest of all, about 48K, before getting errors.
-
-In the latter combinations that work somewhat better, we always get up to
-16K, or 32K, or 48K, before the errors start coming out and piling up.
-Sometimes the errors are recoverable and we receive as much as 300K
-successfully before giving up.
-
-Now that we have data flowing pretty well (but not well enough), tried
-reinstating pty_make_raw(), but it hurt more than helped.
-
-As a sanity check, I tried transferring from the same host over the same
-kind of connection (Kerberized Telnet) directly to K95's built-in Zmodem
-protocol, and that worked fine.  So the problem is definitely in the pty.
-Or more precisely, where Kermit writes incoming net data to the pty master.
-
-26 Jan 2007: Tried changing the size of the net-to-pty buffer from 24K to
-1K.  Result: total failure.  Set both buffers to 1K.  Still total failure.
-Set both to 4K: now we get about 45K of data, then failure.  Put them both
-back to 24K, still fails totally -- the same code that worked pretty well
-yesterday.  Actually, no downloads work, not even Kermit, not even of
-text files.
-
-27 Jan 2007: Since I have not been able to find a way to make ptys work for
-this, I made a third copy of this routine, this time using pipes instead of
-ptys.  The disadvantage here is that if the external protocol does not use
-stdio, the pipes won't work, but one thing a time...
-
-Inferior Kermit starts in lower fork, but when it tries to send its first
-packet it gets errno=9 EBADF, Bad File Descriptor.  Substituting G-Kermit as
-the external protocol, which is simpler, reveals that the problem is that
-the external protocol gets errors when it tries to manipulate the its stdio
-file descriptors with ioctls, etc; these are not valid for a pipe.  The pipe
-mechanism itself works.  If I take out the test for ttpkt() failing in
-gkermit, the file transfer works OK.  Trying Zmodem... Sending works OK;
-receiving works a lot better than with ptys (it got 360K into the file
-before failing).  Making the buffers smaller, doesn't help.
-
-I'm starting to wonder if the problem might be in my buffering code, rather
-than in the pty or pipe interface...  Try making a version that does
-single-character reads and writes.
-
-This one reads the first packet from the lower Kermit and sends it.  It is
-recognized by the other Kermit, which sends an ACK.  We see the ^A of the
-ACK, but then select() times out on the next character -- OF COURSE: because
-at a lower level, it has already been read.  We have to check the myread
-buffer, and then call select() only if it's empty.  Making this change:
-
- . SEND with G-Kermit works (but very slowly).
- . SEND with lsz works but gets a lot of errors, eventually succeeds.
-
-Let's work our way back...  With the same changes to the buffered pipe version:
-
- . SEND with G-Kermit/streaming works (fast).
- . SEND with lsz works too (fast), but we get gubbish at the end.
- . RECEIVE with Kermit fails because "/dev/tty is not a terminal device".
- . RECEIVE with rsz... lots of errors ("garbage count exceeded") but succeeded.
-
-But maybe now we're seeing pipe artifacts, so going back one more step to
-the version that gets its own pty and starts its own fork:
-
- . SEND with G-Kermit/Streaming works (fast) but select() times out at the end.
-
-Another breakthrough: Moved the write pieces to below the read pieces.  This
-is what was preventing the buffer reset code from working -- with the writes
-done before the reads, we never catch up and can never reset the buffers.
-
- . SEND with G-Kermit/streaming works (fast) (but there's a pause at the end)
- . SEND with lsz works (fast) (but there's a pause at the end)
- . RECEIVE with rsz... lots of errors ("garbage count exceeded") and fails.
- . RECEIVE with Kermit -- nothing happens (it thinks it succeeded), then we
-     reconnect, terminal sees S packet and goes into autodownload
-
-From the log it looks like ttpkt() fails in the lower Kermit.  Switching
-this with the hacked G-Kermit...  it gets "transmission error on reliable
-link".  Tried again with real Kermit below, this time with "-l 0" and not
-streaming.  This was actually working, but slowly, I don't see any NAKs in
-the packet log, but then select() timed out.
-
-28 Jan 2007: Restored both the calls to pty_make_raw():
-
- . SEND with C-Kermit streaming works, but slow (54Kcps)
- . Ditto, but with debugging off -- hangs forever.
- . Ditto, but using G-Kermit instead of C-Kermit -- also hangs forever.
-
-Backed off on calling pty_make_raw().  Same thing.
-Reduced size of net-to-pty buffer.  Same thing.
-
-15 Feb 2007...  Decided to give up on this and publish it as is, in hopes
-that somebody with more experience with ptys can make it work, because I'm
-just going in circles.  So today I just have to get the code into shape so
-people could choose among the three alternative routines.  The second one,
-yttyptycmd(), is the one that uses openpty(), which is not portable, so it
-can be enabled only for Mac OS X, NetBSD, FreeBSD, and Linux, or by also
-defining HAVE_OPENTPY at compile time.  Anyway, if you build Kermit in the
-normal way, you get the regular behavior -- ttruncmd() is used to execute
-external protocols.  If you build it with -DXTTPTYCMD, you get the first
-version of ttptycmd(); with -DYTTPTYCMD the second, and with -DZTTPTYCMD the
-third.
-
-(Then some interruptions, then...)
-
-From Jeff, fix hostname comparison in X.509 certificate checking to work
-right in the case of names that contain no periods.  dNSName_cmp(): cl_ssl.c,
-21 Feb 2007.
-
-John Dunlap noticed some strange behavior when transferring files between
-home base and the EM-APEX oceanographic floats via satellite... long story,
-but every so often the transfer would get stuck for a long time, and it
-happened only when C-Kermit was sending a file and received two or more
-packets (Ack or Nak) back to back from the float.  Years ago I added some
-lookahead code to ttinl() to clear the input buffer of any interpacket junk
-so that, in the windowing case, we wouldn't be tricked next time around into
-thinking a packet was waiting to be read when there wasn't.  The code, which
-has been there for a while, was a bit fractured; luckily, it would be
-executed only when the debug log was active so it didn't have much effect.
-The problem was that if the SOP came immediately after the EOP, it could be
-missed because the loop read the next character before checking the current
-one.  Fixed by rearranging the loop.  Also I changed it so it would execute
-in all cases, not only when the debug log was active.  Also, cleaned up a
-bunch of confusing #ifdefs and removed some chunks that had been commented
-out for years, decades maybe.  ttinl(): ckutio.c, 21-22 Feb 2007.
-
-Added NOW keyword info to HELP DATE, plus a tip about how to convert to UTC;
-suggested by Arthur Marsh.  ckuus2.c, 22 Feb 2007.
-
-When an FTP client sends NLST to the server and no matching files are found,
-the server is supposed to respond with an error message on the control
-channel and nothing on the data channel.  However it seems that at least one
-server sends the error message back on the data channel, as if it were a
-filename ("/bin/ls: blah: No such file or directory"), and on the control
-channel there is no error indication ("226 ASCII Transfer complete").  At
-this point remote_files() has a listfile and, if a match pattern was given,
-it looks through list to see if any of the lines match the given filename,
-e.g. "blah".  This makes FTP CHECK give false positives.  The problem
-(diagnosed by Jeff) is that the match pattern was not given in this case, so
-it takes some random default action, resulting in the spurious success
-return.  Fixed by using the user's string as the pattern.  Not tested,
-however, since I don't have access to a server that behaves this way.
-ckcftp.c, 22 Feb 2007.
-
-If an external-protocol file transfer fails, don't print Kermit-specific
-hints.  ckuus5.c, 22 Feb 2007.
-
-One more time with ttinl().  Got rid of the "csave" junk, which never could
-have worked (which is no doubt why it was in a debugging section).  The
-problem was that saving the beginning of the next packet locally did not
-synchronize with the buffer clearing (ttflui()) done at a higher level,
-between calls to ttinl().  So now, the lookahead code, if it finds the
-beginning an as-yet unread packet, puts it back at the head of the input
-queue.  This way, if the protocol engine clears the input buffer, it will
-get the whole packet, not just the part after the SOH.  ckutio.c, 24 Feb 2007.
-
-From Steven M Schweda, Saint Paul, MN: adaptation of large file support to
-VMS (it was already possible to transfer large files in VMS C-Kermit but the
-file-transfer display and statistics were wrong).  And a minimal adaptation
-of the FTP client to VMS -- no RMS, no special VMS file stuff, Stream_LF and
-binary files only, developed and tested only with UCX.  SSL/TLS is
-supported.  The source-code changes are minimal; most have nothing to do
-with VMS, but with header files, prototypes, and data types (e.g. ftp_port
-int rather than short, various signed/unsigned conflicts) to shut up
-compiler warnings.  Some of these could be dangerous in terms of
-portability; I've marked them with /* SMS 2007/02/15 */.  ckcfns.c,
-ckcnet.h, ck_ssl.h, ckuus3.c, ckuus4.c, ckvfio.c, ckcftp.c, ckvker.mms
-(which was rewritten to actually reflect the source module dependencies),
-ckvker.com (also heavily modified).  ckvker.com (the "makefile" for VMS
-C-Kermit) now indludes "F" and "I" option flags for the large File and
-Internal ftp features, plus better handling of Vax/Alpha/IA64 distinction.
-26 Feb 2007.
-
-Changed NetBSD targets to include -DHAVE_OPENPTY and -lutil, so they
-can use openpty().  makefile, 26 Feb 2007.
-
-Built on Solaris without and with SSL OK.
-Built on NetBSD with Kerberos 5, OK.
-Built on Mac OS X 10.4, regular version, OK.
-Built on Mac OS X 10.4 with SSL and Kerberos 5, OK.
-
-On VMS 7.2-1/Alpha with MultiNet 4.4A-X...
-
-'CC' 'CCOPT' KSP:ckuus3
-%DCL-W-TKNOVF, command element is too long - shorten
- \CKUUS4.OBJ "'CC' 'CCOPT' KSP:ckuus4" "KSP:ckuus4.c KSP:ckcsym.h KSP:ckcdeb.h
- KSP:ckclib.h" "KSP:ckcasc.h KSP:ckcker.h KSP:ckcnet.h KSP:ckvioc.h"
-"KSP:ckctel.h KSP:ckuusr.h KSP:ckucmd.h KSP:ckuver.h" "KSP:ckcxla.h
- KSP:ckuxla.h KSP:ckcuni.h KSP:ckuath.h"
-
-The new rule for ckuus4.c was too long.  I removed one file from the
-dependency list (ckcxla.h, which will probably never change again) and that
-made it OK.  Built Nonet and Net versions OK, but this is without the new
-stuff.
-
-"make f" (large-file support) on VMS 7.2-1...
-'CC' 'CCOPT' KSP:ckuus4
-                    if (CKFSEEK(fp,(CK_OFF_T)j,SEEK_CUR) != 0) {
-........................^
-%CC-I-IMPLICITFUNC, In this statement, the identifier "fseeko" is implicitly
-declared as a function.
-
-Ditto for ftello and fseeko in various other places, and then fseeko and
-ftello come up up undefined at link time.
-
-The rule for ckcftp in "make i" (Internal FTP support) had the same problem.
-I removed ckcxla.h from its dependency list too, but "utime" comes up
-undeclared at compile time and undefined at link time.
-
-Verdict: neither one of the two new features can be used in VMS 7.2 or
-earlier, but the code still builds OK if you don't ask for them.
-
-VMS 8.3 on IA64...  Can't build anything:
-%MMS-F-BADTARG, Specified target (WERMIT) does not exist in description file
-
-27 Feb 2007: Changed CKVKER.COM to keep all its dependencies but use a
-shorter logical name (Steven M Schweda).  The problem on VMS 8.3 is that MMS
-now supports case-sensitive file systems, and so it can't find anything.
-Workaround: bypass MMS (include "m" in P1).  With this, "@ckvker.com ifm"
-builds OK on HP Testdrive, but I can't test the new features since outbound
-connections are not allowed there.  As for fseeko(), ftello(), and utime(),
-they simply are not availble prior to VMS 7.3.  It would probably be a good
-idea to test for this in CKVKER.COM, but actually it is possible to install
-newer C's and CRTLs on older VMS versions, so don't stand in their way.
-
-28 Feb 2007: With additional chages from SMS, and then some further
-adjustments, I was able to build the FTP version on VMS 7.2-1.  First I
-tested it with GET of a binary file, but it transferred it in text mode.
-After a few more attempts with PUT and GET, it crashed with "floating/decimal
-divide by zero" in ckscreen, ckuusx.c line 27859.  Of course, that's the
-listing line, not the source line, and I don't have a listing.
-
-To get a listing, I deleted CKUUSX.OBJ and then did:
-
-  $ make i "" "" "/LIST"
-
-Surprisingly, it recompiled everything.
-
-Anyway, the divide by zero happened in a section of code where the divisor
-was not checked, but it was a section of code we should not have been
-executing at all, since the file-transfer display was fullscreen, and this
-was in the "brief" section.  Anyway, I added the needed check.  Again, it
-recompiles everything.  Maybe there's no MMS on grumpy -- right, there isn't.
-
-ANYWAY... Try to GET a binary file like this:
-
-  binary
-  ---> TYPE I
-  200 Type set to I.
-  get gkermit
-  ---> TYPE A
-  200 Type set to A.
-  ---> SIZE gkermit
-  550 gkermit: file too large for SIZE.
-  GET gkermit (text) (-1 bytes)---> TYPE A
-
-Anyway... "get /binary gkermit" downloads it, seemingly correctly (the byte
-count is right).
-
-But "put /binary gkermit.;1" results in a 0-length GKERMIT file being sent.
-Here's the debug log:
-
-FTP PUT gnfile[DISK$MSA4:[C.FDC.NET]gkermit.;1]=1
-ftp putfile flg[DISK$MSA4:[C.FDC.NET]gkermit.;1]=0
-zltor fncnv[DISK$MSA4:[C.FDC.NET]gkermit.;1]=-1
-FTP PUT nzltor[GKERMIT]
-zfnqfp 1[DISK$MSA4:[C.FDC.NET]gkermit.;1]=675
-zfnqfp 2[DISK$MSA4:[C.FDC.NET]GKERMIT.;1]=31
-zfnqfp 3[DISK$MSA4:[C.FDC.NET]GKERMIT.;1]=31
-zrelnam result 2[gkermit.;1]
-ftp sendrequest restart[DISK$MSA4:[C.FDC.NET]gkermit.;1]=0
-openi name[DISK$MSA4:[C.FDC.NET]gkermit.;1]
-openi sndsrc=-1
-openi file number=2
-zopeni[DISK$MSA4:[C.FDC.NET]gkermit.;1]=2
-zopeni fp=0
-chkfn=2
-chkfn return=0
-zopeni fixed file format - using blk I/O
-zopeni binary flag at open=1
-zopeni ifile_bmode=1
-zopeni binary=1
-zopeni RMS operations completed ok
-openi zopeni 1[DISK$MSA4:[C.FDC.NET]gkermit.;1]=1
-ftpcmd cmd[PASV]
-FTP SENT [PASV]
-FTP RCVD [227 Entering Passive Mode (166,84,1,2,233,216)]
-initconn connect ok
-FTP SENT [STOR GKERMIT]
-FTP RCVD [150 Opening BINARY mode data connection for 'GKERMIT'.]
-doftpsend2 ftpcode[STOR]=150
-
-  Here is where the file is supposed to be read and sent but there is nothing
-  in the log between the "doftpsend2 ftpcode" line and the following line.
-
-rftimer status=1
-gftimer status 1=1
-gftimer status 2=1409025
-gftimer status 3=1409025
-gftimer s[0.000000]
-zclose n=2
-chkfn=2
-chkfn return=1
-zclose ZIFILE RMS operations completed ok
-ftp getreply lcs=0
-ftp getreply rcs=-1
-ftp getreply fc=0
-FTP RCVD [226 Transfer complete.]
-ftp getreply[226 Transfer complete.]=2
-doftpsend2 ok=0
-
-Everything is OK up until we go to send the file, then it behaves as if we
-got EOF immediately and so closes the data connection, and reports success;
-an empty copy of the file is left on the far end.
-
-Starting over with a text file....  PUT LOGIN.COM gets another divide by
-zero.  But it happened in the code I just fixed, which is impossible.  Swell.
-I recompiled everything and this time the upload worked, and downloading it
-again worked too.
-
-But a binary file still can't be uploaded.  Trying to upload a text file
-after doing this seems to succeed (reports the right number of bytes sent)
-but nothing appears on the far side.
-
-SUMMARY:
-
-  To download a text file: GET /ASCII blah.txt    (/ASCII is optional)
-  To download a binary file: GET /BINARY blah.bin (/BINARY is required)
-  To upload a text file: PUT blah.txt             (/ASCII switch not needed)
-  To upload a binary file: PUT /BINARY blah.bin   (doesn't work)
-
-Problems:
-  . Why doesn't BINARY "stick"?
-  . Why don't binary uploads work?
-
-The culprit seems to be the VMS version of zxin().  In the FTP module,
-zxin() is called only when sending binary files.  In VMS, zxin() is just
-a front end for C-Library fread().  It probably needs to do just do
-zminchar() in a loop, like binary mode does, but calling zzout instead
-of xxout.  Or something like that.  FINISH THIS TOMORROW (debug on grumpy).
-
-2 Mar 2007: New logs from John Dunlap.
-
-ema-1636-log-0175.dbg: C-Kermit uploads a short file. It receives an Ack for
-the Z packet it just sent, tailgated by the beginning of a Nak for the next
-packet.  When the second SOH is encountered, it is put back in the myread
-queue.  Then the protocol engine, to which we return the Ack, says, "I have
-the packet I wanted so I'm clearing the buffer", and away go the first two
-bytes of the Nak from the myread buffer.  Then, having just received the Ack
-of our Z packet, we send our B, and go to read the reply.  in_chk finds 0 in
-the myread buffer (which we just cleared) and 6 waiting to be read from the
-comms channel, which it does, obtaining the remaining 6 bytes of the Nak,
-which it properly discards.  (The reason this is proper is that, having
-already received the Ack for the last packet it sent, no Ack or Nak that
-arrives subsequently -- in the non-windowing case -- could possibly affect
-what it does next.)  Since it hasn't yet found a good packet, it keeps
-reading, and now it finds the Ack to the B, as soon as it showed up.  This
-is how it's supposed to work.  No time was lost because of anything that
-C-Kermit did.
-
-ema-1636-log-0174.dbg: C-Kermit uploads a short file. It sends Data packet
-#3 and receives the Ack followed immediately by the first 3 bytes of a Nak
-for packet 4.  When it gets to the SOH of the second packet, it pushes it
-back in the queue.  Again, input() flushes the input buffer (myread queue
-and device buffer).  C-Kermit detects EOF on the file it is sending, and
-sends the Z packet.  Then it reads the remaining bytes of the Nak,
-which it discards, and then it finds the Ack for Z which comes in 23 seconds
-later, sends the B, gets a Nak for the B, sends the B again, gets the Ack
-for the B 4 seconds later, and done.  Again, it's working right and losing
-no time.
-
-The question remains: what would happen if the protocol engine did not clear
-the buffer?  Would ttinl() retrieve all packets in sequence even when they
-come back to back?  To test this, I had C-Kermit send a file using 30 window
-slots and observed the stream of Acks in the reverse direction:
-
-  HEXDUMP: mygetbuf read (16 bytes)
-  01 25 23 59 2f 52 39 0d | 01 25 24 59 2b 26 31 0d  .%#Y/R9. .%$Y+&1.
-  ttinl lookahead my_count=9
-  ttinl lookahead removed=^M
-  ttinl lookahead pushback SOP=^A
-  HEXDUMP: ttinl got (7 bytes)
-  01 25 23 59 2f 52 39    |                          .%#Y/R9
-  RECEIVE BUFFERS:
-  buffer inuse address length data type seq flag retries
-     0     1     29212 9667     0   Y    3     0
-  [\ 1%#Y]
-  ...
-  in_chk my_count=8
-  ...
-  ttinl lookahead my_count=1
-  ttinl lookahead removed=^M
-  HEXDUMP: ttinl got (7 bytes)
-  01 25 24 59 2b 26 31    |                          .%$Y+&1
-  RECEIVE BUFFERS:
-  buffer inuse address length data type seq flag retries
-     0     1     29212 9667     0   Y    4     0
-  [\ 1%$Y]
-
-Here we can see that the pushed-back SOH was properly retrieved next time
-around, and the tailgating Ack was not lost.  This scenario repeats itself
-212 times in the log, and there are no screwups.
-
-Back to VMS FTP...  The problem with sending binary files is that zxin()
-uses C-Library fopen()/fread() instead of RMS, so it can't access the input
-file, which was opened by zopeni(), which is totally RMS-ified in VMS
-C-Kermit.  For VMS only, I replaced the zxin() loop by a zminchar() loop
-like the one used in text mode, except without the character set or
-record-format conversion.  Tested by PUT /BINARY of some binary files, which
-worked fine.  ckcftp.c, 2 Mar 2007.
-
-Next problem...  VMS C-Kermit ftp client sending binary files in text mode.
-Variation 1: We just send the file.  zopeni() is supposed to detect that
-it's a binary file and automatically set the mode.  And it does:
-
-  zopeni fixed file format - using blk I/O
-  zopeni binary flag at open=0
-  zopeni ifile_bmode=1
-  zopeni binary=0
-  zopeni autoswitch from TEXT to BINARY
-  zopeni RMS operations completed ok
-
-but then in gnfile():
-
-  if (!server || (server && ((whatru & WMI_FLAG) == 0)))
-    binary = gnf_binary;       /* Restore prevailing transfer mode */
-
-Well, since VMS sets text/binary mode automatically when sending files,
-this code can (and should) be skipped in VMS.  gnfile(): ckcfns.c, 2 Mar 2007.
-
-Variation 2: BINARY or SET FILE TYPE BINARY doesn't force binary mode.  But
-SET FTP TYPE BINARY does.  But BINARY does indeed call doftptyp() so what's
-the problem?  We do indeed set ftp_typ to 1 but it gets reset somewhere
-before we call zopeni().  But then zopeni() puts it back to 1.  Tracing
-through a transfer, it looks like all of this works right, it's only that
-the file transfer display says TEXT when the transfer is really in binary
-mode.  This is because screen() is called before openi().  I wonder if we
-can call scrft() from the ftp module...  No, that would be too easy.  OK,
-sendrequest calls openi() and sets the file mode; putfile() calls
-screen(SCR_FN), which prints the transfer mode.  But putfile calls
-sendrequest() after it puts up the screen that says the file type.  So it
-looks like sendrequest() has to call screen(SCR_FN) again if it changes the
-file type.  OK, that did it.  ckuusx.c, ckcftp.c, 2 Mar 2007.
-
-The BINARY and TEXT (ASCII) commands do not inhibit automatic type switching
-in VMS.  They don't in Unix either.  They never have.  Should they?  I think
-so, otherwise what good are they?  Plus we want the Kermit FTP client to
-behave like the others.  I added code for this but it doesn't work, due to
-the layers and layers of text/binary detection and switching and
-if-this-but-then-if-that...  Anyway, no harm done.  The normal rule is:
-when you PUT a file, Kermit figures out on a per-file basis whether to use
-text or binary mode unless you include a /TEXT (/ASCII) or /BINARY switch
-in the PUT (or MPUT) command.  ckuus[r3].c, ckcftp.c, 2 Mar 2007.
-
-Wed Mar 7 16:21:13 2007 WROTE SHORT TEST PROGRAM for ttruncmd (the openpty
-version) on Mac OS X.  On dulce: ~/kermit/ttpty.c / ttpty.sh.  It starts the
-external protocol in the lower fork.  The command to run is a command-line
-argument.  Sending and receiving files with Kermit works OK.  But again, the
-standalone program totally fails when I use sz or lsz as the external
-protocol.  So it looks like we can rule out any environmental effects of
-running the code inside C-Kermit.
-
-Mon Mar 12 16:52:20 2007: Put some effort into making ttpty.c more useful;
-added a debug log.  Found that for some reason, at least on Mac OS X,
-select() always timed out at the the end.  I added a SIGCHLD alarm and that
-seems to handle the fork exit condition very nicely.  Now we can send (say)
-a 3MB file at good speed on Ethernet (1Mcps) considering the debugging, etc,
-and it terminates instantly.  But when sending a file into ttptycmd (with
-"gkermit -r"), things go wrong at the end -- the Z packet is never
-acknowledged.  This is reproducible.  Maybe this is a good lead....  The log
-shows that select() timed out, even though the gkermit fork had not yet
-exited (or finished).  It looks like gkermit sent the Ack, ttpty.c read it
-from the pty and sent it out the net:
-
-  0003: read pty=8                <-- read Ack from pty
-  0003: loop top have_pty=1
-  0003: loop top have_net=1
-  0003: FD_SET pty_in
-  0003: FD_SET ttyfd in
-  0003: FD_SET ttyfd out=8
-  0003: nfds=5
-  0003: select=1
-  0003: FD_ISSET ttyfd out
-  0003: write net=8               <-- send ack to net
-  0003: loop top have_pty=1
-  0003: loop top have_net=1
-  0003: FD_SET pty_in
-  0003: FD_SET ttyfd in
-  0003: nfds=5
-  0009: select=0
-  0009: select timeout - have_pty=1
-
-But Ack never arrived.  This is a streaming transfer.  But nope, streaming
-is not the problem.  If I disable streaming ("gkermit -Sr"), we hang in in
-the middle of sending the data.  If I use small packets, we don't hang:
-1000 is OK, 2000 is not.  In fact, the cutoff is 1024.  OK, TBC...
-
-Wed 14 Mar 2007: Receiving a file thru ttpty "gkermit -e 1200 -Srd"
-produces a debug log that shows that gkermit gets a lot of EAGAIN errors
-when it tries to read from its stdin.  In fact, it takes 6 tries (read()
-calls) to read the S packet (27 bytes).  Then when the first data packet
-arrives (1200 bytes), read() never returns even one single byte.  The
-timeout interval is 15 seconds and it times out repeatedly.  Added a
-primitive hex dump to the ttpty debug log for each read/write (showing only
-the first 24 characters and the last character, so it fits on one line).
-Tried uploading a file.  The S, F, and A packets (short) are received and
-Ack'd OK, but then ttpty select() times out, never receiving even one byte
-from the D packet.  Clearly, when the pty driver receives a burst of > 1K
-bytes, stops working.  As before, if I limit the packets to < 1K, it works
-fine.
-
-Can I send an 8-bit binary file?  Nope.  ttpty reads the binary data just
-fine from the net and writes it exactly as it was received to the pty, but
-the first time we write an 8-bit byte, we never hear back from the PTY
-again.  But the log shows that when the initial 7-bit packets from the pty,
-it looks like the PTY is not in rawmode, because these packets end with ^J
-rather than ^M.  Calling pty_make_raw() on the masterfd and slavefd
-explicitly, however, doesn't change anything.  It doesn't matter if I do
-this in the lower fork or the upper fork.  So maybe it's the actual
-semantics of pty_make_raw() that are wrong.
-
-Thu 15 Mar 2007: Went thru all the terminal mode flags in Mac OS X; didn't
-help.  Changed hex dump to show whole packet.  Put hex dump routine in a
-private copy of G-Kermit.  Tried to transfer an 8-bit file, logging both
-ttpty and gkermit.  Compared what ttpty received on stdin with what it sent
-to the pty (same) and what was received by G-Kermit (same).  Then I realized
-that my little test program was not putting its controlling terminal into
-raw mode; when I did that, I could upload binary files (streaming, 2MB/sec).
-And with Zmodem too (with rz; lrz doesn't work for some reason).  Looking
-back at the original in ckutio.c, I see that ttptycmd() never called
-ttpkt().  Maybe that was the trouble all along.  (Yup, but maybe not the
-whole trouble.)
-
-Moving back to C-Kermit and the original ttptycmd() routine, adding the call
-to ttpkt(), and stripping out a lot of cruft, and moving the pty_make_raw()
-code to ckupty.c, Kermit uploads and downloads (streaming) work fine in
-Solaris.  Zmodem sends a file, but then the transfer hangs at the very end,
-as if the signoff protocol were lost.  This happens on Solaris.  If I move
-back to Mac OS X, everything works just fine.  Then, making a Kerberized
-connection from the Mac to NetBSD, I can send files from the Mac with both
-Zmodem and Kermit.  Receiving...  Kermit OK.  Zmodem...  Nope.  "rz:
-Persistent CRC or other ERROR" (and created a 265MB debug.log!)
-
-Fri 16 Mar 2007: ttptycmd() was for sending files with Zmodem across
-encrypted connections.  But it occurred to me that it's necessary for
-clear-text connections too; e.g. Telnet, where 0xff has to be doubled.  Of
-course Zmodem doesn't do that itself, so there's no way Zmodem external
-protocol could work when executed over a Telnet connection, and in fact
-it doesn't.  I wonder why I ever thought it did.
-
-Wed 21 Mar 2007: Back to where we left off a week ago.  Trying C-Kermit's
-ttptycmd() on the Mac again, in remote mode:
-
- . G-Kermit send txt (kst): OK  832Kcps  
- . G-Kermit recv txt (kr):  OK  425Kcps  
- . G-Kermit send bin (ksb): OK 1000Kcps  
- . G-Kermit recv bin (kr):  OK  188Kcps  
-
-And Zmodem:
-
- . sz txt (zst): OK  563Kcps  
- . sz bin (zsb): OK  714Kcps  
- . rz txt (zr):  OK  863Kcps  
- . rz bin (zr):  OK  198Kcps  
-
-So in remote mode, everything works.  Now let's try a clear-text Telnet
-connection...
-
- . G-Kermit send txt (kst): OK  841Kcps
- . G-Kermit recv txt (krt): OK  391Kcps
- . G-Kermit send bin (ksb): OK  811Kcps
- . G-Kermit recv bin (krb): OK  171Kcps
-
-And Zmodem over the same clear-text telnet connection:
-
- . sz txt (zst): OK  91Kcps (*)
-
-Kermit is sending sz messages like "sz 3.73 1-30-03 finished." to the
-host, which tries to execute them, after the transfer is finished.
-Of course "sz" is a command, but:
-
-  sz: cannot open 3.73: No such file or directory
-  sz: cannot open 1-30-03: No such file or directory
-  sz: cannot open finished.: No such file or directory
-
-Did I lose that code that dis-redirects stderr when I went back to using the
-pty code from the ckupty module?  No, it's there and it's being executed.
-Apparently the copy of sz I have is writing its "finished" message to stdout
-because "sz blah 2> /dev/null" does not suppress it.  Starting again with
-lsz instead of sz:
-
- . sz txt (lzst): OK  413Kcps
- . sz bin (lzsb): OK  FAILED (*)
- . rz txt (lzrt): OK  
- . rz bin (lzrb): OK
-
-(*) Sigh.  Using lsz, we get "garbage count exceeded" errors and eventual
-failure.  But using regular sz, we get the extraneous message that starts
-sz on the far tend, and the resulting getty babble.
-
-But even without changing the code, it will work one minute, and then fail
-consistently the next.  For example, I was able to send files with sz
-successfully over and over, but with the getty babble at the end.  Then,
-after trying lsz and then going back to sz, every attempt at sending a file
-quits with "Got ZCAN".  The difference has to be that Kermit always does at
-least some minimal encoding of C0/C1 control characters such NUL and DEL and
-IAC, and I doubt that Zmodem does.
-
-http://zssh.sourceforge.net/ says:
-
-  If file transfer is initiated but never completes (ie a line like :
-
-     Bytes Sent:      0/    513   BPS:0        ETA 00:00  Retry 0: Got ZCAN
-
-   can be seen, but transfer never completes), chances are the pty/tty on one
-   of the systems are not 8-bit clean.  (Linux is 8-bit clean, NetBSD is not).
-   Using the -e (escape) option of rz should solve this problem.
-
-It doesn't, at least not with lrz.  And yes, the receiving end happens to be
-NetBSD.  But it looks like the zssh people have been down this road too.
-
-But with rz and sz, it worked.  Once.  Twice.  Three times.  But of course,
-with the getty babble at the end.  This can be taken care of by doing:
-
-  rz -eq ; cat > foo
-
-which puts "sz 3.73 1-30-03 finished" and any other messages in foo (but you
-have to type ^D to finish the cat).  Using this method I was also able to
-send an 8K binary file that contained a test pattern of all 256 possible byte
-values.  Then I tried a 3MB binary executable.  All OK.  So here we go again:
-
- . sz txt (zst): OK
- . sz bin (zsb): OK
- . rz txt (zrt): 
- . rz bin (zrb): 
-
-Downloading fails about halfway through a fairly large file.  I tried an
-even bigger file, guaranteed to be 100% ASCII; same thing -- halfway
-through: "rz: Persistent CRC or other ERROR".  But it worked with a smaller
-version of the same file (82K versus 2MB).  Tried again with the bigger
-version, it failed in exactly the same way at exactly the same spot: byte
-number 1048320.  But this is just ASCII text so it can't be a transparency
-problem.  Substituting another plain ASCII file of the same size but totally
-different contents, it doesn't fail (2.36MB).  Back to the previous file, it
-fails again, but in a different spot (832960).  So it's not totally
-deterministic.
-
-To round things out, I tried downloading the binary test-pattern file; it's
-only 8K.  This failed.
-
-  -4, --try-4k                go up to 4K blocksize
-  -B, --bufsize N             buffer N bytes (N==auto: buffer whole file)
-  -e, --escape                escape all control characters (Z)
-  -E, --rename                force receiver to rename files it already has
-  -L, --packetlen N           limit subpacket length to N bytes (Z)
-  -l, --framelen N            limit frame length to N bytes (l>=L) (Z)
-
-Tried again with "sz -L 256 -B 256 -4aeq".  Doesn't change anything.
-
-NOTE: Mac OS X rz 3.73 1-30-03 does not support -e.
-NetBSD rz 0.12.20 does support -e.
-
-Thu 22 Mar 2007: It occurs to me that ttpkt() might still be a problem;
-maybe it's the network connection and not the pty that is not transparent
-enough.  To test this theory I did "stty raw ; stty -a" and then copied all
-of the flag values into ttpkt in the BSD44ORPOSIX section:
-
- . rz txt (zrt): OK (2.36MB file, worked 2 out of 3 times)
- . rz bin (zrb): "rz: Persistent CRC or other ERROR"
-
-A little more fiddling with the flags and I got the 8K binary test pattern
-to SEEM to download OK (in the sense that rz gave a 0 return code) but the
-file itself was truncated, always at 224.  If I changed the test pattern
-file to not include any bytes with value 224 (0xe0) or 255 (0xff), the
-download worked.  So we have a transparency problem somewhere.  The debug
-log shows that all byte values are being received from the network correctly
-so the problem has to occur when we try to feed them to the pty.
-
-But no amount of twiddling with the termios flags seems to let these
-characters pass through.  Of course, since they are not in the C0 or C1
-control range, "sz -e" doesn't quote them (which it does by prefixing with
-Ctrl-X and then adding 0x40 to the byte value so (e.g.) NUL becomes ^X@.
-Note that 255 does not cause problems because it coincides with the IAC
-character; the remote Telnet server doubles outbound IACs, and Kermit's
-ttinc() undoubles them automatically (as the log shows).
-
-Trying to send a different file (a C-Kermit binary) shows that 255 is the
-real killer; the file is truncated where the first one appears (at about
-6K), even though some 224's precede it.  Going back to the remote-mode test,
-I see the same thing happens with the binary test-pattern file, if I send it
-from K95 direct to rz-under-C-Kermit-in-remote-mode.  So it has nothing to
-do with C-Kermit having a network connection.  Yet if I send the same file
-direct from K95 to rz, it goes OK and the result is not truncated, so it's
-not Zmodem either.  The data arrives to C-Kermit intact, so the failure is
-definitely in writing it to the rz process through the slave and master ptys.
-
-BUT if I send the same file from K95 to rz-under-ttpty, that works.  What's
-the difference?  Suppose I just transplant ttpty literally into C-Kermit...
-It makes no difference.  When receiving the test-pattern, it truncates it
-in exactly the same place.
-
-Well, all this is on Mac OS X.  What if I move it to a different platform?
-OK, building on Solaris and following the exact same procedure, ttptycmd()
-doesn't even use the network connection.  I think that's because rzsz on
-Solaris is hardwired to use the controlling terminal and can't be
-redirected, even in a pty?
-
-Moved to NetBSD.
-
- . sz txt (zst): Failed ("Got ZCAN")
- . sz bin (zsb): 
- . rz txt (zrt): OK
- . rz bin (zrb): 
-
-Well, this is a big mess.  Sending doesn't work (or sometimes it does but
-reports that it didn't).  Receiving...  well, actually it's the same thing;
-the file is completely transferred but then the final protocol handshake is
-lost.  The local C-Kermit returns to its prompt, but rz is still running:
-
-  Retry 0: Got TIMEOUT
-  Retry 0: TIMEOUT
-  Retry 0: Got TIMEOUT
-  Retry 0: TIMEOUT
-  Retry 0: Got TIMEOUT
-  Retry 0: TIMEOUT
-  Retry 0: Got TIMEOUT
-  Retry 0: TIMEOUT
-  Retry 0: Got TIMEOUT
-  Retry 0: TIMEOUT
-  Retry 0: Got TIMEOUT
-
-I don't see how that is even possible.  Even after I exit from Kermit the
-messages keep coming, even though ps doesn't show the rz process anywhere.
-Looking at the code, I see a place where end_pty() was still commented out
-from the ttpty.c episode, I uncommented it.  But still:
-
- . sz txt (zst): Fails ("Got ZCAN")
- . sz bin (zsb): Fails instantly (but with no diagnostic)
- . rz txt (zrt): OK
- . rz bin (zrb): Fails with tons of "Bad CRC", "Gargage Count exceeded"
-
-Conclusion for the day: I think this is hopeless.  Even if I can get it to
-work somewhere, the results depend on the exact Zmodem software, how it uses
-stdin/out vs stderr versus getting its own nonredirectable file descriptor,
-versus the Zmodem version on the other end and which options are available
-on each, versus the pty and select() quirks on each platform, and on and on.
-It will be so hard to explain and to set up that nobody would ever use it.
-It would be better to just implement Zmodem internally.
-
-Fri 23 Mar 2007: Went back to the small test program, ttpty.c.  Tried
-setting both the master and the slave pty to rawmode, even though I have
-never seen any other software that did this.  I had it receive the binary
-test pattern file; it worked.  I made a bigger test-pattern file, 3MB,
-containing single, double, and triple copies of each byte in byte order and
-in random order, this one was accepted too.
-
-So it would seem that the ckupty.c module is something to avoid after all.
-It's full of stuff I don't understand and probably should not undo.  So
-changing C-Kermit's ttptycmd() to manage its own pty again, using openpty()
-(which is not portable), I got it all to work in remote mode: Kermit
-text/binary up/down and Zmodem text/binary up/down.  But in local mode on
-the client side of a Telnet connection...
-
-  zst: OK, but we still get the getty babble at the end that starts sz.
-  zsb: OK, ditto.  This is with the 3MB test-pattern file.
-  zrt: Not OK -- "Persistent CRC or other ERROR"
-  zrb: Not OK -- got the cutoff at 224 again "Persistent CRC or other ERROR"
-
-It's close.  But actually this was still with USE_CKUPTY_C defined.  When I
-undefined it, it was back to being totally broken.  Start over.  (Check the
-new cfmakeraw() code.)
-
-Tue 27 Mar 2007: Starting over.  Back to ttpty.c.  Let's verify, VERY
-CAREFULLY, that it really does work, using the most stressful of the four
-tests: sending the big (3.2768MB) binary test pattern from K95 into rz
-through ttpty, logging everything.  ttpty definitely receives the big file
-smoothly with no errors or hiccups when I have it set to use the master side
-of the pty for i/o.  The application program (Zmodem in this case) runs on
-the slave, and the network and/or control program communicates with the
-master.  This implies that Zmodem controls the terminal modes of the slave,
-and ttpty should be concerned with those of the master.  Doing it this way
-in ttpty confirms this.
-
-Fine.  But if I tell ttpty to SEND a file with sz, nothing happens.  Ditto
-with lsz.  Select times out waiting for input from the pty.  But if I
-manually tell K95 to RECEIVE /PROTOCOL:ZMODEM it works OK.  Somehow sz's
-initial B000000 string is being swallowed somewhere, and it's waiting for
-a reply from the receiver.  sigh...  But "ttpty gkermit -s filename" works
-fine.  What's the difference?  It has nothing to do with stdout vs stderr;
-sz is not writing to stderr at all.  Is it some timing thing between the
-forks?  Aha.  It's that I change the modes of the pty master in one fork
-while sz is already starting in the other fork.
-
-OK, good, now for the first time we have Kermit and Zmodem both able to
-upload and download a large worst-case binary test-pattern file... in
-remote mode.  Now taking today's lessons and fitting them back into
-C-Kermit so I can try it local mode...
-
-Using G-Kermit as the external protocol, first in remote mode...  All good:
-text/binary up/down.  The "halting problem" is solved by SIGCHLD, which
-catches fork termination instantly and lets ttptycmd() know there is no more
-pty.  Zmodem:
-
-  zst: OK
-  zsb: OK
-  zrt: OK
-  zrb: OK
-
-That's a first.  Next, repeat in local mode, in which C-Kermit is the client
-and has made a Telnet connection to another host over a secure (Kerberos V)
-connection:
-
-  kst: OK     zst: ...
-  ksb: OK
-  krt: OK  
-  krb: OK
-  
-It seems we can never end a day on a high note.  Somehow I seem to have
-broken regular internal Kermit protocol transfers over encrypted connections
--- the en/decryption engine loses sync.  But they still work OK over a
-clear-text Telnet connection.
-
-Today's code in ~/80/dulce.tar (27 Mar 2007).
-
-Added makefile target solaris10g+openssl.  Gathered all the standard CFLAGS
-for Solaris into cdcdeb.h so they don't have to be included in every single
-makefile target for Solaris.  On local Solaris 10 host OpenSSL is in
-/opt/openssl-0.9.8e/.  Tried the new makefile target, works OK.  Also made
-solaris10+openssl for Sun CC, but couldn't test it because I can't find any
-Solaris 10 host that has Sun CC.  Built with gcc at another site that has
-OpenSSL 0.9.8f-dev, all OK.  ckcdeb.h, makefile, 24 Jun 2007.
-
-It occurs to me that Kermit transfers on secure connections might have been
-broken by the changes I made back in February to ttinl() for John Dunlap.
-Here, for the first time, we invoke myunrd() to push a byte back into the
-input queue, and there is also some funny business with "csave", which
-changed, and which an old comment notes that it has to be treated specially
-when encrypting.  So it could be that the broken Kermit transfer has nothing
-to do with the work on external protocols, and that putting back the
-previous ttinl() will fix it.  But now I can't seem to make a Kerberized
-connection from Panix to Panix, even though I can make one from Columbia to
-Panix.  This means I have to build a Kerberized binary from the current
-source code on either Solaris or Mac OS X.  Trying Solaris
-first... [~/solaris9k5/mk5.sh] This didn't work the first time due to
-undefined krb5_init_ets, which is referenced if MIT_CURRENT is not defined
-(it should be for Kerberos 5 1.05 and later and we have 1.42 here), tried
-again with -DMIT_CURRENT=1...  Nope, that one totally blew up in ck_crp.c.
-Later, Jeff says krb5_init_ets is a no-op in Kerberos 1.4.x and later,
-so I added an #ifdef (NO_KRB5_INIT_ETS) for skipping it; now it builds and
-runs OK.  ckuath.c, makefile, 9 Jul 2007.
-
-Meanwhile, using C-Kermit on Mac OS X, which makes the Kerberized connection
-just fine, but still has the problem transferring files over it.  Packet log
-shows:
-
-  s-00-01-^A9 Sz/ @-#Y3~Z! z0___F"U1@A^M 
-  r-00-01-^A9 Y~/ @-#Y3~^>J)0___J"U1@I
-  s-01-01-^A(!Fx.x)(V^M
-  r-xx-08-<timeout>
-  S-01-08-^A(!Fx.x)(V^M
-  r-xx-08-<timeout>
-  S-01-08-^A(!Fx.x)(V^M
-  r-xx-16-<timeout>
-
-Note that S packet is sent, received, and Ack'd OK.  The F packet is sent but
-is never Ack'd.  Tried this several times and noticed that it's just
-receiving that is screwed up, not sending.  After ^C'ing out of the
-transfer, I can still type commands, and they are executed on the far end,
-but the results coming back are gibberish.  Mon Jul 9 16:08:22 2007 (come
-back to this later... substitute Dev.27 ttinl for current one and see if
-the problem goes away, and if so, conditionalize the new code for clear-text
-connections).
-
-Built C-Kermit with Kerberos 5 on Solaris with a version of ckutio.c that
-uses the old ttinl() and transferred a file OK over a Kerberized connection.
-So now it's just a matter of reconciling the old and new ttinl.  The easiest
-way to do this is to have new ttinl() chain to old ttinl() if the connection
-is encrypted, which is what I did and it works fine.  At some point the two
-versions of ttinl() should be reconciled.  ckutio.c, 12 Aug 2007.
-
-There was a function, islink(), used in only one place (ckuus6.c) that had
-the same name as a commonly used scalar variable, and it was missing a
-prototype.  Changed its name to isalink() and added the prototype (Unix
-only), ckuus6.c, ckufio.c, ckcdeb.h. 12 Aug 2007.
-
-Revisiting the ASCII and BINARY top-level commands, which are supposed to
-be like in other FTP clients, but don't seem to have any effect.  I added a
-new routine to the FTP module, doftpglobaltype(), that sets the global,
-sticky, permanent transfer mode (ASCII or BINARY) (TENEX could be added to
-if anybody asks).  These commands (now that they work) are different from
-SET FTP TYPE { ASCII, BINARY }, which set the *default* transfer mode when
-automatic switching fails for a given file.  ckuusr.c, ckcftp.c, 12 Aug 2007.
- (notify: Matt <mlist@cmcflex.com>)
-
-Even though the code hasn't changed, suddenly we're getting:
-
-  "ckuusx.c", line 5682: warning: implicit function declaration: tgetent
-  "ckuusx.c", line 6183: warning: implicit function declaration: tgetstr
-  "ckuusx.c", line 6262: warning: implicit function declaration: tputs
-  "ckuusx.c", line 6266: warning: implicit function declaration: tgoto
-
-in ckuusx.c on Solaris 9.  <curses.h> is still in /usr/include, dated 2002.
-A quick search shows the missing functions are hiding in <term.h>, which
-until now was included only in Linux.  Added a USE_TERM_H clause.  No, that
-doesn't help, the prototypes are not selected at compile time; there are
-#ifdefs in that file that skip over these prototypes.  I had to put them in
-the code under #ifdef BUG999..#endif (I could have used a longer name like
-#ifdef ADD_PROTOTYPES_FOR_CURSES_FUNCTIONS, but that would not be portable).
-ckuusx.c, 12 Aug 2007.
-
-Also:
-
-  "ckuusx.c", line 9232: warning: implicit function declaration: creat
-
-This is called in the IKSD dababase code, used for getting a lockfile.
-creat() is a Unixism in code that is supposed to be portable.  But IKSD only
-runs on Unix and Windows, so I assume the Windows C library has a creat()
-function.  Anyway, suddenly the Solaris header files seem to have blocked
-whatever path previously existed to the creat() prototype (which is in
-<fcntl.h>), so I added an #include in the appropriate spot.  ckuusx.c,
-12 Aug 2007.
-
-Kermit functions for converting the number base -- \fradix(), \fhexify(),
-\unfhexify() -- did not work with big numbers; ckradix() was missed in the
-CK_OFF_T conversion.  Fixed in ckclib.c, 12 Aug 2007.
-
-Updated the help text for ASCII, BINARY, and SET FTP TYPE to clarify the
-semantics.  ckuus2.c, ckcftp.c, 12 Aug 2007.
-
-Error messages were printed upon failure to open any of the four log file,
-even with SET QUIET ON.  Fixed in ckuus4.c, 12 Aug 2007.
-
-Built OK on NetBSD 1.3_RC3.  Tried to build secure version but the libraries
-had disappeared.  13 Aug 2007.
-
-Built OK on Mac OS X 10.4.9.  Tried the secure version, macosx10.4+krb5+ssl.
-Here we get the usual pile of "pointer targets in passing argument 1 of
-(function name) differ in signedness", regarding security functions, but it
-built OK.  13 Aug 2007.
-
-Reconciling the two ttinl's...  On encrypted connections myread() returns
-encrypted bytes; ttinl() has to decrypt them; it wasn't doing this in the
-lookahead section so I fixed it.  The new code works on both encrypted and
-clear-text connections.  I removed the chaining to oldttinl(), and
-oldttinl() itself.  ckutio.c, 13 Aug 2007.
-
-  (Wouldn't it make more sense and be more efficient and less confusing
-  for myfillbuf() to do the decrypting?)
-
-When C-Kermit uses Zmodem as an external protocol, it doesn't seem to scan
-files before sending them to set text or binary mode appropriately.  It's
-that external protocols bypass Kermit's whole "get next file" mechanism; the
-(possibly wild) filespec is simply passed to the external protocol program.
-Changing this would be a very big deal.  But if only one file is being sent
-(the filespec is not wild) it's easy enough to check.  I added this to the
-external protocols section of the protocol module.  It can be overridden in
-any of the regular ways (/TEXT or /BINARY switch on SEND command, SET
-PATTERNS OFF, SET TRANSFER MODE MANUAL, etc).  ckcpro.w, 13 Aug 2007.
-
-[FTP SEND /RECURSIVE]
-Peter Crowley reported a problem with FTP recursive uploads getting the
-directory tree wrong when the previous pathname was a left substring of the
-new pathname (e.g. foo/bar/ and foo/bar2/).  The logic did not handle this
-case and created the bar2 directory as a subdirectory of bar, rather than as
-a parallel directory.  Fixed in syncdir() and tested with various edge cases.
-ckcftp.c 14 Aug 2007.
-
-  notify <peter.crowley@alumni.utexas.net>
-
-Added CD messages to FTP BRIEF display to track the ups and downs of
-recursive uploads.  ckcftp.c, 14 Aug 2007.
-
-The OUTPUT command gave a misleading error message ("Connection to xxx not
-open") when used on a serial port that was, indeed, open but was not
-presenting the Carrier signal, when CARRIER-WATCH was not OFF.  Added a new
-message for this, and some others.  ckuus5.c, 14 Aug 2007.
-
-Sending from the command line, e.g. kermit -s foo, did not give an
-informative error message if the file could not be found or opened.  Fixed
-in ckuusy.c, 14 Aug 2007.
-
-OK, back to ttptycmd....  It seems that back on March 27th, I got everything
-working but I thought that there was still something wrong with it because
-an unrelated problem so I put it aside.  The version of ttpty.c from that
-date worked OK, and it looks like I updated ckutio.c from it, but that
-version of ckutio.c was put aside.  Since then I have been working on the
-ckutio.c version that was NOT put aside and so now I have to reconcile the
-two:
-
-  ~/80/ttypty/20070327/ckutio.c
-  ~/80/ckutio.c
-
-As a first cut I did this simply by replacing the contents of the #ifdef
-CK_REDIR section of the latter with that of the former.  Of course in
-Solaris this comes up with openty() implicitly declared at compile time and
-unresolved at link time.  So the first task is to get HAVE_OPENPTY defined
-for platforms that have it and have the others use the ttruncmd().  For
-starters I put an #ifdef block in ckcdeb.h that defines HAVE_OPENPTY for
-Linux, FreeBSD, NetBSD, OpenBSD, and Mac OS X.  Ones that don't have
-openpty() include AIX, HP-UX, and Solaris.  Others like SCO I don't know but
-I doubt it.  The real solution is to get the ckupty.c module to work but one
-thing at a time...  This version is supposed work with secure builds on the
-openpty() platforms, and on the others like Solaris, if an external protocol
-is attempted on a secure (encrypted) connection, an error message is
-printed and the command fails.  ckutio.c, 14 Aug 2007.
-
-How to test?  Apparently I did all my testing on Panix before, and that's
-where all my Zmodem builds are, but now when I build a Kerberized version
-(which works if I do it on the right pool host), it won't make a local
-connection, and there is no other place I can connect to that has a
-Kerberized Telnet server.  I can, however, connect to Panix from here, using
-the same code, but on Mac OS X...
-
-Slight detour: Got access to AIX again (5.3.0.0).  Picky compiler, some
-things needed fixing....  Also it says "1506-507 (W) No licenses available.
-Contact your program supplier to add additional users. Compilation will
-proceed shortly" and of course it goes kind of slow.  For some reason, I
-can't do streaming transfers into AIX over a local network (to its SSH
-server), but windowed transfers are OK.  Anyway, noting that we've been
-using the same basic makefile target since AIX 4.2, changing nothing but the
-version herald, I made a new target, simply "aix", that picks up the AIX
-version automatically and sets the herald from it.  Ditto for aix+openssl,
-but on this host requires setting SSLINC and SSLLIB to /opt/ssl/include and
-/opt/ssl/lib.  Also the make program here was extremely sensitive to spacing
-so I had to make some minor edits to get the link step to work for the SSL
-version.  ckuusy.c, makefile, 14-15 Aug 2007.
-
-Got rid of the special Panix secure NetBSD target, replaced it with a
-regular one, which is invoked in the normal way by defining K5INC and K5LIB
-to point to to where the stuff is hidden.  Cleaned up and modernized the
-comments in the makefile a bit.  makefile 15 Aug 2007.
-
-Changed some data types and added some casts to ckctel.c to do away with
-tons of "pointer targets in passing argument 1 of 'xxx' differ in signedness"
-warnings.  15 Aug 2007.
-
-Set up Mac OS X as the testbed for ttptycmd(), with Panix as the remote
-partner over a Kerberos 5 connection.  The first test is to send a 300K
-text file with gkermit as the external protocol.  It worked fine, and the
-debug log showed all the right components were active (namely encryption and
-ttptycmd) [kermit/zmodem send/receive text/binary]:
-
-  Kermit    Zmodem
-  kst OK    zst OK
-  ksb OK    zsb OK
-  krt OK    zrt OK
-  krb OK    zrb Failed "rz: Persistent CRC or other ERROR"
-
-We've seen this before.  The problem is 0xff, Telnet IAC, as I proved to
-myself by constructing a 3MB file that contained every byte but 0xff in every
-mixture and order and transferring it successfully over the same connection.
-Presumably the Telnet server is doubling IACs, whereas of course rz is not
-undoubling, thus the CRC error.  This is progress.  15 Aug 2007.
-
-Log shows that indeed every IAC in the source file arrives doubled.  Adding
-code to remove the first IAC of every adjacent pair, a small test file with
-different-length runs of IACs transfers OK.  The 3MB all.bin file does not.
-
-Starting over...  I can receive a big text file with Zmodem OK.  The 3.2MB
-binary test pattern that contains no IACs failed after 1.8MB, but the part
-that it transferred was OK.  A second try, almost the whole thing arrived,
-it stopped just 584 bytes short of the end.  Could be that file size is a
-separate problem.  Making a new copy exactly 1MB long...  Well, that's
-interesting, this one too stopped just short of the end.  And again, the
-same thing.  When connecting back to the host, the last Zmodem packet can
-be seen on the screen; it's as if the local Zmodem exited before reading
-the last packet...  But OK, if I change the options on the remote sz
-sender to use small blocks, etc, then it works.
-
-Now, changing from the 1MB no-IAC-binary test pattern, to the 1MB all-values
-test pattern, we fail after 81K.  But the part that was transferred is
-correct.  Second try, same thing, but 57K.  Third: 40K.  Each time, upon
-connecting back, the session is completely dead.
-
-IF I HAVE TO undouble IACs for incoming files, don't I have to double them
-going out?  To send a block to net we just call ttol(), but ttol() doesn't
-do any doubling (because Kermit protocol always quotes 0xff).  To see what
-happens, I changed the ttol() call to ttoc() in a loop that doubles IACs.  I
-tested this by sending the full 3.2MB test pattern, which worked fine.
-
-For receiving, it's slow but it works OK with files that don't contain IACs
-(my concern was that IACs might appear in outbound files or in Zmodem
-protocol messages).  It receives the 1MB no-IAC test pattern, so there are
-no problems with protocol or timing.  But the full test pattern always gets
-cut off, but at different points, as before, with the remote session dead.
-Changing the Zmodem receiver from rz to lrz on the local end (since the
-sender on the remote end is lsz) does not change the behavior.
-
-Anyway, I went back and replaced the byte loop with something more
-efficient, and it goes about 20 times faster.  But this doesn't help either,
-it only makes it fail faster.  But aha, what if a doubled IAC is broken
-across successive pty reads -- we have to make the "previous character"
-memory persistent.  Well, that was a good insight, but it still didn't fix
-it.  The log shows the IAC handling code is working fine.
-
-What does sz say?  Capturing its stderr to a file... "Retry 1: Got ZCAN".
-Next time: "Retry 1: Got TIMEOUT".  Next time: Got ZCAN.
-
-Trying different Zmodem options...  apparently I don't need to use short
-blocks.  But I do need to use -e, probably because of Telnet NVT treatment
-of carriage return; without -e, there is a "persistent CRC error".  -O
-disables timeouts, but this makes no difference.
-
-OK, we still have two Big Problems:
-
- 1. When a long file has no IACs, the final < 1K of the file is not received.
- 2. When a long file has IACs, the transfer generally stops very early.
-
-Problem 1: the transfer consistently fails less than 1K from the end of the
-file.  Upon CONNECT back to the host, a big Zmodem packet is sitting there
-waiting to be read, which means ttptycmd()'s copy of rz is terminating
-early.  Can we catch it in the debug log?  Doing this takes forever and
-writes a GB to the disk...  And then the problem doesn't happen.  Also, I
-can receive a HUGE text file almost instantly with no errors at all.
-
-Switching to lrz on the receiving end, now I see the error messages, about
-300 lines like this:
-
-  Retry 0: Garbage count exceeded
-  Bytes received:  872352/1000000   BPS:85464  ETA 00:01  Retry 0: Bad CRC
-  Bytes received:  892448/1000000   BPS:86690  ETA 00:01  Retry 0: Bad CRC
-  Retry 0: Garbage count exceeded
-  Retry 0: Garbage count exceeded
-  Retry 0: Garbage count exceeded
-  Retry 0: Garbage count exceeded
-  Retry 0: Garbage count exceeded
-  Retry 0: Garbage count exceeded
-  Retry 0: Got ERROR
-  Bytes received:  898336/1000000   BPS:84293  ETA 00:01  Retry 0: Bad CRC
-  Retry 0: Garbage count exceeded
-  Retry 0: Garbage count exceeded
-  Bytes received:  900384/1000000   BPS:83751  ETA 00:01  Bad escape sequence
-  2fRe
-  try 0: Bad data subpacket
-  Bytes received:  941472/1000000   BPS:86191  ETA 00:00  Retry 0: Bad CRC
-  Retry 0: Garbage count exceeded
-
-Even when it succeeds, it gets these.  But if I receive a text file, no
-matter how big, no errors or retries or timeouts at all.  So it appears that
-there is only one problem: a big-time lack of transparency regarding 8-bit
-and/or control characters.  The odd thing is, it's not that the characters
-can't get through -- they all can -- but they seem to cause transitory
-blockages.  16 Aug 2007.
-
-Cleaned up the remaining pointer signedness warnings in ckutio.c, but this
-was a mistake, it broke Kerberos connections completely.  Undid the changes.
-ckutio.c, 17 Aug 2007.
-
-Changed all return() in the fork()==0 section of ttptycmd() to exit().
-ckutio.c, 17 Aug 2007.
-
-Tried explicitly setting the slave pty to rawmode.  Makes no difference.
-Tried using the Mac OS X (curses) raw() function, and also system("stty
-raw"); still no difference.  Tried doing all of these in different
-combinations and orders.  I found one combination that cuts the errors about
-in half, and the transfer of the no-IAC test pattern almost always succeeds
-(but it's slow).  Anyway, it doesn't help much with the test pattern that
-contains IACs.  Well, the code is more solid than it was before but
-functionally we have not advanced much if we can't download a binary file
-with Zmodem!  On the other hand, we can upload them, and we can transfer
-text files in both directions, which is an improvement over the previous
-situation, in which the entire session would hang due to loss of
-synchronization of the encryption stream.
-
-Tried adding -funsigned-char to CFLAGS of Mac OS X target.  It does not
-make the "signedness" warnings go away and it doesn't change the runtime
-symptoms.
-
-I tried a simpler version of pty_make_raw(), the one from Serg Iakovlev, but
-it was a total failure.  That's encouraging though, because it indicates
-that pty_make_raw() is the right place to be working.
-
-Then I made pty_make_raw() set or unset every single terminal flag
-explicitly.  This made no difference, but didn't hurt anything either.
-
-Then I made pty_make_raw() explicitly set all the c_cc[] characters to 0
-(but left c_cc[VMIN] as 1).  This made no difference either.
-
-I checked pty_make_raw() against ttpkt() and the only difference I found in
-the terminal flags is that ttpkt() sets IGNPAR thinking it means "ignore
-parity errors" when really it means "discard any character that has a parity
-error" (at least according to Iakovlev) -- exactly the opposite.  But I
-tried it both ways, no difference.  17 Aug 2007.
-
-I noticed that even Zmodem text receives can fail.  They don't get any
-errors, they just get cut off shortly before the end.  (But usually they
-succeed, and fast too, like 500K cps).
-
-What if I don't call pty_make_raw() at all on the slave pty?
-
-zrt: EESSSSSSSS: 80% good (E = stopped just before end but no other errors)
-
-zrb no-IAC test pattern, short blocks:
- 1. S/5 (success with 5 screens of errors.
- 2. S/7
- 3. S/7
- 4. S/6
- 5. E/7 (failed just before end)
- 6. S/7
- 7. S/6
- 8. S/6
- 9. S/6
-10. S/4
-
-So, lots of errors, but it recovered 90% of the time.
-Next, same thing, but without requesting short blocks:
-
- 1. E/5
- 2. S/5
- 3. E/4
- 4. S/5
- 5. S/5
- 6. S/5
- 7. X/0 (hard failure right away: "Got ZCAN"
- 8. S/5
- 9. S/5
-10. S/5
-
-So it doesn't look like short blocks make that much difference.  Now what if
-I turn off prefixing?  Bad CRC, fails immediately every time.  Putting back
-pty_make_raw(slave), it still fails hard.
-
-Tried a new strategy with pty_make_raw(): rather than modify existing flags,
-I set all flags to 0, and then turn on only those few that we need like CS8.
-Now we get only 2.5 screens of errors instead 4-7 and the transfer rate is
-higher for binary files (all of the previous ones were under 100K CPS, while
-for text files it was 400-500K CPS):
-
- 1. S/2 195669 CPS
- 2. S/2 194720
- 3. E/3
- 4. S/2 192550
- 5. S/3 192325
- 6. S/3 145066
- 7. S/2 200689
- 8. S/3 188948
- 9. S/2 209461
-10. S/3 181991
-
-I noticed that there was no TIOCSTTY ioctl in the pty/fork setup sequence,
-which is recommended somewhere, so I tried that and it was a disaster; the
-entire session hung.  I took it back out.  18 Aug 2007.
-
-Tried some transfers over a clear-text (not encrypted) connection with the
-same results: smooth, fast transfer of a big text file (400K cps); rocky but
-successful transfer of the no-IAC binary pattern file (135K cps).  Switching
-back to ttruncmd(), the same binary file is received at 1.5M cps, and the
-no-IAC binary file totally fails after too many "Bad CRC"s; and we already
-know that any file that contains IACs will fail.  One might say that
-ttptycmd() is better in every respect than ttruncmd() except in speed
-(when it works).
-
-Let's see if ttyptycmd still works in remote mode (to local K95):
- . sz / text works, but slowly.
- . lsz / text works but some wierd errors are reported.
- . lsz / binary / no IAC doesn't work at all (CRC-32 mismatch for a header;
-        Unexpected control character ignored: 13, etc).
- . sz / binary / no IAC works OK but slow.
- . sz / binary / full test pattern with IAC works OK but slow.
- . Sending text into rz fails completely.
-
-What about ttruncmd() in remote mode?
- . send /text works, fast.
- . send /binary works, fast. 
- . receive /text works, not so fast but not bad.
- . receive /binary works, not so fast but not bad.
-
-So we use ttruncmd() for remote mode, and we use it for local mode
-serial-port and modem connections, and we use ttptycmd() on network
-connections because (a) they might be encrypted, and (b) even if they are
-not, they use some protocol that we have to handle, e.g. Telnet, Rlogin.
-19 Aug 2007.
-
-Discovered that Sending binary files no longer works.  Text is OK, binary
-transfers don't even start.  This happens on both encrypted and clear-text
-connections.  ttptycmd() is being used in both cases.  But oddly enough,
-receiving binary still works as before.  What did I break, and when?
-Oh, it was just the script, when I changed it from using sz to lsz.  Putting
-it back to sz makes it work, even with the full 3.2MB binary pattern with
-IACs.
-
-I backed off the changes I made to ckctel.c to suppress some warnings, in
-view of the fact that similar changes to ckutio.c broke things so badly.
-19 Aug 2007.
-
-If sz is not given the -e flag, it sends control characters bare, except ^P,
-^Q, ^S, and ^X.  ^X is the control prefix, so ^A is sent ^X followed by A.
-With -e, all C0 control chars are prefixed, but with ^X, which is, of
-course, a control character.  Interestingly, the C1 analogs of ^P, ^Q, ^S
-(but not ^X and, unfortunately, not IAC) are also prefixed.  -e makes no
-difference for 8-bit characters.
-
-If we have a Telnet connection and the server is in ASCII (NVT) mode, CR is
-always followed by LF or NUL.  Well, it seems the server is putting us
-(Kermit) in binary mode in this case, but staying in ASCII mode itself.
-Added code to handle NVT byte stuffing and unstuffing in each direction
-independently, according to the TRANSMIT_BINARY state in that direction.  I
-made a file containing just the bytes 0-31 and 127 and 128-159 and 255 (66
-bytes all together) and sending it from the host to C-Kermit, the local log
-shows that every control character was received correctly and all TELNET
-conversions were done right -- NUL removed after CR (and only after CR); IAC
-removed after IAC (and only after an IAC meant as a quote).  For the first
-time, I can receive the 1MB all-values test pattern, but there are still
-tons of (correctable) CRC errors, so the transfer rate is really awful, like
-about 5% of what we get with a text file (25Kcps instead of 500).
-
-Further experimentation shows that the fundamental transparency problem is
-fixed; we can receive short files (say, 1K or less) containing absolutely
-any byte values in any combination with no errors at all.  But once the file
-size reaches (say) 10K, we get CRC errors, like one every 2 or 3K of data.
-These are not deterministic.  In successive transfers of the same file, they
-come in different spots.  It's tempting to blame pty buffer overruns, but
-then text files would show the same behavior.  When a binary file size
-exceeds, say, 1MB, the chances of successful completion go way down,
-independent of whether my external protocol is rz or lrz.  I like lrz better
-because the error reports come out on the screen as the transfer is going
-on.  Trying to download a real-world binary file -- a 2.2MB C-Kermit
-executable -- I get 4500 error messages but the transfer evenually succeeds,
-with an effective throughput of 21Kcps.
-
-Actually it turns out that "sz -a somebigtextfile" (2.2MB) also gets a lot
-of CRC errors.  The -e flag (escape all control characters) makes the same
-big text file transfer with few or no errors.  It's not sure-fire.
-Sometimes no errors, sometimes one or two, and sometimes a fatal error that
-kills the transfer.
-
-With binary files... a 32K binary file seems to make it every time.  40K
-fails about 50% of the time.  48K fails 60% and every time it fails, it has
-created a partial file of exactly 32K (32768 bytes).  96K fails 9 out of 10
-times, when it fails, the partial file is always 0 bytes, or 32768, or
-65536, but that just means that rz's file output buffer is 32K.
-
-Why, then, do binary files cause trouble if it is not a solid transparency
-problem?  If a certain file can get through once, why can't it get through
-every time?  When a character arrives at the pty, the pty driver probably
-takes a different path through its code, checking the terminal flags that
-would affect that character.  I tried making Kermit's network read buffers
-very small but, surprisingly, this made things worse.  I also tried making
-them very much bigger, which didn't help either.  24K still seems to be the
-right size.
-
-So, is it that some characters take longer to process than others?  So long
-that data is lost due to lack of flow control between TCP and the pty?  One
-way to test this theory is to slow Zmodem down.  I tried "-l 32" which,
-according to the man page, tells sz to "wait for the receiver to acknowledge
-correct data every N (32 <= N <= 1024) characters.  This may be used to
-avoid network over-run when XOFF flow control is lacking."  Makes no
-difference.  I also tried the -w (Window) switch, ditto.  In fact there are
-all sorts of options to set the "window size", "packet length", "block
-size", and "frame length", but with no explanation of what these mean or how
-they are related.  If I crank everything down to minimum value:
-
-  lsz q -L 32 -l 32 -w 1
-
-I get 50% success with the 96K file instead of 10%.  Adding -e, oddly
-enough, made it worse.  I also tried setting the environment variable
-ZNULLS to different numbers like 512, no help there either.
-
-I tried making the read-from-net-write-to-pty buffer small (1K) but leaving
-the pty-to-net one big.  This improves chances of success, but it's
-intolerably slow (3Kcps when the connection is capable of 500K).
-
-I also changed the write-to-pty operation from a single write() call of
-possibly many K characters to a byte loop, one write() per byte.  Same
-result: success (but still about 300 recoverable errors), throughput 3Kcps.
-20 Aug 2007.
-
-With ttptycmd() configured to write to the pty in a byte loop, it is
-possible to delay each write.  Adding a 10msec delay per character results
-in a transfer that runs at about 20 cps and (for the 96K test file) would
-take about 80 minutes to complete.  And yet it still gets just as many
-errors.  So it's not a matter of timing either.  The errors come, on
-average, every file 388 bytes, but not at regular intervals.
-
-I tried the TIOCREMOTE ioctl on the pty master, as discussed somewhat
-obliquely in the Mac OS X "man pty" page; "This mode causes input to the
-pseudo terminal to be flow controlled and not input edited (regardless of
-the terminal mode)" -- sounds like just the ticket but it made no
-difference.  Actually, looking at a man page on another OS (Solaris), it
-says this is only for lines of text, EOLs are supplied, so that would mess
-up the protocol.  So remember: don't use this.
-
-Tried without O_NDELAY; the behavior was the same but the speed was much
-slower.
-
-Tried switching back to the ckupty.c routines on Mac OS X and found that it
-works now the same as with openpty(), except that I seem to get more getty
-babble at the end.  But this means I can run some tests on Solaris.  I moved
-the entire test environment from Mac OS X 10.4.9 to Solaris 9.  But it
-doesn't work at all.
-
-Trying to figure out the ckupty.c modules again.
- . do_pty() calls pty_getpty() which returns in arg1 the fd of the pty master.
- . Then it creates a pipe as a way to tell when the child dies
- . Then it creates a fork:
-    - The parent does a blocking read from the pipe
-    - The child calls getptyslave() to get the pty slave
-      and writes one byte to the pipe
-      and then execs the command it's supposed to run
-Note that the file descriptor of the slave is known only to the lower fork.
-Therefore the lower fork is the one that has to set all the tty modes, etc.
-I took care of all that but the ckupty.c method doesn't work at all on
-Solaris.  But it works "fine" on Mac OS X (the 32K all-bytes test file
-transfers instantly with no errors, but the 96K one errors out).
-
-The problem on Solaris is that pty_make_raw() fails on the masterfd (but not
-on the slavefd) with errno 25 "ioctl inappropriate for device".  It doesn't
-matter whether I do it in ckupty.c or ckutio.c.  I found a web page on
-kde.org that says Solaris does not allow tcget/setattr() on a pty master.
-But the Sun "knowledge base" is not open to the public.  Well, presumably
-changes made to the slave are reflected in the master (comments in Solaris
-telnetd seem to confirm this...)  Let's come back to Solaris later.
-
-Moving to a Linux with lrzsz installed...  Built a Kerberos 5 version with
-USE_CKUPTY_C.  Like on Mac OS X, it transfers short files OK and chokes on
-longer ones.  Switched to openpty(), it behaves the same.  So the problems
-on Mac OS X are evidently not OS-specific, which is good I guess, since that
-means finding the way around them will apply to more than one platform.
-21 Aug 2007.
-
-Look into TIOCSCTTY again.  On System V based OS's, opening a pty acquires a
-controlling terminal automatically.  On BSD-based OS's, no; you have to use
-the TIOCSCTTY on the slave file descriptor to give it one.  I'm not sure why
-a controlling terminal would be needed, except that without one, the virtual
-device "/dev/tty" does not exist for the process that runs on the pty, and
-maybe the application that runs there (e.g. rzsz) checks for it.  On the
-downside, having a controlling terminal opens the process up to terminal
-interrupts like SIGINT and SIGQUIT.  Until now I have not been using this
-ioctl().  Results (in Linux):
-
-  With TIOCSCTTY: 96K all-bytes test: 11 screens of errors, then success
-  Without TIOCSCTTY: exactly the same.
-
-Tried the same thing with TIOCNOTTY instead of TIOCSCTTY, with exactly the
-same results (no effect whatsoever).
-
-There has to be a way to make this work, because Zmodem works through
-telnetd, which basically the same thing as ttptycmd(): a relay between the
-network and a pty.  ttptycmd() is like telnetd backwards.  Modern telnetds
-are not much help; they don't access ptys or the network directly, they go
-through "mux" devices so I can't see what they're doing to get transparency
-and flow control.  An old BSD telnetd uses packet mode but that would be a
-big deal...
-
-I tried ignoring various signals like SIGTTOU and SITSTP, since some Telnet
-clients do this.  No effect, no difference.  Anyway, in Linux the transfers
-almost always finish OK despite the many errors.  There is just some trick
-I'm missing to make the pty accept a stream of arbitrary bytes without
-hiccuping.
-
-What about Solaris, which uses ckupty.c?  In streams-based OS's, where line
-disciplines and whatnot are pushed on top of the pty, it looks like the pty
-module saves the file descriptor of the "bare" slave pty (as 'spty') before
-pushing things onto it, and then later uses spty rather than the regular
-slave pty file descriptor when getting/setting terminal modes.  I'm not sure
-what this is all about but it's definitely SysVish...  It happens if
-STREAMSPTY is defined, but I noticed that STREAMSPTY is never defined
-anywhere.  I tried defining it so we take an entirely different path through
-the code.  It made absolutely no difference.
-
-Then I noticed that HAVE_STREAMS is not defined for Solaris either.  Tried
-defining it, but the session didn't work at all, no i/o.  Removing the
-HAVE_STREAMS definition but keeping the STREAMSPTY defined, I rebuilt and
-tried "set host /connect /pty emacs".  I got an EMACS screen but could not
-type anything into it, which means that STREAMSPTY should not be defined
-either.  Removed the definition and "set host /pty" works again.  So what's
-the problem with ttptycmd()?
-
-In fact, ttptycmd() works on Solaris with Kermit as the external protocol,
-but not with Zmodem, not even with text files.  So again, there is no
-fundamental problem with the code or the logic, it's Just A Matter Of
-Transparency to control and/or 8-bit characters -- some trick I don't know
-about.
-
-Looking at the Solaris debug log...  I see that ckupty.c is calling
-init_termbuf() to set the tty modes of the master, not the slave, and
-set_termbuf() to set them, but you can't do that in Solaris, error 25.  This
-is in getptyslave().  Shouldn't getptyslave() be setting the tty modes of
-the slave, not the master?  I changed it to do this, but like all other
-changes, it made no difference.  I checked to make sure that after the change,
-"set host /pty /connect emacs" still worked and it did.
-
-And then what...  I had some code to redirect stderr in ckupty.c that was
-not being executing due to a typo.  When I fixed the typo, poof, Zmodem
-binary transfers started working, or working as well as they work in Linux
-and Mac OS X.  It turns out that if I don't redirect stderr, sz and rz
-just don't work.  But lsz and lrz do.  But if I do redirect it, I don't see
-the progress messages from lsz/lrz.  22 Aug 2007.
-
-Built on HP-UX 11i v3 (B.11.31 U ia64) with optimizing compiler, got tons of
-picky warnings, but it finished and linked and runs OK.  Many of the
-warnings were like this:
-
-  "ckucns.c", line 1606: warning #2068-D: integer conversion resulted in a
-  change of sign:   tnopt[0] = (CHAR) IAC;
-
-IAC is defined as 255 in ckctel.h.  If I define it as 0xff, I don't get the
-warnings.  I changed the definitions of all the Telnet commands to be in hex
-notation rather than decimal.  If cuts way down on the HP-UX warnings and
-doesn't seem to cause problems elsewhere.  ckctel.h, 23 Aug 2007.
-
-Now it looks like Solaris is working but then it hangs at the end.  It
-appears as if the ckupty.c module is blocking SIGCHLD.  Debug log shows that
-when the transfer is complete, we received IAC DM (Telnet Data Mark) after
-sz's last gasp and before the shell prompt is printed.  But calling
-tn_doop() in this case is a mistake because we are reading the number of
-bytes that we know are available in a counted loop, but tn_doop() would
-consume an unknown number of bytes and we would never know when to exit the
-loop.  Anyway, C-Kermit doesn't do anything with DM.  Skipping over
-tn_doop() (and not writing out the Telnet command bytes) fixes the hanging
-condition at the end, even though SIGCHLD is never raised.  ckutio.c,
-23 Aug 2007.
-
-Some tests, Solaris to NetBSD over K5.
-zst sends ascii.txt, a 2.36MB ascii text file (Kcps / Errors).
-zrt receives the same file:
-
-  zst 587/0 526/0 542/0 434/0 423/0
-  zrt 827/0 800/0 847/0 FAIL  610/0
-
-So text is good.  Binary not so good.  Here we transfer the 1MB all-bytes
-pattern file.  zrb receives it successfully, but with 1248 errors, at only
-15Kcps.  Sending the same file out always fails:
-
-  Begin 20070823 16:32:07: SEND BINARY all2.bin [sz]
-  Sending: all2.bin
-  Bytes Sent:   5600/1000000   BPS:12446    ETA 01:19   FAILURE
-  End 20070823 16:32:13
-  Elapsed time: 6.617992999999842
-  cps = 151103.2121067556
-  lsz: caught signal 1; exiting
-
-Decided to move to Linux but found that something is screwed up in Linux
-C-Kermit with tilde expansion:
-
-  send ~/testfiles/all.bin
-
-doesn't expand at all (but it did yesterday!).  The problem was in the
-ancient, ancient realuid/setuid handling code; real_uid() no longer works in
-Linux.  I worked around this in whoami() by setting ruid to getuid() if
-real_uid() returned a negative number.  Maybe dangerous, worry about it
-later.  ckufio.c, 23 Aug 2007.
-
-ANYWAY... after fixing that, I tested zsb on Linux, and it's broken there
-too, using openpty(), so it's nothing to do with ckupty.c.  After sending
-the first Zmodem data packet, it just hangs, nothing comes back.  In text
-mode it gets farther, but then the same thing happens.  Captured stderr from
-rz on the far end:
-
-  Bytes received:     608/1000000   BPS:21137  ETA 00:47  Retry 0: Bad CRC
-  Bytes received:     864/1000000   BPS:23540  ETA 00:42  Retry 0: Bad CRC
-  Bytes received:    1120/1000000   BPS:25003  ETA 00:39  Retry 0: Bad CRC
-  Bytes received:    5696/1000000   BPS:56988  ETA 00:17  Retry 0: Bad CRC
-  Bytes received:    9120/1000000   BPS:62227  ETA 00:15  Retry 0: Bad CRC
-  Bytes received:    9376/1000000   BPS:60766  ETA 00:16  Retry 0: Bad CRC
-  Bytes received:    9632/1000000   BPS:60361  ETA 00:16  Retry 0: Got TIMEOUT
-  Retry 0: Sender Canceled
-  Retry 0: Got ZCAN
-
-The local sz, however, doesn't give any error message.  ZCAN means: "other
-end canceled session by sending 5 ^X's" (or user typed them).  What actually
-happens is that ttptycmd()'s select() times out waiting for something from
-the Zmodem partner and ttptycmd() itself kills the sz fork with SIGHUP.
-When lsz receives SIGHUP it sends the ZCAN.  So the real problem is that
-after some point we're not receiving anything.
-
-I changed the timeout from 4 seconds to 30 seconds and now I see it just
-stops for long periods of time and then resumes.  The lrz log on the
-receiving end shows tons of timouts, CRC errors, and other errors.  The
-local log shows that lsz wound up sending ZCAN (2 x (10 x ^H, 10 x ^X)).
-
-Moving on to another problem...  Turns out Ctrl-C (SIGINT) is working right
-after all.  Since I'm using my test scripts like kerbang scripts, Ctrl-C
-exits through trap(), as it should, closing the connection and cleaning up.
-If I start Kermit and tell it to TAKE the script, then Ctrl-C brings me back
-to the prompt with the connection still open (as it should).  However, until
-now I haven't done anything about the fork or the ptys.  Added code to
-trap() to kill the fork and close the master pty.  ckuusx.c, 24 Aug 2007.
-
-Added code to try to break the deadlock.  If select() times out, but we have
-stuff to write either to the pty or the net, try to do it anyway, even
-though select() did not say we could.  But this doesn't help because when
-select() times out we don't have anything to write.  The problem is that
-after receiving that last packet from the remote rz, the local lsz doesn't
-seem to do anything, as if the lower fork wasn't running (and to confirm
-this hypothesis, sometimes I noticed that when I Ctrl-C'd out of this, the
-transfer would take off again).
-
-Backing up and testing with gkermit rather than zmodem:
-
- kst ripple.txt [824K] OK
- kst ascii.txt [1359K] OK
- krt ripple.txt -- FAILED
-
-It seems that we can't handle streaming.  If I set up krt to disable
-streaming on receipt, it works OK.
-
- krt ripple.txt [824K] OK
- krb all2.bin  [1000K] OK
-
-So here we have no trouble sending but big trouble receiving unless we
-disable streaming.  Whereas with Zmodem we have trouble receiving.
-
-But this wasn't happening before, what changed?  Using C-Kermit on the far
-end to receive the file with debug log on, I see that it is sending 4K data
-packet after 4K data packet, with the local gkermit silent, as expected.
-About midway through the transfer, the local Kermit sends an error packet
-"Transmission error on reliable link".  Looking at G-Kermit's debug log...
-It receives the first five 4K data packets OK, but gets a CRC error on the
-fifth one, and sends the Error packet.  So it has received a stream of
-20-some thousand bytes OK and then messes up.  That number sounds a lot like
-ttptycmd()'s buffer size.  I changed the buffer sizes to be different:
-
-  Read from pty and write to net: 4K  
-  Read from net and write to pty: 1K
-
-This time it received the first 4K packet and failed on the second one.
-Then I increased the buffers to 98K each, expecting to receive lots more
-packets successfully but it bombed out on the 5th one.  But that's good, it
-confirms there's no logic error in the buffer management.  Just to make
-sure, though, let's set the buffer size smaller than the packet size and
-disable streaming.  In this case we get 4 good data packets and a CRC error
-on the 5th one and so we request retransmission, and the next 8 times it
-arrives it gets a different CRC error, but the 9th copy is OK.  Then the
-next packet comes and it gets a CRC error every time.  And this is nothing
-but plain ASCII text.
-
-Switching to remote mode:
-
-  REMOTE=1 kk kst
-
-(after tricking myself because it was using ttruncmd() for this...) I see
-that nothing works at all.  What did I break?  24 Aug 2007.
-
-Fixed ttptycmd() to restore console modes after a remote-mode transfer.
-ckutio.c, 25 Aug 2007.
-
-Noticed that error codes like ESRCH are not available in all modules.
-That's because of some complicated in #ifdefs in ckcdeb.h that wind up not
-always #including <errno.h>.  But I notice that ckutio.c includes it
-unconditionally with no ill effects, and so does ckvfio.c.  Does any version
-of Unix at all not have <errno.h>?  Added a catch-all clause to ckcdeb.h to
-#include <errno.h> (in UNIX only) if, after the other clauses, ESRCH was
-still not defined.  ckcdeb.h, 25 Aug 2007.
-
-Now back to debugging ttptycmd()...  Remote-mode transfers with ttptycmd()
-were broken in two places, maybe as long as 2 weeks ago (this would have
-affected non-network transfers too, which I can't test any more).
-The logic was missing in a couple places for the non-network and/or
-non-Telnet and/or non-encrypting connections (if statements with no else
-parts).  Fixed in ckutio.c, 25 Aug 2007.
-
-Testing remote mode:
-
- kst OK   zst OK
- ksb OK   zsb OK
- krt OK   zrt OK
- krb OK   zrb OK
-
-Functionally it all works but there are hitches with Zmodem as always.
-When sending to K95:
-
- . If I send with lsz, there are hundreds of "Subpacket too long" errors,
-   and the transfer is very slow, but it succeeds.
-
- . If I send with the 1994 Omen version of sz, transmission is instantaneous
-   and without errors, but then it hangs at the end.
-
- . If I bypass C-Kermit and send direct from lsz or sz, both work fine.
-
-So clearly the ptys are getting in the way.  The hanging at the end would be
-caused by the sz process closing before its last output reached the master
-pty.  It would need to do some form of flushing and/or pausing at the end
-but there's nothing I can do about that; these programs were not designed to
-be used in this way.  Anyway, it only seems to happen with files longer than
-100K.
-
-For local mode, testing in Solaris over our Kerberos 5 connection again:
-
- gkermit  lrzsz
- kst OK   zst FAIL
- ksb OK   zsb FAIL
- krt OK   zrt OK but with errors
- krb OK   zrb FAIL
-
-If I use Omen rzsz as the external protocol (e.g. with zst), it blocks
-redirection and it sends the file to my terminal, rather than over the
-connection.  This would probably be because it finds out the device name of
-the job's controlling terminal and opens it, to prevent redirection.  This
-is hard to prevent in Solaris because there is no TIOCSTTY ioctl().
-Supposedly the same thing is accomplished by closing and reopening the slave
-pty after doing setsid().  I added code to do this, but it made no
-difference.  (If I use lsz instead of sz, it is indeed redirected, but jams
-up after about 15K.)  ckupty.c, 27 Aug 2007.
-
-On Mac OS X with sz 3.73 1-30-03, however, the redirection works, so I
-assume it would also work in Linux, FreeBSD, NetBSD, etc, too.  Doing the
-full test suite on Mac OS X:
-
- gkermit   lrzsz          rzsz
-  kst OK   zst FAIL (1)    OK
-  ksb OK   zsb FAIL (2)    OK
-  krt OK   zrt OK   (3)    OK for 100K file, fails for longer.
-  krb OK   zrb FAIL (4)    OK (1MB all-bytes test pattern)
-
-(1) 64K file OK every time; 100K file fails every time.
-(2) 10K file fails every time.
-(3) Succeeds with 800K file but gets a few recoverable errors.
-(4) Succeeds with 48K binary file with some errors, fails with longer ones.
-
-So actually it looks pretty good, it's just that lrzsz messes up.  When
-sending with lsz if I include -L 512 it sends the 100K test file with no
-errors, but still chokes on longer ones.
-
-Testing on Mac OS X again, but this time over a clear-text Telnet connection:
-
- gkermit        lrzsz    rzsz
-  kst OK   zst  FAIL(1)   OK
-  ksb OK   zsb  FAIL(2)   OK
-  krt OK   zrt  OK(3)     OK
-  krb OK   zrb  FAIL(4)   OK 
-
-(1) Almost worked, finished 777K out of 824K without errors.
-(2) Got tons of errors, failed in first 30K out of 1000K.
-(3) OK for 100K file but fails for larger.
-(4) OK for 48K binary fail but fails for larger.
-
-Maybe see if we can do without the OPENPTY part.
-
-TOMORROW -- just clean up the code, add some SET / SHOW / HELP commands,
-document it, and move on.
-
-Note: In K95, SET WINDOW sets the Zmodem packet length, 32 - 1024, multiple
-of 64.
-
-SEE ~/80/external.txt
-
-Changed ftp port from int to unsigned int.  ckcftp.c, 30 Aug 2007.
-
-Tried again to build KRB4/KRB5/SSL/TLS version for Solaris 9.  Had to update
-the build procedure again, of course, because of new file and directory
-names, but ran into problems anyway because the
-cu-solaris9g+krb5+krb4+openssl+shadow+pam+zlib target was calling another
-target that did not know about the hardwired pathnames.  Integrated the two
-targets and tried building again.  It actually compiled ok (but with lots of
-warnings from the security modules), but failed at link time with
-krb5_init_ets not found; fixed that with an #ifdef NO_KRB5_INIT_ETS, now it
-builds OK but without the ftp client.  Tried building it WITH the FTP and
-that was OK too, no changes needed except to the build procedure.  12 Feb
-2008, that is: C-Kermit 8.0.212 : 20080212.
-
-Tried to build with -DCK_SRP and -lsrp but:
-
-  hash_supported                      ckcftp.o
-  hash_getdescbyname                  ckcftp.o
-  hash_getdescbyid                    ckcftp.o
-  cipher_getdescbyname                ckcftp.o
-  krypto_delete                       ckcftp.o
-  krypto_new                          ckcftp.o
-  cipher_supported                    ckcftp.o
-  krypto_msg_priv                     ckcftp.o
-  krypto_msg_safe                     ckcftp.o
-  hash_getlist                        ckcftp.o
-  cipher_getlist                      ckcftp.o
-  cipher_getdescbyid                  ckcftp.o
-
-Sent mail to Tom Wu and backed off for now.  makefile, 14 Feb 2008.
-(Tom Wu never answered; seems like SRP is defunct.)
-
-The ".blah = xxx" form of variable assignment only worked for variables
-names of length 22 or less, noticed and fixed by Wolfram Sang.  ckucmd.c,
-5 Mar 2008.
-
-In "set host /pty ssh ..." connections, the INPUT command suddenly stopped
-working.  This is in Solaris 9.  It happens with all 8.0.* versions of
-C-Kermit, so it's nothing to do with ttptycmd().  Added some debug()
-statements but they don't show anything.  Turns out there wasn't a problem
-after all.  Wed Mar 26 16:04:53 2008
-
-Changed cmifi() to not print "?No files match" (or whatever) if SET QUIET ON.
-ckucmd.c, 26 Mar 2008.
-
-Added \v(remoteip) for the IP address of the host we're connected to,
-and \v(inmessage) for INPUT status messages corresponding to \v(instatus).
-ckuusr.h, ckcmai.c, ckuus[24].c, 26 Mar 2008.
-
-Made \fkeywordval() strip braces/quotes from the right-hand side so we can
-handle things like:
-
-  password="stringwithspaceatend "
-
-ckuus4.c, 6 Aug 2008.
-
-Added invisible PUTENV command for UNIX only.  Value should not be enclosed
-in doublequotes.  Requires lge \v(buildid) 20080826.  ckuusr.[ch], 26 Aug 2008.
-
-Added SET VARIABLE-EVALUATION { RECURSIVE, SIMPLE }.  This is highly
-experimental, but also highly desirable if it works out.  SIMPLE inhibits
-the default recursive method of evaluating \%x and \&x[] variables, which
-is, quite frankly, nuts and makes programming in Kermit at best
-counterintuitive.  I made an exception in the case of array subscripts,
-because changing how they are evaluated could break a lot of scripts, and
-anyway there should never be any harm in evaluating them recursively because
-their final value is always (or should be) numeric, not some string that
-might contain backslashes.  The SET VAR setting is on the stack, just like
-SET QUIET (it follows the quiet/xquiet code in ckuus[356].c), so macros or
-command files that change it can't break the script that invokes them.
-Added \frecurse() to force recursive evaluation of a \%x or \&x[] variable
-regardless of the VARIABLE-EVALUATION setting.  Added \v(vareval) to allow
-programmatic setting to current setting.  Tested on Solaris 9 but should be
-totally portable.  ckuusr.[ch], ckuus[356].c, 11 Sep 2008.
-
-From Günter Knauf: 64-bit builds were failing on SuSE Linux because
-libresolv and libcrypt were in lib64 rather than lib; updated the tests in
-the linux makefile target to find them.  makefile, 12 Jan 2009.
-
-Tried building on Red Hat Enterprise Linux Server release 5.3 64-bit.
-There is no curses or ncurses.  "make linuxnc" compiled OK but collapsed at
-link time looking for crypt(), res_search(), and dn_expand().  Turned out
-the linuxnc (and linuxc) targets needed the same treatment as the Linux one
-for 64-bit Linuxes.  makefile, 3 Mar 2009.
-
-Consolidated the linux targets so we no longer need three separate ones for
-curses, ncurses, and no curses.  "make linux" works ok on computers with and
-without (n)curses.  "make linux+ssl", ditto.  "linux+krb5+ssl builds OK but
-needs -DNO_KRB5_INIT_ETS".  Makefile, 3 Mar 2009.
-
-Fixed copyright date announced in herald, ckuus5.c, 3 Mar 2009.
-
-Patch from Seth Therault to avoid deprecation warning for utmp references
-in ckufio.c in Mac OS X 10.5 (later, this became a consolidated makefile
-target that works automatically for at least Mac OS X 10.3.9 through
-10.5.6).  makefile, ckufio.c, 28 April 2009.
-
-zshcmd() (the function used by RUN and ! to run external commands) was not
-falling back as expected in Linux RHEL4/5 if SHELL was not defined in the
-environment.  Also in all Unix versions, there was no indication if a RUN/!
-command failed (other than the return code) because the specified shell
-didn't exist or was not executable (e.g. the SHELL environment variable was
-misdefined).  Now it prints the name of the offending shell and the reason
-it couldn't be executed (Not found, Permission denied, etc).  ckufio.c,
-28 April 2009.
-
-There is no easy way to get the last field of string; for example, the
-extension from a filename, which might have any number of fields.  In
-general we want to be able to get "word number n" counting from the right;
-\fword() lacks this ability.  Now if you give it a negative word number,
-that says to count from the right; for example \fword(one two three four
-five, -2) returns "four".  ckclib.c, ckuusr.c, 14 May 2009.
-
-Fixed a typo in the aix51+openssl (SSLLIBS should have been SSLLIB).
-From Jason Lehr.  makefile, 27 May 2009.
-
-Updated the linux+openssl+zlib+shadow+pam target to chain to the new main
-Linux target.  A bunch of other ones remain un-updated. makefile, 12 Jun 2009.
-
-Updates to the new Mac OS X 10.5 target from Seth Therault (which is
-supposed to work on all Mac OS 10-point-anything) to avoid warnings
-that came up on on Mac OS 10.4.11/Intel.  Once this one is proven we should
-be able to remove/consolidate lots of other ones.  makefile, 12 Jun 2009.
-
-C-Kermit disables SSL with the message "?OpenSSL libraries do not match
-required version." if the version of OpenSSL that Kermit was built with is
-not exactly the same as the version that is loaded dynamically at runtime.
-This is actually the proper behavior, since APIs are not guaranteed not to
-change between OpenSSL versions prior to 1.0.0.  Made the error message more
-informative.  ck_ssl.c, 26 Aug 2009, and again 28 Aug 2009.
-
-AIX 6.1 is out, it is really just a new name for AIX 5.4.  Added makefile
-targets, plus for the first I made AIX 4.2 and later figure out its version
-number in the makefile target so we don't have to keep adding new -DAIXnn
-sections to the code, and also get its hardware name (e.g. "powerpc") from
-uname at make time, rather than hardwiring "rs6000" as I did before.
-Consolidated all AIX 4.2 and later targets so now just "make aix" or "make
-aix+ssl" can be used.  Except not the gcc ones as they have some quirks so
-I'd rather not disturb them.  Tested this on AIX 5.3.
-makefile, 28 Aug 2009.
-
-From Kinjal Shah, a correction to the Linux makefile entry that allows it
-find the 64-bit curses or ncurses library.  makefile, 29 Aug 2009.
-
-Renamed aix4[23]: to oldaix4[23]: in makefile to fix the warning messages
-I didn't notice before.  I didn't want to remove them because they have
-some special things that might still be needed, if anybody still has these 
-AIX versions.  makefile, 29 Aug 2009.
-
-Built on RHEL 5.3 64-bit, regular and with OpenSSL 0.9.8e.  31 Aug 2009.
-
-Built on NetBSD 5.0.1/i386, regular and with OpenSSL 0.9.9-dev, 1 Sep 2009.
-
-Changed SSL message to mention LD_LIBRARY_PATH (Solaris), SHLIB_PATH (HP-UX),
-LIBPATH (AIX), or LD_LIBRARY_PATH (Linux).  ck_ssl.c, 3 Sep 2009
-
-Noticed that "make linux+openssl" fails to include -lutil a link time, which
-it needs for openpty().  That's because this target is obsolete.  I renamed
-it to be oldlinux+openssl and added linux+openssl as a synonym for
-linux+ssl.  makefile, 3 Sep 2009.
-
-Tested linux+openssl+zlib+shadow+pam, it's OK.  Also linux+krb5.  Also
-linux+krb5+ssl.  makefile, 3 Sep 2009.
-
-Tried building on Solaris 9 with OpenSSL 0.9.8k with
-solaris9g+openssl+shadow+pam+zlib, it failed like so:
-
-  ck_ssl.c:2875: error: conflicting types for 'inet_aton'
-  /usr/include/arpa/inet.h:52: previous declaration of 'inet_aton' was here
-  make[2]: [ck_ssl.o] Error 1
-  make[2]: Leaving directory hmt/sirius1/prv0/kd/fdc/solaris9ssl'
-  make[1]: [solaris2xg+openssl+zlib+pam+shadow] Error 2
-  make[1]: Leaving directory hmt/sirius1/prv0/kd/fdc/solaris9ssl'
-  make: [solaris9g+openssl+shadow+pam+zlib] Error 2
-
-The problem was caused by including an inet_aton() function ck_ssl.c for
-the benefit of platforms that don't have one in their libraries.  This is
-defeated by including NO_DCL_INET_ATON in KFLAGS.  I added this, but then
-I thought it would be a good idea to automatically sense the OpenSSL
-version so we can automatically set OPENSSL_097 or OPENSSL_098 rather than
-bombing out, so I added code to do that too, and also to set the Solaris
-version number: 9, 10, or 11.  The new entry is solaris9g+openssl.
-ckcdeb.h, makefile, 3 Sep 2009.
-
-Fixed a complaint in ckufio.c about implicit declaration of initgroups.
-ckufio.c, 4 Sep 2009.
-
-Built on Solaris 10 with gcc and Sun CC using new solaris{9,10,11} target
-that is like the new solaris{9,10,11}g one but without the gccisms.
-makefile, 4 Sep 2009.
-
-Changed solaris{9,10,11}g+ssl target to set only the SSL-specific things and
-then chain to the main solaris{9,10,11}g target.  Tested OK on Solaris 9 and
-10.  makefile, 4 Sep 2009.
-
-Created solaris{9,10,11}+ssl target that is exactly like the
-solaris{9,10,11}g+ssl except it chains to the solaris{9,10,11} target
-instead of the solaris{9,10,11}g one.  That is, it builds an SSL version of
-C-Kermit using Sun CC rather than gcc.  makefile, 4 Sep 2009.
-
-Tried building on HP-UX 10.20, bundled (non-ANSI) compiler ("make
-hpux1000").  This failed until I:
-
- . Moved a struct inititialization out of setextern(), ckuus3.c.
- . Removed an ANSIism from the declaration of sigchld_handler() in ckutio.c
- . Added a cast to strcmp() in zvuser(), ckufio.c.
-
-Builds OK now.  Built OK with "hpux1000o" (the ANSI compiler) too.
-And with "hpux1000gcc".  Couldn't test "hpux1000o+openssl".  21 Sep 2009.
-
-The Sony Playstation 2 and 3 are 64-bit PowerPC platforms that can run Linux
-if it is installed as an "other OS" on its hard disk; and the Linux kernel
-since 2.6.21 supports the PS3 without any patching required.  Pawel Rogocz
-reported that "make linuxppc" (one of the old targets that has not yet been
-integrated into the main "linux" target) compiles OK on 2.6.29-ydl61.3
-(Yellow Dog Linux release 6.2 'Pyxis'), but fails at link time because
-'openpty' isn't found, because -lutil was not included, because that part
-was added only to the main linux target.  I asked him to try "make linux"
-and he sent back a transcript in which there were thousands of errors from
-the curses code ckuusx.c.  Later I tried it myself and it built without a
-hitch.  My theory is that between then and now, a missing piece of the
-ncurses library (/usr/include/ncursesw) was installed.  21 Sep 2009.
-
-HP-UX 9.05 on PA-RISC 9000/712 building with hpux0900 (bundled compiler):
- . ckutio.c compilation failed with PENDIN and FLUSHO not defined in
-   pty_make_raw().  I dummied definitions for them to handle this situation
-   on this or any other platform where it might crop up.
-   ckutio.c, 24 Sep 2009.
- . Ditto for the PTY module, + IMAXBEL.  ckupty.c, 24 Sep 2009.
- . References to endusershell() were fatal in the bundled compiler.  Changed
-   the hpux0900 target to define NODCLENDUSERSHELL, and put a special case
-   in ckufio.c to not put a cast in front of the call if NODCLENDUSERSHELL
-   is defined.  Now it builds and links OK.  makefile, ckufio.c, 24 Sep 2009.
-
-HP-UX 9.05 on PA-RISC 9000/712 building with hpux0900o (optimizing compiler):
- . Warnings in ckutio.c at line 14860 about arguments to select (pointers
-   are not assignment-compatible).  "man select" says arguments are ints.
-   Defining INTSELECT fixes these warnings but results in fatal errors later
-   around line 14881 and others in the area involving FD_SET.  This was too
-   involved so I put it back as it was.  24 Sep 2009.
-
-Built OK on Solaris 10 with Sun CC.  A couple warnings about implicit
-function declarations for curses routines because apparently they aren't
-declared in curses.h.  Tuff.  25 Sep 2009.
-
-Tried building on Solaris 10 with Sun CC and OpenSSL 0.9.8k, and this
-uncovered various loose ends in the solaris9+openssl target, which I fixed.
-makefile, 25 Sep 2005.
-
-Fixed four typos in printfs in ck_ssl.c, \% instead of just %.  25 Sep 2009.
-
-Squelched 20-some complaints about a character array being referred to
-directly instead of by a pointer, plus several other similar nits to get rid
-of all the compilation warnings on Solaris 10 with Sun C 5.8 Patch 121015-06
-2007/10/03.  ckctel.c, ckctel.h, 25 Sep 2009.
-
-Built the result on the same Solaris 10 system with gcc 4.2.4 using the
-new solari10g+openssl target, working out a few kinks here too.
-makefile, 25 Sep 2009.
-
-Made consolidated Solaris 9/10/11 64-bit targets for gcc, solaris9g64,
-solaris10g64, solaris11g64, tested on Solaris 10 Sparc. makefile, 25 Sep 2009.
-
-Made consolidated Solaris 9/10/11 64-bit targets for Sun cc: solaris9_64,
-solaris10_64, solaris11_64.  These simply set a couple flags and chain to
-the main solaris9 target.  makefile, 25 Sep 2009.
-
-Removed a bunch of old superfluous Solaris 9 and 10 targets: oldsolaris9,
-oldsolaris9lfs, solaris9g64 solaris9g_64, oldsolaris10 old solaris10lfs,
-oldsolaris10+openssl, oldsolaris10g+openssl, solaris10_64, oldsolaris10g,
-solaris10g_64, solaris10g64.  There are still plenty more to prune but it's
-a start.  makefile, 25 Sep 2009.
-
-Added or fixed some missing prototypes in ckctel.h:
-fwdx_send_xauth_to_xserver(), fwdx_parse_displayname.  25 Sep 2009.
-
-Improved the instructions for building secure versions in the makefile,
-using this example:
-
-  make solaris9+openssl "SSLINC=-I/opt/openssl-0.9.8k/include" \
-   "SSLLIB=-L/opt/openssl-0.9.8k/lib"
-
-makefile, http://kermit.columbia.edu/security.html, 25 Sep 2009.
-
-Built on HP-UX 11.11, 26 Sep 2009:
- . make hpux1100 (ok)
- . make hpux1100gcc (ok)
- . make hpux1100o (gets a lot of warnings about sendpath and sendfile,
-    because they are also declared in <sys/socket.h>, but builds OK)
- . make hpux1000gcc+openssl \
-    SSLINC=-I/opt/openssl/include SSLLIB=-L/opt/openssl/lib
-
-Note: sendpath and sendfile are not Kermit symbols.  The warnings are coming
-from socket.h: 'Redeclaration of "sendfile" with a different storage class
-specifier'.  This is nothing new; see notes of 2-4 Jan 2005.
-
-From Peter Eichhorn:
- . Update to makefile to make current code build OK on HP-UX 8.00.
- . Changes to format of some hints to make them more copy-and-pastable.
-makefile, ckuu5.c, 28 Sep 2009.
-
-From Peter Eichhorn: Changes to HP-UX 7.0 target to increase the switch table
-stack size, which was overflowing.  makefile, 30 Sep 2009
-
-HP-UX 6.5 (1989), "make hpux0650tcpc"... (8:19...)  Needed to not include
-arpa/inet.h (which doesn't exist) and not use host address lists (add
--DNOHADDRLIST), which gets us past ckcnet.c, but in ckcftp.c we bomb out on
-FD_SETSIZE undefined.  Somehow we worked around this in ckcnet.c.  Patched
-in a definition in ckcftp.c, and also added -DINTSELECT to compiler flags.
-Compiles ok, bombs at link time on bcopy, bzero, FD_ZERO, FD_SET, FD_ISSET.
-Now it compiles and links OK but dumps core when started.  Added
--DNOCKGETFQHOST, rebuilt from scratch (takes 35 minutes).  It starts OK, but
-it dumps core when given a "telnet xxx" command, where xxx is a hostname.
-However, it works OK if an IP address is used: "telnet 123.45.6.78".  It
-took all day to track this down, but now it's fixed (see the #ifdef HPUX6
-sections of ckcnet.c).  So now (for the first time, I think) we have both
-telnet and ftp in HP-UX 6.x, if anyone cares.  ckcnet.[ch], ckcftp.c,
-makefile, 2 Oct 2009.
-
-Changed default SET TERMINAL TYPE type for K95 from vt320 to vt220.  This is
-because Unix OS's such as Solaris have dropped vt320 as a terminal type.
-settrmtyp(), ckuus7.c, 5 Oct 2009.
-
-I moved the PUTENV command code, which was inline, to a function, doputenv().
-ckuus[r7].c, ckuusr.h, 5 Oct 2009.
-
-Changed the UNIX version of SET TERMINAL TYPE to take a value and then do
-the equivalent of "export TERM=value" by calling doputenv().  This sets
-\$(TERM) correctly and passes its value along to inferior processes.
-However, to make this take effect within Kermit itself (for the fullscreen
-file transfer display and for the SCREEN command, Ctrl-L, etc) I also had to
-reinitialize the curses database, which is tricky because normally if you
-feed it an unknown terminal name, it just exits.  ckuus7.c, 5 Oct 2009.
-
-Changed the little-known and little-used RESET command (which closes all
-open files) to also put command echoing back to normal in case it got
-messed up somehow (as in HP-UX 6.5, upon returning from PUSH).
-ckuusx.c, 5 Oct 2009.
-
-For Unix, increased string buffer sizes for wildcard expansion for all
-platforms that have BIGBUFOK defined from 500000 (0.5M) to 10000000 (10M)
-bytes, and for 64-bit builds to 2000000000 (2G) bytes.  No point making
-it bigger than that because malloc's argument is a size_t, which is an int.
-ckufio.c, 5 Oct 2009.
-
-Built on Mac OS X 10.4.11, required one minor adjustment to the makefile
-(-DNODCLINITGROUPS).  This was using the macosx10.5 target, which is
-supposed to be universal like the linux and netbsd targets, but not yet
-proven.  Also built a 64-bit version (-mpowerpc64 -mcpu=G5 -mtune=G5
--arch ppc64); it compiles and links OK but won't start: "Bad CPU Type
-in executable".  Fix later...  makefile, 5 Oct 2009.
-
-Changes from Seth Theriault to suppress signed vs unsigned char warnings in
-Mac OS 10.5.8 from gcc4, and a new makefile target for Mac OS X (presumably
-10.3.9 or later) + Kerberos 5 and OpenSSL.  ckutio.c, ckuath.c, ckctel.c,
-ckcnet.c, ckcftp.c, ck_crp.c, makefile, 6 Oct 2009.
-
-  Later I had to back out of these, because although it made for a
-  clean build, in the resulting executable SSL connections didn't work.
-
-Tue Oct  6 17:23:27 2009
-FTP address resolution is broken, but ftp_hookup() hasn't changed.
-So... (see the #ifdef HPUX6 sections of ckcnet.c)  (I did, and I rolled
-back some of the changes from the other day, but it made no difference.)
-Putting back the ckcftp.c from a few weeks ago makes no difference.
-Putting back the ckcnet.c from a few weeks ago makes no difference.
-
-Added patches from Seth Theriault so macosx10.5+krb5+openssl would build
-on Mac OS X 10.3.9.  makefile, ckcftp.c, 7 Oct 2009.
-
-Built today's code on Linux RHEL4, NetBSD 5.0.1, Solaris 9, and Mac OS X
-10.4.11, both with and without SSL.  The NetBSD system has OpenSSL 0.9.9-dev.
-7 Oct 2009.
-
-In Mac OS X 10.6, the following symbols are unresolved at link time:
-_des_key_sched, _des_new_random_key, _des_ecb_encrypt,
-_des_init_random_number_generator, _des_fixup_key_parity.  This is
-with OpenSSL 0.9.8k.  But it doesn't happen on other platforms that
-have 0.9.8k.
-
-Added SET SESSION-LOG NULL-TERMINATED-TEXT.  This is for the benefit of a
-speech synthesizer that will speak a line of text only after receiving a
-NUL character.  A more general solution would be to define a filter or
-whatever, but who has time.  ckuus[23x].c, 7 Oct 2009.
-
-Consolidated Mac OS X targets, and removed experimental 64-bit ones, because
-they never could work in 10.5 and earlier because 64-bit libs are missing,
-and 10.6 and later are 64-bit automatically.  makefile, 8 Oct 2009.
-
-Built on Mac OS X 10.6.1.  It came out automatically as a 64-bit build
-because __LP64__ is defined somewhere that I can't find.  But this explains
-why the 0.9.8k on 10.6 comes up with missing symbols when the 0.9.8k lib
-10.5 (or on Solaris or on Linux) does not: it's a different library: "Mach-O
-64-bit dynamically linked shared library x86_64", rather than "Mach-O
-dynamically linked shared library ppc".  Probably the 64-bit version has
-some things #ifdef'd out.  Added -m32 to the CFLAGS and LNKFLAGS for the
-macosx+krb5+openssl targets, and it built OK one time.  But then the errors
-came back.  makefile, 8 Oct 2009.
-
-Updated C-Kermit installation for Mac OS X in ckuwr.html on the website.
-8 Oct 2009.
-
-Tried some things to get around the problem with OpenSSL in Mac OS X 10.6,
-to no avail.  Asked Jeff.  He said, "MacOS X no longer includes DES anywhere
-on the system.  Not for SSL, not for Kerberos, not for anything.  This will
-increasingly become the situation on new operating systems.  Windows 7 and
-2008 R2 will also ship with no DES."  Sure enough, the Mac OS X Server
-Upgrading and Migrating document for 10.6 says, "Mac OS X Server v10.6 does
-not support single DES encryption. It supports AES 128 and 256 encryption
-types. However, during a migration or upgrade from v10.4 to v10.6, servers
-that were Kerberized by the v10.5 Open Directory server will not use the AES
-128 or 256 encryption types. To use the AES 128 or 256 encryption types you
-must re-Kerberize all servers."  12 Oct 2009.
-
-DES and 3DES encryption can be excluding removing the -DCK_DES flag.  I
-removed this one and -DLIBDES (and -m32) and this makes a working 64-bit
-version.  Then I added code to the macosx+krb5+openssl target to use these
-flags if the Mac OS X version was 10.5 or less and leave them out for 10.6
-or later.  Tested on 10.4.11 and 10.6.1.  A better way to do it might have
-been "nm -gj libssl.dylib | grep des_", but that gives the same results on
-10.4 and 10.6.  Also, 10.6 still has /usr/include/ssl/des.h.
-makefile, 13 Oct 2009.
-
-Next issue:
-  In file included from ckutio.c:15674:
-  /usr/lib/gcc/i386-redhat-linux/3.4.6/include/varargs.h:4:2: #error "GCC no
-  longer implements <varargs.h>."
-  /usr/lib/gcc/i386-redhat-linux/3.4.6/include/varargs.h:5:2: #error "Revise
-  your code to use <stdarg.h>."
-
-The problem occurs when trying to force a non-ANSIC build with GCC.
-Changing the source file to include <stdarg.h> instead of <varargs.h>
-doesn't help because evidently <stdarg.h> requires an ANSI C compiler.
-Nothing can be done about this.  13 Oct 2009.
-
-Next issue: Can't compile ckcftp.c with -DNOCSETS or -DNOSPL; some
-#ifdef/#endif doesn't match up.  Sigh, this is the hardest kind of thing to
-debug.  There's 17,622 lines of code in this module and no tool that I know
-of.... Wait, I wrote one.  But it shows all the #if/#ifdef/#ifndef's and
-#endifs matching up just fine.  Backing off to ckcftp.c of a few days ago
-(before char / unsigned char casts were added), I see that it builds OK, so
-I backed off to that one, but put back the special case #ifdef for MACOSX103
-declaring CONST gss_OID_desc, and it builds OK (the other stuff was purely
-cosmetic, when will I learn?).  ckcftp.c, 13 Oct 2009.
-
-Protected cvtstring() and related functions with #ifdef NOCSETS..#endif,
-and ditto for the character-set conversion code in dorename().
-ckuus6.c, 13 Oct 2009.
-
-Fixed an #endif /* TNCODE */ that was a line too low in ttptycmd(),
-causing -DNONET builds to fail.  ckutio.c, 13 Oct 2009.
-
-There was a reference to doputenv() that wasn't guarded by #ifndef NOPUTENV,
-fixed in ckuus7.c, 13 Oct 2009.
-
-Moved doputenv() and settermtyp() out of an #ifdef NOLOCAL section because
-these are useful even when not making connections.  ckuus7.c, 13 Oct 2009.
-
-Moved havelfs declaration outside of #ifdef NOXFER because it was also used
-for other things.  ckcmai.c, 13 Oct 2009.
-
-COPY /PRESERVE depended on code from the Kermit protocol module, which
-is omitted in -DNOXFER builds.  Disabled COPY /PRESERVE in -DNOXFER
-builds.  ckuus6.c, 14 Oct 2009.
-
-SHOW PROTOCOL code for external protocols had to be #ifdef'd out for
--DNOPUSH builds.  ckuus4.c, 14 Oct 2009.
-
-There was some confusion between "No XYZMODEM" and "No extermal protocols";
-cleared up in ckuus3.c, 14 Oct 2009.
-
-After all that, 86 different combinations of feature selections built OK on
-Linux.  And the Kerberized version (K5) works OK on Linux for Telnet and FTP.
-14 Oct 2009.
-
-Changed version number to 9.0.  All modules, 16 Oct 2009.
-
-Need to make LOG SESSION log to a tty.  Right now "log session
-/dev/ttyKeySerial1" says "Write permission denied" even though the device is
-crw-rw-rw-.  This happens in zchko(), which is called by cmofi().  The
-problem is that /dev/ is not writeable.  I added a Unix-only clause that
-attempts to open the file for write access using open(), in order to get a
-file descriptor, which then can be passed to isatty() to check if it's a
-tty, and if so, to allow access.  And then close it.  I tested this on Mac
-OS X as follows:
-
-  log session /dev/ttyKeySerial1
-  telnet somehost
-
-The Mac's serial port was connected to the serial port of another computer
-where Kermit displayed the incoming characters in CONNECT mode.  Glitches:
-
- 1. The port has to be set up as desired in advance, outside of Kermit.
- 2. log session /dev/ttyKeySerial1 will hang if any required modem signals
-    are not present when the port is opened.
- 3. Bypasses lockfile mechanism - so we do this only if -DNOUUCP.
-
-For (2), I tried setting O_NDELAY / O_NONBLOCK, and this allowed zchko() to
-continue, but then it freezes in the subsequent fopen().  So I changed
-zopeno() to also check if the device is a serial port, and if so, to open()
-it with O_NDELAY / O_NONBLOCK, and then convert the file descriptor into a
-file pointer with fdopen().
-
-Now for the speaking device that needs lines to be terminated by NUL...
-
-  set session-log binary       <-- need to put these in SHOW LOG
-  set session-log null-padded      (and in HELP SET LOG)
-  set line /dev/ttyKeySerial1
-
-This part works.
-
-This feature is enabled only for -DNOUUCP builds because serial ports aren't
-like other Unix files; we would have to create a lockfile, but we can't do
-that...  actually, ttlock() takes a name as an argument, but ttunlck() does
-not, so there would be no way to remove the lock.  Anyway, there is only one
-API for configuring the port (speed, flow control, etc) and it only works
-with the SET LINE device, not any random file.  To fix this would require
-massive redesign and changes.  ckuus[23].c, ckufio.c, 19-20 Oct 2009.
-
-I made -DNOUUCP the default for Mac OS X, since everybody winds up building
-it that way anyhow.  To undo this, do "make macosx KFLAGS=-UNOUUCP".
-makefile, 21 Oct 2009.
-
-Changed SET SESSION-LOG TEXT to strip out ANSI escape sequences; 
-previously there wasn't that much difference between TEXT and BINARY logs.
-It's still not perfect; for example it doesn't delete characters that the
-user erased.  (Made sure this still builds with -DNOESCSEQ.)
-ckucns.c, 22 Oct 2009.
-
-Changed SHOW LOG to show the SET SESSION-LOG settings, as well as
-SET DEBUG, which was not shown before.  ckuus5.c, 22 Oct 2009.
-
-If a series of PUTENV commands is given, each new one undoes the previous
-one, so only the last definition is seen by the new fork (or by Kermit
-itself).  Turns out you can't feed automatic variables to putenv(); they
-have to be static, so to allow for multiple PUTENV commands Kermit has to
-maintain an array of static strings.  ckuus7.c, 6 Nov 2009.
-
-From Seth Theriault, a better way for the makefile to determine the
-Mac OS X version number; there's a program for this, sw_ver.  makefile,
-6 Nov 2009.
-
-Peter Eichhorn reported that file-transfer failure hints were not coming
-out since Dev.27.  The only change I made since then was to skip them if
-the file-transfer protocol was not Kermit.  I was using the wrong variable
-in the tests, 'proto' instead of 'protocol'.  ckuus5.c, 6 Nov 2009.
-
-Changed Mac OS X targets to correctly extract the Mac OS major version
-from uname -r in order to choose correctly between utmp and utmpx; this
-wasn't working in 10.6.1.  makefile, 6 Nov 2009.
-
-Fix from Seth T. for an oversight in the previous edit.  Also add
-MACOSX103 to "show features" display.  makefile, ckuus5.c, 10 Nov 2009.
-
-Added REJECT as a synonym for DISCARD in SET FILE COLLISION; it's more
-intuitive and more accurate.  ckuus[27].c, 15 Nov 2009.
-
-\fsplit() and \fword() always break on 8-bit characters unless you explicitly
-put every single 8-bit value into the include set, e.g. (for a TSV file):
-
-  undef include
-  for \%i 128 255 1 {
-      if == \%i 9 continue
-      .include := \m(include)\fchar(\%i)
-  }
-  .\%n := \fsplit(\m(line),&a,\9,\m(include))
-
-I changed cksplit() to treat all 8-bit bytes 128-255 as non-break characters
-by default.  It might have made more sense to do this for 160-255 (since
-128-159 are traditionaly C1 control characters) but thanks to Microsoft
-tradition is out the window.  To treat one or more 8-bit characters as break
-characters, put them in the break set.  This might break some scripts, but I
-doubt it because this flaw was so awful that if anyone had come up against
-they would have let me know.  ckclib.c, 16 Nov 2009.
-
-Changed the netbsd target to set -funsigned-char, since cc on NetBSD is
-actually gcc.  makefile, 16 Nov 2009.
-
-Changed macosx targets to get the CPU type from the HOSTTYPE environment
-variable.  Also added getenv("HOSTTYPE") as a last-resort method to set the
-\v(cpu) variable at runtime (maybe it should be the first resort?)...
-ckuus4.c, makefile, 16 Nov 2009.
-
-Made sure the solaris9_64 and solaris10 targets still work.  16 Nov 2009.
-
-Made sure the current source package builds OK on HP-UX 10.20...  Got a lot
-of "warning 6062: Optdriver: Exceeding compiler resource limits in xxx; some
-optimizations skipped. Use +Onolimit if override desired" but it builds OK.
-Tested long file transfer; works OK.  17 Nov 2009.
-
-Built on FreeBSD 7.2 with and without OpenSSL, all OK.  17 Nov 2009.
-
-Built on NetBSD 5.0.1 with and without OpenSSL, all OK, but netbsd+krb5
-fails with "can't find -lgssapi_krb5"; worked around this with
-"K5LIB=-L/usr/local/kerblib" (where the lib actually is on this host) but
-then it failed with "ckcftp.c:13868: error: 'gss_nt_service_name' undeclared".
-17 Nov 2009.
-
-I found a VMS 6.2 system... Takes a loooong time to build there.  In
-ckuusy.c, DEC C didn't like the prototypes and declarations of dorlgarg()
-and dotnarg() as static so I made them not static.  But that didn't help,
-now it fails at the very end, saying the final #ifdef is an invalid
-statement.  It looks like an #ifdef mismatch that affects only VMS.  I ran
-my #ifdef matcher, it turned up nothing.  I substituted a copy of ckuusy.c
-from 2007, it comes up with the same errors.  Then I substituted the copy
-from 8.0.211 from 2004, and this one compiled OK and, miraculously, the
-whole mess even linked OK and runs OK.  The Alpha binary is 2.84MB.  Now I
-have 4500 lines of code to compare....  I went through the two files line by
-line and I can't see a single thing wrong.  I gave up and tried building the
-TCP/IP version.  It builds fine except for ckuusy.c, with the utterly
-useless error message:
-
-  #endif /* NOCMDL */
-  ...................^
-  %CC-E-BADSTMT, Invalid statement.
-
-Indicating the last line in the file.  Just for the heck of it, I put
-another line after that one:
-
-  /* This is a test */
-
-and got:
-
-  /* This is a test */
-  ....................^
-  %CC-E-BADSTMT, Invalid statement.
-
-So it is not objecting to anything in the file.  Trying the old LISP trick,
-I put an extraneous closing bracket after that.  Success!  Honestly, I don't
-see anything wrong with file.  It's DEC C V5.3-006.  I suspect a C bug.
-I'll leave it like this for now until I get access to some other VMS
-versions.  Another clue is that when building the network version I get a
-horrible warning I never saw before from a module that hasn't been touched
-in a very long time (ckvrtl.c).  Also, in the network version, I note that
-the FTP code is not compiled in.  We have to try this again with some
-command-line switches, but it'll do for now.  ckuusy.c, 18 Nov 2009.
-
----C-Kermit 9.0 Alpha.01---
-
-From Steven Schweda (SMS), the real solution for the VMS closing brace
-problem, it wasn't a DECC bug, it was a me bug.  ckuusy.c, 20 Nov 2009.
-
-Rediscovered the new VMS build options: f for Long Files, i for Internal
-FTP.  "make mnf" doesn't work on VMS 6.2, it looks like the VMS definition
-for CK_OFF_T got lost.  Same thing with "make mfi".  Come back to this later.
-
-From Gerry Belanger, a fix to INPUT /COUNT:n.  ckuus4.c, 26 Nov 2009.
-
-Added \fsqueeze(s), returns string s with leading and trailing whitespace
-removed, Tabs converted to Spaces, and multiple spaces converted to single
-spaces.  For now, ASCII only, no options.  ckuusr.h, ckuus[24].c, 27 Nov 2009.
-
-I wrote a Kermit script to read a big file of addresses on Solaris 9,
-\fsqueeze()ing each line.  After about 14000 lines, there was a malloc
-failure in getnct() (the command-file reader).  There's nothing wrong with
-\fsqueeze(), the failure is on a deeper level, because the same thing
-happens if I use \fupper() (which is structurally identical to \fsqueeze())
-in the same script.  The problem is not in getnct() either, because every
-malloc() is freed (I checked).  On the other hand, the same script (with
-\fupper() instead of \fsqueeze() completes OK in C-Kermit 8.0.201.  If I
-remove the function call (\fsqueeze() or \fupper()) from the script, it also
-runs OK in 9.0.  This seems to point the finger at fnevel(), which contains
-countless malloc's and free's.  But comparing fneval() between 8.0.211 and
-9.0, I don't see any difference that would explain this behavior -- nothing
-at all that involves malloc(), makstr(), or free().  Nor any pertinent
-change in the caller (zzstring) of fneval().  27 Nov 3009.
-
-Another problem is that when this happens, the error is not caught (e.g. by
-the IF FAIL statement after the command that contains the function call);
-instead, C-Kermit returns immediately to its prompt.  27 Nov 2009.
-
-It could simply be that some of the buffers we allocate are much bigger now.
-But again, I don't see much difference between 8.0.211 and 9.0; we were
-already allocating 32K command-related buffers (malloc() takes a size_t, and
-size_t is an int almost everywere).  I built the same source on NetBSD and
-ran the same script (with \fqueeze()), and it worked fine.  Let's worry
-about this later, if it comes up.  27 Nov 2009.
-
-Built OK on Silicon Graphics IRIX 6.5 R10000; regular build OK, SSL and
-Kerberos builds failed.  30 Nov 3009.
-
-Tried to build on Digital Unix 4.0F but it blew up in ckutio.c, apparently
-not recognizing any of the terminal struct symbols from termios.h.  Tried
-again with gcc, same thing.  Tried explicitly #including <sys/termios.h>
-within #ifdef TRU64, same thing.  What could have changed?  30 Nov 2009.
-
-Built OK on Linux RHEL5.4/Itanium-2, make linux.  The secure build
-required "FLAGS=-DNO_KRB5_INIT_ETS" and built OK.  30 Nov 2009.
-
-Built OK on Digital Unix 4.0F using "make osf" instead of "make tru64-40f".
-I don't know why the specific target doesn't work, but it's not worth
-chasing down.  2 Dec 2009.
-
-Built OK on MirBSD 10, despite a lot of gratuitous compiler warnings.  Built
-OK on MirBSD 10, OpenBSD 4.5, and Fedora 10.  3 Dec 2009.
-
-(Various other successful Unix builds in these weeks...)
-
-Built on VMS 7.2 and 8.3 with and without TCP/IP, no problems.  11 Jan 2010.
-
-Built on VMS 8.3 with "make fi" to include the FTP client and long-file
-support (mid Jan 2010).
-
-Built on VMS 8.3 with UXC 5.6 and HP SSL 1.3, which is OpenSSL 0.9.7e.
-It compiled and linked OK but when I tried to make an FTP SSL connection
-it crashed in SSL$LIBSSL_SHR, which is called from ssl_auth(), after having
-had TLS accepted as an authentication type, but before actually
-authenticating.  In Unix:
-
- 19. ftp open ftp.somecompany.com /user:pge.com/test_quota /password:xxxxxx
-Connected to ftp.somecompany.com.
-220-Somecompany FTP v6.0 for WinSock ready...
-220 Welcome to the online storage FTP server.  Please check the main web
-site for system announcements and AUP. (O)
----> AUTH TLS
-234 AUTH command OK. Initializing SSL connection.
-TLS accepted as authentication type
-SSL DEBUG ACTIVE
-=>START SSL/TLS connect on COMMAND
-
-In VMS:
-
- 19. ftp open ftp.somecompany.com /user:pge.com/test_quota /password:xxxxxx
-Connected to ftp.somecompany.com.
-220 Somecompany FTP v6.0 for WinSock ready...
----> AUTH TLS
-234 AUTH command OK. Initializing SSL connection.
-TLS accepted as authentication type
-SSL DEBUG ACTIVE
-%SYSTEM-F-ACCVIO, access violation, reason mask=04, virtual
-address=FFFFFFFF8001A120, PC=000000000068B118, PS=0000001B
-
-Note: The Unix version received the second 220 response, the VMS version did
-not.  That's odd, it's the same code...  25 Jan 2010.
-
-Added some essential details to the HELP FSEEK text.  ckuus2.c, 25 Jan 2010.
-
-Discovered that the result returned by \fsearch() is totally unreliable.
-This is probably too hard to fix.
-
-FSEEK did not pay attention to SET CASE, searches were always case sensitive.
-Fixed in ckuus7.c, 26 Jan 2010.
-
-FSEEK failed to find anything if the search pattern was matched in the first
-line of the file.  Fixed in ckuus7.c, 26 Jan 2010.
-
-\fword() and \fsplit()....  Another change, but not backwards-incompatible.
-One may now put the word ALL (just like that, all uppercase) as the include
-set (4th argument) to indicate that there will be no break characters other
-than those explicitly given in the break set, e.g. \fsplit(\m(xx),&a,:,ALL)
-breaks a line only on a colon (:), nothing else.  The original rules for
-cksplit() were more than a little counterintuitive: the default break set is
-all non alphanums, and the default include set is all alphanums, so if you
-wanted to parse (say) a CSV file, breaking only on comma, you had to think
-of all the characters you wanted to keep.  This way you just say ALL.
-ckclib.c, 26 Jan 2010.
-
-Speaking of CSV files... How can you put comma as a function argument when
-comma is the function-argument separator?  Use one of these forms:
-
- \fsplit(\m(xx),&a,",",ALL)
- \fsplit(\m(xx),&a,{,},ALL)
- \fsplit(\m(xx),&a,\44,ALL)
- \fsplit(\m(xx),&a,\fchar(44),ALL)
-
-From John Dunlap, U. of Washington Applied Physics Lab: 'When "stty -a <
-/dev/ttyS0 | grep crtscts" shows "crtscts" (not "-crtscts") and when using a
-three wire serial interface and when asking kermit to not use flow control
-(set flow none) then "ckutio.c1" (see attachments) fails while "ckutio.c"
-works.  The result of "diff -u ckutio.c1 ckutio.c" is attached as "diffs"'.
-ckutio.c, 26 Jan 2010.
-
-Changed the year from 2009 to 2010 in the modules I worked on today and in
-the heralds, etc.  ckckmai.c, ckuus5.c, ckutio.c, ckclib.c, ckuus7.c,
-26 Jan 2010.
-
-Built on Linux Fedora Core 3, regular and with OpenSSL 0.9.7a.  Built on
-Ubuntu 9.4 OK, but SSL and Kerberos builds failed due to not finding libs
-and/or header files.  I'm sure this could be fixed...  27 Jan 2010.
-
-Added SSL, KRB4, and KRB5 to the startup herald for versions that were
-built with SSL, Kerberos 4, or Kerberos 5.  Built OK on Fedora 3 with
-linux+krb5+ssl and new banner shows correctly.  ckuus5.c, 27 Jan 2010.
-
-Set NO_KRB5_INIT_ETS by default in ckuath.h since krb5_init_ets() is a no-op
-in Kerberos 1.4.x and later and in some installations it can't be found,
-which clobbers the build.  ckuath.h, 27 Jan 2010.
-
-Adapted to MINIX 3 1.5, the first version that has virtual memory according
-to Andy T, who should know.  On earlier versions (e.g. MINIX 3 1.2) any
-attempt to build C-Kermit causes the compiler to crash.  Now the compiler
-doesn't crash but it spews out countless warnings about old-fashioned
-function declarations that I don't get anywhere else.  The real problems
-came in ckutio.c where numerous symbols were undefined at compile time and
-the POSIX function tcgetpgrp() was not found at link time, even though there
-is a prototype for it in the MINIX header files, and there is no alternative
-(since POSIX doesn't let us use ioctl()).  Also note that there is some
-confusion over the compile-time symbols MINIX, MINIX2, MINIX3, and MINIX315.
-You would expect MINIX to mean "any version of MINIX" but in some parts of
-ckutio.c it means MINIX 1.0.  I sincerely doubt that C-Kermit 9.0 can be
-built on any version of Minix before 3.1.5 so I removed the confusion and
-made MINIX mean "any Minix".  It builds on 3.1.5 OK now, except for the FTP
-client.  This can probably be fixed but...  Modules changed: ckcdeb.h,
-ckuver.h, ckcmai.c, ckuus5.c, ckutio.c, 1 Feb 2010.
-
-Later.. Andy says MINIX does not support job control, so no program is ever
-in the background.  That settles that!  1 Feb 2010.
-
-Built OK on Minix, Linux, Mac OS X, Solaris 9, NetBSD 5.0.1...  1 Feb 2010.
-
----C-Kermit 9.0 Alpha.02---
-
-From Christian Corti at Uni-Stuttgart.de: fixes to allow building on SunOS
-4.1, which once was my main development platform but which is long-gone from
-here.  ckupty.c, ckutio.c, 9 Feb 2010.  (He says it is also necessary to
-comment out the "struct winsize" and "struct ttysize" in sys/ioctl.h;
-otherwise there will be a conflict with sys/ttycom.h (included by termios.h)
-which also declares these structs. But you need both includes.')
-
-From John Dunlap, a fix for Kermit protocol fixed packet-timeout interval
-going to a unexpected value (missing else clause in two places).
-ckcfn2.c, 9 Feb 2010.
-
-Added an aixg target to build on AIX with gcc when gcc is not installed as
-cc, and also added CC=$(CC) CC2=$(CC) clauses to the aix and aix+ssl
-targets.  Wow, AIX really loses bigtime when receiving files through its ssh
-server.  Streaming can't be used, sliding windows recover from errors but
-there are tons of them using the default 4K packets; 500 works much better.
-Built with IBM cc and gcc, and also tested (successfully) the new aix+ibmssl
-target, in which the OpenSSL headers and libs are in a standard place.
-makefile, 9 Feb 2010.
-
-In ckupty.h, make the #include <sys/ioctl.h> be #ifndef SUNOS41.
-From Christian Corti.  10 Feb 2010.
-
-Built on VMS E8.4.  12 Feb 2010.
-
-Tried to build on a real VAX-11/785 but the machine seems to be seriously
-wedged.  12-15 Feb 2010.
-
-Added note to CKVKER.COM to the effect the the 'f' option has no effect
-on VAX architecture.  15 Feb 2010.
-
-Moved the #include "ckvrtl.h" in the FTP module to below the include for
-utime.h, because building the VMS version with the 'i' option (meaning
-"include internal ftp client") results in "struct utimbuf tp" erroring out
-because struct utimbuf is not defined yet (at least in some version of VMS
-with some version of C).  From Rob Brown, ckcftp.c, 20 Feb 2010.
-
-From Martin Vorlaender: new code in VMS C-Kermit build procedure to detect
-OpenSSL version automatically.  ckvker.com, 22 Feb 2010.
-
-Added code to INPUT command to strip ANSI escape sequences.  It's activated
-by SET SESSION-LOG TEXT.  ckuusr.h: added prototype for chkaes();
-ckucon.c, ckucns.c: made inesc[] and oldesc[] global instead of static; 
-ckuus4.c: doinput() code for skipping escape sequences.  1 Mar 2010.
-
-Peter Eichhorn complained that if you make an ssh connection with Kermit,
-then log out from the ssh host, and then use a "connect" command to
-make a new connection to the same host (which you can do with Telnet),
-Kermit says (e.g.):
-
- DNS Lookup... Can't get address for ssh -e none somehostname
- Sorry, can't open ssh -e none somehostname: Error 0
-
-I added code to detect and handle this case and it seems to work OK, even
-though it's kind of a hack.  ckuusr.[ch], ckuus7.c, 1 Mar 2010.
-
-There has never been a clean way to put debugging messages (ECHO commands)
-in a script which are executed only if debugging is desired and ignored
-otherwise.  You'd have to set a random variable and test it, or define a
-macro or whatever.  To make this more straightforward, I added SET DEBUG
-MESSAGE ON/OFF/STDERR, and added a new MESSAGE (syn: MSG) command for printing
-debugging messages to stdout if SET DEBUG MESSAGE is ON or to stderr if SET
-DEBUG MESSAGE is STDERR.  ckcmai.c, ckuus[r23].c, 12 Mar 2010.
-
-Also for debugging and error messages, I added \v(lastcommmand) so that
-the command that failed can be included in an IF FAIL or DEBUG error message.
-This works even for commands that have syntax errors.
-ckuusr.h, ckuus5.c, ckucmd.c, 12 Mar 2010.
-
-From SMS for VMS: 'Added/documented P3 options INTSELECT, OLDFIB, OLDIP.
-Disabled (commented out) automatic definition of NOSETTIME for VMS before
-V7.2 (vms_ver .lts. "VMS_V72").'  ckcdeb.h, ckcftp.c, ckcnet.c, ckuus[2567].c,
-ckvfio.c, ckvker.com, ckvrtl.[ch], 15 Mar 2010.
-
-Exposed inesc[] and oldesc[] for VMS, so new INPUT command escape-sequence
-stripping can work (really, chkaes() and related global variables should be
-moved out of ck[uvd]con.c/ckucns.c and into a common module; do that later).
-ckuusr.h, ckvcon.c, 15 Mar 2010.
-
-Built OK on Solaris9, Mac OS X 10.4.11, RHEL4 (32-bit), RHEL5 (64-bit),
-AIX 5.3, SCO OpenServr 6.0.0...  15 Mar 2010.
-
-Not so good on VMS, turns out I made a typo in one of the VMS updates
-(#ifndef OLDIP instead of #ifdef...).  ckcnet.c, 16 Mar 2010.
-
-More from SMS for VMS, 16 Mar 2010:
- . Set MAXPATH correctly for VMS, ckcdeb.h.
- . NAM -> NAML, QIO replaces system( "SET PROTECTION"), bugfixes in
-   cvtdir() and nzltor(), ...  (See comments): ckvfio.c, new ckvrms.h.
-   (The RMS code in ckvfio.c was almost totally rewritten)
- . Moved "NAMX$*" (and related) macros to ckvrms.h, and renamed to
-   "NAMX_*" (and similar "$" -> "_"), moved "FIB_*" macros from ckvrtl.c.
-
-These changes are mainly to accommodate the ODS5 file system, which has
-longer and mixed-case filenames, and also to execute certain commands
-(e.g. for setting file protection, deleting directories) directly instead
-of using a system() command.
-
-Built OK on VMS 8.3 (with and without network support).  16 Mar 2010.
-
-Failed to build on VMS 6.2.  16 Mar 2010.
-
-FreeBSD 8.0 <libutil.h> has a hexdump() prototype that conflicts with the
-hexdump macro defined in ckcdeb.h.  Since the same thing is likely to happen
-elsewhere, I changed the Kermit macro to ckhexdump as well all references to
-it: ckcdeb.h, ckcftp.c, ckcnet.c, ckctel.c, ckuath.c, ckutio.c, 16 Mar 2010.
-
-Built OK on Digital Unix Tru-64 4.0E using "make osf", 16 Mar 2010.
-
-Tried again to build Digital Unix Tru64 4.0E using "make tru64-40e", but
-something prevents it from picking up the termios symbols and it blows up in
-ckutio.c, whereas this used to work in earlier C-Kermit versions.  This is
-the only Tru64 system I still have access to, so I can't tell if it's a
-local peculiarity or what.  Note that POSIX is not defined for this build.
-But if I define it, I get into trouble with "struct timeval".  Tried again
-with "KFLAGS=-DPOSIX -DNOTIMEVAL" but that doesn't help.  Tried "make
-dec-osf" and that worked OK but oddly enough it makes a Kermit with less
-features than "make osf".  16 Mar 2010.
-
-To go with MESSAGE and SET DEBUG MESSAGE, I added IF DEBUG, which is true
-if SET DEBUG MESSAGE is not OFF and false otherwise.  ckuusr.h, ckuus6.c,
-16 Mar 2010.
-
-From SMS: Corrections to my merging of SMS's changes, ckcftp.c, ckvrtl.h.
-Builds OK on VMS 6.2 now.  Also did an SSL build on VMS 8.3 with OpenSSL
-m0.9.7e and "OPENSSL_DISABLE_OLD_DES_SUPPORT" was included in P3
-automatically by Martin V's addition to ckvker.com.  17 Mar 2010.
-
-From SMS: #include <types.h> earlier for VMS in ckcdeb.h to pick up off_t
-before it is referenced.  This allows C-Kermit to compile on VMS/Alpha 6.2
-but linking fails on fseeko() and ftello() (and yet, a functional executable
-is created, and FSEEK works right).  Builds the same way with no problems at
-all on VMS 8.3 / Alpha.  In this case we get the full 64-bit arithmetic...
-Well, 62 bits:
-
-  ATLAS::C-Kermit>( ^ 2 63)
-   9223372036854775000.0
-  ATLAS::C-Kermit>( ^ 2 62)
-   4611686018427387904
-
-whereas on VMS 6.2 we get integers only up to (^ 2 30).  17 Mar 2010.
-
-Changed the VMS build procedure to enable large file support automatically
-for non-VAX and VMS 7.3 or greater.  No reason not to include this feature.
-Changed the sense of the F option to DISABLE large file support in the
-unlikely case that C-Kermit is being built on a suitable platform but the
-C library is older than VMS73_ACRTL-V0200, in which case fseeko() and
-ftello() will come up missing at link time.  ckvker.com, 18 Mar 2010.
-
-Changed VMS build procedure to include the FTP client in any network build
-by default.  Changed the sense of the I option to exclude the FTP client,
-in case anybody would want to do that.  ckvker.com, 18 Mar 2010.
-
-From SMS: updated dependencies in CKVKER.COM, fix the "don't reinclude me"
-clause in CKVRTL.H.  19 Mar 2010.
-
-Built OK on VMS 6.2 and 8.3 with and without networking.  Large file support
-included automatically in VMS 8.3  FTP client included automatically in both
-network builds.  19 Mar 2010.
-
-Changed hexdump() to ckhexdump() in ck_crp.c, which I missed before.
-19 Mar 2010.
-
----C-Kermit 9.0 Alpha.03---
-
-In HP-UX with the bundled-non ANSI compiler, we get warnings about functions
-such as endusershell(), which are declared void in the header files.  But in
-non-ANSI builds we defind VOID to be int rather than void, so our prototypes
-are wrong.  I checked that HP-UX 9, 10, and 11 all have void datatype and
-changed the definition of VOID to void in those cases.  ckcdeb.h, 29 Mar 2010.
-
-Fixed a typo in a debug() statement in cksplit() that was causing some
-warnings.  ckclib.c, 29 Mar 2010.
-
-Ditto in tls_load_certs().  ck_ssl.c, 29 Mar 2010.
-
-"make hpux1000o+ssl" files with:
-/usr/ccs/bin/ld: Unsatisfied symbols:
-   __umoddi3 (code)
-   __udivdi3 (code)
-   __eprintf (code)
-
-It appears that OpenSSL (0.9.7c in this case) requires -lgcc.
-And indeed hpux1000gcc+ssl builds fine.  29 Mar 2010.
-
-There are various warnings in the SSL code in ckutio.c, ckcftp.c, and
-ckcnet.c about pointers not being assignment compatible, but I have learned
-from experience not to try to fix these (see notes from 6 Oct 2009).
-29 Mar 2010.
-
-connect(s, (struct sockaddr *)&hisctladdr, sizeof (hisctladdr)): In FTP,
-this doesn't work on RHEL5 / Mac OX X 6.1/2 64-bit.  But the connect() in
-Telnet works.  On Mac OS X 6.2 I tried changing the socket() call to be like
-the one in ckcnet.c for Telnet, but it made no difference.  On a RHEL5.4
-system on i386, FTP works fine, so it's not the Red Hat version.  On Digital
-Unix 4.0E 64-bit, same thing:
-
-  11:23:10.722 ftp_hookup[kermit.columbia.edu]=21
-  11:23:10.722 ftp hookup A[kermit.columbia.edu]
-  11:23:10.722 ftp hookup C[kermit.columbia.edu]
-  11:23:10.722 ftp hookup socket=4
-  11:23:10.722 ftp hookup HADDRLIST
-  11:23:10.723 ftp hookup connect failed=13
-  11:23:10.723 ftp hookup bad
-
-13 = Permission denied:
-
-  [EACCESS] Search permission is denied for a component of the path prefix;
-    or write access to the named socket is denied.
-
-On Gentoo Linux, also on Alpha, the errno is 51: Network is unreachable.
-Clearly some data type in the sockets structs is out of whack.
-
-The third connect() argument is "address length".  The address is a
-struct sockaddr.  About the third argument, RHEL5 "man connect" says:
-
-  The third argument of connect() is in reality an int (and this is what 
-  4.x BSD and libc4 and libc5 have).  Some POSIX confusion resulted in 
-  the present socklen_t, also used by glibc.  See also accept(2).
-
-Building on RHEL5 on x86_64, where size_t is 8 and socklen_t is 4, I get a
-warning:
-
-  ckcftp.c: In function 'ftp_hookup':
-  ckcftp.c:14667: warning:
-   comparison is always true due to limited range of data
-
-Referring to:
-
-  if (hisctladdr.sin_addr.s_addr != (unsigned long) -1)
-
-This seems to be the problem; if I remove the (unsigned long) cast (in two
-places), the problem goes away.  Actually what I should be comparing it with
-is INADDR_NONE, which is defined appropriately in some header file, e.g. as
-0xffffffff.  Also I define it explicitly as -1 if it is not defined in any
-header file (as is the case in Solaris 9).  Tested OK on 64-bit RHEL5,
-32-bit RHEL5, Digital Unix 4.0E 64-bit, Solaris 9 32-bit, Mac OS X 10.4.11
-32-bit, Mac OS X 10.6.3 64-bit, AIX 5.3, Gentoo Linux 2.6.31 on Alpha
-64-bit, NetBSD 5.0.1 32-bit....  ckcftp.c, 29 Mar 2010.
-
----C-Kermit 9.0 Alpha.04---
-
-Yesterday's VOID redefinition caused problems for HP-UX in ckuusx.c, in the
-curses section where VOID is undef'd and not used to avoid a conflict with
-curses.h.  As a workaround I defined a new macro CKVOID with the same
-definition as VOID and used it in the offending section of ckuusx.  The real
-solution is to replace all references to VOID with CKVOID (since VOID is
-increasingly likely to cause conflicts), but a mass search and replace is
-not without risks.  ckcdeb.h, ckuusx.c, 30 Mar 2010.
-
-Changed VOID and CKVOID definition to be 'void' for all HP-UX (verified by
-PeterE back to HP-UX 6.5, 1989).  Still need to check this on HP-UX 5.21;
-if that's an exception it can be done in the makefile.  ckcdeb.h, 30 Mar 2010.
-
-The change I made to allow CONNECT to reestablish a previous SSH connection
-prevented a new SSH connection to a different host to be made.  Fixed in
-ckuus7.c, 30 Mar 2010.
-
-Fixed mistaken extern declarations of krb4_errno and krb5_errno as strings
-in nvlook(); they are ints. Built OK on Mac OS X 10.6.3. ckuus4.c, 30 Mar 2010.
-
-A fix to Trusted HP-UX makefile target from PeterE, to account for the
-equivalence of +openssl and +ssl as target suffixes.  30 Mar 2010.
-
-Added a new function \fcvtcsets(string,cset1,cset1) that converts a string
-from one character set to another.  The csets are File Character-Set names.
-ckuus4.c, 31 Mar 2010.
-
-Added a new function \fdecodehex(string,prefix) that decodes a string
-containing prefixed hex bytes.  Default prefix is %%, but any prefix of
-one of two chars (such as % or 0x) can be specified.  ckuusr.h, ckclib.h,
-ckclib.c, ckuusr.c, 31 Mar 2010.
-
-Richard Nolde reports that Kermit can't find -lpam on Fedora 12 because it's
-in /lib rather than /usr/lib.  RHEL5 has symlinks, FC12 should too.  Added a
-note to the makefile.  1 Apr 2010.
-
-Build on Solaris 11 for the first time.  Had to adjust ckuver.h to get the
-version herald right.  This was on a box that reported its architecture as
-i86pc.  1 Apr 2010.
-
-Added MIME character-set names as invisible synonyms in the file and
-terminal character-set tables, fcstab[] and tcstab[].  Note that not all the
-character sets known to Kermit are registered in MIME.  But at least now
-MIME-registered character sets can be referred to by their MIME names, e.g.
-ISO-8859-1, ISO646-ES, IBM437, WINDOWS-1252.  These are not listed if you
-type ? in a field that is parsing them, unless you type a letter first,
-e.g. "i?" lists ISO- and IBM set names.  Later maybe I'll make parallel
-tables, or keyword attribute bit that says whether a name is MIME or not.
-The real benefit of this change is that now Kermit can take its
-character-set names from external sources like email headers or web logs.
-ckuxla.c, 1 Apr 2010.
-
-Changed the IF command to accept a bare macro name its condition.  This will
-parse and execute correctly if the macro is defined and if it has a numeric
-value, or if it is not defined, in which case it evaluates to 0 (FALSE).  If
-it is defined but has a non-numeric value, a parse error occurs.  ckuus6.c,
-2 Apr 2010.
-
-Added \fstringtype() function.  Given a string argument, it tells whether
-the string is 7bit, 8bit, utf8, binary, etc.  ckuusr.h, ckuus[4x].c,
-2 Apr 2010.
-
-Did a few builds to make sure there were no booboos.  Solaris 9, NetBSD
-5.01, Linux RHEL4, HP-UX 10.20 (non-ANSI compiler and ANSI optimizing
-compiler), Mac OS X 10.4.11, SCO OSR 6.00.  5 Apr 2010.
-
----C-Kermit 9.0 Alpha.05---
-
-Increased maximum variable name length from 4K to 16K. Verified that
-too-long names are caught and recovered from correctly.  ckuusr.h, 6 Apr 2010.
-
-Implemented a new \fsplit() option for parsing CSV files, which turns out to
-be a little complicated, because the separator is not just a comma, but a
-comma and all its surrounding spaces.  Also there are special quoting rules
-for fields with embedded commas and fields with embedded quotes.  ckclib.c,
-7 Apr 2010.
-
----C-Kermit 9.0 Alpha.06---
-
-VMS changes from SMS.  They build OK, Kermit file transfers are still OK,
-but FTP text-mode GETs always hang on the 10th 8K network read.  Couldn't
-get a debug log this time.  ckcmai.c, ckvfio.c, ckvrms.h, ckvker.com.
-8 Apr 2010.
-
-Changing VNAML from 4K to 16K broke the build on HP-UX 9.  Put it back to
-4K.  9 Apr 2010.
-
-John Dunlap, running days-long stress tests between E-Kermit and C-Kermit,
-found a bug in the packet-reading and -decoding code: If a NAK packet
-arrives with its length field corrupted to indicate a bigger size, and there
-are enough bytes following in the pipeline, ttinl() will return a too-long
-packet (if there are not enough bytes waiting to be read, then ttinl() will
-properly time out).  In the bad case rpack() trusts the packet length, uses
-it as the basis for computation of the block-check length, which is then
-used to access memory that might not be there, causing (at least on John's
-Linux system) a segmentation fault.  John added the normal clause to check
-the result of the block-check calculation, and I changed ttinl() to always
-break on the eol character (normally carriage return), since this can never
-appear in a packet, even if we "set control unprefix all".  Also added a
-check to ttinl() to protect against length fields corrupted into illegal
-values.  ckcfn2.c, ckutio.c, 13 Apr 2010.
-
-From Lewis McCarthy:
-  Based on code inspection, C-Kermit appears to have an SSL-related security
-  vulnerability analogous to that identified as CVE-2009-3767 (see e.g.
-  http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2009-3767).
-
-  I'm attaching a patch for this issue relative to the revision of ck_ssl.c
-  obtained from a copy of http://www.columbia.edu/kermit/ftp/test/tar/x.zip
-  downloaded on 2010/07/30, which I believe is the latest.
-
-  When this flaw was first widely publicized at last year's Black Hat
-  conference, it was claimed that some public certificate authorities had
-  indeed issued certificates that could be used to exploit this class of
-  vulnerability. As far as I know they have not revealed specifically which
-  public CA(s) had been found issuing such certificates.
-  Some references: http://www.mseclab.com/?p=180
-  http://www.theregister.co.uk/2009/07/30/universal_ssl_certificate/
-
-Patches added to ck_ssl.c, 4 Aug 2010.
-
-Peter Eichhorn reported that "RENAME ../x ." didn't work.  This is a side
-effect of the changes of 2006 to the RENAME command, there was a little
-confusion in the renameone() routine; fixed in ckuus6.c, 4 Aug 2010.
-
-If only one file is FOPEN'd, FCLOSE given with no arguments would close it.
-Turns out to be a bad idea. Example: program with an input and output file,
-try to close the output file before it is opened by just typing FCLOSE; this
-can mess up the input file.   For safety FCLOSE has to require a channel
-number or ALL.  ckuus7.c, 4 Aug 2010.
-
-Added \fstrcmp(s1,s2,case,start,length), which has the advantage over IF
-EQU,LGT,LLT that case senstivity can be specified as a function arg, and
-also substrings can be specified.  ckuusr.h, ckuus[24].c, 5 Aug 2010.
-
-The CSV feature of Alpha.06 had a subtle flaw, namely that if the last item
-in a comma separated list was enclosed within doublequotes with a trailing
-space after the closing doublequote, a spurious empty final element would be
-created in the result array.  Fixed in cksplit(), ckclib.c, 5 Aug 2010.
-
----Alpha.07---
-
-The CSV feature of \fsplit() splits a comma-separated list into an array.
-To turn the array back into a comma separated list, \fjoin(&a,\44,1) almost
-works, except for elements contain literal doublequotes, such as:
-
-  Mohammad "The Greatest" Ali
-
-This calls for making a symbolic CSV argument for \fjoin() like the one that
-was made for \fsplit(): \fjoin(&a,CSV).  Also \fjoin(&a,TSV) for
-Tab-separated list.  Thus if Kermit reads a record in CSV format, splits it
-into an array, and then joins the array back into a CSV record, the result
-will be equivalent to the original, according to the CSV definition.  It
-might not be identical, because if the result had extraneous spaces before
-or after the separating commas, these are discarded, but that does not
-affect the elements themselves.  Furthermore it is now possible to convert
-a comma-separated list into a tab-separated list, and vice versa (which is
-not a simple matter of changing commas to tabs or vice versa).  ckuus4.c,
-12 Aug 2010.
-
-From Joop Boonen 26 Juli 2010: "Added HAVE_LOCKDEV as openSuSE >= 11.3 uses
-lockdev but not baudboy.  They use ttylock directly.  The program code has
-been added so the the program works without a problem."  makefile, ckcdeb.h,
-ckutio.c, ckuus5.c, 23 Aug 2010.
-
----Alpha.08---
-
-From Gary Mills at the U of Manitoba: convert Solaris version from BSD ptys
-to streams ptys because there are only 48 BSD-style ptys and he was running
-out.  No code changes needed, the only change necessary was to add the
-following flags to the makefile target:
-
-  -DHAVE_STREAMS -DHAVE_GRANTPT -DHAVE_PTSNAME
-  -DPUSH_PTEM -DPUSH_LDTERM -DPUSH_TTCOMPAT
-
-makefile, ckcmai.c, 21 Sep 2010.
-
-Testing this in Solaris 9 I see that the DES library disappeared.  Added
-code to the solaris9 targets (also used by Solaris 10 and 11) to check for
-this.  makefile, 21 Sep 2010.
-
-The Solaris target checked the OpenSSL version automatically to set the
-right flag, the Linux target didn't.  Put the OpenSSL-version testing code
-in the Linux target too.  makefile, 21 Sep 2010.
-
-A couple minor changes to the tru64-51b makefile targets from Steven Schweda
-but there still are some problems with the Tru64 Unix builds.
-makefile, 21 Sep 2010.
-
----Alpha.09---
-
-\fcontents(\&a[3]) got an error if the array was declared but its dimension
-was less than 3, which is bad when dealing with (say) an array created
-dynamically by \fsplit(), which might or might not have a third element.
-In case it doesn't -- i.e. in case we are referring to an out of range
-element of any array that is declared -- we should just return a null
-string, as we do with other types of variables that are not defined.
-For that matter, ditto even if the array is not declared; what useful
-purpose is served by throwing an error in this case?
-ckuus4.c, 30 Dec 2010.
-
-cksplit() treats \ as a quoting character.  If the source string contains
-backslashes, they are swallowed (or, if doubled, one is kept).  That's not
-good for parsing external data, such as lines read from files, where there
-are no quoting rules.  This came up when parsing CSV files; as a workaround,
-I made \fsplit() treat backslash as an ordinary character for CSV and TSV
-splitting (a better solution might be yet another argument that specifies
-a quote character).  ckclib.c, 30 Dec 2010.
-
-Began converting C-Kermit to Open Source with the Simplified 3-Clause BSD
-license.  Updated the text for the INTRO, LICENSE, NEWS, and SUPPORT
-commands.  Fixed things so the copyright year to be displayed is defined in
-one place (ck_cryear in ckcmai.c), rather than hardwired into text strings
-all over the place.  COPYING.TXT, ckcmai.c, ckuus[256].c, 2 Jun 2011.
-
-When I added MIME synonyms for Kermit character-set names, I left a bogus
-entry in the tables ("windows-1251") that was in the wrong place
-alphabetically, thus preventing most references to file character-set names
-from working right.  Removed the bogus entry.  ckuxla.c, 2 Jun 2011.
-
-Most combinations work OK, but not translating Cyrillic text from UTF-8
-to Latin/Cyrillic, and probably the same would be true for any case of
-converting from UTF-8 or UCS-2 to anything else.  The problem was in
-xgnbyte(), which converts the input stream from the specified character to
-UCS2; it needed to make a special case for when the input file was already
-Unicode.  Believe it or not, this problem occurred at least as far back as
-8.0.201 (9.5 years ago) and nobody noticed.  So if the fix isn't perfect
-probably nobody will notice that either.  ckcfns.c, 3 Jun 2011.
-
-The SET BLOCK CHECK command did not parse all the items in its keyword
-list.  Fixed in ckuus3.c, 3 Jun 2011.
-
-For EM-APEX ocean floats project, where buoys in stormy waters have to
-transmit data through an earth satellite using non-error-correcting modems,
-John Dunlap ran exhaustive stress tests of Kermit protocol transfers through
-a simulated connection that injected errors and delays and identified a
-weakness in Kermit protocol when it is used under extremely bad conditions:
-If a data byte of the S packet (or its Ack) is corrupted and the 1-byte
-checksum is also corrupted in such a way that that the checksum matches the
-corrupted data, the two Kermit programs will disagree as to the negotiated
-parameters.  For example, if file Sender's RPT field is changed from '~' to
-'^', the receiver will decode the packet incorrectly.  Ditto for most of the
-other parameters.  The result is that a corrupted file is received but
-reported correct.  John suggested a new mode of operation in which the Type
-3 block check is used for all packets.  Such a mode can not be negotiated
-because the negotiation packet itself is assumed by all Kermit programs to
-have a 1-byte checksum.  Added SET BLOCK-CHECK 5 to the parser (with
-invisible synonym FORCE-3".  ckuus3.c, 3 Jun 2011.
-
-Added supporting code for SET BLOCK 5: ckcfn[23].c, ckcpro.w, ckcmai.c,
-ckuus3.c, 3 Jun 2011.
-
-Added code to skip the heuristic that S and I packets always have block
-check type 1.  File transfer OK between two C-Kermits with SET BLOCK 5.
-rpack(): ckcfn2.c, 5 Jun 2011.
-
-Made the file receiver put "5" in the block-check-type in its ACK to the
-S-Packet.  spar(): ckcfns.c, 5 Jun 2011.
-
-Now the question is: Can we make the file receiver automatically and safely
-recognize a three-byte block check on an incoming S or I packet?  It's
-tricky because the block check field is not self-identified, it's just the
-last "n" characters of string indicated by the length field, so correct
-decoding of the packet depends on stateful knowledge of "n".  How about this:
-rpack() already knows what type of packet it is, so if it's an S or I packet
-and the 8th byte of the data field is "5" and last 3 bytes, when interpreted
-as the CRC, match the packet contents, then we accept the packet and switch
-to BLOCK 5 mode.  
-
-On the other hand, if the "5" was put there by corruption, the CRC should
-catch the error.  In that case we NAK the packet and presumabely get a
-different version back.  There would be no reason to try to re-read the same
-packet with a different block check, because the "5" could not possibly be
-there legitimately unless it had a 3-byte CRC.  To be clear, this is
-cheating.  We read the packet contents before we know the packet is correct,
-then we check that it *is* correct.  I made the 4-line change to rpack()
-and it works OK in the absense of transmission errors.  ckcfn2.c, 3 Jun 2011.
-
-So the various combinations should work as desired:
-
- . Sender and receiver both support and are told to SET BLOCK 5 ("SB5").
- . Sender SB5, but receiver doesn't support it (errors out).
- . Sender SB5, receiver supports it but wasn't told (auto-recognizes it).
- . Receiver SB5 but sender no (errors out).
-
-Note in the last case, the receiver should NOT automatically fall back to
-standard behavior because if the user said SET BLOCK 5 that means every
-packet MUST be protected by CRC to prevent the I/S packets from being
-corrupted.
-
-Installed new HELP SET BLOCK-CHECK text.  ckuus2.c, 5 Jun 2011.
-
-Autodownload didn't work when the S or I packet had a 3-byte block check
-because kstart() checked it for a 1-byte checksum.  Fixed in kstart(),
-ckcfn2.c, 6 Jun 2011.  However, older Kermit versions and programs that
-claim to do "autodownload" will never recognize this type of packet.  No
-big deal since even if they did, the transfer would fail anyway.
-
-Added 'FORCE 3' to E-Kermit, called it EK 1.7.  The option is "-b 5".  Works
-OK for sending and receiving, both with and without the new option.  Also
-works with "-b 5" if you send an S packet to it with '5' in the BCT field.
-Changes were minimal, I have them all in ek17.diff.
-
-I could probably also make a new G-Kermit in about 10 minutes, but who cares
-about G-Kermit...  We already have two useful Kermit programs that
-interoperate with the new protocol.  6 Jun 2011.
-
-Replaced the very inadequate help texts for functions \fword() and
-\fsplit() with new ones.  ckuus2.c, 6 Jun 2011.
-
-There were a couple reports of file corruption that I was saving for later.
-Now that now is later I dug up the messages, files, and logs and it turns
-out that nobody had reported a reproducible case of Kermit corrupting a
-file.  There have been non-reproducible cases though, almost certainly due
-to corruption of the S or I packet or its ACK, which is why we now have SET
-BLOCK 5.  Even with BLOCK CHECK 5, there is no guarantee that the same thing
-won't happen, it is just far less likely.  Even if we added a 32-bit CRC or
-even 64-bit one, there would still be a small chance it could happen.
-
-7 Jun 2011:
-
-Corrected various #ifdefs (or lack of them) when building C-Kermit with
-different combinations of feature-selection options such as NOCSETS, NOICP,
-NOLOCAL, NOSPL, NOUNICODE, etc.  ckcfns.c ckcmai.c ckcxla.h ckuus2.c
-ckuus4.c ckuus5.c ckuus6.c ckuusr.c, 7 Jun 2011.  After running the script
-that does all these builds (84 of them) I ran it again to make sure that
-none of the changes broke builds that succeeded before the changes were made.
-
-Built OK on Solaris9 ("make solaris9")
-Ditto with Krb5 and OpenSSL 0.9.8q  ("make solaris9g+openssl+shadow+pam+zlib")
-
-Built OK on Mac OS X 10.4.11 ("make macosx").
-Also "make macosx+krb5+openssl.
-
-Built OK on Linux RHEL4 ("make linux").
-Built OK on Linux RHEL4 with OpenSSL 0.9.7a ("make linux+ssl").
-Built OK on Linux RHEL5 ("make linux").
-
-"make linux+ssl" fails on RHEL5 because of DES, even though the target
-tests for the presence or absence of the DES libraries.  In this case the
-libraries are there but they lack the functions des_ecb3_encrypt,
-des_random_seed, and des_set_odd_parity.  The build succeeds as:
-
-  make linux+ssl KFLAGS=-UCK_SSL
-
-Since DES is now considered harmful, Jeff Altman suggests that all OpenSSL
-builds, even for old versions, should omit it ("If you are building with
-openssl and no kerberos or srp, just disable DES.  Disabling DES will impact
-telnet and rlogin but it won't matter if you have no ability to negotiate a
-session key").
-
-From Ian Beckwith, patches for Debian Linux:
- . Change all '-' to '\(hy' in man page (new pedantry): ckuker.nr.
- . Make IKSD authentication (using PAM) ask for a password when an invalid
-   username has been given, to avoid disclosing which account names are valid:
-   ckufio.c, ckuus7.c.
- . Fix spelling errors: ckcftp.c, ckuus2.c, ckuker.nr, ckcpro.w, ckuusr.h.
- . Patch makefile to support install to a staging area with DESTDIR.
- . Some other patches (mainly for typos) were for plain-text documentation
-   files that were generated from Web pages; I updated the web pages.
-
-A big corporate C-Kermit user has an application where a local C-Kermit
-makes a connection to a remote one, uploads some files, and then if the
-server has any new patch files for the local, it sends the patches and
-does a REMOTE HOST command to run the patch program.  This stopped working
-in C-Kermit 6.0 or 7.0 when I put a check to prevent it, because "it makes
-no sense to send REMOTE commands to the local end, because the results are
-sent back to the remote to be displayed on its screen but it has no screen".
-That may be true, but if the user needs to control the local from the
-remote, they should be able to.  I removed the checks.  This doesn't solve
-the problem of where the output goes; ideally it would go to the local
-screen but I don't see any elegant and simple way to make that change.
-However the output redirectors can still be used with the REMOTE command
-so the results can be captured to a remote file, which could then be sent.
-ckuus7.c, 7 Jun 2011.
-
-Changed SET VARIABLE-EVALUATION to SET COMMAND VARIABLE-EVALUATION, but left
-the former version available.  ckuusr.c, 9 Jun 2011.
-
-Documented the SET COMMAND VARIABLE-EVALUATION command, which I added in
-2008.  ck90.html, 9 Jun 2011.
-
-Renamed all old Mac OS X makefile targets to have the prefix "old" to avoid
-confusing them with the current targets, and made macosx10 a synonym for
-macosx, so those who used previous makefiles will get a current target
-without having to know the new name.  makefile, 9 Jun 2011.
-
-Added XMESSAGE, which is to MESSAGE as XECHO is ECHO: prints the text
-without a line terminator, so it can be continued by subsequent [X]MESSAGE
-commands.  ckuusr.[ch], 9 Jun 2011.
-
-Back to "make linux+ssl" on RHEL5...  I took the coward's way out and added
-code to the makefile target to check whether the build worked (somebody let
-me know if there is a better way to check), and if not to give a message
-suggesting they "make clean ; make linux+ssl KFLAGS=-UCK_DES".  makefile,
-9 Jun 2011.
-
-Noticed that \frecurse() would dump core if called with no arguments.
-Fixed in ckuus4.c, 9 Jun 2011.
-
-Added \q() as an alternative to the more verbose \fliteral() for quoting
-strings that contain characters (like \) that would otherwise be significant
-to Kermit.  It's more efficient because it isn't a function call, and 'q'
-is an intuitive letter to mean 'quote'.  It also works better than
-\fliteral() because functions treat commas and braces specially.  ckuus4.c,
-10 Jun 2011.
-
-Built OK on VMS 8.3 on Alpha, no net.  DEC C caught a couple glitches in the
-new code that gcc didn't catch, which I fixed.  ckuus[25].c, 10 Jun 2011.
-
-Built OK on VMS 8.3 on Alpha with Multinet 5.3.  The SSL build failed but
-I'm not going to worry about it.  10 Jun 2011.
-
-Built OK on NetBSD 5.1.  10 Jun 2011.
-
-Tried to resurrect my old "build-all" machine, an IBM Netfinity 3500 from
-1997 with 20-some mountable bootable hard disks with lots of 1990s OS's on
-them.  No dice.  I can see the BIOS but not the hard disks.  The
-configuration is still correct because it tries to boot from the mountable
-hard disk, but it fails (I tried six different ones).
-
-Tried to resurrect my old Siemens Nixdorf RM 200 MIPS machine.  Booted OK,
-headless even, but makes a hellish high-pitched whine, like a dentist drill.
-It's pretty slow too.  "make sinix542" (for SINIX 5.4.2) bombed at link
-time on no rdchk().  Fixed by #including <sys/filio.h>.  ckutio.c, 10 Jun 2011.
-
-Tried to resurrect my old SCO Xenix 2.3.4 machine, also headless.  Amazingly
-it still works; it can't use a monitor but I can Telnet to it.  Had to tweak
-some #ifdefs but I got a no-net version built successfully.  According to my
-notes, it hasn't been possible to build with TCP/IP since C-Kermit 8.0,
-but how many people ever had SCO Xenix 2.3.4 with TCP/IP anyway?  Anyway we
-still have the binaries for C-Kermit 7.0.  ckuus4.c, 10 Jun 2011.
-
-Built OK on AIX 5.3.  Built OK on Solaris 10.  11 Jun 2011.
-
-Tried harder to revive the build-all machine, now it sort of works, but not
-all of the bootable OS's work.  Built C-Kermit 9.0 OK on OpenBSD 3.0.  Built
-OK on QNX 4.25 but had to #ifdef references to IXANY in ckutio.c and ckupty.
-Built OK on NetBSD 1.5.1 (2000).  Tried "make netbsd+ssl" on this one, it's
-OpenSSL 0.9.5a 1 Apr 2000, but it bombs out in ckuath.c, no big deal.
-Another problem in NetBSD 1.5.2 is that even though off_t is 8, CK_OFF_T
-is 4.  Worth noting but not worth fixing unless someone else notices.
-13 Jun 2011.
-
-SuSE 7.0... boots OK but telnet server doesn't work.  Can telnet out but
-it's too flaky, connection drops if I try to transfer a file.
-
-OpenBSD 2.5 [1999] OK.  Red Hat 7.1 OK.  Red Hat 7.1 with OpenSSL 0.9.6
-not OK, same error as with 0.9.5a:
-
-ckuath.c
-In file included from ck_ssl.h:48,
-                 from ckuath.c:225:
-/usr/include/openssl/des.h:77: warning: redefinition of `Block'
-ckuat2.h:86: warning: `Block' previously declared here
-/usr/include/openssl/des.h:83: redefinition of `struct des_ks_struct'
-/usr/include/openssl/des.h:91: warning: redefinition of `Schedule'
-ckuat2.h:90: warning: `Schedule' previously declared here
-
-So it appears that OpenSSL support is broken for pre-0.9.7.  Tried
-building it again with -UCK_SSL (since the errors are originating from
-from des.h)...  But it still failed exactly the same way.  I found
-#includes for des.h in ckuath.c and and ck_ssl.h and #ifdef'd them out,
-but it still fails:
-
-In file included from /usr/include/openssl/evp.h:89,
-                 from /usr/include/openssl/x509.h:67,
-                 from /usr/include/openssl/ssl.h:69,
-                 from ck_ssl.h:51,
-                 from ckuath.c:227:
-/usr/include/openssl/des.h:77: warning: redefinition of `Block'
-ckuat2.h:86: warning: `Block' previously declared here
-/usr/include/openssl/des.h:83: redefinition of `struct des_ks_struct'
-/usr/include/openssl/des.h:91: warning: redefinition of `Schedule'
-ckuat2.h:90: warning: `Schedule' previously declared here
-
-Built OK on Debian 2.1.  13 Jun 2011.
-
-On FreeBSD 4.4, it blows up with:
-ckufio.c: In function vpass':
-ckufio.c:8201: conflicting types for 'initgroups'
-/usr/include/unistd.h:154: previous declaration of 'initgroups'
-ckufio.c:8201: warning: extern declaration of 'initgroups' doesn't match global
-one.  Fixed by defining NODCLINITGROUPS for FreeBSD in ckufio.c. It might not 
-be the right fix, but I don't have a lot of other FreeBSD versions to
-compare with.  Anyway now it builds OK on 4.4, and also on FreeBSD 3.3.
-ckufio.c, 13 Jun 2011.
-
-Tried to build on SCO Open Server 5.0.7 but it fails at link time because
-it can't find rdchk().  But it's supposed to be there!  Come back to this
-later...
-
-Red Hat 6.1             i386   32/64   linux          2332545
-Red Hat 7.1             i386   32/64   linux          2368528
-Red Hat EL4             i386   32/74   linux          2363067
-Red Hat EL5.6           i386    64     linux          2371279
-Solaris9                sparc  32/64   solaris9       2849896
-Solaris9+ssl            sparc  32/64   solaris9       5021764
-Solaris10               sparc  32/64   solaris10      2855776
-QNX                     i386    32     qnx32          2012323 
-NetBSD 1.5.1            i386   32/64   netbsd         2198055
-NetBSD 5.1              i386   32/64   netbsd         2159863
-OpenBSD 2.5             i386   32/64   openbsd        2236036
-Mac OS X 10.6.7         x86_64  64     macosx         2.7M
-Mac OS X 10.4.11        ppc    32/64   macosx         2496304
-Debian 2.1              i386   32/64   linux          2213221
-FreeBSD 4.4             i386   32/64   freebsd        2291333
-FreeBSD 3.3             i386   32/64   freebsd        2147370
-SINIX 5.42              mips    32     sinix542       3319325 (1995)
-SCO Unixware 2.1.3      i386    32     uw213          2242176
-SCO OSR6.0.0            i386   32/64   sco_osr600     2368300
-
-More builds, 14 June 2011:
-
-VMS 6.2                 alpha   32     make mn        2556928 No TCP/IP
-VMS 6.2                 alpha   32     make m         3112960 UCX 4.0
-Solaris 11              i386   32/64   solaris11      2823860
-Solaris 11              i386   32/64   solaris11+ssl  2993660 OpenSSL 0.9.8l
-NetBSD 5.1              i386   32/64   netbsd+krb5    2307855 Kerberos 5
-Linux Slackware 12.1.0  i386   32/65   linux          2175754
-Linux Fedora 14         i386   32/64   linux          2256514
-Linux Fedora 14         i386   32/64   linux+ssl      ....... OpenSSL 1.0.0d
-Linux Fedora 14         i386   32/64   linux+krb      2449614 (*)
-
-(*) make linux+krb5 "LIBS=$LIBS /lib/libk5crypto.so.3 /lib/libcom_err.so.2"
-
-Noticed that netbsd+ssl build on NetBSD 5.1 said "NetBSD 1.5" in its banner.
-Fixed by replacing the old hardwired target with the new "subroutinized"
-target a'la linux+ssl and adapting it to NetBSD.  makefile, 15 Jun 2011.
-
-Same deal for Kerberos 5, make a new netbsd+krb5 target and it builds ok,
-at least once one figures out where the Kerberos headers and libs are.
-makefile, 15 Jun 2011.
-
-Same deal for the netbsdnc target, now it simply defined NOCURSES and
-chains to the main netbsd target.  makefile, 15 Jun 2011.
-
-Tried to build with Kerberos 5 on Solaris, fails because the DES library
-no longer exists.  This one is beyond me, sorry.
-
-Made new targets for MirBSD, mirbsd and mirbsd+ssl, makefile 15 Jun 2011.
-
-In OpenSUSE 11.2 with OpenSSL 0.9.8r we bomb on undefined references from
-various DES library routines.  Builds OK without DES.
-
-Various linux+krb5 builds fail because can't find -lgssapi_krb5
-
-SSL builds with OpenSSL < 0.9.7 fail even though there is code to support
-the older SSL.
-
-Fixed some printf %ld vs int instances in the sizeofs section of SHOW FEATURES.
-ckuus5.c, 15 Jun 2011.
-
-Fixed the new linux+ssl target to actually use the SSLINC and SSLLIBS
-definitions, oops.  makefile, 15 Jun 2011.
-
-15 June 2011 builds (Beta.01):
-
-AIX 5.3                 ppc    32/64   aix+ssl        3283846 OpenSSL 0.9.8m
-NetBSD 5.1              i386   32/64   netbsd         2159863
-NetBSD 5.1              i386   32/64   netbsd+ssl     2350274 OpenSSL 0.9.9-dev
-NetBSD 5.1              i386   32/64   netbsd+krb5    2349627 MIT Krb5 1.6.3
-FreeBSD 8.2             i386   32/64   freebsd        2298414
-FreeBSD 8.2             i386   32/64   freebsd+ssl    2448961 OpenSSL 0.9.8q
-OpenBSD 4.7             i386   32/64   openbsd        2266132
-OpenBSD 4.7             i386   32/64   openbsd+ssl    2409263 OpenSSL 0.9.8k
-MirBSD 10               i386   32/64   mirbsd         2216601
-MirBSD 10               i386   32/64   mirbsd+ssl     2358318 OpenSSL 0.9.8r
-OpenSuse 11.2           x86_64  64     linux          2348468
-OpenSuse 11.2           x86_64  64     linux+ssl (*)  2546540 OpenSSL 0.9.8r
-RHEL 5.6                ia64    64     linux          4390687
-RHEL 5.6                ia64    64     linux+ssl (*)  4775007 OpenSSL 0.9.8e
-Ubuntu 9.10             i386   32/64   linux          2275523
-Ubuntu 9.10             i386   32/64   linux+ssl      2466708 OpenSSL 0.9.8r
-Gentoo 1.12.13          ppc    32/64   linux          2386597
-Gentoo 1.12.13          ppc64   64     linux          2749015
-Gentoo 1.12.13          ppc64   64     linux+ssl      3002150 OpenSSL 0.9.8r
-Gentoo 1.12.13          sparc  32/64   linux          2478382
-Gentoo 1.12.13          sparc  32/64   linux+ssl      2690499 OpenSSL 0.9.8r
-Solaris 9               sparc  32/64   solaris9       2849896
-Solaris 10              i386   32/64   solaris10      2837620
-IRIX 6.5                R10000 32/64   irix65         2869704
-
-* and KFLAGS=-UCK_DES
-
-Tried building on NetBSD 5.1 with Heimdal Kerberos using:
-
-make netbsd+krb5 \
- "KFLAGS=-DHEIMDAL" \
- "K5INC=-I/usr/include" \
- "K5LIB=-L/usr/lib"
-
-It found all its headers OK, but it blew up in ckuath.c.  Small wonder,
-ckccfg.html says:
-
-HEIMDAL
-    Should be defined if Kerberos V support is provided by HEIMDAL. Support
-    for this option is not complete in C-Kermit 8.0. Anyone interested in
-    working on this should contact kermit-support. 
-
-'krb5-config --version' gives the MIT Kerberos 5 version number.
-
-Make a new netbsd+krb5+ssl target based on the combination of the new
-netbsd+ssl and netbsd+krb5 targets.  There were lots of warnings in the
-compilation but no errors, but it produced an executable that starts and
-does normal things but I have no idea if the SSL or Kerberos functions work.
-makefile, 16 Jun 2011.
-
-Changed the cu-solaris9-krb5 target to test for the presence of DES because
-DES isn't there, to see if this would allow a Kerberos build to proceed.
-And it worked, amazing.  At least the build completed, I have no way to test
-the Kerberos part.  makefile, 16 Jun 2011.
-
-Updated the solaris9+ssl target to do the DES testing.  makefile, 16 Jun 2011.
-
-Updated cu-solaris+krb5 target to test whether the GSSAPI library is called
-libgassapi or libgassapi_krb5.  makefile, 16 Jun 2011.
-
-Added lots of tests to the Linux Kerberos 5 entries, linux+krb5 and
-linux+krb5+ssl, because some have libk5crypto and some don't; some have
-libcom_err and some don't; and some have libgssapi_krb5 (e.g. RHEL5,
-OpenSuse 11.2) whereas others have libgssapi (Gentoo).
-
-16 June 2011 builds (Beta.01):
-
-NetBSD 5.1 i386   32/64  netbsd+krb5+ssl   2451757 OpenSSL 0.9.9 MIT Krb5 1.6.3
-Solaris 9  sparc  32/64  solaris9+krb5     2543036 MIT Kerberos 5 1.7.1
-Solaris 9  sparc  32/64  solaris9+ssl      5021544 OpenSSL 0.9.8q (gcc)
-Gentoo...  ppc    32/64  linux             2386597
-Gentoo...  ppc    32/64  linux+ssl         2593561 OpenSSL 0.9.8r 
-Gentoo...  ppc64   64    linux             2749015
-Gentoo...  ppc64   64    linux+ssl         3002150 OpenSSL 0.9.8r 
-RHEL5      x86_64  64    linux+krb5 (*)    2563878 MIT Kerberos 5 1.6.1
-RHEL5      x86_64  64    linux+krb5+ssl(*) 2563878 MIT Kerberos 5 1.6.1
-Fedora 14  i386   32/64  linux+krb5+ssl    2539891 MIT Krb5 + OpenSSL 0.9.8r
-
-* KFLAGS=-UCK_DES
-
---- C-Kermit 9.0.299 Beta.01 ---
-
-sizeof() can return a long or an int, so neither printf("%d",sizeof(blah));
-or printf("%ld",sizeof(blah)); can be used everywhere.  Changed the
-"sizeofs" section of SHOW FEATURES in the dumbest (and therefore most
-portable) way to squelch the warnings.  ckuus5.c, 17 Jun 2011.
-
-From John Dunlap: "Watching the server screen led me to offer a cosmetic
-patch for ckuusx.c.  I noticed that the server screen said it was
-"RESENDING" when it really wasn't.  The attached patch emits blanks to
-insure that old labels are completely erased."  ckuusx.c, 17 Jun 2011.
-
-Nelson Beebe found two places where I had SSLLIBS in the makefile instead of
-SSLLIB.  makefile, 18 Jun 2011.
-
-More important he knew how to force gcc to load the right header files for
-OpenSSL 1.0.0d (by using '-isystem' rather than '-I').  Previously it was
-using the 0.9.8r header files but linking with the 1.0.0d libraries.  This
-is not in the sources or makefile; it's done when giving the 'make' command:
-
-  export PATH=/usr/bin:$PATH
-  export SSLINC=-isystem/usr/include
-  export "SSLLIB=-L/usr/lib -Wl,-rpath,/usr/lib"
-  make linux+ssl
-
-Folded the previous linux+openssl+zlib+shadow+pam and linux+openssl+shadow
-targets into linux+ssl.  Checked the linuxso (scripting only) target, builds
-OK, 600K.  Made new subroutinized linux+krb5+krb4 target but can't find
-anyplace to test it.   Made new subroutinized linux+shadow+pam target, works
-fine on RHEL4.  Revised comments and lists again.  makefile, 18 Jun 2011.
-
-For the pluggable-disk OS's that boot OK but lack a working network, I
-rigged up a serial connection using a DB9-FF null modem cable, and then a
-DB9-MF modem cable to make it reach.  I don't see any modem signals on
-either end, but the data goes through OK.  COM1 on the desktop PC,
-/dev/ttyS1 or whatever on Lab.  Since there are no modem signals, can't use
-RTS/CTS.  At 57600bps with Xon/Xoff, 500-byte packets and sliding windows,
-transfers work OK at about 5000cps using 5 window slots; takes 8 minutes to
-transfer the gzipped C-Kermit tarball.  Kermit to the rescue.  19 Jun 2011.
-
-Transferred the tarball over serial ports to SCO OSR5.0.5 at 38.4Kbps, the
-highest speed supported, 12 minutes, no errors, 3300cps.  Unpack, make
-sco32v505udk, OK.  Also built the TCP/IP version and it almost made an
-outbound connection, but only once (not a Kermit program but something with
-the TCP/IP stack).  19 Jun 2011.
-
-Ditto for Solaris 2.6/i386, except 57.6Kbps, 4K-byte packets, no problem.
-Solaris 8/i386, ditto.  19 Jun 2011.
-
-SCO OpenServer 5.0.5  i386   32   sco32v505udk     1940964  No TCP/IP
-SCO OpenServer 5.0.5  i386   32   sco32v505udknet  2314668  With TCP/IP
-Sun Solaris 2.6       i386   32   solaris26g       4661368
-Sun Solaris 8         i386   32   solaris8g        4675432
-
-When using compact substring notation, \s(xx[4]) returns the whole string
-xx starting at position 4, but \s(xx[4:]) returns an empty string.  Fixed
-the latter to be like the former.  ckuus5.c, 20 Jun 2010.
-
-Really it would have been nicer if \s(xx[4]) returned a single character,
-the 4th character of xx, but it's too late now.  Added another "separator"
-character '.' (period) for that: \s(xx[4.]) is the 4th character of xx.
-ckuus4.c, 20 Jun 2010.
-
-Back to SCO OSR5.0.7... This failed before because 'rdchk' came up unknown
-at link time, unlike all previous OSR5's, that used rdchk() in place of the
-FIONREAD ioctl.  Added #ifdefs to make a special case for 5.0.7.  I'm not
-sure this is the best way, but this is the minimal change to get it to work.
-If anybody cares, maybe the same can be done for previous OSR5 releases.
-ckutio.c, 20 Jun 2010 (search for SCO_OSR507).
-
-SCO OpenServer 5.0.7  i386   32   sco32v507        1895724  No TCP/IP
-SCO OpenServer 5.0.7  i386   32   sco32v507net     2246792  With TCP/IP
-
-Checked current code on RHEL4, found that my GSSAPI-lib finding makefile
-target didn't look in enough places; added some more.  makefile, 21 Jun 2011.
-
-Got reports back on HPUX from Peter Eichhorn, almost all good on HP-UX 7, 8,
-9, 10, and 11.  21-22 Jun 2011.
-
-Got access to Debian 5.0 and 7-to-be ("Wheezy/Sid").  Regular 'make linux' is
-OK in Debian 5, but in 7 can't find crypt, res_search, or dn_expand; had
-to add more library search clauses to 'make linux'.  makefile, 21 Jun 2011.
-
-In Debian 7.0, libk5crypto could not be found without adding another clause
-to 'make linux+krb5'.  That done, the SSL build (1.0.0d) was OK, as well as
-the krb5+ssl one.  makefile, 21 Jun 2011.
-
-I found a Linux box that had both Kerberos 4 and 5 installed and tried 'make
-linux+krb5+krb4', which failed because of missing DES functions.  Tried
-'make linux+krb5+krb4 KFLAGS=-UCK_DES', but that fails too, even though it
-doesn't fail for Kerberos 5 alone, so probably some Krb4 code is making
-unguarded calls to the DES routines.  What is really needed is a way to
-completely strip all DES references from any given build, code and makefile,
-a big deal.  21 Jun 2011.
-
-Fixed some typos in COPYING.TXT (noticed by Ian Beckwith).  24 Jun 2011.
-
-Got access to perhaps the last living 4.3BSD VAX system.  It doesn't have
-SEEK_CUR so I had to #ifdef out the \fpicture() function.  Aside from that,
-no problems.  ckuus4.c, 24 Jun 2011.
-
-I had been wanting the S-Expression (ROUND x) to allow a second argument n,
-which, if given, tells where the rounding should occur.  If n is positive,
-the number is rounded to n decimal places.  If zero, it is rounded to the
-nearest integet.  If positive, the number is rounded to the nearest power of
-10; e.g. -2 means "to the nearest hundred".  If ROUND is used as before,
-with one argument, it works as before.  ckclib.c, ckuus3.c, 25 Jun 2011.
-
-From Arthur Marsh, a few more directories to test for libresolv in Linux.
-makefile, 26 Jun 2011.
-
-From Martin Vorlaender, a fix for the VMS file-transfer display and
-statistics, a place where a file length wasn't being cast to CK_OFF_T
-in zchki().  ckvfio.c, 28 Jun 2011.
-
-Updated version to 9.0.300 and removed the Beta designation.
-ckcmai.c, makefile, 28 Jun 2011.
-
---- C-Kermit 9.0.300 ---
-
----------------------------------
-***************************
diff --git a/ckc300.txt b/ckc300.txt
deleted file mode 100644 (file)
index 294b126..0000000
+++ /dev/null
@@ -1,7820 +0,0 @@
-C-KERMIT 9.0 CHANGE LOG (Changes since 8.0.207 / K95 2.1.3 January 2003)
-
-  Chronological order.
-  Go to the bottom to find the newest edits.
-
-  F. da Cruz, The Kermit Project, Columbia University, NYC.
-  Last update: 28 June 2011.
-
-FTP USER, FTP ACCOUNT, plus the various prompts and switches for FTP username,
-password, and account all neglected to strip quotes, and in most cases quotes
-are necessary to specify a username that contains spaces.  ckcftp.c,
-15 Jan 2003.
-
-FTP MPUT f1 f2 f3... gets a parse error if any of the fn's do not match an
-existing file.  This is bad for scripts.  In doftpput(), cmfdb() looks for
-keywords (switches) or CMIFI.  When it hits CMIFI, it exits from the initial
-parse loop and then does additional cmifi()s in a loop until done.  The most
-obvious fix is to parse each field with cmfdb(CMIFI,CMFLD), i.e. fall back to
-CMFLD if CMIFI doesn't match anything.  Then if CMFLD was used, we don't add
-the filespec to the list.  This is a rather big change but it seems to work.
-No error messages or failures happen for non-matching fields, but an error
-message is printed (and the MPUT command fails) if none of the fields match
-any files.  This fix got in too late for 2.1.3; workaround: use C-Shell
-like wildcard list (ftp mput "{*.abc,foo.*}").  ckcftp.c, 16 Jan 2003.
-
-GREP did not pass its pattern through the expander, thus variables could
-not be used for patterns.  This must have been an oversight -- I can't find
-anything in my notes about it.  Fixed in dogrep(): ckuus6.c, 24 Jan 2003.
-
-New makefile target for HP-UX 11.xx with OpenSSL from Tapani Tarvainen.
-makefile, 31 Jan 2003.
-
-From Jeff:
- . Avoid core dump when dereferencing tnc_get_signature(): ckuus4.c.
- . Bump version numbers to 8.0.208, 2.1.4: ckcmai.c.
-
-Added /NOLOGIN to FTP [OPEN].  ckcftp.c, 10 Feb 2003.
-
-Don't dump core if FTP DEBUG is ON and FTP OPEN does not include a service.
-openftp(): ckcftp.c, 10 Feb 2003.
-
-HELP PATTERN text incorrectly identified commands and functions with
-floating and anchored patterns.  The corrected lists are:
-Floating: GREP, TYPE /MATCH:, /EXCEPT: patterns, \farraylook(),
-Anchored: IF MATCH, file-matching wildcards, \fsearch(), \frsearch()
-ckuus2.c, 10 Feb 2003.     
-
-INPUT n \fpattern(xxx) did not work for case-independent comparisons.
-Fixed in doinput(): ckuus4.c, 10 Feb 2003.
-
-It seems \fpattern() didn't work with MINPUT at all.  There was no code to
-handle \fpattern() in the MINPUT parse loop, so it never worked.  The code
-had to be totally rewritten to use cmfld() in a loop, rather than cmtxt()
-and then cksplit().  Furthermore, whenever any of the fields was an
-\fjoin(), this had to be split.  ckuusr.c, 10 Feb 2003.
-
-Macro replacement via \m() and \fdefinition() does not work as advertised
-(i.e. case sensitively) for associative array elements; e.g. \m(xxx<abc>) is
-treated the same as \m(xxx<ABC>), contrary to section 7.10.10 of the C-Kermit
-7.0 update notes, and to the fact that the two really do exist separately.
-Fixed by adding a static function isaarray(s) which succeeds if s is an
-associative array reference and fails otherwise, and then having \m()
-and \fdef() call mxxlook() (case-sensitive lookup) if isaarray(), otherwise
-(as before) mxlook()).  ckuus4.c, 11 Feb 2003.
-
-Fixed FTP OPEN to allow the /USER switch to override SET FTP AUTOLOGIN OFF,
-just as /NOLOGIN overrides SET FTP AUTOLOGIN ON.  ckcftp.c, 11 Feb 2003.
-
-In K95, "set key \1234 \27H" (any SET KEY command in which the first char of
-the definition was backslash, and the ONLY character after the backslash
-quantity was an uppercase letter, that letter would be lowercased).  Diagnosis:
-xlookup() poking its argument (see notes from July 2000).  Jeff sent a fix.
-ckucmd.c, 15 Feb 2003.
-
-Ran my S-Expression torture test to make sure Sexps still worked.  They do,
-except the bitwise & and | operators were broken, e.g. (& 7 2) and (| 1 2 4)
-get "Invalid operand" errors.  Jeff's code had added an early failure return
-from the lookup loop when when a single-byte keyword matched a keyword that
-started with the same byte but was more than one byte long.  So "&" would hit
-"&&" and fail instead of continuing its search (xlookup tables aren't sorted
-so there can be no early return).  Fixed in xlookup(): ckucmd.c, 16 Feb 2003.
-
-Got rid of "krbmit" target from makefile.  It's still there, but we don't
-use it any more.  All secure targets now use "xermit", and produce a binary
-called wermit, just like the regular ones do (except the old ckucon.c ones).
-Non-secure targets, since they don't define any of the security symbols,
-wind up compiling and linking to (mostly) empty security modules.  makefile,
-15 Feb 2003.
-
-Added \fcvtdate(xxx,3) to format its result in MDTM format (yyyymmddhhmmss,
-all numeric, no spaces or punctuation).  Of course these numeric strings
-are too big to be 32-bit numbers and are useless for arithmetic, but they're
-useful for lexical comparison, etc.  ckuus[24].c, 16 Feb 2003.
-
-The following FTP commands did not set FAILURE when they failed: RMDIR,
-CD, CDUP, Fixed in the corresponding doftpblah() routines.  ckcftp.c,
-16 Feb 2003.
-
-RENAME would sometimes not print an error message when it failed, e.g. in K95
-when the destination file already existed.  ckuus6.c, 17 Feb 2003.
-
-Fixed COPY error messages, which did not come out in standard format when
-/LIST was not included.  ckuus6.c, 17 Feb 2003.
-
-Fixed #ifdefs in ck_crp.c to allow nonsecure builds on old platforms like
-System V/68 R3.  19 Feb 2003.
-
-Similar treatment for ck_ssl.c.  20 Feb 2003.
-
-From Jeff, 21 Feb 2003:
- . AIX53 and AIX52 symbols for ckcdeb.h, makefile.
- . New gcc targets for various AIX 4.x/5.x versions: makefile.
- . Copyright date updates: ck_crp.c, ck_ssl.c.
- . ENABLE/DISABLE QUERY broken because keyword table out of order: ckuusr.c.
- . Fixed the use of HTTP proxies for HTTP [RE]OPEN for Unix: ckcnet.c.
-
-Also for K95 only: Allow file transfer when K95 is invoked on the remote end
-of a connection to a Pragma Systems Terminal Server connection; automatically
-SET EXIT HANGUP OFF when invoked with open port handle ("k95 -l nnnn").
-
-"cd a*" failed even when "a*" matched only one directory.  Fixed in cmifi():
-ckucmd.c, 21 Feb 2003.
-
-In the Unix version, replace "extern int errno;" with "#include <errno.h>"
-if __GLIBC__ is defined, since glibc now defines a thread-specific errno.
-ckcdeb.h, 26 Feb 2003.
-
-Added #ifdefs to skip compilation of ckuath.c in nonsecure builds.  Tested
-by building both secure and regular versions in Linux.  ckuath.c, 26 Feb 2003.
-
-Ran the build-in-84-different-configurations script on Linux to make sure it
-still builds with all different combinations of feature selection options.
-All OK.  26 Feb 2003.
-
-Built on VMS.  Needed to add a prototype for mxxlook*() to ckuusr.h; built
-OK otherwise.  26 Feb 2003.
-
-From Jeff: More #ifdef shuffling for nonsecure builds: ckuath.c, ck_ssl.c,
-27 Feb 2003.
-
-Added code to ensure \v(download) ends in a directory separator in Unix,
-Windows, and OS/2.  ckuus7.c, 27 Feb 2003.
-
-Added code to K95 zfnqfp() to tack on directory separator when returning
-a directory name.  ckofio.c, 27 Feb 2003.
-
-Somehow an old copy of ckuath.c popped to replace the new one.  Put the new
-one back.  28 Feb 2003.
-
-From Jeff: Fix typo in my K95 zfnqfp() code from yesterday; fixes for handling
-UNCs uniformly, no matter which way their slashes are leaning.  ckofio.c,
-28 Feb 2003.
-
-At Jeff Mezei's suggestion, separate text and binary mode open sequences
-for VMS session log.  ckvfio.c, 28 Feb 2003.
-
-Added freebsd48 target for FreeBSD 4.8.  makefile, 1 Mar 2003.
-
-Changed Mac OS X entries to include -DUSE_STRERROR.  makefile, 2 Mar 2003.
-
-Fixed GETOK /GUI to evaluate its text argument.  ckuus6.c, 3 Mar 2003.
-
-Jeff fixed the K95 Dialer QUICK dialog to (a) allow templates, and (b) have
-a Save-As option.  3 Mar 2003.
-
-Jeff fixed a problem with the Xmodem-CRC checksum being crunched whenever
-there was a retransmission.  7 Mar 2003.
-
-Added target/banner for Tru64 5.1B.  makefile, ckuver.h, 5 Mar 2003.
-
-In Unix, the zcopy() routine (used by the COPY command) reset the user's umask
-to 0 for the remainder of the Kermit process lifetime.  The bug was in
-ckufio.c 8.0.194, 24 Oct 2002, and is fixed in ckufio.c 8.0.195, 6 Mar 2003.
-Of course this happened after building 155 C-Kermit 8.0.208 binaries.  (But
-before officially releasing 8.0.208.)
-
-In the VMS version, changed:
-
-        while ((n--) && xx_inc(2) > -1) ;
-to:
-        while ((n--) && xx_inc(2) >= 0) ;
-
-to suppress the "...is being compared with a relational operator to a constant
-whose value is not greater than zero" warning.  ckvtio.c, 7 Mar 2002.
-
-Added a debug call to dologend in hopes of catching overzealous Locus
-switching, which seems to happen only in K95.  ckuus3.c, 7 Mar 2002.
-
-Rebuilt binaries for some of the more current Unix releases: AIX 4.3.3-5.1,
-Solaris 7-9 , Red Hat 7.0-8.0, Slackware 8.1, Freebsd 4.7-4.8, NetBSD 1.6,
-OpenBSD 3.2, Unixware 7.1.3, Open Unix 8, OSR5.0.6a, etc.  A Unix binary with
-COPY umask fix shows a 6 Mar 2003 date for "UNIX File support" in SHOW
-VERSIONS; a binary without the fix shows 24 Oct 2002.
-
-C-Kermit 8.0.208 dated 14 March 2003 released on 10 March 2003.
-
----8.0.208---
-
-From Jeff 13 Mar 2003:
- . Updated SSL module allows importation of tickets from host.
- . freebsd50+openssl target: makefile.
- . FTP PUT /PERMISSIONS error message for K95: ckcftp.c.
-Fixed MINPUT to strip quotes or braces from around targets (this was broken
-on Feb 10th).  Thanks to Jason Heskett for discovering and reporting this
-(killer) bug.  ckuusr.c, 14 Mar 2003.
-
-Changed version number to 209 Dev.00.  ckcmai.c, 14 Mar 2003.
-
-While debugging the alphapage script, I found that the command "minput 8 \6\13
-\21\13 \13\27\4\13 \30\13" gets "?Not confirmed" in 8.0.208 and 8.0.209, but
-not in 206 and earlier.  This problem too was introduced on Feb 10th by
-changing MINPUT parsing from cmtxt() followed by cksplit() to cmfld() in a
-loop.  cmfld() uses setatm() to return its result and of course setatm()
-breaks on \13.  Changing setatm() not to do this would break everything else.
-But cmfld() has no arguments that let us tell it to do anything different in
-this case.  Changing the API would be a disaster.  The only solution is to add
-an "MINPUT ACTIVE" (minputactive) global variable that tells cmfld() to tell
-setatm() not to break on CR.  Now MINPUT with braced targets containing CR
-and/or LF works in 209, 206, and 201 (but not 208).  ckucmd.c, ckuusr.c,
-ckuus5.c, 15 Mar 2003.
-
-MINPUT n \fjoin(&a) works OK if all the members of \&a[] are text strings, but
-if they are strings of control chars (as above), they don't get separated by
-the spaces.  For example in:
-
-  dcl \&a[] = "\4\5" "\6\7" xxx
-  minput 10 \fjoin(&a)
-
-MINPUT gets two targets: "aaa" and "\4\5 \6\7 xxx".  The bug was in the
-cksplit() call in the \fjoin() case of MINPUT: it needed to specify an
-include set consisting of all the control characters except NUL.  ckuusr.c,
-16 Mar 2003.
-
-But there's still a problem:
-
-  dcl \&a[] = "\4\5\13\10" "\6\7" "xxx"
-
-creates an array whose first member is "^D^E (one doublequote included).  But
-if braces are used instead, there's no problem.  Same deal as MINPUT: cmfld()
-breaks on CR or LF, thus the end quote is lost.  If I set minputactive for
-DECLARE initializers too, that fixes it.  Is there any reason not to do this?
-Can't think of any (famous last words)...  ckuusr.c, 16 Mar 2003.
-
-Since it has multiple applications, changed the flag's name from minputactive
-to keepallchars.  ckucmd.c, ckuus[r5].c, 16 Mar 2003.
-
-\v(exedir) wasn't being set correctly (it included the program name as well
-as the directory).  Fixed in getexedir(): ckuus4.c, 16 Mar 2003.
-
-SET CARRIER-WATCH <Esc> "auto matic" (spurious space in supplied keyword).
-Cosmetic only; it still worked.  Fixed in setdcd(): ckuus3.c, 16 Mar 2003.
-
-"directory a b c" listed too many files -- all files whose names END WITH a,
-b, or c, rather than the files whose names WERE a, b, or c.  Diagnosis: The
-filespec is changed into a pattern: {a,b,c}, which is the correct form.  It is
-passed to nzxpand(), which goes through the directory getting filenames and
-sending each one to ckmatch() with the given pattern.  ckmatch() receives the
-correct pattern but then prepends a "*" -- that's not right.  It's not just
-in filename matching either.  The following succeeds when it shouldn't:
-
-  if match xxxxc {{a,b,c}} <command>
-
-Changing ckmatch() to not prepend the "*" to each segment fixes the command
-above but breaks lots of others.  Running through the "match" torture-test
-script shows the problem occurs only when the {a,b,c} list is the entire
-pattern, and not embedded within a larger pattern.  Testing for this case
-fixed the problem.  ckmatch(): ckclib.c, 16 Mar 2003.
-
-Fixed FTP MODTIME to not print anything if QUIET ON.  ckcftp.c, 16 Mar 2003.
-
-Picked up a new ckuath.c from Jeff, not sure what the changes are. 16 Mar 2003.
-
-Did a few regular and secure builds to make sure I didn't wreck anything.
-
-Changed version number to 209 (final).  ckcmai.c, 16 Mar 2003.
-
-Jason Heskett found another bug: if you define a macro FOO inside the
-definition of another macro BAR, and FOO's definition includes an odd number
-of doublequotes (such as 1), FOO's definition absorbs the rest of BAR's
-definition.  Example:
-
-  def TEST {
-    .foo = {X"}
-    sho mac foo
-  }
-  do test
-  sho mac foo
-
-Results in:
-
-  foo = {X"}, sho mac foo
-
-Diagnosis: the TEST definition becomes:
-
-  def TEST .foo = {X"}, sho mac foo
-
-and the macro reader is erroneously treating the doublequote as an open
-quote, and then automatically closes the quote at the end of the definition.
-The error is that a doublequote should be significant only at the beginning of
-a field.  But the macro reader isn't a command parser; it doesn't know what
-a field is -- it's just looking for commas and skipping over quoted ones.
-First we have to fix an oversight: SET COMMAND DOUBLEQUOTING OFF should have
-worked here, but it wasn't tested in this case.  Fixed in getncm(): ckuus5.c,
-17 Mar 2003.
-
-There are only certain cases where it makes sense to treat doublequotes as
-signicant:
-
- . An open quote must be at the beginning or preceded by a space.
- . A close quote is only at the end or else followed by a space.
-
-This too was fixed in getncm(): ckuus5.c, 17 Mar 2003.
-
-A fix from Jeff SSL/TLS FTP data decoding.  ckcftp.c, 18 Mar 2003.
-
-Tried building C-Kermit on a Cray Y-MP with UNICOS 9.0.  "int suspend",
-declared in ckcmai.c and used in many modules, conflicts with:
-
-  unistd.h:extern int suspend __((int _Category, int _Id));
-
-The "=Dsuspend=xsuspend" trick doesn't work for this; there is no way around
-the conflict other than to rename the variable: ckcmai.c, ckutio.c,
-ckuus[35xy].c.  26 Mar 2003.  VMS and K95 not affected.
-
-OK that gets us past ckcmai.c...  Then in ckutio.c I had to add a new #ifdef
-around the LFDEVNO setting, because the Cray didn't have mkdev.h.  Could not
-find a Cray-specific manifest symbol, so I made a new makefile target (cray9)
-that sets this symbol.  Having done this I have no idea what kind of lockfile
-would be created, but I also doubt if anybody dials out from a Cray.  The
-binary should run a C90, J90, or Y-MP.  makefile, 26 Mar 2003.
-
-Added a target for SCO OSR5.0.7.  makefile, ckuver.h, 30 Mar 2003.
-
-Changed since 208:
-makefile ckuver.h ckcmai.c ckclib.c ckcftp.c ckucmd.c ckuus*.c ckutio.c.
-
----8.0.209---
-
-From Mark Sapiro, a fix for the March 17th doubleqote fix, getncm(): ckuus5.c,
-4 Apr 2003.
-
-From Jeff, 29 Apr 2003:
- . Corrected target for HP-UX 11.00 + OpenSSL: makefile, 
- . Do not allow WILL AUTH before WONT START_TLS: ckctel.h ckctel.c
- . Add hooks for SFTP and SET/SHOW SFTP: ckcdeb.h ckuusr.h ckuusr.c ckuus3.c
- . Add SKERMIT ckuusr.h ckuusr.c
- . Add ADM-5 terminal emulation: ckuus7.c, ckuus5.c
- . Uncomment and update HELP SET SSH V2 AUTO-REKEY: ckuus2.c
- . Enable IF TERMINAL-MACRO and IF STARTED-FROM-DIALER for C-Kermit: ckuus6.c
- . Fix conflicting NOSCROLL keyword definition: ckuusr.h
- . Set ttname when I_AM_SSH: ckuusy.c
- . Add extended arg parsing for SSH, Rlogin, Telnet: ckuusy.c, ckuus4.c
- . Security updates: ckuath.c, ck_ssl.c
- . Change K95 version number to 2.2.0: ckcmai.c
- . Save K95 term i/o state before executing keyboard macro: ckuus4.c
- . Add tests for SSH Subsystem active during INPUT/OUTPUT/CONNECT: ckuus[45].c
- . Enable K95 SET SSH V2 AUTO-REKEY: ckuus3.c
-
-SFTP and SET SFTP subcommands are implemented up to the case statements.
-
-Files of mine that Jeff hadn't picked up:
-  ckuver.h ckcftp.c ckutio.c ckuusx.c (just minor changes for last build-all)
-
-On 4 Jan 2003, SET RECEIVE MOVE-TO was changed to convert is argument to an
-absolute path, which made it impossible to specify a relative path, then
-move to different directories and have it apply relatively to each directory.
-Changed this as follows:
-
- . Parser uses cmtxt() rather than cmdir() so it won't fail at parse time.
- . If path is absolute, we fail at parse time if directory doesn't exist.
- . In reof() we run the the path through xxstring (again, in case deferred
-   evaluation of variables is desired) and then, if not null, use it.
- . If the directory doesn't exist, rename() fails and reof() returns -4,
-   resulting in a protocol error (this is not a change).  We do NOT create
-   the directory on the fly. 
-
-I also fixed SET SEND/RECEIVE RENAME-TO to parse with cmtxt() rather than
-cmdir(), since it's parsing a text template, not a directory name, e.g.
-"set receive rename-to file-\v(time)-v(date)-\v(pid)".  This was totally
-broken, since when I don't know.  We don't call xxstring() in this parse, so
-evaluation is always deferred -- I'd better not change this.  ckuus7.c,
-ckcfns.c, 1 May 2003.
-
-From Jeff, Sat May  3 14:15:23 2003:
- . Pick up the right isascii definition for K95: ckctel.c
- . malloc...  ckuath.c (new safe malloc routines for K95)
- . Add author listing: ckuus5.c
- . SSH Heartbeat support (K95 only): ckuus[23].c
- . Prescan --height and --width to avoid window resizing at startup: ckuusy.c
- . Add checks for fatal() or doexit() called from sysinit(): ckuusx.c
- . Move some K95-specific definitions to ckoker.h: ckcdeb.h
- . Add support for ON_CD macro in zchdir(): ckufio.c
- . Add a command to let FTP client authenticate with SSLv2: ckcftp.c
- . Fix parsing of FTP file facts like "UNIX.mode": ckcftp.c
-
-ON_CD will need some explaining (to be done).  It's implemented for Unix,
-VMS, WIndows, and OS/2.
-
-The FTP file facts fix came from first exposure to the new OpenBSD FTP
-server: ftp://ftp7.usa.openbsd.org/pub/os/OpenBSD/3.3/i386/
-The period in "UNIX.mode" caused an erroneous word break, adding junk to
-the filename.
-
-About the malloc changes, Jeff says "K95 is not behaving well in low memory
-environments.  I'm not sure that C-Kermit does much better.  The program does
-not crash but it certainly does not behave the way the user expects it to.
-I'm beginning to think that any malloc() error should be treated as fatal."
-
-Not visible in these changes because it's in K95-specific modules: Jeff made
-SET ATTRIBUTES OFF and SET ATTRIBUTES DATE OFF apply to XYZMODEM transfers.
-
-From Jeff, 11 May 2003:
- . Add support for SSH Keepalive to relevant SET command (K95): ckuus3.c
- . Reduce max overlapped i/o requests from 30 to 7 (K95): ckuus7.c
- . Don't call sysinit() in fatal(): ckuusx.c.
- . Some new conditionalizations for SSL module: ck_ssl.c
-
-The doublequote-parsing fixes from March and April broke the SWITCH statement,
-which is implemented by internally defining, then executing, a macro.  If I
-drop back to the old dumb handling of doublequotes, everything is fixed except
-the problem of March 17th.  But can we really expect getncm() to pre-guess
-what the parser is going to do?  getncm()'s only job is to find command
-boundaries, which are represented by commas.  Commas, however, is needed IN
-commands too.  We take a comma literally if it is quoted with \, or is inside
-a matched pair of braces, parens, or doublequotes.  It is not unreasonable to
-require a doublequote in a macro definition to be prefixed by \ when it is to
-be taken literally.  The proper response to Jason Heskett's complaint of March
-17th should have been to leave the code alone and recommand an appropriate
-form of quoting:
-
-  def TEST {
-      .foo = {X\"}
-      sho mac foo
-  }
-
-And this is what I have done.  Another reason for sticking with the old method
-is that it's explainable.  The "improved" method, even if it worked, would be
-be impossible to explain.  Btw, in testing this I noticed that the switch-test
-script made 8.0.201 dump core.  Today's version is fine.  The problem with
-quoted strings inside of IF {...} clauses and FOR and WHILE loops is fixed
-too.  Perhaps "unbroken" would be a better word.  ckuus5.c, 11 May 2003.
-
-Vace discovered that FTP MGET /EXCEPT:{... (with an unterminated /EXCEPT list)
-could crash Kermit.  Fixed in ckcftp.c, 11 May 2003.
-
-CONTINUE should not affect SUCCESS/FAILURE status.  ckuusr.c, 11 May 2003.
-
-Fixed an oversight that goes back 15 years.  While \{123} is allowed for
-decimal codes, \x{12} and \o{123} were never handled.  ckucmd.c, 11 May 2003.
-
-Added support for Red Hat <baudboy.h> and /usr/sbin/lockdev.  Supposedly this
-allows Kermit to be installed without setuid or setgid bits and still be able
-to lock and use the serial device.  Compiles and starts, but not tested.
-ckcdeb.h, makefile, ckutio.c, ckuus5.c, 16 May 2003.
-
-From Jeff: FTP ASCII send data to host when FTP /SSL was in use was broken.
-ftp_dpl is set to Clear when FTP /SSL is in use.  This was causing the data to
-be written to the socket with send() instead of the OpenSSL routines.
-ckcftp.c, ckuath.c, 21 May 2003.
-
-From Jeff: Stuff for Kerberos 524: ckcdeb.h.  Fixes for FTP; "FTP ASCII send
-data did not properly compute the end of line translations.  On Unix (and
-similar platforms) the end of line was correct for no character sets but
-incorrect when character sets were specified.  On Windows/OS2, the end of line
-was correct when character sets were specified and incorrect when they were
-not.  On MAC, both were broken.  Also, FTP Send Byte counts were incorrect
-when character sets were specified."  ckcftp.c.  17 Jun 2003.
-
-From Jeff: fixes to HTTP /AGENT: and /USER: switch action: ckcnet.c ckuus3.c
-ck_crp.c ckcftp.c ckuus2.c ckuusy.c ckuusr.c ckcnet.h, 21 Jun 2003.
-
-From Jeff: Fix SET DIALER BACKSPACE so it can override a previous SET KEY
-(e.g. from INI file): ckuus7.c.  Some SSL/TLS updates: ck_ssl.c.  HTTP support
-for VMS and other VMS improvements (e.g. a way to not have to hardwire the
-C-Kermit version number into the build script) from Martin Vorlaender:
-ckcnet.h, ckuus[r3].c, ckcdeb.h, ckvtio.c, ckcnet.c, ckvker.com.  Built on
-Solaris (gcc/ansi) and SunOS (cc/k&r).  The new VMS script tests the VMS
-version and includes HTTP support only for VMS 6.2 or later.  2 Jul 2003.
-
-Tried to build on our last VMS system but it seems to be dead.  Looks like a
-head crash (makes really loud noises, boot says DKA0 not recognized) (fooey, I
-just paid good money to renew the VMS license).  Tried building at another
-site with:
-
-  Process Software MultiNet V4.3 Rev A-X,
-  Compaq AlphaServer ES40, OpenVMS AXP V7.3
-  Compaq C V6.4-008 on OpenVMS Alpha V7.3
-
-Had to make a few corrections to ckvker.com.  But still, compilation of
-ckcnet.c bombs, indicating that the SELECT definition somehow got lost
-somewhere since the 209 release (i.e. no SELECT type is defined so it falls
-thru to "SELECT is required for this code").  But I don't see anything in
-ckcdeb.h or ckcnet.[ch] that would explain this.  Not ckvker.com either
-(putting the old one back gives the same result).  OK, I give up, maybe it's
-just that I haven't tried building it on MultiNet recently.  What about UCX?
-Aha, builds fine there except for warnings about mlook, dodo, and parser in
-ckvfio.c (because of ON_CD) -- I suppose I have #include <ckucmd.h>... (done)
-Anyhow it builds OK and the HTTP code is active and almost works (HTTP OPEN
-works; HTTP GET seems to succeed but creates an empty file every time).  Tried
-building under MultiNet at another installation; same bad result.
-
-OK so why won't it build for MultiNet?  Comparing ckcnet.c with the 209
-version, not a single #ifdef or #include is changed.  Tried building with
-p3="NOHTTP" -- builds OK, aha.  Where's the problem?  Not ckcnet.h...
-Not ckcdeb.h...  OK I give up, will revisit this next time I get time to
-do anything with the code.
-
-Later Jeff said "Martin did not implement VMS networking for the HTTP code.
-All he did was activate the #define HTTP which happens to work because his
-connections are using SSL/TLS connections.  http_inc(), http_tol(), etc have
-no support for VMS networking regardless of whether it is UCX or MULTINET.
-The vast majority of HTTP connections are not secured by SSL/TLS.  It makes no
-sense to support HTTP on VMS until someone is willing to either do the work or
-pay have the work done to implement VMS networking in that code base."  So the
-fix is to not enable HTTP for VMS after all.  Removed the CKHTTP definition
-for VMS from ckcdeb.h, 6 Jul 2003.
-
-Fixed ckvfio.c to #include <ckuusr.h> (instead of <ckucmd.h>) to pick up 
-missing prototypes.  6 Jul 2003.
-
-From Arthur Marsh: solaris2xg+openssl+zlib+srp+pam+shadow and the corresponding
-Solaris 7 target.  makefile, 6 Jul 2003.
-
-Remove duplicate #includes for <sys/stat.h>, <errno.h>, and <ctype.h> from
-ckcftp.c.  6 Jul 2003.
-
-Add -DUSE_MEMCPY to Motorola SV/68 targets because of shuffled #includes in 
-ckcftp.c.  8 Jul 2003.
-
-From Jeff: Fix problems mixing SSL and SRP without Kerberos.  Plus a few minor
-#define comment changes and a reshuffling of #defines in ckcdeb.h to allow me
-to build on X86 Windows without Kerberos.  ckcdeb.h, ck_crp.c, ckuath.c,
-10 Jul 2003.
-
-From Jeff: updated ckuat2.h and ckuath.c, 29 Jul 2003.
-
-Mats Peterson noticed that a very small Latin-1 file would be incorrectly
-identified as UCS-2 by scanfile().  Fixed in ckuusx.c, 29 Jul 2003.
-
-Fixed ACCESS macro definition to account for the fact that FIND is now a
-built-in command.  ckermit.ini, 30 Jul 2003.
-
-From Jeff: Fix for typo in urlparse() (svc/hos): ckuusy.c, 18 Aug 2003.
-
-From Jeff: Redhat9 makefile targets (needed for for OpenSSL 0.9.7):
-makefile, 19 Aug 2003.
-
-GREP /NOLIST and /COUNT did too much magic, with some undesirable fallout:
-"GREP /NOLIST /COUNT:x args" printed "file:count" for each file.  "GREP
-/COUNT:x /NOLIST args" did not print "file:count", but neither did it set the
-count variable.  Removed the magic.  Also one of the GREP switches,
-/LINENUMBERS, was out of order.  Fixed in ckuus6.c, 20 Aug 2003.
-
-From Jeff: "Reorganizing code to enable building with different subsets of
-options; a few typos corrected as well."  ckcdeb.h, ckuver.h (for RH9),
-ckcnet.c, ckuus7.c, ckuus3.c: 24 Aug 2003.
-
-Scanfile misidentified a big PDF file as text because the first 800K of it
-*was* text (most other PDF files were correctly tagged as binary).  Fixed
-by adding a check for the PDF signature at the beginning of the file.
-scanfile(): ckuusx.c, 25 Aug 2003.
-
-Ditto for PostScript files, but conservatively.  Signature at beginning of
-file must begin with "%!PS-Ado".  If it's just "%!" (or something nonstandard
-like "%%Creator: Windows PSCRIPT") we do a regular scan.  Also added "*.ps"
-to all binary filename patterns.  ckuusx.c, 4 Sep 2003.
-
-Ditto (but within #ifndef NOPCLSCAN) for PCL (<ESC>E) and PJL (<ESC>%) files,
-but no binpatterns (note: ".PCL" is the extension for TOPS-20 EXEC scripts).
-ckuusx.c, 4 Sep 2003.
-
-Added comments about OpenSSL 0.9.7 to all linux+openssl targets.
-makefile, 4 Sep 2003.
-
-From Jeff: Added - #define ALLOW_KRB_3DES_ENCRYPT.  When this symbol is defined
-at compilation Kermit will allow non-DES session keys to be used during Telnet
-Auth.  These session keys can then be used for Telnet Encrypt.  The reason
-this is not compiled on by default is that the MIT Kerberos Telnet does not
-follow the RFC for constructing keys for ENCRYPT DES when the keys are longer
-than 8 bytes in length.  ckuath.c, ckuus5.c, 4 Sep 2003.
-
-"ftp mget a b c" succeeded if one or more of the files did not exist, even
-with "set ftp error-action proceed".  This is because the server's NLST file
-list does not include any files that don't exist, so the client never even
-tries to get them.  Fortunately, the way the code is structured, this one was
-easy to fix.  ckcftp.c, 14 Sep 2003.
-
-From Jeff: Corrected code in ckcnet.c to ensure that Reverse DNS Lookups are
-not performed if tcp_rdns is OFF.  Fixed ck_krb5_getrealm() to actually return
-the realm of the credentials cache and not the default realm specified in the
-krb5.conf file.  Previously krb5_cc_get_principal() was not being called.
-Fixed ck_krb5_is_tgt_valid() to test the TGT in the current ccache and not the
-TGT constructed from the default realm.  ckcnet.c, ckuath.c, 14 Sep 2003.
-
-Marco Bernardi noticed that IF DIRECTORY could produce a false positive if
-the argument directory had previously been referenced but then removed.  This
-is because of the clever isdir() cache that was added to speed up recursion
-through big directory trees.  Changed IF DIRECTORY to make a second check
-(definitive but more expensive) if isdir() succeeds, and changed the
-directory-deleting routine, ckmkdir(), to flush the directory cache (UNIX
-only -- this also should be done in K95 but it's not critical).  This was
-done by adding a routine, clrdircache() to ckufio.c, which sets prevstat
-to -1 and prevpath[0] to NUL.  ckcfn3.c, ckuus6.c, ckufio.c, 18 Sep 2003.
-
-Marco reported the second fix still didn't work for him (even though it did
-for me).  Rather than try to figure out why, I concluded that the directory
-cache is just not safe: a directory found a second ago might have been deleted
-or renamed not only by Kermit but by some other process.  Why did I add this
-in the first place?  The log says:
-
-  Some debug logs showed that isdir() is often called twice in a row on the
-  same file.  Rather than try to sort out clients, I added a 1-element cache
-  to Unix isdir().  ckufio.c, 24 Apr 2000.
-
-Experimentation with DIR and DIR /RECURSIVE does not show this happening at
-all.  So I #ifdef'd out the directory cache (see #ifdef ISDIRCACHE in ckufio.c;
-ISDIRCACHE is not defined) and backed off the previous changes: ckufio.c,
-ckcfn3.c, ckuus6.c, 28 Sep 2003.
-
-From Jeff: Replace the compile time ALLOW_KRB_3DES_ENCRYPT with a run-time
-command SET TELNET BUG AUTH-KRB5-DES which defaults to ON: ckctel.[ch],
-ckuus[234].c, ck_crp.c, ckuath.c.  4 Oct 2003.
-
-Allow DIAL RETRIES to be any positive number, and catch negative ones.
-Also added code to check for atoi() errors (e.g. truncation).  At least on
-some platforms (e.g. Solaris) atoi() is supposed to set errno, but it
-doesn't.  ckuus3.c, ckucmd.c, 4 Oct 2003.
-
-Added /DEFAULT: to ASK-class commands (ASK, ASKQ, GETOK):
-
- . For popups: no way to send defaults to popup_readtext() or popup_readpass().
- . For GUI ASK[Q], pass default to gui_txt_dialog().
- . For GUI GETOK, convert "yes" "ok" or "no" default to number for uq_ok().
- . For Text GETOK, add default to cmkey().
- . For Text ASK[Q], add default to cmtxt().
- . For GETC, GETKEY, and READ: no changes.
-
-GETOK, ASK, and ASKQ with /TIMEOUT: no longer fail when the timer goes off
-if a /DEFAULT was supplied.  The GUI functions (uq_blah) don't seem to
-support timeouts.  Only the text version has been tested.  ckuus[26].c,
-4 Oct 2003.
-
-From Jeff: add /DEFAULT: for popups.  ckuus6.c. 6 Oct 2003.
-
-Change SET DIAL INTERVAL to be like SET DIAL RETRIES.  ckuus[34].c, 6 Oct 2003.
-
-Added target for HP-UX 10/11 + OpenSSL built with gcc, from Chris Cheney.
-Makefile, 12 Oct 2003.
-
-From Jeff, 6 Nov 2003:
- . #ifdef adjustments: ckcftp.c, ckcdeb.h
- . Fix spurious consumption of first byte(s) on Telnet connection: ckctel.c
- . Another HP PJL test for scanfile: ckuusx.c.
- . K95: Recognize DG4xx protected fields in DG2xx emulation: ckuus7.c.
- . Add SSLeay version display to SHOW AUTH command: ckuus7.c
- . Improved SET MOUSE CLEAR help text: ckuus2.c.
- . Improved Kverbs help text: ckuus2.c (+ new IBM-3151 Kverbs).
- . Some changes to ck_ssl.c, ckuath.c.
-
-From PeterE, 10 Nov 2003:
- . Improved HP-UX 10/11 makefile targets for OpenSSL.
- . #ifdef fix for OpenSSL on HP-UX: ck_ssl.c.
-
-Another new makefile from PeterE with improved and integrated HP-UX targets.
-12 Nov 2003.
-
-A couple fixes to the solaris9g+krb5+krb4+openssl+shadow+pam+zlib target
-from Jeff.  Added a solaris9g+openssl+shadow+pam+zlib target.  makefile,
-21 Nov 2003.
-
-From Jeff, 30 Nov 2003:
- . Fix SEND /MOVE-TO: ckuusr.c.
- . Fix K95 SET TITLE to allow quotes/braces around text: ckuus7.c.
- . Improved "set term autodownload ?" response: ckuus5.c.
- . Fix SHOW FEATURES to specify the protocol for encryption: ckuus5.c
- . Make {SEND, RECEIVE} {MOVE-TO, RENAME-TO} work for XYZMODEM (K95 only).
-
-From Jeff: 7 Jan 2004:
- . At one point Frank started to add a timer parameter to the
-   uq_txt() function but he only did it for the non-ANSI
-   compilers.  I added it for the ANSI compilers, fixed the
-   prototypes and provided a default value easily changed
-   DEFAULT_UQ_TIMEOUT: ckcker.h, ckuus[36].c, ck_ssl.c, ckcftp.c, ckuath.c.
- . Fixed SET TERMINAL DEBUG ON (typo in variable name): ckuus7.c.
- . Fixed BEEP INFORMATION; previously it made no sound, now uses
-   MB_ICONQUESTION.  ckuusx.c.
-
-From Ian Beckwith <ian@nessie.mcc.ac.uk> (Debianization), 7 Jan 2004:
- . Search dir/ckermit for docs, as well as dir/kermit in cmdini(): ckuus5.c.
- . New linux+krb5+krb4+openssl+shadow+pam target (kitchen sink minus SRP,
-   which Debian does not distribute): makefile.
- ? Mangles the DESTDIR support in makefile to install into a staging area:
-   makefile (I didn't take this one yet).
-
-Updated copyright notices for 2004, all modules.  7 Jan 2004.
-
-Added INPUT /NOMATCH, allowing INPUT to be used for a fixed amount of time
-without attempting to match any text or patterns, so it's no longer
-necessary to "input 600 STRING_THAT_WILL_NEVER_COME".  If /NOMATCH is
-included, INPUT succeeds if the timeout expires, with \v(instatus) = 1
-(meaning "timed out"); fails upon interruption or i/o error.  ckuusr.h,
-ckuus[r24].c, 7 Jan 2004.
-
-Added SET INPUT SCALE-FACTOR <float>.  This scales all INPUT timeouts by the
-given factor, allowing time-sensitive scripts to be adjusted to changing
-conditions such as congested networks or different-speed modems without
-having to change each INPUT-class command.  This affects only those timeouts
-that are given in seconds, not as wall-clock times.  Although the scale
-factor can have a fractional part, the INPUT timeout is still an integer.
-Added this to SHOW INPUT, and added a \v(inscale) variable for it.
-ckuusr.h, ckuus[r257].c, 7 Jan 2004.
-
-undef \%a, \fverify(abc,\%a) returns 0, which makes it look as if \%a is a
-string composed of a's, b's, and/or c's, when in fact it contains nothing.
-Changed \fverify() to return -1 in this case.  ckuus4.c, 12 Jan 2004.
-
-\fcode(xxx) returned an empty string if its argument string was empty.  This
-makes it unsafe to use in arithmetic or boolean expressions.  Changed it to
-return 0 if its argument was missing, null, or empty.  ckuus4.c, 12 Jan 2004.
-
-Updated \verify() and \fcode() help text.  ckuus2.c, 12 Jan 2004.
-
-While setting up IKSD, Ian Beckwith noticed that including the --initfile:
-option caused Kermit to start parsing its own Copyright string as if it were
-the command line, and eventually crash.  I couldn't reproduce on Solaris /
-Sparc but I could in Linux / i386 (what Ian is using) -- a change from Jeff
-on 28 Apr 2003 set the command-line arg pointer to a literal empty string in
-prescan() about line 1740 of of ckuus4.c; the pointer is incremented next
-time thru the loop, resulting in random memory being referenced.  Fixed by
-setting the pointer to NULL instead of "".  ckuus4.c, 12 Jan 2004.
-
-declare \&a[999999999999999] would dump core on some platforms.  atoi()
-or whatever would truncate the dimension to maxint.  When we add 1 to the
-result, we get a negative number, which is used as an index, loop test, etc.
-Fixed both dodcl() and dclarray() to check for (n+1 < 0).  ckuus[r5].c,
-12 Jan 2004.
-
-Unix zchki() would fail on /dev/tty, which is unreasonable.  This prevented
-FOPEN /READ from reading from the terminal.  zchki() already allowed for
-/dev/null, so I added /dev/tty to the list of specials.  Ditto for FOPEN
-/WRITE and zchko().  ckufio.c 13 Jan 2004.
-
-Added untabify() routine to ckclib.[ch], 13 Jan 2004.
-Added FREAD /TRIM and /UNTABIFY.  ckuus[27].c, 13 Jan 2004.
-Added \funtabify().  ckuusr.h, ckuus[24].c, 13 Jan 2004.
-
-Dat Nguyen noticed that (setq u 'p') followed by (u) dumped core.  This was
-caused by an over-clever optimization that skipped mallocs for short
-literals, but then went on later to try to free one that hadn't been
-malloc'd.  Fixed in dosexp(): ckuus3.c, 14 Jan 2004.
-
-Catch another copyright date.  ckuus5.c, 14 Jan 2004.
-
-Fixed SWITCH to work even when SET COMMAND DOUBLEQUOTE OFF (from Mark
-Sapiro).  ckuus5.c, 15 Jan 2004.
-
-Changed version to 8.0.211 so scripts can test for recently added features.
-ckcmai.c, 15 Jan 2004.
-
-Fixed a glitch in K95 "help set port".  ckuus2.c, 20 Jan 2004.
-
-Fix from Jeff: Connections to a TLS-aware protocol which require a reconnect
-upon certificate verification failure could not reconnect if the connection
-was initiated from the command line or via a URL.  ckctel.c ckcmai.c
-ckuusr.c ckuus7.c ckuusy.c, 20 Jan 2004.
-
-From Alex Lewin: makefile target and #ifdef for Mac OS X 10.3 (Panther):
-makefile, ckcnet.c, 7 Feb 2004.
-
-Added KFLAGS to sco32v507 targets to make PTY and SSH commands work.  The
-same flags could probably also be added to earlier OSR5 targets but they
-have not been tested there.  makefile, 7 Feb 2004.
-
-Checked a complaint that "LOCAL &a" did not make array \&a[] local.  Indeed
-it did not, and can not.  You have to use the full syntax in the LOCAL
-command, "LOCAL \&a[]", or else it doesn't know it's not a macro named &a.
-7 Feb 2004.
-
-Fixed some confusion in creating IKSD database file and temp-file names.
-I was calling zfnqfp() without remembering that the path member of the
-returned struct included the filename, so to get just the directory name,
-I needed to strip the filename from the right.  ckuusy.c, 2 Mar 2004.
-
-New ckuath.c, ck_ssl.c from Jeff.  2 Mar 2004.
-
-Updated Jeff's affiliation in VERSION command text.  ckuusr.c, 2 Mar 2004.
-
-Designation changed from Dev.00 to Beta.01.  ckcmai.c, 2 Mar 2004.
-
-Fixed zrename() syslogging -- it had success and failure reversed.
-Beta.02: ckufio.c, 4 Mar 2004.
-
-Problem: when accessing IKSD via a kermit:// or iksd:// URL, and a user ID
-is given but no password, doxarg() set the password to "" instead of leaving
-it NULL, but all the tests in dourl() are for NULL.  Fixed in doxarg():
-ckuusy.c, 5 Mar 2004.
-
-The logic in dourl() about which macro to construct (login and connect,
-login and get directory listing, or login and fetch a file) was a bit off,
-so all three cases were not handled.  ckcmai.c, 5 Mar 2004.
-
-Trial Beta builds:
- . HP-UX B.11.11 PA-RISC
- . HP-UX B.11.23 IA64
- . Tru64 4.0G Alpha
- . Tru64 5.1B Alpha
- . Debian 3.0 i386
- . Red Hat ES 2.1 i386
- . Slackware 9.1 i386
- . VMS 7.3-1 Alpha + UCX 5.3
- . VMS 7.3-1 Alpha no TCP/IP
- . VMS 7.3 Alpha MultiNet 4.3 A-X
- . SCO UnixWare 7.1.4 i386
- . SCO OSR5.0.7 i386
- . Solaris 9 Sparc
-
-Fixed compiler warning in doxarg() caused by typo (NULL instead of NUL) in
-the 5 March doxarg() edit.  ckuusy.c, 9 Mar 2004.
-
-IKSD (kermit://) command-line URLs did not work right if the client had
-already preauthenticated with Kerberos or somesuch because they tried to log
-in again with REMOTE LOGIN.  The macros constructed in doxarg() needed to
-check \v(authstate) before attempting REMOTE LOGIN.  ckcmai.c, 10 Mar 2004.
-
-Added ckuker.nr to x.sh (ckdaily upload) and updated ckuker.nr with current
-version number and dates.  10 Mar 2004.
-
-Replaced hardwired references to /usr/local in makefile with $(prefix)
-(which defaults to /usr/local, but can be overridden on the command line),
-suggested by Nelson Beebe for use with Configure.  10 Mar 2004.
-
-From Nelson Beebe: In the Kermit makefile in the install target commands,
-line 981 reads:
-
-        cp $(BINARY) $(DESTDIR)$(BINDIR)/kermit || exit 1;\
-
-Could you please add this line before it:
-
-        rm -f $(DESTDIR)$(BINDIR)/kermit;\
-
-Some sites (mine included) keep multiple versions of software around,
-with hard links between $(prefix)/progname and $(prefix)/progname-x.y.z.
-Failure to remove the $(prefix)/progname at "make install" time then
-replaces the old $(prefix)/progname-x.y.z with the new one, destroying
-an old version that the site wanted to be preserved.  makefile, 10 Mar 2004.
-
-Minor syntax and typo fixes (mostly prototypes): ckcdeb.h, ckcfns.c,
-ckclib.c, ckufio.c, ckuusr.h, ckuusx.c, 10 Mar 2004.  (I still have a few
-more to do.)
-
-Added CC=$(CC) CC2=$(CC2) to many (but not all) makefile targets that
-reference other makefile targets.  On some platforms (notably AIX, Solaris,
-SunOS) there are specific targets for different compilers, so I skipped
-those.  makefile, 10 Mar 2004.
-
-Added error checking to kermit:// URL macros, so they don't plow ahead
-after the connection is closed.  ckcmai.c, 11 Mar 2004.
-
-Added FreeBSD 4.9 and 5.1 targets (only the herald is affected).
-makefile, ckuver.h, 11 Mar 2004.
-
-Added "LIBS=-lcrypt" to bsd44 targets since nowadays crypt is almost always
-unbundled from libc.  Also added explanatory notes.  makefile, 11 Mar 2004.
-
-Changed MANDIR to default to $(manroot)/man/man1, and manroot to default
-to $(prefix).  More adding of CC=$(CC) clauses: {Free,Net,Open}BSD, 4.4BSD.
-makefile, 11 Mar 2004.
-
-Miscellaneous cleanups: ckuusx.c, ckcnet.c, ckufio.c, 11 Mar 2004.
-
-Corrected the check in the linux target to see if /usr/include/crypt.h
-exists, and if so to define HAVE_CRYPT_H, which is used in ckcdeb.h to
-#include <crypt.h> to get the prototype for crypt() and prevent bogus
-conversions on its return type on 64-bit platforms (the previous test wasn't
-quite right and the resulting symbol wasn't spelled right).  makefile,
-12 Mar 2004.
-
-From Jeff, 14 Mar 2004:
- . Initialize localuidbuf[] in tn_snenv(): ckctel.c.
- . Remove remote-mode checks in hupok() for K95G only (why?): ckuus3.c.
- . Add help text for new K95-only TYPE /GUI switches: ckuus2.c.
- . TYPE /GUI parsing, ...: ckuusr.c.
- . TYPE /GUI action, dotype(): ckuus6.c
- . Change Jeff's affiliation: most modules.
-
-20 Mar 2004: Looked into adding long file support, i.e. handling files more
-than 2GB (or 4GB) long.  Discovered very quickly this would be a major
-project.  Each platform has a different API, or environment, or transition
-plan, or whatever -- a nightmare to handle in portable code.  At the very
-least we'll need to convert a lot of Kermit variables from long or unsigned
-long to some new Kermit type, which in turn is #defined or typedef'd
-appropriately for each platform (to off_t or size_t or whatever).  Then we
-have to worry about the details of open() vs fopen(); printf() formats (%lld
-vs %Ld vs %"PRId64"...), platforms like HP-UX where you might have to use
-different APIs for different file systems on the same computer, etc.  We'll
-need to confront this soon, but let's get a good stable 8.0.211 release out
-first!  Meanwhile, for future reference, here are a few articles:
-
-General: http://freshmeat.net/articles/view/709/
-Linux:   http://www.ece.utexas.edu/~luo/linux_lfs.html
-HP-UX:   http://devrsrc1.external.hp.com/STK/partner/lg_files.pdf
-Solaris: http://wwws.sun.com/software/whitepapers/wp-largefiles/largefiles.pdf
-
-Looked into FTP timeouts.  It appears I can just call empty() (which is
-nothing more than a front end for select()) with the desired timeout before
-any kind of network read.  If it returns <= 0, we have a timeout.  This is
-not quite the same as using alarm() / signal() around a recv() (which could
-get stuck) but alarm() / signal() are not not used in the FTP module and are
-not naturally portable to Windows, but select() is already in use in the FTP
-module for both Unix and Windows.  This form of timeout could be used
-portably for both command response and data reads.  What about writes to the
-command or data socket?  They can get stuck for hours and hours without
-returning too, but the select() approach won't help here -- we need the
-actual send() or recv() to time out, or be wrapped in an alarm()/signal()
-kind of mechanism.  But if we can do that for sends, we can also do it for
-receives.  Better check with Jeff before I start programming anything.
-20 Mar 2004.
-
-Later: Decided to postpone the above two projects (ditto IPv6) until after
-8.0.211 is released because both will have major impacts on portability.
-Grumble: all i/o APIs should have been designed from the beginning with a
-timeout parameter.  To this day, hardly any have this feature.
-
-3-4 Apr 2004: More 8.0.211 Beta.02+ test builds:
-
- . FreeBSD 3.3
- . FreeBSD 4.4
- . Linux Debian 2.1
- . Linux RH 6.1
- . Linux RH 7.1
- . Linux RH 7.2
- . Linux RH 9 (with 84 different combinations of feature selection)
- . Linux SuSE 6.4
- . Linux SuSE 7.0
- . NetBSD 1.4.1
- . NetBSD 1.5.2
- . OpenBSD 2.5
- . OpenBSD 3.0
- . QNX 4.25
- . SCO UnixWare 2.1.3
- . SCO UnixWare 7.1.4
- . SCO OpenServer 5.0.7
- . SCO XENIX 2.3.4 (no TCP)
-
-Changes needed: None.
-
-Problem: SCO XENIX 2.3.4 network build failed in the FTP module with
-header-file syntax and conflicting-definitions trouble.  I'm not going to
-try to fix it; 8.0.209 built OK with FTP, so we'll just keep that one
-available.
-
-Got access to VMS 8.1 on IA64.  Building the nonet version of C-Kermit
-required minor modifications to ckvvms.h, ckv[ft]io.c, and ckvcon.c, to
-account for a third architecture.  Also to SHOW FEATURES in ckuus5.c.  Once
-that was done, the UCX 5.5 version built OK too.  Starts OK, makes Telnet
-connection OK, sends files.  Has some obvious glitches though -- "stat"
-after a file transfer reports 0 elapsed time (in fact it was 00:09:48) and
-1219174400 cps (when in fact it was 10364).  This doesn't happen on the
-Alpha.  Btw, the IA64 binary is twice as big as the Alpha one.  Changed
-to Beta.03.  5 Apr 2004.
-
-Fixed the ckdaily script to include the makefile and man page in the Zip
-file (they were not included because the Zip file was intended mainly for
-VMS users, but some Unix users prefer Zip to tar.gz).  6 Apr 2004.
-
-Traced problems in VMS/IA64 statistics report to rftimer()/gftimer() in
-ckvtio.c, which use sys$ and lib$ calls to figure elapsed time.  These work
-on VAX and Alpha but not IA64.  Sent a report to the chief engineer of the
-IA64 VMS port; he says it's probably a bug in VMS 8.1 (which is not a real
-release); he'll make sure it's fixed in 8.2.  As an experiment, tried
-swapping in the Unix versions of these routines (which call gettimeofday()
-etc).  They seem work just fine (it hung a couple times but I think that's
-because the underlying system hung too; trying it later on a new connection,
-it was fine; however I noticed a BIG discrepancy in throughput between
-sending and receiving).  Moved definitions for VMS64BIT and VMSI64 to
-ckcdeb.h so all modules can use them and added them to the SHOW FEATURES
-display.  Added VMSV80 definition to build procedure.  Beta.03+.  ckcdeb.h,
-ckcuus5.c, ckcvvms.h, ckvtio.c, ckvker.com, 6 Apr 2004.
-
-While doing the build-all, I noticed the VMS version did not build with
-Multinet or older UCX versions, always with the same errors -- undeclared
-variables, undefined symbols, all TCP/IP related.  This didn't happen a
-couple weeks ago...  Somehow the order of #includes was messed up --
-ckuusr.h depended on symbols that are defined in ckcnet.h, but ckcnet.h
-was being included after ckuusr.h...  this was compounded by two missing
-commas in ckvker.com.  11 Apr 2004.
-
-Removed Beta designation, released as 8.0.211, 10 Apr 2004.
-
-I had somehow lost the edit to ckutio.c that changed the UUCP lockfile for
-Mac OS X from /var/spool/uucp to /var/spool/lock.  So I slipped it in and
-re-uploaded version 8.0.211.  You can tell the difference because SHOW
-VERSIONS has 17 Apr 2004 for the Communications I/O module.  Also the 10.3
-executable now has a designer banner: "Mac OS X 10.3".  makefile, ckuver.h,
-ckutio.c, ckuus[45].c, 17 Apr 2004.
-
----8.0.211---
-
-Removed "wermit" from "make clean" (how did it get there?).  makefile.
-
-From Jeff, applied 10 May 2004.
- . Rearrange #ifdefs that define OS/2-only features. ckcdeb.h.
- . Fix two strncat()s that should have been ckstrncat()s.  ckuus7.c.
- . Fix two strncat()s that should have been ckstrncat()s.  ckuus4.c.
- . Fix one strncat(). ckcfns.c.
- . SET FTP CHAR ON used backwards byte order when output to screen.  ckcfns.c.
- . Fix two strncat()s.  ckuus3.c.
- . Add SET NETWORK TYPE NAMED-PIPE for K95.  ckuus3.c.
- . Add "No active connections" message to hupok().  ckuus3.c.
- . Fix many strncat()s.  ckcnet.c.
- . Fix some strncat()s.  ckcftp.c
- . Make FTP port unsigned short for 16383 < port < 65536.  ckcftp.c.
- . Improvements to FTP USER command.  ckcftp.c.
- . Fix FEAT parsing to allow for various forms of whitespace.  ckcftp.c.
-
-S-Expression (AND FOO BAR) would not short-circuit if FOO's value was 0,
-even though short-circuiting code has been there since Day 1.  Similarly for
-(OR BAR FOO).  Turns out the first operand was a special case that bypassed
-the short-circuit check.  Fixed in dosexp(): ckuus3.c, 10 May 2004.
-
-Red Hat 7.3 (and maybe others) <baudboy.h> referenced open() without first
-ensuring it was declared.  The declaration is in <fcntl.h>, which is after
-<baudboy.h> in ckutio.c series of #includes.  Made a special case for this.
-ckutio.c (see comments), 10 May 2004.
-
-If the local Kermit's parity is set to SPACE and then a file arrives via
-autodownload, automatic parity detection improperly switches it to NONE.
-Fixed in rpack() by switching parity automatically only if parchk() returns
-> 0 (rather than > -1), since NONE and SPACE are indistinguishable.  A
-bigger problem still remains: autodownload does not work at all if the
-sender is using actual parity bits (even, odd, or mark) and the receiver's
-parity is NONE.  ckcfn2.c, 10 May 2004.
-
-When a DIAL MACRO is defined and the phone number is comprised of more than
-one "word" (i.e. contains spaces), the dial macro loses the second and
-subsequent words after the first call. Fixed in xdial() by inserting quotes
-around phone number before passing it to xdial(). ckuus6.c, 10 May 2004.
-
-DIAL MACRO fix was not right; the quotes were kept as part of the phone
-number and sent to the modem.  dodo() pokes its argument to separate the
-macro argument string into its component arguments.  xdial() is called
-repeatedly on the same string, so after the first time, a NUL has been
-deposited after the first word of the telephone number.  The fix is to have
-xdial() create a pokeable copy of its argument string before calling
-dodo(dial-macro,args...).  It might seem odd that dodo pokes its argument,
-but making copies would be would be prohibitive in space and time.
-ckuus6.c, 23 May 2004.
-
-FTP CD did not strip braces or quotes from around its argument.  Fixed in
-doftprmt(): ckcftp.c, 23 May 2004.
-
-Added client side of REMOTE MESSAGE/RMESSAGE/RMSG: ckuus[r27].c, 23 May 2004.
-
-Server side of REMOTE MESSAGE: ckcpro.w, 23 May 2004.
-
-From Dave Sneddon: an updated CKVKER.COM containing a fix where the
-COMPAQ_SSL symbol was not defined but later referenced which generated an
-undefined symbol error.  ckvker.com, 5 Jan 2005.
-
-From Andy Tanenbaum (28 May 2005):
- . Fix an errant prototype in ckcker.h and ckucmd.h - () instead of (void).
- . Add support for MINIX 3.0.  makefile, ckutio.c, ckufio.c, ckuver.h.
-
-Fixed messed-up sndhlp() call which apparently had been jiggered to
-compensate for the bad prototype which has now been fixed, ckcpro.w,
-12 Jun 2005.
-
-From Jeff (12 June 2005):
- . Security updates.  ck_ssl.c, ck_crp.c, ckuath.c.
- . Fix bug in K95 SET PRINTER CHARACTER-SET. ckuus3.c.
- . Add printer character-set to K95 SHOW PRINTER display. ckuus5,c
- . Add SET MSKERMIT FILE-RENAMING to K95. ckuus7.c, ckuusr.h.
- . Add help for K95 SET MSKERMIT.  ckuus2.c.
- . Add SET GUI CLOSE to K95.  ckuusr.h, ckuus2.c, ckuus3.c
- . Add help text for K95 SET GUI MENUBAR and TOOLBAR.  ckuus2.c.
- . Add --noclose command-line option for K95.  ckuusy.c
- . Add PAM support for Mac OS X.  ckufio.c.
- . Add GSSAPI support for Mac OS X.  ckcftp.c.
- . Pick up more URL options.  ckcker.h, ckuusy.c.
- . Fix bug in delta-time calculation across year boundary.  ckucmd.c.
- . Add Secure Endpoints to copyright notices.  ckcmai.c.
- . Fix FTP HELP to override unverbose setting.  ckcftp.c.
- . Fix assorted minor typos.
-
-From Matthias Kurz: automatic herald generation for NetBSD 2.0 and later,
-"make netbsd2".  ckuver.h, makefile, 12 Jun 2005.
-
-Added SET TERMINAL LF-DISPLAY, like CR-DISPLAY but for linefeed rather than
-carriage return.  ckuusr.h, ckuus[257x].c, 12 Jun 2005.
-
-Made a command-line option --unbuffered to do what the -DNONOSETBUF
-compile-time option does, i.e. force unbuffered console i/o.  Unix only.
-ckuusr.h, ckuusy.c, ckutio.c, 12 Jun 2005.
-
-Fixed getiact() (which displays TERM IDLE-ACTION setting) to display
-space as \{32}.  ckuus7.c, 12 Jun 2005.
-
-Added LMV as a synonym for LRENAME, which is itself a synonym for LOCAL
-RENAME.  ckuusr.c, 12 Jun 2005.
-
-Put HELP SET TERMINAL DG-UNIX-MODE text where it belonged.  ckuus2.c,
-12 Jun 2005.
-
-Added IF LINK (Unix only) to test if a filename is a symlink.  Uses the most
-simpleminded possible method, calls readlink() to see if it succeeds or fails.
-No other method is dependable across different Unixes.  This code should be
-portable because I already use readlink() elsewhere within exactly the same
-#ifdefs.  ckufio.c, ckuus2.c, ckuus6.c, 12 Jun 2005.
-
-Fixed a bug in which \fdir() wouldn't work when its argument was the nonwild
-name of a directory file.  zxpand(): ckufio.c, 12 Jun 2005.
-
-Made \fdirectory() a synonym for \fdirectories().  Made \fdir() an
-acceptable abbreviation for these, even though it clashes with \fdirname(),
-which still works as before.  ckuus4.c, 12 Jun 2005.
-
-Added the long-needed \flopx() function, to return rightmost pieces of
-strings, such as file extensions.  \fstripx() and \flopx() are the
-orthogonal functions we need to pick filenames apart from the right:
-\stripx(foo.tar.gz) = foo.tar; flopx(foo.tar.gz) = gz.  ckuusr.h, ckuusr.c,
-ckuus2.c, 12 Jun 2005.
-
-Removed reference to defunct fax number, ckcmai.c, 12 Jun 2005.
-
-Added -DHAVE_PTMX to linux+krb5+openssl+zlib+shadow+pam.  From Timothy Folks.
-makefile, 12 Jun 2005.
-
-Built on Solaris 9 and NetBSD 2.0.
-
-From Jeff: New build target for Mac OS X 10.3 with Kerberos 5 and SSL.
-makefile, 14 Jun 2005.
-
-Fixed error in ckuver.h NetBSD #ifdefs.  15 Jun 2005.
-
-Fixed SET TERMINAL IDLE-ACTION OUTPUT to work as documented, namely if the
-output string is empty, to send a NUL.  Previously there was no way to make
-it send a NUL.  ckuus7.c, 15 Jun 2005.
-
-Suppose (in Unix, for example) a filename contains wildcard characters, such
-as {abc}.txt.  When referring to such a file (e.g. in a SEND command), these
-characters can be quoted, e.g. \{abc\}.txt.  But if the file list has been
-obtained programmatically, e.g. stored in an array, there is no way, short
-of tedious, complicated, and error-prone string processing, to reference the
-file.  For this we need a way to disable wildcard processing.  I added { ON,
-OFF } choices for the SET WILD and SHOW FILE commands: ckuusr.h, ckuus[234].c.
-{ ON, OFF } turns wildcarding off and on without affecting the { KERMIT,
-SHELL } agent choice; it does this by setting a new and separate global
-variable, wildena.  Added semantics to ckufio.c.  Crude but effective.  It
-might have been more Unixlike to add Yet Another form of quoting but we
-have enough of that already (later maybe I'll add a \function() for this).
-Needs to be propogated to Windows and VMS.  15 Jun 2005.
-
-Improved and fixed typos in HELP WILDCARD and HELP PATTERN.  ckuus2.c,
-15 Jun 2005.
-
-The GREP command, and probably anything else that uses ckmatch() for pattern
-matching, failed on patterns like */[0-3]*.html.  The [a-b] handler, when
-failing to match at the current position, neglected to back up the pattern
-and try again on the remainder of the string.  I also fixed another case, in
-which matching a literal string a*b?c against the pattern a[*?]*[?*]c caused
-ckmatch() to recurse until it blew up.  ckclib.c, 16 Jun 2005.
-
-Added builds and designer banner for Solaris 10.  makefile, ckuver.h,
-27 Jun 2005.
-
-Defined CKHTTP for NetBSD, the HTTP code builds and works fine there.
-ckcdeb.h, 2 Jul 2005.
-
-Added #ifndef OSF40..#endif around definition of inet_aton() in ck_ssl()
-to allow building in Tru64.  Added tru64-51b+openssl to makefile.
-15 Jul 2005.
-
-HTTP GET would fail if the URL contained any metacharacters, no matter how
-much you quoted them.  Although it uses cmfld() to parse the (partial) URL,
-it then uses cmofi() to get the output filename, which by default is the
-"filename" from the URL, which might be something like "rankem.asp?id=1639".
-cmofi() refuses to accept unquoted metacharacters in "filenames" and that's
-what happens in this case if the output filename is not specified.  Worked
-around this by disabling wildcard processing around HTTP GET using the new
-"wildena" variable from June 15th.  ckuusr.c, 18 Jul 2005.
-
-Fixed the June 16th fix to the pattern matcher.  I fixed a real problem, but
-I made an unrelated optimization that introduced new ones.  ckclib.c,
-18 Jul 2005.
-
-Added missing help text for \fb64encode() and \fb64decode().  ckuus2.c,
-18 Jul 2005.
-
-Changed SET WILD OFF help text to warn that this setting prevents the
-creation of backup files (later I'll have to see if something more useful
-can be done about this).  ckuus2.c, 18 Jul 2005.
-
-Built OK on Mac OS X 10.4.2 using macosx103 target (but with some
-"signedness" warnings in ckcnet.c and ckcftp.c).  Built on Unixware 7.1.4
-with uw7 target.  27-28 Jul 2005. 
-
-Added -DCKHTTP to Mac OS X 10.3-.4 KFLAGS.  Makefile, 4 Aug 2005.
-
-Built on BSDI 4.3.1.  Added -DCKHTTP.  
-
-Compact substring notation extended to accept not only start:length but also
-start-end notation.  Thus \s(foo[12:18]) means the substring of foo starting
-at position 12 of length 18, and tne new \s(foo[12-18]) means the substring
-of foo starting at position 12 and ending with position 18.  Ditto for
-\:(\%a), etc.  ckuus4.c, 9 Aug 2005.
-
-See correspondence with Mark Sapiro, Nov 2003 and Sep 2004, about certain
-variations on IF syntax having been broken by the introduction of "immediate
-macros" circa 1999.  It seems the problem -- variables not being expanded --
-always occurs in the ELSE part when (a) the IF condition is false; (b) the
-ELSE command is "standalone", i.e. expressed as a separate command after the
-IF command (original C-Kermit 5A syntax), and (c) its command list is a block.
-This would suggest the problem is in the XXELS parser.
-
-Going back to 1999, I find this:
-  Fixed a problem Jim Whitby noticed with quoting in ELSE statements.  This
-  problem was introduced when I unified IF and XIF, and occurs only when
-  ELSE begins on a line, followed by a { command list } rather than a single
-  command.  The solution (gross) was to make a special version of pushcmd()
-  (called pushqcmd()) for this situation, which doubles backslashes while
-  copying, BUT ONLY IF it's a command list (i.e. starts with "{"); otherwise
-  we break lots of other stuff.  Result passes Jim's test and still passes
-  ckedemo.ksc and iftest.ksc.  ckucmd.c, ckuus6.c, 27 Sep 99.
-
-I undid this change and it made no difference to all the other IF
-constructions (in fact, it fixed an urelated one that was broken, so now
-iftest scores 54 out of 54, instead of 53).  However, it does not fix the
-ELSE problem; in fact it pushes it all the way in the other direction:
-
-  The opposite occurs any time you try to execute an immediate macro inside a
-  macro or any other { block }: not only is the variable evaluated, it is
-  evaluated into nothing.  It looks like this happens only in immediate
-  macros, i.e. *commands* that start with '{'.  So maybe we really have two
-  isolated problems, that can each be fixed.
-
-The situation is illustrated by this simple script:
-
-  def xx {
-      if false { echo \%1, echo \%2 }
-      else { echo \%3, echo \%4 }
-  }
-  xx one two three four
-
-With pushqcmd() it echoes the variable names literally; with pushcmd() it 
-echoes empty lines.  Since ELSE, when its argument is a block, dispatches
-to the immediate-macro handler, it seems we have unified the two problems,
-so fixing one should fix the other.
-
-The problem is that we define a new temporary macro and then call dodo() to
-execute it.  But if the definition contains macro arguments, we have added a
-new level of macro invocation, thus wiping out the current level of args.
-The cure is to expand the variables in the immediate macro in the current
-context, before executing it.  This means simply changing the cmtxt() call
-that reads the immediate macro to specify xxsting as its processing
-function, rather than NULL, which is used for real macros to defer their
-argument evaluation until after the macro entered.  ckuusr.c, 11 Aug 2005.
-
-Added a new makefile target, macosx10.4, for Mac OS X 10.4.  This one uses
-an undocumented trick to get the otherwise unavailable-except-by-clicking
-Mac OS X version number (in this case 10.4.2) and stuff it into the HERALD
-string.  makefile, 11 Aug 2005.
-
-Built OK on Solaris 9, Solaris 10 (with a few implicit declaration warnings
-in ckuusx.c), Mac OS X 10.4.2 (with some warnings in ckcnet.c and ckcftp.c),
-Mac OS X 10.3.9 (also using the macos10.4 entry, which gets the right
-version number, and gets no warnings at all), RH Enterprise Linux AS4 on AMD
-x86_64, Tru64 Unix 4.0F, SCO UnixWare 7.1.4
-
-For docs and/or scriptlib:  Unix C-Kermit can be a stdin/out filter.  The
-trick is to use the ASK, ASKQ, or GETC command for input, specifying no
-prompt, and ECHO or XECHO for output, e.g.:
-
-while true {
-    ask line
-    if fail exit 0
-    echo \freverse(\m(line))
-}
-exit 0
-
-FOPEN didn't do anything with the channel number if the open failed, so any
-subsequent command that tried to reference it would get a parse error it was
-undefined or non-numeric, not very helpful.  Changed FOPEN to set the
-channel number to -1 if the file can't be opened.  Now subsequent operations
-on the channel fail with "Channel -1: File not open".  I also added two
-magic channel numbers: -8 means that any FILE command (besides OPEN and
-STATUS) on that channel is a noop that succeeds silently; -9 is a noop that
-fails silently.  So now it's possible to simply set a channel number to one
-of these values to disable i/o to certain file without getting lots of error
-messages.  dofile(): ckuus7.c, 12 Aug 2005.
-
-Added automatic herald construction for UnixWare 7.  makefile, 12 Aug 2005.
-
-Unix isdir() never allowed for arguments that started with tilde, so gave
-incorrect results for ~/tmp/ or ~fdc.  The problem was mainly invisible
-since most commands that parsed file or directory names used cmifi(), cmdir(),
-etc, which did the conversions themselves.  But IF DIRECTORY was an exception,
-since its operand had to be treated as just text, and then tested after it
-was parsed.  ckufio.c, 13 Aug 2005.
-
-Fixed the following:
-"ckuusx.c", line 8959: warning: implicit function declaration: ckgetpeer
-"ckufio.c", line 1869: warning: implicit function declaration: ttwait
-"ckufio.c", line 2941: warning: implicit function declaration: mlook
-"ckufio.c", line 2943: warning: implicit function declaration: dodo
-"ckufio.c", line 2944: warning: implicit function declaration: parser
-"ckcftp.c", line 2625: warning: implicit function declaration: delta2sec
-"ckcftp.c", line 4071: warning: no explicit type given for parameter: prm
-"ckcftp.c", line 8389: warning: no explicit type given for parameter: brief
-ckuusx.c, ckufio.c, ckcftp.c, ckucmd.h.  13 Aug 2005.
-
-Unbuffered stdout code has never worked because the setbuf(stdout,NULL) call
-has to occur before the stdout has been used.  The reason it's needed is
-that some Kermit code writes to stderr (which is unbuffered) and other code
-writes to stdout, and therefore typescripts can come out jumbled.  Robert
-Simmons <robertls@nortel.com> provided the needed clue when he insisted it
-worked only when executed at the very beginning of main().  So I moved the
-code to that spot.  But since now we also want to make unbuffered a runtime
-(command-line) option, I had to do a clunky by-hand pre-prescan inline in
-main() to look thru argv[], even before prescan() was called.  ckcmai.c,
-ckutio.c, ckuusy.c, 13 Aug 2005.  (Now that this works, it might be a good
-idea to remove all use of stderr from Kermit.)
-
-Managed, after some finagling, to build a 64-bit version on Solaris 10 at
-Utah Math with Sun cc.  (Can't make any gcc builds at all, 32- or 64-bit,
-they all blow up in <sys/siginfo.h>.)  New target: solaris10_64.  makefile,
-15 Aug 2005.
-
-The 64-bit Solaris 10 version compiles and links OK and transfers files in
-remote mode.  It can make FTP connections and use them, but Telnet connections
-always fail with "network unreachable".  This is with all default libs and
-include files.  Nelson has a separate set in /usr/local, which he references
-explicitly in all his 64-bit builds, but using these makes no difference.
-Some data type is wrong in ckcnet.c.  But telnet works fine in 64-bit Linux
-and Tru64 builds.  Debug logs trace the difference to netopen() (of course),
-the spot where we test the results of inet_addr(), which is already marked
-suspicious for 64-bit builds.  It seems that inet_addr() is of type in_addr_t,
-which in turn is u_int32, i.e. an unsigned 32-bit int.  Yet the man page says
-that failure is indicated by returning -1.  I guess this doesn't matter in
-32-bit builds, but in the 64-bit world, the test for failure didn't work
-right.  I made a Solaris-specific workaround, and checked that it works in
-both 32-bit and 64-builds.  I really hate typedefs.  ckcnet.c, 15 Aug 2005.
-
-Changed the plain-text version (as opposed to the popup or GUI version - the
-GUI version, at least, already does this) of ASKQ to echo keystrokes
-asterisks rather than simply not echo anything, so it's easier to see what
-you're doing, the effects of editing, etc.  Experimental; for now, there's
-no way to disable this.  Not sure if there needs to be.  Anyway, to get this
-working required a fair amount of cleaning up of gtword(), which was echoing
-different ways in different places.  ckuus6.c, ckucmd.c, 15 Aug 2005.
-
-Added a solaris9_64 target for building a 64-bit version on Solaris 9 with
-Sun cc.  Verified, using the DIR command and \fsize() function on a 4.4GB
-file, that the Solaris 64-bit version of Kermit gets the size correctly, and
-that it can copy such a file (thus its fopen/fread/fwrite/fclose interface
-works right).  Initiated a large-file transfer between here and Utah over
-SSH and verified that it puts the correct file size in the A packet when
-sending; the right quantites are shown on the file transfer display (file
-size CPS, percent done, etc).  But even at 5Mb/sec, it takes a good while to
-transfer 4.4GB, more than 2 hours (not streaming; 30 window slots, 4K
-packets, maybe it would go faster with streaming)...  After an hour or so,
-it filled up the partition and gave up (gracefully) before it reached the
-2GB frontier (drained its pending packets, closed the partial file).
-Restarted at 12:54, this time with streaming and 8K packets (the speed
-wasn't significantly different).  This time it transferred 95% of the file
-(4187660288 bytes) before failing because the disk filled up.  Went to Utah
-and started a transfer between two Solaris 10/Sparc hosts; this goes about 8
-times faster.  The transfer completed successfully after 17m41s.  All fields
-in the f.t. display looked right the whole time.  Then I verified various
-other 64-bit combinations transferring the same 4.4GB file:
-
-        To................
-  From  Sol  Amd  i64  Tru      
-  Sol   OK   OK   OK   OK      Sol = Solaris 10 / Sparc
-  Amd   OK                     Amd = AMD x86_64 RH Enterprise Linux AS4
-  i64   OK                     i64 = Intel IA64, RH 2.1AS
-  Tru                          Tru = Tru64 Unix 4.0F Alpha
-
-(The other combinations are difficult to test for logistical reasons.)
-
-Tried sending the same long file with Kermit's FTP client.  It chugged along
-for a while until I stopped it; it would have taken hours to complete.
-There is no indication that it wouldn't have worked, assuming the FTP server
-could also handle long files, which who knows.  Anyway, Kermit showed all
-the right data on the display screen.  17 Aug 2005.
-
-On AMD x86_64 and IA64 native 64-bit Linux builds, the pty routines did not
-work at all.  ptsname() dumped core.  If I commented out ptsname(), then the
-next thing dumped core.  The same code works on the other 64-bit builds.
-Poking around, I see that this version of Linux has an openpty() function,
-which I could try using instead of the current API -- grantpty(), etc.  Then
-I see that openpty() is already coded into Kermit's pty module,
-conditionalized under HAVE_OPENPTY, which has never before been defined for
-any build.  I added a test to the makefile linux target (look for the
-openpty() prototype in <pty.h>, if found define HAVE_OPENPTY as a CFLAG and
-also add -lutil to LNKFLAGS).  Works fine on the problem builds, and also
-on previously working 32-bit builds.  makefile, 17 Aug 2005.
-
-Fixed a bug in the ASKQ echo asterisks code, which made the VMS version of
-C-Kermit always echo asterisks.  Turns out that some code in the main parse
-loop to reset command-specific flags was in the wrong place, which had other
-effects too, for example ASKQ temporarily turns off debug logging as a
-security measure, but the code to turn it back on was skipped in most cases.
-Some other side effects related to the DIRECTORY and CD commands might have
-been possible but I haven't seen them.  ckuus[56].c, 23 Aug 2005.
-
-Problem reported when sending a file to VMS when the name in the F packet
-starts with a device specification and does not include a directory field,
-and PATHNAMES are RELATIVE.  Example: dsk:foo.bar becomes f_oo.bar.  The
-code assumes that if there is a device field, it is followed by a directory
-field, and it inserts a dot after the '[', which in this case is not there.
-Later the dot becomes '_' because of the only-one-dot rule.  Solution: only
-insert the dot if there really is an opening bracket.  nzrtol(): ckvfio.c,
-23 Aug 2005.
-
-A report on the newsgroup complains that C-Kermit and K95 servers were
-sending REMOTE DIR listings with only #J line terminators, rather than #M#J.
-Yet all the other REMOTE xxx responses arrived with #M#J.  snddir() was
-neglecting to switch to text mode.  ckcfns.c, 26 Aug 2005.
-
-Back to long files.  What happens if 32-bit Kermit is sent a long file?
-It gets an A-packet that looks like this:
-
-  ^A_"A."U1""B8#120050815 18:28:03!'42920641*4395073536,#775-!7@ )CP
-
-The 32-bit receiver reacts like so:
-
-  gattr length[4395073536]=100106240
-
-the first number being the string from the A-packet, the second being the
-value of the long int it was converted to by atol().  Clearly not equal in
-this case.  When this happens Kermit should reject the file instead of
-accepting it and then getting a horrible error a long time later.  Added
-code to gattr() to convert the result of atol() back to a string and compare
-it with the original string; if they're not equal, reject the file on the
-assumption that the only reason this could happen is overflow.  Also some
-other code in case the sender sends the only LENGTHK attribute.  Now files
-whose lengths are too big for a long int are rejected right away, provided
-the sender sends the length in an A packet ahead of the file itself.  If
-this new code should ever cause a problem, it can be bypassed with SET
-ATTRIBUTE LENGTH OFF.  ckcfn3.c, 26 Aug 2005.
-
-As I recall from when I was testing this a few weeks ago, when the too-big
-length is not caught at A-packet time, the transfer fails more or less
-gracefully when the first attempt is made to write past the limit.  I went
-to doublecheck this by sending a big file from the 64-bit Solaris10 version
-to a 32-bit Mac OS X version that does not have today's code.  The Mac
-thinks the incoming file is 2GB long when it's really 4GB+.  But in this
-case, something new happens!  Although the percent done and transfer rate go
-negative, the file keeps coming.  It would seem that Mac OS X lets us create
-long files without using any special APIs.  The transfer runs to completion.
-Mac OS X Kermit says SUCCESS (but gets the byte count and cps wrong, of
-course).  But then a STATUS command says FAILURE.  The file was, however,
-transferred successfully; it is exactly the same length and compares byte
-for byte with the original.  This tells me that in the Mac OS X version --
-and how many others like it??? -- today's rejection code should not be
-enabled.  Meanwhile I put today's new code in #ifndef NOCHECKOVERFLOW..#endif,
-and defined this symbol in the Mac OS X 10.4 target.  Over time, I'll have
-to find out what other platforms have this characteristic.  And of course
-I'll also have to do something about file-transfer display, statistics, and
-status.  makefile, ckcfn3.c, 26 Aug 2005.
-
-From now on I'm going to bump the Dev.xx number each time I upload a new
-ckdaily.  This one will be Dev.02.  ckckmai.c, 26 Aug 2005.
-
-Got rid of all the extraneous FreeBSD 4 and 5 build targets.  Now there's
-one (freebsd) for all FreeBSD 4.1 and later.  makefile, 27 Aug 2005.
-
-Mac OS X 10.4 (Tiger) is a 64-bit OS.  Building C-Kermit 0n 10.4.2 without
-any special switches stilll gives a 32-bit executable.  Ditto building with
--mpowerpc64.  Further investigation turned up a tip sheet on MySQL that says
-you have to include all of these: -mpowerpc64 -mcpu=G5 -mtune=G5 -arch
-ppc64.  That did the trick.  New makefile target: macosx10.4_64.  But the
-10.4.2 system I tried did not have 64-bit [n]curses or resolv libs, so this
-build has no -DNOCURSES -DNO_DNS_SRV.  makefile, 27 Aug 2005.
-
-Created a symbol CK_64BIT to indicate true 64-bit builds at compile time.
-Added 64-bit announcement to the startup herald and the VERSION text.
-ckcdeb.h, ckuus[r5].c, 27 Aug 2005.
-
-Added a built-in variable \v(bits) to indicate the size of the build
-(16, 32, 64, or whatever else sizeof() might report).  ckuusr.h, ckuus4.c,
-27 Aug 2005.
-
-Got rid of all the warnings in 64-bit Mac OS X about args to getsockopt(),
-getsockname(), and getpeername(), and the comparisons on the return value
-of inet_addr().  ckcnet.[ch], 27 Aug 2005.
-
-Now to check the effects on other builds...
-  Linux on AMD64: ok.
-  Linux on IA64: ok.
-  Linux on i386: ok.
-  Mac OS X 10.3.9 32-bit: ok.
-  Solaris 10 64-bit: ok.
-  Solaris 9 32-bit: ok.
-  Tru64 4.0F: ok.
-  FreeBSD 4.11: ok.
-  FreeBSD 5.4 ia64 (64-bit): ok.
-  FreeBSD 5.4 i386 (32-bit): ok.
-
-The Tru64 5.1B build totally blew up because they have their own unique
-sockopt/etc length-argument data type (int!), so I had to roll back on using
-socklen_t for this in all 64-bit builds.  Checked to make sure it still
-builds on Tru64 4.0F after this change (it does).  ckcnet.h, 27 Aug 2005.
-
-The HP-UX 11i/ia64 build comes out to be 32-bit but thinks it's 64-bit.
-CK_64BIT is set because __ia64 is defined.  So how do I actually make a
-64-bit HP-UX build?  I tried adding +DD64 to CFLAGS, and this generates
-64-bit object files but linking fails to find the needed 64-bit libs
-(e.g. -lm).  For now I added an exception for HPUX to the CK_64BIT
-definition section.  ckcdeb.h, 27 Aug 2005.
-
-Took the time to verify my recollection about the "graceful failure" on a
-regular Pentium Linux system when receiving a too-big file...  OK, it's not
-exactly graceful.  It gets a "File size limit exceeded" error; the message
-is printed in the middle of the file-transfer display, apparently not by
-Kermit, and Kermit exits immediately.  Looks like a trap...  Yup.  "File
-size limit exceeded" is SIGXFSZ (25).  What happens if we set it to SIG_IGN?
-Just the right thing: The receiver gets "Error writing data" at 2147483647
-bytes, sends E-packet to sender with this message, and recovers with total
-grace (drains packet buffers, returns to prompt).  ckutio.c, 27 Aug 2005.
-
-Backed off from rejecting a file because its announced size overflows a
-long.  Now instead, I set the file size to -2 (a negative size means the
-size is unknown, but we have always used -1 for this; -2 means "unknown and
-probably too big").  In this case, the f-t display says:
-
-  File Size: POSSIBLY EXCEEDS LOCAL FILE SIZE LIMIT
-
-then the user can interrupt it with X or whatever, or can let it run and
-see if maybe (as in the case of Mac OS X) it will be accepted anyway.  This
-way, we skip all the bogus calculations of percent done, time remaining, etc.
-ckcfn3.c, ckuusx.c, 27 Aug 2005.
-
-Discovered that VMS C-Kermit on Alpha and IA64 is a 32-bit application;
-sizeof(long) == sizeof(char *) == 4.  Tried adding /POINTER_SIZE=64 to VMS
-DECC builds on Alpha and IA64, but the results aren't great.  Tons of
-warnings about pointer size mismatches between Kermit pointers and RMS ones,
-and the executable doesn't run.  It appears that access to long files
-would require a lot of hacking, similar to what's needed for 32-bit Linux.
-
---- Dev.02: 27 Aug 2005 ---
-
-From Jeff, 28 Aug 2005.
- . Fix SSH GLOBAL-KNOWN-HOSTS-FILE / USER-KNOWN-HOSTS-FILE parsing, ckuus3.c.
- . Pick up K95STARTFLAGS from environment, ckuus4.c.
- . Fix some typos in command-line processing (-q), ckuus4.c.
- . Be sure to suppress herald if started with -q, ckuus7.c.
- . Fix ssh command-line switches, ckuusy.c.
-
-Eric Smutz complained that HTTP POST was adding an extraneous blank line,
-which prevented his application from successfully posting.  RFC 2616 states
-(in Section 4.1):
-
-   In the interest of robustness, servers SHOULD ignore any empty
-   line(s) received where a Request-Line is expected. In other words, if
-   the server is reading the protocol stream at the beginning of a
-   message and receives a CRLF first, it should ignore the CRLF.
-
-   Certain buggy HTTP/1.0 client implementations generate extra CRLF's
-   after a POST request. To restate what is explicitly forbidden by the
-   BNF, an HTTP/1.1 client MUST NOT preface or follow a request with an
-   extra CRLF.
-
-This seems pretty clear.  One section of code in http_post() (just above the
-postopen: label) was appending a CRLF to a buffer whose last already was
-terminated by CRLF, and then appended a second CRLF; thus two empty lines.
-I removed the second one.  ckcnet.c, 28 Aug 2005.
-
-I looked into the 64-bitness of NetBSD, it seems to be like Linux and
-FreeBSD on 64-bit hardware, i.e. you just build it there and it works, at
-least on Alpha and AMD64, going back to NetBSD 1.4 or 1.5.  But I don't have
-access to any of these for verification and documentation on the Web is
-scanty.
-
-Checked PeterE's complaint again of warnings in ckutio.c about parameter
-list of get[ug]id() and gete[ug]id().  When I "make hpux1100o" on HP-UX
-11.11 (PA-RISC), there are definitely no warnings.  He says the same thing
-happens on 10.xx, but I don't have access to that any more.  I also did
-"make hpux1100o" on HP-UX 11.23 (11i v2) (PA-RISC), also no warnings.
-(Except in both cases, a warning about a comment within a comment in
-/usr/include/sys/ptyio.h).  On HP-UX 11i v2 on Itanium, however, there are
-TONS of warnings, mostly of the "variable set but never used" kind.  Also
-"dollar sign used in identifier".  Tracking this last one down, I see it's
-complaining about code that's in #ifdefs for other platforms, such as
-Apollo Aegis.  Is "aegis" defined in HP-UX 11i v2/IA64?  No!  (It would show
-up in SHOW FEATURES if it was.)  Some phase of the compiler is complaining
-about code that it should be skipping (and that, in fact, it *is* skipping
-it because the build is successful).  It's as if cc is running lint for me
-but not telling lint which macros are defined and which are not.
-
-Verified that 64-bit linking fails in the same way for HP-UX 11i v2 on both
-IA64 and PA-RISC.  Sent a query to HP.
-
-Compiling ckcnet.c and ckcftp.c got the familiar sockopt-related warnings on
-HP-UX 11i v2; turns out it is just like Tru64 Unix in using an int for the
-length argument.  Added another special case and the warnings went away.
-ckcnet.h, 28 Aug 2005.
-
-Added some stuff to SHOW FEATURES to see what kinds of macros are exposed
-(e.g. INT_MAX, LONG_MAX, LLONG_MAX, etc) and also show sizeof(long long) and
-sizeof(off_t).  Building this code all over the place will give me an idea
-of how widespread these data types are, and to what extent I can tell
-whether they are available from clues in the header files.  (At first
-glance, it appears that I'm not picking up <limits.h>, but adding an
-#include for it is just asking for trouble.)  No complaints about long long
-or off_t from Solaris 9 or recent Linuxes.  ckuus5.c, 28 Aug 2005.
-
-Fixed a warning in HP-UX 10 and 11 stemming from some old-style prototypes
-in ckutio.c for get[re][gu]id().  ckutio.c, 29 Aug 2005.
-
-Updated minix3 target from Andy Tanenbaum.  makefile, 29 Aug 2005.
-
-PeterE confirms that "long long" and off_t are available in all HP-UX 10 and
-11, and in HP-UX 9 on PA-RISC but not Motorola.  30 Aug 2005.
-
-Got 64-bit builds to work on HP-UX.  According to my notes, John Bigg of HP
-said (in 1999) that HP-UX 10.30 and later require PA-RISC 1.1, and do not
-work on PA-RISC 1.0.  But is PA 1.0 64-bit or what?  Today, Alex McKale of
-HP said "The 64-bit binaries will work on all machines that have the same or
-later release of HP-UX (excluding PA-RISC 1.1 machines)".  Still need
-clarification...  Maybe it's that all IA64 builds can be 64-bit but I need
-dual builds for PA-RISC.  Meanwhile I started transfer of a 4GB+ file from
-Solaris to HP-UX 11i but it exceeded some quota on the HP long before it
-approached the 2G point.  It failed cleanly and up until then it was working
-fine (numbers, stats, etc).  30 Aug 2005.
-
-Support of large files in 32-bit builds began in 10.20.  64-bit application
-support began in 11.00, but not all machines that run 11.00 support 64 bits.
-About long files, see HP /usr/share/doc/lg_files.txt.
-
-PeterE found that certain patterns can still make Kermit loop; example:
-
-  if match T01011-00856-21-632-073 *[abc] { echo GOOD } else { echo BAD }
-  if match T01011-00856-21-632-073 *[a-z] { echo GOOD } else { echo BAD }
-
-The minimum offending pattern is * followed immediately by an [xxx]
-construction, followed by anything else, including nothing.  Previous
-versions of Kermit handled this one correctly, without looping (but failed
-certain matches that should have succeeded).  The new section of code I
-added on 15 June, upon failure to match, advances the string pointer and
-backs up the pattern to the previous pattern, and starts again
-(recursively).  However, there needed to be a corresponding check at entry
-for an empty target string.  ckmatch(): ckclib.c, 12 Sep 2005.
-
-PeterE discovered that "kermit -y filethatdoesnotexit" gives an erroneous
-error message that names the user's customization, rather than the name
-given on the command line.  doinit(): ckuus5.c, 12 Sep 2005.
-
-FREAD does not get an error if it tries to read a record or file or piece of
-file that is too big for its buffer.  In particular, FREAD /SIZE:xxx seems
-to succeed even if less than xxx was read.  It should fail unless, perhaps,
-it successfully read up to the end of the file.  Furthermore, if xxx is
-bigger than the file buffer size, it should complain.  The buffer is
-line[LINBUFSIZ], 32K.  The lack of failure was due to code in dofile() that
-adjusted the given size silently if it was greater than the buffer size,
-which I removed, and also added a check when parsing the /SIZE: switch.
-dofile(): ckuus7.c, 12 Sep 2005.
-
-That still didn't help with FREAD /SIZE:n returning less than n bytes, even
-when they were available.  That's because the underlying routine, z_in(),
-didn't check fread()'s return code, which is the number of bytes read.
-If fread() has smaller buffers, it needs to be called in a loop.  z_in():
-ckuus7.c, 12 Sep 2005.
-
-Flen() fails on strings of length 8192 or more.  The limitation is in the
-callers of zzstring, which seem to be specifying an 8K buffer, in this case
-fneval().  The operable symbols are FNVALL (max length of value returned by
-a function) and MAXARGLEN (maximum length of an argument to a function).  I
-changed both of these for BIGBUFOK builds to be CMDBL.  Buffers can never be
-infinite, there has to be a limit.  It's important to make everything work
-consistently within that limit, and to make something useful happen when the
-limit is exceeded.  At this point, I can probably also increase the limits
-for modern 32-bit systems, and certainly for 64-bit ones.  Also there's no
-point in worrying about 16-bit platforms any more; earlier C-Kermit versions
-can still be used on them if necessary. ckuusr.h, 12 Sep 2005.
-
-Special #ifdefs for finding resolv.h and nameser.h in MINIX3 from Andy
-Tanenbaum.  ckcnet.c, 20 Sep 2005.
-
-PeterE noticed that ckmatch(), even though it works pretty well now, does a
-lot of extra and unnecessary recursion after determining the string and
-pattern do not match, at least when the pattern is of the form *[abc].
-After several false starts I was able reduce this effect to a minor level
-(but not eliminate it all together) by changing a while loop into a do loop.
-ckmatch(): ckclib.c, 15 Oct 2005.
-
-Added -DNOLONGLONG to HP-UX 8.00 and earlier builds, and to Motorola-based
-HP-UX 9.00 builds.  This is simply to inhibit the test for whether "long
-long" is supported by the compiler, since when it isn't, the module
-containing the test won't compile.  makefile, ckuus5.c, 16 Oct 2005.
-
-Making ASKQ always echo askterisks is a bad idea, because when it doesn't
-echo, it's the perfect way to read silently from stdin, e.g. in a CGI script
-(INPUT can also be used for this but it's not as straightforward).  So I put
-the default for ASKQ back to no echoing, then gave ASKQ its own switch
-table, which is the same as for ASK with the addition of an /ECHO:x switch,
-which tells what character to echo.  ckucmd.c, ckuus[26].c, 17 Oct 2005.
-
-Fixed a bug in FTP GET /COMMAND filename commandname; it always dumped core
-dereferencing a null string (the nonexistent local asname).  ckcftp.c,
-17 Oct 2005.
-
-For docs: if you don't like the funny business that happens when you type
-an IF command at the prompt, use XIF instead and it won't happen.  Also note
-that commands like "if xxx { echo blah } else { echo blah blah }" don't
-work when typed at the prompt; you have to use XIF for this. 
-
-Back to ckmatch()...  Under certain conditions (e.g. patterns like *[abc])
-failure to match would not stop the recursion because the string and pattern
-arguments are on the stack, as they must be, so there was no way for level
-n-1 to know that level n had detected a definitive nonmatch and that no
-further attempts at matching were required.  The right way to handle this is
-to recode the whole thing as coroutines, the cheap way out is with a global
-static flag.  Works perfectly, in the sense that the match.ksc test results
-are identical to what they were before and the extra backing up and
-recursion are eliminated.  (The Oct 15th fix wasn't really a fix, it broke
-a couple of cases.)  ckclib.c, 20 Oct 2005.
-
-ckuus7.c(2987): warning #267: the format string requires additional arguments
-(in PURGE command); fixed 20 Oct 2005.
-
-From Andy Tanenbaum, final changes for MINIX3: #ifdef out the inline
-definitions for gettimeofday() and readlink().  ckutio.c, 23 Oct 2005.
-
-From Jeff: struct gss_trials initializers changed from gss_mech_krb5 to
-ck_gss_mech_krb5.  ckcftp.c, 23 Oct 2005.
-
-From Jeff: some improvements to K95 GUI SHOW TERMINAL.  ckuus5.c, 23 Oct 2005.
-
-Found and corrected some misplaced #ifdefs in shofeat(), ckuus5.c, 23 Oct 2005.
-
---- Dev.03 ---
-
-Fixed a compiler warning in a debug() statement in zzstring() by adding
-parens.  ckuus4.c, 24 Oct 2005.
-
-Added -DNOLONGLONG to sv68r3v6 target, makefile, 25 Oct 2005.
-
-New makefile targets for HP-UX from PeterE to handle the 'long long'
-situation.   26 Oct 2005.
-
-From Jeff: changes to support OpenSSL 0.9.8, ck_ssl.h.  ckcasc.h has had
-short names defined for ASCII control characters for 20-some years but now
-they are causing conflicts, so EM becomes XEM (also for OpenSSL 0.9.8).
-Changed K95's default terminal type from VT320 to VT220 because VT320
-termcaps/terminfos are disappearing from Unix hosts: ckuus7.c.  Reorganize
-the data-types section of SHOW FEATURES to add more macro tests for integral
-sizes and to provide for the proper printf formatting in order to allow the
-sizes to be output ("You are going to need to be careful because %llx is not
-supported on all platforms.  On Windows, it is the same as %lx, 32 bits"):
-ckuus5.c, 26 Oct 2005.
-
-Defined NOLONGLONG ckcdeb.h for various old platforms where we know we are
-never going to need 64-bit ints (even if they support a long long datatype,
-chances are pretty slim they supported 64-bit file sizes).  ckcdeb.h,
-26 Oct 2005.
-
-PeterE noticed that GOTO targets can only be 50 characters long.  This was
-by design, a long time ago, on the assumption that nobody would make longer
-labels.  But in SWITCH statements, case labels can be variables that expand
-to anything at all.  If we chop them off at 50, we might execute the wrong
-case.  Changed the maximum label size to be 8K, and added code to dogoto()
-to check when a label or target is too long and fail, to prevent spurious
-GOTO or SWITCH results.  ckuusr.h, ckuus[r6].c, 26 Oct 2005.
-
-Testing revealed there was still a problem with SWITCH case labels that were
-variables that expanded into long strings.  Turns out that I was being
-too clever when I decided that, if the SWITCH macro was n1 characters long
-and the case-label search target was n2 characters long, I only had to
-search the first n1-n2+1 characters of the macro definition.  That was true
-before I allowed case labels to be variables, but not any more!  Fixed in
-dogoto(): ckuus5.c, 26 Oct 2005.
-
---- Dev.04 ---
-
-Dev.04 didn't actually contain Jeff's data-type changes to shofeat(),
-I think I saved the wrong buffer in EMACS...  Fixed now.  27 Oct 2005.
-
-PeterE corrected a typo in the HP-UX 7.00 makefile target.  27 Oct 2005.
-
-PeterE had been reporting problems stress-testing the new SWITCH code, but
-only on HP-UX 9, primarily stack overrun.  Turns out to be the HP-UX 9
-optimizing compiler's fault.  No optimization, no problems.
-
-PeterE found that even when dogoto() detects a string that is too long
-and fails, this does not stop SWITCH from producing a result, which can not
-possibly be trusted.  Changed the part of dogoto() that handles this to
-not just fail, but also to exit the script immediately and return to top
-level.  ckuus6.c, 28 Oct 2005.
-
-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?  It was easy, just a few lines in cmifi2() and gtword(), plus a
-couple declarations.  To see all the changes, search for "lastfile" (all the
-new code is protected by #ifndef NOLASTFILE).  ckucmd.c, 28 Oct 2005.
-
-I added a new variable \v(lastfilespec) that expands to the same last
-filespec, for use in scripts.  ckuusr.h, ckuus4.c, 28 Oct 2005.
-
-The Unix version of C-Kermit failed to put anything in the session log if
-SET TERMINAL DEBUG ON.  Rearranged the pertinent clause so logging happens
-independent of TERMINAL DEBUG.  For now, since the user who noticed this
-wanted debug format to go into the session log, that's what I do.  The
-alternative would be to just log the raw incoming stream as usual, or to add
-Yet Another SET Command to choose.  ckucns.c, 11 Nov 2005.
-
-Fixed HELP INTRO text.  ckuus2.c, 11 Nov 2005.
-
-Added NOLONGLONG for SV68.  ckcdeb.h, 11 Nov 2005.
-
---- Dev.05 ---
-
-Added a debug() statement in FTP secure_getbyte() to see what's going on
-with Muhamad Taufiq Tajuddin's 205-byte-per-second FTP/SSL downloads.
-
---- Dev.06 ---
-
-Result: nothing, SSL_get_error() does not report any errors.  Suggested
-testing SSL_read()'s return code, if 0 don't update the screen.
-
-Created a new data type CK_OFF_T in ckcdeb.h that will eventually resolve
-to whatever each platform uses for file sizes and offsets.  ckcdeb.h,
-17 Nov 2005.
-
-Made a new library routine ckfstoa() that converts a file size or offset to
-a string.  This is to solve the problem with having to use different
-printf() formats for different representations of file size (int, long, long
-long, off_t, signed, unsigned, etc).  Replaced a few printf("%l",size) with
-printf("%s",ckfstoa(size)) with the expected results.  This is just a start,
-the definitions will need adjustment for many platforms, variables need to
-be redeclared, and all the offending printf's (and printw's) will have to
-hunted down and converted.  ckclib.[ch], ckuus4.c, 17 Nov 2005.
-
-Built a minimal version on Linux with:
-make linux "KFLAGS=-DNOLOCAL -DNOICP -DNOCSETS -DNODEBUG"
-Worked fine, result was 260K on i686.  21 Nov 2005.
-
-Discovered that Kermit's date parser, contrary to the documentation, failed
-to handle strings like "Wed, 13 Feb 2002 17:43:02 -0800 (PST)", which are
-commonly found in email.  This was because of an overzealous and misguided
-check in the code; once removed, all was well.  ckucmd.c, 26 Nov 2005.
-
-Added a new format code 4 to \fcvtdate() to emit asctime() format, used in
-BSD-format email message envelopes (i.e. the "From " line).  shuffledate(),
-ckucmd.c, ckuus[24].c, 26 Nov 2005.
-
-Added a new function \femailaddress().  Given a From: or Sender: header line
-from an RFC2822-format email address, extracts and returns the actual email
-address, such as kermit@columbia.edu.  ckuusr.h, ckuus[42].c, 26 Nov 2005.
-
-Using the new functions, I wrote a script to fetch mail from a POP3 server
-over a TLS connection.  But the line-at-a-time input (needed for changing
-line terminators and byte-stuffing text lines that start with "From ") is
-slow, 17 sec to read 29 messages totaling 175K.
-
-Added INPUT /CLEAR so INPUT can be started with a clean buffer without
-requiring a sepearate CLEAR INPUT command.  ckuusr.h, ckuus[r24].c,
-27 Nov 2005.
-
-One thing that INPUT was never able to do well was read and save the
-complete incoming data stream.  That's because, while waiting for its
-target, the buffer might overflow wrap around.  Yet there was never a way to
-tell it to stop when its buffer fills up and let me save it.  I added a
-/NOWRAP switch that does this.  If the buffer fills up before any other
-completion criterion is met, INPUT returns failure, but with \v(instatus)
-set to 6 (the next available instatus value).  Thus a program that wants to
-read and save (say) an email message from a POP server, which could be any
-length at all, and which terminates with <CRLF>.<CRLF> could do this:
-
-  set flag off
-  while open connection {
-      input /nowrap 10 \13\10.\13\10 # Wait for <CRLF>.<CRLF>
-      if success {
-          frwrite /string \%o {\freplace(\v(input),\13\10.\13\10,\13\10)}
-          set flag on
-          break
-      } else if ( == \v(instatus) 6 || == \v(instatus) 1 ) {
-          frwrite /string \%o {\v(input)}
-          continue
-      }
-      break
-  }
-  if flag (handle success)
-
-Note carefully the braces around the FWRITE text; without them, trailing
-spaces would be lost.
-
-Previously the only way to INPUT an entire data stream without losing
-anything (assuming it was ordinary lines of text that were not "too long"),
-was line-by-line:
-
-  while open connection {
-      input /clear 10 \13\10
-      if fail break
-      if eq "\v(input)" "$ \13\10" break
-      fwrite /string \%o {\freplace(\v(input),\13\10,\10)}
-  }
-
-The new code is 3 times faster using the default INPUT buffer length of 4K.
-Raising it to 16K makes it 3.6 times faster (not worth it).  Changing the
-POP3 script to use INPUT /NOWRAP makes it about twice as fast (it does more;
-it has to do all the byte-stuffing and unstuffing).  27 Nov 2005.
-
-Changed ssl_display_xxx() to just return if SET QUIET ON.  Otherwise there
-is no way to suppress the messages.  Also protected a previously unprotected
-printf("[SSL - OK]\r\n"); by if ( ssl_verbose_flag ).  ck_ssl.c,
-28 Nov 2005.
-
-Discovered that FOPEN /APPEND doesn't work if the file doesn't exist.  It
-uses cmiofi() which is a super-hokey front end to cmifi2().  I had code to
-call it but for some reason it was commented out, with a note to the effect
-it didn't work.  I uncommented it but that didn't help much.  So I wrote an
-entirely new cmiofi() that works exactly as it should, using chained FDBs,
-_CMIFI to _CMOFI (I think the original cmiofi() predated chained FDBs).
-ckuus7.c, ckucmd.c, 29 Nov 2005.
-
-Getting rid of the awful hacks required to call cmiofi() meant I also had to
-change the EDIT command, which is the only other place where it's used.
-Unfortunately now it's no longer possible to give EDIT without a filename
-(to just start an empty editor) but I doubt anyone will notice.  ckuusr.c,
-29 Nov 2005.
-
-IF KERBANG didn't always work right.  If a kerbang script TAKEs another
-kerbang script, the second one should have IF KERBANG false, but it didn't.
-Added a check for \v(cmdlevel) == 1.  Now you can write a wrapper that runs
-a kerbang script in a loop, and the latter can use IF KERBANG to know
-whether to EXIT (if called at top level) or END (if called by another
-script, thus allowing -- in this case -- the loop to continue).  ckuus6.c,
-29 Nov 2005.
-
-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
-
-ckuus[24].c, 1 Dec 2005.
-
-Built OK on VMS 7.2-1 with MultiNet 4.4.  Built with and without OpenSSL on
-Linux OK, ditto Solaris 9.  Built OK on RH Linux AS4 on X86_64 (64-bit);
-"show var fsize" (using new ckfstoa()) works OK there.  Also Mac OS X 10.3.9
-(32-bit), Tru64 UNIX 4.0F (64-bit), HP-UX 11iv2 (64-bit) (picky new compiler
-spews out tons of useless warnings), FreeBSD 6.0 on ia64 (64-bit).
-
---- Dev.07 ---
-
-Changed "make netbsd" to be a synonym for "make netbsd2" because the
-original netbsd target was ancient.  Renamed it to netbsd-old.  makefile,
-3 Dec 2005.
-
-Updated INPUT and MINPUT help text.  ckuus2.c, 3 Dec 2005.
-
-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.  Jeff says "You will need to implement NP_SSLRAW and NP_TLSRAW
-that do the same as NP_TCPRAW but negotiate SSL or TLS as appropriate."
-This was not as easy as it sounded, because apparently a lot of the Telnet
-code is used by SSL and TLS even when Telnet protocol is not being executed.
-I wound up doing this as follows: I added /SSL-RAW and /TLS-RAW to the
-switch table.  Rather than disable Telnet, they do exactly what the /SSL and
-/TLS switches do, but also set a special flag.  This flag is checked in only
-two place: netclos() (to prevent Kermit from sending TELNET LOGOUT when
-closing the connection), and tn_doop() (to prevent Kermit from reacting to
-incoming IACs; it makes tn_doop() return(3), which means "quoted IAC", which
-causes the caller to keep the IAC as data).  ckcnet.h, ckctel.h, ckctel.c,
-ckuus7.c, 4 Dec 2005.
-
-The INPUT command did not account for tn_doop() returning 3.  Fixed in
-doinput(), ckuus4.c, 4 Dec 2005.
-
-Added another debug() statement in FTP secure_getbyte() to see what's going on
-with Muhamad Taufiq Tajuddin's 205-byte-per-second FTP/SSL downloads, plus
-new code to test SSL_read()'s return code (byte count); if 0 don't update
-the screen.  ckcftp.c, 4 Dec 2005.
-
---- Dev.08 ---
-
-Fixed a typo in the non-ANSIC definition of ckfstoa().  ckclib.c, 7 Dec 2005.
-
-Our Ctrl-C trap (the ON_CTRLC macro) wasn't working for kerbang files.
-Rearranged some code to make it work.  ckcmai.c, 8 Dec 2005.
-
-Started converting code to use CK_OFF_T for file sizes and offsets, and
-all [s]printf's to replace "%ld" or whatever with "%s", and the size
-variable with a call to ckfstoa().  Since I haven't actually changed the
-definition of CK_OFF_T from what all the size variables were to begin
-with (i.e. long), it shouldn't do any harm.  So far just ckcfn3.c
-10 Dec 2005.
-
-An updated HP-UX 9.xx makefile target from PeterE to fix a core dump that
-happens on that platform due to insufficient resources.  14 Dec 2005.
-
-Added debug() statements to http_blah() routines to tell whether the
-connection is "chunked".  There seems to be a bad performance problem.
-ckcnet.c, 14 Dec 2005.
-
-PeterE complained about ugly DIRECTORY error message, ?No files match -
-"{blah}".  The braces are used internally in case the user typed more than
-one filespec.  I changed the error message to remove them.  Ditto DELETE.
-ckuus6.c, 15 Dec 2005.
-
-The problem with HTTP downloads is that Kermit always does single-character
-read() or socket_read() calls (or the SSL equivalent); see http_inc().  I
-added buffering code for non-SSL connections only but it's gross because it
-has to swap ttyfd and httpfd before calling nettchk().  I tried making a
-nettchk() clone that accepts a file descriptor as an argument but it didn't
-work because too many other routines that are invoked directly or implicitly
-by nettchk() (such as in_chk()) are still hardwired to use ttyfd.  HTTP GETs
-are now 20 times faster on the local network (the improvement is less
-dramatic over a clogged Internet).  ckcnet.[ch], 15 Dec 2005.
-
---- Dev.09 ---
-
-HTTP file-descriptor swapping is not thread safe.  Doing it right, of
-course, is a big deal, so for now I just don't define HTTP_BUFFERING for
-Windows.  ckcnet.c, 15 Dec 2005.
-
-Noticed that HTTP not included in FreeBSD and OpenBSD builds.  Fixed in
-ckcdeb.h, 22 Dec 2005.
-
-Fleshed out 32/64-bit data type definitions and changed struct zattr
-(file attribute structure) members length and lengthk to have the new
-CK_OFF_T type.  Changed final arguments of debug() and tlog() to be the new
-LONGLONG type.  ckcdeb.h, 22 Dec 2005.
-
-Changed ckfstoa() to return a signed number in string form, rather than an
-unsigned one.  That's because off_t is signed (thank goodness).  Added the
-inverse function, ckatofs() so we can convert file sizes and offsets back
-and forth between binary number and string.  ckclib.c, 22 Dec 2005.
-
-Changed Attribute Packet reader to convert incoming file size attribute
-with ckatofs() rather than atol().  ckcfn3.c, 22 Dec 2005.
-
-Converted debug(), tlog(), ckscreen(), etc, to handle potentially "long long"
-arguments by making their "n" argument CK_OFF_T.  ckuusx.c, ckcdeb.h,
-22 Dec 2005.
-
-Converted the rest of the source files to use CK_OFF_T for all file size
-and offset and byte-count related variables, and converted all references to
-these variables in printfs to go through ckfstoa().  Then I built it on
-Linux/i386 with:
-
-  make linux "KFLAGS=-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
-
-which makes off_t be 64 bits and magically makes all the regular file APIs
-use 64-bit sizes and offsets without changing the API calls in the source
-code.  It's going to be a lot of work to get through all the kinks but I was
-able to send a long file, do directory listings of long files, do
-\fsize(longfile), etc.  When it sends a file, the length is shown correctly
-in the A packet.  If the receiver does not support big numbers, it receives
-the file OK anyway, without showing the size, the thermometer, or percent
-done (and then will get an error when the file keeps coming after the 2G
-mark).  Kermit 95 actually refuses long files for "Size", but only if the
-announced is less than 2^63 bytes.  When today's Linux version receives a
-file, it shows the length correctly in the file-transfer display, as well as
-percent done, thermometer, etc.  Also built this version on true 64-bit
-Linux, and it worked fine.  Many files changed, 22 Dec 2005.
-
-For the record, this API is specified in X/Open's Single UNIX Specification
-Version 2, which is branded as UNIX 98.  It is called Large File Support, or
-LFS, and was developed at the Large File Summit.
-
-It looks like the operative feature-test macro in glibc for transitional
-large file support is __USE_LARGEFILE64.  So if this is defined, we can also
-supply _LARGEFILE_SOURCE and _FILE_OFFSET_BITS=64 automatically for 32-bit
-Linux builds.  But there's a Catch-22, you don't know if this is defined
-until you read the header files, but you have to define _LARGEFILE_SOURCE
-and _FILE_OFFSET_BITS before you read the header files.  Maybe it's good
-enough to grep through <features.h> for __USE_LARGEFILE64.  makefile,
-23 Dec 2005.
-
-Checked this on true 64-bit Linux.  The same symbols are defined in CFLAGS,
-but they do no harm; it builds without complaint and works fine.  24 Dec 2005.
-
-Built it on Red Hat Linux 6.1 from 1999.  This picked up the long file
-support too.  Guess 6.1 isn't old enough to not have it!  Kermit seems to
-work OK on regular files but I don't have enough disk space to create a long
-file, and my bigfile.c program (which creates a long file containing only 1
-byte) doesn't work ("fseeko: invalid argument").  It looks like parts of
-this API were visible in Linux before they were actually working.
-24 Dec 2005.
-
-Converted all fseek() and ftell() to macros that expand to fseek() and ftell()
-or fseeko() and ftello() depending on whether _LARGEFILE_SOURCE is defined.
-ckufio.c, ckuus7.c, ckuusx.c, 24 Dec 2005.
-
-Made a CK_OFF_T version of cmnum().  It would be a very big deal to just
-change cmnum() to return a new type, so another idea is to rename cmnum() to
-something else, cmnumw(), change its result argument to CK_OFF_T, and then
-make a stub cmnum() to call it to get an int, then call cmnumw() explicitly
-any time we need a big number.  ckucmd.c, 24 Dec 2005.
-
-Calling cmnumw() directly requires changes to each routine that uses it.
-The INCREMENT and DECREMENT commands, for example, required changes to
-doincr(), varval(), and incvar(), and all references to them.  ckuusr.[ch],
-ckuus[56].c, 24 Dec 2005.
-
-Calling cmnumw() in chained FDBs required defining a new function code,
-_CMNUW, adding a new member to the OFDB struct for returning wide results,
-and adding a new case to cmfdb().  ckucmd.[ch], 24 Dec 2005.
-
-Changed FSEEK and FCOUNT to use the new chained FDB interface, now we can
-seek and look past 2GB.  ckuus7.c, 24 Dec 2005.
-
-Next come switches, which store their results in a struct stringint.  This
-struct was defined in each module where it was used (ckuus[r367].c, ckcftp.c).
-I moved the definition to ckuusr.h and added a wval member, which can be
-referenced by any switch-parsing code that calls cmnumw().  24 Dec 2005.
-
-Changed SEND /CALIBRATE:n to allow big values of n.  This makes it possible
-to test the protocol aspects of long-file transfer without actually having a
-long file handy.  ckuusr.c, 24 Dec 2005.
-
-SEND /SMALLER-THAN:n, SEND /LARGER-THAN:n, and and SEND /START:n also now
-allow large values of n.  ckuusr.c, 24 Dec 2005.
-
-Changed the algebraic expression evaluator to use wide values.
-ckuus5.c, 24 Dec 2005.
-
-Fixed ckfstoa() to handle the case when n is negative and (0 - n) is also
-negative, which happens for numbers 2^(n-1) or greater, where n is the
-number of bits in the word size we're dealing with, e.g. 64, in which case
-2^63 has its sign bit set so seems to be negative.  In such cases, ckfstoa()
-returns "OVERFLOW" instead of a numeric string.  We'll have to see how this
-plays out but I think it's better to cause a parse error and stop things
-dead than to return a spurious number.  ckclib.c, 24 Dec 2005.
-
-Converted the S-Expression handler to use wide integers. ckuus3.c, 24 Dec 2005.
-
-Took all the LONGLONG stuff out of ckcdeb.h, we don't need it.
-
-All of these changes result in 64-bit arithmetic (more or less) on 32-bit
-Linux, as well as on true 64-bit platforms.
-
-Rebuilt today's code on Solaris 9 in the 32-bit and 64-bit worlds, on Red
-Hat 6.1, Red Hat AS4.2.  I haven't bothered trying a 32/64 hybrid build for
-Solaris, since I can build a pure 64-bit version there.  Quick tests show
-the large-number arithmetic works OK in all cases except, of course, on pure
-32-bit builds (unfortunately I can't find a running Linux system old enough
-to verify this for Linux, but it's true for other 32-bit platforms).
-24 Dec 2005.
-
-Tried building a hybrid version on Solaris 9 after all since the LFS API is
-ostensibly the same as for Linux:
-
- make solaris9 "KFLAGS=-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
-
-It built smoothly and the resulting binary is 2.5MB compared to 3.4MB for
-the 100% 64-bit version.  Looks like a keeper.  For now, added solaris9lfs
-and solaris10lfs entries to the makefile but if these work on PCs we can
-make these the regular entries for Solaris 9 and 10.  27 Dec 2005.
-
-Built on Mac OS X 10.4 with the regular target.  It seems that in that case,
-off_t is 64 bits anyway.  Noticed that a lot of stuff didn't work, like
-exponentiation in S-Expressions.  Tried building it as above, which worked,
-and now CK_OFF_T is 64 bits instead of 32, but (^ 2 30) is still 2.0.  In
-fact 2-to-the-any-power is 2.0.  It seems that the Mac OS X version did not
-have FNFLOAT defined.  It also seems that every test in dosexp() like:
-
-  if (result != fpresult) fpflag++;
-
-should have been protected by #ifdef FNFLOAT..#endif /* FNFLOAT */ -- a
-double-ended break, as they say in the nuclear power industry.  ckuus3.c,
-27 Dec 2005.
-
-Added GREP /EXCEPT:pattern.  ckuus[26].c, 27 Dec 2005.
-
-Fixed a problem with uninitialized pv[].wval (switch-parsing parameter-value)
-members that showed up on certain platforms or with certain compilers.  Now
-the Mac OS X 10.4 version works.  ckuus[r367].c, ckcftp.c, 28 Dec 2005.
-
-Built on Unixware 7.1.1, a pure 32-bit build, seems fine.  Rebuilt on Red
-Hat AS 4.2 just to make sure I didn't break anything, it's OK.  No testing
-on HP-UX, etc, because HP testdrive file sytem is full, can't upload anything.
-29 Dec 2005.
-
-Commented out the SHOW FEATURES section that displays constants like
-INT_MAX, CHAR_MAX, etc, because printing each value in the appropriate
-format is too tricky, and we don't need them anyway.  ckuus5.c, 29 Dec 2005.
-
-Updated ckvfio.c to use CK_OFF_T for the relevant variables.  Built and
-tested on VMS/Alpha 7.2: file transfer in remote mode; making a Telnet
-connection and then local-mode file transfer; S-Expressions, all OK.  Also
-built a no-net version OK.  29 Dec 2005.
-
-Built and tested on Red Hat AS4 AMD X86_64, used it to upload new sources to
-FreeBSD 4.11.  Built on FreeBSD 4.11/i386.  Here's another one where off_t
-is 64 bits, even though long is 32 bits.  But it seems to work ok, not sure
-why, when CK_OFF_T is 32 bits.  There is no _LARGEFILE_SOURCE stuff in the
-header files.  29 Dec 2005.
-
-Built on Mac OS X 10.3.9 using the new macosx10.4 target to pick up LFS.
-Works fine.
-
-Built on Red Hat Linux 4WS on IA64 (64-bit).  Now this one is odd, stat()
-fails on big files.  It happens also if I use the "linuxnolfs" target, which
-does not define _USE_LARGEFILE or _FILE_OFFSET_BITS=64.  DIRECTORY BIGFILE
-shows the size as -1, but if "log debug", it says "no files match", i.e.
-different behavior, observer effect.  I hate when that happens.
-
-Let's see if that's an anomoly...  Built on Tru64 Unix 4.0F (64-bit Alpha).
-It sees long files just fine.  Rebuilt and checked on x86_64 again... fine.
-OK, let's not worry about IA64 yet.
-
-Another small fix to the HP-UX 9.0 target from PeterE.  makefile, 29 Dec 2005.
-
----Dev.10---
-
-Code adjustments from Jeff, mainly to the SSL and TLS Raw mode code from
-several weeks ago, plus changing some data types in the security code to
-CK_OFF_T, plus a different data type for CK_OFF_T for K95 because Windows
-size_T isn't signed.  This presumably will allow large-number arithmetic but
-it will not give large file access because that will require replacing all C
-library file i/o calls (esp. in ckofio.c) with native Windows APIs.  Build
-on Solaris 9 with and without SSL and on Linux RH AS4.2 with and without
-SSL.  ck_crp.c, ck_ssl.c, ck_ssl.h, ckcdeb.h, ckcftp.c, ckcmai.c, ckcnet.c,
-ckcnet.h, ckctel.c, ckuat2.h, ckuus4.c, ckuus7.c, ckuusr.c, 30 Dec 2005.
-
-It was reported that WRITE SESSION always returned a failure status, even
-when it succeeded.  The problem was that Unix versions of zsout() and
-zsoutl(), for the session log only, were using write() and returning
-write()'s return code, which is different from what zsout() and zsoutl() are
-documented to return.  Also plugged a couple potential holes in zsoutx()
-that I noticed while I was in the neighborhood.  ckufio.c, 30 Dec 2005.
-
-Added FSEEK /FIND:pattern.  This form of FSEEK accepts all the other
-switches and arguments and performs the desired seek.  Then, if the seek was
-successful, it starts from that point and reads through the file, line by
-line, searching for the first line that contains the given string or matches
-the given (unanchored) pattern and, if found, sets the file pointer to the
-beginning of that line.  Useful, e.g., for very long timestamped logs, where
-you want to start processing at a certain date or time; searching for a
-particular string is much faster than doing date comparisons on each line.
-ckuus[27].c, 30 Dec 2005.
-
-It was annoying me that FILE STATUS (FSTATUS) required a channel number to
-be given even if only one file was open, so I supplied the correct default
-in that case.  ckuus7.c, 30 Dec 2005.
-
-INPUT /NOWRAP, added recently, is used for efficiently copying the INPUT
-stream intact, but it's not good for matching because if the INPUT target is
-broken between the end of the previous buffer and the beginning of the next
-one, the context is lost and the match does not occur.  I thought of several
-ways around this, but they all involve saving a huge amount of context --
-old input buffers, the arrays of target strings and corresponding match
-positions, etc.  The alternative is fairly simple but it's not transparent
-to the user.  Here's what I did in a POP script:
-
-    .eom := "\13\10.\13\10"
-    set flag off                           # FLAG ON = success
-    while ( open connection && not flag ) {
-        .oldinput := \fright(\v(input),8)  # Save tail of previous INPUT buffer
-        input /clear /nowrap 4 \m(eom)     # Get new INPUT buffer
-        if success {                       # INPUT matched - good
-            .s := {\freplace(\v(input),\m(eom),\13\10)}
-            set flag on
-        } else {                           # No match
-            .s := \v(input)                # Check if target crossed the border
-            .oldinput := \m(oldinput)\fsubstr(\v(input),1,8)
-            if \findex(\m(eom),\m(oldinput)) set flag on
-        }
-        ...
-    }
-
-I think this will be easier to explain than any dangerous and grotesque
-magic I might put into doinput() itself.  For now, added a few words about
-this to HELP INPUT.  ckuus2.c, 30 Dec 2005.
-
-Back to the pattern matcher.  Noticed that "IF MATCH index.html [a-hj-z]*"
-succeeded when it should have failed.  In ckmatch(), the clist section
-needed one more clause: it can't float the pattern if an asterisk does not
-occur in the pattern before the clist.  This change fixes the problem
-without breaking any other cases that weren't already broken, most of which
-involve slists, i.e. {string,string,string,...}.  ckclib.c, 30 Dec 2005.
-
-Tried FSEEK /FIND: on a largish file (over 100,000 lines), using it to seek
-to a line near the end.  It took 0.756 seconds, compared with Unix grep,
-which did the same thing in 0.151 sec.  That's because C-Kermit is using
-ckmatch().  But if the search target is not a pattern, it should be a bit
-faster to use ckindex().  Yup, 0.554 sec, a 36% improvement.  Can't expect
-to compete with grep, though; it's highly tuned for its single purpose.
-ckclib.[ch], ckuus7.c, 1 Jan 2006.
-
-Updated visible copyright dates to 2006: ckcmai.c, ckuus2.c, ckuus5.c,
-1 Jan 2006.
-
-Noticed that NetBSD 2.0.3 has 64-bit off_t, and that _LARGEFILE_SOURCE is
-mentioned in <stdio.h>.  Tried building Kermit with _LARGEFILE_SOURCE added
-to CFLAGS, it's good.  Added it to the netbsd target.  makefile, 1 Jan 2006.
-
-Fixed typo, #ifdef CK_NOLONGLONG in ckuus5.c should have been #ifndef
-CK_LONGLONG (which, it turns out, we don't use anyway).  2 Jan 2005.
-
-Observed that FreeBSD 4.x has a 64-bit off_t, but does not use the
-_LARGEFILE_SOURCE convention.  Reasoning that all versions of FreeBSD have
-off_t (I was able to check back to FreeBSD 3.3), I simply #define CK_OFF_T
-to be off_t in ckcdeb.h within #ifdef __FreeBSD__ .. #endif.  Another one
-down.  This can be done for any platform that is guaranteed to have off_t.
-Turns out FreeBSD 3.3 has 64-bit off_t too.  2 Jan 2005.
-
-OpenBSD, same as FreeBSD.  Also, added OS-version-getting thing to makefile
-target for the program herald, as in the other BSDs.  Built on OpenBSD 2.5
-from 1998, it has 64-bit off_t too.  ckcdeb.h, makefile, 2 Jan 2005.
-
-Dumping the command stack every time there's an error is really too much.
-I added SET COMMAND ERROR-DISPLAY {0,1,2,3} to set the verbosity level of
-error messages.  Only level 3 dumps the stack.  ckuus[235].c, 2 Jan 2005.
-
-Built on HP-UX 11.11 with _LARGEFILE_SOURCE and _FILE_OFFSET_BITS=64.  The
-result works fine as far as I can tell.  It sees big files, it can open
-them, seek to positions past the 2^31 boundary.  It can send large files.
-It can do large-number arithmetic (^ 2 62).  The only problem is that during
-compilation, every single modules warns:
-
-  cc: "/usr/include/sys/socket.h", line 504: warning 562: Redeclaration of
-  "sendfile" with a different storage class specifier: "sendfile" will have
-  internal linkage.
-  cc: "/usr/include/sys/socket.h", line 505: warning 562: Redeclaration of
-  "sendpath" with a different storage class specifier: "sendpath" will have
-  internal linkage.
-
-These warnings should be perfectly harmless since they are not coming from
-C-Kermit code, nor does C-Kermit use either one of those functions.  These
-warnings don't come out in HP-UX 11i v2, but on that one we get tons and tons
-of picky compiler warnings (variables set but not used, defined but not
-referenced, etc).  A couple, however, turned out to be valid; one case of
-"expression has no effect", and two of "string format incompatible with
-data type" (I missed a couple file-size printfs).
-
-There were also numerous warnings about signedness mismatch or sign
-conversion of constants like IAC (0xff).  Does the HP-UX Optimizing Compiler
-have a compiler flag to make all chars unsigned?  Yes, +uc, but the man page
-says "Be careful when using this option.  Your application may have problems
-interfacing with HP-UX system libraries and other libraries that do not use
-this option".  Sigh, better not use it.
-
-After reviewing "HP-UX Large Files White Paper Version 1.4" and HP's
-"Writing Portable Code" documents, I added -D_LARGEFILE_SOURCE
--D_FILE_OFFSET_BITS=64 to the hpux1000 target, which is the basis for all
-HP-UX 10.00 and later builds.  Large files are available in HP-UX 10.20 and
-later.  10.00 and 10.10 were not real releases, and anyway these flags
-should be harmless there unless the large-file implementation was only
-partly done.  Built OK on both PA-RISC and IA64, optimized and plain.
-makefile, 4 Jan 2006.
-
-Built on FreeBSD 6.0 on IA64.  All OK except I got a warning about the
-argument passed to time() in logwtmp() in ckufio.c.  This section had
-already been partially fixed; thus I put the improved version into
-#ifdef CK_64BIT, which is our newly available symbol that should be
-automatically defined for any true 64-bit build.  ckufio.c, 4 Jan 2006.
-
-Finally got around to testing Jeff's changes to SSL/TLS RAW mode from
-December 30th against our POP server.  It didn't work, couldn't log in.
-Tried backing off the ckctel.c changes first; that allowed login and
-communication, but it did not suppress activation of Telnet protocol
-whenever a 0xff byte arrived.  Backed off the rest of the changes and now
-all is OK again.  ckctel.c, ckcnet.c, ckuus7.c, 9 Jan 2006.
-
-Built on NetBSD 1.4.1 (1999), found that it did not like the large file
-assumption -- fseeko() and ftello() do not exist; added a clause to the
-netbsd target to check for fseeko and not define _LARGEFILE_SOURCE if not
-found.  Oddly enough, off_t is 64 bits anyway, but it doesn't look like the
-APIs are half-done.  For example, stat() uses off_t (64 bits) for the file
-length, but fseek() uses long (32 bits) and there is no 64-bit analog.
-Anyway the new netbsd target works on both 1.4.1 and 1.5.2 (no large files)
-and on 2.0.3 (large files).  makefile, 9 Jan 2006.
-
-Built on QNX-32 4.25, which has no large file support.  Got a few strange
-compiler (WatCom) warnings, but it built and runs OK.  Noticed that file
-transfers into QNX over a Telnet connection can't use streaming, but that's
-nothing new to this version; same thing happens with C-Kermit 7.0.  9 Jan 2006.
-
-Built on IRIX 6.5.  I didn't bother with large files there because it does
-not support the _LARGEFILE_SOURCE interface; you have to change all the APIs
-at the source level from blah() to blah64().  Seems to work fine as a 32-bit
-app even though its off_t is 64 bits.  Tried a pure 64-bit IRIX 6.5 build
-but it dies in ckcnet.c when it hits SOCKOPT_T and GSOCKNAME_T with "The
-identifier 'socklen_t' is undefined".
-
-Looks like I no longer have access to SCO OSR5.
-
-Made a pure 32-bit build on SCO UnixWare 7.1.4, all OK.  Found that this
-version also supports LFS, added it to the uw7 target.  makefile, 9 Jan 2006.
-
---- Dev.11 ---
-
-Evidently the HP-UX bundled (non-ANSI non-optimizing) compiler doesn't like
-long integers in switch expressions.  Changed three examples of these in the
-S-expression code.  ckuus3.c, 10 Jan 2006.
-
-A section of tstats() where GFTIMER isn't defined (e.g. on Motorola
-sv68r3v6) was garbled.  Fixed in ckcfn2.c, 10 Jan 2006.
-
-A fix for setting 921600 bps on Linux from Paul Fulghum, Microgate Systems Ltd.
-ttgspd(): ckutio.c, 11 Jan 2006.
-
-Noticed that when I changed the compact substring notation code back on
-August 9th, I broke the ability to use arithmetic expressions within the
-brackets, which explains some rather odd behavior I saw with some of my
-scripts.  Looking more deeply into this, I also see that all the parsers I
-have been using up to now for this, as well as for array bounds pairs, have
-been inadequate because they never allowed for nested constructions, such as
-a member of a bounds pair that itself was an array element, possibly with
-another array element as a subscript.  I wrote a new routine for this,
-called boundspair(), which is like arraybounds() except it accepts an extra
-argument, an array of characters that can serve as bounds-pair delimiters,
-and it returns the pair separator that was encountered in another new
-argument.  For the alternative substring notation for [startpos-endpos] I
-had to change the delimiter from '-' to '_' because '-' can be used in
-arithmetic but '_' is not a recognized operator.  This is so I can parse,
-e.g. [a:b] or [a_b] in the same context, and then find out which form was
-used, e.g. \s(line[9:12]) or \s(line[9_12]); the first string is 4 bytes
-long, the second is 12.  Everything seems to be OK now.  \s(line[10]) gives
-everything starting at 10, but \s(line[10:0]) gives the null string.  Bad
-syntax in the bounds pairs results in a null string; missing pieces of the
-bounds pair result in defaults that should be compatible with previous
-behavior.  ckuus[45].c, ckuusr.h, 13 Jan 2005.
-
-Changed arraybounds() to call boundsdpair().  This was a rather drastic
-change, not strictly necessary, but I think I got all the kinks out.
-ckuus5.c, 13 Jan 2005.
-
-Changes from PeterE to the makefile for HP-UX 6 and 7, to accommodate bigger
-symbol tables, etc.  19 Jan 2005.
-
-Determined that SCO OSR5.0.6 (and earlier) do(es) not support large files.
-Don't know about 5.0.7.  30 Jan 2005.
-
-Created a new build target for SCO OSR6.0.0.  Gets the exact 6.x.x version
-dynamically.  Supports large files and big-number arithmetic via CK_OFF_T.
-The sockopt() family of functions changed the data types of some of their
-arguments since OSR5.  It was already possible to define SOCKOPT_T and
-GSOCKNAME_T from the command line but I had to add code to also allow this
-for GPEERNAME_T too.  ckcnet.c, makefile, 30 Jan 2005.
-
-Apparently, ever since C-Kermit 7.0 was released, it has never been possible
-to use a variable for the as-name in a RECEIVE command in Kermit 95.  This
-is because evaluation of the as-name field was deferred until after we could
-check whether it might be a directory name (which, in Windows, could start
-with a backslash).   This little bit of magic was not a good idea, magic
-hardly ever is.  I changed the code to evaluate both as-name fields in the
-normal way.  If they want to receive to a directory called "\%1", they'll
-just have to spell it differently.  The workaround is to turn the whole
-command into a macro and evaluate it before executing it, e.g.:
-
-  assign xx receive /as-name:\%1
-  do xx
-
-ckuus6.c, 1 Feb 2006.
-
-Built OK on FreeBSD 6.1 on AMD64.  Adjusted some copyrights and date stamps.
-ckcmai.c, makefile, 8 Feb 2006.
-
---- Dev.12 ---
-
-Fixed a signed/unsigned char warning in the new boundspair() calling code
-in the compact substring notation handler.  ckuus4.c, 9 Feb 2006.
-
-Removed a spurious extra linux+openssl label from the makefile, added
-solaris10g_64 synonym.  9 Feb 2006.
-
-Satisfied myself that LFS is OK on Solaris 10 i386, and I'm going to assume
-it's also OK on Solaris 9.  Made LFS standard for all Solaris 9 and 10
-builds (including the secure ones) except the explicitly 64-bit ones, and
-made the provisional solarisXXlfs targets into synonyms.  makefile, 9 Feb 2006.
-
---- Dev.13 ---
-
-Further attempts at SSL/TLS message suppression when QUIET is ON.
-ck_ssl.c, 16 Feb 2006.
-
-From J.Scott Kasten: (quote...) I just uploaded a patch to /kermit/incoming.
-The file name is "jsk-patch-for-cku211.diff".  I have also included the
-patch as ASCII text in this email below.  This patch may be applied to the
-cku211.tar.gz source code via:
-  cd cku211, patch -p1 <../jsk-patch-for-cku211.diff
-The patch adds 4 new build targets:
-  netbsdwoc - a stripped no curses target for iksd used.
-  netbsdse  - security enhanced target with srp, ssl, and zlib.
-  irix65gcc - build on SGI Irix 6.5 platform using gcc.
-  irix65se  - security enhanced target with srp, ssl, and zlib.
-The patch fixes one build target:
-  irix64gcc - The "-s" option is not supported by gcc under Irix.
-I thank all of you in the Kermit Project for such a fine utility.  I
-recently had to get a 16 MB file overseas across a spotty communications
-link to repair a computer remotely.  Kermit was the only thing that could do
-the job, so I wanted to contribute these patches back to the mainstream to
-say thanks.  This digitally signed email is a binding contract that
-officially assigns the rights to the source code patch (shown below) that I
-developed to the Kermit Project at Columbia University. (...end quote)
-ck_ssl.c, makefile, 23 Feb 2006.
-
-Changed the new NetBSD target names to be consistent with the conventions
-used in most other targets:
-
-  netbsdwoc -> netbsdnc
-  netbsdse  -> netbsd+ssl+srp+zlib
-  irix65se  -> irix65+ssl+srp+zlib
-
-and removed old, now superfluous, NetBSD targets (old-netbsd, netbst15,
-netbst16), leaving synonym labels in their place.  Also updated (crudely)
-the Linux target variations (curses instead of nocurses, no curses at all)
-to be (appropriately modified) copies of the current linux target.  It would
-be nicer to combine them, but this gets the job done.  makefile, 23 Feb 2006.
-
---- Dev.14 ---
-
-Fixed the HELP command when used with tokens like @, ^, #, and ;.  The first
-two had been omitted from the table.  The second two required a new path
-into the guts of the parser, since comments are normally stripped at a very
-low level.  ckuus[r2].c, ckucmd.c, 24 Feb 2006.
-
-Built on AIX 5.1 ("make aix51") without incident.  Then I tried:
-
- make aix51 "KFLAGS=-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
-
-This had no effect.  I found the relevant document ath the IBM website.  It
-says to use -D_LARGE_FILES instead.  I added this to the AIX 4.2 target
-since (a) IBM says large files are supported by AIX 4.2 and later, and (b)
-all Kermit AIX targets past 4.2 use the 4.2 one.  Plus a clause to make
-sure CK_OFF_T is defined appropriately.  ckcdeb.h, makefile, 6 Mar 2006.
-
-Added a 32-bit aix51+openssl target.  Builds OK, works fine (tested against
-our SSL POP server).  Tried I tried adding -D_LARGE_FILES.  It seems to work
-fine, so we'll keep it.  Cleaned up the other aix5blah entries a bit also.
-makefile, 6 Mar 2006.
-
-Fixes from J. Scott Kasten to the IRIX 6.4 and 6.5 makefile targets.  They
-were badly wrong.  makefile, 6 Mar 2006.
-
-The reason Kermit was looping on directories in IRIX was a classic
-"double-ended break".  The makefile targets failed to define DIRENT so
-Kermit was open/read on directories rather than opendir()/readdir().  But
-then it was also failing to account for the fact that read() would return -1
-on error.  The makefile fix adds -DDIRENT, and the read() case in traverse()
-now properly terminates its loop on error.  ckufio.c, 6 Mar 2006.
-
---- Dev.14 ---
-
-In response to a complaint that C-Kermit would not build on HP-UX 11 with
-OpenSSL, I tried it myself on both 11.11/PA-RISC and 11i v2/Itanium.  It built
-OK on both but I had to add a new target (hpux1000o+openssl-nozlib) for no
-Zlib since these boxes did not have it installed.  makefile, 9 Mar 2006.
-
-Added OpenSSL version number display to SHOW FEATURES.  ckuus5.c, 9 Mar 2006.
-
-Gavin Graham noticed that FTP [M]GET /DELETE /MOVE-TO: was rejected with
-"?Sorry, /DELETE conflicts with /MOVE or /RENAME".  This check belongs in the
-PUT code but not in the GET code.  Commented it out and tested the result.
-The combination is now accepted but then Kermit refuses the incoming file as
-if it had been given a /SMALLER-THAN: or /LARGER-THAN: switch, which it didn't
-happen.  Turns out there was one more place where I wasn't initializing the
-new "wide int" member of the switch-parsing pv[] struct.  Once this was fixed,
-the /MOVE-TO part still didn't work.  Turned out the /DELETE case was part of
-a long if-else-if-else- chain, which effectively made /DELETE and /MOVE-TO: or
-/RENAME-TO: mutually exclusive.  Fixed this, now it works fine.  ckcftp.c,
-13 Mar 2006.
-
-Got access to AIX 5.3, built there, all OK, including large files. 13 Mar 2006.
-
---- Dev.16 ---
-
-Patches from Mark Sapiro to suppress getsockopt() and getsockname() warnings
-in Mac OS X.  ckcnet.[ch], 18 Mar 2006.
-
-In response to a complaint from Clarence Dold, tried "make redhat9" (which
-is the rather dated target that tried to include all forms of security) on
-RH Linux AS4.3, it failed miserably.  I made a new makefile target, removing
-Kerberos IV and got a lot farther.  But then in ckcftp.c, the following
-struct definition:
-
-  struct {
-      CONST gss_OID_desc * CONST * mech_type;
-      char *service_name;
-  } gss_trials[] = {
-      { &ck_gss_mech_krb5, "ftp" },
-      { &ck_gss_mech_krb5, "host" },
-  };
-
-refers to a variable, ck_gss_mech_krb5, that is not defined anywhere.  Up
-above, however, is a static definition for gss_mech_krb5, so I changed the
-struct definition to match.  Next, in ckuath.c, the compiler could not find
-the com_err.h file.  Turns out in Linux this is in a subdirectory, et, so we
-have to add a -I clause to the makefile target for this.  Made a target for
-Linux+SSL only.  Made a target for Linux+Krb5 only; this required moving an
-#ifdef in ckuus7.c to prevent an unguarded reference to SSLEAY_VERSION.
-New targets: linux+krb5+ssl, linux+krb5, linux+krb5.  ckcftp.c, ckuus7.c,
-makefile, 27 Mar 2006.  
-
-New targets of HP-UX 10/11 with OpenSSL from PeterE.  makefile, 27 Mar 2006.
-
-Added large file/integer support to SHOW FEATURES.  ckuus5.c, 27 Mar 2006.
-
-Built OK on Solaris 9 and 10 with gcc (someone was complaining that this
-didn't work, but that was 8.0.211).
-
-Started build on a Sun 3/80 mc68030 with NetBSD 2.0 and gcc 3.3.3.  But it
-died with an assembler error in ckcfn2.c (compiler bug).  27 Mar 2006.
-
---- Dev.17 ---
-
-NebBSD 2.0 build completed by turning off optimization on ckcfn2.c
-("KFLAGS=-O0").  Result supports 64-bit ints and, presumably, large files.
-uname -p = "m68k", -m = "sun3". 29 Mar 2006.
-
-Corrected an omission in applying PeterE's updates to the HP-UX targets.
-makefile, 28 Mar 2006.
-
-solaris2xg+krb5+krb4+openssl+shadow:
-
-Tried resurrecting the solaris2xg+krb5+krb4+openssl+shadow target.  It asks
-to link with libdes but there is no libdes.  Removed -ldes from the target,
-now at least it builds and runs wart.  The compilation blows up in ckcftp.c
-for missing header files:
-
-  ckcftp.c:462: kerberosIV/krb.h: No such file or directory
-  ckcftp.c:500: gssapi/gssapi_generic.h: No such file or directory
-  ckcftp.c:501: gssapi/gssapi_krb5.h: No such file or directory
-
-Got a bit farther by adding appropriate -I's and -L's to KFLAGS but it still
-dies compiling (or linking?) ckcftp.c, but it doesn't say exactly why.  OK,
-deferred.
-
-Added SET SEXPRESSION TRUNCATE-ALL-RESULTS { ON, OFF }.  This can be used
-for force integer arithmetic in any kind of calculation that requires it,
-such as date calculations.  This is a global setting, not on any kind of
-stack.  Also, updated SHOW SEXP and added HELP SET SEXP which wasn't there
-before.  ckuus[23].c, 30 Mar 2006.
-
-To make the RENAME command a bit more useful, need to add some switches.
-But it shares a switch table, qvswtab[], with some other commands.  Broke
-this off into its own switch table.  ckuus6.c, 17 Apr 2006.
-
-Added RENAME switch values that can be used in the same table with the DELETE
-switch values, which are shared by many commands.  ckuusr.h, 17 Apr 2006.
-
-Discovered that the RENAME command could be entered without any arguments
-and it would still succeed.  Fixed in dorenam(): ckuus6.c, 17 Apr 2006.
-
-Added parsing for RENAME /UPPER:option (to uppercase the file name(s)),
-/LOWER:option (to lowercase), and /REPLACE:{{s1}{s2}} (to do string
-replacement on the filename(s)), but not the semantics.  When any of these
-switches is given, the target ("to") name is not parsed; they act on the
-source name.  The /LOWER: switch takes keyword args to specify whether it
-should act only only files that have all UPPER case latters, or on ALL files
-(i.e., including files with mixed-case names); similarly for the /UPPER:
-switch.  There is some creative parsing allowing these to be given with or
-without a colon and keyword argument, which works fine except if you include
-the colon but no argument, execute the command (which works fine), and then
-recall the command.  I haven't yet decided about the interaction among these
-switches.  Clearly if /UPPER is given after /LOWER, it overrides.  But if
-/UPPER (or /LOWER) is given with /REPLACE, what should happen?  ckuus6.c,
-17 Apr 2006.
-
-Filled in actions for RENAME /UPPER: and /LOWER: for the single file case,
-and tested all combinations of switch values and filename configurations.
-Once that was OK, moved the code out into a separate routine, renameone(),
-and then called it from both the single-file case and the multifile case.
-ckuus6.c, 19 Apr 2006.
-
-Added RENAME /SIMULATE.  Filled in the code for string replacement, needs
-testing.  ckuus6.c, 20 Apr 2006.
-
-Changed /REPLACE options to allow a negative number to specify an occurrence
-from the right, so -1 means the last occurrence, -2 means the next-to-last,
-etc.  ckuus6.c, 24 Apr 2006.
-
-Added RENAME /COLLISION:{OVERWRITE,PROCEED,FAIL}.  This is implemented but
-not tested.  ckuus6.c, 24 Apr 2006.
-
-Worked on RENAME /COLLISION:FAIL.  I decided it was less than useful to ...
-
-Added SET RENAME { COLLISION, LIST } to let user change default collision
-and listing actions.  ckuusr.[ch], ckuus[36].c, 25 Apr 2006.
-
-Experimented with parsing for /CONVERT:cset1:cset2.  The problem here is
-that there is no straightforward way for a switch to have multiple
-arguments.  Or is there...?  If I parse cset1 with cmswi() rather than
-cmkey(), it almost works; the only problem is that the character-set
-keywords don't have CM_ARG set, so they don't know to stop on, and ignore, a
-colon.  If I make a copy of the table and set CM_ARG in the flags field for
-each keyword, it works fine: if I Tab in the first name, it fills itself
-out, supplies a colon, and waits for the second name.  So in the code, the
-first time that RENAME /CONVERT is invoked, I put code to copy fcstab[] and
-set CM_ARG in each flags field.  Works fine, and now we know how to make a
-switch that takes multiple arguments.  ckuus6.c, 24 Apr 2006.
-
-I thought I had a function to convert the character set of a string but I
-don't, so actually implementing /CONVERT: will be difficult.
-
-Actually the parsing wasn't that easy either.  It works OK interactively,
-but not in a TAKE file.  To make a long story short, I had to change
-gtword() and cmkey2() to not require "/" at the beginning of a switch, and
-then to parse arguments-that-are-followed-by-other-arguments as if they were
-switches, so that they can end with colon rather than space.  This might
-seem dangerous, but switches always have "/" at the beginning, so the check
-is superfluous.  ckucmd.c, 26 Apr 2006.
-
-Back to /CONVERT...  Once I was able to get the code to call cvtstring() I
-was able to debug it (at first it was skipping every second character).  And
-now we have a general-purpose string-translating function we can call from
-anywhere.  Requires that C-Kermit be built with Unicode support.
-ckuus6.c, 26 Apr 2006.
-
-Added SHOW RENAME.  ckuusr.h, ckuus[r5].c, 26 Apr 2006.
-
-Conditionalized some Unix/Windows assumptions in renameone() so the code
-could work in VMS.  ckuus6.c, 2 May 2006.
-
-Added RENAME /FIXSPACES to change all spaces in the filename(s) to
-underscore or any other character or string that is given.  This is just a
-special case of RENAME /REPLACE:{{ }{x}} with easier syntax.
-ckuusr.h, ckuus6.c, 2 May 2006.
-
-Added an "all-but" control to the /REPLACE options:
-/REPLACE:{{.}{_}{~1}} means replace all but the first (this one works);
-/REPLACE:{{.}{_}{~-1}} means replace all but the last (this one not yet).
-ckuus6.c, 2 May 2006.
-
-Filled in the second one ("all but" the given occurrence).  The algorithm is
-simply to reverse the three strings and then use the same code as we use in
-the left-right-case, and then unreverse the result.  At first I used
-yystring() for this but yikes, what a bad design!  So I made a better
-string-reversal routine, gnirts(), for this (luckily yystring() is only used
-in one place, for which its design is appropriate). ckuus6.c, 3-4 May 2006.
-
-Added code to handle the case where the file being renamed includes a path
-specification.  In this case we separate the path, apply the renaming
-functions to the filename only, and then at the end rejoin the original
-filename with the path, and join the new name with same path or, if a
-destination directory was given, with that.  ckuus6.c, 4 May 2006.
-
-Added HELP SET RENAME and updated HELP RENAME.  ckuus2.c, 4 May 2006.
-
-"Tom Violin" (Tom Hansen) noticed that the first time you FOPEN a file,
-Kermit's memory consumption goes way up.  In fact there's a warning to that
-effect in the code, where, upon first open, a potentially big array of
-potentially big structs is allocated.  I rewrote the code to allocate each
-array member (struct ckz_file) as needed, i.e. when a file is opened, and to
-free it when the file is closed (or the open fails).  This was actually
-quite a lot of work, which is why I didn't do it the first time around:
-every single "."  had to be changed to "->".  Every check for a valid
-channel first had to check if the channel's struct was allocated and every
-other reference to z_file[i]->anything had to be prechecked that z_file[i]
-was not a NULL pointer.  Also I made some improvements to FILE STATUS, and I
-fixed FILE CLOSE to default the channel number if only one channel was open,
-as I did for FILE STATUS a while back.  ckuus7.c, Cinco de mayo 2006.
-
-Ran my old BUILDS script that builds C-Kermit with about 100 different
-combinations of feature-selection switches.  Fixed a few small glitches so
-now they all build OK (except can't do NOANSI builds any more on recent
-Linuxes because of varargs()).  ckuus3.c, ckuus5.c, ckuus6.c, ckuus7.c,
-ckucmd.c, ckcfns.c, 6 May 2006.
-
-Fixed RENAME /LOWER and /UPPER, when given with no colon or agrument, to
-default to ALL.  ckuus6.c, 13 May 2006.
-
-Built on VMS 7.2-1, tested new RENAME command there; seems to be OK.
-13 May 2006.
-
---- Dev.18 ---
-
-I wanted to test large files against RESEND but I don't have access to any
-system that can run C-Kermit and that also has enough space for a large
-file.  I created a "fake" large file on Linux (3G hole plus 1 byte), and
-sent it over a localhost connection, and interrupted it repeatedly and then
-initiated a RESEND at the sender.  In each case, it picked up where it left
-off.  But before the 2G boundary was crossed the disk filled up.
-Inconclusive.  14 May 2006.
-
-PeterE got a warning in the new FILE OPEN code when building in HP-UX 9.
-I added a cast, built on HP-UX 11, no more complaint.  However there
-are warnings about internal vs external bindings of sendpath and sendfile
-in every module.  Too bad, these are not Kermit tokens, it's a conflict in
-HP's header files.  Marc Sapiro doesn't see them; probably it's something
-on the HP testdrive site.  ckuus7.c, 17 May 2006.
-
-Fixed the tru64-51b+openssl target -- the terminating doublequote of KFLAGS
-was missing -- and also the osf target, which failed to import the LIBS
-definition from whatever other target invoked it.  Now the SSL build goes OK
-on Tru64 5.1B.  Replaced x.tar.z in the download areas without declaring a
-new Dev number.  The new one has a makefile with today's date.  Software
-engineering at its best!  makefile, 18 May 2006.
-
-Scott Kasten noted that the estimated-time-remaining calculation would go
-bonkers on LFS systems when RESENDing a large file.  It looks like the
-shocps() and shoetl() functions escaped the CK_OFF_T conversion.  I made
-what seemed to be the right adjustments, and then was lucky enough to find a
-computer that had enough free disk space for me to send a large file,
-interrupt it several times, resend it, all seems to be OK.  28 May 2006.
-Later Scott verified these changes independently for Linux, but the problems
-in IRIX remain.
-
-Patches from Scott Kasten for large files on IRIX 6.5: ckcdeb.h, makefile,
-12 Jun 2006.
-
---- Dev.19 ---
-
-Added a new function for dealing with JPGs and GIFs:
-
-\fpicture(filename,&a)
-  returns 0 if file not recognized or can't be opened;
-  returns 1 if landscape, 2 if portrait or square.
-  If array given, element 1 is width, element 2 is height.
-
-ckuusr.h, ckuus4.c, 19 Jun 2006.
-
-Scott Kasten reports that the FTP client can transfer large files OK, at
-least in Linux, but has trouble with recovery:
-
- . Kermit takes a very long time to start the transfer, sometimes over
-   30 minutes.  Suspect the ftp server is counting the bytes in a long file?
-   Or maybe it's a text-mode transfer and it's counting the lines?  Probably
-   in response to Kermit's SIZE command.
-
- . The size shown in the FT display is wrong by a random amount.  And of
-   course so are the progress bar, percent done, and time remaining.
-
- . The file, however, is transferred correctly.  REGET works correctly too.
-
-I tried setting up a test scenario locally but our Solaris FTP server does
-not support large files:
-
-  FTP SENT [SIZE BIGFILE]
-  FTP RCVD [550 BIGFILE: not a plain file.]
-  FTP SENT [PASV]
-  FTP RCVD [227 Entering Passive Mode (128,59,48,24,246,37)]
-  FTP SENT [RETR BIGFILE]
-  FTP RCVD [550 BIGFILE: Value too large for defined data type.]
-
-Created the same 3GB on a Tru64 Unix system that allows FTP access.  Made
-the connection from C-Kermit on Solaris (32-bit with LFS):
-
-  16:46:12.908 FTP SENT [SIZE BIGFILE]
-  16:46:12.947 FTP RCVD [213 3000000001]
-
-Note that it takes less than half a second to get the reply.  Now I start
-the download and then interrupt it at about 2%:
-
-  16:46:12.979 FTP SENT [TYPE I]
-  16:46:13.174 FTP RCVD [200 Type set to I.]
-  16:46:13.226 FTP SENT [PASV]
-  16:46:13.262 FTP RCVD [227 Entering Passive Mode (15,170,178,171,11,37)]
-  16:46:13.299 FTP SENT [RETR BIGFILE]
-  16:46:13.337 FTP RCVD [150 Opening BINARY mode data connection for BIGFILE..]
-  16:47:24.895 FTP RCVD [426 Transfer aborted. Data connection closed.]
-  16:47:24.934 FTP RCVD [226 Abort successful]
-  16:47:24.991 FTP SENT [MDTM BIGFILE]
-  16:47:25.028 FTP RCVD [213 20060706204458]
-
-Now I do a REGET:
-
-  16:51:55.321 FTP SENT [PASV]
-  16:51:55.357 FTP RCVD [227 Entering Passive Mode (15,170,178,171,11,43)]
-  16:51:55.394 FTP SENT [REST 122736640]
-  16:51:55.430 FTP RCVD [350 Restarting at 122736640. Send STORE or RETRIEVE..]
-  16:51:55.431 FTP SENT [RETR BIGFILE]
-  16:51:55.469 FTP RCVD [150 Opening BINARY mode data connection for BIGFILE..]
-
-This worked perfectly, as far as I can tell; the FT display picked up in the
-right place; the thermometer, percent done, and estimated time remaining
-were the same as when we left off last time.  I did the same thing several
-more times, everything was OK.  It would have taken a really long time to
-let this run to completion, but I think this demonstrates that Scott's
-symptoms are server-dependent.  No changes.  6 July 2006.
-
-Checked current code on VMS 8.2-1 on IA64 / UCX 5.5, builds fine.
-No changes.  Updated listing at HP.  6 July 2006.
-
-Checked FTP GET of large file in ASCII mode against Tru64 FTP server.  It
-was fine, and there was no delay in the server's response to our SIZE command
-(as there would be if it were scanning the entire file to count how many
-bytes would be required to send it in text mode).  7 Jul 2006.
-
-Tested FTP PUT big file against Tru64, OK.  Ditto FTP RESEND big file:
-
-  C-Kermit>resend BIGFILE
-   PUT BIGFILE (binary) (3000000001 bytes)---> PASV
-  227 Entering Passive Mode (15,170,178,171,13,186)
-  ---> SIZE BIGFILE
-  213 343211280
-  ---> MDTM BIGFILE
-  213 20060707141243
-  ---> APPE BIGFILE
-  150 Opening BINARY mode data connection for BIGFILE (128.59.59.56,45470).
-
-Made REPUT a synonym for RESEND.  ckuusr.c, 7 Jul 2006.
-
-Added FTP REPUT and FTP RESEND since previously there was no FTP-prefixed
-command for recovering uploads, only the regular RESEND command, which might
-not have been obvious to people.  ckcftp.c, 7 Jul 2006.
-
-Added help text for FTP RESEND and REPUT and amended RESEND help text.
-ckcftp.c, ckuus2.c, 7 Jul 2006.
-
-Changed name of \fpicture() to \fpictureinfo() and added help text.  By the
-way, ImageMagick can do this too: identify -format "%w %h" dscf0520.jpg.
-The advantage of having it in Kermit is that not everybody has ImageMagick.
-ckuus[24].c, 7 Jul 2006.
-
-Changed the numeric comparisons = < > <= >= != to allow long integers by
-changing the data type to CK_OFF_T, etc.  ckuus6.c, 7 Jul 2006.
-
-Noticed that \fkeywordvalue(foo=this is a string) only kept the first word.
-Fixed it to keep the whole definition.  Also added \fkwvalue() as a briefer
-synomym.  ckuus4.c, 7 Jul 2006
-
-Sometimes we want to check if a file's status before we've FOPEN'd it, in
-which case the channel variable is likely to be empty and \f_status(\%c)
-would get an error.  Making the obvious change didn't fix this, however.  It
-turns out that the function evaluator failed to adjust argn (argument count)
-when trailing arguments were empty, and argn was being used in this case,
-and probably others, to test whether an argument existed.  I added code to
-adjust argn to reflect the number of aruments up to and including the
-rightmost non-empty one.  ckuus4.c, 7 Jul 2006.
-
-Fixed \fstripb() to not dump core if second argument is missing.
-ckuus4.c, 7 Jul 2006.
-
-Discovered that it was not obvious what pattern to use to match strings
-enclosed in square brackets.  "if match [abc] \[*\]" didn't work.  Neither
-did various other tricks like NCRs for the brackets.  However, "if match
-[abc] \\[*\\]" does work.  Trying to fix this would no doubt break 100 other
-things, so let's call it a feature.  7 Jul 2006.
-
-Added \fgetpidinfo(n) to return info about a process ID; for now it simply
-returns 1 if the process is alive and 0 if not (or -1 if the argument is
-bad or missing or on any kind of error).  ckuusr.h, ckuus[24].c, 7 Jul 2006.
-
-The "where-did-my-file-go" message seemed to be ending with a LF rather
-than CRLF, probably because the terminal modes had not yet been restored,
-leaving the next prompt hanging below it, rather than on the left margin,
-if C-Kermit exited immediately after the transfer.  Fixed by changing
-all \n's to \r\n's in wheremsg(): ckcpro.w, 8 Jul 2006.
-
-Added \v(lastkwval) so we can retrieve programmatically the keyword most
-recently processed by \fkeywordval().  ckuusr.h, ckuus4.c, 9 Jul 2006.
-
---- Dev.20 ---
-
-Added #ifdef SV68, #include <unistd.h>, #endif because Unix System V/68 on
-Motorola choked on the SEEK_CUR reference without it.  ckuus4.c, 10 Jul 2006.
-
-Make \fkeywordval(xxx) undefine xxx (i.e. when a keyword is given with no
-value).  This way command-line keywords will always override preexisting
-default definitions, whether they have a value or not, which makes it easier
-to parse command lines like "foo=bar blah xx=yy".  ckuus[24].c, 12 Jul 2006.
-
-On 29 Nov 2005 I changed IF KERBANG to solve a problem (see entry for that
-date), but introduced a new one; namely that you can't have (e.g.)  a FATAL
-macro that uses IF KERBANG to decide whether to EXIT all the way or STOP
-back to the prompt.  Changed it again, this time to require not that the
-command level be 1, but that the command *file* level be 0 (i.e. that we are
-in the top-level command file, irrespective of the command or macro level,
-but not in a subfile).  ckuus6.c, 12 Jul 2006.
-
-It is unhelpful when Kermit gets a syntax error in the middle of a big
-compound statement block (e.g. FOR or WHILE loop) and dumps out the whole
-thing in an error message.  I changed the two places where this can happen
-to call a new routine that, instead of dumping out the entire cmdbuf,
-checks its length first and if it's more than a line long, truncates it
-and adds an ellipsis.  ckuus6.c, 12 Jul 2006.
-
-The new RENAME command didn't give very good error messages, e.g. if the
-filespec didn't match any files.  Fixed in dorenam(): ckuus6.c, 12 Jul 2006.
-
-Fixed DIR /TOP to work if the /TOP:n argument was omitted, defaulting
-to 10.  domydir(): ckuus6.c, 12 Jul 2006.
-
-Added DIR /COUNT:v to count the number of files that match the given
-criteria and store result in the variable v.  ckuusr.h, ckuus[r26].c,
-24 Aug 2006.
-
-Added HDIRECTORY as an invisible synonym for DIR /SORT:SIZE /REVERSE.
-Can be used with other switches, of course, so (e.g.) HD /TOP shows the
-ten biggest files.  ckuusr.h, ckuus[r26].c, 24 Aug 2006.
-
-DIR /FOLLOWLINKS and /NOFOLLOWLINKS always did the same thing; the switch
-was ignored, a symlink is always followed.  Fixed in ckuus6.c, 24 Aug 2006.
-
-Added DIR /NOLINKS, which means don't show or count symlinks at all.
-ckuusr.h, ckuus[r26].c, 24 Aug 2006.
-
-Build on Solaris 9 and NetBSD 3.0, 24 Aug 2006.
-
-Added a missing definition for LOCK_DIR in the Linux HAVE_BAUDBOY case,
-suggested by Gerry Belanger.  ckutio.c, 6 Oct 2006.
-
-Suggested by Jim Crapuchettes: \v(dialmessage) is the text string
-corresponding to \v(dialstatus).  ckuusr.h, ckuus4.c, 6 Oct 2006.
-
-Soewono Effendi sent code for exit sequence to leave DTR on; this amounted
-to unsetting HPUCL in c_cflag.  I did it a simpler way, hopefully portable
-to all Unixes, but who knows at this late date.  The code is inside
-#ifndef CK_NOHUPCL..#endif in case it causes trouble.  It is executed if
-SET EXIT HANGUP is OFF and a serial port was open at the time Kermit exits
-(or closes it explicitly).  ttclos(): ckutio.c, 6 Oct 2006.
-
-Built on Solaris9/Sparc; FreeBSD 6.2/AMD64; NetBSD 3.0/i386; HP-UX 11i v2;
-SCO OSR6.00.
-
---- Dev.21 ---
-
-Added netbsd+openssl target to makefile.  Built OK (NetBSD 3.0, OpenSSL
-0.9.7d) except with some warnings in ck_crp.c.  Connects and logs in OK to a
-secure site.  10 Oct 2006.
-
-Added a debug statement to ftp_hookup() to record the TCP port that was used.
-ckcftp.c, 11 Oct 2006.
-
-Built with OpenSSL 0.9.7l on Solaris 9.  Built with OpenSSL 0.9.8d on
-Solaris 9; connects and logs in to a secure site.  11 Oct 2006.
-
-The new RENAME command didn't work if both the source and destination names
-included directory segments, e.g. "rename /tmp/foo ~/bar" (see notes of
-4 May 2006).  This was fixed in renameone() by a special case in which
-the second argument is given but it is a filename, not a directory name.
-ckuus6.c, 11 Oct 2006.
-
-Fixed unguarded reference to dialmsg[] for \fdialmessage(), noticed by
-Gerry Belanger.  ckuus4.c, 12 Oct 2006.
-
-Added a TOUCH command that does what UNIX touch does: creates the file if it
-does not exist, updates the timestamp if it does.  If a wildcard is given,
-it operates only on existing files.  It shares the DIRECTORY command parser,
-so all the same file selection switches can be given.  ckuusr.[ch],
-ckuus[26].c, 12 Oct 2006.
-
-PeterE noticed that if you FOPEN a file, do some seeks or reads, then FCLOSE
-it, then FOPEN it again (or open a different one), some of the old
-information is still there (e.g. current line number).  This is an artifact
-of the changes of May 4th.  Now the file closing and opening routines are a
-bit more careful about scrubbing and initializing the file info struct.
-ckuus7.c, 12 Oct 2006.
-
---- Dev.22 ---
-
-Built OK on Red Hat Linux AS4 with both "make linux" and "make linuxnc". 
-15 Oct 2006.
-
-DIRECTORY /BRIEF ignored file selection switches and always listed all
-files.  This was because of how I cleverly called filhelp() (the routine
-that lists matching files when ? is typed in a filename field) and, of
-course, filhelp() doesn't know anything about the DIRECTORY command's file
-selections.  Changed filhelp() to accept all the args needed for passing
-along to fileselect(), renamed it to xfilhelp(), and made a filhelp() stub
-that chains to xfilhelp() with null selections.  ckcker.h, ckucmd.[ch],
-ckuus6.c, 29 Nov 2006.
-
-SHOW CONNECTION for an SSH connection said the connection type was "NET"
-rather than "SSH".  Fixed in dolognet(): ckuus3.c, 29 Nov 2006.
-
-SHOW CONNECTION didn't show the TCP port number.  This command works by
-parsing the current connection log entry string, which doesn't have a field
-for this, but which sometimes shows the port number as part of the hostname
-(but more often not).  Added code to dolognet() to log the TCP port number,
-if known.  This involved adding a gettcpport() function to ckcnet.c.
-ckcnet.[ch], ckuus3.c, 29 Nov 2006.
-
-This was impossible: def \%1 upper, echo \f\%1(abc) -- i.e. to "compose" a
-function name.  Fixed in zzstring().  But note that it's still not possible
-to do this: def \%1 \fupper, echo \%1(abc) -- because at the point where
-"\fupper" is encountered, which is automatically fed to fneval(), the
-argument list hasn't been read yet.  ckuus4.c, 29 Nov 2006.
-
-The meaningless Lisp command (=) would cause Kermit to hang.  Due to some
-idiosyncracy in the parser, it would see this as ((=) and would go into
-"wait for the closing paren" mode.  There was already a hack in the code to
-compensate for this, but it didn't work.  I fixed the hack but I don't
-understand the real problem.  Anyway, comparing Kermit with real (Franz)
-Lisp I discovered that comparison operators do not require two arguments, as
-Kermit has been doing, although they do require at least one.  I changed
-Kermit to not require two, so now all the comparison predicates behave
-exactly like Franz Lisp, including getting an error if there are no args).
-ckuus[r3].c, 29 Nov 2006.
-
-From to-do list: Make a way to inhibit pattern matching in SWITCH labels.
-It's already there; just quote the wildcard characters; the only trick is
-that for some reason (such as that SWITCH is really an internally defined
-macro), a double quote is needed:
-
-  switch \%1 {
-    :a\\*z, echo literally "a*z", break
-    :abcxyz, echo literally "abcxyz", break
-    :a*z, echo a...z, break
-    :default, echo NO MATCH
-  }
-
-In first case, the asterisk is taken literally; in the third it's a
-metacharacter and the label matches any string that starts with 'a' and
-ends with 'z'.
-
-Array initializion would quit early if any initializers were undefined,
-e.g. "decl \&a[] = \%a \%b \%c" would stop at the first element if \%b
-was not defined, even though \%c might be defined.  Fixed in dodcl():
-ckuusr.c, 30 Nov 2006.
-
-DIR /ARRAY:a filespec, when the filespec does not match any files,
-terminates with the array undeclared.  It would be better to return a
-declared but empty array (\&a[0] = 0).  The code is already there to do
-that, but isn't working.  And yet "declare \&a[0]" does indeed create a
-0-element array ("show array" shows a dimension of 0).  Turns out there were
-two problems; one was the careless recycling of a local variable ("array"),
-resulting in failure to create \&a[] (but not any other array).  Fixed in
-domydir(): ckuus6.c, 30 Nov 2006.
-
-The other problem was that dclarray(), when called with an array name and a
-dimension of zero, does two different things depending on whether the array
-already existed.  There is still a fair amount of confusion about whether a
-dimension of 0 indicates an array with 1 element (as it should) or a
-nonexistent array.  We call dclarray() with a size of 0 to undeclare an
-array but we also need to able able to declare an array with only element 0.
-I changed dclarray() to treat a negative dimension as a command to destroy
-the array, and 0 or positive as a command to create the array with the given
-dimension.  ckuus[r56].c, 30 Nov 2006.
-
-Next problem: when chkarray() returns 0, this should not be interpreted to
-mean the array does not exist.  Looks like the only place this happened was
-in \fcontents(); fixed in ckuus4.c, 30 Nov 2006.
-
-If we include file selectors with DIR /ARRAY:&a and some of the files that
-match the given filespec but don't fit the selectors, the array's dimension
-is bigger than its number of elements.  Added code at the end of domydir()
-to resize the array so \fdim() returns the number of filenames in the array,
-and also made sure that element 0 contains that number too.  ckuus6.c,
-30 Nov 2006.
-
-This would be a nice elegant way to loop over a bunch of files, if it worked:
-
-  for \%i 1 \ffiles(*) 1 { rename \fnextfile() xxx_\flpad(\%i,3,0) }
-
-But in this loop, Kermit skips every other file (beginning with the first)
-and then runs out of files halfway through the loop.  Why?  Because in
-commands like RENAME and DELETE, the filename parser is in a chained FDB
-with the switch parser.  First the switch parser, cmswi(), gets its hands on
-\fnextfile(), passing it through the evaluator and thus getting the first
-filename, which it then sees is not a switch, so now the field is parsed by
-the next parser in the chain, cmifi(), which causes \fnextfile() to be 
-executed again.  In fact, the FOR loop has nothing to do with; the same
-thing happens like this:
-
-  void \ffiles(*)
-  delete \fnextfile()
-
-This deletes not the first file, but the second one.  Obviously users can be
-told not to refer to \fnextfile() in chained-fdb fields:
-
-  for \%i 1 \ffiles(*) 1 { .f := \fnextfile(), delete \m(f) }
-
-but this is hardly intuitive.  I had some clever ideas of how to make
-\fnextfile() work as expected in this context but it's way too much magic.
-Better to simply document that \fnextfile() is "deprecated" and the array
-format should be used:
-
-  for \%i 1 \ffiles(*,&a) 1 { delete \&a[\%i] }
-
-The difference is, an array element doesn't change every time it's referred to!
-
-Added a /PRESERVE switch to the COPY command to preserve the timestamp and
-permissions of the file.  I did this using the Kermit APIs so it should work
-for any version of C-Kermit or K95.  ckuus[26].c, 30 Nov 2006.
-
-Added COPY /OVERWRITE:{ALWAYS,NEVER,OLDER,NEWER} to control name collisions
-when copying across directories.  ckuus[26].c, 1 Dec 2006.
-
---- Dev.23 ---
-
-Fixed a bug in SET TELNET PROMPT-FOR-USERID, SET AUTH KERBEROS[45] PROMPT,
-and SET AUTH SRP PROMPT in which the user's string was compared with a
-literal (s == ""), reported by Pavol Rusnak.  Worse, empty strings (if the
-test succeeded) were turned into null pointers, and then fed to strlen().
-Fixed in ckuus3.c, 5 Dec 2006.
-
-Added an optional 4th argument to \findex(), \frindex(), \fsearch(), and
-\frsearch(): the desired occurrence number of the searched-for string.
-\frsearch() was a bit tricky.  ckuus[24].c, 7 Dec 2006.
-
-Added \fcount(s1,s2) to tell the number of occurrences of s1 in s2.
-ckuus[24].c, 8 Dec 2006.
-
-Added \ffunction(s1) to tell if a given built-in function is available.
-ckuus[24].c, 8 Dec 2006.
-
-Changed RENAME /COLLISION:PROCEED to be /COLLISION:SKIP, which is clearer.
-ckuus[26].c, 8 Dec 2006.
-
-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.  ckuusr.[ch],
-ckuus4.c, 8 Dec 2006.
-
-There was 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 to GMT changes the date, the variables for day, month, and
-year (which are used later) were not updated, and the final result was a day
-off.  Fixed in cmcvtdate(): ckucmd.c, 10 Dec 2006.
-
-Built OK with SSL/TLS.  Tested with the POP script, found that I broke INPUT
-when adding the /COUNT feature; there was a path through the code that could
-leave the "anychar" variable unset and therefore random.  Fixed in
-doinput().  The POP script, which does not use /COUNT, works again and so
-does a new CGI script, which does use /COUNT.  ckuus4.c, 10 Dec 2006.
-
-Supplied a missing comma in the help-text array for HELP SET TERMINAL, which
-resulted in bad formatting in K95 around SET SNI-FIRMWARE-VERSIONS.
-ckuus2.c, 10 Dec 2006.
-
-Made "help locus" a synonym for "help set locus".  ckuusr.[ch], ckuus2.c,
-11 Dec 2006.
-
-This morning the Columbia FTP server was malfunctioning in a perfect way
-for me to implement and test an FTP timeout mechanism.  The server would
-close the data connection after sending the file, but the client never saw
-the close and was stuck forever in a recv().  I added code to do a select()
-on the data connection prior to entering the recv(), with a timeout on the
-select() that the user can establish with SET FTP TIMEOUT.  Built and tested
-on Solaris 9, clear-text FTP.  Also built cleanly for FTPS and tested
-against a server that does not hang; I don't have access to an FTPS server
-that would tickle the timeout code.  ckcftp.c, 11 Dec 2006.
-
---- Dev.24 ---
-
-Fixed a bug in the INPUT /COUNT: parser: the array of search strings was
-never initialized, which didn't matter before, but with /COUNT:, if the
-first element was not a NULL pointer, we'd treat it as a search string, and
-then if it happened to match something in the input stream, the operation
-would stop before the count was exhausted.  Fixed by (a) initializing the
-array, and (b) ignoring any search strings if /COUNT: was given.  ckuusr.c,
-13 Dec 2006.
-
-Removed a debug() statement from zsattr() that suddenly started making some
-version of gcc complain, reported by Gerry Belanger.  ckufio.c, 13 Dec 2006.
-
---- Dev.25 ---
-
-Some casts for the 3 interior args of the new select() call in ckcftp.c
-for HP-UX 9.  14 Dec 2006.
-
-Changed \fkeywordvalue() to accept a string rather than a single word
-as its second argument, so that more than one separator could be specified,
-and to return -1 on error, 0 if it found nothing, 1 if given a kewyord but
-no value, and 2 if there was a keyword and a value.  dokwval(): ckuus[24].c,
-14 Dec 2006.
-
-Checked FTP timeout on command channel with FTP DIRECTORY of a big directory
-using a path into our ftp server that preserves the hanging behavior.  The
-timeout was actually working, but the failure condition wasn't propogating
-back to the user, and there was no error message.  Fixed in doftprecv2() and
-failftprecv2(): ckcftp.c, 15 Dec 2006.
-
-Added the obvious timeout checks for FTP uploads, but I have no way to test
-the code since our misbehaving FTP server does not hang when receiving
-files, only when sending them.  But uploads work both with and without a
-timeout set, so at least no harm is done.  ckcftp.c, 17 Dec 2006.
-
-When downloading with FILE DESTINATION NOWHERE (= /CALIBRATE), Kermit still
-checked the size of the incoming file and refused it if there wasn't enough
-free disk space, on platforms (such as VMS) where zchkspa()) actually works;
-reported by Bob Gezelter.  ckcfn3.c, 18 Dec 2006.
-
-Built on Mac OS X 10.4.8 and NetBSD 3.1_RC3, all OK.  19 Dec 2006.
-
---- Dev.26 ---
-
-Built on VMS 7.3-2/Alpha.  Had to squelch a couple compiler warnings by
-changing some ints in the new \fpictureinfo() code from unsigned to signed,
-and fix a typo in the prototype for the new gettcpport() function.
-ckcnet.h, ckuus4.c, 22 Dec 2006.
-
---- Dev.27 ---
-
-Parameterized pty routines and all references to them for file descriptor,
-rather than to use global ttyfd, thus allowing ptys to be created for
-different purposes.  Tested on Solaris 9 and Mac OS X 10.4.8, with "set host
-/connect /pty emacs" (fine in both cases), and (more to the point) "set host
-/connect /pty kermit" -- here we make a connection from one Kermit process
-to another and transfer a file; works fine and wasn't especially slow either;
-a good sign.  ckcdeb.h, ckutio.c, ckupty.c, 22 Dec 2006.
-
-Created a new version of ttruncmd() called ttyptycmd(), which works by
-calling do_pty() to get a pty to run the command on, and then in a loop,
-reads from the pty and writes to the net and reads from the net and writes
-to the pty, using select() to which of those it should do on each pass.
-First cut just uses single-byte reads and writes.  Tested using Kermit
-itself as an external protocol.  Works but slowly: 6000cps.  Zmodem doesn't
-work at all.  ckutio.c, 24 Dec 2006.
-
-Changed single-character read() and write() to buffered reads and writes,
-with ttxin() and ttol() used for network i/o.  Using Kermit as the external
-protocol, this gives 450Kcps (about 1/3 normal on this connection).  
-
-But now there's a problem: the loop doesn't know when to stop.  How does it
-know when the process that is running on the pty has exited?  With single
-character read()'s that are executed unconditionally when select() says the
-pty has data waiting, as in the first pass, I get EIO if there actually
-isn't any, and can exit the loop.  But now, to avoid blocking, I call
-in_chk() to see how much data is waiting, and I don't try to read anything
-if it says nothing is waiting.  If the process associated with the pty file
-descriptor has terminated, in_chk() would presumably get some kind of error,
-but it doesn't.  I changed do_pty to return the pid of the fork where it
-execs its command so we can check the pid with kill(pid,0) when in_chk() of
-the pty says 0, but this doesn't help either; it seems like the process is
-not exiting, but of course it is.
-
-I could not find any legitimate way to test when the pty fork terminated.
-Select() always says the pty file descriptor was ready, no matter what.
-Select() never reports an exception on the pty file descriptor;
-in_chk(ptyfd) returns 0 and not an error.  read(ptyfd,...) gets 0 but not an
-error.  fcntl(ptyfd,...) doesn't get an error.  Finally I tried
-write(ptyfd,c,0) and this indeed gets EIO (i/o error).  With this, using
-Kermit as the external protocol works fine in Solaris but I tend to think
-this trick will not be very portable (it isn't).  24 Dec 2006.
-
-Made ttptycmd() use a more intelligent buffering scheme, fixed a few things
-about how I was setting up the select() call that should address some of
-yesterday's problems.  Still doesn't work but it's progress.  A: 25 Dec 2006.
-
-Debugging yesterday's code...  Still, the error conditions are never set,
-we never detect when the pty closes.  In Solaris, if select() says ptyfd is
-ready to read but in_chk() says there are no characters there, we can treat
-this as a loop-exit condition.  But in NetBSD, in_chk() always says 0 when
-used on a pty (but works OK on a serial or net connection).
-
-Realized I could not use in_chk() on the pty because there is too much
-baggage with the communication path -- myread(), etc etc) -- so I replaced
-this with a simple ioctl(ptyfd,FIONREAD,&n).  This works fine in Solaris but
-always returns 0 in NetBSD, despite what the man page says (i.e. that this
-function can be used on any file descriptor).
-
-OK, let's see.... select() does not return useful results.  It says
-characters are waiting on ptyfd when they are not, and it never detects the
-closure of the pty.....  Well of course not, because we are the ones who
-have to close it.  Just because the process has stopped doesn't mean the pty
-is closed.  So we're back to square one, how do we know when to close it?
-ckupty.c seems to keep the process ID in a global variable, pty_fork_pid
-(which is not the same as the pid now returned by do_pty(), which is
-useless, but I don't understand why).  But it doesn't matter because when we
-kill(pty_fork_pid,0), we still get no error of any kind, even after we know
-the process has exited.  I am completely flummoxed.  select() lies, and even
-if it didn't, there is simply no completion criterion.  In the loop,
-select() always says that the pty is ready to read.  To be continued.
-26 Dec 2006.
-
-Back to Square One, single-byte reads and writes.
-
- . This works for both ripple and Kermit.
- . Doesn't work for Zmodem but we'll deal with that later.
- . In this case FD_ISSET(ptyfd) is still true after pty closes.
-
-But the ensuing read() gets EIO so we know the pty is gone.  That means the
-same thing should happen in the buffered version, no?  Yes; I went back to
-the buffered version and replaced all the other nonworking tests by a
-blocking read of 1 byte on the pty and this detects the termination.  Now:
-
- . ripple works perfectly (of course it's only one-way).
- . Kermit fails
-
-Let's call the remote, forked, redirected, external Kermit A and its
-local partner B.  A sends its S-packet, B receives it OK and Acks.
-A apparently does not receive the ACK in time, so sends the S again, but OK.
-followed immediately by the F.  B Acks the F.  A sends the A, B Acks it.
-But now A sends a piece of the previous F packet and the the first piece
-of a D packet.
-
-Clearly the buffering is messed up.  Sure enough, there was an extraneous
-statement incrementing a read pointer in a write section.  Removing that
-cleared up the problems with Kermit, now we can send and receive substantial
-files efficiently in remote mode.  Zmodem seems to work too, except that at
-the beginning a bunch of "**B0800000000022d"'s are stuffed into Kermit's
-command buffer, so after the transfer we get some error messages.
-
-In local mode, over a Telnet connection, Kermit works fine.  Zmodem works
-OK too except it doesn't finish right, so at the very end rz on the far end
-is still waiting for something; if I cancel out of it with ^X^X^X^X^X, it
-deletes the file.  So there still is something wrong with the termination
-test.
-
-Also you don't see anything on your screen when running Kermit or Zmodem
-this way.  That's to be expected, since they are using stdio for the
-transfer, so they can't also be displaying progress or other messages.
-
-Built this on NetBSD again...  Seems to work this time, but has trouble
-finishing, like Zmodem.  Hmmm, on closer examination, it turns out that
-since in_chk() always returns 0 on the ptyfd, we fall into our new
-single-byte read code, so it's really slow, like 10K cps on a connection
-where 1M is the norm.  27 Dec 2006.
-
-Switched the pty from buffer peeking (FIONREAD) and blocking reads to to
-nonblocking reads (O_NONBLOCK / O_NDELAY).  Works just fine on NetBSD except
-now we no longer get EIO at the end when trying to read from the pty process
-that has exited.  In fact, we're back to square one again.  not ioctl(), not
-fcntl(), not select(), not even read() gets an i/o error after the pty
-process exits.  But in NetBSD, we have to use nonblocking reads because ...
-Hmmmm, maybe switch the fd between blocking and nonblocking for the test...
-Nope, NetBSD seems to be hopeless (later, Ed Ravin confirmed that similar
-problems have been observed with other applications that try to do this).
-
-Switching to Linux, I see that yesterday's Solaris code (blocking reads)
-works exactly the same way on Linux.
-
-Tried today's O_NDELAY method on Solaris.  It works perfectly.  And then I
-moved this one to Linux and it works perfectly there too.  Except in both
-cases we have the wierd thing with Zmodem at the end, but I think that's
-because rz/sz don't use standard i/o.  On NetBSD, it still hangs at the end.
-
-Turns out that testing the pid works in NetBSD, even though it didn't in
-Solaris.  Turns out read() gets an i/o error in Solaris and Linux but not
-in NetBSD.  So checking the read result first, and then checking the pid
-if read() got zero bytes catches all three.  28 Dec 2006.
-
-Now the question of return code.  In the original ttruncmd() function, we do
-a fork() and a wait().  When the external protocol program finishes, wait()
-gives us its return code and we can pass it on through \v(pexitstat) as well
-ttruncmd's own return code.  But ttptycmd() has to interact with the pty
-continuously, so it can't just sit back and wait() for it.  Instead we have
-to detect when the process has exited and then call waitpid() on the fork
-pid, before shutting down the pty.  Tested on Solaris using Kermit as the
-external protocol and then inducing failure, or letting it run to
-completion.  FAILURE and SUCCESS set appropriately in each case.  Tested
-with Zmodem too, works OK except for the aforementioned cosmetic glitch at
-the end.  Tested on NetBSD, all OK.
-
-To make K5 connection to Panix from Spam:
-
- set telnet debug on
- authenticate K5 init /realm:PANIX.COM /password:xxxxx
- set host shell.panix.com 23 /k5login
-
-Good...  Now I try to send a file from Spam to Panix over the K5 connection
-using Kermit itself as the external protocol.  It fails.  Inspection of the
-debug log on the far side shows that the S-Packet was received correctly,
-good!  This means we are reading the clear-text S-Packet from the external
-Kermit program, and that ttol() is encrypting appropriately.
-
-The remote Kermit sends the Ack and goes to read the next packet: ttinl()
-calls myfillbuf() and:
-
-  SVORPOSIX myfillbuf calling read()
-  SVORPOSIX myfillbuf=0                <-- read returns 0
-  SVORPOSIX myfillbuf ttcarr=2
-  SVORPOSIX myfillbuf errno=0          <-- and reports no error
-  HEXDUMP: mygetbuf read (-3 bytes)
-  mygetbuf errno=0
-  ttinl myread failure, n=-3
-  ttinl myread errno=0
-  ttinl non-EINTR -3[closing]
-
-This happens because myfillbuf() deliberately returns -3 when read() gets 0
-bytes.  I don't understand why this happens but the real problem is yet to
-come.  The local Kermit (the one that has made the secure connection and is
-running the external protocol through ttptycmd()) eventually figures out
-that the transfer failed and when we reconnect, we get total garbage -- the
-encryption either stopped happening, or got out of sync.
-
-Looking at the local debug log, ttol() is doing its job, converting the
-initial "kermit -r\13" from plaintext to cyphertext, as shown by the
-hexdumps.  Then it enters ttptycmd()...  Hmmmm, wait, how can it send the
-"kermit -r" before it starts the external protocol?  Never mind, worry about
-that later...  Anyway, ttptycmd() says:
-
-  ttptycmd loop top have_pty=1
-  ttptycmd loop top have_net=1
-  ttptycmd FD_SET ptyfd in
-  ttptycmd FD_SET ttyfd in
-  ttptycmd nfds=5
-  ttptycmd select=1
-  ttptycmd FD_ISSET ttyfd in
-  ...
-  ttptycmd in_chk(ttyfd) n=11
-  ttptycmd ttxin n=11
-
-ttxin() asks for 11 bytes, myfillbuf() gets 11 bytes, and hexdump() shows
-the cyphertext, there doesn't seem to be any decrypting going on.  Hmmm, it
-looks like the regular code calls ttinc() in a loop, rather than ttxin().
-Maybe ttxin() doesn't have decryption hooks.  No, that's not it, the code is
-there, but the Kermit packet reader does not use ttxin(), it uses ttinl().
-But of course we can't use that for external protocols because it's designed
-only to read Kermit packets.  Substituting a loop of ttinc()s for the ttxin()
-call fixes things (and stangely enough, it seems to be faster).  And now we
-have our first external protocol transfer over a secure connection (external
-Kermit program, Linux over Kerberos 5 to NetBSD).  Zmodem worked too for a
-short file but "something happens" with longer ones.  29 Dec 2006.
-
-New makefile target for Linux with Kerberos 5, linux+krb5, that doesn't
-include anything extra from SSL or other security methods (but apparently it
-is still necessary to include -DOPENSSL_097 in order to get the right names
-for the DES routines?).  Ditto netbsd+krb5 for NetBSD, except in this case
--DOPENSSL_097 is not necessary.  makefile, 30 Dec 2006.
-
-Note to myself: On Panix:
-
-  export LD_LIBRARY_PATH=/usr/local/kerblib
-  make netbsd+krb5 "K5LIB=-L/usr/local/kerblib" "K5INC=-I/usr/local/include"
-
-Can't telnet-k5 from newly built Kermit on NetBSD; partway through the
-negotiations, just after "TELNET RCVD SB ENCRYPTION SUPPORT DES_CFB64
-DES_OFB64 IAC SE" it dumps core.  The last two lines in debug.log after
-this are:
-
-  tn_sb[len]=5
-  encrypt_support[cnt]=2
-
-Rebuilding with -DOPENSSL_097 doesn't change anything.  Ed Ravin said they
-have two different Kerberos installations, Heimdahl and MIT; maybe some
-mixup between the two explains the problem (Jeff concurs). The core dump
-occurs in ck_crp: encrypt_support():
-
-   debug(F100,"XXX ep not NULL","",0);
-   type = ep->start ? (*ep->start)(DIR_ENCRYPT, 0) : 0; <-- Here
-   debug(F101,"XXX new type","",type);
-
-Anyway, I can log in with Kerberos 5 to Panix OK from Columbia (sesame)
-using 8.0.201.  So let's try to resurrect the Solaris version with everything:
-
-  solaris9g+krb5+krb4+openssl+shadow+pam+zlib
-
-I hunted around to find where the current library and header file
-directories were...  Last time I tried this (March 2006) it bombed, not
-finding libdes.  Instead we have /opt/kerberos5125/lib/libdes425.a.  Made a
-new cu-specific target that includes this; now we get farther; it blows up
-in ckcftp.c with tons of errors and warnings, which we can worry about
-later.  Building again with -DNOFTP, it gets to ckuath.c (the first security
-module) and:
-
-  ckuath.c:151:18: error: krb5.h: No such file or directory
-  ckuath.c:152:21: error: profile.h: No such file or directory
-  ckuath.c:153:21: error: com_err.h: No such file or directory
-  ckuath.c:176:28: error: kerberosIV/krb.h: No such file or directory
-  In file included from /opt/openssl-0.9.8d/include/openssl/des.h:101,
-                  from ckuath.c:219:
-
-Found krb5.h in /opt/kerberos5125/include/krb5.h, added a -I for this
-directory ...  Now we get lots of warnings in ckuath.c, but it completes OK,
-then we wind up bombing out in ck_crp.c; I don't know why -- there are all
-the same warnings (related to argument passing to DES functions), but no
-errors.  I have no clue.
-
-Tried to resurrect the solaris2x+krb4 target; this required changing -lkrb
-to -lkrb4 and -ldes to -ldes425.  Lots of warnings in ckutio.c, ckcnet.c,
-ckctel.c, then it bombs out in ckcftp.c because it can't find krb.h.  I
-found it, adjusted the -I flags, but now it bombs because krb.h itself
-#includes <kerberosIV/des.h>, which of course it can't find because the
-brackets mean it's looking in /usr/include/kerberosIV/, which, of course,
-the sys folks have removed.  Giving up on Solaris again.  Later, Jeff said
-"Solaris does not publicly export the krb5 libraries.  You need to build
-the MIT Kerberos libraries separately and link to them."  30 December 2006.
-
-Changed copyright date to 2007.  ckcmai.c, 1 Jan 2007.
-
-With Ed Ravin's help, successfully built C-Kermit with Kerberos 5 and
-OpenSSL (netbsd+krb5+openssl+zlib), but it does not make K5 connections; it
-gets hung up in the Telnet negotiations.  3 Jan 2007.
-
-Downloaded MIT Kerberos 5 v1.4.4 to Solaris 9, 54MB worth.  This is just so
-I can build a Kerberized C-Kermit for testing ttyptycmd().  Ran the
-configure program, got a few warnings but it didn't fail (should it?)  Did
-"make install", specifying a private directory but it failed immediately
-with "cannot stat libkrb5support.so.0.0: No such file or directory".
-OK, I tried.  3 Jan 2007.
-
-Made a new makefile target for Mac OS X, macosx10.4+krb5+ssl, ran it on Mac
-OS X 10.4.8.  It bombs out in ckcftp.c with: ckcftp.c:551: error: static
-declaration of 'gss_mech_krb5' follows non-static declaration
-/usr/include/gssapi/gssapi_krb5.h:76: error: previous declaration of
-'gss_mech_krb5' was here".  Ditto for gss_mech_krb5_old, gss_nt_krb5_name,
-and gss_nt_krb5_principal.  Tried again with -DNOFTP.  We get lots of
-warnings in the network modules, but they complete.  But ck_ssl.c bombed
-with a conflict between its own declarations of encrypt_output and
-decrypt_input and the ones in ckuat2.h; removed the prototypes from the
-latter (as Jeff advised) it built OK and it works OK too.  Built with FTP
-too, but with link-time warnings about the aformentioned gss_* symbols.
-#ifdef'd them out (gss_mech_krb5, gss_mech_krb5_old, gss_mech_name, and
-gss_mech_principal) for MACOSX, where these symbols are exported by the
-library.  Now it all compiles and links OK, and runs OK too.  3 Jan 2007.
-
-Spent a day hunting around for a version of Zmodem that would build and
-execute on Mac OS X, finally found one.  Now at last I could try a Zmodem
-external-protocol transfer over a secure connection.  But phooey, C-Kermit's
-pty support didn't work on this box.  Kermit finds master /dev/ptypa OK,
-then in ptyint_void_association() tries to open /dev/tty but gets ERRNO=6
-"device not configured" (which is apparently OK, because the same thing
-happens on other platforms where this works), then tries to open slave
-/dev/ttypa and gets ERRNO=13 "permission denied" because, indeed, I don't
-have r/w permission on the device.  Left a message.  4 Jan 2007.
-
-Changed TRANSMIT /BINARY output buffer size from 252 to 508 to avoid
-TCP fragmentation.  Need to add a SET command for this later.
-ckuus4.c, 5 Jan 2007.
-
-Found another Mac where the ptys weren't protected against me, make a K5
-connection and transferred a largish file with Zmodem with zero glitches,
-except it was kind of slow, 84K cps.  Well, we're doing single-character
-reads on the net (ttinc()'s instead of ttxin()).  Hmmm, but then I did it
-again and got 2.2Mcps.  Success was reported, but it actually didn't work;
-it only sent the first quarter of the file....  Oh well, at least now we
-have a testbed.  5 Jan 2007.
-
-Tried again, saw that the file is actually transferred instantly but then
-we're not picking up the protocol at the end.  Theory: after the transfer
-finishes, we come back to the prompt on the remote host, which means we have
-something to read from the net and write to the pty, but the pty has already
-exited.  AFTER THE PTY IS GONE, WE DO NOT WANT TO READ FROM THE NET ANY
-MORE.  Adding this test makes Kermit succeed right away when sending the
-same largish file, with a transfer rate of 4M cps, that's better.  But the
-rz program on the far end is evidently not receiving the goodbye handshake
-from the receiver, because it sits there foreever in its *B09002402009418
-mode until I ^X^X^X^X^X out of it, at which point it deletes the file it
-already received, not very helpful.  In the code, I read from the pty if the
-pty is open and there is room in the buffer.  This means that when we get to
-the end, either there is no room in the buffer (unlikely) or the last bit
-sent by sz before exiting was cut off when the fork closed.  Why do we get
-in this fix only with Zmodem and not with Kermit?
-
-In Mac OS X, after sz exits, we get ERRNO=5 if we try to write to the pty,
-but we still get no errors after that if we try to read from it.  Still,
-prior to this we did more than 20 unproductive nonblocking reads from the
-pty (no error, no bytes) without incident; there did not seem to be anything
-waiting.  In fact, the last thing we read from the pty were the text
-messages that are issued at the end of the transfer: "rz 3.73 1-30-03
-finished."  After which it pauses a second and spits out a message about
-UNREGISTERED COPY.
-
-Figured out how to build lrzsz, in hopes that the previous problems were
-with rzsz and crzsz's fiddling with file descriptors, but I get the same
-behavior.  Which is good, I guess, because if I can fix one, I fix them all.
-Or not...  Testing lrz by itself (not under C-Kermit), I see that it doesn't
-work at all with Kermit's own Zmodem implementation.
-
-OK, here's one problem: at the end of the transfer, the Omen Zmodems print
-stuff like "Please read the license agreement", Kermit dutifully reads this
-from the pty and sends it to the host, the host shell says "Please: command
-not found", issues its prompt again, which Kermit reads, feeds to the pty,
-and apparently the pty echoes it, so we send it back to the host, and there
-ensues an infinite loop of getty babble until the pty closes.  Now, there
-ought to be a way to make the external protocol shut up, like Kermit's
--q(uiet) flag, but these are unregistered versions so you can't shut up the
-messages.  In fact, the transfer works, but the getty babble at the end
-ruins the experience.  Now I'm beginning to wonder how any of these programs
-ever worked as external protocols.  Hmmm, now that I try it, I see the
-same thing happens the old way, when using ttruncmd() rather than ttptycmd().
-
-Reading the crzsz documentation I see it says that messages come out on
-stderr.  OK, that's progress.  In ckupty.c I try redirecting 2 to /dev/null.
-Well good, this filters out the messages from csz, but we still get getty
-babble on the prompt.  In the debug log, we read the last bunch of stuff
-from net, 618 bytes of Zmodem stuff...   Now what happens?
-
-Zmodem on the remote exits, the host prints its prompt.  Kermit, of course,
-reads the prompt from the net, now come to the bottom of the loop and we
-have 7 bytes to write to the pty, and no error condition, so we continue the
-loop.  select() says that the pty is ready for writing.  We write the 7
-bytes and and get no error.  Loop again, this time select() says the pty has
-data waiting.  Sure enough we get the prompt back, and send it to the net,
-and thus begins the getty babble.  There are two causes for this:
-
-  1. crzsz does not exit immediately; it sleeps for 10 seconds after
-     printing its nag message.
-
-  2. During this interval the pty seems to be echoing what is sent to it.
-     csz is not echoing; I checked.  Anyway, removing the pause doesn't
-     seem to make a difference.
-
-ttptycmd() needs to:
-
- . TELL the pty module to redirect stderr to /dev/null
- . SET PTY TO NOECHO (master or slave?)
-
-Tried setting the pty to noecho:
-
-  termbuf.c_lflag &= ~(ECHO|ECHOE|ECHOK);
-
-and this seemed to stop the getty babble.  After the file transfer, I read
-back the prompt from the host shell, I write the prompt bytes to the pty;
-there is no error.  And now select() simply hangs forever (or times out if
-a timeout is set).  The question here is: why didn't writing to the pty
-produce an error?  And, because we never detect the pty has exited, we can't
-set a good return code.  5 Jan 2007.
-
-Moved pty fork testing to a separate routine, pty_get_status(), and 
-added a call to it from the place where we time out, in case the fork
-terminated; then we can get and return its status.  6 Jan 2007.
-
-Added calls to pty_get_status() to every place where we suspect a pty error,
-tried again with lrzsz, crzsz, and regular rzsz.  All three work, but in
-each case waitpid() indicates that the sz program gave exit code 1 (failure).
-ckutio.c, 7 Jan 2007.
-
-Changing the subject...  On my test system, every time I execute ttptycmd(),
-I get "permission denied" on /dev/ttyp3.  Then I run it again and get to
-ttyp4 which is OK.  I wanted to skip past any pty for which I lack
-permission and try the next without raising an error.  Added debugging code:
-
-  16:25:23.524 pty_getpty() pty master open error[/dev/ptyp0]=5
-  16:25:23.524 pty_getpty() pty master open error[/dev/ptyp1]=5
-  16:25:23.524 pty_getpty() pty master open error[/dev/ptyp2]=5
-  16:25:23.524 pty_getpty() found pty master[/dev/ptyp3]
-  16:25:23.524 pty_getpty() slavebuf [2][/dev/ttyp3]
-
-So it already was skipping past open errors; ttyp3 was opened successfully.
-The problem is that ptyp3 is rw-rw-rw-, but the corresponding master,
-ttyp3, is rw--r----.  It seems the code assumes that if the master can be
-opened, then so can the corresponding slave.  Unfortunately, the code is
-not structured to allow us to skip ahead to the next master if the slave
-can't be opened.  7 Jan 2007.
-
-Spent a couple hours trying to rearrange the code in the pty module to skip
-past inaccessible slaves but it was a rabbit hole, not worth it, backed off.
-8 Jan 2008.
-
-Tried an upload over a secure connection using lsz.  Unexpectedly, this time
-it worked; not only was the file (about 0.5MB) transferred correctly, but
-Kermit detected the fork's termination and got the pid's exit status, and,
-for the first time, correctly reported a successful transfer.  I have no
-idea why this works today and not yesterday.  More tests; it works most of
-the time.  It works with csz and with regular sz too.
-
-(days later...)
-
-ckucns.c seems to do the right thing; it recognize the ZSTART string,
-activates the Zmodem-Receive APC, and returns.  doconect() sees the APC and
-begins to execute it.  The RECEIVE command results in a call to the GET
-command parser, doxget() (IS THAT RIGHT?), then comes a ttflui(), which
-throws away a bunch of stuff.  Finally we get to ttptycmd(), we get a pty
-and run lrz in it, select() says stuff is waiting from the pty, but read
-returns 0, errno 0.  Skipping the ttflui() in doxget() if the protocol was
-not Kermit didn't seem to make difference.  ckuus6.c, 8 Jan 2007.
-
-The problem is that in this case, reads from the pty never get anything (no
-data, no error), write always gets an error.  It's as if the pty was not
-being set up right, or we're using the wrong file descriptor.  And if we
-skip the autodownload?  Same thing.
-
-OK, putting downloads aside for a moment, let's get uploads working as well
-as possible.  At this point we have the odd situation (at least in this
-configuration) that the upload succeeds, but now for some reason we are
-unable to read the exit status from the process, even though this was
-working before, so ttptycmd() returns 0 (failure), yet Kermit reports
-success.
-
-Well, it turns out that kill(pty_fork_pid,0) was gumming up the works.
-If we use only waitpid() all is well, I think.  waitpid() with WNOHANG
-returns -1 with status -1 errno 0 if the pid has not exited, and it returns
-the pid and status > -1 if the process has exited.  Fixed pty_get_status()
-to do it this way.  ckutio.c, 7 Jan 2007.
-
-Let's move this from Mac OS to NetBSD and see how it works.  Well, the file
-transfer was just fine, but then I used some sexps to calculate the elapsed
-time and transfer rate, and Kermit hung in dosexp().  Fine, ignoring that...
-The debug log shows that ttptycmd() gets the pty OK, master and slave, the
-i/o goes smoothly, and waitpid() does its job perfectly.  Solaris, same
-deal; ttruncmd() goes smoothly, but then the sexps afterward get "Arithmetic
-exception".  Turns out there was a BAD bug in dosexp() that allowed an
-integer division by 0 to occur under certain circumstances; it's always been
-there.  Fixed in dosexp(): ckuus3.c, 8 Jan 2007.
-
-After noticing a few problems running the pop.ksc script in production over
-the past year, rewrote \femailaddress() to be more reliable and a lot
-simpler.  ckuus4.c, 9 Jan 2007.
-
-Back to ttptycmd()...  When we left off, we could send but not receive.  Set
-up a test case using Kermit as the external protocol for receiving a short
-file.  If I SET STREAMING OFF and use short packets, it actually does work,
-so it's not a complete failure to function, but apparently a lack of flow
-control for the pty.  Began by completing the parameterization of the pty
-module, so it can be called for interactive use (fc 0) or for running
-protocols (1).  Confirmed that everything works at least as well as before
-(e.g. "set host /pty emacs" vs external protocols).  ckcdeb.h, ckutio.c,
-ckupty.c, 9 Jan 2007.
-
-Found in HP-UX "man 7 pty" a description of ioctl(fd,TIOCTTY,fc) which is
-exactly what we want: fc 0 turns off all termio processing and guarantees an
-ininterrupted, unmolested, flow-controlled stream of bytes in both
-directions.  This function also exists in Linux, but not in Solaris, NetBSD,
-or Mac OS X (TIOCNOTTY is not what we want, it does something else entirely).
-
-Another possibility is TIOCREMOTE, which "causes input to the pseudoterminal
-to be flow controlled and not input edited, regardless of the terminal
-mode".  This one exists in at least HPUX, NetBSD, Solaris, and Mac OS X.
-
-Solaris: builds OK, but at runtime we get ENOTTY ("Inappropriate ioctl for
-device").  By the time this happens, it's hard to tell from the code whether
-the fd we're using is for the master or the slave; TIOCREMOTE can be used
-only on the master.  Close inspection shows that I am indeed doing that;
-ptyfd as seen by ttptycmd() is truly the master, i.e. the /dev/ptyXX device,
-not the /dev/ttyXX device (the slave fd can't be seen at all, as it exists
-only in a separate fork).  OK, so now we know that TIOCREMOTE can't be used
-on Solaris.
-
-NetBSD: Somehow, whether as a result of today's fiddling or the phase of the
-moon, the code in pty_open_slave() that tries to open /dev/tty started
-failing on NetBSD ("Device not configured").  Changing it to be run only if
-fc == 0 (which doesn't seem to hurt anything), once again I get ENOTTY on
-the TIOCREMOTE ioctl.  Zmodem works but Kermit totally fails (the fork exits
-immediately with an exit code of 0, even though it didn't do anything).
-
-Mac OS X: Exactly the same sequence and results as NetBSD.
-
-Linux:  It did not execute the new ioctl at all; apparently the TIOC symbols
-are hidden or not exported or something.
-
-Where we stand:
- . Downloads don't work
- . Uploads got slow again
- . Kermit doesn't work at all as an external protocol
-
-Actually if I take the debugging out it goes fast, but it doesn't finish.
-
-All today's work on ttptycmd() looks like a dead end.  To roll back to
-yesterday:
-
-  cp ckutio.c-20070108 ckutio.c
-  cp ckupty.c-20070108 ckupty.c
-  cp ckupty.h-20070108 ckupty.h
-
-or to continue with today's:
-
-  cp ckutio.c-20070109 ckutio.c
-  cp ckupty.c-20070109 ckupty.c
-  cp ckupty.h-20070109 ckupty.h
-
-Comparing Monday's and Tuesday's pty-related code, the differences are:
- 1. Passing of function code to and among pty modules.
- 2. Skipping the TIOCSCTTY ioctl and the open("/dev/tty") test.
- 3. Attempting to put pty in TIOCTTY or TIOCREMOTE mode.
-
-Commenting out 2 and 3 should put us back where we were on Monday if the
-parameterization was done right.  And with this, on Solaris, downloading
-with Kermit external protocol works but slowly, 8K cps, with or without
-debugging.  Debug log does not show any obvious bottlenecks; select() takes
-anywhere between no time at all and 0.1 seconds to return.  If I increase
-the pty-net buffer size from 1K to 4K, the rate goes up to 55K cps.  If I
-make it 8K I get 136K cps.  With 16K I get 346K cps.  32K: 395K cps -- this
-last one isn't worth the doubling.  But at 24K I get 490K cps, sometimes
-twice that.  Let's stick with 24K for now.  Downloading with Zmodem (rzsz)
-works at the same rate, but now we're back to seeing the getty babble
-(Several "**B0800000000022d") at the end. 10 Jan 2007.
-
-Moving to Mac OS X, everything works the same as on Solaris, except I don't
-get the Zmodem getty babble there, not even with Omen rzsz.  Tested sends
-in both remote and local mode, the latter over a secure Kerberos 5 Telnet
-connection, using C-Kermit, rzsz, lrzsz, and crzsz, all good.  10 Jan 2007.
-
-Now we're back where we were yesterday morning, but with better throughput.
-The big issue then was receiving files.  But yikes, now it works!  Not only
-that, I got a transfer rate of 2.1M cps.  That's using Kermit protocol,
-streaming, and big (4K) packets.  Which didn't work before.  Not a fluke
-either, I uploaded bigger and bigger files up to 6MB, they all went
-smoothly, at rates between 1 and 2 MBps.  10 Jan 2007.
-
-Not so great in Zmodem land, however.  If I start the external-protocol
-receiver on the far end, escape back and start a Zmodem send... nothing.
-If I leave the remote C-Kermit at its prompt (where it supposed to recognize
-the Zmodem start string), still nothing.  On the other hand, if I do it
-with a script instead of by hand:
-
-  def xx output take blah\13, send /proto:zmodem \%1
-  
-it works, at least intermittently.  But that's in remote mode.  We won't be
-using this in remote mode.  In local mode, where we have a secure connection
-to another computer, it seems we can read from the pty and write to the net,
-but we time out waiting to read from the net; nothing arrives.  Well, we
-know that i/o works both ways, so there is some kind of screwup with the
-Zmodem protocol start itself.  Increasing the (still hardwired timeout) from
-5 to 22sec and driving the whole process with a script so as to avoid
-autodownload as well as manual dexterity effects...  It just sits there
-forever, way longer than 22 sec.  ^C'ing out, I see that sz was indeed
-started on the far end and the protocol was executing.  But it looks like
-the receiver (the one running under ttptycmd()) is getting trashed packets,
-because (a) it seems to be sending the same thing over and over again, and
-(b) sometimes it waits as long as 10 seconds before anything arrives from
-the remote.  Maybe I was too impatient; I interrupted it after 4 minutes but
-it seems to have been making some progress.  Whenever there was data
-available to read from the net, it was always 65 bytes, and it was not
-actually the same data over and over.  This is using lrz as the external
-protocol.  crz gets a bit farther.  In this case we read up to 24K at a
-gulp, but the amount varies a lot.  It looks like we took in about 1.2MB of
-Zmodem protocol data, but were only able to output the first 20K of the
-file.  Clearly there were lots of errors.  In the end, the crz exits with
-status 1 (failure).
-
-Anyway it looks like we're back at needing to find a way to accomplish
-something like TIOCREMOTE on the pty, which is where we came in.  10 Jan 2007.
-
-Without any way to make the pty transparent and flow controlled, it would
-seem to make sense to write to the pty in smaller chunks than we do to the
-net.  I left the read-from-pty-write-to-net buffer at 24K and changed the
-read-from-net-write-to-pty buffer to 48 bytes.
-
-Upload using lsz worked but took about 3 minutes.  Actually it didn't work.
-On the local end it seemed to work, but the file did not appear on the
-remote end.  Tried this several times, each time with different results,
-adding more debugging each time.  The problem this time was that the pty
-read could get EWOULDBLOCK.  Changed the code to not treat this as an error,
-now Zmodem uploads are solid again except I never got EWOULDBLOCK again
-either, even though I repeated the same upload about 1000 times (with
-throughput of over 2MBps even with debugging on), so the test for it has
-not been exercised.
-
-OK, uploads still work.  Back to downloading...  The very first pty read
-gets 0 bytes, followed by the fork test that shows that it exited with
-exit status 2. 
-
-Next we try starting sz with some different options on the far end:
-
- -q: quiet (no messages):
-     for some reason this gets totally stuck.
-     it looks as if this option is misdocumented;
-     sz seems to be sending the letter C (as in Xmodem 1K or whatever)
-
- -e: escape (all control chars):
-     first attempt to read pty finds the process gone with exit status 2.
-
- -k: send 1k blocks:
-     this one didn't stop immediately.  It reads 48 bytes from net, writes
-     48 to the pty with no error.  Then reads 21 bytes from the pty, writes
-     them to the net OK.  Then reads 48 bytes from net, writes them to pty OK,
-     reads 21 from pty, writes to net OK, etc etc...  It appears to have
-     worked but (final read from pty returned 0, fork test showed lrz exited
-     with status 0), but only 754 bytes were received from the net when the
-     file is 420K...
-
-Well this only goes to show that the faster we shove stuff into the pty, the
-worse it gets.  Zmodem downloads won't work unless we can make the pty
-transparent and flow-controlled.  So to summarize today's developments:
-
- . separated in/out buffer sizes
- . handled EWOULDBLOCK
- . found out that sz options don't help much
-
-11 Jan 2007.
-
-Next day.  This has got to be the most delicate code ever, it's like
-Whack-A-Mole, fix A and B pops up.  Even without touching it, something that
-worked perfectly a 2:00 doesn't work at all an hour later.  Maybe I could
-have used pipes instead of ptys, but pipes have problems of their own.
-There has to be a way to do this.  The telnet server, the SSH server, etc --
-they all run on ptys, and we can upload files to them with Kermit.  Why?
-Because Kermit puts its terminal into all the right modes using the
-time-honored methods of ttpkt() and ttvt().  Perhaps all we need is a copy
-of ttpkt() that operates on the pty.
-
-On that theory, let's go back to Kermit as the external protocol.
-It's important to suppress all messages and displays.  With that,
-uploads work fine, no hitches.
-
-Downloads:  We fail right away.  The debug log shows the Kermit program that
-we are starting in the pty says:
-
-  "" - Invalid command-line option, type "kermit -h" for help.
-
-But of course we are not giving it an invalid command-line option.
-Switching to gkermit for the external protocol, now we see that no matter
-command-line options we use, we read 0d 0d 0a from the pty and then the
-next time we go to read from the pty we get 0 bytes and waitpid() says the
-program has exited with status 1.
-
-Why should downloading be different from uploading?  ttptycmd has no idea,
-it does everything the same.  The only difference would seem to be which
-side sends first, but even that tends to get washed out by each program's
-startup messages.
-
-Downloading with Kermit worked 2 days ago, what's different now?  The buffer
-sizes.  Putting the net-to-pty back up to 24K (from 48 bytes)...  Now it
-works again.
-
-Conclusion: Kermit conditions the pty correctly, Zmodem does not.  Therefore
-ttruncmd() must duplicate what ttpkt() does.
-
-Or not.  Because rz works fine on ssh/telnet ptys too.  But not on our pty.
-lrz exits immediately with status code 2 = 01000 but there are no clues in
-the lrz.c source code, I don't even see this exit status set anywhere.
-Unredirecting stderr, I see that the error is "lrz: garbage on command line".
-
-Why do both Kermit and Zmodem sometimes think they are receiving an invalid
-command line?  If I could capture the garbage...
-
-Side trip #1: ("pty.log",O_WRONLY) gives "no such file or directory".
-Changed this to ("pty.log",O_CREAT,0644) and now it doesn't get an error,
-and it creates the file, but not with 0644 permissions, and with nothing
-written in it.  How come nothing works?
-
-Fine, the debug log shows that ttptycmd() receives the correct string
-(e.g. "lrz -v").  It passes it to do_pty() correctly, and do_pty() passes it
-to exec_cmd(), which runs cksplit() on it, coming up (in this case) with
-"lrz" and "-v", which is right, and then:
-
-    args = q->a_head + 1;
-    execvp(args[0],args);
-
-execvp() wants the args array to have a null element at the end.  cksplit()
-does indeed do that, or at least the code is there.  Added code to exec_cmd()
-to verify the argument list and that it is null-terminated.  So far it is.
-
-Anyway, we have traffic between the Zmodem partners, but no joy.
-Commenting out the bit that redirects stderr, now I can see it on my screen
-in real time:
-
-  lrz waiting to receive.Retry 0: Bad CRC
-  Retry 0: Got ERROR
-  Retry 0: TIMEOUT
-  Retry 0: TIMEOUT
-  Retry 0: TIMEOUT
-  Retry 0: TIMEOUT
-
-etc etc, forever.  Trying sz -e on the far end, I get:
-
-  Retry 0: Bad CRC
-  Retry 0: Garbage count exceeded
-  Retry 0: Garbage count exceeded
-  Retry 0: Garbage count exceeded
-  Retry 0: Garbage count exceeded
-  Retry 0: Garbage count exceeded
-  Retry 0: Garbage count exceeded
-  Retry 0: Garbage count exceeded
-  ...
-  Retry 0: Got ERROR
-  Retry 0: Bad CRC
-  Retry 0: Got ERROR
-  Retry 0: Got ERROR
-  lrz: xxufio.c removed.
-
-So apparently it's not a matter of escaping.  Trying some other stuff, I
-caught the command-line problem in the act:
-
-  lrz: garbage on commandline
-  Try `lrz --help' for more information.
-
-Debug log shows:
-
-  cksplit result[lrz]=1
-  cksplit result[-v]=2
-  exec_cmd arg[lrz]=0
-  exec_cmd arg[-v]=1
-  exec_cmd arg[]=2
-
-An empty string at the end instead of a null pointer.  I really do not see
-any way that could happen, but rather than dig into cksplit() again after
-all these years I added a test for this in exec_cmd(), which, of course
-after adding it, never encountered this behavior again.
-
-Fiddled with pty buffer size again.  Made it 512 bytes instead of 24K.
-Zmodem downloads are the same (Rety 0: TIMEOUT, over and over).  But I don't
-see what the problem is -- every time we receive n bytes from the net, we
-write n bytes successfully to the pty and there are no errors.  But it also
-looks like the remote sender is sending the file header over and over
-because it's not receiving an acknowledgment.  If we're not losing data,
-then maybe it's a transparency problem.
-
-Tried uncommenting the TIOCblah stuff I commented out before.  Now instead
-of only timeouts I get:
-
-  lrz waiting to receive.Retry 0: Bad CRC
-  Retry 0: Got ERROR
-  Retry 0: Bad CRC
-  Retry 0: Got ERROR
-  Retry 0: Bad CRC
-  Retry 0: Got ERROR
-  Retry 0: TIMEOUT
-
-which is odd because the TIOCREMOTE ioctl failed with errno 14, EFAULT,
-bad address, which should indicate it had no effect.  We're still receiving
-data from the remote in tiny chunks (from 12 to 65 bytes), apparently the
-same stuff (file header), and writing them to the pty successfully but
-nothing...
-
-Looked at cloning ttpkt() for the pty, but these stupid routines use global
-tty mode structs so it's not going to be easy.
-
-Well, we got exactly nowhere today, but I think I'll leave stderr as it is
-so users will see some feedback; no reason not to.
-
-WHY DO KERMIT DOWNLOADS WORK AND ZMODEM NOT?
-
-Is it 8-bit transparency?  Up til now I've been testing with text files.
-If I try to download a binary what happens?  Fails after 99 seconds.  Packet
-log from the far end shows that as soon as the first packet containing 8-bit
-data is sent, everything stops.  At least I got one of these:
-
-  17:23:56.475 exec_cmd arg[gkermit]=0
-  17:23:56.475 exec_cmd arg[-qr]=1
-  17:23:56.475 exec_cmd arg[]=2
-  17:23:56.475 exec_cmd SUBSTITUTING NULL=2  <-- the code I just added
-
-Doing this again shows the same thing on the near end.  All the 7-bit-only
-packets are sent and acknowledged OK.  Three 8-bit data packets arrive and
-nothing else happens after that.  This is with G-Kermit.
-
-The same thing happens with C-Kermit receiving.  But if I change C-Kermit's
-.kermrc to turn off streaming and use a short packet length:
-
-The transfer works, even though it's sending 8-bit bytes.  So the problem is
-not 8-bit data after all, per se.  Facts:
-
- . Kermit can receive streaming transfers of 7-bit files.
- . Kermit can not receive streaming transfers of 8-bit files.
- . Kermit can receive nonstreaming transfers of 8-bit files with short packets.
- . Kermit can receive nonstreaming transfers of 8-bit files with 1K packets.
- . Kermit can receive nonstreaming transfers of 8-bit files with 4K packets.
-
-So it's the combination of streaming and 8-bit data?  12 Jan 2007.
-
-As a test I made a new routine pty_make_raw() that does cfmakeraw() (a
-nonportable "POSIX-like" function known to be used on ptys in applications
-that do approximately what we're attempting).  Results:
-
- Solaris: errno 25 - inappropriate ioctl for device.
-
-This happens even when we try to get the terminal modes with tcgetattr(),
-which is completely nuts.  We pass it the file descriptor of the pty master,
-which is supposed to work.  But in Mac OS X, there are no errors.  But
-downloads still don't work; lots of errors but the pattern is different.
-Using a very small buffer:
-
-  Retry 0: Bad CRC
-  Retry 0: Garbage count exceeded
-  Retry 0: Garbage count exceeded
-  Retry 0: Got TIMEOUT
-  Retry 0: TIMEOUT
-  Retry 0: Bad CRC
-  Retry 0: Bad CRC
-  Retry 0: Garbage count exceeded
-  Retry 0: Garbage count exceeded
-  Retry 0: TIMEOUT
-  Retry 0: Got ERROR
-  Retry 0: TIMEOUT
-  Retry 0: Garbage count exceeded
-  Retry 0: Garbage count exceeded
-  Retry 0: Bad CRC
-
-Using a bigger buffer:
-
-  Retry 0: Garbage count exceeded
-  Retry 0: Garbage count exceeded
-  Retry 0: Garbage count exceeded
-  Retry 0: Garbage count exceeded
-  Retry 0: Garbage count exceeded
-  Retry 0: Garbage count exceeded
-  (several screensful)
-
-Various other combinations... Nothing seems to work.
-
-Insight: telnetd does exactly what we want to do, sort of.
-But it uses TIOCPKT, so every time it reads from pty, it receives
-one control byte and then the data bytes, which would complicate our
-buffering scheme considerably.  Anyway the TIOCPKT ioctl() fails on
-Mac OS X with 14 "Bad address".
-
-Also see: snoopserver.c (found in Google).  It seems to do things in a
-slightly different way -- it sets stdout to raw and then dups it to the
-slave side of the pty?
-
-Maybe it's a mistake to use the ckupty.c routines.  They are designed for
-creating and accessing an interactive session.  Maybe just copy one of the
-other programs.
-
-18 Jan 2007.  Tried going back to blocking rather than nonblocking reads
-to see if it would make a difference, after all the other changes.  Nope.
-OK, let's look at some of these other programs...
-
-snoopserver.c.  I don't know exactly what this is or where it's from or what
-platform it runs on and there are no comments to speak of, but it does
-approximately what ttptycmd() does.  To get a pty it uses openpty():
-
-  if (openpty(&pty, &tty, NULL, NULL, NULL) == -1)
-
-then creates a fork.  In the fork, it closes the pty (master) and
-manipulates the modes of the tty (slave), dups tty to be stdio, and then
-doex execv() on the command.  Meanwhile the upper fork closes the tty
-(slave), gets the attributes of stdin, using atexit() to have them
-automatically restored on exit.  Then it sets stdin to raw mode and enters
-the select() loop on stdin, the pty master, and the net.  It uses regular
-blocking reads.  It does not use TIOCPKT or anything like it.
-
-openpty() is supported on: Linux, Mac OS X, NetBSD, FreeBSD, ...
-openpty() is NOT supported on: Solaris, HP-UX, ...
-
- 1. Try copying the pty code, but keep everything else the same.
-
-I did this; it compiles and starts OK, upper fork (ttptycmd) debug log shows
-no errors, but nothing happens.  Logs show that the Kermit program that is
-started in the subfork seems to die as soon as it reaches eof on its init
-file.  The good news, at least, is that select() doesn't report report that
-the pty is ready to be read.  Clearly the file descriptors aren't being
-assigned as expected, or as before.
-  
-In ckupty.c getptyslave() dup2's the slave fd to 0 and 1.  The new code
-does exactly the same thing.  Debug log makes it look like the forked kermit
-is not receiving its command line.  But now I'm not even sure that the
-forked kermit started at all.  ps from another terminal doesn't show it.
-
-19 Jan 2007: Noticed that in snoopserver, the select() calls use standard
-input and output file descriptors, rather than the pty master.  Made that
-change...  In doing that I had to look at every file descriptor in every
-line of code and discovered a couple mistakes, fixed them, put back the
-original code but with the fixes, tried it, but no change; can upload OK but
-still can't download with Zmodem without lots of errors and ultimate
-failure.  Going back to the alternative version and trying to get the the
-file descriptors sorted out, now it appears that the external Kermit program
-never even starts in the lower fork.  After a bit more fiddling I sort that
-out, but now when the lower Kermit program goes to open "/dev/tty" it gets
-errno 6 "Device not configured".  Forcing it to use stdio with "-l 0", it
-gets past this and actually sends its first packet.  But the Kermit on top
-reads nothing from the pty.
-
-Next, I change the pty fd from STDIN_FILENO and STDOUT_FILENO to slavefd.
-No difference.  Next I comment out the dup2() calls.  This time I get some
-action.  The transfer starts, but only one packet comes.  Log shows that
-the lower Kermit sends its S packet.  The upper Kermit receives the ACK
-but the lower Kermit never gets it.  The write to the pty succeeds, no
-error.  Different combinations give different results.  If write to master
-and read from the slave, I get packets in both directions but tons of
-errors....  This happens only if I comment out the dup2()'s.
-
-25 Jan 2007: After leaving it sit for a while, and realizing that what I'm
-trying to do has to be possible because so much other software does the same
-thing (e.g. Telnet servers), I put things back to how they were originally
--- the upper fork (Kermit) uses the master and the lower fork the slave.
-The upper fork puts the master in raw mode, the lower fork puts the slave in
-raw mode.  The lower fork dup2's the slave fd to stdin/out.  Send file in
-remote mode using external Kermit: works OK but select() times out at the
-end.  This means that the self-contained pty code in ttptycmd() is sorted
-out -- all the file descriptors go to the right place, etc, and now we can
-use this routine as a testbed, rather than the original ckupty.c-based one.
-
-But send with lsz, csz, and regular rz: Nothing happens, times out after 0
-bytes of i/o.  Once again, Kermit works, Zmodem doesn't.  The reason for
-running Zmodem in a pty is so its i/o will work as it does on a terminal,
-no matter how it may fiddle the file descriptors.  So why don't we see a
-single byte come out?
-
-Commenting out pty_make_raw(), I get a successful Zmodem send using lsz.
-csz manages to get the filename across, but then gets stuck.  regular sz, on
-the other hand, works perfectly.  Testing csz by itself (not under Kermit),
-I see it fails in exactly the same way ("Got phony ZEOF", etc).  OK, forget
-crzsz.
-
-OK, let's move to local mode over a Kerberized Telnet connection...
-Uploading (sending) with external Kermit protocol... works.
-Downloading (receiving) with external Kermit protocol... works.
-Uploading with sz... works.
-Downloading with lrz...  Gets tons of errors and fails.
-
-Running pty_make_raw() on the slave but not on the master: no difference.
-Running pty_make_raw() on the master but not on the slave: no difference.
-
-Back where we started...  Either:
-
- . Zmodem is overdriving the pty, no matter what modes we put it in.  
- . It's a transparency problem.
-
-Theoretically we should be able to test these by using different sz switches:
-  -q:    quiet (should always use this)
-  -e:    escape all control characters
-  -B n:  Buffer n bytes (rather than whole file)
-  -L n:  Packet length
-  -l n:  Frame length (>= packet length)
-  -w n:  Window size
-  -4:    4K blocksize (doesn't help)
-
--q by itself doesn't help.
--q -e, this one worked but still got about 100 errors and was very slow.
--q -e -l 200 -L 100, failed fast and bad.
--q -e -w 1.  Failed quickly.
--q -e -w 1 -B 100.  Eventually failed.
--q -w 1, Eventually failed.
--q -l 1024, this gets much more errors, definitely need -e.
--q -e -l 1024, got pretty far before failing.
--q -e -w 1 -l 1024, also got pretty far before failing.
--q -e, this one got farthest of all, about 48K, before getting errors.
-
-In the latter combinations that work somewhat better, we always get up to
-16K, or 32K, or 48K, before the errors start coming out and piling up.
-Sometimes the errors are recoverable and we receive as much as 300K
-successfully before giving up.
-
-Now that we have data flowing pretty well (but not well enough), tried
-reinstating pty_make_raw(), but it hurt more than helped.
-
-As a sanity check, I tried transferring from the same host over the same
-kind of connection (Kerberized Telnet) directly to K95's built-in Zmodem
-protocol, and that worked fine.  So the problem is definitely in the pty.
-Or more precisely, where Kermit writes incoming net data to the pty master.
-
-26 Jan 2007: Tried changing the size of the net-to-pty buffer from 24K to
-1K.  Result: total failure.  Set both buffers to 1K.  Still total failure.
-Set both to 4K: now we get about 45K of data, then failure.  Put them both
-back to 24K, still fails totally -- the same code that worked pretty well
-yesterday.  Actually, no downloads work, not even Kermit, not even of
-text files.
-
-27 Jan 2007: Since I have not been able to find a way to make ptys work for
-this, I made a third copy of this routine, this time using pipes instead of
-ptys.  The disadvantage here is that if the external protocol does not use
-stdio, the pipes won't work, but one thing a time...
-
-Inferior Kermit starts in lower fork, but when it tries to send its first
-packet it gets errno=9 EBADF, Bad File Descriptor.  Substituting G-Kermit as
-the external protocol, which is simpler, reveals that the problem is that
-the external protocol gets errors when it tries to manipulate the its stdio
-file descriptors with ioctls, etc; these are not valid for a pipe.  The pipe
-mechanism itself works.  If I take out the test for ttpkt() failing in
-gkermit, the file transfer works OK.  Trying Zmodem... Sending works OK;
-receiving works a lot better than with ptys (it got 360K into the file
-before failing).  Making the buffers smaller, doesn't help.
-
-I'm starting to wonder if the problem might be in my buffering code, rather
-than in the pty or pipe interface...  Try making a version that does
-single-character reads and writes.
-
-This one reads the first packet from the lower Kermit and sends it.  It is
-recognized by the other Kermit, which sends an ACK.  We see the ^A of the
-ACK, but then select() times out on the next character -- OF COURSE: because
-at a lower level, it has already been read.  We have to check the myread
-buffer, and then call select() only if it's empty.  Making this change:
-
- . SEND with G-Kermit works (but very slowly).
- . SEND with lsz works but gets a lot of errors, eventually succeeds.
-
-Let's work our way back...  With the same changes to the buffered pipe version:
-
- . SEND with G-Kermit/streaming works (fast).
- . SEND with lsz works too (fast), but we get gubbish at the end.
- . RECEIVE with Kermit fails because "/dev/tty is not a terminal device".
- . RECEIVE with rsz... lots of errors ("garbage count exceeded") but succeeded.
-
-But maybe now we're seeing pipe artifacts, so going back one more step to
-the version that gets its own pty and starts its own fork:
-
- . SEND with G-Kermit/Streaming works (fast) but select() times out at the end.
-
-Another breakthrough: Moved the write pieces to below the read pieces.  This
-is what was preventing the buffer reset code from working -- with the writes
-done before the reads, we never catch up and can never reset the buffers.
-
- . SEND with G-Kermit/streaming works (fast) (but there's a pause at the end)
- . SEND with lsz works (fast) (but there's a pause at the end)
- . RECEIVE with rsz... lots of errors ("garbage count exceeded") and fails.
- . RECEIVE with Kermit -- nothing happens (it thinks it succeeded), then we
-     reconnect, terminal sees S packet and goes into autodownload
-
-From the log it looks like ttpkt() fails in the lower Kermit.  Switching
-this with the hacked G-Kermit...  it gets "transmission error on reliable
-link".  Tried again with real Kermit below, this time with "-l 0" and not
-streaming.  This was actually working, but slowly, I don't see any NAKs in
-the packet log, but then select() timed out.
-
-28 Jan 2007: Restored both the calls to pty_make_raw():
-
- . SEND with C-Kermit streaming works, but slow (54Kcps)
- . Ditto, but with debugging off -- hangs forever.
- . Ditto, but using G-Kermit instead of C-Kermit -- also hangs forever.
-
-Backed off on calling pty_make_raw().  Same thing.
-Reduced size of net-to-pty buffer.  Same thing.
-
-15 Feb 2007...  Decided to give up on this and publish it as is, in hopes
-that somebody with more experience with ptys can make it work, because I'm
-just going in circles.  So today I just have to get the code into shape so
-people could choose among the three alternative routines.  The second one,
-yttyptycmd(), is the one that uses openpty(), which is not portable, so it
-can be enabled only for Mac OS X, NetBSD, FreeBSD, and Linux, or by also
-defining HAVE_OPENTPY at compile time.  Anyway, if you build Kermit in the
-normal way, you get the regular behavior -- ttruncmd() is used to execute
-external protocols.  If you build it with -DXTTPTYCMD, you get the first
-version of ttptycmd(); with -DYTTPTYCMD the second, and with -DZTTPTYCMD the
-third.
-
-(Then some interruptions, then...)
-
-From Jeff, fix hostname comparison in X.509 certificate checking to work
-right in the case of names that contain no periods.  dNSName_cmp(): cl_ssl.c,
-21 Feb 2007.
-
-John Dunlap noticed some strange behavior when transferring files between
-home base and the EM-APEX oceanographic floats via satellite... long story,
-but every so often the transfer would get stuck for a long time, and it
-happened only when C-Kermit was sending a file and received two or more
-packets (Ack or Nak) back to back from the float.  Years ago I added some
-lookahead code to ttinl() to clear the input buffer of any interpacket junk
-so that, in the windowing case, we wouldn't be tricked next time around into
-thinking a packet was waiting to be read when there wasn't.  The code, which
-has been there for a while, was a bit fractured; luckily, it would be
-executed only when the debug log was active so it didn't have much effect.
-The problem was that if the SOP came immediately after the EOP, it could be
-missed because the loop read the next character before checking the current
-one.  Fixed by rearranging the loop.  Also I changed it so it would execute
-in all cases, not only when the debug log was active.  Also, cleaned up a
-bunch of confusing #ifdefs and removed some chunks that had been commented
-out for years, decades maybe.  ttinl(): ckutio.c, 21-22 Feb 2007.
-
-Added NOW keyword info to HELP DATE, plus a tip about how to convert to UTC;
-suggested by Arthur Marsh.  ckuus2.c, 22 Feb 2007.
-
-When an FTP client sends NLST to the server and no matching files are found,
-the server is supposed to respond with an error message on the control
-channel and nothing on the data channel.  However it seems that at least one
-server sends the error message back on the data channel, as if it were a
-filename ("/bin/ls: blah: No such file or directory"), and on the control
-channel there is no error indication ("226 ASCII Transfer complete").  At
-this point remote_files() has a listfile and, if a match pattern was given,
-it looks through list to see if any of the lines match the given filename,
-e.g. "blah".  This makes FTP CHECK give false positives.  The problem
-(diagnosed by Jeff) is that the match pattern was not given in this case, so
-it takes some random default action, resulting in the spurious success
-return.  Fixed by using the user's string as the pattern.  Not tested,
-however, since I don't have access to a server that behaves this way.
-ckcftp.c, 22 Feb 2007.
-
-If an external-protocol file transfer fails, don't print Kermit-specific
-hints.  ckuus5.c, 22 Feb 2007.
-
-One more time with ttinl().  Got rid of the "csave" junk, which never could
-have worked (which is no doubt why it was in a debugging section).  The
-problem was that saving the beginning of the next packet locally did not
-synchronize with the buffer clearing (ttflui()) done at a higher level,
-between calls to ttinl().  So now, the lookahead code, if it finds the
-beginning an as-yet unread packet, puts it back at the head of the input
-queue.  This way, if the protocol engine clears the input buffer, it will
-get the whole packet, not just the part after the SOH.  ckutio.c, 24 Feb 2007.
-
-From Steven M Schweda, Saint Paul, MN: adaptation of large file support to
-VMS (it was already possible to transfer large files in VMS C-Kermit but the
-file-transfer display and statistics were wrong).  And a minimal adaptation
-of the FTP client to VMS -- no RMS, no special VMS file stuff, Stream_LF and
-binary files only, developed and tested only with UCX.  SSL/TLS is
-supported.  The source-code changes are minimal; most have nothing to do
-with VMS, but with header files, prototypes, and data types (e.g. ftp_port
-int rather than short, various signed/unsigned conflicts) to shut up
-compiler warnings.  Some of these could be dangerous in terms of
-portability; I've marked them with /* SMS 2007/02/15 */.  ckcfns.c,
-ckcnet.h, ck_ssl.h, ckuus3.c, ckuus4.c, ckvfio.c, ckcftp.c, ckvker.mms
-(which was rewritten to actually reflect the source module dependencies),
-ckvker.com (also heavily modified).  ckvker.com (the "makefile" for VMS
-C-Kermit) now indludes "F" and "I" option flags for the large File and
-Internal ftp features, plus better handling of Vax/Alpha/IA64 distinction.
-26 Feb 2007.
-
-Changed NetBSD targets to include -DHAVE_OPENPTY and -lutil, so they
-can use openpty().  makefile, 26 Feb 2007.
-
-Built on Solaris without and with SSL OK.
-Built on NetBSD with Kerberos 5, OK.
-Built on Mac OS X 10.4, regular version, OK.
-Built on Mac OS X 10.4 with SSL and Kerberos 5, OK.
-
-On VMS 7.2-1/Alpha with MultiNet 4.4A-X...
-
-'CC' 'CCOPT' KSP:ckuus3
-%DCL-W-TKNOVF, command element is too long - shorten
- \CKUUS4.OBJ "'CC' 'CCOPT' KSP:ckuus4" "KSP:ckuus4.c KSP:ckcsym.h KSP:ckcdeb.h
- KSP:ckclib.h" "KSP:ckcasc.h KSP:ckcker.h KSP:ckcnet.h KSP:ckvioc.h"
-"KSP:ckctel.h KSP:ckuusr.h KSP:ckucmd.h KSP:ckuver.h" "KSP:ckcxla.h
- KSP:ckuxla.h KSP:ckcuni.h KSP:ckuath.h"
-
-The new rule for ckuus4.c was too long.  I removed one file from the
-dependency list (ckcxla.h, which will probably never change again) and that
-made it OK.  Built Nonet and Net versions OK, but this is without the new
-stuff.
-
-"make f" (large-file support) on VMS 7.2-1...
-'CC' 'CCOPT' KSP:ckuus4
-                    if (CKFSEEK(fp,(CK_OFF_T)j,SEEK_CUR) != 0) {
-........................^
-%CC-I-IMPLICITFUNC, In this statement, the identifier "fseeko" is implicitly
-declared as a function.
-
-Ditto for ftello and fseeko in various other places, and then fseeko and
-ftello come up up undefined at link time.
-
-The rule for ckcftp in "make i" (Internal FTP support) had the same problem.
-I removed ckcxla.h from its dependency list too, but "utime" comes up
-undeclared at compile time and undefined at link time.
-
-Verdict: neither one of the two new features can be used in VMS 7.2 or
-earlier, but the code still builds OK if you don't ask for them.
-
-VMS 8.3 on IA64...  Can't build anything:
-%MMS-F-BADTARG, Specified target (WERMIT) does not exist in description file
-
-27 Feb 2007: Changed CKVKER.COM to keep all its dependencies but use a
-shorter logical name (Steven M Schweda).  The problem on VMS 8.3 is that MMS
-now supports case-sensitive file systems, and so it can't find anything.
-Workaround: bypass MMS (include "m" in P1).  With this, "@ckvker.com ifm"
-builds OK on HP Testdrive, but I can't test the new features since outbound
-connections are not allowed there.  As for fseeko(), ftello(), and utime(),
-they simply are not availble prior to VMS 7.3.  It would probably be a good
-idea to test for this in CKVKER.COM, but actually it is possible to install
-newer C's and CRTLs on older VMS versions, so don't stand in their way.
-
-28 Feb 2007: With additional chages from SMS, and then some further
-adjustments, I was able to build the FTP version on VMS 7.2-1.  First I
-tested it with GET of a binary file, but it transferred it in text mode.
-After a few more attempts with PUT and GET, it crashed with "floating/decimal
-divide by zero" in ckscreen, ckuusx.c line 27859.  Of course, that's the
-listing line, not the source line, and I don't have a listing.
-
-To get a listing, I deleted CKUUSX.OBJ and then did:
-
-  $ make i "" "" "/LIST"
-
-Surprisingly, it recompiled everything.
-
-Anyway, the divide by zero happened in a section of code where the divisor
-was not checked, but it was a section of code we should not have been
-executing at all, since the file-transfer display was fullscreen, and this
-was in the "brief" section.  Anyway, I added the needed check.  Again, it
-recompiles everything.  Maybe there's no MMS on grumpy -- right, there isn't.
-
-ANYWAY... Try to GET a binary file like this:
-
-  binary
-  ---> TYPE I
-  200 Type set to I.
-  get gkermit
-  ---> TYPE A
-  200 Type set to A.
-  ---> SIZE gkermit
-  550 gkermit: file too large for SIZE.
-  GET gkermit (text) (-1 bytes)---> TYPE A
-
-Anyway... "get /binary gkermit" downloads it, seemingly correctly (the byte
-count is right).
-
-But "put /binary gkermit.;1" results in a 0-length GKERMIT file being sent.
-Here's the debug log:
-
-FTP PUT gnfile[DISK$MSA4:[C.FDC.NET]gkermit.;1]=1
-ftp putfile flg[DISK$MSA4:[C.FDC.NET]gkermit.;1]=0
-zltor fncnv[DISK$MSA4:[C.FDC.NET]gkermit.;1]=-1
-FTP PUT nzltor[GKERMIT]
-zfnqfp 1[DISK$MSA4:[C.FDC.NET]gkermit.;1]=675
-zfnqfp 2[DISK$MSA4:[C.FDC.NET]GKERMIT.;1]=31
-zfnqfp 3[DISK$MSA4:[C.FDC.NET]GKERMIT.;1]=31
-zrelnam result 2[gkermit.;1]
-ftp sendrequest restart[DISK$MSA4:[C.FDC.NET]gkermit.;1]=0
-openi name[DISK$MSA4:[C.FDC.NET]gkermit.;1]
-openi sndsrc=-1
-openi file number=2
-zopeni[DISK$MSA4:[C.FDC.NET]gkermit.;1]=2
-zopeni fp=0
-chkfn=2
-chkfn return=0
-zopeni fixed file format - using blk I/O
-zopeni binary flag at open=1
-zopeni ifile_bmode=1
-zopeni binary=1
-zopeni RMS operations completed ok
-openi zopeni 1[DISK$MSA4:[C.FDC.NET]gkermit.;1]=1
-ftpcmd cmd[PASV]
-FTP SENT [PASV]
-FTP RCVD [227 Entering Passive Mode (166,84,1,2,233,216)]
-initconn connect ok
-FTP SENT [STOR GKERMIT]
-FTP RCVD [150 Opening BINARY mode data connection for 'GKERMIT'.]
-doftpsend2 ftpcode[STOR]=150
-
-  Here is where the file is supposed to be read and sent but there is nothing
-  in the log between the "doftpsend2 ftpcode" line and the following line.
-
-rftimer status=1
-gftimer status 1=1
-gftimer status 2=1409025
-gftimer status 3=1409025
-gftimer s[0.000000]
-zclose n=2
-chkfn=2
-chkfn return=1
-zclose ZIFILE RMS operations completed ok
-ftp getreply lcs=0
-ftp getreply rcs=-1
-ftp getreply fc=0
-FTP RCVD [226 Transfer complete.]
-ftp getreply[226 Transfer complete.]=2
-doftpsend2 ok=0
-
-Everything is OK up until we go to send the file, then it behaves as if we
-got EOF immediately and so closes the data connection, and reports success;
-an empty copy of the file is left on the far end.
-
-Starting over with a text file....  PUT LOGIN.COM gets another divide by
-zero.  But it happened in the code I just fixed, which is impossible.  Swell.
-I recompiled everything and this time the upload worked, and downloading it
-again worked too.
-
-But a binary file still can't be uploaded.  Trying to upload a text file
-after doing this seems to succeed (reports the right number of bytes sent)
-but nothing appears on the far side.
-
-SUMMARY:
-
-  To download a text file: GET /ASCII blah.txt    (/ASCII is optional)
-  To download a binary file: GET /BINARY blah.bin (/BINARY is required)
-  To upload a text file: PUT blah.txt             (/ASCII switch not needed)
-  To upload a binary file: PUT /BINARY blah.bin   (doesn't work)
-
-Problems:
-  . Why doesn't BINARY "stick"?
-  . Why don't binary uploads work?
-
-The culprit seems to be the VMS version of zxin().  In the FTP module,
-zxin() is called only when sending binary files.  In VMS, zxin() is just
-a front end for C-Library fread().  It probably needs to do just do
-zminchar() in a loop, like binary mode does, but calling zzout instead
-of xxout.  Or something like that.  FINISH THIS TOMORROW (debug on grumpy).
-
-2 Mar 2007: New logs from John Dunlap.
-
-ema-1636-log-0175.dbg: C-Kermit uploads a short file. It receives an Ack for
-the Z packet it just sent, tailgated by the beginning of a Nak for the next
-packet.  When the second SOH is encountered, it is put back in the myread
-queue.  Then the protocol engine, to which we return the Ack, says, "I have
-the packet I wanted so I'm clearing the buffer", and away go the first two
-bytes of the Nak from the myread buffer.  Then, having just received the Ack
-of our Z packet, we send our B, and go to read the reply.  in_chk finds 0 in
-the myread buffer (which we just cleared) and 6 waiting to be read from the
-comms channel, which it does, obtaining the remaining 6 bytes of the Nak,
-which it properly discards.  (The reason this is proper is that, having
-already received the Ack for the last packet it sent, no Ack or Nak that
-arrives subsequently -- in the non-windowing case -- could possibly affect
-what it does next.)  Since it hasn't yet found a good packet, it keeps
-reading, and now it finds the Ack to the B, as soon as it showed up.  This
-is how it's supposed to work.  No time was lost because of anything that
-C-Kermit did.
-
-ema-1636-log-0174.dbg: C-Kermit uploads a short file. It sends Data packet
-#3 and receives the Ack followed immediately by the first 3 bytes of a Nak
-for packet 4.  When it gets to the SOH of the second packet, it pushes it
-back in the queue.  Again, input() flushes the input buffer (myread queue
-and device buffer).  C-Kermit detects EOF on the file it is sending, and
-sends the Z packet.  Then it reads the remaining bytes of the Nak,
-which it discards, and then it finds the Ack for Z which comes in 23 seconds
-later, sends the B, gets a Nak for the B, sends the B again, gets the Ack
-for the B 4 seconds later, and done.  Again, it's working right and losing
-no time.
-
-The question remains: what would happen if the protocol engine did not clear
-the buffer?  Would ttinl() retrieve all packets in sequence even when they
-come back to back?  To test this, I had C-Kermit send a file using 30 window
-slots and observed the stream of Acks in the reverse direction:
-
-  HEXDUMP: mygetbuf read (16 bytes)
-  01 25 23 59 2f 52 39 0d | 01 25 24 59 2b 26 31 0d  .%#Y/R9. .%$Y+&1.
-  ttinl lookahead my_count=9
-  ttinl lookahead removed=^M
-  ttinl lookahead pushback SOP=^A
-  HEXDUMP: ttinl got (7 bytes)
-  01 25 23 59 2f 52 39    |                          .%#Y/R9
-  RECEIVE BUFFERS:
-  buffer inuse address length data type seq flag retries
-     0     1     29212 9667     0   Y    3     0
-  [\ 1%#Y]
-  ...
-  in_chk my_count=8
-  ...
-  ttinl lookahead my_count=1
-  ttinl lookahead removed=^M
-  HEXDUMP: ttinl got (7 bytes)
-  01 25 24 59 2b 26 31    |                          .%$Y+&1
-  RECEIVE BUFFERS:
-  buffer inuse address length data type seq flag retries
-     0     1     29212 9667     0   Y    4     0
-  [\ 1%$Y]
-
-Here we can see that the pushed-back SOH was properly retrieved next time
-around, and the tailgating Ack was not lost.  This scenario repeats itself
-212 times in the log, and there are no screwups.
-
-Back to VMS FTP...  The problem with sending binary files is that zxin()
-uses C-Library fopen()/fread() instead of RMS, so it can't access the input
-file, which was opened by zopeni(), which is totally RMS-ified in VMS
-C-Kermit.  For VMS only, I replaced the zxin() loop by a zminchar() loop
-like the one used in text mode, except without the character set or
-record-format conversion.  Tested by PUT /BINARY of some binary files, which
-worked fine.  ckcftp.c, 2 Mar 2007.
-
-Next problem...  VMS C-Kermit ftp client sending binary files in text mode.
-Variation 1: We just send the file.  zopeni() is supposed to detect that
-it's a binary file and automatically set the mode.  And it does:
-
-  zopeni fixed file format - using blk I/O
-  zopeni binary flag at open=0
-  zopeni ifile_bmode=1
-  zopeni binary=0
-  zopeni autoswitch from TEXT to BINARY
-  zopeni RMS operations completed ok
-
-but then in gnfile():
-
-  if (!server || (server && ((whatru & WMI_FLAG) == 0)))
-    binary = gnf_binary;       /* Restore prevailing transfer mode */
-
-Well, since VMS sets text/binary mode automatically when sending files,
-this code can (and should) be skipped in VMS.  gnfile(): ckcfns.c, 2 Mar 2007.
-
-Variation 2: BINARY or SET FILE TYPE BINARY doesn't force binary mode.  But
-SET FTP TYPE BINARY does.  But BINARY does indeed call doftptyp() so what's
-the problem?  We do indeed set ftp_typ to 1 but it gets reset somewhere
-before we call zopeni().  But then zopeni() puts it back to 1.  Tracing
-through a transfer, it looks like all of this works right, it's only that
-the file transfer display says TEXT when the transfer is really in binary
-mode.  This is because screen() is called before openi().  I wonder if we
-can call scrft() from the ftp module...  No, that would be too easy.  OK,
-sendrequest calls openi() and sets the file mode; putfile() calls
-screen(SCR_FN), which prints the transfer mode.  But putfile calls
-sendrequest() after it puts up the screen that says the file type.  So it
-looks like sendrequest() has to call screen(SCR_FN) again if it changes the
-file type.  OK, that did it.  ckuusx.c, ckcftp.c, 2 Mar 2007.
-
-The BINARY and TEXT (ASCII) commands do not inhibit automatic type switching
-in VMS.  They don't in Unix either.  They never have.  Should they?  I think
-so, otherwise what good are they?  Plus we want the Kermit FTP client to
-behave like the others.  I added code for this but it doesn't work, due to
-the layers and layers of text/binary detection and switching and
-if-this-but-then-if-that...  Anyway, no harm done.  The normal rule is:
-when you PUT a file, Kermit figures out on a per-file basis whether to use
-text or binary mode unless you include a /TEXT (/ASCII) or /BINARY switch
-in the PUT (or MPUT) command.  ckuus[r3].c, ckcftp.c, 2 Mar 2007.
-
-Wed Mar 7 16:21:13 2007 WROTE SHORT TEST PROGRAM for ttruncmd (the openpty
-version) on Mac OS X.  On dulce: ~/kermit/ttpty.c / ttpty.sh.  It starts the
-external protocol in the lower fork.  The command to run is a command-line
-argument.  Sending and receiving files with Kermit works OK.  But again, the
-standalone program totally fails when I use sz or lsz as the external
-protocol.  So it looks like we can rule out any environmental effects of
-running the code inside C-Kermit.
-
-Mon Mar 12 16:52:20 2007: Put some effort into making ttpty.c more useful;
-added a debug log.  Found that for some reason, at least on Mac OS X,
-select() always timed out at the the end.  I added a SIGCHLD alarm and that
-seems to handle the fork exit condition very nicely.  Now we can send (say)
-a 3MB file at good speed on Ethernet (1Mcps) considering the debugging, etc,
-and it terminates instantly.  But when sending a file into ttptycmd (with
-"gkermit -r"), things go wrong at the end -- the Z packet is never
-acknowledged.  This is reproducible.  Maybe this is a good lead....  The log
-shows that select() timed out, even though the gkermit fork had not yet
-exited (or finished).  It looks like gkermit sent the Ack, ttpty.c read it
-from the pty and sent it out the net:
-
-  0003: read pty=8                <-- read Ack from pty
-  0003: loop top have_pty=1
-  0003: loop top have_net=1
-  0003: FD_SET pty_in
-  0003: FD_SET ttyfd in
-  0003: FD_SET ttyfd out=8
-  0003: nfds=5
-  0003: select=1
-  0003: FD_ISSET ttyfd out
-  0003: write net=8               <-- send ack to net
-  0003: loop top have_pty=1
-  0003: loop top have_net=1
-  0003: FD_SET pty_in
-  0003: FD_SET ttyfd in
-  0003: nfds=5
-  0009: select=0
-  0009: select timeout - have_pty=1
-
-But Ack never arrived.  This is a streaming transfer.  But nope, streaming
-is not the problem.  If I disable streaming ("gkermit -Sr"), we hang in in
-the middle of sending the data.  If I use small packets, we don't hang:
-1000 is OK, 2000 is not.  In fact, the cutoff is 1024.  OK, TBC...
-
-Wed 14 Mar 2007: Receiving a file thru ttpty "gkermit -e 1200 -Srd"
-produces a debug log that shows that gkermit gets a lot of EAGAIN errors
-when it tries to read from its stdin.  In fact, it takes 6 tries (read()
-calls) to read the S packet (27 bytes).  Then when the first data packet
-arrives (1200 bytes), read() never returns even one single byte.  The
-timeout interval is 15 seconds and it times out repeatedly.  Added a
-primitive hex dump to the ttpty debug log for each read/write (showing only
-the first 24 characters and the last character, so it fits on one line).
-Tried uploading a file.  The S, F, and A packets (short) are received and
-Ack'd OK, but then ttpty select() times out, never receiving even one byte
-from the D packet.  Clearly, when the pty driver receives a burst of > 1K
-bytes, stops working.  As before, if I limit the packets to < 1K, it works
-fine.
-
-Can I send an 8-bit binary file?  Nope.  ttpty reads the binary data just
-fine from the net and writes it exactly as it was received to the pty, but
-the first time we write an 8-bit byte, we never hear back from the PTY
-again.  But the log shows that when the initial 7-bit packets from the pty,
-it looks like the PTY is not in rawmode, because these packets end with ^J
-rather than ^M.  Calling pty_make_raw() on the masterfd and slavefd
-explicitly, however, doesn't change anything.  It doesn't matter if I do
-this in the lower fork or the upper fork.  So maybe it's the actual
-semantics of pty_make_raw() that are wrong.
-
-Thu 15 Mar 2007: Went thru all the terminal mode flags in Mac OS X; didn't
-help.  Changed hex dump to show whole packet.  Put hex dump routine in a
-private copy of G-Kermit.  Tried to transfer an 8-bit file, logging both
-ttpty and gkermit.  Compared what ttpty received on stdin with what it sent
-to the pty (same) and what was received by G-Kermit (same).  Then I realized
-that my little test program was not putting its controlling terminal into
-raw mode; when I did that, I could upload binary files (streaming, 2MB/sec).
-And with Zmodem too (with rz; lrz doesn't work for some reason).  Looking
-back at the original in ckutio.c, I see that ttptycmd() never called
-ttpkt().  Maybe that was the trouble all along.  (Yup, but maybe not the
-whole trouble.)
-
-Moving back to C-Kermit and the original ttptycmd() routine, adding the call
-to ttpkt(), and stripping out a lot of cruft, and moving the pty_make_raw()
-code to ckupty.c, Kermit uploads and downloads (streaming) work fine in
-Solaris.  Zmodem sends a file, but then the transfer hangs at the very end,
-as if the signoff protocol were lost.  This happens on Solaris.  If I move
-back to Mac OS X, everything works just fine.  Then, making a Kerberized
-connection from the Mac to NetBSD, I can send files from the Mac with both
-Zmodem and Kermit.  Receiving...  Kermit OK.  Zmodem...  Nope.  "rz:
-Persistent CRC or other ERROR" (and created a 265MB debug.log!)
-
-Fri 16 Mar 2007: ttptycmd() was for sending files with Zmodem across
-encrypted connections.  But it occurred to me that it's necessary for
-clear-text connections too; e.g. Telnet, where 0xff has to be doubled.  Of
-course Zmodem doesn't do that itself, so there's no way Zmodem external
-protocol could work when executed over a Telnet connection, and in fact
-it doesn't.  I wonder why I ever thought it did.
-
-Wed 21 Mar 2007: Back to where we left off a week ago.  Trying C-Kermit's
-ttptycmd() on the Mac again, in remote mode:
-
- . G-Kermit send txt (kst): OK  832Kcps  
- . G-Kermit recv txt (kr):  OK  425Kcps  
- . G-Kermit send bin (ksb): OK 1000Kcps  
- . G-Kermit recv bin (kr):  OK  188Kcps  
-
-And Zmodem:
-
- . sz txt (zst): OK  563Kcps  
- . sz bin (zsb): OK  714Kcps  
- . rz txt (zr):  OK  863Kcps  
- . rz bin (zr):  OK  198Kcps  
-
-So in remote mode, everything works.  Now let's try a clear-text Telnet
-connection...
-
- . G-Kermit send txt (kst): OK  841Kcps
- . G-Kermit recv txt (krt): OK  391Kcps
- . G-Kermit send bin (ksb): OK  811Kcps
- . G-Kermit recv bin (krb): OK  171Kcps
-
-And Zmodem over the same clear-text telnet connection:
-
- . sz txt (zst): OK  91Kcps (*)
-
-Kermit is sending sz messages like "sz 3.73 1-30-03 finished." to the
-host, which tries to execute them, after the transfer is finished.
-Of course "sz" is a command, but:
-
-  sz: cannot open 3.73: No such file or directory
-  sz: cannot open 1-30-03: No such file or directory
-  sz: cannot open finished.: No such file or directory
-
-Did I lose that code that dis-redirects stderr when I went back to using the
-pty code from the ckupty module?  No, it's there and it's being executed.
-Apparently the copy of sz I have is writing its "finished" message to stdout
-because "sz blah 2> /dev/null" does not suppress it.  Starting again with
-lsz instead of sz:
-
- . sz txt (lzst): OK  413Kcps
- . sz bin (lzsb): OK  FAILED (*)
- . rz txt (lzrt): OK  
- . rz bin (lzrb): OK
-
-(*) Sigh.  Using lsz, we get "garbage count exceeded" errors and eventual
-failure.  But using regular sz, we get the extraneous message that starts
-sz on the far tend, and the resulting getty babble.
-
-But even without changing the code, it will work one minute, and then fail
-consistently the next.  For example, I was able to send files with sz
-successfully over and over, but with the getty babble at the end.  Then,
-after trying lsz and then going back to sz, every attempt at sending a file
-quits with "Got ZCAN".  The difference has to be that Kermit always does at
-least some minimal encoding of C0/C1 control characters such NUL and DEL and
-IAC, and I doubt that Zmodem does.
-
-http://zssh.sourceforge.net/ says:
-
-  If file transfer is initiated but never completes (ie a line like :
-
-     Bytes Sent:      0/    513   BPS:0        ETA 00:00  Retry 0: Got ZCAN
-
-   can be seen, but transfer never completes), chances are the pty/tty on one
-   of the systems are not 8-bit clean.  (Linux is 8-bit clean, NetBSD is not).
-   Using the -e (escape) option of rz should solve this problem.
-
-It doesn't, at least not with lrz.  And yes, the receiving end happens to be
-NetBSD.  But it looks like the zssh people have been down this road too.
-
-But with rz and sz, it worked.  Once.  Twice.  Three times.  But of course,
-with the getty babble at the end.  This can be taken care of by doing:
-
-  rz -eq ; cat > foo
-
-which puts "sz 3.73 1-30-03 finished" and any other messages in foo (but you
-have to type ^D to finish the cat).  Using this method I was also able to
-send an 8K binary file that contained a test pattern of all 256 possible byte
-values.  Then I tried a 3MB binary executable.  All OK.  So here we go again:
-
- . sz txt (zst): OK
- . sz bin (zsb): OK
- . rz txt (zrt): 
- . rz bin (zrb): 
-
-Downloading fails about halfway through a fairly large file.  I tried an
-even bigger file, guaranteed to be 100% ASCII; same thing -- halfway
-through: "rz: Persistent CRC or other ERROR".  But it worked with a smaller
-version of the same file (82K versus 2MB).  Tried again with the bigger
-version, it failed in exactly the same way at exactly the same spot: byte
-number 1048320.  But this is just ASCII text so it can't be a transparency
-problem.  Substituting another plain ASCII file of the same size but totally
-different contents, it doesn't fail (2.36MB).  Back to the previous file, it
-fails again, but in a different spot (832960).  So it's not totally
-deterministic.
-
-To round things out, I tried downloading the binary test-pattern file; it's
-only 8K.  This failed.
-
-  -4, --try-4k                go up to 4K blocksize
-  -B, --bufsize N             buffer N bytes (N==auto: buffer whole file)
-  -e, --escape                escape all control characters (Z)
-  -E, --rename                force receiver to rename files it already has
-  -L, --packetlen N           limit subpacket length to N bytes (Z)
-  -l, --framelen N            limit frame length to N bytes (l>=L) (Z)
-
-Tried again with "sz -L 256 -B 256 -4aeq".  Doesn't change anything.
-
-NOTE: Mac OS X rz 3.73 1-30-03 does not support -e.
-NetBSD rz 0.12.20 does support -e.
-
-Thu 22 Mar 2007: It occurs to me that ttpkt() might still be a problem;
-maybe it's the network connection and not the pty that is not transparent
-enough.  To test this theory I did "stty raw ; stty -a" and then copied all
-of the flag values into ttpkt in the BSD44ORPOSIX section:
-
- . rz txt (zrt): OK (2.36MB file, worked 2 out of 3 times)
- . rz bin (zrb): "rz: Persistent CRC or other ERROR"
-
-A little more fiddling with the flags and I got the 8K binary test pattern
-to SEEM to download OK (in the sense that rz gave a 0 return code) but the
-file itself was truncated, always at 224.  If I changed the test pattern
-file to not include any bytes with value 224 (0xe0) or 255 (0xff), the
-download worked.  So we have a transparency problem somewhere.  The debug
-log shows that all byte values are being received from the network correctly
-so the problem has to occur when we try to feed them to the pty.
-
-But no amount of twiddling with the termios flags seems to let these
-characters pass through.  Of course, since they are not in the C0 or C1
-control range, "sz -e" doesn't quote them (which it does by prefixing with
-Ctrl-X and then adding 0x40 to the byte value so (e.g.) NUL becomes ^X@.
-Note that 255 does not cause problems because it coincides with the IAC
-character; the remote Telnet server doubles outbound IACs, and Kermit's
-ttinc() undoubles them automatically (as the log shows).
-
-Trying to send a different file (a C-Kermit binary) shows that 255 is the
-real killer; the file is truncated where the first one appears (at about
-6K), even though some 224's precede it.  Going back to the remote-mode test,
-I see the same thing happens with the binary test-pattern file, if I send it
-from K95 direct to rz-under-C-Kermit-in-remote-mode.  So it has nothing to
-do with C-Kermit having a network connection.  Yet if I send the same file
-direct from K95 to rz, it goes OK and the result is not truncated, so it's
-not Zmodem either.  The data arrives to C-Kermit intact, so the failure is
-definitely in writing it to the rz process through the slave and master ptys.
-
-BUT if I send the same file from K95 to rz-under-ttpty, that works.  What's
-the difference?  Suppose I just transplant ttpty literally into C-Kermit...
-It makes no difference.  When receiving the test-pattern, it truncates it
-in exactly the same place.
-
-Well, all this is on Mac OS X.  What if I move it to a different platform?
-OK, building on Solaris and following the exact same procedure, ttptycmd()
-doesn't even use the network connection.  I think that's because rzsz on
-Solaris is hardwired to use the controlling terminal and can't be
-redirected, even in a pty?
-
-Moved to NetBSD.
-
- . sz txt (zst): Failed ("Got ZCAN")
- . sz bin (zsb): 
- . rz txt (zrt): OK
- . rz bin (zrb): 
-
-Well, this is a big mess.  Sending doesn't work (or sometimes it does but
-reports that it didn't).  Receiving...  well, actually it's the same thing;
-the file is completely transferred but then the final protocol handshake is
-lost.  The local C-Kermit returns to its prompt, but rz is still running:
-
-  Retry 0: Got TIMEOUT
-  Retry 0: TIMEOUT
-  Retry 0: Got TIMEOUT
-  Retry 0: TIMEOUT
-  Retry 0: Got TIMEOUT
-  Retry 0: TIMEOUT
-  Retry 0: Got TIMEOUT
-  Retry 0: TIMEOUT
-  Retry 0: Got TIMEOUT
-  Retry 0: TIMEOUT
-  Retry 0: Got TIMEOUT
-
-I don't see how that is even possible.  Even after I exit from Kermit the
-messages keep coming, even though ps doesn't show the rz process anywhere.
-Looking at the code, I see a place where end_pty() was still commented out
-from the ttpty.c episode, I uncommented it.  But still:
-
- . sz txt (zst): Fails ("Got ZCAN")
- . sz bin (zsb): Fails instantly (but with no diagnostic)
- . rz txt (zrt): OK
- . rz bin (zrb): Fails with tons of "Bad CRC", "Gargage Count exceeded"
-
-Conclusion for the day: I think this is hopeless.  Even if I can get it to
-work somewhere, the results depend on the exact Zmodem software, how it uses
-stdin/out vs stderr versus getting its own nonredirectable file descriptor,
-versus the Zmodem version on the other end and which options are available
-on each, versus the pty and select() quirks on each platform, and on and on.
-It will be so hard to explain and to set up that nobody would ever use it.
-It would be better to just implement Zmodem internally.
-
-Fri 23 Mar 2007: Went back to the small test program, ttpty.c.  Tried
-setting both the master and the slave pty to rawmode, even though I have
-never seen any other software that did this.  I had it receive the binary
-test pattern file; it worked.  I made a bigger test-pattern file, 3MB,
-containing single, double, and triple copies of each byte in byte order and
-in random order, this one was accepted too.
-
-So it would seem that the ckupty.c module is something to avoid after all.
-It's full of stuff I don't understand and probably should not undo.  So
-changing C-Kermit's ttptycmd() to manage its own pty again, using openpty()
-(which is not portable), I got it all to work in remote mode: Kermit
-text/binary up/down and Zmodem text/binary up/down.  But in local mode on
-the client side of a Telnet connection...
-
-  zst: OK, but we still get the getty babble at the end that starts sz.
-  zsb: OK, ditto.  This is with the 3MB test-pattern file.
-  zrt: Not OK -- "Persistent CRC or other ERROR"
-  zrb: Not OK -- got the cutoff at 224 again "Persistent CRC or other ERROR"
-
-It's close.  But actually this was still with USE_CKUPTY_C defined.  When I
-undefined it, it was back to being totally broken.  Start over.  (Check the
-new cfmakeraw() code.)
-
-Tue 27 Mar 2007: Starting over.  Back to ttpty.c.  Let's verify, VERY
-CAREFULLY, that it really does work, using the most stressful of the four
-tests: sending the big (3.2768MB) binary test pattern from K95 into rz
-through ttpty, logging everything.  ttpty definitely receives the big file
-smoothly with no errors or hiccups when I have it set to use the master side
-of the pty for i/o.  The application program (Zmodem in this case) runs on
-the slave, and the network and/or control program communicates with the
-master.  This implies that Zmodem controls the terminal modes of the slave,
-and ttpty should be concerned with those of the master.  Doing it this way
-in ttpty confirms this.
-
-Fine.  But if I tell ttpty to SEND a file with sz, nothing happens.  Ditto
-with lsz.  Select times out waiting for input from the pty.  But if I
-manually tell K95 to RECEIVE /PROTOCOL:ZMODEM it works OK.  Somehow sz's
-initial B000000 string is being swallowed somewhere, and it's waiting for
-a reply from the receiver.  sigh...  But "ttpty gkermit -s filename" works
-fine.  What's the difference?  It has nothing to do with stdout vs stderr;
-sz is not writing to stderr at all.  Is it some timing thing between the
-forks?  Aha.  It's that I change the modes of the pty master in one fork
-while sz is already starting in the other fork.
-
-OK, good, now for the first time we have Kermit and Zmodem both able to
-upload and download a large worst-case binary test-pattern file... in
-remote mode.  Now taking today's lessons and fitting them back into
-C-Kermit so I can try it local mode...
-
-Using G-Kermit as the external protocol, first in remote mode...  All good:
-text/binary up/down.  The "halting problem" is solved by SIGCHLD, which
-catches fork termination instantly and lets ttptycmd() know there is no more
-pty.  Zmodem:
-
-  zst: OK
-  zsb: OK
-  zrt: OK
-  zrb: OK
-
-That's a first.  Next, repeat in local mode, in which C-Kermit is the client
-and has made a Telnet connection to another host over a secure (Kerberos V)
-connection:
-
-  kst: OK     zst: ...
-  ksb: OK
-  krt: OK  
-  krb: OK
-  
-It seems we can never end a day on a high note.  Somehow I seem to have
-broken regular internal Kermit protocol transfers over encrypted connections
--- the en/decryption engine loses sync.  But they still work OK over a
-clear-text Telnet connection.
-
-Today's code in ~/80/dulce.tar (27 Mar 2007).
-
-Added makefile target solaris10g+openssl.  Gathered all the standard CFLAGS
-for Solaris into cdcdeb.h so they don't have to be included in every single
-makefile target for Solaris.  On local Solaris 10 host OpenSSL is in
-/opt/openssl-0.9.8e/.  Tried the new makefile target, works OK.  Also made
-solaris10+openssl for Sun CC, but couldn't test it because I can't find any
-Solaris 10 host that has Sun CC.  Built with gcc at another site that has
-OpenSSL 0.9.8f-dev, all OK.  ckcdeb.h, makefile, 24 Jun 2007.
-
-It occurs to me that Kermit transfers on secure connections might have been
-broken by the changes I made back in February to ttinl() for John Dunlap.
-Here, for the first time, we invoke myunrd() to push a byte back into the
-input queue, and there is also some funny business with "csave", which
-changed, and which an old comment notes that it has to be treated specially
-when encrypting.  So it could be that the broken Kermit transfer has nothing
-to do with the work on external protocols, and that putting back the
-previous ttinl() will fix it.  But now I can't seem to make a Kerberized
-connection from Panix to Panix, even though I can make one from Columbia to
-Panix.  This means I have to build a Kerberized binary from the current
-source code on either Solaris or Mac OS X.  Trying Solaris
-first... [~/solaris9k5/mk5.sh] This didn't work the first time due to
-undefined krb5_init_ets, which is referenced if MIT_CURRENT is not defined
-(it should be for Kerberos 5 1.05 and later and we have 1.42 here), tried
-again with -DMIT_CURRENT=1...  Nope, that one totally blew up in ck_crp.c.
-Later, Jeff says krb5_init_ets is a no-op in Kerberos 1.4.x and later,
-so I added an #ifdef (NO_KRB5_INIT_ETS) for skipping it; now it builds and
-runs OK.  ckuath.c, makefile, 9 Jul 2007.
-
-Meanwhile, using C-Kermit on Mac OS X, which makes the Kerberized connection
-just fine, but still has the problem transferring files over it.  Packet log
-shows:
-
-  s-00-01-^A9 Sz/ @-#Y3~Z! z0___F"U1@A^M 
-  r-00-01-^A9 Y~/ @-#Y3~^>J)0___J"U1@I
-  s-01-01-^A(!Fx.x)(V^M
-  r-xx-08-<timeout>
-  S-01-08-^A(!Fx.x)(V^M
-  r-xx-08-<timeout>
-  S-01-08-^A(!Fx.x)(V^M
-  r-xx-16-<timeout>
-
-Note that S packet is sent, received, and Ack'd OK.  The F packet is sent but
-is never Ack'd.  Tried this several times and noticed that it's just
-receiving that is screwed up, not sending.  After ^C'ing out of the
-transfer, I can still type commands, and they are executed on the far end,
-but the results coming back are gibberish.  Mon Jul 9 16:08:22 2007 (come
-back to this later... substitute Dev.27 ttinl for current one and see if
-the problem goes away, and if so, conditionalize the new code for clear-text
-connections).
-
-Built C-Kermit with Kerberos 5 on Solaris with a version of ckutio.c that
-uses the old ttinl() and transferred a file OK over a Kerberized connection.
-So now it's just a matter of reconciling the old and new ttinl.  The easiest
-way to do this is to have new ttinl() chain to old ttinl() if the connection
-is encrypted, which is what I did and it works fine.  At some point the two
-versions of ttinl() should be reconciled.  ckutio.c, 12 Aug 2007.
-
-There was a function, islink(), used in only one place (ckuus6.c) that had
-the same name as a commonly used scalar variable, and it was missing a
-prototype.  Changed its name to isalink() and added the prototype (Unix
-only), ckuus6.c, ckufio.c, ckcdeb.h. 12 Aug 2007.
-
-Revisiting the ASCII and BINARY top-level commands, which are supposed to
-be like in other FTP clients, but don't seem to have any effect.  I added a
-new routine to the FTP module, doftpglobaltype(), that sets the global,
-sticky, permanent transfer mode (ASCII or BINARY) (TENEX could be added to
-if anybody asks).  These commands (now that they work) are different from
-SET FTP TYPE { ASCII, BINARY }, which set the *default* transfer mode when
-automatic switching fails for a given file.  ckuusr.c, ckcftp.c, 12 Aug 2007.
- (notify: Matt <mlist@cmcflex.com>)
-
-Even though the code hasn't changed, suddenly we're getting:
-
-  "ckuusx.c", line 5682: warning: implicit function declaration: tgetent
-  "ckuusx.c", line 6183: warning: implicit function declaration: tgetstr
-  "ckuusx.c", line 6262: warning: implicit function declaration: tputs
-  "ckuusx.c", line 6266: warning: implicit function declaration: tgoto
-
-in ckuusx.c on Solaris 9.  <curses.h> is still in /usr/include, dated 2002.
-A quick search shows the missing functions are hiding in <term.h>, which
-until now was included only in Linux.  Added a USE_TERM_H clause.  No, that
-doesn't help, the prototypes are not selected at compile time; there are
-#ifdefs in that file that skip over these prototypes.  I had to put them in
-the code under #ifdef BUG999..#endif (I could have used a longer name like
-#ifdef ADD_PROTOTYPES_FOR_CURSES_FUNCTIONS, but that would not be portable).
-ckuusx.c, 12 Aug 2007.
-
-Also:
-
-  "ckuusx.c", line 9232: warning: implicit function declaration: creat
-
-This is called in the IKSD dababase code, used for getting a lockfile.
-creat() is a Unixism in code that is supposed to be portable.  But IKSD only
-runs on Unix and Windows, so I assume the Windows C library has a creat()
-function.  Anyway, suddenly the Solaris header files seem to have blocked
-whatever path previously existed to the creat() prototype (which is in
-<fcntl.h>), so I added an #include in the appropriate spot.  ckuusx.c,
-12 Aug 2007.
-
-Kermit functions for converting the number base -- \fradix(), \fhexify(),
-\unfhexify() -- did not work with big numbers; ckradix() was missed in the
-CK_OFF_T conversion.  Fixed in ckclib.c, 12 Aug 2007.
-
-Updated the help text for ASCII, BINARY, and SET FTP TYPE to clarify the
-semantics.  ckuus2.c, ckcftp.c, 12 Aug 2007.
-
-Error messages were printed upon failure to open any of the four log file,
-even with SET QUIET ON.  Fixed in ckuus4.c, 12 Aug 2007.
-
-Built OK on NetBSD 1.3_RC3.  Tried to build secure version but the libraries
-had disappeared.  13 Aug 2007.
-
-Built OK on Mac OS X 10.4.9.  Tried the secure version, macosx10.4+krb5+ssl.
-Here we get the usual pile of "pointer targets in passing argument 1 of
-(function name) differ in signedness", regarding security functions, but it
-built OK.  13 Aug 2007.
-
-Reconciling the two ttinl's...  On encrypted connections myread() returns
-encrypted bytes; ttinl() has to decrypt them; it wasn't doing this in the
-lookahead section so I fixed it.  The new code works on both encrypted and
-clear-text connections.  I removed the chaining to oldttinl(), and
-oldttinl() itself.  ckutio.c, 13 Aug 2007.
-
-  (Wouldn't it make more sense and be more efficient and less confusing
-  for myfillbuf() to do the decrypting?)
-
-When C-Kermit uses Zmodem as an external protocol, it doesn't seem to scan
-files before sending them to set text or binary mode appropriately.  It's
-that external protocols bypass Kermit's whole "get next file" mechanism; the
-(possibly wild) filespec is simply passed to the external protocol program.
-Changing this would be a very big deal.  But if only one file is being sent
-(the filespec is not wild) it's easy enough to check.  I added this to the
-external protocols section of the protocol module.  It can be overridden in
-any of the regular ways (/TEXT or /BINARY switch on SEND command, SET
-PATTERNS OFF, SET TRANSFER MODE MANUAL, etc).  ckcpro.w, 13 Aug 2007.
-
-[FTP SEND /RECURSIVE]
-Peter Crowley reported a problem with FTP recursive uploads getting the
-directory tree wrong when the previous pathname was a left substring of the
-new pathname (e.g. foo/bar/ and foo/bar2/).  The logic did not handle this
-case and created the bar2 directory as a subdirectory of bar, rather than as
-a parallel directory.  Fixed in syncdir() and tested with various edge cases.
-ckcftp.c 14 Aug 2007.
-
-  notify <peter.crowley@alumni.utexas.net>
-
-Added CD messages to FTP BRIEF display to track the ups and downs of
-recursive uploads.  ckcftp.c, 14 Aug 2007.
-
-The OUTPUT command gave a misleading error message ("Connection to xxx not
-open") when used on a serial port that was, indeed, open but was not
-presenting the Carrier signal, when CARRIER-WATCH was not OFF.  Added a new
-message for this, and some others.  ckuus5.c, 14 Aug 2007.
-
-Sending from the command line, e.g. kermit -s foo, did not give an
-informative error message if the file could not be found or opened.  Fixed
-in ckuusy.c, 14 Aug 2007.
-
-OK, back to ttptycmd....  It seems that back on March 27th, I got everything
-working but I thought that there was still something wrong with it because
-an unrelated problem so I put it aside.  The version of ttpty.c from that
-date worked OK, and it looks like I updated ckutio.c from it, but that
-version of ckutio.c was put aside.  Since then I have been working on the
-ckutio.c version that was NOT put aside and so now I have to reconcile the
-two:
-
-  ~/80/ttypty/20070327/ckutio.c
-  ~/80/ckutio.c
-
-As a first cut I did this simply by replacing the contents of the #ifdef
-CK_REDIR section of the latter with that of the former.  Of course in
-Solaris this comes up with openty() implicitly declared at compile time and
-unresolved at link time.  So the first task is to get HAVE_OPENPTY defined
-for platforms that have it and have the others use the ttruncmd().  For
-starters I put an #ifdef block in ckcdeb.h that defines HAVE_OPENPTY for
-Linux, FreeBSD, NetBSD, OpenBSD, and Mac OS X.  Ones that don't have
-openpty() include AIX, HP-UX, and Solaris.  Others like SCO I don't know but
-I doubt it.  The real solution is to get the ckupty.c module to work but one
-thing at a time...  This version is supposed work with secure builds on the
-openpty() platforms, and on the others like Solaris, if an external protocol
-is attempted on a secure (encrypted) connection, an error message is
-printed and the command fails.  ckutio.c, 14 Aug 2007.
-
-How to test?  Apparently I did all my testing on Panix before, and that's
-where all my Zmodem builds are, but now when I build a Kerberized version
-(which works if I do it on the right pool host), it won't make a local
-connection, and there is no other place I can connect to that has a
-Kerberized Telnet server.  I can, however, connect to Panix from here, using
-the same code, but on Mac OS X...
-
-Slight detour: Got access to AIX again (5.3.0.0).  Picky compiler, some
-things needed fixing....  Also it says "1506-507 (W) No licenses available.
-Contact your program supplier to add additional users. Compilation will
-proceed shortly" and of course it goes kind of slow.  For some reason, I
-can't do streaming transfers into AIX over a local network (to its SSH
-server), but windowed transfers are OK.  Anyway, noting that we've been
-using the same basic makefile target since AIX 4.2, changing nothing but the
-version herald, I made a new target, simply "aix", that picks up the AIX
-version automatically and sets the herald from it.  Ditto for aix+openssl,
-but on this host requires setting SSLINC and SSLLIB to /opt/ssl/include and
-/opt/ssl/lib.  Also the make program here was extremely sensitive to spacing
-so I had to make some minor edits to get the link step to work for the SSL
-version.  ckuusy.c, makefile, 14-15 Aug 2007.
-
-Got rid of the special Panix secure NetBSD target, replaced it with a
-regular one, which is invoked in the normal way by defining K5INC and K5LIB
-to point to to where the stuff is hidden.  Cleaned up and modernized the
-comments in the makefile a bit.  makefile 15 Aug 2007.
-
-Changed some data types and added some casts to ckctel.c to do away with
-tons of "pointer targets in passing argument 1 of 'xxx' differ in signedness"
-warnings.  15 Aug 2007.
-
-Set up Mac OS X as the testbed for ttptycmd(), with Panix as the remote
-partner over a Kerberos 5 connection.  The first test is to send a 300K
-text file with gkermit as the external protocol.  It worked fine, and the
-debug log showed all the right components were active (namely encryption and
-ttptycmd) [kermit/zmodem send/receive text/binary]:
-
-  Kermit    Zmodem
-  kst OK    zst OK
-  ksb OK    zsb OK
-  krt OK    zrt OK
-  krb OK    zrb Failed "rz: Persistent CRC or other ERROR"
-
-We've seen this before.  The problem is 0xff, Telnet IAC, as I proved to
-myself by constructing a 3MB file that contained every byte but 0xff in every
-mixture and order and transferring it successfully over the same connection.
-Presumably the Telnet server is doubling IACs, whereas of course rz is not
-undoubling, thus the CRC error.  This is progress.  15 Aug 2007.
-
-Log shows that indeed every IAC in the source file arrives doubled.  Adding
-code to remove the first IAC of every adjacent pair, a small test file with
-different-length runs of IACs transfers OK.  The 3MB all.bin file does not.
-
-Starting over...  I can receive a big text file with Zmodem OK.  The 3.2MB
-binary test pattern that contains no IACs failed after 1.8MB, but the part
-that it transferred was OK.  A second try, almost the whole thing arrived,
-it stopped just 584 bytes short of the end.  Could be that file size is a
-separate problem.  Making a new copy exactly 1MB long...  Well, that's
-interesting, this one too stopped just short of the end.  And again, the
-same thing.  When connecting back to the host, the last Zmodem packet can
-be seen on the screen; it's as if the local Zmodem exited before reading
-the last packet...  But OK, if I change the options on the remote sz
-sender to use small blocks, etc, then it works.
-
-Now, changing from the 1MB no-IAC-binary test pattern, to the 1MB all-values
-test pattern, we fail after 81K.  But the part that was transferred is
-correct.  Second try, same thing, but 57K.  Third: 40K.  Each time, upon
-connecting back, the session is completely dead.
-
-IF I HAVE TO undouble IACs for incoming files, don't I have to double them
-going out?  To send a block to net we just call ttol(), but ttol() doesn't
-do any doubling (because Kermit protocol always quotes 0xff).  To see what
-happens, I changed the ttol() call to ttoc() in a loop that doubles IACs.  I
-tested this by sending the full 3.2MB test pattern, which worked fine.
-
-For receiving, it's slow but it works OK with files that don't contain IACs
-(my concern was that IACs might appear in outbound files or in Zmodem
-protocol messages).  It receives the 1MB no-IAC test pattern, so there are
-no problems with protocol or timing.  But the full test pattern always gets
-cut off, but at different points, as before, with the remote session dead.
-Changing the Zmodem receiver from rz to lrz on the local end (since the
-sender on the remote end is lsz) does not change the behavior.
-
-Anyway, I went back and replaced the byte loop with something more
-efficient, and it goes about 20 times faster.  But this doesn't help either,
-it only makes it fail faster.  But aha, what if a doubled IAC is broken
-across successive pty reads -- we have to make the "previous character"
-memory persistent.  Well, that was a good insight, but it still didn't fix
-it.  The log shows the IAC handling code is working fine.
-
-What does sz say?  Capturing its stderr to a file... "Retry 1: Got ZCAN".
-Next time: "Retry 1: Got TIMEOUT".  Next time: Got ZCAN.
-
-Trying different Zmodem options...  apparently I don't need to use short
-blocks.  But I do need to use -e, probably because of Telnet NVT treatment
-of carriage return; without -e, there is a "persistent CRC error".  -O
-disables timeouts, but this makes no difference.
-
-OK, we still have two Big Problems:
-
- 1. When a long file has no IACs, the final < 1K of the file is not received.
- 2. When a long file has IACs, the transfer generally stops very early.
-
-Problem 1: the transfer consistently fails less than 1K from the end of the
-file.  Upon CONNECT back to the host, a big Zmodem packet is sitting there
-waiting to be read, which means ttptycmd()'s copy of rz is terminating
-early.  Can we catch it in the debug log?  Doing this takes forever and
-writes a GB to the disk...  And then the problem doesn't happen.  Also, I
-can receive a HUGE text file almost instantly with no errors at all.
-
-Switching to lrz on the receiving end, now I see the error messages, about
-300 lines like this:
-
-  Retry 0: Garbage count exceeded
-  Bytes received:  872352/1000000   BPS:85464  ETA 00:01  Retry 0: Bad CRC
-  Bytes received:  892448/1000000   BPS:86690  ETA 00:01  Retry 0: Bad CRC
-  Retry 0: Garbage count exceeded
-  Retry 0: Garbage count exceeded
-  Retry 0: Garbage count exceeded
-  Retry 0: Garbage count exceeded
-  Retry 0: Garbage count exceeded
-  Retry 0: Garbage count exceeded
-  Retry 0: Got ERROR
-  Bytes received:  898336/1000000   BPS:84293  ETA 00:01  Retry 0: Bad CRC
-  Retry 0: Garbage count exceeded
-  Retry 0: Garbage count exceeded
-  Bytes received:  900384/1000000   BPS:83751  ETA 00:01  Bad escape sequence
-  2fRe
-  try 0: Bad data subpacket
-  Bytes received:  941472/1000000   BPS:86191  ETA 00:00  Retry 0: Bad CRC
-  Retry 0: Garbage count exceeded
-
-Even when it succeeds, it gets these.  But if I receive a text file, no
-matter how big, no errors or retries or timeouts at all.  So it appears that
-there is only one problem: a big-time lack of transparency regarding 8-bit
-and/or control characters.  The odd thing is, it's not that the characters
-can't get through -- they all can -- but they seem to cause transitory
-blockages.  16 Aug 2007.
-
-Cleaned up the remaining pointer signedness warnings in ckutio.c, but this
-was a mistake, it broke Kerberos connections completely.  Undid the changes.
-ckutio.c, 17 Aug 2007.
-
-Changed all return() in the fork()==0 section of ttptycmd() to exit().
-ckutio.c, 17 Aug 2007.
-
-Tried explicitly setting the slave pty to rawmode.  Makes no difference.
-Tried using the Mac OS X (curses) raw() function, and also system("stty
-raw"); still no difference.  Tried doing all of these in different
-combinations and orders.  I found one combination that cuts the errors about
-in half, and the transfer of the no-IAC test pattern almost always succeeds
-(but it's slow).  Anyway, it doesn't help much with the test pattern that
-contains IACs.  Well, the code is more solid than it was before but
-functionally we have not advanced much if we can't download a binary file
-with Zmodem!  On the other hand, we can upload them, and we can transfer
-text files in both directions, which is an improvement over the previous
-situation, in which the entire session would hang due to loss of
-synchronization of the encryption stream.
-
-Tried adding -funsigned-char to CFLAGS of Mac OS X target.  It does not
-make the "signedness" warnings go away and it doesn't change the runtime
-symptoms.
-
-I tried a simpler version of pty_make_raw(), the one from Serg Iakovlev, but
-it was a total failure.  That's encouraging though, because it indicates
-that pty_make_raw() is the right place to be working.
-
-Then I made pty_make_raw() set or unset every single terminal flag
-explicitly.  This made no difference, but didn't hurt anything either.
-
-Then I made pty_make_raw() explicitly set all the c_cc[] characters to 0
-(but left c_cc[VMIN] as 1).  This made no difference either.
-
-I checked pty_make_raw() against ttpkt() and the only difference I found in
-the terminal flags is that ttpkt() sets IGNPAR thinking it means "ignore
-parity errors" when really it means "discard any character that has a parity
-error" (at least according to Iakovlev) -- exactly the opposite.  But I
-tried it both ways, no difference.  17 Aug 2007.
-
-I noticed that even Zmodem text receives can fail.  They don't get any
-errors, they just get cut off shortly before the end.  (But usually they
-succeed, and fast too, like 500K cps).
-
-What if I don't call pty_make_raw() at all on the slave pty?
-
-zrt: EESSSSSSSS: 80% good (E = stopped just before end but no other errors)
-
-zrb no-IAC test pattern, short blocks:
- 1. S/5 (success with 5 screens of errors.
- 2. S/7
- 3. S/7
- 4. S/6
- 5. E/7 (failed just before end)
- 6. S/7
- 7. S/6
- 8. S/6
- 9. S/6
-10. S/4
-
-So, lots of errors, but it recovered 90% of the time.
-Next, same thing, but without requesting short blocks:
-
- 1. E/5
- 2. S/5
- 3. E/4
- 4. S/5
- 5. S/5
- 6. S/5
- 7. X/0 (hard failure right away: "Got ZCAN"
- 8. S/5
- 9. S/5
-10. S/5
-
-So it doesn't look like short blocks make that much difference.  Now what if
-I turn off prefixing?  Bad CRC, fails immediately every time.  Putting back
-pty_make_raw(slave), it still fails hard.
-
-Tried a new strategy with pty_make_raw(): rather than modify existing flags,
-I set all flags to 0, and then turn on only those few that we need like CS8.
-Now we get only 2.5 screens of errors instead 4-7 and the transfer rate is
-higher for binary files (all of the previous ones were under 100K CPS, while
-for text files it was 400-500K CPS):
-
- 1. S/2 195669 CPS
- 2. S/2 194720
- 3. E/3
- 4. S/2 192550
- 5. S/3 192325
- 6. S/3 145066
- 7. S/2 200689
- 8. S/3 188948
- 9. S/2 209461
-10. S/3 181991
-
-I noticed that there was no TIOCSTTY ioctl in the pty/fork setup sequence,
-which is recommended somewhere, so I tried that and it was a disaster; the
-entire session hung.  I took it back out.  18 Aug 2007.
-
-Tried some transfers over a clear-text (not encrypted) connection with the
-same results: smooth, fast transfer of a big text file (400K cps); rocky but
-successful transfer of the no-IAC binary pattern file (135K cps).  Switching
-back to ttruncmd(), the same binary file is received at 1.5M cps, and the
-no-IAC binary file totally fails after too many "Bad CRC"s; and we already
-know that any file that contains IACs will fail.  One might say that
-ttptycmd() is better in every respect than ttruncmd() except in speed
-(when it works).
-
-Let's see if ttyptycmd still works in remote mode (to local K95):
- . sz / text works, but slowly.
- . lsz / text works but some wierd errors are reported.
- . lsz / binary / no IAC doesn't work at all (CRC-32 mismatch for a header;
-        Unexpected control character ignored: 13, etc).
- . sz / binary / no IAC works OK but slow.
- . sz / binary / full test pattern with IAC works OK but slow.
- . Sending text into rz fails completely.
-
-What about ttruncmd() in remote mode?
- . send /text works, fast.
- . send /binary works, fast. 
- . receive /text works, not so fast but not bad.
- . receive /binary works, not so fast but not bad.
-
-So we use ttruncmd() for remote mode, and we use it for local mode
-serial-port and modem connections, and we use ttptycmd() on network
-connections because (a) they might be encrypted, and (b) even if they are
-not, they use some protocol that we have to handle, e.g. Telnet, Rlogin.
-19 Aug 2007.
-
-Discovered that Sending binary files no longer works.  Text is OK, binary
-transfers don't even start.  This happens on both encrypted and clear-text
-connections.  ttptycmd() is being used in both cases.  But oddly enough,
-receiving binary still works as before.  What did I break, and when?
-Oh, it was just the script, when I changed it from using sz to lsz.  Putting
-it back to sz makes it work, even with the full 3.2MB binary pattern with
-IACs.
-
-I backed off the changes I made to ckctel.c to suppress some warnings, in
-view of the fact that similar changes to ckutio.c broke things so badly.
-19 Aug 2007.
-
-If sz is not given the -e flag, it sends control characters bare, except ^P,
-^Q, ^S, and ^X.  ^X is the control prefix, so ^A is sent ^X followed by A.
-With -e, all C0 control chars are prefixed, but with ^X, which is, of
-course, a control character.  Interestingly, the C1 analogs of ^P, ^Q, ^S
-(but not ^X and, unfortunately, not IAC) are also prefixed.  -e makes no
-difference for 8-bit characters.
-
-If we have a Telnet connection and the server is in ASCII (NVT) mode, CR is
-always followed by LF or NUL.  Well, it seems the server is putting us
-(Kermit) in binary mode in this case, but staying in ASCII mode itself.
-Added code to handle NVT byte stuffing and unstuffing in each direction
-independently, according to the TRANSMIT_BINARY state in that direction.  I
-made a file containing just the bytes 0-31 and 127 and 128-159 and 255 (66
-bytes all together) and sending it from the host to C-Kermit, the local log
-shows that every control character was received correctly and all TELNET
-conversions were done right -- NUL removed after CR (and only after CR); IAC
-removed after IAC (and only after an IAC meant as a quote).  For the first
-time, I can receive the 1MB all-values test pattern, but there are still
-tons of (correctable) CRC errors, so the transfer rate is really awful, like
-about 5% of what we get with a text file (25Kcps instead of 500).
-
-Further experimentation shows that the fundamental transparency problem is
-fixed; we can receive short files (say, 1K or less) containing absolutely
-any byte values in any combination with no errors at all.  But once the file
-size reaches (say) 10K, we get CRC errors, like one every 2 or 3K of data.
-These are not deterministic.  In successive transfers of the same file, they
-come in different spots.  It's tempting to blame pty buffer overruns, but
-then text files would show the same behavior.  When a binary file size
-exceeds, say, 1MB, the chances of successful completion go way down,
-independent of whether my external protocol is rz or lrz.  I like lrz better
-because the error reports come out on the screen as the transfer is going
-on.  Trying to download a real-world binary file -- a 2.2MB C-Kermit
-executable -- I get 4500 error messages but the transfer evenually succeeds,
-with an effective throughput of 21Kcps.
-
-Actually it turns out that "sz -a somebigtextfile" (2.2MB) also gets a lot
-of CRC errors.  The -e flag (escape all control characters) makes the same
-big text file transfer with few or no errors.  It's not sure-fire.
-Sometimes no errors, sometimes one or two, and sometimes a fatal error that
-kills the transfer.
-
-With binary files... a 32K binary file seems to make it every time.  40K
-fails about 50% of the time.  48K fails 60% and every time it fails, it has
-created a partial file of exactly 32K (32768 bytes).  96K fails 9 out of 10
-times, when it fails, the partial file is always 0 bytes, or 32768, or
-65536, but that just means that rz's file output buffer is 32K.
-
-Why, then, do binary files cause trouble if it is not a solid transparency
-problem?  If a certain file can get through once, why can't it get through
-every time?  When a character arrives at the pty, the pty driver probably
-takes a different path through its code, checking the terminal flags that
-would affect that character.  I tried making Kermit's network read buffers
-very small but, surprisingly, this made things worse.  I also tried making
-them very much bigger, which didn't help either.  24K still seems to be the
-right size.
-
-So, is it that some characters take longer to process than others?  So long
-that data is lost due to lack of flow control between TCP and the pty?  One
-way to test this theory is to slow Zmodem down.  I tried "-l 32" which,
-according to the man page, tells sz to "wait for the receiver to acknowledge
-correct data every N (32 <= N <= 1024) characters.  This may be used to
-avoid network over-run when XOFF flow control is lacking."  Makes no
-difference.  I also tried the -w (Window) switch, ditto.  In fact there are
-all sorts of options to set the "window size", "packet length", "block
-size", and "frame length", but with no explanation of what these mean or how
-they are related.  If I crank everything down to minimum value:
-
-  lsz q -L 32 -l 32 -w 1
-
-I get 50% success with the 96K file instead of 10%.  Adding -e, oddly
-enough, made it worse.  I also tried setting the environment variable
-ZNULLS to different numbers like 512, no help there either.
-
-I tried making the read-from-net-write-to-pty buffer small (1K) but leaving
-the pty-to-net one big.  This improves chances of success, but it's
-intolerably slow (3Kcps when the connection is capable of 500K).
-
-I also changed the write-to-pty operation from a single write() call of
-possibly many K characters to a byte loop, one write() per byte.  Same
-result: success (but still about 300 recoverable errors), throughput 3Kcps.
-20 Aug 2007.
-
-With ttptycmd() configured to write to the pty in a byte loop, it is
-possible to delay each write.  Adding a 10msec delay per character results
-in a transfer that runs at about 20 cps and (for the 96K test file) would
-take about 80 minutes to complete.  And yet it still gets just as many
-errors.  So it's not a matter of timing either.  The errors come, on
-average, every file 388 bytes, but not at regular intervals.
-
-I tried the TIOCREMOTE ioctl on the pty master, as discussed somewhat
-obliquely in the Mac OS X "man pty" page; "This mode causes input to the
-pseudo terminal to be flow controlled and not input edited (regardless of
-the terminal mode)" -- sounds like just the ticket but it made no
-difference.  Actually, looking at a man page on another OS (Solaris), it
-says this is only for lines of text, EOLs are supplied, so that would mess
-up the protocol.  So remember: don't use this.
-
-Tried without O_NDELAY; the behavior was the same but the speed was much
-slower.
-
-Tried switching back to the ckupty.c routines on Mac OS X and found that it
-works now the same as with openpty(), except that I seem to get more getty
-babble at the end.  But this means I can run some tests on Solaris.  I moved
-the entire test environment from Mac OS X 10.4.9 to Solaris 9.  But it
-doesn't work at all.
-
-Trying to figure out the ckupty.c modules again.
- . do_pty() calls pty_getpty() which returns in arg1 the fd of the pty master.
- . Then it creates a pipe as a way to tell when the child dies
- . Then it creates a fork:
-    - The parent does a blocking read from the pipe
-    - The child calls getptyslave() to get the pty slave
-      and writes one byte to the pipe
-      and then execs the command it's supposed to run
-Note that the file descriptor of the slave is known only to the lower fork.
-Therefore the lower fork is the one that has to set all the tty modes, etc.
-I took care of all that but the ckupty.c method doesn't work at all on
-Solaris.  But it works "fine" on Mac OS X (the 32K all-bytes test file
-transfers instantly with no errors, but the 96K one errors out).
-
-The problem on Solaris is that pty_make_raw() fails on the masterfd (but not
-on the slavefd) with errno 25 "ioctl inappropriate for device".  It doesn't
-matter whether I do it in ckupty.c or ckutio.c.  I found a web page on
-kde.org that says Solaris does not allow tcget/setattr() on a pty master.
-But the Sun "knowledge base" is not open to the public.  Well, presumably
-changes made to the slave are reflected in the master (comments in Solaris
-telnetd seem to confirm this...)  Let's come back to Solaris later.
-
-Moving to a Linux with lrzsz installed...  Built a Kerberos 5 version with
-USE_CKUPTY_C.  Like on Mac OS X, it transfers short files OK and chokes on
-longer ones.  Switched to openpty(), it behaves the same.  So the problems
-on Mac OS X are evidently not OS-specific, which is good I guess, since that
-means finding the way around them will apply to more than one platform.
-21 Aug 2007.
-
-Look into TIOCSCTTY again.  On System V based OS's, opening a pty acquires a
-controlling terminal automatically.  On BSD-based OS's, no; you have to use
-the TIOCSCTTY on the slave file descriptor to give it one.  I'm not sure why
-a controlling terminal would be needed, except that without one, the virtual
-device "/dev/tty" does not exist for the process that runs on the pty, and
-maybe the application that runs there (e.g. rzsz) checks for it.  On the
-downside, having a controlling terminal opens the process up to terminal
-interrupts like SIGINT and SIGQUIT.  Until now I have not been using this
-ioctl().  Results (in Linux):
-
-  With TIOCSCTTY: 96K all-bytes test: 11 screens of errors, then success
-  Without TIOCSCTTY: exactly the same.
-
-Tried the same thing with TIOCNOTTY instead of TIOCSCTTY, with exactly the
-same results (no effect whatsoever).
-
-There has to be a way to make this work, because Zmodem works through
-telnetd, which basically the same thing as ttptycmd(): a relay between the
-network and a pty.  ttptycmd() is like telnetd backwards.  Modern telnetds
-are not much help; they don't access ptys or the network directly, they go
-through "mux" devices so I can't see what they're doing to get transparency
-and flow control.  An old BSD telnetd uses packet mode but that would be a
-big deal...
-
-I tried ignoring various signals like SIGTTOU and SITSTP, since some Telnet
-clients do this.  No effect, no difference.  Anyway, in Linux the transfers
-almost always finish OK despite the many errors.  There is just some trick
-I'm missing to make the pty accept a stream of arbitrary bytes without
-hiccuping.
-
-What about Solaris, which uses ckupty.c?  In streams-based OS's, where line
-disciplines and whatnot are pushed on top of the pty, it looks like the pty
-module saves the file descriptor of the "bare" slave pty (as 'spty') before
-pushing things onto it, and then later uses spty rather than the regular
-slave pty file descriptor when getting/setting terminal modes.  I'm not sure
-what this is all about but it's definitely SysVish...  It happens if
-STREAMSPTY is defined, but I noticed that STREAMSPTY is never defined
-anywhere.  I tried defining it so we take an entirely different path through
-the code.  It made absolutely no difference.
-
-Then I noticed that HAVE_STREAMS is not defined for Solaris either.  Tried
-defining it, but the session didn't work at all, no i/o.  Removing the
-HAVE_STREAMS definition but keeping the STREAMSPTY defined, I rebuilt and
-tried "set host /connect /pty emacs".  I got an EMACS screen but could not
-type anything into it, which means that STREAMSPTY should not be defined
-either.  Removed the definition and "set host /pty" works again.  So what's
-the problem with ttptycmd()?
-
-In fact, ttptycmd() works on Solaris with Kermit as the external protocol,
-but not with Zmodem, not even with text files.  So again, there is no
-fundamental problem with the code or the logic, it's Just A Matter Of
-Transparency to control and/or 8-bit characters -- some trick I don't know
-about.
-
-Looking at the Solaris debug log...  I see that ckupty.c is calling
-init_termbuf() to set the tty modes of the master, not the slave, and
-set_termbuf() to set them, but you can't do that in Solaris, error 25.  This
-is in getptyslave().  Shouldn't getptyslave() be setting the tty modes of
-the slave, not the master?  I changed it to do this, but like all other
-changes, it made no difference.  I checked to make sure that after the change,
-"set host /pty /connect emacs" still worked and it did.
-
-And then what...  I had some code to redirect stderr in ckupty.c that was
-not being executing due to a typo.  When I fixed the typo, poof, Zmodem
-binary transfers started working, or working as well as they work in Linux
-and Mac OS X.  It turns out that if I don't redirect stderr, sz and rz
-just don't work.  But lsz and lrz do.  But if I do redirect it, I don't see
-the progress messages from lsz/lrz.  22 Aug 2007.
-
-Built on HP-UX 11i v3 (B.11.31 U ia64) with optimizing compiler, got tons of
-picky warnings, but it finished and linked and runs OK.  Many of the
-warnings were like this:
-
-  "ckucns.c", line 1606: warning #2068-D: integer conversion resulted in a
-  change of sign:   tnopt[0] = (CHAR) IAC;
-
-IAC is defined as 255 in ckctel.h.  If I define it as 0xff, I don't get the
-warnings.  I changed the definitions of all the Telnet commands to be in hex
-notation rather than decimal.  If cuts way down on the HP-UX warnings and
-doesn't seem to cause problems elsewhere.  ckctel.h, 23 Aug 2007.
-
-Now it looks like Solaris is working but then it hangs at the end.  It
-appears as if the ckupty.c module is blocking SIGCHLD.  Debug log shows that
-when the transfer is complete, we received IAC DM (Telnet Data Mark) after
-sz's last gasp and before the shell prompt is printed.  But calling
-tn_doop() in this case is a mistake because we are reading the number of
-bytes that we know are available in a counted loop, but tn_doop() would
-consume an unknown number of bytes and we would never know when to exit the
-loop.  Anyway, C-Kermit doesn't do anything with DM.  Skipping over
-tn_doop() (and not writing out the Telnet command bytes) fixes the hanging
-condition at the end, even though SIGCHLD is never raised.  ckutio.c,
-23 Aug 2007.
-
-Some tests, Solaris to NetBSD over K5.
-zst sends ascii.txt, a 2.36MB ascii text file (Kcps / Errors).
-zrt receives the same file:
-
-  zst 587/0 526/0 542/0 434/0 423/0
-  zrt 827/0 800/0 847/0 FAIL  610/0
-
-So text is good.  Binary not so good.  Here we transfer the 1MB all-bytes
-pattern file.  zrb receives it successfully, but with 1248 errors, at only
-15Kcps.  Sending the same file out always fails:
-
-  Begin 20070823 16:32:07: SEND BINARY all2.bin [sz]
-  Sending: all2.bin
-  Bytes Sent:   5600/1000000   BPS:12446    ETA 01:19   FAILURE
-  End 20070823 16:32:13
-  Elapsed time: 6.617992999999842
-  cps = 151103.2121067556
-  lsz: caught signal 1; exiting
-
-Decided to move to Linux but found that something is screwed up in Linux
-C-Kermit with tilde expansion:
-
-  send ~/testfiles/all.bin
-
-doesn't expand at all (but it did yesterday!).  The problem was in the
-ancient, ancient realuid/setuid handling code; real_uid() no longer works in
-Linux.  I worked around this in whoami() by setting ruid to getuid() if
-real_uid() returned a negative number.  Maybe dangerous, worry about it
-later.  ckufio.c, 23 Aug 2007.
-
-ANYWAY... after fixing that, I tested zsb on Linux, and it's broken there
-too, using openpty(), so it's nothing to do with ckupty.c.  After sending
-the first Zmodem data packet, it just hangs, nothing comes back.  In text
-mode it gets farther, but then the same thing happens.  Captured stderr from
-rz on the far end:
-
-  Bytes received:     608/1000000   BPS:21137  ETA 00:47  Retry 0: Bad CRC
-  Bytes received:     864/1000000   BPS:23540  ETA 00:42  Retry 0: Bad CRC
-  Bytes received:    1120/1000000   BPS:25003  ETA 00:39  Retry 0: Bad CRC
-  Bytes received:    5696/1000000   BPS:56988  ETA 00:17  Retry 0: Bad CRC
-  Bytes received:    9120/1000000   BPS:62227  ETA 00:15  Retry 0: Bad CRC
-  Bytes received:    9376/1000000   BPS:60766  ETA 00:16  Retry 0: Bad CRC
-  Bytes received:    9632/1000000   BPS:60361  ETA 00:16  Retry 0: Got TIMEOUT
-  Retry 0: Sender Canceled
-  Retry 0: Got ZCAN
-
-The local sz, however, doesn't give any error message.  ZCAN means: "other
-end canceled session by sending 5 ^X's" (or user typed them).  What actually
-happens is that ttptycmd()'s select() times out waiting for something from
-the Zmodem partner and ttptycmd() itself kills the sz fork with SIGHUP.
-When lsz receives SIGHUP it sends the ZCAN.  So the real problem is that
-after some point we're not receiving anything.
-
-I changed the timeout from 4 seconds to 30 seconds and now I see it just
-stops for long periods of time and then resumes.  The lrz log on the
-receiving end shows tons of timouts, CRC errors, and other errors.  The
-local log shows that lsz wound up sending ZCAN (2 x (10 x ^H, 10 x ^X)).
-
-Moving on to another problem...  Turns out Ctrl-C (SIGINT) is working right
-after all.  Since I'm using my test scripts like kerbang scripts, Ctrl-C
-exits through trap(), as it should, closing the connection and cleaning up.
-If I start Kermit and tell it to TAKE the script, then Ctrl-C brings me back
-to the prompt with the connection still open (as it should).  However, until
-now I haven't done anything about the fork or the ptys.  Added code to
-trap() to kill the fork and close the master pty.  ckuusx.c, 24 Aug 2007.
-
-Added code to try to break the deadlock.  If select() times out, but we have
-stuff to write either to the pty or the net, try to do it anyway, even
-though select() did not say we could.  But this doesn't help because when
-select() times out we don't have anything to write.  The problem is that
-after receiving that last packet from the remote rz, the local lsz doesn't
-seem to do anything, as if the lower fork wasn't running (and to confirm
-this hypothesis, sometimes I noticed that when I Ctrl-C'd out of this, the
-transfer would take off again).
-
-Backing up and testing with gkermit rather than zmodem:
-
- kst ripple.txt [824K] OK
- kst ascii.txt [1359K] OK
- krt ripple.txt -- FAILED
-
-It seems that we can't handle streaming.  If I set up krt to disable
-streaming on receipt, it works OK.
-
- krt ripple.txt [824K] OK
- krb all2.bin  [1000K] OK
-
-So here we have no trouble sending but big trouble receiving unless we
-disable streaming.  Whereas with Zmodem we have trouble receiving.
-
-But this wasn't happening before, what changed?  Using C-Kermit on the far
-end to receive the file with debug log on, I see that it is sending 4K data
-packet after 4K data packet, with the local gkermit silent, as expected.
-About midway through the transfer, the local Kermit sends an error packet
-"Transmission error on reliable link".  Looking at G-Kermit's debug log...
-It receives the first five 4K data packets OK, but gets a CRC error on the
-fifth one, and sends the Error packet.  So it has received a stream of
-20-some thousand bytes OK and then messes up.  That number sounds a lot like
-ttptycmd()'s buffer size.  I changed the buffer sizes to be different:
-
-  Read from pty and write to net: 4K  
-  Read from net and write to pty: 1K
-
-This time it received the first 4K packet and failed on the second one.
-Then I increased the buffers to 98K each, expecting to receive lots more
-packets successfully but it bombed out on the 5th one.  But that's good, it
-confirms there's no logic error in the buffer management.  Just to make
-sure, though, let's set the buffer size smaller than the packet size and
-disable streaming.  In this case we get 4 good data packets and a CRC error
-on the 5th one and so we request retransmission, and the next 8 times it
-arrives it gets a different CRC error, but the 9th copy is OK.  Then the
-next packet comes and it gets a CRC error every time.  And this is nothing
-but plain ASCII text.
-
-Switching to remote mode:
-
-  REMOTE=1 kk kst
-
-(after tricking myself because it was using ttruncmd() for this...) I see
-that nothing works at all.  What did I break?  24 Aug 2007.
-
-Fixed ttptycmd() to restore console modes after a remote-mode transfer.
-ckutio.c, 25 Aug 2007.
-
-Noticed that error codes like ESRCH are not available in all modules.
-That's because of some complicated in #ifdefs in ckcdeb.h that wind up not
-always #including <errno.h>.  But I notice that ckutio.c includes it
-unconditionally with no ill effects, and so does ckvfio.c.  Does any version
-of Unix at all not have <errno.h>?  Added a catch-all clause to ckcdeb.h to
-#include <errno.h> (in UNIX only) if, after the other clauses, ESRCH was
-still not defined.  ckcdeb.h, 25 Aug 2007.
-
-Now back to debugging ttptycmd()...  Remote-mode transfers with ttptycmd()
-were broken in two places, maybe as long as 2 weeks ago (this would have
-affected non-network transfers too, which I can't test any more).
-The logic was missing in a couple places for the non-network and/or
-non-Telnet and/or non-encrypting connections (if statements with no else
-parts).  Fixed in ckutio.c, 25 Aug 2007.
-
-Testing remote mode:
-
- kst OK   zst OK
- ksb OK   zsb OK
- krt OK   zrt OK
- krb OK   zrb OK
-
-Functionally it all works but there are hitches with Zmodem as always.
-When sending to K95:
-
- . If I send with lsz, there are hundreds of "Subpacket too long" errors,
-   and the transfer is very slow, but it succeeds.
-
- . If I send with the 1994 Omen version of sz, transmission is instantaneous
-   and without errors, but then it hangs at the end.
-
- . If I bypass C-Kermit and send direct from lsz or sz, both work fine.
-
-So clearly the ptys are getting in the way.  The hanging at the end would be
-caused by the sz process closing before its last output reached the master
-pty.  It would need to do some form of flushing and/or pausing at the end
-but there's nothing I can do about that; these programs were not designed to
-be used in this way.  Anyway, it only seems to happen with files longer than
-100K.
-
-For local mode, testing in Solaris over our Kerberos 5 connection again:
-
- gkermit  lrzsz
- kst OK   zst FAIL
- ksb OK   zsb FAIL
- krt OK   zrt OK but with errors
- krb OK   zrb FAIL
-
-If I use Omen rzsz as the external protocol (e.g. with zst), it blocks
-redirection and it sends the file to my terminal, rather than over the
-connection.  This would probably be because it finds out the device name of
-the job's controlling terminal and opens it, to prevent redirection.  This
-is hard to prevent in Solaris because there is no TIOCSTTY ioctl().
-Supposedly the same thing is accomplished by closing and reopening the slave
-pty after doing setsid().  I added code to do this, but it made no
-difference.  (If I use lsz instead of sz, it is indeed redirected, but jams
-up after about 15K.)  ckupty.c, 27 Aug 2007.
-
-On Mac OS X with sz 3.73 1-30-03, however, the redirection works, so I
-assume it would also work in Linux, FreeBSD, NetBSD, etc, too.  Doing the
-full test suite on Mac OS X:
-
- gkermit   lrzsz          rzsz
-  kst OK   zst FAIL (1)    OK
-  ksb OK   zsb FAIL (2)    OK
-  krt OK   zrt OK   (3)    OK for 100K file, fails for longer.
-  krb OK   zrb FAIL (4)    OK (1MB all-bytes test pattern)
-
-(1) 64K file OK every time; 100K file fails every time.
-(2) 10K file fails every time.
-(3) Succeeds with 800K file but gets a few recoverable errors.
-(4) Succeeds with 48K binary file with some errors, fails with longer ones.
-
-So actually it looks pretty good, it's just that lrzsz messes up.  When
-sending with lsz if I include -L 512 it sends the 100K test file with no
-errors, but still chokes on longer ones.
-
-Testing on Mac OS X again, but this time over a clear-text Telnet connection:
-
- gkermit        lrzsz    rzsz
-  kst OK   zst  FAIL(1)   OK
-  ksb OK   zsb  FAIL(2)   OK
-  krt OK   zrt  OK(3)     OK
-  krb OK   zrb  FAIL(4)   OK 
-
-(1) Almost worked, finished 777K out of 824K without errors.
-(2) Got tons of errors, failed in first 30K out of 1000K.
-(3) OK for 100K file but fails for larger.
-(4) OK for 48K binary fail but fails for larger.
-
-Maybe see if we can do without the OPENPTY part.
-
-TOMORROW -- just clean up the code, add some SET / SHOW / HELP commands,
-document it, and move on.
-
-Note: In K95, SET WINDOW sets the Zmodem packet length, 32 - 1024, multiple
-of 64.
-
-SEE ~/80/external.txt
-
-Changed ftp port from int to unsigned int.  ckcftp.c, 30 Aug 2007.
-
-Tried again to build KRB4/KRB5/SSL/TLS version for Solaris 9.  Had to update
-the build procedure again, of course, because of new file and directory
-names, but ran into problems anyway because the
-cu-solaris9g+krb5+krb4+openssl+shadow+pam+zlib target was calling another
-target that did not know about the hardwired pathnames.  Integrated the two
-targets and tried building again.  It actually compiled ok (but with lots of
-warnings from the security modules), but failed at link time with
-krb5_init_ets not found; fixed that with an #ifdef NO_KRB5_INIT_ETS, now it
-builds OK but without the ftp client.  Tried building it WITH the FTP and
-that was OK too, no changes needed except to the build procedure.  12 Feb
-2008, that is: C-Kermit 8.0.212 : 20080212.
-
-Tried to build with -DCK_SRP and -lsrp but:
-
-  hash_supported                      ckcftp.o
-  hash_getdescbyname                  ckcftp.o
-  hash_getdescbyid                    ckcftp.o
-  cipher_getdescbyname                ckcftp.o
-  krypto_delete                       ckcftp.o
-  krypto_new                          ckcftp.o
-  cipher_supported                    ckcftp.o
-  krypto_msg_priv                     ckcftp.o
-  krypto_msg_safe                     ckcftp.o
-  hash_getlist                        ckcftp.o
-  cipher_getlist                      ckcftp.o
-  cipher_getdescbyid                  ckcftp.o
-
-Sent mail to Tom Wu and backed off for now.  makefile, 14 Feb 2008.
-(Tom Wu never answered; seems like SRP is defunct.)
-
-The ".blah = xxx" form of variable assignment only worked for variables
-names of length 22 or less, noticed and fixed by Wolfram Sang.  ckucmd.c,
-5 Mar 2008.
-
-In "set host /pty ssh ..." connections, the INPUT command suddenly stopped
-working.  This is in Solaris 9.  It happens with all 8.0.* versions of
-C-Kermit, so it's nothing to do with ttptycmd().  Added some debug()
-statements but they don't show anything.  Turns out there wasn't a problem
-after all.  Wed Mar 26 16:04:53 2008
-
-Changed cmifi() to not print "?No files match" (or whatever) if SET QUIET ON.
-ckucmd.c, 26 Mar 2008.
-
-Added \v(remoteip) for the IP address of the host we're connected to,
-and \v(inmessage) for INPUT status messages corresponding to \v(instatus).
-ckuusr.h, ckcmai.c, ckuus[24].c, 26 Mar 2008.
-
-Made \fkeywordval() strip braces/quotes from the right-hand side so we can
-handle things like:
-
-  password="stringwithspaceatend "
-
-ckuus4.c, 6 Aug 2008.
-
-Added invisible PUTENV command for UNIX only.  Value should not be enclosed
-in doublequotes.  Requires lge \v(buildid) 20080826.  ckuusr.[ch], 26 Aug 2008.
-
-Added SET VARIABLE-EVALUATION { RECURSIVE, SIMPLE }.  This is highly
-experimental, but also highly desirable if it works out.  SIMPLE inhibits
-the default recursive method of evaluating \%x and \&x[] variables, which
-is, quite frankly, nuts and makes programming in Kermit at best
-counterintuitive.  I made an exception in the case of array subscripts,
-because changing how they are evaluated could break a lot of scripts, and
-anyway there should never be any harm in evaluating them recursively because
-their final value is always (or should be) numeric, not some string that
-might contain backslashes.  The SET VAR setting is on the stack, just like
-SET QUIET (it follows the quiet/xquiet code in ckuus[356].c), so macros or
-command files that change it can't break the script that invokes them.
-Added \frecurse() to force recursive evaluation of a \%x or \&x[] variable
-regardless of the VARIABLE-EVALUATION setting.  Added \v(vareval) to allow
-programmatic setting to current setting.  Tested on Solaris 9 but should be
-totally portable.  ckuusr.[ch], ckuus[356].c, 11 Sep 2008.
-
-From Günter Knauf: 64-bit builds were failing on SuSE Linux because
-libresolv and libcrypt were in lib64 rather than lib; updated the tests in
-the linux makefile target to find them.  makefile, 12 Jan 2009.
-
-Tried building on Red Hat Enterprise Linux Server release 5.3 64-bit.
-There is no curses or ncurses.  "make linuxnc" compiled OK but collapsed at
-link time looking for crypt(), res_search(), and dn_expand().  Turned out
-the linuxnc (and linuxc) targets needed the same treatment as the Linux one
-for 64-bit Linuxes.  makefile, 3 Mar 2009.
-
-Consolidated the linux targets so we no longer need three separate ones for
-curses, ncurses, and no curses.  "make linux" works ok on computers with and
-without (n)curses.  "make linux+ssl", ditto.  "linux+krb5+ssl builds OK but
-needs -DNO_KRB5_INIT_ETS".  Makefile, 3 Mar 2009.
-
-Fixed copyright date announced in herald, ckuus5.c, 3 Mar 2009.
-
-Patch from Seth Therault to avoid deprecation warning for utmp references
-in ckufio.c in Mac OS X 10.5 (later, this became a consolidated makefile
-target that works automatically for at least Mac OS X 10.3.9 through
-10.5.6).  makefile, ckufio.c, 28 April 2009.
-
-zshcmd() (the function used by RUN and ! to run external commands) was not
-falling back as expected in Linux RHEL4/5 if SHELL was not defined in the
-environment.  Also in all Unix versions, there was no indication if a RUN/!
-command failed (other than the return code) because the specified shell
-didn't exist or was not executable (e.g. the SHELL environment variable was
-misdefined).  Now it prints the name of the offending shell and the reason
-it couldn't be executed (Not found, Permission denied, etc).  ckufio.c,
-28 April 2009.
-
-There is no easy way to get the last field of string; for example, the
-extension from a filename, which might have any number of fields.  In
-general we want to be able to get "word number n" counting from the right;
-\fword() lacks this ability.  Now if you give it a negative word number,
-that says to count from the right; for example \fword(one two three four
-five, -2) returns "four".  ckclib.c, ckuusr.c, 14 May 2009.
-
-Fixed a typo in the aix51+openssl (SSLLIBS should have been SSLLIB).
-From Jason Lehr.  makefile, 27 May 2009.
-
-Updated the linux+openssl+zlib+shadow+pam target to chain to the new main
-Linux target.  A bunch of other ones remain un-updated. makefile, 12 Jun 2009.
-
-Updates to the new Mac OS X 10.5 target from Seth Therault (which is
-supposed to work on all Mac OS 10-point-anything) to avoid warnings
-that came up on on Mac OS 10.4.11/Intel.  Once this one is proven we should
-be able to remove/consolidate lots of other ones.  makefile, 12 Jun 2009.
-
-C-Kermit disables SSL with the message "?OpenSSL libraries do not match
-required version." if the version of OpenSSL that Kermit was built with is
-not exactly the same as the version that is loaded dynamically at runtime.
-This is actually the proper behavior, since APIs are not guaranteed not to
-change between OpenSSL versions prior to 1.0.0.  Made the error message more
-informative.  ck_ssl.c, 26 Aug 2009, and again 28 Aug 2009.
-
-AIX 6.1 is out, it is really just a new name for AIX 5.4.  Added makefile
-targets, plus for the first I made AIX 4.2 and later figure out its version
-number in the makefile target so we don't have to keep adding new -DAIXnn
-sections to the code, and also get its hardware name (e.g. "powerpc") from
-uname at make time, rather than hardwiring "rs6000" as I did before.
-Consolidated all AIX 4.2 and later targets so now just "make aix" or "make
-aix+ssl" can be used.  Except not the gcc ones as they have some quirks so
-I'd rather not disturb them.  Tested this on AIX 5.3.
-makefile, 28 Aug 2009.
-
-From Kinjal Shah, a correction to the Linux makefile entry that allows it
-find the 64-bit curses or ncurses library.  makefile, 29 Aug 2009.
-
-Renamed aix4[23]: to oldaix4[23]: in makefile to fix the warning messages
-I didn't notice before.  I didn't want to remove them because they have
-some special things that might still be needed, if anybody still has these 
-AIX versions.  makefile, 29 Aug 2009.
-
-Built on RHEL 5.3 64-bit, regular and with OpenSSL 0.9.8e.  31 Aug 2009.
-
-Built on NetBSD 5.0.1/i386, regular and with OpenSSL 0.9.9-dev, 1 Sep 2009.
-
-Changed SSL message to mention LD_LIBRARY_PATH (Solaris), SHLIB_PATH (HP-UX),
-LIBPATH (AIX), or LD_LIBRARY_PATH (Linux).  ck_ssl.c, 3 Sep 2009
-
-Noticed that "make linux+openssl" fails to include -lutil a link time, which
-it needs for openpty().  That's because this target is obsolete.  I renamed
-it to be oldlinux+openssl and added linux+openssl as a synonym for
-linux+ssl.  makefile, 3 Sep 2009.
-
-Tested linux+openssl+zlib+shadow+pam, it's OK.  Also linux+krb5.  Also
-linux+krb5+ssl.  makefile, 3 Sep 2009.
-
-Tried building on Solaris 9 with OpenSSL 0.9.8k with
-solaris9g+openssl+shadow+pam+zlib, it failed like so:
-
-  ck_ssl.c:2875: error: conflicting types for 'inet_aton'
-  /usr/include/arpa/inet.h:52: previous declaration of 'inet_aton' was here
-  make[2]: [ck_ssl.o] Error 1
-  make[2]: Leaving directory hmt/sirius1/prv0/kd/fdc/solaris9ssl'
-  make[1]: [solaris2xg+openssl+zlib+pam+shadow] Error 2
-  make[1]: Leaving directory hmt/sirius1/prv0/kd/fdc/solaris9ssl'
-  make: [solaris9g+openssl+shadow+pam+zlib] Error 2
-
-The problem was caused by including an inet_aton() function ck_ssl.c for
-the benefit of platforms that don't have one in their libraries.  This is
-defeated by including NO_DCL_INET_ATON in KFLAGS.  I added this, but then
-I thought it would be a good idea to automatically sense the OpenSSL
-version so we can automatically set OPENSSL_097 or OPENSSL_098 rather than
-bombing out, so I added code to do that too, and also to set the Solaris
-version number: 9, 10, or 11.  The new entry is solaris9g+openssl.
-ckcdeb.h, makefile, 3 Sep 2009.
-
-Fixed a complaint in ckufio.c about implicit declaration of initgroups.
-ckufio.c, 4 Sep 2009.
-
-Built on Solaris 10 with gcc and Sun CC using new solaris{9,10,11} target
-that is like the new solaris{9,10,11}g one but without the gccisms.
-makefile, 4 Sep 2009.
-
-Changed solaris{9,10,11}g+ssl target to set only the SSL-specific things and
-then chain to the main solaris{9,10,11}g target.  Tested OK on Solaris 9 and
-10.  makefile, 4 Sep 2009.
-
-Created solaris{9,10,11}+ssl target that is exactly like the
-solaris{9,10,11}g+ssl except it chains to the solaris{9,10,11} target
-instead of the solaris{9,10,11}g one.  That is, it builds an SSL version of
-C-Kermit using Sun CC rather than gcc.  makefile, 4 Sep 2009.
-
-Tried building on HP-UX 10.20, bundled (non-ANSI) compiler ("make
-hpux1000").  This failed until I:
-
- . Moved a struct inititialization out of setextern(), ckuus3.c.
- . Removed an ANSIism from the declaration of sigchld_handler() in ckutio.c
- . Added a cast to strcmp() in zvuser(), ckufio.c.
-
-Builds OK now.  Built OK with "hpux1000o" (the ANSI compiler) too.
-And with "hpux1000gcc".  Couldn't test "hpux1000o+openssl".  21 Sep 2009.
-
-The Sony Playstation 2 and 3 are 64-bit PowerPC platforms that can run Linux
-if it is installed as an "other OS" on its hard disk; and the Linux kernel
-since 2.6.21 supports the PS3 without any patching required.  Pawel Rogocz
-reported that "make linuxppc" (one of the old targets that has not yet been
-integrated into the main "linux" target) compiles OK on 2.6.29-ydl61.3
-(Yellow Dog Linux release 6.2 'Pyxis'), but fails at link time because
-'openpty' isn't found, because -lutil was not included, because that part
-was added only to the main linux target.  I asked him to try "make linux"
-and he sent back a transcript in which there were thousands of errors from
-the curses code ckuusx.c.  Later I tried it myself and it built without a
-hitch.  My theory is that between then and now, a missing piece of the
-ncurses library (/usr/include/ncursesw) was installed.  21 Sep 2009.
-
-HP-UX 9.05 on PA-RISC 9000/712 building with hpux0900 (bundled compiler):
- . ckutio.c compilation failed with PENDIN and FLUSHO not defined in
-   pty_make_raw().  I dummied definitions for them to handle this situation
-   on this or any other platform where it might crop up.
-   ckutio.c, 24 Sep 2009.
- . Ditto for the PTY module, + IMAXBEL.  ckupty.c, 24 Sep 2009.
- . References to endusershell() were fatal in the bundled compiler.  Changed
-   the hpux0900 target to define NODCLENDUSERSHELL, and put a special case
-   in ckufio.c to not put a cast in front of the call if NODCLENDUSERSHELL
-   is defined.  Now it builds and links OK.  makefile, ckufio.c, 24 Sep 2009.
-
-HP-UX 9.05 on PA-RISC 9000/712 building with hpux0900o (optimizing compiler):
- . Warnings in ckutio.c at line 14860 about arguments to select (pointers
-   are not assignment-compatible).  "man select" says arguments are ints.
-   Defining INTSELECT fixes these warnings but results in fatal errors later
-   around line 14881 and others in the area involving FD_SET.  This was too
-   involved so I put it back as it was.  24 Sep 2009.
-
-Built OK on Solaris 10 with Sun CC.  A couple warnings about implicit
-function declarations for curses routines because apparently they aren't
-declared in curses.h.  Tuff.  25 Sep 2009.
-
-Tried building on Solaris 10 with Sun CC and OpenSSL 0.9.8k, and this
-uncovered various loose ends in the solaris9+openssl target, which I fixed.
-makefile, 25 Sep 2005.
-
-Fixed four typos in printfs in ck_ssl.c, \% instead of just %.  25 Sep 2009.
-
-Squelched 20-some complaints about a character array being referred to
-directly instead of by a pointer, plus several other similar nits to get rid
-of all the compilation warnings on Solaris 10 with Sun C 5.8 Patch 121015-06
-2007/10/03.  ckctel.c, ckctel.h, 25 Sep 2009.
-
-Built the result on the same Solaris 10 system with gcc 4.2.4 using the
-new solari10g+openssl target, working out a few kinks here too.
-makefile, 25 Sep 2009.
-
-Made consolidated Solaris 9/10/11 64-bit targets for gcc, solaris9g64,
-solaris10g64, solaris11g64, tested on Solaris 10 Sparc. makefile, 25 Sep 2009.
-
-Made consolidated Solaris 9/10/11 64-bit targets for Sun cc: solaris9_64,
-solaris10_64, solaris11_64.  These simply set a couple flags and chain to
-the main solaris9 target.  makefile, 25 Sep 2009.
-
-Removed a bunch of old superfluous Solaris 9 and 10 targets: oldsolaris9,
-oldsolaris9lfs, solaris9g64 solaris9g_64, oldsolaris10 old solaris10lfs,
-oldsolaris10+openssl, oldsolaris10g+openssl, solaris10_64, oldsolaris10g,
-solaris10g_64, solaris10g64.  There are still plenty more to prune but it's
-a start.  makefile, 25 Sep 2009.
-
-Added or fixed some missing prototypes in ckctel.h:
-fwdx_send_xauth_to_xserver(), fwdx_parse_displayname.  25 Sep 2009.
-
-Improved the instructions for building secure versions in the makefile,
-using this example:
-
-  make solaris9+openssl "SSLINC=-I/opt/openssl-0.9.8k/include" \
-   "SSLLIB=-L/opt/openssl-0.9.8k/lib"
-
-makefile, http://kermit.columbia.edu/security.html, 25 Sep 2009.
-
-Built on HP-UX 11.11, 26 Sep 2009:
- . make hpux1100 (ok)
- . make hpux1100gcc (ok)
- . make hpux1100o (gets a lot of warnings about sendpath and sendfile,
-    because they are also declared in <sys/socket.h>, but builds OK)
- . make hpux1000gcc+openssl \
-    SSLINC=-I/opt/openssl/include SSLLIB=-L/opt/openssl/lib
-
-Note: sendpath and sendfile are not Kermit symbols.  The warnings are coming
-from socket.h: 'Redeclaration of "sendfile" with a different storage class
-specifier'.  This is nothing new; see notes of 2-4 Jan 2005.
-
-From Peter Eichhorn:
- . Update to makefile to make current code build OK on HP-UX 8.00.
- . Changes to format of some hints to make them more copy-and-pastable.
-makefile, ckuu5.c, 28 Sep 2009.
-
-From Peter Eichhorn: Changes to HP-UX 7.0 target to increase the switch table
-stack size, which was overflowing.  makefile, 30 Sep 2009
-
-HP-UX 6.5 (1989), "make hpux0650tcpc"... (8:19...)  Needed to not include
-arpa/inet.h (which doesn't exist) and not use host address lists (add
--DNOHADDRLIST), which gets us past ckcnet.c, but in ckcftp.c we bomb out on
-FD_SETSIZE undefined.  Somehow we worked around this in ckcnet.c.  Patched
-in a definition in ckcftp.c, and also added -DINTSELECT to compiler flags.
-Compiles ok, bombs at link time on bcopy, bzero, FD_ZERO, FD_SET, FD_ISSET.
-Now it compiles and links OK but dumps core when started.  Added
--DNOCKGETFQHOST, rebuilt from scratch (takes 35 minutes).  It starts OK, but
-it dumps core when given a "telnet xxx" command, where xxx is a hostname.
-However, it works OK if an IP address is used: "telnet 123.45.6.78".  It
-took all day to track this down, but now it's fixed (see the #ifdef HPUX6
-sections of ckcnet.c).  So now (for the first time, I think) we have both
-telnet and ftp in HP-UX 6.x, if anyone cares.  ckcnet.[ch], ckcftp.c,
-makefile, 2 Oct 2009.
-
-Changed default SET TERMINAL TYPE type for K95 from vt320 to vt220.  This is
-because Unix OS's such as Solaris have dropped vt320 as a terminal type.
-settrmtyp(), ckuus7.c, 5 Oct 2009.
-
-I moved the PUTENV command code, which was inline, to a function, doputenv().
-ckuus[r7].c, ckuusr.h, 5 Oct 2009.
-
-Changed the UNIX version of SET TERMINAL TYPE to take a value and then do
-the equivalent of "export TERM=value" by calling doputenv().  This sets
-\$(TERM) correctly and passes its value along to inferior processes.
-However, to make this take effect within Kermit itself (for the fullscreen
-file transfer display and for the SCREEN command, Ctrl-L, etc) I also had to
-reinitialize the curses database, which is tricky because normally if you
-feed it an unknown terminal name, it just exits.  ckuus7.c, 5 Oct 2009.
-
-Changed the little-known and little-used RESET command (which closes all
-open files) to also put command echoing back to normal in case it got
-messed up somehow (as in HP-UX 6.5, upon returning from PUSH).
-ckuusx.c, 5 Oct 2009.
-
-For Unix, increased string buffer sizes for wildcard expansion for all
-platforms that have BIGBUFOK defined from 500000 (0.5M) to 10000000 (10M)
-bytes, and for 64-bit builds to 2000000000 (2G) bytes.  No point making
-it bigger than that because malloc's argument is a size_t, which is an int.
-ckufio.c, 5 Oct 2009.
-
-Built on Mac OS X 10.4.11, required one minor adjustment to the makefile
-(-DNODCLINITGROUPS).  This was using the macosx10.5 target, which is
-supposed to be universal like the linux and netbsd targets, but not yet
-proven.  Also built a 64-bit version (-mpowerpc64 -mcpu=G5 -mtune=G5
--arch ppc64); it compiles and links OK but won't start: "Bad CPU Type
-in executable".  Fix later...  makefile, 5 Oct 2009.
-
-Changes from Seth Theriault to suppress signed vs unsigned char warnings in
-Mac OS 10.5.8 from gcc4, and a new makefile target for Mac OS X (presumably
-10.3.9 or later) + Kerberos 5 and OpenSSL.  ckutio.c, ckuath.c, ckctel.c,
-ckcnet.c, ckcftp.c, ck_crp.c, makefile, 6 Oct 2009.
-
-  Later I had to back out of these, because although it made for a
-  clean build, in the resulting executable SSL connections didn't work.
-
-Tue Oct  6 17:23:27 2009
-FTP address resolution is broken, but ftp_hookup() hasn't changed.
-So... (see the #ifdef HPUX6 sections of ckcnet.c)  (I did, and I rolled
-back some of the changes from the other day, but it made no difference.)
-Putting back the ckcftp.c from a few weeks ago makes no difference.
-Putting back the ckcnet.c from a few weeks ago makes no difference.
-
-Added patches from Seth Theriault so macosx10.5+krb5+openssl would build
-on Mac OS X 10.3.9.  makefile, ckcftp.c, 7 Oct 2009.
-
-Built today's code on Linux RHEL4, NetBSD 5.0.1, Solaris 9, and Mac OS X
-10.4.11, both with and without SSL.  The NetBSD system has OpenSSL 0.9.9-dev.
-7 Oct 2009.
-
-In Mac OS X 10.6, the following symbols are unresolved at link time:
-_des_key_sched, _des_new_random_key, _des_ecb_encrypt,
-_des_init_random_number_generator, _des_fixup_key_parity.  This is
-with OpenSSL 0.9.8k.  But it doesn't happen on other platforms that
-have 0.9.8k.
-
-Added SET SESSION-LOG NULL-TERMINATED-TEXT.  This is for the benefit of a
-speech synthesizer that will speak a line of text only after receiving a
-NUL character.  A more general solution would be to define a filter or
-whatever, but who has time.  ckuus[23x].c, 7 Oct 2009.
-
-Consolidated Mac OS X targets, and removed experimental 64-bit ones, because
-they never could work in 10.5 and earlier because 64-bit libs are missing,
-and 10.6 and later are 64-bit automatically.  makefile, 8 Oct 2009.
-
-Built on Mac OS X 10.6.1.  It came out automatically as a 64-bit build
-because __LP64__ is defined somewhere that I can't find.  But this explains
-why the 0.9.8k on 10.6 comes up with missing symbols when the 0.9.8k lib
-10.5 (or on Solaris or on Linux) does not: it's a different library: "Mach-O
-64-bit dynamically linked shared library x86_64", rather than "Mach-O
-dynamically linked shared library ppc".  Probably the 64-bit version has
-some things #ifdef'd out.  Added -m32 to the CFLAGS and LNKFLAGS for the
-macosx+krb5+openssl targets, and it built OK one time.  But then the errors
-came back.  makefile, 8 Oct 2009.
-
-Updated C-Kermit installation for Mac OS X in ckuwr.html on the website.
-8 Oct 2009.
-
-Tried some things to get around the problem with OpenSSL in Mac OS X 10.6,
-to no avail.  Asked Jeff.  He said, "MacOS X no longer includes DES anywhere
-on the system.  Not for SSL, not for Kerberos, not for anything.  This will
-increasingly become the situation on new operating systems.  Windows 7 and
-2008 R2 will also ship with no DES."  Sure enough, the Mac OS X Server
-Upgrading and Migrating document for 10.6 says, "Mac OS X Server v10.6 does
-not support single DES encryption. It supports AES 128 and 256 encryption
-types. However, during a migration or upgrade from v10.4 to v10.6, servers
-that were Kerberized by the v10.5 Open Directory server will not use the AES
-128 or 256 encryption types. To use the AES 128 or 256 encryption types you
-must re-Kerberize all servers."  12 Oct 2009.
-
-DES and 3DES encryption can be excluding removing the -DCK_DES flag.  I
-removed this one and -DLIBDES (and -m32) and this makes a working 64-bit
-version.  Then I added code to the macosx+krb5+openssl target to use these
-flags if the Mac OS X version was 10.5 or less and leave them out for 10.6
-or later.  Tested on 10.4.11 and 10.6.1.  A better way to do it might have
-been "nm -gj libssl.dylib | grep des_", but that gives the same results on
-10.4 and 10.6.  Also, 10.6 still has /usr/include/ssl/des.h.
-makefile, 13 Oct 2009.
-
-Next issue:
-  In file included from ckutio.c:15674:
-  /usr/lib/gcc/i386-redhat-linux/3.4.6/include/varargs.h:4:2: #error "GCC no
-  longer implements <varargs.h>."
-  /usr/lib/gcc/i386-redhat-linux/3.4.6/include/varargs.h:5:2: #error "Revise
-  your code to use <stdarg.h>."
-
-The problem occurs when trying to force a non-ANSIC build with GCC.
-Changing the source file to include <stdarg.h> instead of <varargs.h>
-doesn't help because evidently <stdarg.h> requires an ANSI C compiler.
-Nothing can be done about this.  13 Oct 2009.
-
-Next issue: Can't compile ckcftp.c with -DNOCSETS or -DNOSPL; some
-#ifdef/#endif doesn't match up.  Sigh, this is the hardest kind of thing to
-debug.  There's 17,622 lines of code in this module and no tool that I know
-of.... Wait, I wrote one.  But it shows all the #if/#ifdef/#ifndef's and
-#endifs matching up just fine.  Backing off to ckcftp.c of a few days ago
-(before char / unsigned char casts were added), I see that it builds OK, so
-I backed off to that one, but put back the special case #ifdef for MACOSX103
-declaring CONST gss_OID_desc, and it builds OK (the other stuff was purely
-cosmetic, when will I learn?).  ckcftp.c, 13 Oct 2009.
-
-Protected cvtstring() and related functions with #ifdef NOCSETS..#endif,
-and ditto for the character-set conversion code in dorename().
-ckuus6.c, 13 Oct 2009.
-
-Fixed an #endif /* TNCODE */ that was a line too low in ttptycmd(),
-causing -DNONET builds to fail.  ckutio.c, 13 Oct 2009.
-
-There was a reference to doputenv() that wasn't guarded by #ifndef NOPUTENV,
-fixed in ckuus7.c, 13 Oct 2009.
-
-Moved doputenv() and settermtyp() out of an #ifdef NOLOCAL section because
-these are useful even when not making connections.  ckuus7.c, 13 Oct 2009.
-
-Moved havelfs declaration outside of #ifdef NOXFER because it was also used
-for other things.  ckcmai.c, 13 Oct 2009.
-
-COPY /PRESERVE depended on code from the Kermit protocol module, which
-is omitted in -DNOXFER builds.  Disabled COPY /PRESERVE in -DNOXFER
-builds.  ckuus6.c, 14 Oct 2009.
-
-SHOW PROTOCOL code for external protocols had to be #ifdef'd out for
--DNOPUSH builds.  ckuus4.c, 14 Oct 2009.
-
-There was some confusion between "No XYZMODEM" and "No extermal protocols";
-cleared up in ckuus3.c, 14 Oct 2009.
-
-After all that, 86 different combinations of feature selections built OK on
-Linux.  And the Kerberized version (K5) works OK on Linux for Telnet and FTP.
-14 Oct 2009.
-
-Changed version number to 9.0.  All modules, 16 Oct 2009.
-
-Need to make LOG SESSION log to a tty.  Right now "log session
-/dev/ttyKeySerial1" says "Write permission denied" even though the device is
-crw-rw-rw-.  This happens in zchko(), which is called by cmofi().  The
-problem is that /dev/ is not writeable.  I added a Unix-only clause that
-attempts to open the file for write access using open(), in order to get a
-file descriptor, which then can be passed to isatty() to check if it's a
-tty, and if so, to allow access.  And then close it.  I tested this on Mac
-OS X as follows:
-
-  log session /dev/ttyKeySerial1
-  telnet somehost
-
-The Mac's serial port was connected to the serial port of another computer
-where Kermit displayed the incoming characters in CONNECT mode.  Glitches:
-
- 1. The port has to be set up as desired in advance, outside of Kermit.
- 2. log session /dev/ttyKeySerial1 will hang if any required modem signals
-    are not present when the port is opened.
- 3. Bypasses lockfile mechanism - so we do this only if -DNOUUCP.
-
-For (2), I tried setting O_NDELAY / O_NONBLOCK, and this allowed zchko() to
-continue, but then it freezes in the subsequent fopen().  So I changed
-zopeno() to also check if the device is a serial port, and if so, to open()
-it with O_NDELAY / O_NONBLOCK, and then convert the file descriptor into a
-file pointer with fdopen().
-
-Now for the speaking device that needs lines to be terminated by NUL...
-
-  set session-log binary       <-- need to put these in SHOW LOG
-  set session-log null-padded      (and in HELP SET LOG)
-  set line /dev/ttyKeySerial1
-
-This part works.
-
-This feature is enabled only for -DNOUUCP builds because serial ports aren't
-like other Unix files; we would have to create a lockfile, but we can't do
-that...  actually, ttlock() takes a name as an argument, but ttunlck() does
-not, so there would be no way to remove the lock.  Anyway, there is only one
-API for configuring the port (speed, flow control, etc) and it only works
-with the SET LINE device, not any random file.  To fix this would require
-massive redesign and changes.  ckuus[23].c, ckufio.c, 19-20 Oct 2009.
-
-I made -DNOUUCP the default for Mac OS X, since everybody winds up building
-it that way anyhow.  To undo this, do "make macosx KFLAGS=-UNOUUCP".
-makefile, 21 Oct 2009.
-
-Changed SET SESSION-LOG TEXT to strip out ANSI escape sequences; 
-previously there wasn't that much difference between TEXT and BINARY logs.
-It's still not perfect; for example it doesn't delete characters that the
-user erased.  (Made sure this still builds with -DNOESCSEQ.)
-ckucns.c, 22 Oct 2009.
-
-Changed SHOW LOG to show the SET SESSION-LOG settings, as well as
-SET DEBUG, which was not shown before.  ckuus5.c, 22 Oct 2009.
-
-If a series of PUTENV commands is given, each new one undoes the previous
-one, so only the last definition is seen by the new fork (or by Kermit
-itself).  Turns out you can't feed automatic variables to putenv(); they
-have to be static, so to allow for multiple PUTENV commands Kermit has to
-maintain an array of static strings.  ckuus7.c, 6 Nov 2009.
-
-From Seth Theriault, a better way for the makefile to determine the
-Mac OS X version number; there's a program for this, sw_ver.  makefile,
-6 Nov 2009.
-
-Peter Eichhorn reported that file-transfer failure hints were not coming
-out since Dev.27.  The only change I made since then was to skip them if
-the file-transfer protocol was not Kermit.  I was using the wrong variable
-in the tests, 'proto' instead of 'protocol'.  ckuus5.c, 6 Nov 2009.
-
-Changed Mac OS X targets to correctly extract the Mac OS major version
-from uname -r in order to choose correctly between utmp and utmpx; this
-wasn't working in 10.6.1.  makefile, 6 Nov 2009.
-
-Fix from Seth T. for an oversight in the previous edit.  Also add
-MACOSX103 to "show features" display.  makefile, ckuus5.c, 10 Nov 2009.
-
-Added REJECT as a synonym for DISCARD in SET FILE COLLISION; it's more
-intuitive and more accurate.  ckuus[27].c, 15 Nov 2009.
-
-\fsplit() and \fword() always break on 8-bit characters unless you explicitly
-put every single 8-bit value into the include set, e.g. (for a TSV file):
-
-  undef include
-  for \%i 128 255 1 {
-      if == \%i 9 continue
-      .include := \m(include)\fchar(\%i)
-  }
-  .\%n := \fsplit(\m(line),&a,\9,\m(include))
-
-I changed cksplit() to treat all 8-bit bytes 128-255 as non-break characters
-by default.  It might have made more sense to do this for 160-255 (since
-128-159 are traditionaly C1 control characters) but thanks to Microsoft
-tradition is out the window.  To treat one or more 8-bit characters as break
-characters, put them in the break set.  This might break some scripts, but I
-doubt it because this flaw was so awful that if anyone had come up against
-they would have let me know.  ckclib.c, 16 Nov 2009.
-
-Changed the netbsd target to set -funsigned-char, since cc on NetBSD is
-actually gcc.  makefile, 16 Nov 2009.
-
-Changed macosx targets to get the CPU type from the HOSTTYPE environment
-variable.  Also added getenv("HOSTTYPE") as a last-resort method to set the
-\v(cpu) variable at runtime (maybe it should be the first resort?)...
-ckuus4.c, makefile, 16 Nov 2009.
-
-Made sure the solaris9_64 and solaris10 targets still work.  16 Nov 2009.
-
-Made sure the current source package builds OK on HP-UX 10.20...  Got a lot
-of "warning 6062: Optdriver: Exceeding compiler resource limits in xxx; some
-optimizations skipped. Use +Onolimit if override desired" but it builds OK.
-Tested long file transfer; works OK.  17 Nov 2009.
-
-Built on FreeBSD 7.2 with and without OpenSSL, all OK.  17 Nov 2009.
-
-Built on NetBSD 5.0.1 with and without OpenSSL, all OK, but netbsd+krb5
-fails with "can't find -lgssapi_krb5"; worked around this with
-"K5LIB=-L/usr/local/kerblib" (where the lib actually is on this host) but
-then it failed with "ckcftp.c:13868: error: 'gss_nt_service_name' undeclared".
-17 Nov 2009.
-
-I found a VMS 6.2 system... Takes a loooong time to build there.  In
-ckuusy.c, DEC C didn't like the prototypes and declarations of dorlgarg()
-and dotnarg() as static so I made them not static.  But that didn't help,
-now it fails at the very end, saying the final #ifdef is an invalid
-statement.  It looks like an #ifdef mismatch that affects only VMS.  I ran
-my #ifdef matcher, it turned up nothing.  I substituted a copy of ckuusy.c
-from 2007, it comes up with the same errors.  Then I substituted the copy
-from 8.0.211 from 2004, and this one compiled OK and, miraculously, the
-whole mess even linked OK and runs OK.  The Alpha binary is 2.84MB.  Now I
-have 4500 lines of code to compare....  I went through the two files line by
-line and I can't see a single thing wrong.  I gave up and tried building the
-TCP/IP version.  It builds fine except for ckuusy.c, with the utterly
-useless error message:
-
-  #endif /* NOCMDL */
-  ...................^
-  %CC-E-BADSTMT, Invalid statement.
-
-Indicating the last line in the file.  Just for the heck of it, I put
-another line after that one:
-
-  /* This is a test */
-
-and got:
-
-  /* This is a test */
-  ....................^
-  %CC-E-BADSTMT, Invalid statement.
-
-So it is not objecting to anything in the file.  Trying the old LISP trick,
-I put an extraneous closing bracket after that.  Success!  Honestly, I don't
-see anything wrong with file.  It's DEC C V5.3-006.  I suspect a C bug.
-I'll leave it like this for now until I get access to some other VMS
-versions.  Another clue is that when building the network version I get a
-horrible warning I never saw before from a module that hasn't been touched
-in a very long time (ckvrtl.c).  Also, in the network version, I note that
-the FTP code is not compiled in.  We have to try this again with some
-command-line switches, but it'll do for now.  ckuusy.c, 18 Nov 2009.
-
----C-Kermit 9.0 Alpha.01---
-
-From Steven Schweda (SMS), the real solution for the VMS closing brace
-problem, it wasn't a DECC bug, it was a me bug.  ckuusy.c, 20 Nov 2009.
-
-Rediscovered the new VMS build options: f for Long Files, i for Internal
-FTP.  "make mnf" doesn't work on VMS 6.2, it looks like the VMS definition
-for CK_OFF_T got lost.  Same thing with "make mfi".  Come back to this later.
-
-From Gerry Belanger, a fix to INPUT /COUNT:n.  ckuus4.c, 26 Nov 2009.
-
-Added \fsqueeze(s), returns string s with leading and trailing whitespace
-removed, Tabs converted to Spaces, and multiple spaces converted to single
-spaces.  For now, ASCII only, no options.  ckuusr.h, ckuus[24].c, 27 Nov 2009.
-
-I wrote a Kermit script to read a big file of addresses on Solaris 9,
-\fsqueeze()ing each line.  After about 14000 lines, there was a malloc
-failure in getnct() (the command-file reader).  There's nothing wrong with
-\fsqueeze(), the failure is on a deeper level, because the same thing
-happens if I use \fupper() (which is structurally identical to \fsqueeze())
-in the same script.  The problem is not in getnct() either, because every
-malloc() is freed (I checked).  On the other hand, the same script (with
-\fupper() instead of \fsqueeze() completes OK in C-Kermit 8.0.201.  If I
-remove the function call (\fsqueeze() or \fupper()) from the script, it also
-runs OK in 9.0.  This seems to point the finger at fnevel(), which contains
-countless malloc's and free's.  But comparing fneval() between 8.0.211 and
-9.0, I don't see any difference that would explain this behavior -- nothing
-at all that involves malloc(), makstr(), or free().  Nor any pertinent
-change in the caller (zzstring) of fneval().  27 Nov 3009.
-
-Another problem is that when this happens, the error is not caught (e.g. by
-the IF FAIL statement after the command that contains the function call);
-instead, C-Kermit returns immediately to its prompt.  27 Nov 2009.
-
-It could simply be that some of the buffers we allocate are much bigger now.
-But again, I don't see much difference between 8.0.211 and 9.0; we were
-already allocating 32K command-related buffers (malloc() takes a size_t, and
-size_t is an int almost everywere).  I built the same source on NetBSD and
-ran the same script (with \fqueeze()), and it worked fine.  Let's worry
-about this later, if it comes up.  27 Nov 2009.
-
-Built OK on Silicon Graphics IRIX 6.5 R10000; regular build OK, SSL and
-Kerberos builds failed.  30 Nov 3009.
-
-Tried to build on Digital Unix 4.0F but it blew up in ckutio.c, apparently
-not recognizing any of the terminal struct symbols from termios.h.  Tried
-again with gcc, same thing.  Tried explicitly #including <sys/termios.h>
-within #ifdef TRU64, same thing.  What could have changed?  30 Nov 2009.
-
-Built OK on Linux RHEL5.4/Itanium-2, make linux.  The secure build
-required "FLAGS=-DNO_KRB5_INIT_ETS" and built OK.  30 Nov 2009.
-
-Built OK on Digital Unix 4.0F using "make osf" instead of "make tru64-40f".
-I don't know why the specific target doesn't work, but it's not worth
-chasing down.  2 Dec 2009.
-
-Built OK on MirBSD 10, despite a lot of gratuitous compiler warnings.  Built
-OK on MirBSD 10, OpenBSD 4.5, and Fedora 10.  3 Dec 2009.
-
-(Various other successful Unix builds in these weeks...)
-
-Built on VMS 7.2 and 8.3 with and without TCP/IP, no problems.  11 Jan 2010.
-
-Built on VMS 8.3 with "make fi" to include the FTP client and long-file
-support (mid Jan 2010).
-
-Built on VMS 8.3 with UXC 5.6 and HP SSL 1.3, which is OpenSSL 0.9.7e.
-It compiled and linked OK but when I tried to make an FTP SSL connection
-it crashed in SSL$LIBSSL_SHR, which is called from ssl_auth(), after having
-had TLS accepted as an authentication type, but before actually
-authenticating.  In Unix:
-
- 19. ftp open ftp.somecompany.com /user:pge.com/test_quota /password:xxxxxx
-Connected to ftp.somecompany.com.
-220-Somecompany FTP v6.0 for WinSock ready...
-220 Welcome to the online storage FTP server.  Please check the main web
-site for system announcements and AUP. (O)
----> AUTH TLS
-234 AUTH command OK. Initializing SSL connection.
-TLS accepted as authentication type
-SSL DEBUG ACTIVE
-=>START SSL/TLS connect on COMMAND
-
-In VMS:
-
- 19. ftp open ftp.somecompany.com /user:pge.com/test_quota /password:xxxxxx
-Connected to ftp.somecompany.com.
-220 Somecompany FTP v6.0 for WinSock ready...
----> AUTH TLS
-234 AUTH command OK. Initializing SSL connection.
-TLS accepted as authentication type
-SSL DEBUG ACTIVE
-%SYSTEM-F-ACCVIO, access violation, reason mask=04, virtual
-address=FFFFFFFF8001A120, PC=000000000068B118, PS=0000001B
-
-Note: The Unix version received the second 220 response, the VMS version did
-not.  That's odd, it's the same code...  25 Jan 2010.
-
-Added some essential details to the HELP FSEEK text.  ckuus2.c, 25 Jan 2010.
-
-Discovered that the result returned by \fsearch() is totally unreliable.
-This is probably too hard to fix.
-
-FSEEK did not pay attention to SET CASE, searches were always case sensitive.
-Fixed in ckuus7.c, 26 Jan 2010.
-
-FSEEK failed to find anything if the search pattern was matched in the first
-line of the file.  Fixed in ckuus7.c, 26 Jan 2010.
-
-\fword() and \fsplit()....  Another change, but not backwards-incompatible.
-One may now put the word ALL (just like that, all uppercase) as the include
-set (4th argument) to indicate that there will be no break characters other
-than those explicitly given in the break set, e.g. \fsplit(\m(xx),&a,:,ALL)
-breaks a line only on a colon (:), nothing else.  The original rules for
-cksplit() were more than a little counterintuitive: the default break set is
-all non alphanums, and the default include set is all alphanums, so if you
-wanted to parse (say) a CSV file, breaking only on comma, you had to think
-of all the characters you wanted to keep.  This way you just say ALL.
-ckclib.c, 26 Jan 2010.
-
-Speaking of CSV files... How can you put comma as a function argument when
-comma is the function-argument separator?  Use one of these forms:
-
- \fsplit(\m(xx),&a,",",ALL)
- \fsplit(\m(xx),&a,{,},ALL)
- \fsplit(\m(xx),&a,\44,ALL)
- \fsplit(\m(xx),&a,\fchar(44),ALL)
-
-From John Dunlap, U. of Washington Applied Physics Lab: 'When "stty -a <
-/dev/ttyS0 | grep crtscts" shows "crtscts" (not "-crtscts") and when using a
-three wire serial interface and when asking kermit to not use flow control
-(set flow none) then "ckutio.c1" (see attachments) fails while "ckutio.c"
-works.  The result of "diff -u ckutio.c1 ckutio.c" is attached as "diffs"'.
-ckutio.c, 26 Jan 2010.
-
-Changed the year from 2009 to 2010 in the modules I worked on today and in
-the heralds, etc.  ckckmai.c, ckuus5.c, ckutio.c, ckclib.c, ckuus7.c,
-26 Jan 2010.
-
-Built on Linux Fedora Core 3, regular and with OpenSSL 0.9.7a.  Built on
-Ubuntu 9.4 OK, but SSL and Kerberos builds failed due to not finding libs
-and/or header files.  I'm sure this could be fixed...  27 Jan 2010.
-
-Added SSL, KRB4, and KRB5 to the startup herald for versions that were
-built with SSL, Kerberos 4, or Kerberos 5.  Built OK on Fedora 3 with
-linux+krb5+ssl and new banner shows correctly.  ckuus5.c, 27 Jan 2010.
-
-Set NO_KRB5_INIT_ETS by default in ckuath.h since krb5_init_ets() is a no-op
-in Kerberos 1.4.x and later and in some installations it can't be found,
-which clobbers the build.  ckuath.h, 27 Jan 2010.
-
-Adapted to MINIX 3 1.5, the first version that has virtual memory according
-to Andy T, who should know.  On earlier versions (e.g. MINIX 3 1.2) any
-attempt to build C-Kermit causes the compiler to crash.  Now the compiler
-doesn't crash but it spews out countless warnings about old-fashioned
-function declarations that I don't get anywhere else.  The real problems
-came in ckutio.c where numerous symbols were undefined at compile time and
-the POSIX function tcgetpgrp() was not found at link time, even though there
-is a prototype for it in the MINIX header files, and there is no alternative
-(since POSIX doesn't let us use ioctl()).  Also note that there is some
-confusion over the compile-time symbols MINIX, MINIX2, MINIX3, and MINIX315.
-You would expect MINIX to mean "any version of MINIX" but in some parts of
-ckutio.c it means MINIX 1.0.  I sincerely doubt that C-Kermit 9.0 can be
-built on any version of Minix before 3.1.5 so I removed the confusion and
-made MINIX mean "any Minix".  It builds on 3.1.5 OK now, except for the FTP
-client.  This can probably be fixed but...  Modules changed: ckcdeb.h,
-ckuver.h, ckcmai.c, ckuus5.c, ckutio.c, 1 Feb 2010.
-
-Later.. Andy says MINIX does not support job control, so no program is ever
-in the background.  That settles that!  1 Feb 2010.
-
-Built OK on Minix, Linux, Mac OS X, Solaris 9, NetBSD 5.0.1...  1 Feb 2010.
-
----C-Kermit 9.0 Alpha.02---
-
-From Christian Corti at Uni-Stuttgart.de: fixes to allow building on SunOS
-4.1, which once was my main development platform but which is long-gone from
-here.  ckupty.c, ckutio.c, 9 Feb 2010.  (He says it is also necessary to
-comment out the "struct winsize" and "struct ttysize" in sys/ioctl.h;
-otherwise there will be a conflict with sys/ttycom.h (included by termios.h)
-which also declares these structs. But you need both includes.')
-
-From John Dunlap, a fix for Kermit protocol fixed packet-timeout interval
-going to a unexpected value (missing else clause in two places).
-ckcfn2.c, 9 Feb 2010.
-
-Added an aixg target to build on AIX with gcc when gcc is not installed as
-cc, and also added CC=$(CC) CC2=$(CC) clauses to the aix and aix+ssl
-targets.  Wow, AIX really loses bigtime when receiving files through its ssh
-server.  Streaming can't be used, sliding windows recover from errors but
-there are tons of them using the default 4K packets; 500 works much better.
-Built with IBM cc and gcc, and also tested (successfully) the new aix+ibmssl
-target, in which the OpenSSL headers and libs are in a standard place.
-makefile, 9 Feb 2010.
-
-In ckupty.h, make the #include <sys/ioctl.h> be #ifndef SUNOS41.
-From Christian Corti.  10 Feb 2010.
-
-Built on VMS E8.4.  12 Feb 2010.
-
-Tried to build on a real VAX-11/785 but the machine seems to be seriously
-wedged.  12-15 Feb 2010.
-
-Added note to CKVKER.COM to the effect the the 'f' option has no effect
-on VAX architecture.  15 Feb 2010.
-
-Moved the #include "ckvrtl.h" in the FTP module to below the include for
-utime.h, because building the VMS version with the 'i' option (meaning
-"include internal ftp client") results in "struct utimbuf tp" erroring out
-because struct utimbuf is not defined yet (at least in some version of VMS
-with some version of C).  From Rob Brown, ckcftp.c, 20 Feb 2010.
-
-From Martin Vorlaender: new code in VMS C-Kermit build procedure to detect
-OpenSSL version automatically.  ckvker.com, 22 Feb 2010.
-
-Added code to INPUT command to strip ANSI escape sequences.  It's activated
-by SET SESSION-LOG TEXT.  ckuusr.h: added prototype for chkaes();
-ckucon.c, ckucns.c: made inesc[] and oldesc[] global instead of static; 
-ckuus4.c: doinput() code for skipping escape sequences.  1 Mar 2010.
-
-Peter Eichhorn complained that if you make an ssh connection with Kermit,
-then log out from the ssh host, and then use a "connect" command to
-make a new connection to the same host (which you can do with Telnet),
-Kermit says (e.g.):
-
- DNS Lookup... Can't get address for ssh -e none somehostname
- Sorry, can't open ssh -e none somehostname: Error 0
-
-I added code to detect and handle this case and it seems to work OK, even
-though it's kind of a hack.  ckuusr.[ch], ckuus7.c, 1 Mar 2010.
-
-There has never been a clean way to put debugging messages (ECHO commands)
-in a script which are executed only if debugging is desired and ignored
-otherwise.  You'd have to set a random variable and test it, or define a
-macro or whatever.  To make this more straightforward, I added SET DEBUG
-MESSAGE ON/OFF/STDERR, and added a new MESSAGE (syn: MSG) command for printing
-debugging messages to stdout if SET DEBUG MESSAGE is ON or to stderr if SET
-DEBUG MESSAGE is STDERR.  ckcmai.c, ckuus[r23].c, 12 Mar 2010.
-
-Also for debugging and error messages, I added \v(lastcommmand) so that
-the command that failed can be included in an IF FAIL or DEBUG error message.
-This works even for commands that have syntax errors.
-ckuusr.h, ckuus5.c, ckucmd.c, 12 Mar 2010.
-
-From SMS for VMS: 'Added/documented P3 options INTSELECT, OLDFIB, OLDIP.
-Disabled (commented out) automatic definition of NOSETTIME for VMS before
-V7.2 (vms_ver .lts. "VMS_V72").'  ckcdeb.h, ckcftp.c, ckcnet.c, ckuus[2567].c,
-ckvfio.c, ckvker.com, ckvrtl.[ch], 15 Mar 2010.
-
-Exposed inesc[] and oldesc[] for VMS, so new INPUT command escape-sequence
-stripping can work (really, chkaes() and related global variables should be
-moved out of ck[uvd]con.c/ckucns.c and into a common module; do that later).
-ckuusr.h, ckvcon.c, 15 Mar 2010.
-
-Built OK on Solaris9, Mac OS X 10.4.11, RHEL4 (32-bit), RHEL5 (64-bit),
-AIX 5.3, SCO OpenServr 6.0.0...  15 Mar 2010.
-
-Not so good on VMS, turns out I made a typo in one of the VMS updates
-(#ifndef OLDIP instead of #ifdef...).  ckcnet.c, 16 Mar 2010.
-
-More from SMS for VMS, 16 Mar 2010:
- . Set MAXPATH correctly for VMS, ckcdeb.h.
- . NAM -> NAML, QIO replaces system( "SET PROTECTION"), bugfixes in
-   cvtdir() and nzltor(), ...  (See comments): ckvfio.c, new ckvrms.h.
-   (The RMS code in ckvfio.c was almost totally rewritten)
- . Moved "NAMX$*" (and related) macros to ckvrms.h, and renamed to
-   "NAMX_*" (and similar "$" -> "_"), moved "FIB_*" macros from ckvrtl.c.
-
-These changes are mainly to accommodate the ODS5 file system, which has
-longer and mixed-case filenames, and also to execute certain commands
-(e.g. for setting file protection, deleting directories) directly instead
-of using a system() command.
-
-Built OK on VMS 8.3 (with and without network support).  16 Mar 2010.
-
-Failed to build on VMS 6.2.  16 Mar 2010.
-
-FreeBSD 8.0 <libutil.h> has a hexdump() prototype that conflicts with the
-hexdump macro defined in ckcdeb.h.  Since the same thing is likely to happen
-elsewhere, I changed the Kermit macro to ckhexdump as well all references to
-it: ckcdeb.h, ckcftp.c, ckcnet.c, ckctel.c, ckuath.c, ckutio.c, 16 Mar 2010.
-
-Built OK on Digital Unix Tru-64 4.0E using "make osf", 16 Mar 2010.
-
-Tried again to build Digital Unix Tru64 4.0E using "make tru64-40e", but
-something prevents it from picking up the termios symbols and it blows up in
-ckutio.c, whereas this used to work in earlier C-Kermit versions.  This is
-the only Tru64 system I still have access to, so I can't tell if it's a
-local peculiarity or what.  Note that POSIX is not defined for this build.
-But if I define it, I get into trouble with "struct timeval".  Tried again
-with "KFLAGS=-DPOSIX -DNOTIMEVAL" but that doesn't help.  Tried "make
-dec-osf" and that worked OK but oddly enough it makes a Kermit with less
-features than "make osf".  16 Mar 2010.
-
-To go with MESSAGE and SET DEBUG MESSAGE, I added IF DEBUG, which is true
-if SET DEBUG MESSAGE is not OFF and false otherwise.  ckuusr.h, ckuus6.c,
-16 Mar 2010.
-
-From SMS: Corrections to my merging of SMS's changes, ckcftp.c, ckvrtl.h.
-Builds OK on VMS 6.2 now.  Also did an SSL build on VMS 8.3 with OpenSSL
-m0.9.7e and "OPENSSL_DISABLE_OLD_DES_SUPPORT" was included in P3
-automatically by Martin V's addition to ckvker.com.  17 Mar 2010.
-
-From SMS: #include <types.h> earlier for VMS in ckcdeb.h to pick up off_t
-before it is referenced.  This allows C-Kermit to compile on VMS/Alpha 6.2
-but linking fails on fseeko() and ftello() (and yet, a functional executable
-is created, and FSEEK works right).  Builds the same way with no problems at
-all on VMS 8.3 / Alpha.  In this case we get the full 64-bit arithmetic...
-Well, 62 bits:
-
-  ATLAS::C-Kermit>( ^ 2 63)
-   9223372036854775000.0
-  ATLAS::C-Kermit>( ^ 2 62)
-   4611686018427387904
-
-whereas on VMS 6.2 we get integers only up to (^ 2 30).  17 Mar 2010.
-
-Changed the VMS build procedure to enable large file support automatically
-for non-VAX and VMS 7.3 or greater.  No reason not to include this feature.
-Changed the sense of the F option to DISABLE large file support in the
-unlikely case that C-Kermit is being built on a suitable platform but the
-C library is older than VMS73_ACRTL-V0200, in which case fseeko() and
-ftello() will come up missing at link time.  ckvker.com, 18 Mar 2010.
-
-Changed VMS build procedure to include the FTP client in any network build
-by default.  Changed the sense of the I option to exclude the FTP client,
-in case anybody would want to do that.  ckvker.com, 18 Mar 2010.
-
-From SMS: updated dependencies in CKVKER.COM, fix the "don't reinclude me"
-clause in CKVRTL.H.  19 Mar 2010.
-
-Built OK on VMS 6.2 and 8.3 with and without networking.  Large file support
-included automatically in VMS 8.3  FTP client included automatically in both
-network builds.  19 Mar 2010.
-
-Changed hexdump() to ckhexdump() in ck_crp.c, which I missed before.
-19 Mar 2010.
-
----C-Kermit 9.0 Alpha.03---
-
-In HP-UX with the bundled-non ANSI compiler, we get warnings about functions
-such as endusershell(), which are declared void in the header files.  But in
-non-ANSI builds we defind VOID to be int rather than void, so our prototypes
-are wrong.  I checked that HP-UX 9, 10, and 11 all have void datatype and
-changed the definition of VOID to void in those cases.  ckcdeb.h, 29 Mar 2010.
-
-Fixed a typo in a debug() statement in cksplit() that was causing some
-warnings.  ckclib.c, 29 Mar 2010.
-
-Ditto in tls_load_certs().  ck_ssl.c, 29 Mar 2010.
-
-"make hpux1000o+ssl" files with:
-/usr/ccs/bin/ld: Unsatisfied symbols:
-   __umoddi3 (code)
-   __udivdi3 (code)
-   __eprintf (code)
-
-It appears that OpenSSL (0.9.7c in this case) requires -lgcc.
-And indeed hpux1000gcc+ssl builds fine.  29 Mar 2010.
-
-There are various warnings in the SSL code in ckutio.c, ckcftp.c, and
-ckcnet.c about pointers not being assignment compatible, but I have learned
-from experience not to try to fix these (see notes from 6 Oct 2009).
-29 Mar 2010.
-
-connect(s, (struct sockaddr *)&hisctladdr, sizeof (hisctladdr)): In FTP,
-this doesn't work on RHEL5 / Mac OX X 6.1/2 64-bit.  But the connect() in
-Telnet works.  On Mac OS X 6.2 I tried changing the socket() call to be like
-the one in ckcnet.c for Telnet, but it made no difference.  On a RHEL5.4
-system on i386, FTP works fine, so it's not the Red Hat version.  On Digital
-Unix 4.0E 64-bit, same thing:
-
-  11:23:10.722 ftp_hookup[kermit.columbia.edu]=21
-  11:23:10.722 ftp hookup A[kermit.columbia.edu]
-  11:23:10.722 ftp hookup C[kermit.columbia.edu]
-  11:23:10.722 ftp hookup socket=4
-  11:23:10.722 ftp hookup HADDRLIST
-  11:23:10.723 ftp hookup connect failed=13
-  11:23:10.723 ftp hookup bad
-
-13 = Permission denied:
-
-  [EACCESS] Search permission is denied for a component of the path prefix;
-    or write access to the named socket is denied.
-
-On Gentoo Linux, also on Alpha, the errno is 51: Network is unreachable.
-Clearly some data type in the sockets structs is out of whack.
-
-The third connect() argument is "address length".  The address is a
-struct sockaddr.  About the third argument, RHEL5 "man connect" says:
-
-  The third argument of connect() is in reality an int (and this is what 
-  4.x BSD and libc4 and libc5 have).  Some POSIX confusion resulted in 
-  the present socklen_t, also used by glibc.  See also accept(2).
-
-Building on RHEL5 on x86_64, where size_t is 8 and socklen_t is 4, I get a
-warning:
-
-  ckcftp.c: In function 'ftp_hookup':
-  ckcftp.c:14667: warning:
-   comparison is always true due to limited range of data
-
-Referring to:
-
-  if (hisctladdr.sin_addr.s_addr != (unsigned long) -1)
-
-This seems to be the problem; if I remove the (unsigned long) cast (in two
-places), the problem goes away.  Actually what I should be comparing it with
-is INADDR_NONE, which is defined appropriately in some header file, e.g. as
-0xffffffff.  Also I define it explicitly as -1 if it is not defined in any
-header file (as is the case in Solaris 9).  Tested OK on 64-bit RHEL5,
-32-bit RHEL5, Digital Unix 4.0E 64-bit, Solaris 9 32-bit, Mac OS X 10.4.11
-32-bit, Mac OS X 10.6.3 64-bit, AIX 5.3, Gentoo Linux 2.6.31 on Alpha
-64-bit, NetBSD 5.0.1 32-bit....  ckcftp.c, 29 Mar 2010.
-
----C-Kermit 9.0 Alpha.04---
-
-Yesterday's VOID redefinition caused problems for HP-UX in ckuusx.c, in the
-curses section where VOID is undef'd and not used to avoid a conflict with
-curses.h.  As a workaround I defined a new macro CKVOID with the same
-definition as VOID and used it in the offending section of ckuusx.  The real
-solution is to replace all references to VOID with CKVOID (since VOID is
-increasingly likely to cause conflicts), but a mass search and replace is
-not without risks.  ckcdeb.h, ckuusx.c, 30 Mar 2010.
-
-Changed VOID and CKVOID definition to be 'void' for all HP-UX (verified by
-PeterE back to HP-UX 6.5, 1989).  Still need to check this on HP-UX 5.21;
-if that's an exception it can be done in the makefile.  ckcdeb.h, 30 Mar 2010.
-
-The change I made to allow CONNECT to reestablish a previous SSH connection
-prevented a new SSH connection to a different host to be made.  Fixed in
-ckuus7.c, 30 Mar 2010.
-
-Fixed mistaken extern declarations of krb4_errno and krb5_errno as strings
-in nvlook(); they are ints. Built OK on Mac OS X 10.6.3. ckuus4.c, 30 Mar 2010.
-
-A fix to Trusted HP-UX makefile target from PeterE, to account for the
-equivalence of +openssl and +ssl as target suffixes.  30 Mar 2010.
-
-Added a new function \fcvtcsets(string,cset1,cset1) that converts a string
-from one character set to another.  The csets are File Character-Set names.
-ckuus4.c, 31 Mar 2010.
-
-Added a new function \fdecodehex(string,prefix) that decodes a string
-containing prefixed hex bytes.  Default prefix is %%, but any prefix of
-one of two chars (such as % or 0x) can be specified.  ckuusr.h, ckclib.h,
-ckclib.c, ckuusr.c, 31 Mar 2010.
-
-Richard Nolde reports that Kermit can't find -lpam on Fedora 12 because it's
-in /lib rather than /usr/lib.  RHEL5 has symlinks, FC12 should too.  Added a
-note to the makefile.  1 Apr 2010.
-
-Build on Solaris 11 for the first time.  Had to adjust ckuver.h to get the
-version herald right.  This was on a box that reported its architecture as
-i86pc.  1 Apr 2010.
-
-Added MIME character-set names as invisible synonyms in the file and
-terminal character-set tables, fcstab[] and tcstab[].  Note that not all the
-character sets known to Kermit are registered in MIME.  But at least now
-MIME-registered character sets can be referred to by their MIME names, e.g.
-ISO-8859-1, ISO646-ES, IBM437, WINDOWS-1252.  These are not listed if you
-type ? in a field that is parsing them, unless you type a letter first,
-e.g. "i?" lists ISO- and IBM set names.  Later maybe I'll make parallel
-tables, or keyword attribute bit that says whether a name is MIME or not.
-The real benefit of this change is that now Kermit can take its
-character-set names from external sources like email headers or web logs.
-ckuxla.c, 1 Apr 2010.
-
-Changed the IF command to accept a bare macro name its condition.  This will
-parse and execute correctly if the macro is defined and if it has a numeric
-value, or if it is not defined, in which case it evaluates to 0 (FALSE).  If
-it is defined but has a non-numeric value, a parse error occurs.  ckuus6.c,
-2 Apr 2010.
-
-Added \fstringtype() function.  Given a string argument, it tells whether
-the string is 7bit, 8bit, utf8, binary, etc.  ckuusr.h, ckuus[4x].c,
-2 Apr 2010.
-
-Did a few builds to make sure there were no booboos.  Solaris 9, NetBSD
-5.01, Linux RHEL4, HP-UX 10.20 (non-ANSI compiler and ANSI optimizing
-compiler), Mac OS X 10.4.11, SCO OSR 6.00.  5 Apr 2010.
-
----C-Kermit 9.0 Alpha.05---
-
-Increased maximum variable name length from 4K to 16K. Verified that
-too-long names are caught and recovered from correctly.  ckuusr.h, 6 Apr 2010.
-
-Implemented a new \fsplit() option for parsing CSV files, which turns out to
-be a little complicated, because the separator is not just a comma, but a
-comma and all its surrounding spaces.  Also there are special quoting rules
-for fields with embedded commas and fields with embedded quotes.  ckclib.c,
-7 Apr 2010.
-
----C-Kermit 9.0 Alpha.06---
-
-VMS changes from SMS.  They build OK, Kermit file transfers are still OK,
-but FTP text-mode GETs always hang on the 10th 8K network read.  Couldn't
-get a debug log this time.  ckcmai.c, ckvfio.c, ckvrms.h, ckvker.com.
-8 Apr 2010.
-
-Changing VNAML from 4K to 16K broke the build on HP-UX 9.  Put it back to
-4K.  9 Apr 2010.
-
-John Dunlap, running days-long stress tests between E-Kermit and C-Kermit,
-found a bug in the packet-reading and -decoding code: If a NAK packet
-arrives with its length field corrupted to indicate a bigger size, and there
-are enough bytes following in the pipeline, ttinl() will return a too-long
-packet (if there are not enough bytes waiting to be read, then ttinl() will
-properly time out).  In the bad case rpack() trusts the packet length, uses
-it as the basis for computation of the block-check length, which is then
-used to access memory that might not be there, causing (at least on John's
-Linux system) a segmentation fault.  John added the normal clause to check
-the result of the block-check calculation, and I changed ttinl() to always
-break on the eol character (normally carriage return), since this can never
-appear in a packet, even if we "set control unprefix all".  Also added a
-check to ttinl() to protect against length fields corrupted into illegal
-values.  ckcfn2.c, ckutio.c, 13 Apr 2010.
-
-From Lewis McCarthy:
-  Based on code inspection, C-Kermit appears to have an SSL-related security
-  vulnerability analogous to that identified as CVE-2009-3767 (see e.g.
-  http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2009-3767).
-
-  I'm attaching a patch for this issue relative to the revision of ck_ssl.c
-  obtained from a copy of http://www.columbia.edu/kermit/ftp/test/tar/x.zip
-  downloaded on 2010/07/30, which I believe is the latest.
-
-  When this flaw was first widely publicized at last year's Black Hat
-  conference, it was claimed that some public certificate authorities had
-  indeed issued certificates that could be used to exploit this class of
-  vulnerability. As far as I know they have not revealed specifically which
-  public CA(s) had been found issuing such certificates.
-  Some references: http://www.mseclab.com/?p=180
-  http://www.theregister.co.uk/2009/07/30/universal_ssl_certificate/
-
-Patches added to ck_ssl.c, 4 Aug 2010.
-
-Peter Eichhorn reported that "RENAME ../x ." didn't work.  This is a side
-effect of the changes of 2006 to the RENAME command, there was a little
-confusion in the renameone() routine; fixed in ckuus6.c, 4 Aug 2010.
-
-If only one file is FOPEN'd, FCLOSE given with no arguments would close it.
-Turns out to be a bad idea. Example: program with an input and output file,
-try to close the output file before it is opened by just typing FCLOSE; this
-can mess up the input file.   For safety FCLOSE has to require a channel
-number or ALL.  ckuus7.c, 4 Aug 2010.
-
-Added \fstrcmp(s1,s2,case,start,length), which has the advantage over IF
-EQU,LGT,LLT that case senstivity can be specified as a function arg, and
-also substrings can be specified.  ckuusr.h, ckuus[24].c, 5 Aug 2010.
-
-The CSV feature of Alpha.06 had a subtle flaw, namely that if the last item
-in a comma separated list was enclosed within doublequotes with a trailing
-space after the closing doublequote, a spurious empty final element would be
-created in the result array.  Fixed in cksplit(), ckclib.c, 5 Aug 2010.
-
----Alpha.07---
-
-The CSV feature of \fsplit() splits a comma-separated list into an array.
-To turn the array back into a comma separated list, \fjoin(&a,\44,1) almost
-works, except for elements contain literal doublequotes, such as:
-
-  Mohammad "The Greatest" Ali
-
-This calls for making a symbolic CSV argument for \fjoin() like the one that
-was made for \fsplit(): \fjoin(&a,CSV).  Also \fjoin(&a,TSV) for
-Tab-separated list.  Thus if Kermit reads a record in CSV format, splits it
-into an array, and then joins the array back into a CSV record, the result
-will be equivalent to the original, according to the CSV definition.  It
-might not be identical, because if the result had extraneous spaces before
-or after the separating commas, these are discarded, but that does not
-affect the elements themselves.  Furthermore it is now possible to convert
-a comma-separated list into a tab-separated list, and vice versa (which is
-not a simple matter of changing commas to tabs or vice versa).  ckuus4.c,
-12 Aug 2010.
-
-From Joop Boonen 26 Juli 2010: "Added HAVE_LOCKDEV as openSuSE >= 11.3 uses
-lockdev but not baudboy.  They use ttylock directly.  The program code has
-been added so the the program works without a problem."  makefile, ckcdeb.h,
-ckutio.c, ckuus5.c, 23 Aug 2010.
-
----Alpha.08---
-
-From Gary Mills at the U of Manitoba: convert Solaris version from BSD ptys
-to streams ptys because there are only 48 BSD-style ptys and he was running
-out.  No code changes needed, the only change necessary was to add the
-following flags to the makefile target:
-
-  -DHAVE_STREAMS -DHAVE_GRANTPT -DHAVE_PTSNAME
-  -DPUSH_PTEM -DPUSH_LDTERM -DPUSH_TTCOMPAT
-
-makefile, ckcmai.c, 21 Sep 2010.
-
-Testing this in Solaris 9 I see that the DES library disappeared.  Added
-code to the solaris9 targets (also used by Solaris 10 and 11) to check for
-this.  makefile, 21 Sep 2010.
-
-The Solaris target checked the OpenSSL version automatically to set the
-right flag, the Linux target didn't.  Put the OpenSSL-version testing code
-in the Linux target too.  makefile, 21 Sep 2010.
-
-A couple minor changes to the tru64-51b makefile targets from Steven Schweda
-but there still are some problems with the Tru64 Unix builds.
-makefile, 21 Sep 2010.
-
----Alpha.09---
-
-\fcontents(\&a[3]) got an error if the array was declared but its dimension
-was less than 3, which is bad when dealing with (say) an array created
-dynamically by \fsplit(), which might or might not have a third element.
-In case it doesn't -- i.e. in case we are referring to an out of range
-element of any array that is declared -- we should just return a null
-string, as we do with other types of variables that are not defined.
-For that matter, ditto even if the array is not declared; what useful
-purpose is served by throwing an error in this case?
-ckuus4.c, 30 Dec 2010.
-
-cksplit() treats \ as a quoting character.  If the source string contains
-backslashes, they are swallowed (or, if doubled, one is kept).  That's not
-good for parsing external data, such as lines read from files, where there
-are no quoting rules.  This came up when parsing CSV files; as a workaround,
-I made \fsplit() treat backslash as an ordinary character for CSV and TSV
-splitting (a better solution might be yet another argument that specifies
-a quote character).  ckclib.c, 30 Dec 2010.
-
-Began converting C-Kermit to Open Source with the Simplified 3-Clause BSD
-license.  Updated the text for the INTRO, LICENSE, NEWS, and SUPPORT
-commands.  Fixed things so the copyright year to be displayed is defined in
-one place (ck_cryear in ckcmai.c), rather than hardwired into text strings
-all over the place.  COPYING.TXT, ckcmai.c, ckuus[256].c, 2 Jun 2011.
-
-When I added MIME synonyms for Kermit character-set names, I left a bogus
-entry in the tables ("windows-1251") that was in the wrong place
-alphabetically, thus preventing most references to file character-set names
-from working right.  Removed the bogus entry.  ckuxla.c, 2 Jun 2011.
-
-Most combinations work OK, but not translating Cyrillic text from UTF-8
-to Latin/Cyrillic, and probably the same would be true for any case of
-converting from UTF-8 or UCS-2 to anything else.  The problem was in
-xgnbyte(), which converts the input stream from the specified character to
-UCS2; it needed to make a special case for when the input file was already
-Unicode.  Believe it or not, this problem occurred at least as far back as
-8.0.201 (9.5 years ago) and nobody noticed.  So if the fix isn't perfect
-probably nobody will notice that either.  ckcfns.c, 3 Jun 2011.
-
-The SET BLOCK CHECK command did not parse all the items in its keyword
-list.  Fixed in ckuus3.c, 3 Jun 2011.
-
-For EM-APEX ocean floats project, where buoys in stormy waters have to
-transmit data through an earth satellite using non-error-correcting modems,
-John Dunlap ran exhaustive stress tests of Kermit protocol transfers through
-a simulated connection that injected errors and delays and identified a
-weakness in Kermit protocol when it is used under extremely bad conditions:
-If a data byte of the S packet (or its Ack) is corrupted and the 1-byte
-checksum is also corrupted in such a way that that the checksum matches the
-corrupted data, the two Kermit programs will disagree as to the negotiated
-parameters.  For example, if file Sender's RPT field is changed from '~' to
-'^', the receiver will decode the packet incorrectly.  Ditto for most of the
-other parameters.  The result is that a corrupted file is received but
-reported correct.  John suggested a new mode of operation in which the Type
-3 block check is used for all packets.  Such a mode can not be negotiated
-because the negotiation packet itself is assumed by all Kermit programs to
-have a 1-byte checksum.  Added SET BLOCK-CHECK 5 to the parser (with
-invisible synonym FORCE-3".  ckuus3.c, 3 Jun 2011.
-
-Added supporting code for SET BLOCK 5: ckcfn[23].c, ckcpro.w, ckcmai.c,
-ckuus3.c, 3 Jun 2011.
-
-Added code to skip the heuristic that S and I packets always have block
-check type 1.  File transfer OK between two C-Kermits with SET BLOCK 5.
-rpack(): ckcfn2.c, 5 Jun 2011.
-
-Made the file receiver put "5" in the block-check-type in its ACK to the
-S-Packet.  spar(): ckcfns.c, 5 Jun 2011.
-
-Now the question is: Can we make the file receiver automatically and safely
-recognize a three-byte block check on an incoming S or I packet?  It's
-tricky because the block check field is not self-identified, it's just the
-last "n" characters of string indicated by the length field, so correct
-decoding of the packet depends on stateful knowledge of "n".  How about this:
-rpack() already knows what type of packet it is, so if it's an S or I packet
-and the 8th byte of the data field is "5" and last 3 bytes, when interpreted
-as the CRC, match the packet contents, then we accept the packet and switch
-to BLOCK 5 mode.  
-
-On the other hand, if the "5" was put there by corruption, the CRC should
-catch the error.  In that case we NAK the packet and presumabely get a
-different version back.  There would be no reason to try to re-read the same
-packet with a different block check, because the "5" could not possibly be
-there legitimately unless it had a 3-byte CRC.  To be clear, this is
-cheating.  We read the packet contents before we know the packet is correct,
-then we check that it *is* correct.  I made the 4-line change to rpack()
-and it works OK in the absense of transmission errors.  ckcfn2.c, 3 Jun 2011.
-
-So the various combinations should work as desired:
-
- . Sender and receiver both support and are told to SET BLOCK 5 ("SB5").
- . Sender SB5, but receiver doesn't support it (errors out).
- . Sender SB5, receiver supports it but wasn't told (auto-recognizes it).
- . Receiver SB5 but sender no (errors out).
-
-Note in the last case, the receiver should NOT automatically fall back to
-standard behavior because if the user said SET BLOCK 5 that means every
-packet MUST be protected by CRC to prevent the I/S packets from being
-corrupted.
-
-Installed new HELP SET BLOCK-CHECK text.  ckuus2.c, 5 Jun 2011.
-
-Autodownload didn't work when the S or I packet had a 3-byte block check
-because kstart() checked it for a 1-byte checksum.  Fixed in kstart(),
-ckcfn2.c, 6 Jun 2011.  However, older Kermit versions and programs that
-claim to do "autodownload" will never recognize this type of packet.  No
-big deal since even if they did, the transfer would fail anyway.
-
-Added 'FORCE 3' to E-Kermit, called it EK 1.7.  The option is "-b 5".  Works
-OK for sending and receiving, both with and without the new option.  Also
-works with "-b 5" if you send an S packet to it with '5' in the BCT field.
-Changes were minimal, I have them all in ek17.diff.
-
-I could probably also make a new G-Kermit in about 10 minutes, but who cares
-about G-Kermit...  We already have two useful Kermit programs that
-interoperate with the new protocol.  6 Jun 2011.
-
-Replaced the very inadequate help texts for functions \fword() and
-\fsplit() with new ones.  ckuus2.c, 6 Jun 2011.
-
-There were a couple reports of file corruption that I was saving for later.
-Now that now is later I dug up the messages, files, and logs and it turns
-out that nobody had reported a reproducible case of Kermit corrupting a
-file.  There have been non-reproducible cases though, almost certainly due
-to corruption of the S or I packet or its ACK, which is why we now have SET
-BLOCK 5.  Even with BLOCK CHECK 5, there is no guarantee that the same thing
-won't happen, it is just far less likely.  Even if we added a 32-bit CRC or
-even 64-bit one, there would still be a small chance it could happen.
-
-7 Jun 2011:
-
-Corrected various #ifdefs (or lack of them) when building C-Kermit with
-different combinations of feature-selection options such as NOCSETS, NOICP,
-NOLOCAL, NOSPL, NOUNICODE, etc.  ckcfns.c ckcmai.c ckcxla.h ckuus2.c
-ckuus4.c ckuus5.c ckuus6.c ckuusr.c, 7 Jun 2011.  After running the script
-that does all these builds (84 of them) I ran it again to make sure that
-none of the changes broke builds that succeeded before the changes were made.
-
-Built OK on Solaris9 ("make solaris9")
-Ditto with Krb5 and OpenSSL 0.9.8q  ("make solaris9g+openssl+shadow+pam+zlib")
-
-Built OK on Mac OS X 10.4.11 ("make macosx").
-Also "make macosx+krb5+openssl.
-
-Built OK on Linux RHEL4 ("make linux").
-Built OK on Linux RHEL4 with OpenSSL 0.9.7a ("make linux+ssl").
-Built OK on Linux RHEL5 ("make linux").
-
-"make linux+ssl" fails on RHEL5 because of DES, even though the target
-tests for the presence or absence of the DES libraries.  In this case the
-libraries are there but they lack the functions des_ecb3_encrypt,
-des_random_seed, and des_set_odd_parity.  The build succeeds as:
-
-  make linux+ssl KFLAGS=-UCK_SSL
-
-Since DES is now considered harmful, Jeff Altman suggests that all OpenSSL
-builds, even for old versions, should omit it ("If you are building with
-openssl and no kerberos or srp, just disable DES.  Disabling DES will impact
-telnet and rlogin but it won't matter if you have no ability to negotiate a
-session key").
-
-From Ian Beckwith, patches for Debian Linux:
- . Change all '-' to '\(hy' in man page (new pedantry): ckuker.nr.
- . Make IKSD authentication (using PAM) ask for a password when an invalid
-   username has been given, to avoid disclosing which account names are valid:
-   ckufio.c, ckuus7.c.
- . Fix spelling errors: ckcftp.c, ckuus2.c, ckuker.nr, ckcpro.w, ckuusr.h.
- . Patch makefile to support install to a staging area with DESTDIR.
- . Some other patches (mainly for typos) were for plain-text documentation
-   files that were generated from Web pages; I updated the web pages.
-
-A big corporate C-Kermit user has an application where a local C-Kermit
-makes a connection to a remote one, uploads some files, and then if the
-server has any new patch files for the local, it sends the patches and
-does a REMOTE HOST command to run the patch program.  This stopped working
-in C-Kermit 6.0 or 7.0 when I put a check to prevent it, because "it makes
-no sense to send REMOTE commands to the local end, because the results are
-sent back to the remote to be displayed on its screen but it has no screen".
-That may be true, but if the user needs to control the local from the
-remote, they should be able to.  I removed the checks.  This doesn't solve
-the problem of where the output goes; ideally it would go to the local
-screen but I don't see any elegant and simple way to make that change.
-However the output redirectors can still be used with the REMOTE command
-so the results can be captured to a remote file, which could then be sent.
-ckuus7.c, 7 Jun 2011.
-
-Changed SET VARIABLE-EVALUATION to SET COMMAND VARIABLE-EVALUATION, but left
-the former version available.  ckuusr.c, 9 Jun 2011.
-
-Documented the SET COMMAND VARIABLE-EVALUATION command, which I added in
-2008.  ck90.html, 9 Jun 2011.
-
-Renamed all old Mac OS X makefile targets to have the prefix "old" to avoid
-confusing them with the current targets, and made macosx10 a synonym for
-macosx, so those who used previous makefiles will get a current target
-without having to know the new name.  makefile, 9 Jun 2011.
-
-Added XMESSAGE, which is to MESSAGE as XECHO is ECHO: prints the text
-without a line terminator, so it can be continued by subsequent [X]MESSAGE
-commands.  ckuusr.[ch], 9 Jun 2011.
-
-Back to "make linux+ssl" on RHEL5...  I took the coward's way out and added
-code to the makefile target to check whether the build worked (somebody let
-me know if there is a better way to check), and if not to give a message
-suggesting they "make clean ; make linux+ssl KFLAGS=-UCK_DES".  makefile,
-9 Jun 2011.
-
-Noticed that \frecurse() would dump core if called with no arguments.
-Fixed in ckuus4.c, 9 Jun 2011.
-
-Added \q() as an alternative to the more verbose \fliteral() for quoting
-strings that contain characters (like \) that would otherwise be significant
-to Kermit.  It's more efficient because it isn't a function call, and 'q'
-is an intuitive letter to mean 'quote'.  It also works better than
-\fliteral() because functions treat commas and braces specially.  ckuus4.c,
-10 Jun 2011.
-
-Built OK on VMS 8.3 on Alpha, no net.  DEC C caught a couple glitches in the
-new code that gcc didn't catch, which I fixed.  ckuus[25].c, 10 Jun 2011.
-
-Built OK on VMS 8.3 on Alpha with Multinet 5.3.  The SSL build failed but
-I'm not going to worry about it.  10 Jun 2011.
-
-Built OK on NetBSD 5.1.  10 Jun 2011.
-
-Tried to resurrect my old "build-all" machine, an IBM Netfinity 3500 from
-1997 with 20-some mountable bootable hard disks with lots of 1990s OS's on
-them.  No dice.  I can see the BIOS but not the hard disks.  The
-configuration is still correct because it tries to boot from the mountable
-hard disk, but it fails (I tried six different ones).
-
-Tried to resurrect my old Siemens Nixdorf RM 200 MIPS machine.  Booted OK,
-headless even, but makes a hellish high-pitched whine, like a dentist drill.
-It's pretty slow too.  "make sinix542" (for SINIX 5.4.2) bombed at link
-time on no rdchk().  Fixed by #including <sys/filio.h>.  ckutio.c, 10 Jun 2011.
-
-Tried to resurrect my old SCO Xenix 2.3.4 machine, also headless.  Amazingly
-it still works; it can't use a monitor but I can Telnet to it.  Had to tweak
-some #ifdefs but I got a no-net version built successfully.  According to my
-notes, it hasn't been possible to build with TCP/IP since C-Kermit 8.0,
-but how many people ever had SCO Xenix 2.3.4 with TCP/IP anyway?  Anyway we
-still have the binaries for C-Kermit 7.0.  ckuus4.c, 10 Jun 2011.
-
-Built OK on AIX 5.3.  Built OK on Solaris 10.  11 Jun 2011.
-
-Tried harder to revive the build-all machine, now it sort of works, but not
-all of the bootable OS's work.  Built C-Kermit 9.0 OK on OpenBSD 3.0.  Built
-OK on QNX 4.25 but had to #ifdef references to IXANY in ckutio.c and ckupty.
-Built OK on NetBSD 1.5.1 (2000).  Tried "make netbsd+ssl" on this one, it's
-OpenSSL 0.9.5a 1 Apr 2000, but it bombs out in ckuath.c, no big deal.
-Another problem in NetBSD 1.5.2 is that even though off_t is 8, CK_OFF_T
-is 4.  Worth noting but not worth fixing unless someone else notices.
-13 Jun 2011.
-
-SuSE 7.0... boots OK but telnet server doesn't work.  Can telnet out but
-it's too flaky, connection drops if I try to transfer a file.
-
-OpenBSD 2.5 [1999] OK.  Red Hat 7.1 OK.  Red Hat 7.1 with OpenSSL 0.9.6
-not OK, same error as with 0.9.5a:
-
-ckuath.c
-In file included from ck_ssl.h:48,
-                 from ckuath.c:225:
-/usr/include/openssl/des.h:77: warning: redefinition of `Block'
-ckuat2.h:86: warning: `Block' previously declared here
-/usr/include/openssl/des.h:83: redefinition of `struct des_ks_struct'
-/usr/include/openssl/des.h:91: warning: redefinition of `Schedule'
-ckuat2.h:90: warning: `Schedule' previously declared here
-
-So it appears that OpenSSL support is broken for pre-0.9.7.  Tried
-building it again with -UCK_SSL (since the errors are originating from
-from des.h)...  But it still failed exactly the same way.  I found
-#includes for des.h in ckuath.c and and ck_ssl.h and #ifdef'd them out,
-but it still fails:
-
-In file included from /usr/include/openssl/evp.h:89,
-                 from /usr/include/openssl/x509.h:67,
-                 from /usr/include/openssl/ssl.h:69,
-                 from ck_ssl.h:51,
-                 from ckuath.c:227:
-/usr/include/openssl/des.h:77: warning: redefinition of `Block'
-ckuat2.h:86: warning: `Block' previously declared here
-/usr/include/openssl/des.h:83: redefinition of `struct des_ks_struct'
-/usr/include/openssl/des.h:91: warning: redefinition of `Schedule'
-ckuat2.h:90: warning: `Schedule' previously declared here
-
-Built OK on Debian 2.1.  13 Jun 2011.
-
-On FreeBSD 4.4, it blows up with:
-ckufio.c: In function vpass':
-ckufio.c:8201: conflicting types for 'initgroups'
-/usr/include/unistd.h:154: previous declaration of 'initgroups'
-ckufio.c:8201: warning: extern declaration of 'initgroups' doesn't match global
-one.  Fixed by defining NODCLINITGROUPS for FreeBSD in ckufio.c. It might not 
-be the right fix, but I don't have a lot of other FreeBSD versions to
-compare with.  Anyway now it builds OK on 4.4, and also on FreeBSD 3.3.
-ckufio.c, 13 Jun 2011.
-
-Tried to build on SCO Open Server 5.0.7 but it fails at link time because
-it can't find rdchk().  But it's supposed to be there!  Come back to this
-later...
-
-Red Hat 6.1             i386   32/64   linux          2332545
-Red Hat 7.1             i386   32/64   linux          2368528
-Red Hat EL4             i386   32/74   linux          2363067
-Red Hat EL5.6           i386    64     linux          2371279
-Solaris9                sparc  32/64   solaris9       2849896
-Solaris9+ssl            sparc  32/64   solaris9       5021764
-Solaris10               sparc  32/64   solaris10      2855776
-QNX                     i386    32     qnx32          2012323 
-NetBSD 1.5.1            i386   32/64   netbsd         2198055
-NetBSD 5.1              i386   32/64   netbsd         2159863
-OpenBSD 2.5             i386   32/64   openbsd        2236036
-Mac OS X 10.6.7         x86_64  64     macosx         2.7M
-Mac OS X 10.4.11        ppc    32/64   macosx         2496304
-Debian 2.1              i386   32/64   linux          2213221
-FreeBSD 4.4             i386   32/64   freebsd        2291333
-FreeBSD 3.3             i386   32/64   freebsd        2147370
-SINIX 5.42              mips    32     sinix542       3319325 (1995)
-SCO Unixware 2.1.3      i386    32     uw213          2242176
-SCO OSR6.0.0            i386   32/64   sco_osr600     2368300
-
-More builds, 14 June 2011:
-
-VMS 6.2                 alpha   32     make mn        2556928 No TCP/IP
-VMS 6.2                 alpha   32     make m         3112960 UCX 4.0
-Solaris 11              i386   32/64   solaris11      2823860
-Solaris 11              i386   32/64   solaris11+ssl  2993660 OpenSSL 0.9.8l
-NetBSD 5.1              i386   32/64   netbsd+krb5    2307855 Kerberos 5
-Linux Slackware 12.1.0  i386   32/65   linux          2175754
-Linux Fedora 14         i386   32/64   linux          2256514
-Linux Fedora 14         i386   32/64   linux+ssl      ....... OpenSSL 1.0.0d
-Linux Fedora 14         i386   32/64   linux+krb      2449614 (*)
-
-(*) make linux+krb5 "LIBS=$LIBS /lib/libk5crypto.so.3 /lib/libcom_err.so.2"
-
-Noticed that netbsd+ssl build on NetBSD 5.1 said "NetBSD 1.5" in its banner.
-Fixed by replacing the old hardwired target with the new "subroutinized"
-target a'la linux+ssl and adapting it to NetBSD.  makefile, 15 Jun 2011.
-
-Same deal for Kerberos 5, make a new netbsd+krb5 target and it builds ok,
-at least once one figures out where the Kerberos headers and libs are.
-makefile, 15 Jun 2011.
-
-Same deal for the netbsdnc target, now it simply defined NOCURSES and
-chains to the main netbsd target.  makefile, 15 Jun 2011.
-
-Tried to build with Kerberos 5 on Solaris, fails because the DES library
-no longer exists.  This one is beyond me, sorry.
-
-Made new targets for MirBSD, mirbsd and mirbsd+ssl, makefile 15 Jun 2011.
-
-In OpenSUSE 11.2 with OpenSSL 0.9.8r we bomb on undefined references from
-various DES library routines.  Builds OK without DES.
-
-Various linux+krb5 builds fail because can't find -lgssapi_krb5
-
-SSL builds with OpenSSL < 0.9.7 fail even though there is code to support
-the older SSL.
-
-Fixed some printf %ld vs int instances in the sizeofs section of SHOW FEATURES.
-ckuus5.c, 15 Jun 2011.
-
-Fixed the new linux+ssl target to actually use the SSLINC and SSLLIBS
-definitions, oops.  makefile, 15 Jun 2011.
-
-15 June 2011 builds (Beta.01):
-
-AIX 5.3                 ppc    32/64   aix+ssl        3283846 OpenSSL 0.9.8m
-NetBSD 5.1              i386   32/64   netbsd         2159863
-NetBSD 5.1              i386   32/64   netbsd+ssl     2350274 OpenSSL 0.9.9-dev
-NetBSD 5.1              i386   32/64   netbsd+krb5    2349627 MIT Krb5 1.6.3
-FreeBSD 8.2             i386   32/64   freebsd        2298414
-FreeBSD 8.2             i386   32/64   freebsd+ssl    2448961 OpenSSL 0.9.8q
-OpenBSD 4.7             i386   32/64   openbsd        2266132
-OpenBSD 4.7             i386   32/64   openbsd+ssl    2409263 OpenSSL 0.9.8k
-MirBSD 10               i386   32/64   mirbsd         2216601
-MirBSD 10               i386   32/64   mirbsd+ssl     2358318 OpenSSL 0.9.8r
-OpenSuse 11.2           x86_64  64     linux          2348468
-OpenSuse 11.2           x86_64  64     linux+ssl (*)  2546540 OpenSSL 0.9.8r
-RHEL 5.6                ia64    64     linux          4390687
-RHEL 5.6                ia64    64     linux+ssl (*)  4775007 OpenSSL 0.9.8e
-Ubuntu 9.10             i386   32/64   linux          2275523
-Ubuntu 9.10             i386   32/64   linux+ssl      2466708 OpenSSL 0.9.8r
-Gentoo 1.12.13          ppc    32/64   linux          2386597
-Gentoo 1.12.13          ppc64   64     linux          2749015
-Gentoo 1.12.13          ppc64   64     linux+ssl      3002150 OpenSSL 0.9.8r
-Gentoo 1.12.13          sparc  32/64   linux          2478382
-Gentoo 1.12.13          sparc  32/64   linux+ssl      2690499 OpenSSL 0.9.8r
-Solaris 9               sparc  32/64   solaris9       2849896
-Solaris 10              i386   32/64   solaris10      2837620
-IRIX 6.5                R10000 32/64   irix65         2869704
-
-* and KFLAGS=-UCK_DES
-
-Tried building on NetBSD 5.1 with Heimdal Kerberos using:
-
-make netbsd+krb5 \
- "KFLAGS=-DHEIMDAL" \
- "K5INC=-I/usr/include" \
- "K5LIB=-L/usr/lib"
-
-It found all its headers OK, but it blew up in ckuath.c.  Small wonder,
-ckccfg.html says:
-
-HEIMDAL
-    Should be defined if Kerberos V support is provided by HEIMDAL. Support
-    for this option is not complete in C-Kermit 8.0. Anyone interested in
-    working on this should contact kermit-support. 
-
-'krb5-config --version' gives the MIT Kerberos 5 version number.
-
-Make a new netbsd+krb5+ssl target based on the combination of the new
-netbsd+ssl and netbsd+krb5 targets.  There were lots of warnings in the
-compilation but no errors, but it produced an executable that starts and
-does normal things but I have no idea if the SSL or Kerberos functions work.
-makefile, 16 Jun 2011.
-
-Changed the cu-solaris9-krb5 target to test for the presence of DES because
-DES isn't there, to see if this would allow a Kerberos build to proceed.
-And it worked, amazing.  At least the build completed, I have no way to test
-the Kerberos part.  makefile, 16 Jun 2011.
-
-Updated the solaris9+ssl target to do the DES testing.  makefile, 16 Jun 2011.
-
-Updated cu-solaris+krb5 target to test whether the GSSAPI library is called
-libgassapi or libgassapi_krb5.  makefile, 16 Jun 2011.
-
-Added lots of tests to the Linux Kerberos 5 entries, linux+krb5 and
-linux+krb5+ssl, because some have libk5crypto and some don't; some have
-libcom_err and some don't; and some have libgssapi_krb5 (e.g. RHEL5,
-OpenSuse 11.2) whereas others have libgssapi (Gentoo).
-
-16 June 2011 builds (Beta.01):
-
-NetBSD 5.1 i386   32/64  netbsd+krb5+ssl   2451757 OpenSSL 0.9.9 MIT Krb5 1.6.3
-Solaris 9  sparc  32/64  solaris9+krb5     2543036 MIT Kerberos 5 1.7.1
-Solaris 9  sparc  32/64  solaris9+ssl      5021544 OpenSSL 0.9.8q (gcc)
-Gentoo...  ppc    32/64  linux             2386597
-Gentoo...  ppc    32/64  linux+ssl         2593561 OpenSSL 0.9.8r 
-Gentoo...  ppc64   64    linux             2749015
-Gentoo...  ppc64   64    linux+ssl         3002150 OpenSSL 0.9.8r 
-RHEL5      x86_64  64    linux+krb5 (*)    2563878 MIT Kerberos 5 1.6.1
-RHEL5      x86_64  64    linux+krb5+ssl(*) 2563878 MIT Kerberos 5 1.6.1
-Fedora 14  i386   32/64  linux+krb5+ssl    2539891 MIT Krb5 + OpenSSL 0.9.8r
-
-* KFLAGS=-UCK_DES
-
---- C-Kermit 9.0.299 Beta.01 ---
-
-sizeof() can return a long or an int, so neither printf("%d",sizeof(blah));
-or printf("%ld",sizeof(blah)); can be used everywhere.  Changed the
-"sizeofs" section of SHOW FEATURES in the dumbest (and therefore most
-portable) way to squelch the warnings.  ckuus5.c, 17 Jun 2011.
-
-From John Dunlap: "Watching the server screen led me to offer a cosmetic
-patch for ckuusx.c.  I noticed that the server screen said it was
-"RESENDING" when it really wasn't.  The attached patch emits blanks to
-insure that old labels are completely erased."  ckuusx.c, 17 Jun 2011.
-
-Nelson Beebe found two places where I had SSLLIBS in the makefile instead of
-SSLLIB.  makefile, 18 Jun 2011.
-
-More important he knew how to force gcc to load the right header files for
-OpenSSL 1.0.0d (by using '-isystem' rather than '-I').  Previously it was
-using the 0.9.8r header files but linking with the 1.0.0d libraries.  This
-is not in the sources or makefile; it's done when giving the 'make' command:
-
-  export PATH=/usr/bin:$PATH
-  export SSLINC=-isystem/usr/include
-  export "SSLLIB=-L/usr/lib -Wl,-rpath,/usr/lib"
-  make linux+ssl
-
-Folded the previous linux+openssl+zlib+shadow+pam and linux+openssl+shadow
-targets into linux+ssl.  Checked the linuxso (scripting only) target, builds
-OK, 600K.  Made new subroutinized linux+krb5+krb4 target but can't find
-anyplace to test it.   Made new subroutinized linux+shadow+pam target, works
-fine on RHEL4.  Revised comments and lists again.  makefile, 18 Jun 2011.
-
-For the pluggable-disk OS's that boot OK but lack a working network, I
-rigged up a serial connection using a DB9-FF null modem cable, and then a
-DB9-MF modem cable to make it reach.  I don't see any modem signals on
-either end, but the data goes through OK.  COM1 on the desktop PC,
-/dev/ttyS1 or whatever on Lab.  Since there are no modem signals, can't use
-RTS/CTS.  At 57600bps with Xon/Xoff, 500-byte packets and sliding windows,
-transfers work OK at about 5000cps using 5 window slots; takes 8 minutes to
-transfer the gzipped C-Kermit tarball.  Kermit to the rescue.  19 Jun 2011.
-
-Transferred the tarball over serial ports to SCO OSR5.0.5 at 38.4Kbps, the
-highest speed supported, 12 minutes, no errors, 3300cps.  Unpack, make
-sco32v505udk, OK.  Also built the TCP/IP version and it almost made an
-outbound connection, but only once (not a Kermit program but something with
-the TCP/IP stack).  19 Jun 2011.
-
-Ditto for Solaris 2.6/i386, except 57.6Kbps, 4K-byte packets, no problem.
-Solaris 8/i386, ditto.  19 Jun 2011.
-
-SCO OpenServer 5.0.5  i386   32   sco32v505udk     1940964  No TCP/IP
-SCO OpenServer 5.0.5  i386   32   sco32v505udknet  2314668  With TCP/IP
-Sun Solaris 2.6       i386   32   solaris26g       4661368
-Sun Solaris 8         i386   32   solaris8g        4675432
-
-When using compact substring notation, \s(xx[4]) returns the whole string
-xx starting at position 4, but \s(xx[4:]) returns an empty string.  Fixed
-the latter to be like the former.  ckuus5.c, 20 Jun 2010.
-
-Really it would have been nicer if \s(xx[4]) returned a single character,
-the 4th character of xx, but it's too late now.  Added another "separator"
-character '.' (period) for that: \s(xx[4.]) is the 4th character of xx.
-ckuus4.c, 20 Jun 2010.
-
-Back to SCO OSR5.0.7... This failed before because 'rdchk' came up unknown
-at link time, unlike all previous OSR5's, that used rdchk() in place of the
-FIONREAD ioctl.  Added #ifdefs to make a special case for 5.0.7.  I'm not
-sure this is the best way, but this is the minimal change to get it to work.
-If anybody cares, maybe the same can be done for previous OSR5 releases.
-ckutio.c, 20 Jun 2010 (search for SCO_OSR507).
-
-SCO OpenServer 5.0.7  i386   32   sco32v507        1895724  No TCP/IP
-SCO OpenServer 5.0.7  i386   32   sco32v507net     2246792  With TCP/IP
-
-Checked current code on RHEL4, found that my GSSAPI-lib finding makefile
-target didn't look in enough places; added some more.  makefile, 21 Jun 2011.
-
-Got reports back on HPUX from Peter Eichhorn, almost all good on HP-UX 7, 8,
-9, 10, and 11.  21-22 Jun 2011.
-
-Got access to Debian 5.0 and 7-to-be ("Wheezy/Sid").  Regular 'make linux' is
-OK in Debian 5, but in 7 can't find crypt, res_search, or dn_expand; had
-to add more library search clauses to 'make linux'.  makefile, 21 Jun 2011.
-
-In Debian 7.0, libk5crypto could not be found without adding another clause
-to 'make linux+krb5'.  That done, the SSL build (1.0.0d) was OK, as well as
-the krb5+ssl one.  makefile, 21 Jun 2011.
-
-I found a Linux box that had both Kerberos 4 and 5 installed and tried 'make
-linux+krb5+krb4', which failed because of missing DES functions.  Tried
-'make linux+krb5+krb4 KFLAGS=-UCK_DES', but that fails too, even though it
-doesn't fail for Kerberos 5 alone, so probably some Krb4 code is making
-unguarded calls to the DES routines.  What is really needed is a way to
-completely strip all DES references from any given build, code and makefile,
-a big deal.  21 Jun 2011.
-
-Fixed some typos in COPYING.TXT (noticed by Ian Beckwith).  24 Jun 2011.
-
-Got access to perhaps the last living 4.3BSD VAX system.  It doesn't have
-SEEK_CUR so I had to #ifdef out the \fpicture() function.  Aside from that,
-no problems.  ckuus4.c, 24 Jun 2011.
-
-I had been wanting the S-Expression (ROUND x) to allow a second argument n,
-which, if given, tells where the rounding should occur.  If n is positive,
-the number is rounded to n decimal places.  If zero, it is rounded to the
-nearest integet.  If positive, the number is rounded to the nearest power of
-10; e.g. -2 means "to the nearest hundred".  If ROUND is used as before,
-with one argument, it works as before.  ckclib.c, ckuus3.c, 25 Jun 2011.
-
-From Arthur Marsh, a few more directories to test for libresolv in Linux.
-makefile, 26 Jun 2011.
-
-From Martin Vorlaender, a fix for the VMS file-transfer display and
-statistics, a place where a file length wasn't being cast to CK_OFF_T
-in zchki().  ckvfio.c, 28 Jun 2011.
-
-Updated version to 9.0.300 and removed the Beta designation.
-ckcmai.c, makefile, 28 Jun 2011.
-
-Removed solaris9_64 target from makefile.  It builds but it doesn't work
-at all.  30 Jun 2011.
-
---- C-Kermit 9.0.300 ---
-
----------------------------------
-***************************
diff --git a/ckc301.txt b/ckc301.txt
new file mode 100644 (file)
index 0000000..41b7385
--- /dev/null
@@ -0,0 +1,7841 @@
+C-KERMIT 9.0 CHANGE LOG (Changes since 8.0.207 / K95 2.1.3 January 2003)
+
+  Chronological order.
+  Go to the bottom to find the newest edits.
+
+  F. da Cruz, The Kermit Project, Columbia University, NYC.
+  Last update: 28 June 2011.
+
+FTP USER, FTP ACCOUNT, plus the various prompts and switches for FTP username,
+password, and account all neglected to strip quotes, and in most cases quotes
+are necessary to specify a username that contains spaces.  ckcftp.c,
+15 Jan 2003.
+
+FTP MPUT f1 f2 f3... gets a parse error if any of the fn's do not match an
+existing file.  This is bad for scripts.  In doftpput(), cmfdb() looks for
+keywords (switches) or CMIFI.  When it hits CMIFI, it exits from the initial
+parse loop and then does additional cmifi()s in a loop until done.  The most
+obvious fix is to parse each field with cmfdb(CMIFI,CMFLD), i.e. fall back to
+CMFLD if CMIFI doesn't match anything.  Then if CMFLD was used, we don't add
+the filespec to the list.  This is a rather big change but it seems to work.
+No error messages or failures happen for non-matching fields, but an error
+message is printed (and the MPUT command fails) if none of the fields match
+any files.  This fix got in too late for 2.1.3; workaround: use C-Shell
+like wildcard list (ftp mput "{*.abc,foo.*}").  ckcftp.c, 16 Jan 2003.
+
+GREP did not pass its pattern through the expander, thus variables could
+not be used for patterns.  This must have been an oversight -- I can't find
+anything in my notes about it.  Fixed in dogrep(): ckuus6.c, 24 Jan 2003.
+
+New makefile target for HP-UX 11.xx with OpenSSL from Tapani Tarvainen.
+makefile, 31 Jan 2003.
+
+From Jeff:
+ . Avoid core dump when dereferencing tnc_get_signature(): ckuus4.c.
+ . Bump version numbers to 8.0.208, 2.1.4: ckcmai.c.
+
+Added /NOLOGIN to FTP [OPEN].  ckcftp.c, 10 Feb 2003.
+
+Don't dump core if FTP DEBUG is ON and FTP OPEN does not include a service.
+openftp(): ckcftp.c, 10 Feb 2003.
+
+HELP PATTERN text incorrectly identified commands and functions with
+floating and anchored patterns.  The corrected lists are:
+Floating: GREP, TYPE /MATCH:, /EXCEPT: patterns, \farraylook(),
+Anchored: IF MATCH, file-matching wildcards, \fsearch(), \frsearch()
+ckuus2.c, 10 Feb 2003.     
+
+INPUT n \fpattern(xxx) did not work for case-independent comparisons.
+Fixed in doinput(): ckuus4.c, 10 Feb 2003.
+
+It seems \fpattern() didn't work with MINPUT at all.  There was no code to
+handle \fpattern() in the MINPUT parse loop, so it never worked.  The code
+had to be totally rewritten to use cmfld() in a loop, rather than cmtxt()
+and then cksplit().  Furthermore, whenever any of the fields was an
+\fjoin(), this had to be split.  ckuusr.c, 10 Feb 2003.
+
+Macro replacement via \m() and \fdefinition() does not work as advertised
+(i.e. case sensitively) for associative array elements; e.g. \m(xxx<abc>) is
+treated the same as \m(xxx<ABC>), contrary to section 7.10.10 of the C-Kermit
+7.0 update notes, and to the fact that the two really do exist separately.
+Fixed by adding a static function isaarray(s) which succeeds if s is an
+associative array reference and fails otherwise, and then having \m()
+and \fdef() call mxxlook() (case-sensitive lookup) if isaarray(), otherwise
+(as before) mxlook()).  ckuus4.c, 11 Feb 2003.
+
+Fixed FTP OPEN to allow the /USER switch to override SET FTP AUTOLOGIN OFF,
+just as /NOLOGIN overrides SET FTP AUTOLOGIN ON.  ckcftp.c, 11 Feb 2003.
+
+In K95, "set key \1234 \27H" (any SET KEY command in which the first char of
+the definition was backslash, and the ONLY character after the backslash
+quantity was an uppercase letter, that letter would be lowercased).  Diagnosis:
+xlookup() poking its argument (see notes from July 2000).  Jeff sent a fix.
+ckucmd.c, 15 Feb 2003.
+
+Ran my S-Expression torture test to make sure Sexps still worked.  They do,
+except the bitwise & and | operators were broken, e.g. (& 7 2) and (| 1 2 4)
+get "Invalid operand" errors.  Jeff's code had added an early failure return
+from the lookup loop when when a single-byte keyword matched a keyword that
+started with the same byte but was more than one byte long.  So "&" would hit
+"&&" and fail instead of continuing its search (xlookup tables aren't sorted
+so there can be no early return).  Fixed in xlookup(): ckucmd.c, 16 Feb 2003.
+
+Got rid of "krbmit" target from makefile.  It's still there, but we don't
+use it any more.  All secure targets now use "xermit", and produce a binary
+called wermit, just like the regular ones do (except the old ckucon.c ones).
+Non-secure targets, since they don't define any of the security symbols,
+wind up compiling and linking to (mostly) empty security modules.  makefile,
+15 Feb 2003.
+
+Added \fcvtdate(xxx,3) to format its result in MDTM format (yyyymmddhhmmss,
+all numeric, no spaces or punctuation).  Of course these numeric strings
+are too big to be 32-bit numbers and are useless for arithmetic, but they're
+useful for lexical comparison, etc.  ckuus[24].c, 16 Feb 2003.
+
+The following FTP commands did not set FAILURE when they failed: RMDIR,
+CD, CDUP, Fixed in the corresponding doftpblah() routines.  ckcftp.c,
+16 Feb 2003.
+
+RENAME would sometimes not print an error message when it failed, e.g. in K95
+when the destination file already existed.  ckuus6.c, 17 Feb 2003.
+
+Fixed COPY error messages, which did not come out in standard format when
+/LIST was not included.  ckuus6.c, 17 Feb 2003.
+
+Fixed #ifdefs in ck_crp.c to allow nonsecure builds on old platforms like
+System V/68 R3.  19 Feb 2003.
+
+Similar treatment for ck_ssl.c.  20 Feb 2003.
+
+From Jeff, 21 Feb 2003:
+ . AIX53 and AIX52 symbols for ckcdeb.h, makefile.
+ . New gcc targets for various AIX 4.x/5.x versions: makefile.
+ . Copyright date updates: ck_crp.c, ck_ssl.c.
+ . ENABLE/DISABLE QUERY broken because keyword table out of order: ckuusr.c.
+ . Fixed the use of HTTP proxies for HTTP [RE]OPEN for Unix: ckcnet.c.
+
+Also for K95 only: Allow file transfer when K95 is invoked on the remote end
+of a connection to a Pragma Systems Terminal Server connection; automatically
+SET EXIT HANGUP OFF when invoked with open port handle ("k95 -l nnnn").
+
+"cd a*" failed even when "a*" matched only one directory.  Fixed in cmifi():
+ckucmd.c, 21 Feb 2003.
+
+In the Unix version, replace "extern int errno;" with "#include <errno.h>"
+if __GLIBC__ is defined, since glibc now defines a thread-specific errno.
+ckcdeb.h, 26 Feb 2003.
+
+Added #ifdefs to skip compilation of ckuath.c in nonsecure builds.  Tested
+by building both secure and regular versions in Linux.  ckuath.c, 26 Feb 2003.
+
+Ran the build-in-84-different-configurations script on Linux to make sure it
+still builds with all different combinations of feature selection options.
+All OK.  26 Feb 2003.
+
+Built on VMS.  Needed to add a prototype for mxxlook*() to ckuusr.h; built
+OK otherwise.  26 Feb 2003.
+
+From Jeff: More #ifdef shuffling for nonsecure builds: ckuath.c, ck_ssl.c,
+27 Feb 2003.
+
+Added code to ensure \v(download) ends in a directory separator in Unix,
+Windows, and OS/2.  ckuus7.c, 27 Feb 2003.
+
+Added code to K95 zfnqfp() to tack on directory separator when returning
+a directory name.  ckofio.c, 27 Feb 2003.
+
+Somehow an old copy of ckuath.c popped to replace the new one.  Put the new
+one back.  28 Feb 2003.
+
+From Jeff: Fix typo in my K95 zfnqfp() code from yesterday; fixes for handling
+UNCs uniformly, no matter which way their slashes are leaning.  ckofio.c,
+28 Feb 2003.
+
+At Jeff Mezei's suggestion, separate text and binary mode open sequences
+for VMS session log.  ckvfio.c, 28 Feb 2003.
+
+Added freebsd48 target for FreeBSD 4.8.  makefile, 1 Mar 2003.
+
+Changed Mac OS X entries to include -DUSE_STRERROR.  makefile, 2 Mar 2003.
+
+Fixed GETOK /GUI to evaluate its text argument.  ckuus6.c, 3 Mar 2003.
+
+Jeff fixed the K95 Dialer QUICK dialog to (a) allow templates, and (b) have
+a Save-As option.  3 Mar 2003.
+
+Jeff fixed a problem with the Xmodem-CRC checksum being crunched whenever
+there was a retransmission.  7 Mar 2003.
+
+Added target/banner for Tru64 5.1B.  makefile, ckuver.h, 5 Mar 2003.
+
+In Unix, the zcopy() routine (used by the COPY command) reset the user's umask
+to 0 for the remainder of the Kermit process lifetime.  The bug was in
+ckufio.c 8.0.194, 24 Oct 2002, and is fixed in ckufio.c 8.0.195, 6 Mar 2003.
+Of course this happened after building 155 C-Kermit 8.0.208 binaries.  (But
+before officially releasing 8.0.208.)
+
+In the VMS version, changed:
+
+        while ((n--) && xx_inc(2) > -1) ;
+to:
+        while ((n--) && xx_inc(2) >= 0) ;
+
+to suppress the "...is being compared with a relational operator to a constant
+whose value is not greater than zero" warning.  ckvtio.c, 7 Mar 2002.
+
+Added a debug call to dologend in hopes of catching overzealous Locus
+switching, which seems to happen only in K95.  ckuus3.c, 7 Mar 2002.
+
+Rebuilt binaries for some of the more current Unix releases: AIX 4.3.3-5.1,
+Solaris 7-9 , Red Hat 7.0-8.0, Slackware 8.1, Freebsd 4.7-4.8, NetBSD 1.6,
+OpenBSD 3.2, Unixware 7.1.3, Open Unix 8, OSR5.0.6a, etc.  A Unix binary with
+COPY umask fix shows a 6 Mar 2003 date for "UNIX File support" in SHOW
+VERSIONS; a binary without the fix shows 24 Oct 2002.
+
+C-Kermit 8.0.208 dated 14 March 2003 released on 10 March 2003.
+
+---8.0.208---
+
+From Jeff 13 Mar 2003:
+ . Updated SSL module allows importation of tickets from host.
+ . freebsd50+openssl target: makefile.
+ . FTP PUT /PERMISSIONS error message for K95: ckcftp.c.
+Fixed MINPUT to strip quotes or braces from around targets (this was broken
+on Feb 10th).  Thanks to Jason Heskett for discovering and reporting this
+(killer) bug.  ckuusr.c, 14 Mar 2003.
+
+Changed version number to 209 Dev.00.  ckcmai.c, 14 Mar 2003.
+
+While debugging the alphapage script, I found that the command "minput 8 \6\13
+\21\13 \13\27\4\13 \30\13" gets "?Not confirmed" in 8.0.208 and 8.0.209, but
+not in 206 and earlier.  This problem too was introduced on Feb 10th by
+changing MINPUT parsing from cmtxt() followed by cksplit() to cmfld() in a
+loop.  cmfld() uses setatm() to return its result and of course setatm()
+breaks on \13.  Changing setatm() not to do this would break everything else.
+But cmfld() has no arguments that let us tell it to do anything different in
+this case.  Changing the API would be a disaster.  The only solution is to add
+an "MINPUT ACTIVE" (minputactive) global variable that tells cmfld() to tell
+setatm() not to break on CR.  Now MINPUT with braced targets containing CR
+and/or LF works in 209, 206, and 201 (but not 208).  ckucmd.c, ckuusr.c,
+ckuus5.c, 15 Mar 2003.
+
+MINPUT n \fjoin(&a) works OK if all the members of \&a[] are text strings, but
+if they are strings of control chars (as above), they don't get separated by
+the spaces.  For example in:
+
+  dcl \&a[] = "\4\5" "\6\7" xxx
+  minput 10 \fjoin(&a)
+
+MINPUT gets two targets: "aaa" and "\4\5 \6\7 xxx".  The bug was in the
+cksplit() call in the \fjoin() case of MINPUT: it needed to specify an
+include set consisting of all the control characters except NUL.  ckuusr.c,
+16 Mar 2003.
+
+But there's still a problem:
+
+  dcl \&a[] = "\4\5\13\10" "\6\7" "xxx"
+
+creates an array whose first member is "^D^E (one doublequote included).  But
+if braces are used instead, there's no problem.  Same deal as MINPUT: cmfld()
+breaks on CR or LF, thus the end quote is lost.  If I set minputactive for
+DECLARE initializers too, that fixes it.  Is there any reason not to do this?
+Can't think of any (famous last words)...  ckuusr.c, 16 Mar 2003.
+
+Since it has multiple applications, changed the flag's name from minputactive
+to keepallchars.  ckucmd.c, ckuus[r5].c, 16 Mar 2003.
+
+\v(exedir) wasn't being set correctly (it included the program name as well
+as the directory).  Fixed in getexedir(): ckuus4.c, 16 Mar 2003.
+
+SET CARRIER-WATCH <Esc> "auto matic" (spurious space in supplied keyword).
+Cosmetic only; it still worked.  Fixed in setdcd(): ckuus3.c, 16 Mar 2003.
+
+"directory a b c" listed too many files -- all files whose names END WITH a,
+b, or c, rather than the files whose names WERE a, b, or c.  Diagnosis: The
+filespec is changed into a pattern: {a,b,c}, which is the correct form.  It is
+passed to nzxpand(), which goes through the directory getting filenames and
+sending each one to ckmatch() with the given pattern.  ckmatch() receives the
+correct pattern but then prepends a "*" -- that's not right.  It's not just
+in filename matching either.  The following succeeds when it shouldn't:
+
+  if match xxxxc {{a,b,c}} <command>
+
+Changing ckmatch() to not prepend the "*" to each segment fixes the command
+above but breaks lots of others.  Running through the "match" torture-test
+script shows the problem occurs only when the {a,b,c} list is the entire
+pattern, and not embedded within a larger pattern.  Testing for this case
+fixed the problem.  ckmatch(): ckclib.c, 16 Mar 2003.
+
+Fixed FTP MODTIME to not print anything if QUIET ON.  ckcftp.c, 16 Mar 2003.
+
+Picked up a new ckuath.c from Jeff, not sure what the changes are. 16 Mar 2003.
+
+Did a few regular and secure builds to make sure I didn't wreck anything.
+
+Changed version number to 209 (final).  ckcmai.c, 16 Mar 2003.
+
+Jason Heskett found another bug: if you define a macro FOO inside the
+definition of another macro BAR, and FOO's definition includes an odd number
+of doublequotes (such as 1), FOO's definition absorbs the rest of BAR's
+definition.  Example:
+
+  def TEST {
+    .foo = {X"}
+    sho mac foo
+  }
+  do test
+  sho mac foo
+
+Results in:
+
+  foo = {X"}, sho mac foo
+
+Diagnosis: the TEST definition becomes:
+
+  def TEST .foo = {X"}, sho mac foo
+
+and the macro reader is erroneously treating the doublequote as an open
+quote, and then automatically closes the quote at the end of the definition.
+The error is that a doublequote should be significant only at the beginning of
+a field.  But the macro reader isn't a command parser; it doesn't know what
+a field is -- it's just looking for commas and skipping over quoted ones.
+First we have to fix an oversight: SET COMMAND DOUBLEQUOTING OFF should have
+worked here, but it wasn't tested in this case.  Fixed in getncm(): ckuus5.c,
+17 Mar 2003.
+
+There are only certain cases where it makes sense to treat doublequotes as
+signicant:
+
+ . An open quote must be at the beginning or preceded by a space.
+ . A close quote is only at the end or else followed by a space.
+
+This too was fixed in getncm(): ckuus5.c, 17 Mar 2003.
+
+A fix from Jeff SSL/TLS FTP data decoding.  ckcftp.c, 18 Mar 2003.
+
+Tried building C-Kermit on a Cray Y-MP with UNICOS 9.0.  "int suspend",
+declared in ckcmai.c and used in many modules, conflicts with:
+
+  unistd.h:extern int suspend __((int _Category, int _Id));
+
+The "=Dsuspend=xsuspend" trick doesn't work for this; there is no way around
+the conflict other than to rename the variable: ckcmai.c, ckutio.c,
+ckuus[35xy].c.  26 Mar 2003.  VMS and K95 not affected.
+
+OK that gets us past ckcmai.c...  Then in ckutio.c I had to add a new #ifdef
+around the LFDEVNO setting, because the Cray didn't have mkdev.h.  Could not
+find a Cray-specific manifest symbol, so I made a new makefile target (cray9)
+that sets this symbol.  Having done this I have no idea what kind of lockfile
+would be created, but I also doubt if anybody dials out from a Cray.  The
+binary should run a C90, J90, or Y-MP.  makefile, 26 Mar 2003.
+
+Added a target for SCO OSR5.0.7.  makefile, ckuver.h, 30 Mar 2003.
+
+Changed since 208:
+makefile ckuver.h ckcmai.c ckclib.c ckcftp.c ckucmd.c ckuus*.c ckutio.c.
+
+---8.0.209---
+
+From Mark Sapiro, a fix for the March 17th doubleqote fix, getncm(): ckuus5.c,
+4 Apr 2003.
+
+From Jeff, 29 Apr 2003:
+ . Corrected target for HP-UX 11.00 + OpenSSL: makefile, 
+ . Do not allow WILL AUTH before WONT START_TLS: ckctel.h ckctel.c
+ . Add hooks for SFTP and SET/SHOW SFTP: ckcdeb.h ckuusr.h ckuusr.c ckuus3.c
+ . Add SKERMIT ckuusr.h ckuusr.c
+ . Add ADM-5 terminal emulation: ckuus7.c, ckuus5.c
+ . Uncomment and update HELP SET SSH V2 AUTO-REKEY: ckuus2.c
+ . Enable IF TERMINAL-MACRO and IF STARTED-FROM-DIALER for C-Kermit: ckuus6.c
+ . Fix conflicting NOSCROLL keyword definition: ckuusr.h
+ . Set ttname when I_AM_SSH: ckuusy.c
+ . Add extended arg parsing for SSH, Rlogin, Telnet: ckuusy.c, ckuus4.c
+ . Security updates: ckuath.c, ck_ssl.c
+ . Change K95 version number to 2.2.0: ckcmai.c
+ . Save K95 term i/o state before executing keyboard macro: ckuus4.c
+ . Add tests for SSH Subsystem active during INPUT/OUTPUT/CONNECT: ckuus[45].c
+ . Enable K95 SET SSH V2 AUTO-REKEY: ckuus3.c
+
+SFTP and SET SFTP subcommands are implemented up to the case statements.
+
+Files of mine that Jeff hadn't picked up:
+  ckuver.h ckcftp.c ckutio.c ckuusx.c (just minor changes for last build-all)
+
+On 4 Jan 2003, SET RECEIVE MOVE-TO was changed to convert is argument to an
+absolute path, which made it impossible to specify a relative path, then
+move to different directories and have it apply relatively to each directory.
+Changed this as follows:
+
+ . Parser uses cmtxt() rather than cmdir() so it won't fail at parse time.
+ . If path is absolute, we fail at parse time if directory doesn't exist.
+ . In reof() we run the the path through xxstring (again, in case deferred
+   evaluation of variables is desired) and then, if not null, use it.
+ . If the directory doesn't exist, rename() fails and reof() returns -4,
+   resulting in a protocol error (this is not a change).  We do NOT create
+   the directory on the fly. 
+
+I also fixed SET SEND/RECEIVE RENAME-TO to parse with cmtxt() rather than
+cmdir(), since it's parsing a text template, not a directory name, e.g.
+"set receive rename-to file-\v(time)-v(date)-\v(pid)".  This was totally
+broken, since when I don't know.  We don't call xxstring() in this parse, so
+evaluation is always deferred -- I'd better not change this.  ckuus7.c,
+ckcfns.c, 1 May 2003.
+
+From Jeff, Sat May  3 14:15:23 2003:
+ . Pick up the right isascii definition for K95: ckctel.c
+ . malloc...  ckuath.c (new safe malloc routines for K95)
+ . Add author listing: ckuus5.c
+ . SSH Heartbeat support (K95 only): ckuus[23].c
+ . Prescan --height and --width to avoid window resizing at startup: ckuusy.c
+ . Add checks for fatal() or doexit() called from sysinit(): ckuusx.c
+ . Move some K95-specific definitions to ckoker.h: ckcdeb.h
+ . Add support for ON_CD macro in zchdir(): ckufio.c
+ . Add a command to let FTP client authenticate with SSLv2: ckcftp.c
+ . Fix parsing of FTP file facts like "UNIX.mode": ckcftp.c
+
+ON_CD will need some explaining (to be done).  It's implemented for Unix,
+VMS, WIndows, and OS/2.
+
+The FTP file facts fix came from first exposure to the new OpenBSD FTP
+server: ftp://ftp7.usa.openbsd.org/pub/os/OpenBSD/3.3/i386/
+The period in "UNIX.mode" caused an erroneous word break, adding junk to
+the filename.
+
+About the malloc changes, Jeff says "K95 is not behaving well in low memory
+environments.  I'm not sure that C-Kermit does much better.  The program does
+not crash but it certainly does not behave the way the user expects it to.
+I'm beginning to think that any malloc() error should be treated as fatal."
+
+Not visible in these changes because it's in K95-specific modules: Jeff made
+SET ATTRIBUTES OFF and SET ATTRIBUTES DATE OFF apply to XYZMODEM transfers.
+
+From Jeff, 11 May 2003:
+ . Add support for SSH Keepalive to relevant SET command (K95): ckuus3.c
+ . Reduce max overlapped i/o requests from 30 to 7 (K95): ckuus7.c
+ . Don't call sysinit() in fatal(): ckuusx.c.
+ . Some new conditionalizations for SSL module: ck_ssl.c
+
+The doublequote-parsing fixes from March and April broke the SWITCH statement,
+which is implemented by internally defining, then executing, a macro.  If I
+drop back to the old dumb handling of doublequotes, everything is fixed except
+the problem of March 17th.  But can we really expect getncm() to pre-guess
+what the parser is going to do?  getncm()'s only job is to find command
+boundaries, which are represented by commas.  Commas, however, is needed IN
+commands too.  We take a comma literally if it is quoted with \, or is inside
+a matched pair of braces, parens, or doublequotes.  It is not unreasonable to
+require a doublequote in a macro definition to be prefixed by \ when it is to
+be taken literally.  The proper response to Jason Heskett's complaint of March
+17th should have been to leave the code alone and recommand an appropriate
+form of quoting:
+
+  def TEST {
+      .foo = {X\"}
+      sho mac foo
+  }
+
+And this is what I have done.  Another reason for sticking with the old method
+is that it's explainable.  The "improved" method, even if it worked, would be
+be impossible to explain.  Btw, in testing this I noticed that the switch-test
+script made 8.0.201 dump core.  Today's version is fine.  The problem with
+quoted strings inside of IF {...} clauses and FOR and WHILE loops is fixed
+too.  Perhaps "unbroken" would be a better word.  ckuus5.c, 11 May 2003.
+
+Vace discovered that FTP MGET /EXCEPT:{... (with an unterminated /EXCEPT list)
+could crash Kermit.  Fixed in ckcftp.c, 11 May 2003.
+
+CONTINUE should not affect SUCCESS/FAILURE status.  ckuusr.c, 11 May 2003.
+
+Fixed an oversight that goes back 15 years.  While \{123} is allowed for
+decimal codes, \x{12} and \o{123} were never handled.  ckucmd.c, 11 May 2003.
+
+Added support for Red Hat <baudboy.h> and /usr/sbin/lockdev.  Supposedly this
+allows Kermit to be installed without setuid or setgid bits and still be able
+to lock and use the serial device.  Compiles and starts, but not tested.
+ckcdeb.h, makefile, ckutio.c, ckuus5.c, 16 May 2003.
+
+From Jeff: FTP ASCII send data to host when FTP /SSL was in use was broken.
+ftp_dpl is set to Clear when FTP /SSL is in use.  This was causing the data to
+be written to the socket with send() instead of the OpenSSL routines.
+ckcftp.c, ckuath.c, 21 May 2003.
+
+From Jeff: Stuff for Kerberos 524: ckcdeb.h.  Fixes for FTP; "FTP ASCII send
+data did not properly compute the end of line translations.  On Unix (and
+similar platforms) the end of line was correct for no character sets but
+incorrect when character sets were specified.  On Windows/OS2, the end of line
+was correct when character sets were specified and incorrect when they were
+not.  On MAC, both were broken.  Also, FTP Send Byte counts were incorrect
+when character sets were specified."  ckcftp.c.  17 Jun 2003.
+
+From Jeff: fixes to HTTP /AGENT: and /USER: switch action: ckcnet.c ckuus3.c
+ck_crp.c ckcftp.c ckuus2.c ckuusy.c ckuusr.c ckcnet.h, 21 Jun 2003.
+
+From Jeff: Fix SET DIALER BACKSPACE so it can override a previous SET KEY
+(e.g. from INI file): ckuus7.c.  Some SSL/TLS updates: ck_ssl.c.  HTTP support
+for VMS and other VMS improvements (e.g. a way to not have to hardwire the
+C-Kermit version number into the build script) from Martin Vorlaender:
+ckcnet.h, ckuus[r3].c, ckcdeb.h, ckvtio.c, ckcnet.c, ckvker.com.  Built on
+Solaris (gcc/ansi) and SunOS (cc/k&r).  The new VMS script tests the VMS
+version and includes HTTP support only for VMS 6.2 or later.  2 Jul 2003.
+
+Tried to build on our last VMS system but it seems to be dead.  Looks like a
+head crash (makes really loud noises, boot says DKA0 not recognized) (fooey, I
+just paid good money to renew the VMS license).  Tried building at another
+site with:
+
+  Process Software MultiNet V4.3 Rev A-X,
+  Compaq AlphaServer ES40, OpenVMS AXP V7.3
+  Compaq C V6.4-008 on OpenVMS Alpha V7.3
+
+Had to make a few corrections to ckvker.com.  But still, compilation of
+ckcnet.c bombs, indicating that the SELECT definition somehow got lost
+somewhere since the 209 release (i.e. no SELECT type is defined so it falls
+thru to "SELECT is required for this code").  But I don't see anything in
+ckcdeb.h or ckcnet.[ch] that would explain this.  Not ckvker.com either
+(putting the old one back gives the same result).  OK, I give up, maybe it's
+just that I haven't tried building it on MultiNet recently.  What about UCX?
+Aha, builds fine there except for warnings about mlook, dodo, and parser in
+ckvfio.c (because of ON_CD) -- I suppose I have #include <ckucmd.h>... (done)
+Anyhow it builds OK and the HTTP code is active and almost works (HTTP OPEN
+works; HTTP GET seems to succeed but creates an empty file every time).  Tried
+building under MultiNet at another installation; same bad result.
+
+OK so why won't it build for MultiNet?  Comparing ckcnet.c with the 209
+version, not a single #ifdef or #include is changed.  Tried building with
+p3="NOHTTP" -- builds OK, aha.  Where's the problem?  Not ckcnet.h...
+Not ckcdeb.h...  OK I give up, will revisit this next time I get time to
+do anything with the code.
+
+Later Jeff said "Martin did not implement VMS networking for the HTTP code.
+All he did was activate the #define HTTP which happens to work because his
+connections are using SSL/TLS connections.  http_inc(), http_tol(), etc have
+no support for VMS networking regardless of whether it is UCX or MULTINET.
+The vast majority of HTTP connections are not secured by SSL/TLS.  It makes no
+sense to support HTTP on VMS until someone is willing to either do the work or
+pay have the work done to implement VMS networking in that code base."  So the
+fix is to not enable HTTP for VMS after all.  Removed the CKHTTP definition
+for VMS from ckcdeb.h, 6 Jul 2003.
+
+Fixed ckvfio.c to #include <ckuusr.h> (instead of <ckucmd.h>) to pick up 
+missing prototypes.  6 Jul 2003.
+
+From Arthur Marsh: solaris2xg+openssl+zlib+srp+pam+shadow and the corresponding
+Solaris 7 target.  makefile, 6 Jul 2003.
+
+Remove duplicate #includes for <sys/stat.h>, <errno.h>, and <ctype.h> from
+ckcftp.c.  6 Jul 2003.
+
+Add -DUSE_MEMCPY to Motorola SV/68 targets because of shuffled #includes in 
+ckcftp.c.  8 Jul 2003.
+
+From Jeff: Fix problems mixing SSL and SRP without Kerberos.  Plus a few minor
+#define comment changes and a reshuffling of #defines in ckcdeb.h to allow me
+to build on X86 Windows without Kerberos.  ckcdeb.h, ck_crp.c, ckuath.c,
+10 Jul 2003.
+
+From Jeff: updated ckuat2.h and ckuath.c, 29 Jul 2003.
+
+Mats Peterson noticed that a very small Latin-1 file would be incorrectly
+identified as UCS-2 by scanfile().  Fixed in ckuusx.c, 29 Jul 2003.
+
+Fixed ACCESS macro definition to account for the fact that FIND is now a
+built-in command.  ckermit.ini, 30 Jul 2003.
+
+From Jeff: Fix for typo in urlparse() (svc/hos): ckuusy.c, 18 Aug 2003.
+
+From Jeff: Redhat9 makefile targets (needed for for OpenSSL 0.9.7):
+makefile, 19 Aug 2003.
+
+GREP /NOLIST and /COUNT did too much magic, with some undesirable fallout:
+"GREP /NOLIST /COUNT:x args" printed "file:count" for each file.  "GREP
+/COUNT:x /NOLIST args" did not print "file:count", but neither did it set the
+count variable.  Removed the magic.  Also one of the GREP switches,
+/LINENUMBERS, was out of order.  Fixed in ckuus6.c, 20 Aug 2003.
+
+From Jeff: "Reorganizing code to enable building with different subsets of
+options; a few typos corrected as well."  ckcdeb.h, ckuver.h (for RH9),
+ckcnet.c, ckuus7.c, ckuus3.c: 24 Aug 2003.
+
+Scanfile misidentified a big PDF file as text because the first 800K of it
+*was* text (most other PDF files were correctly tagged as binary).  Fixed
+by adding a check for the PDF signature at the beginning of the file.
+scanfile(): ckuusx.c, 25 Aug 2003.
+
+Ditto for PostScript files, but conservatively.  Signature at beginning of
+file must begin with "%!PS-Ado".  If it's just "%!" (or something nonstandard
+like "%%Creator: Windows PSCRIPT") we do a regular scan.  Also added "*.ps"
+to all binary filename patterns.  ckuusx.c, 4 Sep 2003.
+
+Ditto (but within #ifndef NOPCLSCAN) for PCL (<ESC>E) and PJL (<ESC>%) files,
+but no binpatterns (note: ".PCL" is the extension for TOPS-20 EXEC scripts).
+ckuusx.c, 4 Sep 2003.
+
+Added comments about OpenSSL 0.9.7 to all linux+openssl targets.
+makefile, 4 Sep 2003.
+
+From Jeff: Added - #define ALLOW_KRB_3DES_ENCRYPT.  When this symbol is defined
+at compilation Kermit will allow non-DES session keys to be used during Telnet
+Auth.  These session keys can then be used for Telnet Encrypt.  The reason
+this is not compiled on by default is that the MIT Kerberos Telnet does not
+follow the RFC for constructing keys for ENCRYPT DES when the keys are longer
+than 8 bytes in length.  ckuath.c, ckuus5.c, 4 Sep 2003.
+
+"ftp mget a b c" succeeded if one or more of the files did not exist, even
+with "set ftp error-action proceed".  This is because the server's NLST file
+list does not include any files that don't exist, so the client never even
+tries to get them.  Fortunately, the way the code is structured, this one was
+easy to fix.  ckcftp.c, 14 Sep 2003.
+
+From Jeff: Corrected code in ckcnet.c to ensure that Reverse DNS Lookups are
+not performed if tcp_rdns is OFF.  Fixed ck_krb5_getrealm() to actually return
+the realm of the credentials cache and not the default realm specified in the
+krb5.conf file.  Previously krb5_cc_get_principal() was not being called.
+Fixed ck_krb5_is_tgt_valid() to test the TGT in the current ccache and not the
+TGT constructed from the default realm.  ckcnet.c, ckuath.c, 14 Sep 2003.
+
+Marco Bernardi noticed that IF DIRECTORY could produce a false positive if
+the argument directory had previously been referenced but then removed.  This
+is because of the clever isdir() cache that was added to speed up recursion
+through big directory trees.  Changed IF DIRECTORY to make a second check
+(definitive but more expensive) if isdir() succeeds, and changed the
+directory-deleting routine, ckmkdir(), to flush the directory cache (UNIX
+only -- this also should be done in K95 but it's not critical).  This was
+done by adding a routine, clrdircache() to ckufio.c, which sets prevstat
+to -1 and prevpath[0] to NUL.  ckcfn3.c, ckuus6.c, ckufio.c, 18 Sep 2003.
+
+Marco reported the second fix still didn't work for him (even though it did
+for me).  Rather than try to figure out why, I concluded that the directory
+cache is just not safe: a directory found a second ago might have been deleted
+or renamed not only by Kermit but by some other process.  Why did I add this
+in the first place?  The log says:
+
+  Some debug logs showed that isdir() is often called twice in a row on the
+  same file.  Rather than try to sort out clients, I added a 1-element cache
+  to Unix isdir().  ckufio.c, 24 Apr 2000.
+
+Experimentation with DIR and DIR /RECURSIVE does not show this happening at
+all.  So I #ifdef'd out the directory cache (see #ifdef ISDIRCACHE in ckufio.c;
+ISDIRCACHE is not defined) and backed off the previous changes: ckufio.c,
+ckcfn3.c, ckuus6.c, 28 Sep 2003.
+
+From Jeff: Replace the compile time ALLOW_KRB_3DES_ENCRYPT with a run-time
+command SET TELNET BUG AUTH-KRB5-DES which defaults to ON: ckctel.[ch],
+ckuus[234].c, ck_crp.c, ckuath.c.  4 Oct 2003.
+
+Allow DIAL RETRIES to be any positive number, and catch negative ones.
+Also added code to check for atoi() errors (e.g. truncation).  At least on
+some platforms (e.g. Solaris) atoi() is supposed to set errno, but it
+doesn't.  ckuus3.c, ckucmd.c, 4 Oct 2003.
+
+Added /DEFAULT: to ASK-class commands (ASK, ASKQ, GETOK):
+
+ . For popups: no way to send defaults to popup_readtext() or popup_readpass().
+ . For GUI ASK[Q], pass default to gui_txt_dialog().
+ . For GUI GETOK, convert "yes" "ok" or "no" default to number for uq_ok().
+ . For Text GETOK, add default to cmkey().
+ . For Text ASK[Q], add default to cmtxt().
+ . For GETC, GETKEY, and READ: no changes.
+
+GETOK, ASK, and ASKQ with /TIMEOUT: no longer fail when the timer goes off
+if a /DEFAULT was supplied.  The GUI functions (uq_blah) don't seem to
+support timeouts.  Only the text version has been tested.  ckuus[26].c,
+4 Oct 2003.
+
+From Jeff: add /DEFAULT: for popups.  ckuus6.c. 6 Oct 2003.
+
+Change SET DIAL INTERVAL to be like SET DIAL RETRIES.  ckuus[34].c, 6 Oct 2003.
+
+Added target for HP-UX 10/11 + OpenSSL built with gcc, from Chris Cheney.
+Makefile, 12 Oct 2003.
+
+From Jeff, 6 Nov 2003:
+ . #ifdef adjustments: ckcftp.c, ckcdeb.h
+ . Fix spurious consumption of first byte(s) on Telnet connection: ckctel.c
+ . Another HP PJL test for scanfile: ckuusx.c.
+ . K95: Recognize DG4xx protected fields in DG2xx emulation: ckuus7.c.
+ . Add SSLeay version display to SHOW AUTH command: ckuus7.c
+ . Improved SET MOUSE CLEAR help text: ckuus2.c.
+ . Improved Kverbs help text: ckuus2.c (+ new IBM-3151 Kverbs).
+ . Some changes to ck_ssl.c, ckuath.c.
+
+From PeterE, 10 Nov 2003:
+ . Improved HP-UX 10/11 makefile targets for OpenSSL.
+ . #ifdef fix for OpenSSL on HP-UX: ck_ssl.c.
+
+Another new makefile from PeterE with improved and integrated HP-UX targets.
+12 Nov 2003.
+
+A couple fixes to the solaris9g+krb5+krb4+openssl+shadow+pam+zlib target
+from Jeff.  Added a solaris9g+openssl+shadow+pam+zlib target.  makefile,
+21 Nov 2003.
+
+From Jeff, 30 Nov 2003:
+ . Fix SEND /MOVE-TO: ckuusr.c.
+ . Fix K95 SET TITLE to allow quotes/braces around text: ckuus7.c.
+ . Improved "set term autodownload ?" response: ckuus5.c.
+ . Fix SHOW FEATURES to specify the protocol for encryption: ckuus5.c
+ . Make {SEND, RECEIVE} {MOVE-TO, RENAME-TO} work for XYZMODEM (K95 only).
+
+From Jeff: 7 Jan 2004:
+ . At one point Frank started to add a timer parameter to the
+   uq_txt() function but he only did it for the non-ANSI
+   compilers.  I added it for the ANSI compilers, fixed the
+   prototypes and provided a default value easily changed
+   DEFAULT_UQ_TIMEOUT: ckcker.h, ckuus[36].c, ck_ssl.c, ckcftp.c, ckuath.c.
+ . Fixed SET TERMINAL DEBUG ON (typo in variable name): ckuus7.c.
+ . Fixed BEEP INFORMATION; previously it made no sound, now uses
+   MB_ICONQUESTION.  ckuusx.c.
+
+From Ian Beckwith <ian@nessie.mcc.ac.uk> (Debianization), 7 Jan 2004:
+ . Search dir/ckermit for docs, as well as dir/kermit in cmdini(): ckuus5.c.
+ . New linux+krb5+krb4+openssl+shadow+pam target (kitchen sink minus SRP,
+   which Debian does not distribute): makefile.
+ ? Mangles the DESTDIR support in makefile to install into a staging area:
+   makefile (I didn't take this one yet).
+
+Updated copyright notices for 2004, all modules.  7 Jan 2004.
+
+Added INPUT /NOMATCH, allowing INPUT to be used for a fixed amount of time
+without attempting to match any text or patterns, so it's no longer
+necessary to "input 600 STRING_THAT_WILL_NEVER_COME".  If /NOMATCH is
+included, INPUT succeeds if the timeout expires, with \v(instatus) = 1
+(meaning "timed out"); fails upon interruption or i/o error.  ckuusr.h,
+ckuus[r24].c, 7 Jan 2004.
+
+Added SET INPUT SCALE-FACTOR <float>.  This scales all INPUT timeouts by the
+given factor, allowing time-sensitive scripts to be adjusted to changing
+conditions such as congested networks or different-speed modems without
+having to change each INPUT-class command.  This affects only those timeouts
+that are given in seconds, not as wall-clock times.  Although the scale
+factor can have a fractional part, the INPUT timeout is still an integer.
+Added this to SHOW INPUT, and added a \v(inscale) variable for it.
+ckuusr.h, ckuus[r257].c, 7 Jan 2004.
+
+undef \%a, \fverify(abc,\%a) returns 0, which makes it look as if \%a is a
+string composed of a's, b's, and/or c's, when in fact it contains nothing.
+Changed \fverify() to return -1 in this case.  ckuus4.c, 12 Jan 2004.
+
+\fcode(xxx) returned an empty string if its argument string was empty.  This
+makes it unsafe to use in arithmetic or boolean expressions.  Changed it to
+return 0 if its argument was missing, null, or empty.  ckuus4.c, 12 Jan 2004.
+
+Updated \verify() and \fcode() help text.  ckuus2.c, 12 Jan 2004.
+
+While setting up IKSD, Ian Beckwith noticed that including the --initfile:
+option caused Kermit to start parsing its own Copyright string as if it were
+the command line, and eventually crash.  I couldn't reproduce on Solaris /
+Sparc but I could in Linux / i386 (what Ian is using) -- a change from Jeff
+on 28 Apr 2003 set the command-line arg pointer to a literal empty string in
+prescan() about line 1740 of of ckuus4.c; the pointer is incremented next
+time thru the loop, resulting in random memory being referenced.  Fixed by
+setting the pointer to NULL instead of "".  ckuus4.c, 12 Jan 2004.
+
+declare \&a[999999999999999] would dump core on some platforms.  atoi()
+or whatever would truncate the dimension to maxint.  When we add 1 to the
+result, we get a negative number, which is used as an index, loop test, etc.
+Fixed both dodcl() and dclarray() to check for (n+1 < 0).  ckuus[r5].c,
+12 Jan 2004.
+
+Unix zchki() would fail on /dev/tty, which is unreasonable.  This prevented
+FOPEN /READ from reading from the terminal.  zchki() already allowed for
+/dev/null, so I added /dev/tty to the list of specials.  Ditto for FOPEN
+/WRITE and zchko().  ckufio.c 13 Jan 2004.
+
+Added untabify() routine to ckclib.[ch], 13 Jan 2004.
+Added FREAD /TRIM and /UNTABIFY.  ckuus[27].c, 13 Jan 2004.
+Added \funtabify().  ckuusr.h, ckuus[24].c, 13 Jan 2004.
+
+Dat Nguyen noticed that (setq u 'p') followed by (u) dumped core.  This was
+caused by an over-clever optimization that skipped mallocs for short
+literals, but then went on later to try to free one that hadn't been
+malloc'd.  Fixed in dosexp(): ckuus3.c, 14 Jan 2004.
+
+Catch another copyright date.  ckuus5.c, 14 Jan 2004.
+
+Fixed SWITCH to work even when SET COMMAND DOUBLEQUOTE OFF (from Mark
+Sapiro).  ckuus5.c, 15 Jan 2004.
+
+Changed version to 8.0.211 so scripts can test for recently added features.
+ckcmai.c, 15 Jan 2004.
+
+Fixed a glitch in K95 "help set port".  ckuus2.c, 20 Jan 2004.
+
+Fix from Jeff: Connections to a TLS-aware protocol which require a reconnect
+upon certificate verification failure could not reconnect if the connection
+was initiated from the command line or via a URL.  ckctel.c ckcmai.c
+ckuusr.c ckuus7.c ckuusy.c, 20 Jan 2004.
+
+From Alex Lewin: makefile target and #ifdef for Mac OS X 10.3 (Panther):
+makefile, ckcnet.c, 7 Feb 2004.
+
+Added KFLAGS to sco32v507 targets to make PTY and SSH commands work.  The
+same flags could probably also be added to earlier OSR5 targets but they
+have not been tested there.  makefile, 7 Feb 2004.
+
+Checked a complaint that "LOCAL &a" did not make array \&a[] local.  Indeed
+it did not, and can not.  You have to use the full syntax in the LOCAL
+command, "LOCAL \&a[]", or else it doesn't know it's not a macro named &a.
+7 Feb 2004.
+
+Fixed some confusion in creating IKSD database file and temp-file names.
+I was calling zfnqfp() without remembering that the path member of the
+returned struct included the filename, so to get just the directory name,
+I needed to strip the filename from the right.  ckuusy.c, 2 Mar 2004.
+
+New ckuath.c, ck_ssl.c from Jeff.  2 Mar 2004.
+
+Updated Jeff's affiliation in VERSION command text.  ckuusr.c, 2 Mar 2004.
+
+Designation changed from Dev.00 to Beta.01.  ckcmai.c, 2 Mar 2004.
+
+Fixed zrename() syslogging -- it had success and failure reversed.
+Beta.02: ckufio.c, 4 Mar 2004.
+
+Problem: when accessing IKSD via a kermit:// or iksd:// URL, and a user ID
+is given but no password, doxarg() set the password to "" instead of leaving
+it NULL, but all the tests in dourl() are for NULL.  Fixed in doxarg():
+ckuusy.c, 5 Mar 2004.
+
+The logic in dourl() about which macro to construct (login and connect,
+login and get directory listing, or login and fetch a file) was a bit off,
+so all three cases were not handled.  ckcmai.c, 5 Mar 2004.
+
+Trial Beta builds:
+ . HP-UX B.11.11 PA-RISC
+ . HP-UX B.11.23 IA64
+ . Tru64 4.0G Alpha
+ . Tru64 5.1B Alpha
+ . Debian 3.0 i386
+ . Red Hat ES 2.1 i386
+ . Slackware 9.1 i386
+ . VMS 7.3-1 Alpha + UCX 5.3
+ . VMS 7.3-1 Alpha no TCP/IP
+ . VMS 7.3 Alpha MultiNet 4.3 A-X
+ . SCO UnixWare 7.1.4 i386
+ . SCO OSR5.0.7 i386
+ . Solaris 9 Sparc
+
+Fixed compiler warning in doxarg() caused by typo (NULL instead of NUL) in
+the 5 March doxarg() edit.  ckuusy.c, 9 Mar 2004.
+
+IKSD (kermit://) command-line URLs did not work right if the client had
+already preauthenticated with Kerberos or somesuch because they tried to log
+in again with REMOTE LOGIN.  The macros constructed in doxarg() needed to
+check \v(authstate) before attempting REMOTE LOGIN.  ckcmai.c, 10 Mar 2004.
+
+Added ckuker.nr to x.sh (ckdaily upload) and updated ckuker.nr with current
+version number and dates.  10 Mar 2004.
+
+Replaced hardwired references to /usr/local in makefile with $(prefix)
+(which defaults to /usr/local, but can be overridden on the command line),
+suggested by Nelson Beebe for use with Configure.  10 Mar 2004.
+
+From Nelson Beebe: In the Kermit makefile in the install target commands,
+line 981 reads:
+
+        cp $(BINARY) $(DESTDIR)$(BINDIR)/kermit || exit 1;\
+
+Could you please add this line before it:
+
+        rm -f $(DESTDIR)$(BINDIR)/kermit;\
+
+Some sites (mine included) keep multiple versions of software around,
+with hard links between $(prefix)/progname and $(prefix)/progname-x.y.z.
+Failure to remove the $(prefix)/progname at "make install" time then
+replaces the old $(prefix)/progname-x.y.z with the new one, destroying
+an old version that the site wanted to be preserved.  makefile, 10 Mar 2004.
+
+Minor syntax and typo fixes (mostly prototypes): ckcdeb.h, ckcfns.c,
+ckclib.c, ckufio.c, ckuusr.h, ckuusx.c, 10 Mar 2004.  (I still have a few
+more to do.)
+
+Added CC=$(CC) CC2=$(CC2) to many (but not all) makefile targets that
+reference other makefile targets.  On some platforms (notably AIX, Solaris,
+SunOS) there are specific targets for different compilers, so I skipped
+those.  makefile, 10 Mar 2004.
+
+Added error checking to kermit:// URL macros, so they don't plow ahead
+after the connection is closed.  ckcmai.c, 11 Mar 2004.
+
+Added FreeBSD 4.9 and 5.1 targets (only the herald is affected).
+makefile, ckuver.h, 11 Mar 2004.
+
+Added "LIBS=-lcrypt" to bsd44 targets since nowadays crypt is almost always
+unbundled from libc.  Also added explanatory notes.  makefile, 11 Mar 2004.
+
+Changed MANDIR to default to $(manroot)/man/man1, and manroot to default
+to $(prefix).  More adding of CC=$(CC) clauses: {Free,Net,Open}BSD, 4.4BSD.
+makefile, 11 Mar 2004.
+
+Miscellaneous cleanups: ckuusx.c, ckcnet.c, ckufio.c, 11 Mar 2004.
+
+Corrected the check in the linux target to see if /usr/include/crypt.h
+exists, and if so to define HAVE_CRYPT_H, which is used in ckcdeb.h to
+#include <crypt.h> to get the prototype for crypt() and prevent bogus
+conversions on its return type on 64-bit platforms (the previous test wasn't
+quite right and the resulting symbol wasn't spelled right).  makefile,
+12 Mar 2004.
+
+From Jeff, 14 Mar 2004:
+ . Initialize localuidbuf[] in tn_snenv(): ckctel.c.
+ . Remove remote-mode checks in hupok() for K95G only (why?): ckuus3.c.
+ . Add help text for new K95-only TYPE /GUI switches: ckuus2.c.
+ . TYPE /GUI parsing, ...: ckuusr.c.
+ . TYPE /GUI action, dotype(): ckuus6.c
+ . Change Jeff's affiliation: most modules.
+
+20 Mar 2004: Looked into adding long file support, i.e. handling files more
+than 2GB (or 4GB) long.  Discovered very quickly this would be a major
+project.  Each platform has a different API, or environment, or transition
+plan, or whatever -- a nightmare to handle in portable code.  At the very
+least we'll need to convert a lot of Kermit variables from long or unsigned
+long to some new Kermit type, which in turn is #defined or typedef'd
+appropriately for each platform (to off_t or size_t or whatever).  Then we
+have to worry about the details of open() vs fopen(); printf() formats (%lld
+vs %Ld vs %"PRId64"...), platforms like HP-UX where you might have to use
+different APIs for different file systems on the same computer, etc.  We'll
+need to confront this soon, but let's get a good stable 8.0.211 release out
+first!  Meanwhile, for future reference, here are a few articles:
+
+General: http://freshmeat.net/articles/view/709/
+Linux:   http://www.ece.utexas.edu/~luo/linux_lfs.html
+HP-UX:   http://devrsrc1.external.hp.com/STK/partner/lg_files.pdf
+Solaris: http://wwws.sun.com/software/whitepapers/wp-largefiles/largefiles.pdf
+
+Looked into FTP timeouts.  It appears I can just call empty() (which is
+nothing more than a front end for select()) with the desired timeout before
+any kind of network read.  If it returns <= 0, we have a timeout.  This is
+not quite the same as using alarm() / signal() around a recv() (which could
+get stuck) but alarm() / signal() are not not used in the FTP module and are
+not naturally portable to Windows, but select() is already in use in the FTP
+module for both Unix and Windows.  This form of timeout could be used
+portably for both command response and data reads.  What about writes to the
+command or data socket?  They can get stuck for hours and hours without
+returning too, but the select() approach won't help here -- we need the
+actual send() or recv() to time out, or be wrapped in an alarm()/signal()
+kind of mechanism.  But if we can do that for sends, we can also do it for
+receives.  Better check with Jeff before I start programming anything.
+20 Mar 2004.
+
+Later: Decided to postpone the above two projects (ditto IPv6) until after
+8.0.211 is released because both will have major impacts on portability.
+Grumble: all i/o APIs should have been designed from the beginning with a
+timeout parameter.  To this day, hardly any have this feature.
+
+3-4 Apr 2004: More 8.0.211 Beta.02+ test builds:
+
+ . FreeBSD 3.3
+ . FreeBSD 4.4
+ . Linux Debian 2.1
+ . Linux RH 6.1
+ . Linux RH 7.1
+ . Linux RH 7.2
+ . Linux RH 9 (with 84 different combinations of feature selection)
+ . Linux SuSE 6.4
+ . Linux SuSE 7.0
+ . NetBSD 1.4.1
+ . NetBSD 1.5.2
+ . OpenBSD 2.5
+ . OpenBSD 3.0
+ . QNX 4.25
+ . SCO UnixWare 2.1.3
+ . SCO UnixWare 7.1.4
+ . SCO OpenServer 5.0.7
+ . SCO XENIX 2.3.4 (no TCP)
+
+Changes needed: None.
+
+Problem: SCO XENIX 2.3.4 network build failed in the FTP module with
+header-file syntax and conflicting-definitions trouble.  I'm not going to
+try to fix it; 8.0.209 built OK with FTP, so we'll just keep that one
+available.
+
+Got access to VMS 8.1 on IA64.  Building the nonet version of C-Kermit
+required minor modifications to ckvvms.h, ckv[ft]io.c, and ckvcon.c, to
+account for a third architecture.  Also to SHOW FEATURES in ckuus5.c.  Once
+that was done, the UCX 5.5 version built OK too.  Starts OK, makes Telnet
+connection OK, sends files.  Has some obvious glitches though -- "stat"
+after a file transfer reports 0 elapsed time (in fact it was 00:09:48) and
+1219174400 cps (when in fact it was 10364).  This doesn't happen on the
+Alpha.  Btw, the IA64 binary is twice as big as the Alpha one.  Changed
+to Beta.03.  5 Apr 2004.
+
+Fixed the ckdaily script to include the makefile and man page in the Zip
+file (they were not included because the Zip file was intended mainly for
+VMS users, but some Unix users prefer Zip to tar.gz).  6 Apr 2004.
+
+Traced problems in VMS/IA64 statistics report to rftimer()/gftimer() in
+ckvtio.c, which use sys$ and lib$ calls to figure elapsed time.  These work
+on VAX and Alpha but not IA64.  Sent a report to the chief engineer of the
+IA64 VMS port; he says it's probably a bug in VMS 8.1 (which is not a real
+release); he'll make sure it's fixed in 8.2.  As an experiment, tried
+swapping in the Unix versions of these routines (which call gettimeofday()
+etc).  They seem work just fine (it hung a couple times but I think that's
+because the underlying system hung too; trying it later on a new connection,
+it was fine; however I noticed a BIG discrepancy in throughput between
+sending and receiving).  Moved definitions for VMS64BIT and VMSI64 to
+ckcdeb.h so all modules can use them and added them to the SHOW FEATURES
+display.  Added VMSV80 definition to build procedure.  Beta.03+.  ckcdeb.h,
+ckcuus5.c, ckcvvms.h, ckvtio.c, ckvker.com, 6 Apr 2004.
+
+While doing the build-all, I noticed the VMS version did not build with
+Multinet or older UCX versions, always with the same errors -- undeclared
+variables, undefined symbols, all TCP/IP related.  This didn't happen a
+couple weeks ago...  Somehow the order of #includes was messed up --
+ckuusr.h depended on symbols that are defined in ckcnet.h, but ckcnet.h
+was being included after ckuusr.h...  this was compounded by two missing
+commas in ckvker.com.  11 Apr 2004.
+
+Removed Beta designation, released as 8.0.211, 10 Apr 2004.
+
+I had somehow lost the edit to ckutio.c that changed the UUCP lockfile for
+Mac OS X from /var/spool/uucp to /var/spool/lock.  So I slipped it in and
+re-uploaded version 8.0.211.  You can tell the difference because SHOW
+VERSIONS has 17 Apr 2004 for the Communications I/O module.  Also the 10.3
+executable now has a designer banner: "Mac OS X 10.3".  makefile, ckuver.h,
+ckutio.c, ckuus[45].c, 17 Apr 2004.
+
+---8.0.211---
+
+Removed "wermit" from "make clean" (how did it get there?).  makefile.
+
+From Jeff, applied 10 May 2004.
+ . Rearrange #ifdefs that define OS/2-only features. ckcdeb.h.
+ . Fix two strncat()s that should have been ckstrncat()s.  ckuus7.c.
+ . Fix two strncat()s that should have been ckstrncat()s.  ckuus4.c.
+ . Fix one strncat(). ckcfns.c.
+ . SET FTP CHAR ON used backwards byte order when output to screen.  ckcfns.c.
+ . Fix two strncat()s.  ckuus3.c.
+ . Add SET NETWORK TYPE NAMED-PIPE for K95.  ckuus3.c.
+ . Add "No active connections" message to hupok().  ckuus3.c.
+ . Fix many strncat()s.  ckcnet.c.
+ . Fix some strncat()s.  ckcftp.c
+ . Make FTP port unsigned short for 16383 < port < 65536.  ckcftp.c.
+ . Improvements to FTP USER command.  ckcftp.c.
+ . Fix FEAT parsing to allow for various forms of whitespace.  ckcftp.c.
+
+S-Expression (AND FOO BAR) would not short-circuit if FOO's value was 0,
+even though short-circuiting code has been there since Day 1.  Similarly for
+(OR BAR FOO).  Turns out the first operand was a special case that bypassed
+the short-circuit check.  Fixed in dosexp(): ckuus3.c, 10 May 2004.
+
+Red Hat 7.3 (and maybe others) <baudboy.h> referenced open() without first
+ensuring it was declared.  The declaration is in <fcntl.h>, which is after
+<baudboy.h> in ckutio.c series of #includes.  Made a special case for this.
+ckutio.c (see comments), 10 May 2004.
+
+If the local Kermit's parity is set to SPACE and then a file arrives via
+autodownload, automatic parity detection improperly switches it to NONE.
+Fixed in rpack() by switching parity automatically only if parchk() returns
+> 0 (rather than > -1), since NONE and SPACE are indistinguishable.  A
+bigger problem still remains: autodownload does not work at all if the
+sender is using actual parity bits (even, odd, or mark) and the receiver's
+parity is NONE.  ckcfn2.c, 10 May 2004.
+
+When a DIAL MACRO is defined and the phone number is comprised of more than
+one "word" (i.e. contains spaces), the dial macro loses the second and
+subsequent words after the first call. Fixed in xdial() by inserting quotes
+around phone number before passing it to xdial(). ckuus6.c, 10 May 2004.
+
+DIAL MACRO fix was not right; the quotes were kept as part of the phone
+number and sent to the modem.  dodo() pokes its argument to separate the
+macro argument string into its component arguments.  xdial() is called
+repeatedly on the same string, so after the first time, a NUL has been
+deposited after the first word of the telephone number.  The fix is to have
+xdial() create a pokeable copy of its argument string before calling
+dodo(dial-macro,args...).  It might seem odd that dodo pokes its argument,
+but making copies would be would be prohibitive in space and time.
+ckuus6.c, 23 May 2004.
+
+FTP CD did not strip braces or quotes from around its argument.  Fixed in
+doftprmt(): ckcftp.c, 23 May 2004.
+
+Added client side of REMOTE MESSAGE/RMESSAGE/RMSG: ckuus[r27].c, 23 May 2004.
+
+Server side of REMOTE MESSAGE: ckcpro.w, 23 May 2004.
+
+From Dave Sneddon: an updated CKVKER.COM containing a fix where the
+COMPAQ_SSL symbol was not defined but later referenced which generated an
+undefined symbol error.  ckvker.com, 5 Jan 2005.
+
+From Andy Tanenbaum (28 May 2005):
+ . Fix an errant prototype in ckcker.h and ckucmd.h - () instead of (void).
+ . Add support for MINIX 3.0.  makefile, ckutio.c, ckufio.c, ckuver.h.
+
+Fixed messed-up sndhlp() call which apparently had been jiggered to
+compensate for the bad prototype which has now been fixed, ckcpro.w,
+12 Jun 2005.
+
+From Jeff (12 June 2005):
+ . Security updates.  ck_ssl.c, ck_crp.c, ckuath.c.
+ . Fix bug in K95 SET PRINTER CHARACTER-SET. ckuus3.c.
+ . Add printer character-set to K95 SHOW PRINTER display. ckuus5,c
+ . Add SET MSKERMIT FILE-RENAMING to K95. ckuus7.c, ckuusr.h.
+ . Add help for K95 SET MSKERMIT.  ckuus2.c.
+ . Add SET GUI CLOSE to K95.  ckuusr.h, ckuus2.c, ckuus3.c
+ . Add help text for K95 SET GUI MENUBAR and TOOLBAR.  ckuus2.c.
+ . Add --noclose command-line option for K95.  ckuusy.c
+ . Add PAM support for Mac OS X.  ckufio.c.
+ . Add GSSAPI support for Mac OS X.  ckcftp.c.
+ . Pick up more URL options.  ckcker.h, ckuusy.c.
+ . Fix bug in delta-time calculation across year boundary.  ckucmd.c.
+ . Add Secure Endpoints to copyright notices.  ckcmai.c.
+ . Fix FTP HELP to override unverbose setting.  ckcftp.c.
+ . Fix assorted minor typos.
+
+From Matthias Kurz: automatic herald generation for NetBSD 2.0 and later,
+"make netbsd2".  ckuver.h, makefile, 12 Jun 2005.
+
+Added SET TERMINAL LF-DISPLAY, like CR-DISPLAY but for linefeed rather than
+carriage return.  ckuusr.h, ckuus[257x].c, 12 Jun 2005.
+
+Made a command-line option --unbuffered to do what the -DNONOSETBUF
+compile-time option does, i.e. force unbuffered console i/o.  Unix only.
+ckuusr.h, ckuusy.c, ckutio.c, 12 Jun 2005.
+
+Fixed getiact() (which displays TERM IDLE-ACTION setting) to display
+space as \{32}.  ckuus7.c, 12 Jun 2005.
+
+Added LMV as a synonym for LRENAME, which is itself a synonym for LOCAL
+RENAME.  ckuusr.c, 12 Jun 2005.
+
+Put HELP SET TERMINAL DG-UNIX-MODE text where it belonged.  ckuus2.c,
+12 Jun 2005.
+
+Added IF LINK (Unix only) to test if a filename is a symlink.  Uses the most
+simpleminded possible method, calls readlink() to see if it succeeds or fails.
+No other method is dependable across different Unixes.  This code should be
+portable because I already use readlink() elsewhere within exactly the same
+#ifdefs.  ckufio.c, ckuus2.c, ckuus6.c, 12 Jun 2005.
+
+Fixed a bug in which \fdir() wouldn't work when its argument was the nonwild
+name of a directory file.  zxpand(): ckufio.c, 12 Jun 2005.
+
+Made \fdirectory() a synonym for \fdirectories().  Made \fdir() an
+acceptable abbreviation for these, even though it clashes with \fdirname(),
+which still works as before.  ckuus4.c, 12 Jun 2005.
+
+Added the long-needed \flopx() function, to return rightmost pieces of
+strings, such as file extensions.  \fstripx() and \flopx() are the
+orthogonal functions we need to pick filenames apart from the right:
+\stripx(foo.tar.gz) = foo.tar; flopx(foo.tar.gz) = gz.  ckuusr.h, ckuusr.c,
+ckuus2.c, 12 Jun 2005.
+
+Removed reference to defunct fax number, ckcmai.c, 12 Jun 2005.
+
+Added -DHAVE_PTMX to linux+krb5+openssl+zlib+shadow+pam.  From Timothy Folks.
+makefile, 12 Jun 2005.
+
+Built on Solaris 9 and NetBSD 2.0.
+
+From Jeff: New build target for Mac OS X 10.3 with Kerberos 5 and SSL.
+makefile, 14 Jun 2005.
+
+Fixed error in ckuver.h NetBSD #ifdefs.  15 Jun 2005.
+
+Fixed SET TERMINAL IDLE-ACTION OUTPUT to work as documented, namely if the
+output string is empty, to send a NUL.  Previously there was no way to make
+it send a NUL.  ckuus7.c, 15 Jun 2005.
+
+Suppose (in Unix, for example) a filename contains wildcard characters, such
+as {abc}.txt.  When referring to such a file (e.g. in a SEND command), these
+characters can be quoted, e.g. \{abc\}.txt.  But if the file list has been
+obtained programmatically, e.g. stored in an array, there is no way, short
+of tedious, complicated, and error-prone string processing, to reference the
+file.  For this we need a way to disable wildcard processing.  I added { ON,
+OFF } choices for the SET WILD and SHOW FILE commands: ckuusr.h, ckuus[234].c.
+{ ON, OFF } turns wildcarding off and on without affecting the { KERMIT,
+SHELL } agent choice; it does this by setting a new and separate global
+variable, wildena.  Added semantics to ckufio.c.  Crude but effective.  It
+might have been more Unixlike to add Yet Another form of quoting but we
+have enough of that already (later maybe I'll add a \function() for this).
+Needs to be propogated to Windows and VMS.  15 Jun 2005.
+
+Improved and fixed typos in HELP WILDCARD and HELP PATTERN.  ckuus2.c,
+15 Jun 2005.
+
+The GREP command, and probably anything else that uses ckmatch() for pattern
+matching, failed on patterns like */[0-3]*.html.  The [a-b] handler, when
+failing to match at the current position, neglected to back up the pattern
+and try again on the remainder of the string.  I also fixed another case, in
+which matching a literal string a*b?c against the pattern a[*?]*[?*]c caused
+ckmatch() to recurse until it blew up.  ckclib.c, 16 Jun 2005.
+
+Added builds and designer banner for Solaris 10.  makefile, ckuver.h,
+27 Jun 2005.
+
+Defined CKHTTP for NetBSD, the HTTP code builds and works fine there.
+ckcdeb.h, 2 Jul 2005.
+
+Added #ifndef OSF40..#endif around definition of inet_aton() in ck_ssl()
+to allow building in Tru64.  Added tru64-51b+openssl to makefile.
+15 Jul 2005.
+
+HTTP GET would fail if the URL contained any metacharacters, no matter how
+much you quoted them.  Although it uses cmfld() to parse the (partial) URL,
+it then uses cmofi() to get the output filename, which by default is the
+"filename" from the URL, which might be something like "rankem.asp?id=1639".
+cmofi() refuses to accept unquoted metacharacters in "filenames" and that's
+what happens in this case if the output filename is not specified.  Worked
+around this by disabling wildcard processing around HTTP GET using the new
+"wildena" variable from June 15th.  ckuusr.c, 18 Jul 2005.
+
+Fixed the June 16th fix to the pattern matcher.  I fixed a real problem, but
+I made an unrelated optimization that introduced new ones.  ckclib.c,
+18 Jul 2005.
+
+Added missing help text for \fb64encode() and \fb64decode().  ckuus2.c,
+18 Jul 2005.
+
+Changed SET WILD OFF help text to warn that this setting prevents the
+creation of backup files (later I'll have to see if something more useful
+can be done about this).  ckuus2.c, 18 Jul 2005.
+
+Built OK on Mac OS X 10.4.2 using macosx103 target (but with some
+"signedness" warnings in ckcnet.c and ckcftp.c).  Built on Unixware 7.1.4
+with uw7 target.  27-28 Jul 2005. 
+
+Added -DCKHTTP to Mac OS X 10.3-.4 KFLAGS.  Makefile, 4 Aug 2005.
+
+Built on BSDI 4.3.1.  Added -DCKHTTP.  
+
+Compact substring notation extended to accept not only start:length but also
+start-end notation.  Thus \s(foo[12:18]) means the substring of foo starting
+at position 12 of length 18, and tne new \s(foo[12-18]) means the substring
+of foo starting at position 12 and ending with position 18.  Ditto for
+\:(\%a), etc.  ckuus4.c, 9 Aug 2005.
+
+See correspondence with Mark Sapiro, Nov 2003 and Sep 2004, about certain
+variations on IF syntax having been broken by the introduction of "immediate
+macros" circa 1999.  It seems the problem -- variables not being expanded --
+always occurs in the ELSE part when (a) the IF condition is false; (b) the
+ELSE command is "standalone", i.e. expressed as a separate command after the
+IF command (original C-Kermit 5A syntax), and (c) its command list is a block.
+This would suggest the problem is in the XXELS parser.
+
+Going back to 1999, I find this:
+  Fixed a problem Jim Whitby noticed with quoting in ELSE statements.  This
+  problem was introduced when I unified IF and XIF, and occurs only when
+  ELSE begins on a line, followed by a { command list } rather than a single
+  command.  The solution (gross) was to make a special version of pushcmd()
+  (called pushqcmd()) for this situation, which doubles backslashes while
+  copying, BUT ONLY IF it's a command list (i.e. starts with "{"); otherwise
+  we break lots of other stuff.  Result passes Jim's test and still passes
+  ckedemo.ksc and iftest.ksc.  ckucmd.c, ckuus6.c, 27 Sep 99.
+
+I undid this change and it made no difference to all the other IF
+constructions (in fact, it fixed an urelated one that was broken, so now
+iftest scores 54 out of 54, instead of 53).  However, it does not fix the
+ELSE problem; in fact it pushes it all the way in the other direction:
+
+  The opposite occurs any time you try to execute an immediate macro inside a
+  macro or any other { block }: not only is the variable evaluated, it is
+  evaluated into nothing.  It looks like this happens only in immediate
+  macros, i.e. *commands* that start with '{'.  So maybe we really have two
+  isolated problems, that can each be fixed.
+
+The situation is illustrated by this simple script:
+
+  def xx {
+      if false { echo \%1, echo \%2 }
+      else { echo \%3, echo \%4 }
+  }
+  xx one two three four
+
+With pushqcmd() it echoes the variable names literally; with pushcmd() it 
+echoes empty lines.  Since ELSE, when its argument is a block, dispatches
+to the immediate-macro handler, it seems we have unified the two problems,
+so fixing one should fix the other.
+
+The problem is that we define a new temporary macro and then call dodo() to
+execute it.  But if the definition contains macro arguments, we have added a
+new level of macro invocation, thus wiping out the current level of args.
+The cure is to expand the variables in the immediate macro in the current
+context, before executing it.  This means simply changing the cmtxt() call
+that reads the immediate macro to specify xxsting as its processing
+function, rather than NULL, which is used for real macros to defer their
+argument evaluation until after the macro entered.  ckuusr.c, 11 Aug 2005.
+
+Added a new makefile target, macosx10.4, for Mac OS X 10.4.  This one uses
+an undocumented trick to get the otherwise unavailable-except-by-clicking
+Mac OS X version number (in this case 10.4.2) and stuff it into the HERALD
+string.  makefile, 11 Aug 2005.
+
+Built OK on Solaris 9, Solaris 10 (with a few implicit declaration warnings
+in ckuusx.c), Mac OS X 10.4.2 (with some warnings in ckcnet.c and ckcftp.c),
+Mac OS X 10.3.9 (also using the macos10.4 entry, which gets the right
+version number, and gets no warnings at all), RH Enterprise Linux AS4 on AMD
+x86_64, Tru64 Unix 4.0F, SCO UnixWare 7.1.4
+
+For docs and/or scriptlib:  Unix C-Kermit can be a stdin/out filter.  The
+trick is to use the ASK, ASKQ, or GETC command for input, specifying no
+prompt, and ECHO or XECHO for output, e.g.:
+
+while true {
+    ask line
+    if fail exit 0
+    echo \freverse(\m(line))
+}
+exit 0
+
+FOPEN didn't do anything with the channel number if the open failed, so any
+subsequent command that tried to reference it would get a parse error it was
+undefined or non-numeric, not very helpful.  Changed FOPEN to set the
+channel number to -1 if the file can't be opened.  Now subsequent operations
+on the channel fail with "Channel -1: File not open".  I also added two
+magic channel numbers: -8 means that any FILE command (besides OPEN and
+STATUS) on that channel is a noop that succeeds silently; -9 is a noop that
+fails silently.  So now it's possible to simply set a channel number to one
+of these values to disable i/o to certain file without getting lots of error
+messages.  dofile(): ckuus7.c, 12 Aug 2005.
+
+Added automatic herald construction for UnixWare 7.  makefile, 12 Aug 2005.
+
+Unix isdir() never allowed for arguments that started with tilde, so gave
+incorrect results for ~/tmp/ or ~fdc.  The problem was mainly invisible
+since most commands that parsed file or directory names used cmifi(), cmdir(),
+etc, which did the conversions themselves.  But IF DIRECTORY was an exception,
+since its operand had to be treated as just text, and then tested after it
+was parsed.  ckufio.c, 13 Aug 2005.
+
+Fixed the following:
+"ckuusx.c", line 8959: warning: implicit function declaration: ckgetpeer
+"ckufio.c", line 1869: warning: implicit function declaration: ttwait
+"ckufio.c", line 2941: warning: implicit function declaration: mlook
+"ckufio.c", line 2943: warning: implicit function declaration: dodo
+"ckufio.c", line 2944: warning: implicit function declaration: parser
+"ckcftp.c", line 2625: warning: implicit function declaration: delta2sec
+"ckcftp.c", line 4071: warning: no explicit type given for parameter: prm
+"ckcftp.c", line 8389: warning: no explicit type given for parameter: brief
+ckuusx.c, ckufio.c, ckcftp.c, ckucmd.h.  13 Aug 2005.
+
+Unbuffered stdout code has never worked because the setbuf(stdout,NULL) call
+has to occur before the stdout has been used.  The reason it's needed is
+that some Kermit code writes to stderr (which is unbuffered) and other code
+writes to stdout, and therefore typescripts can come out jumbled.  Robert
+Simmons <robertls@nortel.com> provided the needed clue when he insisted it
+worked only when executed at the very beginning of main().  So I moved the
+code to that spot.  But since now we also want to make unbuffered a runtime
+(command-line) option, I had to do a clunky by-hand pre-prescan inline in
+main() to look thru argv[], even before prescan() was called.  ckcmai.c,
+ckutio.c, ckuusy.c, 13 Aug 2005.  (Now that this works, it might be a good
+idea to remove all use of stderr from Kermit.)
+
+Managed, after some finagling, to build a 64-bit version on Solaris 10 at
+Utah Math with Sun cc.  (Can't make any gcc builds at all, 32- or 64-bit,
+they all blow up in <sys/siginfo.h>.)  New target: solaris10_64.  makefile,
+15 Aug 2005.
+
+The 64-bit Solaris 10 version compiles and links OK and transfers files in
+remote mode.  It can make FTP connections and use them, but Telnet connections
+always fail with "network unreachable".  This is with all default libs and
+include files.  Nelson has a separate set in /usr/local, which he references
+explicitly in all his 64-bit builds, but using these makes no difference.
+Some data type is wrong in ckcnet.c.  But telnet works fine in 64-bit Linux
+and Tru64 builds.  Debug logs trace the difference to netopen() (of course),
+the spot where we test the results of inet_addr(), which is already marked
+suspicious for 64-bit builds.  It seems that inet_addr() is of type in_addr_t,
+which in turn is u_int32, i.e. an unsigned 32-bit int.  Yet the man page says
+that failure is indicated by returning -1.  I guess this doesn't matter in
+32-bit builds, but in the 64-bit world, the test for failure didn't work
+right.  I made a Solaris-specific workaround, and checked that it works in
+both 32-bit and 64-builds.  I really hate typedefs.  ckcnet.c, 15 Aug 2005.
+
+Changed the plain-text version (as opposed to the popup or GUI version - the
+GUI version, at least, already does this) of ASKQ to echo keystrokes
+asterisks rather than simply not echo anything, so it's easier to see what
+you're doing, the effects of editing, etc.  Experimental; for now, there's
+no way to disable this.  Not sure if there needs to be.  Anyway, to get this
+working required a fair amount of cleaning up of gtword(), which was echoing
+different ways in different places.  ckuus6.c, ckucmd.c, 15 Aug 2005.
+
+Added a solaris9_64 target for building a 64-bit version on Solaris 9 with
+Sun cc.  Verified, using the DIR command and \fsize() function on a 4.4GB
+file, that the Solaris 64-bit version of Kermit gets the size correctly, and
+that it can copy such a file (thus its fopen/fread/fwrite/fclose interface
+works right).  Initiated a large-file transfer between here and Utah over
+SSH and verified that it puts the correct file size in the A packet when
+sending; the right quantites are shown on the file transfer display (file
+size CPS, percent done, etc).  But even at 5Mb/sec, it takes a good while to
+transfer 4.4GB, more than 2 hours (not streaming; 30 window slots, 4K
+packets, maybe it would go faster with streaming)...  After an hour or so,
+it filled up the partition and gave up (gracefully) before it reached the
+2GB frontier (drained its pending packets, closed the partial file).
+Restarted at 12:54, this time with streaming and 8K packets (the speed
+wasn't significantly different).  This time it transferred 95% of the file
+(4187660288 bytes) before failing because the disk filled up.  Went to Utah
+and started a transfer between two Solaris 10/Sparc hosts; this goes about 8
+times faster.  The transfer completed successfully after 17m41s.  All fields
+in the f.t. display looked right the whole time.  Then I verified various
+other 64-bit combinations transferring the same 4.4GB file:
+
+        To................
+  From  Sol  Amd  i64  Tru      
+  Sol   OK   OK   OK   OK      Sol = Solaris 10 / Sparc
+  Amd   OK                     Amd = AMD x86_64 RH Enterprise Linux AS4
+  i64   OK                     i64 = Intel IA64, RH 2.1AS
+  Tru                          Tru = Tru64 Unix 4.0F Alpha
+
+(The other combinations are difficult to test for logistical reasons.)
+
+Tried sending the same long file with Kermit's FTP client.  It chugged along
+for a while until I stopped it; it would have taken hours to complete.
+There is no indication that it wouldn't have worked, assuming the FTP server
+could also handle long files, which who knows.  Anyway, Kermit showed all
+the right data on the display screen.  17 Aug 2005.
+
+On AMD x86_64 and IA64 native 64-bit Linux builds, the pty routines did not
+work at all.  ptsname() dumped core.  If I commented out ptsname(), then the
+next thing dumped core.  The same code works on the other 64-bit builds.
+Poking around, I see that this version of Linux has an openpty() function,
+which I could try using instead of the current API -- grantpty(), etc.  Then
+I see that openpty() is already coded into Kermit's pty module,
+conditionalized under HAVE_OPENPTY, which has never before been defined for
+any build.  I added a test to the makefile linux target (look for the
+openpty() prototype in <pty.h>, if found define HAVE_OPENPTY as a CFLAG and
+also add -lutil to LNKFLAGS).  Works fine on the problem builds, and also
+on previously working 32-bit builds.  makefile, 17 Aug 2005.
+
+Fixed a bug in the ASKQ echo asterisks code, which made the VMS version of
+C-Kermit always echo asterisks.  Turns out that some code in the main parse
+loop to reset command-specific flags was in the wrong place, which had other
+effects too, for example ASKQ temporarily turns off debug logging as a
+security measure, but the code to turn it back on was skipped in most cases.
+Some other side effects related to the DIRECTORY and CD commands might have
+been possible but I haven't seen them.  ckuus[56].c, 23 Aug 2005.
+
+Problem reported when sending a file to VMS when the name in the F packet
+starts with a device specification and does not include a directory field,
+and PATHNAMES are RELATIVE.  Example: dsk:foo.bar becomes f_oo.bar.  The
+code assumes that if there is a device field, it is followed by a directory
+field, and it inserts a dot after the '[', which in this case is not there.
+Later the dot becomes '_' because of the only-one-dot rule.  Solution: only
+insert the dot if there really is an opening bracket.  nzrtol(): ckvfio.c,
+23 Aug 2005.
+
+A report on the newsgroup complains that C-Kermit and K95 servers were
+sending REMOTE DIR listings with only #J line terminators, rather than #M#J.
+Yet all the other REMOTE xxx responses arrived with #M#J.  snddir() was
+neglecting to switch to text mode.  ckcfns.c, 26 Aug 2005.
+
+Back to long files.  What happens if 32-bit Kermit is sent a long file?
+It gets an A-packet that looks like this:
+
+  ^A_"A."U1""B8#120050815 18:28:03!'42920641*4395073536,#775-!7@ )CP
+
+The 32-bit receiver reacts like so:
+
+  gattr length[4395073536]=100106240
+
+the first number being the string from the A-packet, the second being the
+value of the long int it was converted to by atol().  Clearly not equal in
+this case.  When this happens Kermit should reject the file instead of
+accepting it and then getting a horrible error a long time later.  Added
+code to gattr() to convert the result of atol() back to a string and compare
+it with the original string; if they're not equal, reject the file on the
+assumption that the only reason this could happen is overflow.  Also some
+other code in case the sender sends the only LENGTHK attribute.  Now files
+whose lengths are too big for a long int are rejected right away, provided
+the sender sends the length in an A packet ahead of the file itself.  If
+this new code should ever cause a problem, it can be bypassed with SET
+ATTRIBUTE LENGTH OFF.  ckcfn3.c, 26 Aug 2005.
+
+As I recall from when I was testing this a few weeks ago, when the too-big
+length is not caught at A-packet time, the transfer fails more or less
+gracefully when the first attempt is made to write past the limit.  I went
+to doublecheck this by sending a big file from the 64-bit Solaris10 version
+to a 32-bit Mac OS X version that does not have today's code.  The Mac
+thinks the incoming file is 2GB long when it's really 4GB+.  But in this
+case, something new happens!  Although the percent done and transfer rate go
+negative, the file keeps coming.  It would seem that Mac OS X lets us create
+long files without using any special APIs.  The transfer runs to completion.
+Mac OS X Kermit says SUCCESS (but gets the byte count and cps wrong, of
+course).  But then a STATUS command says FAILURE.  The file was, however,
+transferred successfully; it is exactly the same length and compares byte
+for byte with the original.  This tells me that in the Mac OS X version --
+and how many others like it??? -- today's rejection code should not be
+enabled.  Meanwhile I put today's new code in #ifndef NOCHECKOVERFLOW..#endif,
+and defined this symbol in the Mac OS X 10.4 target.  Over time, I'll have
+to find out what other platforms have this characteristic.  And of course
+I'll also have to do something about file-transfer display, statistics, and
+status.  makefile, ckcfn3.c, 26 Aug 2005.
+
+From now on I'm going to bump the Dev.xx number each time I upload a new
+ckdaily.  This one will be Dev.02.  ckckmai.c, 26 Aug 2005.
+
+Got rid of all the extraneous FreeBSD 4 and 5 build targets.  Now there's
+one (freebsd) for all FreeBSD 4.1 and later.  makefile, 27 Aug 2005.
+
+Mac OS X 10.4 (Tiger) is a 64-bit OS.  Building C-Kermit 0n 10.4.2 without
+any special switches stilll gives a 32-bit executable.  Ditto building with
+-mpowerpc64.  Further investigation turned up a tip sheet on MySQL that says
+you have to include all of these: -mpowerpc64 -mcpu=G5 -mtune=G5 -arch
+ppc64.  That did the trick.  New makefile target: macosx10.4_64.  But the
+10.4.2 system I tried did not have 64-bit [n]curses or resolv libs, so this
+build has no -DNOCURSES -DNO_DNS_SRV.  makefile, 27 Aug 2005.
+
+Created a symbol CK_64BIT to indicate true 64-bit builds at compile time.
+Added 64-bit announcement to the startup herald and the VERSION text.
+ckcdeb.h, ckuus[r5].c, 27 Aug 2005.
+
+Added a built-in variable \v(bits) to indicate the size of the build
+(16, 32, 64, or whatever else sizeof() might report).  ckuusr.h, ckuus4.c,
+27 Aug 2005.
+
+Got rid of all the warnings in 64-bit Mac OS X about args to getsockopt(),
+getsockname(), and getpeername(), and the comparisons on the return value
+of inet_addr().  ckcnet.[ch], 27 Aug 2005.
+
+Now to check the effects on other builds...
+  Linux on AMD64: ok.
+  Linux on IA64: ok.
+  Linux on i386: ok.
+  Mac OS X 10.3.9 32-bit: ok.
+  Solaris 10 64-bit: ok.
+  Solaris 9 32-bit: ok.
+  Tru64 4.0F: ok.
+  FreeBSD 4.11: ok.
+  FreeBSD 5.4 ia64 (64-bit): ok.
+  FreeBSD 5.4 i386 (32-bit): ok.
+
+The Tru64 5.1B build totally blew up because they have their own unique
+sockopt/etc length-argument data type (int!), so I had to roll back on using
+socklen_t for this in all 64-bit builds.  Checked to make sure it still
+builds on Tru64 4.0F after this change (it does).  ckcnet.h, 27 Aug 2005.
+
+The HP-UX 11i/ia64 build comes out to be 32-bit but thinks it's 64-bit.
+CK_64BIT is set because __ia64 is defined.  So how do I actually make a
+64-bit HP-UX build?  I tried adding +DD64 to CFLAGS, and this generates
+64-bit object files but linking fails to find the needed 64-bit libs
+(e.g. -lm).  For now I added an exception for HPUX to the CK_64BIT
+definition section.  ckcdeb.h, 27 Aug 2005.
+
+Took the time to verify my recollection about the "graceful failure" on a
+regular Pentium Linux system when receiving a too-big file...  OK, it's not
+exactly graceful.  It gets a "File size limit exceeded" error; the message
+is printed in the middle of the file-transfer display, apparently not by
+Kermit, and Kermit exits immediately.  Looks like a trap...  Yup.  "File
+size limit exceeded" is SIGXFSZ (25).  What happens if we set it to SIG_IGN?
+Just the right thing: The receiver gets "Error writing data" at 2147483647
+bytes, sends E-packet to sender with this message, and recovers with total
+grace (drains packet buffers, returns to prompt).  ckutio.c, 27 Aug 2005.
+
+Backed off from rejecting a file because its announced size overflows a
+long.  Now instead, I set the file size to -2 (a negative size means the
+size is unknown, but we have always used -1 for this; -2 means "unknown and
+probably too big").  In this case, the f-t display says:
+
+  File Size: POSSIBLY EXCEEDS LOCAL FILE SIZE LIMIT
+
+then the user can interrupt it with X or whatever, or can let it run and
+see if maybe (as in the case of Mac OS X) it will be accepted anyway.  This
+way, we skip all the bogus calculations of percent done, time remaining, etc.
+ckcfn3.c, ckuusx.c, 27 Aug 2005.
+
+Discovered that VMS C-Kermit on Alpha and IA64 is a 32-bit application;
+sizeof(long) == sizeof(char *) == 4.  Tried adding /POINTER_SIZE=64 to VMS
+DECC builds on Alpha and IA64, but the results aren't great.  Tons of
+warnings about pointer size mismatches between Kermit pointers and RMS ones,
+and the executable doesn't run.  It appears that access to long files
+would require a lot of hacking, similar to what's needed for 32-bit Linux.
+
+--- Dev.02: 27 Aug 2005 ---
+
+From Jeff, 28 Aug 2005.
+ . Fix SSH GLOBAL-KNOWN-HOSTS-FILE / USER-KNOWN-HOSTS-FILE parsing, ckuus3.c.
+ . Pick up K95STARTFLAGS from environment, ckuus4.c.
+ . Fix some typos in command-line processing (-q), ckuus4.c.
+ . Be sure to suppress herald if started with -q, ckuus7.c.
+ . Fix ssh command-line switches, ckuusy.c.
+
+Eric Smutz complained that HTTP POST was adding an extraneous blank line,
+which prevented his application from successfully posting.  RFC 2616 states
+(in Section 4.1):
+
+   In the interest of robustness, servers SHOULD ignore any empty
+   line(s) received where a Request-Line is expected. In other words, if
+   the server is reading the protocol stream at the beginning of a
+   message and receives a CRLF first, it should ignore the CRLF.
+
+   Certain buggy HTTP/1.0 client implementations generate extra CRLF's
+   after a POST request. To restate what is explicitly forbidden by the
+   BNF, an HTTP/1.1 client MUST NOT preface or follow a request with an
+   extra CRLF.
+
+This seems pretty clear.  One section of code in http_post() (just above the
+postopen: label) was appending a CRLF to a buffer whose last already was
+terminated by CRLF, and then appended a second CRLF; thus two empty lines.
+I removed the second one.  ckcnet.c, 28 Aug 2005.
+
+I looked into the 64-bitness of NetBSD, it seems to be like Linux and
+FreeBSD on 64-bit hardware, i.e. you just build it there and it works, at
+least on Alpha and AMD64, going back to NetBSD 1.4 or 1.5.  But I don't have
+access to any of these for verification and documentation on the Web is
+scanty.
+
+Checked PeterE's complaint again of warnings in ckutio.c about parameter
+list of get[ug]id() and gete[ug]id().  When I "make hpux1100o" on HP-UX
+11.11 (PA-RISC), there are definitely no warnings.  He says the same thing
+happens on 10.xx, but I don't have access to that any more.  I also did
+"make hpux1100o" on HP-UX 11.23 (11i v2) (PA-RISC), also no warnings.
+(Except in both cases, a warning about a comment within a comment in
+/usr/include/sys/ptyio.h).  On HP-UX 11i v2 on Itanium, however, there are
+TONS of warnings, mostly of the "variable set but never used" kind.  Also
+"dollar sign used in identifier".  Tracking this last one down, I see it's
+complaining about code that's in #ifdefs for other platforms, such as
+Apollo Aegis.  Is "aegis" defined in HP-UX 11i v2/IA64?  No!  (It would show
+up in SHOW FEATURES if it was.)  Some phase of the compiler is complaining
+about code that it should be skipping (and that, in fact, it *is* skipping
+it because the build is successful).  It's as if cc is running lint for me
+but not telling lint which macros are defined and which are not.
+
+Verified that 64-bit linking fails in the same way for HP-UX 11i v2 on both
+IA64 and PA-RISC.  Sent a query to HP.
+
+Compiling ckcnet.c and ckcftp.c got the familiar sockopt-related warnings on
+HP-UX 11i v2; turns out it is just like Tru64 Unix in using an int for the
+length argument.  Added another special case and the warnings went away.
+ckcnet.h, 28 Aug 2005.
+
+Added some stuff to SHOW FEATURES to see what kinds of macros are exposed
+(e.g. INT_MAX, LONG_MAX, LLONG_MAX, etc) and also show sizeof(long long) and
+sizeof(off_t).  Building this code all over the place will give me an idea
+of how widespread these data types are, and to what extent I can tell
+whether they are available from clues in the header files.  (At first
+glance, it appears that I'm not picking up <limits.h>, but adding an
+#include for it is just asking for trouble.)  No complaints about long long
+or off_t from Solaris 9 or recent Linuxes.  ckuus5.c, 28 Aug 2005.
+
+Fixed a warning in HP-UX 10 and 11 stemming from some old-style prototypes
+in ckutio.c for get[re][gu]id().  ckutio.c, 29 Aug 2005.
+
+Updated minix3 target from Andy Tanenbaum.  makefile, 29 Aug 2005.
+
+PeterE confirms that "long long" and off_t are available in all HP-UX 10 and
+11, and in HP-UX 9 on PA-RISC but not Motorola.  30 Aug 2005.
+
+Got 64-bit builds to work on HP-UX.  According to my notes, John Bigg of HP
+said (in 1999) that HP-UX 10.30 and later require PA-RISC 1.1, and do not
+work on PA-RISC 1.0.  But is PA 1.0 64-bit or what?  Today, Alex McKale of
+HP said "The 64-bit binaries will work on all machines that have the same or
+later release of HP-UX (excluding PA-RISC 1.1 machines)".  Still need
+clarification...  Maybe it's that all IA64 builds can be 64-bit but I need
+dual builds for PA-RISC.  Meanwhile I started transfer of a 4GB+ file from
+Solaris to HP-UX 11i but it exceeded some quota on the HP long before it
+approached the 2G point.  It failed cleanly and up until then it was working
+fine (numbers, stats, etc).  30 Aug 2005.
+
+Support of large files in 32-bit builds began in 10.20.  64-bit application
+support began in 11.00, but not all machines that run 11.00 support 64 bits.
+About long files, see HP /usr/share/doc/lg_files.txt.
+
+PeterE found that certain patterns can still make Kermit loop; example:
+
+  if match T01011-00856-21-632-073 *[abc] { echo GOOD } else { echo BAD }
+  if match T01011-00856-21-632-073 *[a-z] { echo GOOD } else { echo BAD }
+
+The minimum offending pattern is * followed immediately by an [xxx]
+construction, followed by anything else, including nothing.  Previous
+versions of Kermit handled this one correctly, without looping (but failed
+certain matches that should have succeeded).  The new section of code I
+added on 15 June, upon failure to match, advances the string pointer and
+backs up the pattern to the previous pattern, and starts again
+(recursively).  However, there needed to be a corresponding check at entry
+for an empty target string.  ckmatch(): ckclib.c, 12 Sep 2005.
+
+PeterE discovered that "kermit -y filethatdoesnotexit" gives an erroneous
+error message that names the user's customization, rather than the name
+given on the command line.  doinit(): ckuus5.c, 12 Sep 2005.
+
+FREAD does not get an error if it tries to read a record or file or piece of
+file that is too big for its buffer.  In particular, FREAD /SIZE:xxx seems
+to succeed even if less than xxx was read.  It should fail unless, perhaps,
+it successfully read up to the end of the file.  Furthermore, if xxx is
+bigger than the file buffer size, it should complain.  The buffer is
+line[LINBUFSIZ], 32K.  The lack of failure was due to code in dofile() that
+adjusted the given size silently if it was greater than the buffer size,
+which I removed, and also added a check when parsing the /SIZE: switch.
+dofile(): ckuus7.c, 12 Sep 2005.
+
+That still didn't help with FREAD /SIZE:n returning less than n bytes, even
+when they were available.  That's because the underlying routine, z_in(),
+didn't check fread()'s return code, which is the number of bytes read.
+If fread() has smaller buffers, it needs to be called in a loop.  z_in():
+ckuus7.c, 12 Sep 2005.
+
+Flen() fails on strings of length 8192 or more.  The limitation is in the
+callers of zzstring, which seem to be specifying an 8K buffer, in this case
+fneval().  The operable symbols are FNVALL (max length of value returned by
+a function) and MAXARGLEN (maximum length of an argument to a function).  I
+changed both of these for BIGBUFOK builds to be CMDBL.  Buffers can never be
+infinite, there has to be a limit.  It's important to make everything work
+consistently within that limit, and to make something useful happen when the
+limit is exceeded.  At this point, I can probably also increase the limits
+for modern 32-bit systems, and certainly for 64-bit ones.  Also there's no
+point in worrying about 16-bit platforms any more; earlier C-Kermit versions
+can still be used on them if necessary. ckuusr.h, 12 Sep 2005.
+
+Special #ifdefs for finding resolv.h and nameser.h in MINIX3 from Andy
+Tanenbaum.  ckcnet.c, 20 Sep 2005.
+
+PeterE noticed that ckmatch(), even though it works pretty well now, does a
+lot of extra and unnecessary recursion after determining the string and
+pattern do not match, at least when the pattern is of the form *[abc].
+After several false starts I was able reduce this effect to a minor level
+(but not eliminate it all together) by changing a while loop into a do loop.
+ckmatch(): ckclib.c, 15 Oct 2005.
+
+Added -DNOLONGLONG to HP-UX 8.00 and earlier builds, and to Motorola-based
+HP-UX 9.00 builds.  This is simply to inhibit the test for whether "long
+long" is supported by the compiler, since when it isn't, the module
+containing the test won't compile.  makefile, ckuus5.c, 16 Oct 2005.
+
+Making ASKQ always echo askterisks is a bad idea, because when it doesn't
+echo, it's the perfect way to read silently from stdin, e.g. in a CGI script
+(INPUT can also be used for this but it's not as straightforward).  So I put
+the default for ASKQ back to no echoing, then gave ASKQ its own switch
+table, which is the same as for ASK with the addition of an /ECHO:x switch,
+which tells what character to echo.  ckucmd.c, ckuus[26].c, 17 Oct 2005.
+
+Fixed a bug in FTP GET /COMMAND filename commandname; it always dumped core
+dereferencing a null string (the nonexistent local asname).  ckcftp.c,
+17 Oct 2005.
+
+For docs: if you don't like the funny business that happens when you type
+an IF command at the prompt, use XIF instead and it won't happen.  Also note
+that commands like "if xxx { echo blah } else { echo blah blah }" don't
+work when typed at the prompt; you have to use XIF for this. 
+
+Back to ckmatch()...  Under certain conditions (e.g. patterns like *[abc])
+failure to match would not stop the recursion because the string and pattern
+arguments are on the stack, as they must be, so there was no way for level
+n-1 to know that level n had detected a definitive nonmatch and that no
+further attempts at matching were required.  The right way to handle this is
+to recode the whole thing as coroutines, the cheap way out is with a global
+static flag.  Works perfectly, in the sense that the match.ksc test results
+are identical to what they were before and the extra backing up and
+recursion are eliminated.  (The Oct 15th fix wasn't really a fix, it broke
+a couple of cases.)  ckclib.c, 20 Oct 2005.
+
+ckuus7.c(2987): warning #267: the format string requires additional arguments
+(in PURGE command); fixed 20 Oct 2005.
+
+From Andy Tanenbaum, final changes for MINIX3: #ifdef out the inline
+definitions for gettimeofday() and readlink().  ckutio.c, 23 Oct 2005.
+
+From Jeff: struct gss_trials initializers changed from gss_mech_krb5 to
+ck_gss_mech_krb5.  ckcftp.c, 23 Oct 2005.
+
+From Jeff: some improvements to K95 GUI SHOW TERMINAL.  ckuus5.c, 23 Oct 2005.
+
+Found and corrected some misplaced #ifdefs in shofeat(), ckuus5.c, 23 Oct 2005.
+
+--- Dev.03 ---
+
+Fixed a compiler warning in a debug() statement in zzstring() by adding
+parens.  ckuus4.c, 24 Oct 2005.
+
+Added -DNOLONGLONG to sv68r3v6 target, makefile, 25 Oct 2005.
+
+New makefile targets for HP-UX from PeterE to handle the 'long long'
+situation.   26 Oct 2005.
+
+From Jeff: changes to support OpenSSL 0.9.8, ck_ssl.h.  ckcasc.h has had
+short names defined for ASCII control characters for 20-some years but now
+they are causing conflicts, so EM becomes XEM (also for OpenSSL 0.9.8).
+Changed K95's default terminal type from VT320 to VT220 because VT320
+termcaps/terminfos are disappearing from Unix hosts: ckuus7.c.  Reorganize
+the data-types section of SHOW FEATURES to add more macro tests for integral
+sizes and to provide for the proper printf formatting in order to allow the
+sizes to be output ("You are going to need to be careful because %llx is not
+supported on all platforms.  On Windows, it is the same as %lx, 32 bits"):
+ckuus5.c, 26 Oct 2005.
+
+Defined NOLONGLONG ckcdeb.h for various old platforms where we know we are
+never going to need 64-bit ints (even if they support a long long datatype,
+chances are pretty slim they supported 64-bit file sizes).  ckcdeb.h,
+26 Oct 2005.
+
+PeterE noticed that GOTO targets can only be 50 characters long.  This was
+by design, a long time ago, on the assumption that nobody would make longer
+labels.  But in SWITCH statements, case labels can be variables that expand
+to anything at all.  If we chop them off at 50, we might execute the wrong
+case.  Changed the maximum label size to be 8K, and added code to dogoto()
+to check when a label or target is too long and fail, to prevent spurious
+GOTO or SWITCH results.  ckuusr.h, ckuus[r6].c, 26 Oct 2005.
+
+Testing revealed there was still a problem with SWITCH case labels that were
+variables that expanded into long strings.  Turns out that I was being
+too clever when I decided that, if the SWITCH macro was n1 characters long
+and the case-label search target was n2 characters long, I only had to
+search the first n1-n2+1 characters of the macro definition.  That was true
+before I allowed case labels to be variables, but not any more!  Fixed in
+dogoto(): ckuus5.c, 26 Oct 2005.
+
+--- Dev.04 ---
+
+Dev.04 didn't actually contain Jeff's data-type changes to shofeat(),
+I think I saved the wrong buffer in EMACS...  Fixed now.  27 Oct 2005.
+
+PeterE corrected a typo in the HP-UX 7.00 makefile target.  27 Oct 2005.
+
+PeterE had been reporting problems stress-testing the new SWITCH code, but
+only on HP-UX 9, primarily stack overrun.  Turns out to be the HP-UX 9
+optimizing compiler's fault.  No optimization, no problems.
+
+PeterE found that even when dogoto() detects a string that is too long
+and fails, this does not stop SWITCH from producing a result, which can not
+possibly be trusted.  Changed the part of dogoto() that handles this to
+not just fail, but also to exit the script immediately and return to top
+level.  ckuus6.c, 28 Oct 2005.
+
+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?  It was easy, just a few lines in cmifi2() and gtword(), plus a
+couple declarations.  To see all the changes, search for "lastfile" (all the
+new code is protected by #ifndef NOLASTFILE).  ckucmd.c, 28 Oct 2005.
+
+I added a new variable \v(lastfilespec) that expands to the same last
+filespec, for use in scripts.  ckuusr.h, ckuus4.c, 28 Oct 2005.
+
+The Unix version of C-Kermit failed to put anything in the session log if
+SET TERMINAL DEBUG ON.  Rearranged the pertinent clause so logging happens
+independent of TERMINAL DEBUG.  For now, since the user who noticed this
+wanted debug format to go into the session log, that's what I do.  The
+alternative would be to just log the raw incoming stream as usual, or to add
+Yet Another SET Command to choose.  ckucns.c, 11 Nov 2005.
+
+Fixed HELP INTRO text.  ckuus2.c, 11 Nov 2005.
+
+Added NOLONGLONG for SV68.  ckcdeb.h, 11 Nov 2005.
+
+--- Dev.05 ---
+
+Added a debug() statement in FTP secure_getbyte() to see what's going on
+with Muhamad Taufiq Tajuddin's 205-byte-per-second FTP/SSL downloads.
+
+--- Dev.06 ---
+
+Result: nothing, SSL_get_error() does not report any errors.  Suggested
+testing SSL_read()'s return code, if 0 don't update the screen.
+
+Created a new data type CK_OFF_T in ckcdeb.h that will eventually resolve
+to whatever each platform uses for file sizes and offsets.  ckcdeb.h,
+17 Nov 2005.
+
+Made a new library routine ckfstoa() that converts a file size or offset to
+a string.  This is to solve the problem with having to use different
+printf() formats for different representations of file size (int, long, long
+long, off_t, signed, unsigned, etc).  Replaced a few printf("%l",size) with
+printf("%s",ckfstoa(size)) with the expected results.  This is just a start,
+the definitions will need adjustment for many platforms, variables need to
+be redeclared, and all the offending printf's (and printw's) will have to
+hunted down and converted.  ckclib.[ch], ckuus4.c, 17 Nov 2005.
+
+Built a minimal version on Linux with:
+make linux "KFLAGS=-DNOLOCAL -DNOICP -DNOCSETS -DNODEBUG"
+Worked fine, result was 260K on i686.  21 Nov 2005.
+
+Discovered that Kermit's date parser, contrary to the documentation, failed
+to handle strings like "Wed, 13 Feb 2002 17:43:02 -0800 (PST)", which are
+commonly found in email.  This was because of an overzealous and misguided
+check in the code; once removed, all was well.  ckucmd.c, 26 Nov 2005.
+
+Added a new format code 4 to \fcvtdate() to emit asctime() format, used in
+BSD-format email message envelopes (i.e. the "From " line).  shuffledate(),
+ckucmd.c, ckuus[24].c, 26 Nov 2005.
+
+Added a new function \femailaddress().  Given a From: or Sender: header line
+from an RFC2822-format email address, extracts and returns the actual email
+address, such as kermit@columbia.edu.  ckuusr.h, ckuus[42].c, 26 Nov 2005.
+
+Using the new functions, I wrote a script to fetch mail from a POP3 server
+over a TLS connection.  But the line-at-a-time input (needed for changing
+line terminators and byte-stuffing text lines that start with "From ") is
+slow, 17 sec to read 29 messages totaling 175K.
+
+Added INPUT /CLEAR so INPUT can be started with a clean buffer without
+requiring a sepearate CLEAR INPUT command.  ckuusr.h, ckuus[r24].c,
+27 Nov 2005.
+
+One thing that INPUT was never able to do well was read and save the
+complete incoming data stream.  That's because, while waiting for its
+target, the buffer might overflow wrap around.  Yet there was never a way to
+tell it to stop when its buffer fills up and let me save it.  I added a
+/NOWRAP switch that does this.  If the buffer fills up before any other
+completion criterion is met, INPUT returns failure, but with \v(instatus)
+set to 6 (the next available instatus value).  Thus a program that wants to
+read and save (say) an email message from a POP server, which could be any
+length at all, and which terminates with <CRLF>.<CRLF> could do this:
+
+  set flag off
+  while open connection {
+      input /nowrap 10 \13\10.\13\10 # Wait for <CRLF>.<CRLF>
+      if success {
+          frwrite /string \%o {\freplace(\v(input),\13\10.\13\10,\13\10)}
+          set flag on
+          break
+      } else if ( == \v(instatus) 6 || == \v(instatus) 1 ) {
+          frwrite /string \%o {\v(input)}
+          continue
+      }
+      break
+  }
+  if flag (handle success)
+
+Note carefully the braces around the FWRITE text; without them, trailing
+spaces would be lost.
+
+Previously the only way to INPUT an entire data stream without losing
+anything (assuming it was ordinary lines of text that were not "too long"),
+was line-by-line:
+
+  while open connection {
+      input /clear 10 \13\10
+      if fail break
+      if eq "\v(input)" "$ \13\10" break
+      fwrite /string \%o {\freplace(\v(input),\13\10,\10)}
+  }
+
+The new code is 3 times faster using the default INPUT buffer length of 4K.
+Raising it to 16K makes it 3.6 times faster (not worth it).  Changing the
+POP3 script to use INPUT /NOWRAP makes it about twice as fast (it does more;
+it has to do all the byte-stuffing and unstuffing).  27 Nov 2005.
+
+Changed ssl_display_xxx() to just return if SET QUIET ON.  Otherwise there
+is no way to suppress the messages.  Also protected a previously unprotected
+printf("[SSL - OK]\r\n"); by if ( ssl_verbose_flag ).  ck_ssl.c,
+28 Nov 2005.
+
+Discovered that FOPEN /APPEND doesn't work if the file doesn't exist.  It
+uses cmiofi() which is a super-hokey front end to cmifi2().  I had code to
+call it but for some reason it was commented out, with a note to the effect
+it didn't work.  I uncommented it but that didn't help much.  So I wrote an
+entirely new cmiofi() that works exactly as it should, using chained FDBs,
+_CMIFI to _CMOFI (I think the original cmiofi() predated chained FDBs).
+ckuus7.c, ckucmd.c, 29 Nov 2005.
+
+Getting rid of the awful hacks required to call cmiofi() meant I also had to
+change the EDIT command, which is the only other place where it's used.
+Unfortunately now it's no longer possible to give EDIT without a filename
+(to just start an empty editor) but I doubt anyone will notice.  ckuusr.c,
+29 Nov 2005.
+
+IF KERBANG didn't always work right.  If a kerbang script TAKEs another
+kerbang script, the second one should have IF KERBANG false, but it didn't.
+Added a check for \v(cmdlevel) == 1.  Now you can write a wrapper that runs
+a kerbang script in a loop, and the latter can use IF KERBANG to know
+whether to EXIT (if called at top level) or END (if called by another
+script, thus allowing -- in this case -- the loop to continue).  ckuus6.c,
+29 Nov 2005.
+
+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
+
+ckuus[24].c, 1 Dec 2005.
+
+Built OK on VMS 7.2-1 with MultiNet 4.4.  Built with and without OpenSSL on
+Linux OK, ditto Solaris 9.  Built OK on RH Linux AS4 on X86_64 (64-bit);
+"show var fsize" (using new ckfstoa()) works OK there.  Also Mac OS X 10.3.9
+(32-bit), Tru64 UNIX 4.0F (64-bit), HP-UX 11iv2 (64-bit) (picky new compiler
+spews out tons of useless warnings), FreeBSD 6.0 on ia64 (64-bit).
+
+--- Dev.07 ---
+
+Changed "make netbsd" to be a synonym for "make netbsd2" because the
+original netbsd target was ancient.  Renamed it to netbsd-old.  makefile,
+3 Dec 2005.
+
+Updated INPUT and MINPUT help text.  ckuus2.c, 3 Dec 2005.
+
+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.  Jeff says "You will need to implement NP_SSLRAW and NP_TLSRAW
+that do the same as NP_TCPRAW but negotiate SSL or TLS as appropriate."
+This was not as easy as it sounded, because apparently a lot of the Telnet
+code is used by SSL and TLS even when Telnet protocol is not being executed.
+I wound up doing this as follows: I added /SSL-RAW and /TLS-RAW to the
+switch table.  Rather than disable Telnet, they do exactly what the /SSL and
+/TLS switches do, but also set a special flag.  This flag is checked in only
+two place: netclos() (to prevent Kermit from sending TELNET LOGOUT when
+closing the connection), and tn_doop() (to prevent Kermit from reacting to
+incoming IACs; it makes tn_doop() return(3), which means "quoted IAC", which
+causes the caller to keep the IAC as data).  ckcnet.h, ckctel.h, ckctel.c,
+ckuus7.c, 4 Dec 2005.
+
+The INPUT command did not account for tn_doop() returning 3.  Fixed in
+doinput(), ckuus4.c, 4 Dec 2005.
+
+Added another debug() statement in FTP secure_getbyte() to see what's going on
+with Muhamad Taufiq Tajuddin's 205-byte-per-second FTP/SSL downloads, plus
+new code to test SSL_read()'s return code (byte count); if 0 don't update
+the screen.  ckcftp.c, 4 Dec 2005.
+
+--- Dev.08 ---
+
+Fixed a typo in the non-ANSIC definition of ckfstoa().  ckclib.c, 7 Dec 2005.
+
+Our Ctrl-C trap (the ON_CTRLC macro) wasn't working for kerbang files.
+Rearranged some code to make it work.  ckcmai.c, 8 Dec 2005.
+
+Started converting code to use CK_OFF_T for file sizes and offsets, and
+all [s]printf's to replace "%ld" or whatever with "%s", and the size
+variable with a call to ckfstoa().  Since I haven't actually changed the
+definition of CK_OFF_T from what all the size variables were to begin
+with (i.e. long), it shouldn't do any harm.  So far just ckcfn3.c
+10 Dec 2005.
+
+An updated HP-UX 9.xx makefile target from PeterE to fix a core dump that
+happens on that platform due to insufficient resources.  14 Dec 2005.
+
+Added debug() statements to http_blah() routines to tell whether the
+connection is "chunked".  There seems to be a bad performance problem.
+ckcnet.c, 14 Dec 2005.
+
+PeterE complained about ugly DIRECTORY error message, ?No files match -
+"{blah}".  The braces are used internally in case the user typed more than
+one filespec.  I changed the error message to remove them.  Ditto DELETE.
+ckuus6.c, 15 Dec 2005.
+
+The problem with HTTP downloads is that Kermit always does single-character
+read() or socket_read() calls (or the SSL equivalent); see http_inc().  I
+added buffering code for non-SSL connections only but it's gross because it
+has to swap ttyfd and httpfd before calling nettchk().  I tried making a
+nettchk() clone that accepts a file descriptor as an argument but it didn't
+work because too many other routines that are invoked directly or implicitly
+by nettchk() (such as in_chk()) are still hardwired to use ttyfd.  HTTP GETs
+are now 20 times faster on the local network (the improvement is less
+dramatic over a clogged Internet).  ckcnet.[ch], 15 Dec 2005.
+
+--- Dev.09 ---
+
+HTTP file-descriptor swapping is not thread safe.  Doing it right, of
+course, is a big deal, so for now I just don't define HTTP_BUFFERING for
+Windows.  ckcnet.c, 15 Dec 2005.
+
+Noticed that HTTP not included in FreeBSD and OpenBSD builds.  Fixed in
+ckcdeb.h, 22 Dec 2005.
+
+Fleshed out 32/64-bit data type definitions and changed struct zattr
+(file attribute structure) members length and lengthk to have the new
+CK_OFF_T type.  Changed final arguments of debug() and tlog() to be the new
+LONGLONG type.  ckcdeb.h, 22 Dec 2005.
+
+Changed ckfstoa() to return a signed number in string form, rather than an
+unsigned one.  That's because off_t is signed (thank goodness).  Added the
+inverse function, ckatofs() so we can convert file sizes and offsets back
+and forth between binary number and string.  ckclib.c, 22 Dec 2005.
+
+Changed Attribute Packet reader to convert incoming file size attribute
+with ckatofs() rather than atol().  ckcfn3.c, 22 Dec 2005.
+
+Converted debug(), tlog(), ckscreen(), etc, to handle potentially "long long"
+arguments by making their "n" argument CK_OFF_T.  ckuusx.c, ckcdeb.h,
+22 Dec 2005.
+
+Converted the rest of the source files to use CK_OFF_T for all file size
+and offset and byte-count related variables, and converted all references to
+these variables in printfs to go through ckfstoa().  Then I built it on
+Linux/i386 with:
+
+  make linux "KFLAGS=-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
+
+which makes off_t be 64 bits and magically makes all the regular file APIs
+use 64-bit sizes and offsets without changing the API calls in the source
+code.  It's going to be a lot of work to get through all the kinks but I was
+able to send a long file, do directory listings of long files, do
+\fsize(longfile), etc.  When it sends a file, the length is shown correctly
+in the A packet.  If the receiver does not support big numbers, it receives
+the file OK anyway, without showing the size, the thermometer, or percent
+done (and then will get an error when the file keeps coming after the 2G
+mark).  Kermit 95 actually refuses long files for "Size", but only if the
+announced is less than 2^63 bytes.  When today's Linux version receives a
+file, it shows the length correctly in the file-transfer display, as well as
+percent done, thermometer, etc.  Also built this version on true 64-bit
+Linux, and it worked fine.  Many files changed, 22 Dec 2005.
+
+For the record, this API is specified in X/Open's Single UNIX Specification
+Version 2, which is branded as UNIX 98.  It is called Large File Support, or
+LFS, and was developed at the Large File Summit.
+
+It looks like the operative feature-test macro in glibc for transitional
+large file support is __USE_LARGEFILE64.  So if this is defined, we can also
+supply _LARGEFILE_SOURCE and _FILE_OFFSET_BITS=64 automatically for 32-bit
+Linux builds.  But there's a Catch-22, you don't know if this is defined
+until you read the header files, but you have to define _LARGEFILE_SOURCE
+and _FILE_OFFSET_BITS before you read the header files.  Maybe it's good
+enough to grep through <features.h> for __USE_LARGEFILE64.  makefile,
+23 Dec 2005.
+
+Checked this on true 64-bit Linux.  The same symbols are defined in CFLAGS,
+but they do no harm; it builds without complaint and works fine.  24 Dec 2005.
+
+Built it on Red Hat Linux 6.1 from 1999.  This picked up the long file
+support too.  Guess 6.1 isn't old enough to not have it!  Kermit seems to
+work OK on regular files but I don't have enough disk space to create a long
+file, and my bigfile.c program (which creates a long file containing only 1
+byte) doesn't work ("fseeko: invalid argument").  It looks like parts of
+this API were visible in Linux before they were actually working.
+24 Dec 2005.
+
+Converted all fseek() and ftell() to macros that expand to fseek() and ftell()
+or fseeko() and ftello() depending on whether _LARGEFILE_SOURCE is defined.
+ckufio.c, ckuus7.c, ckuusx.c, 24 Dec 2005.
+
+Made a CK_OFF_T version of cmnum().  It would be a very big deal to just
+change cmnum() to return a new type, so another idea is to rename cmnum() to
+something else, cmnumw(), change its result argument to CK_OFF_T, and then
+make a stub cmnum() to call it to get an int, then call cmnumw() explicitly
+any time we need a big number.  ckucmd.c, 24 Dec 2005.
+
+Calling cmnumw() directly requires changes to each routine that uses it.
+The INCREMENT and DECREMENT commands, for example, required changes to
+doincr(), varval(), and incvar(), and all references to them.  ckuusr.[ch],
+ckuus[56].c, 24 Dec 2005.
+
+Calling cmnumw() in chained FDBs required defining a new function code,
+_CMNUW, adding a new member to the OFDB struct for returning wide results,
+and adding a new case to cmfdb().  ckucmd.[ch], 24 Dec 2005.
+
+Changed FSEEK and FCOUNT to use the new chained FDB interface, now we can
+seek and look past 2GB.  ckuus7.c, 24 Dec 2005.
+
+Next come switches, which store their results in a struct stringint.  This
+struct was defined in each module where it was used (ckuus[r367].c, ckcftp.c).
+I moved the definition to ckuusr.h and added a wval member, which can be
+referenced by any switch-parsing code that calls cmnumw().  24 Dec 2005.
+
+Changed SEND /CALIBRATE:n to allow big values of n.  This makes it possible
+to test the protocol aspects of long-file transfer without actually having a
+long file handy.  ckuusr.c, 24 Dec 2005.
+
+SEND /SMALLER-THAN:n, SEND /LARGER-THAN:n, and and SEND /START:n also now
+allow large values of n.  ckuusr.c, 24 Dec 2005.
+
+Changed the algebraic expression evaluator to use wide values.
+ckuus5.c, 24 Dec 2005.
+
+Fixed ckfstoa() to handle the case when n is negative and (0 - n) is also
+negative, which happens for numbers 2^(n-1) or greater, where n is the
+number of bits in the word size we're dealing with, e.g. 64, in which case
+2^63 has its sign bit set so seems to be negative.  In such cases, ckfstoa()
+returns "OVERFLOW" instead of a numeric string.  We'll have to see how this
+plays out but I think it's better to cause a parse error and stop things
+dead than to return a spurious number.  ckclib.c, 24 Dec 2005.
+
+Converted the S-Expression handler to use wide integers. ckuus3.c, 24 Dec 2005.
+
+Took all the LONGLONG stuff out of ckcdeb.h, we don't need it.
+
+All of these changes result in 64-bit arithmetic (more or less) on 32-bit
+Linux, as well as on true 64-bit platforms.
+
+Rebuilt today's code on Solaris 9 in the 32-bit and 64-bit worlds, on Red
+Hat 6.1, Red Hat AS4.2.  I haven't bothered trying a 32/64 hybrid build for
+Solaris, since I can build a pure 64-bit version there.  Quick tests show
+the large-number arithmetic works OK in all cases except, of course, on pure
+32-bit builds (unfortunately I can't find a running Linux system old enough
+to verify this for Linux, but it's true for other 32-bit platforms).
+24 Dec 2005.
+
+Tried building a hybrid version on Solaris 9 after all since the LFS API is
+ostensibly the same as for Linux:
+
+ make solaris9 "KFLAGS=-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
+
+It built smoothly and the resulting binary is 2.5MB compared to 3.4MB for
+the 100% 64-bit version.  Looks like a keeper.  For now, added solaris9lfs
+and solaris10lfs entries to the makefile but if these work on PCs we can
+make these the regular entries for Solaris 9 and 10.  27 Dec 2005.
+
+Built on Mac OS X 10.4 with the regular target.  It seems that in that case,
+off_t is 64 bits anyway.  Noticed that a lot of stuff didn't work, like
+exponentiation in S-Expressions.  Tried building it as above, which worked,
+and now CK_OFF_T is 64 bits instead of 32, but (^ 2 30) is still 2.0.  In
+fact 2-to-the-any-power is 2.0.  It seems that the Mac OS X version did not
+have FNFLOAT defined.  It also seems that every test in dosexp() like:
+
+  if (result != fpresult) fpflag++;
+
+should have been protected by #ifdef FNFLOAT..#endif /* FNFLOAT */ -- a
+double-ended break, as they say in the nuclear power industry.  ckuus3.c,
+27 Dec 2005.
+
+Added GREP /EXCEPT:pattern.  ckuus[26].c, 27 Dec 2005.
+
+Fixed a problem with uninitialized pv[].wval (switch-parsing parameter-value)
+members that showed up on certain platforms or with certain compilers.  Now
+the Mac OS X 10.4 version works.  ckuus[r367].c, ckcftp.c, 28 Dec 2005.
+
+Built on Unixware 7.1.1, a pure 32-bit build, seems fine.  Rebuilt on Red
+Hat AS 4.2 just to make sure I didn't break anything, it's OK.  No testing
+on HP-UX, etc, because HP testdrive file sytem is full, can't upload anything.
+29 Dec 2005.
+
+Commented out the SHOW FEATURES section that displays constants like
+INT_MAX, CHAR_MAX, etc, because printing each value in the appropriate
+format is too tricky, and we don't need them anyway.  ckuus5.c, 29 Dec 2005.
+
+Updated ckvfio.c to use CK_OFF_T for the relevant variables.  Built and
+tested on VMS/Alpha 7.2: file transfer in remote mode; making a Telnet
+connection and then local-mode file transfer; S-Expressions, all OK.  Also
+built a no-net version OK.  29 Dec 2005.
+
+Built and tested on Red Hat AS4 AMD X86_64, used it to upload new sources to
+FreeBSD 4.11.  Built on FreeBSD 4.11/i386.  Here's another one where off_t
+is 64 bits, even though long is 32 bits.  But it seems to work ok, not sure
+why, when CK_OFF_T is 32 bits.  There is no _LARGEFILE_SOURCE stuff in the
+header files.  29 Dec 2005.
+
+Built on Mac OS X 10.3.9 using the new macosx10.4 target to pick up LFS.
+Works fine.
+
+Built on Red Hat Linux 4WS on IA64 (64-bit).  Now this one is odd, stat()
+fails on big files.  It happens also if I use the "linuxnolfs" target, which
+does not define _USE_LARGEFILE or _FILE_OFFSET_BITS=64.  DIRECTORY BIGFILE
+shows the size as -1, but if "log debug", it says "no files match", i.e.
+different behavior, observer effect.  I hate when that happens.
+
+Let's see if that's an anomoly...  Built on Tru64 Unix 4.0F (64-bit Alpha).
+It sees long files just fine.  Rebuilt and checked on x86_64 again... fine.
+OK, let's not worry about IA64 yet.
+
+Another small fix to the HP-UX 9.0 target from PeterE.  makefile, 29 Dec 2005.
+
+---Dev.10---
+
+Code adjustments from Jeff, mainly to the SSL and TLS Raw mode code from
+several weeks ago, plus changing some data types in the security code to
+CK_OFF_T, plus a different data type for CK_OFF_T for K95 because Windows
+size_T isn't signed.  This presumably will allow large-number arithmetic but
+it will not give large file access because that will require replacing all C
+library file i/o calls (esp. in ckofio.c) with native Windows APIs.  Build
+on Solaris 9 with and without SSL and on Linux RH AS4.2 with and without
+SSL.  ck_crp.c, ck_ssl.c, ck_ssl.h, ckcdeb.h, ckcftp.c, ckcmai.c, ckcnet.c,
+ckcnet.h, ckctel.c, ckuat2.h, ckuus4.c, ckuus7.c, ckuusr.c, 30 Dec 2005.
+
+It was reported that WRITE SESSION always returned a failure status, even
+when it succeeded.  The problem was that Unix versions of zsout() and
+zsoutl(), for the session log only, were using write() and returning
+write()'s return code, which is different from what zsout() and zsoutl() are
+documented to return.  Also plugged a couple potential holes in zsoutx()
+that I noticed while I was in the neighborhood.  ckufio.c, 30 Dec 2005.
+
+Added FSEEK /FIND:pattern.  This form of FSEEK accepts all the other
+switches and arguments and performs the desired seek.  Then, if the seek was
+successful, it starts from that point and reads through the file, line by
+line, searching for the first line that contains the given string or matches
+the given (unanchored) pattern and, if found, sets the file pointer to the
+beginning of that line.  Useful, e.g., for very long timestamped logs, where
+you want to start processing at a certain date or time; searching for a
+particular string is much faster than doing date comparisons on each line.
+ckuus[27].c, 30 Dec 2005.
+
+It was annoying me that FILE STATUS (FSTATUS) required a channel number to
+be given even if only one file was open, so I supplied the correct default
+in that case.  ckuus7.c, 30 Dec 2005.
+
+INPUT /NOWRAP, added recently, is used for efficiently copying the INPUT
+stream intact, but it's not good for matching because if the INPUT target is
+broken between the end of the previous buffer and the beginning of the next
+one, the context is lost and the match does not occur.  I thought of several
+ways around this, but they all involve saving a huge amount of context --
+old input buffers, the arrays of target strings and corresponding match
+positions, etc.  The alternative is fairly simple but it's not transparent
+to the user.  Here's what I did in a POP script:
+
+    .eom := "\13\10.\13\10"
+    set flag off                           # FLAG ON = success
+    while ( open connection && not flag ) {
+        .oldinput := \fright(\v(input),8)  # Save tail of previous INPUT buffer
+        input /clear /nowrap 4 \m(eom)     # Get new INPUT buffer
+        if success {                       # INPUT matched - good
+            .s := {\freplace(\v(input),\m(eom),\13\10)}
+            set flag on
+        } else {                           # No match
+            .s := \v(input)                # Check if target crossed the border
+            .oldinput := \m(oldinput)\fsubstr(\v(input),1,8)
+            if \findex(\m(eom),\m(oldinput)) set flag on
+        }
+        ...
+    }
+
+I think this will be easier to explain than any dangerous and grotesque
+magic I might put into doinput() itself.  For now, added a few words about
+this to HELP INPUT.  ckuus2.c, 30 Dec 2005.
+
+Back to the pattern matcher.  Noticed that "IF MATCH index.html [a-hj-z]*"
+succeeded when it should have failed.  In ckmatch(), the clist section
+needed one more clause: it can't float the pattern if an asterisk does not
+occur in the pattern before the clist.  This change fixes the problem
+without breaking any other cases that weren't already broken, most of which
+involve slists, i.e. {string,string,string,...}.  ckclib.c, 30 Dec 2005.
+
+Tried FSEEK /FIND: on a largish file (over 100,000 lines), using it to seek
+to a line near the end.  It took 0.756 seconds, compared with Unix grep,
+which did the same thing in 0.151 sec.  That's because C-Kermit is using
+ckmatch().  But if the search target is not a pattern, it should be a bit
+faster to use ckindex().  Yup, 0.554 sec, a 36% improvement.  Can't expect
+to compete with grep, though; it's highly tuned for its single purpose.
+ckclib.[ch], ckuus7.c, 1 Jan 2006.
+
+Updated visible copyright dates to 2006: ckcmai.c, ckuus2.c, ckuus5.c,
+1 Jan 2006.
+
+Noticed that NetBSD 2.0.3 has 64-bit off_t, and that _LARGEFILE_SOURCE is
+mentioned in <stdio.h>.  Tried building Kermit with _LARGEFILE_SOURCE added
+to CFLAGS, it's good.  Added it to the netbsd target.  makefile, 1 Jan 2006.
+
+Fixed typo, #ifdef CK_NOLONGLONG in ckuus5.c should have been #ifndef
+CK_LONGLONG (which, it turns out, we don't use anyway).  2 Jan 2005.
+
+Observed that FreeBSD 4.x has a 64-bit off_t, but does not use the
+_LARGEFILE_SOURCE convention.  Reasoning that all versions of FreeBSD have
+off_t (I was able to check back to FreeBSD 3.3), I simply #define CK_OFF_T
+to be off_t in ckcdeb.h within #ifdef __FreeBSD__ .. #endif.  Another one
+down.  This can be done for any platform that is guaranteed to have off_t.
+Turns out FreeBSD 3.3 has 64-bit off_t too.  2 Jan 2005.
+
+OpenBSD, same as FreeBSD.  Also, added OS-version-getting thing to makefile
+target for the program herald, as in the other BSDs.  Built on OpenBSD 2.5
+from 1998, it has 64-bit off_t too.  ckcdeb.h, makefile, 2 Jan 2005.
+
+Dumping the command stack every time there's an error is really too much.
+I added SET COMMAND ERROR-DISPLAY {0,1,2,3} to set the verbosity level of
+error messages.  Only level 3 dumps the stack.  ckuus[235].c, 2 Jan 2005.
+
+Built on HP-UX 11.11 with _LARGEFILE_SOURCE and _FILE_OFFSET_BITS=64.  The
+result works fine as far as I can tell.  It sees big files, it can open
+them, seek to positions past the 2^31 boundary.  It can send large files.
+It can do large-number arithmetic (^ 2 62).  The only problem is that during
+compilation, every single modules warns:
+
+  cc: "/usr/include/sys/socket.h", line 504: warning 562: Redeclaration of
+  "sendfile" with a different storage class specifier: "sendfile" will have
+  internal linkage.
+  cc: "/usr/include/sys/socket.h", line 505: warning 562: Redeclaration of
+  "sendpath" with a different storage class specifier: "sendpath" will have
+  internal linkage.
+
+These warnings should be perfectly harmless since they are not coming from
+C-Kermit code, nor does C-Kermit use either one of those functions.  These
+warnings don't come out in HP-UX 11i v2, but on that one we get tons and tons
+of picky compiler warnings (variables set but not used, defined but not
+referenced, etc).  A couple, however, turned out to be valid; one case of
+"expression has no effect", and two of "string format incompatible with
+data type" (I missed a couple file-size printfs).
+
+There were also numerous warnings about signedness mismatch or sign
+conversion of constants like IAC (0xff).  Does the HP-UX Optimizing Compiler
+have a compiler flag to make all chars unsigned?  Yes, +uc, but the man page
+says "Be careful when using this option.  Your application may have problems
+interfacing with HP-UX system libraries and other libraries that do not use
+this option".  Sigh, better not use it.
+
+After reviewing "HP-UX Large Files White Paper Version 1.4" and HP's
+"Writing Portable Code" documents, I added -D_LARGEFILE_SOURCE
+-D_FILE_OFFSET_BITS=64 to the hpux1000 target, which is the basis for all
+HP-UX 10.00 and later builds.  Large files are available in HP-UX 10.20 and
+later.  10.00 and 10.10 were not real releases, and anyway these flags
+should be harmless there unless the large-file implementation was only
+partly done.  Built OK on both PA-RISC and IA64, optimized and plain.
+makefile, 4 Jan 2006.
+
+Built on FreeBSD 6.0 on IA64.  All OK except I got a warning about the
+argument passed to time() in logwtmp() in ckufio.c.  This section had
+already been partially fixed; thus I put the improved version into
+#ifdef CK_64BIT, which is our newly available symbol that should be
+automatically defined for any true 64-bit build.  ckufio.c, 4 Jan 2006.
+
+Finally got around to testing Jeff's changes to SSL/TLS RAW mode from
+December 30th against our POP server.  It didn't work, couldn't log in.
+Tried backing off the ckctel.c changes first; that allowed login and
+communication, but it did not suppress activation of Telnet protocol
+whenever a 0xff byte arrived.  Backed off the rest of the changes and now
+all is OK again.  ckctel.c, ckcnet.c, ckuus7.c, 9 Jan 2006.
+
+Built on NetBSD 1.4.1 (1999), found that it did not like the large file
+assumption -- fseeko() and ftello() do not exist; added a clause to the
+netbsd target to check for fseeko and not define _LARGEFILE_SOURCE if not
+found.  Oddly enough, off_t is 64 bits anyway, but it doesn't look like the
+APIs are half-done.  For example, stat() uses off_t (64 bits) for the file
+length, but fseek() uses long (32 bits) and there is no 64-bit analog.
+Anyway the new netbsd target works on both 1.4.1 and 1.5.2 (no large files)
+and on 2.0.3 (large files).  makefile, 9 Jan 2006.
+
+Built on QNX-32 4.25, which has no large file support.  Got a few strange
+compiler (WatCom) warnings, but it built and runs OK.  Noticed that file
+transfers into QNX over a Telnet connection can't use streaming, but that's
+nothing new to this version; same thing happens with C-Kermit 7.0.  9 Jan 2006.
+
+Built on IRIX 6.5.  I didn't bother with large files there because it does
+not support the _LARGEFILE_SOURCE interface; you have to change all the APIs
+at the source level from blah() to blah64().  Seems to work fine as a 32-bit
+app even though its off_t is 64 bits.  Tried a pure 64-bit IRIX 6.5 build
+but it dies in ckcnet.c when it hits SOCKOPT_T and GSOCKNAME_T with "The
+identifier 'socklen_t' is undefined".
+
+Looks like I no longer have access to SCO OSR5.
+
+Made a pure 32-bit build on SCO UnixWare 7.1.4, all OK.  Found that this
+version also supports LFS, added it to the uw7 target.  makefile, 9 Jan 2006.
+
+--- Dev.11 ---
+
+Evidently the HP-UX bundled (non-ANSI non-optimizing) compiler doesn't like
+long integers in switch expressions.  Changed three examples of these in the
+S-expression code.  ckuus3.c, 10 Jan 2006.
+
+A section of tstats() where GFTIMER isn't defined (e.g. on Motorola
+sv68r3v6) was garbled.  Fixed in ckcfn2.c, 10 Jan 2006.
+
+A fix for setting 921600 bps on Linux from Paul Fulghum, Microgate Systems Ltd.
+ttgspd(): ckutio.c, 11 Jan 2006.
+
+Noticed that when I changed the compact substring notation code back on
+August 9th, I broke the ability to use arithmetic expressions within the
+brackets, which explains some rather odd behavior I saw with some of my
+scripts.  Looking more deeply into this, I also see that all the parsers I
+have been using up to now for this, as well as for array bounds pairs, have
+been inadequate because they never allowed for nested constructions, such as
+a member of a bounds pair that itself was an array element, possibly with
+another array element as a subscript.  I wrote a new routine for this,
+called boundspair(), which is like arraybounds() except it accepts an extra
+argument, an array of characters that can serve as bounds-pair delimiters,
+and it returns the pair separator that was encountered in another new
+argument.  For the alternative substring notation for [startpos-endpos] I
+had to change the delimiter from '-' to '_' because '-' can be used in
+arithmetic but '_' is not a recognized operator.  This is so I can parse,
+e.g. [a:b] or [a_b] in the same context, and then find out which form was
+used, e.g. \s(line[9:12]) or \s(line[9_12]); the first string is 4 bytes
+long, the second is 12.  Everything seems to be OK now.  \s(line[10]) gives
+everything starting at 10, but \s(line[10:0]) gives the null string.  Bad
+syntax in the bounds pairs results in a null string; missing pieces of the
+bounds pair result in defaults that should be compatible with previous
+behavior.  ckuus[45].c, ckuusr.h, 13 Jan 2005.
+
+Changed arraybounds() to call boundsdpair().  This was a rather drastic
+change, not strictly necessary, but I think I got all the kinks out.
+ckuus5.c, 13 Jan 2005.
+
+Changes from PeterE to the makefile for HP-UX 6 and 7, to accommodate bigger
+symbol tables, etc.  19 Jan 2005.
+
+Determined that SCO OSR5.0.6 (and earlier) do(es) not support large files.
+Don't know about 5.0.7.  30 Jan 2005.
+
+Created a new build target for SCO OSR6.0.0.  Gets the exact 6.x.x version
+dynamically.  Supports large files and big-number arithmetic via CK_OFF_T.
+The sockopt() family of functions changed the data types of some of their
+arguments since OSR5.  It was already possible to define SOCKOPT_T and
+GSOCKNAME_T from the command line but I had to add code to also allow this
+for GPEERNAME_T too.  ckcnet.c, makefile, 30 Jan 2005.
+
+Apparently, ever since C-Kermit 7.0 was released, it has never been possible
+to use a variable for the as-name in a RECEIVE command in Kermit 95.  This
+is because evaluation of the as-name field was deferred until after we could
+check whether it might be a directory name (which, in Windows, could start
+with a backslash).   This little bit of magic was not a good idea, magic
+hardly ever is.  I changed the code to evaluate both as-name fields in the
+normal way.  If they want to receive to a directory called "\%1", they'll
+just have to spell it differently.  The workaround is to turn the whole
+command into a macro and evaluate it before executing it, e.g.:
+
+  assign xx receive /as-name:\%1
+  do xx
+
+ckuus6.c, 1 Feb 2006.
+
+Built OK on FreeBSD 6.1 on AMD64.  Adjusted some copyrights and date stamps.
+ckcmai.c, makefile, 8 Feb 2006.
+
+--- Dev.12 ---
+
+Fixed a signed/unsigned char warning in the new boundspair() calling code
+in the compact substring notation handler.  ckuus4.c, 9 Feb 2006.
+
+Removed a spurious extra linux+openssl label from the makefile, added
+solaris10g_64 synonym.  9 Feb 2006.
+
+Satisfied myself that LFS is OK on Solaris 10 i386, and I'm going to assume
+it's also OK on Solaris 9.  Made LFS standard for all Solaris 9 and 10
+builds (including the secure ones) except the explicitly 64-bit ones, and
+made the provisional solarisXXlfs targets into synonyms.  makefile, 9 Feb 2006.
+
+--- Dev.13 ---
+
+Further attempts at SSL/TLS message suppression when QUIET is ON.
+ck_ssl.c, 16 Feb 2006.
+
+From J.Scott Kasten: (quote...) I just uploaded a patch to /kermit/incoming.
+The file name is "jsk-patch-for-cku211.diff".  I have also included the
+patch as ASCII text in this email below.  This patch may be applied to the
+cku211.tar.gz source code via:
+  cd cku211, patch -p1 <../jsk-patch-for-cku211.diff
+The patch adds 4 new build targets:
+  netbsdwoc - a stripped no curses target for iksd used.
+  netbsdse  - security enhanced target with srp, ssl, and zlib.
+  irix65gcc - build on SGI Irix 6.5 platform using gcc.
+  irix65se  - security enhanced target with srp, ssl, and zlib.
+The patch fixes one build target:
+  irix64gcc - The "-s" option is not supported by gcc under Irix.
+I thank all of you in the Kermit Project for such a fine utility.  I
+recently had to get a 16 MB file overseas across a spotty communications
+link to repair a computer remotely.  Kermit was the only thing that could do
+the job, so I wanted to contribute these patches back to the mainstream to
+say thanks.  This digitally signed email is a binding contract that
+officially assigns the rights to the source code patch (shown below) that I
+developed to the Kermit Project at Columbia University. (...end quote)
+ck_ssl.c, makefile, 23 Feb 2006.
+
+Changed the new NetBSD target names to be consistent with the conventions
+used in most other targets:
+
+  netbsdwoc -> netbsdnc
+  netbsdse  -> netbsd+ssl+srp+zlib
+  irix65se  -> irix65+ssl+srp+zlib
+
+and removed old, now superfluous, NetBSD targets (old-netbsd, netbst15,
+netbst16), leaving synonym labels in their place.  Also updated (crudely)
+the Linux target variations (curses instead of nocurses, no curses at all)
+to be (appropriately modified) copies of the current linux target.  It would
+be nicer to combine them, but this gets the job done.  makefile, 23 Feb 2006.
+
+--- Dev.14 ---
+
+Fixed the HELP command when used with tokens like @, ^, #, and ;.  The first
+two had been omitted from the table.  The second two required a new path
+into the guts of the parser, since comments are normally stripped at a very
+low level.  ckuus[r2].c, ckucmd.c, 24 Feb 2006.
+
+Built on AIX 5.1 ("make aix51") without incident.  Then I tried:
+
+ make aix51 "KFLAGS=-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
+
+This had no effect.  I found the relevant document ath the IBM website.  It
+says to use -D_LARGE_FILES instead.  I added this to the AIX 4.2 target
+since (a) IBM says large files are supported by AIX 4.2 and later, and (b)
+all Kermit AIX targets past 4.2 use the 4.2 one.  Plus a clause to make
+sure CK_OFF_T is defined appropriately.  ckcdeb.h, makefile, 6 Mar 2006.
+
+Added a 32-bit aix51+openssl target.  Builds OK, works fine (tested against
+our SSL POP server).  Tried I tried adding -D_LARGE_FILES.  It seems to work
+fine, so we'll keep it.  Cleaned up the other aix5blah entries a bit also.
+makefile, 6 Mar 2006.
+
+Fixes from J. Scott Kasten to the IRIX 6.4 and 6.5 makefile targets.  They
+were badly wrong.  makefile, 6 Mar 2006.
+
+The reason Kermit was looping on directories in IRIX was a classic
+"double-ended break".  The makefile targets failed to define DIRENT so
+Kermit was open/read on directories rather than opendir()/readdir().  But
+then it was also failing to account for the fact that read() would return -1
+on error.  The makefile fix adds -DDIRENT, and the read() case in traverse()
+now properly terminates its loop on error.  ckufio.c, 6 Mar 2006.
+
+--- Dev.14 ---
+
+In response to a complaint that C-Kermit would not build on HP-UX 11 with
+OpenSSL, I tried it myself on both 11.11/PA-RISC and 11i v2/Itanium.  It built
+OK on both but I had to add a new target (hpux1000o+openssl-nozlib) for no
+Zlib since these boxes did not have it installed.  makefile, 9 Mar 2006.
+
+Added OpenSSL version number display to SHOW FEATURES.  ckuus5.c, 9 Mar 2006.
+
+Gavin Graham noticed that FTP [M]GET /DELETE /MOVE-TO: was rejected with
+"?Sorry, /DELETE conflicts with /MOVE or /RENAME".  This check belongs in the
+PUT code but not in the GET code.  Commented it out and tested the result.
+The combination is now accepted but then Kermit refuses the incoming file as
+if it had been given a /SMALLER-THAN: or /LARGER-THAN: switch, which it didn't
+happen.  Turns out there was one more place where I wasn't initializing the
+new "wide int" member of the switch-parsing pv[] struct.  Once this was fixed,
+the /MOVE-TO part still didn't work.  Turned out the /DELETE case was part of
+a long if-else-if-else- chain, which effectively made /DELETE and /MOVE-TO: or
+/RENAME-TO: mutually exclusive.  Fixed this, now it works fine.  ckcftp.c,
+13 Mar 2006.
+
+Got access to AIX 5.3, built there, all OK, including large files. 13 Mar 2006.
+
+--- Dev.16 ---
+
+Patches from Mark Sapiro to suppress getsockopt() and getsockname() warnings
+in Mac OS X.  ckcnet.[ch], 18 Mar 2006.
+
+In response to a complaint from Clarence Dold, tried "make redhat9" (which
+is the rather dated target that tried to include all forms of security) on
+RH Linux AS4.3, it failed miserably.  I made a new makefile target, removing
+Kerberos IV and got a lot farther.  But then in ckcftp.c, the following
+struct definition:
+
+  struct {
+      CONST gss_OID_desc * CONST * mech_type;
+      char *service_name;
+  } gss_trials[] = {
+      { &ck_gss_mech_krb5, "ftp" },
+      { &ck_gss_mech_krb5, "host" },
+  };
+
+refers to a variable, ck_gss_mech_krb5, that is not defined anywhere.  Up
+above, however, is a static definition for gss_mech_krb5, so I changed the
+struct definition to match.  Next, in ckuath.c, the compiler could not find
+the com_err.h file.  Turns out in Linux this is in a subdirectory, et, so we
+have to add a -I clause to the makefile target for this.  Made a target for
+Linux+SSL only.  Made a target for Linux+Krb5 only; this required moving an
+#ifdef in ckuus7.c to prevent an unguarded reference to SSLEAY_VERSION.
+New targets: linux+krb5+ssl, linux+krb5, linux+krb5.  ckcftp.c, ckuus7.c,
+makefile, 27 Mar 2006.  
+
+New targets of HP-UX 10/11 with OpenSSL from PeterE.  makefile, 27 Mar 2006.
+
+Added large file/integer support to SHOW FEATURES.  ckuus5.c, 27 Mar 2006.
+
+Built OK on Solaris 9 and 10 with gcc (someone was complaining that this
+didn't work, but that was 8.0.211).
+
+Started build on a Sun 3/80 mc68030 with NetBSD 2.0 and gcc 3.3.3.  But it
+died with an assembler error in ckcfn2.c (compiler bug).  27 Mar 2006.
+
+--- Dev.17 ---
+
+NebBSD 2.0 build completed by turning off optimization on ckcfn2.c
+("KFLAGS=-O0").  Result supports 64-bit ints and, presumably, large files.
+uname -p = "m68k", -m = "sun3". 29 Mar 2006.
+
+Corrected an omission in applying PeterE's updates to the HP-UX targets.
+makefile, 28 Mar 2006.
+
+solaris2xg+krb5+krb4+openssl+shadow:
+
+Tried resurrecting the solaris2xg+krb5+krb4+openssl+shadow target.  It asks
+to link with libdes but there is no libdes.  Removed -ldes from the target,
+now at least it builds and runs wart.  The compilation blows up in ckcftp.c
+for missing header files:
+
+  ckcftp.c:462: kerberosIV/krb.h: No such file or directory
+  ckcftp.c:500: gssapi/gssapi_generic.h: No such file or directory
+  ckcftp.c:501: gssapi/gssapi_krb5.h: No such file or directory
+
+Got a bit farther by adding appropriate -I's and -L's to KFLAGS but it still
+dies compiling (or linking?) ckcftp.c, but it doesn't say exactly why.  OK,
+deferred.
+
+Added SET SEXPRESSION TRUNCATE-ALL-RESULTS { ON, OFF }.  This can be used
+for force integer arithmetic in any kind of calculation that requires it,
+such as date calculations.  This is a global setting, not on any kind of
+stack.  Also, updated SHOW SEXP and added HELP SET SEXP which wasn't there
+before.  ckuus[23].c, 30 Mar 2006.
+
+To make the RENAME command a bit more useful, need to add some switches.
+But it shares a switch table, qvswtab[], with some other commands.  Broke
+this off into its own switch table.  ckuus6.c, 17 Apr 2006.
+
+Added RENAME switch values that can be used in the same table with the DELETE
+switch values, which are shared by many commands.  ckuusr.h, 17 Apr 2006.
+
+Discovered that the RENAME command could be entered without any arguments
+and it would still succeed.  Fixed in dorenam(): ckuus6.c, 17 Apr 2006.
+
+Added parsing for RENAME /UPPER:option (to uppercase the file name(s)),
+/LOWER:option (to lowercase), and /REPLACE:{{s1}{s2}} (to do string
+replacement on the filename(s)), but not the semantics.  When any of these
+switches is given, the target ("to") name is not parsed; they act on the
+source name.  The /LOWER: switch takes keyword args to specify whether it
+should act only only files that have all UPPER case latters, or on ALL files
+(i.e., including files with mixed-case names); similarly for the /UPPER:
+switch.  There is some creative parsing allowing these to be given with or
+without a colon and keyword argument, which works fine except if you include
+the colon but no argument, execute the command (which works fine), and then
+recall the command.  I haven't yet decided about the interaction among these
+switches.  Clearly if /UPPER is given after /LOWER, it overrides.  But if
+/UPPER (or /LOWER) is given with /REPLACE, what should happen?  ckuus6.c,
+17 Apr 2006.
+
+Filled in actions for RENAME /UPPER: and /LOWER: for the single file case,
+and tested all combinations of switch values and filename configurations.
+Once that was OK, moved the code out into a separate routine, renameone(),
+and then called it from both the single-file case and the multifile case.
+ckuus6.c, 19 Apr 2006.
+
+Added RENAME /SIMULATE.  Filled in the code for string replacement, needs
+testing.  ckuus6.c, 20 Apr 2006.
+
+Changed /REPLACE options to allow a negative number to specify an occurrence
+from the right, so -1 means the last occurrence, -2 means the next-to-last,
+etc.  ckuus6.c, 24 Apr 2006.
+
+Added RENAME /COLLISION:{OVERWRITE,PROCEED,FAIL}.  This is implemented but
+not tested.  ckuus6.c, 24 Apr 2006.
+
+Worked on RENAME /COLLISION:FAIL.  I decided it was less than useful to ...
+
+Added SET RENAME { COLLISION, LIST } to let user change default collision
+and listing actions.  ckuusr.[ch], ckuus[36].c, 25 Apr 2006.
+
+Experimented with parsing for /CONVERT:cset1:cset2.  The problem here is
+that there is no straightforward way for a switch to have multiple
+arguments.  Or is there...?  If I parse cset1 with cmswi() rather than
+cmkey(), it almost works; the only problem is that the character-set
+keywords don't have CM_ARG set, so they don't know to stop on, and ignore, a
+colon.  If I make a copy of the table and set CM_ARG in the flags field for
+each keyword, it works fine: if I Tab in the first name, it fills itself
+out, supplies a colon, and waits for the second name.  So in the code, the
+first time that RENAME /CONVERT is invoked, I put code to copy fcstab[] and
+set CM_ARG in each flags field.  Works fine, and now we know how to make a
+switch that takes multiple arguments.  ckuus6.c, 24 Apr 2006.
+
+I thought I had a function to convert the character set of a string but I
+don't, so actually implementing /CONVERT: will be difficult.
+
+Actually the parsing wasn't that easy either.  It works OK interactively,
+but not in a TAKE file.  To make a long story short, I had to change
+gtword() and cmkey2() to not require "/" at the beginning of a switch, and
+then to parse arguments-that-are-followed-by-other-arguments as if they were
+switches, so that they can end with colon rather than space.  This might
+seem dangerous, but switches always have "/" at the beginning, so the check
+is superfluous.  ckucmd.c, 26 Apr 2006.
+
+Back to /CONVERT...  Once I was able to get the code to call cvtstring() I
+was able to debug it (at first it was skipping every second character).  And
+now we have a general-purpose string-translating function we can call from
+anywhere.  Requires that C-Kermit be built with Unicode support.
+ckuus6.c, 26 Apr 2006.
+
+Added SHOW RENAME.  ckuusr.h, ckuus[r5].c, 26 Apr 2006.
+
+Conditionalized some Unix/Windows assumptions in renameone() so the code
+could work in VMS.  ckuus6.c, 2 May 2006.
+
+Added RENAME /FIXSPACES to change all spaces in the filename(s) to
+underscore or any other character or string that is given.  This is just a
+special case of RENAME /REPLACE:{{ }{x}} with easier syntax.
+ckuusr.h, ckuus6.c, 2 May 2006.
+
+Added an "all-but" control to the /REPLACE options:
+/REPLACE:{{.}{_}{~1}} means replace all but the first (this one works);
+/REPLACE:{{.}{_}{~-1}} means replace all but the last (this one not yet).
+ckuus6.c, 2 May 2006.
+
+Filled in the second one ("all but" the given occurrence).  The algorithm is
+simply to reverse the three strings and then use the same code as we use in
+the left-right-case, and then unreverse the result.  At first I used
+yystring() for this but yikes, what a bad design!  So I made a better
+string-reversal routine, gnirts(), for this (luckily yystring() is only used
+in one place, for which its design is appropriate). ckuus6.c, 3-4 May 2006.
+
+Added code to handle the case where the file being renamed includes a path
+specification.  In this case we separate the path, apply the renaming
+functions to the filename only, and then at the end rejoin the original
+filename with the path, and join the new name with same path or, if a
+destination directory was given, with that.  ckuus6.c, 4 May 2006.
+
+Added HELP SET RENAME and updated HELP RENAME.  ckuus2.c, 4 May 2006.
+
+"Tom Violin" (Tom Hansen) noticed that the first time you FOPEN a file,
+Kermit's memory consumption goes way up.  In fact there's a warning to that
+effect in the code, where, upon first open, a potentially big array of
+potentially big structs is allocated.  I rewrote the code to allocate each
+array member (struct ckz_file) as needed, i.e. when a file is opened, and to
+free it when the file is closed (or the open fails).  This was actually
+quite a lot of work, which is why I didn't do it the first time around:
+every single "."  had to be changed to "->".  Every check for a valid
+channel first had to check if the channel's struct was allocated and every
+other reference to z_file[i]->anything had to be prechecked that z_file[i]
+was not a NULL pointer.  Also I made some improvements to FILE STATUS, and I
+fixed FILE CLOSE to default the channel number if only one channel was open,
+as I did for FILE STATUS a while back.  ckuus7.c, Cinco de mayo 2006.
+
+Ran my old BUILDS script that builds C-Kermit with about 100 different
+combinations of feature-selection switches.  Fixed a few small glitches so
+now they all build OK (except can't do NOANSI builds any more on recent
+Linuxes because of varargs()).  ckuus3.c, ckuus5.c, ckuus6.c, ckuus7.c,
+ckucmd.c, ckcfns.c, 6 May 2006.
+
+Fixed RENAME /LOWER and /UPPER, when given with no colon or agrument, to
+default to ALL.  ckuus6.c, 13 May 2006.
+
+Built on VMS 7.2-1, tested new RENAME command there; seems to be OK.
+13 May 2006.
+
+--- Dev.18 ---
+
+I wanted to test large files against RESEND but I don't have access to any
+system that can run C-Kermit and that also has enough space for a large
+file.  I created a "fake" large file on Linux (3G hole plus 1 byte), and
+sent it over a localhost connection, and interrupted it repeatedly and then
+initiated a RESEND at the sender.  In each case, it picked up where it left
+off.  But before the 2G boundary was crossed the disk filled up.
+Inconclusive.  14 May 2006.
+
+PeterE got a warning in the new FILE OPEN code when building in HP-UX 9.
+I added a cast, built on HP-UX 11, no more complaint.  However there
+are warnings about internal vs external bindings of sendpath and sendfile
+in every module.  Too bad, these are not Kermit tokens, it's a conflict in
+HP's header files.  Marc Sapiro doesn't see them; probably it's something
+on the HP testdrive site.  ckuus7.c, 17 May 2006.
+
+Fixed the tru64-51b+openssl target -- the terminating doublequote of KFLAGS
+was missing -- and also the osf target, which failed to import the LIBS
+definition from whatever other target invoked it.  Now the SSL build goes OK
+on Tru64 5.1B.  Replaced x.tar.z in the download areas without declaring a
+new Dev number.  The new one has a makefile with today's date.  Software
+engineering at its best!  makefile, 18 May 2006.
+
+Scott Kasten noted that the estimated-time-remaining calculation would go
+bonkers on LFS systems when RESENDing a large file.  It looks like the
+shocps() and shoetl() functions escaped the CK_OFF_T conversion.  I made
+what seemed to be the right adjustments, and then was lucky enough to find a
+computer that had enough free disk space for me to send a large file,
+interrupt it several times, resend it, all seems to be OK.  28 May 2006.
+Later Scott verified these changes independently for Linux, but the problems
+in IRIX remain.
+
+Patches from Scott Kasten for large files on IRIX 6.5: ckcdeb.h, makefile,
+12 Jun 2006.
+
+--- Dev.19 ---
+
+Added a new function for dealing with JPGs and GIFs:
+
+\fpicture(filename,&a)
+  returns 0 if file not recognized or can't be opened;
+  returns 1 if landscape, 2 if portrait or square.
+  If array given, element 1 is width, element 2 is height.
+
+ckuusr.h, ckuus4.c, 19 Jun 2006.
+
+Scott Kasten reports that the FTP client can transfer large files OK, at
+least in Linux, but has trouble with recovery:
+
+ . Kermit takes a very long time to start the transfer, sometimes over
+   30 minutes.  Suspect the ftp server is counting the bytes in a long file?
+   Or maybe it's a text-mode transfer and it's counting the lines?  Probably
+   in response to Kermit's SIZE command.
+
+ . The size shown in the FT display is wrong by a random amount.  And of
+   course so are the progress bar, percent done, and time remaining.
+
+ . The file, however, is transferred correctly.  REGET works correctly too.
+
+I tried setting up a test scenario locally but our Solaris FTP server does
+not support large files:
+
+  FTP SENT [SIZE BIGFILE]
+  FTP RCVD [550 BIGFILE: not a plain file.]
+  FTP SENT [PASV]
+  FTP RCVD [227 Entering Passive Mode (128,59,48,24,246,37)]
+  FTP SENT [RETR BIGFILE]
+  FTP RCVD [550 BIGFILE: Value too large for defined data type.]
+
+Created the same 3GB on a Tru64 Unix system that allows FTP access.  Made
+the connection from C-Kermit on Solaris (32-bit with LFS):
+
+  16:46:12.908 FTP SENT [SIZE BIGFILE]
+  16:46:12.947 FTP RCVD [213 3000000001]
+
+Note that it takes less than half a second to get the reply.  Now I start
+the download and then interrupt it at about 2%:
+
+  16:46:12.979 FTP SENT [TYPE I]
+  16:46:13.174 FTP RCVD [200 Type set to I.]
+  16:46:13.226 FTP SENT [PASV]
+  16:46:13.262 FTP RCVD [227 Entering Passive Mode (15,170,178,171,11,37)]
+  16:46:13.299 FTP SENT [RETR BIGFILE]
+  16:46:13.337 FTP RCVD [150 Opening BINARY mode data connection for BIGFILE..]
+  16:47:24.895 FTP RCVD [426 Transfer aborted. Data connection closed.]
+  16:47:24.934 FTP RCVD [226 Abort successful]
+  16:47:24.991 FTP SENT [MDTM BIGFILE]
+  16:47:25.028 FTP RCVD [213 20060706204458]
+
+Now I do a REGET:
+
+  16:51:55.321 FTP SENT [PASV]
+  16:51:55.357 FTP RCVD [227 Entering Passive Mode (15,170,178,171,11,43)]
+  16:51:55.394 FTP SENT [REST 122736640]
+  16:51:55.430 FTP RCVD [350 Restarting at 122736640. Send STORE or RETRIEVE..]
+  16:51:55.431 FTP SENT [RETR BIGFILE]
+  16:51:55.469 FTP RCVD [150 Opening BINARY mode data connection for BIGFILE..]
+
+This worked perfectly, as far as I can tell; the FT display picked up in the
+right place; the thermometer, percent done, and estimated time remaining
+were the same as when we left off last time.  I did the same thing several
+more times, everything was OK.  It would have taken a really long time to
+let this run to completion, but I think this demonstrates that Scott's
+symptoms are server-dependent.  No changes.  6 July 2006.
+
+Checked current code on VMS 8.2-1 on IA64 / UCX 5.5, builds fine.
+No changes.  Updated listing at HP.  6 July 2006.
+
+Checked FTP GET of large file in ASCII mode against Tru64 FTP server.  It
+was fine, and there was no delay in the server's response to our SIZE command
+(as there would be if it were scanning the entire file to count how many
+bytes would be required to send it in text mode).  7 Jul 2006.
+
+Tested FTP PUT big file against Tru64, OK.  Ditto FTP RESEND big file:
+
+  C-Kermit>resend BIGFILE
+   PUT BIGFILE (binary) (3000000001 bytes)---> PASV
+  227 Entering Passive Mode (15,170,178,171,13,186)
+  ---> SIZE BIGFILE
+  213 343211280
+  ---> MDTM BIGFILE
+  213 20060707141243
+  ---> APPE BIGFILE
+  150 Opening BINARY mode data connection for BIGFILE (128.59.59.56,45470).
+
+Made REPUT a synonym for RESEND.  ckuusr.c, 7 Jul 2006.
+
+Added FTP REPUT and FTP RESEND since previously there was no FTP-prefixed
+command for recovering uploads, only the regular RESEND command, which might
+not have been obvious to people.  ckcftp.c, 7 Jul 2006.
+
+Added help text for FTP RESEND and REPUT and amended RESEND help text.
+ckcftp.c, ckuus2.c, 7 Jul 2006.
+
+Changed name of \fpicture() to \fpictureinfo() and added help text.  By the
+way, ImageMagick can do this too: identify -format "%w %h" dscf0520.jpg.
+The advantage of having it in Kermit is that not everybody has ImageMagick.
+ckuus[24].c, 7 Jul 2006.
+
+Changed the numeric comparisons = < > <= >= != to allow long integers by
+changing the data type to CK_OFF_T, etc.  ckuus6.c, 7 Jul 2006.
+
+Noticed that \fkeywordvalue(foo=this is a string) only kept the first word.
+Fixed it to keep the whole definition.  Also added \fkwvalue() as a briefer
+synomym.  ckuus4.c, 7 Jul 2006
+
+Sometimes we want to check if a file's status before we've FOPEN'd it, in
+which case the channel variable is likely to be empty and \f_status(\%c)
+would get an error.  Making the obvious change didn't fix this, however.  It
+turns out that the function evaluator failed to adjust argn (argument count)
+when trailing arguments were empty, and argn was being used in this case,
+and probably others, to test whether an argument existed.  I added code to
+adjust argn to reflect the number of aruments up to and including the
+rightmost non-empty one.  ckuus4.c, 7 Jul 2006.
+
+Fixed \fstripb() to not dump core if second argument is missing.
+ckuus4.c, 7 Jul 2006.
+
+Discovered that it was not obvious what pattern to use to match strings
+enclosed in square brackets.  "if match [abc] \[*\]" didn't work.  Neither
+did various other tricks like NCRs for the brackets.  However, "if match
+[abc] \\[*\\]" does work.  Trying to fix this would no doubt break 100 other
+things, so let's call it a feature.  7 Jul 2006.
+
+Added \fgetpidinfo(n) to return info about a process ID; for now it simply
+returns 1 if the process is alive and 0 if not (or -1 if the argument is
+bad or missing or on any kind of error).  ckuusr.h, ckuus[24].c, 7 Jul 2006.
+
+The "where-did-my-file-go" message seemed to be ending with a LF rather
+than CRLF, probably because the terminal modes had not yet been restored,
+leaving the next prompt hanging below it, rather than on the left margin,
+if C-Kermit exited immediately after the transfer.  Fixed by changing
+all \n's to \r\n's in wheremsg(): ckcpro.w, 8 Jul 2006.
+
+Added \v(lastkwval) so we can retrieve programmatically the keyword most
+recently processed by \fkeywordval().  ckuusr.h, ckuus4.c, 9 Jul 2006.
+
+--- Dev.20 ---
+
+Added #ifdef SV68, #include <unistd.h>, #endif because Unix System V/68 on
+Motorola choked on the SEEK_CUR reference without it.  ckuus4.c, 10 Jul 2006.
+
+Make \fkeywordval(xxx) undefine xxx (i.e. when a keyword is given with no
+value).  This way command-line keywords will always override preexisting
+default definitions, whether they have a value or not, which makes it easier
+to parse command lines like "foo=bar blah xx=yy".  ckuus[24].c, 12 Jul 2006.
+
+On 29 Nov 2005 I changed IF KERBANG to solve a problem (see entry for that
+date), but introduced a new one; namely that you can't have (e.g.)  a FATAL
+macro that uses IF KERBANG to decide whether to EXIT all the way or STOP
+back to the prompt.  Changed it again, this time to require not that the
+command level be 1, but that the command *file* level be 0 (i.e. that we are
+in the top-level command file, irrespective of the command or macro level,
+but not in a subfile).  ckuus6.c, 12 Jul 2006.
+
+It is unhelpful when Kermit gets a syntax error in the middle of a big
+compound statement block (e.g. FOR or WHILE loop) and dumps out the whole
+thing in an error message.  I changed the two places where this can happen
+to call a new routine that, instead of dumping out the entire cmdbuf,
+checks its length first and if it's more than a line long, truncates it
+and adds an ellipsis.  ckuus6.c, 12 Jul 2006.
+
+The new RENAME command didn't give very good error messages, e.g. if the
+filespec didn't match any files.  Fixed in dorenam(): ckuus6.c, 12 Jul 2006.
+
+Fixed DIR /TOP to work if the /TOP:n argument was omitted, defaulting
+to 10.  domydir(): ckuus6.c, 12 Jul 2006.
+
+Added DIR /COUNT:v to count the number of files that match the given
+criteria and store result in the variable v.  ckuusr.h, ckuus[r26].c,
+24 Aug 2006.
+
+Added HDIRECTORY as an invisible synonym for DIR /SORT:SIZE /REVERSE.
+Can be used with other switches, of course, so (e.g.) HD /TOP shows the
+ten biggest files.  ckuusr.h, ckuus[r26].c, 24 Aug 2006.
+
+DIR /FOLLOWLINKS and /NOFOLLOWLINKS always did the same thing; the switch
+was ignored, a symlink is always followed.  Fixed in ckuus6.c, 24 Aug 2006.
+
+Added DIR /NOLINKS, which means don't show or count symlinks at all.
+ckuusr.h, ckuus[r26].c, 24 Aug 2006.
+
+Build on Solaris 9 and NetBSD 3.0, 24 Aug 2006.
+
+Added a missing definition for LOCK_DIR in the Linux HAVE_BAUDBOY case,
+suggested by Gerry Belanger.  ckutio.c, 6 Oct 2006.
+
+Suggested by Jim Crapuchettes: \v(dialmessage) is the text string
+corresponding to \v(dialstatus).  ckuusr.h, ckuus4.c, 6 Oct 2006.
+
+Soewono Effendi sent code for exit sequence to leave DTR on; this amounted
+to unsetting HPUCL in c_cflag.  I did it a simpler way, hopefully portable
+to all Unixes, but who knows at this late date.  The code is inside
+#ifndef CK_NOHUPCL..#endif in case it causes trouble.  It is executed if
+SET EXIT HANGUP is OFF and a serial port was open at the time Kermit exits
+(or closes it explicitly).  ttclos(): ckutio.c, 6 Oct 2006.
+
+Built on Solaris9/Sparc; FreeBSD 6.2/AMD64; NetBSD 3.0/i386; HP-UX 11i v2;
+SCO OSR6.00.
+
+--- Dev.21 ---
+
+Added netbsd+openssl target to makefile.  Built OK (NetBSD 3.0, OpenSSL
+0.9.7d) except with some warnings in ck_crp.c.  Connects and logs in OK to a
+secure site.  10 Oct 2006.
+
+Added a debug statement to ftp_hookup() to record the TCP port that was used.
+ckcftp.c, 11 Oct 2006.
+
+Built with OpenSSL 0.9.7l on Solaris 9.  Built with OpenSSL 0.9.8d on
+Solaris 9; connects and logs in to a secure site.  11 Oct 2006.
+
+The new RENAME command didn't work if both the source and destination names
+included directory segments, e.g. "rename /tmp/foo ~/bar" (see notes of
+4 May 2006).  This was fixed in renameone() by a special case in which
+the second argument is given but it is a filename, not a directory name.
+ckuus6.c, 11 Oct 2006.
+
+Fixed unguarded reference to dialmsg[] for \fdialmessage(), noticed by
+Gerry Belanger.  ckuus4.c, 12 Oct 2006.
+
+Added a TOUCH command that does what UNIX touch does: creates the file if it
+does not exist, updates the timestamp if it does.  If a wildcard is given,
+it operates only on existing files.  It shares the DIRECTORY command parser,
+so all the same file selection switches can be given.  ckuusr.[ch],
+ckuus[26].c, 12 Oct 2006.
+
+PeterE noticed that if you FOPEN a file, do some seeks or reads, then FCLOSE
+it, then FOPEN it again (or open a different one), some of the old
+information is still there (e.g. current line number).  This is an artifact
+of the changes of May 4th.  Now the file closing and opening routines are a
+bit more careful about scrubbing and initializing the file info struct.
+ckuus7.c, 12 Oct 2006.
+
+--- Dev.22 ---
+
+Built OK on Red Hat Linux AS4 with both "make linux" and "make linuxnc". 
+15 Oct 2006.
+
+DIRECTORY /BRIEF ignored file selection switches and always listed all
+files.  This was because of how I cleverly called filhelp() (the routine
+that lists matching files when ? is typed in a filename field) and, of
+course, filhelp() doesn't know anything about the DIRECTORY command's file
+selections.  Changed filhelp() to accept all the args needed for passing
+along to fileselect(), renamed it to xfilhelp(), and made a filhelp() stub
+that chains to xfilhelp() with null selections.  ckcker.h, ckucmd.[ch],
+ckuus6.c, 29 Nov 2006.
+
+SHOW CONNECTION for an SSH connection said the connection type was "NET"
+rather than "SSH".  Fixed in dolognet(): ckuus3.c, 29 Nov 2006.
+
+SHOW CONNECTION didn't show the TCP port number.  This command works by
+parsing the current connection log entry string, which doesn't have a field
+for this, but which sometimes shows the port number as part of the hostname
+(but more often not).  Added code to dolognet() to log the TCP port number,
+if known.  This involved adding a gettcpport() function to ckcnet.c.
+ckcnet.[ch], ckuus3.c, 29 Nov 2006.
+
+This was impossible: def \%1 upper, echo \f\%1(abc) -- i.e. to "compose" a
+function name.  Fixed in zzstring().  But note that it's still not possible
+to do this: def \%1 \fupper, echo \%1(abc) -- because at the point where
+"\fupper" is encountered, which is automatically fed to fneval(), the
+argument list hasn't been read yet.  ckuus4.c, 29 Nov 2006.
+
+The meaningless Lisp command (=) would cause Kermit to hang.  Due to some
+idiosyncracy in the parser, it would see this as ((=) and would go into
+"wait for the closing paren" mode.  There was already a hack in the code to
+compensate for this, but it didn't work.  I fixed the hack but I don't
+understand the real problem.  Anyway, comparing Kermit with real (Franz)
+Lisp I discovered that comparison operators do not require two arguments, as
+Kermit has been doing, although they do require at least one.  I changed
+Kermit to not require two, so now all the comparison predicates behave
+exactly like Franz Lisp, including getting an error if there are no args).
+ckuus[r3].c, 29 Nov 2006.
+
+From to-do list: Make a way to inhibit pattern matching in SWITCH labels.
+It's already there; just quote the wildcard characters; the only trick is
+that for some reason (such as that SWITCH is really an internally defined
+macro), a double quote is needed:
+
+  switch \%1 {
+    :a\\*z, echo literally "a*z", break
+    :abcxyz, echo literally "abcxyz", break
+    :a*z, echo a...z, break
+    :default, echo NO MATCH
+  }
+
+In first case, the asterisk is taken literally; in the third it's a
+metacharacter and the label matches any string that starts with 'a' and
+ends with 'z'.
+
+Array initializion would quit early if any initializers were undefined,
+e.g. "decl \&a[] = \%a \%b \%c" would stop at the first element if \%b
+was not defined, even though \%c might be defined.  Fixed in dodcl():
+ckuusr.c, 30 Nov 2006.
+
+DIR /ARRAY:a filespec, when the filespec does not match any files,
+terminates with the array undeclared.  It would be better to return a
+declared but empty array (\&a[0] = 0).  The code is already there to do
+that, but isn't working.  And yet "declare \&a[0]" does indeed create a
+0-element array ("show array" shows a dimension of 0).  Turns out there were
+two problems; one was the careless recycling of a local variable ("array"),
+resulting in failure to create \&a[] (but not any other array).  Fixed in
+domydir(): ckuus6.c, 30 Nov 2006.
+
+The other problem was that dclarray(), when called with an array name and a
+dimension of zero, does two different things depending on whether the array
+already existed.  There is still a fair amount of confusion about whether a
+dimension of 0 indicates an array with 1 element (as it should) or a
+nonexistent array.  We call dclarray() with a size of 0 to undeclare an
+array but we also need to able able to declare an array with only element 0.
+I changed dclarray() to treat a negative dimension as a command to destroy
+the array, and 0 or positive as a command to create the array with the given
+dimension.  ckuus[r56].c, 30 Nov 2006.
+
+Next problem: when chkarray() returns 0, this should not be interpreted to
+mean the array does not exist.  Looks like the only place this happened was
+in \fcontents(); fixed in ckuus4.c, 30 Nov 2006.
+
+If we include file selectors with DIR /ARRAY:&a and some of the files that
+match the given filespec but don't fit the selectors, the array's dimension
+is bigger than its number of elements.  Added code at the end of domydir()
+to resize the array so \fdim() returns the number of filenames in the array,
+and also made sure that element 0 contains that number too.  ckuus6.c,
+30 Nov 2006.
+
+This would be a nice elegant way to loop over a bunch of files, if it worked:
+
+  for \%i 1 \ffiles(*) 1 { rename \fnextfile() xxx_\flpad(\%i,3,0) }
+
+But in this loop, Kermit skips every other file (beginning with the first)
+and then runs out of files halfway through the loop.  Why?  Because in
+commands like RENAME and DELETE, the filename parser is in a chained FDB
+with the switch parser.  First the switch parser, cmswi(), gets its hands on
+\fnextfile(), passing it through the evaluator and thus getting the first
+filename, which it then sees is not a switch, so now the field is parsed by
+the next parser in the chain, cmifi(), which causes \fnextfile() to be 
+executed again.  In fact, the FOR loop has nothing to do with; the same
+thing happens like this:
+
+  void \ffiles(*)
+  delete \fnextfile()
+
+This deletes not the first file, but the second one.  Obviously users can be
+told not to refer to \fnextfile() in chained-fdb fields:
+
+  for \%i 1 \ffiles(*) 1 { .f := \fnextfile(), delete \m(f) }
+
+but this is hardly intuitive.  I had some clever ideas of how to make
+\fnextfile() work as expected in this context but it's way too much magic.
+Better to simply document that \fnextfile() is "deprecated" and the array
+format should be used:
+
+  for \%i 1 \ffiles(*,&a) 1 { delete \&a[\%i] }
+
+The difference is, an array element doesn't change every time it's referred to!
+
+Added a /PRESERVE switch to the COPY command to preserve the timestamp and
+permissions of the file.  I did this using the Kermit APIs so it should work
+for any version of C-Kermit or K95.  ckuus[26].c, 30 Nov 2006.
+
+Added COPY /OVERWRITE:{ALWAYS,NEVER,OLDER,NEWER} to control name collisions
+when copying across directories.  ckuus[26].c, 1 Dec 2006.
+
+--- Dev.23 ---
+
+Fixed a bug in SET TELNET PROMPT-FOR-USERID, SET AUTH KERBEROS[45] PROMPT,
+and SET AUTH SRP PROMPT in which the user's string was compared with a
+literal (s == ""), reported by Pavol Rusnak.  Worse, empty strings (if the
+test succeeded) were turned into null pointers, and then fed to strlen().
+Fixed in ckuus3.c, 5 Dec 2006.
+
+Added an optional 4th argument to \findex(), \frindex(), \fsearch(), and
+\frsearch(): the desired occurrence number of the searched-for string.
+\frsearch() was a bit tricky.  ckuus[24].c, 7 Dec 2006.
+
+Added \fcount(s1,s2) to tell the number of occurrences of s1 in s2.
+ckuus[24].c, 8 Dec 2006.
+
+Added \ffunction(s1) to tell if a given built-in function is available.
+ckuus[24].c, 8 Dec 2006.
+
+Changed RENAME /COLLISION:PROCEED to be /COLLISION:SKIP, which is clearer.
+ckuus[26].c, 8 Dec 2006.
+
+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.  ckuusr.[ch],
+ckuus4.c, 8 Dec 2006.
+
+There was 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 to GMT changes the date, the variables for day, month, and
+year (which are used later) were not updated, and the final result was a day
+off.  Fixed in cmcvtdate(): ckucmd.c, 10 Dec 2006.
+
+Built OK with SSL/TLS.  Tested with the POP script, found that I broke INPUT
+when adding the /COUNT feature; there was a path through the code that could
+leave the "anychar" variable unset and therefore random.  Fixed in
+doinput().  The POP script, which does not use /COUNT, works again and so
+does a new CGI script, which does use /COUNT.  ckuus4.c, 10 Dec 2006.
+
+Supplied a missing comma in the help-text array for HELP SET TERMINAL, which
+resulted in bad formatting in K95 around SET SNI-FIRMWARE-VERSIONS.
+ckuus2.c, 10 Dec 2006.
+
+Made "help locus" a synonym for "help set locus".  ckuusr.[ch], ckuus2.c,
+11 Dec 2006.
+
+This morning the Columbia FTP server was malfunctioning in a perfect way
+for me to implement and test an FTP timeout mechanism.  The server would
+close the data connection after sending the file, but the client never saw
+the close and was stuck forever in a recv().  I added code to do a select()
+on the data connection prior to entering the recv(), with a timeout on the
+select() that the user can establish with SET FTP TIMEOUT.  Built and tested
+on Solaris 9, clear-text FTP.  Also built cleanly for FTPS and tested
+against a server that does not hang; I don't have access to an FTPS server
+that would tickle the timeout code.  ckcftp.c, 11 Dec 2006.
+
+--- Dev.24 ---
+
+Fixed a bug in the INPUT /COUNT: parser: the array of search strings was
+never initialized, which didn't matter before, but with /COUNT:, if the
+first element was not a NULL pointer, we'd treat it as a search string, and
+then if it happened to match something in the input stream, the operation
+would stop before the count was exhausted.  Fixed by (a) initializing the
+array, and (b) ignoring any search strings if /COUNT: was given.  ckuusr.c,
+13 Dec 2006.
+
+Removed a debug() statement from zsattr() that suddenly started making some
+version of gcc complain, reported by Gerry Belanger.  ckufio.c, 13 Dec 2006.
+
+--- Dev.25 ---
+
+Some casts for the 3 interior args of the new select() call in ckcftp.c
+for HP-UX 9.  14 Dec 2006.
+
+Changed \fkeywordvalue() to accept a string rather than a single word
+as its second argument, so that more than one separator could be specified,
+and to return -1 on error, 0 if it found nothing, 1 if given a kewyord but
+no value, and 2 if there was a keyword and a value.  dokwval(): ckuus[24].c,
+14 Dec 2006.
+
+Checked FTP timeout on command channel with FTP DIRECTORY of a big directory
+using a path into our ftp server that preserves the hanging behavior.  The
+timeout was actually working, but the failure condition wasn't propogating
+back to the user, and there was no error message.  Fixed in doftprecv2() and
+failftprecv2(): ckcftp.c, 15 Dec 2006.
+
+Added the obvious timeout checks for FTP uploads, but I have no way to test
+the code since our misbehaving FTP server does not hang when receiving
+files, only when sending them.  But uploads work both with and without a
+timeout set, so at least no harm is done.  ckcftp.c, 17 Dec 2006.
+
+When downloading with FILE DESTINATION NOWHERE (= /CALIBRATE), Kermit still
+checked the size of the incoming file and refused it if there wasn't enough
+free disk space, on platforms (such as VMS) where zchkspa()) actually works;
+reported by Bob Gezelter.  ckcfn3.c, 18 Dec 2006.
+
+Built on Mac OS X 10.4.8 and NetBSD 3.1_RC3, all OK.  19 Dec 2006.
+
+--- Dev.26 ---
+
+Built on VMS 7.3-2/Alpha.  Had to squelch a couple compiler warnings by
+changing some ints in the new \fpictureinfo() code from unsigned to signed,
+and fix a typo in the prototype for the new gettcpport() function.
+ckcnet.h, ckuus4.c, 22 Dec 2006.
+
+--- Dev.27 ---
+
+Parameterized pty routines and all references to them for file descriptor,
+rather than to use global ttyfd, thus allowing ptys to be created for
+different purposes.  Tested on Solaris 9 and Mac OS X 10.4.8, with "set host
+/connect /pty emacs" (fine in both cases), and (more to the point) "set host
+/connect /pty kermit" -- here we make a connection from one Kermit process
+to another and transfer a file; works fine and wasn't especially slow either;
+a good sign.  ckcdeb.h, ckutio.c, ckupty.c, 22 Dec 2006.
+
+Created a new version of ttruncmd() called ttyptycmd(), which works by
+calling do_pty() to get a pty to run the command on, and then in a loop,
+reads from the pty and writes to the net and reads from the net and writes
+to the pty, using select() to which of those it should do on each pass.
+First cut just uses single-byte reads and writes.  Tested using Kermit
+itself as an external protocol.  Works but slowly: 6000cps.  Zmodem doesn't
+work at all.  ckutio.c, 24 Dec 2006.
+
+Changed single-character read() and write() to buffered reads and writes,
+with ttxin() and ttol() used for network i/o.  Using Kermit as the external
+protocol, this gives 450Kcps (about 1/3 normal on this connection).  
+
+But now there's a problem: the loop doesn't know when to stop.  How does it
+know when the process that is running on the pty has exited?  With single
+character read()'s that are executed unconditionally when select() says the
+pty has data waiting, as in the first pass, I get EIO if there actually
+isn't any, and can exit the loop.  But now, to avoid blocking, I call
+in_chk() to see how much data is waiting, and I don't try to read anything
+if it says nothing is waiting.  If the process associated with the pty file
+descriptor has terminated, in_chk() would presumably get some kind of error,
+but it doesn't.  I changed do_pty to return the pid of the fork where it
+execs its command so we can check the pid with kill(pid,0) when in_chk() of
+the pty says 0, but this doesn't help either; it seems like the process is
+not exiting, but of course it is.
+
+I could not find any legitimate way to test when the pty fork terminated.
+Select() always says the pty file descriptor was ready, no matter what.
+Select() never reports an exception on the pty file descriptor;
+in_chk(ptyfd) returns 0 and not an error.  read(ptyfd,...) gets 0 but not an
+error.  fcntl(ptyfd,...) doesn't get an error.  Finally I tried
+write(ptyfd,c,0) and this indeed gets EIO (i/o error).  With this, using
+Kermit as the external protocol works fine in Solaris but I tend to think
+this trick will not be very portable (it isn't).  24 Dec 2006.
+
+Made ttptycmd() use a more intelligent buffering scheme, fixed a few things
+about how I was setting up the select() call that should address some of
+yesterday's problems.  Still doesn't work but it's progress.  A: 25 Dec 2006.
+
+Debugging yesterday's code...  Still, the error conditions are never set,
+we never detect when the pty closes.  In Solaris, if select() says ptyfd is
+ready to read but in_chk() says there are no characters there, we can treat
+this as a loop-exit condition.  But in NetBSD, in_chk() always says 0 when
+used on a pty (but works OK on a serial or net connection).
+
+Realized I could not use in_chk() on the pty because there is too much
+baggage with the communication path -- myread(), etc etc) -- so I replaced
+this with a simple ioctl(ptyfd,FIONREAD,&n).  This works fine in Solaris but
+always returns 0 in NetBSD, despite what the man page says (i.e. that this
+function can be used on any file descriptor).
+
+OK, let's see.... select() does not return useful results.  It says
+characters are waiting on ptyfd when they are not, and it never detects the
+closure of the pty.....  Well of course not, because we are the ones who
+have to close it.  Just because the process has stopped doesn't mean the pty
+is closed.  So we're back to square one, how do we know when to close it?
+ckupty.c seems to keep the process ID in a global variable, pty_fork_pid
+(which is not the same as the pid now returned by do_pty(), which is
+useless, but I don't understand why).  But it doesn't matter because when we
+kill(pty_fork_pid,0), we still get no error of any kind, even after we know
+the process has exited.  I am completely flummoxed.  select() lies, and even
+if it didn't, there is simply no completion criterion.  In the loop,
+select() always says that the pty is ready to read.  To be continued.
+26 Dec 2006.
+
+Back to Square One, single-byte reads and writes.
+
+ . This works for both ripple and Kermit.
+ . Doesn't work for Zmodem but we'll deal with that later.
+ . In this case FD_ISSET(ptyfd) is still true after pty closes.
+
+But the ensuing read() gets EIO so we know the pty is gone.  That means the
+same thing should happen in the buffered version, no?  Yes; I went back to
+the buffered version and replaced all the other nonworking tests by a
+blocking read of 1 byte on the pty and this detects the termination.  Now:
+
+ . ripple works perfectly (of course it's only one-way).
+ . Kermit fails
+
+Let's call the remote, forked, redirected, external Kermit A and its
+local partner B.  A sends its S-packet, B receives it OK and Acks.
+A apparently does not receive the ACK in time, so sends the S again, but OK.
+followed immediately by the F.  B Acks the F.  A sends the A, B Acks it.
+But now A sends a piece of the previous F packet and the the first piece
+of a D packet.
+
+Clearly the buffering is messed up.  Sure enough, there was an extraneous
+statement incrementing a read pointer in a write section.  Removing that
+cleared up the problems with Kermit, now we can send and receive substantial
+files efficiently in remote mode.  Zmodem seems to work too, except that at
+the beginning a bunch of "**B0800000000022d"'s are stuffed into Kermit's
+command buffer, so after the transfer we get some error messages.
+
+In local mode, over a Telnet connection, Kermit works fine.  Zmodem works
+OK too except it doesn't finish right, so at the very end rz on the far end
+is still waiting for something; if I cancel out of it with ^X^X^X^X^X, it
+deletes the file.  So there still is something wrong with the termination
+test.
+
+Also you don't see anything on your screen when running Kermit or Zmodem
+this way.  That's to be expected, since they are using stdio for the
+transfer, so they can't also be displaying progress or other messages.
+
+Built this on NetBSD again...  Seems to work this time, but has trouble
+finishing, like Zmodem.  Hmmm, on closer examination, it turns out that
+since in_chk() always returns 0 on the ptyfd, we fall into our new
+single-byte read code, so it's really slow, like 10K cps on a connection
+where 1M is the norm.  27 Dec 2006.
+
+Switched the pty from buffer peeking (FIONREAD) and blocking reads to to
+nonblocking reads (O_NONBLOCK / O_NDELAY).  Works just fine on NetBSD except
+now we no longer get EIO at the end when trying to read from the pty process
+that has exited.  In fact, we're back to square one again.  not ioctl(), not
+fcntl(), not select(), not even read() gets an i/o error after the pty
+process exits.  But in NetBSD, we have to use nonblocking reads because ...
+Hmmmm, maybe switch the fd between blocking and nonblocking for the test...
+Nope, NetBSD seems to be hopeless (later, Ed Ravin confirmed that similar
+problems have been observed with other applications that try to do this).
+
+Switching to Linux, I see that yesterday's Solaris code (blocking reads)
+works exactly the same way on Linux.
+
+Tried today's O_NDELAY method on Solaris.  It works perfectly.  And then I
+moved this one to Linux and it works perfectly there too.  Except in both
+cases we have the wierd thing with Zmodem at the end, but I think that's
+because rz/sz don't use standard i/o.  On NetBSD, it still hangs at the end.
+
+Turns out that testing the pid works in NetBSD, even though it didn't in
+Solaris.  Turns out read() gets an i/o error in Solaris and Linux but not
+in NetBSD.  So checking the read result first, and then checking the pid
+if read() got zero bytes catches all three.  28 Dec 2006.
+
+Now the question of return code.  In the original ttruncmd() function, we do
+a fork() and a wait().  When the external protocol program finishes, wait()
+gives us its return code and we can pass it on through \v(pexitstat) as well
+ttruncmd's own return code.  But ttptycmd() has to interact with the pty
+continuously, so it can't just sit back and wait() for it.  Instead we have
+to detect when the process has exited and then call waitpid() on the fork
+pid, before shutting down the pty.  Tested on Solaris using Kermit as the
+external protocol and then inducing failure, or letting it run to
+completion.  FAILURE and SUCCESS set appropriately in each case.  Tested
+with Zmodem too, works OK except for the aforementioned cosmetic glitch at
+the end.  Tested on NetBSD, all OK.
+
+To make K5 connection to Panix from Spam:
+
+ set telnet debug on
+ authenticate K5 init /realm:PANIX.COM /password:xxxxx
+ set host shell.panix.com 23 /k5login
+
+Good...  Now I try to send a file from Spam to Panix over the K5 connection
+using Kermit itself as the external protocol.  It fails.  Inspection of the
+debug log on the far side shows that the S-Packet was received correctly,
+good!  This means we are reading the clear-text S-Packet from the external
+Kermit program, and that ttol() is encrypting appropriately.
+
+The remote Kermit sends the Ack and goes to read the next packet: ttinl()
+calls myfillbuf() and:
+
+  SVORPOSIX myfillbuf calling read()
+  SVORPOSIX myfillbuf=0                <-- read returns 0
+  SVORPOSIX myfillbuf ttcarr=2
+  SVORPOSIX myfillbuf errno=0          <-- and reports no error
+  HEXDUMP: mygetbuf read (-3 bytes)
+  mygetbuf errno=0
+  ttinl myread failure, n=-3
+  ttinl myread errno=0
+  ttinl non-EINTR -3[closing]
+
+This happens because myfillbuf() deliberately returns -3 when read() gets 0
+bytes.  I don't understand why this happens but the real problem is yet to
+come.  The local Kermit (the one that has made the secure connection and is
+running the external protocol through ttptycmd()) eventually figures out
+that the transfer failed and when we reconnect, we get total garbage -- the
+encryption either stopped happening, or got out of sync.
+
+Looking at the local debug log, ttol() is doing its job, converting the
+initial "kermit -r\13" from plaintext to cyphertext, as shown by the
+hexdumps.  Then it enters ttptycmd()...  Hmmmm, wait, how can it send the
+"kermit -r" before it starts the external protocol?  Never mind, worry about
+that later...  Anyway, ttptycmd() says:
+
+  ttptycmd loop top have_pty=1
+  ttptycmd loop top have_net=1
+  ttptycmd FD_SET ptyfd in
+  ttptycmd FD_SET ttyfd in
+  ttptycmd nfds=5
+  ttptycmd select=1
+  ttptycmd FD_ISSET ttyfd in
+  ...
+  ttptycmd in_chk(ttyfd) n=11
+  ttptycmd ttxin n=11
+
+ttxin() asks for 11 bytes, myfillbuf() gets 11 bytes, and hexdump() shows
+the cyphertext, there doesn't seem to be any decrypting going on.  Hmmm, it
+looks like the regular code calls ttinc() in a loop, rather than ttxin().
+Maybe ttxin() doesn't have decryption hooks.  No, that's not it, the code is
+there, but the Kermit packet reader does not use ttxin(), it uses ttinl().
+But of course we can't use that for external protocols because it's designed
+only to read Kermit packets.  Substituting a loop of ttinc()s for the ttxin()
+call fixes things (and stangely enough, it seems to be faster).  And now we
+have our first external protocol transfer over a secure connection (external
+Kermit program, Linux over Kerberos 5 to NetBSD).  Zmodem worked too for a
+short file but "something happens" with longer ones.  29 Dec 2006.
+
+New makefile target for Linux with Kerberos 5, linux+krb5, that doesn't
+include anything extra from SSL or other security methods (but apparently it
+is still necessary to include -DOPENSSL_097 in order to get the right names
+for the DES routines?).  Ditto netbsd+krb5 for NetBSD, except in this case
+-DOPENSSL_097 is not necessary.  makefile, 30 Dec 2006.
+
+Note to myself: On Panix:
+
+  export LD_LIBRARY_PATH=/usr/local/kerblib
+  make netbsd+krb5 "K5LIB=-L/usr/local/kerblib" "K5INC=-I/usr/local/include"
+
+Can't telnet-k5 from newly built Kermit on NetBSD; partway through the
+negotiations, just after "TELNET RCVD SB ENCRYPTION SUPPORT DES_CFB64
+DES_OFB64 IAC SE" it dumps core.  The last two lines in debug.log after
+this are:
+
+  tn_sb[len]=5
+  encrypt_support[cnt]=2
+
+Rebuilding with -DOPENSSL_097 doesn't change anything.  Ed Ravin said they
+have two different Kerberos installations, Heimdahl and MIT; maybe some
+mixup between the two explains the problem (Jeff concurs). The core dump
+occurs in ck_crp: encrypt_support():
+
+   debug(F100,"XXX ep not NULL","",0);
+   type = ep->start ? (*ep->start)(DIR_ENCRYPT, 0) : 0; <-- Here
+   debug(F101,"XXX new type","",type);
+
+Anyway, I can log in with Kerberos 5 to Panix OK from Columbia (sesame)
+using 8.0.201.  So let's try to resurrect the Solaris version with everything:
+
+  solaris9g+krb5+krb4+openssl+shadow+pam+zlib
+
+I hunted around to find where the current library and header file
+directories were...  Last time I tried this (March 2006) it bombed, not
+finding libdes.  Instead we have /opt/kerberos5125/lib/libdes425.a.  Made a
+new cu-specific target that includes this; now we get farther; it blows up
+in ckcftp.c with tons of errors and warnings, which we can worry about
+later.  Building again with -DNOFTP, it gets to ckuath.c (the first security
+module) and:
+
+  ckuath.c:151:18: error: krb5.h: No such file or directory
+  ckuath.c:152:21: error: profile.h: No such file or directory
+  ckuath.c:153:21: error: com_err.h: No such file or directory
+  ckuath.c:176:28: error: kerberosIV/krb.h: No such file or directory
+  In file included from /opt/openssl-0.9.8d/include/openssl/des.h:101,
+                  from ckuath.c:219:
+
+Found krb5.h in /opt/kerberos5125/include/krb5.h, added a -I for this
+directory ...  Now we get lots of warnings in ckuath.c, but it completes OK,
+then we wind up bombing out in ck_crp.c; I don't know why -- there are all
+the same warnings (related to argument passing to DES functions), but no
+errors.  I have no clue.
+
+Tried to resurrect the solaris2x+krb4 target; this required changing -lkrb
+to -lkrb4 and -ldes to -ldes425.  Lots of warnings in ckutio.c, ckcnet.c,
+ckctel.c, then it bombs out in ckcftp.c because it can't find krb.h.  I
+found it, adjusted the -I flags, but now it bombs because krb.h itself
+#includes <kerberosIV/des.h>, which of course it can't find because the
+brackets mean it's looking in /usr/include/kerberosIV/, which, of course,
+the sys folks have removed.  Giving up on Solaris again.  Later, Jeff said
+"Solaris does not publicly export the krb5 libraries.  You need to build
+the MIT Kerberos libraries separately and link to them."  30 December 2006.
+
+Changed copyright date to 2007.  ckcmai.c, 1 Jan 2007.
+
+With Ed Ravin's help, successfully built C-Kermit with Kerberos 5 and
+OpenSSL (netbsd+krb5+openssl+zlib), but it does not make K5 connections; it
+gets hung up in the Telnet negotiations.  3 Jan 2007.
+
+Downloaded MIT Kerberos 5 v1.4.4 to Solaris 9, 54MB worth.  This is just so
+I can build a Kerberized C-Kermit for testing ttyptycmd().  Ran the
+configure program, got a few warnings but it didn't fail (should it?)  Did
+"make install", specifying a private directory but it failed immediately
+with "cannot stat libkrb5support.so.0.0: No such file or directory".
+OK, I tried.  3 Jan 2007.
+
+Made a new makefile target for Mac OS X, macosx10.4+krb5+ssl, ran it on Mac
+OS X 10.4.8.  It bombs out in ckcftp.c with: ckcftp.c:551: error: static
+declaration of 'gss_mech_krb5' follows non-static declaration
+/usr/include/gssapi/gssapi_krb5.h:76: error: previous declaration of
+'gss_mech_krb5' was here".  Ditto for gss_mech_krb5_old, gss_nt_krb5_name,
+and gss_nt_krb5_principal.  Tried again with -DNOFTP.  We get lots of
+warnings in the network modules, but they complete.  But ck_ssl.c bombed
+with a conflict between its own declarations of encrypt_output and
+decrypt_input and the ones in ckuat2.h; removed the prototypes from the
+latter (as Jeff advised) it built OK and it works OK too.  Built with FTP
+too, but with link-time warnings about the aformentioned gss_* symbols.
+#ifdef'd them out (gss_mech_krb5, gss_mech_krb5_old, gss_mech_name, and
+gss_mech_principal) for MACOSX, where these symbols are exported by the
+library.  Now it all compiles and links OK, and runs OK too.  3 Jan 2007.
+
+Spent a day hunting around for a version of Zmodem that would build and
+execute on Mac OS X, finally found one.  Now at last I could try a Zmodem
+external-protocol transfer over a secure connection.  But phooey, C-Kermit's
+pty support didn't work on this box.  Kermit finds master /dev/ptypa OK,
+then in ptyint_void_association() tries to open /dev/tty but gets ERRNO=6
+"device not configured" (which is apparently OK, because the same thing
+happens on other platforms where this works), then tries to open slave
+/dev/ttypa and gets ERRNO=13 "permission denied" because, indeed, I don't
+have r/w permission on the device.  Left a message.  4 Jan 2007.
+
+Changed TRANSMIT /BINARY output buffer size from 252 to 508 to avoid
+TCP fragmentation.  Need to add a SET command for this later.
+ckuus4.c, 5 Jan 2007.
+
+Found another Mac where the ptys weren't protected against me, make a K5
+connection and transferred a largish file with Zmodem with zero glitches,
+except it was kind of slow, 84K cps.  Well, we're doing single-character
+reads on the net (ttinc()'s instead of ttxin()).  Hmmm, but then I did it
+again and got 2.2Mcps.  Success was reported, but it actually didn't work;
+it only sent the first quarter of the file....  Oh well, at least now we
+have a testbed.  5 Jan 2007.
+
+Tried again, saw that the file is actually transferred instantly but then
+we're not picking up the protocol at the end.  Theory: after the transfer
+finishes, we come back to the prompt on the remote host, which means we have
+something to read from the net and write to the pty, but the pty has already
+exited.  AFTER THE PTY IS GONE, WE DO NOT WANT TO READ FROM THE NET ANY
+MORE.  Adding this test makes Kermit succeed right away when sending the
+same largish file, with a transfer rate of 4M cps, that's better.  But the
+rz program on the far end is evidently not receiving the goodbye handshake
+from the receiver, because it sits there foreever in its *B09002402009418
+mode until I ^X^X^X^X^X out of it, at which point it deletes the file it
+already received, not very helpful.  In the code, I read from the pty if the
+pty is open and there is room in the buffer.  This means that when we get to
+the end, either there is no room in the buffer (unlikely) or the last bit
+sent by sz before exiting was cut off when the fork closed.  Why do we get
+in this fix only with Zmodem and not with Kermit?
+
+In Mac OS X, after sz exits, we get ERRNO=5 if we try to write to the pty,
+but we still get no errors after that if we try to read from it.  Still,
+prior to this we did more than 20 unproductive nonblocking reads from the
+pty (no error, no bytes) without incident; there did not seem to be anything
+waiting.  In fact, the last thing we read from the pty were the text
+messages that are issued at the end of the transfer: "rz 3.73 1-30-03
+finished."  After which it pauses a second and spits out a message about
+UNREGISTERED COPY.
+
+Figured out how to build lrzsz, in hopes that the previous problems were
+with rzsz and crzsz's fiddling with file descriptors, but I get the same
+behavior.  Which is good, I guess, because if I can fix one, I fix them all.
+Or not...  Testing lrz by itself (not under C-Kermit), I see that it doesn't
+work at all with Kermit's own Zmodem implementation.
+
+OK, here's one problem: at the end of the transfer, the Omen Zmodems print
+stuff like "Please read the license agreement", Kermit dutifully reads this
+from the pty and sends it to the host, the host shell says "Please: command
+not found", issues its prompt again, which Kermit reads, feeds to the pty,
+and apparently the pty echoes it, so we send it back to the host, and there
+ensues an infinite loop of getty babble until the pty closes.  Now, there
+ought to be a way to make the external protocol shut up, like Kermit's
+-q(uiet) flag, but these are unregistered versions so you can't shut up the
+messages.  In fact, the transfer works, but the getty babble at the end
+ruins the experience.  Now I'm beginning to wonder how any of these programs
+ever worked as external protocols.  Hmmm, now that I try it, I see the
+same thing happens the old way, when using ttruncmd() rather than ttptycmd().
+
+Reading the crzsz documentation I see it says that messages come out on
+stderr.  OK, that's progress.  In ckupty.c I try redirecting 2 to /dev/null.
+Well good, this filters out the messages from csz, but we still get getty
+babble on the prompt.  In the debug log, we read the last bunch of stuff
+from net, 618 bytes of Zmodem stuff...   Now what happens?
+
+Zmodem on the remote exits, the host prints its prompt.  Kermit, of course,
+reads the prompt from the net, now come to the bottom of the loop and we
+have 7 bytes to write to the pty, and no error condition, so we continue the
+loop.  select() says that the pty is ready for writing.  We write the 7
+bytes and and get no error.  Loop again, this time select() says the pty has
+data waiting.  Sure enough we get the prompt back, and send it to the net,
+and thus begins the getty babble.  There are two causes for this:
+
+  1. crzsz does not exit immediately; it sleeps for 10 seconds after
+     printing its nag message.
+
+  2. During this interval the pty seems to be echoing what is sent to it.
+     csz is not echoing; I checked.  Anyway, removing the pause doesn't
+     seem to make a difference.
+
+ttptycmd() needs to:
+
+ . TELL the pty module to redirect stderr to /dev/null
+ . SET PTY TO NOECHO (master or slave?)
+
+Tried setting the pty to noecho:
+
+  termbuf.c_lflag &= ~(ECHO|ECHOE|ECHOK);
+
+and this seemed to stop the getty babble.  After the file transfer, I read
+back the prompt from the host shell, I write the prompt bytes to the pty;
+there is no error.  And now select() simply hangs forever (or times out if
+a timeout is set).  The question here is: why didn't writing to the pty
+produce an error?  And, because we never detect the pty has exited, we can't
+set a good return code.  5 Jan 2007.
+
+Moved pty fork testing to a separate routine, pty_get_status(), and 
+added a call to it from the place where we time out, in case the fork
+terminated; then we can get and return its status.  6 Jan 2007.
+
+Added calls to pty_get_status() to every place where we suspect a pty error,
+tried again with lrzsz, crzsz, and regular rzsz.  All three work, but in
+each case waitpid() indicates that the sz program gave exit code 1 (failure).
+ckutio.c, 7 Jan 2007.
+
+Changing the subject...  On my test system, every time I execute ttptycmd(),
+I get "permission denied" on /dev/ttyp3.  Then I run it again and get to
+ttyp4 which is OK.  I wanted to skip past any pty for which I lack
+permission and try the next without raising an error.  Added debugging code:
+
+  16:25:23.524 pty_getpty() pty master open error[/dev/ptyp0]=5
+  16:25:23.524 pty_getpty() pty master open error[/dev/ptyp1]=5
+  16:25:23.524 pty_getpty() pty master open error[/dev/ptyp2]=5
+  16:25:23.524 pty_getpty() found pty master[/dev/ptyp3]
+  16:25:23.524 pty_getpty() slavebuf [2][/dev/ttyp3]
+
+So it already was skipping past open errors; ttyp3 was opened successfully.
+The problem is that ptyp3 is rw-rw-rw-, but the corresponding master,
+ttyp3, is rw--r----.  It seems the code assumes that if the master can be
+opened, then so can the corresponding slave.  Unfortunately, the code is
+not structured to allow us to skip ahead to the next master if the slave
+can't be opened.  7 Jan 2007.
+
+Spent a couple hours trying to rearrange the code in the pty module to skip
+past inaccessible slaves but it was a rabbit hole, not worth it, backed off.
+8 Jan 2008.
+
+Tried an upload over a secure connection using lsz.  Unexpectedly, this time
+it worked; not only was the file (about 0.5MB) transferred correctly, but
+Kermit detected the fork's termination and got the pid's exit status, and,
+for the first time, correctly reported a successful transfer.  I have no
+idea why this works today and not yesterday.  More tests; it works most of
+the time.  It works with csz and with regular sz too.
+
+(days later...)
+
+ckucns.c seems to do the right thing; it recognize the ZSTART string,
+activates the Zmodem-Receive APC, and returns.  doconect() sees the APC and
+begins to execute it.  The RECEIVE command results in a call to the GET
+command parser, doxget() (IS THAT RIGHT?), then comes a ttflui(), which
+throws away a bunch of stuff.  Finally we get to ttptycmd(), we get a pty
+and run lrz in it, select() says stuff is waiting from the pty, but read
+returns 0, errno 0.  Skipping the ttflui() in doxget() if the protocol was
+not Kermit didn't seem to make difference.  ckuus6.c, 8 Jan 2007.
+
+The problem is that in this case, reads from the pty never get anything (no
+data, no error), write always gets an error.  It's as if the pty was not
+being set up right, or we're using the wrong file descriptor.  And if we
+skip the autodownload?  Same thing.
+
+OK, putting downloads aside for a moment, let's get uploads working as well
+as possible.  At this point we have the odd situation (at least in this
+configuration) that the upload succeeds, but now for some reason we are
+unable to read the exit status from the process, even though this was
+working before, so ttptycmd() returns 0 (failure), yet Kermit reports
+success.
+
+Well, it turns out that kill(pty_fork_pid,0) was gumming up the works.
+If we use only waitpid() all is well, I think.  waitpid() with WNOHANG
+returns -1 with status -1 errno 0 if the pid has not exited, and it returns
+the pid and status > -1 if the process has exited.  Fixed pty_get_status()
+to do it this way.  ckutio.c, 7 Jan 2007.
+
+Let's move this from Mac OS to NetBSD and see how it works.  Well, the file
+transfer was just fine, but then I used some sexps to calculate the elapsed
+time and transfer rate, and Kermit hung in dosexp().  Fine, ignoring that...
+The debug log shows that ttptycmd() gets the pty OK, master and slave, the
+i/o goes smoothly, and waitpid() does its job perfectly.  Solaris, same
+deal; ttruncmd() goes smoothly, but then the sexps afterward get "Arithmetic
+exception".  Turns out there was a BAD bug in dosexp() that allowed an
+integer division by 0 to occur under certain circumstances; it's always been
+there.  Fixed in dosexp(): ckuus3.c, 8 Jan 2007.
+
+After noticing a few problems running the pop.ksc script in production over
+the past year, rewrote \femailaddress() to be more reliable and a lot
+simpler.  ckuus4.c, 9 Jan 2007.
+
+Back to ttptycmd()...  When we left off, we could send but not receive.  Set
+up a test case using Kermit as the external protocol for receiving a short
+file.  If I SET STREAMING OFF and use short packets, it actually does work,
+so it's not a complete failure to function, but apparently a lack of flow
+control for the pty.  Began by completing the parameterization of the pty
+module, so it can be called for interactive use (fc 0) or for running
+protocols (1).  Confirmed that everything works at least as well as before
+(e.g. "set host /pty emacs" vs external protocols).  ckcdeb.h, ckutio.c,
+ckupty.c, 9 Jan 2007.
+
+Found in HP-UX "man 7 pty" a description of ioctl(fd,TIOCTTY,fc) which is
+exactly what we want: fc 0 turns off all termio processing and guarantees an
+ininterrupted, unmolested, flow-controlled stream of bytes in both
+directions.  This function also exists in Linux, but not in Solaris, NetBSD,
+or Mac OS X (TIOCNOTTY is not what we want, it does something else entirely).
+
+Another possibility is TIOCREMOTE, which "causes input to the pseudoterminal
+to be flow controlled and not input edited, regardless of the terminal
+mode".  This one exists in at least HPUX, NetBSD, Solaris, and Mac OS X.
+
+Solaris: builds OK, but at runtime we get ENOTTY ("Inappropriate ioctl for
+device").  By the time this happens, it's hard to tell from the code whether
+the fd we're using is for the master or the slave; TIOCREMOTE can be used
+only on the master.  Close inspection shows that I am indeed doing that;
+ptyfd as seen by ttptycmd() is truly the master, i.e. the /dev/ptyXX device,
+not the /dev/ttyXX device (the slave fd can't be seen at all, as it exists
+only in a separate fork).  OK, so now we know that TIOCREMOTE can't be used
+on Solaris.
+
+NetBSD: Somehow, whether as a result of today's fiddling or the phase of the
+moon, the code in pty_open_slave() that tries to open /dev/tty started
+failing on NetBSD ("Device not configured").  Changing it to be run only if
+fc == 0 (which doesn't seem to hurt anything), once again I get ENOTTY on
+the TIOCREMOTE ioctl.  Zmodem works but Kermit totally fails (the fork exits
+immediately with an exit code of 0, even though it didn't do anything).
+
+Mac OS X: Exactly the same sequence and results as NetBSD.
+
+Linux:  It did not execute the new ioctl at all; apparently the TIOC symbols
+are hidden or not exported or something.
+
+Where we stand:
+ . Downloads don't work
+ . Uploads got slow again
+ . Kermit doesn't work at all as an external protocol
+
+Actually if I take the debugging out it goes fast, but it doesn't finish.
+
+All today's work on ttptycmd() looks like a dead end.  To roll back to
+yesterday:
+
+  cp ckutio.c-20070108 ckutio.c
+  cp ckupty.c-20070108 ckupty.c
+  cp ckupty.h-20070108 ckupty.h
+
+or to continue with today's:
+
+  cp ckutio.c-20070109 ckutio.c
+  cp ckupty.c-20070109 ckupty.c
+  cp ckupty.h-20070109 ckupty.h
+
+Comparing Monday's and Tuesday's pty-related code, the differences are:
+ 1. Passing of function code to and among pty modules.
+ 2. Skipping the TIOCSCTTY ioctl and the open("/dev/tty") test.
+ 3. Attempting to put pty in TIOCTTY or TIOCREMOTE mode.
+
+Commenting out 2 and 3 should put us back where we were on Monday if the
+parameterization was done right.  And with this, on Solaris, downloading
+with Kermit external protocol works but slowly, 8K cps, with or without
+debugging.  Debug log does not show any obvious bottlenecks; select() takes
+anywhere between no time at all and 0.1 seconds to return.  If I increase
+the pty-net buffer size from 1K to 4K, the rate goes up to 55K cps.  If I
+make it 8K I get 136K cps.  With 16K I get 346K cps.  32K: 395K cps -- this
+last one isn't worth the doubling.  But at 24K I get 490K cps, sometimes
+twice that.  Let's stick with 24K for now.  Downloading with Zmodem (rzsz)
+works at the same rate, but now we're back to seeing the getty babble
+(Several "**B0800000000022d") at the end. 10 Jan 2007.
+
+Moving to Mac OS X, everything works the same as on Solaris, except I don't
+get the Zmodem getty babble there, not even with Omen rzsz.  Tested sends
+in both remote and local mode, the latter over a secure Kerberos 5 Telnet
+connection, using C-Kermit, rzsz, lrzsz, and crzsz, all good.  10 Jan 2007.
+
+Now we're back where we were yesterday morning, but with better throughput.
+The big issue then was receiving files.  But yikes, now it works!  Not only
+that, I got a transfer rate of 2.1M cps.  That's using Kermit protocol,
+streaming, and big (4K) packets.  Which didn't work before.  Not a fluke
+either, I uploaded bigger and bigger files up to 6MB, they all went
+smoothly, at rates between 1 and 2 MBps.  10 Jan 2007.
+
+Not so great in Zmodem land, however.  If I start the external-protocol
+receiver on the far end, escape back and start a Zmodem send... nothing.
+If I leave the remote C-Kermit at its prompt (where it supposed to recognize
+the Zmodem start string), still nothing.  On the other hand, if I do it
+with a script instead of by hand:
+
+  def xx output take blah\13, send /proto:zmodem \%1
+  
+it works, at least intermittently.  But that's in remote mode.  We won't be
+using this in remote mode.  In local mode, where we have a secure connection
+to another computer, it seems we can read from the pty and write to the net,
+but we time out waiting to read from the net; nothing arrives.  Well, we
+know that i/o works both ways, so there is some kind of screwup with the
+Zmodem protocol start itself.  Increasing the (still hardwired timeout) from
+5 to 22sec and driving the whole process with a script so as to avoid
+autodownload as well as manual dexterity effects...  It just sits there
+forever, way longer than 22 sec.  ^C'ing out, I see that sz was indeed
+started on the far end and the protocol was executing.  But it looks like
+the receiver (the one running under ttptycmd()) is getting trashed packets,
+because (a) it seems to be sending the same thing over and over again, and
+(b) sometimes it waits as long as 10 seconds before anything arrives from
+the remote.  Maybe I was too impatient; I interrupted it after 4 minutes but
+it seems to have been making some progress.  Whenever there was data
+available to read from the net, it was always 65 bytes, and it was not
+actually the same data over and over.  This is using lrz as the external
+protocol.  crz gets a bit farther.  In this case we read up to 24K at a
+gulp, but the amount varies a lot.  It looks like we took in about 1.2MB of
+Zmodem protocol data, but were only able to output the first 20K of the
+file.  Clearly there were lots of errors.  In the end, the crz exits with
+status 1 (failure).
+
+Anyway it looks like we're back at needing to find a way to accomplish
+something like TIOCREMOTE on the pty, which is where we came in.  10 Jan 2007.
+
+Without any way to make the pty transparent and flow controlled, it would
+seem to make sense to write to the pty in smaller chunks than we do to the
+net.  I left the read-from-pty-write-to-net buffer at 24K and changed the
+read-from-net-write-to-pty buffer to 48 bytes.
+
+Upload using lsz worked but took about 3 minutes.  Actually it didn't work.
+On the local end it seemed to work, but the file did not appear on the
+remote end.  Tried this several times, each time with different results,
+adding more debugging each time.  The problem this time was that the pty
+read could get EWOULDBLOCK.  Changed the code to not treat this as an error,
+now Zmodem uploads are solid again except I never got EWOULDBLOCK again
+either, even though I repeated the same upload about 1000 times (with
+throughput of over 2MBps even with debugging on), so the test for it has
+not been exercised.
+
+OK, uploads still work.  Back to downloading...  The very first pty read
+gets 0 bytes, followed by the fork test that shows that it exited with
+exit status 2. 
+
+Next we try starting sz with some different options on the far end:
+
+ -q: quiet (no messages):
+     for some reason this gets totally stuck.
+     it looks as if this option is misdocumented;
+     sz seems to be sending the letter C (as in Xmodem 1K or whatever)
+
+ -e: escape (all control chars):
+     first attempt to read pty finds the process gone with exit status 2.
+
+ -k: send 1k blocks:
+     this one didn't stop immediately.  It reads 48 bytes from net, writes
+     48 to the pty with no error.  Then reads 21 bytes from the pty, writes
+     them to the net OK.  Then reads 48 bytes from net, writes them to pty OK,
+     reads 21 from pty, writes to net OK, etc etc...  It appears to have
+     worked but (final read from pty returned 0, fork test showed lrz exited
+     with status 0), but only 754 bytes were received from the net when the
+     file is 420K...
+
+Well this only goes to show that the faster we shove stuff into the pty, the
+worse it gets.  Zmodem downloads won't work unless we can make the pty
+transparent and flow-controlled.  So to summarize today's developments:
+
+ . separated in/out buffer sizes
+ . handled EWOULDBLOCK
+ . found out that sz options don't help much
+
+11 Jan 2007.
+
+Next day.  This has got to be the most delicate code ever, it's like
+Whack-A-Mole, fix A and B pops up.  Even without touching it, something that
+worked perfectly a 2:00 doesn't work at all an hour later.  Maybe I could
+have used pipes instead of ptys, but pipes have problems of their own.
+There has to be a way to do this.  The telnet server, the SSH server, etc --
+they all run on ptys, and we can upload files to them with Kermit.  Why?
+Because Kermit puts its terminal into all the right modes using the
+time-honored methods of ttpkt() and ttvt().  Perhaps all we need is a copy
+of ttpkt() that operates on the pty.
+
+On that theory, let's go back to Kermit as the external protocol.
+It's important to suppress all messages and displays.  With that,
+uploads work fine, no hitches.
+
+Downloads:  We fail right away.  The debug log shows the Kermit program that
+we are starting in the pty says:
+
+  "" - Invalid command-line option, type "kermit -h" for help.
+
+But of course we are not giving it an invalid command-line option.
+Switching to gkermit for the external protocol, now we see that no matter
+command-line options we use, we read 0d 0d 0a from the pty and then the
+next time we go to read from the pty we get 0 bytes and waitpid() says the
+program has exited with status 1.
+
+Why should downloading be different from uploading?  ttptycmd has no idea,
+it does everything the same.  The only difference would seem to be which
+side sends first, but even that tends to get washed out by each program's
+startup messages.
+
+Downloading with Kermit worked 2 days ago, what's different now?  The buffer
+sizes.  Putting the net-to-pty back up to 24K (from 48 bytes)...  Now it
+works again.
+
+Conclusion: Kermit conditions the pty correctly, Zmodem does not.  Therefore
+ttruncmd() must duplicate what ttpkt() does.
+
+Or not.  Because rz works fine on ssh/telnet ptys too.  But not on our pty.
+lrz exits immediately with status code 2 = 01000 but there are no clues in
+the lrz.c source code, I don't even see this exit status set anywhere.
+Unredirecting stderr, I see that the error is "lrz: garbage on command line".
+
+Why do both Kermit and Zmodem sometimes think they are receiving an invalid
+command line?  If I could capture the garbage...
+
+Side trip #1: ("pty.log",O_WRONLY) gives "no such file or directory".
+Changed this to ("pty.log",O_CREAT,0644) and now it doesn't get an error,
+and it creates the file, but not with 0644 permissions, and with nothing
+written in it.  How come nothing works?
+
+Fine, the debug log shows that ttptycmd() receives the correct string
+(e.g. "lrz -v").  It passes it to do_pty() correctly, and do_pty() passes it
+to exec_cmd(), which runs cksplit() on it, coming up (in this case) with
+"lrz" and "-v", which is right, and then:
+
+    args = q->a_head + 1;
+    execvp(args[0],args);
+
+execvp() wants the args array to have a null element at the end.  cksplit()
+does indeed do that, or at least the code is there.  Added code to exec_cmd()
+to verify the argument list and that it is null-terminated.  So far it is.
+
+Anyway, we have traffic between the Zmodem partners, but no joy.
+Commenting out the bit that redirects stderr, now I can see it on my screen
+in real time:
+
+  lrz waiting to receive.Retry 0: Bad CRC
+  Retry 0: Got ERROR
+  Retry 0: TIMEOUT
+  Retry 0: TIMEOUT
+  Retry 0: TIMEOUT
+  Retry 0: TIMEOUT
+
+etc etc, forever.  Trying sz -e on the far end, I get:
+
+  Retry 0: Bad CRC
+  Retry 0: Garbage count exceeded
+  Retry 0: Garbage count exceeded
+  Retry 0: Garbage count exceeded
+  Retry 0: Garbage count exceeded
+  Retry 0: Garbage count exceeded
+  Retry 0: Garbage count exceeded
+  Retry 0: Garbage count exceeded
+  ...
+  Retry 0: Got ERROR
+  Retry 0: Bad CRC
+  Retry 0: Got ERROR
+  Retry 0: Got ERROR
+  lrz: xxufio.c removed.
+
+So apparently it's not a matter of escaping.  Trying some other stuff, I
+caught the command-line problem in the act:
+
+  lrz: garbage on commandline
+  Try `lrz --help' for more information.
+
+Debug log shows:
+
+  cksplit result[lrz]=1
+  cksplit result[-v]=2
+  exec_cmd arg[lrz]=0
+  exec_cmd arg[-v]=1
+  exec_cmd arg[]=2
+
+An empty string at the end instead of a null pointer.  I really do not see
+any way that could happen, but rather than dig into cksplit() again after
+all these years I added a test for this in exec_cmd(), which, of course
+after adding it, never encountered this behavior again.
+
+Fiddled with pty buffer size again.  Made it 512 bytes instead of 24K.
+Zmodem downloads are the same (Rety 0: TIMEOUT, over and over).  But I don't
+see what the problem is -- every time we receive n bytes from the net, we
+write n bytes successfully to the pty and there are no errors.  But it also
+looks like the remote sender is sending the file header over and over
+because it's not receiving an acknowledgment.  If we're not losing data,
+then maybe it's a transparency problem.
+
+Tried uncommenting the TIOCblah stuff I commented out before.  Now instead
+of only timeouts I get:
+
+  lrz waiting to receive.Retry 0: Bad CRC
+  Retry 0: Got ERROR
+  Retry 0: Bad CRC
+  Retry 0: Got ERROR
+  Retry 0: Bad CRC
+  Retry 0: Got ERROR
+  Retry 0: TIMEOUT
+
+which is odd because the TIOCREMOTE ioctl failed with errno 14, EFAULT,
+bad address, which should indicate it had no effect.  We're still receiving
+data from the remote in tiny chunks (from 12 to 65 bytes), apparently the
+same stuff (file header), and writing them to the pty successfully but
+nothing...
+
+Looked at cloning ttpkt() for the pty, but these stupid routines use global
+tty mode structs so it's not going to be easy.
+
+Well, we got exactly nowhere today, but I think I'll leave stderr as it is
+so users will see some feedback; no reason not to.
+
+WHY DO KERMIT DOWNLOADS WORK AND ZMODEM NOT?
+
+Is it 8-bit transparency?  Up til now I've been testing with text files.
+If I try to download a binary what happens?  Fails after 99 seconds.  Packet
+log from the far end shows that as soon as the first packet containing 8-bit
+data is sent, everything stops.  At least I got one of these:
+
+  17:23:56.475 exec_cmd arg[gkermit]=0
+  17:23:56.475 exec_cmd arg[-qr]=1
+  17:23:56.475 exec_cmd arg[]=2
+  17:23:56.475 exec_cmd SUBSTITUTING NULL=2  <-- the code I just added
+
+Doing this again shows the same thing on the near end.  All the 7-bit-only
+packets are sent and acknowledged OK.  Three 8-bit data packets arrive and
+nothing else happens after that.  This is with G-Kermit.
+
+The same thing happens with C-Kermit receiving.  But if I change C-Kermit's
+.kermrc to turn off streaming and use a short packet length:
+
+The transfer works, even though it's sending 8-bit bytes.  So the problem is
+not 8-bit data after all, per se.  Facts:
+
+ . Kermit can receive streaming transfers of 7-bit files.
+ . Kermit can not receive streaming transfers of 8-bit files.
+ . Kermit can receive nonstreaming transfers of 8-bit files with short packets.
+ . Kermit can receive nonstreaming transfers of 8-bit files with 1K packets.
+ . Kermit can receive nonstreaming transfers of 8-bit files with 4K packets.
+
+So it's the combination of streaming and 8-bit data?  12 Jan 2007.
+
+As a test I made a new routine pty_make_raw() that does cfmakeraw() (a
+nonportable "POSIX-like" function known to be used on ptys in applications
+that do approximately what we're attempting).  Results:
+
+ Solaris: errno 25 - inappropriate ioctl for device.
+
+This happens even when we try to get the terminal modes with tcgetattr(),
+which is completely nuts.  We pass it the file descriptor of the pty master,
+which is supposed to work.  But in Mac OS X, there are no errors.  But
+downloads still don't work; lots of errors but the pattern is different.
+Using a very small buffer:
+
+  Retry 0: Bad CRC
+  Retry 0: Garbage count exceeded
+  Retry 0: Garbage count exceeded
+  Retry 0: Got TIMEOUT
+  Retry 0: TIMEOUT
+  Retry 0: Bad CRC
+  Retry 0: Bad CRC
+  Retry 0: Garbage count exceeded
+  Retry 0: Garbage count exceeded
+  Retry 0: TIMEOUT
+  Retry 0: Got ERROR
+  Retry 0: TIMEOUT
+  Retry 0: Garbage count exceeded
+  Retry 0: Garbage count exceeded
+  Retry 0: Bad CRC
+
+Using a bigger buffer:
+
+  Retry 0: Garbage count exceeded
+  Retry 0: Garbage count exceeded
+  Retry 0: Garbage count exceeded
+  Retry 0: Garbage count exceeded
+  Retry 0: Garbage count exceeded
+  Retry 0: Garbage count exceeded
+  (several screensful)
+
+Various other combinations... Nothing seems to work.
+
+Insight: telnetd does exactly what we want to do, sort of.
+But it uses TIOCPKT, so every time it reads from pty, it receives
+one control byte and then the data bytes, which would complicate our
+buffering scheme considerably.  Anyway the TIOCPKT ioctl() fails on
+Mac OS X with 14 "Bad address".
+
+Also see: snoopserver.c (found in Google).  It seems to do things in a
+slightly different way -- it sets stdout to raw and then dups it to the
+slave side of the pty?
+
+Maybe it's a mistake to use the ckupty.c routines.  They are designed for
+creating and accessing an interactive session.  Maybe just copy one of the
+other programs.
+
+18 Jan 2007.  Tried going back to blocking rather than nonblocking reads
+to see if it would make a difference, after all the other changes.  Nope.
+OK, let's look at some of these other programs...
+
+snoopserver.c.  I don't know exactly what this is or where it's from or what
+platform it runs on and there are no comments to speak of, but it does
+approximately what ttptycmd() does.  To get a pty it uses openpty():
+
+  if (openpty(&pty, &tty, NULL, NULL, NULL) == -1)
+
+then creates a fork.  In the fork, it closes the pty (master) and
+manipulates the modes of the tty (slave), dups tty to be stdio, and then
+doex execv() on the command.  Meanwhile the upper fork closes the tty
+(slave), gets the attributes of stdin, using atexit() to have them
+automatically restored on exit.  Then it sets stdin to raw mode and enters
+the select() loop on stdin, the pty master, and the net.  It uses regular
+blocking reads.  It does not use TIOCPKT or anything like it.
+
+openpty() is supported on: Linux, Mac OS X, NetBSD, FreeBSD, ...
+openpty() is NOT supported on: Solaris, HP-UX, ...
+
+ 1. Try copying the pty code, but keep everything else the same.
+
+I did this; it compiles and starts OK, upper fork (ttptycmd) debug log shows
+no errors, but nothing happens.  Logs show that the Kermit program that is
+started in the subfork seems to die as soon as it reaches eof on its init
+file.  The good news, at least, is that select() doesn't report report that
+the pty is ready to be read.  Clearly the file descriptors aren't being
+assigned as expected, or as before.
+  
+In ckupty.c getptyslave() dup2's the slave fd to 0 and 1.  The new code
+does exactly the same thing.  Debug log makes it look like the forked kermit
+is not receiving its command line.  But now I'm not even sure that the
+forked kermit started at all.  ps from another terminal doesn't show it.
+
+19 Jan 2007: Noticed that in snoopserver, the select() calls use standard
+input and output file descriptors, rather than the pty master.  Made that
+change...  In doing that I had to look at every file descriptor in every
+line of code and discovered a couple mistakes, fixed them, put back the
+original code but with the fixes, tried it, but no change; can upload OK but
+still can't download with Zmodem without lots of errors and ultimate
+failure.  Going back to the alternative version and trying to get the the
+file descriptors sorted out, now it appears that the external Kermit program
+never even starts in the lower fork.  After a bit more fiddling I sort that
+out, but now when the lower Kermit program goes to open "/dev/tty" it gets
+errno 6 "Device not configured".  Forcing it to use stdio with "-l 0", it
+gets past this and actually sends its first packet.  But the Kermit on top
+reads nothing from the pty.
+
+Next, I change the pty fd from STDIN_FILENO and STDOUT_FILENO to slavefd.
+No difference.  Next I comment out the dup2() calls.  This time I get some
+action.  The transfer starts, but only one packet comes.  Log shows that
+the lower Kermit sends its S packet.  The upper Kermit receives the ACK
+but the lower Kermit never gets it.  The write to the pty succeeds, no
+error.  Different combinations give different results.  If write to master
+and read from the slave, I get packets in both directions but tons of
+errors....  This happens only if I comment out the dup2()'s.
+
+25 Jan 2007: After leaving it sit for a while, and realizing that what I'm
+trying to do has to be possible because so much other software does the same
+thing (e.g. Telnet servers), I put things back to how they were originally
+-- the upper fork (Kermit) uses the master and the lower fork the slave.
+The upper fork puts the master in raw mode, the lower fork puts the slave in
+raw mode.  The lower fork dup2's the slave fd to stdin/out.  Send file in
+remote mode using external Kermit: works OK but select() times out at the
+end.  This means that the self-contained pty code in ttptycmd() is sorted
+out -- all the file descriptors go to the right place, etc, and now we can
+use this routine as a testbed, rather than the original ckupty.c-based one.
+
+But send with lsz, csz, and regular rz: Nothing happens, times out after 0
+bytes of i/o.  Once again, Kermit works, Zmodem doesn't.  The reason for
+running Zmodem in a pty is so its i/o will work as it does on a terminal,
+no matter how it may fiddle the file descriptors.  So why don't we see a
+single byte come out?
+
+Commenting out pty_make_raw(), I get a successful Zmodem send using lsz.
+csz manages to get the filename across, but then gets stuck.  regular sz, on
+the other hand, works perfectly.  Testing csz by itself (not under Kermit),
+I see it fails in exactly the same way ("Got phony ZEOF", etc).  OK, forget
+crzsz.
+
+OK, let's move to local mode over a Kerberized Telnet connection...
+Uploading (sending) with external Kermit protocol... works.
+Downloading (receiving) with external Kermit protocol... works.
+Uploading with sz... works.
+Downloading with lrz...  Gets tons of errors and fails.
+
+Running pty_make_raw() on the slave but not on the master: no difference.
+Running pty_make_raw() on the master but not on the slave: no difference.
+
+Back where we started...  Either:
+
+ . Zmodem is overdriving the pty, no matter what modes we put it in.  
+ . It's a transparency problem.
+
+Theoretically we should be able to test these by using different sz switches:
+  -q:    quiet (should always use this)
+  -e:    escape all control characters
+  -B n:  Buffer n bytes (rather than whole file)
+  -L n:  Packet length
+  -l n:  Frame length (>= packet length)
+  -w n:  Window size
+  -4:    4K blocksize (doesn't help)
+
+-q by itself doesn't help.
+-q -e, this one worked but still got about 100 errors and was very slow.
+-q -e -l 200 -L 100, failed fast and bad.
+-q -e -w 1.  Failed quickly.
+-q -e -w 1 -B 100.  Eventually failed.
+-q -w 1, Eventually failed.
+-q -l 1024, this gets much more errors, definitely need -e.
+-q -e -l 1024, got pretty far before failing.
+-q -e -w 1 -l 1024, also got pretty far before failing.
+-q -e, this one got farthest of all, about 48K, before getting errors.
+
+In the latter combinations that work somewhat better, we always get up to
+16K, or 32K, or 48K, before the errors start coming out and piling up.
+Sometimes the errors are recoverable and we receive as much as 300K
+successfully before giving up.
+
+Now that we have data flowing pretty well (but not well enough), tried
+reinstating pty_make_raw(), but it hurt more than helped.
+
+As a sanity check, I tried transferring from the same host over the same
+kind of connection (Kerberized Telnet) directly to K95's built-in Zmodem
+protocol, and that worked fine.  So the problem is definitely in the pty.
+Or more precisely, where Kermit writes incoming net data to the pty master.
+
+26 Jan 2007: Tried changing the size of the net-to-pty buffer from 24K to
+1K.  Result: total failure.  Set both buffers to 1K.  Still total failure.
+Set both to 4K: now we get about 45K of data, then failure.  Put them both
+back to 24K, still fails totally -- the same code that worked pretty well
+yesterday.  Actually, no downloads work, not even Kermit, not even of
+text files.
+
+27 Jan 2007: Since I have not been able to find a way to make ptys work for
+this, I made a third copy of this routine, this time using pipes instead of
+ptys.  The disadvantage here is that if the external protocol does not use
+stdio, the pipes won't work, but one thing a time...
+
+Inferior Kermit starts in lower fork, but when it tries to send its first
+packet it gets errno=9 EBADF, Bad File Descriptor.  Substituting G-Kermit as
+the external protocol, which is simpler, reveals that the problem is that
+the external protocol gets errors when it tries to manipulate the its stdio
+file descriptors with ioctls, etc; these are not valid for a pipe.  The pipe
+mechanism itself works.  If I take out the test for ttpkt() failing in
+gkermit, the file transfer works OK.  Trying Zmodem... Sending works OK;
+receiving works a lot better than with ptys (it got 360K into the file
+before failing).  Making the buffers smaller, doesn't help.
+
+I'm starting to wonder if the problem might be in my buffering code, rather
+than in the pty or pipe interface...  Try making a version that does
+single-character reads and writes.
+
+This one reads the first packet from the lower Kermit and sends it.  It is
+recognized by the other Kermit, which sends an ACK.  We see the ^A of the
+ACK, but then select() times out on the next character -- OF COURSE: because
+at a lower level, it has already been read.  We have to check the myread
+buffer, and then call select() only if it's empty.  Making this change:
+
+ . SEND with G-Kermit works (but very slowly).
+ . SEND with lsz works but gets a lot of errors, eventually succeeds.
+
+Let's work our way back...  With the same changes to the buffered pipe version:
+
+ . SEND with G-Kermit/streaming works (fast).
+ . SEND with lsz works too (fast), but we get gubbish at the end.
+ . RECEIVE with Kermit fails because "/dev/tty is not a terminal device".
+ . RECEIVE with rsz... lots of errors ("garbage count exceeded") but succeeded.
+
+But maybe now we're seeing pipe artifacts, so going back one more step to
+the version that gets its own pty and starts its own fork:
+
+ . SEND with G-Kermit/Streaming works (fast) but select() times out at the end.
+
+Another breakthrough: Moved the write pieces to below the read pieces.  This
+is what was preventing the buffer reset code from working -- with the writes
+done before the reads, we never catch up and can never reset the buffers.
+
+ . SEND with G-Kermit/streaming works (fast) (but there's a pause at the end)
+ . SEND with lsz works (fast) (but there's a pause at the end)
+ . RECEIVE with rsz... lots of errors ("garbage count exceeded") and fails.
+ . RECEIVE with Kermit -- nothing happens (it thinks it succeeded), then we
+     reconnect, terminal sees S packet and goes into autodownload
+
+From the log it looks like ttpkt() fails in the lower Kermit.  Switching
+this with the hacked G-Kermit...  it gets "transmission error on reliable
+link".  Tried again with real Kermit below, this time with "-l 0" and not
+streaming.  This was actually working, but slowly, I don't see any NAKs in
+the packet log, but then select() timed out.
+
+28 Jan 2007: Restored both the calls to pty_make_raw():
+
+ . SEND with C-Kermit streaming works, but slow (54Kcps)
+ . Ditto, but with debugging off -- hangs forever.
+ . Ditto, but using G-Kermit instead of C-Kermit -- also hangs forever.
+
+Backed off on calling pty_make_raw().  Same thing.
+Reduced size of net-to-pty buffer.  Same thing.
+
+15 Feb 2007...  Decided to give up on this and publish it as is, in hopes
+that somebody with more experience with ptys can make it work, because I'm
+just going in circles.  So today I just have to get the code into shape so
+people could choose among the three alternative routines.  The second one,
+yttyptycmd(), is the one that uses openpty(), which is not portable, so it
+can be enabled only for Mac OS X, NetBSD, FreeBSD, and Linux, or by also
+defining HAVE_OPENTPY at compile time.  Anyway, if you build Kermit in the
+normal way, you get the regular behavior -- ttruncmd() is used to execute
+external protocols.  If you build it with -DXTTPTYCMD, you get the first
+version of ttptycmd(); with -DYTTPTYCMD the second, and with -DZTTPTYCMD the
+third.
+
+(Then some interruptions, then...)
+
+From Jeff, fix hostname comparison in X.509 certificate checking to work
+right in the case of names that contain no periods.  dNSName_cmp(): cl_ssl.c,
+21 Feb 2007.
+
+John Dunlap noticed some strange behavior when transferring files between
+home base and the EM-APEX oceanographic floats via satellite... long story,
+but every so often the transfer would get stuck for a long time, and it
+happened only when C-Kermit was sending a file and received two or more
+packets (Ack or Nak) back to back from the float.  Years ago I added some
+lookahead code to ttinl() to clear the input buffer of any interpacket junk
+so that, in the windowing case, we wouldn't be tricked next time around into
+thinking a packet was waiting to be read when there wasn't.  The code, which
+has been there for a while, was a bit fractured; luckily, it would be
+executed only when the debug log was active so it didn't have much effect.
+The problem was that if the SOP came immediately after the EOP, it could be
+missed because the loop read the next character before checking the current
+one.  Fixed by rearranging the loop.  Also I changed it so it would execute
+in all cases, not only when the debug log was active.  Also, cleaned up a
+bunch of confusing #ifdefs and removed some chunks that had been commented
+out for years, decades maybe.  ttinl(): ckutio.c, 21-22 Feb 2007.
+
+Added NOW keyword info to HELP DATE, plus a tip about how to convert to UTC;
+suggested by Arthur Marsh.  ckuus2.c, 22 Feb 2007.
+
+When an FTP client sends NLST to the server and no matching files are found,
+the server is supposed to respond with an error message on the control
+channel and nothing on the data channel.  However it seems that at least one
+server sends the error message back on the data channel, as if it were a
+filename ("/bin/ls: blah: No such file or directory"), and on the control
+channel there is no error indication ("226 ASCII Transfer complete").  At
+this point remote_files() has a listfile and, if a match pattern was given,
+it looks through list to see if any of the lines match the given filename,
+e.g. "blah".  This makes FTP CHECK give false positives.  The problem
+(diagnosed by Jeff) is that the match pattern was not given in this case, so
+it takes some random default action, resulting in the spurious success
+return.  Fixed by using the user's string as the pattern.  Not tested,
+however, since I don't have access to a server that behaves this way.
+ckcftp.c, 22 Feb 2007.
+
+If an external-protocol file transfer fails, don't print Kermit-specific
+hints.  ckuus5.c, 22 Feb 2007.
+
+One more time with ttinl().  Got rid of the "csave" junk, which never could
+have worked (which is no doubt why it was in a debugging section).  The
+problem was that saving the beginning of the next packet locally did not
+synchronize with the buffer clearing (ttflui()) done at a higher level,
+between calls to ttinl().  So now, the lookahead code, if it finds the
+beginning an as-yet unread packet, puts it back at the head of the input
+queue.  This way, if the protocol engine clears the input buffer, it will
+get the whole packet, not just the part after the SOH.  ckutio.c, 24 Feb 2007.
+
+From Steven M Schweda, Saint Paul, MN: adaptation of large file support to
+VMS (it was already possible to transfer large files in VMS C-Kermit but the
+file-transfer display and statistics were wrong).  And a minimal adaptation
+of the FTP client to VMS -- no RMS, no special VMS file stuff, Stream_LF and
+binary files only, developed and tested only with UCX.  SSL/TLS is
+supported.  The source-code changes are minimal; most have nothing to do
+with VMS, but with header files, prototypes, and data types (e.g. ftp_port
+int rather than short, various signed/unsigned conflicts) to shut up
+compiler warnings.  Some of these could be dangerous in terms of
+portability; I've marked them with /* SMS 2007/02/15 */.  ckcfns.c,
+ckcnet.h, ck_ssl.h, ckuus3.c, ckuus4.c, ckvfio.c, ckcftp.c, ckvker.mms
+(which was rewritten to actually reflect the source module dependencies),
+ckvker.com (also heavily modified).  ckvker.com (the "makefile" for VMS
+C-Kermit) now indludes "F" and "I" option flags for the large File and
+Internal ftp features, plus better handling of Vax/Alpha/IA64 distinction.
+26 Feb 2007.
+
+Changed NetBSD targets to include -DHAVE_OPENPTY and -lutil, so they
+can use openpty().  makefile, 26 Feb 2007.
+
+Built on Solaris without and with SSL OK.
+Built on NetBSD with Kerberos 5, OK.
+Built on Mac OS X 10.4, regular version, OK.
+Built on Mac OS X 10.4 with SSL and Kerberos 5, OK.
+
+On VMS 7.2-1/Alpha with MultiNet 4.4A-X...
+
+'CC' 'CCOPT' KSP:ckuus3
+%DCL-W-TKNOVF, command element is too long - shorten
+ \CKUUS4.OBJ "'CC' 'CCOPT' KSP:ckuus4" "KSP:ckuus4.c KSP:ckcsym.h KSP:ckcdeb.h
+ KSP:ckclib.h" "KSP:ckcasc.h KSP:ckcker.h KSP:ckcnet.h KSP:ckvioc.h"
+"KSP:ckctel.h KSP:ckuusr.h KSP:ckucmd.h KSP:ckuver.h" "KSP:ckcxla.h
+ KSP:ckuxla.h KSP:ckcuni.h KSP:ckuath.h"
+
+The new rule for ckuus4.c was too long.  I removed one file from the
+dependency list (ckcxla.h, which will probably never change again) and that
+made it OK.  Built Nonet and Net versions OK, but this is without the new
+stuff.
+
+"make f" (large-file support) on VMS 7.2-1...
+'CC' 'CCOPT' KSP:ckuus4
+                    if (CKFSEEK(fp,(CK_OFF_T)j,SEEK_CUR) != 0) {
+........................^
+%CC-I-IMPLICITFUNC, In this statement, the identifier "fseeko" is implicitly
+declared as a function.
+
+Ditto for ftello and fseeko in various other places, and then fseeko and
+ftello come up up undefined at link time.
+
+The rule for ckcftp in "make i" (Internal FTP support) had the same problem.
+I removed ckcxla.h from its dependency list too, but "utime" comes up
+undeclared at compile time and undefined at link time.
+
+Verdict: neither one of the two new features can be used in VMS 7.2 or
+earlier, but the code still builds OK if you don't ask for them.
+
+VMS 8.3 on IA64...  Can't build anything:
+%MMS-F-BADTARG, Specified target (WERMIT) does not exist in description file
+
+27 Feb 2007: Changed CKVKER.COM to keep all its dependencies but use a
+shorter logical name (Steven M Schweda).  The problem on VMS 8.3 is that MMS
+now supports case-sensitive file systems, and so it can't find anything.
+Workaround: bypass MMS (include "m" in P1).  With this, "@ckvker.com ifm"
+builds OK on HP Testdrive, but I can't test the new features since outbound
+connections are not allowed there.  As for fseeko(), ftello(), and utime(),
+they simply are not availble prior to VMS 7.3.  It would probably be a good
+idea to test for this in CKVKER.COM, but actually it is possible to install
+newer C's and CRTLs on older VMS versions, so don't stand in their way.
+
+28 Feb 2007: With additional chages from SMS, and then some further
+adjustments, I was able to build the FTP version on VMS 7.2-1.  First I
+tested it with GET of a binary file, but it transferred it in text mode.
+After a few more attempts with PUT and GET, it crashed with "floating/decimal
+divide by zero" in ckscreen, ckuusx.c line 27859.  Of course, that's the
+listing line, not the source line, and I don't have a listing.
+
+To get a listing, I deleted CKUUSX.OBJ and then did:
+
+  $ make i "" "" "/LIST"
+
+Surprisingly, it recompiled everything.
+
+Anyway, the divide by zero happened in a section of code where the divisor
+was not checked, but it was a section of code we should not have been
+executing at all, since the file-transfer display was fullscreen, and this
+was in the "brief" section.  Anyway, I added the needed check.  Again, it
+recompiles everything.  Maybe there's no MMS on grumpy -- right, there isn't.
+
+ANYWAY... Try to GET a binary file like this:
+
+  binary
+  ---> TYPE I
+  200 Type set to I.
+  get gkermit
+  ---> TYPE A
+  200 Type set to A.
+  ---> SIZE gkermit
+  550 gkermit: file too large for SIZE.
+  GET gkermit (text) (-1 bytes)---> TYPE A
+
+Anyway... "get /binary gkermit" downloads it, seemingly correctly (the byte
+count is right).
+
+But "put /binary gkermit.;1" results in a 0-length GKERMIT file being sent.
+Here's the debug log:
+
+FTP PUT gnfile[DISK$MSA4:[C.FDC.NET]gkermit.;1]=1
+ftp putfile flg[DISK$MSA4:[C.FDC.NET]gkermit.;1]=0
+zltor fncnv[DISK$MSA4:[C.FDC.NET]gkermit.;1]=-1
+FTP PUT nzltor[GKERMIT]
+zfnqfp 1[DISK$MSA4:[C.FDC.NET]gkermit.;1]=675
+zfnqfp 2[DISK$MSA4:[C.FDC.NET]GKERMIT.;1]=31
+zfnqfp 3[DISK$MSA4:[C.FDC.NET]GKERMIT.;1]=31
+zrelnam result 2[gkermit.;1]
+ftp sendrequest restart[DISK$MSA4:[C.FDC.NET]gkermit.;1]=0
+openi name[DISK$MSA4:[C.FDC.NET]gkermit.;1]
+openi sndsrc=-1
+openi file number=2
+zopeni[DISK$MSA4:[C.FDC.NET]gkermit.;1]=2
+zopeni fp=0
+chkfn=2
+chkfn return=0
+zopeni fixed file format - using blk I/O
+zopeni binary flag at open=1
+zopeni ifile_bmode=1
+zopeni binary=1
+zopeni RMS operations completed ok
+openi zopeni 1[DISK$MSA4:[C.FDC.NET]gkermit.;1]=1
+ftpcmd cmd[PASV]
+FTP SENT [PASV]
+FTP RCVD [227 Entering Passive Mode (166,84,1,2,233,216)]
+initconn connect ok
+FTP SENT [STOR GKERMIT]
+FTP RCVD [150 Opening BINARY mode data connection for 'GKERMIT'.]
+doftpsend2 ftpcode[STOR]=150
+
+  Here is where the file is supposed to be read and sent but there is nothing
+  in the log between the "doftpsend2 ftpcode" line and the following line.
+
+rftimer status=1
+gftimer status 1=1
+gftimer status 2=1409025
+gftimer status 3=1409025
+gftimer s[0.000000]
+zclose n=2
+chkfn=2
+chkfn return=1
+zclose ZIFILE RMS operations completed ok
+ftp getreply lcs=0
+ftp getreply rcs=-1
+ftp getreply fc=0
+FTP RCVD [226 Transfer complete.]
+ftp getreply[226 Transfer complete.]=2
+doftpsend2 ok=0
+
+Everything is OK up until we go to send the file, then it behaves as if we
+got EOF immediately and so closes the data connection, and reports success;
+an empty copy of the file is left on the far end.
+
+Starting over with a text file....  PUT LOGIN.COM gets another divide by
+zero.  But it happened in the code I just fixed, which is impossible.  Swell.
+I recompiled everything and this time the upload worked, and downloading it
+again worked too.
+
+But a binary file still can't be uploaded.  Trying to upload a text file
+after doing this seems to succeed (reports the right number of bytes sent)
+but nothing appears on the far side.
+
+SUMMARY:
+
+  To download a text file: GET /ASCII blah.txt    (/ASCII is optional)
+  To download a binary file: GET /BINARY blah.bin (/BINARY is required)
+  To upload a text file: PUT blah.txt             (/ASCII switch not needed)
+  To upload a binary file: PUT /BINARY blah.bin   (doesn't work)
+
+Problems:
+  . Why doesn't BINARY "stick"?
+  . Why don't binary uploads work?
+
+The culprit seems to be the VMS version of zxin().  In the FTP module,
+zxin() is called only when sending binary files.  In VMS, zxin() is just
+a front end for C-Library fread().  It probably needs to do just do
+zminchar() in a loop, like binary mode does, but calling zzout instead
+of xxout.  Or something like that.  FINISH THIS TOMORROW (debug on grumpy).
+
+2 Mar 2007: New logs from John Dunlap.
+
+ema-1636-log-0175.dbg: C-Kermit uploads a short file. It receives an Ack for
+the Z packet it just sent, tailgated by the beginning of a Nak for the next
+packet.  When the second SOH is encountered, it is put back in the myread
+queue.  Then the protocol engine, to which we return the Ack, says, "I have
+the packet I wanted so I'm clearing the buffer", and away go the first two
+bytes of the Nak from the myread buffer.  Then, having just received the Ack
+of our Z packet, we send our B, and go to read the reply.  in_chk finds 0 in
+the myread buffer (which we just cleared) and 6 waiting to be read from the
+comms channel, which it does, obtaining the remaining 6 bytes of the Nak,
+which it properly discards.  (The reason this is proper is that, having
+already received the Ack for the last packet it sent, no Ack or Nak that
+arrives subsequently -- in the non-windowing case -- could possibly affect
+what it does next.)  Since it hasn't yet found a good packet, it keeps
+reading, and now it finds the Ack to the B, as soon as it showed up.  This
+is how it's supposed to work.  No time was lost because of anything that
+C-Kermit did.
+
+ema-1636-log-0174.dbg: C-Kermit uploads a short file. It sends Data packet
+#3 and receives the Ack followed immediately by the first 3 bytes of a Nak
+for packet 4.  When it gets to the SOH of the second packet, it pushes it
+back in the queue.  Again, input() flushes the input buffer (myread queue
+and device buffer).  C-Kermit detects EOF on the file it is sending, and
+sends the Z packet.  Then it reads the remaining bytes of the Nak,
+which it discards, and then it finds the Ack for Z which comes in 23 seconds
+later, sends the B, gets a Nak for the B, sends the B again, gets the Ack
+for the B 4 seconds later, and done.  Again, it's working right and losing
+no time.
+
+The question remains: what would happen if the protocol engine did not clear
+the buffer?  Would ttinl() retrieve all packets in sequence even when they
+come back to back?  To test this, I had C-Kermit send a file using 30 window
+slots and observed the stream of Acks in the reverse direction:
+
+  HEXDUMP: mygetbuf read (16 bytes)
+  01 25 23 59 2f 52 39 0d | 01 25 24 59 2b 26 31 0d  .%#Y/R9. .%$Y+&1.
+  ttinl lookahead my_count=9
+  ttinl lookahead removed=^M
+  ttinl lookahead pushback SOP=^A
+  HEXDUMP: ttinl got (7 bytes)
+  01 25 23 59 2f 52 39    |                          .%#Y/R9
+  RECEIVE BUFFERS:
+  buffer inuse address length data type seq flag retries
+     0     1     29212 9667     0   Y    3     0
+  [\ 1%#Y]
+  ...
+  in_chk my_count=8
+  ...
+  ttinl lookahead my_count=1
+  ttinl lookahead removed=^M
+  HEXDUMP: ttinl got (7 bytes)
+  01 25 24 59 2b 26 31    |                          .%$Y+&1
+  RECEIVE BUFFERS:
+  buffer inuse address length data type seq flag retries
+     0     1     29212 9667     0   Y    4     0
+  [\ 1%$Y]
+
+Here we can see that the pushed-back SOH was properly retrieved next time
+around, and the tailgating Ack was not lost.  This scenario repeats itself
+212 times in the log, and there are no screwups.
+
+Back to VMS FTP...  The problem with sending binary files is that zxin()
+uses C-Library fopen()/fread() instead of RMS, so it can't access the input
+file, which was opened by zopeni(), which is totally RMS-ified in VMS
+C-Kermit.  For VMS only, I replaced the zxin() loop by a zminchar() loop
+like the one used in text mode, except without the character set or
+record-format conversion.  Tested by PUT /BINARY of some binary files, which
+worked fine.  ckcftp.c, 2 Mar 2007.
+
+Next problem...  VMS C-Kermit ftp client sending binary files in text mode.
+Variation 1: We just send the file.  zopeni() is supposed to detect that
+it's a binary file and automatically set the mode.  And it does:
+
+  zopeni fixed file format - using blk I/O
+  zopeni binary flag at open=0
+  zopeni ifile_bmode=1
+  zopeni binary=0
+  zopeni autoswitch from TEXT to BINARY
+  zopeni RMS operations completed ok
+
+but then in gnfile():
+
+  if (!server || (server && ((whatru & WMI_FLAG) == 0)))
+    binary = gnf_binary;       /* Restore prevailing transfer mode */
+
+Well, since VMS sets text/binary mode automatically when sending files,
+this code can (and should) be skipped in VMS.  gnfile(): ckcfns.c, 2 Mar 2007.
+
+Variation 2: BINARY or SET FILE TYPE BINARY doesn't force binary mode.  But
+SET FTP TYPE BINARY does.  But BINARY does indeed call doftptyp() so what's
+the problem?  We do indeed set ftp_typ to 1 but it gets reset somewhere
+before we call zopeni().  But then zopeni() puts it back to 1.  Tracing
+through a transfer, it looks like all of this works right, it's only that
+the file transfer display says TEXT when the transfer is really in binary
+mode.  This is because screen() is called before openi().  I wonder if we
+can call scrft() from the ftp module...  No, that would be too easy.  OK,
+sendrequest calls openi() and sets the file mode; putfile() calls
+screen(SCR_FN), which prints the transfer mode.  But putfile calls
+sendrequest() after it puts up the screen that says the file type.  So it
+looks like sendrequest() has to call screen(SCR_FN) again if it changes the
+file type.  OK, that did it.  ckuusx.c, ckcftp.c, 2 Mar 2007.
+
+The BINARY and TEXT (ASCII) commands do not inhibit automatic type switching
+in VMS.  They don't in Unix either.  They never have.  Should they?  I think
+so, otherwise what good are they?  Plus we want the Kermit FTP client to
+behave like the others.  I added code for this but it doesn't work, due to
+the layers and layers of text/binary detection and switching and
+if-this-but-then-if-that...  Anyway, no harm done.  The normal rule is:
+when you PUT a file, Kermit figures out on a per-file basis whether to use
+text or binary mode unless you include a /TEXT (/ASCII) or /BINARY switch
+in the PUT (or MPUT) command.  ckuus[r3].c, ckcftp.c, 2 Mar 2007.
+
+Wed Mar 7 16:21:13 2007 WROTE SHORT TEST PROGRAM for ttruncmd (the openpty
+version) on Mac OS X.  On dulce: ~/kermit/ttpty.c / ttpty.sh.  It starts the
+external protocol in the lower fork.  The command to run is a command-line
+argument.  Sending and receiving files with Kermit works OK.  But again, the
+standalone program totally fails when I use sz or lsz as the external
+protocol.  So it looks like we can rule out any environmental effects of
+running the code inside C-Kermit.
+
+Mon Mar 12 16:52:20 2007: Put some effort into making ttpty.c more useful;
+added a debug log.  Found that for some reason, at least on Mac OS X,
+select() always timed out at the the end.  I added a SIGCHLD alarm and that
+seems to handle the fork exit condition very nicely.  Now we can send (say)
+a 3MB file at good speed on Ethernet (1Mcps) considering the debugging, etc,
+and it terminates instantly.  But when sending a file into ttptycmd (with
+"gkermit -r"), things go wrong at the end -- the Z packet is never
+acknowledged.  This is reproducible.  Maybe this is a good lead....  The log
+shows that select() timed out, even though the gkermit fork had not yet
+exited (or finished).  It looks like gkermit sent the Ack, ttpty.c read it
+from the pty and sent it out the net:
+
+  0003: read pty=8                <-- read Ack from pty
+  0003: loop top have_pty=1
+  0003: loop top have_net=1
+  0003: FD_SET pty_in
+  0003: FD_SET ttyfd in
+  0003: FD_SET ttyfd out=8
+  0003: nfds=5
+  0003: select=1
+  0003: FD_ISSET ttyfd out
+  0003: write net=8               <-- send ack to net
+  0003: loop top have_pty=1
+  0003: loop top have_net=1
+  0003: FD_SET pty_in
+  0003: FD_SET ttyfd in
+  0003: nfds=5
+  0009: select=0
+  0009: select timeout - have_pty=1
+
+But Ack never arrived.  This is a streaming transfer.  But nope, streaming
+is not the problem.  If I disable streaming ("gkermit -Sr"), we hang in in
+the middle of sending the data.  If I use small packets, we don't hang:
+1000 is OK, 2000 is not.  In fact, the cutoff is 1024.  OK, TBC...
+
+Wed 14 Mar 2007: Receiving a file thru ttpty "gkermit -e 1200 -Srd"
+produces a debug log that shows that gkermit gets a lot of EAGAIN errors
+when it tries to read from its stdin.  In fact, it takes 6 tries (read()
+calls) to read the S packet (27 bytes).  Then when the first data packet
+arrives (1200 bytes), read() never returns even one single byte.  The
+timeout interval is 15 seconds and it times out repeatedly.  Added a
+primitive hex dump to the ttpty debug log for each read/write (showing only
+the first 24 characters and the last character, so it fits on one line).
+Tried uploading a file.  The S, F, and A packets (short) are received and
+Ack'd OK, but then ttpty select() times out, never receiving even one byte
+from the D packet.  Clearly, when the pty driver receives a burst of > 1K
+bytes, stops working.  As before, if I limit the packets to < 1K, it works
+fine.
+
+Can I send an 8-bit binary file?  Nope.  ttpty reads the binary data just
+fine from the net and writes it exactly as it was received to the pty, but
+the first time we write an 8-bit byte, we never hear back from the PTY
+again.  But the log shows that when the initial 7-bit packets from the pty,
+it looks like the PTY is not in rawmode, because these packets end with ^J
+rather than ^M.  Calling pty_make_raw() on the masterfd and slavefd
+explicitly, however, doesn't change anything.  It doesn't matter if I do
+this in the lower fork or the upper fork.  So maybe it's the actual
+semantics of pty_make_raw() that are wrong.
+
+Thu 15 Mar 2007: Went thru all the terminal mode flags in Mac OS X; didn't
+help.  Changed hex dump to show whole packet.  Put hex dump routine in a
+private copy of G-Kermit.  Tried to transfer an 8-bit file, logging both
+ttpty and gkermit.  Compared what ttpty received on stdin with what it sent
+to the pty (same) and what was received by G-Kermit (same).  Then I realized
+that my little test program was not putting its controlling terminal into
+raw mode; when I did that, I could upload binary files (streaming, 2MB/sec).
+And with Zmodem too (with rz; lrz doesn't work for some reason).  Looking
+back at the original in ckutio.c, I see that ttptycmd() never called
+ttpkt().  Maybe that was the trouble all along.  (Yup, but maybe not the
+whole trouble.)
+
+Moving back to C-Kermit and the original ttptycmd() routine, adding the call
+to ttpkt(), and stripping out a lot of cruft, and moving the pty_make_raw()
+code to ckupty.c, Kermit uploads and downloads (streaming) work fine in
+Solaris.  Zmodem sends a file, but then the transfer hangs at the very end,
+as if the signoff protocol were lost.  This happens on Solaris.  If I move
+back to Mac OS X, everything works just fine.  Then, making a Kerberized
+connection from the Mac to NetBSD, I can send files from the Mac with both
+Zmodem and Kermit.  Receiving...  Kermit OK.  Zmodem...  Nope.  "rz:
+Persistent CRC or other ERROR" (and created a 265MB debug.log!)
+
+Fri 16 Mar 2007: ttptycmd() was for sending files with Zmodem across
+encrypted connections.  But it occurred to me that it's necessary for
+clear-text connections too; e.g. Telnet, where 0xff has to be doubled.  Of
+course Zmodem doesn't do that itself, so there's no way Zmodem external
+protocol could work when executed over a Telnet connection, and in fact
+it doesn't.  I wonder why I ever thought it did.
+
+Wed 21 Mar 2007: Back to where we left off a week ago.  Trying C-Kermit's
+ttptycmd() on the Mac again, in remote mode:
+
+ . G-Kermit send txt (kst): OK  832Kcps  
+ . G-Kermit recv txt (kr):  OK  425Kcps  
+ . G-Kermit send bin (ksb): OK 1000Kcps  
+ . G-Kermit recv bin (kr):  OK  188Kcps  
+
+And Zmodem:
+
+ . sz txt (zst): OK  563Kcps  
+ . sz bin (zsb): OK  714Kcps  
+ . rz txt (zr):  OK  863Kcps  
+ . rz bin (zr):  OK  198Kcps  
+
+So in remote mode, everything works.  Now let's try a clear-text Telnet
+connection...
+
+ . G-Kermit send txt (kst): OK  841Kcps
+ . G-Kermit recv txt (krt): OK  391Kcps
+ . G-Kermit send bin (ksb): OK  811Kcps
+ . G-Kermit recv bin (krb): OK  171Kcps
+
+And Zmodem over the same clear-text telnet connection:
+
+ . sz txt (zst): OK  91Kcps (*)
+
+Kermit is sending sz messages like "sz 3.73 1-30-03 finished." to the
+host, which tries to execute them, after the transfer is finished.
+Of course "sz" is a command, but:
+
+  sz: cannot open 3.73: No such file or directory
+  sz: cannot open 1-30-03: No such file or directory
+  sz: cannot open finished.: No such file or directory
+
+Did I lose that code that dis-redirects stderr when I went back to using the
+pty code from the ckupty module?  No, it's there and it's being executed.
+Apparently the copy of sz I have is writing its "finished" message to stdout
+because "sz blah 2> /dev/null" does not suppress it.  Starting again with
+lsz instead of sz:
+
+ . sz txt (lzst): OK  413Kcps
+ . sz bin (lzsb): OK  FAILED (*)
+ . rz txt (lzrt): OK  
+ . rz bin (lzrb): OK
+
+(*) Sigh.  Using lsz, we get "garbage count exceeded" errors and eventual
+failure.  But using regular sz, we get the extraneous message that starts
+sz on the far tend, and the resulting getty babble.
+
+But even without changing the code, it will work one minute, and then fail
+consistently the next.  For example, I was able to send files with sz
+successfully over and over, but with the getty babble at the end.  Then,
+after trying lsz and then going back to sz, every attempt at sending a file
+quits with "Got ZCAN".  The difference has to be that Kermit always does at
+least some minimal encoding of C0/C1 control characters such NUL and DEL and
+IAC, and I doubt that Zmodem does.
+
+http://zssh.sourceforge.net/ says:
+
+  If file transfer is initiated but never completes (ie a line like :
+
+     Bytes Sent:      0/    513   BPS:0        ETA 00:00  Retry 0: Got ZCAN
+
+   can be seen, but transfer never completes), chances are the pty/tty on one
+   of the systems are not 8-bit clean.  (Linux is 8-bit clean, NetBSD is not).
+   Using the -e (escape) option of rz should solve this problem.
+
+It doesn't, at least not with lrz.  And yes, the receiving end happens to be
+NetBSD.  But it looks like the zssh people have been down this road too.
+
+But with rz and sz, it worked.  Once.  Twice.  Three times.  But of course,
+with the getty babble at the end.  This can be taken care of by doing:
+
+  rz -eq ; cat > foo
+
+which puts "sz 3.73 1-30-03 finished" and any other messages in foo (but you
+have to type ^D to finish the cat).  Using this method I was also able to
+send an 8K binary file that contained a test pattern of all 256 possible byte
+values.  Then I tried a 3MB binary executable.  All OK.  So here we go again:
+
+ . sz txt (zst): OK
+ . sz bin (zsb): OK
+ . rz txt (zrt): 
+ . rz bin (zrb): 
+
+Downloading fails about halfway through a fairly large file.  I tried an
+even bigger file, guaranteed to be 100% ASCII; same thing -- halfway
+through: "rz: Persistent CRC or other ERROR".  But it worked with a smaller
+version of the same file (82K versus 2MB).  Tried again with the bigger
+version, it failed in exactly the same way at exactly the same spot: byte
+number 1048320.  But this is just ASCII text so it can't be a transparency
+problem.  Substituting another plain ASCII file of the same size but totally
+different contents, it doesn't fail (2.36MB).  Back to the previous file, it
+fails again, but in a different spot (832960).  So it's not totally
+deterministic.
+
+To round things out, I tried downloading the binary test-pattern file; it's
+only 8K.  This failed.
+
+  -4, --try-4k                go up to 4K blocksize
+  -B, --bufsize N             buffer N bytes (N==auto: buffer whole file)
+  -e, --escape                escape all control characters (Z)
+  -E, --rename                force receiver to rename files it already has
+  -L, --packetlen N           limit subpacket length to N bytes (Z)
+  -l, --framelen N            limit frame length to N bytes (l>=L) (Z)
+
+Tried again with "sz -L 256 -B 256 -4aeq".  Doesn't change anything.
+
+NOTE: Mac OS X rz 3.73 1-30-03 does not support -e.
+NetBSD rz 0.12.20 does support -e.
+
+Thu 22 Mar 2007: It occurs to me that ttpkt() might still be a problem;
+maybe it's the network connection and not the pty that is not transparent
+enough.  To test this theory I did "stty raw ; stty -a" and then copied all
+of the flag values into ttpkt in the BSD44ORPOSIX section:
+
+ . rz txt (zrt): OK (2.36MB file, worked 2 out of 3 times)
+ . rz bin (zrb): "rz: Persistent CRC or other ERROR"
+
+A little more fiddling with the flags and I got the 8K binary test pattern
+to SEEM to download OK (in the sense that rz gave a 0 return code) but the
+file itself was truncated, always at 224.  If I changed the test pattern
+file to not include any bytes with value 224 (0xe0) or 255 (0xff), the
+download worked.  So we have a transparency problem somewhere.  The debug
+log shows that all byte values are being received from the network correctly
+so the problem has to occur when we try to feed them to the pty.
+
+But no amount of twiddling with the termios flags seems to let these
+characters pass through.  Of course, since they are not in the C0 or C1
+control range, "sz -e" doesn't quote them (which it does by prefixing with
+Ctrl-X and then adding 0x40 to the byte value so (e.g.) NUL becomes ^X@.
+Note that 255 does not cause problems because it coincides with the IAC
+character; the remote Telnet server doubles outbound IACs, and Kermit's
+ttinc() undoubles them automatically (as the log shows).
+
+Trying to send a different file (a C-Kermit binary) shows that 255 is the
+real killer; the file is truncated where the first one appears (at about
+6K), even though some 224's precede it.  Going back to the remote-mode test,
+I see the same thing happens with the binary test-pattern file, if I send it
+from K95 direct to rz-under-C-Kermit-in-remote-mode.  So it has nothing to
+do with C-Kermit having a network connection.  Yet if I send the same file
+direct from K95 to rz, it goes OK and the result is not truncated, so it's
+not Zmodem either.  The data arrives to C-Kermit intact, so the failure is
+definitely in writing it to the rz process through the slave and master ptys.
+
+BUT if I send the same file from K95 to rz-under-ttpty, that works.  What's
+the difference?  Suppose I just transplant ttpty literally into C-Kermit...
+It makes no difference.  When receiving the test-pattern, it truncates it
+in exactly the same place.
+
+Well, all this is on Mac OS X.  What if I move it to a different platform?
+OK, building on Solaris and following the exact same procedure, ttptycmd()
+doesn't even use the network connection.  I think that's because rzsz on
+Solaris is hardwired to use the controlling terminal and can't be
+redirected, even in a pty?
+
+Moved to NetBSD.
+
+ . sz txt (zst): Failed ("Got ZCAN")
+ . sz bin (zsb): 
+ . rz txt (zrt): OK
+ . rz bin (zrb): 
+
+Well, this is a big mess.  Sending doesn't work (or sometimes it does but
+reports that it didn't).  Receiving...  well, actually it's the same thing;
+the file is completely transferred but then the final protocol handshake is
+lost.  The local C-Kermit returns to its prompt, but rz is still running:
+
+  Retry 0: Got TIMEOUT
+  Retry 0: TIMEOUT
+  Retry 0: Got TIMEOUT
+  Retry 0: TIMEOUT
+  Retry 0: Got TIMEOUT
+  Retry 0: TIMEOUT
+  Retry 0: Got TIMEOUT
+  Retry 0: TIMEOUT
+  Retry 0: Got TIMEOUT
+  Retry 0: TIMEOUT
+  Retry 0: Got TIMEOUT
+
+I don't see how that is even possible.  Even after I exit from Kermit the
+messages keep coming, even though ps doesn't show the rz process anywhere.
+Looking at the code, I see a place where end_pty() was still commented out
+from the ttpty.c episode, I uncommented it.  But still:
+
+ . sz txt (zst): Fails ("Got ZCAN")
+ . sz bin (zsb): Fails instantly (but with no diagnostic)
+ . rz txt (zrt): OK
+ . rz bin (zrb): Fails with tons of "Bad CRC", "Gargage Count exceeded"
+
+Conclusion for the day: I think this is hopeless.  Even if I can get it to
+work somewhere, the results depend on the exact Zmodem software, how it uses
+stdin/out vs stderr versus getting its own nonredirectable file descriptor,
+versus the Zmodem version on the other end and which options are available
+on each, versus the pty and select() quirks on each platform, and on and on.
+It will be so hard to explain and to set up that nobody would ever use it.
+It would be better to just implement Zmodem internally.
+
+Fri 23 Mar 2007: Went back to the small test program, ttpty.c.  Tried
+setting both the master and the slave pty to rawmode, even though I have
+never seen any other software that did this.  I had it receive the binary
+test pattern file; it worked.  I made a bigger test-pattern file, 3MB,
+containing single, double, and triple copies of each byte in byte order and
+in random order, this one was accepted too.
+
+So it would seem that the ckupty.c module is something to avoid after all.
+It's full of stuff I don't understand and probably should not undo.  So
+changing C-Kermit's ttptycmd() to manage its own pty again, using openpty()
+(which is not portable), I got it all to work in remote mode: Kermit
+text/binary up/down and Zmodem text/binary up/down.  But in local mode on
+the client side of a Telnet connection...
+
+  zst: OK, but we still get the getty babble at the end that starts sz.
+  zsb: OK, ditto.  This is with the 3MB test-pattern file.
+  zrt: Not OK -- "Persistent CRC or other ERROR"
+  zrb: Not OK -- got the cutoff at 224 again "Persistent CRC or other ERROR"
+
+It's close.  But actually this was still with USE_CKUPTY_C defined.  When I
+undefined it, it was back to being totally broken.  Start over.  (Check the
+new cfmakeraw() code.)
+
+Tue 27 Mar 2007: Starting over.  Back to ttpty.c.  Let's verify, VERY
+CAREFULLY, that it really does work, using the most stressful of the four
+tests: sending the big (3.2768MB) binary test pattern from K95 into rz
+through ttpty, logging everything.  ttpty definitely receives the big file
+smoothly with no errors or hiccups when I have it set to use the master side
+of the pty for i/o.  The application program (Zmodem in this case) runs on
+the slave, and the network and/or control program communicates with the
+master.  This implies that Zmodem controls the terminal modes of the slave,
+and ttpty should be concerned with those of the master.  Doing it this way
+in ttpty confirms this.
+
+Fine.  But if I tell ttpty to SEND a file with sz, nothing happens.  Ditto
+with lsz.  Select times out waiting for input from the pty.  But if I
+manually tell K95 to RECEIVE /PROTOCOL:ZMODEM it works OK.  Somehow sz's
+initial B000000 string is being swallowed somewhere, and it's waiting for
+a reply from the receiver.  sigh...  But "ttpty gkermit -s filename" works
+fine.  What's the difference?  It has nothing to do with stdout vs stderr;
+sz is not writing to stderr at all.  Is it some timing thing between the
+forks?  Aha.  It's that I change the modes of the pty master in one fork
+while sz is already starting in the other fork.
+
+OK, good, now for the first time we have Kermit and Zmodem both able to
+upload and download a large worst-case binary test-pattern file... in
+remote mode.  Now taking today's lessons and fitting them back into
+C-Kermit so I can try it local mode...
+
+Using G-Kermit as the external protocol, first in remote mode...  All good:
+text/binary up/down.  The "halting problem" is solved by SIGCHLD, which
+catches fork termination instantly and lets ttptycmd() know there is no more
+pty.  Zmodem:
+
+  zst: OK
+  zsb: OK
+  zrt: OK
+  zrb: OK
+
+That's a first.  Next, repeat in local mode, in which C-Kermit is the client
+and has made a Telnet connection to another host over a secure (Kerberos V)
+connection:
+
+  kst: OK     zst: ...
+  ksb: OK
+  krt: OK  
+  krb: OK
+  
+It seems we can never end a day on a high note.  Somehow I seem to have
+broken regular internal Kermit protocol transfers over encrypted connections
+-- the en/decryption engine loses sync.  But they still work OK over a
+clear-text Telnet connection.
+
+Today's code in ~/80/dulce.tar (27 Mar 2007).
+
+Added makefile target solaris10g+openssl.  Gathered all the standard CFLAGS
+for Solaris into cdcdeb.h so they don't have to be included in every single
+makefile target for Solaris.  On local Solaris 10 host OpenSSL is in
+/opt/openssl-0.9.8e/.  Tried the new makefile target, works OK.  Also made
+solaris10+openssl for Sun CC, but couldn't test it because I can't find any
+Solaris 10 host that has Sun CC.  Built with gcc at another site that has
+OpenSSL 0.9.8f-dev, all OK.  ckcdeb.h, makefile, 24 Jun 2007.
+
+It occurs to me that Kermit transfers on secure connections might have been
+broken by the changes I made back in February to ttinl() for John Dunlap.
+Here, for the first time, we invoke myunrd() to push a byte back into the
+input queue, and there is also some funny business with "csave", which
+changed, and which an old comment notes that it has to be treated specially
+when encrypting.  So it could be that the broken Kermit transfer has nothing
+to do with the work on external protocols, and that putting back the
+previous ttinl() will fix it.  But now I can't seem to make a Kerberized
+connection from Panix to Panix, even though I can make one from Columbia to
+Panix.  This means I have to build a Kerberized binary from the current
+source code on either Solaris or Mac OS X.  Trying Solaris
+first... [~/solaris9k5/mk5.sh] This didn't work the first time due to
+undefined krb5_init_ets, which is referenced if MIT_CURRENT is not defined
+(it should be for Kerberos 5 1.05 and later and we have 1.42 here), tried
+again with -DMIT_CURRENT=1...  Nope, that one totally blew up in ck_crp.c.
+Later, Jeff says krb5_init_ets is a no-op in Kerberos 1.4.x and later,
+so I added an #ifdef (NO_KRB5_INIT_ETS) for skipping it; now it builds and
+runs OK.  ckuath.c, makefile, 9 Jul 2007.
+
+Meanwhile, using C-Kermit on Mac OS X, which makes the Kerberized connection
+just fine, but still has the problem transferring files over it.  Packet log
+shows:
+
+  s-00-01-^A9 Sz/ @-#Y3~Z! z0___F"U1@A^M 
+  r-00-01-^A9 Y~/ @-#Y3~^>J)0___J"U1@I
+  s-01-01-^A(!Fx.x)(V^M
+  r-xx-08-<timeout>
+  S-01-08-^A(!Fx.x)(V^M
+  r-xx-08-<timeout>
+  S-01-08-^A(!Fx.x)(V^M
+  r-xx-16-<timeout>
+
+Note that S packet is sent, received, and Ack'd OK.  The F packet is sent but
+is never Ack'd.  Tried this several times and noticed that it's just
+receiving that is screwed up, not sending.  After ^C'ing out of the
+transfer, I can still type commands, and they are executed on the far end,
+but the results coming back are gibberish.  Mon Jul 9 16:08:22 2007 (come
+back to this later... substitute Dev.27 ttinl for current one and see if
+the problem goes away, and if so, conditionalize the new code for clear-text
+connections).
+
+Built C-Kermit with Kerberos 5 on Solaris with a version of ckutio.c that
+uses the old ttinl() and transferred a file OK over a Kerberized connection.
+So now it's just a matter of reconciling the old and new ttinl.  The easiest
+way to do this is to have new ttinl() chain to old ttinl() if the connection
+is encrypted, which is what I did and it works fine.  At some point the two
+versions of ttinl() should be reconciled.  ckutio.c, 12 Aug 2007.
+
+There was a function, islink(), used in only one place (ckuus6.c) that had
+the same name as a commonly used scalar variable, and it was missing a
+prototype.  Changed its name to isalink() and added the prototype (Unix
+only), ckuus6.c, ckufio.c, ckcdeb.h. 12 Aug 2007.
+
+Revisiting the ASCII and BINARY top-level commands, which are supposed to
+be like in other FTP clients, but don't seem to have any effect.  I added a
+new routine to the FTP module, doftpglobaltype(), that sets the global,
+sticky, permanent transfer mode (ASCII or BINARY) (TENEX could be added to
+if anybody asks).  These commands (now that they work) are different from
+SET FTP TYPE { ASCII, BINARY }, which set the *default* transfer mode when
+automatic switching fails for a given file.  ckuusr.c, ckcftp.c, 12 Aug 2007.
+ (notify: Matt <mlist@cmcflex.com>)
+
+Even though the code hasn't changed, suddenly we're getting:
+
+  "ckuusx.c", line 5682: warning: implicit function declaration: tgetent
+  "ckuusx.c", line 6183: warning: implicit function declaration: tgetstr
+  "ckuusx.c", line 6262: warning: implicit function declaration: tputs
+  "ckuusx.c", line 6266: warning: implicit function declaration: tgoto
+
+in ckuusx.c on Solaris 9.  <curses.h> is still in /usr/include, dated 2002.
+A quick search shows the missing functions are hiding in <term.h>, which
+until now was included only in Linux.  Added a USE_TERM_H clause.  No, that
+doesn't help, the prototypes are not selected at compile time; there are
+#ifdefs in that file that skip over these prototypes.  I had to put them in
+the code under #ifdef BUG999..#endif (I could have used a longer name like
+#ifdef ADD_PROTOTYPES_FOR_CURSES_FUNCTIONS, but that would not be portable).
+ckuusx.c, 12 Aug 2007.
+
+Also:
+
+  "ckuusx.c", line 9232: warning: implicit function declaration: creat
+
+This is called in the IKSD dababase code, used for getting a lockfile.
+creat() is a Unixism in code that is supposed to be portable.  But IKSD only
+runs on Unix and Windows, so I assume the Windows C library has a creat()
+function.  Anyway, suddenly the Solaris header files seem to have blocked
+whatever path previously existed to the creat() prototype (which is in
+<fcntl.h>), so I added an #include in the appropriate spot.  ckuusx.c,
+12 Aug 2007.
+
+Kermit functions for converting the number base -- \fradix(), \fhexify(),
+\unfhexify() -- did not work with big numbers; ckradix() was missed in the
+CK_OFF_T conversion.  Fixed in ckclib.c, 12 Aug 2007.
+
+Updated the help text for ASCII, BINARY, and SET FTP TYPE to clarify the
+semantics.  ckuus2.c, ckcftp.c, 12 Aug 2007.
+
+Error messages were printed upon failure to open any of the four log file,
+even with SET QUIET ON.  Fixed in ckuus4.c, 12 Aug 2007.
+
+Built OK on NetBSD 1.3_RC3.  Tried to build secure version but the libraries
+had disappeared.  13 Aug 2007.
+
+Built OK on Mac OS X 10.4.9.  Tried the secure version, macosx10.4+krb5+ssl.
+Here we get the usual pile of "pointer targets in passing argument 1 of
+(function name) differ in signedness", regarding security functions, but it
+built OK.  13 Aug 2007.
+
+Reconciling the two ttinl's...  On encrypted connections myread() returns
+encrypted bytes; ttinl() has to decrypt them; it wasn't doing this in the
+lookahead section so I fixed it.  The new code works on both encrypted and
+clear-text connections.  I removed the chaining to oldttinl(), and
+oldttinl() itself.  ckutio.c, 13 Aug 2007.
+
+  (Wouldn't it make more sense and be more efficient and less confusing
+  for myfillbuf() to do the decrypting?)
+
+When C-Kermit uses Zmodem as an external protocol, it doesn't seem to scan
+files before sending them to set text or binary mode appropriately.  It's
+that external protocols bypass Kermit's whole "get next file" mechanism; the
+(possibly wild) filespec is simply passed to the external protocol program.
+Changing this would be a very big deal.  But if only one file is being sent
+(the filespec is not wild) it's easy enough to check.  I added this to the
+external protocols section of the protocol module.  It can be overridden in
+any of the regular ways (/TEXT or /BINARY switch on SEND command, SET
+PATTERNS OFF, SET TRANSFER MODE MANUAL, etc).  ckcpro.w, 13 Aug 2007.
+
+[FTP SEND /RECURSIVE]
+Peter Crowley reported a problem with FTP recursive uploads getting the
+directory tree wrong when the previous pathname was a left substring of the
+new pathname (e.g. foo/bar/ and foo/bar2/).  The logic did not handle this
+case and created the bar2 directory as a subdirectory of bar, rather than as
+a parallel directory.  Fixed in syncdir() and tested with various edge cases.
+ckcftp.c 14 Aug 2007.
+
+  notify <peter.crowley@alumni.utexas.net>
+
+Added CD messages to FTP BRIEF display to track the ups and downs of
+recursive uploads.  ckcftp.c, 14 Aug 2007.
+
+The OUTPUT command gave a misleading error message ("Connection to xxx not
+open") when used on a serial port that was, indeed, open but was not
+presenting the Carrier signal, when CARRIER-WATCH was not OFF.  Added a new
+message for this, and some others.  ckuus5.c, 14 Aug 2007.
+
+Sending from the command line, e.g. kermit -s foo, did not give an
+informative error message if the file could not be found or opened.  Fixed
+in ckuusy.c, 14 Aug 2007.
+
+OK, back to ttptycmd....  It seems that back on March 27th, I got everything
+working but I thought that there was still something wrong with it because
+an unrelated problem so I put it aside.  The version of ttpty.c from that
+date worked OK, and it looks like I updated ckutio.c from it, but that
+version of ckutio.c was put aside.  Since then I have been working on the
+ckutio.c version that was NOT put aside and so now I have to reconcile the
+two:
+
+  ~/80/ttypty/20070327/ckutio.c
+  ~/80/ckutio.c
+
+As a first cut I did this simply by replacing the contents of the #ifdef
+CK_REDIR section of the latter with that of the former.  Of course in
+Solaris this comes up with openty() implicitly declared at compile time and
+unresolved at link time.  So the first task is to get HAVE_OPENPTY defined
+for platforms that have it and have the others use the ttruncmd().  For
+starters I put an #ifdef block in ckcdeb.h that defines HAVE_OPENPTY for
+Linux, FreeBSD, NetBSD, OpenBSD, and Mac OS X.  Ones that don't have
+openpty() include AIX, HP-UX, and Solaris.  Others like SCO I don't know but
+I doubt it.  The real solution is to get the ckupty.c module to work but one
+thing at a time...  This version is supposed work with secure builds on the
+openpty() platforms, and on the others like Solaris, if an external protocol
+is attempted on a secure (encrypted) connection, an error message is
+printed and the command fails.  ckutio.c, 14 Aug 2007.
+
+How to test?  Apparently I did all my testing on Panix before, and that's
+where all my Zmodem builds are, but now when I build a Kerberized version
+(which works if I do it on the right pool host), it won't make a local
+connection, and there is no other place I can connect to that has a
+Kerberized Telnet server.  I can, however, connect to Panix from here, using
+the same code, but on Mac OS X...
+
+Slight detour: Got access to AIX again (5.3.0.0).  Picky compiler, some
+things needed fixing....  Also it says "1506-507 (W) No licenses available.
+Contact your program supplier to add additional users. Compilation will
+proceed shortly" and of course it goes kind of slow.  For some reason, I
+can't do streaming transfers into AIX over a local network (to its SSH
+server), but windowed transfers are OK.  Anyway, noting that we've been
+using the same basic makefile target since AIX 4.2, changing nothing but the
+version herald, I made a new target, simply "aix", that picks up the AIX
+version automatically and sets the herald from it.  Ditto for aix+openssl,
+but on this host requires setting SSLINC and SSLLIB to /opt/ssl/include and
+/opt/ssl/lib.  Also the make program here was extremely sensitive to spacing
+so I had to make some minor edits to get the link step to work for the SSL
+version.  ckuusy.c, makefile, 14-15 Aug 2007.
+
+Got rid of the special Panix secure NetBSD target, replaced it with a
+regular one, which is invoked in the normal way by defining K5INC and K5LIB
+to point to to where the stuff is hidden.  Cleaned up and modernized the
+comments in the makefile a bit.  makefile 15 Aug 2007.
+
+Changed some data types and added some casts to ckctel.c to do away with
+tons of "pointer targets in passing argument 1 of 'xxx' differ in signedness"
+warnings.  15 Aug 2007.
+
+Set up Mac OS X as the testbed for ttptycmd(), with Panix as the remote
+partner over a Kerberos 5 connection.  The first test is to send a 300K
+text file with gkermit as the external protocol.  It worked fine, and the
+debug log showed all the right components were active (namely encryption and
+ttptycmd) [kermit/zmodem send/receive text/binary]:
+
+  Kermit    Zmodem
+  kst OK    zst OK
+  ksb OK    zsb OK
+  krt OK    zrt OK
+  krb OK    zrb Failed "rz: Persistent CRC or other ERROR"
+
+We've seen this before.  The problem is 0xff, Telnet IAC, as I proved to
+myself by constructing a 3MB file that contained every byte but 0xff in every
+mixture and order and transferring it successfully over the same connection.
+Presumably the Telnet server is doubling IACs, whereas of course rz is not
+undoubling, thus the CRC error.  This is progress.  15 Aug 2007.
+
+Log shows that indeed every IAC in the source file arrives doubled.  Adding
+code to remove the first IAC of every adjacent pair, a small test file with
+different-length runs of IACs transfers OK.  The 3MB all.bin file does not.
+
+Starting over...  I can receive a big text file with Zmodem OK.  The 3.2MB
+binary test pattern that contains no IACs failed after 1.8MB, but the part
+that it transferred was OK.  A second try, almost the whole thing arrived,
+it stopped just 584 bytes short of the end.  Could be that file size is a
+separate problem.  Making a new copy exactly 1MB long...  Well, that's
+interesting, this one too stopped just short of the end.  And again, the
+same thing.  When connecting back to the host, the last Zmodem packet can
+be seen on the screen; it's as if the local Zmodem exited before reading
+the last packet...  But OK, if I change the options on the remote sz
+sender to use small blocks, etc, then it works.
+
+Now, changing from the 1MB no-IAC-binary test pattern, to the 1MB all-values
+test pattern, we fail after 81K.  But the part that was transferred is
+correct.  Second try, same thing, but 57K.  Third: 40K.  Each time, upon
+connecting back, the session is completely dead.
+
+IF I HAVE TO undouble IACs for incoming files, don't I have to double them
+going out?  To send a block to net we just call ttol(), but ttol() doesn't
+do any doubling (because Kermit protocol always quotes 0xff).  To see what
+happens, I changed the ttol() call to ttoc() in a loop that doubles IACs.  I
+tested this by sending the full 3.2MB test pattern, which worked fine.
+
+For receiving, it's slow but it works OK with files that don't contain IACs
+(my concern was that IACs might appear in outbound files or in Zmodem
+protocol messages).  It receives the 1MB no-IAC test pattern, so there are
+no problems with protocol or timing.  But the full test pattern always gets
+cut off, but at different points, as before, with the remote session dead.
+Changing the Zmodem receiver from rz to lrz on the local end (since the
+sender on the remote end is lsz) does not change the behavior.
+
+Anyway, I went back and replaced the byte loop with something more
+efficient, and it goes about 20 times faster.  But this doesn't help either,
+it only makes it fail faster.  But aha, what if a doubled IAC is broken
+across successive pty reads -- we have to make the "previous character"
+memory persistent.  Well, that was a good insight, but it still didn't fix
+it.  The log shows the IAC handling code is working fine.
+
+What does sz say?  Capturing its stderr to a file... "Retry 1: Got ZCAN".
+Next time: "Retry 1: Got TIMEOUT".  Next time: Got ZCAN.
+
+Trying different Zmodem options...  apparently I don't need to use short
+blocks.  But I do need to use -e, probably because of Telnet NVT treatment
+of carriage return; without -e, there is a "persistent CRC error".  -O
+disables timeouts, but this makes no difference.
+
+OK, we still have two Big Problems:
+
+ 1. When a long file has no IACs, the final < 1K of the file is not received.
+ 2. When a long file has IACs, the transfer generally stops very early.
+
+Problem 1: the transfer consistently fails less than 1K from the end of the
+file.  Upon CONNECT back to the host, a big Zmodem packet is sitting there
+waiting to be read, which means ttptycmd()'s copy of rz is terminating
+early.  Can we catch it in the debug log?  Doing this takes forever and
+writes a GB to the disk...  And then the problem doesn't happen.  Also, I
+can receive a HUGE text file almost instantly with no errors at all.
+
+Switching to lrz on the receiving end, now I see the error messages, about
+300 lines like this:
+
+  Retry 0: Garbage count exceeded
+  Bytes received:  872352/1000000   BPS:85464  ETA 00:01  Retry 0: Bad CRC
+  Bytes received:  892448/1000000   BPS:86690  ETA 00:01  Retry 0: Bad CRC
+  Retry 0: Garbage count exceeded
+  Retry 0: Garbage count exceeded
+  Retry 0: Garbage count exceeded
+  Retry 0: Garbage count exceeded
+  Retry 0: Garbage count exceeded
+  Retry 0: Garbage count exceeded
+  Retry 0: Got ERROR
+  Bytes received:  898336/1000000   BPS:84293  ETA 00:01  Retry 0: Bad CRC
+  Retry 0: Garbage count exceeded
+  Retry 0: Garbage count exceeded
+  Bytes received:  900384/1000000   BPS:83751  ETA 00:01  Bad escape sequence
+  2fRe
+  try 0: Bad data subpacket
+  Bytes received:  941472/1000000   BPS:86191  ETA 00:00  Retry 0: Bad CRC
+  Retry 0: Garbage count exceeded
+
+Even when it succeeds, it gets these.  But if I receive a text file, no
+matter how big, no errors or retries or timeouts at all.  So it appears that
+there is only one problem: a big-time lack of transparency regarding 8-bit
+and/or control characters.  The odd thing is, it's not that the characters
+can't get through -- they all can -- but they seem to cause transitory
+blockages.  16 Aug 2007.
+
+Cleaned up the remaining pointer signedness warnings in ckutio.c, but this
+was a mistake, it broke Kerberos connections completely.  Undid the changes.
+ckutio.c, 17 Aug 2007.
+
+Changed all return() in the fork()==0 section of ttptycmd() to exit().
+ckutio.c, 17 Aug 2007.
+
+Tried explicitly setting the slave pty to rawmode.  Makes no difference.
+Tried using the Mac OS X (curses) raw() function, and also system("stty
+raw"); still no difference.  Tried doing all of these in different
+combinations and orders.  I found one combination that cuts the errors about
+in half, and the transfer of the no-IAC test pattern almost always succeeds
+(but it's slow).  Anyway, it doesn't help much with the test pattern that
+contains IACs.  Well, the code is more solid than it was before but
+functionally we have not advanced much if we can't download a binary file
+with Zmodem!  On the other hand, we can upload them, and we can transfer
+text files in both directions, which is an improvement over the previous
+situation, in which the entire session would hang due to loss of
+synchronization of the encryption stream.
+
+Tried adding -funsigned-char to CFLAGS of Mac OS X target.  It does not
+make the "signedness" warnings go away and it doesn't change the runtime
+symptoms.
+
+I tried a simpler version of pty_make_raw(), the one from Serg Iakovlev, but
+it was a total failure.  That's encouraging though, because it indicates
+that pty_make_raw() is the right place to be working.
+
+Then I made pty_make_raw() set or unset every single terminal flag
+explicitly.  This made no difference, but didn't hurt anything either.
+
+Then I made pty_make_raw() explicitly set all the c_cc[] characters to 0
+(but left c_cc[VMIN] as 1).  This made no difference either.
+
+I checked pty_make_raw() against ttpkt() and the only difference I found in
+the terminal flags is that ttpkt() sets IGNPAR thinking it means "ignore
+parity errors" when really it means "discard any character that has a parity
+error" (at least according to Iakovlev) -- exactly the opposite.  But I
+tried it both ways, no difference.  17 Aug 2007.
+
+I noticed that even Zmodem text receives can fail.  They don't get any
+errors, they just get cut off shortly before the end.  (But usually they
+succeed, and fast too, like 500K cps).
+
+What if I don't call pty_make_raw() at all on the slave pty?
+
+zrt: EESSSSSSSS: 80% good (E = stopped just before end but no other errors)
+
+zrb no-IAC test pattern, short blocks:
+ 1. S/5 (success with 5 screens of errors.
+ 2. S/7
+ 3. S/7
+ 4. S/6
+ 5. E/7 (failed just before end)
+ 6. S/7
+ 7. S/6
+ 8. S/6
+ 9. S/6
+10. S/4
+
+So, lots of errors, but it recovered 90% of the time.
+Next, same thing, but without requesting short blocks:
+
+ 1. E/5
+ 2. S/5
+ 3. E/4
+ 4. S/5
+ 5. S/5
+ 6. S/5
+ 7. X/0 (hard failure right away: "Got ZCAN"
+ 8. S/5
+ 9. S/5
+10. S/5
+
+So it doesn't look like short blocks make that much difference.  Now what if
+I turn off prefixing?  Bad CRC, fails immediately every time.  Putting back
+pty_make_raw(slave), it still fails hard.
+
+Tried a new strategy with pty_make_raw(): rather than modify existing flags,
+I set all flags to 0, and then turn on only those few that we need like CS8.
+Now we get only 2.5 screens of errors instead 4-7 and the transfer rate is
+higher for binary files (all of the previous ones were under 100K CPS, while
+for text files it was 400-500K CPS):
+
+ 1. S/2 195669 CPS
+ 2. S/2 194720
+ 3. E/3
+ 4. S/2 192550
+ 5. S/3 192325
+ 6. S/3 145066
+ 7. S/2 200689
+ 8. S/3 188948
+ 9. S/2 209461
+10. S/3 181991
+
+I noticed that there was no TIOCSTTY ioctl in the pty/fork setup sequence,
+which is recommended somewhere, so I tried that and it was a disaster; the
+entire session hung.  I took it back out.  18 Aug 2007.
+
+Tried some transfers over a clear-text (not encrypted) connection with the
+same results: smooth, fast transfer of a big text file (400K cps); rocky but
+successful transfer of the no-IAC binary pattern file (135K cps).  Switching
+back to ttruncmd(), the same binary file is received at 1.5M cps, and the
+no-IAC binary file totally fails after too many "Bad CRC"s; and we already
+know that any file that contains IACs will fail.  One might say that
+ttptycmd() is better in every respect than ttruncmd() except in speed
+(when it works).
+
+Let's see if ttyptycmd still works in remote mode (to local K95):
+ . sz / text works, but slowly.
+ . lsz / text works but some wierd errors are reported.
+ . lsz / binary / no IAC doesn't work at all (CRC-32 mismatch for a header;
+        Unexpected control character ignored: 13, etc).
+ . sz / binary / no IAC works OK but slow.
+ . sz / binary / full test pattern with IAC works OK but slow.
+ . Sending text into rz fails completely.
+
+What about ttruncmd() in remote mode?
+ . send /text works, fast.
+ . send /binary works, fast. 
+ . receive /text works, not so fast but not bad.
+ . receive /binary works, not so fast but not bad.
+
+So we use ttruncmd() for remote mode, and we use it for local mode
+serial-port and modem connections, and we use ttptycmd() on network
+connections because (a) they might be encrypted, and (b) even if they are
+not, they use some protocol that we have to handle, e.g. Telnet, Rlogin.
+19 Aug 2007.
+
+Discovered that Sending binary files no longer works.  Text is OK, binary
+transfers don't even start.  This happens on both encrypted and clear-text
+connections.  ttptycmd() is being used in both cases.  But oddly enough,
+receiving binary still works as before.  What did I break, and when?
+Oh, it was just the script, when I changed it from using sz to lsz.  Putting
+it back to sz makes it work, even with the full 3.2MB binary pattern with
+IACs.
+
+I backed off the changes I made to ckctel.c to suppress some warnings, in
+view of the fact that similar changes to ckutio.c broke things so badly.
+19 Aug 2007.
+
+If sz is not given the -e flag, it sends control characters bare, except ^P,
+^Q, ^S, and ^X.  ^X is the control prefix, so ^A is sent ^X followed by A.
+With -e, all C0 control chars are prefixed, but with ^X, which is, of
+course, a control character.  Interestingly, the C1 analogs of ^P, ^Q, ^S
+(but not ^X and, unfortunately, not IAC) are also prefixed.  -e makes no
+difference for 8-bit characters.
+
+If we have a Telnet connection and the server is in ASCII (NVT) mode, CR is
+always followed by LF or NUL.  Well, it seems the server is putting us
+(Kermit) in binary mode in this case, but staying in ASCII mode itself.
+Added code to handle NVT byte stuffing and unstuffing in each direction
+independently, according to the TRANSMIT_BINARY state in that direction.  I
+made a file containing just the bytes 0-31 and 127 and 128-159 and 255 (66
+bytes all together) and sending it from the host to C-Kermit, the local log
+shows that every control character was received correctly and all TELNET
+conversions were done right -- NUL removed after CR (and only after CR); IAC
+removed after IAC (and only after an IAC meant as a quote).  For the first
+time, I can receive the 1MB all-values test pattern, but there are still
+tons of (correctable) CRC errors, so the transfer rate is really awful, like
+about 5% of what we get with a text file (25Kcps instead of 500).
+
+Further experimentation shows that the fundamental transparency problem is
+fixed; we can receive short files (say, 1K or less) containing absolutely
+any byte values in any combination with no errors at all.  But once the file
+size reaches (say) 10K, we get CRC errors, like one every 2 or 3K of data.
+These are not deterministic.  In successive transfers of the same file, they
+come in different spots.  It's tempting to blame pty buffer overruns, but
+then text files would show the same behavior.  When a binary file size
+exceeds, say, 1MB, the chances of successful completion go way down,
+independent of whether my external protocol is rz or lrz.  I like lrz better
+because the error reports come out on the screen as the transfer is going
+on.  Trying to download a real-world binary file -- a 2.2MB C-Kermit
+executable -- I get 4500 error messages but the transfer evenually succeeds,
+with an effective throughput of 21Kcps.
+
+Actually it turns out that "sz -a somebigtextfile" (2.2MB) also gets a lot
+of CRC errors.  The -e flag (escape all control characters) makes the same
+big text file transfer with few or no errors.  It's not sure-fire.
+Sometimes no errors, sometimes one or two, and sometimes a fatal error that
+kills the transfer.
+
+With binary files... a 32K binary file seems to make it every time.  40K
+fails about 50% of the time.  48K fails 60% and every time it fails, it has
+created a partial file of exactly 32K (32768 bytes).  96K fails 9 out of 10
+times, when it fails, the partial file is always 0 bytes, or 32768, or
+65536, but that just means that rz's file output buffer is 32K.
+
+Why, then, do binary files cause trouble if it is not a solid transparency
+problem?  If a certain file can get through once, why can't it get through
+every time?  When a character arrives at the pty, the pty driver probably
+takes a different path through its code, checking the terminal flags that
+would affect that character.  I tried making Kermit's network read buffers
+very small but, surprisingly, this made things worse.  I also tried making
+them very much bigger, which didn't help either.  24K still seems to be the
+right size.
+
+So, is it that some characters take longer to process than others?  So long
+that data is lost due to lack of flow control between TCP and the pty?  One
+way to test this theory is to slow Zmodem down.  I tried "-l 32" which,
+according to the man page, tells sz to "wait for the receiver to acknowledge
+correct data every N (32 <= N <= 1024) characters.  This may be used to
+avoid network over-run when XOFF flow control is lacking."  Makes no
+difference.  I also tried the -w (Window) switch, ditto.  In fact there are
+all sorts of options to set the "window size", "packet length", "block
+size", and "frame length", but with no explanation of what these mean or how
+they are related.  If I crank everything down to minimum value:
+
+  lsz q -L 32 -l 32 -w 1
+
+I get 50% success with the 96K file instead of 10%.  Adding -e, oddly
+enough, made it worse.  I also tried setting the environment variable
+ZNULLS to different numbers like 512, no help there either.
+
+I tried making the read-from-net-write-to-pty buffer small (1K) but leaving
+the pty-to-net one big.  This improves chances of success, but it's
+intolerably slow (3Kcps when the connection is capable of 500K).
+
+I also changed the write-to-pty operation from a single write() call of
+possibly many K characters to a byte loop, one write() per byte.  Same
+result: success (but still about 300 recoverable errors), throughput 3Kcps.
+20 Aug 2007.
+
+With ttptycmd() configured to write to the pty in a byte loop, it is
+possible to delay each write.  Adding a 10msec delay per character results
+in a transfer that runs at about 20 cps and (for the 96K test file) would
+take about 80 minutes to complete.  And yet it still gets just as many
+errors.  So it's not a matter of timing either.  The errors come, on
+average, every file 388 bytes, but not at regular intervals.
+
+I tried the TIOCREMOTE ioctl on the pty master, as discussed somewhat
+obliquely in the Mac OS X "man pty" page; "This mode causes input to the
+pseudo terminal to be flow controlled and not input edited (regardless of
+the terminal mode)" -- sounds like just the ticket but it made no
+difference.  Actually, looking at a man page on another OS (Solaris), it
+says this is only for lines of text, EOLs are supplied, so that would mess
+up the protocol.  So remember: don't use this.
+
+Tried without O_NDELAY; the behavior was the same but the speed was much
+slower.
+
+Tried switching back to the ckupty.c routines on Mac OS X and found that it
+works now the same as with openpty(), except that I seem to get more getty
+babble at the end.  But this means I can run some tests on Solaris.  I moved
+the entire test environment from Mac OS X 10.4.9 to Solaris 9.  But it
+doesn't work at all.
+
+Trying to figure out the ckupty.c modules again.
+ . do_pty() calls pty_getpty() which returns in arg1 the fd of the pty master.
+ . Then it creates a pipe as a way to tell when the child dies
+ . Then it creates a fork:
+    - The parent does a blocking read from the pipe
+    - The child calls getptyslave() to get the pty slave
+      and writes one byte to the pipe
+      and then execs the command it's supposed to run
+Note that the file descriptor of the slave is known only to the lower fork.
+Therefore the lower fork is the one that has to set all the tty modes, etc.
+I took care of all that but the ckupty.c method doesn't work at all on
+Solaris.  But it works "fine" on Mac OS X (the 32K all-bytes test file
+transfers instantly with no errors, but the 96K one errors out).
+
+The problem on Solaris is that pty_make_raw() fails on the masterfd (but not
+on the slavefd) with errno 25 "ioctl inappropriate for device".  It doesn't
+matter whether I do it in ckupty.c or ckutio.c.  I found a web page on
+kde.org that says Solaris does not allow tcget/setattr() on a pty master.
+But the Sun "knowledge base" is not open to the public.  Well, presumably
+changes made to the slave are reflected in the master (comments in Solaris
+telnetd seem to confirm this...)  Let's come back to Solaris later.
+
+Moving to a Linux with lrzsz installed...  Built a Kerberos 5 version with
+USE_CKUPTY_C.  Like on Mac OS X, it transfers short files OK and chokes on
+longer ones.  Switched to openpty(), it behaves the same.  So the problems
+on Mac OS X are evidently not OS-specific, which is good I guess, since that
+means finding the way around them will apply to more than one platform.
+21 Aug 2007.
+
+Look into TIOCSCTTY again.  On System V based OS's, opening a pty acquires a
+controlling terminal automatically.  On BSD-based OS's, no; you have to use
+the TIOCSCTTY on the slave file descriptor to give it one.  I'm not sure why
+a controlling terminal would be needed, except that without one, the virtual
+device "/dev/tty" does not exist for the process that runs on the pty, and
+maybe the application that runs there (e.g. rzsz) checks for it.  On the
+downside, having a controlling terminal opens the process up to terminal
+interrupts like SIGINT and SIGQUIT.  Until now I have not been using this
+ioctl().  Results (in Linux):
+
+  With TIOCSCTTY: 96K all-bytes test: 11 screens of errors, then success
+  Without TIOCSCTTY: exactly the same.
+
+Tried the same thing with TIOCNOTTY instead of TIOCSCTTY, with exactly the
+same results (no effect whatsoever).
+
+There has to be a way to make this work, because Zmodem works through
+telnetd, which basically the same thing as ttptycmd(): a relay between the
+network and a pty.  ttptycmd() is like telnetd backwards.  Modern telnetds
+are not much help; they don't access ptys or the network directly, they go
+through "mux" devices so I can't see what they're doing to get transparency
+and flow control.  An old BSD telnetd uses packet mode but that would be a
+big deal...
+
+I tried ignoring various signals like SIGTTOU and SITSTP, since some Telnet
+clients do this.  No effect, no difference.  Anyway, in Linux the transfers
+almost always finish OK despite the many errors.  There is just some trick
+I'm missing to make the pty accept a stream of arbitrary bytes without
+hiccuping.
+
+What about Solaris, which uses ckupty.c?  In streams-based OS's, where line
+disciplines and whatnot are pushed on top of the pty, it looks like the pty
+module saves the file descriptor of the "bare" slave pty (as 'spty') before
+pushing things onto it, and then later uses spty rather than the regular
+slave pty file descriptor when getting/setting terminal modes.  I'm not sure
+what this is all about but it's definitely SysVish...  It happens if
+STREAMSPTY is defined, but I noticed that STREAMSPTY is never defined
+anywhere.  I tried defining it so we take an entirely different path through
+the code.  It made absolutely no difference.
+
+Then I noticed that HAVE_STREAMS is not defined for Solaris either.  Tried
+defining it, but the session didn't work at all, no i/o.  Removing the
+HAVE_STREAMS definition but keeping the STREAMSPTY defined, I rebuilt and
+tried "set host /connect /pty emacs".  I got an EMACS screen but could not
+type anything into it, which means that STREAMSPTY should not be defined
+either.  Removed the definition and "set host /pty" works again.  So what's
+the problem with ttptycmd()?
+
+In fact, ttptycmd() works on Solaris with Kermit as the external protocol,
+but not with Zmodem, not even with text files.  So again, there is no
+fundamental problem with the code or the logic, it's Just A Matter Of
+Transparency to control and/or 8-bit characters -- some trick I don't know
+about.
+
+Looking at the Solaris debug log...  I see that ckupty.c is calling
+init_termbuf() to set the tty modes of the master, not the slave, and
+set_termbuf() to set them, but you can't do that in Solaris, error 25.  This
+is in getptyslave().  Shouldn't getptyslave() be setting the tty modes of
+the slave, not the master?  I changed it to do this, but like all other
+changes, it made no difference.  I checked to make sure that after the change,
+"set host /pty /connect emacs" still worked and it did.
+
+And then what...  I had some code to redirect stderr in ckupty.c that was
+not being executing due to a typo.  When I fixed the typo, poof, Zmodem
+binary transfers started working, or working as well as they work in Linux
+and Mac OS X.  It turns out that if I don't redirect stderr, sz and rz
+just don't work.  But lsz and lrz do.  But if I do redirect it, I don't see
+the progress messages from lsz/lrz.  22 Aug 2007.
+
+Built on HP-UX 11i v3 (B.11.31 U ia64) with optimizing compiler, got tons of
+picky warnings, but it finished and linked and runs OK.  Many of the
+warnings were like this:
+
+  "ckucns.c", line 1606: warning #2068-D: integer conversion resulted in a
+  change of sign:   tnopt[0] = (CHAR) IAC;
+
+IAC is defined as 255 in ckctel.h.  If I define it as 0xff, I don't get the
+warnings.  I changed the definitions of all the Telnet commands to be in hex
+notation rather than decimal.  If cuts way down on the HP-UX warnings and
+doesn't seem to cause problems elsewhere.  ckctel.h, 23 Aug 2007.
+
+Now it looks like Solaris is working but then it hangs at the end.  It
+appears as if the ckupty.c module is blocking SIGCHLD.  Debug log shows that
+when the transfer is complete, we received IAC DM (Telnet Data Mark) after
+sz's last gasp and before the shell prompt is printed.  But calling
+tn_doop() in this case is a mistake because we are reading the number of
+bytes that we know are available in a counted loop, but tn_doop() would
+consume an unknown number of bytes and we would never know when to exit the
+loop.  Anyway, C-Kermit doesn't do anything with DM.  Skipping over
+tn_doop() (and not writing out the Telnet command bytes) fixes the hanging
+condition at the end, even though SIGCHLD is never raised.  ckutio.c,
+23 Aug 2007.
+
+Some tests, Solaris to NetBSD over K5.
+zst sends ascii.txt, a 2.36MB ascii text file (Kcps / Errors).
+zrt receives the same file:
+
+  zst 587/0 526/0 542/0 434/0 423/0
+  zrt 827/0 800/0 847/0 FAIL  610/0
+
+So text is good.  Binary not so good.  Here we transfer the 1MB all-bytes
+pattern file.  zrb receives it successfully, but with 1248 errors, at only
+15Kcps.  Sending the same file out always fails:
+
+  Begin 20070823 16:32:07: SEND BINARY all2.bin [sz]
+  Sending: all2.bin
+  Bytes Sent:   5600/1000000   BPS:12446    ETA 01:19   FAILURE
+  End 20070823 16:32:13
+  Elapsed time: 6.617992999999842
+  cps = 151103.2121067556
+  lsz: caught signal 1; exiting
+
+Decided to move to Linux but found that something is screwed up in Linux
+C-Kermit with tilde expansion:
+
+  send ~/testfiles/all.bin
+
+doesn't expand at all (but it did yesterday!).  The problem was in the
+ancient, ancient realuid/setuid handling code; real_uid() no longer works in
+Linux.  I worked around this in whoami() by setting ruid to getuid() if
+real_uid() returned a negative number.  Maybe dangerous, worry about it
+later.  ckufio.c, 23 Aug 2007.
+
+ANYWAY... after fixing that, I tested zsb on Linux, and it's broken there
+too, using openpty(), so it's nothing to do with ckupty.c.  After sending
+the first Zmodem data packet, it just hangs, nothing comes back.  In text
+mode it gets farther, but then the same thing happens.  Captured stderr from
+rz on the far end:
+
+  Bytes received:     608/1000000   BPS:21137  ETA 00:47  Retry 0: Bad CRC
+  Bytes received:     864/1000000   BPS:23540  ETA 00:42  Retry 0: Bad CRC
+  Bytes received:    1120/1000000   BPS:25003  ETA 00:39  Retry 0: Bad CRC
+  Bytes received:    5696/1000000   BPS:56988  ETA 00:17  Retry 0: Bad CRC
+  Bytes received:    9120/1000000   BPS:62227  ETA 00:15  Retry 0: Bad CRC
+  Bytes received:    9376/1000000   BPS:60766  ETA 00:16  Retry 0: Bad CRC
+  Bytes received:    9632/1000000   BPS:60361  ETA 00:16  Retry 0: Got TIMEOUT
+  Retry 0: Sender Canceled
+  Retry 0: Got ZCAN
+
+The local sz, however, doesn't give any error message.  ZCAN means: "other
+end canceled session by sending 5 ^X's" (or user typed them).  What actually
+happens is that ttptycmd()'s select() times out waiting for something from
+the Zmodem partner and ttptycmd() itself kills the sz fork with SIGHUP.
+When lsz receives SIGHUP it sends the ZCAN.  So the real problem is that
+after some point we're not receiving anything.
+
+I changed the timeout from 4 seconds to 30 seconds and now I see it just
+stops for long periods of time and then resumes.  The lrz log on the
+receiving end shows tons of timouts, CRC errors, and other errors.  The
+local log shows that lsz wound up sending ZCAN (2 x (10 x ^H, 10 x ^X)).
+
+Moving on to another problem...  Turns out Ctrl-C (SIGINT) is working right
+after all.  Since I'm using my test scripts like kerbang scripts, Ctrl-C
+exits through trap(), as it should, closing the connection and cleaning up.
+If I start Kermit and tell it to TAKE the script, then Ctrl-C brings me back
+to the prompt with the connection still open (as it should).  However, until
+now I haven't done anything about the fork or the ptys.  Added code to
+trap() to kill the fork and close the master pty.  ckuusx.c, 24 Aug 2007.
+
+Added code to try to break the deadlock.  If select() times out, but we have
+stuff to write either to the pty or the net, try to do it anyway, even
+though select() did not say we could.  But this doesn't help because when
+select() times out we don't have anything to write.  The problem is that
+after receiving that last packet from the remote rz, the local lsz doesn't
+seem to do anything, as if the lower fork wasn't running (and to confirm
+this hypothesis, sometimes I noticed that when I Ctrl-C'd out of this, the
+transfer would take off again).
+
+Backing up and testing with gkermit rather than zmodem:
+
+ kst ripple.txt [824K] OK
+ kst ascii.txt [1359K] OK
+ krt ripple.txt -- FAILED
+
+It seems that we can't handle streaming.  If I set up krt to disable
+streaming on receipt, it works OK.
+
+ krt ripple.txt [824K] OK
+ krb all2.bin  [1000K] OK
+
+So here we have no trouble sending but big trouble receiving unless we
+disable streaming.  Whereas with Zmodem we have trouble receiving.
+
+But this wasn't happening before, what changed?  Using C-Kermit on the far
+end to receive the file with debug log on, I see that it is sending 4K data
+packet after 4K data packet, with the local gkermit silent, as expected.
+About midway through the transfer, the local Kermit sends an error packet
+"Transmission error on reliable link".  Looking at G-Kermit's debug log...
+It receives the first five 4K data packets OK, but gets a CRC error on the
+fifth one, and sends the Error packet.  So it has received a stream of
+20-some thousand bytes OK and then messes up.  That number sounds a lot like
+ttptycmd()'s buffer size.  I changed the buffer sizes to be different:
+
+  Read from pty and write to net: 4K  
+  Read from net and write to pty: 1K
+
+This time it received the first 4K packet and failed on the second one.
+Then I increased the buffers to 98K each, expecting to receive lots more
+packets successfully but it bombed out on the 5th one.  But that's good, it
+confirms there's no logic error in the buffer management.  Just to make
+sure, though, let's set the buffer size smaller than the packet size and
+disable streaming.  In this case we get 4 good data packets and a CRC error
+on the 5th one and so we request retransmission, and the next 8 times it
+arrives it gets a different CRC error, but the 9th copy is OK.  Then the
+next packet comes and it gets a CRC error every time.  And this is nothing
+but plain ASCII text.
+
+Switching to remote mode:
+
+  REMOTE=1 kk kst
+
+(after tricking myself because it was using ttruncmd() for this...) I see
+that nothing works at all.  What did I break?  24 Aug 2007.
+
+Fixed ttptycmd() to restore console modes after a remote-mode transfer.
+ckutio.c, 25 Aug 2007.
+
+Noticed that error codes like ESRCH are not available in all modules.
+That's because of some complicated in #ifdefs in ckcdeb.h that wind up not
+always #including <errno.h>.  But I notice that ckutio.c includes it
+unconditionally with no ill effects, and so does ckvfio.c.  Does any version
+of Unix at all not have <errno.h>?  Added a catch-all clause to ckcdeb.h to
+#include <errno.h> (in UNIX only) if, after the other clauses, ESRCH was
+still not defined.  ckcdeb.h, 25 Aug 2007.
+
+Now back to debugging ttptycmd()...  Remote-mode transfers with ttptycmd()
+were broken in two places, maybe as long as 2 weeks ago (this would have
+affected non-network transfers too, which I can't test any more).
+The logic was missing in a couple places for the non-network and/or
+non-Telnet and/or non-encrypting connections (if statements with no else
+parts).  Fixed in ckutio.c, 25 Aug 2007.
+
+Testing remote mode:
+
+ kst OK   zst OK
+ ksb OK   zsb OK
+ krt OK   zrt OK
+ krb OK   zrb OK
+
+Functionally it all works but there are hitches with Zmodem as always.
+When sending to K95:
+
+ . If I send with lsz, there are hundreds of "Subpacket too long" errors,
+   and the transfer is very slow, but it succeeds.
+
+ . If I send with the 1994 Omen version of sz, transmission is instantaneous
+   and without errors, but then it hangs at the end.
+
+ . If I bypass C-Kermit and send direct from lsz or sz, both work fine.
+
+So clearly the ptys are getting in the way.  The hanging at the end would be
+caused by the sz process closing before its last output reached the master
+pty.  It would need to do some form of flushing and/or pausing at the end
+but there's nothing I can do about that; these programs were not designed to
+be used in this way.  Anyway, it only seems to happen with files longer than
+100K.
+
+For local mode, testing in Solaris over our Kerberos 5 connection again:
+
+ gkermit  lrzsz
+ kst OK   zst FAIL
+ ksb OK   zsb FAIL
+ krt OK   zrt OK but with errors
+ krb OK   zrb FAIL
+
+If I use Omen rzsz as the external protocol (e.g. with zst), it blocks
+redirection and it sends the file to my terminal, rather than over the
+connection.  This would probably be because it finds out the device name of
+the job's controlling terminal and opens it, to prevent redirection.  This
+is hard to prevent in Solaris because there is no TIOCSTTY ioctl().
+Supposedly the same thing is accomplished by closing and reopening the slave
+pty after doing setsid().  I added code to do this, but it made no
+difference.  (If I use lsz instead of sz, it is indeed redirected, but jams
+up after about 15K.)  ckupty.c, 27 Aug 2007.
+
+On Mac OS X with sz 3.73 1-30-03, however, the redirection works, so I
+assume it would also work in Linux, FreeBSD, NetBSD, etc, too.  Doing the
+full test suite on Mac OS X:
+
+ gkermit   lrzsz          rzsz
+  kst OK   zst FAIL (1)    OK
+  ksb OK   zsb FAIL (2)    OK
+  krt OK   zrt OK   (3)    OK for 100K file, fails for longer.
+  krb OK   zrb FAIL (4)    OK (1MB all-bytes test pattern)
+
+(1) 64K file OK every time; 100K file fails every time.
+(2) 10K file fails every time.
+(3) Succeeds with 800K file but gets a few recoverable errors.
+(4) Succeeds with 48K binary file with some errors, fails with longer ones.
+
+So actually it looks pretty good, it's just that lrzsz messes up.  When
+sending with lsz if I include -L 512 it sends the 100K test file with no
+errors, but still chokes on longer ones.
+
+Testing on Mac OS X again, but this time over a clear-text Telnet connection:
+
+ gkermit        lrzsz    rzsz
+  kst OK   zst  FAIL(1)   OK
+  ksb OK   zsb  FAIL(2)   OK
+  krt OK   zrt  OK(3)     OK
+  krb OK   zrb  FAIL(4)   OK 
+
+(1) Almost worked, finished 777K out of 824K without errors.
+(2) Got tons of errors, failed in first 30K out of 1000K.
+(3) OK for 100K file but fails for larger.
+(4) OK for 48K binary fail but fails for larger.
+
+Maybe see if we can do without the OPENPTY part.
+
+TOMORROW -- just clean up the code, add some SET / SHOW / HELP commands,
+document it, and move on.
+
+Note: In K95, SET WINDOW sets the Zmodem packet length, 32 - 1024, multiple
+of 64.
+
+SEE ~/80/external.txt
+
+Changed ftp port from int to unsigned int.  ckcftp.c, 30 Aug 2007.
+
+Tried again to build KRB4/KRB5/SSL/TLS version for Solaris 9.  Had to update
+the build procedure again, of course, because of new file and directory
+names, but ran into problems anyway because the
+cu-solaris9g+krb5+krb4+openssl+shadow+pam+zlib target was calling another
+target that did not know about the hardwired pathnames.  Integrated the two
+targets and tried building again.  It actually compiled ok (but with lots of
+warnings from the security modules), but failed at link time with
+krb5_init_ets not found; fixed that with an #ifdef NO_KRB5_INIT_ETS, now it
+builds OK but without the ftp client.  Tried building it WITH the FTP and
+that was OK too, no changes needed except to the build procedure.  12 Feb
+2008, that is: C-Kermit 8.0.212 : 20080212.
+
+Tried to build with -DCK_SRP and -lsrp but:
+
+  hash_supported                      ckcftp.o
+  hash_getdescbyname                  ckcftp.o
+  hash_getdescbyid                    ckcftp.o
+  cipher_getdescbyname                ckcftp.o
+  krypto_delete                       ckcftp.o
+  krypto_new                          ckcftp.o
+  cipher_supported                    ckcftp.o
+  krypto_msg_priv                     ckcftp.o
+  krypto_msg_safe                     ckcftp.o
+  hash_getlist                        ckcftp.o
+  cipher_getlist                      ckcftp.o
+  cipher_getdescbyid                  ckcftp.o
+
+Sent mail to Tom Wu and backed off for now.  makefile, 14 Feb 2008.
+(Tom Wu never answered; seems like SRP is defunct.)
+
+The ".blah = xxx" form of variable assignment only worked for variables
+names of length 22 or less, noticed and fixed by Wolfram Sang.  ckucmd.c,
+5 Mar 2008.
+
+In "set host /pty ssh ..." connections, the INPUT command suddenly stopped
+working.  This is in Solaris 9.  It happens with all 8.0.* versions of
+C-Kermit, so it's nothing to do with ttptycmd().  Added some debug()
+statements but they don't show anything.  Turns out there wasn't a problem
+after all.  Wed Mar 26 16:04:53 2008
+
+Changed cmifi() to not print "?No files match" (or whatever) if SET QUIET ON.
+ckucmd.c, 26 Mar 2008.
+
+Added \v(remoteip) for the IP address of the host we're connected to,
+and \v(inmessage) for INPUT status messages corresponding to \v(instatus).
+ckuusr.h, ckcmai.c, ckuus[24].c, 26 Mar 2008.
+
+Made \fkeywordval() strip braces/quotes from the right-hand side so we can
+handle things like:
+
+  password="stringwithspaceatend "
+
+ckuus4.c, 6 Aug 2008.
+
+Added invisible PUTENV command for UNIX only.  Value should not be enclosed
+in doublequotes.  Requires lge \v(buildid) 20080826.  ckuusr.[ch], 26 Aug 2008.
+
+Added SET VARIABLE-EVALUATION { RECURSIVE, SIMPLE }.  This is highly
+experimental, but also highly desirable if it works out.  SIMPLE inhibits
+the default recursive method of evaluating \%x and \&x[] variables, which
+is, quite frankly, nuts and makes programming in Kermit at best
+counterintuitive.  I made an exception in the case of array subscripts,
+because changing how they are evaluated could break a lot of scripts, and
+anyway there should never be any harm in evaluating them recursively because
+their final value is always (or should be) numeric, not some string that
+might contain backslashes.  The SET VAR setting is on the stack, just like
+SET QUIET (it follows the quiet/xquiet code in ckuus[356].c), so macros or
+command files that change it can't break the script that invokes them.
+Added \frecurse() to force recursive evaluation of a \%x or \&x[] variable
+regardless of the VARIABLE-EVALUATION setting.  Added \v(vareval) to allow
+programmatic setting to current setting.  Tested on Solaris 9 but should be
+totally portable.  ckuusr.[ch], ckuus[356].c, 11 Sep 2008.
+
+From Günter Knauf: 64-bit builds were failing on SuSE Linux because
+libresolv and libcrypt were in lib64 rather than lib; updated the tests in
+the linux makefile target to find them.  makefile, 12 Jan 2009.
+
+Tried building on Red Hat Enterprise Linux Server release 5.3 64-bit.
+There is no curses or ncurses.  "make linuxnc" compiled OK but collapsed at
+link time looking for crypt(), res_search(), and dn_expand().  Turned out
+the linuxnc (and linuxc) targets needed the same treatment as the Linux one
+for 64-bit Linuxes.  makefile, 3 Mar 2009.
+
+Consolidated the linux targets so we no longer need three separate ones for
+curses, ncurses, and no curses.  "make linux" works ok on computers with and
+without (n)curses.  "make linux+ssl", ditto.  "linux+krb5+ssl builds OK but
+needs -DNO_KRB5_INIT_ETS".  Makefile, 3 Mar 2009.
+
+Fixed copyright date announced in herald, ckuus5.c, 3 Mar 2009.
+
+Patch from Seth Therault to avoid deprecation warning for utmp references
+in ckufio.c in Mac OS X 10.5 (later, this became a consolidated makefile
+target that works automatically for at least Mac OS X 10.3.9 through
+10.5.6).  makefile, ckufio.c, 28 April 2009.
+
+zshcmd() (the function used by RUN and ! to run external commands) was not
+falling back as expected in Linux RHEL4/5 if SHELL was not defined in the
+environment.  Also in all Unix versions, there was no indication if a RUN/!
+command failed (other than the return code) because the specified shell
+didn't exist or was not executable (e.g. the SHELL environment variable was
+misdefined).  Now it prints the name of the offending shell and the reason
+it couldn't be executed (Not found, Permission denied, etc).  ckufio.c,
+28 April 2009.
+
+There is no easy way to get the last field of string; for example, the
+extension from a filename, which might have any number of fields.  In
+general we want to be able to get "word number n" counting from the right;
+\fword() lacks this ability.  Now if you give it a negative word number,
+that says to count from the right; for example \fword(one two three four
+five, -2) returns "four".  ckclib.c, ckuusr.c, 14 May 2009.
+
+Fixed a typo in the aix51+openssl (SSLLIBS should have been SSLLIB).
+From Jason Lehr.  makefile, 27 May 2009.
+
+Updated the linux+openssl+zlib+shadow+pam target to chain to the new main
+Linux target.  A bunch of other ones remain un-updated. makefile, 12 Jun 2009.
+
+Updates to the new Mac OS X 10.5 target from Seth Therault (which is
+supposed to work on all Mac OS 10-point-anything) to avoid warnings
+that came up on on Mac OS 10.4.11/Intel.  Once this one is proven we should
+be able to remove/consolidate lots of other ones.  makefile, 12 Jun 2009.
+
+C-Kermit disables SSL with the message "?OpenSSL libraries do not match
+required version." if the version of OpenSSL that Kermit was built with is
+not exactly the same as the version that is loaded dynamically at runtime.
+This is actually the proper behavior, since APIs are not guaranteed not to
+change between OpenSSL versions prior to 1.0.0.  Made the error message more
+informative.  ck_ssl.c, 26 Aug 2009, and again 28 Aug 2009.
+
+AIX 6.1 is out, it is really just a new name for AIX 5.4.  Added makefile
+targets, plus for the first I made AIX 4.2 and later figure out its version
+number in the makefile target so we don't have to keep adding new -DAIXnn
+sections to the code, and also get its hardware name (e.g. "powerpc") from
+uname at make time, rather than hardwiring "rs6000" as I did before.
+Consolidated all AIX 4.2 and later targets so now just "make aix" or "make
+aix+ssl" can be used.  Except not the gcc ones as they have some quirks so
+I'd rather not disturb them.  Tested this on AIX 5.3.
+makefile, 28 Aug 2009.
+
+From Kinjal Shah, a correction to the Linux makefile entry that allows it
+find the 64-bit curses or ncurses library.  makefile, 29 Aug 2009.
+
+Renamed aix4[23]: to oldaix4[23]: in makefile to fix the warning messages
+I didn't notice before.  I didn't want to remove them because they have
+some special things that might still be needed, if anybody still has these 
+AIX versions.  makefile, 29 Aug 2009.
+
+Built on RHEL 5.3 64-bit, regular and with OpenSSL 0.9.8e.  31 Aug 2009.
+
+Built on NetBSD 5.0.1/i386, regular and with OpenSSL 0.9.9-dev, 1 Sep 2009.
+
+Changed SSL message to mention LD_LIBRARY_PATH (Solaris), SHLIB_PATH (HP-UX),
+LIBPATH (AIX), or LD_LIBRARY_PATH (Linux).  ck_ssl.c, 3 Sep 2009
+
+Noticed that "make linux+openssl" fails to include -lutil a link time, which
+it needs for openpty().  That's because this target is obsolete.  I renamed
+it to be oldlinux+openssl and added linux+openssl as a synonym for
+linux+ssl.  makefile, 3 Sep 2009.
+
+Tested linux+openssl+zlib+shadow+pam, it's OK.  Also linux+krb5.  Also
+linux+krb5+ssl.  makefile, 3 Sep 2009.
+
+Tried building on Solaris 9 with OpenSSL 0.9.8k with
+solaris9g+openssl+shadow+pam+zlib, it failed like so:
+
+  ck_ssl.c:2875: error: conflicting types for 'inet_aton'
+  /usr/include/arpa/inet.h:52: previous declaration of 'inet_aton' was here
+  make[2]: [ck_ssl.o] Error 1
+  make[2]: Leaving directory hmt/sirius1/prv0/kd/fdc/solaris9ssl'
+  make[1]: [solaris2xg+openssl+zlib+pam+shadow] Error 2
+  make[1]: Leaving directory hmt/sirius1/prv0/kd/fdc/solaris9ssl'
+  make: [solaris9g+openssl+shadow+pam+zlib] Error 2
+
+The problem was caused by including an inet_aton() function ck_ssl.c for
+the benefit of platforms that don't have one in their libraries.  This is
+defeated by including NO_DCL_INET_ATON in KFLAGS.  I added this, but then
+I thought it would be a good idea to automatically sense the OpenSSL
+version so we can automatically set OPENSSL_097 or OPENSSL_098 rather than
+bombing out, so I added code to do that too, and also to set the Solaris
+version number: 9, 10, or 11.  The new entry is solaris9g+openssl.
+ckcdeb.h, makefile, 3 Sep 2009.
+
+Fixed a complaint in ckufio.c about implicit declaration of initgroups.
+ckufio.c, 4 Sep 2009.
+
+Built on Solaris 10 with gcc and Sun CC using new solaris{9,10,11} target
+that is like the new solaris{9,10,11}g one but without the gccisms.
+makefile, 4 Sep 2009.
+
+Changed solaris{9,10,11}g+ssl target to set only the SSL-specific things and
+then chain to the main solaris{9,10,11}g target.  Tested OK on Solaris 9 and
+10.  makefile, 4 Sep 2009.
+
+Created solaris{9,10,11}+ssl target that is exactly like the
+solaris{9,10,11}g+ssl except it chains to the solaris{9,10,11} target
+instead of the solaris{9,10,11}g one.  That is, it builds an SSL version of
+C-Kermit using Sun CC rather than gcc.  makefile, 4 Sep 2009.
+
+Tried building on HP-UX 10.20, bundled (non-ANSI) compiler ("make
+hpux1000").  This failed until I:
+
+ . Moved a struct inititialization out of setextern(), ckuus3.c.
+ . Removed an ANSIism from the declaration of sigchld_handler() in ckutio.c
+ . Added a cast to strcmp() in zvuser(), ckufio.c.
+
+Builds OK now.  Built OK with "hpux1000o" (the ANSI compiler) too.
+And with "hpux1000gcc".  Couldn't test "hpux1000o+openssl".  21 Sep 2009.
+
+The Sony Playstation 2 and 3 are 64-bit PowerPC platforms that can run Linux
+if it is installed as an "other OS" on its hard disk; and the Linux kernel
+since 2.6.21 supports the PS3 without any patching required.  Pawel Rogocz
+reported that "make linuxppc" (one of the old targets that has not yet been
+integrated into the main "linux" target) compiles OK on 2.6.29-ydl61.3
+(Yellow Dog Linux release 6.2 'Pyxis'), but fails at link time because
+'openpty' isn't found, because -lutil was not included, because that part
+was added only to the main linux target.  I asked him to try "make linux"
+and he sent back a transcript in which there were thousands of errors from
+the curses code ckuusx.c.  Later I tried it myself and it built without a
+hitch.  My theory is that between then and now, a missing piece of the
+ncurses library (/usr/include/ncursesw) was installed.  21 Sep 2009.
+
+HP-UX 9.05 on PA-RISC 9000/712 building with hpux0900 (bundled compiler):
+ . ckutio.c compilation failed with PENDIN and FLUSHO not defined in
+   pty_make_raw().  I dummied definitions for them to handle this situation
+   on this or any other platform where it might crop up.
+   ckutio.c, 24 Sep 2009.
+ . Ditto for the PTY module, + IMAXBEL.  ckupty.c, 24 Sep 2009.
+ . References to endusershell() were fatal in the bundled compiler.  Changed
+   the hpux0900 target to define NODCLENDUSERSHELL, and put a special case
+   in ckufio.c to not put a cast in front of the call if NODCLENDUSERSHELL
+   is defined.  Now it builds and links OK.  makefile, ckufio.c, 24 Sep 2009.
+
+HP-UX 9.05 on PA-RISC 9000/712 building with hpux0900o (optimizing compiler):
+ . Warnings in ckutio.c at line 14860 about arguments to select (pointers
+   are not assignment-compatible).  "man select" says arguments are ints.
+   Defining INTSELECT fixes these warnings but results in fatal errors later
+   around line 14881 and others in the area involving FD_SET.  This was too
+   involved so I put it back as it was.  24 Sep 2009.
+
+Built OK on Solaris 10 with Sun CC.  A couple warnings about implicit
+function declarations for curses routines because apparently they aren't
+declared in curses.h.  Tuff.  25 Sep 2009.
+
+Tried building on Solaris 10 with Sun CC and OpenSSL 0.9.8k, and this
+uncovered various loose ends in the solaris9+openssl target, which I fixed.
+makefile, 25 Sep 2005.
+
+Fixed four typos in printfs in ck_ssl.c, \% instead of just %.  25 Sep 2009.
+
+Squelched 20-some complaints about a character array being referred to
+directly instead of by a pointer, plus several other similar nits to get rid
+of all the compilation warnings on Solaris 10 with Sun C 5.8 Patch 121015-06
+2007/10/03.  ckctel.c, ckctel.h, 25 Sep 2009.
+
+Built the result on the same Solaris 10 system with gcc 4.2.4 using the
+new solari10g+openssl target, working out a few kinks here too.
+makefile, 25 Sep 2009.
+
+Made consolidated Solaris 9/10/11 64-bit targets for gcc, solaris9g64,
+solaris10g64, solaris11g64, tested on Solaris 10 Sparc. makefile, 25 Sep 2009.
+
+Made consolidated Solaris 9/10/11 64-bit targets for Sun cc: solaris9_64,
+solaris10_64, solaris11_64.  These simply set a couple flags and chain to
+the main solaris9 target.  makefile, 25 Sep 2009.
+
+Removed a bunch of old superfluous Solaris 9 and 10 targets: oldsolaris9,
+oldsolaris9lfs, solaris9g64 solaris9g_64, oldsolaris10 old solaris10lfs,
+oldsolaris10+openssl, oldsolaris10g+openssl, solaris10_64, oldsolaris10g,
+solaris10g_64, solaris10g64.  There are still plenty more to prune but it's
+a start.  makefile, 25 Sep 2009.
+
+Added or fixed some missing prototypes in ckctel.h:
+fwdx_send_xauth_to_xserver(), fwdx_parse_displayname.  25 Sep 2009.
+
+Improved the instructions for building secure versions in the makefile,
+using this example:
+
+  make solaris9+openssl "SSLINC=-I/opt/openssl-0.9.8k/include" \
+   "SSLLIB=-L/opt/openssl-0.9.8k/lib"
+
+makefile, http://kermit.columbia.edu/security.html, 25 Sep 2009.
+
+Built on HP-UX 11.11, 26 Sep 2009:
+ . make hpux1100 (ok)
+ . make hpux1100gcc (ok)
+ . make hpux1100o (gets a lot of warnings about sendpath and sendfile,
+    because they are also declared in <sys/socket.h>, but builds OK)
+ . make hpux1000gcc+openssl \
+    SSLINC=-I/opt/openssl/include SSLLIB=-L/opt/openssl/lib
+
+Note: sendpath and sendfile are not Kermit symbols.  The warnings are coming
+from socket.h: 'Redeclaration of "sendfile" with a different storage class
+specifier'.  This is nothing new; see notes of 2-4 Jan 2005.
+
+From Peter Eichhorn:
+ . Update to makefile to make current code build OK on HP-UX 8.00.
+ . Changes to format of some hints to make them more copy-and-pastable.
+makefile, ckuu5.c, 28 Sep 2009.
+
+From Peter Eichhorn: Changes to HP-UX 7.0 target to increase the switch table
+stack size, which was overflowing.  makefile, 30 Sep 2009
+
+HP-UX 6.5 (1989), "make hpux0650tcpc"... (8:19...)  Needed to not include
+arpa/inet.h (which doesn't exist) and not use host address lists (add
+-DNOHADDRLIST), which gets us past ckcnet.c, but in ckcftp.c we bomb out on
+FD_SETSIZE undefined.  Somehow we worked around this in ckcnet.c.  Patched
+in a definition in ckcftp.c, and also added -DINTSELECT to compiler flags.
+Compiles ok, bombs at link time on bcopy, bzero, FD_ZERO, FD_SET, FD_ISSET.
+Now it compiles and links OK but dumps core when started.  Added
+-DNOCKGETFQHOST, rebuilt from scratch (takes 35 minutes).  It starts OK, but
+it dumps core when given a "telnet xxx" command, where xxx is a hostname.
+However, it works OK if an IP address is used: "telnet 123.45.6.78".  It
+took all day to track this down, but now it's fixed (see the #ifdef HPUX6
+sections of ckcnet.c).  So now (for the first time, I think) we have both
+telnet and ftp in HP-UX 6.x, if anyone cares.  ckcnet.[ch], ckcftp.c,
+makefile, 2 Oct 2009.
+
+Changed default SET TERMINAL TYPE type for K95 from vt320 to vt220.  This is
+because Unix OS's such as Solaris have dropped vt320 as a terminal type.
+settrmtyp(), ckuus7.c, 5 Oct 2009.
+
+I moved the PUTENV command code, which was inline, to a function, doputenv().
+ckuus[r7].c, ckuusr.h, 5 Oct 2009.
+
+Changed the UNIX version of SET TERMINAL TYPE to take a value and then do
+the equivalent of "export TERM=value" by calling doputenv().  This sets
+\$(TERM) correctly and passes its value along to inferior processes.
+However, to make this take effect within Kermit itself (for the fullscreen
+file transfer display and for the SCREEN command, Ctrl-L, etc) I also had to
+reinitialize the curses database, which is tricky because normally if you
+feed it an unknown terminal name, it just exits.  ckuus7.c, 5 Oct 2009.
+
+Changed the little-known and little-used RESET command (which closes all
+open files) to also put command echoing back to normal in case it got
+messed up somehow (as in HP-UX 6.5, upon returning from PUSH).
+ckuusx.c, 5 Oct 2009.
+
+For Unix, increased string buffer sizes for wildcard expansion for all
+platforms that have BIGBUFOK defined from 500000 (0.5M) to 10000000 (10M)
+bytes, and for 64-bit builds to 2000000000 (2G) bytes.  No point making
+it bigger than that because malloc's argument is a size_t, which is an int.
+ckufio.c, 5 Oct 2009.
+
+Built on Mac OS X 10.4.11, required one minor adjustment to the makefile
+(-DNODCLINITGROUPS).  This was using the macosx10.5 target, which is
+supposed to be universal like the linux and netbsd targets, but not yet
+proven.  Also built a 64-bit version (-mpowerpc64 -mcpu=G5 -mtune=G5
+-arch ppc64); it compiles and links OK but won't start: "Bad CPU Type
+in executable".  Fix later...  makefile, 5 Oct 2009.
+
+Changes from Seth Theriault to suppress signed vs unsigned char warnings in
+Mac OS 10.5.8 from gcc4, and a new makefile target for Mac OS X (presumably
+10.3.9 or later) + Kerberos 5 and OpenSSL.  ckutio.c, ckuath.c, ckctel.c,
+ckcnet.c, ckcftp.c, ck_crp.c, makefile, 6 Oct 2009.
+
+  Later I had to back out of these, because although it made for a
+  clean build, in the resulting executable SSL connections didn't work.
+
+Tue Oct  6 17:23:27 2009
+FTP address resolution is broken, but ftp_hookup() hasn't changed.
+So... (see the #ifdef HPUX6 sections of ckcnet.c)  (I did, and I rolled
+back some of the changes from the other day, but it made no difference.)
+Putting back the ckcftp.c from a few weeks ago makes no difference.
+Putting back the ckcnet.c from a few weeks ago makes no difference.
+
+Added patches from Seth Theriault so macosx10.5+krb5+openssl would build
+on Mac OS X 10.3.9.  makefile, ckcftp.c, 7 Oct 2009.
+
+Built today's code on Linux RHEL4, NetBSD 5.0.1, Solaris 9, and Mac OS X
+10.4.11, both with and without SSL.  The NetBSD system has OpenSSL 0.9.9-dev.
+7 Oct 2009.
+
+In Mac OS X 10.6, the following symbols are unresolved at link time:
+_des_key_sched, _des_new_random_key, _des_ecb_encrypt,
+_des_init_random_number_generator, _des_fixup_key_parity.  This is
+with OpenSSL 0.9.8k.  But it doesn't happen on other platforms that
+have 0.9.8k.
+
+Added SET SESSION-LOG NULL-TERMINATED-TEXT.  This is for the benefit of a
+speech synthesizer that will speak a line of text only after receiving a
+NUL character.  A more general solution would be to define a filter or
+whatever, but who has time.  ckuus[23x].c, 7 Oct 2009.
+
+Consolidated Mac OS X targets, and removed experimental 64-bit ones, because
+they never could work in 10.5 and earlier because 64-bit libs are missing,
+and 10.6 and later are 64-bit automatically.  makefile, 8 Oct 2009.
+
+Built on Mac OS X 10.6.1.  It came out automatically as a 64-bit build
+because __LP64__ is defined somewhere that I can't find.  But this explains
+why the 0.9.8k on 10.6 comes up with missing symbols when the 0.9.8k lib
+10.5 (or on Solaris or on Linux) does not: it's a different library: "Mach-O
+64-bit dynamically linked shared library x86_64", rather than "Mach-O
+dynamically linked shared library ppc".  Probably the 64-bit version has
+some things #ifdef'd out.  Added -m32 to the CFLAGS and LNKFLAGS for the
+macosx+krb5+openssl targets, and it built OK one time.  But then the errors
+came back.  makefile, 8 Oct 2009.
+
+Updated C-Kermit installation for Mac OS X in ckuwr.html on the website.
+8 Oct 2009.
+
+Tried some things to get around the problem with OpenSSL in Mac OS X 10.6,
+to no avail.  Asked Jeff.  He said, "MacOS X no longer includes DES anywhere
+on the system.  Not for SSL, not for Kerberos, not for anything.  This will
+increasingly become the situation on new operating systems.  Windows 7 and
+2008 R2 will also ship with no DES."  Sure enough, the Mac OS X Server
+Upgrading and Migrating document for 10.6 says, "Mac OS X Server v10.6 does
+not support single DES encryption. It supports AES 128 and 256 encryption
+types. However, during a migration or upgrade from v10.4 to v10.6, servers
+that were Kerberized by the v10.5 Open Directory server will not use the AES
+128 or 256 encryption types. To use the AES 128 or 256 encryption types you
+must re-Kerberize all servers."  12 Oct 2009.
+
+DES and 3DES encryption can be excluding removing the -DCK_DES flag.  I
+removed this one and -DLIBDES (and -m32) and this makes a working 64-bit
+version.  Then I added code to the macosx+krb5+openssl target to use these
+flags if the Mac OS X version was 10.5 or less and leave them out for 10.6
+or later.  Tested on 10.4.11 and 10.6.1.  A better way to do it might have
+been "nm -gj libssl.dylib | grep des_", but that gives the same results on
+10.4 and 10.6.  Also, 10.6 still has /usr/include/ssl/des.h.
+makefile, 13 Oct 2009.
+
+Next issue:
+  In file included from ckutio.c:15674:
+  /usr/lib/gcc/i386-redhat-linux/3.4.6/include/varargs.h:4:2: #error "GCC no
+  longer implements <varargs.h>."
+  /usr/lib/gcc/i386-redhat-linux/3.4.6/include/varargs.h:5:2: #error "Revise
+  your code to use <stdarg.h>."
+
+The problem occurs when trying to force a non-ANSIC build with GCC.
+Changing the source file to include <stdarg.h> instead of <varargs.h>
+doesn't help because evidently <stdarg.h> requires an ANSI C compiler.
+Nothing can be done about this.  13 Oct 2009.
+
+Next issue: Can't compile ckcftp.c with -DNOCSETS or -DNOSPL; some
+#ifdef/#endif doesn't match up.  Sigh, this is the hardest kind of thing to
+debug.  There's 17,622 lines of code in this module and no tool that I know
+of.... Wait, I wrote one.  But it shows all the #if/#ifdef/#ifndef's and
+#endifs matching up just fine.  Backing off to ckcftp.c of a few days ago
+(before char / unsigned char casts were added), I see that it builds OK, so
+I backed off to that one, but put back the special case #ifdef for MACOSX103
+declaring CONST gss_OID_desc, and it builds OK (the other stuff was purely
+cosmetic, when will I learn?).  ckcftp.c, 13 Oct 2009.
+
+Protected cvtstring() and related functions with #ifdef NOCSETS..#endif,
+and ditto for the character-set conversion code in dorename().
+ckuus6.c, 13 Oct 2009.
+
+Fixed an #endif /* TNCODE */ that was a line too low in ttptycmd(),
+causing -DNONET builds to fail.  ckutio.c, 13 Oct 2009.
+
+There was a reference to doputenv() that wasn't guarded by #ifndef NOPUTENV,
+fixed in ckuus7.c, 13 Oct 2009.
+
+Moved doputenv() and settermtyp() out of an #ifdef NOLOCAL section because
+these are useful even when not making connections.  ckuus7.c, 13 Oct 2009.
+
+Moved havelfs declaration outside of #ifdef NOXFER because it was also used
+for other things.  ckcmai.c, 13 Oct 2009.
+
+COPY /PRESERVE depended on code from the Kermit protocol module, which
+is omitted in -DNOXFER builds.  Disabled COPY /PRESERVE in -DNOXFER
+builds.  ckuus6.c, 14 Oct 2009.
+
+SHOW PROTOCOL code for external protocols had to be #ifdef'd out for
+-DNOPUSH builds.  ckuus4.c, 14 Oct 2009.
+
+There was some confusion between "No XYZMODEM" and "No extermal protocols";
+cleared up in ckuus3.c, 14 Oct 2009.
+
+After all that, 86 different combinations of feature selections built OK on
+Linux.  And the Kerberized version (K5) works OK on Linux for Telnet and FTP.
+14 Oct 2009.
+
+Changed version number to 9.0.  All modules, 16 Oct 2009.
+
+Need to make LOG SESSION log to a tty.  Right now "log session
+/dev/ttyKeySerial1" says "Write permission denied" even though the device is
+crw-rw-rw-.  This happens in zchko(), which is called by cmofi().  The
+problem is that /dev/ is not writeable.  I added a Unix-only clause that
+attempts to open the file for write access using open(), in order to get a
+file descriptor, which then can be passed to isatty() to check if it's a
+tty, and if so, to allow access.  And then close it.  I tested this on Mac
+OS X as follows:
+
+  log session /dev/ttyKeySerial1
+  telnet somehost
+
+The Mac's serial port was connected to the serial port of another computer
+where Kermit displayed the incoming characters in CONNECT mode.  Glitches:
+
+ 1. The port has to be set up as desired in advance, outside of Kermit.
+ 2. log session /dev/ttyKeySerial1 will hang if any required modem signals
+    are not present when the port is opened.
+ 3. Bypasses lockfile mechanism - so we do this only if -DNOUUCP.
+
+For (2), I tried setting O_NDELAY / O_NONBLOCK, and this allowed zchko() to
+continue, but then it freezes in the subsequent fopen().  So I changed
+zopeno() to also check if the device is a serial port, and if so, to open()
+it with O_NDELAY / O_NONBLOCK, and then convert the file descriptor into a
+file pointer with fdopen().
+
+Now for the speaking device that needs lines to be terminated by NUL...
+
+  set session-log binary       <-- need to put these in SHOW LOG
+  set session-log null-padded      (and in HELP SET LOG)
+  set line /dev/ttyKeySerial1
+
+This part works.
+
+This feature is enabled only for -DNOUUCP builds because serial ports aren't
+like other Unix files; we would have to create a lockfile, but we can't do
+that...  actually, ttlock() takes a name as an argument, but ttunlck() does
+not, so there would be no way to remove the lock.  Anyway, there is only one
+API for configuring the port (speed, flow control, etc) and it only works
+with the SET LINE device, not any random file.  To fix this would require
+massive redesign and changes.  ckuus[23].c, ckufio.c, 19-20 Oct 2009.
+
+I made -DNOUUCP the default for Mac OS X, since everybody winds up building
+it that way anyhow.  To undo this, do "make macosx KFLAGS=-UNOUUCP".
+makefile, 21 Oct 2009.
+
+Changed SET SESSION-LOG TEXT to strip out ANSI escape sequences; 
+previously there wasn't that much difference between TEXT and BINARY logs.
+It's still not perfect; for example it doesn't delete characters that the
+user erased.  (Made sure this still builds with -DNOESCSEQ.)
+ckucns.c, 22 Oct 2009.
+
+Changed SHOW LOG to show the SET SESSION-LOG settings, as well as
+SET DEBUG, which was not shown before.  ckuus5.c, 22 Oct 2009.
+
+If a series of PUTENV commands is given, each new one undoes the previous
+one, so only the last definition is seen by the new fork (or by Kermit
+itself).  Turns out you can't feed automatic variables to putenv(); they
+have to be static, so to allow for multiple PUTENV commands Kermit has to
+maintain an array of static strings.  ckuus7.c, 6 Nov 2009.
+
+From Seth Theriault, a better way for the makefile to determine the
+Mac OS X version number; there's a program for this, sw_ver.  makefile,
+6 Nov 2009.
+
+Peter Eichhorn reported that file-transfer failure hints were not coming
+out since Dev.27.  The only change I made since then was to skip them if
+the file-transfer protocol was not Kermit.  I was using the wrong variable
+in the tests, 'proto' instead of 'protocol'.  ckuus5.c, 6 Nov 2009.
+
+Changed Mac OS X targets to correctly extract the Mac OS major version
+from uname -r in order to choose correctly between utmp and utmpx; this
+wasn't working in 10.6.1.  makefile, 6 Nov 2009.
+
+Fix from Seth T. for an oversight in the previous edit.  Also add
+MACOSX103 to "show features" display.  makefile, ckuus5.c, 10 Nov 2009.
+
+Added REJECT as a synonym for DISCARD in SET FILE COLLISION; it's more
+intuitive and more accurate.  ckuus[27].c, 15 Nov 2009.
+
+\fsplit() and \fword() always break on 8-bit characters unless you explicitly
+put every single 8-bit value into the include set, e.g. (for a TSV file):
+
+  undef include
+  for \%i 128 255 1 {
+      if == \%i 9 continue
+      .include := \m(include)\fchar(\%i)
+  }
+  .\%n := \fsplit(\m(line),&a,\9,\m(include))
+
+I changed cksplit() to treat all 8-bit bytes 128-255 as non-break characters
+by default.  It might have made more sense to do this for 160-255 (since
+128-159 are traditionaly C1 control characters) but thanks to Microsoft
+tradition is out the window.  To treat one or more 8-bit characters as break
+characters, put them in the break set.  This might break some scripts, but I
+doubt it because this flaw was so awful that if anyone had come up against
+they would have let me know.  ckclib.c, 16 Nov 2009.
+
+Changed the netbsd target to set -funsigned-char, since cc on NetBSD is
+actually gcc.  makefile, 16 Nov 2009.
+
+Changed macosx targets to get the CPU type from the HOSTTYPE environment
+variable.  Also added getenv("HOSTTYPE") as a last-resort method to set the
+\v(cpu) variable at runtime (maybe it should be the first resort?)...
+ckuus4.c, makefile, 16 Nov 2009.
+
+Made sure the solaris9_64 and solaris10 targets still work.  16 Nov 2009.
+
+Made sure the current source package builds OK on HP-UX 10.20...  Got a lot
+of "warning 6062: Optdriver: Exceeding compiler resource limits in xxx; some
+optimizations skipped. Use +Onolimit if override desired" but it builds OK.
+Tested long file transfer; works OK.  17 Nov 2009.
+
+Built on FreeBSD 7.2 with and without OpenSSL, all OK.  17 Nov 2009.
+
+Built on NetBSD 5.0.1 with and without OpenSSL, all OK, but netbsd+krb5
+fails with "can't find -lgssapi_krb5"; worked around this with
+"K5LIB=-L/usr/local/kerblib" (where the lib actually is on this host) but
+then it failed with "ckcftp.c:13868: error: 'gss_nt_service_name' undeclared".
+17 Nov 2009.
+
+I found a VMS 6.2 system... Takes a loooong time to build there.  In
+ckuusy.c, DEC C didn't like the prototypes and declarations of dorlgarg()
+and dotnarg() as static so I made them not static.  But that didn't help,
+now it fails at the very end, saying the final #ifdef is an invalid
+statement.  It looks like an #ifdef mismatch that affects only VMS.  I ran
+my #ifdef matcher, it turned up nothing.  I substituted a copy of ckuusy.c
+from 2007, it comes up with the same errors.  Then I substituted the copy
+from 8.0.211 from 2004, and this one compiled OK and, miraculously, the
+whole mess even linked OK and runs OK.  The Alpha binary is 2.84MB.  Now I
+have 4500 lines of code to compare....  I went through the two files line by
+line and I can't see a single thing wrong.  I gave up and tried building the
+TCP/IP version.  It builds fine except for ckuusy.c, with the utterly
+useless error message:
+
+  #endif /* NOCMDL */
+  ...................^
+  %CC-E-BADSTMT, Invalid statement.
+
+Indicating the last line in the file.  Just for the heck of it, I put
+another line after that one:
+
+  /* This is a test */
+
+and got:
+
+  /* This is a test */
+  ....................^
+  %CC-E-BADSTMT, Invalid statement.
+
+So it is not objecting to anything in the file.  Trying the old LISP trick,
+I put an extraneous closing bracket after that.  Success!  Honestly, I don't
+see anything wrong with file.  It's DEC C V5.3-006.  I suspect a C bug.
+I'll leave it like this for now until I get access to some other VMS
+versions.  Another clue is that when building the network version I get a
+horrible warning I never saw before from a module that hasn't been touched
+in a very long time (ckvrtl.c).  Also, in the network version, I note that
+the FTP code is not compiled in.  We have to try this again with some
+command-line switches, but it'll do for now.  ckuusy.c, 18 Nov 2009.
+
+---C-Kermit 9.0 Alpha.01---
+
+From Steven Schweda (SMS), the real solution for the VMS closing brace
+problem, it wasn't a DECC bug, it was a me bug.  ckuusy.c, 20 Nov 2009.
+
+Rediscovered the new VMS build options: f for Long Files, i for Internal
+FTP.  "make mnf" doesn't work on VMS 6.2, it looks like the VMS definition
+for CK_OFF_T got lost.  Same thing with "make mfi".  Come back to this later.
+
+From Gerry Belanger, a fix to INPUT /COUNT:n.  ckuus4.c, 26 Nov 2009.
+
+Added \fsqueeze(s), returns string s with leading and trailing whitespace
+removed, Tabs converted to Spaces, and multiple spaces converted to single
+spaces.  For now, ASCII only, no options.  ckuusr.h, ckuus[24].c, 27 Nov 2009.
+
+I wrote a Kermit script to read a big file of addresses on Solaris 9,
+\fsqueeze()ing each line.  After about 14000 lines, there was a malloc
+failure in getnct() (the command-file reader).  There's nothing wrong with
+\fsqueeze(), the failure is on a deeper level, because the same thing
+happens if I use \fupper() (which is structurally identical to \fsqueeze())
+in the same script.  The problem is not in getnct() either, because every
+malloc() is freed (I checked).  On the other hand, the same script (with
+\fupper() instead of \fsqueeze() completes OK in C-Kermit 8.0.201.  If I
+remove the function call (\fsqueeze() or \fupper()) from the script, it also
+runs OK in 9.0.  This seems to point the finger at fnevel(), which contains
+countless malloc's and free's.  But comparing fneval() between 8.0.211 and
+9.0, I don't see any difference that would explain this behavior -- nothing
+at all that involves malloc(), makstr(), or free().  Nor any pertinent
+change in the caller (zzstring) of fneval().  27 Nov 3009.
+
+Another problem is that when this happens, the error is not caught (e.g. by
+the IF FAIL statement after the command that contains the function call);
+instead, C-Kermit returns immediately to its prompt.  27 Nov 2009.
+
+It could simply be that some of the buffers we allocate are much bigger now.
+But again, I don't see much difference between 8.0.211 and 9.0; we were
+already allocating 32K command-related buffers (malloc() takes a size_t, and
+size_t is an int almost everywere).  I built the same source on NetBSD and
+ran the same script (with \fqueeze()), and it worked fine.  Let's worry
+about this later, if it comes up.  27 Nov 2009.
+
+Built OK on Silicon Graphics IRIX 6.5 R10000; regular build OK, SSL and
+Kerberos builds failed.  30 Nov 3009.
+
+Tried to build on Digital Unix 4.0F but it blew up in ckutio.c, apparently
+not recognizing any of the terminal struct symbols from termios.h.  Tried
+again with gcc, same thing.  Tried explicitly #including <sys/termios.h>
+within #ifdef TRU64, same thing.  What could have changed?  30 Nov 2009.
+
+Built OK on Linux RHEL5.4/Itanium-2, make linux.  The secure build
+required "FLAGS=-DNO_KRB5_INIT_ETS" and built OK.  30 Nov 2009.
+
+Built OK on Digital Unix 4.0F using "make osf" instead of "make tru64-40f".
+I don't know why the specific target doesn't work, but it's not worth
+chasing down.  2 Dec 2009.
+
+Built OK on MirBSD 10, despite a lot of gratuitous compiler warnings.  Built
+OK on MirBSD 10, OpenBSD 4.5, and Fedora 10.  3 Dec 2009.
+
+(Various other successful Unix builds in these weeks...)
+
+Built on VMS 7.2 and 8.3 with and without TCP/IP, no problems.  11 Jan 2010.
+
+Built on VMS 8.3 with "make fi" to include the FTP client and long-file
+support (mid Jan 2010).
+
+Built on VMS 8.3 with UXC 5.6 and HP SSL 1.3, which is OpenSSL 0.9.7e.
+It compiled and linked OK but when I tried to make an FTP SSL connection
+it crashed in SSL$LIBSSL_SHR, which is called from ssl_auth(), after having
+had TLS accepted as an authentication type, but before actually
+authenticating.  In Unix:
+
+ 19. ftp open ftp.somecompany.com /user:pge.com/test_quota /password:xxxxxx
+Connected to ftp.somecompany.com.
+220-Somecompany FTP v6.0 for WinSock ready...
+220 Welcome to the online storage FTP server.  Please check the main web
+site for system announcements and AUP. (O)
+---> AUTH TLS
+234 AUTH command OK. Initializing SSL connection.
+TLS accepted as authentication type
+SSL DEBUG ACTIVE
+=>START SSL/TLS connect on COMMAND
+
+In VMS:
+
+ 19. ftp open ftp.somecompany.com /user:pge.com/test_quota /password:xxxxxx
+Connected to ftp.somecompany.com.
+220 Somecompany FTP v6.0 for WinSock ready...
+---> AUTH TLS
+234 AUTH command OK. Initializing SSL connection.
+TLS accepted as authentication type
+SSL DEBUG ACTIVE
+%SYSTEM-F-ACCVIO, access violation, reason mask=04, virtual
+address=FFFFFFFF8001A120, PC=000000000068B118, PS=0000001B
+
+Note: The Unix version received the second 220 response, the VMS version did
+not.  That's odd, it's the same code...  25 Jan 2010.
+
+Added some essential details to the HELP FSEEK text.  ckuus2.c, 25 Jan 2010.
+
+Discovered that the result returned by \fsearch() is totally unreliable.
+This is probably too hard to fix.
+
+FSEEK did not pay attention to SET CASE, searches were always case sensitive.
+Fixed in ckuus7.c, 26 Jan 2010.
+
+FSEEK failed to find anything if the search pattern was matched in the first
+line of the file.  Fixed in ckuus7.c, 26 Jan 2010.
+
+\fword() and \fsplit()....  Another change, but not backwards-incompatible.
+One may now put the word ALL (just like that, all uppercase) as the include
+set (4th argument) to indicate that there will be no break characters other
+than those explicitly given in the break set, e.g. \fsplit(\m(xx),&a,:,ALL)
+breaks a line only on a colon (:), nothing else.  The original rules for
+cksplit() were more than a little counterintuitive: the default break set is
+all non alphanums, and the default include set is all alphanums, so if you
+wanted to parse (say) a CSV file, breaking only on comma, you had to think
+of all the characters you wanted to keep.  This way you just say ALL.
+ckclib.c, 26 Jan 2010.
+
+Speaking of CSV files... How can you put comma as a function argument when
+comma is the function-argument separator?  Use one of these forms:
+
+ \fsplit(\m(xx),&a,",",ALL)
+ \fsplit(\m(xx),&a,{,},ALL)
+ \fsplit(\m(xx),&a,\44,ALL)
+ \fsplit(\m(xx),&a,\fchar(44),ALL)
+
+From John Dunlap, U. of Washington Applied Physics Lab: 'When "stty -a <
+/dev/ttyS0 | grep crtscts" shows "crtscts" (not "-crtscts") and when using a
+three wire serial interface and when asking kermit to not use flow control
+(set flow none) then "ckutio.c1" (see attachments) fails while "ckutio.c"
+works.  The result of "diff -u ckutio.c1 ckutio.c" is attached as "diffs"'.
+ckutio.c, 26 Jan 2010.
+
+Changed the year from 2009 to 2010 in the modules I worked on today and in
+the heralds, etc.  ckckmai.c, ckuus5.c, ckutio.c, ckclib.c, ckuus7.c,
+26 Jan 2010.
+
+Built on Linux Fedora Core 3, regular and with OpenSSL 0.9.7a.  Built on
+Ubuntu 9.4 OK, but SSL and Kerberos builds failed due to not finding libs
+and/or header files.  I'm sure this could be fixed...  27 Jan 2010.
+
+Added SSL, KRB4, and KRB5 to the startup herald for versions that were
+built with SSL, Kerberos 4, or Kerberos 5.  Built OK on Fedora 3 with
+linux+krb5+ssl and new banner shows correctly.  ckuus5.c, 27 Jan 2010.
+
+Set NO_KRB5_INIT_ETS by default in ckuath.h since krb5_init_ets() is a no-op
+in Kerberos 1.4.x and later and in some installations it can't be found,
+which clobbers the build.  ckuath.h, 27 Jan 2010.
+
+Adapted to MINIX 3 1.5, the first version that has virtual memory according
+to Andy T, who should know.  On earlier versions (e.g. MINIX 3 1.2) any
+attempt to build C-Kermit causes the compiler to crash.  Now the compiler
+doesn't crash but it spews out countless warnings about old-fashioned
+function declarations that I don't get anywhere else.  The real problems
+came in ckutio.c where numerous symbols were undefined at compile time and
+the POSIX function tcgetpgrp() was not found at link time, even though there
+is a prototype for it in the MINIX header files, and there is no alternative
+(since POSIX doesn't let us use ioctl()).  Also note that there is some
+confusion over the compile-time symbols MINIX, MINIX2, MINIX3, and MINIX315.
+You would expect MINIX to mean "any version of MINIX" but in some parts of
+ckutio.c it means MINIX 1.0.  I sincerely doubt that C-Kermit 9.0 can be
+built on any version of Minix before 3.1.5 so I removed the confusion and
+made MINIX mean "any Minix".  It builds on 3.1.5 OK now, except for the FTP
+client.  This can probably be fixed but...  Modules changed: ckcdeb.h,
+ckuver.h, ckcmai.c, ckuus5.c, ckutio.c, 1 Feb 2010.
+
+Later.. Andy says MINIX does not support job control, so no program is ever
+in the background.  That settles that!  1 Feb 2010.
+
+Built OK on Minix, Linux, Mac OS X, Solaris 9, NetBSD 5.0.1...  1 Feb 2010.
+
+---C-Kermit 9.0 Alpha.02---
+
+From Christian Corti at Uni-Stuttgart.de: fixes to allow building on SunOS
+4.1, which once was my main development platform but which is long-gone from
+here.  ckupty.c, ckutio.c, 9 Feb 2010.  (He says it is also necessary to
+comment out the "struct winsize" and "struct ttysize" in sys/ioctl.h;
+otherwise there will be a conflict with sys/ttycom.h (included by termios.h)
+which also declares these structs. But you need both includes.')
+
+From John Dunlap, a fix for Kermit protocol fixed packet-timeout interval
+going to a unexpected value (missing else clause in two places).
+ckcfn2.c, 9 Feb 2010.
+
+Added an aixg target to build on AIX with gcc when gcc is not installed as
+cc, and also added CC=$(CC) CC2=$(CC) clauses to the aix and aix+ssl
+targets.  Wow, AIX really loses bigtime when receiving files through its ssh
+server.  Streaming can't be used, sliding windows recover from errors but
+there are tons of them using the default 4K packets; 500 works much better.
+Built with IBM cc and gcc, and also tested (successfully) the new aix+ibmssl
+target, in which the OpenSSL headers and libs are in a standard place.
+makefile, 9 Feb 2010.
+
+In ckupty.h, make the #include <sys/ioctl.h> be #ifndef SUNOS41.
+From Christian Corti.  10 Feb 2010.
+
+Built on VMS E8.4.  12 Feb 2010.
+
+Tried to build on a real VAX-11/785 but the machine seems to be seriously
+wedged.  12-15 Feb 2010.
+
+Added note to CKVKER.COM to the effect the the 'f' option has no effect
+on VAX architecture.  15 Feb 2010.
+
+Moved the #include "ckvrtl.h" in the FTP module to below the include for
+utime.h, because building the VMS version with the 'i' option (meaning
+"include internal ftp client") results in "struct utimbuf tp" erroring out
+because struct utimbuf is not defined yet (at least in some version of VMS
+with some version of C).  From Rob Brown, ckcftp.c, 20 Feb 2010.
+
+From Martin Vorlaender: new code in VMS C-Kermit build procedure to detect
+OpenSSL version automatically.  ckvker.com, 22 Feb 2010.
+
+Added code to INPUT command to strip ANSI escape sequences.  It's activated
+by SET SESSION-LOG TEXT.  ckuusr.h: added prototype for chkaes();
+ckucon.c, ckucns.c: made inesc[] and oldesc[] global instead of static; 
+ckuus4.c: doinput() code for skipping escape sequences.  1 Mar 2010.
+
+Peter Eichhorn complained that if you make an ssh connection with Kermit,
+then log out from the ssh host, and then use a "connect" command to
+make a new connection to the same host (which you can do with Telnet),
+Kermit says (e.g.):
+
+ DNS Lookup... Can't get address for ssh -e none somehostname
+ Sorry, can't open ssh -e none somehostname: Error 0
+
+I added code to detect and handle this case and it seems to work OK, even
+though it's kind of a hack.  ckuusr.[ch], ckuus7.c, 1 Mar 2010.
+
+There has never been a clean way to put debugging messages (ECHO commands)
+in a script which are executed only if debugging is desired and ignored
+otherwise.  You'd have to set a random variable and test it, or define a
+macro or whatever.  To make this more straightforward, I added SET DEBUG
+MESSAGE ON/OFF/STDERR, and added a new MESSAGE (syn: MSG) command for printing
+debugging messages to stdout if SET DEBUG MESSAGE is ON or to stderr if SET
+DEBUG MESSAGE is STDERR.  ckcmai.c, ckuus[r23].c, 12 Mar 2010.
+
+Also for debugging and error messages, I added \v(lastcommmand) so that
+the command that failed can be included in an IF FAIL or DEBUG error message.
+This works even for commands that have syntax errors.
+ckuusr.h, ckuus5.c, ckucmd.c, 12 Mar 2010.
+
+From SMS for VMS: 'Added/documented P3 options INTSELECT, OLDFIB, OLDIP.
+Disabled (commented out) automatic definition of NOSETTIME for VMS before
+V7.2 (vms_ver .lts. "VMS_V72").'  ckcdeb.h, ckcftp.c, ckcnet.c, ckuus[2567].c,
+ckvfio.c, ckvker.com, ckvrtl.[ch], 15 Mar 2010.
+
+Exposed inesc[] and oldesc[] for VMS, so new INPUT command escape-sequence
+stripping can work (really, chkaes() and related global variables should be
+moved out of ck[uvd]con.c/ckucns.c and into a common module; do that later).
+ckuusr.h, ckvcon.c, 15 Mar 2010.
+
+Built OK on Solaris9, Mac OS X 10.4.11, RHEL4 (32-bit), RHEL5 (64-bit),
+AIX 5.3, SCO OpenServr 6.0.0...  15 Mar 2010.
+
+Not so good on VMS, turns out I made a typo in one of the VMS updates
+(#ifndef OLDIP instead of #ifdef...).  ckcnet.c, 16 Mar 2010.
+
+More from SMS for VMS, 16 Mar 2010:
+ . Set MAXPATH correctly for VMS, ckcdeb.h.
+ . NAM -> NAML, QIO replaces system( "SET PROTECTION"), bugfixes in
+   cvtdir() and nzltor(), ...  (See comments): ckvfio.c, new ckvrms.h.
+   (The RMS code in ckvfio.c was almost totally rewritten)
+ . Moved "NAMX$*" (and related) macros to ckvrms.h, and renamed to
+   "NAMX_*" (and similar "$" -> "_"), moved "FIB_*" macros from ckvrtl.c.
+
+These changes are mainly to accommodate the ODS5 file system, which has
+longer and mixed-case filenames, and also to execute certain commands
+(e.g. for setting file protection, deleting directories) directly instead
+of using a system() command.
+
+Built OK on VMS 8.3 (with and without network support).  16 Mar 2010.
+
+Failed to build on VMS 6.2.  16 Mar 2010.
+
+FreeBSD 8.0 <libutil.h> has a hexdump() prototype that conflicts with the
+hexdump macro defined in ckcdeb.h.  Since the same thing is likely to happen
+elsewhere, I changed the Kermit macro to ckhexdump as well all references to
+it: ckcdeb.h, ckcftp.c, ckcnet.c, ckctel.c, ckuath.c, ckutio.c, 16 Mar 2010.
+
+Built OK on Digital Unix Tru-64 4.0E using "make osf", 16 Mar 2010.
+
+Tried again to build Digital Unix Tru64 4.0E using "make tru64-40e", but
+something prevents it from picking up the termios symbols and it blows up in
+ckutio.c, whereas this used to work in earlier C-Kermit versions.  This is
+the only Tru64 system I still have access to, so I can't tell if it's a
+local peculiarity or what.  Note that POSIX is not defined for this build.
+But if I define it, I get into trouble with "struct timeval".  Tried again
+with "KFLAGS=-DPOSIX -DNOTIMEVAL" but that doesn't help.  Tried "make
+dec-osf" and that worked OK but oddly enough it makes a Kermit with less
+features than "make osf".  16 Mar 2010.
+
+To go with MESSAGE and SET DEBUG MESSAGE, I added IF DEBUG, which is true
+if SET DEBUG MESSAGE is not OFF and false otherwise.  ckuusr.h, ckuus6.c,
+16 Mar 2010.
+
+From SMS: Corrections to my merging of SMS's changes, ckcftp.c, ckvrtl.h.
+Builds OK on VMS 6.2 now.  Also did an SSL build on VMS 8.3 with OpenSSL
+m0.9.7e and "OPENSSL_DISABLE_OLD_DES_SUPPORT" was included in P3
+automatically by Martin V's addition to ckvker.com.  17 Mar 2010.
+
+From SMS: #include <types.h> earlier for VMS in ckcdeb.h to pick up off_t
+before it is referenced.  This allows C-Kermit to compile on VMS/Alpha 6.2
+but linking fails on fseeko() and ftello() (and yet, a functional executable
+is created, and FSEEK works right).  Builds the same way with no problems at
+all on VMS 8.3 / Alpha.  In this case we get the full 64-bit arithmetic...
+Well, 62 bits:
+
+  ATLAS::C-Kermit>( ^ 2 63)
+   9223372036854775000.0
+  ATLAS::C-Kermit>( ^ 2 62)
+   4611686018427387904
+
+whereas on VMS 6.2 we get integers only up to (^ 2 30).  17 Mar 2010.
+
+Changed the VMS build procedure to enable large file support automatically
+for non-VAX and VMS 7.3 or greater.  No reason not to include this feature.
+Changed the sense of the F option to DISABLE large file support in the
+unlikely case that C-Kermit is being built on a suitable platform but the
+C library is older than VMS73_ACRTL-V0200, in which case fseeko() and
+ftello() will come up missing at link time.  ckvker.com, 18 Mar 2010.
+
+Changed VMS build procedure to include the FTP client in any network build
+by default.  Changed the sense of the I option to exclude the FTP client,
+in case anybody would want to do that.  ckvker.com, 18 Mar 2010.
+
+From SMS: updated dependencies in CKVKER.COM, fix the "don't reinclude me"
+clause in CKVRTL.H.  19 Mar 2010.
+
+Built OK on VMS 6.2 and 8.3 with and without networking.  Large file support
+included automatically in VMS 8.3  FTP client included automatically in both
+network builds.  19 Mar 2010.
+
+Changed hexdump() to ckhexdump() in ck_crp.c, which I missed before.
+19 Mar 2010.
+
+---C-Kermit 9.0 Alpha.03---
+
+In HP-UX with the bundled-non ANSI compiler, we get warnings about functions
+such as endusershell(), which are declared void in the header files.  But in
+non-ANSI builds we defind VOID to be int rather than void, so our prototypes
+are wrong.  I checked that HP-UX 9, 10, and 11 all have void datatype and
+changed the definition of VOID to void in those cases.  ckcdeb.h, 29 Mar 2010.
+
+Fixed a typo in a debug() statement in cksplit() that was causing some
+warnings.  ckclib.c, 29 Mar 2010.
+
+Ditto in tls_load_certs().  ck_ssl.c, 29 Mar 2010.
+
+"make hpux1000o+ssl" files with:
+/usr/ccs/bin/ld: Unsatisfied symbols:
+   __umoddi3 (code)
+   __udivdi3 (code)
+   __eprintf (code)
+
+It appears that OpenSSL (0.9.7c in this case) requires -lgcc.
+And indeed hpux1000gcc+ssl builds fine.  29 Mar 2010.
+
+There are various warnings in the SSL code in ckutio.c, ckcftp.c, and
+ckcnet.c about pointers not being assignment compatible, but I have learned
+from experience not to try to fix these (see notes from 6 Oct 2009).
+29 Mar 2010.
+
+connect(s, (struct sockaddr *)&hisctladdr, sizeof (hisctladdr)): In FTP,
+this doesn't work on RHEL5 / Mac OX X 6.1/2 64-bit.  But the connect() in
+Telnet works.  On Mac OS X 6.2 I tried changing the socket() call to be like
+the one in ckcnet.c for Telnet, but it made no difference.  On a RHEL5.4
+system on i386, FTP works fine, so it's not the Red Hat version.  On Digital
+Unix 4.0E 64-bit, same thing:
+
+  11:23:10.722 ftp_hookup[kermit.columbia.edu]=21
+  11:23:10.722 ftp hookup A[kermit.columbia.edu]
+  11:23:10.722 ftp hookup C[kermit.columbia.edu]
+  11:23:10.722 ftp hookup socket=4
+  11:23:10.722 ftp hookup HADDRLIST
+  11:23:10.723 ftp hookup connect failed=13
+  11:23:10.723 ftp hookup bad
+
+13 = Permission denied:
+
+  [EACCESS] Search permission is denied for a component of the path prefix;
+    or write access to the named socket is denied.
+
+On Gentoo Linux, also on Alpha, the errno is 51: Network is unreachable.
+Clearly some data type in the sockets structs is out of whack.
+
+The third connect() argument is "address length".  The address is a
+struct sockaddr.  About the third argument, RHEL5 "man connect" says:
+
+  The third argument of connect() is in reality an int (and this is what 
+  4.x BSD and libc4 and libc5 have).  Some POSIX confusion resulted in 
+  the present socklen_t, also used by glibc.  See also accept(2).
+
+Building on RHEL5 on x86_64, where size_t is 8 and socklen_t is 4, I get a
+warning:
+
+  ckcftp.c: In function 'ftp_hookup':
+  ckcftp.c:14667: warning:
+   comparison is always true due to limited range of data
+
+Referring to:
+
+  if (hisctladdr.sin_addr.s_addr != (unsigned long) -1)
+
+This seems to be the problem; if I remove the (unsigned long) cast (in two
+places), the problem goes away.  Actually what I should be comparing it with
+is INADDR_NONE, which is defined appropriately in some header file, e.g. as
+0xffffffff.  Also I define it explicitly as -1 if it is not defined in any
+header file (as is the case in Solaris 9).  Tested OK on 64-bit RHEL5,
+32-bit RHEL5, Digital Unix 4.0E 64-bit, Solaris 9 32-bit, Mac OS X 10.4.11
+32-bit, Mac OS X 10.6.3 64-bit, AIX 5.3, Gentoo Linux 2.6.31 on Alpha
+64-bit, NetBSD 5.0.1 32-bit....  ckcftp.c, 29 Mar 2010.
+
+---C-Kermit 9.0 Alpha.04---
+
+Yesterday's VOID redefinition caused problems for HP-UX in ckuusx.c, in the
+curses section where VOID is undef'd and not used to avoid a conflict with
+curses.h.  As a workaround I defined a new macro CKVOID with the same
+definition as VOID and used it in the offending section of ckuusx.  The real
+solution is to replace all references to VOID with CKVOID (since VOID is
+increasingly likely to cause conflicts), but a mass search and replace is
+not without risks.  ckcdeb.h, ckuusx.c, 30 Mar 2010.
+
+Changed VOID and CKVOID definition to be 'void' for all HP-UX (verified by
+PeterE back to HP-UX 6.5, 1989).  Still need to check this on HP-UX 5.21;
+if that's an exception it can be done in the makefile.  ckcdeb.h, 30 Mar 2010.
+
+The change I made to allow CONNECT to reestablish a previous SSH connection
+prevented a new SSH connection to a different host to be made.  Fixed in
+ckuus7.c, 30 Mar 2010.
+
+Fixed mistaken extern declarations of krb4_errno and krb5_errno as strings
+in nvlook(); they are ints. Built OK on Mac OS X 10.6.3. ckuus4.c, 30 Mar 2010.
+
+A fix to Trusted HP-UX makefile target from PeterE, to account for the
+equivalence of +openssl and +ssl as target suffixes.  30 Mar 2010.
+
+Added a new function \fcvtcsets(string,cset1,cset1) that converts a string
+from one character set to another.  The csets are File Character-Set names.
+ckuus4.c, 31 Mar 2010.
+
+Added a new function \fdecodehex(string,prefix) that decodes a string
+containing prefixed hex bytes.  Default prefix is %%, but any prefix of
+one of two chars (such as % or 0x) can be specified.  ckuusr.h, ckclib.h,
+ckclib.c, ckuusr.c, 31 Mar 2010.
+
+Richard Nolde reports that Kermit can't find -lpam on Fedora 12 because it's
+in /lib rather than /usr/lib.  RHEL5 has symlinks, FC12 should too.  Added a
+note to the makefile.  1 Apr 2010.
+
+Build on Solaris 11 for the first time.  Had to adjust ckuver.h to get the
+version herald right.  This was on a box that reported its architecture as
+i86pc.  1 Apr 2010.
+
+Added MIME character-set names as invisible synonyms in the file and
+terminal character-set tables, fcstab[] and tcstab[].  Note that not all the
+character sets known to Kermit are registered in MIME.  But at least now
+MIME-registered character sets can be referred to by their MIME names, e.g.
+ISO-8859-1, ISO646-ES, IBM437, WINDOWS-1252.  These are not listed if you
+type ? in a field that is parsing them, unless you type a letter first,
+e.g. "i?" lists ISO- and IBM set names.  Later maybe I'll make parallel
+tables, or keyword attribute bit that says whether a name is MIME or not.
+The real benefit of this change is that now Kermit can take its
+character-set names from external sources like email headers or web logs.
+ckuxla.c, 1 Apr 2010.
+
+Changed the IF command to accept a bare macro name its condition.  This will
+parse and execute correctly if the macro is defined and if it has a numeric
+value, or if it is not defined, in which case it evaluates to 0 (FALSE).  If
+it is defined but has a non-numeric value, a parse error occurs.  ckuus6.c,
+2 Apr 2010.
+
+Added \fstringtype() function.  Given a string argument, it tells whether
+the string is 7bit, 8bit, utf8, binary, etc.  ckuusr.h, ckuus[4x].c,
+2 Apr 2010.
+
+Did a few builds to make sure there were no booboos.  Solaris 9, NetBSD
+5.01, Linux RHEL4, HP-UX 10.20 (non-ANSI compiler and ANSI optimizing
+compiler), Mac OS X 10.4.11, SCO OSR 6.00.  5 Apr 2010.
+
+---C-Kermit 9.0 Alpha.05---
+
+Increased maximum variable name length from 4K to 16K. Verified that
+too-long names are caught and recovered from correctly.  ckuusr.h, 6 Apr 2010.
+
+Implemented a new \fsplit() option for parsing CSV files, which turns out to
+be a little complicated, because the separator is not just a comma, but a
+comma and all its surrounding spaces.  Also there are special quoting rules
+for fields with embedded commas and fields with embedded quotes.  ckclib.c,
+7 Apr 2010.
+
+---C-Kermit 9.0 Alpha.06---
+
+VMS changes from SMS.  They build OK, Kermit file transfers are still OK,
+but FTP text-mode GETs always hang on the 10th 8K network read.  Couldn't
+get a debug log this time.  ckcmai.c, ckvfio.c, ckvrms.h, ckvker.com.
+8 Apr 2010.
+
+Changing VNAML from 4K to 16K broke the build on HP-UX 9.  Put it back to
+4K.  9 Apr 2010.
+
+John Dunlap, running days-long stress tests between E-Kermit and C-Kermit,
+found a bug in the packet-reading and -decoding code: If a NAK packet
+arrives with its length field corrupted to indicate a bigger size, and there
+are enough bytes following in the pipeline, ttinl() will return a too-long
+packet (if there are not enough bytes waiting to be read, then ttinl() will
+properly time out).  In the bad case rpack() trusts the packet length, uses
+it as the basis for computation of the block-check length, which is then
+used to access memory that might not be there, causing (at least on John's
+Linux system) a segmentation fault.  John added the normal clause to check
+the result of the block-check calculation, and I changed ttinl() to always
+break on the eol character (normally carriage return), since this can never
+appear in a packet, even if we "set control unprefix all".  Also added a
+check to ttinl() to protect against length fields corrupted into illegal
+values.  ckcfn2.c, ckutio.c, 13 Apr 2010.
+
+From Lewis McCarthy:
+  Based on code inspection, C-Kermit appears to have an SSL-related security
+  vulnerability analogous to that identified as CVE-2009-3767 (see e.g.
+  http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2009-3767).
+
+  I'm attaching a patch for this issue relative to the revision of ck_ssl.c
+  obtained from a copy of http://www.columbia.edu/kermit/ftp/test/tar/x.zip
+  downloaded on 2010/07/30, which I believe is the latest.
+
+  When this flaw was first widely publicized at last year's Black Hat
+  conference, it was claimed that some public certificate authorities had
+  indeed issued certificates that could be used to exploit this class of
+  vulnerability. As far as I know they have not revealed specifically which
+  public CA(s) had been found issuing such certificates.
+  Some references: http://www.mseclab.com/?p=180
+  http://www.theregister.co.uk/2009/07/30/universal_ssl_certificate/
+
+Patches added to ck_ssl.c, 4 Aug 2010.
+
+Peter Eichhorn reported that "RENAME ../x ." didn't work.  This is a side
+effect of the changes of 2006 to the RENAME command, there was a little
+confusion in the renameone() routine; fixed in ckuus6.c, 4 Aug 2010.
+
+If only one file is FOPEN'd, FCLOSE given with no arguments would close it.
+Turns out to be a bad idea. Example: program with an input and output file,
+try to close the output file before it is opened by just typing FCLOSE; this
+can mess up the input file.   For safety FCLOSE has to require a channel
+number or ALL.  ckuus7.c, 4 Aug 2010.
+
+Added \fstrcmp(s1,s2,case,start,length), which has the advantage over IF
+EQU,LGT,LLT that case senstivity can be specified as a function arg, and
+also substrings can be specified.  ckuusr.h, ckuus[24].c, 5 Aug 2010.
+
+The CSV feature of Alpha.06 had a subtle flaw, namely that if the last item
+in a comma separated list was enclosed within doublequotes with a trailing
+space after the closing doublequote, a spurious empty final element would be
+created in the result array.  Fixed in cksplit(), ckclib.c, 5 Aug 2010.
+
+---Alpha.07---
+
+The CSV feature of \fsplit() splits a comma-separated list into an array.
+To turn the array back into a comma separated list, \fjoin(&a,\44,1) almost
+works, except for elements contain literal doublequotes, such as:
+
+  Mohammad "The Greatest" Ali
+
+This calls for making a symbolic CSV argument for \fjoin() like the one that
+was made for \fsplit(): \fjoin(&a,CSV).  Also \fjoin(&a,TSV) for
+Tab-separated list.  Thus if Kermit reads a record in CSV format, splits it
+into an array, and then joins the array back into a CSV record, the result
+will be equivalent to the original, according to the CSV definition.  It
+might not be identical, because if the result had extraneous spaces before
+or after the separating commas, these are discarded, but that does not
+affect the elements themselves.  Furthermore it is now possible to convert
+a comma-separated list into a tab-separated list, and vice versa (which is
+not a simple matter of changing commas to tabs or vice versa).  ckuus4.c,
+12 Aug 2010.
+
+From Joop Boonen 26 Juli 2010: "Added HAVE_LOCKDEV as openSuSE >= 11.3 uses
+lockdev but not baudboy.  They use ttylock directly.  The program code has
+been added so the the program works without a problem."  makefile, ckcdeb.h,
+ckutio.c, ckuus5.c, 23 Aug 2010.
+
+---Alpha.08---
+
+From Gary Mills at the U of Manitoba: convert Solaris version from BSD ptys
+to streams ptys because there are only 48 BSD-style ptys and he was running
+out.  No code changes needed, the only change necessary was to add the
+following flags to the makefile target:
+
+  -DHAVE_STREAMS -DHAVE_GRANTPT -DHAVE_PTSNAME
+  -DPUSH_PTEM -DPUSH_LDTERM -DPUSH_TTCOMPAT
+
+makefile, ckcmai.c, 21 Sep 2010.
+
+Testing this in Solaris 9 I see that the DES library disappeared.  Added
+code to the solaris9 targets (also used by Solaris 10 and 11) to check for
+this.  makefile, 21 Sep 2010.
+
+The Solaris target checked the OpenSSL version automatically to set the
+right flag, the Linux target didn't.  Put the OpenSSL-version testing code
+in the Linux target too.  makefile, 21 Sep 2010.
+
+A couple minor changes to the tru64-51b makefile targets from Steven Schweda
+but there still are some problems with the Tru64 Unix builds.
+makefile, 21 Sep 2010.
+
+---Alpha.09---
+
+\fcontents(\&a[3]) got an error if the array was declared but its dimension
+was less than 3, which is bad when dealing with (say) an array created
+dynamically by \fsplit(), which might or might not have a third element.
+In case it doesn't -- i.e. in case we are referring to an out of range
+element of any array that is declared -- we should just return a null
+string, as we do with other types of variables that are not defined.
+For that matter, ditto even if the array is not declared; what useful
+purpose is served by throwing an error in this case?
+ckuus4.c, 30 Dec 2010.
+
+cksplit() treats \ as a quoting character.  If the source string contains
+backslashes, they are swallowed (or, if doubled, one is kept).  That's not
+good for parsing external data, such as lines read from files, where there
+are no quoting rules.  This came up when parsing CSV files; as a workaround,
+I made \fsplit() treat backslash as an ordinary character for CSV and TSV
+splitting (a better solution might be yet another argument that specifies
+a quote character).  ckclib.c, 30 Dec 2010.
+
+Began converting C-Kermit to Open Source with the Simplified 3-Clause BSD
+license.  Updated the text for the INTRO, LICENSE, NEWS, and SUPPORT
+commands.  Fixed things so the copyright year to be displayed is defined in
+one place (ck_cryear in ckcmai.c), rather than hardwired into text strings
+all over the place.  COPYING.TXT, ckcmai.c, ckuus[256].c, 2 Jun 2011.
+
+When I added MIME synonyms for Kermit character-set names, I left a bogus
+entry in the tables ("windows-1251") that was in the wrong place
+alphabetically, thus preventing most references to file character-set names
+from working right.  Removed the bogus entry.  ckuxla.c, 2 Jun 2011.
+
+Most combinations work OK, but not translating Cyrillic text from UTF-8
+to Latin/Cyrillic, and probably the same would be true for any case of
+converting from UTF-8 or UCS-2 to anything else.  The problem was in
+xgnbyte(), which converts the input stream from the specified character to
+UCS2; it needed to make a special case for when the input file was already
+Unicode.  Believe it or not, this problem occurred at least as far back as
+8.0.201 (9.5 years ago) and nobody noticed.  So if the fix isn't perfect
+probably nobody will notice that either.  ckcfns.c, 3 Jun 2011.
+
+The SET BLOCK CHECK command did not parse all the items in its keyword
+list.  Fixed in ckuus3.c, 3 Jun 2011.
+
+For EM-APEX ocean floats project, where buoys in stormy waters have to
+transmit data through an earth satellite using non-error-correcting modems,
+John Dunlap ran exhaustive stress tests of Kermit protocol transfers through
+a simulated connection that injected errors and delays and identified a
+weakness in Kermit protocol when it is used under extremely bad conditions:
+If a data byte of the S packet (or its Ack) is corrupted and the 1-byte
+checksum is also corrupted in such a way that that the checksum matches the
+corrupted data, the two Kermit programs will disagree as to the negotiated
+parameters.  For example, if file Sender's RPT field is changed from '~' to
+'^', the receiver will decode the packet incorrectly.  Ditto for most of the
+other parameters.  The result is that a corrupted file is received but
+reported correct.  John suggested a new mode of operation in which the Type
+3 block check is used for all packets.  Such a mode can not be negotiated
+because the negotiation packet itself is assumed by all Kermit programs to
+have a 1-byte checksum.  Added SET BLOCK-CHECK 5 to the parser (with
+invisible synonym FORCE-3".  ckuus3.c, 3 Jun 2011.
+
+Added supporting code for SET BLOCK 5: ckcfn[23].c, ckcpro.w, ckcmai.c,
+ckuus3.c, 3 Jun 2011.
+
+Added code to skip the heuristic that S and I packets always have block
+check type 1.  File transfer OK between two C-Kermits with SET BLOCK 5.
+rpack(): ckcfn2.c, 5 Jun 2011.
+
+Made the file receiver put "5" in the block-check-type in its ACK to the
+S-Packet.  spar(): ckcfns.c, 5 Jun 2011.
+
+Now the question is: Can we make the file receiver automatically and safely
+recognize a three-byte block check on an incoming S or I packet?  It's
+tricky because the block check field is not self-identified, it's just the
+last "n" characters of string indicated by the length field, so correct
+decoding of the packet depends on stateful knowledge of "n".  How about this:
+rpack() already knows what type of packet it is, so if it's an S or I packet
+and the 8th byte of the data field is "5" and last 3 bytes, when interpreted
+as the CRC, match the packet contents, then we accept the packet and switch
+to BLOCK 5 mode.  
+
+On the other hand, if the "5" was put there by corruption, the CRC should
+catch the error.  In that case we NAK the packet and presumabely get a
+different version back.  There would be no reason to try to re-read the same
+packet with a different block check, because the "5" could not possibly be
+there legitimately unless it had a 3-byte CRC.  To be clear, this is
+cheating.  We read the packet contents before we know the packet is correct,
+then we check that it *is* correct.  I made the 4-line change to rpack()
+and it works OK in the absense of transmission errors.  ckcfn2.c, 3 Jun 2011.
+
+So the various combinations should work as desired:
+
+ . Sender and receiver both support and are told to SET BLOCK 5 ("SB5").
+ . Sender SB5, but receiver doesn't support it (errors out).
+ . Sender SB5, receiver supports it but wasn't told (auto-recognizes it).
+ . Receiver SB5 but sender no (errors out).
+
+Note in the last case, the receiver should NOT automatically fall back to
+standard behavior because if the user said SET BLOCK 5 that means every
+packet MUST be protected by CRC to prevent the I/S packets from being
+corrupted.
+
+Installed new HELP SET BLOCK-CHECK text.  ckuus2.c, 5 Jun 2011.
+
+Autodownload didn't work when the S or I packet had a 3-byte block check
+because kstart() checked it for a 1-byte checksum.  Fixed in kstart(),
+ckcfn2.c, 6 Jun 2011.  However, older Kermit versions and programs that
+claim to do "autodownload" will never recognize this type of packet.  No
+big deal since even if they did, the transfer would fail anyway.
+
+Added 'FORCE 3' to E-Kermit, called it EK 1.7.  The option is "-b 5".  Works
+OK for sending and receiving, both with and without the new option.  Also
+works with "-b 5" if you send an S packet to it with '5' in the BCT field.
+Changes were minimal, I have them all in ek17.diff.
+
+I could probably also make a new G-Kermit in about 10 minutes, but who cares
+about G-Kermit...  We already have two useful Kermit programs that
+interoperate with the new protocol.  6 Jun 2011.
+
+Replaced the very inadequate help texts for functions \fword() and
+\fsplit() with new ones.  ckuus2.c, 6 Jun 2011.
+
+There were a couple reports of file corruption that I was saving for later.
+Now that now is later I dug up the messages, files, and logs and it turns
+out that nobody had reported a reproducible case of Kermit corrupting a
+file.  There have been non-reproducible cases though, almost certainly due
+to corruption of the S or I packet or its ACK, which is why we now have SET
+BLOCK 5.  Even with BLOCK CHECK 5, there is no guarantee that the same thing
+won't happen, it is just far less likely.  Even if we added a 32-bit CRC or
+even 64-bit one, there would still be a small chance it could happen.
+
+7 Jun 2011:
+
+Corrected various #ifdefs (or lack of them) when building C-Kermit with
+different combinations of feature-selection options such as NOCSETS, NOICP,
+NOLOCAL, NOSPL, NOUNICODE, etc.  ckcfns.c ckcmai.c ckcxla.h ckuus2.c
+ckuus4.c ckuus5.c ckuus6.c ckuusr.c, 7 Jun 2011.  After running the script
+that does all these builds (84 of them) I ran it again to make sure that
+none of the changes broke builds that succeeded before the changes were made.
+
+Built OK on Solaris9 ("make solaris9")
+Ditto with Krb5 and OpenSSL 0.9.8q  ("make solaris9g+openssl+shadow+pam+zlib")
+
+Built OK on Mac OS X 10.4.11 ("make macosx").
+Also "make macosx+krb5+openssl.
+
+Built OK on Linux RHEL4 ("make linux").
+Built OK on Linux RHEL4 with OpenSSL 0.9.7a ("make linux+ssl").
+Built OK on Linux RHEL5 ("make linux").
+
+"make linux+ssl" fails on RHEL5 because of DES, even though the target
+tests for the presence or absence of the DES libraries.  In this case the
+libraries are there but they lack the functions des_ecb3_encrypt,
+des_random_seed, and des_set_odd_parity.  The build succeeds as:
+
+  make linux+ssl KFLAGS=-UCK_SSL
+
+Since DES is now considered harmful, Jeff Altman suggests that all OpenSSL
+builds, even for old versions, should omit it ("If you are building with
+openssl and no kerberos or srp, just disable DES.  Disabling DES will impact
+telnet and rlogin but it won't matter if you have no ability to negotiate a
+session key").
+
+From Ian Beckwith, patches for Debian Linux:
+ . Change all '-' to '\(hy' in man page (new pedantry): ckuker.nr.
+ . Make IKSD authentication (using PAM) ask for a password when an invalid
+   username has been given, to avoid disclosing which account names are valid:
+   ckufio.c, ckuus7.c.
+ . Fix spelling errors: ckcftp.c, ckuus2.c, ckuker.nr, ckcpro.w, ckuusr.h.
+ . Patch makefile to support install to a staging area with DESTDIR.
+ . Some other patches (mainly for typos) were for plain-text documentation
+   files that were generated from Web pages; I updated the web pages.
+
+A big corporate C-Kermit user has an application where a local C-Kermit
+makes a connection to a remote one, uploads some files, and then if the
+server has any new patch files for the local, it sends the patches and
+does a REMOTE HOST command to run the patch program.  This stopped working
+in C-Kermit 6.0 or 7.0 when I put a check to prevent it, because "it makes
+no sense to send REMOTE commands to the local end, because the results are
+sent back to the remote to be displayed on its screen but it has no screen".
+That may be true, but if the user needs to control the local from the
+remote, they should be able to.  I removed the checks.  This doesn't solve
+the problem of where the output goes; ideally it would go to the local
+screen but I don't see any elegant and simple way to make that change.
+However the output redirectors can still be used with the REMOTE command
+so the results can be captured to a remote file, which could then be sent.
+ckuus7.c, 7 Jun 2011.
+
+Changed SET VARIABLE-EVALUATION to SET COMMAND VARIABLE-EVALUATION, but left
+the former version available.  ckuusr.c, 9 Jun 2011.
+
+Documented the SET COMMAND VARIABLE-EVALUATION command, which I added in
+2008.  ck90.html, 9 Jun 2011.
+
+Renamed all old Mac OS X makefile targets to have the prefix "old" to avoid
+confusing them with the current targets, and made macosx10 a synonym for
+macosx, so those who used previous makefiles will get a current target
+without having to know the new name.  makefile, 9 Jun 2011.
+
+Added XMESSAGE, which is to MESSAGE as XECHO is ECHO: prints the text
+without a line terminator, so it can be continued by subsequent [X]MESSAGE
+commands.  ckuusr.[ch], 9 Jun 2011.
+
+Back to "make linux+ssl" on RHEL5...  I took the coward's way out and added
+code to the makefile target to check whether the build worked (somebody let
+me know if there is a better way to check), and if not to give a message
+suggesting they "make clean ; make linux+ssl KFLAGS=-UCK_DES".  makefile,
+9 Jun 2011.
+
+Noticed that \frecurse() would dump core if called with no arguments.
+Fixed in ckuus4.c, 9 Jun 2011.
+
+Added \q() as an alternative to the more verbose \fliteral() for quoting
+strings that contain characters (like \) that would otherwise be significant
+to Kermit.  It's more efficient because it isn't a function call, and 'q'
+is an intuitive letter to mean 'quote'.  It also works better than
+\fliteral() because functions treat commas and braces specially.  ckuus4.c,
+10 Jun 2011.
+
+Built OK on VMS 8.3 on Alpha, no net.  DEC C caught a couple glitches in the
+new code that gcc didn't catch, which I fixed.  ckuus[25].c, 10 Jun 2011.
+
+Built OK on VMS 8.3 on Alpha with Multinet 5.3.  The SSL build failed but
+I'm not going to worry about it.  10 Jun 2011.
+
+Built OK on NetBSD 5.1.  10 Jun 2011.
+
+Tried to resurrect my old "build-all" machine, an IBM Netfinity 3500 from
+1997 with 20-some mountable bootable hard disks with lots of 1990s OS's on
+them.  No dice.  I can see the BIOS but not the hard disks.  The
+configuration is still correct because it tries to boot from the mountable
+hard disk, but it fails (I tried six different ones).
+
+Tried to resurrect my old Siemens Nixdorf RM 200 MIPS machine.  Booted OK,
+headless even, but makes a hellish high-pitched whine, like a dentist drill.
+It's pretty slow too.  "make sinix542" (for SINIX 5.4.2) bombed at link
+time on no rdchk().  Fixed by #including <sys/filio.h>.  ckutio.c, 10 Jun 2011.
+
+Tried to resurrect my old SCO Xenix 2.3.4 machine, also headless.  Amazingly
+it still works; it can't use a monitor but I can Telnet to it.  Had to tweak
+some #ifdefs but I got a no-net version built successfully.  According to my
+notes, it hasn't been possible to build with TCP/IP since C-Kermit 8.0,
+but how many people ever had SCO Xenix 2.3.4 with TCP/IP anyway?  Anyway we
+still have the binaries for C-Kermit 7.0.  ckuus4.c, 10 Jun 2011.
+
+Built OK on AIX 5.3.  Built OK on Solaris 10.  11 Jun 2011.
+
+Tried harder to revive the build-all machine, now it sort of works, but not
+all of the bootable OS's work.  Built C-Kermit 9.0 OK on OpenBSD 3.0.  Built
+OK on QNX 4.25 but had to #ifdef references to IXANY in ckutio.c and ckupty.
+Built OK on NetBSD 1.5.1 (2000).  Tried "make netbsd+ssl" on this one, it's
+OpenSSL 0.9.5a 1 Apr 2000, but it bombs out in ckuath.c, no big deal.
+Another problem in NetBSD 1.5.2 is that even though off_t is 8, CK_OFF_T
+is 4.  Worth noting but not worth fixing unless someone else notices.
+13 Jun 2011.
+
+SuSE 7.0... boots OK but telnet server doesn't work.  Can telnet out but
+it's too flaky, connection drops if I try to transfer a file.
+
+OpenBSD 2.5 [1999] OK.  Red Hat 7.1 OK.  Red Hat 7.1 with OpenSSL 0.9.6
+not OK, same error as with 0.9.5a:
+
+ckuath.c
+In file included from ck_ssl.h:48,
+                 from ckuath.c:225:
+/usr/include/openssl/des.h:77: warning: redefinition of `Block'
+ckuat2.h:86: warning: `Block' previously declared here
+/usr/include/openssl/des.h:83: redefinition of `struct des_ks_struct'
+/usr/include/openssl/des.h:91: warning: redefinition of `Schedule'
+ckuat2.h:90: warning: `Schedule' previously declared here
+
+So it appears that OpenSSL support is broken for pre-0.9.7.  Tried
+building it again with -UCK_SSL (since the errors are originating from
+from des.h)...  But it still failed exactly the same way.  I found
+#includes for des.h in ckuath.c and and ck_ssl.h and #ifdef'd them out,
+but it still fails:
+
+In file included from /usr/include/openssl/evp.h:89,
+                 from /usr/include/openssl/x509.h:67,
+                 from /usr/include/openssl/ssl.h:69,
+                 from ck_ssl.h:51,
+                 from ckuath.c:227:
+/usr/include/openssl/des.h:77: warning: redefinition of `Block'
+ckuat2.h:86: warning: `Block' previously declared here
+/usr/include/openssl/des.h:83: redefinition of `struct des_ks_struct'
+/usr/include/openssl/des.h:91: warning: redefinition of `Schedule'
+ckuat2.h:90: warning: `Schedule' previously declared here
+
+Built OK on Debian 2.1.  13 Jun 2011.
+
+On FreeBSD 4.4, it blows up with:
+ckufio.c: In function vpass':
+ckufio.c:8201: conflicting types for 'initgroups'
+/usr/include/unistd.h:154: previous declaration of 'initgroups'
+ckufio.c:8201: warning: extern declaration of 'initgroups' doesn't match global
+one.  Fixed by defining NODCLINITGROUPS for FreeBSD in ckufio.c. It might not 
+be the right fix, but I don't have a lot of other FreeBSD versions to
+compare with.  Anyway now it builds OK on 4.4, and also on FreeBSD 3.3.
+ckufio.c, 13 Jun 2011.
+
+Tried to build on SCO Open Server 5.0.7 but it fails at link time because
+it can't find rdchk().  But it's supposed to be there!  Come back to this
+later...
+
+Red Hat 6.1             i386   32/64   linux          2332545
+Red Hat 7.1             i386   32/64   linux          2368528
+Red Hat EL4             i386   32/74   linux          2363067
+Red Hat EL5.6           i386    64     linux          2371279
+Solaris9                sparc  32/64   solaris9       2849896
+Solaris9+ssl            sparc  32/64   solaris9       5021764
+Solaris10               sparc  32/64   solaris10      2855776
+QNX                     i386    32     qnx32          2012323 
+NetBSD 1.5.1            i386   32/64   netbsd         2198055
+NetBSD 5.1              i386   32/64   netbsd         2159863
+OpenBSD 2.5             i386   32/64   openbsd        2236036
+Mac OS X 10.6.7         x86_64  64     macosx         2.7M
+Mac OS X 10.4.11        ppc    32/64   macosx         2496304
+Debian 2.1              i386   32/64   linux          2213221
+FreeBSD 4.4             i386   32/64   freebsd        2291333
+FreeBSD 3.3             i386   32/64   freebsd        2147370
+SINIX 5.42              mips    32     sinix542       3319325 (1995)
+SCO Unixware 2.1.3      i386    32     uw213          2242176
+SCO OSR6.0.0            i386   32/64   sco_osr600     2368300
+
+More builds, 14 June 2011:
+
+VMS 6.2                 alpha   32     make mn        2556928 No TCP/IP
+VMS 6.2                 alpha   32     make m         3112960 UCX 4.0
+Solaris 11              i386   32/64   solaris11      2823860
+Solaris 11              i386   32/64   solaris11+ssl  2993660 OpenSSL 0.9.8l
+NetBSD 5.1              i386   32/64   netbsd+krb5    2307855 Kerberos 5
+Linux Slackware 12.1.0  i386   32/65   linux          2175754
+Linux Fedora 14         i386   32/64   linux          2256514
+Linux Fedora 14         i386   32/64   linux+ssl      ....... OpenSSL 1.0.0d
+Linux Fedora 14         i386   32/64   linux+krb      2449614 (*)
+
+(*) make linux+krb5 "LIBS=$LIBS /lib/libk5crypto.so.3 /lib/libcom_err.so.2"
+
+Noticed that netbsd+ssl build on NetBSD 5.1 said "NetBSD 1.5" in its banner.
+Fixed by replacing the old hardwired target with the new "subroutinized"
+target a'la linux+ssl and adapting it to NetBSD.  makefile, 15 Jun 2011.
+
+Same deal for Kerberos 5, make a new netbsd+krb5 target and it builds ok,
+at least once one figures out where the Kerberos headers and libs are.
+makefile, 15 Jun 2011.
+
+Same deal for the netbsdnc target, now it simply defined NOCURSES and
+chains to the main netbsd target.  makefile, 15 Jun 2011.
+
+Tried to build with Kerberos 5 on Solaris, fails because the DES library
+no longer exists.  This one is beyond me, sorry.
+
+Made new targets for MirBSD, mirbsd and mirbsd+ssl, makefile 15 Jun 2011.
+
+In OpenSUSE 11.2 with OpenSSL 0.9.8r we bomb on undefined references from
+various DES library routines.  Builds OK without DES.
+
+Various linux+krb5 builds fail because can't find -lgssapi_krb5
+
+SSL builds with OpenSSL < 0.9.7 fail even though there is code to support
+the older SSL.
+
+Fixed some printf %ld vs int instances in the sizeofs section of SHOW FEATURES.
+ckuus5.c, 15 Jun 2011.
+
+Fixed the new linux+ssl target to actually use the SSLINC and SSLLIBS
+definitions, oops.  makefile, 15 Jun 2011.
+
+15 June 2011 builds (Beta.01):
+
+AIX 5.3                 ppc    32/64   aix+ssl        3283846 OpenSSL 0.9.8m
+NetBSD 5.1              i386   32/64   netbsd         2159863
+NetBSD 5.1              i386   32/64   netbsd+ssl     2350274 OpenSSL 0.9.9-dev
+NetBSD 5.1              i386   32/64   netbsd+krb5    2349627 MIT Krb5 1.6.3
+FreeBSD 8.2             i386   32/64   freebsd        2298414
+FreeBSD 8.2             i386   32/64   freebsd+ssl    2448961 OpenSSL 0.9.8q
+OpenBSD 4.7             i386   32/64   openbsd        2266132
+OpenBSD 4.7             i386   32/64   openbsd+ssl    2409263 OpenSSL 0.9.8k
+MirBSD 10               i386   32/64   mirbsd         2216601
+MirBSD 10               i386   32/64   mirbsd+ssl     2358318 OpenSSL 0.9.8r
+OpenSuse 11.2           x86_64  64     linux          2348468
+OpenSuse 11.2           x86_64  64     linux+ssl (*)  2546540 OpenSSL 0.9.8r
+RHEL 5.6                ia64    64     linux          4390687
+RHEL 5.6                ia64    64     linux+ssl (*)  4775007 OpenSSL 0.9.8e
+Ubuntu 9.10             i386   32/64   linux          2275523
+Ubuntu 9.10             i386   32/64   linux+ssl      2466708 OpenSSL 0.9.8r
+Gentoo 1.12.13          ppc    32/64   linux          2386597
+Gentoo 1.12.13          ppc64   64     linux          2749015
+Gentoo 1.12.13          ppc64   64     linux+ssl      3002150 OpenSSL 0.9.8r
+Gentoo 1.12.13          sparc  32/64   linux          2478382
+Gentoo 1.12.13          sparc  32/64   linux+ssl      2690499 OpenSSL 0.9.8r
+Solaris 9               sparc  32/64   solaris9       2849896
+Solaris 10              i386   32/64   solaris10      2837620
+IRIX 6.5                R10000 32/64   irix65         2869704
+
+* and KFLAGS=-UCK_DES
+
+Tried building on NetBSD 5.1 with Heimdal Kerberos using:
+
+make netbsd+krb5 \
+ "KFLAGS=-DHEIMDAL" \
+ "K5INC=-I/usr/include" \
+ "K5LIB=-L/usr/lib"
+
+It found all its headers OK, but it blew up in ckuath.c.  Small wonder,
+ckccfg.html says:
+
+HEIMDAL
+    Should be defined if Kerberos V support is provided by HEIMDAL. Support
+    for this option is not complete in C-Kermit 8.0. Anyone interested in
+    working on this should contact kermit-support. 
+
+'krb5-config --version' gives the MIT Kerberos 5 version number.
+
+Make a new netbsd+krb5+ssl target based on the combination of the new
+netbsd+ssl and netbsd+krb5 targets.  There were lots of warnings in the
+compilation but no errors, but it produced an executable that starts and
+does normal things but I have no idea if the SSL or Kerberos functions work.
+makefile, 16 Jun 2011.
+
+Changed the cu-solaris9-krb5 target to test for the presence of DES because
+DES isn't there, to see if this would allow a Kerberos build to proceed.
+And it worked, amazing.  At least the build completed, I have no way to test
+the Kerberos part.  makefile, 16 Jun 2011.
+
+Updated the solaris9+ssl target to do the DES testing.  makefile, 16 Jun 2011.
+
+Updated cu-solaris+krb5 target to test whether the GSSAPI library is called
+libgassapi or libgassapi_krb5.  makefile, 16 Jun 2011.
+
+Added lots of tests to the Linux Kerberos 5 entries, linux+krb5 and
+linux+krb5+ssl, because some have libk5crypto and some don't; some have
+libcom_err and some don't; and some have libgssapi_krb5 (e.g. RHEL5,
+OpenSuse 11.2) whereas others have libgssapi (Gentoo).
+
+16 June 2011 builds (Beta.01):
+
+NetBSD 5.1 i386   32/64  netbsd+krb5+ssl   2451757 OpenSSL 0.9.9 MIT Krb5 1.6.3
+Solaris 9  sparc  32/64  solaris9+krb5     2543036 MIT Kerberos 5 1.7.1
+Solaris 9  sparc  32/64  solaris9+ssl      5021544 OpenSSL 0.9.8q (gcc)
+Gentoo...  ppc    32/64  linux             2386597
+Gentoo...  ppc    32/64  linux+ssl         2593561 OpenSSL 0.9.8r 
+Gentoo...  ppc64   64    linux             2749015
+Gentoo...  ppc64   64    linux+ssl         3002150 OpenSSL 0.9.8r 
+RHEL5      x86_64  64    linux+krb5 (*)    2563878 MIT Kerberos 5 1.6.1
+RHEL5      x86_64  64    linux+krb5+ssl(*) 2563878 MIT Kerberos 5 1.6.1
+Fedora 14  i386   32/64  linux+krb5+ssl    2539891 MIT Krb5 + OpenSSL 0.9.8r
+
+* KFLAGS=-UCK_DES
+
+--- C-Kermit 9.0.299 Beta.01 ---
+
+sizeof() can return a long or an int, so neither printf("%d",sizeof(blah));
+or printf("%ld",sizeof(blah)); can be used everywhere.  Changed the
+"sizeofs" section of SHOW FEATURES in the dumbest (and therefore most
+portable) way to squelch the warnings.  ckuus5.c, 17 Jun 2011.
+
+From John Dunlap: "Watching the server screen led me to offer a cosmetic
+patch for ckuusx.c.  I noticed that the server screen said it was
+"RESENDING" when it really wasn't.  The attached patch emits blanks to
+insure that old labels are completely erased."  ckuusx.c, 17 Jun 2011.
+
+Nelson Beebe found two places where I had SSLLIBS in the makefile instead of
+SSLLIB.  makefile, 18 Jun 2011.
+
+More important he knew how to force gcc to load the right header files for
+OpenSSL 1.0.0d (by using '-isystem' rather than '-I').  Previously it was
+using the 0.9.8r header files but linking with the 1.0.0d libraries.  This
+is not in the sources or makefile; it's done when giving the 'make' command:
+
+  export PATH=/usr/bin:$PATH
+  export SSLINC=-isystem/usr/include
+  export "SSLLIB=-L/usr/lib -Wl,-rpath,/usr/lib"
+  make linux+ssl
+
+Folded the previous linux+openssl+zlib+shadow+pam and linux+openssl+shadow
+targets into linux+ssl.  Checked the linuxso (scripting only) target, builds
+OK, 600K.  Made new subroutinized linux+krb5+krb4 target but can't find
+anyplace to test it.   Made new subroutinized linux+shadow+pam target, works
+fine on RHEL4.  Revised comments and lists again.  makefile, 18 Jun 2011.
+
+For the pluggable-disk OS's that boot OK but lack a working network, I
+rigged up a serial connection using a DB9-FF null modem cable, and then a
+DB9-MF modem cable to make it reach.  I don't see any modem signals on
+either end, but the data goes through OK.  COM1 on the desktop PC,
+/dev/ttyS1 or whatever on Lab.  Since there are no modem signals, can't use
+RTS/CTS.  At 57600bps with Xon/Xoff, 500-byte packets and sliding windows,
+transfers work OK at about 5000cps using 5 window slots; takes 8 minutes to
+transfer the gzipped C-Kermit tarball.  Kermit to the rescue.  19 Jun 2011.
+
+Transferred the tarball over serial ports to SCO OSR5.0.5 at 38.4Kbps, the
+highest speed supported, 12 minutes, no errors, 3300cps.  Unpack, make
+sco32v505udk, OK.  Also built the TCP/IP version and it almost made an
+outbound connection, but only once (not a Kermit program but something with
+the TCP/IP stack).  19 Jun 2011.
+
+Ditto for Solaris 2.6/i386, except 57.6Kbps, 4K-byte packets, no problem.
+Solaris 8/i386, ditto.  19 Jun 2011.
+
+SCO OpenServer 5.0.5  i386   32   sco32v505udk     1940964  No TCP/IP
+SCO OpenServer 5.0.5  i386   32   sco32v505udknet  2314668  With TCP/IP
+Sun Solaris 2.6       i386   32   solaris26g       4661368
+Sun Solaris 8         i386   32   solaris8g        4675432
+
+When using compact substring notation, \s(xx[4]) returns the whole string
+xx starting at position 4, but \s(xx[4:]) returns an empty string.  Fixed
+the latter to be like the former.  ckuus5.c, 20 Jun 2010.
+
+Really it would have been nicer if \s(xx[4]) returned a single character,
+the 4th character of xx, but it's too late now.  Added another "separator"
+character '.' (period) for that: \s(xx[4.]) is the 4th character of xx.
+ckuus4.c, 20 Jun 2010.
+
+Back to SCO OSR5.0.7... This failed before because 'rdchk' came up unknown
+at link time, unlike all previous OSR5's, that used rdchk() in place of the
+FIONREAD ioctl.  Added #ifdefs to make a special case for 5.0.7.  I'm not
+sure this is the best way, but this is the minimal change to get it to work.
+If anybody cares, maybe the same can be done for previous OSR5 releases.
+ckutio.c, 20 Jun 2010 (search for SCO_OSR507).
+
+SCO OpenServer 5.0.7  i386   32   sco32v507        1895724  No TCP/IP
+SCO OpenServer 5.0.7  i386   32   sco32v507net     2246792  With TCP/IP
+
+Checked current code on RHEL4, found that my GSSAPI-lib finding makefile
+target didn't look in enough places; added some more.  makefile, 21 Jun 2011.
+
+Got reports back on HPUX from Peter Eichhorn, almost all good on HP-UX 7, 8,
+9, 10, and 11.  21-22 Jun 2011.
+
+Got access to Debian 5.0 and 7-to-be ("Wheezy/Sid").  Regular 'make linux' is
+OK in Debian 5, but in 7 can't find crypt, res_search, or dn_expand; had
+to add more library search clauses to 'make linux'.  makefile, 21 Jun 2011.
+
+In Debian 7.0, libk5crypto could not be found without adding another clause
+to 'make linux+krb5'.  That done, the SSL build (1.0.0d) was OK, as well as
+the krb5+ssl one.  makefile, 21 Jun 2011.
+
+I found a Linux box that had both Kerberos 4 and 5 installed and tried 'make
+linux+krb5+krb4', which failed because of missing DES functions.  Tried
+'make linux+krb5+krb4 KFLAGS=-UCK_DES', but that fails too, even though it
+doesn't fail for Kerberos 5 alone, so probably some Krb4 code is making
+unguarded calls to the DES routines.  What is really needed is a way to
+completely strip all DES references from any given build, code and makefile,
+a big deal.  21 Jun 2011.
+
+Fixed some typos in COPYING.TXT (noticed by Ian Beckwith).  24 Jun 2011.
+
+Got access to perhaps the last living 4.3BSD VAX system.  It doesn't have
+SEEK_CUR so I had to #ifdef out the \fpicture() function.  Aside from that,
+no problems.  ckuus4.c, 24 Jun 2011.
+
+I had been wanting the S-Expression (ROUND x) to allow a second argument n,
+which, if given, tells where the rounding should occur.  If n is positive,
+the number is rounded to n decimal places.  If zero, it is rounded to the
+nearest integet.  If positive, the number is rounded to the nearest power of
+10; e.g. -2 means "to the nearest hundred".  If ROUND is used as before,
+with one argument, it works as before.  ckclib.c, ckuus3.c, 25 Jun 2011.
+
+From Arthur Marsh, a few more directories to test for libresolv in Linux.
+makefile, 26 Jun 2011.
+
+From Martin Vorlaender, a fix for the VMS file-transfer display and
+statistics, a place where a file length wasn't being cast to CK_OFF_T
+in zchki().  ckvfio.c, 28 Jun 2011.
+
+Updated version to 9.0.300 and removed the Beta designation.
+ckcmai.c, makefile, 28 Jun 2011.
+
+Removed solaris9_64 target from makefile.  It builds but it doesn't work
+at all.  30 Jun 2011.
+
+--- C-Kermit 9.0.300 ---
+
+On Solaris 10 and 11, DNS lookups don't work.  It seems these Solaris
+versions have INADDRX and INADDRX_NONE defined, thus triggering the code in
+ckcnet.c, ckucns.c, and ckcftp.c #ifdef'd on these symbols, but that code
+doesn't work in this case.  This happens building with gcc as well as with
+Sun cc.  Put #ifdefs in ckcnet.h to undefine these symbols (if they are
+defined after including all the header files) for Solaris.  I didn't bother
+trying to differentiate the Solaris versions because the symbols are not
+defined in Solaris 9 or earlier, and they should not be used in Solaris 10
+or 11.  ckcnet.h, 6 July 2011.
+
+From SMS:  To avoid the %CC-W-PTRMISMATCH1 complaints from ck_ssl.c, add
+two (harmless) type casts at lines 2460 and 2773, 6 July 2011.
+
+Built and tested on Solaris 9, Solaris 10, and RHEL5.  6 July 2011.
+
+--- C-Kermit 9.0.301 Beta.01 ---
+
+Updated version text and date.  ckcmai.c, makefile, 11 July 2011.
+
+--- C-Kermit 9.0.301 ---
+
+---------------------------------
+***************************
index f378d42..b33b5c1 100644 (file)
@@ -129,9 +129,9 @@ CONTENTS
        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
+       platform-specific command can still be accesssed with "!", "@", or
        "RUN" wherever the installation does not forbid. In UNIX, the "ls"
-       command can be accessed directly as "ls" in C-Kermit.
+       command can be accesssed 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
@@ -435,6 +435,17 @@ The Telnet Client
    them easily, since all Telnet negotiations lines begin with (uppercase)
    "TELNET".
 
+The SSH Client
+
+   C-Kermit does not have its own built-in SSH client; instead, in the
+   Unix tradition, uses the external SSH client to do the SSH part, and
+   Kermit does its thing on top -- file transfer, scripting, etc. Under
+   certain circumstances that have not yet been identified, it sometimes
+   happens that after making an SSH connection from C-Kermit, logging out
+   from the remote host, and popping back to the local C-Kermit program,
+   subsequent SSH commands file with a message like "Network type not
+   supported". Starting a new copy of C-Kermit is the workaround.
+
 5. MODEMS AND DIALING
 
    [ [55]Top ] [ [56]Contents ] [ [57]Next ] [ [58]Previous ]
@@ -481,7 +492,7 @@ The Telnet Client
    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
+   have to fall back to the traditional 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
@@ -533,7 +544,7 @@ The Telnet Client
    watch the dialing interactions between C-Kermit and your modem. Consult
    Chapters 3-4 of [63]Using C-Kermit (2nd Ed) for modem-dialing
    troubleshooting instructions. The following sections offer some
-   addtional hints and tips.
+   additional hints and tips.
 
 6.1. Syntax
 
@@ -726,17 +737,17 @@ The Telnet Client
    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
+     Using C-Kermit on an HP 9000 712/80 running the HP-UX 10.00
+     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-originated 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.
@@ -782,7 +793,7 @@ The Telnet Client
    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
+   Kermit is semitransparent rather than fully transparent in the
    following ways:
 
      * During a TELNET ("set host") session, C-Kermit itself executes the
@@ -849,7 +860,7 @@ The Telnet Client
    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
+   by accesssing 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.
@@ -972,7 +983,7 @@ SEND /COMMAND [ other switches such as /AS-NAME: ] command [ arguments... ]
        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;
+       even if you have write accesss 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.
 
index 22edac8..f27d56e 100644 (file)
@@ -8,7 +8,7 @@
 C-Kermit Configuration Options
 
    As of: C-Kermit 9.0.300, 30 June 2011
-   This page last updated: Tue Jun 28 08:48:49 2011 (New York USA Time)
+   This page last updated: Fri Jul 1 15:48:21 2011 (New York USA Time)
 
      IF YOU ARE READING A PLAIN-TEXT version of this document, note that
      this file is a plain-text dump of a Web page. You can visit the
@@ -182,7 +182,7 @@ C-Kermit Configuration Options
    rather than certain codes, and return an error if the number is not, in
    fact, a legal speed for the device/driver in question. In this case,
    there is no way to build a list of legal speeds at compile time, since
-   no Bnnnn symbols are defined (except for "depracated, legacy"
+   no Bnnnn symbols are defined (except for "deprecated, legacy"
    interfaces like ioctl()) and so the legal speed list must be enumerated
    in the code -- see ttspdlist() in [47]ckutio.c.
 
@@ -201,7 +201,7 @@ C-Kermit Configuration Options
 
    and then change your build procedure (if necessary) to include the
    necessary libraries. For example, in Unix these are usually "curses" or
-   "ncurses" (and more recenlty, "ncursesw" and "slang"), perhaps also
+   "ncurses" (and more recently, "ncursesw" and "slang"), perhaps also
    "termcap", "termlib", or "tinfo":
 
   "LIBS= -lcurses -ltermcap"
@@ -440,7 +440,7 @@ C-Kermit Configuration Options
    NOFRILLS    1918966    9.8% No "frills".
    NOFTP       1972496    7.3% No FTP client.
    NODIAL      1984488    6.7% No automatic modem dialing.
-   NOPUSH      2070184    2.7% No shell access, running external programs, etc.
+   NOPUSH      2070184    2.7% No shell accesss, running external programs, etc.
    NOIKSD      2074129    2.5% No Internet Kermit Server capability.
    NOHTTP      2082610    2.1% No HTTP client.
    NOFLOAT     2091332    1.7% No floating-point arithmetic.
@@ -544,7 +544,7 @@ C-Kermit Configuration Options
        compiler will run out of memory. The the latter eventuality, some
        compilers also provide command-line options to allocate more memory
        for the optimizer, like "-Olimit number" in Ultrix.
-    b. If your platofrm supports shared libraries, change the make entry
+    b. If your platform supports shared libraries, change the make entry
        to take advantage of this feature. The way to do this is, of
        course, platform dependent; see the NeXT makefile target for an
        example. some platforms (like Solaris) do it automatically and give
@@ -699,7 +699,7 @@ C-Kermit Configuration Options
    then to let selected users or services get through after all.
 
    One firewall method is called SOCKS, in which a proxy server allows
-   users inside a firewall to access the outside world, based on a
+   users inside a firewall to accesss the outside world, based on a
    permission list generally stored in a file. SOCKS is enabled in one of
    two ways. First, the standard sockets library is modified to handle the
    firewall, and then all the client applications are relinked (if
@@ -803,7 +803,7 @@ C-Kermit Configuration Options
   8.1.6. Disabling SET TCP Options
 
    The main reason for this is because of header file / prototype
-   conflicts at compile time regardting get- / setsockopt(). If you can't
+   conflicts at compile time regarding get- / setsockopt(). If you can't
    fix them (without breaking other builds), add the following in CFLAGS:
 
   -DNOTCPOPTS
@@ -1017,7 +1017,7 @@ C-Kermit Configuration Options
           immediately, rather than returning to its prompt.
 
    NOPUSH and NOCCTRAP together allow Kermit to be run from restricted
-   shells, preventing access to system functions.
+   shells, preventing accesss to system functions.
 
    [ [140]C-Kermit Home ] [ [141]Kermit Home ]
 
@@ -1421,7 +1421,7 @@ C-Kermit Configuration Options
    NOLOGIN Build without IKSD (network login) support.
    NOLSTAT Not OK to use lstat().
    NOMDMHUP Build without "modem-specific hangup" (e.g. ATH0) feature.
-   NOMHHOST Exclude the multihomed-host TCP/IP code (if compilcation
+   NOMHHOST Exclude the multihomed-host TCP/IP code (if compilation
    errors)
    NOMINPUT Build without MINPUT command.
    NOMSEND Build with no MSEND command.
@@ -1493,7 +1493,7 @@ C-Kermit Configuration Options
    SBSIZ=xxx Define overall size of send-packet buffer (use with DYNAMIC).
    SDIRENT Directory structure specified in <sys/dirent.h>.
    SELECT select() function available (conflicts with RDCHK and CK_POLL)
-   SELECT_H Include <sys/select.h> for select()-releated definitions.
+   SELECT_H Include <sys/select.h> for select()-related definitions.
    SETEUID BSD 4.4-style seteXid() functions available.
    SIG_V Type for signal() is void. Used to override normal assumption.
    SIG_I Type for signal() is int. Used to override normal assumption.
@@ -1512,7 +1512,8 @@ C-Kermit Configuration Options
    SVR3 Build for AT&T System V Release 3.
    SVR3JC Allow job control support on System V Release 3 UNIX versions.
    SVR4 Build for AT&T System V Release 4.
-   SW_ACC_ID UNIX only -- swap real & effective ids around access() calls.
+   SW_ACC_ID UNIX only -- swap real & effective ids around accesss()
+   calls.
    sxaE50 Build for PFU Compact A Series SX/A TISP.
    SYSLOGLEVEL=n Force syslogging at given level.
    SYSTIMEH Include <sys/time.h>.
index d5725e3..065fb67 100644 (file)
--- a/ckcmai.c
+++ b/ckcmai.c
@@ -1,6 +1,6 @@
-#define EDITDATE  "6 Jul 2011"         /* Last edit date dd mmm yyyy */
-#define EDITNDATE "20110706"           /* Keep them in sync */
-/* Tue Jun 28 16:54:15 2011 */
+#define EDITDATE  "11 Jul 2011"                /* Last edit date dd mmm yyyy */
+#define EDITNDATE "20110711"           /* Keep them in sync */
+/* Mon Jul 11 09:23:48 2011 */
 
 /* ckcmai.c - Main program for C-Kermit plus some miscellaneous functions */
 
@@ -40,8 +40,8 @@ char * ck_cryear = "2011";            /* C-Kermit copyright year */
 
 #ifndef BETATEST
 #ifndef OS2                             /* UNIX, VMS, etc... (i.e. C-Kermit) */
-char *ck_s_test = "Beta";              /* "Dev","Alpha","Beta","RC", or "" */
-char *ck_s_tver = "01";                        /* Test version number or "" */
+char *ck_s_test = "";                  /* "Dev","Alpha","Beta","RC", or "" */
+char *ck_s_tver = "";                  /* Test version number or "" */
 #else  /* OS2 */
 char *ck_s_test = "";                  /* (i.e. K95) */
 char *ck_s_tver = "";
index 9829987..fc7595a 100644 (file)
@@ -9,64 +9,115 @@ C-Kermit Program Logic Manual
 
      Frank da Cruz
      [11]The Kermit Project
-     [12]Columbia University
 
    As of: C-Kermit 9.0.300, 30 June 2011
-   Last update: Tue Jun 28 08:59:18 2011
+   Last update: Fri Jul 1 15:47:34 2011
 
      IF YOU ARE READING A PLAIN-TEXT version of this document, note that
      this file is a plain-text dump of a Web page. You can visit the
      original (and possibly more up-to-date) Web page here:
 
-  [13]http://www.columbia.edu/kermit/ckcplm.html
-
-   [ [14]C-Kermit Home ] [ [15]Kermit Home ]
+  [12]http://www.columbia.edu/kermit/ckcplm.html
 
 CONTENTS
 
-  1. [16]INTRODUCTION
-  2. [17]FILES
-  3. [18]SOURCE CODE PORTABILITY AND STYLE
-  4. [19]MODULES
-     4.A. [20]Group A: Library Routines
-     4.B. [21]Group B: Kermit File Transfer
-     4.C. [22]Group C: Character-Set Conversion
-     4.D. [23]Group D: User Interface
-     4.E. [24]Group E: Platform-Dependent I/O
-     4.F. [25]Group F: Network Support
-     4.G. [26]Group G: Formatted Screen Support
-     4.H. [27]Group H: Pseudoterminal Support
-     4.I. [28]Group I: Security
-  I. [29]APPENDIX I: FILE PERMISSIONS
+  1. [13]INTRODUCTION
+  2. [14]FILES
+  3. [15]SOURCE CODE PORTABILITY AND STYLE
+  4. [16]MODULES
+     4.A. [17]Group A: Library Routines
+     4.B. [18]Group B: Kermit File Transfer
+     4.C. [19]Group C: Character-Set Conversion
+     4.D. [20]Group D: User Interface
+     4.E. [21]Group E: Platform-Dependent I/O
+     4.F. [22]Group F: Network Support
+     4.G. [23]Group G: Formatted Screen Support
+     4.H. [24]Group H: Pseudoterminal Support
+     4.I. [25]Group I: Security
+  I. [26]APPENDIX I: FILE PERMISSIONS
 
 1. INTRODUCTION
 
-   The Kermit Protocol is specified in the book Kermit, A File Transfer
-   Protocol by Frank da Cruz, Digital Press / Butterworth Heinemann,
-   Newton, MA, USA (1987), 379 pages, ISBN 0-932376-88-6. It is assumed
-   the reader is familiar with the Kermit protocol specification.
+   The Kermit Protocol is specified in the book [27]Kermit, A File
+   Transfer Protocol by Frank da Cruz, Digital Press / Butterworth
+   Heinemann, Newton, MA, USA (1987), 379 pages, ISBN 0-932376-88-6. It is
+   assumed the reader is familiar with the Kermit protocol specification.
 
    This file describes the relationship among the modules and functions of
    C-Kermit 5A and later, and other programming considerations. C-Kermit
    is designed to be portable to any kind of computer that has a C
    compiler. The source code is broken into many files that are grouped
-   according to their function, as shown in the [30]Contents.
+   according to their function, as shown in the [28]Contents.
 
    C-Kermit has seen constant development since 1985. Throughout its
    history, there has been a neverending tug-of-war among:
 
     a. Functionality: adding new features, fixing bugs, improving
        performance.
-    b. Adding support for new platforms.
+    b. Adding support for new platforms or communication methods.
     c. "Buzzword 1.0 compliance".
 
    The latter category is the most frustrating, since it generally
    involves massive changes just to keep the software doing what it did
    before in some new setting: e.g. the K&R-to-ANSIC conversion (which had
    to be done, of course, without breaking K&R); Y2K (not a big deal in
-   our case); the many and varied UNIX and other API "standards"; IPv6.
+   our case); the many and varied UNIX and other API "standards" with
+   which to "comply".
+
+   Upon first glance at the source code, you will probably be appalled.
+   Many will be tempted to clean it up and modernize it. But as soon as
+   you do, you are sure to break something. Remember that above all else,
+   the C-Kermit code is portable to every Unix platform that ever existed,
+   going back Unix V7 (1979)*, and to several other completely different
+   and unrelated operating-system families such as DEC/HP VMS, DG AOS/VS,
+   and Stratus VOS, as well as to some Unix offshoots like OS-9 and Plan 9
+   (from Outer Space). Every release of Kermit has been checked on every
+   platform available -- the older the better! -- to make sure it still
+   builds and runs. Even today (2011), there are modern Unix systems that
+   have non-ANSI C compilers, foremost among them HP-UX (where an ANSI
+   optimizing C compiler is available, but only as an expensive add-on).
+   In a way, portability is the most important feature of C-Kermit and
+   every effort should be made to preserve it through future releases.
+
+   Voluminous edit histories are available going back to May 1985. The
+   first versions of C-Kermit were done on our [29]DEC VAX-11/750 with
+   Ultrix 1.0 and 2.0 (as well as departmental 750s with 4.2BSD**), DEC
+   Pro-380 workstations (desktop PDP-11s) running 2.9BSD, which was
+   [30]ported to the 380 by us. Later (1988 or so) on a big VAX 8650 with
+   Ultrix, which became an 8700 (these no doubt weighed several tons), and
+   finally a succession of non-DEC equipment: an Encore Multimax, 25 years
+   worth of Suns, and now Linux on [31]HP Blades. We also had our own VMS
+   development systems for some years. All this plus a generous assortment
+   of departmental and offsite guest accounts on a multitude of platforms.
+   Anyway, the edit histories:
+
+     [32]ckc04e.txt C-Kermit 4.2(030) May 1985 to 4E(072) Jan 1989.
+     [33]ckc04f.txt C-Kermit 4F(077) Arp 1989 to 4F(095) Aug 1989.
+     [34]ckc168.txt Updates to C-Kermit 5A(168) for VMS Nov 1991
+     [35]ckc178.txt C-Kermit 5A(100) Jul 1989 to 5A(178) Jan 1992
+     [36]ckc188.txt C-Kermit 5A(188) development, 1992
+     [37]ckc189.txt C-Kermit 5A(189) development, 1993
+     [38]ckc192.txt C-Kermit 6.0(192) development, 1998
+     [39]ckc197.txt C-Kermit 7.0(197) development, 2000
+     [40]ckc200.txt C-Kermit 8.0.200 development, 2001
+     [41]ckc211.txt C-Kermit 8.0.201 through 8.0.209 2001-2004
+     [42]ckc300.txt C-Kermit 9.0.300 June 2011
+
+   _________________________________
+   * C-Kermit 6.0 was the last one to be built on V7, as I recall. The
+   code should still be good for V7 but it probably has outgrown the
+   16-bit address space. In any case there is still a V7 makefile target
+   and a V7 path through the forest of #ifdefs in the code if anybody is
+   running V7 on an emulator and would like to try building C-Kermit.
+   There is no support for V6 but that is only because no V6 system was
+   ever found for development. Notice that some other 16-bit Unixes are
+   supported in the code, including 2.9BSD and Tandy Xenix 3.0, but have
+   not been tried since C-Kermit 6.0
+
+   **  C-Kermit 9.0.300 was built successfully on 4.2BSD about 25 years
+   later, in June 2011.
 
-   [ [31]Contents ] [ [32]C-Kermit ] [ [33]Kermit Home ]
+   [ [43]Contents ] [ [44]C-Kermit ] [ [45]Kermit Home ]
 
 2. FILES
 
@@ -89,13 +140,13 @@ CONTENTS
      k     (unused)
      l     Stratus VOS
      m     Macintosh with Mac OS 1-9
-     n     Microsoft Windows NT/2000/XP
-     o     OS/2 and/or Microsoft Windows 9x/ME/NT/2000/XP
+     n     (unused)
+     o     OS/2 and Microsoft Windows 9x/ME/NT/2000/XP/Vista/etc
      p     Plan 9 from Bell Labs
      q     (reserved)
-     r     DEC PDP-11 with RSTS/E (never used, open for reassigment)
+     r     DEC PDP-11 with RSTS/E (never used, open for reassignment)
      s     Atari ST GEMDOS (last supported in version 5A(189))
-     t     DEC PDP-11 with RT-11 (never used, open for reassigment)
+     t     DEC PDP-11 with RT-11 (never used, open for reassignment)
      u     Unix-based operating systems (*)
      v     VMS and OpenVMS
      w     Wart (Lex-like preprocessor, platform independent)
@@ -106,7 +157,7 @@ CONTENTS
      4     IBM AS/400
      5-8   (reserved)
      9     Microware OS-9
-     _     Encryption modules
+     _     (underscore) Encryption modules
 
    (*) In fact there is little distinction between the ckc*.* and cku*.*
    categories. It would make more sense for all cku*.* modules to be
@@ -146,7 +197,7 @@ foo(x,y) int x, y; {
   $ emacs
   Esc-X Visit-Tags-Table<CR><CR>
 
-   (but remember that the source file for ckcpro.c is [34]ckcpro.w!)
+   (but remember that the source file for ckcpro.c is [46]ckcpro.w!)
 
    Also:
 
@@ -157,12 +208,12 @@ foo(x,y) int x, y; {
        most other stuff (obviously this is not a portability issue, just
        style).
 
-   [ [35]Contents ] [ [36]C-Kermit ] [ [37]Kermit Home ]
+   [ [47]Contents ] [ [48]C-Kermit ] [ [49]Kermit Home ]
 
 3. SOURCE CODE PORTABILITY AND STYLE
 
    C-Kermit was designed in 1985 as a platform-independent replacement for
-   the earlier Unix Kermit. c-Kermit's design was expected to promote
+   the earlier Unix Kermit. C-Kermit's design was expected to promote
    portability, and judging from the number of platforms to which it has
    been adapted since then, the model is effective, if not ideal
    (obviously if we had it all to do over, we'd change a few things). To
@@ -180,7 +231,7 @@ foo(x,y) int x, y; {
        be selected by defining a symbol, which, if not defined, leaves the
        program exactly as it was before the changes.
      * Although it might be possible to "clean up" the "#ifdef mess",
-       nobody has access to all the hundreds of platforms served by the
+       nobody has accesss to all the hundreds of platforms served by the
        #ifdefs to check the results.
 
    And to answer the second-most-oft-repeated question: "Why don't you
@@ -197,7 +248,7 @@ foo(x,y) int x, y; {
        way to test the results on all the hundreds of platforms where
        C-Kermit is supposed to build.
 
-   When writing code for the system-indendent C-Kermit modules, please
+   When writing code for the system-independent C-Kermit modules, please
    stick to the following coding conventions to ensure portability to the
    widest possible variety of C preprocessors, compilers, and linkers, as
    well as certain network and/or email transports. The same holds true
@@ -244,8 +295,6 @@ foo(x,y) int x, y; {
        all the time).
      * Always cast strlen() in expressions to int:
        if ((int)strlen(foo) < x)...
-     * Any variable whose value might exceed 16383 should be declared as
-       long, or if that is not possible, then as unsigned.
      * Avoid typedefs; they might be portable but they are very confusing
        and there's no way to test for their presence or absence at compile
        time. Use preprocessor symbols instead if possible; at least you
@@ -257,7 +306,7 @@ foo(x,y) int x, y; {
        modifier other than L.
      * Unsigned char is not portable, use CHAR (a preprocessor symbol
        defined in the Kermit header files) and always take precautions
-       against character signage (more about this [38]below).
+       against character signage (more about this [50]below).
      * Don't use initializers with automatic arrays or structs: it's not
        portable.
      * Don't use big automatic arrays or structs in functions that might
@@ -381,12 +430,12 @@ foo(x,y) int x, y; {
        char * foo" in another, or vice-versa: this causes core dumps.
      * With compiler makers falling all over themselves trying to outdo
        each other in ANSI strictness, it has become increasingly necessary
-       to cast EVERYTHING. This is increasingly true for char vs unsigned
-       char. We need to use unsigned chars if we want to deal with 8-bit
-       character sets, but most character- and string-oriented APIs want
-       (signed) char arguments, so explicit casts are necessary. It would
-       be nice if every compiler had a -funsigned-char option (as gcc
-       does), but they don't.
+       to cast EVERYTHING. Especially char vs unsigned char. We need to
+       use unsigned chars if we want to deal with 8-bit character sets,
+       but most character- and string-oriented APIs want (signed) char
+       arguments, so explicit casts are necessary. It would be nice if
+       every compiler had a -funsigned-char option (as gcc does), but they
+       don't.
      * a[x], where x is an unsigned char, can produce a wild memory
        reference if x, when promoted to an int, becomes negative. Cast it
        to (unsigned), even though it ALREADY IS unsigned.
@@ -394,7 +443,7 @@ foo(x,y) int x, y; {
        arguments; for ANSI compilers you MUST use ANSI declarations to
        avoid promotion problems, but you can't use ANSI declarations with
        non-ANSI compilers. Thus declarations of such functions must be
-       hideously entwined in #ifdefs. Example: latter:
+       hideously entwined in #ifdefs. Example:
   int                          /*  Put character in server command buffer  */
   #ifdef CK_ANSIC
   putsrv(char c)
@@ -451,7 +500,7 @@ foo(x,y) int x, y; {
    certain not to apply. For example, in VMS-specific code, it is OK to
    use #if, because VAX C, DEC C, and VMS GCC all support it.
 
-   [ [39]Contents ] [ [40]C-Kermit ] [ [41]Kermit Home ]
+   [ [51]Contents ] [ [52]C-Kermit ] [ [53]Kermit Home ]
 
 3.1. Memory Leaks
 
@@ -503,9 +552,9 @@ foo(x,y) int x, y; {
    ckmakxmsg()
           Like ckmakmsg() but accepts up to 12 items
 
-   More about library functions in [42]Section 4.A.
+   More about library functions in [54]Section 4.A.
 
-   [ [43]Contents ] [ [44]C-Kermit ] [ [45]Kermit Home ]
+   [ [55]Contents ] [ [56]C-Kermit ] [ [57]Kermit Home ]
 
 3.2. The "char" vs "unsigned char" Dilemma
 
@@ -533,7 +582,7 @@ foo(x,y) int x, y; {
    whereas our character data is unsigned. Fine, we can can use casts here
    too -- but who knows what happens inside these routines.
 
-   [ [46]Contents ] [ [47]C-Kermit ] [ [48]Kermit Home ]
+   [ [58]Contents ] [ [59]C-Kermit ] [ [60]Kermit Home ]
 
 4. MODULES
 
@@ -550,8 +599,8 @@ foo(x,y) int x, y; {
           conxxx() (console i/o) routines.
 
    Protocol State
-          Reading and writing from the communicatons device. In this mode,
-          all i/o is handled by the Group E ttxxx() (terminal i/o)
+          Reading and writing from the communications device. In this
+          mode, all i/o is handled by the Group E ttxxx() (terminal i/o)
           routines.
 
    Terminal State
@@ -567,17 +616,17 @@ foo(x,y) int x, y; {
    console or interruptions from it (except for "in-band" interruptions
    such as ^C^C^C).
 
-   [ [49]Contents ] [ [50]C-Kermit ] [ [51]Kermit Home ]
+   [ [61]Contents ] [ [62]C-Kermit ] [ [63]Kermit Home ]
 
 4.A. Group A: Library Functions
 
    Library functions, strictly portable, can be used by all modules on all
-   platforms: [52]ckclib.h, [53]ckclib.c.
+   platforms: [64]ckclib.h, [65]ckclib.c.
 
-   (To be filled in... For now, see [54]Section 3.1 and the comments in
+   (To be filled in... For now, see [66]Section 3.1 and the comments in
    ckclib.c.)
 
-   [ [55]Contents ] [ [56]C-Kermit ] [ [57]Kermit Home ]
+   [ [67]Contents ] [ [68]C-Kermit ] [ [69]Kermit Home ]
 
 4.B. Group B: Kermit File Transfer
 
@@ -591,72 +640,72 @@ foo(x,y) int x, y; {
    contain any library calls except from the standard C library (e.g.
    printf()). They most certainly do not contain any system calls. Files:
 
-   [58]ckcsym.h
+   [70]ckcsym.h
           For use by C compilers that don't allow -D on the command line.
 
-   [59]ckcasc.h
+   [71]ckcasc.h
           ASCII character symbol definitions.
 
-   [60]ckcsig.h
+   [72]ckcsig.h
           System-independent signal-handling definitions and prototypes.
 
-   [61]ckcdeb.h
+   [73]ckcdeb.h
           Originally, debugging definitions. Now this file also contains
           all definitions and prototypes that are shared by all modules in
           all groups.
 
-   [62]ckcker.h
+   [74]ckcker.h
           Kermit protocol symbol definitions.
 
-   [63]ckcxla.h
+   [75]ckcxla.h
           Character-set-related symbol definitions (see next section).
 
-   [64]ckcmai.c
+   [76]ckcmai.c
           The main program. This module contains the declarations of all
           the protocol-related global variables that are shared among the
           other modules.
 
-   [65]ckcpro.w
+   [77]ckcpro.w
           The protocol module itself, written in "wart", a lex-like
           preprocessor that is distributed with Kermit under the name
           CKWART.C.
 
-   [66]ckcfns.c, [67]ckcfn2.c, [68]ckcfn3.c
+   [78]ckcfns.c, [79]ckcfn2.c, [80]ckcfn3.c
           The protocol support functions used by the protocol module.
 
-   [69]Group B modules may call upon functions from [70]Group E, but not
-   from [71]Group D modules (with the single exception that the main
+   [81]Group B modules may call upon functions from [82]Group E, but not
+   from [83]Group D modules (with the single exception that the main
    program invokes the user interface, which is in Group D). (This last
    assertion is really only a conjecture.)
 
-   [ [72]Contents ] [ [73]C-Kermit ] [ [74]Kermit Home ]
+   [ [84]Contents ] [ [85]C-Kermit ] [ [86]Kermit Home ]
 
 4.C. Group C: Character-Set Conversion
 
-   Character set translation tables and functions. Used by the [75]Group
+   Character set translation tables and functions. Used by the [87]Group
    B, protocol modules, but may be specific to different computers. (So
    far, all character character sets supported by C-Kermit are supported
-   in [76]ckuxla.c and [77]ckuxla.h, including Macintosh and IBM character
+   in [88]ckuxla.c and [89]ckuxla.h, including Macintosh and IBM character
    sets). These modules should be completely portable, and not rely on any
    kind of system or library services.
 
-   [78]ckcxla.h
+   [90]ckcxla.h
           Character-set definitions usable by all versions of C-Kermit.
 
    ck?xla.h
-          Character-set definitions for computer "?", e.g. [79]ckuxla.h
-          for UNIX, [80]ckmxla.h for Macintosh.
+          Character-set definitions for computer "?", e.g. [91]ckuxla.h
+          for UNIX, [92]ckmxla.h for Macintosh.
 
-   [81]ck?xla
+   [93]ck?xla
           Character-set translation tables and functions for computer "?",
           For example, CKUXLA.C for UNIX, CKMXLA.C for Macintosh. So far,
           these are the only two such modules. The UNIX module is used for
           all versions of C-Kermit except the Macintosh version.
 
-   [82]ckcuni.h
+   [94]ckcuni.h
           Unicode definitions
 
-   [83]ckcuni.c
+   [95]ckcuni.c
           Unicode module
 
    Here's how to add a new file character set in the original (non-Unicode
@@ -718,7 +767,7 @@ foo(x,y) int x, y; {
 
           + (To be filled in...)
 
-   [ [84]Contents ] [ [85]C-Kermit ] [ [86]Kermit Home ]
+   [ [96]Contents ] [ [97]C-Kermit ] [ [98]Kermit Home ]
 
 4.D. Group D: User Interface
 
@@ -742,7 +791,7 @@ foo(x,y) int x, y; {
        such as the CONNECT command, local file management commands,
        parameter-setting commands, FTP client commands, etc.
 
-   If you plan to imbed the [87]Group B, files into a program with a
+   If you plan to embed the [99]Group B, files into a program with a
    different user interface, your interface must supply an appropriate
    screen() function, plus a couple related ones like chkint() and
    intmsg() for handling keyboard (or mouse, etc) interruptions during
@@ -757,38 +806,38 @@ foo(x,y) int x, y; {
    combination, and it can even be built with no user interface at all (in
    which case it runs as a remote-mode Kermit server).
 
-   [88]ckucmd.h
-   [89]ckucmd.c
+   [100]ckucmd.h
+   [101]ckucmd.c
           The command parsing primitives used by the interactive command
           parser to parse keywords, numbers, filenames, etc, and to give
           help, complete fields, supply defaults, allow abbreviations and
           editing, etc. This package is totally independent of Kermit, but
-          does depend on the [90]Group E functions.
+          does depend on the [102]Group E functions.
 
-   [91]ckuusr.h
+   [103]ckuusr.h
           Definitions of symbols used in Kermit's commands.
 
    ckuus*.c
           Kermit's interactive command parser, including the script
-          programming language: [92]ckuusr.c (includes top-level keyword
-          tables); [93]ckuus2.c (HELP command text); [94]ckuus3.c (most of
-          the SET command); [95]ckuus4.c (includes variables and
+          programming language: [104]ckuusr.c (includes top-level keyword
+          tables); [105]ckuus2.c (HELP command text); [106]ckuus3.c (most
+          of the SET command); [107]ckuus4.c (includes variables and
           functions); ckuus[567].c (miscellaneous);
 
-   [96]ckuusy.c
+   [108]ckuusy.c
           The command-line-option parser.
 
-   [97]ckuusx.c
+   [109]ckuusx.c
           User interface functions common to both the interactive and
           command-line parsers.
 
-   [98]ckuver.h
+   [110]ckuver.h
           Version heralds for different implementations.
 
-   [99]ckuscr.c
+   [111]ckuscr.c
           The (old, uucp-like) SCRIPT command
 
-   [100]ckudia.c
+   [112]ckudia.c
           The DIAL command. Includes specific knowledge of many types of
           modems.
 
@@ -802,8 +851,8 @@ foo(x,y) int x, y; {
           The CONNECT command. Terminal connection, and in some cases
           (Macintosh, Windows) also terminal emulation. NOTE: As of
           C-Kermit 7.0, there are two different CONNECT modules for UNIX:
-          [101]ckucon.c -- the traditional, portable, fork()-based version
-          -- and [102]ckucns.c, a new version that uses select() rather
+          [113]ckucon.c -- the traditional, portable, fork()-based version
+          -- and [114]ckucns.c, a new version that uses select() rather
           than forks so it can handle encryption. ckucns.c is the
           preferred version for Unix; ckucon.c is not likely to keep pace
           with it in terms of upgrades, etc. However, since select() is
@@ -836,7 +885,7 @@ foo(x,y) int x, y; {
    existence of C library features like fopen, fgets, feof, (f)printf,
    argv/argc, etc. Other functions that are likely to vary among operating
    systems -- like setting terminal modes or interrupts -- are invoked via
-   calls to functions that are defined in the [103]Group E
+   calls to functions that are defined in the [115]Group E
    platform-dependent modules, ck?[ft]io.c. The command line parser
    processes any arguments found on the command line, as passed to main()
    via argv/argc. The interactive parser uses the facilities of the cmd
@@ -845,7 +894,7 @@ foo(x,y) int x, y; {
    requirements for the Kermit command parser are these:
 
     1. Set parameters via global variables like duplex, speed, ttname,
-       etc. See [104]ckcmai.c for the declarations and descriptions of
+       etc. See [116]ckcmai.c for the declarations and descriptions of
        these variables.
     2. If a command can be executed without the use of Kermit protocol,
        then execute the command directly and set the sstate (start state)
@@ -893,7 +942,7 @@ foo(x,y) int x, y; {
    defined). The intmsg() and chkint() functions provide the user i/o for
    interrupting file transfers.
 
-   [ [105]Contents ] [ [106]C-Kermit ] [ [107]Kermit Home ]
+   [ [117]Contents ] [ [118]C-Kermit ] [ [119]Kermit Home ]
 
 4.E. Group E: Platform-Dependent I/O
 
@@ -901,10 +950,10 @@ foo(x,y) int x, y; {
    including the command package, call upon these functions, which are
    designed to provide system-independent primitives for controlling and
    manipulating devices and files. For Unix, these functions are defined
-   in the files [108]ckufio.c (files), [109]ckutio.c (communications), and
-   [110]ckusig.c (signal handling).
+   in the files [120]ckufio.c (files), [121]ckutio.c (communications), and
+   [122]ckusig.c (signal handling).
 
-   For VMS, the files are [111]ckvfio.c, ckvtio.c, and [112]ckusig.c (VMS
+   For VMS, the files are [123]ckvfio.c, ckvtio.c, and [124]ckusig.c (VMS
    can use the same signal handling routines as Unix). It doesn't really
    matter what the files are called, except for Kermit distribution
    purposes (grouping related files together alphabetically), only that
@@ -912,7 +961,7 @@ foo(x,y) int x, y; {
    calling and return conventions, and has the same type.
 
    The Group E modules contain both functions and global variables that
-   are accessed by modules in the other groups. These are now described.
+   are accesssed by modules in the other groups. These are now described.
 
    (By the way, I got this list by linking all the C-Kermit modules
    together except ckutio and ckufio. These are the symbols that ld
@@ -1018,7 +1067,7 @@ foo(x,y) int x, y; {
    int dfflow;
           Default flow control. 0 = none, 1 = Xon/Xoff, ... (see FLO_xxx
           symbols in ckcdeb.h)
-          Set by Group E module. Used by [113]ckcmai.c to initialize flow
+          Set by Group E module. Used by [125]ckcmai.c to initialize flow
           control variable.
 
    int dfloc;
@@ -1070,7 +1119,7 @@ foo(x,y) int x, y; {
           mode. Since this is not implemented everywhere, references to it
           are in #ifdef CK_TTYFD..#endif.
 
-   [ [114]Contents ] [ [115]C-Kermit ] [ [116]Kermit Home ]
+   [ [126]Contents ] [ [127]C-Kermit ] [ [128]Kermit Home ]
 
 4.E.2. Functions
 
@@ -1080,8 +1129,8 @@ foo(x,y) int x, y; {
 4.E.2.1. File-Related Functions
 
    In most implementations, these are collected together into a module
-   called ck?fio.c, where ? = "u" ([117]ckutio.c for Unix), "v"
-   ([118]ckvtio.c for VMS), [119]etc. To be totally platform-independent,
+   called ck?fio.c, where ? = "u" ([129]ckutio.c for Unix), "v"
+   ([130]ckvtio.c for VMS), [131]etc. To be totally platform-independent,
    C-Kermit maintains its own file numbers, and provides the functions
    described in this section to deal with the files associated with them.
    The file numbers are referred to symbolically, and are defined as
@@ -1195,7 +1244,8 @@ foo(x,y) int x, y; {
           Check to see if file with name fn is a regular, readable,
           existing file, suitable for Kermit to send -- not a directory,
           not a symbolic link, etc. Returns:
-           -3: if file exists but is not accessible (e.g. read-protected);
+           -3: if file exists but is not accesssible (e.g.
+          read-protected);
            -2: if file exists but is not of a readable type (e.g. a
           directory);
            -1: on error (e.g. file does not exist, or fn is garbage);
@@ -1211,7 +1261,7 @@ foo(x,y) int x, y; {
 
    long
           zgetfs(fn) char *fn;
-          Gets the size of the given file, regardless of accessibility.
+          Gets the size of the given file, regardless of accesssibility.
           Used for directory listings. Unlike zchki(), should return the
           size of any kind of file, even a directory. zgetfs() also should
           serve as a mini "get file info" function that can be used until
@@ -1334,9 +1384,9 @@ foo(x,y) int x, y; {
 
    int
           zsetroot(char * dir)
-          Sets the root for the user's file access, like Unix chroot(),
+          Sets the root for the user's file accesss, like Unix chroot(),
           but does not require privilege. In Unix, this must be
-          implemented entirely by Kermit's own file access routines.
+          implemented entirely by Kermit's own file accesss routines.
           Returns:
             1: Success
            -1: Invalid argument
@@ -1623,7 +1673,7 @@ foo(x,y) int x, y; {
           the given argument vector, which follows the conventions of UNIX
           argv[]: the name of the command pointed to by element 0, the
           first arg by element 1, and so on. A null args[] pointer
-          indicates the end of the arugment list. All open files must
+          indicates the end of the argument list. All open files must
           remain open so the exec'd process can use them. Returns only if
           unsuccessful.
 
@@ -1669,7 +1719,7 @@ foo(x,y) int x, y; {
    is a date of the form yyyymmdd hh:mm:ss, e.g. 19900208 13:00:00, which
    is to be used for setting or comparing the file date. Other attributes
    in the struct can also be set, such as the protection/permission (See
-   [120]Appendix I), when it makes sense (e.g. "yy->lprotect.val" can be
+   [132]Appendix I), when it makes sense (e.g. "yy->lprotect.val" can be
    set if the remote system ID matches the local one).
     x: A function code: 0 means to set the file's creation date as given.
    1 means compare the date from the yy struct with the file's date.
@@ -1691,7 +1741,7 @@ foo(x,y) int x, y; {
 
    int
           zxcmd(n,s) char *s;
-          Runs a system command so its output can be accessed as if it
+          Runs a system command so its output can be accesssed as if it
           were file n. The command is run in ordinary, unprivileged user
           mode.
           If n is ZSTDIO or ZCTERM, returns -1.
@@ -1763,7 +1813,7 @@ foo(x,y) int x, y; {
           isn't. Makes any appropriate system log entries (IKSD logins,
           failed login attempts, etc). If password is valid, logs the user
           in as herself (if real user), or sets up restricted anonymous
-          access if user is guest (e.g. changes file-system root to
+          accesss if user is guest (e.g. changes file-system root to
           anonroot and sets isguest = 1).
 
    VOID
@@ -1785,14 +1835,14 @@ foo(x,y) int x, y; {
    installed to prevent such security breaches by turning off the
    program's special privileges at all times except when they are needed.
 
-   In UNIX, the only need Kermit has for privileged status is access to
+   In UNIX, the only need Kermit has for privileged status is accesss to
    the UUCP lockfile directory, in order to read, create, and destroy
    lockfiles, and to open communication devices that are normally
-   protected against the user (see the [121]Unix C-Kermit Installation
+   protected against the user (see the [133]Unix C-Kermit Installation
    Instructions for discussion). Therefore, privileges should only be
    enabled for these operations and disabled at all other times. This
    relieves the programmer of the responsibility of putting expensive and
-   unreliable access checks around every file access and subprocess
+   unreliable accesss checks around every file accesss and subprocess
    creation.
 
    Strictly speaking, these functions are not required in all C-Kermit
@@ -2011,9 +2061,9 @@ foo(x,y) int x, y; {
    int
           ttclos()
           Closes the communication device (tty or network). If there were
-          any kind of exclusive access locks connected with the tty, these
-          are released. If the tty has a modem connection, it is hung up.
-          For true tty devices, the original tty device modes are
+          any kind of exclusive accesss locks connected with the tty,
+          these are released. If the tty has a modem connection, it is
+          hung up. For true tty devices, the original tty device modes are
           restored. Returns:
            -1: on failure.
             0: on success.
@@ -2200,9 +2250,9 @@ foo(x,y) int x, y; {
               modem:
                       Less than zero: this is the negative of the network
                       type, and ttname is a network host name. Network
-                      types (from [122]ckcnet.h:
+                      types (from [134]ckcnet.h:
 
-  NET_TCPB 1   TCP/IP Berkeley (socket)  (implemented in [123]ckutio.c)
+  NET_TCPB 1   TCP/IP Berkeley (socket)  (implemented in [135]ckutio.c)
   NET_TCPA 2   TCP/IP AT&T (streams)     (not yet implemented)
   NET_DEC  3   DECnet                    (not yet implemented)
 
@@ -2217,9 +2267,9 @@ foo(x,y) int x, y; {
                       <=0: no timer, wait forever (e.g. for incoming
                       call).
                       For real tty devices, ttopen() attempts to gain
-                      exclusive access to the tty device, for example in
+                      exclusive accesss to the tty device, for example in
                       UNIX by creating a "lockfile" (in other operating
-                      systems, like VMS, exclusive access probably
+                      systems, like VMS, exclusive accesss probably
                       requires no special action).
 
         Side effects:
@@ -2233,8 +2283,8 @@ foo(x,y) int x, y; {
         Returns:
                   0: on success
                  -5: if device is in use
-                 -4: if access to device is denied
-                 -3: if access to lock mechanism denied
+                 -4: if accesss to device is denied
+                 -3: if accesss to lock mechanism denied
                  -2: upon timeout waiting for device to open
                  -1: on other error
 
@@ -2437,8 +2487,8 @@ foo(x,y) int x, y; {
           the data it points to is not safe, so should be copied to a safe
           place before use. ztime() has no return value. As a side effect,
           this routine can also fill in the following two external
-          variables (which must be defined in the system-dependendent
-          modules for each platform):
+          variables (which must be defined in the system-dependent modules
+          for each platform):
             long ztusec: Fraction of seconds of clock time, microseconds.
             long ztmsec: Fraction of seconds of clock time, milliseconds.
           If these variables are not set by zstime(), they remain at their
@@ -2507,21 +2557,21 @@ foo(x,y) int x, y; {
            -1: if this function is not supported.
             0: on success.
 
-   [ [124]Contents ] [ [125]C-Kermit ] [ [126]Kermit Home ]
+   [ [136]Contents ] [ [137]C-Kermit ] [ [138]Kermit Home ]
 
 4.F. Group F: Network Support
 
    As of version 5A, C-Kermit includes support for several networks.
    Originally, this was just worked into the ttopen(), ttclos(), ttinc(),
-   ttinl(), and similar routines in [127]ckutio.c. But this made it
+   ttinl(), and similar routines in [139]ckutio.c. But this made it
    impossible to share this code with non-UNIX versions, like VMS, AOS/VS,
    OS/2, etc. So as of edit 168, network code has been separated out into
    its own module and header file, ckcnet.c and ckcnet.h:
 
-     [128]ckcnet.h: Network-related symbol definitions.
-     [129]ckcnet.c: Network i/o (TCP/IP, X.25, etc), shared by most
+     [140]ckcnet.h: Network-related symbol definitions.
+     [141]ckcnet.c: Network i/o (TCP/IP, X.25, etc), shared by most
    platforms.
-     [130]cklnet.c: Network i/o (TCP/IP, X.25, etc) specific to Stratus
+     [142]cklnet.c: Network i/o (TCP/IP, X.25, etc) specific to Stratus
    VOS.
 
    The routines and variables in these modules fall into two categories:
@@ -2606,7 +2656,7 @@ foo(x,y) int x, y; {
    contain code to test for the network type, which is available via the
    global variable ttnet.
 
-   [ [131]Contents ] [ [132]C-Kermit ] [ [133]Kermit Home ]
+   [ [143]Contents ] [ [144]C-Kermit ] [ [145]Kermit Home ]
 
 4.F.1. Telnet Protocol
 
@@ -2616,8 +2666,8 @@ foo(x,y) int x, y; {
    it can be implemented in remote mode, which does not have a network
    connection:
 
-      [134]ckctel.h: Telnet protocol symbol definitions.
-      [135]ckctel.c: Telnet protocol.
+      [146]ckctel.h: Telnet protocol symbol definitions.
+      [147]ckctel.c: Telnet protocol.
 
    The Telnet protocol is supported by the following variables and
    routines:
@@ -2643,7 +2693,7 @@ foo(x,y) int x, y; {
 
 4.F.2. FTP Protocol
 
-   (To be filled in...)
+   (To be filled in...) See the [148]source file
 
 4.F.3. HTTP Protocol
 
@@ -2694,7 +2744,7 @@ foo(x,y) int x, y; {
           x25inl()
           Read a Kermit packet from X.25 circuit.
 
-   [ [136]Contents ] [ [137]C-Kermit ] [ [138]Kermit Home ]
+   [ [149]Contents ] [ [150]C-Kermit ] [ [151]Kermit Home ]
 
 4.F.5. Adding New Network Types
 
@@ -2755,14 +2805,14 @@ foo(x,y) int x, y; {
    You can NOT use constructions like "#if defined (HPX25 || IBMX25)";
    they are not portable.
 
-   [ [139]Contents ] [ [140]C-Kermit ] [ [141]Kermit Home ]
+   [ [152]Contents ] [ [153]C-Kermit ] [ [154]Kermit Home ]
 
 4.G. Group G: Formatted Screen Support
 
    So far, this is used only for the fullscreen local-mode file transfer
    display. In the future, it might be extended to other uses. The
    fullscreen display code is in and around the routine screenc() in
-   [142]ckuusx.c.
+   [155]ckuusx.c.
 
    In the UNIX version, we use the curses library, plus one call from the
    termcap library. In other versions (OS/2, VMS, etc) we insert dummy
@@ -2808,17 +2858,18 @@ foo(x,y) int x, y; {
           management service keeps a copy of the entire screen, as curses
           and SMG do. C-Kermit does not do this itself.
 
-   [ [143]Contents ] [ [144]C-Kermit ] [ [145]Kermit Home ]
+   [ [156]Contents ] [ [157]C-Kermit ] [ [158]Kermit Home ]
 
 4.H. Group H: Pseudoterminal Support
 
-   (To be filled in...)
+   (To be filled in...) But see: [159]these comments, and the source files
+   [160]ckupty.h and [161]ckupty.c.
 
 4.I. Group I: Security
 
-   (To be filled in...)
+   (To be filled in...) Meanwhile, see [162]security.html.
 
-   [ [146]Contents ] [ [147]C-Kermit ] [ [148]Kermit Home ]
+   [ [163]Contents ] [ [164]C-Kermit ] [ [165]Kermit Home ]
 
 APPENDIX I. FILE PERMISSIONS
 
@@ -2829,7 +2880,7 @@ I.1. Format of System-Dependent File Permissions in A-Packets
 
    For UNIX (System ID = U1), it's the familiar 3-digit octal number, the
    low-order 9 bits of the filemode: Owner, Group, World, e.g. 660 =
-   read/write access for owner and group, none for world, recorded as a
+   read/write accesss for owner and group, none for world, recorded as a
    3-digit octal string. High-order UNIX permission bits are not
    transmitted.
 
@@ -2880,13 +2931,13 @@ I.2. Handling of Generic Protection
    etc), except that no non-Owner field should give more permissions than
    the Owner field.
 
-   [ [149]Top ] [ [150]Contents ] [ [151]C-Kermit Home ] [ [152]Kermit
+   [ [166]Top ] [ [167]Contents ] [ [168]C-Kermit Home ] [ [169]Kermit
    Home ]
      __________________________________________________________________
 
 
-    C-Kermit Program Logic Manual / [153]The Kermit Project /
-    [154]kermit@columbia.edu / 30 June 2011
+    C-Kermit Program Logic Manual / [170]The Kermit Project /
+    [171]kermit@columbia.edu / 30 June 2011
 
 References
 
@@ -2901,146 +2952,163 @@ References
    9. http://www.columbia.edu/kermit/ckfaq.html
   10. http://www.columbia.edu/kermit/support.html
   11. http://www.columbia.edu/kermit/
-  12. http://www.columbia.edu/
-  13. http://www.columbia.edu/kermit/ckcplm.html
-  14. http://www.columbia.edu/kermit/ckermit.html
-  15. http://www.columbia.edu/kermit/index.html
-  16. http://www.columbia.edu/kermit/ckcplm.html#x1
-  17. http://www.columbia.edu/kermit/ckcplm.html#x2
-  18. http://www.columbia.edu/kermit/ckcplm.html#x3
-  19. http://www.columbia.edu/kermit/ckcplm.html#x4
-  20. http://www.columbia.edu/kermit/ckcplm.html#x4.A
-  21. http://www.columbia.edu/kermit/ckcplm.html#x4.B
-  22. http://www.columbia.edu/kermit/ckcplm.html#x4.C
-  23. http://www.columbia.edu/kermit/ckcplm.html#x4.D
-  24. http://www.columbia.edu/kermit/ckcplm.html#x4.E
-  25. http://www.columbia.edu/kermit/ckcplm.html#x4.F
-  26. http://www.columbia.edu/kermit/ckcplm.html#x4.G
-  27. http://www.columbia.edu/kermit/ckcplm.html#x4.H
-  28. http://www.columbia.edu/kermit/ckcplm.html#x4.I
-  29. http://www.columbia.edu/kermit/ckcplm.html#xa1
-  30. http://www.columbia.edu/kermit/ckcplm.html#contents
-  31. http://www.columbia.edu/kermit/ckcplm.html#contents
-  32. http://www.columbia.edu/kermit/ckermit.html
-  33. http://www.columbia.edu/kermit/index.html
-  34. ftp://kermit.columbia.edu/kermit/c-kermit/ckcpro.w
-  35. http://www.columbia.edu/kermit/ckcplm.html#contents
-  36. http://www.columbia.edu/kermit/ckermit.html
-  37. http://www.columbia.edu/kermit/index.html
-  38. http://www.columbia.edu/kermit/ckcplm.html#x3.2
-  39. http://www.columbia.edu/kermit/ckcplm.html#contents
-  40. http://www.columbia.edu/kermit/ckermit.html
-  41. http://www.columbia.edu/kermit/index.html
-  42. http://www.columbia.edu/kermit/ckcplm.html#x4.A
+  12. http://www.columbia.edu/kermit/ckcplm.html
+  13. http://www.columbia.edu/kermit/ckcplm.html#x1
+  14. http://www.columbia.edu/kermit/ckcplm.html#x2
+  15. http://www.columbia.edu/kermit/ckcplm.html#x3
+  16. http://www.columbia.edu/kermit/ckcplm.html#x4
+  17. http://www.columbia.edu/kermit/ckcplm.html#x4.A
+  18. http://www.columbia.edu/kermit/ckcplm.html#x4.B
+  19. http://www.columbia.edu/kermit/ckcplm.html#x4.C
+  20. http://www.columbia.edu/kermit/ckcplm.html#x4.D
+  21. http://www.columbia.edu/kermit/ckcplm.html#x4.E
+  22. http://www.columbia.edu/kermit/ckcplm.html#x4.F
+  23. http://www.columbia.edu/kermit/ckcplm.html#x4.G
+  24. http://www.columbia.edu/kermit/ckcplm.html#x4.H
+  25. http://www.columbia.edu/kermit/ckcplm.html#x4.I
+  26. http://www.columbia.edu/kermit/ckcplm.html#xa1
+  27. http://www.amazon.com/gp/product/0932376886?ie=UTF8&tag=aleidmoreldom-20&linkCode=as2&camp=1789&creative=9325&creativeASIN=0932376886
+  28. http://www.columbia.edu/kermit/ckcplm.html#contents
+  29. http://www.columbia.edu/kermit/vax_11-750.jpg
+  30. http://www.columbia.edu/cu/computinghistory/hermit.html
+  31. http://www.columbia.edu/kermit/cudocs/ilosetup.html
+  32. ftp://kermit.columbia.edu/kermit/f/ckc04e.txt
+  33. ftp://kermit.columbia.edu/kermit/f/ckc04f.txt
+  34. ftp://kermit.columbia.edu/kermit/f/ckc168.txt
+  35. ftp://kermit.columbia.edu/kermit/f/ckc178.txt
+  36. ftp://kermit.columbia.edu/kermit/f/ckc188.txt
+  37. ftp://kermit.columbia.edu/kermit/f/ckc189.txt
+  38. ftp://kermit.columbia.edu/kermit/f/ckc192.txt
+  39. ftp://kermit.columbia.edu/kermit/f/ckc197.txt
+  40. ftp://kermit.columbia.edu/kermit/f/ckc200.txt
+  41. ftp://kermit.columbia.edu/kermit/f/ckc211.txt
+  42. ftp://kermit.columbia.edu/kermit/f/ckc300.txt
   43. http://www.columbia.edu/kermit/ckcplm.html#contents
   44. http://www.columbia.edu/kermit/ckermit.html
   45. http://www.columbia.edu/kermit/index.html
-  46. http://www.columbia.edu/kermit/ckcplm.html#contents
-  47. http://www.columbia.edu/kermit/ckermit.html
-  48. http://www.columbia.edu/kermit/index.html
-  49. http://www.columbia.edu/kermit/ckcplm.html#contents
-  50. http://www.columbia.edu/kermit/ckermit.html
-  51. http://www.columbia.edu/kermit/index.html
-  52. ftp://kermit.columbia.edu/kermit/c-kermit/ckclib.h
-  53. ftp://kermit.columbia.edu/kermit/c-kermit/ckclib.c
-  54. http://www.columbia.edu/kermit/ckcplm.html#x3.1
+  46. ftp://kermit.columbia.edu/kermit/c-kermit/ckcpro.w
+  47. http://www.columbia.edu/kermit/ckcplm.html#contents
+  48. http://www.columbia.edu/kermit/ckermit.html
+  49. http://www.columbia.edu/kermit/index.html
+  50. http://www.columbia.edu/kermit/ckcplm.html#x3.2
+  51. http://www.columbia.edu/kermit/ckcplm.html#contents
+  52. http://www.columbia.edu/kermit/ckermit.html
+  53. http://www.columbia.edu/kermit/index.html
+  54. http://www.columbia.edu/kermit/ckcplm.html#x4.A
   55. http://www.columbia.edu/kermit/ckcplm.html#contents
   56. http://www.columbia.edu/kermit/ckermit.html
   57. http://www.columbia.edu/kermit/index.html
-  58. ftp://kermit.columbia.edu/kermit/c-kermit/ckcsym.h
-  59. ftp://kermit.columbia.edu/kermit/c-kermit/ckcasc.h
-  60. ftp://kermit.columbia.edu/kermit/c-kermit/ckcsig.h
-  61. ftp://kermit.columbia.edu/kermit/c-kermit/ckcdeb.h
-  62. ftp://kermit.columbia.edu/kermit/c-kermit/ckcker.h
-  63. ftp://kermit.columbia.edu/kermit/c-kermit/ckcxla.h
-  64. ftp://kermit.columbia.edu/kermit/c-kermit/ckcmai.c
-  65. ftp://kermit.columbia.edu/kermit/c-kermit/ckcpro.w
-  66. ftp://kermit.columbia.edu/kermit/c-kermit/ckcfns.c
-  67. ftp://kermit.columbia.edu/kermit/c-kermit/ckcfn2.c
-  68. ftp://kermit.columbia.edu/kermit/c-kermit/ckcfn3.c
-  69. http://www.columbia.edu/kermit/ckcplm.html#x4.B
-  70. http://www.columbia.edu/kermit/ckcplm.html#x4.E
-  71. http://www.columbia.edu/kermit/ckcplm.html#x4.D
-  72. http://www.columbia.edu/kermit/ckcplm.html#contents
-  73. http://www.columbia.edu/kermit/ckermit.html
-  74. http://www.columbia.edu/kermit/index.html
-  75. http://www.columbia.edu/kermit/ckcplm.html#x4.B
-  76. ftp://kermit.columbia.edu/kermit/c-kermit/ckuxla.c
-  77. ftp://kermit.columbia.edu/kermit/c-kermit/ckuxla.h
-  78. ftp://kermit.columbia.edu/kermit/c-kermit/ckcxla.h
-  79. ftp://kermit.columbia.edu/kermit/c-kermit/ckuxla.h
-  80. ftp://kermit.columbia.edu/kermit/c-kermit/ckmxla.h
-  81. ftp://kermit.columbia.edu/kermit/c-kermit/ck?xla
-  82. ftp://kermit.columbia.edu/kermit/c-kermit/ckcuni.h
-  83. ftp://kermit.columbia.edu/kermit/c-kermit/ckcuni.c
+  58. http://www.columbia.edu/kermit/ckcplm.html#contents
+  59. http://www.columbia.edu/kermit/ckermit.html
+  60. http://www.columbia.edu/kermit/index.html
+  61. http://www.columbia.edu/kermit/ckcplm.html#contents
+  62. http://www.columbia.edu/kermit/ckermit.html
+  63. http://www.columbia.edu/kermit/index.html
+  64. ftp://kermit.columbia.edu/kermit/c-kermit/ckclib.h
+  65. ftp://kermit.columbia.edu/kermit/c-kermit/ckclib.c
+  66. http://www.columbia.edu/kermit/ckcplm.html#x3.1
+  67. http://www.columbia.edu/kermit/ckcplm.html#contents
+  68. http://www.columbia.edu/kermit/ckermit.html
+  69. http://www.columbia.edu/kermit/index.html
+  70. ftp://kermit.columbia.edu/kermit/c-kermit/ckcsym.h
+  71. ftp://kermit.columbia.edu/kermit/c-kermit/ckcasc.h
+  72. ftp://kermit.columbia.edu/kermit/c-kermit/ckcsig.h
+  73. ftp://kermit.columbia.edu/kermit/c-kermit/ckcdeb.h
+  74. ftp://kermit.columbia.edu/kermit/c-kermit/ckcker.h
+  75. ftp://kermit.columbia.edu/kermit/c-kermit/ckcxla.h
+  76. ftp://kermit.columbia.edu/kermit/c-kermit/ckcmai.c
+  77. ftp://kermit.columbia.edu/kermit/c-kermit/ckcpro.w
+  78. ftp://kermit.columbia.edu/kermit/c-kermit/ckcfns.c
+  79. ftp://kermit.columbia.edu/kermit/c-kermit/ckcfn2.c
+  80. ftp://kermit.columbia.edu/kermit/c-kermit/ckcfn3.c
+  81. http://www.columbia.edu/kermit/ckcplm.html#x4.B
+  82. http://www.columbia.edu/kermit/ckcplm.html#x4.E
+  83. http://www.columbia.edu/kermit/ckcplm.html#x4.D
   84. http://www.columbia.edu/kermit/ckcplm.html#contents
   85. http://www.columbia.edu/kermit/ckermit.html
   86. http://www.columbia.edu/kermit/index.html
   87. http://www.columbia.edu/kermit/ckcplm.html#x4.B
-  88. ftp://kermit.columbia.edu/kermit/c-kermit/ckucmd.h
-  89. ftp://kermit.columbia.edu/kermit/c-kermit/ckucmd.c
-  90. http://www.columbia.edu/kermit/ckcplm.html#x4.E
-  91. ftp://kermit.columbia.edu/kermit/c-kermit/ckuusr.h
-  92. ftp://kermit.columbia.edu/kermit/c-kermit/ckuusr.c
-  93. ftp://kermit.columbia.edu/kermit/c-kermit/ckuus2.c
-  94. ftp://kermit.columbia.edu/kermit/c-kermit/ckuus3.c
-  95. ftp://kermit.columbia.edu/kermit/c-kermit/ckuus4.c
-  96. ftp://kermit.columbia.edu/kermit/c-kermit/ckuusy.c
-  97. ftp://kermit.columbia.edu/kermit/c-kermit/ckuusx.c
-  98. ftp://kermit.columbia.edu/kermit/c-kermit/ckuver.h
-  99. ftp://kermit.columbia.edu/kermit/c-kermit/ckuscr.c
- 100. ftp://kermit.columbia.edu/kermit/c-kermit/ckudia.c
- 101. ftp://kermit.columbia.edu/kermit/c-kermit/ckucon.c
- 102. ftp://kermit.columbia.edu/kermit/c-kermit/ckucns.c
- 103. http://www.columbia.edu/kermit/ckcplm.html#x4.E
- 104. ftp://kermit.columbia.edu/kermit/c-kermit/ckcmai.c
- 105. http://www.columbia.edu/kermit/ckcplm.html#contents
- 106. http://www.columbia.edu/kermit/ckermit.html
- 107. http://www.columbia.edu/kermit/index.html
- 108. ftp://kermit.columbia.edu/kermit/c-kermit/ckufio.c
- 109. ftp://kermit.columbia.edu/kermit/c-kermit/ckutio.c
- 110. ftp://kermit.columbia.edu/kermit/c-kermit/ckusig.c
- 111. ftp://kermit.columbia.edu/kermit/c-kermit/ckvfio.c
- 112. ftp://kermit.columbia.edu/kermit/c-kermit/ckusig.c
- 113. ftp://kermit.columbia.edu/kermit/c-kermit/ckcmai.c
- 114. http://www.columbia.edu/kermit/ckcplm.html#contents
- 115. http://www.columbia.edu/kermit/ckermit.html
- 116. http://www.columbia.edu/kermit/index.html
- 117. ftp://kermit.columbia.edu/kermit/c-kermit/ckutio.c
- 118. ftp://kermit.columbia.edu/kermit/c-kermit/ckvtio.c
- 119. http://www.columbia.edu/kermit/ckcplm.html#x2
- 120. http://www.columbia.edu/kermit/ckcplm.html#xa1
- 121. http://www.columbia.edu/kermit/ckuins.html
- 122. ftp://kermit.columbia.edu/kermit/c-kermit/ckcnet.h
- 123. ftp://kermit.columbia.edu/kermit/c-kermit/ckutio.c
- 124. http://www.columbia.edu/kermit/ckcplm.html#contents
- 125. http://www.columbia.edu/kermit/ckermit.html
- 126. http://www.columbia.edu/kermit/index.html
- 127. ftp://kermit.columbia.edu/kermit/c-kermit/ckutio.c
- 128. ftp://kermit.columbia.edu/kermit/c-kermit/ckcnet.h
- 129. ftp://kermit.columbia.edu/kermit/c-kermit/ckcnet.c
- 130. ftp://kermit.columbia.edu/kermit/c-kermit/cklnet.c
- 131. http://www.columbia.edu/kermit/ckcplm.html#contents
- 132. http://www.columbia.edu/kermit/ckermit.html
- 133. http://www.columbia.edu/kermit/index.html
- 134. ftp://kermit.columbia.edu/kermit/c-kermit/ckctel.h
- 135. ftp://kermit.columbia.edu/kermit/c-kermit/ckctel.c
+  88. ftp://kermit.columbia.edu/kermit/c-kermit/ckuxla.c
+  89. ftp://kermit.columbia.edu/kermit/c-kermit/ckuxla.h
+  90. ftp://kermit.columbia.edu/kermit/c-kermit/ckcxla.h
+  91. ftp://kermit.columbia.edu/kermit/c-kermit/ckuxla.h
+  92. ftp://kermit.columbia.edu/kermit/c-kermit/ckmxla.h
+  93. ftp://kermit.columbia.edu/kermit/c-kermit/ck?xla
+  94. ftp://kermit.columbia.edu/kermit/c-kermit/ckcuni.h
+  95. ftp://kermit.columbia.edu/kermit/c-kermit/ckcuni.c
+  96. http://www.columbia.edu/kermit/ckcplm.html#contents
+  97. http://www.columbia.edu/kermit/ckermit.html
+  98. http://www.columbia.edu/kermit/index.html
+  99. http://www.columbia.edu/kermit/ckcplm.html#x4.B
+ 100. ftp://kermit.columbia.edu/kermit/c-kermit/ckucmd.h
+ 101. ftp://kermit.columbia.edu/kermit/c-kermit/ckucmd.c
+ 102. http://www.columbia.edu/kermit/ckcplm.html#x4.E
+ 103. ftp://kermit.columbia.edu/kermit/c-kermit/ckuusr.h
+ 104. ftp://kermit.columbia.edu/kermit/c-kermit/ckuusr.c
+ 105. ftp://kermit.columbia.edu/kermit/c-kermit/ckuus2.c
+ 106. ftp://kermit.columbia.edu/kermit/c-kermit/ckuus3.c
+ 107. ftp://kermit.columbia.edu/kermit/c-kermit/ckuus4.c
+ 108. ftp://kermit.columbia.edu/kermit/c-kermit/ckuusy.c
+ 109. ftp://kermit.columbia.edu/kermit/c-kermit/ckuusx.c
+ 110. ftp://kermit.columbia.edu/kermit/c-kermit/ckuver.h
+ 111. ftp://kermit.columbia.edu/kermit/c-kermit/ckuscr.c
+ 112. ftp://kermit.columbia.edu/kermit/c-kermit/ckudia.c
+ 113. ftp://kermit.columbia.edu/kermit/c-kermit/ckucon.c
+ 114. ftp://kermit.columbia.edu/kermit/c-kermit/ckucns.c
+ 115. http://www.columbia.edu/kermit/ckcplm.html#x4.E
+ 116. ftp://kermit.columbia.edu/kermit/c-kermit/ckcmai.c
+ 117. http://www.columbia.edu/kermit/ckcplm.html#contents
+ 118. http://www.columbia.edu/kermit/ckermit.html
+ 119. http://www.columbia.edu/kermit/index.html
+ 120. ftp://kermit.columbia.edu/kermit/c-kermit/ckufio.c
+ 121. ftp://kermit.columbia.edu/kermit/c-kermit/ckutio.c
+ 122. ftp://kermit.columbia.edu/kermit/c-kermit/ckusig.c
+ 123. ftp://kermit.columbia.edu/kermit/c-kermit/ckvfio.c
+ 124. ftp://kermit.columbia.edu/kermit/c-kermit/ckusig.c
+ 125. ftp://kermit.columbia.edu/kermit/c-kermit/ckcmai.c
+ 126. http://www.columbia.edu/kermit/ckcplm.html#contents
+ 127. http://www.columbia.edu/kermit/ckermit.html
+ 128. http://www.columbia.edu/kermit/index.html
+ 129. ftp://kermit.columbia.edu/kermit/c-kermit/ckutio.c
+ 130. ftp://kermit.columbia.edu/kermit/c-kermit/ckvtio.c
+ 131. http://www.columbia.edu/kermit/ckcplm.html#x2
+ 132. http://www.columbia.edu/kermit/ckcplm.html#xa1
+ 133. http://www.columbia.edu/kermit/ckuins.html
+ 134. ftp://kermit.columbia.edu/kermit/c-kermit/ckcnet.h
+ 135. ftp://kermit.columbia.edu/kermit/c-kermit/ckutio.c
  136. http://www.columbia.edu/kermit/ckcplm.html#contents
  137. http://www.columbia.edu/kermit/ckermit.html
  138. http://www.columbia.edu/kermit/index.html
- 139. http://www.columbia.edu/kermit/ckcplm.html#contents
- 140. http://www.columbia.edu/kermit/ckermit.html
- 141. http://www.columbia.edu/kermit/index.html
- 142. ftp://kermit.columbia.edu/kermit/c-kermit/ckuusx.c
+ 139. ftp://kermit.columbia.edu/kermit/c-kermit/ckutio.c
+ 140. ftp://kermit.columbia.edu/kermit/c-kermit/ckcnet.h
+ 141. ftp://kermit.columbia.edu/kermit/c-kermit/ckcnet.c
+ 142. ftp://kermit.columbia.edu/kermit/c-kermit/cklnet.c
  143. http://www.columbia.edu/kermit/ckcplm.html#contents
  144. http://www.columbia.edu/kermit/ckermit.html
  145. http://www.columbia.edu/kermit/index.html
- 146. http://www.columbia.edu/kermit/ckcplm.html#contents
- 147. http://www.columbia.edu/kermit/ckermit.html
- 148. http://www.columbia.edu/kermit/index.html
- 149. http://www.columbia.edu/kermit/ckcplm.html#top
- 150. http://www.columbia.edu/kermit/ckcplm.html#contents
- 151. http://www.columbia.edu/kermit/ckermit.html
- 152. http://www.columbia.edu/kermit/index.html
- 153. http://www.columbia.edu/kermit/index.html
- 154. mailto:kermit@columbia.edu
+ 146. ftp://kermit.columbia.edu/kermit/c-kermit/ckctel.h
+ 147. ftp://kermit.columbia.edu/kermit/c-kermit/ckctel.c
+ 148. ftp://kermit.columbia.edu/kermit/c-kermit/ckcftp.c
+ 149. http://www.columbia.edu/kermit/ckcplm.html#contents
+ 150. http://www.columbia.edu/kermit/ckermit.html
+ 151. http://www.columbia.edu/kermit/index.html
+ 152. http://www.columbia.edu/kermit/ckcplm.html#contents
+ 153. http://www.columbia.edu/kermit/ckermit.html
+ 154. http://www.columbia.edu/kermit/index.html
+ 155. ftp://kermit.columbia.edu/kermit/c-kermit/ckuusx.c
+ 156. http://www.columbia.edu/kermit/ckcplm.html#contents
+ 157. http://www.columbia.edu/kermit/ckermit.html
+ 158. http://www.columbia.edu/kermit/index.html
+ 159. http://www.columbia.edu/kermit/ckermit90.html#LooseEnd
+ 160. ftp://kermit.columbia.edu/kermit/f/ckupty.h
+ 161. ftp://kermit.columbia.edu/kermit/f/ckupty.c
+ 162. http://www.columbia.edu/kermit/security.html
+ 163. http://www.columbia.edu/kermit/ckcplm.html#contents
+ 164. http://www.columbia.edu/kermit/ckermit.html
+ 165. http://www.columbia.edu/kermit/index.html
+ 166. http://www.columbia.edu/kermit/ckcplm.html#top
+ 167. http://www.columbia.edu/kermit/ckcplm.html#contents
+ 168. http://www.columbia.edu/kermit/ckermit.html
+ 169. http://www.columbia.edu/kermit/index.html
+ 170. http://www.columbia.edu/kermit/index.html
+ 171. mailto:kermit@columbia.edu
index 4661a51..795db1c 100644 (file)
@@ -650,9 +650,9 @@ II. NEW FEATURES
        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
+       platform-specific command can still be accesssed with "!", "@", or
        "RUN" wherever the installation does not forbid. In UNIX, the "ls"
-       command can be accessed directly as "ls" in C-Kermit. See
+       command can be accesssed directly as "ls" in C-Kermit. See
        [352]Section 4.5.1 for details.
     7. 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)
@@ -1566,7 +1566,7 @@ II. NEW FEATURES
    with a message, but without changing the exit status from what it
    normally would have been, use the \v(exitstatus) variable, e.g.:
 
-   exit \v(existatus) Goodbye from \v(cmdfile).
+   exit \v(exitstatus) Goodbye from \v(cmdfile).
 
    The EXIT status is returned to the system shell or whatever other
    process invoked C-Kermit, e.g. in UNIX:
@@ -2289,11 +2289,11 @@ II. NEW FEATURES
    As of C-Kermit 7.0, in the UNIX version only, the COPY and RENAME
    commands are built in and do not call the underlying platform's COPY or
    RENAME command. This allows them to work in "NOPUSH" versions and other
-   circumstances where it can't access system commands, and it allows file
-   copying and renaming to be done portably in scripts. The
+   circumstances where it can't accesss system commands, and it allows
+   file copying and renaming to be done portably in scripts. The
    characteristics of the built-in COPY or RENAME include:
      * It fails if the source file is a directory or is wild or lacks read
-       access.
+       accesss.
      * It fails if the source file is the destination file.
      * It allows the destination file to be a directory, in which case the
        source file is copied (or renamed) into it with the same name.
@@ -2332,12 +2332,12 @@ II. NEW FEATURES
 
 1.18. The MANUAL Command
 
-   The MANUAL command can be used to access the appropriate Kermit manual
+   The MANUAL command can be used to accesss the appropriate Kermit manual
    or other manual. The general syntax is:
 
    MANUAL [ string ]
           If the string is omitted, C-Kermit asks the underlying system to
-          access the C-Kermit manual using whatever method is appropriate
+          accesss the C-Kermit manual using whatever method is appropriate
           for the system.
 
    The specific action depends on the system. In UNIX, a "man" command is
@@ -2516,13 +2516,13 @@ Compiled Dec 31 1999 10:38:54, options:
     1. Only one READ file and one WRITE file can be open at a time.
     2. The READ and WRITE commands are strictly line oriented.
     3. These commands can not be used with binary files.
-    4. They do not support read/write access or random access.
+    4. They do not support read/write accesss or random accesss.
     5. The syntax is a bit counterintuitive for programmers.
 
    The new file i/o system allows multiple files to be open at once, in
    any desired combination of modes (read/write/append) supported by the
    operating system, for line, block (record), or character i/o, for
-   sequential or random access, using consistent syntax and conventions.
+   sequential or random accesss, using consistent syntax and conventions.
 
    The new system, however, does not replace the old one, since the old
    system still must be used for:
@@ -2582,8 +2582,8 @@ Compiled Dec 31 1999 10:38:54, options:
    The command to open a file is:
 
    FILE OPEN [ switches ] variable filename
-          Opens a file for the type of access specified by the switches,
-          or for read-only access if no switches are given. Upon success,
+          Opens a file for the type of accesss specified by the switches,
+          or for read-only accesss if no switches are given. Upon success,
           a channel number is assigned to this file and stored in the
           given variable so you can refer to the open file in subsequent
           i/o commands. If the file can not be opened, the FILE OPEN
@@ -2592,9 +2592,9 @@ Compiled Dec 31 1999 10:38:54, options:
    The FILE OPEN switches are:
 
    /READ
-          Open the file for read access. If no switches are given, /READ
+          Open the file for read accesss. If no switches are given, /READ
           is assumed. If the file does not exist or can't be opened for
-          read access, the FILE OPEN command fails.
+          read accesss, the FILE OPEN command fails.
 
    /WRITE
           Allow writing. If a file of the same name already exists, it is
@@ -2614,7 +2614,7 @@ Compiled Dec 31 1999 10:38:54, options:
           switch is meaningless (but still can be used) in UNIX. In VMS,
           Windows, and OS/2, it inhibits end-of-line processing and
           conversion, and so should be used for binary files and/or files
-          that are to be accessed in record or character mode rather than
+          that are to be accesssed in record or character mode rather than
           line by line.
 
    The variable for the channel number can be any kind of variable: the
@@ -3046,10 +3046,10 @@ Compiled Dec 31 1999 10:38:54, options:
 
    The loop works because a relative SEEK outside the file fails.
 
-   It is also possible to use block i/o to manage random-access files with
-   fixed-length records (as long as they don't contain NUL characters).
-   Suppose, for example, you have a file of "card image" records with
-   fixed-field information about customers, such as:
+   It is also possible to use block i/o to manage random-accesss files
+   with fixed-length records (as long as they don't contain NUL
+   characters). Suppose, for example, you have a file of "card image"
+   records with fixed-field information about customers, such as:
 
   Name:     Columns  1-32  (column numbers are 1-based)
   Address:  Columns 33-72
@@ -3973,7 +3973,7 @@ define HSDIAL {                ; High Speed DIAL
           first PDIAL command in a PDIAL sequence. Values are:
 
   -2: Unknown because TAPI handled the phone number translation.
-  -1: Unknown because some kind of error occured.
+  -1: Unknown because some kind of error occurred.
    0: Internal within PBX.
    1: Toll-free.
    2: Local within calling area.
@@ -4106,7 +4106,7 @@ define HSDIAL {                ; High Speed DIAL
   set dial macro xxx
   dial xyzcorp
 
-   This defines a DIAL MACRO called xxx, which puts an access code on the
+   This defines a DIAL MACRO called xxx, which puts an accesss code on the
    front of the number. Another example might be:
 
   def xxx if equal "\v(modem)" "hayes-1200" return \freplace(\%1,$,{,,,,,})
@@ -4143,11 +4143,11 @@ define HSDIAL {                ; High Speed DIAL
        be busy.
 
    To illustrate the final item, suppose you have a choice among many
-   phone service providers; the provider is chosen by dialing an access
+   phone service providers; the provider is chosen by dialing an accesss
    code before the number. Different providers might be better (e.g.
    cheaper) for certain times of day or days of the week, or for dialing
-   certain locations; you can use the DIAL macro to add the access for the
-   most desirable provider.
+   certain locations; you can use the DIAL macro to add the accesss for
+   the most desirable provider.
 
    Similarly, when the same number might be reached through multiple
    providers, it's possible that one provider might not be able to
@@ -4968,7 +4968,7 @@ SET HOST /PTY {sh -c "grep somestring *.txt"}
 
    Although C-Kermit includes its own Telnet implementation, you might
    need to use an external Telnet program to make certain connections;
-   perhaps because it has access or security features not available in
+   perhaps because it has accesss or security features not available in
    C-Kermit itself. As noted above, the only precautions necessary are
    usually:
 
@@ -5238,7 +5238,7 @@ SET HOST /PTY {sh -c "grep somestring *.txt"}
   set host /server *
   if fail stop 1 X.25 "set host *" failed
 
-   And then access it from the client as follows:
+   And then accesss it from the client as follows:
 
   set network type x.25
   if fail stop 1 Sorry - no X.25 support
@@ -5459,7 +5459,7 @@ SET HOST /PTY {sh -c "grep somestring *.txt"}
    open any dialout device when its open count indicates that another
    process has it open. SHOW COMM (in QNX only) displays the setting, and
    if you have a port open, it also shows the current open count (with
-   C-Kermit's own access always counting as 1).
+   C-Kermit's own accesss always counting as 1).
 
 2.12. The Connection Log
 
@@ -5552,10 +5552,10 @@ SET HOST /PTY {sh -c "grep somestring *.txt"}
 
    On multiuser systems, it is possible to keep a single, shared,
    system-wide connection log, but this is not recommended since (a) it
-   requires you keep a publicly write-accessible logfile (a glaring target
-   for mischief), and (b) it would require each user to log to that file
-   and not disable logging. A better method for logging connections, in
-   UNIX at least, is syslogging (see [429]ckuins.txt Section 15 and
+   requires you keep a publicly write-accesssible logfile (a glaring
+   target for mischief), and (b) it would require each user to log to that
+   file and not disable logging. A better method for logging connections,
+   in UNIX at least, is syslogging (see [429]ckuins.txt Section 15 and
    [430]Section 4.2 of the [431]IKSD Administration Guide for details).
 
 2.13. Automatic Connection-Specific Flow Control Selection
@@ -5830,10 +5830,10 @@ SET HOST /PTY {sh -c "grep somestring *.txt"}
           eight headers may be specified.
 
    /USER:name
-          In case a page requires a username for access.
+          In case a page requires a username for accesss.
 
    /PASSWORD:password
-          In case a page requires a password for access.
+          In case a page requires a password for accesss.
 
    /ARRAY:arrayname
           Tells Kermit to store the response headers in the given array,
@@ -5943,7 +5943,7 @@ SET HOST /PTY {sh -c "grep somestring *.txt"}
 
    As noted in the manual, C-Kermit's CONNECT command on UNIX is not a
    terminal emulator, but rather a "semitransparent pipe" between the
-   terminal or emulator you are using to access C-Kermit, and the remote
+   terminal or emulator you are using to accesss C-Kermit, and the remote
    host to which C-Kermit is connected. The "semitransparent" qualifier is
    because of character-set translation as well as several actions taken
    by the emulator in response to the characters or strings that pass
@@ -5953,7 +5953,7 @@ SET HOST /PTY {sh -c "grep somestring *.txt"}
    printing, also called Controller printing (as distinct from Autoprint
    or line or screen print). It is intended mainly for use on UNIX
    workstation consoles (as opposed to remote logins), but with some care
-   can also be used when accessing C-Kermit remotely.
+   can also be used when accesssing C-Kermit remotely.
 
    Transparent printing is related to APC by sharing C-Kermit's built-in
    ANSI escape-sequence parser to detect "printer on" and "printer off"
@@ -6010,7 +6010,7 @@ SET HOST /PTY {sh -c "grep somestring *.txt"}
     2. Only the 7-bit forms of the escape sequences are supported. The
        8-bit CSI C1 control is not recognized.
     3. Autoprint is not supported, since this requires a full-fledged
-       terminal emulator with direct access to the screen.
+       terminal emulator with direct accesss to the screen.
     4. The start-print and stop-print sequences pass through to the screen
        (there is no way to avoid this without causing unacceptable delays
        or deadlocks in CONNECT mode). Thus if your terminal or emulator
@@ -6615,8 +6615,8 @@ SET HOST /PTY {sh -c "grep somestring *.txt"}
 
 4.2.1.3. SECURITY
 
-   Some sites might not wish to allow access to system commands or
-   external programs from within Kermit. Such access, including all the
+   Some sites might not wish to allow accesss to system commands or
+   external programs from within Kermit. Such accesss, including all the
    features described here, can be disabled in various ways:
 
     1. When building from source code, include -DNOPUSH among the CFLAGS.
@@ -7625,7 +7625,7 @@ SET HOST /PTY {sh -c "grep somestring *.txt"}
    However, we can use some fairly-well established file naming
    conventions for this purpose. C-Kermit 7.0 lets you provide lists of
    filename patterns that are used to separately determine the file type
-   for each individual file being transfered. A pattern is a string,
+   for each individual file being transferred. A pattern is a string,
    possibly containing the special characters "*" (asterisk, which matches
    any string of zero of more characters) and/or "?" (question mark, which
    matches any single character). For example "a*b" matches all files
@@ -7791,10 +7791,10 @@ SET HOST /PTY {sh -c "grep somestring *.txt"}
 4.4. File Permissions
 
    "Permissions" refers to a code associated with a file that specifies
-   who is allowed to access it, and in what manner. For example, the
+   who is allowed to accesss it, and in what manner. For example, the
    owner, the members of one or more groups, the system administrator, and
    everybody else, might be allowed various combinations of Read, Write,
-   Append, Execute, or Listing access.
+   Append, Execute, or Listing accesss.
 
    The permission code goes by different names on different platforms. In
    UNIX, it might be called the filemode. In VMS, it is called the file
@@ -7879,7 +7879,7 @@ SET HOST /PTY {sh -c "grep somestring *.txt"}
 4.4.2.1.1. UNIX
 
    UNIX supports three categories of users, File Owner, Group, and World,
-   and three types of file access permission: Read, Write, and Execute.
+   and three types of file accesss permission: Read, Write, and Execute.
    Thus, a UNIX file's permissions are expressed in 9 bits.
 
    The system-dependent permission string for UNIX is a 3-digit octal
@@ -7891,7 +7891,7 @@ SET HOST /PTY {sh -c "grep somestring *.txt"}
 4.4.2.1.2. VMS
 
    VMS supports four categories of users, System, File Owner, Group, and
-   World, and four types of file access permission: Read, Write, Execute,
+   World, and four types of file accesss permission: Read, Write, Execute,
    and Delete. Thus, a VMS file's permissions are expressed in 16 bits.
 
    The system-dependent protection string for VMS is a 4-digit hexadecimal
@@ -7961,7 +7961,7 @@ SET HOST /PTY {sh -c "grep somestring *.txt"}
    whether the file "foo" exists; and it runs an inferior process, which
    might be a problem in some environments for resource and/or security
    reasons, and won't work at all in a "nopush" environment (e.g. one in
-   which C-Kermit is configured to forbid access to exterior commands and
+   which C-Kermit is configured to forbid accesss to exterior commands and
    programs, e.g. in a VMS "captive account").
 
    In C-Kermit 7.0 on VMS and UNIX, and in K95 1.1.19 and later, the
@@ -8154,7 +8154,7 @@ SET HOST /PTY {sh -c "grep somestring *.txt"}
        shows the "/tmp/foo" file. If you want to see all "foo" files in
        the /tmp tree, do "cd /tmp" and then "dir /recursive foo".
      * If a file size of -1 is shown, or date-time of 0000-00-00 00:00:00,
-       this means the file was located, but access to information about
+       this means the file was located, but accesss to information about
        the file was denied to C-Kermit.
      * In VMS, if FOO.DIR;1 is a directory within your current directory,
        "directory foo" and "directory [.foo]" list the files in the [.FOO]
@@ -8184,7 +8184,7 @@ SET HOST /PTY {sh -c "grep somestring *.txt"}
 
   wd /headings *.txt
 
-   Of course you can still access your external directory listing program
+   Of course you can still accesss your external directory listing program
    by using RUN or "!", e.g. in VMS:
 
   run directory /size/date/protection/except=*.obj oofa.*;0
@@ -9907,8 +9907,8 @@ SET HOST /PTY {sh -c "grep somestring *.txt"}
           Chooses buffered file output; this is the default. UNIX does its
           normal sort of disk buffering. The optional size specifies
           Kermit's own file output buffer size, and therefore the
-          frequency of disk accesses (write() system calls) -- the bigger
-          the size, the fewer the disk accesses.
+          frequency of disk accessses (write() system calls) -- the bigger
+          the size, the fewer the disk accessses.
 
    SET FILE OUTPUT UNBUFFERED [ size ]
           This forces each file output write() call to actually commit the
@@ -10548,7 +10548,7 @@ SET HOST /PTY {sh -c "grep somestring *.txt"}
 
 4.20.2.5. Streaming on X.25 Connections
 
-   We have only limited access to X.25 networks. One trial was performed
+   We have only limited accesss to X.25 networks. One trial was performed
    in which the 1MB Solaris 2.4 Sparc executable was transferred over a
    SunLink X.25 connection; nothing is known about the actual physical
    connection. With a packet length of 8000 and a window size of 30, the
@@ -10901,8 +10901,8 @@ SET HOST /PTY {sh -c "grep somestring *.txt"}
    visual aspect of the packet that would be seen by the terminal (or,
    more to the point, the emulator, such as K95). This way, only C-Kermit
    goes into RECEIVE mode, and not also the terminal emulator through
-   which C-Kermit is accessed. And therefore, it is no longer necessary to
-   SET TERMINAL AUTODOWNLOAD OFF to prevent multiple Kermits from going
+   which C-Kermit is accesssed. And therefore, it is no longer necessary
+   to SET TERMINAL AUTODOWNLOAD OFF to prevent multiple Kermits from going
    into receive mode at once, but of course it is still necessary to
    ensure that, when you have multiple Kermits in a chain, that the
    desired one receives the autodownload.
@@ -10949,7 +10949,7 @@ SET HOST /PTY {sh -c "grep somestring *.txt"}
           started in interactive mode, and would cause it to exit if it
           entered server mode via command-line option.) When C-Kermit is
           to be the server, you can use { ENABLE, DISABLE } EXIT to
-          control the client's access to this feature.
+          control the client's accesss to this feature.
 
    REMOTE MKDIR directory-name
           Tells the client to ask the server to create a directory with
@@ -11119,8 +11119,8 @@ SET HOST /PTY {sh -c "grep somestring *.txt"}
    When attempting to execute a REMOTE RMDIR, the server can remove only a
    single directory, not an entire sequence or tree. The system service
    that is called to remove the directory generally requires not only that
-   the server process has write delete access, but also that the directory
-   contain no files.
+   the server process has write delete accesss, but also that the
+   directory contain no files.
 
    In the future, a REMOTE RMDIR /RECURSIVE command (and the accompanying
    protocol) might be added. For now, use the equivalent REMOTE HOST
@@ -11530,7 +11530,7 @@ C-Kermit> remote directory | sort +0.22 -0.40
 
   [547]http://www.unicode.org/
 
-   and access the various online introductions, FAQs, technical reports,
+   and accesss the various online introductions, FAQs, technical reports,
    and other information. For greater depth, order the latest version of
    the published Unicode Standard. The following overview contains a great
    many oversimplifications and perhaps an opinion or two.
@@ -11598,7 +11598,7 @@ C-Kermit> remote directory | sort +0.22 -0.40
    bytes in UCS-2 text pose problems for current applications and
    transmission methods. And to make matters worse, different hardware
    platforms store UCS-2 characters in different byte order. Thus a UCS-2
-   file transferred by FTP (or accessed via NFS, etc) between two
+   file transferred by FTP (or accesssed via NFS, etc) between two
    computers with different architecture might have its bytes in the wrong
    order (or worse; see [549]Section 6.6.5.1 ).
 
@@ -11676,7 +11676,7 @@ C-Kermit> remote directory | sort +0.22 -0.40
    storage. Any officially sanctioned method of doing this is called a UCS
    Transformation Format, or UTF. One such method, called UTF-16, is
    essentially identical with UCS-2 except that it designates certain code
-   values as "escape sequences" (called surrogate pairs) to access
+   values as "escape sequences" (called surrogate pairs) to accesss
    characters in other planes without having to use full UCS-4. We won't
    discuss UTF-16 further here, since at the moment there are no other
    planes. Several other UTF's (such as UTF-1, UTF-2, and UTF-7) have
@@ -11691,7 +11691,7 @@ C-Kermit> remote directory | sort +0.22 -0.40
    conversion between ASCII and UTF-8 is no conversion at all, and
    applications or platforms (such as Plan 9 from Bell Labs) that use
    UTF-8 "for everything" can still run traditional ASCII-only
-   applications and be accessed from them. In particular, unlike UCS-2,
+   applications and be accesssed from them. In particular, unlike UCS-2,
    ASCII characters are not padded with NUL bytes. But also unlike UCS-2,
    there is no transparency for Latin-1 or any other non-ASCII character
    set. Every non-ASCII UCS-2 character is represented by a sequence of 2
@@ -12092,7 +12092,7 @@ C-Kermit> remote directory | sort +0.22 -0.40
 
    UTF-8 was first used in Plan 9 and soon will be available in Linux. It
    will probably spread from there (Unicode in some form is, of course,
-   also used in Windows NT, but only internally -- not for access from
+   also used in Windows NT, but only internally -- not for accesss from
    outside).
 
    To use UTF-8 or any other character set that uses 8-bit bytes in your
@@ -12137,7 +12137,7 @@ C-Kermit> remote directory | sort +0.22 -0.40
    stated without doubt that C-Kermit's key mapping will not work for
    UTF-8 values, since (a) the key map is indexed by 8-bit byte values and
    (b) C-Kermit reads keystrokes a byte at a time (these comments do not
-   apply to K95, which has direct access to the keyboard and can read
+   apply to K95, which has direct accesss to the keyboard and can read
    "wide" keycodes and uses them to index a "wide" keymap).
 
    Restrictions: As noted, the CONNECT command does not support UCS-2 as a
           break characters unless you put them in the include list.
           Suppose, for example, you have a file in which each line is a
           Tab-separated list of words, numbers, or phrases that might
-          contain puncuation, special characters like $ and @, 8-bit bit
+          contain punctuation, special characters like $ and @, 8-bit bit
           characters, etc (like something that might have been exported
           from a spreadsheet or database), and you want to split only on
           Tab; here is a way (\m(line) is a line read from the file):
@@ -13319,7 +13319,7 @@ while true {
   [a b c d e f g h i j k l m n o p q r s t u v w x y z]
 
    Note that \%* can not be used at top level, since Kermit does not have
-   access to the raw command line (only to its elements separately, after
+   accesss to the raw command line (only to its elements separately, after
    they have been processed by the shell and the C library).
 
    C-Kermit 7.0 also adds a SHIFT command:
@@ -14383,7 +14383,7 @@ while true {
    "file:index", or "file.index", and the code above would have worked
    just as well (with the corresponding syntax adjustments). But to be
    able to use an associative array in a program after the array is built,
-   we need a method of accessing all its elements without knowing in
+   we need a method of accesssing all its elements without knowing in
    advance what they are. That's where the chosen notation comes in.
 
    First of all, any macro name that ends with "<xxx>" (where "xxx" is any
@@ -14427,7 +14427,7 @@ while true {
           .max  := \&b[\%i]
       }
   }
-  echo Most popular file: \m(name), accesses: \m(max)
+  echo Most popular file: \m(name), accessses: \m(max)
 
    This lists the files and counts and then announces which file has the
    highest count.
@@ -14871,7 +14871,7 @@ while true {
    contain the command-line arguments, if any, that appear after "--" or
    "=", if any. This array is saved and restored around macro calls;
    recall that inside macros it contains the macro argument vector
-   (allowing you to access arguments programmatically, and to have more
+   (allowing you to accesss arguments programmatically, and to have more
    than 9 of them).
 
    At top level, notice the difference between the \&@[] and \&_[] arrays.
@@ -16721,7 +16721,7 @@ COVER   "COS" is a misprint.  There is no COS.  Pretend it says "SCO" or "VOS".
 
 440     Change "set terminal byteszie" to "set terminal bytesize".
         Change "input Password:" to "input 10 Password".
-448     Franchise script: "access line" should be "access \m(line)".
+448     Franchise script: "accesss line" should be "accesss \m(line)".
 453     There are two incorrectly coded IF statements in the DELIVER macro
         definition.  Replace both occurrences of "if > \%1 \%3 {" with
         "xif > \%i \%3 {" (replace "if" by "xif" and "\%1" with "\%i").
@@ -16821,7 +16821,7 @@ APPENDIX V. ADDITIONAL COPYRIGHT NOTICES
 /*                                                                           */
 /*              Copyright (c) 1995 by Oy Online Solutions Ltd.               */
 /*                                                                           */
-/*   Distribution of this source code is strictly forbbidden. Use of this    */
+/*   Distribution of this source code is strictly forbidden. Use of this    */
 /*   source code is granted to the University of Columbia C-Kermit project   */
 /*   to be distributed in binary format only. Please familiarize yourself    */
 /*   with the accompanying LICENSE.P file.                                   */
@@ -16962,7 +16962,7 @@ APPENDIX V. ADDITIONAL COPYRIGHT NOTICES
 
    The license and distribution terms for any publically available version
    or derivative of this code cannot be changed. i.e. this code cannot
-   simply be copied and put under another distrubution license [including
+   simply be copied and put under another distribution license [including
    the GNU Public License.]
 
    The reason behind this being stated in this direct manner is past
index 38c6fdd..7aae91a 100644 (file)
@@ -130,7 +130,7 @@ ADDITIONAL FILES
           form as [44]ckcplm.txt.
 
    [45]iksd.html
-          Internet Kermit Service Aministrators Guide for Unix.
+          Internet Kermit Service Administrators Guide for Unix.
 
    [46]skermit.html
           C-Kermit as an SSH Subsystem (SFTP server replacement).
@@ -406,7 +406,7 @@ CONTENTS
           + Fixed modem-type aliases to not take precedence over real
             names.
           + Fixed funny treatment of doublequotes by ECHO command.
-          + Enabled SET SESSION-LOG for VMS and other non-UNIX platorms.
+          + Enabled SET SESSION-LOG for VMS and other non-UNIX platforms.
           + Fixed changing direction in command history buffer.
           + Fixed handling of IKSD URLs.
           + Made sure DELETE prints a message if it got any errors.
@@ -497,8 +497,8 @@ CONTENTS
             parameters.
           + We now make every attempt to not write passwords to the
             debug.log.
-          + New Certficate Authority certificates file, includes the
-            Kermit Project at Columbia University so you can access our
+          + New Certificate Authority certificates file, includes the
+            Kermit Project at Columbia University so you can accesss our
             IKSD securely.
           + Secure targets improved and better documented in Unix
             makefile.
@@ -526,7 +526,7 @@ CONTENTS
           + New command: SET TERMINAL AUTODOWNLOAD { ..., ERROR { STOP,
             CONTINUE } }
           + New command: HELP FIREWALL.
-          + SET MODEM HANGUP-METHOD DTR added as synomym for RS232-SIGNAL
+          + SET MODEM HANGUP-METHOD DTR added as synonym for RS232-SIGNAL
           + Support for secure URL protocols added: telnets:, ftps:,
             https:.
 
@@ -701,7 +701,7 @@ CONTENTS
                  timezone set.
                o Allow for alternative server interpretations of [M]MPUT
                  /UNIQUE.
-               o SET FTP ANONOMOUS-PASSWORD lets you specify the default
+               o SET FTP ANONYMOUS-PASSWORD lets you specify the default
                  anonymous password.
                o Allow "GET /RECURSIVE path/file" to force local
                  subdirectory creation.
@@ -1116,7 +1116,7 @@ set host /pipe ssh -e none -l olga -T -s hq.xyzcorp.com kermit
    PUT), they apply only to that command.
 
    /USER:name
-          To be used in case a page requires a username for access. The
+          To be used in case a page requires a username for accesss. The
           username is sent with page requests. If it is given with the
           OPEN command it is saved until needed. If a username is included
           in a URL, it overrides the username given in the switch.
@@ -1127,7 +1127,7 @@ set host /pipe ssh -e none -l olga -T -s hq.xyzcorp.com kermit
           performed securely on HTTPS connections.
 
    /PASSWORD:text
-          To be used in case a web page requires a password for access.
+          To be used in case a web page requires a password for accesss.
           The password is sent with page requests. If it is given with the
           OPEN command it is saved until needed. If a password is given in
           a URL, it overrides the one given here. CAUTION: (same as for
@@ -1261,7 +1261,7 @@ set host /pipe ssh -e none -l olga -T -s hq.xyzcorp.com kermit
    file or directory lists, no way to transfer file groups by using
    wildcard notation, etc, and therefore no good way to (say) fetch all
    pages, descend through subdirectories, perform automatic updates, etc.
-   There is no assurrance a connection will stay open and, as noted, there
+   There is no assurance a connection will stay open and, as noted, there
    is no provision for data conversion between unlike platforms. The
    data's MIME headers can be used for postprocessing.
 
@@ -1313,7 +1313,7 @@ set host /pipe ssh -e none -l olga -T -s hq.xyzcorp.com kermit
   }
 
    Note that the "Date:" item is the current date and time; the
-   "Last-Modifed:" item is the file's modification date and time. An
+   "Last-Modified:" item is the file's modification date and time. An
    example showing how to use this information is presented in
    [190]Section 8.13.7.
 
@@ -1380,7 +1380,7 @@ set host /pipe ssh -e none -l olga -T -s hq.xyzcorp.com kermit
           sent to the server.
 
    Kerberos 5:
-          Instead of using X.509 certifcates, Kerberos 5 can be used to
+          Instead of using X.509 certificates, Kerberos 5 can be used to
           perform the authentication and key exchange. In this situation,
           there is mutual authentication between the client and server.
           The Kerberos 5 principal is used by the server to look up the
@@ -1540,7 +1540,7 @@ set host /pipe ssh -e none -l olga -T -s hq.xyzcorp.com kermit
 
   http www.columbia.edu -g kermit/index.html
 
-   If you need to access a website for which a username and password are
+   If you need to accesss a website for which a username and password are
    required, you can supply them on the command line with -u and -P. If
    you include a username but omit the password, Kermit prompts you for
    it:
@@ -2034,7 +2034,7 @@ set host /pipe ssh -e none -l olga -T -s hq.xyzcorp.com kermit
           the server does support accounts, the account is accepted if it
           is valid and rejected if it is not. The account might be used
           for charging purposes or it might be a secondary password, or it
-          might be used for any other purpose, such as an access password
+          might be used for any other purpose, such as an accesss password
           for a particular disk. Servers that support accounts might or
           might not allow or require the account to be sent prior to
           login; usually it is sent after login, if at all. Synonym:
@@ -2129,8 +2129,8 @@ bye                                    ; Log out and disconnect
    In the previous section, you can see several examples of traditional
    insecure authentication: username and password sent across the network
    in clear text. Of course this is bad practice on at least two counts:
-   (1) storing passwords in files (such as script files) gives access to
-   the target systems to anybody who can obtain read access to your
+   (1) storing passwords in files (such as script files) gives accesss to
+   the target systems to anybody who can obtain read accesss to your
    scripts; and (2) sending this information over the network leaves it
    open to interception by network sniffers or compromised hosts.
 
@@ -2138,7 +2138,7 @@ bye                                    ; Log out and disconnect
    servers are beginning to appear that offer secure forms of
    authentication, in which no information is sent over the network that
    would allow anyone who intercepts it to usurp your identity and gain
-   your access rights.
+   your accesss rights.
 
    Kermit provides an equivalent form of FTP security for each type of
    IETF standard security implemented in Telnet. These include
@@ -2193,7 +2193,7 @@ bye                                    ; Log out and disconnect
    SET FTP CREDENTIAL-FORWARDING { ON, OFF }
           Tells whether end-user credentials are to be forwarded to the
           server if supported by the authentication method (GSSAPI-KRB5
-          only). This is often required to allow access to distributed
+          only). This is often required to allow accesss to distributed
           file systems (e.g. AFS.)
 
    SET FTP DATA-PROTECTION-LEVEL { CLEAR, CONFIDENTIAL, PRIVATE, SAFE }
@@ -2784,7 +2784,7 @@ bye                                    ; Log out and disconnect
    directory to the server's /tmp directory. This works only if the server
    uses the same directory notation that you used in the as-name AND the
    given directory already exists on the server AND if you have write
-   access to it.
+   accesss to it.
 
    Use caution when uploading from a case-sensitive file system, such as
    UNIX, to a file system that is not case sensitive, such as Windows or
@@ -2886,7 +2886,7 @@ C-Kermit>ftp put ? Filename, or switch, one of the following:
           plus all directories beneath it, including empty directories,
           replicating the directory structure on the server. No special
           capabilities are required in the server, but of course your
-          login ID on the server must have the appropriate access and
+          login ID on the server must have the appropriate accesss and
           permission to create directories. Recursive PUTs work not only
           between like platforms (e.g. UNIX to UNIX) but also between
           unlike ones (e.g. UNIX to VMS or Windows), in which case
@@ -2987,7 +2987,7 @@ C-Kermit>ftp put ? Filename, or switch, one of the following:
           Tells Kermit to ask the server to rename each file according to
           the given template as soon as, and only if, it has been received
           completely and successfully. The template works as in /AS-NAME.
-          Requires write and rename access on the server, so doesn't
+          Requires write and rename accesss on the server, so doesn't
           usually work with (e.g.) anonymous uploads to public incoming
           areas where the permissions don't allow renaming. Examples:
 
@@ -3480,7 +3480,7 @@ C-Kermit>ftp put ? Filename, or switch, one of the following:
 
    /DELETE
           Each file that is downloaded successfully is to be deleted from
-          the server. Requires the appropriate file access rights on the
+          the server. Requires the appropriate file accesss rights on the
           server.
 
    /SERVER-RENAME-TO:template
@@ -3638,7 +3638,7 @@ C-Kermit>ftp put ? Filename, or switch, one of the following:
 
    A possibly unique feature of Kermit's FTP client is its ability to
    convert character sets when transferring files in text mode,
-   independent of the capabilites of the FTP server, as well as to
+   independent of the capabilities of the FTP server, as well as to
    translate the character sets of filenames regardless of transfer mode.
    For compatibility with existing FTP clients, and because there is a
    certain performance penalty, Kermit won't do this unless you ask for
@@ -3964,18 +3964,18 @@ C-Kermit>ftp put ? Filename, or switch, one of the following:
   REMOTE TYPE      (RTYPE)     FTP TYPE
   REMOTE EXIT      (REXIT)     FTP BYE
 
-   The commands in the right-hand column always access FTP. The commands
-   in the left column can access either Kermit protocol or FTP:
+   The commands in the right-hand column always accesss FTP. The commands
+   in the left column can accesss either Kermit protocol or FTP:
 
      * When GET-PUT-REMOTE is set to KERMIT, or to AUTO when there is no
-       FTP connection, the commands in the left-hand column access Kermit
+       FTP connection, the commands in the left-hand column accesss Kermit
        protocol, and those right-hand column are required for FTP.
      * When GET-PUT-REMOTE is set to FTP, or to AUTO when there is an
-       active FTP connection, the commands in the left-hand column access
-       the FTP connection and can not be used to access Kermit protocol.
+       active FTP connection, the commands in the left-hand column accesss
+       the FTP connection and can not be used to accesss Kermit protocol.
        In this case, if you want to be able to use both Kermit protocol
        and the FTP connection, you must SET GET-PUT-REMOTE KERMIT, and
-       then use the FTP commands in the right-hand column to access the
+       then use the FTP commands in the right-hand column to accesss the
        FTP connection.
 
    Note that file-management commands such as DIRECTORY, DELETE, CD, PWD,
@@ -4186,7 +4186,7 @@ C-Kermit>ftp put ? Filename, or switch, one of the following:
    during interactive use. However, if you wish to use the shortcuts in a
    script, you can do it this way (error handling omitted for brevity):
 
-  local \%t                       ; Declare a local temporary veriable
+  local \%t                       ; Declare a local temporary variable
   assign \%t \v(ftp_getputremote) ; Save current FTP GET-PUT-REMOTE setting
   set ftp get-put-remote ftp      ; Choose FTP orientation
   ftp xyzcorp.com /anonymous      ; Open an FTP connection
@@ -4240,9 +4240,9 @@ C-Kermit>ftp put ? Filename, or switch, one of the following:
 
 3.11. Advanced FTP Protocol Features
 
-   The remainder of the FTP documention (through the end of Section 3) is
-   new to C-Kermit 8.0.206, but we leave it in black to prevent headaches.
-   Except for titles.
+   The remainder of the FTP documentation (through the end of Section 3)
+   is new to C-Kermit 8.0.206, but we leave it in black to prevent
+   headaches. Except for titles.
      * [364]TERMINOLOGY
      * [365]FEATURE NEGOTIATION
      * [366]USING MGET: NLST VERSUS MLSD
@@ -4354,12 +4354,12 @@ C-Kermit>ftp put ? Filename, or switch, one of the following:
    FTP SIZE filename
           Sends a SIZE directive to the server for the given file. The
           filename must not contain wildcards. The server responds with an
-          error if the file can't be found, is not accessible, or the SIZE
-          directive is not supported, otherwise with the length of the
-          file in bytes, which Kermit displays and also makes available to
-          you in its \v(ftp_message) variable. If the directive is
-          successful, Kermit (re-)enables it for internal use by the GET
-          and MGET directives on this connection.
+          error if the file can't be found, is not accesssible, or the
+          SIZE directive is not supported, otherwise with the length of
+          the file in bytes, which Kermit displays and also makes
+          available to you in its \v(ftp_message) variable. If the
+          directive is successful, Kermit (re-)enables it for internal use
+          by the GET and MGET directives on this connection.
 
    FTP MODTIME filename
           Works just like the SIZE directive except it sends an MDTM
@@ -4545,7 +4545,7 @@ mget /mlsd foo.*
     mget /match:*.txt         NLST           MLSD
     mget /match:*.txt foo     NLST foo       MLSD foo
 
-   In other words, the pattern is always intepreted locally unless MGET
+   In other words, the pattern is always interpreted locally unless MGET
    uses NLST and no /MATCH switch was given.
 
 3.11.4. Examples
@@ -4958,7 +4958,7 @@ mget /nlst t[1234].h
    Kermit 95, the display character-set is Unicode, perhaps converted to
    your current console code page; in other versions of C-Kermit, it is
    your current file character-set. Thus if you have the following set
-   appriately:
+   appropriately:
 
   SET FILE CHARACTER-SET (necessary in Unix but not K95)
   SET FILE DEFAULT 7BIT CHARACTER-SET
@@ -5213,7 +5213,7 @@ mget /nlst t[1234].h
 
 6.6. Arrow Keys
 
-   As of version 8.0.201, C-Kermit on most platforms lets you access the
+   As of version 8.0.201, C-Kermit on most platforms lets you accesss the
    command history buffer with arrow keys, just as you always could with
    control characters. The restrictions are:
 
@@ -5224,7 +5224,7 @@ mget /nlst t[1234].h
 
    This change was made to facilitate command recall in Linux-based PDAs
    that don't have a Control key, or at least not one that's easily (or
-   always) accessible, such as the Sharp Zaurus SL5500.
+   always) accesssible, such as the Sharp Zaurus SL5500.
 
    [ [391]Top ] [ [392]Contents ] [ [393]C-Kermit Home ] [ [394]Kermit
    Home ]
@@ -5450,7 +5450,7 @@ mget /nlst t[1234].h
 
    L-commands
           When Kermit has a connection to a Kermit or FTP server, file
-          managment commands such as CD, DIRECTORY, and DELETE might be
+          management commands such as CD, DIRECTORY, and DELETE might be
           intended for the local computer or the remote server. C-Kermit
           8.0.200 and earlier always executes these commands on the local
           computer. If you want them executed by the remote server, you
@@ -5560,7 +5560,7 @@ mget /nlst t[1234].h
           file-transfer and management commands. The default LOCUS is
           AUTO, which means we switch to REMOTE whenever an FTP connection
           is made, and to LOCAL whenever a non-FTP connection is made, and
-          switch back accordingly whenever a connnection is closed. So by
+          switch back accordingly whenever a connection is closed. So by
           default, Kermit behaves in its traditional manner unless you
           make an FTP connection, in which case it acts like a regular FTP
           client (but better :-)   LOCUS applies to the following
@@ -5570,9 +5570,9 @@ mget /nlst t[1234].h
    CD (CWD)      RCD          LCD          Change (Working) Directory
    CDUP          RCDUP        LCDUP        CD Up
    PWD           RPWD         LPWD         Print Working Directory
-   DIRECTORY     RDIR         LDIR         Request a directory listinga
+   DIRECTORY     RDIR         LDIR         Request a directory listing
    DELETE        RDEL         LDEL         Delete (a) file(s)
-   RENEME        RREN         LREN         Rename a file
+   RENAME        RREN         LREN         Rename a file
    MKDIR         RMKDIR       LMKDIR       Create a directory
    RMDIR         RRMDIR       LRMDIR       Remove a directory
 
@@ -5606,7 +5606,7 @@ mget /nlst t[1234].h
 
    SET ROOT directory
           Like UNIX chroot, without requiring privilege. Sets the root for
-          file access, does not allow reference to or creation of files
+          file accesss, does not allow reference to or creation of files
           outside the root, and can't be undone.
 
    SET SEND PERMISSIONS { ON, OFF }
@@ -6098,7 +6098,7 @@ ond.
 
    The following new or improved built-in functions are available:
 
-  \fcmdstack()            Allows programmatic access to the command stack.
+  \fcmdstack()            Allows programmatic accesss to the command stack.
   \fcvtdate()             [448]Section 8.13, format options added
   \fdelta2secs()          [449]Section 8.13
   \fdostounixpath(s1)     Converts a DOS filename to Unix format.
@@ -6302,7 +6302,7 @@ ond.
 
 8.7.3. The \fcmdstack() Function
 
-   The new \fcmdstack() function gives access to the command stack:
+   The new \fcmdstack() function gives accesss to the command stack:
 
    \fcmdstack(n1,n2)
           Arguments: n1 is the command stack level. If omitted, the
@@ -6507,7 +6507,7 @@ ond.
    waits up to 8 seconds for one of the words "one", "two", or "three" to
    arrive. Words can be grouped to indicate targets that contain spaces:
 
-  MINPUT 8 nineteeen twenty "twenty one"
+  MINPUT 8 nineteen twenty "twenty one"
 
    And of course you can also use variables in place of (or as part of)
    the target names:
@@ -6835,7 +6835,7 @@ ond.
    (0-23), mm the minute (0-59), ss the second (0-59), each with leading
    zero if less than the field width. The date and time can be separated
    by a space, an underscore, a colon, or the letter T. The time is in
-   24-hour format. Thus the various quantites are at the following fixed
+   24-hour format. Thus the various quantities are at the following fixed
    positions:
 
 Position  Contents
@@ -7230,7 +7230,7 @@ Position  Contents
   11-Aug-2001 12:34:56 -0800          (20010811 16:34:56 -- UTC Offset)
   11-Aug-2001 12:34:56 -08:00         (20010811 04:34:56 -- Delta time)
 
-   If you give a time followed by a modifer that starts with a + or -
+   If you give a time followed by a modifier that starts with a + or -
    sign, how does Kermit know whether it's a UTC offset or a delta time?
    It is treated as a UTC offset if the sign is followed by exactly four
    decimal digits; otherwise it is a delta time. Examples (for USA Eastern
@@ -7423,7 +7423,7 @@ Position  Contents
    5 displays the result.
 
    Here's a script that opens a web page, gets its headers into an array,
-   scans the array for the "Last-Modified:" header, and inteprets it:
+   scans the array for the "Last-Modified:" header, and interprets it:
   http open www.columbia.edu
   if fail stop 1 HTTP OPEN failed
   http /array:a head index.html /dev/null
@@ -7498,7 +7498,7 @@ Position  Contents
    displaying summary results. You can do this by defining a macro named
    ON_CTRLC. When Ctrl-C is detected, and a macro with this name is
    defined, Kermit executes it from the current command level, thus giving
-   it full access to the environment in which the interruption occurred,
+   it full accesss to the environment in which the interruption occurred,
    including local variables and open files. Only when the ON_CTRLC macro
    completes execution is the command stack rolled back to top level.
 
@@ -7867,7 +7867,7 @@ def newarea {
           ON means always print the value; OFF means never print it.
 
    In any case, the value of the most recent S-Expression (and the
-   S-Expression itself) may be accessed programmatically through the
+   S-Expression itself) may be accesssed programmatically through the
    following variables:
 
    \v(sexpression)
@@ -8719,7 +8719,7 @@ def newarea {
    This causes the string "abcdefghijklmnopqrstuvwxyz" to be sent
    literally to the LENGTH macro. Kermit, like Lisp, also offers a
    shortcut for QUOTE, that lets us quote a word by prefixing it with a
-   single quote (') character, also called apostophe (ASCII 39):
+   single quote (') character, also called apostrophe (ASCII 39):
 
   (length 'abcdefghijklmnopqrstuvwxyz)
   26
@@ -8990,7 +8990,7 @@ def newarea {
 
 9.9.1. Statistics
 
-   The following program computes statistics -- means, maxima, mimima,
+   The following program computes statistics -- means, maxima, minima,
    variance, standard deviation, and correlation -- from data stored in
    parallel arrays, \&x[] and \&y[], which can contain any mixture of
    integer and floating-point numbers: positive, negative, or zero. Array
@@ -9249,7 +9249,7 @@ def newarea {
    The new defaults work for direct connections and for most modern modems
    on most platforms, and they work much faster than "full-treatment"
    dialing. If the new defaults don't work for you, or if you need to
-   perform explicit modem configuations or interactions, then set a
+   perform explicit modem configurations or interactions, then set a
    specific modem type and use the SET MODEM and SET DIAL commands as
    documented in Using C-Kermit.
 
@@ -9284,7 +9284,7 @@ def newarea {
 
    Added in C-Kermit 8.0.201:   Rudimentary support for Caller ID, for use
    with the ANSWER command. If the modem reports Caller ID information,
-   Kermit stores it in variables that you can access after the call is
+   Kermit stores it in variables that you can accesss after the call is
    answered:
 
   \v(callid_date)   The date of the call
@@ -9325,7 +9325,7 @@ def newarea {
    Kermit presently has no built-in knowledge of the Caller ID
    capabilities or commands of the modems in its database.
 
-   Since the variables can be accessed only after the call is answered,
+   Since the variables can be accesssed only after the call is answered,
    the only way to refuse a call is to answer it, inspect the variables,
    and then hang it up if desired.
 
@@ -9476,8 +9476,8 @@ def newarea {
 14. DIALOUT FROM TELNET TERMINAL SERVERS
 
    For years, C-Kermit has supported dialing out from Telnet modem servers
-   (also called reverse terminal servers or access servers), but until now
-   there was no way for Kermit to control the communication parameters
+   (also called reverse terminal servers or accesss servers), but until
+   now there was no way for Kermit to control the communication parameters
    (speed, parity, etc) on the serial port of the terminal server; it had
    to use whatever was there.
 
@@ -9523,7 +9523,7 @@ def newarea {
 
    There are lots of faulty Kermit protocol implementations out there,
    found mainly in 3rd-party products ranging from communications software
-   packages to file-transfer functions imbedded within devices. This topic
+   packages to file-transfer functions embedded within devices. This topic
    is covered [580]HERE for C-Kermit 7.0, but C-Kermit 8.0 adds some
    additional tricks.
 
index 51a0694..09f7c8b 100644 (file)
    [3]Home [4]Kermit 95 [5]C-Kermit [6]Scripts [7]Current [8]New [9]FAQ
    [10]Support
 
-          [11]Table of platforms   [12]Book: Using C-Kermit   [13]Download
+
+      [11]CLICK HERE to read about some of these items.
+
+          [12]Table of platforms   [13]Book: Using C-Kermit   [14]Download
                                                               C-Kermit 9.0
 
 C-Kermit 9.0 Update Notes
 
-     * [14]Large Files
-     * [15]How to Test Large-File Transfer
-     * [16]Arithmetic with Large Integers
-     * [17]FORCE-3 Packet Protocol
-     * [18]Variable Evaluation
-
-     * [19]The RENAME Command You Always Wanted
-     * [20]Other New Features
-     * [21]Incompatibilities
-     * [22]What's Not In C-Kermit 9.0
-     * [23]And a Loose End
-
-     * [24]Demonstration: Secure POP mail fetcher
-     * [25]Demonstration: HP Switch Configuration Backup
-     * [26]Demonstration: HP iLO Blade Configuration
-     * [27]Demonstration: IBM/Rolm/Siemens CBX Management
-     * [28]Demonstration: CSV and TSV Files
-     * [29]Demonstration Scripts for Webmasters
-
-   This is the third supplement to [30]Using C-Kermit, Second Edition. I
+   Note: C-Kermit 9.0.301 contains a correction that applies only to
+   Solaris 10 and 11.
+     * [15]Large Files
+     * [16]How to Test Large-File Transfer
+     * [17]Arithmetic with Large Integers
+     * [18]FORCE-3 Packet Protocol
+     * [19]Variable Evaluation
+
+     * [20]The RENAME Command You Always Wanted
+     * [21]Other New Features
+     * [22]Incompatibilities
+     * [23]What's Not In C-Kermit 9.0
+     * [24]And a Loose End
+
+     * [25]Demonstration: Secure POP mail fetcher
+     * [26]Demonstration: HP Switch Configuration Backup
+     * [27]Demonstration: HP iLO Blade Configuration
+     * [28]Demonstration: IBM/Rolm/Siemens CBX Management
+     * [29]Demonstration: CSV and TSV Files
+     * [30]Demonstration Scripts for Webmasters
+
+   This is the third supplement to [31]Using C-Kermit, Second Edition. I
    apologize for the scattered nature of the information and I hope I can
    organize it and gather it all into one place for easy and definitive
-   reference some day. It's a big job and it depends on the demand. For
-   the time being the definitive reference and introduction is the book
-   (which is now available also in a [31]Kindle Edition), plus the
-   [32]C-Kermit 7.0 update, [33]C-Kermit 8.0 update, and now this one.
-   Plus tons of other web pages on this site, sample script programs, and
-   so on.
+   reference some day. It's a big job so it depends on the demand. For the
+   time being the definitive reference and introduction is the book (which
+   is now available also in a [32]Kindle Edition), plus the [33]C-Kermit
+   7.0 update, [34]C-Kermit 8.0 update, and now this one. Plus tons of
+   other web pages on this site, sample script programs, and so on.
 
    In version 6.0, C-Kermit was a pretty powerful and flexible
    communication program with scripting capabilities. By version 9.0, I'd
    like to think of it more as a scripting language with built-in
    communications. You can get an idea of the kinds of programs you can
-   write in Kermit language [34]here. You can develop programs quickly
+   write in Kermit language [35]here. You can develop programs quickly
    because it's an interactive program, not a compiler. The scripting
    language is the command language. Kind of like the Unix shell but
    "somewhat" less cryptic, including concepts not only from C but from
    PL/I, Snobol, LISP, and Smalltalk. The language itself is built upon
-   the command language of the much-loved [35]DECSYSTEM-20 from the 1970s
+   the command language of the much-loved [36]DECSYSTEM-20 from the 1970s
    and 80s, the Clipper Ship of the Text Era. (Text is not a bad word.
    Those of us who can touch-type and who are proficient in text-based
    computing environments like Unix shell or VMS DCL are likely to be
    orders of magnitude more productive than users of GUIs.)
 
-     - Frank da Cruz   [36]fdc@columbia.edu
+   Thanks to (at least) Jeff Altman, William Bader, Ian Beckwith, Nelson
+   Beebe, Gerry Belanger, Joop Boonen, Rob Brown, Christian Corti, John
+   Dunlap, Peter Eichhorn, Carl Friedberg, Terry Kennedy, Günter Knauf,
+   Jason Lehr, Arthur Marsh, Lewis McCarthy, Gary Mills, Jonathan Reams,
+   Mike Rechtman, Mark Sapiro, Steven Schweda (SMS), Kinjal Shah, Michael
+   Sokolov, Andy Tanenbaum, Seth Theriault, Zach A. Thomas, Martin
+   Vorländer, and Eric Weaver for assistance, and to Hewlett-Packard
+   Company for support.
+
+     - Frank da Cruz   [37]fdc@columbia.edu, 30 June 2011
+
+   P.S. It occurred to me just before the end of the day that maybe I
+   should back up the Kermit website on DVD, just in case. Using
+   [38]Kermit 95 on the desktop over an SSH connection to the Unix file
+   system where the website resides, I made a fresh directory on the PC,
+   CD'd to it, and on Unix cd'd to the Website directory, and told
+   C-Kermit 9.0 to:
+
+C-Kermit> send /recursive /dotfiles /nobackup *
+
+   and it re-created the website directory tree in the PC directory, text
+   files correctly converted to Windows format and binary files correctly
+   left as-is. The /dotfiles switch means to include files such as
+   .htaccess whose names start with a dot (period), and the /nobackup
+   switch means to skip backup files created by EMACs (such as
+   index.html.~243~). And then I did the same with the FTP sites, about
+   8GB in all. Watching the file-transfer display was kind of like having
+   30 years of my life flash before my eyes in a few minutes. Then I
+   copied the two directories to DVD (the FTP site had to split over 2
+   DVDs). The whole operation took under half an hour. The directory tree
+   on the CD is directly usable in Windows, Unix, or any other operating
+   system (unlike if I had made, say, a gzipped tar archive or a zip
+   archive). I believe that, to this day, Kermit is the only software that
+   can do this. If someday I have to upload from these DVDs to Unix, VMS,
+   or any other operating system, it can be done exactly the same way,
+   with any necessary conversions on text files done automatically, and
+   binary files left intact.
 
 What's New in General
 
    Very briefly, the major items:
-     * [37]Open Source license.
-     * [38]64-bit file access and transfer and 64-bit integer arithmetic
+     * [39]Open Source license.
+     * [40]64-bit file accesss and transfer and 64-bit integer arithmetic
        on most common platforms.
-     * Support for recent releases of Linux, Mac OS X, *BSD, etc ([39]see
+     * Support for recent releases of Linux, Mac OS X, *BSD, etc ([41]see
        table).
      * Support for newer OpenSSL releases up to and including 1.0.0d
-       ([40]see table).
-     * [41]Strengthened error checking for file transfer under extremely
+       ([42]see table).
+     * [43]Strengthened error checking for file transfer under extremely
        harsh conditions.
-     * [42]Simplified semantics for variables used in scripts.
-     * Super-handy and useful [43]extensions to the RENAME command.
-     * Many other scripting improvements including support for reading and
-       writing [44]CSV and TSV files.
-     * [45]MIME character-set names are now recognized.
-     * Improved logging and debugging (see demo [46]here).
-     * Lots more described or listed below, and [47]here.
+     * [44]Simplified semantics for variables used in scripts.
+     * Super-handy [45]extensions to the RENAME command.
+     * Other scripting improvements including support for reading and
+       writing [46]CSV and TSV files.
+     * [47]MIME character-set names are now recognized.
+     * Improved logging and debugging (see demo [48]here).
+     * Lots more described or listed below, and [49]here.
 
 Open Source License
 
-   C-Kermit 9.0 has the [48]Revised 3-Clause BSD License, an open source
-   license approved by OSI, the [49]Open Source Initiative.
+   C-Kermit 9.0 has the [50]Revised 3-Clause BSD License, an open source
+   license approved by OSI, the [51]Open Source Initiative.
 
 Large Files
 
@@ -92,11 +132,11 @@ Large Files
    platforms that support them. A "large file" is one whose size is
    greater than 2^31-1 (2,147,483,647) bytes (2GB-1); that is, one whose
    size requires more than 31 bits to represent. Before now, Kermit was
-   able to access such files only on 100% 64-bit platforms such as Digital
-   Unix, later known as Tru64 Unix. In the new release, Kermit takes
-   advantage of the X/Open Single UNIX Specification Version 2 (UNIX 98)
-   Large File Support (LFS) specification, which allows 32-bit platforms
-   to create, access, and manage files larger than 2GB.
+   able to accesss such files only on 100% 64-bit platforms such as
+   Digital Unix, later known as Tru64 Unix. In the new release, Kermit
+   takes advantage of the X/Open Single UNIX Specification Version 2 (UNIX
+   98) Large File Support (LFS) specification, which allows 32-bit
+   platforms to create, accesss, and manage files larger than 2GB.
 
    Accommodating large files required code changes in many modules,
    affecting not only file transfer, but also file management functions
@@ -104,7 +144,7 @@ Large Files
    interface itself to allow entry and display of large numbers. All this
    had to be done in a way that would not affect pure 32-bit builds on
    platforms that do not support large files. Large file support is
-   summarized in the [50]Table of Platforms; entries in Yellow (32-bit
+   summarized in the [52]Table of Platforms; entries in Yellow (32-bit
    builds that support 64-bit integers) and Green (64-bit builds) support
    large files.
 
@@ -126,7 +166,7 @@ How to Test Large-File Transfer
      * If you don't have such a file or there is not sufficient disk space
        for such a file, you can create a special kind of file that takes
        up one block on the disk but appears to be 4.3GB long by compiling
-       and running [51]THIS C PROGRAM on Linux, Solaris, HP-UX, or other
+       and running [53]THIS C PROGRAM on Linux, Solaris, HP-UX, or other
        Unix platform that supports large files. Kermit or FTP or any other
        file transfer program will transfer the result (BIGFILE) in such a
        way as to actually put 4.3GB (or other desired size; see source) on
@@ -154,14 +194,14 @@ Arithmetic with Large Integers
    Because large file support requires the availability of a 64-bit signed
    integer data type, other aspects of C-Kermit were adapted to use it
    too, most notably Kermit's algebraic expression evaluator and its
-   [52]S-Expression interpreter, on all platforms that support large files
-   (those listed as 64 or 32/64 in the Word column of the [53]table). In
+   [54]S-Expression interpreter, on all platforms that support large files
+   (those listed as 64 or 32/64 in the Word column of the [55]table). In
    fact, every Kermit command that parses a number in any field can now
    parse a large number on those platforms.
 
    S-Expressions can now be forced to operate with integers only, without
    floating-point conversion or having to explicitly truncate each result;
-   as an example. see the revised [54]Easter date calculation script.
+   as an example. see the revised [56]Easter date calculation script.
 
 FORCE-3 Packet Protocol
 
@@ -177,22 +217,22 @@ FORCE-3 Packet Protocol
 
    But the Internet is not everywhere, and not all modems are
    error-correcting. Perhaps the most difficult trial so far for Kermit or
-   any other protocol is the [55]EM-APEX project, in which floats are
+   any other protocol is the [57]EM-APEX project, in which floats are
    dropped into the ocean from an aircraft into the path of a hurricane;
    these floats dive into the water measuring current, temperature, and
-   salinity at different depths and then surfacing to phone home, sending
+   salinity at different depths and then surface to phone home, sending
    the data to land stations using Kermit protocol over
-   non-error-correcting 300bps [56]Iridium satellite modems, with high
-   seas and winds battering the floats and heavy ([57]sometimes
+   non-error-correcting 300bps [58]Iridium satellite modems, with high
+   seas and winds battering the floats and heavy ([59]sometimes
    electrical) storms between the modem and the satellite.
 
    Because of the transmission speed and long distances involved, the
    transfers were very slow. The Kermit software in the floats is
-   [58]Embedded Kermit, which did not implement sliding windows, which
+   [60]Embedded Kermit, which did not implement sliding windows, which
    would have sped up the flow considerably. John Dunlap, engineer at the
    University of Washington's Applied Physics Laboratory, undertook the
    task of adding sliding windows to E-Kermit. For testing, he rigged up a
-   [59]simulator in which Kermit transfers take place over a connection
+   [61]simulator in which Kermit transfers take place over a connection
    with different amounts of noise and delay. He found that occasionally,
    a transfer would appear to succeed, but the received file would be
    corrupt.
@@ -215,7 +255,7 @@ FORCE-3 Packet Protocol
    the two Kermit partners out of sync as to packet encoding and
    interpretation (the chances of two such errors producing a seemingly
    valid packet are about 1 in 6000 when using the 6-bit checksum). For
-   example the compression technique might be misnegotiated and then the
+   example, the compression technique might be misnegotiated and then the
    receiver might store incoming data without decompressing it.
 
    The solution is a new option, selected by:
@@ -253,7 +293,11 @@ FORCE-3 Packet Protocol
    FORCE-3 SET BLOCK 5 3 Optional, not negotiated. 16-bit CRC forced all
    packets.
 
-   [60]E-Kermit 1.7
+   BLANK-FREE-2 is for environments where Kermit packets are treated as
+   lines of text, and in which trailing blanks can be stripped; for
+   example, when transferring files with an IBM mainframe through a 3270
+   protocol converter.
+   [62]E-Kermit 1.7
 
 Variable Evaluation
 
@@ -275,7 +319,7 @@ Variable Evaluation
    a single letter, for example \a, \b, etc. The contributed code
    evaluated these variables recursively, meaning if the definition of a
    variable contained variable references, then these were resolved when
-   dererencing the variable, and the process would continue as deep down
+   derefencing the variable, and the process would continue as deep down
    as necessary to resolve the thing fully.
 
    This was sometimes handy, but it had one severe drawback: There was no
@@ -310,11 +354,11 @@ Variable Evaluation
    \m(name) User-defined scalar variable, evaluated one level deep.
    \$(name) An environment variable, evaluated one level deep.
    \s(name[n:m]) Compact substring notation, evaluated one level deep.
-   \fname(args...)) Built-in function with zero or more arguments.
+   \fname(args...) Built-in function with zero or more arguments.
    \\ Literal backslash
-   \N OUTPUT comand only: NUL, ASCII 0
-   \B OUTPUT comand only: BREAK
-   \L OUTPUT comand only: Long BREAK
+   \N OUTPUT command only: NUL, ASCII 0
+   \B OUTPUT command only: BREAK (250ms, for serial connections)
+   \L OUTPUT command only: Long BREAK (1.5sec, ditto)
 
    Variable names in Kermit are case-independent. The simplifications in
    the table are that the notation for decimal and octal bytes can have
@@ -324,7 +368,7 @@ Variable Evaluation
    must evaluate to, numbers (floating point numbers are truncated).
    Associative arrays are also available (dynamic arrays with arbitrary
    text as subscript), but they are really just a variation on \m()
-   variables (read about associative arrays [61]here). Also, there are
+   variables (read about associative arrays [63]here). Also, there are
    some alternative notations for compact substring notation.
 
    We didn't want to have lots of "distinguished" characters, as the UNIX
@@ -336,10 +380,10 @@ Variable Evaluation
    arguments to macros. The same is true for array elements, especially in
    contexts where they are used to return results from built-in functions
    (for example, \fsplit() used to return the elements of a
-   [62]comma-separated value list if any of the values contained
+   [64]comma-separated value list if any of the values contained
    backslashes). An even worse scenario is when macro arguments are passed
    from one macro to another; for some graphic illustrations see
-   [63]Taming the Wild Backslash - Part Deux from the [64]C-Kermit 7.0
+   [65]Taming the Wild Backslash - Part Deux from the [66]C-Kermit 7.0
    Update Notes.
 
    We can't just change how variables are evaluated because that would
@@ -413,13 +457,12 @@ test2 c:\\users\\fdc\\somefile.txt
 test2 \fliteral(c:\users\fdc\somefile.txt)
 
    C-Kermit 9.0 adds a new notation for \fliteral() which also has certain
-   advantages over it: \q(string)
-   :
+   advantages over it: \q(string):
 
 test2 \q(c:\users\fdc\somefile.txt)
 
    Since \fliteral() is a function, its argument list (the text within
-   parantheses) has special syntax of its own, in which commas and braces
+   parentheses) has special syntax of its own, in which commas and braces
    are treated specially and introduce another set of quoting problems.
    \q(string) doesn't have these problems. The only consideration is that
    parentheses must be balanced or else quoted (preceded by backslash), or
@@ -430,7 +473,7 @@ test2 \q(c:\users\fdc\somefile.txt)
    above.
 
    SET COMMAND VARIABLE-EVALUATION SIMPLE is a big change and might have
-   repurcussions that didn't show up in the initial tests; a lot more
+   repercussions that didn't show up in the initial tests; a lot more
    testing is needed.
 
    On the topic of variables, let's summarize in one place the ways in
@@ -475,7 +518,7 @@ test2 \q(c:\users\fdc\somefile.txt)
    DO name arguments name arguments When invoking a macro with a DO
    command (or an implied one), the arguments are evaluated, then assigned
    to \%1, \%2, etc, and the macro's name to \%0.
-   (SETQ name value)   Kermit also includes a mini-[65]LISP intpreter
+   (SETQ name value)   Kermit also includes a mini-[67]LISP interpreter
 
    Variables are evaluated automatically in Kermit commands simply by
    referencing them, according to rules given in Table 1. The following
@@ -491,7 +534,7 @@ test2 \q(c:\users\fdc\somefile.txt)
    element, it is evaluated to get the name; otherwise the argument is the
    name. Its definition is returned with no recursion.
    \m() name Equivalent to \fdefinition().
-   \recurse() \m(name) Forces recursive evaluation of a macro definition
+   \frecurse() \m(name) Forces recursive evaluation of a macro definition
    (a.k.a. long variable name). NOTE: \frecurse() can operate on any kind
    of variable as well as on any string containing any mixture of
    variables.
@@ -535,10 +578,10 @@ New RENAME Features for C-Kermit 9.0
    substitution, or character-set conversion, and optionally also move
    them to a different directory:
 
-     /LOWER:   Convert the filename to lowercase
-     /UPPER:   Convert the filename to uppercase
-     /CONVERT: Change the filename's character encoding
-     /REPLACE: Do string substitutions on the filename
+     /LOWER:      Convert the filename to lowercase
+     /UPPER:      Convert the filename to uppercase
+     /CONVERT:    Change the filename's character encoding
+     /REPLACE:    Do string substitutions on the filename
 
    If the source-file specification includes a path or directory, any
    changes are applied to the filenames only, not to the directory or path
@@ -570,10 +613,10 @@ New RENAME Features for C-Kermit 9.0
 
    Reminder: In switches such as /COLLISION that take arguments
    (operands), the switch name and its argument(s) are separated by a
-   colon (:) with no intevening spaces. Also remember that Kermit keywords
-   can always be abbreviated by leaving off characters from the right, as
-   long as the result is still unique in its context. Thus "ren /col:f"
-   would be equivalent to "rename /collision:fail".
+   colon (:) with no intervening spaces. Also remember that Kermit
+   keywords can always be abbreviated by leaving off characters from the
+   right, as long as the result is still unique in its context. Thus "ren
+   /col:f" would be equivalent to "rename /collision:fail".
 
    You can change the following preferences for the RENAME command with
    the new SET RENAME command:
@@ -808,7 +851,7 @@ Changing the Character Encoding of Filenames
    RENAME /CONVERT:charset1:charset2 filespec [ directory ]
           Converts filenames from the first character set to the second
           one. The two character sets can be chosen from the SET FILE
-          CHARACTER-SET list; for complete details see [66]this page. For
+          CHARACTER-SET list; for complete details see [68]this page. For
           example suppose you have a file called "Olga_Tañón.txt" on a
           computer where ISO 8859-1 Latin Alphabet 1 is used, and you have
           transported it (e.g. on CDROM) to another computer where the
@@ -829,7 +872,7 @@ Changing the Character Encoding of Filenames
 
 Other New Features
 
-   See the [67]C-Kermit Daily Builds page for details. Very briefly:
+   See the [69]C-Kermit Daily Builds page for details. Very briefly:
 
      * Perhaps most important, modernized makefile targets for the major
        Unix platforms: Linux, Mac OS X, AIX, Solaris, etc. These are
@@ -844,52 +887,40 @@ Other New Features
      * Bigger buffers, more storage for commands, macros, scripts,
        strings, and filename expansion in 64-bit versions and in 32-bit
        versions that support large files.
-     * New options for the RENAME command, allowing you to rename groups
-       of files at once, changing case of letters in the name or changing
-       its character set, removing spaces or changing them to something
-       else, and/or doing anchored or floating or occurrence-based string
-       replacement, described [68]HERE.
-     * Built-in FTP client for VMS. This is the [69]same FTP client Unix
+     * User-settable FTP timeout, works on both the data and control
+       connection.
+     * FTP accesss to ports higher than 16383.
+     * Built-in FTP client for VMS. This is the [70]same FTP client Unix
        C-Kermit has had since version 8.0, minimally adapted to VMS by
        SMS, supporting binary and Stream_LF file transfer only (in other
        words, nothing to handle RMS files), but otherwise fully functional
        (and scriptable) and theoretically capable of making connections
        secured by SSL (at least it compiles and links OK with SSL - HP SSL
-       1.3 in this case). In the present Alpha release, this is an
-       optional feature requested by including the "i" option in P1 (and
-       by including "CK_SSL" in P3 if you also want SSL, and then also
-       "OPENSSL_DISABLE_OLD_DES_SUPPORT" if necessary). Much testing is
-       needed to determine if it should be included in the final C-Kermit
-       9.0 release.
+       1.3 in this case).
      * Large file support in VMS, also by SMS. Alpha and Itanium only (not
        VAX). VMS C-Kermit was already able to transfer large files, but
        the file-transfer display (numbers and progress bar) and statistics
        were wrong because they used ints. In the present Alpha test
        release, this is an optional feature requested by including the "f"
        option in P1.
-     * User-settable FTP timeout, works on both the data and control
-       connection.
-     * FTP access to ports higher than 16383.
      * New PUTENV command that allows Kermit to pass environment variables
-       to subprocesses (Unix only).
-     * Unix C-Kermit SET TERMINAL TYPE now passes its arguments to
-       subprocesses as an environment variable.
-     * New TOUCH command, many file selection options.
+       to subprocesses (Unix only, "help putenv").
+     * New TOUCH command, many file selection options ("help touch").
      * New DIRECTORY command options and switches (/TOP, /COUNT;
        HDIRECTORY, WDIRECTORY...). To see the ten biggest files in the
        current directory: "dir /top:10 /sort:size /reverse *" or
        equivalently, "hdir /top:10 *". WDIR lists files in reverse
        chronological order, shorthand for "dir /sort:date /reverse".
      * New command FSEEK /FIND:string-or-pattern, seeks to the first line
-       in an FOPEN'd file that contains the given string or matching the
+       in an FOPEN'd file that contains the given string or matches the
        given pattern. Example: Suppose you have a file of lines like this:
 
      quantity   description...
-       in which the first "word" is a number, and a description (for
-       example, the name of an item). Here is how to use FSEEK to quickly
-       get the total quantity of any given item, which is passed as a
-       parameter (either a literal string or a pattern) on the command
-       line:
+       in which the first "word" is a number, followed by a description
+       (for example, the name of an item). Here is how to use FSEEK to
+       quickly get the total quantity of any given item, which is passed
+       as a parameter (either a literal string or a pattern) on the
+       command line:
 
 #!/usr/local/bin/kermit +
 if not def \%1 exit 1 Usage: \fbasename(\%0) string-or-pattern
@@ -920,9 +951,15 @@ exit 0
        sequentially timestamped logs, to seek directly to the date-time
        where you want to start processing. Some other improvements for the
        FOPEN/FREAD/FWRITE/FCLOSE family of commands are included also
-       (perfomance, bug fixes, convenience features), listed in the
-       [70]change log. (Prior to 9.0.299 Alpha.02, the FSEEK /FIND:
+       (performance, bug fixes, convenience features), listed in the
+       [71]change log. (Prior to 9.0.299 Alpha.02, the FSEEK /FIND:
        command always started from the top.)
+     * MIME synonyms for character-set names: A new equivalence between
+       MIME names and Kermit names for character sets, with a new table
+       showing the supported sets [72]HERE (this feature is also
+       illustrated in the [73]Weblog script).
+     * Unix C-Kermit SET TERMINAL TYPE now passes its arguments to
+       subprocesses as an environment variable.
      * SET SESSION-LOG TEXT now strips out ANSI escape sequences from the
        session log.
      * For interacting with POP servers over clear-text or SSL-secured
@@ -930,19 +967,19 @@ exit 0
           + New SSL and TLS "raw" connections (no Telnet protocol).
           + New INPUT command options for reading and capturing (perhaps
             while scanning) continuous incoming text, such as INPUT
-            /NOWRAP (explained [71]HERE).
+            /NOWRAP (explained [74]HERE).
           + New \femailaddress() command to extract the e-mail address
             from an Internet mail message To: or From: line, used in
             fetching mail from POP servers.
           + Improved date parsing commands and functions for parsing the
             different date formats that can appear in e-mail.
           + Production scripts for fetching mail from a secure POP server,
-            available [72]HERE.
+            available [75]HERE.
      * Various features added to make Kermit more useful for writing CGI
        scripts such as INPUT /COUNT:n to INPUT exactly n characters
        (useful for reading form data).
      * New \fpictureinfo() function for getting orientation and dimensions
-       of JPG and GIF images, described [73]HERE.
+       of JPG and GIF images, described [76]HERE.
      * New \fgetpidinfo() function for testing whether a given process
        exists.
      * \fkwdvalue() function fixed to allow multiword values.
@@ -954,11 +991,12 @@ exit 0
        exists.
      * New \fsqueeze(s1) function removes leading and trailing whitespace
        from string s1, changes tabs to spaces, squeezing each run of
-       repeated whitespace characters to a single space (Alpha.02).
+       repeated whitespace characters to a single space.
      * Compact substring notation: \s(somestring[12:18]) is the same as
        \fsubstring(\m(somestring),12,18), i.e. the substring starting at
-       position 12, 18 charcters long. \s(somestring[12_18]) means
-       characters 12 through 18 of the string (7 characters).
+       position 12, 18 characters long. \s(somestring[12_18]) means
+       characters 12 through 18 of the string (7 characters). Also,
+       \s(somestring[17.]) returns character number 17 of somestring.
      * The string indexing functions now accept an optional trailing
        argument specifying the occurrence number of the target string.
        Likewise, \fword() can fetch words from the right as well as the
@@ -972,7 +1010,7 @@ exit 0
        recently entered file specification.
      * In Unix, the ability to log a terminal session to a serial port,
        for use with speaking devices or serial printers; described
-       [74]HERE. Also for the same purpose, SET SESSION-LOG
+       [77]HERE. Also for the same purpose, SET SESSION-LOG
        NULL-PADDED-LINES for a speech synthesizer than needed this.
      * Adaptation to OpenSSL 0.9.8 and 1.0.0.
      * Lifted the restriction on having a remote Kermit program send
@@ -986,12 +1024,9 @@ exit 0
        would send the results (output) back to the client as a file
        transfer with "destination screen", but of course the remote has no
        screen.
-     * [75]MIME synonyms for character-set names were introduced in
-       Alpha.05. Nobody seemed to notice that after that, character-set
-       selection didn't work at all. Anyway, now it's fixed.
-     * Added XMESSAGE, which is to MESSAGE (Alpha.03) as XECHO is ECHO: it
+     * Added XMESSAGE, which is to [78]MESSAGE as XECHO is ECHO: it
        outputs a string with no line terminator DEBUG MESSAGE is ON.
-     * Fixed \recurse() to not dump core when invoked with no arguments.
+     * Fixed \frecurse() to not dump core when invoked with no arguments.
      * Improved text for HELP FUNCTION SPLIT and HELP FUNCTION WORD.
      * Patches for Debian 6.0 "Squeeze" from Ian Beckwith.
      * \fcontents(\&a[3]) got an error if the array was declared but its
@@ -1004,7 +1039,7 @@ exit 0
        old BSD-style ptys. Thanks to Gary Mills for this one, who noticed
        that he couldn't have more than 48 C-Kermit SSH sessions going at
        once and figured out why.
-     * As noted [76]below DES encryption is being retired from many
+     * As noted [79]below DES encryption is being retired from many
        platforms and libraries that once used it. I changed the Solaris
        and Linux OpenSSL builds to account for this by testing for it. I
        probably should also add a OMITDES option to omit DES even if it is
@@ -1018,21 +1053,21 @@ exit 0
        distribution.
      * \fjoin(), which is the inverse function of fsplit() now accepts CSV
        and TSV as a second argument, to transform an array into a
-       comma-separated or tab-separated value list, as described [77]HERE.
+       comma-separated or tab-separated value list, as described [80]HERE.
      * Even in 2010, Unix distributions continue to change their UUCP
-       lockfile conventions. Alpha.08 contains support from Joop Boonen
-       for OpenSuse >= 11.3 and recent Debian, which no longer have
+       lockfile conventions. C-Kermit 9.0 contains support from Joop
+       Boonen for OpenSuSE >= 11.3 and recent Debian, which no longer have
        baudboy.h, which first appeared in Red Hat 7.2 in 2003.
      * From Lewis McCarthy:
 
      Based on code inspection, C-Kermit appears to have an SSL-related
      security vulnerability analogous to that identified as CVE-2009-3767
      (see e.g.
-     [78]http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2009-3767).
+     [81]http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2009-3767).
 
      I'm attaching a patch for this issue relative to the revision of
      ck_ssl.c obtained from a copy of
-     [79]http://www.columbia.edu/kermit/ftp/test/tar/x.zip downloaded on
+     [82]http://www.columbia.edu/kermit/ftp/test/tar/x.zip downloaded on
      2010/07/30, which I believe is the latest.
      When this flaw was first widely publicized at last year's Black Hat
      conference, it was claimed that some public certificate authorities
@@ -1040,8 +1075,8 @@ exit 0
      class of vulnerability. As far as I know they have not revealed
      specifically which public CA(s) had been found issuing such
      certificates. Some references:
-          + [80]http://www.mseclab.com/?p=180
-          + [81]http://www.theregister.co.uk/2009/07/30/universal_ssl_cert
+          + [83]http://www.mseclab.com/?p=180
+          + [84]http://www.theregister.co.uk/2009/07/30/universal_ssl_cert
             ificate/
 
      * Peter Eichhorn reported that "RENAME ../x ." didn't work; fixed
@@ -1051,13 +1086,8 @@ exit 0
        dangerous. For safety FCLOSE has to require a specific channel
        number or the word ALL.
      * Added \fstrcmp(s1,s2,case,start,length), which has the advantage
-       over IF EQU,LGT,LLT that case senstivity can be specified as a
+       over IF EQU,LGT,LLT that case sensitivity can be specified as a
        function arg, and also substrings can be specified.
-     * Fixed a subtle flaw in the [82]CSV feature that was added in
-       Alpha.06, namely that if the last item in a comma separated list
-       was enclosed within doublequotes with a trailing space after the
-       closing doublequote, a spurious empty final element would be
-       created in the result array.
      * New built-in functions:
 
         \fcvtcsets(string,cs1,cs2)
@@ -1073,10 +1103,6 @@ exit 0
 
        For the motivation for these features and an application that uses
        them to analyze web logs, see the Weblog script below.
-     * MIME Character-Set Names: A new equivalence between MIME names and
-       Kermit names for character sets, with a new table showing the
-       supported sets [83]HERE (this feature is also illustrated in the
-       Weblog script).
      *
 
         Lazy IF Conditions: Third, now you can do this:
@@ -1095,10 +1121,10 @@ exit 0
        can't be removed because it could break existing scripts).
      * Escape sequences are now stripped from text-mode session logs not
        only in CONNECT sessions but also in whatever is logged by the
-       INPUT command; described in the [84]next section.
+       INPUT command; described in the [85]next section.
      * New commands for selectively issuing progress or debugging messages
        from scripts, also described in the next section.
-     * Fix from [85]John Dunlap to prevent the fixed packet-timeout
+     * Fix from [86]John Dunlap to prevent the fixed packet-timeout
        interval from going to an unexpected value.
      * Alpha.04 fixes a problem with FTP connections made from 64-bit Unix
        platforms. All the other changes in this section were to Alpha.03.
@@ -1106,12 +1132,12 @@ exit 0
        possible, as it always has been with Telnet and other connection
        types; suggested by Peter Eichhorn (needs testing).
      * A symbol conflict fixed that prevented successful build on
-       [86]FreeBSD 8.0.
+       [87]FreeBSD 8.0.
      * Fixes from Christian Corti for building on SunOS 4.1.
      * New aixg target for building on AIX with gcc.
      * New aix+ibmssl target. This is nice because the IBM-supplied SSL
        libraries and header files are in a known location; no need to
-       [87]set environment variables giving their locations.
+       [88]set environment variables giving their locations.
      * "Large File Support" is now included by default on Alpha and IA64
        hardware on VMS 7.3 and later, and it should work much better than
        before.
@@ -1140,7 +1166,7 @@ exit 0
        overflowed 31 bits because this is C-Kermit, built with the C
        compiler and the C library (runtime system), which did not support
        long integers until VMS 7.3.
-     * The [88]LISP Operator ROUND now takes an optional second argument
+     * The [89]LISP Operator ROUND now takes an optional second argument
        that specifies the number of places to round to, e.g.
        (ROUND dollars 2) rounds dollars to 2 decimal places.
      * Improved pattern matching in many commands for both strings and
@@ -1153,10 +1179,10 @@ Incompatibilities
    backwards compatibility. A script written for a previous Kermit release
    should run the same way in the new release.
 
-   There's one exception this time. The [89]\fsplit() function is
+   There's one exception this time. The [90]\fsplit() function is
    incredibly handy, it can do almost anything, up to and including
    parsing a LISP program (the underlying code is the basis of the
-   [90]S-Expression interpreter). But did you ever try to use it to parse
+   [91]S-Expression interpreter). But did you ever try to use it to parse
    (say) a Tab-Separated-List (TSV file) or Comma-Separated-List (CSV)? It
    works as expected as long as the data contains only 7-bit characters.
    But if your data contains (say) Spanish or German or Russian text
@@ -1200,7 +1226,7 @@ What's Not In C-Kermit 9.0
        sites having a policy against installing any application that does
        not come as an RPM). In the meantime, here's a page that describes
        some Kermit-specific issues in package construction:
-       [91]ckpackages.html.
+       [92]ckpackages.html.
 
 And a Loose End...
 Using External File-Transfer Protocols on Secure Connections
@@ -1271,7 +1297,7 @@ Using External File-Transfer Protocols on Secure Connections
    side. It's as if the path between the pty slave and master lacks flow
    control; I deliver a valid data stream to the pty slave and the master
    gets bits and pieces. This impression is bolstered somewhat by the
-   "[92]man 7 pty" page in HP-UX, which talks about some special modes for
+   "[93]man 7 pty" page in HP-UX, which talks about some special modes for
    ptys that turn off all termio processing and guarantee a
    flow-controlled reliable stream of bytes in both directions - a feature
    that seems to be specific to HP-UX, and exactly the one we need
@@ -1281,16 +1307,16 @@ Using External File-Transfer Protocols on Secure Connections
    ckupty.[ch], which are well-proven in terms of portability and of
    actually working. They are currently used by SET HOST /PTY for making
    terminal connections to external processes. But these routines are
-   written on the assumption that the pty is to be accessed interactively,
-   and maybe they are setting the fork/pty arrangement up in such a way
-   that that's not suitable for file transfer. The Pass One routine is
-   called xttptycmd() in ckutio.c.
+   written on the assumption that the pty is to be accesssed
+   interactively, and maybe they are setting the fork/pty arrangement up
+   in such a way that that's not suitable for file transfer. The Pass One
+   routine is called xttptycmd() in ckutio.c.
 
    So in Pass Two I made a second copy of the routine, yttptycmd(), that
    manages the pty and fork itself, so all the code is in one place and
    it's simple and understandable. But it still doesn't work for Zmodem
    downloads. In this routine, I use openpty() to get the pty pair, which
-   is not portable, so I can have access to both the master and slave pty
+   is not portable, so I can have accesss to both the master and slave pty
    file descriptors. This version can be used only a platforms that have
    openpty(): Linux, Mac OS X, NetBSD, etc.
 
@@ -1312,7 +1338,7 @@ Using External File-Transfer Protocols on Secure Connections
    rzsz, crzsz, and lrzsz. We know that some of these have quirks
    regarding standard i/o, etc, which is one of the reasons for using ptys
    in the first place, and i/o does work - just not reliably. Anyway, the
-   1100 lines or so of [93]ckc299.txt, starting just below where it says
+   1100 lines or so of [94]ckc299.txt, starting just below where it says
    "--- Dev.27 ---" tell the full story. At this point I have to give up
    and move on; it might be more productive to let somebody else who has
    more experience with ptys take a look at it - if indeed anyone still
@@ -1326,7 +1352,7 @@ Using External File-Transfer Protocols on Secure Connections
      make targetname KFLAGS=-DYTTPTYCMD (builds with yttptycmd())
      make targetname KFLAGS=-DZTTPTYCMD (builds with zttptycmd())
 
-   These are all in [94]ckutio.c. As noted, the second one works only for
+   These are all in [95]ckutio.c. As noted, the second one works only for
    Linux, FreeBSD, NetBSD, and Mac OS X, because it uses non-POSIX,
    non-portable openpty(). If you want to try it on some other platform
    that has openpty(), you can build it like this:
@@ -1353,9 +1379,9 @@ Using External File-Transfer Protocols on Secure Connections
 
 Demonstration: Fetch Mail from POP Server Secured by SSL
 
-   [95]pop.ksc is a fully elaborated production script for fetching one's
+   [96]pop.ksc is a fully elaborated production script for fetching one's
    mail from a POP3 server over a connection secured by SSL. For
-   explanation and documentation, [96]CLICK HERE. [97]mailcheck is a
+   explanation and documentation, [97]CLICK HERE. [98]mailcheck is a
    wrapper for the pop.ksc script, which collects your password one time,
    and then checks for new mail every 5 minutes (or other selected
    interval) and calls pop.ksc to fetch it if there is any.
@@ -1364,7 +1390,7 @@ Demonstration: HP Switch Configuration Backup
 
    A common use for Kermit software is to make automated backups of the
    configuration of network switches and routers, such as those made by
-   Cisco or Hewlett-Packard (although [98]tftp can be used for this, it is
+   Cisco or Hewlett-Packard (although [99]tftp can be used for this, it is
    not available in all such devices; Kermit, however, works with those
    that have tftp as well as those that don't).
 
@@ -1390,8 +1416,8 @@ Demonstration: HP Switch Configuration Backup
    for data that is read by INPUT commands and therefore works for scripts
    too.
 
-   A sample HP Switch Configuration Backup script is [99]HERE, and its
-   data file is [100]HERE. This script also illustrates some other new
+   A sample HP Switch Configuration Backup script is [100]HERE, and its
+   data file is [101]HERE. This script also illustrates some other new
    features of Alpha.03:
 
    MESSAGE text
@@ -1413,7 +1439,7 @@ Demonstration: HP Switch Configuration Backup
    SET DEBUG MESSAGE { ON, OFF, STDERR }
           ON means MESSAGE commands should print to standard output; OFF
           means they shouldn't print anything; STDERR means the messages
-          should be printed to [101]stderr. DEBUG MESSAGE is OFF by
+          should be printed to [102]stderr. DEBUG MESSAGE is OFF by
           default, i.e. unless you SET it to ON or STDERR.
 
    IF DEBUG command
@@ -1434,7 +1460,7 @@ if fail exit 1 "FATAL - \v(lastcommand)"
 
 Demonstration: HP iLO Blade Configuration
 
-   [102]THIS DOCUMENT describes a script in production use at Columbia
+   [103]THIS DOCUMENT describes a script in production use at Columbia
    University for configuring and deploying racks full of HP blade servers
    through their "integrated Lights Out" (iLO) management interface,
    bypassing the tedious and error-prone process of configuring the
@@ -1446,7 +1472,7 @@ Demonstration: HP iLO Blade Configuration
 
 Demonstration: IBM/Rolm/Siemens CBX Management
 
-   [103]THIS DOCUMENT describes a suite of scripts (some in production,
+   [104]THIS DOCUMENT describes a suite of scripts (some in production,
    some in development) used to manage the Columbia campus 20,000-line
    main telephone switch, along with about 10 satellite switches at
    off-campus locations. These switches are 1980s technology*, their
@@ -1468,10 +1494,10 @@ Demonstration: CSV and TSV Files
 
    Contents
 
-     * [104]Reading a CSV or TSV Record and Converting it to an Array
-     * [105]Using \fjoin() to create a Comma- or Tab-Separated Value List
+     * [105]Reading a CSV or TSV Record and Converting it to an Array
+     * [106]Using \fjoin() to create a Comma- or Tab-Separated Value List
        from an Array
-     * [106]Using CSV or TSV Files
+     * [107]Using CSV or TSV Files
 
    Comma-Separated Value (CSV) format is commonly output by spreadsheets
    and databases when exporting data into plain-text files for import into
@@ -1485,7 +1511,7 @@ Demonstration: CSV and TSV Files
     3. Fields within records are separated by commas, with zero or more
        whitespace characters (space or tab) before and/or after the comma;
        such whitespace is considered part of the separator.
-    4. Fields with imbedded commas must be enclosed in ASCII doublequote
+    4. Fields with embedded commas must be enclosed in ASCII doublequote
        characters.
     5. Fields with leading or trailing spaces must be enclosed in ASCII
        doublequotes.
@@ -1667,7 +1693,7 @@ C-Kermit>
 
 Using \fjoin() to create Comma- or Tab-Separated Value Lists from Arrays
 
-   In C-Kermit 9.0, \fsplit()'s inverse function, [107]\fjoin() received
+   In C-Kermit 9.0, \fsplit()'s inverse function, [108]\fjoin() received
    the capability of converting an array into a comma-separated or a
    tab-separated value list. Thus, given a CSV, if you split it into an
    array with \fsplit() and then join the array with \fjoin(), giving each
@@ -1681,13 +1707,13 @@ Using \fjoin() to create Comma- or Tab-Separated Value Lists from Arrays
    \fjoin(&a,CSV)
           Given the array \&a[] or any other valid array designator, joins
           its elements into a comma-separated list according to the
-          [108]rules listed above.
+          [109]rules listed above.
 
    \fjoin(&a,TSV)
           Joins the elements of the given array into a tab-separated list,
           also described above.
 
-   [109]Previous calling conventions for \fjoin() are undisturbed,
+   [110]Previous calling conventions for \fjoin() are undisturbed,
    including the ability to specify a portion of an array, rather than the
    whole array:
 
@@ -1848,7 +1874,7 @@ define alphabet abcdefghijklmnopqrstuvwxyz
 
    This defines a macro named alphabet and gives it the value
    abcdefghijklmnopqrstuvwxyz. A more convenient notation (added in
-   C-Kermit 7.0, see [110]Table 2) for this is:
+   C-Kermit 7.0, see [111]Table 2) for this is:
 
 .alphabet = abcdefghijklmnopqrstuvwxyz
 
@@ -1877,17 +1903,17 @@ Alphabet backwards = zyxwvutsrqponmlkjihgfedcba
 .alphabet = abcdefghijklmnopqrstuvwxyz
 .backwards := \freverse(\m(alphabet))
 
-   [111]Any command starting with a period is an assignment, and the
+   [112]Any command starting with a period is an assignment, and the
    operator (= or :=) tells what to do with the right-hand side before
    making the assignment.
 
    In both the DEFINE and ASSIGN commands, the variable name itself is
    taken literally. It is also possible, however, to have Kermit compute
-   the variable name. This is done (as described in [112]Using C-Kermit,
+   the variable name. This is done (as described in [113]Using C-Kermit,
    2nd Ed., p.457), using parallel commands that start with underscore:
    _DEFINE and _ASSIGN (alias _DEF and _ASG). These are just like DEFINE
    and ASSIGN except they evaluate the variable name before making the
-   assigment. For example:
+   assignment. For example:
 
 define \%a one
 _define \%a\%a\%a 111
@@ -1907,8 +1933,8 @@ _define \%a\%a\%a \m(number)
    would give the macro a value of "\m(number)".
 
    You can use the _ASSIGN command to create any kind of data structure
-   you want; you can find some examples in the [113]Object-Oriented
-   Programming section of the [114]Kermit Script Library. In the following
+   you want; you can find some examples in the [114]Object-Oriented
+   Programming section of the [115]Kermit Script Library. In the following
    program we use this capability to create a two-dimensional array, or
    matrix, to hold the all the elements of the CSV file, and then to
    display the matrix:
@@ -1961,15 +1987,17 @@ for \%i 1 \%r 1 {                       # Loop through rows
 
 Demonstration Scripts for Webmasters
 
-   [115]ksitemap
+   These scripts all use new features of C-Kermit 9.0.
+
+   [116]ksitemap
           A C-Kermit 9.0 script to build sitemap.xml for a website,
           complete with Google image extensions (this is the file used by
           webmasters to get their sites crawled and indexed optimally).
 
-   [116]The Weblog Script
+   [117]The Weblog Script
           Reads a web log, extracts the Google searches, normalizes the
           search strings, and prints the top 20 searches, along with their
-          counts. Documented [117]HERE.
+          counts.
 
    [118]The Amazon Script
           Reads an Amazon Associate orders report and lists the products
@@ -1977,16 +2005,14 @@ Demonstration Scripts for Webmasters
           clicks on each.
 
    [119]Photoalbum
-          Makes a website from a collecion of JPG images. For explanation
-          and documentation, [120]CLICK HERE. Requires [121]C-Kermit 9.0
-          or later.
+          Makes a website from a collection of JPG images.
 
-            [122]Home [123]Kermit 95 [124]C-Kermit [125]Scripts [126]Current
-   [127]New [128]FAQ  [129]Support
+            [120]Home [121]Kermit 95 [122]C-Kermit [123]Scripts [124]Current
+   [125]New [126]FAQ  [127]Support
 
 
-    C-Kermit 9.0 / [130]The Kermit Project / [131]Columbia University /
-    [132]kermit@columbia.edu / [133]validate
+    C-Kermit 9.0 / [128]The Kermit Project / [129]Columbia University /
+    [130]kermit@columbia.edu / [131]validate
 
 References
 
@@ -2000,126 +2026,124 @@ References
    8. http://www.columbia.edu/kermit/whatsnew.html
    9. http://www.columbia.edu/kermit/faq.html
   10. http://www.columbia.edu/kermit/support.html
-  11. http://www.columbia.edu/kermit/ck90tables.html
-  12. http://www.amazon.com/gp/product/1555581641?ie=UTF8&tag=aleidmoreldom-20&linkCode=as2&camp=1789&creative=9325&creativeASIN=1555581641
-  13. http://www.columbia.edu/kermit/ckermit.html#download
-  14. http://www.columbia.edu/kermit/ckermit90.html#LargeFiles
-  15. http://www.columbia.edu/kermit/ckermit90.html#TestLargeFiles
-  16. http://www.columbia.edu/kermit/ckermit90.html#Bignums
-  17. http://www.columbia.edu/kermit/ckermit90.html#force3
-  18. http://www.columbia.edu/kermit/ckermit90.html#Vareval
-  19. http://www.columbia.edu/kermit/ckermit90.html#rename
-  20. http://www.columbia.edu/kermit/ckermit90.html#Other
-  21. http://www.columbia.edu/kermit/ckermit90.html#Incompatibilities
-  22. http://www.columbia.edu/kermit/ckermit90.html#NotIn9.0
-  23. http://www.columbia.edu/kermit/ckermit90.html#LooseEnd
-  24. http://www.columbia.edu/kermit/ckermit90.html#pop
-  25. http://www.columbia.edu/kermit/ckermit90.html#HPswitch
-  26. http://www.columbia.edu/kermit/ckermit90.html#iLO
-  27. http://www.columbia.edu/kermit/ckermit90.html#Rolm
-  28. http://www.columbia.edu/kermit/ckermit90.html#CSV
-  29. http://www.columbia.edu/kermit/ckermit90.html#Otherdemos
-  30. http://www.columbia.edu/kermit/ck60manual.html
-  31. http://www.amazon.com/gp/product/B002ACPF9M?ie=UTF8&tag=aleidmoreldom-20&linkCode=as2&camp=1789&creative=390957&creativeASIN=B002ACPF9M
-  32. http://www.columbia.edu/kermit/ckermit70.html
-  33. http://www.columbia.edu/kermit/ckermit80.html
-  34. http://www.columbia.edu/kermit/ckscripts.html
-  35. http://www.columbia.edu/kermit/dec20.html
-  36. mailto:fdc@columbia.edu
-  37. http://www.columbia.edu/kermit/cu-bsd-license.html
-  38. http://www.columbia.edu/kermit/ckermit90.html#LargeFiles
-  39. http://www.columbia.edu/kermit/ck90tables.html
-  40. http://www.columbia.edu/kermit/ck90tables.html
-  41. http://www.columbia.edu/kermit/ckermit90.html#force3
-  42. http://www.columbia.edu/kermit/ckermit90.html#Vareval
-  43. http://www.columbia.edu/kermit/ckrename.html
-  44. http://www.columbia.edu/kermit/csv.html
-  45. http://www.columbia.edu/kermit/csetnames.html
-  46. http://www.columbia.edu/kermit/ckermit90.html#HPswitch
-  47. http://www.columbia.edu/kermit/ckdaily.html
-  48. http://www.columbia.edu/kermit/cu-bsd-license.html
-  49. http://www.opensource.org/
-  50. http://kermit.columbia.edu/ck90tables.html#LF
-  51. ftp://kermit.columbia.edu/kermit/utils/bigfile.c
-  52. http://www.columbia.edu/kermit/ckermit80.html#x9
-  53. http://www.columbia.edu/kermit/ck90tables.html#LF
-  54. ftp://kermit.columbia.edu/kermit/scripts/ckermit/easter2
-  55. http://www.columbia.edu/kermit/em-apex.html
-  56. http://www.iridium.com/
-  57. http://science1.nasa.gov/science-news/science-at-nasa/2006/09jan_electrichurricanes/
-  58. http://www.columbia.edu/kermit/ek.html
-  59. ftp://kermit.columbia.edu/kermit/ek/simirid/
+  11. http://www.columbia.edu/cu/computinghistory/books/#menagerie
+  12. http://www.columbia.edu/kermit/ck90tables.html
+  13. http://www.amazon.com/gp/product/1555581641?ie=UTF8&tag=aleidmoreldom-20&linkCode=as2&camp=1789&creative=9325&creativeASIN=1555581641
+  14. http://www.columbia.edu/kermit/ckermit.html#download
+  15. http://www.columbia.edu/kermit/ckermit90.html#LargeFiles
+  16. http://www.columbia.edu/kermit/ckermit90.html#TestLargeFiles
+  17. http://www.columbia.edu/kermit/ckermit90.html#Bignums
+  18. http://www.columbia.edu/kermit/ckermit90.html#force3
+  19. http://www.columbia.edu/kermit/ckermit90.html#Vareval
+  20. http://www.columbia.edu/kermit/ckermit90.html#rename
+  21. http://www.columbia.edu/kermit/ckermit90.html#Other
+  22. http://www.columbia.edu/kermit/ckermit90.html#Incompatibilities
+  23. http://www.columbia.edu/kermit/ckermit90.html#NotIn9.0
+  24. http://www.columbia.edu/kermit/ckermit90.html#LooseEnd
+  25. http://www.columbia.edu/kermit/ckermit90.html#pop
+  26. http://www.columbia.edu/kermit/ckermit90.html#HPswitch
+  27. http://www.columbia.edu/kermit/ckermit90.html#iLO
+  28. http://www.columbia.edu/kermit/ckermit90.html#Rolm
+  29. http://www.columbia.edu/kermit/ckermit90.html#CSV
+  30. http://www.columbia.edu/kermit/ckermit90.html#Otherdemos
+  31. http://www.columbia.edu/kermit/ck60manual.html
+  32. http://www.amazon.com/gp/product/B002ACPF9M?ie=UTF8&tag=aleidmoreldom-20&linkCode=as2&camp=1789&creative=390957&creativeASIN=B002ACPF9M
+  33. http://www.columbia.edu/kermit/ckermit70.html
+  34. http://www.columbia.edu/kermit/ckermit80.html
+  35. http://www.columbia.edu/kermit/ckscripts.html
+  36. http://www.columbia.edu/cu/computinghistory/dec20.html
+  37. mailto:fdc@columbia.edu
+  38. http://www.columbia.edu/kermit/k95.html
+  39. http://www.columbia.edu/kermit/cu-bsd-license.html
+  40. http://www.columbia.edu/kermit/ckermit90.html#LargeFiles
+  41. http://www.columbia.edu/kermit/ck90tables.html
+  42. http://www.columbia.edu/kermit/ck90tables.html
+  43. http://www.columbia.edu/kermit/ckermit90.html#force3
+  44. http://www.columbia.edu/kermit/ckermit90.html#Vareval
+  45. http://www.columbia.edu/kermit/ckrename.html
+  46. http://www.columbia.edu/kermit/csv.html
+  47. http://www.columbia.edu/kermit/csetnames.html
+  48. http://www.columbia.edu/kermit/ckermit90.html#HPswitch
+  49. http://www.columbia.edu/kermit/ckdaily.html
+  50. http://www.columbia.edu/kermit/cu-bsd-license.html
+  51. http://www.opensource.org/
+  52. http://kermit.columbia.edu/ck90tables.html#LF
+  53. ftp://kermit.columbia.edu/kermit/utils/bigfile.c
+  54. http://www.columbia.edu/kermit/ckermit80.html#x9
+  55. http://www.columbia.edu/kermit/ck90tables.html#LF
+  56. ftp://kermit.columbia.edu/kermit/scripts/ckermit/easter2
+  57. http://www.columbia.edu/kermit/em-apex.html
+  58. http://www.iridium.com/
+  59. http://science1.nasa.gov/science-news/science-at-nasa/2006/09jan_electrichurricanes/
   60. http://www.columbia.edu/kermit/ek.html
-  61. http://www.columbia.edu/kermit/ckermit70.html#x7.10.10
-  62. http://www.columbia.edu/kermit/csv.html
-  63. http://www.columbia.edu/kermit/ckermit70.html#x1.11
-  64. http://www.columbia.edu/kermit/ckermit70.html
-  65. http://www.columbia.edu/kermit/ckermit80.html#x9
-  66. http://www.columbia.edu/kermit/csetnames.html
-  67. http://www.columbia.edu/kermit/ckdaily.html
-  68. http://www.columbia.edu/kermit/ckrename.html
-  69. http://www.columbia.edu/kermit/ftpclient.html
-  70. http://www.columbia.edu/kermit/ckdaily.html
-  71. http://www.columbia.edu/kermit/input_nowrap.html
-  72. http://www.columbia.edu/~fdc/mm/index.html
-  73. http://www.columbia.edu/kermit/photoalbum.html
-  74. http://www.columbia.edu/~fdc/kermit/logserial.html
-  75. http://www.columbia.edu/kermit/csetnames.html
-  76. http://www.columbia.edu/kermit/ckermit90.html#NotIn9.0
-  77. http://www.columbia.edu/kermit/csv.html#join
-  78. http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2009-3767
-  79. http://www.columbia.edu/kermit/ftp/test/tar/x.zip
-  80. http://www.mseclab.com/?p=180
-  81. http://www.theregister.co.uk/2009/07/30/universal_ssl_certificate/
-  82. http://www.columbia.edu/kermit/csv.html
-  83. http://www.columbia.edu/kermit/csetnames.html
-  84. http://www.columbia.edu/kermit/ckermit90.html#HPswitch
-  85. http://www.columbia.edu/kermit/em-apex.html
-  86. http://www.freebsd.org/releases/8.0R/announce.html
-  87. http://www.columbia.edu/kermit/security81.html#x4.2.3
-  88. http://www.columbia.edu/kermit/ckermit80.html#x9
-  89. http://www.columbia.edu/kermit/ckermit80.html#x8.7.2
-  90. http://www.columbia.edu/kermit/ckermit80.html#x9
-  91. http://www.columbia.edu/kermit/ckpackages.html
-  92. http://docs.hp.com/en/B9106-90013/pty.7.html
-  93. http://www.columbia.edu/kermit/test/text/ckc299.txt
-  94. http://www.columbia.edu/kermit/test/text/ckutio.c
-  95. http://www.columbia.edu/~fdc/mm/pop
-  96. http://www.columbia.edu/~fdc/mm/
-  97. http://www.columbia.edu/~fdc/mm/mailcheck
-  98. http://en.wikipedia.org/wiki/Trivial_File_Transfer_Protocol
-  99. http://www.columbia.edu/kermit/ftp/scripts/ckermit/gethpconfig
- 100. http://www.columbia.edu/kermit/ftp/scripts/ckermit/TestSwitches.txt
- 101. http://en.wikipedia.org/wiki/Standard_streams
- 102. http://kermit.columbia.edu/cudocs/ilosetup.html
- 103. http://www.columbia.edu/kermit/cudocs/cbx.html
- 104. http://www.columbia.edu/kermit/ckermit90.html#record
- 105. http://www.columbia.edu/kermit/ckermit90.html#join
- 106. http://www.columbia.edu/kermit/ckermit90.html#file
- 107. http://www.columbia.edu/kermit/ckermit80.html#fjoin
- 108. http://www.columbia.edu/kermit/ckermit90.html#rules
- 109. http://www.columbia.edu/kermit/ckermit80.html#fjoin
- 110. http://www.columbia.edu/kermit/ckermit90.html#varasg
- 111. http://www.columbia.edu/kermit/ckermit70.html#x7.9
- 112. http://www.amazon.com/gp/product/1555581641?ie=UTF8&tag=aleidmoreldom-20&linkCode=as2&camp=1789&creative=9325&creativeASIN=1555581641
- 113. http://www.columbia.edu/kermit/ckscripts.html#oops
- 114. http://www.columbia.edu/kermit/ckscripts.html
- 115. http://www.columbia.edu/kermit/ksitemap.html
- 116. http://kermit.columbia.edu/ftp/scripts/ckermit/weblog
+  61. ftp://kermit.columbia.edu/kermit/ek/simirid/
+  62. http://www.columbia.edu/kermit/ek.html
+  63. http://www.columbia.edu/kermit/ckermit70.html#x7.10.10
+  64. http://www.columbia.edu/kermit/csv.html
+  65. http://www.columbia.edu/kermit/ckermit70.html#x1.11
+  66. http://www.columbia.edu/kermit/ckermit70.html
+  67. http://www.columbia.edu/kermit/ckermit80.html#x9
+  68. http://www.columbia.edu/kermit/csetnames.html
+  69. http://www.columbia.edu/kermit/ckdaily.html
+  70. http://www.columbia.edu/kermit/ftpclient.html
+  71. http://www.columbia.edu/kermit/ckdaily.html
+  72. http://www.columbia.edu/kermit/csetnames.html
+  73. http://www.columbia.edu/kermit/ckermit90.html#Otherdemos
+  74. http://www.columbia.edu/kermit/input_nowrap.html
+  75. http://www.columbia.edu/~fdc/mm/index.html
+  76. http://www.columbia.edu/kermit/photoalbum.html
+  77. http://www.columbia.edu/~fdc/kermit/logserial.html
+  78. http://www.columbia.edu/kermit/ckermit90.html#message
+  79. http://www.columbia.edu/kermit/ckermit90.html#NotIn9.0
+  80. http://www.columbia.edu/kermit/csv.html#join
+  81. http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2009-3767
+  82. http://www.columbia.edu/kermit/ftp/test/tar/x.zip
+  83. http://www.mseclab.com/?p=180
+  84. http://www.theregister.co.uk/2009/07/30/universal_ssl_certificate/
+  85. http://www.columbia.edu/kermit/ckermit90.html#HPswitch
+  86. http://www.columbia.edu/kermit/em-apex.html
+  87. http://www.freebsd.org/releases/8.0R/announce.html
+  88. http://www.columbia.edu/kermit/security81.html#x4.2.3
+  89. http://www.columbia.edu/kermit/ckermit80.html#x9
+  90. http://www.columbia.edu/kermit/ckermit80.html#x8.7.2
+  91. http://www.columbia.edu/kermit/ckermit80.html#x9
+  92. http://www.columbia.edu/kermit/ckpackages.html
+  93. http://docs.hp.com/en/B9106-90013/pty.7.html
+  94. http://www.columbia.edu/kermit/test/text/ckc299.txt
+  95. http://www.columbia.edu/kermit/test/text/ckutio.c
+  96. http://www.columbia.edu/~fdc/mm/pop
+  97. http://www.columbia.edu/~fdc/mm/
+  98. http://www.columbia.edu/~fdc/mm/mailcheck
+  99. http://en.wikipedia.org/wiki/Trivial_File_Transfer_Protocol
+ 100. http://www.columbia.edu/kermit/ftp/scripts/ckermit/gethpconfig
+ 101. http://www.columbia.edu/kermit/ftp/scripts/ckermit/TestSwitches.txt
+ 102. http://en.wikipedia.org/wiki/Standard_streams
+ 103. http://kermit.columbia.edu/cudocs/ilosetup.html
+ 104. http://www.columbia.edu/kermit/cudocs/cbx.html
+ 105. http://www.columbia.edu/kermit/ckermit90.html#record
+ 106. http://www.columbia.edu/kermit/ckermit90.html#join
+ 107. http://www.columbia.edu/kermit/ckermit90.html#file
+ 108. http://www.columbia.edu/kermit/ckermit80.html#fjoin
+ 109. http://www.columbia.edu/kermit/ckermit90.html#rules
+ 110. http://www.columbia.edu/kermit/ckermit80.html#fjoin
+ 111. http://www.columbia.edu/kermit/ckermit90.html#varasg
+ 112. http://www.columbia.edu/kermit/ckermit70.html#x7.9
+ 113. http://www.amazon.com/gp/product/1555581641?ie=UTF8&tag=aleidmoreldom-20&linkCode=as2&camp=1789&creative=9325&creativeASIN=1555581641
+ 114. http://www.columbia.edu/kermit/ckscripts.html#oops
+ 115. http://www.columbia.edu/kermit/ckscripts.html
+ 116. http://www.columbia.edu/kermit/ksitemap.html
  117. http://www.columbia.edu/kermit/weblog.html
  118. http://kermit.columbia.edu/ftp/scripts/ckermit/amazon
- 119. http://kermit.columbia.edu/ftp/scripts/ckermit/photoalbum
- 120. http://www.columbia.edu/kermit/photoalbum.html
- 121. http://www.columbia.edu/kermit/ck90.html
- 122. http://www.columbia.edu/kermit/index.html
- 123. http://www.columbia.edu/kermit/k95.html
- 124. http://www.columbia.edu/kermit/ckermit.html
- 125. http://www.columbia.edu/kermit/ckscripts.html
- 126. http://www.columbia.edu/kermit/current.html
- 127. http://www.columbia.edu/kermit/whatsnew.html
- 128. http://www.columbia.edu/kermit/faq.html
- 129. http://www.columbia.edu/kermit/support.html
- 130. http://www.columbia.edu/kermit/index.html
- 131. http://www.columbia.edu/
- 132. mailto:kermit@columbia.edu
- 133. http://validator.w3.org/check?uri=http%3A%2F%2Fkermit.columbia.edu%2Fck90.html
+ 119. http://www.columbia.edu/kermit/photoalbum.html
+ 120. http://www.columbia.edu/kermit/index.html
+ 121. http://www.columbia.edu/kermit/k95.html
+ 122. http://www.columbia.edu/kermit/ckermit.html
+ 123. http://www.columbia.edu/kermit/ckscripts.html
+ 124. http://www.columbia.edu/kermit/current.html
+ 125. http://www.columbia.edu/kermit/whatsnew.html
+ 126. http://www.columbia.edu/kermit/faq.html
+ 127. http://www.columbia.edu/kermit/support.html
+ 128. http://www.columbia.edu/kermit/index.html
+ 129. http://www.columbia.edu/
+ 130. mailto:kermit@columbia.edu
+ 131. http://validator.w3.org/check?uri=http%3A%2F%2Fkermit.columbia.edu%2Fckermit90.html
index 58174bf..44177a5 100644 (file)
@@ -11,7 +11,7 @@ C-Kermit Unix Hints and Tips
      [11]The Kermit Project, [12]Columbia University
 
    As of: C-Kermit 9.0.300 30 June 2011
-   This page last updated: Mon Jun 27 16:01:50 2011 (New York USA Time)
+   This page last updated: Wed Jul 6 10:02:34 2011 (New York USA Time)
 
      IF YOU ARE READING A PLAIN-TEXT version of this document, note it is
      a plain-text dump of a Web page. You can visit the original (and
@@ -20,8 +20,14 @@ C-Kermit Unix Hints and Tips
   [13]http://www.columbia.edu/kermit/ckubwr.html
 
      Since the material in this file has been accumulating since 1985,
-     some (much) of it might be dated. [14]Feedback from experts on
-     particular OS's and platforms is always welcome.
+     some (much) of it might be dated.
+
+Known problems with C-Kermit 9.0
+
+     * Domain name resolution does not work in Solaris 10 or 11 (fixed in
+       [14]9.0.301).
+     * Opening new SSH sessions after closing previous ones sometimes
+       fails.
 
    [ [15]C-Kermit ] [ [16]Installation Instructions ] [ [17]TUTORIAL ]
 
@@ -43,18 +49,18 @@ CONTENTS
    14. [31]THIRD-PARTY DRIVERS
 
    Quick Links:   [ [32]Linux ] [ [33]*BSD ] [[34]Mac OS X] [ [35]AIX ] [
-   [36]HP-UX ] [ [37]Solaris ] [ [38]SCO ] [ [39]DEC/Compaq ]
+   [36]HP-UX ] [ [37]Solaris ] [ [38]SCO ]
 
 1. INTRODUCTION
 
-   [ [40]Top ] [ [41]Contents ] [ [42]Next ]
+   [ [39]Top ] [ [40]Contents ] [ [41]Next ]
 
    SECTION CONTENTS
 
-  1.1. [43]Documentation
-  1.2. [44]Technical Support
-  1.3. [45]The Year 2000
-  1.4. [46]The Euro
+  1.1. [42]Documentation
+  1.2. [43]Technical Support
+  1.3. [44]The Year 2000
+  1.4. [45]The Euro
 
    THIS IS WHAT USED TO BE CALLED the "beware file" for the Unix version
    of C-Kermit, previously distributed as ckubwr.txt and, before that, as
@@ -69,9 +75,9 @@ CONTENTS
    internal cross references, and so on, to make it easier to use.
 
    This document applies to Unix C-Kermit in general, as well as to
-   specific Unix variations like [47]Linux, [48]AIX, [49]HP-UX,
-   [50]Solaris, and so on, and should be read in conjunction with the
-   [51]platform-independent C-Kermit beware file, which contains similar
+   specific Unix variations like [46]Linux, [47]AIX, [48]HP-UX,
+   [49]Solaris, and so on, and should be read in conjunction with the
+   [50]platform-independent C-Kermit beware file, which contains similar
    information, but applying to all versions of C-Kermit (VMS, Windows,
    OS/2, AOS/VS, VOS, etc, as well as to Unix).
 
@@ -80,41 +86,41 @@ CONTENTS
    are relevant to you. Numerous offsite Web links are supposed to lead to
    further information but, as you know, Web links go stale frequently and
    without warning. If you can supply additional, corrected, updated, or
-   better Web links, please feel free to [52]let me know.
+   better Web links, please feel free to [51]let me know.
 
 1.1. Documentation
 
-   [ [53]Top ] [ [54]Contents ] [ [55]Next ]
+   [ [52]Top ] [ [53]Contents ] [ [54]Next ]
 
-   C-Kermit 6.0 is documented in the book [56]Using C-Kermit, Second
+   C-Kermit 6.0 is documented in the book [55]Using C-Kermit, Second
    Edition, by Frank da Cruz and Christine M. Gianone, Digital Press,
    Burlington, MA, USA, ISBN 1-55558-164-1 (1997), 622 pages. This remains
    the definitive C-Kermit documentation. Until the third edition is
    published (sorry, there is no firm timeframe for this), please also
    refer to:
 
-   [57]Supplement to Using C-Kermit, Second Edition, For C-Kermit 7.0
+   [56]Supplement to Using C-Kermit, Second Edition, For C-Kermit 7.0
           Thorough documentation of features new to version 7.0.
 
-   [58]Supplement to Using C-Kermit, Second Edition, For C-Kermit 8.0
+   [57]Supplement to Using C-Kermit, Second Edition, For C-Kermit 8.0
           Thorough documentation of features new to version 8.0.
 
-   [59]Supplement to Using C-Kermit, Second Edition, For C-Kermit 9.0
+   [58]Supplement to Using C-Kermit, Second Edition, For C-Kermit 9.0
           Thorough documentation of features new to version 9.0.
 
 1.2. Technical Support
 
-   [ [60]Top ] [ [61]Contents ] [ [62]Section Contents ] [ [63]Next ] [
-   [64]Previous ]
+   [ [59]Top ] [ [60]Contents ] [ [61]Section Contents ] [ [62]Next ] [
+   [63]Previous ]
 
    For information on how to get technical support, please visit:
 
-    [65]http://www.columbia.edu/kermit/support.html
+    [64]http://www.columbia.edu/kermit/support.html
 
 1.3. The Year 2000
 
-   [ [66]Top ] [ [67]Contents ] [ [68]Section Contents ] [ [69]Next ] [
-   [70]Previous ]
+   [ [65]Top ] [ [66]Contents ] [ [67]Section Contents ] [ [68]Next ] [
+   [69]Previous ]
 
    The Unix version of C-Kermit, release 6.0 and later, is "Year 2000
    compliant", but only if the underlying operating system is too. Contact
@@ -161,7 +167,7 @@ CONTENTS
 
 1.4. The Euro
 
-   [ [71]Top ] [ [72]Contents ] [ [73]Section Contents ] [ [74]Previous ]
+   [ [70]Top ] [ [71]Contents ] [ [72]Section Contents ] [ [73]Previous ]
 
    C-Kermit 7.0 and later support Unicode (ISO 10646), ISO 8859-15 Latin
    Alphabet 9, PC Code Page 858, Windows Code Pages 1250 and 1251, and
@@ -171,7 +177,7 @@ CONTENTS
 
 2. PREBUILT C-KERMIT BINARIES
 
-   [ [75]Top ] [ [76]Contents ] [ [77]Next ] [ [78]Previous ]
+   [ [74]Top ] [ [75]Contents ] [ [76]Next ] [ [77]Previous ]
 
    It is often dangerous to run a binary C-Kermit (or any other) program
    built on a different computer. Particularly if that computer had a
@@ -208,38 +214,38 @@ CONTENTS
 
 3. NOTES ON SPECIFIC UNIX VERSIONS
 
-   [ [79]Top ] [ [80]Contents ] [ [81]Next ] [ [82]Previous ]
+   [ [78]Top ] [ [79]Contents ] [ [80]Next ] [ [81]Previous ]
 
    SECTION CONTENTS
 
-  3.0.  [83]C-KERMIT ON PC-BASED UNIXES
-  3.1.  [84]C-KERMIT AND AIX
-  3.2.  [85]C-KERMIT AND HP-UX
-  3.3.  [86]C-KERMIT AND LINUX
-  3.4.  [87]C-KERMIT AND NEXTSTEP
-  3.5.  [88]C-KERMIT AND QNX
-  3.6.  [89]C-KERMIT AND SCO
-  3.7.  [90]C-KERMIT AND SOLARIS
-  3.8.  [91]C-KERMIT AND SUNOS
-  3.9.  [92]C-KERMIT AND ULTRIX
-  3.10. [93]C-KERMIT AND UNIXWARE
-  3.11. [94]C-KERMIT AND APOLLO SR10
-  3.12. [95]C-KERMIT AND TANDY XENIX 3.0
-  3.13. [96]C-KERMIT AND OSF/1 (DIGITAL UNIX) (TRU64 UNIX)
-  3.14. [97]C-KERMIT AND SGI IRIX
-  3.15. [98]C-KERMIT AND THE BEBOX
-  3.16. [99]C-KERMIT AND DG/UX
-  3.17. [100]C-KERMIT AND SEQUENT DYNIX
-  3.18. [101]C-KERMIT AND {FREE,OPEN,NET}BSD
-  3.19. [102]C-KERMIT AND MAC OS X
-  3.20. [103]C-KERMIT AND COHERENT
+  3.0.  [82]C-KERMIT ON PC-BASED UNIXES
+  3.1.  [83]C-KERMIT AND AIX
+  3.2.  [84]C-KERMIT AND HP-UX
+  3.3.  [85]C-KERMIT AND LINUX
+  3.4.  [86]C-KERMIT AND NEXTSTEP
+  3.5.  [87]C-KERMIT AND QNX
+  3.6.  [88]C-KERMIT AND SCO
+  3.7.  [89]C-KERMIT AND SOLARIS
+  3.8.  [90]C-KERMIT AND SUNOS
+  3.9.  [91]C-KERMIT AND ULTRIX
+  3.10. [92]C-KERMIT AND UNIXWARE
+  3.11. [93]C-KERMIT AND APOLLO SR10
+  3.12. [94]C-KERMIT AND TANDY XENIX 3.0
+  3.13. [95]C-KERMIT AND OSF/1 (DIGITAL UNIX) (TRU64 UNIX)
+  3.14. [96]C-KERMIT AND SGI IRIX
+  3.15. [97]C-KERMIT AND THE BEBOX
+  3.16. [98]C-KERMIT AND DG/UX
+  3.17. [99]C-KERMIT AND SEQUENT DYNIX
+  3.18. [100]C-KERMIT AND {FREE,OPEN,NET}BSD
+  3.19. [101]C-KERMIT AND MAC OS X
+  3.20. [102]C-KERMIT AND COHERENT
 
    The following sections apply to specific Unix versions. Most of them
    contain references to FAQs (Frequently Asked Questions), but these tend
    to be ephemeral. For possibly more current information see:
 
-  [104]http://www.faqs.org
-  [105]http://aplawrence.com/Unixart/newtounix.html
+  [103]http://www.faqs.org
+  [104]http://aplawrence.com/Unixart/newtounix.html
 
    One thread that runs through many of them, and implicitly perhaps
    through all, concerns the problems that occur when trying to dial out
@@ -248,7 +254,7 @@ CONTENTS
    gross, involving configuring the device for bidirectional use. This is
    done in a highly OS-dependent and often obscure manner, and the effects
    (good or evil) are also highly dependent on the particular OS (and
-   getty variety, etc). Many examples are given in the [106]OS-specific
+   getty variety, etc). Many examples are given in the [105]OS-specific
    sections below.
 
    An important point to keep in mind is that C-Kermit is a
@@ -262,28 +268,28 @@ CONTENTS
    something on your particular Unix version, you might be right -- we
    can't claim to be expert in hundreds of different OS / version /
    hardware / library combinations. If you're a programmer, take a look at
-   the source code and [107]send us your suggested fixes or changes. Or
-   else just [108]send us a report about what seems to be wrong and we'll
+   the source code and [106]send us your suggested fixes or changes. Or
+   else just [107]send us a report about what seems to be wrong and we'll
    see what we can do.
 
 3.0. C-KERMIT ON PC-BASED UNIXES
 
-   [ [109]Top ] [ [110]Contents ] [ [111]Section Contents ] [ [112]Next ]
+   [ [108]Top ] [ [109]Contents ] [ [110]Section Contents ] [ [111]Next ]
 
-   Also see: [113]http://www.pcunix.com/.
+   Also see: [112]http://www.pcunix.com/.
 
    SECTION CONTENTS
 
-  3.0.1. [114]Interrupt Conflicts
-  3.0.2. [115]Windows-Specific Hardware
-  3.0.3. [116]Modems
-  3.0.4. [117]Character Sets
-  3.0.5. [118]Keyboard, Screen, and Mouse Access
-  3.0.6. [119]Laptops
+  3.0.1. [113]Interrupt Conflicts
+  3.0.2. [114]Windows-Specific Hardware
+  3.0.3. [115]Modems
+  3.0.4. [116]Character Sets
+  3.0.5. [117]Keyboard, Screen, and Mouse Access
+  3.0.6. [118]Laptops
 
 3.0.1. Interrupt Conflicts
 
-   [ [120]Top ] [ [121]Contents ] [ [122]Section Contents ] [ [123]Next ]
+   [ [119]Top ] [ [120]Contents ] [ [121]Section Contents ] [ [122]Next ]
 
    PCs are not the best platform for real operating systems like Unix. The
    architecture suffers from numerous deficiencies, not the least of which
@@ -342,8 +348,8 @@ CONTENTS
 
 3.0.2. Windows-Specific Hardware
 
-   [ [124]Top ] [ [125]Contents ] [ [126]Section Contents ] [ [127]Next ]
-   [ [128]Previous ]
+   [ [123]Top ] [ [124]Contents ] [ [125]Section Contents ] [ [126]Next ]
+   [ [127]Previous ]
 
    To complicate matters, the PC platform is becoming increasingly and
    inexorably Windows-oriented. More and more add-on devices are "Windows
@@ -352,7 +358,7 @@ CONTENTS
    device itself to do. PCMCIA, PCI, or "Plug-n-Play" devices are rarely
    supported on PC-based Unix versions such as SCO; Winmodems,
    Winprinters, and the like are not supported on any Unix variety (with
-   [129]a few exceptions). The self-proclaimed Microsoft PC 97 (or later)
+   [128]a few exceptions). The self-proclaimed Microsoft PC 97 (or later)
    standard only makes matters worse since its only purpose to ensure that
    PCs are "optimized to run Windows 95 and Windows NT 4.0 and future
    versions of these operating systems".
@@ -364,7 +370,7 @@ CONTENTS
    matter, all non-Windows operating systems) combined. If your version of
    Unix (SCO, Linux, BSDI, FreeBSD, etc) does not support a particular
    device, then C-Kermit can't use it either. C-Kermit, like any Unix
-   application, must access all devices through drivers and not directly
+   application, must accesss all devices through drivers and not directly
    because Unix is a real operating system.
 
    Don't waste time thinking that you, or anybody else, could write a
@@ -381,7 +387,7 @@ CONTENTS
    "Legacy Free". One can only speculate what that could mean. Most likely
    it means it will ONLY run the very latest versions of Windows, and is
    made exclusively of Winmodems, Winprinters, Winmemory, and Win-CPU-fans
-   (Legacy Free is a concept [130]pioneered by Microsoft).
+   (Legacy Free is a concept [129]pioneered by Microsoft).
 
    Before you buy a new PC or add-on equipment, especially serial ports,
    internal modems, or printers, make sure they are compatible with your
@@ -400,8 +406,8 @@ CONTENTS
 
 3.0.3. Modems
 
-   [ [131]Top ] [ [132]Contents ] [ [133]Section Contents ] [ [134]Next ]
-   [ [135]Previous ]
+   [ [130]Top ] [ [131]Contents ] [ [132]Section Contents ] [ [133]Next ]
+   [ [134]Previous ]
 
    External modems are recommended:
 
@@ -424,7 +430,7 @@ CONTENTS
    software will know how to control it.) For more about Unix compatible
    modems, see:
 
-  [136]http://www.idir.net/~gromitkc/winmodem.html
+  [135]http://www.idir.net/~gromitkc/winmodem.html
 
    Remember that PCs, even now -- more than two decades after they were
    first introduced -- are not (in general) capable of supporting more
@@ -435,14 +441,14 @@ CONTENTS
    PnP in my computer bios. I was having IRQ conflicts between my serial
    mouse and 'com 3'. Both modems work fine for me. My first modem is
    ttyS0 and my second is ttyS1." Special third-party multiport boards
-   such as [137]DigiBoard are available for certain Unix platforms
+   such as [136]DigiBoard are available for certain Unix platforms
    (typically SCO, maybe Linux) that come with special platform-specific
    drivers.
 
 3.0.4. Character Sets
 
-   [ [138]Top ] [ [139]Contents ] [ [140]Section Contents ] [ [141]Next ]
-   [ [142]Previous ]
+   [ [137]Top ] [ [138]Contents ] [ [139]Section Contents ] [ [140]Next ]
+   [ [141]Previous ]
 
    PCs generally have PC code pages such as CP437 or CP850, and these are
    often used by PC-based Unix operating systems, particularly on the
@@ -470,8 +476,8 @@ CONTENTS
 
 3.0.5. Keyboard, Screen, and Mouse Access
 
-   [ [143]Top ] [ [144]Contents ] [ [145]Section Contents ] [ [146]Next ]
-   [ [147]Previous ]
+   [ [142]Top ] [ [143]Contents ] [ [144]Section Contents ] [ [145]Next ]
+   [ [146]Previous ]
 
    Finally, note that as a real operating system, Unix (unlike Windows)
    does not provide the intimate connection to the PC keyboard, screen,
@@ -484,46 +490,46 @@ CONTENTS
     b. Unix sessions can come from anywhere, not just the PC's own
        keyboard and screen; and:
     c. even though it might be possible for an application that actually
-       is running on the PC's keyboard and screen to access these devices
+       is running on the PC's keyboard and screen to accesss these devices
        directly, there are no APIs (outside of X) for this.
 
 3.0.6. Laptops
 
-   [ [148]Top ] [ [149]Contents ] [ [150]Section Contents ] [
-   [151]Previous ]
+   [ [147]Top ] [ [148]Contents ] [ [149]Section Contents ] [
+   [150]Previous ]
 
    (To be filled in . . .)
 
 3.1. C-KERMIT AND AIX
 
-   [ [152]Top ] [ [153]Contents ] [ [154]Section Contents ] [ [155]Next ]
-   [ [156]Previous ]
+   [ [151]Top ] [ [152]Contents ] [ [153]Section Contents ] [ [154]Next ]
+   [ [155]Previous ]
 
    SECTION CONTENTS
 
-  3.1.1. [157]AIX: General
-  3.1.2. [158]AIX: Network Connections
-  3.1.3. [159]AIX: Serial Connections
-  3.1.4. [160]AIX: File Transfer
-  3.1.5. [161]AIX: Xterm Key Map
+  3.1.1. [156]AIX: General
+  3.1.2. [157]AIX: Network Connections
+  3.1.3. [158]AIX: Serial Connections
+  3.1.4. [159]AIX: File Transfer
+  3.1.5. [160]AIX: Xterm Key Map
 
    For additional information see:
-     * [162]http://www.emerson.emory.edu/services/aix-faq/
-     * [163]http://www.faqs.org/faqs/by-newsgroup/comp/comp.unix.aix.html
-     * [164]http://www.cis.ohio-state.edu/hypertext/faq/usenet/aix-faq/top
+     * [161]http://www.emerson.emory.edu/services/aix-faq/
+     * [162]http://www.faqs.org/faqs/by-newsgroup/comp/comp.unix.aix.html
+     * [163]http://www.cis.ohio-state.edu/hypertext/faq/usenet/aix-faq/top
        .html
-     * [165]http://aixpdslib.seas.ucla.edu/
-     * [166]http://www.rootvg.net (AIX history)
-     * [167]ftp://rtfm.mit.edu/pub/usenet/news.answers/aix-faq/part1
-     * [168]ftp://mirrors.aol.com/pub/rtfm/usenet-by-hierarchy/comp/unix/a
+     * [164]http://aixpdslib.seas.ucla.edu/
+     * [165]http://www.rootvg.net (AIX history)
+     * [166]ftp://rtfm.mit.edu/pub/usenet/news.answers/aix-faq/part1
+     * [167]ftp://mirrors.aol.com/pub/rtfm/usenet-by-hierarchy/comp/unix/a
        ix
 
-   and/or read the [169]comp.unix.aix newsgroup.
+   and/or read the [168]comp.unix.aix newsgroup.
   ________________________________________________________________________
 
 3.1.1. AIX: General
 
-   [ [170]Top ] [ [171]Contents ] [ [172]Section Contents ] [ [173]Next ]
+   [ [169]Top ] [ [170]Contents ] [ [171]Section Contents ] [ [172]Next ]
 
    About AIX version numbers: "uname -a" tells the two-digit version
    number, such as 3.2 or 4.1. The three-digit form can be seen with the
@@ -542,8 +548,8 @@ CONTENTS
 
 3.1.2. AIX: Network Connections
 
-   [ [174]Top ] [ [175]Contents ] [ [176]Section Contents ] [ [177]Next ]
-   [ [178]Previous ]
+   [ [173]Top ] [ [174]Contents ] [ [175]Section Contents ] [ [176]Next ]
+   [ [177]Previous ]
 
    File transfers into AIX 4.2 or 4.3 through the AIX Telnet or Rlogin
    server have been observed to fail (or accumulate huge numbers of
@@ -557,7 +563,7 @@ CONTENTS
    removed from the picture; e.g, by using "set host * 3000" on AIX.
 
    The problem can be completely cured by replacing the IBM Telnet server
-   with [179]MIT's Kerberos Telnet server -- even if you don't actually
+   with [178]MIT's Kerberos Telnet server -- even if you don't actually
    use the Kerberos part. Diagnosis: AIX pseudoterminals (which are
    controlled by the Telnet server to give you a login terminal for your
    session) have quirks that not even IBM knows about. The situation with
@@ -619,15 +625,15 @@ CONTENTS
 
 3.1.3. AIX: Serial Connections
 
-   [ [180]Top ] [ [181]Contents ] [ [182]Section Contents ] [ [183]Next ]
-   [ [184]Previous ]
+   [ [179]Top ] [ [180]Contents ] [ [181]Section Contents ] [ [182]Next ]
+   [ [183]Previous ]
 
    In AIX 3, 4, or 5, C-Kermit won't be able to "set line /dev/tty0" (or
    any other dialout device) if you haven't installed "cu" or "uucp" on
    your system, because installing these is what creates the UUCP lockfile
-   directory. If SET LINE commands always result in "Sorry, access to lock
-   denied", even when C-Kermit has been given the same owner, group, and
-   permissions as cu:
+   directory. If SET LINE commands always result in "Sorry, accesss to
+   lock denied", even when C-Kermit has been given the same owner, group,
+   and permissions as cu:
 
   -r-sr-xr-x   1 uucp     uucp       67216 Jul 27 1999  cu
 
@@ -713,7 +719,7 @@ CONTENTS
        /dev/tty, as opposed to a specify port device).
     3. Fixes for bugs in the original AIX 4.2 tty (serial i/o) support and
        other AIX bugs are available from IBM at:
-  [185]http://service.software.ibm.com/rs6000/
+  [184]http://service.software.ibm.com/rs6000/
 
        Downloads -> Software Fixes -> Download FixDist gets an application
        for looking up known problems.
@@ -729,8 +735,8 @@ CONTENTS
 
 3.1.4. AIX: File Transfer
 
-   [ [186]Top ] [ [187]Contents ] [ [188]Section Contents ] [ [189]Next ]
-   [ [190]Previous ]
+   [ [185]Top ] [ [186]Contents ] [ [187]Section Contents ] [ [188]Next ]
+   [ [189]Previous ]
 
    Evidently AIX 4.3 (I don't know about earlier versions) does not allow
    open files to be overwritten. This can cause Kermit transfers to fail
@@ -805,8 +811,8 @@ CONTENTS
 
 3.1.5. AIX: Xterm Key Map
 
-   [ [191]Top ] [ [192]Contents ] [ [193]Section Contents ] [
-   [194]Previous ]
+   [ [190]Top ] [ [191]Contents ] [ [192]Section Contents ] [
+   [193]Previous ]
 
    Here is a sample configuration for setting up an xterm keyboard for
    VT220 or higher terminal emulation on AIX, courtesy of Bruce Momjian,
@@ -873,21 +879,21 @@ CONTENTS
 
 3.2. C-KERMIT AND HP-UX
 
-   [ [195]Top ] [ [196]Contents ] [ [197]Section Contents ] [ [198]Next ]
-   [ [199]Previous ]
+   [ [194]Top ] [ [195]Contents ] [ [196]Section Contents ] [ [197]Next ]
+   [ [198]Previous ]
 
    SECTION CONTENTS
 
-  3.2.0. [200]Common Problems
-  3.2.1. [201]Building C-Kermit on HP-UX
-  3.2.2. [202]File Transfer
-  3.2.3. [203]Dialing Out and UUCP Lockfiles in HP-UX
-  3.2.4. [204]Notes on Specific HP-UX Releases
-  3.2.5. [205]HP-UX and X.25
+  3.2.0. [199]Common Problems
+  3.2.1. [200]Building C-Kermit on HP-UX
+  3.2.2. [201]File Transfer
+  3.2.3. [202]Dialing Out and UUCP Lockfiles in HP-UX
+  3.2.4. [203]Notes on Specific HP-UX Releases
+  3.2.5. [204]HP-UX and X.25
 
    REFERENCES
 
-   For further information, read the [206]comp.sys.hp.hpux newsgroup.
+   For further information, read the [205]comp.sys.hp.hpux newsgroup.
 
    C-Kermit is included as part of the HP-UX operating system by contract
    between Hewlett Packard and Columbia University for HP-UX 10.00 and
@@ -908,7 +914,7 @@ CONTENTS
 
 3.2.0. Common Problems
 
-   [ [207]Top ] [ [208]Contents ] [ [209]Section Contents ] [ [210]Next ]
+   [ [206]Top ] [ [207]Contents ] [ [208]Section Contents ] [ [209]Next ]
 
    Some HP workstations have a BREAK/RESET key. If you hit this key while
    C-Kermit is running, it might kill or suspend the C-Kermit process.
@@ -939,8 +945,8 @@ CONTENTS
 
 3.2.1. Building C-Kermit on HP-UX
 
-   [ [211]Top ] [ [212]Contents ] [ [213]Section Contents ] [ [214]Next ]
-   [ [215]Previous ]
+   [ [210]Top ] [ [211]Contents ] [ [212]Section Contents ] [ [213]Next ]
+   [ [214]Previous ]
 
      This section applies mainly to old (pre-10.20) HP-UX version on old,
      slow, and/or memory-constrained hardware.
@@ -969,7 +975,7 @@ CONTENTS
    The optimizing compiler might complain about "some optimizations
    skipped" on certain modules, due to lack of space available to the
    optimizer. You can increase the space (the incantation depends on the
-   particular compiler version -- see the [216]makefile), but doing so
+   particular compiler version -- see the [215]makefile), but doing so
    tends to make the compilations take a much longer time. For example,
    the "hpux0100o+" makefile target adds the "+Onolimit" compiler flag,
    and about an hour to the compile time on an HP-9000/730. But it *does*
@@ -980,8 +986,8 @@ CONTENTS
 
 3.2.2. File Transfer
 
-   [ [217]Top ] [ [218]Contents ] [ [219]Section Contents ] [ [220]Next ]
-   [ [221]Previous ]
+   [ [216]Top ] [ [217]Contents ] [ [218]Section Contents ] [ [219]Next ]
+   [ [220]Previous ]
 
    Telnet connections into HP-UX versions up to and including 11.11 (and
    possibly 11.20) tend not to lend themselves to file transfer due to
@@ -1099,8 +1105,8 @@ CONTENTS
 
 3.2.3. Dialing Out and UUCP Lockfiles in HP-UX
 
-   [ [222]Top ] [ [223]Contents ] [ [224]Section Contents ] [ [225]Next ]
-   [ [226]Previous ]
+   [ [221]Top ] [ [222]Contents ] [ [223]Section Contents ] [ [224]Next ]
+   [ [225]Previous ]
 
    HP workstations do not come with dialout devices configured; you have
    to do it yourself (as root). First look in /dev to see what's there;
@@ -1171,9 +1177,9 @@ CONTENTS
    through a true null modem). Do not use the ttyd<D>p<d> device for
    dialing out.
 
-   Kermit's access to serial devices is controlled by "UUCP lockfiles",
+   Kermit's accesss to serial devices is controlled by "UUCP lockfiles",
    which are intended to prevent different users using different software
-   programs (Kermit, cu, etc, and UUCP itself) from accessing the same
+   programs (Kermit, cu, etc, and UUCP itself) from accesssing the same
    serial device at the same time. When a device is in use by a particular
    user, a file with a special name is created in:
 
@@ -1187,7 +1193,7 @@ CONTENTS
    installed setuid to the owner (bin) of the serial device and setgid to
    the group (daemon) of the /var/spool/locks directory. Kermit's setuid
    and setgid privileges are enabled only when opening the device and
-   accessing the lockfiles.
+   accesssing the lockfiles.
 
    Let's say "unit" means a string of decimal digits (the interface
    instance number) followed (in HP-UX 10.00 and later) by the letter "p"
@@ -1218,7 +1224,7 @@ CONTENTS
 
    In other words, if the device name begins with "cu", a second lockfile
    for the "ttyd" device, same unit, is created, which should prevent
-   dialin access on that device.
+   dialin accesss on that device.
 
    The <other> case allows for symbolic links, etc, but of course it is
    not foolproof since we have no way of telling which device is really
@@ -1249,7 +1255,7 @@ CONTENTS
 
    When the "set line" command succeeds in HP-UX 10.00 and later, C-Kermit
    also creates a Unix System V R4 "advisory lock" as a further precaution
-   (but not guarantee) against any other process obtaining access to the
+   (but not guarantee) against any other process obtaining accesss to the
    device while you are using it.
 
    If the selected device was in use by "cu", Kermit can't open it,
@@ -1304,17 +1310,17 @@ CONTENTS
 
    SECTION CONTENTS
 
-  3.2.4.1. [227]HP-UX 11
-  3.2.4.2. [228]HP-UX 10
-  3.2.4.3. [229]HP-UX 9
-  3.2.4.4. [230]HP-UX 8
-  3.2.4.5. [231]HP-UX 7 and Earlier
+  3.2.4.1. [226]HP-UX 11
+  3.2.4.2. [227]HP-UX 10
+  3.2.4.3. [228]HP-UX 9
+  3.2.4.4. [229]HP-UX 8
+  3.2.4.5. [230]HP-UX 7 and Earlier
 
 3.2.4.1. HP-UX 11
 
-   [ [232]Top ] [ [233]Contents ] [ [234]Section Contents ] [ [235]Next ]
+   [ [231]Top ] [ [232]Contents ] [ [233]Section Contents ] [ [234]Next ]
 
-   As noted in [236]Section 3.2.2, the HP-UX 11 Telnet server and/or
+   As noted in [235]Section 3.2.2, the HP-UX 11 Telnet server and/or
    pseudoterminal driver are a serious impediment to file transfer over
    Telnet connections into HP-UX. If you have a Telnet connection into
    HP-UX 11, tell your desktop Kermit program to:
@@ -1348,8 +1354,8 @@ CONTENTS
 
 3.2.4.2. HP-UX 10
 
-   [ [237]Top ] [ [238]Contents ] [ [239]Section Contents ] [ [240]Next ]
-   [ [241]Previous ]
+   [ [236]Top ] [ [237]Contents ] [ [238]Section Contents ] [ [239]Next ]
+   [ [240]Previous ]
 
    Beginning in HP-UX 10.10, libcurses is linked to libxcurses, the new
    UNIX95 (X/Open) version of curses, which has some serious bugs; some
@@ -1374,8 +1380,8 @@ CONTENTS
 
 3.2.4.3. HP-UX 9
 
-   [ [242]Top ] [ [243]Contents ] [ [244]Section Contents ] [ [245]Next ]
-   [ [246]Previous ]
+   [ [241]Top ] [ [242]Contents ] [ [243]Section Contents ] [ [244]Next ]
+   [ [245]Previous ]
 
    HP-UX 9.00 and 9.01 need patch PHNE_10572 (note: this replaces
    PHNE_3641) for hptt0.o, asio0.o, and ttycomn.o in libhp-ux.a. Contact
@@ -1400,8 +1406,8 @@ CONTENTS
 
 3.2.4.4. HP-UX 8
 
-   [ [247]Top ] [ [248]Contents ] [ [249]Section Contents ] [ [250]Next ]
-   [ [251]Previous ]
+   [ [246]Top ] [ [247]Contents ] [ [248]Section Contents ] [ [249]Next ]
+   [ [250]Previous ]
 
    To make C-Kermit work on HP-UX 8.05 on a model 720, obtain and install
    HP-UX patch PHNE_0899. This patch deals with a lot of driver issues,
@@ -1412,18 +1418,18 @@ CONTENTS
      On HP-UX 8 DON'T install 'tty patch' PHKL_4656, install PHKL_3047
      instead! Yesterday I tried this latest tty patch PHKL_4656 and had
      terrible problems. This patch should fix RTS/CTS problems. With text
-     transver all looks nice. But when I switched over to binary files
+     transfer all looks nice. But when I switched over to binary files
      the serial interface returned only rubish to C-Kermit. All sorts of
      protocol, CRC and packed errors I had. After several tests and after
-     uninstalling that patch, all transvers worked fine. MB's of data
+     uninstalling that patch, all transfers worked fine. MB's of data
      without any errors. So keep your fingers away from that patch. If
      anybody needs the PHKL_3047 patch I have it here. It is no longer
-     availabel from HP's patch base.
+     available from HP's patch base.
 
 3.2.4.5. HP-UX 7 and Earlier
 
-   [ [252]Top ] [ [253]Contents ] [ [254]Section Contents ] [
-   [255]Previous ]
+   [ [251]Top ] [ [252]Contents ] [ [253]Section Contents ] [
+   [254]Previous ]
 
    When transferring files into HP-UX 5 or 6 over a Telnet connection, you
    must not use streaming, and you must not use a packet length greater
@@ -1454,8 +1460,8 @@ CONTENTS
 
 3.2.5. HP-UX and X.25
 
-   [ [256]Top ] [ [257]Contents ] [ [258]Section Contents ] [
-   [259]Previous ]
+   [ [255]Top ] [ [256]Contents ] [ [257]Section Contents ] [
+   [258]Previous ]
 
    Although C-Kermit presently does not include built-in support for HP-UX
    X.25 (as it does for the Sun and IBM X.25 products), it can still be
@@ -1471,17 +1477,17 @@ CONTENTS
 
 3.3. C-KERMIT AND LINUX
 
-   [ [260]Top ] [ [261]Contents ] [ [262]Section Contents ] [ [263]Next ]
-   [ [264]Previous ]
+   [ [259]Top ] [ [260]Contents ] [ [261]Section Contents ] [ [262]Next ]
+   [ [263]Previous ]
 
    SECTION CONTENTS
 
-  3.3.1. [265]Problems Building C-Kermit for Linux
-  3.3.2. [266]Problems with Serial Devices in Linux
-  3.3.3. [267]Terminal Emulation in Linux
-  3.3.4. [268]Dates and Times
-  3.3.5. [269]Startup Errors
-  3.3.6. [270]The Fullscreen File Transfer Display
+  3.3.1. [264]Problems Building C-Kermit for Linux
+  3.3.2. [265]Problems with Serial Devices in Linux
+  3.3.3. [266]Terminal Emulation in Linux
+  3.3.4. [267]Dates and Times
+  3.3.5. [268]Startup Errors
+  3.3.6. [269]The Fullscreen File Transfer Display
 
      (August 2010) Reportedly C-Kermit packages for certain Linux
      distributions such as Centos and Ubuntu have certain features
@@ -1499,7 +1505,7 @@ write(3, "RESOLVE-ADDRESS 255.255.255.255\n", 32)
 
      This is not Kermit Project code. Turns out to be something in
      glibc's resolver, and can be fixed by changing /etc/nsswitch.conf,
-     but it might break other software, such as [271]Avahi or anything
+     but it might break other software, such as [270]Avahi or anything
      (such as Gnome, Java, or Cups) that depends on it. I'm not sure
      where it happens; I don't think Kermit tries to get its IP address
      at startup time, only when it's needed or asked for, e.g. when
@@ -1507,50 +1513,50 @@ write(3, "RESOLVE-ADDRESS 255.255.255.255\n", 32)
 
    REFERENCES
 
-   For further information, read the [272]comp.os.linux.misc,
-   [273]comp.os.linux.answers, and other Linux-oriented newsgroups, and
+   For further information, read the [271]comp.os.linux.misc,
+   [272]comp.os.linux.answers, and other Linux-oriented newsgroups, and
    see:
 
    The Linux Document Project (LDP)
-          [274]http://www.tldp.org/
+          [273]http://www.tldp.org/
 
    The Linux FAQ
-          [275]http://www.tldp.org/FAQ/Linux-FAQ.html
+          [274]http://www.tldp.org/FAQ/Linux-FAQ.html
 
    The Linux HOWTOs (especially the Serial HOWTO)
 
-     [276]http://www.tldp.org/HOWTO/Serial-HOWTO.html
+     [275]http://www.tldp.org/HOWTO/Serial-HOWTO.html
 
-     [277]http://tldp.org/HOWTO/Modem-HOWTO.html
+     [276]http://tldp.org/HOWTO/Modem-HOWTO.html
 
-     [278]ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO
+     [277]ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO
 
-     [279]ftp://tsx-11.mit.edu/pub/linux/docs/HOWTO
+     [278]ftp://tsx-11.mit.edu/pub/linux/docs/HOWTO
 
-     [280]http://www.tldp.org/HOWTO/
+     [279]http://www.tldp.org/HOWTO/
 
-     [281]http://www.tldp.org/hmirrors.html
+     [280]http://www.tldp.org/hmirrors.html
 
    Linux Vendor Tech Support Pages:
 
-     [282]http://www.redhat.com/apps/support/
+     [281]http://www.redhat.com/apps/support/
 
-     [283]http://www.debian.org/support
+     [282]http://www.debian.org/support
 
-     [284]http://www.slackware.com/support/
+     [283]http://www.slackware.com/support/
 
-     [285]http://www.caldera.com/support/
+     [284]http://www.caldera.com/support/
 
-     [286]SUSE Linux Support
+     [285]SUSE Linux Support
 
-     [287]http://www.mandrake.com/support/
+     [286]http://www.mandrake.com/support/
 
-     [288]http://www.turbolinux.com/support/
+     [287]http://www.turbolinux.com/support/
 
    Linux Winmodem Support
-          [289]http://www.linmodems.org/
+          [288]http://www.linmodems.org/
 
-   Also see general comments on PC-based Unixes in [290]Section 3.0.
+   Also see general comments on PC-based Unixes in [289]Section 3.0.
 
    What Linux version is it? -- "uname -a" supplies only kernel
    information, but these days it's the distribution that matters: Red Hat
@@ -1564,17 +1570,17 @@ write(3, "RESOLVE-ADDRESS 255.255.255.255\n", 32)
 
    Did you know: DECnet is available for Linux? See:
 
-  [291]http://linux.dreamtime.org/decnet/
+  [290]http://linux.dreamtime.org/decnet/
 
    (But there is no support for it in C-Kermit -- anybody interested in
-   adding it, please [292]let me know).
+   adding it, please [291]let me know).
 
    Before proceeding, let's handle the some of the most frequently asked
    question in the Linux newsgroups:
 
     1. Neither C-Kermit nor any other Linux application can use Winmodems,
-       except in the [293]rare cases where Linux drivers have been written
-       for them. See [294]Section 3.0.2 for details.
+       except in the [292]rare cases where Linux drivers have been written
+       for them. See [293]Section 3.0.2 for details.
     2. "Why does it take such a long time to make a telnet connection to
        (or from) my Linux PC?" (this applies to C-Kermit and to regular
        Telnet). Most telnet servers these days perform reverse DNS lookups
@@ -1596,9 +1602,9 @@ write(3, "RESOLVE-ADDRESS 255.255.255.255\n", 32)
        thought to be secure, whereas Telnet is thought to be insecure.
        This is true for clear-text Telnet (because passwords travel in the
        clear across the network), but apparently few people realize that
-       [295]secure Telnet clients and servers have been available for
+       [294]secure Telnet clients and servers have been available for
        years, and these are more secure than SSH (for reasons explained
-       [296]HERE).
+       [295]HERE).
     4. (Any question that has the word "FTP" in it...) The knee-jerk
        reaction being "Don't use FTP, use SCP!" (or SFTP). Same answer as
        above, but moreso. SCP and SFTP are not only not platform neutral,
@@ -1612,7 +1618,7 @@ write(3, "RESOLVE-ADDRESS 255.255.255.255\n", 32)
 
 3.3.1. Problems Building C-Kermit for Linux
 
-   [ [297]Top ] [ [298]Contents ] [ [299]Section Contents ] [ [300]Next ]
+   [ [296]Top ] [ [297]Contents ] [ [298]Section Contents ] [ [299]Next ]
 
    Modern Linux distributions like Red Hat give you a choice at
    installation whether to include "developer tools". Obviously, you can't
@@ -1639,17 +1645,17 @@ write(3, "RESOLVE-ADDRESS 255.255.255.255\n", 32)
 
 3.3.2. Problems with Serial Devices in Linux
 
-   [ [301]Top ] [ [302]Contents ] [ [303]Section Contents ] [ [304]Next ]
-   [ [305]Previous ]
+   [ [300]Top ] [ [301]Contents ] [ [302]Section Contents ] [ [303]Next ]
+   [ [304]Previous ]
 
      Also see: "man setserial", "man irqtune".
-     And: [306]Sections 3.0, [307]6, [308]7, and [309]8 of this document.
+     And: [305]Sections 3.0, [306]6, [307]7, and [308]8 of this document.
 
      NOTE: Red Hat Linux 7.2 and later include a new API that allows
      serial-port arbitration by non-setuid/gid programs. This API has not
      yet been added to C-Kermit. If C-Kermit is to be used for dialing
      out on Red Hat 7.2 or later, it must still be installed as described
-     in in Sections [310]10 and [311]11 of the [312]Installation
+     in in Sections [309]10 and [310]11 of the [311]Installation
      Instructions.
 
    Don't expect it to be easy. Queries like the following are posted to
@@ -1662,7 +1668,7 @@ write(3, "RESOLVE-ADDRESS 255.255.255.255\n", 32)
      I have <some recent SuSE distribution>, kernel 2.0.35. Using the
      Compaq tells me that the modem (which is internal) is on COM2, with
      the usual IRQ and port numbers. Running various Windows diagnostics
-     show me AT-style commands exchanged so I have no reason to beleive
+     show me AT-style commands exchanged so I have no reason to believe
      that it is a Winmodem. Also, the diagnostics under Win98 tell me
      that I am talking to an NS 16550AN.
 
@@ -1729,7 +1735,7 @@ $ cat /proc/interrupts
   15:          6          XT-PIC  ide1
 
    Watch out for PCI, PCMCIA and Plug-n-Play devices, Winmodems, and the
-   like (see cautions in [313]Section 3.0 Linux supports Plug-n-Play
+   like (see cautions in [312]Section 3.0 Linux supports Plug-n-Play
    devices to some degree via the isapnp and pnpdump programs; read the
    man pages for them. (If you don't have them, look on your installation
    CD for isapnptool or download it from sunsite or a sunsite mirror or
@@ -1804,7 +1810,7 @@ $ cat /proc/interrupts
    will phase (have phased) it out in favor of the ttyS device. See (if
    it's still there):
 
-  [314]http://linuxwww.db.erau.edu/mail_archives/linux-kernel/Mar_98/1441.html
+  [313]http://linuxwww.db.erau.edu/mail_archives/linux-kernel/Mar_98/1441.html
 
    (no, of course it isn't; you'll have to use your imagination). One user
    reported that C-Kermit 7.0, when built with egcs 1.1.2 and run on Linux
@@ -1825,11 +1831,11 @@ $ cat /proc/interrupts
 
 3.3.3. Terminal Emulation in Linux
 
-   [ [315]Top ] [ [316]Contents ] [ [317]Section Contents ] [ [318]Next ]
-   [ [319]Previous ]
+   [ [314]Top ] [ [315]Contents ] [ [316]Section Contents ] [ [317]Next ]
+   [ [318]Previous ]
 
    C-Kermit is not a terminal emulator. For a brief explanation of why
-   not, see [320]Section 3.0.5. For a fuller explanation, [321]ClICK HERE.
+   not, see [319]Section 3.0.5. For a fuller explanation, [320]ClICK HERE.
 
    In Unix, terminal emulation is supplied by the Window in which you run
    Kermit: the regular console screen, which provides Linux Console
@@ -1837,7 +1843,7 @@ $ cat /proc/interrupts
    xterm window, which gives VTxxx emulation. An xterm that includes color
    ANSI and VT220 emulation is available with Xfree86:
 
-  [322]http://dickey.his.com/xterm/xterm.html
+  [321]http://dickey.his.com/xterm/xterm.html
 
    Before starting C-Kermit in an xterm window, you might need to tell the
    xterm window's shell to "stty sane".
@@ -1872,27 +1878,27 @@ $ cat /proc/interrupts
    Console-mode keys are mapped separately using loadkeys, and different
    keycodes are used. Find out what they are with showkey.
 
-   For a much more complete VT220/320 key mapping for [323]Xfree86 xterm,
-   [324]CLICK HERE.
+   For a much more complete VT220/320 key mapping for [322]Xfree86 xterm,
+   [323]CLICK HERE.
 
 3.3.4. Dates and Times
 
-   [ [325]Top ] [ [326]Contents ] [ [327]Section Contents ] [ [328]Next ]
-   [ [329]Previous ]
+   [ [324]Top ] [ [325]Contents ] [ [326]Section Contents ] [ [327]Next ]
+   [ [328]Previous ]
 
    If C-Kermit's date-time (e.g. as shown by its DATE command) differs
    from the system's date and time:
 
     a. Make sure the libc to which Kermit is linked is set to GMT or is
        not set to any time zone. Watch out for mixed libc5/libc6 systems;
-       each must be set indpendently.
+       each must be set independently.
     b. If you have changed your TZ environment variable, make sure it is
        exported. This is normally done in /etc/profile or /etc/TZ.
 
 3.3.5. Startup Errors
 
-   [ [330]Top ] [ [331]Contents ] [ [332]Section Contents ] [ [333]Next ]
-   [ [334]Previous ]
+   [ [329]Top ] [ [330]Contents ] [ [331]Section Contents ] [ [332]Next ]
+   [ [333]Previous ]
 
    C-Kermit should work on all versions of Linux current through March
    2003, provided it was built on the same version you have, with the same
@@ -1902,8 +1908,8 @@ $ cat /proc/interrupts
    C-Kermit binary will not stop working at a later date, since Linux
    tends to change out from under its applications. If that happens,
    rebuild C-Kermit from source. If something goes wrong with the build
-   process, look on the [335]C-Kermit website for a newer version. If you
-   have the latest version, then [336]report the problem to us.
+   process, look on the [334]C-Kermit website for a newer version. If you
+   have the latest version, then [335]report the problem to us.
 
    Inability to transfer files in Red Hat 7.2: the typical symptom would
    be if you start Kermit and tell it to RECEIVE, it fails right away with
@@ -1921,7 +1927,7 @@ $ cat /proc/interrupts
    assigning a controlling TTY for the session, which would make most use
    of "/dev/tty" somewhat less than useful.
 
-  [337]http://www.redhat.com/support/errata/RHBA-2001-153.html
+  [336]http://www.redhat.com/support/errata/RHBA-2001-153.html
 
    Quoting: "Due to terminal handling problems in /bin/login, tcsh would
    not find the controlling terminal correctly, and a shell in single user
@@ -1933,7 +1939,7 @@ $ cat /proc/interrupts
    Kermit RPM for Red Hat Linux, not working; either it won't start at
    all, or it gives error messages about "terminal type unknown" and
    refuses to initialize its curses support. The following is from the
-   [338]Kermit newsgroup:
+   [337]Kermit newsgroup:
 
      From: rchandra@hal9000.buf.servtech.com
      Newsgroups: comp.protocols.kermit.misc
@@ -1971,7 +1977,7 @@ $ cat /proc/interrupts
   ln -s /usr/share/terminfo /usr/lib/terminfo
 
      So what this says is that the terminfo database/directory structure
-     can be accessed by either path. When something goes to reference
+     can be accesssed by either path. When something goes to reference
      /usr/lib/terminfo, the symlink redirects it to essentially
      /usr/share/terminfo, which is where it really resides on your
      system. I personally prefer wherever possible to use relative
@@ -1985,8 +1991,8 @@ $ cat /proc/interrupts
 
 3.3.6. The Fullscreen File Transfer Display
 
-   [ [339]Top ] [ [340]Contents ] [ [341]Section Contents ] [
-   [342]Previous ]
+   [ [338]Top ] [ [339]Contents ] [ [340]Section Contents ] [
+   [341]Previous ]
 
    Starting with ncurses versions dated 1998-12-12 (about a year before
    ncurses 5.0), ncurses sets the terminal for buffered i/o, but
@@ -2013,8 +2019,8 @@ $ cat /proc/interrupts
 
 3.4. C-KERMIT AND NEXTSTEP
 
-   [ [343]Top ] [ [344]Contents ] [ [345]Section Contents ] [ [346]Next ]
-   [ [347]Previous ]
+   [ [342]Top ] [ [343]Contents ] [ [344]Section Contents ] [ [345]Next ]
+   [ [346]Previous ]
 
    Run C-Kermit in a Terminal, Stuart, or xterm window, or when logged in
    remotely through a serial port or TELNET connection. C-Kermit does not
@@ -2071,10 +2077,10 @@ $ cat /proc/interrupts
 
 3.5. C-KERMIT AND QNX
 
-   [ [348]Top ] [ [349]Contents ] [ [350]Section Contents ] [ [351]Next ]
-   [ [352]Previous ]
+   [ [347]Top ] [ [348]Contents ] [ [349]Section Contents ] [ [350]Next ]
+   [ [351]Previous ]
 
-   See also: The [353]comp.os.qnx newsgroup.
+   See also: The [352]comp.os.qnx newsgroup.
 
    Support for QNX 4.x was added in C-Kermit 5A(190). This is a
    full-function implementation, thoroughly tested on QNX 4.21 and later,
@@ -2083,7 +2089,7 @@ $ cat /proc/interrupts
    successfully (after stripping most most features, I succeeded in
    getting it to compile and link without complaint, but the executable
    just beeps when you run it); for 16-bit QNX 4.2x, use C-Kermit 6.0 or
-   earlier, or else [354]G-Kermit.
+   earlier, or else [353]G-Kermit.
 
    The 32-bit version (and the 16-bit version prior to C-Kermit 7.0)
    supports most of C-Kermit's advanced features including TCP/IP, high
@@ -2112,8 +2118,8 @@ $ cat /proc/interrupts
    UUCP line locking. If you have a UUCP product installed on your QNX
    system, remove the -DNOUUCP switch from the makefile entry and rebuild.
    Then check to see that Kermit's UUCP lockfile conventions are the same
-   as those of your UUCP package; if not, read the [355]UUCP lockfile
-   section of the [356]Installation Instructions and make the necessary
+   as those of your UUCP package; if not, read the [354]UUCP lockfile
+   section of the [355]Installation Instructions and make the necessary
    changes to the makefile entry (e.g. add -DHDBUUCP).
 
    QNX does, however, allow a program to get the device open count. This
@@ -2139,62 +2145,62 @@ $ cat /proc/interrupts
 
 3.6. C-KERMIT AND SCO
 
-   [ [357]Top ] [ [358]Contents ] [ [359]Section Contents ] [ [360]Next ]
-   [ [361]Previous ]
+   [ [356]Top ] [ [357]Contents ] [ [358]Section Contents ] [ [359]Next ]
+   [ [360]Previous ]
 
    SECTION CONTENTS
 
-3.6.1. [362]SCO XENIX
-3.6.2. [363]SCO UNIX and OSR5
-3.6.3. [364]Unixware
-3.6.4. [365]Open UNIX 8
+3.6.1. [361]SCO XENIX
+3.6.2. [362]SCO UNIX and OSR5
+3.6.3. [363]Unixware
+3.6.4. [364]Open UNIX 8
 
    REFERENCES
 
      * The comp.unix.sco.* newsgroups.
-     * [366]Section 3.10 below for Unixware.
+     * [365]Section 3.10 below for Unixware.
      * The following FAQs:
 
         The comp.sco.misc FAQ:
-                [367]http://aplawrence.com/SCOFAQ/
+                [366]http://aplawrence.com/SCOFAQ/
 
         Caldera (SCO) comp.unix.sco.programmer FAQ:
-                [368]http://www.zenez.com/cgi-bin/scoprogfaq/faq.pl
+                [367]http://www.zenez.com/cgi-bin/scoprogfaq/faq.pl
 
         The UnixWare 7/OpenUNIX 8 FAQ:
-                [369]http://www.zenez.com/cgi-bin/scouw7faq/faq.pl
-                [370]http://zenez.pcunix.com/cgi-bin/scouw7faq/faq.pl
+                [368]http://www.zenez.com/cgi-bin/scouw7faq/faq.pl
+                [369]http://zenez.pcunix.com/cgi-bin/scouw7faq/faq.pl
 
         High Speed Modems for SCO Unix:
-                [371]http://pcunix.com/Unixart/modems.html
+                [370]http://pcunix.com/Unixart/modems.html
 
         The UnixWare FAQ
-                [372]http://www.freebird.org/faq/
+                [371]http://www.freebird.org/faq/
 
         The UnixWare 1.x and 2.0 Programmer FAQ
-                [373]http://www.freebird.org/faq/developer.html
+                [372]http://www.freebird.org/faq/developer.html
 
         Caldera Support Knowledge Base
-                [374]http://support.caldera.com/caldera
+                [373]http://support.caldera.com/caldera
 
-        [375]http://stage.caldera.com/ta/
+        [374]http://stage.caldera.com/ta/
                 Caldera (SCO) Technical Article Search Center
 
-        [376]http://aplawrence.com/newtosco.html
+        [375]http://aplawrence.com/newtosco.html
                 New to SCO (Tony Lawrence)
 
    The same comments regarding terminal emulation and key mapping apply to
    SCO operating systems as to all other Unixes. C-Kermit is not a
    terminal emulator, and you can't use it to map F-keys, Arrow keys, etc.
    The way to do this is with xmodmap (xterm) or loadkeys (console). For a
-   brief explanation, see [377]Section 3.0.5. For a fuller explanation,
-   [378]ClICK HERE.
+   brief explanation, see [376]Section 3.0.5. For a fuller explanation,
+   [377]ClICK HERE.
 
-   Also see general comments on PC-based Unixes in [379]Section 3.0.
+   Also see general comments on PC-based Unixes in [378]Section 3.0.
 
 3.6.1. SCO XENIX
 
-   [ [380]Top ] [ [381]Contents ] [ [382]Section Contents ] [ [383]Next ]
+   [ [379]Top ] [ [380]Contents ] [ [381]Section Contents ] [ [382]Next ]
 
    Old Xenix versions... Did you know: Xenix 3.0 is *older* than Xenix
    2.0?
@@ -2203,7 +2209,7 @@ $ cat /proc/interrupts
    DTR to hang up a modem does not work. DTR goes down but does not come
    up again. Workaround: Use SET MODEM HANGUP-METHOD MODEM-COMMAND.
    Anybody who would like to fix this is welcome to take a look at
-   tthang() in [384]ckutio.c. Also: modem signals can not be read in
+   tthang() in [383]ckutio.c. Also: modem signals can not be read in
    Xenix, and the maximum serial speed is 38400.
 
    There is all sorts of confusion among SCO versions, particularly when
@@ -2216,15 +2222,15 @@ $ cat /proc/interrupts
    Xenix 2.3.0 and later claim to support RTSFLOW and CTSFLOW, but this is
    not modern bidirectional hardware flow control; rather it implements
    the original RS-232 meanings of these signals for unidirectional
-   half-duplex line access: If both RTSFLOW and CTSFLOW bits are set,
+   half-duplex line accesss: If both RTSFLOW and CTSFLOW bits are set,
    Xenix asserts RTS when it wants to send data and waits for CTS
    assertion before it actually starts sending data (also, reportedly,
    even this is broken in Xenix 2.3.0 and 2.3.1).
 
 3.6.2. SCO UNIX AND OSR5
 
-   [ [385]Top ] [ [386]Contents ] [ [387]Section Contents ] [ [388]Next ]
-   [ [389]Previous ]
+   [ [384]Top ] [ [385]Contents ] [ [386]Section Contents ] [ [387]Next ]
+   [ [388]Previous ]
 
    SCO systems tend to use different names (i.e. drivers) for the same
    device. Typically /dev/tty1a refers to a terminal device that has no
@@ -2239,7 +2245,7 @@ $ cat /proc/interrupts
    signals. Thus "show comm" does not list modem signals, and C-Kermit
    does not automatically pop back to its prompt when the modem hangs up
    the connection (drops CD). The ioctl() call for this is simply not
-   implmented, at least not in the standard drivers. OSR5.0.6 attempts to
+   implemented, at least not in the standard drivers. OSR5.0.6 attempts to
    deal with modem signals but fails; however OSR5.0.6a appears to
    function properly.
 
@@ -2256,7 +2262,7 @@ $ cat /proc/interrupts
    using third-party drivers. (Example: hardware flow control works,
    reportedly, only on uppercase device like tty1A -- not tty1a -- and
    only when CLOCAL is clear when using the SCO sio driver, but there are
-   no such restrictions in, e.g., [390]Digiboard drivers).
+   no such restrictions in, e.g., [389]Digiboard drivers).
 
    One user reports that he can't transfer large files with C-Kermit under
    SCO OSR5.0.0 and 5.0.4 -- after the first 5K, everything falls apart.
@@ -2264,7 +2270,7 @@ $ cat /proc/interrupts
    Later, he said that replacing SCO's SIO driver with FAS, an alternative
    communications driver, made the problem go away:
 
-  [391]ftp://ftp.fu-berlin.de/pub/unix/driver/fas
+  [390]ftp://ftp.fu-berlin.de/pub/unix/driver/fas
 
    With regard to bidirectional serial ports on OpenServer 5.0.4, the
    following advice appeared on an SCO-related newsgroup:
@@ -2299,14 +2305,14 @@ $ cat /proc/interrupts
 
    One SCO user of C-Kermit 5A(190) reported that only one copy of Kermit
    can run at a time when a Stallion Technologies multiport boards are
-   installed. Cause, cure, and present status unknown (see [392]Section 14
+   installed. Cause, cure, and present status unknown (see [391]Section 14
    for more info regarding Stallion).
 
    Prior to SCO OpenServer 5.0.4, the highest serial port speed supported
    by SCO was 38400. However, in some SCO versions (e.g. OSR5) it is
    possible to map rarely-used lower speeds (like 600 and 1800) to higher
    ones like 57600 and 115200. To find out how, go to
-   [393]http://www.sco.com/ and search for "115200". In OSR5.0.4, serial
+   [392]http://www.sco.com/ and search for "115200". In OSR5.0.4, serial
    speeds up to 921600 are supported through the POSIX interface; C-Kermit
    6.1.193 or later, when built for OSR5.0.4 using /bin/cc (NOT the UDK,
    which hides the high-speed definitions from CPP), supports these
@@ -2329,7 +2335,7 @@ $ cat /proc/interrupts
     SCO OpenServer Release 5.0.4 or later
     SCO Internet FastStart Release 1.0.0 or later
 
-   SCO supplements are at [394]ftp://ftp.sco.com/; the "rs40" series are
+   SCO supplements are at [393]ftp://ftp.sco.com/; the "rs40" series are
    under directory /Supplements/internet
 
    Kermit includes the high serial speeds in all OSR5 builds, but that
@@ -2382,11 +2388,11 @@ $ cat /proc/interrupts
 
 3.6.3. Unixware
 
-   [ [395]Top ] [ [396]Contents ] [ [397]Section Contents ] [ [398]Next ]
-   [ [399]Previous ]
+   [ [394]Top ] [ [395]Contents ] [ [396]Section Contents ] [ [397]Next ]
+   [ [398]Previous ]
 
    Unixware changed hands several times before landing at SCO, and so has
-   its [400]own section in this document. (Briefly: AT&T UNIX Systems
+   its [399]own section in this document. (Briefly: AT&T UNIX Systems
    Laboratories sold the rights to the UNIX name and to System V R4 (or
    R5?) to Novell; later Novell spun its UNIX division off into a new
    company called Univel, which eventually was bought by SCO, which later
@@ -2394,8 +2400,8 @@ $ cat /proc/interrupts
 
 3.6.4. Open UNIX 8
 
-   [ [401]Top ] [ [402]Contents ] [ [403]Section Contents ] [
-   [404]Previous ]
+   [ [400]Top ] [ [401]Contents ] [ [402]Section Contents ] [
+   [403]Previous ]
 
    SCO was bought by Caldera in 2000 or 2001 and evolved Unixware 7.1 into
    Caldera Open UNIX 8.00. It's just like Unixware 7.1 as far as Kermit is
@@ -2407,47 +2413,47 @@ $ cat /proc/interrupts
 
 3.7. C-KERMIT AND SOLARIS
 
-   [ [405]Top ] [ [406]Contents ] [ [407]Section Contents ] [ [408]Next ]
-   [ [409]Previous ]
+   [ [404]Top ] [ [405]Contents ] [ [406]Section Contents ] [ [407]Next ]
+   [ [408]Previous ]
 
    SECTION CONTENTS
 
-3.7.1. [410]Serial Port Configuration
-3.7.2. [411]Serial Port Problems
-3.7.3. [412]SunLink X.25
-3.7.4. [413]Sun Workstation Keyboard Mapping
-3.7.5. [414]Solaris 2.4 and Earlier
+3.7.1. [409]Serial Port Configuration
+3.7.2. [410]Serial Port Problems
+3.7.3. [411]SunLink X.25
+3.7.4. [412]Sun Workstation Keyboard Mapping
+3.7.5. [413]Solaris 2.4 and Earlier
 
    REFERENCES
 
-     * The [415]comp.unix.solaris newsgroup
-     * [416]http://access1.sun.com/
-     * [417]http://docs.sun.com/
-     * [418]http://www.sunhelp.com/
-     * [419]http://www.wins.uva.nl/pub/solaris/solaris2/
-     * [420]http://www.wins.uva.nl/cgi-bin/sfaq.cgi
-     * [421]ftp://ftp.wins.uva.nl/pub/solaris
-     * [422]http://www.science.uva.nl/pub/solaris/solaris2.html
+     * The [414]comp.unix.solaris newsgroup
+     * [415]http://accesss1.sun.com/
+     * [416]http://docs.sun.com/
+     * [417]http://www.sunhelp.com/
+     * [418]http://www.wins.uva.nl/pub/solaris/solaris2/
+     * [419]http://www.wins.uva.nl/cgi-bin/sfaq.cgi
+     * [420]ftp://ftp.wins.uva.nl/pub/solaris
+     * [421]http://www.science.uva.nl/pub/solaris/solaris2.html
 
    And about serial communications in particular, see "Celeste's Tutorial
    on Solaris 2.x Modems and Terminals":
 
-  [423]http://www.stokely.com/
+  [422]http://www.stokely.com/
 
    In particular:
 
-  [424]http://www.stokely.com/unix.sysadm.resources/faqs.sun.html
+  [423]http://www.stokely.com/unix.sysadm.resources/faqs.sun.html
 
    For PC-based Solaris, also see general comments on PC-based Unixes in
-   [425]Section 3.0. Don't expect Solaris or any other kind of Unix to
+   [424]Section 3.0. Don't expect Solaris or any other kind of Unix to
    work right on a PC until you resolve all interrupt conflicts. Don't
    expect to be able to use COM3 or COM4 (or even COM2) until you have
    configured their addresses and interrupts.
 
 3.7.1. Serial Port Configuration
 
-   [ [426]Top ] [ [427]Contents ] [ [428]Section Contents ] [ [429]Section
-   Contents ] [ [430]Next ]
+   [ [425]Top ] [ [426]Contents ] [ [427]Section Contents ] [ [428]Section
+   Contents ] [ [429]Next ]
 
    Your serial port can't be used -- or at least won't work right -- until
    it is enabled in Solaris. For example, you get a message like "SERIAL:
@@ -2495,8 +2501,8 @@ $ cat /proc/interrupts
 
 3.7.2. Serial Port Problems
 
-   [ [431]Top ] [ [432]Contents ] [ [433]Section Contents ] [ [434]Next ]
-   [ [435]Previous ]
+   [ [430]Top ] [ [431]Contents ] [ [432]Section Contents ] [ [433]Next ]
+   [ [434]Previous ]
 
    Current advice from Sun is to always the /dev/cua/x devices for dialing
    out, rather than the /dev/term/x. Nevertheless, if you have trouble
@@ -2509,8 +2515,8 @@ $ cat /proc/interrupts
 
 3.7.3. SunLink X.25
 
-   [ [436]Top ] [ [437]Contents ] [ [438]Section Contents ] [ [439]Next ]
-   [ [440]Previous ]
+   [ [435]Top ] [ [436]Contents ] [ [437]Section Contents ] [ [438]Next ]
+   [ [439]Previous ]
 
    The built-in SunLink X.25 support for Solaris 2.3/2.4./25 and SunLink
    8.01 or 9.00 works OK provided the X.25 system has been installed and
@@ -2550,11 +2556,11 @@ $ cat /proc/interrupts
 
 3.7.4. Sun Workstation Keyboard Mapping
 
-   [ [441]Top ] [ [442]Contents ] [ [443]Section Contents ] [ [444]Next ]
-   [ [445]Previous ]
+   [ [440]Top ] [ [441]Contents ] [ [442]Section Contents ] [ [443]Next ]
+   [ [444]Previous ]
 
    Hints for using a Sun workstation keyboard for VT emulation when
-   accessing VMS, from the [446]comp.os.vms newsgroup:
+   accesssing VMS, from the [445]comp.os.vms newsgroup:
 
      From: Jerry Leichter <leichter@smarts.com>
      Newsgroups: comp.os.vms
@@ -2630,8 +2636,8 @@ $ cat /proc/interrupts
 
 3.7.5. Solaris PPP Connections
 
-   [ [447]Top ] [ [448]Contents ] [ [449]Section Contents ] [ [450]Next ]
-   [ [451]Previous ]
+   [ [446]Top ] [ [447]Contents ] [ [448]Section Contents ] [ [449]Next ]
+   [ [450]Previous ]
 
    The following is a report from a user of C-Kermit 8.0 on Solaris 8 and
    9, who had complained that while Kermit file transfers worked perfectly
@@ -2652,7 +2658,7 @@ $ cat /proc/interrupts
      specifying /dev/cua/a would fail because of permissions. Greg
      finally put the question to the ppp people, who came back with
      information that is not laid out anywhere in the docs available for
-     Solaris users. Namely, put /dev/cua/a in one of the priviledged
+     Solaris users. Namely, put /dev/cua/a in one of the privileged
      options files in the /etc/ppp directory. That, plus resetting the
      OBP ttya-ignore-cd flag (this is Sun hardware) to false, seems to
      have solved the problems.
@@ -2676,8 +2682,8 @@ $ cat /proc/interrupts
 
 3.7.6. Solaris 2.4 and Earlier
 
-   [ [452]Top ] [ [453]Contents ] [ [454]Section Contents ] [
-   [455]Previous ]
+   [ [451]Top ] [ [452]Contents ] [ [453]Section Contents ] [
+   [454]Previous ]
 
    C-Kermit can't be compiled successfully under Solaris 2.3 using
    SUNWspro cc 2.0.1 unless at least some of the following patches are
@@ -2810,22 +2816,22 @@ $ cat /proc/interrupts
 
 3.8. C-KERMIT AND SUNOS
 
-   [ [456]Top ] [ [457]Contents ] [ [458]Section Contents ] [ [459]Next ]
-   [ [460]Previous ]
+   [ [455]Top ] [ [456]Contents ] [ [457]Section Contents ] [ [458]Next ]
+   [ [459]Previous ]
 
    For additional information, see "Celeste's Tutorial on SunOS 4.1.3+
    Modems and Terminals":
 
-  [461]http://www.stokely.com/
+  [460]http://www.stokely.com/
 
    For FAQs, etc, from Sun, see:
-     * [462]http://access1.sun.com/
+     * [461]http://accesss1.sun.com/
 
    For history of Sun models and SunOS versions, see (should be all the
    same):
-     * [463]http://www.ludd.luth.se/~bear/project/sun/sun.hardware.txt
-     * [464]ftp://ftp.netcom.com/pub/ru/rubicon/sun.hdwr.ref
-     * [465]ftp://ftp.intnet.net/pub/SUN/Sun-Hardware-Ref
+     * [462]http://www.ludd.luth.se/~bear/project/sun/sun.hardware.txt
+     * [463]ftp://ftp.netcom.com/pub/ru/rubicon/sun.hdwr.ref
+     * [464]ftp://ftp.intnet.net/pub/SUN/Sun-Hardware-Ref
 
    Sun SPARCstation users should read the section "Setting up Modem
    Software" in the Desktop SPARC Sun System & Network Manager's Guide. If
@@ -2901,10 +2907,10 @@ $ cat /proc/interrupts
 
 3.9. C-KERMIT AND ULTRIX
 
-   [ [466]Top ] [ [467]Contents ] [ [468]Section Contents ] [ [469]Next ]
-   [ [470]Previous ]
+   [ [465]Top ] [ [466]Contents ] [ [467]Section Contents ] [ [468]Next ]
+   [ [469]Previous ]
 
-   See also: The [471]comp.unix.ultrix and [472]comp.sys.dec newsgroups.
+   See also: The [470]comp.unix.ultrix and [471]comp.sys.dec newsgroups.
 
    There is no hardware flow control in Ultrix. That's not a Kermit
    deficiency, but an Ultrix one.
@@ -2945,18 +2951,18 @@ $ cat /proc/interrupts
 
 3.10. C-KERMIT AND UNIXWARE
 
-   [ [473]Top ] [ [474]Contents ] [ [475]Section Contents ] [ [476]Next ]
-   [ [477]Previous ]
+   [ [472]Top ] [ [473]Contents ] [ [474]Section Contents ] [ [475]Next ]
+   [ [476]Previous ]
 
    See also:
      * The Freebird Project (Unixware software repository)
-       [478]http://www.freebird.org/
-     * The UnixWare FAQ: [479]http://www.freebird.org/faq/
+       [477]http://www.freebird.org/
+     * The UnixWare FAQ: [478]http://www.freebird.org/faq/
      * The following newsgroups:
-          + [480]comp.unix.unixware.misc
-          + [481]comp.unix.sco.misc.
+          + [479]comp.unix.unixware.misc
+          + [480]comp.unix.sco.misc.
 
-   Also see general comments on PC-based Unixes in [482]Section 3.0. By
+   Also see general comments on PC-based Unixes in [481]Section 3.0. By
    the way, this section is separate from the SCO (Caldera) section
    because at the time this section was started, Unixware was owned by a
    company called Univel. Later it was sold to Novell, and then to SCO.
@@ -2994,13 +3000,13 @@ $ cat /proc/interrupts
 
    HOWEVER, turning on POSIX features engages all of the "#if
    (!_POSIX_SOURCE)" clauses in the UnixWare header files, which in turn
-   prevent us from having modem signals, access to the hardware flow
+   prevent us from having modem signals, accesss to the hardware flow
    control APIs, select(), etc -- in short, all the other things we need
    in communications software, especially when high speeds are used. Oh
    the irony. And so C-Kermit must be shamelessly butchered -- as it has
    been so many times before -- to allow us to have the needed features
    from the POSIX and non-POSIX worlds. See the UNIXWAREPOSIX sections of
-   [483]ckutio.c.
+   [482]ckutio.c.
 
    After the butchery, we wind up with Unixware 2.x having full
    modem-signal capability, but politically-correct Unixware 7.x lacking
@@ -3058,8 +3064,8 @@ $ cat /proc/interrupts
 
 3.11. C-KERMIT AND APOLLO SR10
 
-   [ [484]Top ] [ [485]Contents ] [ [486]Section Contents ] [ [487]Next ]
-   [ [488]Previous ]
+   [ [483]Top ] [ [484]Contents ] [ [485]Section Contents ] [ [486]Next ]
+   [ [487]Previous ]
 
    Reportedly, version 5A(190), when built under Apollo SR10 using "make
    sr10-bsd", compiles, links, and executes OK, but leaves the terminal
@@ -3073,8 +3079,8 @@ $ cat /proc/interrupts
 
 3.12. C-KERMIT AND TANDY XENIX 3.0
 
-   [ [489]Top ] [ [490]Contents ] [ [491]Section Contents ] [ [492]Next ]
-   [ [493]Previous ]
+   [ [488]Top ] [ [489]Contents ] [ [490]Section Contents ] [ [491]Next ]
+   [ [492]Previous ]
 
    C-Kermit 7.0 was too big to be built on Tandy Xenix, even in a minimum
    configuration; version 6.0 is the last one that fits.
@@ -3090,8 +3096,8 @@ $ cat /proc/interrupts
 
 3.13. C-KERMIT AND OSF/1 (DIGITAL UNIX) (TRU64 UNIX)
 
-   [ [494]Top ] [ [495]Contents ] [ [496]Section Contents ] [ [497]Next ]
-   [ [498]Previous ]
+   [ [493]Top ] [ [494]Contents ] [ [495]Section Contents ] [ [496]Next ]
+   [ [497]Previous ]
 
    While putting together and testing C-Kermit 8.0, it was discovered that
    binaries built for one version of Tru64 Unix (e.g. 4.0G) might exhibit
@@ -3131,8 +3137,8 @@ $ cat /proc/interrupts
    Digital Unix 3.2 evidently wants to believe your terminal is one line
    longer than you say it is, e.g. when a "more" or "man" command is
    given. This is has nothing to do with C-Kermit, but tends to annoy
-   those who use Kermit or other terminal emulators to access Digital Unix
-   systems. Workaround: tell Unix to "stty rows 23" (or whatever).
+   those who use Kermit or other terminal emulators to accesss Digital
+   Unix systems. Workaround: tell Unix to "stty rows 23" (or whatever).
 
    Reportedly, there is some bizarre behavior when trying to use a version
    of C-Kermit built on one Digital Unix 4.0 system on another one,
@@ -3145,7 +3151,7 @@ $ cat /proc/interrupts
    SCREEN commands always send ANSI escape sequences -- even though curses
    knows your actual terminal type.
 
-   Reportedy the Tru64 Unix 4.0E 1091 Telnet server does not tolerate
+   Reportedly the Tru64 Unix 4.0E 1091 Telnet server does not tolerate
    streaming transfers into itself, at least not when the sending Kermit
    is on the same local network. Solution: tell one Kermit or the other
    (or both) to "set streaming off". This might or might be the case with
@@ -3153,15 +3159,15 @@ $ cat /proc/interrupts
 
 3.14. C-KERMIT AND SGI IRIX
 
-   [ [499]Top ] [ [500]Contents ] [ [501]Section Contents ] [ [502]Next ]
-   [ [503]Previous ]
+   [ [498]Top ] [ [499]Contents ] [ [500]Section Contents ] [ [501]Next ]
+   [ [502]Previous ]
 
    See also:
-     * The [504]comp.sys.sgi.misc and [505]comp.sys.sgi.admin newsgroups.
-       [506]The SGI website
+     * The [503]comp.sys.sgi.misc and [504]comp.sys.sgi.admin newsgroups.
+       [505]The SGI website
      * The SGI FAQ:
-          + [507]http://www-viz.tamu.edu/~sgi-faq/
-          + [508]ftp://viz.tamu.edu/pub/sgi/faq/
+          + [506]http://www-viz.tamu.edu/~sgi-faq/
+          + [507]ftp://viz.tamu.edu/pub/sgi/faq/
 
    About IRIX version numbers: "uname -a" tells the "two-digit" version
    number, such as "5.3" or "6.5". The three-digit form can be seen with
@@ -3238,26 +3244,26 @@ $ cat /proc/interrupts
    that they do not trap SIGTSTP themselves, so the shell is doing the
    suspending rather than the application.
 
-   Also see notes about IRIX 3.x in the [509]C-Kermit for Unix
+   Also see notes about IRIX 3.x in the [508]C-Kermit for Unix
    Installation Instructions.
 
    If you have problems making TCP/IP connections in versions of IRIX
    built with GCC 2.95.2, see the bugs section of:
 
-  [510]http://freeware.sgi.com/Installable/gcc-2.95.2.html.
+  [509]http://freeware.sgi.com/Installable/gcc-2.95.2.html.
 
    Reportedly, if you allow gcc to compile C-Kermit on Irix you should be
    aware that there might be problems with some of the network code. The
    specifics are at
-   [511]http://freeware.sgi.com/Installable/gcc-2.95.2.html; scroll down
+   [510]http://freeware.sgi.com/Installable/gcc-2.95.2.html; scroll down
    to the "known bugs" section at the end of the document.
 
 3.15. C-KERMIT AND THE BEBOX
 
-   [ [512]Top ] [ [513]Contents ] [ [514]Section Contents ] [ [515]Next ]
-   [ [516]Previous ]
+   [ [511]Top ] [ [512]Contents ] [ [513]Section Contents ] [ [514]Next ]
+   [ [515]Previous ]
 
-   See also: The [517]comp.sys.be newsgroup.
+   See also: The [516]comp.sys.be newsgroup.
 
    The BeBox has been discontinued and BeOS repositioned for PC platforms.
    The POSIX parts of BeOS are not finished, nor is the sockets library,
@@ -3299,8 +3305,8 @@ $ cat /proc/interrupts
 
 3.16. C-KERMIT AND DG/UX
 
-   [ [518]Top ] [ [519]Contents ] [ [520]Section Contents ] [ [521]Next ]
-   [ [522]Previous ]
+   [ [517]Top ] [ [518]Contents ] [ [519]Section Contents ] [ [520]Next ]
+   [ [521]Previous ]
 
    Somebody downloaded the C-Kermit 6.0 binary built under DG/UX 5.40 and
    ran it under DG/UX 5.4R3.10 -- it worked OK except that file dates for
@@ -3310,8 +3316,8 @@ $ cat /proc/interrupts
 
 3.17. C-KERMIT AND SEQUENT DYNIX
 
-   [ [523]Top ] [ [524]Contents ] [ [525]Section Contents ] [ [526]Next ]
-   [ [527]Previous ]
+   [ [522]Top ] [ [523]Contents ] [ [524]Section Contents ] [ [525]Next ]
+   [ [526]Previous ]
 
    Reportedly, when coming into a Sequent Unix (DYNIX) system through an
    X.25 connection, Kermit doesn't work right because the Sequent's
@@ -3323,8 +3329,8 @@ $ cat /proc/interrupts
 
 3.18. C-KERMIT AND FREEBSD, OPENBSD, and NETBSD
 
-   [ [528]Top ] [ [529]Contents ] [ [530]Section Contents ] [ [531]Next ]
-   [ [532]Previous ]
+   [ [527]Top ] [ [528]Contents ] [ [529]Section Contents ] [ [530]Next ]
+   [ [531]Previous ]
 
    Some NebBSD users have reported difficulty escaping back from CONNECT
    mode, usually when running NetBSD on non-PC hardware. Probably a
@@ -3338,8 +3344,8 @@ $ cat /proc/interrupts
 
 3.19. C-KERMIT AND MAC OS X
 
-   [ [533]Top ] [ [534]Contents ] [ [535]Section Contents ] [ [536]Next ]
-   [ [537]Previous ]
+   [ [532]Top ] [ [533]Contents ] [ [534]Section Contents ] [ [535]Next ]
+   [ [536]Previous ]
 
    Mac OS X is Apple's 4.4BSD Unix variety, closely related to FreeBSD,
    but different. "uname -a" is singularly uninformative, as in Linux,
@@ -3380,7 +3386,7 @@ $ cat /proc/interrupts
        I doubt that C-Kermit does anything useful with them. There is no
        code in C-Kermit for traditional two-forked Macintosh files, but it
        could be added if there is any demand (code for this existed in
-       [538]Mac Kermit, the old pre-Mac-OS-X Macintosh version of
+       [537]Mac Kermit, the old pre-Mac-OS-X Macintosh version of
        C-Kermit).
      * In case you want to transfer a traditional Macintosh text file (or
        data fork of a file that is plain text), you can use these C-Kermit
@@ -3410,7 +3416,7 @@ Mac OS X and Serial Ports
    equipment, and scientific, medical, and lab equipment (to name a few).
    Among workers in these areas, there is a need to add serial ports back
    onto this platform, which is being filled by third-party products such
-   as the [539]Keyspan High Speed USB Serial Adapter USA-19HS, which has a
+   as the [538]Keyspan High Speed USB Serial Adapter USA-19HS, which has a
    DB-9 male connector. To use the Keyspan device, you must install the
    accompanying device drivers, which winds up giving you serial ports
    with names like /dev/cu.USA19H3b1P1.1, /dev/cu.KeySerial1,
@@ -3425,7 +3431,7 @@ Mac OS X Serial Ports with C-Kermit 8.0 and earlier
 
    In earlier versions of C-Kermit, you'll need to either build a special
    -DNOUUCP version, or deal with the UUCP port contention sytem in
-   [540]all its glory (this is usually an exercise in futility because any
+   [539]all its glory (this is usually an exercise in futility because any
    other applications on your Mac that use the serial port will not
    necessarily follow the same conventions):
 
@@ -3434,7 +3440,7 @@ Mac OS X Serial Ports with C-Kermit 8.0 and earlier
        chmod g+w /var/spool/lock
        chgrp xxxx /dev/cu.*
        (where xxxx is the name of the group for users to whom serial-port
-       access is to be granted). Use "admin" or other existing group, or
+       accesss is to be granted). Use "admin" or other existing group, or
        create a new group if desired. NB:
 
      In the absence of official guidance from Apple or anyone else, we
@@ -3442,7 +3448,8 @@ Mac OS X Serial Ports with C-Kermit 8.0 and earlier
      directory (a) already exists on vanilla Mac OS X installations, and
      (b) it is the directory used for serial-port lockfiles on many other
      platforms.
-    2. Put all users who need access to the serial port in the same group.
+    2. Put all users who need accesss to the serial port in the same
+       group.
     3. Make sure the serial device files that are to be used by C-Kermit
        have group read-write permission and (if you care) lack world
        read-write permission, e.g.:
@@ -3456,7 +3463,7 @@ chmod 775 wermit
 mv wermit /usr/local/kermit
 
    (or whatever spot is more appropriate, e.g. /usr/bin/). For greater
-   detail about installation, [541]CLICK HERE.
+   detail about installation, [540]CLICK HERE.
 
    Alternatively, to build a pre-9.0 version of C-Kermit without UUCP
    lockfile support, set the NOUUCP flag; e.g. (for Mac OS 10.4):
@@ -3466,7 +3473,7 @@ mv wermit /usr/local/kermit
    This circumvents the SET PORT failure "?Access to lockfile directory
    denied". But it also sacrifices Kermit's ability to ensure that only
    one copy of Kermit can have the device open at a time, since Mac OS X
-   is the same as all other varieties of Unix in that exclusive access to
+   is the same as all other varieties of Unix in that exclusive accesss to
    serial ports is not enforced in any way. But if it's for your own
    desktop machine that nobody else uses, a -DNOUUCP version might be
    adequate and preferable to the alternatives.
@@ -3486,10 +3493,10 @@ RS-232 versus RS-422
    they do not have enough wires (or more properly in the case RS-422/423,
    wire pairs) to convey a useful subset of modem signals.
 
-   Keyspan also sells a [542]USB Twin Serial Adapter that gives you two
+   Keyspan also sells a [541]USB Twin Serial Adapter that gives you two
    Mini-Din8 RS-422 ports, that are no better (or worse) for communicating
    with modems or serial devices than a real Mac Din-8 port was. In
-   essense, you get Data In, Data Out, and two modem signals. It looks to
+   essence, you get Data In, Data Out, and two modem signals. It looks to
    me as if the signals chosen by Keyspan are RTS and CTS. This gives you
    hardware flow control, but at the expense of Carrier Detect. Thus to
    use C-Kermit with a Keyspan USB serial port, you must tell C-Kermit to:
@@ -3515,16 +3522,16 @@ C-Kermit> connect
 
    Instructions for the built-in modem (if any) remain to be written due
    to lack of knowledge. If you can contribute instructions, hints, or
-   tips, please [543]send them in.
+   tips, please [542]send them in.
 
 3.20. C-KERMIT AND COHERENT
 
-   [ [544]Top ] [ [545]Contents ] [ [546]Section Contents ] [
-   [547]Previous ]
+   [ [543]Top ] [ [544]Contents ] [ [545]Section Contents ] [
+   [546]Previous ]
 
    Also see:
 
-     [548]http://www.uni-giessen.de/faq/archiv/coherent-faq.general/msg000
+     [547]http://www.uni-giessen.de/faq/archiv/coherent-faq.general/msg000
    00.html
 
    Mark Williams COHERENT was perhaps the first commercial Unix-based
@@ -3548,7 +3555,7 @@ C-Kermit> connect
 
 4. GENERAL UNIX-SPECIFIC HINTS, LIMITATIONS, AND BUGS
 
-   [ [549]Top ] [ [550]Contents ] [ [551]Next ] [ [552]Previous ]
+   [ [548]Top ] [ [549]Contents ] [ [550]Next ] [ [551]Previous ]
 
 4.1. Modem Signals
 
@@ -3601,7 +3608,7 @@ C-Kermit> connect
    switches, such as -x to put it in server mode) into the shell field of
    the /etc/passwd file. This works pretty well. In some cases, for
    "ultimate security", you might want to use a version built with
-   -DNOPUSH (see the [553]Configurations Options document for this, but
+   -DNOPUSH (see the [552]Configurations Options document for this, but
    even if you don't, then PUSHing or shelling out from C-Kermit just
    brings up a new copy of C-Kermit (but warning: this does not prevent
    the user from explicitly running a shell; e.g. "run /bin/sh"; use
@@ -3609,7 +3616,7 @@ C-Kermit> connect
 
 4.4. C-Kermit versus screen and splitvt
 
-   C-Kermit file transfers will probably not work if attemped through the
+   C-Kermit file transfers will probably not work if attempted through the
    "splitvt" or GNU "screen" programs because the screen optimization (or
    at least, line wrapping, control-character absorption) done by this
    package interferes with Kermit's packets.
@@ -3696,7 +3703,7 @@ C-Kermit> connect
    platform ranging from very fast to very flow.
 
    SSH and PTY commands can fail if (a) all pseudoterminals are in use; or
-   (b) you do not have read/write access to the pseudoterminal that was
+   (b) you do not have read/write accesss to the pseudoterminal that was
    assigned. An example of (b) was reported with the Zipslack Slackware
    Linux distribution, in which the pseudoterminals were created with
    crw-r--r-- permission, instead of crw-rw-rw-.
@@ -3721,11 +3728,11 @@ C-Kermit> connect
 
 5. INITIALIZATION AND COMMAND FILES
 
-   [ [554]Top ] [ [555]Contents ] [ [556]Next ] [ [557]Previous ]
+   [ [553]Top ] [ [554]Contents ] [ [555]Next ] [ [556]Previous ]
 
    C-Kermit's initialization file for Unix is .kermrc (lowercase, starts
    with period) in your home directory, unless Kermit was built with the
-   system-wide initialization-file option (see the [558]C-Kermit for Unix
+   system-wide initialization-file option (see the [557]C-Kermit for Unix
    Installation Instructions).
 
    C-Kermit identifies your home directory based on the environment
@@ -3788,7 +3795,7 @@ C-Kermit> connect
 
 6. COMMUNICATION SPEED SELECTION
 
-   [ [559]Top ] [ [560]Contents ] [ [561]Next ] [ [562]Previous ]
+   [ [558]Top ] [ [559]Contents ] [ [560]Next ] [ [561]Previous ]
 
    Version-7 based Unix implementations, including 4.3 BSD and earlier and
    Unix systems based upon BSD, use a 4-bit field to record a serial
@@ -3874,12 +3881,12 @@ C-Kermit> connect
    speed, and then the software must also be told to change to the new,
    higher speed.
 
-   For additional information, read [563]Section 9.5 of the Installation
-   Instructions, plus any platform-specific notes in [564]Section 3 above.
+   For additional information, read [562]Section 9.5 of the Installation
+   Instructions, plus any platform-specific notes in [563]Section 3 above.
 
 7. COMMUNICATIONS AND DIALING
 
-   [ [565]Top ] [ [566]Contents ] [ [567]Next ] [ [568]Previous ]
+   [ [564]Top ] [ [565]Contents ] [ [566]Next ] [ [567]Previous ]
 
 7.1. Serial Ports and Modems
 
@@ -3962,9 +3969,9 @@ C-Kermit> connect
     5. If MODEM HANGUP-METHOD is set to RS232-SIGNAL, change it to
        MODEM-COMMAND. Or vice-versa.
     6. Try SET DIAL HANGUP OFF before the DIAL command. Also, SET DIAL
-       DISPLAY ON to watch what's happening. See [569]Section 8 of the
-       [570]Installation Instructions.
-    7. Read pages 50-67 of [571]Using C-Kermit.
+       DISPLAY ON to watch what's happening. See [568]Section 8 of the
+       [569]Installation Instructions.
+    7. Read pages 50-67 of [570]Using C-Kermit.
     8. As a last resort, don't use the DIAL command at all; SET CARRIER
        OFF and CONNECT to the modem and dial interactively, or write a
        script program to dial the modem.
@@ -3988,7 +3995,7 @@ C-Kermit> connect
    8-bit data and Xon/Xoff flow control at the same time. However, as of
    edit 174, this code is entirely disabled because it is unreliable: even
    though the host operating system might (or might not) support LPASS8
-   mode correctly, the host access protocols (terminal servers, telnet,
+   mode correctly, the host accesss protocols (terminal servers, telnet,
    rlogin, etc) generally have no way of finding out about it and
    therefore render it ineffective, causing file transfer failures. So as
    of edit 174, Kermit once again uses rawmode for 8-bit data, and so
@@ -4076,7 +4083,7 @@ C-Kermit> connect
    hang up the connection when your computer drops the DTR signal. So
    before deciding Kermit doesn't work with your modem, check your modem
    configuration AND the cable (if any) connecting your modem to the
-   computer -- it should be a straight-through [572]modem cable conducting
+   computer -- it should be a straight-through [571]modem cable conducting
    the signals FG, SG, TD, RD, RTS, CTS, DSR, DTR, CD, and RI.
 
    Many Unix systems keep aliases for dialout devices; for example,
@@ -4100,7 +4107,7 @@ C-Kermit> connect
 
    C-Kermit tries to use the 8th bit for data when parity is NONE, and
    this generally works on real Unix terminal (tty) devices, but it often
-   does not work when the Unix system is accessed over a network via
+   does not work when the Unix system is accesssed over a network via
    telnet or rlogin protocols, including (in many cases) through terminal
    servers. For example, an Encore computer with Annex terminal servers
    only gives a 7-bit path if the rlogin protocol is selected in the
@@ -4117,7 +4124,7 @@ C-Kermit> connect
 
 8. HARDWARE FLOW CONTROL
 
-   [ [573]Top ] [ [574]Contents ] [ [575]Next ] [ [576]Previous ]
+   [ [572]Top ] [ [573]Contents ] [ [574]Next ] [ [575]Previous ]
 
    SET FLOW RTS/CTS is available in Unix C-Kermit only when the underlying
    operating system provides an Application Program Interface (API) for
@@ -4170,9 +4177,9 @@ C-Kermit> connect
 
 9. TERMINAL CONNECTION AND KEY MAPPING
 
-   [ [577]Top ] [ [578]Contents ] [ [579]Next ] [ [580]Previous ]
+   [ [576]Top ] [ [577]Contents ] [ [578]Next ] [ [579]Previous ]
 
-   C-Kermit is not a terminal emulator. Refer to page 147 of [581]Using
+   C-Kermit is not a terminal emulator. Refer to page 147 of [580]Using
    C-Kermit, 2nd Edition: "Most versions of C-Kermit -- Unix, VMS, AOS/VS,
    VOS, etc -- provide terminal connection without emulation. These
    versions act as a 'semitransparent pipe' between the remote computer
@@ -4183,12 +4190,12 @@ C-Kermit> connect
    If you are an X Windows user, you should be aware of an alternative to
    xterm that supports VT220 emulation, from Thomas E. Dickey:
 
-  [582]http://dickey.his.com/xterm/xterm.html
+  [581]http://dickey.his.com/xterm/xterm.html
 
    Unix C-Kermit's SET KEY command currently can not be used with keys
    that generate "wide" scan codes or multibyte sequences, such as
    workstation function or arrow keys, because Unix C-Kermit does not have
-   direct access to the keyboard.
+   direct accesss to the keyboard.
 
    However, many Unix workstations and/or console drivers provide their
    own key mapping feature. With xterm, for example, you can use 'xmodmap'
@@ -4229,7 +4236,7 @@ C-Kermit> connect
 
 10. FILE TRANSFER
 
-   [ [583]Top ] [ [584]Contents ] [ [585]Next ] [ [586]Previous ]
+   [ [582]Top ] [ [583]Contents ] [ [584]Next ] [ [585]Previous ]
 
    On most platforms, C-Kermit can not handle files longer than 2^31 or
    2^32 bytes long, because it uses the traditional file i/o APIs that use
@@ -4246,7 +4253,7 @@ C-Kermit> connect
    ROBUST.
 
    If reception (particularly of large files and/or binary files) begins
-   successfully but then fail constently after a certain amount of bytes
+   successfully but then fail consistently after a certain amount of bytes
    have been sent, check:
 
      * Your ulimit ("ulimit -a")
@@ -4254,7 +4261,7 @@ C-Kermit> connect
        .")
      * Your personal disk quota (platform- and site-dependent)
      * The maximum file size on the receiver's file system (e.g. 2GB in
-       old verions the Linux VFS file system, and/or in applications that
+       old versions the Linux VFS file system, and/or in applications that
        have not been recoded to use new "large file" APIs).
      * If it's an NFS-mounted disk (if so, try uploading to a local disk)
      * Is there an "idle limit" on the receiving end?
@@ -4361,12 +4368,12 @@ C-Kermit> connect
 
 11. EXTERNAL FILE TRANSFER PROTOCOLS
 
-   [ [587]Top ] [ [588]Contents ] [ [589]Next ] [ [590]Previous ]
+   [ [586]Top ] [ [587]Contents ] [ [588]Next ] [ [589]Previous ]
 
    SECTION CONTENTS
 
-  11.1. [591]C-Kermit as an External Protocol
-  11.2. [592]Invoking External Protocols from C-Kermit
+  11.1. [590]C-Kermit as an External Protocol
+  11.2. [591]Invoking External Protocols from C-Kermit
 
    Unix C-Kermit can be used in conjunction with other communications
    software in various ways. C-Kermit can be invoked from another
@@ -4386,9 +4393,9 @@ C-Kermit> connect
 
 11.1. C-KERMIT AS AN EXTERNAL PROTOCOL
 
-   [ [593]Top ] [ [594]Contents ] [ [595]Section Contents ] [ [596]Next ]
+   [ [592]Top ] [ [593]Contents ] [ [594]Section Contents ] [ [595]Next ]
 
-   (This section deleted; see [597]Using C-Kermit, 2nd Ed, Chapter 14.)
+   (This section deleted; see [596]Using C-Kermit, 2nd Ed, Chapter 14.)
 
    "pcomm" is a general-purpose terminal program that provides file
    transfer capabilities itself (X- and YMODEM variations) and the ability
@@ -4420,7 +4427,7 @@ C-Kermit> connect
 
    Here's another example, for Seyon (a Linux communication program).
    First try the technique above. If that works, fine; otherwise... If
-   Seyon does not give you a way to access and pass along the file
+   Seyon does not give you a way to accesss and pass along the file
    descriptor, but it starts up the Kermit program with its standard i/o
    redirected to its (Seyon's) communications file descriptor, you can
    also experiment with the following method, which worked here in brief
@@ -4450,11 +4457,11 @@ C-Kermit> connect
 
 11.2. INVOKING EXTERNAL PROTOCOLS FROM C-KERMIT
 
-   [ [598]Top ] [ [599]Contents ] [ [600]Section Contents ] [
-   [601]Previous ]
+   [ [597]Top ] [ [598]Contents ] [ [599]Section Contents ] [
+   [600]Previous ]
 
      (This section is obsolete, but not totally useless. See Chapter 14
-     of [602]Using C-Kermit, 2nd Edition).
+     of [601]Using C-Kermit, 2nd Edition).
 
    After you have opened a communication link with C-Kermit's SET LINE
    (SET PORT) or SET HOST (TELNET) command, C-Kermit makes its file
@@ -4513,15 +4520,15 @@ C-Kermit> connect
 
 12. SECURITY
 
-   [ [603]Top ] [ [604]Contents ] [ [605]Next ] [ [606]Previous ]
+   [ [602]Top ] [ [603]Contents ] [ [604]Next ] [ [605]Previous ]
 
    As of version 7.0, C-Kermit supports a wide range of security options
    for authentication and encryption: Kerberos 4, Kerberos 5 / GSSAPI,
-   SSL/TLS, and SRP. See the separate [607]security document for details.
+   SSL/TLS, and SRP. See the separate [606]security document for details.
 
 13. MISCELLANEOUS USER REPORTS
 
-   [ [608]Top ] [ [609]Contents ] [ [610]Next ] [ [611]Previous ]
+   [ [607]Top ] [ [608]Contents ] [ [609]Next ] [ [610]Previous ]
 
 Date: Thu, 12 Mar 92 1:59:25 MEZ
 From: Walter Mecky <walter@rent-a-guru.de>
@@ -4587,7 +4594,7 @@ main() {
 
    We have successfully compiled the above release on a Unisys/Sperry
    5000/95. We used the sys5r3 option, rather than sys5r2 since we have
-   VR3 running on our system. In order to allow dialout access to
+   VR3 running on our system. In order to allow dialout accesss to
    non-superusers, we had to do "chmod 666 /dev/tty###, where it had been
    -rw--w--w- (owned by uucp), and to do "chmod +w /usr/spool/locks". We
    have done text and binary file transfers through local and remote
@@ -4641,7 +4648,7 @@ int argc; char *argv[]; {
 #ifdef DEBUG
             fprintf(stderr, "LOCKFILE? %s?\n", lockdev);
 #endif
-            if (access(lockdev, 00) == 0) {
+            if (accesss(lockdev, 00) == 0) {
                 allow=TTY_LOCK;
                 break;
             }
@@ -4676,7 +4683,7 @@ int argc; char *argv[]; {
 
 14. THIRD-PARTY DRIVERS
 
-   [ [612]Top ] [ [613]Contents ] [ [614]Next ] [ [615]Previous ]
+   [ [611]Top ] [ [612]Contents ] [ [613]Next ] [ [614]Previous ]
 
    Unix versions, especially those for PCs (SCO, Unixware, etc) might be
    augmented by third-party communication-board drivers from Digiboard,
@@ -4702,7 +4709,7 @@ int argc; char *argv[]; {
        the rest are supported. This will, as I mentioned earlier, be fixed
        in the next release of our ATA software."
        - World Wide Escalation Support, Stallion Technologies, Toowong
-       QLD, [616]support@stallion.oz.au.
+       QLD, [615]support@stallion.oz.au.
 
    Later (December 1997, from the same source):
 
@@ -4714,15 +4721,15 @@ int argc; char *argv[]; {
        as the early revision of the EasyIO card and the EasyConnection 8D4
        panel, and as always asserted on those cards that do not support
        the DSR signal in the hardware. The new driver is available from
-       our Web site, [617]www.stallion.com, in the /drivers/ata5/UnixWare
+       our Web site, [616]www.stallion.com, in the /drivers/ata5/UnixWare
        directory.
 
-   [ [618]Top ] [ [619]Contents ] [ [620]C-Kermit Home ] [ [621]C-Kermit
-   8.0 Overview ] [ [622]Kermit Home ]
+   [ [617]Top ] [ [618]Contents ] [ [619]C-Kermit Home ] [ [620]C-Kermit
+   8.0 Overview ] [ [621]Kermit Home ]
      __________________________________________________________________
 
-     C-Kermit 8.0 Unix Hints and Tips / [623]The Kermit Project /
-   [624]Columbia University / [625]kermit@columbia.edu
+     C-Kermit 8.0 Unix Hints and Tips / [622]The Kermit Project /
+   [623]Columbia University / [624]kermit@columbia.edu
 
 References
 
@@ -4739,7 +4746,7 @@ References
   11. http://www.columbia.edu/kermit/
   12. http://www.columbia.edu/
   13. http://www.columbia.edu/kermit/ckubwr.html
-  14. mailto:kermit-support@columbia.edu
+  14. http://www.columbia.edu/kermit/ckdaily.html
   15. http://www.columbia.edu/kermit/ckermit.html
   16. http://www.columbia.edu/kermit/ckuins.html
   17. http://www.columbia.edu/kermit/ckututor.html
@@ -4764,590 +4771,589 @@ References
   36. http://www.columbia.edu/kermit/ckubwr.html#x3.2
   37. http://www.columbia.edu/kermit/ckubwr.html#x3.7
   38. http://www.columbia.edu/kermit/ckubwr.html#x3.6
-  39. http://www.columbia.edu/kermit/ckubwr.html#x3.13
-  40. http://www.columbia.edu/kermit/ckubwr.html#top
-  41. http://www.columbia.edu/kermit/ckubwr.html#contents
-  42. http://www.columbia.edu/kermit/ckubwr.html#x2
-  43. http://www.columbia.edu/kermit/ckubwr.html#x1.1
-  44. http://www.columbia.edu/kermit/ckubwr.html#x1.2
-  45. http://www.columbia.edu/kermit/ckubwr.html#x1.3
-  46. http://www.columbia.edu/kermit/ckubwr.html#x1.4
-  47. http://www.columbia.edu/kermit/ckubwr.html#x3.3
-  48. http://www.columbia.edu/kermit/ckubwr.html#x3.1
-  49. http://www.columbia.edu/kermit/ckubwr.html#x3.2
-  50. http://www.columbia.edu/kermit/ckubwr.html#x3.7
-  51. http://www.columbia.edu/kermit/ckcbwr.html
-  52. mailto:kermit-support@columbia.edu
-  53. http://www.columbia.edu/kermit/ckubwr.html#top
-  54. http://www.columbia.edu/kermit/ckubwr.html#contents
-  55. http://www.columbia.edu/kermit/ckubwr.html#x1.2
-  56. http://www.columbia.edu/kermit/ck60manual.html
-  57. http://www.columbia.edu/kermit/ckermit70.html
-  58. http://www.columbia.edu/kermit/ckermit80.html
-  59. http://www.columbia.edu/kermit/ckermit90.html
-  60. http://www.columbia.edu/kermit/ckubwr.html#top
-  61. http://www.columbia.edu/kermit/ckubwr.html#contents
-  62. http://www.columbia.edu/kermit/ckubwr.html#x1
-  63. http://www.columbia.edu/kermit/ckubwr.html#x1.3
-  64. http://www.columbia.edu/kermit/ckubwr.html#x1.1
-  65. http://www.columbia.edu/kermit/support.html
-  66. http://www.columbia.edu/kermit/ckubwr.html#top
-  67. http://www.columbia.edu/kermit/ckubwr.html#contents
-  68. http://www.columbia.edu/kermit/ckubwr.html#x1
-  69. http://www.columbia.edu/kermit/ckubwr.html#x1.4
-  70. http://www.columbia.edu/kermit/ckubwr.html#x1.2
-  71. http://www.columbia.edu/kermit/ckubwr.html#top
-  72. http://www.columbia.edu/kermit/ckubwr.html#contents
-  73. http://www.columbia.edu/kermit/ckubwr.html#x1
-  74. http://www.columbia.edu/kermit/ckubwr.html#x1.3
-  75. http://www.columbia.edu/kermit/ckubwr.html#top
-  76. http://www.columbia.edu/kermit/ckubwr.html#contents
-  77. http://www.columbia.edu/kermit/ckubwr.html#x3
-  78. http://www.columbia.edu/kermit/ckubwr.html#x1
-  79. http://www.columbia.edu/kermit/ckubwr.html#top
-  80. http://www.columbia.edu/kermit/ckubwr.html#contents
-  81. http://www.columbia.edu/kermit/ckubwr.html#x4
-  82. http://www.columbia.edu/kermit/ckubwr.html#x2
-  83. http://www.columbia.edu/kermit/ckubwr.html#x3.0
-  84. http://www.columbia.edu/kermit/ckubwr.html#x3.1
-  85. http://www.columbia.edu/kermit/ckubwr.html#x3.2
-  86. http://www.columbia.edu/kermit/ckubwr.html#x3.3
-  87. http://www.columbia.edu/kermit/ckubwr.html#x3.4
-  88. http://www.columbia.edu/kermit/ckubwr.html#x3.5
-  89. http://www.columbia.edu/kermit/ckubwr.html#x3.6
-  90. http://www.columbia.edu/kermit/ckubwr.html#x3.7
-  91. http://www.columbia.edu/kermit/ckubwr.html#x3.8
-  92. http://www.columbia.edu/kermit/ckubwr.html#x3.9
-  93. http://www.columbia.edu/kermit/ckubwr.html#x3.10
-  94. http://www.columbia.edu/kermit/ckubwr.html#x3.11
-  95. http://www.columbia.edu/kermit/ckubwr.html#x3.12
-  96. http://www.columbia.edu/kermit/ckubwr.html#x3.13
-  97. http://www.columbia.edu/kermit/ckubwr.html#x3.14
-  98. http://www.columbia.edu/kermit/ckubwr.html#x3.15
-  99. http://www.columbia.edu/kermit/ckubwr.html#x3.16
- 100. http://www.columbia.edu/kermit/ckubwr.html#x3.17
- 101. http://www.columbia.edu/kermit/ckubwr.html#x3.18
- 102. http://www.columbia.edu/kermit/ckubwr.html#x3.19
- 103. http://www.columbia.edu/kermit/ckubwr.html#x3.20
- 104. http://www.faqs.org/
- 105. http://aplawrence.com/Unixart/newtounix.html
- 106. http://www.columbia.edu/kermit/ckubwr.html#x3
- 107. mailto:kermit-support@columbia.edu
- 108. http://www.columbia.edu/kermit/support.html
- 109. http://www.columbia.edu/kermit/ckubwr.html#top
- 110. http://www.columbia.edu/kermit/ckubwr.html#contents
- 111. http://www.columbia.edu/kermit/ckubwr.html#x3
- 112. http://www.columbia.edu/kermit/ckubwr.html#x3.1
- 113. http://www.pcunix.com/
- 114. http://www.columbia.edu/kermit/ckubwr.html#x3.0.1
- 115. http://www.columbia.edu/kermit/ckubwr.html#x3.0.2
- 116. http://www.columbia.edu/kermit/ckubwr.html#x3.0.3
- 117. http://www.columbia.edu/kermit/ckubwr.html#x3.0.4
- 118. http://www.columbia.edu/kermit/ckubwr.html#x3.0.5
- 119. http://www.columbia.edu/kermit/ckubwr.html#x3.0.6
- 120. http://www.columbia.edu/kermit/ckubwr.html#top
- 121. http://www.columbia.edu/kermit/ckubwr.html#contents
- 122. http://www.columbia.edu/kermit/ckubwr.html#x3.0
- 123. http://www.columbia.edu/kermit/ckubwr.html#x3.0.2
- 124. http://www.columbia.edu/kermit/ckubwr.html#top
- 125. http://www.columbia.edu/kermit/ckubwr.html#contents
- 126. http://www.columbia.edu/kermit/ckubwr.html#x3.0
- 127. http://www.columbia.edu/kermit/ckubwr.html#x3.0.3
- 128. http://www.columbia.edu/kermit/ckubwr.html#x3.0.1
- 129. http://www.linmodems.org/
- 130. http://www.microsoft.com/hwdev/platform/PCdesign/LR/default.asp
- 131. http://www.columbia.edu/kermit/ckubwr.html#top
- 132. http://www.columbia.edu/kermit/ckubwr.html#contents
- 133. http://www.columbia.edu/kermit/ckubwr.html#x3.0
- 134. http://www.columbia.edu/kermit/ckubwr.html#x3.0.4
- 135. http://www.columbia.edu/kermit/ckubwr.html#x3.0.2
- 136. http://www.idir.net/~gromitkc/winmodem.html
- 137. http://www.digi.com/
- 138. http://www.columbia.edu/kermit/ckubwr.html#top
- 139. http://www.columbia.edu/kermit/ckubwr.html#contents
- 140. http://www.columbia.edu/kermit/ckubwr.html#x3.0
- 141. http://www.columbia.edu/kermit/ckubwr.html#x3.0.5
- 142. http://www.columbia.edu/kermit/ckubwr.html#x3.0.3
- 143. http://www.columbia.edu/kermit/ckubwr.html#top
- 144. http://www.columbia.edu/kermit/ckubwr.html#contents
- 145. http://www.columbia.edu/kermit/ckubwr.html#x3.0
- 146. http://www.columbia.edu/kermit/ckubwr.html#x3.0.6
- 147. http://www.columbia.edu/kermit/ckubwr.html#x3.0.4
- 148. http://www.columbia.edu/kermit/ckubwr.html#top
- 149. http://www.columbia.edu/kermit/ckubwr.html#contents
- 150. http://www.columbia.edu/kermit/ckubwr.html#x3.0
- 151. http://www.columbia.edu/kermit/ckubwr.html#x3.0.5
- 152. http://www.columbia.edu/kermit/ckubwr.html#top
- 153. http://www.columbia.edu/kermit/ckubwr.html#contents
- 154. http://www.columbia.edu/kermit/ckubwr.html#x3
- 155. http://www.columbia.edu/kermit/ckubwr.html#x3.2
- 156. http://www.columbia.edu/kermit/ckubwr.html#x3.0
- 157. http://www.columbia.edu/kermit/ckubwr.html#x3.1.1
- 158. http://www.columbia.edu/kermit/ckubwr.html#x3.1.2
- 159. http://www.columbia.edu/kermit/ckubwr.html#x3.1.3
- 160. http://www.columbia.edu/kermit/ckubwr.html#x3.1.4
- 161. http://www.columbia.edu/kermit/ckubwr.html#x3.1.5
- 162. http://www.emerson.emory.edu/services/aix-faq/
- 163. http://www.faqs.org/faqs/by-newsgroup/comp/comp.unix.aix.html
- 164. http://www.cis.ohio-state.edu/hypertext/faq/usenet/aix-faq/top.html
- 165. http://aixpdslib.seas.ucla.edu/
- 166. http://www.rootvg.net(AIXhistory)/
- 167. ftp://rtfm.mit.edu/pub/usenet/news.answers/aix-faq/part1
- 168. ftp://mirrors.aol.com/pub/rtfm/usenet-by-hierarchy/comp/unix/aix
- 169. news:comp.unix.aix
- 170. http://www.columbia.edu/kermit/ckubwr.html#top
- 171. http://www.columbia.edu/kermit/ckubwr.html#contents
- 172. http://www.columbia.edu/kermit/ckubwr.html#x3.1
- 173. http://www.columbia.edu/kermit/ckubwr.html#x3.1.2
- 174. http://www.columbia.edu/kermit/ckubwr.html#top
- 175. http://www.columbia.edu/kermit/ckubwr.html#contents
- 176. http://www.columbia.edu/kermit/ckubwr.html#x3.1
- 177. http://www.columbia.edu/kermit/ckubwr.html#x3.1.3
- 178. http://www.columbia.edu/kermit/ckubwr.html#x3.1.1
- 179. http://www.columbia.edu/kermit/security.html#servers
- 180. http://www.columbia.edu/kermit/ckubwr.html#top
- 181. http://www.columbia.edu/kermit/ckubwr.html#contents
- 182. http://www.columbia.edu/kermit/ckubwr.html#x3.1
- 183. http://www.columbia.edu/kermit/ckubwr.html#x3.1.4
- 184. http://www.columbia.edu/kermit/ckubwr.html#x3.1.2
- 185. http://service.software.ibm.com/rs6000/
- 186. http://www.columbia.edu/kermit/ckubwr.html#top
- 187. http://www.columbia.edu/kermit/ckubwr.html#contents
- 188. http://www.columbia.edu/kermit/ckubwr.html#x3.1
- 189. http://www.columbia.edu/kermit/ckubwr.html#x3.1.5
- 190. http://www.columbia.edu/kermit/ckubwr.html#x3.1.3
- 191. http://www.columbia.edu/kermit/ckubwr.html#top
- 192. http://www.columbia.edu/kermit/ckubwr.html#contents
- 193. http://www.columbia.edu/kermit/ckubwr.html#x3.1
- 194. http://www.columbia.edu/kermit/ckubwr.html#x3.1.4
- 195. http://www.columbia.edu/kermit/ckubwr.html#top
- 196. http://www.columbia.edu/kermit/ckubwr.html#contents
- 197. http://www.columbia.edu/kermit/ckubwr.html#x3
- 198. http://www.columbia.edu/kermit/ckubwr.html#x3.3
- 199. http://www.columbia.edu/kermit/ckubwr.html#x3.1
- 200. http://www.columbia.edu/kermit/ckubwr.html#x3.2.0
- 201. http://www.columbia.edu/kermit/ckubwr.html#x3.2.1
- 202. http://www.columbia.edu/kermit/ckubwr.html#x3.2.2
- 203. http://www.columbia.edu/kermit/ckubwr.html#x3.2.3
- 204. http://www.columbia.edu/kermit/ckubwr.html#x3.2.4
- 205. http://www.columbia.edu/kermit/ckubwr.html#x3.2.5
- 206. news:comp.sys.hp.hpux
- 207. http://www.columbia.edu/kermit/ckubwr.html#top
- 208. http://www.columbia.edu/kermit/ckubwr.html#contents
- 209. http://www.columbia.edu/kermit/ckubwr.html#x3.2
- 210. http://www.columbia.edu/kermit/ckubwr.html#x3.2.1
- 211. http://www.columbia.edu/kermit/ckubwr.html#top
- 212. http://www.columbia.edu/kermit/ckubwr.html#contents
- 213. http://www.columbia.edu/kermit/ckubwr.html#x3.2
- 214. http://www.columbia.edu/kermit/ckubwr.html#x3.2.2
- 215. http://www.columbia.edu/kermit/ckubwr.html#x3.2.0
- 216. ftp://kermit.columbia.edu/kermit/f/makefile
- 217. http://www.columbia.edu/kermit/ckubwr.html#top
- 218. http://www.columbia.edu/kermit/ckubwr.html#contents
- 219. http://www.columbia.edu/kermit/ckubwr.html#x3.2
- 220. http://www.columbia.edu/kermit/ckubwr.html#x3.2.3
- 221. http://www.columbia.edu/kermit/ckubwr.html#x3.2.1
- 222. http://www.columbia.edu/kermit/ckubwr.html#top
- 223. http://www.columbia.edu/kermit/ckubwr.html#contents
- 224. http://www.columbia.edu/kermit/ckubwr.html#x3.2
- 225. http://www.columbia.edu/kermit/ckubwr.html#x3.2.4
- 226. http://www.columbia.edu/kermit/ckubwr.html#x3.2.2
- 227. http://www.columbia.edu/kermit/ckubwr.html#x3.2.4.1
- 228. http://www.columbia.edu/kermit/ckubwr.html#x3.2.4.2
- 229. http://www.columbia.edu/kermit/ckubwr.html#x3.2.4.3
- 230. http://www.columbia.edu/kermit/ckubwr.html#x3.2.4.4
- 231. http://www.columbia.edu/kermit/ckubwr.html#x3.2.4.5
- 232. http://www.columbia.edu/kermit/ckubwr.html#top
- 233. http://www.columbia.edu/kermit/ckubwr.html#contents
- 234. http://www.columbia.edu/kermit/ckubwr.html#x3.2
- 235. http://www.columbia.edu/kermit/ckubwr.html#x3.2.4.2
- 236. http://www.columbia.edu/kermit/ckubwr.html#x3.2.2
- 237. http://www.columbia.edu/kermit/ckubwr.html#top
- 238. http://www.columbia.edu/kermit/ckubwr.html#contents
- 239. http://www.columbia.edu/kermit/ckubwr.html#x3.2.4
- 240. http://www.columbia.edu/kermit/ckubwr.html#x3.2.4.3
- 241. http://www.columbia.edu/kermit/ckubwr.html#x3.2.4.1
- 242. http://www.columbia.edu/kermit/ckubwr.html#top
- 243. http://www.columbia.edu/kermit/ckubwr.html#contents
- 244. http://www.columbia.edu/kermit/ckubwr.html#x3.2.4
- 245. http://www.columbia.edu/kermit/ckubwr.html#x3.2.4.4
- 246. http://www.columbia.edu/kermit/ckubwr.html#x3.2.4.2
- 247. http://www.columbia.edu/kermit/ckubwr.html#top
- 248. http://www.columbia.edu/kermit/ckubwr.html#contents
- 249. http://www.columbia.edu/kermit/ckubwr.html#x3.2.4
- 250. http://www.columbia.edu/kermit/ckubwr.html#x3.2.4.5
- 251. http://www.columbia.edu/kermit/ckubwr.html#x3.2.4.3
- 252. http://www.columbia.edu/kermit/ckubwr.html#top
- 253. http://www.columbia.edu/kermit/ckubwr.html#contents
- 254. http://www.columbia.edu/kermit/ckubwr.html#x3.2.4
- 255. http://www.columbia.edu/kermit/ckubwr.html#x3.2.4.4
- 256. http://www.columbia.edu/kermit/ckubwr.html#top
- 257. http://www.columbia.edu/kermit/ckubwr.html#contents
- 258. http://www.columbia.edu/kermit/ckubwr.html#x3.2
- 259. http://www.columbia.edu/kermit/ckubwr.html#x3.2.4
- 260. http://www.columbia.edu/kermit/ckubwr.html#top
- 261. http://www.columbia.edu/kermit/ckubwr.html#contents
- 262. http://www.columbia.edu/kermit/ckubwr.html#x3
- 263. http://www.columbia.edu/kermit/ckubwr.html#x3.4
- 264. http://www.columbia.edu/kermit/ckubwr.html#x3.2
- 265. http://www.columbia.edu/kermit/ckubwr.html#x3.3.1
- 266. http://www.columbia.edu/kermit/ckubwr.html#x3.3.2
- 267. http://www.columbia.edu/kermit/ckubwr.html#x3.3.3
- 268. http://www.columbia.edu/kermit/ckubwr.html#x3.3.4
- 269. http://www.columbia.edu/kermit/ckubwr.html#x3.3.5
- 270. http://www.columbia.edu/kermit/ckubwr.html#x3.3.6
- 271. http://en.wikipedia.org/wiki/Avahi_(software)
- 272. news:comp.os.linux.misc
- 273. news:comp.os.linux.answers
- 274. http://www.tldp.org/
- 275. http://www.tldp.org/FAQ/Linux-FAQ.html
- 276. http://www.tldp.org/HOWTO/Serial-HOWTO.html
- 277. http://tldp.org/HOWTO/Modem-HOWTO.html
- 278. ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO
- 279. ftp://tsx-11.mit.edu/pub/linux/docs/HOWTO
- 280. http://www.tldp.org/HOWTO/
- 281. http://www.tldp.org/hmirrors.html
- 282. http://www.redhat.com/apps/support/
- 283. http://www.debian.org/support
- 284. http://www.slackware.com/support/
- 285. http://www.caldera.com/support/
- 286. http://www.novell.com/support/microsites/microsite.do
- 287. http://www.mandrake.com/support/
- 288. http://www.turbolinux.com/support/
- 289. http://www.linmodems.org/
- 290. http://www.columbia.edu/kermit/ckubwr.html#x3.0
- 291. http://linux.dreamtime.org/decnet/
- 292. mailto:kermit-support@columbia.edu
- 293. http://www.linmodems.org/
- 294. http://www.columbia.edu/kermit/ckubwr.html#x3.0.2
- 295. http://www.columbia.edu/kermit/security.html#servers
- 296. http://www.columbia.edu/kermit/sshclient.html
- 297. http://www.columbia.edu/kermit/ckubwr.html#top
- 298. http://www.columbia.edu/kermit/ckubwr.html#contents
- 299. http://www.columbia.edu/kermit/ckubwr.html#x3
- 300. http://www.columbia.edu/kermit/ckubwr.html#x3.3.2
- 301. http://www.columbia.edu/kermit/ckubwr.html#top
- 302. http://www.columbia.edu/kermit/ckubwr.html#contents
- 303. http://www.columbia.edu/kermit/ckubwr.html#x3.3
- 304. http://www.columbia.edu/kermit/ckubwr.html#x3.3.3
- 305. http://www.columbia.edu/kermit/ckubwr.html#x3.3.1
- 306. http://www.columbia.edu/kermit/ckubwr.html#x3.0
- 307. http://www.columbia.edu/kermit/ckubwr.html#x6
- 308. http://www.columbia.edu/kermit/ckubwr.html#x7
- 309. http://www.columbia.edu/kermit/ckubwr.html#x8
- 310. http://www.columbia.edu/kermit/ckuins.html#x10
- 311. http://www.columbia.edu/kermit/ckuins.html#x11
- 312. http://www.columbia.edu/kermit/ckuins.html
- 313. http://www.columbia.edu/kermit/ckubwr.html#x3.0
- 314. http://linuxwww.db.erau.edu/mail_archives/linux-kernel/Mar_98/1441.html
- 315. http://www.columbia.edu/kermit/ckubwr.html#top
- 316. http://www.columbia.edu/kermit/ckubwr.html#contents
- 317. http://www.columbia.edu/kermit/ckubwr.html#x3.3
- 318. http://www.columbia.edu/kermit/ckubwr.html#x3.3.4
- 319. http://www.columbia.edu/kermit/ckubwr.html#x3.3.2
- 320. http://www.columbia.edu/kermit/ckubwr.html#x3.0.5
- 321. http://www.columbia.edu/kermit/ckfaq.html#term
+  39. http://www.columbia.edu/kermit/ckubwr.html#top
+  40. http://www.columbia.edu/kermit/ckubwr.html#contents
+  41. http://www.columbia.edu/kermit/ckubwr.html#x2
+  42. http://www.columbia.edu/kermit/ckubwr.html#x1.1
+  43. http://www.columbia.edu/kermit/ckubwr.html#x1.2
+  44. http://www.columbia.edu/kermit/ckubwr.html#x1.3
+  45. http://www.columbia.edu/kermit/ckubwr.html#x1.4
+  46. http://www.columbia.edu/kermit/ckubwr.html#x3.3
+  47. http://www.columbia.edu/kermit/ckubwr.html#x3.1
+  48. http://www.columbia.edu/kermit/ckubwr.html#x3.2
+  49. http://www.columbia.edu/kermit/ckubwr.html#x3.7
+  50. http://www.columbia.edu/kermit/ckcbwr.html
+  51. mailto:kermit-support@columbia.edu
+  52. http://www.columbia.edu/kermit/ckubwr.html#top
+  53. http://www.columbia.edu/kermit/ckubwr.html#contents
+  54. http://www.columbia.edu/kermit/ckubwr.html#x1.2
+  55. http://www.columbia.edu/kermit/ck60manual.html
+  56. http://www.columbia.edu/kermit/ckermit70.html
+  57. http://www.columbia.edu/kermit/ckermit80.html
+  58. http://www.columbia.edu/kermit/ckermit90.html
+  59. http://www.columbia.edu/kermit/ckubwr.html#top
+  60. http://www.columbia.edu/kermit/ckubwr.html#contents
+  61. http://www.columbia.edu/kermit/ckubwr.html#x1
+  62. http://www.columbia.edu/kermit/ckubwr.html#x1.3
+  63. http://www.columbia.edu/kermit/ckubwr.html#x1.1
+  64. http://www.columbia.edu/kermit/support.html
+  65. http://www.columbia.edu/kermit/ckubwr.html#top
+  66. http://www.columbia.edu/kermit/ckubwr.html#contents
+  67. http://www.columbia.edu/kermit/ckubwr.html#x1
+  68. http://www.columbia.edu/kermit/ckubwr.html#x1.4
+  69. http://www.columbia.edu/kermit/ckubwr.html#x1.2
+  70. http://www.columbia.edu/kermit/ckubwr.html#top
+  71. http://www.columbia.edu/kermit/ckubwr.html#contents
+  72. http://www.columbia.edu/kermit/ckubwr.html#x1
+  73. http://www.columbia.edu/kermit/ckubwr.html#x1.3
+  74. http://www.columbia.edu/kermit/ckubwr.html#top
+  75. http://www.columbia.edu/kermit/ckubwr.html#contents
+  76. http://www.columbia.edu/kermit/ckubwr.html#x3
+  77. http://www.columbia.edu/kermit/ckubwr.html#x1
+  78. http://www.columbia.edu/kermit/ckubwr.html#top
+  79. http://www.columbia.edu/kermit/ckubwr.html#contents
+  80. http://www.columbia.edu/kermit/ckubwr.html#x4
+  81. http://www.columbia.edu/kermit/ckubwr.html#x2
+  82. http://www.columbia.edu/kermit/ckubwr.html#x3.0
+  83. http://www.columbia.edu/kermit/ckubwr.html#x3.1
+  84. http://www.columbia.edu/kermit/ckubwr.html#x3.2
+  85. http://www.columbia.edu/kermit/ckubwr.html#x3.3
+  86. http://www.columbia.edu/kermit/ckubwr.html#x3.4
+  87. http://www.columbia.edu/kermit/ckubwr.html#x3.5
+  88. http://www.columbia.edu/kermit/ckubwr.html#x3.6
+  89. http://www.columbia.edu/kermit/ckubwr.html#x3.7
+  90. http://www.columbia.edu/kermit/ckubwr.html#x3.8
+  91. http://www.columbia.edu/kermit/ckubwr.html#x3.9
+  92. http://www.columbia.edu/kermit/ckubwr.html#x3.10
+  93. http://www.columbia.edu/kermit/ckubwr.html#x3.11
+  94. http://www.columbia.edu/kermit/ckubwr.html#x3.12
+  95. http://www.columbia.edu/kermit/ckubwr.html#x3.13
+  96. http://www.columbia.edu/kermit/ckubwr.html#x3.14
+  97. http://www.columbia.edu/kermit/ckubwr.html#x3.15
+  98. http://www.columbia.edu/kermit/ckubwr.html#x3.16
+  99. http://www.columbia.edu/kermit/ckubwr.html#x3.17
+ 100. http://www.columbia.edu/kermit/ckubwr.html#x3.18
+ 101. http://www.columbia.edu/kermit/ckubwr.html#x3.19
+ 102. http://www.columbia.edu/kermit/ckubwr.html#x3.20
+ 103. http://www.faqs.org/
+ 104. http://aplawrence.com/Unixart/newtounix.html
+ 105. http://www.columbia.edu/kermit/ckubwr.html#x3
+ 106. mailto:kermit-support@columbia.edu
+ 107. http://www.columbia.edu/kermit/support.html
+ 108. http://www.columbia.edu/kermit/ckubwr.html#top
+ 109. http://www.columbia.edu/kermit/ckubwr.html#contents
+ 110. http://www.columbia.edu/kermit/ckubwr.html#x3
+ 111. http://www.columbia.edu/kermit/ckubwr.html#x3.1
+ 112. http://www.pcunix.com/
+ 113. http://www.columbia.edu/kermit/ckubwr.html#x3.0.1
+ 114. http://www.columbia.edu/kermit/ckubwr.html#x3.0.2
+ 115. http://www.columbia.edu/kermit/ckubwr.html#x3.0.3
+ 116. http://www.columbia.edu/kermit/ckubwr.html#x3.0.4
+ 117. http://www.columbia.edu/kermit/ckubwr.html#x3.0.5
+ 118. http://www.columbia.edu/kermit/ckubwr.html#x3.0.6
+ 119. http://www.columbia.edu/kermit/ckubwr.html#top
+ 120. http://www.columbia.edu/kermit/ckubwr.html#contents
+ 121. http://www.columbia.edu/kermit/ckubwr.html#x3.0
+ 122. http://www.columbia.edu/kermit/ckubwr.html#x3.0.2
+ 123. http://www.columbia.edu/kermit/ckubwr.html#top
+ 124. http://www.columbia.edu/kermit/ckubwr.html#contents
+ 125. http://www.columbia.edu/kermit/ckubwr.html#x3.0
+ 126. http://www.columbia.edu/kermit/ckubwr.html#x3.0.3
+ 127. http://www.columbia.edu/kermit/ckubwr.html#x3.0.1
+ 128. http://www.linmodems.org/
+ 129. http://www.microsoft.com/hwdev/platform/PCdesign/LR/default.asp
+ 130. http://www.columbia.edu/kermit/ckubwr.html#top
+ 131. http://www.columbia.edu/kermit/ckubwr.html#contents
+ 132. http://www.columbia.edu/kermit/ckubwr.html#x3.0
+ 133. http://www.columbia.edu/kermit/ckubwr.html#x3.0.4
+ 134. http://www.columbia.edu/kermit/ckubwr.html#x3.0.2
+ 135. http://www.idir.net/~gromitkc/winmodem.html
+ 136. http://www.digi.com/
+ 137. http://www.columbia.edu/kermit/ckubwr.html#top
+ 138. http://www.columbia.edu/kermit/ckubwr.html#contents
+ 139. http://www.columbia.edu/kermit/ckubwr.html#x3.0
+ 140. http://www.columbia.edu/kermit/ckubwr.html#x3.0.5
+ 141. http://www.columbia.edu/kermit/ckubwr.html#x3.0.3
+ 142. http://www.columbia.edu/kermit/ckubwr.html#top
+ 143. http://www.columbia.edu/kermit/ckubwr.html#contents
+ 144. http://www.columbia.edu/kermit/ckubwr.html#x3.0
+ 145. http://www.columbia.edu/kermit/ckubwr.html#x3.0.6
+ 146. http://www.columbia.edu/kermit/ckubwr.html#x3.0.4
+ 147. http://www.columbia.edu/kermit/ckubwr.html#top
+ 148. http://www.columbia.edu/kermit/ckubwr.html#contents
+ 149. http://www.columbia.edu/kermit/ckubwr.html#x3.0
+ 150. http://www.columbia.edu/kermit/ckubwr.html#x3.0.5
+ 151. http://www.columbia.edu/kermit/ckubwr.html#top
+ 152. http://www.columbia.edu/kermit/ckubwr.html#contents
+ 153. http://www.columbia.edu/kermit/ckubwr.html#x3
+ 154. http://www.columbia.edu/kermit/ckubwr.html#x3.2
+ 155. http://www.columbia.edu/kermit/ckubwr.html#x3.0
+ 156. http://www.columbia.edu/kermit/ckubwr.html#x3.1.1
+ 157. http://www.columbia.edu/kermit/ckubwr.html#x3.1.2
+ 158. http://www.columbia.edu/kermit/ckubwr.html#x3.1.3
+ 159. http://www.columbia.edu/kermit/ckubwr.html#x3.1.4
+ 160. http://www.columbia.edu/kermit/ckubwr.html#x3.1.5
+ 161. http://www.emerson.emory.edu/services/aix-faq/
+ 162. http://www.faqs.org/faqs/by-newsgroup/comp/comp.unix.aix.html
+ 163. http://www.cis.ohio-state.edu/hypertext/faq/usenet/aix-faq/top.html
+ 164. http://aixpdslib.seas.ucla.edu/
+ 165. http://www.rootvg.net(AIXhistory)/
+ 166. ftp://rtfm.mit.edu/pub/usenet/news.answers/aix-faq/part1
+ 167. ftp://mirrors.aol.com/pub/rtfm/usenet-by-hierarchy/comp/unix/aix
+ 168. news:comp.unix.aix
+ 169. http://www.columbia.edu/kermit/ckubwr.html#top
+ 170. http://www.columbia.edu/kermit/ckubwr.html#contents
+ 171. http://www.columbia.edu/kermit/ckubwr.html#x3.1
+ 172. http://www.columbia.edu/kermit/ckubwr.html#x3.1.2
+ 173. http://www.columbia.edu/kermit/ckubwr.html#top
+ 174. http://www.columbia.edu/kermit/ckubwr.html#contents
+ 175. http://www.columbia.edu/kermit/ckubwr.html#x3.1
+ 176. http://www.columbia.edu/kermit/ckubwr.html#x3.1.3
+ 177. http://www.columbia.edu/kermit/ckubwr.html#x3.1.1
+ 178. http://www.columbia.edu/kermit/security.html#servers
+ 179. http://www.columbia.edu/kermit/ckubwr.html#top
+ 180. http://www.columbia.edu/kermit/ckubwr.html#contents
+ 181. http://www.columbia.edu/kermit/ckubwr.html#x3.1
+ 182. http://www.columbia.edu/kermit/ckubwr.html#x3.1.4
+ 183. http://www.columbia.edu/kermit/ckubwr.html#x3.1.2
+ 184. http://service.software.ibm.com/rs6000/
+ 185. http://www.columbia.edu/kermit/ckubwr.html#top
+ 186. http://www.columbia.edu/kermit/ckubwr.html#contents
+ 187. http://www.columbia.edu/kermit/ckubwr.html#x3.1
+ 188. http://www.columbia.edu/kermit/ckubwr.html#x3.1.5
+ 189. http://www.columbia.edu/kermit/ckubwr.html#x3.1.3
+ 190. http://www.columbia.edu/kermit/ckubwr.html#top
+ 191. http://www.columbia.edu/kermit/ckubwr.html#contents
+ 192. http://www.columbia.edu/kermit/ckubwr.html#x3.1
+ 193. http://www.columbia.edu/kermit/ckubwr.html#x3.1.4
+ 194. http://www.columbia.edu/kermit/ckubwr.html#top
+ 195. http://www.columbia.edu/kermit/ckubwr.html#contents
+ 196. http://www.columbia.edu/kermit/ckubwr.html#x3
+ 197. http://www.columbia.edu/kermit/ckubwr.html#x3.3
+ 198. http://www.columbia.edu/kermit/ckubwr.html#x3.1
+ 199. http://www.columbia.edu/kermit/ckubwr.html#x3.2.0
+ 200. http://www.columbia.edu/kermit/ckubwr.html#x3.2.1
+ 201. http://www.columbia.edu/kermit/ckubwr.html#x3.2.2
+ 202. http://www.columbia.edu/kermit/ckubwr.html#x3.2.3
+ 203. http://www.columbia.edu/kermit/ckubwr.html#x3.2.4
+ 204. http://www.columbia.edu/kermit/ckubwr.html#x3.2.5
+ 205. news:comp.sys.hp.hpux
+ 206. http://www.columbia.edu/kermit/ckubwr.html#top
+ 207. http://www.columbia.edu/kermit/ckubwr.html#contents
+ 208. http://www.columbia.edu/kermit/ckubwr.html#x3.2
+ 209. http://www.columbia.edu/kermit/ckubwr.html#x3.2.1
+ 210. http://www.columbia.edu/kermit/ckubwr.html#top
+ 211. http://www.columbia.edu/kermit/ckubwr.html#contents
+ 212. http://www.columbia.edu/kermit/ckubwr.html#x3.2
+ 213. http://www.columbia.edu/kermit/ckubwr.html#x3.2.2
+ 214. http://www.columbia.edu/kermit/ckubwr.html#x3.2.0
+ 215. ftp://kermit.columbia.edu/kermit/f/makefile
+ 216. http://www.columbia.edu/kermit/ckubwr.html#top
+ 217. http://www.columbia.edu/kermit/ckubwr.html#contents
+ 218. http://www.columbia.edu/kermit/ckubwr.html#x3.2
+ 219. http://www.columbia.edu/kermit/ckubwr.html#x3.2.3
+ 220. http://www.columbia.edu/kermit/ckubwr.html#x3.2.1
+ 221. http://www.columbia.edu/kermit/ckubwr.html#top
+ 222. http://www.columbia.edu/kermit/ckubwr.html#contents
+ 223. http://www.columbia.edu/kermit/ckubwr.html#x3.2
+ 224. http://www.columbia.edu/kermit/ckubwr.html#x3.2.4
+ 225. http://www.columbia.edu/kermit/ckubwr.html#x3.2.2
+ 226. http://www.columbia.edu/kermit/ckubwr.html#x3.2.4.1
+ 227. http://www.columbia.edu/kermit/ckubwr.html#x3.2.4.2
+ 228. http://www.columbia.edu/kermit/ckubwr.html#x3.2.4.3
+ 229. http://www.columbia.edu/kermit/ckubwr.html#x3.2.4.4
+ 230. http://www.columbia.edu/kermit/ckubwr.html#x3.2.4.5
+ 231. http://www.columbia.edu/kermit/ckubwr.html#top
+ 232. http://www.columbia.edu/kermit/ckubwr.html#contents
+ 233. http://www.columbia.edu/kermit/ckubwr.html#x3.2
+ 234. http://www.columbia.edu/kermit/ckubwr.html#x3.2.4.2
+ 235. http://www.columbia.edu/kermit/ckubwr.html#x3.2.2
+ 236. http://www.columbia.edu/kermit/ckubwr.html#top
+ 237. http://www.columbia.edu/kermit/ckubwr.html#contents
+ 238. http://www.columbia.edu/kermit/ckubwr.html#x3.2.4
+ 239. http://www.columbia.edu/kermit/ckubwr.html#x3.2.4.3
+ 240. http://www.columbia.edu/kermit/ckubwr.html#x3.2.4.1
+ 241. http://www.columbia.edu/kermit/ckubwr.html#top
+ 242. http://www.columbia.edu/kermit/ckubwr.html#contents
+ 243. http://www.columbia.edu/kermit/ckubwr.html#x3.2.4
+ 244. http://www.columbia.edu/kermit/ckubwr.html#x3.2.4.4
+ 245. http://www.columbia.edu/kermit/ckubwr.html#x3.2.4.2
+ 246. http://www.columbia.edu/kermit/ckubwr.html#top
+ 247. http://www.columbia.edu/kermit/ckubwr.html#contents
+ 248. http://www.columbia.edu/kermit/ckubwr.html#x3.2.4
+ 249. http://www.columbia.edu/kermit/ckubwr.html#x3.2.4.5
+ 250. http://www.columbia.edu/kermit/ckubwr.html#x3.2.4.3
+ 251. http://www.columbia.edu/kermit/ckubwr.html#top
+ 252. http://www.columbia.edu/kermit/ckubwr.html#contents
+ 253. http://www.columbia.edu/kermit/ckubwr.html#x3.2.4
+ 254. http://www.columbia.edu/kermit/ckubwr.html#x3.2.4.4
+ 255. http://www.columbia.edu/kermit/ckubwr.html#top
+ 256. http://www.columbia.edu/kermit/ckubwr.html#contents
+ 257. http://www.columbia.edu/kermit/ckubwr.html#x3.2
+ 258. http://www.columbia.edu/kermit/ckubwr.html#x3.2.4
+ 259. http://www.columbia.edu/kermit/ckubwr.html#top
+ 260. http://www.columbia.edu/kermit/ckubwr.html#contents
+ 261. http://www.columbia.edu/kermit/ckubwr.html#x3
+ 262. http://www.columbia.edu/kermit/ckubwr.html#x3.4
+ 263. http://www.columbia.edu/kermit/ckubwr.html#x3.2
+ 264. http://www.columbia.edu/kermit/ckubwr.html#x3.3.1
+ 265. http://www.columbia.edu/kermit/ckubwr.html#x3.3.2
+ 266. http://www.columbia.edu/kermit/ckubwr.html#x3.3.3
+ 267. http://www.columbia.edu/kermit/ckubwr.html#x3.3.4
+ 268. http://www.columbia.edu/kermit/ckubwr.html#x3.3.5
+ 269. http://www.columbia.edu/kermit/ckubwr.html#x3.3.6
+ 270. http://en.wikipedia.org/wiki/Avahi_(software)
+ 271. news:comp.os.linux.misc
+ 272. news:comp.os.linux.answers
+ 273. http://www.tldp.org/
+ 274. http://www.tldp.org/FAQ/Linux-FAQ.html
+ 275. http://www.tldp.org/HOWTO/Serial-HOWTO.html
+ 276. http://tldp.org/HOWTO/Modem-HOWTO.html
+ 277. ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO
+ 278. ftp://tsx-11.mit.edu/pub/linux/docs/HOWTO
+ 279. http://www.tldp.org/HOWTO/
+ 280. http://www.tldp.org/hmirrors.html
+ 281. http://www.redhat.com/apps/support/
+ 282. http://www.debian.org/support
+ 283. http://www.slackware.com/support/
+ 284. http://www.caldera.com/support/
+ 285. http://www.novell.com/support/microsites/microsite.do
+ 286. http://www.mandrake.com/support/
+ 287. http://www.turbolinux.com/support/
+ 288. http://www.linmodems.org/
+ 289. http://www.columbia.edu/kermit/ckubwr.html#x3.0
+ 290. http://linux.dreamtime.org/decnet/
+ 291. mailto:kermit-support@columbia.edu
+ 292. http://www.linmodems.org/
+ 293. http://www.columbia.edu/kermit/ckubwr.html#x3.0.2
+ 294. http://www.columbia.edu/kermit/security.html#servers
+ 295. http://www.columbia.edu/kermit/sshclient.html
+ 296. http://www.columbia.edu/kermit/ckubwr.html#top
+ 297. http://www.columbia.edu/kermit/ckubwr.html#contents
+ 298. http://www.columbia.edu/kermit/ckubwr.html#x3
+ 299. http://www.columbia.edu/kermit/ckubwr.html#x3.3.2
+ 300. http://www.columbia.edu/kermit/ckubwr.html#top
+ 301. http://www.columbia.edu/kermit/ckubwr.html#contents
+ 302. http://www.columbia.edu/kermit/ckubwr.html#x3.3
+ 303. http://www.columbia.edu/kermit/ckubwr.html#x3.3.3
+ 304. http://www.columbia.edu/kermit/ckubwr.html#x3.3.1
+ 305. http://www.columbia.edu/kermit/ckubwr.html#x3.0
+ 306. http://www.columbia.edu/kermit/ckubwr.html#x6
+ 307. http://www.columbia.edu/kermit/ckubwr.html#x7
+ 308. http://www.columbia.edu/kermit/ckubwr.html#x8
+ 309. http://www.columbia.edu/kermit/ckuins.html#x10
+ 310. http://www.columbia.edu/kermit/ckuins.html#x11
+ 311. http://www.columbia.edu/kermit/ckuins.html
+ 312. http://www.columbia.edu/kermit/ckubwr.html#x3.0
+ 313. http://linuxwww.db.erau.edu/mail_archives/linux-kernel/Mar_98/1441.html
+ 314. http://www.columbia.edu/kermit/ckubwr.html#top
+ 315. http://www.columbia.edu/kermit/ckubwr.html#contents
+ 316. http://www.columbia.edu/kermit/ckubwr.html#x3.3
+ 317. http://www.columbia.edu/kermit/ckubwr.html#x3.3.4
+ 318. http://www.columbia.edu/kermit/ckubwr.html#x3.3.2
+ 319. http://www.columbia.edu/kermit/ckubwr.html#x3.0.5
+ 320. http://www.columbia.edu/kermit/ckfaq.html#term
+ 321. http://dickey.his.com/xterm/xterm.html
  322. http://dickey.his.com/xterm/xterm.html
- 323. http://dickey.his.com/xterm/xterm.html
- 324. ftp://kermit.columbia.edu/kermit/f/xmodmap.txt
- 325. http://www.columbia.edu/kermit/ckubwr.html#top
- 326. http://www.columbia.edu/kermit/ckubwr.html#contents
- 327. http://www.columbia.edu/kermit/ckubwr.html#x3.3
- 328. http://www.columbia.edu/kermit/ckubwr.html#x3.3.5
- 329. http://www.columbia.edu/kermit/ckubwr.html#x3.3.3
- 330. http://www.columbia.edu/kermit/ckubwr.html#top
- 331. http://www.columbia.edu/kermit/ckubwr.html#contents
- 332. http://www.columbia.edu/kermit/ckubwr.html#x3.3
- 333. http://www.columbia.edu/kermit/ckubwr.html#x3.3.6
- 334. http://www.columbia.edu/kermit/ckubwr.html#x3.3.4
- 335. http://www.columbia.edu/kermit/ckermit.html
- 336. mailto:kermit-support@columbia.edu
- 337. http://www.redhat.com/support/errata/RHBA-2001-153.html
- 338. news:comp.protocols.kermit.misc
- 339. http://www.columbia.edu/kermit/ckubwr.html#top
- 340. http://www.columbia.edu/kermit/ckubwr.html#contents
- 341. http://www.columbia.edu/kermit/ckubwr.html#x3.3
- 342. http://www.columbia.edu/kermit/ckubwr.html#x3.3.5
- 343. http://www.columbia.edu/kermit/ckubwr.html#top
- 344. http://www.columbia.edu/kermit/ckubwr.html#contents
- 345. http://www.columbia.edu/kermit/ckubwr.html#x3
- 346. http://www.columbia.edu/kermit/ckubwr.html#x3.5
- 347. http://www.columbia.edu/kermit/ckubwr.html#x3.3
- 348. http://www.columbia.edu/kermit/ckubwr.html#top
- 349. http://www.columbia.edu/kermit/ckubwr.html#contents
- 350. http://www.columbia.edu/kermit/ckubwr.html#x3
- 351. http://www.columbia.edu/kermit/ckubwr.html#x3.6
- 352. http://www.columbia.edu/kermit/ckubwr.html#x3.4
- 353. news:comp.os.qnx
- 354. http://www.columbia.edu/kermit/gkermit.html
- 355. http://www.columbia.edu/kermit/ckuins.html#x10
- 356. http://www.columbia.edu/kermit/ckuins.html
- 357. http://www.columbia.edu/kermit/ckubwr.html#top
- 358. http://www.columbia.edu/kermit/ckubwr.html#contents
- 359. http://www.columbia.edu/kermit/ckubwr.html#x3
- 360. http://www.columbia.edu/kermit/ckubwr.html#x3.7
- 361. http://www.columbia.edu/kermit/ckubwr.html#x3.5
- 362. http://www.columbia.edu/kermit/ckubwr.html#x3.6.1
- 363. http://www.columbia.edu/kermit/ckubwr.html#x3.6.2
- 364. http://www.columbia.edu/kermit/ckubwr.html#x3.6.3
- 365. http://www.columbia.edu/kermit/ckubwr.html#x3.6.4
- 366. http://www.columbia.edu/kermit/ckubwr.html#x3.10
- 367. http://aplawrence.com/SCOFAQ/
- 368. http://www.zenez.com/cgi-bin/scoprogfaq/faq.pl
- 369. http://www.zenez.com/cgi-bin/scouw7faq/faq.pl
- 370. http://zenez.pcunix.com/cgi-bin/scouw7faq/faq.pl
- 371. http://pcunix.com/Unixart/modems.html
- 372. http://www.freebird.org/faq/
- 373. http://www.freebird.org/faq/developer.html
- 374. http://support.caldera.com/caldera
- 375. http://stage.caldera.com/ta/
- 376. http://aplawrence.com/newtosco.html
- 377. http://www.columbia.edu/kermit/ckubwr.html#x3.0.5
- 378. http://www.columbia.edu/kermit/ckfaq.html#term
- 379. http://www.columbia.edu/kermit/ckubwr.html#x3.0
- 380. http://www.columbia.edu/kermit/ckubwr.html#top
- 381. http://www.columbia.edu/kermit/ckubwr.html#contents
- 382. http://www.columbia.edu/kermit/ckubwr.html#x3.6
- 383. http://www.columbia.edu/kermit/ckubwr.html#x3.6.1
- 384. ftp://kermit.columbia.edu/kermit/c-kermit/ckutio.c
- 385. http://www.columbia.edu/kermit/ckubwr.html#top
- 386. http://www.columbia.edu/kermit/ckubwr.html#contents
- 387. http://www.columbia.edu/kermit/ckubwr.html#x3.6
- 388. http://www.columbia.edu/kermit/ckubwr.html#x3.6.3
- 389. http://www.columbia.edu/kermit/ckubwr.html#x3.6.1
- 390. http://www.digi.com/
- 391. ftp://ftp.fu-berlin.de/pub/unix/driver/fas
- 392. http://www.columbia.edu/kermit/ckubwr.html#x14
- 393. http://www.sco.com/
- 394. ftp://ftp.sco.com/
- 395. http://www.columbia.edu/kermit/ckubwr.html#top
- 396. http://www.columbia.edu/kermit/ckubwr.html#contents
- 397. http://www.columbia.edu/kermit/ckubwr.html#x3.6
- 398. http://www.columbia.edu/kermit/ckubwr.html#x3.6.4
- 399. http://www.columbia.edu/kermit/ckubwr.html#x3.6.2
- 400. http://www.columbia.edu/kermit/ckubwr.html#x3.10
- 401. http://www.columbia.edu/kermit/ckubwr.html#top
- 402. http://www.columbia.edu/kermit/ckubwr.html#contents
- 403. http://www.columbia.edu/kermit/ckubwr.html#x3.6
- 404. http://www.columbia.edu/kermit/ckubwr.html#x3.6.3
- 405. http://www.columbia.edu/kermit/ckubwr.html#top
- 406. http://www.columbia.edu/kermit/ckubwr.html#contents
- 407. http://www.columbia.edu/kermit/ckubwr.html#x3
- 408. http://www.columbia.edu/kermit/ckubwr.html#x3.8
- 409. http://www.columbia.edu/kermit/ckubwr.html#x3.6
- 410. http://www.columbia.edu/kermit/ckubwr.html#x3.7.1
- 411. http://www.columbia.edu/kermit/ckubwr.html#x3.7.2
- 412. http://www.columbia.edu/kermit/ckubwr.html#x3.7.3
- 413. http://www.columbia.edu/kermit/ckubwr.html#x3.7.4
- 414. http://www.columbia.edu/kermit/ckubwr.html#x3.7.5
- 415. news:comp.unix.solaris
- 416. http://access1.sun.com/
- 417. http://docs.sun.com/
- 418. http://www.sunhelp.com/
- 419. http://www.wins.uva.nl/pub/solaris/solaris2/
- 420. http://www.wins.uva.nl/cgi-bin/sfaq.cgi
- 421. ftp://ftp.wins.uva.nl/pub/solaris
- 422. http://www.science.uva.nl/pub/solaris/solaris2.html
- 423. http://www.stokely.com/
- 424. http://www.stokely.com/unix.sysadm.resources/faqs.sun.html
- 425. http://www.columbia.edu/kermit/ckubwr.html#x3.0
- 426. http://www.columbia.edu/kermit/ckubwr.html#top
- 427. http://www.columbia.edu/kermit/ckubwr.html#contents
- 428. http://www.columbia.edu/kermit/ckubwr.html#x3
- 429. http://www.columbia.edu/kermit/ckubwr.html#x3.7
- 430. http://www.columbia.edu/kermit/ckubwr.html#x3.7.2
- 431. http://www.columbia.edu/kermit/ckubwr.html#top
- 432. http://www.columbia.edu/kermit/ckubwr.html#contents
- 433. http://www.columbia.edu/kermit/ckubwr.html#x3.7
- 434. http://www.columbia.edu/kermit/ckubwr.html#x3.7.3
- 435. http://www.columbia.edu/kermit/ckubwr.html#x3.7.1
- 436. http://www.columbia.edu/kermit/ckubwr.html#top
- 437. http://www.columbia.edu/kermit/ckubwr.html#contents
- 438. http://www.columbia.edu/kermit/ckubwr.html#x3.7
- 439. http://www.columbia.edu/kermit/ckubwr.html#x3.7.4
- 440. http://www.columbia.edu/kermit/ckubwr.html#x3.7.2
- 441. http://www.columbia.edu/kermit/ckubwr.html#top
- 442. http://www.columbia.edu/kermit/ckubwr.html#contents
- 443. http://www.columbia.edu/kermit/ckubwr.html#x3.7
- 444. http://www.columbia.edu/kermit/ckubwr.html#x3.7.5
- 445. http://www.columbia.edu/kermit/ckubwr.html#x3.7.3
- 446. news:comp.os.vms
- 447. http://www.columbia.edu/kermit/ckubwr.html#top
- 448. http://www.columbia.edu/kermit/ckubwr.html#contents
- 449. http://www.columbia.edu/kermit/ckubwr.html#x3.7
- 450. http://www.columbia.edu/kermit/ckubwr.html#x3.7.6
- 451. http://www.columbia.edu/kermit/ckubwr.html#x3.7.4
- 452. http://www.columbia.edu/kermit/ckubwr.html#top
- 453. http://www.columbia.edu/kermit/ckubwr.html#contents
- 454. http://www.columbia.edu/kermit/ckubwr.html#x3.7
- 455. http://www.columbia.edu/kermit/ckubwr.html#x3.7.5
- 456. http://www.columbia.edu/kermit/ckubwr.html#top
- 457. http://www.columbia.edu/kermit/ckubwr.html#contents
- 458. http://www.columbia.edu/kermit/ckubwr.html#x3
- 459. http://www.columbia.edu/kermit/ckubwr.html#x3.9
- 460. http://www.columbia.edu/kermit/ckubwr.html#x3.7
- 461. http://www.stokely.com/
- 462. http://access1.sun.com/
- 463. http://www.ludd.luth.se/~bear/project/sun/sun.hardware.txt
- 464. ftp://ftp.netcom.com/pub/ru/rubicon/sun.hdwr.ref
- 465. ftp://ftp.intnet.net/pub/SUN/Sun-Hardware-Ref
- 466. http://www.columbia.edu/kermit/ckubwr.html#top
- 467. http://www.columbia.edu/kermit/ckubwr.html#contents
- 468. http://www.columbia.edu/kermit/ckubwr.html#x3
- 469. http://www.columbia.edu/kermit/ckubwr.html#x3.10
- 470. http://www.columbia.edu/kermit/ckubwr.html#x3.8
- 471. news:comp.unix.ultrix
- 472. news:comp.sys.dec
- 473. http://www.columbia.edu/kermit/ckubwr.html#top
- 474. http://www.columbia.edu/kermit/ckubwr.html#contents
- 475. http://www.columbia.edu/kermit/ckubwr.html#x3
- 476. http://www.columbia.edu/kermit/ckubwr.html#x3.11
- 477. http://www.columbia.edu/kermit/ckubwr.html#x3.9
- 478. http://www.freebird.org/
- 479. http://www.freebird.org/faq/
- 480. news:comp.unix.unixware.misc
- 481. news:comp.unix.sco.misc
- 482. http://www.columbia.edu/kermit/ckubwr.html#x3.0
- 483. ftp://kermit.columbia.edu/kermit/f/ckutio.c
- 484. http://www.columbia.edu/kermit/ckubwr.html#top
- 485. http://www.columbia.edu/kermit/ckubwr.html#contents
- 486. http://www.columbia.edu/kermit/ckubwr.html#x3
- 487. http://www.columbia.edu/kermit/ckubwr.html#x3.12
- 488. http://www.columbia.edu/kermit/ckubwr.html#x3.10
- 489. http://www.columbia.edu/kermit/ckubwr.html#top
- 490. http://www.columbia.edu/kermit/ckubwr.html#contents
- 491. http://www.columbia.edu/kermit/ckubwr.html#x3
- 492. http://www.columbia.edu/kermit/ckubwr.html#x3.13
- 493. http://www.columbia.edu/kermit/ckubwr.html#x3.11
- 494. http://www.columbia.edu/kermit/ckubwr.html#top
- 495. http://www.columbia.edu/kermit/ckubwr.html#contents
- 496. http://www.columbia.edu/kermit/ckubwr.html#x3
- 497. http://www.columbia.edu/kermit/ckubwr.html#x3.14
- 498. http://www.columbia.edu/kermit/ckubwr.html#x3.12
- 499. http://www.columbia.edu/kermit/ckubwr.html#top
- 500. http://www.columbia.edu/kermit/ckubwr.html#contents
- 501. http://www.columbia.edu/kermit/ckubwr.html#x3
- 502. http://www.columbia.edu/kermit/ckubwr.html#x3.15
- 503. http://www.columbia.edu/kermit/ckubwr.html#x3.13
- 504. news:comp.sys.sgi.misc
- 505. news:comp.sys.sgi.admin
- 506. http://www.sgi.com/
- 507. http://www-viz.tamu.edu/~sgi-faq/
- 508. ftp://viz.tamu.edu/pub/sgi/faq/
- 509. http://www.columbia.edu/kermit/ckuins.html
+ 323. ftp://kermit.columbia.edu/kermit/f/xmodmap.txt
+ 324. http://www.columbia.edu/kermit/ckubwr.html#top
+ 325. http://www.columbia.edu/kermit/ckubwr.html#contents
+ 326. http://www.columbia.edu/kermit/ckubwr.html#x3.3
+ 327. http://www.columbia.edu/kermit/ckubwr.html#x3.3.5
+ 328. http://www.columbia.edu/kermit/ckubwr.html#x3.3.3
+ 329. http://www.columbia.edu/kermit/ckubwr.html#top
+ 330. http://www.columbia.edu/kermit/ckubwr.html#contents
+ 331. http://www.columbia.edu/kermit/ckubwr.html#x3.3
+ 332. http://www.columbia.edu/kermit/ckubwr.html#x3.3.6
+ 333. http://www.columbia.edu/kermit/ckubwr.html#x3.3.4
+ 334. http://www.columbia.edu/kermit/ckermit.html
+ 335. mailto:kermit-support@columbia.edu
+ 336. http://www.redhat.com/support/errata/RHBA-2001-153.html
+ 337. news:comp.protocols.kermit.misc
+ 338. http://www.columbia.edu/kermit/ckubwr.html#top
+ 339. http://www.columbia.edu/kermit/ckubwr.html#contents
+ 340. http://www.columbia.edu/kermit/ckubwr.html#x3.3
+ 341. http://www.columbia.edu/kermit/ckubwr.html#x3.3.5
+ 342. http://www.columbia.edu/kermit/ckubwr.html#top
+ 343. http://www.columbia.edu/kermit/ckubwr.html#contents
+ 344. http://www.columbia.edu/kermit/ckubwr.html#x3
+ 345. http://www.columbia.edu/kermit/ckubwr.html#x3.5
+ 346. http://www.columbia.edu/kermit/ckubwr.html#x3.3
+ 347. http://www.columbia.edu/kermit/ckubwr.html#top
+ 348. http://www.columbia.edu/kermit/ckubwr.html#contents
+ 349. http://www.columbia.edu/kermit/ckubwr.html#x3
+ 350. http://www.columbia.edu/kermit/ckubwr.html#x3.6
+ 351. http://www.columbia.edu/kermit/ckubwr.html#x3.4
+ 352. news:comp.os.qnx
+ 353. http://www.columbia.edu/kermit/gkermit.html
+ 354. http://www.columbia.edu/kermit/ckuins.html#x10
+ 355. http://www.columbia.edu/kermit/ckuins.html
+ 356. http://www.columbia.edu/kermit/ckubwr.html#top
+ 357. http://www.columbia.edu/kermit/ckubwr.html#contents
+ 358. http://www.columbia.edu/kermit/ckubwr.html#x3
+ 359. http://www.columbia.edu/kermit/ckubwr.html#x3.7
+ 360. http://www.columbia.edu/kermit/ckubwr.html#x3.5
+ 361. http://www.columbia.edu/kermit/ckubwr.html#x3.6.1
+ 362. http://www.columbia.edu/kermit/ckubwr.html#x3.6.2
+ 363. http://www.columbia.edu/kermit/ckubwr.html#x3.6.3
+ 364. http://www.columbia.edu/kermit/ckubwr.html#x3.6.4
+ 365. http://www.columbia.edu/kermit/ckubwr.html#x3.10
+ 366. http://aplawrence.com/SCOFAQ/
+ 367. http://www.zenez.com/cgi-bin/scoprogfaq/faq.pl
+ 368. http://www.zenez.com/cgi-bin/scouw7faq/faq.pl
+ 369. http://zenez.pcunix.com/cgi-bin/scouw7faq/faq.pl
+ 370. http://pcunix.com/Unixart/modems.html
+ 371. http://www.freebird.org/faq/
+ 372. http://www.freebird.org/faq/developer.html
+ 373. http://support.caldera.com/caldera
+ 374. http://stage.caldera.com/ta/
+ 375. http://aplawrence.com/newtosco.html
+ 376. http://www.columbia.edu/kermit/ckubwr.html#x3.0.5
+ 377. http://www.columbia.edu/kermit/ckfaq.html#term
+ 378. http://www.columbia.edu/kermit/ckubwr.html#x3.0
+ 379. http://www.columbia.edu/kermit/ckubwr.html#top
+ 380. http://www.columbia.edu/kermit/ckubwr.html#contents
+ 381. http://www.columbia.edu/kermit/ckubwr.html#x3.6
+ 382. http://www.columbia.edu/kermit/ckubwr.html#x3.6.1
+ 383. ftp://kermit.columbia.edu/kermit/c-kermit/ckutio.c
+ 384. http://www.columbia.edu/kermit/ckubwr.html#top
+ 385. http://www.columbia.edu/kermit/ckubwr.html#contents
+ 386. http://www.columbia.edu/kermit/ckubwr.html#x3.6
+ 387. http://www.columbia.edu/kermit/ckubwr.html#x3.6.3
+ 388. http://www.columbia.edu/kermit/ckubwr.html#x3.6.1
+ 389. http://www.digi.com/
+ 390. ftp://ftp.fu-berlin.de/pub/unix/driver/fas
+ 391. http://www.columbia.edu/kermit/ckubwr.html#x14
+ 392. http://www.sco.com/
+ 393. ftp://ftp.sco.com/
+ 394. http://www.columbia.edu/kermit/ckubwr.html#top
+ 395. http://www.columbia.edu/kermit/ckubwr.html#contents
+ 396. http://www.columbia.edu/kermit/ckubwr.html#x3.6
+ 397. http://www.columbia.edu/kermit/ckubwr.html#x3.6.4
+ 398. http://www.columbia.edu/kermit/ckubwr.html#x3.6.2
+ 399. http://www.columbia.edu/kermit/ckubwr.html#x3.10
+ 400. http://www.columbia.edu/kermit/ckubwr.html#top
+ 401. http://www.columbia.edu/kermit/ckubwr.html#contents
+ 402. http://www.columbia.edu/kermit/ckubwr.html#x3.6
+ 403. http://www.columbia.edu/kermit/ckubwr.html#x3.6.3
+ 404. http://www.columbia.edu/kermit/ckubwr.html#top
+ 405. http://www.columbia.edu/kermit/ckubwr.html#contents
+ 406. http://www.columbia.edu/kermit/ckubwr.html#x3
+ 407. http://www.columbia.edu/kermit/ckubwr.html#x3.8
+ 408. http://www.columbia.edu/kermit/ckubwr.html#x3.6
+ 409. http://www.columbia.edu/kermit/ckubwr.html#x3.7.1
+ 410. http://www.columbia.edu/kermit/ckubwr.html#x3.7.2
+ 411. http://www.columbia.edu/kermit/ckubwr.html#x3.7.3
+ 412. http://www.columbia.edu/kermit/ckubwr.html#x3.7.4
+ 413. http://www.columbia.edu/kermit/ckubwr.html#x3.7.5
+ 414. news:comp.unix.solaris
+ 415. http://accesss1.sun.com/
+ 416. http://docs.sun.com/
+ 417. http://www.sunhelp.com/
+ 418. http://www.wins.uva.nl/pub/solaris/solaris2/
+ 419. http://www.wins.uva.nl/cgi-bin/sfaq.cgi
+ 420. ftp://ftp.wins.uva.nl/pub/solaris
+ 421. http://www.science.uva.nl/pub/solaris/solaris2.html
+ 422. http://www.stokely.com/
+ 423. http://www.stokely.com/unix.sysadm.resources/faqs.sun.html
+ 424. http://www.columbia.edu/kermit/ckubwr.html#x3.0
+ 425. http://www.columbia.edu/kermit/ckubwr.html#top
+ 426. http://www.columbia.edu/kermit/ckubwr.html#contents
+ 427. http://www.columbia.edu/kermit/ckubwr.html#x3
+ 428. http://www.columbia.edu/kermit/ckubwr.html#x3.7
+ 429. http://www.columbia.edu/kermit/ckubwr.html#x3.7.2
+ 430. http://www.columbia.edu/kermit/ckubwr.html#top
+ 431. http://www.columbia.edu/kermit/ckubwr.html#contents
+ 432. http://www.columbia.edu/kermit/ckubwr.html#x3.7
+ 433. http://www.columbia.edu/kermit/ckubwr.html#x3.7.3
+ 434. http://www.columbia.edu/kermit/ckubwr.html#x3.7.1
+ 435. http://www.columbia.edu/kermit/ckubwr.html#top
+ 436. http://www.columbia.edu/kermit/ckubwr.html#contents
+ 437. http://www.columbia.edu/kermit/ckubwr.html#x3.7
+ 438. http://www.columbia.edu/kermit/ckubwr.html#x3.7.4
+ 439. http://www.columbia.edu/kermit/ckubwr.html#x3.7.2
+ 440. http://www.columbia.edu/kermit/ckubwr.html#top
+ 441. http://www.columbia.edu/kermit/ckubwr.html#contents
+ 442. http://www.columbia.edu/kermit/ckubwr.html#x3.7
+ 443. http://www.columbia.edu/kermit/ckubwr.html#x3.7.5
+ 444. http://www.columbia.edu/kermit/ckubwr.html#x3.7.3
+ 445. news:comp.os.vms
+ 446. http://www.columbia.edu/kermit/ckubwr.html#top
+ 447. http://www.columbia.edu/kermit/ckubwr.html#contents
+ 448. http://www.columbia.edu/kermit/ckubwr.html#x3.7
+ 449. http://www.columbia.edu/kermit/ckubwr.html#x3.7.6
+ 450. http://www.columbia.edu/kermit/ckubwr.html#x3.7.4
+ 451. http://www.columbia.edu/kermit/ckubwr.html#top
+ 452. http://www.columbia.edu/kermit/ckubwr.html#contents
+ 453. http://www.columbia.edu/kermit/ckubwr.html#x3.7
+ 454. http://www.columbia.edu/kermit/ckubwr.html#x3.7.5
+ 455. http://www.columbia.edu/kermit/ckubwr.html#top
+ 456. http://www.columbia.edu/kermit/ckubwr.html#contents
+ 457. http://www.columbia.edu/kermit/ckubwr.html#x3
+ 458. http://www.columbia.edu/kermit/ckubwr.html#x3.9
+ 459. http://www.columbia.edu/kermit/ckubwr.html#x3.7
+ 460. http://www.stokely.com/
+ 461. http://accesss1.sun.com/
+ 462. http://www.ludd.luth.se/~bear/project/sun/sun.hardware.txt
+ 463. ftp://ftp.netcom.com/pub/ru/rubicon/sun.hdwr.ref
+ 464. ftp://ftp.intnet.net/pub/SUN/Sun-Hardware-Ref
+ 465. http://www.columbia.edu/kermit/ckubwr.html#top
+ 466. http://www.columbia.edu/kermit/ckubwr.html#contents
+ 467. http://www.columbia.edu/kermit/ckubwr.html#x3
+ 468. http://www.columbia.edu/kermit/ckubwr.html#x3.10
+ 469. http://www.columbia.edu/kermit/ckubwr.html#x3.8
+ 470. news:comp.unix.ultrix
+ 471. news:comp.sys.dec
+ 472. http://www.columbia.edu/kermit/ckubwr.html#top
+ 473. http://www.columbia.edu/kermit/ckubwr.html#contents
+ 474. http://www.columbia.edu/kermit/ckubwr.html#x3
+ 475. http://www.columbia.edu/kermit/ckubwr.html#x3.11
+ 476. http://www.columbia.edu/kermit/ckubwr.html#x3.9
+ 477. http://www.freebird.org/
+ 478. http://www.freebird.org/faq/
+ 479. news:comp.unix.unixware.misc
+ 480. news:comp.unix.sco.misc
+ 481. http://www.columbia.edu/kermit/ckubwr.html#x3.0
+ 482. ftp://kermit.columbia.edu/kermit/f/ckutio.c
+ 483. http://www.columbia.edu/kermit/ckubwr.html#top
+ 484. http://www.columbia.edu/kermit/ckubwr.html#contents
+ 485. http://www.columbia.edu/kermit/ckubwr.html#x3
+ 486. http://www.columbia.edu/kermit/ckubwr.html#x3.12
+ 487. http://www.columbia.edu/kermit/ckubwr.html#x3.10
+ 488. http://www.columbia.edu/kermit/ckubwr.html#top
+ 489. http://www.columbia.edu/kermit/ckubwr.html#contents
+ 490. http://www.columbia.edu/kermit/ckubwr.html#x3
+ 491. http://www.columbia.edu/kermit/ckubwr.html#x3.13
+ 492. http://www.columbia.edu/kermit/ckubwr.html#x3.11
+ 493. http://www.columbia.edu/kermit/ckubwr.html#top
+ 494. http://www.columbia.edu/kermit/ckubwr.html#contents
+ 495. http://www.columbia.edu/kermit/ckubwr.html#x3
+ 496. http://www.columbia.edu/kermit/ckubwr.html#x3.14
+ 497. http://www.columbia.edu/kermit/ckubwr.html#x3.12
+ 498. http://www.columbia.edu/kermit/ckubwr.html#top
+ 499. http://www.columbia.edu/kermit/ckubwr.html#contents
+ 500. http://www.columbia.edu/kermit/ckubwr.html#x3
+ 501. http://www.columbia.edu/kermit/ckubwr.html#x3.15
+ 502. http://www.columbia.edu/kermit/ckubwr.html#x3.13
+ 503. news:comp.sys.sgi.misc
+ 504. news:comp.sys.sgi.admin
+ 505. http://www.sgi.com/
+ 506. http://www-viz.tamu.edu/~sgi-faq/
+ 507. ftp://viz.tamu.edu/pub/sgi/faq/
+ 508. http://www.columbia.edu/kermit/ckuins.html
+ 509. http://freeware.sgi.com/Installable/gcc-2.95.2.html
  510. http://freeware.sgi.com/Installable/gcc-2.95.2.html
- 511. http://freeware.sgi.com/Installable/gcc-2.95.2.html
- 512. http://www.columbia.edu/kermit/ckubwr.html#top
- 513. http://www.columbia.edu/kermit/ckubwr.html#contents
- 514. http://www.columbia.edu/kermit/ckubwr.html#x3
- 515. http://www.columbia.edu/kermit/ckubwr.html#x3.16
- 516. http://www.columbia.edu/kermit/ckubwr.html#x3.14
- 517. news:comp.sys.be
- 518. http://www.columbia.edu/kermit/ckubwr.html#top
- 519. http://www.columbia.edu/kermit/ckubwr.html#contents
- 520. http://www.columbia.edu/kermit/ckubwr.html#x3
- 521. http://www.columbia.edu/kermit/ckubwr.html#x3.17
- 522. http://www.columbia.edu/kermit/ckubwr.html#x3.15
- 523. http://www.columbia.edu/kermit/ckubwr.html#top
- 524. http://www.columbia.edu/kermit/ckubwr.html#contents
- 525. http://www.columbia.edu/kermit/ckubwr.html#x3
- 526. http://www.columbia.edu/kermit/ckubwr.html#x3.18
- 527. http://www.columbia.edu/kermit/ckubwr.html#x3.16
- 528. http://www.columbia.edu/kermit/ckubwr.html#top
- 529. http://www.columbia.edu/kermit/ckubwr.html#contents
- 530. http://www.columbia.edu/kermit/ckubwr.html#x3
- 531. http://www.columbia.edu/kermit/ckubwr.html#x3.19
- 532. http://www.columbia.edu/kermit/ckubwr.html#x3.17
- 533. http://www.columbia.edu/kermit/ckubwr.html#top
- 534. http://www.columbia.edu/kermit/ckubwr.html#contents
- 535. http://www.columbia.edu/kermit/ckubwr.html#x3
- 536. http://www.columbia.edu/kermit/ckubwr.html#x3.20
- 537. http://www.columbia.edu/kermit/ckubwr.html#x3.18
- 538. http://www.columbia.edu/kermit/mac.html
- 539. http://www.amazon.com/gp/product/B0000VYJRY?ie=UTF8&tag=aleidmoreldom-20&linkCode=as2&camp=1789&creative=390957&creativeASIN=B0000VYJRY
- 540. http://www.columbia.edu/kermit/ckuins.html#x10
- 541. http://www.columbia.edu/kermit/ckuins.html
- 542. http://www.amazon.com/gp/product/B000FX61MS?ie=UTF8&tag=aleidmoreldom-20&linkCode=as2&camp=1789&creative=390957&creativeASIN=B000FX61MS
- 543. mailto:kermit@columbia.edu
- 544. http://www.columbia.edu/kermit/ckubwr.html#top
- 545. http://www.columbia.edu/kermit/ckubwr.html#contents
- 546. http://www.columbia.edu/kermit/ckubwr.html#x3
- 547. http://www.columbia.edu/kermit/ckubwr.html#x3.19
- 548. http://www.uni-giessen.de/faq/archiv/coherent-faq.general/msg00000.html
- 549. http://www.columbia.edu/kermit/ckubwr.html#top
- 550. http://www.columbia.edu/kermit/ckubwr.html#contents
- 551. http://www.columbia.edu/kermit/ckubwr.html#x5
- 552. http://www.columbia.edu/kermit/ckubwr.html#x3
- 553. http://www.columbia.edu/kermit/ckccfg.html
- 554. http://www.columbia.edu/kermit/ckubwr.html#top
- 555. http://www.columbia.edu/kermit/ckubwr.html#contents
- 556. http://www.columbia.edu/kermit/ckubwr.html#x6
- 557. http://www.columbia.edu/kermit/ckubwr.html#x4
- 558. http://www.columbia.edu/kermit/ckuins.html
- 559. http://www.columbia.edu/kermit/ckubwr.html#top
- 560. http://www.columbia.edu/kermit/ckubwr.html#contents
- 561. http://www.columbia.edu/kermit/ckubwr.html#x7
- 562. http://www.columbia.edu/kermit/ckubwr.html#x5
- 563. http://www.columbia.edu/kermit/ckuins.html#9.5
- 564. http://www.columbia.edu/kermit/ckubwr.html#x3
- 565. http://www.columbia.edu/kermit/ckubwr.html#top
- 566. http://www.columbia.edu/kermit/ckubwr.html#contents
- 567. http://www.columbia.edu/kermit/ckubwr.html#x8
- 568. http://www.columbia.edu/kermit/ckubwr.html#x6
- 569. http://www.columbia.edu/kermit/ckuins.html#x8
- 570. http://www.columbia.edu/kermit/ckuins.html
- 571. http://www.columbia.edu/kermit/ck60manual.html
- 572. http://www.columbia.edu/kermit/cable.html
- 573. http://www.columbia.edu/kermit/ckubwr.html#top
- 574. http://www.columbia.edu/kermit/ckubwr.html#contents
- 575. http://www.columbia.edu/kermit/ckubwr.html#x9
- 576. http://www.columbia.edu/kermit/ckubwr.html#x7
- 577. http://www.columbia.edu/kermit/ckubwr.html#top
- 578. http://www.columbia.edu/kermit/ckubwr.html#contents
- 579. http://www.columbia.edu/kermit/ckubwr.html#x10
- 580. http://www.columbia.edu/kermit/ckubwr.html#x8
- 581. http://www.columbia.edu/kermit/ck60manual.html
- 582. http://dickey.his.com/xterm/xterm.html
- 583. http://www.columbia.edu/kermit/ckubwr.html#top
- 584. http://www.columbia.edu/kermit/ckubwr.html#contents
- 585. http://www.columbia.edu/kermit/ckubwr.html#x11
- 586. http://www.columbia.edu/kermit/ckubwr.html#x9
- 587. http://www.columbia.edu/kermit/ckubwr.html#top
- 588. http://www.columbia.edu/kermit/ckubwr.html#contents
- 589. http://www.columbia.edu/kermit/ckubwr.html#x12
- 590. http://www.columbia.edu/kermit/ckubwr.html#x10
- 591. http://www.columbia.edu/kermit/ckubwr.html#x11.1
- 592. http://www.columbia.edu/kermit/ckubwr.html#x11.2
- 593. http://www.columbia.edu/kermit/ckubwr.html#top
- 594. http://www.columbia.edu/kermit/ckubwr.html#contents
- 595. http://www.columbia.edu/kermit/ckubwr.html#x11
- 596. http://www.columbia.edu/kermit/ckubwr.html#x11.2
- 597. http://www.columbia.edu/kermit/ck60manual.html
- 598. http://www.columbia.edu/kermit/ckubwr.html#top
- 599. http://www.columbia.edu/kermit/ckubwr.html#contents
- 600. http://www.columbia.edu/kermit/ckubwr.html#x11
- 601. http://www.columbia.edu/kermit/ckubwr.html#x11.1
- 602. http://www.columbia.edu/kermit/ck60manual.html
- 603. http://www.columbia.edu/kermit/ckubwr.html#top
- 604. http://www.columbia.edu/kermit/ckubwr.html#contents
- 605. http://www.columbia.edu/kermit/ckubwr.html#x13
- 606. http://www.columbia.edu/kermit/ckubwr.html#x11
- 607. http://www.columbia.edu/kermit/security.html
- 608. http://www.columbia.edu/kermit/ckubwr.html#top
- 609. http://www.columbia.edu/kermit/ckubwr.html#contents
- 610. http://www.columbia.edu/kermit/ckubwr.html#x14
- 611. http://www.columbia.edu/kermit/ckubwr.html#x12
- 612. http://www.columbia.edu/kermit/ckubwr.html#top
- 613. http://www.columbia.edu/kermit/ckubwr.html#contents
- 614. http://www.columbia.edu/kermit/ckubwr.html#x15
- 615. http://www.columbia.edu/kermit/ckubwr.html#x14
- 616. mailto:support@stallion.oz.au
- 617. http://www.stallion.com/
- 618. http://www.columbia.edu/kermit/ckubwr.html#top
- 619. http://www.columbia.edu/kermit/ckubwr.html#contents
- 620. http://www.columbia.edu/kermit/ckermit.html
- 621. http://www.columbia.edu/kermit/ck80.html
+ 511. http://www.columbia.edu/kermit/ckubwr.html#top
+ 512. http://www.columbia.edu/kermit/ckubwr.html#contents
+ 513. http://www.columbia.edu/kermit/ckubwr.html#x3
+ 514. http://www.columbia.edu/kermit/ckubwr.html#x3.16
+ 515. http://www.columbia.edu/kermit/ckubwr.html#x3.14
+ 516. news:comp.sys.be
+ 517. http://www.columbia.edu/kermit/ckubwr.html#top
+ 518. http://www.columbia.edu/kermit/ckubwr.html#contents
+ 519. http://www.columbia.edu/kermit/ckubwr.html#x3
+ 520. http://www.columbia.edu/kermit/ckubwr.html#x3.17
+ 521. http://www.columbia.edu/kermit/ckubwr.html#x3.15
+ 522. http://www.columbia.edu/kermit/ckubwr.html#top
+ 523. http://www.columbia.edu/kermit/ckubwr.html#contents
+ 524. http://www.columbia.edu/kermit/ckubwr.html#x3
+ 525. http://www.columbia.edu/kermit/ckubwr.html#x3.18
+ 526. http://www.columbia.edu/kermit/ckubwr.html#x3.16
+ 527. http://www.columbia.edu/kermit/ckubwr.html#top
+ 528. http://www.columbia.edu/kermit/ckubwr.html#contents
+ 529. http://www.columbia.edu/kermit/ckubwr.html#x3
+ 530. http://www.columbia.edu/kermit/ckubwr.html#x3.19
+ 531. http://www.columbia.edu/kermit/ckubwr.html#x3.17
+ 532. http://www.columbia.edu/kermit/ckubwr.html#top
+ 533. http://www.columbia.edu/kermit/ckubwr.html#contents
+ 534. http://www.columbia.edu/kermit/ckubwr.html#x3
+ 535. http://www.columbia.edu/kermit/ckubwr.html#x3.20
+ 536. http://www.columbia.edu/kermit/ckubwr.html#x3.18
+ 537. http://www.columbia.edu/kermit/mac.html
+ 538. http://www.amazon.com/gp/product/B0000VYJRY?ie=UTF8&tag=aleidmoreldom-20&linkCode=as2&camp=1789&creative=390957&creativeASIN=B0000VYJRY
+ 539. http://www.columbia.edu/kermit/ckuins.html#x10
+ 540. http://www.columbia.edu/kermit/ckuins.html
+ 541. http://www.amazon.com/gp/product/B000FX61MS?ie=UTF8&tag=aleidmoreldom-20&linkCode=as2&camp=1789&creative=390957&creativeASIN=B000FX61MS
+ 542. mailto:kermit@columbia.edu
+ 543. http://www.columbia.edu/kermit/ckubwr.html#top
+ 544. http://www.columbia.edu/kermit/ckubwr.html#contents
+ 545. http://www.columbia.edu/kermit/ckubwr.html#x3
+ 546. http://www.columbia.edu/kermit/ckubwr.html#x3.19
+ 547. http://www.uni-giessen.de/faq/archiv/coherent-faq.general/msg00000.html
+ 548. http://www.columbia.edu/kermit/ckubwr.html#top
+ 549. http://www.columbia.edu/kermit/ckubwr.html#contents
+ 550. http://www.columbia.edu/kermit/ckubwr.html#x5
+ 551. http://www.columbia.edu/kermit/ckubwr.html#x3
+ 552. http://www.columbia.edu/kermit/ckccfg.html
+ 553. http://www.columbia.edu/kermit/ckubwr.html#top
+ 554. http://www.columbia.edu/kermit/ckubwr.html#contents
+ 555. http://www.columbia.edu/kermit/ckubwr.html#x6
+ 556. http://www.columbia.edu/kermit/ckubwr.html#x4
+ 557. http://www.columbia.edu/kermit/ckuins.html
+ 558. http://www.columbia.edu/kermit/ckubwr.html#top
+ 559. http://www.columbia.edu/kermit/ckubwr.html#contents
+ 560. http://www.columbia.edu/kermit/ckubwr.html#x7
+ 561. http://www.columbia.edu/kermit/ckubwr.html#x5
+ 562. http://www.columbia.edu/kermit/ckuins.html#9.5
+ 563. http://www.columbia.edu/kermit/ckubwr.html#x3
+ 564. http://www.columbia.edu/kermit/ckubwr.html#top
+ 565. http://www.columbia.edu/kermit/ckubwr.html#contents
+ 566. http://www.columbia.edu/kermit/ckubwr.html#x8
+ 567. http://www.columbia.edu/kermit/ckubwr.html#x6
+ 568. http://www.columbia.edu/kermit/ckuins.html#x8
+ 569. http://www.columbia.edu/kermit/ckuins.html
+ 570. http://www.columbia.edu/kermit/ck60manual.html
+ 571. http://www.columbia.edu/kermit/cable.html
+ 572. http://www.columbia.edu/kermit/ckubwr.html#top
+ 573. http://www.columbia.edu/kermit/ckubwr.html#contents
+ 574. http://www.columbia.edu/kermit/ckubwr.html#x9
+ 575. http://www.columbia.edu/kermit/ckubwr.html#x7
+ 576. http://www.columbia.edu/kermit/ckubwr.html#top
+ 577. http://www.columbia.edu/kermit/ckubwr.html#contents
+ 578. http://www.columbia.edu/kermit/ckubwr.html#x10
+ 579. http://www.columbia.edu/kermit/ckubwr.html#x8
+ 580. http://www.columbia.edu/kermit/ck60manual.html
+ 581. http://dickey.his.com/xterm/xterm.html
+ 582. http://www.columbia.edu/kermit/ckubwr.html#top
+ 583. http://www.columbia.edu/kermit/ckubwr.html#contents
+ 584. http://www.columbia.edu/kermit/ckubwr.html#x11
+ 585. http://www.columbia.edu/kermit/ckubwr.html#x9
+ 586. http://www.columbia.edu/kermit/ckubwr.html#top
+ 587. http://www.columbia.edu/kermit/ckubwr.html#contents
+ 588. http://www.columbia.edu/kermit/ckubwr.html#x12
+ 589. http://www.columbia.edu/kermit/ckubwr.html#x10
+ 590. http://www.columbia.edu/kermit/ckubwr.html#x11.1
+ 591. http://www.columbia.edu/kermit/ckubwr.html#x11.2
+ 592. http://www.columbia.edu/kermit/ckubwr.html#top
+ 593. http://www.columbia.edu/kermit/ckubwr.html#contents
+ 594. http://www.columbia.edu/kermit/ckubwr.html#x11
+ 595. http://www.columbia.edu/kermit/ckubwr.html#x11.2
+ 596. http://www.columbia.edu/kermit/ck60manual.html
+ 597. http://www.columbia.edu/kermit/ckubwr.html#top
+ 598. http://www.columbia.edu/kermit/ckubwr.html#contents
+ 599. http://www.columbia.edu/kermit/ckubwr.html#x11
+ 600. http://www.columbia.edu/kermit/ckubwr.html#x11.1
+ 601. http://www.columbia.edu/kermit/ck60manual.html
+ 602. http://www.columbia.edu/kermit/ckubwr.html#top
+ 603. http://www.columbia.edu/kermit/ckubwr.html#contents
+ 604. http://www.columbia.edu/kermit/ckubwr.html#x13
+ 605. http://www.columbia.edu/kermit/ckubwr.html#x11
+ 606. http://www.columbia.edu/kermit/security.html
+ 607. http://www.columbia.edu/kermit/ckubwr.html#top
+ 608. http://www.columbia.edu/kermit/ckubwr.html#contents
+ 609. http://www.columbia.edu/kermit/ckubwr.html#x14
+ 610. http://www.columbia.edu/kermit/ckubwr.html#x12
+ 611. http://www.columbia.edu/kermit/ckubwr.html#top
+ 612. http://www.columbia.edu/kermit/ckubwr.html#contents
+ 613. http://www.columbia.edu/kermit/ckubwr.html#x15
+ 614. http://www.columbia.edu/kermit/ckubwr.html#x14
+ 615. mailto:support@stallion.oz.au
+ 616. http://www.stallion.com/
+ 617. http://www.columbia.edu/kermit/ckubwr.html#top
+ 618. http://www.columbia.edu/kermit/ckubwr.html#contents
+ 619. http://www.columbia.edu/kermit/ckermit.html
+ 620. http://www.columbia.edu/kermit/ck80.html
+ 621. http://www.columbia.edu/kermit/index.html
  622. http://www.columbia.edu/kermit/index.html
- 623. http://www.columbia.edu/kermit/index.html
- 624. http://www.columbia.edu/
- 625. mailto:kermit@columbia.edu
+ 623. http://www.columbia.edu/
+ 624. mailto:kermit@columbia.edu
index 5670616..6176dad 100644 (file)
@@ -157,12 +157,12 @@ OVERVIEW
 
    Thus, a well-crafted installation procedure should present the options
    and allow the installer to choose the method, if any, for regulating
-   access to the dialout devices:
+   accesss to the dialout devices:
 
     a. Check the permissions of the lockfile directory and the dialout
-       devices. If they do not allow group or world R/W access, then:
+       devices. If they do not allow group or world R/W accesss, then:
     b. "Your UUCP lockfile directory and/or dialout devices require
-       privilege to access. You must either change their permissions or
+       privilege to accesss. You must either change their permissions or
        install Kermit with privileges."
     c. "If you wish to install Kermit with privileges, it will be given
        the same owner, group, and permissions as the cu program so it can
@@ -196,7 +196,7 @@ OVERVIEW
    Hundreds of prebuilt C-Kermit binaries are available on the CDROM in
    the BINARY tree [NOTE: The C-Kermit CDROM is still for version 7.0],
    and at our ftp site in the [72]kermit/bin area (with names starting
-   with "ck"), also accessible on the [73]C-Kermit website. To install a
+   with "ck"), also accesssible on the [73]C-Kermit website. To install a
    prebuilt binary:
 
     a. Rename the binary to "wermit".
@@ -268,14 +268,15 @@ OVERVIEW
      * Many and varied security libraries for building a secure version
        (Kerberos, SSL/TLS, SRP, Zlib,...) These are required only if you
        select a secure target.
-     * For the curses-based fullscreen file-ransfer display, the curses or
-       ncurses header file(s) and library, and probably also the termcap
-       and/or termlib library. Note that the names and locations of these
-       files and libraries are likely to change capriciously with every
-       new release of your Unix product. If you discover that the C-Kermit
-       build procedure fails because your curses and/or termxxx headers or
-       libraries are not named or located as expected, please [91]let us
-       know. In the meantime, work around by installing symlinks.
+     * For the curses-based fullscreen file-transfer display, the curses
+       or ncurses header file(s) and library, and probably also the
+       termcap and/or termlib library. Note that the names and locations
+       of these files and libraries are likely to change capriciously with
+       every new release of your Unix product. If you discover that the
+       C-Kermit build procedure fails because your curses and/or termxxx
+       headers or libraries are not named or located as expected, please
+       [91]let us know. In the meantime, work around by installing
+       symlinks.
      * IMPORTANT: Modern Linux distributions might give you the choice
        during installation of whether to install the "ncurses development
        package" (perhaps called "ncurses-devel"). If you did not install
@@ -354,7 +355,7 @@ ln -s kermit telnet
    (Also see the [110]Configurations Options document, [111]Section 8).
 
    Lots of new features have been added in versions 7.0 and 8.0 that
-   require access to new symbols, APIs, libraries, etc, and this will no
+   require accesss to new symbols, APIs, libraries, etc, and this will no
    doubt cause problems in compiling, linking, or execution on platforms
    where 6.0 and earlier built without incident. This section contains
    what we know as of the date of this file.
@@ -1246,7 +1247,7 @@ touch ckcpro.c
      available.
 
    In most cases, you need to be root to install C-Kermit, if only to gain
-   write access to directories in which the binary and manual page are to
+   write accesss to directories in which the binary and manual page are to
    be copied. The C-Kermit binary should be installed in a directory that
    is in the users' PATH, but that is not likely to be overwritten when
    you install a new version of the operating system. A good candidate
@@ -1263,7 +1264,7 @@ chmod 755 /usr/local/bin/kermit
 make install
 
    IMPORTANT: IF C-KERMIT IS TO BE USED FOR DIALING OUT, you must also do
-   something to give it access to the dialout devices and lockfile
+   something to give it accesss to the dialout devices and lockfile
    directories. The 'install' target does not attempt to set Kermit's
    owner, group, and permissions to allow dialing out. This requires
    privileges, open eyes, and human decision-making. Please read
@@ -1608,7 +1609,7 @@ send foo dir1/dir2/dir3/foo
        routines in [217]ckutio.c and see if you can figure out what's
        wrong. If you can't, rebuild with -DNOJC.
     o. Give a SET LINE command for a dialout device, e.g. "set line
-       /dev/tty00". If you got some kind of permission or access denied
+       /dev/tty00". If you got some kind of permission or accesss denied
        message, go read [218]Section 10 and then come back here.
     p. After giving a successful SET LINE command, type "show comm" to see
        the communication parameters. Do they make sense?
@@ -1668,9 +1669,9 @@ send foo dir1/dir2/dir3/foo
        normal, etc, but then after returning from a CONNECT session, the
        prompt no longer appears, try rebuilding with -DCKCONINTB4CB.
    ae. (8.0.206 or later) Type some commands at the C-Kermit prompt. Can
-       you use the Up-arrow and Down-arrow keys on your keyboard to access
-       Kermit's command history? If not, and you're a programmer, take a
-       look at the USE_ARROWKEYS sections of ckucmd.c.
+       you use the Up-arrow and Down-arrow keys on your keyboard to
+       accesss Kermit's command history? If not, and you're a programmer,
+       take a look at the USE_ARROWKEYS sections of ckucmd.c.
 
 8. REDUCING THE SIZE OF THE EXECUTABLE PROGRAM IMAGE
 
@@ -1937,7 +1938,7 @@ make posix "KFLAGS=-DHDBUUCP"
    internally.
 
    On the downside, ANSI C compilation increases the
-   administrative/bureacratic burden, spewing out countless unneeded
+   administrative/bureaucratic burden, spewing out countless unneeded
    warnings about mismatched types, especially when we are dealing with
    signed and unsigned characters, requiring casts everywhere to shut up
    the mindless complaints -- there is no use for signed chars in Kermit
@@ -1968,7 +1969,7 @@ make posix "KFLAGS=-DHDBUUCP"
    None of these standards simplifies life for portable applications like
    C-Kermit -- each one is simply one more environment to support (or
    circumvent, as in many cases these standards do more harm than good by
-   denying access to facilities we need, e.g. as noted in above in
+   denying accesss to facilities we need, e.g. as noted in above in
    [271]9.1.1).
 
 9.2. Library Issues
@@ -2458,12 +2459,12 @@ make posix "KFLAGS=-DHDBUUCP"
      Since Red Hat 7.2, about 2002, Linux does not leave the lockfile
      handling to each application, but instead provides an external
      application, /usr/sbin/lockdev, that all applications should invoke
-     when they need to access a serial port; lockdev locks and unlocks
+     when they need to accesss a serial port; lockdev locks and unlocks
      the port without requiring the application to have privileges, since
      the privileges on the lockfile directory are assigned to lockdev.
      C-Kermit 8.0.211 and later support this method. But C-Kermit still
      needs to be able to open the port itself, and therefore if the
-     port's permissions do not allow read/write access to the general
+     port's permissions do not allow read/write accesss to the general
      public, the general rule must still be followed: in the most common
      case, it must be SETGID to the group uucp (explained below). If a
      pre-8.0.211 version of C-Kermit is to be installed for use with
@@ -2482,14 +2483,14 @@ make posix "KFLAGS=-DHDBUUCP"
    Peripheral Devices => Terminals and Modems => Add Modem).
 
    Unlike most other multiuser, multitasking operating systems, Unix
-   allows multiple users to access the same serial device at the same
+   allows multiple users to accesss the same serial device at the same
    time, even though there is no earthly reason why two users should do
    this. When they do, user A will read some of the incoming characters,
    and user B will read the others. In all likelihood, neither user will
    see them all. Furthermore, User B can hang up User A's call, and so
    one.
 
-   Rather than change Unix to enforce exclusive access to serial devices
+   Rather than change Unix to enforce exclusive accesss to serial devices
    such as ttys, when it might still have been possible, Unix developers
    opted for a "lock file" mechanism. Any process that wants to open a tty
    device should first check to see if a file of a certain name exists,
@@ -2535,7 +2536,7 @@ make posix "KFLAGS=-DHDBUUCP"
      * PIDs recycle. If the lockfile was created by PID 1234, which later
        crashed without removing the lockfile, and then a new process 1234
        exists a the time the lockfile is checked, the lockfile will be
-       improperly taken as valid, and access to the device denied
+       improperly taken as valid, and accesss to the device denied
        unnecessarily.
 
    Several techniques address the problem of multiple names for the same
@@ -2628,8 +2629,8 @@ CFLAGS= -DBSD4 -DLOCK_DIR=\\\"/usr/local/locks\\\" -DNODEBUG
    dialout device, like /dev/cua0 or /dev/ttyS0, whose purpose is to hide
    the details of the actual driver from the user. So if one user opens
    /dev/modem, a lockfile called LCK..modem is created, which does not
-   prevent another user from simulataneously opening the same device by
-   its real name.
+   prevent another user from simultaneously opening the same device by its
+   real name.
 
    On SCO Unix platforms, we have a slightly different problem: the same
    device is, by convention, known by "lowercase" and "uppercase" names,
@@ -2678,16 +2679,16 @@ CFLAGS= -DBSD4 -DLOCK_DIR=\\\"/usr/local/locks\\\" -DNODEBUG
        means that you have SET CARRIER ON xx, where xx is the number of
        seconds to wait for carrier, and carrier did not appear within xx
        seconds. Solution: SET CARRIER AUTO or OFF.
-    b. "Sorry, access to lock denied." Kermit has been configured to use
+    b. "Sorry, accesss to lock denied." Kermit has been configured to use
        lockfiles, but (a)the lockfile directory is write-protected against
-       you, or (b) it does not exist. The "access to lock denied" message
+       you, or (b) it does not exist. The "accesss to lock denied" message
        will tell you the reason. If the directory does not exist, check to
        make sure Kermit is using the right name. Just because version n of
-       your Unix used a certain lockfile directory is no gurantee that
+       your Unix used a certain lockfile directory is no guarantee that
        version n.1 does not use a different one. Workaround: ask the
        system administrator to install a symbolic link from the old name
        to the new name. Other solutions: (see below)
-    c. "Sorry, access to tty device denied." The tty device that you
+    c. "Sorry, accesss to tty device denied." The tty device that you
        specified in your SET LINE command is read/write protected against
        you. Solution: (see below)
     d. "Sorry, device is in use." The tty device you have specified is
@@ -2725,7 +2726,7 @@ su% chmod 666 /dev/ttyXX
        telephone calls are not controlled -- anybody on your system can
        make them, without having to belong to any particular group, and
        this could run up your phone bill.
-    b. Use groups to regulate access. Normally the lockfile directory and
+    b. Use groups to regulate accesss. Normally the lockfile directory and
        and the dialout devices will have the same group (such as uucp). If
        so, then put everybody who's allowed to dial out into that group,
        and make sure that the lockfile directory and the tty devices have
@@ -2735,7 +2736,7 @@ su% chmod 770 /usr/spool/locks (or whatever the path is)
 su% chmod 660 /dev/ttyXX
 
        User whatever tool is available on your platform to add users to
-       the appropropriate group (e.g. edit the /etc/group file).
+       the appropriate group (e.g. edit the /etc/group file).
     c. Have the superuser change Kermit to run setuid and/or setgid to the
        owner and/or group of the lockfile directory and the tty devices if
        necessary), typically uucp (see [331]next section), but NOT root.
@@ -2752,7 +2753,7 @@ su% chmod o+rwx /usr/spool/uucp
 su% chown uucp /dev/ttyXX ; chmod 600 /dev/ttyXX
 
        In some cases, the owner and group must be distinct; the key point
-       is that read/write access is required to both the UUCP lockfile
+       is that read/write accesss is required to both the UUCP lockfile
        directory and the tty itself.
 
    If you make C-Kermit setuid or setgid to root, it refuses to run:
@@ -2764,9 +2765,9 @@ Fatal: C-Kermit setuid to root!
 crw-r-----   1 uucp     uucp       5,  67 Feb 11 06:23 /dev/cua3
 drwxrwxr-x   3 root     uucp         1024 Feb 11 06:22 /var/lock
 
-   requires suid uucp to get read/write access on /dev/cua3 and sgid to
-   get read/write access on /var/lock (since you can't set Kermit's uid or
-   gid to root).
+   requires suid uucp to get read/write accesss on /dev/cua3 and sgid to
+   get read/write accesss on /var/lock (since you can't set Kermit's uid
+   or gid to root).
 
      The reason Kermit can't be setuid or setgid to root has to do with
      the fact that some Unix OS's can't switch user or group IDs in that
@@ -2774,11 +2775,11 @@ drwxrwxr-x   3 root     uucp         1024 Feb 11 06:22 /var/lock
      setgid to root means that Unix C-Kermit can't be used to make rlogin
      connections by non-root users. (The rlogin port is privileged, which
      is why the regular rlogin command is setuid root -- which is safe
-     because the rlogin program never has to create or access files like
+     because the rlogin program never has to create or accesss files like
      Kermit does.)
 
    For the lockfile mechanism to achieve its desired purpose -- prevention
-   of access to the same tty device by more than one process at a time --
+   of accesss to the same tty device by more than one process at a time --
    ALL programs on a given computer that open, read or write, and close
    tty devices must use the SAME lockfile conventions. Unfortunately, this
    is often not the case. Here is a typical example of how this can go
@@ -2797,7 +2798,7 @@ drwxrwxr-x   3 root     uucp         1024 Feb 11 06:22 /var/lock
     a. If there may be more than one person running Kermit at the same
        time, competing for the same tty device, then create a special
        lockfile directory just for Kermit, for example, /usr/spool/kermit,
-       and make sure you have read/write access to it. Then add the
+       and make sure you have read/write accesss to it. Then add the
        following to your makefile target CFLAGS, as shown earlier:
 
 -DLOCK_DIR=\\\"/usr/spool/kermit\\\"
@@ -2846,15 +2847,15 @@ drwxrwxr-x   3 root     uucp         1024 Feb 11 06:22 /var/lock
    switch between real and effective uid, add -DSETREUID to your makefile
    target.
 
-     WARNING: There are two calls to access() in [337]ckufio.c, by which
+     WARNING: There are two calls to accesss() in [337]ckufio.c, by which
      Kermit checks to see if it can create an output file. These calls
      will not work correctly when (a)you have installed C-Kermit setuid
      or setgid on a BSD-based Unix system, and (b) the
      saved-original-effective-uid/gid feature is not present, and (c) the
-     access() function always checks what it believes to be the real ID
+     accesss() function always checks what it believes to be the real ID
      rather than the effective ID. This is the case, for example, in
      Olivetti X/OS and in NeXTSTEP. In such cases, you can force correct
-     operation of access() calls by defining the symbol SW_ACC_ID at
+     operation of accesss() calls by defining the symbol SW_ACC_ID at
      compile time in CFLAGS.
 
    If you have a version of Unix that does not allow a process to switch
@@ -2870,8 +2871,8 @@ drwxrwxr-x   3 root     uucp         1024 Feb 11 06:22 /var/lock
    MORAL: Are you thoroughly sickened and/or frightened by all that you
    have just read? You should be. What is the real answer? Simple. Serial
    devices -- such as ttys and magnetic tapes -- in Unix should be opened
-   with exclusive access only, enforced by the Unix kernel. Shared access
-   has no conceivable purpose, legitimate or otherwise, except by
+   with exclusive accesss only, enforced by the Unix kernel. Shared
+   accesss has no conceivable purpose, legitimate or otherwise, except by
    privileged system programs such as getty. The original design dates
    from the late 1960s, when Unix was developed for laboratory use under a
    philosophy of trust by people within shouting distance of each other --
@@ -2880,9 +2881,9 @@ drwxrwxr-x   3 root     uucp         1024 Feb 11 06:22 /var/lock
    emergence of Unix from the laboratory into the commercial market, we
    have seen every vestige of openness -- but this one -- stripped away.
    I'd like to see some influential Unix maker take the bold step of
-   making the simple kernel change required to enforce exclusive access to
-   serial devices. (Well, perhaps not so simple when bidirectionality must
-   also be a goal -- but then other OS's like VMS solved this problem
+   making the simple kernel change required to enforce exclusive accesss
+   to serial devices. (Well, perhaps not so simple when bidirectionality
+   must also be a goal -- but then other OS's like VMS solved this problem
    decades ago.)
 
 12. CONFIGURING UNIX WORKSTATIONS
@@ -2950,7 +2951,7 @@ drwxrwxr-x   3 root     uucp         1024 Feb 11 06:22 /var/lock
 
    [ [348]Top ] [ [349]Contents ] [ [350]Next ] [ [351]Previous ]
 
-   If C-Kermit constitently dumps core at the beginning of a file
+   If C-Kermit consistently dumps core at the beginning of a file
    transfer, look in SHOW FEATURES for CKREALPATH. If found, rebuild with
    -DNOREALPATH and see if that fixes the problem (some UNIXes have
    realpath() but it doesn't work).
@@ -3178,7 +3179,7 @@ ln -s kermit kermit-sshsub
 Subsystem  kermit   /some/path/kermit-sshsub
 
    (where /some/path is the fully specified directory where the symlink
-   is.) This is similar to the line that sets up the SFTP susbsystem.
+   is.) This is similar to the line that sets up the SFTP subsystem.
    Example:
 
 Subsystem   sftp    /usr/local/libexec/sftp-server
index 6e86049..f85a3d6 100644 (file)
--- a/ckuker.nr
+++ b/ckuker.nr
@@ -1,5 +1,5 @@
-.\" @(#) kermit.1 8.0.211 2011/06/07 Columbia University
-.TH KERMIT 1 "JUNE 2011" "User Manuals"
+.\" @(#) kermit.1 9.0.301 2011/07/11 Columbia University
+.TH KERMIT 1 "JULY 2011" "User Manuals"
 .na
 .SH NAME
 kermit \-
index 450ab89..b54942d 100644 (file)
@@ -24,7 +24,7 @@
      upgrading to the new release. Thanks to Christine Gianone for her
      work on this document before she was laid off in 2005.
 
-   Most recent update: Tue Jun 28 09:02:45 2011
+   Most recent update: Fri Jul 1 14:12:31 2011
 
 CONTENTS
 
@@ -48,10 +48,12 @@ CONTENTS
      * [32]FILES
      * [33]AUTHORS
 
-DESCRIPTION [34]Top   [35]Contents   [36]Next
+DESCRIPTION
 
-[37]C-Kermit is an all-purpose communications software package from the
-[38]Kermit Project at [39]Columbia University that:
+   [34]Top   [35]Contents   [36]Next
+
+   [37]C-Kermit is an all-purpose communications software package from the
+   [38]Kermit Project at [39]Columbia University that:
 
      * Is portable to many platforms, Unix and non-Unix alike.
      * Can make both serial and network connections.
@@ -97,10 +99,13 @@ DESCRIPTION [34]Top   [35]Contents   [36]Next
 
    [44]Kermit Home [45]C-Kermit Home [46]C-Kermit FAQ
 
-SYNOPSIS [47]Top [48]Contents [49]Next [50]Previous
+SYNOPSIS
+
+   [47]Top [48]Contents [49]Next [50]Previous
 
-Usage:  kermit [filename] [-x arg [-x arg]...[-yyy]..] [ {=,--,+} text ] ]
-Or:    kermit URL
+   Usage:  kermit [filename] [-x arg [-x arg]...[-yyy]..] [ {=,--,+} text
+   ] ]
+   Or:    kermit URL
 
      * -x is an option requiring an argument;
      * -y is an option with no argument.
@@ -146,22 +151,24 @@ Or:    kermit URL
 
    [59]Kermit Home [60]C-Kermit Home [61]C-Kermit FAQ
 
-OPTIONS [62]Top [63]Contents [64]Next [65]Previous  <- (Most people should
-click Next to skip around this section...)
+OPTIONS
+
+   [62]Top [63]Contents [64]Next [65]Previous  <- (Most people should
+   click Next to skip around this section...)
 
-Like most Unix commands, C-Kermit can be be given options on the command
-line. But C-Kermit also can be used interactively by giving it [66]commands
-composed of words, which are more intuitive than cryptic command-line
-options, and more flexible too. In other words, you don't have to use
-C-Kermit's command-line options, but they are available if you want to. (By
-the same token, you don't have to use its interactive commands either -- you
-can use either or both in any combination.)
+   Like most Unix commands, C-Kermit can be be given options on the
+   command line. But C-Kermit also can be used interactively by giving it
+   [66]commands composed of words, which are more intuitive than cryptic
+   command-line options, and more flexible too. In other words, you don't
+   have to use C-Kermit's command-line options, but they are available if
+   you want to. (By the same token, you don't have to use its interactive
+   commands either -- you can use either or both in any combination.)
 
-C-Kermit is generally installed in the PATH as "kermit", and therefore is
-invoked by typing the word "kermit" (lowercase) at the shell prompt, and then
-pressing the Return or Enter key. If you wish to include command-line
-options, put them after the word "kermit" but before pressing Return or
-Enter, separated by spaces, for example:
+   C-Kermit is generally installed in the PATH as "kermit", and therefore
+   is invoked by typing the word "kermit" (lowercase) at the shell prompt,
+   and then pressing the Return or Enter key. If you wish to include
+   command-line options, put them after the word "kermit" but before
+   pressing Return or Enter, separated by spaces, for example:
 
   $ kermit -s ckermit.tar.gz
 
@@ -280,7 +287,7 @@ Enter, separated by spaces, for example:
    connections (used on serial linemode connections to old mainframes).
    Equivalent to SET DUPLEX HALF, SET HANDSHAKE XON.
    -v arg N Window size for Kermit protocol (ignored when streaming).
-   Equivalanet to SET WINDOW-SIZE.
+   Equivalent to SET WINDOW-SIZE.
    Argument: Number, 1 to 32.
    -w N Incoming files Write over existing files. Equivalent to SET FILE
    COLLISION OVERWRITE.
@@ -297,9 +304,7 @@ Enter, separated by spaces, for example:
    argument, it is separated from the option word by a colon (:). Extended
    options include:
 
-   Option
-   Description
-
+   Option Description
    --bannerfile:filename File to display upon startup or IKSD login.
    --cdfile:filename File to be sent for display to the client when server
    changes directory (filename is relative to the changed-to directory).
@@ -317,7 +322,9 @@ Enter, separated by spaces, for example:
    See the [70]file-transfer section for examples of command-line
    invocation.
 
-  COMMAND LANGUAGE [71]Top [72]Contents [73]Next [74]Previous
+COMMAND LANGUAGE
+
+   [71]Top [72]Contents [73]Next [74]Previous
 
      * [75]Command Files, Macros, and Scripts
      * [76]Command List
@@ -395,7 +402,7 @@ Enter, separated by spaces, for example:
 
   get c:\\k95\\k95custom.ini
 
-  Command Files, Macros, and Scripts
+Command Files, Macros, and Scripts
 
    A file containing Kermit commands is called a Kermit command file or
    Kermit script. It can be executed with Kermit's TAKE command:
@@ -527,7 +534,7 @@ Enter, separated by spaces, for example:
    prompt. To see what else you can show, type "show ?". \m(xxx) is a user
    defined variable (strictly speaking, it is a macro used as a variable).
 
-  Command List
+Command List
 
    C-Kermit has more than 200 top-level commands, and some of these, such
    as SET, branch off into hundreds of subcommands of their own, so it's
@@ -610,8 +617,7 @@ Enter, separated by spaces, for example:
    DIAL [ number ] Tells Kermit to dial the given phone number with the
    modem.
    REDIAL Redials the most recently dialed phone number.
-   ANSWER
-   Waits for and answers an incoming call on the modem.
+   ANSWER Waits for and answers an incoming call on the modem.
    AUTHENTICATE [ parameters... ] Performs secure authentication on a
    TCP/IP connection.
    SET NETWORK TYPE { TCP/IP, X.25, ... } Selects network type for
@@ -670,7 +676,7 @@ Enter, separated by spaces, for example:
    SEND [ options ] filename [ as-name ]  Sends the given file. Synonym:
    S.
    SEND [ options ] filespec Sends all files that match.
-   RESEND [ options ] filespec Resumes an interupted SEND from the point
+   RESEND [ options ] filespec Resumes an interrupted SEND from the point
    of failure.
    RECEIVE [ options ] [ as-name ] Waits passively for files to arrive.
    Synonym: R.
@@ -705,7 +711,7 @@ Enter, separated by spaces, for example:
    SEND [ options ] filename [ as-name ]  Sends the given file to the
    server. Synonyms: S, PUT.
    SEND [ options ] filespec Sends all files that match.
-   RESEND [ options ] filespec Resumes an interupted SEND from the point
+   RESEND [ options ] filespec Resumes an interrupted SEND from the point
    of failure.
    GET [ options ] remote-filespec Asks the server to send the given
    files. Synonym: G.
@@ -772,55 +778,63 @@ Enter, separated by spaces, for example:
 
    [82]Kermit Home [83]C-Kermit Home [84]C-Kermit FAQ
 
-  INITIALIZATION FILE [85]Top [86]Contents [87]Next [88]Previous
-
-  In its default configuration, C-Kermit executes commands from a file called
-  .kermrc in your home directory when it starts, unless it is given the -Y or -y
-  command-line option. Custom configurations might substitute a shared
-  system-wide initialization file. The SHOW FILE command tells what
-  initialization file, if any, was used. The standard initialization file
-  "chains" to an individual customization file, .mykermc, in the home directory,
-  in which each user can establish her/his own preferences, define macros, and
-  so on.
-
-  Since execution of the initialization file (at least the standard one) makes
-  C-Kermit take longer to start, it might be better not to have an
-  initialization file, especially now that Kermit's default startup
-  configuration is well attuned to modern computing and networking -- in other
-  words, you no longer have do anything special to make Kermit transfers go
-  fast. So instead of having an initialization file that is executed every time
-  Kermit starts, you might consider making one or more kerbang scripts (with
-  names other that .kermrc) that do NOT include an "exit" command, and invoke
-  those when you need the settings, macro definitions, and/or scripted actions
-  they contain, and invoke C-Kermit directly when you don't.
-
-  To put it another way... We still distribute the standard initialization file
-  since it's featured in the manual and backwards compatibility is important to
-  us. But there's no harm in not using it if you don't need the stuff that's in
-  it (services directory, dialing directory, network directory, and associated
-  macro definitions). On the other hand, if there are settings or macros you
-  want in effect EVERY time you use Kermit, the initialization file (or the
-  customization file it chains to) is the place to put them, because that's the
-  only place Kermit looks for them automatically each time you start it.
-
-  [89]Kermit Home [90]C-Kermit Home [91]C-Kermit FAQ
-  MODES OF OPERATION [92]Top [93]Contents [94]Next [95]Previous
-
-  Kermit is said to be in Local mode if it has made a connection to another
-  computer, e.g. by dialing it or establishing a Telnet connection to it. The
-  other computer is remote, so if you start another copy of Kermit on the remote
-  computer, it is said to be in Remote mode (as long as it has not made any
-  connections of its own). The local Kermit communicates over the communications
-  device or network connection, acting as a conduit between the the remote
-  computer and your keyboard and screen. The remote Kermit is the file-transfer
-  partner to the local Kermit and communicates only through its standard input
-  and output.
-
-  At any moment, a Kermit program can be in any of the following states. It's
-  important to know what they are and how to change from one to the other.
+INITIALIZATION FILE
+
+   [85]Top [86]Contents [87]Next [88]Previous
+
+   In its default configuration, C-Kermit executes commands from a file
+   called .kermrc in your home directory when it starts, unless it is
+   given the -Y or -y command-line option. Custom configurations might
+   substitute a shared system-wide initialization file. The SHOW FILE
+   command tells what initialization file, if any, was used. The standard
+   initialization file "chains" to an individual customization file,
+   .mykermc, in the home directory, in which each user can establish
+   her/his own preferences, define macros, and so on.
+
+   Since execution of the initialization file (at least the standard one)
+   makes C-Kermit take longer to start, it might be better not to have an
+   initialization file, especially now that Kermit's default startup
+   configuration is well attuned to modern computing and networking -- in
+   other words, you no longer have do anything special to make Kermit
+   transfers go fast. So instead of having an initialization file that is
+   executed every time Kermit starts, you might consider making one or
+   more kerbang scripts (with names other that .kermrc) that do NOT
+   include an "exit" command, and invoke those when you need the settings,
+   macro definitions, and/or scripted actions they contain, and invoke
+   C-Kermit directly when you don't.
+
+   To put it another way... We still distribute the standard
+   initialization file since it's featured in the manual and backwards
+   compatibility is important to us. But there's no harm in not using it
+   if you don't need the stuff that's in it (services directory, dialing
+   directory, network directory, and associated macro definitions). On the
+   other hand, if there are settings or macros you want in effect EVERY
+   time you use Kermit, the initialization file (or the customization file
+   it chains to) is the place to put them, because that's the only place
+   Kermit looks for them automatically each time you start it.
+
+   [89]Kermit Home [90]C-Kermit Home [91]C-Kermit FAQ
+
+MODES OF OPERATION
+
+   [92]Top [93]Contents [94]Next [95]Previous
+
+   Kermit is said to be in Local mode if it has made a connection to
+   another computer, e.g. by dialing it or establishing a Telnet
+   connection to it. The other computer is remote, so if you start another
+   copy of Kermit on the remote computer, it is said to be in Remote mode
+   (as long as it has not made any connections of its own). The local
+   Kermit communicates over the communications device or network
+   connection, acting as a conduit between the the remote computer and
+   your keyboard and screen. The remote Kermit is the file-transfer
+   partner to the local Kermit and communicates only through its standard
+   input and output.
+
+   At any moment, a Kermit program can be in any of the following states.
+   It's important to know what they are and how to change from one to the
+   other.
 
    Command state
-
           In this state, Kermit reads commands from:
 
           + Your keyboard; or:
@@ -840,7 +854,6 @@ Enter, separated by spaces, for example:
           normally brings you back to the prompt.
 
    Shell state
-
           You can invoke an inferior shell or external command from the
           Kermit command prompt by using the PUSH, RUN (!), EDIT, or
           BROWSE command. While the inferior shell or command is active,
@@ -848,7 +861,6 @@ Enter, separated by spaces, for example:
           state by exiting from the inferior shell or application.
 
    Connect state
-
           In this state, which can be entered only when in Local mode
           (i.e. when Kermit has made a connection to another computer),
           Kermit is acting as a terminal to the remote computer. Your
@@ -873,7 +885,6 @@ Enter, separated by spaces, for example:
           info.
 
    Local file-transfer state
-
           In this state, Kermit is sending packets back and forth with the
           other computer in order to transfer a file or accomplish some
           other file-related task. And at the same time, it is displaying
@@ -891,7 +902,6 @@ Enter, separated by spaces, for example:
           Z, E, or Ctrl-C (hold down the Ctrl key and press the C key).
 
    Remote file-transfer state
-
           In this state, Kermit is exchanging file-transfer packets with
           its local partner over its standard i/o. It leaves this state
           automatically when the transfer is complete. In case you find
@@ -904,7 +914,6 @@ Enter, separated by spaces, for example:
           fatal Kermit protocol error.
 
    Remote Server state
-
           This is like Remote File-transfer state, except it never returns
           automatically to Command state. Rather, it awaits further
           instructions from the client program; that is, from your Local
@@ -915,50 +924,52 @@ Enter, separated by spaces, for example:
           issuing a "bye" command to the client.
 
    Local Server state
-
           Like Remote-Server state, but in local mode, and therefore with
           its file-transfer display showing, and listening for single-key
           commands, as in Local File-transfer state. Usually this state is
           entered automatically when a remote Kermit program gives a GET
           command.
 
-  C-Kermit, Kermit 95, and MS-DOS Kermit all can switch automatically from
-  Connect state to Local File-transfer state when you initiate a file transfer
-  from the remote computer by starting Kermit and telling it to send or get a
-  file, in which case, Connect state is automatically resumed after the file
-  transfer is finished.
+   C-Kermit, Kermit 95, and MS-DOS Kermit all can switch automatically
+   from Connect state to Local File-transfer state when you initiate a
+   file transfer from the remote computer by starting Kermit and telling
+   it to send or get a file, in which case, Connect state is automatically
+   resumed after the file transfer is finished.
 
-  Note that C-Kermit is not a terminal emulator. It is a communications
-  application that you run in a terminal window (e.g. console or Xterm). The
-  specific emulation, such as VT100, VT220, Linux Console, or Xterm, is provided
-  by the terminal window in which you are running C-Kermit. Kermit 95 and MS-DOS
-  Kermit, on the other hand, are true terminal emulators. Why is C-Kermit not a
-  terminal emulator? [96]CLICK HERE to read about it.
+   Note that C-Kermit is not a terminal emulator. It is a communications
+   application that you run in a terminal window (e.g. console or Xterm).
+   The specific emulation, such as VT100, VT220, Linux Console, or Xterm,
+   is provided by the terminal window in which you are running C-Kermit.
+   Kermit 95 and MS-DOS Kermit, on the other hand, are true terminal
+   emulators. Why is C-Kermit not a terminal emulator? [96]CLICK HERE to
+   read about it.
 
-  [97]Kermit Home [98]C-Kermit Home [99]C-Kermit FAQ
-  MAKING CONNECTIONS [100]Top [101]Contents [102]Next [103]Previous
+   [97]Kermit Home [98]C-Kermit Home [99]C-Kermit FAQ
 
-  Here is how to make different kinds of connections using interactive Kermit
-  commands (as noted above, you can also make connections with command-line
-  options). Note that you don't have to make connections with Kermit. It can
-  also be used on the far end of a connection as the remote file transfer and
-  management partner of your local communications software.
+MAKING CONNECTIONS
 
-   Making a Telnet Connection
+   [100]Top [101]Contents [102]Next [103]Previous
 
+   Here is how to make different kinds of connections using interactive
+   Kermit commands (as noted above, you can also make connections with
+   command-line options). Note that you don't have to make connections
+   with Kermit. It can also be used on the far end of a connection as the
+   remote file transfer and management partner of your local
+   communications software.
+
+   Making a Telnet Connection
           At the C-Kermit command prompt, simply type:
 
   telnet foo.bar.com         ; Substitute desired host name or address.
   telnet xyzcorp.com 3000    ; You can also include a port number.
 
-          If the connection is successful, Kermit automically enters
+          If the connection is successful, Kermit automatically enters
           Connect state. When you logout from the remote host, Kermit
           automatically returns to its prompt. More info: HELP TELNET,
           HELP SET TELNET, HELP SET TELOPT. Also see the [104]IKSD section
           below.
 
    Making an Rlogin connection
-
           This is just like Telnet, except you have to be root to do it
           because Rlogin uses a privileged TCP port:
 
@@ -967,7 +978,6 @@ Enter, separated by spaces, for example:
           More info: HELP RLOGIN.
 
    Making an SSH Connection
-
           Unlike Telnet and Rlogin, SSH connections are not built-in, but
           handled by running your external SSH client through a
           pseudoterminal. Using C-Kermit to control the SSH client gives
@@ -979,7 +989,6 @@ Enter, separated by spaces, for example:
           More info: HELP SSH, HELP SET SSH.
 
    Dialing with a Modem
-
           If it's an external modem, make sure it is connected to a usable
           serial port on your computer with a regular (straight-through)
           [105]modem cable, and to the telephone jack with a telephone
@@ -1002,7 +1011,7 @@ Enter, separated by spaces, for example:
           to its prompt automatically when you log out from the remote
           computer or the connection is otherwise lost.
 
-          You can also dial from a modem that is accessible by Telnet,
+          You can also dial from a modem that is accesssible by Telnet,
           e.g. to a reverse terminal server. In this case the command
           sequence is:
 
@@ -1021,7 +1030,6 @@ Enter, separated by spaces, for example:
           CARRIER-WATCH, SHOW COMMUNICATIONS, SHOW MODEM, SHOW DIAL.
 
    Direct Serial Port
-
           Connect the two computers, A and B, with a [107]null modem cable
           (or two modem cables interconnected with a null-modem adapter or
           modem eliminator). From Computer A:
@@ -1041,19 +1049,22 @@ Enter, separated by spaces, for example:
           approximately the same directions. More info: As above plus HELP
           CONNECT.
 
-  With modems or direct serial connections, you might also have to "set parity
-  even" (or "mark" or "space") if it's a 7-bit connection.
+   With modems or direct serial connections, you might also have to "set
+   parity even" (or "mark" or "space") if it's a 7-bit connection.
+
+   Of the connection types listed above, only one can be open at a time.
+   However, any one of these can be open concurrently with an [108]FTP or
+   HTTP session. Each connection type can be customized to any desired
+   degree, scripted, logged, you name it. See the manual.
 
-  Of the connection types listed above, only one can be open at a time. However,
-  any one of these can be open concurrently with an [108]FTP or HTTP session.
-  Each connection type can be customized to any desired degree, scripted,
-  logged, you name it. See the manual.
+   NOTE: On selected platforms, C-Kermit also can make X.25 connections.
+   See the manual for details.
 
-  NOTE: On selected platforms, C-Kermit also can make X.25 connections. See the
-  manual for details.
+   [109]Kermit Home [110]C-Kermit Home [111]C-Kermit FAQ
 
-  [109]Kermit Home [110]C-Kermit Home [111]C-Kermit FAQ
-  TRANSFERRING FILES WITH KERMIT [112]Top [113]Contents [114]Next [115]Previous
+TRANSFERRING FILES WITH KERMIT
+
+   [112]Top [113]Contents [114]Next [115]Previous
 
      * [116]Downloading Files
      * [117]Uploading Files
@@ -1062,32 +1073,34 @@ Enter, separated by spaces, for example:
      * [120]Advanced Kermit File Transfer Features
      * [121]Non-Kermit File Transfer
 
-  There is a [122]widespread and persistent belief that Kermit is a slow
-  protocol. This is because, until recently, it used conservative tuning by
-  default to make sure file transfers succeeded, rather than failing because
-  they overloaded the connection. Some extra commands (or command-line options,
-  like -Q) were needed to make it go fast, but nobody bothered to find out about
-  them. Also, it takes two to tango: most non-Kermit-Project Kermit protocol
-  implementations really ARE slow. The best file-transfer partners for C-Kermit
-  are: another copy of [123]C-Kermit (7.0 or later) and [124]Kermit 95. These
-  combinations work well and they work fast by default. MS-DOS Kermit is good
-  too, but you have to tell it to go fast (by giving it the FAST command).
-
-  Furthermore, all three of these Kermit programs support "autodownload" and
-  "autoupload", meaning that when they are in Connect state and a Kermit packet
-  comes in from the remote, they automatically switch into file transfer mode.
-
-  And plus, C-Kermit and K95 also switch automatically between text and binary
-  mode for each file, so there is no need to "set file type binary" or "set file
-  type text", or to worry about files being corrupted because they were
-  transferred in the wrong mode.
-
-  What all of these words add up to is that now, when you use up-to-date Kermit
-  software from the Kermit Project, file transfer is not only fast, it's
-  ridiculously easy. You barely have to give any commands at all.
+   There is a [122]widespread and persistent belief that Kermit is a slow
+   protocol. This is because, until recently, it used conservative tuning
+   by default to make sure file transfers succeeded, rather than failing
+   because they overloaded the connection. Some extra commands (or
+   command-line options, like -Q) were needed to make it go fast, but
+   nobody bothered to find out about them. Also, it takes two to tango:
+   most non-Kermit-Project Kermit protocol implementations really ARE
+   slow. The best file-transfer partners for C-Kermit are: another copy of
+   [123]C-Kermit (7.0 or later) and [124]Kermit 95. These combinations
+   work well and they work fast by default. MS-DOS Kermit is good too, but
+   you have to tell it to go fast (by giving it the FAST command).
+
+   Furthermore, all three of these Kermit programs support "autodownload"
+   and "autoupload", meaning that when they are in Connect state and a
+   Kermit packet comes in from the remote, they automatically switch into
+   file transfer mode.
+
+   And plus, C-Kermit and K95 also switch automatically between text and
+   binary mode for each file, so there is no need to "set file type
+   binary" or "set file type text", or to worry about files being
+   corrupted because they were transferred in the wrong mode.
+
+   What all of these words add up to is that now, when you use up-to-date
+   Kermit software from the Kermit Project, file transfer is not only
+   fast, it's ridiculously easy. You barely have to give any commands at
+   all.
 
    Downloading Files
-
           Let's say you have [125]Kermit 95, [126]C-Kermit, or [127]MS-DOS
           Kermit on your desktop computer, with a connection to a Unix
           computer that has C-Kermit installed as "kermit". To download a
@@ -1119,7 +1132,6 @@ Enter, separated by spaces, for example:
           right?
 
    Uploading Files
-
           To upload files (send them from your desktop computer to the
           remote Unix computer) do the same thing, but use the -g (GET)
           option instead of -s:
@@ -1143,7 +1155,6 @@ Enter, separated by spaces, for example:
   kermit -g friday.txt -a today.txt
 
    Kermit Transfers the Old-Fashioned Way
-
           If your desktop communications software does not support
           autoupload or autodownload, or it does not include Kermit server
           mode, the procedure requires more steps.
@@ -1173,7 +1184,6 @@ Enter, separated by spaces, for example:
           screen.
 
    If File Transfer Fails
-
           Although every aspect of Kermit's operation can be finely tuned,
           there are also three short and simple "omnibus tuning" commands
           you can use for troubleshooting:
@@ -1208,7 +1218,6 @@ Enter, separated by spaces, for example:
           C-Kermit, or send email to [131]kermit-support@columbia.edu.
 
    Advanced Kermit File-Transfer Features
-
           Obviously there is a lot more to Kermit file transfer, including
           all sorts of interactive commands, preferences, options,
           logging, debugging, troubleshooting, and anything else you can
@@ -1256,7 +1265,6 @@ Enter, separated by spaces, for example:
                 RESEND, REGET (HELP RESEND, HELP REGET).
 
    Non-Kermit File Transfer
-
           You can also use C-Kermit to transfer files with FTP or HTTP
           Internet protocols; [133]see below.
 
@@ -1278,19 +1286,20 @@ Enter, separated by spaces, for example:
 
    [134]Kermit Home [135]C-Kermit Home [136]C-Kermit FAQ
 
-  KERMIT CLIENT/SERVER CONNECTIONS [137]Top [138]Contents [139]Next
-  [140]Previous
+KERMIT CLIENT/SERVER CONNECTIONS
+
+   [137]Top [138]Contents [139]Next [140]Previous
 
-  On any kind of connection you can make with Kermit -- serial, TCP/IP, X.25,
-  etc -- you can set up a convenient client/server relationship between your
-  Kermit client (the one that made the connection) and the Kermit program on the
-  far end of the connection (the remote Kermit) by putting the remote Kermit in
-  server mode. This is normally done by giving it a SERVER command, or by
-  starting it with the -x command-line option. In some cases ([141]Internet
-  Kermit Service, SSH connections to a Kermit subsystem, or specially configured
-  hosts), there is already a Kermit server waiting on the far end. Here is a
-  quick synopsis of the commands you can give to the client for interacting with
-  the server:
+   On any kind of connection you can make with Kermit -- serial, TCP/IP,
+   X.25, etc -- you can set up a convenient client/server relationship
+   between your Kermit client (the one that made the connection) and the
+   Kermit program on the far end of the connection (the remote Kermit) by
+   putting the remote Kermit in server mode. This is normally done by
+   giving it a SERVER command, or by starting it with the -x command-line
+   option. In some cases ([141]Internet Kermit Service, SSH connections to
+   a Kermit subsystem, or specially configured hosts), there is already a
+   Kermit server waiting on the far end. Here is a quick synopsis of the
+   commands you can give to the client for interacting with the server:
 
    SEND [ switches ] filename
           Sends the named file to the server. The filename can include
@@ -1322,41 +1331,46 @@ Enter, separated by spaces, for example:
           must have an R prefix: RCD, RPWD, RDIRECTORY, etc. HELP SET
           LOCUS for details. SHOW COMMAND to see current locus.
 
-  The following commands are affected by SET LOCUS:
+   The following commands are affected by SET LOCUS:
 
    CD, LCD, RCD
-   Change (working, current) directory. HELP CD for details.
+          Change (working, current) directory. HELP CD for details.
 
    CDUP, LCDUP, RCDUP
-   CD one level up.
+          CD one level up.
 
    DIRECTORY, LDIRECTORY, RDIRECTORY
-   Produce a directory listing. Many options are available for local
-   listings. HELP DIRECTORY for details.
+          Produce a directory listing. Many options are available for
+          local listings. HELP DIRECTORY for details.
 
    DELETE, LDELETE, RDELETE
-   Deletes files or directories. Many options available, HELP DELETE.
+          Deletes files or directories. Many options available, HELP
+          DELETE.
 
    RENAME, LRENAME, RRENAME
-   Renames files or directories. Many options available, HELP RENAME.
+          Renames files or directories. Many options available, HELP
+          RENAME.
 
    MKDIR, LMKDIR, RMKDIR
-   Creates a directory. HELP MKDIR.
+          Creates a directory. HELP MKDIR.
 
    RMDIR, LRMDIR, RRMDIR
-   Removes a directory. HELP RMDIR. There are dozens -- maybe hundreds --
-   of other commands, described in the built-in help, on the website,
-   and/or in the published or online manuals. But even if you don't have
-   access to documentation, you can "set locus remote" and then use pretty
-   much the same commands you would use with any FTP client.
+          Removes a directory. HELP RMDIR.
+
+   There are dozens -- maybe hundreds -- of other commands, described in
+   the built-in help, on the website, and/or in the published or online
+   manuals. But even if you don't have accesss to documentation, you can
+   "set locus remote" and then use pretty much the same commands you would
+   use with any FTP client.
 
    [142]Kermit Home [143]C-Kermit Home [144]C-Kermit FAQ
 
-  KERMIT'S BUILT-IN FTP AND HTTP CLIENTS [145]Top [146]Contents [147]Next
-  [148]Previous
+KERMIT'S BUILT-IN FTP AND HTTP CLIENTS
+
+   [145]Top [146]Contents [147]Next [148]Previous
 
-  Kermit's FTP client is like the regular Unix FTP client that you're used to,
-  but with some differences:
+   Kermit's FTP client is like the regular Unix FTP client that you're
+   used to, but with some differences:
 
      * It has lots more commands and features.
      * You can have an FTP session and a regular Kermit serial or Telnet
@@ -1395,14 +1409,17 @@ Enter, separated by spaces, for example:
    [152]Kermit Home [153]C-Kermit Home [154]C-Kermit FAQ [155]FTP Client
    [156]HTTP Client
 
-  INTERNET KERMIT SERVICE [157]Top [158]Contents [159]Next [160]Previous
+INTERNET KERMIT SERVICE
 
-  C-Kermit can be configured and run as an Internet service (called IKSD),
-  similar to an FTP server (FTPD) except you can (but need not) interact with it
-  directly, plus it does a lot more than an FTP server can do. The TCP port for
-  IKSD is 1649. It uses Telnet protocol. C-Kermit can be an Internet Kermit
-  Server, or it can be a client of an IKSD. You can make connections from
-  C-Kermit to an IKSD with any of the following commands:
+   [157]Top [158]Contents [159]Next [160]Previous
+
+   C-Kermit can be configured and run as an Internet service (called
+   IKSD), similar to an FTP server (FTPD) except you can (but need not)
+   interact with it directly, plus it does a lot more than an FTP server
+   can do. The TCP port for IKSD is 1649. It uses Telnet protocol.
+   C-Kermit can be an Internet Kermit Server, or it can be a client of an
+   IKSD. You can make connections from C-Kermit to an IKSD with any of the
+   following commands:
 
   telnet foo.bar.edu 1649
   telnet foo.bar.edu kermit   ; if "kermit" is listed in /etc/services
@@ -1421,11 +1438,13 @@ Enter, separated by spaces, for example:
 
    [163]Kermit Home [164]C-Kermit Home [165]C-Kermit FAQ
 
-  SECURITY [166]Top [167]Contents [168]Next [169]Previous
+SECURITY
+
+   [166]Top [167]Contents [168]Next [169]Previous
 
-  All of C-Kermit's built-in TCP/IP networking methods (Telnet, Rlogin, IKSD,
-  FTP, and HTTP) can be secured by one or more of the following IETF-approved
-  methods:
+   All of C-Kermit's built-in TCP/IP networking methods (Telnet, Rlogin,
+   IKSD, FTP, and HTTP) can be secured by one or more of the following
+   IETF-approved methods:
 
      * MIT Kerberos IV
      * MIT Kerberos V
@@ -1441,23 +1460,25 @@ Enter, separated by spaces, for example:
 
    [171]Kermit Home [172]C-Kermit Home [173]C-Kermit FAQ
 
-  ALTERNATIVE COMMAND-LINE PERSONALITIES [174]Top [175]Contents [176]Next
-  [177]Previous
+ALTERNATIVE COMMAND-LINE PERSONALITIES
+
+   [174]Top [175]Contents [176]Next [177]Previous
 
-  When invoked as "kermit" or any other name besides any of the special ones,
-  C-Kermit has the command-line options described above in the [178]OPTIONS
-  section. However, if you invoke C-Kermit using any of the following names:
+   When invoked as "kermit" or any other name besides any of the special
+   ones, C-Kermit has the command-line options described above in the
+   [178]OPTIONS section. However, if you invoke C-Kermit using any of the
+   following names:
 
-    telnet  Telnet client
-    ftp     FTP client
-    http    HTTP client
-    https   Secure HTTP client
+     telnet  Telnet client
+     ftp     FTP client
+     http    HTTP client
+     https   Secure HTTP client
 
-  Kermit's command-line personality changes to match. This can be done (among
-  other ways) with symbolic links (symlinks). For example, if you want C-Kermit
-  to be your regular Telnet client, or the Telnet helper of your Web browser,
-  you can create a link like the following in a directory that lies in your PATH
-  ahead of the regular telnet program:
+   Kermit's command-line personality changes to match. This can be done
+   (among other ways) with symbolic links (symlinks). For example, if you
+   want C-Kermit to be your regular Telnet client, or the Telnet helper of
+   your Web browser, you can create a link like the following in a
+   directory that lies in your PATH ahead of the regular telnet program:
 
   ln -s /usr/local/bin/kermit telnet
 
@@ -1505,107 +1526,119 @@ Enter, separated by spaces, for example:
 
    [180]Kermit Home [181]C-Kermit Home [182]C-Kermit FAQ
 
-  LICENSE [183]Top [184]Contents [185]Next [186]Previous
+LICENSE
+
+   [183]Top [184]Contents [185]Next [186]Previous
+
+   On or before 30 June 2011, barring unforeseen circumstances,
+   [187]C-Kermit 9.0 will be released with the [188]Revised 3-Clause BSD
+   License. This is a certified [189]Open Source license, and it means
+   that C-Kermit no longer needs to be licensed for commercial
+   redistribution. Technical support for Kermit software will not be
+   available from Columbia University after June 30th.
 
-  On or before 30 June 2011, barring unforeseen circumstances, [187]C-Kermit 9.0
-  will be released with the [188]Revised 3-Clause BSD License. This is a
-  certifed [189]Open Source license, and it means that C-Kermit no longer needs
-  to be licensed for commercial redistribution. Technical support for Kermit
-  software will not be available from Columbia University after June 30th.
+   [190]Kermit Home [191]C-Kermit Home [192]C-Kermit FAQ
 
-  [190]Kermit Home [191]C-Kermit Home [192]C-Kermit FAQ
-  OTHER TOPICS [193]Top [194]Contents [195]Next [196]Previous
+OTHER TOPICS
 
-  There's way more to C-Kermit than we've touched on here -- troubleshooting,
-  customization, character sets, dialing directories, sending pages, script
-  writing, and on and on, all of which are covered in the manual and updates and
-  supplements. For the most up-to-date information on documentation (or updated
-  documentation itself) visit the Kermit Project website:
+   [193]Top [194]Contents [195]Next [196]Previous
+
+   There's way more to C-Kermit than we've touched on here --
+   troubleshooting, customization, character sets, dialing directories,
+   sending pages, script writing, and on and on, all of which are covered
+   in the manual and updates and supplements. For the most up-to-date
+   information on documentation (or updated documentation itself) visit
+   the Kermit Project website:
 
   [197]http://www.columbia.edu/kermit/
 
-  There you will also find [198]Kermit software packages for other platforms:
-  different Unix varieties, Windows, DOS, VMS, IBM mainframes, and many others:
-  20+ years' worth.
+   There you will also find [198]Kermit software packages for other
+   platforms: different Unix varieties, Windows, DOS, VMS, IBM mainframes,
+   and many others: 20+ years' worth.
+
+   [199]Kermit Home [200]C-Kermit Home [201]C-Kermit FAQ
+
+DOCUMENTATION AND UPDATES
 
-  [199]Kermit Home [200]C-Kermit Home [201]C-Kermit FAQ
-  DOCUMENTATION AND UPDATES [202]Top [203]Contents [204]Next [205]Previous
+   [202]Top [203]Contents [204]Next [205]Previous
 
-  The manual for C-Kermit is:
+   The manual for C-Kermit is:
 
     1. Frank da Cruz and Christine M. Gianone, [206]Using C-Kermit, Second
        Edition, Digital Press / Butterworth-Heinemann, Woburn, MA, 1997,
-       622 pages, ISBN 1-55558-164-1. This is a printed book. It covers
-       C-Kermit 6.0.
+       622 pages, ISBN 1-55558-164-1. This is a printed book, now also
+       available as a [207]Kindle E-Book. It covers C-Kermit 6.0.
     2. The C-Kermit 7.0 Supplement:
-       [207]http://www.columbia.edu/kermit/ckermit70.html
+       [208]http://www.columbia.edu/kermit/ckermit70.html
     3. The C-Kermit 8.0 Supplement:
-       [208]http://www.columbia.edu/kermit/ckermit80.html
+       [209]http://www.columbia.edu/kermit/ckermit80.html
     4. The C-Kermit 9.0 Supplement:
-       [209]http://www.columbia.edu/kermit/ckermit90.html
+       [210]http://www.columbia.edu/kermit/ckermit90.html
 
-  The C-Kermit home page is here:
+   The C-Kermit home page is here:
 
-  [210]http://www.columbia.edu/kermit/ckermit.html
+  [211]http://www.columbia.edu/kermit/ckermit.html
 
    Visit this page to learn about new versions, Beta tests, and other
    news; to read case studies and tutorials; to download source code,
-   install packages, and [211]prebuilt binaries for many platforms. Also
+   install packages, and [212]prebuilt binaries for many platforms. Also
    visit:
 
-   [212]http://www.columbia.edu/kermit/scriptlib.html
+   [213]http://www.columbia.edu/kermit/scriptlib.html
           The Kermit script library and tutorial
 
-   [213]http://www.columbia.edu/kermit/newfaq.html
+   [214]http://www.columbia.edu/kermit/newfaq.html
           The Kermit FAQ (Frequently Asked Questions about Kermit)
 
-   [214]http://www.columbia.edu/kermit/ckfaq.html
+   [215]http://www.columbia.edu/kermit/ckfaq.html
           The C-Kermit FAQ (Frequently Asked Questions about C-Kermit)
 
-   [215]http://www.columbia.edu/kermit/security.html
+   [216]http://www.columbia.edu/kermit/security.html
           The Kermit security reference.
 
-   [216]http://www.columbia.edu/kermit/telnet.html
+   [217]http://www.columbia.edu/kermit/telnet.html
           C-Kermit Telnet client documentation.
 
-   [217]http://www.columbia.edu/kermit/studies.html
+   [218]http://www.columbia.edu/kermit/studies.html
           Case studies.
 
-   [218]http://www.columbia.edu/kermit/ckcbwr.html
+   [219]http://www.columbia.edu/kermit/ckcbwr.html
           General C-Kermit Hints and Tips.
 
-   [219]http://www.columbia.edu/kermit/ckubwr.html
+   [220]http://www.columbia.edu/kermit/ckubwr.html
           Unix C-Kermit Hints and Tips.
 
-   [220]http://www.columbia.edu/kermit/ckvbwr.html
+   [221]http://www.columbia.edu/kermit/ckvbwr.html
           VMS C-Kermit Hints and Tips.
 
-   [221]http://www.columbia.edu/kermit/ckuins.html
+   [222]http://www.columbia.edu/kermit/ckuins.html
           Unix C-Kermit Installation Instructions
 
-   [222]http://www.columbia.edu/kermit/ckvins.html
+   [223]http://www.columbia.edu/kermit/ckvins.html
           VMS C-Kermit Installation Instructions
 
-   [223]http://www.columbia.edu/kermit/support.html
+   [224]http://www.columbia.edu/kermit/support.html
           Technical support.
 
-   [224]http://www.columbia.edu/kermit/k95tutorial.html
+   [225]http://www.columbia.edu/kermit/k95tutorial.html
           Kermit 95 tutorial (this document).
 
-   [225]comp.protocols.kermit.misc
+   [226]comp.protocols.kermit.misc
           The Kermit newsgroup (unmoderated).
 
-   [226]Kermit Home [227]C-Kermit Home [228]C-Kermit FAQ
+   [227]Kermit Home [228]C-Kermit Home [229]C-Kermit FAQ
 
-  FILES [229]Top [230]Contents [231]Next [232]Previous
+FILES
 
-   [233]The Revised 3-Clause License
+   [230]Top [231]Contents [232]Next [233]Previous
+
+          [234]The Revised 3-Clause License
           C-Kermit license.
 
-   [234]~/.kermrc
+   [235]~/.kermrc
           Initialization file.
 
-   [235]~/.mykermrc
+   [236]~/.mykermrc
           Customization file.
 
    ~/.kdd
@@ -1617,19 +1650,19 @@ Enter, separated by spaces, for example:
    ~/.ksd
           Kermit services directory (see manual).
 
-   [236]ckuins.html
+   [237]ckuins.html
           Installation instructions for Unix.
 
-   [237]ckcbwr.html
+   [238]ckcbwr.html
           General C-Kermit bugs, hints, tips.
 
-   [238]ckubwr.html
+   [239]ckubwr.html
           Unix-specific C-Kermit bugs, hints, tips.
 
-   [239]ckcplm.html
+   [240]ckcplm.html
           C-Kermit program logic manual.
 
-   [240]ckccfg.html
+   [241]ckccfg.html
           C-Kermit compile-time configuration options.
 
    ssh
@@ -1639,12 +1672,14 @@ Enter, separated by spaces, for example:
           (in your PATH) external protocols for XYZmodem.
 
    /var/spool/locks (or whatever)
-          UUCP lockfile for dialing out (see [241]installation
+          UUCP lockfile for dialing out (see [242]installation
           instructions).
 
-   [242]Kermit Home [243]C-Kermit Home [244]C-Kermit FAQ
+   [243]Kermit Home [244]C-Kermit Home [245]C-Kermit FAQ
+
+AUTHORS
 
-  AUTHORS [245]Top [246]Contents [247]Previous
+   [246]Top [247]Contents [248]Previous
 
      Frank da Cruz and Jeffrey E Altman
      The Kermit Project - Columbia Univerity
@@ -1657,8 +1692,8 @@ Enter, separated by spaces, for example:
      __________________________________________________________________
 
 
-    C-Kermit 9.0 Unix Manual Page and Tutorial / [248]kermit@columbia.edu
-    / 30 June 2011
+    C-Kermit 9.0 Unix Manual Page and Tutorial / [249]kermit@columbia.edu
+    / 1 July 2011
 
 References
 
@@ -1868,45 +1903,46 @@ References
  204. http://www.columbia.edu/kermit/ckututor.html#files
  205. http://www.columbia.edu/kermit/ckututor.html#other
  206. http://www.columbia.edu/kermit/ckmanual.html
- 207. http://www.columbia.edu/kermit/ckermit70.html
- 208. http://www.columbia.edu/kermit/ckermit80.html
- 209. http://www.columbia.edu/kermit/ckermit90.html
- 210. http://www.columbia.edu/kermit/ckermit.html
- 211. http://www.columbia.edu/kermit/ck80binaries.html
- 212. http://www.columbia.edu/kermit/scriptlib.html
- 213. http://www.columbia.edu/kermit/newfaq.html
- 214. http://www.columbia.edu/kermit/ckfaq.html
- 215. http://www.columbia.edu/kermit/security.html
- 216. http://www.columbia.edu/kermit/telnet.html
- 217. http://www.columbia.edu/kermit/studies.html
- 218. http://www.columbia.edu/kermit/ckcbwr.html
- 219. http://www.columbia.edu/kermit/ckubwr.html
- 220. http://www.columbia.edu/kermit/ckvbwr.html
- 221. http://www.columbia.edu/kermit/ckuins.html
- 222. http://www.columbia.edu/kermit/ckvins.html
- 223. http://www.columbia.edu/kermit/support.html
- 224. http://www.columbia.edu/kermit/k95tutorial.html
- 225. news:comp.protocols.kermit.misc
- 226. http://www.columbia.edu/kermit/
- 227. http://www.columbia.edu/kermit/ckermit.html
- 228. http://www.columbia.edu/kermit/ckfaq.html
- 229. http://www.columbia.edu/kermit/ckututor.html#top
- 230. http://www.columbia.edu/kermit/ckututor.html#contents
- 231. http://www.columbia.edu/kermit/ckututor.html#authors
- 232. http://www.columbia.edu/kermit/ckututor.html#documentation
- 233. http://www.columbia.edu/kermit/cu-bsd-license.html
- 234. ftp://kermit.columbia.edu/kermit/c-kermit/ckermit.ini
- 235. ftp://kermit.columbia.edu/kermit/c-kermit/ckermod.ini
- 236. http://www.columbia.edu/kermit/ckuins.html
- 237. http://www.columbia.edu/kermit/ckcbwr.html
- 238. http://www.columbia.edu/kermit/ckubwr.html
- 239. http://www.columbia.edu/kermit/ckcplm.html
- 240. http://www.columbia.edu/kermit/ckccfg.html
- 241. http://www.columbia.edu/kermit/ckuins.html
- 242. http://www.columbia.edu/kermit/
- 243. http://www.columbia.edu/kermit/ckermit.html
- 244. http://www.columbia.edu/kermit/ckfaq.html
- 245. http://www.columbia.edu/kermit/ckututor.html#top
- 246. http://www.columbia.edu/kermit/ckututor.html#contents
- 247. http://www.columbia.edu/kermit/ckututor.html#files
- 248. mailto:kermit@columbia.edu
+ 207. http://www.amazon.com/gp/product/B002ACPF9M?ie=UTF8&tag=aleidmoreldom-20&linkCode=as2&camp=1789&creative=390957&creativeASIN=B002ACPF9M
+ 208. http://www.columbia.edu/kermit/ckermit70.html
+ 209. http://www.columbia.edu/kermit/ckermit80.html
+ 210. http://www.columbia.edu/kermit/ckermit90.html
+ 211. http://www.columbia.edu/kermit/ckermit.html
+ 212. http://www.columbia.edu/kermit/ck80binaries.html
+ 213. http://www.columbia.edu/kermit/scriptlib.html
+ 214. http://www.columbia.edu/kermit/newfaq.html
+ 215. http://www.columbia.edu/kermit/ckfaq.html
+ 216. http://www.columbia.edu/kermit/security.html
+ 217. http://www.columbia.edu/kermit/telnet.html
+ 218. http://www.columbia.edu/kermit/studies.html
+ 219. http://www.columbia.edu/kermit/ckcbwr.html
+ 220. http://www.columbia.edu/kermit/ckubwr.html
+ 221. http://www.columbia.edu/kermit/ckvbwr.html
+ 222. http://www.columbia.edu/kermit/ckuins.html
+ 223. http://www.columbia.edu/kermit/ckvins.html
+ 224. http://www.columbia.edu/kermit/support.html
+ 225. http://www.columbia.edu/kermit/k95tutorial.html
+ 226. news:comp.protocols.kermit.misc
+ 227. http://www.columbia.edu/kermit/
+ 228. http://www.columbia.edu/kermit/ckermit.html
+ 229. http://www.columbia.edu/kermit/ckfaq.html
+ 230. http://www.columbia.edu/kermit/ckututor.html#top
+ 231. http://www.columbia.edu/kermit/ckututor.html#contents
+ 232. http://www.columbia.edu/kermit/ckututor.html#authors
+ 233. http://www.columbia.edu/kermit/ckututor.html#documentation
+ 234. http://www.columbia.edu/kermit/cu-bsd-license.html
+ 235. ftp://kermit.columbia.edu/kermit/c-kermit/ckermit.ini
+ 236. ftp://kermit.columbia.edu/kermit/c-kermit/ckermod.ini
+ 237. http://www.columbia.edu/kermit/ckuins.html
+ 238. http://www.columbia.edu/kermit/ckcbwr.html
+ 239. http://www.columbia.edu/kermit/ckubwr.html
+ 240. http://www.columbia.edu/kermit/ckcplm.html
+ 241. http://www.columbia.edu/kermit/ckccfg.html
+ 242. http://www.columbia.edu/kermit/ckuins.html
+ 243. http://www.columbia.edu/kermit/
+ 244. http://www.columbia.edu/kermit/ckermit.html
+ 245. http://www.columbia.edu/kermit/ckfaq.html
+ 246. http://www.columbia.edu/kermit/ckututor.html#top
+ 247. http://www.columbia.edu/kermit/ckututor.html#contents
+ 248. http://www.columbia.edu/kermit/ckututor.html#files
+ 249. mailto:kermit@columbia.edu
index 176bc4e..ddd0cd4 100644 (file)
--- a/makefile
+++ b/makefile
@@ -1,8 +1,8 @@
 # makefile / Makefile / ckuker.mak / CKUKER.MAK
 #
-# Thu Jun 30 07:31:33 2011
-BUILDID=20110630
-CKVER= "9.0.300"
+# Mon Jul 11 09:24:25 2011
+BUILDID=20110711
+CKVER= "9.0.301"
 #
 # -- Makefile to build C-Kermit for UNIX and UNIX-like platforms --
 #