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

通讯/手机编程

开发平台:

Windows_Unix

  1. Documented CLOSE command.  ckermit2.upd, 4 Dec 97.
  2. Added lots of code to VMS ttopen() to see what I could find out about modem
  3. signals, in an effort to get SET CARRIER-WATCH working in VMS, where it never
  4. has been implemented.  Need more info before I can make further progress.
  5. However, it looks like the VMS SET TERM /MODEM vs /NOMODEM setting might be
  6. critical here, and this has never been examined or set in VMS C-K before.
  7. ckvtio.c, 4 Dec 97.
  8. Changed CKVKER.COM to not give /NOSYSSHARE to linker when NOSHARE chosen,
  9. since some of the nonsharable libraries are unusable (UCX, some versions of
  10. SMG, etc).  Now I no longer get LIB$FIND_IMAGE_SYMBOL when building.
  11. ckvker.com, 4 Dec 97.
  12. From Lucas Hart, a fix for the annoying warning from DECC in Digital UNIX 4.0
  13. about "union wait".  ttruncmd(), ckutio.c, 4 Dec 97.
  14. Fixed some problems with parsing the DELETE command when it was given the
  15. name of a file that doesn't exist.  ckuus6.c, 4 Dec 97.
  16. Finally tracked down the reason why sometimes the file-transfer bar zooms
  17. out to 100% when a file transfer is interrupted; the screen() routines were
  18. resetting percent done when the Z packet comes, at the end of the transfer,
  19. rather than when the F or X packet comes, at the beginning of the transfer.
  20. This was OK except when a second copy of the Z packet came -- then suddenly
  21. the percent done was 100 instead of whatever it was the first time.  No more.
  22. screenc(), ckuusx.c, 5 Dec 97.
  23. Still, it seems rather common for the file sender to send two Z packets when
  24. streaming.  Why?  Because once interrupted, the receiver sends an ACK(X) for
  25. every packet from now on.  The sender gets the first one and sends Z(D).  But
  26. more arrive, so it sends another Z(D).  Cure: the receiver should only send
  27. ONE ACK(X) or ACK(Z) when streaming.  Cure applied in ckcpro.w, 5 Dec 97.
  28. When draining incoming packets after sending an E-packet and using the
  29. fullscreen file-transfer display, put up a message that we are draining -- it
  30. can take a while -- then another when finished.  errpkt(), ckcfn2.c, 5 Dec 97.
  31. Eliminated another per-packet function call, getrtt(), in the streaming case.
  32. ckcfn2.c, 5 Dec 97.
  33. Ditto for calling gtimer() every time we send or receive a packet if we are
  34. not timing out (as when streaming).  ckcfn2.c, 5 Dec 97.
  35. Tightened up "drain loop" in error-packet sender by calculating timeouts on
  36. the fly rather than using an overconservative value, even when streaming and
  37. the timeout was 0.  errpkt(), ckcfn2.c, 5 Dec 97.
  38. Cleaned up much errpkt()/ermsg()/screen()/clsif()/clsof() redundancy.  Made
  39. errpkt() close files, call screen(), make debug and transaction log entries,
  40. etc, which was previously done piecemeal all over the place.  Also made
  41. errpkt() set czseen, since of course an E packet cancels the current batch of
  42. files.  This prevents still more spurious "100%"'s, completion messages
  43. stomping over each other, etc.  Now it all seems pretty tight.  ckcpro.w,
  44. ckcfn2.c, 5 Dec 97.
  45. Added some debugging code to netopen() to catch possible problems when
  46. non-Telnet port is requested.  Plus merged in Jeff's recent changes.  ckcnet.c,
  47. 6 Dec 97.
  48. UNIX C-Kermit beware file updated with various items.  ckuker.bwr, 6 Dec 97.
  49. Elapsed time was always showing up as zero when receiving files.  Fixed in
  50. fstats(), ckcfn2.c, 6 Dec 97.
  51. Lots of changes to ckcnet.c from both me and Jeff regarding set socket options;
  52. mine removed perrors (again) and replaced them with a consistent format of
  53. debug log entry; Jeff's were substantive.  6 Dec 97.
  54. Discovered it was too easy to introduce interoperability between non-zero-
  55. prefixing and zero-prefixing Kermits by including 0 in SET PREFIXING MINIMAL.
  56. Changed this to not unprefix zero after all, and changed SET PREFIXING NONE
  57. to unprefix everything but CR, IAC, and SOP, and had the clear-channel code
  58. do SET PREFIXING NONE, rather than MINIMAL.  ckcmai.c, ckcfns.c, ckuus5.c,
  59. 6 Dec 97.
  60. Joe D persistently complained that streaming could not be interrupted in
  61. Unixware.  Reason: ttchk() was not doing its job; it has to be relied on to
  62. tell us how many characters are waiting unread.  But this was not happening in
  63. UNIX versions that support select() or rdchk(), etc, but that do not support
  64. FIONREAD.  select() would tell us *that* characters were waiting, but not how
  65. many.  So the test in sdata() for (ttchk() > some-number) would never succeed,
  66. and so the reverse channel would never be sampled.
  67. Well, it seems FIONREAD is being picked up on most systems from ioctl.h,
  68. term.h, etc, but not on Solaris or Unixware, so we need to include it from
  69. <filio.h> or wherever else it might be found.  ckutio.c, 6 Dec 97.
  70. It turns out the non-FIONREAD-yet-MYREAD versions were just not working very
  71. well at all transferring files with window sizes > 1 (or streaming).  In this
  72. case I made ttchk() return the number of bytes in the myread buffer, if
  73. nonzero; we'll get the next bunch of characters next time around.  When the
  74. internal buffer is empty, then we go to select() and friends, and if select()
  75. tells us data is ready to read, we call the myfillbuff() function to get as
  76. many as are there, rather than returning 1 as before; this allows the
  77. ACK-checking logic in the sdata() loop to detect an ACK much more quickly, in
  78. theory at least.  ttchk(), ckutio.c, 6 Dec 97.
  79. Meanwhile, I cleared up the old problem -- at least in MYREAD versions of UNIX
  80. C-Kermit -- in which we read a packet by its length field and then leave any
  81. trailing junk (like EOP) to still be read, which makes ttchk() always find at
  82. least one character waiting, which can slow us down when we go to read a
  83. packet but there isn't one there.  ttinl(), ckutio.c, 6 Dec 97.
  84. Fixed SHOW STREAMING to show the actual cps of the last transfer.  ckuus5.c,
  85. 6 Dec 97.
  86. Isolated SCO as a platform where there is no OS-assisted buffer peeking, and
  87. so our new ttchk() select-then-read method must be used.  Tested streaming
  88. there, including interruption of the SCO version from a receiver on the other
  89. end -- it works fine.  The connection from here to there is Internet, but it
  90. goes through a V.34 modem.  Streaming is anywhere from 50% to 1000% faster on
  91. this connection.  Sometimes nonstreaming fails badly due to unpredictable
  92. timing, whereas streaming has no timeout worries.  7 Dec 97.
  93. Made sure streaming is turned on only during data phase, to prevent
  94. "Transmission error on reliable link" from stopping the transmission before
  95. it started, in case the user didn't escape back fast enough.  ckcpro.w,
  96. ckcmai.c, ckcfn2.c, 7 Dec 97.
  97. Joe D's persistent report about C-K in Unixware starting out at the slow-start
  98. packet size and never going up turned out to be true.  The reason I couldn't
  99. reproduce it is that all the versions I tested on had BIGBUFOK, but Unixware
  100. didn't, aha.  Fixed in spar(), ckcfns.c, 7 Dec 97.
  101. Discovered (after hours of trial and error) that you can't send the following
  102. characters unprefixed to VMS: 1 3 13 14 15 17 19 24 25 141 145 147.  Several
  103. of these (14,15,24,25) are a surprise.  Once I made sure these were prefixed,
  104. streaming worked fine, as well as non-streaming with W=30, P=8000.  I added
  105. the missing ones to the SET PREFIXING CAUTIOUS list, and also set them when
  106. the WHOAREYOU mechanism lets us know we have VMS on the other end.
  107.                FIONREAD                          SO_ERROR
  108. SunOS          <sys/filio.h>      Works OK       <sys/socket.h>
  109. Solaris        <sys/filio.h>      Works OK       <sys/socket.h>
  110. Unixware       <sys/filio.h>      Works OK       <sys/socket.h>
  111. AIX 4.1        <sys/ioctl.h>      Works OK       <sys/socket.h>
  112. HP-UX 10.20    <sys/ioctl.h>      Works OK       <sys/socket.h>
  113. SCO 5.0.4      <sys/socket.h>     Doesn't work   <sys/socket.h>
  114. NeXT           <bsd/sys/ioctl.h>  Works OK       <bsd/sys/socket.h>
  115. IRIX 6.2       <sys/socket.h>(*)  Works OK       <sys/socket.h>
  116. (*) also in <sys/filio.h>
  117. On a Telnet connection to an IRIX 6.2 system at the U of Oregon, discovered
  118. that the IRIX version could not send a packet longer than 4096 bytes.  Its
  119. logs show it constructing the packet right, but logs on the other side show
  120. the packet being truncated at 4096 and then concatenated with other pieces of
  121. itself.  Why?
  122.  . Does it happen without streaming?                        Yes
  123.  . Does it happen wit streaming?                            Yes
  124.  . Does it happen with older Kermit on IRIX?                Yes
  125.  . Does it happen with older Kermit on SunOS?               Yes
  126.  . Does "set receive packet-length 4000" make it go away?   Yes
  127.  . Does it happen if local is not SunOS?                    Yes
  128.  . Does it happen with "set host *"?                        No <--
  129.  . Does it happen with SET HOST connections?                No <--
  130. So the IRIX 6.2 Telnet server is the culprit.  Streaming / 9K packets works
  131. fine as long as the IRIX Telnet server is not in the picture.
  132. The IRIX incident revealed that there were still some places where
  133. transmission errors (crunched packets, timeouts, NAKs, out-of-sequence
  134. packets, etc) were not treated as fatal during streaming.  Fixed in input(),
  135. ckcfn2.c, 8 Dec 97.
  136. I realized that streaming should be turned on the instant it is negotiated,
  137. and turned off only at the end of the transaction.  There is absolutely no
  138. need to switch it off within a transaction.  This simplifies matters greatly
  139. and avoids errors when we get retransmissions of between-file packets (for
  140. which there is absolutely no need).  ckcpro.w, ckcfn2.c, 8 Dec 97.
  141. Tightened up UNIX ttinl() just a wee bit by checking the packet length field
  142. only when (!havelen) (Jeff noticed this).  ckutio.c, 8 Dec 97.
  143. Changed debug format F011 (never before used) to write counted strings
  144. possibly containing NULs into the debug log:
  145.   debug(F011,label-string,counted-string,count);
  146. Used for entering a packet, or the beginning of one, into the debug log in a
  147. relatively legible way, even if it contains NULs, LFs, etc.  ckuusx.c,
  148. ckcfn2.c, ckutio.c, 8 Dec 97.
  149. Back to VMS unprefixing -- it seems that SO/SI and ^C/^X/^Y don't need
  150. prefixing when sending into an Alpha with Multinet.  But that doesn't prove
  151. anything -- I've had transfers freeze with many VMS's, not just KERVAX, so
  152. for now I'm leaving the extra prefixing in.
  153. Changed "clear-channel" unprefixing to be sticky instead of saving and
  154. restoring the user's prefixing selection around protocol actions.  Otherwise
  155. the user would never be able to find out what happened (e.g. why a transfer
  156. failed).  ckcfn2.c, 8 Dec 97.
  157. Made "te" be a sufficient abbreviation for TELNET (conflicted with TELOPT),
  158. and "ta" sufficient for TAKE (conflicted with TAPI).  ckuusr.c, 8 Dec 97.
  159. Added BIGBUFOK for Unixware 2.0 and higher.  makefile, 9 Dec 97.
  160. Change chktimo() to return(0) if streaming.  ckcfn2.c, 9 Dec 97.
  161. The old bug of the server sending responses to REMOTE commands back in binary
  162. mode came back again, so I fixed it again.  ckcpro.w, ckcfn2.c, 9 Dec 97.
  163. Verified that IRIX 4K bug also exists on IRIX 5.3.  ckuker.bwr, 9 Dec 97.
  164. Resync'd sources with Jeff's, ckuusr.h, ckuus[57x].c, ckcnet.c, 9 Dec 97.
  165. Changed VMS version to not test controller type in ttgmdm() if it is running
  166. on an Alpha.  I have no way of testing this.  ckvtio.c, 9 Dec 97.
  167. Changed SET CARRIER and HELP SET CARRIER in VMS to print appropriate messages
  168. about why it can't be done.  ckuus[23].c, 9 Dec 97.
  169. Reorganized and augmented CKVKER.BWR.  9 Dec 97.
  170. Started adding a section on how to invoke C-Kermit from Web browsers.
  171. I couldn't find any way to do this in Lynx...  ckermit2.upd, 9 Dec 97.
  172. Built quickly on SunOS, Solaris, HPUX, Unixware.  9 Dec 97.
  173. In VMS C-K, incoming filetype attribute was overriding SET FILE TYPE IMAGE.
  174. Fixed in ckcfn3.c, 10 Dec 97.
  175. Peter Eichhorn says that in HP-UX, when C-Kermit is in CONNECT mode and pops
  176. back to the prompt automatically, that the lower CONNECT fork is not killed,
  177. so subsequent CONNECTs make more and more forks, which compete for i/o on
  178. the device.  I can't reproduce it:
  179. Popping back because connection dropped:
  180.  . Does it happen in SunOS with a Telnet connection?   No
  181.  . Does it happen in HP-UX with a Telnet connection?   No
  182.  . Does it happen in HP-UX with a serial connection?   ???
  183. Popping back because of an APC:
  184.  . Does it happen in HP-UX with a Telnet connection?   No
  185.  . Does it happen in HP-UX with a serial connection?   No
  186. But there's another problem: HP-UX C-Kermit doesn't pop back to the prompt
  187. anyway when carrier is lost.  As far as I can tell, it never did.
  188. Streaming on serial connection:
  189.  . V.34 ZIP-file Uploads: about 3400cps.
  190.  . V.34 ZIP-file Downloads: about 2800cps.
  191.  . C-X interrupt when uploading seems to hang, but works OK downloading.
  192.    (Or else the modem just cut out -- it does that a lot).
  193. Added addt'l debug stmts to UNIX CONNECT module to help catch a situation
  194. reported in HP-UX in which "garbage" on the connection results in C-Kermit
  195. popping back to command mode without killing the lower CONNECT fork, so that
  196. subsequent CONNECTs make extra new forks that compete with each other for
  197. input.  I also made sure that the pid variable was initialized to -1, and
  198. reset to 0 whenever the fork was killed, so we can check it upon reentry to
  199. the CONNECT module.  And then I decided, since the pid is kept in a static
  200. variable anyway, to check it upon (re)entry to the CONNECT module, and if it's
  201. not 0, to print a big message and then try to kill it -- a failsafe mechanism.
  202. Also changed all debug() entries from the CONNECT module to start with
  203. "CONNECT" to make them easily greppable.  ckucon.c, 11 Dec 97.
  204. The new fullscreen cps-display procedure was taking up way too much time on
  205. fast (e.g. local-net) connections, and tended to be too busy to read, so I
  206. changed it to operate no more frequently than once per second.  The estimated
  207. time left field received the same treatment.  ckuusx.c, 11 Dec 97.
  208. Rearranged the code in VMS buffered-read routine, txbufr(), to recognize the
  209. purported fact that some new data can be returned by sys$qiouw() even when it
  210. also returns a status of SS$_HANGUP, in an effort to prevent loss of dying
  211. gasps like NO CARRIER.  ckvtio.c, 11 Dec 97.
  212. Changed SET TRANSFER MODE MANUAL to also SET FILE PATTERNS OFF, since those
  213. who read about TRANSFER MODE MANUAL in the book expect it to do what the book
  214. says.  ckuus3.c, 11 Dec 97.
  215. The VMS version was not returning directory names when in server mode and
  216. given the REMOTE DIRECTORY command.  Fixed in ckcfns.c, ckvfio.c, 12 Dec 97.
  217. Changed fullscreen display to put the STREAMING message in the Window Slots
  218. field, since window slots are irrelevant when streaming, and also not to put
  219. false numbers in the RTT/Timeout field, and fixed various other fields to not
  220. update unnecessarily, and consolidated various other code in the fullscreen
  221. display routines.  ckuusx.c, 12 Dec 97.
  222. Discovered I had broken sliding windows a few days ago by commenting out a
  223. section of code I thought was redundant.  It wasn't.  ckcpro.w, 12 Dec 97.
  224. Added comments to gattr() regarding the possibility of retaining the current
  225. FILE COLLISION option when receiving a file with the Recover attribute that
  226. does not need to be recovered.  The upshot is that it could be done, but it
  227. would not be easy (so I didn't).  ckcfn3.c, 12 Dec 97.
  228. Results back from VMS testers on CKVTIO.C changes:
  229.  . Mike Freeman: It doesn't break LAT dialouts.
  230. Changed SET CLEAR-CHANNEL AUTO to also announce a clear channel if RELIABLE
  231. is ON.  ckcfns.c, 17 Dec 97.
  232. External protocols were not propogating the exit status to the success variable
  233. (which is the basis of IF SUCCESS / FAILURE as well as v(status)).  Fixed in
  234. ckcpro.w, 18 Dec 97.
  235. More work on VMS txbufr() to allow for more and more possibilities regarding
  236. how or whether VMS reports hangup of serial connection.  ckvtio.c, 19 Dec 97.
  237. Minor change in Microlink modem description text.  ckudia.c, 19 Dec 97.
  238. Checked on HP-UX automatically popping back when carrier was dropped -- it
  239. never did.  Aside from that, serial dialouts are good; RTS/CTS works
  240. perfectly, streaming works (since it's an error-corrected connection and the
  241. connection between the modem and the HP is solid).  A non-compressed binary
  242. file uploads at about 5400cps (on a 31200bps connection), whereas SEND /CAL
  243. (the dynamically generated 90+ uncompressible data) uploads at about 3600cps.
  244. Last-minute checks of streaming transfers between SunOS and AIX over local
  245. 10BaseT are fine -- they go at 600-730Kcps streaming, 540-660Kcps
  246. nonstreaming.
  247. Numerous #ifdef, prototype, declaration, and other syntactic adjustments to
  248. allow compilation everywhere.  Many modules, 19 Dec 97.
  249. Restored TELOPT_SGA handling to the way it was in Alpha.09 to prevent double
  250. echoing when telnetting to AOS/VS.  ckcnet.c, 20 Dec 97.
  251. More syntactic adjustments for VMS & DEC C, plus a fix for the new VMS handing
  252. of SET [ MODEM ] CARRIER-WATCH.  ckuus3.c, various header files, 20 Dec 97.
  253. "make du32"...  while compiling ckuusx.c, the compiler dumps core.  I did the
  254. trick with compiling this module separately without the optimizer.  makefile,
  255. 20 Dec 97.
  256. ckuus2.c (the help-text module) grew too big for the QNX 16-bit build, so
  257. NOHELP added to makefile.  Also clearok() seems to be missing from its curses
  258. library, so the reference to it in screenc() was #ifdef'd out.  makefile,
  259. ckuver.h, ckuusx.c, 21 Dec 97.
  260. ---Alpha.10---
  261. Changes from Jeff to ckcnet.c, 21 Dec 97.
  262. The VMS version was warning that connection was still open after it closed.
  263. That's because ttclos() was setting network to 0, so then a subsequent call to
  264. ttchk() was taking the serial path.  Fixed in ckvtio.c, 22 Dec 97.
  265. Added GFTIMER to VMS version using sys$gettim() and lib$sub_times(), with help
  266. from James Puzzo <jamesp@dgii.com>.  Compiles and runs without complaint on
  267. VMS 5.5, so should be OK on 5.0 and above, but maybe #ifndef OLD_VMS might be
  268. needed.  ckcdeb.h, ckvtio.c, 22 Dec 97.
  269. Added "*.exe" to UNIX list of binary filename patterns.  ckcmai.c, 22 Dec 97.
  270. Changed frand(n) to return a random integer between 0 and n, as advertised,
  271. even if n <= 0.  ckuus4.c, 22 Dec 97.
  272. Changed "Default file-transfer mode" message to say AUTOMATIC in the more
  273. modern cases.  ckuus5.c, 22 Dec 97.
  274. Changed a recently-added memcpy() in tn_sb() to strncpy(); memcpy is not
  275. portable.  ckcnet.c, 22 Dec 97.
  276. Changed #ifndef to #ifdef to avoid making a debug log entry for every single
  277. character than comes in, in netinc(), ckcnet.c, 22 Dec 97.
  278. Updated bgcc (bounds-checking gcc) makefile entry from William Bader,
  279. 23 Dec 97.
  280. Fix from Jeff to netflui() for TCPLIB case.  ckcnet.c, 23 Dec 97.
  281. Replaced the strncpy() that replaced the memcpy() with a loop so as not to
  282. terminate at NUL.  tn_sb() in ckcnet.c, 23 Dec 97.
  283. Changes from Jeff to SHOW TELNET.  ckuus4.c, 23 Dec 97.
  284. Fixed clsconnx() in the remote-mode VMS case to call ttclos(), otherwise it's
  285. not possible to SET LINE TTA0:, then SET LINE, the SET LINE TTA0: again (we
  286. should check this in K95, etc, too).  ckuus7.c, 23 Dec 97.
  287. Changed "float" to CKFLOAT everywhere, and defined CKFLOAT to be double in
  288. ckcdeb.h (a little reading shows that double is more portable than float).
  289. This was needed (at least) because in SCO, conversion from float to long dumps
  290. core (on purpose!) if the real number is too long for a long (clearly, then,
  291. this is not the right fix).  The default CKFLOAT definition can be overridden
  292. by -DCKFLOAT=float (or whatever) on the command line.  Many modules, 24 Dec
  293. 97.
  294. Fixed SHOW PATTERNS to not make some lines too long; it was miscounting the
  295. length.  shopat(), ckuus5.c, 24 Dec 97.
  296. Fix from Jeff for handling receive filters: evaluate v(filename) after
  297. converting the incoming name, rather than before.  rcvfil(), ckcfns.c,
  298. 29 Dec 97.
  299. Disabled filename pattern-match based transfer mode switching when sending
  300. from pipe or filter (Jeff's suggestion).  sfile(), ckcfns.c, 29 Dec 97.
  301. Change from Jeff to not log incoming NUL after CR when executing INPUT
  302. commands on Telnet connections.  ckuus4.c, 29 Dec 97.
  303. Fixed a "== should be =" typo in the SET HOST code and supplied some missing
  304. TCPSOCKET ifdefs (from David Lane).  ckuus7.c, 29 Dec 97.
  305. Added entry for zrmdir() to ckcplm.doc.  29 Dec 97.
  306. Updated IRIX makefile entries from Ric Anderson.  29 Dec 97.
  307. Fixed an unguarded reference to zfnqfp().  ckcfn3.c, 30 Dec 97.
  308. Fixed UNIX ttinl() to terminate on turn argument, if given, rather than
  309. eol argument.  ckutio.c, 30 Dec 97.
  310. Improvements on the new F011 debug.log format (so far used only by the UNIX
  311. version of ttinl()).  ckuusx.c, 30 Dec 97.
  312. Various changes to debug logging.  cku[tf]io.c, 30 Dec 97.
  313. Found the problem that William Bader was reporting in the SCO version.  The
  314. new code that I added to ttchk() in Alpha.10 for the non-FIONREAD case, that
  315. would force a nonblocking read when all else failed, set the initial myread
  316. buffer index to 0 when it should have been -1 (since, unlike mygetbuf(), it
  317. was not returning a character).  ckutio.c, 30 Dec 97.
  318. Made kermit -X and -Z (X.25 connections) set the reliable flag.  ckuusy.c,
  319. 30 Dec 97.
  320. Added switches to SET LINE / SET HOST.
  321.  /CONNECT means CONNECT automatically if connection is successful.
  322.  /SERVER means go into server mode automatically if connection is successful.
  323.  /SHARE (VMS SET LINE only) means allow SET LINE device to be shared.
  324. /SHARE is to get around a problem in DECIntact, where the only way to use the
  325. controlling terminal is if you have SHARE privilege.  When /CONNECT or /SERVER
  326. is given on a serial connection, we wait up to 1 sec for CD to appear if
  327. CARRIER-WATCH is not OFF, since instantaneous connecting tends to work because
  328. it can take some time for CD to react to DTR.  Also, made the trailing /TELNET
  329. and /RLOGIN switches invisible, since it doesn't make a lot of sense to say
  330. "telnet blah /rlogin" or v.v.; left the "/raw-socket" switch visible.  Tested
  331. on SunOS with TCP/IP, SunOS with serial ports, and Solaris X.25 connections.
  332. The switch parsing code was not added for network types other than TCP/IP and
  333. X.25.  ckuusr.h, ckuus[27].c, ckvtio.c, ckermit2.upd, 30 Dec 97.
  334. The SET LINE (SET PORT) switch parsing for OS/2 is in place but not tested.
  335. setlin(), ckuus7.c, 30 Dec 97.
  336. C-Kermit's SWITCH command would erroneously execute the first case if the
  337. switch variable did not have a matching label and there was no ":default"
  338. label.  Fixed by adding a :default label to the SWITCH macro definition, which
  339. is ignored if the user provides a :default label in the SWITCH statement.
  340. ckuus5.c, 30 Dec 97.
  341. Changed copyright dates to 1998.  All ck[cuv]*.[ch] modules.  30 Dec 1997.
  342. Some fixes from Jeff to yesterday's changes.  ckuus[27].c, 31 Dec 97.
  343. Allow remote filename to be shown in serial and/or CRT display, from Jeff.
  344. ckcpro.w, ckuusx.c, 31 Dec 97.
  345. Fixed protocol module to propogate failure into exit-status variable.
  346. proto(), ckcpro.w, 31 Dec 97.
  347. Changed SET LINE /SHARE (VMS) to not only not drop SHARE privilege but also
  348. to try to enable it.  ckermit2.upd, ckvtio.c, 31 Dec 97.
  349. Added SET LINE /NOSHARE (VMS), the opposite of /SHARE, since VMS people like
  350. their switches in pairs.  ckuusr.h, ckuus[27].c, 31 Dec 97.
  351. Changed all the VMS code that tests for SS$_HANGUP to do so only when
  352. CARRIER-WATCH is not OFF.  txbufr(), contti(), ckvtio.c, 31 Dec 97.
  353. Removed text from HELP SET CARRIER-WATCH saying that it didn't work in VMS.
  354. ckuus2.c, 31 Dec 97.
  355. Removed VMS warning text from SET CARRIER-WATCH.  ckuus3.c, 31 Dec 97.
  356. Changed /CONNECT to undo any previous /SERVER and vice versa; the two are
  357. contradictory and mutually exclusive, so if more than one are given, the last
  358. one sticks.  ckuus7.c, 31 Dec 97.
  359. Added carrier check at VMS CONNECT entry, just like in UNIX, to enforce
  360. CARRIER-WATCH setting.  ckvcon.c, 31 Dec 97.
  361. Improved the "Carrier required but not detected" message in the UNIX CONNECT
  362. module (making it the same as the VMS one).  ckucon.c, 31 Dec 97.
  363. Removed scary message from VMS CONNECT module if CD drops but CARRIER-WATCH
  364. is OFF.  ckvcon.c, 31 Dec 97.
  365. Commented out three gratuitous "blah connected on port blah" messages from
  366. ckcnet.c which started popping up yesterday.  With only very few exceptions,
  367. the upper-level code should take care of printing information messages.
  368. ckcnet.c, 31 Dec 97.
  369. Discovered that elapsed-time (and therefore also CPS) calculations were
  370. complete nonsense in VMS on the Alpha, even though they were OK on the VAX.
  371. Changed definition of CKFLOAT from "double" to "float" on the Alpha only.
  372. which seems to have fixed it.  ckcdeb.h, 31 Dec 97.
  373. This bodes ill for other operating systems on the Alpha (like Digital UNIX),
  374. especially if they use DEC C, but I tried it on DU4.0 as "double".  It did
  375. the calculations correctly, but eventually died with a "floating point
  376. exception", so I made CKFLOAT "float" here too.  ckcdeb.h, 31 Dec 97.
  377. More fooling with Digital UNIX 4.0.  Regular file transfer works OK, but
  378. streaming halts (hangs) almost immediately.  Debug log shows FIONREAD is
  379. returning ridiculous numbers, like 4393751543808...  And so then we get
  380. awfully confused trying to read that many bytes.  "man 7 tty" in DU4.0 says
  381. the FIONREAD ioctl arg is int *, but I was using long *.  Changed it to int *,
  382. and now get reasonable results from it -- numbers like 252 or less.  But it
  383. still hangs when trying to stream.  Aha, it's only the stupid Xon/Xoff
  384. business.  I wonder why it doesn't happen when not streaming?  Probably
  385. because streaming is so much faster...  Anyway, the change to ckutio.c was a
  386. good one, and long overdue -- I wonder how the code ever worked before...
  387. 31 Dec 97.
  388. (I wonder what happens with Linux on the Alpha...)
  389. Back to VMS...  If I Telnet from VMS C-K to somewhere else, then close the
  390. connection (to return to remote mode), then type "receive", it goes back the
  391. prompt immediately.  This is fallout from the December 22 change regarding
  392. ttclos() setting network to 0.  Well now nobody was.  Fixed by making ttopen()
  393. set network to 0 when it opens a serial connection.  ckvtio.c, 31 Dec 97.
  394. Updated ckuker.bwr.  31 Dec 97 (sic transit anno 1997).
  395. In the UNIX version, initialize all 12 file pointers to NULL, not just the
  396. first 8.  ckufio.c, 1 Jan 98.
  397. Documented modem signal treatment in VMS.  ckvker.bwr, section 3.1.4,
  398. 1 Jan 98.
  399. Don't print hangup error message in VMS C-Kermit during CONNECT if
  400. CARRIER-WATCH is OFF.  ckvtio.c, 1 Jan 98.
  401. When doing a labeled-mode transfer, if an as-name was given in the RECEIVE or
  402. GET command, it should override the file's internal name, but until now it
  403. didn't, which was very confusing.  This is now done by doing an implicit "set
  404. file label name off" in rcvfil(), and then restoring the "set file label name"
  405. setting to its previous value after the transfer.  Tested, works.  ckcfns.c,
  406. ckuus[6x].c, 1 Jan 98.
  407. Added cross-references to other relevant SHOW commands from SHOW FILE.
  408. ckuus4.c, 1 Jan 98.
  409. Minor cosmetic improvements to SHOW SCRIPTS.  ckuus5.c, 1 Jan 98.
  410. Added Streaming and CKFLOAT type (float or double) to SHOW FEATURES.
  411. ckuus5.c, 1 Jan 98.
  412. Defined CK_PERMS for VMS to see what would happen.  Nothing.  ckcdeb.h,
  413. 1 Jan 98.
  414. There's already code from Terry in ckvfio.c to fill in this stuff, but it has
  415. never been exercised.  Does it send generic protection?  No, because the code
  416. was putting binary data into the A packet.  Fixed it to convert to strings
  417. (hex for 16-bit system-dependent, tochar() for generic).  VMS sys-dependent
  418. protection is hex representation of WGOS fields (World,Group,Owner,System)
  419. in that order; in each field Bit 0 = Read, 1 = Write, 2 = Execute, 3 = Delete.
  420. A bit value of 0 means permission is granted, 1 means permission is denied.
  421. ckvfio.c, 1 Jan 98.
  422. VMS generic protection was being sent for "world" (by the book), but we're
  423. doing it for "owner" instead these days, which makes more sense, so I made
  424. this change.  So now VMS C-Kermit sends both permission fields correctly:
  425.   r-01-00-^A/!FWERMIT.EXE'"
  426.   s-01-00-^AE!Y/amd/watsun/w/fdc/new/wermit.exe.DV
  427.   r-02-01-^A]"A."D7""B8#119980101 18:14:05!#8531&872960,$A20B-!7(#512@ #.Y
  428.   s-02-01-^A%"Y.5!                                     ^^^^^^^^^
  429. The system-dependent protection "A20B" corresponds to (E,RWED,RED,RE) (but
  430. note the order of fields is reversed and the bit sense is reversed).  The
  431. generic protection "7" = 23 + 32; 23 = 16+4+2+1 = Read, Write, Execute,
  432. Delete, which is indeed the owner permission.  ckvfio.c, 1 Jan 98.
  433. This was somewhat difficult and time-consuming without manuals, man pages, or
  434. header files, requiring much trial and error...  Then came the even more
  435. mysterious task of setting received-file protection from the incoming
  436. Attribute packet.  Two cases:
  437.  1. Local protection (for VMS-VMS transfers; needs "set transfer mode manual"
  438.     or else we get labeled transfer, which bypasses all of this).  I've got
  439.     this working to the point of converting the incoming bit (like ",$E20B")
  440.     to internal format.  (Once this works, we can easily extend it to cover
  441.     RSX, etc, provided PDP-11 Kermit uses the same format, which it probably
  442.     doesn't.)
  443.  2. Generic protection.  I've got this working to the point of converting
  444.     the generic format to VMS internal format, but only for the one field.
  445.     What do I set the other fields to?
  446. And then, in both cases, I wind up at the bottom of zstime() with
  447. xabpro_ofile.xab$w_pro filled in with a plausible value, but then nobody ever
  448. uses it for anything so the incoming file's protection is never actually set.
  449. That last part needs a VMS expert:
  450.  1. How do I get the default protection for the file we're creating so I
  451.     can set the non-owner fields to reasonable values?  For example, if it's
  452.     a new version of an existing file, it should (and normally does) inherit
  453.     its protection, but that happens transparently to Kermit.  But now we want
  454.     to get the protection that *would* be set and change the owner field
  455.     according to the attribute.
  456.  2. What do I do with xabpro_ofile.xab$w_pro once it's filled in?  zstime()
  457.     sets the file date simply by copying it to xabdat_ofile.xab$q_cdt, and
  458.     then this is picked up later by zopeno(), so why isn't the protection
  459.     also picked up?  I couldn't quite follow all the RABs and FABs...
  460. The upshot is, protection/permissions work when sending from VMS to UNIX, but
  461. not in the other direction.  So, for example, if you send an EXE file from VMS
  462. to UNIX, it keeps its execute permission.  If we can get this working in the
  463. other direction, then when you send it back from UNIX to VMS, it will still
  464. have its execute permission.
  465. Changed UNIX C-Kermit to set Delete bit in Generic permissions if file has
  466. Owner Write permission (since UNIX has no separate Delete permission), and to
  467. treat Delete bit in incoming Generic permission equivalent to Write bit.
  468. ckutio.c, 1 Jan 98.
  469. Tried not defining NOLISTEN for VMS to see what would happen.  It worked OK on
  470. UCX 2.0.  It failed horribly on MultiNet; I twiddled some stuff here and there
  471. and seem to have got it working.  Went back to UCX to make sure I didn't break
  472. it there...  Hmmm, still seems to work.  ckcnet.[ch], ckermit2.upd, 1 Jan 98.
  473. VMS: turn off broadcasts on the *console* channel as well as on the
  474. communications channel.  conbin(), ckvtio.c, 2 Jan 98.
  475. Changed the UNIX version when it is about to set a received file's owner
  476. permissions from the incoming generic protection attribute, to use the umask
  477. for the group and world permissions.  zstime(), ckufio.c, 2 Jan 98.
  478. Updated File Permissions section of ckermit2.upd, 2 Jan 98.
  479. Updated ckermit.bwr, and added a new section on "echoplex" scripts.  2 Jan 98.
  480. Moved usage() routine and hlp1[] strings from ckuus2.c to ckuusy.c.  2 Jan 98.
  481. Added little help blurbs for each command-line argument.  ckuusy.c, 2 Jan 98.
  482. Added HELP OPTIONS [ { <opt>, ALL } ].  If <opt> given, it prints the short
  483. HELP text for the option.  If ALL given, it prints them for all options, with
  484. more-prompting, etc.  HELP OPTIONS by itself explains command-line options.
  485. ckuusr.h, ckuus[2y].c, 2 Jan 98.
  486. VMS protections, cont'd...  John Santos showed me how to link the protection
  487. field into that rat's nest of FABs, RABs, and XABs, so now we are actually
  488. setting the VMS file protection from the incoming A packet.  And it works for
  489. both system-dependent (VMS 16-bit) and generic Kermit protections, hurray.
  490. Except when using the generic protection, the non-Owner fields are set to 0,
  491. e.g. (,RWED,,); I'll do something about that tomorrow.  ckvfio.c, 2 Jan 98.
  492. Added v(pid) for VMS.  ckcdeb.h, ckvfio.c, 3 Jan 98.
  493. Added code to VMS version to set its process name to "C-Kermit_6.1".
  494. If that's a duplicate name, then "C-Kermit_6.1_1", C-Kermit_6.1_2", etc.
  495. sysinit(), ckvtio.c, 3 Jan 98.
  496. Added code to VMS zstime() to get the user's default file protection with
  497. sys$setdfprot(), and then used it to set the S, G, and W fields when setting O
  498. field from generic protection (but using the O field as a mask for the other
  499. fields).  ckvfio.c, ckcplm.doc, ckermit2.upd, 3 Jan 98.
  500. Merged some changes from Jeff.  ckcmai.c, ckcnet.c, ckuus[xy].c, ckuusr.h,
  501. 3 Jan 98.
  502. Minor cosmetic cleanups to HELP OPTIONS.  ckuus[2y].c, 3 Jan 98.
  503. Increased Olimit for SINIX to 2100.  makefile, 3 Jan 98.  (But now ckcpro.c
  504. takes a loooooong time to compile...)
  505. Numerous last-minute #ifdef & declaration adjustements.  Many modules.
  506. 3 Jan 98.
  507. At the last moment, found that what should have been "xitsta |= what;" had
  508. been typed as "xitsta != what;" (watcom caught it - "meaningless expression").
  509. So it's corrected in the code, but wrong in all the Alpha.11 binaries.
  510. ckcpro.w, 3 Jan 98.
  511. ---Alpha.11---
  512. (See last entry for Alpha.11.)
  513. Some fixes to usage() message.  ckuus[2y].c, 4 Jan 98.
  514. Minor fixes from David Lane to a debug() statement in ckcnet.c and to
  515. VOS-related #ifdefs in ckcdeb.h, 4 Jan 98.
  516. Added display of sizeof(xxx) to SHOW FEATURES, for xxx == int, char, long, etc.
  517. ckuus5.c, 6 Jan 98.
  518. Merged Jeff's recent changes, many modules.  13 Jan 98.
  519. Merged David Lane's changes for Stratus VOS, adding support for recursive
  520. directory traversal, fully-qualified filenames, etc.  ckcdeb.h, ckuusx.c,
  521. plus all-new ckl*.* modules, 13 Jan 98.
  522. We were still getting floating-point exceptions and related difficulties (up
  523. to and including system halts) in Alpha.11 apparently due to constructions
  524. like the following:
  525.     if (fpxfsecs <= 0.0)
  526.       fptsecs = (CKFLOAT) 0.000001;
  527.     filcps = (long)((CKFLOAT) ffc / fpxfsecs);
  528. The division by a tiny number created a quotient that might not fit in a long.
  529. I replaced all references to "0.000001" by GFMINTIME, which is now defined in
  530. ckcdeb.h to be 0.005.  This doesn't totally fix the problem, but makes it a
  531. lot less likely.  E.g. suppose we have network so fast that we can transfer a
  532. 1MB file in less time than can be measured, so fpxfsecs is 0.0.  When we set
  533. the time to 0.00001:
  534.   1,000,000 / 0.00001 = 1,000,000,000,000
  535. but 2^32 (the longest long) is 4,294,967,296, too small for this number,
  536. hence the trap.  But if we set the time to 0.005:
  537.   1,000,000 / 0.005 = 200,000,000
  538. which fits.  The new symbol GFMINTIME is defined to this value, and we use
  539. the symbol everywhere rather than the hardwired value.
  540. But this still doesn't fix the problem; if the file were (say) 3MB, it would
  541. still happen.  So we also have to check whether the result of a division would
  542. exceed the capacity of a long (or int) to hold it, and in that case take
  543. special action to avoid the trap.  ckcdeb.h, ckcfn2.c, ckutio.c, 13 Jan 98.
  544. Recoded the memcpy() replacement loop in ckcnet.c to not use an unitialized
  545. variable.  Then replaced the loop altogether with a call to a new routine,
  546. ckmemcpy(), which is a system-independent version of memcpy() that can be
  547. called safely from anywhere in C-Kermit.  Presently it's defined in ckcmai.c,
  548. but eventually all of these utility routines should be moved out to a new
  549. ckcuti.c module.  13 Jan 98.
  550. Fixed an out-of-bounds array reference in the new debug(F011,...) handler.
  551. From William Bader.  ckuusx.c, 13 Jan 98.
  552. Raised MAXWLD for VMS from 4K to 1024K and made mtchs[] array dynamic.
  553. ckvfio.c, 14 Jan 98.
  554. Raised MAXWLD for UNIX in the non-BIGBUFOK case from 1K to 4K.  ckufio.c,
  555. 14 Jan 98.
  556. Moved MAXWLD definition from ck[uvdl]fio.c to ckcdeb.h, so we can access
  557. it from other modules.  Added MAXWLD display to SHOW FEATURES.  ckuus5.c,
  558. 14 Jan 98.
  559. Defined BIGBUFOK for HP-UX 9.x.  ckcdeb.h, 14 Jan 98.
  560. Added makefile entries and banner for HP-UX 11.00: "make hpux1100", etc.
  561. makefile, ckuver.h, 14 Jan 98.
  562. UNIX C-Kermit CONNECT command was not checking the return code of ttchk() for
  563. a negative value, and so was not popping back to the prompt automatically.
  564. Seems to do so now, at least on HP-UX, as long as CARRIER-WATCH is not OFF.
  565. ckucon.c, 14 Jan 98.
  566. By chance, I noticed something very strange in UNIX:
  567.   C-Kermit> send /b foo
  568. Sent the "foo" file over and over again.  Diagnosis: "/b" is not treated as a
  569. switch because it does not uniquely match any switch (it is ambiguous between
  570. /binary and /before).  So since it does not match a switch, we look to see if
  571. it matches a file.  It so happens, there was a "b" directory under root.  Now
  572. with the new recursive file sending feature, the SEND command, when given a
  573. directory name, sends the files from the directory.  In other words, "/b"
  574. is treated as "/b/*".  But the b directory contained no files, so zxpand()
  575. came up with 0.  In that case, UNIX zxpand would call zltor() on the filespec
  576. and try again.  Bad idea!  This caused the pathname to be stripped, leaving
  577. only "*".  So "send /b foo" sent all the files from the current directory
  578. with an as-name of "foo".  Cure: (1) remove the fallback -- if the filespec
  579. doesn't match anything, that's that.  And (2) Make "/b" an acceptable
  580. (nonunique) abbreviation for "/binary".  ckufio.c, ckuusr.c, 14 Jan 98.
  581. Added missing return(0) to dohopts().  ckuus2.c, 14 Jan 98.
  582. In SGI IRIX and in NeXTSTEP, there is no API for hardware flow control, but it
  583. can still be used by selecting a device with a particular name, like /dev/cufa
  584. instead of /dev/cua.  But in this case SET FLOW AUTO would wind up setting the
  585. flow control to Xon/Xoff instead of leaving it alone.  Added #ifdefs for IRIX
  586. and NeXT to prevent this.  Also defined a new IRIX symbol for all IRIX
  587. versions 4.0 and later.  ckcdeb.h, ckuus3.c, 14 Jan 98.
  588. How does VMS C-Kermit know if it's running under batch.  Currently:
  589.  . When run interactively, batch == 0.
  590.  . If started from a COM file, batch == 1.
  591.  . If started in batch, batch == 1 and congm sys$qiow = SYSTEM-F-ILLIOFUNC
  592.  . In batch, SHOW LOG SYS$INPUT says "_NLA0:".
  593. Tried adding a sys$getjpiw() call, once I figured out how to set it up.
  594. If asked for JPI$_MODE, it returns the mode of the job: batch, interactive,
  595. etc: perfect.  Builds and runs fine on VMS 5.5-2, so should be OK elsewhere.
  596. ckvtio.c, 14 Jan 98.
  597. Fixed the new xxscreen() macro to not call screen() if batch (VMS) or backgrd
  598. (elsewhere) was set.  ckcker.h.  This also required adding extern declarations
  599. for batch & backgrd to ckcfn[s23].c, ckcpro.w, and ckuusx.c.  14 Jan 98.
  600.  . Fullscreen display in interactive sessions: Yes
  601.  . Fullscreen display in @blah.com sessions:   ??
  602.  . Fullscreen display in submit blah sessions: No <-- so this is fixed now.
  603. Not sure what the deal is with when running C-Kermit with @blah.com, where
  604. blah.com contains image data...  But batch jobs now work nicely, don't put any
  605. junk in the batch log.
  606. Added SET BATCH { ON, OFF } in VMS to let user have the final word.  ckuusr.c,
  607. 14 Jan 98.
  608. Minor fixes to "help options" text.  ckuus2.c, 14 Jan 98.
  609. VMS C-Kermit reported a "fatal error" when executing an INPUT command on a
  610. modem when it hung up, even though CARRIER-WATCH was OFF.  Tracked this down
  611. with help of a debug log from Dale Dellutri.  Fixed in txbufr(), ckvtio.c,
  612. 15 Jan 98.
  613. Dale D. also reported that an extraneous character could show up on the
  614. CONNECT screen when the remote hung up.  No explanation jumps out from the
  615. code, but I changed VMS ttinc() to not deduct 1 from the buffer count until
  616. first checking that it's > 0.  ckvtio.c, 15 Jan 98.
  617. Checked the VMS version on a system where I can dial out -- I don't seem to
  618. have broken anything, and I don't see any of the symptoms any more that I
  619. tried to fix, so maybe that's progress.
  620. Built on the NeXT, dialed out, logged in somewhere, logged out, and for the
  621. first time ever, C-Kermit popped back to its prompt automatically.  And if
  622. CARRIER-WATCH is OFF it doesn't, and you can see the NO CARRIER message and
  623. type more AT commands.
  624. Evidently the HP workstation Reset key sends some kind of ueber-SIGINT that
  625. can not be SIG_IGNored.  When the user hits it (usually because it's where PC
  626. users expect Esc to be), suddenly we're in the Ctrl-C handler, longjmping back
  627. to the prompt, which leaves the lower CONNECT spinning away merrily.  What's
  628. odd about this is that it is the *previous* SIGINT handler, not the current
  629. one, which is SIG_IGN.  I sent off a query to HP about how to handle this, but
  630. in the meantime, in addition to the stale-fork-killing code I added to
  631. ckucon.c a while back, I made the Ctrl-C trap simply return
  632. "if (what == W_CONNECT)".  ckuusx.c, 15 Jan 98.
  633. Peter Eichhorn verifies this fixes leftover fork problem on HP-UX; Reset is
  634. now properly ignored during CONNECT and causes SIGINT at the command prompt,
  635. which is handled properly.  16 Jan 98.
  636. To subtract from, or maybe add to, the confusion about text and binary mode,
  637. I made sure that if the user says SEND (MSEND, etc) /BINARY, that binary mode
  638. is really used, i.e. not superseded by filename pattern-matching, or by
  639. TRANSFER MODE AUTO.  Ditto for SEND /TEXT of course.  ckuus[r6x].c, 16 Jan 98.
  640. Unfortunately, matters are not quite so simple with GET because WHOAMI takes
  641. precedence over WHATAMI, as the manual states.  WHOAMI is controlled by SET
  642. TRANSFER MODE, so if I tell the client to SET TRANSFER MODE MANUAL, then "get
  643. /text x.zip", it should work.  But it doesn't because the server still has
  644. FILE PATTERNS ON and ".zip" is a binary pattern.
  645. While looking into this, I also discovered that REMOTE SET FILE TYPE was
  646. broken.  Why?  Because as soon as we changed the mode, it was restored to its
  647. previous value because it didn't also change g_binary (the global, prevailing
  648. mode).
  649. OK, fine, that's fixed.  But now if TRANSFER MODE is MANUAL, WHATAMI still
  650. doesn't work.  Why?  Again because of the patterns.  gnfile() was resetting
  651. its file type to whatever it was when protocol started between each file, so
  652. as to get the global file mode right when pattern-switching.  So this undid
  653. WHATAMI.  Fixed in gnfile(), ckcfns.c, 16 Jan 98.
  654. So now if I tell the server to SET TRANSFER MODE MANUAL before putting it in
  655. server mode, everything works right.  But there is no way for the client to do
  656. this after the server is started.  So I added REMOTE SET TRANSFER MODE.  The
  657. new code is 410, the values are 0 for AUTO, 1 for MANUAL.  Client side in
  658. ckuus3.c, server sever side in remset() in ckcfns.c, documentation in
  659. ckermit2.upd, 16 Jan 97.  Also sent a note to JRD so he can add it to MSK.
  660. Added REMOTE SET XFER as a synomym for REMOTE SET TRANSFER and fixed both of
  661. these to have a private keyword list rather than using the non-REMOTE one.
  662. ckuus7.c, 17 Jan 98.
  663. Additions/corrections to text and binary patterns lists.  ckcmai.c, 17 Jan 98.
  664. Added v(intime) to tell the number of milliseconds it took for INPUT to
  665. find its match.  ckuusr.h, ckuus4.c, ckermit2.upd, 17 Jan 98.
  666. Added display of modem's dial result message to "Call complete" if DIAL
  667. DISPLAY not ON (and not quiet, etc).  ckudia.c, ckermit2.upd, 17 Jan 98.
  668. Added fword(s1,n1,s2) to return word number n1 from string s1, with optional
  669. break set s2.  ckuusr.h, ckuus[24].c, ckermit2.upd, 17 Jan 98.
  670. Fixed cmfdb() to print an error message if it gets through all the chained
  671. fdb's without finding anything and the return code from the last parsing
  672. function is -9.  Previously it just moved the cursor backwards silently
  673. over the offending field.  ckucmd.c, 18 Jan 98.
  674. If a command has a switch that takes an argument followed by a switch that
  675. does not, e.g.:
  676.   send /as:oofa.txt /text foo.bar
  677. and then this command is recalled, there is a parse error.  Fixed in gtword(),
  678. ckucmd.c, 18 Jan 98.
  679. Added help text for KERMIT command.  ckuus2.c, 18 Jan 98.
  680. Added optional message to EXIT/QUIT, like END and STOP.  ckuusr.c, 18 Jan 98.
  681. Merged Jeff's recent changes, ckcdeb.h, ckuus7.c, ckcnet.c.  19 Jan 98.
  682. Adjusted the constants for float->long overflow detection in fstats() and
  683. tstats() (thanks to gcc -Wall).  ckcfn2.c, 19 Jan 98.
  684. Ran a bunch of feature-test builds on SunOS; each one involved some --
  685. sometimes lots of -- #ifdef adjustments and declaration juggling, especially
  686. the ones marked with (*).  ckuus5.c, in particular, has been massively
  687. rearranged:
  688.  . (full)           ok (1097K)
  689.  . -UDYNAMIC        ok (1081K)
  690.  . CK_SMALL         ok (1073K)
  691.  . MINIDIAL         ok (1064K) (*)
  692.  . NOBIGBUF         ok (1081K)
  693.  . NOBROWSER        ok (1081K)
  694.  . NOCAL            ok (1089K)
  695.  . NOCKSPEED        ok (1089K)
  696.  . NOCKTIMERS       ok (1089K) (*)
  697.  . NOCMDL           ok (1073K)
  698.  . NOCKXYZ          ok (1089K)
  699.  . NOCSETS          ok (1024K)
  700.  . NODEBUG          ok ( 991K)
  701.  . NODIAL           ok ( 958K)
  702.  . NOFRILLS         ok (1056K)
  703.  . NOGFTIMER        ok (1089K)
  704.  . HOHELP           ok ( 974K)
  705.  . NOICP            ok ( 393K) (*)
  706.  . NOJC             ok (1089K)
  707.  . NOKERBEROS       ok (1089K)
  708.  . NOLOCAL          ok ( 770K) (*)
  709.  . NOMKDIR          ok (1089K) (*)
  710.  . NONET            ok (1015K)
  711.  . NOPARSEN         ok (1089K)
  712.  . NOPATTERNS       ok (1081K)
  713.  . NOPERMS          ok (1089K)
  714.  . NOPIPESEND       ok (1089K)
  715.  . NOPUSH           ok (1073K) (*)
  716.  . NORECURSIVE      ok (1097K)
  717.  . NOREDIRECT       ok (1089K)
  718.  . NORENAME         ok (1089K)
  719.  . NORESEND         ok (1089K)
  720.  . NOSETKEY         ok (1089K)
  721.  . NOSERVER         ok (1064K)
  722.  . NOSHOW           ok (1040K) (*)
  723.  . NOSPL            ok ( 925K) (*)
  724.  . NOTRIGGER        ok (1089K)
  725.  . NOTUNING         ok (1089K)
  726.  . NOUNPREFIXZERO   ok (1097K)
  727.  . NOSPL+NOLOCAL    ok ( 614K)
  728.  . sunos42mi        ok ( 294K) ("minimum interactive")
  729.  . sunos41m         ok ( 180K) ("minimum" - cmd line only)
  730. After getting all these to build, I went through the list a second time to
  731. make sure that the accumulated fixes didn't break earlier builds.  Then I
  732. spot-checked various builds to make sure they transferred files OK, etc.
  733. 19 Jan 98.
  734. Fixed "kermit -Q" to work no matter what the compile-time buffer lengths are.
  735. ckuusy.c, 20 Jan 98.
  736. Still more #ifdef adjustments for feature selection.  20 Jan 98.
  737. Added an "include list" for fword() (an exception list to the break set).
  738. ckuus4.c, ckermit2.upd, 20 Jan 98.
  739. Fixed cmdate() to not accept times that were so large they would wrap around
  740. and become negative.  ckuus4.c, 20 Jan 98.
  741. Discovered that filename completion was broken on VMS.  Fixed in ckucmd.c,
  742. 20 Jan 98.
  743. Updated some of the UNIX makefile production rules to include ckcnet.h.
  744. makefile, 20 Jan 98.
  745. Discovered that TELOPT_AUTHENTICATION is erroneously defined as 45 on Ultrix,
  746. OSF/1, Digital Unix, and IRIX (all versions of each).  It should be 37.  This
  747. introduces conflicting definitions in the preprocessor, which I #ifdef'd out.
  748. ckcnet.h, 20 Jan 98.
  749. ---Alpha.12---
  750. Merged Jeff's changes since last week.  ckuus7.c, ckcnet.c, ckucmd.c,
  751. 26 Jan 98.
  752. Added fsplit(string,&array,break,include).  ckuusr.h, ckuus4.c, ckuus2.c,
  753. ckermit2.upd, 26 Jan 98.
  754. Made SHOW NETWORK available in all versions; if no network support is
  755. included, it says so.  ckuus[r5].c, 26 Jan 98.
  756. Integrated Jeff's changes since yesterday.  ckuus7.c, ckcnet.[ch], ckuusr.h,
  757. 27 Jan 98.
  758. Added SET TCP REVERSE-DNS-LOOKUP { ON, OFF }.  Sets tcp_rdns; code needs to
  759. be added to use it.  ckuusr.[ch], ckuus[234].c, ckcnet.c, 27 Jan 98.
  760. Added -DNOGFTIMER to HP-UX 5.00 makefile entry, since the high precision
  761. timers give off-the-wall results there.  makefile, 27 Jan 98.
  762. Changed predefined FAST macro to "set prefixing cautious" instead of "minimal".
  763. ckuus5.c, 27 Jan 98.
  764. Discovered that command-line syntax error messages were never printed.
  765. Fixed in fatal(), ckuusx.c, 27 Jan 98.
  766. Merged Jeff's changes.  ckuus[r37].c, ckcnet.[ch], 28 Jan 98.
  767. Moved +DA1.0 from the hpux100o entries to the basic one, since it applies to
  768. both compilers.  makefile, 28 Jan 98.
  769. Added -pipe to linux entry so it won't make temp files, allowing builds on
  770. systems where /tmp is too full.  makefile, 28 Jan 98.
  771. In VMS, make zshcmd() (RUN command) return proper status, ditto for zxcmd(),
  772. and make both set pexitstat.  ckcdeb.h, ckuus4.c, ckvfio.c, 29 Jan 98.
  773. Enabled ck_errstr() for VMS, but errno is always 0.  Tried it again based on
  774. vaxc$errno, same result.  So then I went thru ckvfio.c and ckvtio.c and
  775. assigned the return of every sys$blah() and lib$blah() call to a global
  776. variable, vms_lasterr.  Works.  ckv[ft]io.c, ckuusx.c, 29 Jan 98.
  777. Added ferrstring(n), returns error message for code n.  In <sys/errno.h>
  778. environments (like UNIX), this requires knowing the maximum index of the
  779. sys_errlist[] array, normally sys_nerr.  We'll soon find out how portable
  780. that is...  UNIX and VMS only for now.  ckuusr.h, ckuus4.c, 29 Jan 98.
  781. Added SET FUNCTION DIAGNOSTICS { ON, OFF }.  When ON, this makes variables
  782. and functions return an error-message string as their values.  ckuusr.h,
  783. ckuus[34].c.  30 Jan 98.
  784. Discovered that array initializers were off by one (i.e. not skipping over
  785. the "=" sign); numerous other problems with array bounds, malloc'ing and
  786. freeing, etc, when processing initializers.  ckuusr.c, 30 Jan 98.
  787. Added makefile entrys aix41, aix42, aix43.  These are all the same, but
  788. set a different program herald.  ckuver.h, makefile, 31 Jan 98.
  789. Kerberos V authentication added to Linux version, using Cygnus libs.
  790. Encryption does not work yet due to fork structure of ckucon.c.  makefile,
  791. ckcmai.c, ckuus5.c, ckutio.c, ckcnet.[ch] + new non-public krbtel.[ch] module,
  792. documented in kerberos.txt.  1 Feb 98.
  793. Fixed the size of the command buffer to be at least as big as the function
  794. result buffer.  This means, for BIGBUFOK builds, 10K rather than 4K.
  795. ckucmd.h, 1 Feb 98.
  796. Added SET FUNCTION ERROR { ON, OFF }.  When ON, this makes any command that
  797. contains a bad function call or built-in variable reference fail.
  798. ckermit2.upd, ckuus[2345].c.  1 Feb 98.
  799. Uncoupled display of dialing-directory related info during dialing from
  800. SET DIAL DISPLAY ON, which should only affect whether dialog with modem is
  801. shown.  ckuus6.c, 1 Feb 98.
  802. Fixed some prompt-stomping in VMS DIAL command when DIAL DISPLAY is ON.
  803. ckudia.c, 1 Feb 98.
  804. Added "k95" as a command to K95, an alias to "kermit".  ckuusr.c, 1 Feb 98.
  805. Fixed minor problem with completion of "intro" command.  ckuusr.c, 1 Feb 98.
  806. Discovered that isabsolute() for UNIX, OSK, Amiga, and K95 returned 1 instead
  807. of 0 if the filename started with ".", which is completely wrong.  One symptom
  808. was that an incoming file whose name started with "." when RECEIVE PATHNAMES
  809. were RELATIVE would have a second dot added to the front of its name.  I can't
  810. imagine why this was done in the first place, and hope I haven't broken
  811. anything that depended on this -- but if I did, it shouldn't have...
  812. ckcmai.c, 1 Feb 96.
  813. When a file group is being transferred, CPS rates were not being calculated
  814. after the first file.  Must have happened during the GFTIMER work...  Fixed
  815. in ckuusx.c, 1 Feb 96.
  816. In VMS, on a serial connection with CARRIER-WATCH off, and the remote hangs up
  817. while C-Kermit is in CONNECT mode, contti() gets a completion from sys$qiow()
  818. indicating SS$_HANGUP, but no character; however, Kermit was returning a
  819. character anyway, whatever happened to be left in the variable from last time.
  820. Fixed by having contti() set the read up to be queued again next time and then
  821. returning a special status, -2.  ckcgetc(), looks for the -2 and then calls
  822. contti() again, up to 10 times.  Experimentation shows that the second call
  823. always succeeds -- SS$_HANGUP is returned only once; after that, reads work
  824. normally again.  ckvtio.c, ckvcon.c, 1 Feb 98.
  825. Quick check-builds on SunOS, Linux, HP-UX, VMS, and Unixware all compile OK...
  826. Added test & message for no-such-macro to fexec().  Added tests for bad array
  827. references to fwords().  Added tests for numeric arguments that were not
  828. there yet, supplied defaults where they were not previously being supplied in
  829. cases where it made sense, etc.  ckuus4.c, 2 Feb 98.
  830. Added RTS/CTS for IRIX 6.2 and higher, since an API for it seems to have
  831. appeared in termios.h; the "POSIX" style is used (tcsettar()), but the field
  832. name is unique (CNEW_RTSCTC).  ckcdeb.h, 2 Feb 98.
  833. Upon receipt of newer information, fixed RTS/CTS support for SGI to go back
  834. to IRIX 5.2.  ckcdeb.h, ckuver.h, makefile, 3 Feb 98.
  835. Added "set send packet 4000" to definition of FAST macro for IRIX.  ckuus5.c,
  836. 3 Feb 98.
  837. Removed a lot of junk from ckermit.ini that isn't needed any more -- EDIT
  838. macro, BSEND and friends, etc.  3 Feb 98.
  839. Numerous declaration and #ifdef fixups, many modules, 4 Feb 98.
  840. ---Alpha.13---
  841. Merged Jeff's changes: Telnet X-display-location, logout options, etc.
  842. ckcnet.[ch], ckuus[27].c, ckcdeb.h, 5 Feb 98.
  843. Changed %* to hold the entire argument line for the macro, so now it can
  844. be used to reference arguments past %9.  ckuus[45].c, 5 Feb 98.
  845. Changed SET LOGIN { USER, PASSWORD, PROMPT } <text> to allow braces around
  846. <text> so text can end with "{" without swallowing the rest of the script.
  847. ckuus3.c, 6 Feb 98.
  848. After several false starts, figured out how to let the &_[] array, which
  849. contains pointers to the argument of the current macro, have more than 10
  850. elements.  So now, for the first time, users can pass as many arguments as
  851. they like to a macro in a straightforward way, and have a straightforward way
  852. to reference them.  This works with nesting, FOR-loops, and everything else.
  853. v(argc) now includes any extra arguments.  ckuusr.h, ckuus[56].c, 9 Feb 98.
  854. Added a new function, fdimension(&a), which tells the declared size of the
  855. given array.  ckuusr.h, ckuus4.c, 9 Feb 98.
  856. Filled in &_[0] element with name of macro.  ckuus5.c, 10 Feb 98.
  857. New HP-UX 7.x entries from Peter Eichhorn.  makefile, 10 Feb 98.
  858. Shuffled CK_AUTODL and CK_APC #ifdefs a bit to allow successful compilation
  859. on OS-9.  ckcfn2.c, ckcker.h, ckucon.c, 10 Feb 98.
  860. Removed -DNETCONN from Plan 9 makefile.  ckpker.mk, 10 Feb 98.
  861. Guarded reference to EWOULDBLOCK error code by #ifdef EWOULDBLOCK, for Plan 9
  862. and possibly also ISC 4.1.  ckutio.c, 10 Feb 98.
  863. Removed redundant definition of OUT_PAC from ckuusr.h, 10 Feb 98.
  864. Added CLOSE TRANSACTIONS as a synonym for CLOSE TRANSACTION-LOG, because the
  865. book mentions CLOSE TRANSACTIONS.  ckuusr.c, 10 Feb 98.
  866. Changed command-line option '#' to require a numeric argument, startflags.
  867. ckuus[4y].c, 10 Feb 98.
  868. Changed SET PRINTER #ifdefs to allow pipes for OS-9.  ckuus3.c, 10 Feb 98.
  869. Commented out the "?Retry limit must be greater than window size" check
  870. in SET RETRY, a relic from bygone days.  ckuus3.c, 10 Feb 98.
  871. Fixed the DIAL command not to send modem commands if they were empty
  872. strings (in this case, the behavior is different for null pointers and
  873. empty strings).  ckudia.c, 10 Feb 98.
  874. Fixed compilation of main program to not crash gcc on SCO OSR5.04.
  875. ckcmai.c, 10 Feb 98.
  876. Ditto for ckwart.c, 10 Feb 98.
  877. rmdir() is not available in OS-9; guarded reference to it in ckmkdir()
  878. by appropriate #ifdefs.  ckcfn3.c, 11 Feb 98.
  879. rand() and srand() not available in OS-9, added NORANDOM to OS-9 makefile.
  880. ck9ker.mak, 11 Feb 98.
  881. Added another check to clsif() to make sure it does not put up a "Transfer
  882. OK" screen when sending is incomplete (in this case because there was an i/o
  883. error when sending), the check being for the number of file characters sent
  884. less than the number of characters in the file, taking resends into account.
  885. ckcfn3.c, 11 Feb 98.
  886. Lots of fooling with ckutio.c (ttvt(), ttinc(), mygetbuf(), etc) and ckcgetc()
  887. in ckucon.c to try to catch the case where C-Kermit is in CONNECT mode, stuck
  888. in a blocking single-byte read(), and the modem is switched off, e.g. on HP-UX.
  889. Even though CLOCAL is explicitly unset, the read() does not return when this
  890. happens.  There doesn't seem to be anything I can do about it.  ckuker.bwr,
  891. 11 Feb 98.
  892. In "get /as-name:foo bar", the as-name was ignored; I wonder why nobody
  893. noticed this before.  Fixed in doxget().  ckuus6.c, 11 Feb 98.
  894. Added SET INPUT CANCELLATION { ON, OFF } to enable / disable keyboard
  895. cancellation of INPUT command in progress.  ckuusr.h ckuus[r2457].c, 12 Feb 98.
  896. Added SET TRANSMIT TIMEOUT <sec>.  ckuus[r2457].c, 12 Feb 98.
  897. Toned down disconnection error messages in doinput() (Jeff).  ckuus4.c,
  898. 14 Feb 98.
  899. Changed [M]SEND /MOVE: to /MOVE-TO:.  Ditto for /RENAME:.  ckuusr.c, 14 Feb 98.
  900. Fixed GET /COMMAND -- it was totally broken by my change on 11 Feb 98.
  901. ckuus6.c, 15 Feb 98.
  902. Added perfunctory help text for Kerberos-related commands; detailed help would
  903. just be way too much.  Referred them to the kerberos.txt file instead.
  904. ckuus2.c, 15 Feb 98.
  905. Fix from Jeff for a memory leak in ckuus4.c, 20 Feb 98.
  906. Reverse DNS lookup ON/OFF/AUTO + send DO LOGOUT, Jeff.  ckcnet.c, 20 Feb 98.
  907. Fix for problem with ECHO and SET FUNCTION ERROR, Jeff.  ckuusr.c, 20 Feb 98.
  908. Merged other changes from Jeff, ckuus[35x].c, ckucmd.c, ckcpro.w, 20 Feb 98.
  909. Fixed another memory leak in initmac().  ckuus5.c, 20 Feb 98.
  910. Fix from Jeff for SET { BROWSER, EDITOR }.  ckuus3.c, 21 Feb 98.
  911. Added SET FTP-CLIENT / SHOW FTP.  ckuusr.[hc], ckuus[235].c, 21 Feb 98.
  912. Added SET SLEEP (or PAUSE) CANCELLATION { ON, OFF }.  ckuusr.h, ckuus[r236].c,
  913. 21 Feb 98.
  914. Added SET COMMAND INTERRUPTION { ON, OFF } to enable/disable the Ctrl-C trap.
  915. ckuusr.h, ckuus[35].c, 21 Feb 98.
  916. Fixed WAIT to work as advertised with SET WAIT (SLEEP) CANCELLATION OFF, and
  917. Updated HELP WAIT and HELP SLEEP.  ckuus[r2].c, 22 Feb 98.
  918. DISABLE CD prevented GET from working when a GET-PATH was set.  Fixed in
  919. gnfile() and openi(), ckcfn3.c, 22 Feb 98.
  920. The error message from C-Kermit when it could not open a file to be sent was
  921. always "Can't open file", which was singularly uninformative.  Now it sends
  922. "Access denied" if sending was prevented by DISABLE CD or other restriction,
  923. otherwise it is the system error message from the open() failure, such as
  924. "Read access denied".  ckcfn3.c, ckcpro.w, 22 Feb 98.
  925. Similarly for sending files to C-Kermit.  opena(), ckcfn3.c, 22 Feb 98.
  926. Discovered that UNIX C-Kermit server was no longer handling tilde notation
  927. in GET command filespecs.  Fixed in sgetinit(), ckcpro.w, 22 Feb 98.
  928. Ditto for MGET.  Fixed in gnfile(), ckcfns.c, 22 Feb 98.
  929. Added SET DIAL PACING <msec>.  ckuusr.h, ckuus[34].c, ckudia.c, 22 Feb 98.
  930. Added S14=0 to USR init string so +++ will not hang up the call.  ckudia.c,
  931. 22 Feb 98.
  932. SHOW DIAL was too long; askmore()'d it.  ckuus4.c, 22 Feb 98.
  933. Assorted last-minute fixes for declarations & ifdefs.  ckcnet.c, ckuus4.c,
  934. 22 Feb 98.
  935. ---Beta.01---
  936. Fix for repeat counts when sending in text mode on CRLF-based systems, from
  937. Jeff.  ckcfns.c, 22 Feb 98.
  938. Added a definition for CK_UTSNAME for SunOS, HP-UX, POSIX (per POSIX.1), AIX,
  939. and SVR4 (per SVID).  Will check on others later.  When this symbol is
  940. defined, we #include <sys/utsname.h>, and then we can get the machine type, OS
  941. name, OS version, etc, at runtime by calling uname() in sysinit().
  942. ckcdeb.h, ckutio.c, 25 Feb 98.
  943. In ckutio.c, CK_UTSNAME means it's OK to include <sys/utsname.h> and to call
  944. uname(), but outside ckutio.c, it simply means that the strings listed below
  945. may be referenced (which implies that they are defined in the corresponding
  946. ck?tio.c module, and filled in by any appropriate means).
  947. Added string variables to ckutio.c to hold these items:
  948.   unm_mch[]  Machine name (e.g. "9000/715")
  949.   unm_nam[]  OS name (e.g. "HP-UX")
  950.   unm_ver[]  Name of major OS release (e.g. "A")
  951.   unm_rel[]  Name of specific OS release (e.g. "A.10.20")
  952. And logged them in the debug log.  Just type "log debug", "close debug" and
  953. look at the top of debug.log to see them.  ckuus4.c, 25 Feb 96.
  954. Changed v(cpu) to evaluate to unm_mch[] in preference to "unknown" if
  955. CK_UTSNAME is defined.  ckuus4.c, 25 Feb 96.
  956. Added v(osname) and v(osversion).  For systems where CK_UTSNAME is defined,
  957. these are the sysname and release members of the utsname struct, respectively.
  958. Thus, these describe the system where C-Kermit is actually running.  We never
  959. had this information before.  ckuusr.h, ckuus4.c, 25 Feb 96.
  960. From now on v(platform) should be thought of as describing the system for
  961. which C-Kermit was built, which is not necessarily the same as the one it's
  962. running on.
  963. In HP-UX 9.0 and later, sysinit() sets the variable hpis800 if the machine is
  964. an 800-series, otherwise unsets it, using the HP-blessed method of looking at
  965. utsname.machine[5].  ckutio.c, 25 Feb 98.
  966. Defined a new symbol HPUX9PLUS meaning "HP-UX 9.00 or higher".  Changed
  967. ttlock() and ttunlock() to use this symbol instead of HPUX10.  But since the
  968. format of device names in HP-UX 9.x is different from 10.00 on Series 700
  969. hardware than on Series 800, I used the hpis800 variable to construct the
  970. appropriate format for the lockfile name in ttlock().  At this point, the
  971. lockfile behavior of HP-UX 9.xx and 10.xx and 11.xx should be identical.
  972. ckutio.c, 25 Feb 98.
  973. Changes to make 6.1 build under Sunsoft Interactive UNIX 4.1 from Kenneth
  974. Cochran (#include <sys/time.h>, link with libinet).  ckutio.c, makefile,
  975. 26 Feb 98.
  976. Added code to let server handle a GET command for a filename that contains
  977. spaces.  This works if the client sends the name enclosed in either braces
  978. or doublequotes.  ckcpro.w, ckermit2.upd, 26 Feb 98.
  979. Fixed compilation errors HP-UX 9.xx lockfile code.  In HP-UX 10.00 and above
  980. we also do SVR4 advisory locks, but these are not available in 9.xx, so more
  981. #ifdefs were needed.  ckutio.c, 27 Feb 98.
  982. Another change for HP-UX 9.xx lockfiles (it was using the HP-UX 10.00 lockfile
  983. directory, /var/spool/locks, rather than /usr/spool/uucp).  ckutio.c, 2 Mar 98.
  984. Adapted recent HP-UX lockfile code to all HP-UX versions.  Added additional
  985. names to the list of names to check for lockfiles: "cuad" and "culd".  Built
  986. and tested on HP-UX 10.20, 9.05, 8.00, 5.21.  ckutio.c, ckuker.bwr, 3 Mar 98.
  987. Fixed v(cpu) to return uname() hardware type if known, in preference to
  988. "unknown".  I thought I did this before, but I missed an #ifdef in ckuver.h.
  989. Now we can see all those exotic cpu types (tested on an HP-9000/550, where
  990. v(cpu) now says "9050X" rather than "unknown").  ckuver.h, 3 Mar 98.
  991. Discovered that UNIX v(xxx) variables that returned directory names did so
  992. inconsistently -- some ended with /, some didn't, some ended with two /'s.
  993. Fixed all of them to send with one and only one /.  ckuus4.c, ckutio.c,
  994. 3 Mar 98.
  995. Merged Jeff's recent changes.  ckuus[r347x].c, ckcdeb.h, cknet.h, 3 Mar 98.
  996. Discovered that v(inidir) returned a filename rather than a directory name
  997. if the initialization file didn't exist.  It should have returned an empty
  998. string in this case.  Fixed in doinit(), ckuus5.c, 3 Mar 98.
  999. Added designer banner for BSDI 3.0.  ckuver.h, makefile, 3 Mar 98.
  1000. Added uname() info, if we have it, to SHOW VERSION.  ckuus5.c, 3 Mar 98.
  1001. VMS #ifdefs for getsockname() to suppress compilation warnings in
  1002. getlocalipaddr(), from Lucas Hart.  ckcnet.c, 3 Mar 98.
  1003. Changes from Lucas Hart to VMS file module, ckvfio.c, 3 Mar 98:
  1004.  a. Issue an informative message upon failure to SPAWN.
  1005.  b. Support transfer of odd-record-length files.
  1006.  c. Improvements to isdir().
  1007. In more detail:
  1008. (a) add a diagnostic message when SPAWN fails because the default directory is
  1009. a remote node.  (4263)
  1010. (b) when sending a file in C-Kermit BINARY mode, change from RMS BLOCK to RMS
  1011. RECORD mode if the file format is fixed record length and the record length is
  1012. odd.  Implementing that turned out to be simple (after the fact.)  Maybe that
  1013. will do the job for whoever wants to retain the Kermit-32 behaviour.  I've
  1014. done some minimal testing - transfer to a du40 system of a short odd record
  1015. length file; in that case IMAGE vs BINARY had the intended effect of
  1016. including/excluding the pad byte.  (918)
  1017. (c) an extension of Mark Berryman's isdir(), to use $SEARCH rather than
  1018. depending on $PARSE to return the directory status.  By trial-and-error, I
  1019. concluded that PARSE only tests a directory specification for the existence of
  1020. a corresponding file with ".DIR;1"; it does not test if that file is a
  1021. directory file.  Also, PARSE is documented to not test for the existence of
  1022. the directory on a remote node.  As far as I can tell, isdir now correctly
  1023. reports whether a file is recognized by RMS as a directory and whether the
  1024. name was a passed as a directory specification or a directory name.  (715)
  1025. Disabled GFTIMER for VMS versions prior to 5.0 (William Bader & Lucas Hart --
  1026. actually Lucas sent in code to enable this, but it involves changing the
  1027. mechanism used on later versions also, a risk that would seem to outweigh the
  1028. benefit).  ckcdeb.h, 3 Mar 98.
  1029. Discovered that REMOTE SET <various things> didn't work any more because
  1030. the things that were SET were then restored to their saved values upon exit
  1031. from protocol mode.  Affected things were BLOCK-CHECK, RECEIVE TIMEOUT, and
  1032. FILE NAMES.  ckcpro.w, ckcfns.c, 4 Mar 98.
  1033. A user reported bizarre problems when using the MKDIR command in a macro.
  1034. Problem: incorrect assumption that msgflg was 0 when in protocol mode, nonzero
  1035. otherwise (found by Jeff).  Solution: add another agument to ckmkdir().
  1036. ckcker.h, ckcpro.w, ckuusr.c, 4 Mar 98.
  1037. Merged Jeff's changes.  ckuus7.c, ckuusy.c, ckucmd.c, 4 Mar 98.
  1038. VMS zrmdir() is a horrible hack, calling system() to set the permission of the
  1039. directory file and calling system() again to delete it -- if anyone knows a
  1040. better way, be my guest.  Improved this slightly by setting the owner
  1041. permission to RWED rather than just D, so if the delete command fails, at
  1042. least the directory can still be accessed (e.g. to delete its files, so the
  1043. directory can be deleted after all).  ckvfio.c, 4 Mar 98.
  1044. Discovered that VMS C-Kermit could not receive a file whose name contained
  1045. a segment that was more than 39 characters long.  The file-creation API does
  1046. not truncate extra characters from name segments, so I added code to VMS
  1047. nzltor() to do this.  ckvfio.c, 4 Mar 98.
  1048. Discovered that whenever an .OBJ file is sent from VMS C-Kermit, it says
  1049. "transfer interrupted", even though the file is sent OK.  This is because of a
  1050. check I added to clsif() recently to see if the number of file bytes sent was
  1051. not less than the size of the file.  Turns out this is not a reliable test for
  1052. VMS, so I dummied out the test for VMS.  Ditto for VOS.  ckcfn3.c, 4 Mar 98.
  1053. The same thing would happen if K95 was sending a text file with EOF CTRLZ,
  1054. so I added another test to allow for that too.  ckcfn3.c, 4 Mar 98.
  1055. Discovered that VMS C-Kermit on my local VAX with UCX doesn't know the name of
  1056. the TCP host it's connected to.  Evidently the new reverse DNS lookup doesn't
  1057. work in UCX (or at least not in UCX 2.0).  Changed the default for this in UCX.
  1058. ckcnet.c, 4 Mar 98.
  1059. Discovered that VMS C-Kermit under TGV Multinet doesn't have a SET TCP
  1060. command.  This is because all the tables are #ifdef SOL_SOCKET, which is
  1061. evidently not defined in Multinet.  But TCP ADDRESS, TCP REVERSE-DNS-LOOKUP,
  1062. etc, don't depend on this, so I removed the #ifdefs.  ckuus[3c].c, 4 Mar 98.
  1063. A bug was reported in VMS C-Kermit's fullscreen file transfer display that
  1064. happens during GET commands, but not SEND commands -- the left and right sides
  1065. of the display are skewed by one line.  I can't reproduce on VAX or Alpha.
  1066. Parsing of SET MODEM command was pretty awful if the user tried to edit, etc,
  1067. because of the horrible hack used to accept SET MODEM <modem-type> for
  1068. backwards compatibility.  Removed the hack and replaced with chained FDBs for
  1069. the two keyword tables.  ckuus3.c, 4 Mar 98.
  1070. More changes to HP-UX lockfile recognition -- now we recognize any string of 1
  1071. or more digits, or any string of one or more digits followed by a "p" followed
  1072. by one or more digits, as a unit number for purposes of identifying a standard
  1073. HP-UX serial device, regardless of the HP-UX version or the hardware model.
  1074. ckutio.c, 4 Mar 98.
  1075. Fixes to the yesterday's HP-UX lockfile work.  ckutio.c, 5 Mar 98.
  1076. Added more text and binary filename patterns for UNIX.  ckcmai.c, 5 Mar 98.
  1077. Added an error message if ttvt() call in OUTPUT command fails.  Made INPUT
  1078. messages consistent with OUTPUT.  ckuus[45].c, 5 Mar 98.
  1079. Conversion of UNIX CONNECT module to select()...  Previous copy of ckucon.c is
  1080. safe with Beta.01.  I butchered my working copy to:
  1081.  . Remove all hints of forks, pipes, pids, and signals.
  1082.  . Remove all X.25 support.
  1083.  . Use select() to wait for next event.
  1084. This cuts it down from 2400 lines to 1400 lines.
  1085. All the existing i/o and buffering mechanisms were kept.  Works fine on SunOS:
  1086.  . As a Telnet client (negotiations all ok).
  1087.  . As an Rlogin client (as root, of course).
  1088.  . On a serial port too.
  1089. Very fast too.  Ditto on HP-UX 10.20 and Solaris 2.5.  And Linux, yay.
  1090. But details need fixing:
  1091.  . Autodownload doesn't work.
  1092.  . The key-macro code was stripped out -- must put it back in.
  1093.  . Prompt-stomping & missing messages upon return from CONNECT mode.
  1094.  . #ifdefs for syntax of FD_blah, select(), etc, on many systems.
  1095.  . Test transferring files through this Kermit in the middle.
  1096. To do:
  1097.  . Fix above details.
  1098.  . Test test test, find and fix other details.
  1099.  . Add Kerberos support for Linux.
  1100.  . Find out which UNIXes can use select() for both serial & net connections.
  1101.  . Figure out a way to make a single source support both fork() and select().
  1102. The last one is probably too much.  But we can have separate modules easily
  1103. enough, since there are separate production rules in the makefile for regular
  1104. and Kerberized builds; this allows CONNECT modules with different names.
  1105. All the above: ckocon.c, 5 Mar 98.
  1106. Added back key mapping to new ckucon.c.  7 Mar 98.
  1107. Discovered SET KEY, when given in its multiline format, did not allow the
  1108. definition to be edited.  Fixed in ckuus3.c, 7 Mar 98.
  1109. Fixed APC, autodownload, prompt-stomping and missing messages.  Tested
  1110. triggers, character-set translation, Telnet to NeXT, all OK.  ckucon.c,
  1111. 7 Mar 98.
  1112. Now try to get Kerberos encryption going on Linux.  Short story: it works but
  1113. it's slow.  Longer story: The normal ckucon.c strategy of using a blocking
  1114. ttinc() followed by n = ttchk() and then ttxin(n,buf) won't work with Kerberos
  1115. because ttxin() decrypts or does not decrypt the entire buffer that it reads
  1116. based on the current encryption state.  But the encryption state can change
  1117. midstream based on Telnet negotations that might be in the middle of the
  1118. buffer.  Since Telnet negotations are handled only at the highest level (by
  1119. the client of the client of the ttblah() functions), we must do
  1120. single-character reads only, using ttinc(), if there is a possibility of
  1121. encryption.  So far so good...
  1122. BUT... ttinc() also buffers stuff up internally, and this conflicts with the
  1123. our new select()-driven strucure; a deadlock can occur when select() waits on
  1124. the net, but the net has already sent everything it intends to and all this
  1125. material is already sitting in ttinc()'s internal buffer.  ttchk() to the
  1126. rescue?  No, because ttchk() looks not only at the internal buffer, but also
  1127. at the TCP buffers.
  1128. So... since it's all in the family (UNIX), I added a new UNIX-only function,
  1129. ttpeek(), which tells how many bytes are waiting in ttinc()'s internal buffer
  1130. (i.e. the MYREAD buffer).  This tells us whether to tell select() to block on
  1131. the net.  The result works fine, but slowly, since we have several layers of
  1132. function calls for each character we read: ckcgetc() -> ttinc() -> read().
  1133. And of course, now also the Kerberos decryption function.  There is no other
  1134. way to do this given the current layering.
  1135. I'll see if I can find any way to speed up the code, but in any case, it needs
  1136. variables it can test to see if encryption is a possibility.  For example, if
  1137. we know at runtime this is not a kerberized connection, we don't need the
  1138. byte loop.  I used "me_auth" for now.
  1139. File transfer works, but slooooowly, and streaming doesn't work at all because
  1140. there is always a CRC error on the first packet.  After a streaming transfer
  1141. failure and re-CONNECT, it just hangs -- nothing on the far end, can't escape
  1142. back either -- encryption sync is evidently lost.
  1143. After analyzing logs, I realized: if a packet is ever resent, then we are
  1144. encrypting a packet that was already encrypted, since ck_krb_encrypt() works
  1145. in place.  So I made ttol() copy the clear-text packet to its own private
  1146. buffer, then encrypt the buffer, then write it.  This cures the problems in
  1147. one direction (encrypting local Kermit is receiving -- autodownload works ok),
  1148. but not in the other -- it hangs for a while at the beginning, and then again
  1149. (forever) at the end of the transfer.
  1150. Made it safe to use memcpy() by defining a memcpy() macro to use ckmemcpy()
  1151. if USE_MEMCPY not defined, and then defining USE_MEMCPY for systems where I
  1152. know it's available (K95 + most modern UNIXes).  ckcdeb.h, 8 Mar 98.
  1153. Added a "SECURE" indication to SHOW COMM, the CONNECT message, and the Network
  1154. Type field of the fullscreen file-transfer display.  ckucon.c, ckuusx.c,
  1155. 8 Mar 98.
  1156. Ran encrypted transfers again via K5 localhost connection, client/server:
  1157.  . SEND worked fine, no errors.  But later another SEND took a long time
  1158.    to start and hung at the end.
  1159.  . GET worked fine, no errors, but was excrutiatingly slow (83 cps).
  1160.    Both sides reported zero errors.  But after "fin" and connecting back,
  1161.    I saw a fragment of garbage on the screen, indicating some kind of
  1162.    encryption screwup.
  1163.  . Streaming transfers still fail immediately.
  1164. Speculation: mode-changing by ttpkt(), ttvt(), ttres(), etc, result in data
  1165. loss and therefore in loss of encryption sync.  No, they don't actually do
  1166. anything except turn Nagle on and off.
  1167. Added Nagle restoration code to ttres().  ckutio.c, 8 Mar 98.  (This made
  1168. no difference.)
  1169. Looking at the (huge) debug logs, now I see that there were lots of NAKs
  1170. after all, but they did not show up in the file-transfer display or statistics
  1171. (why?)  Sometimes the delay between packets was as much as 70 seconds.
  1172. OK, now I see the problem.  ttinl() reads the first data packet.  It is
  1173. decrypted correctly.  ttinl() recognizes the beginning, the length field, and
  1174. the end.  Then it gets to its CR-removal stage and says: "ttinl removed=13"
  1175. (good), "ttinl removed=0" (good), "ttinl removed=1" <-- uh oh, the SOH of the
  1176. next packet.  And then proceeds to discard the entire next packet.  Problem:
  1177. the lookahead test for the packet-start character was performed by peeking
  1178. into the encrypted buffer.  Solution: decrypt each character first, then test
  1179. it.  But oops, now we've already read it.  So resurrect the old myunrd()
  1180. function to push it back.  But oops, that doesn't work either, because when
  1181. we go to read it again, we decrypt it again.  So instead we add a special
  1182. variable for saving and restoring a pushed-back ttinl() character, to know
  1183. not to decrypt it again when fetching it.  ttinl(), ckutio.c, 8 Mar 98.
  1184. So now we have my favorite situation: file transfers work perfectly in both
  1185. directions when the debug log is on, and fail miserably when it's off.  So
  1186. let's turn on streaming, which always fails, to catch an error in the log.
  1187. Nope, streaming works now too.  But when debugging is off sending to a server
  1188. still takes a long time to start and then hangs forever after sending the B
  1189. packet.
  1190. So I checked all calls to ck_krb_encrypt() in ckutio.c.  It is only called in
  1191. two places, ttol() and ttoc().  In neither place can it possibly encrypt
  1192. something that was already encrypted.  So the culprit must be ck_krb_decrypt().
  1193. But all calls to that look right too.
  1194. Since the problems occur most frequently at the beginning or end of a file
  1195. transfer, ttflui() is the next suspect.  And dummying out ttflui() does,
  1196. indeed, make the problems completely disappear.  OK, but why?  Aha, an
  1197. off-by-one error in the clever reference to the mybuf address (the buffer
  1198. index is pre-, not post-incremented).  Fixed in ttflux(), ckutio.c, 8 Mar 98.
  1199. So now it all works.  Some tests:
  1200.  . Client/server works fine -- send/get, etc.
  1201.  . Streaming works fine.
  1202.  . Ditto for both when transferring a gzip'd file no prefixing, provided
  1203.    we SET FLOW NONE on the far end (!) (I need to address this in any case...)
  1204.  . Autodownload, APC work fine.
  1205.  . Scripts work, including the CLEAR command.
  1206.  . Encrypted transfers go at about 55Kcps on localhost connection,
  1207.    versus unencrypted transfers at about 106Kcps.
  1208.  . CONNECT mode is noticeably slower on long scrolling displays:
  1209.    ripple test is 24 seconds encrypted vs about 9 sec unencrypted.
  1210.    This is due to the combination of decryption overhead and character-
  1211.    at-a-time i/o.
  1212. However, attempts to make a new connection occasionally fail -- authentication
  1213. works, CONNECT works, etc, but encryption is evidently starting out wrong
  1214. because we just get a blank screen and frozen keyboard -- can't even escape
  1215. back.  Speculation: the encryption state is carried across sessions?  So if
  1216. something winds up not being encrypted or decrypted at the end of session <n>,
  1217. then session <n>+1 will never get off the ground.  I tried calling ttflui()
  1218. from ttclos() -- and not sending Telnet DO LOGOUT -- if it's an encrypted
  1219. connection.  This seems to alleviate the problem in most cases; now I can
  1220. reproduce only it by starting a server on the remote end and sending it a BYE.
  1221. All seems normal -- the client gets the ACK to the BYE, the server side logs
  1222. out, but the next encrypted connection attempt always fails.  I tried putting
  1223. an msleep(500) in the server code after sending the ACK() to the BYE and
  1224. before calling ttres() or zkself(), but it didn't change anything.  There
  1225. probably needs to be some kind of Kerberos call when C-Kermit exits or when
  1226. it logs itself out, to reset Kerberos to some known state.
  1227. Hmmm -- here's another way to make it always happen: use "set host" and
  1228. "connect" instead of "telnet".  The debug log shows that everything is working
  1229. correctly -- all the Telnet negotiations are correct -- authentication,
  1230. encryption, etc.  Then the host sends us its banner and greeting and we sit in
  1231. myfillbuf() stuck in a read() waiting for the prompt, but it never comes...
  1232. Ha, got it.  Yesterday I decided to use "me_auth" as the variable to decide
  1233. whether encryption was possible.  If me_auth was set, then the CONNECT module
  1234. did all reads by calling ttinc(), otherwise it was free to call ttxin().  But
  1235. this was not a good choice -- the log shows we called ttxin() before me_auth
  1236. was set, but ttxin() read too much.  So backing off that choice (a) makes
  1237. everything work, but (b) means that there is no way to use the faster code on
  1238. non-Kerberized connections.  I also backed off the changes to netclos();
  1239. everything works fine now without them.  ckcget(), ckucon.c, 8 Mar 98.
  1240. Removed some verbose debugging statements from file-transfer buffer management
  1241. code, since this code has been stable for six years.  ckcfn3.c, 8 Mar 98.
  1242. Improved F000 debug format to allow omission of s2.  ckuusx.c, 8 Mar 98.
  1243. Renamed the new ckucon.c to ckucns.c (UNIX CONNECT with select()) and changed
  1244. the makefile to reference it only for Kerberos builds.  Restored the original
  1245. ckucon.c for non-Kerberos builds.  It would have been better to combine them,
  1246. but the structures are radically different.  So this task is tabled until and
  1247. unless it becomes an issue with real users.  ckucon.c, ckucns.c, makefile,
  1248. 8 Mar 98.
  1249. Noticed the maximum number of macros was only 256.  Increased this to 4K for
  1250. BIGBUFOK builds.  ckuusr.h, 8 Mar 98.
  1251. A user reported that "remote who > file" did not work.  The actual problem was
  1252. that redirection was never implemented for short-form REMOTE command replies.
  1253. Note: this was a bit tricky because a line terminator needed to be added to
  1254. the end -- it's too hard to explain, but it required adding a new character
  1255. output function zputfil(), that does exactly what putfil() does, but that has
  1256. a different name.  To see why, look for references to "putfil" in decode().
  1257. Fixed in ckcpro.w, ckcker.h, ckcfns.c, 10 Mar 98.
  1258. Merged Jeff's changes for "set net type { command, dll, ssh }" - K95 only for
  1259. now.  Note: I had to make a change to krbtel.c to indicate that Kerberos 4 was
  1260. *not* available in UNIX.  11 Mar 98.
  1261. Fixed up status messages in netopen().  ckcnet.c, 12 Mar 98.
  1262. Added code to allow the Kerberized version of C-Kermit to use block i/o on a
  1263. non-authenticated connection, so that the 99% of people who are not using
  1264. authentication or encryption won't be penalized because it is supported in the
  1265. binary.  ckutio.c, ckucns.c, 12 Mar 98.
  1266. Started to try to separate input and output communications file descriptors.
  1267. Eventually I gave up -- I don't think there's a prayer of doing this, at least
  1268. not in UNIX, when you look at all the manipulations we do on them -- hundreds
  1269. and hundreds of ioctl's (fcntl's, tcsattr's, etc) to change modes, duplicate
  1270. them, close/open them, etc etc.  Doing all this to *two* file descriptors in
  1271. lockstep without having to worry about which operations are legal on input vs
  1272. output descriptors in which releases of which OS's, not to mention opening up
  1273. timing windows or tickling peculariarities in underlying drivers or kernels,
  1274. is too much to expect.  12 Mar 98.
  1275. Added support for net i/o from lower fork thru pipes within #ifdef NETCMD:
  1276.  . ttopen() starts the command & opens the pipes, sets ttpipe flag.
  1277.  . ttclos() kills fork if active, closes pipes if open, unsets flag.
  1278.  . tthang() calls ttclos() if flag set.
  1279.  . ttvt/ttpkt/ttres: does nothing if flag is set.
  1280.  . ttsetflow(), tthflow() - ditto
  1281.  . ttsspd(), ttgspd() - ditto.
  1282.  . ttsnd[l]b() -- send a NUL if flag set.
  1283.  . ttgmdm() -- returns -1 if flag set.
  1284.  . myfillbuf(), ttxin(), ttinl(), ttinc() -- read from pipe if flag set.
  1285.  . ttol(), ttoc() -- write to pipe if flag set.
  1286.  . ttchk() - checks pipe if flag set.
  1287.  . ttlock() & friends are never called.
  1288.  . ttpeek, ttpushback, ttflux... - unaffected.
  1289. ckutio.c, ckucon.c, ckucns.c, ckuus5.c, 13 Mar 98.
  1290. Builds and works OK with NETCMD not defined.
  1291. Compiles OK (on SunOS) with NETCMD defined.
  1292. Works OK on normal connections.
  1293. Works OK on pipe connections:
  1294.  . Makes the connection.
  1295.  . CONNECT mode works right, no buffering delays, and it's fast.
  1296.  . File transfer works too, but rather slowly in the sending direction.
  1297.  . ttchk() always returns 0 on SunOS -- evidently FIONREAD doesn't work
  1298.    on pipes.  Slows down sliding-window sends.  I'll need to do something
  1299.    about this later.
  1300. Disabled if NOPUSH defined or nopush set.  ckcdeb.h, ckuus3.c, 13 Mar 98.
  1301. Added a brief preliminary section (2.7) on this to ckermit2.upd, but it needs
  1302. a lot of fleshing out with examples of ssh, ssl, etc.
  1303. Still need to make the command structure nicer.  SET NETWORK TYPE COMMAND
  1304. followed by SET HOST <command> is OK, but afterwards the network type is still
  1305. set to COMMAND, and so subsequent SET HOST commands probably won't work as
  1306. most people expect them to.  So I think it might be better to collapse this
  1307. into a PIPE command that combines the two, but does not affect the global
  1308. network type.  PIPE would be the general case, SSH could be a specific case
  1309. (with accompanying SET SSH command for configuration, etc).  None of this
  1310. is done yet.
  1311. Also, note that this feature has nothing to do with networks, yet it's only
  1312. available #ifdef NETCONN.  So this should be changed too.  Next week...
  1313. Got tired of wraparound during "make sunos.." so moved the common symbol
  1314. definitions from the makefile to ckcdeb.h.  13 Mar 98.
  1315. Got rid of the duplicate SET NETWORK keyword tables so now we only need to
  1316. add new network-type keywords in one place rather than two.  ckuus[r3].c,
  1317. 13 Mar 98.
  1318. Jeff discovered that binary-mode transfers with space parity didn't work any
  1319. more.  Fixed by making receipt of a request to do 8th bit prefixing when
  1320. parity is none *and* no parity has been detected cause the parity to be
  1321. switched to space.  ckcfn[s2].c, 16 Mar 98.
  1322. Various changes for BeBox, SRP, etc, and other updates from Jeff, including
  1323. a fix for "wait 0 <signal>" not bothering to test for signal.  Many modules,
  1324. 18 Mar 98.
  1325. Discovered that SET HOST did not parse switches for certain network types,
  1326. e.g. COMMAND.  Rearranged setlin() again so switches would be always be parsed
  1327. for SET HOST and SET PORT (LINE), removing about 200 lines of code in the
  1328. process.  Needs lots of testing.  ckuus7.c, 18 Mar 98.
  1329. Added SET HOST /COMMAND.  This takes the place of SET NETWORK TYPE COMMAND
  1330. followed by SET HOST <name-of-command>, but in this case the network type is
  1331. not sticky (normal behavior for switches).  Thus, for example, you can:
  1332.   set host /command rlogin hosta
  1333. and then later "set host hostb", and it will work, using the previous global
  1334. network type (usually TCP/IP).  ckuusr.h, ckuus7.c, 18 Mar 98.
  1335. Added the PIPE command, equivalent to SET HOST /COMMAND /CONNECT.  ckuusr.h,
  1336. ckuusr.c, 18 Mar 98.
  1337. Changed cmfdb() to return -9 and print a message if it was about to return -6,
  1338. which should be internal to cmfdb().  ckucmd.c, 19 Mar 98.
  1339. Changed cmkey() to return -3 as it should if the user types CR and no other
  1340. characters were given and there was no default.  ckucmd.c, 19 Mar 98.
  1341. Fix from Jeff to SET TERM KEY <type> <CR>.  ckuus7.c, 19 Mar 98.
  1342. Added REMOTE SET FILE INCOMPLETE.  Previously this was available only as
  1343. REMOTE SET INCOMPLETE, now demoted to invisibility.  ckuus[37].c, 19 Mar 98.
  1344. Added -DNOCOTFMC to Linux makefile entries at the suggestion of Paul Kimoto.
  1345. Details in the Linux section of ckuker.bwr.  makefile, 19 Mar 98.
  1346. Added NOCOTFMC display to SHOW FEATURES.  ckuus5.c, 19 Mar 98.
  1347. Big revisions/updates to ckuker.bwr for Linux & elsewhere.  19 Mar 98.
  1348. Fixes from Jeff to parsing of Telnet authentication/etc negotiations.
  1349. ckcnet.c, 19 Mar 98.
  1350. In UNIX, "send /recursive foo" (foo not wild) did not work; it only sent the
  1351. foo file from the current directory, but then did not recurse.  Furthermore,
  1352. if no foo file was in the current directory, nothing was transferred, even if
  1353. one or more foo's were in subdirectories,   Fixed in traverse(), ckufio.c,
  1354. 19 Mar 98.  (Needs more testing, though...)
  1355. Minor changes from Jeff to ckcnet.c.  20 Mar 98.
  1356. Added missing mention of /RECURSIVE in HELP GET.  ckuus2.c, 21 Mar 98.
  1357. Discovered that not defining USE_MEMCPY on platforms where we pick up
  1358. prototypes for memcpy() from the header files (like string.h on the NeXT)
  1359. causes ANSI compilations to bomb.  Added USE_MEMCPY for NeXT, OSF/1, VMS,
  1360. AOS/VS.  ckcdeb.h, 21-22 Mar 98.
  1361. Moved the -Dblah CFLAGS that were common to all the Solaris makefile entries
  1362. to ckcdeb.h, similar to what was done for SunOS a few days ago.  ckcdeb.h,
  1363. 21 Mar 98.
  1364. Added new "xermit" target to UNIX makefile.  It's just like "wermit", but
  1365. uses ckucns (select() version of CONNECT module) rather than ckucon (fork()
  1366. version).  Changed sunos41 entry to use xermit target, tested it on serial,
  1367. TCP/IP, and pipe connections, works fine.  Tried it in several other places:
  1368.  Entry      Telnet   Serial    Pipe
  1369.   sunos41     OK       OK       OK
  1370.   hpux100     OK       OK       OK
  1371.   linux       OK       ??       OK
  1372.   solaris25   OK       ??       OK (but rlogin prints scary messages)
  1373. Left xermit in for SunOS, left the others as is.  makefile, 21 Mar 98.
  1374. Fixed a problem in ttinc(), timed MYREAD case, when it gets a NUL character
  1375. (as it would during rlogin initial connection) -- test for error was off by 1.
  1376. Diagnosed by Jeff.  21 Mar 98.
  1377. Discovered that v(errstring) evaluation in nvlook() was returning a pointer
  1378. to an automatic array, oops.  Made it static.  ckuus4.c, 22 Mar 98.
  1379. Added v(osrelease).  ckuusr.h, ckuus4.c, 22 Mar 98.
  1380. Changed v(osname) to return the same as v(platform) if CK_UTSNAME not
  1381. defined.  ckuus4.c, 22 Mar 98.
  1382. Changed sinix542 makefile target to not optimize ckcpro.c, since this was
  1383. taking several hours before I interrupted it...  makefile, 22 Mar 98.
  1384. --- Beta.02 ---
  1385. successful "xermit" tests:
  1386.   sunos 4.1
  1387.   unixware 1.1.2
  1388.   hpux 10.20
  1389. Minor changes to prototypes, etc.  ckuus[7x].c, ckcnet.h, ckcdeb.h,
  1390. 24 Mar 98.
  1391. Added SET HOST /PASSWORD:.  ckuusr.h, ckuus[r37x].c, 24 Mar 98.
  1392. Authentication material from Jeff. ckuus[347].c, ckutio.c, ckcnet.c, 25 Mar 98.
  1393. Added better ?-help message for SET TELNET ENCRYPTION.  ckuus3.c, 25 Mar 98.
  1394. Folded lines > 79 and removed trailing blanks from ckuath.c.  25 Mar 98.
  1395. Changed definitions of CX_xxx encryption types to use the ENCTYPE_xxx_xxx
  1396. ones if they are defined.  However, there is no ENCTYPE_blah for NONE, and we
  1397. can't use negative numbers for keyword values, so I chose 999.  ckcnet.h,
  1398. 25 Mar 98.
  1399. Removed various unportable constructions from ck_crp.c.  25 Mar 98.
  1400. Changed SET TELNET ENCRYPTION TYPE to get its keyword table dynamically.
  1401. ckuus3.c, 25 Mar 98.
  1402. ....
  1403. Added checking of LINES and COLUMNS to ttgwsiz() if ioctl() fails.  ckutio.c,
  1404. 25 Mar 98.
  1405. Added dgux54411i entry to makefile.  3 Apr 98.
  1406. Merged Jeff's changes, mostly a&e, plus: some updated help text, crypto
  1407. material in SHOW TELNET; moved "Server done" message until after all files are
  1408. closed to prevent overwriting of messages.  Also, fix one more "Transfer OK"
  1409. test in clsif() that could result in spurious OK result when not OK.  Many
  1410. modules, 3 Apr 98.
  1411. Removed the hidden TEST command so people can define macros called TEST as
  1412. shown in various docs.  ckuusr.c, 3 Apr 98.
  1413. Changed SET TELNET ENVIRONMENT DISP to DISPLAY (spelled out) to agree with
  1414. docs.  ckuus3.c, 3 Apr 98.
  1415. SHOW NET display was too long.  Gave it the askmore() treatment.  This was a
  1416. big job, since it calls a lot of subfunctions.  This askmore() business really
  1417. needs to be reworked.  We need a *portable* printf() replacement that takes
  1418. screen dimenensions into account.  Either that, or one that pipes its output
  1419. into an external program (like "more") (but that would not be portable) (but
  1420. UNIX users would still like it -- plus then you could redirect output of any
  1421. command to a file, etc).  ckuus[45].c, 4 Apr 98.
  1422. Changed ttopen() to not print "DNS lookup..." if it is not doing a DNS lookup.
  1423. ckcnet.c, 4 Apr 98.  But it almost always does, so this makes little
  1424. difference.
  1425. Added TERMINAL as a synonym for SET TERMINAL TYPE.  Familiar to UNIX users,
  1426. etc.  ckuusr.[ch], ckuus7.c, 4 Apr 98.
  1427. Added STATUS as a synonym for SHOW STATUS.  ckuusr.[ch], 4 Apr 98.
  1428. Added a second "personality" to the C-Kermit command line.  If C-Kermit is
  1429. stored as telnet (or telnet.exe), it parses a Telnet command line:
  1430.   telnet [ host [ port ] ]
  1431. I didn't bother with rlogin.  This works with the C-Kermit networks directory.
  1432. ckcmai.c, ckuus[4y].c, ckermit.ini, 4 Apr 98.
  1433. Added v(name), the name with which the program was invoked.  Used this to
  1434. bypass non-Telnet material in the initialization file for faster startup
  1435. (since we don't have options on the Telnet command line, e.g. to bypass the
  1436. initialization file).  ckuusr.h, ckuus4.c, ckermit.ini, 4 Apr 98.
  1437. Noticed that "telnet watsun 13" (i.e. to the "daytime" socket) has started to
  1438. misbehave again.  First, ttopen() is called two or three times for some
  1439. reason.  Second, ttvt() fails because the other side has already closed itself
  1440. before we can get around to reading the daytime string.  I thought I fixed
  1441. this a long time ago.  It needed more fixing.  In ckucon.c, the section that
  1442. handles ttvt() failures by hanging, closing, and reopening the connection
  1443. makes no sense at all for network connections, so now it is used only if
  1444. (!network).  Second, a loop-exit test was missing in the new CONNECT module.
  1445. ckucon.c, ckucns.c, 4 Apr 98.  NOTE: K95 has the same problem, needs checking.
  1446. Added ON and OFF as invisible synonyms for DISABLED and ENABLED in nabltab[],
  1447. since the book has some examples like this that wouldn't work otherwise.
  1448. ckuus7.c, 4 Apr 98.
  1449. Added command-line switch -0, meaning "be 100% transparent in CONNECT mode".
  1450. This is equivalant to a bunch of other commands, like eightbit, set flow none,
  1451. set term escape disabled, set term char transparent, set term autodownload
  1452. off, set term apc off, etc.  It probably could use some work.  Setting the
  1453. flow control to none might be a bit extreme, but currently there is no way to
  1454. say "don't allow software flow control, but do allow any kind of hardware
  1455. flow control."  ckuusy.c, 4 Apr 98.  Note: I did not add an interactive
  1456. command to do the same thing since that would beg the question of how to undo
  1457. it, which would not necessarily be easy.
  1458. Noticed that a quoted hyphen or opening brace at the end of a line was still
  1459. taken as a continuation character, which shouldn't happen; - should mean
  1460. to take the dash literally.  Fixed in getnct() and in gtword().  Ran all the
  1461. demo & hostmode scripts to make sure this didn't break anything.  ckcuus5.c,
  1462. ckucmd.c, 4 Apr 98.
  1463. Noticed that "echo foo - ; comment", when given at the prompt, did not treat
  1464. the "-" as a continuation character.  Fixed in gtword(), ckucmd.c, 4 Apr 98.
  1465. Got rid of SET HOST /PASSWORD: since it can't work.  ckuus7.c, 4 Apr 98.
  1466. PIPE connections worked only once; subsequent ones would not work.  Nor
  1467. would (say) CONNECT to a closed pipe connection.  Fixed in ttclos(), ckutio.c,
  1468. 4 Apr 98 (Don't set ttpipe to 0 -- leave it alone).
  1469. Added utsname info for VMS, obtained by assorted $GETSYI() calls.  Also added
  1470. a new variable, v(model), which returns the CPU model.  Works only for VMS,
  1471. returns null string elsewhere.  Note: K95 will need to define a unm_mod[]
  1472. buffer for this, and either fill it in or set it to the null string.
  1473. ckuusr.h, ckuus4.c, ck[uv]tio.c, 5 Apr 98.
  1474. Added utsname info to SHOW FEATURES.  ckuus5.c, 5 Apr 98.
  1475. Added Stanford copyright to main copyright notice shown by VERSION command
  1476. if SRP included.  ckcmai.c, 5 Apr 98.
  1477. In Beta.02, routine tn_sb() broke the HP-UX 7.0 optimizer.  Changed all HP-UX
  1478. 7.0 entries to not optimize ckcnet.c.  makefile, 5 Apr 98.
  1479. I had a report that v(filename) did not work when sending, but I don't see
  1480. a problem, in either remote or local mode.
  1481. C-Kermit or K95 server failed to send any files when sent "GET *" -- oops.  It
  1482. looks like something I broke when adding /CALIBRATE back in October; I wonder
  1483. why nobody noticed until Jeff did a couple days ago.  Good thing we actually
  1484. use this software ourselves...  Fixed in fnlist(), ckcfns.c, 5 Apr 98.
  1485. If C-Kermit was sending a file and the transfer was interrupted with Ctrl-C,
  1486. then a subsequent SEND or RESEND would fail to update the Estimated Time Left
  1487. and Transfer Rate fields of the fullscreen file transfer display because the
  1488. time variables were not reset by the Ctrl-C handler.  Fixed in ftreset(),
  1489. ckuusx.c, 5 Apr 98.
  1490. Changed -I switch to also "set flow none" (except on VMS), since not doing so
  1491. makes for Xoff deadlocks.  This is a bit risky, but I think it's less risky
  1492. than not doing it.  ckuusy.c, 5 Apr 98.
  1493. Added 877 and 866 to list of toll-free area codes for the NANP.  877 goes live
  1494. today; 866 is next, probably within a year or two.  ckuus3.c, 5 Apr 98.
  1495. If the connection is lost during file transfer, the file-transfer display
  1496. message "FAILED: Connection lost" is properly displayed, but then immediately
  1497. overwritten by "Transfer interrupted", a less specific reason.  This was
  1498. because we never sent an Error packet, since there was no longer a connection
  1499. to send it on.  Fixed by pretending to send an E packet by setting epktsent=1
  1500. in spack() when it prints the "FAILED: Connection lost" message, to prevent
  1501. clsif() from printing any subsequent messages, and copying the "Connection
  1502. lost" message to the file-transfer error message buffer so it could be
  1503. accessed afterwards by v(xfermsg).  ckcfn[23].c, 5 Apr 98.
  1504. Remove OLD_VMS #includes for GFTIMER; they didn't work, and we're not using
  1505. GFTIMER in OLD_VMS anyway.  From Lucas Hart.  ckvtio.c, 5 Apr 98.
  1506. Various last-minute adjustments to copyright notices, etc.  ckcmai.c,
  1507. ckuus5.c, 6 Apr 98.
  1508. Addition of SRP-related makefile entries for Linux.  makefile, 6 Apr 98.
  1509. Add ".hex" and ".hqx" as text file types.  ckcmai.c, 6 Apr 98.
  1510. ---1.1.16--- (8 Apr 98)
  1511. Add -DKANJI for Linux ifndef NOCSETS.  ckcdeb.h, 10 Apr 98.
  1512. Fixed "Closing..." message (and call to ttclos()) in doexit() to make the
  1513. ttyfd != -1 test only #ifdef OS2 (not OS2ORUNIX).  Otherwise this path is
  1514. always taken in UNIX.  ckuusx.c, 10 Apr 98.
  1515. Suppose C-Kermit is sitting at its prompt and receives the command "kermit -x".
  1516. This almost certainly is the "autoserver" string from K95, or another copy of
  1517. C-Kermit.  The user has given a GET or REMOTE command without first putting
  1518. C-Kermit in server mode.  So far so good; the "kermit -x" command does the
  1519. trick.  But then after the transaction is finished, C-Kermit stays in server
  1520. mode, so when the user CONNECTs back, s/he gets "a blue screen".  Solution:
  1521. any protocol actions resulting from "kermit" commands at the prompt set the
  1522. justone flag, which tells the protocol to exit after just one transaction.
  1523. This way they get the command prompt back, as expected.  ckuusr.c, 10 Apr 98.
  1524. Put doftp() and doping() in #ifndef NOPUSH..#endif.  ckuusr.c, 10 Apr 98.
  1525. Allow for longer debug messages for tracking authentication problems.
  1526. ckuusx.c, 11 Apr 98.
  1527. Updated sv68r3v6 and sv88r40 makefile entries from Gerry Belanger at
  1528. Cognitronics, since GFTIMER broke both of them, and REDIRECT broke the
  1529. former.  makefile, 11 Apr 98.
  1530. Merged in Jeff's recent changes, mainly (1) addition of XMODEM-CRC as a
  1531. protocol type, and (2) make sure INPUT sets v(instatus) correctly upon
  1532. failure due to lost connection.  Also, remove auto-upload strings for XMODEM
  1533. and YMODEM because their echoes cause confusion about the checksum type, etc,
  1534. e.g. if the filename contains an uppercase C.  Many modules, 17 Apr 98.
  1535. Merged IBM AIX X.25 support from Stephen Riehm, pc-plus, in Germany.  Most
  1536. modules.  18 Apr 98.  This still needs to be tested to ensure it didn't break
  1537. anything, especially Sun X.25, and to document it.
  1538. Added support for ttylock()/ttylocked()/ttyunlock() via #ifdef USETTYLOCK,
  1539. which is defined in ckcdeb.h for IBM AIX 3.1 and later.  This is supposed to
  1540. prevent confusion about the name, location, contents, and format of the UUCP
  1541. lockfile.  ckcdeb.h, ckutio.c, ckuus5.c, 19 Apr 98.
  1542. Built on an AIX 4.1 system; it compiles and links without complaint, but I
  1543. can't test it because that system has no serial devices.  20 Apr 98.
  1544. SET HOST commands weren't making it into the command recall buffer.  Fixed
  1545. (I think -- at least I can't make it happen any more) in setlin(), ckuus7.c,
  1546. 20 Apr 98.
  1547. Changed ttopen() to always call perror() to print error message when open()
  1548. fails.  Also added perror() calls to ttunlck() to give informative messages
  1549. upon failure to delete lockfiles.  ckutio.c, 21 Apr 98.
  1550. "help ?" incorrectly said "Or the name of a macro..." at the end of the
  1551. keyword list.  Fixed in ckucmd.c, 21 Apr 98.
  1552. Changed ttrpid() to not depend on hardwired definition for format of lockfile,
  1553. but rather to check its size and then treat it as binary if 4 bytes or less,
  1554. and as a string if longer than 4 bytes.  Tested successfully with string pids.
  1555. ckutio.c, 21 Apr 98.
  1556. Changed ttunlck() to not try to remove the lockfile if the pid it contains is
  1557. not ours, e.g. in case some other process has seized control of the device.
  1558. ckutio.c, 21 Apr 98.
  1559. Added a couple checks against dereferencing NULL data pointer, which can
  1560. evidently happen if C-Kermit is started with the -J command-line option and
  1561. then Ctrl-C'd at a certain critical point.  ckcfns.c, 21 Apr 98.
  1562. Added code to make INPUT 0 xxx behave as advertised: it should check the
  1563. only the characters that have arrived but have not yet been read for the
  1564. search string, and succeed or fail immediately depending on whether a match
  1565. was found.  ckuus4.c, 21 Apr 98.
  1566. Added 877 and 866 to default list of toll-free area codes for country code 1
  1567. (again -- I did this before, but in the wrong place).  ckudia.c, 22 Apr 98.
  1568. Discovered that an optimization I added to ckucns.c to avoid unnecessary calls
  1569. to chkaes() was bad -- symptom: as soon as the first escape sequence was
  1570. received, C-Kermit would send an ESC to the terminal before each character
  1571. from then on.  Removed the optimizations, went back to calling chkaes() for
  1572. every incoming character.  ckucns.c, 23 Apr 98.
  1573. Got rid of some confusing and dangerous ifdefs in VMS sysinit(); now we get
  1574. the hardware & OS version consistently on VAX and Alpha.  ckvtio.c, 23 Apr 98.
  1575. Fixed various bad declarations.  ckuus5.c, ...
  1576. Added OSF/1 and SCO 3.2v5.04 to the systems where CK_UTSNAME can be safely
  1577. defined.  ckcdeb.h, 23 Apr 98.  (Also tried NeXT, but it's not allowed.)
  1578. ---Beta.03---
  1579. Removed an unreachable return() statement from the end of tn_doop().
  1580. Jeff, ckcnet.c,1 May 98.
  1581. Fixed fsplit() return value -- it was counting too many words.
  1582. Jeff, ckuus4.c, 1 May 98.
  1583. Fixed broken SET TERMINAL ESCAPE option synonyms.  Jeff, ckuus7.c, 1 May 98.
  1584. Added -DNOGFTIMER to hpux90mot (HP-UX 9.0 on Motorola 680x0), since this
  1585. evidently doesn't work.  If somebody wants to try fixing it, be my guest.
  1586. makefile, 2 May 98.
  1587. Changed Elapsed Time display in STATISTICS command to show hh:mm:ss as well
  1588. as the total number of seconds.  ckuus4.c, 2 May 98.
  1589. Added v(model) for HP-UX, works by running the HP-UX "model" command and
  1590. capturing its output into a cache (there is no API for this); subsequent
  1591. references read from the cache.  ckuus4.c, 2 May 98.
  1592. Moved the NEEDSELECTDEFS section from ckcnet.h to ckcdeb.h to allow non-TCP
  1593. builds to get these definitions, e.g. when needed for the new select()-based
  1594. CONNECT module.  This was necessary at least for HP-UX 6.5.  Added hpux65x
  1595. target for HP-UX 6.5 that specifies the xermit target and includes
  1596. -DNEEDSELECTDEFS.  ckcnet.h, ckcdeb.h, makefile, 2 May 98.
  1597. Peter E reported that Beta.03 no longer removed its lockfiles in HP-UX.  Since
  1598. my HP workstation drowned in the recent flood, I could not check this myself;
  1599. it doesn't happen on non-HP platforms, but they use different code.  I went
  1600. through the code, consolidated the HP and non-HP parts as much as possible,
  1601. added debugging statements, corrected some errors, and satisfied myself that
  1602. it works fine on non-HP platforms:
  1603.  . If the device is not in use, the appropriate lockfile is created and
  1604.    then destroyed when it is closed.
  1605.  . If the device is in use by an active process (Kermit or cu), Kermit refuses
  1606.    to open it, and displays the pid of the owning process.
  1607.  . If there is a lockfile for the device, but it contains a pid that does
  1608.    not correspond to an active process, C-Kermit removes the stale lockfile
  1609.    (printing a message) and opens the device.
  1610. Later I found an HP-UX 10.20 workstation that had an unprotected serial port
  1611. and lockfile directory -- all the above tests worked fine, except that cu was
  1612. not installed so I could only verify that Kermit interlocked with itself, and
  1613. that 4-byte integer pids were written and read OK.  ckutio.c, 2 May 98.
  1614. Made "x" a legal abbreviation for "xmodem" in "set protocol" (because of
  1615. "xmodem-crc".  ckuus3.c, 2 May 98.
  1616. Discovered that the code to check that RECEIVE was given an as-name for
  1617. XMODEM protocol was not in the right place.  Moved it.  ckuus6.c, 2 May 98.
  1618. The following sequence did not work with XMODEM:
  1619.   define %a foo
  1620.   set protocol xmodem
  1621.   receive %a
  1622. Fixed in doxget(), ckuus6.c, 2 May 98.
  1623. I broke SunLink X.25 compilation in Beta.03.  Fixed in ckuus4.c, 2 May 98.
  1624. PIPE command didn't allow its argument to be braced.  Fixed in setlin(),
  1625. ckuus7.c, 3 May 98.
  1626. Plugged a couple of out-of-bounds array references noticed by DEC C 5.7 and
  1627. reported by John Santos.  ckv[tf]io.c, 3 May 98.
  1628. Added #ifdefs to [rg]ftimer() for System V/88 on Motorola 88000 from Gerry
  1629. Belanger at Cognitronics.  ckutio.c, 3 May 98.
  1630. ---Beta.04---
  1631. Ric Anderson reported a place where ttchkpid() could exit without returning
  1632. a value.  Fixed in ckutio.c, 4 May 98.
  1633. Finally discovered the cause of persistent reports that uucp lockfiles were
  1634. not being removed: a test of ttchk()'s return value in doclean() would fail if
  1635. the line had never been used, and so ttclos() would not be called, which was
  1636. just plain wrong: "set line /dev/xxx, exit" would leave the lockfile behind.
  1637. (Thanks to Peter Eichhorn for narrowing down how to reproduce it.)
  1638. ckuusx.c, 4 May 98.
  1639. In tracking down the previous problem, I discovered the following: in HP-UX,
  1640. if the "set line" device name starts with "cu", we also create a lockfile for
  1641. the corresponding "ttyd" device, even if that device does not exist.  This is
  1642. normally OK, since both lockiles are removed by ttunlck().  However, when a
  1643. stale "cu"... lockfile is found (and removed), C-Kermit did not remove the
  1644. corresponding "ttyd"... lockfile if the ttyd device did not exist.  So I
  1645. changed ttlock() to create the ttyd lockfile only if the ttyd device exists.
  1646. ckutio.c, 4 May 98.
  1647. Fixed a reference to an uninitialized variable in ttopen(), detected by DECC
  1648. 5.8.  ckutio.c, 4 May 98.
  1649. Filled in v(model) for Digital UNIX on advice from DEC, and added a symbol,
  1650. OSF50, and a designer banner for Digital UNIX 5.0, which will be released
  1651. soon.  ckcdeb.h, ckuver.h, ckuus4.c, makefile, 4 May 98.
  1652. Fixed v(model) to return value of unm_mch[] in preference to nothing at all.
  1653. ckuus4.c, 4 May 98.
  1654. Removed -DNOGFTIMER from hpux90mot entry, since reportedly Beta.04 works fine
  1655. there.  makefile, 4 May 98.
  1656. Omitted listing of unm_mod at beginning of debug log if not filled in, which
  1657. it won't be except in VMS or if v(model) has previously been referenced.
  1658. ckuus4.c, 4 May 98.
  1659. Updated AOS/VS text & binary filetype list.  ckcmai.c, 4 May 98.
  1660. Put an unguarded reference to "nopush" within #ifdef NOPUSH..#endif.
  1661. setlin(), ckuus7.c, 4 May 98.
  1662. Moved zxcmd() and zclosf() inside of #ifdef NOPUSH..#endif
  1663. syscmd() was not properly #ifdef'd for NOPUSH.  Fixed in ckcfns.c, 4 May 98.
  1664. Ditto for zshcmd().  ckufio.c, 4 May 98.
  1665. References to doftp() and doping() were not ifdef'd for NOPUSH.  Fixed in
  1666. ckuusr.c, 4 May 98.
  1667. Added a new compile-time option, NOTIMESTAMP, to disable all code related
  1668. to file timestamps, and employed it accordingly in ckufio.c.  4 May 98.
  1669. Added a banner for the AS/400 to ckuver.h.  You never know...  4 May 98.
  1670. Fix for hpux90mot makefile entry from Peter E.  makefile, 5 May 98.
  1671. Commented out "Alias => xxx" display.  ttopen(), ckcnet.c, 5 May 98.
  1672. Various #ifdef fiddling for AT&T 3Bx's.  cku[tf]io.c, ckcdeb.h, 5 May 98.
  1673. Final corrected makefile entries for AT&T 7300 that work, with help from
  1674. Peter Mauzey at Bell Labs.  makefile, 6 May 98.
  1675. Added banners for Ultrix 4.3, 4.4, 4.5.  ckuver.h, 6 May 98.
  1676. Made new SET MODEM TYPE keywords for USR and Megahertz that more obviously
  1677. correspond with the actual models, via synonyms, invisible abbreviations, etc,
  1678. without invalidating previous names.  ckudia.c, 7 May 98.
  1679. Made SET / SHOW { STREAMING, RELIABLE, CLEARCHANNEL } visible keywords.
  1680. ckuusr.c, 7 May 98.
  1681. Improved HELP SET [ TERMINAL ] ESCAPE messages.  ckuus2.c, 7 May 98.
  1682. VMS fixes from Lucas Hart, 7 May 98:
  1683.  . More allowances for <xxx> directory-name format: ckcfn3.c.
  1684.  . Improvements in hardware-name getting: ckvtio.c.
  1685.  . Enabling reverse DNS lookup for UCX (but not old UCX): ckcnet.c.
  1686.  . Improved isdir(), relative directories for labeled transfers,
  1687.    Fortran CC handling fixed to handle 0-length records and overprinting,
  1688.    etc: ckvfio.c.
  1689. Made MKDIR print a message (but still succeed) if it is told to create a
  1690. directory that already exists.  ckuusr.c, 7 May 98.
  1691. Added cross-references to SHOW PROTOCOL.  ckuus4.c, 7 May 98.
  1692. Added missing switches to HELP SEND text, plus cross-refs, and fixed text
  1693. for SEND /PATHNAMES:xxx.  ckuus2.c, 7 May 98.
  1694. UNIX nzltor() was correctly stripping ./ or ../ from the beginning of a local
  1695. filename before sending it to the remote, but only the first occurrence.
  1696. Fixed it to strip all occurrences from the beginning of the pathname.
  1697. ckufio.c, 7 May 98.
  1698. ---Beta.05---
  1699. Added some minor source-code corrections to ckucon.c and ckcnet.c affecting
  1700. only IBM AIXLink/X.25 builds, from Stephen Riehm.  15 May 98.
  1701. From Jeff:
  1702.  . Don't always set success for REMOTE commands that get a short form reply.
  1703.  . Increase atom buffer length.
  1704.  . Minor correction to UNIX ttol() when encrypting.
  1705.  . Prevent spurious parse errors from cmnum() within cmfdb().
  1706.  . Added zgetfs() to get a file's size (regardless of accessibility).
  1707.  . Make v(return) show END <n> value.
  1708.  . Fix fsplit() not to skip final word.
  1709.  . Fix mixup with RESEND/REGET versus filename patterns.
  1710.  . Corrections to (REMOTE) DIRECTORY command using zgetfs().
  1711.  . Fixes to LOOKUP, DIAL, and PDIAL.
  1712.  . Various networking fixes regarding blocking/select/etc vs streaming.
  1713.  . New SHOW TERM command for K95.
  1714. Added fcvtdate(date) to convert free-format date and/or time to standard
  1715. format.  This required pulling conversion code out of cmdate() into a separate
  1716. routine.  ckuusr.h, ckuus4.c, ckucmd.c, 11 Jun 98.
  1717. Added zjdate() for UNIX, returns julian date yyyyddd.  ckufio.c, 11 Jun 98.
  1718. Needs to be added for K95, VMS, AOS/VS, ...  In UNIX we get it simply by
  1719. calling localtime().  ZJDATE is defined in ckcdeb.h for each platform that
  1720. has this feature (so far just UNIX).  (Note: we could also do this in a system
  1721. independent way, algorithmically -- maybe later.)
  1722. Added fjdate(date), prints Julian date from given free-format date, or for
  1723. today if no arg.  Within #ifdef ZJDATE.  ckuusr.h, ckuus4.c, ckucmd.c,
  1724. 11 Jun 98.
  1725. Added ckdate() to return the current date/time in standard yyyymmdd_hh:mm:ss
  1726. format.  This now supplies the defaults for the new date functions (when
  1727. called with no arg) and for the DATE command (next item).  ckuus4.c, 12 Jun 98.
  1728. Changed DATE command to take an optional free-format date/time argument, and
  1729. then convert it to standard format and print it.  This provides a quick
  1730. pre-check on date formats.  ckuusr.c, ckucmd.c, 12 Jun 98.
  1731. Added help text for the new functions and DATE command.  ckuus2.c, 12 Jun 98.
  1732. Removed extraneous n from end of all hmsg() calls, which were causing
  1733. unnecessary double blank lines.  ckuus2.c, 12 Jun 98.
  1734. Fixed att3bxc makefile entry to spell NONAWS right.  makefile, 12 Jun 98.
  1735. Added brace-stripping to SET TERM IDLE-SEND.  ckuus7.c, 12 Jun 98.
  1736. Changed STATISTICS to round hh:mm:ss to nearest second when floating point
  1737. is used.  ckuus4.c, 12 Jun 98.
  1738. Same deal for Elapsed time in the file transfer display.  ckuusx.c, 12 Jun 98.
  1739. Added "*.doc" to binary patterns -- Microsoft wins.  It's better to transfer
  1740. a plain-text doc file in binary mode than to transfer a Word document in text
  1741. mode (except with IBM mainframes!).  Users can, of course, always change this.
  1742. ckcmai.c, 12 Jun 98.
  1743. Suppose "oof*" matches one filename, which happens to be a directory (say,
  1744. "oofa").  Then "cd oof*" would fail, but would print "oofa - not a directory",
  1745. even though "oofa" is a directory.  Fixed in cmifi2() by making a last-minute
  1746. check for directoryness after calling zxpand.  ckucmd.c, 12 Jun 98.
  1747. A subtle problem, reported by Morten Knudsen in Norway:
  1748.   set count 4
  1749.   :back
  1750.   echo Jo!     ; (Norsk for Yo)
  1751.   input 1 OK
  1752.   xif fail { xif count { goto back } }
  1753. would keep going forever because COUNT was not being decremented.  Diagnosis:
  1754. since XIF is really a macro, it has its own COUNT variable on the stack.  When
  1755. the XIF was finished, the stack would be restored and the old COUNT would come
  1756. back -- thus it would never change.  Cure: Although XIF, FOR, WHILE, and SWITCH
  1757. are implemented as macros, this is supposed to be invisible to the user.  The
  1758. _GETARGS and _PUTARGS routines are used to fix up the stack before and after
  1759. use.  _PUTARGS, however, failed to restore the "stackable" variables: COUNT,
  1760. INPUT TIMEOUT, INPUT CASE, TAKE ERROR, and MACRO ERROR.  Fixed in dogta(),
  1761. ckuus6.c, 12 Jun 98.
  1762. So this fix takes care of:
  1763.   set count 6
  1764.   for %i 1 3 1 { if count echo v(count) }
  1765.   echo count = v(count)
  1766. Previously it would say "count = 6" after exiting the loop; now it says
  1767. "count = 3".  However, it still does not fix Morten's script.  A further fault
  1768. was in GOTO, which takes an abnormal exit from XIF (and FOR, WHILE, and
  1769. SWITCH), thus bypassing their normal exit sequence (including the call to the
  1770. now-fixed dogta()).  So I added code to dogoto() to do the right thing when
  1771. called from within XIF, FOR, WHILE, or SWITCH.  ckuus6.c, 12 Jun 98.
  1772. Added three trivial commands useful in debugging scripts:
  1773.   ASSERT <condition> - Sets SUCCESS / FAILURE according to <condition>.
  1774.   FAIL               - Always fails (same as "assert false").
  1775.   SUCCEED            - Always succeeds (same as "assert true").
  1776. ckuusr.h, ckuusr.c, ckuus2.c, 12 Jun 98.
  1777. By popular demand, put a SIGHUP handler into the UNIX version, which simply
  1778. sets backgrd = 1, makes a debug log entry (if the debug log was open) and then
  1779. calls doexit(), which in turn flushes and closes all logs and other files
  1780. (shouldn't be necessary) and resets terminal modes, etc, and _exits.  Tested
  1781. by sending kill -1, works, seems harmless enough.  ckutio.c, 12 Jun 98.
  1782. When f(r)index() was given a non-numeric start position, it printed the wrong
  1783. error message.  Fixed in ckuus4.c, 14 Jun 98.
  1784. Changed the LOOKUP command to accept phone numbers as well as directory entry
  1785. names.  If given a literal-format phone number, it gives it right back.  If
  1786. given a portable-format phone number, it converts it for dialing from the
  1787. current location and prints the result.  ckuus6.c, 14 Jun 98.
  1788. Added fdialvalue(xxx) which returns the dial string that would actually be
  1789. used when given the phone number xxx.  ckuusr.h, ckuus4.c, 14 Jun 98.
  1790. Added v(pdialsuffix) and v(dialtype).  Didn't have time to test very much.
  1791. ckuusr.h, ckuus[46].c, 14 Jun 98.
  1792. Changed v(pdialsuffix) to v(dialsuffix) -- might as well set it for every
  1793. phone call.  Makes testing easier too.  ckuus4.c, 15 Jun 98.
  1794. Changed fdialvalue() to fdialconvert().  ckuus4.c, 15 Jun 98.
  1795. Cleaned up HELP FUNC messages for recent functions.  ckuus2.c, 15 Jun 98.
  1796. Renamed all text files to *.txt to fit Microsoft associations:
  1797.   ckermit2.upd => ckermit2.txt
  1798.   ckaaaa.hlp   => ckaaaa.txt
  1799.   ckc193.upd   => ckc193.txt
  1800.   ckuins.doc   => ckuins.txt
  1801.   ckvins.doc   => ckvins.txt
  1802.   ckermit.bwr  => ckcbwr.txt
  1803.   ckuker.bwr   => ckubwr.txt
  1804.   ckvker.bwr   => ckvbwr.txt
  1805.   ckcplm.doc   => ckcplm.txt
  1806.   ckccfg.doc   => ckccfg.txt
  1807. etc.  15 Jun 98.
  1808. There is no protocol for REGET /DELETE or REGET /RECURSIVE, yet these commands
  1809. can be given to the client.  Since no protocol is defined, the result is not
  1810. what the user expects.  For now, code has been added to prevent the client
  1811. from accepting these combinations.  Before allowing these combinations, I need
  1812. to do for the protocol what switches did for the command parser -- allow many
  1813. combinations of options, rather than inventing new top-level command words for
  1814. every conceivable combination.  The result will be an XGET (Extended GET)
  1815. packet that has distinct Options and Filespec fields.  doxget(), ckuus6.c,
  1816. 15 Jun 98.
  1817. SEND /RECOVER (RESEND) refused to work if SET FILE TYPE was not BINARY.  But
  1818. this was unreasonable when FILE PATTERNS were ON, since the file to be sent
  1819. might well be recognized as binary when Kermit gets to it later.  So the
  1820. offending check was removed from doxsend().  ckuusr.c, 15 Jun 98.
  1821. REGET (GET /RECOVER) did the same thing.  Normally, the client's transfer mode
  1822. controls the server's.  But if the server is doing per-file text/binary mode
  1823. switching because of filename patterns or record formats, this takes
  1824. precedence, and in that case the command-time check prevents an operation that
  1825. would have worked otherwise.  BUT WE HAVE NO WAY OF KNOWING whether the server
  1826. will do automatic mode switching, do we?  So if our current transfer mode is
  1827. text, we can (a) automatically change it to binary, or (b) leave as text and
  1828. hope that the transfer will switch to binary when the partially transferred
  1829. file is encountered.  (a) is bad since it might allow a broken text-mode
  1830. transfer to be resumed in binary mode, thus corrupting the file.  (b) would be
  1831. bad if no other checks were made, but checks have been added in the protocol
  1832. to prevent recovery in text mode on a per-file basis (Jeff's changes from
  1833. above).  So the parse-time check is now omitted.  doxget(), ckuus6.c,
  1834. 15 Jun 98.
  1835. Tested by having the server download part of a zip file, then telling it to:
  1836.   SET FILE PATTERNS OFF
  1837.   SET XFER MODE MANUAL
  1838.   SET FILE TYPE TEXT
  1839.   SERVER
  1840. and then telling the client to REGET the zip file.  The server says FAILURE:
  1841. Recovery attempted in TEXT mode: xxx, where xxx is the filename.
  1842. Somehow the recursive flag was getting stuck on in K95 when receiving files.
  1843. Changed ftreset() to always set recursive to 0, since this can never be a
  1844. global mode.  By the way, this had *all* sorts of odd effects, affecting the
  1845. DIRECTORY, DELETE, and many other file-oriented commands.  ckuusx.c, 15 Jun 98.
  1846. Changed ckdate() to return the same format as fdate(), etc -- space between
  1847. date and time, rather than underscore.  ckuus4.c, 16 Jun 98.
  1848. Added .vxd to binary patterns.  ckcmai.c, 16 Jun 98.
  1849. Changed edit number from 193 to 194.  ckcmai.c, 18 Jun 98.
  1850. DIAL would no longer dial if given a phone number rather than a dialing
  1851. directory entry name, due to LOOKUP changes made on 14 June.  Fixed in
  1852. ckuus6.c, 20 Jun 98.
  1853. ---1.1.17---
  1854. Changes from Jeff:
  1855.  . Fix for DATE bug
  1856.  . Various K95-specific bits
  1857.  . Upped edit numbers
  1858.  . IKS changes
  1859.  . ttinc() non-MYREAD Telnet case was returning the wrong character
  1860. Added v(lockpid), UNIX only.  Contains the PID from the UUCP lockfile from
  1861. the most recent SET LINE command, if (a) the command failed because the line
  1862. was in use by another process, and (b) the PID was obtainable.  Otherwise
  1863. v(lockpid) has an empty value.  ckuusr.h, ckuus4.c, ckutio.c, 27 Jun 98.
  1864. Also v(blockcheck), and also make "set block 4" an invisible synonym for
  1865. "set block B" so the v(block) value could be used in SET BLOCK commands.
  1866. ckuusr.h, ckuus[34].c, 27 Jun 98.
  1867. More changes from Jeff for IKS.  Fixed some confusion in ckcnet.c.  28 Jun 98.
  1868. The VMS RESEND problem...
  1869.  . RESEND X.ZIP complains and fails if SET FILE TYPE not BINARY, even
  1870.    though it will be binary when it opens the file.  Fixed in doxsend(),
  1871.    ckuusr.c, 28 Jun 98.
  1872.  . RESEND /BINARY X.ZIP temporarily sets xfermode to BINARY (rather than AUTO)
  1873.    and this prevents rpar() from including the System ID in the S packet.
  1874.    There is no reason why the System ID should not always be sent.  Fixed in
  1875.    rpar(), ckcfns.c, 28 Jun 98.
  1876.  . VMS server fails to execute REGET unless it's already in binary mode.
  1877.    That's because the last-minute check for binary in sfile() was before
  1878.    the call to openi() rather than after, and in VMS, openi() (zopeni()
  1879.    really) has the final word on the transfer mode.  Fixed in ckcfn2.c,
  1880.    28 Jun 98.
  1881.  . When VMS C-K resends, it always sends the whole file again, except for
  1882.    the first byte.  This was the real problem...
  1883. I checked this with C-Kermit 6.0 to see if the same thing happened before all
  1884. the recent changes for odd-record-length files, etc.  Nope, it didn't.
  1885. Detailed comparison of the 6.0 and 6.1 code only turned up a lot of
  1886. SYS$RAB/FAB stuff I didn't understand.  Added lots of debugging statements to
  1887. see where we go wrong.  Hours later...  I found an "|" that should have been
  1888. an "&" in the code that was added to handled odd-record-length fixed-block
  1889. files.  So now RESEND in VMS is fixed, at least for even-record length files.
  1890. REGET too.  ckvfio.c, 28 Jun 98.
  1891. Added zgetfs() for VMS.  ckvfio.c, 28 Jun 98.
  1892. When (UNIX) C-Kermit got an autodownload and then returned to CONNECT mode
  1893. automatically, the terminal modes were messed up the first time we escape back
  1894. manually.  Fixed in doconect(), ckuus4.c, 28 Jun 98.
  1895. Added some debugging to try to track down a very strange problem in the OS-9
  1896. version, in which the pointer to the outbound packet buffer is NULL by the
  1897. time it reaches bgetpkt().  ckcfn[s3].c, 29 Jun 98.
  1898. Discovered that calling the system to get the Julian date is a LOT more
  1899. trouble than it's worth in most OS's except UNIX, so I moved zjdate() to
  1900. ckuus4.c and had it calculate the Julian date using old-fashioned arithmetic.
  1901. Now all C-Kermits have it.  ZJDATE symbol removed.  ckcdeb.h, ckuusr.h,
  1902. ckuus4.c, ckufio.c, 29 Jun 98.
  1903. Discovered that "blah" would be accepted as a valid date.  Bulletproofing
  1904. added to cmcvtdate().  ckucmd.c, 29 Jun 98.
  1905. Having written an algorithmic date-to-julian-date converter, it wasn't hard to
  1906. add a conversion in the other direction, so fj2date() converts a Julian date
  1907. to a regular date.  ckuusr.h, ckuus4.c, 30 Jun 98.  (I was tempted to also add
  1908. date/time arithmetic functions, but resisted -- they are on the list for
  1909. later.)
  1910. Got rid of bell sound after successful DIAL if SET QUIET ON.  ckuus6.c,
  1911. 30 Jun 98.
  1912. Supplied missing Microcom-AT "error-correction off" command.  ckudia.c,
  1913. 1 Jul 98.
  1914. Fix from Jeff for partial dialing.  ckuus6.c, 2 Jul 98.
  1915. One call to cmcvtdate() was overlooked in converting to 2-arg format, as
  1916. well as one of the prototypes.  ckucmd.[ch], 2 Jul 98, from Jeff.
  1917. Added information about new dialing rules in Italy and Spain to Section 2.1
  1918. of ckermit2.txt, 3 Jul 98.
  1919. Fixed HANGUP to include an implicit CLEAR DIAL-STATUS.  ckuusr.c, 3 Jul 98.
  1920. Added bulletproofing to encstr() and getpkt() similar to that added to
  1921. bgetpkt(), to catch null "data" pointer.  ckcfns.c, 3 Jul 98.
  1922. Added Telnet negotiation to ttinl() in the UNIX version.  I did not add it to
  1923. ttxin(), since, in the UNIX version, ttxin() is used only by the CONNECT
  1924. module, which handles Telnet negotiations itself (except there is also one
  1925. call to ttxin() from ckudia.c, which is called only for modem type "unknown",
  1926. and then only when dialing failed, an unlikely combination on a Telnet
  1927. connection).  ckutio.c, 3 Jul 98.  Here's the first Internet Kermit Service
  1928. dialog between a C-Kermit client and a C-Kermit server:
  1929.   TELNET SENT WILL TERMINAL-TYPE=24
  1930.   TELNET SENT WILL NEGOTIATE-ABOUT-WINDOW-SIZE=31
  1931.   TELNET SENT WILL NEGOTIATE-ABOUT-KERMIT-SERVER=45
  1932.   TELNET SENT DO NEGOTIATE-ABOUT-KERMIT-SERVER=45
  1933.   TELNET SENT DO SUPPRESS-GO-AHEAD=3
  1934.   TELNET RCVD DONT TERMINAL-TYPE=24
  1935.   TELNET SENT WONT TERMINAL-TYPE=24
  1936.   TELNET RCVD DONT NEGOTIATE-ABOUT-WINDOW-SIZE=31
  1937.   TELNET SENT WONT NEGOTIATE-ABOUT-WINDOW-SIZE=31
  1938.   TELNET RCVD DO NEGOTIATE-ABOUT-KERMIT-SERVER=45
  1939.   TELNET SENT SB NEGOTIATE-ABOUT-KERMIT-SERVER START-SERVER IAC SE=0
  1940.   TELNET RCVD WILL NEGOTIATE-ABOUT-KERMIT-SERVER=45
  1941.   TELNET RCVD WILL SUPPRESS-GO-AHEAD=3
  1942.   TELNET SENT DO SUPPRESS-GO-AHEAD=3
  1943.   TELNET SENT DO LOGOUT=18
  1944. After some research, discovered that yyyyddd is *not* a Julian date, but
  1945. rather a "day of year".  Changed fjdate() to fdayofyear() (but left
  1946. fjdate() as an invisible synonym, since we released K95 1.1.17 with it),
  1947. and fdoy() as another invisible synonym.  Changed fj2date() to
  1948. fdoy2date() (day of year to date).  ckuus4.c, 3 Jul 98.
  1949. Now, a *true* Julian date is the number of days since a fixed date in the
  1950. past, and this is more useful anyway, since normal arithmetic works on it.  By
  1951. definition, the fixed date is 1 Jan 4713 BCE, but that makes for big numbers,
  1952. so the more common form is the Modified Julian Date (MJD), which is the number