C-KERMIT CHANGE LOG (Changes since 8.0.200 of 12 Dec 2001) ---8.0.200--- Known bugs (+ = fixed after release): + 1. tilde_expand() can call getcwd() with NULL arg. + 2. getexedir() called too early (fatal in combination with (1)). + 3. Kermit "get blah" where blah is a symlink; server refuses to send it. Should not do this if GET not recursive. ? 4. Dave Sneddon's report about VMS fore/background confusion. + 5. FTP GET path/file doesn't work - path not stripped - but MGET works. + 6. IRIX 5.3 compilation problems (have patches from Marcus Herbert) X 7. Filename completion bug (see below) (deferred). + 8. QNX6 herald and other problems. ------------- Merged Jeff's changes, 20 Dec 2001: . Changed all occurrences of "ttnproto == NP_TELNET" to "IS_TELNET()" to account for the difference between SSH and Telnet. ckuscr.c, ckuus[3457].c, ckcnet.h, ckcfns.c, ckudia.c, ckutio.c, ckucon.c, ckucns.c. . Moved SSH pty failure warnings. ckuusr.c. . Security adjustments to FTP module, plus fix an error message. ckcftp.c. . Adjustment of some security-related #ifdefs. ckcdeb.h, ckuus2.c, ckctel.c. . Guard against calling getpwnam() with a NULL arg in tilde_expand() ckufio.c. . Moved getexedir() call to later, where it's safe. ckcmai.c. Added SSH ADD and many SSH SET commands from Jeff's spec. Fixed SHOW SSH to not dump core if variables weren't set. ckcker.h, ckuus[r3].c, 20 Dec 2001. C-Kermit in server mode, client says "get foo" where foo is a symlink. Server says "no files meet selection criteria" instead of sending the file. It should only refuse to follow symlinks if it's a recursive get. Fixed in sgetinit(): ckcpro.w, 21 Dec 2001. More work on SSH and SET/SHOW SSH commands. ckuus[r3].c, 21 Dec 2001. Undid Jeff's replacement of the SSH pseudoterminal allocation failure message, because now it comes out any time an SSH command has to be reparsed (in the non-SSHBUILTIN case). ckuusr.c, 21 Dec 2001. More SSH and SET SSH command work back & forth with Jeff, plus Jeff added SET HOST /NET:SSH. ckcmai.c, ckuus[r37].c, ckcdeb.h, ckuusr.h, 22 Dec 2001. Added SSH OPEN switches. ckuusr.c, 22 Dec 2001. Added SSH CLEAR, HELP SSH, and HELP SET SSH. ckuus[r2].c, 23 Dec 2001. From Jeff: . SET TCP commands now apply to SSH . SSH V2 REKEY and FORWRD-{LOCAL,REMOTE}-PORT commands now implemented . Missing DLLs automatically disable appropriate authentication mechanisms. ckuusr.c ckcnet.c ckuus3.c ckcmai.c ckcnet.h ckuus4.c, 26 Dec 2001. From Jeff: . Remove SET SSH KEEPALIVES. . Add help text for SSH AGENT { ADD, DELETE, LIST }. ckuus[23].c, 28 Dec 2001. Added parsing for SSH AGENT { ADD, DELETE, LIST }. ckuusr.c, 28 Dec 2001. From Jeff: . Fixed a crash that can happen when making an SSH connection. . Filled in SSH AGENT actions. . Changed default for strict host key check (to ASK) and help text. . uploaded new binaries include ~kermit/os2test/beta/ssh-agent.exe . Read man ssh-agent on ftp.kermit.columbia.edu for details on what it does. ckuus[r23].c, 28 Dec 2001. "ftp get path/filename" didn't work; the FTP client did not strip the path from the local copy of the filename when doing a GET, even though it did for MGET. Diagnosis: in doftpget(), the "if (!getone && !skipthis)" statement lacked an "else" part for the getone case. ckcftp.c, 28 Dec 2001. A while back Jeff reported that in FTP MGET, if you cancel a file with 'x', all the rest of the files arrive truncated to 0 bytes. I tried this on both Unix and Windows and couldn't reproduce it. In the last-minute flurry to release C-Kermit 8.0, I thought I noticed the FTP client failing to update the fullscreen file-transfer display. But it seems to work right, at least in Unix. When downloading a big file with FTP, all the display fields are updated as expected. But smaller files might go by too fast for the display to do anything. HOWEVER, in K95 the file transfer display does not update itself until the end of the file, even if the file takes a long time to transfer. This happens in both the Console and GUI versions. A thread thing? (Jeff says no.) Yet the same display works fine on Telnet connections. In IRIX 5.3, the select()-based CONNECT module had to include or else it blew up with "struct timeval" unknown. Since there already was a SYSTIMEH CFLAG, I added the #include within #ifdef SYSTIMEH..#endif and rebuilt with KFLAGS=-DSYSTIMEH, only to discover that the irix5* targets didn't bother to propogate KFLAGS. Fixed in ckucns.c, makefile, 30 Dec 2001. Increased IRIX5x Olimit from 2400 to 3000 because of ckuus[34].c. Added -ansi, since (Marcus Herbert reported) we were not actually getting ANSI-C compilation even though CK_ANSIC was defined. But now that we are, we get warnings in , which is included by ckcnet.h: bit-field 'th_off' type required to be int, unsigned int, or signed int. (3.5.2.1(30)) u_char th_off:4, ------ ^ Tough. makefile, 30 Dec 2001. But adding -ansi to the IRIX 5x targets also make compilation bomb whenever we referenced fdopen() or popen(), which evidently don't have prototypes in any of the header files. Luckily we already have CFLAGS for this occasion too: DCLFDOPEN and DCLPOPEN. Added these to the irix51 target. Also had to copy the fdopen()-popen() prototype section to ckuusx.c, which has a new reference to fdopen() in a workaround for the curses console buffering bug. makefile, ckuusx.c, 30 Dec 2001. The QNX6 version did not receive a proper herald (it announced itself as "unknown version". Reshuffled #ifdefs in ckuver.h, added display of QNX6 and NEUTRINO symbols to ckuus5.c, 30 Dec 2001. Lucas Hart sent in a patch for the VMS problem. Apparently it was even worse than Dave Sneddon had reported: 8.0 couldn't run at all under Batch. ckvtio.c, 31 Dec 2001. A major obstacle to the usability of the FTP client is that certain commands don't behave as FTP users expect: CD, DIR, DELETE, MKDIR, etc, which are local rather remote, and there are no LCD (etc), USER, or ACCOUNT commands. We could fix this by adding an FTP command-language personality, but file management commands can also be remote or local on connections to Kermit servers too. So: SET LOCUS { LOCAL, REMOTE, AUTO } Sets the locus for unprefixed file management commands. When LOCAL, a REMOTE (or R) prefix is required for to send file management commands to a remote server (e.g. RCD, RDIR). When REMOTE, an L prefix is required to issue local file management commands (e.g. LCD, LDIR). The word LOCAL can't be used as a prefix since it is used for declaring local variables. This applies to all types of connections, and thus is orthogonal to SET GET-PUT-REMOTE, which selects between Kermit and FTP for remote file-transfer and management commands. The default LOCUS is AUTO, which means we switch to REMOTE whenever an FTP connection is made, and to LOCAL whenever a non-FTP connection is made, and switch back accordingly whenever a connnection is closed. Implementation (31 Dec 2001): . None of this is compiled if LOCUS is not defined. . Added XYLOCUS (SET LOCUS) and LOCUS definitions: ckuusr.h. . Override by defining NOLOCUS (which inhibits definition of LOCUS). . Added LOCUS to SET keyword table: ckuusr.c. . Added locus & autolocus variables: ckuusr.c. . Added SET LOCUS parsing and variable setting: ckuus3.c. . Added display of LOCUS setting to SHOW COMMAND: ckuus5.c. . Added automatic locus setting to setlin(): ckuus7.c. . Added automatic locus setting to ftpopen() and ftpclose(): ckcftp.c. How to catch all the places where a Kermit connection is closed? Turns out we've done this before, when we added the connection log. So I made dologend() take care of locus switching. But dologend() was not compiled in if certain symbols were defined, such as NOLOCAL, or not defined, such as CKLOGDIAL. So I (a) rearranged the #ifdefs so that even if these would otherwise have obliviated dologend(), now they leave a piece of it for locus-setting; (b) moved the prototype out of #ifdefs; and (c) took all calls to it out of #ifdefs. ckcker.h, ckcfn2.c, ckcmai.c, ckucns.c, ckucon.c, ckuus[r347x].c, 31 Dec 2001. Added locus checking to the following commands: DIRECTORY, CD/CWD, CDUP, DELETE, PWD, MKDIR, RMDIR, RENAME. ckuusr.c, 31 Dec 2001. Added LDIRECTORY, LCD/LCWD, LCDUP, LDELETE, LPWD, LMKDIR, LRMDIR, LRENAME. ckuusr.[ch], 31 Dec 2001. Added USER and ACCOUNT commands, which are the same as FTP USER and FTP ACCOUNT. ckuusr.[ch], ckcftp.c, 31 Dec 2001. Since automatic locus switching could be a big surprise for most people, I printed message any time it changed. ckcftp.c, ckuus[37].c, 31 Dec 2001. Added help text for the new L commands and filled in missing HELP text for SET GET-PUT-REMOTE, CDUP, MKDIR, and RMDIR. ckuus2.c, 31 Dec 2001. Changed help text of CD, DIR, etc, for LOCUS. Changed the help text for RCD, RPWD, RDEL, RDIR, etc, to mention that they also work with FTP servers. Updated HELP REMOTE for this too. ckuus2.c, 31 Dec 2001. Made sure code builds with NOLOCAL, NOLOGDIAL, and NOLOCUS (it does). The IKSD command, when given with a /USER: switch, sends the user ID to the IKSD. But the SET HOST /USER: command does not, when making a connection to a Kermit service. This makes it impossible to script IKSD interactions using only client commands. Furthermore, even if you include a /PASSWORD switch with the IKSD command, it does not send the password. I added code near the bottom of setlin() to do this. If we have a connection to a Kermit service and a /USER: switch was given, then we attempt a REMOTE LOGIN. If a /PASSWORD: switch was not given then if the username is "ftp" or "anonymous", we automatically supply a password of user@host; otherwise we prompt for a password. If a /USER: switch was not given, it acts like before. It all works, but it might not be the best way (or place) to do it. setlin(): ckuus7.c, 31 Dec 2001. NOTE: The above change doesn't help with IKSD /USER:anonymous, the server prompts for password anyway, not sure why. NOTE 2: What about secure authentication? We have to test to see if user was already authenticated before sending the login packet. Added /opt/kermit and /opt/kermit/doc to info_dir[] list (for Solaris). ckuus5.c, 31 Dec 2001. From Jeff: new Help text for SET TERM FONT (K95 GUI). ckuus2.c, 1 Jan 2002. More work on help text for file management commands -- e.g. we can't lump the L-commands together with the unprefixed ones; they need separate entries. Also: added missing HELP REMOTE PWD, improved the default case (in which help text had been omitted for a valid command). ckuus2.c, 1 Jan 2002. It seems VMS C-Kermit was pretty much ignoring the -B (force background) and -z (force foreground) command-line options. Fixed in congm(): ckvtio.c, 1 Jan 2002. Tested the SET LOCUS business with VMS C-Kermit, which does not have a built-in FTP client. Of course in this case there is no automatic locus switching, but SET LOCUS REMOTE works nicely on IKSD connections. From Jeff: . #ifdef adjustments for LOCUS changes. . SSH KEY CREATE /TYPE:SRP. . Fix \v(serial) to not be 8N2 by default if speed is 0. . Don't let doexit() run if sysinit() hasn't been called first. ckuus[r247x].c, 2 Jan 2002. Made SET BACKGROUND { ON, OFF } do exactly the same as -B and -z options. ckuus3.c, 2 Jan 2002. Updated user-visible copyright dates to 2002 (but still need to do all the source-module comments). ckcmai.c, ckuus[25].c, 2 Jan 2002. Rearranged #include in ckucns.c that was done for IRIX 5.3, to avoid conflicts in SV/68 R3v6. 3 Jan 2002. From Dave Sneddon: Code changes in VMS sysinit() and congm() to work around problems in batch, SPAWN'd, etc, and change CTTNAM from TT: to SYS$INPUT:. ckcdeb.h, ckvtio.c, 3 Jan 2002. From Jeff: . Fixed typo in definition of CTTNAM for VMS. ckcdeb.h . Moved macro definitions for SSHBUILTIN from ckuus3.c to ckuusr.h so they can be referenced in ckuus7.c . Added SSH functionality to SET HOST: SET HOST /NET:SSH /CONNECT hostname [port] /switches . Fixed SET NET TYPE so it won't reject SSH if SSH is installed. . Changes to allow IKSD to continue functioning. Somehow this minor change to ckcmai.c got lost in one of the back and forth exchanges. . HELP TEXT for UCS2 kverb . Fix a problem in K95 where multiple threads could be attempting to send a telnet negotiation simultaneously. ckcmai.c ckcdeb.h ckuus2.c ckuus3.c ckuusr.c ckuusr.h ckuus7.c ckctel.c ck_crp.c ckuat2.h ckuath.c, 4 Jan 2002. From Jeff: Peter Runestig complaining that the Telnet Forward X code was corrupting data. This resulted in a very thorough examination of the telnet module code and a discovery of some rather significant problems. The root of the problems is the lack of thread safety. To correct this problem the following was done. All code (regardless of module) which outputs telnet commands is placed into a mutex region to ensure that competing output threads do not result in interleaving their output. This could happen for instance when the forward-x thread is forwarding data and the user changes the window size or sends an AYT or BREAK. Next the buffer used for input and output processing were identical. This means that output data could be treated as input or vice versa. Ugh.... I also spent some more time cleaning up setlin(). Mostly reorganizing the code into single if (...) blocks so that breaking it up will be easier. ckctel.c ckuus7.c, 4 Jan 2002. Updated internal copyright notices. All modules, 5 Jan 2002. From Jeff: More of same, plus new makefile target and changes from Spike Gronim for freebsd44+srp+openssl. ckcdeb.h ckcnet.c ckctel.c ckuus7.c ck_ssl.c makefile, 5 Jan 2002. Some minor updates and fixes to SSH and SET SSH help text. ckuus2.c, 6 Jan 2002. Added SET RGB-COLORS for GUI. ckuusr.[ch], ckuus3.c, 6 Jan 2002. From Jeff: More Telnet changes, Debug semaphores for K95, etc: ckcdeb.h, ckuusr.h, ckuus[r35x].c, ckctel.[ch], ckuath.c, 7 Jan 2002. Added --xpos:n --ypos:n, SET GUI WINDOW POSITION x y, and changed SET RGB-COLORS to SET GUI RGBCOLOR. Action needs to be filled in (in setguiwin() in ckuus3.c), and gui_xpos and gui_ypos need to be defined in cko???.c. ckuusr.h, ckuus[r3y].c, 7 Jan 2002. Added --fontname:name --fontsize:name (and facename as synonym for fontname). ckuusr.h, ckuus[7y].c, 7 Jan 2002. Moved GUI (not OS/2) SET TERM FONT code in ckuus7.c to its own routine, setguifont(), in ckuus3.c, and made GUI SET TERM FONT call this routine, and also made SET GUI FONT call the same routine. ckuus[37].c, 7 Jan 2002. Added --termtype:, --height:, --width:, --user:. Also added symbols for --telnet:, --ssh:, --ftp:, --[remote-]charset, and --password:, but didn't fill them in. --password: is probably not a good idea (but we allow it for FTP); the others involve a lot of code-shuffling and reconciliation, which I'll try to do when I get a chance (especially the connection ones, which can be done as part of the setlin() restructuring). ckuusr.h, ckuusy.c, 8 Jan 2002. Also I tried commenting out the #ifndef KUI..#endif's around SET TERMINAL CHARACTER-SET (easier said than done because a crucial #endif was mislabeled). Let's see if it compiles & works... ckuus7.c, 8 Jan 2002 Added FTP [ OPEN ] /NOINIT, meaning don't send REST, STRU, and MODE commands upon making an FTP connection. This allows connection to servers that close the connection (or worse) when given these commands (e.g. Linux 2.4 TUX 2.0 FTP server). ckcftp.c, 8 Jan 2002. Looked at adding caller ID support for the ANSWER command: . SET ANSWER CALLER-ID { ON, OFF } . SET ANSWER RINGS . \v(callid_xxx) xxx = { date, time, name, nmbr, mesg } . CKD_CID modem capability . Set CKD_CID for modems that have it. . A quick survey shows: - USR V.90: No (but Jeff says some USRs have it). - V.250: No - Lucent Venus: No - USR: #CID=1 (the ones that have it -- X2?) - Diamond Supra: #CID=1 - Rockwell 56K: #CID=1 - PCTEL: #CID=1 - Zoltrix: +VCID=1 - Conexant: +VCID=1 . Since there are different commands to enable caller ID reporting, we need a new field in struct MDMINF. . SHOW MODEM and SHOW DIAL would need updating. . etc etc... This is all way too much for now so I just did the setting of the \v(callid_*) variables. These are reset at the beginning of an ANSWER command, and then set by the ANSWER command if they come in; thus they persist from the time they are collected until another ANSWER command is given. To take advantage of autoanswer, the user has to enable it in the modem (all the modems I found that support it have it disabled by default), and also has to set the number of rings to at least 2. This can be done with (depending on the modem): set modem command autoanswer on ATS0=2#CID=1\{13} set modem command autoanswer on ATS0=2+VCID=1\{13} and undone with: set modem command autoanswer on ATS0=1#CID=0\{13} set modem command autoanswer on ATS0=1+VCID=0\{13} The variables can be accessed only after the call is answered. Therefore the only way to refuse a call is to answer it, inspect the variables, and then hang it up if desired. Future Kermit releases can do this more nicely (as sketched out above.) Also while I was in the dialing code, I added result code VCON (= VOICE), used by several of the newer modems. These changes are untested. The SET ANSWER command is written but commented out. ckuusr.h, ckcker.h, ckuus[r3].c, ckudia.c, 8 Jan 2002. From Jeff: fixes to --termtype:, --height:, --width:, --user:, and filling in of --rcharset:, which required extracting code from settrm() into a separate parse-method-independent remote character-set setting routine. ckuus[7y].c, 8 Jan 2002. From Jeff: More work on TERMINAL CHARACTER-SET code reorganization, and reinstatement of SET TERMINAL CHARACTER-SET in K95G. Also, fix char/CHAR warnings in Telnet module. ckuus7.c, ckctel.c, 9 Jan 2002. Made SET TERM CHARACTER-SET visible for all builds, including K95G, and filled in HELP text for it. ckuus[27].c, 9 Jan 2002. Added help text for new extended options. ckuusy.c, 9 Jan 2002. Commented out the return(-2) statement at the end of xgnbyte() to make the "Statement not reached" errors go away, after checking to make sure that there was no path that could fall through to the end. I'm 99.99% sure there isn't, but that doesn't mean that some compilers might not still complain. ckcfns.c, 9 Jan 2002. From Jeff: fix typo in the K95 extended-option help text; add more semaphores to network i/o. ckuusy.c, ckcnet.c, 10 Jan 2002. Undid ansiisms in set{lcl,rem}charset() declarations. ckuus7.c, 10 Jan 2002. Removed a duplicated clause from the install target. makefile, 10 Jan 2002. From Jeff: more semaphores. ckcnet.c, 11 Jan 2002. Moved references to tmpusrid and tmpstring out of NOSPL #ifdefs -- they can be used with NOSPL. setlin(): ckuus7.c, 13 Jan 2002. Made a dummy dologend() routine outside of #ifndef NOICP, so we don't have to enclose every reference to dologend in #ifdefs. (I had added a bunch of calls to dologend() throughout the code to handle automatic LOCUS switching.) ckuus3.c, 13 Jan 2002. Moved "extern int nettype" outside of NOICP #ifdefs in ckuus4.c for NOICP builds. 13 Jan 2002. Moved a misplaced #ifdef in the VERSION command. ckuusr.c, 13 Jan 2002. Did 81 different feature-selection builds on Linux (RH 7.0), all OK after the changes listed above for today. 13 Jan 2002. Added prototypes for set{rem,lcl}charset(). ckcxla.h, 13 Jan 2002. Added ckcxla.h to dependencies for ckuusy.c. ckvker.com, 13 Jan 2002. Made a correction to the HELP SET LOCUS text and supplied a missing comma for HELP REMOTE. ckuus2.c, 13 Jan 2002. Built OK on HP-UX 11.11 (K&R and ANSI), Solaris 8 (cc), Solaris 2.5.1 (gcc), SunOS 4.1.3 (cc and gcc), VMS 7.1 (DEC C, net and nonet), Unixware 7.1.1, Tru64 4.0G, HP-UX 10.20 (K&R), AIX 4.3.3, FreeBSD 2.2.8, Slackware 8.0, IRIX 6.5.13f, IRIX 5.3 (??? Can't tell -- the computer ran out of swap space -- but it was OK a few days ago), VMS 5.5-2 (VAX C, UCX + nonet)... HP-UX 9.05, ... Some corrections to comments in HP targets from PeterE. makefile, 14 Jan 2002. Corrections to prototypes for set{rem,lcl}charset() (VOID, not void) from Jeff. ckcxla.h, 14 Jan 2002. Builds, cont'd... SINIX 5.42, Red Hat Linux 5.2 on i386, SuSE 7.0 on S/390, Red Hat 7.1 on IA64, QNX 4.25, HP-UX 5.21/WinTCP, ..., Dell Coleman noticed that in AIX, the COPY command always says "Source and destination are the same file" when the destination file doesn't exist. This is because in AIX, realpath() fails with ENOENT (errno 2). The zfnqfp() code already accounts for this, but evidently not well enough. So I did what I should have done long ago. zfnqfp() was originally accomplished with do-it-yourself code. Later I added support for realpath(), and partitioned the routine into mutually exclusive compile-time sections: #ifdef CKREALPATH realpath()... #else do-it-yourself... #endif. But if realpath() failed, there was no recourse to the do-it-yourself code. Today I replaced the #else with the #endif, so the do-it-yourself part is always included and is executed if the realpath() call fails. Built and tested on AIX 4.3.3 and Solaris 2.5.1, as well as on Linux with and without the realpath() code included. zfnqfp(): ckufio.c, 16 Jan 2002. Separated K95 and C-Kermit test version numbers, so C-Kermit can be RC.02 while K95 is Beta.01. ckcmai.c, 16 Jan 2002. Inhibited 0-length writes by conol() and conoll(), since they cause big trouble with the AIX 4.3.3 pty driver, e.g. when you have an SSH connection into AIX and run C-Kermit there. ckutio.c, 16 Jan 2002. Suppressed "Switching LOCUS..." messages from FTP client when it was invoked from the command line. ckcfns.c, 17 Jan 2002. Dave Sneddon noticed that FOPEN /APPEND gets "?Write access denied" in VMS if the file exists. This is apparently because VMS zchko() does the wrong thing. Commenting out the call zchko() in the VMS case gets past this but then the appended part of the file has different attributes than the orignal part, e.g.: abc <- original line (horizontal, normal) d <- appended line (vertical) e f VMS fopen() takes an optional 4th argument: a series of RMS keyword=value pairs. Kermit doesn't give any. Experimentation shows that appending to a Stream_LF works fine. That'll be a restriction for now, until somebody sends in code to get the RMS attributes of the original file and feed them to fopen(). Also need code to fix VMS zhcko() to say whether it's OK to append to a file. ckuus7.c, 17 Jan 2002. Somebody suggested I could get a working Kermit for Neutrino 2+ by doing the QNX6 build on Neutrino itself. I verified that this can't be done -- at least not by me -- since Netutrino 2+ doesn't have a compiler, and we already know the version cross-built for it on QNX4 doesn't work. 17 Jan 2002. From Jeff: SET SSH GSSAPI KEY-EXCHANGE { ON, OFF } parsing, SHOW SSH. ckuus3.c, 18 Jan 2002. PeterE suggested that SET ESCAPE allow 8-bit escape characters because of the difficulty in entering Ctrl-\ on European keyboards and the hardship (e.g. to EMACS and VI users) of sacrificing another C0 control character. Like everything these days, this turns out to be rather a bigger deal than it would seem. The SET ESCAPE parser calls setcc(), which accepts control characters in various formats (literal, ^X notation, or numbers), and gives an error return if the value is not 0-31 or 127. This is changed easily enough to also allow numbers between 128 and 255. But who else calls setcc()? The commands for setting Kermit packet start and end characters. No big deal, this gives people a bit more flexibility in case they need it, but it won't be documented. setcc(): ckuus7.c, 18 Jan 2002. Since code to display the escape character is scattered all over the place, and some of it indexes into an array based on the character value (which would now dump core if the escape character was > 128), I put the code in one place, a new shoesc() routine in ckuusx.c (which needs to be outside #ifndef NOICP, since the CONNECT modules use it even in command-line only builds). Also discovered that this code was indexing into the nm[] array with tt_escape to get "enabled" or "disabled", which is no longer appropriate, so fixed this too. ckuusr.h, ckuus[5x].c, 18 Jan 2002. Made SHOW ESCAPE, SHOW TERM, and the various CONNECT modules call shoesc(), and updated HELP SET ESC. ckuus[25].c, ckucns.c, ck[cuvd9]con.c, 18 Jan 2002. After all that, it occurred to me that this is a really bad idea for K95, with all the confusion about Console code pages, OEM code pages, Windows code pages, and Unicode. But I tried "echo \161" at the K95 prompt and got the expected 8-bit character in both the Console version and the GUI, so maybe it's OK after all. Removed the automatic IKSD login code from setlin() since it complicates interactive anonymous login. ckuus7.c, 20 Jan 2002. An #ifdef clause from Matthew Clarke to avoid "redeclaration of free" error when building a curses version of C-Kermit for AIX 2.2.1 on RT PC. ckuusx.c, 22 Jan 2002. Took care of one detail I omitted when adding the 8-bit escape character: not stripping the 8th bit before comparing the keyboard char with the escape char. ck[uv]con.c, ckucns.c, 24 Jan 2002. Started to go through Jeff's changes of the last week but he had run trim -t on them, which untabifies, so the diffs were huge. Retabifying Jeff's files only makes matters worse. So instead of comparing each old and new source file in EMACS windows with M-X Compare-Windows like I usually do (which can't be told to ignore whitespace), I had to work from the diff -c -b listings. In ascending order of size of diffs: ckcker.h: Add I_AM_SSHSUB definition. ckuusr.h: XXLINK and VN_PERSONAL, etc, definitions. ckuusy.c: Support for "I Am SSHSUB" invocation. ckuus5.c: Support for new K95 directory structure. ckcmai.c: Init endianness earlier (K95 TYPE was broken), "I Am SSHSUB" support. ckuus7.c: Security #ifdefs, SSH OPEN /PASSWORD, SSHSUB support ckcftp.c: <-- SAVE TIL LAST ckuus6.c: Add LINK command for K95 on NT. ckuus4.c: Support for new K95 directory structure; SSHSUB support ckuus3.c: Support for new K95 directory structure; some SSH changes ckuus2.c: Changes to SSH related help text, add HELP LINK text ckuusr.c: LINK command, SSH OPEN /PASSWORD: /SUBSYSTEM: switches, Pattern-management fixes. ckctel.c, ck_ssl.c, ckuath.c, ckcnet.c: Took Jeff's without looking. ckuusx.c, ckucns.c, ckucon.c, ckwart.c: My changes from weeks ago that were never picked up. Built OK on Solaris with gcc and on SunOS with (K&R non-ANSI) cc. 31 Jan 2002. Meanwhile, Jeff had made various changes in response to Jaya Natarajan at IBM, whose basic complaint was that numerous failure conditions were not being detected if the fullscreen file-transfer display was active. Jeff found that this was because big blocks of code were skipped in that case and changed the code not to do that, which fixed the reported problems. But later Jaya said that "ftp mget file1 file2" acted like "ftp mget *", so it seemed that Jeff's fixes broke file selection. After taking Jeff's fixes for ckcftp.c, however, I still could not reproduce the problem. ckcftp.c, 31 Jan 2002. <-- Later, it turned out the problem was with IBM's custom FTP server. Fixed updates that I missed yesterday in ckcftp.c, ckuusr.c. Moved misplaced #ifdef in ckuusy.c breaking nonet builds. Added #ifdefs to sysinit() for nonet builds in ckutio.c. Ran through build-in-many-configurations script in Linux, all builds OK. 1 Feb 2002. Moved shoesc() definition outside of NOXFER to fix NOXFER builds. ckuusx.c, 1 Feb 2002. Added MYCUSTOM definition alongside KERMRC and changed KERMCL to be the same as CKMAXPATH, instead of some random hardwired number. ckuusr.h, 1 Feb 2002. Changed ckcdeb.h to define DIRSEP and ISDIRSEP(), and put #ifndef [IS]DIRSEP..#endif around all [IS]DIRSEP definitions in ck[udso]fio.c, so we can finally put away the many repeated #ifdef chains when we get around to it. 1 Feb 2002. Make VMS zkermini() return 1 on success, 0 on failure, rather than 0 always. ckvfio.c, 1 Feb 2002. Added code to doinit(), just before it goes to execute the init file. If the init file name we are about to open is empty or fails zchki(), substitute the customization filename. For now this code is in #ifdef USE_CUSTOM..#endif, which is not defined by default. It does the trick in Unix and VMS. Also included code from Jeff for K95, but this needs verification and testing. Also used DIRSEP and ISDIRSEP() throughout doinit() instead of the long #ifdef chains. ckuus5.c, 1 Feb 2002. Moved shoesc() prototype from ckuusr.h to ckcker.h so modules that need it don't have to include ckuusr.h just for this one thing (example: ckvcon.c). 1 Feb 2002. Defined USE_CUSTOM by default, except if NOCUSTOM is defined. ckuusr.h, 1 Feb 2002. Fixed kermit-sshsub code to really enter server mode, and to print "KERMIT READY TO SERVE..." so scripts can wait for it. Also bumped the C-Kermit test ID to RC.03 and the K95 one to Beta.02. ckcpro.w, ckcmai.c, 2 Feb 2002. I was thinking about adding SET COMMAND BUFFER-SIZE to let people allocate as big a buffer as they wanted at runtime, mainly for defining huge macros. Moved the SCMD_blah definitions from ckuusr.h to ckuus3.c, since they aren't used anywhere else. But stopped there since the rest turns out to be a rather big deal. ckuusr.h, ckuus3.c, 2 Feb 2002. From Jeff, 3 Feb 2002: . Fix an out-of-order modem name in the SET MODEM TYPE table: ckudia.c. . Use SET LOGIN USER and PASSWORD if present. ckcftp.c. Cody Gould noticed that array declarations had become case sensitive, and upper case didn't work. Diagnosis: misplaced case conversion in xarray(). Fixed in ckuus5.c, 4 Feb 2002. SHOW VAR dumps core on \v(sexpression) or \v(svalue) -- failure to check for NULL pointer. I wonder why this didn't happen before (answer: because I was doing it on SunOS; now I'm doing it on Solaris). ckuus4.c, 6 Feb 2002. I've had several requests for "show var name name name...". I added this to doshow(), such that SHOW VAR works exactly as it did before (if you don't give it an arg, it lists all variables; if you give it an arg, it appends "*" to it and lists all matching variables) but now you can also give more than one arg and it works the same way with each one as it did before if you gave it a single item (i.e., "*" is appended, so "show var os cmd" shows all variables whose names begin with "os" or "cmd". You can also freely use pattern notation, including anchors. Hmmm, no, actually it's different in that now each includes an implied * before AND after, so "show var version" shows all variables whose name contain "version" rather than all variables whose names start with it. ckuus5.c, 6 Feb 2002. Cody Gould reported that WRITE FILE blah blah \fexec(anything) ... got a spurious "File or Log not open" error. This turns out to be a rather pervasive problem -- whenever you use \fexec() it calls the parser recursively and this can run roughshod over global variables, such as our innocent little x, y, and s. The fix in this case was to put x and y on the stack. The same thing probably needs doing in about 10,000 other places. Too bad C isn't Algol. ckuusr.c, 6 Feb 2002. Minor fix to SHO VAR -- the "^" anchor wasn't working (e.g. "show var ^os"). ckuus5.c, 6 Feb 2002. Fixes from Jeff for FTP file-transfer character-set translation in K95 and in WIKSD, plus updated K95 SSH help text. ckcftp.c, ckcfns.c, ckuus2.c, 7 Feb 2002. Server has its date set in the past. Client says "remote dir". Server sends A packet containing old date. If client has FILE COLLISION UPDATE, it rejects the directory listing. Changed gattr() to only reject real files (introduced by F packet), not X-packet material like directory listings. ckcfn3.c, 7 Feb 2002. Up-down arrow keys for command recall. People have been asking for it for years but now it's actually important because of PDAs that don't have Ctrl keys. Would have been trivial except that we use getchar() rather than coninc() for reading from the keyboard in Unix so conchk() doesn't help. In fact there are lots of other places where conchk() is used this way and works only by accident. The only reason we never noticed a problem before is that characters don't usually arrive from the keyboard that fast. But when an arrow key sends "ESC [ A" all once, the stdin buffer gets some extra stuff in it, which getchar() will return next time, but which coninc()/conchk() will never see. So I added a new cmdconchk() routine which, if the keyboard is being read with getchar() rather than coninc(), looks at the stdin buffer. Unfortunately, however, there is no API for this, nor is there any standard way to access the stdin buffer directly. So first I did it for Solaris. Then to make it portable requires a survey of the headers for every platform. I found four major variations: stdin->_r: {Free,Open,Net}BSD, BSDI stdin->_cnt: SunOS, Solaris, HP-UX 5-6, AIX, VMS, SINIX, IRIX 5.3-6.5, DGUX 4.2BSD, 4.3BSD, OSF/1..Tru64, QNX4, Unixware 1.0-2.1.0 stdin->__cnt: HP-UX 7-11, SCO: OSR5.0.6a, Unixware 2.1.3-7.x, OU8, UNIX 3.2v4.x Subtract read from end pointer (_IO_file_flags defined): Linux (tested on RH 5.2 thru 7.1) The Linux method is new and different to account for multibyte characters. All the others assume character == byte. For docs: ANSI only, 7-bit only; both application and cursor modes are accepted. Only up and down arrow are handled; left and right arrows cause a beep. ckucmd.c, 8 Feb 2002. Build-all: Discovered that changing CTTNAM from TT: to SYS$INPUT: in VMS (which was done on 3 Jan 2002 to work around problems starting Kermit in batch, spawn'd, etc) breaks Kermit on VMS 5.5/VAX (concb() fails with "lacks sufficient privilege"; if you enable all privs Kermit starts but then spews out a constant stream of BEL characters). If you put dftty back to "TT:", everything is fine -- I have no idea why, so I used #ifdef VMSV70 to decide, which is totally crude. Next I had to find where the boundary really is: VAX vs Alpha? VAX C vs DEC C? Or between VMS releases? Built on: . VMS 6.2 Alpha (DEC C) - OK with TT: . VMS 6.2 Alpha (DEC C) - OK with SYS$INPUT: <-- keep this one . VMS 7.1 VAX (DEC C) So the final condition is #ifdef VMSV60. ckvker.com, ckvtio.c, ckuus5.c. QNX 6 needed some attention too: . Whoever did the makefile target made the default port "/dev/ser1". . Arrow keys... But I gave up on getting arrow keys to work -- it should be just like *BSD, but for some reason gcc complains that struct FILE has no _r member, even though it does (getchar uses it). Checked stdio.h on Mac OS X and it looks like the *BSDs. --- C-Kermit 8.0.201 --- Removed -g from solaris2xg+krb5+krb4+openssl+shadow makefile target -- it was producing a 15MB binary! makefile, 14 Feb 2002. Fixed a couple thinkos in "make install": $(DESTDIR) should not have been included in the tests for whether INFODIR or SRCDIR were desired. makefile, 14 Feb 2002. ***********************