[EMAIL PROTECTED] (Thomas Bushnell, BSG) writes:

> All input parity checking is done by term itself, and the device
> should just do none (or at least provide a way to turn it off).

Oh, things aren't quite right here yet.

First, note that the arg to input_character is a full int.  A simple
char is not enough; if the incoming byte has 8 bits and parity, then
that's 9 bits and it won't fit.

There is nothing in serial communication to distinguish parity from an
extra bit.  If the user sets INPCK, then the last bit coming in is
parity, and gets checked.  If ISTRIP is set, then any parity bit is
stripped.

What the lower half should do is treat the parity bit like just
another bit and provide it as part of the data.  Because it can't
distinguish a parity bit from a data bit, it can't treat it as
anything but the most significant bit of the result.

If a short byte comes in, it should pad with zeros.  If a long byte
comes in, it should probably take the first N bits as data, and make
the rest zeroes.  Both these solutions result in the parity bit as
seen by munge.c to be zero; that means that at least it won't break
the no-parity case.  It's not important what exactly happens here,
however, and there may well be some hardware which simply treats all
such cases as framing errors.

Then, munge.c needs to DTRT.  Unfortunately, the current code is buggy
in that it always assumes that the parity bit is at 0x80.  To fix the
bug, reference needs to be made to the current byte side by the
relevant checks in checkoddpar, checkevenpar, and the ISTRIP handling.

Thomas

_______________________________________________
Bug-hurd mailing list
[EMAIL PROTECTED]
http://mail.gnu.org/mailman/listinfo/bug-hurd

Reply via email to