device.c \\r
dinput_main.c \\r
joystick_linux.c \\r
- joystick_linuxinput.c \ \r
+ joystick_linuxinput.c \\r
keyboard.c \\r
mouse.c \\r
regsvr.c\r
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\r
*/\r
\r
+/* TODO:\r
+ * add keyboard\r
+ */\r
+\r
#include <stdarg.h>\r
\r
#include "windef.h"\r
\r
#define numObjects(x) (sizeof(x) / sizeof(x[0]))\r
\r
-static const DIOBJECTDATAFORMAT dfDIJoystick[] = {\r
+DIOBJECTDATAFORMAT dfDIJoystick[] = {\r
{ &GUID_XAxis,DIJOFS_X,DIDFT_OPTIONAL|DIDFT_AXIS|DIDFT_ANYINSTANCE,0},\r
{ &GUID_YAxis,DIJOFS_Y,DIDFT_OPTIONAL|DIDFT_AXIS|DIDFT_ANYINSTANCE,0},\r
{ &GUID_ZAxis,DIJOFS_Z,DIDFT_OPTIONAL|DIDFT_AXIS|DIDFT_ANYINSTANCE,0},\r
DIDF_ABSAXIS,\r
sizeof(DIJOYSTATE2),\r
numObjects(dfDIJoystick),\r
- (LPDIOBJECTDATAFORMAT)dfDIJoystick\r
+ dfDIJoystick\r
};\r
\r
-static const DIOBJECTDATAFORMAT dfDIJoystick2[] = {\r
+DIOBJECTDATAFORMAT dfDIJoystick2[] = {\r
{ &GUID_XAxis,DIJOFS_X,DIDFT_OPTIONAL|DIDFT_AXIS|DIDFT_ANYINSTANCE,0},\r
{ &GUID_YAxis,DIJOFS_Y,DIDFT_OPTIONAL|DIDFT_AXIS|DIDFT_ANYINSTANCE,0},\r
{ &GUID_ZAxis,DIJOFS_Z,DIDFT_OPTIONAL|DIDFT_AXIS|DIDFT_ANYINSTANCE,0},\r
DIDF_ABSAXIS,\r
sizeof(DIJOYSTATE2),\r
numObjects(dfDIJoystick2),\r
- (LPDIOBJECTDATAFORMAT)dfDIJoystick2\r
+ dfDIJoystick2\r
};\r
\r
-static const DIOBJECTDATAFORMAT dfDIMouse[] = {\r
+DIOBJECTDATAFORMAT dfDIMouse[] = {\r
{ &GUID_XAxis, DIMOFS_X, DIDFT_ANYINSTANCE | DIDFT_AXIS, 0 },\r
{ &GUID_YAxis, DIMOFS_Y, DIDFT_ANYINSTANCE | DIDFT_AXIS, 0 },\r
{ &GUID_ZAxis, DIMOFS_Z, DIDFT_OPTIONAL | DIDFT_ANYINSTANCE | DIDFT_AXIS, 0 },\r
DIDF_RELAXIS,\r
sizeof(DIMOUSESTATE),\r
numObjects(dfDIMouse),\r
- (LPDIOBJECTDATAFORMAT)dfDIMouse\r
+ dfDIMouse\r
};\r
\r
-static const DIOBJECTDATAFORMAT dfDIMouse2[] = {\r
+DIOBJECTDATAFORMAT dfDIMouse2[] = {\r
{ &GUID_XAxis, DIMOFS_X, DIDFT_ANYINSTANCE | DIDFT_AXIS, 0 },\r
{ &GUID_YAxis, DIMOFS_Y, DIDFT_ANYINSTANCE | DIDFT_AXIS, 0 },\r
{ &GUID_ZAxis, DIMOFS_Z, DIDFT_OPTIONAL | DIDFT_ANYINSTANCE | DIDFT_AXIS, 0 },\r
DIDF_RELAXIS,\r
sizeof(DIMOUSESTATE2),\r
numObjects(dfDIMouse2),\r
- (LPDIOBJECTDATAFORMAT)dfDIMouse2\r
-};\r
-\r
-static const DIOBJECTDATAFORMAT dfDIKeyboard[] = {\r
- { &GUID_Key,0,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(0),0},\r
- { &GUID_Key,1,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(1),0},\r
- { &GUID_Key,2,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(2),0},\r
- { &GUID_Key,3,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(3),0},\r
- { &GUID_Key,4,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(4),0},\r
- { &GUID_Key,5,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(5),0},\r
- { &GUID_Key,6,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(6),0},\r
- { &GUID_Key,7,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(7),0},\r
- { &GUID_Key,8,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(8),0},\r
- { &GUID_Key,9,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(9),0},\r
- { &GUID_Key,10,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(10),0},\r
- { &GUID_Key,11,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(11),0},\r
- { &GUID_Key,12,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(12),0},\r
- { &GUID_Key,13,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(13),0},\r
- { &GUID_Key,14,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(14),0},\r
- { &GUID_Key,15,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(15),0},\r
- { &GUID_Key,16,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(16),0},\r
- { &GUID_Key,17,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(17),0},\r
- { &GUID_Key,18,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(18),0},\r
- { &GUID_Key,19,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(19),0},\r
- { &GUID_Key,20,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(20),0},\r
- { &GUID_Key,21,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(21),0},\r
- { &GUID_Key,22,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(22),0},\r
- { &GUID_Key,23,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(23),0},\r
- { &GUID_Key,24,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(24),0},\r
- { &GUID_Key,25,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(25),0},\r
- { &GUID_Key,26,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(26),0},\r
- { &GUID_Key,27,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(27),0},\r
- { &GUID_Key,28,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(28),0},\r
- { &GUID_Key,29,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(29),0},\r
- { &GUID_Key,30,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(30),0},\r
- { &GUID_Key,31,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(31),0},\r
- { &GUID_Key,32,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(32),0},\r
- { &GUID_Key,33,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(33),0},\r
- { &GUID_Key,34,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(34),0},\r
- { &GUID_Key,35,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(35),0},\r
- { &GUID_Key,36,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(36),0},\r
- { &GUID_Key,37,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(37),0},\r
- { &GUID_Key,38,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(38),0},\r
- { &GUID_Key,39,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(39),0},\r
- { &GUID_Key,40,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(40),0},\r
- { &GUID_Key,41,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(41),0},\r
- { &GUID_Key,42,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(42),0},\r
- { &GUID_Key,43,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(43),0},\r
- { &GUID_Key,44,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(44),0},\r
- { &GUID_Key,45,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(45),0},\r
- { &GUID_Key,46,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(46),0},\r
- { &GUID_Key,47,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(47),0},\r
- { &GUID_Key,48,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(48),0},\r
- { &GUID_Key,49,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(49),0},\r
- { &GUID_Key,50,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(50),0},\r
- { &GUID_Key,51,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(51),0},\r
- { &GUID_Key,52,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(52),0},\r
- { &GUID_Key,53,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(53),0},\r
- { &GUID_Key,54,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(54),0},\r
- { &GUID_Key,55,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(55),0},\r
- { &GUID_Key,56,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(56),0},\r
- { &GUID_Key,57,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(57),0},\r
- { &GUID_Key,58,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(58),0},\r
- { &GUID_Key,59,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(59),0},\r
- { &GUID_Key,60,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(60),0},\r
- { &GUID_Key,61,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(61),0},\r
- { &GUID_Key,62,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(62),0},\r
- { &GUID_Key,63,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(63),0},\r
- { &GUID_Key,64,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(64),0},\r
- { &GUID_Key,65,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(65),0},\r
- { &GUID_Key,66,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(66),0},\r
- { &GUID_Key,67,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(67),0},\r
- { &GUID_Key,68,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(68),0},\r
- { &GUID_Key,69,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(69),0},\r
- { &GUID_Key,70,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(70),0},\r
- { &GUID_Key,71,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(71),0},\r
- { &GUID_Key,72,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(72),0},\r
- { &GUID_Key,73,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(73),0},\r
- { &GUID_Key,74,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(74),0},\r
- { &GUID_Key,75,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(75),0},\r
- { &GUID_Key,76,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(76),0},\r
- { &GUID_Key,77,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(77),0},\r
- { &GUID_Key,78,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(78),0},\r
- { &GUID_Key,79,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(79),0},\r
- { &GUID_Key,80,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(80),0},\r
- { &GUID_Key,81,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(81),0},\r
- { &GUID_Key,82,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(82),0},\r
- { &GUID_Key,83,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(83),0},\r
- { &GUID_Key,84,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(84),0},\r
- { &GUID_Key,85,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(85),0},\r
- { &GUID_Key,86,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(86),0},\r
- { &GUID_Key,87,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(87),0},\r
- { &GUID_Key,88,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(88),0},\r
- { &GUID_Key,89,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(89),0},\r
- { &GUID_Key,90,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(90),0},\r
- { &GUID_Key,91,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(91),0},\r
- { &GUID_Key,92,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(92),0},\r
- { &GUID_Key,93,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(93),0},\r
- { &GUID_Key,94,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(94),0},\r
- { &GUID_Key,95,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(95),0},\r
- { &GUID_Key,96,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(96),0},\r
- { &GUID_Key,97,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(97),0},\r
- { &GUID_Key,98,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(98),0},\r
- { &GUID_Key,99,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(99),0},\r
- { &GUID_Key,100,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(100),0},\r
- { &GUID_Key,101,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(101),0},\r
- { &GUID_Key,102,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(102),0},\r
- { &GUID_Key,103,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(103),0},\r
- { &GUID_Key,104,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(104),0},\r
- { &GUID_Key,105,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(105),0},\r
- { &GUID_Key,106,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(106),0},\r
- { &GUID_Key,107,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(107),0},\r
- { &GUID_Key,108,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(108),0},\r
- { &GUID_Key,109,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(109),0},\r
- { &GUID_Key,110,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(110),0},\r
- { &GUID_Key,111,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(111),0},\r
- { &GUID_Key,112,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(112),0},\r
- { &GUID_Key,113,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(113),0},\r
- { &GUID_Key,114,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(114),0},\r
- { &GUID_Key,115,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(115),0},\r
- { &GUID_Key,116,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(116),0},\r
- { &GUID_Key,117,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(117),0},\r
- { &GUID_Key,118,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(118),0},\r
- { &GUID_Key,119,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(119),0},\r
- { &GUID_Key,120,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(120),0},\r
- { &GUID_Key,121,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(121),0},\r
- { &GUID_Key,122,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(122),0},\r
- { &GUID_Key,123,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(123),0},\r
- { &GUID_Key,124,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(124),0},\r
- { &GUID_Key,125,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(125),0},\r
- { &GUID_Key,126,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(126),0},\r
- { &GUID_Key,127,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(127),0},\r
- { &GUID_Key,128,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(128),0},\r
- { &GUID_Key,129,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(129),0},\r
- { &GUID_Key,130,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(130),0},\r
- { &GUID_Key,131,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(131),0},\r
- { &GUID_Key,132,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(132),0},\r
- { &GUID_Key,133,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(133),0},\r
- { &GUID_Key,134,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(134),0},\r
- { &GUID_Key,135,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(135),0},\r
- { &GUID_Key,136,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(136),0},\r
- { &GUID_Key,137,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(137),0},\r
- { &GUID_Key,138,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(138),0},\r
- { &GUID_Key,139,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(139),0},\r
- { &GUID_Key,140,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(140),0},\r
- { &GUID_Key,141,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(141),0},\r
- { &GUID_Key,142,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(142),0},\r
- { &GUID_Key,143,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(143),0},\r
- { &GUID_Key,144,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(144),0},\r
- { &GUID_Key,145,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(145),0},\r
- { &GUID_Key,146,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(146),0},\r
- { &GUID_Key,147,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(147),0},\r
- { &GUID_Key,148,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(148),0},\r
- { &GUID_Key,149,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(149),0},\r
- { &GUID_Key,150,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(150),0},\r
- { &GUID_Key,151,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(151),0},\r
- { &GUID_Key,152,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(152),0},\r
- { &GUID_Key,153,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(153),0},\r
- { &GUID_Key,154,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(154),0},\r
- { &GUID_Key,155,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(155),0},\r
- { &GUID_Key,156,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(156),0},\r
- { &GUID_Key,157,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(157),0},\r
- { &GUID_Key,158,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(158),0},\r
- { &GUID_Key,159,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(159),0},\r
- { &GUID_Key,160,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(160),0},\r
- { &GUID_Key,161,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(161),0},\r
- { &GUID_Key,162,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(162),0},\r
- { &GUID_Key,163,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(163),0},\r
- { &GUID_Key,164,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(164),0},\r
- { &GUID_Key,165,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(165),0},\r
- { &GUID_Key,166,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(166),0},\r
- { &GUID_Key,167,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(167),0},\r
- { &GUID_Key,168,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(168),0},\r
- { &GUID_Key,169,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(169),0},\r
- { &GUID_Key,170,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(170),0},\r
- { &GUID_Key,171,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(171),0},\r
- { &GUID_Key,172,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(172),0},\r
- { &GUID_Key,173,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(173),0},\r
- { &GUID_Key,174,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(174),0},\r
- { &GUID_Key,175,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(175),0},\r
- { &GUID_Key,176,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(176),0},\r
- { &GUID_Key,177,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(177),0},\r
- { &GUID_Key,178,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(178),0},\r
- { &GUID_Key,179,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(179),0},\r
- { &GUID_Key,180,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(180),0},\r
- { &GUID_Key,181,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(181),0},\r
- { &GUID_Key,182,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(182),0},\r
- { &GUID_Key,183,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(183),0},\r
- { &GUID_Key,184,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(184),0},\r
- { &GUID_Key,185,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(185),0},\r
- { &GUID_Key,186,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(186),0},\r
- { &GUID_Key,187,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(187),0},\r
- { &GUID_Key,188,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(188),0},\r
- { &GUID_Key,189,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(189),0},\r
- { &GUID_Key,190,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(190),0},\r
- { &GUID_Key,191,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(191),0},\r
- { &GUID_Key,192,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(192),0},\r
- { &GUID_Key,193,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(193),0},\r
- { &GUID_Key,194,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(194),0},\r
- { &GUID_Key,195,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(195),0},\r
- { &GUID_Key,196,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(196),0},\r
- { &GUID_Key,197,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(197),0},\r
- { &GUID_Key,198,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(198),0},\r
- { &GUID_Key,199,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(199),0},\r
- { &GUID_Key,200,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(200),0},\r
- { &GUID_Key,201,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(201),0},\r
- { &GUID_Key,202,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(202),0},\r
- { &GUID_Key,203,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(203),0},\r
- { &GUID_Key,204,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(204),0},\r
- { &GUID_Key,205,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(205),0},\r
- { &GUID_Key,206,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(206),0},\r
- { &GUID_Key,207,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(207),0},\r
- { &GUID_Key,208,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(208),0},\r
- { &GUID_Key,209,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(209),0},\r
- { &GUID_Key,210,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(210),0},\r
- { &GUID_Key,211,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(211),0},\r
- { &GUID_Key,212,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(212),0},\r
- { &GUID_Key,213,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(213),0},\r
- { &GUID_Key,214,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(214),0},\r
- { &GUID_Key,215,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(215),0},\r
- { &GUID_Key,216,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(216),0},\r
- { &GUID_Key,217,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(217),0},\r
- { &GUID_Key,218,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(218),0},\r
- { &GUID_Key,219,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(219),0},\r
- { &GUID_Key,220,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(220),0},\r
- { &GUID_Key,221,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(221),0},\r
- { &GUID_Key,222,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(222),0},\r
- { &GUID_Key,223,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(223),0},\r
- { &GUID_Key,224,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(224),0},\r
- { &GUID_Key,225,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(225),0},\r
- { &GUID_Key,226,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(226),0},\r
- { &GUID_Key,227,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(227),0},\r
- { &GUID_Key,228,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(228),0},\r
- { &GUID_Key,229,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(229),0},\r
- { &GUID_Key,230,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(230),0},\r
- { &GUID_Key,231,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(231),0},\r
- { &GUID_Key,232,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(232),0},\r
- { &GUID_Key,233,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(233),0},\r
- { &GUID_Key,234,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(234),0},\r
- { &GUID_Key,235,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(235),0},\r
- { &GUID_Key,236,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(236),0},\r
- { &GUID_Key,237,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(237),0},\r
- { &GUID_Key,238,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(238),0},\r
- { &GUID_Key,239,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(239),0},\r
- { &GUID_Key,240,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(240),0},\r
- { &GUID_Key,241,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(241),0},\r
- { &GUID_Key,242,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(242),0},\r
- { &GUID_Key,243,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(243),0},\r
- { &GUID_Key,244,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(244),0},\r
- { &GUID_Key,245,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(245),0},\r
- { &GUID_Key,246,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(246),0},\r
- { &GUID_Key,247,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(247),0},\r
- { &GUID_Key,248,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(248),0},\r
- { &GUID_Key,249,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(249),0},\r
- { &GUID_Key,250,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(250),0},\r
- { &GUID_Key,251,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(251),0},\r
- { &GUID_Key,252,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(252),0},\r
- { &GUID_Key,253,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(253),0},\r
- { &GUID_Key,254,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(254),0},\r
- { &GUID_Key,255,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(255),0}\r
-};\r
-\r
-const DIDATAFORMAT c_dfDIKeyboard = {\r
- sizeof(DIDATAFORMAT),\r
- sizeof(DIOBJECTDATAFORMAT),\r
- DIDF_RELAXIS,\r
- 256,\r
- numObjects(dfDIKeyboard),\r
- (LPDIOBJECTDATAFORMAT)dfDIKeyboard\r
+ dfDIMouse2\r
};\r
int index = 0;\r
DWORD next = 0;\r
\r
- ret = HeapAlloc(GetProcessHeap(), 0, sizeof(DataFormat));\r
+ ret = (DataFormat *) HeapAlloc(GetProcessHeap(), 0, sizeof(DataFormat));\r
\r
- done = HeapAlloc(GetProcessHeap(), 0, sizeof(int) * asked_format->dwNumObjs);\r
+ done = (int *) HeapAlloc(GetProcessHeap(), 0, sizeof(int) * asked_format->dwNumObjs);\r
memset(done, 0, sizeof(int) * asked_format->dwNumObjs);\r
\r
- dt = HeapAlloc(GetProcessHeap(), 0, asked_format->dwNumObjs * sizeof(DataTransform));\r
+ dt = (DataTransform *) HeapAlloc(GetProcessHeap(), 0, asked_format->dwNumObjs * sizeof(DataTransform));\r
\r
TRACE("Creating DataTransform : \n");\r
\r
static IDirectInput8AVtbl ddi8avt;\r
static IDirectInput8WVtbl ddi8wvt;\r
\r
-static const struct dinput_device *dinput_devices[] =\r
-{\r
- &mouse_device,\r
- &keyboard_device,\r
- &joystick_linuxinput_device,\r
- &joystick_linux_device\r
-};\r
-#define NB_DINPUT_DEVICES (sizeof(dinput_devices)/sizeof(dinput_devices[0]))\r
+/* This array will be filled a dinput.so loading */\r
+#define MAX_WINE_DINPUT_DEVICES 4\r
+static dinput_device * dinput_devices[MAX_WINE_DINPUT_DEVICES];\r
+static int nrof_dinput_devices = 0;\r
\r
HINSTANCE DINPUT_instance = NULL;\r
\r
return TRUE;\r
}\r
\r
+/* register a direct draw driver. We better not use malloc for we are in\r
+ * the ELF startup initialisation at this point.\r
+ */\r
+void dinput_register_device(dinput_device *device) {\r
+ int i;\r
+\r
+ /* insert according to priority */\r
+ for (i=0;i<nrof_dinput_devices;i++) {\r
+ if (dinput_devices[i]->pref <= device->pref) {\r
+ memcpy(dinput_devices+i+1,dinput_devices+i,sizeof(dinput_devices[0])*(nrof_dinput_devices-i));\r
+ dinput_devices[i] = device;\r
+ break;\r
+ }\r
+ }\r
+ if (i==nrof_dinput_devices) /* not found, or too low priority */\r
+ dinput_devices[nrof_dinput_devices] = device;\r
+\r
+ nrof_dinput_devices++;\r
\r
+ /* increase MAX_DDRAW_DRIVERS if the line below triggers */\r
+ assert(nrof_dinput_devices <= MAX_WINE_DINPUT_DEVICES);\r
+}\r
\r
/******************************************************************************\r
* DirectInputCreateEx (DINPUT.@)\r
if (IsEqualGUID(&IID_IDirectInputA,riid) ||\r
IsEqualGUID(&IID_IDirectInput2A,riid) ||\r
IsEqualGUID(&IID_IDirectInput7A,riid)) {\r
- This = HeapAlloc(GetProcessHeap(),0,sizeof(IDirectInputImpl));\r
+ This = (IDirectInputImpl*)HeapAlloc(GetProcessHeap(),0,sizeof(IDirectInputImpl));\r
This->lpVtbl = &ddi7avt;\r
This->ref = 1;\r
This->version = 1;\r
if (IsEqualGUID(&IID_IDirectInputW,riid) ||\r
IsEqualGUID(&IID_IDirectInput2W,riid) ||\r
IsEqualGUID(&IID_IDirectInput7W,riid)) {\r
- This = HeapAlloc(GetProcessHeap(),0,sizeof(IDirectInputImpl));\r
+ This = (IDirectInputImpl*)HeapAlloc(GetProcessHeap(),0,sizeof(IDirectInputImpl));\r
This->lpVtbl = &ddi7wvt;\r
This->ref = 1;\r
This->version = 1;\r
}\r
\r
if (IsEqualGUID(&IID_IDirectInput8A,riid)) {\r
- This = HeapAlloc(GetProcessHeap(),0,sizeof(IDirectInputImpl));\r
+ This = (IDirectInputImpl*)HeapAlloc(GetProcessHeap(),0,sizeof(IDirectInputImpl));\r
This->lpVtbl = &ddi8avt;\r
This->ref = 1;\r
This->version = 8;\r
}\r
\r
if (IsEqualGUID(&IID_IDirectInput8W,riid)) {\r
- This = HeapAlloc(GetProcessHeap(),0,sizeof(IDirectInputImpl));\r
+ This = (IDirectInputImpl*)HeapAlloc(GetProcessHeap(),0,sizeof(IDirectInputImpl));\r
This->lpVtbl = &ddi8wvt;\r
This->ref = 1;\r
This->version = 8;\r
TRACE("(0x%08lx,%04lx,%p,%p)\n", (DWORD)hinst,dwVersion,ppDI,punkOuter);\r
\r
//trace:dinput:DirectInputCreateA (0x00400000,0500,0x42bafc54,(nil))\r
- This = HeapAlloc(GetProcessHeap(),0,sizeof(IDirectInputImpl));\r
+ This = (IDirectInputImpl*)HeapAlloc(GetProcessHeap(),0,sizeof(IDirectInputImpl));\r
This->lpVtbl = &ddi7avt;\r
This->ref = 1;\r
if (dwVersion > 0x0700) {\r
{\r
IDirectInputImpl* This;\r
TRACE("(0x%08lx,%04lx,%p,%p)\n", (DWORD)hinst,dwVersion,ppDI,punkOuter);\r
- This = HeapAlloc(GetProcessHeap(),0,sizeof(IDirectInputImpl));\r
+ This = (IDirectInputImpl*)HeapAlloc(GetProcessHeap(),0,sizeof(IDirectInputImpl));\r
This->lpVtbl = &ddi7wvt;\r
This->ref = 1;\r
if (dwVersion >= 0x0800) {\r
switch (dwDevType) {\r
case 0: return "All devices";\r
case DIDEVTYPE_MOUSE: return "DIDEVTYPE_MOUSE";\r
- case DIDEVTYPE_KEYBOARD: return "DIDEVTYPE_KEYBOARD"; \r
+ case DIDEVTYPE_KEYBOARD: return "DIDEVTYPE_KEYBOARD";\r
case DIDEVTYPE_JOYSTICK: return "DIDEVTYPE_JOYSTICK";\r
case DIDEVTYPE_DEVICE: return "DIDEVTYPE_DEVICE";\r
default: return "Unkown";\r
TRACE("(this=%p,0x%04lx '%s',%p,%p,%04lx)\n",\r
This, dwDevType, _dump_DIDEVTYPE_value(dwDevType),\r
lpCallback, pvRef, dwFlags);\r
-#ifdef __REACTOS__\r
- /* hack geting keyboard and mouse working */\r
- if (NB_DINPUT_DEVICES==0){\r
+\r
+ if (nrof_dinput_devices==0){\r
scan_mouse();\r
scan_keyboard();\r
}\r
-#endif \r
+ \r
TRACE(" flags: "); _dump_EnumDevices_dwFlags(dwFlags); TRACE("\n");\r
\r
\r
- for (i = 0; i < NB_DINPUT_DEVICES; i++) {\r
-#ifndef __REACTOS__ \r
- /* Wine Dinput does not support windows enum \r
- we need a hack here */\r
- if (!dinput_devices[i]->enum_deviceA) continue;\r
-#endif\r
+ for (i = 0; i < nrof_dinput_devices; i++) {\r
for (j = 0, r = -1; r != 0; j++) {\r
devInstance.dwSize = sizeof(devInstance);\r
TRACE(" - checking device %d ('%s')\n", i, dinput_devices[i]->name);\r
DIDEVICEINSTANCEW devInstance;\r
int i, j, r;\r
\r
-#ifdef __REACTOS__\r
- /* hack geting keyboard and mouse working */\r
- if (NB_DINPUT_DEVICES==0){\r
+ if (nrof_dinput_devices==0){\r
scan_mouse();\r
scan_keyboard();\r
}\r
-#endif \r
\r
TRACE("(this=%p,0x%04lx '%s',%p,%p,%04lx)\n",\r
This, dwDevType, _dump_DIDEVTYPE_value(dwDevType),\r
TRACE(" flags: "); _dump_EnumDevices_dwFlags(dwFlags); TRACE("\n");\r
\r
\r
- for (i = 0; i < NB_DINPUT_DEVICES; i++) {\r
-#ifndef __REACTOS__ \r
- /* Wine Dinput does not support windows enum \r
- we need a hack here */\r
- if (!dinput_devices[i]->enum_deviceW) continue;\r
-#endif\r
-\r
+ for (i = 0; i < nrof_dinput_devices; i++) {\r
for (j = 0, r = -1; r != 0; j++) {\r
devInstance.dwSize = sizeof(devInstance);\r
TRACE(" - checking device %d ('%s')\n", i, dinput_devices[i]->name);\r
\r
TRACE("(this=%p,%s,%p,%p)\n",This,debugstr_guid(rguid),pdev,punk);\r
\r
-#ifdef __REACTOS__\r
- /* hack geting keyboard and mouse working */\r
- if (NB_DINPUT_DEVICES==0){\r
+ if (nrof_dinput_devices==0){\r
scan_mouse();\r
scan_keyboard();\r
}\r
-#endif \r
\r
/* Loop on all the devices to see if anyone matches the given GUID */\r
- for (i = 0; i < NB_DINPUT_DEVICES; i++) {\r
+ for (i = 0; i < nrof_dinput_devices; i++) {\r
HRESULT ret;\r
-#ifndef __REACTOS__ \r
- if (!dinput_devices[i]->create_deviceA) continue; \r
-#endif\r
if ((ret = dinput_devices[i]->create_deviceA(This, rguid, NULL, pdev)) == DI_OK)\r
return DI_OK;\r
\r
\r
TRACE("(this=%p,%s,%p,%p)\n",This,debugstr_guid(rguid),pdev,punk);\r
\r
-#ifdef __REACTOS__\r
- /* hack geting keyboard and mouse working */\r
- if (NB_DINPUT_DEVICES==0){\r
+ if (nrof_dinput_devices==0){\r
scan_mouse();\r
scan_keyboard();\r
}\r
-#endif \r
\r
/* Loop on all the devices to see if anyone matches the given GUID */\r
- for (i = 0; i < NB_DINPUT_DEVICES; i++) {\r
+ for (i = 0; i < nrof_dinput_devices; i++) {\r
HRESULT ret;\r
-#ifndef __REACTOS__\r
- if (!dinput_devices[i]->create_deviceW) continue;\r
-#endif\r
if ((ret = dinput_devices[i]->create_deviceW(This, rguid, NULL, pdev)) == DI_OK)\r
return DI_OK;\r
\r
\r
TRACE("(%p)->(%s, %s, %p, %p)\n", This, debugstr_guid(rguid), debugstr_guid(riid), pvOut, lpUnknownOuter);\r
\r
-#ifdef __REACTOS__\r
- /* hack geting keyboard and mouse working */\r
- if (NB_DINPUT_DEVICES==0){\r
- scan_mouse();\r
- scan_keyboard();\r
- }\r
-#endif \r
+ if (nrof_dinput_devices==0){\r
+ scan_mouse();\r
+ scan_keyboard();\r
+ } \r
\r
/* Loop on all the devices to see if anyone matches the given GUID */\r
- for (i = 0; i < NB_DINPUT_DEVICES; i++) {\r
+ for (i = 0; i < nrof_dinput_devices; i++) {\r
HRESULT ret;\r
-#ifndef __REACTOS__\r
- if (!dinput_devices[i]->create_deviceA) continue;\r
-#endif\r
if ((ret = dinput_devices[i]->create_deviceA(This, rguid, riid, (LPDIRECTINPUTDEVICEA*) pvOut)) == DI_OK)\r
return DI_OK;\r
\r
\r
TRACE("(%p)->(%s, %s, %p, %p)\n", This, debugstr_guid(rguid), debugstr_guid(riid), pvOut, lpUnknownOuter);\r
\r
- if (NB_DINPUT_DEVICES==0){\r
+ if (nrof_dinput_devices==0){\r
scan_mouse();\r
scan_keyboard();\r
}\r
\r
\r
/* Loop on all the devices to see if anyone matches the given GUID */\r
- for (i = 0; i < NB_DINPUT_DEVICES; i++) {\r
+ for (i = 0; i < nrof_dinput_devices; i++) {\r
HRESULT ret;\r
-#ifndef __REACTOS__\r
- if (!dinput_devices[i]->create_deviceW) continue;\r
-#endif\r
if ((ret = dinput_devices[i]->create_deviceW(This, rguid, riid, (LPDIRECTINPUTDEVICEW*) pvOut)) == DI_OK)\r
return DI_OK;\r
\r
};\r
\r
/* Function called by all devices that Wine supports */\r
-struct dinput_device {\r
+typedef struct dinput_device {\r
+ INT pref;\r
const char *name;\r
BOOL (*enum_deviceA)(DWORD dwDevType, DWORD dwFlags, LPDIDEVICEINSTANCEA lpddi, int version, int id);\r
BOOL (*enum_deviceW)(DWORD dwDevType, DWORD dwFlags, LPDIDEVICEINSTANCEW lpddi, int version, int id);\r
HRESULT (*create_deviceA)(IDirectInputImpl *dinput, REFGUID rguid, REFIID riid, LPDIRECTINPUTDEVICEA* pdev);\r
HRESULT (*create_deviceW)(IDirectInputImpl *dinput, REFGUID rguid, REFIID riid, LPDIRECTINPUTDEVICEW* pdev);\r
-};\r
+} dinput_device;\r
\r
-extern const struct dinput_device mouse_device;\r
-extern const struct dinput_device keyboard_device;\r
-extern const struct dinput_device joystick_linux_device;\r
-extern const struct dinput_device joystick_linuxinput_device;\r
+extern void dinput_register_device(dinput_device *device);\r
\r
extern HINSTANCE DINPUT_instance;\r
\r
#include "config.h"\r
#include "wine/port.h"\r
\r
+#ifdef HAVE_LINUX_22_JOYSTICK_API\r
+\r
#include <stdarg.h>\r
#include <stdio.h>\r
#include <string.h>\r
#ifdef HAVE_LINUX_JOYSTICK_H\r
# include <linux/joystick.h>\r
#endif\r
+#define JOYDEV "/dev/js"\r
\r
#include "wine/debug.h"\r
#include "wine/unicode.h"\r
\r
WINE_DEFAULT_DEBUG_CHANNEL(dinput);\r
\r
-#ifdef HAVE_LINUX_22_JOYSTICK_API\r
-\r
-#define JOYDEV "/dev/js"\r
-\r
typedef struct {\r
LONG lMin;\r
LONG lMax;\r
return DIERR_DEVICENOTREG;\r
}\r
\r
-const struct dinput_device joystick_linux_device = {\r
+static dinput_device joydev = {\r
+ 10,\r
"Wine Linux joystick driver",\r
joydev_enum_deviceA,\r
joydev_enum_deviceW,\r
joydev_create_deviceW\r
};\r
\r
+DECL_GLOBAL_CONSTRUCTOR(joydev_register) { dinput_register_device(&joydev); }\r
+\r
\r
\r
/******************************************************************************\r
};\r
#undef XCAST\r
\r
-#else /* HAVE_LINUX_22_JOYSTICK_API */\r
-\r
-const struct dinput_device joystick_linux_device = {\r
- "Wine Linux joystick driver",\r
- NULL,\r
- NULL,\r
- NULL,\r
- NULL\r
-};\r
-\r
#endif /* HAVE_LINUX_22_JOYSTICK_API */\r
#include "config.h"\r
#include "wine/port.h"\r
\r
+#ifdef HAVE_LINUX_INPUT_H\r
+\r
#include <assert.h>\r
#include <stdarg.h>\r
#include <stdio.h>\r
#ifdef HAVE_SYS_ERRNO_H\r
# include <sys/errno.h>\r
#endif\r
+\r
+#ifdef HAVE_CORRECT_LINUXINPUT_H\r
+\r
#ifdef HAVE_LINUX_INPUT_H\r
# include <linux/input.h>\r
#endif\r
\r
+\r
+#define EVDEVPREFIX "/dev/input/event"\r
+\r
#include "wine/debug.h"\r
#include "wine/unicode.h"\r
#include "windef.h"\r
\r
WINE_DEFAULT_DEBUG_CHANNEL(dinput);\r
\r
-#ifdef HAVE_CORRECT_LINUXINPUT_H\r
-\r
-#define EVDEVPREFIX "/dev/input/event"\r
-\r
/* Wine joystick driver object instances */\r
#define WINE_JOYSTICK_AXIS_BASE 0\r
#define WINE_JOYSTICK_BUTTON_BASE 8\r
return DIERR_DEVICENOTREG;\r
}\r
\r
-const struct dinput_device joystick_linuxinput_device = {\r
+static dinput_device joydev = {\r
+ 20,\r
"Wine Linux-input joystick driver",\r
joydev_enum_deviceA,\r
joydev_enum_deviceW,\r
joydev_create_deviceW\r
};\r
\r
+DECL_GLOBAL_CONSTRUCTOR(joydev_register) { dinput_register_device(&joydev); }\r
+\r
/******************************************************************************\r
* Joystick\r
*/\r
{\r
JoystickImpl *This = (JoystickImpl *)iface;\r
\r
- TRACE("(this=%p,%s,%p)\n",\r
+ TRACE("(this=%p,%s,%p): stub!\n",\r
iface, debugstr_guid(rguid), pdiph);\r
\r
if (TRACE_ON(dinput))\r
};\r
#undef XCAST\r
\r
-#else /* HAVE_CORRECT_LINUXINPUT_H */\r
+#endif /* HAVE_LINUX_INPUT_H */\r
\r
-const struct dinput_device joystick_linuxinput_device = {\r
- "Wine Linux-input joystick driver",\r
- NULL,\r
- NULL,\r
- NULL,\r
- NULL\r
-};\r
-\r
-#endif /* HAVE_CORRECT_LINUXINPUT_H */\r
+#endif\r
* Copyright 1998 Marcus Meissner\r
* Copyright 1998,1999 Lionel Ulmer\r
* Copyright 2000-2001 TransGaming Technologies Inc.\r
- * Copyright 2005 Raphael Junqueira\r
*\r
* This library is free software; you can redistribute it and/or\r
* modify it under the terms of the GNU Lesser General Public\r
\r
WINE_DEFAULT_DEBUG_CHANNEL(dinput);\r
\r
-#define WINE_DINPUT_KEYBOARD_MAX_KEYS 256\r
+//fast fix misning from mingw headers\r
+#ifdef __REACTOS__\r
+#define LLKHF_INJECTED 0x00000010\r
+#endif\r
\r
static IDirectInputDevice8AVtbl SysKeyboardAvt;\r
static IDirectInputDevice8WVtbl SysKeyboardWvt;\r
CRITICAL_SECTION crit;\r
};\r
\r
-static SysKeyboardImpl* current_lock = NULL; \r
-/* Today's acquired device\r
- * FIXME: currently this can be only one.\r
- * Maybe this should be a linked list or st.\r
- * I don't know what the rules are for multiple acquired keyboards,\r
- * but 'DI_LOSTFOCUS' and 'DI_UNACQUIRED' exist for a reason.\r
+SysKeyboardImpl *current; /* Today's acquired device\r
+FIXME: currently this can be only one.\r
+Maybe this should be a linked list or st.\r
+I don't know what the rules are for multiple acquired keyboards,\r
+but 'DI_LOSTFOCUS' and 'DI_UNACQUIRED' exist for a reason.\r
*/\r
\r
-static BYTE DInputKeyState[WINE_DINPUT_KEYBOARD_MAX_KEYS]; /* array for 'GetDeviceState' */\r
+static BYTE DInputKeyState[256]; /* array for 'GetDeviceState' */\r
\r
static CRITICAL_SECTION keyboard_crit;\r
static CRITICAL_SECTION_DEBUG critsect_debug =\r
};\r
static CRITICAL_SECTION keyboard_crit = { &critsect_debug, -1, 0, 0, 0, 0 };\r
\r
-static DWORD keyboard_users = 0;\r
-static HHOOK keyboard_hook = NULL;\r
+static DWORD keyboard_users;\r
\r
-LRESULT CALLBACK KeyboardCallback( int code, WPARAM wparam, LPARAM lparam )\r
-{\r
- BYTE dik_code;\r
- BOOL down;\r
- DWORD timestamp;\r
- KBDLLHOOKSTRUCT *hook = (KBDLLHOOKSTRUCT *)lparam;\r
- BYTE new_diks;\r
+#ifndef __REACTOS__\r
+static HHOOK keyboard_hook;\r
+#endif\r
\r
- TRACE("(%d,%d,%ld)\n", code, wparam, lparam);\r
+#ifdef __REACTOS__\r
+void reactos_input_keyboard();\r
\r
- /** returns now if not HC_ACTION */\r
- if (code != HC_ACTION) return CallNextHookEx(keyboard_hook, code, wparam, lparam);\r
+void reactos_input_keyboard()\r
+{\r
+ MSG msg;\r
+ BOOL fDone;\r
+ int disk_code = -1;\r
+ BOOL down;\r
+ BYTE oldDInputKeyState[256];\r
+ int t;\r
+ \r
+ memcpy(&oldDInputKeyState,&DInputKeyState,256);\r
+ GetKeyboardState(DInputKeyState);\r
\r
+ for( t=0;t<255;t++)\r
{\r
- dik_code = hook->scanCode;\r
- if (hook->flags & LLKHF_EXTENDED) dik_code |= 0x80;\r
- down = !(hook->flags & LLKHF_UP);\r
- timestamp = hook->time;\r
+ if (oldDInputKeyState[t]!=DInputKeyState[t]) disk_code=t; \r
}\r
+ \r
\r
- /** returns now if key event already known */\r
- new_diks = (down ? 0x80 : 0);\r
- /*if (new_diks != DInputKeyState[dik_code]) return CallNextHookEx(keyboard_hook, code, wparam, lparam); TO BE FIXED */\r
-\r
- DInputKeyState[dik_code] = new_diks;\r
- TRACE(" setting %02X to %02X\n", dik_code, DInputKeyState[dik_code]);\r
- \r
- if (current_lock != NULL) {\r
- if (current_lock->hEvent) SetEvent(current_lock->hEvent);\r
- \r
- if (current_lock->buffer != NULL) {\r
+ if (disk_code!=-1) {\r
+ if (current->buffer != NULL)\r
+ {\r
int n;\r
+ n = (current->start + current->count) % current->buffersize;\r
+\r
+ current->buffer[n].dwOfs = (BYTE) disk_code;\r
+ current->buffer[n].dwData = DInputKeyState[disk_code];\r
+ current->buffer[n].dwTimeStamp = 10;\r
+ current->buffer[n].dwSequence = current->dinput->evsequence++;\r
+\r
+ \r
+ if (current->count == current->buffersize)\r
+ {\r
+ current->start = ++current->start % current->buffersize;\r
+ current->overflow = TRUE;\r
+ }\r
+ else\r
+ current->count++;\r
+ \r
+ }\r
+ }\r
+\r
+\r
+}\r
+#endif\r
+#ifndef __REACTOS__\r
+LRESULT CALLBACK KeyboardCallback( int code, WPARAM wparam, LPARAM lparam )\r
+{\r
+ TRACE("(%d,%d,%ld)\n", code, wparam, lparam);\r
+\r
+ if (code == HC_ACTION)\r
+ {\r
+ BYTE dik_code;\r
+ BOOL down;\r
+ DWORD timestamp;\r
\r
- EnterCriticalSection(&(current_lock->crit));\r
- \r
- n = (current_lock->start + current_lock->count) % current_lock->buffersize;\r
- \r
- current_lock->buffer[n].dwOfs = dik_code;\r
- current_lock->buffer[n].dwData = down ? 0x80 : 0;\r
- current_lock->buffer[n].dwTimeStamp = timestamp;\r
- current_lock->buffer[n].dwSequence = current_lock->dinput->evsequence++;\r
- \r
- TRACE("Adding event at offset %d : %ld - %ld - %ld - %ld\n", n,\r
- current_lock->buffer[n].dwOfs, current_lock->buffer[n].dwData, current_lock->buffer[n].dwTimeStamp, current_lock->buffer[n].dwSequence);\r
- \r
- if (current_lock->count == current_lock->buffersize) {\r
- current_lock->start = ++current_lock->start % current_lock->buffersize;\r
- current_lock->overflow = TRUE;\r
- } else\r
- current_lock->count++;\r
+ {\r
+ KBDLLHOOKSTRUCT *hook = (KBDLLHOOKSTRUCT *)lparam;\r
+ dik_code = hook->scanCode;\r
+ if (hook->flags & LLKHF_EXTENDED) dik_code |= 0x80;\r
+ down = !(hook->flags & LLKHF_UP);\r
+ timestamp = hook->time;\r
+ }\r
+\r
+ DInputKeyState[dik_code] = (down ? 0x80 : 0);\r
+ TRACE(" setting %02X to %02X\n", dik_code, DInputKeyState[dik_code]);\r
\r
- LeaveCriticalSection(&(current_lock->crit));\r
+ if (current != NULL)\r
+ {\r
+ if (current->hEvent)\r
+ SetEvent(current->hEvent);\r
+\r
+ if (current->buffer != NULL)\r
+ {\r
+ int n;\r
+\r
+ EnterCriticalSection(&(current->crit));\r
+\r
+ n = (current->start + current->count) % current->buffersize;\r
+\r
+ current->buffer[n].dwOfs = dik_code;\r
+ current->buffer[n].dwData = down ? 0x80 : 0;\r
+ current->buffer[n].dwTimeStamp = timestamp;\r
+ current->buffer[n].dwSequence = current->dinput->evsequence++;\r
+\r
+ TRACE("Adding event at offset %d : %ld - %ld - %ld - %ld\n", n,\r
+ current->buffer[n].dwOfs, current->buffer[n].dwData, current->buffer[n].dwTimeStamp, current->buffer[n].dwSequence);\r
+\r
+ if (current->count == current->buffersize)\r
+ {\r
+ current->start = ++current->start % current->buffersize;\r
+ current->overflow = TRUE;\r
+ }\r
+ else\r
+ current->count++;\r
+\r
+ LeaveCriticalSection(&(current->crit));\r
+ }\r
+ }\r
}\r
- }\r
+\r
return CallNextHookEx(keyboard_hook, code, wparam, lparam);\r
}\r
+#endif\r
\r
static GUID DInput_Wine_Keyboard_GUID = { /* 0ab8648a-7735-11d2-8c73-71df54a96441 */\r
0x0ab8648a,\r
return FALSE;\r
}\r
\r
-static SysKeyboardImpl *alloc_device(REFGUID rguid, LPVOID kvt, IDirectInputImpl *dinput)\r
+static SysKeyboardImpl *alloc_device_keyboard(REFGUID rguid, LPVOID kvt, IDirectInputImpl *dinput)\r
{\r
SysKeyboardImpl* newDevice;\r
- DWORD kbd_users;\r
-\r
newDevice = HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(SysKeyboardImpl));\r
newDevice->lpVtbl = kvt;\r
newDevice->ref = 1;\r
memcpy(&(newDevice->guid),rguid,sizeof(*rguid));\r
newDevice->dinput = dinput;\r
- InitializeCriticalSection(&(newDevice->crit));\r
\r
+#ifndef __REACTOS__\r
EnterCriticalSection(&keyboard_crit);\r
- kbd_users = InterlockedIncrement(&keyboard_users);\r
- if (1 == kbd_users) {\r
- keyboard_hook = SetWindowsHookExW( WH_KEYBOARD_LL, KeyboardCallback, DINPUT_instance, 0 );\r
- }\r
- LeaveCriticalSection(&keyboard_crit);\r
\r
+ if (!keyboard_users++)\r
+ keyboard_hook = SetWindowsHookExW( WH_KEYBOARD_LL, KeyboardCallback, DINPUT_instance, 0 );\r
+\r
+ LeaveCriticalSection(&keyboard_crit);\r
+#endif\r
return newDevice;\r
}\r
\r
IsEqualGUID(&IID_IDirectInputDevice2A,riid) ||\r
IsEqualGUID(&IID_IDirectInputDevice7A,riid) ||\r
IsEqualGUID(&IID_IDirectInputDevice8A,riid)) {\r
- *pdev = (IDirectInputDeviceA*) alloc_device(rguid, &SysKeyboardAvt, dinput);\r
+ *pdev = (IDirectInputDeviceA*) alloc_device_keyboard(rguid, &SysKeyboardAvt, dinput);\r
TRACE("Creating a Keyboard device (%p)\n", *pdev);\r
return DI_OK;\r
} else\r
IsEqualGUID(&IID_IDirectInputDevice2W,riid) ||\r
IsEqualGUID(&IID_IDirectInputDevice7W,riid) ||\r
IsEqualGUID(&IID_IDirectInputDevice8W,riid)) {\r
- *pdev = (IDirectInputDeviceW*) alloc_device(rguid, &SysKeyboardWvt, dinput);\r
+ *pdev = (IDirectInputDeviceW*) alloc_device_keyboard(rguid, &SysKeyboardWvt, dinput);\r
TRACE("Creating a Keyboard device (%p)\n", *pdev);\r
return DI_OK;\r
} else\r
return DIERR_DEVICENOTREG;\r
}\r
\r
-const struct dinput_device keyboard_device = {\r
+dinput_device keyboarddev = {\r
+ 100,\r
"Wine keyboard driver",\r
keyboarddev_enum_deviceA,\r
keyboarddev_enum_deviceW,\r
keyboarddev_create_deviceW\r
};\r
\r
+void scan_keyboard()\r
+{\r
+ dinput_register_device(&keyboarddev);\r
+}\r
+\r
+DECL_GLOBAL_CONSTRUCTOR(keyboarddev_register) { dinput_register_device(&keyboarddev); }\r
+\r
static ULONG WINAPI SysKeyboardAImpl_Release(LPDIRECTINPUTDEVICE8A iface)\r
{\r
SysKeyboardImpl *This = (SysKeyboardImpl *)iface;\r
ULONG ref;\r
- DWORD kbd_users;\r
\r
ref = InterlockedDecrement(&(This->ref));\r
if (ref)\r
return ref;\r
\r
- EnterCriticalSection(&keyboard_crit); \r
- kbd_users = InterlockedDecrement(&keyboard_users);\r
- if (0 == kbd_users) {\r
+#ifndef __REACTOS__\r
+ EnterCriticalSection(&keyboard_crit);\r
+ if (!--keyboard_users) {\r
UnhookWindowsHookEx( keyboard_hook );\r
keyboard_hook = 0;\r
}\r
LeaveCriticalSection(&keyboard_crit);\r
+#endif\r
\r
/* Free the data queue */\r
HeapFree(GetProcessHeap(),0,This->buffer);\r
return DI_OK;\r
}\r
\r
-static HRESULT WINAPI SysKeyboardAImpl_GetProperty(\r
- LPDIRECTINPUTDEVICE8A iface,REFGUID rguid,LPDIPROPHEADER ph\r
-)\r
-{\r
- SysKeyboardImpl *This = (SysKeyboardImpl *)iface;\r
-\r
- TRACE("(this=%p,%s,%p)\n",This,debugstr_guid(rguid),ph);\r
- TRACE("(size=%ld,headersize=%ld,obj=%ld,how=%ld\n",\r
- ph->dwSize,ph->dwHeaderSize,ph->dwObj,ph->dwHow);\r
- if (!HIWORD(rguid)) {\r
- switch ((DWORD)rguid) {\r
- case (DWORD) DIPROP_BUFFERSIZE: {\r
- LPDIPROPDWORD pd = (LPDIPROPDWORD)ph;\r
-\r
- TRACE("(buffersize=%ld)\n",pd->dwData);\r
-\r
- if (This->acquired)\r
- return DIERR_INVALIDPARAM;\r
-\r
- pd->dwData = This->buffersize;\r
-\r
- break;\r
- }\r
- default:\r
- WARN("Unknown type %ld\n",(DWORD)rguid);\r
- break;\r
- }\r
- }\r
- return DI_OK;\r
-}\r
\r
static HRESULT WINAPI SysKeyboardAImpl_GetDeviceState(\r
LPDIRECTINPUTDEVICE8A iface,DWORD len,LPVOID ptr\r
)\r
{\r
- SysKeyboardImpl *This = (SysKeyboardImpl *)iface;\r
- TRACE("(%p)->(%ld,%p)\n", This, len, ptr);\r
+ TRACE("(%p)->(%ld,%p)\n", iface, len, ptr);\r
+ \r
+#ifdef __REACTOS__\r
+ reactos_input_keyboard();\r
+#endif\r
\r
/* Note: device does not need to be acquired */\r
- if (len != WINE_DINPUT_KEYBOARD_MAX_KEYS)\r
+ if (len != 256)\r
return DIERR_INVALIDPARAM;\r
\r
- MsgWaitForMultipleObjectsEx(0, NULL, 0, QS_ALLINPUT, 0);\r
-\r
- EnterCriticalSection(&(This->crit));\r
+ MsgWaitForMultipleObjectsEx(0, NULL, 0, 0, 0);\r
\r
if (TRACE_ON(dinput)) {\r
int i;\r
- for (i = 0; i < WINE_DINPUT_KEYBOARD_MAX_KEYS; i++) {\r
+ for (i = 0; i < 256; i++) {\r
if (DInputKeyState[i] != 0x00) {\r
TRACE(" - %02X: %02x\n", i, DInputKeyState[i]);\r
}\r
}\r
}\r
\r
- memcpy(ptr, DInputKeyState, WINE_DINPUT_KEYBOARD_MAX_KEYS);\r
- LeaveCriticalSection(&(This->crit));\r
-\r
+ memcpy(ptr, DInputKeyState, 256);\r
return DI_OK;\r
}\r
\r
LPDWORD entries,DWORD flags\r
)\r
{\r
+ \r
SysKeyboardImpl *This = (SysKeyboardImpl *)iface;\r
int ret = DI_OK, i = 0;\r
+#ifdef __REACTOS__\r
+ reactos_input_keyboard();\r
+#endif\r
\r
TRACE("(this=%p,%ld,%p,%p(%ld)),0x%08lx)\n",\r
This,dodsize,dod,entries,entries?*entries:0,flags);\r
if (dodsize < sizeof(DIDEVICEOBJECTDATA_DX3))\r
return DIERR_INVALIDPARAM;\r
\r
- MsgWaitForMultipleObjectsEx(0, NULL, 0, QS_ALLINPUT, 0);\r
+ MsgWaitForMultipleObjectsEx(0, NULL, 0, 0, 0);\r
\r
EnterCriticalSection(&(This->crit));\r
\r
memset(&ddoi, 0, sizeof(ddoi));\r
ddoi.dwSize = FIELD_OFFSET(DIDEVICEOBJECTINSTANCEA, dwFFMaxForce);\r
\r
- for (i = 0; i < WINE_DINPUT_KEYBOARD_MAX_KEYS; i++) {\r
+ for (i = 0; i < 256; i++) {\r
/* Report 255 keys :-) */\r
ddoi.guidType = GUID_Key;\r
ddoi.dwOfs = i;\r
\r
This->acquired = 1;\r
\r
- if (current_lock != NULL) {\r
- FIXME("Not more than one keyboard can be acquired at the same time.\n");\r
- SysKeyboardAImpl_Unacquire(iface);\r
- }\r
- \r
- current_lock = This;\r
-\r
- if (This->buffersize > 0) {\r
- This->buffer = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY,\r
- This->buffersize * sizeof(*(This->buffer)));\r
- This->start = 0;\r
- This->count = 0;\r
- This->overflow = FALSE;\r
- } else {\r
+ if (current != NULL)\r
+ {\r
+ FIXME("Not more than one keyboard can be acquired at the same time.\n");\r
+ SysKeyboardAImpl_Unacquire(iface);\r
+ }\r
+\r
+ current = This;\r
+\r
+ if (This->buffersize > 0)\r
+ {\r
+ This->buffer = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY,\r
+ This->buffersize * sizeof(*(This->buffer)));\r
+ This->start = 0;\r
+ This->count = 0;\r
+ This->overflow = FALSE;\r
+ InitializeCriticalSection(&(This->crit));\r
+ }\r
+ else\r
This->buffer = NULL;\r
- }\r
\r
- /*keyboard_hook = SetWindowsHookExW( WH_KEYBOARD_LL, KeyboardCallback, DINPUT_instance, 0 );*/\r
\r
return DI_OK;\r
}\r
if (This->acquired == 0)\r
return DI_NOEFFECT;\r
\r
- /* No more locks */\r
- if (current_lock == This)\r
- current_lock = NULL;\r
+ if (current == This)\r
+ current = NULL;\r
else\r
- ERR("this != current_lock\n");\r
+ ERR("this != current\n");\r
\r
- /* Unacquire device */\r
This->acquired = 0;\r
\r
- if (This->buffersize >= 0) {\r
- HeapFree(GetProcessHeap(), 0, This->buffer);\r
- This->buffer = NULL;\r
- }\r
+ if (This->buffersize >= 0)\r
+ {\r
+ HeapFree(GetProcessHeap(), 0, This->buffer);\r
+ This->buffer = NULL;\r
+ DeleteCriticalSection(&(This->crit));\r
+ }\r
\r
return DI_OK;\r
}\r
else\r
devcaps.dwDevType = DIDEVTYPE_KEYBOARD | (DIDEVTYPEKEYBOARD_UNKNOWN << 8);\r
devcaps.dwAxes = 0;\r
- devcaps.dwButtons = WINE_DINPUT_KEYBOARD_MAX_KEYS;\r
+ devcaps.dwButtons = 256;\r
devcaps.dwPOVs = 0;\r
devcaps.dwFFSamplePeriod = 0;\r
devcaps.dwFFMinTimeResolution = 0;\r
TRACE("(this=%p,%p)\n", This, pdidi);\r
\r
if (pdidi->dwSize != sizeof(DIDEVICEINSTANCEA)) {\r
- WARN(" dinput3 not supported yet...\n");\r
+ WARN(" dinput3 not supporte yet...\n");\r
return DI_OK;\r
}\r
\r
TRACE("(this=%p,%p)\n", This, pdidi);\r
\r
if (pdidi->dwSize != sizeof(DIDEVICEINSTANCEW)) {\r
- WARN(" dinput3 not supported yet...\n");\r
+ WARN(" dinput3 not supporte yet...\n");\r
return DI_OK;\r
}\r
\r
SysKeyboardAImpl_Release,\r
SysKeyboardAImpl_GetCapabilities,\r
SysKeyboardAImpl_EnumObjects,\r
- SysKeyboardAImpl_GetProperty,\r
+ IDirectInputDevice2AImpl_GetProperty,\r
SysKeyboardAImpl_SetProperty,\r
SysKeyboardAImpl_Acquire,\r
SysKeyboardAImpl_Unacquire,\r
XCAST(Release)SysKeyboardAImpl_Release,\r
XCAST(GetCapabilities)SysKeyboardAImpl_GetCapabilities,\r
SysKeyboardWImpl_EnumObjects,\r
- XCAST(GetProperty)SysKeyboardAImpl_GetProperty,\r
+ XCAST(GetProperty)IDirectInputDevice2AImpl_GetProperty,\r
XCAST(SetProperty)SysKeyboardAImpl_SetProperty,\r
XCAST(Acquire)SysKeyboardAImpl_Acquire,\r
XCAST(Unacquire)SysKeyboardAImpl_Unacquire,\r
\r
WINE_DEFAULT_DEBUG_CHANNEL(dinput);\r
\r
+\r
/* Wine mouse driver object instances */\r
#define WINE_MOUSE_X_AXIS_INSTANCE 0\r
#define WINE_MOUSE_Y_AXIS_INSTANCE 1\r
newDevice = HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(SysMouseImpl));\r
newDevice->ref = 1;\r
newDevice->lpVtbl = mvt;\r
-\r
+#ifndef __REACTOS__\r
InitializeCriticalSection(&(newDevice->crit));\r
-\r
+#endif\r
memcpy(&(newDevice->guid),rguid,sizeof(*rguid));\r
\r
/* Per default, Wine uses its internal data format */\r
newDevice->df = (DIDATAFORMAT *) &Wine_InternalMouseFormat;\r
memcpy(newDevice->offset_array, offset_array, WINE_INTERNALMOUSE_NUM_OBJS * sizeof(int));\r
- newDevice->wine_df = HeapAlloc(GetProcessHeap(), 0, sizeof(DataFormat));\r
+ newDevice->wine_df = (DataFormat *) HeapAlloc(GetProcessHeap(), 0, sizeof(DataFormat));\r
newDevice->wine_df->size = 0;\r
newDevice->wine_df->internal_format_size = Wine_InternalMouseFormat.dwDataSize;\r
newDevice->wine_df->dt = NULL;\r
return DIERR_DEVICENOTREG;\r
}\r
\r
-const struct dinput_device mouse_device = {\r
+static dinput_device mousedev = {\r
+ 100,\r
"Wine mouse driver",\r
mousedev_enum_deviceA,\r
mousedev_enum_deviceW,\r
mousedev_create_deviceW\r
};\r
\r
+#ifdef __REACTOS__\r
+void scan_mouse()\r
+{\r
+ dinput_register_device(&mousedev);\r
+}\r
+\r
+DECL_GLOBAL_CONSTRUCTOR(mousedev_register) { dinput_register_device(&mousedev); }\r
+#endif\r
+\r
/******************************************************************************\r
* SysMouseA (DInput Mouse support)\r
*/\r
if (This->dwCoopLevel & DISCL_EXCLUSIVE)\r
ShowCursor(TRUE); /* show cursor */\r
}\r
+#ifndef __REACTOS__\r
DeleteCriticalSection(&(This->crit));\r
+#endif\r
\r
-\r
- /* Free the DataFormat */\r
+ /* Free the DataFormat */\r
if (This->df != &(Wine_InternalMouseFormat)) {\r
HeapFree(GetProcessHeap(), 0, This->df->rgodf);\r
HeapFree(GetProcessHeap(), 0, This->df);\r
\r
if (code != HC_ACTION) return CallNextHookEx( This->hook, code, wparam, lparam );\r
\r
+#ifndef __REACTOS__\r
EnterCriticalSection(&(This->crit));\r
+#endif\r
+\r
dwCoop = This->dwCoopLevel;\r
\r
/* Only allow mouse events every 10 ms.\r
* This is to allow the cursor to start acceleration before\r
* the warps happen. But if it involves a mouse button event we\r
* allow it since we don't want to lose the clicks.\r
- * in reactos 1ms instead for 10ms\r
*/\r
- if (((GetCurrentTime() - last_event) < 1)\r
+ if (((GetCurrentTime() - last_event) < 10)\r
&& wparam == WM_MOUSEMOVE)\r
goto end;\r
else last_event = GetCurrentTime();\r
This->m_state.rgbButtons[0], This->m_state.rgbButtons[2], This->m_state.rgbButtons[1]);\r
\r
end:\r
+#ifndef __REACTOS__\r
LeaveCriticalSection(&(This->crit));\r
+#endif\r
\r
if (dwCoop & DISCL_NONEXCLUSIVE) {\r
/* Pass the events down to previous handlers (e.g. win32 input) */\r
MapWindowPoints(This->win, HWND_DESKTOP, &This->mapped_center, 1);\r
}\r
\r
-#ifdef __REACTOS__ \r
-int poll_mouse=0;\r
-#endif\r
+\r
/******************************************************************************\r
* Acquire : gets exclusive control of the mouse\r
*/\r
static HRESULT WINAPI SysMouseAImpl_Acquire(LPDIRECTINPUTDEVICE8A iface)\r
{\r
SysMouseImpl *This = (SysMouseImpl *)iface;\r
- RECT rect;\r
- POINT point;\r
+ RECT rect;\r
\r
TRACE("(this=%p)\n",This);\r
\r
- if (This->acquired)\r
- return S_FALSE;\r
- \r
- This->acquired = 1;\r
-\r
- /* Store (in a global variable) the current lock */\r
- current_lock = (IDirectInputDevice8A*)This;\r
- \r
- /* Init the mouse state */\r
- GetCursorPos( &point );\r
- if (This->absolute) {\r
- This->m_state.lX = point.x;\r
- This->m_state.lY = point.y;\r
- This->prevX = point.x;\r
- This->prevY = point.y;\r
- } else {\r
- This->m_state.lX = 0;\r
- This->m_state.lY = 0;\r
- This->org_coords = point;\r
- }\r
- This->m_state.lZ = 0;\r
- This->m_state.rgbButtons[0] = ((GetKeyState(VK_LBUTTON) & 0x80) ? 0xFF : 0x00);\r
- This->m_state.rgbButtons[1] = ((GetKeyState(VK_RBUTTON) & 0x80) ? 0xFF : 0x00);\r
- This->m_state.rgbButtons[2] = ((GetKeyState(VK_MBUTTON) & 0x80) ? 0xFF : 0x00);\r
- \r
- /* Install our mouse hook */\r
- if (This->dwCoopLevel & DISCL_EXCLUSIVE)\r
- ShowCursor(FALSE); /* hide cursor */\r
+ \r
\r
- This->hook = SetWindowsHookExA( WH_MOUSE_LL, dinput_mouse_hook, DINPUT_instance, 0 );\r
+ if (This->acquired == 0) {\r
+ POINT point;\r
+ \r
+ \r
\r
- /* Get the window dimension and find the center */ \r
- GetWindowRect(This->win, &rect);\r
- This->win_centerX = (rect.right - rect.left) / 2;\r
- This->win_centerY = (rect.bottom - rect.top ) / 2;\r
+ /* Store (in a global variable) the current lock */\r
+ current_lock = (IDirectInputDevice8A*)This;\r
+ \r
+ /* Init the mouse state */\r
+ GetCursorPos( &point );\r
+ if (This->absolute) {\r
+ This->m_state.lX = point.x;\r
+ This->m_state.lY = point.y;\r
+ This->prevX = point.x;\r
+ This->prevY = point.y;\r
+ } else {\r
+ This->m_state.lX = 0;\r
+ This->m_state.lY = 0;\r
+ This->org_coords = point;\r
+ }\r
+ This->m_state.lZ = 0;\r
+ This->m_state.rgbButtons[0] = ((GetKeyState(VK_LBUTTON) & 0x80) ? 0xFF : 0x00);\r
+ This->m_state.rgbButtons[1] = ((GetKeyState(VK_RBUTTON) & 0x80) ? 0xFF : 0x00);\r
+ This->m_state.rgbButtons[2] = ((GetKeyState(VK_MBUTTON) & 0x80) ? 0xFF : 0x00);\r
+ \r
+ /* Install our mouse hook */\r
+ if (This->dwCoopLevel & DISCL_EXCLUSIVE)\r
+ ShowCursor(FALSE); /* hide cursor */\r
\r
+ This->hook = SetWindowsHookExA( WH_MOUSE_LL, dinput_mouse_hook, DINPUT_instance, 0 );\r
\r
- /* Warp the mouse to the center of the window */\r
- if (This->absolute == 0) {\r
- This->mapped_center.x = This->win_centerX;\r
- This->mapped_center.y = This->win_centerY;\r
- MapWindowPoints(This->win, HWND_DESKTOP, &This->mapped_center, 1);\r
- TRACE("Warping mouse to %ld - %ld\n", This->mapped_center.x, This->mapped_center.y);\r
- SetCursorPos( This->mapped_center.x, This->mapped_center.y );\r
+ /* Get the window dimension and find the center */\r
+ GetWindowRect(This->win, &rect);\r
+ This->win_centerX = (rect.right - rect.left) / 2;\r
+ This->win_centerY = (rect.bottom - rect.top ) / 2;\r
+ \r
+ /* Warp the mouse to the center of the window */\r
+ if (This->absolute == 0) {\r
+ This->mapped_center.x = This->win_centerX;\r
+ This->mapped_center.y = This->win_centerY;\r
+ MapWindowPoints(This->win, HWND_DESKTOP, &This->mapped_center, 1);\r
+ TRACE("Warping mouse to %ld - %ld\n", This->mapped_center.x, This->mapped_center.y);\r
+ SetCursorPos( This->mapped_center.x, This->mapped_center.y );\r
#ifdef MOUSE_HACK\r
- This->need_warp = WARP_DONE;\r
+ This->need_warp = WARP_DONE;\r
#else\r
- This->need_warp = WARP_STARTED;\r
+ This->need_warp = WARP_STARTED;\r
#endif\r
- }\r
+ }\r
\r
- return DI_OK;\r
+ This->acquired = 1;\r
+ return DI_OK;\r
+ }\r
+ return S_FALSE;\r
}\r
\r
/******************************************************************************\r
\r
TRACE("(this=%p)\n",This);\r
\r
- if (0 == This->acquired) {\r
- return DI_NOEFFECT;\r
- }\r
+ if (This->acquired) {\r
+ /* Reinstall previous mouse event handler */\r
\r
- /* Reinstall previous mouse event handler */\r
- if (This->hook) {\r
\r
- UnhookWindowsHookEx( This->hook );\r
- This->hook = 0;\r
- \r
- if (This->dwCoopLevel & DISCL_EXCLUSIVE)\r
- ShowCursor(TRUE); /* show cursor */\r
- }\r
+ if (This->hook) {\r
+ UnhookWindowsHookEx( This->hook );\r
+ This->hook = 0;\r
+\r
+ if (This->dwCoopLevel & DISCL_EXCLUSIVE)\r
+ ShowCursor(TRUE); /* show cursor */\r
+ }\r
+\r
+ /* No more locks */\r
+ current_lock = NULL;\r
\r
- /* No more locks */\r
- if (current_lock == (IDirectInputDevice8A*) This)\r
- current_lock = NULL;\r
- else\r
- ERR("this(%p) != current_lock(%p)\n", This, current_lock);\r
+ /* Unacquire device */\r
+ This->acquired = 0;\r
\r
- /* Unacquire device */\r
- This->acquired = 0;\r
- \r
- /* And put the mouse cursor back where it was at acquire time */\r
- if (This->absolute == 0) {\r
- TRACE(" warping mouse back to (%ld , %ld)\n", This->org_coords.x, This->org_coords.y);\r
- SetCursorPos(This->org_coords.x, This->org_coords.y);\r
+ /* And put the mouse cursor back where it was at acquire time */\r
+ if (This->absolute == 0) {\r
+ TRACE(" warping mouse back to (%ld , %ld)\n", This->org_coords.x, This->org_coords.y);\r
+ SetCursorPos(This->org_coords.x, This->org_coords.y);\r
+ }\r
+ } else {\r
+ return DI_NOEFFECT;\r
}\r
\r
return DI_OK;\r
\r
// if you call poll then to getdevicestate\r
// it did not send back right value in windows \r
+int poll_mouse=0;\r
\r
+#ifdef __REACTOS__\r
+void getmousesvalue(LPDIRECTINPUTDEVICE8A iface);\r
+int filp=0;\r
+void getmousesvalue(LPDIRECTINPUTDEVICE8A iface)\r
+{\r
+ static long last_event = 0;\r
+\r
+ POINT point;\r
+ SysMouseImpl *This = (SysMouseImpl *)iface; \r
\r
+ This->m_state.rgbButtons[0] = ((GetKeyState(VK_LBUTTON) & 0x80) ? 0xFF : 0x00); \r
+ This->m_state.rgbButtons[1] = ((GetKeyState(VK_RBUTTON) & 0x80) ? 0xFF : 0x00); \r
+ This->m_state.rgbButtons[2] = ((GetKeyState(VK_MBUTTON) & 0x80) ? 0xFF : 0x00); \r
+ This->m_state.rgbButtons[3] = ((GetKeyState(VK_XBUTTON1) & 0x80) ? 0xFF : 0x00); \r
+ This->m_state.rgbButtons[4] = ((GetKeyState(VK_XBUTTON2) & 0x80) ? 0xFF : 0x00); \r
+\r
+ \r
+ \r
+ \r
+ if (poll_mouse==1) filp=0;\r
+ if (filp==2) filp=0;\r
+ if (filp==0) {\r
+ GetCursorPos( &point ); \r
+ \r
+ if (This->prevX == point.x) This->m_state.lX = 0;\r
+ else {\r
+ This->prevX = point.x;\r
+ This->m_state.lX = point.x - This->org_coords.x; \r
+ } \r
+\r
+ if (This->prevY == point.y) This->m_state.lY = 0;\r
+ else {\r
+ This->prevY = point.y;\r
+ This->m_state.lY = point.y - This->org_coords.y; \r
+ } \r
+\r
+ }\r
+ else \r
+ {\r
+ This->m_state.lX = 0;\r
+ This->m_state.lY = 0; \r
+ }\r
+ filp++;\r
+ \r
+// check see if buffer have been set\r
+\r
+}\r
+\r
+#endif\r
\r
-/* wine does not implement poll but we do, this is from GDI patch from the mouse */\r
static HRESULT WINAPI SysMouseAImpl_Poll(LPDIRECTINPUTDEVICE8A iface)\r
{\r
int retValue = DI_OK;\r
-\r
\r
SysMouseImpl *This = (SysMouseImpl *)iface; \r
-\r
-\r
- if (poll_mouse==0) { \r
+ if (poll_mouse==0) {\r
+ retValue=SysMouseAImpl_Acquire(iface); \r
poll_mouse=1; \r
- retValue=SysMouseAImpl_Acquire(iface);\r
if (retValue!=DI_OK) retValue=DIERR_NOTACQUIRED;\r
else retValue = DI_OK;\r
}\r
- \r
+\r
return retValue;\r
}\r
\r
SysMouseImpl *This = (SysMouseImpl *)iface; \r
POINT point; \r
\r
+#ifndef __REACTOS__\r
EnterCriticalSection(&(This->crit));\r
-\r
+#endif\r
\r
TRACE("(this=%p,0x%08lx,%p): \n",This,len,ptr);\r
\r
/* Copy the current mouse state */ \r
fill_DataFormat(ptr, &(This->m_state), This->wine_df);\r
\r
-\r
+#ifdef __REACTOS__\r
// this fix windows bugs when \r
// some program calling on mouse poll\r
if (poll_mouse==1) poll_mouse=0; \r
This->m_state.lZ = 0;\r
} \r
}\r
- \r
+#endif \r
\r
/* Check if we need to do a mouse warping */\r
if (This->need_warp == WARP_NEEDED) {\r
#endif\r
}\r
\r
-\r
+#ifndef __REACTOS__\r
LeaveCriticalSection(&(This->crit));\r
-\r
+#endif\r
\r
TRACE("(X: %ld - Y: %ld - Z: %ld L: %02x M: %02x R: %02x)\n",\r
This->m_state.lX, This->m_state.lY, This->m_state.lZ,\r
\r
\r
TRACE("(%p)->(dods=%ld,entries=%ld,fl=0x%08lx)\n",This,dodsize,*entries,flags);\r
- \r
+ \r
+\r
if (This->acquired == 0) {\r
WARN(" application tries to get data from an unacquired device !\n");\r
- return DIERR_NOTACQUIRED;\r
+ //return DIERR_NOTACQUIRED;\r
\r
// windows does not get any data if \r
// we do not call manual to mouse Acquire\r
// this is only need if some apps calling on getdevice data direcly\r
// in windows GetdeviceData does always update first the data\r
// then return it.\r
+ SysMouseAImpl_Acquire(iface);\r
}\r
\r
- EnterCriticalSection(&(This->crit));\r
+ \r
+\r
+ \r
\r
\r
+\r
+#ifndef __REACTOS__\r
+ EnterCriticalSection(&(This->crit));\r
+#endif\r
+\r
// FIXME mouse are bit choppy here. \r
\r
len = ((This->queue_head < This->queue_tail) ? This->queue_len : 0)\r
}\r
if (!(flags & DIGDD_PEEK))\r
This->queue_tail = nqtail;\r
-\r
+#ifndef __REACTOS__\r
LeaveCriticalSection(&(This->crit));\r
-\r
+#endif\r
/* Check if we need to do a mouse warping */\r
\r
\r
#else\r
This->need_warp = WARP_STARTED;\r
#endif\r
- }\r
-\r
+ } \r
return DI_OK;\r
}\r
\r
\r
TRACE("buffersize = %ld\n",pd->dwData);\r
\r
- This->data_queue = HeapAlloc(GetProcessHeap(),0, pd->dwData * sizeof(DIDEVICEOBJECTDATA));\r
+ This->data_queue = (LPDIDEVICEOBJECTDATA)HeapAlloc(GetProcessHeap(),0,\r
+ pd->dwData * sizeof(DIDEVICEOBJECTDATA));\r
This->queue_head = 0;\r
This->queue_tail = 0;\r
This->queue_len = pd->dwData;\r
{\r
SysMouseImpl *This = (SysMouseImpl *)iface;\r
\r
- TRACE("(this=%p,%s,%p)\n",\r
+ TRACE("(this=%p,%s,%p): stub!\n",\r
iface, debugstr_guid(rguid), pdiph);\r
\r
if (TRACE_ON(dinput))\r