home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Columbia Kermit
/
kermit.zip
/
archives
/
uclkermit.zip
/
cuclker.bwr
next >
Wrap
Internet Message Format
|
1991-10-23
|
3KB
Date: Fri, 18 Oct 91 11:48:11 edt
From: John Ball <jball@sleepy.haystack.edu>
To: kermit@watsun.cc.columbia.edu
Subject: Problem with UCL Kermit
Cc: cjk%cs.ucl.ac.uk.bitnet@cunyvm.cuny.edu,
info-kermit%cs.ucl.ac.uk.bitnet@cunyvm.cuny.edu,
kad@fourier.haystack.edu, mike@wells.haystack.edu,
syskermit%vax1.lancs.ac.uk.bitnet@cunyvm.cuny.edu
This is a note about a problem in and a fix for UCL
(University College London) Kermit in files cuclker.c and cuclx5.c
(for Unix System 5) in the kermit/d subdirectory on
watsun.cc.columbia.edu. UCL Kermit is a "trim" version of Kermit
for Unix and was officially released by Columbia some years ago.
We at Haystack have just begun using it on a 386-based PC with Esix
Unix System V.3.2 but only after making the fix described below.
The problem involves signed char variables. If your C
compiler takes chars to be signed, then you'll have the following
problem (and perhaps others that we haven't found) when
transferring binary files. The symptom (well, one of the symptoms)
is that an extra block of some 50 to 80 bytes gets inserted into
sent binary files whenever the following block begins with FE
(hex). The extra block is approximately a repeat of the block
preceding the one beginning FE. The problem arises in bufill() and
encode(), which use oldt = -2 (an impossible last char, according
to the associated comment) to tell encode() that the repeat
mechanism should start afresh. Now -2 as a int is, indeed, an
impossible char, but FE (hex) as a signed char is just -2, and
that's what it becomes after being processed through ascedit(),
which is type char.
Probably the best fix is to persuade your C compiler to treat
all chars as unsigned. Some C compilers can do this if asked, and
some C compilers do it without being asked. Presumably this is why
the folks at UCL didn't have this problem. An alternative fix is
to change oldt = -2 (in bufill() and in encode()) to a number, say
-2000, that is an impossible char regardless of sign. This leaves
the possibility of some other yet-undiscovered still-more-subtle
problem. A third alternative is to edit the files to change some
or all of the char functions to unsigned char. We think that int
would also work. You'll need to change each function in at least
two places, one in each of the two *.c files.
We suggest that a copy of this note should accompany the UCL
Kermit distribution perhaps in cuclker.hlp.
John Ball (jball@wells.haystack.edu) 1991 October 18
M.I.T. Haystack Observatory
Off Route 40
Westford, Massachusetts 01886 U.S.A.