info-kermit@ucbvax.ARPA (04/03/85)
From: Frank da Cruz <SY.FDC@CU20B.ARPA> Info-Kermit Digest Wed, 3 Apr 1985 Volume 2 : Number 17 C-Kermit Bug List ---------------------------------------------------------------------- Here is the current bug list for C-Kermit Version 4.2, along with a list of implementations. This file is kept on line in the Kermit distribution areas as KER:CKERMI.BWR, but is being sent to Info-Kermit for the benefit of the many subscribers who don't have access to FTP or KERMSRV. The next release, which will incorporate fixes for most of the reported problems and support for most of the additional systems, will still be several weeks in coming; still plenty of time to send in more bug reports and suggestions. -- SUPPORT FOR ADDITIONAL SYSTEMS: -- 4.2BSD: "make bsd" works. 4.1BSD: C-Kermit built with "make bsd" does not work under 4.1. The date/ time stuff and line locking stuff are completely different from 4.2. Also, the directory format is different, so traverse() doesn't work. Specific support needs to be added for 4.1. Apparently very similar to the TOWER1 support. 4.1 support being added by Charles Brooks (brooks@edn-vax), and also by Ken Poulton (poulton@hplabs.csnet). 4.2 can be differentiated from 4.1 with "#ifdef MAXNAMLEN". ATT 3Bx systems: works ok with "make sys3", but works better if TCSETA changed to TCSETAW to allow i/o to drain before changing terminal modes; probably applies to all sys3/sys5 systems (chris@columbia-20). VAX/VMS: Added by stew%lhasa.uucp@harvard, not available yet (see below). Regulus: Submitted by Joe Smiley, DuPont Co. Extensive changes to 4.0 were too hard to fit into 4.2; hope Joe can add the Regulus support to 4.2. Motorola Four Phase 6300 - works fine with "make sys3" (KLaurent@DENVER) Callan Unistar 300 (68000) with Unisoft System V -- works fine with "make sys3" (EBM@MIT-XX). Cadmus 68000: Compiles ok with "make sys3", but core dumps because malloc() not declared (in wart and in ckzunx) as returning a char pointer; see below. NCR Tower, OS 1.02: Submitted by John Bray, based on 4.0, fitted into 4.2, but it doesn't work in 4.2; it will be fixed in next release. NCR Tower, System V: Works ok -- "make sys3" (except some problems reported when connected to IBM mainframes; see below). HP9000 Series 500: (from YEKTA@MIT-MC): Use "make sys3", but 1. Remove -i from CFLAGS & LI 2. In ckxunx.c, don't #include<sys/file.h> or ioctl.h. 3. In ckzunx.c, don't #include<sys/file.h>. HP9836U Series 200, HP-UX 2.0.0, rev B (BLO2@CMU-CC-TC): "make sys3", but need to add the following in ckxunx.c functions ttpkt() and conbin(); ttraw.c_cflag |= CS8; /* 8-bit chars */ ttraw.c_cflag &= ~(PARENB|CSTOPB|ISTRIP); /* no parity, 1 stop bit */ (This probably should be done in all sys3/sys5 systems). Plexus P-60 Works ok with "make sys3", but doesn't always hangup even when hupcl is on (Scott Weikart, Stanford). Masscomp/RTU 2.2: Works ok with "make sys3", except for line locking (Stan Barber, neuro1!sob@rice). Pro/Venix 1.x: Performance improvements and ability to interrupt transfers in progress need to be (and will be) added. Currently there is no "line locking" to prevent interference with/by uucp. Anybody know how Venix does this? Pro/Venix 2.0 (field test): Works ok with "make sys3", except the "unsigned long" has to be changed to "long" in ckdebu.h; may be a bug in the new compiler (Dan Schullman, DEC). SUN, 4.2bsd: C-Kermit 4.0 with 4.2bsd support was reported to run OK on the SUN after some bugs with long strings, char vs int, etc were fixed. There is now a report that version 4.2 doesn't even compile on the SUN because of the ^L's in the source file (can this be true???), and that once compiled (by removing ^L's) it doesn't transfer files at all, but just times out after many retries of the first packet (this report from daver@cit-vax); oconnor@cdn9 reports that changing the definition of the local variable "c" in function "ttinl" from integer to char fixes the problem. Pyramid 90x, 4.2bsd: Apparently same problem (and same fix?) as reported for SUN, above. -- BUG LIST -- General problems: - Unnecessary timeouts occur at low baud rates when parity is being done; in ckfns.c, inchr() is being called by inlin() with a timeout interval so small that MAXTRY could be exceeded before the whole packet was read. - Conditionalizations are not done clearly. In some cases it might be better to have compile-time flags for features, rather than systems, or generic system names, rather than specific vendor/machine names, to avoid excessive nesting or OR'ing of compile-time variables (do all C compilers support ORing?). - It might also be better to have a -D in the makefile for the system name, rather than hard-coding it into the ck[xz]*.c modules. - Program's return code might be wrong in some cases (in 4.0, it was always zero; in 4.2 some attempt is made to return correct codes for failure and success). Also see note about VMS return codes, below. - "quiet" (-q) flag does not turn off all error messages. Direct use of fprintf(stderr,...) should be replaced by invocations of ermsg(). - The error messages should use the current prompt (changed via 'set prompt') rather than "C-Kermit" as a prefix, to make it easier to see which Kermit a message is coming from, if you have a C-Kermit on both ends of the line. - The default prompt should be set from the makefile with -DPROMPT. - Program still core dumps from time to time because of (f)printf(string) statements; "help remote" and "help set" tend to exhibit this behavior. These printf's must be replaced by (f)printf("%s",string), or puts() statements, or something like "while (*s) putc(xxx, *s++);". - Local mode file transfer display could be improved. First, for systems like Macintosh that have fancy screen management, the screen() function should be provided additional information as to what the arguments are -- filenames or whatever -- so it can display them more intelligently. Second, on tty-style displays, the "percent done" could be shown by doing something like "0...1...2...3...4...5...6...7...8...9...". - Interrupt handling is not done particularly well, and if the program crashes or is halted while it has the terminal in a not-normal mode during command parsing or file transfer, the terminal mode is not restored. Code should be added to trap quit or panic interrupts and restore the terminal before quitting or panicking. - The shell's interrupt, delete, and kill characters can interfere with those used by the Kermit command parser. C-Kermit should use those already set up in the user's environment (how to get them?). - status command needs timing info, maybe also effective baud rate. - "!" command should not require a space after, should use the user's customary shell rather than sh, and if issued without an argument should start an interactive shell. - Many people have asked for a system-wide startup file similar to the user's .kermrc file, perhaps with a conditional way to escape from it if the user has her own .kermrc file. This notion might be extended to include the entire hierarchy system -- home -- current directory. - It would also be desirable to have a way of specifying alternate startup files on the command line, so that aliases could be defined for running Kermit on certain lines, at certain speeds, etc. - A deeper problem with the initialization files is that the file is only taken when the program enters interactive command dialog. To be consistent, it should also be taken when the program is run via command line arguments. - Moving the program to VAX/VMS uncovered a few remaining Unixisms: . VMS uses program return codes with opposite sense from Unix; return code values must be conditionalized. . ".kermrc" doesn't work as a file name on most non-Unix systems. . There should be a more portable way of handling baud rates tables. ckzunx.c: - ckzunx currently goes to a lot of trouble to traverse the directory in order to expand "*" and "?" in wildcards. Maybe it should just fork the user's customary shell and have it do the expansion. This would allow fancier filespecs to be given, like "~/ck*.[cwh]". But it would slow down features like filename completion and menus in the interactive command parser. - malloc() should be declared "char *malloc()" for systems that have pointers and integers of different lengths. - In zsout() & friends, "fprintf(fp[n], s);" should be "fputs(s, fp[n]);" or 'fprintf(fp[n], "%s", s)', to prevent core dumps when s happens to contain a '%'. - In zltor(), dc (dot count) is incremented for all dots in the filespec; not good if filespec is something like "../foo.bar". Reset dc to zero whenever a "/" is encountered. ckxunx.c: - Many problems reported with "uucp line locking" -- . On some systems, uucp apparently ignores the lock and breaks in anyway. . On some systems, the lock directory is write-protected. . On some systems, the lock directory is read-protected. . Using dial commands and a login script pointed at a line already in use by uucp will hang up the line on uucp. Cure for this and some other similar problems: tty should not be opened before calling ttlock. Unfortunately, a lot of code will have to be added to take care of the many different ways that sites are set up to handle line contention and assignment, probably selectable by makefile compiler switches (see below). - Under certain conditions, alarms used to timeout blocked reads are not cleaned up after a timeout occurs. - There's no good way to select baud rates higher than 9600. Most Unix systems don't supply symbols for them (unless you use EXTA, EXTB), and even when they do, the program has no way of knowing whether a specific port serial controller supports those rates. - 4.2 bsd systems with dialout modems should do ioctl(ttyfd, TIOCCDTR, 0); sleep(1); to hang them up upon close. Other systems that don't have a hangup function might need a trick like setting the speed to 0. - Venix/11 version 1 does have a nondestructive way to inspect a tty input buffer after all, so the ttchk() and conchk() functions can be provided for Venix to speed up connect mode significantly. ckdial.c: - Some systems do not allow users to manipulate dialers directly. - Not easy to add support for new dialers. - Some systems never return from the 100-character rawmode read (it is assumed return is immediate, indicating how much was obtained from the input buffer). - Timed read for connect/no carrier message from modem within a general timer on the whole operation does not work on some systems. - Some systems need to have the modem explicitly hung up; close() isn't enough; e.g. ioctl(ttyfd,TIOCCDTR,0) on 4.2bsd. - On some systems, the entire output from the dialer (e.g. "CONNECT") cannot be read in a single gulp, so the buffer should be appended to between successive reads, not overwritten. ckus*.c: - Some help messages still produce core dumps on some systems. Diagnosis: the strings in these messages ('help remote', 'help set' are mentioned most frequently) are still too long for some systems. Cure: shorten them some more, and maybe replace for (i=0; *s[i]; ++i) fputs(s[i], stdout); with while (*s[0]) fputs(*s++, stdout); in hmsga() to prevent possible references to random memory. Also, replace all printf(msg) with printf("%s", msg); - The "directory" command produces a full recursive directory listing. It should only list the current directory. On bsd systems at least, the listing can be interrupted with a single ^C, which returns you to C-Kermit> command level. Diagnosis: ??? The program just does a system("ls -l"). Why doesn't this behave the same as "ls -l" typed at the shell? - Parser for the 'get' command doesn't respond well to editing; can go into infinite loops under some conditions. - The filename 'transaction.log' is too long for some systems, and gets truncated (no harm is done, but the user is not informed and may not be able to find the file). - The variables ncmd, nprm, nrmt are doubly defined. ckcmd.c: - Some systems (such as Venix/11) swallow the erase and kill characters when the terminal is in cbreak mode. If the erase and kill characters are are ^U and DEL, then these can't be used to edit C-Kermit interactive commands. Ditto for ^R. Diagnosis: sigh, let's hear for portability. Cure (if you can call it that): Add new SET commands to allow the erase, kill, and redisplay characters to be redefined. - There's no way to break a command line and continue on the next line. Cure: add code to allow "\" followed by CR (or LF, or FF) to accomplish this. Nobody really wants to put a real CR (LF, FF) in the middle of a command anyway, right? This will make take files and login scripts a lot more readable. - No way to put comments in take files. Cure: Add a ";" or "#" command? Trailing comments will be harder. Protocol (ckprot.w, ckfns*.c): - No way to interrupt a protocol transaction until after it starts successfully. For instance, no way to interrupt the timeouts and retransmissions of the initial packet when the other side is not responding, except for killing the whole program. Cure: check for keyboard "interrupts" during the send-init process. - When receiving from a non-timed-out Kermit and missing the Send-Init packet, no NAK is ever sent, and a deadlock occurs. Diagnosis: resend() is called to resend the previous packet; there was no previous packet, so it sends an empty line. Cure: Initialize the packet buffer with a NAK for packet 0? - When parity is in use and the other Kermit cannot do 8th bit prefixing, the user is not warned that binary files will not be transferred correctly. - 'set file names literal' does not work at all. ckconu.c: - There have been reports that on some systems (e.g. NCR tower with Sys 5) C-Kermit stops listening for the escape character during connect. In one case, it was reported that this happened only with IBM mainframes with "set flow none". - Doesn't do any particular kind of terminal emulation. It wasn't meant to. Filters can be used for this. - Performance is poor on systems that can't check the input buffer. - As structured, connect mode can't include commands to toggle logging on and off or to change settings, because forks can't share variables. cklogi.c: - Script facility needs ~d for send-delays, ~x for XON, ~w for wait-for- input timeout; these will probably be added. ckwart.c: - Has typedef for CHAR as "unsigned short" or "unsigned char". Cure: Have ckwart.c use the typedefs from ckdebu.h, like the regular Kermit modules do. - Should declare malloc "char *malloc()" for systems that have pointers and integers of different lengths. makefile: - Replace "wart ckprot.w ckprot.c" with "./wart ckprot.w ckprot.c" because "." might not be in the current path. - It was suggested that the compound entry for making ckprot.o should be broken into two entries, one for ckprot.o, one for ckprot.c, to prevent unecessary recompilations. - Some of the problems caused by access restrictions on the uucp lockfile directory might be addressed by having the makefile check and then setting an appropriate compile switch, e.g. if [ -w /usr/spool/uucp ] then make bsd "... -regular flags" else make bsd "... -DNOLOCKING" fi ------------------------------ End of Info-Kermit Digest ************************* -------