Re: [website] Added Portuguese translation for call for translators

2013-06-19 Thread Lucas Zawacki
On Wed, Jun 19, 2013 at 5:22 PM, Frédéric Delanoy 
frederic.dela...@gmail.com wrote:
 Just wondering: does it make sense to translate a call for translators?

 I mean, if a volunteer can't understand the English from the call,
 (s)he wouldn't be able to translate correctly anyway.

I though about that, but ended up deciding that it should be translated for
coherence as everything in the page is in portuguese too. Luckily I
resisted the urge to translate the wiki page :)



Re: [website] Portuguese translation for release 1.5.25

2013-03-18 Thread Lucas Zawacki
Good catch. I'm re-sending it.




Re: [PATCH 2/3] joy.cpl: Using joystick name suffixed with driver when in Linux (try 2)

2012-08-23 Thread Lucas Zawacki
 I think dinput should be appending that to the returned name, joy.cpl
 shouldn't have to know about the specific naming scheme of the driver.

Do you mean change the reported name directly at device creation time?
I could do that and I guess that would be mostly harmless, do other
people working on dinput have something against this?




Re: [PATCH 1/3] dinput: Disable linuxinput or linux joysticks based on registry key (try 2)

2012-08-23 Thread Lucas Zawacki
 That's better, thanks. You probably want to put them under a subkey
 though, to avoid mixing up the joystick names with the other
 configuration values.

No problem. If I put them under a key Disabled I think it's ok to
not ask for a value, just a key with the joystick name right?




Re: [PATCH 4/4] wined3d: Improve post-pixelshader blending test. (Try 2)

2012-08-20 Thread Lucas Zawacki
Hello, this patch caused a regression with Rayman 2, all the text in
the menus is rendered wrong now.

Should I open a bug or is this email enough? A demo of the game can be
downloaded here ftp://ftp.ubisoft.com/Rayman2/rayman2high.zip

Screenshot: http://dl.dropbox.com/u/2701879/images/rayman2.png

Regression test:
a488e574497d674631b4036d4b179ce349ddb764 is the first bad commit
commit a488e574497d674631b4036d4b179ce349ddb764
Author: Matteo Bruni mbr...@codeweavers.com
Date:   Wed Aug 15 00:38:26 2012 +0200

wined3d: Improve post-pixelshader blending test.

:04 04 1a61c91a146de3e7a5206ccde1cc239fa0771e40
a9759ba603b3b52f2feccc716daff3d875a90b74 M  dlls




Re: [website] Portuguese translation for release 1.4.1

2012-06-19 Thread Lucas Zawacki
Disregard this patch. I added the wrong file to the commit and will resend.

On Tue, Jun 19, 2012 at 12:01 PM, Jeremy Newman jnew...@codeweavers.com wrote:
 This is just english. Did you mean for that to happen?

 No need to send the english, as if the xml does not exist, the site will
 always fall back to the english version already.

 -N


 On 06/19/2012 09:49 AM, Lucas Zawacki wrote:

 From: Lucas Zawackilfzawa...@gmail.com

 ---
  news/pt/2012061501.xml |   13 +
  1 file changed, 13 insertions(+)
  create mode 100644 news/pt/2012061501.xml

 diff --git a/news/pt/2012061501.xml b/news/pt/2012061501.xml
 new file mode 100644
 index 000..7c0ff9f
 --- /dev/null
 +++ b/news/pt/2012061501.xml
 @@ -0,0 +1,13 @@
 +news
 +dateJune 15, 2012/date
 +titleWine 1.4.1 Released/title
 +body
 +p  The Wine maintenance release 1.4.1 is now available./p
 +p  a href={$root}/announce/1.4.1What's new/a  in this release:
 +ul
 +liTranslation updates./li
 +liVarious bug fixes./li
 +/ul/p
 +ppThe source isa
 href=http://prdownloads.sourceforge.net/wine/wine-1.4.1.tar.bz2;available
 now/a.
 +Binary packages are in the process of being built, and will appear soon
 at their respectivea href={$root}/downloaddownload locations/a.
 +/p/body/news




Disabling joysticks with registry keys and joy.cpl

2012-06-18 Thread Lucas Zawacki
Hello all,

disabling an specific joystick device is an issue that is raised from
time to time in
this list. I'm planning on implementing it as a registry key like
'DirectInput/Disable controllername'.

However I'd like the ability to disable specific joysticks on Linux,
like the /dev/input/js* version, while keeping the /dev/input/event*
one being enumerated. One option for doing this would be having a
Disable USB Controller - driver key with options being: linux,
linuxinput, and all. My only doubt is how would you guys want to
have this option in joy.cpl? I think the correct thing to do would be
to disable it with all, but my use case includes a user disabling
the repeated joysticks on Linux through the interface and if he's only
able to disable all drivers at once that would be confusing and less
useful.

The bottom line is: can I add platform dependent code in joy.cpl for
this purpose? If that's not an option, do you have some other way to
do through joy.cpl or should it be registry only?

Attached is an example patch of the approach for joystick_linuxinput.c

Cheers,
Lucas


0001-dinput-Disable-linuxinput-joystick-based-on-registry.patch
Description: Binary data



Re: [PATCH 1/2] joystick.cpl: First version of the joystick configuration applet

2012-06-04 Thread Lucas Zawacki
 It's called joy.cpl on Windows. Please also use compatible exports, and
 avoid creating a lot of empty source files. I'd expect that a single
 source file is sufficient for this.

Will do. I removed the uneeded shlwapi and advapi32 from the exports
is that enough or am I missing something?




Re: Implementing joystick ids in DirectInput

2012-05-29 Thread Lucas Zawacki
Ok, I sent patches doing this for linux and linuxinput drivers and a
test. The joystick_osx.c version of this could be done but I dont have
the means to test so if anyone wants to do it, you're welcome.




Implementing joystick ids in DirectInput

2012-05-28 Thread Lucas Zawacki
Hey guys, asking for a little code review here...

I was looking at the solution for this bug
http://bugs.winehq.org/show_bug.cgi?id=30705 and it comes down to
implementing the DIPROP_JOYSTICKSID property for joystick devices.
After some research on what this is I know it's always a number
between (0,n), where n is the number of joysticks connected, and is
analogous to the winmm driver joystick id.

The solution I came up is in the attached patch, it's a little weird
but I found it hard to give a unique ID to each joystick on Linux when
they can come from different drivers. This solution uses the order
which dinput puts the joysticks on it's device list and will work
regardless. If someone has a better way to do it I'd like to know.

Cheers,


0001-dinput-Implement-GetProperty-for-JOYSTICKID.patch
Description: Binary data



GSoC Joystick Configuration Tools

2012-05-10 Thread Lucas Zawacki
Hello all,

I'll use this thread to post information and ask questions regarding
my GSoC project.

First there's a wiki which aggregates some information and lists tasks
I'm working on: http://lfzawacki.heroku.com/wine/published/HomePage
Then there's a github repo: https://github.com/lfzawacki/wine-joysticks

In the repository you'll find the different tools I'll be
implementing. They can be easily built and tested, even before they
make it into wine. At the moment
there's an intial version of the command line joystick tester. This
tool is useful for listing connected joysticks, testing if they work
correctly in
wine, testing axis remapping, watching for dinput trace messages,
etc... It's also the basis for the joystick testing GUI.

I'll start cleaning up, splitting this code and commiting it to wine
next week. For now I'll make a similar tool to this one that tests
force feedback. I'll try to make it in the style
of the Linux fftest program, but using the dinput interfaces so that a
user can test the differences.

Cheers,
Lucas




Re: GSoC Joystick Configuration Tools

2012-05-10 Thread Lucas Zawacki
On Thu, May 10, 2012 at 3:35 PM, Austin English austinengl...@gmail.com wrote:
 Any reason you're not using the wine wiki for that?

This is a self-hosted wiki because a lot of the information I tend to
write there is ephemereal, since I use it mostly as a way to document
my progress and organize myself.

I suppose I should transfer some of the useful content to the wine
wiki eventually. I'll put this in my TODO list :)




Re: Wine developer example sessions?

2012-04-27 Thread Lucas Zawacki
When I first started to learn about wine development I stumbled across
some examples exactly like these in the wine wiki. A quick search
reveals them (the first 3)
http://wiki.winehq.org/DeveloperExamples?action=fullsearchcontext=180value=debugging

I myself like this aproach, it's a very useful form of documentation.




About the Implement Common Windows Scripting Classes

2012-04-04 Thread Lucas Zawacki
Hello, regarding the Implement Common Windows Scripting Classes gsoc
idea. How many of these classes would be fine for the length of the
program? I'm thinking that maybe 3 classes with thorough would be cool
for a proposal.

Some of them like Dictionary seem to be pretty straight forward and
small, the others I'm not sure. Looking at dlls/scrrun/scrrun.idl I
see there are a lot more of classes, but according to the idea page,
Dictionary and FileSystemObject block multiple applications so they're
higher priority. Are there other ones that are important?




Re: [website] Add Portuguese translation for release 1.5.1

2012-04-03 Thread Lucas Zawacki
2012/4/3 Bruno Jesus 00cp...@gmail.com:
 Would be:
 - Suporte para recursos de fontes escaláveis.

 Instead of:
 - Suporte a fontes redimensionáveis em recursos.

I'm not a developer in this area so I thought that 'scalable' meant
roughly the same as 'resizable' and that word ('redimensionável') is
more common in portuguese IMO. If that's the wrong meaning, I'll glady
send a correction to this.




Re: My GSoC 2012 proposal

2012-03-26 Thread Lucas Zawacki
About the joystick configuration tool proposal. My plans are:

* Start development as a standalone program, and then include it in
the control panel
* Enumerate all the joysticks with dinput
* Simple windows GUI. Prototypes are here
http://dl.dropbox.com/u/2701879/wiki/gsoc/dialog1.png (main screen)
and here http://dl.dropbox.com/u/2701879/wiki/gsoc/dialog2.png
(visualization/calibration). I don't know how I could draw the axis
and buttons to give the visual feedback, I guess it's something to do
with GDI? Or maybe embbeded pictures in the dialog?
* Show supported force feedback devices and provide some controls for
testing/setting it
* Write settings to registry after user confirms calibration.
* jscal stores the calibration settings in a file so it's probably
enough to have an Import calibration option and read from this file.
* Use the linux sysfs interfaces to get vid/pid and automatically
detect duplicate drivers (this is extra but I think could be useful)

Also I've yet to try to configure force feedback on linux with my
joysticks so I can take a look at the ff bugs.




Re: My GSoC 2012 proposal

2012-03-26 Thread Lucas Zawacki
 * Compatibility and exchange of installation recipes with other
 frontends like PlayOnLinux
 * Winetricks and AppDB integration. A way to mirror in AppDB the
 dependencies and workarounds employed by winetricks recipes.

 Winetricks is not a mentoring organization for Google Summer of Code.
 That said, it theoretically could be under Wine's umbrella (as I did
 with Appinstall, which did gui testing in 2009), but I think most
 would rather see work done on Wine directly.

Is this the general feeling of the list, e.g. would it be a waste of
time to craft a proposal involving winetricks?




Re: My GSoC 2012 proposal

2012-03-19 Thread Lucas Zawacki
 I'm not sure if that's outdated. I mean how many people are converting 
 Applications to winelib, how many of them want to use scons for that, and how 
 many of them can't do it theirselfs?
 But maybe i'm wrong...

Actually I think you're right, I don't know how much interest is there
for this project or why it is about scons. Maybe the person
responsible for this suggestion could provide more context?

 Which projects were that, or what problems did you have?
 Often there are small problems which are easy to fix by hand, but would need 
 special handling in winemaker.

I tried several projects with labels 'CPlusPlus' and 'VisualStudio' in
google code, some notable trouble I had was:

* Compile errors related to c++ headers as it seems to be using my
linux headers and I don't know if that's correct (or a problem on my
side).
* wrc compile errors, that were due to encoding mismatches. Solved with iconv
* undefined reference to WinMain (tried variations of -mwindows and
-mconsole with no success)
* winemaker choking on .sln and .vcxproj files (perl uninitialized strings)

I can file bugs for these if you want.




My GSoC 2012 proposal

2012-03-18 Thread Lucas Zawacki
Hello all,

First of all, I'll introduce myself: I'm Lucas Fialho Zawacki a
Computer Science undergrad at UFRGS
university in Brazil. I have worked with Wine in GSoC 2011
(http://www.google-melange.com/gsoc/project/google/gsoc2011/lfzawacki/8001)
and pretty much enjoyed the experience.

I'd like to work again with Wine for this year's GSoC and with this
email discuss some possible projects.

*Joystick Configuration Tool*

This seems like a natural project for me to work since I'm very
familiar with DirectInput and have access to some josysticks,
including force feedback. I'm not sure about what Support system
joystick calibration is though. Is it related to bug 24235 ?

*Scons Wine*

I think this could turn out to be very worthwhile project, but there's
little documentation about it. To make Scons aware of Winelib would it
be enough to create an environment that uses the winelib compilers,
libs and includes? Then it would be a question of programatically
generating the build script, much like winemaker does for the
makefile.

I've also been looking at Winemaker and trying to convert some visual
studio projects from random google code repositories with moderate
success. As a part of this project I could test it with numerous
samples, e.g Nehe tutorials (http://nehe.gamedev.net/), and with
assorted open source projects targeting windows, and make these just
work with Winemaker.

*Winetricks*

Other ideas fall in winetricks territory so I don't know if they
constitute a valid Wine GSoC project, but they're:

* Regression Testing GUI. Help a user download the repository, compile
wine and run assisted or automated bisections.
* Compatibility and exchange of installation recipes with other
frontends like PlayOnLinux
* Winetricks and AppDB integration. A way to mirror in AppDB the
dependencies and workarounds employed by winetricks recipes.

I wait for feedback. I'm also available at IRC if someone wants to
discuss this in more depth.




Re: Translating the Wiki to Portuguese

2012-03-09 Thread Lucas Zawacki
This is a question for the portuguese speakers in the list. Is it
preferable to create a 'pt-br'  translation for the site/wiki or use
the current 'pt' one (a la Wikipedia)?. I personally like the second
option and will try to use the common subset of our languages, but if
someone thinks this is a bad idea please raise your voice.




Translating the Wiki to Portuguese

2012-03-08 Thread Lucas Zawacki
Hello guys,

I'd like to help translate some chunks of the Wine wiki to Portuguese.
 What is the accepted method of translating the wiki pages? What pages
do you recognize as being more important to be translated first?

If any portuguese speakers want to help let's get in touch to organize
ourselves and split the work.

Cheers :)




Regarding my dinput patches

2012-01-17 Thread Lucas Zawacki
I want to get my dinput patches in before the code freeze, and besides
the ones that I tried to commit last week I have some patches touching
EnumDevicesBySemantics and ConfigureDevices, but I can't commit them
before the DIPROP_USERNAME and configuration file patches are in too.
Seeing that I'll have to change a lot of things in the patches to get
them in I want to ask some questions:

* Is %APPDATA%\DirectInput\User Maps a better place to store the
configuration files?
* Should I use the registry to persist the usernames in the dinput
devices instead of relying on the filename and filetimes like windows
seems to do? Where in the registry does this information belong?
* Any suggestions on how to format all these W strings? I could use
just strcatW, but since I have to convert integers to strings I think
I'll have to look at sprintf variation...
* I'll drop the _ in front the functions from now on. Should I send
patches to remove it in the other functions that already use it?




Re: [2/5] dinput: SetActionMap saving simple configurations to an .ini file (try 2)

2012-01-10 Thread Lucas Zawacki
2012/1/10 Vitaliy Margolen wine-de...@kievinfo.com:
 On 01/09/2012 10:18 AM, Lucas Fialho Zawacki wrote:

 From: Lucas Fialho Zawackilfzawa...@gmail.com

 +static BOOL _write_private_profile_intW(const char *format, WCHAR*
 section, WCHAR* key, int value, WCHAR* file)

 I don't think this is such a good idea to mix ASCII and WCHAR parameters.
Even if this is for convenience in my private code? I use this a
great deal through the code.

 +    static WCHAR path[] = {
 +
  '%','C','o','m','m','o','n','P','r','o','g','r','a','m','F','i','l','e','s','%','\\',
 +        'D','i','r','e','c','t','X','\\',
 +        'D','i','r','e','c','t','I','n','p','u','t','\\',
 +        'U','s','e','r',' ','M','a','p','s','\0'};

 Why do you think it should be there in the first place?
Windows keeps it there, you can check it by running any application
using SetActionMap. But I suppose no application depends on it being
there specifically.

 You can't do this. It seems to be you have not tested it with initial buffer
 too small. You have to do va_start  va_end every time you pass args to
 another function.

Yes, you're right. There were other mistakes as well. Is this version better?

...
while (1)
{
/* Test if it's the first time */
if (buffer == NULL)
buffer = HeapAlloc(GetProcessHeap(), 0, size*sizeof(WCHAR));
else
buffer = HeapReAlloc(GetProcessHeap(), 0, buffer,
size*sizeof(WCHAR));

if (buffer == NULL)
break;

va_start(args, format);
n = vsnprintfW(buffer, size, formatW, args);
va_end(args);

if (n == -1)
size *= 2;
else if (n = size)
size = n + 1;
else
break;
}

HeapFree(GetProcessHeap(), 0, formatW);

return buffer;

I tested it for smaller buffer values. If that's alright I can send a
patch to winemenubuilder.c too because the heap_printf there should
suffer from the same bug.

 Would you please drop leading underscore from all of your function names?
Ok. I can stop doing this from this patch onwards if you think this
convention is bad.




Re: What other conferences do Wine people attend?

2012-01-10 Thread Lucas Zawacki
Every year I attend to FISL here in my home town of Porto Alegre
(Brazil), it's one of the biggest events in Latin America but I reckon
most of wine devs are far north.

I didn't want to hijack the other thread, so I'll just throw an idea
here. It's been some time now that I've wanted to organize a local
meeting of wine users (and potential users) to have some kind of
install fest, bug hunting and talks about wine and maybe FOSS in
general to go along with it. I hope that we can end the event with
people happier with their non-Windows OSes and more educated about
things like wine, appdb, bug reporting and such.

What do you think? Has anybody tried something similar? Any advice?




Re: dinput: Clarify a translatable string

2011-12-04 Thread Lucas Zawacki
To be fair the idea IS categorization, as it doesn't matter if the
buttons are sorted in a particular order between them. The original
ConfigureDevices dialog is here
http://msdn.microsoft.com/en-us/library/bb206296%28v=vs.85%29.aspx ,
you can see the checkbox there. I think Show assigned first is
better too.




Re: [2/3] dinput: Prevent apps from hiding mouse cursor in the ConfigureDevices dialog.

2011-09-13 Thread Lucas Zawacki
Is there a way of doing what I want? Would using GetCursorInfo() to
discover if it's hidden, and then show it, work?

2011/9/13 Alexandre Julliard julli...@winehq.org:
 Lucas Fialho Zawacki lfzawa...@gmail.com writes:

 @@ -377,6 +377,12 @@ static INT_PTR CALLBACK ConfigureDevicesDlgProc(HWND 
 dialog, UINT uMsg, WPARAM w
              break;
          }

 +        case WM_ACTIVATE:
 +            /* Prevent mouse cursor from disappearing inside the dialog */
 +            ShowCursor(1);
 +
 +            break;

 That will screw up the cursor show count, you can receive multiple
 WM_ACTIVATE.

 --
 Alexandre Julliard
 julli...@winehq.org





Re: dinput: Remove an unused debug channel.

2011-09-08 Thread Lucas Zawacki
err.. I know there's no debugging going on right now, but I'm planning
on submiting a couple more patches to this file and I'll print some
debug info then.

2011/9/8 Francois Gouget fgou...@free.fr:
 ---
  dlls/dinput/config.c |    2 --
  1 files changed, 0 insertions(+), 2 deletions(-)

 diff --git a/dlls/dinput/config.c b/dlls/dinput/config.c
 index 1c6da6c..aedaa0e 100644
 --- a/dlls/dinput/config.c
 +++ b/dlls/dinput/config.c
 @@ -16,14 +16,12 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
  */

 -#include wine/debug.h
  #include wine/unicode.h
  #include objbase.h
  #include dinput_private.h
  #include device_private.h
  #include resource.h

 -WINE_DEFAULT_DEBUG_CHANNEL(dinput);

  typedef struct {
     int nobjects;
 --
 1.7.5.4








Re: [3/7] dinput: Added enumerated devices to ConfigureDevices dialog

2011-08-30 Thread Lucas Zawacki
 It doesn't make sense to pass the info as WM_INITDIALG parameter if it's
 going to be stored in global variables anyway. A better way would be to
 store this in the window info.


Any pointers on what's the set of winapi functions used to store and
retrieve data in windows? I've searched MSDN for almost 30 minutes and
no luck.




dinput8 GSoC wrapup

2011-08-20 Thread Lucas Zawacki
Hey everyone, just sending you this email to give a heads up about the
status of my GSoC project.

I set out to implement the action mapping features of DirectInput8,
what I have now is:

* EnumDevicesBySemantics: Fully implemented
* SetActionMap: Fully implemented
* BuildActionMap: Fully implemented with the exception of loading
previous saved configurations.
* ConfigureDevices: Functional but still needs more functionalities
and some polishment

The patches that I accumulated this last 2 weeks and will start to
commit as of this next monday are here:

* https://gist.github.com/1146808
* https://gist.github.com/1154946
* https://gist.github.com/1159426
* https://gist.github.com/1159498

I'll keep working on the stuff that's missing to have the fully
functional action mapping, also I have to commit some documentation
and make some cleaning of the code.

By the way one nice thing I discovered this last weeks is that we may
even be able to use what MSDN calls vendor defined mappings and, for
instance, have a wheel or other exotic joystick perfectly mapped to
the application. What I'll need for this is implementing loading of
saved configurations, the device Vendor ID/Product ID property and
access to the mapping files deployed with a DirectX installation
(maybe we could download them with winetricks?).

All in all, I'd like to thank you all  for helping me trough this
project, especially Marcus Meissner and Vitaliy Margolen for reading
my patches  and giving invaluable advice :)




Re: GSoC: dinput8 Action Mapping - dialog testing

2011-08-09 Thread Lucas Zawacki
There's actually a problem with what I was intending to do. In windows
the function doesnt truly create a dialog, it's more like a DirectX
rendered application and just now I realized that the test will not be
compatible. So I think I'll give up testing this, at least for now.




Best way to get Program Files/Common Files?

2011-08-09 Thread Lucas Zawacki
I need to get the user configured path to Program Files/Common Files
to save the dinput action mapping settings.

What are the my options for doing this?

One way I found is the SHGetSpecialFolderPath function, but it
requires me to link to shell32 and I suspect there's a better way.

Thanks




Re: Best way to get Program Files/Common Files?

2011-08-09 Thread Lucas Zawacki
Thanks Bruno, ExpandEnvironmentStrings with %CommonProgramFiles% seems
to be a better solution for my needs.




Re: GSoC: dinput8 Action Mapping - dialog testing

2011-08-05 Thread Lucas Zawacki
 Is it your own dialog you are testing or a built-in?

It's the dialog I created for IDirectInput::ConfigureDevices. I'll
give a look in your tests and ask if I need help.
Thanks




Re: GSoC: dinput8 Action Mapping

2011-08-02 Thread Lucas Zawacki
Hello. I need some help here.

Before commiting the ConfigureDevices patches tried to add a couple
simple tests for the function, the problem is that I now have to test
a dialog. What is the best way to do it? I'm thinking of creating
another thread and sending the desired messages to the dialog, is that
a good option? I'm open to suggestions.




Re: GSoC: dinput8 Action Mapping

2011-07-31 Thread Lucas Zawacki
Hello!

Here's a lot of patches with a ConfigureDevices implementation. These
patches can be tested with this app I built that uses ConfigureDevices
to set up a joystick action mapping
(https://github.com/downloads/lfzawacki/dinput-samples/dolphin-plugin.exe)
. I also tested it with the Rally Trophy and Star Sonata games.

Any advice on the dialog code is appreciated, it's the first time I've
coded something like this and may have missed some things.

This implementation still lacks some things:

* Implement username property for devices
* Tracking down a bug with Rally Trophy that makes the mouse disappear
while inside the ConfigureDevices dialog.
* Implement the Sort Assigned checkbox
* Some fixes to the code

I'll let the code resting here while I keep working on this stuff.

Cheers :)
From 77b1cf702bfba082f130d9a28e8d8a1e18433411 Mon Sep 17 00:00:00 2001
From: Lucas Fialho Zawacki lfzawa...@gmail.com
Date: Thu, 28 Jul 2011 16:05:44 -0300
Subject: [PATCH 1/8] dinput: Added ConfigureDevices A to W crosscall

I had to switch the position of the two implementations so that the A version could
effectively call the W one.

---
 dlls/dinput/dinput_main.c |   61 ++--
 1 files changed, 47 insertions(+), 14 deletions(-)

diff --git a/dlls/dinput/dinput_main.c b/dlls/dinput/dinput_main.c
index d07295d..cb71a50 100644
--- a/dlls/dinput/dinput_main.c
+++ b/dlls/dinput/dinput_main.c
@@ -999,28 +999,61 @@ static HRESULT WINAPI IDirectInput8WImpl_EnumDevicesBySemantics(
 return DI_OK;
 }
 
-static HRESULT WINAPI IDirectInput8AImpl_ConfigureDevices(
-  LPDIRECTINPUT8A iface, LPDICONFIGUREDEVICESCALLBACK lpdiCallback,
-  LPDICONFIGUREDEVICESPARAMSA lpdiCDParams, DWORD dwFlags, LPVOID pvRefData
+static HRESULT WINAPI IDirectInput8WImpl_ConfigureDevices(
+  LPDIRECTINPUT8W iface, LPDICONFIGUREDEVICESCALLBACK lpdiCallback,
+  LPDICONFIGUREDEVICESPARAMSW lpdiCDParams, DWORD dwFlags, LPVOID pvRefData
 )
 {
-  IDirectInputImpl *This = impl_from_IDirectInput8A( iface );
+IDirectInputImpl *This = impl_from_IDirectInput8W(iface);
 
-  FIXME((this=%p,%p,%p,%04x,%p): stub\n, This, lpdiCallback, lpdiCDParams,
-dwFlags, pvRefData);
-  return 0;
+FIXME((this=%p,%p,%p,%04x,%p): stub\n, This, lpdiCallback, lpdiCDParams, dwFlags, pvRefData);
+
+return DI_OK;
 }
 
-static HRESULT WINAPI IDirectInput8WImpl_ConfigureDevices(
-  LPDIRECTINPUT8W iface, LPDICONFIGUREDEVICESCALLBACK lpdiCallback,
-  LPDICONFIGUREDEVICESPARAMSW lpdiCDParams, DWORD dwFlags, LPVOID pvRefData
+static HRESULT WINAPI IDirectInput8AImpl_ConfigureDevices(
+  LPDIRECTINPUT8A iface, LPDICONFIGUREDEVICESCALLBACK lpdiCallback,
+  LPDICONFIGUREDEVICESPARAMSA lpdiCDParams, DWORD dwFlags, LPVOID pvRefData
 )
 {
-  IDirectInputImpl *This = impl_from_IDirectInput8W( iface );
+IDirectInputImpl *This = impl_from_IDirectInput8A(iface);
+DIACTIONFORMATW diafW;
+DICONFIGUREDEVICESPARAMSW diCDParamsW;
+HRESULT hr;
+int i;
+
+ FIXME((this=%p,%p,%p,%04x,%p): stub\n, This, lpdiCallback, lpdiCDParams, dwFlags, pvRefData);
+
+/* Copy parameters */
+diCDParamsW.dwSize = sizeof(DICONFIGUREDEVICESPARAMSW);
+diCDParamsW.dwcFormats = lpdiCDParams-dwcFormats;
+diCDParamsW.lprgFormats = diafW;
+diCDParamsW.hwnd = lpdiCDParams-hwnd;
+
+diafW.rgoAction = HeapAlloc(GetProcessHeap(), 0, sizeof(DIACTIONW)*lpdiCDParams-lprgFormats-dwNumActions);
+_copy_diactionformatAtoW(diafW, lpdiCDParams-lprgFormats);
+
+/* Copy action names */
+for (i=0; i  diafW.dwNumActions; i++)
+{
+const char* from = lpdiCDParams-lprgFormats-rgoAction[i].u.lptszActionName;
+WCHAR *to = HeapAlloc(GetProcessHeap(), 0, sizeof(WCHAR)*MAX_PATH);
+MultiByteToWideChar(CP_ACP, 0, from , -1, to , MAX_PATH);
+diafW.rgoAction[i].u.lptszActionName = to;
+}
+
+hr = IDirectInput8WImpl_ConfigureDevices(This-IDirectInput8W_iface, lpdiCallback, diCDParamsW, dwFlags, pvRefData);
+
+/* Copy back configuration */
+_copy_diactionformatWtoA(lpdiCDParams-lprgFormats, diafW);
+
+/* Free memory */
+for (i=0; i  diafW.dwNumActions; i++)
+HeapFree(GetProcessHeap(), 0, (LPVOID) diafW.rgoAction[i].u.lptszActionName);
+
+HeapFree(GetProcessHeap(), 0, diafW.rgoAction);
 
-  FIXME((this=%p,%p,%p,%04x,%p): stub\n, This, lpdiCallback, lpdiCDParams,
-dwFlags, pvRefData);
-  return 0;
+return hr;
 }
 
 static const IDirectInput7AVtbl ddi7avt = {
-- 
1.7.0.4
From 9313c779540742adedf6984c01b2e073672a93d3 Mon Sep 17 00:00:00 2001
From: Lucas Fialho Zawacki lfzawa...@gmail.com
Date: Thu, 28 Jul 2011 16:45:42 -0300
Subject: [PATCH 2/8] dinput: Added ConfigureDevices dialog

---
 dlls/dinput/Makefile.in  |7 ++--
 dlls/dinput/configure_devices.c  |   43 
 dlls/dinput/configure_devices.rc |   45 ++
 

Re:

2011-07-21 Thread Lucas Zawacki
Sorry, this is a duplicate for the [3/4] patch, you can disregard it.

2011/7/21 Lucas Fialho Zawacki lfzawa...@gmail.com:
 ---
  dlls/dinput/joystick.c |   60 
 +++-
  1 files changed, 59 insertions(+), 1 deletions(-)

 diff --git a/dlls/dinput/joystick.c b/dlls/dinput/joystick.c
 index b5c028c..2d8a818 100644
 --- a/dlls/dinput/joystick.c
 +++ b/dlls/dinput/joystick.c
 @@ -500,9 +500,67 @@ HRESULT WINAPI 
 JoystickWGenericImpl_SetActionMap(LPDIRECTINPUTDEVICE8W iface,
                                                  LPCWSTR lpszUserName,
                                                  DWORD dwFlags)
  {
 +    JoystickGenericImpl *This = impl_from_IDirectInputDevice8W(iface);
 +    DIDATAFORMAT data_format;
 +    DIOBJECTDATAFORMAT *obj_df = NULL;
 +    int i, action = 0, num_actions = 0;
 +    unsigned int offset = 0;
 +
     FIXME((%p)-(%p,%s,%08x): semi-stub !\n, iface, lpdiaf, 
 debugstr_w(lpszUserName), dwFlags);

 -    return DI_NOEFFECT;
 +    if (This-base.acquired) return DIERR_ACQUIRED;
 +
 +    data_format.dwSize = sizeof(data_format);
 +    data_format.dwObjSize = sizeof(DIOBJECTDATAFORMAT);
 +    data_format.dwFlags = DIDF_RELAXIS;
 +    data_format.dwDataSize = lpdiaf-dwDataSize;
 +
 +    /* count the actions */
 +    for (i=0; i  lpdiaf-dwNumActions; i++)
 +        if (IsEqualGUID(This-base.guid, 
 lpdiaf-rgoAction[i].guidInstance))
 +            num_actions++;
 +
 +    if (num_actions == 0) return DI_NOEFFECT;
 +
 +    This-base.num_actions = num_actions;
 +
 +    /* Construct the dataformat and actionmap */
 +    obj_df = HeapAlloc(GetProcessHeap(), 0, 
 sizeof(DIOBJECTDATAFORMAT)*num_actions);
 +    data_format.rgodf = (LPDIOBJECTDATAFORMAT)obj_df;
 +    data_format.dwNumObjs = num_actions;
 +
 +    This-base.action_map = HeapAlloc(GetProcessHeap(), 0, 
 sizeof(ActionMap)*num_actions);
 +
 +    for (i = 0; i  lpdiaf-dwNumActions; i++)
 +    {
 +        if (IsEqualGUID(This-base.guid, 
 lpdiaf-rgoAction[i].guidInstance))
 +        {
 +            LPDIDATAFORMAT df = This-base.data_format.wine_df;
 +            DWORD inst = DIDFT_GETINSTANCE(lpdiaf-rgoAction[i].dwObjID);
 +            DWORD type = DIDFT_GETTYPE(lpdiaf-rgoAction[i].dwObjID);
 +            LPDIOBJECTDATAFORMAT obj;
 +
 +            if (type == DIDFT_PSHBUTTON) type = DIDFT_BUTTON;
 +            if (type == DIDFT_RELAXIS) type = DIDFT_AXIS;
 +
 +            obj = dataformat_to_odf_by_type(df, inst, type);
 +
 +            memcpy(obj_df[action], obj, df-dwObjSize);
 +
 +            This-base.action_map[action].uAppData = 
 lpdiaf-rgoAction[i].uAppData;
 +            This-base.action_map[action].offset = offset;
 +            obj_df[action].dwOfs = offset;
 +            offset += (type  DIDFT_BUTTON) ? 1 : 4;
 +
 +            action++;
 +        }
 +    }
 +
 +    IDirectInputDevice8_SetDataFormat(iface, data_format);
 +
 +    HeapFree(GetProcessHeap(), 0, obj_df);
 +
 +    return IDirectInputDevice8WImpl_SetActionMap(iface, lpdiaf, 
 lpszUserName, dwFlags);
  }

  HRESULT WINAPI JoystickAGenericImpl_SetActionMap(LPDIRECTINPUTDEVICE8A iface,
 --
 1.7.0.4





Re: GSoC: dinput8 Action Mapping

2011-07-19 Thread Lucas Zawacki
Hey, I've got a couple patches implementing build and setactionmap for
joysticks and I'd like you guys to give them a look.

These implementations are very generic and I think I could use them
for the keyboard and the mouse too. If everything's alright with these
patches that'll be my next step.

The mapping can be tested this small app I built:
https://github.com/downloads/lfzawacki/dinput-samples/dolphin.exe
provided that you have one joystick attached (it will chose the first
one if there are more).

Cheers :)

2011/7/5 Lucas Zawacki lfzawa...@gmail.com:
 Hi guys.

 Now that all the initial patches are in I have several smaller tasks
 to work on as listed here
 http://lfzawacki.heroku.com/wine/published/Road+Map and hopefully
 they're more straightforward. I've already started working on getting
 EnumDevicesBySemantics  correct with joysticks and the passed flags
 and, after that, BuildActionMap for the joysticks will follow. Maybe
 now it's time to discuss how to implement EnumDevicesBySemantics as a
 crosscall, but I really don't know how to do it (or if it's worth it)
 and everywhere I look in dinput I see similar cases of this
 duplication pattern.

 Another thing that I've been thinking is that I might as well end up
 rolling a version of ConfigureDevices
 (http://msdn.microsoft.com/en-us/library/microsoft.directx_sdk.idirectinput8.idirectinput8.configuredevices%28v=VS.85%29.aspx)
 because so far I've seen two of the games affected by bug 8754 use it
 to configure controls. I've not had time to find and test all of them,
 but if someone on the list knows about other games that use it I'd
 like to be informed.

 Last but not least, thanks for Wylda for testing NFSU and keeping bug
 8754 informed. I actually can't run the game properly, most likely
 because of the crappy intel graphics card in my laptop.

 Anyway, feedback on the tasks is welcome.

 ---
 lfz

From b492c54d5ca7179e0905f63cec183d0920555e1d Mon Sep 17 00:00:00 2001
From: Lucas Fialho Zawacki lfzawa...@gmail.com
Date: Tue, 19 Jul 2011 17:52:12 -0300
Subject: [PATCH 1/4] dinput: EnumDevicesBySemantics enumerating joysticks with priority flags

Added an utility function that checks the priority of a device for a given mapping. This can be modified later to return priority 2 mappings, if necessary.
---
 dlls/dinput/dinput_main.c |   50 
 1 files changed, 36 insertions(+), 14 deletions(-)

diff --git a/dlls/dinput/dinput_main.c b/dlls/dinput/dinput_main.c
index b653307..1d59cdc 100644
--- a/dlls/dinput/dinput_main.c
+++ b/dlls/dinput/dinput_main.c
@@ -317,6 +317,38 @@ void _copy_diactionformatWtoA(LPDIACTIONFORMATA to, LPDIACTIONFORMATW from)
 }
 }
 
+/* _diactionformat_priorityA
+ *
+ *  Given a DIACTIONFORMAT structure and a DI genre, returns the enumeration
+ *  priority. Joysticks should pass the game genre, and mouse or keyboard their
+ *  respective DI*_MASK
+ */
+static DWORD _diactionformat_priorityA(LPDIACTIONFORMATA lpdiaf, DWORD genre)
+{
+int i;
+DWORD priorityFlags = 0;
+
+/* If there's at least one action for the device it's priority 1 */
+for(i=0; i  lpdiaf-dwActionSize; i++)
+if ((lpdiaf-rgoAction[i].dwSemantic  genre) == genre)
+priorityFlags |= DIEDBS_MAPPEDPRI1;
+
+return priorityFlags;
+}
+
+static DWORD _diactionformat_priorityW(LPDIACTIONFORMATW lpdiaf, DWORD genre)
+{
+int i;
+DWORD priorityFlags = 0;
+
+/* If there's at least one action for the device it's priority 1 */
+for(i=0; i  lpdiaf-dwActionSize; i++)
+if ((lpdiaf-rgoAction[i].dwSemantic  genre) == genre)
+priorityFlags |= DIEDBS_MAPPEDPRI1;
+
+return priorityFlags;
+}
+
 /**
  *	IDirectInputA_EnumDevices
  */
@@ -877,7 +909,7 @@ static HRESULT WINAPI IDirectInput8AImpl_EnumDevicesBySemantics(
 {
 TRACE( - checking device %u ('%s')\n, i, dinput_devices[i]-name);
 
-callbackFlags = 0;
+callbackFlags = _diactionformat_priorityA(lpdiActionFormat, lpdiActionFormat-dwGenre);
 /* Default behavior is to enumerate attached game controllers */
 enumSuccess = dinput_devices[i]-enum_deviceA(DI8DEVCLASS_GAMECTRL, DIEDFL_ATTACHEDONLY | dwFlags, didevi, This-dwVersion, j);
 if (enumSuccess)
@@ -895,16 +927,11 @@ static HRESULT WINAPI IDirectInput8AImpl_EnumDevicesBySemantics(
 /* Enumerate keyboard and mouse */
 for(i=0; i  sizeof(guids)/sizeof(guids[0]); i++)
 {
-callbackFlags = 0;
+callbackFlags = _diactionformat_priorityA(lpdiActionFormat, actionMasks[i]);
 
 IDirectInput_CreateDevice(iface, guids[i], lpdid, NULL);
 IDirectInputDevice_GetDeviceInfo(lpdid, didevi);
 
-/* If there's at least one action for the device it's priority 1 */
-for(j=0; j  lpdiActionFormat-dwActionSize; j++)
-if ((lpdiActionFormat-rgoAction[j

Re: [4/5] dinput: Added device's owner username set by SetActionMap and the respective GetProperty to retrieve it

2011-07-08 Thread Lucas Zawacki
I realized this patch and the next are wrong and don't work, despite
the tests passing. No need to bother reading them.

2011/7/8 Lucas Fialho Zawacki lfzawa...@gmail.com:
 ---
  dlls/dinput/device.c         |   22 ++
  dlls/dinput/device_private.h |    1 +
  2 files changed, 23 insertions(+), 0 deletions(-)

 diff --git a/dlls/dinput/device.c b/dlls/dinput/device.c
 index 5d81227..99c854c 100644
 --- a/dlls/dinput/device.c
 +++ b/dlls/dinput/device.c
 @@ -953,6 +953,16 @@ HRESULT WINAPI 
 IDirectInputDevice2WImpl_GetProperty(LPDIRECTINPUTDEVICE8W iface,
             TRACE(buffersize = %d\n, pd-dwData);
             break;
         }
 +        case (DWORD_PTR) DIPROP_USERNAME:
 +        {
 +            LPDIPROPSTRING ps = (LPDIPROPSTRING)pdiph;
 +
 +            if (pdiph-dwSize != sizeof(DIPROPSTRING)) return 
 DIERR_INVALIDPARAM;
 +            if (strlenW(This-owner) == 0) return S_FALSE;
 +
 +            memcpy(ps-wsz, This-owner, strlenW(This-owner)*sizeof(WCHAR));
 +            break;
 +        }
         case (DWORD_PTR) DIPROP_VIDPID:
             FIXME(DIPROP_VIDPID not implemented\n);
             return DIERR_UNSUPPORTED;
 @@ -1459,10 +1469,22 @@ HRESULT WINAPI 
 IDirectInputDevice8WImpl_SetActionMap(LPDIRECTINPUTDEVICE8W iface
                                                     LPCWSTR lpszUserName,
                                                     DWORD dwFlags)
  {
 +    IDirectInputDeviceImpl *This = impl_from_IDirectInputDevice8W(iface);
     DIPROPDWORD dp;
 +    DWORD username_size = MAX_PATH;
 +    WCHAR username[MAX_PATH];

     FIXME((%p)-(%p,%s,%08x): semi-stub !\n, iface, lpdiaf, 
 debugstr_w(lpszUserName), dwFlags);

 +    /* NULL username defaults to the logged user */
 +    if (lpszUserName == NULL)
 +    {
 +        GetUserNameW(username, username_size);
 +        lpszUserName = username;
 +    }
 +
 +    memcpy(This-owner, lpszUserName, strlenW(lpszUserName)*sizeof(WCHAR));
 +
     if (lpdiaf-dwBufferSize  0)
     {
         dp.diph.dwSize = sizeof(DIPROPDWORD);
 diff --git a/dlls/dinput/device_private.h b/dlls/dinput/device_private.h
 index 503698a..6df8d93 100644
 --- a/dlls/dinput/device_private.h
 +++ b/dlls/dinput/device_private.h
 @@ -81,6 +81,7 @@ struct IDirectInputDeviceImpl
     /* Action mapping */
     int                         num_actions; /* number of actions mapped */
     ActionMap                  *action_map;  /* array of mappings */
 +    WCHAR                       owner[MAX_PATH]; /* username of the device's 
 owner */
  };

  extern BOOL get_app_key(HKEY*, HKEY*) DECLSPEC_HIDDEN;
 --
 1.7.0.4





Re: GSoC: dinput8 Action Mapping

2011-07-04 Thread Lucas Zawacki
Hi guys.

Now that all the initial patches are in I have several smaller tasks
to work on as listed here
http://lfzawacki.heroku.com/wine/published/Road+Map and hopefully
they're more straightforward. I've already started working on getting
EnumDevicesBySemantics  correct with joysticks and the passed flags
and, after that, BuildActionMap for the joysticks will follow. Maybe
now it's time to discuss how to implement EnumDevicesBySemantics as a
crosscall, but I really don't know how to do it (or if it's worth it)
and everywhere I look in dinput I see similar cases of this
duplication pattern.

Another thing that I've been thinking is that I might as well end up
rolling a version of ConfigureDevices
(http://msdn.microsoft.com/en-us/library/microsoft.directx_sdk.idirectinput8.idirectinput8.configuredevices%28v=VS.85%29.aspx)
because so far I've seen two of the games affected by bug 8754 use it
to configure controls. I've not had time to find and test all of them,
but if someone on the list knows about other games that use it I'd
like to be informed.

Last but not least, thanks for Wylda for testing NFSU and keeping bug
8754 informed. I actually can't run the game properly, most likely
because of the crappy intel graphics card in my laptop.

Anyway, feedback on the tasks is welcome.

---
lfz




Re: GSoC: dinput8 Action Mapping

2011-06-30 Thread Lucas Zawacki
Ouch, that is a leftover from an older try at this code. So much for
double checking the patches...

2011/6/30 Marcus Meissner meiss...@suse.de:
 On Thu, Jun 30, 2011 at 02:56:08AM -0300, Lucas Zawacki wrote:
 Hey guys, how are you doing? I've got some patches for you.

 The first is a refactoring of the BuildActionMap implementations for
 keyboard and mouse. I think with 'semantic_to_obj_id' the mapping is
 pretty much correct for  keyboard and mouse and it's being done the
 right way.

 The second patch is much like one I sent some time ago, it's
 SetActionMap for keyboard and mouse, this time (hopefully) with the
 dataformat stuff done right too. I've split it up in a third patch,
 which implements the action mapping per se.

 Anyway, tomorrow I'll code some mouse tests to be sure that this is working.

 Cheers

 From 37e5a1e6d51778ee0d5c0f3081dad8ca1431968f Mon Sep 17 00:00:00 2001
 From: Lucas Fialho Zawacki lfzawa...@gmail.com
 Date: Fri, 10 Jun 2011 21:43:53 -0300
 Subject: dinput: Keyboard and mouse implementation of BuildActionMap (try 4)


 +DWORD semantic_to_obj_id(IDirectInputDeviceImpl* This, DWORD dwSemantic)
 +{
 ...
 +    if (!found) return 0;

 So 0 is the not found case...

 +            DWORD obj_id = semantic_to_obj_id(This-base, 
 lpdiaf-rgoAction[i].dwSemantic);
 +            if (obj_id != -1)

 But here you check for -1.


 +            DWORD obj_id = semantic_to_obj_id(This-base, 
 lpdiaf-rgoAction[i].dwSemantic);
 +            if (obj_id != -1)

 and here. (both mouse and keyboard code)

 should probably check for 0 there, also as DWORD is unsigned ;)

 Ciao, Marcus





Re: [PATCH 3/6] dinput: SetActionMap setting the device buffer (try 2)

2011-06-28 Thread Lucas Zawacki
 Do you really need to copy it back?  It looks like an input parameter.

Yes, you're right. In SetActionMap this copy should not be necessary.
I'll take this code out and roll a new version of the patches.




Re: [PATCH 3/6] dinput: SetActionMap setting the device buffer (try 2)

2011-06-28 Thread Lucas Zawacki
The new patches address this issue, make some little corrections that
are pointed in the comments. Also I organized them better, with the
tests first.


2011/6/28 Lucas Zawacki lfzawa...@gmail.com:
 Do you really need to copy it back?  It looks like an input parameter.

 Yes, you're right. In SetActionMap this copy should not be necessary.
 I'll take this code out and roll a new version of the patches.





Re: GSoC: dinput8 Action Mapping

2011-06-24 Thread Lucas Zawacki
Is there any problem with the latest patches I sent? They're sitting
there with the 'New' status but I have no feedback (good or bad) about
them.

Cheers

2011/6/20 Lucas Zawacki lfzawa...@gmail.com:
 Because callback doesn't have any string parameters it would be an easy
 thing to do.

 I've made an EnumDevicesBySemantics version using A - W calls, but it
 turned out to be trickier than I thought because the callback function
 is passed the device interfaces and then the A callback gets W
 interfaces. I'll send the patches with corrections later today but I
 really think the implementation for EnumDevicesBySemantics should
 remain separate right now.





Re: GSoC: dinput8 Action Mapping

2011-06-24 Thread Lucas Zawacki
 As a hello word programmer, i can't judge the code quality, but i
 can say, that it worked nearly flawlessly. I was able to drive/play
 on keyboard :-D
That's very nice to hear :)

 The only issue i found in NFS's keyboard configuration:
 * When i press PAUSE KEY, then NFS says Num_Lock
 * When i press NUMLOCK KEY, then NFS says Pause
Hmm, actually I construct the mapping based on the positions of the
objects in the keyboard dataformat and PAUSE and NUM LOCK seem to be
in different positions in native and wine. Attached are two dumps of
the keyboard objects with builtin and native dinput for comparison.
enum_keyboard.cpp:61 - Operation successful
  Escape ofs: 0x001 0x001 
   1 ofs: 0x002 0x002 
   2 ofs: 0x003 0x003 
   3 ofs: 0x004 0x004 
   4 ofs: 0x005 0x005 
   5 ofs: 0x006 0x006 
   6 ofs: 0x007 0x007 
   7 ofs: 0x008 0x008 
   8 ofs: 0x009 0x009 
   9 ofs: 0x00a 0x00a 
   0 ofs: 0x00b 0x00b 
   - ofs: 0x00c 0x00c 
   = ofs: 0x00d 0x00d 
   BackSpace ofs: 0x00e 0x00e 
 Tab ofs: 0x00f 0x00f 
   Q ofs: 0x010 0x010 
   W ofs: 0x011 0x011 
   E ofs: 0x012 0x012 
   R ofs: 0x013 0x013 
   T ofs: 0x014 0x014 
   Y ofs: 0x015 0x015 
   U ofs: 0x016 0x016 
   I ofs: 0x017 0x017 
   O ofs: 0x018 0x018 
   P ofs: 0x019 0x019 
  dead_acute ofs: 0x01a 0x01a 
   [ ofs: 0x01b 0x01b 
  Return ofs: 0x01c 0x01c 
   Control_L ofs: 0x01d 0x01d 
   A ofs: 0x01e 0x01e 
   S ofs: 0x01f 0x01f 
   D ofs: 0x020 0x020 
   F ofs: 0x021 0x021 
   G ofs: 0x022 0x022 
   H ofs: 0x023 0x023 
   J ofs: 0x024 0x024 
   K ofs: 0x025 0x025 
   L ofs: 0x026 0x026 
ccedilla ofs: 0x027 0x027 
   ~ ofs: 0x028 0x028 
   ' ofs: 0x029 0x029 
 Shift_L ofs: 0x02a 0x02a 
   ] ofs: 0x02b 0x02b 
   Z ofs: 0x02c 0x02c 
   X ofs: 0x02d 0x02d 
   C ofs: 0x02e 0x02e 
   V ofs: 0x02f 0x02f 
   B ofs: 0x030 0x030 
   N ofs: 0x031 0x031 
   M ofs: 0x032 0x032 
   , ofs: 0x033 0x033 
   . ofs: 0x034 0x034 
   ; ofs: 0x035 0x035 
 Shift_R ofs: 0x036 0x036 
 KP_Multiply ofs: 0x037 0x037 
   Alt_L ofs: 0x038 0x038 
   space ofs: 0x039 0x039 
   Caps_Lock ofs: 0x03a 0x03a 
  F1 ofs: 0x03b 0x03b 
  F2 ofs: 0x03c 0x03c 
  F3 ofs: 0x03d 0x03d 
  F4 ofs: 0x03e 0x03e 
  F5 ofs: 0x03f 0x03f 
  F6 ofs: 0x040 0x040 
  F7 ofs: 0x041 0x041 
  F8 ofs: 0x042 0x042 
  F9 ofs: 0x043 0x043 
 F10 ofs: 0x044 0x044 
   Pause ofs: 0x045 0x045 
 Scroll_Lock ofs: 0x046 0x046 
 KP_Home ofs: 0x047 0x047 
   KP_Up ofs: 0x048 0x048 
KP_Prior ofs: 0x049 0x049 
 KP_Subtract ofs: 0x04a 0x04a 
 KP_Left ofs: 0x04b 0x04b 
KP_Begin ofs: 0x04c 0x04c 
KP_Right ofs: 0x04d 0x04d 
  KP_Add ofs: 0x04e 0x04e 
  KP_End ofs: 0x04f 0x04f 
 KP_Down ofs: 0x050 0x050 
 KP_Next ofs: 0x051 0x051 
   KP_Insert ofs: 0x052 0x052 
   KP_Delete ofs: 0x053 0x053 
   / ofs: 0x056 0x056 
 F11 ofs: 0x057 0x057 

Re: Need help at collecting ActionMapping data

2011-06-22 Thread Lucas Zawacki
 Hi,
 so you are the One who can finish off the bug 8754?? :-D
I hope so. As soon as my first patches get in I hope things should be
working with the keyboard, so if you have access to the NFSU games you
should test it.

 I own force feedback wheel: Logitech Wingman Formula Force GP and
 did three of this piece of HW on:

Awesome! Thank you.

 Results are attached. I also have access to some Microsoft Force
 Feedback wheel (Sidewinder?), so if interested i could try to make
 some log during the weeken. Also Win7 should not be a big problem.

It's not vital but if it's not a problem for you I'd like this data too.

Thanks again




Need help at collecting ActionMapping data

2011-06-21 Thread Lucas Zawacki
Hello everyone. As you may know I'm working on the dinput8 action
mapping support and at the moment I've pretty much finished the mouse
and keyboard and just need to get my patches in.

For the next part, however, I'm going to need to analyze lot's of data
generated by different joysticks to figure out how the mapping works.
Some things are already clear for me, but I have only some simple USB
joysticks here and thus would like your help to collect more useful
data.

If any of you has any sort of joystick (simple gamepads, driving
wheels and whatnot) and would like to help, I've set up a little app
that uses the DI8 action mapping API to construct a mapping for every
connected joystick and outputs it to the terminal. You just need to
run it, redirect the output to a file and email it back to me. Telling
me which version of windows you're running would be nice. If you want
to help but can't use windows, wine with native dinput8.dll is fine
too.

The program can be found here:
https://github.com/downloads/lfzawacki/dinput-samples/devices_test.exe
The code is here:
https://github.com/lfzawacki/dinput-samples/blob/master/devices_test.cpp

Thanks in advance
Cheers




Re: GSoC: dinput8 Action Mapping

2011-06-20 Thread Lucas Zawacki
 Because callback doesn't have any string parameters it would be an easy
 thing to do.

I've made an EnumDevicesBySemantics version using A - W calls, but it
turned out to be trickier than I thought because the callback function
is passed the device interfaces and then the A callback gets W
interfaces. I'll send the patches with corrections later today but I
really think the implementation for EnumDevicesBySemantics should
remain separate right now.




Re: GSoC: dinput8 Action Mapping

2011-06-14 Thread Lucas Zawacki
OK, so here is my second try at some patches. These mostly implement
keyboard action mapping and there's plenty of tests to go together
with it. I believe the keyboard part is pretty much done, as is
SetActionMap. Of course I'm ignoring the username strings and all the
device ownership part, I'll leave that for later.

As before I'll leave the patches here to get some feedback before I
try to commit.

Cheers
From 25f05b9860784c8c6ca16585de4591ffe2188ecc Mon Sep 17 00:00:00 2001
From: Lucas Fialho Zawacki lfzawa...@gmail.com
Date: Wed, 8 Jun 2011 23:49:34 -0300
Subject: dinput: EnumDevicesBySemantics enumerating system keyboard and mouse

---
 dlls/dinput/dinput_main.c   |   47 ---
 dlls/dinput8/tests/device.c |   63 ++
 2 files changed, 87 insertions(+), 23 deletions(-)

diff --git a/dlls/dinput/dinput_main.c b/dlls/dinput/dinput_main.c
index d3727bc..0f42e3e 100644
--- a/dlls/dinput/dinput_main.c
+++ b/dlls/dinput/dinput_main.c
@@ -681,8 +681,12 @@ static HRESULT WINAPI IDirectInput8AImpl_EnumDevicesBySemantics(
 )
 {
 IDirectInputImpl *This = impl_from_IDirectInput8A( iface );
+DIDEVICEINSTANCEA didevi;
+LPDIRECTINPUTDEVICE8A lpdid;
+BOOL ret; /* for the callback return */
+DWORD callbackFlags = 0;
 
-FIXME((this=%p,%s,%p,%p,%p,%04x): stub\n, This, ptszUserName, lpdiActionFormat,
+FIXME((this=%p,%s,%p,%p,%p,%04x): semi-stub\n, This, ptszUserName, lpdiActionFormat,
   lpCallback, pvRef, dwFlags);
 #define X(x) if (dwFlags  x) FIXME(\tdwFlags |= #x\n);
 	X(DIEDBSFL_ATTACHEDONLY)
@@ -695,6 +699,20 @@ static HRESULT WINAPI IDirectInput8AImpl_EnumDevicesBySemantics(
 
 _dump_diactionformatA(lpdiActionFormat);
 
+didevi.dwSize = sizeof(didevi);
+
+/* enum the keyboard first */
+IDirectInput_CreateDevice(iface, GUID_SysKeyboard, lpdid, NULL);
+IDirectInputDevice_GetDeviceInfo(lpdid, didevi);
+ret = lpCallback(didevi, lpdid, callbackFlags , 1, pvRef);
+
+if (ret == DIENUM_STOP) return DI_OK;
+
+/* and then the mouse */
+IDirectInput_CreateDevice(iface, GUID_SysMouse, lpdid, NULL);
+IDirectInputDevice_GetDeviceInfo(lpdid, didevi);
+ret = lpCallback(didevi, lpdid, callbackFlags , 0, pvRef);
+
 return DI_OK;
 }
 
@@ -704,11 +722,30 @@ static HRESULT WINAPI IDirectInput8WImpl_EnumDevicesBySemantics(
   LPVOID pvRef, DWORD dwFlags
 )
 {
-  IDirectInputImpl *This = impl_from_IDirectInput8W( iface );
+IDirectInputImpl *This = impl_from_IDirectInput8W( iface );
+DIDEVICEINSTANCEW didevi;
+LPDIRECTINPUTDEVICE8W lpdid;
+BOOL ret; /* for the callback return */
+DWORD callbackFlags = 0;
 
-  FIXME((this=%p,%s,%p,%p,%p,%04x): stub\n, This, debugstr_w(ptszUserName), lpdiActionFormat,
-lpCallback, pvRef, dwFlags);
-  return 0;
+FIXME((this=%p,%s,%p,%p,%p,%04x): semi-stub\n, This, debugstr_w(ptszUserName), lpdiActionFormat,
+  lpCallback, pvRef, dwFlags);
+
+didevi.dwSize = sizeof(didevi);
+
+/* enum the keyboard first */
+IDirectInput_CreateDevice(iface, GUID_SysKeyboard, lpdid, NULL);
+IDirectInputDevice_GetDeviceInfo(lpdid, didevi);
+ret = lpCallback(didevi, lpdid, callbackFlags , 1, pvRef);
+
+if (ret == DIENUM_STOP) return DI_OK;
+
+/* and then the mouse */
+IDirectInput_CreateDevice(iface, GUID_SysMouse, lpdid, NULL);
+IDirectInputDevice_GetDeviceInfo(lpdid, didevi);
+ret = lpCallback(didevi, lpdid, callbackFlags , 0, pvRef);
+
+return DI_OK;
 }
 
 static HRESULT WINAPI IDirectInput8AImpl_ConfigureDevices(
diff --git a/dlls/dinput8/tests/device.c b/dlls/dinput8/tests/device.c
index c18a83a..062b9c4 100644
--- a/dlls/dinput8/tests/device.c
+++ b/dlls/dinput8/tests/device.c
@@ -27,13 +27,51 @@
 #include initguid.h
 #include dinput.h
 
-static BOOL CALLBACK enum_by_semantics(
+struct enum_data {
+LPDIRECTINPUT8 pDI;
+LPDIACTIONFORMAT lpdiaf;
+LPDIRECTINPUTDEVICE8 keyboard;
+LPDIRECTINPUTDEVICE8 mouse;
+int ndevices;
+};
+
+/* Dummy GUID */
+const GUID ACTION_MAPPING_GUID = { 0x1, 0x2, 0x3, { 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xa, 0xb } };
+
+DIACTION actionMapping[]=
+{
+  /* axis */
+  { 0, 0x01008A01 /* DIAXIS_DRIVINGR_STEER */ , 0, { Steer } },
+
+  /* button */
+  { 1, 0x01000C01 /* DIBUTTON_DRIVINGR_SHIFTUP */ , 0, { Upshift } }
+};
+
+static BOOL CALLBACK enumeration_callback(
 LPCDIDEVICEINSTANCE lpddi,
 LPDIRECTINPUTDEVICE8 lpdid,
 DWORD dwFlags,
 DWORD dwRemaining,
 LPVOID pvRef)
 {
+struct enum_data *data = pvRef;
+if (!data) return DIENUM_CONTINUE;
+
+data-ndevices++;
+
+/* collect the mouse and keyboard */
+if ( IsEqualGUID(lpddi-guidInstance, GUID_SysKeyboard) )
+{
+IDirectInputDevice_AddRef(lpdid);
+data-keyboard = lpdid;
+}
+
+if ( IsEqualGUID(lpddi-guidInstance, GUID_SysMouse) )
+{
+IDirectInputDevice_AddRef(lpdid);
+data-mouse = lpdid;
+}
+
 

Re: GSoC: dinput8 Action Mapping

2011-06-14 Thread Lucas Zawacki
 keybd_event( key, 0, 0, 0);
 Have you tried using more meaningful parameters then 0?

Yes, I've tried issuing a scan code as the second parameter, it was no
use. I tried sending the keybd_event and then sending another one with
KEYEVENTF_KEYUP to emulate a key press and a release and still no
change. I've tried setting dummy values as the last parameter, but had
similar results. I don't know what it's for and msdn was not
helpful...




Re: GSoC: dinput8 Action Mapping

2011-06-14 Thread Lucas Zawacki
 Also please implement unicode method and call it from ascii. 
 (IDirectInput8AImpl_EnumDevicesBySemantics - 
 IDirectInput8WImpl_EnumDevicesBySemantics)
Sorry if that's a stupid question, but what should I do with the
string parameters? Is it ok to call a W function with the A
parameters?

 +    IDirectInputDevice8_SetDataFormat(iface, This-data_format.wine_df);
 You do not want to do that. It's internal data format which does not have to 
 be anything like real data format. You need to build your data format based 
 on action mapping. I had something like this, not sure if it is correct:
Thanks, that's interesting. I'll look further into this.




Re: GSoC: dinput8 Action Mapping

2011-06-13 Thread Lucas Zawacki
 What does keybd_event() do?

It seems to send WM_KEY and WM_KEYDOWN events to a window
http://msdn.microsoft.com/en-us/library/ms646304%28VS.85%29.aspx

 I suspect that Windows might not hooking the keyboard for DirectInput
 usage, but attaches to some lower layer in the input stack.

I'm not finding the exact paragraph now, but I remember reading
something along this lines in MSDN.




Re: GSoC: dinput8 Action Mapping

2011-06-12 Thread Lucas Zawacki
I'm having some issues with test that inject input. For instance this
code ( http://pastebin.com/gan0Niqj ) works as expected under wine and
wine with dinput8.dll , but fails in every windows version... I tried
a version with SendInput and had the same results...

Anyone has some insight on this?

Cheers




Re: GSoC: dinput8 Action Mapping

2011-06-06 Thread Lucas Zawacki
Just a simple doubt. Should I correct the tabs and align the
parameters in the function prototype when I implement them? For
instance SetActionMap and BuildActionMap have a lot of them.

Thanks




Re: dinput: Added a check for NULL callback in EnumDevices.

2011-06-05 Thread Lucas Zawacki
Ok, I didnt know and that changes everything. From now on I'll keep
that in mind.

Sorry for the noise.

2011/6/4 Vitaliy Margolen wine-de...@kievinfo.com:
 On 06/04/2011 01:32 PM, Lucas Zawacki wrote:

 Sometimes apps depend on the crash.  Since your change comes with a
 test case, it looks reasonable to me, although you might check the
 specific HRESULT rather than just FAILED.

 Exactly, it's not a crash on Windows. I'll resend it with an explicit
 test.

 I was thinking of this more as janitorial work as opposed to fixing
 a buggy app, maybe my comment worded it badly.

 AJ was explicit about such checks: unless you have an application that
 breaks because of this don't add any null checks. They needlessly slowdown
 Wine. And won't guard you against invalid pointer anyway.

 Vitaliy.





Re: dinput: Added a check for NULL callback in EnumDevices.

2011-06-04 Thread Lucas Zawacki
 Do you have an example of such application? And the bug in bugzilla?


I don't. I just thought that a case where Wine misbehaving causes a
crash was worth fixing.




Re: dinput: Added a check for NULL callback in EnumDevices.

2011-06-04 Thread Lucas Zawacki
 Sometimes apps depend on the crash.  Since your change comes with a
 test case, it looks reasonable to me, although you might check the
 specific HRESULT rather than just FAILED.

Exactly, it's not a crash on Windows. I'll resend it with an explicit test.

I was thinking of this more as janitorial work as opposed to fixing
a buggy app, maybe my comment worded it badly.




GSoC: dinput8 Action Mapping

2011-05-29 Thread Lucas Zawacki
Hey guys. So last week I finally got a good understanding of dinput as
a whole and nailed some trivial cases of action mapping, the ones with
the keyboard. I'm sending a series of patches so everyone can take a
look before I try commiting them. Please note that these contain a
partial implementation of EnumDevicesBySemantics, BuildActionMap and
SetActionMap, and also they're only the A versions. There are some
tests for EnumDevicesBySemantics. I'm not too sure of how to code the
tests that require user input...

I hope it's not a nuisance to read the code split in 7 files, if you
guys want I can merge it in one big diff.

On a bright note, this patchset results in the input working for these
two games:

* http://appdb.winehq.org/objectManager.php?sClass=applicationiId=3678
* http://appdb.winehq.org/objectManager.php?sClass=applicationiId=7919

Cheers :)
From 551a2f3bea643add493d50a5580f7c2a3c2f7566 Mon Sep 17 00:00:00 2001
From: Lucas Fialho Zawacki lfzawa...@gmail.com
Date: Sat, 28 May 2011 14:56:28 -0300
Subject: dinput8/tests: Organized it a little and added a test for the EnumDevicesBySemantics callback.

---
 dlls/dinput8/tests/device.c |   37 +
 1 files changed, 25 insertions(+), 12 deletions(-)

diff --git a/dlls/dinput8/tests/device.c b/dlls/dinput8/tests/device.c
index c18a83a..eca22a9 100644
--- a/dlls/dinput8/tests/device.c
+++ b/dlls/dinput8/tests/device.c
@@ -27,6 +27,23 @@
 #include initguid.h
 #include dinput.h
 
+/* Dummy GUID */
+static const GUID ACTION_MAPPING_GUID = { 0x1, 0x2, 0x3, { 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xa, 0xb } };
+
+static DIACTION actionMapping[]=
+{
+  /* axis */
+  { 0, 0x01008A01 /* DIAXIS_DRIVINGR_STEER */ ,   0, { Steer } },
+  /* button */
+  { 1, 0x01000C01 /* DIBUTTON_DRIVINGR_SHIFTUP */ ,   0, { Upshift } },
+  /* keyboard mapping */
+  { 2, DIKEYBOARD_SPACE , 0, { Missiles } }
+};
+
+
+/* This will set the number of devices, incrementing it
+   each time a new one is enumerated
+*/
 static BOOL CALLBACK enum_by_semantics(
 LPCDIDEVICEINSTANCE lpddi,
 LPDIRECTINPUTDEVICE8 lpdid,
@@ -34,6 +51,10 @@ static BOOL CALLBACK enum_by_semantics(
 DWORD dwRemaining,
 LPVOID pvRef)
 {
+
+int *ndevices = pvRef;
+if (ndevices != NULL) *ndevices += 1;
+
 return DIENUM_CONTINUE;
 }
 
@@ -44,17 +65,7 @@ static void test_action_mapping(void)
 HINSTANCE hinst = GetModuleHandle(NULL);
 LPDIRECTINPUT8 pDI = NULL;
 DIACTIONFORMAT af;
-/* Dummy GUID */
-const GUID ACTION_MAPPING_GUID = { 0x1, 0x2, 0x3, { 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xa, 0xb } };
-
-DIACTION actionMapping[]=
-{
-  /* axis */
-  { 0, 0x01008A01 /* DIAXIS_DRIVINGR_STEER */ , 0, { Steer } },
-
-  /* button */
-  { 1, 0x01000C01 /* DIBUTTON_DRIVINGR_SHIFTUP */ , 0, { Upshift } }
-};
+int ndevices = 0;
 
 hr = CoCreateInstance(CLSID_DirectInput8, 0, 1, IID_IDirectInput8A, (LPVOID*)pDI);
 if (hr == DIERR_OLDDIRECTINPUTVERSION ||
@@ -86,9 +97,10 @@ static void test_action_mapping(void)
 af.dwGenre = 0x0100; /* DIVIRTUAL_DRIVING_RACE */
 
 hr = IDirectInput8_EnumDevicesBySemantics(pDI,0, af,
-enum_by_semantics, 0, 0);
+enum_by_semantics, ndevices, 0);
 
 ok(SUCCEEDED(hr), EnumDevicesBySemantics failed: hr=%08x\n,hr);
+todo_wine ok (ndevices  0, EnumDevicesBySemantics did not call the callback. hr=%08x ndevices=%d\n, hr, ndevices);
 
 /* The call fails with a zeroed GUID */
 memset(af.guidActionMap, 0, sizeof(GUID));
@@ -107,3 +119,4 @@ START_TEST(device)
 
 CoUninitialize();
 }
+
-- 
1.7.0.4

From 1829925b178b3c2eb45fe4ea1956a226e6f91628 Mon Sep 17 00:00:00 2001
From: Lucas Fialho Zawacki lfzawa...@gmail.com
Date: Sun, 29 May 2011 16:49:45 -0300
Subject: dinput: Implement a simple version of EnumDevicesBySemanticsA which enumerates only the keyboard.

---
 dlls/dinput/dinput_main.c |   46 ++--
 1 files changed, 39 insertions(+), 7 deletions(-)

diff --git a/dlls/dinput/dinput_main.c b/dlls/dinput/dinput_main.c
index d3727bc..2d572bf 100644
--- a/dlls/dinput/dinput_main.c
+++ b/dlls/dinput/dinput_main.c
@@ -120,7 +120,7 @@ static struct list direct_input_list = LIST_INIT( direct_input_list );
  */
 HRESULT WINAPI DirectInputCreateEx(
 	HINSTANCE hinst, DWORD dwVersion, REFIID riid, LPVOID *ppDI,
-	LPUNKNOWN punkOuter) 
+	LPUNKNOWN punkOuter)
 {
 IDirectInputImpl* This;
 
@@ -282,7 +282,7 @@ static HRESULT WINAPI IDirectInputAImpl_EnumDevices(
 	}
 	}
 }
-
+
 return 0;
 }
 /**
@@ -290,7 +290,7 @@ static HRESULT WINAPI IDirectInputAImpl_EnumDevices(
  */
 static HRESULT WINAPI IDirectInputWImpl_EnumDevices(
 	LPDIRECTINPUT7W iface, DWORD dwDevType, LPDIENUMDEVICESCALLBACKW lpCallback,
-	LPVOID pvRef, DWORD dwFlags) 
+	LPVOID pvRef, DWORD dwFlags)
 {
 IDirectInputImpl *This = impl_from_IDirectInput7W( iface );
 

Re: dinput/tests: Initial tests for Action Mapping. Added some tests for the creation of a DirectInput8 Interface and a dummy call of EnumDevicesBySemantics.

2011-04-26 Thread Lucas Zawacki
Good point. I'll create the dinput8 tests and move those there.

2011/4/26 Vitaliy Margolen wine-de...@kievinfo.com:
 On 04/25/2011 05:14 PM, Austin English wrote:

 On Sun, Apr 24, 2011 at 18:12, Lucas Fialho Zawackilfzawa...@gmail.com
  wrote:

 Howdy Lucas,

 +    hr = CoCreateInstance(CLSID_DirectInput8, 0, 1,IID_IDirectInput8A,
 (LPVOID*)pDI);
 +    if (hr == DIERR_OLDDIRECTINPUTVERSION ||
 +        hr == DIERR_BETADIRECTINPUTVERSION ||
 +        hr == REGDB_E_CLASSNOTREG)
 +    {
 +        skip(ActionMapping requires dinput8\n);
 +        return;
 +    }
 +    ok(SUCCEEDED(hr), DirectInput8 Create failed: hr=%08x\n, hr);
 +    if (FAILED(hr)) return;
 +
 +    hr = IDirectInput8_Initialize(pDI,hinst, 0x0800 /* DirectInput8 */
 );
 +    if (hr == DIERR_OLDDIRECTINPUTVERSION || hr ==
 DIERR_BETADIRECTINPUTVERSION)
 +    {
 +        skip(ActionMapping requires dinput8\n);
 +        return;
 +    }

 You probably should use win_skip here, Wine shouldn't have missing
 dinput8 support.

 IMHO these tests should go into dinput8 not dinput if they are testing
 dinput8 functionality.

 Vitaliy.






-- 
http://www.twitter.com/lfzawacki
http://www.linesocode.wordpress.com




Re: [GSoC] Implementing missing DirectInput8 features

2011-03-25 Thread Lucas Zawacki
The part about semantics is getting clearer to me. Apparently, like
Vitality pointed, it's more about relating the joysticks (or
directinput devices) to the various game genres and actions
constants defined in the microsoft's dinput.h and then Action Mapping
will simply consist of polling all the connect devices and informing
the application when a keypress triggers an action.

This page http://msdn.microsoft.com/en-us/library/bb172238%28v=vs.85%29.aspx
is the best documentation about the subject that I have found until
now. Does anyone have another source of info to suggest?



-- 
http://www.twitter.com/lfzawacki
http://www.linesocode.wordpress.com




[GSoC] Implementing missing DirectInput8 features

2011-03-23 Thread Lucas Zawacki
Hello, I'm Lucas Fialho Zawacki a Computer Science undergrad at UFRGS
university in Brazil. I'm very interested in working with Wine for the
Google Summer of Code and have decided to approach the implementation
of DirectInput8 missing features. I'm a long time Wine user, but I'd
never looked at it from a developer point of view, so for the past few
days I have been reading Wine's developer documentation and
familiarizing myself with it's architecture and with the parts I
intend to work on.

At the moment, I don't have a clear understanding of how the
implementation should be done so I'm reading a lot of material about
dinput and dinput8 and building some documentation to help me. After
some polishing  I hope to be able to contribute it to Wine too.

A little word about me. I've been using the C programming language for
almost three years, so I'm very familiar with it. For the last two
years I've worked on a research project as a C/C++ programmer,
implementing a decision system for a F180 Small Size League Robot
Soccer Team (see http://small-size.informatik.uni-bremen.de/) and
http://code.google.com/p/robopet/ . I'm a heavy Linux user and I'm
very comfortable with it's tools used for programming.

That's it. I'm eager to get your feedback about this. My proposal will
be ready in a few days.


-- 
http://www.twitter.com/lfzawacki
http://www.linesocode.wordpress.com