[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
eliminate_phantom_keys
vrkiu に入った eliminate_phantom_keys() なんですが、
どうも調子が悪いようなので、直してみました。
# 歯切れが悪いのは、あんまり自信がないから...
気がついたのは、echo $TERM と入力したときで、
1) SHIFT と R M が同時に入らないのは良いとして..
R を離しても M が入らない。
2) さらに時々 M ではなく DEL が入る。
という不具合がありました。
1) の原因は、たぶん chip->kc_scandata を変更してしまっていることの
ような気がします。
=> chip->kc_scandata を変更しないように修正。
2) の原因は、たぶん スキャン中に入力すると、4 つのキーじゃなくて
3 つのキーが入るせいだと思います。
(2 bit 立っているラインが先に 見付かるとは限らない)
=> ループの構造を変更することによって対処。
--- vrkiu.c.org Mon Aug 28 11:45:06 2000
+++ vrkiu.c Mon Aug 28 12:35:43 2000
@@ -564,12 +564,13 @@
p = (unsigned char *)scandata;
s = (unsigned char *)chip->kc_scandata;
- for (i = 0; i < KIU_NSCANLINE - 1; i++) {
+ for (i = 0; i < KIU_NSCANLINE; i++) {
if (countbits(p[i]) > 1) {
- for (j = i + 1; j < KIU_NSCANLINE; j++) {
+ for (j = 0; j < KIU_NSCANLINE; j++) {
+ if (i == j) continue;
if ((mask = p[i] & p[j]) != 0) {
- s[i] |= (p[i] & mask) ^ s[i];
- s[j] |= (p[j] & mask) ^ s[j];
+ p[i] &= ~mask | s[i];
+ p[j] &= ~mask | s[j];
}
}
}
--- ここまで
--
鈴木 康司 @NECソリューションズ
suz@hpc.bs1.fc.nec.co.jp
TEL 042-333-6465