16-bit separation
Lots of Windows DLLs come into two flavors:
- the old 16 bit format ("NE" = new executable)
- the "new" 32 bit format ("PE" = portable executable)
Wine provides them by bundling the two DLL formats into the same Unix file. There's a Wine configuration option (--disable-win16) which only compiles the 32-bit version of the DLLs.
However, in some cases, the 16-bit and 32-bit implementations are so tightly bound that lots of old 16-bit code remains 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 expects that the internal name of all 16-bit functions end with "16("
- The correct way requires parsing the internal names from the .spec files of all 16-bit DLLs
- This list expects that 16-bit source files are listed in C_SRCS16
In Makefile.in, the source files listed in C_SRCS for the 32-bit DLL includes sometimes source files for implementing a 16-bit DLL.
Lists
Generated from wine-1.1.31-397-g47ec8ab on Oct 20, 2009.
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/.*16/.*
- dlls/comdlg32/colordlg16.c: 1 entry
- dlls/comdlg32/filedlg16.c: 2 entries
- dlls/comdlg32/finddlg16.c: 2 entries
- dlls/comdlg32/fontdlg16.c: 1 entry
- dlls/comdlg32/printdlg16.c: 1 entry
- dlls/gdi32/gdi_main.c: 1 entry
- dlls/kernel32/global16.c: 1 entry
- dlls/kernel32/kernel16.c: 1 entry
- dlls/kernel32/kernel32.spec: 2 entries
- dlls/kernel32/kernel_main.c: 1 entry
- dlls/kernel32/local16.c: 2 entries
- dlls/kernel32/ne_module.c: 8 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/user16.c: 2 entries
- dlls/user32/user_main.c: 2 entries
- dlls/user32/winproc.c: 1 entry
- dlls/user32/wnd16.c: 4 entries
- dlls/version/info.c: 1 entry
- dlls/winmm/mmsystem.c: 2 entries
- dlls/winmm/winmm.c: 1 entry
Total for accessing a 16-bit DLL: 47
Do not use a 16-bit include in a 32-bit file
=> grep "#include.*wownt32"
=> grep "#include.*wine/.*16"
=> grep "#include.*wine/winaspi"
- Excluded: dlls/winedos/.*, dlls/.*16/.*
- dlls/comdlg32/cdlg.h: 1 entry
- dlls/comdlg32/cdlg16.h: 4 entries
- dlls/comdlg32/colordlg16.c: 2 entries
- dlls/comdlg32/filedlg16.c: 2 entries
- dlls/comdlg32/finddlg16.c: 2 entries
- dlls/comdlg32/fontdlg16.c: 2 entries
- dlls/comdlg32/printdlg16.c: 2 entries
- dlls/dbghelp/stack.c: 1 entry
- dlls/gdi32/bidi16.c: 1 entry
- dlls/gdi32/dc.c: 1 entry
- dlls/gdi32/dib.c: 1 entry
- dlls/gdi32/env.c: 1 entry
- dlls/gdi32/font.c: 1 entry
- dlls/gdi32/gdi16.c: 2 entries
- dlls/gdi32/gdi_private.h: 1 entry
- dlls/gdi32/mapping.c: 1 entry
- dlls/gdi32/metafile16.c: 3 entries
- dlls/gdi32/mfdrv/objects.c: 1 entry
- dlls/gdi32/printdrv16.c: 3 entries
- dlls/kernel32/atom16.c: 1 entry
- dlls/kernel32/console.c: 1 entry
- dlls/kernel32/dosmem.c: 1 entry
- dlls/kernel32/error16.c: 1 entry
- dlls/kernel32/file.c: 1 entry
- dlls/kernel32/file16.c: 1 entry
- dlls/kernel32/global16.c: 1 entry
- dlls/kernel32/instr.c: 1 entry
- dlls/kernel32/kernel16.c: 2 entries
- dlls/kernel32/kernel16_private.h: 1 entry
- dlls/kernel32/kernel_main.c: 2 entries
- dlls/kernel32/local16.c: 2 entries
- dlls/kernel32/module.c: 1 entry
- dlls/kernel32/ne_module.c: 2 entries
- dlls/kernel32/ne_segment.c: 2 entries
- dlls/kernel32/process.c: 2 entries
- dlls/kernel32/registry16.c: 1 entry
- dlls/kernel32/relay16.c: 1 entry
- dlls/kernel32/resource.c: 1 entry
- dlls/kernel32/resource16.c: 3 entries
- dlls/kernel32/selector.c: 1 entry
- dlls/kernel32/snoop16.c: 1 entry
- dlls/kernel32/syslevel.c: 1 entry
- dlls/kernel32/task.c: 2 entries
- dlls/kernel32/thread.c: 1 entry
- dlls/kernel32/thunk.c: 2 entries
- dlls/kernel32/utthunk.c: 2 entries
- dlls/kernel32/wowthunk.c: 2 entries
- dlls/mciavi32/private_mciavi.h: 1 entry
- dlls/mcicda/mcicda.c: 1 entry
- dlls/mciqtz32/mciqtz.c: 1 entry
- dlls/mciseq/mcimidi.c: 1 entry
- dlls/mciwave/mciwave.c: 1 entry
- dlls/ole32/storage32.c: 1 entry
- dlls/olecli32/olecli_main.c: 2 entries
- dlls/shell32/control.c: 2 entries
- dlls/user32/bidi16.c: 1 entry
- dlls/user32/button.c: 1 entry
- dlls/user32/clipboard.c: 1 entry
- dlls/user32/combo.c: 1 entry
- dlls/user32/comm16.c: 1 entry
- dlls/user32/controls.h: 1 entry
- dlls/user32/cursoricon.c: 2 entries
- dlls/user32/defdlg.c: 1 entry
- dlls/user32/defwnd.c: 1 entry
- dlls/user32/desktop.c: 1 entry
- dlls/user32/dialog.c: 1 entry
- dlls/user32/dialog16.c: 2 entries
- dlls/user32/driver16.c: 3 entries
- dlls/user32/edit.c: 3 entries
- dlls/user32/exticon.c: 1 entry
- dlls/user32/hook16.c: 2 entries
- dlls/user32/listbox.c: 1 entry
- dlls/user32/mdi.c: 2 entries
- dlls/user32/menu.c: 3 entries
- dlls/user32/misc.c: 1 entry
- dlls/user32/msg16.c: 2 entries
- dlls/user32/network.c: 1 entry
- dlls/user32/property.c: 2 entries
- dlls/user32/scroll.c: 1 entry
- dlls/user32/spy.c: 1 entry
- dlls/user32/static.c: 1 entry
- dlls/user32/sysparams.c: 1 entry
- dlls/user32/user16.c: 2 entries
- dlls/user32/user_private.h: 1 entry
- dlls/user32/win.c: 3 entries
- dlls/user32/win.h: 1 entry
- dlls/user32/winproc.c: 3 entries
- dlls/user32/wnd16.c: 2 entries
- dlls/user32/wsprintf.c: 1 entry
- dlls/version/info.c: 1 entry
- dlls/version/resource.c: 1 entry
- dlls/w32skrnl/w32skernel.c: 1 entry
- dlls/winecrt0/exe16_entry.c: 2 entries
- dlls/wineesd.drv/audio.c: 1 entry
- dlls/wineps.drv/driver.c: 1 entry
- dlls/wineps.drv/escape.c: 2 entries
- dlls/wineps.drv/psdrv.h: 1 entry
- dlls/winex11.drv/brush.c: 1 entry
- dlls/winex11.drv/clipboard.c: 1 entry
- dlls/winex11.drv/mouse.c: 1 entry
- dlls/winex11.drv/x11font.h: 1 entry
- dlls/winmm/mci.c: 1 entry
- dlls/winmm/mci16.c: 2 entries
- dlls/winmm/message16.c: 2 entries
- dlls/winmm/mmio16.c: 2 entries
- dlls/winmm/mmsystem.c: 2 entries
- dlls/winmm/winemm16.h: 2 entries
- dlls/winspool.drv/info.c: 1 entry
- dlls/wow32/wow_main.c: 1 entry
Total for accessing a 16-bit include: 161
Do not implement or use a 16-bit function in a 32-bit file
=> grep "[_A-Za-z0-9]16("
- Excluded: dlls/winedos/.*, dlls/.*16/.*
- dlls/advapi32/advapi32.spec: 1 entry
- dlls/comdlg32/cdlg16.h: 16 entries
- dlls/comdlg32/colordlg16.c: 22 entries
- dlls/comdlg32/filedlg16.c: 22 entries
- dlls/comdlg32/finddlg16.c: 24 entries
- dlls/comdlg32/fontdlg.c: 2 entries
- dlls/comdlg32/fontdlg16.c: 18 entries
- dlls/comdlg32/printdlg.c: 2 entries
- dlls/comdlg32/printdlg16.c: 53 entries
- dlls/gdi32/bidi16.c: 19 entries
- dlls/gdi32/driver.c: 5 entries
- dlls/gdi32/enhmfdrv/graphics.c: 3 entries
- dlls/gdi32/env.c: 10 entries
- dlls/gdi32/gdi16.c: 310 entries
- dlls/gdi32/gdi32.spec: 5 entries
- dlls/gdi32/gdi_main.c: 1 entry
- dlls/gdi32/metafile16.c: 40 entries
- dlls/gdi32/printdrv16.c: 26 entries
- dlls/gdi32/tests/generated.c: 36 entries
- dlls/kernel32/atom16.c: 10 entries
- dlls/kernel32/error16.c: 5 entries
- dlls/kernel32/file16.c: 58 entries
- dlls/kernel32/global16.c: 55 entries
- dlls/kernel32/instr.c: 2 entries
- dlls/kernel32/kernel16.c: 47 entries
- dlls/kernel32/kernel16_private.h: 3 entries
- dlls/kernel32/kernel32.spec: 66 entries
- dlls/kernel32/kernel_main.c: 5 entries
- dlls/kernel32/krnl386.exe.spec: 5 entries
- dlls/kernel32/local16.c: 49 entries
- dlls/kernel32/module.c: 1 entry
- dlls/kernel32/ne_module.c: 80 entries
- dlls/kernel32/ne_segment.c: 25 entries
- dlls/kernel32/registry16.c: 12 entries
- dlls/kernel32/relay16.c: 2 entries
- dlls/kernel32/resource.c: 9 entries
- dlls/kernel32/resource16.c: 43 entries
- dlls/kernel32/selector.c: 22 entries
- dlls/kernel32/snoop16.c: 10 entries
- dlls/kernel32/syslevel.c: 1 entry
- dlls/kernel32/task.c: 85 entries
- dlls/kernel32/thunk.c: 55 entries
- dlls/kernel32/utthunk.c: 9 entries
- dlls/kernel32/wowthunk.c: 31 entries
- dlls/msacm32/pcmconverter.c: 39 entries
- dlls/msg711.acm/msg711.c: 6 entries
- dlls/msvidc32/msvideo1.c: 9 entries
- dlls/ntdll/cdrom.c: 13 entries
- dlls/ntdll/tests/generated.c: 4 entries
- dlls/ole32/storage32.c: 1 entry
- dlls/ole32/storage32.h: 2 entries
- dlls/shell32/control.c: 3 entries
- dlls/shell32/shell32.spec: 2 entries
- dlls/user32/bidi16.c: 21 entries
- dlls/user32/class.c: 3 entries
- dlls/user32/clipboard.c: 2 entries
- dlls/user32/comm16.c: 22 entries
- dlls/user32/cursoricon.c: 53 entries
- dlls/user32/defdlg.c: 5 entries
- dlls/user32/dialog16.c: 72 entries
- dlls/user32/driver16.c: 21 entries
- dlls/user32/edit.c: 33 entries
- dlls/user32/hook16.c: 40 entries
- dlls/user32/listbox.c: 3 entries
- dlls/user32/mdi.c: 1 entry
- dlls/user32/menu.c: 9 entries
- dlls/user32/message.c: 1 entry
- dlls/user32/msg16.c: 42 entries
- dlls/user32/network.c: 30 entries
- dlls/user32/property.c: 1 entry
- dlls/user32/spy.c: 6 entries
- dlls/user32/static.c: 1 entry
- dlls/user32/sysparams.c: 10 entries
- dlls/user32/user16.c: 203 entries
- dlls/user32/user32.spec: 10 entries
- dlls/user32/user_main.c: 2 entries
- dlls/user32/user_private.h: 7 entries
- dlls/user32/win.c: 13 entries
- dlls/user32/winpos.c: 1 entry
- dlls/user32/winproc.c: 116 entries
- dlls/user32/wnd16.c: 220 entries
- dlls/user32/wsprintf.c: 11 entries
- dlls/version/info.c: 16 entries
- dlls/winecrt0/exe16_entry.c: 4 entries
- dlls/winejack.drv/audio.c: 7 entries
- dlls/winenas.drv/audio.c: 1 entry
- dlls/wineps.drv/escape.c: 4 entries
- dlls/wineps.drv/graphics.c: 1 entry
- dlls/wineps.drv/init.c: 3 entries
- dlls/wineps.drv/ps.c: 15 entries
- dlls/winex11.drv/clipboard.c: 17 entries
- dlls/winex11.drv/codepage.c: 7 entries
- dlls/winex11.drv/dib.c: 4 entries
- dlls/winex11.drv/xfont.c: 2 entries
- dlls/winex11.drv/xrender.c: 1 entry
- dlls/winmm/driver.c: 4 entries
- dlls/winmm/lolvldrv.c: 10 entries
- dlls/winmm/mci.c: 5 entries
- dlls/winmm/mci16.c: 14 entries
- dlls/winmm/message16.c: 20 entries
- dlls/winmm/mmio16.c: 29 entries
- dlls/winmm/mmsystem.c: 202 entries
- dlls/winmm/winemm16.h: 13 entries
- dlls/winmm/winmm.c: 2 entries
- dlls/winspool.drv/info.c: 2 entries
- dlls/wintrust/asn.c: 4 entries
- dlls/wintrust/crypt.c: 3 entries
- dlls/wow32/wow32.spec: 11 entries
- dlls/wow32/wow_main.c: 22 entries
- Possible false positives:
- dlls/cabinet/cabinet.h: 1 entry
- dlls/cabinet/fdi.c: 20 entries
- dlls/d3d9/tests/visual.c: 2 entries
- dlls/dnsapi/ns_parse.c: 8 entries
- dlls/dsound/dsound_convert.c: 13 entries
- dlls/iccvid/iccvid.c: 5 entries
- dlls/imaadp32.acm/imaadp32.c: 27 entries
- dlls/msadp32.acm/msadp32.c: 21 entries
- dlls/wined3d/surface_base.c: 2 entries
- dlls/wined3d/wined3d_private.h: 1 entry
Total lines with "[_A-Za-z0-9]16(": 2866
