16 Bit Separation
Lots of Windows DLLs come into two flavors:
- the old 16 bit format
- the "new" 32 bit format
Wine provides them by bundling into the same unix file the two DLLs formats. There's a Wine configuration option (--disable-win16) which only compiles the 32 bit version of the DLL.
However, in some cases, 16 bit and 32 bit implementation are so tight that lots of old 16 bit code remain in the 32 bit DLL.
For future evolution of the project, the 16 bit code should really be made optional in the Wine tree.
- one could think of a Wine CE project for example
- we load many 16-Bit dlls even for simple graphical Apps
ToDo - List
- This list expect, that the internal Name of all 16-Bit Functions end with "16("
- The correct way requires to Parse the internal Names from the spec-files of all 16-Bit dlls
- This list expect, that 16-Bit sourcefiles are listed in C_SRCS16
In Makefile.in, the sourcefiles listed in C_SRCS for the 32-Bit DLL includes sometimes sourcefiles for implementing a 16-Bit DLL.
Rename a file, that has only 16-Bit Functions, and we have a similar 32-Bit file
- Script needs an update
Do not load a 16-Bit DLL from a 32-Bit DLL
=> grep "LoadLibrary16("
=> grep "GetModuleHandle16("
- Excluded: dlls/winedos
- dlls/gdi32/gdi_main.c: 1 entry
- dlls/kernel32/global16.c: 1 entry
- dlls/kernel32/kernel_main.c: 1 entry
- dlls/kernel32/local16.c: 2 entries
- dlls/kernel32/ne_module.c: 7 entries
- dlls/kernel32/ne_segment.c: 2 entries
- dlls/kernel32/resource16.c: 1 entry
- dlls/kernel32/task.c: 1 entry
- dlls/kernel32/thunk.c: 4 entries
- dlls/kernel32/utthunk.c: 2 entries
- dlls/user32/driver16.c: 1 entry
- dlls/user32/user_main.c: 2 entries
- dlls/user32/winproc.c: 1 entry
- dlls/version/info.c: 1 entry accessing a 16-Bit DLL: 27
Do not use a 16-Bit include in a 32-Bit File
=> grep "#include.*wownt32"
=> grep "#include.*wine/win.*16"
=> grep "#include.*wine/winaspi"
- Excluded: dlls/winedos
- dlls/dbghelp/stack.c: 1 include
- dlls/gdi32/bitmap.c: 1 include
- dlls/gdi32/brush.c: 2 includes
- dlls/gdi32/clipping.c: 2 includes
- dlls/gdi32/dc.c: 2 includes
- dlls/gdi32/dib.c: 1 include
- dlls/gdi32/font.c: 1 include
- dlls/gdi32/gdi_main.c: 1 include
- dlls/gdi32/mapping.c: 1 include
- dlls/gdi32/mfdrv/init.c: 2 includes
- dlls/gdi32/mfdrv/objects.c: 1 include
- dlls/gdi32/palette.c: 2 includes
- dlls/gdi32/pen.c: 1 include
- dlls/gdi32/printdrv.c: 3 includes
- dlls/kernel32/console.c: 1 include
- dlls/kernel32/debugger.c: 1 include
- dlls/kernel32/dosmem.c: 1 include
- dlls/kernel32/file16.c: 1 include
- dlls/kernel32/file.c: 1 include
- dlls/kernel32/global16.c: 1 include
- dlls/kernel32/instr.c: 1 include
- dlls/kernel32/kernel_main.c: 2 includes
- dlls/kernel32/local16.c: 2 includes
- dlls/kernel32/module.c: 1 include
- dlls/kernel32/ne_module.c: 2 includes
- dlls/kernel32/ne_segment.c: 2 includes
- dlls/kernel32/process.c: 2 includes
- dlls/kernel32/profile.c: 1 include
- dlls/kernel32/relay16.c: 1 include
- dlls/kernel32/resource16.c: 3 includes
- dlls/kernel32/resource.c: 2 includes
- dlls/kernel32/selector.c: 1 include
- dlls/kernel32/snoop16.c: 1 include
- dlls/kernel32/stress.c: 1 include
- dlls/kernel32/string.c: 1 include
- dlls/kernel32/sync.c: 1 include
- dlls/kernel32/syslevel.c: 1 include
- dlls/kernel32/system.c: 3 includes
- dlls/kernel32/task.c: 2 includes
- dlls/kernel32/thread.c: 1 include
- dlls/kernel32/thunk.c: 2 includes
- dlls/kernel32/utthunk.c: 2 includes
- dlls/kernel32/version.c: 1 include
- dlls/kernel32/wowthunk.c: 2 includes
- dlls/mcicda/mcicda.c: 1 include
- dlls/mciseq/mcimidi.c: 1 include
- dlls/mciwave/mciwave.c: 1 include
- dlls/ole32/ole2.c: 1 include
- dlls/ole32/storage32.c: 1 include
- dlls/oleaut32/olepicture.c: 1 include
- dlls/olecli32/olecli_main.c: 2 includes
- dlls/olesvr32/olesvr_main.c: 1 include
- dlls/shell32/control.c: 2 includes
- dlls/shell32/shellreg.c: 1 include
- dlls/shell32/shlexec.c: 1 include
- dlls/user32/button.c: 1 include
- dlls/user32/class.c: 1 include
- dlls/user32/clipboard.c: 2 includes
- dlls/user32/combo.c: 1 include
- dlls/user32/cursoricon.c: 3 includes
- dlls/user32/ddeml16.c: 2 includes
- dlls/user32/defdlg.c: 1 include
- dlls/user32/defwnd.c: 1 include
- dlls/user32/desktop.c: 1 include
- dlls/user32/dialog16.c: 2 includes
- dlls/user32/dialog.c: 1 include
- dlls/user32/driver16.c: 2 includes
- dlls/user32/edit.c: 3 includes
- dlls/user32/exticon.c: 1 include
- dlls/user32/listbox.c: 2 includes
- dlls/user32/mdi.c: 2 includes
- dlls/user32/menu.c: 3 includes
- dlls/user32/misc.c: 1 include
- dlls/user32/msg16.c: 2 includes
- dlls/user32/msgbox.c: 2 includes
- dlls/user32/nonclient.c: 2 includes
- dlls/user32/property.c: 2 includes
- dlls/user32/resource.c: 3 includes
- dlls/user32/scroll.c: 1 include
- dlls/user32/spy.c: 1 include
- dlls/user32/static.c: 1 include
- dlls/user32/sysparams.c: 1 include
- dlls/user32/text.c: 1 include
- dlls/user32/uitools.c: 1 include
- dlls/user32/win.c: 3 includes
- dlls/user32/winpos.c: 1 include
- dlls/user32/winproc.c: 3 includes
- dlls/user32/wsprintf.c: 2 includes
- dlls/version/info.c: 1 include
- dlls/version/resource.c: 2 includes
- dlls/w32skrnl/w32skernel.c: 1 include
- dlls/w32skrnl/w32sys.c: 2 includes
- dlls/wineesd.drv/audio.c: 1 include
- dlls/wineps.drv/driver.c: 1 include
- dlls/wineps.drv/escape.c: 3 includes
- dlls/wineps.drv/init.c: 1 include
- dlls/winex11.drv/brush.c: 1 include
- dlls/winex11.drv/clipboard.c: 1 include
- dlls/winex11.drv/dce.c: 3 includes
- dlls/winex11.drv/desktop.c: 1 include
- dlls/winex11.drv/keyboard.c: 1 include
- dlls/winex11.drv/mouse.c: 1 include
- dlls/winex11.drv/winpos.c: 2 includes
- dlls/winex11.drv/x11drv_main.c: 1 include
- dlls/winex11.drv/xdnd.c: 1 include
- dlls/winex11.drv/xrender.c: 1 include
- dlls/winmm/mci.c: 1 include
- dlls/winnls32/winnls.c: 1 include
- dlls/winspool.drv/info.c: 1 include
- dlls/wow32/wow_main.c: 1 include
- dlls/ws2_32/async.c: 3 includes accessing a 16-Bit include: 193
Do not implement or use a 16-Bit Function in a 32-Bit File
=> grep "16("
- Excluded: dlls/winedos
- dlls/cabinet/fdi.c: 20 entries
- dlls/comdlg32/fontdlg.c: 2 entries
- dlls/comdlg32/printdlg.c: 2 entries
- dlls/dnsapi/ns_parse.c: 8 entries
- dlls/dsound/mixer.c: 3 entries
- dlls/gdi32/bitmap.c: 4 entries
- dlls/gdi32/brush.c: 7 entries
- dlls/gdi32/clipping.c: 7 entries
- dlls/gdi32/dc.c: 14 entries
- dlls/gdi32/dib.c: 3 entries
- dlls/gdi32/driver.c: 5 entries
- dlls/gdi32/enhmfdrv/graphics.c: 3 entries
- dlls/gdi32/enhmfdrv/objects.c: 2 entries
- dlls/gdi32/font.c: 17 entries
- dlls/gdi32/gdi_main.c: 2 entries
- dlls/gdi32/gdiobj.c: 12 entries
- dlls/gdi32/mapping.c: 2 entries
- dlls/gdi32/mfdrv/init.c: 6 entries
- dlls/gdi32/mfdrv/objects.c: 3 entries
- dlls/gdi32/palette.c: 3 entries
- dlls/gdi32/pen.c: 2 entries
- dlls/gdi32/printdrv.c: 26 entries
- dlls/iccvid/iccvid.c: 5 entries
- dlls/imaadp32.acm/imaadp32.c: 27 entries
- dlls/kernel32/debugger.c: 4 entries
- dlls/kernel32/file16.c: 56 entries
- dlls/kernel32/global16.c: 65 entries
- dlls/kernel32/instr.c: 2 entries
- dlls/kernel32/kernel_main.c: 5 entries
- dlls/kernel32/local16.c: 55 entries
- dlls/kernel32/module.c: 2 entries
- dlls/kernel32/ne_module.c: 86 entries
- dlls/kernel32/ne_segment.c: 25 entries
- dlls/kernel32/process.c: 4 entries
- dlls/kernel32/profile.c: 2 entries
- dlls/kernel32/relay16.c: 3 entries
- dlls/kernel32/resource16.c: 43 entries
- dlls/kernel32/resource.c: 9 entries
- dlls/kernel32/selector.c: 24 entries
- dlls/kernel32/snoop16.c: 10 entries
- dlls/kernel32/string.c: 12 entries
- dlls/kernel32/sync.c: 3 entries
- dlls/kernel32/syslevel.c: 1 entry
- dlls/kernel32/system.c: 10 entries
- dlls/kernel32/task.c: 93 entries
- dlls/kernel32/thunk.c: 37 entries
- dlls/kernel32/utthunk.c: 9 entries
- dlls/kernel32/version.c: 7 entries
- dlls/kernel32/windebug.c: 1 entry
- dlls/kernel32/wowthunk.c: 53 entries
- dlls/msacm32/pcmconverter.c: 39 entries
- dlls/msadp32.acm/msadp32.c: 21 entries
- dlls/msg711.acm/msg711.c: 6 entries
- dlls/msvcrt/except.c: 2 entries
- dlls/msvidc32/msvideo1.c: 9 entries
- dlls/ntdll/loader.c: 1 entry
- dlls/ntdll/relay.c: 1 entry
- dlls/ntdll/resource.c: 1 entry
- dlls/ntdll/signal_i386.c: 2 entries
- dlls/ole32/storage32.c: 1 entry
- dlls/olesvr32/olesvr_main.c: 9 entries
- dlls/rpcrt4/ndr_stubless.c: 1 entry
- dlls/setupapi/stubs.c: 2 entries
- dlls/shell32/control.c: 3 entries
- dlls/shlwapi/ordinal.c: 1 entry
- dlls/user32/class.c: 3 entries
- dlls/user32/clipboard.c: 2 entries
- dlls/user32/cursoricon.c: 53 entries
- dlls/user32/dde_misc.c: 1 entry
- dlls/user32/ddeml16.c: 27 entries
- dlls/user32/defdlg.c: 5 entries
- dlls/user32/desktop.c: 1 entry
- dlls/user32/dialog16.c: 72 entries
- dlls/user32/driver16.c: 21 entries
- dlls/user32/edit.c: 37 entries
- dlls/user32/listbox.c: 3 entries
- dlls/user32/mdi.c: 1 entry
- dlls/user32/menu.c: 11 entries
- dlls/user32/message.c: 1 entry
- dlls/user32/msg16.c: 42 entries
- dlls/user32/property.c: 1 entry
- dlls/user32/resource.c: 17 entries
- dlls/user32/spy.c: 6 entries
- dlls/user32/static.c: 4 entries
- dlls/user32/sysparams.c: 10 entries
- dlls/user32/uitools.c: 2 entries
- dlls/user32/user_main.c: 4 entries
- dlls/user32/win.c: 12 entries
- dlls/user32/winpos.c: 3 entries
- dlls/user32/winproc.c: 116 entries
- dlls/user32/wsprintf.c: 11 entries
- dlls/version/info.c: 18 entries
- dlls/version/resource.c: 2 entries
- dlls/w32skrnl/w32sys.c: 5 entries
- dlls/winearts.drv/audio.c: 2 entries
- dlls/wineesd.drv/audio.c: 2 entries
- dlls/winejack.drv/audio.c: 7 entries
- dlls/winemp3.acm/mpegl3.c: 2 entries
- dlls/winenas.drv/audio.c: 1 entry
- dlls/wineps.drv/brush.c: 2 entries
- dlls/wineps.drv/driver.c: 5 entries
- dlls/wineps.drv/escape.c: 4 entries
- dlls/wineps.drv/graphics.c: 1 entry
- dlls/wineps.drv/init.c: 4 entries
- dlls/wineps.drv/ps.c: 15 entries
- dlls/winex11.drv/brush.c: 2 entries
- dlls/winex11.drv/clipboard.c: 17 entries
- dlls/winex11.drv/codepage.c: 7 entries
- dlls/winex11.drv/dce.c: 6 entries
- dlls/winex11.drv/dib.c: 4 entries
- dlls/winex11.drv/xfont.c: 2 entries
- dlls/winex11.drv/xrender.c: 2 entries
- dlls/winmm/driver.c: 4 entries
- dlls/winmm/lolvldrv.c: 10 entries
- dlls/winmm/mci.c: 7 entries
- dlls/winmm/mmio.c: 1 entry
- dlls/winmm/time.c: 1 entry
- dlls/winmm/winmm.c: 2 entries
- dlls/winnls32/winnls.c: 2 entries
- dlls/winspool.drv/info.c: 2 entries
- dlls/wow32/wow_main.c: 22 entries
- dlls/ws2_32/async.c: 8 entries lines with "16(": 1540
