diff -cr svgalib-1.4.2/include/vgamouse.h svgalib-1.4.2-devel/include/vgamouse.h *** svgalib-1.4.2/include/vgamouse.h Fri Feb 11 06:45:25 2000 --- svgalib-1.4.2-devel/include/vgamouse.h Sun Aug 20 16:58:54 2000 *************** *** 23,29 **** #define MOUSE_IMPS2 11 #define MOUSE_PNP 12 #define MOUSE_WACOM_GRAPHIRE 13 ! #define MOUSE_LAST MOUSE_WACOM_GRAPHIRE #define MOUSE_ORIENTATION_VERTICAL 0 #define MOUSE_ORIENTATION_HORIZONTAL 1 --- 23,30 ---- #define MOUSE_IMPS2 11 #define MOUSE_PNP 12 #define MOUSE_WACOM_GRAPHIRE 13 ! #define MOUSE_DRMOUSE4DS 14 ! #define MOUSE_LAST MOUSE_DRMOUSE4DS #define MOUSE_ORIENTATION_VERTICAL 0 #define MOUSE_ORIENTATION_HORIZONTAL 1 diff -cr svgalib-1.4.2/src/config/libvga.config svgalib-1.4.2-devel/src/config/libvga.config *** svgalib-1.4.2/src/config/libvga.config Fri Feb 11 06:48:20 2000 --- svgalib-1.4.2-devel/src/config/libvga.config Sun Aug 20 17:41:19 2000 *************** *** 28,33 **** --- 28,34 ---- # mouse IMPS2 # Microsoft IntelliMouse or Logitech MouseMan+ on PS/2 port # mouse pnp # plug'n'pray # mouse WacomGraphire # Wacom Graphire tablet/mouse + # mouse DRMOUSE4DS # Digital Research double-wheeled mouse # mouse none # None mouse Microsoft Only in svgalib-1.4.2-devel/src/joystick: joystick.o diff -cr svgalib-1.4.2/src/mouse/ms.c svgalib-1.4.2-devel/src/mouse/ms.c *** svgalib-1.4.2/src/mouse/ms.c Fri Feb 11 06:45:25 2000 --- svgalib-1.4.2-devel/src/mouse/ms.c Sun Aug 20 18:18:38 2000 *************** *** 103,108 **** --- 103,109 ---- {0xc8, 0x08, 0x00, 0x00, 4}, /* IntelliMouse (PS/2) */ {0x40, 0x40, 0x40, 0x00, 3}, /* pnp */ {0x80, 0x80, 0x80, 0x00, 7}, /* Wacom Graphire */ + {0xc8, 0x08, 0x00, 0x00, 4}, /* DRMOUSE4DS (Digital Research 2-wheel PS/2) */ }; static void ms_setspeed(const int old, const int new, *************** *** 439,445 **** if ((__svgalib_mouse_fd = open(m_dev, O_RDWR | O_NDELAY )) < 0) return -1; ! if (m_type == MOUSE_BUSMOUSE || m_type == MOUSE_PS2 || m_type == MOUSE_IMPS2 || m_type == MOUSE_GPM) m_modem_ctl = 0; /* If no signal will change there is no need to restore --- 440,447 ---- if ((__svgalib_mouse_fd = open(m_dev, O_RDWR | O_NDELAY )) < 0) return -1; ! if (m_type == MOUSE_BUSMOUSE || m_type == MOUSE_PS2 ! || m_type == MOUSE_IMPS2 || m_type == MOUSE_GPM || m_type == MOUSE_DRMOUSE4DS) m_modem_ctl = 0; /* If no signal will change there is no need to restore *************** *** 497,503 **** usleep(75000); /* Start sending coordinates */ write(__svgalib_mouse_fd, "\rST\r", 4); ! } else if (m_type == MOUSE_IMPS2) { /* Initialize the mouse into wheel mode */ write(__svgalib_mouse_fd, "\363\310\363\144\363\120", 6); } else if (m_type == MOUSE_PNP) { --- 499,505 ---- usleep(75000); /* Start sending coordinates */ write(__svgalib_mouse_fd, "\rST\r", 4); ! } else if (m_type == MOUSE_IMPS2 || m_type == MOUSE_DRMOUSE4DS) { /* Initialize the mouse into wheel mode */ write(__svgalib_mouse_fd, "\363\310\363\144\363\120", 6); } else if (m_type == MOUSE_PNP) { *************** *** 558,564 **** MOUSE_RESETBUTTON; mouse_caps.axes = MOUSE_6DIM; break; ! case MOUSE_INTELLIMOUSE: case MOUSE_IMPS2: case MOUSE_WACOM_GRAPHIRE: --- 560,573 ---- MOUSE_RESETBUTTON; mouse_caps.axes = MOUSE_6DIM; break; ! ! case MOUSE_DRMOUSE4DS: ! /* X, Y, RX and RY (two wheels), 3 buttons */ ! mouse_caps.axes = MOUSE_2DIM | MOUSE_RXDIM | MOUSE_RYDIM; ! mouse_caps.buttons = MOUSE_LEFTBUTTON | MOUSE_RIGHTBUTTON | MOUSE_MIDDLEBUTTON; ! mouse_caps.info = MOUSE_INFO_WHEEL; ! break; ! case MOUSE_INTELLIMOUSE: case MOUSE_IMPS2: case MOUSE_WACOM_GRAPHIRE: *************** *** 741,747 **** goto handle_packets; } /* Check whether it's a valid data packet. */ ! if ((m_type != MOUSE_PS2)&&(m_type != MOUSE_IMPS2)&&(m_type != MOUSE_SPACEBALL)&&(m_type != MOUSE_WACOM_GRAPHIRE)) for (j = 1; j < proto[m_type][4]; j++) if ((buf[i + j] & proto[m_type][2]) != proto[m_type][3] || buf[i + j] == 0x80) { --- 750,757 ---- goto handle_packets; } /* Check whether it's a valid data packet. */ ! if ((m_type != MOUSE_PS2)&&(m_type != MOUSE_IMPS2)&&(m_type != MOUSE_SPACEBALL) ! &&(m_type != MOUSE_WACOM_GRAPHIRE) && (m_type != MOUSE_DRMOUSE4DS) ) for (j = 1; j < proto[m_type][4]; j++) if ((buf[i + j] & proto[m_type][2]) != proto[m_type][3] || buf[i + j] == 0x80) { *************** *** 897,902 **** --- 907,964 ---- dx = (buf[i] & 0x10) ? buf[i + 1] - 256 : buf[i + 1]; dy = (buf[i] & 0x20) ? -(buf[i + 2] - 256) : -buf[i + 2]; break; + case MOUSE_DRMOUSE4DS: + /* Digital Research 4-Axis mouse - like the PS/2 IntelliMouse, but + has two wheels. */ + /* This bit modified from the gpm 1.13 imps2 patch by Tim Goodwin */ + but = ((buf[i] & 1) << 2) /* left */ + | ((buf[i] & 6) >> 1); /* middle and right */ + dx = (buf[i] & 0x10) ? buf[i + 1] - 256 : buf[i + 1]; + dy = (buf[i] & 0x20) ? -(buf[i + 2] - 256) : -buf[i + 2]; + + /* Did we turn the wheel? */ + if((wheel = buf[i + 3]) != 0) { + #ifdef DEBUG_WHEEL + fprintf(stderr, " Wheel turned (0x%02x)", wheel); + #endif + /* RX reports as 1 or F, RY reports as 2 or E */ + /* both never report at the same time, which makes life easier */ + if (m_wheel_delta) + { + switch (wheel & 0x0F) + { + case 1: drx = m_wheel_delta; break; + case 15: drx = -m_wheel_delta; break; + case 2: dry = -m_wheel_delta; break; + case 14: dry = m_wheel_delta; break; + }; + #ifdef DEBUG_WHEEL + fprintf(stderr, "; RX axis delta = %d : RY axis delta = %d", drx, dry); + #endif + + /* Are fake keyboard events enabled? */ + if(m_fake_kbd_events && __svgalib_keyboard_eventhandler) { + /* Fake keypresses... */ + int key = ((drx+dry < 0) ? m_fake_upscancode : m_fake_downscancode); + #ifdef DEBUG_WHEEL + fprintf(stderr, "; pressing scancode %d", key); + #endif + __svgalib_keyboard_eventhandler(key, 1); /* press */ + /* todo: delay */ + #ifdef DEBUG_WHEEL + fprintf(stderr, ", releasing scancode %d", key); + #endif + __svgalib_keyboard_eventhandler(key, 0); /* release */ + } + #ifdef DEBUG_WHEEL + fprintf(stderr, ".\n"); + #endif + + + } + } + break; + case MOUSE_IMPS2: /* PS/2 IntelliMouse */ /* This bit modified from the gpm 1.13 imps2 patch by Tim Goodwin */ but = ((buf[i] & 1) << 2) /* left */ diff -cr svgalib-1.4.2/src/mouse/vgamouse.h svgalib-1.4.2-devel/src/mouse/vgamouse.h *** svgalib-1.4.2/src/mouse/vgamouse.h Fri Feb 11 06:45:25 2000 --- svgalib-1.4.2-devel/src/mouse/vgamouse.h Sun Aug 20 16:58:54 2000 *************** *** 23,29 **** #define MOUSE_IMPS2 11 #define MOUSE_PNP 12 #define MOUSE_WACOM_GRAPHIRE 13 ! #define MOUSE_LAST MOUSE_WACOM_GRAPHIRE #define MOUSE_ORIENTATION_VERTICAL 0 #define MOUSE_ORIENTATION_HORIZONTAL 1 --- 23,30 ---- #define MOUSE_IMPS2 11 #define MOUSE_PNP 12 #define MOUSE_WACOM_GRAPHIRE 13 ! #define MOUSE_DRMOUSE4DS 14 ! #define MOUSE_LAST MOUSE_DRMOUSE4DS #define MOUSE_ORIENTATION_VERTICAL 0 #define MOUSE_ORIENTATION_HORIZONTAL 1 diff -cr svgalib-1.4.2/src/vga.c svgalib-1.4.2-devel/src/vga.c *** svgalib-1.4.2/src/vga.c Thu Jul 6 12:10:32 2000 --- svgalib-1.4.2-devel/src/vga.c Sun Aug 20 17:57:38 2000 *************** *** 3508,3514 **** { "Microsoft", "MouseSystems", "MMSeries", "Logitech", "Busmouse", "PS2", "MouseMan", "gpm", "Spaceball", "none", "IntelliMouse", "IMPS2", "pnp", ! "WacomGraphire", NULL}; static int check_digit(char *ptr, char *digits) { --- 3508,3514 ---- { "Microsoft", "MouseSystems", "MMSeries", "Logitech", "Busmouse", "PS2", "MouseMan", "gpm", "Spaceball", "none", "IntelliMouse", "IMPS2", "pnp", ! "WacomGraphire", "DRMOUSE4DS", NULL}; static int check_digit(char *ptr, char *digits) { *************** *** 3551,3556 **** --- 3551,3559 ---- for (i = 0, tabptr = conf_mousenames; *tabptr; tabptr++, i++) { if (!strcasecmp(ptr, *tabptr)) { mouse_type = i; + #ifdef DEBUG_DRMOUSE4DS + fprintf(stderr, "mouse type: %d: %s \n", i, conf_mousenames[i]); + #endif goto leave; } }