[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