[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[mgp-users-jp 00605] xmindpath IR-55 patch



井澤@JAIST と申します。

  MINDPATH IR-55 を入手したので、xmindpath を IR-55 で使えるようにするパッ
  チを作ってみました。

  このパッチをそのまま適用すると、PocketPoint では動かなくなるので、
  configure のオプションか何かで切り替えられるようにするといいのかも知れ
  ないですね。

# MINDPATH IR-55 って共立で100円で売られているのでお買得かも。

--
北陸先端科学技術大学院大学
情報科学研究科 情報システム学専攻
ソフトウェア計画構成学講座
篠田研究室 D3 井澤 ゆきみつ
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 を
ご参照下さい。

このパッチを適用すると、

  * 16方向にマウスポインタを移動させることができます。
  * 左右のマウスクリックが Button{1,2}です。
  * 方向パッドの真ん中を押すと Button3 です。

が可能になります。

このパッチを適用したあと、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 21:45:03 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 21:52:24 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;
@@ -65,16 +69,33 @@
 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 EFFECT	0x5a
 #define RELEASE	0x55
+#define LEFT	0x2d
+#define RIGHT	0x2b
+#define CUR_U   0x61
+#define CUR_R   0x62
+#define CUR_D   0x63
+#define CUR_L   0x64
+#define CUR_UR  0x65
+#define CUR_DR  0x66
+#define CUR_DL  0x67
+#define CUR_UL  0x68
+#define CUR_UUR 0x69
+#define CUR_URR 0x6a
+#define CUR_DRR 0x6b
+#define CUR_DDR 0x6c
+#define CUR_DDL 0x6d
+#define CUR_DLL 0x6e
+#define CUR_ULL 0x6f
+#define CUR_UUL 0x70
 
 int
 main(argc, argv)
@@ -217,7 +238,23 @@
 				case RIGHT:
 				case EFFECT:
 				case RELEASE:
-					break;
+				case CUR_U:
+				case CUR_R:
+				case CUR_D:
+				case CUR_L:
+				case CUR_UR:
+				case CUR_DR:
+				case CUR_DL:
+				case CUR_UL:
+				case CUR_UUR:
+				case CUR_URR:
+				case CUR_DRR:
+				case CUR_DDR:
+				case CUR_DDL:
+				case CUR_DLL:
+				case CUR_ULL:
+				case CUR_UUL:
+				  break;
 				default:
 					dprintf((stderr, "bogus char: %02x\n",
 						buf[i]));
@@ -243,6 +280,25 @@
 					buttonpress(Button2, 0);
 					buttonpress(Button3, 0);
 					break;
+				case CUR_U:
+				case CUR_R:
+				case CUR_D:
+				case CUR_L:
+				case CUR_UR:
+				case CUR_DR:
+				case CUR_DL:
+				case CUR_UL:
+				case CUR_UUR:
+				case CUR_URR:
+				case CUR_DRR:
+				case CUR_DDR:
+				case CUR_DDL:
+				case CUR_DLL:
+				case CUR_ULL:
+				case CUR_UUL:
+
+				  motionmouse(buf[i],0);
+				  break;
 				default:
 					dprintf((stderr, "%02x\n", buf[i]));
 					continue;
@@ -275,6 +331,74 @@
 
 	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 CUR_U:
+	  XTestFakeRelativeMotionEvent (display, 0 ,-MOVE_DOTS, 0);
+	  break;
+	case CUR_R:
+	  XTestFakeRelativeMotionEvent (display, MOVE_DOTS, 0, 0);
+	  break;
+	case CUR_D:
+	  XTestFakeRelativeMotionEvent (display, 0, MOVE_DOTS, 0);
+	  break;
+	case CUR_L:
+	  XTestFakeRelativeMotionEvent (display, -MOVE_DOTS, 0, 0);
+	  break;
+	case CUR_UR:
+	  XTestFakeRelativeMotionEvent (display, sqrt(MOVE_DOTS), -sqrt(MOVE_DOTS), 0);
+	  break;
+	case CUR_DR:
+	  XTestFakeRelativeMotionEvent (display, sqrt(MOVE_DOTS), sqrt(MOVE_DOTS), 0);
+	  break;
+	case CUR_DL:
+	  XTestFakeRelativeMotionEvent (display, -sqrt(MOVE_DOTS), sqrt(MOVE_DOTS), 0);
+	  break;
+	case CUR_UL:
+	  XTestFakeRelativeMotionEvent (display, -sqrt(MOVE_DOTS), -sqrt(MOVE_DOTS), 0);
+	  break;
+	case CUR_UUR:
+	  XTestFakeRelativeMotionEvent (display, sin(PI_8)*MOVE_DOTS,
+					-(cos(PI_8)*MOVE_DOTS), 0);
+	  break;
+	case CUR_URR:
+	  XTestFakeRelativeMotionEvent (display, cos(PI_8)*MOVE_DOTS,
+					-(sin(PI_8)*MOVE_DOTS), 0);
+	  break;
+	case CUR_DRR:
+	  XTestFakeRelativeMotionEvent (display, cos(PI_8)*MOVE_DOTS,
+					sin(PI_8)*MOVE_DOTS, 0);
+	  break;
+	case CUR_DDR:
+	  XTestFakeRelativeMotionEvent (display, sin(PI_8)*MOVE_DOTS,
+					cos(PI_8)*MOVE_DOTS, 0);
+	  break;
+	case CUR_DDL:
+	  XTestFakeRelativeMotionEvent (display, -(sin(PI_8)*MOVE_DOTS),
+					cos(PI_8)*MOVE_DOTS, 0);
+	  break;
+	case CUR_DLL:
+	  XTestFakeRelativeMotionEvent (display, -(cos(PI_8)*MOVE_DOTS),
+					sin(PI_8)*MOVE_DOTS, 0);
+	  break;
+	case CUR_ULL:
+	  XTestFakeRelativeMotionEvent (display, -(cos(PI_8)*MOVE_DOTS),
+					-(sin(PI_8)*MOVE_DOTS), 0);
+	  break;
+	case CUR_UUL:
+	  XTestFakeRelativeMotionEvent (display, -(sin(PI_8)*MOVE_DOTS),
+					-(cos(PI_8)*MOVE_DOTS), 0);
+	  break;
+	}
 	XFlush(display);
 }