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

通讯/手机编程

开发平台:

Windows_Unix

  1. C-KERMIT 6.1-7.0 CHANGE LOG (Changes since 6.0.192 of 6 September 1996)
  2. Tue Feb  8 15:27:58 2000
  3. SET TCP UCX-PORT-BUG command added, November 1996.
  4. sdata() windowing loop to send packets could go too far if ACKs had
  5. arrived out of order.  Fixed in nxtpkt().  9 Dec 96.
  6. SET SEND DOUBLE-CHAR and SET RECEIVE IGNORE-CHAR added, for transferring
  7. files with Honeywell DPS-6, and/or thru an Arpanet TAC.  10 Dec 96.
  8. ADD SEND-LIST followed by MOVE did not delete original files.  Fixed in
  9. ckuusr.c, 11 Dec 96.
  10. When C-K is in local mode, and sending a file using Kermit protocol, and
  11. sending an auto-upload string in advance, make it pause for 1.5 seconds to
  12. give the remote Kermit time to start up; otherwise, since all the ioctls at
  13. startup time result in clearing the input buffer, the first packet is lost and
  14. we have to wait a long time for the timeout to kick off the transfer.  1.5 sec
  15. vs 8 sec.  On the other hand, if the remote Kermit is already started, this
  16. is a needless delay.  OK, so make it 400 msec.  This doesn't fix the problem
  17. in the default case (unless the remote system is really fast), but at least
  18. now there is a command-level workaround for the user: "set proto kermit
  19. {kermit -YQqr} {kermit -YQqr}", to make the remote Kermit start up faster;
  20. 0.4 sec should be enough time to enter packet mode.  ckcpro.w, 15 Dec 96.
  21. Added EDIT, SET EDITOR, SHOW EDITOR.  This required adding a new parsing
  22. function, cmiofi(), to parse either the name of an existing file or the name
  23. of a new file to be created.  SET EDITOR can not be executed by APC unless APC
  24. is UNCHECKED, otherwise "edit foo" might become "delete foo".  If the EDIT
  25. command is given without a filespec, then if a previous filespec had been
  26. given to an EDIT command, it is used; if not, the editor is started without a
  27. file.  If a filespec is given, the editor is started on that file, and the
  28. filespec is remembered for subsequent EDIT commands.  ckuusr.h, ckuus[r235].c,
  29. ckucmd.[ch], 15 Dec 96.
  30. Changed v(filespec) to contain fully qualified filenames rather than relative
  31. ones.  This allows v(filespec) to actually find the file just downloaded, in
  32. case it went to a download directory, etc.  This makes NETEDIT easy to do.
  33. ckuus[r6].c, 15 Dec 96.
  34. New CKVKER.COM and CKVOLD.COM from Lucas Hart fixes errors with GCC builds.
  35. 25 Dec 96.
  36. Added -DNONAWS to AT&T 3Bx entries.  16 Jan 97.
  37. Added and modified SCO Xenix entries from Fred Smith. 26 Jan 97.
  38. Added and modified HP-UX entries from Peter Eichhorn. 26 Jan 97.
  39. Added -DNOINADDRX to all DG/UX 5.40 makefile entries.  1 Feb 97.
  40. Added an entry for SINIX-Z (Intel) 5.42.  1 Feb 97.
  41. Added "generic-high-speed" and Meghertz X-Jack modem types, 5 Feb 97.
  42. Fix to VMS isdir() (free() being called prior to using the item that was
  43. freed), causing CD not to work on Alphas with VMS 6.2.  ckvfio.c, 17 Feb 97.
  44. Fixed feval(m%n) not to dump core if n == 0, ckuus5.c, date unk.
  45. References to S82 in newer-model Hayes modems causes ERROR.  Removed.
  46. ckudia.c, date.unk.
  47. Added STRATUS #ifdefs to ckusig.c, from Kernie Brashier.  7 Mar 97.
  48. Added Greek file and terminal charset translation: ISO 8859-7, CP869, and
  49. ELOT 927.  ck[cu]xla.[ch], ckuus[23457].c.  5 Apr 97.
  50. Made Stratus getchar/putchar changes to ckcdeb.h, ckudia.c, ckuus[457].c
  51. and uploaded to test area so Kernie B can make new builds.  6 Apr 97.
  52. Added IF OPEN ...  ckuusr.h, ckuus[26].c.  6 Apr 97.
  53. Added v(pid), UNIX only for now.  ckcdeb.h, ckuusr.h, ckuus4.c.  6 Apr 97.
  54. Jeff's changes to sdata() (after sending each packet) and input() (when we
  55. get a timeout) to detect carrier loss.  ckcfn[s2].c, 7 Apr 97.
  56. Added within #ifdef PIPESEND...  CSEND, CRECEIVE, and SET XFER PIPES governing
  57. interpretation of incoming filenames that start with "!", and also
  58. command-line -s "!command", for UNIX.  ckcdeb.h, ckcfn[s3].c, ckcpro.w,
  59. ckucmd.c, ckuusr.h, ckuus[r2345y].c, 9-13 Apr 97.  Jeff also made them work
  60. for Windows 95/NT and OS/2.
  61. Removed spurious and redundant code from ckcmai.c to read the application
  62. file a second time (which is never executed because the application file name
  63. was zeroed out), and then removed the code to zero out the name, so the file
  64. can be deleted later if "set startup-file discard".  17 Apr 97.
  65. Added code to enforce that pipe transfers can be done only with Kermit
  66. protocol.  ckcfns.c, ckuusr.c, ckuusy.c, 17 Apr 97.  NOTE: Actually, it is
  67. perfectly possible to receive to a pipe using XYZMODEM in K95, but since it is
  68. not possible to send from one (because these protocols use fseek to recover
  69. from errors and you can't fseek into a pipe), we just say "use Kermit".
  70. Added SET SEND FILTER and got it working -- needs a LOT of testing.
  71. ckuusr.h, ckuus3.c, etc etc, 17 Apr 97.
  72. Added fcommand() and frawcommand(); ckuusr.h, ckuus4.c, 18 Apr 97.
  73. Added v(filename) -- current filename while sending and receiving -- and
  74. v(filenumber) -- the current file number.  19 Apr 97.
  75. Overhauled the as-name code to provide for filename templates using
  76. v(filename), v(filenumber), etc, as well as function()s...  19 Apr 97.
  77. Added v(pexitstat) -- exit status of most recent process started by zxcmd,
  78. zshcmd, or ttruncmd().  ckuusr.h, ckuus4.c, ckufio.c, ckutio.c.  20 apr 97.
  79. Overhauled process-oriented routines in ckufio.c to give a proper return code
  80. and to set the pexitstat value.  In particular, zclosf() now fails if the
  81. closed process did not return an exit code of 0.  20 apr 97.
  82. In working on the previous item, discovered that I could use wait() rather
  83. than waitpid() in ttruncmd(), and since wait() is totally portable, I enabled
  84. REDIRECT for all UNIX implementations as well as OS/2 & Windows.  ckutio.c,
  85. ckcdeb.h.  20 Apr 97.
  86. Added tests to the protocol module to see whether closing the input file fails,
  87. which is what happens if we are using a pipe and or filter, and the process's
  88. return code indicates failure.  In this case we set the "cxseen" flag which
  89. forces a failure condition on a per-file basis (in case of wildcard transfers
  90. with send-filter), which is reflected in BOTH Kermits.  ckcpro.w, 20 Apr 97.
  91. Added invisible CQ command for all but OS2 & Win32 as an abbreviation for
  92. CONNECT /QUIETLY.  ckuusr.[ch], 20 Apr 97.
  93. Changed SET { SEND, RECEIVE } FILTER to use the same syntax as as-names --
  94. v(filename), string functions, etc, permitted -- rather than "%s".
  95.  ckuus7.c, ckcfns.c, 20 Apr 97.
  96. Added fstripx(), fstripn(), flop() string functions.  ckuusr.h, ckuus4.c,
  97. 21 Apr 97.
  98. Added file-protection/permission attributes within #ifdef CK_PERM..#endif.
  99. Enabled for UNIX only.  Sender puts system-dependent and system-independent
  100. versions into the A packet.  The system-dependent permission string for UNIX
  101. is a 3-digit octal string, the low-order 12 bits of the st_mode member of the
  102. stat struct; we deliberately chop off the "file format" bits because they are
  103. probably not portable, nor do we convey the setuid/setgid bits, lock bit,
  104. sticky bit, etc; just the permissions.  The file receiver checks to see if the
  105. sender has the same system ID; if so, it tries to decode the system-dependent
  106. permissions, if any; if not, it uses the generic ones and applies them to the
  107. owner field.  The main purpose is to not have to "chmod +x" an executable file
  108. after transfer between two UNIXes.  ckcdeb.h, ckcmai.c, ckufio.c, ckcfn3.c,
  109. and (for SET, REMOTE SET, and SHOW ATTRIBUTES) ckuus5.c, ckuus7.c.  22 Apr 97.
  110. Added three more variables:
  111.   v(p_ctl)   Control prefix char
  112.   v(p_8bit)  8-bit prefix char (if parity not none)
  113.   v(p_rpt)   Repeat prefix char (if repeat compression enabled)
  114. ckuusr.h, ckuus4.c.  22 Apr 97.
  115. Merged Jeff's changes into ckuusr.h, 24 Apr 97.
  116. Merged Jeff's changes into ckcker.h, ckcmai.c, 3 May 97.
  117. Merged Jeff's changes into ckuusr.c; noticed that much of the PIPESEND code
  118. was missing from Jeff's version.  3 May 97.
  119. Merged Jeff's changes into ckuus*.[ch] and other modules, 3 May 97.
  120. Merged Jeff's changes into ckudia.c, except the ones involving makestr(),
  121. which should be entirely unnecessary -- or if they are, then makestr() should
  122. be fixed.  3 May 97.
  123. Made sure remaining modules were all in sync.  3 May 97.
  124. Added CK_ENVIRONMENT for UNIX/Aegis/Plan9: ckcnet.h, ckutio.c, 4 May 97.
  125. Added SET TELNET ENVIRONMENT { OFF, ON }.  This is needed so scripts can
  126. behave predictably, etc.  Made OFF the default for UNIX, ON for OS/2 & friends
  127. so as not to change existing default behavior.  Added this to SHOW NET.  Also
  128. fixed a bug in Telnet NEW-ENVIRON negotiation.  ckuusr.h, ckuus[234].c,
  129. ckcnet.c, 4 May 97.
  130. Added TELNET SEND_LOCATION negotiation, since a potential customer needed it
  131. desperately and asked about it just as I was working on the NEW-ENVIRON stuff.
  132. Untested, though, since I can't find a host that uses it.  ckcnet.c, 4 May 97.
  133. Added SOLARIS25 symbol and makefile entry for Solaris 2.5.  Added support for
  134. 134.5 and 1800 bps.  Enabled 134.5, 1800, 57600, 76800, 115200, 230400 for
  135. Solaris 2.5.  makefile, ckcdeb.h, ckutio.c, 4 May 97.
  136. Added casts to various function args (char vs uchar) to shut up picky
  137. compilers.  ckcfn[s23].c, 4 May 97.
  138. Added a fix for ATT 7300 UNIX PC to allow use by root when C-Kermit installed
  139. setuid (e.g. to uucp), since System V R0 does not save original uid, from
  140. Randolph J Herber <rjh@yclept.chi.il.us>.  ckutio.c, 4 May 97.
  141. Added a new makefile entry for AT&T UNIX 3.51m, which added hardware flow
  142. control for the AT&T 7300, resulting in a file-transfer performance boost of
  143. about 30%.  Randolph J Herber, ckutio.c, 4 May 97.
  144. Added regular POSIX-style high speeds for Linux 1.2 and later, from Ted Ts'o
  145. <tytso@mit.edu>.  This involved reconciling several different and conflicting
  146. patches from the PATCHES file.  Linux C-Kermit now supports serial speeds up
  147. to 460800bps.  ckcdeb.h, ckuus3.c, ckutio.c, 4 May 97.  Also, added a new
  148. makefile entry, "linux", for Linux 1.2 and later.  The old entry was kept
  149. under the name "linux10", 4 May 97.
  150. Added support, makefile entry, and designer herald for OpenBSD, from
  151. Todd Miller <Todd.Mill@courtesan.com>, ckuver.h, makefile, 4 May 97.
  152. All patches from the PATCHES file are now installed.
  153. Fixes from Jeff to my fixes.  ckudia.c, ckcmai.c, ckcker.h, 6 May 97.
  154. Redid Telnet Location after a closer reading of RFC779, added SET TELNET
  155. LOCATION, added location to SHOW NET.  ckcnet.c, ckuus3.c, ckuus4.c, ckuusr.h,
  156. 6 May 97.  The "send location" business works like this:
  157.  . All code related to this feature is in #ifdef CK_SNDLOC, which is defined
  158.    by default for all platforms (in ckcnet.h).
  159.  . When Kermit starts, sysinit() does makestr(tn_loc,getenv("LOCATION")),
  160.    so this needs to be added to all the non-UNIX sysinit()'s, perhaps using
  161.    other more appropriate environment variable names, if any exist.
  162.  . If tn_loc is not NULL, then tn_ini() sends WILL SEND-LOCATION.  If the
  163.    server says DO SEND-LOCATION, Kermit sends the string in an SB.
  164.  . The C-Kermit user can change the location with SET TELNET LOCATION, and
  165.    can defeat this feature by setting the location to the empty string.
  166.  . If sysinit() does not fill in the initial value, the user can still use
  167.    this feature by giving a SET TELNET LOCATION string prior to making the
  168.    connection.
  169. Added SHOW TELNET since I keep typing it all the time anyway, and updated help
  170. text, ckuusr.h, ckuus[245].c, 6 May 97.
  171. Also made numerous corrections to help text, some of which involved moving
  172. feature-selection features (CK_ENVIRONMENT and CK_SNDLOC) from ckcnet.h to
  173. ckcdeb.h.  6 May 97.
  174. Fix typos in yesterday's changes.  ckcdeb.h, ckcnet.c, 7 May 97.
  175. Removed date-dependent dial-number hacks for France and Finland, since the
  176. dates are long past.  ckuus6.c, 7 May 97.
  177. Finished SET DIAL { LC-PREFIX, LC-SUFFIX }.  Changed this from LOCAL-PREFIX,
  178. LOCAL-SUFFIX because LOCAL is too long to type all the time and we already had
  179. a SET DIAL LOCAL-AREA-CODE (albeit invisible).  The original names are still
  180. there but invisible.  7 May 97.
  181. Added SET DIAL LC-AREA-CODES [ <list> ] and display of it in SHOW DIAL.
  182. ckuusr.h, ckuus[234].c, 8 May 97.
  183. Filled in callisld() to return codes differentiating among (0) regular local
  184. calls, (1) long-distance calls, and (2) local calls that still must dial the
  185. area code, and changed dncvt() to use these codes for both well-formed
  186. portable phone numbers and free-form portable numbers.  Also added code for
  187. local prefix and suffix for free-form portable numbers.  ckuus6.c, 8 May 97.
  188. Add SET DIAL FORCE-LONG-DISTANCE { ON, OFF }.  8 May 97.  ckuusr.h,
  189. ckuus[246].c.
  190. Automatically set the above to ON for SET DIAL COUNTRY-CODE 33 (France).
  191. ckuus3.c, 8 May 97.
  192. Fixed typo in #ifdef for "set speed 19200".  ckuus3.c, 11 May 97.
  193. Added commands for modem speaker control, 11 May 97:
  194.   Defined symbols in ckuusr.h.
  195.   Variables defined in ckudia.c:
  196.     int mdmspk       (speaker on off)
  197.     int mdmvol       (modem volume)
  198.     char * dialspon  (speaker on command)
  199.     char * dialspoff (speaker off command)
  200.     char * dialvol1  (volume low command)
  201.     char * dialvol2  (volume medium command)
  202.     char * dialvol3  (volume high command)
  203.   Added keyword parsing to ckuus3.c:
  204.     SET MODEM SPEAKER { ON, OFF }
  205.     SET MODEM VOLUME { HIGH, MEDIUM, LOW }
  206.   Added modem command parsing, ckuus3.c:
  207.     SET MODEM COMMAND { SPEAKER-ON, SPEAKER-OFF } <string>
  208.     SET MODEM COMMAND { VOLUME-HIGH, VOLUME-MEDIUM, VOLUME-LOW } <string>
  209.   Added these fields to all MDMINF structs in ckcker.h and ckudia.c.
  210.   Changed name of dial_str[] keyword table to mdmcmd[] because the original
  211.   was in conflict with a MDMINF struct name, ckuus3.c.
  212.   Filled in SHOW MODEM to show all these values, adjusted pagination, ckuus3.c.
  213.   Filled in HELP SET MODEM, ckuus2.c.
  214.   Added semantics to ckudia.c.
  215. Fixed errors in yesterday's work.  ckuus3.c, ckudia.c, 12 May 97.
  216. Added GENERIC-HIGH-SPEED to MINIDIAL selection.  Also, USER-DEFINED was
  217. supposed to be there too, but that was only halfway done.  ckudia.c, 12 May 97.
  218. Change SET MODEM CAPABILITIES to set or unset SPEED-MATCHING automatically
  219. based on whether SB was included among the capabilities.  ckuus3.c, 12 May 97.
  220. Added support for the following new built-in modem types:
  221.  . QuickComm Spirit II
  222.  . Motorola Montana
  223.  . Compaq Data+Fax (e.g. in Presario)
  224.  . Fujitsu Fax/Modem Adpater
  225.  . Megahertz AT&T V.34
  226.  . SupraSonic V288+
  227.  . Best Data
  228. ckudia.c, 12 May 1997.
  229. Changed speaker and volume commands to use multiple keywords, not dashes,
  230. like for EC and DC.  ckuusr.h, ckuus3.c, 13 May 97.
  231. Added SET TERMINAL KEYBOARD-MODE { NORMAL, EMACS, HEBREW, RUSSIAN }.
  232. ckuusr.h, ckuus[27].c.
  233. Fixed HELP text for SET MODEM { SPEAKER, VOLUME }.  ckuus2.c, 13 May 97.
  234. Added support for more new modem types:
  235.  . AT&T Secure Data STU-III Model 1900 (untested)
  236.  . AT&T Secure Data STU-III Model 1910 (untested)
  237. These are scrambling modems used at high-security places, which only talk
  238. to each other.  Also, rearranged SET MODEM TYPE keywords that were out of
  239. alphabetical order.  ckudia.c, 13 May 97.
  240. Added E1V1 to all Hayes-like modem init strings for OS/2 and Windows, to
  241. make sure we parse word result codes -- this eliminates lots of confusion
  242. caused by incompatible digit result codes.  I didn't do this for UNIX, VMS,
  243. etc, because it is bad to reconfigure shared modems.  ckudia.c, 14 May 97.
  244. Added DIA_TAPI (= 34), "TAPI reported failure - reason unknown", to DIAL
  245. failure codes and messages, and changed TAPI dialing failure code to set this
  246. reason.  ckcker.h, ckudia.c, 14 May 97.
  247. Added missing cases 15, 16, 17, 19, 25, 45, 107 for USR digit result codes.
  248. ckudia.c, 14 May 97.
  249. Fix for SCRIPT command from Gerhard Rueckle <rueckle@dr.fbe.fh-darmstadt.de>
  250. at FH Darmstadt, to filter out NULs from session log (otherwise whole lines
  251. were getting lost due to use of str*() functions).  ckuscr.c, 15 May 97.
  252. Discovered that S_I[RWX]OTH stat.h symbols for file permissions could not be
  253. depended upon, and so added more #ifdefs to account for this in zsattr().
  254. Also, realized it's silly to use the "world" permissions field for the
  255. "generic" permission (even though that's what the book says); changed it to
  256. use the "user" (self) field.  ckufio.c, 16 May 97.
  257. After spending 2 hours on the phone with a user, revised the AT&T STU III
  258. modem commands by trial and error until they worked.  The manuals and other
  259. info from AT&T were wrong.  ckudia.c, 17 May 97.
  260. Added %* variable, used only in macros, replaced by all the args that the
  261. current macro was called with (1..argc).  ckuus4.c, 18 May 97.
  262. Added "IF <=" and "IF >=".  ckuusr.h, ckuus6.c, 18 May 97.
  263. Changed DIRECTORY, general case (mostly UNIX), to use cmtxt() rather than
  264. cmdir(), to allow free-form directory commands, inclusion of switches for
  265. system directory command, redirectors, etc.  ckuus6.c, 18 May 97.
  266. Added SET FILE EOF { CTRL-Z, LENGTH }.  Applies only to text-mode transfers.
  267. When set to CTRL-Z, this makes the file sender treat the first Ctrl-Z in the
  268. input file as the end of file (EOF) (NOTE: this never worked before), and it
  269. makes the file receiver tack a Ctrl-Z onto the end of the output file if it
  270. does not already end with Ctrl-Z.  This feature is included for any platform
  271. for which CK_CTRLZ is defined during compilation; by default it is defined
  272. only for OS2.  Added to SHOW FILE, reformatted SHOW FILE.  ckcdeb.h, ckcker.h,
  273. ckuus[2347].c, ckcfns.c, ckufio.c, 18 May 97.
  274. Changed CALL macro to not SET MODEM TYPE if given type is the same as the
  275. current type, thus avoiding overwriting customizations.  Also, don't SET SPEED
  276. or LINE if given values are the same as current ones.  ckermit.ini, 18 May 97.
  277. Examined the problem in which we DIAL a modem, disconnect, then SET HOST or
  278. TELNET, then HANGUP, and Kermit sends +++ATHO.  There is no good way to avoid
  279. this, because this case can't reliably be distinguished from the case in which
  280. the user does SET HOST <terminal-server>, SET MODEM TYPE <name>, DIAL.  In
  281. both cases we have a valid modem type selected and we have a network
  282. connection.  If the user wants to DIAL and then later make a regular network
  283. connection, she will have to SET MODEM TYPE NONE or SET MODEM HANGUP RS232
  284. to avoid this phenomenon.
  285. Fixed IF EXIST and IF DIRECTORY to properly strip braces from around their
  286. arguments, so "if directory {C:Program Files}", etc, would work as expected.
  287. However, this means that if the file or directory name is actually enclosed
  288. in braces, the braces must be doubled.  ckuus6.c, 18 May 97.
  289. Fixed problem that occurred if "set host nonexistent-host" followed by certain
  290. commands like SEND; the original modem type was not restored and ttopen()
  291. thought that it still had a network hostname.  ckuus7.c, 18 May 97.
  292. Fixed HELP SET RECEIVE PATHNAMES to show default is OFF, not ON.  ckuus2.c,
  293. 18 May 97.
  294. Fixed SET EDITOR and SET BROWSER to use PATH in UNIX.  ckuus3.c, 18 May 97.
  295. Fixed cmifip() to make its own safe copy of the PATH string, so the caller
  296. does not have do this every time, and simplified calls to cmifip(),
  297. consolidating OS/2 and UNIX calls.  ckucmd.c, ckuus3.c, 18 May 97.
  298. Got rid of the old cmdir() function, replaced it by a new one that is just a
  299. wrapper for cmifi() that makes cmifi() parse only directory names and handle
  300. completion and ?-file-lists.  This affects the CD, SET SERVER GET-PATH, SET
  301. TEMP-DIRECTORY, SET FILE DOWNLOAD-DIR, and SPACE commands.  ckucmd.h,
  302. ckucmd.c, 19 May 97.
  303. Fix definition of TRMBUFL (termcap buffer length), and use it when allocating
  304. the termcap buffer, trmbuf.  ckcdeb.h, ckuusx.c, 19 May 97.
  305. Don't print "Warning: terminal type unknown, Fullscreen file transfer display
  306. disabled" if C-Kermit is in remote mode.  ckuusx.c, 19 May 97.
  307. Allow GET and RECEIVE as-names to override RECEIVE PATHNAMES setting.
  308. rcvfil(), ckcfns.c, 19 May 97.
  309. The READ command was being overly picky about "last line lacks terminator".
  310. I changed it to allow the last or only line to lack a terminator.  This is a
  311. sneaky way of allowing even binary files to be read into a variable (all at
  312. once) if the READ buffer is set large enough (and the file does not contain
  313. NUL characters).  doask(), ckuus6.c, 19 May 97.
  314. The braces problem: Since braces are used in function calls to indicate
  315. grouping, there is no way to pass literal braces to the function itself.
  316. Solution: Define a variable containing the string that has braces.  Example:
  317.   define %a ab{cd
  318.   echo fsubstring(%a)
  319.   ab{cd
  320. If the string is to start with a leading brace and end with a closing brace,
  321. then double braces must appear around the string (which itself is enclosed in
  322. braces):
  323.   define %a {{{foo}}}
  324.   echo fsubstring(%a)
  325.   {foo}
  326. This also works for any other kind of string:
  327.   define %a {{ab{cd}}
  328.   echo fsubstring(%a)
  329.   ab{cd
  330. No changes here -- this is how it has always worked, but was not documented
  331. before.
  332. Lots of users try to write scripts for Telnet logins, but use "telnet"
  333. rather than "set host"... eventually they log out or close the connection,
  334. and then when the INPUT command executes, it says "?Can't condition line
  335. for INPUT", which is singularly uninformative.  I made INPUT issue a better
  336. message when it knows the connection is not open (CK_TTYFD is defined and
  337. ttyfd == -1).  doinput(), ckuus4.c, 19 May 97.
  338. Added SET INPUT AUTODOWNLOAD { ON, OFF } (to control autodownload during INPUT
  339. separately from during CONNECT) and SHOW INPUT.  ckuusr.h, ckuus[r2457].c,
  340. 19 May 97.
  341. Changed CD to use CDPATH, like ksh.  If the CDPATH environment variable is
  342. defined, then it is used: if a CD command is given for a relative directory,
  343. then if it is not found in the current directory, the CD path is searched for
  344. a directory that contains a directory of the given name.  ckucmd.c, ckuus5.c,
  345. 20 May 97.
  346. Rearranged #ifdefs in ckcdeb.h so CK_ENVIRONMENT would take effect for UNIX.
  347. 20 May 97.
  348. Added CGET command (GET to pipe).  ckuusr.h, ckuusr.c.  21 May 97.
  349. Added SET EOF as invisible synonym for SET FILE EOF.  ckuusr.h, ckuus[37].c,
  350. 21 May 97.
  351. Fixed UNIX version of CD, when following CDPATH, to treat an empty member as
  352. the current directory, rather than root (by definition of CDPATH).  ckucmd.c,
  353. 22 May 97.
  354. Changed netopen() to supply "23" as the default service, rather than "telnet",
  355. to sidestep all the problems we have been having with getservbyname()
  356. returning the service number with its bytes swapped.  ckcnet.c, 23 May 97.
  357. Installed patches for CMUIP from Wolfgang Moeller <moeller@decus.decus.de>.
  358. ckutio.c, 23 May 97.
  359. Some fixes for Wollongong Pathway from Ray Hunter.  ckcnet.c, ckvtio.c,
  360. 23 May 97.
  361. Some new #ifdefs for UCX / DECC from Martin Zinser.  ckcnet.c, 23 May 97.
  362. Added CHECK NETWORK before trying to SET NETWORK DIRECTORY.  ckermit.ini,
  363. 23 May 97.
  364. Added support for AT&T KeepinTouch modem card.  Moved modem-type definitions
  365. to ckuusr.h.  ckuusr.h, ckudia.c, 27 May 97.
  366. Fixed SET EDITOR and SET BROWSER to convert filename to a full pathname
  367. in case it wasn't already.  Removed SET BROWSER from all implementations
  368. except OS/2 and Windows.  ckuusr.c, ckuus3.c, 28 May 97.
  369. SET EXIT WARNING didn't work properly when connection was opened with
  370. -l, -j, or -J on command line.  Fixed in ckuusy.c, 29 May 97.
  371. Fixed SET EDITOR to use EDITOR environment variable as default.
  372. Fixed SET PROTOCOL not to parse external command fields if protocol is Kermit
  373. (it never should have); Kermit isn't an external protocol.  ckuus3.c, 1 Jun 97.
  374. Added "autoserver" command, 1 Jun 97:
  375.  . It is not part of ptab[], since is specific to Kermit protocol.
  376.  . Initialize char * srvstring to "kermit -x" in initproto(), ckcmai.c.
  377.  . Added new 3rd field to SET PROTOCOL KERMIT for server string, ckuus3.c.
  378.  . Updated SHOW PROTOCOL to display the server string, ckuus4.c.
  379.  . Added code to send server string when GET or REMOTE are given, ckcpro.w.
  380.  . Updated help message for SET PROTOCOL, ckuus2.c.
  381. Added -O command-line option: "be a server, but execute Only One command".
  382. ckuusy.c, 1 Jun 97.
  383. Added a new keyword flag, CM_HLP, which (when combined with CM_INV), means
  384. that the keyword, which is normally invisible, becomes visible in a HELP
  385. command.  Adjusted calling conventions and prototypes for various command
  386. parsing functions accordingly.  ckucmd.h, ckucmd.c, 2 Jun 97.
  387. Added new keywords to top-level cmdtab[]: FUNCTIONS and KVERBS with CM_HLP
  388. flag, visible only from HELP.  ckuusr.c, 2 Jun 97.
  389. Filled in help text for each function (61 of them), and fixed some mistakes in
  390. the function keyword table, fnctab[].  Adds about 8K. ckuus[24].c, 2 Jun 97.
  391. Added reference to HELP FUNCTION to SHOW FUNCTION.  ckuus5.c, 2 Jun 97.
  392. Added v(regname), v(regorg), v(regnum), invisible variables for
  393. registration info; they just call get_reg_blah() from ckoetc.c.  ckuusr.h,
  394. ckuus4.c, 2 Jun 97.
  395. Added v(xprogram), the specific program name: "K-95", "K/2", or "C-Kermit".
  396. ckuusr.h, ckuus4.c, 3 Jun 97.
  397. From Jeff, 5 Jun 97:
  398.  . v(line) changed to return Kermit form of TAPI device name (no blanks etc).
  399.  . Fix for internal coding error with IF EQUAL s1 s2.
  400. Added IF TAPI.  ckuusr.h, ckuus6.c, 5 Jun 97.
  401. Seemingly minor problems with cmdir() directory parsing fixed, 5 Jun 97:
  402.  1. "cd /" would tend to fail because "too many directories match"; fixed in
  403.     cmdir() by not calling zxpand if we are parsing a directory name and it
  404.     does not contain any wildcard characters.
  405.  2. "cd xxx<ESC>" would not supply the trailing directory separator when
  406.     completion was successful.  Fixed in ckucmd.c.
  407.  3. "cd xxx?" could produce unbalanced columns, etc.
  408.  4. "cd xxx<ESC>" would fail even if only one directory started with "xxx",
  409.     if a regular file also started with "xxx".
  410. Problems 3 and 4 resulted from the fact that "x = zxpand(string);" returned
  411. the number of *all* matching files, not just the number of directories that
  412. matched.  But since it's far too late to change the API to add a new function
  413. to return a list of directories, or to add an argument to zxpand(), I used a
  414. horrible hack: cmdir() sets a global variable, dironly, if a list of only
  415. directories is desired.  If dironly == 0, zxpand() behaves as before.  This
  416. was implemented in the UNIX version of zxpand() in ckufio.c, but nowhere else,
  417. although it is easy enough to add (but not to test!) in OS-9, etc.  If dironly
  418. is to be set prior to calling to zxpand(), but MUST be restored immediately
  419. after so as not to disrupt other legitimate callers throughout the code.
  420. Thus, this usage is strictly confined to cmdir() (really cmifi2()) and not
  421. documented in the API.
  422.  5. "cd xxx<ESC>" left a space at the end when completion was successful.
  423. It has to, in case there is a subsequent field.  Peter Eichhorn asked that it
  424. stop at the "/" in case there are subdirectories, but how would we know (a)
  425. that there *are* subdirectories without descending through the entire
  426. directory tree, which could take hours, and (b) that even if there were
  427. subdirectories, that this was not the directory the user wanted to CD to?
  428. So no action here.  BTW, note that "if directory blah" does not use cmdir();
  429. if it did, and "blah" was not a directory, we'd get a parse error.
  430. Added SET BPRINTER (bidirectional printer port) for K95 only; Jeff will fill
  431. in details; ckuusr.[ch], ckuus3.c, 6 Jun 97.  Full syntax is:
  432. SET BPRINTER [ port speed [ parity [ flow ] ] ].
  433. Fixed help text for PRINT and SET PRINTER.  Put BPRINTER code in #ifdef
  434. BPRINT.  7 Jun 97.
  435. Added options to SET EDITOR and SET BROWSER.  ckuus[r35].c, 8 Jun 97.
  436. Added v(editor), v(editopts), v(editfile), v(browser), v(browsopts),
  437. v(browsurl).  ckuusr.h, ckuus4.c, 8 Jun 97.
  438. Added BROWSE command for UNIX & K95.  ckcdeb.h, ckuusr.h, ckuusr.c, 8 Jun 97.
  439. Changed ^W to delete back to nonalphanum rather than back to space.
  440. ckucmd.c, 8 Jun 97.
  441. Updated help text for today's changes.  ckuus2.c, 8 Jun 97.
  442. Fix GETOK -- it had garbage for the default prompt.  ckuus6.c, 17 Jun 97.
  443. Added STATISTICS /BRIEF for Peter Eichhorn.  ckuusr.[ch], ckuus[24].c,
  444. 18 Jun 97.
  445. Fixed Telnet SEND LOCATION negotiation to send WONT, rather than WILL,
  446. if we don't have a location, in response to DO LOCATION.  ckcnet.c, 18 Jun 97.
  447. Fixed EDIT and BROWSE to handle %1 (OS/2 & Windows only) and %s in the options
  448. string as a filename placeholder.  ckuusr.c, 18 Jun 97.
  449. Added array initializers, e.g. "declare &a[3] {value1} {value2} {value3}".
  450. Initializers are (a) optional, (b) start with element 1, (c) can only be given
  451. up to the size of the array, (d) must be enclosed in braces if they contain
  452. spaces, (e) are stored literally and not evaluated.  ckuusr.c, 18 Jun 97.
  453. Added OS-9 support for incoming TCP/IP connections, from Steve Rance
  454. <stever@ozemail.com.au>.  OS-9 has no select() call, so he made a dummy one.
  455. ckcnet.c, 19 Jun 97.
  456. Defined BIGBUFOK for AIX on RISC.  ckcdeb.h, 20 Jun 97.
  457. ---1.1.13---
  458. Installed MINIX 2.0 changes from Terry McConnel, Math Dept, Syracuse U,
  459. trmcconn@syr.edu, plus a new makefile target.  cku[tf]io.c, ckuus6.c,
  460. ckucmd.c, makefile, 28 Jun 97.
  461. Added zfnqfp() (the unspellable function) for AOS/VS.  Also zmkdir() and
  462. isdir(), plus the changes for the new cmdir() support.  ckcdeb.h, ckuus3.c,
  463. ckuus6.c, ckdfio.c, 29 Jun 97.
  464. Removed spurious "extern int delay" from ckcfn2.c.  29 Jun 97.
  465. Filled in MKDIR and RMDIR commands for AOS/VS.  But rmdir() doesn't work for
  466. some unknown reason; "perror" always says "30 End of File".  The AOS/VS C
  467. programming docs do not list any way to delete a directory.  So I changed it
  468. to system("delete blah"), where blah is the directory name.  It works, but it
  469. doesn't return a status code, and it also removes regular files.  Meanwhile,
  470. AOS/VS stat() sometimes crashes.  There's nothing I can do about it, and no
  471. pattern I can find as to what conditions make it happen.  ckuusr.c, 30 Jun 97.
  472. Changed sfile() not to send filename as FILE001, etc, if an as-name is defined
  473. as a variable that has no value.  This was a bug introduced in the template
  474. code.  "send %1 %2" would cause this to happen (as in the BSEND macro).
  475. ckcfns.c, ckermit2.upd, 30 Jun 97.
  476. Fixed DG isdir() to not call stat(), to prevent crashing -- now it does the
  477. appropriate VS syscall directly.  Also fixed DG iswild() not to return false
  478. positives because of ^, which is like .. in UNIX.  ckdfio.c, 1 Jul 97.
  479. Fixed cmdir() for DG to not append : to directory name during completion,
  480. because chdir() does not work if you do that.  ckucmd.c, 1 Jul 97.
  481. END from inside SWITCH did not work right -- SWITCH, although implemented
  482. as a macro internally, should not count as a macro level to END.  This was
  483. already handled correctly for FOR, WHILE, and XIF.  Added SWITCH to the list.
  484. ckuusr.c, 3 Jul 97.
  485. Added cmswi(), which is just like cmkey(), but for switches (optional keywords
  486. that begin with "/").  If the CM_ARG bit is set in the keyword table, then the
  487. switch takes an argument, separated by ":" or "=", e.g. /PROTOCOL:KERMIT.
  488. Otherwise, it doesn't, e.g. /BINARY.  ckucmd.[ch], with some testing material
  489. (under the TYPE command) in ckuusr.[ch], 4 Jul 97.
  490. Added chained parse fields.  New function cmfdb(), takes the address of an FDB
  491. struct (containing parse function code plus inputs for the function -- help
  492. message text, default, etc), as an arg, which may contain a pointer to another
  493. one, and so on, until the "next-FDB" pointer is null.  If user's input is not
  494. parsed successfully by the first, then the second is tried, and so on to the
  495. end of the chain, at which point a parse error is returned.  ESC and ? work.
  496. ckucmd.[ch], 4 Jul 97.  (What does FDB stand for?  I don't remember; that's
  497. what they were called in TOPS-20... Function Descriptor Block?)
  498. Removed testing material from the TYPE command.  Added experimental XSEND
  499. command, which is like SEND, but takes all sorts of switches: /BINARY,
  500. /AS-NAME:xxx, etc.  It replaces the old SEND, plus CSEND and PSEND, as well as
  501. MOVE and the BSEND and TSEND macros.  Filled in the actions for all switches.
  502. XSEND is implemented entirely in doxsend().  ckuusr.[ch], 5 Jul 97.
  503. Finished testing & debugging XSEND command.  Verified that when given no
  504. switches, it behaves exactly like the SEND command, and so repaced the SEND
  505. command with doxsend(), leaving the old code still there for CSEND, PSEND,
  506. etc, so they can still be used.  The new arrangement allows more and more
  507. variations on SEND to be accomplished without adding top-level commands.  It
  508. also allows combinations that were not possible before, such as /PRINT or
  509. /MAIL with a SEND-LIST, SEND /PRINT /DELETE or SEND /COMMAND /MAIL:address.
  510. Changed MOVE, CSEND, MAIL, and RESEND to use doxsend(), since they have the
  511. same format as SEND.  Left MSEND, MMOVE separate.  Added description of
  512. switches to ckermit2.upd, section 1.5, and new section 4.7 on SEND command.
  513. Changed HELP SEND text.  6 Jul 97.
  514. Same treatment for RECEIVE / CRECEIVE; GET / REGET / CGET / RETRIEVE.
  515. ckuus[r6].c, ckermit2.upd, 7 Jul 97.
  516. Updated help text for RECEIVE and GET.  ckuus2.c, 8 Jul 97.
  517. Updated section 4.2 of ckermit2.upd to show new forms.  8 Jul 97.
  518. Added switches to MSEND and MMOVE, combined code into doxsend().
  519. Made many of the stupider command names (CGET, RETRIEVE, etc) invisible;
  520. now top-level ?-help looks a lot better.  ckuusr.c, 8 Jul 97.
  521. Corrections and refinements to switch code.  Fix MSEND/MMOVE when used with
  522. ZMODEM, when used with /MAIL, etc.  Eliminate ambiguity about what happens
  523. when a switch that must take an arg is followed by a space.  The rule is:
  524. if a switch name ends in : or =, then if the next character is a space, that
  525. means an empty value has been given, and the next field is parsed.  ckuusr.c,
  526. ckucmd.c, 9 Jul 97.
  527. #ifdef adjustments for HP-UX 10.x and Digital UNIX 3.2/4.0 from Jonathan
  528. Kamens <jik@cam.ov.com>.  ckcdeb.h, ckufio.c, ckutio.c, 12 Jul 97.
  529. Fixes (or stabs in the dark at fixes) for recently reported VMS problems; see
  530. notes in ckvtio.c for edit 091.  12 Jul 97.
  531. Added some missing #ifdefs for protocol switching and pipesend to the recent
  532. switch-parsing code.  ckuus[r6].c, 12 Jul 97.
  533. Added some missing prototypes for recently added command-parsing functions.
  534. ckuusr.h, ckucmd.h, 12 Jul 97.
  535. --Alpha.01--
  536. Added APC check to MOVE/MMOVE -- we don't want APC strings stealing files
  537. from people...  ckuusr.c, 13 Jul 97.
  538. Now that we have all the pipesend / receive filter stuff in place, it turned
  539. out to be easy to rearrange the mail-receiving code to pipe the incoming
  540. material directly into the mail program (in UNIX).  This has the advantages of
  541. (a) not requiring a temp file, and (b) allowing a normal subject in place of
  542. the filename.  Temp files were bad not only because they required (a) space,
  543. and (b) writeability of the current directory, but also because using them
  544. could result in wiping out an existing file.  So now:
  545.   send /mail:whoever@xyz.com /as:{Hi there} oofa.txt
  546. when sent to C-K results in whoever@xyz.com receiving oofa.txt as email
  547. with subject "Hi there".  ckcpro.w, ckcfns.c, 13 Jul 97.
  548. Added /SUBJECT: as a synonym for /AS-NAME:, and fixed a couple minor glitches
  549. related to mail.  ckuusr.c, 13 Jul 97.
  550. Changed reception of print files (from REMOTE PRINT or SEND /PRINT) to use
  551. pipes also.  UNIX only.  ckcpro.w, ckcfns.c, 13 Jul 97.
  552. In response to people *still* complaining about exit warning when they swear
  553. the modem is not asserting CD...  In hupok(), ttgmdm() returns an error.  This
  554. can happen if we used to have carrier but now we don't and the device driver
  555. won't let us look at the device any more (e.g. Solaris 2.5).  Previously, we
  556. always set needwarn to 1 here to be safe, but really, if CARRIER-WATCH is OFF,
  557. we already decided not to warn, so CARRIER-WATCH must be ON or AUTO, which
  558. *probably* means that we had CD on this connection before, and so if ttgmdm()
  559. fails now, it means we don't have it any more.  So now let's try NOT warning
  560. when ttgmdm() returns an error.  ckuus3.c, 13 Jul 97.
  561. Speaking of modems, in response to increasing requests for an option to ignore
  562. dialtone, added SET DIAL IGNORE-DIALTONE { ON, OFF } and SET MODEM COMMAND
  563. IGNORE-DIALTONE <command>, and a new ignoredt member to struct MDMINF, etc
  564. etc.  Untested, except that SET, SHOW, and HELP work OK.  ckcker.h, ckuusr.h,
  565. ckuus[234].c, ckudia.c, 13 Jul 97.
  566. Back to VMS...  Noticed that zxpand() would malloc() its array of filenames
  567. every time it was called, but nobody would ever free them.  Fixed in ckvfio.c,
  568. 14 Jul 97.
  569. An off-by-one error in the switch parser caused the placeholder for highest-
  570. numbered switch value (SND_LBL) to go uninitialized, thereby making VMS
  571. C-Kermit send in labeled mode (depending what was in the uninitialized
  572. memory).  Fixed in doxsend(), ckuusr.c, 14 Jul 97.
  573. Lots of changes to isdir() and cmdir() for VMS.  The idea is to make directory
  574. parsing work as in UNIX, Windows, AOS/VS, etc, but it's much harder in VMS
  575. because a directory can be represented in many ways: a logical or device name,
  576. or [FOO.BAR], or DEV:[FOO.BAR], or [FOO]BAR.DIR;1, etc.  This was about two
  577. days' work, with some help on isdir() from Mark Berryman.  ckucmd.c, ckvfio.c,
  578. 15 Jul 97.
  579. Removed gratuitous message showing new directory from docd().  ckuus5.c,
  580. 15 Jul 97.
  581. Fixed UNIX "cd ~name" to work again -- I must have broken it recently.
  582. ckucmd.c, 15 Jul 97.
  583. Changed ckindex() to accept -1 as a "starting position" argument, meaning
  584. "length of string 2".  ckcmai.c, 15 Jul 97.  (NOTE: fix frindex() to take
  585. advantage of this...)
  586. Amplifed, reorganized, and numbered ckuins.doc.  16 Jul 97.
  587. Attempted to add support for 57600, 76899, and 115200 bps for IRIX 6.2 (the
  588. first release of IRIX that supports these speeds).  A previous attempt at
  589. doing this by adding -DPOSIX to the make was a disaster.  This time I tried
  590. defining POSIX for IRIX62 within ckutio.c only around ttsspd() and ttgspd(),
  591. and also defined the BPS_xxx symbols for IRIX62 in ckcdeb.h.  16 Jul 97.
  592. Mike Freeman reported that login scripts didn't work in VMS.  Evidently this
  593. was because a new check was added for ttyfd == -1, but VMS doesn't use file
  594. descriptors, and so ttyfd is always -1 there.  Fixed doinput() in ckuus4.c to
  595. skip this test for VMS.  16 Jul 97.
  596. Found a few places where the protocol module was not setting the exit status
  597. code; hopefully caught them all.  ckcfn2.c, 16 Jul 97.  Nope, that wasn't it.
  598. The real problem was that the "what" variable was set to W_NOTHING until a
  599. protocol transfer actually had begun.  So if we timed out on the first packet,
  600. ORing "what" into the exit status had no effect.  Fixed in ckcpro.w by
  601. initializing what to 1 rather than W_NOTHING.  16 Jul 97.
  602. Changed "CD" (by itself) in VMS to simply chdir("SYS$LOGIN:").  ckvfio.c,
  603. 16 Jul 97.
  604. Fixed IF ALARM to make sure both time comparands are left-padded with "0"s
  605. so they compare correctly with strcmp().  ckuus6.c, 18 Jul 97.
  606. Previously MGET and GET were synonyms.  But now the new GET syntax prevents
  607. the (little-known) feature in which you could GET a list of files, like "get
  608. oofa.txt *.ps /etc/motd".  So now MGET has become a separate command that does
  609. allow this syntax (but no as-names).  This also fixes a problem with "get xxx
  610. yyy" (i.e. as-name is yyy), resulting in "?Write permission denied - yyy".
  611. It also fixes a bug with "get {xxx yyy zzz}", in which the first "{" was not
  612. removed prior to sending the R packet.  ckuusr.[ch], ckuus[26].c, 19 Jul 97.
  613. Added a note to top-level help about macro names.  Changed built-in predefined
  614. names _forx, _whilex, etc, to be invisible so they don't show up in "do ?".
  615. ckuus5.c, 19 Jul 97.
  616. Corrections & updates to ckermit2.upd, 19 Jul 97.
  617. Fixed ANOTHER off-by-one error in the declarations of switch tables for SEND
  618. and GET (this was a bad one, causing core dumps).  ckuus[r6], 19 Jul 97.
  619. ---Alpha.02---
  620. James Cameron verifies the VMS problem with closing DECwindow on C-K is fixed.
  621. 20 Jul 97.
  622. Added cmdate() to parse a date and/or time.  ckucmd.[ch], 20 Jul 97.
  623. Dale Dellutri says problem with hanging after "Communications disconnect" is
  624. fixed, but NO CARRIER message never shows up (as it always did in 5A(190)).
  625. Asked him for a debug log.  21 Jul 97.
  626. Added /BEFORE: and /AFTER: switches to SEND, using cmdate().  Also added
  627. /LARGER-THAN: and /SMALLER-THAN:.  ckcfns.c now has a nice fileselect()
  628. routine that decides whether to send the file based on these switches.
  629. ckuusr.c, ckcfns.c, ckuus2.c, ckermit2.upd, 21 Jul 97.
  630. Added a crude pattern matcher, ckmatch(pattern,string), supporting only * and
  631. ? as metacharacters.  ckcmai.c, 21 Jul 97.
  632. To test it, added IF MATCH <string> <pattern>.  ckuusr.h, ckuus6.c, 21 Jul 97.
  633. Added /EXCEPT:<pattern> to SEND.  ckuus[r2].c, ckermit2.upd, 21 Jul 97.
  634. Fix #ifdefs so that CK_ENVIRONMENT is not defined unless TCPSOCKET is defined,
  635. to prevent unresolved externals at link time in non-TCP/IP UNIX builds.
  636. ckcdeb.h, 21 Jul 97.
  637. Add new updates for wait() argument (is it "int" or is it "union wait"?).
  638. ckutio.c, 21 Jul 97.
  639. Rearrange some lines in ckcnet.c so ucx_port_bug does not turn up undefined
  640. if we are using DECC, 21 Jul 97.
  641. Built on Digital UNIX 4.0 (where there is a warning about wait() that I can't
  642. seem to shut up) and 3.2 (no problem there).  21 Jul 97.
  643. Fixed numerous #ifdef errors regarding feature selection, many modules.
  644. 21 Jul 97.
  645. Shuffled some more #ifdefs and variable declarations to allow for NOICP build.
  646. Minor help text cleanups.  Don't allow SEND /STARTING-AT:n for file groups.
  647. Many modules, 22 Jul 97.
  648. Fixed another (off-by-one) bug with transfer mode in VMS (it always insisted
  649. on receiving in labeled mode).  ckuus6.c, 22 Jul 97.
  650. VMS C-Kermit would crash if given invalid command-line args detected in
  651. prescan() because fatal(), called to print the error message, could not print
  652. it because sysinit() had not yet been called to obtain the console channel.
  653. This mess really needs cleaning up.  Meanwhile, I worked around it by having
  654. all the console i/o routines in VMS check first to make sure they have an open
  655. channel, and also to have main set a global flag "initflg" after return from
  656. sysinit() to indicate that sysinit has been done.  If it hasn't, then fatal
  657. calls sysinit() first before trying to print any messages or exit.  This is
  658. also important elsewhere in case (e.g.) we try to restore some systemish
  659. things that we haven't saved yet, e.g. tty modes or somesuch.  ckcmai.c,
  660. ckuusx.c, ckvtio.c, 22 Jul 97.
  661. Fixed cmini() to not assume that buffers had already been malloc'd.
  662. ckucmd.c, 22 Jul 97.
  663. Got tired of having to remember to update version numbers, dates, etc, in so
  664. many places, so broke all these strings up into their component parts so that
  665. each one only has to be changed in one place, pretty much, and then added a
  666. routine, makever(), to put the various strings and numbers in the places where
  667. all the other routines expect to find them.  ckcmai.c, 24 Jul 97.
  668. Added v(test) == "0" if this is not a test version of Kermit, or else the
  669. test version, e.g. "Alpha.03".  ckuusr.h, ckuus4.c, 24 Jul 97.
  670. Added optional pattern for SHOW VARIABLES, e.g. "show var *ver*".  Also, "show
  671. var x" shows all variables whose names start with x, etc.  ckuus5.c, 24 Jul 97.
  672. Fixed a bug in the parsing of the LOCAL command.  ckuus5.c, 24 Jul 97.
  673. The test for DELETE success/failure was wrong in the non-K95 case.
  674. Fixed in dodel(), ckuus6.c, 25 Jul 97.
  675. Added fn2hex() and fn2oct() to convert numbers to hex and octal.  fhexify()
  676. converts *strings* to hex, which is quite different.  E.g. fhex(16) = 3130,
  677. whereas fn2hex(16) = 10.  ckuusr.h, ckuus[24].c, 26 Jul 97.
  678. Changed default maximum packet buffer size to 290K if BIGBUFOK and DYNAMIC are
  679. both defined at compile time.  This doesn't change the size of the executable,
  680. and the memory is allocated only if requested.  ckcker.h, 26 Jul 97.
  681. Missing file display on RESEND after SEND, and SEND after RESEND behaved like
  682. RESEND.  Fixed misplaced #ifdefs in doxsend.  ckuusr.c, 26 Jul 97.
  683. Scenario: my current directory has a file that I can delete, but the directory
  684. itself lacks write permission.  I try to receive a file into this directory
  685. that has the same name as an existing file, with FILE COLLISION set to BACKUP.
  686. The transfer fails, not because I can't overwrite the original file, but
  687. because I can't create the backup file.  But when in local mode, the
  688. appropriate message does not make it to the file-transfer display.  This took
  689. quite a bit of reworking how E packets work and where their messages are
  690. saved, but it seems OK now.  If the user sees the new message ("Can't create
  691. backup file"), she can switch to SET FILE COLLISION OVERWRITE or APPEND,
  692. which work.  ckcpro.w, ckcfn*.c, ckermit.bwr, 26 Jul 97.
  693. Things I should have thought of long ago dept, cont'd...  Added a new internal
  694. variable, xferstat, that remembers the status of the most recent file
  695. transfer: -1 = no transfer yet, 1 = failure, 0 = success.  Added this info,
  696. plus the text of the error packet that terminated an unsuccessful transfer,
  697. to the STATISTICS display.  Also added variables for these: v(xferstat)
  698. and v(xfermsg).  ckuusr.h, ckuus4.c, ckermit2.upd, 26 Jul 97.
  699. Cleaned up a bunch of internal messiness involving file-transfer failures.
  700. For example, clsof and clsif should not do all of their usual stuff if the
  701. file they are trying to close was never opened.  In particular, they should
  702. not call fstats(), which writes messages to the transaction log and
  703. accumulates statistics.  ckcpro.w, ckcfn[s23].c, ckuusx.c, 26 Jul 97.
  704. Simplified & corrected parsing of RETURN and added brace-stripping for the
  705. return value.  ckuusr.c, 26 Jul 97.
  706. Added a BACK command, which means to "CD to my previous current directory".
  707. Very simple, not a stack -- so successive BACK commands just switch between
  708. two directories.  ckuusr.[ch], ckuus[52].c, ckermit2.upd, 26 Jul 97.
  709. Added an optional switch, /RAW-SOCKET, to end of SET HOST / TELNET command.
  710. It can be given only if you first give a host and a port.  When this switch is
  711. given, ttnproto is set to the new value, NP_TCPRAW.  See ckermit2.upd 2.3.5.
  712. ckuus7.c, ckcnet.[ch], 26 Jul 97.
  713. Fixes to /raw-socket code from yesterday to make it actually work, and add
  714. display of this to SHOW NET.  ckcnet.[ch], ckutio.c, ckuus4.c, 27 Jul 97.
  715. Fixes to epktmsg-related code from yesterday -- in some cases the pointer was
  716. not initialized, causing core dumps, etc.  Many modules, 27 Jul 97.
  717. Added zgperm() to ckufio.c, UNIX only for now (protected by CK_PERMS), to get
  718. file modes/permissions.  ckufio.c, ckcplm.doc, 27 Jul 97.
  719. Used zgperm() in rcvfil() in the file collision section.  If the incoming file
  720. has the same name as an existing file, and we are going to create a new copy
  721. or overwrite the existing file, we get its permissions first and stuff them
  722. into the attribute structure when initializing it (in initattr()).  If the
  723. sender puts its own (local-format) permissions in the A-packet, these will
  724. override.  But if it doesn't, then the new file inherits the permissions of
  725. the old one.  If there is no A-packet, the new file inherits the old file's
  726. permissions, but the new file gets the current date and time.  If there is
  727. no file collision, there is no inheritance.  ckcfn[s3].c, 27 Jul 97.
  728. Adjustments to ckcnet.h for DECC 5.5-002 (remove bzero/bcopy prototypes).
  729. 27 Jul 97.
  730. ---Alpha.03---
  731. Fixed some bad buffer & pointer declarations in ckcmai.c when DYNAMIC not
  732. defined.  28 Jul 97.
  733. Changed SEND /EXCEPT: to allow a list of patterns, rather than just one.
  734. ckuus[r5].c, ckcfns.c, 29 Jul 97.
  735. Added SEND /NOT-AFTER: and /NOT-BEFORE: to get the {greater,less}-than-or-equal
  736. effect.  ckuusr.[ch], ckuus2.c, 31 Jul 97.
  737. Added SET FLAG { ON, OFF } and IF FLAG.  It's just a user-settable flag that's
  738. easy to test in scripts.  ckuusr.[ch], ckuus[23].c, 1 Aug 97.
  739. Added { SEND, RECEIVE, GET, etc } /FILTER.  ckuus[r26].c, 1 Aug 97.
  740. Fix from Jeff for reconnecting to a raw TCP socket without having the protocol
  741. switch to Telnet.  ckcnet.c, 2 Aug 97.
  742. Changed dial module to echo commands if DIAL DISPLAY is ON but modem is not
  743. echoing them.  ckudia.c, 2 Aug 97.
  744. Added a new member to struct MDMINF -- ini2, the last-minute init string, to
  745. be sent just prior to dialing.  For compatibility with TAPI.  ckcker.h,
  746. ckudia.c, 2 Aug 97.
  747. Added SET MODEM COMMAND PREDIAL-INIT <string> to set the last-minute init
  748. string.  ckuusr.h, ckuus[23].c, 2 Aug 97.
  749. Reported problem with PPI seems to be lost chars on output -- commands are OK.
  750. Added v(sendlist) = number of entries in send-list.  ckuusr.h, ckuus4.c,
  751. 2 Aug 97.
  752. Updated the TAP script to be more robust, etc.  ckepage.ksc, 2 Aug 97.
  753. Added /PATHNAMES:{ON,OFF} and /FILENAMES:{CONVERTED,LITERAL} to SEND commands.
  754. SEND /PATHNAMES:ON also temporarily SETs FILE NAMES LITERAL.
  755. Noticed that more-prompting in the STATISTICS command was messed up.  It
  756. turned out that the cmd_rows variable got set to 0 after a failed file
  757. transfer (and who knows what else!).  Why?  When an E packet is received, we
  758. have some new code to copy the error message to a "failure reason" buffer
  759. using strncpy.  Well, the target buffer was being accessed thru a string
  760. pointer that was mistakenly declared as an array (it originally was an array,
  761. but later was changed to a pointer, and evidently the change didn't propogate
  762. thru all the modules).  This one was great fun to track down.  ckcfn[s23].c,
  763. ckuus4.c, 2 Aug 97.
  764. Some testers of Alpha.03 noticed that REMOTE DIRECTORY didn't work.  It was
  765. actually worse than that.  I had broken this when adding the code to avoid
  766. closing a file when it wasn't open.  First, the o_isopen flag was not always
  767. being set, and second reof() did not give a proper return code.  Now fixed.
  768. ckcfn[s3].c, 2 Aug 97.
  769. But sending of remote commands to pipes was also broken in Alpha.03.  This
  770. required adding a system-independent front-end to zxcmd(), openc(), that sets
  771. the o_isopen flag.  ckcfn3.c, ckcpro.w, 3 Aug 97.
  772. Integrated Jeff's changes from the past week.  Many modules, 10 Aug 97.
  773. Replaced all HP-UX makefile entries with new ones from Peter Eichhorn.
  774. makefile, 10 Aug 97.
  775. Added high serial speeds for SCO OSR5.0.2, along with a new symbol,
  776. POSIX_SPEEDS, used to select POSIX speed setting/getting separately from POSIX
  777. for everything else, and predefined this for OSR5.0.2 and IRIX 6.2, along with
  778. POSIX itself and BSD44.  Added new makefile entries for SCO OSR5.0.2.
  779. ckcdeb.h, ckutio.c, ckuver.h, makefile, 10 Aug 97.  But this doesn't work at
  780. all -- REVISIT THIS MONDAY...
  781. Fixed spurious error message issued by VMS C-K when doing a GET command.
  782. ckuus6.c, 10 Aug 97.
  783. More futzing with SCO OpenServer R5.0.2.  To get the new high speeds, I have
  784. to convert completely to POSIX, but this proves to be an adventure because of
  785. the situation with hardware flow control, which is outside the scope of POSIX.
  786. Got it, after much header-file shuffling.  This also involved some minor but
  787. perhaps significant changes to the general POSIX code.  ckcdeb.h, 11 Aug 97.
  788. Fixed a truly horrible bug, in which the modem types above 55, namely
  789. SupraSonic, Best Data, ATT 19x0, and ATT KeepInTouch, were indexed
  790. incorrectly, off by one, because the pointer to SupraSonic was left out of the
  791. modemp[] array.  This goes back to May, and nobody ever noticed.  ckudia.c,
  792. 12 Aug 97.
  793. NOTE: THERE IS STILL MORE CONFUSION LURKING because of 1-based modem numbers
  794. versus 0-based modemp indexes!
  795. More fixes for POSIX serial i/o in SCO OSR5.0.2, and presumably elsewhere too.
  796. ckutio.c, 12 Aug 97.
  797. Spent the morning determining there was no way to read modem signals in SCO
  798. OSR5.0.4 (in termio.h, TIOCMGET is defined only if _SVID3 is defined *and*
  799. _POSIX_SOURCE is *not* defined, but we need _POSIX_SOURCE defined so we can
  800. get the high serial speeds).  Anyway the underlying ioctl() probably is a just
  801. no-op.  13 Aug 97.
  802. Noticed and fixed a typo in the Telebit init string: S61=1 should be S61=0
  803. (BREAK action should be "do what S63 says" rather than "return to command
  804. mode").  ckudia.c, 13 Aug 97.
  805. Fixed hardware flow control in SCO OSR5.0.4 -- more #ifdef juggling.
  806. makefile, ckcdeb.h, ckutio.c, 13 Aug 97.
  807. Changed references to modemp[n_TAPI] to modemp[n_TAPI - 1] because the
  808. modemp[] array is 0 based even though the modem type numbers are 1-based.
  809. Confusing but true.  ckudia.c, 13 Aug 97.
  810. Another day spent with SCO 5.0.4.  Evidently the new stuff (high serial speeds
  811. etc) only works in 5.0.4, even though it might be in the header files for
  812. 5.0.2, so I changed the symbols, makefile entry names, etc, accordingly.
  813. Experimentation with flow control revealed:
  814.  . The <sys/termiox.h> material (RTSXOFF/CTSXON) compiles OK but doesn't work
  815.    (the ioctls return -1).
  816.  . The RTSFLOW/CTSFLOW material does not show up in a POSIX compilation.
  817.  . Forcing RTSFLOW/CTSFLOW definitions (yuk) seems to do the trick.
  818. But forcing TIOCMGET does not get us working modem signals -- the ioctls just
  819. say "invalid argument".  But I left it in anyway, because some third-party
  820. drivers, like Digiboard, might implement it.  ckcdeb.h, ckutio.c, ckuus5.c,
  821. makefile, ckuins.doc, 14 Aug 97.
  822. Straightened out the aforementioned mess with the modemp[] array.  Now that
  823. wasn't so hard, was it?  ckudia.c, ckuus[34].c, ckuusr.h, 14 Aug 97.
  824. Changed mainline binary variable when switching automatically from text to
  825. binary mode in VMS C-Kermit -- cosmetic only; should only affect the
  826. file-transfer display.  ckvfio.c, 14 Aug 97.
  827. Changed SET EDITOR and SET BROWSER in VMS to parse text strings rather than
  828. filenames.  It turns out that zshcmd() (in VMS, a front end for LIB$SPAWN())
  829. can not run programs when given a filespec; it runs DCL commands, period --
  830. always has -- did I know that?  ckuus3.c, ckermit2.upd, 14 Aug 97.
  831. Added support for USR XJ1560 X2 56K modem.  ckuusr.h, ckudia.c, 14 Aug 97.
  832. Changed keyword parser to skip over CM_INV keywords when completing an
  833. abbreviation.  ckucmd.c, 14 Aug 97.
  834. Fixed some typos from yesterday's SCO work.  ckutio.c, 15 Aug 97.
  835. Discovered that "remote host xxx" followed by "get" did not work.  This was
  836. yet another case of the i_isopen flag not being set (this time in syscmd()).
  837. I'm wondering now what the original idea was behind these stupid flags -- oh
  838. yeah, I remember -- calling fstats() would have the side effect of writing a
  839. misleading transaction log entry if the file had never been opened.  Anyway,
  840. all fixed now.  ckcfn[s3].c, 16 Aug 97.
  841. Fix from Jeff for tn_ini() -- make sure *all* Telnet protocol flags are
  842. reset.  ckcnet.c, 17 Aug 97.
  843. Miscellaneous minor corrections from compiling on many platforms.
  844. ckuusr.c, ..., 17 Aug 97.
  845. ---Alpha.04---
  846. Changed USR X2 max speed to 115200.  ckudia.c, 18 Aug 97.
  847. Some tentative changes for Apollo SR10.  ckuusx.c, ckuver.h, 18 Aug 97.
  848. Some of the cmfld()-parsing SEND (etc) switches were not stripping braces.
  849. ckuusr.c, ckuus6.c, 19 Aug 97.
  850. Console modes were not being twiddled in the EDIT and BROWSE commands, which
  851. affected VMS (some editors would not echo when started).  ckuusr.c, 19 aug 97.
  852. Fixed a problem in which REMOTE HELP failed, caused by a rearrangement of the
  853. code in opent() which, if it succeeded, it did not set a return value, so its
  854. return value was random (i.e. system-dependent).  Now why didn't all those
  855. strict ANSI compilers notice?  ckcfn3.c, 19 Aug 97.
  856. The client end of REMOTE RENAME and REMOTE COPY have been broken since 6.0
  857. came out -- nobody noticed till just now.  The code that was added to parse
  858. redirectors wiped out the second field.  ckuus7.c, 20 Aug 97.
  859. Fixed broken RECEIVE XXX for XMODEM transfers and assorted other parsing
  860. problems in doxget().  ckuus6.c, 23 Aug 97.
  861. Added CONNECT command switches:
  862.  /QUIETLY              All but K95    (n/a)
  863.  /IDLE-LIMIT:int       K95 only       int    tt_idlesnd_tmo;
  864.  /IDLE-STRING:string   K95 only       char * tt_idlesnd_str;
  865.  /TIME-LIMIT:int       K95 only       int    tt_timelimit;
  866.  /TRIGGER:string       K95 only       char * tt_trigger_str;
  867. Like file-transfer switches, these are local to the specific CONNECT command,
  868. overriding, but saving and restoring, the global session-limit and other
  869. corresponding settings.  /QUIETLY was already there, and it's still the only
  870. one that non-K95 users will see; session limits, etc, are implemented only
  871. in K95.  ckuusr.[ch], 23 Aug 97.
  872. Added partial completion of keywords.  ckuusr.h, ckucmd.c, ckcmai.c,
  873. 23 Aug 97.
  874. Corrected a couple minor problems with partial completion and CONNECT
  875. switch parsing.  ckuusr.c, ckucmd.c, 24 Aug 97.
  876. Discovered that if you typed Esc when entering a field parsed by chained
  877. fdb's, nothing happened if the field had no default value -- in fact it should
  878. have beeped.  Fixed in ckucmd.c, 24 Aug 97.
  879. Changed VMS zhome() to use SYS$LOGIN rather than HOME.  This is to avoid the
  880. problem that occurred when using getenv(HOME) as a default for CD, and that
  881. directory was defined as a search path -- e.g. SYS$SYSROOT:[SYSMGR] on a
  882. cluster, where SYS$SYSROOT: was a list of disks, namely that you can't SET
  883. DEFAULT to a search list.  Reportedly using SYS$LOGIN: avoids this problem
  884. and seems to work OK otherwise.  ckuus5.c, 24 Aug 97.
  885. Spent a few hours trying to get the IRIX 6.2 version to compile with POSIX
  886. defined (same deal as for SCO 5.0.4), but could not find a way to make it
  887. execute the definitions & declarations for struct timeval and the select()
  888. related ones.  I finally gave up when I discovered that the IRIX 6.2 system
  889. I was using for this didn't have the high serial speeds defined in any of its
  890. header files anyway.  25 Aug 97.
  891. Added /TRIGGER:string to UNIX CONNECT module.  ckucon.c, 26 Aug 97.
  892. Added SET TERMINAL TRIGGER to set global trigger, which can be overridden by
  893. local switch.  ckuus[s7].c, ckuusr.h, 26 Aug 97.
  894. Expanded trigger feature to allow up to 8 triggers, using the same notation as
  895. SEND /EXCEPT.  Changed makexcept() into makelist(), so it can be used to parse
  896. any {{s1}{s2}...{sn}} string into a list of pointers to s1, s2, ..., sn.
  897. Moved autoexitchk() to ckuusx.c, since it is portable and can be shared by all
  898. CONNECT modules.  Added v(trigger) to give the value of the trigger that was
  899. selected.  Added SHOW TRIGGER to display current SET TERM TRIGGER values.
  900. ckcdeb.h, ckuusr.[ch], ckuus[2457x].c, ckucon.c, ckermit2.upd, 27 Aug 97.
  901. Changed CONNECT to always reset triggerval (i.e. v(trigger)) before going
  902. online, so that v(trigger) refers only to the most recent CONNECT command.
  903. ckuusr.c, ckermit2.upd, 28 Aug 97.
  904. Added trigger support to VMS version.  Plus one last attempt at making VMS
  905. version not lose "NO CARRIER" message.  ckvcon.c, 1 Sep 97.
  906. Added trigger support to AOS/VS version.  ckdcon.c, 1 Sep 97.
  907. Renamed warn variable to ckwarn to avoid conflict in BSDI 3.0.  Also added
  908. support for high serial speeds in BSDI 2.0 and later (including a new makefile
  909. entry).  Many modules, 1 Sep 97.
  910. ---Alpha.05---
  911. Changed VMS zhome() (again), this time from getenv("SYS$LOGIN") to
  912. simply "SYS$LOGIN:".  ckvfio.c, 2 Sep 97.
  913. Still doesn't work -- now we try it without the colon (but only as the default
  914. for "cd", since we need the colon in other contexts).  ckuus5.c, 4 Sep 97.
  915. Previous, cont'd...  Turns out Alpha VMS 6.2 chdir() doesn't work.  Got code
  916. from William Bader to use sys$setddir() instead.  Works OK, but (OF COURSE
  917. there's a BUT) it applies to the whole job and not to just the Kermit process,
  918. so when Kermit exits, the user's default directory has changed to whatever
  919. Kermit last CD'd to.
  920. Rework sending of A-packets so that multiple A-packets can be sent in case all
  921. the attributes won't fit into a single packet:
  922.  . Added an initialize flag parameter to sattr().
  923.  . Changed sattr() to return a positive number if it sent an A packet,
  924.    0 if it didn't have anything to send, or -1 on error.
  925.  . Added a new util routine, maxdata(), to return size of data field, shared
  926.    by sattr() and getpkt().
  927.  . Recoded sattr() to fill data field with as many attributes as will
  928.    fit, marking each one as done, and returning when it can't fit any more,
  929.    or there are no more left, or no more that can fit even by themselves, and
  930.    to send the "end of attributes" attribute only after all attributes that
  931.    could possibly have been sent, were sent, provided at least one was sent.
  932.  . Changed the protocol engine to keep calling sattr() until it says it has
  933.    nothing left to send.
  934. ckcker.h, ckcpro.w, ckcfn3.c, 6 Sep 97.
  935. Changed rpar() to not send I or S packets (or their ACKs) that are longer than
  936. what the other Kermit asked for, again calling the new maxdata() function to
  937. find out the length.  The parts that are chopped off from the end have their
  938. corresponding settings defaulted automatically, overriding whatever the user
  939. might have asked for.  ckcfns.c, 6 Sep 97.
  940. What about F packets in this context? -- if a filename is too long, it is
  941. simply truncated (in both the F/X packet and its ACK); there is no way in the
  942. protocol to have continued file headers.  We could conceivably strip any
  943. path info, but that would not always solve the problem, and anyway the user
  944. can control this with a command.
  945. Added a new system-dependent routine to ckutio.c: ttspdlist().  It returns a
  946. list of speeds (as long ints) that are supported on the platform where
  947. C-Kermit is being compiled.  Then in cmdini() we call this routine and build
  948. our "set speed" keyword table on the fly when the program starts.  This
  949. eliminates (just for UNIX at first) the prebuilt speed keyword table with all
  950. the #ifdefs, and problems keeping the BPS_xxxx symbol definitions in sync with
  951. the tt[sg]speed() routines in all the ck?tio.c modules.  ckcdeb.h, ckutio.c,
  952. ckuus3.c, ckuus5.c, ckcplm.doc, ckccfg.doc, 7 Sep 97.
  953. Added ttspdlist() for VMS.  ckvtio.c, ckcdeb.h, 7 Sep 97.
  954. Added modem table entries for Rolm 244PC and 600 series.  ckuusr.h, ckudia.c,
  955. 10 Sep 97.
  956. Added SET PRINTER PRINT command switches: /BIDIRECTIONAL, /DOS-DEVICE,
  957. /FLOW-CONTROL, /OUTPUT-ONLY, /PARITY, /SEPARATOR, /SPEED, /TERMINATOR,
  958. /TIMEOUT, /WINDOWS-QUEUE.  Only for K95 for now.
  959. ckuusr.h, ckuus3.c, 10 Sep 97.
  960. Made SHOW PRINTER show all these things.  ckuus5.c, 10 Sep 97.
  961. Added SET PRINTER /PIPE:xxx.  ckuusr.h, ckuus3.c, 11 Sep 97.
  962. Updated HELP SET PRINTER, ckuus2.c, 11 Sep 97.
  963. Made another attempt at straightening out the CD mess in VMS.
  964. ckv[ft]io.c, 12 Sep 97.
  965. Added v(startup) to UNIX and VMS, ckuus4.c, ckufio.c, 12 Sep 97.
  966. Debugged VMS changes from 12 Sep.  ckvfio.c, 16 Sep 97.
  967. Added a reference to SET EXIT to HELP EXIT.  ckuus2.c, 16 Sep 97.
  968. Corrected various #ifdefs for building with various features deselected.
  969. ckcpro.w, ckuus6.c, etc, 16 Sep 97.
  970. ---Alpha.06---
  971. Put SET TERM { AUTOSCROLL, AUTOPAGE } in #ifdef OS2.  ckuus7.c, 17 Sep 97.
  972. Put checks for and against modem signals, especially versus hardware flow
  973. control, into the DIAL command, and also turned off hwfc during dialing
  974. automatically for AT&T 19x0 modems.  ckuus6.c, 18 Sep 97.
  975. IF condition keyword was completely out of alphabetical order.  ckuus6.c,
  976. 18 Sep 97.
  977. "set host" to numeric IP address should not call gethostbyname() on any
  978. platform; previously it did this except in Windows.  ckcnet.c, 20 Sep 97.
  979. Fixes from Jeff to my fixes for RTS/CTS vs dialing from 2 days ago, ckcdeb.h,
  980. ckudia.c, ckuus6.c, 20 Sep 97.  NOTE: The right way to do this is to add a new
  981. sys-dependent ttdial() routine, to condition the device for dialing, which
  982. does not overload the flow parameter; we'll do that later since it must
  983. involve changing all the ck?tio.c modules.
  984. Fixes from Jeff to NEW SET PRINTER code for when they give a Windows printer
  985. name as the final word of the command, rather than as a switch value.
  986. ckuus3.c, 20 Sep 97.
  987. Save and restore default or user-requested block check around protocol.
  988. ckcmai.c, ckcpro.w, 20 Sep 97.
  989. Change SET WINDOW parsing to give error message for X and Ymodem[-g], and
  990. changed for ZMODEM to require that window size be a maximum of 64K, and not
  991. a multiple of 64.  ckuus3.c, 20 Sep 97.
  992. Changed SET RECEIVE PACKET-LENGTH to be usable only for Kermit protocol.
  993. In XYZMODEM, if you can change them at all, you have to do it to the sender.
  994. ckuus7.c, 20 Sep 97.
  995. Supplied missing error message for junk typed after "CONNECT" and then
  996. completion was attempted (e.g. "connect xxx<ESC>").  Chained FDB parsing can
  997. be a bit tricky...  ckuusr.c, 20 Sep 97.
  998. Make SET SPEED 134.5 and SHOW SPEED for 134.5 work right.  ckuus[34].c,
  999. 20 Sep 97.
  1000. Fixed UNIX ttspdlist[] not to return two copies of "57600" if _B115200 was
  1001. defined, oops (HPUX only).  ckutio.c, 20 Sep 97.
  1002. Updated UNIX, VMS, etc, BWR and UPD files about lots of stuff.  20 Sep 97.
  1003. VMS CMU/IP fixes from John Santos.  ckvtio.c, ckvker.com, 20 Sep 97.
  1004. New makefile entries for all HP-UX versions from Peter Eichhorn.  20 Sep 97.
  1005. Lots of #ifdef adjusting for building on many platforms with & without various
  1006. features, assorted modules.  Builds OK on SunOS with various feature sets,
  1007. HP-UX 10.20, AIX 4.1, SINIX 5.42, Linux, VMS 5.5, and passes basic runtime
  1008. tests.  20 Sep 97.
  1009. A couple corrections to yesterday's work from Jeff.  ckuus[37].c, 21 Sep 97.
  1010. Changed minor version number from 0 to 1: 6.1.193.  ckcmai.c, 21 Sep 97.
  1011. SET TERM AUTODOWNLOAD wasn't working right in UNIX -- the first packet is
  1012. missed, so we had to wait forever for a timeout before it kicked in.  Not sure
  1013. why it stopped working, but to fix it I changed the hokey mechanism that was
  1014. being used (i.e. throw the packet away and send a NAK) to what I should have
  1015. done in the first place -- put the packet in a global buffer, caching it for
  1016. rpack(), and then actually using the one that kstart() recognized.  Of course
  1017. this wasn't easy in UNIX with the forks and all (no matter wht you want to do,
  1018. the *other* fork is always only place to do it)...  But now it works again,
  1019. and it's much faster.  ckuus4.c, ckucon.c, ckcfn2.c, 21 Sep 97.
  1020. Also removed NAK-sending code from autodown() (the INPUT command autodownload
  1021. handler), ckcfn2.c, 21 Sep 97.
  1022. Fixed VMS version to work with this too (just remove code to send NAK).
  1023. ckvtio.c, 21 Sep 97.
  1024. At the end of a protocol transaction, after we ring the bell, flush stdout --
  1025. otherwise the bell can get queued up for quite a while (e.g. if a file was
  1026. autodownloaded, the bell never rings until the next time you escape back).
  1027. This might also address reports we've had about the file transfer display not
  1028. fully updating itself before returning to the prompt.  UNIX only.  ckuusx.c,
  1029. 21 Sep 97.
  1030. Ctrl-C during autodownload killed the UNIX version of C-Kermit.  This has been
  1031. true since 6.0 was first released.  Fixed in ckuus4.c, 21 Sep 97.
  1032. Added /PROTOCOL: for RECEIVE, still requiring an as-name for XMODEM.
  1033. ckuus6.c, 21 Sep 97.
  1034. Made sure that /PROTOCOL was available for both SEND and RECEIVE even if
  1035. CK_XYZ not defined (in which case it is accepted but does nothing -- i.e.
  1036. protocol remains Kermit), ckuus[r6].c,  21 Sep
  1037. The DG is dead (can't load OS from disk, hard error 0000001), RIP.  21 Sep 97.
  1038. Added addtl msgs for when UNIX C-K can't access dialout device or lockfile.
  1039. ckuus7.c, 22 Sep 97.
  1040. Filled in new speed-setting code for Plan 9.  ckutio.c, 22 Sep 97.
  1041. Now that Ctrl-C out of autodownload doesn't blow C-K away any more, I
  1042. discovered that it does prevent subsequent autodownloads.  After a lot of
  1043. heavy staring, I realized it was because the _apc_command macro is still
  1044. defined.  So I changed the Ctrl-C trap() routine to undefine it, and while
  1045. I was at it, I also had it reset a whole bunch of other protocol-related
  1046. settings by calling a new routine, ftreset(), which can also be called from
  1047. anywhere else when protocol settings need to be restored to their defaults
  1048. (e.g. after dynamic local changes that occurred during file transfer, or
  1049. because of an interrupted file-transfer command that was given with switches).
  1050. ckuusr.h, ckuus[5x].c, 22 Sep 97.
  1051. All the above stuff relative to autodownload broke APC execution in the UNIX
  1052. version of C-Kermit.  Ensured that the upper fork reads stuff from the pipe
  1053. in the same order and number that the lower fork puts the stuff there.  What
  1054. a mess, yuk -- it's so much easier without forks...  ckucon.c, 22 Sep 97.
  1055. Put back hpux500wintcp makefile entry (there's still at least one of them
  1056. out there...)  22 Sep 97.
  1057. Discovered that UNIX C-Kermit would crash upon startup if the current
  1058. directory was not readable.  Fixed in zgtdir(), ckufio.c, 23 Sep 97.
  1059. ---Alpha.07---
  1060. (Actually that last item was done after the Alpha.07 binaries were built,
  1061. a few minutes after the announcement went out...)
  1062. Add /-stripping for URLs in netopen() (K95 only -- we should expand this to
  1063. work for all C-Kermits...)  ckcnet.c, 23 Sep 97.
  1064. The new autodownload code was calling parchk incorrectly, the result being
  1065. that parity was set whenever an autodownload took place, thus (at best)
  1066. slowing down the transfer by as much as 50%, or (at worst) making it fail.
  1067. Fixed in ckcfn2.c, 24 Sep 97.
  1068. ---1.1.14---
  1069. ---1.1.15---
  1070. Broke out separate getpkt() and decode() routines, bgetpkt() and bdecode(),
  1071. for the binary-mode no-parity case, to speed up this very common type of
  1072. transfer.  But the local net is so awful there is no way to tell if it does
  1073. any good.  ckcfns.c, 26 Sep 97.
  1074. Added fflush() to UNIX zsout() if file is ZWFILE (i.e. OPEN WRITE file) to
  1075. make it work better with pipes and FIFO files.  ckufio.c, 4 Oct 97.
  1076. Added SHOW LOGS (broke this out from SHOW FILE, which was getting too long).
  1077. ckuus[r45].c, ckuusr.h, 7 Oct 97.
  1078. Changed SET TRANSFER CRC-ACCUMULATION default from ON to OFF to speed up
  1079. transfers, added display of this setting to SHOW PROTOCOL.  ckcfns.c,
  1080. ckuus4.c, 7 Oct 97.
  1081. Tightened up decode() and getpkt() a bit more, as well as the checksum
  1082. routines.  Still no good way to test given heavy loads on systems and network.
  1083. ckcfn[s2].c, 7 Oct 97.
  1084. Changed exit-warning code to not warn under UNIX if running in background.
  1085. ckuus3.c, 8 Oct 97.
  1086. Adapted Jeff's URL-parsing code in netopen() to work for all versions, not
  1087. just K95, so now SET HOST, TELNET, -J, etc, can accept most forms of URL,
  1088. including the nutty ones from Netscape 4.0.  This is #ifdef'd in CK_URL, which
  1089. is now defined for all by default; -DNOURL overrides.  ckcnet.c, 8 Oct 97.
  1090. Generalized SET { SEND, RECEIVE } PATHNAMES at Peter Eichhorn's suggestion.
  1091. Instead of just ON and OFF, now we also allow ABSOLUTE and RELATIVE.  PATH_xxx
  1092. symbols defined in ckcker.h, new keyword table in ckuus7.c, SHOW FILE shows
  1093. new values.  I also undid the crazy "on means off", "1 - x", etc, and now just
  1094. compare against the symbol values.  ON is still accepted as an invisible
  1095. synonym for ABSOLUTE.  When receiving, if we get a (recognizably) absolute
  1096. pathname, we convert it to relative.  ckcmai.c, ckcfns.c, ckuus[r24567x].c,
  1097. 8 Oct 97.
  1098. Fixed previously unused UNIXOROSK definition.  ckcdeb.h, 8 Oct 97.
  1099. Made a new symbol to enable all the new tuning code, CKTUNING, and defined it
  1100. for all but pdp11, where every byte counts.  So when CKTUNING is defined, it's
  1101. OK to duplicate chunks of code, put it inline, etc, to make file-transfer go
  1102. faster.  Added more tuning code to eliminate function calls & loops in various
  1103. spots -- calculate header checksum inline, call b{decode,getpkt} directly
  1104. rather than from inside decode and getpkt, tighten up b{decode,getpkt}
  1105. themselves.  Define NOTUNING to undo all of this and restore earlier well-
  1106. tested code.  Some of these improvements could also be filtered back into the
  1107. original general-purpose routines...  ckcfns.c, 9 Oct 97.
  1108. Microtuning, cont'd -- more of the same, in spack() and rpack().  Also in
  1109. zinfill() and zoutdump().  Guard potential function calls like debug() and
  1110. logpkt() with if-statements in critical sections, etc.  ckufio.c, ckcfns.c,
  1111. 9 Oct 97.
  1112. There's no good way to test this stuff locally since the effect will be
  1113. noticed only on connections that are so fast that CPU is the bottleneck --
  1114. but the local net here is always saturated, so that never happens.  Still,
  1115. in many trials on an average busy day the new code seems about 50% faster
  1116. than the old.  (We also improve by a factor of 2 if we bypass the Telnet
  1117. server...)
  1118. Filled in COPY (alias CP) command for UNIX.  ckcdeb.h, ckuus6.c, ckufio.c,
  1119. 9 Oct 97.
  1120. Added recursive directory traversal.  For the first cut, this works only
  1121. when a filename of "." is given, as in "send ." or "echo ffiles(.)".  When
  1122. sending files, this works in conjunction with the various new SET SEND
  1123. PATHNAMES options, and so allows replication of directory trees between like
  1124. file systems.
  1125.  . test unix-to-unix because MSK rejects names unnecessarily (ok)
  1126.  . expand to be more flexible, e.g. "SEND /RECURSIVE *.txt". (ok)
  1127.  . What about VMS?  I think this already works: "SEND [...]*.*".
  1128. Also the relative/absolute pathnames need a lot more work -- what about
  1129. VMS, etc?  Need to:
  1130.  . Make /RECURSIVE imply /PATHNAMES:RELATIVE (ok)
  1131.  . Handle pathnames even when FILE NAMES CONVERTED.  In this case, convert
  1132.    to and from UNIX format.
  1133.  . Handle them when LITERAL - send native VMS (etc) *relative* paths.
  1134.  . Ditto for AOS/VS, etc.  Need to add a new zblah() function for this?
  1135.  . Check #ifdefs (CK_MKDIR, NORECURSE, etc.).
  1136. Added directory-creation entry to transaction log.  NOTE: this required a
  1137. (nonlethal) change to zmkdir().  ckcfns.c, 14 Oct 97.
  1138. SET PRINTER /FILE:xxx parsing improved by Jeff to parse an output filename
  1139. and check accessibility.  ckuus3.c, 14 Oct 97.
  1140. SET NET FILE parsing improved to use cmifi, from Jeff.  Also literal string
  1141. key definitions now handled when saving key definitions.  ckuus7.c, 14 Oct 97.
  1142. Removed "." as an alias for "current directory tree" except in UNIX, where it
  1143. can't possibly mean anything else.  Removed "..." altogether, since it has
  1144. opposite meanings in Windows and VMS.  ckufio.c, 15 Oct 97.
  1145. Added /MATCH-DOT-FILES and /NO-MATCH-DOT-FILES to SET WILD KERMIT.
  1146. ckuus[23].c, ckufio.c, ckcmai.c, 15 Oct 97.
  1147. Added frfiles, fdir(), frdir() to list regular files and directory files,
  1148. flatly or recursively.  Changed ffiles() to only list regular files.  Each of
  1149. these functions sets up fnextfile() in the same way, but with a different
  1150. list of files.  In UNIX, these functions match or don't match dot-files
  1151. according to the SET WILD KERMIT /xxx setting.  The recursive functions don't
  1152. recurse when WILD is set to SHELL.  ckuusr.h, ckuus4.c, ckufio.c, 15 Oct 97.
  1153.  * Add another f?files() function to match both files and dirs ??? (no)
  1154.  * Add help text to ckuus2 (ok).
  1155. Changed UNIX zxpand() to treat a directory name as if it ended in "/*" so now
  1156. "send foo" sends all the files in "foo" if "foo" is a directory, and "send
  1157. /recursive foo" does the same, but recursively.  ckufio.c, 15 Oct 97.
  1158. Added a new top-level token that lets us assign values to variables in a
  1159. somewhat more natural way: "." (shades of Bliss-10).
  1160.  .name = value    is equivalent to   DEFINE name value
  1161.  .name := value   is equivalent to   ASSIGN name value
  1162.  .name ::= value  is equivalent to   EVALUATE value then assign result to name
  1163. There can also be space(s) between "." and the name, and the name can be a
  1164. macro name, a %{digit,letter} variable, or an array element.  ckucmd.[ch],
  1165. ckuus[r56].c, 16 Oct 97.
  1166. New code from Jeff for recursion in K95.  ckufio.c, 21 Oct 97.
  1167. Increased MAXWLD, SSPACE values in ckufio.c by a lot if BIGBUFOK and DYNAMIC
  1168. are defined.  ckufio.c, 21 Oct 97.
  1169. From Jeff: changed chkvar() not to actually evaluate a potential f...()
  1170. function, since this can have side effects.  The check for a function is now
  1171. simply if the string matches f*(*), which is less rigorous than checking if
  1172. it is really a function (e.g. parse the name and look it in the table, etc),
  1173. so this can be beefed up later if necessary.  But it probably won't be, since
  1174. we aren't likely to find files or directories with () in their names.
  1175. ckuus6.c, 21 Oct 97.
  1176. Changed ffiles() and friends to make a copy of the array created by zxpand(),
  1177. except in K95, where Jeff did this in zxpand/znext themselves (to save space,
  1178. since K95 doesn't have to build lists).  Each call to ffiles() (or fdir(),
  1179. etc) frees the previous list (if any) and then allocates a new one dynamically
  1180. of the appropriate size.  With this change it is no longer necessary to copy
  1181. the ffiles() list to an array before use (as on p.398 of the book).
  1182. ckuus4.c, 21 Oct 97.
  1183. Fixed parsing of SEND /PATHNAMES:xx<DEL> to work right.  ckuusr.c, 21 Oct 97.
  1184. Ditto for { RECEIVE, GET } /PATHNAMES, plus fixed the semantics -- it had
  1185. ON/OFF backward.  ckuus6.c, 21 Oct 97.
  1186. Made max(), min(), and mod() return their argument when given only one.
  1187. ckuus4.c, 21 Oct 97.
  1188. Fixes to K95 DIR command from Jeff.  ckuus6.c, 22 Oct 97.
  1189. Binary-mode file-transfer was sending short files sometimes due to a problem
  1190. trying to hand-optimize repeat-count code in bgetpkt() .  Fixed in ckcfns.c,
  1191. 22 Oct 97.
  1192. Added WHERE command to show where most recent file transfer went.  ckuusr.h,
  1193. ckuus[r2].c, ckcfn[s3].c, ckcpro.w, 22 Oct 97.
  1194. Removed OS2 material from ckufio.c.  23 Oct 97.
  1195. Changed REMOTE QUERY KERMIT to evaluate its operand.  Thus:
  1196.   assign %c xx
  1197.   remote query kermit files(%c*)
  1198. asks for the number of files whose names match "xx*".  That is, %c is
  1199. evaluated locally before the function call is passed to the server.  If you
  1200. want an argument to be evaluated remotely, double the leading backslash:
  1201.   remote assign %c yy
  1202.   remote query kermit files(\%c*)
  1203. ckuus7.c, 23 Oct 97.
  1204. Added REDO <command>, synonyms RR and token ^.  Required moving a lot of code
  1205. around in ckucmd.c -- in particular, the code that adds a command to history
  1206. buffer from gtword() to cmcfm() (which makes sense).  Added a new keyword flag
  1207. CM_NOR, meaning that this command should not be added to the history buffer.
  1208. This is used for the REDO command, of course, because otherwise REDO by itself
  1209. (which we would want to re-do the most recent command) would REDO itself
  1210. instead in an infinite loop.  ckucmd.[ch], ckuusr.[ch], ckuus5.c, 25 Oct 97.
  1211. Added /MOVE:xxx and /RENAME:xxx switches to SEND (etc).  These are similar to
  1212. /DELETE, specifying what happens to the source file after it is successfully
  1213. sent, except instead of deleting it, they move it to another place, or give it
  1214. a new name, respectively.  ckuusr.[ch], ckcmai.c, ckcpro.w, 25 Oct 97.
  1215. Added { RECEIVE, GET } /CALIBRATE.  This simply avoids opening incoming files
  1216. or writing anything to them, but still does all the rest -- decoding, etc.
  1217. ckuusr.[ch], ckuus6.c, ckcpro.w, 26 Oct 97.
  1218. Added SEND /CALIBRATE[:n], where n is the number of K to send, default = 1024.
  1219. This makes C-K internally generate its own pseudorandom file data, which is
  1220. about 77% uncompressible by gzip; no function calls, no file accesses.  The
  1221. data is processed normally, however, according text/binary settings, etc, so
  1222. the packets are the same as if the same data was read from a file.
  1223. ckuusr.[ch], ckuusx.c, ckcfn[s3].c, ckcpro.w, 26 Oct 97.
  1224. For now /CALIBRATE is an invisible switch.  It does not fool with packet or
  1225. window sizes, etc.  Maybe later.  All calibration code is in #ifdef CALIBRATE,
  1226. which is defined for all but CK_SMALL builds in ckcdeb.h.
  1227. Discovered that if a switch that does not take an argument is given an
  1228. argument anyway, e.g. /BINARY:foo, that the ":" or "=" would be treated as a
  1229. space and the argument would be treated as the first non-switch field.  Fixed
  1230. in ckuus[r6].c, 26 Oct 97.
  1231. Discovered that SEND switch table had some entries out of order, which
  1232. interfered with completion.  Fixed in ckuusr.c, 26 Oct 97.
  1233. If BIGBUFOK is defined, then also define IFDEBUG automatically.  If memory
  1234. is not scarce, then compile in all those if-tests to save thousands of
  1235. function calls when the debug log is not open.  ckcdeb.h, 26 Oct 97.
  1236. Added SEND /LIST:filename.  The named file contains a list of filenames to
  1237. be sent.  ckuusr.[ch], ckcfns.c, 26 Oct 97.
  1238. Whenever the /AS-NAME switch was used, the SEND parsing code could assign a
  1239. variable to point at a malloc'd buffer, which is later freed, but the variable
  1240. would still refer to it, potentially causing all sorts of problems later.
  1241. And some other problems like that.  Fixed in ckuusr.c, 26 Oct 97.
  1242. Looked into adding support for filenames (or other fields) enclosed in
  1243. doublequotes, but it didn't work after a few stabs so I gave up.
  1244. Added peak transfer rate to the STATISTICS display.  ckuus[x4].c, 26 Oct 97.
  1245. It only works when in local mode and FILE DISPLAY is FULL or CRT, otherwise
  1246. the per-packet CPS calculation code is not called.
  1247. A new variable, reliable, is set when (a) we make a connection on a reliable
  1248. network, such as TCP/IP, or (b) we start C-Kermit with the new -I (uppercase)
  1249. switch (mnemonic: I = Internet).  When this variable is set, we add a fudge
  1250. factor to the ttinl() timeout, since it normally should not need to time out.
  1251. ckuusy.c, ckcmai.c, ckcfn2.c, ckuus7.c, 26 Oct 97.
  1252. Made local-mode transfer display completion message a little more standoutish:
  1253. SUCCESS or FAILURE in big letters.  ckuusx.c, 26 Oct 97.
  1254. Fix from Jeff for changes to command recall.  ckucmd.c, 27 Oct 97.
  1255. Various fixes to calibration mode.  Missing thermometer in some cases,
  1256. improvements in random-file-generating code, various stats were not being
  1257. updated, etc, because it wasn't a real file, GET /CAL would say it failed when
  1258. it didn't, { GET, RECEIVE } /CAL filename was lost, SEND /CAL bytecount was
  1259. off, etc.  ckcpro.w, ckcfn3.c, 27 Oct 97.
  1260. Don't accumulate peak transfer rate until after the initial excitement has
  1261. settled down.  When sending, this is after the first windowful of packets has
  1262. gone out.  When receiving, just wait till after the 10th packet to get past
  1263. the slow-start effect.  ckuusx.c, 27 Oct 97.
  1264. Changed default statistics display to /BRIEF, and added a /VERBOSE switch
  1265. for greater detail.  ckuus[r4].c, 27 Oct 97.
  1266. Tightened up bdecode() even further by eliminating additional cases it will
  1267. never see.  ckcfns.c, 27 Oct 97.
  1268. Discovered that screenc() could skip updating the percent done, etc, in some
  1269. (rare) cases at the end of a file, so the file transfer would be complete, but
  1270. the display would show less than 100%.  Fixed in ckuusx.c, ckcfn3.c, 27 Oct 97.
  1271. Increased uncompressibility of /CAL data stream to over 90% and also gave it a
  1272. random seed so it will generate different data streams, but with the same
  1273. uncompressibility.  ckcfns.c, 28 Oct 97.
  1274. Fix from Jeff for SET LINE, which under some circumstances might get clobbered
  1275. when user types CR.  Not sure if this problem appeared in any released
  1276. version or was caused by recent edits.  ckuus7.c, 28 Oct 97.
  1277. Changed zopeno() to set the output file (when receiving a file during file
  1278. transfer) to O_NONBLOCK.  On some systems, including the one we mostly use
  1279. here, disk writes can be very slow -- there is no cache.  The same would be
  1280. true if writing to a slow disk, floppy, etc.  It's not clear to me yet how
  1281. errors are reported back if they occur -- presumably on the next write() call?
  1282. Preliminary measurements seem to show some improvement.
  1283. New command-line option, G, which is like g (GET), but sends result to stdout.
  1284. Use, for example, to suck files up for printing to the remote from the local
  1285. via autoupload:
  1286.   kermit -G oofa.txt | lpr
  1287. ckuusy.c, 29 Oct 97.
  1288. A couple micro-optimizations to ttinl, but it's already just about as
  1289. tight as it can be.  ckutio.c, 29 Oct 97.
  1290. Poked at zoutdump() some more.  Took out the fflush, and made it allow for
  1291. the possibility that write() might write less than asked.  ckufio.c, 29 Oct 97.
  1292. Added CRC to STATISTICS display.  ckuus4.c, 29 Oct 97.
  1293. Changed name of openx() to ckopenx() to avoid conflict in AIX.
  1294. ckcpro.w, ckcfn3.c, ckcker.h, 29 Oct 97.
  1295. More fallout from REDO -- a failing command was no longer entered into the
  1296. scrollback buffer, which is a major pain, because that's one of its major uses.
  1297. Fixed in ckucmd.c, ckuus5.c, 29 Oct 97.
  1298. Fixed the "def %a 12:00:00, pause %a" problem.  ckuus6.c, 29 Oct 97.
  1299. Added v(printer).  ckuusr.h, ckuus4.c, 29 Oct 97.
  1300. Fixed parsing error in SET PRINTER <esc> (non-OS2).  ckuus3.c, 29 Oct 97.
  1301. Added invisible SET FILE OUTPUT { [UN]BUFFERED [ size ], [NON]BLOCKING } and
  1302. filled it in for UNIX.  It's only for experimentation, and users shouldn't be
  1303. told about it unless it can get them out of a jam, and there's no way to
  1304. display the settings, but they do show up in the debug log.  The optional size
  1305. parameter can be given after BUFFERED or UNBUFFERED to control the size of
  1306. C-K's internal file output buffer, zoutbuffer.  This can be any number at all,
  1307. even 1.  ckuusr.h, ckuus7.c, ckufio.c.  29 Oct 97.
  1308. Went public with SET FILE OUTPUT -- made it visible, added HELP and SHOW, made
  1309. it UNIX-only.  ckuus[247].c.  30 Oct 97.
  1310. Some initial work on automatic arrays, not done yet.  Must fill in pusharray(),
  1311. then add poparray().  ckuu5.c, 30 Oct 97.
  1312. Fixes to command parser from Jeff: partial filename completion, and case
  1313. insensitivity of filenames in OS/2.  ckucmd.c, 1 Nov 97.
  1314. Added automatic arrays.  ckuus5.c, 1 Nov 97.
  1315. Added "reliable" display to SHOW COMM.  ckuus4.c, 1 Nov 97.
  1316. Added v(escape), frandom(max), fdirname(filespec).
  1317. ckuusr.h, ckuus4.c, 1 Nov 97.
  1318. Discovered that the UNIX code to make output file unbuffered wasn't working at
  1319. all because fcntl() was being called with a file pointer instead of a file
  1320. descriptor.  Fixed in ckufio.c, 2 Nov 97.
  1321. Moved outbound pathname handling into a new function nzltor(), which is like
  1322. zltor(), but has two more arguments: filename conversion flag (fncnv) and
  1323. send-pathnames value (fnspath).  This is done within #ifdef NZLTOR..#endif.
  1324. NZLTOR is defined for UNIX and VMS.  In the mainline code, we now call this
  1325. routine always, rather than only under certain conditions (if NZLTOR is
  1326. defined; otherwise we keep the old code).  ckcdeb.h, ckcfns.c, ckcplm.doc,
  1327. 2 Nov 97.
  1328. The nzltor() function must handle six cases:
  1329.   SEND PATHNAMES {OFF,RELATIVE,ABSOLUTE} times FILE NAMES {CONVERTED,LITERAL}
  1330. The new prototype is:
  1331.   nzltor(char * name, char * outbuf, int fncnv, int fnspath, int max);
  1332. zltor() was converted to a stub which calls nzltor() with the appropriate
  1333. arguments in case anybody calls it by mistake.
  1334. VMS zltor() calls (static) parse_fname(), which luckily already gets the
  1335. various pieces of the filespec separately (node, device, directory, name,
  1336. extension, and version), and so handles its job by shuffling the new args
  1337. internally and adding a lot of creative string toodling.  A VMS expert could
  1338. no doubt do the same with system calls.  ckvfio.c, 2 Nov 97.
  1339. UNIX zltor was also made into a stub; nzltor simply adds the appropriate calls
  1340. to zstrip, zfnfqp, etc, to handle the pathnames, and then goes on to do what
  1341. it used to do.  ckufio.c, 2 Nov 97.
  1342. This was tested in UNIX by cd'ing to ~/tmp and giving "send blah/oofa.txt"
  1343. commands with all combinations of SET FILENAMES and SET SEND PATHNAMES, and
  1344. similarly in VMS with "set default [fdc], send [.blah]oofa.txt].  Results:
  1345. FILENAMES   SEND PATHNAMES  UNIX Result               VMS Result
  1346.  CONVERTED   OFF             OOFA.TXT                  OOFA.TXT
  1347.  CONVERTED   RELATIVE        BLAH/OOFA.TXT             BLAH/OOFA.TXT
  1348.  CONVERTED   ABSOLUTE        /W/FDC/TMP/BLAH/OOFA.TXT  /FDC/BLAH/OOFA.TXT
  1349.  LITERAL     OFF             oofa.txt                  OOFA.TXT
  1350.  LITERAL     RELATIVE        blah/oofa.txt             [.BLAH]OOFA.TXT
  1351.  LITERAL     ABSOLUTE        /w/fdc/tmp/blah/oofa.txt  [FDC.BLAH]OOFA.TXT
  1352. All of this works very nicely with existing features like "who am i"
  1353. (automatic switching to literal filenames between like systems, etc).
  1354. NOTES: In VMS, we always strip the node::, device:, and ;version, even when
  1355. file names are literal.
  1356. STILL TO DO: The other direction, nzrtol().  Its calling conventions will be
  1357. extended by the same kind of integer args: name conversion on/off, receive
  1358. pathname setting, and max length for result.
  1359. From Jeff: clear network buffers before starting an Rlogin session.  ckcnet.c,
  1360. 3 Nov 97.
  1361. Lots of changes relating to detection of connection loss before or
  1362. during file transfer.  Many modules, 3 Nov 97.
  1363. K95 prompt now shows forward slashes in directory name, from Jeff, ckuus5.c,
  1364. 4 Nov 97.
  1365. Save and restore many more variables around file transfer -- packet length,
  1366. etc, from Jeff, and then fixes to same.  ckuus[r6x].c, 4 Nov 97.
  1367. Change name of BeBox terminal from BeOS-ANSI to BeTerm, but leave old name
  1368. there invisibly.  ckuus7.c, 4 Nov 97.
  1369. Fix autodownload Kermit packet detector to ignore parity.  ckcfn2.c, 4 Nov 97.
  1370. Added SET OUTPUT SPECIAL-ESCAPES { ON, OFF } to turn on/off special processing
  1371. of N, B, and L.  Added this to HELP and SHOW SCRIPTS, plus a new SHOW
  1372. OUTPUT command.  ckuusr.h, ckuus[r235].c, 4 Nov 97.
  1373. Jeff found a place in the protocol module where the input file is not closed
  1374. (if sdata() returns an error indicating the connection dropped).  ckcpro.w,
  1375. 4 Nov 97.
  1376. Fixes to OS/2 from Jeff for previously unhandled socket errors.  ckcnet.c,
  1377. 4 Nov 97.
  1378. Added SET { SEND, RECEIVE } NEGOTIATION-STRING-MAX-LENGTH <number> as a last
  1379. resort for making C-K talk with buggy Kermit implementations on the other
  1380. side that don't expect the init string to be longer than a certain length, or
  1381. that don't handle parameters after a certain length correctly.  It's invisible
  1382. and undocumented, for use only by help desk when confronted with desparate
  1383. callers who absolutely have to exchange files with a buggy BBS, etc.
  1384. ckuus7.c, ckcfns.c, 4 Nov 97.
  1385. Changed ttinl(), when in local mode, to check for console interruptions and
  1386. return -1 if there is something waiting in the console buffer (Jeff's idea),
  1387. to make for snappier response to file-transfer interruption characters.
  1388. ckutio.c, 4 Nov 97.  But then commented this out, since it's at least an extra
  1389. function call and system call per packet, and the response to keyboard
  1390. interruptions on fast connections is pretty fast anyway.  Can revisit this
  1391. later after further experimentation.
  1392. Changed ttchk() to always check first if we have an open connection and if
  1393. not, to return -2.  ckutio.c, 4 Nov 97.
  1394. Changed doconect() to use ttchk() to check if the connection is open.
  1395. ckuus4.c, 4 Nov 97.
  1396. Changed ttinl() and ttol() to return -3 when they detect a broken connection.
  1397. Went through all of the ckcfn*.c and ckcpro.w modules and made sure that every
  1398. call to rpack() and spack() had its return code checked and then did the
  1399. appropriate thing when it was < 0 (and, in particular, when < -1).  Tested by
  1400. making a Telnet connection, starting uploads and downloads, and then killing
  1401. the job on the far end during the transfer.  Now, for the first time, this
  1402. makes the file transfer either quit right away, or else within one timeout
  1403. interval, and the appropriate message is printed on the display, and the
  1404. transfer fails.  Once the failure was propogated up to the protocol state
  1405. machine, two more actions were needed to distinguish the cases where the
  1406. connection dropped when a file was open, versus when no file was open.
  1407. ckcfn[s23.c], ckcpro.w, 4 Nov 97.
  1408. Evidently there are places where we call command parsing routines with
  1409. constant strings as defaults, and then later attempt to write into those
  1410. strings (e.g. to strip braces, trim blanks, etc).  This was addressed by
  1411. making an internal copy of the default string and using that instead.
  1412. ckucmd.c, 4 Nov 97.
  1413. Fixed command-file reader to be tolerant of lines that end with bizarre
  1414. strings of control characters like ^M^M^J.  ckuus5.c, 4 Nov 97.
  1415. Added nrztol() for UNIX, moving lots of inappropriate code from rcvfil() to
  1416. it (with #ifdef NZLTOR..#endif).  ckcfns.c, ckufio.c, 5 Nov 97.
  1417. Added nrztol() for VMS.  ckvfio.c, 5 Nov 97.
  1418. Results for VMS receiving files, current directory is [FDC.TMP]:
  1419. Receive     File
  1420. Pathnames   Names      Incoming Name       Saved as
  1421.  OFF         CONVERTED  OOFA.TXT            [FDC.TMP]OOFA.TXT
  1422.  OFF         CONVERTED  oofa.txt            [FDC.TMP]OOFA.TXT
  1423.  OFF         CONVERTED  /foo/bar/oofa.txt   [FDC.TMP]OOFA.TXT
  1424.  OFF         CONVERTED  [foo.bar]oofa.txt   [FDC.TMP]OOFA.TXT
  1425.  RELATIVE    CONVERTED  OOFA.TXT            [FDC.TMP]OOFA.TXT
  1426.  RELATIVE    CONVERTED  bar/oofa.txt        [FDC.TMP.BAR]OOFA.TXT     (*)
  1427.  RELATIVE    CONVERTED  [.bar]oofa.txt      [FDC.TMP.BAR]OOFA.TXT     (*)
  1428.  RELATIVE    CONVERTED  /foo/bar/oofa.txt   [FDC.TMP.FOO.BAR]OOFA.TXT (*)
  1429.  ABSOLUTE    CONVERTED  /foo/bar/oofa.txt   [FOO.BAR]OOFA.TXT         (*)
  1430.  ABSOLUTE    CONVERTED  [foo.bar]oofa.txt   [FOO.BAR]OOFA.TXT         (*)
  1431. (*) The indicated directory or subdirectory, one or more levels,
  1432.     is automatically created if allowed, otherwise the transfer fails.
  1433. Note: It turns out to be easy to recognize the directory format in incoming
  1434. packets, and so the FILE NAMES { CONVERTED, LITERAL } setting is not actually
  1435. so important, except if we care about case conversion.  We only need to detect
  1436. the native and UNIX pathname formats -- see VMS nzrtol() in ckvfio.c.
  1437.   This must still be done for OS/2.  After OS/2 part is done, a chunk
  1438.   of #ifdef OS/2 can be removed from the "not NZLTOR" part of rcvfil.
  1439. Fixed isabsolute() for VMS.  ckcmai.c, 5 Nov 97.
  1440. Added IF ABSOLUTE to test if a filename is absolute or relative.  The file
  1441. need not exist.  ckuusr.h, ckuus6.c, 5 Nov 97.
  1442. After all this:
  1443.  . I can transfer a directory tree UNIX-to-UNIX by telling the sender to
  1444.    "send /pathnames:relative /recursive *" and the receiver to
  1445.    "receive /pathnames:relative".  The entire directory tree is transferred
  1446.    quickly and quietly, and replicated on the other side.
  1447.  . Ditto from UNIX to VMS!
  1448.  . VMS to UNIX works too, but it's still a bit flaky.  In VMS you have to say:
  1449.    send /pathnames:rel /filenames:converted [...]*.*".
  1450. So hurray, transferring directory trees between unlike platforms.
  1451. From Jeff: peakcps should only be reset once per transaction; cps/peakcps
  1452. should be calculated and saved when File Display is None or CRT; thermometer
  1453. pct should not be set to 100% if we are discarding the file.  ckuusx.c,
  1454. 6 Nov 97.
  1455. Made /RECURSIVE un-invisible for VMS and AOS/VS, since their native
  1456. recursive wildcards work fine.  In these cases, /RECURSIVE is only informative
  1457. and really translates to /PATHNAMES:RELATIVE.  (But I didn't actually migrate
  1458. any of the pathnames-handling code to AOS/VS yet, did I?)  ckuusr.c, 6 Nov 97.
  1459. Figured out why VMS-to-UNIX recursive transfers didn't seem to be working
  1460. right: SEND (and RECEIVE) /PATHNAMES:<not-OFF> was setting FILE NAMES to
  1461. LITERAL, which as needed before we made the new nz[rl]to[lr]() routines; fixed
  1462. by #ifdefing.  ckuus[r6].c, 6 Nov 97.
  1463. Various fixes to VMS nz[rl]to[lr](), including some long-standing problems
  1464. such as the inability to accept files whose names contain multiple periods.
  1465. Now it all works pretty well.  nrztol() now changes spaces and tildes into
  1466. underscore, other nonprintables into dollar signs -- much more readable in VMS
  1467. than changing everything to X, and as for dots:
  1468.  a.b.c.1 becomes a_b.c;1 (when only digits follow the last dot)
  1469.  a.b.c.d becomes a_b_c.d (otherwise)
  1470. and VMS is happy.  ckvfio.c, 6 Nov 97.
  1471. Added /SINCE as an invisible synonym for /AFTER since I type it all the time.
  1472. ckuusr.c, 6 Nov 97.
  1473. Changed -L switch to also SET SEND PATHNAMES RELATIVE.  ckuusy.c, 6 Nov 97.
  1474. Filled in MKDIR for VMS, and made MDKDIR and RMDIR for other platforms
  1475. print appropriate error messages when they fail.  ckuusr.c, 6 Nov 97.
  1476. Made blind stabs at implementing RMDIR in VMS.  Finally I gave up on doing
  1477. it using any APIs, since I haven't a clue, and just used system() commands.
  1478. Crude but effective.  Note: in VMS, we have to change the directory name
  1479. [a.b.c] into a filename [a.b]c.dir;1, change its protection to allow deletion,
  1480. and then delete it, which only works if it's empty.  If it can't be deleted,
  1481. all sorts of error messages spew out.  Needs to be replaced by somebody who
  1482. knows the actual VMS API for deleting a directory.  ckvfio.c, 6 Nov 97.
  1483. Added zrmdir() for UNIX.  #defined ZRMDIR symbol in ckcdeb.h for all platforms
  1484. that have a zrmdir() function (UNIX and VMS so far).  Changed RMDIR command
  1485. to use it.  ckufio.c, ckcdeb.h, ckuusr.c, 6 Nov 97.
  1486. zmkdir() was already there for UNIX, VMS, etc.  I fixed it so it could be
  1487. called to create directories, as you might expect.  Its previous use expected
  1488. a complete filespec, including a filename.  But this was not required for VMS,
  1489. and in UNIX the way to not require it is to make sure the string that is
  1490. passed to it ends with a directory separator.  Changed the MKDIR command to
  1491. do this.  ckuusr.c, 6 Nov 97.  Slightly reworded the zmkdir description in
  1492. ckcplm.doc.
  1493.   (This is all groundwork for adding REMOTE MKDIR and REMOTE RMDIR, but
  1494.   that's not done yet.)
  1495. "msend <nonexistent-file><SP>" caused a parsing foulup.  Fixed in ckucmd.c,
  1496. 7 Nov 97.
  1497. Added all the new switches to the MSEND table.  ckuusr.c, 7 Nov 97.
  1498. Changed ?-help to add a directory separator at the end of a filename (except
  1499. in VMS) if the file is a directory, so you can tell by looking at the list
  1500. what's what.  ckucmd.c, 7 Nov 97.
  1501. Fix from Jeff to catch disk-write errors during file reception, bdecode()
  1502. (I left out an automatic variable declaration so a global variable of the same
  1503. name, but different type, was being used).  ckcfns.c, 7 Nov 97.
  1504. Added a 3rd arg to ckmatch() to say whether to ignore case in string
  1505. comparisons, and then in places where we are using it to match filenames, to
  1506. be case-sensitive or not depending on the underlying file system (like in SEND
  1507. /EXCEPT in UNIX vs DOS), and to ignore case in other pattern-matching
  1508. applications (e.g. REDO, SHOW VARIABLES *FOO*), regardless of the file system.
  1509. ckcker.h, ckcmai.c, ckucmd.c, ckcfns.c, ckuus[56].c, 7 Nov 97.
  1510. Added automatic per-file text/binary mode switching based on filename
  1511. pattern recognition, all within #ifdef PATTERNS..#endif.  7 Nov 97.
  1512. Commands:
  1513.  . SET FILE PATTERNS { ON, OFF }
  1514.  . SET FILE { BINARY-PATTERN, TEXT-PATTERN } [ <pattern>  [ <pattern> ... ] ]
  1515. Files:
  1516.  . ckcker.h - symbol defs & max number of patterns (64)
  1517.  . ckuusr.h - change name of shoparf to shofil (it was annoying me)
  1518.  . setfil, ckuus7.c - parse the command, set up the pattern lists
  1519.  . shofil, ckuus4.c - show the lists
  1520.  . gnfile, ckcfns.c - declare use the lists (via calls to ckmatch())
  1521.  . ckuus2.c - "help set file" text
  1522.  . ckermit2.upd - docs, mainly section 4.3, others updated too.
  1523. NOTE: Needed for VMS: permissions.
  1524. A couple fixes to yesterday's stuff from Jeff: ckuus2.c, ckucmd.c, 8 Nov 97.
  1525. Added { ADD, REMOVE } { BINARY-PATTERNS, TEXT-PATTERNS }.  Redid the lists to
  1526. be more dynamic and free()-safe.  Added SHOW PATTERNS, with a nice display,
  1527. and redid SHOW FILE to refer to SHOW PATTERNS.  (I also added { ADD, REMOVE }
  1528. SEND-LIST, but didn't fill it in.)  Added lots more patterns to default lists.
  1529. Made SET FILE TYPE LABELED override filename pattern-matching.  ckcmai.c,
  1530. ckcfns.c, ckuus[457].c, ckermit2.upd, 8 Nov 97.
  1531. "delete dir/file" didn't work for some reason in UNIX.  Changed dodel() to be
  1532. a little less confusing with its use of line[] and tmpbuf[].  Then I changed
  1533. the UNIX version to use Jeff's loop.  But all the messages were annoying so I
  1534. added /VERBOSE and /QUIET switches, making the latter the default for UNIX,
  1535. and cleaned up the output when /VERBOSE is set.  ckuus6.c, 8 Nov 97.
  1536. Started to add code to prevent client from sending a BYE or FINISH when it
  1537. had already done so on the same connection, but the risk outweighs the
  1538. benefit.  Maybe some other time.  8 Nov 97.
  1539. Fixed a bug I introduced in VMS zrtol() at the last minute on Nov 6, which had
  1540. extra filename dots being converted to underscores even after we had scanned
  1541. backwards into the directory name.  ckvfio.c, 8 Nov 97.
  1542. Added a second arg to gfmode() (get file mode) to tell it to return its result
  1543. in upper or lower case, adjusted the prototype and all references, removed
  1544. various chunks of redundant code.  ckuusr.h, ckuus[r56].c, 8 Nov 97.
  1545. Added client end of REMOTE MKDIR and REMOTE RMDIR.  ckuusr.[ch], ckuus7.c,
  1546. 8 Nov 97.
  1547. Increased number of patterns to 256 if BIGBUFOK.  ckcker.h, 9 Nov 97.
  1548. Made "remo" an acceptable abbreviation for "remote".  ckuusrc., 9 Nov 97.
  1549. Fixes from Jeff to yesterday's code: ckucmd.c, ckuus5.c, 9 Nov 97.
  1550. From Jeff: don't check text patterns if already in text mode; ditto for binary,
  1551. ckcfns.c, 9 Nov 97.
  1552. Don't bother trying to send FINISH or BYE command when in local mode and
  1553. there is no connection.  ckcpro.w, 9 Nov 97.
  1554. Made sure that RESUME and SERVER macros in protocol module set all counters,
  1555. packet numbers, etc, back to 0.  ckcpro.w, 9 Nov 97.
  1556. Disabled automatic file type switching during RESEND.  ckcfns.c, 9 Nov 97.
  1557. Updated ckuker.bwr and ckermit.bwr.  9 Nov 97.
  1558. Discovered that when the C-Kermit server got a REMOTE DELETE command for
  1559. a directory (rather than a file), it did terrible things.  Added a check
  1560. against this in ckcpro.w, 9 Nov 97.
  1561. Moved some prototype declarations around in ckcpro.w to alleviate possible
  1562. problems with "declarations out of scope" noticed by some picky ANSI compilers.
  1563. ckcpro.w, 9 Nov 97.
  1564. Moved code out of MKDIR command in ckuusr.c to a new function, ckmkdir(), that
  1565. can be called from the command parser or during protocol, and similarly for
  1566. RMDIR.  ckcker.h (prototypes), ckuusr.c, ckcfn3.c, 9 Nov 97.
  1567. Added EN_MKD and EN_RMD symbols in ckuusr.h, and corresponding en_mkd and
  1568. en_rmd variables.  ckuusr.h, ckcmai.c, 9 Nov 97.
  1569. Added server end of REMOTE MKDIR & RMDIR.  ckcpro.w, ckcfn3.c, 9 Nov 97.
  1570. Added ENABLE/DISABLE MKDIR/RMDIR commands.  ckuus[56].c, 9 Nov 97.
  1571. Added help for above.  ckuus2.c, 9 Nov 97.
  1572. Added info for above to SHOW SERVER.  ckuus5.c, 9 Nov 97.
  1573. Should make server-side CD accept UNIX-style pathnames too (at least in
  1574. VMS).
  1575. There are still a few problems with REMOTE DIRECTORY, etc.  For example,
  1576. if pathnames are off, "remote directory foo/*" strips the "foo/".  But
  1577. that's what it should do.  But it seems to do it also when pathnames are on.
  1578. VMS difficulty with SEND /MAIL using:
  1579. system("$ mail %s %s/subj="Enclosed file %s"")
  1580. Juggled things a bit in the got-E-packet section of the protocol module to try
  1581. (again) to ensure that file-transfer display does not say "100%" if a transfer
  1582. is canceled by an E-packet.  ckcpro.w, ckuusx.c, 10 Nov 97.
  1583. Added yet another level of file-type saving and restoring to allow gnfile() to
  1584. use prevailing transfer mode (as set by user, or as overridden by "whoami"
  1585. negotiation) for files it fails to identify by name pattern.  So now we have
  1586. three levels to save and restore: what the user said ("set file type"), the
  1587. "whoami" type (which persists throughout a transaction), and a per-file type
  1588. based on automatic file type recognition.  gnf_binary, ckcfns.c, 10 Nov 97.
  1589. Added /SUBDIRECTORIES as an invisible synonym for /RECURSIVE.  ckuus[r6].c,
  1590. 10 Nov 97.
  1591. I just sent an E-packet.  I'm in local mode, I was receiving a file, I'm not a
  1592. server, and sliding windows are in use.  Therefore, there are likely to be a
  1593. bunch of packets already "in the pipe" on their way to me by the time the
  1594. remote sender gets the E-packet.  So the next time I CONNECT or try to start
  1595. another protocol operation, I am likely to become terribly confused by
  1596. torrents of incoming material.  To prevent this, a loop was added to errpkt()
  1597. to soak up packets from the connection until there is an error or timeout.
  1598. ckcfn2.c, 10 Nov 97.
  1599. Another try at getting better error screens when an E-packet is received.
  1600. ckcfn[s23].c, 10 Nov 97.
  1601. Make { ADD, REMOVE } patterns be case independent/sensitive according to
  1602. the underlying file system.  ckuusr.c, ckermit2.upd, 10 Nov 97.
  1603. Made K95 default patterns lowercase rather than upper.  ckcmai.c, 10 Nov 97.
  1604. ---Alpha.08---
  1605. Streaming prototype & proof of concept, 12 Nov 97 (to be described later)
  1606. (if you stumble on it, don't try to use it).
  1607. Fixed VMS ttchk() to detect connection loss the same way the UNIX and OS/2
  1608. versions do.  ckvtio.c, 13 Nov 97.
  1609. Added missing prototype for cmaddnext().  ckucmd.h, 13 Nov 97.
  1610. Protected a couple unguarded references to no_recall by #ifdef CK_RECALL.
  1611. ckucmd.c, 13 Nov 97.
  1612. Removed unguarded references to binpatterns[] and txtpatterns[] from
  1613. doadd().  ckuusr.c, 13 Nov 97.
  1614. Added missing VOID to VMS declaration of nzrtol().  ckvfio.c, 13 Nov 97.
  1615. Removed spurious "(-1)" from VMS nzltor() return.  ckvfio.c, 13 Nov 97.
  1616. Supplied missing printf() argument in ADD command.  ckuusr.c, 13 Nov 97.
  1617. Added instructions for defining new network types to ckcplm.doc.  13 Nov 97.
  1618. Support for IRIX 6.2 from Ric Anderson.  Many modules, 13 Nov 97.
  1619. Got rid of call to time(0) in ckcmai.c as a random number seed, to avoid
  1620. yet another avalanche of #ifdefs, and called gtimer() instead, which is
  1621. already well-defined in ck?tio.c.  ckcmai.c, 13 Nov 97.
  1622. Changed UNIX version to strip off leading "./" or "../" from outbound
  1623. pathnames, no matter what the SEND PATHNAMES setting is.  ckufio.c, 13 Nov 97.
  1624. Fixed SHOW VERSIONS to state version numbers and dates consistently.
  1625. Many modules, 13 Nov 97.
  1626. Corrected some typos in ckermit2.upd, 13 Nov 97.
  1627. ---Alpha.09---
  1628. Revived my DG mini.  Of course its compiler found several glitches that none
  1629. of the others revealed: extern declarations for variables that were never
  1630. defined anywhere, prototypes for static functions in header files, a reference
  1631. to zzstring in a cmtxt call instead of xxstring, and a backwards #ifdef NZLTOR
  1632. construction.  After fixing these, I successfully built the AOS/VS version.
  1633. ckuus[r35].c, ckcfn3.c, 14 Nov 97.
  1634. Based on logs from Carl Friedburg and Mike Freeman, found the spot where
  1635. file transfers on outbound VMS LAT connections were being inhibited and fixed
  1636. it (always remember: ttyfd is valid in VMS only on TCP/IP connections).
  1637. cncfn2.c, 17 Nov 97.
  1638. From Jeff over the weekend, installed 17 Nov 97:
  1639.  . Fixes to parens in peakcps calculation, ckuusx.c.
  1640.  . Changed communications input buffer from 4K to 32K if BIGBUFOK
  1641.    defined, so that TCP reads will have a chance of being big enough to open
  1642.    the TCP receive window.  ckutio.c.
  1643.  . Rearranged file input buffer size definitions.  ckcker.h.
  1644.  . Make -j/J command-line options set the reliable flag.  ckuusy.c.
  1645.  . Beginnings of Telnet client authorization and encryption code.  ckcnet.[ch].
  1646. Added missing AIX defines for TCP_NODELAY, TCP_KEEPALIVE, and TCP_MAXSEG.
  1647. ckcnet.h, 17 Nov 97.
  1648. Built for 16-bit QNX for the first time since before 6.0 was released, no
  1649. problems. 17 Nov 97.
  1650. Rec'd verification that VMS LAT calls now work again.  18 Nov 97.
  1651. Numerous tiny syntactic changes for the benefit of gcc -Wall, a couple of
  1652. which might actually make a difference (e.g. 2 or 3 spots where variables
  1653. could possibly be used before set).  Many modules, 18 Nov 97.
  1654. Fixed a problem with SEND /MAIL:<address> <filename> on VMS.  While working on
  1655. this, also improved some VMS error messages.  Tested to make sure that VMS
  1656. C-Kermit can SEND /MAIL and also receive files as mail and deliver them.
  1657. ckuusr.c, ckvfio.c, 18 Nov 97.
  1658. Using bgcc, William Bader found two places where an out-of-bounds array
  1659. reference might occur.  One was just a debug() call, so I commented it out.
  1660. The other was in the loop that strips junk from the end of a modem call-result
  1661. message; the tests were reversed.  Fixed in ckutio.c, ckudia.c, 18 Nov 97.
  1662. Added -V command-line option = SET FILE PATTERNS OFF / SET XFER MODE MANUAL.
  1663. ckuusy.c, 18 Nov 97.
  1664. Fixed SHOW MACRO <name>.  Not sure when it broke...  ckuus5.c, 18 Nov 97.
  1665. Added GET /RECURSIVE.  This is like telling the server to SEND /RECURSIVE.
  1666. Also GET /RECURSIVE /DELETE.  Client and server ends of both.
  1667. ckuus6.c, ckcpro.w, ckcfn2.c, 18 Nov 97.
  1668. Note: GET /DELETE /RECURSIVE deletes files but not directories.
  1669. Still have to add help text for this, etc.
  1670. See ~/new/Wall.txt again.
  1671. Cleaned up server end of new GET forms.  Got rid of en_ret, merged with
  1672. en_del.  Save & restore recursive & fnspath around each server transaction.
  1673. ckcpro.w, ckuus6.c, 19 Nov 97.
  1674. ttflui() should not be called by input() when streaming.  ckcfn2.c, 19 Nov 97.
  1675. Added SET STREAMING AUTO and SHOW STREAMING.  All of this is still invisible.
  1676. ckuusr.[ch], ckuus[356].c, 19 Nov 97.
  1677. Fixed input() in the streaming case to actually send an Error packet if it
  1678. received a bad packet, rather than just pretend that it got an Error packet.
  1679. ckcfn2.c, 20 Nov 97.
  1680. Simplified the syntax of shotab[], ckuusr.c, 20 Nov 97.
  1681. SET LINE / SET HOST / SET PORT commands were not getting into the recall
  1682. buffer.  Fixed in ckuus7.c, 20 Nov 97.
  1683. Ditto for SET DIAL DIRECTORY, SET MODEM CAPABILITIES, SET CONTROL PREFIX,
  1684. WAIT, and many other commands.  These are commands that accept a variable
  1685. number of args, and terminate when the command parsing routine returns -3.
  1686. The solution is, when this happens, to make sure that cmcfm() is called
  1687. anyway; otherwise lots of stuff doesn't happen that should happen.  Note: when
  1688. cmcfm() is called *after* the user typed CR, it knows this and does not make
  1689. them type another one.  ckuus*.c, 20 Nov 97.
  1690. Fixed REMOTE LOGIN not to succeed when it was not given enough parameters.
  1691. ckuus7.c, 20 Nov 97.
  1692. From Jeff: Make SET TITLE take effect immediately.  ckuus7.c, 20 Nov 97.
  1693. Added SET TRANSFER DISPLAY BRIEF.  Thus just writes a one-line report on
  1694. each file, similar to FTP:
  1695.   filename (transfer-mode) (size-if-known): status (and cps if status OK)
  1696. ckcker.h, ckuus[7x].c, 20 Nov 97.
  1697. Discovered that filename pattern matching was happening too early, and could
  1698. be undone by things that happened later.  Moved the matching code out of
  1699. gnfile() and into sfile() to make sure it was executed AFTER the S/I-packet
  1700. exchange rather than before, so it would not be undone by the WHO/WHATAMI
  1701. mechanism.  ckcfns.c, 20 Nov 97.
  1702. Allowed UNIX C-Kermit to accept /dev/null as an incoming filename and use
  1703. it literally.  ckufio.c, 20 Nov 97.
  1704. Changed v(cps) to treat 0 elapsed seconds as 1 in calculating the transfer
  1705. rate (previously it just returned "0 cps", so now it returns the filesize).
  1706. ckuus4.c, 21 Nov 97.
  1707. Eliminated unnecessary screen() procedure calls in rpack() and spack()
  1708. when XFER DISPLAY is BRIEF.  ckcfn2.c, 22 Nov 97.
  1709. From Jeff: corrections to Telnet initializations when telnetting to non-23
  1710. ports more than once, plus unhiding some debugging routines.  ckcnet.c,
  1711. 22 Nov 97.
  1712. Corrections to WHATAMI negotiation; some of the bits were wrong.  ckcfn2.c,
  1713. 22 Nov 97.
  1714. More fixes to command history -- macro invocations were being skipped, and
  1715. commands that were canceled by the parser for syntax errors before entry were
  1716. being entered when they shouldn't have been.  ckuus[r5].c, 22 Nov 97.
  1717. Added SET FILE DESTINATION NOWHERE (alias CALIBRATE), invisible, a sticky
  1718. version of /CALIBRATE for receiving files, but it doesn't work -- come back
  1719. and fix it...
  1720. Changed all calls to screen() to go through a new macro, xxscreen(), which
  1721. does not make the call if Kermit is in remote mode.  This can eliminate a lot
  1722. of function-call overhead during file transfer, on one end anyway.  ckcpro.w,
  1723. ckcfn*.c, ckuusx.c, 24 Nov 97.
  1724. Changed sdata() to skip "sbufnum" countdown when streaming, and nxtpkt()
  1725. to skip out-of-window check.  ckcfn[s2].c, 24 Nov 97.
  1726. Changed brief file transfer display to use the same cps calculation that the
  1727. other displays use, and added elapsed seconds to the display.  ckuusx.c,
  1728. 24 Nov 97.
  1729. Looked into making communication-device writes be nonblocking, so Kermit can
  1730. be forming its next packet while the write() is actually occurring.  But as
  1731. far as I can tell, at least in the UNIX version, ttyfd is already opened in
  1732. nonblocking mode, since that's how myread() works, and we use the same fd for
  1733. both reading and writing.  Still, I added a test for EWOULDBLOCK after the
  1734. write, so make sure it is not treated as an error.  ckutio.c, 25 Nov 97.
  1735. Fixed up the changes to sdata() from yesterday.  ckcfns.c, 25 Nov 97.
  1736. Added CLOSE [ CONNECTION ] command, since the current method for closing a
  1737. connection is quite mysterious ("set line" and/or "set host" without a device
  1738. or hostname), and added a new function, clsconnx(), to do it, consolidating a
  1739. bunch of confusing code that was in setlin().  ckuus[r7].c, 25 Nov 97.
  1740. Fixed STREAMING message on fullscreen file-transfer display.  ckuusx.c,
  1741. 25 Nov 97.
  1742. Fixed STATISTICS to show the packet length that was actually used when sending
  1743. the last file, rather than the default that would be used in absence of
  1744. instructions from the receiver.  ckcfns.c, ckuus4.c, 25 Nov 97.
  1745. Turned slow-start off for transfers in which streaming is negotiated.
  1746. ckcpro.w, ckuusx.c, 25 Nov 97.
  1747. Fixed a bug in which bgetpkt() was repeat-counting a run of two characters,
  1748. when the minimum should be three, thus turning 2 into 3 and adding needless
  1749. overhead to the packet.  ckcfns.c, 26 Nov 97.
  1750. Made NUL (0) unprefixable:
  1751.  . Changed SET CONTROL UNPREFIX commmand to allow it.
  1752.  . Changed logpkt() to log packets correctly when they contain NULs.
  1753.  . Now C-Kermit sends packets containing NULs correctly.
  1754.  . Make [b]gecode() be length-driven, rather than stopping at NUL.
  1755.  . Make [b]getpkt() handling of leftovers be length-driven.
  1756.  . Make all chk[123]() routines be length driven rather than stopping at NUL.
  1757.  . Make all calls to chk[123]() routines pass length.
  1758.  . Update prototypes for chk[123]() routines.
  1759. ckcfn2.c, ckuus3.c, ckuus4.c, 26 Nov 97.
  1760. Not done:
  1761.  . Anything about recording packets the debug log.
  1762.  . Including zero in "set control unprefix all" or "set prefixing none".
  1763.  . Docs, help, etc.
  1764.  . Enough testing.
  1765. After these changes (reducing the unneeded repeat count for doublets and
  1766. allowing NUL to be unprefixed), the packet overhead went down by about 10%
  1767. when transferring the SunOS C-Kermit binary:
  1768.   size:         1026152
  1769.   packet chars: 1166088 (before)
  1770.   packet chars: 1062181 (after)
  1771. As a quick check, I built it on AIX and sent some files to it.  I was able to
  1772. consistently get 766Kcps sending the same 4MB binary file that never went
  1773. faster than about 600Kcps before.
  1774. Changed SET PREFIXING command to account for unprefixing 0, and also made
  1775. SET PREFIXING MINIMAL take flow-control setting into account when deciding
  1776. whether to prefix 17,19,145,147.  ckcmai.c, 26 Nov 97.
  1777. Fixed length in chk1() call from chkspkt(), which affected autodownloads,
  1778. from Jeff.  ckcfn2.c, 27 Nov 97.
  1779. Why on earth did chk3() take parity as an arg?  The CRC is applied to outbound
  1780. packets before adding parity, and is checked on arriving packets after
  1781. stripping parity.  Removed this in hopes of tightening up one more critical
  1782. loop.  ckcfn2.c, ckuus4.c, 27 Nov 97.
  1783. Added new low-level routines to the UNIX version: rftimer() and gftimer().
  1784. These time things using floating point seconds.  Within #ifdef GFTIMER, which
  1785. is, at present, defined only for UNIX.  ckcdeb.h, ckutio.c, ckcplm.doc,
  1786. 27 Nov 97.
  1787. Added #ifdef GFTIMER sections throughout ckcpro.w, ckcfn*.c, ckuus4.c, and
  1788. ckuusx.c to take advantage of [rg]ftimer() when calculating elapsed time, time
  1789. left, and cps.  Now we no longer have the 1-second granularity in
  1790. file-transfer speed measurements, and therefore get accurate elapsed time and
  1791. CPS figures at the end of a transfer regardless of the file size (within
  1792. reason).  10BaseT socket-to-socket transfers from SunOS to AIX now routinely
  1793. register over 800Kcps.  27 Nov 97.
  1794. To add these routines to non-UNIX platforms:
  1795.  (VOID) rftimer() gets and saves the current time in whatever subsecond
  1796.    precision (millisecond, microsecond) is available.
  1797.  (float) gftimer() returns the number of seconds that have passed since
  1798.    rftimer() was last called as a fractional floating-point number.
  1799.  In ckcdeb.h, #define GFTIMER for your platform.
  1800. Converted getmsec() to gftimer(), so now we can get packet-read/write
  1801. millisecond times in the debug log for any platform where GFTIMER is defined
  1802. ("grep msec debug.log").  ckcfn2.c, ckutio.c, 27 Nov 97.
  1803. Checked GFTIMER on SunoOS, HP-UX 10.20, AIX 4.1, Solaris 2.5,
  1804. Defined and added new WM_CLEAR flag to WHATAMI negotiation field.  This gives
  1805. the opposite Kermit permission to send any and all control characters
  1806. unprefixed in data packets.  ckcker.h, ckcfns.c, ckcmai.c, 27 Nov 97.
  1807. Added SET CLEARCHANNEL { ON, OFF, AUTO }, AUTO is the default, and lets
  1808. C-Kermit tell the other Kermit whether it has a clear channel based on whether
  1809. it has opened a TCP socket connection.  ON and OFF have the expected meanings.
  1810. The CLEARCHANNEL setting, for now, is shown by SHOW STREAMING.  Now if (and
  1811. only if) I SET HOST directly to a Kermit server that is waiting on a TCP
  1812. socket, I get minimal prefixing automatically.  For example, from SunOS to
  1813. AIX, with W=30, P=9000, I get > 800Kcps just about every time.  ckuusr.[ch],
  1814. ckuus3.c, etc, 27 Nov 97.
  1815. Added SET TRANSACTION-LOG { VERBOSE, BRIEF [ separator ] }.  If BRIEF is
  1816. chosen, one line is written per file, with a timestamp, action (SEND or RECV),
  1817. filename, size, mode (text or binary), status (OK or FAILED), and additional
  1818. info depending on the status.  The default separator is comma, but any other
  1819. nonalphanumeric character can be specified.  This format is suitable for
  1820. direct importation into Informix, Oracle, Sybase, etc.  ckcdeb.h, ckuusr.h,
  1821. ckuusx.c, ckcfn[s3].c, ckcpro.w, 27 Nov 97.
  1822. Built on SunOS, Solaris, HP-UX, AIX, and Unixware as a last-minute check.  No
  1823. complaints.
  1824. Fixed CPS display in brief display to be file chars / elapsed time, rather
  1825. than most recent CPS calculation.  ckuusx.c, 28 Nov 97.
  1826. Various other minor corrections to yesterday's work, mainly correcting
  1827. backwards #idefs for GFTIMER.  28 Nov 97.
  1828. Refinement of brief transaction log: always write 8 fields, enclose any
  1829. field in quotes if it contains the separator.  ckuusx.c, 28 Nov 97.
  1830. Added docs for new transaction log format to ckermit2.upd.  28 Nov 97.
  1831. Assorted minor corrections from Jeff to the last few days' work, ckcnet.c,
  1832. ckcdeb.h, ckutio.c, ckuus[4x].c, ckcfn2.c, 1 Dec 97.
  1833. Addition of hex dump debug tool, from Jeff, ckuusx.c, 1 Dec 97.
  1834. Fixed IF NUMERIC to work correctly for variables whose definitions contain
  1835. multiple words.  ckuus6.c, 1 Dec 97.
  1836. Made a lot of fixes that should improve the situation with command recall.
  1837. Until now, the command functions module, ckucmd.c, was ignorant about where
  1838. command were coming from.  Which is silly.  So now there is a function in the
  1839. command parser, cmdsrc(), that can be called from ckucmd.c (or anywhere else)
  1840. to determine the command source (keyboard, macro, TAKE file, etc), which makes
  1841. decisions about the command recall buffer, and many other things, perfectly
  1842. straightforward.  Also, throughout the ckuus*.c modules, I replaced all the
  1843. #ifdef'd tests of cmdlvl vs tlevel with calls to the new cmdsrc() function.
  1844. So now we have the command recall buffer working pretty much as it did before
  1845. I added the REDO command -- commands issued from macros don't go in; the SEND
  1846. command doesn't always go in; macro invocations do go in, etc.  Many modules,
  1847. 1 Dec 97.
  1848. Replaced hardwired server-mode help text (sent in response to REMOTE HELP)
  1849. with dynamic version that actually tells which commands are available,
  1850. enabled, etc.  Will pretty it up later.  ckcmai.c, ckcfns.c, ckcpro.w,
  1851. 1 Dec 97.
  1852. Replaced all checks for ttyfd < 0 to see if connection broken with calls to
  1853. ttchk(), which must be coded to fill this role.  This removes the risk of
  1854. checking ttyfd on systems where it's not supported or, worse, on systems where
  1855. it is used for one kind of connection but not others.  Examples: in VMS, where
  1856. it is used for TCP/IP but not serial; in AIX, where it is used for serial and
  1857. TCP/IP, but not X.25, etc.  ckcmai.c, ckcfn2.c, ckuus[434].c, 2 Dec 97.
  1858. Added some extra checks to ttgmdm() and ttchk() for local vs remote mode to
  1859. make sure they behave as advertised.  ckutio.c, 2 Dec 97.
  1860. SET DESTINATION NOWHERE (aka CALIBRATE) seems to have fixed itself.  Added
  1861. help and show text for it.  ckuus[24].c, 2 Dec 97.
  1862. Fixed READY TO SERVE... message for socket-based server.  ckcpro.w, 2 Dec 97.
  1863. Defined BIGBUFOK for Linux.  ckcdeb.h, 2 Dec 97.
  1864. Ripped out tons of stupid, confusing, and contradictory code for calculating
  1865. the elapsed time and CPS of file transfer.  Now this is done automatically in
  1866. the protocol module at the end of each file transfer, and again at the end of
  1867. a transaction, and the results are stored in global variables available for
  1868. use by the various display routines (file transfer display, STATISTICS
  1869. command, v(cps) variable, etc).  Furthermore, the contradiction between file
  1870. time/cps and transaction time/cps when only one file was transferred was
  1871. eliminated simply by defining the latter to be the former in the 1-file case.
  1872. Routines:
  1873.   fcps(), called when an input or output file is closed, sets:
  1874.     xfsecs   = elapsed time this file, whole number of seconds.
  1875.     fpxfsecs = elapsed time this file, floating-point seconds.
  1876.     ffc      = number of characters, this file.
  1877.   tstats(), called when a B packet is sent or received, sets:
  1878.     tfsecs   = elapsed time whole transaction, whole number of seconds.
  1879.     fptsecs  = elapsed time whole transaction, floating-point seconds.
  1880.     tfc      = number of characters, all files.
  1881. Many modules, 2 Dec 97.
  1882. Fixed a bug in which a server could be given a REMOTE SET WINDOW and
  1883. REMOTE SET RECEIVE PACKET-LENGTH combination larger than its buffer size,
  1884. and it would accept them and try to use them.  Reported by David Fiander.
  1885. ckcfns.c, 2 Dec 97.
  1886. Fixed SET MODEM COMMAND VOLUME HIGH; previously it was assigning the given
  1887. command to VOLUME LOW.  Reported by Dragan Milicic.  ckuus3.c, 2 Dec 97.
  1888. Changed SHOW MACRO to use chained FDBs, so "show mac ?" works, and yet
  1889. "show mac x" also works when x is ambiguous, etc.  ckuus5.c, 2 Dec 97.
  1890. Changed askmore() to not ask when the batch or background flags are set.
  1891. ckuus5.c, 2 Dec 97.
  1892. Removed "kludge to fix redefinitions in <linux/wait.h>" since (a) this
  1893. interferes with the new glibc and headers, and (b) it isn't needed any more
  1894. anyway since we simplified how REDIRECT works.  ckutio.c, 2 Dec 97.
  1895. Another attempt at preventing "Transfer OK" messages when transfer wasn't
  1896. OK.  ckcpro.w, 3 Dec 97.
  1897. Started adding a "filestatus" variable to protocol modules, to clean up the
  1898. mess and confusion of all the separate flags: cxseen, czseen, discard,
  1899. epktrcvd, etc etc.  Not set or tested yet, to be continued later, maybe...
  1900. ckcker.h, ckc*.c, 3 Dec 97.
  1901. Removed the kludge by which we forced macro invocations into the command
  1902. recall buffer, since Monday's fixes removed the need for it.  ckuusr.c,
  1903. 3 Dec 97.
  1904. Changed SHOW COMM to always show SET CARRIER-WATCH setting.  Updated the
  1905. HELP SET CARRIER-WATCH text.  ckuus[42].c, 3 Dec 97.
  1906. New HP-UX makefile entries from Peter Eichhorn.  3 Dec 97.
  1907. Enabled RLOGIN code for HP-UX 10.00 (it was already enabled for HP-UX 9.00)
  1908. and Digital UNIX 4.0.  ckcnet.h, 3 Dec 97.
  1909. Added a hint message for RLOGIN failures.  ckuusr.c, 3 Dec 97.
  1910. Changed STATISTICS to omit the transmission speed if it's a network connection
  1911. or if C-Kermit is not in local mode.  ckuus4.c, 3 Dec 97.
  1912. Fixed "cd .<ESC>" and "cd ..<ESC>" to behave as expected in UNIX and OS-9.
  1913. (Fixing this for "?" would be much harder, since "." and ".." do not get into
  1914. the directory list).  ckucmd.c, 3 Dec 97.
  1915. The following for VMS from Lucas Hart:
  1916. (1)  Add a NOVMSSHARE "feature", since that condition is contrary to
  1917.      default VMS linking,  and a __CRTL_VER (that is what DEC C calls
  1918.      it, though DECC_RTL would be more precise for their usage) to CKUUS5.C
  1919. (2)  Update OLD_VMS conditionals for VMS 4.7 (before they were only to
  1920.      V4.4), in CKVOLD.C, CKVFIO.C, CKVTIO.C
  1921. (3)  Change the CKVKER.COM link logic slightly to always define either
  1922.      NOVMSSHARE, or VMSSHARE, and to make the VAX NOVMSSHARE also define
  1923.      (and link) /NOSYSSHARE, as initially intended.
  1924. (4)  Comment out more of the debugging output in CKVKER.COM
  1925. (5)  Similar changes to CKVOLD.COM (and incorporate CKVKER 1.17 edits)
  1926. Contributed 5 Oct 97; I finally got around to them on 3 Dec 97.
  1927. Removed perror() calls from keepalive(), and replaced with debug() calls.
  1928. No point scaring people to death...  ckcnet.c, 3 Dec 97.
  1929. Assorted #ifdef adjustments for building on many systems.  Various modules,
  1930. 3 Dec 97.
  1931. Fixed Data General AOS/VS version to allow recently defined file numbers,
  1932. chkfn(); ditto for OS-9.  ck[d9]fio.c, 4 Dec 97.
  1933. RETURN from inside SWITCH did not work right; same problem as END (fixed on
  1934. July 3).  doreturn(), ckuus6.c, 4 Dec 97.
  1935. DIAL and ANSWER should not automatically CONNECT, no matter what the DIAL
  1936. CONNECT setting is, if C-Kermit is running in batch or in the background.
  1937. ckuusr.c, 4 Dec 97.