16-Bit Separation
Lots of Windows DLLs come in two flavors:
the old 16-bit format (NE or New Executable)
the newer 32/64-bit format (PE or 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 the 64-bit evolution of the project, the 16-bit code must be made optional in the Wine tree.
- one could think of a Wine CE project for example
- we still use some 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.36 on 2010-01-08
Move a file, that is used only for 16-Bit
Finished
Files to move: 0
Do not load a 16-Bit DLL from a 32-Bit DLL
=> grep "LoadLibrary16("
=> grep "GetModuleHandle16("
- dlls/winedos and 16-Bit dlls are excluded
Finished
Accessing a 16-Bit DLL: 0
Do not use a 16-Bit include in a 32-Bit file
=> grep "#include.*wownt32"
=> grep "#include.*wine/.*16.h"
=> grep "#include.*wine/winaspi"
- dlls/winedos and 16-Bit dlls are excluded
- dlls/comdlg32/cdlg.h: 1 include
- dlls/dbghelp/cpu_i386.c: 1 include
- dlls/dbghelp/cpu_ppc.c: 1 include
- dlls/dbghelp/cpu_x86_64.c: 1 include
- dlls/gdi32/dc.c: 1 include
- dlls/gdi32/dib.c: 1 include
- dlls/gdi32/driver.c: 1 include
- dlls/gdi32/font.c: 1 include
- dlls/gdi32/mapping.c: 1 include
- dlls/gdi32/mfdrv/objects.c: 2 includes
- dlls/gdi32/mfdrv/text.c: 1 include
- dlls/kernel32/kernel_main.c: 1 include
- dlls/mciavi32/private_mciavi.h: 1 include
- dlls/mcicda/mcicda.c: 1 include
- dlls/mciqtz32/mciqtz.c: 1 include
- dlls/mciseq/mcimidi.c: 1 include
- dlls/mciwave/mciwave.c: 1 include
- dlls/ole32/storage32.c: 1 include
- dlls/olecli32/olecli_main.c: 2 includes
- dlls/user32/cursoricon.c: 2 includes
- dlls/user32/exticon.c: 1 include
- dlls/user32/mdi.c: 1 include
- dlls/user32/misc.c: 1 include
- dlls/user32/sysparams.c: 1 include
- dlls/version/resource.c: 1 include
- dlls/w32skrnl/w32skernel.c: 1 include
- dlls/winecrt0/exe16_entry.c: 2 includes
- dlls/wineesd.drv/audio.c: 1 include
- dlls/wineps.drv/driver.c: 2 includes
- dlls/wineps.drv/escape.c: 1 include
- dlls/winex11.drv/brush.c: 1 include
- dlls/winex11.drv/mouse.c: 1 include
- dlls/winex11.drv/x11font.h: 1 include
- dlls/winmm/mci.c: 1 include
- dlls/winspool.drv/info.c: 1 include
- dlls/wow32/wow_main.c: 1 include
Accessing a 16-Bit include: 41
Do not implement or use a 16-Bit function in a 32-Bit file
=> grep "16("
- dlls/winedos and 16-Bit dlls are excluded
- dlls/comdlg32/fontdlg.c: 1 entry
- dlls/gdi32/driver.c: 5 entries
- dlls/kernel32/module.c: 3 entries
- dlls/shell32/control.c: 1 entry
- dlls/user32/class.c: 3 entries
- dlls/user32/mdi.c: 1 entry
- dlls/version/info.c: 3 entries
- dlls/winecrt0/exe16_entry.c: 4 entries
- dlls/winex11.drv/xfont.c: 2 entries
- dlls/winmm/driver.c: 1 entry
- dlls/winmm/mci.c: 1 entry
- dlls/winmm/winmm.c: 1 entry
- dlls/winspool.drv/info.c: 2 entries
- dlls/wow32/wow_main.c: 22 entries
Lines with "16(": 50
History
- Generated from wine-1.1.36 on 2010-01-08
- Files to move: 0
- Accessing a 16-Bit DLL: 0
- Accessing a 16-Bit include: 41
- Lines with "16(": 50
- Generated from wine-1.1.35 on 2009-12-22
- Files to move: 4
- Accessing a 16-Bit DLL: 24
- Accessing a 16-Bit include: 86
- Lines with "16(": 696
- Generated from wine-1.1.34 on 2009-12-07
- Files to move: 6
- Accessing a 16-Bit DLL: 25
- Accessing a 16-Bit include: 108
- Lines with "16(": 934
