mirror of
https://github.com/reactos/reactos.git
synced 2024-12-30 19:14:31 +00:00
"Sync to Wine-20050419" by GvG
update reactos specify patch by Magnus Olsen markout better what is reactos specify code but not all code are not mark svn path=/trunk/; revision=15119
This commit is contained in:
parent
ad3d28c6d8
commit
d963f8c48f
9 changed files with 577 additions and 290 deletions
|
@ -16,10 +16,6 @@
|
||||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* TODO:
|
|
||||||
* add keyboard
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
|
|
||||||
#include "windef.h"
|
#include "windef.h"
|
||||||
|
@ -27,7 +23,7 @@
|
||||||
|
|
||||||
#define numObjects(x) (sizeof(x) / sizeof(x[0]))
|
#define numObjects(x) (sizeof(x) / sizeof(x[0]))
|
||||||
|
|
||||||
DIOBJECTDATAFORMAT dfDIJoystick[] = {
|
static const DIOBJECTDATAFORMAT dfDIJoystick[] = {
|
||||||
{ &GUID_XAxis,DIJOFS_X,DIDFT_OPTIONAL|DIDFT_AXIS|DIDFT_ANYINSTANCE,0},
|
{ &GUID_XAxis,DIJOFS_X,DIDFT_OPTIONAL|DIDFT_AXIS|DIDFT_ANYINSTANCE,0},
|
||||||
{ &GUID_YAxis,DIJOFS_Y,DIDFT_OPTIONAL|DIDFT_AXIS|DIDFT_ANYINSTANCE,0},
|
{ &GUID_YAxis,DIJOFS_Y,DIDFT_OPTIONAL|DIDFT_AXIS|DIDFT_ANYINSTANCE,0},
|
||||||
{ &GUID_ZAxis,DIJOFS_Z,DIDFT_OPTIONAL|DIDFT_AXIS|DIDFT_ANYINSTANCE,0},
|
{ &GUID_ZAxis,DIJOFS_Z,DIDFT_OPTIONAL|DIDFT_AXIS|DIDFT_ANYINSTANCE,0},
|
||||||
|
@ -80,10 +76,10 @@ const DIDATAFORMAT c_dfDIJoystick = {
|
||||||
DIDF_ABSAXIS,
|
DIDF_ABSAXIS,
|
||||||
sizeof(DIJOYSTATE2),
|
sizeof(DIJOYSTATE2),
|
||||||
numObjects(dfDIJoystick),
|
numObjects(dfDIJoystick),
|
||||||
dfDIJoystick
|
(LPDIOBJECTDATAFORMAT)dfDIJoystick
|
||||||
};
|
};
|
||||||
|
|
||||||
DIOBJECTDATAFORMAT dfDIJoystick2[] = {
|
static const DIOBJECTDATAFORMAT dfDIJoystick2[] = {
|
||||||
{ &GUID_XAxis,DIJOFS_X,DIDFT_OPTIONAL|DIDFT_AXIS|DIDFT_ANYINSTANCE,0},
|
{ &GUID_XAxis,DIJOFS_X,DIDFT_OPTIONAL|DIDFT_AXIS|DIDFT_ANYINSTANCE,0},
|
||||||
{ &GUID_YAxis,DIJOFS_Y,DIDFT_OPTIONAL|DIDFT_AXIS|DIDFT_ANYINSTANCE,0},
|
{ &GUID_YAxis,DIJOFS_Y,DIDFT_OPTIONAL|DIDFT_AXIS|DIDFT_ANYINSTANCE,0},
|
||||||
{ &GUID_ZAxis,DIJOFS_Z,DIDFT_OPTIONAL|DIDFT_AXIS|DIDFT_ANYINSTANCE,0},
|
{ &GUID_ZAxis,DIJOFS_Z,DIDFT_OPTIONAL|DIDFT_AXIS|DIDFT_ANYINSTANCE,0},
|
||||||
|
@ -256,10 +252,10 @@ const DIDATAFORMAT c_dfDIJoystick2 = {
|
||||||
DIDF_ABSAXIS,
|
DIDF_ABSAXIS,
|
||||||
sizeof(DIJOYSTATE2),
|
sizeof(DIJOYSTATE2),
|
||||||
numObjects(dfDIJoystick2),
|
numObjects(dfDIJoystick2),
|
||||||
dfDIJoystick2
|
(LPDIOBJECTDATAFORMAT)dfDIJoystick2
|
||||||
};
|
};
|
||||||
|
|
||||||
DIOBJECTDATAFORMAT dfDIMouse[] = {
|
static const DIOBJECTDATAFORMAT dfDIMouse[] = {
|
||||||
{ &GUID_XAxis, DIMOFS_X, DIDFT_ANYINSTANCE | DIDFT_AXIS, 0 },
|
{ &GUID_XAxis, DIMOFS_X, DIDFT_ANYINSTANCE | DIDFT_AXIS, 0 },
|
||||||
{ &GUID_YAxis, DIMOFS_Y, DIDFT_ANYINSTANCE | DIDFT_AXIS, 0 },
|
{ &GUID_YAxis, DIMOFS_Y, DIDFT_ANYINSTANCE | DIDFT_AXIS, 0 },
|
||||||
{ &GUID_ZAxis, DIMOFS_Z, DIDFT_OPTIONAL | DIDFT_ANYINSTANCE | DIDFT_AXIS, 0 },
|
{ &GUID_ZAxis, DIMOFS_Z, DIDFT_OPTIONAL | DIDFT_ANYINSTANCE | DIDFT_AXIS, 0 },
|
||||||
|
@ -275,10 +271,10 @@ const DIDATAFORMAT c_dfDIMouse = {
|
||||||
DIDF_RELAXIS,
|
DIDF_RELAXIS,
|
||||||
sizeof(DIMOUSESTATE),
|
sizeof(DIMOUSESTATE),
|
||||||
numObjects(dfDIMouse),
|
numObjects(dfDIMouse),
|
||||||
dfDIMouse
|
(LPDIOBJECTDATAFORMAT)dfDIMouse
|
||||||
};
|
};
|
||||||
|
|
||||||
DIOBJECTDATAFORMAT dfDIMouse2[] = {
|
static const DIOBJECTDATAFORMAT dfDIMouse2[] = {
|
||||||
{ &GUID_XAxis, DIMOFS_X, DIDFT_ANYINSTANCE | DIDFT_AXIS, 0 },
|
{ &GUID_XAxis, DIMOFS_X, DIDFT_ANYINSTANCE | DIDFT_AXIS, 0 },
|
||||||
{ &GUID_YAxis, DIMOFS_Y, DIDFT_ANYINSTANCE | DIDFT_AXIS, 0 },
|
{ &GUID_YAxis, DIMOFS_Y, DIDFT_ANYINSTANCE | DIDFT_AXIS, 0 },
|
||||||
{ &GUID_ZAxis, DIMOFS_Z, DIDFT_OPTIONAL | DIDFT_ANYINSTANCE | DIDFT_AXIS, 0 },
|
{ &GUID_ZAxis, DIMOFS_Z, DIDFT_OPTIONAL | DIDFT_ANYINSTANCE | DIDFT_AXIS, 0 },
|
||||||
|
@ -298,5 +294,273 @@ const DIDATAFORMAT c_dfDIMouse2 = {
|
||||||
DIDF_RELAXIS,
|
DIDF_RELAXIS,
|
||||||
sizeof(DIMOUSESTATE2),
|
sizeof(DIMOUSESTATE2),
|
||||||
numObjects(dfDIMouse2),
|
numObjects(dfDIMouse2),
|
||||||
dfDIMouse2
|
(LPDIOBJECTDATAFORMAT)dfDIMouse2
|
||||||
|
};
|
||||||
|
|
||||||
|
static const DIOBJECTDATAFORMAT dfDIKeyboard[] = {
|
||||||
|
{ &GUID_Key,0,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(0),0},
|
||||||
|
{ &GUID_Key,1,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(1),0},
|
||||||
|
{ &GUID_Key,2,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(2),0},
|
||||||
|
{ &GUID_Key,3,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(3),0},
|
||||||
|
{ &GUID_Key,4,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(4),0},
|
||||||
|
{ &GUID_Key,5,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(5),0},
|
||||||
|
{ &GUID_Key,6,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(6),0},
|
||||||
|
{ &GUID_Key,7,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(7),0},
|
||||||
|
{ &GUID_Key,8,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(8),0},
|
||||||
|
{ &GUID_Key,9,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(9),0},
|
||||||
|
{ &GUID_Key,10,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(10),0},
|
||||||
|
{ &GUID_Key,11,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(11),0},
|
||||||
|
{ &GUID_Key,12,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(12),0},
|
||||||
|
{ &GUID_Key,13,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(13),0},
|
||||||
|
{ &GUID_Key,14,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(14),0},
|
||||||
|
{ &GUID_Key,15,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(15),0},
|
||||||
|
{ &GUID_Key,16,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(16),0},
|
||||||
|
{ &GUID_Key,17,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(17),0},
|
||||||
|
{ &GUID_Key,18,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(18),0},
|
||||||
|
{ &GUID_Key,19,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(19),0},
|
||||||
|
{ &GUID_Key,20,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(20),0},
|
||||||
|
{ &GUID_Key,21,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(21),0},
|
||||||
|
{ &GUID_Key,22,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(22),0},
|
||||||
|
{ &GUID_Key,23,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(23),0},
|
||||||
|
{ &GUID_Key,24,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(24),0},
|
||||||
|
{ &GUID_Key,25,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(25),0},
|
||||||
|
{ &GUID_Key,26,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(26),0},
|
||||||
|
{ &GUID_Key,27,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(27),0},
|
||||||
|
{ &GUID_Key,28,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(28),0},
|
||||||
|
{ &GUID_Key,29,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(29),0},
|
||||||
|
{ &GUID_Key,30,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(30),0},
|
||||||
|
{ &GUID_Key,31,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(31),0},
|
||||||
|
{ &GUID_Key,32,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(32),0},
|
||||||
|
{ &GUID_Key,33,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(33),0},
|
||||||
|
{ &GUID_Key,34,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(34),0},
|
||||||
|
{ &GUID_Key,35,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(35),0},
|
||||||
|
{ &GUID_Key,36,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(36),0},
|
||||||
|
{ &GUID_Key,37,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(37),0},
|
||||||
|
{ &GUID_Key,38,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(38),0},
|
||||||
|
{ &GUID_Key,39,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(39),0},
|
||||||
|
{ &GUID_Key,40,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(40),0},
|
||||||
|
{ &GUID_Key,41,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(41),0},
|
||||||
|
{ &GUID_Key,42,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(42),0},
|
||||||
|
{ &GUID_Key,43,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(43),0},
|
||||||
|
{ &GUID_Key,44,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(44),0},
|
||||||
|
{ &GUID_Key,45,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(45),0},
|
||||||
|
{ &GUID_Key,46,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(46),0},
|
||||||
|
{ &GUID_Key,47,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(47),0},
|
||||||
|
{ &GUID_Key,48,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(48),0},
|
||||||
|
{ &GUID_Key,49,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(49),0},
|
||||||
|
{ &GUID_Key,50,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(50),0},
|
||||||
|
{ &GUID_Key,51,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(51),0},
|
||||||
|
{ &GUID_Key,52,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(52),0},
|
||||||
|
{ &GUID_Key,53,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(53),0},
|
||||||
|
{ &GUID_Key,54,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(54),0},
|
||||||
|
{ &GUID_Key,55,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(55),0},
|
||||||
|
{ &GUID_Key,56,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(56),0},
|
||||||
|
{ &GUID_Key,57,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(57),0},
|
||||||
|
{ &GUID_Key,58,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(58),0},
|
||||||
|
{ &GUID_Key,59,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(59),0},
|
||||||
|
{ &GUID_Key,60,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(60),0},
|
||||||
|
{ &GUID_Key,61,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(61),0},
|
||||||
|
{ &GUID_Key,62,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(62),0},
|
||||||
|
{ &GUID_Key,63,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(63),0},
|
||||||
|
{ &GUID_Key,64,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(64),0},
|
||||||
|
{ &GUID_Key,65,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(65),0},
|
||||||
|
{ &GUID_Key,66,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(66),0},
|
||||||
|
{ &GUID_Key,67,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(67),0},
|
||||||
|
{ &GUID_Key,68,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(68),0},
|
||||||
|
{ &GUID_Key,69,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(69),0},
|
||||||
|
{ &GUID_Key,70,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(70),0},
|
||||||
|
{ &GUID_Key,71,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(71),0},
|
||||||
|
{ &GUID_Key,72,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(72),0},
|
||||||
|
{ &GUID_Key,73,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(73),0},
|
||||||
|
{ &GUID_Key,74,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(74),0},
|
||||||
|
{ &GUID_Key,75,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(75),0},
|
||||||
|
{ &GUID_Key,76,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(76),0},
|
||||||
|
{ &GUID_Key,77,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(77),0},
|
||||||
|
{ &GUID_Key,78,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(78),0},
|
||||||
|
{ &GUID_Key,79,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(79),0},
|
||||||
|
{ &GUID_Key,80,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(80),0},
|
||||||
|
{ &GUID_Key,81,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(81),0},
|
||||||
|
{ &GUID_Key,82,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(82),0},
|
||||||
|
{ &GUID_Key,83,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(83),0},
|
||||||
|
{ &GUID_Key,84,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(84),0},
|
||||||
|
{ &GUID_Key,85,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(85),0},
|
||||||
|
{ &GUID_Key,86,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(86),0},
|
||||||
|
{ &GUID_Key,87,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(87),0},
|
||||||
|
{ &GUID_Key,88,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(88),0},
|
||||||
|
{ &GUID_Key,89,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(89),0},
|
||||||
|
{ &GUID_Key,90,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(90),0},
|
||||||
|
{ &GUID_Key,91,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(91),0},
|
||||||
|
{ &GUID_Key,92,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(92),0},
|
||||||
|
{ &GUID_Key,93,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(93),0},
|
||||||
|
{ &GUID_Key,94,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(94),0},
|
||||||
|
{ &GUID_Key,95,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(95),0},
|
||||||
|
{ &GUID_Key,96,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(96),0},
|
||||||
|
{ &GUID_Key,97,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(97),0},
|
||||||
|
{ &GUID_Key,98,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(98),0},
|
||||||
|
{ &GUID_Key,99,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(99),0},
|
||||||
|
{ &GUID_Key,100,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(100),0},
|
||||||
|
{ &GUID_Key,101,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(101),0},
|
||||||
|
{ &GUID_Key,102,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(102),0},
|
||||||
|
{ &GUID_Key,103,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(103),0},
|
||||||
|
{ &GUID_Key,104,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(104),0},
|
||||||
|
{ &GUID_Key,105,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(105),0},
|
||||||
|
{ &GUID_Key,106,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(106),0},
|
||||||
|
{ &GUID_Key,107,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(107),0},
|
||||||
|
{ &GUID_Key,108,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(108),0},
|
||||||
|
{ &GUID_Key,109,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(109),0},
|
||||||
|
{ &GUID_Key,110,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(110),0},
|
||||||
|
{ &GUID_Key,111,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(111),0},
|
||||||
|
{ &GUID_Key,112,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(112),0},
|
||||||
|
{ &GUID_Key,113,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(113),0},
|
||||||
|
{ &GUID_Key,114,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(114),0},
|
||||||
|
{ &GUID_Key,115,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(115),0},
|
||||||
|
{ &GUID_Key,116,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(116),0},
|
||||||
|
{ &GUID_Key,117,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(117),0},
|
||||||
|
{ &GUID_Key,118,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(118),0},
|
||||||
|
{ &GUID_Key,119,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(119),0},
|
||||||
|
{ &GUID_Key,120,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(120),0},
|
||||||
|
{ &GUID_Key,121,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(121),0},
|
||||||
|
{ &GUID_Key,122,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(122),0},
|
||||||
|
{ &GUID_Key,123,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(123),0},
|
||||||
|
{ &GUID_Key,124,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(124),0},
|
||||||
|
{ &GUID_Key,125,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(125),0},
|
||||||
|
{ &GUID_Key,126,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(126),0},
|
||||||
|
{ &GUID_Key,127,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(127),0},
|
||||||
|
{ &GUID_Key,128,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(128),0},
|
||||||
|
{ &GUID_Key,129,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(129),0},
|
||||||
|
{ &GUID_Key,130,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(130),0},
|
||||||
|
{ &GUID_Key,131,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(131),0},
|
||||||
|
{ &GUID_Key,132,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(132),0},
|
||||||
|
{ &GUID_Key,133,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(133),0},
|
||||||
|
{ &GUID_Key,134,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(134),0},
|
||||||
|
{ &GUID_Key,135,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(135),0},
|
||||||
|
{ &GUID_Key,136,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(136),0},
|
||||||
|
{ &GUID_Key,137,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(137),0},
|
||||||
|
{ &GUID_Key,138,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(138),0},
|
||||||
|
{ &GUID_Key,139,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(139),0},
|
||||||
|
{ &GUID_Key,140,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(140),0},
|
||||||
|
{ &GUID_Key,141,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(141),0},
|
||||||
|
{ &GUID_Key,142,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(142),0},
|
||||||
|
{ &GUID_Key,143,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(143),0},
|
||||||
|
{ &GUID_Key,144,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(144),0},
|
||||||
|
{ &GUID_Key,145,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(145),0},
|
||||||
|
{ &GUID_Key,146,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(146),0},
|
||||||
|
{ &GUID_Key,147,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(147),0},
|
||||||
|
{ &GUID_Key,148,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(148),0},
|
||||||
|
{ &GUID_Key,149,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(149),0},
|
||||||
|
{ &GUID_Key,150,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(150),0},
|
||||||
|
{ &GUID_Key,151,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(151),0},
|
||||||
|
{ &GUID_Key,152,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(152),0},
|
||||||
|
{ &GUID_Key,153,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(153),0},
|
||||||
|
{ &GUID_Key,154,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(154),0},
|
||||||
|
{ &GUID_Key,155,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(155),0},
|
||||||
|
{ &GUID_Key,156,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(156),0},
|
||||||
|
{ &GUID_Key,157,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(157),0},
|
||||||
|
{ &GUID_Key,158,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(158),0},
|
||||||
|
{ &GUID_Key,159,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(159),0},
|
||||||
|
{ &GUID_Key,160,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(160),0},
|
||||||
|
{ &GUID_Key,161,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(161),0},
|
||||||
|
{ &GUID_Key,162,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(162),0},
|
||||||
|
{ &GUID_Key,163,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(163),0},
|
||||||
|
{ &GUID_Key,164,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(164),0},
|
||||||
|
{ &GUID_Key,165,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(165),0},
|
||||||
|
{ &GUID_Key,166,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(166),0},
|
||||||
|
{ &GUID_Key,167,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(167),0},
|
||||||
|
{ &GUID_Key,168,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(168),0},
|
||||||
|
{ &GUID_Key,169,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(169),0},
|
||||||
|
{ &GUID_Key,170,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(170),0},
|
||||||
|
{ &GUID_Key,171,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(171),0},
|
||||||
|
{ &GUID_Key,172,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(172),0},
|
||||||
|
{ &GUID_Key,173,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(173),0},
|
||||||
|
{ &GUID_Key,174,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(174),0},
|
||||||
|
{ &GUID_Key,175,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(175),0},
|
||||||
|
{ &GUID_Key,176,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(176),0},
|
||||||
|
{ &GUID_Key,177,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(177),0},
|
||||||
|
{ &GUID_Key,178,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(178),0},
|
||||||
|
{ &GUID_Key,179,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(179),0},
|
||||||
|
{ &GUID_Key,180,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(180),0},
|
||||||
|
{ &GUID_Key,181,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(181),0},
|
||||||
|
{ &GUID_Key,182,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(182),0},
|
||||||
|
{ &GUID_Key,183,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(183),0},
|
||||||
|
{ &GUID_Key,184,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(184),0},
|
||||||
|
{ &GUID_Key,185,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(185),0},
|
||||||
|
{ &GUID_Key,186,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(186),0},
|
||||||
|
{ &GUID_Key,187,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(187),0},
|
||||||
|
{ &GUID_Key,188,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(188),0},
|
||||||
|
{ &GUID_Key,189,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(189),0},
|
||||||
|
{ &GUID_Key,190,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(190),0},
|
||||||
|
{ &GUID_Key,191,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(191),0},
|
||||||
|
{ &GUID_Key,192,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(192),0},
|
||||||
|
{ &GUID_Key,193,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(193),0},
|
||||||
|
{ &GUID_Key,194,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(194),0},
|
||||||
|
{ &GUID_Key,195,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(195),0},
|
||||||
|
{ &GUID_Key,196,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(196),0},
|
||||||
|
{ &GUID_Key,197,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(197),0},
|
||||||
|
{ &GUID_Key,198,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(198),0},
|
||||||
|
{ &GUID_Key,199,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(199),0},
|
||||||
|
{ &GUID_Key,200,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(200),0},
|
||||||
|
{ &GUID_Key,201,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(201),0},
|
||||||
|
{ &GUID_Key,202,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(202),0},
|
||||||
|
{ &GUID_Key,203,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(203),0},
|
||||||
|
{ &GUID_Key,204,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(204),0},
|
||||||
|
{ &GUID_Key,205,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(205),0},
|
||||||
|
{ &GUID_Key,206,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(206),0},
|
||||||
|
{ &GUID_Key,207,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(207),0},
|
||||||
|
{ &GUID_Key,208,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(208),0},
|
||||||
|
{ &GUID_Key,209,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(209),0},
|
||||||
|
{ &GUID_Key,210,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(210),0},
|
||||||
|
{ &GUID_Key,211,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(211),0},
|
||||||
|
{ &GUID_Key,212,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(212),0},
|
||||||
|
{ &GUID_Key,213,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(213),0},
|
||||||
|
{ &GUID_Key,214,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(214),0},
|
||||||
|
{ &GUID_Key,215,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(215),0},
|
||||||
|
{ &GUID_Key,216,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(216),0},
|
||||||
|
{ &GUID_Key,217,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(217),0},
|
||||||
|
{ &GUID_Key,218,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(218),0},
|
||||||
|
{ &GUID_Key,219,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(219),0},
|
||||||
|
{ &GUID_Key,220,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(220),0},
|
||||||
|
{ &GUID_Key,221,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(221),0},
|
||||||
|
{ &GUID_Key,222,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(222),0},
|
||||||
|
{ &GUID_Key,223,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(223),0},
|
||||||
|
{ &GUID_Key,224,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(224),0},
|
||||||
|
{ &GUID_Key,225,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(225),0},
|
||||||
|
{ &GUID_Key,226,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(226),0},
|
||||||
|
{ &GUID_Key,227,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(227),0},
|
||||||
|
{ &GUID_Key,228,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(228),0},
|
||||||
|
{ &GUID_Key,229,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(229),0},
|
||||||
|
{ &GUID_Key,230,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(230),0},
|
||||||
|
{ &GUID_Key,231,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(231),0},
|
||||||
|
{ &GUID_Key,232,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(232),0},
|
||||||
|
{ &GUID_Key,233,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(233),0},
|
||||||
|
{ &GUID_Key,234,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(234),0},
|
||||||
|
{ &GUID_Key,235,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(235),0},
|
||||||
|
{ &GUID_Key,236,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(236),0},
|
||||||
|
{ &GUID_Key,237,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(237),0},
|
||||||
|
{ &GUID_Key,238,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(238),0},
|
||||||
|
{ &GUID_Key,239,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(239),0},
|
||||||
|
{ &GUID_Key,240,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(240),0},
|
||||||
|
{ &GUID_Key,241,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(241),0},
|
||||||
|
{ &GUID_Key,242,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(242),0},
|
||||||
|
{ &GUID_Key,243,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(243),0},
|
||||||
|
{ &GUID_Key,244,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(244),0},
|
||||||
|
{ &GUID_Key,245,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(245),0},
|
||||||
|
{ &GUID_Key,246,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(246),0},
|
||||||
|
{ &GUID_Key,247,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(247),0},
|
||||||
|
{ &GUID_Key,248,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(248),0},
|
||||||
|
{ &GUID_Key,249,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(249),0},
|
||||||
|
{ &GUID_Key,250,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(250),0},
|
||||||
|
{ &GUID_Key,251,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(251),0},
|
||||||
|
{ &GUID_Key,252,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(252),0},
|
||||||
|
{ &GUID_Key,253,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(253),0},
|
||||||
|
{ &GUID_Key,254,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(254),0},
|
||||||
|
{ &GUID_Key,255,DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_MAKEINSTANCE(255),0}
|
||||||
|
};
|
||||||
|
|
||||||
|
const DIDATAFORMAT c_dfDIKeyboard = {
|
||||||
|
sizeof(DIDATAFORMAT),
|
||||||
|
sizeof(DIOBJECTDATAFORMAT),
|
||||||
|
DIDF_RELAXIS,
|
||||||
|
256,
|
||||||
|
numObjects(dfDIKeyboard),
|
||||||
|
(LPDIOBJECTDATAFORMAT)dfDIKeyboard
|
||||||
};
|
};
|
||||||
|
|
|
@ -290,12 +290,12 @@ DataFormat *create_DataFormat(const DIDATAFORMAT *wine_format, LPCDIDATAFORMAT a
|
||||||
int index = 0;
|
int index = 0;
|
||||||
DWORD next = 0;
|
DWORD next = 0;
|
||||||
|
|
||||||
ret = (DataFormat *) HeapAlloc(GetProcessHeap(), 0, sizeof(DataFormat));
|
ret = HeapAlloc(GetProcessHeap(), 0, sizeof(DataFormat));
|
||||||
|
|
||||||
done = (int *) HeapAlloc(GetProcessHeap(), 0, sizeof(int) * asked_format->dwNumObjs);
|
done = HeapAlloc(GetProcessHeap(), 0, sizeof(int) * asked_format->dwNumObjs);
|
||||||
memset(done, 0, sizeof(int) * asked_format->dwNumObjs);
|
memset(done, 0, sizeof(int) * asked_format->dwNumObjs);
|
||||||
|
|
||||||
dt = (DataTransform *) HeapAlloc(GetProcessHeap(), 0, asked_format->dwNumObjs * sizeof(DataTransform));
|
dt = HeapAlloc(GetProcessHeap(), 0, asked_format->dwNumObjs * sizeof(DataTransform));
|
||||||
|
|
||||||
TRACE("Creating DataTransform : \n");
|
TRACE("Creating DataTransform : \n");
|
||||||
|
|
||||||
|
|
|
@ -53,10 +53,14 @@ static IDirectInput7WVtbl ddi7wvt;
|
||||||
static IDirectInput8AVtbl ddi8avt;
|
static IDirectInput8AVtbl ddi8avt;
|
||||||
static IDirectInput8WVtbl ddi8wvt;
|
static IDirectInput8WVtbl ddi8wvt;
|
||||||
|
|
||||||
/* This array will be filled a dinput.so loading */
|
static const struct dinput_device *dinput_devices[] =
|
||||||
#define MAX_WINE_DINPUT_DEVICES 4
|
{
|
||||||
static dinput_device * dinput_devices[MAX_WINE_DINPUT_DEVICES];
|
&mouse_device,
|
||||||
static int nrof_dinput_devices = 0;
|
&keyboard_device,
|
||||||
|
&joystick_linuxinput_device,
|
||||||
|
&joystick_linux_device
|
||||||
|
};
|
||||||
|
#define NB_DINPUT_DEVICES (sizeof(dinput_devices)/sizeof(dinput_devices[0]))
|
||||||
|
|
||||||
HINSTANCE DINPUT_instance = NULL;
|
HINSTANCE DINPUT_instance = NULL;
|
||||||
|
|
||||||
|
@ -74,28 +78,7 @@ BOOL WINAPI DllMain( HINSTANCE inst, DWORD reason, LPVOID reserv)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* register a direct draw driver. We better not use malloc for we are in
|
|
||||||
* the ELF startup initialisation at this point.
|
|
||||||
*/
|
|
||||||
void dinput_register_device(dinput_device *device) {
|
|
||||||
int i;
|
|
||||||
|
|
||||||
/* insert according to priority */
|
|
||||||
for (i=0;i<nrof_dinput_devices;i++) {
|
|
||||||
if (dinput_devices[i]->pref <= device->pref) {
|
|
||||||
memcpy(dinput_devices+i+1,dinput_devices+i,sizeof(dinput_devices[0])*(nrof_dinput_devices-i));
|
|
||||||
dinput_devices[i] = device;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (i==nrof_dinput_devices) /* not found, or too low priority */
|
|
||||||
dinput_devices[nrof_dinput_devices] = device;
|
|
||||||
|
|
||||||
nrof_dinput_devices++;
|
|
||||||
|
|
||||||
/* increase MAX_DDRAW_DRIVERS if the line below triggers */
|
|
||||||
assert(nrof_dinput_devices <= MAX_WINE_DINPUT_DEVICES);
|
|
||||||
}
|
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
* DirectInputCreateEx (DINPUT.@)
|
* DirectInputCreateEx (DINPUT.@)
|
||||||
|
@ -111,7 +94,7 @@ HRESULT WINAPI DirectInputCreateEx(
|
||||||
if (IsEqualGUID(&IID_IDirectInputA,riid) ||
|
if (IsEqualGUID(&IID_IDirectInputA,riid) ||
|
||||||
IsEqualGUID(&IID_IDirectInput2A,riid) ||
|
IsEqualGUID(&IID_IDirectInput2A,riid) ||
|
||||||
IsEqualGUID(&IID_IDirectInput7A,riid)) {
|
IsEqualGUID(&IID_IDirectInput7A,riid)) {
|
||||||
This = (IDirectInputImpl*)HeapAlloc(GetProcessHeap(),0,sizeof(IDirectInputImpl));
|
This = HeapAlloc(GetProcessHeap(),0,sizeof(IDirectInputImpl));
|
||||||
This->lpVtbl = &ddi7avt;
|
This->lpVtbl = &ddi7avt;
|
||||||
This->ref = 1;
|
This->ref = 1;
|
||||||
This->version = 1;
|
This->version = 1;
|
||||||
|
@ -123,7 +106,7 @@ HRESULT WINAPI DirectInputCreateEx(
|
||||||
if (IsEqualGUID(&IID_IDirectInputW,riid) ||
|
if (IsEqualGUID(&IID_IDirectInputW,riid) ||
|
||||||
IsEqualGUID(&IID_IDirectInput2W,riid) ||
|
IsEqualGUID(&IID_IDirectInput2W,riid) ||
|
||||||
IsEqualGUID(&IID_IDirectInput7W,riid)) {
|
IsEqualGUID(&IID_IDirectInput7W,riid)) {
|
||||||
This = (IDirectInputImpl*)HeapAlloc(GetProcessHeap(),0,sizeof(IDirectInputImpl));
|
This = HeapAlloc(GetProcessHeap(),0,sizeof(IDirectInputImpl));
|
||||||
This->lpVtbl = &ddi7wvt;
|
This->lpVtbl = &ddi7wvt;
|
||||||
This->ref = 1;
|
This->ref = 1;
|
||||||
This->version = 1;
|
This->version = 1;
|
||||||
|
@ -133,7 +116,7 @@ HRESULT WINAPI DirectInputCreateEx(
|
||||||
}
|
}
|
||||||
|
|
||||||
if (IsEqualGUID(&IID_IDirectInput8A,riid)) {
|
if (IsEqualGUID(&IID_IDirectInput8A,riid)) {
|
||||||
This = (IDirectInputImpl*)HeapAlloc(GetProcessHeap(),0,sizeof(IDirectInputImpl));
|
This = HeapAlloc(GetProcessHeap(),0,sizeof(IDirectInputImpl));
|
||||||
This->lpVtbl = &ddi8avt;
|
This->lpVtbl = &ddi8avt;
|
||||||
This->ref = 1;
|
This->ref = 1;
|
||||||
This->version = 8;
|
This->version = 8;
|
||||||
|
@ -143,7 +126,7 @@ HRESULT WINAPI DirectInputCreateEx(
|
||||||
}
|
}
|
||||||
|
|
||||||
if (IsEqualGUID(&IID_IDirectInput8W,riid)) {
|
if (IsEqualGUID(&IID_IDirectInput8W,riid)) {
|
||||||
This = (IDirectInputImpl*)HeapAlloc(GetProcessHeap(),0,sizeof(IDirectInputImpl));
|
This = HeapAlloc(GetProcessHeap(),0,sizeof(IDirectInputImpl));
|
||||||
This->lpVtbl = &ddi8wvt;
|
This->lpVtbl = &ddi8wvt;
|
||||||
This->ref = 1;
|
This->ref = 1;
|
||||||
This->version = 8;
|
This->version = 8;
|
||||||
|
@ -164,7 +147,7 @@ HRESULT WINAPI DirectInputCreateA(HINSTANCE hinst, DWORD dwVersion, LPDIRECTINPU
|
||||||
TRACE("(0x%08lx,%04lx,%p,%p)\n", (DWORD)hinst,dwVersion,ppDI,punkOuter);
|
TRACE("(0x%08lx,%04lx,%p,%p)\n", (DWORD)hinst,dwVersion,ppDI,punkOuter);
|
||||||
|
|
||||||
//trace:dinput:DirectInputCreateA (0x00400000,0500,0x42bafc54,(nil))
|
//trace:dinput:DirectInputCreateA (0x00400000,0500,0x42bafc54,(nil))
|
||||||
This = (IDirectInputImpl*)HeapAlloc(GetProcessHeap(),0,sizeof(IDirectInputImpl));
|
This = HeapAlloc(GetProcessHeap(),0,sizeof(IDirectInputImpl));
|
||||||
This->lpVtbl = &ddi7avt;
|
This->lpVtbl = &ddi7avt;
|
||||||
This->ref = 1;
|
This->ref = 1;
|
||||||
if (dwVersion > 0x0700) {
|
if (dwVersion > 0x0700) {
|
||||||
|
@ -185,7 +168,7 @@ HRESULT WINAPI DirectInputCreateW(HINSTANCE hinst, DWORD dwVersion, LPDIRECTINPU
|
||||||
{
|
{
|
||||||
IDirectInputImpl* This;
|
IDirectInputImpl* This;
|
||||||
TRACE("(0x%08lx,%04lx,%p,%p)\n", (DWORD)hinst,dwVersion,ppDI,punkOuter);
|
TRACE("(0x%08lx,%04lx,%p,%p)\n", (DWORD)hinst,dwVersion,ppDI,punkOuter);
|
||||||
This = (IDirectInputImpl*)HeapAlloc(GetProcessHeap(),0,sizeof(IDirectInputImpl));
|
This = HeapAlloc(GetProcessHeap(),0,sizeof(IDirectInputImpl));
|
||||||
This->lpVtbl = &ddi7wvt;
|
This->lpVtbl = &ddi7wvt;
|
||||||
This->ref = 1;
|
This->ref = 1;
|
||||||
if (dwVersion >= 0x0800) {
|
if (dwVersion >= 0x0800) {
|
||||||
|
@ -248,16 +231,22 @@ static HRESULT WINAPI IDirectInputAImpl_EnumDevices(
|
||||||
TRACE("(this=%p,0x%04lx '%s',%p,%p,%04lx)\n",
|
TRACE("(this=%p,0x%04lx '%s',%p,%p,%04lx)\n",
|
||||||
This, dwDevType, _dump_DIDEVTYPE_value(dwDevType),
|
This, dwDevType, _dump_DIDEVTYPE_value(dwDevType),
|
||||||
lpCallback, pvRef, dwFlags);
|
lpCallback, pvRef, dwFlags);
|
||||||
|
#ifdef __REACTOS__
|
||||||
if (nrof_dinput_devices==0){
|
/* hack geting keyboard and mouse working */
|
||||||
|
if (NB_DINPUT_DEVICES==0){
|
||||||
scan_mouse();
|
scan_mouse();
|
||||||
scan_keyboard();
|
scan_keyboard();
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
TRACE(" flags: "); _dump_EnumDevices_dwFlags(dwFlags); TRACE("\n");
|
TRACE(" flags: "); _dump_EnumDevices_dwFlags(dwFlags); TRACE("\n");
|
||||||
|
|
||||||
|
|
||||||
for (i = 0; i < nrof_dinput_devices; i++) {
|
for (i = 0; i < NB_DINPUT_DEVICES; i++) {
|
||||||
|
#ifndef __REACTOS__
|
||||||
|
/* Wine Dinput does not support windows enum
|
||||||
|
we need a hack here */
|
||||||
|
if (!dinput_devices[i]->enum_deviceA) continue;
|
||||||
|
#endif
|
||||||
for (j = 0, r = -1; r != 0; j++) {
|
for (j = 0, r = -1; r != 0; j++) {
|
||||||
devInstance.dwSize = sizeof(devInstance);
|
devInstance.dwSize = sizeof(devInstance);
|
||||||
TRACE(" - checking device %d ('%s')\n", i, dinput_devices[i]->name);
|
TRACE(" - checking device %d ('%s')\n", i, dinput_devices[i]->name);
|
||||||
|
@ -283,10 +272,13 @@ static HRESULT WINAPI IDirectInputWImpl_EnumDevices(
|
||||||
DIDEVICEINSTANCEW devInstance;
|
DIDEVICEINSTANCEW devInstance;
|
||||||
int i, j, r;
|
int i, j, r;
|
||||||
|
|
||||||
if (nrof_dinput_devices==0){
|
#ifdef __REACTOS__
|
||||||
|
/* hack geting keyboard and mouse working */
|
||||||
|
if (NB_DINPUT_DEVICES==0){
|
||||||
scan_mouse();
|
scan_mouse();
|
||||||
scan_keyboard();
|
scan_keyboard();
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
TRACE("(this=%p,0x%04lx '%s',%p,%p,%04lx)\n",
|
TRACE("(this=%p,0x%04lx '%s',%p,%p,%04lx)\n",
|
||||||
This, dwDevType, _dump_DIDEVTYPE_value(dwDevType),
|
This, dwDevType, _dump_DIDEVTYPE_value(dwDevType),
|
||||||
|
@ -294,7 +286,13 @@ static HRESULT WINAPI IDirectInputWImpl_EnumDevices(
|
||||||
TRACE(" flags: "); _dump_EnumDevices_dwFlags(dwFlags); TRACE("\n");
|
TRACE(" flags: "); _dump_EnumDevices_dwFlags(dwFlags); TRACE("\n");
|
||||||
|
|
||||||
|
|
||||||
for (i = 0; i < nrof_dinput_devices; i++) {
|
for (i = 0; i < NB_DINPUT_DEVICES; i++) {
|
||||||
|
#ifndef __REACTOS__
|
||||||
|
/* Wine Dinput does not support windows enum
|
||||||
|
we need a hack here */
|
||||||
|
if (!dinput_devices[i]->enum_deviceW) continue;
|
||||||
|
#endif
|
||||||
|
|
||||||
for (j = 0, r = -1; r != 0; j++) {
|
for (j = 0, r = -1; r != 0; j++) {
|
||||||
devInstance.dwSize = sizeof(devInstance);
|
devInstance.dwSize = sizeof(devInstance);
|
||||||
TRACE(" - checking device %d ('%s')\n", i, dinput_devices[i]->name);
|
TRACE(" - checking device %d ('%s')\n", i, dinput_devices[i]->name);
|
||||||
|
@ -366,14 +364,18 @@ static HRESULT WINAPI IDirectInputAImpl_CreateDevice(
|
||||||
|
|
||||||
TRACE("(this=%p,%s,%p,%p)\n",This,debugstr_guid(rguid),pdev,punk);
|
TRACE("(this=%p,%s,%p,%p)\n",This,debugstr_guid(rguid),pdev,punk);
|
||||||
|
|
||||||
if (nrof_dinput_devices==0){
|
#ifdef __REACTOS__
|
||||||
|
/* hack geting keyboard and mouse working */
|
||||||
|
if (NB_DINPUT_DEVICES==0){
|
||||||
scan_mouse();
|
scan_mouse();
|
||||||
scan_keyboard();
|
scan_keyboard();
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Loop on all the devices to see if anyone matches the given GUID */
|
/* Loop on all the devices to see if anyone matches the given GUID */
|
||||||
for (i = 0; i < nrof_dinput_devices; i++) {
|
for (i = 0; i < NB_DINPUT_DEVICES; i++) {
|
||||||
HRESULT ret;
|
HRESULT ret;
|
||||||
|
if (!dinput_devices[i]->create_deviceA) continue;
|
||||||
if ((ret = dinput_devices[i]->create_deviceA(This, rguid, NULL, pdev)) == DI_OK)
|
if ((ret = dinput_devices[i]->create_deviceA(This, rguid, NULL, pdev)) == DI_OK)
|
||||||
return DI_OK;
|
return DI_OK;
|
||||||
|
|
||||||
|
@ -392,14 +394,18 @@ static HRESULT WINAPI IDirectInputWImpl_CreateDevice(LPDIRECTINPUT7A iface,
|
||||||
|
|
||||||
TRACE("(this=%p,%s,%p,%p)\n",This,debugstr_guid(rguid),pdev,punk);
|
TRACE("(this=%p,%s,%p,%p)\n",This,debugstr_guid(rguid),pdev,punk);
|
||||||
|
|
||||||
if (nrof_dinput_devices==0){
|
#ifdef __REACTOS__
|
||||||
|
/* hack geting keyboard and mouse working */
|
||||||
|
if (NB_DINPUT_DEVICES==0){
|
||||||
scan_mouse();
|
scan_mouse();
|
||||||
scan_keyboard();
|
scan_keyboard();
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Loop on all the devices to see if anyone matches the given GUID */
|
/* Loop on all the devices to see if anyone matches the given GUID */
|
||||||
for (i = 0; i < nrof_dinput_devices; i++) {
|
for (i = 0; i < NB_DINPUT_DEVICES; i++) {
|
||||||
HRESULT ret;
|
HRESULT ret;
|
||||||
|
if (!dinput_devices[i]->create_deviceW) continue;
|
||||||
if ((ret = dinput_devices[i]->create_deviceW(This, rguid, NULL, pdev)) == DI_OK)
|
if ((ret = dinput_devices[i]->create_deviceW(This, rguid, NULL, pdev)) == DI_OK)
|
||||||
return DI_OK;
|
return DI_OK;
|
||||||
|
|
||||||
|
@ -457,14 +463,18 @@ static HRESULT WINAPI IDirectInput7AImpl_CreateDeviceEx(LPDIRECTINPUT7A iface, R
|
||||||
|
|
||||||
TRACE("(%p)->(%s, %s, %p, %p)\n", This, debugstr_guid(rguid), debugstr_guid(riid), pvOut, lpUnknownOuter);
|
TRACE("(%p)->(%s, %s, %p, %p)\n", This, debugstr_guid(rguid), debugstr_guid(riid), pvOut, lpUnknownOuter);
|
||||||
|
|
||||||
if (nrof_dinput_devices==0){
|
#ifdef __REACTOS__
|
||||||
|
/* hack geting keyboard and mouse working */
|
||||||
|
if (NB_DINPUT_DEVICES==0){
|
||||||
scan_mouse();
|
scan_mouse();
|
||||||
scan_keyboard();
|
scan_keyboard();
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Loop on all the devices to see if anyone matches the given GUID */
|
/* Loop on all the devices to see if anyone matches the given GUID */
|
||||||
for (i = 0; i < nrof_dinput_devices; i++) {
|
for (i = 0; i < NB_DINPUT_DEVICES; i++) {
|
||||||
HRESULT ret;
|
HRESULT ret;
|
||||||
|
if (!dinput_devices[i]->create_deviceA) continue;
|
||||||
if ((ret = dinput_devices[i]->create_deviceA(This, rguid, riid, (LPDIRECTINPUTDEVICEA*) pvOut)) == DI_OK)
|
if ((ret = dinput_devices[i]->create_deviceA(This, rguid, riid, (LPDIRECTINPUTDEVICEA*) pvOut)) == DI_OK)
|
||||||
return DI_OK;
|
return DI_OK;
|
||||||
|
|
||||||
|
@ -484,7 +494,7 @@ static HRESULT WINAPI IDirectInput7WImpl_CreateDeviceEx(LPDIRECTINPUT7W iface, R
|
||||||
|
|
||||||
TRACE("(%p)->(%s, %s, %p, %p)\n", This, debugstr_guid(rguid), debugstr_guid(riid), pvOut, lpUnknownOuter);
|
TRACE("(%p)->(%s, %s, %p, %p)\n", This, debugstr_guid(rguid), debugstr_guid(riid), pvOut, lpUnknownOuter);
|
||||||
|
|
||||||
if (nrof_dinput_devices==0){
|
if (NB_DINPUT_DEVICES==0){
|
||||||
scan_mouse();
|
scan_mouse();
|
||||||
scan_keyboard();
|
scan_keyboard();
|
||||||
}
|
}
|
||||||
|
@ -492,8 +502,9 @@ static HRESULT WINAPI IDirectInput7WImpl_CreateDeviceEx(LPDIRECTINPUT7W iface, R
|
||||||
|
|
||||||
|
|
||||||
/* Loop on all the devices to see if anyone matches the given GUID */
|
/* Loop on all the devices to see if anyone matches the given GUID */
|
||||||
for (i = 0; i < nrof_dinput_devices; i++) {
|
for (i = 0; i < NB_DINPUT_DEVICES; i++) {
|
||||||
HRESULT ret;
|
HRESULT ret;
|
||||||
|
if (!dinput_devices[i]->create_deviceW) continue;
|
||||||
if ((ret = dinput_devices[i]->create_deviceW(This, rguid, riid, (LPDIRECTINPUTDEVICEW*) pvOut)) == DI_OK)
|
if ((ret = dinput_devices[i]->create_deviceW(This, rguid, riid, (LPDIRECTINPUTDEVICEW*) pvOut)) == DI_OK)
|
||||||
return DI_OK;
|
return DI_OK;
|
||||||
|
|
||||||
|
|
|
@ -39,16 +39,18 @@ struct IDirectInputImpl
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Function called by all devices that Wine supports */
|
/* Function called by all devices that Wine supports */
|
||||||
typedef struct dinput_device {
|
struct dinput_device {
|
||||||
INT pref;
|
|
||||||
const char *name;
|
const char *name;
|
||||||
BOOL (*enum_deviceA)(DWORD dwDevType, DWORD dwFlags, LPDIDEVICEINSTANCEA lpddi, int version, int id);
|
BOOL (*enum_deviceA)(DWORD dwDevType, DWORD dwFlags, LPDIDEVICEINSTANCEA lpddi, int version, int id);
|
||||||
BOOL (*enum_deviceW)(DWORD dwDevType, DWORD dwFlags, LPDIDEVICEINSTANCEW lpddi, int version, int id);
|
BOOL (*enum_deviceW)(DWORD dwDevType, DWORD dwFlags, LPDIDEVICEINSTANCEW lpddi, int version, int id);
|
||||||
HRESULT (*create_deviceA)(IDirectInputImpl *dinput, REFGUID rguid, REFIID riid, LPDIRECTINPUTDEVICEA* pdev);
|
HRESULT (*create_deviceA)(IDirectInputImpl *dinput, REFGUID rguid, REFIID riid, LPDIRECTINPUTDEVICEA* pdev);
|
||||||
HRESULT (*create_deviceW)(IDirectInputImpl *dinput, REFGUID rguid, REFIID riid, LPDIRECTINPUTDEVICEW* pdev);
|
HRESULT (*create_deviceW)(IDirectInputImpl *dinput, REFGUID rguid, REFIID riid, LPDIRECTINPUTDEVICEW* pdev);
|
||||||
} dinput_device;
|
};
|
||||||
|
|
||||||
extern void dinput_register_device(dinput_device *device);
|
extern const struct dinput_device mouse_device;
|
||||||
|
extern const struct dinput_device keyboard_device;
|
||||||
|
extern const struct dinput_device joystick_linux_device;
|
||||||
|
extern const struct dinput_device joystick_linuxinput_device;
|
||||||
|
|
||||||
extern HINSTANCE DINPUT_instance;
|
extern HINSTANCE DINPUT_instance;
|
||||||
|
|
||||||
|
|
|
@ -28,8 +28,6 @@
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include "wine/port.h"
|
#include "wine/port.h"
|
||||||
|
|
||||||
#ifdef HAVE_LINUX_22_JOYSTICK_API
|
|
||||||
|
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
@ -55,7 +53,6 @@
|
||||||
#ifdef HAVE_LINUX_JOYSTICK_H
|
#ifdef HAVE_LINUX_JOYSTICK_H
|
||||||
# include <linux/joystick.h>
|
# include <linux/joystick.h>
|
||||||
#endif
|
#endif
|
||||||
#define JOYDEV "/dev/js"
|
|
||||||
|
|
||||||
#include "wine/debug.h"
|
#include "wine/debug.h"
|
||||||
#include "wine/unicode.h"
|
#include "wine/unicode.h"
|
||||||
|
@ -70,6 +67,10 @@
|
||||||
|
|
||||||
WINE_DEFAULT_DEBUG_CHANNEL(dinput);
|
WINE_DEFAULT_DEBUG_CHANNEL(dinput);
|
||||||
|
|
||||||
|
#ifdef HAVE_LINUX_22_JOYSTICK_API
|
||||||
|
|
||||||
|
#define JOYDEV "/dev/js"
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
LONG lMin;
|
LONG lMin;
|
||||||
LONG lMax;
|
LONG lMax;
|
||||||
|
@ -646,8 +647,7 @@ static HRESULT joydev_create_deviceW(IDirectInputImpl *dinput, REFGUID rguid, RE
|
||||||
return DIERR_DEVICENOTREG;
|
return DIERR_DEVICENOTREG;
|
||||||
}
|
}
|
||||||
|
|
||||||
static dinput_device joydev = {
|
const struct dinput_device joystick_linux_device = {
|
||||||
10,
|
|
||||||
"Wine Linux joystick driver",
|
"Wine Linux joystick driver",
|
||||||
joydev_enum_deviceA,
|
joydev_enum_deviceA,
|
||||||
joydev_enum_deviceW,
|
joydev_enum_deviceW,
|
||||||
|
@ -655,8 +655,6 @@ static dinput_device joydev = {
|
||||||
joydev_create_deviceW
|
joydev_create_deviceW
|
||||||
};
|
};
|
||||||
|
|
||||||
DECL_GLOBAL_CONSTRUCTOR(joydev_register) { dinput_register_device(&joydev); }
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
|
@ -1697,4 +1695,14 @@ static IDirectInputDevice8WVtbl SysJoystickWvt =
|
||||||
};
|
};
|
||||||
#undef XCAST
|
#undef XCAST
|
||||||
|
|
||||||
|
#else /* HAVE_LINUX_22_JOYSTICK_API */
|
||||||
|
|
||||||
|
const struct dinput_device joystick_linux_device = {
|
||||||
|
"Wine Linux joystick driver",
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL
|
||||||
|
};
|
||||||
|
|
||||||
#endif /* HAVE_LINUX_22_JOYSTICK_API */
|
#endif /* HAVE_LINUX_22_JOYSTICK_API */
|
||||||
|
|
|
@ -22,8 +22,6 @@
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include "wine/port.h"
|
#include "wine/port.h"
|
||||||
|
|
||||||
#ifdef HAVE_LINUX_INPUT_H
|
|
||||||
|
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
@ -43,16 +41,10 @@
|
||||||
#ifdef HAVE_SYS_ERRNO_H
|
#ifdef HAVE_SYS_ERRNO_H
|
||||||
# include <sys/errno.h>
|
# include <sys/errno.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_CORRECT_LINUXINPUT_H
|
|
||||||
|
|
||||||
#ifdef HAVE_LINUX_INPUT_H
|
#ifdef HAVE_LINUX_INPUT_H
|
||||||
# include <linux/input.h>
|
# include <linux/input.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#define EVDEVPREFIX "/dev/input/event"
|
|
||||||
|
|
||||||
#include "wine/debug.h"
|
#include "wine/debug.h"
|
||||||
#include "wine/unicode.h"
|
#include "wine/unicode.h"
|
||||||
#include "windef.h"
|
#include "windef.h"
|
||||||
|
@ -65,6 +57,10 @@
|
||||||
|
|
||||||
WINE_DEFAULT_DEBUG_CHANNEL(dinput);
|
WINE_DEFAULT_DEBUG_CHANNEL(dinput);
|
||||||
|
|
||||||
|
#ifdef HAVE_CORRECT_LINUXINPUT_H
|
||||||
|
|
||||||
|
#define EVDEVPREFIX "/dev/input/event"
|
||||||
|
|
||||||
/* Wine joystick driver object instances */
|
/* Wine joystick driver object instances */
|
||||||
#define WINE_JOYSTICK_AXIS_BASE 0
|
#define WINE_JOYSTICK_AXIS_BASE 0
|
||||||
#define WINE_JOYSTICK_BUTTON_BASE 8
|
#define WINE_JOYSTICK_BUTTON_BASE 8
|
||||||
|
@ -322,8 +318,7 @@ static HRESULT joydev_create_deviceW(IDirectInputImpl *dinput, REFGUID rguid, RE
|
||||||
return DIERR_DEVICENOTREG;
|
return DIERR_DEVICENOTREG;
|
||||||
}
|
}
|
||||||
|
|
||||||
static dinput_device joydev = {
|
const struct dinput_device joystick_linuxinput_device = {
|
||||||
20,
|
|
||||||
"Wine Linux-input joystick driver",
|
"Wine Linux-input joystick driver",
|
||||||
joydev_enum_deviceA,
|
joydev_enum_deviceA,
|
||||||
joydev_enum_deviceW,
|
joydev_enum_deviceW,
|
||||||
|
@ -331,8 +326,6 @@ static dinput_device joydev = {
|
||||||
joydev_create_deviceW
|
joydev_create_deviceW
|
||||||
};
|
};
|
||||||
|
|
||||||
DECL_GLOBAL_CONSTRUCTOR(joydev_register) { dinput_register_device(&joydev); }
|
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
* Joystick
|
* Joystick
|
||||||
*/
|
*/
|
||||||
|
@ -1094,6 +1087,14 @@ static IDirectInputDevice8WVtbl JoystickWvt =
|
||||||
};
|
};
|
||||||
#undef XCAST
|
#undef XCAST
|
||||||
|
|
||||||
#endif /* HAVE_LINUX_INPUT_H */
|
#else /* HAVE_CORRECT_LINUXINPUT_H */
|
||||||
|
|
||||||
#endif
|
const struct dinput_device joystick_linuxinput_device = {
|
||||||
|
"Wine Linux-input joystick driver",
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* HAVE_CORRECT_LINUXINPUT_H */
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
* Copyright 1998 Marcus Meissner
|
* Copyright 1998 Marcus Meissner
|
||||||
* Copyright 1998,1999 Lionel Ulmer
|
* Copyright 1998,1999 Lionel Ulmer
|
||||||
* Copyright 2000-2001 TransGaming Technologies Inc.
|
* Copyright 2000-2001 TransGaming Technologies Inc.
|
||||||
|
* Copyright 2005 Raphael Junqueira
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
@ -45,6 +46,8 @@ WINE_DEFAULT_DEBUG_CHANNEL(dinput);
|
||||||
#define LLKHF_UP (KF_UP >> 8)
|
#define LLKHF_UP (KF_UP >> 8)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#define WINE_DINPUT_KEYBOARD_MAX_KEYS 256
|
||||||
|
|
||||||
static IDirectInputDevice8AVtbl SysKeyboardAvt;
|
static IDirectInputDevice8AVtbl SysKeyboardAvt;
|
||||||
static IDirectInputDevice8WVtbl SysKeyboardWvt;
|
static IDirectInputDevice8WVtbl SysKeyboardWvt;
|
||||||
|
|
||||||
|
@ -73,14 +76,15 @@ struct SysKeyboardImpl
|
||||||
CRITICAL_SECTION crit;
|
CRITICAL_SECTION crit;
|
||||||
};
|
};
|
||||||
|
|
||||||
SysKeyboardImpl *current; /* Today's acquired device
|
static SysKeyboardImpl* current_lock = NULL;
|
||||||
FIXME: currently this can be only one.
|
/* Today's acquired device
|
||||||
Maybe this should be a linked list or st.
|
* FIXME: currently this can be only one.
|
||||||
I don't know what the rules are for multiple acquired keyboards,
|
* Maybe this should be a linked list or st.
|
||||||
but 'DI_LOSTFOCUS' and 'DI_UNACQUIRED' exist for a reason.
|
* I don't know what the rules are for multiple acquired keyboards,
|
||||||
|
* but 'DI_LOSTFOCUS' and 'DI_UNACQUIRED' exist for a reason.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static BYTE DInputKeyState[256]; /* array for 'GetDeviceState' */
|
static BYTE DInputKeyState[WINE_DINPUT_KEYBOARD_MAX_KEYS]; /* array for 'GetDeviceState' */
|
||||||
|
|
||||||
static CRITICAL_SECTION keyboard_crit;
|
static CRITICAL_SECTION keyboard_crit;
|
||||||
static CRITICAL_SECTION_DEBUG critsect_debug =
|
static CRITICAL_SECTION_DEBUG critsect_debug =
|
||||||
|
@ -94,7 +98,8 @@ static CRITICAL_SECTION keyboard_crit = { &critsect_debug, -1, 0, 0, 0, 0 };
|
||||||
static DWORD keyboard_users;
|
static DWORD keyboard_users;
|
||||||
|
|
||||||
#ifndef __REACTOS__
|
#ifndef __REACTOS__
|
||||||
static HHOOK keyboard_hook;
|
static DWORD keyboard_users = 0;
|
||||||
|
static HHOOK keyboard_hook = NULL;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __REACTOS__
|
#ifdef __REACTOS__
|
||||||
|
@ -119,24 +124,24 @@ void reactos_input_keyboard()
|
||||||
|
|
||||||
|
|
||||||
if (disk_code!=-1) {
|
if (disk_code!=-1) {
|
||||||
if (current->buffer != NULL)
|
if (current_lock->buffer != NULL)
|
||||||
{
|
{
|
||||||
int n;
|
int n;
|
||||||
n = (current->start + current->count) % current->buffersize;
|
n = (current_lock->start + current_lock->count) % current_lock->buffersize;
|
||||||
|
|
||||||
current->buffer[n].dwOfs = (BYTE) disk_code;
|
current_lock->buffer[n].dwOfs = (BYTE) disk_code;
|
||||||
current->buffer[n].dwData = DInputKeyState[disk_code];
|
current_lock->buffer[n].dwData = DInputKeyState[disk_code];
|
||||||
current->buffer[n].dwTimeStamp = 10;
|
current_lock->buffer[n].dwTimeStamp = 10;
|
||||||
current->buffer[n].dwSequence = current->dinput->evsequence++;
|
current_lock->buffer[n].dwSequence = current_lock->dinput->evsequence++;
|
||||||
|
|
||||||
|
|
||||||
if (current->count == current->buffersize)
|
if (current_lock->count == current_lock->buffersize)
|
||||||
{
|
{
|
||||||
current->start = ++current->start % current->buffersize;
|
current_lock->start = ++current_lock->start % current_lock->buffersize;
|
||||||
current->overflow = TRUE;
|
current_lock->overflow = TRUE;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
current->count++;
|
current_lock->count++;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -146,60 +151,59 @@ void reactos_input_keyboard()
|
||||||
#endif
|
#endif
|
||||||
#ifndef __REACTOS__
|
#ifndef __REACTOS__
|
||||||
LRESULT CALLBACK KeyboardCallback( int code, WPARAM wparam, LPARAM lparam )
|
LRESULT CALLBACK KeyboardCallback( int code, WPARAM wparam, LPARAM lparam )
|
||||||
{
|
|
||||||
TRACE("(%d,%d,%ld)\n", code, wparam, lparam);
|
|
||||||
|
|
||||||
if (code == HC_ACTION)
|
|
||||||
{
|
{
|
||||||
BYTE dik_code;
|
BYTE dik_code;
|
||||||
BOOL down;
|
BOOL down;
|
||||||
DWORD timestamp;
|
DWORD timestamp;
|
||||||
|
KBDLLHOOKSTRUCT *hook = (KBDLLHOOKSTRUCT *)lparam;
|
||||||
|
BYTE new_diks;
|
||||||
|
|
||||||
|
TRACE("(%d,%d,%ld)\n", code, wparam, lparam);
|
||||||
|
|
||||||
|
/** returns now if not HC_ACTION */
|
||||||
|
if (code != HC_ACTION) return CallNextHookEx(keyboard_hook, code, wparam, lparam);
|
||||||
|
|
||||||
{
|
{
|
||||||
KBDLLHOOKSTRUCT *hook = (KBDLLHOOKSTRUCT *)lparam;
|
|
||||||
dik_code = hook->scanCode;
|
dik_code = hook->scanCode;
|
||||||
if (hook->flags & LLKHF_EXTENDED) dik_code |= 0x80;
|
if (hook->flags & LLKHF_EXTENDED) dik_code |= 0x80;
|
||||||
down = !(hook->flags & LLKHF_UP);
|
down = !(hook->flags & LLKHF_UP);
|
||||||
timestamp = hook->time;
|
timestamp = hook->time;
|
||||||
}
|
}
|
||||||
|
|
||||||
DInputKeyState[dik_code] = (down ? 0x80 : 0);
|
/** returns now if key event already known */
|
||||||
|
new_diks = (down ? 0x80 : 0);
|
||||||
|
/*if (new_diks != DInputKeyState[dik_code]) return CallNextHookEx(keyboard_hook, code, wparam, lparam); TO BE FIXED */
|
||||||
|
|
||||||
|
DInputKeyState[dik_code] = new_diks;
|
||||||
TRACE(" setting %02X to %02X\n", dik_code, DInputKeyState[dik_code]);
|
TRACE(" setting %02X to %02X\n", dik_code, DInputKeyState[dik_code]);
|
||||||
|
|
||||||
if (current != NULL)
|
if (current_lock != NULL) {
|
||||||
{
|
if (current_lock->hEvent) SetEvent(current_lock->hEvent);
|
||||||
if (current->hEvent)
|
|
||||||
SetEvent(current->hEvent);
|
|
||||||
|
|
||||||
if (current->buffer != NULL)
|
if (current_lock->buffer != NULL) {
|
||||||
{
|
|
||||||
int n;
|
int n;
|
||||||
|
|
||||||
EnterCriticalSection(&(current->crit));
|
EnterCriticalSection(&(current_lock->crit));
|
||||||
|
|
||||||
n = (current->start + current->count) % current->buffersize;
|
n = (current_lock->start + current_lock->count) % current_lock->buffersize;
|
||||||
|
|
||||||
current->buffer[n].dwOfs = dik_code;
|
current_lock->buffer[n].dwOfs = dik_code;
|
||||||
current->buffer[n].dwData = down ? 0x80 : 0;
|
current_lock->buffer[n].dwData = down ? 0x80 : 0;
|
||||||
current->buffer[n].dwTimeStamp = timestamp;
|
current_lock->buffer[n].dwTimeStamp = timestamp;
|
||||||
current->buffer[n].dwSequence = current->dinput->evsequence++;
|
current_lock->buffer[n].dwSequence = current_lock->dinput->evsequence++;
|
||||||
|
|
||||||
TRACE("Adding event at offset %d : %ld - %ld - %ld - %ld\n", n,
|
TRACE("Adding event at offset %d : %ld - %ld - %ld - %ld\n", n,
|
||||||
current->buffer[n].dwOfs, current->buffer[n].dwData, current->buffer[n].dwTimeStamp, current->buffer[n].dwSequence);
|
current_lock->buffer[n].dwOfs, current_lock->buffer[n].dwData, current_lock->buffer[n].dwTimeStamp, current_lock->buffer[n].dwSequence);
|
||||||
|
|
||||||
if (current->count == current->buffersize)
|
if (current_lock->count == current_lock->buffersize) {
|
||||||
{
|
current_lock->start = ++current_lock->start % current_lock->buffersize;
|
||||||
current->start = ++current->start % current->buffersize;
|
current_lock->overflow = TRUE;
|
||||||
current->overflow = TRUE;
|
} else
|
||||||
}
|
current_lock->count++;
|
||||||
else
|
|
||||||
current->count++;
|
|
||||||
|
|
||||||
LeaveCriticalSection(&(current->crit));
|
LeaveCriticalSection(&(current_lock->crit));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
return CallNextHookEx(keyboard_hook, code, wparam, lparam);
|
return CallNextHookEx(keyboard_hook, code, wparam, lparam);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -298,17 +302,27 @@ static BOOL keyboarddev_enum_deviceW(DWORD dwDevType, DWORD dwFlags, LPDIDEVICEI
|
||||||
static SysKeyboardImpl *alloc_device_keyboard(REFGUID rguid, LPVOID kvt, IDirectInputImpl *dinput)
|
static SysKeyboardImpl *alloc_device_keyboard(REFGUID rguid, LPVOID kvt, IDirectInputImpl *dinput)
|
||||||
{
|
{
|
||||||
SysKeyboardImpl* newDevice;
|
SysKeyboardImpl* newDevice;
|
||||||
|
DWORD kbd_users;
|
||||||
|
|
||||||
newDevice = HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(SysKeyboardImpl));
|
newDevice = HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(SysKeyboardImpl));
|
||||||
newDevice->lpVtbl = kvt;
|
newDevice->lpVtbl = kvt;
|
||||||
newDevice->ref = 1;
|
newDevice->ref = 1;
|
||||||
memcpy(&(newDevice->guid),rguid,sizeof(*rguid));
|
memcpy(&(newDevice->guid),rguid,sizeof(*rguid));
|
||||||
newDevice->dinput = dinput;
|
newDevice->dinput = dinput;
|
||||||
|
InitializeCriticalSection(&(newDevice->crit));
|
||||||
|
|
||||||
#ifndef __REACTOS__
|
#ifndef __REACTOS__
|
||||||
EnterCriticalSection(&keyboard_crit);
|
EnterCriticalSection(&keyboard_crit);
|
||||||
|
<<<<<<< .working
|
||||||
|
|
||||||
if (!keyboard_users++)
|
if (!keyboard_users++)
|
||||||
keyboard_hook = SetWindowsHookExW( WH_KEYBOARD_LL, KeyboardCallback, DINPUT_instance, 0 );
|
keyboard_hook = SetWindowsHookExW( WH_KEYBOARD_LL, KeyboardCallback, DINPUT_instance, 0 );
|
||||||
|
=======
|
||||||
|
kbd_users = InterlockedIncrement(&keyboard_users);
|
||||||
|
if (1 == kbd_users) {
|
||||||
|
keyboard_hook = SetWindowsHookExW( WH_KEYBOARD_LL, KeyboardCallback, DINPUT_instance, 0 );
|
||||||
|
}
|
||||||
|
>>>>>>> .merge-right.r14821
|
||||||
|
|
||||||
LeaveCriticalSection(&keyboard_crit);
|
LeaveCriticalSection(&keyboard_crit);
|
||||||
#endif
|
#endif
|
||||||
|
@ -352,8 +366,7 @@ static HRESULT keyboarddev_create_deviceW(IDirectInputImpl *dinput, REFGUID rgui
|
||||||
return DIERR_DEVICENOTREG;
|
return DIERR_DEVICENOTREG;
|
||||||
}
|
}
|
||||||
|
|
||||||
dinput_device keyboarddev = {
|
const struct dinput_device keyboard_device = {
|
||||||
100,
|
|
||||||
"Wine keyboard driver",
|
"Wine keyboard driver",
|
||||||
keyboarddev_enum_deviceA,
|
keyboarddev_enum_deviceA,
|
||||||
keyboarddev_enum_deviceW,
|
keyboarddev_enum_deviceW,
|
||||||
|
@ -361,17 +374,11 @@ dinput_device keyboarddev = {
|
||||||
keyboarddev_create_deviceW
|
keyboarddev_create_deviceW
|
||||||
};
|
};
|
||||||
|
|
||||||
void scan_keyboard()
|
|
||||||
{
|
|
||||||
dinput_register_device(&keyboarddev);
|
|
||||||
}
|
|
||||||
|
|
||||||
DECL_GLOBAL_CONSTRUCTOR(keyboarddev_register) { dinput_register_device(&keyboarddev); }
|
|
||||||
|
|
||||||
static ULONG WINAPI SysKeyboardAImpl_Release(LPDIRECTINPUTDEVICE8A iface)
|
static ULONG WINAPI SysKeyboardAImpl_Release(LPDIRECTINPUTDEVICE8A iface)
|
||||||
{
|
{
|
||||||
SysKeyboardImpl *This = (SysKeyboardImpl *)iface;
|
SysKeyboardImpl *This = (SysKeyboardImpl *)iface;
|
||||||
ULONG ref;
|
ULONG ref;
|
||||||
|
DWORD kbd_users;
|
||||||
|
|
||||||
ref = InterlockedDecrement(&(This->ref));
|
ref = InterlockedDecrement(&(This->ref));
|
||||||
if (ref)
|
if (ref)
|
||||||
|
@ -379,7 +386,8 @@ static ULONG WINAPI SysKeyboardAImpl_Release(LPDIRECTINPUTDEVICE8A iface)
|
||||||
|
|
||||||
#ifndef __REACTOS__
|
#ifndef __REACTOS__
|
||||||
EnterCriticalSection(&keyboard_crit);
|
EnterCriticalSection(&keyboard_crit);
|
||||||
if (!--keyboard_users) {
|
kbd_users = InterlockedDecrement(&keyboard_users);
|
||||||
|
if (0 == kbd_users) {
|
||||||
UnhookWindowsHookEx( keyboard_hook );
|
UnhookWindowsHookEx( keyboard_hook );
|
||||||
keyboard_hook = 0;
|
keyboard_hook = 0;
|
||||||
}
|
}
|
||||||
|
@ -461,28 +469,33 @@ static HRESULT WINAPI SysKeyboardAImpl_GetDeviceState(
|
||||||
LPDIRECTINPUTDEVICE8A iface,DWORD len,LPVOID ptr
|
LPDIRECTINPUTDEVICE8A iface,DWORD len,LPVOID ptr
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
TRACE("(%p)->(%ld,%p)\n", iface, len, ptr);
|
SysKeyboardImpl *This = (SysKeyboardImpl *)iface;
|
||||||
|
TRACE("(%p)->(%ld,%p)\n", This, len, ptr);
|
||||||
|
|
||||||
#ifdef __REACTOS__
|
#ifdef __REACTOS__
|
||||||
reactos_input_keyboard();
|
reactos_input_keyboard();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Note: device does not need to be acquired */
|
/* Note: device does not need to be acquired */
|
||||||
if (len != 256)
|
if (len != WINE_DINPUT_KEYBOARD_MAX_KEYS)
|
||||||
return DIERR_INVALIDPARAM;
|
return DIERR_INVALIDPARAM;
|
||||||
|
|
||||||
MsgWaitForMultipleObjectsEx(0, NULL, 0, QS_ALLINPUT, 0);
|
MsgWaitForMultipleObjectsEx(0, NULL, 0, QS_ALLINPUT, 0);
|
||||||
|
|
||||||
|
EnterCriticalSection(&(This->crit));
|
||||||
|
|
||||||
if (TRACE_ON(dinput)) {
|
if (TRACE_ON(dinput)) {
|
||||||
int i;
|
int i;
|
||||||
for (i = 0; i < 256; i++) {
|
for (i = 0; i < WINE_DINPUT_KEYBOARD_MAX_KEYS; i++) {
|
||||||
if (DInputKeyState[i] != 0x00) {
|
if (DInputKeyState[i] != 0x00) {
|
||||||
TRACE(" - %02X: %02x\n", i, DInputKeyState[i]);
|
TRACE(" - %02X: %02x\n", i, DInputKeyState[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
memcpy(ptr, DInputKeyState, 256);
|
memcpy(ptr, DInputKeyState, WINE_DINPUT_KEYBOARD_MAX_KEYS);
|
||||||
|
LeaveCriticalSection(&(This->crit));
|
||||||
|
|
||||||
return DI_OK;
|
return DI_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -571,7 +584,7 @@ static HRESULT WINAPI SysKeyboardAImpl_EnumObjects(
|
||||||
memset(&ddoi, 0, sizeof(ddoi));
|
memset(&ddoi, 0, sizeof(ddoi));
|
||||||
ddoi.dwSize = FIELD_OFFSET(DIDEVICEOBJECTINSTANCEA, dwFFMaxForce);
|
ddoi.dwSize = FIELD_OFFSET(DIDEVICEOBJECTINSTANCEA, dwFFMaxForce);
|
||||||
|
|
||||||
for (i = 0; i < 256; i++) {
|
for (i = 0; i < WINE_DINPUT_KEYBOARD_MAX_KEYS; i++) {
|
||||||
/* Report 255 keys :-) */
|
/* Report 255 keys :-) */
|
||||||
ddoi.guidType = GUID_Key;
|
ddoi.guidType = GUID_Key;
|
||||||
ddoi.dwOfs = i;
|
ddoi.dwOfs = i;
|
||||||
|
@ -612,26 +625,24 @@ static HRESULT WINAPI SysKeyboardAImpl_Acquire(LPDIRECTINPUTDEVICE8A iface)
|
||||||
|
|
||||||
This->acquired = 1;
|
This->acquired = 1;
|
||||||
|
|
||||||
if (current != NULL)
|
if (current_lock != NULL) {
|
||||||
{
|
|
||||||
FIXME("Not more than one keyboard can be acquired at the same time.\n");
|
FIXME("Not more than one keyboard can be acquired at the same time.\n");
|
||||||
SysKeyboardAImpl_Unacquire(iface);
|
SysKeyboardAImpl_Unacquire(iface);
|
||||||
}
|
}
|
||||||
|
|
||||||
current = This;
|
current_lock = This;
|
||||||
|
|
||||||
if (This->buffersize > 0)
|
if (This->buffersize > 0) {
|
||||||
{
|
|
||||||
This->buffer = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY,
|
This->buffer = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY,
|
||||||
This->buffersize * sizeof(*(This->buffer)));
|
This->buffersize * sizeof(*(This->buffer)));
|
||||||
This->start = 0;
|
This->start = 0;
|
||||||
This->count = 0;
|
This->count = 0;
|
||||||
This->overflow = FALSE;
|
This->overflow = FALSE;
|
||||||
InitializeCriticalSection(&(This->crit));
|
} else {
|
||||||
}
|
|
||||||
else
|
|
||||||
This->buffer = NULL;
|
This->buffer = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*keyboard_hook = SetWindowsHookExW( WH_KEYBOARD_LL, KeyboardCallback, DINPUT_instance, 0 );*/
|
||||||
|
|
||||||
return DI_OK;
|
return DI_OK;
|
||||||
}
|
}
|
||||||
|
@ -644,18 +655,18 @@ static HRESULT WINAPI SysKeyboardAImpl_Unacquire(LPDIRECTINPUTDEVICE8A iface)
|
||||||
if (This->acquired == 0)
|
if (This->acquired == 0)
|
||||||
return DI_NOEFFECT;
|
return DI_NOEFFECT;
|
||||||
|
|
||||||
if (current == This)
|
/* No more locks */
|
||||||
current = NULL;
|
if (current_lock == This)
|
||||||
|
current_lock = NULL;
|
||||||
else
|
else
|
||||||
ERR("this != current\n");
|
ERR("this != current_lock\n");
|
||||||
|
|
||||||
|
/* Unacquire device */
|
||||||
This->acquired = 0;
|
This->acquired = 0;
|
||||||
|
|
||||||
if (This->buffersize >= 0)
|
if (This->buffersize >= 0) {
|
||||||
{
|
|
||||||
HeapFree(GetProcessHeap(), 0, This->buffer);
|
HeapFree(GetProcessHeap(), 0, This->buffer);
|
||||||
This->buffer = NULL;
|
This->buffer = NULL;
|
||||||
DeleteCriticalSection(&(This->crit));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return DI_OK;
|
return DI_OK;
|
||||||
|
@ -695,7 +706,7 @@ static HRESULT WINAPI SysKeyboardAImpl_GetCapabilities(
|
||||||
else
|
else
|
||||||
devcaps.dwDevType = DIDEVTYPE_KEYBOARD | (DIDEVTYPEKEYBOARD_UNKNOWN << 8);
|
devcaps.dwDevType = DIDEVTYPE_KEYBOARD | (DIDEVTYPEKEYBOARD_UNKNOWN << 8);
|
||||||
devcaps.dwAxes = 0;
|
devcaps.dwAxes = 0;
|
||||||
devcaps.dwButtons = 256;
|
devcaps.dwButtons = WINE_DINPUT_KEYBOARD_MAX_KEYS;
|
||||||
devcaps.dwPOVs = 0;
|
devcaps.dwPOVs = 0;
|
||||||
devcaps.dwFFSamplePeriod = 0;
|
devcaps.dwFFSamplePeriod = 0;
|
||||||
devcaps.dwFFMinTimeResolution = 0;
|
devcaps.dwFFMinTimeResolution = 0;
|
||||||
|
@ -791,7 +802,7 @@ static HRESULT WINAPI SysKeyboardAImpl_GetDeviceInfo(
|
||||||
TRACE("(this=%p,%p)\n", This, pdidi);
|
TRACE("(this=%p,%p)\n", This, pdidi);
|
||||||
|
|
||||||
if (pdidi->dwSize != sizeof(DIDEVICEINSTANCEA)) {
|
if (pdidi->dwSize != sizeof(DIDEVICEINSTANCEA)) {
|
||||||
WARN(" dinput3 not supporte yet...\n");
|
WARN(" dinput3 not supported yet...\n");
|
||||||
return DI_OK;
|
return DI_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -806,7 +817,7 @@ static HRESULT WINAPI SysKeyboardWImpl_GetDeviceInfo(LPDIRECTINPUTDEVICE8W iface
|
||||||
TRACE("(this=%p,%p)\n", This, pdidi);
|
TRACE("(this=%p,%p)\n", This, pdidi);
|
||||||
|
|
||||||
if (pdidi->dwSize != sizeof(DIDEVICEINSTANCEW)) {
|
if (pdidi->dwSize != sizeof(DIDEVICEINSTANCEW)) {
|
||||||
WARN(" dinput3 not supporte yet...\n");
|
WARN(" dinput3 not supported yet...\n");
|
||||||
return DI_OK;
|
return DI_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -271,7 +271,7 @@ static SysMouseImpl *alloc_device_mouse(REFGUID rguid, LPVOID mvt, IDirectInputI
|
||||||
/* Per default, Wine uses its internal data format */
|
/* Per default, Wine uses its internal data format */
|
||||||
newDevice->df = (DIDATAFORMAT *) &Wine_InternalMouseFormat;
|
newDevice->df = (DIDATAFORMAT *) &Wine_InternalMouseFormat;
|
||||||
memcpy(newDevice->offset_array, offset_array, WINE_INTERNALMOUSE_NUM_OBJS * sizeof(int));
|
memcpy(newDevice->offset_array, offset_array, WINE_INTERNALMOUSE_NUM_OBJS * sizeof(int));
|
||||||
newDevice->wine_df = (DataFormat *) HeapAlloc(GetProcessHeap(), 0, sizeof(DataFormat));
|
newDevice->wine_df = HeapAlloc(GetProcessHeap(), 0, sizeof(DataFormat));
|
||||||
newDevice->wine_df->size = 0;
|
newDevice->wine_df->size = 0;
|
||||||
newDevice->wine_df->internal_format_size = Wine_InternalMouseFormat.dwDataSize;
|
newDevice->wine_df->internal_format_size = Wine_InternalMouseFormat.dwDataSize;
|
||||||
newDevice->wine_df->dt = NULL;
|
newDevice->wine_df->dt = NULL;
|
||||||
|
@ -318,8 +318,7 @@ static HRESULT mousedev_create_deviceW(IDirectInputImpl *dinput, REFGUID rguid,
|
||||||
return DIERR_DEVICENOTREG;
|
return DIERR_DEVICENOTREG;
|
||||||
}
|
}
|
||||||
|
|
||||||
static dinput_device mousedev = {
|
const struct dinput_device mouse_device = {
|
||||||
100,
|
|
||||||
"Wine mouse driver",
|
"Wine mouse driver",
|
||||||
mousedev_enum_deviceA,
|
mousedev_enum_deviceA,
|
||||||
mousedev_enum_deviceW,
|
mousedev_enum_deviceW,
|
||||||
|
@ -327,13 +326,6 @@ static dinput_device mousedev = {
|
||||||
mousedev_create_deviceW
|
mousedev_create_deviceW
|
||||||
};
|
};
|
||||||
|
|
||||||
void scan_mouse()
|
|
||||||
{
|
|
||||||
dinput_register_device(&mousedev);
|
|
||||||
}
|
|
||||||
|
|
||||||
DECL_GLOBAL_CONSTRUCTOR(mousedev_register) { dinput_register_device(&mousedev); }
|
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
* SysMouseA (DInput Mouse support)
|
* SysMouseA (DInput Mouse support)
|
||||||
*/
|
*/
|
||||||
|
@ -606,15 +598,14 @@ static HRESULT WINAPI SysMouseAImpl_Acquire(LPDIRECTINPUTDEVICE8A iface)
|
||||||
{
|
{
|
||||||
SysMouseImpl *This = (SysMouseImpl *)iface;
|
SysMouseImpl *This = (SysMouseImpl *)iface;
|
||||||
RECT rect;
|
RECT rect;
|
||||||
|
POINT point;
|
||||||
|
|
||||||
TRACE("(this=%p)\n",This);
|
TRACE("(this=%p)\n",This);
|
||||||
|
|
||||||
|
if (This->acquired)
|
||||||
|
return S_FALSE;
|
||||||
|
|
||||||
|
This->acquired = 1;
|
||||||
if (This->acquired == 0) {
|
|
||||||
POINT point;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* Store (in a global variable) the current lock */
|
/* Store (in a global variable) the current lock */
|
||||||
current_lock = (IDirectInputDevice8A*)This;
|
current_lock = (IDirectInputDevice8A*)This;
|
||||||
|
@ -642,6 +633,7 @@ static HRESULT WINAPI SysMouseAImpl_Acquire(LPDIRECTINPUTDEVICE8A iface)
|
||||||
#ifndef __REACTOS__
|
#ifndef __REACTOS__
|
||||||
This->hook = SetWindowsHookExA( WH_MOUSE_LL, dinput_mouse_hook, DINPUT_instance, 0 );
|
This->hook = SetWindowsHookExA( WH_MOUSE_LL, dinput_mouse_hook, DINPUT_instance, 0 );
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Get the window dimension and find the center */
|
/* Get the window dimension and find the center */
|
||||||
GetWindowRect(This->win, &rect);
|
GetWindowRect(This->win, &rect);
|
||||||
This->win_centerX = (rect.right - rect.left) / 2;
|
This->win_centerX = (rect.right - rect.left) / 2;
|
||||||
|
@ -661,11 +653,8 @@ static HRESULT WINAPI SysMouseAImpl_Acquire(LPDIRECTINPUTDEVICE8A iface)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
This->acquired = 1;
|
|
||||||
return DI_OK;
|
return DI_OK;
|
||||||
}
|
}
|
||||||
return S_FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
* Unacquire : frees the mouse
|
* Unacquire : frees the mouse
|
||||||
|
@ -676,25 +665,30 @@ static HRESULT WINAPI SysMouseAImpl_Unacquire(LPDIRECTINPUTDEVICE8A iface)
|
||||||
|
|
||||||
TRACE("(this=%p)\n",This);
|
TRACE("(this=%p)\n",This);
|
||||||
|
|
||||||
if (This->acquired) {
|
if (0 == This->acquired) {
|
||||||
/* Reinstall previous mouse event handler */
|
return DI_NOEFFECT;
|
||||||
|
}
|
||||||
|
|
||||||
#ifndef __REACTOS__
|
/* Reinstall previous mouse event handler */
|
||||||
if (This->hook) {
|
if (This->hook) {
|
||||||
|
#ifndef __REACTOS__
|
||||||
UnhookWindowsHookEx( This->hook );
|
UnhookWindowsHookEx( This->hook );
|
||||||
This->hook = 0;
|
This->hook = 0;
|
||||||
|
|
||||||
if (This->dwCoopLevel & DISCL_EXCLUSIVE)
|
if (This->dwCoopLevel & DISCL_EXCLUSIVE)
|
||||||
ShowCursor(TRUE); /* show cursor */
|
ShowCursor(TRUE); /* show cursor */
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
#ifdef __REACTOS__
|
#ifdef __REACTOS__
|
||||||
if (This->dwCoopLevel & DISCL_EXCLUSIVE)
|
if (This->dwCoopLevel & DISCL_EXCLUSIVE)
|
||||||
ShowCursor(TRUE); /* show cursor */
|
ShowCursor(TRUE); /* show cursor */
|
||||||
#endif
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
/* No more locks */
|
/* No more locks */
|
||||||
|
if (current_lock == (IDirectInputDevice8A*) This)
|
||||||
current_lock = NULL;
|
current_lock = NULL;
|
||||||
|
else
|
||||||
|
ERR("this(%p) != current_lock(%p)\n", This, current_lock);
|
||||||
|
|
||||||
/* Unacquire device */
|
/* Unacquire device */
|
||||||
This->acquired = 0;
|
This->acquired = 0;
|
||||||
|
@ -704,9 +698,6 @@ static HRESULT WINAPI SysMouseAImpl_Unacquire(LPDIRECTINPUTDEVICE8A iface)
|
||||||
TRACE(" warping mouse back to (%ld , %ld)\n", This->org_coords.x, This->org_coords.y);
|
TRACE(" warping mouse back to (%ld , %ld)\n", This->org_coords.x, This->org_coords.y);
|
||||||
SetCursorPos(This->org_coords.x, This->org_coords.y);
|
SetCursorPos(This->org_coords.x, This->org_coords.y);
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
return DI_NOEFFECT;
|
|
||||||
}
|
|
||||||
|
|
||||||
return DI_OK;
|
return DI_OK;
|
||||||
}
|
}
|
||||||
|
@ -1105,8 +1096,7 @@ static HRESULT WINAPI SysMouseAImpl_SetProperty(LPDIRECTINPUTDEVICE8A iface,
|
||||||
|
|
||||||
TRACE("buffersize = %ld\n",pd->dwData);
|
TRACE("buffersize = %ld\n",pd->dwData);
|
||||||
|
|
||||||
This->data_queue = (LPDIDEVICEOBJECTDATA)HeapAlloc(GetProcessHeap(),0,
|
This->data_queue = HeapAlloc(GetProcessHeap(),0, pd->dwData * sizeof(DIDEVICEOBJECTDATA));
|
||||||
pd->dwData * sizeof(DIDEVICEOBJECTDATA));
|
|
||||||
This->queue_head = 0;
|
This->queue_head = 0;
|
||||||
This->queue_tail = 0;
|
This->queue_tail = 0;
|
||||||
This->queue_len = pd->dwData;
|
This->queue_len = pd->dwData;
|
||||||
|
|
Loading…
Reference in a new issue