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