[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[mgp-users-jp 00608] Re: xmindpath IR-55 patch
- To: mgp-users-jp@mew.org
- Subject: [mgp-users-jp 00608] Re: xmindpath IR-55 patch
- From: Yukimitsu Izawa <izawa@jaist.ac.jp>
- Date: Tue, 21 Sep 1999 23:25:19 +0900
- In-reply-to: Your message of "Tue, 21 Sep 1999 22:24:34 +0900" <>
- Posted: Tue, 21 Sep 1999 23:27:14 +0900
- References: <>
- Reply-to: mgp-users-jp@mew.org
From: Yukimitsu Izawa <izawa@jaist.ac.jp>
Subject: Re: [mgp-users-jp 00606] Re: xmindpath IR-55 patch
> From: itojun@iijlab.net
> Subject: [mgp-users-jp 00606] Re: xmindpath IR-55 patch
> >
> > 両方で(command line option?)動くようにしてもらえませんか?
> > そしたらmergeできますんで。
>
> 了解です。
> コマンドラインオプション(-ir55 か?)で切り替えられるようにします。
ということで、-t オプションで、pocketpoint と ir55 を切り替えられるよ
うにしました。
-- izawa
xmindpath を MINDPATH IR-55 に対応させるためのパッチ
Copyright (C) 1999 Yukimitsu Izawa <izawa@jaist.ac.jp>
このパッチは、xmindpath をIR-55 でも使えるようにするためのパッチです。
IR-55 については、http://www.mindpath.com/Products/ir50fx.htm を
ご参照下さい。
このパッチを適用すると、
* IR-55 で以下のことが可能になります。
+ 16方向にマウスポインタを移動させることができます。
+ 左右のマウスクリックが Button{1,2}です。
+ 方向パッドの真ん中を押すと Button3 です。
* -t オプションで使用するデバイスを指定することができます。
-t pocketpoint (デフォルト) で PocketPoint です。
-t ir55 で IR-55 です。
が可能になります。
このパッチを適用したあと、autoconf を実行してください。
パッチによる変更が、configure に反映されます。
diff -Naur xmindpath-orig/configure.in xmindpath/configure.in
--- xmindpath-orig/configure.in Tue Sep 21 21:44:24 1999
+++ xmindpath/configure.in Tue Sep 21 23:09:24 1999
@@ -11,9 +11,10 @@
LIBS="$LIBS $X_PRE_LIBS $X_LIBS -lX11 $X_EXTRA_LIBS"
AC_CHECK_LIB(Xext, XextAddDisplay)
AC_CHECK_LIB(Xtst, XTestFakeKeyEvent)
+AC_CHECK_LIB(m, sin)
dnl Checks for header files.
-AC_CHECK_HEADERS(fcntl.h paths.h sys/file.h sys/time.h unistd.h)
+AC_CHECK_HEADERS(fcntl.h paths.h sys/file.h sys/time.h unistd.h math.h)
dnl Checks for typedefs, structures, and compiler characteristics.
AC_HEADER_TIME
diff -Naur xmindpath-orig/main.c xmindpath/main.c
--- xmindpath-orig/main.c Tue Sep 21 21:44:24 1999
+++ xmindpath/main.c Tue Sep 21 23:20:55 1999
@@ -42,13 +42,17 @@
#include <X11/X.h>
#include <X11/extensions/XTest.h>
#include <X11/keysym.h>
+#include <math.h>
+
+#define PI_8 0.39269908169872415481
+#define MOVE_DOTS 10
#ifdef X_DISPLAY_MISSING
# error this program cannot be compiled without X11.
#endif
#ifndef REMOTE_DEVICE
-# define REMOTE_DEVICE "/dev/tty02" /*biased to VAIO505 :-P*/
+# define REMOTE_DEVICE "/dev/tty01"
#endif
static char *remote = REMOTE_DEVICE;
@@ -61,20 +65,49 @@
static uid_t uid, euid;
static gid_t gid, egid;
static int uidswapped = 0;
+static char *irtype = "pocketpoint";
static void usage __P((void));
static void mainloop __P((int));
static void buttonpress __P((int, int));
+static void motionmouse __P((int, int));
static int uucplock __P((char *));
static int uucpunlock __P((char *));
static RETSIGTYPE sigtrap __P((int));
static void daemonuid __P((void));
static void useruid __P((void));
-#define EFFECT 0x15
-#define LEFT 0x16
-#define RIGHT 0x17
-#define RELEASE 0x55
+
+/* generic */
+#define RELEASE 0x55
+
+/* PocketPoint */
+#define PP_EFFECT 0x15
+#define PP_LEFT 0x16
+#define PP_RIGHT 0x17
+
+
+/* IR-55 */
+#define IR55_EFFECT 0x5a
+#define IR55_LEFT 0x2d
+#define IR55_RIGHT 0x2b
+
+#define IR55_CUR_U 0x61
+#define IR55_CUR_R 0x62
+#define IR55_CUR_D 0x63
+#define IR55_CUR_L 0x64
+#define IR55_CUR_UR 0x65
+#define IR55_CUR_DR 0x66
+#define IR55_CUR_DL 0x67
+#define IR55_CUR_UL 0x68
+#define IR55_CUR_UUR 0x69
+#define IR55_CUR_URR 0x6a
+#define IR55_CUR_DRR 0x6b
+#define IR55_CUR_DDR 0x6c
+#define IR55_CUR_DDL 0x6d
+#define IR55_CUR_DLL 0x6e
+#define IR55_CUR_ULL 0x6f
+#define IR55_CUR_UUL 0x70
int
main(argc, argv)
@@ -93,7 +126,7 @@
egid = getegid();
useruid();
- while ((ch = getopt(argc, argv, "df:v")) != EOF) {
+ while ((ch = getopt(argc, argv, "df:t:v")) != EOF) {
switch (ch) {
case 'd':
debug++;
@@ -101,6 +134,9 @@
case 'f':
remote = optarg;
break;
+ case 't':
+ irtype = optarg;
+ break;
case 'v':
verbose++;
break;
@@ -111,6 +147,12 @@
}
argc -= optind;
argv += optind;
+
+ /* check irtype */
+ if ( strcmp (irtype, "ir55") && strcmp (irtype, "pocketpoint")){
+ fprintf(stderr, "Unknown device type %s\n",irtype);
+ exit (0);
+ }
fprintf(stderr, "initializing...\r");
@@ -174,7 +216,8 @@
static void
usage()
{
- fprintf(stderr, "usage: xmindpath [-dv] [-f dev]\n");
+ fprintf(stderr, "usage: xmindpath [-dv] [-f dev] [-t devtype]\n");
+ fprintf(stderr, " devtype: pocketpoint(default) or ir55\n");
exit(0);
}
@@ -212,12 +255,49 @@
len = read(fd, buf, sizeof(buf));
for (i = 0; i < len; i++) {
/* filter out bogus remote commander code */
+
switch (buf[i]) {
- case LEFT:
- case RIGHT:
- case EFFECT:
+ case IR55_LEFT:
+ case IR55_RIGHT:
+ case IR55_EFFECT:
+ case IR55_CUR_U:
+ case IR55_CUR_R:
+ case IR55_CUR_D:
+ case IR55_CUR_L:
+ case IR55_CUR_UR:
+ case IR55_CUR_DR:
+ case IR55_CUR_DL:
+ case IR55_CUR_UL:
+ case IR55_CUR_UUR:
+ case IR55_CUR_URR:
+ case IR55_CUR_DRR:
+ case IR55_CUR_DDR:
+ case IR55_CUR_DDL:
+ case IR55_CUR_DLL:
+ case IR55_CUR_ULL:
+ case IR55_CUR_UUL:
+
+ if (strcmp(irtype, "ir55")){
+ dprintf((stderr, "bogus char: %02x\n",
+ buf[i]));
+ continue;
+ }
+ break;
+
+ case PP_LEFT:
+ case PP_EFFECT:
+ case PP_RIGHT:
+
+ if (strcmp(irtype, "pocketpoint")){
+ dprintf((stderr, "bogus char: %02x\n",
+ buf[i]));
+ continue;
+ }
+ break;
+
case RELEASE:
break;
+
default:
dprintf((stderr, "bogus char: %02x\n",
buf[i]));
@@ -225,15 +305,18 @@
}
switch (buf[i]) {
- case LEFT:
+ case PP_LEFT:
+ case IR55_LEFT:
dprintf((stderr, "left\n"));
buttonpress(Button3, 1);
break;
- case RIGHT:
+ case PP_RIGHT:
+ case IR55_RIGHT:
dprintf((stderr, "right\n"));
buttonpress(Button1, 1);
break;
- case EFFECT:
+ case PP_EFFECT:
+ case IR55_EFFECT:
dprintf((stderr, "effect\n"));
buttonpress(Button2, 1);
break;
@@ -243,6 +326,24 @@
buttonpress(Button2, 0);
buttonpress(Button3, 0);
break;
+ case IR55_CUR_U:
+ case IR55_CUR_R:
+ case IR55_CUR_D:
+ case IR55_CUR_L:
+ case IR55_CUR_UR:
+ case IR55_CUR_DR:
+ case IR55_CUR_DL:
+ case IR55_CUR_UL:
+ case IR55_CUR_UUR:
+ case IR55_CUR_URR:
+ case IR55_CUR_DRR:
+ case IR55_CUR_DDR:
+ case IR55_CUR_DDL:
+ case IR55_CUR_DLL:
+ case IR55_CUR_ULL:
+ case IR55_CUR_UUL:
+ motionmouse(buf[i], 0);
+ break;
default:
dprintf((stderr, "%02x\n", buf[i]));
continue;
@@ -275,6 +376,78 @@
XTestFakeButtonEvent(display, button, state ? True : False, 0);
buttonstate[offset] = state;
+ XFlush(display);
+}
+
+/* fake mouse button press */
+static void
+motionmouse(direction, state)
+ int direction;
+ int state;
+{
+
+ switch(direction){
+ case IR55_CUR_U:
+ XTestFakeRelativeMotionEvent (display, 0 ,-MOVE_DOTS, 0);
+ break;
+ case IR55_CUR_R:
+ XTestFakeRelativeMotionEvent (display, MOVE_DOTS, 0, 0);
+ break;
+ case IR55_CUR_D:
+ XTestFakeRelativeMotionEvent (display, 0, MOVE_DOTS, 0);
+ break;
+ case IR55_CUR_L:
+ XTestFakeRelativeMotionEvent (display, -MOVE_DOTS, 0, 0);
+ break;
+ case IR55_CUR_UR:
+ XTestFakeRelativeMotionEvent (display, sqrt(MOVE_DOTS),
+ -sqrt(MOVE_DOTS), 0);
+ break;
+ case IR55_CUR_DR:
+ XTestFakeRelativeMotionEvent (display, sqrt(MOVE_DOTS),
+ sqrt(MOVE_DOTS), 0);
+ break;
+ case IR55_CUR_DL:
+ XTestFakeRelativeMotionEvent (display, -sqrt(MOVE_DOTS),
+ sqrt(MOVE_DOTS), 0);
+ break;
+ case IR55_CUR_UL:
+ XTestFakeRelativeMotionEvent (display, -sqrt(MOVE_DOTS),
+ -sqrt(MOVE_DOTS), 0);
+ break;
+ case IR55_CUR_UUR:
+ XTestFakeRelativeMotionEvent (display, sin(PI_8)*MOVE_DOTS,
+ -(cos(PI_8)*MOVE_DOTS), 0);
+ break;
+ case IR55_CUR_URR:
+ XTestFakeRelativeMotionEvent (display, cos(PI_8)*MOVE_DOTS,
+ -(sin(PI_8)*MOVE_DOTS), 0);
+ break;
+ case IR55_CUR_DRR:
+ XTestFakeRelativeMotionEvent (display, cos(PI_8)*MOVE_DOTS,
+ sin(PI_8)*MOVE_DOTS, 0);
+ break;
+ case IR55_CUR_DDR:
+ XTestFakeRelativeMotionEvent (display, sin(PI_8)*MOVE_DOTS,
+ cos(PI_8)*MOVE_DOTS, 0);
+ break;
+ case IR55_CUR_DDL:
+ XTestFakeRelativeMotionEvent (display, -(sin(PI_8)*MOVE_DOTS),
+ cos(PI_8)*MOVE_DOTS, 0);
+ break;
+ case IR55_CUR_DLL:
+ XTestFakeRelativeMotionEvent (display, -(cos(PI_8)*MOVE_DOTS),
+ sin(PI_8)*MOVE_DOTS, 0);
+ break;
+ case IR55_CUR_ULL:
+ XTestFakeRelativeMotionEvent (display, -(cos(PI_8)*MOVE_DOTS),
+ -(sin(PI_8)*MOVE_DOTS), 0);
+ break;
+ case IR55_CUR_UUL:
+ XTestFakeRelativeMotionEvent (display, -(sin(PI_8)*MOVE_DOTS),
+ -(cos(PI_8)*MOVE_DOTS), 0);
+ break;
+ }
XFlush(display);
}