C-KERMIT CHANGE LOG (Changes since 8.0.200 of 12 Dec 2001)

Chronological order: Go to the bottom to find the newest edits.

---8.0.200---

Known bugs (+ = fixed after release):

 + 1. tilde_expand() can call getcwd() with NULL arg.
 + 2. getexedir() called too early (fatal in combination with (1)).
 + 3. Kermit "get blah" where blah is a symlink; server refuses to send it.
      Should not do this if GET not recursive.
 ? 4. Dave Sneddon's report about VMS fore/background confusion.
 + 5. FTP GET path/file doesn't work - path not stripped - but MGET works.
 + 6. IRIX 5.3 compilation problems (have patches from Marcus Herbert)
 X 7. Filename completion bug (see below) (deferred).
 + 8. QNX6 herald and other problems.

-------------

Merged Jeff's changes, 20 Dec 2001:

 . Changed all occurrences of "ttnproto == NP_TELNET" to "IS_TELNET()" to
   account for the difference between SSH and Telnet.  ckuscr.c,
   ckuus[3457].c, ckcnet.h, ckcfns.c, ckudia.c, ckutio.c, ckucon.c, ckucns.c.

 . Moved SSH pty failure warnings.  ckuusr.c.

 . Security adjustments to FTP module, plus fix an error message.  ckcftp.c.

 . Adjustment of some security-related #ifdefs. ckcdeb.h, ckuus2.c, ckctel.c.

 . Guard against calling getpwnam() with a NULL arg in tilde_expand() ckufio.c.
 
 . Moved getexedir() call to later, where it's safe.  ckcmai.c.

Added SSH ADD and many SSH SET commands from Jeff's spec.  Fixed SHOW SSH
to not dump core if variables weren't set.  ckcker.h, ckuus[r3].c, 20 Dec 2001.

C-Kermit in server mode, client says "get foo" where foo is a symlink.
Server says "no files meet selection criteria" instead of sending the file.
It should only refuse to follow symlinks if it's a recursive get.  Fixed
in sgetinit(): ckcpro.w, 21 Dec 2001.

More work on SSH and SET/SHOW SSH commands.  ckuus[r3].c, 21 Dec 2001.

Undid Jeff's replacement of the SSH pseudoterminal allocation failure
message, because now it comes out any time an SSH command has to be
reparsed (in the non-SSHBUILTIN case).  ckuusr.c, 21 Dec 2001.

More SSH and SET SSH command work back & forth with Jeff, plus Jeff added
SET HOST /NET:SSH.  ckcmai.c, ckuus[r37].c, ckcdeb.h, ckuusr.h, 22 Dec 2001.

Added SSH OPEN switches.  ckuusr.c, 22 Dec 2001.

Added SSH CLEAR, HELP SSH, and HELP SET SSH.  ckuus[r2].c, 23 Dec 2001.

From Jeff:
 . SET TCP commands now apply to SSH
 . SSH V2 REKEY and FORWRD-{LOCAL,REMOTE}-PORT  commands now implemented
 . Missing DLLs automatically disable appropriate authentication mechanisms.
ckuusr.c ckcnet.c ckuus3.c ckcmai.c ckcnet.h ckuus4.c, 26 Dec 2001.

From Jeff:
 . Remove SET SSH KEEPALIVES.
 . Add help text for SSH AGENT { ADD, DELETE, LIST }.
ckuus[23].c, 28 Dec 2001.

Added parsing for SSH AGENT { ADD, DELETE, LIST }.  ckuusr.c, 28 Dec 2001.

From Jeff:
 . Fixed a crash that can happen when making an SSH connection.
 . Filled in SSH AGENT actions.
 . Changed default for strict host key check (to ASK) and help text.
 . uploaded new binaries include ~kermit/os2test/beta/ssh-agent.exe
 . Read man ssh-agent on ftp.kermit.columbia.edu for details on what it does.
ckuus[r23].c, 28 Dec 2001.

"ftp get path/filename" didn't work; the FTP client did not strip the path
from the local copy of the filename when doing a GET, even though it did
for MGET.  Diagnosis: in doftpget(), the "if (!getone && !skipthis)" statement
lacked an "else" part for the getone case.  ckcftp.c, 28 Dec 2001.

A while back Jeff reported that in FTP MGET, if you cancel a file with 'x',
all the rest of the files arrive truncated to 0 bytes.  I tried this on both
Unix and Windows and couldn't reproduce it.

In the last-minute flurry to release C-Kermit 8.0, I thought I noticed the FTP
client failing to update the fullscreen file-transfer display.  But it seems
to work right, at least in Unix.  When downloading a big file with FTP, all
the display fields are updated as expected.  But smaller files might go by too
fast for the display to do anything.  HOWEVER, in K95 the file transfer
display does not update itself until the end of the file, even if the file
takes a long time to transfer.  This happens in both the Console and GUI
versions.  A thread thing?  (Jeff says no.)  Yet the same display works fine
on Telnet connections.

In IRIX 5.3, the select()-based CONNECT module had to include <sys/time.h>
or else it blew up with "struct timeval" unknown.  Since there already was
a SYSTIMEH CFLAG, I added the #include within #ifdef SYSTIMEH..#endif and
rebuilt with KFLAGS=-DSYSTIMEH, only to discover that the irix5* targets
didn't bother to propogate KFLAGS.  Fixed in ckucns.c, makefile, 30 Dec 2001.

Increased IRIX5x Olimit from 2400 to 3000 because of ckuus[34].c.  Added
-ansi, since (Marcus Herbert reported) we were not actually getting ANSI-C
compilation even though CK_ANSIC was defined.  But now that we are, we get
warnings in <netinet/tcp.h>, which is included by ckcnet.h:

  bit-field 'th_off' type required to be int, unsigned int, or signed int.
  (3.5.2.1(30))
	  u_char  th_off:4,
	  ------  ^
Tough.  makefile, 30 Dec 2001.

But adding -ansi to the IRIX 5x targets also make compilation bomb whenever we
referenced fdopen() or popen(), which evidently don't have prototypes in any
of the header files.  Luckily we already have CFLAGS for this occasion too:
DCLFDOPEN and DCLPOPEN.  Added these to the irix51 target.  Also had to copy
the fdopen()-popen() prototype section to ckuusx.c, which has a new reference
to fdopen() in a workaround for the curses console buffering bug.  makefile,
ckuusx.c, 30 Dec 2001.

The QNX6 version did not receive a proper herald (it announced itself as
"unknown version".  Reshuffled #ifdefs in ckuver.h, added display of QNX6
and NEUTRINO symbols to ckuus5.c, 30 Dec 2001.

Lucas Hart sent in a patch for the VMS problem.  Apparently it was even worse
than Dave Sneddon had reported: 8.0 couldn't run at all under Batch.  ckvtio.c,
31 Dec 2001.

A major obstacle to the usability of the FTP client is that certain commands
don't behave as FTP users expect: CD, DIR, DELETE, MKDIR, etc, which are local
rather remote, and there are no LCD (etc), USER, or ACCOUNT commands.  We
could fix this by adding an FTP command-language personality, but file
management commands can also be remote or local on connections to Kermit
servers too.  So:

SET LOCUS { LOCAL, REMOTE, AUTO }
  Sets the locus for unprefixed file management commands.
  When LOCAL, a REMOTE (or R) prefix is required for
  to send file management commands to a remote server (e.g. RCD, RDIR).
  When REMOTE, an L prefix is required to issue local file management
  commands (e.g. LCD, LDIR).  The word LOCAL can't be used as a prefix
  since it is used for declaring local variables.

This applies to all types of connections, and thus is orthogonal to SET
GET-PUT-REMOTE, which selects between Kermit and FTP for remote 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.

Implementation (31 Dec 2001):
 . None of this is compiled if LOCUS is not defined.
 . Added XYLOCUS (SET LOCUS) and LOCUS definitions: ckuusr.h.
 . Override by defining NOLOCUS (which inhibits definition of LOCUS).
 . Added LOCUS to SET keyword table: ckuusr.c.
 . Added locus & autolocus variables: ckuusr.c.
 . Added SET LOCUS parsing and variable setting: ckuus3.c.
 . Added display of LOCUS setting to SHOW COMMAND: ckuus5.c.
 . Added automatic locus setting to setlin(): ckuus7.c.
 . Added automatic locus setting to ftpopen() and ftpclose(): ckcftp.c.

How to catch all the places where a Kermit connection is closed?  Turns out
we've done this before, when we added the connection log.  So I made
dologend() take care of locus switching.  But dologend() was not compiled in
if certain symbols were defined, such as NOLOCAL, or not defined, such as
CKLOGDIAL.  So I (a) rearranged the #ifdefs so that even if these would
otherwise have obliviated dologend(), now they leave a piece of it for
locus-setting; (b) moved the prototype out of #ifdefs; and (c) took all calls
to it out of #ifdefs.  ckcker.h, ckcfn2.c, ckcmai.c, ckucns.c, ckucon.c,
ckuus[r347x].c, 31 Dec 2001.

Added locus checking to the following commands: DIRECTORY, CD/CWD, CDUP,
DELETE, PWD, MKDIR, RMDIR, RENAME.  ckuusr.c, 31 Dec 2001.

Added LDIRECTORY, LCD/LCWD, LCDUP, LDELETE, LPWD, LMKDIR, LRMDIR,
LRENAME.  ckuusr.[ch], 31 Dec 2001.

Added USER and ACCOUNT commands, which are the same as FTP USER and FTP
ACCOUNT.  ckuusr.[ch], ckcftp.c, 31 Dec 2001.

Since automatic locus switching could be a big surprise for most people, I
printed message any time it changed.  ckcftp.c, ckuus[37].c, 31 Dec 2001.

Added help text for the new L commands and filled in missing HELP text for
SET GET-PUT-REMOTE, CDUP, MKDIR, and RMDIR.  ckuus2.c, 31 Dec 2001.

Changed help text of CD, DIR, etc, for LOCUS.  Changed the help text for
RCD, RPWD, RDEL, RDIR, etc, to mention that they also work with FTP servers.
Updated HELP REMOTE for this too.  ckuus2.c, 31 Dec 2001.

Made sure code builds with NOLOCAL, NOLOGDIAL, and NOLOCUS (it does).

The IKSD command, when given with a /USER: switch, sends the user ID to the
IKSD.  But the SET HOST /USER: command does not, when making a connection to a
Kermit service.  This makes it impossible to script IKSD interactions using
only client commands.  Furthermore, even if you include a /PASSWORD switch
with the IKSD command, it does not send the password.  I added code near the
bottom of setlin() to do this.  If we have a connection to a Kermit service
and a /USER: switch was given, then we attempt a REMOTE LOGIN.  If a
/PASSWORD: switch was not given then if the username is "ftp" or "anonymous",
we automatically supply a password of user@host; otherwise we prompt for a
password.  If a /USER: switch was not given, it acts like before.  It all
works, but it might not be the best way (or place) to do it.  setlin():
ckuus7.c, 31 Dec 2001.

  NOTE: The above change doesn't help with IKSD /USER:anonymous,
  the server prompts for password anyway, not sure why.

  NOTE 2: What about secure authentication?  We have to test to see
  if user was already authenticated before sending the login packet.

Added /opt/kermit and /opt/kermit/doc to info_dir[] list (for Solaris).
ckuus5.c, 31 Dec 2001.

From Jeff: new Help text for SET TERM FONT (K95 GUI).  ckuus2.c, 1 Jan 2002.

More work on help text for file management commands -- e.g. we can't lump
the L-commands together with the unprefixed ones; they need separate entries.
Also: added missing HELP REMOTE PWD, improved the default case (in which
help text had been omitted for a valid command).  ckuus2.c, 1 Jan 2002.

It seems VMS C-Kermit was pretty much ignoring the -B (force background) and
-z (force foreground) command-line options.  Fixed in congm(): ckvtio.c,
1 Jan 2002.

Tested the SET LOCUS business with VMS C-Kermit, which does not have a
built-in FTP client.  Of course in this case there is no automatic locus
switching, but SET LOCUS REMOTE works nicely on IKSD connections.

From Jeff:
 . #ifdef adjustments for LOCUS changes.
 . SSH KEY CREATE /TYPE:SRP.
 . Fix \v(serial) to not be 8N2 by default if speed is 0.
 . Don't let doexit() run if sysinit() hasn't been called first.
ckuus[r247x].c, 2 Jan 2002.

Made SET BACKGROUND { ON, OFF } do exactly the same as -B and -z options.
ckuus3.c, 2 Jan 2002.

Updated user-visible copyright dates to 2002 (but still need to do all the
source-module comments).  ckcmai.c, ckuus[25].c, 2 Jan 2002.

Rearranged #include <sys/time.h> in ckucns.c that was done for IRIX 5.3,
to avoid conflicts in SV/68 R3v6.  3 Jan 2002.

From Dave Sneddon: Code changes in VMS sysinit() and congm() to work around
problems in batch, SPAWN'd, etc, and change CTTNAM from TT: to SYS$INPUT:.
ckcdeb.h, ckvtio.c, 3 Jan 2002.

From Jeff:
 . Fixed typo in definition of CTTNAM for VMS.  ckcdeb.h
 . Moved macro definitions for SSHBUILTIN from ckuus3.c to ckuusr.h
   so they can be referenced in ckuus7.c
 . Added SSH functionality to SET HOST:
     SET HOST /NET:SSH /CONNECT hostname [port] /switches
 . Fixed SET NET TYPE so it won't reject SSH if SSH is installed.
 . Changes to allow IKSD to continue functioning.  Somehow this minor change
   to ckcmai.c got lost in one of the back and forth exchanges.
 . HELP TEXT for UCS2 kverb
 . Fix a problem in K95 where multiple threads could be attempting to
   send a telnet negotiation simultaneously.
ckcmai.c ckcdeb.h ckuus2.c ckuus3.c ckuusr.c ckuusr.h ckuus7.c ckctel.c
ck_crp.c ckuat2.h ckuath.c, 4 Jan 2002.

From Jeff:

  Peter Runestig complaining that the Telnet Forward X code was corrupting
  data.  This resulted in a very thorough examination of the telnet module
  code and a discovery of some rather significant problems.  The root of the
  problems is the lack of thread safety.  To correct this problem the
  following was done.

  All code (regardless of module) which outputs telnet commands is placed
  into a mutex region to ensure that competing output threads do not result
  in interleaving their output.  This could happen for instance when the
  forward-x thread is forwarding data and the user changes the window size
  or sends an AYT or BREAK.  Next the buffer used for input and output
  processing were identical.  This means that output data could be treated
  as input or vice versa.  Ugh....

  I also spent some more time cleaning up setlin().  Mostly reorganizing the
  code into single if (...) blocks so that breaking it up will be easier.

ckctel.c ckuus7.c, 4 Jan 2002.

Updated internal copyright notices.  All modules, 5 Jan 2002.

From Jeff:
  More of same, plus new makefile target and changes from Spike Gronim
  for freebsd44+srp+openssl.
ckcdeb.h ckcnet.c ckctel.c ckuus7.c ck_ssl.c makefile, 5 Jan 2002.

Some minor updates and fixes to SSH and SET SSH help text.
ckuus2.c, 6 Jan 2002.

Added SET RGB-COLORS for GUI.  ckuusr.[ch], ckuus3.c, 6 Jan 2002.

From Jeff: More Telnet changes, Debug semaphores for K95, etc: ckcdeb.h,
ckuusr.h, ckuus[r35x].c, ckctel.[ch], ckuath.c, 7 Jan 2002.

Added --xpos:n --ypos:n, SET GUI WINDOW POSITION x y, and changed SET
RGB-COLORS to SET GUI RGBCOLOR.  Action needs to be filled in (in setguiwin()
in ckuus3.c), and gui_xpos and gui_ypos need to be defined in cko???.c.
ckuusr.h, ckuus[r3y].c, 7 Jan 2002.

Added --fontname:name --fontsize:name (and facename as synonym for fontname).
ckuusr.h, ckuus[7y].c, 7 Jan 2002.

Moved GUI (not OS/2) SET TERM FONT code in ckuus7.c to its own routine,
setguifont(), in ckuus3.c, and made GUI SET TERM FONT call this routine,
and also made SET GUI FONT call the same routine.  ckuus[37].c, 7 Jan 2002.

Added --termtype:, --height:, --width:, --user:.  Also added symbols for
--telnet:, --ssh:, --ftp:, --[remote-]charset, and --password:, but didn't
fill them in.  --password: is probably not a good idea (but we allow it for
FTP); the others involve a lot of code-shuffling and reconciliation, which
I'll try to do when I get a chance (especially the connection ones, which
can be done as part of the setlin() restructuring).  ckuusr.h, ckuusy.c,
8 Jan 2002.

Also I tried commenting out the #ifndef KUI..#endif's around SET TERMINAL
CHARACTER-SET (easier said than done because a crucial #endif was mislabeled).
Let's see if it compiles & works...  ckuus7.c, 8 Jan 2002

Added FTP [ OPEN ] /NOINIT, meaning don't send REST, STRU, and MODE commands
upon making an FTP connection.  This allows connection to servers that close
the connection (or worse) when given these commands (e.g. Linux 2.4 TUX 2.0
FTP server).  ckcftp.c, 8 Jan 2002.

Looked at adding caller ID support for the ANSWER command:

 . SET ANSWER CALLER-ID { ON, OFF }
 . SET ANSWER RINGS <number>
 . \v(callid_xxx) xxx = { date, time, name, nmbr, mesg }
 . CKD_CID modem capability
 . Set CKD_CID for modems that have it.
 . A quick survey shows:
   - USR V.90:      No (but Jeff says some USRs have it).
   - V.250:         No
   - Lucent Venus:  No
   - USR:           #CID=1 (the ones that have it -- X2?)
   - Diamond Supra: #CID=1
   - Rockwell 56K:  #CID=1
   - PCTEL:         #CID=1
   - Zoltrix:       +VCID=1
   - Conexant:      +VCID=1
 . Since there are different commands to enable caller ID reporting,
   we need a new field in struct MDMINF.
 . SHOW MODEM and SHOW DIAL would need updating.
 . etc etc...

This is all way too much for now so I just did the setting of the \v(callid_*)
variables.  These are reset at the beginning of an ANSWER command, and then
set by the ANSWER command if they come in; thus they persist from the time
they are collected until another ANSWER command is given.  To take advantage
of autoanswer, the user has to enable it in the modem (all the modems I found
that support it have it disabled by default), and also has to set the number
of rings to at least 2.  This can be done with (depending on the modem):

  set modem command autoanswer on ATS0=2#CID=1\{13}
  set modem command autoanswer on ATS0=2+VCID=1\{13}

and undone with:

  set modem command autoanswer on ATS0=1#CID=0\{13}
  set modem command autoanswer on ATS0=1+VCID=0\{13}

The variables can be accessed only after the call is answered.  Therefore the
only way to refuse a call is to answer it, inspect the variables, and then
hang it up if desired.  Future Kermit releases can do this more nicely (as
sketched out above.)  Also while I was in the dialing code, I added result
code VCON (= VOICE), used by several of the newer modems.  These changes are
untested.  The SET ANSWER command is written but commented out.  ckuusr.h,
ckcker.h, ckuus[r3].c, ckudia.c, 8 Jan 2002.

From Jeff: fixes to --termtype:, --height:, --width:, --user:, and filling in
of --rcharset:, which required extracting code from settrm() into a separate
parse-method-independent remote character-set setting routine.  ckuus[7y].c,
8 Jan 2002.

From Jeff: More work on TERMINAL CHARACTER-SET code reorganization, and
reinstatement of SET TERMINAL CHARACTER-SET in K95G.  Also, fix char/CHAR
warnings in Telnet module.  ckuus7.c, ckctel.c, 9 Jan 2002.

Made SET TERM CHARACTER-SET visible for all builds, including K95G, and filled
in HELP text for it.  ckuus[27].c, 9 Jan 2002.

Added help text for new extended options.  ckuusy.c, 9 Jan 2002.

Commented out the return(-2) statement at the end of xgnbyte() to make the
"Statement not reached" errors go away, after checking to make sure that there
was no path that could fall through to the end.  I'm 99.99% sure there isn't,
but that doesn't mean that some compilers might not still complain.  ckcfns.c,
9 Jan 2002.

From Jeff: fix typo in the K95 extended-option help text; add more
semaphores to network i/o.  ckuusy.c, ckcnet.c, 10 Jan 2002.

Undid ansiisms in set{lcl,rem}charset() declarations.  ckuus7.c, 10 Jan 2002.

Removed a duplicated clause from the install target.  makefile, 10 Jan 2002.

From Jeff: more semaphores.  ckcnet.c, 11 Jan 2002.

Moved references to tmpusrid and tmpstring out of NOSPL #ifdefs -- they can
be used with NOSPL.  setlin(): ckuus7.c, 13 Jan 2002.

Made a dummy dologend() routine outside of #ifndef NOICP, so we don't have
to enclose every reference to dologend in #ifdefs.  (I had added a bunch of
calls to dologend() throughout the code to handle automatic LOCUS switching.)
ckuus3.c, 13 Jan 2002.

Moved "extern int nettype" outside of NOICP #ifdefs in ckuus4.c for NOICP
builds.  13 Jan 2002.

Moved a misplaced #ifdef in the VERSION command.  ckuusr.c, 13 Jan 2002.

Did 81 different feature-selection builds on Linux (RH 7.0), all OK after the
changes listed above for today.  13 Jan 2002.

Added prototypes for set{rem,lcl}charset().  ckcxla.h, 13 Jan 2002.

Added ckcxla.h to dependencies for ckuusy.c.  ckvker.com, 13 Jan 2002.

Made a correction to the HELP SET LOCUS text and supplied a missing comma
for HELP REMOTE.  ckuus2.c, 13 Jan 2002.

Built OK on HP-UX 11.11 (K&R and ANSI), Solaris 8 (cc), Solaris 2.5.1 (gcc),
SunOS 4.1.3 (cc and gcc), VMS 7.1 (DEC C, net and nonet), Unixware 7.1.1,
Tru64 4.0G, HP-UX 10.20 (K&R), AIX 4.3.3, FreeBSD 2.2.8, Slackware 8.0, IRIX
6.5.13f, IRIX 5.3 (??? Can't tell -- the computer ran out of swap space -- but
it was OK a few days ago), VMS 5.5-2 (VAX C, UCX + nonet)...  HP-UX 9.05, ...

Some corrections to comments in HP targets from PeterE.  makefile, 14 Jan 2002.

Corrections to prototypes for set{rem,lcl}charset() (VOID, not void) from Jeff.
ckcxla.h, 14 Jan 2002.

Builds, cont'd...  SINIX 5.42, Red Hat Linux 5.2 on i386, SuSE 7.0 on S/390, 
Red Hat 7.1 on IA64, QNX 4.25, HP-UX 5.21/WinTCP, ..., 

Dell Coleman <dell@aleph.tum.com> noticed that in AIX, the COPY command always
says "Source and destination are the same file" when the destination file
doesn't exist.  This is because in AIX, realpath() fails with ENOENT (errno
2).  The zfnqfp() code already accounts for this, but evidently not well
enough.  So I did what I should have done long ago.  zfnqfp() was originally
accomplished with do-it-yourself code.  Later I added support for realpath(),
and partitioned the routine into mutually exclusive compile-time sections:
#ifdef CKREALPATH realpath()... #else do-it-yourself... #endif.  But if
realpath() failed, there was no recourse to the do-it-yourself code.  Today I
replaced the #else with the #endif, so the do-it-yourself part is always
included and is executed if the realpath() call fails.  Built and tested on
AIX 4.3.3 and Solaris 2.5.1, as well as on Linux with and without the
realpath() code included.  zfnqfp(): ckufio.c, 16 Jan 2002.

Separated K95 and C-Kermit test version numbers, so C-Kermit can be RC.02
while K95 is Beta.01.  ckcmai.c, 16 Jan 2002.

Inhibited 0-length writes by conol() and conoll(), since they cause big
trouble with the AIX 4.3.3 pty driver, e.g. when you have an SSH connection
into AIX and run C-Kermit there.  ckutio.c, 16 Jan 2002.

Suppressed "Switching LOCUS..." messages from FTP client when it was invoked
from the command line.  ckcfns.c, 17 Jan 2002.

Dave Sneddon noticed that FOPEN /APPEND gets "?Write access denied" in VMS
if the file exists.  This is apparently because VMS zchko() does the wrong
thing.  Commenting out the call zchko() in the VMS case gets past this but
then the appended part of the file has different attributes than the orignal
part, e.g.:

  abc  <- original line (horizontal, normal)
  d    <- appended line (vertical)
  e
  f

VMS fopen() takes an optional 4th argument: a series of RMS keyword=value
pairs.  Kermit doesn't give any.  Experimentation shows that appending to
a Stream_LF works fine.  That'll be a restriction for now, until somebody
sends in code to get the RMS attributes of the original file and feed them
to fopen().  Also need code to fix VMS zhcko() to say whether it's OK to
append to a file.  ckuus7.c, 17 Jan 2002.

Somebody suggested I could get a working Kermit for Neutrino 2+ by doing the
QNX6 build on Neutrino itself.  I verified that this can't be done -- at least
not by me -- since Netutrino 2+ doesn't have a compiler, and we already know
the version cross-built for it on QNX4 doesn't work.  17 Jan 2002.

From Jeff: SET SSH GSSAPI KEY-EXCHANGE { ON, OFF } parsing, SHOW SSH.
ckuus3.c, 18 Jan 2002.

PeterE suggested that SET ESCAPE allow 8-bit escape characters because of the
difficulty in entering Ctrl-\ on European keyboards and the hardship (e.g. to
EMACS and VI users) of sacrificing another C0 control character.  Like
everything these days, this turns out to be rather a bigger deal than it would
seem.  The SET ESCAPE parser calls setcc(), which accepts control characters
in various formats (literal, ^X notation, or numbers), and gives an error
return if the value is not 0-31 or 127.  This is changed easily enough to also
allow numbers between 128 and 255.  But who else calls setcc()?  The commands
for setting Kermit packet start and end characters.  No big deal, this gives
people a bit more flexibility in case they need it, but it won't be
documented.  setcc(): ckuus7.c, 18 Jan 2002.

Since code to display the escape character is scattered all over the place,
and some of it indexes into an array based on the character value (which would
now dump core if the escape character was > 128), I put the code in one place,
a new shoesc() routine in ckuusx.c (which needs to be outside #ifndef NOICP,
since the CONNECT modules use it even in command-line only builds).  Also
discovered that this code was indexing into the nm[] array with tt_escape to
get "enabled" or "disabled", which is no longer appropriate, so fixed this
too.  ckuusr.h, ckuus[5x].c, 18 Jan 2002.

Made SHOW ESCAPE, SHOW TERM, and the various CONNECT modules call shoesc(),
and updated HELP SET ESC.  ckuus[25].c, ckucns.c, ck[cuvd9]con.c, 18 Jan 2002.

After all that, it occurred to me that this is a really bad idea for K95,
with all the confusion about Console code pages, OEM code pages, Windows
code pages, and Unicode.  But I tried "echo \161" at the K95 prompt and got
the expected 8-bit character in both the Console version and the GUI, so
maybe it's OK after all.

Removed the automatic IKSD login code from setlin() since it complicates
interactive anonymous login.  ckuus7.c, 20 Jan 2002.

An #ifdef clause from Matthew Clarke to avoid "redeclaration of free" error
when building a curses version of C-Kermit for AIX 2.2.1 on RT PC.  ckuusx.c,
22 Jan 2002.

Took care of one detail I omitted when adding the 8-bit escape character:
not stripping the 8th bit before comparing the keyboard char with the escape
char.  ck[uv]con.c, ckucns.c, 24 Jan 2002.

Started to go through Jeff's changes of the last week but he had run trim -t
on them, which untabifies, so the diffs were huge.  Retabifying Jeff's files
only makes matters worse.  So instead of comparing each old and new source
file in EMACS windows with M-X Compare-Windows like I usually do (which can't
be told to ignore whitespace), I had to work from the diff -c -b listings.
In ascending order of size of diffs:

ckcker.h: Add I_AM_SSHSUB definition.
ckuusr.h: XXLINK and VN_PERSONAL, etc, definitions.
ckuusy.c: Support for "I Am SSHSUB" invocation.
ckuus5.c: Support for new K95 directory structure.
ckcmai.c: Init endianness earlier (K95 TYPE was broken), "I Am SSHSUB" support.
ckuus7.c: Security #ifdefs, SSH OPEN /PASSWORD, SSHSUB support
ckcftp.c: <-- SAVE TIL LAST
ckuus6.c: Add LINK command for K95 on NT.
ckuus4.c: Support for new K95 directory structure; SSHSUB support
ckuus3.c: Support for new K95 directory structure; some SSH changes
ckuus2.c: Changes to SSH related help text, add HELP LINK text
ckuusr.c: LINK command, SSH OPEN /PASSWORD: /SUBSYSTEM: switches,
  Pattern-management fixes.
ckctel.c, ck_ssl.c, ckuath.c, ckcnet.c:
 Took Jeff's without looking.
ckuusx.c, ckucns.c, ckucon.c, ckwart.c:
  My changes from weeks ago that were never picked up.

Built OK on Solaris with gcc and on SunOS with (K&R non-ANSI) cc.
31 Jan 2002.

Meanwhile, Jeff had made various changes in response to Jaya Natarajan at IBM,
whose basic complaint was that numerous failure conditions were not being
detected if the fullscreen file-transfer display was active.  Jeff found that
this was because big blocks of code were skipped in that case and changed the
code not to do that, which fixed the reported problems.  But later Jaya said
that "ftp mget file1 file2" acted like "ftp mget *", so it seemed that Jeff's
fixes broke file selection.  After taking Jeff's fixes for ckcftp.c, however,
I still could not reproduce the problem.  ckcftp.c, 31 Jan 2002.  <-- Later,
it turned out the problem was with IBM's custom FTP server.

Fixed updates that I missed yesterday in ckcftp.c, ckuusr.c.  Moved misplaced
#ifdef in ckuusy.c breaking nonet builds.  Added #ifdefs to sysinit() for
nonet builds in ckutio.c.  Ran through build-in-many-configurations script
in Linux, all builds OK.  1 Feb 2002.

Moved shoesc() definition outside of NOXFER to fix NOXFER builds.
ckuusx.c, 1 Feb 2002.

Added MYCUSTOM definition alongside KERMRC and changed KERMCL to be the
same as CKMAXPATH, instead of some random hardwired number.  ckuusr.h,
1 Feb 2002.

Changed ckcdeb.h to define DIRSEP and ISDIRSEP(), and put #ifndef
[IS]DIRSEP..#endif around all [IS]DIRSEP definitions in ck[udso]fio.c, so we
can finally put away the many repeated #ifdef chains when we get around to it.
1 Feb 2002.

Make VMS zkermini() return 1 on success, 0 on failure, rather than 0 always.
ckvfio.c, 1 Feb 2002.

Added code to doinit(), just before it goes to execute the init file.  If the
init file name we are about to open is empty or fails zchki(), substitute the
customization filename.  For now this code is in #ifdef USE_CUSTOM..#endif,
which is not defined by default.  It does the trick in Unix and VMS.  Also
included code from Jeff for K95, but this needs verification and testing.
Also used DIRSEP and ISDIRSEP() throughout doinit() instead of the long #ifdef
chains.  ckuus5.c, 1 Feb 2002.

Moved shoesc() prototype from ckuusr.h to ckcker.h so modules that need it
don't have to include ckuusr.h just for this one thing (example: ckvcon.c).
1 Feb 2002.

Defined USE_CUSTOM by default, except if NOCUSTOM is defined.  ckuusr.h,
1 Feb 2002.

Fixed kermit-sshsub code to really enter server mode, and to print
"KERMIT READY TO SERVE..." so scripts can wait for it.  Also bumped the
C-Kermit test ID to RC.03 and the K95 one to Beta.02.  ckcpro.w, ckcmai.c,
2 Feb 2002.

I was thinking about adding SET COMMAND BUFFER-SIZE to let people allocate
as big a buffer as they wanted at runtime, mainly for defining huge macros.
Moved the SCMD_blah definitions from ckuusr.h to ckuus3.c, since they aren't
used anywhere else.  But stopped there since the rest turns out to be a rather
big deal.  ckuusr.h, ckuus3.c, 2 Feb 2002.

From Jeff, 3 Feb 2002:
 . Fix an out-of-order modem name in the SET MODEM TYPE table: ckudia.c.
 . Use SET LOGIN USER and PASSWORD if present. ckcftp.c.

Cody Gould noticed that array declarations had become case sensitive, and
upper case didn't work.  Diagnosis: misplaced case conversion in xarray().
Fixed in ckuus5.c, 4 Feb 2002.

SHOW VAR dumps core on \v(sexpression) or \v(svalue) -- failure to check for
NULL pointer.  I wonder why this didn't happen before (answer: because I was
doing it on SunOS; now I'm doing it on Solaris).  ckuus4.c, 6 Feb 2002.

I've had several requests for "show var name name name...".  I added this to
doshow(), such that SHOW VAR works exactly as it did before (if you don't give
it an arg, it lists all variables; if you give it an arg, it appends "*" to it
and lists all matching variables) but now you can also give more than one arg
and it works the same way with each one as it did before if you gave it a
single item (i.e., "*" is appended, so "show var os cmd" shows all variables
whose names begin with "os" or "cmd".  You can also freely use pattern
notation, including anchors.  Hmmm, no, actually it's different in that now
each includes an implied * before AND after, so "show var version" shows all
variables whose name contain "version" rather than all variables whose names
start with it.  ckuus5.c, 6 Feb 2002.

Cody Gould reported that WRITE FILE blah blah \fexec(anything) ... got a
spurious "File or Log not open" error.  This turns out to be a rather
pervasive problem -- whenever you use \fexec() it calls the parser recursively
and this can run roughshod over global variables, such as our innocent little
x, y, and s.  The fix in this case was to put x and y on the stack.  The same
thing probably needs doing in about 10,000 other places.  Too bad C isn't
Algol.  ckuusr.c, 6 Feb 2002.

Minor fix to SHO VAR -- the "^" anchor wasn't working (e.g. "show var ^os").
ckuus5.c, 6 Feb 2002.

Fixes from Jeff for FTP file-transfer character-set translation in K95 and
in WIKSD, plus updated K95 SSH help text.  ckcftp.c, ckcfns.c, ckuus2.c,
7 Feb 2002.

Server has its date set in the past.  Client says "remote dir".  Server sends
A packet containing old date.  If client has FILE COLLISION UPDATE, it
rejects the directory listing.  Changed gattr() to only reject real files
(introduced by F packet), not X-packet material like directory listings.
ckcfn3.c, 7 Feb 2002.

Up-down arrow keys for command recall.  People have been asking for it for
years but now it's actually important because of PDAs that don't have Ctrl
keys.  Would have been trivial except that we use getchar() rather than
coninc() for reading from the keyboard in Unix so conchk() doesn't help.  In
fact there are lots of other places where conchk() is used this way and works
only by accident.  The only reason we never noticed a problem before is that
characters don't usually arrive from the keyboard that fast.  But when an
arrow key sends "ESC [ A" all once, the stdin buffer gets some extra stuff in
it, which getchar() will return next time, but which coninc()/conchk() will
never see.  So I added a new cmdconchk() routine which, if the keyboard is
being read with getchar() rather than coninc(), looks at the stdin buffer.
Unfortunately, however, there is no API for this, nor is there any standard
way to access the stdin buffer directly.  So first I did it for Solaris.  Then
to make it portable requires a survey of the headers for every platform.  I
found four major variations:

  stdin->_r:
    {Free,Open,Net}BSD, BSDI
  stdin->_cnt:
    SunOS, Solaris, HP-UX 5-6, AIX, VMS, SINIX, IRIX 5.3-6.5, DGUX
    4.2BSD, 4.3BSD, OSF/1..Tru64, QNX4, Unixware 1.0-2.1.0
  stdin->__cnt:
    HP-UX 7-11, SCO: OSR5.0.6a, Unixware 2.1.3-7.x, OU8, UNIX 3.2v4.x
  Subtract read from end pointer (_IO_file_flags defined):
    Linux (tested on RH 5.2 thru 7.1)

The Linux method is new and different to account for multibyte characters.
All the others assume character == byte.

For docs: ANSI only, 7-bit only; both application and cursor modes are
accepted.  Only up and down arrow are handled; left and right arrows cause
a beep.  ckucmd.c, 8 Feb 2002.

Build-all: Discovered that changing CTTNAM from TT: to SYS$INPUT: in VMS
(which was done on 3 Jan 2002 to work around problems starting Kermit in
batch, spawn'd, etc) breaks Kermit on VMS 5.5/VAX (concb() fails with "lacks
sufficient privilege"; if you enable all privs Kermit starts but then spews
out a constant stream of BEL characters).  If you put dftty back to "TT:",
everything is fine -- I have no idea why, so I used #ifdef VMSV70 to decide,
which is totally crude.  Next I had to find where the boundary really is: VAX
vs Alpha?  VAX C vs DEC C?  Or between VMS releases?  Built on:
 . VMS 6.2 Alpha (DEC C) - OK with TT:
 . VMS 6.2 Alpha (DEC C) - OK with SYS$INPUT: <-- keep this one
 . VMS 7.1 VAX   (DEC C)
So the final condition is #ifdef VMSV60.  ckvker.com, ckvtio.c, ckuus5.c.

QNX 6 needed some attention too:
 . Whoever did the makefile target made the default port "/dev/ser1".
 . Arrow keys...
But I gave up on getting arrow keys to work -- it should be just like *BSD,
but for some reason gcc complains that struct FILE has no _r member, even
though it does (getchar uses it).

Checked stdio.h on Mac OS X and it looks like the *BSDs.

--- C-Kermit 8.0.201 ---

Removed -g from solaris2xg+krb5+krb4+openssl+shadow makefile target -- it
was producing a 15MB binary!  makefile, 14 Feb 2002.

Fixed a couple thinkos in "make install": $(DESTDIR) should not have been
included in the tests for whether INFODIR or SRCDIR were desired.  makefile,
14 Feb 2002.

(tarball refreshed 16 Feb 2002)

--- C-Kermit 8.0.201 ---

From Jeff: Better seeding of \frandom(): ckcmai.c, ckuus4.c, 18 Feb 2002.

From Jeff: Make arrow keys work in WIKSD, but now also unconditionally
compile arrow-key code in all versions.  ckucmd.c, 18 Feb 2002.

From Jeff: ckuath.c, ck_ssl.c, ckcnet.c (didn't look).  18 Feb 2002.

Added ORIENTATION command, that lists the various important directories, and
\flongpathname() and \fshortpathname(), which do path format conversions in
Windows, and are just synonynyms for \fpathname() elsewhere.  The new functions
need building and testing in Windows.  ckuusr.h, ckuus[r24].c, 18 Feb 2002.

Changed PWD for Windows only to show both short and long paths (but only if
they are different; otherwise it behaves as before).  ckuusr.c, 18 Feb 2002.

Changed default Windows prompt to show long pathname. ckuus5.c, 18 Feb 2002.

Updated INTRO command to mention FTP, HTTP, and SSH.  ckuus2.c, 18 Feb 2002.

From Jeff: fixes for typos in GetLongPathName() code: ckuus[r4].c, 22 Feb 2002.

From Jeff: net/auth updates: ckcnet.c, ckuath.c, 22 Feb 2002.

Added -DUSE_FILE__CNT to NCR MPRAS targets, George Gilmer: makefile,
24 Feb 2002.

From Jeff: Add support for GetLongPathName() in Win95 and NT: ckcdeb.h,
ckuus[r4].c, 24 Feb 2002.

From Jeff: More fixes for FTP SIGINT, plus fix [M]PUT /MOVE.  ckcftp.c,
24 Feb 2002.

Fixed an unguarded reference to inserver, gtword(): ckucmd.c, 24 Feb 2002.

Adapted RETRIEVE for use with FTP connections; this one was missed when
adapting GET, REGET, MOVE, etc.  ckuus6.c, ckcftp.c, 24 Feb 2002.

Added special COPYRIGHT command text for the free version of WIKSD.
ckcmai.c, ckuusr.c, 24 Feb 2002.

C-Kermit, when in CONNECT mode and given the <Esc-Char>U sequence, would
unconditionally close the connection if it was a network connection.  This
is bad when Telnetting to a modem server.  I added to code to prevent this
in the RFC2117 TELNET COMPORT case but I'm not sure how to exend this to the
general case (or whether it would be a good idea).  ckucns.c, 24 Feb 2002.

During file transfer, chktimo() calls ttgspd() for every packet, which clearly
doesn't make sense on network connections, especially since on Telnet COMPORT
connections it results in a network speed query for every packet.  Rearranged
the code so this happens only on true serial-port connections.  ckcfn2.c,
24 Feb 2002.

From Jeff: Fix reversed ANSI/non-ANSI function declarations clauses in
ckcftp.c, 26 Feb 2002.

Changed Unix CONNECT module to call kstart() only when it has a chance of
doing anything (i.e. a Kermit packet has been partially detected, or the
packet start character just came in), rather than unconditionally on every
incoming character.  ckucns.c, 8 Mar 2002.

FTP PUT /SERVER-RENAME:, /RENAME-TO:, /MOVE-TO: were sticky.  Patch: In
ckcftp.c, near the top of doftpput(), add the lines marked with "+":

    makestr(&filefile,NULL);            /* No filename list file yet. */
+   makestr(&srv_renam,NULL);		/* Clear /SERVER-RENAME: */
+   makestr(&snd_rename,NULL);		/*  PUT /RENAME */
+   makestr(&snd_move,NULL);		/*  PUT /MOVE */
    putpath[0] = NUL;                   /* Initialize for syncdir(). */

ckcftp.c, 26 Mar 2002.

\fday() and \fnday() were broken for dates prior to 17 Nov 1858.  Fixed in
fneval(): ckuus4.c, 28 Mar 2002.

From Jeff:
 . New calling convenion for demoscrn(): ckucmd.c, ckuusx.c
 . Fix for host-initiated 80/132 col screen mode change.  ckuus7.c.
 . New \v(desktop) variable: K95 user desktop directory, ckuusr.h, ckuus4.c
 . New \v(rfc2717_signature) var: Telnet Com Port, ckuusr.h, ckuus4.c
 . Uncomment "not-reached" return(-2) in xgnbyte(): ckcfns.c
 . New dates: ckcmai.c.
 . Telnet Com Port fixes: ckutio.c
 . SET PRINTER fixes for K95: ckuus3.c
 . Session limit adjustments: ckuus3.c
 . New directory layout for K95 (TAKE, ORIENT): ckuusr.c
 . Fixes for Telnet Com Port, recycling SSH connections: ckuusr.c

From me, not picked up by Jeff previously:
 . kstart() speedup: ckucns.c.

1 Apr 2002.

---K95 1.1.21---

From Jeff, 4 Apr 2002:
 . More fixes for Telnet Com Port: ckuus4.c, ckudia.c, ckutio.c, ckcnet.c:
   . network connections will check for carrier detect if SET
     CARRIER-WATCH is ON.   This could have a potential conflict if
     the option is negotiated and the carrier is off, but the site
     requires login.
   . modem hangup message generated since the dial module did not
     believe that network modems could be reset with a DTR drop.
 . Version number adjustments: 8.0.203, 1.1.99: ckcmai.c.
 . Security: ck_ssl.[ch], ckuath.c.

---C-Kermit 8.0.203---

From Jeff, 6 Apr 2002:
 . Fix typo in HELP REMOTE HOST: ckuus2.c.
 . More Telnet Com Port fixes: ckctel.c, ckcnet.c, ckudia.c, ckutio.c

From Jeff, 9 Apr 2002:
 . Fix autodownload problem: ckcfn[2s].c.

Chiaki Ishikawa reported that in Linux (two different kinds), if you choose
hardware parity, CONNECT, then escape back, the speed can change.  I tracked
this down to the following statement in ttvt():

	tttvt.c_cflag &= ~(IGNPAR);	/* Don't discard incoming bytes */

Somehow execution of this statement corrupted the speed words of the termios
struct, which are entirely separate words that are nowhere near the c_cflag
member.  Anyway, the statement is wrong; it should be:

	tttvt.c_cflag |= IGNPAR;	/* Don't discard incoming bytes */

Fixing it cured the problem; don't ask me why.  ckutio.c, 9 Apr 2002.

From Jeff:
  fixes the problem reported by robi@hastdeer.com.au.  The request to
  enter server mode was received while we were entering server mode.
  But the server was waiting for the response to REQ_STOP sent to the
  client.  Therefore, we weren't quite in server mode yet and the
  request to enter server mode was rejected.  A check for the sstate
  value solves the problem.  ckctel.c, 10 Apr 2002.

Chiaki Ishikawa (CI) discovered the real cause for the speed changing problem.
I was setting the IGNPAR bit in the wrong flag word: it should have been
c_iflag instead of c_oflag, silly me.  Fixed in ttvt() and ttpkt(): ckutio.c.
I also did a thorough census of all the termio[s] flags to ensure each was
applied to the right flag word -- they were, IGNPAR in the HWPARITY case was
the only mistake.  CI also discovered that the speed words in the Linux
termios struct are not used at all -- the speeds are encoded in an
undocumented field of c_cflag, which explains the problem.  10 Apr 2002.

Any use of \{nnn} character notation in a macro definition, loop, or other
braced block caused an "unbalanced braces" parse error.  The backslash in this
case is not quoting the open brace; it's introducing a balanced braced
quantity.  Special-cased in getncm(): ckuus5.c, 12 Apr 2002.

The semantics of "if defined \v(xxx)" were changed in 8.0 to avoid obnoxious
error messages when xxx was not a built-in variable (see notes of 19 Nov
2000), such that "if defined \v(xxx)" would always succeed if there were such
a variable, even if it had no value.  The behavior that is documented in the
book (and also in ckermit70.html) and that we had in versions 6 and 7, was
that IF DEFINED \v(xxx) would fail if \v(xxx) was defined but had an empty
value OR if it was not defined, and would succeed only if it was defined and
had a value.  Fixed in boolexp(): ckuus6.c, 12 Apr 2002.

What about \function()s?  IF DEF \fblah() presently succeeds if the function
exists; you don't even have to give arguments.  I think this behavior is more
useful than if I required valid arguments and then evaluated the function --
you can do that anyway with 'if not eq "\fxxx(a,b)" "" ...'  Of course this
argument applies to "if def \v(xxx)" too, except that the current behavior is
consistent with the 7.0 behavior, so there is no need for a change.

Kent Martin discovered that if a macro contains a LOCAL statement for a
variable whose name is the same as, or a unique left substring of, the macro's
name, then undefining the local variable makes the macro disappear:

  define DateDiff {
    echo {DateDiff(\%1) executing...}
  }
  define Kent {
    do DateDiff {2}
    local date
    assign date {}
    do DateDiff {3}  <-- This fails (A)
  }
  do DateDiff {1}
  do Kent
  do DateDiff {4}    <-- So does this (B)

The first part of the problem is that "assign date {}" called delmac with
exact=0, so delmac evidently deleted first macro whose name started with
"date" -- and since the only one was DateDiff, that's the one that was
deleted.  Fixing this (change "delmac(vnp,0)" to "delmac(vnp,1)" in dodef())
got us past A.  The second part was making the same fix to the delmac()
call in popclvl().  ckuus[56].c, 13 Apr 2002.

The INPUT command ignored the parity setting, thus SET PARITY EVEN,
INPUT 10 "login:" didn't work.  Fixed in doinput(): ckuus4.c.  Also fixed a
bogus #ifdef COMMENT section that messed up the block structure of the module
and therefore EMACS's indenting.  18 Apr 2002.

Added sco32v500net+ssl and Added sco32v505net+ssl targets, from Scott Rochford
at Dell (not sure yet if they work).  Makefile, 19 Apr 2002.

From Jeff, 22 Apr 2002:
 . Added "darkgray" color and made "dgray" an invisible synonym: ckuus3.c.
 . Fix carrier sense on Telnet Com Port immediately after dial: ckudia.c.
 . Change krb5_des_blah() arg list: ckutio.c.
 . Fix ttgmdm() for Telnet Com Port: ckutio.c.
 . Fix tthang() return code: ckutio.c.
 . Add aix43gcc+openssl target: makefile.

From Jeff, 25 Apr 2002:
 . Fix SET GUI keyword table: ckuus[37].c.
 . A final fix to Telnet Com Port: ckctel.c, ckcnet.c.

From Jeff, 26 Apr 2002:
 . Another final fix to Telnet Com Port: ckctel.c, ckudia.c.

From Jeff, 27 Apr 2002:
 . separate the wait mechanism for TELNET SB COMPORT synchronous messages
   from the asynchronous TELNET SB COMPORT MODEMSTATUS messages: ckctel.[ch]
 . fix debug messages in Certificate verify functions: ck_ssl.c, ckcftp.c.a

Frank, 27 Apr 2002:
 . Fixed VMS zgetfs() to fail when file doesn't exist: ckvfio.c.
 . Fixed UNIX zgetfs() to check for null or empty arg: ckufio.c.
 . Added #include <time.h> for time() call: ckcmai.c.
 . Add casts to args in tn_wait() calls: ckctel.c.

SINIX-P 5.42 (Pyramid architecture) makefile target from Igor Sobrado.
makefile (no source-code changes), 1 May 2002.

From Jeff, 5 May 2002,
 . Fix some "unknown host" messages: ckcftp.c.
 . Add more casts to tnc_wait() calls: ckudia.c.
 . Improvements to SHOW SSH, SHOW GUI: ckuus3.c.
 . Fixes to SET COMMAND { WIDTH, HEIGHT }: ckuus3.c.
 . Updates to ck_ssl.[ch], ckctel.c, ckcnet.c.

Fixed the erroneous setting of ssh_cas during switch parsing rather than
after cmcfm() in setlin(): ckuus7.c, 5 May 2002.

setlin() decomposition (2300 lines), Part One: 

 . Copied a big chunk from the end of setlin(), beginning with net directory
   lookup, but only the network-specific and common parts, to a new routine,
   cx_net(), 900 lines.

 . Extracted many repetitious lines of error-message code from cx_net()
   to a new routine, cx_fail().  Error messages are stored in slmsg, and
   also printed but only if we were not called from a GUI dialog (and
   QUIET wasn't set, etc etc).  Any adjutments in this policy can now be
   made in one place.

 . I put a call to cx_net() in setlin() just before all the code it replaced.
   It works for TELNET and SET HOST /TELNET.

 . Built with mkwatsol-k5k4ssl; after a couple fixes it builds OK and makes
   Kerberized connections OK.

 . Copied the serial-port and common parts of the setlin() post-cmcfm()
   code to another new routine, cx_serial(), about 275 lines.  Fixed
   messages not to come out when called from GUI dialog, etc.  Inserted
   a call to cx_serial() at the appropriate spot in setlin().  Tested
   serial connections on watsun with "set line /dev/ttyh6", works OK.

 . Removed all the code from setlin() that was copied to cx_*().  This slims
   setlin() down to 1120 lines.  Tested regular Telnet, Kerberized Telnet, and
   serial connections again, all OK.  The Unix version of the SSH command is
   OK too.

setlin() deconstruction, Part Two:

Now that we have the common network and serial connection pieces moved out of
setlin(), we still need to move out the little code snippets for each network
type that take place between command confirmation and the common code we just
replaced.   As far as I can tell, this needs doing only for SSH.  The code
labeled "Stash everything" copied to cx_ssh() but I didn't remove the original
code since I can't test this.  I think I'm done -- maybe I'm overlooking
something but I don't know what...  First we need to test the heck out of it
in all command-line versions (K95 and C-Kermit).  Then to use this from
the GUI, see the calling sequences for cx_serial(), cx_net(), and cx_ssh():

 . For serial or TAPI connections, the GUI should call cx_serial().
 . For SSH connections, it should call cx_ssh() and then cx_net().
 . For all other network connections, just calls cx_net().

ckuus7.c, Cinco de Mayo de 2002.

New ckuus7.c from Jeff, 8 May 2002.  Merge cx_ssh() into cx_net().  Also: I
had made line[] an automatic variable, since the global line[] buffer is used
by almost every parsing routine in C-Kermit to hold string fields between
parsing and execution but Jeff says he found that some code somewhere depended
on line[] containing the hostname after setlin() was finished.

From Jeff, 10 May 2002:
 . Fix SET SSH STRICT-HOST-CHECKING parse: ckuus3.c.
 . Add prototypes for cx_net() and cx_serial(): ckuusr.h.
 . Add ANSI versions of cx_net() and cx_serial() declarations and supply a
   missing parameter in the cx_serial() invocation, change SSHCMD cx_net()
   invocation to new form.

From Jeff, 16 May 2002:
 . ANSI strictness changes: ck_ssl.[ch]
 . New DIALER command: ckuusr.[ch]
 . Correction to how -0 turns off autodownload: ckuusy.c
 . Prototypes for GUI menu action functions: ckuusr.h.
 . Replace setting of GUI-action variables by function calls: ckuus[3457x].c
 . Fix FTP -z switch parsing: ckcftp.c.
 . Fix SET HOST testing of setlin() return code: ckuus3.c

From Jeff, 18 May 2002:
 . Allow half-size GUI fonts: ckuus[35y].c.

Fixed setguifont() to parse fractional font sizes and round to nearest half
point.  ckuus3.c, 18 May 2002.

For GUI, wrote front ends for getyesno(), readtext(), and readpass():

 . uq_ok() prints text and gets Yes/No, OK/Cancel, or just OK response.
   This replaces getyesno() and can also be used for alert or help boxes.

 . uq_txt() prints text and gets a single text response.  Replaces
   readtext() and readpass().

 . uq_mtxt() is like uq_txt() but allows multiple text fields.  Replaces
   any combination of readtext() and readpass().

Obviously the #ifdef KUI portions of the uq_blah() routines need filling in.
ckuusr.h, ckuus3.c, 18 May 2002.

Converted selected getyesno() calls to uq_ok(): ckcftp.c, ckuus3.c, ckuus6.c.
Some were not converted because it was inappropriate, e.g. DELETE /ASK; others
because they're in Jeff's code.  The most interesting conversions are in the
DIAL command when DIAL CONFIRMATION is ON.  Here there is a dialog for each
phone number asking if it's OK (ug_ok()) and if not, asking for a replacement
(uq_txt()); seems to work fine in C-Kermit.  All the candidates for uq_mtxt()
are in Jeff's code.  18 May 2002.

From Jeff: Convert remaining getyesno/readtext/readpass calls to uq_blah()
so they can be GUI dialogs.  ckuus[37].c, ckcftp.c, ckuath.c, ck_ssl.c,
21 May 2002.

Added KCD command = CD to symbolic directory name (EXEDIR, COMMON, APPDATA,
TMPDIR, etc etc).  ckuusr.h, ckuus[r25].c, 21 May 2002.

From Jeff, 28 May 2002:
 . --title: commandline option: ckuusr.h, ckuusy.c
 . Fix some #includes, move some declarations: ckcfns.c
 . Change K95 version from Dev.00 to Beta.01
 . ASK[Q] /GUI: ckuus6.c.
 . Various GUI screen updates and #ifdefs: ckuus7.c
 . Add missing cx_net() calls to new setlin() for file SuperLAT..: ckuus7.c
 . Updated uq_*() routines for GUI dialogs: ckuus3.c.

Added GETOK switches (/TIMEOUT for all; /POPUP and /GUI for K95G):
ckuus6.c, 29 May 2002.

Added HELP SET GUI text.  ckuus2.c, 29 May 2002.

From Jeff:
 . Another K95-specific #include for ckcfns.c.
 . More items for K95G Actions menu.
 . Change K95G Locus switching to call setlocus() rather than set variable.
 . Ditto for several other variables now settable from Actions menu.
 . Fix SET HOST /NET:SSH status code so IF SUCCESS works.
 . Fix SHOW SSH port-forwarding.
ckcfns.c, ckuus[r367].c, ckcftp.c, ckcmai.c, 30 May 2002.

Changed SET LOCUS to have a new value, ASK, corresponding to new autolocus
value of 2, K95G only.  Changed setlocus() to not do anything if the new and
old loci are the same, otherwise to invoke a GUI dialog in K95G if autolocus
is 2, and also to handle any text messages.  Changed SHOW COMMAND to show ASK
value for SET LOCUS.  Rewrote HELP SET LOCUS.  ckuusr.[ch], ckuus[23].c,
ckcftp.c, 30 May 2002.

Add a missing space to Locus popup, and fix Jeff's version of the code to
compile in C-Kermit.  ckuusr.c, 31 May 2002.

From Jeff, for K95 GUI, 6 June 2002:
 . Force some GUI popups to be in foreground: ckuus3.c.
 . Fix SHOW TERM font display: ckuus5.c.
 . Update K95 version numbers and date (4 June 2002): ckcmai.c.
 . Add note about encrypted private keys vs scripts to HELP SET AUTH: ckuus2.c.
 . Fix SET HOST for DECnet: ckuus7.c.

--- K95 2.0 ---

From Jeff, 7 June 2002:
 . Fix some #ifdefs for Unix builds (locus, dial, etc): ckuus7.c
 . Add gui_resize_scale_font() prototype: ckuus3.c
 . Add some missing SET GUI commands: ckuus3.c
 . Update version numbers: ckcmai.c

--- K95 2.0.1 ---

From Jeff, 11 June 2002:
 . Conditionalize Locus-switching popup text for GUI/Console: ckuusr.c.
 . Fix the SRP_installed_as_server() function.  The new API returns TRUE even
   if the SRP config and password files cannot be found.  Went back to the old
   API.  This bug affects C-Kermit 8 when built with SRP as well as 1.1.21
   through 2.0.1.  Since iksdnt.exe has not been shipped yet I fixed it and
   uploaded a new non-beta build of it.  ckuath.c.

From Jeff, 12 June 2002:
 . Fix SSH AGENT ADD: ckuusr.c.
 . Fix --facename: option to not fail if name unknown: ckuusy.c.
 . Fixes for OpenSSL 0.9.7 and OpenBSD 3.1: ck_ssl.c.
 . Fix SET AUTH TLS VERIFY NO to prevent a dialog but still a warning if
   SET AUTH TLS VERBOSE ON is set: ck_ssl.c.
 . Fix FTP code to verify the hostname as specified by the user and not
   the hostname discovered by the reverse DNS lookup.  For example,
     FTP OPEN kermit.columbia.edu
   should produce a dialog because that name is not in the certificate
   even though ftp.kermit.columbia.edu (the reverse DNS name) is:  ckcftp.c.

Add support for Solaris 9 and NetBSD 1.6.  makefile, ckuver.h, ckcdeb.h,
13 Jun 2002.

Discovered that Solaris 9 wants to hide the members of struct FILE, and
enforces this for 64-bit builds.  They offer some functions like __fbufsize()
to get the info, but not the info we need for reading escape sequences (the
_cnt member).  Let's hear it for political correctness.  Created new solaris9g
(32-bit) and solaris9g64 (64-bit) targets.  Sorry, no arrow keys in 64-bit
mode.  Also no more direct access to sys_errlist[]; must use strerror().
makefile, ckucmd.c, 13 Jun 2002.

Added solaris9g+openssl+zlib+pam+shadow, which in turn required adding
solaris2xg32+openssl+zlib+pam+shadow, needed for gcc 3.1 in which you have
to specify 32-bit.  Fails for some mysterious reason in link step
(can't find libssl.so.0.9.6 even though it's there).  makefile, 13 Jun 2002.

Solaris 8 empty socket problems again -- tthang() times out, subsequent
tcsetattr() calls do horrible things.  Added a bandaid to ttclos(): don't
call tcsetattr() any more if hangup timed out.  ckutio.c, 14 June 2002.

Gerry B reported the bandaid got us bit farther but Kermit still disappears.
Added code to reassert the alarm signal handler, since it is likely that
Solaris has become stricter about this since last time I looked.  (Later
Gerry reported back that this did the trick -- C-Kermit now exits normally
and releases the lockfile).  ttclos(): ckutio.c, 17 Jun 2002.

If you use Kermit to copy a file to a destination file that already exists and
is longer than the source file, the destination file is not truncated.  I had
mistakenly assumed that setting O_CREAT in the open() call in zcopy() would
create a new copy of the file.  Fixed by also setting O_TRUNC.  ckufio.c,
17 Jun 2002.

Updated HELP INPUT and MINPUT text to explain 0 and -1 timeout values, and
HELP DIAL to explain about entering CONNECT mode automatically.  ckuus2.c,
17 Jun 2002.

Got rid of client-side "Press the X or E key to cancel" message when giving
a REMOTE command if QUIET is set or if XFER DISPLAY is NONE.  ckuus7.c,
17 Jun 2002.

From Jeff 25 Jun 2002:
 . Add SUN terminal type: ckuusr.h, ckuus[57].c.
 . Add GUI file transfer display: ckcker.h, ckuus[47x].c.
 . Changes to allow C-Kermit to build with OpenSSL 0.9.7.  Current
   C-Kermit code is designed to compile with 0.9.6 and earlier.  To
   compile with 0.9.7 you must specify -DOPENSSL_097.  This avoids
   missing symbols in the DES library.  The functions in OpenSSL were
   renamed in 0.9.7 to avoid link time conflicts with Kerberos 4.
   ckufio.c ck_crp.c ckuath.c ck_ssl.h ck_ssl.c, makefile.

From Jeff 26 Jun 2002:
 . apparently the SSL Passphrase Callback function was not converted
   from readpass() to uq_txt()
 . FTP Authentication failure errors were not being reported to the
   user.  So a failure would appear to be a successful completion
   unless FTP DEBUG was ON.  Now the message is reported unless
   the QUIET flag is set.
ck_ssl.c, ckcftp.c.

SET TRANSFER MODE MANUAL didn't work for FTP; fixed in putfile() and getfile():
ckcftp.c, 1 Jul 2002.

Changed debug log for FTP to log "FTP SENT" and "FTP RECD" for protocol
messages, just like we do for Telnet, to make it easy to grep them out of
the log.  ckcftp.c, 1 Jul 2002.

In FTP MGET /UPDATE, equal times spuriously caused download.  doftpget() was
misinterpreting chkmodtime()'s return code.  ckcftp.c, 3 Jul 2002.

In FTP MGET /RECOVER, recovery is skipped if the local file is newer than
the remote.  This would seem to make sense, but when a download is
interrupted, the partial file never gets the date of the remote file, so
the partial file is always newer, and recovery never works.  Fixed in
recvrequest() by commenting out the date check.  ckcftp.c, 3 Jul 2002.

A better way to fix the previous problem is to always set the file date from
the server and then only allow /RECOVER to work when the dates are equal.
But that's not possible because MDTM is not implemented universally, and it
conflicts with how Kermit currently works, namely that FTP DATES are OFF by
default.  Also, checking dates prevents [M]GET /RECOVER from working with
files that were incompletely downloaded by some other FTP client.

In FTP MGET /RECOVER <wildcard> <wildcard> ..., the first file in each group
is always downloaded.  Diagnosis: Kermit sends "TYPE A" prior to NLST (as it
must).  Then when it sends its first SIZE command, it's still in ASCII mode,
so the server sends the "ASCII size" rather than the binary size, which does
not agree with the size of the local file (which was downloaded in binary
mode), so recovery is always attempted even when the files are identical.  The
TYPE A command is sent by initconn().  After the remote_files() call, we have
to change the type back to the prevailing type before sending the first SIZE
command.  Fixed in cmdlinget() and doftpget(): ckcftp.c, 3 Jul 2002.

In FTP MGET /EXCEPT:<pattern> used with SET XFER DISPLAY brief, files that
are skipped just say ERROR instead of saying why they were skipped.  Fixed
in doftpget(): ckcftp.c, 3 Jul 2002.

Added EXIT to top-level HELP text.  ckuus2.c, 13 Jul 2002.

Strip braces in REINPUT n {string}.  ckuusr.c, 13 Jul 2002.

Added /QUIET switch to ASK-class commands.  This means not to print any error
messages when an ASK-class command times out waiting for a response.  Made
sure that when a timeout occurs, the command fails.  Also made sure the
c-Kermit prompt doesn't write over the ASK prompt if ASK times out.  Also
fixed ASK, when it times out, not to return -9, which it did in one case,
which causes a command-stack dump.  ckuus[267].c, ckucmd.c, 13 Jul 2002.

Fixed SET FILE INCOMPLETE help text, which said that both KEEP and AUTO were
the default.  ckuus2.c, 13 Jul 2002.

If you SET FTP DEB ON and then turn it OFF, the MGET temp file is still kept.
Fixed by getting rid of ftp_knf variable and using ftp_deb to control whether
temp file is deleted (ftp_knf was being set from ftp_deb anyway, but then
wasn't being reset by SET FTP DEB OFF).  ckcftp.c, 13 Jul 2002.

If an FTP transfer was in progress but the FTP connection drops and automatic
locus switching is enabled, the locus does not change; thus (for example) a
subsequent DELETE command makes Kermit send a REMOTE DELETE packet on stdout.
Fixed in lostpeer(): ckcftp.c, 13 Jul 2002.

For docs: FTP CD with no arg might not be accepted by the server; e.g. the
Kermit FTP server says "501 Invalid number of arguments".

The FTP module never handled SET INCOMPLETE.  Fixed in doftprecv2().  ckcftp.c,
13 Jul 2002.

When FTP DATES is ON, we set an incoming file's date only if the file was
received successfully.  Changed the code to set the file's date even if it was
received only partially (assuming we can get the date from server).  ckcftp.c,
13 Jul 2002.

Suppose we were doing FTP MGET /UPDATE from a server directory of 100,000
files.  Kermit would send a SIZE command for every file unconditionally.  On
some connections, e.g. to the Red Hat Rawhide server, each one could take up
to 30 seconds.  That would be 3 million seconds = 34 days.  Don't send a SIZE
command during the selection phase unless a /SMALLER or /LARGER selector was
given.  Once the file is selected, send a SIZE command only if one hadn't been
sent for that file already.  ckcftp.c, 13 Jul 2002.

Made [M]GET and [M]PUT /UPDATE switch imply FTP DATES ON, since they didn't
work unless it was.  ckcftp.c, 13 Jul 2002.

Added FTP [M]GET /DATES-DIFFER, which is like /UPDATE except it selects files
that are newer or older, rather than only newer.  This allows updates from
sources where files might be rolled back to earlier versions.  It's a bit
dangerous if you use it without knowing what it's for, since it allows older
files to overwrite newer ones.  (Code is also in place for [M]PUT
/DATES-DIFFER, and it works, but I commented it out because it's either
useless or dangerous since when uploading, you can't set the the file dates
when they are arrive on the server.)  ckcftp.c, 13 Jul 2002.

Changed chkmodtime() to remember if MDTM fails on a particular connection
because it's an unknown command (500, 502, or 202), and if so, not to ask
again.  ckcftp.c, 13 Jul 2002.

With this last change, I think it's safe to change the default for FTP DATES
from OFF to ON.  ckcftp.c, 13 Jul 2002. 

Increased max number of /EXCEPT: patterns from 8 to 64 for file transfer (not
necessarily for other things).  This is now a compile-time symbol NSNDEXCEPT.
ckcker.h, ckcmai.c, ckclib.c, ckcfns.c, ckcftp.c, ckuus[rx].c.  13 Jul 2002.

Fixed FTP MGET to not send SIZE command when there is a name collision and
FILE COLLISION is DISCARD, even if /SMALLER or /LARGER were also specified.
ckcftp.c, 15 Jul 2002.

MGET fails if no files were transferred, even if the reason is that no files
met the selection critieria: /COLLISION:DISCARD, /UPDATE, /SMALLER, etc.
Changed MGET to succeed in that case.  domget(): ckcftp.c, 16 Jul 2002.

Big problems with canceling MGET; Ctrl-C cancels the current file, but we
don't break out of the file loop, we just go on to the next file.  Worse, if
we're executing a command file that has a series of MGETs, Ctrl-C doesn't
break us out of the command file.  Fixed by making failftprecv() and
failftprecv2() "chain" to the main SIGINT handler, trap().  This is fine in
Unix, but I'd be really surprised if it works in K95 so I put it in #ifndef
OS2.  Ditto for MPUT: Added the same treatment to failftpsend() and
failftpsend2().  Ditto for cmdcancel().  To adapt to K95, search for "TEST ME
IN K95" (5 places).  ckcftp.c, 16 Jul 2002.
 
Fixed previous fix to account for the fact that failftpblah() can be called
not only upon Ctrl-C, but also if transfer interrupted with X or Z.
ckcftp.c, 16 Jul 2002.

Yesterday's fixes revealed another problem: Interrupt MGET with Ctrl-C, start
another MGET, and the file list is total garbage.  Diagnosis: secure_getc()
and secure_getbyte() use internal static buffer pointers.  The only way they
ever get reset is when the data connection is closed by the server, so if you
interrupt a GET, the pointers are not reset and the next network read (e.g. of
an NLST response) returns whatever junk was lying around in the old buffer.
ckcftp.c, 17 Jul 2002.

FTP MGET temp file is kept only if FTP DEBUG is ON.  Changed FTP module to
also keep it if the regular debug log is active.  ckcftp.c, 17 Jul 2002.

Fixed version test in ckermit.ini: should be 6 digits, not 5.  17 Jul 2002.

Changed C-Kermit version number to 8.0.205 so scripts can test for the
recent changes.  ckcmai.c, 18 Jul 2002.

---8.0.205---

SET FILE COLLISION UPDATE would unset FTP DATES due to a typo in the recent
changes.  ckcftp.c, 21 Jul 2002.

FTP [M]GET /DATES-DIFFER really should have been a collision option.  Added
this option (implemented for FTP only) to both SET FTP COLLISION and the
FTP [M]GET /COLLISION: table, so this way if you have lots of [M]GETs, you
don't have to put /DATES-DIFFER on each one.  ckcker.h, ckcftp.c, 21 Jul 2002.

"FTP MGET a* b* c*" would fail to get any c*'s if no b*'s existed.
ckcftp.c, 21 Jul 2002.

From Jeff, 22 Jul 2002:
 . Beginnings of Ann Arbor Ambassador terminal emulation for K95;
   ckuus[57].c, ckuusr.h.
 . Bump K95 version number to 2.0.2: ckcmai.c

Added -DCK_PAM -DCK_SHADOW to all Solaris targets, 2.6 and above.  makefile,
23 Jul 2002.

Discovered that CK_SCRIPTS path search for TAKE files was #ifdef'd out
except for K95.  Fixed in ckuusr.c, 25 Jul 2002.

From Jeff: changes to support K95 italics: ckuus[57].c,  25 Jul 2002.

Fixed path search for TAKE to not search the CK_SCRIPTS path if the filespec
contains any directory or path parts.  Added a new function to check for
this:  int hasnopath(filespec) in ckucmd.c: 26 Jul 2002.

Update HP-UX build instructions from PeterE: makefile, 26 Jul 2002.

Commented out "const" from struct pam_message declarations because it
causes "initialization type mismatch" warnings.  ckufio.c, 26 Jul 2002.

Suppose you have a network directory containing a listing for host "foo":

  foo tcp/ip foo.bar.com

Then in K95 you give a command "set host /network-type:ssh foo".  This
results in the directory lookup replacing the "ssh" network type with TCP/IP,
and making a Telnet connection.  Fix attempted at about line 8625 of ckuus7.c
in cx_net(); needs testing in K95.  26 Jul 2002.

FTP Password: prompt in Unix was not allowing editing.  The code looked right;
I put in some debugging and suddenly it worked.  Took out the debugging and
it still worked.  Maybe I dreamed it.  Anyway, I fixed the "FTP SENT" debug
log entry to not record the password, and removed a redundant section above
to log the same thing, but prior to any charset conversion.  ckcftp.c,
27 Jul 2002.

From Jeff, 28 Jul 2002:
 . Fix typo in initxlist(): ckcmai.c.
 . Fix typo in Friday's set-host fix: ckuus7.c.
 . Move parsing of --height/width command-line args after prescan(): ckuusy.c.

Added invisible top-level SITE and PASSIVE commands for FTP as a convenience
for habituated FTP client users.  ckuusr.[ch], ckcftp.c, 28 Jul 2002.

A while back a user asked if it was possible to MGET a bunch of files from
an FTP server and have them all appended to each other upon arrival.  The
obvious way to do this would have been:

  mget /collision:append /as-name:bigfile *.*

But to make this work, I had to get rid of the "as-name must contain
variables" check in the MGET parser.  doftpget(): ckcftp.c, 28 Jul 2002.  

Verified that it was possible to do the same thing (GET a bunch of files
and append them all into one result file) with Kermit protocol.  It works
fine but in this case there is no /COLLISION switch; you have to SET FILE
COLLISION APPEND first.  30 Jul 2002.

Changed COPY /APPEND to allow wild source to single destination file, e.g.
"copy /append *.* bigfile".  ckuus6.c, 30 Jul 2002.

From Mark Berryman: a replacement for zchkpath(), the VMS routine that checks
whether a file is in the current directory; the old one (that I wrote) was
a hack that only worked sometimes.  Martin Vorlaender verified Mark's code in
the situation where mine was breaking (server running in captive account).
ckvfio.c, 30 Jul 2002.

PeterE reported a problem with SWITCH case labels that start with '#':
The problem is that the SWITCH variable contents in this case happens to be
a comment, e.g.:

  CMD(M)[_forward # Stand: 24.07.2002<CR>]

so the GOTO target is null.  The solution would be for SWITCH to put the GOTO
(_FORWARD) target in quotes.  But GOTO does not strip quotes or braces from
around its target.  Fixed in ckuusr.c, 30 Jul 2002.

Fixed the SWITCH macro definition to put the _FORWARD target in quotes.
ckuus5.c, 30 Jul 2002.

PeterE also reported that an empty SWITCH case label did not work.  There's no
particular reason why it should, but after a brief look, it wasn't that hard
so I did it.  It required commenting out the check for empty labels and fixing
the comparison in dogoto().  Now it's possible to read lines from a file and
use each line as a SWITCH variable, with patterns as case labels, including an
empty label to match empty lines, #* labels to match comment lines, etc.
ckuus[r6].c, 30 Jul 2002.

PeterE also reported the value of \%* acquiring a trailing blank when
referenced inside a SWITCH statment.  This happens because \%* is formed using
\fjoin() on the \&_[] array based on its dimension, and at some point the
dimension is spuriously increased by one.  As a workaround, I made \fjoin()
ignore trailing empty \&_[] array elements and oddly enough this also fixed
the growing dimensions problem.  The many script torture tests reveal no ill
effects, so it seems like a keeper.  ckuus4.c, 30 Jul 2002.

Some of Peter's sample scripts made C-Kermit 8.0.201 dump core, but no more.

Fixed "delete xxx" to print an error message and fail if if xxx does not exist.
Ditto for when xxx is a directory.  ckuus6.c, 30 Jul 2002.

Patches to SSL modules from Jeff based on yesterday's advisory.  ck_ssl.[ch],
31 Jul 2002.

Fixed some typos affecting the filename collision action during command-line
FTP [M]GET.  ckcftp.c, 31 Jul 2002.

Fixed SHOW FTP to handle FTP COLLISION DATES-DIFFER.  ckcftp.c, 31 Jul 2002.

A while back someone pointed out that SET CONTROL UNPREFIX ALL and SET
PREFIXING NONE gave different results.  Fixed them to use the same code.
Also made "set prefixing none" visible.  ckuus3.c, 4 Aug 2002.

Added SET CD HOME <path>, to let the user specify which directory is intended
when "CD" or "KCD" is given by itself.  This is because in Windows, some
applications set up their own HOME environment variable that isn't necessarily
where the user wants "cd" to go, but redefining HOME can interfere with the
application (example: Windows EMACS).  SET CD HOME was done by adding a myhome
variable, initially a NULL pointer, and then changing homepath() to use it if
it is set.  zhome() is not affected.  Also the homepath() prototype had been
missing from header files.  ckcmai.c, ckuusr.h, ckuus[2345].c, 4 Aug 2002.

PeterE got another core dump with his SWITCH statement.  Found a place where
an out-of-bounds array reference could occur if the switch variable was
empty.  ckuus6.c, 5 Aug 2002.

PeterE noticed that if the switch variable contained a comma, spurious matches
could occur with the label pattern.  The real problem turns out to be what
happens when the SWITCH variable doesn't match any of the case labels and
there is no DEFAULT label.  Fixed by having dogoto() in the SWITCH (_FORWARD)
case pop the command stack before returning failure, i.e. by moving the
"if (stopflg) return(0);" statement down a few lines.  ckuus6.c, 5 Aug 2002.

PeterE noticed that a SWITCH case label of :* did not match an empty SWITCH
variable.  Fixed in doswitch(): ckuus6.c, 6 Aug 2002.

In testing the previous fix, I found it only worked sometimes.  Inspection
of the debug log showed that a statement like:

  if (y == -3) s = "{}";

was assigning "{" rather than "{}" to s.  Replacing the string constant by a
buffer containing the same string fixed it.  The reason (guessed correctly by
PeterE) was the following sequence:

  y = cmfld("Variable name","",&s,xxstring);
  if (y == -3) s = "{}";
  len = ckstrncpy(tmpbuf,brstrip(s),TMPBUFSIZ);

brstrip() (by design and as documented) affects the string in place.  But in
this case the string is a constant, not data in a buffer, so all further uses
of "{}" get the wrong string (at least in optimized builds).  The only real
cure is to change brstrip() to make a copy of its argument if it has to do
anything to it.  This will slow down some scripts, but it's too risky to
leave it as it was.  ckclib.c, 6 Aug 2002.

The previous change required an audit of the C-Kermit code to make sure that
no references to brstrip() depended the result buffer being persistent, or the
result pointer indicating a position in the source buffer.  Oops, it turns out
that thousands of places rely on brstrip() working in place.  Therefore the
change had to be undone.  There's no good way to write a dummy-proof brstrip();
programmers either have be sure they're not calling it with a pointer to a
string constant, or else they have to copy the result back to the right place
each time.  Better to leave it as it was and audit the code to fix any calls
that refer to string constants (turns out there were only two).  Restored the
original fix to doswitch() (replacing the string constant by a buffer holding
the same string), plus minor fixes to ckcftp.c, ckuus[r36].c, 6 Aug 2002.

We need file dialogs in several situations in the K95 GUI.  I added a "user
query" routine for this, uq_file(), in ckuus3.c, filling it in only for Unix.
Then I added code to call it from rcvfil() when (a) it's an autodownload, and
(b) SET TERM AUTODOWNLOAD is ASK (I just added this option; it needs to be set
to see it in action -- maybe it should be the default for KUI, in which case
initialize "int autodl = ?" to TAD_ASK in ckcmai.c).  Works fine, except of
course it interferes with the file-transfer display, but that won't be a
problem in K95G.  ckuusr.h, ckuus[37].c, ckcfns.c, ckucns.c, 6 Aug 2002.

Another place we need a file dialog is when Kermit is a URL interpreter.  The
problem is: how can we let the user decide whether Kermit should ask?  There
really isn't any way.  Either it always asks or it never does.  In this case I
think it makes sense to always ask if it's KUI, otherwise never.  I added the
code for ftp: URLs to to doftprecv2(), which I tested successfully in Unix
before putting it into #ifdef KUI..#endif.  Also added code for http[s] to
ckuusy.c in #ifdef KUI..#endif, not tested.

Still need this added for K95G Actions->Capture.  The clearest example is the
FTP one.  Just search for KUI in the FTP module.

Some minor adjustments to yesterday's work, mainly just comments, plus
generate the full pathname for the default file.  ckuus3.c, ckcftp.c,
7 Aug 2002.

Note: for some reason cmofi() is not supplying the default value if user
enters an empty name... (but that won't affect the Windows version).

Added /USER: and /PASSWORD: switches to SET TCP { HTTP-PROXY, SOCKS-SERVER }.
ckuus3.c, 7 Aug 2002.

New 'uninstall' target from PeterE, works by having the 'install' target
write an UNINSTALL shell script.  makefile, 8 Aug 2002.

Added some debugging statements to the VMS communications i/o module to try
to track down a problem that occurs when the controlling terminal is a LAT
device.  ckvtio.c, 10 Aug 2002.

Fixed the non-K95 uq_file() to respect the given default name, but still show
the fully qualified absolute pathname for the default in the dialog.  The
reason to not use the fully qualifed name as the default in the cmxxx() calls
is that this can easily result in a whole directory tree being created due to
directory aliases, symlinks, etc.  So when you get a file by referring to its
URL (e.g. ftp://kermit.columbia.edu/kermit/READ.ME), uq_file() converts the
READ.ME part to (e.g.) /home/fdc/tmp/READ.ME but gives just "READ.ME" as the
default when parsing the name.  This way the user knows where it will go and
gets an opportunity to change it, and if the default is accepted, it goes into
the current directory.  uq_file(): ckuus3.c, 10 Aug 2002.

Found the spot for calling uq_file() for kermit:// URL downloads.  Added
prefatory text to filename prompts for Kermit and FTP downloads.  ckcfns.c,
ckcftp.c, 10 Aug 2002.

Now with kermit:// or ftp:// URL downloads there's no way to disable the
prompting.  I could easily make SET TERMINAL AUTODOWNLOAD ASK cover these
cases too (even though "terminal" has nothing to do with FTP or URL
downloads).  OK, I did this, but now prompting is disabled by default.
ckcftp.c, ckcfns.c.  10 Aug 2002.

Enabled file prompting (adl_ask) by default in K95G, disabled it by default
everywhere else.  So now FTP and Kermit URL downloads as well as terminal-mode
Kermit (but not Zmodem) downloads are prompted for if TERMINAL AUTODOWNLOAD is
ASK, which is it by default only in K95G.  But this will happen only if
uq_file() is filled in for K95G; otherwise everything should work as before.
ckcmai.c, 10 Aug 2002.

Notes:
 . Need a better command to control this.
 . FTP URL downloads are almost instantaneous, whereas Kermit URL downloads
   take a really long time to set up (logging in takes at least 10 seconds).

From Jeff, 13 Aug 2002:
 . Increase K95 version to 2.1.0: ckcmai.c.
 . SET TCP { HTTP-PROXY, SOCKS-SERVER } /USER: /PASSWORD: actions: ckuus3.c.

From PeterE: a new install target that's only about half as a big as the
previous one, yet still generates an UNINSTALL script.  makefile, 13 Aug 2002.

Vace wanted to be able to give the FTP client an offset for the server time,
in case the server's time (or timezone) is set incorrectly.  I added this by
building on all the date/time parsing/arithmetic code -- notably delta times
-- that was done for C-Kermit 8.0.  The new command is SET FTP
SERVER-TIME-OFFSET delta-time; shows up in SHOW FTP and HELP SET FTP.
ckcftp.c, 13 Aug 2002.

Fixed HELP ASK and HELP GETOK text.  ckuus2.c, 14 Aug 2002.

Fixed GETOK to accept /GUI switch even in K95.EXE and C-Kermit, just like ASK
does (in which case, it just ignores it).  ckuus6.c, 14 Aug 2002.

SET XFER CHAR TRANSPARENT no longer disables character-set translation because
file-scanning turns it back on.  The "new way" to disable character-set
translation is SET XFER TRANSLATION OFF.  This needlessly confuses users who
expect the old way to still work.  So I fixed SET XFER CHAR TRANSPARENT to set
XFER TRANSLATION OFF, and SET XFER CHAR anything-else to set it back ON.
ckuus3.c, 15 Aug 2002.

Fixed SET TERM AUTODOWNLOAD { ON, OFF } to turn off the ASK flag (adl_ask).
ckuus7.c, 16 Aug 2002.

Added FEAT query to FTP client from draft-ietf-ftpext-mlst-13.txt.  FEAT is
sent along with REST 0, MODE S, and STRU F if /NOINIT is not included in the
FTP OPEN command.  Parsing the FEAT result is handled by turning the "auth"
argument to getreply() into a function code: GRF_AUTH to parse AUTH reply;
GRF_FEAT to parse FEAT reply.  For GRF_FEAT, getreply() fills in a flag array,
sfttab[] (server feature table); sfttab[0] > 0 means server responded to the
FEAT query, in which case individual elements are set > 0 for each supported
feature.  ckcftp.c, 18 Aug 2002.

If server sends a feature list, display it if FTP DEBUG is on, then set mdtmok
and sizeok (the flags that say whether it's OK to send MDTM and SIZE commands)
accordingly.  If user gives an [M]PUT /RECOVER command and server has
announced it doesn't support REST, print a warning but try anyway (maybe
change this later).  Responses about other features that we use such as AUTH
and PBSZ are ignored for now -- i.e. we try them anyway.  And of course
responses for features we don't care about (LANG, TVFS, PROT) are ignored.
ckcftp.c, 18 Aug 2002.

If the server says it supports MLST, use MLSD instead of NLST to get the file
list.  This is done in remote_files() with some simple string-twiddling.  Then
replace the relevant (but not all) SIZE commands with code to first check if
we already got the size from the MLSD response and use that instead rather
than asking again.  Same deal for MDTM.  ckcftp.c, 18 Aug 2002.

Checked that this works when giving pathnames in the MGET filespec.  Checked
to make sure everything works as before with servers that don't support FEAT
or MLSD.  Checked to make sure FTP OPEN blah /NOINIT worked with servers that
do support FEAT and MLSD.  Checked that FTP CHECK works.  It's all OK.

Tested only with Ipswitch server; need to find and test with others.

The stack of temp files needed for MGET /RECURSIVE is annoying because what
if we run out of file descriptors...  But the spec doesn't provide a way to
request a recursive listing.

Supplied a missing comma in HELP SET CD text.  ckuus2.c, 19 Aug 2002.

Generalized parsing of MLST/MLSD file facts and values.  Got file type from
server and had MGET skip non-regular files.  ckcftp.c, 19 Aug 2002.

Kirk Turner-Rustin <ktrustin@owu.edu> reported that if Unix C-Kermit has a SET
HOST PTY connection (e.g. SSH) open, local window size changes are not
propogated through the connection to the host.  I imagine that must be because
the SIGWINCH signal is caught by Kermit and its children don't see it; maybe
if I pass it along to the child fork, all will be OK.  Began by exporting
"slavepid" from the pty module and changing its name to pty_fork_pid.  Moved
the SIGWINCH handler, winchh(), from ckctel.c to ckutio.c.  Armed it from Unix
sysinit() so it's always armed.  This way window changes affect Unix C-Kermit
no matter what mode it's in: tt_rows, tt_cols, cmd_rows, and cmd_cols are all
kept in sync.  Then if we're not in remote mode (i.e. we have a ttyfd), we
call tn_snaws() and rlog_snaws() (which should be ok since they return right
away if the appropriate kind of connection is not open) and then if
(pty_fork_pid > -1), a SIGWINCH signal is sent to it.  ckupty.c, ckctel.c,
ckutio.c, 20 Aug 2002.

All this works fine except the PTY part; in other words, the original problem
is not fixed.  The "kill(pty_fork_pid,SIGWINCH)" call executes without error
but has no effect because the size of the PTY never changed.  To make this
work I had to add an ioctl() to change the size of the PTY before sending it
the SIGWINCH.  Compiles and works ok on Linux and Solaris; Kirk also confirmed
it for AIX 4.3.3.  ckutio.c, 20 Aug 2002.

Fixed xlookup() to work for uppercase keywords.  ckucmd.c, 20 Aug 2002.

Fixed FTP parsefeat() and parsefacts() to use xlookup() instead of lookup(),
since abbreviated keywords are not allowed.  ckcftp.c, 20 Aug 2002.

Adjusted some lines from yesterday's window-size code for platforms I hadn't
tried yet.  ckutio.c, 21 Aug 2002.

EXIT from K95 when it has an FTP connection open and it pops up the
Locus dialog.  Made it not do this if it knows it's in the act of EXITing.
ckuus[rx].c, 22 Aug 2002.

In K95, FTP GET in ASCII mode results in a file with Unix line terminators
even though the protocol is correct:

  RETR smjulie.txt
  150 Opening ASCII mode data connection for smjulie.txt (1878 bytes).

The source file is a regular Unix text file with LF at the end of each line.
It's incredible that nobody noticed this before.  It only came to light when
somebody tried to open a downloaded text file with Notepad, which doesn't
handle Unix-format files (Wordpad and Emacs have no problems with them).  The
problem was in doftprecv2() in the FTT_ASC section.  There was no conditional
code for Unix vs Windows.  In all cases, the code discarded incoming CR's in
ASCII mode.  I put the CR-discarding code in #ifdef UNIX..#endif.  ckcftp.c,
22 Aug 2002.

Removed super-verbose debugging from gtword(): ckucmd.c, 23 Aug 2002.

Gregory Bond reported a problem with "if defined \$(BLAH) ..." inside of a
SWITCH statement.  It wasn't really the SWITCH that was doing it, it was the
fact that he had enclosed the SWITCH case in braces, which made it an
"immediate macro" (XXMACRO).  The XXMACRO code parsed the macro definition
(the part inside the braces) with cmtxt(...,xxstring), which should have been
cmtxt(...,NULL) to defer the evaluation of the interior of the macro until it
was executed.  This is better illustrated with the following example:

  { echo START, for \%i 1 3 1 { echo \%i }, echo STOP }

which totally fell on its face prior to the fix.  Also fixed ?-help for
immediate macros, which was broken too.  ckuusr.c, 23 Aug 2002.

RFC959 says STOU does not take an argument.  But every FTP server I've
encountered but one accepts the arg and constructs the unique name from it,
which is better than making up a totally random name for the file, which is
what RFC959 calls for.  Especially because there is no way for the client to
find out the name chosen by the server (because RFC 959 and 1123 are
contradictory, plus no servers follow either one of them for this anyway).  So
we try STOU with the argument first, which works with most servers, and if it
fails, we retry it without the arg, for the benefit of the one picky server
that is not "liberal in what it accepts" UNLESS the first STOU got a 502 code
("not implemented") which means STOU is not accepted, period (which happens
with ProFTPD).  ckcftp.c, 25 Aug 2002.

Added SET FTP ANONYMOUS-PASSWORD (plus help text and show value).  ckcftp.c,
25 Aug 2002.

Made FTP command "not available" if NOFTP is defined.  ckuusr.c, 25 Aug 2002.

Forced client to send a TYPE command upon initial connection, since given
the variable quality of FTP servers, it's not safe to assume the server is
in ASCII or any other particular mode.  ckcftp.c, 25 Aug 2002.

SET FTP CHARACTER-SET-TRANSLATION ON is completely broken in K95, although it
works fine in C-Kermit.  Furthermore it is broken in both the GUI and Console
versions, so it's not a Unicode vs OEM console-character-set issue.

Added Concurrent PowerMAX OS target from Tom Horsley.  makefile, ckuver.h,
27 Aug 2002.

Minor fixes to FTP module from Jeff.  ckcftp.c, 27 Aug 2002.

New Makefile target for Mac OS X 10.2, needs -DNDSYSERRLIST added, from
William Bader.  2 Sep 2002.

SET OPT DIR /DOTFILES didn't work for server listings.  A few years ago when
I front-ended zxpand() with nzxpand(), I missed a couple places where
traverse() needed to refer to xmatchdot (nzxpand's argument flag) rather than
global matchdot.  Fixed in traverse(): ckufio.c, 2 Sep 2002.

From Jeff, 4 Sep 2002:
 . setautodl(x) -> setautodl(x,y): ckuusr.h, ckuus[7y].c
 . Add another parameter to popup_readblah(): ckuus6.c
 . Sort out some confusion in scanfile() where a parameter was also used as a
   local flag.  ckuusx.c.
 . Protect restoring of saved terminal idle parameters with a flag that says
   they were actually saved.  ckuusr.c.
 . Rework uq_text() and uq_mtxt().  ckuus3.c.
 . Fix FTP charset translation for little-endian hardware: ckcftp.c.

The latter still doesn't work in Linux:

  (/home/fdc/kermit/) C-Kermit>set ftp server-character-set latin1-iso
  (/home/fdc/kermit/) C-Kermit>set file character-set utf8
  (/home/fdc/kermit/) C-Kermit>get latin1.txt

Results in "????????: file not found".  But it works fine on the Sun.

Jeff's patch removed a little-endian byte-swap (LEBS) from doftpsend2().  But
the real problem was that LEBS was not being done consistently throughout the
module.  There were similar xgnbyte()/xpnbyte() loops elsewhere in the code,
and all of them needed to work the same way.  Undoing Jeff's fix and then
adding the LEBS to the loop in getreply() makes downloads work right, but the
messages are still messed up (they come out in Chinese :-)  Begin by moving all
byte-swapping operations that occur in ckcftp.c itself into a new function,
bytswap().  It's either right to do it all the time, or to do it never; this
way we can turn it on and off in one place.

xp/gnbyte() include behavior that depends on what Kermit is doing: W_SEND,
etc.  xpnbyte() tests W_KERMIT, which is a combination of W_SEND, W_RECV, etc.
Defined a new symbol W_XFER, which is like W_KERMIT but includes W_FTP.  These
are all the "whats" in which character sets might need to be converted.
Changed the W_KERMIT reference in xpnbyte() to W_XFER.  Fixed the inderminate
"what" state after an FTP command by moving "what = W_COMMAND;" from before
the main parse loop to inside it (this didn't matter before the addition of
FTP but now it does).  ckcker.h, ckcftp.c, ckuus5.c, 6 Sep 2002.

Finally I changed xlatec() to be consistent with all the other xgnbyte() /
xpnbyte() usage throughout the FTP module and, poof, everything worked in
Linux (and still works on the Sun).  We still need some work in Windows (where
the file character-set is not necessarily the console character set for
messages) but we can tackle that next.  ckcftp.c, 6 Sep 2002.

Checking yesterday's work:

Kermit file transfers with charset translation work fine in both directions.

FTP GET with charset translation works fine on both BE and LE

Fixed a typo in yesterday's changes that made FTP PUT with charset translation
always upload 0-length files.  ckcftp.c, 7 Sep 2002.

FTP PUT (after the typo was fixed) with charset translation works fine on BE,
but on LE the message comes out in Chinese and the resulting file gets ? or
nothing for all for the accented letters:

      FTP...  Kermit 
      Up  Dn  Up  Dn  Term
  BE  OK  OK  OK  OK   xx
  LE  no  OK  OK  OK   xx

xx = C-Kermit CONNECT mode with translation doesn't seem to do anything, not
only in today's code, but also in the 8.0 release version: "set term char
latin1 utf8" -- SHOW CHAR shows the right stuff, but no translation is done.
Ditto for the 7.0 release.  That can't be right...

But one problem at a time -- what's wrong with LE FTP uploads?  Note that
XLATE works on the same machine, so it's obviously confusion in xgnbyte()
about "what".  Suppose we make xgnbyte() ALWAYS return bytes in BE order.
This makes sense because xgnbyte() is almost always used to feed xpnbyte(),
and xpnbyte() requires its bytes to come in BE order.  This means that all
code that uses xgnbyte()/xpnbyte() loops can be simplifed, which I did for
the FTP module.  ckcfns.c, ckcftp.c, 7 Sep 2002.

Of course Kermit protocol uses xgnbyte() too, but only for filling
packets, and packets never contain UCS2 and even if they did, it would have
to be big-endian, so no changes needed for getpkt().  Now we have:

      FTP...  Kermit 
      Up  Dn  Up  Dn
  BE  OK  OK  OK  OK
  LE  OK  OK  OK  OK

Now let's look at the remaining xgnbyte() calls in the rest of the code:

ckuus4.c:
  xlate() uses it of course.  I simplified the general-case loop.
  Works OK on both Sun and Linux.

ckuus6.c:
  typegetline() uses it.  I commented out the byte swap.  Seems OK.

Built and tested on Linux, Solaris, and SunOS.  I'm sure I must have broken
something, but the main things are better than they were.  Kermit and FTP
transfers need testing in K95, as well as the TYPE command (there's a bunch of
special K95 code in there).  C-Kermit charset translation during CONNECT is
still broken, or else I forgot how to use it, but that's a separate issue
since xgnbyte()/xpnbyte() are not involved.  And we still need to do something
in FTP getreply() for K95 to convert messages to the console character set for
display, rather than the file character set (should be trivial).  Also there's
still a lot of extra debugging and commented-out junk in ckcftp.c to be
cleaned up after more testing.

During yesterday's testing, I noticed that REMOTE SET { FILE, XFER }
CHARACTER-SET didn't work.  The server accepted these commands but they didn't
seem to do anything.  In fact, they did work, but they were undone later by
code in sfile() that restored the global settings in case they had been
temporarily overridden by autoswitching or whatever.  The solution is to
"unsave" the saved values whenever a global setting is performed explicitly.
Tested successfully against Sun and Linux servers.  Also the server end of
REMOTE SET needed updating for Unicode.  ckcfn[s3].c, ckuus3.c, 8 Sep 2002.

Cleaned commented-out cruft and extra debugging from ckcftp.c.  8 Sep 2002.

Kermit autodownload with ASK file dialog: if user supplied an absolute
pathname, it was treated like a relative one.  Fixed the invocation of
uq_file() in rcvfil() to temporarily override the RECEIVE PATHNAMES setting.
ckcfns.c, 10 Sep 2002.

Added SET TERMINAL ROLL KEYSTROKES { SEND, RESTORE-AND-SEND, IGNORE }, parse
only.  Needs implementation (search for tt_rkeys and rollkeytab in ckuus7.c).
ckuusr.h, ckuus[27].c, 10 Sep 2002.

If FILE INCOMPLETE is DISCARD and a file is being received by IKSD but IKSD
gets a Telnet LOGOUT command, the partial file is not deleted.  In fact this
happens any time doexit() is called for any reason during file reception,
e.g. because of SIGHUP.  Added code to doclean() to check if a download
output file was open, and if so, to delete it after closing it if keep==0.
ckuusx.c, 10 Sep 2002.

Added a brief one-line message after remote-mode file transfer saying
what (or how many) file(s) were transferred, where they went, and whether
the transfer was successful -- kind of an automatic WHERE command, useful
with autodownloads so you know what happened.  ckcpro.w, 11 Sep 2002.

The Unix and VMS C-Kermit CONNECT modules have botched remote-charset to
local-UTF8 translation ever since the Unicode was first added in v7.0.  Fixed
in ckucns.c, ckucon.c, ckvcon.c, 11 Sep 2002.

On to pattern-matching...  The matchdot business should apply only for (Unix)
filename matching, not for general string matching.  Fixed in ckmatch():
ckclib.c, 11 Sep 2002.

A bigger problem occurs in filename matching.  Somehow the dirsep == fence
business interferes with matching {foo,bar,baz} segments.  For example, I have
a filename "foo" and I want to match it with the pattern "{foo,bar}".  Somehow
the segment pattern becomes "*/foo" and doesn't match the string.  Where does
the '/' get tacked on?  I don't even know how to explain this, but the short
story was that ckmatch(), under certain circumstances, would back up to before
the beginning of the filename string, which just happened to contain a "/"
(and before that a ".") because of who was calling it.  Obviously this is not
how to write a pattern matching function...  Ensuring that it never backs up
beyond the beginning of a string fixed the immediate problem and does not seem
to have broken any other matching scenarios (I have 150 of them in my test
script).  ckclib.c, 11 Sep 2002.

There's still a problem though.  Suppose the a client sends "dir {{.*,*}}" to
a server.  This asks for a directory listing of all files that begin with
dot as well as all files.  Still doesn't work because we don't normally show
dot-files, but in this case it SHOULD work because ".*" was explicitly
requested.  Staring at the ckmatch() code revealed how to fix this, and I did,
but that was only half the problem.  The other half was that the list of
files being fed to ckmatch() did not include the dotfiles in the first place.
The cure here is to change nzxpand() to prescan the pattern to see if it
includes a leading dot, and if so to set the "xmatchdot" flag itself, even
if it wasn't set by the caller.  ckclib.c, ckufio.c, 11 Sep 2002.

Now that {foo,bar,...} patterns work better, I added a quick hack to the
DIRECTORY command to allow multiple filespecs to be given, in which case we
combine them into a {file1,file2,...} pattern before calling nzxpand().  Works
fine but it's a hack because you don't get file lists upon "?" in the second
and subsequent filespec fields, but I doubt anyone will notice.  So now,
finally, people can do "dir .* *" like they do in Unix (except with ls) to get
a listing of all files in a directory without having to know about or use the
/DOTFILES switch.  This was NOT done for the server end of RDIR because of
ambiguity of spaces as separators versus filename characters.)  domydir():
ckuus6.c, ckuus[r2].c, 11 Sep 2002.

Added a CONTINUE command.  In a script, this does whatever CONTINUE did before
(e.g. in a FOR or WHILE loop).  At the prompt, it calls popclvl(), which gives
a more natural way to continue a script that has "shelled out" to the prompt.
ckuusr.[ch], 11 Sep 2002.

Added help text for CONTINUE.  ckuus2.c, 12 Sep 2002.

From Jeff, 16 Sep 2002:
 . SET TERM ROLL KEYSTROKES for K95: ckuusr.h, ckuus7.c
 . Remove the doexit() call from the Telnet TELOPT_LOGOUT handler: ckctel.c

Fixed an FTP debug message to be consistent with Kermit ones.
ckcftp.c, 16 Sep 2002.

Added SET/SHOW TRANSFER REPORT to turn the post-transfer report off and on.
ckuusr.h, ckuus[234].c, 16 Sep 2002.

Fixed Solaris (and maybe some other SVORPOSIX builds) to find out their full
hostname rather than just short form (e.g. watsol.cc.columbia.edu rather than
just watsol).  ckhost(): ckuusx.c, 16 Sep 2002.

"cat somefile | kermit -Ts -" is supposed to send stdin in text mode, but
K95's file transfer display reports BINARY.  Looked at C-Kermit code; it seems
fine.  Looked at packet and debug logs; C-Kermit was indeed sending in text
mode and announcing it correctly.  K95 gattr() is doing the right thing:

  gattr file type[AMJ]=3
  gattr attribute A=text=0
  gattr sets tcharset TC_TRANSP[A]

Same thing happens when C-Kermit is receiving.  Yet when I send an actual
file, rather than stdin, it's received in text mode.  The only difference is
that stdin does not have a Length attribute in its A-packet, so in this case
the receiver skips any calls to screen() that show the length or percent done.
Aha, so maybe it's just a display problem -- scrft() is not being called to
repaint the file type if the size was not known.  Fixed in opena() by
removing the IF clause from "if (fsize > -1L) xxscreen(SCR_FS,0,fsize,"");".
ckcfn3.c, 18 Sep 2002.

K95 user has a listfile containing some regular filenames and then some
filenames that include paths and has all kinds of problems with MGET /LISTFILE
(pieces of different names concatenated to each other, etc).  Setting up the
same scenario here, I don't see the same problems but I do see "Refused: Name"
when we go to get a path/name file.  This happens because (a) we had already
got a top-level file with a certain name, (b) a file in a subdirectory has the
same name, (c) we are stripping the path before calling zchki(), and (d)
FTP COLLISION is set to DISCARD.  How do we make FTP not strip the path?

This is an interesting question...  The answer depends on where the user
wants the file to go.  Normally if you tell an FTP client to "get foo/bar",
you want the file "bar" to be downloaded to the current directory.

Anyway, it turns out the FTP module uses paths locally during MGET only if
/RECURSIVE was specified.  So:

  mget /listfile:blah /recursive

should have made this work, but it didn't because in the /LISTFILE case,
we have effectively turned an MGET into a series of GETs, where the code to
check whether to strip the path didn't check the recursive flag because how
could a GET (as opposed to an MGET) be recursive?  Adding this exception to
the if-condition got us a bit farther but now when we try to open the output
file in doftprecv2(), zopeno() fails because the name contains a dirsep.
We have to call zmkdir() first but that wasn't happening because some other
flag wasn't set right in this case.  Finally zmkdir was called, but with
the wrong string.  After fixing that, it works.  Now we should be able
to use /RECURSIVE to force the pathname to be used on the local end.
ckcftp.c, 19 Sep 2002.

Checked FTP filename conversion issues.  FTP FILENAMES AUTO is supposed to
mean LITERAL if "wearealike" OR server is UNIX or Windows, otherwise
CONVERTED, but there were places where this rule was not applied consistently,
fixed now.  ckcftp.c, 21 Sep 2002.

Added SET FTP DISPLAY, which is like SET TRANSFER DISPLAY but applies only to
FTP, mainly because I tended to type it all the time.  Now if you have dual
sessions, each session can have its own transfer display style.  ckcftp.c,
ckuusr.h, ckuus[347].c, 21 Sep 2002.

Back to FTP MLSD.  We're supposed to match the pattern locally, not rely on
the server to filter its list according to the client's pattern.  Thus we must
also allow an empty argument to MGET and must not send a filespec with MLSD.
Actually this is tricky -- how is the client supposed to know whether to send
a filespec.  For example, if the user's command is "mget foo*bar", and the
server supports MLSD, then what should the client do?  The client does not
know the wildcard syntax on the server, so for all the client knows, this
might be a valid directory name, in which case it should be sent.  On the
other hand, the user might intend it as a wildcard, in which case it should
NOT be sent.  But the FTP client can't read the user's mind.  This is another
serious flaw in the Elz/Hethmon draft.  Anyway, I got the local matching
business working for MLSD as long as the user's MGET arg is really a pattern
and not a directory name.  To be continued...  ckcftp.c, 21 Sep 2002.

Added FTP { ENABLE, DISABLE } { FEAT, MLST }.  If we always send FEAT, we
usually get a complaint.  If we send FEAT and MLST is negotiated, there is a
good chance it is misimplemented or will have undesirable side effects, such
as sending huge file lists.  NOTE: /NOINIT on the FTP OPEN command also
disables both of these.  ckcftp.c, 22 Sep 2002.

Fixed mkstemp() code in FTP remote_files().  mktemp() does not open the file,
mkstemp() does open it; previously we had been opening it again and never
closing the first instance so every MGET would create another open file
descriptor.  ckcftp.c, 22 Sep 2002.

Added debug messages for temp-file creation and lines read from the temp file.
ckcftp.c, 22 Sep 2002.

Eliminated sending of some extraneous TYPE commands, but there's still room
for improvement.  ckcftp.c, 22 Sep 2002.

Moved definition of build date to top of ckcmai.c.  22 Sep 2002.

Added recursion to MGET with MLSD...  It's all done in remote_files().
Temp-file pointers are on a stack (max size 128).  When parsing MLSD lines
from the temp file and we see "type=dir", we create the local directory by
calling zmkdir(), change to the remote by sending CWD, increment the depth,
and call ourselves.  When reading from a temp file, upon EOF we close and
dispose of the temp file, return -3 if currently at top level, otherwise we
free the tmpfile name, decrement the depth, send CDUP to the server, "cd .."
locally, and go back and read the next line from the previous but now current
temp file.  Conceptually simple but needed hours of debugging -- what must
be static, what must be on the stack...  Seems OK now but still needs some
heavy testing.  ckcftp.c, 22 Sep 2002.

Added FTP { ENABLE, DISABLE } { SIZE, MDTM } and add help text for FTP
ENABLE and DISABLE.  ckcftp.c, 23 Sep 2002.

Don't allow restart if SIZE disabled.  ckcftp.c, 23 Sep 2002.

Make sure all implicit SIZE commands are surpressed if SIZE disabled.
ckcftp.c, 23 Sep 2002.

If an explicit FTP MODTIME command is sent when MDTM is DISABLED, and it
succeeds, re-ENABLE MDTM.  Ditto for SIZE.  ckcftp.c, 23 Sep 2002.

If an explicit FTP FEATURES command is sent during an FTP session, redo the
features database from it.  ckcftp.c, 23 Sep 2002.

After further discussion with Robert Elz, I realized I had to expose the
underlying MGET mechanisms to the user; the draft isn't going to change, and
the new spec will result in undesirable effects if the client tries to "do the
right thing" by magic in all situations; thus the user must have some new
controls:

  MGET [ /MLST, /NLST, /MATCH:xxx ] [ filespec [ filespec [ ... ] ] ]

These switches let the user force the use of MLSD or NLST when there's a
choice, and to force local use of a pattern rather than sending it to the
server, and even to send a directory name to the server at the same time as
specifying a pattern for local matching, and of course by default we try to do
the right thing in all scenarios.  Symbols only; not coded yet.  ckuusr.h,
23 Sep 2002.

Added the three new switches to MGET, plus /MLST is an invisible synonym for
/MLSD.  If /NLST or /MLSD is given it, it forces the corresponding FTP protocol
directive.  ckcftp.c, 25 Sep 2002.

Now for the tricky part: now we have two separate concepts for what to send to
the server: a filename or wildcard to be interpreted by the server (NLST only)
or a directory from which to get a list of all the files (NLST or MLSD),
possibly together with a pattern to be used by the client to match filenames
returned by the server.  This required giving remote_files() an additional
argument.  Now it uses "pattern" (if any) strictly for local pattern matching
(because now it is the /MATCH: switch argument, not the MGET filespec), and
"arg" (the MGET filespec) is what it sends to the server, maybe (see the
comments in the code for the actual details); either or both these can be
null.  ckcftp.c, 25 Sep 2002.

Discovered that "mget foo", where foo is a directory name, never worked.
Fixed in remote_files(): ckcftp.c, 25 Sep 2002.

Going through every combination of NLST, MLSD, /MATCH:, and MGET arg and
debugging each case until OK...  Then also with the panix.com NetBSD server
(lukemftpd 1.0) which also supports MLSD....  11 test cases all debugged and
tested OK.  ckcftp.c, 26 Sep 2002.

Added /NODOTFILES switch to FTP MGET, to control what happens with dot-files
if the server includes their names in the list (as lukemftpd does).  There's
no point in adding a /DOTFILES switch because what could it possibly do?
ckcftp.c, 26 Sep 2002.

Changed a bunch of "skipthis++" to "continue" in doftpget(), to avoid
error messages when skipping files that user said she wanted to skip.
ckcftp.c, 26 Sep 2002.

Added help text for the new MGET switches.  ckcftp.c, 26 Sep 2002.

Don't switch LOCUS when making an FTP connection until logged in.
ckcftp.c, 26 Sep 2002.

Fixed LDIR to run Kermit's built-in DIRECTORY code rather than the external
directory program.  ckuusr.c, 26 Sep 2002.

Protect iswild() against NULL args.  ckufio.c, 26 Sep 2002.

From Jeff: SET GUI WINDOW RUN-MODE { MAXIMIZE, MINIMIZE, RESTORE },
plus variables for GUI Window X position, GUI Window Y position, GUI
Window X resolution, GUI Window Y resolution, GUI Window Run mode.
ckuusr.h, ckuus[24].c, 27 Sep 2002.

From Ronan Flood: updated FreeBSD 1.0 makefile entry, plus an #ifdef to protect
sysconf() calls.  makefile, ckutio.c, 28 Sep 2002.

Change ftp_auth() to return(0) if an AUTH command gets a 500 response, so it
doesn't keep sending other kinds of AUTH commands.  ckcftp.c, 29 Sep 2002.

Changes from Jeff to yesterday's changes.  ckcftp.c, 30 Sep 2002.

From Jeff: SSH command-line personality.  Uses same command line as the Telnet
personality.  ckcker.h, ckcmai.c, ckuus[4y].c, 3 Oct 2002.

From Jeff, 7 Oct 2002:
 . SET PRINTER CHARACTER-SET.  ckuxla.c, ckuusr.h, ckuus[25].c
 . Promotion of K95 to Beta.01.  ckcmai.c
 . Promotion of SET GUI { MENUBAR, TOOLBAR } to visible.  ckuus3.c

Changed the URL parser as follows: if the username and/or password fields are
present but empty, as in:

           ftp://@ftp.xyzcorp.com/somepath
  or:      ftp://:@ftp.xyzcorp.com/somepath
  but not: ftp://:ftp.xyzcorp.com/somepath

the pointer for these items becomes a pointer to an empty string, rather than
a NULL pointer.  Then when we go to open the connection, if the username
string pointer points to an empty string, we prompt for the username (and/or
password).  ckuusy.c 9 Oct 2002.

Jason Heskett reported an interesting bug involving a core dump when an
ON_EXIT macro is defined that executes another macro.  Sometimes.  He was able
to send a short command file that always crashed.  Diagnosis: ON_EXIT, when it
is called, pokes itself out of the macro table by setting its own entry in the
macro name list to an empty string.  But this interferes with any macro
lookups that are done while executing ON_EXIT's body and also evidently some
code is not happy with empty macro names...  To fix: replace "on_exit" with
"on_exxx", so the replacement keyword is (a) nonempty, and (b) doesn't wreck
the alphabetical sorting of the table.  ckuusx.c, 9 Oct 2002.

Added makefile targets for FreeBSD 4.6 and 5.0.  Built and tested on 4.6;
don't know about 5.0.  ckuver.h, makefile, 9 Oct 2002.

Added targets for AIX 5.2 and 5.3; totally untested.  ckuver.h, makefile,
9 Oct 2002.

Built current source on Unixware 7.1.3 (make uw7); it's fine.  9 Oct 2002.

Promoted C-Kermit to 8.0.206 Beta.01 in hopes of a simultaneous release
with K95 2.1.  ckcmai.c, 9 Oct 2002.

From Jeff: Change KERMITFONT definitions to use the new (Unicode 3.1) code
points for the terminal graphics characters (such as VT100 horizontal scan
lines), rather than private-use codes.  ckcuni.c, 10 Oct 2002.

Jason Heskett also complained that REMOTE CD would print the name of the new
directory returned by the server even if he SET QUIET ON.  This is a tricky
one.  Which server replies should the QUIET settings apply to?  If I give a
REMOTE DIRECTORY command, it means I want to see the directory listing,
period.  But if I give a REMOTE CD command, I get an "unsolicited" response
message that SET QUIET ON should suppress.  Adding message suppression to 
rcv_shortreply() is close, but not totally right; for example, it also
suppresses the response to REMOTE PWD, which is not helpful.  The only right
way to do this is to suppress for REMOTE CD only, which can be done only by
setting a (new) global flag, rcdactive.  ckuus[r57].c, ckcpro.w, 10 Oct 2002.

Ditto for REMOTE LOGIN response message ("Logged in").  ckuus7.c, 11 Oct 2002.

From Jeff: SET GUI WINDOW FONT { NAME, SIZE }. ckuusr.h, ckuus4.c, 11 Oct 2002.

Quick preliminary 8.0.206 build-all:

 OK SunOS 4.1.3
 OK Solaris 2.5.1
 OK Solaris 9
 OK AIX 4.3.3
 OK HP-UX 10.20
 OK VMS 7.1 Alpha + TCP/IP
 OK VMS 7.1 Alpha nonet
 OK VMS 5.5 VAX + TCP/IP
 OK VMS 5.5 VAX nonet
 OK Unixware 7.1.3
 OK FreeBSD 3.1
 OK FreeBSD 4.6
 OK NetBSD 1.5.2 MVME (Gerry B)
 OK Sinix 5.42

Sinix build got stuck on ckuusr.c even though we're not optimizing on Sinix
any more.  Rebooting the machine fixed it.

Fixed some #ifdefs for VMS in new incomplete-file deletion code in doclean().
ckuusx.c, 11 Oct 2002.

Moved uq_blah() prototypes from ckuusr.h to ckcker.h because these routines
are called in modules that don't (and shouldn't have to) include ckuusr.h.
11 Oct 2002.

Jeff verified secure builds on Linux and Solaris.

Custom-build workout: 80 different feature-selection combinations:
 . Fixed yesterday's change for NOSPL: ckcfns.c.
 . Fixed conflict between NORECALL and USE_ARROWKEYS: ckucmd.c.
 . Moved setseslog() from ckuus5.c to ckuusx.c to avoid link-time foulups.
 . Fixed an unguarded reference to zmkdir() in ckcftp.c.
 . Protected rmsg() by #ifndef NOXFER: ckuus7.c.
 . Protected initxlist() by #ifndef NOXFER: ckcmai.c.
 . Fixed unguarded references to g_url struct in xx_ftp(): ckuusy.c.
 . Fixed unguarded references to tt_snaws() in winchh(): ckutio.c.

--- 8.0.206 Beta.01 11 Oct 2002 ---

From Jeff, 16 Oct 2002:
 . Fix K95 RMDIR: ckcfn3.c.
 . Makefile targets for Red Hat 7.2, 7.3, 8.0: ckuver.h, makefile.
 . Added \v(log_xxx) for each kind of log for PeterE: ckuusr.h, ckuus4.c.
 . Added SET TERM ATTRIBUTE DIM { ON, OFF }: ckuus[27].c.
 . Change "const" to "CONST" in some PAM declarations.  ckufio.c.

Added SET MATCH { DOTFILE, FIFO } { ON, OFF }.  A FIFO special file is a named
pipe, used for interprocess communication.  It must be opened at both ends, so
it's silly to match them by default; opening a FIFO and attempting to read
will block forever unless somebody is writing into the other end.  Made the
MATCH FIFO default OFF in all cases.  The dotfile default is the same as
always (OFF for UNIX, ON elsewhere); SET MATCH DOTFILE is simply a more
untuitive and findable command than SET WILD KERMIT /MATCH-DOT-FILES.  Note
that SET MATCH DOTFILE undoes SET OPTIONS DIRECTORY /[NO]DOTFILES, and vice
versa.  ckcmai.c, ckuusr.h, ckuus[23].c, ckufio.c. 17 Oct 2002.

Added client and server end of REMOTE SET MATCH { DOTFILE, FIFO } { ON, OFF }.
The new protocol codes are 330 and 331, respectively.  ckuus[367].c, ckcfns.c,
17 Oct 2002.

Adjusted the "match dot if pattern starts with dot" heuristic in nzxpand()
to not kick in if the filespec is "./foo".  This probably needs more work.
ckufio.c, 17 Oct 2002.

Fixed typo in transcribing Jeff's ckcfn3.c code from yesterday.  18 Oct 2002.

Moved some help text out of #ifdef ANYSSH that had nothing to do with SSH.
(Idea for a new EMACS feature: M-X list-ifdef-environment.)
ckuus2.c, 18 Oct 2002.

Removed "set file { permission, protection }" keywords, which led nowhere.
ckuus7.c, 18 Oct 2002.

Added -DSV68 to all SV/68 targets.  Make ckgetfqhostname() just return its
argument in SV/68; it dumps core otherwise.  In case this happens anywhere
else, add -DNOCKGETFQHOST to CFLAGS.  makefile, ckcnet.c, 18 Oct 2002.

For PeterE, added SET { SEND, RECEIVE } PERMISSIONS { ON, OFF } so incoming and
outbound permission attributes can be set separately. ckuus[27].c, 18 Oct 2002.

Changed SHOW ATTRIBUTES to show In and Out permissions separately.
ckuus5.c, 18 Oct 2002.

Fixed REDO to display the command it's redoing and to add it to the bottom
of the recall buffer.  ckuusr.c, 18 Oct 2002.

Discovered that DATE SATURDAY dumps core...  Apparently it always did; this
case was not included in the date-time torture test script.  The crash happens
because the DATE parsing code doesn't check for a NULL date-converion
error-message pointer.  Fixed in ckuusr.c, 18 Oct 2002.

The reason DATE SATURDAY got a date-conversion error was that this path thru
the code left a result pointer unset.  Fixed in cmcvtdate(): ckucmd.c,
19 Oct 2002.

DATE SUNDAY +1DAY returned incorrect results (for any day-of-week name, any
delta time), even though DATE TODAY +1DAY worked fine.  Fixed in cmcvtdate():
ckucmd.c, 19 Oct 2002.

SET TAKE ECHO ON counted each line twice when GOTO was active.  Fixed in
dogoto(): ckuus6.c, 19 Oct 2002.

Jeff noticed:
"KERMIT READY TO GET...
 RCVD: (2 files) Last: [/amd/prost/p/kd/jaltman/.src/ckonet.c] (OK)
the last file attempted may have been ckonet.c but it certainly was
not the last file received" (similarly for sending).  Fixed by having two
pointers for each name; a preliminary pointer, which is set for each file at
the beginning of the transfer (when we have all the needed info), and a final
one that is set from the preliminary one only after the file was transferred
successfully.  This corrects not only the automatic "wheremessage" at the end
of a remote-mode transfer, but also the WHERE and SHOW FILE command results.
ckuusx.c, ckcfn[s3].c, ckcpro.w, 19 Oct 2002.

From Jeff: Improve ORIENTATION message for K95 to say which directories are
for which INI files.  ckuusr.c, 23 Oct 2002.

Removed Beta designation from herald.  ckcmai.c, 23 Oct 2002.

Put final dates and ID strings in Unix and VMS build procedures.
Makefile, ckvker.com, 23 Oct 2002.

Build-all...  #ifdef adjustments: ckcfns.c...  83 different feature-set
combinations build OK on Linux.  23 Oct 2002.

From Jeff: SET WIN95 HORIZONTAL-SCAN-LINE-SUBSTITUTIONS.  ckuusr.h, ckuus7.c,
24 Oct 2002.

Fixed Heath-19 graphic character-set table to use new Unicode 3.1 values
if WIN95 HORIZ OFF.  ckcuni.c, 24 Oct 2002.

Changed tx_usub() to return Unicode 3.1 values if WIN95 HORIZ OFF.
ckcuni.c, 24 Oct 2002. <-- No backed off on this.

Some problems during build-all:

 . VMS 7.1 TGV 4.2: If I make a Telnet connection with it, then try to send
   a file (itself. wermit.exe) over the connection, the connection drops
   after about 20%, the thermometer zooms out to 100% and SUCCESS is reported.
   This doesn't happen with UCX.

 . VMS 7.3 TGV 4.3: ckcmai.c won't compile because of a complaint about the
   declaration of select() (which ckcmai.c doesn't use) in
   SYS$COMMON:[SYSLIB]DECC$RTLDEF.TLB.  Ditto in VMS 7.2 TGV 4.3.
   Adding NOSELECT to CFLAGS doesn't help.  I don't think the VMS version
   even uses select().  But the TGV 4.3 builds were OK in 8.0.201, so what
   changed?  I don't see anything in ckcnet.h that would have done it.

It builds OK with VMS 7.1 / TGV 4.2 but sending files on Telnet connections
fails in a strange way: the connection drops, but the thermomoter goes to 100%
and success is reported.  I don't know why the connection is dropping (s_errno
is 32 == "broken pipe"), but the spurious success indication is because of
a double failure in sdata(): (1) The packet-sending loop index could go
negative without breaking the loop when streaming; (2) if spack() fails,
sdata() should return -2, not -1 (which means EOF).  Also if any ttchk() in
sdata() returns < 0, sdata should return -2.  I fixed this code (which has
been this way for YEARS) and now VMS C-Kermit properly fails when it gets
the spack() error, but ttchk() in this case still doesn't think the connection
is lost, but that must be our new problem with MultiNet.  ckcfns.c,
27 Oct 2002.

The compilation failure in ckcmai.c is a clue...  The problem was that I added
#ifdef VMS / #include <time.h> / #endif to shut up complaints about the time()
call.  Evidently something in VMS <time.h> gives MultiNet a bad case of
indigestion; removing it fixes the compilation and the result works fine.  The
transmission failures in the other case seem to be a coincidence -- something
to do with the U of Arizona (probably some obscure VMS quota on my IDs there,
or some kind of network connection throttling), since it doesn't happen
anywhere else.  ckcmai.c, 27 Oct 2002.

Changed four occurrences of "void" to "VOID" in ckcftp.c, 27 Oct 2002.

Defined NOCKFQHOSTNAME for HPUXPRE65.  Might also need this for HP-UX 7
and maybe 8.  ckcnet.c, 27 Oct 2002.

From Jeff: PAM_CONST definition to clear up warnings caused by different
vendors' definitions of PAM structs.  ckufio.c, 28 Oct 2002.

Unixware 2.1.0 build bombs immediately with "UX:make: ERROR: line too long"
(which line?)  Not worth chopping up the makefile to fix but in a pinch it
could be done.  2.1.3 builds OK.

Did another 20-some platform builds, bringing the total to 83, plus a final
runthrough of the build-with-84-different-feature-set-combinations script on
Linux.  Should be good to go!

--- 8.0.206 24 Oct 2002 ---

Finally got access to Linux on IA64 again.  Builds OK but dumps core
immediately on startup.  Adding -DNOCKGETFQHOST was necessary but not
sufficient.  In this case, the very call to ckgetfqhostname() from ckhost()
(which is in ckuusx.c) was dumping core; thus I had to move the definition of
NOCKGETFQHOST from ckcnet.c to ckcdeb.h, add an #ifdef __ia64__ clause to it,
and protect the call to ckgetfqhostname() with it.  Obviously there has to be
a better fix but this will have to for now.  ckcnet.c, ckuusx.c, ckcdeb.h,
31 Oct 2002.

Link step fails in Mandrake 9.0 with undefined references to res_search,
dn_expand, and crypt.  Turns out the linux makefile target tests for the
existence of libcrypt.a and libresolv.a, but in Mandrake 9.0 they exist
only as *.so.  Changed linux target to look for both.  makefile, 1 Nov 2002.

Vace reported that "ftp mget a b c" would get ALL files from the server's
directory if c did not exist.  Diagnosis: off-by-one error in counting MGET
args processed.  Naturally fixing this bug revealed another (this time
cosmetic) one, which resulted in spurious error messages when hitting MGET
args that have no match on the server.  Fixed in ckcftp.c, 1 Nov 2002.

Rebuilt about 60 of the most important Unix binaries to pick up the fixes
31 Oct - 1 Nov 2002, and refreshed the FTP site with new sources, tarballs,
ZIP files, etc.  Sat Nov  2 19:11:30 2002

From Martin Vorlaender and Jeff, SSL/TLS support for VMS:
ckuusr.h, ckuath.h, ckcnet.c, ckctel.c, ckuath.c, 10 Nov 2002.

Added PASV as invisible synonym for PASSIVE.  ckcftp.c, 10 Nov 2002.

--- 8.0.206 24 Oct 2002 #2 ---

More work on SSL in VMS: Jeff + Martin Vorlaender: ck_ssl.c ckcmai.c ckcnet.c
ckctel.c ckuath.h ckvcon.c ckvtio.c ckvker.com 10-15 Nov 2002.

Discovered that ckvfio.c would not compile on VMS 6.1 with UCX 4.1 because 
<conv$routines.h> was missing, which is explicitly included.  Enclosed the
#include in #ifdef NOCONVROUTINES..#endif and rebuilt with
@[users.fdc.src]ckvker.com "" "" "NOCONVROUTINES".  16 Nov 2002.

Fixed the "ftp mget */data/*" problem with two small changes to doftpget():
ckcftp.c, 16 Nov 2002.  Placed a copy of ckcftp.patch in ~kermit/f.

From Lucas Hart: Fixes for VAX C 2.x and CMU TCP/IP.  "Can't guarantee that
the revised CKVOLD will work for all combinations of more recent
VMS/compiler/TCPIP releases, but I've tested it for compatibility on our AXP
VMS 6.2, UCX 4.0, DECC 5.6, your AXP VMS 7.1, DEC TCPIP 5.1, DECC 6.0 as well
as with VAX VMS 5.4, VAX C 3.2, CMU12 and VAX VMS 4.7, VAX C 2.4."  ckvfio.c,
ckvtio.c, ckuus5.c, ckvker.com, ckvold.com, 17 Nov 2002.

From Jeff: More work on VMS SSL.  Now it actually works, even in CONNECT mode,
except it hangs when it gets an error alert or the remote closes the
connection.  ckcnet.c. ckvtio.c, 17 Nov 2002.

NOTE: Lucas's changes should go into the 8.0.206 source code but it's too
late since ckvtio.c (upon which he based his changes) is already full of
SSL code.

MGET in K95 in totally broken FOR SOME PEOPLE (mainly me) if the TMP (or TEMP)
value is too long.  It works fine if you set these to C:\TMP.  Diagnosis: (1)
we were malloc'ing only 16 bytes for the temp file name (I think this was my
fault -- I was only looking at the "ckXXXXXX" part and forgetting that this
was appended to the TMP path); (2) the Windows version of mktemp() wants you
to use the value pointed to by the pointer it returns, rather than assuming
the mktemp() arg will be modified in place.  The code was changed to malloc a
longer string and to use the return value from mktemp() (if any) rather than
assuming that mktemp() modified its argument string (in K95 only -- not sure
about Unix platforms; the man pages differ on this, but at least this way if
some mktemp() version does NOT alter its argument, we still have a usable
filename (like /tmp/ckXXXXXX)).  Of course this won't be good for recursive
MLSD downloads, but we can always issue patches for the Unix version later if
needed.  The Linux and BSD versions use mkstemp() anyway.  There is, however,
a danger of a memory leak in the Unix version if the user has defined a TMPDIR
or CK_TMP environment variable whose value is longer than 9 bytes.  All this
is highly unlikely so we should be OK.  ckcftp.c, 17 Nov 2002.

--- K95 2.1.1 and updated ck[uv]206.{tar,zip} but not C-Kermit binaries ---

From Jeff: Fixes for Telnet Com Port Control, update to a newer release of
OpenSSL: ck_ssl.c ck_ssl.h ckcdeb.h ckcftp.c ckcmai.c ckcnet.c ckctel.c
ckuath.c ckuath.h ckucns.c ckuus4.c ckuus5.c ckuusr.c ckuusr.h ckvcon.c
ckvfio.c ckvker.com ckvtio.c ckvvms.h, 25 Nov 2002.

--- K95 2.1.2 and C-Kermit 8.0 CDROM ---

From Jeff, 28 Nov 2002:
 . Updated SSL modules: ck_ssl.[ch].
 . Fixed cipher-list display in SHOW AUTH & FTP ssl_auth(): ckuus7.c. ckcftp.c
 . Some minor tn_wait() fixes: ckctel.c.
 . Preliminary SSL support for VMS CONNECT: ckvcon.c.

Bumped C-Kermit edit number to 207.

From Jeff, 29 Nov 2002: "[C-Kermit was dumping core on SCO OSR5 Telnet Com Port
connections because] the SCO compiler treats all characters as signed.  This
was causing 'sprintf(buf,"02x ",ch);' to produce strings such as "ffffffc2"
instead of "c2" for values between 128 and 255.  This wrote beyond the end of
a buffer and blew away the stack.  Having fixed this I also noticed that
conect() did not properly check for carrier when TN CPC was negotiated.  This
has now been fixed as well."  ckucns.c, ckucon.c, ckctel.c, 29 Nov 2002.

From Jeff, 30 Nov 2002: Fix SSL for VMS and also carry forward the CPC fixes
to VMS.  ckcnet.c, ckvtio.c, ckvcon.c, 30 Nov 2002.

Changed copyright dates that are displayed (but not yet all the internal
ones) from 2002 to 2003.  ckcmai.c, 3 Jan 2003.

Fixed the FTP module's brief-format transaction log, which had the status
inverted: OK for FAILED and v.v.  ckcftp.c 3 Jan 2003.

From Jeff, 4 Jan 2003:
 . Make /MOVE-TO:xxx convert xxx to full pathname: ckuus[r67].c,
 . Make SHOW OPTIONS ALL show both kinds of options: ckuus2.c.
 . More command-line personalities: ckcmai.c, ckuusy.c.
 . New NOSCROLL command for K95: ckuusr.[ch], ckuus2.c.
 . New lockdown and other command-line options: ckuusr.h, ckuusy.c.
 . SSL interface updated to OpenSSL 0.9.7: ck_ssl.c.
 . SET TERM LINE-SPACING and CURSOR xxx NOBLINK: ckuus[27]c.
 . Expanded SHOW GUI command: ckuus3.c
 . New SHOW TABS code: ckuus5.c.

Updated SUPPORT (BUG), NEWS, and INTRO texts.  ckuus[26].c. 5 Jan 2003.

Fixed FTP module to suppress "'FEAT': Command not understood" message
unless FTP DEBUG is ON.  ckcftp.c, 6 Jan 2003.

Got a report that C-Kermit dumps core on Solaris when executing a certain
script.  Seems to be related to changing vnambuf[] in zzstring() from an
automatic array to a malloc'd buffer (see notes from 29 Jun 2000).  Changed
it to an automatic buffer except for K95.  ckuus4.c, 6 Jan 2003.

Nope, that's not it.  It evidently happens only after FTP PUT has been used.
Fixed solaris9g makefile target to include -funsigned-char and built a new
binary.  Determined that building with gcc and -funsigned-char makes no
difference.  makefile, 7 Jan 2003.

I did a preliminary audit, looking at the items in the left column: if used in
a given routine, are there any obvious mistakes:

                       1        2          3           4              5
                   doftpput->putfile->sendrequest->doftpsend2->secure_write
malloc                OK       OK         OK          OK             OK
makestr               OK       OK     	  OK          OK    	     OK
automatic arrays      OK       OK     	  OK          OK    	     OK
[ck]str[n]cpy         OK       OK     	  OK          OK    	     OK
[ck]str[n]cat         OK       OK     	  OK          OK    	     OK
sprintf               OK       OK     	  OK          OK    	     OK
nzltor                OK       OK     	  OK          OK    	     OK
zfnqfp                OK       OK     	  OK          OK    	     OK
memcpy                OK       OK     	  OK          OK    	     OK
bcopy                 OK       OK     	  OK          OK    	     OK

secure_write sends the data directly on clear-text connections.  On secure
connections, it calls secure_putbuf(), which calls secure_putbyte(), but we
aren't using those, so secure_write() is the end of the call chain for FTP
PUT.  doftpsend2 has buf[] as an automatic array, which it reads file data
into using zxin (binary mode only), but this looks OK.  Still, I changed it
read 1 less than the buffer size (fread) just in case.  Also there was one
debug() statement that referred to an automatic array (fullname[]) before it
was initialized (but not used in this case), which I fixed.  ckcftp.c,
7 Jan 2003.

FTP GET /RECURSIVE somepath/somefile still didn't work, despite what the
notes of 19 Sep 2001 say.  There are so many paths through the code,
depending on switch values, GET vs MGET, etc, that a crucial spot was missed.
Fixed in doftpget(): ckcftp.c, 7 Jan 2003.

Back to the core dump...  after two days of full-time debugging, I found the
culprit: the buffer-full test in the zzout() macro should have been ">="
rather than just ">", thus Kermit wrote 1 byte past the end of the malloc'd
FTP PUT output buffer, ucbuf.  Why did it never happen in K95?  Because, since
it's a secure build, FUDGE_FACTOR is defined there.  But it's not defined in
Solaris or other clear-text builds.  Although the crash wouldn't happen in
secure builds, the 1-byte leak might have caused errors in the data transfer.
In non-Solaris clear-text builds, like Linux, I suspect that malloc() tends
add something for safety (especially given the man page statement that it
allocates "at least" what you asked for).  Another reason the problem escaped
notice is that zzout() is used only for text-mode PUTs (and then only when
there is no character-set translation), but most transfers these days are
binary and/or downloads.  Anyway, in the course of debugging, a lot of small
cleanups were done: sizeof(blah) for all arrays was replaced by the same
symbolic size that was used to allocate the array, numeric array sizes were
replaced with symbolic ones, etc.  The real fix is one character long.
ckcftp.c, 9 Jan 2003.

Got a report that "mget /recursive */somedir/*" downloaded the files into
the current directory, rather than re-creating the remote directory structure.
Fixed in doftpget(): ckcftp.c, 10 Jan 2003.

Unix C-Kermit did not allow file transfer if started under inetd and accessed
via Internet raw socket (or whatever).  Diagnosis: isatty() and friends would
fail causing ttopen() to fail.  Fixed by adding escape clauses for "-l 0"
situations (i.e. Kermit invoked with an already-open file descriptor) at the
appropriate places.  ckcmai.c, ckutio.c, 14 Jan 2003.

From Jeff for K95 2.1.3
 . Add test for startflags & 128 to trap() for ignoring BREAK.
 . Fix for SHOW TRANSMIT.

--- K95 2.1.3 ---

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

---8.0.211---

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 a 17 Apr 2004 for the Communications I/O module.  Also the 10.3
executable now has a designer banner: "Mac OS X 10.3".  makefile, ckuver.h,
ckutio.c, ckuus[45].c, 17 Apr 2004.

***********************
