applied 050_ck_patch.patch
[ckermit.git] / ckc211.txt
1 C-KERMIT CHANGE LOG (Changes since 8.0.200 of 12 Dec 2001)
2
3 Chronological order: Go to the bottom to find the newest edits.
4
5 ---8.0.200---
6
7 Known bugs (+ = fixed after release):
8
9  + 1. tilde_expand() can call getcwd() with NULL arg.
10  + 2. getexedir() called too early (fatal in combination with (1)).
11  + 3. Kermit "get blah" where blah is a symlink; server refuses to send it.
12       Should not do this if GET not recursive.
13  ? 4. Dave Sneddon's report about VMS fore/background confusion.
14  + 5. FTP GET path/file doesn't work - path not stripped - but MGET works.
15  + 6. IRIX 5.3 compilation problems (have patches from Marcus Herbert)
16  X 7. Filename completion bug (see below) (deferred).
17  + 8. QNX6 herald and other problems.
18
19 -------------
20
21 Merged Jeff's changes, 20 Dec 2001:
22
23  . Changed all occurrences of "ttnproto == NP_TELNET" to "IS_TELNET()" to
24    account for the difference between SSH and Telnet.  ckuscr.c,
25    ckuus[3457].c, ckcnet.h, ckcfns.c, ckudia.c, ckutio.c, ckucon.c, ckucns.c.
26
27  . Moved SSH pty failure warnings.  ckuusr.c.
28
29  . Security adjustments to FTP module, plus fix an error message.  ckcftp.c.
30
31  . Adjustment of some security-related #ifdefs. ckcdeb.h, ckuus2.c, ckctel.c.
32
33  . Guard against calling getpwnam() with a NULL arg in tilde_expand() ckufio.c.
34  
35  . Moved getexedir() call to later, where it's safe.  ckcmai.c.
36
37 Added SSH ADD and many SSH SET commands from Jeff's spec.  Fixed SHOW SSH
38 to not dump core if variables weren't set.  ckcker.h, ckuus[r3].c, 20 Dec 2001.
39
40 C-Kermit in server mode, client says "get foo" where foo is a symlink.
41 Server says "no files meet selection criteria" instead of sending the file.
42 It should only refuse to follow symlinks if it's a recursive get.  Fixed
43 in sgetinit(): ckcpro.w, 21 Dec 2001.
44
45 More work on SSH and SET/SHOW SSH commands.  ckuus[r3].c, 21 Dec 2001.
46
47 Undid Jeff's replacement of the SSH pseudoterminal allocation failure
48 message, because now it comes out any time an SSH command has to be
49 reparsed (in the non-SSHBUILTIN case).  ckuusr.c, 21 Dec 2001.
50
51 More SSH and SET SSH command work back & forth with Jeff, plus Jeff added
52 SET HOST /NET:SSH.  ckcmai.c, ckuus[r37].c, ckcdeb.h, ckuusr.h, 22 Dec 2001.
53
54 Added SSH OPEN switches.  ckuusr.c, 22 Dec 2001.
55
56 Added SSH CLEAR, HELP SSH, and HELP SET SSH.  ckuus[r2].c, 23 Dec 2001.
57
58 From Jeff:
59  . SET TCP commands now apply to SSH
60  . SSH V2 REKEY and FORWRD-{LOCAL,REMOTE}-PORT  commands now implemented
61  . Missing DLLs automatically disable appropriate authentication mechanisms.
62 ckuusr.c ckcnet.c ckuus3.c ckcmai.c ckcnet.h ckuus4.c, 26 Dec 2001.
63
64 From Jeff:
65  . Remove SET SSH KEEPALIVES.
66  . Add help text for SSH AGENT { ADD, DELETE, LIST }.
67 ckuus[23].c, 28 Dec 2001.
68
69 Added parsing for SSH AGENT { ADD, DELETE, LIST }.  ckuusr.c, 28 Dec 2001.
70
71 From Jeff:
72  . Fixed a crash that can happen when making an SSH connection.
73  . Filled in SSH AGENT actions.
74  . Changed default for strict host key check (to ASK) and help text.
75  . uploaded new binaries include ~kermit/os2test/beta/ssh-agent.exe
76  . Read man ssh-agent on ftp.kermit.columbia.edu for details on what it does.
77 ckuus[r23].c, 28 Dec 2001.
78
79 "ftp get path/filename" didn't work; the FTP client did not strip the path
80 from the local copy of the filename when doing a GET, even though it did
81 for MGET.  Diagnosis: in doftpget(), the "if (!getone && !skipthis)" statement
82 lacked an "else" part for the getone case.  ckcftp.c, 28 Dec 2001.
83
84 A while back Jeff reported that in FTP MGET, if you cancel a file with 'x',
85 all the rest of the files arrive truncated to 0 bytes.  I tried this on both
86 Unix and Windows and couldn't reproduce it.
87
88 In the last-minute flurry to release C-Kermit 8.0, I thought I noticed the FTP
89 client failing to update the fullscreen file-transfer display.  But it seems
90 to work right, at least in Unix.  When downloading a big file with FTP, all
91 the display fields are updated as expected.  But smaller files might go by too
92 fast for the display to do anything.  HOWEVER, in K95 the file transfer
93 display does not update itself until the end of the file, even if the file
94 takes a long time to transfer.  This happens in both the Console and GUI
95 versions.  A thread thing?  (Jeff says no.)  Yet the same display works fine
96 on Telnet connections.
97
98 In IRIX 5.3, the select()-based CONNECT module had to include <sys/time.h>
99 or else it blew up with "struct timeval" unknown.  Since there already was
100 a SYSTIMEH CFLAG, I added the #include within #ifdef SYSTIMEH..#endif and
101 rebuilt with KFLAGS=-DSYSTIMEH, only to discover that the irix5* targets
102 didn't bother to propogate KFLAGS.  Fixed in ckucns.c, makefile, 30 Dec 2001.
103
104 Increased IRIX5x Olimit from 2400 to 3000 because of ckuus[34].c.  Added
105 -ansi, since (Marcus Herbert reported) we were not actually getting ANSI-C
106 compilation even though CK_ANSIC was defined.  But now that we are, we get
107 warnings in <netinet/tcp.h>, which is included by ckcnet.h:
108
109   bit-field 'th_off' type required to be int, unsigned int, or signed int.
110   (3.5.2.1(30))
111           u_char  th_off:4,
112           ------  ^
113 Tough.  makefile, 30 Dec 2001.
114
115 But adding -ansi to the IRIX 5x targets also make compilation bomb whenever we
116 referenced fdopen() or popen(), which evidently don't have prototypes in any
117 of the header files.  Luckily we already have CFLAGS for this occasion too:
118 DCLFDOPEN and DCLPOPEN.  Added these to the irix51 target.  Also had to copy
119 the fdopen()-popen() prototype section to ckuusx.c, which has a new reference
120 to fdopen() in a workaround for the curses console buffering bug.  makefile,
121 ckuusx.c, 30 Dec 2001.
122
123 The QNX6 version did not receive a proper herald (it announced itself as
124 "unknown version".  Reshuffled #ifdefs in ckuver.h, added display of QNX6
125 and NEUTRINO symbols to ckuus5.c, 30 Dec 2001.
126
127 Lucas Hart sent in a patch for the VMS problem.  Apparently it was even worse
128 than Dave Sneddon had reported: 8.0 couldn't run at all under Batch.  ckvtio.c,
129 31 Dec 2001.
130
131 A major obstacle to the usability of the FTP client is that certain commands
132 don't behave as FTP users expect: CD, DIR, DELETE, MKDIR, etc, which are local
133 rather remote, and there are no LCD (etc), USER, or ACCOUNT commands.  We
134 could fix this by adding an FTP command-language personality, but file
135 management commands can also be remote or local on connections to Kermit
136 servers too.  So:
137
138 SET LOCUS { LOCAL, REMOTE, AUTO }
139   Sets the locus for unprefixed file management commands.
140   When LOCAL, a REMOTE (or R) prefix is required for
141   to send file management commands to a remote server (e.g. RCD, RDIR).
142   When REMOTE, an L prefix is required to issue local file management
143   commands (e.g. LCD, LDIR).  The word LOCAL can't be used as a prefix
144   since it is used for declaring local variables.
145
146 This applies to all types of connections, and thus is orthogonal to SET
147 GET-PUT-REMOTE, which selects between Kermit and FTP for remote file-transfer
148 and management commands.
149
150 The default LOCUS is AUTO, which means we switch to REMOTE whenever an FTP
151 connection is made, and to LOCAL whenever a non-FTP connection is made,
152 and switch back accordingly whenever a connnection is closed.
153
154 Implementation (31 Dec 2001):
155  . None of this is compiled if LOCUS is not defined.
156  . Added XYLOCUS (SET LOCUS) and LOCUS definitions: ckuusr.h.
157  . Override by defining NOLOCUS (which inhibits definition of LOCUS).
158  . Added LOCUS to SET keyword table: ckuusr.c.
159  . Added locus & autolocus variables: ckuusr.c.
160  . Added SET LOCUS parsing and variable setting: ckuus3.c.
161  . Added display of LOCUS setting to SHOW COMMAND: ckuus5.c.
162  . Added automatic locus setting to setlin(): ckuus7.c.
163  . Added automatic locus setting to ftpopen() and ftpclose(): ckcftp.c.
164
165 How to catch all the places where a Kermit connection is closed?  Turns out
166 we've done this before, when we added the connection log.  So I made
167 dologend() take care of locus switching.  But dologend() was not compiled in
168 if certain symbols were defined, such as NOLOCAL, or not defined, such as
169 CKLOGDIAL.  So I (a) rearranged the #ifdefs so that even if these would
170 otherwise have obliviated dologend(), now they leave a piece of it for
171 locus-setting; (b) moved the prototype out of #ifdefs; and (c) took all calls
172 to it out of #ifdefs.  ckcker.h, ckcfn2.c, ckcmai.c, ckucns.c, ckucon.c,
173 ckuus[r347x].c, 31 Dec 2001.
174
175 Added locus checking to the following commands: DIRECTORY, CD/CWD, CDUP,
176 DELETE, PWD, MKDIR, RMDIR, RENAME.  ckuusr.c, 31 Dec 2001.
177
178 Added LDIRECTORY, LCD/LCWD, LCDUP, LDELETE, LPWD, LMKDIR, LRMDIR,
179 LRENAME.  ckuusr.[ch], 31 Dec 2001.
180
181 Added USER and ACCOUNT commands, which are the same as FTP USER and FTP
182 ACCOUNT.  ckuusr.[ch], ckcftp.c, 31 Dec 2001.
183
184 Since automatic locus switching could be a big surprise for most people, I
185 printed message any time it changed.  ckcftp.c, ckuus[37].c, 31 Dec 2001.
186
187 Added help text for the new L commands and filled in missing HELP text for
188 SET GET-PUT-REMOTE, CDUP, MKDIR, and RMDIR.  ckuus2.c, 31 Dec 2001.
189
190 Changed help text of CD, DIR, etc, for LOCUS.  Changed the help text for
191 RCD, RPWD, RDEL, RDIR, etc, to mention that they also work with FTP servers.
192 Updated HELP REMOTE for this too.  ckuus2.c, 31 Dec 2001.
193
194 Made sure code builds with NOLOCAL, NOLOGDIAL, and NOLOCUS (it does).
195
196 The IKSD command, when given with a /USER: switch, sends the user ID to the
197 IKSD.  But the SET HOST /USER: command does not, when making a connection to a
198 Kermit service.  This makes it impossible to script IKSD interactions using
199 only client commands.  Furthermore, even if you include a /PASSWORD switch
200 with the IKSD command, it does not send the password.  I added code near the
201 bottom of setlin() to do this.  If we have a connection to a Kermit service
202 and a /USER: switch was given, then we attempt a REMOTE LOGIN.  If a
203 /PASSWORD: switch was not given then if the username is "ftp" or "anonymous",
204 we automatically supply a password of user@host; otherwise we prompt for a
205 password.  If a /USER: switch was not given, it acts like before.  It all
206 works, but it might not be the best way (or place) to do it.  setlin():
207 ckuus7.c, 31 Dec 2001.
208
209   NOTE: The above change doesn't help with IKSD /USER:anonymous,
210   the server prompts for password anyway, not sure why.
211
212   NOTE 2: What about secure authentication?  We have to test to see
213   if user was already authenticated before sending the login packet.
214
215 Added /opt/kermit and /opt/kermit/doc to info_dir[] list (for Solaris).
216 ckuus5.c, 31 Dec 2001.
217
218 From Jeff: new Help text for SET TERM FONT (K95 GUI).  ckuus2.c, 1 Jan 2002.
219
220 More work on help text for file management commands -- e.g. we can't lump
221 the L-commands together with the unprefixed ones; they need separate entries.
222 Also: added missing HELP REMOTE PWD, improved the default case (in which
223 help text had been omitted for a valid command).  ckuus2.c, 1 Jan 2002.
224
225 It seems VMS C-Kermit was pretty much ignoring the -B (force background) and
226 -z (force foreground) command-line options.  Fixed in congm(): ckvtio.c,
227 1 Jan 2002.
228
229 Tested the SET LOCUS business with VMS C-Kermit, which does not have a
230 built-in FTP client.  Of course in this case there is no automatic locus
231 switching, but SET LOCUS REMOTE works nicely on IKSD connections.
232
233 From Jeff:
234  . #ifdef adjustments for LOCUS changes.
235  . SSH KEY CREATE /TYPE:SRP.
236  . Fix \v(serial) to not be 8N2 by default if speed is 0.
237  . Don't let doexit() run if sysinit() hasn't been called first.
238 ckuus[r247x].c, 2 Jan 2002.
239
240 Made SET BACKGROUND { ON, OFF } do exactly the same as -B and -z options.
241 ckuus3.c, 2 Jan 2002.
242
243 Updated user-visible copyright dates to 2002 (but still need to do all the
244 source-module comments).  ckcmai.c, ckuus[25].c, 2 Jan 2002.
245
246 Rearranged #include <sys/time.h> in ckucns.c that was done for IRIX 5.3,
247 to avoid conflicts in SV/68 R3v6.  3 Jan 2002.
248
249 From Dave Sneddon: Code changes in VMS sysinit() and congm() to work around
250 problems in batch, SPAWN'd, etc, and change CTTNAM from TT: to SYS$INPUT:.
251 ckcdeb.h, ckvtio.c, 3 Jan 2002.
252
253 From Jeff:
254  . Fixed typo in definition of CTTNAM for VMS.  ckcdeb.h
255  . Moved macro definitions for SSHBUILTIN from ckuus3.c to ckuusr.h
256    so they can be referenced in ckuus7.c
257  . Added SSH functionality to SET HOST:
258      SET HOST /NET:SSH /CONNECT hostname [port] /switches
259  . Fixed SET NET TYPE so it won't reject SSH if SSH is installed.
260  . Changes to allow IKSD to continue functioning.  Somehow this minor change
261    to ckcmai.c got lost in one of the back and forth exchanges.
262  . HELP TEXT for UCS2 kverb
263  . Fix a problem in K95 where multiple threads could be attempting to
264    send a telnet negotiation simultaneously.
265 ckcmai.c ckcdeb.h ckuus2.c ckuus3.c ckuusr.c ckuusr.h ckuus7.c ckctel.c
266 ck_crp.c ckuat2.h ckuath.c, 4 Jan 2002.
267
268 From Jeff:
269
270   Peter Runestig complaining that the Telnet Forward X code was corrupting
271   data.  This resulted in a very thorough examination of the telnet module
272   code and a discovery of some rather significant problems.  The root of the
273   problems is the lack of thread safety.  To correct this problem the
274   following was done.
275
276   All code (regardless of module) which outputs telnet commands is placed
277   into a mutex region to ensure that competing output threads do not result
278   in interleaving their output.  This could happen for instance when the
279   forward-x thread is forwarding data and the user changes the window size
280   or sends an AYT or BREAK.  Next the buffer used for input and output
281   processing were identical.  This means that output data could be treated
282   as input or vice versa.  Ugh....
283
284   I also spent some more time cleaning up setlin().  Mostly reorganizing the
285   code into single if (...) blocks so that breaking it up will be easier.
286
287 ckctel.c ckuus7.c, 4 Jan 2002.
288
289 Updated internal copyright notices.  All modules, 5 Jan 2002.
290
291 From Jeff:
292   More of same, plus new makefile target and changes from Spike Gronim
293   for freebsd44+srp+openssl.
294 ckcdeb.h ckcnet.c ckctel.c ckuus7.c ck_ssl.c makefile, 5 Jan 2002.
295
296 Some minor updates and fixes to SSH and SET SSH help text.
297 ckuus2.c, 6 Jan 2002.
298
299 Added SET RGB-COLORS for GUI.  ckuusr.[ch], ckuus3.c, 6 Jan 2002.
300
301 From Jeff: More Telnet changes, Debug semaphores for K95, etc: ckcdeb.h,
302 ckuusr.h, ckuus[r35x].c, ckctel.[ch], ckuath.c, 7 Jan 2002.
303
304 Added --xpos:n --ypos:n, SET GUI WINDOW POSITION x y, and changed SET
305 RGB-COLORS to SET GUI RGBCOLOR.  Action needs to be filled in (in setguiwin()
306 in ckuus3.c), and gui_xpos and gui_ypos need to be defined in cko???.c.
307 ckuusr.h, ckuus[r3y].c, 7 Jan 2002.
308
309 Added --fontname:name --fontsize:name (and facename as synonym for fontname).
310 ckuusr.h, ckuus[7y].c, 7 Jan 2002.
311
312 Moved GUI (not OS/2) SET TERM FONT code in ckuus7.c to its own routine,
313 setguifont(), in ckuus3.c, and made GUI SET TERM FONT call this routine,
314 and also made SET GUI FONT call the same routine.  ckuus[37].c, 7 Jan 2002.
315
316 Added --termtype:, --height:, --width:, --user:.  Also added symbols for
317 --telnet:, --ssh:, --ftp:, --[remote-]charset, and --password:, but didn't
318 fill them in.  --password: is probably not a good idea (but we allow it for
319 FTP); the others involve a lot of code-shuffling and reconciliation, which
320 I'll try to do when I get a chance (especially the connection ones, which
321 can be done as part of the setlin() restructuring).  ckuusr.h, ckuusy.c,
322 8 Jan 2002.
323
324 Also I tried commenting out the #ifndef KUI..#endif's around SET TERMINAL
325 CHARACTER-SET (easier said than done because a crucial #endif was mislabeled).
326 Let's see if it compiles & works...  ckuus7.c, 8 Jan 2002
327
328 Added FTP [ OPEN ] /NOINIT, meaning don't send REST, STRU, and MODE commands
329 upon making an FTP connection.  This allows connection to servers that close
330 the connection (or worse) when given these commands (e.g. Linux 2.4 TUX 2.0
331 FTP server).  ckcftp.c, 8 Jan 2002.
332
333 Looked at adding caller ID support for the ANSWER command:
334
335  . SET ANSWER CALLER-ID { ON, OFF }
336  . SET ANSWER RINGS <number>
337  . \v(callid_xxx) xxx = { date, time, name, nmbr, mesg }
338  . CKD_CID modem capability
339  . Set CKD_CID for modems that have it.
340  . A quick survey shows:
341    - USR V.90:      No (but Jeff says some USRs have it).
342    - V.250:         No
343    - Lucent Venus:  No
344    - USR:           #CID=1 (the ones that have it -- X2?)
345    - Diamond Supra: #CID=1
346    - Rockwell 56K:  #CID=1
347    - PCTEL:         #CID=1
348    - Zoltrix:       +VCID=1
349    - Conexant:      +VCID=1
350  . Since there are different commands to enable caller ID reporting,
351    we need a new field in struct MDMINF.
352  . SHOW MODEM and SHOW DIAL would need updating.
353  . etc etc...
354
355 This is all way too much for now so I just did the setting of the \v(callid_*)
356 variables.  These are reset at the beginning of an ANSWER command, and then
357 set by the ANSWER command if they come in; thus they persist from the time
358 they are collected until another ANSWER command is given.  To take advantage
359 of autoanswer, the user has to enable it in the modem (all the modems I found
360 that support it have it disabled by default), and also has to set the number
361 of rings to at least 2.  This can be done with (depending on the modem):
362
363   set modem command autoanswer on ATS0=2#CID=1\{13}
364   set modem command autoanswer on ATS0=2+VCID=1\{13}
365
366 and undone with:
367
368   set modem command autoanswer on ATS0=1#CID=0\{13}
369   set modem command autoanswer on ATS0=1+VCID=0\{13}
370
371 The variables can be accessed only after the call is answered.  Therefore the
372 only way to refuse a call is to answer it, inspect the variables, and then
373 hang it up if desired.  Future Kermit releases can do this more nicely (as
374 sketched out above.)  Also while I was in the dialing code, I added result
375 code VCON (= VOICE), used by several of the newer modems.  These changes are
376 untested.  The SET ANSWER command is written but commented out.  ckuusr.h,
377 ckcker.h, ckuus[r3].c, ckudia.c, 8 Jan 2002.
378
379 From Jeff: fixes to --termtype:, --height:, --width:, --user:, and filling in
380 of --rcharset:, which required extracting code from settrm() into a separate
381 parse-method-independent remote character-set setting routine.  ckuus[7y].c,
382 8 Jan 2002.
383
384 From Jeff: More work on TERMINAL CHARACTER-SET code reorganization, and
385 reinstatement of SET TERMINAL CHARACTER-SET in K95G.  Also, fix char/CHAR
386 warnings in Telnet module.  ckuus7.c, ckctel.c, 9 Jan 2002.
387
388 Made SET TERM CHARACTER-SET visible for all builds, including K95G, and filled
389 in HELP text for it.  ckuus[27].c, 9 Jan 2002.
390
391 Added help text for new extended options.  ckuusy.c, 9 Jan 2002.
392
393 Commented out the return(-2) statement at the end of xgnbyte() to make the
394 "Statement not reached" errors go away, after checking to make sure that there
395 was no path that could fall through to the end.  I'm 99.99% sure there isn't,
396 but that doesn't mean that some compilers might not still complain.  ckcfns.c,
397 9 Jan 2002.
398
399 From Jeff: fix typo in the K95 extended-option help text; add more
400 semaphores to network i/o.  ckuusy.c, ckcnet.c, 10 Jan 2002.
401
402 Undid ansiisms in set{lcl,rem}charset() declarations.  ckuus7.c, 10 Jan 2002.
403
404 Removed a duplicated clause from the install target.  makefile, 10 Jan 2002.
405
406 From Jeff: more semaphores.  ckcnet.c, 11 Jan 2002.
407
408 Moved references to tmpusrid and tmpstring out of NOSPL #ifdefs -- they can
409 be used with NOSPL.  setlin(): ckuus7.c, 13 Jan 2002.
410
411 Made a dummy dologend() routine outside of #ifndef NOICP, so we don't have
412 to enclose every reference to dologend in #ifdefs.  (I had added a bunch of
413 calls to dologend() throughout the code to handle automatic LOCUS switching.)
414 ckuus3.c, 13 Jan 2002.
415
416 Moved "extern int nettype" outside of NOICP #ifdefs in ckuus4.c for NOICP
417 builds.  13 Jan 2002.
418
419 Moved a misplaced #ifdef in the VERSION command.  ckuusr.c, 13 Jan 2002.
420
421 Did 81 different feature-selection builds on Linux (RH 7.0), all OK after the
422 changes listed above for today.  13 Jan 2002.
423
424 Added prototypes for set{rem,lcl}charset().  ckcxla.h, 13 Jan 2002.
425
426 Added ckcxla.h to dependencies for ckuusy.c.  ckvker.com, 13 Jan 2002.
427
428 Made a correction to the HELP SET LOCUS text and supplied a missing comma
429 for HELP REMOTE.  ckuus2.c, 13 Jan 2002.
430
431 Built OK on HP-UX 11.11 (K&R and ANSI), Solaris 8 (cc), Solaris 2.5.1 (gcc),
432 SunOS 4.1.3 (cc and gcc), VMS 7.1 (DEC C, net and nonet), Unixware 7.1.1,
433 Tru64 4.0G, HP-UX 10.20 (K&R), AIX 4.3.3, FreeBSD 2.2.8, Slackware 8.0, IRIX
434 6.5.13f, IRIX 5.3 (??? Can't tell -- the computer ran out of swap space -- but
435 it was OK a few days ago), VMS 5.5-2 (VAX C, UCX + nonet)...  HP-UX 9.05, ...
436
437 Some corrections to comments in HP targets from PeterE.  makefile, 14 Jan 2002.
438
439 Corrections to prototypes for set{rem,lcl}charset() (VOID, not void) from Jeff.
440 ckcxla.h, 14 Jan 2002.
441
442 Builds, cont'd...  SINIX 5.42, Red Hat Linux 5.2 on i386, SuSE 7.0 on S/390, 
443 Red Hat 7.1 on IA64, QNX 4.25, HP-UX 5.21/WinTCP, ..., 
444
445 Dell Coleman <dell@aleph.tum.com> noticed that in AIX, the COPY command always
446 says "Source and destination are the same file" when the destination file
447 doesn't exist.  This is because in AIX, realpath() fails with ENOENT (errno
448 2).  The zfnqfp() code already accounts for this, but evidently not well
449 enough.  So I did what I should have done long ago.  zfnqfp() was originally
450 accomplished with do-it-yourself code.  Later I added support for realpath(),
451 and partitioned the routine into mutually exclusive compile-time sections:
452 #ifdef CKREALPATH realpath()... #else do-it-yourself... #endif.  But if
453 realpath() failed, there was no recourse to the do-it-yourself code.  Today I
454 replaced the #else with the #endif, so the do-it-yourself part is always
455 included and is executed if the realpath() call fails.  Built and tested on
456 AIX 4.3.3 and Solaris 2.5.1, as well as on Linux with and without the
457 realpath() code included.  zfnqfp(): ckufio.c, 16 Jan 2002.
458
459 Separated K95 and C-Kermit test version numbers, so C-Kermit can be RC.02
460 while K95 is Beta.01.  ckcmai.c, 16 Jan 2002.
461
462 Inhibited 0-length writes by conol() and conoll(), since they cause big
463 trouble with the AIX 4.3.3 pty driver, e.g. when you have an SSH connection
464 into AIX and run C-Kermit there.  ckutio.c, 16 Jan 2002.
465
466 Suppressed "Switching LOCUS..." messages from FTP client when it was invoked
467 from the command line.  ckcfns.c, 17 Jan 2002.
468
469 Dave Sneddon noticed that FOPEN /APPEND gets "?Write access denied" in VMS
470 if the file exists.  This is apparently because VMS zchko() does the wrong
471 thing.  Commenting out the call zchko() in the VMS case gets past this but
472 then the appended part of the file has different attributes than the orignal
473 part, e.g.:
474
475   abc  <- original line (horizontal, normal)
476   d    <- appended line (vertical)
477   e
478   f
479
480 VMS fopen() takes an optional 4th argument: a series of RMS keyword=value
481 pairs.  Kermit doesn't give any.  Experimentation shows that appending to
482 a Stream_LF works fine.  That'll be a restriction for now, until somebody
483 sends in code to get the RMS attributes of the original file and feed them
484 to fopen().  Also need code to fix VMS zhcko() to say whether it's OK to
485 append to a file.  ckuus7.c, 17 Jan 2002.
486
487 Somebody suggested I could get a working Kermit for Neutrino 2+ by doing the
488 QNX6 build on Neutrino itself.  I verified that this can't be done -- at least
489 not by me -- since Netutrino 2+ doesn't have a compiler, and we already know
490 the version cross-built for it on QNX4 doesn't work.  17 Jan 2002.
491
492 From Jeff: SET SSH GSSAPI KEY-EXCHANGE { ON, OFF } parsing, SHOW SSH.
493 ckuus3.c, 18 Jan 2002.
494
495 PeterE suggested that SET ESCAPE allow 8-bit escape characters because of the
496 difficulty in entering Ctrl-\ on European keyboards and the hardship (e.g. to
497 EMACS and VI users) of sacrificing another C0 control character.  Like
498 everything these days, this turns out to be rather a bigger deal than it would
499 seem.  The SET ESCAPE parser calls setcc(), which accepts control characters
500 in various formats (literal, ^X notation, or numbers), and gives an error
501 return if the value is not 0-31 or 127.  This is changed easily enough to also
502 allow numbers between 128 and 255.  But who else calls setcc()?  The commands
503 for setting Kermit packet start and end characters.  No big deal, this gives
504 people a bit more flexibility in case they need it, but it won't be
505 documented.  setcc(): ckuus7.c, 18 Jan 2002.
506
507 Since code to display the escape character is scattered all over the place,
508 and some of it indexes into an array based on the character value (which would
509 now dump core if the escape character was > 128), I put the code in one place,
510 a new shoesc() routine in ckuusx.c (which needs to be outside #ifndef NOICP,
511 since the CONNECT modules use it even in command-line only builds).  Also
512 discovered that this code was indexing into the nm[] array with tt_escape to
513 get "enabled" or "disabled", which is no longer appropriate, so fixed this
514 too.  ckuusr.h, ckuus[5x].c, 18 Jan 2002.
515
516 Made SHOW ESCAPE, SHOW TERM, and the various CONNECT modules call shoesc(),
517 and updated HELP SET ESC.  ckuus[25].c, ckucns.c, ck[cuvd9]con.c, 18 Jan 2002.
518
519 After all that, it occurred to me that this is a really bad idea for K95,
520 with all the confusion about Console code pages, OEM code pages, Windows
521 code pages, and Unicode.  But I tried "echo \161" at the K95 prompt and got
522 the expected 8-bit character in both the Console version and the GUI, so
523 maybe it's OK after all.
524
525 Removed the automatic IKSD login code from setlin() since it complicates
526 interactive anonymous login.  ckuus7.c, 20 Jan 2002.
527
528 An #ifdef clause from Matthew Clarke to avoid "redeclaration of free" error
529 when building a curses version of C-Kermit for AIX 2.2.1 on RT PC.  ckuusx.c,
530 22 Jan 2002.
531
532 Took care of one detail I omitted when adding the 8-bit escape character:
533 not stripping the 8th bit before comparing the keyboard char with the escape
534 char.  ck[uv]con.c, ckucns.c, 24 Jan 2002.
535
536 Started to go through Jeff's changes of the last week but he had run trim -t
537 on them, which untabifies, so the diffs were huge.  Retabifying Jeff's files
538 only makes matters worse.  So instead of comparing each old and new source
539 file in EMACS windows with M-X Compare-Windows like I usually do (which can't
540 be told to ignore whitespace), I had to work from the diff -c -b listings.
541 In ascending order of size of diffs:
542
543 ckcker.h: Add I_AM_SSHSUB definition.
544 ckuusr.h: XXLINK and VN_PERSONAL, etc, definitions.
545 ckuusy.c: Support for "I Am SSHSUB" invocation.
546 ckuus5.c: Support for new K95 directory structure.
547 ckcmai.c: Init endianness earlier (K95 TYPE was broken), "I Am SSHSUB" support.
548 ckuus7.c: Security #ifdefs, SSH OPEN /PASSWORD, SSHSUB support
549 ckcftp.c: <-- SAVE TIL LAST
550 ckuus6.c: Add LINK command for K95 on NT.
551 ckuus4.c: Support for new K95 directory structure; SSHSUB support
552 ckuus3.c: Support for new K95 directory structure; some SSH changes
553 ckuus2.c: Changes to SSH related help text, add HELP LINK text
554 ckuusr.c: LINK command, SSH OPEN /PASSWORD: /SUBSYSTEM: switches,
555   Pattern-management fixes.
556 ckctel.c, ck_ssl.c, ckuath.c, ckcnet.c:
557  Took Jeff's without looking.
558 ckuusx.c, ckucns.c, ckucon.c, ckwart.c:
559   My changes from weeks ago that were never picked up.
560
561 Built OK on Solaris with gcc and on SunOS with (K&R non-ANSI) cc.
562 31 Jan 2002.
563
564 Meanwhile, Jeff had made various changes in response to Jaya Natarajan at IBM,
565 whose basic complaint was that numerous failure conditions were not being
566 detected if the fullscreen file-transfer display was active.  Jeff found that
567 this was because big blocks of code were skipped in that case and changed the
568 code not to do that, which fixed the reported problems.  But later Jaya said
569 that "ftp mget file1 file2" acted like "ftp mget *", so it seemed that Jeff's
570 fixes broke file selection.  After taking Jeff's fixes for ckcftp.c, however,
571 I still could not reproduce the problem.  ckcftp.c, 31 Jan 2002.  <-- Later,
572 it turned out the problem was with IBM's custom FTP server.
573
574 Fixed updates that I missed yesterday in ckcftp.c, ckuusr.c.  Moved misplaced
575 #ifdef in ckuusy.c breaking nonet builds.  Added #ifdefs to sysinit() for
576 nonet builds in ckutio.c.  Ran through build-in-many-configurations script
577 in Linux, all builds OK.  1 Feb 2002.
578
579 Moved shoesc() definition outside of NOXFER to fix NOXFER builds.
580 ckuusx.c, 1 Feb 2002.
581
582 Added MYCUSTOM definition alongside KERMRC and changed KERMCL to be the
583 same as CKMAXPATH, instead of some random hardwired number.  ckuusr.h,
584 1 Feb 2002.
585
586 Changed ckcdeb.h to define DIRSEP and ISDIRSEP(), and put #ifndef
587 [IS]DIRSEP..#endif around all [IS]DIRSEP definitions in ck[udso]fio.c, so we
588 can finally put away the many repeated #ifdef chains when we get around to it.
589 1 Feb 2002.
590
591 Make VMS zkermini() return 1 on success, 0 on failure, rather than 0 always.
592 ckvfio.c, 1 Feb 2002.
593
594 Added code to doinit(), just before it goes to execute the init file.  If the
595 init file name we are about to open is empty or fails zchki(), substitute the
596 customization filename.  For now this code is in #ifdef USE_CUSTOM..#endif,
597 which is not defined by default.  It does the trick in Unix and VMS.  Also
598 included code from Jeff for K95, but this needs verification and testing.
599 Also used DIRSEP and ISDIRSEP() throughout doinit() instead of the long #ifdef
600 chains.  ckuus5.c, 1 Feb 2002.
601
602 Moved shoesc() prototype from ckuusr.h to ckcker.h so modules that need it
603 don't have to include ckuusr.h just for this one thing (example: ckvcon.c).
604 1 Feb 2002.
605
606 Defined USE_CUSTOM by default, except if NOCUSTOM is defined.  ckuusr.h,
607 1 Feb 2002.
608
609 Fixed kermit-sshsub code to really enter server mode, and to print
610 "KERMIT READY TO SERVE..." so scripts can wait for it.  Also bumped the
611 C-Kermit test ID to RC.03 and the K95 one to Beta.02.  ckcpro.w, ckcmai.c,
612 2 Feb 2002.
613
614 I was thinking about adding SET COMMAND BUFFER-SIZE to let people allocate
615 as big a buffer as they wanted at runtime, mainly for defining huge macros.
616 Moved the SCMD_blah definitions from ckuusr.h to ckuus3.c, since they aren't
617 used anywhere else.  But stopped there since the rest turns out to be a rather
618 big deal.  ckuusr.h, ckuus3.c, 2 Feb 2002.
619
620 From Jeff, 3 Feb 2002:
621  . Fix an out-of-order modem name in the SET MODEM TYPE table: ckudia.c.
622  . Use SET LOGIN USER and PASSWORD if present. ckcftp.c.
623
624 Cody Gould noticed that array declarations had become case sensitive, and
625 upper case didn't work.  Diagnosis: misplaced case conversion in xarray().
626 Fixed in ckuus5.c, 4 Feb 2002.
627
628 SHOW VAR dumps core on \v(sexpression) or \v(svalue) -- failure to check for
629 NULL pointer.  I wonder why this didn't happen before (answer: because I was
630 doing it on SunOS; now I'm doing it on Solaris).  ckuus4.c, 6 Feb 2002.
631
632 I've had several requests for "show var name name name...".  I added this to
633 doshow(), such that SHOW VAR works exactly as it did before (if you don't give
634 it an arg, it lists all variables; if you give it an arg, it appends "*" to it
635 and lists all matching variables) but now you can also give more than one arg
636 and it works the same way with each one as it did before if you gave it a
637 single item (i.e., "*" is appended, so "show var os cmd" shows all variables
638 whose names begin with "os" or "cmd".  You can also freely use pattern
639 notation, including anchors.  Hmmm, no, actually it's different in that now
640 each includes an implied * before AND after, so "show var version" shows all
641 variables whose name contain "version" rather than all variables whose names
642 start with it.  ckuus5.c, 6 Feb 2002.
643
644 Cody Gould reported that WRITE FILE blah blah \fexec(anything) ... got a
645 spurious "File or Log not open" error.  This turns out to be a rather
646 pervasive problem -- whenever you use \fexec() it calls the parser recursively
647 and this can run roughshod over global variables, such as our innocent little
648 x, y, and s.  The fix in this case was to put x and y on the stack.  The same
649 thing probably needs doing in about 10,000 other places.  Too bad C isn't
650 Algol.  ckuusr.c, 6 Feb 2002.
651
652 Minor fix to SHO VAR -- the "^" anchor wasn't working (e.g. "show var ^os").
653 ckuus5.c, 6 Feb 2002.
654
655 Fixes from Jeff for FTP file-transfer character-set translation in K95 and
656 in WIKSD, plus updated K95 SSH help text.  ckcftp.c, ckcfns.c, ckuus2.c,
657 7 Feb 2002.
658
659 Server has its date set in the past.  Client says "remote dir".  Server sends
660 A packet containing old date.  If client has FILE COLLISION UPDATE, it
661 rejects the directory listing.  Changed gattr() to only reject real files
662 (introduced by F packet), not X-packet material like directory listings.
663 ckcfn3.c, 7 Feb 2002.
664
665 Up-down arrow keys for command recall.  People have been asking for it for
666 years but now it's actually important because of PDAs that don't have Ctrl
667 keys.  Would have been trivial except that we use getchar() rather than
668 coninc() for reading from the keyboard in Unix so conchk() doesn't help.  In
669 fact there are lots of other places where conchk() is used this way and works
670 only by accident.  The only reason we never noticed a problem before is that
671 characters don't usually arrive from the keyboard that fast.  But when an
672 arrow key sends "ESC [ A" all once, the stdin buffer gets some extra stuff in
673 it, which getchar() will return next time, but which coninc()/conchk() will
674 never see.  So I added a new cmdconchk() routine which, if the keyboard is
675 being read with getchar() rather than coninc(), looks at the stdin buffer.
676 Unfortunately, however, there is no API for this, nor is there any standard
677 way to access the stdin buffer directly.  So first I did it for Solaris.  Then
678 to make it portable requires a survey of the headers for every platform.  I
679 found four major variations:
680
681   stdin->_r:
682     {Free,Open,Net}BSD, BSDI
683   stdin->_cnt:
684     SunOS, Solaris, HP-UX 5-6, AIX, VMS, SINIX, IRIX 5.3-6.5, DGUX
685     4.2BSD, 4.3BSD, OSF/1..Tru64, QNX4, Unixware 1.0-2.1.0
686   stdin->__cnt:
687     HP-UX 7-11, SCO: OSR5.0.6a, Unixware 2.1.3-7.x, OU8, UNIX 3.2v4.x
688   Subtract read from end pointer (_IO_file_flags defined):
689     Linux (tested on RH 5.2 thru 7.1)
690
691 The Linux method is new and different to account for multibyte characters.
692 All the others assume character == byte.
693
694 For docs: ANSI only, 7-bit only; both application and cursor modes are
695 accepted.  Only up and down arrow are handled; left and right arrows cause
696 a beep.  ckucmd.c, 8 Feb 2002.
697
698 Build-all: Discovered that changing CTTNAM from TT: to SYS$INPUT: in VMS
699 (which was done on 3 Jan 2002 to work around problems starting Kermit in
700 batch, spawn'd, etc) breaks Kermit on VMS 5.5/VAX (concb() fails with "lacks
701 sufficient privilege"; if you enable all privs Kermit starts but then spews
702 out a constant stream of BEL characters).  If you put dftty back to "TT:",
703 everything is fine -- I have no idea why, so I used #ifdef VMSV70 to decide,
704 which is totally crude.  Next I had to find where the boundary really is: VAX
705 vs Alpha?  VAX C vs DEC C?  Or between VMS releases?  Built on:
706  . VMS 6.2 Alpha (DEC C) - OK with TT:
707  . VMS 6.2 Alpha (DEC C) - OK with SYS$INPUT: <-- keep this one
708  . VMS 7.1 VAX   (DEC C)
709 So the final condition is #ifdef VMSV60.  ckvker.com, ckvtio.c, ckuus5.c.
710
711 QNX 6 needed some attention too:
712  . Whoever did the makefile target made the default port "/dev/ser1".
713  . Arrow keys...
714 But I gave up on getting arrow keys to work -- it should be just like *BSD,
715 but for some reason gcc complains that struct FILE has no _r member, even
716 though it does (getchar uses it).
717
718 Checked stdio.h on Mac OS X and it looks like the *BSDs.
719
720 --- C-Kermit 8.0.201 ---
721
722 Removed -g from solaris2xg+krb5+krb4+openssl+shadow makefile target -- it
723 was producing a 15MB binary!  makefile, 14 Feb 2002.
724
725 Fixed a couple thinkos in "make install": $(DESTDIR) should not have been
726 included in the tests for whether INFODIR or SRCDIR were desired.  makefile,
727 14 Feb 2002.
728
729 (tarball refreshed 16 Feb 2002)
730
731 --- C-Kermit 8.0.201 ---
732
733 From Jeff: Better seeding of \frandom(): ckcmai.c, ckuus4.c, 18 Feb 2002.
734
735 From Jeff: Make arrow keys work in WIKSD, but now also unconditionally
736 compile arrow-key code in all versions.  ckucmd.c, 18 Feb 2002.
737
738 From Jeff: ckuath.c, ck_ssl.c, ckcnet.c (didn't look).  18 Feb 2002.
739
740 Added ORIENTATION command, that lists the various important directories, and
741 \flongpathname() and \fshortpathname(), which do path format conversions in
742 Windows, and are just synonynyms for \fpathname() elsewhere.  The new functions
743 need building and testing in Windows.  ckuusr.h, ckuus[r24].c, 18 Feb 2002.
744
745 Changed PWD for Windows only to show both short and long paths (but only if
746 they are different; otherwise it behaves as before).  ckuusr.c, 18 Feb 2002.
747
748 Changed default Windows prompt to show long pathname. ckuus5.c, 18 Feb 2002.
749
750 Updated INTRO command to mention FTP, HTTP, and SSH.  ckuus2.c, 18 Feb 2002.
751
752 From Jeff: fixes for typos in GetLongPathName() code: ckuus[r4].c, 22 Feb 2002.
753
754 From Jeff: net/auth updates: ckcnet.c, ckuath.c, 22 Feb 2002.
755
756 Added -DUSE_FILE__CNT to NCR MPRAS targets, George Gilmer: makefile,
757 24 Feb 2002.
758
759 From Jeff: Add support for GetLongPathName() in Win95 and NT: ckcdeb.h,
760 ckuus[r4].c, 24 Feb 2002.
761
762 From Jeff: More fixes for FTP SIGINT, plus fix [M]PUT /MOVE.  ckcftp.c,
763 24 Feb 2002.
764
765 Fixed an unguarded reference to inserver, gtword(): ckucmd.c, 24 Feb 2002.
766
767 Adapted RETRIEVE for use with FTP connections; this one was missed when
768 adapting GET, REGET, MOVE, etc.  ckuus6.c, ckcftp.c, 24 Feb 2002.
769
770 Added special COPYRIGHT command text for the free version of WIKSD.
771 ckcmai.c, ckuusr.c, 24 Feb 2002.
772
773 C-Kermit, when in CONNECT mode and given the <Esc-Char>U sequence, would
774 unconditionally close the connection if it was a network connection.  This
775 is bad when Telnetting to a modem server.  I added to code to prevent this
776 in the RFC2117 TELNET COMPORT case but I'm not sure how to exend this to the
777 general case (or whether it would be a good idea).  ckucns.c, 24 Feb 2002.
778
779 During file transfer, chktimo() calls ttgspd() for every packet, which clearly
780 doesn't make sense on network connections, especially since on Telnet COMPORT
781 connections it results in a network speed query for every packet.  Rearranged
782 the code so this happens only on true serial-port connections.  ckcfn2.c,
783 24 Feb 2002.
784
785 From Jeff: Fix reversed ANSI/non-ANSI function declarations clauses in
786 ckcftp.c, 26 Feb 2002.
787
788 Changed Unix CONNECT module to call kstart() only when it has a chance of
789 doing anything (i.e. a Kermit packet has been partially detected, or the
790 packet start character just came in), rather than unconditionally on every
791 incoming character.  ckucns.c, 8 Mar 2002.
792
793 FTP PUT /SERVER-RENAME:, /RENAME-TO:, /MOVE-TO: were sticky.  Patch: In
794 ckcftp.c, near the top of doftpput(), add the lines marked with "+":
795
796     makestr(&filefile,NULL);            /* No filename list file yet. */
797 +   makestr(&srv_renam,NULL);           /* Clear /SERVER-RENAME: */
798 +   makestr(&snd_rename,NULL);          /*  PUT /RENAME */
799 +   makestr(&snd_move,NULL);            /*  PUT /MOVE */
800     putpath[0] = NUL;                   /* Initialize for syncdir(). */
801
802 ckcftp.c, 26 Mar 2002.
803
804 \fday() and \fnday() were broken for dates prior to 17 Nov 1858.  Fixed in
805 fneval(): ckuus4.c, 28 Mar 2002.
806
807 From Jeff:
808  . New calling convenion for demoscrn(): ckucmd.c, ckuusx.c
809  . Fix for host-initiated 80/132 col screen mode change.  ckuus7.c.
810  . New \v(desktop) variable: K95 user desktop directory, ckuusr.h, ckuus4.c
811  . New \v(rfc2717_signature) var: Telnet Com Port, ckuusr.h, ckuus4.c
812  . Uncomment "not-reached" return(-2) in xgnbyte(): ckcfns.c
813  . New dates: ckcmai.c.
814  . Telnet Com Port fixes: ckutio.c
815  . SET PRINTER fixes for K95: ckuus3.c
816  . Session limit adjustments: ckuus3.c
817  . New directory layout for K95 (TAKE, ORIENT): ckuusr.c
818  . Fixes for Telnet Com Port, recycling SSH connections: ckuusr.c
819
820 From me, not picked up by Jeff previously:
821  . kstart() speedup: ckucns.c.
822
823 1 Apr 2002.
824
825 ---K95 1.1.21---
826
827 From Jeff, 4 Apr 2002:
828  . More fixes for Telnet Com Port: ckuus4.c, ckudia.c, ckutio.c, ckcnet.c:
829    . network connections will check for carrier detect if SET
830      CARRIER-WATCH is ON.   This could have a potential conflict if
831      the option is negotiated and the carrier is off, but the site
832      requires login.
833    . modem hangup message generated since the dial module did not
834      believe that network modems could be reset with a DTR drop.
835  . Version number adjustments: 8.0.203, 1.1.99: ckcmai.c.
836  . Security: ck_ssl.[ch], ckuath.c.
837
838 ---C-Kermit 8.0.203---
839
840 From Jeff, 6 Apr 2002:
841  . Fix typo in HELP REMOTE HOST: ckuus2.c.
842  . More Telnet Com Port fixes: ckctel.c, ckcnet.c, ckudia.c, ckutio.c
843
844 From Jeff, 9 Apr 2002:
845  . Fix autodownload problem: ckcfn[2s].c.
846
847 Chiaki Ishikawa reported that in Linux (two different kinds), if you choose
848 hardware parity, CONNECT, then escape back, the speed can change.  I tracked
849 this down to the following statement in ttvt():
850
851         tttvt.c_cflag &= ~(IGNPAR);     /* Don't discard incoming bytes */
852
853 Somehow execution of this statement corrupted the speed words of the termios
854 struct, which are entirely separate words that are nowhere near the c_cflag
855 member.  Anyway, the statement is wrong; it should be:
856
857         tttvt.c_cflag |= IGNPAR;        /* Don't discard incoming bytes */
858
859 Fixing it cured the problem; don't ask me why.  ckutio.c, 9 Apr 2002.
860
861 From Jeff:
862   fixes the problem reported by robi@hastdeer.com.au.  The request to
863   enter server mode was received while we were entering server mode.
864   But the server was waiting for the response to REQ_STOP sent to the
865   client.  Therefore, we weren't quite in server mode yet and the
866   request to enter server mode was rejected.  A check for the sstate
867   value solves the problem.  ckctel.c, 10 Apr 2002.
868
869 Chiaki Ishikawa (CI) discovered the real cause for the speed changing problem.
870 I was setting the IGNPAR bit in the wrong flag word: it should have been
871 c_iflag instead of c_oflag, silly me.  Fixed in ttvt() and ttpkt(): ckutio.c.
872 I also did a thorough census of all the termio[s] flags to ensure each was
873 applied to the right flag word -- they were, IGNPAR in the HWPARITY case was
874 the only mistake.  CI also discovered that the speed words in the Linux
875 termios struct are not used at all -- the speeds are encoded in an
876 undocumented field of c_cflag, which explains the problem.  10 Apr 2002.
877
878 Any use of \{nnn} character notation in a macro definition, loop, or other
879 braced block caused an "unbalanced braces" parse error.  The backslash in this
880 case is not quoting the open brace; it's introducing a balanced braced
881 quantity.  Special-cased in getncm(): ckuus5.c, 12 Apr 2002.
882
883 The semantics of "if defined \v(xxx)" were changed in 8.0 to avoid obnoxious
884 error messages when xxx was not a built-in variable (see notes of 19 Nov
885 2000), such that "if defined \v(xxx)" would always succeed if there were such
886 a variable, even if it had no value.  The behavior that is documented in the
887 book (and also in ckermit70.html) and that we had in versions 6 and 7, was
888 that IF DEFINED \v(xxx) would fail if \v(xxx) was defined but had an empty
889 value OR if it was not defined, and would succeed only if it was defined and
890 had a value.  Fixed in boolexp(): ckuus6.c, 12 Apr 2002.
891
892 What about \function()s?  IF DEF \fblah() presently succeeds if the function
893 exists; you don't even have to give arguments.  I think this behavior is more
894 useful than if I required valid arguments and then evaluated the function --
895 you can do that anyway with 'if not eq "\fxxx(a,b)" "" ...'  Of course this
896 argument applies to "if def \v(xxx)" too, except that the current behavior is
897 consistent with the 7.0 behavior, so there is no need for a change.
898
899 Kent Martin discovered that if a macro contains a LOCAL statement for a
900 variable whose name is the same as, or a unique left substring of, the macro's
901 name, then undefining the local variable makes the macro disappear:
902
903   define DateDiff {
904     echo {DateDiff(\%1) executing...}
905   }
906   define Kent {
907     do DateDiff {2}
908     local date
909     assign date {}
910     do DateDiff {3}  <-- This fails (A)
911   }
912   do DateDiff {1}
913   do Kent
914   do DateDiff {4}    <-- So does this (B)
915
916 The first part of the problem is that "assign date {}" called delmac with
917 exact=0, so delmac evidently deleted first macro whose name started with
918 "date" -- and since the only one was DateDiff, that's the one that was
919 deleted.  Fixing this (change "delmac(vnp,0)" to "delmac(vnp,1)" in dodef())
920 got us past A.  The second part was making the same fix to the delmac()
921 call in popclvl().  ckuus[56].c, 13 Apr 2002.
922
923 The INPUT command ignored the parity setting, thus SET PARITY EVEN,
924 INPUT 10 "login:" didn't work.  Fixed in doinput(): ckuus4.c.  Also fixed a
925 bogus #ifdef COMMENT section that messed up the block structure of the module
926 and therefore EMACS's indenting.  18 Apr 2002.
927
928 Added sco32v500net+ssl and Added sco32v505net+ssl targets, from Scott Rochford
929 at Dell (not sure yet if they work).  Makefile, 19 Apr 2002.
930
931 From Jeff, 22 Apr 2002:
932  . Added "darkgray" color and made "dgray" an invisible synonym: ckuus3.c.
933  . Fix carrier sense on Telnet Com Port immediately after dial: ckudia.c.
934  . Change krb5_des_blah() arg list: ckutio.c.
935  . Fix ttgmdm() for Telnet Com Port: ckutio.c.
936  . Fix tthang() return code: ckutio.c.
937  . Add aix43gcc+openssl target: makefile.
938
939 From Jeff, 25 Apr 2002:
940  . Fix SET GUI keyword table: ckuus[37].c.
941  . A final fix to Telnet Com Port: ckctel.c, ckcnet.c.
942
943 From Jeff, 26 Apr 2002:
944  . Another final fix to Telnet Com Port: ckctel.c, ckudia.c.
945
946 From Jeff, 27 Apr 2002:
947  . separate the wait mechanism for TELNET SB COMPORT synchronous messages
948    from the asynchronous TELNET SB COMPORT MODEMSTATUS messages: ckctel.[ch]
949  . fix debug messages in Certificate verify functions: ck_ssl.c, ckcftp.c.a
950
951 Frank, 27 Apr 2002:
952  . Fixed VMS zgetfs() to fail when file doesn't exist: ckvfio.c.
953  . Fixed UNIX zgetfs() to check for null or empty arg: ckufio.c.
954  . Added #include <time.h> for time() call: ckcmai.c.
955  . Add casts to args in tn_wait() calls: ckctel.c.
956
957 SINIX-P 5.42 (Pyramid architecture) makefile target from Igor Sobrado.
958 makefile (no source-code changes), 1 May 2002.
959
960 From Jeff, 5 May 2002,
961  . Fix some "unknown host" messages: ckcftp.c.
962  . Add more casts to tnc_wait() calls: ckudia.c.
963  . Improvements to SHOW SSH, SHOW GUI: ckuus3.c.
964  . Fixes to SET COMMAND { WIDTH, HEIGHT }: ckuus3.c.
965  . Updates to ck_ssl.[ch], ckctel.c, ckcnet.c.
966
967 Fixed the erroneous setting of ssh_cas during switch parsing rather than
968 after cmcfm() in setlin(): ckuus7.c, 5 May 2002.
969
970 setlin() decomposition (2300 lines), Part One: 
971
972  . Copied a big chunk from the end of setlin(), beginning with net directory
973    lookup, but only the network-specific and common parts, to a new routine,
974    cx_net(), 900 lines.
975
976  . Extracted many repetitious lines of error-message code from cx_net()
977    to a new routine, cx_fail().  Error messages are stored in slmsg, and
978    also printed but only if we were not called from a GUI dialog (and
979    QUIET wasn't set, etc etc).  Any adjutments in this policy can now be
980    made in one place.
981
982  . I put a call to cx_net() in setlin() just before all the code it replaced.
983    It works for TELNET and SET HOST /TELNET.
984
985  . Built with mkwatsol-k5k4ssl; after a couple fixes it builds OK and makes
986    Kerberized connections OK.
987
988  . Copied the serial-port and common parts of the setlin() post-cmcfm()
989    code to another new routine, cx_serial(), about 275 lines.  Fixed
990    messages not to come out when called from GUI dialog, etc.  Inserted
991    a call to cx_serial() at the appropriate spot in setlin().  Tested
992    serial connections on watsun with "set line /dev/ttyh6", works OK.
993
994  . Removed all the code from setlin() that was copied to cx_*().  This slims
995    setlin() down to 1120 lines.  Tested regular Telnet, Kerberized Telnet, and
996    serial connections again, all OK.  The Unix version of the SSH command is
997    OK too.
998
999 setlin() deconstruction, Part Two:
1000
1001 Now that we have the common network and serial connection pieces moved out of
1002 setlin(), we still need to move out the little code snippets for each network
1003 type that take place between command confirmation and the common code we just
1004 replaced.   As far as I can tell, this needs doing only for SSH.  The code
1005 labeled "Stash everything" copied to cx_ssh() but I didn't remove the original
1006 code since I can't test this.  I think I'm done -- maybe I'm overlooking
1007 something but I don't know what...  First we need to test the heck out of it
1008 in all command-line versions (K95 and C-Kermit).  Then to use this from
1009 the GUI, see the calling sequences for cx_serial(), cx_net(), and cx_ssh():
1010
1011  . For serial or TAPI connections, the GUI should call cx_serial().
1012  . For SSH connections, it should call cx_ssh() and then cx_net().
1013  . For all other network connections, just calls cx_net().
1014
1015 ckuus7.c, Cinco de Mayo de 2002.
1016
1017 New ckuus7.c from Jeff, 8 May 2002.  Merge cx_ssh() into cx_net().  Also: I
1018 had made line[] an automatic variable, since the global line[] buffer is used
1019 by almost every parsing routine in C-Kermit to hold string fields between
1020 parsing and execution but Jeff says he found that some code somewhere depended
1021 on line[] containing the hostname after setlin() was finished.
1022
1023 From Jeff, 10 May 2002:
1024  . Fix SET SSH STRICT-HOST-CHECKING parse: ckuus3.c.
1025  . Add prototypes for cx_net() and cx_serial(): ckuusr.h.
1026  . Add ANSI versions of cx_net() and cx_serial() declarations and supply a
1027    missing parameter in the cx_serial() invocation, change SSHCMD cx_net()
1028    invocation to new form.
1029
1030 From Jeff, 16 May 2002:
1031  . ANSI strictness changes: ck_ssl.[ch]
1032  . New DIALER command: ckuusr.[ch]
1033  . Correction to how -0 turns off autodownload: ckuusy.c
1034  . Prototypes for GUI menu action functions: ckuusr.h.
1035  . Replace setting of GUI-action variables by function calls: ckuus[3457x].c
1036  . Fix FTP -z switch parsing: ckcftp.c.
1037  . Fix SET HOST testing of setlin() return code: ckuus3.c
1038
1039 From Jeff, 18 May 2002:
1040  . Allow half-size GUI fonts: ckuus[35y].c.
1041
1042 Fixed setguifont() to parse fractional font sizes and round to nearest half
1043 point.  ckuus3.c, 18 May 2002.
1044
1045 For GUI, wrote front ends for getyesno(), readtext(), and readpass():
1046
1047  . uq_ok() prints text and gets Yes/No, OK/Cancel, or just OK response.
1048    This replaces getyesno() and can also be used for alert or help boxes.
1049
1050  . uq_txt() prints text and gets a single text response.  Replaces
1051    readtext() and readpass().
1052
1053  . uq_mtxt() is like uq_txt() but allows multiple text fields.  Replaces
1054    any combination of readtext() and readpass().
1055
1056 Obviously the #ifdef KUI portions of the uq_blah() routines need filling in.
1057 ckuusr.h, ckuus3.c, 18 May 2002.
1058
1059 Converted selected getyesno() calls to uq_ok(): ckcftp.c, ckuus3.c, ckuus6.c.
1060 Some were not converted because it was inappropriate, e.g. DELETE /ASK; others
1061 because they're in Jeff's code.  The most interesting conversions are in the
1062 DIAL command when DIAL CONFIRMATION is ON.  Here there is a dialog for each
1063 phone number asking if it's OK (ug_ok()) and if not, asking for a replacement
1064 (uq_txt()); seems to work fine in C-Kermit.  All the candidates for uq_mtxt()
1065 are in Jeff's code.  18 May 2002.
1066
1067 From Jeff: Convert remaining getyesno/readtext/readpass calls to uq_blah()
1068 so they can be GUI dialogs.  ckuus[37].c, ckcftp.c, ckuath.c, ck_ssl.c,
1069 21 May 2002.
1070
1071 Added KCD command = CD to symbolic directory name (EXEDIR, COMMON, APPDATA,
1072 TMPDIR, etc etc).  ckuusr.h, ckuus[r25].c, 21 May 2002.
1073
1074 From Jeff, 28 May 2002:
1075  . --title: commandline option: ckuusr.h, ckuusy.c
1076  . Fix some #includes, move some declarations: ckcfns.c
1077  . Change K95 version from Dev.00 to Beta.01
1078  . ASK[Q] /GUI: ckuus6.c.
1079  . Various GUI screen updates and #ifdefs: ckuus7.c
1080  . Add missing cx_net() calls to new setlin() for file SuperLAT..: ckuus7.c
1081  . Updated uq_*() routines for GUI dialogs: ckuus3.c.
1082
1083 Added GETOK switches (/TIMEOUT for all; /POPUP and /GUI for K95G):
1084 ckuus6.c, 29 May 2002.
1085
1086 Added HELP SET GUI text.  ckuus2.c, 29 May 2002.
1087
1088 From Jeff:
1089  . Another K95-specific #include for ckcfns.c.
1090  . More items for K95G Actions menu.
1091  . Change K95G Locus switching to call setlocus() rather than set variable.
1092  . Ditto for several other variables now settable from Actions menu.
1093  . Fix SET HOST /NET:SSH status code so IF SUCCESS works.
1094  . Fix SHOW SSH port-forwarding.
1095 ckcfns.c, ckuus[r367].c, ckcftp.c, ckcmai.c, 30 May 2002.
1096
1097 Changed SET LOCUS to have a new value, ASK, corresponding to new autolocus
1098 value of 2, K95G only.  Changed setlocus() to not do anything if the new and
1099 old loci are the same, otherwise to invoke a GUI dialog in K95G if autolocus
1100 is 2, and also to handle any text messages.  Changed SHOW COMMAND to show ASK
1101 value for SET LOCUS.  Rewrote HELP SET LOCUS.  ckuusr.[ch], ckuus[23].c,
1102 ckcftp.c, 30 May 2002.
1103
1104 Add a missing space to Locus popup, and fix Jeff's version of the code to
1105 compile in C-Kermit.  ckuusr.c, 31 May 2002.
1106
1107 From Jeff, for K95 GUI, 6 June 2002:
1108  . Force some GUI popups to be in foreground: ckuus3.c.
1109  . Fix SHOW TERM font display: ckuus5.c.
1110  . Update K95 version numbers and date (4 June 2002): ckcmai.c.
1111  . Add note about encrypted private keys vs scripts to HELP SET AUTH: ckuus2.c.
1112  . Fix SET HOST for DECnet: ckuus7.c.
1113
1114 --- K95 2.0 ---
1115
1116 From Jeff, 7 June 2002:
1117  . Fix some #ifdefs for Unix builds (locus, dial, etc): ckuus7.c
1118  . Add gui_resize_scale_font() prototype: ckuus3.c
1119  . Add some missing SET GUI commands: ckuus3.c
1120  . Update version numbers: ckcmai.c
1121
1122 --- K95 2.0.1 ---
1123
1124 From Jeff, 11 June 2002:
1125  . Conditionalize Locus-switching popup text for GUI/Console: ckuusr.c.
1126  . Fix the SRP_installed_as_server() function.  The new API returns TRUE even
1127    if the SRP config and password files cannot be found.  Went back to the old
1128    API.  This bug affects C-Kermit 8 when built with SRP as well as 1.1.21
1129    through 2.0.1.  Since iksdnt.exe has not been shipped yet I fixed it and
1130    uploaded a new non-beta build of it.  ckuath.c.
1131
1132 From Jeff, 12 June 2002:
1133  . Fix SSH AGENT ADD: ckuusr.c.
1134  . Fix --facename: option to not fail if name unknown: ckuusy.c.
1135  . Fixes for OpenSSL 0.9.7 and OpenBSD 3.1: ck_ssl.c.
1136  . Fix SET AUTH TLS VERIFY NO to prevent a dialog but still a warning if
1137    SET AUTH TLS VERBOSE ON is set: ck_ssl.c.
1138  . Fix FTP code to verify the hostname as specified by the user and not
1139    the hostname discovered by the reverse DNS lookup.  For example,
1140      FTP OPEN kermit.columbia.edu
1141    should produce a dialog because that name is not in the certificate
1142    even though ftp.kermit.columbia.edu (the reverse DNS name) is:  ckcftp.c.
1143
1144 Add support for Solaris 9 and NetBSD 1.6.  makefile, ckuver.h, ckcdeb.h,
1145 13 Jun 2002.
1146
1147 Discovered that Solaris 9 wants to hide the members of struct FILE, and
1148 enforces this for 64-bit builds.  They offer some functions like __fbufsize()
1149 to get the info, but not the info we need for reading escape sequences (the
1150 _cnt member).  Let's hear it for political correctness.  Created new solaris9g
1151 (32-bit) and solaris9g64 (64-bit) targets.  Sorry, no arrow keys in 64-bit
1152 mode.  Also no more direct access to sys_errlist[]; must use strerror().
1153 makefile, ckucmd.c, 13 Jun 2002.
1154
1155 Added solaris9g+openssl+zlib+pam+shadow, which in turn required adding
1156 solaris2xg32+openssl+zlib+pam+shadow, needed for gcc 3.1 in which you have
1157 to specify 32-bit.  Fails for some mysterious reason in link step
1158 (can't find libssl.so.0.9.6 even though it's there).  makefile, 13 Jun 2002.
1159
1160 Solaris 8 empty socket problems again -- tthang() times out, subsequent
1161 tcsetattr() calls do horrible things.  Added a bandaid to ttclos(): don't
1162 call tcsetattr() any more if hangup timed out.  ckutio.c, 14 June 2002.
1163
1164 Gerry B reported the bandaid got us bit farther but Kermit still disappears.
1165 Added code to reassert the alarm signal handler, since it is likely that
1166 Solaris has become stricter about this since last time I looked.  (Later
1167 Gerry reported back that this did the trick -- C-Kermit now exits normally
1168 and releases the lockfile).  ttclos(): ckutio.c, 17 Jun 2002.
1169
1170 If you use Kermit to copy a file to a destination file that already exists and
1171 is longer than the source file, the destination file is not truncated.  I had
1172 mistakenly assumed that setting O_CREAT in the open() call in zcopy() would
1173 create a new copy of the file.  Fixed by also setting O_TRUNC.  ckufio.c,
1174 17 Jun 2002.
1175
1176 Updated HELP INPUT and MINPUT text to explain 0 and -1 timeout values, and
1177 HELP DIAL to explain about entering CONNECT mode automatically.  ckuus2.c,
1178 17 Jun 2002.
1179
1180 Got rid of client-side "Press the X or E key to cancel" message when giving
1181 a REMOTE command if QUIET is set or if XFER DISPLAY is NONE.  ckuus7.c,
1182 17 Jun 2002.
1183
1184 From Jeff 25 Jun 2002:
1185  . Add SUN terminal type: ckuusr.h, ckuus[57].c.
1186  . Add GUI file transfer display: ckcker.h, ckuus[47x].c.
1187  . Changes to allow C-Kermit to build with OpenSSL 0.9.7.  Current
1188    C-Kermit code is designed to compile with 0.9.6 and earlier.  To
1189    compile with 0.9.7 you must specify -DOPENSSL_097.  This avoids
1190    missing symbols in the DES library.  The functions in OpenSSL were
1191    renamed in 0.9.7 to avoid link time conflicts with Kerberos 4.
1192    ckufio.c ck_crp.c ckuath.c ck_ssl.h ck_ssl.c, makefile.
1193
1194 From Jeff 26 Jun 2002:
1195  . apparently the SSL Passphrase Callback function was not converted
1196    from readpass() to uq_txt()
1197  . FTP Authentication failure errors were not being reported to the
1198    user.  So a failure would appear to be a successful completion
1199    unless FTP DEBUG was ON.  Now the message is reported unless
1200    the QUIET flag is set.
1201 ck_ssl.c, ckcftp.c.
1202
1203 SET TRANSFER MODE MANUAL didn't work for FTP; fixed in putfile() and getfile():
1204 ckcftp.c, 1 Jul 2002.
1205
1206 Changed debug log for FTP to log "FTP SENT" and "FTP RECD" for protocol
1207 messages, just like we do for Telnet, to make it easy to grep them out of
1208 the log.  ckcftp.c, 1 Jul 2002.
1209
1210 In FTP MGET /UPDATE, equal times spuriously caused download.  doftpget() was
1211 misinterpreting chkmodtime()'s return code.  ckcftp.c, 3 Jul 2002.
1212
1213 In FTP MGET /RECOVER, recovery is skipped if the local file is newer than
1214 the remote.  This would seem to make sense, but when a download is
1215 interrupted, the partial file never gets the date of the remote file, so
1216 the partial file is always newer, and recovery never works.  Fixed in
1217 recvrequest() by commenting out the date check.  ckcftp.c, 3 Jul 2002.
1218
1219 A better way to fix the previous problem is to always set the file date from
1220 the server and then only allow /RECOVER to work when the dates are equal.
1221 But that's not possible because MDTM is not implemented universally, and it
1222 conflicts with how Kermit currently works, namely that FTP DATES are OFF by
1223 default.  Also, checking dates prevents [M]GET /RECOVER from working with
1224 files that were incompletely downloaded by some other FTP client.
1225
1226 In FTP MGET /RECOVER <wildcard> <wildcard> ..., the first file in each group
1227 is always downloaded.  Diagnosis: Kermit sends "TYPE A" prior to NLST (as it
1228 must).  Then when it sends its first SIZE command, it's still in ASCII mode,
1229 so the server sends the "ASCII size" rather than the binary size, which does
1230 not agree with the size of the local file (which was downloaded in binary
1231 mode), so recovery is always attempted even when the files are identical.  The
1232 TYPE A command is sent by initconn().  After the remote_files() call, we have
1233 to change the type back to the prevailing type before sending the first SIZE
1234 command.  Fixed in cmdlinget() and doftpget(): ckcftp.c, 3 Jul 2002.
1235
1236 In FTP MGET /EXCEPT:<pattern> used with SET XFER DISPLAY brief, files that
1237 are skipped just say ERROR instead of saying why they were skipped.  Fixed
1238 in doftpget(): ckcftp.c, 3 Jul 2002.
1239
1240 Added EXIT to top-level HELP text.  ckuus2.c, 13 Jul 2002.
1241
1242 Strip braces in REINPUT n {string}.  ckuusr.c, 13 Jul 2002.
1243
1244 Added /QUIET switch to ASK-class commands.  This means not to print any error
1245 messages when an ASK-class command times out waiting for a response.  Made
1246 sure that when a timeout occurs, the command fails.  Also made sure the
1247 c-Kermit prompt doesn't write over the ASK prompt if ASK times out.  Also
1248 fixed ASK, when it times out, not to return -9, which it did in one case,
1249 which causes a command-stack dump.  ckuus[267].c, ckucmd.c, 13 Jul 2002.
1250
1251 Fixed SET FILE INCOMPLETE help text, which said that both KEEP and AUTO were
1252 the default.  ckuus2.c, 13 Jul 2002.
1253
1254 If you SET FTP DEB ON and then turn it OFF, the MGET temp file is still kept.
1255 Fixed by getting rid of ftp_knf variable and using ftp_deb to control whether
1256 temp file is deleted (ftp_knf was being set from ftp_deb anyway, but then
1257 wasn't being reset by SET FTP DEB OFF).  ckcftp.c, 13 Jul 2002.
1258
1259 If an FTP transfer was in progress but the FTP connection drops and automatic
1260 locus switching is enabled, the locus does not change; thus (for example) a
1261 subsequent DELETE command makes Kermit send a REMOTE DELETE packet on stdout.
1262 Fixed in lostpeer(): ckcftp.c, 13 Jul 2002.
1263
1264 For docs: FTP CD with no arg might not be accepted by the server; e.g. the
1265 Kermit FTP server says "501 Invalid number of arguments".
1266
1267 The FTP module never handled SET INCOMPLETE.  Fixed in doftprecv2().  ckcftp.c,
1268 13 Jul 2002.
1269
1270 When FTP DATES is ON, we set an incoming file's date only if the file was
1271 received successfully.  Changed the code to set the file's date even if it was
1272 received only partially (assuming we can get the date from server).  ckcftp.c,
1273 13 Jul 2002.
1274
1275 Suppose we were doing FTP MGET /UPDATE from a server directory of 100,000
1276 files.  Kermit would send a SIZE command for every file unconditionally.  On
1277 some connections, e.g. to the Red Hat Rawhide server, each one could take up
1278 to 30 seconds.  That would be 3 million seconds = 34 days.  Don't send a SIZE
1279 command during the selection phase unless a /SMALLER or /LARGER selector was
1280 given.  Once the file is selected, send a SIZE command only if one hadn't been
1281 sent for that file already.  ckcftp.c, 13 Jul 2002.
1282
1283 Made [M]GET and [M]PUT /UPDATE switch imply FTP DATES ON, since they didn't
1284 work unless it was.  ckcftp.c, 13 Jul 2002.
1285
1286 Added FTP [M]GET /DATES-DIFFER, which is like /UPDATE except it selects files
1287 that are newer or older, rather than only newer.  This allows updates from
1288 sources where files might be rolled back to earlier versions.  It's a bit
1289 dangerous if you use it without knowing what it's for, since it allows older
1290 files to overwrite newer ones.  (Code is also in place for [M]PUT
1291 /DATES-DIFFER, and it works, but I commented it out because it's either
1292 useless or dangerous since when uploading, you can't set the the file dates
1293 when they are arrive on the server.)  ckcftp.c, 13 Jul 2002.
1294
1295 Changed chkmodtime() to remember if MDTM fails on a particular connection
1296 because it's an unknown command (500, 502, or 202), and if so, not to ask
1297 again.  ckcftp.c, 13 Jul 2002.
1298
1299 With this last change, I think it's safe to change the default for FTP DATES
1300 from OFF to ON.  ckcftp.c, 13 Jul 2002. 
1301
1302 Increased max number of /EXCEPT: patterns from 8 to 64 for file transfer (not
1303 necessarily for other things).  This is now a compile-time symbol NSNDEXCEPT.
1304 ckcker.h, ckcmai.c, ckclib.c, ckcfns.c, ckcftp.c, ckuus[rx].c.  13 Jul 2002.
1305
1306 Fixed FTP MGET to not send SIZE command when there is a name collision and
1307 FILE COLLISION is DISCARD, even if /SMALLER or /LARGER were also specified.
1308 ckcftp.c, 15 Jul 2002.
1309
1310 MGET fails if no files were transferred, even if the reason is that no files
1311 met the selection critieria: /COLLISION:DISCARD, /UPDATE, /SMALLER, etc.
1312 Changed MGET to succeed in that case.  domget(): ckcftp.c, 16 Jul 2002.
1313
1314 Big problems with canceling MGET; Ctrl-C cancels the current file, but we
1315 don't break out of the file loop, we just go on to the next file.  Worse, if
1316 we're executing a command file that has a series of MGETs, Ctrl-C doesn't
1317 break us out of the command file.  Fixed by making failftprecv() and
1318 failftprecv2() "chain" to the main SIGINT handler, trap().  This is fine in
1319 Unix, but I'd be really surprised if it works in K95 so I put it in #ifndef
1320 OS2.  Ditto for MPUT: Added the same treatment to failftpsend() and
1321 failftpsend2().  Ditto for cmdcancel().  To adapt to K95, search for "TEST ME
1322 IN K95" (5 places).  ckcftp.c, 16 Jul 2002.
1323  
1324 Fixed previous fix to account for the fact that failftpblah() can be called
1325 not only upon Ctrl-C, but also if transfer interrupted with X or Z.
1326 ckcftp.c, 16 Jul 2002.
1327
1328 Yesterday's fixes revealed another problem: Interrupt MGET with Ctrl-C, start
1329 another MGET, and the file list is total garbage.  Diagnosis: secure_getc()
1330 and secure_getbyte() use internal static buffer pointers.  The only way they
1331 ever get reset is when the data connection is closed by the server, so if you
1332 interrupt a GET, the pointers are not reset and the next network read (e.g. of
1333 an NLST response) returns whatever junk was lying around in the old buffer.
1334 ckcftp.c, 17 Jul 2002.
1335
1336 FTP MGET temp file is kept only if FTP DEBUG is ON.  Changed FTP module to
1337 also keep it if the regular debug log is active.  ckcftp.c, 17 Jul 2002.
1338
1339 Fixed version test in ckermit.ini: should be 6 digits, not 5.  17 Jul 2002.
1340
1341 Changed C-Kermit version number to 8.0.205 so scripts can test for the
1342 recent changes.  ckcmai.c, 18 Jul 2002.
1343
1344 ---8.0.205---
1345
1346 SET FILE COLLISION UPDATE would unset FTP DATES due to a typo in the recent
1347 changes.  ckcftp.c, 21 Jul 2002.
1348
1349 FTP [M]GET /DATES-DIFFER really should have been a collision option.  Added
1350 this option (implemented for FTP only) to both SET FTP COLLISION and the
1351 FTP [M]GET /COLLISION: table, so this way if you have lots of [M]GETs, you
1352 don't have to put /DATES-DIFFER on each one.  ckcker.h, ckcftp.c, 21 Jul 2002.
1353
1354 "FTP MGET a* b* c*" would fail to get any c*'s if no b*'s existed.
1355 ckcftp.c, 21 Jul 2002.
1356
1357 From Jeff, 22 Jul 2002:
1358  . Beginnings of Ann Arbor Ambassador terminal emulation for K95;
1359    ckuus[57].c, ckuusr.h.
1360  . Bump K95 version number to 2.0.2: ckcmai.c
1361
1362 Added -DCK_PAM -DCK_SHADOW to all Solaris targets, 2.6 and above.  makefile,
1363 23 Jul 2002.
1364
1365 Discovered that CK_SCRIPTS path search for TAKE files was #ifdef'd out
1366 except for K95.  Fixed in ckuusr.c, 25 Jul 2002.
1367
1368 From Jeff: changes to support K95 italics: ckuus[57].c,  25 Jul 2002.
1369
1370 Fixed path search for TAKE to not search the CK_SCRIPTS path if the filespec
1371 contains any directory or path parts.  Added a new function to check for
1372 this:  int hasnopath(filespec) in ckucmd.c: 26 Jul 2002.
1373
1374 Update HP-UX build instructions from PeterE: makefile, 26 Jul 2002.
1375
1376 Commented out "const" from struct pam_message declarations because it
1377 causes "initialization type mismatch" warnings.  ckufio.c, 26 Jul 2002.
1378
1379 Suppose you have a network directory containing a listing for host "foo":
1380
1381   foo tcp/ip foo.bar.com
1382
1383 Then in K95 you give a command "set host /network-type:ssh foo".  This
1384 results in the directory lookup replacing the "ssh" network type with TCP/IP,
1385 and making a Telnet connection.  Fix attempted at about line 8625 of ckuus7.c
1386 in cx_net(); needs testing in K95.  26 Jul 2002.
1387
1388 FTP Password: prompt in Unix was not allowing editing.  The code looked right;
1389 I put in some debugging and suddenly it worked.  Took out the debugging and
1390 it still worked.  Maybe I dreamed it.  Anyway, I fixed the "FTP SENT" debug
1391 log entry to not record the password, and removed a redundant section above
1392 to log the same thing, but prior to any charset conversion.  ckcftp.c,
1393 27 Jul 2002.
1394
1395 From Jeff, 28 Jul 2002:
1396  . Fix typo in initxlist(): ckcmai.c.
1397  . Fix typo in Friday's set-host fix: ckuus7.c.
1398  . Move parsing of --height/width command-line args after prescan(): ckuusy.c.
1399
1400 Added invisible top-level SITE and PASSIVE commands for FTP as a convenience
1401 for habituated FTP client users.  ckuusr.[ch], ckcftp.c, 28 Jul 2002.
1402
1403 A while back a user asked if it was possible to MGET a bunch of files from
1404 an FTP server and have them all appended to each other upon arrival.  The
1405 obvious way to do this would have been:
1406
1407   mget /collision:append /as-name:bigfile *.*
1408
1409 But to make this work, I had to get rid of the "as-name must contain
1410 variables" check in the MGET parser.  doftpget(): ckcftp.c, 28 Jul 2002.  
1411
1412 Verified that it was possible to do the same thing (GET a bunch of files
1413 and append them all into one result file) with Kermit protocol.  It works
1414 fine but in this case there is no /COLLISION switch; you have to SET FILE
1415 COLLISION APPEND first.  30 Jul 2002.
1416
1417 Changed COPY /APPEND to allow wild source to single destination file, e.g.
1418 "copy /append *.* bigfile".  ckuus6.c, 30 Jul 2002.
1419
1420 From Mark Berryman: a replacement for zchkpath(), the VMS routine that checks
1421 whether a file is in the current directory; the old one (that I wrote) was
1422 a hack that only worked sometimes.  Martin Vorlaender verified Mark's code in
1423 the situation where mine was breaking (server running in captive account).
1424 ckvfio.c, 30 Jul 2002.
1425
1426 PeterE reported a problem with SWITCH case labels that start with '#':
1427 The problem is that the SWITCH variable contents in this case happens to be
1428 a comment, e.g.:
1429
1430   CMD(M)[_forward # Stand: 24.07.2002<CR>]
1431
1432 so the GOTO target is null.  The solution would be for SWITCH to put the GOTO
1433 (_FORWARD) target in quotes.  But GOTO does not strip quotes or braces from
1434 around its target.  Fixed in ckuusr.c, 30 Jul 2002.
1435
1436 Fixed the SWITCH macro definition to put the _FORWARD target in quotes.
1437 ckuus5.c, 30 Jul 2002.
1438
1439 PeterE also reported that an empty SWITCH case label did not work.  There's no
1440 particular reason why it should, but after a brief look, it wasn't that hard
1441 so I did it.  It required commenting out the check for empty labels and fixing
1442 the comparison in dogoto().  Now it's possible to read lines from a file and
1443 use each line as a SWITCH variable, with patterns as case labels, including an
1444 empty label to match empty lines, #* labels to match comment lines, etc.
1445 ckuus[r6].c, 30 Jul 2002.
1446
1447 PeterE also reported the value of \%* acquiring a trailing blank when
1448 referenced inside a SWITCH statment.  This happens because \%* is formed using
1449 \fjoin() on the \&_[] array based on its dimension, and at some point the
1450 dimension is spuriously increased by one.  As a workaround, I made \fjoin()
1451 ignore trailing empty \&_[] array elements and oddly enough this also fixed
1452 the growing dimensions problem.  The many script torture tests reveal no ill
1453 effects, so it seems like a keeper.  ckuus4.c, 30 Jul 2002.
1454
1455 Some of Peter's sample scripts made C-Kermit 8.0.201 dump core, but no more.
1456
1457 Fixed "delete xxx" to print an error message and fail if if xxx does not exist.
1458 Ditto for when xxx is a directory.  ckuus6.c, 30 Jul 2002.
1459
1460 Patches to SSL modules from Jeff based on yesterday's advisory.  ck_ssl.[ch],
1461 31 Jul 2002.
1462
1463 Fixed some typos affecting the filename collision action during command-line
1464 FTP [M]GET.  ckcftp.c, 31 Jul 2002.
1465
1466 Fixed SHOW FTP to handle FTP COLLISION DATES-DIFFER.  ckcftp.c, 31 Jul 2002.
1467
1468 A while back someone pointed out that SET CONTROL UNPREFIX ALL and SET
1469 PREFIXING NONE gave different results.  Fixed them to use the same code.
1470 Also made "set prefixing none" visible.  ckuus3.c, 4 Aug 2002.
1471
1472 Added SET CD HOME <path>, to let the user specify which directory is intended
1473 when "CD" or "KCD" is given by itself.  This is because in Windows, some
1474 applications set up their own HOME environment variable that isn't necessarily
1475 where the user wants "cd" to go, but redefining HOME can interfere with the
1476 application (example: Windows EMACS).  SET CD HOME was done by adding a myhome
1477 variable, initially a NULL pointer, and then changing homepath() to use it if
1478 it is set.  zhome() is not affected.  Also the homepath() prototype had been
1479 missing from header files.  ckcmai.c, ckuusr.h, ckuus[2345].c, 4 Aug 2002.
1480
1481 PeterE got another core dump with his SWITCH statement.  Found a place where
1482 an out-of-bounds array reference could occur if the switch variable was
1483 empty.  ckuus6.c, 5 Aug 2002.
1484
1485 PeterE noticed that if the switch variable contained a comma, spurious matches
1486 could occur with the label pattern.  The real problem turns out to be what
1487 happens when the SWITCH variable doesn't match any of the case labels and
1488 there is no DEFAULT label.  Fixed by having dogoto() in the SWITCH (_FORWARD)
1489 case pop the command stack before returning failure, i.e. by moving the
1490 "if (stopflg) return(0);" statement down a few lines.  ckuus6.c, 5 Aug 2002.
1491
1492 PeterE noticed that a SWITCH case label of :* did not match an empty SWITCH
1493 variable.  Fixed in doswitch(): ckuus6.c, 6 Aug 2002.
1494
1495 In testing the previous fix, I found it only worked sometimes.  Inspection
1496 of the debug log showed that a statement like:
1497
1498   if (y == -3) s = "{}";
1499
1500 was assigning "{" rather than "{}" to s.  Replacing the string constant by a
1501 buffer containing the same string fixed it.  The reason (guessed correctly by
1502 PeterE) was the following sequence:
1503
1504   y = cmfld("Variable name","",&s,xxstring);
1505   if (y == -3) s = "{}";
1506   len = ckstrncpy(tmpbuf,brstrip(s),TMPBUFSIZ);
1507
1508 brstrip() (by design and as documented) affects the string in place.  But in
1509 this case the string is a constant, not data in a buffer, so all further uses
1510 of "{}" get the wrong string (at least in optimized builds).  The only real
1511 cure is to change brstrip() to make a copy of its argument if it has to do
1512 anything to it.  This will slow down some scripts, but it's too risky to
1513 leave it as it was.  ckclib.c, 6 Aug 2002.
1514
1515 The previous change required an audit of the C-Kermit code to make sure that
1516 no references to brstrip() depended the result buffer being persistent, or the
1517 result pointer indicating a position in the source buffer.  Oops, it turns out
1518 that thousands of places rely on brstrip() working in place.  Therefore the
1519 change had to be undone.  There's no good way to write a dummy-proof brstrip();
1520 programmers either have be sure they're not calling it with a pointer to a
1521 string constant, or else they have to copy the result back to the right place
1522 each time.  Better to leave it as it was and audit the code to fix any calls
1523 that refer to string constants (turns out there were only two).  Restored the
1524 original fix to doswitch() (replacing the string constant by a buffer holding
1525 the same string), plus minor fixes to ckcftp.c, ckuus[r36].c, 6 Aug 2002.
1526
1527 We need file dialogs in several situations in the K95 GUI.  I added a "user
1528 query" routine for this, uq_file(), in ckuus3.c, filling it in only for Unix.
1529 Then I added code to call it from rcvfil() when (a) it's an autodownload, and
1530 (b) SET TERM AUTODOWNLOAD is ASK (I just added this option; it needs to be set
1531 to see it in action -- maybe it should be the default for KUI, in which case
1532 initialize "int autodl = ?" to TAD_ASK in ckcmai.c).  Works fine, except of
1533 course it interferes with the file-transfer display, but that won't be a
1534 problem in K95G.  ckuusr.h, ckuus[37].c, ckcfns.c, ckucns.c, 6 Aug 2002.
1535
1536 Another place we need a file dialog is when Kermit is a URL interpreter.  The
1537 problem is: how can we let the user decide whether Kermit should ask?  There
1538 really isn't any way.  Either it always asks or it never does.  In this case I
1539 think it makes sense to always ask if it's KUI, otherwise never.  I added the
1540 code for ftp: URLs to to doftprecv2(), which I tested successfully in Unix
1541 before putting it into #ifdef KUI..#endif.  Also added code for http[s] to
1542 ckuusy.c in #ifdef KUI..#endif, not tested.
1543
1544 Still need this added for K95G Actions->Capture.  The clearest example is the
1545 FTP one.  Just search for KUI in the FTP module.
1546
1547 Some minor adjustments to yesterday's work, mainly just comments, plus
1548 generate the full pathname for the default file.  ckuus3.c, ckcftp.c,
1549 7 Aug 2002.
1550
1551 Note: for some reason cmofi() is not supplying the default value if user
1552 enters an empty name... (but that won't affect the Windows version).
1553
1554 Added /USER: and /PASSWORD: switches to SET TCP { HTTP-PROXY, SOCKS-SERVER }.
1555 ckuus3.c, 7 Aug 2002.
1556
1557 New 'uninstall' target from PeterE, works by having the 'install' target
1558 write an UNINSTALL shell script.  makefile, 8 Aug 2002.
1559
1560 Added some debugging statements to the VMS communications i/o module to try
1561 to track down a problem that occurs when the controlling terminal is a LAT
1562 device.  ckvtio.c, 10 Aug 2002.
1563
1564 Fixed the non-K95 uq_file() to respect the given default name, but still show
1565 the fully qualified absolute pathname for the default in the dialog.  The
1566 reason to not use the fully qualifed name as the default in the cmxxx() calls
1567 is that this can easily result in a whole directory tree being created due to
1568 directory aliases, symlinks, etc.  So when you get a file by referring to its
1569 URL (e.g. ftp://kermit.columbia.edu/kermit/READ.ME), uq_file() converts the
1570 READ.ME part to (e.g.) /home/fdc/tmp/READ.ME but gives just "READ.ME" as the
1571 default when parsing the name.  This way the user knows where it will go and
1572 gets an opportunity to change it, and if the default is accepted, it goes into
1573 the current directory.  uq_file(): ckuus3.c, 10 Aug 2002.
1574
1575 Found the spot for calling uq_file() for kermit:// URL downloads.  Added
1576 prefatory text to filename prompts for Kermit and FTP downloads.  ckcfns.c,
1577 ckcftp.c, 10 Aug 2002.
1578
1579 Now with kermit:// or ftp:// URL downloads there's no way to disable the
1580 prompting.  I could easily make SET TERMINAL AUTODOWNLOAD ASK cover these
1581 cases too (even though "terminal" has nothing to do with FTP or URL
1582 downloads).  OK, I did this, but now prompting is disabled by default.
1583 ckcftp.c, ckcfns.c.  10 Aug 2002.
1584
1585 Enabled file prompting (adl_ask) by default in K95G, disabled it by default
1586 everywhere else.  So now FTP and Kermit URL downloads as well as terminal-mode
1587 Kermit (but not Zmodem) downloads are prompted for if TERMINAL AUTODOWNLOAD is
1588 ASK, which is it by default only in K95G.  But this will happen only if
1589 uq_file() is filled in for K95G; otherwise everything should work as before.
1590 ckcmai.c, 10 Aug 2002.
1591
1592 Notes:
1593  . Need a better command to control this.
1594  . FTP URL downloads are almost instantaneous, whereas Kermit URL downloads
1595    take a really long time to set up (logging in takes at least 10 seconds).
1596
1597 From Jeff, 13 Aug 2002:
1598  . Increase K95 version to 2.1.0: ckcmai.c.
1599  . SET TCP { HTTP-PROXY, SOCKS-SERVER } /USER: /PASSWORD: actions: ckuus3.c.
1600
1601 From PeterE: a new install target that's only about half as a big as the
1602 previous one, yet still generates an UNINSTALL script.  makefile, 13 Aug 2002.
1603
1604 Vace wanted to be able to give the FTP client an offset for the server time,
1605 in case the server's time (or timezone) is set incorrectly.  I added this by
1606 building on all the date/time parsing/arithmetic code -- notably delta times
1607 -- that was done for C-Kermit 8.0.  The new command is SET FTP
1608 SERVER-TIME-OFFSET delta-time; shows up in SHOW FTP and HELP SET FTP.
1609 ckcftp.c, 13 Aug 2002.
1610
1611 Fixed HELP ASK and HELP GETOK text.  ckuus2.c, 14 Aug 2002.
1612
1613 Fixed GETOK to accept /GUI switch even in K95.EXE and C-Kermit, just like ASK
1614 does (in which case, it just ignores it).  ckuus6.c, 14 Aug 2002.
1615
1616 SET XFER CHAR TRANSPARENT no longer disables character-set translation because
1617 file-scanning turns it back on.  The "new way" to disable character-set
1618 translation is SET XFER TRANSLATION OFF.  This needlessly confuses users who
1619 expect the old way to still work.  So I fixed SET XFER CHAR TRANSPARENT to set
1620 XFER TRANSLATION OFF, and SET XFER CHAR anything-else to set it back ON.
1621 ckuus3.c, 15 Aug 2002.
1622
1623 Fixed SET TERM AUTODOWNLOAD { ON, OFF } to turn off the ASK flag (adl_ask).
1624 ckuus7.c, 16 Aug 2002.
1625
1626 Added FEAT query to FTP client from draft-ietf-ftpext-mlst-13.txt.  FEAT is
1627 sent along with REST 0, MODE S, and STRU F if /NOINIT is not included in the
1628 FTP OPEN command.  Parsing the FEAT result is handled by turning the "auth"
1629 argument to getreply() into a function code: GRF_AUTH to parse AUTH reply;
1630 GRF_FEAT to parse FEAT reply.  For GRF_FEAT, getreply() fills in a flag array,
1631 sfttab[] (server feature table); sfttab[0] > 0 means server responded to the
1632 FEAT query, in which case individual elements are set > 0 for each supported
1633 feature.  ckcftp.c, 18 Aug 2002.
1634
1635 If server sends a feature list, display it if FTP DEBUG is on, then set mdtmok
1636 and sizeok (the flags that say whether it's OK to send MDTM and SIZE commands)
1637 accordingly.  If user gives an [M]PUT /RECOVER command and server has
1638 announced it doesn't support REST, print a warning but try anyway (maybe
1639 change this later).  Responses about other features that we use such as AUTH
1640 and PBSZ are ignored for now -- i.e. we try them anyway.  And of course
1641 responses for features we don't care about (LANG, TVFS, PROT) are ignored.
1642 ckcftp.c, 18 Aug 2002.
1643
1644 If the server says it supports MLST, use MLSD instead of NLST to get the file
1645 list.  This is done in remote_files() with some simple string-twiddling.  Then
1646 replace the relevant (but not all) SIZE commands with code to first check if
1647 we already got the size from the MLSD response and use that instead rather
1648 than asking again.  Same deal for MDTM.  ckcftp.c, 18 Aug 2002.
1649
1650 Checked that this works when giving pathnames in the MGET filespec.  Checked
1651 to make sure everything works as before with servers that don't support FEAT
1652 or MLSD.  Checked to make sure FTP OPEN blah /NOINIT worked with servers that
1653 do support FEAT and MLSD.  Checked that FTP CHECK works.  It's all OK.
1654
1655 Tested only with Ipswitch server; need to find and test with others.
1656
1657 The stack of temp files needed for MGET /RECURSIVE is annoying because what
1658 if we run out of file descriptors...  But the spec doesn't provide a way to
1659 request a recursive listing.
1660
1661 Supplied a missing comma in HELP SET CD text.  ckuus2.c, 19 Aug 2002.
1662
1663 Generalized parsing of MLST/MLSD file facts and values.  Got file type from
1664 server and had MGET skip non-regular files.  ckcftp.c, 19 Aug 2002.
1665
1666 Kirk Turner-Rustin <ktrustin@owu.edu> reported that if Unix C-Kermit has a SET
1667 HOST PTY connection (e.g. SSH) open, local window size changes are not
1668 propogated through the connection to the host.  I imagine that must be because
1669 the SIGWINCH signal is caught by Kermit and its children don't see it; maybe
1670 if I pass it along to the child fork, all will be OK.  Began by exporting
1671 "slavepid" from the pty module and changing its name to pty_fork_pid.  Moved
1672 the SIGWINCH handler, winchh(), from ckctel.c to ckutio.c.  Armed it from Unix
1673 sysinit() so it's always armed.  This way window changes affect Unix C-Kermit
1674 no matter what mode it's in: tt_rows, tt_cols, cmd_rows, and cmd_cols are all
1675 kept in sync.  Then if we're not in remote mode (i.e. we have a ttyfd), we
1676 call tn_snaws() and rlog_snaws() (which should be ok since they return right
1677 away if the appropriate kind of connection is not open) and then if
1678 (pty_fork_pid > -1), a SIGWINCH signal is sent to it.  ckupty.c, ckctel.c,
1679 ckutio.c, 20 Aug 2002.
1680
1681 All this works fine except the PTY part; in other words, the original problem
1682 is not fixed.  The "kill(pty_fork_pid,SIGWINCH)" call executes without error
1683 but has no effect because the size of the PTY never changed.  To make this
1684 work I had to add an ioctl() to change the size of the PTY before sending it
1685 the SIGWINCH.  Compiles and works ok on Linux and Solaris; Kirk also confirmed
1686 it for AIX 4.3.3.  ckutio.c, 20 Aug 2002.
1687
1688 Fixed xlookup() to work for uppercase keywords.  ckucmd.c, 20 Aug 2002.
1689
1690 Fixed FTP parsefeat() and parsefacts() to use xlookup() instead of lookup(),
1691 since abbreviated keywords are not allowed.  ckcftp.c, 20 Aug 2002.
1692
1693 Adjusted some lines from yesterday's window-size code for platforms I hadn't
1694 tried yet.  ckutio.c, 21 Aug 2002.
1695
1696 EXIT from K95 when it has an FTP connection open and it pops up the
1697 Locus dialog.  Made it not do this if it knows it's in the act of EXITing.
1698 ckuus[rx].c, 22 Aug 2002.
1699
1700 In K95, FTP GET in ASCII mode results in a file with Unix line terminators
1701 even though the protocol is correct:
1702
1703   RETR smjulie.txt
1704   150 Opening ASCII mode data connection for smjulie.txt (1878 bytes).
1705
1706 The source file is a regular Unix text file with LF at the end of each line.
1707 It's incredible that nobody noticed this before.  It only came to light when
1708 somebody tried to open a downloaded text file with Notepad, which doesn't
1709 handle Unix-format files (Wordpad and Emacs have no problems with them).  The
1710 problem was in doftprecv2() in the FTT_ASC section.  There was no conditional
1711 code for Unix vs Windows.  In all cases, the code discarded incoming CR's in
1712 ASCII mode.  I put the CR-discarding code in #ifdef UNIX..#endif.  ckcftp.c,
1713 22 Aug 2002.
1714
1715 Removed super-verbose debugging from gtword(): ckucmd.c, 23 Aug 2002.
1716
1717 Gregory Bond reported a problem with "if defined \$(BLAH) ..." inside of a
1718 SWITCH statement.  It wasn't really the SWITCH that was doing it, it was the
1719 fact that he had enclosed the SWITCH case in braces, which made it an
1720 "immediate macro" (XXMACRO).  The XXMACRO code parsed the macro definition
1721 (the part inside the braces) with cmtxt(...,xxstring), which should have been
1722 cmtxt(...,NULL) to defer the evaluation of the interior of the macro until it
1723 was executed.  This is better illustrated with the following example:
1724
1725   { echo START, for \%i 1 3 1 { echo \%i }, echo STOP }
1726
1727 which totally fell on its face prior to the fix.  Also fixed ?-help for
1728 immediate macros, which was broken too.  ckuusr.c, 23 Aug 2002.
1729
1730 RFC959 says STOU does not take an argument.  But every FTP server I've
1731 encountered but one accepts the arg and constructs the unique name from it,
1732 which is better than making up a totally random name for the file, which is
1733 what RFC959 calls for.  Especially because there is no way for the client to
1734 find out the name chosen by the server (because RFC 959 and 1123 are
1735 contradictory, plus no servers follow either one of them for this anyway).  So
1736 we try STOU with the argument first, which works with most servers, and if it
1737 fails, we retry it without the arg, for the benefit of the one picky server
1738 that is not "liberal in what it accepts" UNLESS the first STOU got a 502 code
1739 ("not implemented") which means STOU is not accepted, period (which happens
1740 with ProFTPD).  ckcftp.c, 25 Aug 2002.
1741
1742 Added SET FTP ANONYMOUS-PASSWORD (plus help text and show value).  ckcftp.c,
1743 25 Aug 2002.
1744
1745 Made FTP command "not available" if NOFTP is defined.  ckuusr.c, 25 Aug 2002.
1746
1747 Forced client to send a TYPE command upon initial connection, since given
1748 the variable quality of FTP servers, it's not safe to assume the server is
1749 in ASCII or any other particular mode.  ckcftp.c, 25 Aug 2002.
1750
1751 SET FTP CHARACTER-SET-TRANSLATION ON is completely broken in K95, although it
1752 works fine in C-Kermit.  Furthermore it is broken in both the GUI and Console
1753 versions, so it's not a Unicode vs OEM console-character-set issue.
1754
1755 Added Concurrent PowerMAX OS target from Tom Horsley.  makefile, ckuver.h,
1756 27 Aug 2002.
1757
1758 Minor fixes to FTP module from Jeff.  ckcftp.c, 27 Aug 2002.
1759
1760 New Makefile target for Mac OS X 10.2, needs -DNDSYSERRLIST added, from
1761 William Bader.  2 Sep 2002.
1762
1763 SET OPT DIR /DOTFILES didn't work for server listings.  A few years ago when
1764 I front-ended zxpand() with nzxpand(), I missed a couple places where
1765 traverse() needed to refer to xmatchdot (nzxpand's argument flag) rather than
1766 global matchdot.  Fixed in traverse(): ckufio.c, 2 Sep 2002.
1767
1768 From Jeff, 4 Sep 2002:
1769  . setautodl(x) -> setautodl(x,y): ckuusr.h, ckuus[7y].c
1770  . Add another parameter to popup_readblah(): ckuus6.c
1771  . Sort out some confusion in scanfile() where a parameter was also used as a
1772    local flag.  ckuusx.c.
1773  . Protect restoring of saved terminal idle parameters with a flag that says
1774    they were actually saved.  ckuusr.c.
1775  . Rework uq_text() and uq_mtxt().  ckuus3.c.
1776  . Fix FTP charset translation for little-endian hardware: ckcftp.c.
1777
1778 The latter still doesn't work in Linux:
1779
1780   (/home/fdc/kermit/) C-Kermit>set ftp server-character-set latin1-iso
1781   (/home/fdc/kermit/) C-Kermit>set file character-set utf8
1782   (/home/fdc/kermit/) C-Kermit>get latin1.txt
1783
1784 Results in "????????: file not found".  But it works fine on the Sun.
1785
1786 Jeff's patch removed a little-endian byte-swap (LEBS) from doftpsend2().  But
1787 the real problem was that LEBS was not being done consistently throughout the
1788 module.  There were similar xgnbyte()/xpnbyte() loops elsewhere in the code,
1789 and all of them needed to work the same way.  Undoing Jeff's fix and then
1790 adding the LEBS to the loop in getreply() makes downloads work right, but the
1791 messages are still messed up (they come out in Chinese :-)  Begin by moving all
1792 byte-swapping operations that occur in ckcftp.c itself into a new function,
1793 bytswap().  It's either right to do it all the time, or to do it never; this
1794 way we can turn it on and off in one place.
1795
1796 xp/gnbyte() include behavior that depends on what Kermit is doing: W_SEND,
1797 etc.  xpnbyte() tests W_KERMIT, which is a combination of W_SEND, W_RECV, etc.
1798 Defined a new symbol W_XFER, which is like W_KERMIT but includes W_FTP.  These
1799 are all the "whats" in which character sets might need to be converted.
1800 Changed the W_KERMIT reference in xpnbyte() to W_XFER.  Fixed the inderminate
1801 "what" state after an FTP command by moving "what = W_COMMAND;" from before
1802 the main parse loop to inside it (this didn't matter before the addition of
1803 FTP but now it does).  ckcker.h, ckcftp.c, ckuus5.c, 6 Sep 2002.
1804
1805 Finally I changed xlatec() to be consistent with all the other xgnbyte() /
1806 xpnbyte() usage throughout the FTP module and, poof, everything worked in
1807 Linux (and still works on the Sun).  We still need some work in Windows (where
1808 the file character-set is not necessarily the console character set for
1809 messages) but we can tackle that next.  ckcftp.c, 6 Sep 2002.
1810
1811 Checking yesterday's work:
1812
1813 Kermit file transfers with charset translation work fine in both directions.
1814
1815 FTP GET with charset translation works fine on both BE and LE
1816
1817 Fixed a typo in yesterday's changes that made FTP PUT with charset translation
1818 always upload 0-length files.  ckcftp.c, 7 Sep 2002.
1819
1820 FTP PUT (after the typo was fixed) with charset translation works fine on BE,
1821 but on LE the message comes out in Chinese and the resulting file gets ? or
1822 nothing for all for the accented letters:
1823
1824       FTP...  Kermit 
1825       Up  Dn  Up  Dn  Term
1826   BE  OK  OK  OK  OK   xx
1827   LE  no  OK  OK  OK   xx
1828
1829 xx = C-Kermit CONNECT mode with translation doesn't seem to do anything, not
1830 only in today's code, but also in the 8.0 release version: "set term char
1831 latin1 utf8" -- SHOW CHAR shows the right stuff, but no translation is done.
1832 Ditto for the 7.0 release.  That can't be right...
1833
1834 But one problem at a time -- what's wrong with LE FTP uploads?  Note that
1835 XLATE works on the same machine, so it's obviously confusion in xgnbyte()
1836 about "what".  Suppose we make xgnbyte() ALWAYS return bytes in BE order.
1837 This makes sense because xgnbyte() is almost always used to feed xpnbyte(),
1838 and xpnbyte() requires its bytes to come in BE order.  This means that all
1839 code that uses xgnbyte()/xpnbyte() loops can be simplifed, which I did for
1840 the FTP module.  ckcfns.c, ckcftp.c, 7 Sep 2002.
1841
1842 Of course Kermit protocol uses xgnbyte() too, but only for filling
1843 packets, and packets never contain UCS2 and even if they did, it would have
1844 to be big-endian, so no changes needed for getpkt().  Now we have:
1845
1846       FTP...  Kermit 
1847       Up  Dn  Up  Dn
1848   BE  OK  OK  OK  OK
1849   LE  OK  OK  OK  OK
1850
1851 Now let's look at the remaining xgnbyte() calls in the rest of the code:
1852
1853 ckuus4.c:
1854   xlate() uses it of course.  I simplified the general-case loop.
1855   Works OK on both Sun and Linux.
1856
1857 ckuus6.c:
1858   typegetline() uses it.  I commented out the byte swap.  Seems OK.
1859
1860 Built and tested on Linux, Solaris, and SunOS.  I'm sure I must have broken
1861 something, but the main things are better than they were.  Kermit and FTP
1862 transfers need testing in K95, as well as the TYPE command (there's a bunch of
1863 special K95 code in there).  C-Kermit charset translation during CONNECT is
1864 still broken, or else I forgot how to use it, but that's a separate issue
1865 since xgnbyte()/xpnbyte() are not involved.  And we still need to do something
1866 in FTP getreply() for K95 to convert messages to the console character set for
1867 display, rather than the file character set (should be trivial).  Also there's
1868 still a lot of extra debugging and commented-out junk in ckcftp.c to be
1869 cleaned up after more testing.
1870
1871 During yesterday's testing, I noticed that REMOTE SET { FILE, XFER }
1872 CHARACTER-SET didn't work.  The server accepted these commands but they didn't
1873 seem to do anything.  In fact, they did work, but they were undone later by
1874 code in sfile() that restored the global settings in case they had been
1875 temporarily overridden by autoswitching or whatever.  The solution is to
1876 "unsave" the saved values whenever a global setting is performed explicitly.
1877 Tested successfully against Sun and Linux servers.  Also the server end of
1878 REMOTE SET needed updating for Unicode.  ckcfn[s3].c, ckuus3.c, 8 Sep 2002.
1879
1880 Cleaned commented-out cruft and extra debugging from ckcftp.c.  8 Sep 2002.
1881
1882 Kermit autodownload with ASK file dialog: if user supplied an absolute
1883 pathname, it was treated like a relative one.  Fixed the invocation of
1884 uq_file() in rcvfil() to temporarily override the RECEIVE PATHNAMES setting.
1885 ckcfns.c, 10 Sep 2002.
1886
1887 Added SET TERMINAL ROLL KEYSTROKES { SEND, RESTORE-AND-SEND, IGNORE }, parse
1888 only.  Needs implementation (search for tt_rkeys and rollkeytab in ckuus7.c).
1889 ckuusr.h, ckuus[27].c, 10 Sep 2002.
1890
1891 If FILE INCOMPLETE is DISCARD and a file is being received by IKSD but IKSD
1892 gets a Telnet LOGOUT command, the partial file is not deleted.  In fact this
1893 happens any time doexit() is called for any reason during file reception,
1894 e.g. because of SIGHUP.  Added code to doclean() to check if a download
1895 output file was open, and if so, to delete it after closing it if keep==0.
1896 ckuusx.c, 10 Sep 2002.
1897
1898 Added a brief one-line message after remote-mode file transfer saying
1899 what (or how many) file(s) were transferred, where they went, and whether
1900 the transfer was successful -- kind of an automatic WHERE command, useful
1901 with autodownloads so you know what happened.  ckcpro.w, 11 Sep 2002.
1902
1903 The Unix and VMS C-Kermit CONNECT modules have botched remote-charset to
1904 local-UTF8 translation ever since the Unicode was first added in v7.0.  Fixed
1905 in ckucns.c, ckucon.c, ckvcon.c, 11 Sep 2002.
1906
1907 On to pattern-matching...  The matchdot business should apply only for (Unix)
1908 filename matching, not for general string matching.  Fixed in ckmatch():
1909 ckclib.c, 11 Sep 2002.
1910
1911 A bigger problem occurs in filename matching.  Somehow the dirsep == fence
1912 business interferes with matching {foo,bar,baz} segments.  For example, I have
1913 a filename "foo" and I want to match it with the pattern "{foo,bar}".  Somehow
1914 the segment pattern becomes "*/foo" and doesn't match the string.  Where does
1915 the '/' get tacked on?  I don't even know how to explain this, but the short
1916 story was that ckmatch(), under certain circumstances, would back up to before
1917 the beginning of the filename string, which just happened to contain a "/"
1918 (and before that a ".") because of who was calling it.  Obviously this is not
1919 how to write a pattern matching function...  Ensuring that it never backs up
1920 beyond the beginning of a string fixed the immediate problem and does not seem
1921 to have broken any other matching scenarios (I have 150 of them in my test
1922 script).  ckclib.c, 11 Sep 2002.
1923
1924 There's still a problem though.  Suppose the a client sends "dir {{.*,*}}" to
1925 a server.  This asks for a directory listing of all files that begin with
1926 dot as well as all files.  Still doesn't work because we don't normally show
1927 dot-files, but in this case it SHOULD work because ".*" was explicitly
1928 requested.  Staring at the ckmatch() code revealed how to fix this, and I did,
1929 but that was only half the problem.  The other half was that the list of
1930 files being fed to ckmatch() did not include the dotfiles in the first place.
1931 The cure here is to change nzxpand() to prescan the pattern to see if it
1932 includes a leading dot, and if so to set the "xmatchdot" flag itself, even
1933 if it wasn't set by the caller.  ckclib.c, ckufio.c, 11 Sep 2002.
1934
1935 Now that {foo,bar,...} patterns work better, I added a quick hack to the
1936 DIRECTORY command to allow multiple filespecs to be given, in which case we
1937 combine them into a {file1,file2,...} pattern before calling nzxpand().  Works
1938 fine but it's a hack because you don't get file lists upon "?" in the second
1939 and subsequent filespec fields, but I doubt anyone will notice.  So now,
1940 finally, people can do "dir .* *" like they do in Unix (except with ls) to get
1941 a listing of all files in a directory without having to know about or use the
1942 /DOTFILES switch.  This was NOT done for the server end of RDIR because of
1943 ambiguity of spaces as separators versus filename characters.)  domydir():
1944 ckuus6.c, ckuus[r2].c, 11 Sep 2002.
1945
1946 Added a CONTINUE command.  In a script, this does whatever CONTINUE did before
1947 (e.g. in a FOR or WHILE loop).  At the prompt, it calls popclvl(), which gives
1948 a more natural way to continue a script that has "shelled out" to the prompt.
1949 ckuusr.[ch], 11 Sep 2002.
1950
1951 Added help text for CONTINUE.  ckuus2.c, 12 Sep 2002.
1952
1953 From Jeff, 16 Sep 2002:
1954  . SET TERM ROLL KEYSTROKES for K95: ckuusr.h, ckuus7.c
1955  . Remove the doexit() call from the Telnet TELOPT_LOGOUT handler: ckctel.c
1956
1957 Fixed an FTP debug message to be consistent with Kermit ones.
1958 ckcftp.c, 16 Sep 2002.
1959
1960 Added SET/SHOW TRANSFER REPORT to turn the post-transfer report off and on.
1961 ckuusr.h, ckuus[234].c, 16 Sep 2002.
1962
1963 Fixed Solaris (and maybe some other SVORPOSIX builds) to find out their full
1964 hostname rather than just short form (e.g. watsol.cc.columbia.edu rather than
1965 just watsol).  ckhost(): ckuusx.c, 16 Sep 2002.
1966
1967 "cat somefile | kermit -Ts -" is supposed to send stdin in text mode, but
1968 K95's file transfer display reports BINARY.  Looked at C-Kermit code; it seems
1969 fine.  Looked at packet and debug logs; C-Kermit was indeed sending in text
1970 mode and announcing it correctly.  K95 gattr() is doing the right thing:
1971
1972   gattr file type[AMJ]=3
1973   gattr attribute A=text=0
1974   gattr sets tcharset TC_TRANSP[A]
1975
1976 Same thing happens when C-Kermit is receiving.  Yet when I send an actual
1977 file, rather than stdin, it's received in text mode.  The only difference is
1978 that stdin does not have a Length attribute in its A-packet, so in this case
1979 the receiver skips any calls to screen() that show the length or percent done.
1980 Aha, so maybe it's just a display problem -- scrft() is not being called to
1981 repaint the file type if the size was not known.  Fixed in opena() by
1982 removing the IF clause from "if (fsize > -1L) xxscreen(SCR_FS,0,fsize,"");".
1983 ckcfn3.c, 18 Sep 2002.
1984
1985 K95 user has a listfile containing some regular filenames and then some
1986 filenames that include paths and has all kinds of problems with MGET /LISTFILE
1987 (pieces of different names concatenated to each other, etc).  Setting up the
1988 same scenario here, I don't see the same problems but I do see "Refused: Name"
1989 when we go to get a path/name file.  This happens because (a) we had already
1990 got a top-level file with a certain name, (b) a file in a subdirectory has the
1991 same name, (c) we are stripping the path before calling zchki(), and (d)
1992 FTP COLLISION is set to DISCARD.  How do we make FTP not strip the path?
1993
1994 This is an interesting question...  The answer depends on where the user
1995 wants the file to go.  Normally if you tell an FTP client to "get foo/bar",
1996 you want the file "bar" to be downloaded to the current directory.
1997
1998 Anyway, it turns out the FTP module uses paths locally during MGET only if
1999 /RECURSIVE was specified.  So:
2000
2001   mget /listfile:blah /recursive
2002
2003 should have made this work, but it didn't because in the /LISTFILE case,
2004 we have effectively turned an MGET into a series of GETs, where the code to
2005 check whether to strip the path didn't check the recursive flag because how
2006 could a GET (as opposed to an MGET) be recursive?  Adding this exception to
2007 the if-condition got us a bit farther but now when we try to open the output
2008 file in doftprecv2(), zopeno() fails because the name contains a dirsep.
2009 We have to call zmkdir() first but that wasn't happening because some other
2010 flag wasn't set right in this case.  Finally zmkdir was called, but with
2011 the wrong string.  After fixing that, it works.  Now we should be able
2012 to use /RECURSIVE to force the pathname to be used on the local end.
2013 ckcftp.c, 19 Sep 2002.
2014
2015 Checked FTP filename conversion issues.  FTP FILENAMES AUTO is supposed to
2016 mean LITERAL if "wearealike" OR server is UNIX or Windows, otherwise
2017 CONVERTED, but there were places where this rule was not applied consistently,
2018 fixed now.  ckcftp.c, 21 Sep 2002.
2019
2020 Added SET FTP DISPLAY, which is like SET TRANSFER DISPLAY but applies only to
2021 FTP, mainly because I tended to type it all the time.  Now if you have dual
2022 sessions, each session can have its own transfer display style.  ckcftp.c,
2023 ckuusr.h, ckuus[347].c, 21 Sep 2002.
2024
2025 Back to FTP MLSD.  We're supposed to match the pattern locally, not rely on
2026 the server to filter its list according to the client's pattern.  Thus we must
2027 also allow an empty argument to MGET and must not send a filespec with MLSD.
2028 Actually this is tricky -- how is the client supposed to know whether to send
2029 a filespec.  For example, if the user's command is "mget foo*bar", and the
2030 server supports MLSD, then what should the client do?  The client does not
2031 know the wildcard syntax on the server, so for all the client knows, this
2032 might be a valid directory name, in which case it should be sent.  On the
2033 other hand, the user might intend it as a wildcard, in which case it should
2034 NOT be sent.  But the FTP client can't read the user's mind.  This is another
2035 serious flaw in the Elz/Hethmon draft.  Anyway, I got the local matching
2036 business working for MLSD as long as the user's MGET arg is really a pattern
2037 and not a directory name.  To be continued...  ckcftp.c, 21 Sep 2002.
2038
2039 Added FTP { ENABLE, DISABLE } { FEAT, MLST }.  If we always send FEAT, we
2040 usually get a complaint.  If we send FEAT and MLST is negotiated, there is a
2041 good chance it is misimplemented or will have undesirable side effects, such
2042 as sending huge file lists.  NOTE: /NOINIT on the FTP OPEN command also
2043 disables both of these.  ckcftp.c, 22 Sep 2002.
2044
2045 Fixed mkstemp() code in FTP remote_files().  mktemp() does not open the file,
2046 mkstemp() does open it; previously we had been opening it again and never
2047 closing the first instance so every MGET would create another open file
2048 descriptor.  ckcftp.c, 22 Sep 2002.
2049
2050 Added debug messages for temp-file creation and lines read from the temp file.
2051 ckcftp.c, 22 Sep 2002.
2052
2053 Eliminated sending of some extraneous TYPE commands, but there's still room
2054 for improvement.  ckcftp.c, 22 Sep 2002.
2055
2056 Moved definition of build date to top of ckcmai.c.  22 Sep 2002.
2057
2058 Added recursion to MGET with MLSD...  It's all done in remote_files().
2059 Temp-file pointers are on a stack (max size 128).  When parsing MLSD lines
2060 from the temp file and we see "type=dir", we create the local directory by
2061 calling zmkdir(), change to the remote by sending CWD, increment the depth,
2062 and call ourselves.  When reading from a temp file, upon EOF we close and
2063 dispose of the temp file, return -3 if currently at top level, otherwise we
2064 free the tmpfile name, decrement the depth, send CDUP to the server, "cd .."
2065 locally, and go back and read the next line from the previous but now current
2066 temp file.  Conceptually simple but needed hours of debugging -- what must
2067 be static, what must be on the stack...  Seems OK now but still needs some
2068 heavy testing.  ckcftp.c, 22 Sep 2002.
2069
2070 Added FTP { ENABLE, DISABLE } { SIZE, MDTM } and add help text for FTP
2071 ENABLE and DISABLE.  ckcftp.c, 23 Sep 2002.
2072
2073 Don't allow restart if SIZE disabled.  ckcftp.c, 23 Sep 2002.
2074
2075 Make sure all implicit SIZE commands are surpressed if SIZE disabled.
2076 ckcftp.c, 23 Sep 2002.
2077
2078 If an explicit FTP MODTIME command is sent when MDTM is DISABLED, and it
2079 succeeds, re-ENABLE MDTM.  Ditto for SIZE.  ckcftp.c, 23 Sep 2002.
2080
2081 If an explicit FTP FEATURES command is sent during an FTP session, redo the
2082 features database from it.  ckcftp.c, 23 Sep 2002.
2083
2084 After further discussion with Robert Elz, I realized I had to expose the
2085 underlying MGET mechanisms to the user; the draft isn't going to change, and
2086 the new spec will result in undesirable effects if the client tries to "do the
2087 right thing" by magic in all situations; thus the user must have some new
2088 controls:
2089
2090   MGET [ /MLST, /NLST, /MATCH:xxx ] [ filespec [ filespec [ ... ] ] ]
2091
2092 These switches let the user force the use of MLSD or NLST when there's a
2093 choice, and to force local use of a pattern rather than sending it to the
2094 server, and even to send a directory name to the server at the same time as
2095 specifying a pattern for local matching, and of course by default we try to do
2096 the right thing in all scenarios.  Symbols only; not coded yet.  ckuusr.h,
2097 23 Sep 2002.
2098
2099 Added the three new switches to MGET, plus /MLST is an invisible synonym for
2100 /MLSD.  If /NLST or /MLSD is given it, it forces the corresponding FTP protocol
2101 directive.  ckcftp.c, 25 Sep 2002.
2102
2103 Now for the tricky part: now we have two separate concepts for what to send to
2104 the server: a filename or wildcard to be interpreted by the server (NLST only)
2105 or a directory from which to get a list of all the files (NLST or MLSD),
2106 possibly together with a pattern to be used by the client to match filenames
2107 returned by the server.  This required giving remote_files() an additional
2108 argument.  Now it uses "pattern" (if any) strictly for local pattern matching
2109 (because now it is the /MATCH: switch argument, not the MGET filespec), and
2110 "arg" (the MGET filespec) is what it sends to the server, maybe (see the
2111 comments in the code for the actual details); either or both these can be
2112 null.  ckcftp.c, 25 Sep 2002.
2113
2114 Discovered that "mget foo", where foo is a directory name, never worked.
2115 Fixed in remote_files(): ckcftp.c, 25 Sep 2002.
2116
2117 Going through every combination of NLST, MLSD, /MATCH:, and MGET arg and
2118 debugging each case until OK...  Then also with the panix.com NetBSD server
2119 (lukemftpd 1.0) which also supports MLSD....  11 test cases all debugged and
2120 tested OK.  ckcftp.c, 26 Sep 2002.
2121
2122 Added /NODOTFILES switch to FTP MGET, to control what happens with dot-files
2123 if the server includes their names in the list (as lukemftpd does).  There's
2124 no point in adding a /DOTFILES switch because what could it possibly do?
2125 ckcftp.c, 26 Sep 2002.
2126
2127 Changed a bunch of "skipthis++" to "continue" in doftpget(), to avoid
2128 error messages when skipping files that user said she wanted to skip.
2129 ckcftp.c, 26 Sep 2002.
2130
2131 Added help text for the new MGET switches.  ckcftp.c, 26 Sep 2002.
2132
2133 Don't switch LOCUS when making an FTP connection until logged in.
2134 ckcftp.c, 26 Sep 2002.
2135
2136 Fixed LDIR to run Kermit's built-in DIRECTORY code rather than the external
2137 directory program.  ckuusr.c, 26 Sep 2002.
2138
2139 Protect iswild() against NULL args.  ckufio.c, 26 Sep 2002.
2140
2141 From Jeff: SET GUI WINDOW RUN-MODE { MAXIMIZE, MINIMIZE, RESTORE },
2142 plus variables for GUI Window X position, GUI Window Y position, GUI
2143 Window X resolution, GUI Window Y resolution, GUI Window Run mode.
2144 ckuusr.h, ckuus[24].c, 27 Sep 2002.
2145
2146 From Ronan Flood: updated FreeBSD 1.0 makefile entry, plus an #ifdef to protect
2147 sysconf() calls.  makefile, ckutio.c, 28 Sep 2002.
2148
2149 Change ftp_auth() to return(0) if an AUTH command gets a 500 response, so it
2150 doesn't keep sending other kinds of AUTH commands.  ckcftp.c, 29 Sep 2002.
2151
2152 Changes from Jeff to yesterday's changes.  ckcftp.c, 30 Sep 2002.
2153
2154 From Jeff: SSH command-line personality.  Uses same command line as the Telnet
2155 personality.  ckcker.h, ckcmai.c, ckuus[4y].c, 3 Oct 2002.
2156
2157 From Jeff, 7 Oct 2002:
2158  . SET PRINTER CHARACTER-SET.  ckuxla.c, ckuusr.h, ckuus[25].c
2159  . Promotion of K95 to Beta.01.  ckcmai.c
2160  . Promotion of SET GUI { MENUBAR, TOOLBAR } to visible.  ckuus3.c
2161
2162 Changed the URL parser as follows: if the username and/or password fields are
2163 present but empty, as in:
2164
2165            ftp://@ftp.xyzcorp.com/somepath
2166   or:      ftp://:@ftp.xyzcorp.com/somepath
2167   but not: ftp://:ftp.xyzcorp.com/somepath
2168
2169 the pointer for these items becomes a pointer to an empty string, rather than
2170 a NULL pointer.  Then when we go to open the connection, if the username
2171 string pointer points to an empty string, we prompt for the username (and/or
2172 password).  ckuusy.c 9 Oct 2002.
2173
2174 Jason Heskett reported an interesting bug involving a core dump when an
2175 ON_EXIT macro is defined that executes another macro.  Sometimes.  He was able
2176 to send a short command file that always crashed.  Diagnosis: ON_EXIT, when it
2177 is called, pokes itself out of the macro table by setting its own entry in the
2178 macro name list to an empty string.  But this interferes with any macro
2179 lookups that are done while executing ON_EXIT's body and also evidently some
2180 code is not happy with empty macro names...  To fix: replace "on_exit" with
2181 "on_exxx", so the replacement keyword is (a) nonempty, and (b) doesn't wreck
2182 the alphabetical sorting of the table.  ckuusx.c, 9 Oct 2002.
2183
2184 Added makefile targets for FreeBSD 4.6 and 5.0.  Built and tested on 4.6;
2185 don't know about 5.0.  ckuver.h, makefile, 9 Oct 2002.
2186
2187 Added targets for AIX 5.2 and 5.3; totally untested.  ckuver.h, makefile,
2188 9 Oct 2002.
2189
2190 Built current source on Unixware 7.1.3 (make uw7); it's fine.  9 Oct 2002.
2191
2192 Promoted C-Kermit to 8.0.206 Beta.01 in hopes of a simultaneous release
2193 with K95 2.1.  ckcmai.c, 9 Oct 2002.
2194
2195 From Jeff: Change KERMITFONT definitions to use the new (Unicode 3.1) code
2196 points for the terminal graphics characters (such as VT100 horizontal scan
2197 lines), rather than private-use codes.  ckcuni.c, 10 Oct 2002.
2198
2199 Jason Heskett also complained that REMOTE CD would print the name of the new
2200 directory returned by the server even if he SET QUIET ON.  This is a tricky
2201 one.  Which server replies should the QUIET settings apply to?  If I give a
2202 REMOTE DIRECTORY command, it means I want to see the directory listing,
2203 period.  But if I give a REMOTE CD command, I get an "unsolicited" response
2204 message that SET QUIET ON should suppress.  Adding message suppression to 
2205 rcv_shortreply() is close, but not totally right; for example, it also
2206 suppresses the response to REMOTE PWD, which is not helpful.  The only right
2207 way to do this is to suppress for REMOTE CD only, which can be done only by
2208 setting a (new) global flag, rcdactive.  ckuus[r57].c, ckcpro.w, 10 Oct 2002.
2209
2210 Ditto for REMOTE LOGIN response message ("Logged in").  ckuus7.c, 11 Oct 2002.
2211
2212 From Jeff: SET GUI WINDOW FONT { NAME, SIZE }. ckuusr.h, ckuus4.c, 11 Oct 2002.
2213
2214 Quick preliminary 8.0.206 build-all:
2215
2216  OK SunOS 4.1.3
2217  OK Solaris 2.5.1
2218  OK Solaris 9
2219  OK AIX 4.3.3
2220  OK HP-UX 10.20
2221  OK VMS 7.1 Alpha + TCP/IP
2222  OK VMS 7.1 Alpha nonet
2223  OK VMS 5.5 VAX + TCP/IP
2224  OK VMS 5.5 VAX nonet
2225  OK Unixware 7.1.3
2226  OK FreeBSD 3.1
2227  OK FreeBSD 4.6
2228  OK NetBSD 1.5.2 MVME (Gerry B)
2229  OK Sinix 5.42
2230
2231 Sinix build got stuck on ckuusr.c even though we're not optimizing on Sinix
2232 any more.  Rebooting the machine fixed it.
2233
2234 Fixed some #ifdefs for VMS in new incomplete-file deletion code in doclean().
2235 ckuusx.c, 11 Oct 2002.
2236
2237 Moved uq_blah() prototypes from ckuusr.h to ckcker.h because these routines
2238 are called in modules that don't (and shouldn't have to) include ckuusr.h.
2239 11 Oct 2002.
2240
2241 Jeff verified secure builds on Linux and Solaris.
2242
2243 Custom-build workout: 80 different feature-selection combinations:
2244  . Fixed yesterday's change for NOSPL: ckcfns.c.
2245  . Fixed conflict between NORECALL and USE_ARROWKEYS: ckucmd.c.
2246  . Moved setseslog() from ckuus5.c to ckuusx.c to avoid link-time foulups.
2247  . Fixed an unguarded reference to zmkdir() in ckcftp.c.
2248  . Protected rmsg() by #ifndef NOXFER: ckuus7.c.
2249  . Protected initxlist() by #ifndef NOXFER: ckcmai.c.
2250  . Fixed unguarded references to g_url struct in xx_ftp(): ckuusy.c.
2251  . Fixed unguarded references to tt_snaws() in winchh(): ckutio.c.
2252
2253 --- 8.0.206 Beta.01 11 Oct 2002 ---
2254
2255 From Jeff, 16 Oct 2002:
2256  . Fix K95 RMDIR: ckcfn3.c.
2257  . Makefile targets for Red Hat 7.2, 7.3, 8.0: ckuver.h, makefile.
2258  . Added \v(log_xxx) for each kind of log for PeterE: ckuusr.h, ckuus4.c.
2259  . Added SET TERM ATTRIBUTE DIM { ON, OFF }: ckuus[27].c.
2260  . Change "const" to "CONST" in some PAM declarations.  ckufio.c.
2261
2262 Added SET MATCH { DOTFILE, FIFO } { ON, OFF }.  A FIFO special file is a named
2263 pipe, used for interprocess communication.  It must be opened at both ends, so
2264 it's silly to match them by default; opening a FIFO and attempting to read
2265 will block forever unless somebody is writing into the other end.  Made the
2266 MATCH FIFO default OFF in all cases.  The dotfile default is the same as
2267 always (OFF for UNIX, ON elsewhere); SET MATCH DOTFILE is simply a more
2268 untuitive and findable command than SET WILD KERMIT /MATCH-DOT-FILES.  Note
2269 that SET MATCH DOTFILE undoes SET OPTIONS DIRECTORY /[NO]DOTFILES, and vice
2270 versa.  ckcmai.c, ckuusr.h, ckuus[23].c, ckufio.c. 17 Oct 2002.
2271
2272 Added client and server end of REMOTE SET MATCH { DOTFILE, FIFO } { ON, OFF }.
2273 The new protocol codes are 330 and 331, respectively.  ckuus[367].c, ckcfns.c,
2274 17 Oct 2002.
2275
2276 Adjusted the "match dot if pattern starts with dot" heuristic in nzxpand()
2277 to not kick in if the filespec is "./foo".  This probably needs more work.
2278 ckufio.c, 17 Oct 2002.
2279
2280 Fixed typo in transcribing Jeff's ckcfn3.c code from yesterday.  18 Oct 2002.
2281
2282 Moved some help text out of #ifdef ANYSSH that had nothing to do with SSH.
2283 (Idea for a new EMACS feature: M-X list-ifdef-environment.)
2284 ckuus2.c, 18 Oct 2002.
2285
2286 Removed "set file { permission, protection }" keywords, which led nowhere.
2287 ckuus7.c, 18 Oct 2002.
2288
2289 Added -DSV68 to all SV/68 targets.  Make ckgetfqhostname() just return its
2290 argument in SV/68; it dumps core otherwise.  In case this happens anywhere
2291 else, add -DNOCKGETFQHOST to CFLAGS.  makefile, ckcnet.c, 18 Oct 2002.
2292
2293 For PeterE, added SET { SEND, RECEIVE } PERMISSIONS { ON, OFF } so incoming and
2294 outbound permission attributes can be set separately. ckuus[27].c, 18 Oct 2002.
2295
2296 Changed SHOW ATTRIBUTES to show In and Out permissions separately.
2297 ckuus5.c, 18 Oct 2002.
2298
2299 Fixed REDO to display the command it's redoing and to add it to the bottom
2300 of the recall buffer.  ckuusr.c, 18 Oct 2002.
2301
2302 Discovered that DATE SATURDAY dumps core...  Apparently it always did; this
2303 case was not included in the date-time torture test script.  The crash happens
2304 because the DATE parsing code doesn't check for a NULL date-converion
2305 error-message pointer.  Fixed in ckuusr.c, 18 Oct 2002.
2306
2307 The reason DATE SATURDAY got a date-conversion error was that this path thru
2308 the code left a result pointer unset.  Fixed in cmcvtdate(): ckucmd.c,
2309 19 Oct 2002.
2310
2311 DATE SUNDAY +1DAY returned incorrect results (for any day-of-week name, any
2312 delta time), even though DATE TODAY +1DAY worked fine.  Fixed in cmcvtdate():
2313 ckucmd.c, 19 Oct 2002.
2314
2315 SET TAKE ECHO ON counted each line twice when GOTO was active.  Fixed in
2316 dogoto(): ckuus6.c, 19 Oct 2002.
2317
2318 Jeff noticed:
2319 "KERMIT READY TO GET...
2320  RCVD: (2 files) Last: [/amd/prost/p/kd/jaltman/.src/ckonet.c] (OK)
2321 the last file attempted may have been ckonet.c but it certainly was
2322 not the last file received" (similarly for sending).  Fixed by having two
2323 pointers for each name; a preliminary pointer, which is set for each file at
2324 the beginning of the transfer (when we have all the needed info), and a final
2325 one that is set from the preliminary one only after the file was transferred
2326 successfully.  This corrects not only the automatic "wheremessage" at the end
2327 of a remote-mode transfer, but also the WHERE and SHOW FILE command results.
2328 ckuusx.c, ckcfn[s3].c, ckcpro.w, 19 Oct 2002.
2329
2330 From Jeff: Improve ORIENTATION message for K95 to say which directories are
2331 for which INI files.  ckuusr.c, 23 Oct 2002.
2332
2333 Removed Beta designation from herald.  ckcmai.c, 23 Oct 2002.
2334
2335 Put final dates and ID strings in Unix and VMS build procedures.
2336 Makefile, ckvker.com, 23 Oct 2002.
2337
2338 Build-all...  #ifdef adjustments: ckcfns.c...  83 different feature-set
2339 combinations build OK on Linux.  23 Oct 2002.
2340
2341 From Jeff: SET WIN95 HORIZONTAL-SCAN-LINE-SUBSTITUTIONS.  ckuusr.h, ckuus7.c,
2342 24 Oct 2002.
2343
2344 Fixed Heath-19 graphic character-set table to use new Unicode 3.1 values
2345 if WIN95 HORIZ OFF.  ckcuni.c, 24 Oct 2002.
2346
2347 Changed tx_usub() to return Unicode 3.1 values if WIN95 HORIZ OFF.
2348 ckcuni.c, 24 Oct 2002. <-- No backed off on this.
2349
2350 Some problems during build-all:
2351
2352  . VMS 7.1 TGV 4.2: If I make a Telnet connection with it, then try to send
2353    a file (itself. wermit.exe) over the connection, the connection drops
2354    after about 20%, the thermometer zooms out to 100% and SUCCESS is reported.
2355    This doesn't happen with UCX.
2356
2357  . VMS 7.3 TGV 4.3: ckcmai.c won't compile because of a complaint about the
2358    declaration of select() (which ckcmai.c doesn't use) in
2359    SYS$COMMON:[SYSLIB]DECC$RTLDEF.TLB.  Ditto in VMS 7.2 TGV 4.3.
2360    Adding NOSELECT to CFLAGS doesn't help.  I don't think the VMS version
2361    even uses select().  But the TGV 4.3 builds were OK in 8.0.201, so what
2362    changed?  I don't see anything in ckcnet.h that would have done it.
2363
2364 It builds OK with VMS 7.1 / TGV 4.2 but sending files on Telnet connections
2365 fails in a strange way: the connection drops, but the thermomoter goes to 100%
2366 and success is reported.  I don't know why the connection is dropping (s_errno
2367 is 32 == "broken pipe"), but the spurious success indication is because of
2368 a double failure in sdata(): (1) The packet-sending loop index could go
2369 negative without breaking the loop when streaming; (2) if spack() fails,
2370 sdata() should return -2, not -1 (which means EOF).  Also if any ttchk() in
2371 sdata() returns < 0, sdata should return -2.  I fixed this code (which has
2372 been this way for YEARS) and now VMS C-Kermit properly fails when it gets
2373 the spack() error, but ttchk() in this case still doesn't think the connection
2374 is lost, but that must be our new problem with MultiNet.  ckcfns.c,
2375 27 Oct 2002.
2376
2377 The compilation failure in ckcmai.c is a clue...  The problem was that I added
2378 #ifdef VMS / #include <time.h> / #endif to shut up complaints about the time()
2379 call.  Evidently something in VMS <time.h> gives MultiNet a bad case of
2380 indigestion; removing it fixes the compilation and the result works fine.  The
2381 transmission failures in the other case seem to be a coincidence -- something
2382 to do with the U of Arizona (probably some obscure VMS quota on my IDs there,
2383 or some kind of network connection throttling), since it doesn't happen
2384 anywhere else.  ckcmai.c, 27 Oct 2002.
2385
2386 Changed four occurrences of "void" to "VOID" in ckcftp.c, 27 Oct 2002.
2387
2388 Defined NOCKFQHOSTNAME for HPUXPRE65.  Might also need this for HP-UX 7
2389 and maybe 8.  ckcnet.c, 27 Oct 2002.
2390
2391 From Jeff: PAM_CONST definition to clear up warnings caused by different
2392 vendors' definitions of PAM structs.  ckufio.c, 28 Oct 2002.
2393
2394 Unixware 2.1.0 build bombs immediately with "UX:make: ERROR: line too long"
2395 (which line?)  Not worth chopping up the makefile to fix but in a pinch it
2396 could be done.  2.1.3 builds OK.
2397
2398 Did another 20-some platform builds, bringing the total to 83, plus a final
2399 runthrough of the build-with-84-different-feature-set-combinations script on
2400 Linux.  Should be good to go!
2401
2402 --- 8.0.206 24 Oct 2002 ---
2403
2404 Finally got access to Linux on IA64 again.  Builds OK but dumps core
2405 immediately on startup.  Adding -DNOCKGETFQHOST was necessary but not
2406 sufficient.  In this case, the very call to ckgetfqhostname() from ckhost()
2407 (which is in ckuusx.c) was dumping core; thus I had to move the definition of
2408 NOCKGETFQHOST from ckcnet.c to ckcdeb.h, add an #ifdef __ia64__ clause to it,
2409 and protect the call to ckgetfqhostname() with it.  Obviously there has to be
2410 a better fix but this will have to for now.  ckcnet.c, ckuusx.c, ckcdeb.h,
2411 31 Oct 2002.
2412
2413 Link step fails in Mandrake 9.0 with undefined references to res_search,
2414 dn_expand, and crypt.  Turns out the linux makefile target tests for the
2415 existence of libcrypt.a and libresolv.a, but in Mandrake 9.0 they exist
2416 only as *.so.  Changed linux target to look for both.  makefile, 1 Nov 2002.
2417
2418 Vace reported that "ftp mget a b c" would get ALL files from the server's
2419 directory if c did not exist.  Diagnosis: off-by-one error in counting MGET
2420 args processed.  Naturally fixing this bug revealed another (this time
2421 cosmetic) one, which resulted in spurious error messages when hitting MGET
2422 args that have no match on the server.  Fixed in ckcftp.c, 1 Nov 2002.
2423
2424 Rebuilt about 60 of the most important Unix binaries to pick up the fixes
2425 31 Oct - 1 Nov 2002, and refreshed the FTP site with new sources, tarballs,
2426 ZIP files, etc.  Sat Nov  2 19:11:30 2002
2427
2428 From Martin Vorlaender and Jeff, SSL/TLS support for VMS:
2429 ckuusr.h, ckuath.h, ckcnet.c, ckctel.c, ckuath.c, 10 Nov 2002.
2430
2431 Added PASV as invisible synonym for PASSIVE.  ckcftp.c, 10 Nov 2002.
2432
2433 --- 8.0.206 24 Oct 2002 #2 ---
2434
2435 More work on SSL in VMS: Jeff + Martin Vorlaender: ck_ssl.c ckcmai.c ckcnet.c
2436 ckctel.c ckuath.h ckvcon.c ckvtio.c ckvker.com 10-15 Nov 2002.
2437
2438 Discovered that ckvfio.c would not compile on VMS 6.1 with UCX 4.1 because 
2439 <conv$routines.h> was missing, which is explicitly included.  Enclosed the
2440 #include in #ifdef NOCONVROUTINES..#endif and rebuilt with
2441 @[users.fdc.src]ckvker.com "" "" "NOCONVROUTINES".  16 Nov 2002.
2442
2443 Fixed the "ftp mget */data/*" problem with two small changes to doftpget():
2444 ckcftp.c, 16 Nov 2002.  Placed a copy of ckcftp.patch in ~kermit/f.
2445
2446 From Lucas Hart: Fixes for VAX C 2.x and CMU TCP/IP.  "Can't guarantee that
2447 the revised CKVOLD will work for all combinations of more recent
2448 VMS/compiler/TCPIP releases, but I've tested it for compatibility on our AXP
2449 VMS 6.2, UCX 4.0, DECC 5.6, your AXP VMS 7.1, DEC TCPIP 5.1, DECC 6.0 as well
2450 as with VAX VMS 5.4, VAX C 3.2, CMU12 and VAX VMS 4.7, VAX C 2.4."  ckvfio.c,
2451 ckvtio.c, ckuus5.c, ckvker.com, ckvold.com, 17 Nov 2002.
2452
2453 From Jeff: More work on VMS SSL.  Now it actually works, even in CONNECT mode,
2454 except it hangs when it gets an error alert or the remote closes the
2455 connection.  ckcnet.c. ckvtio.c, 17 Nov 2002.
2456
2457 NOTE: Lucas's changes should go into the 8.0.206 source code but it's too
2458 late since ckvtio.c (upon which he based his changes) is already full of
2459 SSL code.
2460
2461 MGET in K95 in totally broken FOR SOME PEOPLE (mainly me) if the TMP (or TEMP)
2462 value is too long.  It works fine if you set these to C:\TMP.  Diagnosis: (1)
2463 we were malloc'ing only 16 bytes for the temp file name (I think this was my
2464 fault -- I was only looking at the "ckXXXXXX" part and forgetting that this
2465 was appended to the TMP path); (2) the Windows version of mktemp() wants you
2466 to use the value pointed to by the pointer it returns, rather than assuming
2467 the mktemp() arg will be modified in place.  The code was changed to malloc a
2468 longer string and to use the return value from mktemp() (if any) rather than
2469 assuming that mktemp() modified its argument string (in K95 only -- not sure
2470 about Unix platforms; the man pages differ on this, but at least this way if
2471 some mktemp() version does NOT alter its argument, we still have a usable
2472 filename (like /tmp/ckXXXXXX)).  Of course this won't be good for recursive
2473 MLSD downloads, but we can always issue patches for the Unix version later if
2474 needed.  The Linux and BSD versions use mkstemp() anyway.  There is, however,
2475 a danger of a memory leak in the Unix version if the user has defined a TMPDIR
2476 or CK_TMP environment variable whose value is longer than 9 bytes.  All this
2477 is highly unlikely so we should be OK.  ckcftp.c, 17 Nov 2002.
2478
2479 --- K95 2.1.1 and updated ck[uv]206.{tar,zip} but not C-Kermit binaries ---
2480
2481 From Jeff: Fixes for Telnet Com Port Control, update to a newer release of
2482 OpenSSL: ck_ssl.c ck_ssl.h ckcdeb.h ckcftp.c ckcmai.c ckcnet.c ckctel.c
2483 ckuath.c ckuath.h ckucns.c ckuus4.c ckuus5.c ckuusr.c ckuusr.h ckvcon.c
2484 ckvfio.c ckvker.com ckvtio.c ckvvms.h, 25 Nov 2002.
2485
2486 --- K95 2.1.2 and C-Kermit 8.0 CDROM ---
2487
2488 From Jeff, 28 Nov 2002:
2489  . Updated SSL modules: ck_ssl.[ch].
2490  . Fixed cipher-list display in SHOW AUTH & FTP ssl_auth(): ckuus7.c. ckcftp.c
2491  . Some minor tn_wait() fixes: ckctel.c.
2492  . Preliminary SSL support for VMS CONNECT: ckvcon.c.
2493
2494 Bumped C-Kermit edit number to 207.
2495
2496 From Jeff, 29 Nov 2002: "[C-Kermit was dumping core on SCO OSR5 Telnet Com Port
2497 connections because] the SCO compiler treats all characters as signed.  This
2498 was causing 'sprintf(buf,"02x ",ch);' to produce strings such as "ffffffc2"
2499 instead of "c2" for values between 128 and 255.  This wrote beyond the end of
2500 a buffer and blew away the stack.  Having fixed this I also noticed that
2501 conect() did not properly check for carrier when TN CPC was negotiated.  This
2502 has now been fixed as well."  ckucns.c, ckucon.c, ckctel.c, 29 Nov 2002.
2503
2504 From Jeff, 30 Nov 2002: Fix SSL for VMS and also carry forward the CPC fixes
2505 to VMS.  ckcnet.c, ckvtio.c, ckvcon.c, 30 Nov 2002.
2506
2507 Changed copyright dates that are displayed (but not yet all the internal
2508 ones) from 2002 to 2003.  ckcmai.c, 3 Jan 2003.
2509
2510 Fixed the FTP module's brief-format transaction log, which had the status
2511 inverted: OK for FAILED and v.v.  ckcftp.c 3 Jan 2003.
2512
2513 From Jeff, 4 Jan 2003:
2514  . Make /MOVE-TO:xxx convert xxx to full pathname: ckuus[r67].c,
2515  . Make SHOW OPTIONS ALL show both kinds of options: ckuus2.c.
2516  . More command-line personalities: ckcmai.c, ckuusy.c.
2517  . New NOSCROLL command for K95: ckuusr.[ch], ckuus2.c.
2518  . New lockdown and other command-line options: ckuusr.h, ckuusy.c.
2519  . SSL interface updated to OpenSSL 0.9.7: ck_ssl.c.
2520  . SET TERM LINE-SPACING and CURSOR xxx NOBLINK: ckuus[27]c.
2521  . Expanded SHOW GUI command: ckuus3.c
2522  . New SHOW TABS code: ckuus5.c.
2523
2524 Updated SUPPORT (BUG), NEWS, and INTRO texts.  ckuus[26].c. 5 Jan 2003.
2525
2526 Fixed FTP module to suppress "'FEAT': Command not understood" message
2527 unless FTP DEBUG is ON.  ckcftp.c, 6 Jan 2003.
2528
2529 Got a report that C-Kermit dumps core on Solaris when executing a certain
2530 script.  Seems to be related to changing vnambuf[] in zzstring() from an
2531 automatic array to a malloc'd buffer (see notes from 29 Jun 2000).  Changed
2532 it to an automatic buffer except for K95.  ckuus4.c, 6 Jan 2003.
2533
2534 Nope, that's not it.  It evidently happens only after FTP PUT has been used.
2535 Fixed solaris9g makefile target to include -funsigned-char and built a new
2536 binary.  Determined that building with gcc and -funsigned-char makes no
2537 difference.  makefile, 7 Jan 2003.
2538
2539 I did a preliminary audit, looking at the items in the left column: if used in
2540 a given routine, are there any obvious mistakes:
2541
2542                        1        2          3           4              5
2543                    doftpput->putfile->sendrequest->doftpsend2->secure_write
2544 malloc                OK       OK         OK          OK             OK
2545 makestr               OK       OK         OK          OK             OK
2546 automatic arrays      OK       OK         OK          OK             OK
2547 [ck]str[n]cpy         OK       OK         OK          OK             OK
2548 [ck]str[n]cat         OK       OK         OK          OK             OK
2549 sprintf               OK       OK         OK          OK             OK
2550 nzltor                OK       OK         OK          OK             OK
2551 zfnqfp                OK       OK         OK          OK             OK
2552 memcpy                OK       OK         OK          OK             OK
2553 bcopy                 OK       OK         OK          OK             OK
2554
2555 secure_write sends the data directly on clear-text connections.  On secure
2556 connections, it calls secure_putbuf(), which calls secure_putbyte(), but we
2557 aren't using those, so secure_write() is the end of the call chain for FTP
2558 PUT.  doftpsend2 has buf[] as an automatic array, which it reads file data
2559 into using zxin (binary mode only), but this looks OK.  Still, I changed it
2560 read 1 less than the buffer size (fread) just in case.  Also there was one
2561 debug() statement that referred to an automatic array (fullname[]) before it
2562 was initialized (but not used in this case), which I fixed.  ckcftp.c,
2563 7 Jan 2003.
2564
2565 FTP GET /RECURSIVE somepath/somefile still didn't work, despite what the
2566 notes of 19 Sep 2001 say.  There are so many paths through the code,
2567 depending on switch values, GET vs MGET, etc, that a crucial spot was missed.
2568 Fixed in doftpget(): ckcftp.c, 7 Jan 2003.
2569
2570 Back to the core dump...  after two days of full-time debugging, I found the
2571 culprit: the buffer-full test in the zzout() macro should have been ">="
2572 rather than just ">", thus Kermit wrote 1 byte past the end of the malloc'd
2573 FTP PUT output buffer, ucbuf.  Why did it never happen in K95?  Because, since
2574 it's a secure build, FUDGE_FACTOR is defined there.  But it's not defined in
2575 Solaris or other clear-text builds.  Although the crash wouldn't happen in
2576 secure builds, the 1-byte leak might have caused errors in the data transfer.
2577 In non-Solaris clear-text builds, like Linux, I suspect that malloc() tends
2578 add something for safety (especially given the man page statement that it
2579 allocates "at least" what you asked for).  Another reason the problem escaped
2580 notice is that zzout() is used only for text-mode PUTs (and then only when
2581 there is no character-set translation), but most transfers these days are
2582 binary and/or downloads.  Anyway, in the course of debugging, a lot of small
2583 cleanups were done: sizeof(blah) for all arrays was replaced by the same
2584 symbolic size that was used to allocate the array, numeric array sizes were
2585 replaced with symbolic ones, etc.  The real fix is one character long.
2586 ckcftp.c, 9 Jan 2003.
2587
2588 Got a report that "mget /recursive */somedir/*" downloaded the files into
2589 the current directory, rather than re-creating the remote directory structure.
2590 Fixed in doftpget(): ckcftp.c, 10 Jan 2003.
2591
2592 Unix C-Kermit did not allow file transfer if started under inetd and accessed
2593 via Internet raw socket (or whatever).  Diagnosis: isatty() and friends would
2594 fail causing ttopen() to fail.  Fixed by adding escape clauses for "-l 0"
2595 situations (i.e. Kermit invoked with an already-open file descriptor) at the
2596 appropriate places.  ckcmai.c, ckutio.c, 14 Jan 2003.
2597
2598 From Jeff for K95 2.1.3
2599  . Add test for startflags & 128 to trap() for ignoring BREAK.
2600  . Fix for SHOW TRANSMIT.
2601
2602 --- K95 2.1.3 ---
2603
2604 FTP USER, FTP ACCOUNT, plus the various prompts and switches for FTP username,
2605 password, and account all neglected to strip quotes, and in most cases quotes
2606 are necessary to specify a username that contains spaces.  ckcftp.c,
2607 15 Jan 2003.
2608
2609 FTP MPUT f1 f2 f3... gets a parse error if any of the fn's do not match an
2610 existing file.  This is bad for scripts.  In doftpput(), cmfdb() looks for
2611 keywords (switches) or CMIFI.  When it hits CMIFI, it exits from the initial
2612 parse loop and then does additional cmifi()s in a loop until done.  The most
2613 obvious fix is to parse each field with cmfdb(CMIFI,CMFLD), i.e. fall back to
2614 CMFLD if CMIFI doesn't match anything.  Then if CMFLD was used, we don't add
2615 the filespec to the list.  This is a rather big change but it seems to work.
2616 No error messages or failures happen for non-matching fields, but an error
2617 message is printed (and the MPUT command fails) if none of the fields match
2618 any files.  This fix got in too late for 2.1.3; workaround: use C-Shell
2619 like wildcard list (ftp mput "{*.abc,foo.*}").  ckcftp.c, 16 Jan 2003.
2620
2621 GREP did not pass its pattern through the expander, thus variables could
2622 not be used for patterns.  This must have been an oversight -- I can't find
2623 anything in my notes about it.  Fixed in dogrep(): ckuus6.c, 24 Jan 2003.
2624
2625 New makefile target for HP-UX 11.xx with OpenSSL from Tapani Tarvainen.
2626 makefile, 31 Jan 2003.
2627
2628 From Jeff:
2629  . Avoid core dump when dereferencing tnc_get_signature(): ckuus4.c.
2630  . Bump version numbers to 8.0.208, 2.1.4: ckcmai.c.
2631
2632 Added /NOLOGIN to FTP [OPEN].  ckcftp.c, 10 Feb 2003.
2633
2634 Don't dump core if FTP DEBUG is ON and FTP OPEN does not include a service.
2635 openftp(): ckcftp.c, 10 Feb 2003.
2636
2637 HELP PATTERN text incorrectly identified commands and functions with
2638 floating and anchored patterns.  The corrected lists are:
2639 Floating: GREP, TYPE /MATCH:, /EXCEPT: patterns, \farraylook(),
2640 Anchored: IF MATCH, file-matching wildcards, \fsearch(), \frsearch()
2641 ckuus2.c, 10 Feb 2003.     
2642
2643 INPUT n \fpattern(xxx) did not work for case-independent comparisons.
2644 Fixed in doinput(): ckuus4.c, 10 Feb 2003.
2645
2646 It seems \fpattern() didn't work with MINPUT at all.  There was no code to
2647 handle \fpattern() in the MINPUT parse loop, so it never worked.  The code
2648 had to be totally rewritten to use cmfld() in a loop, rather than cmtxt()
2649 and then cksplit().  Furthermore, whenever any of the fields was an
2650 \fjoin(), this had to be split.  ckuusr.c, 10 Feb 2003.
2651
2652 Macro replacement via \m() and \fdefinition() does not work as advertised
2653 (i.e. case sensitively) for associative array elements; e.g. \m(xxx<abc>) is
2654 treated the same as \m(xxx<ABC>), contrary to section 7.10.10 of the C-Kermit
2655 7.0 update notes, and to the fact that the two really do exist separately.
2656 Fixed by adding a static function isaarray(s) which succeeds if s is an
2657 associative array reference and fails otherwise, and then having \m()
2658 and \fdef() call mxxlook() (case-sensitive lookup) if isaarray(), otherwise
2659 (as before) mxlook()).  ckuus4.c, 11 Feb 2003.
2660
2661 Fixed FTP OPEN to allow the /USER switch to override SET FTP AUTOLOGIN OFF,
2662 just as /NOLOGIN overrides SET FTP AUTOLOGIN ON.  ckcftp.c, 11 Feb 2003.
2663
2664 In K95, "set key \1234 \27H" (any SET KEY command in which the first char of
2665 the definition was backslash, and the ONLY character after the backslash
2666 quantity was an uppercase letter, that letter would be lowercased).  Diagnosis:
2667 xlookup() poking its argument (see notes from July 2000).  Jeff sent a fix.
2668 ckucmd.c, 15 Feb 2003.
2669
2670 Ran my S-Expression torture test to make sure Sexps still worked.  They do,
2671 except the bitwise & and | operators were broken, e.g. (& 7 2) and (| 1 2 4)
2672 get "Invalid operand" errors.  Jeff's code had added an early failure return
2673 from the lookup loop when when a single-byte keyword matched a keyword that
2674 started with the same byte but was more than one byte long.  So "&" would hit
2675 "&&" and fail instead of continuing its search (xlookup tables aren't sorted
2676 so there can be no early return).  Fixed in xlookup(): ckucmd.c, 16 Feb 2003.
2677
2678 Got rid of "krbmit" target from makefile.  It's still there, but we don't
2679 use it any more.  All secure targets now use "xermit", and produce a binary
2680 called wermit, just like the regular ones do (except the old ckucon.c ones).
2681 Non-secure targets, since they don't define any of the security symbols,
2682 wind up compiling and linking to (mostly) empty security modules.  makefile,
2683 15 Feb 2003.
2684
2685 Added \fcvtdate(xxx,3) to format its result in MDTM format (yyyymmddhhmmss,
2686 all numeric, no spaces or punctuation).  Of course these numeric strings
2687 are too big to be 32-bit numbers and are useless for arithmetic, but they're
2688 useful for lexical comparison, etc.  ckuus[24].c, 16 Feb 2003.
2689
2690 The following FTP commands did not set FAILURE when they failed: RMDIR,
2691 CD, CDUP, Fixed in the corresponding doftpblah() routines.  ckcftp.c,
2692 16 Feb 2003.
2693
2694 RENAME would sometimes not print an error message when it failed, e.g. in K95
2695 when the destination file already existed.  ckuus6.c, 17 Feb 2003.
2696
2697 Fixed COPY error messages, which did not come out in standard format when
2698 /LIST was not included.  ckuus6.c, 17 Feb 2003.
2699
2700 Fixed #ifdefs in ck_crp.c to allow nonsecure builds on old platforms like
2701 System V/68 R3.  19 Feb 2003.
2702
2703 Similar treatment for ck_ssl.c.  20 Feb 2003.
2704
2705 From Jeff, 21 Feb 2003:
2706  . AIX53 and AIX52 symbols for ckcdeb.h, makefile.
2707  . New gcc targets for various AIX 4.x/5.x versions: makefile.
2708  . Copyright date updates: ck_crp.c, ck_ssl.c.
2709  . ENABLE/DISABLE QUERY broken because keyword table out of order: ckuusr.c.
2710  . Fixed the use of HTTP proxies for HTTP [RE]OPEN for Unix: ckcnet.c.
2711
2712 Also for K95 only: Allow file transfer when K95 is invoked on the remote end
2713 of a connection to a Pragma Systems Terminal Server connection; automatically
2714 SET EXIT HANGUP OFF when invoked with open port handle ("k95 -l nnnn").
2715
2716 "cd a*" failed even when "a*" matched only one directory.  Fixed in cmifi():
2717 ckucmd.c, 21 Feb 2003.
2718
2719 In the Unix version, replace "extern int errno;" with "#include <errno.h>"
2720 if __GLIBC__ is defined, since glibc now defines a thread-specific errno.
2721 ckcdeb.h, 26 Feb 2003.
2722
2723 Added #ifdefs to skip compilation of ckuath.c in nonsecure builds.  Tested
2724 by building both secure and regular versions in Linux.  ckuath.c, 26 Feb 2003.
2725
2726 Ran the build-in-84-different-configurations script on Linux to make sure it
2727 still builds with all different combinations of feature selection options.
2728 All OK.  26 Feb 2003.
2729
2730 Built on VMS.  Needed to add a prototype for mxxlook*() to ckuusr.h; built
2731 OK otherwise.  26 Feb 2003.
2732
2733 From Jeff: More #ifdef shuffling for nonsecure builds: ckuath.c, ck_ssl.c,
2734 27 Feb 2003.
2735
2736 Added code to ensure \v(download) ends in a directory separator in Unix,
2737 Windows, and OS/2.  ckuus7.c, 27 Feb 2003.
2738
2739 Added code to K95 zfnqfp() to tack on directory separator when returning
2740 a directory name.  ckofio.c, 27 Feb 2003.
2741
2742 Somehow an old copy of ckuath.c popped to replace the new one.  Put the new
2743 one back.  28 Feb 2003.
2744
2745 From Jeff: Fix typo in my K95 zfnqfp() code from yesterday; fixes for handling
2746 UNCs uniformly, no matter which way their slashes are leaning.  ckofio.c,
2747 28 Feb 2003.
2748
2749 At Jeff Mezei's suggestion, separate text and binary mode open sequences
2750 for VMS session log.  ckvfio.c, 28 Feb 2003.
2751
2752 Added freebsd48 target for FreeBSD 4.8.  makefile, 1 Mar 2003.
2753
2754 Changed Mac OS X entries to include -DUSE_STRERROR.  makefile, 2 Mar 2003.
2755
2756 Fixed GETOK /GUI to evaluate its text argument.  ckuus6.c, 3 Mar 2003.
2757
2758 Jeff fixed the K95 Dialer QUICK dialog to (a) allow templates, and (b) have
2759 a Save-As option.  3 Mar 2003.
2760
2761 Jeff fixed a problem with the Xmodem-CRC checksum being crunched whenever
2762 there was a retransmission.  7 Mar 2003.
2763
2764 Added target/banner for Tru64 5.1B.  makefile, ckuver.h, 5 Mar 2003.
2765
2766 In Unix, the zcopy() routine (used by the COPY command) reset the user's umask
2767 to 0 for the remainder of the Kermit process lifetime.  The bug was in
2768 ckufio.c 8.0.194, 24 Oct 2002, and is fixed in ckufio.c 8.0.195, 6 Mar 2003.
2769 Of course this happened after building 155 C-Kermit 8.0.208 binaries.  (But
2770 before officially releasing 8.0.208.)
2771
2772 In the VMS version, changed:
2773
2774         while ((n--) && xx_inc(2) > -1) ;
2775 to:
2776         while ((n--) && xx_inc(2) >= 0) ;
2777
2778 to suppress the "...is being compared with a relational operator to a constant
2779 whose value is not greater than zero" warning.  ckvtio.c, 7 Mar 2002.
2780
2781 Added a debug call to dologend in hopes of catching overzealous Locus
2782 switching, which seems to happen only in K95.  ckuus3.c, 7 Mar 2002.
2783
2784 Rebuilt binaries for some of the more current Unix releases: AIX 4.3.3-5.1,
2785 Solaris 7-9 , Red Hat 7.0-8.0, Slackware 8.1, Freebsd 4.7-4.8, NetBSD 1.6,
2786 OpenBSD 3.2, Unixware 7.1.3, Open Unix 8, OSR5.0.6a, etc.  A Unix binary with
2787 COPY umask fix shows a 6 Mar 2003 date for "UNIX File support" in SHOW
2788 VERSIONS; a binary without the fix shows 24 Oct 2002.
2789
2790 C-Kermit 8.0.208 dated 14 March 2003 released on 10 March 2003.
2791
2792 ---8.0.208---
2793
2794 From Jeff 13 Mar 2003:
2795  . Updated SSL module allows importation of tickets from host.
2796  . freebsd50+openssl target: makefile.
2797  . FTP PUT /PERMISSIONS error message for K95: ckcftp.c.
2798  
2799 Fixed MINPUT to strip quotes or braces from around targets (this was broken
2800 on Feb 10th).  Thanks to Jason Heskett for discovering and reporting this
2801 (killer) bug.  ckuusr.c, 14 Mar 2003.
2802
2803 Changed version number to 209 Dev.00.  ckcmai.c, 14 Mar 2003.
2804
2805 While debugging the alphapage script, I found that the command "minput 8 \6\13
2806 \21\13 \13\27\4\13 \30\13" gets "?Not confirmed" in 8.0.208 and 8.0.209, but
2807 not in 206 and earlier.  This problem too was introduced on Feb 10th by
2808 changing MINPUT parsing from cmtxt() followed by cksplit() to cmfld() in a
2809 loop.  cmfld() uses setatm() to return its result and of course setatm()
2810 breaks on \13.  Changing setatm() not to do this would break everything else.
2811 But cmfld() has no arguments that let us tell it to do anything different in
2812 this case.  Changing the API would be a disaster.  The only solution is to add
2813 an "MINPUT ACTIVE" (minputactive) global variable that tells cmfld() to tell
2814 setatm() not to break on CR.  Now MINPUT with braced targets containing CR
2815 and/or LF works in 209, 206, and 201 (but not 208).  ckucmd.c, ckuusr.c,
2816 ckuus5.c, 15 Mar 2003.
2817
2818 MINPUT n \fjoin(&a) works OK if all the members of \&a[] are text strings, but
2819 if they are strings of control chars (as above), they don't get separated by
2820 the spaces.  For example in:
2821
2822   dcl \&a[] = "\4\5" "\6\7" xxx
2823   minput 10 \fjoin(&a)
2824
2825 MINPUT gets two targets: "aaa" and "\4\5 \6\7 xxx".  The bug was in the
2826 cksplit() call in the \fjoin() case of MINPUT: it needed to specify an
2827 include set consisting of all the control characters except NUL.  ckuusr.c,
2828 16 Mar 2003.
2829
2830 But there's still a problem:
2831
2832   dcl \&a[] = "\4\5\13\10" "\6\7" "xxx"
2833
2834 creates an array whose first member is "^D^E (one doublequote included).  But
2835 if braces are used instead, there's no problem.  Same deal as MINPUT: cmfld()
2836 breaks on CR or LF, thus the end quote is lost.  If I set minputactive for
2837 DECLARE initializers too, that fixes it.  Is there any reason not to do this?
2838 Can't think of any (famous last words)...  ckuusr.c, 16 Mar 2003.
2839
2840 Since it has multiple applications, changed the flag's name from minputactive
2841 to keepallchars.  ckucmd.c, ckuus[r5].c, 16 Mar 2003.
2842
2843 \v(exedir) wasn't being set correctly (it included the program name as well
2844 as the directory).  Fixed in getexedir(): ckuus4.c, 16 Mar 2003.
2845
2846 SET CARRIER-WATCH <Esc> "auto matic" (spurious space in supplied keyword).
2847 Cosmetic only; it still worked.  Fixed in setdcd(): ckuus3.c, 16 Mar 2003.
2848
2849 "directory a b c" listed too many files -- all files whose names END WITH a,
2850 b, or c, rather than the files whose names WERE a, b, or c.  Diagnosis: The
2851 filespec is changed into a pattern: {a,b,c}, which is the correct form.  It is
2852 passed to nzxpand(), which goes through the directory getting filenames and
2853 sending each one to ckmatch() with the given pattern.  ckmatch() receives the
2854 correct pattern but then prepends a "*" -- that's not right.  It's not just
2855 in filename matching either.  The following succeeds when it shouldn't:
2856
2857   if match xxxxc {{a,b,c}} <command>
2858
2859 Changing ckmatch() to not prepend the "*" to each segment fixes the command
2860 above but breaks lots of others.  Running through the "match" torture-test
2861 script shows the problem occurs only when the {a,b,c} list is the entire
2862 pattern, and not embedded within a larger pattern.  Testing for this case
2863 fixed the problem.  ckmatch(): ckclib.c, 16 Mar 2003.
2864
2865 Fixed FTP MODTIME to not print anything if QUIET ON.  ckcftp.c, 16 Mar 2003.
2866
2867 Picked up a new ckuath.c from Jeff, not sure what the changes are. 16 Mar 2003.
2868
2869 Did a few regular and secure builds to make sure I didn't wreck anything.
2870
2871 Changed version number to 209 (final).  ckcmai.c, 16 Mar 2003.
2872
2873 Jason Heskett found another bug: if you define a macro FOO inside the
2874 definition of another macro BAR, and FOO's definition includes an odd number
2875 of doublequotes (such as 1), FOO's definition absorbs the rest of BAR's
2876 definition.  Example:
2877
2878   def TEST {
2879     .foo = {X"}
2880     sho mac foo
2881   }
2882   do test
2883   sho mac foo
2884
2885 Results in:
2886
2887   foo = {X"}, sho mac foo
2888
2889 Diagnosis: the TEST definition becomes:
2890
2891   def TEST .foo = {X"}, sho mac foo
2892
2893 and the macro reader is erroneously treating the doublequote as an open
2894 quote, and then automatically closes the quote at the end of the definition.
2895 The error is that a doublequote should be significant only at the beginning of
2896 a field.  But the macro reader isn't a command parser; it doesn't know what
2897 a field is -- it's just looking for commas and skipping over quoted ones.
2898 First we have to fix an oversight: SET COMMAND DOUBLEQUOTING OFF should have
2899 worked here, but it wasn't tested in this case.  Fixed in getncm(): ckuus5.c,
2900 17 Mar 2003.
2901
2902 There are only certain cases where it makes sense to treat doublequotes as
2903 signicant:
2904
2905  . An open quote must be at the beginning or preceded by a space.
2906  . A close quote is only at the end or else followed by a space.
2907
2908 This too was fixed in getncm(): ckuus5.c, 17 Mar 2003.
2909
2910 A fix from Jeff SSL/TLS FTP data decoding.  ckcftp.c, 18 Mar 2003.
2911
2912 Tried building C-Kermit on a Cray Y-MP with UNICOS 9.0.  "int suspend",
2913 declared in ckcmai.c and used in many modules, conflicts with:
2914
2915   unistd.h:extern int suspend __((int _Category, int _Id));
2916
2917 The "=Dsuspend=xsuspend" trick doesn't work for this; there is no way around
2918 the conflict other than to rename the variable: ckcmai.c, ckutio.c,
2919 ckuus[35xy].c.  26 Mar 2003.  VMS and K95 not affected.
2920
2921 OK that gets us past ckcmai.c...  Then in ckutio.c I had to add a new #ifdef
2922 around the LFDEVNO setting, because the Cray didn't have mkdev.h.  Could not
2923 find a Cray-specific manifest symbol, so I made a new makefile target (cray9)
2924 that sets this symbol.  Having done this I have no idea what kind of lockfile
2925 would be created, but I also doubt if anybody dials out from a Cray.  The
2926 binary should run a C90, J90, or Y-MP.  makefile, 26 Mar 2003.
2927
2928 Added a target for SCO OSR5.0.7.  makefile, ckuver.h, 30 Mar 2003.
2929
2930 Changed since 208:
2931 makefile ckuver.h ckcmai.c ckclib.c ckcftp.c ckucmd.c ckuus*.c ckutio.c.
2932
2933 ---8.0.209---
2934
2935 From Mark Sapiro, a fix for the March 17th doubleqote fix, getncm(): ckuus5.c,
2936 4 Apr 2003.
2937
2938 From Jeff, 29 Apr 2003:
2939  . Corrected target for HP-UX 11.00 + OpenSSL: makefile, 
2940  . Do not allow WILL AUTH before WONT START_TLS: ckctel.h ckctel.c
2941  . Add hooks for SFTP and SET/SHOW SFTP: ckcdeb.h ckuusr.h ckuusr.c ckuus3.c
2942  . Add SKERMIT ckuusr.h ckuusr.c
2943  . Add ADM-5 terminal emulation: ckuus7.c, ckuus5.c
2944  . Uncomment and update HELP SET SSH V2 AUTO-REKEY: ckuus2.c
2945  . Enable IF TERMINAL-MACRO and IF STARTED-FROM-DIALER for C-Kermit: ckuus6.c
2946  . Fix conflicting NOSCROLL keyword definition: ckuusr.h
2947  . Set ttname when I_AM_SSH: ckuusy.c
2948  . Add extended arg parsing for SSH, Rlogin, Telnet: ckuusy.c, ckuus4.c
2949  . Security updates: ckuath.c, ck_ssl.c
2950  . Change K95 version number to 2.2.0: ckcmai.c
2951  . Save K95 term i/o state before executing keyboard macro: ckuus4.c
2952  . Add tests for SSH Subsystem active during INPUT/OUTPUT/CONNECT: ckuus[45].c
2953  . Enable K95 SET SSH V2 AUTO-REKEY: ckuus3.c
2954
2955 SFTP and SET SFTP subcommands are implemented up to the case statements.
2956
2957 Files of mine that Jeff hadn't picked up:
2958   ckuver.h ckcftp.c ckutio.c ckuusx.c (just minor changes for last build-all)
2959
2960 On 4 Jan 2003, SET RECEIVE MOVE-TO was changed to convert is argument to an
2961 absolute path, which made it impossible to specify a relative path, then
2962 move to different directories and have it apply relatively to each directory.
2963 Changed this as follows:
2964
2965  . Parser uses cmtxt() rather than cmdir() so it won't fail at parse time.
2966  . If path is absolute, we fail at parse time if directory doesn't exist.
2967  . In reof() we run the the path through xxstring (again, in case deferred
2968    evaluation of variables is desired) and then, if not null, use it.
2969  . If the directory doesn't exist, rename() fails and reof() returns -4,
2970    resulting in a protocol error (this is not a change).  We do NOT create
2971    the directory on the fly. 
2972
2973 I also fixed SET SEND/RECEIVE RENAME-TO to parse with cmtxt() rather than
2974 cmdir(), since it's parsing a text template, not a directory name, e.g.
2975 "set receive rename-to file-\v(time)-v(date)-\v(pid)".  This was totally
2976 broken, since when I don't know.  We don't call xxstring() in this parse, so
2977 evaluation is always deferred -- I'd better not change this.  ckuus7.c,
2978 ckcfns.c, 1 May 2003.
2979
2980 From Jeff, Sat May  3 14:15:23 2003:
2981  . Pick up the right isascii definition for K95: ckctel.c
2982  . malloc...  ckuath.c (new safe malloc routines for K95)
2983  . Add author listing: ckuus5.c
2984  . SSH Heartbeat support (K95 only): ckuus[23].c
2985  . Prescan --height and --width to avoid window resizing at startup: ckuusy.c
2986  . Add checks for fatal() or doexit() called from sysinit(): ckuusx.c
2987  . Move some K95-specific definitions to ckoker.h: ckcdeb.h
2988  . Add support for ON_CD macro in zchdir(): ckufio.c
2989  . Add a command to let FTP client authenticate with SSLv2: ckcftp.c
2990  . Fix parsing of FTP file facts like "UNIX.mode": ckcftp.c
2991
2992 ON_CD will need some explaining (to be done).  It's implemented for Unix,
2993 VMS, WIndows, and OS/2.
2994
2995 The FTP file facts fix came from first exposure to the new OpenBSD FTP
2996 server: ftp://ftp7.usa.openbsd.org/pub/os/OpenBSD/3.3/i386/
2997 The period in "UNIX.mode" caused an erroneous word break, adding junk to
2998 the filename.
2999
3000 About the malloc changes, Jeff says "K95 is not behaving well in low memory
3001 environments.  I'm not sure that C-Kermit does much better.  The program does
3002 not crash but it certainly does not behave the way the user expects it to.
3003 I'm beginning to think that any malloc() error should be treated as fatal."
3004
3005 Not visible in these changes because it's in K95-specific modules: Jeff made
3006 SET ATTRIBUTES OFF and SET ATTRIBUTES DATE OFF apply to XYZMODEM transfers.
3007
3008 From Jeff, 11 May 2003:
3009  . Add support for SSH Keepalive to relevant SET command (K95): ckuus3.c
3010  . Reduce max overlapped i/o requests from 30 to 7 (K95): ckuus7.c
3011  . Don't call sysinit() in fatal(): ckuusx.c.
3012  . Some new conditionalizations for SSL module: ck_ssl.c
3013
3014 The doublequote-parsing fixes from March and April broke the SWITCH statement,
3015 which is implemented by internally defining, then executing, a macro.  If I
3016 drop back to the old dumb handling of doublequotes, everything is fixed except
3017 the problem of March 17th.  But can we really expect getncm() to pre-guess
3018 what the parser is going to do?  getncm()'s only job is to find command
3019 boundaries, which are represented by commas.  Commas, however, is needed IN
3020 commands too.  We take a comma literally if it is quoted with \, or is inside
3021 a matched pair of braces, parens, or doublequotes.  It is not unreasonable to
3022 require a doublequote in a macro definition to be prefixed by \ when it is to
3023 be taken literally.  The proper response to Jason Heskett's complaint of March
3024 17th should have been to leave the code alone and recommand an appropriate
3025 form of quoting:
3026
3027   def TEST {
3028       .foo = {X\"}
3029       sho mac foo
3030   }
3031
3032 And this is what I have done.  Another reason for sticking with the old method
3033 is that it's explainable.  The "improved" method, even if it worked, would be
3034 be impossible to explain.  Btw, in testing this I noticed that the switch-test
3035 script made 8.0.201 dump core.  Today's version is fine.  The problem with
3036 quoted strings inside of IF {...} clauses and FOR and WHILE loops is fixed
3037 too.  Perhaps "unbroken" would be a better word.  ckuus5.c, 11 May 2003.
3038
3039 Vace discovered that FTP MGET /EXCEPT:{... (with an unterminated /EXCEPT list)
3040 could crash Kermit.  Fixed in ckcftp.c, 11 May 2003.
3041
3042 CONTINUE should not affect SUCCESS/FAILURE status.  ckuusr.c, 11 May 2003.
3043
3044 Fixed an oversight that goes back 15 years.  While \{123} is allowed for
3045 decimal codes, \x{12} and \o{123} were never handled.  ckucmd.c, 11 May 2003.
3046
3047 Added support for Red Hat <baudboy.h> and /usr/sbin/lockdev.  Supposedly this
3048 allows Kermit to be installed without setuid or setgid bits and still be able
3049 to lock and use the serial device.  Compiles and starts, but not tested.
3050 ckcdeb.h, makefile, ckutio.c, ckuus5.c, 16 May 2003.
3051
3052 From Jeff: FTP ASCII send data to host when FTP /SSL was in use was broken.
3053 ftp_dpl is set to Clear when FTP /SSL is in use.  This was causing the data to
3054 be written to the socket with send() instead of the OpenSSL routines.
3055 ckcftp.c, ckuath.c, 21 May 2003.
3056
3057 From Jeff: Stuff for Kerberos 524: ckcdeb.h.  Fixes for FTP; "FTP ASCII send
3058 data did not properly compute the end of line translations.  On Unix (and
3059 similar platforms) the end of line was correct for no character sets but
3060 incorrect when character sets were specified.  On Windows/OS2, the end of line
3061 was correct when character sets were specified and incorrect when they were
3062 not.  On MAC, both were broken.  Also, FTP Send Byte counts were incorrect
3063 when character sets were specified."  ckcftp.c.  17 Jun 2003.
3064
3065 From Jeff: fixes to HTTP /AGENT: and /USER: switch action: ckcnet.c ckuus3.c
3066 ck_crp.c ckcftp.c ckuus2.c ckuusy.c ckuusr.c ckcnet.h, 21 Jun 2003.
3067
3068 From Jeff: Fix SET DIALER BACKSPACE so it can override a previous SET KEY
3069 (e.g. from INI file): ckuus7.c.  Some SSL/TLS updates: ck_ssl.c.  HTTP support
3070 for VMS and other VMS improvements (e.g. a way to not have to hardwire the
3071 C-Kerit version number into the build script) from Martin Vorlaender:
3072 ckcnet.h, ckuus[r3].c, ckcdeb.h, ckvtio.c, ckcnet.c, ckvker.com.  Built on
3073 Solaris (gcc/ansi) and SunOS (cc/k&r).  The new VMS script tests the VMS
3074 version and includes HTTP support only for VMS 6.2 or later.  2 Jul 2003.
3075
3076 Tried to build on our last VMS system but it seems to be dead.  Looks like a
3077 head crash (makes really loud noises, boot says DKA0 not recognized) (fooey, I
3078 just paid good money to renew the VMS license).  Tried building at another
3079 site with:
3080
3081   Process Software MultiNet V4.3 Rev A-X,
3082   Compaq AlphaServer ES40, OpenVMS AXP V7.3
3083   Compaq C V6.4-008 on OpenVMS Alpha V7.3
3084
3085 Had to make a few corrections to ckvker.com.  But still, compilation of
3086 ckcnet.c bombs, indicating that the SELECT definition somehow got lost
3087 somewhere since the 209 release (i.e. no SELECT type is defined so it falls
3088 thru to "SELECT is required for this code").  But I don't see anything in
3089 ckcdeb.h or ckcnet.[ch] that would explain this.  Not ckvker.com either
3090 (putting the old one back gives the same result).  OK, I give up, maybe it's
3091 just that I haven't tried building it on MultiNet recently.  What about UCX?
3092 Aha, builds fine there except for warnings about mlook, dodo, and parser in
3093 ckvfio.c (because of ON_CD) -- I suppose I have #include <ckucmd.h>... (done)
3094 Anyhow it builds OK and the HTTP code is active and almost works (HTTP OPEN
3095 works; HTTP GET seems to succeed but creates an empty file every time).  Tried
3096 building under MultiNet at another installation; same bad result.
3097
3098 OK so why won't it build for MultiNet?  Comparing ckcnet.c with the 209
3099 version, not a single #ifdef or #include is changed.  Tried building with
3100 p3="NOHTTP" -- builds OK, aha.  Where's the problem?  Not ckcnet.h...
3101 Not ckcdeb.h...  OK I give up, will revisit this next time I get time to
3102 do anything with the code.
3103
3104 Later Jeff said "Martin did not implement VMS networking for the HTTP code.
3105 All he did was activate the #define HTTP which happens to work because his
3106 connections are using SSL/TLS connections.  http_inc(), http_tol(), etc have
3107 no support for VMS networking regardless of whether it is UCX or MULTINET.
3108 The vast majority of HTTP connections are not secured by SSL/TLS.  It makes no
3109 sense to support HTTP on VMS until someone is willing to either do the work or
3110 pay have the work done to implement VMS networking in that code base."  So the
3111 fix is to not enable HTTP for VMS after all.  Removed the CKHTTP definition
3112 for VMS from ckcdeb.h, 6 Jul 2003.
3113
3114 Fixed ckvfio.c to #include <ckuusr.h> (instead of <ckucmd.h>) to pick up 
3115 missing prototypes.  6 Jul 2003.
3116
3117 From Arthur Marsh: solaris2xg+openssl+zlib+srp+pam+shadow and the corresponding
3118 Solaris 7 target.  makefile, 6 Jul 2003.
3119
3120 Remove duplicate #includes for <sys/stat.h>, <errno.h>, and <ctype.h> from
3121 ckcftp.c.  6 Jul 2003.
3122
3123 Add -DUSE_MEMCPY to Motorola SV/68 targets because of shuffled #includes in 
3124 ckcftp.c.  8 Jul 2003.
3125
3126 From Jeff: Fix problems mixing SSL and SRP without Kerberos.  Plus a few minor
3127 #define comment changes and a reshuffling of #defines in ckcdeb.h to allow me
3128 to build on X86 Windows without Kerberos.  ckcdeb.h, ck_crp.c, ckuath.c,
3129 10 Jul 2003.
3130
3131 From Jeff: updated ckuat2.h and ckuath.c, 29 Jul 2003.
3132
3133 Mats Peterson noticed that a very small Latin-1 file would be incorrectly
3134 identified as UCS-2 by scanfile().  Fixed in ckuusx.c, 29 Jul 2003.
3135
3136 Fixed ACCESS macro definition to account for the fact that FIND is now a
3137 built-in command.  ckermit.ini, 30 Jul 2003.
3138
3139 From Jeff: Fix for typo in urlparse() (svc/hos): ckuusy.c, 18 Aug 2003.
3140
3141 From Jeff: Redhat9 makefile targets (needed for for OpenSSL 0.9.7):
3142 makefile, 19 Aug 2003.
3143
3144 GREP /NOLIST and /COUNT did too much magic, with some undesirable fallout:
3145 "GREP /NOLIST /COUNT:x args" printed "file:count" for each file.  "GREP
3146 /COUNT:x /NOLIST args" did not print "file:count", but neither did it set the
3147 count variable.  Removed the magic.  Also one of the GREP switches,
3148 /LINENUMBERS, was out of order.  Fixed in ckuus6.c, 20 Aug 2003.
3149
3150 From Jeff: "Reorganizing code to enable building with different subsets of
3151 options; a few typos corrected as well."  ckcdeb.h, ckuver.h (for RH9),
3152 ckcnet.c, ckuus7.c, ckuus3.c: 24 Aug 2003.
3153
3154 Scanfile misidentified a big PDF file as text because the first 800K of it
3155 *was* text (most other PDF files were correctly tagged as binary).  Fixed
3156 by adding a check for the PDF signature at the beginning of the file.
3157 scanfile(): ckuusx.c, 25 Aug 2003.
3158
3159 Ditto for PostScript files, but conservatively.  Signature at beginning of
3160 file must begin with "%!PS-Ado".  If it's just "%!" (or something nonstandard
3161 like "%%Creator: Windows PSCRIPT") we do a regular scan.  Also added "*.ps"
3162 to all binary filename patterns.  ckuusx.c, 4 Sep 2003.
3163
3164 Ditto (but within #ifndef NOPCLSCAN) for PCL (<ESC>E) and PJL (<ESC>%) files,
3165 but no binpatterns (note: ".PCL" is the extension for TOPS-20 EXEC scripts).
3166 ckuusx.c, 4 Sep 2003.
3167
3168 Added comments about OpenSSL 0.9.7 to all linux+openssl targets.
3169 makefile, 4 Sep 2003.
3170
3171 From Jeff: Added - #define ALLOW_KRB_3DES_ENCRYPT.  When this symbol is defined
3172 at compilation Kermit will allow non-DES session keys to be used during Telnet
3173 Auth.  These session keys can then be used for Telnet Encrypt.  The reason
3174 this is not compiled on by default is that the MIT Kerberos Telnet does not
3175 follow the RFC for constructing keys for ENCRYPT DES when the keys are longer
3176 than 8 bytes in length.  ckuath.c, ckuus5.c, 4 Sep 2003.
3177
3178 "ftp mget a b c" succeeded if one or more of the files did not exist, even
3179 with "set ftp error-action proceed".  This is because the server's NLST file
3180 list does not include any files that don't exist, so the client never even
3181 tries to get them.  Fortunately, the way the code is structured, this one was
3182 easy to fix.  ckcftp.c, 14 Sep 2003.
3183
3184 From Jeff: Corrected code in ckcnet.c to ensure that Reverse DNS Lookups are
3185 not performed if tcp_rdns is OFF.  Fixed ck_krb5_getrealm() to actually return
3186 the realm of the credentials cache and not the default realm specified in the
3187 krb5.conf file.  Previously krb5_cc_get_principal() was not being called.
3188 Fixed ck_krb5_is_tgt_valid() to test the TGT in the current ccache and not the
3189 TGT constructed from the default realm.  ckcnet.c, ckuath.c, 14 Sep 2003.
3190
3191 Marco Bernardi noticed that IF DIRECTORY could produce a false positive if
3192 the argument directory had previously been referenced but then removed.  This
3193 is because of the clever isdir() cache that was added to speed up recursion
3194 through big directory trees.  Changed IF DIRECTORY to make a second check
3195 (definitive but more expensive) if isdir() succeeds, and changed the
3196 directory-deleting routine, ckmkdir(), to flush the directory cache (UNIX
3197 only -- this also should be done in K95 but it's not critical).  This was
3198 done by adding a routine, clrdircache() to ckufio.c, which sets prevstat
3199 to -1 and prevpath[0] to NUL.  ckcfn3.c, ckuus6.c, ckufio.c, 18 Sep 2003.
3200
3201 Marco reported the second fix still didn't work for him (even though it did
3202 for me).  Rather than try to figure out why, I concluded that the directory
3203 cache is just not safe: a directory found a second ago might have been deleted
3204 or renamed not only by Kermit but by some other process.  Why did I add this
3205 in the first place?  The log says:
3206
3207   Some debug logs showed that isdir() is often called twice in a row on the
3208   same file.  Rather than try to sort out clients, I added a 1-element cache
3209   to Unix isdir().  ckufio.c, 24 Apr 2000.
3210
3211 Experimentation with DIR and DIR /RECURSIVE does not show this happening at
3212 all.  So I #ifdef'd out the directory cache (see #ifdef ISDIRCACHE in ckufio.c;
3213 ISDIRCACHE is not defined) and backed off the previous changes: ckufio.c,
3214 ckcfn3.c, ckuus6.c, 28 Sep 2003.
3215
3216 From Jeff: Replace the compile time ALLOW_KRB_3DES_ENCRYPT with a run-time
3217 command SET TELNET BUG AUTH-KRB5-DES which defaults to ON: ckctel.[ch],
3218 ckuus[234].c, ck_crp.c, ckuath.c.  4 Oct 2003.
3219
3220 Allow DIAL RETRIES to be any positive number, and catch negative ones.
3221 Also added code to check for atoi() errors (e.g. truncation).  At least on
3222 some platforms (e.g. Solaris) atoi() is supposed to set errno, but it
3223 doesn't.  ckuus3.c, ckucmd.c, 4 Oct 2003.
3224
3225 Added /DEFAULT: to ASK-class commands (ASK, ASKQ, GETOK):
3226
3227  . For popups: no way to send defaults to popup_readtext() or popup_readpass().
3228  . For GUI ASK[Q], pass default to gui_txt_dialog().
3229  . For GUI GETOK, convert "yes" "ok" or "no" default to number for uq_ok().
3230  . For Text GETOK, add default to cmkey().
3231  . For Text ASK[Q], add default to cmtxt().
3232  . For GETC, GETKEY, and READ: no changes.
3233
3234 GETOK, ASK, and ASKQ with /TIMEOUT: no longer fail when the timer goes off
3235 if a /DEFAULT was supplied.  The GUI functions (uq_blah) don't seem to
3236 support timeouts.  Only the text version has been tested.  ckuus[26].c,
3237 4 Oct 2003.
3238
3239 From Jeff: add /DEFAULT: for popups.  ckuus6.c. 6 Oct 2003.
3240
3241 Change SET DIAL INTERVAL to be like SET DIAL RETRIES.  ckuus[34].c, 6 Oct 2003.
3242
3243 Added target for HP-UX 10/11 + OpenSSL built with gcc, from Chris Cheney.
3244 Makefile, 12 Oct 2003.
3245
3246 From Jeff, 6 Nov 2003:
3247  . #ifdef adjustments: ckcftp.c, ckcdeb.h
3248  . Fix spurious consumption of first byte(s) on Telnet connection: ckctel.c
3249  . Another HP PJL test for scanfile: ckuusx.c.
3250  . K95: Recognize DG4xx protected fields in DG2xx emulation: ckuus7.c.
3251  . Add SSLeay version display to SHOW AUTH command: ckuus7.c
3252  . Improved SET MOUSE CLEAR help text: ckuus2.c.
3253  . Improved Kverbs help text: ckuus2.c (+ new IBM-3151 Kverbs).
3254  . Some changes to ck_ssl.c, ckuath.c.
3255
3256 From PeterE, 10 Nov 2003:
3257  . Improved HP-UX 10/11 makefile targets for OpenSSL.
3258  . #ifdef fix for OpenSSL on HP-UX: ck_ssl.c.
3259
3260 Another new makefile from PeterE with improved and integrated HP-UX targets.
3261 12 Nov 2003.
3262
3263 A couple fixes to the solaris9g+krb5+krb4+openssl+shadow+pam+zlib target
3264 from Jeff.  Added a solaris9g+openssl+shadow+pam+zlib target.  makefile,
3265 21 Nov 2003.
3266
3267 From Jeff, 30 Nov 2003:
3268  . Fix SEND /MOVE-TO: ckuusr.c.
3269  . Fix K95 SET TITLE to allow quotes/braces around text: ckuus7.c.
3270  . Improved "set term autodownload ?" response: ckuus5.c.
3271  . Fix SHOW FEATURES to specify the protocol for encryption: ckuus5.c
3272  . Make {SEND, RECEIVE} {MOVE-TO, RENAME-TO} work for XYZMODEM (K95 only).
3273
3274 From Jeff: 7 Jan 2004:
3275  . At one point Frank started to add a timer parameter to the
3276    uq_txt() function but he only did it for the non-ANSI
3277    compilers.  I added it for the ANSI compilers, fixed the
3278    prototypes and provided a default value easily changed
3279    DEFAULT_UQ_TIMEOUT: ckcker.h, ckuus[36].c, ck_ssl.c, ckcftp.c, ckuath.c.
3280  . Fixed SET TERMINAL DEBUG ON (typo in variable name): ckuus7.c.
3281  . Fixed BEEP INFORMATION; previously it made no sound, now uses
3282    MB_ICONQUESTION.  ckuusx.c.
3283
3284 From Ian Beckwith <ian@nessie.mcc.ac.uk> (Debianization), 7 Jan 2004:
3285  . Search dir/ckermit for docs, as well as dir/kermit in cmdini(): ckuus5.c.
3286  . New linux+krb5+krb4+openssl+shadow+pam target (kitchen sink minus SRP,
3287    which Debian does not distribute): makefile.
3288  ? Mangles the DESTDIR support in makefile to install into a staging area:
3289    makefile (I didn't take this one yet).
3290
3291 Updated copyright notices for 2004, all modules.  7 Jan 2004.
3292
3293 Added INPUT /NOMATCH, allowing INPUT to be used for a fixed amount of time
3294 without attempting to match any text or patterns, so it's no longer
3295 necessary to "input 600 STRING_THAT_WILL_NEVER_COME".  If /NOMATCH is
3296 included, INPUT succeeds if the timeout expires, with \v(instatus) = 1
3297 (meaning "timed out"); fails upon interruption or i/o error.  ckuusr.h,
3298 ckuus[r24].c, 7 Jan 2004.
3299
3300 Added SET INPUT SCALE-FACTOR <float>.  This scales all INPUT timeouts by the
3301 given factor, allowing time-sensitive scripts to be adjusted to changing
3302 conditions such as congested networks or different-speed modems without
3303 having to change each INPUT-class command.  This affects only those timeouts
3304 that are given in seconds, not as wall-clock times.  Although the scale
3305 factor can have a fractional part, the INPUT timeout is still an integer.
3306 Added this to SHOW INPUT, and added a \v(inscale) variable for it.
3307 ckuusr.h, ckuus[r257].c, 7 Jan 2004.
3308
3309 undef \%a, \fverify(abc,\%a) returns 0, which makes it look as if \%a is a
3310 string composed of a's, b's, and/or c's, when in fact it contains nothing.
3311 Changed \fverify() to return -1 in this case.  ckuus4.c, 12 Jan 2004.
3312
3313 \fcode(xxx) returned an empty string if its argument string was empty.  This
3314 makes it unsafe to use in arithmetic or boolean expressions.  Changed it to
3315 return 0 if its argument was missing, null, or empty.  ckuus4.c, 12 Jan 2004.
3316
3317 Updated \verify() and \fcode() help text.  ckuus2.c, 12 Jan 2004.
3318
3319 While setting up IKSD, Ian Beckwith noticed that including the --initfile:
3320 option caused Kermit to start parsing its own Copyright string as if it were
3321 the command line, and eventually crash.  I couldn't reproduce on Solaris /
3322 Sparc but I could in Linux / i386 (what Ian is using) -- a change from Jeff
3323 on 28 Apr 2003 set the command-line arg pointer to a literal empty string in
3324 prescan() about line 1740 of of ckuus4.c; the pointer is incremented next
3325 time thru the loop, resulting in random memory being referenced.  Fixed by
3326 setting the pointer to NULL instead of "".  ckuus4.c, 12 Jan 2004.
3327
3328 declare \&a[999999999999999] would dump core on some platforms.  atoi()
3329 or whatever would truncate the dimension to maxint.  When we add 1 to the
3330 result, we get a negative number, which is used as an index, loop test, etc.
3331 Fixed both dodcl() and dclarray() to check for (n+1 < 0).  ckuus[r5].c,
3332 12 Jan 2004.
3333
3334 Unix zchki() would fail on /dev/tty, which is unreasonable.  This prevented
3335 FOPEN /READ from reading from the terminal.  zchki() already allowed for
3336 /dev/null, so I added /dev/tty to the list of specials.  Ditto for FOPEN
3337 /WRITE and zchko().  ckufio.c 13 Jan 2004.
3338
3339 Added untabify() routine to ckclib.[ch], 13 Jan 2004.
3340 Added FREAD /TRIM and /UNTABIFY.  ckuus[27].c, 13 Jan 2004.
3341 Added \funtabify().  ckuusr.h, ckuus[24].c, 13 Jan 2004.
3342
3343 Dat Nguyen noticed that (setq u 'p') followed by (u) dumped core.  This was
3344 caused by an over-clever optimization that skipped mallocs for short
3345 literals, but then went on later to try to free one that hadn't been
3346 malloc'd.  Fixed in dosexp(): ckuus3.c, 14 Jan 2004.
3347
3348 Catch another copyright date.  ckuus5.c, 14 Jan 2004.
3349
3350 Fixed SWITCH to work even when SET COMMAND DOUBLEQUOTE OFF (from Mark
3351 Sapiro).  ckuus5.c, 15 Jan 2004.
3352
3353 Changed version to 8.0.211 so scripts can test for recently added features.
3354 ckcmai.c, 15 Jan 2004.
3355
3356 Fixed a glitch in K95 "help set port".  ckuus2.c, 20 Jan 2004.
3357
3358 Fix from Jeff: Connections to a TLS-aware protocol which require a reconnect
3359 upon certificate verification failure could not reconnect if the connection
3360 was initiated from the command line or via a URL.  ckctel.c ckcmai.c
3361 ckuusr.c ckuus7.c ckuusy.c, 20 Jan 2004.
3362
3363 From Alex Lewin: makefile target and #ifdef for Mac OS X 10.3 (Panther):
3364 makefile, ckcnet.c, 7 Feb 2004.
3365
3366 Added KFLAGS to sco32v507 targets to make PTY and SSH commands work.  The
3367 same flags could probably also be added to earlier OSR5 targets but they
3368 have not been tested there.  makefile, 7 Feb 2004.
3369
3370 Checked a complaint that "LOCAL &a" did not make array \&a[] local.  Indeed
3371 it did not, and can not.  You have to use the full syntax in the LOCAL
3372 command, "LOCAL \&a[]", or else it doesn't know it's not a macro named &a.
3373 7 Feb 2004.
3374
3375 Fixed some confusion in creating IKSD database file and temp-file names.
3376 I was calling zfnqfp() without remembering that the path member of the
3377 returned struct included the filename, so to get just the directory name,
3378 I needed to strip the filename from the right.  ckuusy.c, 2 Mar 2004.
3379
3380 New ckuath.c, ck_ssl.c from Jeff.  2 Mar 2004.
3381
3382 Updated Jeff's affiliation in VERSION command text.  ckuusr.c, 2 Mar 2004.
3383
3384 Designation changed from Dev.00 to Beta.01.  ckcmai.c, 2 Mar 2004.
3385
3386 Fixed zrename() syslogging -- it had success and failure reversed.
3387 Beta.02: ckufio.c, 4 Mar 2004.
3388
3389 Problem: when accessing IKSD via a kermit:// or iksd:// URL, and a user ID
3390 is given but no password, doxarg() set the password to "" instead of leaving
3391 it NULL, but all the tests in dourl() are for NULL.  Fixed in doxarg():
3392 ckuusy.c, 5 Mar 2004.
3393
3394 The logic in dourl() about which macro to construct (login and connect,
3395 login and get directory listing, or login and fetch a file) was a bit off,
3396 so all three cases were not handled.  ckcmai.c, 5 Mar 2004.
3397
3398 Trial Beta builds:
3399  . HP-UX B.11.11 PA-RISC
3400  . HP-UX B.11.23 IA64
3401  . Tru64 4.0G Alpha
3402  . Tru64 5.1B Alpha
3403  . Debian 3.0 i386
3404  . Red Hat ES 2.1 i386
3405  . Slackware 9.1 i386
3406  . VMS 7.3-1 Alpha + UCX 5.3
3407  . VMS 7.3-1 Alpha no TCP/IP
3408  . VMS 7.3 Alpha MultiNet 4.3 A-X
3409  . SCO UnixWare 7.1.4 i386
3410  . SCO OSR5.0.7 i386
3411  . Solaris 9 Sparc
3412
3413 Fixed compiler warning in doxarg() caused by typo (NULL instead of NUL) in
3414 the 5 March doxarg() edit.  ckuusy.c, 9 Mar 2004.
3415
3416 IKSD (kermit://) command-line URLs did not work right if the client had
3417 already preauthenticated with Kerberos or somesuch because they tried to log
3418 in again with REMOTE LOGIN.  The macros constructed in doxarg() needed to
3419 check \v(authstate) before attempting REMOTE LOGIN.  ckcmai.c, 10 Mar 2004.
3420
3421 Added ckuker.nr to x.sh (ckdaily upload) and updated ckuker.nr with current
3422 version number and dates.  10 Mar 2004.
3423
3424 Replaced hardwired references to /usr/local in makefile with $(prefix)
3425 (which defaults to /usr/local, but can be overridden on the command line),
3426 suggested by Nelson Beebe for use with Configure.  10 Mar 2004.
3427
3428 From Nelson Beebe: In the Kermit makefile in the install target commands,
3429 line 981 reads:
3430
3431         cp $(BINARY) $(DESTDIR)$(BINDIR)/kermit || exit 1;\
3432
3433 Could you please add this line before it:
3434
3435         rm -f $(DESTDIR)$(BINDIR)/kermit;\
3436
3437 Some sites (mine included) keep multiple versions of software around,
3438 with hard links between $(prefix)/progname and $(prefix)/progname-x.y.z.
3439 Failure to remove the $(prefix)/progname at "make install" time then
3440 replaces the old $(prefix)/progname-x.y.z with the new one, destroying
3441 an old version that the site wanted to be preserved.  makefile, 10 Mar 2004.
3442
3443 Minor syntax and typo fixes (mostly prototypes): ckcdeb.h, ckcfns.c,
3444 ckclib.c, ckufio.c, ckuusr.h, ckuusx.c, 10 Mar 2004.  (I still have a few
3445 more to do.)
3446
3447 Added CC=$(CC) CC2=$(CC2) to many (but not all) makefile targets that
3448 reference other makefile targets.  On some platforms (notably AIX, Solaris,
3449 SunOS) there are specific targets for different compilers, so I skipped
3450 those.  makefile, 10 Mar 2004.
3451
3452 Added error checking to kermit:// URL macros, so they don't plow ahead
3453 after the connection is closed.  ckcmai.c, 11 Mar 2004.
3454
3455 Added FreeBSD 4.9 and 5.1 targets (only the herald is affected).
3456 makefile, ckuver.h, 11 Mar 2004.
3457
3458 Added "LIBS=-lcrypt" to bsd44 targets since nowadays crypt is almost always
3459 unbundled from libc.  Also added explanatory notes.  makefile, 11 Mar 2004.
3460
3461 Changed MANDIR to default to $(manroot)/man/man1, and manroot to default
3462 to $(prefix).  More adding of CC=$(CC) clauses: {Free,Net,Open}BSD, 4.4BSD.
3463 makefile, 11 Mar 2004.
3464
3465 Miscellaneous cleanups: ckuusx.c, ckcnet.c, ckufio.c, 11 Mar 2004.
3466
3467 Corrected the check in the linux target to see if /usr/include/crypt.h
3468 exists, and if so to define HAVE_CRYPT_H, which is used in ckcdeb.h to
3469 #include <crypt.h> to get the prototype for crypt() and prevent bogus
3470 conversions on its return type on 64-bit platforms (the previous test wasn't
3471 quite right and the resulting symbol wasn't spelled right).  makefile,
3472 12 Mar 2004.
3473
3474 From Jeff, 14 Mar 2004:
3475  . Initialize localuidbuf[] in tn_snenv(): ckctel.c.
3476  . Remove remote-mode checks in hupok() for K95G only (why?): ckuus3.c.
3477  . Add help text for new K95-only TYPE /GUI switches: ckuus2.c.
3478  . TYPE /GUI parsing, ...: ckuusr.c.
3479  . TYPE /GUI action, dotype(): ckuus6.c
3480  . Change Jeff's affiliation: most modules.
3481
3482 20 Mar 2004: Looked into adding long file support, i.e. handling files more
3483 than 2GB (or 4GB) long.  Discovered very quickly this would be a major
3484 project.  Each platform has a different API, or environment, or transition
3485 plan, or whatever -- a nightmare to handle in portable code.  At the very
3486 least we'll need to convert a lot of Kermit variables from long or unsigned
3487 long to some new Kermit type, which in turn is #defined or typedef'd
3488 appropriately for each platform (to off_t or size_t or whatever).  Then we
3489 have to worry about the details of open() vs fopen(); printf() formats (%lld
3490 vs %Ld vs %"PRId64"...), platforms like HP-UX where you might have to use
3491 different APIs for different file systems on the same computer, etc.  We'll
3492 need to confront this soon, but let's get a good stable 8.0.211 release out
3493 first!  Meanwhile, for future reference, here are a few articles:
3494
3495 General: http://freshmeat.net/articles/view/709/
3496 Linux:   http://www.ece.utexas.edu/~luo/linux_lfs.html
3497 HP-UX:   http://devrsrc1.external.hp.com/STK/partner/lg_files.pdf
3498 Solaris: http://wwws.sun.com/software/whitepapers/wp-largefiles/largefiles.pdf
3499
3500 Looked into FTP timeouts.  It appears I can just call empty() (which is
3501 nothing more than a front end for select()) with the desired timeout before
3502 any kind of network read.  If it returns <= 0, we have a timeout.  This is
3503 not quite the same as using alarm() / signal() around a recv() (which could
3504 get stuck) but alarm() / signal() are not not used in the FTP module and are
3505 not naturally portable to Windows, but select() is already in use in the FTP
3506 module for both Unix and Windows.  This form of timeout could be used
3507 portably for both command response and data reads.  What about writes to the
3508 command or data socket?  They can get stuck for hours and hours without
3509 returning too, but the select() approach won't help here -- we need the
3510 actual send() or recv() to time out, or be wrapped in an alarm()/signal()
3511 kind of mechanism.  But if we can do that for sends, we can also do it for
3512 receives.  Better check with Jeff before I start programming anything.
3513 20 Mar 2004.
3514
3515 Later: Decided to postpone the above two projects (ditto IPv6) until after
3516 8.0.211 is released because both will have major impacts on portability.
3517 Grumble: all i/o APIs should have been designed from the beginning with a
3518 timeout parameter.  To this day, hardly any have this feature.
3519
3520 3-4 Apr 2004: More 8.0.211 Beta.02+ test builds:
3521
3522  . FreeBSD 3.3
3523  . FreeBSD 4.4
3524  . Linux Debian 2.1
3525  . Linux RH 6.1
3526  . Linux RH 7.1
3527  . Linux RH 7.2
3528  . Linux RH 9 (with 84 different combinations of feature selection)
3529  . Linux SuSE 6.4
3530  . Linux SuSE 7.0
3531  . NetBSD 1.4.1
3532  . NetBSD 1.5.2
3533  . OpenBSD 2.5
3534  . OpenBSD 3.0
3535  . QNX 4.25
3536  . SCO UnixWare 2.1.3
3537  . SCO UnixWare 7.1.4
3538  . SCO OpenServer 5.0.7
3539  . SCO XENIX 2.3.4 (no TCP)
3540
3541 Changes needed: None.
3542
3543 Problem: SCO XENIX 2.3.4 network build failed in the FTP module with
3544 header-file syntax and conflicting-definitions trouble.  I'm not going to
3545 try to fix it; 8.0.209 built OK with FTP, so we'll just keep that one
3546 available.
3547
3548 Got access to VMS 8.1 on IA64.  Building the nonet version of C-Kermit
3549 required minor modifications to ckvvms.h, ckv[ft]io.c, and ckvcon.c, to
3550 account for a third architecture.  Also to SHOW FEATURES in ckuus5.c.  Once
3551 that was done, the UCX 5.5 version built OK too.  Starts OK, makes Telnet
3552 connection OK, sends files.  Has some obvious glitches though -- "stat"
3553 after a file transfer reports 0 elapsed time (in fact it was 00:09:48) and
3554 1219174400 cps (when in fact it was 10364).  This doesn't happen on the
3555 Alpha.  Btw, the IA64 binary is twice as big as the Alpha one.  Changed
3556 to Beta.03.  5 Apr 2004.
3557
3558 Fixed the ckdaily script to include the makefile and man page in the Zip
3559 file (they were not included because the Zip file was intended mainly for
3560 VMS users, but some Unix users prefer Zip to tar.gz).  6 Apr 2004.
3561
3562 Traced problems in VMS/IA64 statistics report to rftimer()/gftimer() in
3563 ckvtio.c, which use sys$ and lib$ calls to figure elapsed time.  These work
3564 on VAX and Alpha but not IA64.  Sent a report to the chief engineer of the
3565 IA64 VMS port; he says it's probably a bug in VMS 8.1 (which is not a real
3566 release); he'll make sure it's fixed in 8.2.  As an experiment, tried
3567 swapping in the Unix versions of these routines (which call gettimeofday()
3568 etc).  They seem work just fine (it hung a couple times but I think that's
3569 because the underlying system hung too; trying it later on a new connection,
3570 it was fine; however I noticed a BIG discrepancy in throughput between
3571 sending and receiving).  Moved definitions for VMS64BIT and VMSI64 to
3572 ckcdeb.h so all modules can use them and added them to the SHOW FEATURES
3573 display.  Added VMSV80 definition to build procedure.  Beta.03+.  ckcdeb.h,
3574 ckcuus5.c, ckcvvms.h, ckvtio.c, ckvker.com, 6 Apr 2004.
3575
3576 While doing the build-all, I noticed the VMS version did not build with
3577 Multinet or older UCX versions, always with the same errors -- undeclared
3578 variables, undefined symbols, all TCP/IP related.  This didn't happen a
3579 couple weeks ago...  Somehow the order of #includes was messed up --
3580 ckuusr.h depended on symbols that are defined in ckcnet.h, but ckcnet.h
3581 was being included after ckuusr.h...  this was compounded by two missing
3582 commas in ckvker.com.  11 Apr 2004.
3583
3584 Removed Beta designation, released as 8.0.211, 10 Apr 2004.
3585
3586 ---8.0.211---
3587
3588 I had somehow lost the edit to ckutio.c that changed the UUCP lockfile for
3589 Mac OS X from /var/spool/uucp to /var/spool/lock.  So I slipped it in and
3590 re-uploaded version 8.0.211.  You can tell the difference because SHOW
3591 VERSIONS has a 17 Apr 2004 for the Communications I/O module.  Also the 10.3
3592 executable now has a designer banner: "Mac OS X 10.3".  makefile, ckuver.h,
3593 ckutio.c, ckuus[45].c, 17 Apr 2004.
3594
3595 ***********************