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

通讯/手机编程

开发平台:

Windows_Unix

  1. proper error message is printed if there is no match.  ckuus2.c, 25 Jun 99.
  2. Added x.xxMB (or GB) to DIR /HEADING summary.  26 Jun 99.
  3. Added /BYTE and /LINE switches to FILE SEEK, so now you can FSEEK to a
  4. particular line in a file.  ckuus7.c, 26 Jun 99.
  5. Added FILE COUNT / FCOUNT to return the number bytes or lines in an open file
  6. (without disturbing its current position).  ckuusr.[ch], ckuus7.c, 26 Jun 99.
  7. Added new functions & variables:
  8.  . f_line(chan) to return line number if known.
  9.  . v(filecount) to return extern int z_filcount.
  10.  . fleft() for convenience and symmetry with fright().
  11. ckuusr.h, ckuus[47].c, 26 Jun 99.
  12. Added /SIZE:n /LPAD:c /RPAD:c switches to FILE WRITE.  ckuus7.c, 26 Jun 99.
  13. Added f_ermsg(code).  ckuusr.h, ckcker.h, ckuus[47].c, 27 Jun 99.
  14. Added relative seeks: FSEEK { /LINE, /BYTE } <channel> {+,-}<number>.
  15. ckuus7.c, 27 Jun 99.
  16. Renamed FILE-related variables to v(f_xxx).  ckuus4.c, 27 Jun 99.
  17. Updated help text for FILE commands and functions.  ckuus2.c, 27 Jun 99.
  18. Checked Dale Dellutri's report about SET FLOW KEEP not working in VMS.
  19. Actually, it was working, but the order in which SET LINE/PORT/HOST and SET
  20. FLOW are given is now signicant, where it wasn't before.  27 Jun 99.
  21. Added TRACE [ { /ON, /OFF } ] { ASSIGNMENTS, COMMAND-LEVEL, ALL }.  When ON,
  22. this prints a message every time the value of any variable changes or the
  23. command level changes.  ckuusr.[ch], ckuus[256].c, 27 Jun 99.
  24. From Jeff: Fix to bogus rewind() call, fixes to SSL support & some ttclos()
  25. calls without args.  ckuus7.c, ckutio.c, 28 Jun 99.
  26. Added NOSTAT for VOS.  ckcdeb.h, 28 Jun 99.
  27. Added a quick & dirty adaptation of SET SERVER IDLE-TIMEOUT to non-K95 builds
  28. (K95 already had it).  It's quick & dirty because it can't coexist with SET
  29. SERVER TIMEOUT.  ckcmai.c, ckcfn2.c, ckcpro.w, ckuus[235].c, 28 Jun 99.
  30. Added RETURN value to TRACE ASSIGNMENTS.  ckuus6.c, 28 Jun 99.
  31. While looking at RETURN, discovered that it set success=1 when given a value,
  32. and success=0 when not given a value, which makes no sense.  Changed it not to
  33. mess with success.  ckuus6.c, 28 Jun 99.
  34. Added SET TRANSFER INTERRUPTION { ON, OFF }.  Refers to file-transfer
  35. interruption in local mode, as opposed to SET TRANSFER CANCELLATION, which
  36. refers to remote mode.  ckuusr.h, ckcmai.c, ckuus[234x].c, 28 Jun 99.
  37. From Jeff:
  38.  . Added ckgetfqhostname() to retrieve the fully qualified hostname
  39.    from a partial name.  This is done by performing a DNS lookup and
  40.    immediately performing a reverse lookup on the first IP address in the
  41.    list.
  42.  . Warning: if the function is called on an alias such as "cunix" the
  43.    IP address in the list when calling ckgetfqhostname() may not match
  44.    the IP address in the list when netopen() calls gethostbyname().
  45.    If the function is going to be used as a general call in setline()
  46.    then the result of this function must replace the hostname the user
  47.    typed in the parse buffer.  I have not made this change as I only need
  48.    it to check the realm of the host and we assume that all of hosts
  49.    sharing a common alias will have the same realm.  (although, I am sure
  50.    somebody will prove us wrong.)
  51.  . Added check for Ctrl-C in tn_wait().
  52. ckcnet.c ckuus7.c ckcnet.h ckctel.c, 29 Jun 99.
  53. Removed #ifdef CK_CURSES from around prototypes for ck_cls() and friends,
  54. since these are referenced in the code even when CK_CURSES is not defined,
  55. in which case dummies are provided.  ckuusr.h, 29 Jun 99.
  56. Peter E reported that if HP-UX C-Kermit was in server mode on a serial port
  57. which had been dialed in to, and the user hung up without sending BYE, and
  58. FINISH was disabled, that C-Kermit would go into a loop forever (tying up the
  59. port and, if the debug log was on, filling up the disk).  Diagnosis: (1) the
  60. read() in myfillbuf() SVORPOSIX case returned 0, and so myfillbuf() returned 0
  61. too; (2) mygetbuf(), which called myfillbuf(), returns -2 if myfillbuf()
  62. returns 0; (3) ttinl(), which calls mygetbuf() through the myread() macro,
  63. passes the -2 up to rpack(), which passes it up to input(); (4) input()
  64. interprets -2 (correctly) as "Ctrl-C was typed" and returns 'q' to proto();
  65. (5) proto() says "oh no you don't -- quitting is disabled" and goes back to
  66. its read loop, and (6) the process repeats forever.
  67. How to fix?  First, myfillbuf() should not return 0 if read() returns 0,
  68. because the device was conditioned to return at least 1 byte with (in the
  69. SVORPOSIX case) VMIN > 0, VTIME = 0, and O_NDELAY off.  That is, the read() is
  70. blocking and therefore a 0 return must indicate connection loss or other
  71. unrecoverable error, EVEN IF errno is 0 after the read (which it is in this
  72. case).  Therefore (at least SVORPOSIX) myfillbuf() should return -3
  73. (connection lost) if read() returns 0.  In the FIONBIO case, myfillbuf()
  74. should also never return 0.  And the same is true in the non-SVORPOSIX /
  75. non-FIOBIO case.  In every case the read() is blocking, so should never
  76. return 0.  So I made every instance of UNIX myfillbuf() return -3 if the read
  77. returns 0, except in the Kerberos, SSL, and other cases, which I'm not sure
  78. about.  ckutio.c, 29 Jun 99.
  79. Second, UNIX mygetbuf() had a mistake:
  80.   my_count = myfillbuf();
  81.   if (my_count <= 0) { my_count = 0; ...; return((my_count < 0) ? -3 : -2); }
  82. So it would never return -3 (except in the network case, which had a special
  83. check).  This was fixed by copying my_count to another variable (x), and then
  84. checking x in the return() clause.  ckutio.c, 29 Jun 99.
  85. Third, even when ttinl() returns -3 to rpack(), rpack() was changing it to
  86. -2 before passing back up if FINISH was disabled.  What a mess...  ckcfn2.c,
  87. 29 Jun 99.
  88. Fourth, now that -3 passed all the way up the line, what does input() do with
  89. it?  It treats -2 and -3 the same, translating them BOTH to (pseudo) packet
  90. type 'q' (lower case) so the protocol engine can't tell the difference.  So
  91. now we have to either (a) make a new pseudopacket type to indicate connection
  92. loss, or (b) manage yet another global flag.
  93. But wait, there already is one -- 'interrupted' is set by rpack() if ttinl()
  94. returns -2.  Therefore, whenever the input to the state machine is 'q', but
  95. interrupted == 0, we must have connection loss.  Or an idle timeout.  OK, so
  96. two flags...  The code to check these flags was added to the relevant <*>q
  97. cases in the protocol engine.  ckcpro.w, 29 Jun 99.
  98. That should do it...  But note that all this is necessary only when (a) read()
  99. returns 0 but does NOT set errno, AND (b) the client hanging up does cause a
  100. SIGHUP signal -- Kermit already catches both of those cases.  However, the
  101. logs show that (a) and (b) are indeed the case at Peter E's site.
  102. Dat Thuc Nguyen noticed that a closing bracket was not required on a
  103. single-line macro definition; e.g. "def xx { echo foo" was accepted and
  104. actually worked.  Of course ANYTHING should be accepted as a macro definition.
  105. But an error should occur when attempting to execute a malformed macro.  Fixed
  106. in dodef(), ckuus6.c, 29 Jun 99.
  107. Peter E confirms yesterday's changes (and SET SERVER IDLE-TIMEOUT) work OK
  108. on his HP-UX systems.  30 Jun 99.
  109. Moved UNIX SIGHUP arming from conint() to sysinit() so hangups can be caught
  110. earlier.  ckutio.c, 30 Jun 99.
  111. Fixed FILE COUNT to check return code from z_count().  ckuus7.c, 1 Jul 99.
  112. Added a makefile target for DG/UX 5.4R4.20.  makefile, ckuver.h, 5 Jul 99.
  113. FSEEK /LINE %c EOF followed FSEEK /LINE %c -1 failed because Kermit didn't
  114. know the current line number.  I changed FSEEK /LINE <channel> EOF to set the
  115. resulting line number.  ckuus7.c, 5 Jul 99.
  116. Added a new error code, FX_LNU = Current line number unknown, for use with
  117. relative line seeks, and changed z_getline() to return it.  ckuus7.c, 5 Jul 99.
  118. Changed FCLOSE ALL to not fail or print a message if no files were open.
  119. Changed FCLOSE ALL to fail if an open file could not be closed (but still
  120. close all the other ones that could be closed).  ckuus7.c, 5 Jul 99.
  121. Added /RELATIVE /ABSOLUTE switches to FILE SEEK, to force relative or absolute
  122. seeking, irrespective of the format of the number.  ckuus7.c, 5 Jul 99.
  123. Added /LIST and /NOLIST switches to FILE COUNT to force display or suppression
  124. of the count.  /QUIET is a synonym for /NOLIST.  ckuus7.c, 5 Jul 99.
  125. Added askmore() to FILE LIST.  ckuus7.c, 5 Jul 99.
  126. Updated HELP FILE texts and fixed HELP FILE COUNT, which was broken.
  127. ckuus2.c, 5 Jul 99.
  128. Improvements to method for getting local host name in K95 from Jeff.
  129. ckcnet.c 6 Jun 99.
  130. Added some minor speedups to FREAD /LINE, FSEEK /LINE, and FCOUNT /LINE.
  131. ckuus7.c, 7 Jun 99.
  132. There was no prohibition against seeking before the beginning of a file, which
  133. could lead to some interesting problems in script loops (e.g. to read a file's
  134. lines in reverse order).  Now it fails silently.  ckuus7.c, 7 Jun 99.
  135. From Jeff:
  136.   I have made the gethostbyname(NULL) call the default in getlocalipaddr().
  137.   I have added DNS SRV record lookups.  This is conditionally compiled with
  138.   CK_DNS_SRV.  If you do not want to compile using it define NO_DNS_SRV.  The
  139.   changes in ckuus7.c from port numbers to service strings is to allow the
  140.   DNS_SRV code to work by default.  I have made appropriate changes to
  141.   netopen() to ensure that each service will be translated to a port number
  142.   even if getservbyname() is not supported.
  143.   Now when you telnet / set host to (e.g.) watsun, the DNS SRV query is:
  144.     _telnet._tcp.watsun
  145.   If a response arrives we use the first host and ignore the rest (it was too
  146.   much work to allow a list of host:ports to be specified).
  147.   I did not need to add any libraries to allow compilation on watsun.  Linux
  148.   requires -lresolv for the res_search and dn_expand functions.
  149. ckcdeb.h ckcnet.h ckcnet.c ckuus7.c ckuath.c makefile, 11 Jul 99.
  150.   Should there be a SET command to control whether this code is used?
  151.   Time will tell...
  152. Fixed a few mistakes (e.g. "out" used as variable and label in same function)
  153. and non-portable constructions (like const and strdup()) in the above.
  154. ckcnet.c, 11 Jul 99.
  155. The June 29th changes to catch communications disconnect were making an
  156. spurious error message ("error 0") come out if you logged out from the remote
  157. while in CONNECT mode.  Commented out the no-longer needed code.  ckucns.c,
  158. ckucon.c, 11 Jul 98.
  159. Rearranged code in the HELP FUNC parser to suppress some harmless compiler
  160. warnings.  ckuus2.c, 11 Jul 98.
  161. Added "--nointerrupts" command-line option, equivalent to "set command
  162. interruption off" + "set suspend off".  This also required changing UNIX
  163. connoi() to set SIGTSTP to SIG_IGN instead of SIG_DFL.  I wonder why it was
  164. SIG_DFL in the first place -- kind of defeats the purpose of "set suspend
  165. off"...  ckuusr.h, ckuus[5y].c, 11 Jul 99.
  166. Since Jeff's changes were rather drastic, tried building today's version on:
  167.  . SunOS/gcc: OK
  168.  . SunOS/cc: Non-ANSI compilations need #ifdefs for "const", then OK.
  169.  . Solaris 2.5.1/gcc: Needed -lresolv added to LIBS, then OK.
  170.  . Solaris 7/gcc: OK.
  171.  . HP-UX 10.20 bundled compiler: OK after non-ANSI changes.
  172.  . HP-UX 10.20 ANSI compiler: OK.
  173.  . HP-UX 8.00 non-ANSI: OK.
  174.  . VMS 7.1 / UCX: HEADER type not defined, C_IN not declared, etc.
  175.  . Linux RH 5.2: OK after adding -lresolv to linuxa target.
  176.  . SINIX 5.42: Bombs out with errors in <arpa/nameser.h>.
  177.  . Unixware 7: OK after adding -lresolv (also for all other Unixware targets)
  178.  . BSDI 3.1: OK.
  179. Defined NO_DNS_SRV for VMS.  ckcdeb.h, 11 Jul 99.
  180. Added -DNO_DNS_SRV to SINIX targets; added -lresolv as indicated above.
  181. Makefile, 11 Jul 99.
  182. Added -DNO_DNS_SRV to HP-UX 5.00, SCO Xenix, and Motorola sv68* targets.
  183. Makefile, 12 Jul 99.
  184. Checked DNS business on FreeBSD 3.1 -- It's OK.  12 Jul 99.
  185. Added FSEEK <channel> { /LINE, /CHAR } LAST, meaning to seek to the final
  186. line or character in the file.  ckuus7.c 12 Jul 99.
  187. Added associative arrays.  ckuusr.h, ckuus[24].c, 12 Jul 99.
  188. Fixed typo in -DNO_DNS_SRV addition to Motorola SV/68 makefile targets.
  189. 13 Jul 99.
  190. Added an argument to sh_sort() to allow specification of an optional second
  191. array to be sorted in parallel with the first, and changed the interpretation
  192. of the final argument from "0 = caseless, nonzero = case sensitive" to
  193. "0 = alpha/caseless, 1 = alpha/case-sensitive, 2 = numeric".  Numeric sorts
  194. work for both integers and floating-point numbers, or any mixture.
  195. ckclib.[ch], ckcfns.c, ckuus[4567].c, 13 Jul 99.
  196. Added a second argument to isfloat() to say whether the entire argument string
  197. must be a floating-point number (flag = 0), or to terminate on the first
  198. illegal character (flag = 1, works like scanf()).  ckclib.[ch], ckcfns.c,
  199. ckuus[4567].c, 13 Jul 99.
  200. Changed SORT command to have a /NUMERIC switch and to allow (but not require)
  201. specification of a second array to be sorted in parallel with the first.
  202. ckuusr.h, ckuus[27].c, 13 Jul 99.
  203. Changed addmac() and delmac() to treat associative array names with case
  204. sensitivity, unlike all other macro names, which are case independent.
  205. ckuus5.c, 13 Jul 99.
  206. FOR, WHILE, and SWITCH each defined BREAK and CONTINUE internally, but then
  207. did not undefine them upon completion.  Tried undef'ing them in the built-in
  208. FOR, WHILE, and SWITCH definitions, but this caused trouble with the script
  209. demo torture test, so backed off.  Anyway, now the demo test works fine, even
  210. after all the recent changes with macros & sorting.  13 Jul 99.
  211. Some ckcnet.c changes from Jeff.  13 Jul 99.
  212. Defined NO_DNS_SRV for VOS and AOS/VS.  Makefile, 14 Jul 99.
  213. Discovered that conint() and connoi() were being called all over the place in
  214. a rather undisciplined fashion, and furthermore that in many places, a front
  215. end for them, setint(), was being used instead.  Replaced all calls to
  216. conint() (except, obviously, in the interrupt handler itself) by calls to
  217. setint(), and changed setint() to honor the cmdint and suspend flags in
  218. setting the SIGINT and SIGTSTP traps.  This should allow any combination of
  219. SET SUSPEND {ON,OFF}, --noint, and SET COMMAND INTERRUPT {ON,OFF} to work
  220. right and consistently.  ckcmai.c, ckcpro.w, ckuus[456x].c, 14 Jul 99.
  221. Added some ansification to the nxt*() declarations to shut up overzealous
  222. compilers about the funcptr = nxt... assignments.  ckcfns.c, 14 Jul 99.
  223. Added #include <time.h> for SCO 3.2v4.x.  I wonder why this wasn't needed
  224. in Beta.07?...  ckutio.c, 14 Jul 99.
  225. Removed -DDCLFDOPEN and -DDCLPOPEN from SCO 3.2v4.x makefile targets -- not
  226. only are they not needed (because fdopen() and popen() are declared in
  227. <stdio.h>), but Kermit's internal declarations conflict with the SCO <stdio.h>
  228. prototypes (because of "const").  Makefile, 14 Jul 99.
  229. Made sure that CK_DNS_SRV was not defined if TCPSOCKET was not also defined.
  230. ckcdeb.h, 14 Jul 99.
  231. Added a forward declaration for ck_termset() in the non-ANSI case.
  232. ckuusx.c, 14 Jul 99.
  233. Added {CK,NO}_DNS_SRV display to SHOW FEATURES.  ckuus5.c, 14 Jul 99.
  234. After today's changes, the following SCO 3.2v4.2 builds are OK again:
  235. sco32v4 sco32v4ns sco32v4net sco32v4gcc sco32v4netgcc.  Also builds fine
  236. on SCO OSR5.0.5:  sco32v505 sco32v505net sco32v505gcc sco32v505netgcc.
  237. Added SET DIAL TEST { ON, OFF }, to test all dialing features without actually
  238. dialing (phone number conversion, DIAL macro, retries, pauses, etc).  ckuusr.h,
  239. ckuus6.c, 14 Jul 99.
  240. Moved invocation of DIAL macro from lookup time to dial time, so it is
  241. applied to each number that is dialed, when it is dialed.  ckuus6.c,
  242. 14 Jul 99.
  243. Added v(dialcount), to be used inside DIAL macro -- it tells the number of
  244. the current DIAL attempt.  ckuusr.h, ckuus4.c, ckudia.c.  14 Jul 99.
  245. SET DNS-SERVICE-RECORDS from Jeff.  ckuusr.h, ckuus[34].c, ckcnet.c, ckuath.c.
  246. 14 Jul 99.
  247. Moved {CK,NO}_DNS_SRV setting from ckcdeb.h to ckcnet.h, because it needed to
  248. be deferred until we are absolutely sure we know whether TCPSOCKET is defined.
  249. 14 Jul 99.
  250. From Jeff: Attempt to initialize the Kerberos principal names from the current
  251. cache file, if any.  ckcnet.c, ckuat*.*, etc, 15 Jul 99.
  252. Discovered some bugs in faaconvert() when running it on large arrays: (a) the
  253. code assumed all members of the same associative array would be contiguous,
  254. when in fact it is possible for non-members to insert themselves; (b) some
  255. junk was getting appended to long element names.  The latter was because VNAML
  256. was hardwired at 64 but element names built from long filespecs were much
  257. longer than that and overwrote memory, oops.  Fixed by (a) increasing VNAML
  258. (to 4096 for BIGBUFOK builds, 256 for others) and (b) making dodef() check the
  259. length of the name before copying it into the variable-name buffer.  ckuusr.h,
  260. ckuus6.c, 15 Jul 99.
  261. From Peter E: Set the dialcount variable earlier, so it is in sync with
  262. the dial try number reported to the user.  ckuus6.c, 15 Jul 99.
  263. From Jeff: More Kerberos additions.  In particular a new feature to allow
  264. Kermit's TGT getting to be used for K5 even for sites that do not support K5,
  265. to allow deployment of scripts that request K5 and K4 tickets without a scary
  266. message for the user.  When the upgrade takes place the K5 support will just
  267. work without a need to update the scripts.  ck_crp.c, ckuath.h, ckuath.c,
  268. ckcnet.c, ckuusr.h, ckuus7.c, ckuus3.c, ckuus2.c, 15 Jul 99.
  269. Took "--noint" command-line keyword out of the CK_LOGIN section.  ckuusy.c,
  270. 16 Jul 99.
  271. connoi() didn't work at all on platforms System V signal handling, notably
  272. Solaris and SCO UNIX 3.2v4.  The first SIGINT would be ignored, the second one
  273. would be caught by the shell, which would kill Kermit.  Fixing this required a
  274. complete overhaul of the UNIX versions of connoi() and conint(), plus some
  275. further improvements in setint().  As a side benefit, the new ones are a lot
  276. simpler.  ckuusx.c, ckutio.c, 16 Jul 99.
  277. Partial completion and ?-help were broken when given in a directory segment of
  278. path leading up to a filename.  This seems to have been broken since the
  279. introduction of nzxpand() in Beta.04.  Fixed in cmifi2(): ckucmd.c, 16 Jul 99.
  280. The RESET command didn't call cmcfm().  Anyway it was pretty useless so I made
  281. it invisible -- no sense cluttering up valuable top-level ? real estate with
  282. it.  ckuusr.c, 16 Jul 99.
  283. Added #include <errno.h> for CKCHANNELIO material for VMS. ckuus7.c, 17 Jul 99.
  284. A round of preliminary builds:
  285.  . SunOS/gcc - ok.
  286.  . SunSO/cc - ok.
  287.  . VMS nonet DECC - ok.
  288.  . VMS UCX DECC - ok.
  289.  . VMS TGV DECC - ok.
  290.  . HP-UX 10.20 non-ANSI - ok.
  291.  . HP-UX 10.20 ANSI - ok.
  292.  . SCO 5.0.5B, all four builds - ok.
  293. Discovered that Ctrl- given to UNIX C-Kermit while it's starting makes it
  294. dump core.  Added signal(SIGQUIT,SIG_IGN) to sysinit().  ckutio.c, 17 Jul 99.
  295. Discovered that in the Solaris version, v(ipaddr) fails, so added
  296. -DNO_DNS_SRV and removed -lresolv from solaris2xg target.  But that didn't
  297. help.  Undid changes to makefile and added a new symbol, CKGHNLHOST, which
  298. means to get the local host IP address the old way (by calling gethostname(buf)
  299. and then gethostbyname(buf), rather than gethostbyname("") and included this
  300. symbol in all Solaris targets.  ckcnet.c, ckuus5.c, makefile, 17 Jul 99.
  301. Discovered the Solaris version would dump core if told to "show variables",
  302. when trying to display the v(textdir) variable.  Failed to check pointer for
  303. nullness.  ckuus4.c, 17 Jul 99.
  304. Moved CKGHNLHOST definition to ckcnet.h.  Had to define it for:
  305.  . Solaris
  306.  . Unixware
  307.  . Sinix / Reliant
  308.  . AOS/VS
  309. Due to compilation errors in system header files, had to define NO_DNS_SRV for:
  310.  . HP-UX 5.00 through 8.00
  311.  . Ultrix (all versions)
  312.  . NeXTSTEP (all versions)
  313. Had to add -lresolv to:
  314.  . Some Linuxes but not others (see below).
  315. Made new makefile entries for Compaq Tru64 UNIX 4.0E and 5.0 (company and
  316. name change), and added designer banners.  makefile, ckuver.h, 17 Jul 99.
  317. Fixed a typo in the xdelmac() declaration (extraneous extra arg).  ckuus5.c,
  318. 17 Jul 99.
  319. Discovered that some Linuxes (e.g. Red Hat) have libresolv.a (in which case it
  320. must be searched for res_search() and dn_expan()) while others (Slackware)
  321. don't.  So I had to change the "make linux" target to dynamically decide on
  322. which combination of -lcrypt and -resolv (4 possibilities) to use.  makefile,
  323. 17 Jul 99.
  324. No #including <sys/stat.h> on VMS with VAXC.  Now it builds OK on VMS 5.5.
  325. ckuus7.c, 17 Jul 99.
  326. The old DG MV2500 has trouble booting (hard disk errors) but if you enter the
  327. diagnostic monitor, let it sit there for a while (so the disk can warm up) and
  328. then try booting again, it comes up.  But as always, building gets media
  329. errors on some files, which can usually be gotten around by building the
  330. affected modules again.  After six hours or so I got a working binary, but
  331. even with CKGHNLHOST defined, I still don't get a good v(ipaddress).
  332. SCO Xenix 2.3.4 needed <time.h> again.  ckutio.c, 17 Jul 99.
  333. Discovered that the VMS UCX version on the Alpha, when sending a file over
  334. Ethernet, its throughput steadily decreases as the transfer goes on, every
  335. time.  It starts at over 100Kcps, and winds up (after about 2MB) at 13Kcps.
  336. Increasing the TCP SENDBUF size from 4K to 16K makes it start at about 400K
  337. and drop to 140K with the same file on the same connection.  Increasing it
  338. beyond that doesn't make any difference.  For receiving, the 4K receive buffer
  339. size seems to be OK -- throughput is about 400Kcps, and increasing the buffer
  340. size doesn't change it.  Made default TCP send buffer size 16K on
  341. VMS/Alpha/UCX.  Ditto for TCPware.  In fact, I made the definition contingent
  342. on VMS and __alpha, which also includes Multinet, except it is ignored in
  343. Multinet since SO_SNDBUF is not defined there.  ckcnet.c, 18 Jul 99.
  344. Put Base-64 stuff in #ifndef NOSPL for PDP-11 build.  ckclib.c, 18 Jul 99.
  345. Discovered that making a TCP connection to a site that refuses the connection
  346. did not print an error message.  A perror() was missing in the ocean of
  347. #ifdefs in netopen() for the UNIX case.  ckcnet.c, 18 Jul 99 (but this change
  348. is too late to make it into most of the Beta.08 binaries).
  349. All Multinet builds now get an avalanche of compiler warnings about socket
  350. routines (socket_read/write/close, htons, getsockname, etc), but they still
  351. seem to work ok...  Comparison of Beta.07 and 08 ckcnet.h and ckcnet.c doesn't
  352. reveal anything obvious.
  353. Removed trailing blanks from all source files.  18 Jul 99.
  354. ---Beta.08---
  355. Added -DNO_DNS_SRV to pyrdcosx target.  Makefile, 20 Jul 99.
  356. From Jeff: Kerberos updates, IKSD fix, NAWS fix for when client tells us it
  357. has 0 rows and/or 0 columns.  ckcnet.c ckctel.c ckuath.c ckcpro.w ckuus7.c
  358. ckuus2.c ckuus3.c, 21 Jul 99
  359. Fixed duplicate solaris25gx25 entries; the second one should have been
  360. solaris26gx25.  makefile, 21 Jul 98.
  361. Attempted to cut through the mess surrounding when/how/if to include <time.h>
  362. (or <sys/time.h>) in ckutio.c, since this was a big source of problems in
  363. Beta.08.  The possibilities are pretty much any combination of zero or more of
  364. <time.h>, <sys/time.h>, and <sys/timeb.h>.  The only rational approach is to
  365. use symbols: TIMEH, NOTIMEH, SYSTIMEH, NOSYSTIMEH, SYSTIMEBH, and NOSYSTIMEBH.
  366. By default TIMEH is defined for everybody.  SYSTIMEH is defined for a fairly
  367. long list in ckcdeb.h, and I moved the section that decides about <sys/timeb.h>
  368. from ckutio.c to ckcdeb.h.  Now any of these can be overridden or undone on
  369. the command line without touching the source code.  makefile, ckcdeb.h,
  370. ckutio.c, ckuus5.c, ckuins.txt Section 4.0, 21 Jul 99.
  371. Tested on:
  372.   AIX 4.1           OK       QNX 4.25          OK
  373.   AIX 4.3.2         OK       SCO 3.2v4.2       OK
  374.   BSDI 3.1          OK       SCO 5.0.5         OK
  375.   DG/UX R4.11       OK       SINIX 5.42        OK
  376.   Digital UNIX 3.2  OK       Solaris 2.5.1     OK
  377.   FreeBSD 2.2.7     OK       Solaris 7         OK
  378.   HP-UX 10.20       OK       SunOS 4.1.3       OK
  379.   HP-UX 8.00        OK       Tru64 UNIX 4.0E   ??
  380.   IRIX 6.2          OK       Unixware 2.1      OK
  381.   Linux (RH5.2)     OK       Unixware 7        OK
  382. Peter E verifies good building on HP-UX 6-10.  22 Jul 99.
  383. Gerry B verifies good building on Motorola SV/68 and SV/88.  22 Jul 99.
  384. Moved a misplaced #endif to fix -DNOHELP builds.  ckuus2.c, 22 Jul 99.
  385. Another IKSD fix from Jeff.  ckcpro.w, 22 Jul 99.
  386. Parameterized the final piece of the time.h code.  ckcdeb.h, ckutio.c,
  387. makefile, 22 Jul 99.
  388. Added zcopy() for VMS (from Lucas Hart).  22 Jul 99.
  389. Fixed some prompt stomping in VMS, at least ones I can reproduce.
  390. ckvcon.c, 22 Jul 99.
  391. Fixed Ctrl-S (status report) in VMS CONNECT crashing C-Kermit (because
  392. temp buf was too small).  Also added more info to report, as in UNIX.
  393. ckvcon.c, 22 Jul 99.
  394. Put lines around status display.  ckvcon.c, ckucns.c, ckucon.c, 22 Jul 99.
  395. Discovered that VMS C-Kermit had no code to get the username.  This means
  396. v(user) never worked, sending username ahead on Telnet connections never
  397. worked, etc.  Added a GETJPI call to VMS sysinit() to load uidbuf[].  Now
  398. uidbuf[] has the username in it, and v(user) is set correctly, but VMS
  399. C-Kermit still doesn't send the username ahead on a Telnet connection.
  400. ckvtio.c, 22 Jul 99.
  401. Because VMS did not have the username defined, the SHOW CONNECTION display
  402. was messed up.  Fixed dologshow() to handle empty fields better.  ckuus3.c,
  403. 22 Jul 99.
  404. VMS v(tmpdir) had a slash at the end.  Fixed in ckuus4.c, 22 Jul 99.
  405. Added -lresolve to dgux54420 target.  Makefile, 22 Jul 99.
  406. There is still a lot of stuff in ckcdeb.h that depends on TCPSOCKET being
  407. already defined.  All other versions (besides VMS) assume TCPSOCKET is defined
  408. on the CC command line.  But in VMS, it is defined in ckcnet.h, after ckcdeb.h
  409. is processed.  Changed the VMS build procedure to define TCPSOCKET if
  410. net_option is not NONET.  ckvker.com, 22 Jul 99.
  411. Defined CK_ENVIRONMENT for VMS so it can send the username ahead on Telnet
  412. connections.  This also turns on a lot of other code for VMS that has never
  413. been exercised before.  But it seems to work mostly OK -- e.g. interactions
  414. with IKSD are as expected.  ckcdeb.h, 22 Jul 99.
  415. From Jeff: Server-side support for Telnet New-Env USER variable.  Corrections
  416. to zvpass() to properly handle Telnet Auth status reports.  Modifications to
  417. Username and Password prompting to support username's transmitted by telnet
  418. negotiation, anonymous logins, and null strings.  ckuus7.c ckufio.c ckcmai.c
  419. ckctel.[ch] ckcpro.w, 22 Jul 99.
  420. From Jeff: Modify use of "authentication failed" message when authentication
  421. is rejected by the peer.  Move initialization of iksd prompt to dotakeini()
  422. where we know that we are IKSD.  Add some "unsigned char" casts.  ckctel.c
  423. ckcmai.c ckuus5.c ckuus7.c, 23 Jul 99.
  424. Checked whether SUNWspro cc had a "consider all chars unsigned" option.
  425. It doesn't.  23 Jul 99.
  426. Added sunos41gsc entry that builds with gcc but omits the -funsigned-char
  427. switch so I will see the signed-vs-unsigned char warnings that everybody else
  428. complains about before they see them, and will use this one from now on.
  429. makefile, 23 Jul 99.
  430. Added -lresolv to all SunOS entries since somebody reported link-time
  431. complaints even though I don't see them here.  Adding it does no harm here.
  432. makefile, 23 Jul 99.
  433. Redid shostk() to work in NOSPL builds.  Guarded all references to
  434. trace-related variables with NOSPL.  Made Base-64 routines available to NOSPL
  435. builds since they are also used by ckcnet.c.  ckclib.c, ckuus5.c, 23 Jul 99.
  436. Removed redundant -DNOREALPATH from sys3upcxxx entries that call sys3upc.
  437. Makefile, 23 Jul 99.
  438. Jeff discovered that CHAR was typedef'd "char" (not "unsigned char") in VMS.
  439. It's been that way probably forever, no doubt to suppress some compiler
  440. warnings.  But this breaks some things at runtime, like certain Telnet
  441. protocol operations.  Changed CHAR to be unsigned char for VMS.  This broke
  442. compilation of lots of modules.  Added casts until it built cleanly with DECC.
  443. Then tried it with VAXC...  OK.  Then on HP-UX 10.20 with the ANSI optimizing
  444. compiler... OK.  And with gcc on UNIX without -funsigned-char...  OK.  So now
  445. the user ID is sent if Telnet NEW-ENVIRONMENT is negotiated.  ckcdeb.h,
  446. ckcnet.h, ckctel.c, ckcnet.c, ckvfio.c, 23 Jul 99.
  447. Fixed new GETJPI code to not cut off username at 4 bytes.  ckvtio.c, 23 Jul 99.
  448. Today's changes seem to fix another problem noticed yesterday: the VMS
  449. C-Kermit Telnet client would often display the "login:" prompt as "olgin:".
  450. Previously, this would happen about 25% of the time, but now I can't make it
  451. happen at all (in about 50 trials).
  452. Verified that the code works the same way in VMS 7.2 (which shows lowercase
  453. usernames, etc) -- GETJPI still returns a 12-char field in uppercase.
  454. Discovered that the REVIEW script, when given a list of filenames on the
  455. command line, would get the array dimension wrong and so the filename array
  456. would come out "off center" after sorting (the first filename would be null
  457. and the last one would be skipped).  This is a long story.  The short version
  458. is that when dogta() copied the &_[] array when entering macro level 1 (0
  459. based), it increased its dimension by 1.  I thought I had fixed this on 27
  460. April, and again on 13 May, but this time I really did.  ckuus6.c, 23 Jul 99.
  461. Authentication changes from Jeff.  ckcmai.c, ckuus7.c, ckuus4.c, ckctel.c,
  462. ckcnet.c, 24 Jul 99.
  463. Added debugging statements to rlogin code -- it seems in VMS we used to
  464. lowercase the getenv("USER") name, but this doesn't help now because it is
  465. overridden by the GETJPI name.  Changed the code to lowercase the name
  466. if a global flag, ck_lcname, is set, and set this flag by default for VMS
  467. only.  Now rlogin from VMS to UNIX works again.  ckcnet.c, 24 Jul 99.
  468. Changed Telnet NEW-ENVIRONMENT to follow the same flag.  Now Telnet from
  469. VMS to UNIX works as expected.  ckctel.c, 24 Jul 99.
  470. Added system type and location to VMS sysinit() so now:
  471. TELNET SENT SB NEW-ENVIRONMENT IS USER<SOH>fdcSYSTEMTYPE<SOH>VMS IAC SE
  472. (location is not picked up because no LOCATION symbol is defined in VMS).
  473. Verified that UNIX telnet server picks up and sets SYSTEMTYPE environment
  474. variable to VMS.  ckvtio.c, 24 Jul 99.
  475. Parameterized length of uidbuf[] with new symbol UIDBUFLEN, and changed all
  476. references to specific lengths, like 64 or 63, to use this symbol, and all
  477. strcpy's into this buf to be strncpy's.  For now the definition is still 64,
  478. since I don't know of any platform that allows longer usernames.  ckcdeb.h
  479. plus many modules, 24 Jul 99.
  480. Adding TCPSOCKET to the VMS CC command line pushed the length of the command
  481. line over the limit for MultiNet.  However, notes indicate that the limit
  482. is arbitrarily chosen anyway, so I bumped it up by 9 characters, which does
  483. not seem to have done any harm since MultiNet builds still work.  ckvker.com,
  484. 24 Jul 99.
  485. Added support for the ELSA MicroLink 56K modem, which uses the new standard
  486. ITU-T V.250 (aka V.25ter) command set.  This is the first international
  487. standard AT command set and presumably will be adopted by other modem makers
  488. (especially since Microsoft is pushing it in PC98 follow-ons).  ckuusr.h,
  489. ckudia.c, 24 Jul 99.
  490. Added support for generic ITU-T V.250, slightly different from Microlink
  491. (strictly by the book, no Microlink extensions).  This one is also included
  492. in MINIDIAL builds.  Also fixed some #ifdefs for MINIDIAL.  The keyword is
  493. "itu-t-v25ter/v250" with an invisible alias of "itu-t-v250".  ckuusr.h,
  494. ckudia.c, 24 Jul 99.
  495. In yesterday's CHAR/char orgy, I missed one spot, which broke no-net builds
  496. with ANSI compilers (the declaration of nettoc() in the #ifndef NETCONN
  497. section).  Fixed in ckcnet.c, 24 Jul 99.
  498. Added more casts to networking code to suppress HP-UX ANSI compiler warnings.
  499. rlog_ini(): ckcnet.c, 24 Jul 99.
  500. A few days ago Peter E reported some craziness with new file i/o package on
  501. HP-UX 7, in which it was very confused about what the maximum number of
  502. channels could be.  This was due to (a) overconservativeness in calculating
  503. the maximum number (choosing the smaller, rather than larger, of several
  504. possibilities when the larger was more likely to be accurate, having come
  505. from sysconf()), and (b) then ignoring the value we had just calculated
  506. (i.e. comparing channel numbers against the fixed symbol Z_MAXCHAN rather
  507. than the variable z_maxchan).  Fixed in ckuus7.c, 24 Jul 99.
  508. ADD SEND-LIST parsed its final field (as-name) with cmtxt() and then called
  509. cmcfm().  I changed the cmtxt() call to cmfld().  ckuusr.c, 24 Jul 99.
  510. Lucas H noticed that ADD SEND-LIST <wildcard> TEXT would forget about the
  511. TEXT part after sending the first file that matched the wildcard.  Fixed in
  512. gnfile(): ckcfns.c, 24 Jul 99.
  513. However, this reveals a bigger problem: when a wildcard is given in a
  514. SEND-LIST, there's no way to specify automatic type switching while sending
  515. the files.  This is a hard one, so deferred -- nobody has ever mentioned it,
  516. and there are obvious workarounds, especially now with regular expressions.
  517. Documented in ckcbwr.txt.  24 Jul 99.
  518. Made "if ==" an invisible synonym for "if =".  ckuus6.c, 24 Jul 99.
  519. Added IF COMMAND and IF FLOAT.  ckuusr.[ch], ckuus2.c, 24 Jul 99.
  520. Added v(cx_time) = elapsed time in session (i.e. since making current
  521. connection, if any, otherwise 0).  ckuusr.h, ckuus[345].c, 24 Jul 99.
  522. From Jeff: fix a misplaced #ifdef in the file code; some authentication
  523. changes.  ckcmai.c, ckuus7.c, 25 Jul 99.
  524. Changed floating-point functions to treat missing or empty arguments as 0.
  525. ckuus4.c, 25 Jul 99.
  526. Fixed IF FLOAT parsing when given a variable with no value.  ckuus6.c,
  527. 25 Jul 99.
  528. Noticed that elapsed time of connection was often wrong.  To avoid having to
  529. put dologxxx() calls throughout setlin(), I had placed them after the calls to
  530. setlin().  This was a good idea except that setlin() can call doconect()
  531. (e.g. if command was TELNET, or if /CONNECT switch was included), and
  532. therefore setlin() might not return for hours, in which case the log entry
  533. would not include the duration of the first (and perhaps only) CONNECT
  534. session.  So I moved the dologxxx() calls to the appropriate places in
  535. setlin(), which wasn't so bad after all (since they only needed to go in those
  536. places where setlin() returns successfully after making a connection, but
  537. before any call do doconect()).  ckcmai.c, ckuus[37].c, 25 Jul 99.
  538. Noticed that connections made by command-line options did not start the
  539. connection log & timer.  Fixed in ckuusy.c, 25 Jul 99.
  540. Realized it's not very helpful to have v(cx_time) return 0 when there is no
  541. active connection, so made it (and SHOW CONNECTION) show the elapsed time of
  542. the most recent session.  ckuus[34].c, 25 Jul 99.
  543. Finally, to make the connection log useful on multiprocessing systems, it was
  544. necessary to not keep it open all the time.  This way, multiple sessions can
  545. write to the same connection log.  LOG CONNECTION opens the log in the
  546. requested mode (new, append) and closes it right away (this is mainly so it
  547. can fail intelligently in case the log can't be opened).  Then, whenever a
  548. session ends, dologend() opens it again (but this time in append mode, no
  549. matter what mode the user chose), writes the record, and closes it.
  550. Collisions are still possible, but in UNIX at least, there is no mechanism for
  551. opening the file in shared mode -- presumably sharing is allowed and you have
  552. to go out of your way to prevent it (e.g. with flock()).  In any case, logging
  553. from multiple sessions seems to work fine now on both UNIX and VMS (and it
  554. definitely did not before today), as does syslogging on UNIX (after some minor
  555. tweaking).  ckuus[34].c, ckufio.c, 25 Jul 99.
  556. So now we have a reliable session-time indicator.  Added session time (and
  557. some other info) to the CONNECT-mode status display.  It could also be used
  558. anywhere else -- e.g. in the K95 status line (if there were room).  The way
  559. to get it is:
  560.   char * p = NULL;
  561.   long t = dologshow(0);       ; Seconds
  562.   if (t > -1L) p = hhmmss(t);  ; Converted to hh:mm:ss
  563. ckucns.c, ckucon,c, ckvcon.c, 25 Jul 99.
  564. SET TRANSFER DISPLAY BRIEF, in its summary line, did not deduct the refused
  565. files from the total number of files transerred.  Fixed in ckuusx.c, 25 Jul 99.
  566. Removed a spurious printf() from REMOTE QUERY left behind from a debugging
  567. session.  Suppressed gratuitous echoing of QUERY result when not at top level.
  568. ckuus7.c, 25 Jul 99.
  569. A fix from Jeff from IKSD login.  ckuus7.c, 25 Jul 99.
  570. Discovered that SHIFT did not work when given within a FOR or WHILE loop
  571. when referencing command-line arguments.  Fixed in doshift(): ckuus5.c,
  572. 26 Jul 99.
  573. Got rid of "Interrupt during initialization or command-line processing.
  574. C-Kermit quitting..." message when a Kerbang script is interrupted.  ckcmai.c,
  575. 26 Jul 99.
  576. OS-9 fixes from Martin Whitaker.  ckcdeb.h, ckucmd.c, ckuus[6x].c, 26 Jul 99.
  577. Cleanup of overuse of variable "x" in setlin() from Jeff.  ckuus7.c, 26 Jul 99.
  578. Fixed number-of-modems definition in ckuusr.h (forgot to update it for
  579. ITU-T V.250).  26 Jul 99.
  580. Fixed ITU-T V.250 commands that include multiple "extended commands" to
  581. separate them with semicolon (V.250 5.4.5.1).  ckudia.c, 26 Jul 99.
  582. New VMS build procedure from Dave Sneddon, accounts for UCX 5.0.
  583. ckvker.com, 26 Jul 99.
  584. Made sure that --syslog: on command line doesn't affect syslogging when
  585. C-Kermit was built with -DSYSLOGLEVEL=x (the code was already there).
  586. 27 Jul 99.
  587. Added a new target to support building IKSD on Unixware7 (needs shadow
  588. passwords) from Jim Whitby.  27 Jul 99.
  589. Mike Freeman reported that VMS C-Kermit crashed when given a REMOTE HOST
  590. command.  Problem: the new timed reads that were added to handle the keepalive
  591. for long-running host commands.  Kermit crashes in the sys$synch(QIOW_EFN)
  592. call on the VAX but not on the Alpha.  "help system $synch" on the Alpha says
  593. this call takes a 64-bit arg on the Alpha only, but only looks at the lower
  594. byte; it doesn't say this on the VAX.  But I doubt that's the problem -- it
  595. might be a missing second arg, but I can't tell.  Sent email to Lucas about it
  596. and undefined PIPETIMER on the VAX in the meantime.  ckvfio.c, 27 Jul 99.
  597. Peter E complained that the following sequence:
  598.   set modem type xxx
  599.   set line /dev/cua0
  600.   set flow none (or anything else)
  601.   ...
  602.   set modem type yyy
  603. undoes the "set flow" command.  But... if the user gave a SET FLOW command,
  604. they probably meant it, and it should be sticky at least until the device
  605. changes.  So now any SET FLOW command (except AUTO, which is the default)
  606. sets autoflow to 0, but any SET LINE/HOST/PORT or TELNET/RLOGIN/etc command
  607. sets it back to 1 so appropriate flow control can be selected for the new
  608. device/connection.  ckuus[37].c, 27 Jul 99.
  609. Lucas got back with a fix for the sys$synch() call, so REMOTE HOST (with
  610. keepalive) works again on both VAX and Alpha.  But it's very slow (VERY slow)
  611. -- I didn't notice this before.  Sent more mail to Lucas.  In the worst case
  612. we can always back off.  ckvfio.c, 27 Jul 99.
  613. Peter E noticed that DIR with no switches was like DIR /FILES, when it was
  614. supposed to be like DIR /ALL.  The problem was in the _CMIFI entry of the
  615. initial FDB (before any switches were parsed).  Fixed in domydir(), ckuus6.c,
  616. 27 Jul 99.
  617. From Jeff: SET TELNET BUG SB-IMPLIES-WILL-DO to cope with broken UCX 5.0
  618. Telnet server (client sends WILL TERM-TYPE, server sends SB without first
  619. sending DO, but client is still waiting for DO).  Also various compiler
  620. warning-avoidance and authorization fixes.  Also cleaned-up code for sending
  621. NEW-ENVIRONMENT fields.  ckctel.[ch], ckuus[2347].c, ckufio.c, 28 Jul 99.
  622. Added NOSHOW protection around references to SHOW ARRAY in ckuusr.c.
  623. 28 Jul 99.
  624. Fixed an unguarded reference to query.  ckcnfs.c, 28 Jul 99.
  625. Fixed unguarded refs to dolognet().  ckuus7.c, 28 Jul 99.
  626. Added SET SERVER KEEPALIVE { ON, OFF } to control the keepalive feature;
  627. needed for VMS (unless we can get get_subroc_line() fixed), because of how
  628. it slows down the response to host commands.  ckuusr.h, ckuus[235].c,
  629. ck[uv]fio.c, 28 Jul 99.
  630. Moved hhmmss() and parnam() from ckuusx.c to ckclib.c so ck?[tf]io.c routines
  631. could use them without having to haul in ckuusr.h.  ckuusx.c, ckuusr.h,
  632. ckclib.[ch], 28 Jul 99.
  633. Added doiksdinit() to execute the iksd.conf file if -A given on command line,
  634. just after ttopen() and socket setup, but before authentication begins.
  635. ckcdeb.h, ckcmai.c, ckuus5.c, iksd.txt, 28 Jul 99.
  636. Yesterday's fix for SET FLOW was not in exactly the right place.  Moved it
  637. to a better place and now it works as advertised.  ckuus3.c, 28 Jul 99.
  638. Added SET AUTH { K4, K5 } PROMPT { PASSWORD, PRINCIPAL }, parsing only.
  639. Compiles OK but I couldn't test because link fails on ck_krb4_realmofhost.
  640. Also SET TELNET PROMPT-FOR-USERID.  ckuusr.h, ckuus3.c, 28 Jul 99.
  641. Fixes from Jeff for Kerberos builds plus filling in the action portions of the
  642. new SET ... PROMPT commands, plus HELP text for them.  ckuath.c ckuus2.c
  643. ckuus3.c ckuus7.c ckuusr.h, 29 Jul 99
  644. Made sure that the following builds worked OK: NONET, NOSHOW, NODIAL, NOHELP,
  645. NOSPL, NOICP. NOPUSH, NOCSETS, NOLOCAL, MINIDIAL.  A fair amount of work was
  646. needed to get NOICP builds working again, including a NOICP version of
  647. readpass(), in case anybody ever wanted to build a command-line-only C-Kermit
  648. that included authentication, plus the expected #ifdef shuffling in ckcdeb.h,
  649. etc.  Plus more char/CHAR silliness in ckcnet.c.  Also needed to move several
  650. routines out of the NOLOCAL section to make the NOLOCAL version link.  Many
  651. modules, 29 Jul 99.
  652. Also checked builds on:
  653.  AIX 4.1:              OK
  654.  AIX 4.3.2:            OK
  655.  BSDI 3.1:             OK
  656.  HP-UX 8.00 no ANSI:   OK
  657.  HP-UX 9.00 ANSI:      OK
  658.  HP-UX 9.00 no ANSI:   OK
  659.  HP-UX 10.20 ANSI:     OK
  660.  HP-UX 10.20 No ANSI:  OK
  661.  IRIX 6.2:             OK
  662.  Linux (RH5.2):        OK
  663.  Ditto + Kerberos 5:   OK
  664.  Ditto + Kerberos 4&5: OK
  665.  SCO 3.2v4.2 cc:       OK (net and nonet)
  666.  SCO 3.2v4.2 gcc:      OK (net and nonet)
  667.  SINIX 5.42:           OK
  668.  Solaris 2.4 cc:       OK
  669.  Solaris 2.5.1 gcc:    OK
  670.  Solaris 7 cc:         OK
  671.  Unixware 2.1.3:       OK
  672.  Unixware 7:           OK
  673.  VMS/Alpha/DECC/UCX:   OK
  674.  VMS/Alpha/DECC/Nonet: OK
  675.  VMS/VAX/VAXC/UCX:     OK
  676.  VMS/VAX/VAXC/Nonet:   OK
  677. From Jeff: check prompt strings to make sure they use the proper
  678. number and type of % fields.  ckuus3.c, 29 Jul 99.
  679. From Jeff:  Add color to the prompts.  I use the status line color.
  680. ckuus7.c, 29 Jul 99.
  681. Two corrections to tx_cp437(): a-tilde goes to 'a', not 'e', and
  682. Black Square maps to 254, not "unknown".  ckouni.c, 29 Jul 99.
  683. Fixes for get_subroc_line() from Lucas Hart -- major speedup.  ckvfio.c,
  684. 29 Jul 99.
  685. Discovered two entries were missing from the xlr[] table at the end of
  686. the Latin/Cyrillic section (4,43 and 4.44).  ckuxla.c, 30 Jul 99.
  687. Added support for Unicode / ISO-10646 in two forms, UCS-2 and UTF-8, Level 1
  688. (no combining characters, no Jamos), each of them as both File and Transfer
  689. Character Sets.  This works only for file transfer so far, not CONNECT,
  690. TRANSMIT, TRANSLATE, etc.  There are still many loose ends, but nothing to
  691. prevent including it in Beta.09 and the final 7.0.  Practically all modules
  692. were touched.  Detailed notes in a separate file, unicode.txt.
  693. 31 Jul - 1 Aug 99.
  694. Fixes from Jeff to weekend's Unicode work for K95, plus some authentication
  695. changes.  ckuus7.c ckuath.c ckuus5.c ckuus3.c ckuus4.c ckcuni.h ckuxla.c
  696. ckcuni.c ckuath.h ckouni.c ckcnet.c, 2 Aug 99.
  697. Separated UNICODE and CKOUNI, which were previously synomyms.  Now CKOUNI is
  698. defined only for K95.  ckcxla.h, 2 Aug 99.
  699. Fixed a couple places where xpnbyte() did not return a value.  In fact, a lot
  700. of yesterday's work on on this function seems to have been lost -- I must have
  701. been editing the wrong copy, or copied the wrong file or something...
  702. Reconstructed the lost work, ran all the tests again, still OK.  ckcfns.c, 2
  703. Aug 99.
  704. Changed unknown-char symbol when translating from Unicode to a single-byte
  705. character set from Ctrl-G to the customary question mark.  ckcfns.c, 2 Aug 99.
  706. Added #ifdefs needed to fix NOCSETS builds.  ckcfns.c, 2 Aug 99.
  707. Added Unicode support to the TRANSLATE command.  This required some creative
  708. retooling of xgnbyte() into a more-or-less general-purpose routine that works
  709. for both file transfer and other kinds of translations, and hopefully can be
  710. used by TRANSMIT and CONNECT.  ckcfns.c, ckuus4.c, 2 Aug 99.
  711. Code for K95 popup prompts from Jeff, plus some typos fixed, plus some auth
  712. stuff.  ckuus7.c ckuath.c ckuus3.c ckouni.c, 3 Aug 99.
  713. Added /POPUP switch to ASK[Q].  ckuus6.c, 3 Aug 99.
  714. Fixed K95 parsing of SET TERM {REMOTE,LOCAL}-CHAR LATIN1 and NEXT.  ckcuni.c,
  715. 3 Aug 99.
  716. Removed SET TERM CHAR { UCS2, UTF8 } from non-K95 SET TERM CHAR tables (since
  717. there is no supporting code yet), and made SET { FILE,XFER } CHAR { UCS2,UTF8 }
  718. invisible.  ckuxla.c, 3 Aug 99.
  719. Fixed SHOW CONNECTION message in the no-connection case. ckuus[r3].c, 3 Aug 99.
  720. For local reasons, we had to cut off development here and put Beta.09 together
  721. without the complete Unicode implementation.  So now to repeat the testing
  722. from several days ago.  Configuration options:
  723.   Full Unix..ok (SunOS, Unixware 7)
  724.   Full VMS...ok (Alpha / VMS7.2 / DECC)
  725.   NoNet VMS..ok (ditto)
  726.   Krb4.......ok (SunOS)
  727.   Krb5.......ok (Linux)
  728.   Krb4+Krb5..ok (Linux)
  729.   NOUNICODE..ok
  730.   NOCSETS....ok
  731.   NONET......ok
  732.   NOLOCAL....ok
  733.   NODIAL.....ok
  734.   MINIDIAL...ok
  735.   NOSPL......ok
  736.   NOICP......ok
  737.   NOSHOW.....ok
  738.   NOHELP.....ok
  739.   NOPUSH.....ok
  740. Some shuffling of #ifdefs and declarations was needed, as usual, to get all
  741. of these working again.
  742. Fixed a bogus 5-hex-digit hex case label in tx_lucidasub(). ckcuni.c, 3 Aug 99.
  743. Changed ASK/ASKQ to evaluate variables in prompt string.  doask(): ckuus6.c,
  744. 3 Aug 99.
  745. Added CKCUNI to VMS build procedure.  ckvker.com, ckvker.mms, 3 Aug 99.
  746. Commented out the questionable section in ucs2_to_utf8() that compares an
  747. unsigned short with all sorts of 32-bit hex constants, since almost every
  748. compiler complains about it, and it doesn't do anything useful anyway (we
  749. don't support UCS-4 yet; when we do we can change the parameter with which
  750. ucs2_to_utf8() is called from USHORT to UINT, and for that matter drop the
  751. "2" from the name).  ckcuni.c. 3 Aug 99.
  752. Fixed UNICODE defines so they are executed only for UNIX and VMS, since the
  753. other platforms don't have their build procedures adjusted yet to include the
  754. new modules and dependencies.  ckcxla.h, 3 Aug 99.
  755. From Jeff: change: "int ttnproto = NP_NONE;" to "int ttnproto = NP_DEFAULT;"
  756. in ckcnet.c, so "kermit -J host" will work.  ckcnet.c, 3 Aug 99.
  757. OK, now starts the build-all...
  758. VMS 5.5 DECC build barfs on #include <conv$routines.h> (file doesn't exist).
  759. Tried again with VAXC.  This one choked on memmove.  Commented out the
  760. #include (actually put it #ifndef BUGFILL7) and went back to DECC.  This will
  761. have to be cleaned up later...
  762. A few last-minute K95 fixes & changes from Jeff (including /POPUP for the
  763. AUTHENTICATE commands).  ckcxla.h, ckuus7.c, ckuusr.c.  3 Aug 99.
  764. ---Beta.09---
  765. ---1.1.18-CU---
  766. From Jeff:
  767.  . Changed ckcssl.h to ck_ssl.h to prevent copying by ck[cu]*...
  768.  . Verified authentication engine against 3rd authentication servers & clients.
  769.  . Made sure that IKSD sets the socket options appropriately at startup.
  770.  . Made sure that platform-specific variables are not exposed to guests.
  771.  . Prevent deadlocks with TELNET WAIT and encryption.
  772. New OS-9 makefile from Martin Whitaker, adds ckcuni.[ch].  10 Aug 99.
  773. Fixed some #ifdefs in SHOW EXTENDED-OPTIONS to allow building with -DNOLOGIN.
  774. ckuus5.c, 10 Aug 99.
  775. Added a byte-order test to main() start sequence and added byte order display
  776. to SHOW FEATURES.  ckcmai.c, ckuus5.c, 10 Aug 99.
  777. Changes from Jeff for SRP, separate conditionalization of iksd.conf, comments
  778. & placeholders in telnet & crypto modules, fixes to gtword() to be more
  779. tolerant when Telnet server of misbehaving clients (e.g. that send bare CR),
  780. problems with DNS lookups on DU 4.0B caused by sign extension.  ck_crp.c
  781. ckcmai.c ckcnet.c ckcssl.h ckctel.h ckouni.c ckuath.c ckucmd.c ckuus5.c
  782. makefile, 11 Aug 99.
  783. Hoping to stifle the avalanche of compiler warnings on Multinet builds that
  784. we've been getting since Beta.07, reorganized the VMS section of ckcnet.h to
  785. have #ifdef..#else structure, so each product section is mutually exclusive.
  786. I didn't expect it to help and it didn't.  Eventually (long story skipped) it
  787. turned out that the #include <if.h> that was added to ckcdeb.h to pick up the
  788. u_int typedef for UCX 5.0 was forcing the Multinet <socket.h> to be skipped,
  789. so the cure was to put #ifndef MULTINET around #include <if.h>.  This fixes
  790. all Multinet builds without breaking UCX or others.  The critical hint was
  791. from Hunter Goatley: use /LIST/SHOW=INCLUDE.  Built and replaced all of the
  792. Multinet binaries.  ckcdeb.h, 11 Aug 99.
  793. Changed the VMS build procedure to define IF_DOT_H only for UCX.  Not only do
  794. we not use this symbol any more outside of UCX, but also it made the Multinet
  795. CC command line too long.  ckvker.com, 11 Aug 99.
  796. Added SET FILE UCS BYTE-ORDER { BIG-ENDIAN, LITTLE-ENDIAN }, v(byteorder),
  797. SET RECEIVE UCS BOM { ON, OFF } (parsing only).  ckuusr.h, ckcker.h,
  798. ckuus[37].c, ckuxla.c, 11 Aug 99.
  799. Filled in v(byteorder) action.  Returns 0=BE, 1=LE.  ckuus4.c, 11 Aug 99.
  800. Added union ckshort definition to ckcdeb.h, 11 Aug 99.
  801. Added preliminary UCS byte-swapping code to xpnbyte().  Compiles OK but is
  802. totally untested.  ckcfns.c, 11 Aug 99.
  803. From Jeff:
  804.  . Updated SSL support for OpenSSL 0.9.4
  805.  . Moved iksdconf stuff to a more correct location in main()
  806.  . Made set telopt /server the default when running as IKSD
  807.  . DU 4.0 inet_addr() thing
  808. ckcnet.[ch] ckuus3.c ckcmai.c ckuus5.c ck_ssl.h ckuath.c makefile, 11 Aug 99.
  809. Fixed long lines in ckuath.c, 11 Aug 99.
  810. Changed the minor edit number from 195 to 196 since we had a private
  811. Columbia-only release.  ckcmai.c, 11 Aug 99.
  812. More changes from Jeff, mostly for the DU4.0 inet_addr() business.  ckuus7.c
  813. ckcnet.c ckuath.c ckcfns.c ckuus3.c ckcnet.h, 12 Aug 99.
  814. Fixed long lines in ckuath.c again, 12 Aug 99.
  815. While I was messing with Unicode support, file transfers started failing for
  816. no apparent reason.  The debug log showed it was because we were calling
  817. ttinl() with a timeout even though we were streaming.  Why?  Somehow timint
  818. was getting set to a positive number.  I'm not going to worry about it now --
  819. I just changed the "just in case" test in rpack() prior to calling ttinl() to
  820. also check for streaming.  (Actually this was a false alarm -- the real
  821. problem was a forgotten kermit-in-the-middle -- but the change seems like a
  822. good idea anyway...)  ckcfn2.c, 12 Aug 99.
  823. OK, back to Unicode...  Discovered that an #endif was misplaced by one line
  824. in ucs2_to_utf8(), totally breaking it.  Therefore translation of UCS-2 to
  825. UTF-8 won't work in K95 1.1.18-CU.  I doubt anybody will notice since (a)
  826. the file-transfer keywords are invisible, (b) Unicode file-transfer support
  827. is undocumented, and (c) they'll probably never type an accented or non-Roman
  828. character natively (the Compose key still works).  But oops, my fault.  Fixed
  829. in ckcuni.c, 12 Aug 99.
  830. Added UCS-2 byte-swapping for the file receiver.  This turned out to be easier
  831. than I thought, although it took some time to realize it.  UCS-2 characters
  832. are (and must be) kept in native order internally, otherwise translation
  833. functions (tables, switch statements, etc) don't work.  Therefore bytes are
  834. swapped only when (a) incoming TCS is UCS-2 (Big Endian by definition) and
  835. receiving machine is Little Endian, or (b) writing out to a UCS-2 file and the
  836. user has specified the opposite endianness of the underlying machine.  Also we
  837. add or don't add the appropriate BOM according to the user's FILE UCS BOM
  838. { ON, OFF } setting.  xpnbyte(): ckcfns.c, 12 Aug 99.
  839. Changed setxlatype() to NOT set XLA_NONE when Unicode is involved, even if
  840. the TCS and FCS are the same, since we might also need to deal with byte
  841. swapping and BOMs.  ckuxla.c, 12 Aug 99.
  842. Made sure that every conceivable combination works:
  843.        From To   TCS      FCS    BOM  Order
  844.   [ok] Sun  PC   Latin-1  UCS-2  On   Default  (FFFE, A<NUL>)
  845.   [ok] Sun  PC   Latin-1  UCS-2  On   BE       (FEFF, <NUL>A)
  846.   [ok] Sun  PC   Latin-1  UCS-2  On   LE       (FFFE, A<NUL>)
  847.   [ok] Sun  PC   Latin-1  UCS-2  Off  Default  (A<NUL>)
  848.   [ok] Sun  PC   Latin-1  UCS-2  Off  BE       (<NUL>A)
  849.   [ok] Sun  PC   UTF-8    UCS-2  On   LE       (FFFE, A<NUL>)
  850.   [ok] Sun  PC   UTF-8    UCS-2  On   BE       (FEFF, <NUL>A)
  851.   [ok] Sun  PC   UTF-8    UCS-2  Off  BE       (<NUL>A)
  852.   [ok] Sun  PC   UTF-8    UCS-2  Off  LE       (A<NUL>)
  853.   [ok] Sun  PC   UCS-2    UCS-2  On   LE       (FFFE, A<NUL>)
  854.   [ok] Sun  PC   UCS-2    UCS-2  On   BE       (FEFF, <NUL>A)
  855.   [ok] Sun  PC   UCS-2    UCS-2  Off  BE       (<NUL>A)
  856.   [ok] Sun  PC   UCS-2    UCS-2  Off  LE       (A<NUL>)
  857.   [ok] PC   Sun  Latin-1  UCS-2  On   Default  (FEFF, <NUL>A)
  858.   [ok] PC   Sun  Latin-1  UCS-2  On   BE       (FEFF, <NUL>A)
  859.   [ok] PC   Sun  Latin-1  UCS-2  On   LE       (FFFE, A<NUL>)
  860.   [ok] PC   Sun  Latin-1  UCS-2  Off  LE       (A<NUL>)
  861.   [ok] PC   Sun  Latin-1  UCS-2  Off  BE       (<NUL>A)
  862.   [ok] PC   Sun  UTF-8    UCS-2  On   BE       (FEFF, <NUL>A)
  863.   [ok] PC   Sun  UTF-8    UCS-2  On   LE       (FFFE, A<NUL>)
  864.   [ok] PC   Sun  UTF-8    UCS-2  Off  LE       (A<NUL>)
  865.   [ok] PC   Sun  UTF-8    UCS-2  Off  BE       (<NUL>A)
  866.   [ok] PC   Sun  UCS-2    UCS-2  On   BE       (FEFF, <NUL>A)
  867.   [ok] PC   Sun  UCS-2    UCS-2  On   LE       (FFFE, A<NUL>)
  868.   [ok] PC   Sun  UCS-2    UCS-2  Off  LE       (A<NUL>)
  869.   [ok] PC   Sun  UCS-2    UCS-2  Off  BE       (<NUL>A)
  870. Changed SET RECEIVE UCS BOM { ON, OFF } to SET FILE UCS BOM { ON, OFF }.
  871. ckuusr.h, ckuus7.c, 13 Aug 99.
  872. Jeff changed zmchout() calls in ckcfns.c to pnbyte() to solve a problem with
  873. IKSD's execution of REMOTE commands.  But that's not right.  First of all a
  874. lot of stuff is done twice this way (ffc incrementing, crc calculating, etc),
  875. but mainly it's way too expensive.  zmchout() is a highly efficient macro;
  876. doing a function call on every character should be avoided whenever possible.
  877. We can look at this next week.
  878. Also some changes to ckuath.c from Jeff.  Fixed long lines, plus a typo
  879. (the word "NULL" was broken in half around line 5382).  13 Aug 99.
  880. From Jeff:
  881.  . A new approach to handling the issues related to OS/2 and zmchout() in
  882.    ckcfns.c  I just placed the conoc() calls in [b]decode as an if else
  883.    statement.
  884.  . Renamed:  SET TELNET TRANSFER-MODE to SET TELNET BINARY-TRANSFER-MODE
  885.  . Added:  SET TELNET AUTH {HOW-FLAG, ENCRYPT-FLAG} to specify which
  886.    values for the authentication type modifier should be accepted or
  887.    offered.  Primarily for debugging but it does have the ability to be
  888.    used to require a mutually authenticated session.
  889. ckuus2.c, ckcfns.c, ckuath.c, ckuus3.c, ckuusr.h, ckctel.h, ckctel.c,
  890. ckcpro.w, ckuus4.c, 15 Aug 99.
  891. From Jeff:
  892.  . Discovered that OpenSSL is broken on SunOS.  Built OpenSSL on linux.
  893.    Added SSL/TLS support to our multi-authentication mechanism build.  So
  894.    now yclept's IKSD has K5, K4, SRP, and SSL/TLS.
  895.  . Fixed the test for determining when SRP authentication has completed.
  896.  . Don't attempt to display the SSL/TLS shared cipher list on the client.
  897. ckcnet.c ck_ssl.h makefile ckufio.c ckuath.c, 15 Aug 99.
  898. Added UCS settings to SHOW FILE.  ckuus4.c, 15 Aug 99.
  899. Added support for UCS-2 byte swapping to the file sender.  The source file's
  900. BOM, if any, takes precedence.  If it's FFFE, then we swap.  If there is a BOM
  901. (either FEFF or FFFE), we discard it.  If there is no BOM, we swap if SET FILE
  902. UCS BYTE-ORDER is opposite from the machine's native byte order.  After
  903. reading a UCS-2 character and possibly swapping according to these rules, we
  904. assume that the character is in native UCS-2 unsigned short format, and use it
  905. that way in conversions, etc.  Of course if there is no BOM and the user
  906. commands us to use the wrong byte order, the results are junk.  xgnbyte():
  907. ckcfns.c, 15 Aug 99.
  908. Tested by sending 4 files in text mode with FCS == TCS == UCS-2 and SET FILE
  909. UCS BYTE-ORDER BIG-ENDIAN and LITTLE-ENDIAN from both Sparc (BE) and PC (LE),
  910. and looking at the packet logs:
  911.  Machine:              Sparc...    Linux PC
  912.  SET FILE UCS BYTE:    BE    LE    LE    BE
  913.                        --------------------
  914.  1. ucs2be+bom.txt     ok    ok    ok    ok     BOM takes precedence
  915.  2. ucs2le+bom.txt     ok    ok    ok    ok     BOM takes precedence
  916.  3. ucs2be-bom.txt     ok    XX    XX    ok     Setting takes precedence
  917.  4. ucs2le-bom.txt     XX    ok    ok    XX     Setting takes precedence
  918. So all combinations work (XX means we lied about the byte order and so the
  919. bytes were reversed in the packet).  Results are consistent when the transfer
  920. charset is Latin-1.
  921. Next I added some rather crude code to handle CRLF/LF/CR conversion to/from
  922. packets when the TCS is UCS-2.  In this case we need #@#M#@#J in the packet,
  923. with appropriate conversions from/to the file character set.  This will no
  924. doubt need some refinement.  In fact, it really strains the current model
  925. which is a poor design.  The right way to handle line termination is to have
  926. a line-oriented system-dependent file reader that returns each line *without*
  927. its terminator.  Then the high-level code can simply tack CRLF onto the end
  928. (or in this case NUL CR NUL LF), rather than worry about what platform it's
  929. running on and what the previous and next chars are, etc.  ckcfns.c, 15 Aug 99.
  930. Fixed the TRANSLATE command to account for byte order and to follow the FILE
  931. UCS settings.  ckcfns.c, ckuus4.c, 15 Aug 99.
  932. Some changes from Jeff.  ckuus3.c, ckuath.c, 16 Aug 99.
  933. Added COPY /SWAP-BYTES <sourcefile> <destfile>.  ckuus6.c, 16 Aug 99.
  934. Verified that when using UCS-2 or UTF-8 as a transfer character set, it's OK
  935. to break a code sequence between packets.
  936. Fixed UNIX CONNECT module to not translate incoming characters when
  937. transparent print was active.  ckucns.c, 16 Aug 99.
  938. Updated HP-UX 6 and 7 targets from Peter E.  makefile, 17 Aug 99.
  939. From Jeff, 20 Aug 99:
  940.  . Fix fword()/fsplit() return value.  ckuus4.c.
  941.  . Added ckgetlocalipaddrs() (but there is already a
  942.    getlocalipaddr(), and some compilers/linkers might not support
  943.    distinctions past the 14th character...)  ckcnet.[ch].
  944.  . Added code for Kerberos check IP addresses: ckuusr.h, ckuus[37].c.
  945.    (Changed "checkaddrs" to "check-address").
  946.  . New ckuath.c (fixed long lines).
  947.  . New cmdgetc(), not static any more. ckucmd.[ch].  Fixes problem with
  948.    askmore() in IKSD.
  949. Fixed Compaq modem DC Off command (&C0 should be %C0).  ckudia.c, 20 Aug 99.
  950. Added UTF-8 terminal character-set translation to UNIX CONNECT module.
  951. ckucns.c, 21-22 Aug 99.  (Still need to migrate this code to other CONNECT
  952. modules, clean it up, etc, and then adapt it to TRANSMIT.)
  953. Verified that UTF-8 changes to ckucns.c did not break previous byte-to-byte
  954. translations (e.g. DGI to Latin-1), then cleaned out temporary debug calls
  955. that were added yesterday.  Also verified that -DNOUNICODE builds still work.
  956. Then streamlined, parameterized, and documented the UTF-8 routines in
  957. preparation to moving them to a common module.  23 Aug 99.
  958. Fix from Jeff to askmore() that I missed before.  ckuusx.c, 23 Aug 99.
  959. Added to the list of countries where Tone dialing is universally available
  960. from table in Elsa MicroLink (German modem) manual.  ckudia.c, 24 Aug 99.
  961. New irix64gcc makefile target from Adam Laurie <adam@algroup.co.uk>, 24 Aug 99.
  962. Added -DNOTERMCAP to linuxnc target since "linuxnc" (no curses) builds were
  963. failing on <term.h> on systems where user said No to installing ncurses.
  964. makefile, 24 Aug 99.
  965. New uw7iksdudk target, accounts for library shuffle between Unixware 7.0 and
  966. 7.1 (realpath()), from Jim Whitby <jim@tpsdata.com>.  makefile, 24 Aug 99.
  967. With a helpful hint from Lucas Hart, cleaned up a mess I made in VMS
  968. do_label_send() when working on the signed/unsigned char mess, which broke
  969. LABELED transfers completely.  ckvfio.c, 24 Aug 99.
  970. Yesterday, cont'd...  Added prototypes for b_to_u() and u_to_b() to ckcuni.h,
  971. and moved the routines themselves from ckucns.c to ckcuni.c.  24 Aug 99.
  972. Adapted UTF-8 support to ckucon.c and ckvcon.c.  This brings UTF-8 terminal
  973. emulation to fork()-using UNIX versions and to VMS, and validates the
  974. modularity.  24 Aug 99.
  975. Looked at TRANSMIT command.  It already had K95-specific UTF-8 support added,
  976. but it didn't work at all in UNIX.  Changed it to use the same model used by
  977. CONNECT.  Now it works (sort of), but still needs a LOT of cleaning up.  To
  978. be cont'd...  ckuus4.c, 24 Aug 99.
  979. In the non-K95 version of SET TERM CHARACTER-SET <remote-set> <local-set>, the
  980. default local set was set incorrectly, so defaulting it gave a totally wacky
  981. value.  Not sure when this happened, but it was some time after 6.0.  Fixed
  982. in settrm(), ckuus7.c, 25 Aug 99.
  983. From Jeff: Make K95 "set term {r,l} char dec-m*" consistent with C-K.
  984. ckcuni.c, 25 Aug 99.
  985. If the TRANSMIT command failed in the setup phase, it could leave the
  986. 'binary' value altered.  Fixed in translate(), ckuus4.c, 25 Aug 99.
  987. The TRANSMIT command has always assumed the character set of the file being
  988. transmitted was the same as the local end of the terminal character-set pair.
  989. There has never been a way to transmit a file, converting from local (file)
  990. character-set A to remote (terminal) character-set B, but convert the return
  991. echo from B to the local end of the terminal character set, C.  To illustrate:
  992. suppose I want to transmit a file encoded in the NeXT charset to a DG
  993. computer, translating it to DG Multinational, but my terminal only understands
  994. Latin-1, so the echoes should be translated from DG to L1.  The distinction is
  995. important now if we want to TRANSMIT (and translate) UCS-2 file, since UCS-2
  996. is not a terminal character set.  Fixed in transmit(): ckuus4.c, 25 Aug 99.
  997. Found a bug I introduced at the beginning of the Unicode changes -- two
  998. little CKOUNIs that were changed to UNICODE that shouldn't have been, which
  999. gave C-Kermit (but not K95) a random terminal character set upon startup.
  1000. ckuxla.c, 25 Aug 99.
  1001. Added UCS-2 support to TRANSMIT; cleaned up, commented, consolidated, and
  1002. tightened the code.  In fact, almost totally rewrote it.  Surprisingly, this
  1003. one turned out to be a lot more complicated than file transfer, CONNECT, or
  1004. TRANSLATE, but now it's done except for some minor loose ends.  transmit():
  1005. ckuus4.c, 25 Aug 99.
  1006. From Jeff:
  1007.  . More Telnet authentication changes.  ckcpro.w, ckuath.c
  1008.  . New Kerberized AIX 4.1 makefile target.
  1009. Fixed long lines and trailing blanks in ckuath.c.  25 Aug 99.
  1010. From Jeff, ckcmai.c, ckuath.c, 26 Aug 99:
  1011.  . proper handling of the case where the user authenticates as one name
  1012.    but wants to log in as someone else.
  1013.  . For instance, I want to authenticate as jaltman@CC.COLUMBIA.EDU but
  1014.    log into the host as 'root'.
  1015.  . When mutual authentication is performed I can get an encrypted
  1016.    session, but I still want to be prompted for the 'root' password if
  1017.    the 'root' account does not have a .k5login or .klogin file containing
  1018.    the authorized principal names.  Under no circumstances should we
  1019.    allow a user access to another user's account without appropriate
  1020.    credentials.  This is all fixed.
  1021.  . AUTH_USER means we know the user and the user is authorized either
  1022.    because they are logging into their own account or because they have
  1023.    been given permission to access the specified account name.
  1024.  . AUTH_VALID means we know the user but the user is not authorized to
  1025.    access the requested account without addiitional credentials.
  1026.  . AUTH_OTHER means we know the user but do not know the name the user
  1027.    wishes to log in under.
  1028.  . AUTH_UNKNOWN means we do not know who the user is but the person
  1029.    should be allowed to log in.
  1030.  . AUTH_REJECT means we do not allow the login to procede (if
  1031.    authentication is required)
  1032.  . These labels are now consistently used in ckuath.c
  1033. Added chartostr() to ckclib.[ch], to turn a char into a string (and if the
  1034. char is a control char, to return its name).  Convenient for printfs.
  1035. 26 Aug 99.
  1036. Added charset and term bytesize info to SHOW TRANSMIT.  ckuus5.c, 26 Aug 99.
  1037. From Jeff, ckuath.c ckuus7.c ckuusr.h ckcnet.c ckuath.h, 26 Aug 99:
  1038.  . auth k4 list should not have switches
  1039.  . added a /addresses switch to auth k5 list to display the hostnames and
  1040.    ip addresses associated with the tickets.
  1041.  . added the ip address to the information displayed by auth k4 list
  1042.  . IP Address info is necessary to help debug problems associated with
  1043.    multihomed machines.
  1044. Added TRANSMIT /TRANSPARENT to force text mode without charset translation,
  1045. regardless of current charset settings.  ckuus[r4].c, 26 Aug 99.
  1046. Fixed SET TERM CHAR <local> <remote> to use the *terminal* charset keyword
  1047. table, not the *file* one, for the remote charset.  ckuus7.c, 26 Aug 99.
  1048. Updated HELP text for Unicode.  ckuus2.c, 26 Aug 99.
  1049. Fixes from Jeff to a couple syntax errors in yesterday's changes.  ckuus[r4].c,
  1050. 27 Aug 99.
  1051. Changed SET TERM CHAR TRANSPARENT to set a flag that distinguishes between
  1052. "transparent" actually having been specified and tcsl == tcsr.  The difference
  1053. is important for TRANSMIT.  Changed SHOW TERM to TRANSPARENT only if the user
  1054. said TRANSPARENT; otherwise to show the two sets, even if they are the same.
  1055. ckuxla.c, ckuus[47].c, 27 Aug 99.
  1056. From Jeff: fix for a typo in v(protocol) evaluation.  ckuus4.c, 31 Aug 99.
  1057. Discovered that the TX_blah definitions in ckcuni.h contained a duplicate:
  1058. both TX_CP923 and TX_ELOT928 were defined as 94.  And then all the rest were
  1059. one too low.  Therefore the end of the txrinfo[] table (of function pointers)
  1060. was wrong in the last 8 positions.  Fortunately these were for sets we don't
  1061. use.  Fixed in ckcuni.h, 31 Aug 99.
  1062. Added support for the Hazeltine 1500/1520 graphics set based on reverse
  1063. engineering by Jeff of the HZ1520 "personality" of an IBM 3151 contributed by
  1064. John Simkiss.  ckcuni.[ch], 31 Aug 99.
  1065. Changed F001 debug() format (never used) to be like F111, except number is
  1066. shown in hex.  Also changed F000 to default to hex display for numbers that
  1067. are not single-byte chars.  ckuusx.c, 31 Aug 99.
  1068. Added special-case handling for UCS Line and Paragraph Separator characters
  1069. (LS and PS) to xgnbyte() (for translating file from UCS to Latin-1, etc, when
  1070. SENDing or TRANSLATing) and xpnbyte() (for translating incoming UCS2/UTF8 to
  1071. Latin-1, etc, when receiving files).  ckcfns.c, 31 Aug 99.
  1072. Discovered a bad bug in ucs2_to_utf8() -- it wasn't handling UCS-2 characters
  1073. greater than U+07FF.  My fault -- a careless workaround for compiler warnings
  1074. about "comparisons out of range".  Fixed in ckcuni.c, 31 Aug 99.
  1075. Changed u_to_b() to return(-2) if LS or PS encountered.  ckcuni.c, 31 Aug 99.
  1076. Changed UNIX CONNECT module to handle UTF-8 LS and PS (both are always treated
  1077. as CRLF).  ckucns.c, 31 Aug 99.
  1078. From Jeff:
  1079.  . Let's correct something I said several weeks back.  I swapped the
  1080.    meanings of AUTH_USER and AUTH_VALID.  AUTH_VALID means that not only
  1081.    could we authenticate the user but we were able to confirm that the
  1082.    user has authorization to access the specified account.
  1083.  . AUTH_USER only means that we could authenticate the user. It does not
  1084.    mean the user is authorized to access the specified account.
  1085.  . This distinction is very important on the server.  For instance:
  1086.      AUTH K5 INIT jaltman@KRB5.COLUMBIA.EDU
  1087.      TELNET /userid:root host
  1088.    means that the value of v(userid) on the server is "root" but
  1089.    unless there is specific authorization by 'root' to allow access
  1090.    by jaltman@KRB5.COLUMBIA.EDU the authtype will be AUTH_USER and
  1091.    not AUTH_VALID.  This means that although we know who
  1092.    jaltman@KRB5.COLUMBIA.EDU is, jaltman@KRB5.COLUMBIA.EDU must still
  1093.    demonstrate via a login that he is allowed access as "root".
  1094.  . For Kermit scripts we now have a v(authname) variable which will
  1095.    contain 'jaltman@KRB5.COLUMBIA.EDU'.  That way authorization lists
  1096.    can be used for the account specified by v(userid).
  1097. ckcmai.c ckuusr.h ckuus4.c ckuath.c security.txt ckcpro.w host.ksc, 1 Sep 99.
  1098. Also from Jeff, a fix to output from REMOTE commands in which the trailing
  1099. line terminator was lost.  ckcpro.w, 1 Sep 99.
  1100. In XLATE, range-check csets before using them as array subscripts.  ckuus4.c,
  1101. 1 Sep 99.
  1102. Jeff reported that constructions like "if xxx { commands, FORWARD label }"
  1103. failed to find the label.  Subtle problem, which seems to have been with us
  1104. always.  Diagnosis: the items in the braces are a macro; the FORWARD code
  1105. loops thru the macro definition starting at the current position, but only if
  1106. there are enough chars left in the macro definition to contain the label.  In
  1107. this case there aren't and the test for how the loop ended ("if (i == m)")
  1108. didn't work.  This would tend to happen whenever FORWARD was the last command
  1109. in a macro.  The correct test is "if (i >= m)".  Fixed in dogoto().  Also
  1110. increased max label length from 50 to 64 or 255 (depending on BIGBUFOK).
  1111. ckuus6.c, 1 Sep 99.
  1112. Somebody asked why we don't have an APPEND command if we have COPY, RENAME,
  1113. DELETE, etc.  I added COPY /APPEND -- took three minutes.  Works with other
  1114. COPY switches except /SWAP-BYTES.  I used the cheating method (fopen,
  1115. fread/fwrite, fclose) since the zcopy() API doesn't provide for appending.
  1116. ckuus6.c, 1 Sep 99.
  1117. A couple minor adjustments to pattern lists.  ckcmai.c, 1 Sep 99.
  1118. Migrated CONNECT changes for Unicode LS and PS to ckucon.c and ckvcon.c,
  1119. 1 Sep 99.
  1120. Thought about implications of LS and PS to TRANSMIT command, but I decided to
  1121. do nothing since I have no access to an actual UTF-8 console (e.g. on Plan 9)
  1122. and therefore no way of knowing how incoming UTF-8 characters -- especially
  1123. LF and PS -- are echoed.
  1124. From Jeff:
  1125.  . What do we do when the client is logging into IKSD with the following
  1126.    properties:
  1127.      SET TELOPT AUTH REQUIRED
  1128.      SET LOGIN USER anonymous
  1129.    Up until today the client would fail because IKSD would see the
  1130.      IAC SB AUTH NAME anonymous IAC SE
  1131.    message and reject telnet authentication because you can't
  1132.    authenticate "anonymous".  However, that is not really true.  Now that
  1133.    I properly understand and have implemented the distinction between
  1134.    AUTH_VALID and AUTH_USER there is no reason to reject "anonymous" for
  1135.    all authentication methods.  When Kerberos is being used it makes
  1136.    perfect sense for someone to authenticate using their Kerberos ID but
  1137.    then log into the server as "anonymous".  This shows up as:
  1138.      authstate = AUTH_USER
  1139.      authname  = Kerberos ID
  1140.      userid    = anonymous
  1141.    Therefore, we automatically log the user in as "anonymous" with
  1142.    password equal to their Kerberos ID.
  1143.    This does not work with SRP because it is not possible with SRP to
  1144.    authenticate as one ID and login as another.
  1145.  . Confirmed that v(userid) is always being set to the correct value.
  1146.  . Added a message to zvpass() to indicate anonymous logins for symmetry
  1147.    with the non-anonymous login message.
  1148. ckcmai.c ckufio.c ckuath.c, 2 Sep 99.
  1149. Added support for the Unicode General Punctuation block (0x2000-206f) to the
  1150. tx_blah() functions -- various-width spaces and dashes, quotation mark
  1151. variations, etc.  ckcuni.c, 2 Sep 99.
  1152. Changed UNIX sysinit() to check LOGNAME for userid[] initialization if USER
  1153. not defined.  ckutio.c, 2 Sep 99.
  1154. Changed the UNIX version to call ckufio.c's whoami() function (formerly
  1155. static) to expand v(user), rather than just printing uidbuf[].  This returns
  1156. the ID of the actual logged-in (or su'd) user, and works for IKSD too.  But in
  1157. testing this, I discovered that tilde-expansion did not (never did) work in
  1158. IKSD so I fixed that too.  ckufio.c, ckuus4.c, 2 Sep 99.
  1159. If the nopush variable was set, but NOPUSH was not defined at compile time,
  1160. every command that might invoke the shell or another program had to check this
  1161. variable, and not all of them did.  One example was "REMOTE blah | command"
  1162. (now fixed).  But to ensure no others slip through, I added a check for nopush
  1163. in zxcmd(), zshcmd(), and zsyscmd().  ck[uv]fio.c, 2 Sep 99.
  1164. Ditto for ttruncmd() and the NET_CMD case of ttopen(), ckutio.c, 2 Sep 99.
  1165. Added a new symbol XXNOTAV to ckuusr.h, to be used as the keyword value of any
  1166. command that is configured out.  For example, when NOPUSH is defined there was
  1167. no PUSH command, but now when NOPUSH is defined, we can leave the keyword in
  1168. but make its value XXNOTAV.  All commands whose value is XXNOTAV absorb the
  1169. whole command (via cmtxt()) and then print a message to the effect that
  1170. "command 'blah' is not configured in this version of Kermit" and fails, which
  1171. should be less confusing than beeping and printing a no-such-command message
  1172. after the first keyword.  Did this for most classes of top-level commands
  1173. except NOXFER (which nobody uses) and NOFRILLS (since the point of that one is
  1174. to save space).  ckuusr.[ch], ckuus2.c, 2 Sep 99.
  1175. Fixes from Jeff to "help func" + new help text for the Kerberos functions.
  1176. ckuus2.c, 3 Sep 99.
  1177. Fix from Jeff to a mistake in my ckcuni.c changes yesterday.  3 Sep 99.
  1178. New code from Jeff to have SHOW NET display all the IP address of the local
  1179. host in case it has more than one.  ckuus4.c, 3 Sep 99.
  1180. Fixed some #ifdefs to allow No-Unicode builds: ckuus4.c, 3 Sep 99.
  1181. From Jeff: corrections to getlocalipaddr() and getlocalipaddrs(), ckcnet.[ch],
  1182. 3 Sep 99.
  1183. Changed FILE DISPLAY tags from SENDING and RECEIVING to SEND and RECV so server
  1184. messages line up better.  ckuusx.c, 4 Sep 99.
  1185. Testing RESEND with a "set host * xxxx" server on the far end became confused
  1186. very quickly when RESEND seemed to always work instantly without sending
  1187. anything.  Reason: When C-Kermit thinks it's in local mode (as it does when
  1188. told to "set host *"), it automatically DISABLEs DELETE to protect itself
  1189. against autodownload and APC "letter bombs".  But when DELETE is DISABLEd,
  1190. FILE COLLISION becomes RENAME.  So if a file named "x" exists and I send a new
  1191. copy, the new copy becomes "x.~1~".  If the send is interrupted and then I
  1192. "resend x", the receiver looks at the *original* x, not x.~1~ and either says
  1193. "don't bother, it's already here" (if my copy is not bigger than the copy on
  1194. the other end), or worse, corrupts the result.  Of course the problem goes
  1195. away if you tell the connection receiver to ENABLE DELETE.  I don't see any
  1196. other way out of this mess...
  1197. Anyway, once this was sorted out, many repetitions of sending a file,
  1198. interrupting the transfer, and resending it multiple times before the transfer
  1199. was finished failed to show any kind of problem or corruption of the received
  1200. file.
  1201. Those obnoxious HINT messages were coming out every time a transfer was
  1202. interrupted from the keyboard.  This was happening because the "interrupted"
  1203. flag had become overloaded (see notes from June 29th).  Separated the
  1204. different meanings into different flags: "interrupted" means a file transfer
  1205. was interrupted from the keyboard by the user; "fatalio" means a transfer was
  1206. interrupted because of a fatal i/o error (ttinl() fails or ttchk() returns -1).
  1207. Added a catch-all in case input() returns 'q' for neither of those reasons (it
  1208. shouldn't).  ckcfn[s2].c, ckcpro.w, ckuus[5x].c, 4 Sep 99.
  1209. Sending BYE to a "set host * xxx" server had the rather surprising effect of
  1210. logging out the job under which it was running.  Since these jobs are usually
  1211. set up by hand, with the owner in attendence, this could be harmful -- letting
  1212. another person kill other programs the user might have running (mail, editor,
  1213. etc).  So in the TCP server case (but not IKSD) made BYE received by server
  1214. cause Kermit to exit rather than log out its own job.  ckcpro.w, 4 Sep 99.
  1215. Client, after sending BYE, should not be receiving EXIT warnings.  Made sure
  1216. that after sending BYE and receiving the ACK (or failing to after trying),
  1217. the client calls ttclos().  ckcpro.w, 4 Sep 99.
  1218. Some minor improvements to SHOW PROTOCOL display suggested by Lucas Hart.
  1219. ckuus4.c, 4 Sep 99.
  1220. Jim Whitby reported complaints about:
  1221.   sxx = xls[tcs][csin]; /* translation function */
  1222.   rxx = xlr[tcs][csout]; /* pointers. */
  1223. in ckuus4.c on Unixware 7.1 ("declaration out of scope").  I was finally able
  1224. to reproduce them; xls[][] and xlr[][] were declared twice. ckuus4.c, 4 Sep 99.
  1225. Corrected typos in top-level command keyword table for new "not available"
  1226. entries.  ckuusr.c, 4 Sep 99.
  1227. Preliminary run-through of major feature sets & platforms:
  1228.   Full VMS...ok (VAX VMS 5.5-2 VAX C 3.2 UCX 2.0)
  1229.   NoNet VMS..?? <-- Doesn't work yet...
  1230.   Full Unix..ok (SunOS gcc - ANSI - select())
  1231.   Full Unix..ok (SunOS gcc - ANSI - fork())
  1232.   Full Unix..ok (SunOS cc - no ANSI)
  1233.   Full Unix..ok (HP-UX cc - no ANSI)
  1234.   Full Unix..ok (Unixware 7.0 - ANSI)
  1235.   Full Unix..ok (Linux RH 5.2 gcc - ANSI)
  1236.   linuxnotcp.ok (Linux RH 5.2 gcc - ANSI)
  1237.   linuxnc....ok (Linux RH 5.2 gcc - ANSI)
  1238.   Krb4.......ok (SunOS)
  1239.   Krb5.......?? (Linux) <-- NO
  1240.   Krb4+Krb5..?? (Linux) <-- NO
  1241.   NOUNICODE..ok
  1242.   NOCSETS....ok
  1243.   NONET......ok
  1244.   NOLOCAL....ok
  1245.   NODIAL.....ok
  1246.   MINIDIAL...ok
  1247.   NOSPL......ok
  1248.   NOICP......ok
  1249.   NOSHOW.....ok
  1250.   NOHELP.....ok
  1251.   NOPUSH.....ok
  1252.   NODEBUG....ok
  1253. As always, much #ifdef and declaration juggling required:
  1254. ckuus[r467x].c, ckctel.c, ckcfns.c, ckudia.c, ckuscr.c.  4 Sep 99.
  1255. From Jeff: Updated makefile for Linux Kerberos 5 builds, a new error message
  1256. for bind failures, some auth changes: makefile, ckcnet.c, ckuath.c, 5 Sep 99.
  1257. Linux Krb5 builds now ok.
  1258. To clear up ENABLE/DISABLE DELETE vs SET HOST * confusion, changed ENABLED
  1259. macro to take tcp_incoming into account (Jeff's suggestion).  Moved
  1260. declaration of tcp_incoming to ckcmai.c, added an extern declaration for it to
  1261. ckcker.h (where ENABLED is defined, so we can use ENABLED() in any module
  1262. without getting confused by undefined symbol errors for a symbol we can't
  1263. see), removed extern dcls for it that were previously in ckcnet.c, ckctel.c,
  1264. ckucns.c, ckucon.c, and ckuus4.c.  For ENABLE/DISABLE purposes, REMOTE means
  1265. (!local || tcp_incoming) and LOCAL means (local && !tcp_incoming).  5 Sep 99.
  1266. Some research revealed that errno could be referenced in any version of VMS
  1267. (at least back to 5.5) if we include <errno.h>.  Some unguarded references to
  1268. errno had crept in since Beta.09, which were making VMS NONET builds fail.
  1269. Added #include <errno.h> for VMS to ckcdeb.h.  5 Sep 99.  (Except the SPCVXA
  1270. installation, which has messed-up header files.)
  1271. Corrected some syntax problems in VMS files: ckvfio.c didn't like arithmetic
  1272. involving a mixture of signed and unsigned char pointers; ckvcon.c needed its
  1273. chkaes() routine converted from void to int.  Now both UCX and NONET builds
  1274. are OK on both VAX and Alpha.  5 Sep 99.
  1275. Corrected a typo in the STATISTICS command (introduced yesterday) that could
  1276. cause garbage to be printed in the "status" field (or worse).  ckuus4.c,
  1277. 5 Sep 99.
  1278. Cleaned out some declared but unused variables.  Most modules.  5 Sep 99.
  1279. Recent changes to haddr_list stuff broke HP-UX 5.00 Win/TCP, had to undef
  1280. HADDRLIST for HPUX5.  ckcnet.h, 5 Sep 99.
  1281. The new code for v(user) had the prototype for whoami() inside some #ifdefs
  1282. it should have been outside of.  ckuus4.c, 5 Sep 99.
  1283. Added NOCSETS and NOSPL to revive 16-bit QNX build.  Then it compiled but
  1284. Telnet didn't work.  Built with NONET.  But it still doesn't work -- it beeps
  1285. all the time, won't transfer files in remote mode, etc ("send xxx" complains
  1286. read access denied when the permissions are fine, etc).  Since nobody has ever
  1287. asked for this version, we'll retire until/unless somebody does.  makefile,
  1288. 5 Sep 99.
  1289. On a VMS 7.2 system that has Multinet installed as the production network but
  1290. also has UCX xxx available, CKVIOC.C wouldn't build because UCX$C_IOCTL was
  1291. not defined for some reason (everything else was OK).  Added a clause to
  1292. define as "2" if it was not defined.  ckvioc.c, 5 Sep 99.
  1293. From William Bader: new ckvold.com to account for ckcuni.[ch] and ckvold.c
  1294. that include fmod() missing from old math library.  6 Sep 99.
  1295. Went back and undid the sweeping VMS errno change, since it was fatal on most
  1296. Multinet systems.  Instead, added explicit #include <errno.h> directives to
  1297. each module affected, after including all other header files, if VMS is
  1298. defined and TCPSOCKET is not defined.  ckcdeb.h, ckuus[67].c, 6 Sep 99.
  1299. Removed double declarations for "i" from two routines in ckucon.c to fix
  1300. X.25 builds.  6 Sep 99.
  1301. ---Beta.10---
  1302. A couple small changes for the Amiga from Steve Walton.  ckusig.c, ckuus5.c,
  1303. 7 Sep 99.
  1304. Some syntax & makefile fixes for Dynix/ptx 2.16 from Roger J. Allen.
  1305. ckuus6.c, makefile.  8 Sep 99.
  1306. Minor syntax changes for compilation errors in Coherent 4.2 build
  1307. ("declaration hides parameter", "trailing comma in initializer list", etc).
  1308. ckucmd.c, ckuus[23456].c, ckcfns.c, ckctel.h, ckcuni.c, 8 Sep 99.
  1309. From Jeff:
  1310.  . I removed a bunch of #includes that were no
  1311.    longer necessary and reduced the number of #defines.
  1312.  . updated the makefile entries for krb5 to use the
  1313.    /usr/local/{lib,include} trees instead of the kerberos distribution
  1314.    tree since we no longer reference non-public header files.
  1315.  . Put in CM_ABR entries for "binary-transfer"
  1316. makefile ck_crp.c ckuath.c ckuat2.h ckuath.c ckuus3.c, 8 Sep 99.
  1317. New consolidated makefile entries for NetBSD.  makefile, 8 Sep 99.
  1318. Corrections to pyrdcosx, sni543, and sni544 entries from Graham Jenkins.
  1319. makefile, 8 Sep 99.
  1320. New dynixptx216 makefile entries from Roger Allen.  Workaround for asm
  1321. symbol-table overflow in ckcuni + new gcc entry.  makefile, 9/9/99.
  1322. Fixes from Jeff to typos in my changes from yesterday: ckucmd.c, ckuus4.c,
  1323. 9 Sep 99.
  1324. Put base64 stuff in #ifndef NOSPL and moved query declaration from ckuus7.c
  1325. to ckcmai.c to fix 2.11 BSD build.  9 Sep 99.
  1326. I had added an escape clause to the SCO 2.3.4 builds for not optimizing
  1327. ckuus3.c because last time I tried it seemed to get stuck forever, but
  1328. apparently the sticking was because of something else because now it builds
  1329. fine, so removed the escape clause.  makefile, 9 Sep 99.
  1330. From Jeff: Disable WHO, HOST, etc, in IKSD.  ckcmai.c, ckcfns.c, 9 Sep 99.
  1331. From Jeff: Add a note to docs that "-0" includes TELOPT KERMIT REFUSE REFUSE.
  1332. ckermit2.txt, 9 Sep 99.
  1333. If SET SEND PATHNAMES OFF, strip path from filespec sent back in the ACK to
  1334. the F packet.  Believe it or not, there is a Kermit program (for MUMPS) that
  1335. compares the returned name to the sent one and fails if they are not the same.
  1336. But then I realized that SEND PATHNAMES is already OFF by default, so this
  1337. would be a bad change, since it takes away the ability of the receiver to tell
  1338. the sender where the file went in the default case.  So I backed off and added
  1339. a new (invisible) command SET F-ACK-PATH { ON, OFF }, and it's ON by default.
  1340. Documented in Section 4.22.4 of ckermit2.txt.  ckuusr.h, ckcmai.c, ckcpro.w,
  1341. ckuus[r3].c, 9 Sep 99.
  1342. Discovered that FOPEN /APPEND did not (and never did) work if the file did
  1343. not already exist.  The code for this case was there, but never tested, and
  1344. needed a small fix.  Now it works.  ckuus7.c, 9 Sep 99.
  1345. Noticed that packet i/o statistics were wrong for receiving files when
  1346. streaming -- ACKs were counted that shouldn't have been (stats were correct,
  1347. however, when sending).  Fixed in spack(), ckcfn2.c, 9 Sep 99.
  1348. It was bothering me that to make a Telnet connection to a misbehaving Telnet
  1349. server, you had to SET TELNET WAIT OFF first, because this is sticky and
  1350. affects all subsequent connections unless you remember to undo it.  So I added
  1351. /WAIT and /NOWAIT switches to SET HOST and TELNET to specify [no] waiting
  1352. just for this connection.  I implemented it in the stupidest possible way,
  1353. which probably needs improvement.  I simply save tn_wait_flg and set it to the
  1354. switch value before calling ttopen(), then restore it immediately upon return
  1355. from ttopen(), since hanging onto it and restoring it at some later time would
  1356. be pretty tricky.  VERY tricky, in fact.  ckuusr.h, ckuus7.c, ckermit2.txt,
  1357. 9 Sep 99.
  1358. Changes from Jeff... refinements to ENABLE/DISABLE for IKSD, generalization
  1359. of TELNET / SET HOST switches to (a) include other relevant parameters, and
  1360. (b) make then persist throughout the connection and restore them when the
  1361. connection is closed; fix a typo in my F-ACK-PATH code; ckuus7.c ckuath.c
  1362. makefile ckuus3.c ck_crp.c ckcnet.c ckctel.c ckuus6.c ckuusr.c.  Supplied
  1363. some missing #ifdefs in ckuus3.c.  12 Sep 99.
  1364. Protected #include <term.h> with #ifndef NOTERMCAP to fix linuxnc build on
  1365. systems that actually do not have <term.h> (because they failed to choose
  1366. ncurses at Linux install time).  ckuusx.c, 12 Sep 99.
  1367. At the suggestion of Markus Kuhn, replaced utf8_to_ucs2() with a more robust
  1368. version adapted from Xfree86 xterm (Thomas Dickey).  The previous version
  1369. (Mark Davis, Unicode website samples) only works with well-formed UTF-8
  1370. sequences.  The new version works equivalently but should handle malformed
  1371. sequences properly.  Unfortunately, the caller must treat the return value a
  1372. bit differently now, and this can be a bit complicated because under certain
  1373. conditions, it can return *two* values (0xfffd followed by valid character)
  1374. when a UTF-8 sequence is interrupted by (say) an ASCII character.  ckcuni.c,
  1375. 12 Sep 99.
  1376. With this change, an invalid UTF-8 sequence becomes 0xfffd, and if it was
  1377. interrupted by the valid character, the valid char is lost.  This is better
  1378. than before, but not ideal.
  1379. The callers of utf8_to_ucs2() are:
  1380.   ckcfns.c: rc = utf8_to_ucs2(ch,&us);  <-- In xpnbyte()
  1381.   ckcfns.c: rc = utf8_to_ucs2(ch,&us);  <-- In xgnbyte()
  1382.   ckcuni.c: x = utf8_to_ucs2(c,&ucs2);  <-- In u_to_b()
  1383. Let's see if we can fix them...
  1384. The problem with u_to_b() (which is called by the CONNECT modules and by
  1385. TRANSMIT) is that it has an argument -- the next UTF byte.  So there's no good
  1386. way to save up a second value and return it next time, because we'll get
  1387. increasingly far behind.  But we can make it return a special negative code,
  1388. say -9, to mean: "Use the error character, and then call me again to get the
  1389. next character".  But that won't work, because there's no special arg it can
  1390. be called with that says to return the saved character, because its arg is a
  1391. CHAR.  So we need a second routine for that, u_to_b2().  OK, that was easy:
  1392. ckcuni.c, ckucns.c, ckuus4.c, 12 Sep 99.
  1393. xpnbyte() and xgnbyte() were a bit trickier but I made a first stab at it.
  1394. The resulting Kermit still seems to handle well-formed UTF-8 OK (as it did
  1395. before), but supposedly now should handle invalid UTF-8 sequences by the book.
  1396. Sent the result off to Markus for more testing.  ckcfns.c, 12 Sep 99.
  1397. New (tested) NetBSD entries from Graham Jenkins.  Makefile, 18 Sep 99.
  1398. Updated Commodore Amiga source files from Steve Walton, mainly addition
  1399. of ttgwsiz() and isdir(): cki*.c, 18 Sep 99.
  1400. Added LinuxPPC makefile entry from Nick Strauss <nicks@carriage.chesco.com>.
  1401. makefile, 19 Sep 99.
  1402. Lucas Hart reported that "set file download-directory ?" listed regular
  1403. files as well as directories.  Actually the same was true of any command that
  1404. parsed a directory name, including CD.  Fixed in cmifi2(): ckucmd.c, 19 Sep 99.
  1405. Mark Sapiro reported that we still have the problem with timestamps of
  1406. incoming files in BSDI being off due to DST confusion.  Steve Schultz's
  1407. diagnosis was that the BSD44 path was the tm_gmtoff adjustment already
  1408. accounted for DST, so when adjusting for DST after that, we were effectively
  1409. subtracting two hours instead of one.  The fix of minimum boat-rocking was to
  1410. adjust for DST only in the non-BSD44 case, rather than always.  zstrdt():
  1411. ckufio.c, 19 Sep 99.
  1412. Accumulated changes from Jeff since last week:
  1413.  . Make v(filename) retain name of last file transferred.  ckuus4.c.
  1414.  . Fix clearchannel auto.  ckuus[25y].c, ckcfns.c, ckermit2.txt.
  1415.  . Fix streaming vs draining after E-Packet while receiving.  ckcfn2.c.
  1416.  . NOPUSH was blocking client end of RHOST.  ckuus7.c.
  1417.  . REMOTE { SET, ASG, COPY, RENAME } did not set success=1 and so would
  1418.    not resume CONNECT mode when invoked via autodownload.  ckcpro.w.
  1419.  . Reinstates the use of select() on TCP/IP connections when streaming so
  1420.    we can detect connection loss.  ckcnet.c.
  1421. The last one + the clearchannel changes also result in a dramatic performance
  1422. improvement on certain kinds of connections, notably TCP/IP over ADSL (in one
  1423. trial, 4BM of precompressed data was transferred 2.6 times faster than with
  1424. FTP.
  1425. Fixed v(filename) to work more consistently, since sometimes it was empty
  1426. after a successful file-group transfer because (for some unknown reason)
  1427. filnam[] was empty.  Rather than figure out why this would be and "fix" it
  1428. (probably breaking something else) I use the WHERE command info if filnam[]
  1429. is empty.  ckuus4.c, 19 Sep 99.
  1430. Added RELIABLE and CLEARCHANNEL to STATISTICS /VERBOSE display.  This shows
  1431. not the settings (usually AUTO, not very informative), but whether the
  1432. features were actually negotiated and used.  ckuus4.c, 19 Sep 99.
  1433. Added sco32v505udk makefile target on advice from Thomas M. Gill <tom@hcd.net>,
  1434. who says in this case -DDCLTIMEVAL must be added.  makefile, 19 Sep 99.
  1435. Added uw2iksd entry (Unixware 2, like 7, needs shadow password support for
  1436. authentication).  makefile, 19 Sep 99.
  1437. At Lucas Hart's suggestion, make bzero and bcopy be macro definitions in VMS,
  1438. replacing themselves by memset and memcpy, to squelch the warnings we've been
  1439. getting about them all these years.  Probably a bad idea...  (Another idea
  1440. would be to *replace* all references to bzero and bcopy with memset &
  1441. memcpy but they're not portable either so let's try this first...)  Builds and
  1442. runs OK on Alpha VMS 7.1 UCX; Alpha VMS 7.1 TGV; VAX VMS 5.5-2 UCX; VAX VMS
  1443. 7.1 TGV (this one always got errors before) -- so let's keep it.  ckcnet.h,
  1444. 19 Sep 99.
  1445. The newest DECC compiler, 6.2FT, spews out reams of %CC-W-NOTULALQUA warnings
  1446. for constructions like memmove(&xabfhc_ofile.xab$w_lrl,filptr,2), having to do
  1447. with struct member alignment.  The consensus is that these warnings are both
  1448. harmless and overzealous -- they might be important if we were moving multiple
  1449. members of a struct at once and assuming a fixed number of bytes (when the
  1450. Alpha might insert padding and the VAX might not).  But we're not doing that.
  1451. Suggestions for making the warnings go away (like #pragma nomember_alignment,
  1452. or adding compiler switches that only work on some versions of some compilers)
  1453. are dangerous, so we'll just live with the warnings.
  1454. Lucas says DECC -- at least back to V1.3 (1993) -- has an /UNSIGNED_CHAR
  1455. switch (which is not the default).  Tried building C-Kermit on an Alpha with
  1456. DECC 5.5-002 with p4 = "/UNSIGNED_CHAR" -- perfect, not a single warning.  In
  1457. ckvker.com, at the DECC: label, it is probably OK to change 'ccopt =
  1458. "/decc"+ccopt' to 'ccopt = "/decc/unsigned_char"+ccopt'.
  1459. Changed VMS C-Kermit IDs from "7.0.195" to "7.0.196" (for ANALYZE/IMAGE).
  1460. ckvker.com, ckvold.com.  19 Sep 99.
  1461. From Lucas:
  1462.  . Fixes for DELETE in VMS, plus implementation of /ASK.  ckuus6.c.
  1463.  . Fix recovery from illegal filenames in the LOG command.  ckvfio.c,ckuus4.c.
  1464. Added implementation of /LIST to Lucas's implementation of /ASK, and added
  1465. code to error out if user included /SIMULATE on platforms that don't support
  1466. it.  ckuus6.c, 19 Sep 99.
  1467. Fixes needed for VOS, 20 Sep 99:
  1468.  . Shuffle declaration of inserver in ckctel.c.
  1469.  . Shuffle declaration of xaskmore in ckuus7.c.
  1470. Correction to kstart() from Jeff.  ckcfn2.c, 20 Sep 99.
  1471. Remove some more now-superfluous bcopy/bzero definitions from ckcnet.h,
  1472. 20 Sep 99.
  1473. For the benefit of DECC 6.2, add a DECC-only replace for the VMS/SMG printw()
  1474. replacement that handles "varargs".  ckuusx.c, 20 Sep 99.
  1475. There has never been a way to give a DIAL command that specifies a list of
  1476. phone numbers to try until one answers, except by creating a dialing directory
  1477. and putting multiple entries in it under the same name.  This is a big pain,
  1478. especially when using the K95 dialer.  Now the DIAL command accepts "makelist"
  1479. notation, as in:
  1480.   dial {{7654321}{8765432}{9876543}}
  1481. These have to be actual numbers to dial, not names of dialing directory
  1482. entries.  Conversely, dialing directory entries can not contain lists like
  1483. this.  Otherwise, the numbers are treated as if they had been fetched from the
  1484. dialing directory; they can be in literal or portable format, etc.  ckuus6.c,
  1485. 20 Sep 99.
  1486. Updated ICL makefile targets for IKSD.  21 Sep 99.
  1487. Fixes for #ifdefs vs Telnet variables from Jeff.  ckuus[37].c, 21 Sep 99.
  1488. From Jeff: debug stmt added to ckuath.  Cleaned up long lines.  21 Sep 99.
  1489. From Jeff: improved handling of Telnet negotiation timeouts.  ckctel.c,
  1490. ckcnet.c, 21 Sep 99.
  1491. SET PROTOCOL was invisible for non CK_XYZ builds, but people still need to
  1492. use it to set the Kermit upload/download command strings, so made it visible
  1493. in all cases.  ckuusr.c, 21 Sep 99.
  1494. Fixed HELP SET PROTOCOL for non-XYZ case.  ckuus2.c, 21 Sep 99.
  1495. Another tn_wait declaration fix from Jeff.  ckuus7.c, 22 Sep 99.
  1496. From Jeff: some improvements to the Telnet negotiation timeout code and
  1497. messages.  ckctel.c, 22 Sep 99.
  1498. Updated HELP DIAL text for phone-number lists.  ckuus2.c, 22 Sep 99.
  1499. It seems that ever since C-Kermit 6.0, C-Kermit prompts and image-mode
  1500. commands have not appeared in VMS batch logs.  This was intentional -- most
  1501. people did not want them there.  However, there was no way to undo this.
  1502. Switched the code around so that starting Kermit with -z on the command line
  1503. or giving it a SET BACKGROUND OFF command after it started would enable
  1504. issuing of prompts and echoing of commands even in batch.  Also enabled the
  1505. file-transfer display in batch, but forced it to BRIEF if it was set to CRT or
  1506. FULLSCREEN.  ckcker.h, ckvtio.c, ckuus[3]x.c, ckucmd.c, 23 Sep 99.
  1507. Another unhappy discovery: VMS C-Kermit no longer reads image data from a DCL
  1508. command procedure executed at the terminal.  This is entirely separate from
  1509. the batch issue -- Kermit *does* read image data in batch, even when executing
  1510. the exact same .COM file.
  1511. Discovered that the -d command-line option also set the timestamp feature -- I
  1512. probably put that there for some testing and forgot to take it out.  So now
  1513. it's out.  ckuus4.c, 23 Sep 99.
  1514. OK, now I can compare the three VMS debug logs...
  1515.   congm sys$getjpiw mode_flags=3 <-- Interactive
  1516.   congm sys$getjpiw mode_flags=3 <-- DCL
  1517.   congm sys$getjpiw mode_flags=2 <-- Batch
  1518. So DCL and Interactive look the same.  However, isatty(0) fails for DCL and
  1519. Batch but succeeds for Interactive.  So I made a new flag, "itsatty", for VMS
  1520. that is nonzero if sys$input is the terminal, which it isn't in a batch job or
  1521. in a DCL command procedure.  And I changed the hack in VMS coninc() to return
  1522. getchar() if (!itsatty), rather than only if (batch).  Now the documentation
  1523. is right again.  ckvtio.c, ckvbwr.txt, 23 Sep 99.
  1524. From Jeff: Back off on le_buf echoing changes for all but K95; add
  1525. SO_DONTROUTE support.  ckcnet.c, 23 Sep 99.
  1526. User interface for SO_DONTROUTE from Jeff.  ckuusr.[ch], ckuus[34].c,
  1527. ckcmai.c, 24 Sep 99.
  1528. New security.txt and telnet.txt from Jeff.  24 Sep 99.
  1529. Peter E reported that LOG commands didn't work any more, e.g.:
  1530.   [/tmp_mnt/eip/cku195/b10+04/] C-Kermit>log connections
  1531.   ?Invalid: log connections
  1532. The problem is because of the change from Lucas Hart of a few days ago, in
  1533. which the LOG command returns -2 if zfnqfp() returns NULL.  In this case
  1534. zfnqfp() returns NULL because realpath() fails, evidently having something to
  1535. do with being called by root.  So I backed off on Lucas's change for the LOG
  1536. command to fail if zfnqfp() failed.  The real fix would be for VMS zchko()
  1537. (and for that matter, zopeno()) to fail gracefully when given an illegal
  1538. filename.  ckuus4.c, 24 Sep 99.
  1539. Put v(line) back the way it was in 6.0, so it always shows something,
  1540. rather than returning the empty string when in remote mode.  I don't know why
  1541. it was changed, but some people didn't like it.  ckuus4.c, 24 Sep 99.
  1542. The old problem with packet 0...
  1543.  . Client sends I to server.
  1544.  . Server sends ACK(I) back to client.
  1545.  . Client sends REMOTE blah to server.
  1546.  . Server doesn't receive it, so resends ACK(I).
  1547.  . Since these are all packet 0, client thinks this is ACK(REMOTE blah)
  1548. Previously we had a heuristic in place for GET: If we sent a GET command and
  1549. were answered by an ACK, we knew this had happened because GET can never be
  1550. answered by an ACK (see <get>Y state).  But a REMOTE command can get a
  1551. short-form answer, which is in an ACK; when the ACK comes, the client prints
  1552. the answer and then quits, thinking the transaction is over.  This actually
  1553. turns out to be OK with the server too, since as far as the server is
  1554. concerned, the I/Y exchange is a complete transaction too.  The problem is,
  1555. the requested REMOTE operation never took place.  So a new (ultra-gross)
  1556. heuristic was added.  At <ipkt>Y, we save a copy of the contents of the
  1557. I-packet.  Then at <rgen>Y, we check to see if the contents of the ACK we just
  1558. got match those from ACK(I) and if so, we resend the REMOTE command packet and
  1559. wait for another ACK.  All of this code is within #ifdef PKTZEROHACK..#endif,
  1560. and confined to ckcpro.w.  It doesn't seem to hurt anything, but it's hard to
  1561. set up a test case to actually force the condition.  24 Sep 99.
  1562. Added a (char *) cast to rdatap, which is (CHAR *), in the new <rgen>Y code.
  1563. ckcpro.w, 27 Sep 99.
  1564. Added an x-ref from HELP ECHO to XECHO and WRITE SCREEN.  ckuus2.c, 27 Sep 99.
  1565. From Jeff, 27 Sep 99:
  1566.  . Fixed typos in SET EDITOR code: ckuus[r4].c.
  1567.  . Fixed some mistakes in v(hwparity) and v(serial): ckuus4.c.
  1568.  . Shuffled some Kerberos & SRP #ifdefs: ckcdeb.h, ckcfns.c.
  1569. Fixed a problem Jim Whitby noticed with quoting in ELSE statements.  This
  1570. problem was introduced when I unified IF and XIF, and occurs only when
  1571. ELSE begins on a line, followed by a { command list } rather than a single
  1572. command.  The solution (gross) was to make a special version of pushcmd()
  1573. (called pushqcmd()) for this situation, which doubles backslashes while
  1574. copying, BUT ONLY IF it's a command list (i.e. starts with "{"); otherwise
  1575. we break lots of other stuff.  Result passes Jim's test and still passes
  1576. ckedemo.ksc and iftest.ksc.  ckucmd.c, ckuus6.c, 27 Sep 99.
  1577. After learning that QNX does not always include TCP/IP, added a qnx32nonet
  1578. makefile target.  28 Sep 99.
  1579. Put the (char *) cast back in the strncmp() call in <rgen>Y; I don't know
  1580. why it keeps disappearing....  ckckpro.w. 28 Sep 99.
  1581. From Jeff: Fix confusion between #ifdef IKSD and #ifdef CK_LOGIN, allowing
  1582. a clean separation of the two concepts, and therefore IKSD implementations
  1583. on platforms that don't have authentication.  Most modules, 30 Sep 99.
  1584. Put the (char *) cast back in the strncmp() call in <rgen>Y; I don't know
  1585. why it keeps disappearing....  ckckpro.w. 30 Sep 99.
  1586. Changed ROBUST macro definition to also SET RELIABLE and (where appropriate)
  1587. CLEARCHANNEL OFF.  ckuus5.c, 30 Sep 99.
  1588. The previous change had no effect since the sequence SET RELIABLE OFF, TELNET
  1589. xxx also had no effect -- Kermit would SET RELIABLE ON anyway.  The problem
  1590. is that it had no way of knowing whether RELIABLE was OFF because the user
  1591. commanded it, or because it was set to OFF automatically when the previous
  1592. connection was not reliable.  Fixed with Yet Another Global Flag.  ckcmai.c,
  1593. ckuus[37y].c, 30 Sep 99.
  1594. From Jeff: Replace a missing line in ckuus4.c from yesterday's merge. 1 Oct 99.
  1595. From Jeroen Scheerder <J.Scheerder@csi.nl>: makefile target for Mac OS X 1.0.
  1596. (straight "make bsd44" works out of the box).  makefile, 1 Oct 99.
  1597. Also from Jeroen Scheerder: supply a missing semicolon in ztime().  ckutio.c,
  1598. 1 Oct 99.
  1599. Added Mac OS X symbols, designer banner. ckcdeb.h,ckuver.h,makefile, 1 Oct 99.
  1600. From Michael Weiser <michael@weiser.saale-net.de>: Fill in some missing
  1601. #ifndef NOXFER..#endif clauses.  ckucns.c, ckufio.c, ckuus[r47x].c, ckuscr.c,
  1602. 1 Oct 99.
  1603. From Jeff: New IF IKSD command.  ckuusr.h, ckuus6.c, 3 Oct 99.
  1604. From Jeff: Hooks for Windows IKSD.  ckuusy.c, ckcdeb.h, ckcmai.c, ckuath.c,
  1605. 3 Oct 99.
  1606. From Gary Brown <gsb@wcom.net>: "Situation: C-Kermit 7.0.196 Beta.10, 4 Sep
  1607. 1999, on a Linux system configured so the lockfile directory is not world
  1608. writable (but it is writable by group uucp, and kermit is setgid uucp).  Bug:
  1609. if you do a "set line" to a port that's already in use, Kermit leaves a
  1610. temporary lockfile ("/var/lock/LTMP.12345" or the like).  Then if you then do
  1611. another "set line," specifying another port, you get a "Sorry, write access to
  1612. UUCP lockfile directory denied" error.  Cause: If the (real) lockfile for that
  1613. port already exists, ttlock() in ckutio.c calls ttchkpid() to see if it's
  1614. stale.  ttchkpid() returns with privileges off, so the subsequent
  1615. unlink(tmpnam) fails, leaving the temp file around.  A subsequent "set line"
  1616. command fails, apparently because the creat() fails with EACCES, although it
  1617. successfully unlinks the file after that, so a third attempt will succeed.
  1618. And if the lockfile turns out to be stale, I suspect that the link() will fail
  1619. on the next pass through the loop, although I didn't test that case.  Fix: I
  1620. think the best bet is to priv_off() before calling ttchkpid() and priv_on()
  1621. afterwards (needed in two places)."  ckutio.c, 3 Oct 99.
  1622. Added an Openstep 4.2 Makefile target, based on NeXTSTEP 3.3.  3 Oct 99.
  1623. First cut at a Shift-JIS to UCS-2 translator (as a separate program).  It has
  1624. two big tables for Kanji (about 8K and 2.5k entries, respectively, for a total
  1625. of 10.5K unsigned shorts so about 21K bytes, of which 6K is wasted due to
  1626. sparseness).  Then it has an algorithmic translation for Katakana and a simple
  1627. transformation for Romaji and controls (a very small amount of code).  The
  1628. result compiles to about 40K on a Sparc and goes fast: 0.28 sec to convert a
  1629. 100K Shift-JIS file, or 360Kcps.  Some tuning might be able to bump up the
  1630. speed.  To be continued...
  1631. From Jeff, 4 Oct 99:
  1632.  . Hooks to mainline code for Windows NT authentication: ckcmai.c, etc.
  1633.  . Allow password to echo when logging in to IKSD anonymously: ckuus7.c.
  1634.  . Fix TRANSLATE command to work in K95 when writing to console: ckuus[r4].c.
  1635. The output-file character-set for TRANSLATE now defaults to "ucs2" for Unicode
  1636. output systems (e.g. Windows NT console) and the file character-set otherwise.
  1637. Rounded up Shift-JIS example files from the net (mostly HTML) for checking,
  1638. analysis, and benchmarks.  Streamlined the Shift-JIS/UCS-2 code, plugged some
  1639. holes, and added code to handle the User-Defined area (both sets have one).
  1640. Updated Mac OS X makefile targets from Jeroen Scheerder.  makefile, 4 Oct 99.
  1641. Also from Jeroen Scheerder: a cast to shut up warnings about an arg to
  1642. localtime() in ztime().  ckutio.c, 4 Oct 99.
  1643. Fixed OpenStep target to build ckcpro.c separately without optimization since
  1644. it crashes the compiler.  makefile, 4 Oct 99.
  1645. Changed CHAR * tocs to char * to shut up stubborn stupid compilers.  ckuusr.c,
  1646. 5 Oct 99.
  1647. Changed calls to mdmhup() to not fall back on tthang() if mdmhup() fails.
  1648. In other words, if SET MODEM HANGUP-METHOD is MODEM-COMMAND, then we use the
  1649. modem command; otherwise we drop DTR or whatever.  ckucns.c, ckudia.c,
  1650. ckuusr.c, 5 Oct 99.
  1651. From Jeff: Don't switch to clearchannel automatically on Rlogin connections.
  1652. ckcfns.c, 5 Oct 99.
  1653. From Jeff: Fix typos; fix Telnet screen-dimension negotiation for K95 IKSD.
  1654. ckcmai.c, ckuusr.c, ckctel.c, 6 Oct 99.
  1655. Rolled back SET MODEM HANGUP change -- it broke a lot of other stuff.
  1656. ckucns.c, ckudia.c, ckuusr.c, 6 Oct 99.
  1657. From Lucas Hart:
  1658.   Changes included in ckvio.diff (which also has a ckcmai.c patch for
  1659.   isabsolute):
  1660.   - Fill in zchko
  1661.   - Change log file error handling, zopen and zclose
  1662.   - Use parse result to handle <> and rel names in zmkdir; cleanup
  1663.   - Extend nzrtol to handle device spec in absolute to relative;
  1664.     more <> dir syntax;  no longer need absolute for zmkdir;
  1665.   - Convert non-file oriented device name to upper case in zfnqfp
  1666.     instead of appending cwd;  replace multiple strncat calls
  1667.   - Fix fgen edit 165
  1668.   - Fix typo in zrmdir
  1669.   Some quick comments on some of the code:
  1670.   - "graceful" error handling for log files
  1671.   My implementation of zchko does not fail when given an illegal file name,
  1672.   because nzrtol may subsequently convert a "multiple dot" Unix name to a
  1673.   legal file name, so the illegal file name causes a fopen error in zopeno.
  1674.   (Of course, it does make sense to convert the file name before testing
  1675.   for write ability, but I'll leave that for your consideration.)
  1676.   In zopeno,  perror(name) gave:
  1677.   beta10+ > log t xxt+.log
  1678.      xxt+.log: non-translatable vms error code: 0x186D4
  1679.     %rms-f-syn, file specification syntax error
  1680.   which I eventually transformed to a more concise:
  1681.     ?fopen file name syntax error : xxt+.log
  1682.   (I'm not sure about the declaration of ckvmserrstr; used the same
  1683.   form as in ckuus4.c)
  1684.   Note that the Unix zopeno has
  1685.       #ifdef COMMENT              /* Let upper levels print message. */
  1686.   perror("Can't open output file");
  1687.       #endif /* COMMENT */
  1688.   but I didn't find where a message is printed (at least where zopen is
  1689.   called in ckuus4.c)
  1690.   - don't know when the logs are flushed to disk; the log files are no
  1691.   longer 'locked by another user' when attempting to view them from
  1692.   another process and the files are still open, but I have yet to read
  1693.   data.  One step forward.
  1694.   - you would suggest looking at zchko :)  I check write capability with
  1695.   a RMS write and delete on close.  Easier to code than checking all the
  1696.   conditions under which VMS will grant write permission, and ckcplm.txt
  1697.   says
  1698.       Checks to see if a file of the given name can be created.  Returns:
  1699.       -1 if file cannot be created, or on any kind of error.
  1700.   (in contrast to the ckufio chko() text which states denial of write
  1701.   permission is the only error condition.)
  1702.   I still have some zchko questions but I'll send them separately, as they
  1703.   may relate to other problems that occur with the original zchko.
  1704.   - I don't like to think of how long it took me to find the typo in zrmdir.
  1705.   The symptom was that mkdir and rmdir were fine when no device was specified,
  1706.   but not on another disk.
  1707.   - In zmkdir, I eliminated some old code instead of commenting it out -
  1708.   for clarity only;  otherwise I pretty much patched my code in.
  1709.   - Hope you don't mind the suggestion for eliminating the multiple strncat
  1710.   calls in zfnqfp; the original seems repetitous but is well exercised.
  1711. ckcmai.c, ckvfio.c, 6 Oct 99.
  1712. Added some clarifications to GET docs & help text.  ckermit2.txt, ckuus2.c,
  1713. 7 Oct 99.
  1714. From Jeff, 7 Oct 99:
  1715.  . Added the ability to assign additional IP addresses for embedding into
  1716.    a Kerberos 5 TGT.  This is necessary for using K5 through a Network
  1717.    Address Translator.
  1718.  . Fixed a bug in the telnet negotiations.  If SB START_TLS FOLLOWS has
  1719.    been sent then we cannot send addition subnegotiations.  All attempts
  1720.    to send sub negotiations should be dropped on the floor.
  1721. ckctel.c ckcnet.c ckuath.c security.txt ckuus2.c ckuus7.c ckuath.h ckuusr.h.
  1722. Lucas Hart pointed out that "log session /foo/bar/baz/xxx" did not print an
  1723. error message when any of the directory path segments after the first did
  1724. not exist, as long as the user had write access to the path up to that point.
  1725. This points out a flaw in the zchko() design -- it doesn't distinguish among:
  1726.  . Can I overwrite an existing file?
  1727.  . Can I create a file (or directory) in an existing directory?
  1728.  . Can I create a file (or directory) and its parent(s)?
  1729. We can't change zchko() without breaking all sorts of things, so the fix
  1730. is to add error messages where they are missing at the higher levels.  In this
  1731. case, the log-opening functions were printing messages if zchko() detected an
  1732. error at filename parse time (in fact, these are printed by cmofi(), the
  1733. output-filename-parser) but were not printing any message if the parse
  1734. succeeded but opening the log failed.  This was fixed in debopn(), pktopn(),
  1735. etc (one routine per log).  ckuus4.c, 7 Oct 99.
  1736. Moved makelist() and brstrip() from ckuusr.[ch] to ckclib.[ch].  7 Oct 99.
  1737. Added a /REDIRECT switch to EXEC (UNIX only).  I don't know if it will work,
  1738. but the idea is that if there is a connection active (ttyfd > -1), this will
  1739. dup ttyfd to stdio before calling execvp(), the obvious application being to
  1740. use C-Kermit as the PPP dialer, and then overlaying itself with pppd or
  1741. whatever.  ckcdeb.h, ckuusr.c, ckufio.c, 7 Oct 99.
  1742. Added One Last New String Function: fstripb(), which strips enclosing braces,
  1743. brackets, parens, or quotes from its arg.  Many options available, loads of
  1744. fun.  ckuusr.h, ckuus[24].c, ckermit2.txt, 7 Oct 99.
  1745. From Jeff: fixes for VOS networking.  ck[cl]net.[ch], 7 Oct 99.
  1746. From Jeff: a fix for a problem in which DIR would list two or more unreadable
  1747. files, but would fail to list one.  ckucmd.c, 7 Oct 99.
  1748. Eliminated double error messages when cmifi() fails when called from cmfdb().
  1749. ckucmd.c, 7 Oct 99.
  1750. Improved DELETE error message when cmfdb() fails.  ckuus6.c, 7 Oct 99.
  1751. From Jeff: enable syslogging for NT; NT login code juggling; more VOS fixes
  1752. (mainly for X.25-only build).  ckcdeb.h, ckcmai.c, ckcnet.c, ckuus[347].c,
  1753. 8 Oct 99.
  1754. Received confirmation that EXEC /REDIRECT works, at least on Linux for PPP
  1755. dialing.  9 Oct 99.
  1756. From Jeff: change many strcpy()'s to strncpy()'s to avoid memory leaks; finish
  1757. parameterizing all user-id buffer-length reference to UIDBUFLEN; ditto for
  1758. several other kinds of buffers.  ckcfns.c ckucmd.c ckufio.c ckcfn3.c ckutio.c
  1759. ckcnet.c ckclib.c ckctel.c, 9 Oct 99.
  1760. Worked on Kanji (still offline).
  1761. From Jeff: More strcpy -> strncpy: ckufio.c, ckuus[4rx].c; Some corrected
  1762. Telnet return codes: ckctel.c, ckucmd.c; updated auth stuff: ckuath.c.
  1763. 11 Oct 99.
  1764. Added ckstrncpy() to ckclib, which does what strncpy() should have done:
  1765. handles NULL args, ensures result is NUL-terminated, doesn't gratuitously
  1766. right-pad with NULs, and returns something useful: the number of bytes copied.
  1767. ckclib.[ch], 11 Oct 99.
  1768. Went thru many modules and replaced all strncpy(a,b,n) with ckstrncpy(a,b,n),
  1769. and removed subsequent, now superfluous, a[n] = NUL; statements (and also
  1770. marveled at the number of places where they were lacking).  Also whenever we
  1771. had a sequence like "strncpy(a,b,n); m = strlen(a);" this became simply
  1772. "m = ckstrncpy(a,b,n);" since ckstrlen() returns the number of bytes copied.
  1773. Also changed length references from (e.g.) XLEN-1 to XUFLEN, since ckstrncpy()
  1774. assumes it has been given the actual length of the buffer, and ensures that
  1775. the terminating byte or last byte is NUL. ck[cuv]*.[cw], 11 Oct 99.
  1776. Changed zfnqfp() define for non-zfnqfp() platforms from strncpy to ckstrncpy.
  1777. ckcdeb.h, 11 Oct 99.
  1778. Fixed return type of main() to agree with its declaration. ckcmai.c, 11 Oct 99.
  1779. Fixed some confusion in setting http_array.  ckuusr.c, 11 Oct 99.
  1780. Fixed printfs in shofea() that used "%d" to reference sizeof(), which is long.
  1781. ckuus5.c, 11 Oct 99.
  1782. In DIR /ARRAY, make sure we have a valid array pointer before referring to it.
  1783. ckuus6.c, 11 Oct 99.
  1784. Various other syntax adjustments, initializing variables, etc, to suppress
  1785. -Wall complaints that were not actually valid.  Many modules, 11 Oct 99.
  1786. Tested ckedemo.ksc and found that many strings were missing their final
  1787. character.  It seems that ckstrncpy() introduces a new subtlety.  Consider:
  1788.   char *p, * s = "oofa";
  1789.   int n = strlen(s);
  1790.   p = malloc(n+1);
  1791. The customary practice at this point is to:
  1792.   strcpy(p,s);
  1793. and this is absolutely correct (and we should keep doing it this way); we
  1794. know the buffer is the right size, and strcpy() sets the last byte to NUL.
  1795. However:
  1796.   strncpy(p,s,n);
  1797. is NOT correct, since it will not write a terminating NUL, even though most
  1798. people assume it will.  If, instead, you use:
  1799.   ckstrncpy(p,s,n);
  1800. the result will be "oof<NUL>" (not "oofa<NUL>"), since ckstrncpy() interprets
  1801. the third arg as the length of the destination buffer, not the length of the
  1802. source string, and it must ensure the terminating NUL.  Therefore, remember
  1803. when calling ckstrncpy() to give the actual, real, entire size of the buffer:
  1804.   n = strlen(s);
  1805.   p = malloc(n+1);
  1806.   ckstrncpy(p,s,n+1);  <-- But in this case it's still better to use strcpy().
  1807. To illustrate this a different way, suppose you have a string s = "[1]":
  1808.   strncpy(s+1,"2",1);  --> "[2]"
  1809. But:
  1810.   ckstrncpy(s+1,"2",1);  --> "[" (because it NUL-terminates).
  1811. So be careful with this one -- it's not a plug-compatible replacement for
  1812. strncpy().  I went thru the code and checked each call, and changed some of
  1813. them back to strcpy() or strncpy() when appropriate.  In general the rule is:
  1814. use ckstrncpy() to copy a string to a general-purpose big buffer whose length
  1815. is a constant, e.g. "ckstrncpy(line,s,LINBUFSIZ);" but use strncpy() to copy a
  1816. specific number of bytes from the source string, e.g.  "strncpy(line,s,n);"
  1817. followed by "line[n] = NUL;" if the intention is not to insert s at the
  1818. beginning of the string that is already in line[], or else
  1819. "ckstrncpy(line,s,n+1);".
  1820. From Jeff: Corrected a misplaced #ifdef from my changes yesterday, which
  1821. caused streaming transfers to fail.  ckcpro.w, 12 Oct 99.
  1822. Changed a few ckstrncpy's back strncpy's in ckcpro.w and ckcfn*.c.  The rule
  1823. is: use ckstrncpy when you don't know the source length, and you are copying
  1824. to a buffer whose length is known.  Use strncpy() to copy a specific number
  1825. of bytes from the source to the destination.  12 Oct 99.
  1826. Prior to integrating Kanji/Unicode translations, built in various
  1827. configurations on Linux to get baselines:
  1828.   NOCSETS NOUNICODE NOKANJI
  1829.    [   ]    [   ]    [   ]    1329014
  1830.    [   ]    [   ]    [ X ]    1325686 (because it's all done by algorithm)
  1831.    [   ]    [ X ]    [   ]    1158837 (removes 170K, mostly tables
  1832.    [ X ]    [ x ]    [ x ]    1090845 (removes 238K, mostly tables)
  1833. From Jeff: Symbols & parsing for TELOPT ... COM-PORT-CONTROL.  ckuusr.h,
  1834. ckuus[r3].c, 12 Oct 99.
  1835. More minor adjustments to yesterday's ckstrncpy() work. ckuus[57].c, 12 Oct 99.
  1836. Began merging Kanji/Unicode code from offline into C-Kermit...  Added tables
  1837. to ckcuni.c.  This brings full Linux build up to 1393157 bytes.  Added
  1838. functions and prototypes to ckcuni.[ch].  Filled in the appropriate calls in
  1839. xgnbyte() in ckcfns.c.  Compiled but didn't test.  Full Linux binary now
  1840. 1400670 (so only about 7K for the code).  The ckcuni.c source file is now over
  1841. 700K, about twice as long as any other source module.  12 Oct 99.
  1842. Filled in xpnbyte() and then began testing.  Everything worked pretty well
  1843. except for occasional strange corrupted spots in the new file when using UCS-2
  1844. as the transfer charset.  The problem (which is not new to the Kanji code)
  1845. turns out to be: getpkt() calls some routine to get the next byte because
  1846. that's what we put in packets: bytes.  Well, if the "get next byte" routine
  1847. returns (say) 0x0A, getpkt() had no way of knowing that this was actually part
  1848. of a Unicode, and therefore not to treat it like a linfeed, and therefore it
  1849. inserted a carriage return into the data stream, which of course changed the
  1850. Unicode character.  And then it inserted a (null and a) linefeed next time
  1851. around.  The cure involved moving all the end-of-line logic for Unicode to
  1852. xgnbyte() and disabling it for Unicode in getpkt() itself. ckcfns.c, 13 Oct 99.
  1853. Tested sending from PC (Little Endian) to Sparc (Big Endian): OK.  Tested
  1854. non-Japanese transfers (e.g. Latin-1) thru Unicode: OK.  Built with NOKANJI,
  1855. NOUNICODE, and NOCSETS to make sure #ifdefs were OK.  Built on HP-UX 10.20
  1856. with ANSI compiler.  Added -DMAINISVOID to HP-UX 100 ANSI-C compiler targets.
  1857. makefile, 13 Oct 99.
  1858. From Jeff: Changes for building on Windows 2000, mainly that NOCRYPT must be
  1859. defined before #including <windows.h>: ckcsig.h, ckcdeb.h.  IKSD idle timeout:
  1860. ckcpro.w, ckuusx.c, ckcmai.c, ckucmd.c.  13 Oct 99.
  1861. Added EUC-JP as preferred keyword for JAPANESE-EUC, according to common usage,
  1862. and made JAPANESE-EUC invisible.  ckuxla.c, 14 Oct 99.
  1863. Finally gave in and added REMOTE SET FILE CHARACTER-SET.  It simply passes the
  1864. character-set name string to the server, which looks it up in its own table;
  1865. thus the string must be in the server's syntax.  When the server gets this
  1866. command, it also disables automatic character-set selection (otherwise the
  1867. command would have no effect).  ckuus7.c, ckcfns.c, 14 Oct 99.
  1868. This enables cycling through all the new translations in a script like so:
  1869. dcl &x[] = euc ucs2 utf8             ; xfer charsets
  1870. dcl &y[] = eu uc ut                  ; abbrevs
  1871. dcl &f[] = shift euc jis7 ucs2 utf8  ; file charsets
  1872. dcl &g[] = sj eu j7 uc ut            ; abbrevs
  1873. set file char shift-jis               ; local file character-set is Shift-JIS
  1874. for %i 1 fdim(&x) 1 {               ; for each transfer character-set...
  1875.     set xfer char &x[%i]            ; set it
  1876.     for %j 1 fdim(&f) 1 {           ; for each remote file character-set...
  1877. remote set file char &f[%j] ; set it
  1878.         if fail exit 1 SERVER REJECTED CHARSET
  1879.         send /text meibo-sj.html meibo-sj-&y[%i]-&g[%j].txt
  1880.         if fail exit 1 TRANSFER FAILED
  1881.     }
  1882. }
  1883. Ran this test (the source file is Shift-JIS and contains Roman, halfwidth
  1884. Katakana, and Kanji) and inspected the results: 9 good, 6 bad:
  1885.   meibo-sj-eu-eu.txt  Looks ok
  1886.   meibo-sj-eu-j7.txt  Looks ok
  1887.   meibo-sj-eu-sj.txt  Is OK (matches original)
  1888.   meibo-sj-eu-uc.txt  BAD -- only ascii chars survived
  1889.   meibo-sj-eu-ut.txt  BAD -- only ascii chars survived
  1890.   meibo-sj-uc-eu.txt  Looks ok - matches meibo-sj-eu-eu.txt
  1891.   meibo-sj-uc-j7.txt  BAD -- spurious ">^N" inserted everywhere
  1892.   meibo-sj-uc-sj.txt  BAD -- looks like Shift-JIS with NUL between each byte
  1893.   meibo-sj-uc-uc.txt  Looks ok
  1894.   meibo-sj-uc-ut.txt  Looks ok
  1895.   meibo-sj-ut-eu.txt  Looks ok
  1896.   meibo-sj-ut-j7.txt  BAD -- Just like meibo-sj-uc-j7.txt
  1897.   meibo-sj-ut-sj.txt  BAD -- Just like meibo-sj-uc-sj.txt
  1898.   meibo-sj-ut-uc.txt  Looks ok
  1899.   meibo-sj-ut-ut.txt  Looks ok
  1900. This pintpoints the problem areas pretty well.  These two:
  1901.   meibo-sj-eu-uc.txt  BAD -- only ascii chars survived
  1902.   meibo-sj-eu-ut.txt  BAD -- only ascii chars survived
  1903. are from the new (TCS=EUC)->(FCS=Unicode) section of xpnbyte().  Problem:
  1904. xpnbyte() isn't even being called in this case.  Diagnosis: tests in decode()
  1905. were in the wrong order.  Once the code was exercised some more bugs were
  1906. found and fixed, but there are still a couple spots where translations differ
  1907. from (TCS=Unicode)->(FCS=Unicode).  This is not so much an issue of
  1908. translation as it is of parsing, keeping track of state, etc.  So this one's
  1909. pretty good now; we'll come back and touch it up later.  New score: 11 to 4.
  1910. These two:
  1911.   meibo-sj-uc-sj.txt  BAD -- looks like Shift-JIS with NUL between each byte
  1912.   meibo-sj-ut-sj.txt  BAD -- Just like meibo-sj-uc-sj.txt
  1913. are simply forgetting to not output both bytes if the left half is empty.
  1914. Fixed in xpnbyte().  Score: 13 to 2.
  1915. And these two:
  1916.   meibo-sj-uc-j7.txt  BAD -- spurious ">^N" inserted everywhere
  1917.   meibo-sj-ut-j7.txt  BAD -- Just like meibo-sj-uc-j7.txt
  1918. indicate a problem in the new JIS-7 constructor when it has to write out
  1919. halfwidth Katakana.  A tiny error in the state machine.  Final score: 15 to 0.
  1920. All fixes confined to ckcfns.c, 14 Oct 99.
  1921. From Jeff: Syslogging changes for NT.  ckcmai.c, 15 Oct 99.
  1922. Remaining problems with EUC->Unicode translation fixed -- in fact they were
  1923. already fixed yesterday; I was looking at old versions of the files.
  1924. Now I have a good copy of the meibo file in all five character sets.  This
  1925. means I can write a new script to translate it from each Japanese character
  1926. set to each other one, similar to the script above.  But the output was too
  1927. noisy so I made TRANSLATE suppress messages if QUIET ON.  First results: 15
  1928. bad, 10 good.  Reason, there seems to be no code to handle Japanese except
  1929. when source or target set is Unicode.  Added code but the score is about the
  1930. same.  ckuus4.c, 15 Oct 99.
  1931. From Jeff: Changed syslog to accept the Kermit message type instead of the
  1932. Unix Syslog message type as the first parameter.  The second parameter is
  1933. whether the message indicates success (1) or (failure).  This is so that the
  1934. appropriate NT Event Log message type may be selected.  SET SYSLOG added so
  1935. the range of messages that are logged may be changed in the iksd.conf file.
  1936. There needs to be a test applied to all SET commands that affect logs that
  1937. restrict access to the command after a user is logged in to IKSD.  ckcpro.w,
  1938. ckuusx.c, ckuus3.c, ckcmai.c, ckufio.c, ckcdeb.h, ckuath.c, ckucmd.c,
  1939. ckuusr.c, ckcfns.c, ckuusr.h.  17 Oct 99.
  1940. Back to Kanji TRANSLATE...  The whole business was getting way out of hand --
  1941. too many combinations, too much duplicated code.  So I junked everything so
  1942. far and tried a simpler approach: source -> UCS2 -> target in all cases, using
  1943. xgnbyte() to feed bytes to xpnbyte().  Now the score is 15:10.  Ironed out
  1944. some confusion over the UCS BOM, improving the score to 20:5.  The bad cases
  1945. were JIS7-to-anything-else.  Found & fixed a typo in getj7(), now 25:0.
  1946. ckuxla.c, 17 Oct 99.
  1947. Moved j7init(), getj7(), eu_to_sj(), and sj_to_eu() out of ckcuni, since they
  1948. have nothing to do with Unicode and can be used in non-Unicode builds.
  1949. ckcuni.[ch], ckcxla.h, ckuxla.c, 17 Oct 99.
  1950. But getting this working is just the first step.  Now the job of cleaning up
  1951. the #ifdefs and preserving correct TRANSLATE operation in non-UNICODE and/or
  1952. non-KANJI builds.  The first task is to make the xgnbyte()/xpnbyte() also work
  1953. for Japanese without Unicode; this is a big plus because it turns out the
  1954. TRANSLATE command has never worked for Japanese.  (hours later...) Got
  1955. C-Kermit to compile and link again with -DNOUNICODE.  Kanji translations work
  1956. except in the halfwidth Katakana spots.  Several hours later all the
  1957. no-Unicode combinations worked.  Rebuilt with UNICODE defined; ran the
  1958. original test, score is back down to 13:12, ugh.  The good ones are (a)
  1959. anything-to-self; (b) anything-to-Unicode.  The bad ones are anything to
  1960. Shift-JIS, JIS7, or EUC.  Aha.  So after one more round, these work again too.
  1961. So now we have a workable model for multibyte/variable-byte character sets
  1962. that can be extended to Chinese, Korean, etc.
  1963. Added output function pointers to arg lists for pnbyte() and xpnbyte().
  1964. ckcker.h, ckcfns.c, ckuus4.c, 18 Oct 99.
  1965. Fixed TRANSLATE <infile> UCS2 UCS2 <outfile> to automatically swap bytes
  1966. if <infile> is the wrong byte order.  ckuus4.c, 18 Oct 99.
  1967. Tested the following builds, adjusting #ifdefs and declarations until all
  1968. of them were stable:
  1969.  -DUNICODE -DNOKANJI
  1970.  -DNOUNICODE -DKANJI
  1971.  -DNOCSETS (saves 350K on Sparc vs full build)
  1972.   Non-ANSI compiler: uh oh, ckcuni.c crashes the SunOS assember.
  1973. Added -DNOUNICODE to SunOS cc targets.  Also reorganized the makefile to put
  1974. antique targets at the end, and to group the remaining targets a little
  1975. better.  Also added -DNOUNICODE to the non-antique targets that typically blow
  1976. up when we add something new: AT&T UNIX PC, SVR3 and earlier, SV68, Xenix, and
  1977. various small-model targets.  makefile, 18 Oct 99.
  1978. Rebuilt on Sparc and PC, and ran the file-transfer test from Sparc (BE) to
  1979. Linux/PC (LE):
  1980.  . PC translation of incoming to EUC, JIS7, and Shift-JIS OK.
  1981.  . PC translation of incoming to UCS2 swaps bytes OK but gets bad spots.
  1982.  . PC translation of incoming to UTF8 is OK except in one case
  1983. The UTF-8 result has all of the Kanji characters replaced by 0xEFBF, which is
  1984. the UTF-8 translation of UCS-2 0xFFFD.  This happened only when the PC was
  1985. translating from EUC to UTF-8.  It did not happen when translating to UTF-8
  1986. from UCS-2 or UTF-8.  Now, since we translate to UCS-2 first, this pretty much
  1987. narrows the problem to xpnbyte(): EUC->UCS section.  The problem: eu_to_sj()
  1988. was using hardwired byte numbers, rather than indexing through byteorder.
  1989. That fixed the UTF-8 problem and the UCS-2 problems.  ckuxla.c, 18 Oct 99.
  1990. Ran the exact same test (every combination of Kanji FCS and TCS) in the
  1991. opposite direction: PC to Sparc.  It worked perfectly.  18 Oct 99.
  1992. As to TRANSMIT...  Well, TRANSMIT can do with character sets only what CONNECT
  1993. can do, and C-Kermit CONNECT doesn't handle Japanese.  A major redesign and
  1994. rewrite would be required.  I think the trick would be to make ckcputc() be
  1995. the analogue of xpnbyte() and ckcgetc() to be the equivalent of xgnbyte() (and
  1996. added a note to this effect to ckucns.c).  But this would probably be a week's
  1997. worth of coding and testing for a feature nobody has ever asked for.  So we'll
  1998. defer Japanese character-set support in CONNECT and TRANSMIT until after 7.0.
  1999. Updated ckermit2.txt to reflect the current and probably final state of
  2000. affairs for Kanji and Unicode in 7.0.  18 Oct 99.