[comp.unix.microport] results of porting Kermit 4E

hedrick@athos.rutgers.edu (Charles Hedrick) (02/28/88)

I just finished porting Kermit 4E to my Microport System V/AT.  As
usual, simply typing "make sys3nid" (which is the setting for vanilla
System V, oddly enough) works correctly.  It works correctly in the
sense of building a kermit that works the same as it works on other
systems.  Unfortunately, the major new feature in 4E turns out not to
work on any of the systems I have access to.  This is the long packet
size feature.  The two kermits exchange information about what options
they support.  Unfortunately, the code used for generating the byte
that contains the capabilities appears to be wrong.  It results in
having the systems say that they don't support long packets.  The
expression is a long one involving several ? : constructs.  My C
documentation does not make clear what the relative precedence of ?
and | should be.  However both the Sun 3 and System V 286 compilers
take the opposite view from the authors of C Kermit.  By adding a few
()'s, we avoid the ambiguity.  There was also a problem that the
packet size sent for the benefit of old systems that don't support
long packets was miscalculated.  THey simply took the low-order byte
of the full packet size.  What they wanted was MIN (packetsize, 94),
94 being the maximum size allowed by old implementations.

The fixes are shown below.

This message is being sent to be info-kermit and the Microport
newsgroup.  For the benefit of Microport users, let me note that
Microport supplies a fairly recent version of kermit with the system,
version 4D.  The version being discussed here adds only the long
packet support.  (You might still find it useful to get the files,
since Microport doesn't seem to supply documentation.)  Kermit is
available via anonymous FTP from CU20B.COLUMBIA.EDU.  The files you
need are roughly ker:ckc*.*, ker:cku*, and ker:ckw*, but
ker:ckaaaa.hlp will give me information.  Kermit is also available at
Simtel20.  The index I have claims it is pd2:<unix.kermit>, although
today I was unable to get to those files to check them.

*** ckcfns.c.ORIG	Sat Feb 27 19:25:03 1988
--- ckcfns.c	Sun Feb 28 02:05:44 1988
***************
*** 607,613
  
  CHAR *
  rpar() {
!     data[1] = tochar(rpsiz);		/* Biggest packet I can receive */
      data[2] = tochar(rtimo);		/* When I want to be timed out */
      data[3] = tochar(mypadn);		/* How much padding I need (none) */
      data[4] = ctl(mypadc);		/* Padding character I want */

--- 607,616 -----
  
  CHAR *
  rpar() {
!     if (rpsiz > 94)
!       data[1] = tochar(94);
!     else
!       data[1] = tochar(rpsiz);		/* Biggest packet I can receive */
      data[2] = tochar(rtimo);		/* When I want to be timed out */
      data[3] = tochar(mypadn);		/* How much padding I need (none) */
      data[4] = ctl(mypadc);		/* Padding character I want */
***************
*** 626,632
      else
      	data[9] = '~'; 		
  
!     data[10] = tochar(atcapr?atcapb:0 | lpcapr?lpcapb:0 | swcapr?swcapb:0);
      data[capas+1] = tochar(swcapr ? wsize : 0);	/* Window size */
  
      rpsiz = urpsiz;			/* Long packets ... */

--- 629,635 -----
      else
      	data[9] = '~'; 		
  
!     data[10] = tochar((atcapr?atcapb:0) | (lpcapr?lpcapb:0) | (swcapr?swcapb:0));
      data[capas+1] = tochar(swcapr ? wsize : 0);	/* Window size */
  
      rpsiz = urpsiz;			/* Long packets ... */