ckc197.txt
资源名称:cku197.tar.Z [点击查看]
上传用户:dufan58
上传日期:2007-01-05
资源大小:3407k
文件大小:866k
源码类别:
通讯/手机编程
开发平台:
Windows_Unix
- Documented CLOSE command. ckermit2.upd, 4 Dec 97.
- Added lots of code to VMS ttopen() to see what I could find out about modem
- signals, in an effort to get SET CARRIER-WATCH working in VMS, where it never
- has been implemented. Need more info before I can make further progress.
- However, it looks like the VMS SET TERM /MODEM vs /NOMODEM setting might be
- critical here, and this has never been examined or set in VMS C-K before.
- ckvtio.c, 4 Dec 97.
- Changed CKVKER.COM to not give /NOSYSSHARE to linker when NOSHARE chosen,
- since some of the nonsharable libraries are unusable (UCX, some versions of
- SMG, etc). Now I no longer get LIB$FIND_IMAGE_SYMBOL when building.
- ckvker.com, 4 Dec 97.
- From Lucas Hart, a fix for the annoying warning from DECC in Digital UNIX 4.0
- about "union wait". ttruncmd(), ckutio.c, 4 Dec 97.
- Fixed some problems with parsing the DELETE command when it was given the
- name of a file that doesn't exist. ckuus6.c, 4 Dec 97.
- Finally tracked down the reason why sometimes the file-transfer bar zooms
- out to 100% when a file transfer is interrupted; the screen() routines were
- resetting percent done when the Z packet comes, at the end of the transfer,
- rather than when the F or X packet comes, at the beginning of the transfer.
- This was OK except when a second copy of the Z packet came -- then suddenly
- the percent done was 100 instead of whatever it was the first time. No more.
- screenc(), ckuusx.c, 5 Dec 97.
- Still, it seems rather common for the file sender to send two Z packets when
- streaming. Why? Because once interrupted, the receiver sends an ACK(X) for
- every packet from now on. The sender gets the first one and sends Z(D). But
- more arrive, so it sends another Z(D). Cure: the receiver should only send
- ONE ACK(X) or ACK(Z) when streaming. Cure applied in ckcpro.w, 5 Dec 97.
- When draining incoming packets after sending an E-packet and using the
- fullscreen file-transfer display, put up a message that we are draining -- it
- can take a while -- then another when finished. errpkt(), ckcfn2.c, 5 Dec 97.
- Eliminated another per-packet function call, getrtt(), in the streaming case.
- ckcfn2.c, 5 Dec 97.
- Ditto for calling gtimer() every time we send or receive a packet if we are
- not timing out (as when streaming). ckcfn2.c, 5 Dec 97.
- Tightened up "drain loop" in error-packet sender by calculating timeouts on
- the fly rather than using an overconservative value, even when streaming and
- the timeout was 0. errpkt(), ckcfn2.c, 5 Dec 97.
- Cleaned up much errpkt()/ermsg()/screen()/clsif()/clsof() redundancy. Made
- errpkt() close files, call screen(), make debug and transaction log entries,
- etc, which was previously done piecemeal all over the place. Also made
- errpkt() set czseen, since of course an E packet cancels the current batch of
- files. This prevents still more spurious "100%"'s, completion messages
- stomping over each other, etc. Now it all seems pretty tight. ckcpro.w,
- ckcfn2.c, 5 Dec 97.
- Added some debugging code to netopen() to catch possible problems when
- non-Telnet port is requested. Plus merged in Jeff's recent changes. ckcnet.c,
- 6 Dec 97.
- UNIX C-Kermit beware file updated with various items. ckuker.bwr, 6 Dec 97.
- Elapsed time was always showing up as zero when receiving files. Fixed in
- fstats(), ckcfn2.c, 6 Dec 97.
- Lots of changes to ckcnet.c from both me and Jeff regarding set socket options;
- mine removed perrors (again) and replaced them with a consistent format of
- debug log entry; Jeff's were substantive. 6 Dec 97.
- Discovered it was too easy to introduce interoperability between non-zero-
- prefixing and zero-prefixing Kermits by including 0 in SET PREFIXING MINIMAL.
- Changed this to not unprefix zero after all, and changed SET PREFIXING NONE
- to unprefix everything but CR, IAC, and SOP, and had the clear-channel code
- do SET PREFIXING NONE, rather than MINIMAL. ckcmai.c, ckcfns.c, ckuus5.c,
- 6 Dec 97.
- Joe D persistently complained that streaming could not be interrupted in
- Unixware. Reason: ttchk() was not doing its job; it has to be relied on to
- tell us how many characters are waiting unread. But this was not happening in
- UNIX versions that support select() or rdchk(), etc, but that do not support
- FIONREAD. select() would tell us *that* characters were waiting, but not how
- many. So the test in sdata() for (ttchk() > some-number) would never succeed,
- and so the reverse channel would never be sampled.
- Well, it seems FIONREAD is being picked up on most systems from ioctl.h,
- term.h, etc, but not on Solaris or Unixware, so we need to include it from
- <filio.h> or wherever else it might be found. ckutio.c, 6 Dec 97.
- It turns out the non-FIONREAD-yet-MYREAD versions were just not working very
- well at all transferring files with window sizes > 1 (or streaming). In this
- case I made ttchk() return the number of bytes in the myread buffer, if
- nonzero; we'll get the next bunch of characters next time around. When the
- internal buffer is empty, then we go to select() and friends, and if select()
- tells us data is ready to read, we call the myfillbuff() function to get as
- many as are there, rather than returning 1 as before; this allows the
- ACK-checking logic in the sdata() loop to detect an ACK much more quickly, in
- theory at least. ttchk(), ckutio.c, 6 Dec 97.
- Meanwhile, I cleared up the old problem -- at least in MYREAD versions of UNIX
- C-Kermit -- in which we read a packet by its length field and then leave any
- trailing junk (like EOP) to still be read, which makes ttchk() always find at
- least one character waiting, which can slow us down when we go to read a
- packet but there isn't one there. ttinl(), ckutio.c, 6 Dec 97.
- Fixed SHOW STREAMING to show the actual cps of the last transfer. ckuus5.c,
- 6 Dec 97.
- Isolated SCO as a platform where there is no OS-assisted buffer peeking, and
- so our new ttchk() select-then-read method must be used. Tested streaming
- there, including interruption of the SCO version from a receiver on the other
- end -- it works fine. The connection from here to there is Internet, but it
- goes through a V.34 modem. Streaming is anywhere from 50% to 1000% faster on
- this connection. Sometimes nonstreaming fails badly due to unpredictable
- timing, whereas streaming has no timeout worries. 7 Dec 97.
- Made sure streaming is turned on only during data phase, to prevent
- "Transmission error on reliable link" from stopping the transmission before
- it started, in case the user didn't escape back fast enough. ckcpro.w,
- ckcmai.c, ckcfn2.c, 7 Dec 97.
- Joe D's persistent report about C-K in Unixware starting out at the slow-start
- packet size and never going up turned out to be true. The reason I couldn't
- reproduce it is that all the versions I tested on had BIGBUFOK, but Unixware
- didn't, aha. Fixed in spar(), ckcfns.c, 7 Dec 97.
- Discovered (after hours of trial and error) that you can't send the following
- characters unprefixed to VMS: 1 3 13 14 15 17 19 24 25 141 145 147. Several
- of these (14,15,24,25) are a surprise. Once I made sure these were prefixed,
- streaming worked fine, as well as non-streaming with W=30, P=8000. I added
- the missing ones to the SET PREFIXING CAUTIOUS list, and also set them when
- the WHOAREYOU mechanism lets us know we have VMS on the other end.
- FIONREAD SO_ERROR
- SunOS <sys/filio.h> Works OK <sys/socket.h>
- Solaris <sys/filio.h> Works OK <sys/socket.h>
- Unixware <sys/filio.h> Works OK <sys/socket.h>
- AIX 4.1 <sys/ioctl.h> Works OK <sys/socket.h>
- HP-UX 10.20 <sys/ioctl.h> Works OK <sys/socket.h>
- SCO 5.0.4 <sys/socket.h> Doesn't work <sys/socket.h>
- NeXT <bsd/sys/ioctl.h> Works OK <bsd/sys/socket.h>
- IRIX 6.2 <sys/socket.h>(*) Works OK <sys/socket.h>
- (*) also in <sys/filio.h>
- On a Telnet connection to an IRIX 6.2 system at the U of Oregon, discovered
- that the IRIX version could not send a packet longer than 4096 bytes. Its
- logs show it constructing the packet right, but logs on the other side show
- the packet being truncated at 4096 and then concatenated with other pieces of
- itself. Why?
- . Does it happen without streaming? Yes
- . Does it happen wit streaming? Yes
- . Does it happen with older Kermit on IRIX? Yes
- . Does it happen with older Kermit on SunOS? Yes
- . Does "set receive packet-length 4000" make it go away? Yes
- . Does it happen if local is not SunOS? Yes
- . Does it happen with "set host *"? No <--
- . Does it happen with SET HOST connections? No <--
- So the IRIX 6.2 Telnet server is the culprit. Streaming / 9K packets works
- fine as long as the IRIX Telnet server is not in the picture.
- The IRIX incident revealed that there were still some places where
- transmission errors (crunched packets, timeouts, NAKs, out-of-sequence
- packets, etc) were not treated as fatal during streaming. Fixed in input(),
- ckcfn2.c, 8 Dec 97.
- I realized that streaming should be turned on the instant it is negotiated,
- and turned off only at the end of the transaction. There is absolutely no
- need to switch it off within a transaction. This simplifies matters greatly
- and avoids errors when we get retransmissions of between-file packets (for
- which there is absolutely no need). ckcpro.w, ckcfn2.c, 8 Dec 97.
- Tightened up UNIX ttinl() just a wee bit by checking the packet length field
- only when (!havelen) (Jeff noticed this). ckutio.c, 8 Dec 97.
- Changed debug format F011 (never before used) to write counted strings
- possibly containing NULs into the debug log:
- debug(F011,label-string,counted-string,count);
- Used for entering a packet, or the beginning of one, into the debug log in a
- relatively legible way, even if it contains NULs, LFs, etc. ckuusx.c,
- ckcfn2.c, ckutio.c, 8 Dec 97.
- Back to VMS unprefixing -- it seems that SO/SI and ^C/^X/^Y don't need
- prefixing when sending into an Alpha with Multinet. But that doesn't prove
- anything -- I've had transfers freeze with many VMS's, not just KERVAX, so
- for now I'm leaving the extra prefixing in.
- Changed "clear-channel" unprefixing to be sticky instead of saving and
- restoring the user's prefixing selection around protocol actions. Otherwise
- the user would never be able to find out what happened (e.g. why a transfer
- failed). ckcfn2.c, 8 Dec 97.
- Made "te" be a sufficient abbreviation for TELNET (conflicted with TELOPT),
- and "ta" sufficient for TAKE (conflicted with TAPI). ckuusr.c, 8 Dec 97.
- Added BIGBUFOK for Unixware 2.0 and higher. makefile, 9 Dec 97.
- Change chktimo() to return(0) if streaming. ckcfn2.c, 9 Dec 97.
- The old bug of the server sending responses to REMOTE commands back in binary
- mode came back again, so I fixed it again. ckcpro.w, ckcfn2.c, 9 Dec 97.
- Verified that IRIX 4K bug also exists on IRIX 5.3. ckuker.bwr, 9 Dec 97.
- Resync'd sources with Jeff's, ckuusr.h, ckuus[57x].c, ckcnet.c, 9 Dec 97.
- Changed VMS version to not test controller type in ttgmdm() if it is running
- on an Alpha. I have no way of testing this. ckvtio.c, 9 Dec 97.
- Changed SET CARRIER and HELP SET CARRIER in VMS to print appropriate messages
- about why it can't be done. ckuus[23].c, 9 Dec 97.
- Reorganized and augmented CKVKER.BWR. 9 Dec 97.
- Started adding a section on how to invoke C-Kermit from Web browsers.
- I couldn't find any way to do this in Lynx... ckermit2.upd, 9 Dec 97.
- Built quickly on SunOS, Solaris, HPUX, Unixware. 9 Dec 97.
- In VMS C-K, incoming filetype attribute was overriding SET FILE TYPE IMAGE.
- Fixed in ckcfn3.c, 10 Dec 97.
- Peter Eichhorn says that in HP-UX, when C-Kermit is in CONNECT mode and pops
- back to the prompt automatically, that the lower CONNECT fork is not killed,
- so subsequent CONNECTs make more and more forks, which compete for i/o on
- the device. I can't reproduce it:
- Popping back because connection dropped:
- . Does it happen in SunOS with a Telnet connection? No
- . Does it happen in HP-UX with a Telnet connection? No
- . Does it happen in HP-UX with a serial connection? ???
- Popping back because of an APC:
- . Does it happen in HP-UX with a Telnet connection? No
- . Does it happen in HP-UX with a serial connection? No
- But there's another problem: HP-UX C-Kermit doesn't pop back to the prompt
- anyway when carrier is lost. As far as I can tell, it never did.
- Streaming on serial connection:
- . V.34 ZIP-file Uploads: about 3400cps.
- . V.34 ZIP-file Downloads: about 2800cps.
- . C-X interrupt when uploading seems to hang, but works OK downloading.
- (Or else the modem just cut out -- it does that a lot).
- Added addt'l debug stmts to UNIX CONNECT module to help catch a situation
- reported in HP-UX in which "garbage" on the connection results in C-Kermit
- popping back to command mode without killing the lower CONNECT fork, so that
- subsequent CONNECTs make extra new forks that compete with each other for
- input. I also made sure that the pid variable was initialized to -1, and
- reset to 0 whenever the fork was killed, so we can check it upon reentry to
- the CONNECT module. And then I decided, since the pid is kept in a static
- variable anyway, to check it upon (re)entry to the CONNECT module, and if it's
- not 0, to print a big message and then try to kill it -- a failsafe mechanism.
- Also changed all debug() entries from the CONNECT module to start with
- "CONNECT" to make them easily greppable. ckucon.c, 11 Dec 97.
- The new fullscreen cps-display procedure was taking up way too much time on
- fast (e.g. local-net) connections, and tended to be too busy to read, so I
- changed it to operate no more frequently than once per second. The estimated
- time left field received the same treatment. ckuusx.c, 11 Dec 97.
- Rearranged the code in VMS buffered-read routine, txbufr(), to recognize the
- purported fact that some new data can be returned by sys$qiouw() even when it
- also returns a status of SS$_HANGUP, in an effort to prevent loss of dying
- gasps like NO CARRIER. ckvtio.c, 11 Dec 97.
- Changed SET TRANSFER MODE MANUAL to also SET FILE PATTERNS OFF, since those
- who read about TRANSFER MODE MANUAL in the book expect it to do what the book
- says. ckuus3.c, 11 Dec 97.
- The VMS version was not returning directory names when in server mode and
- given the REMOTE DIRECTORY command. Fixed in ckcfns.c, ckvfio.c, 12 Dec 97.
- Changed fullscreen display to put the STREAMING message in the Window Slots
- field, since window slots are irrelevant when streaming, and also not to put
- false numbers in the RTT/Timeout field, and fixed various other fields to not
- update unnecessarily, and consolidated various other code in the fullscreen
- display routines. ckuusx.c, 12 Dec 97.
- Discovered I had broken sliding windows a few days ago by commenting out a
- section of code I thought was redundant. It wasn't. ckcpro.w, 12 Dec 97.
- Added comments to gattr() regarding the possibility of retaining the current
- FILE COLLISION option when receiving a file with the Recover attribute that
- does not need to be recovered. The upshot is that it could be done, but it
- would not be easy (so I didn't). ckcfn3.c, 12 Dec 97.
- Results back from VMS testers on CKVTIO.C changes:
- . Mike Freeman: It doesn't break LAT dialouts.
- Changed SET CLEAR-CHANNEL AUTO to also announce a clear channel if RELIABLE
- is ON. ckcfns.c, 17 Dec 97.
- External protocols were not propogating the exit status to the success variable
- (which is the basis of IF SUCCESS / FAILURE as well as v(status)). Fixed in
- ckcpro.w, 18 Dec 97.
- More work on VMS txbufr() to allow for more and more possibilities regarding
- how or whether VMS reports hangup of serial connection. ckvtio.c, 19 Dec 97.
- Minor change in Microlink modem description text. ckudia.c, 19 Dec 97.
- Checked on HP-UX automatically popping back when carrier was dropped -- it
- never did. Aside from that, serial dialouts are good; RTS/CTS works
- perfectly, streaming works (since it's an error-corrected connection and the
- connection between the modem and the HP is solid). A non-compressed binary
- file uploads at about 5400cps (on a 31200bps connection), whereas SEND /CAL
- (the dynamically generated 90+ uncompressible data) uploads at about 3600cps.
- Last-minute checks of streaming transfers between SunOS and AIX over local
- 10BaseT are fine -- they go at 600-730Kcps streaming, 540-660Kcps
- nonstreaming.
- Numerous #ifdef, prototype, declaration, and other syntactic adjustments to
- allow compilation everywhere. Many modules, 19 Dec 97.
- Restored TELOPT_SGA handling to the way it was in Alpha.09 to prevent double
- echoing when telnetting to AOS/VS. ckcnet.c, 20 Dec 97.
- More syntactic adjustments for VMS & DEC C, plus a fix for the new VMS handing
- of SET [ MODEM ] CARRIER-WATCH. ckuus3.c, various header files, 20 Dec 97.
- "make du32"... while compiling ckuusx.c, the compiler dumps core. I did the
- trick with compiling this module separately without the optimizer. makefile,
- 20 Dec 97.
- ckuus2.c (the help-text module) grew too big for the QNX 16-bit build, so
- NOHELP added to makefile. Also clearok() seems to be missing from its curses
- library, so the reference to it in screenc() was #ifdef'd out. makefile,
- ckuver.h, ckuusx.c, 21 Dec 97.
- ---Alpha.10---
- Changes from Jeff to ckcnet.c, 21 Dec 97.
- The VMS version was warning that connection was still open after it closed.
- That's because ttclos() was setting network to 0, so then a subsequent call to
- ttchk() was taking the serial path. Fixed in ckvtio.c, 22 Dec 97.
- Added GFTIMER to VMS version using sys$gettim() and lib$sub_times(), with help
- from James Puzzo <jamesp@dgii.com>. Compiles and runs without complaint on
- VMS 5.5, so should be OK on 5.0 and above, but maybe #ifndef OLD_VMS might be
- needed. ckcdeb.h, ckvtio.c, 22 Dec 97.
- Added "*.exe" to UNIX list of binary filename patterns. ckcmai.c, 22 Dec 97.
- Changed frand(n) to return a random integer between 0 and n, as advertised,
- even if n <= 0. ckuus4.c, 22 Dec 97.
- Changed "Default file-transfer mode" message to say AUTOMATIC in the more
- modern cases. ckuus5.c, 22 Dec 97.
- Changed a recently-added memcpy() in tn_sb() to strncpy(); memcpy is not
- portable. ckcnet.c, 22 Dec 97.
- Changed #ifndef to #ifdef to avoid making a debug log entry for every single
- character than comes in, in netinc(), ckcnet.c, 22 Dec 97.
- Updated bgcc (bounds-checking gcc) makefile entry from William Bader,
- 23 Dec 97.
- Fix from Jeff to netflui() for TCPLIB case. ckcnet.c, 23 Dec 97.
- Replaced the strncpy() that replaced the memcpy() with a loop so as not to
- terminate at NUL. tn_sb() in ckcnet.c, 23 Dec 97.
- Changes from Jeff to SHOW TELNET. ckuus4.c, 23 Dec 97.
- Fixed clsconnx() in the remote-mode VMS case to call ttclos(), otherwise it's
- not possible to SET LINE TTA0:, then SET LINE, the SET LINE TTA0: again (we
- should check this in K95, etc, too). ckuus7.c, 23 Dec 97.
- Changed "float" to CKFLOAT everywhere, and defined CKFLOAT to be double in
- ckcdeb.h (a little reading shows that double is more portable than float).
- This was needed (at least) because in SCO, conversion from float to long dumps
- core (on purpose!) if the real number is too long for a long (clearly, then,
- this is not the right fix). The default CKFLOAT definition can be overridden
- by -DCKFLOAT=float (or whatever) on the command line. Many modules, 24 Dec
- 97.
- Fixed SHOW PATTERNS to not make some lines too long; it was miscounting the
- length. shopat(), ckuus5.c, 24 Dec 97.
- Fix from Jeff for handling receive filters: evaluate v(filename) after
- converting the incoming name, rather than before. rcvfil(), ckcfns.c,
- 29 Dec 97.
- Disabled filename pattern-match based transfer mode switching when sending
- from pipe or filter (Jeff's suggestion). sfile(), ckcfns.c, 29 Dec 97.
- Change from Jeff to not log incoming NUL after CR when executing INPUT
- commands on Telnet connections. ckuus4.c, 29 Dec 97.
- Fixed a "== should be =" typo in the SET HOST code and supplied some missing
- TCPSOCKET ifdefs (from David Lane). ckuus7.c, 29 Dec 97.
- Added entry for zrmdir() to ckcplm.doc. 29 Dec 97.
- Updated IRIX makefile entries from Ric Anderson. 29 Dec 97.
- Fixed an unguarded reference to zfnqfp(). ckcfn3.c, 30 Dec 97.
- Fixed UNIX ttinl() to terminate on turn argument, if given, rather than
- eol argument. ckutio.c, 30 Dec 97.
- Improvements on the new F011 debug.log format (so far used only by the UNIX
- version of ttinl()). ckuusx.c, 30 Dec 97.
- Various changes to debug logging. cku[tf]io.c, 30 Dec 97.
- Found the problem that William Bader was reporting in the SCO version. The
- new code that I added to ttchk() in Alpha.10 for the non-FIONREAD case, that
- would force a nonblocking read when all else failed, set the initial myread
- buffer index to 0 when it should have been -1 (since, unlike mygetbuf(), it
- was not returning a character). ckutio.c, 30 Dec 97.
- Made kermit -X and -Z (X.25 connections) set the reliable flag. ckuusy.c,
- 30 Dec 97.
- Added switches to SET LINE / SET HOST.
- /CONNECT means CONNECT automatically if connection is successful.
- /SERVER means go into server mode automatically if connection is successful.
- /SHARE (VMS SET LINE only) means allow SET LINE device to be shared.
- /SHARE is to get around a problem in DECIntact, where the only way to use the
- controlling terminal is if you have SHARE privilege. When /CONNECT or /SERVER
- is given on a serial connection, we wait up to 1 sec for CD to appear if
- CARRIER-WATCH is not OFF, since instantaneous connecting tends to work because
- it can take some time for CD to react to DTR. Also, made the trailing /TELNET
- and /RLOGIN switches invisible, since it doesn't make a lot of sense to say
- "telnet blah /rlogin" or v.v.; left the "/raw-socket" switch visible. Tested
- on SunOS with TCP/IP, SunOS with serial ports, and Solaris X.25 connections.
- The switch parsing code was not added for network types other than TCP/IP and
- X.25. ckuusr.h, ckuus[27].c, ckvtio.c, ckermit2.upd, 30 Dec 97.
- The SET LINE (SET PORT) switch parsing for OS/2 is in place but not tested.
- setlin(), ckuus7.c, 30 Dec 97.
- C-Kermit's SWITCH command would erroneously execute the first case if the
- switch variable did not have a matching label and there was no ":default"
- label. Fixed by adding a :default label to the SWITCH macro definition, which
- is ignored if the user provides a :default label in the SWITCH statement.
- ckuus5.c, 30 Dec 97.
- Changed copyright dates to 1998. All ck[cuv]*.[ch] modules. 30 Dec 1997.
- Some fixes from Jeff to yesterday's changes. ckuus[27].c, 31 Dec 97.
- Allow remote filename to be shown in serial and/or CRT display, from Jeff.
- ckcpro.w, ckuusx.c, 31 Dec 97.
- Fixed protocol module to propogate failure into exit-status variable.
- proto(), ckcpro.w, 31 Dec 97.
- Changed SET LINE /SHARE (VMS) to not only not drop SHARE privilege but also
- to try to enable it. ckermit2.upd, ckvtio.c, 31 Dec 97.
- Added SET LINE /NOSHARE (VMS), the opposite of /SHARE, since VMS people like
- their switches in pairs. ckuusr.h, ckuus[27].c, 31 Dec 97.
- Changed all the VMS code that tests for SS$_HANGUP to do so only when
- CARRIER-WATCH is not OFF. txbufr(), contti(), ckvtio.c, 31 Dec 97.
- Removed text from HELP SET CARRIER-WATCH saying that it didn't work in VMS.
- ckuus2.c, 31 Dec 97.
- Removed VMS warning text from SET CARRIER-WATCH. ckuus3.c, 31 Dec 97.
- Changed /CONNECT to undo any previous /SERVER and vice versa; the two are
- contradictory and mutually exclusive, so if more than one are given, the last
- one sticks. ckuus7.c, 31 Dec 97.
- Added carrier check at VMS CONNECT entry, just like in UNIX, to enforce
- CARRIER-WATCH setting. ckvcon.c, 31 Dec 97.
- Improved the "Carrier required but not detected" message in the UNIX CONNECT
- module (making it the same as the VMS one). ckucon.c, 31 Dec 97.
- Removed scary message from VMS CONNECT module if CD drops but CARRIER-WATCH
- is OFF. ckvcon.c, 31 Dec 97.
- Commented out three gratuitous "blah connected on port blah" messages from
- ckcnet.c which started popping up yesterday. With only very few exceptions,
- the upper-level code should take care of printing information messages.
- ckcnet.c, 31 Dec 97.
- Discovered that elapsed-time (and therefore also CPS) calculations were
- complete nonsense in VMS on the Alpha, even though they were OK on the VAX.
- Changed definition of CKFLOAT from "double" to "float" on the Alpha only.
- which seems to have fixed it. ckcdeb.h, 31 Dec 97.
- This bodes ill for other operating systems on the Alpha (like Digital UNIX),
- especially if they use DEC C, but I tried it on DU4.0 as "double". It did
- the calculations correctly, but eventually died with a "floating point
- exception", so I made CKFLOAT "float" here too. ckcdeb.h, 31 Dec 97.
- More fooling with Digital UNIX 4.0. Regular file transfer works OK, but
- streaming halts (hangs) almost immediately. Debug log shows FIONREAD is
- returning ridiculous numbers, like 4393751543808... And so then we get
- awfully confused trying to read that many bytes. "man 7 tty" in DU4.0 says
- the FIONREAD ioctl arg is int *, but I was using long *. Changed it to int *,
- and now get reasonable results from it -- numbers like 252 or less. But it
- still hangs when trying to stream. Aha, it's only the stupid Xon/Xoff
- business. I wonder why it doesn't happen when not streaming? Probably
- because streaming is so much faster... Anyway, the change to ckutio.c was a
- good one, and long overdue -- I wonder how the code ever worked before...
- 31 Dec 97.
- (I wonder what happens with Linux on the Alpha...)
- Back to VMS... If I Telnet from VMS C-K to somewhere else, then close the
- connection (to return to remote mode), then type "receive", it goes back the
- prompt immediately. This is fallout from the December 22 change regarding
- ttclos() setting network to 0. Well now nobody was. Fixed by making ttopen()
- set network to 0 when it opens a serial connection. ckvtio.c, 31 Dec 97.
- Updated ckuker.bwr. 31 Dec 97 (sic transit anno 1997).
- In the UNIX version, initialize all 12 file pointers to NULL, not just the
- first 8. ckufio.c, 1 Jan 98.
- Documented modem signal treatment in VMS. ckvker.bwr, section 3.1.4,
- 1 Jan 98.
- Don't print hangup error message in VMS C-Kermit during CONNECT if
- CARRIER-WATCH is OFF. ckvtio.c, 1 Jan 98.
- When doing a labeled-mode transfer, if an as-name was given in the RECEIVE or
- GET command, it should override the file's internal name, but until now it
- didn't, which was very confusing. This is now done by doing an implicit "set
- file label name off" in rcvfil(), and then restoring the "set file label name"
- setting to its previous value after the transfer. Tested, works. ckcfns.c,
- ckuus[6x].c, 1 Jan 98.
- Added cross-references to other relevant SHOW commands from SHOW FILE.
- ckuus4.c, 1 Jan 98.
- Minor cosmetic improvements to SHOW SCRIPTS. ckuus5.c, 1 Jan 98.
- Added Streaming and CKFLOAT type (float or double) to SHOW FEATURES.
- ckuus5.c, 1 Jan 98.
- Defined CK_PERMS for VMS to see what would happen. Nothing. ckcdeb.h,
- 1 Jan 98.
- There's already code from Terry in ckvfio.c to fill in this stuff, but it has
- never been exercised. Does it send generic protection? No, because the code
- was putting binary data into the A packet. Fixed it to convert to strings
- (hex for 16-bit system-dependent, tochar() for generic). VMS sys-dependent
- protection is hex representation of WGOS fields (World,Group,Owner,System)
- in that order; in each field Bit 0 = Read, 1 = Write, 2 = Execute, 3 = Delete.
- A bit value of 0 means permission is granted, 1 means permission is denied.
- ckvfio.c, 1 Jan 98.
- VMS generic protection was being sent for "world" (by the book), but we're
- doing it for "owner" instead these days, which makes more sense, so I made
- this change. So now VMS C-Kermit sends both permission fields correctly:
- r-01-00-^A/!FWERMIT.EXE'"
- s-01-00-^AE!Y/amd/watsun/w/fdc/new/wermit.exe.DV
- r-02-01-^A]"A."D7""B8#119980101 18:14:05!#8531&872960,$A20B-!7(#512@ #.Y
- s-02-01-^A%"Y.5! ^^^^^^^^^
- The system-dependent protection "A20B" corresponds to (E,RWED,RED,RE) (but
- note the order of fields is reversed and the bit sense is reversed). The
- generic protection "7" = 23 + 32; 23 = 16+4+2+1 = Read, Write, Execute,
- Delete, which is indeed the owner permission. ckvfio.c, 1 Jan 98.
- This was somewhat difficult and time-consuming without manuals, man pages, or
- header files, requiring much trial and error... Then came the even more
- mysterious task of setting received-file protection from the incoming
- Attribute packet. Two cases:
- 1. Local protection (for VMS-VMS transfers; needs "set transfer mode manual"
- or else we get labeled transfer, which bypasses all of this). I've got
- this working to the point of converting the incoming bit (like ",$E20B")
- to internal format. (Once this works, we can easily extend it to cover
- RSX, etc, provided PDP-11 Kermit uses the same format, which it probably
- doesn't.)
- 2. Generic protection. I've got this working to the point of converting
- the generic format to VMS internal format, but only for the one field.
- What do I set the other fields to?
- And then, in both cases, I wind up at the bottom of zstime() with
- xabpro_ofile.xab$w_pro filled in with a plausible value, but then nobody ever
- uses it for anything so the incoming file's protection is never actually set.
- That last part needs a VMS expert:
- 1. How do I get the default protection for the file we're creating so I
- can set the non-owner fields to reasonable values? For example, if it's
- a new version of an existing file, it should (and normally does) inherit
- its protection, but that happens transparently to Kermit. But now we want
- to get the protection that *would* be set and change the owner field
- according to the attribute.
- 2. What do I do with xabpro_ofile.xab$w_pro once it's filled in? zstime()
- sets the file date simply by copying it to xabdat_ofile.xab$q_cdt, and
- then this is picked up later by zopeno(), so why isn't the protection
- also picked up? I couldn't quite follow all the RABs and FABs...
- The upshot is, protection/permissions work when sending from VMS to UNIX, but
- not in the other direction. So, for example, if you send an EXE file from VMS
- to UNIX, it keeps its execute permission. If we can get this working in the
- other direction, then when you send it back from UNIX to VMS, it will still
- have its execute permission.
- Changed UNIX C-Kermit to set Delete bit in Generic permissions if file has
- Owner Write permission (since UNIX has no separate Delete permission), and to
- treat Delete bit in incoming Generic permission equivalent to Write bit.
- ckutio.c, 1 Jan 98.
- Tried not defining NOLISTEN for VMS to see what would happen. It worked OK on
- UCX 2.0. It failed horribly on MultiNet; I twiddled some stuff here and there
- and seem to have got it working. Went back to UCX to make sure I didn't break
- it there... Hmmm, still seems to work. ckcnet.[ch], ckermit2.upd, 1 Jan 98.
- VMS: turn off broadcasts on the *console* channel as well as on the
- communications channel. conbin(), ckvtio.c, 2 Jan 98.
- Changed the UNIX version when it is about to set a received file's owner
- permissions from the incoming generic protection attribute, to use the umask
- for the group and world permissions. zstime(), ckufio.c, 2 Jan 98.
- Updated File Permissions section of ckermit2.upd, 2 Jan 98.
- Updated ckermit.bwr, and added a new section on "echoplex" scripts. 2 Jan 98.
- Moved usage() routine and hlp1[] strings from ckuus2.c to ckuusy.c. 2 Jan 98.
- Added little help blurbs for each command-line argument. ckuusy.c, 2 Jan 98.
- Added HELP OPTIONS [ { <opt>, ALL } ]. If <opt> given, it prints the short
- HELP text for the option. If ALL given, it prints them for all options, with
- more-prompting, etc. HELP OPTIONS by itself explains command-line options.
- ckuusr.h, ckuus[2y].c, 2 Jan 98.
- VMS protections, cont'd... John Santos showed me how to link the protection
- field into that rat's nest of FABs, RABs, and XABs, so now we are actually
- setting the VMS file protection from the incoming A packet. And it works for
- both system-dependent (VMS 16-bit) and generic Kermit protections, hurray.
- Except when using the generic protection, the non-Owner fields are set to 0,
- e.g. (,RWED,,); I'll do something about that tomorrow. ckvfio.c, 2 Jan 98.
- Added v(pid) for VMS. ckcdeb.h, ckvfio.c, 3 Jan 98.
- Added code to VMS version to set its process name to "C-Kermit_6.1".
- If that's a duplicate name, then "C-Kermit_6.1_1", C-Kermit_6.1_2", etc.
- sysinit(), ckvtio.c, 3 Jan 98.
- Added code to VMS zstime() to get the user's default file protection with
- sys$setdfprot(), and then used it to set the S, G, and W fields when setting O
- field from generic protection (but using the O field as a mask for the other
- fields). ckvfio.c, ckcplm.doc, ckermit2.upd, 3 Jan 98.
- Merged some changes from Jeff. ckcmai.c, ckcnet.c, ckuus[xy].c, ckuusr.h,
- 3 Jan 98.
- Minor cosmetic cleanups to HELP OPTIONS. ckuus[2y].c, 3 Jan 98.
- Increased Olimit for SINIX to 2100. makefile, 3 Jan 98. (But now ckcpro.c
- takes a loooooong time to compile...)
- Numerous last-minute #ifdef & declaration adjustements. Many modules.
- 3 Jan 98.
- At the last moment, found that what should have been "xitsta |= what;" had
- been typed as "xitsta != what;" (watcom caught it - "meaningless expression").
- So it's corrected in the code, but wrong in all the Alpha.11 binaries.
- ckcpro.w, 3 Jan 98.
- ---Alpha.11---
- (See last entry for Alpha.11.)
- Some fixes to usage() message. ckuus[2y].c, 4 Jan 98.
- Minor fixes from David Lane to a debug() statement in ckcnet.c and to
- VOS-related #ifdefs in ckcdeb.h, 4 Jan 98.
- Added display of sizeof(xxx) to SHOW FEATURES, for xxx == int, char, long, etc.
- ckuus5.c, 6 Jan 98.
- Merged Jeff's recent changes, many modules. 13 Jan 98.
- Merged David Lane's changes for Stratus VOS, adding support for recursive
- directory traversal, fully-qualified filenames, etc. ckcdeb.h, ckuusx.c,
- plus all-new ckl*.* modules, 13 Jan 98.
- We were still getting floating-point exceptions and related difficulties (up
- to and including system halts) in Alpha.11 apparently due to constructions
- like the following:
- if (fpxfsecs <= 0.0)
- fptsecs = (CKFLOAT) 0.000001;
- filcps = (long)((CKFLOAT) ffc / fpxfsecs);
- The division by a tiny number created a quotient that might not fit in a long.
- I replaced all references to "0.000001" by GFMINTIME, which is now defined in
- ckcdeb.h to be 0.005. This doesn't totally fix the problem, but makes it a
- lot less likely. E.g. suppose we have network so fast that we can transfer a
- 1MB file in less time than can be measured, so fpxfsecs is 0.0. When we set
- the time to 0.00001:
- 1,000,000 / 0.00001 = 1,000,000,000,000
- but 2^32 (the longest long) is 4,294,967,296, too small for this number,
- hence the trap. But if we set the time to 0.005:
- 1,000,000 / 0.005 = 200,000,000
- which fits. The new symbol GFMINTIME is defined to this value, and we use
- the symbol everywhere rather than the hardwired value.
- But this still doesn't fix the problem; if the file were (say) 3MB, it would
- still happen. So we also have to check whether the result of a division would
- exceed the capacity of a long (or int) to hold it, and in that case take
- special action to avoid the trap. ckcdeb.h, ckcfn2.c, ckutio.c, 13 Jan 98.
- Recoded the memcpy() replacement loop in ckcnet.c to not use an unitialized
- variable. Then replaced the loop altogether with a call to a new routine,
- ckmemcpy(), which is a system-independent version of memcpy() that can be
- called safely from anywhere in C-Kermit. Presently it's defined in ckcmai.c,
- but eventually all of these utility routines should be moved out to a new
- ckcuti.c module. 13 Jan 98.
- Fixed an out-of-bounds array reference in the new debug(F011,...) handler.
- From William Bader. ckuusx.c, 13 Jan 98.
- Raised MAXWLD for VMS from 4K to 1024K and made mtchs[] array dynamic.
- ckvfio.c, 14 Jan 98.
- Raised MAXWLD for UNIX in the non-BIGBUFOK case from 1K to 4K. ckufio.c,
- 14 Jan 98.
- Moved MAXWLD definition from ck[uvdl]fio.c to ckcdeb.h, so we can access
- it from other modules. Added MAXWLD display to SHOW FEATURES. ckuus5.c,
- 14 Jan 98.
- Defined BIGBUFOK for HP-UX 9.x. ckcdeb.h, 14 Jan 98.
- Added makefile entries and banner for HP-UX 11.00: "make hpux1100", etc.
- makefile, ckuver.h, 14 Jan 98.
- UNIX C-Kermit CONNECT command was not checking the return code of ttchk() for
- a negative value, and so was not popping back to the prompt automatically.
- Seems to do so now, at least on HP-UX, as long as CARRIER-WATCH is not OFF.
- ckucon.c, 14 Jan 98.
- By chance, I noticed something very strange in UNIX:
- C-Kermit> send /b foo
- Sent the "foo" file over and over again. Diagnosis: "/b" is not treated as a
- switch because it does not uniquely match any switch (it is ambiguous between
- /binary and /before). So since it does not match a switch, we look to see if
- it matches a file. It so happens, there was a "b" directory under root. Now
- with the new recursive file sending feature, the SEND command, when given a
- directory name, sends the files from the directory. In other words, "/b"
- is treated as "/b/*". But the b directory contained no files, so zxpand()
- came up with 0. In that case, UNIX zxpand would call zltor() on the filespec
- and try again. Bad idea! This caused the pathname to be stripped, leaving
- only "*". So "send /b foo" sent all the files from the current directory
- with an as-name of "foo". Cure: (1) remove the fallback -- if the filespec
- doesn't match anything, that's that. And (2) Make "/b" an acceptable
- (nonunique) abbreviation for "/binary". ckufio.c, ckuusr.c, 14 Jan 98.
- Added missing return(0) to dohopts(). ckuus2.c, 14 Jan 98.
- In SGI IRIX and in NeXTSTEP, there is no API for hardware flow control, but it
- can still be used by selecting a device with a particular name, like /dev/cufa
- instead of /dev/cua. But in this case SET FLOW AUTO would wind up setting the
- flow control to Xon/Xoff instead of leaving it alone. Added #ifdefs for IRIX
- and NeXT to prevent this. Also defined a new IRIX symbol for all IRIX
- versions 4.0 and later. ckcdeb.h, ckuus3.c, 14 Jan 98.
- How does VMS C-Kermit know if it's running under batch. Currently:
- . When run interactively, batch == 0.
- . If started from a COM file, batch == 1.
- . If started in batch, batch == 1 and congm sys$qiow = SYSTEM-F-ILLIOFUNC
- . In batch, SHOW LOG SYS$INPUT says "_NLA0:".
- Tried adding a sys$getjpiw() call, once I figured out how to set it up.
- If asked for JPI$_MODE, it returns the mode of the job: batch, interactive,
- etc: perfect. Builds and runs fine on VMS 5.5-2, so should be OK elsewhere.
- ckvtio.c, 14 Jan 98.
- Fixed the new xxscreen() macro to not call screen() if batch (VMS) or backgrd
- (elsewhere) was set. ckcker.h. This also required adding extern declarations
- for batch & backgrd to ckcfn[s23].c, ckcpro.w, and ckuusx.c. 14 Jan 98.
- . Fullscreen display in interactive sessions: Yes
- . Fullscreen display in @blah.com sessions: ??
- . Fullscreen display in submit blah sessions: No <-- so this is fixed now.
- Not sure what the deal is with when running C-Kermit with @blah.com, where
- blah.com contains image data... But batch jobs now work nicely, don't put any
- junk in the batch log.
- Added SET BATCH { ON, OFF } in VMS to let user have the final word. ckuusr.c,
- 14 Jan 98.
- Minor fixes to "help options" text. ckuus2.c, 14 Jan 98.
- VMS C-Kermit reported a "fatal error" when executing an INPUT command on a
- modem when it hung up, even though CARRIER-WATCH was OFF. Tracked this down
- with help of a debug log from Dale Dellutri. Fixed in txbufr(), ckvtio.c,
- 15 Jan 98.
- Dale D. also reported that an extraneous character could show up on the
- CONNECT screen when the remote hung up. No explanation jumps out from the
- code, but I changed VMS ttinc() to not deduct 1 from the buffer count until
- first checking that it's > 0. ckvtio.c, 15 Jan 98.
- Checked the VMS version on a system where I can dial out -- I don't seem to
- have broken anything, and I don't see any of the symptoms any more that I
- tried to fix, so maybe that's progress.
- Built on the NeXT, dialed out, logged in somewhere, logged out, and for the
- first time ever, C-Kermit popped back to its prompt automatically. And if
- CARRIER-WATCH is OFF it doesn't, and you can see the NO CARRIER message and
- type more AT commands.
- Evidently the HP workstation Reset key sends some kind of ueber-SIGINT that
- can not be SIG_IGNored. When the user hits it (usually because it's where PC
- users expect Esc to be), suddenly we're in the Ctrl-C handler, longjmping back
- to the prompt, which leaves the lower CONNECT spinning away merrily. What's
- odd about this is that it is the *previous* SIGINT handler, not the current
- one, which is SIG_IGN. I sent off a query to HP about how to handle this, but
- in the meantime, in addition to the stale-fork-killing code I added to
- ckucon.c a while back, I made the Ctrl-C trap simply return
- "if (what == W_CONNECT)". ckuusx.c, 15 Jan 98.
- Peter Eichhorn verifies this fixes leftover fork problem on HP-UX; Reset is
- now properly ignored during CONNECT and causes SIGINT at the command prompt,
- which is handled properly. 16 Jan 98.
- To subtract from, or maybe add to, the confusion about text and binary mode,
- I made sure that if the user says SEND (MSEND, etc) /BINARY, that binary mode
- is really used, i.e. not superseded by filename pattern-matching, or by
- TRANSFER MODE AUTO. Ditto for SEND /TEXT of course. ckuus[r6x].c, 16 Jan 98.
- Unfortunately, matters are not quite so simple with GET because WHOAMI takes
- precedence over WHATAMI, as the manual states. WHOAMI is controlled by SET
- TRANSFER MODE, so if I tell the client to SET TRANSFER MODE MANUAL, then "get
- /text x.zip", it should work. But it doesn't because the server still has
- FILE PATTERNS ON and ".zip" is a binary pattern.
- While looking into this, I also discovered that REMOTE SET FILE TYPE was
- broken. Why? Because as soon as we changed the mode, it was restored to its
- previous value because it didn't also change g_binary (the global, prevailing
- mode).
- OK, fine, that's fixed. But now if TRANSFER MODE is MANUAL, WHATAMI still
- doesn't work. Why? Again because of the patterns. gnfile() was resetting
- its file type to whatever it was when protocol started between each file, so
- as to get the global file mode right when pattern-switching. So this undid
- WHATAMI. Fixed in gnfile(), ckcfns.c, 16 Jan 98.
- So now if I tell the server to SET TRANSFER MODE MANUAL before putting it in
- server mode, everything works right. But there is no way for the client to do
- this after the server is started. So I added REMOTE SET TRANSFER MODE. The
- new code is 410, the values are 0 for AUTO, 1 for MANUAL. Client side in
- ckuus3.c, server sever side in remset() in ckcfns.c, documentation in
- ckermit2.upd, 16 Jan 97. Also sent a note to JRD so he can add it to MSK.
- Added REMOTE SET XFER as a synomym for REMOTE SET TRANSFER and fixed both of
- these to have a private keyword list rather than using the non-REMOTE one.
- ckuus7.c, 17 Jan 98.
- Additions/corrections to text and binary patterns lists. ckcmai.c, 17 Jan 98.
- Added v(intime) to tell the number of milliseconds it took for INPUT to
- find its match. ckuusr.h, ckuus4.c, ckermit2.upd, 17 Jan 98.
- Added display of modem's dial result message to "Call complete" if DIAL
- DISPLAY not ON (and not quiet, etc). ckudia.c, ckermit2.upd, 17 Jan 98.
- Added fword(s1,n1,s2) to return word number n1 from string s1, with optional
- break set s2. ckuusr.h, ckuus[24].c, ckermit2.upd, 17 Jan 98.
- Fixed cmfdb() to print an error message if it gets through all the chained
- fdb's without finding anything and the return code from the last parsing
- function is -9. Previously it just moved the cursor backwards silently
- over the offending field. ckucmd.c, 18 Jan 98.
- If a command has a switch that takes an argument followed by a switch that
- does not, e.g.:
- send /as:oofa.txt /text foo.bar
- and then this command is recalled, there is a parse error. Fixed in gtword(),
- ckucmd.c, 18 Jan 98.
- Added help text for KERMIT command. ckuus2.c, 18 Jan 98.
- Added optional message to EXIT/QUIT, like END and STOP. ckuusr.c, 18 Jan 98.
- Merged Jeff's recent changes, ckcdeb.h, ckuus7.c, ckcnet.c. 19 Jan 98.
- Adjusted the constants for float->long overflow detection in fstats() and
- tstats() (thanks to gcc -Wall). ckcfn2.c, 19 Jan 98.
- Ran a bunch of feature-test builds on SunOS; each one involved some --
- sometimes lots of -- #ifdef adjustments and declaration juggling, especially
- the ones marked with (*). ckuus5.c, in particular, has been massively
- rearranged:
- . (full) ok (1097K)
- . -UDYNAMIC ok (1081K)
- . CK_SMALL ok (1073K)
- . MINIDIAL ok (1064K) (*)
- . NOBIGBUF ok (1081K)
- . NOBROWSER ok (1081K)
- . NOCAL ok (1089K)
- . NOCKSPEED ok (1089K)
- . NOCKTIMERS ok (1089K) (*)
- . NOCMDL ok (1073K)
- . NOCKXYZ ok (1089K)
- . NOCSETS ok (1024K)
- . NODEBUG ok ( 991K)
- . NODIAL ok ( 958K)
- . NOFRILLS ok (1056K)
- . NOGFTIMER ok (1089K)
- . HOHELP ok ( 974K)
- . NOICP ok ( 393K) (*)
- . NOJC ok (1089K)
- . NOKERBEROS ok (1089K)
- . NOLOCAL ok ( 770K) (*)
- . NOMKDIR ok (1089K) (*)
- . NONET ok (1015K)
- . NOPARSEN ok (1089K)
- . NOPATTERNS ok (1081K)
- . NOPERMS ok (1089K)
- . NOPIPESEND ok (1089K)
- . NOPUSH ok (1073K) (*)
- . NORECURSIVE ok (1097K)
- . NOREDIRECT ok (1089K)
- . NORENAME ok (1089K)
- . NORESEND ok (1089K)
- . NOSETKEY ok (1089K)
- . NOSERVER ok (1064K)
- . NOSHOW ok (1040K) (*)
- . NOSPL ok ( 925K) (*)
- . NOTRIGGER ok (1089K)
- . NOTUNING ok (1089K)
- . NOUNPREFIXZERO ok (1097K)
- . NOSPL+NOLOCAL ok ( 614K)
- . sunos42mi ok ( 294K) ("minimum interactive")
- . sunos41m ok ( 180K) ("minimum" - cmd line only)
- After getting all these to build, I went through the list a second time to
- make sure that the accumulated fixes didn't break earlier builds. Then I
- spot-checked various builds to make sure they transferred files OK, etc.
- 19 Jan 98.
- Fixed "kermit -Q" to work no matter what the compile-time buffer lengths are.
- ckuusy.c, 20 Jan 98.
- Still more #ifdef adjustments for feature selection. 20 Jan 98.
- Added an "include list" for fword() (an exception list to the break set).
- ckuus4.c, ckermit2.upd, 20 Jan 98.
- Fixed cmdate() to not accept times that were so large they would wrap around
- and become negative. ckuus4.c, 20 Jan 98.
- Discovered that filename completion was broken on VMS. Fixed in ckucmd.c,
- 20 Jan 98.
- Updated some of the UNIX makefile production rules to include ckcnet.h.
- makefile, 20 Jan 98.
- Discovered that TELOPT_AUTHENTICATION is erroneously defined as 45 on Ultrix,
- OSF/1, Digital Unix, and IRIX (all versions of each). It should be 37. This
- introduces conflicting definitions in the preprocessor, which I #ifdef'd out.
- ckcnet.h, 20 Jan 98.
- ---Alpha.12---
- Merged Jeff's changes since last week. ckuus7.c, ckcnet.c, ckucmd.c,
- 26 Jan 98.
- Added fsplit(string,&array,break,include). ckuusr.h, ckuus4.c, ckuus2.c,
- ckermit2.upd, 26 Jan 98.
- Made SHOW NETWORK available in all versions; if no network support is
- included, it says so. ckuus[r5].c, 26 Jan 98.
- Integrated Jeff's changes since yesterday. ckuus7.c, ckcnet.[ch], ckuusr.h,
- 27 Jan 98.
- Added SET TCP REVERSE-DNS-LOOKUP { ON, OFF }. Sets tcp_rdns; code needs to
- be added to use it. ckuusr.[ch], ckuus[234].c, ckcnet.c, 27 Jan 98.
- Added -DNOGFTIMER to HP-UX 5.00 makefile entry, since the high precision
- timers give off-the-wall results there. makefile, 27 Jan 98.
- Changed predefined FAST macro to "set prefixing cautious" instead of "minimal".
- ckuus5.c, 27 Jan 98.
- Discovered that command-line syntax error messages were never printed.
- Fixed in fatal(), ckuusx.c, 27 Jan 98.
- Merged Jeff's changes. ckuus[r37].c, ckcnet.[ch], 28 Jan 98.
- Moved +DA1.0 from the hpux100o entries to the basic one, since it applies to
- both compilers. makefile, 28 Jan 98.
- Added -pipe to linux entry so it won't make temp files, allowing builds on
- systems where /tmp is too full. makefile, 28 Jan 98.
- In VMS, make zshcmd() (RUN command) return proper status, ditto for zxcmd(),
- and make both set pexitstat. ckcdeb.h, ckuus4.c, ckvfio.c, 29 Jan 98.
- Enabled ck_errstr() for VMS, but errno is always 0. Tried it again based on
- vaxc$errno, same result. So then I went thru ckvfio.c and ckvtio.c and
- assigned the return of every sys$blah() and lib$blah() call to a global
- variable, vms_lasterr. Works. ckv[ft]io.c, ckuusx.c, 29 Jan 98.
- Added ferrstring(n), returns error message for code n. In <sys/errno.h>
- environments (like UNIX), this requires knowing the maximum index of the
- sys_errlist[] array, normally sys_nerr. We'll soon find out how portable
- that is... UNIX and VMS only for now. ckuusr.h, ckuus4.c, 29 Jan 98.
- Added SET FUNCTION DIAGNOSTICS { ON, OFF }. When ON, this makes variables
- and functions return an error-message string as their values. ckuusr.h,
- ckuus[34].c. 30 Jan 98.
- Discovered that array initializers were off by one (i.e. not skipping over
- the "=" sign); numerous other problems with array bounds, malloc'ing and
- freeing, etc, when processing initializers. ckuusr.c, 30 Jan 98.
- Added makefile entrys aix41, aix42, aix43. These are all the same, but
- set a different program herald. ckuver.h, makefile, 31 Jan 98.
- Kerberos V authentication added to Linux version, using Cygnus libs.
- Encryption does not work yet due to fork structure of ckucon.c. makefile,
- ckcmai.c, ckuus5.c, ckutio.c, ckcnet.[ch] + new non-public krbtel.[ch] module,
- documented in kerberos.txt. 1 Feb 98.
- Fixed the size of the command buffer to be at least as big as the function
- result buffer. This means, for BIGBUFOK builds, 10K rather than 4K.
- ckucmd.h, 1 Feb 98.
- Added SET FUNCTION ERROR { ON, OFF }. When ON, this makes any command that
- contains a bad function call or built-in variable reference fail.
- ckermit2.upd, ckuus[2345].c. 1 Feb 98.
- Uncoupled display of dialing-directory related info during dialing from
- SET DIAL DISPLAY ON, which should only affect whether dialog with modem is
- shown. ckuus6.c, 1 Feb 98.
- Fixed some prompt-stomping in VMS DIAL command when DIAL DISPLAY is ON.
- ckudia.c, 1 Feb 98.
- Added "k95" as a command to K95, an alias to "kermit". ckuusr.c, 1 Feb 98.
- Fixed minor problem with completion of "intro" command. ckuusr.c, 1 Feb 98.
- Discovered that isabsolute() for UNIX, OSK, Amiga, and K95 returned 1 instead
- of 0 if the filename started with ".", which is completely wrong. One symptom
- was that an incoming file whose name started with "." when RECEIVE PATHNAMES
- were RELATIVE would have a second dot added to the front of its name. I can't
- imagine why this was done in the first place, and hope I haven't broken
- anything that depended on this -- but if I did, it shouldn't have...
- ckcmai.c, 1 Feb 96.
- When a file group is being transferred, CPS rates were not being calculated
- after the first file. Must have happened during the GFTIMER work... Fixed
- in ckuusx.c, 1 Feb 96.
- In VMS, on a serial connection with CARRIER-WATCH off, and the remote hangs up
- while C-Kermit is in CONNECT mode, contti() gets a completion from sys$qiow()
- indicating SS$_HANGUP, but no character; however, Kermit was returning a
- character anyway, whatever happened to be left in the variable from last time.
- Fixed by having contti() set the read up to be queued again next time and then
- returning a special status, -2. ckcgetc(), looks for the -2 and then calls
- contti() again, up to 10 times. Experimentation shows that the second call
- always succeeds -- SS$_HANGUP is returned only once; after that, reads work
- normally again. ckvtio.c, ckvcon.c, 1 Feb 98.
- Quick check-builds on SunOS, Linux, HP-UX, VMS, and Unixware all compile OK...
- Added test & message for no-such-macro to fexec(). Added tests for bad array
- references to fwords(). Added tests for numeric arguments that were not
- there yet, supplied defaults where they were not previously being supplied in
- cases where it made sense, etc. ckuus4.c, 2 Feb 98.
- Added RTS/CTS for IRIX 6.2 and higher, since an API for it seems to have
- appeared in termios.h; the "POSIX" style is used (tcsettar()), but the field
- name is unique (CNEW_RTSCTC). ckcdeb.h, 2 Feb 98.
- Upon receipt of newer information, fixed RTS/CTS support for SGI to go back
- to IRIX 5.2. ckcdeb.h, ckuver.h, makefile, 3 Feb 98.
- Added "set send packet 4000" to definition of FAST macro for IRIX. ckuus5.c,
- 3 Feb 98.
- Removed a lot of junk from ckermit.ini that isn't needed any more -- EDIT
- macro, BSEND and friends, etc. 3 Feb 98.
- Numerous declaration and #ifdef fixups, many modules, 4 Feb 98.
- ---Alpha.13---
- Merged Jeff's changes: Telnet X-display-location, logout options, etc.
- ckcnet.[ch], ckuus[27].c, ckcdeb.h, 5 Feb 98.
- Changed %* to hold the entire argument line for the macro, so now it can
- be used to reference arguments past %9. ckuus[45].c, 5 Feb 98.
- Changed SET LOGIN { USER, PASSWORD, PROMPT } <text> to allow braces around
- <text> so text can end with "{" without swallowing the rest of the script.
- ckuus3.c, 6 Feb 98.
- After several false starts, figured out how to let the &_[] array, which
- contains pointers to the argument of the current macro, have more than 10
- elements. So now, for the first time, users can pass as many arguments as
- they like to a macro in a straightforward way, and have a straightforward way
- to reference them. This works with nesting, FOR-loops, and everything else.
- v(argc) now includes any extra arguments. ckuusr.h, ckuus[56].c, 9 Feb 98.
- Added a new function, fdimension(&a), which tells the declared size of the
- given array. ckuusr.h, ckuus4.c, 9 Feb 98.
- Filled in &_[0] element with name of macro. ckuus5.c, 10 Feb 98.
- New HP-UX 7.x entries from Peter Eichhorn. makefile, 10 Feb 98.
- Shuffled CK_AUTODL and CK_APC #ifdefs a bit to allow successful compilation
- on OS-9. ckcfn2.c, ckcker.h, ckucon.c, 10 Feb 98.
- Removed -DNETCONN from Plan 9 makefile. ckpker.mk, 10 Feb 98.
- Guarded reference to EWOULDBLOCK error code by #ifdef EWOULDBLOCK, for Plan 9
- and possibly also ISC 4.1. ckutio.c, 10 Feb 98.
- Removed redundant definition of OUT_PAC from ckuusr.h, 10 Feb 98.
- Added CLOSE TRANSACTIONS as a synonym for CLOSE TRANSACTION-LOG, because the
- book mentions CLOSE TRANSACTIONS. ckuusr.c, 10 Feb 98.
- Changed command-line option '#' to require a numeric argument, startflags.
- ckuus[4y].c, 10 Feb 98.
- Changed SET PRINTER #ifdefs to allow pipes for OS-9. ckuus3.c, 10 Feb 98.
- Commented out the "?Retry limit must be greater than window size" check
- in SET RETRY, a relic from bygone days. ckuus3.c, 10 Feb 98.
- Fixed the DIAL command not to send modem commands if they were empty
- strings (in this case, the behavior is different for null pointers and
- empty strings). ckudia.c, 10 Feb 98.
- Fixed compilation of main program to not crash gcc on SCO OSR5.04.
- ckcmai.c, 10 Feb 98.
- Ditto for ckwart.c, 10 Feb 98.
- rmdir() is not available in OS-9; guarded reference to it in ckmkdir()
- by appropriate #ifdefs. ckcfn3.c, 11 Feb 98.
- rand() and srand() not available in OS-9, added NORANDOM to OS-9 makefile.
- ck9ker.mak, 11 Feb 98.
- Added another check to clsif() to make sure it does not put up a "Transfer
- OK" screen when sending is incomplete (in this case because there was an i/o
- error when sending), the check being for the number of file characters sent
- less than the number of characters in the file, taking resends into account.
- ckcfn3.c, 11 Feb 98.
- Lots of fooling with ckutio.c (ttvt(), ttinc(), mygetbuf(), etc) and ckcgetc()
- in ckucon.c to try to catch the case where C-Kermit is in CONNECT mode, stuck
- in a blocking single-byte read(), and the modem is switched off, e.g. on HP-UX.
- Even though CLOCAL is explicitly unset, the read() does not return when this
- happens. There doesn't seem to be anything I can do about it. ckuker.bwr,
- 11 Feb 98.
- In "get /as-name:foo bar", the as-name was ignored; I wonder why nobody
- noticed this before. Fixed in doxget(). ckuus6.c, 11 Feb 98.
- Added SET INPUT CANCELLATION { ON, OFF } to enable / disable keyboard
- cancellation of INPUT command in progress. ckuusr.h ckuus[r2457].c, 12 Feb 98.
- Added SET TRANSMIT TIMEOUT <sec>. ckuus[r2457].c, 12 Feb 98.
- Toned down disconnection error messages in doinput() (Jeff). ckuus4.c,
- 14 Feb 98.
- Changed [M]SEND /MOVE: to /MOVE-TO:. Ditto for /RENAME:. ckuusr.c, 14 Feb 98.
- Fixed GET /COMMAND -- it was totally broken by my change on 11 Feb 98.
- ckuus6.c, 15 Feb 98.
- Added perfunctory help text for Kerberos-related commands; detailed help would
- just be way too much. Referred them to the kerberos.txt file instead.
- ckuus2.c, 15 Feb 98.
- Fix from Jeff for a memory leak in ckuus4.c, 20 Feb 98.
- Reverse DNS lookup ON/OFF/AUTO + send DO LOGOUT, Jeff. ckcnet.c, 20 Feb 98.
- Fix for problem with ECHO and SET FUNCTION ERROR, Jeff. ckuusr.c, 20 Feb 98.
- Merged other changes from Jeff, ckuus[35x].c, ckucmd.c, ckcpro.w, 20 Feb 98.
- Fixed another memory leak in initmac(). ckuus5.c, 20 Feb 98.
- Fix from Jeff for SET { BROWSER, EDITOR }. ckuus3.c, 21 Feb 98.
- Added SET FTP-CLIENT / SHOW FTP. ckuusr.[hc], ckuus[235].c, 21 Feb 98.
- Added SET SLEEP (or PAUSE) CANCELLATION { ON, OFF }. ckuusr.h, ckuus[r236].c,
- 21 Feb 98.
- Added SET COMMAND INTERRUPTION { ON, OFF } to enable/disable the Ctrl-C trap.
- ckuusr.h, ckuus[35].c, 21 Feb 98.
- Fixed WAIT to work as advertised with SET WAIT (SLEEP) CANCELLATION OFF, and
- Updated HELP WAIT and HELP SLEEP. ckuus[r2].c, 22 Feb 98.
- DISABLE CD prevented GET from working when a GET-PATH was set. Fixed in
- gnfile() and openi(), ckcfn3.c, 22 Feb 98.
- The error message from C-Kermit when it could not open a file to be sent was
- always "Can't open file", which was singularly uninformative. Now it sends
- "Access denied" if sending was prevented by DISABLE CD or other restriction,
- otherwise it is the system error message from the open() failure, such as
- "Read access denied". ckcfn3.c, ckcpro.w, 22 Feb 98.
- Similarly for sending files to C-Kermit. opena(), ckcfn3.c, 22 Feb 98.
- Discovered that UNIX C-Kermit server was no longer handling tilde notation
- in GET command filespecs. Fixed in sgetinit(), ckcpro.w, 22 Feb 98.
- Ditto for MGET. Fixed in gnfile(), ckcfns.c, 22 Feb 98.
- Added SET DIAL PACING <msec>. ckuusr.h, ckuus[34].c, ckudia.c, 22 Feb 98.
- Added S14=0 to USR init string so +++ will not hang up the call. ckudia.c,
- 22 Feb 98.
- SHOW DIAL was too long; askmore()'d it. ckuus4.c, 22 Feb 98.
- Assorted last-minute fixes for declarations & ifdefs. ckcnet.c, ckuus4.c,
- 22 Feb 98.
- ---Beta.01---
- Fix for repeat counts when sending in text mode on CRLF-based systems, from
- Jeff. ckcfns.c, 22 Feb 98.
- Added a definition for CK_UTSNAME for SunOS, HP-UX, POSIX (per POSIX.1), AIX,
- and SVR4 (per SVID). Will check on others later. When this symbol is
- defined, we #include <sys/utsname.h>, and then we can get the machine type, OS
- name, OS version, etc, at runtime by calling uname() in sysinit().
- ckcdeb.h, ckutio.c, 25 Feb 98.
- In ckutio.c, CK_UTSNAME means it's OK to include <sys/utsname.h> and to call
- uname(), but outside ckutio.c, it simply means that the strings listed below
- may be referenced (which implies that they are defined in the corresponding
- ck?tio.c module, and filled in by any appropriate means).
- Added string variables to ckutio.c to hold these items:
- unm_mch[] Machine name (e.g. "9000/715")
- unm_nam[] OS name (e.g. "HP-UX")
- unm_ver[] Name of major OS release (e.g. "A")
- unm_rel[] Name of specific OS release (e.g. "A.10.20")
- And logged them in the debug log. Just type "log debug", "close debug" and
- look at the top of debug.log to see them. ckuus4.c, 25 Feb 96.
- Changed v(cpu) to evaluate to unm_mch[] in preference to "unknown" if
- CK_UTSNAME is defined. ckuus4.c, 25 Feb 96.
- Added v(osname) and v(osversion). For systems where CK_UTSNAME is defined,
- these are the sysname and release members of the utsname struct, respectively.
- Thus, these describe the system where C-Kermit is actually running. We never
- had this information before. ckuusr.h, ckuus4.c, 25 Feb 96.
- From now on v(platform) should be thought of as describing the system for
- which C-Kermit was built, which is not necessarily the same as the one it's
- running on.
- In HP-UX 9.0 and later, sysinit() sets the variable hpis800 if the machine is
- an 800-series, otherwise unsets it, using the HP-blessed method of looking at
- utsname.machine[5]. ckutio.c, 25 Feb 98.
- Defined a new symbol HPUX9PLUS meaning "HP-UX 9.00 or higher". Changed
- ttlock() and ttunlock() to use this symbol instead of HPUX10. But since the
- format of device names in HP-UX 9.x is different from 10.00 on Series 700
- hardware than on Series 800, I used the hpis800 variable to construct the
- appropriate format for the lockfile name in ttlock(). At this point, the
- lockfile behavior of HP-UX 9.xx and 10.xx and 11.xx should be identical.
- ckutio.c, 25 Feb 98.
- Changes to make 6.1 build under Sunsoft Interactive UNIX 4.1 from Kenneth
- Cochran (#include <sys/time.h>, link with libinet). ckutio.c, makefile,
- 26 Feb 98.
- Added code to let server handle a GET command for a filename that contains
- spaces. This works if the client sends the name enclosed in either braces
- or doublequotes. ckcpro.w, ckermit2.upd, 26 Feb 98.
- Fixed compilation errors HP-UX 9.xx lockfile code. In HP-UX 10.00 and above
- we also do SVR4 advisory locks, but these are not available in 9.xx, so more
- #ifdefs were needed. ckutio.c, 27 Feb 98.
- Another change for HP-UX 9.xx lockfiles (it was using the HP-UX 10.00 lockfile
- directory, /var/spool/locks, rather than /usr/spool/uucp). ckutio.c, 2 Mar 98.
- Adapted recent HP-UX lockfile code to all HP-UX versions. Added additional
- names to the list of names to check for lockfiles: "cuad" and "culd". Built
- and tested on HP-UX 10.20, 9.05, 8.00, 5.21. ckutio.c, ckuker.bwr, 3 Mar 98.
- Fixed v(cpu) to return uname() hardware type if known, in preference to
- "unknown". I thought I did this before, but I missed an #ifdef in ckuver.h.
- Now we can see all those exotic cpu types (tested on an HP-9000/550, where
- v(cpu) now says "9050X" rather than "unknown"). ckuver.h, 3 Mar 98.
- Discovered that UNIX v(xxx) variables that returned directory names did so
- inconsistently -- some ended with /, some didn't, some ended with two /'s.
- Fixed all of them to send with one and only one /. ckuus4.c, ckutio.c,
- 3 Mar 98.
- Merged Jeff's recent changes. ckuus[r347x].c, ckcdeb.h, cknet.h, 3 Mar 98.
- Discovered that v(inidir) returned a filename rather than a directory name
- if the initialization file didn't exist. It should have returned an empty
- string in this case. Fixed in doinit(), ckuus5.c, 3 Mar 98.
- Added designer banner for BSDI 3.0. ckuver.h, makefile, 3 Mar 98.
- Added uname() info, if we have it, to SHOW VERSION. ckuus5.c, 3 Mar 98.
- VMS #ifdefs for getsockname() to suppress compilation warnings in
- getlocalipaddr(), from Lucas Hart. ckcnet.c, 3 Mar 98.
- Changes from Lucas Hart to VMS file module, ckvfio.c, 3 Mar 98:
- a. Issue an informative message upon failure to SPAWN.
- b. Support transfer of odd-record-length files.
- c. Improvements to isdir().
- In more detail:
- (a) add a diagnostic message when SPAWN fails because the default directory is
- a remote node. (4263)
- (b) when sending a file in C-Kermit BINARY mode, change from RMS BLOCK to RMS
- RECORD mode if the file format is fixed record length and the record length is
- odd. Implementing that turned out to be simple (after the fact.) Maybe that
- will do the job for whoever wants to retain the Kermit-32 behaviour. I've
- done some minimal testing - transfer to a du40 system of a short odd record
- length file; in that case IMAGE vs BINARY had the intended effect of
- including/excluding the pad byte. (918)
- (c) an extension of Mark Berryman's isdir(), to use $SEARCH rather than
- depending on $PARSE to return the directory status. By trial-and-error, I
- concluded that PARSE only tests a directory specification for the existence of
- a corresponding file with ".DIR;1"; it does not test if that file is a
- directory file. Also, PARSE is documented to not test for the existence of
- the directory on a remote node. As far as I can tell, isdir now correctly
- reports whether a file is recognized by RMS as a directory and whether the
- name was a passed as a directory specification or a directory name. (715)
- Disabled GFTIMER for VMS versions prior to 5.0 (William Bader & Lucas Hart --
- actually Lucas sent in code to enable this, but it involves changing the
- mechanism used on later versions also, a risk that would seem to outweigh the
- benefit). ckcdeb.h, 3 Mar 98.
- Discovered that REMOTE SET <various things> didn't work any more because
- the things that were SET were then restored to their saved values upon exit
- from protocol mode. Affected things were BLOCK-CHECK, RECEIVE TIMEOUT, and
- FILE NAMES. ckcpro.w, ckcfns.c, 4 Mar 98.
- A user reported bizarre problems when using the MKDIR command in a macro.
- Problem: incorrect assumption that msgflg was 0 when in protocol mode, nonzero
- otherwise (found by Jeff). Solution: add another agument to ckmkdir().
- ckcker.h, ckcpro.w, ckuusr.c, 4 Mar 98.
- Merged Jeff's changes. ckuus7.c, ckuusy.c, ckucmd.c, 4 Mar 98.
- VMS zrmdir() is a horrible hack, calling system() to set the permission of the
- directory file and calling system() again to delete it -- if anyone knows a
- better way, be my guest. Improved this slightly by setting the owner
- permission to RWED rather than just D, so if the delete command fails, at
- least the directory can still be accessed (e.g. to delete its files, so the
- directory can be deleted after all). ckvfio.c, 4 Mar 98.
- Discovered that VMS C-Kermit could not receive a file whose name contained
- a segment that was more than 39 characters long. The file-creation API does
- not truncate extra characters from name segments, so I added code to VMS
- nzltor() to do this. ckvfio.c, 4 Mar 98.
- Discovered that whenever an .OBJ file is sent from VMS C-Kermit, it says
- "transfer interrupted", even though the file is sent OK. This is because of a
- check I added to clsif() recently to see if the number of file bytes sent was
- not less than the size of the file. Turns out this is not a reliable test for
- VMS, so I dummied out the test for VMS. Ditto for VOS. ckcfn3.c, 4 Mar 98.
- The same thing would happen if K95 was sending a text file with EOF CTRLZ,
- so I added another test to allow for that too. ckcfn3.c, 4 Mar 98.
- Discovered that VMS C-Kermit on my local VAX with UCX doesn't know the name of
- the TCP host it's connected to. Evidently the new reverse DNS lookup doesn't
- work in UCX (or at least not in UCX 2.0). Changed the default for this in UCX.
- ckcnet.c, 4 Mar 98.
- Discovered that VMS C-Kermit under TGV Multinet doesn't have a SET TCP
- command. This is because all the tables are #ifdef SOL_SOCKET, which is
- evidently not defined in Multinet. But TCP ADDRESS, TCP REVERSE-DNS-LOOKUP,
- etc, don't depend on this, so I removed the #ifdefs. ckuus[3c].c, 4 Mar 98.
- A bug was reported in VMS C-Kermit's fullscreen file transfer display that
- happens during GET commands, but not SEND commands -- the left and right sides
- of the display are skewed by one line. I can't reproduce on VAX or Alpha.
- Parsing of SET MODEM command was pretty awful if the user tried to edit, etc,
- because of the horrible hack used to accept SET MODEM <modem-type> for
- backwards compatibility. Removed the hack and replaced with chained FDBs for
- the two keyword tables. ckuus3.c, 4 Mar 98.
- More changes to HP-UX lockfile recognition -- now we recognize any string of 1
- or more digits, or any string of one or more digits followed by a "p" followed
- by one or more digits, as a unit number for purposes of identifying a standard
- HP-UX serial device, regardless of the HP-UX version or the hardware model.
- ckutio.c, 4 Mar 98.
- Fixes to the yesterday's HP-UX lockfile work. ckutio.c, 5 Mar 98.
- Added more text and binary filename patterns for UNIX. ckcmai.c, 5 Mar 98.
- Added an error message if ttvt() call in OUTPUT command fails. Made INPUT
- messages consistent with OUTPUT. ckuus[45].c, 5 Mar 98.
- Conversion of UNIX CONNECT module to select()... Previous copy of ckucon.c is
- safe with Beta.01. I butchered my working copy to:
- . Remove all hints of forks, pipes, pids, and signals.
- . Remove all X.25 support.
- . Use select() to wait for next event.
- This cuts it down from 2400 lines to 1400 lines.
- All the existing i/o and buffering mechanisms were kept. Works fine on SunOS:
- . As a Telnet client (negotiations all ok).
- . As an Rlogin client (as root, of course).
- . On a serial port too.
- Very fast too. Ditto on HP-UX 10.20 and Solaris 2.5. And Linux, yay.
- But details need fixing:
- . Autodownload doesn't work.
- . The key-macro code was stripped out -- must put it back in.
- . Prompt-stomping & missing messages upon return from CONNECT mode.
- . #ifdefs for syntax of FD_blah, select(), etc, on many systems.
- . Test transferring files through this Kermit in the middle.
- To do:
- . Fix above details.
- . Test test test, find and fix other details.
- . Add Kerberos support for Linux.
- . Find out which UNIXes can use select() for both serial & net connections.
- . Figure out a way to make a single source support both fork() and select().
- The last one is probably too much. But we can have separate modules easily
- enough, since there are separate production rules in the makefile for regular
- and Kerberized builds; this allows CONNECT modules with different names.
- All the above: ckocon.c, 5 Mar 98.
- Added back key mapping to new ckucon.c. 7 Mar 98.
- Discovered SET KEY, when given in its multiline format, did not allow the
- definition to be edited. Fixed in ckuus3.c, 7 Mar 98.
- Fixed APC, autodownload, prompt-stomping and missing messages. Tested
- triggers, character-set translation, Telnet to NeXT, all OK. ckucon.c,
- 7 Mar 98.
- Now try to get Kerberos encryption going on Linux. Short story: it works but
- it's slow. Longer story: The normal ckucon.c strategy of using a blocking
- ttinc() followed by n = ttchk() and then ttxin(n,buf) won't work with Kerberos
- because ttxin() decrypts or does not decrypt the entire buffer that it reads
- based on the current encryption state. But the encryption state can change
- midstream based on Telnet negotations that might be in the middle of the
- buffer. Since Telnet negotations are handled only at the highest level (by
- the client of the client of the ttblah() functions), we must do
- single-character reads only, using ttinc(), if there is a possibility of
- encryption. So far so good...
- BUT... ttinc() also buffers stuff up internally, and this conflicts with the
- our new select()-driven strucure; a deadlock can occur when select() waits on
- the net, but the net has already sent everything it intends to and all this
- material is already sitting in ttinc()'s internal buffer. ttchk() to the
- rescue? No, because ttchk() looks not only at the internal buffer, but also
- at the TCP buffers.
- So... since it's all in the family (UNIX), I added a new UNIX-only function,
- ttpeek(), which tells how many bytes are waiting in ttinc()'s internal buffer
- (i.e. the MYREAD buffer). This tells us whether to tell select() to block on
- the net. The result works fine, but slowly, since we have several layers of
- function calls for each character we read: ckcgetc() -> ttinc() -> read().
- And of course, now also the Kerberos decryption function. There is no other
- way to do this given the current layering.
- I'll see if I can find any way to speed up the code, but in any case, it needs
- variables it can test to see if encryption is a possibility. For example, if
- we know at runtime this is not a kerberized connection, we don't need the
- byte loop. I used "me_auth" for now.
- File transfer works, but slooooowly, and streaming doesn't work at all because
- there is always a CRC error on the first packet. After a streaming transfer
- failure and re-CONNECT, it just hangs -- nothing on the far end, can't escape
- back either -- encryption sync is evidently lost.
- After analyzing logs, I realized: if a packet is ever resent, then we are
- encrypting a packet that was already encrypted, since ck_krb_encrypt() works
- in place. So I made ttol() copy the clear-text packet to its own private
- buffer, then encrypt the buffer, then write it. This cures the problems in
- one direction (encrypting local Kermit is receiving -- autodownload works ok),
- but not in the other -- it hangs for a while at the beginning, and then again
- (forever) at the end of the transfer.
- Made it safe to use memcpy() by defining a memcpy() macro to use ckmemcpy()
- if USE_MEMCPY not defined, and then defining USE_MEMCPY for systems where I
- know it's available (K95 + most modern UNIXes). ckcdeb.h, 8 Mar 98.
- Added a "SECURE" indication to SHOW COMM, the CONNECT message, and the Network
- Type field of the fullscreen file-transfer display. ckucon.c, ckuusx.c,
- 8 Mar 98.
- Ran encrypted transfers again via K5 localhost connection, client/server:
- . SEND worked fine, no errors. But later another SEND took a long time
- to start and hung at the end.
- . GET worked fine, no errors, but was excrutiatingly slow (83 cps).
- Both sides reported zero errors. But after "fin" and connecting back,
- I saw a fragment of garbage on the screen, indicating some kind of
- encryption screwup.
- . Streaming transfers still fail immediately.
- Speculation: mode-changing by ttpkt(), ttvt(), ttres(), etc, result in data
- loss and therefore in loss of encryption sync. No, they don't actually do
- anything except turn Nagle on and off.
- Added Nagle restoration code to ttres(). ckutio.c, 8 Mar 98. (This made
- no difference.)
- Looking at the (huge) debug logs, now I see that there were lots of NAKs
- after all, but they did not show up in the file-transfer display or statistics
- (why?) Sometimes the delay between packets was as much as 70 seconds.
- OK, now I see the problem. ttinl() reads the first data packet. It is
- decrypted correctly. ttinl() recognizes the beginning, the length field, and
- the end. Then it gets to its CR-removal stage and says: "ttinl removed=13"
- (good), "ttinl removed=0" (good), "ttinl removed=1" <-- uh oh, the SOH of the
- next packet. And then proceeds to discard the entire next packet. Problem:
- the lookahead test for the packet-start character was performed by peeking
- into the encrypted buffer. Solution: decrypt each character first, then test
- it. But oops, now we've already read it. So resurrect the old myunrd()
- function to push it back. But oops, that doesn't work either, because when
- we go to read it again, we decrypt it again. So instead we add a special
- variable for saving and restoring a pushed-back ttinl() character, to know
- not to decrypt it again when fetching it. ttinl(), ckutio.c, 8 Mar 98.
- So now we have my favorite situation: file transfers work perfectly in both
- directions when the debug log is on, and fail miserably when it's off. So
- let's turn on streaming, which always fails, to catch an error in the log.
- Nope, streaming works now too. But when debugging is off sending to a server
- still takes a long time to start and then hangs forever after sending the B
- packet.
- So I checked all calls to ck_krb_encrypt() in ckutio.c. It is only called in
- two places, ttol() and ttoc(). In neither place can it possibly encrypt
- something that was already encrypted. So the culprit must be ck_krb_decrypt().
- But all calls to that look right too.
- Since the problems occur most frequently at the beginning or end of a file
- transfer, ttflui() is the next suspect. And dummying out ttflui() does,
- indeed, make the problems completely disappear. OK, but why? Aha, an
- off-by-one error in the clever reference to the mybuf address (the buffer
- index is pre-, not post-incremented). Fixed in ttflux(), ckutio.c, 8 Mar 98.
- So now it all works. Some tests:
- . Client/server works fine -- send/get, etc.
- . Streaming works fine.
- . Ditto for both when transferring a gzip'd file no prefixing, provided
- we SET FLOW NONE on the far end (!) (I need to address this in any case...)
- . Autodownload, APC work fine.
- . Scripts work, including the CLEAR command.
- . Encrypted transfers go at about 55Kcps on localhost connection,
- versus unencrypted transfers at about 106Kcps.
- . CONNECT mode is noticeably slower on long scrolling displays:
- ripple test is 24 seconds encrypted vs about 9 sec unencrypted.
- This is due to the combination of decryption overhead and character-
- at-a-time i/o.
- However, attempts to make a new connection occasionally fail -- authentication
- works, CONNECT works, etc, but encryption is evidently starting out wrong
- because we just get a blank screen and frozen keyboard -- can't even escape
- back. Speculation: the encryption state is carried across sessions? So if
- something winds up not being encrypted or decrypted at the end of session <n>,
- then session <n>+1 will never get off the ground. I tried calling ttflui()
- from ttclos() -- and not sending Telnet DO LOGOUT -- if it's an encrypted
- connection. This seems to alleviate the problem in most cases; now I can
- reproduce only it by starting a server on the remote end and sending it a BYE.
- All seems normal -- the client gets the ACK to the BYE, the server side logs
- out, but the next encrypted connection attempt always fails. I tried putting
- an msleep(500) in the server code after sending the ACK() to the BYE and
- before calling ttres() or zkself(), but it didn't change anything. There
- probably needs to be some kind of Kerberos call when C-Kermit exits or when
- it logs itself out, to reset Kerberos to some known state.
- Hmmm -- here's another way to make it always happen: use "set host" and
- "connect" instead of "telnet". The debug log shows that everything is working
- correctly -- all the Telnet negotiations are correct -- authentication,
- encryption, etc. Then the host sends us its banner and greeting and we sit in
- myfillbuf() stuck in a read() waiting for the prompt, but it never comes...
- Ha, got it. Yesterday I decided to use "me_auth" as the variable to decide
- whether encryption was possible. If me_auth was set, then the CONNECT module
- did all reads by calling ttinc(), otherwise it was free to call ttxin(). But
- this was not a good choice -- the log shows we called ttxin() before me_auth
- was set, but ttxin() read too much. So backing off that choice (a) makes
- everything work, but (b) means that there is no way to use the faster code on
- non-Kerberized connections. I also backed off the changes to netclos();
- everything works fine now without them. ckcget(), ckucon.c, 8 Mar 98.
- Removed some verbose debugging statements from file-transfer buffer management
- code, since this code has been stable for six years. ckcfn3.c, 8 Mar 98.
- Improved F000 debug format to allow omission of s2. ckuusx.c, 8 Mar 98.
- Renamed the new ckucon.c to ckucns.c (UNIX CONNECT with select()) and changed
- the makefile to reference it only for Kerberos builds. Restored the original
- ckucon.c for non-Kerberos builds. It would have been better to combine them,
- but the structures are radically different. So this task is tabled until and
- unless it becomes an issue with real users. ckucon.c, ckucns.c, makefile,
- 8 Mar 98.
- Noticed the maximum number of macros was only 256. Increased this to 4K for
- BIGBUFOK builds. ckuusr.h, 8 Mar 98.
- A user reported that "remote who > file" did not work. The actual problem was
- that redirection was never implemented for short-form REMOTE command replies.
- Note: this was a bit tricky because a line terminator needed to be added to
- the end -- it's too hard to explain, but it required adding a new character
- output function zputfil(), that does exactly what putfil() does, but that has
- a different name. To see why, look for references to "putfil" in decode().
- Fixed in ckcpro.w, ckcker.h, ckcfns.c, 10 Mar 98.
- Merged Jeff's changes for "set net type { command, dll, ssh }" - K95 only for
- now. Note: I had to make a change to krbtel.c to indicate that Kerberos 4 was
- *not* available in UNIX. 11 Mar 98.
- Fixed up status messages in netopen(). ckcnet.c, 12 Mar 98.
- Added code to allow the Kerberized version of C-Kermit to use block i/o on a
- non-authenticated connection, so that the 99% of people who are not using
- authentication or encryption won't be penalized because it is supported in the
- binary. ckutio.c, ckucns.c, 12 Mar 98.
- Started to try to separate input and output communications file descriptors.
- Eventually I gave up -- I don't think there's a prayer of doing this, at least
- not in UNIX, when you look at all the manipulations we do on them -- hundreds
- and hundreds of ioctl's (fcntl's, tcsattr's, etc) to change modes, duplicate
- them, close/open them, etc etc. Doing all this to *two* file descriptors in
- lockstep without having to worry about which operations are legal on input vs
- output descriptors in which releases of which OS's, not to mention opening up
- timing windows or tickling peculariarities in underlying drivers or kernels,
- is too much to expect. 12 Mar 98.
- Added support for net i/o from lower fork thru pipes within #ifdef NETCMD:
- . ttopen() starts the command & opens the pipes, sets ttpipe flag.
- . ttclos() kills fork if active, closes pipes if open, unsets flag.
- . tthang() calls ttclos() if flag set.
- . ttvt/ttpkt/ttres: does nothing if flag is set.
- . ttsetflow(), tthflow() - ditto
- . ttsspd(), ttgspd() - ditto.
- . ttsnd[l]b() -- send a NUL if flag set.
- . ttgmdm() -- returns -1 if flag set.
- . myfillbuf(), ttxin(), ttinl(), ttinc() -- read from pipe if flag set.
- . ttol(), ttoc() -- write to pipe if flag set.
- . ttchk() - checks pipe if flag set.
- . ttlock() & friends are never called.
- . ttpeek, ttpushback, ttflux... - unaffected.
- ckutio.c, ckucon.c, ckucns.c, ckuus5.c, 13 Mar 98.
- Builds and works OK with NETCMD not defined.
- Compiles OK (on SunOS) with NETCMD defined.
- Works OK on normal connections.
- Works OK on pipe connections:
- . Makes the connection.
- . CONNECT mode works right, no buffering delays, and it's fast.
- . File transfer works too, but rather slowly in the sending direction.
- . ttchk() always returns 0 on SunOS -- evidently FIONREAD doesn't work
- on pipes. Slows down sliding-window sends. I'll need to do something
- about this later.
- Disabled if NOPUSH defined or nopush set. ckcdeb.h, ckuus3.c, 13 Mar 98.
- Added a brief preliminary section (2.7) on this to ckermit2.upd, but it needs
- a lot of fleshing out with examples of ssh, ssl, etc.
- Still need to make the command structure nicer. SET NETWORK TYPE COMMAND
- followed by SET HOST <command> is OK, but afterwards the network type is still
- set to COMMAND, and so subsequent SET HOST commands probably won't work as
- most people expect them to. So I think it might be better to collapse this
- into a PIPE command that combines the two, but does not affect the global
- network type. PIPE would be the general case, SSH could be a specific case
- (with accompanying SET SSH command for configuration, etc). None of this
- is done yet.
- Also, note that this feature has nothing to do with networks, yet it's only
- available #ifdef NETCONN. So this should be changed too. Next week...
- Got tired of wraparound during "make sunos.." so moved the common symbol
- definitions from the makefile to ckcdeb.h. 13 Mar 98.
- Got rid of the duplicate SET NETWORK keyword tables so now we only need to
- add new network-type keywords in one place rather than two. ckuus[r3].c,
- 13 Mar 98.
- Jeff discovered that binary-mode transfers with space parity didn't work any
- more. Fixed by making receipt of a request to do 8th bit prefixing when
- parity is none *and* no parity has been detected cause the parity to be
- switched to space. ckcfn[s2].c, 16 Mar 98.
- Various changes for BeBox, SRP, etc, and other updates from Jeff, including
- a fix for "wait 0 <signal>" not bothering to test for signal. Many modules,
- 18 Mar 98.
- Discovered that SET HOST did not parse switches for certain network types,
- e.g. COMMAND. Rearranged setlin() again so switches would be always be parsed
- for SET HOST and SET PORT (LINE), removing about 200 lines of code in the
- process. Needs lots of testing. ckuus7.c, 18 Mar 98.
- Added SET HOST /COMMAND. This takes the place of SET NETWORK TYPE COMMAND
- followed by SET HOST <name-of-command>, but in this case the network type is
- not sticky (normal behavior for switches). Thus, for example, you can:
- set host /command rlogin hosta
- and then later "set host hostb", and it will work, using the previous global
- network type (usually TCP/IP). ckuusr.h, ckuus7.c, 18 Mar 98.
- Added the PIPE command, equivalent to SET HOST /COMMAND /CONNECT. ckuusr.h,
- ckuusr.c, 18 Mar 98.
- Changed cmfdb() to return -9 and print a message if it was about to return -6,
- which should be internal to cmfdb(). ckucmd.c, 19 Mar 98.
- Changed cmkey() to return -3 as it should if the user types CR and no other
- characters were given and there was no default. ckucmd.c, 19 Mar 98.
- Fix from Jeff to SET TERM KEY <type> <CR>. ckuus7.c, 19 Mar 98.
- Added REMOTE SET FILE INCOMPLETE. Previously this was available only as
- REMOTE SET INCOMPLETE, now demoted to invisibility. ckuus[37].c, 19 Mar 98.
- Added -DNOCOTFMC to Linux makefile entries at the suggestion of Paul Kimoto.
- Details in the Linux section of ckuker.bwr. makefile, 19 Mar 98.
- Added NOCOTFMC display to SHOW FEATURES. ckuus5.c, 19 Mar 98.
- Big revisions/updates to ckuker.bwr for Linux & elsewhere. 19 Mar 98.
- Fixes from Jeff to parsing of Telnet authentication/etc negotiations.
- ckcnet.c, 19 Mar 98.
- In UNIX, "send /recursive foo" (foo not wild) did not work; it only sent the
- foo file from the current directory, but then did not recurse. Furthermore,
- if no foo file was in the current directory, nothing was transferred, even if
- one or more foo's were in subdirectories, Fixed in traverse(), ckufio.c,
- 19 Mar 98. (Needs more testing, though...)
- Minor changes from Jeff to ckcnet.c. 20 Mar 98.
- Added missing mention of /RECURSIVE in HELP GET. ckuus2.c, 21 Mar 98.
- Discovered that not defining USE_MEMCPY on platforms where we pick up
- prototypes for memcpy() from the header files (like string.h on the NeXT)
- causes ANSI compilations to bomb. Added USE_MEMCPY for NeXT, OSF/1, VMS,
- AOS/VS. ckcdeb.h, 21-22 Mar 98.
- Moved the -Dblah CFLAGS that were common to all the Solaris makefile entries
- to ckcdeb.h, similar to what was done for SunOS a few days ago. ckcdeb.h,
- 21 Mar 98.
- Added new "xermit" target to UNIX makefile. It's just like "wermit", but
- uses ckucns (select() version of CONNECT module) rather than ckucon (fork()
- version). Changed sunos41 entry to use xermit target, tested it on serial,
- TCP/IP, and pipe connections, works fine. Tried it in several other places:
- Entry Telnet Serial Pipe
- sunos41 OK OK OK
- hpux100 OK OK OK
- linux OK ?? OK
- solaris25 OK ?? OK (but rlogin prints scary messages)
- Left xermit in for SunOS, left the others as is. makefile, 21 Mar 98.
- Fixed a problem in ttinc(), timed MYREAD case, when it gets a NUL character
- (as it would during rlogin initial connection) -- test for error was off by 1.
- Diagnosed by Jeff. 21 Mar 98.
- Discovered that v(errstring) evaluation in nvlook() was returning a pointer
- to an automatic array, oops. Made it static. ckuus4.c, 22 Mar 98.
- Added v(osrelease). ckuusr.h, ckuus4.c, 22 Mar 98.
- Changed v(osname) to return the same as v(platform) if CK_UTSNAME not
- defined. ckuus4.c, 22 Mar 98.
- Changed sinix542 makefile target to not optimize ckcpro.c, since this was
- taking several hours before I interrupted it... makefile, 22 Mar 98.
- --- Beta.02 ---
- successful "xermit" tests:
- sunos 4.1
- unixware 1.1.2
- hpux 10.20
- Minor changes to prototypes, etc. ckuus[7x].c, ckcnet.h, ckcdeb.h,
- 24 Mar 98.
- Added SET HOST /PASSWORD:. ckuusr.h, ckuus[r37x].c, 24 Mar 98.
- Authentication material from Jeff. ckuus[347].c, ckutio.c, ckcnet.c, 25 Mar 98.
- Added better ?-help message for SET TELNET ENCRYPTION. ckuus3.c, 25 Mar 98.
- Folded lines > 79 and removed trailing blanks from ckuath.c. 25 Mar 98.
- Changed definitions of CX_xxx encryption types to use the ENCTYPE_xxx_xxx
- ones if they are defined. However, there is no ENCTYPE_blah for NONE, and we
- can't use negative numbers for keyword values, so I chose 999. ckcnet.h,
- 25 Mar 98.
- Removed various unportable constructions from ck_crp.c. 25 Mar 98.
- Changed SET TELNET ENCRYPTION TYPE to get its keyword table dynamically.
- ckuus3.c, 25 Mar 98.
- ....
- Added checking of LINES and COLUMNS to ttgwsiz() if ioctl() fails. ckutio.c,
- 25 Mar 98.
- Added dgux54411i entry to makefile. 3 Apr 98.
- Merged Jeff's changes, mostly a&e, plus: some updated help text, crypto
- material in SHOW TELNET; moved "Server done" message until after all files are
- closed to prevent overwriting of messages. Also, fix one more "Transfer OK"
- test in clsif() that could result in spurious OK result when not OK. Many
- modules, 3 Apr 98.
- Removed the hidden TEST command so people can define macros called TEST as
- shown in various docs. ckuusr.c, 3 Apr 98.
- Changed SET TELNET ENVIRONMENT DISP to DISPLAY (spelled out) to agree with
- docs. ckuus3.c, 3 Apr 98.
- SHOW NET display was too long. Gave it the askmore() treatment. This was a
- big job, since it calls a lot of subfunctions. This askmore() business really
- needs to be reworked. We need a *portable* printf() replacement that takes
- screen dimenensions into account. Either that, or one that pipes its output
- into an external program (like "more") (but that would not be portable) (but
- UNIX users would still like it -- plus then you could redirect output of any
- command to a file, etc). ckuus[45].c, 4 Apr 98.
- Changed ttopen() to not print "DNS lookup..." if it is not doing a DNS lookup.
- ckcnet.c, 4 Apr 98. But it almost always does, so this makes little
- difference.
- Added TERMINAL as a synonym for SET TERMINAL TYPE. Familiar to UNIX users,
- etc. ckuusr.[ch], ckuus7.c, 4 Apr 98.
- Added STATUS as a synonym for SHOW STATUS. ckuusr.[ch], 4 Apr 98.
- Added a second "personality" to the C-Kermit command line. If C-Kermit is
- stored as telnet (or telnet.exe), it parses a Telnet command line:
- telnet [ host [ port ] ]
- I didn't bother with rlogin. This works with the C-Kermit networks directory.
- ckcmai.c, ckuus[4y].c, ckermit.ini, 4 Apr 98.
- Added v(name), the name with which the program was invoked. Used this to
- bypass non-Telnet material in the initialization file for faster startup
- (since we don't have options on the Telnet command line, e.g. to bypass the
- initialization file). ckuusr.h, ckuus4.c, ckermit.ini, 4 Apr 98.
- Noticed that "telnet watsun 13" (i.e. to the "daytime" socket) has started to
- misbehave again. First, ttopen() is called two or three times for some
- reason. Second, ttvt() fails because the other side has already closed itself
- before we can get around to reading the daytime string. I thought I fixed
- this a long time ago. It needed more fixing. In ckucon.c, the section that
- handles ttvt() failures by hanging, closing, and reopening the connection
- makes no sense at all for network connections, so now it is used only if
- (!network). Second, a loop-exit test was missing in the new CONNECT module.
- ckucon.c, ckucns.c, 4 Apr 98. NOTE: K95 has the same problem, needs checking.
- Added ON and OFF as invisible synonyms for DISABLED and ENABLED in nabltab[],
- since the book has some examples like this that wouldn't work otherwise.
- ckuus7.c, 4 Apr 98.
- Added command-line switch -0, meaning "be 100% transparent in CONNECT mode".
- This is equivalant to a bunch of other commands, like eightbit, set flow none,
- set term escape disabled, set term char transparent, set term autodownload
- off, set term apc off, etc. It probably could use some work. Setting the
- flow control to none might be a bit extreme, but currently there is no way to
- say "don't allow software flow control, but do allow any kind of hardware
- flow control." ckuusy.c, 4 Apr 98. Note: I did not add an interactive
- command to do the same thing since that would beg the question of how to undo
- it, which would not necessarily be easy.
- Noticed that a quoted hyphen or opening brace at the end of a line was still
- taken as a continuation character, which shouldn't happen; - should mean
- to take the dash literally. Fixed in getnct() and in gtword(). Ran all the
- demo & hostmode scripts to make sure this didn't break anything. ckcuus5.c,
- ckucmd.c, 4 Apr 98.
- Noticed that "echo foo - ; comment", when given at the prompt, did not treat
- the "-" as a continuation character. Fixed in gtword(), ckucmd.c, 4 Apr 98.
- Got rid of SET HOST /PASSWORD: since it can't work. ckuus7.c, 4 Apr 98.
- PIPE connections worked only once; subsequent ones would not work. Nor
- would (say) CONNECT to a closed pipe connection. Fixed in ttclos(), ckutio.c,
- 4 Apr 98 (Don't set ttpipe to 0 -- leave it alone).
- Added utsname info for VMS, obtained by assorted $GETSYI() calls. Also added
- a new variable, v(model), which returns the CPU model. Works only for VMS,
- returns null string elsewhere. Note: K95 will need to define a unm_mod[]
- buffer for this, and either fill it in or set it to the null string.
- ckuusr.h, ckuus4.c, ck[uv]tio.c, 5 Apr 98.
- Added utsname info to SHOW FEATURES. ckuus5.c, 5 Apr 98.
- Added Stanford copyright to main copyright notice shown by VERSION command
- if SRP included. ckcmai.c, 5 Apr 98.
- In Beta.02, routine tn_sb() broke the HP-UX 7.0 optimizer. Changed all HP-UX
- 7.0 entries to not optimize ckcnet.c. makefile, 5 Apr 98.
- I had a report that v(filename) did not work when sending, but I don't see
- a problem, in either remote or local mode.
- C-Kermit or K95 server failed to send any files when sent "GET *" -- oops. It
- looks like something I broke when adding /CALIBRATE back in October; I wonder
- why nobody noticed until Jeff did a couple days ago. Good thing we actually
- use this software ourselves... Fixed in fnlist(), ckcfns.c, 5 Apr 98.
- If C-Kermit was sending a file and the transfer was interrupted with Ctrl-C,
- then a subsequent SEND or RESEND would fail to update the Estimated Time Left
- and Transfer Rate fields of the fullscreen file transfer display because the
- time variables were not reset by the Ctrl-C handler. Fixed in ftreset(),
- ckuusx.c, 5 Apr 98.
- Changed -I switch to also "set flow none" (except on VMS), since not doing so
- makes for Xoff deadlocks. This is a bit risky, but I think it's less risky
- than not doing it. ckuusy.c, 5 Apr 98.
- Added 877 and 866 to list of toll-free area codes for the NANP. 877 goes live
- today; 866 is next, probably within a year or two. ckuus3.c, 5 Apr 98.
- If the connection is lost during file transfer, the file-transfer display
- message "FAILED: Connection lost" is properly displayed, but then immediately
- overwritten by "Transfer interrupted", a less specific reason. This was
- because we never sent an Error packet, since there was no longer a connection
- to send it on. Fixed by pretending to send an E packet by setting epktsent=1
- in spack() when it prints the "FAILED: Connection lost" message, to prevent
- clsif() from printing any subsequent messages, and copying the "Connection
- lost" message to the file-transfer error message buffer so it could be
- accessed afterwards by v(xfermsg). ckcfn[23].c, 5 Apr 98.
- Remove OLD_VMS #includes for GFTIMER; they didn't work, and we're not using
- GFTIMER in OLD_VMS anyway. From Lucas Hart. ckvtio.c, 5 Apr 98.
- Various last-minute adjustments to copyright notices, etc. ckcmai.c,
- ckuus5.c, 6 Apr 98.
- Addition of SRP-related makefile entries for Linux. makefile, 6 Apr 98.
- Add ".hex" and ".hqx" as text file types. ckcmai.c, 6 Apr 98.
- ---1.1.16--- (8 Apr 98)
- Add -DKANJI for Linux ifndef NOCSETS. ckcdeb.h, 10 Apr 98.
- Fixed "Closing..." message (and call to ttclos()) in doexit() to make the
- ttyfd != -1 test only #ifdef OS2 (not OS2ORUNIX). Otherwise this path is
- always taken in UNIX. ckuusx.c, 10 Apr 98.
- Suppose C-Kermit is sitting at its prompt and receives the command "kermit -x".
- This almost certainly is the "autoserver" string from K95, or another copy of
- C-Kermit. The user has given a GET or REMOTE command without first putting
- C-Kermit in server mode. So far so good; the "kermit -x" command does the
- trick. But then after the transaction is finished, C-Kermit stays in server
- mode, so when the user CONNECTs back, s/he gets "a blue screen". Solution:
- any protocol actions resulting from "kermit" commands at the prompt set the
- justone flag, which tells the protocol to exit after just one transaction.
- This way they get the command prompt back, as expected. ckuusr.c, 10 Apr 98.
- Put doftp() and doping() in #ifndef NOPUSH..#endif. ckuusr.c, 10 Apr 98.
- Allow for longer debug messages for tracking authentication problems.
- ckuusx.c, 11 Apr 98.
- Updated sv68r3v6 and sv88r40 makefile entries from Gerry Belanger at
- Cognitronics, since GFTIMER broke both of them, and REDIRECT broke the
- former. makefile, 11 Apr 98.
- Merged in Jeff's recent changes, mainly (1) addition of XMODEM-CRC as a
- protocol type, and (2) make sure INPUT sets v(instatus) correctly upon
- failure due to lost connection. Also, remove auto-upload strings for XMODEM
- and YMODEM because their echoes cause confusion about the checksum type, etc,
- e.g. if the filename contains an uppercase C. Many modules, 17 Apr 98.
- Merged IBM AIX X.25 support from Stephen Riehm, pc-plus, in Germany. Most
- modules. 18 Apr 98. This still needs to be tested to ensure it didn't break
- anything, especially Sun X.25, and to document it.
- Added support for ttylock()/ttylocked()/ttyunlock() via #ifdef USETTYLOCK,
- which is defined in ckcdeb.h for IBM AIX 3.1 and later. This is supposed to
- prevent confusion about the name, location, contents, and format of the UUCP
- lockfile. ckcdeb.h, ckutio.c, ckuus5.c, 19 Apr 98.
- Built on an AIX 4.1 system; it compiles and links without complaint, but I
- can't test it because that system has no serial devices. 20 Apr 98.
- SET HOST commands weren't making it into the command recall buffer. Fixed
- (I think -- at least I can't make it happen any more) in setlin(), ckuus7.c,
- 20 Apr 98.
- Changed ttopen() to always call perror() to print error message when open()
- fails. Also added perror() calls to ttunlck() to give informative messages
- upon failure to delete lockfiles. ckutio.c, 21 Apr 98.
- "help ?" incorrectly said "Or the name of a macro..." at the end of the
- keyword list. Fixed in ckucmd.c, 21 Apr 98.
- Changed ttrpid() to not depend on hardwired definition for format of lockfile,
- but rather to check its size and then treat it as binary if 4 bytes or less,
- and as a string if longer than 4 bytes. Tested successfully with string pids.
- ckutio.c, 21 Apr 98.
- Changed ttunlck() to not try to remove the lockfile if the pid it contains is
- not ours, e.g. in case some other process has seized control of the device.
- ckutio.c, 21 Apr 98.
- Added a couple checks against dereferencing NULL data pointer, which can
- evidently happen if C-Kermit is started with the -J command-line option and
- then Ctrl-C'd at a certain critical point. ckcfns.c, 21 Apr 98.
- Added code to make INPUT 0 xxx behave as advertised: it should check the
- only the characters that have arrived but have not yet been read for the
- search string, and succeed or fail immediately depending on whether a match
- was found. ckuus4.c, 21 Apr 98.
- Added 877 and 866 to default list of toll-free area codes for country code 1
- (again -- I did this before, but in the wrong place). ckudia.c, 22 Apr 98.
- Discovered that an optimization I added to ckucns.c to avoid unnecessary calls
- to chkaes() was bad -- symptom: as soon as the first escape sequence was
- received, C-Kermit would send an ESC to the terminal before each character
- from then on. Removed the optimizations, went back to calling chkaes() for
- every incoming character. ckucns.c, 23 Apr 98.
- Got rid of some confusing and dangerous ifdefs in VMS sysinit(); now we get
- the hardware & OS version consistently on VAX and Alpha. ckvtio.c, 23 Apr 98.
- Fixed various bad declarations. ckuus5.c, ...
- Added OSF/1 and SCO 3.2v5.04 to the systems where CK_UTSNAME can be safely
- defined. ckcdeb.h, 23 Apr 98. (Also tried NeXT, but it's not allowed.)
- ---Beta.03---
- Removed an unreachable return() statement from the end of tn_doop().
- Jeff, ckcnet.c,1 May 98.
- Fixed fsplit() return value -- it was counting too many words.
- Jeff, ckuus4.c, 1 May 98.
- Fixed broken SET TERMINAL ESCAPE option synonyms. Jeff, ckuus7.c, 1 May 98.
- Added -DNOGFTIMER to hpux90mot (HP-UX 9.0 on Motorola 680x0), since this
- evidently doesn't work. If somebody wants to try fixing it, be my guest.
- makefile, 2 May 98.
- Changed Elapsed Time display in STATISTICS command to show hh:mm:ss as well
- as the total number of seconds. ckuus4.c, 2 May 98.
- Added v(model) for HP-UX, works by running the HP-UX "model" command and
- capturing its output into a cache (there is no API for this); subsequent
- references read from the cache. ckuus4.c, 2 May 98.
- Moved the NEEDSELECTDEFS section from ckcnet.h to ckcdeb.h to allow non-TCP
- builds to get these definitions, e.g. when needed for the new select()-based
- CONNECT module. This was necessary at least for HP-UX 6.5. Added hpux65x
- target for HP-UX 6.5 that specifies the xermit target and includes
- -DNEEDSELECTDEFS. ckcnet.h, ckcdeb.h, makefile, 2 May 98.
- Peter E reported that Beta.03 no longer removed its lockfiles in HP-UX. Since
- my HP workstation drowned in the recent flood, I could not check this myself;
- it doesn't happen on non-HP platforms, but they use different code. I went
- through the code, consolidated the HP and non-HP parts as much as possible,
- added debugging statements, corrected some errors, and satisfied myself that
- it works fine on non-HP platforms:
- . If the device is not in use, the appropriate lockfile is created and
- then destroyed when it is closed.
- . If the device is in use by an active process (Kermit or cu), Kermit refuses
- to open it, and displays the pid of the owning process.
- . If there is a lockfile for the device, but it contains a pid that does
- not correspond to an active process, C-Kermit removes the stale lockfile
- (printing a message) and opens the device.
- Later I found an HP-UX 10.20 workstation that had an unprotected serial port
- and lockfile directory -- all the above tests worked fine, except that cu was
- not installed so I could only verify that Kermit interlocked with itself, and
- that 4-byte integer pids were written and read OK. ckutio.c, 2 May 98.
- Made "x" a legal abbreviation for "xmodem" in "set protocol" (because of
- "xmodem-crc". ckuus3.c, 2 May 98.
- Discovered that the code to check that RECEIVE was given an as-name for
- XMODEM protocol was not in the right place. Moved it. ckuus6.c, 2 May 98.
- The following sequence did not work with XMODEM:
- define %a foo
- set protocol xmodem
- receive %a
- Fixed in doxget(), ckuus6.c, 2 May 98.
- I broke SunLink X.25 compilation in Beta.03. Fixed in ckuus4.c, 2 May 98.
- PIPE command didn't allow its argument to be braced. Fixed in setlin(),
- ckuus7.c, 3 May 98.
- Plugged a couple of out-of-bounds array references noticed by DEC C 5.7 and
- reported by John Santos. ckv[tf]io.c, 3 May 98.
- Added #ifdefs to [rg]ftimer() for System V/88 on Motorola 88000 from Gerry
- Belanger at Cognitronics. ckutio.c, 3 May 98.
- ---Beta.04---
- Ric Anderson reported a place where ttchkpid() could exit without returning
- a value. Fixed in ckutio.c, 4 May 98.
- Finally discovered the cause of persistent reports that uucp lockfiles were
- not being removed: a test of ttchk()'s return value in doclean() would fail if
- the line had never been used, and so ttclos() would not be called, which was
- just plain wrong: "set line /dev/xxx, exit" would leave the lockfile behind.
- (Thanks to Peter Eichhorn for narrowing down how to reproduce it.)
- ckuusx.c, 4 May 98.
- In tracking down the previous problem, I discovered the following: in HP-UX,
- if the "set line" device name starts with "cu", we also create a lockfile for
- the corresponding "ttyd" device, even if that device does not exist. This is
- normally OK, since both lockiles are removed by ttunlck(). However, when a
- stale "cu"... lockfile is found (and removed), C-Kermit did not remove the
- corresponding "ttyd"... lockfile if the ttyd device did not exist. So I
- changed ttlock() to create the ttyd lockfile only if the ttyd device exists.
- ckutio.c, 4 May 98.
- Fixed a reference to an uninitialized variable in ttopen(), detected by DECC
- 5.8. ckutio.c, 4 May 98.
- Filled in v(model) for Digital UNIX on advice from DEC, and added a symbol,
- OSF50, and a designer banner for Digital UNIX 5.0, which will be released
- soon. ckcdeb.h, ckuver.h, ckuus4.c, makefile, 4 May 98.
- Fixed v(model) to return value of unm_mch[] in preference to nothing at all.
- ckuus4.c, 4 May 98.
- Removed -DNOGFTIMER from hpux90mot entry, since reportedly Beta.04 works fine
- there. makefile, 4 May 98.
- Omitted listing of unm_mod at beginning of debug log if not filled in, which
- it won't be except in VMS or if v(model) has previously been referenced.
- ckuus4.c, 4 May 98.
- Updated AOS/VS text & binary filetype list. ckcmai.c, 4 May 98.
- Put an unguarded reference to "nopush" within #ifdef NOPUSH..#endif.
- setlin(), ckuus7.c, 4 May 98.
- Moved zxcmd() and zclosf() inside of #ifdef NOPUSH..#endif
- syscmd() was not properly #ifdef'd for NOPUSH. Fixed in ckcfns.c, 4 May 98.
- Ditto for zshcmd(). ckufio.c, 4 May 98.
- References to doftp() and doping() were not ifdef'd for NOPUSH. Fixed in
- ckuusr.c, 4 May 98.
- Added a new compile-time option, NOTIMESTAMP, to disable all code related
- to file timestamps, and employed it accordingly in ckufio.c. 4 May 98.
- Added a banner for the AS/400 to ckuver.h. You never know... 4 May 98.
- Fix for hpux90mot makefile entry from Peter E. makefile, 5 May 98.
- Commented out "Alias => xxx" display. ttopen(), ckcnet.c, 5 May 98.
- Various #ifdef fiddling for AT&T 3Bx's. cku[tf]io.c, ckcdeb.h, 5 May 98.
- Final corrected makefile entries for AT&T 7300 that work, with help from
- Peter Mauzey at Bell Labs. makefile, 6 May 98.
- Added banners for Ultrix 4.3, 4.4, 4.5. ckuver.h, 6 May 98.
- Made new SET MODEM TYPE keywords for USR and Megahertz that more obviously
- correspond with the actual models, via synonyms, invisible abbreviations, etc,
- without invalidating previous names. ckudia.c, 7 May 98.
- Made SET / SHOW { STREAMING, RELIABLE, CLEARCHANNEL } visible keywords.
- ckuusr.c, 7 May 98.
- Improved HELP SET [ TERMINAL ] ESCAPE messages. ckuus2.c, 7 May 98.
- VMS fixes from Lucas Hart, 7 May 98:
- . More allowances for <xxx> directory-name format: ckcfn3.c.
- . Improvements in hardware-name getting: ckvtio.c.
- . Enabling reverse DNS lookup for UCX (but not old UCX): ckcnet.c.
- . Improved isdir(), relative directories for labeled transfers,
- Fortran CC handling fixed to handle 0-length records and overprinting,
- etc: ckvfio.c.
- Made MKDIR print a message (but still succeed) if it is told to create a
- directory that already exists. ckuusr.c, 7 May 98.
- Added cross-references to SHOW PROTOCOL. ckuus4.c, 7 May 98.
- Added missing switches to HELP SEND text, plus cross-refs, and fixed text
- for SEND /PATHNAMES:xxx. ckuus2.c, 7 May 98.
- UNIX nzltor() was correctly stripping ./ or ../ from the beginning of a local
- filename before sending it to the remote, but only the first occurrence.
- Fixed it to strip all occurrences from the beginning of the pathname.
- ckufio.c, 7 May 98.
- ---Beta.05---
- Added some minor source-code corrections to ckucon.c and ckcnet.c affecting
- only IBM AIXLink/X.25 builds, from Stephen Riehm. 15 May 98.
- From Jeff:
- . Don't always set success for REMOTE commands that get a short form reply.
- . Increase atom buffer length.
- . Minor correction to UNIX ttol() when encrypting.
- . Prevent spurious parse errors from cmnum() within cmfdb().
- . Added zgetfs() to get a file's size (regardless of accessibility).
- . Make v(return) show END <n> value.
- . Fix fsplit() not to skip final word.
- . Fix mixup with RESEND/REGET versus filename patterns.
- . Corrections to (REMOTE) DIRECTORY command using zgetfs().
- . Fixes to LOOKUP, DIAL, and PDIAL.
- . Various networking fixes regarding blocking/select/etc vs streaming.
- . New SHOW TERM command for K95.
- Added fcvtdate(date) to convert free-format date and/or time to standard
- format. This required pulling conversion code out of cmdate() into a separate
- routine. ckuusr.h, ckuus4.c, ckucmd.c, 11 Jun 98.
- Added zjdate() for UNIX, returns julian date yyyyddd. ckufio.c, 11 Jun 98.
- Needs to be added for K95, VMS, AOS/VS, ... In UNIX we get it simply by
- calling localtime(). ZJDATE is defined in ckcdeb.h for each platform that
- has this feature (so far just UNIX). (Note: we could also do this in a system
- independent way, algorithmically -- maybe later.)
- Added fjdate(date), prints Julian date from given free-format date, or for
- today if no arg. Within #ifdef ZJDATE. ckuusr.h, ckuus4.c, ckucmd.c,
- 11 Jun 98.
- Added ckdate() to return the current date/time in standard yyyymmdd_hh:mm:ss
- format. This now supplies the defaults for the new date functions (when
- called with no arg) and for the DATE command (next item). ckuus4.c, 12 Jun 98.
- Changed DATE command to take an optional free-format date/time argument, and
- then convert it to standard format and print it. This provides a quick
- pre-check on date formats. ckuusr.c, ckucmd.c, 12 Jun 98.
- Added help text for the new functions and DATE command. ckuus2.c, 12 Jun 98.
- Removed extraneous n from end of all hmsg() calls, which were causing
- unnecessary double blank lines. ckuus2.c, 12 Jun 98.
- Fixed att3bxc makefile entry to spell NONAWS right. makefile, 12 Jun 98.
- Added brace-stripping to SET TERM IDLE-SEND. ckuus7.c, 12 Jun 98.
- Changed STATISTICS to round hh:mm:ss to nearest second when floating point
- is used. ckuus4.c, 12 Jun 98.
- Same deal for Elapsed time in the file transfer display. ckuusx.c, 12 Jun 98.
- Added "*.doc" to binary patterns -- Microsoft wins. It's better to transfer
- a plain-text doc file in binary mode than to transfer a Word document in text
- mode (except with IBM mainframes!). Users can, of course, always change this.
- ckcmai.c, 12 Jun 98.
- Suppose "oof*" matches one filename, which happens to be a directory (say,
- "oofa"). Then "cd oof*" would fail, but would print "oofa - not a directory",
- even though "oofa" is a directory. Fixed in cmifi2() by making a last-minute
- check for directoryness after calling zxpand. ckucmd.c, 12 Jun 98.
- A subtle problem, reported by Morten Knudsen in Norway:
- set count 4
- :back
- echo Jo! ; (Norsk for Yo)
- input 1 OK
- xif fail { xif count { goto back } }
- would keep going forever because COUNT was not being decremented. Diagnosis:
- since XIF is really a macro, it has its own COUNT variable on the stack. When
- the XIF was finished, the stack would be restored and the old COUNT would come
- back -- thus it would never change. Cure: Although XIF, FOR, WHILE, and SWITCH
- are implemented as macros, this is supposed to be invisible to the user. The
- _GETARGS and _PUTARGS routines are used to fix up the stack before and after
- use. _PUTARGS, however, failed to restore the "stackable" variables: COUNT,
- INPUT TIMEOUT, INPUT CASE, TAKE ERROR, and MACRO ERROR. Fixed in dogta(),
- ckuus6.c, 12 Jun 98.
- So this fix takes care of:
- set count 6
- for %i 1 3 1 { if count echo v(count) }
- echo count = v(count)
- Previously it would say "count = 6" after exiting the loop; now it says
- "count = 3". However, it still does not fix Morten's script. A further fault
- was in GOTO, which takes an abnormal exit from XIF (and FOR, WHILE, and
- SWITCH), thus bypassing their normal exit sequence (including the call to the
- now-fixed dogta()). So I added code to dogoto() to do the right thing when
- called from within XIF, FOR, WHILE, or SWITCH. ckuus6.c, 12 Jun 98.
- Added three trivial commands useful in debugging scripts:
- ASSERT <condition> - Sets SUCCESS / FAILURE according to <condition>.
- FAIL - Always fails (same as "assert false").
- SUCCEED - Always succeeds (same as "assert true").
- ckuusr.h, ckuusr.c, ckuus2.c, 12 Jun 98.
- By popular demand, put a SIGHUP handler into the UNIX version, which simply
- sets backgrd = 1, makes a debug log entry (if the debug log was open) and then
- calls doexit(), which in turn flushes and closes all logs and other files
- (shouldn't be necessary) and resets terminal modes, etc, and _exits. Tested
- by sending kill -1, works, seems harmless enough. ckutio.c, 12 Jun 98.
- When f(r)index() was given a non-numeric start position, it printed the wrong
- error message. Fixed in ckuus4.c, 14 Jun 98.
- Changed the LOOKUP command to accept phone numbers as well as directory entry
- names. If given a literal-format phone number, it gives it right back. If
- given a portable-format phone number, it converts it for dialing from the
- current location and prints the result. ckuus6.c, 14 Jun 98.
- Added fdialvalue(xxx) which returns the dial string that would actually be
- used when given the phone number xxx. ckuusr.h, ckuus4.c, 14 Jun 98.
- Added v(pdialsuffix) and v(dialtype). Didn't have time to test very much.
- ckuusr.h, ckuus[46].c, 14 Jun 98.
- Changed v(pdialsuffix) to v(dialsuffix) -- might as well set it for every
- phone call. Makes testing easier too. ckuus4.c, 15 Jun 98.
- Changed fdialvalue() to fdialconvert(). ckuus4.c, 15 Jun 98.
- Cleaned up HELP FUNC messages for recent functions. ckuus2.c, 15 Jun 98.
- Renamed all text files to *.txt to fit Microsoft associations:
- ckermit2.upd => ckermit2.txt
- ckaaaa.hlp => ckaaaa.txt
- ckc193.upd => ckc193.txt
- ckuins.doc => ckuins.txt
- ckvins.doc => ckvins.txt
- ckermit.bwr => ckcbwr.txt
- ckuker.bwr => ckubwr.txt
- ckvker.bwr => ckvbwr.txt
- ckcplm.doc => ckcplm.txt
- ckccfg.doc => ckccfg.txt
- etc. 15 Jun 98.
- There is no protocol for REGET /DELETE or REGET /RECURSIVE, yet these commands
- can be given to the client. Since no protocol is defined, the result is not
- what the user expects. For now, code has been added to prevent the client
- from accepting these combinations. Before allowing these combinations, I need
- to do for the protocol what switches did for the command parser -- allow many
- combinations of options, rather than inventing new top-level command words for
- every conceivable combination. The result will be an XGET (Extended GET)
- packet that has distinct Options and Filespec fields. doxget(), ckuus6.c,
- 15 Jun 98.
- SEND /RECOVER (RESEND) refused to work if SET FILE TYPE was not BINARY. But
- this was unreasonable when FILE PATTERNS were ON, since the file to be sent
- might well be recognized as binary when Kermit gets to it later. So the
- offending check was removed from doxsend(). ckuusr.c, 15 Jun 98.
- REGET (GET /RECOVER) did the same thing. Normally, the client's transfer mode
- controls the server's. But if the server is doing per-file text/binary mode
- switching because of filename patterns or record formats, this takes
- precedence, and in that case the command-time check prevents an operation that
- would have worked otherwise. BUT WE HAVE NO WAY OF KNOWING whether the server
- will do automatic mode switching, do we? So if our current transfer mode is
- text, we can (a) automatically change it to binary, or (b) leave as text and
- hope that the transfer will switch to binary when the partially transferred
- file is encountered. (a) is bad since it might allow a broken text-mode
- transfer to be resumed in binary mode, thus corrupting the file. (b) would be
- bad if no other checks were made, but checks have been added in the protocol
- to prevent recovery in text mode on a per-file basis (Jeff's changes from
- above). So the parse-time check is now omitted. doxget(), ckuus6.c,
- 15 Jun 98.
- Tested by having the server download part of a zip file, then telling it to:
- SET FILE PATTERNS OFF
- SET XFER MODE MANUAL
- SET FILE TYPE TEXT
- SERVER
- and then telling the client to REGET the zip file. The server says FAILURE:
- Recovery attempted in TEXT mode: xxx, where xxx is the filename.
- Somehow the recursive flag was getting stuck on in K95 when receiving files.
- Changed ftreset() to always set recursive to 0, since this can never be a
- global mode. By the way, this had *all* sorts of odd effects, affecting the
- DIRECTORY, DELETE, and many other file-oriented commands. ckuusx.c, 15 Jun 98.
- Changed ckdate() to return the same format as fdate(), etc -- space between
- date and time, rather than underscore. ckuus4.c, 16 Jun 98.
- Added .vxd to binary patterns. ckcmai.c, 16 Jun 98.
- Changed edit number from 193 to 194. ckcmai.c, 18 Jun 98.
- DIAL would no longer dial if given a phone number rather than a dialing
- directory entry name, due to LOOKUP changes made on 14 June. Fixed in
- ckuus6.c, 20 Jun 98.
- ---1.1.17---
- Changes from Jeff:
- . Fix for DATE bug
- . Various K95-specific bits
- . Upped edit numbers
- . IKS changes
- . ttinc() non-MYREAD Telnet case was returning the wrong character
- Added v(lockpid), UNIX only. Contains the PID from the UUCP lockfile from
- the most recent SET LINE command, if (a) the command failed because the line
- was in use by another process, and (b) the PID was obtainable. Otherwise
- v(lockpid) has an empty value. ckuusr.h, ckuus4.c, ckutio.c, 27 Jun 98.
- Also v(blockcheck), and also make "set block 4" an invisible synonym for
- "set block B" so the v(block) value could be used in SET BLOCK commands.
- ckuusr.h, ckuus[34].c, 27 Jun 98.
- More changes from Jeff for IKS. Fixed some confusion in ckcnet.c. 28 Jun 98.
- The VMS RESEND problem...
- . RESEND X.ZIP complains and fails if SET FILE TYPE not BINARY, even
- though it will be binary when it opens the file. Fixed in doxsend(),
- ckuusr.c, 28 Jun 98.
- . RESEND /BINARY X.ZIP temporarily sets xfermode to BINARY (rather than AUTO)
- and this prevents rpar() from including the System ID in the S packet.
- There is no reason why the System ID should not always be sent. Fixed in
- rpar(), ckcfns.c, 28 Jun 98.
- . VMS server fails to execute REGET unless it's already in binary mode.
- That's because the last-minute check for binary in sfile() was before
- the call to openi() rather than after, and in VMS, openi() (zopeni()
- really) has the final word on the transfer mode. Fixed in ckcfn2.c,
- 28 Jun 98.
- . When VMS C-K resends, it always sends the whole file again, except for
- the first byte. This was the real problem...
- I checked this with C-Kermit 6.0 to see if the same thing happened before all
- the recent changes for odd-record-length files, etc. Nope, it didn't.
- Detailed comparison of the 6.0 and 6.1 code only turned up a lot of
- SYS$RAB/FAB stuff I didn't understand. Added lots of debugging statements to
- see where we go wrong. Hours later... I found an "|" that should have been
- an "&" in the code that was added to handled odd-record-length fixed-block
- files. So now RESEND in VMS is fixed, at least for even-record length files.
- REGET too. ckvfio.c, 28 Jun 98.
- Added zgetfs() for VMS. ckvfio.c, 28 Jun 98.
- When (UNIX) C-Kermit got an autodownload and then returned to CONNECT mode
- automatically, the terminal modes were messed up the first time we escape back
- manually. Fixed in doconect(), ckuus4.c, 28 Jun 98.
- Added some debugging to try to track down a very strange problem in the OS-9
- version, in which the pointer to the outbound packet buffer is NULL by the
- time it reaches bgetpkt(). ckcfn[s3].c, 29 Jun 98.
- Discovered that calling the system to get the Julian date is a LOT more
- trouble than it's worth in most OS's except UNIX, so I moved zjdate() to
- ckuus4.c and had it calculate the Julian date using old-fashioned arithmetic.
- Now all C-Kermits have it. ZJDATE symbol removed. ckcdeb.h, ckuusr.h,
- ckuus4.c, ckufio.c, 29 Jun 98.
- Discovered that "blah" would be accepted as a valid date. Bulletproofing
- added to cmcvtdate(). ckucmd.c, 29 Jun 98.
- Having written an algorithmic date-to-julian-date converter, it wasn't hard to
- add a conversion in the other direction, so fj2date() converts a Julian date
- to a regular date. ckuusr.h, ckuus4.c, 30 Jun 98. (I was tempted to also add
- date/time arithmetic functions, but resisted -- they are on the list for
- later.)
- Got rid of bell sound after successful DIAL if SET QUIET ON. ckuus6.c,
- 30 Jun 98.
- Supplied missing Microcom-AT "error-correction off" command. ckudia.c,
- 1 Jul 98.
- Fix from Jeff for partial dialing. ckuus6.c, 2 Jul 98.
- One call to cmcvtdate() was overlooked in converting to 2-arg format, as
- well as one of the prototypes. ckucmd.[ch], 2 Jul 98, from Jeff.
- Added information about new dialing rules in Italy and Spain to Section 2.1
- of ckermit2.txt, 3 Jul 98.
- Fixed HANGUP to include an implicit CLEAR DIAL-STATUS. ckuusr.c, 3 Jul 98.
- Added bulletproofing to encstr() and getpkt() similar to that added to
- bgetpkt(), to catch null "data" pointer. ckcfns.c, 3 Jul 98.
- Added Telnet negotiation to ttinl() in the UNIX version. I did not add it to
- ttxin(), since, in the UNIX version, ttxin() is used only by the CONNECT
- module, which handles Telnet negotiations itself (except there is also one
- call to ttxin() from ckudia.c, which is called only for modem type "unknown",
- and then only when dialing failed, an unlikely combination on a Telnet
- connection). ckutio.c, 3 Jul 98. Here's the first Internet Kermit Service
- dialog between a C-Kermit client and a C-Kermit server:
- TELNET SENT WILL TERMINAL-TYPE=24
- TELNET SENT WILL NEGOTIATE-ABOUT-WINDOW-SIZE=31
- TELNET SENT WILL NEGOTIATE-ABOUT-KERMIT-SERVER=45
- TELNET SENT DO NEGOTIATE-ABOUT-KERMIT-SERVER=45
- TELNET SENT DO SUPPRESS-GO-AHEAD=3
- TELNET RCVD DONT TERMINAL-TYPE=24
- TELNET SENT WONT TERMINAL-TYPE=24
- TELNET RCVD DONT NEGOTIATE-ABOUT-WINDOW-SIZE=31
- TELNET SENT WONT NEGOTIATE-ABOUT-WINDOW-SIZE=31
- TELNET RCVD DO NEGOTIATE-ABOUT-KERMIT-SERVER=45
- TELNET SENT SB NEGOTIATE-ABOUT-KERMIT-SERVER START-SERVER IAC SE=0
- TELNET RCVD WILL NEGOTIATE-ABOUT-KERMIT-SERVER=45
- TELNET RCVD WILL SUPPRESS-GO-AHEAD=3
- TELNET SENT DO SUPPRESS-GO-AHEAD=3
- TELNET SENT DO LOGOUT=18
- After some research, discovered that yyyyddd is *not* a Julian date, but
- rather a "day of year". Changed fjdate() to fdayofyear() (but left
- fjdate() as an invisible synonym, since we released K95 1.1.17 with it),
- and fdoy() as another invisible synonym. Changed fj2date() to
- fdoy2date() (day of year to date). ckuus4.c, 3 Jul 98.
- Now, a *true* Julian date is the number of days since a fixed date in the
- past, and this is more useful anyway, since normal arithmetic works on it. By
- definition, the fixed date is 1 Jan 4713 BCE, but that makes for big numbers,
- so the more common form is the Modified Julian Date (MJD), which is the number