Saulius Krasuckas wrote:
- On Sun, 10 Sep 2006, Aaron Slunt wrote:
I was interested in starting to play with wine and maybe even build a few functions for it...but then I realized that it's low-level coding, something I'm not familiar with (higher level is more of my expertise). Correct me if I'm wrong, I could be looking at the wrong files :S.
You are welcome! :) Can you refer to exact file names your were looking at?
Does anyone have any good places to go to to learn about low-level coding, and afterwards coding for wine specifically?
For me Wine embraces libs for quite wide spectra of functions and not so few ioctls:
$ grep -rI "ioctl[^a-zA-Z0-9]*(" dlls/ | wc -l 276
$ grep -rIc "ioctl[^a-zA-Z0-9]*(" dlls/ | grep -v :0 dlls/avicap32/avicap32_main.c:4 dlls/dinput/joystick_linux.c:10 dlls/dinput/joystick_linuxinput.c:7 dlls/dinput/effect_linuxinput.c:2 dlls/iphlpapi/ifenum.c:9 dlls/kernel/comm.c:4 dlls/kernel/sync.c:1 dlls/kernel/oldconfig.c:1 dlls/ntdll/cdrom.c:57 dlls/ntdll/directory.c:7 dlls/ntdll/file.c:1 dlls/ntdll/serial.c:10 dlls/ntdll/tape.c:11 dlls/qcap/v4l.c:17 dlls/winedos/int13.c:1 dlls/winedos/ppdev.c:8 dlls/winmm/joystick/joystick.c:4 dlls/winmm/wineaudioio/audio.c:6 dlls/winmm/wineoss/audio.c:61 dlls/winmm/wineoss/dscapture.c:11 dlls/winmm/wineoss/dsrender.c:15 dlls/winmm/wineoss/midi.c:5 dlls/winmm/wineoss/mixer.c:17 dlls/winmm/wineoss/mmaux.c:3 dlls/wnaspi32/aspi.c:2 dlls/ws2_32/socket.c:2
As for me, low level coding is writing a device driver for linux kernel :-] and using it from the Wine code.
But there is also a bunch of hardware platform specific issues also, like advanced signal handling which may be needed for example to make remote process operations work [1] or to implement ntoskrnl and make safedisc work [2].
All that stuff needs knowledge of glibc programming at least, I guess. So maybe you should read recent libc.pdf if you are interested into this area?
Also, some guys are working on DCOM/OLE stuff [3] which seems to be quite low level for me sometimes (wire-protocol compatibility).
Going further (upper?) most of Wine code tries to use WinAPI, which I doubt should be considered as low-level. To get into basic Wine coding it may be usefull to review Janitorial Projects [4] and maybe to hang on one of it? :)
Without naming exact Wine component or functionality you are interested in I doubt someone will answer you more specifically :-P
[1] http://wiki.winehq.org/RemoteProcessOperations [2] http://wiki.winehq.org/VitaliyMargolen [3] http://wiki.winehq.org/RobShearman [4] http://wiki.winehq.org/JanitorialProjects
Thanks all for the replies. I took note to the JanitorialProjects page, and found the DllCanUnloadNow project.
I wrote a patch for the dinput.c one, to start with getting familiar with wine's code, and it compiles fine, but I have no way (at least know of a way) of testing if the implementation actually works or not. It looks like it should, and it compiles, but I don't know for sure how to test it out...I've skimmed through the wiki, but I need some human help as well :(
And I guess I really meant "lower-level" coding, C looks scary as I'm not familiar with it and it looks more complex than other languages like Java, but the same syntax makes it a lot easier :O
Thanks for the support, makes things much easier :)