[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