[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: mgl2 update (Re: pwctl[12] on docomoba2)
鈴木(康)です。
<20000829135736P.jun@soum.co.jp>の記事において
jun@soum.co.jpさんは書きました。
| From: suz@hpc.bs1.fc.nec.co.jp (Koji Suzuki)
| Subject: mgl2 update (Re: pwctl[12] on docomoba2)
| Date: Tue, 29 Aug 2000 12:42:34 +0900 (JST)
|
| > BackSpace と Del が同じ キーコードになるのは 構わないと思うんですが、
|
| 同じコードになっているのはemacsを使ったとき不便なので、
| 直そうかと思うのですが、同じコードじゃないと困る!って方は
| いらっしゃいますか?
MGL で RAW モード 対応のコードを作っていて気がついたことがあります。
RAW モードで取得できる コードが 14 なのですが、scancode 一般にはこの
コードは、BackSpace です。
Delete キーの scancode は 一般に 83 なので RAW モード自体の コードが
逆になっているみたいです。
i386 も逆になっているのか hpcmips だけが逆になっているのか知らないのですが、
もし、hpcmips だけなら、ついでに 合わせてもらえると嬉しいです。
あと、RAW モードでは、オートリピートは効かないみたいなのですが、
i386 などでも同じなのでしょうか?
( i386 は 、Linux でも FreeBSD でも オートリピートが効くみたい)
調べるためのコード付けますので、よかったら調べてもらえませんでしょうか?
--- ここから
#include <stdio.h>
#include <sys/termios.h>
#include <sys/time.h>
#ifdef __FreeBSD__
#include <machine/console.h>
#endif
#ifdef __NetBSD__
#include <dev/wscons/wsconsio.h>
#endif
#ifdef linux
#include <linux/vt.h>
#include <linux/kd.h>
#endif
static struct termios term_org;
main()
{
int i,ret;
int mode;
char buf[10];
struct termios term;
tcgetattr(0, &term_org);
term = term_org;
term.c_iflag = IGNPAR | IGNBRK;
term.c_oflag = 0;
term.c_cflag = CREAD | CS8;
term.c_lflag &= ~(ICANON | ECHO | ISIG);
term.c_cc[VTIME] = 0;
term.c_cc[VMIN] = 0;
tcsetattr(0, TCSANOW, &term);
#ifdef __NetBSD__
mode = WSKBD_RAW;
ret = ioctl(0, WSKBDIO_SETMODE, &mode);
if (ret != 0) {
perror("WSKBDIO_SETMODE RAW");
exit(1);
}
#endif
#ifdef __FreeBSD__
ret = ioctl(0, KDSKBMODE, K_CODE);
#endif
#ifdef linux
ret = ioctl(0, KDSKBMODE, K_MEDIUMRAW);
#endif
#ifdef __NetBSD__
{
int i;
struct wskbd_map_data map;
struct wscons_keymap keymap[1024];
map.maplen = 1024;
map.map = keymap;
ret = ioctl(0, WSKBDIO_GETMAP, &map);
if (ret < 0) {
perror("WSKBDIO_GETMAP");
}
printf("maplen = %d\n",map.maplen);
#if 0
for (i=0; i< map.maplen; i++) {
printf("%d %x %x %x %x\n",keymap[i].command
,keymap[i].group1[0]
,keymap[i].group1[1]
,keymap[i].group2[0]
,keymap[i].group2[1]);
}
#endif
{
struct wskbd_keyrepeat_data rd;
ret = ioctl(0, WSKBDIO_GETKEYREPEAT,&rd);
printf("%d %d\n",rd.del1,rd.delN);
}
}
#endif
for (;;) {
do {
ret = read(0,buf,1);
} while (ret == 0);
printf("%2d %03d %s\r\n",ret,buf[0] & 0x7f
,(buf[0] & 0x80)?"Release":"Press");
if ((buf[0] & 0xff) == 0x81) break;
}
#ifdef __NetBSD__
mode = WSKBD_TRANSLATED;
ret = ioctl(0, WSKBDIO_SETMODE, &mode);
#endif
#ifdef __FreeBSD__
ret = ioctl(0, KDSKBMODE, K_XLATE);
#endif
#ifdef linux
ret = ioctl(0, KDSKBMODE, K_XLATE);
#endif
tcsetattr(0, TCSANOW, &term_org);
}
--- ここまで
--
鈴木 康司 @NECソリューションズ
suz@hpc.bs1.fc.nec.co.jp
TEL 042-333-6465