ckc197.txt
上传用户:dufan58
上传日期:2007-01-05
资源大小:3407k
文件大小:866k
源码类别:

通讯/手机编程

开发平台:

Windows_Unix

  1. but not pass the start-printer or stop-printer sequences to the printer.
  2. Changed most UNIX makefile targets from wermit to xermit, to use the new
  3. select()-based CONNECT module, which has much new stuff in it that ckucon.c
  4. does not have.  In general, I changed every entry that has -DTCPSOCKET to the
  5. xermit target unless it was really old and I hadn't heard anything about it in
  6. many years.  makefile, 26 Nov 98.
  7. Added HELP text for recent commands.  ckuus2.c, 26 Nov 98.
  8. If DIAL RETRIES was not set explicitly, then at DIAL time use a retry limit
  9. based on the local country code.  Currently, this is 10 for country code 1
  10. and 1 for all others.  This can be expanded as I get info about other
  11. countries.  ckuus[346].c, 26 Nov 98.
  12. Added SET CLOSE-ON-DISCONNECT { ON, OFF }.  If ON, it means that if we notice
  13. that a serial connection is disconnected (because CD went off), we close the
  14. device immediately.  This releases it for use by others (e.g. removing the
  15. lockfile in UNIX).  OFF by default, for consistency with previous releases.
  16. Supporting code needs to be added for K95; it goes in ttchk() -- see example
  17. in ckutio.c (search for "clsondisc").  ckcmai.c, ckuus[r234].c, ck[uv]tio.c,
  18. 26 Nov 98.
  19. #ifdef adjustments to allow building with different features deselected:
  20. many, many modules.  26 Nov 98.  Examples (on SunOS 4.1.3):
  21.  Full:                1155072
  22.  -DNOIKSD             1146880
  23.  -DNOLOGIN:           1138688
  24.  -DNOPUSH             1122304
  25.  -DNOSPL               999424
  26.  -DNOLOCAL:            884736
  27.  -DNOLOCAL -DNOLOGIN   819200
  28.  sunos41mi:            335872
  29.  sunos41m:             212992
  30. Don't let "close connection" fall through if clsconnx() returns an unexpected
  31. value.  ckuusr.c, 27 Nov 98.
  32. Added MANUAL command, which in UNIX runs the "man" command, default topic
  33. "kermit".  In VMS it runs the "help" command, default topic "kermit".  For K95,
  34. I wrote code to parse chapter names and then to run SE on:
  35.   file:///<startupdir>/DOCS/manual/kermit95.htm#<chapter>
  36. but have no way to compile or test, needs fixing.  ckuusr.[ch], 29 Nov 98.
  37. Added a reference to the MANUAL command to the main HELP screen.  ckuus2.c,
  38. 29 Nov 98.
  39. Changed HANGUP command to also call ttchk().  This way, if the HANGUP command
  40. forced a serial connection to close (and carrier to drop), this engages the
  41. SET CLOSE-ON-DISCONNECT code.  ckuusr.c, 29 Nov 98.
  42. Added support for 75/1200 bps split speed for Unixware 7.  Untested.
  43. ckutio.c, 29 Nov 98.
  44. Added missing sections to ckermit2.txt: SET [ SERVER ] CD-MESSAGE, SET FILE
  45. PATTERNS AUTO, SET COMMAND AUTODOWNLOAD, LATIN-9, TYPE /PAGE, and RESET, plus
  46. COPY command improvements.  29-30 Nov 98.
  47. Fixed 75/1200 support after testing revealed it didn't work.  ckutio.c,
  48. ckuus5.c, 30 Nov 98.
  49. Built on Red Hat Linux 5.2. Needed -lcrypt added to LIBS.  makefile,
  50. 30 Nov 98.
  51. Linux version could not access modem signals.  Got help from Ted Ts'o and
  52. Gert Doering, now it works.  SHOW COMM shows them, CONNECT mode pops back to
  53. command prompt automatically when carrier drops, etc.  ckutio.c, 1 Dec 98.
  54. Built Linux C-Kermit with egcs 1.0.3 on Red Hat 5.2.  Added linuxegcs makefile
  55. entry.  makefile, 1 Dec 98.
  56. Also checked linuxs entry (static linking) -- works, makes a 2.2MB executable
  57. (compared to 914K with dynamic linking).
  58. Made FAST the default for UNIX and VMS (it already was the default in K95);
  59. let's see who hollers.  ckcmai.c, ckcker.h, ckuus[5h].c, 1 Dec 98.
  60. Added SOCKS5 support from Ric Anderson.  ckcdeb.h, ckcnet.[ch], ckuus5.c,
  61. 1 Dec 98.
  62. Fixed the MANUAL command to account for NOPUSH/nopush.  ckuus[r2].c, 1 Dec 98.
  63. Supplied missing RMKDIR command.  ckuusr.c, 1 Dec 98.
  64. Verified IKSD on Red Hat 5.2 Linux 2.1.125.  All is OK except, like SunOS,
  65. it has the syslog-vs-chroot bug.  See notes from 30 Aug 98.
  66. Moved annoying error messages from REDIRECT parsing to after confirmation, so
  67. we can use command recall.  This should also be done for any other commands
  68. that issue error messages and fail in mid-parse for non-syntactic reasons.
  69. ckuusr.c, 1 Dec 98.
  70. New & improved HP-UX makefile entries from Peter Eichhorn.  2 Dec 98.
  71. Confirmation from Piet Vloet at Siemens Austria that 8 bits + parity work OK
  72. on Solaris.  2 Dec 98.
  73. kermit -y filename was broken, more fallout from the "call prescan() twice"
  74. business (see notes from 22 Aug), this time because of the argument that was
  75. added that made it skip some things.  I just put it all back to the way it was
  76. prior to 19 July and it seems to work OK (the notes don't shed any light, but
  77. probably the changes were made for some reason specific to K95, so proper
  78. prescan() operation should be rechecked there).  ckuus4.c, 2 Dec 98.
  79. Added a bunch of missing commas separating help-text lines.  ckuus2.c,
  80. 2 Dec 98.
  81. Removed now-inappropriate #ifdef NETCONN from extern int ttnproto in ckudia.c,
  82. 2 Dec 98.
  83. Added -DNOGETUSERSHELL to all HP-UX entries prior to 8.00.  makefile, 2 Dec 98.
  84. SCO OSR5, and therefore probably all earlier versions, get unresolved
  85. references to "std_syslog" and "openlog" at link time.  Builds OK only with
  86. -DNOSYSLOG.  Added -DNOGETUSERSHELL and -DNOSYSLOG to SCO OSR5 entries, and
  87. -DNOIKSD to all the other SCO entries (except Unixware).  makefile, 2 Dec 98.
  88. Added appropriate #includes for select() to ckucns.c, needed at least for QNX.
  89. ckucns.c, 2 Dec 98.
  90. Built on dozens of platforms, made numerous adjustments to #ifdefs and
  91. declarations.  2 Dec 98.
  92. Added -DNOIKSD to HP-UX 5.x entry.  Makefile, 3 Dec 98.
  93. Fixed a bug in which "run blahfxxx" (RUN any-string-with-f-in-it) would
  94. hang.  The problem turned out to be that the RUN command parser always
  95. returned -1 if cmtxt failed, rather than returning cmtxt's return code.
  96. ckuusr.c, 3 Dec 98.
  97. Fixed a longstanding bug in the BSDI version, in which incoming file dates
  98. were set in GMT rather than local time.  It seems in 4.4BSD, localtime() does
  99. not return the local time, but rather Zero Meridian (Zulu) time (GMT), and
  100. must be adjusted by the tm_gmtoff value.  ckcdeb.h, ckufio.c, 3 Dec 98.
  101. It turns out the same bug also affected FreeBSD, so I'm assuming it also
  102. applies to all other 4.4BSD derivatives, and so made the previous change be
  103. #ifdef BSD44.  Tested OK in FreeBSD 2.2.7 and BSDI 3.1.  ckufio.c, 3 Dec 98.
  104. After getting "man" to work on SCO 3.2v5.0.5, I discovered that -lsocket is
  105. required there to make syslog() work.  Added -DSYSLOG to the sco32v5*net*
  106. entries, which already were linking with libsocket.  Added a separate set of
  107. entries for SCO 3.2v5.05.  ckcdeb.h, ckuver.h, makefile, 3 Dec 98.
  108. Noticed that the SCO OSR5 version was sending uppercase filenames.  Started to
  109. work on tracking it down, but now, just when it gets to the filename, it
  110. crashes in the malloc() that is called from sfile().  There does not appear to
  111. be anything wrong with this code, and the same code works fine on dozens of
  112. other platforms.  malloc() is being passed an integer whose value is 1024.
  113. Compiling with gcc rather than cc fixes the problem.  Not very satisfying,
  114. though...  Keeping at it, I found that if I reworked the offending bit of code
  115. and rebuilt with cc, the problem moved to another unrelated bit.  Finally I
  116. tracked it down to a non-ANSI prototype for getcwd() in zgtdir().  Commenting
  117. it out fixed everything.  So what other little time bombs are lurking
  118. throughout the code?  (Lines that were perfectly harmless for years and years
  119. can suddenly become fatal...)  ckufio.c, 3 Dec 98.
  120. The problem with uppercase filenames comes from using "send /bin", and in fact
  121. happens everywhere, not just on SCO.  It's because "send /bin" sets transfer
  122. mode to manual and file type to binary, to force a binary transfer no matter
  123. what.  But manual transfer mode means we don't automatically switch to literal
  124. filenames when sending UNIX to UNIX.  Phooey.  This was fixed as follows:
  125. previously, when we compared system types, we did so only if xfermode == auto.
  126. If they match, we set the transfer mode to binary and file names literal.
  127. Now we compare system types not only if xfermode == auto, but also if the
  128. global (saved) g_xfermode == auto.  In this case, we set file names to literal
  129. if they match, but we set the transfer mode to binary only if xfermode == auto,
  130. i.e. if the *current* transfer mode is auto.  ckcfns.c, 3 Dec 98.
  131. When using new C-Kermit on VMS to make a Telnet connection, it says: "tn_push
  132. has not been defined. data loss!!!!" -- kinda scary...  Copied the le_blah()
  133. code from UNIX to VMS, and enabled the le_puts() call for VMS in tn_push().
  134. But it doesn't work very well -- there is a long pause at the beginning of the
  135. connection, and then 10-20 lines of junk come out (but after that it's normal).
  136. Apparently this much more difficult than I thought, mainly because in UNIX,
  137. the same functions (ttinc(), ttxin(), etc) are used for both serial and
  138. network connections, whereas in VMS, we call netinc(), netxin(), etc, for
  139. network connections.  Put everything back the way it was.  We get the scary
  140. message, and have to hit return before seeing a login: prompt, but after that
  141. all is OK.  To be cont'd...
  142. (Next day...)  It's worse than I thought.  The telnet local-echo buffer
  143. business breaks the INPUT command on Telnet connections, even for the UNIX
  144. version.
  145. Fixed long lines in ckuath.c, ckuat2.c, and ckusig.c.  4 Dec 98.
  146. Fixes from Jeff for INPUT vs local-echo buffer, plus a keyword-table size
  147. error.  ckcnet.c, ckuus7.c, 8 Dec 98.
  148. Changed hardwired references to uid_t and gid_t in the new authentication code
  149. to UID_T and GID_T, which are portably defined in ckcdeb.h, to fix ckufio.c
  150. compilation failure on HP-UX 6.5.  Also needed to add -DNOSYSLOG and -DNOSELECT
  151. (because ckcdeb.h defines SELECT for all HPUX's, but it's not there prior to
  152. 7.0 unless TCP/IP is installed).  makefile, ckufio.c, 8 Dec 98.
  153. Fixed UNIXLOGIN macro to allow for the possibility that a login: prompt might
  154. not appear.  Fixed NET macro to include "set login user" to disable sending
  155. of user ID in Telnet negotiations.  ckermit.ini, 8 Dec 98.
  156. All-day project: Got common source and makefile to build cleanly on both
  157. Red Hat 5.2 Linux (glibc) and Slackware 3.5.0 (libc).  Of course the results
  158. are still not binary compatible.  How could they be?  makefile, ckutio.c,
  159. 8 Dec 98.
  160. Removed all gratuitous prototypes for getcwd() from zgtdir().  Let's see
  161. who complains.  ckufio.c, 8 Dec 98.
  162. Almost everybody, of course.  Started the long, slow process of adding back
  163. prototypes for those platforms that don't provide them: HP-UX 6.5, Motorola
  164. SV68, etc.  This was handled in various ways -- including <unistd.h> in builds
  165. where it wasn't included before, adding a new DCLGETCWD symbol to CFLAGS of
  166. selected builds, and so on.  zgtdir() now has real _PROTOTYP's for getcwd()
  167. rather than the non-ANSI hardwired ones, and all are in #ifdef
  168. DCLGETCWD..#endif.  But since getcwd() prototypes involve size_t's, this too
  169. needed an escape clause, so I made them all SIZE_T, which is defined by
  170. default to be size_t in ckcdeb.h, but can be overridden on the command line
  171. with -DSIZE_T=int or whatever.  makefile, ckufio.c, ckcdeb.h, 9 Dec 98.
  172. Trying to get tn_push() & friends to work in VMS (cont'd from last week...)
  173. Moved all the code that I had added to ckvtio.c to ckcnet.c, since, for
  174. network connections, all of the ckvtio.c routines call their ckcnet.c cousins
  175. anyway (ttinc() calls netinc(), etc).  The result works ok, except it is stuck
  176. until the user hits the first key.  Killing a process stuck in this way that
  177. had its debug log on reveals the hangup to be in contti(), which is back in
  178. the ckvtio.c module I just moved all this code out of...  Added a(nother)
  179. special hack to contti() to account for the local-echo buffer.  Arranged
  180. ckcnet.[ch] so that TTLEBUF selects the external implementation of these
  181. routines & buffers, and NETLEBUF selects the internal one.  Defined TTLEBUF
  182. for UNIX and NETLEBUF for VMS.  ckcnet.[ch], ck[vu]tio.c, 9 Dec 98.
  183. Defined TTLEBUF for AOS/VS and added the code to ckdtio.c (but, like the
  184. initial VMS try, it still gets stuck at the very beginning).  9 Dec 98.
  185. Numerous source-level adjustments for AOS/VS.  For example, if a module
  186. contains "extern int blah;", the link step will fail if blah is not defined
  187. anywhere, even if it is never used.  Many modules.  9 Dec 98.
  188. SOCKOPT_T adjustments for AIX 4.2 & 4.3.  ckcnet.c, 9 Dec 98.
  189. Changes from Jeff for hardware parity & stop bits for K95, plus other minor
  190. code adjustments.  ckcdeb.h, ckuus[34].c, ckcnet.c, 10 Dec 98.
  191. From Jeff: When an incoming TCP connection has dropped, don't listen for a
  192. new one.  ckcnet.c, 10 Dec 98.
  193. More adjustments for AOS/VS.  ckdcon.c, ckcpro.w, etc.  Now it links without
  194. multiply defined or undefined symbol errors.  10 Dec 98.
  195. Fixed the sticking problem in AOS/VS Telnet: there was a vestigial ttflui()
  196. call in the AOS/VS version of ttpkt().  ckdtio.c, 10 Dec 98.
  197. Increased compiler memory (-qmaxmem) from 6000 to 8000 for AIX 4.1 builds,
  198. and to 10000 for AIX 4.2 and 4.3 (but this is still not enough for some
  199. modules -- no big deal).  makefile, 10 Dec 98.
  200. Adjusted #ifdefs for GETSOCKNAME_T, etc, to allow clean compilation on AIX
  201. 4.3 & 4.2, since data types for various sockets library function args changed
  202. between AIX 4.1 and 4.2.  ckcnet.c, 10 Dec 98.
  203. Made SET SPEED command not complain because it's a network connection until
  204. after confirmation (see note on REDIRECT, 1 Dec 98).  ckuus3.c, 10 Dec 98.
  205. Problem: SET PORT blah, SET MODEM TYPE blah, DIAL blah.  Then SET HOST blah.
  206. Now that we have a network connection, HANGUP still sends the modem hangup
  207. sequence.  It *should* send this sequence if SET MODEM TYPE was given *after*
  208. SET HOST (see p.126), but not if it was given before.  Code looks right --
  209. setlin() leaves modem type negative upon exit.  Well, further testing reveals
  210. problems go a lot deeper when we switch back & forth between serial and
  211. network connections -- sometimes lockfiles were left behind, SET SPEED
  212. commands would fail, etc.  The primary cause was the failure of (at least the
  213. UNIX version of) ttopen() to unset the "it's a network connection" variable
  214. in all cases when it opened a serial connection.  I also made another change,
  215. namely that mdmhup() should call ttchk() before sending +++ATH0+++ to make
  216. sure there is still a connection.  If there isn't, don't bother.  ckutio.c,
  217. ckudia.c, 10 Dec 98.
  218. Changes from Jeff for Postscript printer support in K95.  ckuusr.h, ckuus3.c,
  219. 10 Dec 98.
  220. Added SET DIAL MACRO command.  ckuusr.h, ckuus[36].c, ckudia.c, 11 Dec 98.
  221. Added LOG CONNECTIONS command definitions, parsing, SHOWing.  Default
  222. filename is CX.LOG in user's home directory, overridable by -DCXLOFGILE="xxx"
  223. on cc command line, or, of course, in the LOG CONNECTIONS command itself.
  224. ckcker.h, ckcdeb.h, ckuus[r456].c.  11 Dec 98.
  225. Added code for writing to the connection log.  The main idea is to write log
  226. records as reliably as possible without going into the system-dependent code,
  227. thus avoiding the necessity to update dozens of modules, many of which can't
  228. be tested.  When a connection is opened, a preliminary log record is written
  229. to a buffer by the SET LINE or SET HOST code (this happens always, even if a
  230. log is not open).  If it was a serial port, then if a DIAL command is given,
  231. it overwrites the original record, adding the phone number info.  The trick is
  232. to catch when the connection closes, so we can add the elapsed time to the
  233. record and write it out to the log (I considered writing separate Open and
  234. Close records, but people wouldn't like having to match them up).  We do this
  235. in the following places:
  236.  . The HANGUP command.
  237.  . The clsconnx() (close connection) routine.
  238.  . When the CONNECT command returns.
  239.  . When INPUT senses connection loss
  240.  . When the file-transfer protocol senses connection loss.
  241.  . In the program exit sequence as a catch-all.
  242. We avoid writing duplicate records by punching out the partial buffer after
  243. writing a record.
  244. Each record is a line of text; the format is:
  245.   yyyymmdd hh:mm:ss username pid p=v [ p=v [ ... ] ]
  246. where the timestamp shows when the connection was made; p's are parameters,
  247. and v's are values:
  248.   T = Connection Type (TCP, SERIAL, DIAL, DECNET, etc).
  249.   H = Originating Host name.
  250.   N = Destination Number or Network host name or address.
  251.   D = Serial connections only: Device name.
  252.   O = Dialed calls only: Originating country code & area code if known.
  253.   E = Elapsed time.
  254. Many modules, 13 Dec 98.
  255. Fixed dial macro to (a) also apply to nonportable numbers, and (b) not apply
  256. when user gives number starting with "=".  ckuus6.c, 14 Dec 98.
  257. Connection logging, cont'd:
  258.  . Flush connection-log writes to disk.
  259.  . Added 2 new syslog levels: DIAL, and All Connections.
  260.  . Added syslogging to dologend() routine.
  261.  . Added a compile-time symbol to force syslogging of desired level.
  262.  . Don't let user set syslogging > 5 (file reading).
  263. Many modules, 14 Dec 98.
  264. Added SHOW CONNECTION command to display current session (from partial log
  265. record in memory), including elapsed time.  ckuusr.[ch], 14 Dec 98.
  266. Added code to force syslogging if built with -DSYSLOGLEVEL=n.  This way
  267. sysadmins can (e.g.) log all dialout calls by all users in syslog.  Various
  268. modules.  14 Dec 98.
  269. Syslogging is documented in iksd.txt and ckuins.txt.  The connection log is
  270. documented in ckermit2.txt.
  271. Recent changes to zgtdir() could result in core dumps if called when current
  272. directory (or "..", etc) is unreadable.  Also went from getcwd() back to
  273. getwd() in SunOS since getcwd() is implemented there via popen() calling the
  274. shell to run pwd, which is gross and slow, and also prints unwanted messages
  275. in the aforementioned case.  But getwd() is "deprecated" and not recognized by
  276. POSIX so we avoid it elsewhere.  To force its use, add USE_GETWD to CFLAGS.
  277. ckufio.c, 15 Dec 98.
  278. Added /COMMAND, /BINARY, and /TEXT switches to TRANSMIT.  ckuus[r24].c,
  279. ckufio.c, 15 Dec 98.
  280. Made STATISTICS show streaming in window-slots field, like file-transfer
  281. display does.  ckuus4.c, 15 Dec 98.
  282. Bug: the dial interval, once interrupted by "pressing any key" goes to 0 once
  283. (as it should) but then stays there for all subsequent redials.  Diagnosis:
  284. conchk() reported the keystroke(), but coninc() was never called to read it.
  285. Fixed in dodial(), ckuus6.c, 15 Dec 98.
  286. It seems that on at least one PC somewhere in the world, ATS2=43 causes an
  287. ERROR response from a Hayes-compatible modem (Dynalink 1456VQH).  But this
  288. command is hardwired into the code for all AT-command-set modems; there is no
  289. command to disable it.  Compensated for this by:
  290.  1. If ATS2=nn gives an error code, we (a) print the message only if DIAL
  291.     DISPLAY is on (rather than always), and (b) set MODEM HANGUP-METHOD to
  292.     RS-232, since we do not know that we can make the modem escape back.
  293.  2. SET MODEM ESCAPE-CHARACTER -1 (or any negative number) now disables the
  294.     sending of the ATS2=nn command to the modem, and also sets MODEM
  295.     HANGUP-METHOD to RS-232.
  296. Note: this is a continuation of related changes from 9 Sep 98.  ckuus6.c,
  297. ckudia.c, 15 Dec 98.
  298. Researched high serial speed API in AIX 4.2/4.3.  Forget it, it's hopeless.
  299. Documented what appears to be the method for "speed mapping" (which can be
  300. done outside Kermit) in ckubwr.txt, AIX section.  15 Dec 98.
  301. New MANUAL command for K95 from Jeff.  16 Dec 98.
  302. Updated help text of LOG, CLOSE, and other commands.  ckuus2.c, 16 Dec 98.
  303. Updated UNIX man page.  ckuker.cpp, 16 Dec 98.
  304. Changed streaming to work automatically in the majority of cases, without
  305. requiring the user to enable it.  RELIABLE has a new setting, AUTO, which is
  306. the new default.  When RELIABLE is AUTO and the Kermit program that initiated
  307. the connection requests streaming, which it does by default when STREAMING is
  308. AUTO (which is also the default) if the connection is reliable (which it
  309. knows, because it made the connection itself), now the remote Kermit accepts
  310. without having to be told to SET RELIABLE ON.  It also offers always, which
  311. should do no harm, since the offer won't be accepted if the local Kermit
  312. doesn't also offer.  This concept will need some proving in the field!
  313. ckcmai.c, ckcfn[s2].c, ckuus[23457].c, ckermit2.txt, 16 Dec 98.
  314. Added missing RQUERY shortcut for REMOTE QUERY.  Also made QUERY a valid
  315. command -- does what RQUERY does.  There's no need for the "R" since there
  316. is no local QUERY command, nor any need for one.  ckuusr.c, 16 Dec 98.
  317. Discovered that when sending a file to QNX whose name contained any segment
  318. longer than 48 chars, the open() failed with ENAMETOOLONG.  Added code to
  319. nzrtol() to truncate each path segment longer than MAXNAMLEN (which is defined
  320. earlier according to time-honored #ifdefs) to MAXNAMLEN bytes.  ckufio.c,
  321. 16 Dec 98.
  322. Added variables v(hwparity) (hardware parity, if any) and v(serial)
  323. (8N1, etc).  ckuusr.h, ckuus4.c, 16 Dec 98.
  324. Made SET SERIAL nxx also SET TERM BYTE to n.  ckuus3.c, 16 Dec 98.
  325. Changes from Jeff to speed up Telnet negotiations.  ckcnet.c, 17 Dec 98.
  326. Discovered that DIR command did not expand ~ in UNIX.  That's because it was
  327. calling system() (which uses sh) rather than zshcmd() (which uses the user's
  328. preferred shell).  Fixed in ckuus6.c, 17 Dec 98.
  329. Discovered that IF EXIST did not expand ~ in UNIX.  That's because zchki()
  330. did not expand tildes.  Fixed in ckufio.c, 17 Dec 98.
  331. Discovered that fdate() did not expand ~ in UNIX.  That's because zfcdat()
  332. did not expand tildes.  Fixed in ckufio.c, 17 Dec 98.
  333. All this made me realize that any ckufio.c routine that accepts a filename
  334. as an argument should run tilde_expand() on it, and if I did this, I could
  335. move all kinds of ugly code out of ckucmd.c.  But that would be a rather major
  336. last-minute overhaul, so it's deferred for the next release.
  337. Back to the UNIX DIR command.  If it runs ls, then we can give ls switches,
  338. etc, but we don't get regular filename parsing or a FAILURE return code if
  339. no files match.  If we run the built-in DIR command, we don't see permissions,
  340. owner, group, etc, but we do get filename parsing and an appropriate status
  341. indication.  So I separated LS and DIR, which formerly were synonyms.  Now LS
  342. runs ls, and DIR calls the internal DIR command.  ckuusr.[ch], ckuus6.c,
  343. 17 Dec 98.
  344. Meanwhile, the internal DIR command had all sorts of problems.  For example
  345. "dir x" would list all files whose names started with "x".  Also the headings
  346. and footings were a bit annoying, so I took them out.  domydir(), ckuus6.c,
  347. 17 Dec 98.
  348. Yesterday's truncate-filename-segments code forgot to null-terminate its
  349. buffer, so receiving a file that had a shorter name than a previous one
  350. resulted in junk at the end of the shorter filename.  Fixed in nzrtol(),
  351. ckufio.c, 17 Dec 98.
  352. Updates to SET PRINTER & other help text, more Telnet updates, and misc
  353. minor corrections from Jeff.  ckcnet.c, ckuus[r2y].c, 17 Dec 98.
  354. Discovered a bad situation in UNIX fgen(), in which a debug() statement
  355. would try to print the filename string even when no files were found and
  356. therefore the state of the string pointer was undefined.  Recent code changes
  357. made this cause core dumps.  Fixed in fgen(), ckufio.c, 17 Dec 98.
  358. Added new system-dependent function: ziperm(filename), returns the file's
  359. permissions in system-dependent symbolic form (unlike zgperm(), which returns
  360. them in system-dependent numeric form).  Probably will need lots of #ifdefing
  361. when I go build on many platforms...  ckufio.c, 17 Dec 98.a
  362. Back to the built-in DIRECTORY command: domydir().  Added /BRIEF and /VERBOSE
  363. switches; /VERBOSE means to print the heading and summary; /BRIEF means to
  364. just list filenames as compactly as possible; if neither is included, a
  365. verbose listing is printed but without heading and summary.  Added askmore()
  366. for paging, plus /PAGE /NOPAGE switches to control it.  Changed date format to
  367. ISO standard yyyymmdd hh:mm:ss -- no English month names or screwy American
  368. month-day-year, and /ENGLISHDATE switch to re-enable English rather than ISO
  369. dates.  Added display of permissions for UNIX.  Rearranged fields to be more
  370. familiar and less DOS-like.  ckuus6.c, 17 Dec 98.
  371. Then I discovered that all the code I had rewritten is duplicated (for OS2
  372. only) in dodir().  I don't understand the ONETERMUPD business so I left it
  373. alone, but I *think* that entire mass of code can be yanked out and replaced
  374. by a call to domydir().
  375. Added some #ifdefs to new UNIX permissions-printing code for symbols that some
  376. platforms might not define.  ckufio.c, 18 Dec 98.
  377. Made zgetfs() return size even if it's not a regular file, since we only use
  378. it for directory listings.  (NOTE: This change should not be made for K95,
  379. since DOS users are not accustomed to seeing the size listed for directory
  380. files).  ckufio.c, 18 Dec 98.
  381. Added dashes to ISO numeric date in DIRECTORY listing -- too hard to read
  382. without them.  ckuus6.c, 18 Dec 98.
  383. Made UNIX DIRECTORY show file size for directories too.  ckuus6.c, 18 Dec 98.
  384. Made K95 call domydir() instead running special code.  ckuus6.c, 18 Dec 98.
  385. Made server-side directory listing code compatible with domydir().  nxtdir(),
  386. ckcfns.c, 18 Dec 98.  (Project for a rainy day: consolidate sndir(), nxtdir(),
  387. and domydir().)
  388. From Jeff: it turns out that the parameter passed to the getc() function that
  389. is given to tn_doop() is not really a dummy after all.  tn_doop() passes a 0
  390. value to the function because it is expecting a blocking read.  This was not
  391. happening.  tn_doop() was also not checking the return code of the getc()
  392. function and was converting it to a char.  So -1 (timeouts) was being treated
  393. as IAC.  Fixed in ckutio.c, ckcnet.c, 18 Dec 98.
  394. From Jeff: Mutexes in K95 for local-echo buffer vs connection.  ckcnet.c
  395. 18 Dec 98.
  396. Added a new DIRECTORY command switch, /HEADING, to decouple printing of
  397. headings and summaries from /VERBOSE and /BRIEF.  ckuusr.h, ckuus6.c,
  398. 18 Dec 98.
  399. Added a new command to set default options for other commands that take
  400. switches:  SET OPTIONS <command> <switch> [ <switch> [ ... ] ].  ckuusr.[ch],
  401. ckuus3.c, 18 Dec 98.
  402. But this meant that each option requires an opposite, so added /NOHEADING,
  403. and /ISODATE.  ckuusr.h, ckuus6.c, 18 Dec 98.
  404. Filled in SET OPTIONS DIRECTORY [ switches ].  ckuus6.c, 18 Dec 98.
  405. Changed filhelp() to return 1 if it listed all the files, and 0 if the listing
  406. was terminated prematurely (by the user replying "n" to askmore()), to allow
  407. DIR /BRIEF /HEADING to work.  ckucmd.c, ckuus6.c, 18 Dec 98.
  408. Added HELP text for DIRECTORY and SET OPTIONS.  ckuus2.c, 18 Dec 98.
  409. Cleaned out hundreds of lines of cruft from dodir().  ckuus6.c, 18 Dec 98.
  410. Fixed streaming glitch introduced on Dec 16.  ckcfns.c, 18 Dec 98.
  411. Minor changes from Jeff to ckcdeb.h and ckcnet.c, 20 Dec 98.
  412. Moved sh_sort() to ckcmai.c with other general-purpose utilities and added
  413. key & reverse parameters.  ckcdeb.h, ckucmd.c, ckcmai.c, 20 Dec 98.
  414. Added /[NO]RECURSIVE, /NOSORT, /SORT:{NAME,DATE,SIZE}, /ASCENDING,
  415. /REVERSE (= /DESCENDING) switches to DIRECTORY and SET OPT DIR commands:
  416. ckuusr.h, ckuus6.c, 20 Dec 98.
  417. Fixes from Jeff.  ckcnet.c, ckuus6.c, 21 Dec 98.
  418. Moved SET OPTIONS keyword table to top level since aggregate initialization
  419. of structs is not portable.  ckuus6.c, 21 Dec 98.
  420. Filled in zgperm() and ziperm() for VMS.  Made VMS zgetfs() return file size
  421. even for directories.  Added zrelname() to convert a full pathname to one that
  422. is relative to the current directory (needed only for VMS).
  423. ckvfio.c, 21 Dec 98.
  424. Made filhelp() for VMS return zrelname()-shortened names.  ckucmd.c, 21 Dec 98.
  425. Made domydir() work for VMS.  ckcdeb.h, ckuus6.c, 21 Dec 98.
  426. Various directory listing improvements.  Don't give "more?" prompt if last
  427. line that was shown is the actual last line.  Made more-prompting take
  428. wrapping of long lines into account, watching out for lines that are exactly
  429. the column width.  Lots of other checking added, boundary conditions handled,
  430. etc.  ckuus6.c, 21 Dec 98.
  431. Added SHOW OPTIONS.  ckuusr.h, ckuus[56].c, 21 Dec 98.
  432. Updated HELP DIRECTORY text.  ckuus2.c, 22 Dec 98.
  433. From Jeff: Corrections to fscrncur[xy](); they do not require arguments.
  434. ckuus4.c, 23 Dec 98.
  435. From Jeff: SET TERM SPACING-ATTRIBUTE-CHARACTER (invisible, a debugging tool).
  436. ckuusr.h ckuus7.c, 23 Dec 98.
  437. Tried changing SYS$OPEN() to SYS$DISPLAY() in zgperms(), but result was
  438. error 99684 "invalid internal file identifier".
  439. Changed xxstrcmp() (caseless string compare) to ckstrcmp() (string compare in
  440. which case-matters is a parameter), and defined xxstrcmp() to be a macro that
  441. calls ckstrcmp() with the parameter set to 0, but changed all references to
  442. xxstrcmp(a,b,c) to ckstrcmp(a,b,c,0) anyway.  ckcker.h, ckcmai.c, 23 Dec 98.
  443. Replaced all constructions like:
  444.   x = casematters ? strcmp(a,b,c) : xxstrcmp(a.b.c)
  445. with ckstrcmp(a,b,c,casematters).  Many modules, 23 Dec 98.
  446. Added a "case matters in filenames" constant: filecase (1 for UNIX and OS-9,
  447. 0 elsewhere).  ckcdeb.h, ckcmai.c, 23 Dec 98.
  448. Added a "case matters" parameter to sh_sort().  ckcker.h, ckcmai.c, 23 Dec 98.
  449. Changed filename "?" and directory sorts to obey filecase setting by passing
  450. filecase as an arg to sh_sort().  ckucmd.c, ckuus6.c, 23 Dec 98.
  451. Added SHOW ARRAY &x to display the contents of array x.  Previously SHOW
  452. ARRAY did not take an argument, but simply listed all defined arrays.
  453. ckuus6.c, 23 Dec 98.
  454. Added SORT [ { /CASE:{ON,OFF} /KEY:n /REVERSE /SIZE:n } ] <array>.  Testing
  455. this by reading a file into an array and then sorting it revealed all sorts of
  456. holes in the recently updated string comparison and sorting routines --
  457. e.g. when the key is off the end of the string, or when one of the elements to
  458. be compared is null, etc.  Plugged all of these.  ckuusr.[ch], ckuus[56].c,
  459. 23 Dec 98.
  460. From Jeff: Move "<DIR>" to left of size column for sorting purposes.
  461. Fix SET PRINTER /W.. to accept abbreviations for /WINDOWS-Q that worked
  462. prior to adding /WIDTH.  ckuus[36].c, 24 Dec 98.
  463. Discovered that a typo yesterday's changes broke IF EQUAL.  Fixed in doif(),
  464. ckuus6.c, 24 Dec 98.
  465. Changed ffiles() and related functions (fdir(), etc) to take a second arg,
  466. an array 'pointer', to make array contain file list, e.g. ffiles(*.txt,&a).
  467. Element 0 of the array contains the size of the list, and elements 1..n
  468. contain the filenames.  NOTE: This does not work in K95 because I didn't see
  469. any obvious way to access the alternative "znxt" list -- probably we just need
  470. to remove the #ifdef OS2 from the code in fneval FN_FC that calls znext() in
  471. a loop to make a copy of the file list.  ckuus4.c, 24 Dec 98.
  472. Added HELP SORT text.  ckuus2.c, 24 Dec 98.
  473. From Jeff, 24 Dec 98:
  474.  . Fixed memory (de)allocation problems in ffiles(): ckuus4.c.
  475.  . Add ffiles() array assignment for K95: ckuus4.c.
  476.  . Add Wyse160 emulation (=WY60+blockmode): ckuusr.h, ckuus[257].c.
  477. Fixed Jeff's corrections (don't call makestr() with uninitialized pointers,
  478. some fencepost errors).  ckuus4.c, 25 Dec 98.
  479. Updated HELP FUNCTION text for f[r]files(), f[r]directories().  ckuus2.c,
  480. 25 Dec 98.
  481. Fixed some glitches in SORT command parsing.  ckuusr.c, 25 Dec 98.
  482. Fixed UNIX CONNECT module to log incoming characters to session log BEFORE
  483. translation (etc) if session log is binary.  If session log is text, chars
  484. are logged after translation (etc), as before.  ckucns.c, ckucon.c, 25 Dec 98.
  485. Added SET OPTIONS TYPE { /PAGE, /NOPAGE } and added TYPE to SHOW OPTIONS,
  486. just so we don't have only one command we can set options for.  ckuus[r5].c,
  487. 25 Dec 98.
  488. A few more fine adjustments to ffiles() array code.  ckuus4.c, 26 Dec 98.
  489. Realized that we really need to allow the user to specify both the start and
  490. end range of elements to be sorted, in case they really do want to use 0-based
  491. arrays (or they want to sort pieces of arrays for some reason).  Changed
  492. /SIZE:n to /RANGE:n:m.  Also, moved the SORT command code from ckuusr.c to
  493. cuus7.c.  26 Dec 98.
  494. Used the new "parse-a-range technology" to allow SHOW ARRAY a[n:m].  ckuus5.c,
  495. 26 Dec 98.
  496. Discovered still more problems in SORT switch parsing, mainly that command
  497. retry and recall were totally fouled up.  The reason was quite subtle.  The
  498. object was to parse SORT [ switches ] array-name.  Now, to allow for the
  499. possibility that the user might type &a as the array name (i.e. include the
  500. initial backslash), this required the switch keyword table to have a NULL
  501. processing function, rather than the customary xxstring, otherwise cmkey()
  502. would run xxstring on the array name and fail because the result did not match
  503. a keyword from the table.  The problem was that the path taken through cmkey()
  504. when the processing function was NULL had never been used before, and
  505. therefore never debugged: the wordlength variable was improperly set in this
  506. case, and (more interestingly), upon reparse, gtword() would return the
  507. switch together with its argument, and therefore the assumption that it had
  508. broken on the ":" or "=" was violated, and therefore the switch *with* its
  509. argument was looked up in the keyword table, which naturally failed.  Fixed
  510. in cmkey2(), ckucmd.c, 26 Dec 98.
  511. Fixed all array-name parsing functions to allow for the &@[] array (a
  512. special case).  ckuus5.c, 26 Dec 98.
  513. Another minor correction to ffiles() array management.  ckuus4.c, 27 Dec 98.
  514. Updated HELP SORT text.  ckuus2.c, 27 Dec 98.
  515. Updates to Telnet code from Jeff to accommodate sparse Telnet option arrays.
  516. ckctel.h, ckcnet.c, 27 Dec 98.
  517. Updated NEWS command.  ckuus2.c, 27 Dec 98.
  518. NeXTSTEP was missing symbol definitions for most of the permission bits in
  519. <sys/stat.h>.  Added #ifndefs for them.  ckufio.c, 27 Dec 98.
  520. Fixed misplaced #ifdef CK_TTGWSZ in domydir(): ckuus6.c, 27 Dec 98.
  521. Defined UTIMEH for HP-UX 9.0.  ckufio.c, 27 Dec 98.
  522. Got rid of getuid(), etc, prototypes for HP-UX 9.0.  ckutio.c, 27 Dec 98.
  523. DECC 5.5 on VMS 7.1 is great at finding stuff the other compilers don't:
  524.  . Missing prototypes for sopkt() and zrelname().  ckcdeb.h, ckcker.h.
  525.  . Missing prototype for lower(), and signed vs unsigned char casts
  526.    for args to various lower(), le_getchar(), etc.  ckcnet.c.
  527.  . Missing prototype for iks_wait().  ckctel.h.
  528.  . Missing prototype for cmswi().  ckucmd.h.
  529.  . sb[] used before declared.  Moved declaration up.  ckcnet.c.
  530.  . Decomposed the statement "len = (xunchar(*p++) * 95) + xunchar(*p++)",
  531.    which elicited a rather stern warning.  ckcpro.w.
  532.  . The prototypes for some of the Kanji translations were in #ifdef KANJI
  533.    in ckcker.h.  But KANJI was defined in ckcxla.h, which was included *after*
  534.    ckcker.h.  Moved the errant prototypes from ckcker.h to ckcxla.h, where
  535.    they belonged.  ckcker.h, ckcxla.h.
  536.  . Removed obsolete reference to me_binary from ckvcon.c.
  537.  . Many more like this.
  538. After all this I get clean builds on VMS 7.1 with DECC.  27 Dec 98.
  539. Removed curses support from QNX16 version.  See notes in makefile.  27 Dec 98.
  540. Fixed typos in ckuus3.c and ckucon.c, noticed during X.25 build.  27 Dec 98.
  541. ---7.0 Beta.02---
  542. From Jeff, 30 Dec 98:
  543.  . Define & implement two new responses for Telnet IKS negotiation.
  544.  . Define & implement several features for Pragma Systems telnet client.
  545.  . Fixes for K95 VIEW command.
  546. Changed copyright to 1999.  All modules, 30 Dec 98.
  547. Added BSDI 4.0 target & banner.  makefile, ckuver.h, 30 Dec 98.
  548. Increased Olimit for IRIX 6.4 build to stop warnings.  makefile, 30 Dec 98.
  549. #ifdefs for SCO 3.2v5.0.x perror() prototype vs gcc.  ckcdeb.h, 30 Dec 98.
  550. #ifdefs for SCO 3.2v5.0.x perror() declaration and contents (void vs int
  551. return type).  ckuusx.c, 30 Dec 98.
  552. Added missing #ifdef DEBUG around code in shocps() that referenced deblog.
  553. ckuusx.c, 30 Dec 98.
  554. Added code to check if, upon CONNECTing, the Telnet server is actually an
  555. IKSD in server mode, and in that case to return to the prompt.  ckucns.c,
  556. ck[uvd]con.c, 30 Dec 98.
  557. Broke up a complicated printf() that blew up the Motorola SVR3 compiler.
  558. shotopt(): ckuus4.c, 30 Dec 98.
  559. Fixed some help-text typos.  ckuus2.c, 30 Dec 98.
  560. Jeff pointed out that UNIX C-Kermit is dropping Telnet negotiations because
  561. ttflui() doesn't check for Telnet negotiations.  The big switch statement in
  562. ttinl(), which checks for IAC and if we're doing Telnet protocol, calls
  563. tn_doop(), and then handles its return code, has to be duplicated in ttflui().
  564. So I moved the switch() statement to a new routine, tt_tnopt(), and called it
  565. from ttinl().  This didn't seem to break anything, so then I placed calls to
  566. tt_tnopt() into ttflui() and ttflux().  This didn't seem to break anything
  567. either, but it will need testing in the situations where negotiations were
  568. being lost before.  ckutio.c, 30 Dec 98.
  569. Corrections to yesterday's ckutio.c changes plus some other stuff from
  570. Jeff, various modules, 31 Dec 98.
  571. Adjustments to makefile & source modules for AT&T 7300 and other entries based
  572. on SVR3 and earlier -- add:
  573.   -DNOSYSLOG -DNOSYMLINK -DNOGETUSERSHELL -DNOINITGROUPS -DNOFTRUNCATE
  574. to CFLAGS, and make sure all the appropriate #ifdefs are in place.  Also,
  575. add #ifndef NOGFTIMER to an unguarded reference to fpfsecs.  makefile,
  576. cku[tf]io.c, ckuusx.c, 31 Dec 98.
  577. Corrected yet another problem in ckindex() when told to search from the right.
  578. ckuus4.c, ckcmai.c, 31 Dec 98.
  579. Fixed IF MATCH to actually pass the SET CASE variable to ckmatch(), like it
  580. was alway supposed to.  ckuus6.c, 31 Dec 98.
  581. Reworked ckmatch() to allow quoting of metacharacters and single-character
  582. matching by [abc] (list of chars) or [a-z] (range of chars), or any
  583. combination.  The code is not exactly elegant but I think it covers every
  584. conceivable combination (which I don't think elegant code can do).  Tested
  585. extensively with "if match" over a hundred patterns ranging from those that
  586. might be commonly used to the truly bizarre.  match.ksc, ckcmai.c, 31 Dec 98.
  587. Changed the match() call in ckufio.c to ckmatch().  Now it is possible to tell
  588. C-Kermit to "send ck[cuw]*.[cwh]".  Of course, it also affects all other
  589. commands that parse filenames, as well as ? file lists, e.g. "send ck[cu]?".
  590. ckufio.c, 31 Dec 98.
  591. Fixed parsing of SET WILD SHELL when NOPUSH/nopush.  ckuus3.c, 31 Dec 98.
  592. Verified ckmatch() works with 8-bit data, includeing 0xff.  However, IF MATCH
  593. neglected to handle braces correctly so strings or patterns containing spaces
  594. didn't work right; fixed in ckuus6.c, 1 Jan 99.
  595. Added a new argument to ckmatch, telling whether to match strings that start
  596. with ".", to make UNIX filename globbing work as before.  The new arg is the
  597. "matchdot" variable, set by SET WILD KERMIT /[NO-]MATCH-DOT-FILES, used only
  598. when calling from within zxpand(), otherwise always 1.  ckcker.h, ckcmai.c,
  599. ckcfns.c, ckuus[56].c, ckufio.c, 1 Jan 99.
  600. Added {string1,string2,...} matching to ckmatch(), in which the strings
  601. themselves can be patterns, recursing to any reasonable level.  ckcmai.c,
  602. ckermit2.txt, 1 Jan 99.
  603. Updated UNIX iswild() to know about new metacharacters, and also to know about
  604. quoting, which it never did before.  ckufio.c, 1 Jan 99.
  605. Problem: At some point since last May (but before Beta.03) I broke parsing
  606. of quoted question marks in filenames, e.g.:
  607.   send cku?io?
  608. Instead of listing several files like it should, it went nuts.  Found & fixed
  609. the problem in gtword(): ckucmd.c, 1 Jan 99.
  610. Added CKREGEX and NOCKREGEX compile-time symbols.  Use the latter to get rid
  611. of [] and {} globbing in case it produces undesirable effects.  Otherwise
  612. CKREGEX is defined for all platforms.  ckcdeb.h, ckcmai.c, ckufio.c, 1 Jan 99.
  613. Put SHOW PATTERNS in #ifdef PATTERNS so it doesn't show up on VMS, etc..
  614. ckuusr.c, 1 Jan 99.
  615. DISABLE DELETE prevented SET FILE COLLISION xxx in the client.  Fixed the code
  616. so the check is made in the server.  ckcfns.c, ckcpro.w, 1 Jan 99.
  617. More fixes to ckindex() so the optional 3rd argument is treated uniformly for
  618. both left and right searches.  ckcmai.c, ckuus[24].c, ckermit2.txt, 1 Jan 99.
  619. A user reported that an ancient and hacked version of Kermit that is found on
  620. QNX2 and QNX3 systems, when it sends "&" in its parameter string to indicate
  621. it wants to do 8th-bit quoting, demands a response of "&" and does not accept
  622. "Y", which C-Kermit sends.  Added an invisible command: SET Q8FLAG {ON,OFF}.
  623. When ON, this makes C-Kermit reply with the same 8th-bit quote character that
  624. the sender sent; when OFF (the default), it responds with "Y" as it always
  625. did.  ckuusr.h, ckuus[r3].c, ckcfns.c, 1 Jan 99.
  626. DIRECTORY would print nothing and succeed if it ran out of memory when
  627. making a sorted listing.  Now it prints "?Too many files match" and fails.
  628. ckuus6.c, 1 Jan 99.
  629. Updated gettcs() (which picks the intermediate character set for TRANSLATE,
  630. TRANSMIT, and non-K95 CONNECT to account for Latin-9, CP858, and CP1252 for
  631. Euro's sake, just in time!  ckuus4.c, 1 Jan 99.
  632. Updated SHOW CHARACTER-SETS to account for Latin-9 as an intermediate set:
  633. shotcs(), ckuus5.c, 1 Jan 99.
  634. Corrections from Jeff to yesterday's changes.  ckcmai.c, ckuus[23].c. 2 Jan 99.
  635. Discovered that UNIX coninc(x), where x > 0, returned -1 rather than -2 on
  636. timeout.  When coninc() calls ttinc() the fix rather hideous -- see the code.
  637. ckutio.c, 2 Jan 99.
  638. Added SET ASK-TIMER n (sec), to make ASK and friends time out and fail if user
  639. doesn't supply an answer within n seconds.  Works with ASK, ASKQ, GETOK, and
  640. GETC.  ckuusr.h, ckucmd.c, ckuus[r36].c, 2 Jan 99.
  641. Added IF ASKTIMEOUT to let script writer test whether ASK-class command failed
  642. because of timeout.  ckuusr.h, ckuus6.c, 2 Jan 99.
  643. Added --timeout:n for IKSD login.  ckuusr.h, ckuus[25y].c, 2 Jan 99.
  644. Set a default time limit to log in to IKSD at 300 seconds (5 min).  This works
  645. in the Username:/Password: dialog via the ASK-TIMER mechanism, and in
  646. client/server mode via some crude sampling of the system clock (not foolproof;
  647. if user client never sends anything I don't think the server will time out).
  648. ckcmai.c, ckuus7.c, 2 Jan 99.
  649. Updated help text for new commands and reformatted much of the help text for
  650. more consistent indentation and spacing.  ckuus2.c, 2 Jan 99.
  651. VOS updates, etc, from David Lane & Jeff.  4 Jan 99.
  652. VMS updates from John Santos.  ckcnet.c needs saddrlen declared as unsigned.
  653. DEC C 6.0 header files refer to a data type of u_int but don't define it
  654. anywhere, so a definition was added to ckcnet.h.  Changed the name of rdata
  655. state in ckcpro.w to rdpkt, since the name rdata conflicts with a struct
  656. element defined in nameres.h.  4 Jan 99.
  657. Got rid of "Negotiations..." and spinner display when in remote mode.
  658. Only the client should print these.  ckcnet.c, 4 Jan 99.
  659. Problem (which is not new): "dir /recursive */blah" matches all files in the
  660. current directory, because this becomes "./*/blah" and the "*" segment matches
  661. all files in the current directory (see traverse() in ckufio.c).
  662. Fix 1: At the point where we are adding a file because the search is recursive
  663. and the file is not a directory, match it with the original pattern.  This
  664. filters out all the files whose names are different from the desired one, but
  665. since the current segment has "./" prepended to it, "*/blah" also matches
  666. "blah" in the current directory because "blah" has become "./blah".  Also
  667. "dir /recu blah" matches nothing, even if "blah" is in the current directory
  668. and/or subdirectories.
  669. Fix 2: Like fix 1, but point past the leading "./" prior to the comparison.
  670. This makes "dir /recursive */blah" work exactly right, but it prevents "dir
  671. /recursive blah" from matching blah files in subdirectories because the
  672. pattern "blah" does not match "xxx/blah".  But this is the right track.  Note
  673. that * does not match slash in UNIX filename globbing; but in ckmatch() slash
  674. is just another character.  Therefore, it's the responsibility of the file
  675. code to pass the right strings to ckmatch().  The trick is to note how many
  676. directory separators were in the original pattern, and then match strings
  677. containing that many segments.  For example, if the original pattern is
  678. "oofa.txt" (1 segment), and we are matching ./aaa/bbb/oofa.txt (4 segments),
  679. we must strip 4 - 1 = 3 segments from the left before matching.  Similarly, if
  680. the original pattern is */oofa.txt, we strip 2, and match with bbb/oofa.txt.
  681. So now suppose we have a directory tree in which oofa.txt files exist at all
  682. levels.  "dir oofa.txt" shows the one at the current level.  "dir /recursive
  683. oofa.txt" shows all the ones at all levels.  "dir */oofa.txt" shows the ones
  684. one level down.  "dir /recursive */oofa.txt" shows the ones one level down
  685. and lower.  "dir /recursive */*/oofa.txt" shows the ones 2 levels down and
  686. lower, etc etc.  fgen(), traverse(): ckufio.c, 5 Jan 99.
  687. More cleaning up & improving HELP text, especially HELP SET HOST.  ckuus2.c,
  688. 5 Jan 99.
  689. Jeff broke the Telnet protocol out of ckcnet.c to a separate module, ckctel.c.
  690. 5 Jan 99.
  691. Changed UNIX makefile to account for ckctel.c.  5 Jan 99.
  692. Some changes to IKS server in/out switching from Jeff.  ckcpro.w, 5 Jan 99.
  693. Jeff made dodir() call domydir() in K95.  ckuus5.c, 5 Jan 99.
  694. Jeff made TELNET command add an implicit /TELNET at the send of the command.
  695. ckuus7.c, 5 Jan 99.
  696. Added HELP WILDCARDS.  ckuusr.[ch], ckuus2.c, 5 Jan 99.
  697. Added SET F-ACK-BUG { ON, OFF } (invisible).  ckuusr.[ch], ckuus3.c, ckcpro.w,
  698. 6 Jan 99.
  699. Added a section on coping with faulty Kermit implementations to ckermit2.txt,
  700. 6 Jan 99.
  701. Added messages to refer UNIX users to installation instructions when access
  702. to lockfile directory and/or dialout device is denied.  ckuus7.c, 6 Jan 99.
  703. Moved common library routines from ckcmai.c to a separate module, ckclib.[ch],
  704. and updated the UNIX makefile to know about it.  6 Jan 99.
  705. Added code to protocol module to catch failure to negotiate Kermit server on
  706. Telnet connection.  ckcpro.w, 6 Jan 99.
  707. Updated the VMS build procedure for ckctel and ckclib.  ckvker.com, ckvold.com,
  708. 6 Jan 99.
  709. Updated the OS-9 build procedure for ckctel and ckclib.  ck9ker.mak, 6 Jan 99.
  710. Updated the Plan-9 build procedure for ckctel and ckclib. ckpker.mak, 6 Jan 99.
  711. Updated the DG build procedure for ckctel and ckclib. ckdsrc.lis, 6 Jan 99.
  712. Updated the Amiga build procedure for ckclib. ckiker.mak, 6 Jan 99.
  713. Updated the VOS build procedure for ckctel and ckclib. cklker.mak, 6 Jan 99.
  714. Fixed various glitches in ckcnet/ckctel split uncovered by building in VMS.
  715. 6 Jan 99.
  716. Added fpermissions(file).  ckuusr.h, ckuus[24].c, 6 Jan 99.
  717. Added v(lockdir) for UNIX.  ckuusr.h, ckuus4.c, 6 Jan 99.
  718. Added IF READABLE and IF WRITEABLE.  Each of these takes either a filename
  719. or a directory name.  Getting them to work for directories was a hack (global
  720. variables again).  Probably in K95 they should just always succeed.  ckuusr.h,
  721. ckuus6.c, ck[uvd]io.c, 6 Jan 99.
  722.   Note: These last several items are mainly in case we ever want to
  723.   write an install-myself script.
  724. Some changes from Jeff to (in)visibility of Telnet-related keywords.
  725. ckuus3.c, 6 Jan 99.
  726. telnet.txt from Jeff added to docs.  6 Jan 99.
  727. Discovered that makelist(), which parses {{xxx}{xxx}...} lists (as in
  728. SEND /EXCEPT:) chokes on {{{xxx,yyy,zzz}}} -- i.e. when you want to put a
  729. new-format wildcard as the exception list.  Fixed in ckuusr.c, 6 Jan 99.
  730. Fixed DIRECTORY /HEADING /RECURSIVE not to list the number of directories,
  731. since it's always 0 (zxpand() does not include directories in its list when
  732. called recursively).  ckuus6.c, 6 Jan 99.
  733. Added DIRECTORY /[NO]DOTFILES for UNIX & OS-9.  ckuusr.h, ckuus6.c, 6 Jan 99.
  734. Added SET HOST /NETWORK-TYPE:{TCP/IP,COMMAND,...}.  No reason not to, and it
  735. was easy.  Also made SET HOST /COMMAND invisible, since it is only a special
  736. case of /NETWORK-TYPE:.  The /NETWORK-TYPE switch does not affect the global
  737. SET NETWORK TYPE.  ckuusr.h, ckuus7.c, 6 Jan 99.
  738. Updated Telnet-related HELP text from Jeff.  ckuus2.c, 7 Jan 99.
  739. The code I put in to prevent "Negotiations...." from coming out of IKSD also
  740. prevented it from coming out of the client.  Fixed in tn_wait(), ckcnet.c,
  741. 7 Jan 99.
  742. Discovered the server end of REMOTE DIRECTORY is broken in UNIX for huge
  743. directories.  Local directory listings are fine.  A packet log reveals that
  744. the transfer looks normal, but the data ends early.  Debug log shows "sending
  745. packet out of window" for every data packet, but that always happens when
  746. streaming.  Changed spack() not to log this message when streaming.  ckcfn2.c,
  747. 7 Jan 99.
  748. The problem turned out to be not the size of the directory, but the fact that
  749. it contained a file with an 8-bit name, and we were storing the filenames in a
  750. char array instead of an unsigned char array.  Returning an 8-bit signed char
  751. from int nxtdir() caused its sign to be extended, and a negative return signals
  752. EOF.  Fixed in nxtdir(), ckcfns.c, 7 Jan 99.
  753. Discovered that the VMS C-Kermit Telnet client on UCX makes the connection OK,
  754. but loses the hostname.  But only if TCP REVERSE-DNS-LOOKUP is ON and only
  755. with certain hosts.  Discoveries: (1) the fact that gethostbyaddr() returns
  756. non-NULL does not mean that h_name is set; and (2) netopen() writes into its
  757. hostname argument -- gak!  Fixed netopen() to handle case (1) by filling in
  758. the IP address if no name comes back, and also to issue its "blah connected on
  759. port blah" messages a bit more consistently.  Left (2) alone, sleeping dogs
  760. department...  ckcnet.c, 7 Jan 99.
  761. Discovered that VMS tthang(), in the network case, closed and then reopened
  762. the network connection.  Fixed it to just close it.  ckvtio.c, 7 Jan 99.
  763. Fixed a place where quiet was not restored before returning from doconect().
  764. ckuus4.c, 7 Jan 99.
  765. Added code to UNIX traverse() to make it return directory names during
  766. recursive traversal, as well as filenames.  This was a bit tricky due to the
  767. possibility of showing or not showing dot files.  If we are not showing dot
  768. files in UNIX, then we should not descend into any directory whose name
  769. starts with a dot.  (In fact, this issue had never been addressed before,
  770. but now it's fixed.)  ckufio.c, 7 Jan 99.
  771. Commented out the check against summarizing directories in DIR /HEADING
  772. /RECURSIVE, since directory files are now shown.  ckuus6.c, 7 Jan 99.
  773. Checked "send /recursive", and of course it was broken, since gnfile() never
  774. expected to be fed a directory by znext().  We'd have the same problem in K95.
  775. Added a check to gnfile() to skip over directory files; recursive sends seem
  776. to be working again.  ckcfns.c, 7 Jan 99.
  777. Discovered that "send ." no longer recursed.  Did it ever?  ckermit2.txt
  778. is contradictory on this, so I fixed it by removing any claims that "send ."
  779. implied /RECURSIVE.  ckermit2.txt, 7 Jan 99.
  780. "send /recursive ." now dies with a parse error when the current directory
  781. happens to contain at least one subdirectory, and the first file returned when
  782. expanding "." happens to be a directory file.  I patched this in both cmifi()
  783. and zxpand(); the former by checking the global recursive flag (yuk) and the
  784. latter by simply translating "." to "*".  This works OK, but "send /recursive
  785. .." still doesn't work, even though "send .." does.  Well, there's no end to
  786. this, so the clever thing to do is to have zxpand() call xfnqfp() on its
  787. argument up front.  This nicely takes care any kind of crazy path (like
  788. .././../baz/../../foo.bar) that the user could dream up, not to mention
  789. tildes, etc.  But that would be too easy.
  790. In fact, "send /recursive .." actually DOES work.  The problem is the same as
  791. with putting zfnqfp() into zxpand(), or for that matter, specifying a full
  792. pathname or a pathname starting with tilde in combination with /RECURSIVE,
  793. namely that splitpath and traverse go through the ENTIRE FILE SYSTEM, file by
  794. file, which can take hours and in any case grinds the disk to dust.  This is
  795. independent of today's change to make zxpand() return directory files; the
  796. same thing would have happened any time since we added SEND /RECURSIVE, and
  797. indeed it happens with 6.1 Beta.05 from last May: "send /recursive ~/tmp/*"
  798. does the trick quite nicely in /usr/local/bin/wermit.
  799. Hacking away at this, I managed to more or less fix it but some glitches
  800. remain.  First of all, the parsing of "." and ".." etc stopped working again.
  801. But now I can put back zfnqfp() in zxpand() and all's well, except now we
  802. always get fully qualified names rather than relative ones, so I had to back
  803. off on that one for now.  Another problem is that "dir /recursive <dirname>"
  804. only shows directories, not files, in any directory that is subordinate to the
  805. one named in the command.  OK, close...  Will finish this tomorrow.
  806. ckufio.c, 7 Jan 99.
  807. Fixed lingering problems in UNIX wildcard expansion.  ckufio.c, 8 Jan 99.
  808. Changed zxpand to append path separator to any directory names it returns.
  809. ckufio.c.  8 Jan 99.
  810. Since we don't know whether all implementations of zxpand() will return
  811. directory names with separator appended, high-level code that does this in
  812. various places (e.g. filhelp(), cmifi2()) still does it, but only if it was
  813. not done already.  ckucmd.c, 8 Jan 99.
  814. Added DIRECTORY /FILES (to show only regular files) /DIRECTORIES (to show only
  815. directories) and /ALL (default, to show files and directories).  ckuusr.h,
  816. ckuus6.c, ckermit2.txt.  8 Jan 99.
  817. Changed SWITCH to evaluate case labels with zzstring() and then use ckmatch()
  818. on them rather than strcmp().  Now we can have shell-like switch statements
  819. with variables/functions/patterns as cases.  ckuus6.c, ckermit2.txt, 8 Jan 99.
  820. Still have lots of details to clean up, will do them next week.
  821. From Jeff: The Telnet Negotiation delay mechanism has been redesigned once
  822. again.  The requirement is not that WILL/DO negotiations can't be sent before
  823. encryption is active, just that none of the subnegotiation data be sent before
  824. the encryption is in place.  So now there is a method to delay sending
  825. subnegotiation data until after START_TLS, AUTH, and ENCRYPT are complete.
  826. This means that we send all WILL/DO messages other than ENCRYPT before waiting
  827. for the AUTH response.  If AUTH is refused we are done and there should be
  828. almost no delay when connecting at the expense of more complex code.  And
  829. since the NAWS is now sent to the telnetd before "login" is started it works
  830. the first time and the SIGWINCH is not generated in the subprocess which
  831. interrupts the "Password:" read attempt.  Also, it seems that I never added
  832. the DO case for TELOPT_SNDLOC.  We would have negotiated SNDLOC but never sent
  833. the subnegotiation.  So that is now fixed.  (End quote) ckctel.[ch],
  834. 11 Jan 99.
  835. Also from Jeff: typo in krbmit entry fixed, makefile, plus some K95-specific
  836. stuff: ckuus[27].c, 11 Jan 99.
  837. Updated HP-UX entries from Peter Eichhorn, 11 Jan 99.
  838. The "Negotiations... (OK)" message was coming out twice, which is annoying
  839. especially now that Telnet connections are so much quicker.  There did not
  840. seem to be any easy way to consolidate the two messages, so instead I added
  841. some code so they would print only upon a negotiation timeout.  So this speeds
  842. up the connection even more (I didn't touch the spinner code, but it probably
  843. could use the same treatment).  ckctel.c, 11 Jan 99.
  844. Made the UNIX DIRECTORY command handle symlinks.  Of course this depends on
  845. the nonportable lstat() function, so another pile of #ifdefs in ckcdeb.h, and
  846. then some additional #ifdef'd code in domydir().  Now we get permissions,
  847. date, size, and name of the symlink, plus a "->" pointer to the linked-to
  848. file.  To do this as efficiently as possible, I made zgetfs() have some side
  849. effects: since it's calling (l)stat() anyway, it also gets the link info, and
  850. also sets a flag saying whether the file is a directory.  But we only take
  851. advantage of this in the DIRECTORY command where it can't do any harm.
  852. Of course, Yet Another Global Flag (diractive) had to be used to indicate to
  853. the low-level routines (zfcdat(), zgperm(), ziperm(), etc) whether to call
  854. stat() or lstat(), since we only want to call it for DIRECTORY commands, not
  855. file transfer, etc.  Yuk.  ckcdeb.h, ckufio.c, ckuus6.c, 11 Jan 99.
  856. As of yesterday, "dir <anypath>/*/filename" didn't work.  Similarly for "dir
  857. <anypath>/*/*/filename", etc.  Fixed in traverse(), ckufio.c, 12 Jan 99.
  858. "directory /recursive blah" (where "blah" is a filename, or in fact any
  859. pattern other than "*") doesn't work -- as far as I can tell, it never did.
  860. This should list all occurences of "blah" in the current (or given) directory
  861. tree, at any and all levels at which it occurs.  After several more hours of
  862. pounding on traverse() I got this working too.  ckufio.c, 12 Jan 99.
  863. But now "dir /recursive" shows dotfiles even when it shouldn't.  Fixed that
  864. too.  But every fix breaks something else.  So now DIR /DIR * doesn't work any
  865. more.  Fixed that.  But now DIR /RECURSIVE /DIR lists each directory twice.
  866. Attempts to fix that broke everything else.  I hate this routine.  Finally
  867. after more fixing, all of the following work:
  868.   dir
  869.   dir /files
  870.   dir /directories
  871.   dir /recursive
  872.   dir /recursive /files
  873.   dir /recursive /directories
  874.   dir oofa.txt
  875.   dir /recursive oofa.txt
  876.   dir /recursive *.txt
  877.   dir *.txt
  878.   dir */*.txt
  879.   dir */*/*.txt
  880.   dir .*
  881.   dir /recursive .*
  882.   dir /dotfiles
  883.   dir /dotfiles /recursive
  884.   dir foo (where "foo" is a directory name)
  885.   dir .
  886.   dir ..
  887. Obviously there are many more combinations, but these are the only ones
  888. that affect which files are shown and which ones aren't.  Also checked:
  889.   ffiles(*)
  890.   frfiles(*)
  891.   fdirectories(*)
  892.   frdirectories(*)
  893. These work too, with both SET WILD KERMIT /MATCH-DOT and /NO-MATCH-DOT.
  894. But then there was some new trouble matching dotfiles in certain contexts, for
  895. example "dir {{*,.*}}" or "dir [.abc]".  Made a minor correction to ckmatch()
  896. for this.  ckclib.c, 12 Jan 99.
  897. Updated HELP IF text.  ckuus2.c, 12 Jan 99.
  898. Changed TRANSMIT in the text / prompt 0 / pause 0 / echo off case to send
  899. 1K buffers rather than lines.  Speeds up transmission by about 35% in this
  900. case.  Didn't bother with binary mode since nobody uses it anyway, and the
  901. changes for that are a bit harder.  ckuus4.c, 13 Jan 99.
  902. Updated HELP DIR, HELP SWITCH, HELP SET FILE, and HELP WILDCARD text.
  903. ckuus2.c, 13 Jan 99.
  904. Got tired of hunting for things in the SHOW FEATURES compiler options list,
  905. so changed SHOW FEATURES to sort them.  Also fixed the paging, which had
  906. drifted a bit with new additions.  ckuus5.c, 13 Jan 99.
  907. Added DIR /[NO]XFERMODE.  If /XFERMODE is included, the directory listing
  908. shows the transfer that would be used for each based on the current patterns.
  909. If none is shown, then the filename doesn't match any patterns.  This seems
  910. like a useful addition to a Kermit directory listing.  ckuusr.h, ckuus6.c,
  911. 13 Jan 99.
  912. Added DIR /[NO]BACKUP.  If /NOBACKUP is included, backup files (*.~*~) are
  913. not shown.  ckuusr.h, ckuus6.c, 13 Jan 99.
  914. Added SEND /NOBACKUP.  If /NOBACKUP is included, backup files are not sent.
  915. ckuusr.[ch], ckuusx.c, ckcfns.c, 13 Jan 99.
  916. Added SET SEND BACKUP { ON, OFF } to establish the global setting that SEND
  917. /NOBACkUP would override (SET RECEIVE BACKUP too, for symmetry, but it does
  918. nothing - just prints a message).  Added SET SEND BACKUP status to SHOW
  919. PROTOCOL.  ckuusr.h, ckuus[47].c, 13 Jan 99.
  920. Updated docs and help text.  ckermit2.txt, ckuus2.c, 13 Jan 99.
  921. TRANSMIT was not always sending its last buffer in text mode.  I don't think
  922. it ever did.  Fixed in ckuus4.c, 14 Jan 99.
  923. Changed nzltor() (local-to-remote filename converter) to (a) replace space by
  924. underscore rather than X, (b) replace tilde by hyphen rather than X, and (c)
  925. translate non-ASCII chars to ASCII.  The latter works effectively if the file
  926. character-set has been properly set; otherwise it's no worse than before (this
  927. does not address the larger question of proper translation of filenames).
  928. Converted filenames are now much more readable, especially backup files:
  929. foo.bar.~3~ becomes FOO_BAR.-3- rather than FOO.BARX3X, and accented letters
  930. lose their accents rather than coming across (in most cases) as box-drawing
  931. characters, etc.  ckufio.c, 14 Jan 99.
  932. Trials show that the time to sort a directory listing is imperceptible, at
  933. least compared with the time to read the directory, so I made /SORT:NAME the
  934. default except in VMS, where directory names are returned in alphabetical
  935. order anyway.  I did not do this for server-generated directory listings --
  936. that is a much bigger project, deferred til next time.  ckuus6.c, 14 Jan 99.
  937. Updates to Minix 2.0 support from Terry McConnell, Syracuse U, ckcdeb.h,
  938. ck[tu]fio.c, makefile, 14 Jan 99.
  939. Lots of #ifdef adjustments, casts, etc, for building different configurations,
  940. many modules, 14 Jan 99.
  941. winchh() and sw_armed were used in ckctel.c but unknown to them.  I thought I
  942. could move them from ckcnet.c to ckctel.c, but that didn't work, so I left
  943. them in ckcnet and extern'd them from ckctel.  Builds OK, but NAWS operation
  944. needs to be checked.
  945. Somebody did something to utmp.h in Linux recently which makes it impossible
  946. for any application that includes that file to have variables, functions, or
  947. macros called local, screen, telnet, rlogin, xterm, rsh, ftp, unknown, or X
  948. (see "enum utlogin").  Swell.  (This was noticed in mklinux, but not in the
  949. Intel version -- same kernel number; double swell.)  There was no good way to
  950. avoid the conflict, so (a) I renamed our screen() routine to ckscreen(), along
  951. with all references to it.  (b) was harder, since there are about 1000
  952. occurrences of the string "local" in the C-Kermit source, some of them
  953. embedded in other strings (e.g.  "localtime()") or in comments or text); I
  954. wasn't about to change all of them at the last minute.  Adding -Dlocal=cklocal
  955. doesn't help either; enums are "too powerful".  The obvious solution was to
  956. build for Linux with -DNOWTMP, but that would eliminate some prominent
  957. convenience items, not to mention IKSD logging.  Because of the utter
  958. stupidity of the C language, there was no way to #include <utmp.h> and avoid
  959. these conflicts, so finally I just hardwired the needed definitions from
  960. utmp.h and utmpbits.h into ckufio.c.  YUK!!!  14 Jan 99.
  961. The new TELOPT macros defined in ckctel.h were too complex for some compilers
  962. (preprocessors) to handle so Jeff added a -DNOTOMACROS switch and accompanying
  963. code to allow their replacement by compiled functions.  Also, a correction
  964. from Jeff to logstr().  ckctel.[ch], ckuusx.c, 14 Jan 99.
  965. Discovered the base Solaris entry had not been converted from ckucon to ckcns.
  966. Fixed in makefile, 14 Jan 99.
  967.  hpux500wintcp -- try with xermit.
  968.  look for prototype for inet_ntoa() in hpux headers.
  969. aos kermit got a stack dump / traceback because free() was called from
  970. close() which was called (on the tty) from _exit.  Hmmm -- not Kermit's
  971. problem.
  972. --- Beta.03 ---
  973. Corrections from Jeff to IKS negotiations: ckctel, ckcnet, ckuus4, ckcpro;
  974. plus some character-set fixes: ckouni, 17 Jan 99.
  975. Moved extern int nnets outside of #indef NODIAL so -DNODIAL builds would work.
  976. ckuus7.c, 17 Jan 99.
  977. Added missing "Solaris 7 implies Solaris 2.6" clause to ckcdeb.h, 17 Jan 99.
  978. Some shuffling of #ifdefs in an attempt to fix broken compilation on Sinix
  979. 5.43 and Pyramid.  Generalized the "gettimeofday takes one arg instead of two"
  980. business, instead of making it specific to Motorola SV88R4.  ckutio.c,
  981. 17 Jan 99.
  982. Removed iks_wait() call that was in the middle of REMOTE command parsing.
  983. No actions should occur until after cmcfm().  This was making "(OK)" messages
  984. appear in the middle of typing any REMOTE command.  ckuus7.c, 17 Jan 99.
  985. Some #ifdef juggling for HP-UX 10.01 to eliminate compiler warnings about
  986. select() and localtime().  ckutio.c, 18 Jan 99.
  987. From Jeff: Some additional changes for VOS; expanded TELOPT command;
  988. various modules, 18 Jan 99.
  989. New TELOPT command options are "ao", "ayt", "break", "cancel", "ec", "el",
  990. "eof", "eor", "ga", "ip", "dmark", "do", "dont", "nop", "sb", "se", "susp",
  991. "will", "wont".  This lets us send any Telnet command at all; e.g. as a probe
  992. to see if the connection is up (e.g. NOP).  (I changed some of the return
  993. codes; pls check.)  ckuusr.c, 18 Jan 99.
  994. Tested this a bit, using TELOPT NOP or TELOPT DMARK as a probe.  If I kill
  995. the remote process, these still succeed, even if I wait a while first.  The
  996. second one fails.  Seems strange -- how do we document this?  "To see if the
  997. server is still there, use "telopt nop, telopt nop, if success ..."
  998. Refined the "Negotiations....(OK)" suppression code a bit.  Much better now,
  999. but still not perfect.  More later...  ckctel.c, 18 Jan 99.
  1000. Got access to an SCO 3.2V4.2 system and made necessary adjustments to get
  1001. successful builds, mainly #including <sys/time.h> and linking with -lsocket
  1002. so we can use gettimeofday for the high-precision timers, etc.  I'm not sure
  1003. if no-net systems can run a binary that is linked with -lsocket, but let's
  1004. hope so...  Converted these entries to xermit, since we can use select().
  1005. makefile, cku[ft]io.c, ckuver.h, 19 Jan 99.
  1006. Added sco32v4ns entry to build a version that does not use the sockets
  1007. library, select(), or gettimeofday(), just for safety.  Also, this was a good
  1008. verification that -DNOGFTIMER still does its job.  makefile, 19 Jan 99.
  1009. Took all the -DNOSETBUF's out of the makefile and just set it in ckcdeb.h.
  1010. (I thought I had done this before...)  makefile, 19 Jan 99.
  1011. Fixed IKSD not to refuse to send a file just because client does not have
  1012. TERM AUTODOWLOAD ON.  ckcpro.w, 19 Jan 99.
  1013. Some changes from Jeff for K95 keyboard settings.  ckuusr.h, ckuus7.c,
  1014. 19 Jan 99.
  1015. From Jeff, 20 Jan 99:
  1016.  . Fix bug in CLEAR INPUT: ckuusr.c.
  1017.  . Help text for SET TERM DG-UNIX-MODE: ckuus2.c.
  1018.  . Added table of DEC keyboard (terminal) languages + parsing: ckuus7.c.
  1019. Fixed some bad notation in the IRIX 6.4 entry (-OPT:Olimit=3000 should have
  1020. been -Olimit 3000; the former notation is not used until IRIX 6.5, silly me).
  1021. makefile, 20 Jan 99.
  1022. Added "-b elf" to SCO 5.0.4 and .5 non-gcc entries to avoid making COFF
  1023. binaries (which is bad because...?).  makefile, 20 Jan 99.
  1024. Added HPUX6 and HPUX7 symbols to the appropriate makefile entries, since all
  1025. the other HPUX's had their own.  Added custom banners for HPUX 6 and 7.  Added
  1026. code to the network module to include <arpa/inet.h> for all HPUX except 7 to
  1027. pick up the inet_ntoa() prototype (7 is excluded because it does not seem to
  1028. have this header file, even though all the others do).  makefile, ckuver.h,
  1029. ckcnet.c, 20 Jan 99.  (Builds OK with previous warnings gone on HPUX 9 and 10.)
  1030. (Later confirmation received on HPUX 6 and 7.)
  1031. NOSPL builds were failing due to unguarded references to mjd() in the
  1032. connection log writer.  Changed ckcdeb.h to set NOLOGDIAL if NOSPL was set.
  1033. 20 Jan 99.
  1034. Fixed some typos in ckermit2.txt.  20 Jan 99.
  1035. Added code to display READ.ME file from current directory at startup if
  1036. srvcdmsg != 0 (mainly for iksd).  ckuus5.c, 20 Jan 99.
  1037. Should TERM AUTODOWNLOAD be ON by default in C-Kermit (as it is in K-95)?
  1038.  . No, because the book says it isn't.
  1039.  . No, because C-Kermit is very likely to be in middle.
  1040. But then what about when it is a client of IKSD?  In that case it should be
  1041. ON so SEND from the IKSD prompt will always work.  But then if it's in the
  1042. middle, we'll still have trouble if the local Kermit also has it on.
  1043. So what are the choices?
  1044.  . Leave it alone.  But this makes IKSD look bad.
  1045.  . Make it on by default?  Causes confusion when C-Kermit in the middle.
  1046.  . Turn it on automatically when client of IKSD?  (Save & restore)
  1047. Well, yes, obviously we want it on when we're a client of IKSD.  That's not
  1048. the question -- the question is what do we do about the other, more local,
  1049. Kermit that might also have it on?  There's nothing we CAN do, so don't worry
  1050. about it.  Ideally, then, we would change SET TERM AUTODOWNLOAD { ON, OFF }
  1051. to { ON, OFF, AUTO }, with AUTO being the new default, meaning "enable
  1052. autodownload automatically if I make a connection to an IKSD".  And I started
  1053. to do it that way, but ran into conflicts with K95, which has a different and
  1054. conflicting set of keywords, plus it was not obvious where the automatic
  1055. switching should be done, nor where to undo it when the connection is broken
  1056. or some other negotiation would change the rules.  So I simply made the
  1057. default be ON for all C-Kermits as well as K95.  It's a lot easier to explain
  1058. this way, and in fact the book goes into some detail about it in several
  1059. places.  ckcmai.c, 20 Jan 99.
  1060. Changed SET FLOW AUTO to always SET FLOW NONE when making a direct serial
  1061. connection, rather than setting it to RTS/CTS just because we know we can.
  1062. The latter turned out to be a bad idea because a direct connection is very
  1063. likely not to be giving us the CTS signal (or even have a wire for it), so any
  1064. attempt to write will just hang.  setflow(): ckuus3.c, 20 Jan 99.
  1065. Changed "kermit -l" to also call setflow(), so we get consistent behavior
  1066. with command-line and interactive device opening and i/o.  ckuusy.c, 20 Jan 99.
  1067. SINIX 5.43 changed gettimeofday() to have one arg instead of two.  Added
  1068. appropriate #ifdefs to ckutio.c, defines to the makefile entry, and a
  1069. designer herald in ckuver.h.  20 Jan 99.
  1070. Added -DSELECT -DNOGETUSERSHELL to pyrdcosx entry.  makefile, 20 Jan 99.
  1071. Fixed some long lines in ckuus2.c, 20 Jan 99.
  1072. Changed BSDI product name from BSD/386 to BSD/OS, to reflect current usage
  1073. since the 1.1 release.  makefile, ckuver.h, 20 Jan 99.
  1074. Lots of changes from Jeff to get rid of non-CKOUNI possibility in K95.
  1075. Many modules, 20 Jan 99.
  1076. Bug: "xif 1 { input 10 ), echo Thanks: [v(input)] }" produces garbage because
  1077. the ")" caused the enclosing "flit()" (which is used internally by XIF and
  1078. friends to prevent premature evaluation of its command blocks) to terminate
  1079. early.  Fixed in litcmd() by quoting any unbalanced right parentheses.  Also
  1080. added a destination length argument to litcmd() to prevent memory leaks.  Also
  1081. removed some really obnoxious debug() calls from litcmd().  ckuusr.h,
  1082. ckuus[56].c, 21 Jan 99.
  1083. Changed ODT 3.0 makefile entry not to contain an underscore, since these don't
  1084. show up when underlined (e.g. in Web links).  makefile, 21 Jan 99.
  1085. Stripped out some obsolete comments from ckuus4.c, 21 Jan 99.
  1086. Added a note about new TELOPT operands and cleaned up some typos in
  1087. ckermit2.txt, 21 Jan 99.
  1088. Fixed the "Negotations... (OK)" message again.  The idea is: don't print
  1089. "Negotiations" unless we get a timeout from tn_wait().  Once we get a timeout
  1090. and print "Negotiations", then print "." every second till the wait is up,
  1091. then print "(OK)".  Don't print dots or "(OK)" if we didn't print
  1092. "Negotiations".  Don't print "(OK)" twice.  AND... only do this upon initial
  1093. connection, not during the session.  This way, most people will never see
  1094. this message; it will only appear when the connection is taking a long time,
  1095. to let them know Kermit isn't dead.  ckctel.c, 21 Jan 99.
  1096. Moved lower() to ckclib, and renamed it to cklower().  ckucmd.c, ckuus5.c,
  1097. ckclib.[ch], 21 Jan 99.
  1098. Got rid of xindex() and replaced all references to it by references to
  1099. ckstrchr(), which is in ckclib.  ckufio.c, 21 Jan 99.
  1100. New HP-UX makefile entries from Peter Eichhorn; updated "+/-/?" notations in
  1101. comments at the top for C-K 7.0.  makefile, 25 Jan 99.
  1102. Some compilers have started to choke on "too many defines" in ckuusr.h.  Put
  1103. large blocks of K95-specific defines in #ifdef OS2..#endif, Telnet-specific
  1104. defines in #ifdef TNCODE..#endif, etc.  ckuusr.h, ckuus2.c, 25 Jan 99.
  1105. From Jeff: TELNET /PASSWORD:<pswd>, SET HOST /PASSWORD:<pswd>, for SRP enabled
  1106. versions of C-kermit.  To allow scripted operation of SRP connections.  Still
  1107. need to figure out how to allow users to call SET LOGIN PASSWORD <pwd> in K95
  1108. without the <pwd> being provided in an encrypted form.  But for now, SET LOGIN
  1109. PASSWORD will set a flag in K95 indicating that is where the password came
  1110. from so we know whether or not to decrypt it in ckuath.c Also, added support
  1111. for Preauthenticated Kerberos IV Ticket Getting Tickets, AUTH K4 INIT
  1112. /PREAUTH.  This provides an added layer of security by requiring that the
  1113. user's password be used to encrypt the ticket getting ticket request.  By
  1114. configuring the server to require pre-auth ticket requests it becomes nearly
  1115. impossible for an unauthorized user to request a TGT.  Unfortunately, this
  1116. does not work in K95 because Leash does not include the necessary
  1117. functionality.  It does work in C-Kermit.  ckcnet.c, ckcmai.c, ckuus7.c,
  1118. ckuus3.c, ckuath.h, ckuusx.c, ckuusr.c, ckuath.c, 25 Jan 99.
  1119. Looking at recursive transfers in VMS...
  1120.  . SEND /RECURSIVE actually works as it should, as long as it's given the
  1121.    a filespec containing "...".  The code is already there to accept the
  1122.    switch and set SEND PATHNAMES to RELATIVE automatically, and the files
  1123.    are indeed sent with relative pathnames.
  1124.  . GET /RECURSIVE did not set RECEIVE PATHNAMES RELATIVE, so I fixed that.
  1125.    ckuus6.c, 26 Jan 99.
  1126.  . I considered inserting "..." into the filespec, but that would be going
  1127.    overboard, plus how would it work in the middle of a parse, e.g. when "?"
  1128.    was typed in the filename, etc.  Also, not all filespecs lend themselves to
  1129.    this, e.g. in "define foo [somedir], send /recursive foo:*.*" there is no
  1130.    place to put the "..." ("foo:[...]*.*" doesn't work).
  1131. The /RECURSIVE switch for GET was in #ifdef RECURSIVE.  That was wrong -- the
  1132. client should be able to send this request to the server, even if the client
  1133. itself does not support recursive transfers.  The #ifdef was removed.  And for
  1134. symmetry, I added RECEIVE /RECURSIVE, which simply sets RECEIVE PATHNAMES to
  1135. RELATIVE.  ckuus6.c, ckermit2.txt, 26 Jan 99.
  1136. Discovered that when C-Kermit receives a file that has the same name as an
  1137. existing file into a directory that has many thousands of files (and FILE
  1138. COLLISION is BACKUP or RENAME), it can take a loooong time to make the backup
  1139. file name, since Kermit has to read the whole directory to find out which, if
  1140. any, backup files already exist.  The delay might be as long as 10-20 seconds,
  1141. even a full minute.  But C-Kermit 6.0 takes hardly any time at all in the same
  1142. directory.  Is it because of the new pattern matcher (ckmatch() instead of
  1143. match())?  Putting back match() makes it take even longer.  traverse() is the
  1144. culprit: it's now calling isdir() on every single file, which turns out to be
  1145. a surprisingly expensive call.  A little thought revealed it was OK to skip
  1146. the call to isdir() in the nonrecursive case, since higher-level code will
  1147. take care of filtering out unwanted directory files.  ckufio.c, 26 Jan 99.
  1148. Back to VMS...  Compilation of ckuusr.c blows up due to new #ifdefs in
  1149. ckuusr.h; it is now necessary to #include ckcnet.h before ckuusr.h, rather
  1150. than after, so the various TCP-related symbols will be defined before they are
  1151. referenced in #ifdefs in ckuusr.h.  ckuusr.c, 26 Jan 99.
  1152. Next problem:  GET /RECURSIVE, when sent to a VMS server, always results in
  1153. "Receive window full", even though it works fine with a UNIX server.  Why?
  1154. Once again, spurious #ifdef RECURSIVE..#endif around the supporting code.
  1155. #ifdefs removed and the command now works.  ckcpro.w, 26 Jan 99.
  1156. Except that it's sending the pathnames in VMS format rather than standard
  1157. (UNIX) format.  Why?  Because the client said to (K95 has FILE NAMES LITERAL
  1158. by default).  This is a problem because what is a non-VMS client going to do
  1159. with VMS-format directory names?  Unfortunately, the "fncnv" (filename
  1160. conversion) flag is overloaded in this case: we might want to leave the file
  1161. names unconverted but still need to convert the directory path syntax.  This
  1162. doesn't affect UNIX (even though it has the same bug) because its path syntax
  1163. is the same as the standard one.  To work around the problem for VMS only, I
  1164. made an additional check in nzltor(), so now we convert the path syntax if
  1165. FILE NAMES are CONVERTED *or* if the system ID of the other Kermit is not "D7"
  1166. (the VMS system ID).  ckvfio.c, 26 Jan 99.
  1167. Additional SNI stuff from Jeff for K95.  ckuusr.h, ckuus7.c, 26 Jan 99.
  1168. Minor SNI and help-text changes from Jeff.  ckuus[27].c, 28 Jan 99.
  1169. Added horizontal text lines to mark entry to and exit from CONNECT mode (when
  1170. not quiet).  These are done only in the CONNECT modules, not in the mainline
  1171. code, since terminal-emulating versions should not do this.  Also the lines
  1172. are not printed if QUIET is set or during APC transitions.  ckucns.c,
  1173. ck[duv]con.c, 28 Jan 99.
  1174. If XFER DISPLAY is FULLSCREEN but terminal type is not recognized, fall back
  1175. to CRT display, rather than SERIAL.  ckuusx.c, 28 Jan 99.
  1176. Added missing help text for SET SEND BACKUP.  ckuus2.c, 28 Jan 99.
  1177. "send /recursive ." doesn't work any more, even though "send ." does.  "send
  1178. /recursive .." doesn't work any more, even though "send .." does.  "send
  1179. /recursive /full/path/name" has gone back to trying to read the entire file
  1180. system.  Sounds familiar?  This was all fixed on Jan 7th, but then broken
  1181. again some time before Jan 14th.  Fixed again today.  ckufio.c, 28 Jan 99.
  1182. Now all the tests from Jan 12th work except "dir /recursive oofa.txt", which
  1183. fails to recurse.  One more tiny tweak fixes this and now all tests work
  1184. again.  ckufio.c, 28 Jan 99.
  1185. Fixed SET OPTIONS DIRECTORY /NOBACKUP, which wasn't working due to a typo.
  1186. ckuus6.c, 28 Jan 99.
  1187. Changed the server end of REMOTE DIRECTORY to obey SET OPTIONS DIRECTORY
  1188. /[NO]HEADING, /[NO]DOTFILES, and /[NO]BACKUP.  In UNIX only, sorted the
  1189. directory by name (because in UNIX, we have access to the list pointer).
  1190. ckcfns.c, ckermit2.txt, 28 Jan 99.
  1191. Fixed server end of REMOTE DIRECTORY to be compatible with local directory
  1192. listing format -- no more "<DIR>" in UNIX, show symlinks, don't always
  1193. show full pathname (but do show it in headings).  ckcfns.c, 29 Jan 99.
  1194. Changed date-time string shown in directory listings when actual date/time
  1195. can't be obtained from ????-??-?? ??:??:?? to 0000-00-00 00:00:00, so as
  1196. not to put non-digits in numeric fields.  ckcfns.c, ckuus6.c, 29 Jan 99.
  1197. "remote directory | sort -r" was sending "| sort -r" as the filespec
  1198. to the server, oops.  However, "remote directory | sort -r > foo" works as
  1199. expected.  This was a bug in remtxt(), fixed in ckuus7.c, 29 Jan 99.  Now we
  1200. can pipe incoming directory listings through local filters for display on
  1201. the screen, e.g. to sort in reverse chronological order, etc.  Documented
  1202. this in ckermit2.txt Section 5.3.2.
  1203. The C-Kermit server drops a character from the directory listing at the end of
  1204. each packet, as you can easily see by restricting the packet length to (say)
  1205. 30 (it's not quite so obvious when the packet length is 8000).  But it's not
  1206. nxtdir()'s fault, because nxtdir() returns every character from the listing.
  1207. In fact, sdata() is being called with a length that is 1 less than the actual
  1208. number of characters obtained from nxdir().  This problem has nothing to do
  1209. with recent changes to REMOTE DIRECTORY since REMOTE TYPE has the same
  1210. problem, and also REMOTE DELETE, REMOTE HELP, and any other command
  1211. implemented by sndblah()/nxtblah().  In fact, it's been there for quite some
  1212. time.  But it doesn't happen in regular file transfer, so what's the
  1213. difference?  ... Aha, it's in getpkt() -- the manipulation of the "first" flag
  1214. (governing lookahead and EOF) was not totally copied from the input-from-file
  1215. case to the input-from-function and other cases.  Fixed in getpkt(), ckcfns.c,
  1216. 29 Jan 99.
  1217. From Jeff:  Command interface for KLOGIN and EKLOGIN:
  1218. RLOGIN /ENCRYPT /KERBEROS <host> <userid> <protocol>.
  1219. ckuusr.h ckuus5.c ckuus7.c ckcnet.h ckcnet.c, 29 Jan 99.
  1220. Found some places where the connection log was not being written, namely
  1221. in the TELNET and RLOGIN commands.  Fixed in ckuus[3r].c, 29 Jan 99.
  1222. The confusion between CLOSE CONNECTION and CLOSE CONNECTION-LOG was just too
  1223. dangerous, so even though it's ugly, I changed the name of the connection log
  1224. to "CX log": LOG CX, CLOSE CX[-LOG].  ckuus[r2].c, 29 Jan 99.
  1225. From Jeff: Internal Telnet reset function.  ckctel.[ch], ckcnet.c, 30 Jan 99.
  1226. Due to a typo, the key in DIR /SORT:key was sticky.  Fixed in domydir(),
  1227. ckuus6.c, 30 Jan 99.
  1228. Discovered that IKSD could be suspended with SUSPEND or Z command (but not
  1229. with Ctrl-Z).  SUSPEND/Z also worked when nopush was in effect.  Fixed in
  1230. ckuusr.c, 30 Jan 99.
  1231. Discovered that if you gave a DIRECTORY command to IKSD in a directory that
  1232. can't be read, it would say "?Read permission denied - xxx" where xxx was
  1233. a filename.  Changed cmifi() to not show the filename under these conditions.
  1234. ckucmd.c, 30 Jan 99.
  1235. PRINT command given by IKSD guest gave the wrong error message.  ckuusr.c,
  1236. 30 Jan 99.
  1237. RECEIVE, given by IKSD guest in directory to which it does not have write
  1238. access works when it shouldn't.  But then of course it stops when it goes to
  1239. write out the first bufferful -- the file is not actually created.  But now
  1240. there is about 32K of packets in the pipeline, and all sorts of confusion
  1241. ensues, especially when streaming.  Fixed rcvfil() to precheck write
  1242. accessibility before accepting the file.  ckcfns.c, 30 Jan 99.
  1243. MOVE, SEND /MOVE, etc, were allowed by IKSD to guest users; they did indeed
  1244. send the file, but did not delete it.  Still, it should not give the
  1245. impression that it worked, so a check was added.  ckuusr.c, 30 Jan 99.
  1246. Horizontal-line printing was needed to move to left margin first when
  1247. returning from CONNECT mode due to autodownload or APC.  ckucns.c, ck[uv]con.c,
  1248. 30 Jan 99.
  1249. Traverse() test:
  1250.   dir
  1251.   dir /files
  1252.   dir /directories
  1253.   dir /recursive
  1254.   dir /recursive /files
  1255.   dir /recursive /directories
  1256.   dir oofa.txt
  1257.   dir /recursive oofa.txt
  1258.   dir /recursive *.txt
  1259.   dir *.txt
  1260.   dir */*.txt
  1261.   dir */*/*.txt
  1262.   dir .*
  1263.   dir /recursive .*
  1264.   dir /dotfiles
  1265.   dir /dotfiles /recursive
  1266.   dir foo (where "foo" is a relative directory name)
  1267.   dir .
  1268.   dir ..
  1269.   dir /fullpathname (of a directory)
  1270.   dir /fullpathname (of a file)
  1271.   dir /fullpathname (of filename with wildcards)
  1272.   dir /fullpathname (with wildcards in path)
  1273.   dir /files /fullpathname
  1274.   dir /directories /fullpathname
  1275. All the above work.  The following still try to read the entire file
  1276. system.  Will fix in next Beta:
  1277.   dir /recursive /fullpathname (of a directory)
  1278.   dir /recursive /fullpathname (of a file)
  1279.   dir /recursive /fullpathname (of filename with wildcards)
  1280.   dir /recursive /fullpathname (with wildcards in path)
  1281.   dir /recursive /files /fullpathname
  1282.   dir /recursive /directories /fullpathname
  1283. Add -funsigned-char to sunos41gcc and solaris25g makefile entries.  makefile,
  1284. 30 Jan 99.
  1285. Numerous #ifdef, syntax, and declaration adjustments when building on many
  1286. platforms with different options sets.  Many modules, 30-31 Jan 99.
  1287. initopts() was dumping core on some platforms -- char pointers not init'd
  1288. to NULL before calling makestr() on them.  ckuus5.c, 31 Jan 99.
  1289. --- Beta.04 ---
  1290. From Jeff: command interface for RLOGIN /K4 /K5 /ENCRYPT; rlogin (except for
  1291. window size) is working again on Unix; rlogin /k4 (except for window size) is
  1292. now working on Unix (no root required).  ckuusr.h ckuus7.c ckuus5.c ckcnet.c
  1293. ckcnet.h ckctel.c ckctel.h ckuath.h ckuat2.h ckuath.c ck_crp.c, 1 Feb 99.
  1294. Server side remote directory file lister didn't have enough %s's in format
  1295. string for non-perms case.  ckcfns.c, 1 Feb 99.
  1296. Fixed some long lines in ckuus2.c, 1 Feb 99.
  1297. The HP-UX 5.00 Wollongong TCP/IP build suddenly stopped working because
  1298. of complaints about inet_addr(), e.g.
  1299.   "ckcnet.c", line 3411: operands of = have incompatible types
  1300. where line 3411 is:
  1301.   saddr.sin_addr.s_addr = inet_addr(tcp_address);
  1302. inet_addr() can NEVER NEVER NEVER be used without including the #ifdef INADDRX
  1303. code around it.  Evidently a lot of calls to inet_addr() were added since
  1304. Beta.02, which is the last time I built on this system.  This means that
  1305. builds that use INADDRX won't work.  Unfortunately this is the only platform I
  1306. have access to that needs it, and it can be accessed only by special
  1307. arrangement, since it is normally kept turned off, and every compilation takes
  1308. several hours.  Fixed in ckcnet.c, 2 Feb 99.  Fortunately this is not a
  1309. show-stopper for Beta.04, since only very old UNIX versions need this, like
  1310. Integrated Solutions Inc V8S VME 68020 and Motorola Delta System V/68 R3V5.
  1311. Added an hpux500 makefile entry (no net).  2 Feb 99.
  1312. Although ckutio.c does not reference bzero(), somehow it is being referenced
  1313. from the generated object file (nm ckutio.o | grep bzero) in HPUX 5.00.
  1314. So I added a bzero stub to ckutio.c only for HPUX 5.00, only for the no-net
  1315. build.  2 Feb 99.  (Later it turned out that a macro defines memcpy or memset
  1316. as bzero somewhere...)
  1317. Removed references to INADDRX for DG/UX from makefile and ckcnet.h.  2 Feb 99.
  1318. More from Jeff on Kerberized Rlogin.  ckcnet.[ch], ckuus[47], etc, 2 Feb 99.
  1319. From Jeff: Fix a bug in which return value of ckgetpeer() was not checked for
  1320. NULL when writing wtmp record, causing IKSD to crash when accessed by a host
  1321. that could not be found in DNS.  And fix ckgetpeer() itself to return the
  1322. peer's IP address if it can't get the name.  ckufio.c, ckcnet.c, 4 Feb 99.
  1323. Fix from Jeff for draining problem.  ckcfn2.c, ckctel.c, 6 Feb 99.
  1324. For some weeks now there has been a problem with the VMS UCX version: when
  1325. sending files on a TCP/IP connection with streaming, the transfer gets stuck
  1326. after sending the EOF (Z) packet; the Z packet is sent OK, but C-Kermit never
  1327. reads the ACK.  Ctrl-C'ing out and CONNECTing back reveals the ACK still
  1328. sitting there waiting to be read.  And yet: (a) This does not happen in
  1329. non-UCX VMS versions or in UNIX versions; (b) it does not happen in the UCX
  1330. version when the debug log is turned on.  The problem was traced to netinc();
  1331. it seemed that once select() failed, it would never succeed again.  Jeff
  1332. guessed that a failing select() in UCX (and who knows where else) might alter
  1333. its parameters ("help cc socket_routines select" was uninformative), and that
  1334. moving the select() initialization (FD_ZERO(), FD_SET() into the for-loop
  1335. would fix the problem, and indeed that seems to have done the trick.
  1336. ckcnet.c, 7 Feb 99.
  1337. UNIX C-Kermit was failing to send the first byte of each file (or actually,
  1338. the first byte of each 32K bufferful read from disk) due to a typo in a debug
  1339. statement I added to zinfill() after Beta.04 was released.  Fixed in ckufio.c,
  1340. 7 Feb 99.
  1341. From Lucas Hart: Fixed osf makefile entry to pass CC and CC2 values along,
  1342. and add a du40gcc tarket.  makefile, 7 Feb 99.
  1343. Fixed various minor syntactic warnings from gcc on DU 4.0.  ckcfn2.c,
  1344. ckuus[rx].c, 7 Feb 99.
  1345. Another mysterious problem...  After releasing Beta.04, I finally was able to
  1346. build on AIX 4.1, but discovered that it had suddenly and for no apparent
  1347. reason started exhibiting the "terminal buffering reset after using curses"
  1348. problem, so that characters typed at the prompt would not echo until Return
  1349. was pressed, even though concb() had been been called to put the console back
  1350. in CBREAK mode.  This did not happen on earlier C-Kermit builds on AIX 4.1,
  1351. nor does it happen in the current build on AIX 4.2 or 4.3, nor, as far as I
  1352. can tell, on any other platform either.  The classic remedy to this problem is
  1353. to use newterm() rather than initscr() to initialize curses, accomplished by
  1354. adding -DCK_NEWTERM to the makefile entry.  This seems to have fixed the
  1355. problem.  I wonder if this means the same should be done in later AIX
  1356. versions, even though we presently have no adverse symptoms.  makefile,
  1357. 8 Feb 99.
  1358. Jeff pointed out that the server does not set the success flag internally
  1359. when it executes a command that generates a short-form response.  Fixed in
  1360. ckcpro.w, 8 Feb 99.
  1361. IKSD was improperly calling syscmd() to check disk space (of course, it didn't
  1362. work, but it was acting like it did -- returning an empty report rather than
  1363. an error).  Unfortunately, there is no good way to internalize disk-space
  1364. checking code in UNIX since the methods for doing so are COMPLETELY unportable
  1365. (and unreliable), so I made the server return an appropriate error when given
  1366. a REMOTE SPACE command and nopush is effective.  ckcpro.w, 8 Feb 99.
  1367. There were a few lingering problems with directory-tree recursion.  As noted
  1368. above, "dir /recursive /xxx", where /xxx was any full path (i.e. starting with
  1369. slash), would appear to hang because it was reading the whole file system.
  1370. Also "dir /recursive .." did not work at all.  Also "dir /recursive ." gave
  1371. incomplete results.  These were fixed by slightly altering the decision about
  1372. whether to recurse in UNIX traverse(), without breaking anything else, except
  1373. "dir /recursive blah" (where blah is a filename with no wildcards); this was
  1374. fixed by adding one more condition to the same decision.  Now we seem to pass
  1375. all tests.  ckufio.c, 8 Feb 99.
  1376. Changed sinix543 makefile target to sni543, and added sni544.  SNI says the
  1377. name SINIX was dropped after 5.42 in favor of Reliant UNIX.  makefile,
  1378. ckuver.h, 8 Feb 99.
  1379. Added Ctrl-Z (and ^Z+0x80) to SET PREFIXING CAUTIOUS to accommodate
  1380. connections to UNIX hosts that have old versions of C-Kermit that don't know
  1381. how to disable SIGTSTOP.  ckcmai.c, 8 Feb 99.
  1382. v(lockdir) lopped off the final character of the directory name on some
  1383. systems (e.g. Linux) but not others.  Fixed in nvlook(), ckuus4.c, 8 Feb 99.
  1384. Fixed ckutio.c (again) to use the right #ifdef around gettimeofday().
  1385. 9 Feb 99.
  1386. Removed -K option from sni54[34] entries, where it is no longer valid.
  1387. makefile, 9 Feb 99.
  1388. Fixed local SPACE command to error out if nopush and an external command or
  1389. program is required.  ckuusr.c, 9 Feb 99.
  1390. Added -DK_NEWTERM to the Linux target, in response to a rash of complaints
  1391. about loss of CBREAK mode on tty after curses display.  Did NOT add this to
  1392. the AIX 4.2 and 4.3 entries, even though it was suddenly necessary for 4.1,
  1393. since trials on 4.2 and 4.3 show that it completely hangs the program.
  1394. makefile, 9 Feb 99.
  1395. From Jeff: Preserve user ID and Password around failed SET HOST, TELNET,
  1396. and RLOGIN parses.  ckuus7.c, 9 Feb 99.
  1397. Another correction for #ifdefs around gettimeofday().  ckutio.c, 10 Feb 99.
  1398. Built for the first time on VMS 7.2, and with UCX 5.0, and with TGV 4.2A, and
  1399. with DECC 6.0, and miraculously no source changes were needed.  10 Feb 99.
  1400. Changes from Jeff for Windows-95-specific SET WIN95 items and help text,
  1401. including new SET WIN95 8.3-FILENAMES { ON, OFF }.  ckuusr.h, ckuus[27].c,
  1402. 10 Feb 99.
  1403. Added some casts to suppress warnings about pointers not assignment compatible
  1404. (signed vs unsigned char).  ckcfn2.c, ckcnet.c, 10 Feb 99.
  1405. Folded long lines in ckuath.c, 10 Feb 99.
  1406. Added a missing #ifndef NOSERVER..#endif clause to some code in ckcfn3.c.
  1407. 10 Feb 99.
  1408. Simplified UNIX traverse() to eliminate some redundant function calls.
  1409. ckufio.c, 10 Feb 99.
  1410. Spent some more time with UNIX traverse() to see why it's skipping some files
  1411. it should pick up in some cases, but made little progress.  To be continued.
  1412. ckufio.c, 10 Feb 99.
  1413. Fixes for DG/UX: add declaration for tv, tz to ckutio.c; add NOGETUSERSHELL
  1414. and CK_NEWTERM to, and remove CK_POLL from, makefile entries.  11 Feb 99.
  1415. Verified that SINIX 5.42 does not need CK_NEWTERM.  11 Feb 99.
  1416. Mark Berryman said that "u_int" errors go away in UCX 5.0 builds if you
  1417. #include <if.h>.  This works great in UCX 5.0, but UCX 2.0 has no <if.h>.
  1418. There is also a warning about the data type of the length argument to
  1419. getpeername.  It needs to be unsigned int in UCX 5.0, but signed in previous
  1420. versions.  We need to (a) find a UCX-5.0-unique symbol in the UCX header
  1421. files, or (b) a logical name or symbol we can pick up in the DCL build
  1422. procedure, or (c) create a new build target or somesuch.  11 Feb 99.
  1423. Back to UNIX traverse.  After yesterday's changes, we now pass all tests with
  1424. the following exceptions:
  1425.  1. "dir /recu <filename>" shows directory names as well names of files
  1426.     that match <filename>, which might or might not be wild.
  1427.  2. "dir /recu /tmp" skips most files and directories in /tmp.
  1428. This last one is quite odd, since the same commands work fine in other
  1429. directories on the testbed system.  What's different about /tmp?
  1430. Added zrewind() to ckufio.c.  Rationale: DIRECTORY calls cmifi(), which
  1431. calls zxpand to expand the file list.  If this succeeds, then DIRECTORY itself
  1432. calls zxpand again.  But as long as the same argument and criteria are used
  1433. each time, the second call should be unnecessary -- all we need to do is
  1434. use the list from the first time, which is still there.  zrewind() resets the
  1435. list pointer to the beginning and returns the count.  Obviously this is for
  1436. UNIX only, since other implementations do not necessarily create an internal
  1437. list.  But when it can be used, it cuts the time in half -- quite noticeable
  1438. in long directories.  ckuus[56].c, ckufio.c, 11 Feb 99.
  1439. And of course it also makes debugging easier since we only have one invocation
  1440. of zxpand to deal with...  OK, so back to traverse....
  1441. Hmmm...  traverse() knows whether a file is a directory when it calls
  1442. addresult() to put it on the list.  But then addresult() calls isdir() again
  1443. to find out if its argument a directory.  Added a second parameter to
  1444. addresult() to let the caller tell it in advance whether it's a directory, or
  1445. if it must be looked up.  This eliminates lots of redundant stat() calls and
  1446. speeds things up even more.  After this, and after cleaning up traverse() line
  1447. by line, it all seems to work except for a couple minor glitches that I can
  1448. clean up tomorrow.  ckufio.c, 11 Feb 99.
  1449. With hints from Mark Berryman, added autodetection of UCX 5.0 to CKVKER.COM;
  1450. if detected, it adds UCX50 to CFLAGS.  The issue here is that <if.h> must be
  1451. included in UCX 5.0 to pick up the definition of u_int (and who knows what
  1452. else), but it does not exist in earlier releases.  Corresponding #ifdefs in
  1453. the code take care of the special considerations in the modules.  Now C-Kermit
  1454. builds without complaint and without any special CKVKER.COM command-line
  1455. invocation on UXC 2.0, 4.0, and 5.0 as well as on TGV 4.0.  ckvker.com,
  1456. ckcnet.[ch], ckuus[45].c, 12 Feb 99.
  1457. Fixed the following problem noticed by Jeff: if protocol is XMODEM, then
  1458. RECEIVE /PROTO:KERMIT gives an error if an as-name was not specified.
  1459. doxget(), ckuus6.c, 12 Feb 99.
  1460. Changed the name of zrewind() to zxrewind() to make it look more like a friend
  1461. of zxpand() and not an analog of rewind(), which resets a file pointer, and
  1462. which we might want to add later for some reason.  Added a symbol that says
  1463. whether we can use it, ZXREWIND, and defined it for K95 and UNIX, since Jeff
  1464. added it for K95.  Changed all calls to zxrewind() to be in #ifdef
  1465. ZXREWIND..#endif.  ckcdeb.h, ckufio.c, ckuus[56].c, ckcplm.txt, 12 Feb 99.
  1466. In several spots in cmifi(), zxpand() was called a second time to rewind the
  1467. file list; replaced these calls with zxrewind().  ckucmd.c, 12 Feb 99.
  1468. Ditto in the spot in fneval() where zxpand() was called to rewind the list
  1469. in K95.  ckuus4.c, 12 Feb 99.
  1470. Corrections from Jeff to yesterday's changes, plus new IF AVAILABLE options
  1471. for encryption, SSL, SRP, NTLM, etc, plus a couple =='s that should should've
  1472. been ='s.  Changed AVAIL_blah to AV_blah since macros must be unique within 8
  1473. chars in some cpp's.  ckcpro.w, ckucmd.c, ckuus[26].c, 13 Feb 99.
  1474. Some debug() statements fixed by Lucas Hart, especially one in a VMS section
  1475. of domydir() that referenced a pointer that had not yet been init'd.  ckuus6.c,
  1476. 13 Feb 99.
  1477. From Lucas Hart: fix for VMS isdir() to recognize a search list as a directory
  1478. so (e.g.) "cd sys$manager" can work.  ckvfio.c, 13 Feb 99.
  1479. Added zxrewind() for VMS.  ckcdeb.h (define ZXREWIND for VMS), ckvfio.c,
  1480. 13 Feb 99.
  1481. Hit upon an idea to make /RECURSIVE work for VMS: in fgen(), before the
  1482. lib$find_file() loop, call zfnqfp() to get the full filespec including
  1483. directory brackets, then insert "..." before the closing bracket IF (a)
  1484. "recursive" was set, (b) the argument filespec did not already contain "...",
  1485. and (c) there actually was a closing directory bracket.  Checked first to see
  1486. if LIB$FIND_FILE() itself had an option for recursive searching; it doesn't.
  1487. This fully enables SEND /RECURSIVE and DIR /RECURSIVE, plus GET /RECURSIVE
  1488. when send to a VMS C-Kermit server, without the user having to include "..."
  1489. in filespecs, and eliminates lots of "buts" and "excepts" in the documentaion.
  1490. ckcdeb.h (define RECURSIVE for VMS), ckvfio.c, ckermit2.txt, 13 Feb 99.
  1491. "dir blah" in VMS did nothing if BLAH.DIR;1 is a directory.  It should do the
  1492. same as "dir [.blah]".  Cause: failure to reset fcount in zxrewind; fixed in
  1493. ckvfio.c and ckufio.c, 13 Feb 99.
  1494. Lucas said that in VMS, "dir foo.dir" should just list the FOO.DIR file,
  1495. rather than the files in [.FOO], as it currently does.  Whereas (I think) "dir
  1496. foo" and "dir [.foo]" should list the contents of the directory rather than
  1497. the directory file itself, as they do now, and as "dir foo" (where foo is a
  1498. directory name) does in UNIX and K95.  Added code to cmifi() to make this
  1499. distinction.  Now "dir [/recursive] foo.dir" (or *.dir, etc) lists directory
  1500. files; the others list contents.  The FOO.DIR -> [.FOO] conversion is skipped
  1501. only when the DIRECTORY command is active, because we need this conversion
  1502. at other times.  ckucmd.c, ckermit2.txt, 13 Feb 99.
  1503. On a similar note, there is no way in UNIX to obtain the "ls -d" behavior,
  1504. i.e. to list a specified directory file, rather than the files in the
  1505. directory.  We'll return to this later...
  1506. Back to UNIX traverse()...  "dir /recursive oofa.txt" lists not only all
  1507. oofa.txt files in the current directory tree, but also each directory that
  1508. contains an oofa.txt file; example:
  1509.   (/w/fdc/tree/) C-Kermit>dir /rec oofa.txt
  1510.   drwxrwx---       512  1999-01-28 16:53:59  subdir/another/          <--
  1511.   -rw-rw----      6067  1999-01-07 21:21:43  subdir/another/oofa.txt
  1512.   -rw-rw----      3537  1999-01-12 18:07:46  subdir/oofa.txt
  1513.   drwxrwx---       512  1999-01-12 20:18:15  subdir/thisdir/          <--
  1514.   -rw-rw----      6067  1999-01-12 16:00:42  subdir/thisdir/oofa.txt
  1515.   -rw-rw----      2192  1999-01-13 11:03:14  oofa.txt
  1516.   (/w/fdc/tree/) C-Kermit>
  1517. It should only list the files themselves; the entries marked by arrows should
  1518. not appear.  Of course, including the /FILES switch produces the desired
  1519. result.  Also, "dir /rec *.txt" does not show this problem.  So that means
  1520. it only happens when the original filespec was wild.  So don't add a directory
  1521. name to the list when recursing if the original filespec was not wild.
  1522. ckufio.c, 13 Feb 99.
  1523. Next: directories whose names start with "." should not be opened if matchdot
  1524. is 0 and if the "." was not specified in the user's pattern.  Fixed by adding
  1525. another test to traverse().  ckufio.c, 13 Feb 99.
  1526. Next: "dir /recursive */*.txt" lists all files in the current directory, even
  1527. if they don't match "*.txt", but correctly selects only *.txt files in lower
  1528. directories.  Changed a comparison.  ckufio.c, 13 Feb 99.
  1529. Next: "dir .*" doesn't list dotfiles anymore unless /DOTFILES included.  Added
  1530. another test.  ckufio.c, 13 Feb 99.
  1531. Now UNIX C-Kermit passes all "traverse.txt" tests in its local DIR command.
  1532. After yesterday's changes, plain old "dir" in VMS acted recursively due to
  1533. missing parens in a while condition; fixed in cmifi().  ckucmd.c, 14 Feb 99.
  1534. Now the VMS version passes all tests.
  1535. Changed VMS zgetfs() to call stat() to get file size and directory status,
  1536. since it can succeed where RMS fails, e.g. when permissions don't allow
  1537. opening.  This removes lots of nasty -1's from the directory listing.
  1538. However, permissions are still lost when the file can't be opened.  ckvfio.c,
  1539. ckcfns.c, ckuus6.c, 14 Feb 99.
  1540. UNIX C-Kermit server's directory listings sent to client did not handle
  1541. symlinks.  Fixed in nxtdir().  ckucmd.c, 14 Feb 99.
  1542. Minor updates from Nigel Roles for Plan 9.  ckucmd.h, ckufio.c, ckpker.mk,
  1543. 14 Feb 99.
  1544. Jeff renamed os2_setflow() to ttsetflow().  ckudia.c, ckuus6.c, 15 Feb 99.
  1545. Updated HELP SET NETWORK text.  ckuus2.c, 15 Feb 99.
  1546. Faced up to the fact the having a single variable for flow control is an idea
  1547. whose time is past.  Added a connection-type switch for SET FLOW, so now SET
  1548. FLOW can take an optional switch (/REMOTE, /TCPIP, /MODEM, etc) to set the
  1549. default flow control for a particular type of connection without affecting the
  1550. others.  Added a flow control table with appropriate flow values for each type
  1551. of connection.  Added SHOW FLOW to show the table plus the current flow
  1552. control.  Got rid of SET FLOW AUTO, since now it's meaningless (the command is
  1553. still accepted, but does nothing).  Now you can flip around among different
  1554. kinds of connections and get the right kind of flow control without thinking
  1555. about it (usually).  NOTE: At first I thought the best default for remote mode
  1556. would be KEEP, but that doesn't work at all when coming in via Telnet -- it
  1557. totally wrecks file transfer.  So for now, at least, it's NONE.  ckcdeb.h,
  1558. ckuusr.h, ckcmai.c, ckuus*.c, ckermit2.txt, 15 Feb 99.
  1559. Setting SIGINT and SIGQUIT to SIG_IGN was left out of the ckucon-to-ckucns
  1560. transition.  It didn't matter in most cases, since ttvt() puts the console
  1561. into raw mode, but in HP-UX, the HP-9000 <RESET> key still raises SIGINT,
  1562. which under these conditions kills C-Kermit when hit twice.  So the
  1563. appropriate signal() calls were added to conect() after the ttvt() call.
  1564. ckucns.c, 15 Feb 99.
  1565. Added SHOW TRANSFER (XFER) to SHOW all the SET TRANSFER items.  ckuusr.h,
  1566. ckuus4.c, 15 Feb 99.
  1567. Filled in new and missing SET TRANSFER items in HELP SET TRANSFER text.
  1568. ckuus2.c, 15 Feb 99.
  1569. Added missing zxrewind() prototype to ckcdeb.h.  15 Feb 99.
  1570. Noticed that if I give a TYPE command at the IKSD> prompt, and the file
  1571. contains any 0xff bytes, these are sent bare, thus forming a random Telnet
  1572. command for the client Changed the TYPE command to double 0xff characters if
  1573. (sstelnet || inserver).  ckuus6.c, 15 Feb 99.  There are probably other places
  1574. where this could happen...
  1575. Added a tgetent() stub for VOS.  ckuusx.c, 15 Feb 99.
  1576. In VMS, we use zrelname() to reduce a fully qualified filespec to a relative
  1577. one, to save space in the directory listing.  Thus if my current directory is
  1578. D0:[FDC] and I say "dir [fdc.text]oofa.txt", it will print "[.TEXT]OOFA.TXT"
  1579. instead of "DISK0:[FDC.TEXT]OOFA.TXT".  However, if my current directory is
  1580. [FDC.TEXT] and I say "dir [-]login.com", it prints "[.TEXT]LOGIN.COM" instead
  1581. of "[FDC]LOGIN.COM" or "[-]LOGIN.COM".  So zrelname() was fixed to take into
  1582. account the case where the current directory is a subdirectory (one or more
  1583. levels down) of the file's directory, in which case it prints [-] or [--],
  1584. etc, for the file's directory.  ckvfio.c, 15 Feb 99.
  1585. From Jeff: some #ifdef adjustments to prevent undefined auth/crypt symbols:
  1586. ckuus6.c; some auth/crypt changes to ckcnet.c and ckuath.c; debugging
  1587. statements added to ckcfn2.c packet/checksum routines.  16 Feb 99.
  1588. From Jeff: initialize lots of automatic variables in functions all over the
  1589. place.  Many modules, 16 Feb 99.
  1590. Back to zrelname() in VMS.  There were some glitches, plus it did not handle
  1591. the case where the file directory is not a subdirectory of the current
  1592. directory, nor vice versa, but the two shared a common ancestor.  ckvfio.c,
  1593. 16 Feb 99.
  1594. Various (CHAR *) / (char *) casts.  ckcfns.c, ckcnet.c, 17 Feb 99.
  1595. The "dironly" and "fileonly" hacks have become unbearable.  A piece of code
  1596. such as domydir() can set or unset them prior to calling (say) zxpand() or
  1597. cmifi(), but loses control the minute the called routine does the same, or
  1598. calls some other routine that might do the same.  So I added a new API:
  1599. nzxpand(s,flags), which is zxpand() with a second argument: flags == 1 means
  1600. files only; 2 means directories only; anything else (normally 0 or 3) means
  1601. files and directories.  I brutally expunged all references to the dironly and
  1602. fileonly variables from all files, and replaced all zxpand() calls in the
  1603. mainline code with nzxpand() (this won't break weird platforms -- see
  1604. ckcdeb.h).  I think everything will work much better now.  ck[duv]fio.c,
  1605. ckvfio.c, ckucmd.c, ckuus6.c, ckcdeb.h, ckcplm.txt, 17 Feb 99.
  1606. Some corrections from Jeff to yesterday's changes.  ckcdeb.h, ckuusy.c,
  1607. ckufio.c, 18 Feb 99.
  1608. Added zrewind() for AOS/VS.  ckcdeb.h, ckdfio.c, 18 Feb 99.
  1609. Changed nzxpand() to be totally parameter-driven; flags word now contains
  1610. flags for dironly, fileonly, matchdot, recursive, etc.  ckcdeb.h, ckcfns.c,
  1611. ckcpro.w, ck[duv]fio.c, ckucmd.c, ckuus[46y].c, 18 Feb 99.
  1612. Added NOXFER symbol, which, if defined, deselects all file-transfer code
  1613. (Kermit and XYZMODEM) at compile time.  This is for building C-Kermit strictly
  1614. as a scripting and communications engine, when memory is at a premium, e.g. in
  1615. Linux-based embedded systems.  -DNOXFER removes about 300K on Intel, 400K on
  1616. Sparc.  All modules changed with very few exceptions.  Built OK with and
  1617. without -DNOXFER on UNIX and VMS.  Added a "linuxso" target for building a
  1618. < 400K version that includes full scripting and serial communications, but
  1619. no networks, help, character-sets, etc, that would not be used in a typical
  1620. embedded application.  18 Feb 99.
  1621. Added autodetection of <if.h> to CKVKER.COM for picking up u_int in UCX
  1622. versions below 5.0.  19 Feb 99.
  1623. A user noted a limit of 1024 on array size -- this was a totally arbitrary
  1624. and needless restriction, so I removed it.  Now an array can be any size
  1625. at all (until and unless a malloc() fails).  ckuusr.c, 21 Feb 99.
  1626. Changed UNIX version to not set BRKINT -- I have no idea why it ever did.
  1627. This causes big problems with UNIX workstations that have a BREAK key,
  1628. especially if it is badly positioned (as on HP keyboards, where users hit it
  1629. accidentally while trying to type Esc).  ckutio.c, 21 Feb 99.
  1630. UNIX "send ./?" was listing dot files when it shouldn't.  Fixed in traverse().
  1631. ckufio.c, 21 Feb 99.
  1632. Fixed some more CHAR/char complaints.  ckuus6.c, 22 Feb 99.
  1633. CD command makes disk spin if <ESC> typed in the middle of a directory name,
  1634. whereas Beta.04 didn't do this.  This is because traverse now calls isdir() on
  1635. every file.  Fixed this by calling isdir() only when we know we have to.
  1636. traverse(), ckufio.c, 22 Feb 99.
  1637. Discovered that SEND /RECURSIVE *to* C-Kermit no longer works: zchko() says
  1638. access denied.  I'm not sure how or when this happened, but the problem was
  1639. that when we check writeability of nonexistent paths, access() fails.  zchko()
  1640. needed to be changed to peel back path segments until we reached one that
  1641. existed before calling access on it.  (If we can create a file in an existing
  1642. directory, then we can also create a directory, and in fact a whole tree.)
  1643. ckufio.c, 22 Feb 99.
  1644. Discovered that the following sequence:
  1645.   cd subdir, dir .., cd .., dir /recu /dir .
  1646. gives a bizarre listing.  It turns out that cmifi() skipped calling nzxpand()
  1647. in this case, and so zxrewind gave us the list from *previous* call, which is
  1648. of course no longer valid in the new context, so zgetfs() and friends all
  1649. fail.  Fixed in cmifi2() by ensuring it ALWAYS calls nzxpand() (at least when
  1650. diractive is nonzero).  ckucmd.c, 22 Feb 99.
  1651. Discovered that "dir /recursive /tmp/fdc/foo" (i.e. a full absolute path
  1652. containing no wildcards) takes forever because traverse reads the whole file
  1653. system.  Of course this was fixed several times before, but then subsequent
  1654. fixes (specifically, for "dir /recursive foo.bar" -- same thing, but path
  1655. NOT absolute) broke it.  Fixed in traverse(), ckufio.c, 22 Feb 99.  The
  1656. /RECURSIVE switch is ignored in this case, which makes C-Kermit do the same
  1657. thing as "ls -lR /tmp/fdc/foo".
  1658. Peter Eichhorn tested yesterday's code in a directory that contained 10,000
  1659. files: "ck abc<ESC>" still took forever and made the disk spin a lot.  It
  1660. turns out the change I made yesterday also needed to be made in another place.
  1661. Now it's fast again.  ckufio.c, 23 Feb 99.
  1662. Added -DNOTTYLOCK to AIX 3.x targets, since ttylock() evidently does not work
  1663. right there (the code compiles OK but says "access to lock denied", even
  1664. though it has all the same perms and owner/group as cu, whereas if built to
  1665. use do-it-yourself lockfile handling, it works OK).  makefile, 23 Feb 99.
  1666. Problem: We have (say) a UNIX-to-UNIX connection with all defaults,
  1667. client/server.  We say "get blah.txt".  The file is sent in text mode because
  1668. of the "*.txt" pattern, but the transfer is interrupted.  So then later we say
  1669. "reget blah.txt".  This is refused because the "*.txt" pattern puts it into
  1670. text mode again and REGET must be in binary mode.  Two problems:
  1671.  1. The file did not have to be sent in text mode in the first place if
  1672.     C-Kermit had recognized that the connection was between "like systems"
  1673.     AND character-set translation was not active.  In this case, we can skip
  1674.     looking thru the patterns and just stick with binary mode.
  1675.  2. [RE]GET /BINARY did not work when the filename matched a text pattern on
  1676.     the server side.  Fixing this required defining a new transfer-mode
  1677.     WHATAMI bit for the initialization string, but since the WHATAMI field was
  1678.     already full, a new WHATAMI2 field was added.  Now GET /BINARY, REGET
  1679.     /BINARY, GET /TEXT, etc, always work exactly as expected.  ckcker.h,
  1680.     ckcpro.w, ckcfns.c, ckuus[r6].c, ckermit2.txt, 24 Feb 99.
  1681. These (and the next two) are rather fundamental changes and need a pretty
  1682. heavy workout.
  1683. Made RESEND and SEND /RECOVER both imply /BINARY since they won't work any
  1684. other way.  ckuusr.c, ckermit2.txt, 24 Feb 99.
  1685. Ditto for REGET and GET /RECOVER.  This, in turn, forces manual transfer mode
  1686. at the server, and now even "reget oofa.txt" will work, at least assuming
  1687. client and server have compatible (i.e. non-length-changing) text-file
  1688. formats.  ckuus6.c, ckermit2.txt, 24 Feb 99.
  1689. Added SEND /[NO]DOTFILES.  ckuusr.h, ckuus[r2].c, ckermit2.txt, 24 Feb 99.
  1690. Discovered SHOW FILE wasn't working right.  Diagnosis: feol was declared as
  1691. extern int rather than extern CHAR.  Fixed in ckuus4.c, 24 Feb 99.
  1692. Added dynixptx216c target to makefile, from Roger Allen.  24 Feb 99.
  1693. Made "cop" be an OK abbreviation for "copy".  ckuusr.c, 24 Feb 99.
  1694. Changes from Jeff for K95G.  ckuus[7x].c, 24 Feb 99.
  1695. Updated sunos41gcc+krb and +srp makefile entries from Jeff.  25 Feb 99.
  1696. The CD Message was fractured in IKSD -- forgot to add a terminating NUL at
  1697. the end of the string when making the IAC-doubled copy.  ckuus6.c, 25 Feb 99.
  1698. Promptly removed the aforementioned code because it really belongs in the
  1699. printf (puts, putc, etc) substitute that we are already using for server-side
  1700. telnet and IKSD.  ckuus6.c, 25 Feb 99.
  1701. From Jeff, 25 Feb 99:
  1702.  . IAC doubling added to ckxprintf() and ckxfprintf().  ckcdeb.h, ckutio.c.
  1703.  . Check for stdout/stderr in ckxfprintf().  ckutio.c.
  1704.  . Removed commented-out IAC doubling from dotype().  ckuus6.c.
  1705.  . Moved allocation of keymap/macro from cmdini() to before sysinit() for
  1706.    the benefit of K95G which starts being delivered keyboard input during
  1707.    sysinit().  ckcmai.c, ckuus5.c.
  1708. Added encryption indication to SHOW CONNECTION.  ckuus3.c, 25 Feb 99.
  1709. Peter E reported that transfers between two Kermit programs failed when there
  1710. was an Rlogin command between them and C-Kermit 7.0 was the file sender, but
  1711. such transfers did not fail in earlier releases.  Diagnosis: C-Kermit 7.0
  1712. unprefixes <LF> by default; if a packet contains "<LF>~." this breaks the
  1713. Rlogin connection.  Packets contain this sequence when a file has a line that
  1714. begins with 14 repeated characters.  Since Kermit has no way of knowing there
  1715. is an Rlogin command in the middle, we have to prefix LF by default.
  1716. ckcmai.c, 25 Feb 99.  (Ditto when 'cu' is in the middle.)
  1717. Peter E also noticed that C-Kermit would crash under certain conditions on
  1718. some versions of HP-UX when its debug log was active during file transfer.  It
  1719. looks like the debug(F011,...) handler did not allocate quite enough memory
  1720. when given a really long string (like 32K).  Fixed in dodebug(), ckuusx.c.
  1721. Also, the "debug(F011,"ZINFILL fread",zinbuffer,zincnt);" call was overkill
  1722. anyway since now we're reading 32K chunks from the disk.  Changed it to just
  1723. show the count; ckufio.c, 25 Feb 99.
  1724. Minor syntactic corrections to yesterday's changes.  ckuus3.c, ckutio.c,
  1725. 26 Feb 99.
  1726. Changed C-Kermit's default file type from text to binary.  ckcmai.c,
  1727. ckermit2.txt (Sections 0, 4, and 4.3), 26 Feb 99.
  1728. Renamed hpux90mot target to hpux90m68ko for consistency.  "-funsigned-char"
  1729. added to CFLAGS of all HP-UX gcc targets.  makefile, 26 Feb 99.
  1730. When making SEND /RECOVER imply /BINARY, I accidentally also made
  1731. SEND /RECURSIVE imply /BINARY.  Fixed in doxsend(), ckuusr.c, 26 Feb 99.
  1732. Back to client/server conveniences...  Client SEND /RECURSIVE does not
  1733. automatically SET RECEIVE PATHNAMES RELATIVE in the server, but GET /RECURSIVE
  1734. does.  Why is this?  Because GET /RECURSIVE uses a special packet type but
  1735. SEND /RECURSIVE does not.  The user should not have to deal with this.  Added
  1736. PATH_AUTO to ckcker.h.  Added SET RECEIVE PATHNAMES AUTO: ckuus7.c.  Made AUTO
  1737. be the RECEIVE PATHNAMES default: ckcmai.c.  Fixed SHOW FILE to display the
  1738. new value: ckuus4.c.  Defined a WMI2_RECU bit for the new WHATAMI2 field:
  1739. ckcker.h.  Set this bit in rpar() if recursive > 0, and set RECEIVE PATHNAMES
  1740. to RELATIVE automatically in spar() if RECEIVE PATHNAMES was AUTO, plus set a
  1741. flag this was done so AUTO would be restored at the end of the transaction or
  1742. upon interruption: ckcfns.c, ckuus[25x].c, ckermit2.txt, 26 Feb 99.
  1743. Fix to cmifi() from Jeff to make sure it calls nzxpand() in K95 even if
  1744. user gives only a disk letter.  ckucmd.c, 26 Feb 99.
  1745. Fixes from Jeff to DIR /ENGLISHDATE and Rlogin problems reported by Lucas
  1746. Hart.  ckuus[67].c, 28 Feb 99.
  1747. Jeff suggested we keep incomplete files only when receiving in binary mode.
  1748. Added [ REMOTE ] SET [ FILE ] INCOMPLETE AUTO, which means KEEP when in binary
  1749. mode, DISCARD otherwise.  ckuus[2346].c, ckcfn[s3].c, ckcmai.c, ckcpro.w,
  1750. ckermit2.txt, 28 Feb 99.
  1751. The change I made on 24 Feb to use binary mode whenever the two Kermits are
  1752. on like platforms and there was no charset translation was broken by setting
  1753. the default file type to binary.  Fixed in sfile(): ckcfns.c, 28 Feb 99.
  1754. Added /MOVE-TO: and /RENAME-TO: switches, which were already available for
  1755. SEND, to GET and RECEIVE.  This rounds out our "atomic file movement"
  1756. repertoire.  ckcmai.c, ckuus[56x].c, ckcfns.c, 28 Feb 99.
  1757. Numerous corrections to internal crossrefs in ckermit2.txt from Peter E.
  1758. 28 Feb 99.
  1759. Got rid of the long and hideous mass of #ifdefs around the tv and tz
  1760. declarations in ckutio.c by adding NOTIMEZONE / HAVE_TZ and NOTIMEVAL /
  1761. HAVE_TV symbols to ckcdeb.h.  1 Mar 99.
  1762. Moved call to fxdinit() (fullscreen file-transfer display initialization) from
  1763. main() to screen(), and ensured we don't call it unless we have to, we don't
  1764. execute it more than once, and we don't print any error messages when in
  1765. background or batch.  This fixes numerous problems; e.g. the screen was a
  1766. total shambles before if the terminal type was unknown, pointless warnings
  1767. about terminal type when the file transfer display would not have been
  1768. fullscreen anyway, etc.  ckcmai.c, ckuusx.c, 1 Mar 99.
  1769. Added -DDCLGETCWD to CFLAGS for is5r3jc.  makefile, 1 Mar 99.
  1770. Fixed arrangement of horizontal lines around file transfer and around
  1771. CONNECT-mode help text.  ckucns.c, ck[duv]con.c, 1 Mar 99.
  1772. Updated SHOW FEATURES list to say "No making connections" if NOLOCAL defined,
  1773. and fixed some typos.  ckuus5.c, 1 Mar 99.
  1774. Fixed an unguarded reference to tcharset in ckcfns.c, 1 Mar 99.
  1775. Updated help text for RECEIVE and GET, plus help text for new K95 Kverbs from
  1776. Jeff.  ckuus2.c, 1 Mar 99.
  1777. "send blah", where blah is a file that lacks read permission, did not produce
  1778. an error message.  Fixed in ckuusr.c, 1 Mar 99.
  1779. Changed {SEND,RECEIVE,GET} {/MOVE-TO:,/RENAME-TO:} to save and restore global
  1780. values snd_move, snd_rename, rcv_move, rcv_rename values.  ckuus[r56x].c,
  1781. 1 Mar 99.
  1782. Added global {SEND,RECEIVE} {/MOVE-TO:,/RENAME-TO:} values to SHOW FILE,
  1783. and finally added askmore() to SHOW FILE, yuk.  ckuus4.c, 1 Mar 99.
  1784. Added SET { SEND, RECEIVE } { MOVE-TO:, RENAME-TO: } to set global values
  1785. for these.  ckuus[27].c, 1 Mar 99.
  1786. Changes to SHOW DIAL for TAPI and SET WIN95 OVERLAPPED-IO from Jeff.
  1787. ckuus[47].c, 1 Mar 99.
  1788. Updated HP-UX 10.30 and 11.00 targets from John Bigg of HP: makefile, 2 Mar 99.
  1789. Yesterday's change broke the SET TRANSFER DISPLAY command.  Fixed in ckcmai.c,
  1790. ckuus[7x].c, ckcker.h, 2 Mar 99.
  1791. Fixed SET TRANSFER DISPLAY SERIAL to wrap dots based on actual terminal width
  1792. rather than assuming 80.  ckuusx.c, 2 Mar 99.
  1793. SEND /NOBACKUP was broken by a missing comment closer.  ckuusr.c, 2 Mar 99.
  1794. Ditto for GET /DELETE.  ckuus6.c, 2 Mar 99.
  1795. "type /?" bad news -- since its FDB had file first and switch second, "/?"
  1796. tried to build a list of all files in the root directory.  Rearranged to have
  1797. switch first, file second, like all the other commands.  ckuusr.c, 2 Mar 99.
  1798. Fixed an unguarded reference to pipesend.  ckcfns.c, 2 Mar 99.
  1799. Started work on PURGE command (to remove all but a given number of backup
  1800. files).  Will finish tomorrow.  ckuusr.[ch], ckuus7.c, 2 Mar 99.
  1801. Added ^D and ^U to default prefixing table, since these act like LF when
  1802. followed by ~ when going through an Rlogin connection.  ckcmai.c, 3 Mar 99.
  1803. Syntax corrections.  ckuus[27x].c, ckvcon.c, 3 Mar 99.
  1804. It seems that streaming transfers are sensitive to "X" interruption if it
  1805. happens in a certain spot -- just at the beginning and/or just at the end.
  1806. Found and fixed a spot in input() that might have been causing this (no,
  1807. it didn't fix it).  ckcfn2.c, 3 Mar 99.
  1808. filhelp() was calling isdir() on every file.  This is no longer necessary,
  1809. since the parsing function that called it has already filtered out file and/or
  1810. directory names by calling nzxpand() with the appropriate flags.  Commented
  1811. out this call to isdir().  ckucmd.c, 3 Mar 99.
  1812. SEND /RECURSIVE ./?<Ctrl-U> left recursive flag stuck on.  Moved the resetting
  1813. of recursive and matchdot to the top of the reparse loop, rather than the top
  1814. of the parse loop.  ckuus5.c, 3 Mar 99.
  1815. Sending to IKSD, logged in as anonymous, was failing with "directory creation
  1816. failure" even when sending a regular file not containing any directory parts
  1817. in its name.  The problem was in zmkdir(), but I can't imagine why we weren't
  1818. seeing the same failures before (and we weren't -- lots of people were
  1819. uploading stuff to incoming thru IKSD).  zmkdir() is always called when
  1820. receiving a file to see if the file contains any directory parts, and if so,
  1821. to try to create them.  zmkdir() unconditionally failed if called by guest.
  1822. Fixed it to fail only when called by guest AND it would have had to create a
  1823. directory.  ckufio.c, 3 Mar 99.
  1824. Meanwhile, zmkdir() actually *would* create directories even when in server
  1825. mode and MKDIR was DISABLEd, oops.  Fixed in zmkdir(), ckufio.c, 3 Mar 99.
  1826. An SSH-related update to ckcnet.c from Jeff.  3 Mar 99.
  1827. Discovered that dialing out from VMS (yes, I can finally do it!) tends not
  1828. to work at all.  Why?  VMS does not support RTS/CTS but the modem's factory
  1829. default is to use RTS/CTS.  The modem init string might have 30-40 characters
  1830. in it, or more (e.g. USR).  VMS gets data overruns on its serial port when
  1831. reading back the echo and then loses the OK, because it has not yet sent the
  1832. command to the modem that tells it to use local Xon/Xoff flow control.  SET
  1833. DIAL PACING 150 does the trick.  Changed the startup value for DIAL PACING to
  1834. be 150 if CK_RTSCTS is not defined, and changed the initial DIAL FLOW value
  1835. to be XON/XOFF for VMS, rather than AUTO (although AUTO actually did result
  1836. in Xon/Xoff, but why bother).  ckudia.c, 5 Mar 99.
  1837. Made default flow control in VMS for all types of connections it supports be
  1838. "Xon/Xoff" (which really translates to TTSYNC/HOSTSYNC, which means "use an
  1839. appropriate method of flow control instead of dropping incoming bytes on the
  1840. floor for no reason").  ckcmai.c, 5 Mar 99.
  1841. With these changes, VMS dialouts work -- a little rocky on the initial init
  1842. string, but once the flow control is set on both ends, the connection is fine;
  1843. downloads go fast, but uploads are faster.  There are no hiccups or glitches,
  1844. even at 38400 or 57600 bps on the Alpha PWS 433/au.
  1845. Fixed some silly dialing messages, like "Will redial in 1 second, press any
  1846. key to redial immediately...".  ckuus6.c, 5 Mar 99.
  1847. Fixed "red" to be an acceptable synonym for REDIAL on VMS.  ckuusr.c, 5 Mar 99.
  1848. Discovered all kinds of problems dialing without flow control -- SET DIAL
  1849. PACING was not being obeyed in many places.  Fixed in ckudia.c, 6 Mar 99.
  1850. When dialing out from VMS and then being hung up on by the remote, VMS system
  1851. services would thenceforth refuse to return the modem signals, and so ttchk()
  1852. returned 0 or -1 (indicating ttgmdm() failure) rather than -2 to indicate the
  1853. connection was lost, and therefore EXIT would give the message "A serial
  1854. connection might be active... OK to exit?".  Fixed by keeping Yet Another
  1855. Global Status Variable.  ckvtio.c, 6 Mar 99.
  1856. The long modem setup sequence was unnecessary and annoying when redialing,
  1857. so now we jump around on the 2nd and subsequent attempts.  ckudia.c, 6 Mar 99.
  1858. Got rid of the separate ATT or ATP command when the user had not given a SET
  1859. MODEM COMMAND { PULSE, DIAL } or a SET MODEL DIAL-COMMAND command, making the
  1860. dial command be ATDT or ATDP instead.  ckudia.c, 6 Mar 99.
  1861. Enabled connection log in VMS.  ckvfio.c, 6 Mar 99.
  1862. VMS was still complaining "terminal type not supported" when given a SET
  1863. TRANSFER DISPLAY FULL command.  Fixed in doxdis(): ckuus7.c, 6 Mar 99.
  1864. Filename shown in VMS file transfer display is much too long.  Changed
  1865. screen() to call zrelname() on it.  ckuusx.c, 6 Mar 99.
  1866. The sequence DISABLE DELETE, SET FILE COLLISION UPDATE would fail because of
  1867. a misplaced security check.  The check was moved into the protocol module
  1868. where it belongs.  ckuus7.c, ckcpro.w, 6 Mar 99.
  1869. Removed about 560 lines of #ifdef OLDTBCODE..#endif junk from ckudia.c.  If
  1870. anybody ever wants it back they can get it from version 6.0.  6 Mar 99.
  1871. The big problem with dialing without hardware flow control is that the first
  1872. thing we send to the modem is a big long init string, like:
  1873.   ATQ0E1V1X4&A3&S0&C1&D2&N0&Y3S14=0
  1874. The modem can take it, but the computer might not be able to absorb the echo
  1875. (or worse, the response), especially at high speeds.  So it's essential to set
  1876. up the flow control first, before sending any long strings to the modem.  But
  1877. this requires that the modem is first set up to produce result codes.  So --
  1878. for AT-command-set modems only -- we now send ATQ0<CR> first, up to four
  1879. times, looking for an "OK" or "0" response, and taking various (increasingly
  1880. drastic measures) if it doesn't come (send BREAK, hangup, etc), and then we
  1881. set the modem's flow control, and THEN we send the init string and the rest.
  1882. This works way better.  ckudia.c, 6 Mar 99.
  1883. Added SET HINTS { ON, OFF }.  ckuusr.[ch], ckuus3.c, 6 Mar 99.
  1884. Since control-char unprefixing is now the default, this is likely to cause
  1885. trouble to some people.  If sending a file fails and PREFIXING is not ALL,
  1886. and the transfer was not deliberately interrupted, we now print a hint (if
  1887. HINTS are ON) to try it again with SET PREFIXING ALL (or PARITY SPACE, or
  1888. ROBUST, ...) -- our first hint.  Made a similar set of hints for failure to
  1889. RECEIVE or GET files.  And a few others.  ckuus[r345].c, 6 Mar 99.
  1890. SET PREFIXING ALL sets prefixing to PX_ALL; now so does SET CONTROL PREFIX ALL.
  1891. ckuus3.c, 6 Mar 99.
  1892.  -- add hints for dial failure.
  1893. Corrections from Michal Jaegermann <michal@ellpspace.math.ualberta.ca>:
  1894.  . One of the sprintf's in nxtdir() did not have enough %s's: ckuus4.c.
  1895.  . An sprintf in v(nday) referenced a long with %d: ckuus4.c.
  1896.  . Missing parens around 4th xxscreen() arg supplied in ckuusx.c & ckcfn2.c.
  1897.  . Superfluous pointer dereference (*p++;) in arraynam: ckuus5.c.
  1898.  . ckxlogin/out() prototypes moved from ckuusr.h to ckcdeb.h.
  1899.  . ckxlogin() called with one too few args: ckcpro.w.
  1900.  . Various static declarations of unused or nonexistent variables or functions.
  1901. Also, he objected to Kermit sending the user ID ahead on TELNET connections --
  1902. "There is not a shred of guarantee that a login on remote will be the same as
  1903. a local one" -- and suggested the default be not to send it.  This will
  1904. obviously be controversial, but I tend to agree, erring on the side of safety
  1905. and predictability (for scripts).  For now I just made a symbol NOSENDUID that
  1906. can be added to CFLAGS to reverse the default at compile time.  A more
  1907. intelligent default might be to send the ID if we're on the same "network"
  1908. (whatever that is), and not send it otherwise.  Or maybe not.  ckcdeb.h,
  1909. ckctel.c, 7 Mar 99.
  1910. Tightened up dialing procedures some more -- e.g. combined the speaker and
  1911. volume commands.  Found that my abbreviated redialing code from yesterday had
  1912. (more than) a few problems.  The most important lesson is that it's not
  1913. sufficient to just keep sending the ATDTnnnnn command.  First we have make
  1914. sure the modem is still sentient; thus the "send ATQ0" loop must be executed
  1915. before each redial as well as before the original call.  ckudia.c, 7 Mar 99.
  1916. My understanding of the VMS terminal driver is that if the device has the
  1917. TT$M_MODEM characteristic, then:
  1918.  1. When the application opens the device, VMS turns on DTR.
  1919.  2. The CD signal is ignored until it comes up; after that, loss of
  1920.     CD causes the SS$_HANGUP error.
  1921. After 6 hours of experimentation with dialing and redialing on VMS, I made two
  1922. discoveries: (1) attempts to read from a /MODEM device during dialing
  1923. (i.e. before CD has ever been turned on) often result in SS$_HANGUP, and so
  1924. this error must be ignored during dialing; and (2) VMS periodically blinks DTR
  1925. and RTS on the device while it is not presenting the CD signal; Kermit is not
  1926. doing this, VMS is doing it.  This can be observed simply by telling Kermit
  1927. to "set line tta0" and then watching the modem lights for a few minutes.
  1928. This of course causes any normal modem to immediately abandon a call in
  1929. progress.  The remote answers the phone, we hear the negotiation tones going
  1930. and then suddenly "click" and NO CARRIER.  ATI6 (to a USR Courier) says
  1931. "Disconnect reason: DTR dropped".  The modem lights confirm -- VMS turns off
  1932. DTR (and RTS) for 5 seconds right in the middle of the modem-to-modem
  1933. negotiations.  The only reason dialing out ever works at all is that DTR stays
  1934. up for 30 seconds at time.  If a call is placed at just the right instant and
  1935. is answered within 30 seconds, VMS leaves DTR on thereafter.
  1936. Of course we can give the modem the DTR override command (AT&D0), but this
  1937. eliminates the possibility of hanging up the call by dropping DTR, and in fact
  1938. would leave open a rather gaping security hole.
  1939. A workaround was eventually identified: Tell the modem to make DSR track CD.
  1940. Explanation: when a port is opened, as soon as VMS sees DSR with no CD, it
  1941. starts the 30-second-on/5-second-off DTR/RTS blinking cycle.  Therefore if the
  1942. modem does not turn DSR on, and VMS won't blink.  This is less than satisfying,
  1943. though, because it is exactly opposite of (say) SunOS, where you can't dial
  1944. out unless DSR is ON.  There should be a way to tell VMS to leave DTR up solid
  1945. when making a dialout call.  Init strings of all AT-command-set modems changed
  1946. to include "&S1" within #ifdef VMS..#endif.  This is no help at all for modems
  1947. that are do not use the AT command set.  ckudia.c, 7 Mar 99.
  1948. David Sanderson <dws@sgi.net> noticed that window-size-change interrupts
  1949. weren't working any more; cause: <signal.h> was left out of the ckcnet/ckctel
  1950. split.  Fixed in ckctel.c, 7 Mar 99.
  1951. From Jeff, 8 Mar 99:
  1952.  . ckutio.c - ttinc() returning -3 is a special return value that
  1953.    indicates that the "Session Limit" has expired.  SET SESSION-LIMIT.  I
  1954.    do not think that this has been implemented in Unix or VMS yet.  I
  1955.    have changed all references to -3 in ttinc() to -4.
  1956.  . ckuath.c - lots of rlogin stuff.
  1957.  . ckcdeb.h - Some NT Kerberos defines and the new NOSENDUID cannot be
  1958.    defined if CK_AUTHENTICATION is defined since the UID is required for
  1959.    successful completion.
  1960.  . ckcnet.c - k5 rlogin and some other little things.
  1961. Fixed SHOW COMM for VMS to show the actual speed rather than "unknown" and
  1962. also not to write "(closed)" after the device name.  The source of confusion
  1963. was that CK_TTYFD is defined for VMS, but instead of referencing the ttyfd
  1964. variable (which is always -1 in VMS) we have to call the vmsttyfd() function.
  1965. ckuus4.c, 8 Mar 99.
  1966. Verified that it is indeed IMpossible to get the current speed of a serial
  1967. device in VMS.  The IO$_SENSEMODE() call returns the permanent speed, not the
  1968. current, actual one.  Added notes to the code about this so I don't waste
  1969. another half-day on this one.  ckvtio.c, 8 Mar 99.
  1970. Added -DNOREDIRECT to all SCO targets prior to 3.2v4.0.  makefile, 8 Mar 99.
  1971. Made transaction log unbuffered.  ckufio.c, 8 Mar 99.
  1972. Fixed zvpass() in UNIX not to accept guest logins with empty passwords.
  1973. ckufio.c, 8 Mar 99.
  1974. More Kerberos changes from Jeff: ckcdeb.h ckuath.c ckuus3.c ckutio.c ckcnet.c,
  1975. 8 Mar 99.
  1976. Fix from Jeff for IKSD negotiation problem, in which client could send
  1977. RESP_STOP in response to REQ_START even when autodownload was ON.  ckctel.c,
  1978. 8 Mar 99.
  1979. Made switch completion print "=" rather than ":" as the separator in VMS, for
  1980. switches that take args.  ckucmd.c, 8 Mar 99.
  1981. Changes from Jeff to ckcnet, ckutio, and ckuath.c, mainly for Kerberos 5,
  1982. 9 Mar 99.
  1983. Fixed hint for failed RLOGIN commands -- it was in the wrong place.
  1984. ckuus[r7].c, 9 Mar 99.
  1985. Changed VMS zfcdat() to return the file's creation date, not modification
  1986. date, to match VMS customs and usage, not to mention the fact that VMS
  1987. C-Kermit, when receiving a file, sets the *creation* date (not modification
  1988. date) from the A packet.  Suggested by Lucas Hart.  9 Mar 99.
  1989. Straightened up a mess regarding -DNOREDIRECT (it was not checked in enough
  1990. places) and also made sure that NETCMD could not be defined if NOREDIRECT
  1991. was defined.  ckcdeb.h, 9 Mar 99.
  1992. Fixed badly confused #ifdefs around "ping" and "pipe" commands.  ckuusr.c,
  1993. 9 Mar 99.
  1994. More Kerberos-related changes from Jeff to ckcnet, ckutio, etc, plus
  1995. ckuus[45].c, 9 Mar 99.
  1996. Cleaned up the logic of UNIX zgetfs() a bit with respect to symlinks.
  1997. Now "dir /dir" lists symlinks to directories, and "dir /files" lists symlinks
  1998. to files.  This was (I hope) the last remaining problem with the DIRECTORY