[fa.info-kermit] Info-Kermit Digest V2 #17, C-Kermit Bug List

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
*************************
-------