Low-level coding

Aaron Slunt tonglebeak at gmail.com
Mon Sep 11 15:42:51 CDT 2006

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 :)

More information about the wine-devel mailing list