Difference between revisions of "Source Tree Structure"

From WineHQ Wiki
Jump to: navigation, search
(→‎Under include/: fix table)
(→‎Overall structure: add a couple of missing directories)
 
(4 intermediate revisions by 3 users not shown)
Line 1: Line 1:
Wine was originally organized by topic so each related area of the API had its own directory. Unfortunately this didn't work out too well as Windows itself is rather badly organized, especially in the older parts, so now the Wine source tree is loosely based on the original Windows modules.  Most of the source is concerned with implementing the Wine API, although there are also various tools, documentation, sample Winelib code, and code specific to the binary loader.  Note that several of the libraries listed here are "stubbed out", meaning they still need to be implemented.
+
Wine was originally organized by topic so each related area of the API had its own directory. Unfortunately this didn't work out too well as Windows itself is rather badly organized, especially in the older parts, so now the Wine source tree is closely based on Windows modules.  Most of the source is concerned with implementing the Wine API, although there are also various tools, documentation, and code specific to the binary loader.  Note that several of the libraries listed here are "stubbed out", meaning they still need to be implemented.
  
 
== Overall structure ==
 
== Overall structure ==
 
{|class="wikitable"
 
{|class="wikitable"
||dlls/         ||DLL reimplementations (kernel32, ntdll, user32, gdiplus, etc)  
+
|| dlls/
 +
|| Implementations of all native DLLs (kernel32, ntdll, user32, gdiplus, etc). This is the bulk of Wine's code.
 
|-
 
|-
||documentation/ ||some documentation
+
|| documentation/
 +
|| Translations of the README.
 
|-
 
|-
||include/       ||header files
+
|| fonts/
 +
|| Reimplementations of Windows fonts.
 
|-
 
|-
||libs/         ||libraries and a C preprocessor
+
|| include/
 +
|| Header files. This closely matches the PSDK.
 
|-
 
|-
||loader/   ||the Wine program loader
+
|| libs/
 +
|| Source code for libwine.
 
|-
 
|-
||programs/ ||several utility programs (winecfg, regedit, notepad, wordpad, etc); see [[List of Commands ]]
+
|| loader/
 +
|| The Wine loader and preloader, and some files which are installed in the initial wineprefix.
 
|-
 
|-
||server/   ||the [[wineserver]]
+
|| po/
 +
|| Translations.
 
|-
 
|-
||tools/   ||various tools used to build/check Wine  
+
|| programs/
 +
|| Executable programs supplied with Windows, including some Wine-specific programs. See also [[List of Commands]].
 +
|-
 +
|| server/
 +
|| The [[wineserver]].
 +
|-
 +
|| tools/
 +
|| Native tools used to build Wine.
 
|}
 
|}
  
 
== Under dlls/ ==
 
== Under dlls/ ==
 +
Each DLL is in its own directory, named after the DLL itself. The ".dll" extension is omitted, except for 16-bit DLLs. All 16-bit DLLs also have the suffix "16" appended to them.
 +
 
=== Notes on Core DLLs ===
 
=== Notes on Core DLLs ===
 
A few of the DLLs are particularly central to the Win32 API. As a result, some extra notes have been included for them:
 
A few of the DLLs are particularly central to the Win32 API. As a result, some extra notes have been included for them:
Line 27: Line 43:
 
* '''kernel32''' : mostly just forwards to '''ntdll''' in NT-based Windows, but in Windows 9x, most of the code from '''ntdll''' is here. The thinking behind this split was that NT would be able to support multiple modules for different operating system APIs, i.e. there could be a POSIX module, an OS/2 module, and '''kernel32''' would be the Win32 module. In practice Microsoft wiped out the competition so effectively that this abstraction was never really needed or used, so in today's NT-based, Windows systems, '''kernel32''' is mostly just a set of forwarders. In Wine, the migration of code from '''kernel32''' to '''ntdll''' isn't finished yet so we actually have a fairly even split.
 
* '''kernel32''' : mostly just forwards to '''ntdll''' in NT-based Windows, but in Windows 9x, most of the code from '''ntdll''' is here. The thinking behind this split was that NT would be able to support multiple modules for different operating system APIs, i.e. there could be a POSIX module, an OS/2 module, and '''kernel32''' would be the Win32 module. In practice Microsoft wiped out the competition so effectively that this abstraction was never really needed or used, so in today's NT-based, Windows systems, '''kernel32''' is mostly just a set of forwarders. In Wine, the migration of code from '''kernel32''' to '''ntdll''' isn't finished yet so we actually have a fairly even split.
  
* '''user32''' : userspace code responsible for most of the core windowing and messaging, as well as various other random things like the clipboard, networking, and a wsprintf implementation. Originally '''user32''' ''was'' the Windows API, until it grew large enough that having multiple DLLs made more sense, thus the rather odd and unrelated collection of code in this DLL. Basically, the very old mechanisms that date from the Windows 3.1 era are likely to be either in this DLL or '''kernel32'''.
+
* '''user32''' : userspace code responsible for most of the core windowing and messaging, as well as various other random things like the clipboard, networking, and a wsprintf implementation. Originally '''user32''' (actually, user.exe) ''was'' the Windows API, until it grew large enough that having multiple DLLs made more sense, thus the rather odd and unrelated collection of code in this DLL. Basically, the very old mechanisms that date from the Windows 3.1 era are likely to be either in this DLL or '''kernel32'''.
  
* '''ole32''', '''oleaut32''', '''rpcrt4''' : together implement COM and DCOM.
+
* '''ole32''', '''rpcrt4''' : together implement COM and DCOM.
  
=== 32-bit DLLs under dlls/ ===
+
== Under libs/ ==
{|class="wikitable"
 
||activeds/ ||Active Directory Service Interface
 
|-
 
||actxprxy/ ||ActiveX Interface Marshaling
 
|-
 
||advapi32/ ||Crypto, systeminfo, security, eventlogging
 
|-
 
||advpack/ ||Reads and verifies .INF files
 
|-
 
||amstream/ ||Multimedia Streams
 
|-
 
||apphelp/ ||Application Compatibility Database
 
|-
 
||atl/ ||Active Template Library
 
|-
 
||avicap32/ ||AVI capture window class
 
|-
 
||avifil32/ ||COM object to play AVI files
 
|-
 
||browseui/ ||Internet Explorer / Windows Explorer standard UI
 
|-
 
||cabinet/ ||Cabinet file interface
 
|-
 
||capi2032/ ||Wrapper library for CAPI4Linux access
 
|-
 
||cards/ ||Card graphics
 
|-
 
||cfgmgr32/ ||Config manager
 
|-
 
||clusapi/ ||Cluster API
 
|-
 
||comcat/ ||Component category manager
 
|-
 
||comctl32/ ||Common controls
 
|-
 
||comdlg32/ ||Common dialog boxes (both 16 & 32 bit)
 
|-
 
||compstui/ ||Common Property Sheet User Interface (Printer Dialogs)
 
|-
 
||credui/ ||Credentials User Interface
 
|-
 
||crtdll/ ||Old C runtime library
 
|-
 
||crypt32/ ||Cryptography
 
|-
 
||cryptdlg/ ||Common Certificate Dialogs (Cryptography)
 
|-
 
||cryptdll/ ||Cryptography Manager
 
|-
 
||ctapi32/ ||Wrapper library for Chipcard Terminal access
 
|-
 
||ctl3d32/ ||3D Effects for Common GUI Components
 
|-
 
||d3d10/ ||Direct3D (3D graphics)
 
|-
 
||d3d8/ ||Direct3D (3D graphics)
 
|-
 
||d3d9/ ||Direct3D (3D graphics)
 
|-
 
||d3dim/ ||Direct3D Immediate Mode
 
|-
 
||d3drm/ ||Direct3D Retained Mode
 
|-
 
||d3dx8/ ||Direct3D (3D graphics)
 
|-
 
||d3dx9_xx/ ||Direct3D (3D graphics, 12 versions from 24 upto 36)
 
|-
 
||d3dxof/ ||DirectX Files Functions
 
|-
 
||dbghelp/ ||Engine for symbol and module enumeration
 
|-
 
||dciman32/ ||DCI Manager (graphics)
 
|-
 
||ddraw/ ||DirectDraw (graphics)
 
|-
 
||ddrawex/ ||DirectDraw(graphics)
 
|-
 
||devenum/ ||Device enumeration (part of DirectShow)
 
|-
 
||dinput/ ||DirectInput (device input)
 
|-
 
||dinput8/ ||DirectInput (device input)
 
|-
 
||dmband/ ||DirectMusic Band
 
|-
 
||dmcompos/ ||DirectMusic Composer
 
|-
 
||dmime/ ||DirectMusic Interactive Engine
 
|-
 
||dmloader/ ||DirectMusic Loader
 
|-
 
||dmscript/ ||DirectMusic Scripting
 
|-
 
||dmstyle/ ||DirectMusic Style Engine
 
|-
 
||dmsynth/ ||DirectMusic Software Synthesizer
 
|-
 
||dmusic/ ||DirectMusic Core Services
 
|-
 
||dmusic32/ ||DirectMusic Legacy Port
 
|-
 
||dnsapi/ ||DNS support
 
|-
 
||dplay/ ||DirectPlay (networking)
 
|-
 
||dplayx/ ||DirectPlay (networking)
 
|-
 
||dpnaddr/ ||DirectPlay (networking)
 
|-
 
||dpnet/ ||DirectPlay (networking)
 
|-
 
||dpnhpast/ ||DirectPlay NAT Helper PAST
 
|-
 
||dpnlobby/ ||DirectPlay 8 lobby
 
|-
 
||dsound/ ||DirectSound (audio)
 
|-
 
||dssenh/ ||Enhanced DSS and Diffie-Hellman Crypt. Provider
 
|-
 
||dswave/ ||DirectMusic ''''''Wave
 
|-
 
||dwmapi/ ||Desktop Window Manager
 
|-
 
||dxdiagn/ ||DirectX Diagnostic Tool
 
|-
 
||faultrep/ ||Fault report handling
 
|-
 
||gdi32/ ||GDI (graphics device interface)
 
|-
 
||glu32/ ||OpenGL Utility library (graphics)
 
|-
 
||glut32/ ||OpenGL Utility Toolkit (removed in wine 0.9.27)
 
|-
 
||gphoto2.ds/ ||Contains libgphoto2 based TWAIN datasource driver
 
|-
 
||gpkcsp/ ||Gemplus (gemalto) Crypt. Service Provider
 
|-
 
||hal/ ||Hardware Abstraction Layer replacement
 
|-
 
||hhctrl.ocx/ ||HHCTRL OCX implementation
 
|-
 
||hid/ ||Hid User Library (Human Input Devices)
 
|-
 
||hlink/ ||Microsoft Hyperlink Library
 
|-
 
||hnetcfg/ ||Microsoft Firewall Manager
 
|-
 
||iccvid/ ||Radius Cinepak Video Decoder
 
|-
 
||icmp/ ||ICMP protocol (networking)
 
|-
 
||ifsmgr.vxd/ ||IFSMGR VxD implementation
 
|-
 
||imaadp32.acm/ ||IMA ADPCM Audio Codec
 
|-
 
||imagehlp/ ||PE (Portable Executable) Image Helper lib
 
|-
 
||imm32/ ||Input Method Manager
 
|-
 
||inetcomm/ ||Internet Messaging APIs
 
|-
 
||infosoft/ ||Wordbreaker and stemmer
 
|-
 
||initpki/ ||PKI Installation and Setup
 
|-
 
||inkobj/ ||Tablet PC functions
 
|-
 
||inseng/ ||Install engine
 
|-
 
||iphlpapi/ ||IP Helper API
 
|-
 
||itircl/ ||Infotech IR Local (HTML Help 1.x)
 
|-
 
||itss/ ||Infotech Structured Storage (HTML Help 1.x)
 
|-
 
||kernel32/ ||The Windows kernel
 
|-
 
||localspl/ ||Local Print Monitor (Printing)
 
|-
 
||localui/ ||Local Print Monitor User Interface (Printing)
 
|-
 
||lz32/ ||Lempel-Ziv compression/ decompression
 
|-
 
||mapi32/ ||Mail interface
 
|-
 
||mciavi32/ ||MCI video driver
 
|-
 
||mcicda/ ||MCI audio CD driver
 
|-
 
||mciseq/ ||MCI MIDI driver
 
|-
 
||mciwave/ ||MCI wave driver
 
|-
 
||midimap/ ||MIDI mapper
 
|-
 
||mlang/ ||Multi Language Support
 
|-
 
||mmdevldr.vxd/ ||MMDEVLDR VxD implementation
 
|-
 
||monodebg.vxd/ ||MONODEBG VxD implementation
 
|-
 
||mountmgr.sys// ||Mountpoint Manager service
 
|-
 
||mpr/ ||Multi-Protocol Router (networking)
 
|-
 
||mprapi/ ||Multi-Protocol Router Administration
 
|-
 
||msacm32/ ||Audio Compression Manager (multimedia)
 
|-
 
||msacm32.drv/ ||Audio mapper
 
|-
 
||msadp32.acm/ ||MS ADPCM Audio Codec
 
|-
 
||mscat/ ||Backend for the MakeCat command-line tool
 
|-
 
||mscms/ ||Color Management System
 
|-
 
||msdmo/ ||DirectX Media Objects
 
|-
 
||msftedit/ ||Rich text editing control (Version 4.1)
 
|-
 
||msg711.acm/ ||MS G711 Audio Codec (includes A-Law & MU-Law)
 
|-
 
||mshtml/ ||MS HTML component
 
|-
 
||mshtml.tlb/ ||MS HTML typelib
 
|-
 
||msi/ ||Microsoft Installer
 
|-
 
||msimg32/ ||Gradient and transparency (graphics)
 
|-
 
||msimtf/ ||Active IMM / IME Server DLL
 
|-
 
||msisys.ocx/ ||System information
 
|-
 
||msnet32/ ||Network interface
 
|-
 
||msrle32/ ||Video codecs
 
|-
 
||mssip32/ ||Microsoft Trust Subject Package
 
|-
 
||msvcirt/ ||C++ runtime library
 
|-
 
||msvcr71/ ||C runtime library 7.1
 
|-
 
||msvcrt/ ||C runtime library
 
|-
 
||msvcrt20/ ||C runtime library version 2.0
 
|-
 
||msvcrt40/ ||C runtime library version 4.0
 
|-
 
||msvcrtd/ ||C runtime library debugging
 
|-
 
||msvfw32/ ||16 bit video manager
 
|-
 
||msvidc32/ ||Microsoft Video-1 Decoder
 
|-
 
||mswsock/ ||Misc networking
 
|-
 
||msxml3/ ||MSXML Class Factory
 
|-
 
||netapi32/ ||Network interface
 
|-
 
||newdev/ ||New Hardware Device Library
 
|-
 
||ntdll/ ||NT implementation of kernel calls
 
|-
 
||ntdsapi/ ||NT Directory Service Provider
 
|-
 
||ntoskrnl.exe/ ||NT Kernelmode-API replacement
 
|-
 
||objsel/ ||Object Picker Dialog
 
|-
 
||odbc32/ ||Open DataBase Connectivity driver manager
 
|-
 
||odbccp32/ ||Open DataBase Connectivity driver installer
 
|-
 
||ole32/ ||32 bit OLE 2.0 libraries
 
|-
 
||oleacc/ ||OLE accessibility support
 
|-
 
||oleaut32/ ||32 bit OLE 2.0 automation
 
|-
 
||olecli32/ ||16 bit OLE client
 
|-
 
||oledlg/ ||OLE 2.0 user interface support
 
|-
 
||olepro32/ ||32 bit OLE 2.0 automation
 
|-
 
||olesvr32/ ||16 bit OLE server
 
|-
 
||olethk32/ ||16 bit and 32 bit OLE Thunk library
 
|-
 
||opengl32/ ||OpenGL implementation (graphics)
 
|-
 
||powrprof/ ||Power Management and Profiling
 
|-
 
||printui/ ||Printer User Interface
 
|-
 
||propsys/ ||Office Document Property Handler
 
|-
 
||psapi/ ||Process Status interface
 
|-
 
||qcap/ ||DirectShow runtime
 
|-
 
||qedit/ ||DirectShow Editing Services
 
|-
 
||qmgr/ ||Background Intelligent Transfer Service (BITS) interface
 
|-
 
||quartz/ ||DirectShow runtime
 
|-
 
||query/ ||Content Index Utility
 
|-
 
||rasapi32/ ||Remote Access Server interface
 
|-
 
||riched20/ ||Rich text editing control (Version 2.0 and 3.0)
 
|-
 
||riched32/ ||Rich text editing control
 
|-
 
||rpcrt4/ ||Remote Procedure Call runtime
 
|-
 
||rsabase/ ||RSA encryption
 
|-
 
||rsaenh/ ||Crypto API (DES, 3DES, RSA, etc.)
 
|-
 
||sane.ds/ ||Contains sane based TWAIN datasource driver
 
|-
 
||sccbase/ ||Crypt. Service Provider for Infinion SICRYPT Base Smart Cards
 
|-
 
||schannel/ ||TSL and SSL Security Provider Interface
 
|-
 
||secur32/ ||Secure Service Provider Interface
 
|-
 
||security/ ||Secure Service Provider Interface (old DLL name)
 
|-
 
||sensapi/ ||System Event Notification Service
 
|-
 
||serialui/ ||Serial port property pages
 
|-
 
||setupapi/ ||Setup interface
 
|-
 
||sfc/ ||System File Checker (Windows File Protection)
 
|-
 
||sfc_os/ ||System File Checker (Windows File Protection)
 
|-
 
||shdoclc/ ||Shell document resources
 
|-
 
||shdocvw/ ||Shell document object and control
 
|-
 
||shell32/ ||COM object implementing shell views
 
|-
 
||shfolder/ ||Shell folder service
 
|-
 
||shlwapi/ ||Shell Light-Weight interface
 
|-
 
||slbcsp/ ||Crypt. Service Provider for Schlumberger Smart Cards
 
|-
 
||slc/ ||Software Licensing Client DLL
 
|-
 
||snmpapi/ ||SNMP protocol interface (networking)
 
|-
 
||softpub/ ||Trust Policy Provider
 
|-
 
||spoolss/ ||Spooler Subsystem Library ("spooler" - Service)
 
|-
 
||stdole2.tlb/ ||OLE Automation typelib
 
|-
 
||stdole32.tlb/ ||Standard OLE typelib
 
|-
 
||sti/ ||Still Image service
 
|-
 
||t2embed/ ||Embedded Fonts
 
|-
 
||tapi32/ ||Telephone interface
 
|-
 
||twain_32/ ||TWAIN Imaging device communications
 
|-
 
||unicows/ ||Unicows replacement (Unicode layer for Win9x)
 
|-
 
||url/ ||Internet shortcut shell extension
 
|-
 
||urlmon/ ||URL Moni``ker allows binding to a URL
 
|-
 
||usbd.sys/ ||USB driver
 
|-
 
||user32/ ||Window management, standard controls, etc.
 
|-
 
||userenv/ ||User - Environment and Policy Management
 
|-
 
||usp10/ ||Uniscribe Script Processor
 
|-
 
||uxtheme/ ||Theme library
 
|-
 
||vcomp/ ||OpenMP run-time library
 
|-
 
||vcomp90/ ||OpenMP run-time library 9.0
 
|-
 
||vcomp100/ ||OpenMP run-time library 10.0
 
|-
 
||vdhcp.vxd/ ||VDHCP VxD implementation
 
|-
 
||vdmdbg/ ||Virtual DOS machine debug library
 
|-
 
||version/ ||File installation library
 
|-
 
||vmm.vxd/ ||VMM VxD implementation
 
|-
 
||vnbt.vxd/ ||VNBT VxD implementation
 
|-
 
||vnetbios.vxd/ ||VNETBIOS VxD implementation
 
|-
 
||vtdapi.vxd/ ||VTDAPI VxD implementation
 
|-
 
||vwin32.vxd/ ||VWIN32 VxD implementation
 
|-
 
||wbemprox/ ||Web-Based Enterprise Management (WBEM) and Common Information Model (CIM) implementation
 
|-
 
||wevtapi/ ||Event Log Functions
 
|-
 
||win32skrnl/ ||32-bit function access for 16-bit systems
 
|-
 
||winealsa.drv/ ||ALSA audio driver
 
|-
 
||wineaudioio.drv/ ||audioio audio driver
 
|-
 
||winecoreaudio.drv/ ||CoreAudio audio driver (MacOS)
 
|-
 
||winecrt0/ ||crt0 library
 
|-
 
||wined3d/ ||Wine internal Direct3D helper
 
|-
 
||winedos/ ||DOS features and BIOS calls (Wine specific)
 
|-
 
||wineesd.drv/ ||Esound audio driver
 
|-
 
||winejack.drv/ ||JACK audio server driver
 
|-
 
||winejoystick.drv/ ||Joystick driver
 
|-
 
||winemp3.acm/ ||Mpeg Layer 3 Audio Codec
 
|-
 
||winenas.drv/ ||NAS audio driver
 
|-
 
||wineoss.drv/ ||OSS audio driver
 
|-
 
||wineps.drv/ ||Postscript printer driver (Wine specific)
 
|-
 
||winex11.drv/ ||X11 display driver (Wine specific)
 
|-
 
||winhttp/ ||HTTP Services
 
|-
 
||wininet/ ||Internet extensions
 
|-
 
||winmm/ ||Multimedia (16 & 32 bit)
 
|-
 
||winnls32/ ||National Language Support
 
|-
 
||winscard/ ||Smart Card API
 
|-
 
||winspool.drv/ ||Printing & Print Spooler
 
|-
 
||wintab32/ ||Tablet device interface
 
|-
 
||wintrust/ ||Trust verification interface
 
|-
 
||wldap32/ ||LDAP support
 
|-
 
||wmi/ ||Windows Management Instrumentation
 
|-
 
||wnaspi32/ ||16 bit Advanced SCSI Peripheral Interface
 
|-
 
||wow32/ ||WOW subsystem
 
|-
 
||ws2_32/ ||Sockets 2.0 (networking)
 
|-
 
||wsock32/ ||Sockets 1.1 (networking)
 
|-
 
||wtsapi32/ ||Terminal Services
 
|}
 
=== 16-bit DLLs under dlls/ ===
 
 
{|class="wikitable"
 
{|class="wikitable"
||avifile.dll16/ ||
+
|| libs/port/
|-
+
|| various portability wrappers, including code pages and wide-character string functions
||commdlg.dll16/ ||
 
|-
 
||comm.drv16/ ||
 
|-
 
||compobj.dll16/ ||
 
|-
 
||ctl3d.dll16/ ||
 
|-
 
||ctl3dv2.dll16/ ||
 
|-
 
||ddeml.dll16/ ||
 
|-
 
||dispdib.dll16/ ||
 
|-
 
||display.drv16/ ||
 
 
|-
 
|-
||gdi.exe16/ ||  
+
|| libs/wine/
 +
|| core Wine-specific functions
 
|-
 
|-
||imm.dll16/ ||
+
|| libs/wpp/
|-
+
|| C preprocessor
||keyboard.drv16/ ||
 
|-
 
||krnl386.exe16/ ||
 
|-
 
||lzexpand.dll16/ ||
 
|-
 
||mmsystem.dll16/ ||
 
|-
 
||mouse.drv16/ ||
 
|-
 
||msacm.dll16/ ||
 
|-
 
||msvideo.dll16/ ||
 
|-
 
||ole2conv.dll16/ ||
 
|-
 
||ole2disp.dll16/ ||
 
|-
 
||ole2.dll16/ ||
 
|-
 
||ole2nls.dll16/ ||
 
|-
 
||ole2prox.dll16/ ||
 
|-
 
||ole2thk.dll16/ ||
 
|-
 
||olecli.dll16/ ||
 
|-
 
||olesvr.dll16/ ||
 
|-
 
||rasapi16.dll16/ ||
 
|-
 
||setupx.dll16/ ||
 
|-
 
||shell.dll16/ ||
 
|-
 
||sound.drv16/ ||
 
|-
 
||storage.dll16/ ||
 
|-
 
||stress.dll16/ ||
 
|-
 
||system.drv16/ ||
 
|-
 
||toolhelp.dll16/ ||
 
|-
 
||twain.dll16/ ||
 
|-
 
||typelib.dll16/ ||
 
|-
 
||user.exe16/ ||
 
|-
 
||ver.dll16/ ||
 
|-
 
||w32sys.dll16/ ||
 
|-
 
||win32s16.dll16/ ||
 
|-
 
||win87em.dll16/ ||
 
|-
 
||winaspi.dll16/ ||
 
|-
 
||windebug.dll16/ ||
 
|-
 
||wineps16.drv16/ ||
 
|-
 
||wing.dll16/ ||
 
|-
 
||winnls.dll16/ ||
 
|-
 
||winsock.dll16/ ||
 
|-
 
||wintab.dll16/ ||  
 
 
|}
 
|}
  
=== Support libraries under dlls/ ===
+
<!-- Fixme: This is becoming out of date just as I write it! Revisit when the PE conversion is done. -->
{|class="wikitable"
+
These together make up libwine, which is used for all Wine DLLs as well as for Winelib applications.
||dxerr8/ ||DirectX 8 error import lib
+
 
|-
+
== Under tools/ ==
||dxerr9/ ||DirectX 9 error import lib
 
|-
 
||dxguid/ ||DirectX UUID import lib
 
|-
 
||strmiids/ ||Exports class CLSIDs and interface IIDs
 
|-
 
||uuid/ ||Windows-compatible UUID import lib
 
|}
 
== Under libs/ ==
 
 
{|class="wikitable"
 
{|class="wikitable"
||libs/port/ ||portability library
+
|| tools/sfnt2fon/
 +
|| the .FON compiler
 
|-
 
|-
||libs/wine/ ||Wine bootstrap and unicode support library
+
|| tools/widl/
|-
+
|| the IDL compiler
||libs/wpp/ ||C preprocessor
 
|}
 
== Under tools/ ==
 
{|class="wikitable"
 
||tools/widl/ ||the IDL compiler  
 
 
|-
 
|-
||tools/winapi/ ||A Win32 API checker  
+
|| tools/winapi/
 +
|| A Win32 API checker  
 
|-
 
|-
||tools/winebuild/ ||Wine build tool
+
|| tools/winebuild/
 +
|| Wine DLL builder
 
|-
 
|-
||tools/winedump/ ||a .DLL dump utility
+
|| tools/winedump/
 +
|| dumps DLL headers and generates .spec files
 
|-
 
|-
||tools/winegcc/ ||a MinGW command line compatible gcc wrapper  
+
|| tools/winegcc/
 +
|| a MinGW-compatible gcc wrapper  
 
|-
 
|-
||tools/winemaker ||a Makefile generator for winelib  
+
|| tools/winemaker
 +
|| a Makefile generator for winelib
 
|-
 
|-
||tools/wmc/ ||the message compiler  
+
|| tools/wmc/
 +
|| the message compiler
 
|-
 
|-
||tools/wrc/ ||the resource compiler  
+
|| tools/wrc/
 +
|| the resource compiler  
 
|}
 
|}
 
== Under include/ ==
 
== Under include/ ==

Latest revision as of 15:44, 15 June 2019

Wine was originally organized by topic so each related area of the API had its own directory. Unfortunately this didn't work out too well as Windows itself is rather badly organized, especially in the older parts, so now the Wine source tree is closely based on Windows modules. Most of the source is concerned with implementing the Wine API, although there are also various tools, documentation, and code specific to the binary loader. Note that several of the libraries listed here are "stubbed out", meaning they still need to be implemented.

Overall structure

dlls/ Implementations of all native DLLs (kernel32, ntdll, user32, gdiplus, etc). This is the bulk of Wine's code.
documentation/ Translations of the README.
fonts/ Reimplementations of Windows fonts.
include/ Header files. This closely matches the PSDK.
libs/ Source code for libwine.
loader/ The Wine loader and preloader, and some files which are installed in the initial wineprefix.
po/ Translations.
programs/ Executable programs supplied with Windows, including some Wine-specific programs. See also List of Commands.
server/ The wineserver.
tools/ Native tools used to build Wine.

Under dlls/

Each DLL is in its own directory, named after the DLL itself. The ".dll" extension is omitted, except for 16-bit DLLs. All 16-bit DLLs also have the suffix "16" appended to them.

Notes on Core DLLs

A few of the DLLs are particularly central to the Win32 API. As a result, some extra notes have been included for them:

  • ntdll : forms the core of the Windows system. It first appeared in Windows NT, but didn't become part of the consumer-oriented versions of Windows (3.1/95/98/Me) until XP. In Windows, this has become little more than a userspace to kernelspace shim, and analogously in Wine, it's mostly an interface either to the wineserver or the underlying Unix kernel. It also contains things like the PE (EXE/DLL format) dynamic linker.
  • kernel32 : mostly just forwards to ntdll in NT-based Windows, but in Windows 9x, most of the code from ntdll is here. The thinking behind this split was that NT would be able to support multiple modules for different operating system APIs, i.e. there could be a POSIX module, an OS/2 module, and kernel32 would be the Win32 module. In practice Microsoft wiped out the competition so effectively that this abstraction was never really needed or used, so in today's NT-based, Windows systems, kernel32 is mostly just a set of forwarders. In Wine, the migration of code from kernel32 to ntdll isn't finished yet so we actually have a fairly even split.
  • user32 : userspace code responsible for most of the core windowing and messaging, as well as various other random things like the clipboard, networking, and a wsprintf implementation. Originally user32 (actually, user.exe) was the Windows API, until it grew large enough that having multiple DLLs made more sense, thus the rather odd and unrelated collection of code in this DLL. Basically, the very old mechanisms that date from the Windows 3.1 era are likely to be either in this DLL or kernel32.
  • ole32, rpcrt4 : together implement COM and DCOM.

Under libs/

libs/port/ various portability wrappers, including code pages and wide-character string functions
libs/wine/ core Wine-specific functions
libs/wpp/ C preprocessor

These together make up libwine, which is used for all Wine DLLs as well as for Winelib applications.

Under tools/

tools/sfnt2fon/ the .FON compiler
tools/widl/ the IDL compiler
tools/winapi/ A Win32 API checker
tools/winebuild/ Wine DLL builder
tools/winedump/ dumps DLL headers and generates .spec files
tools/winegcc/ a MinGW-compatible gcc wrapper
tools/winemaker a Makefile generator for winelib
tools/wmc/ the message compiler
tools/wrc/ the resource compiler

Under include/

include/ Windows standard includes
include/ddk/ Windows DDK compatible headers
include/msvcrt/ MSVC-compatible libc headers
include/wine/ Wine-specific headers