diff --git a/Make.rules.in b/Make.rules.in
index b4dec290bb8..454eb4112ba 100644
--- a/Make.rules.in
+++ b/Make.rules.in
@@ -238,7 +238,7 @@ Makefile: Makefile.in $(TOPSRCDIR)/configure
man: $(C_SRCS)
for i in $(C_SRCS); do $(C2MAN) -L -o $(TOPOBJDIR)/documentation/man3w -S3w $(DIVINCL) -D__WINE__ $(MANSPECS) $$i; done
-html: $(C_SRCS)
+doc-html: $(C_SRCS)
for i in $(C_SRCS); do $(C2MAN) -L -o $(TOPOBJDIR)/documentation/html -Th -iwindows.h $(DIVINCL) -D__WINE__ $(MANSPECS) $$i; done
# Rule for linting
diff --git a/documentation/.cvsignore b/documentation/.cvsignore
index d4bdec9b02b..b457b5d54a0 100644
--- a/documentation/.cvsignore
+++ b/documentation/.cvsignore
@@ -1,23 +1,13 @@
+*.aux
+*.dvi
+*.junk
+*.log
+*.tex
+DBTOHTML_OUTPUT_DIR*
Makefile
-wine.aux
+wine-doc
+wine-doc.pdf
+wine-doc.ps
+wine-doc.rtf
wine.conf.man
-wine.cp
-wine.cps
-wine.dvi
-wine.fn
-wine.fns
-wine.html
-wine.info
-wine.info-1
-wine.info-2
-wine.ky
-wine.log
wine.man
-wine.pg
-wine.texi
-wine.toc
-wine.tp
-wine.tps
-wine.vr
-wine.vrs
-wine_toc.html
diff --git a/documentation/Makefile.in b/documentation/Makefile.in
index bef83b3c602..43c2ea36b44 100644
--- a/documentation/Makefile.in
+++ b/documentation/Makefile.in
@@ -3,52 +3,52 @@ TOPOBJDIR = ..
SRCDIR = @srcdir@
VPATH = @srcdir@
MODULE = none
-
-INCLUDES = \
- AUTHORS \
- LICENSE \
- WARRANTY
-
-SOURCES = \
- wine.texinfo \
- $(INCLUDES)
-
-INFOFILES = \
- wine.info \
- wine.info-1 \
- wine.info-2
-
-HTMLFILES = \
- wine_toc.html \
- wine.html
-
-DVIFILES = wine.dvi
+BOOKNAME = wine-doc
EXTRASUBDIRS = samples status
-all: $(INFOFILES) $(DVIFILES) $(HTMLFILES)
+BOOK_SRCS = \
+ architecture.sgml \
+ bugs.sgml \
+ build.sgml \
+ compiling.sgml \
+ configuring.sgml \
+ consoles.sgml \
+ debugger.sgml \
+ debugging.sgml \
+ dlls.sgml \
+ documentation.sgml \
+ fonts.sgml \
+ i18n.sgml \
+ implementation.sgml \
+ installing.sgml \
+ opengl.sgml \
+ packaging.sgml \
+ patches.sgml \
+ porting.sgml \
+ printing.sgml \
+ registry.sgml \
+ running.sgml \
+ tools.sgml \
+ wine-doc.sgml
-info: $(INFOFILES)
+BOOK_TARGETS = \
+ $(BOOKNAME)/index.html \
+ $(BOOKNAME).pdf \
+ $(BOOKNAME).ps
-dvi: $(DVIFILES)
-
-html: $(HTMLFILES)
+all: $(BOOK_TARGETS)
@MAKE_RULES@
-$(INFOFILES): $(SOURCES)
- makeinfo $(SRCDIR)/wine.texinfo
+$(BOOKNAME)/index.html: $(BOOK_SRCS)
+ db2html $(BOOKNAME).sgml
-$(DVIFILES): $(SOURCES)
- texi2dvi $(SRCDIR)/wine.texinfo
+$(BOOKNAME).pdf: $(BOOK_SRCS)
+ db2pdf $(BOOKNAME).sgml
-$(HTMLFILES): $(SOURCES)
- makeinfo -E wine.texi $(SRCDIR)/wine.texinfo
- texi2html wine.texi
-
-$(INCLUDES):
- $(RM) $(INCLUDES)
- for i in $(INCLUDES); do $(LN_S) $(TOPSRCDIR)/$$i $$i || exit 1; done
+$(BOOKNAME).ps: $(BOOK_SRCS)
+ db2ps $(BOOKNAME).sgml
install::
$(INSTALL) -d $(mandir)/man$(prog_manext)
@@ -62,19 +62,8 @@ uninstall::
$(RM) $(mandir)/man$(prog_manext)/wine.$(prog_manext)
$(RM) $(mandir)/man$(conf_manext)/wine.conf.$(conf_manext)
-# Not done by default because of makeinfo bugs
-install_info: $(INFOFILES)
- [ -d $(infodir) ] || mkdir -p $(infodir)
- for i in $(INFOFILES); do $(INSTALL_DATA) $$i $(infodir)/$$i; done
-
-uninstall_info:
- for i in $(INFOFILES); do $(RM) $(infodir)/$$i; done
-
clean::
- $(RM) $(INFOFILES) $(DVIFILES) $(INCLUDES)
- $(RM) wine.aux wine.cp wine.cps wine.fn wine.fns wine.ky wine.log \
- wine.pg wine.toc wine.tp wine.tps wine.vr wine.vrs \
- wine.texi
- $(RM) -r man3w
+ $(RM) *.aux *.dvi *.tex *.log $(BOOKNAME).pdf $(BOOKNAME).ps
+ $(RM) -r $(BOOKNAME) html man3w *.junk DBTOHTML_OUTPUT_DIR*
### Dependencies:
diff --git a/documentation/README.documentation b/documentation/README.documentation
deleted file mode 100644
index 87af6909ed9..00000000000
--- a/documentation/README.documentation
+++ /dev/null
@@ -1,105 +0,0 @@
-
- Wine Documentation README
-
-
-Wine Man Page
-
- The man page for Wine is in this directory. It is installed by 'make
-install'.
-
-Wine Reference Manual
-
- Texinfo source for preliminary comprehensive documentation is in
-this directory. Use 'make info' in this directory to generate the GNU
-info version, 'make dvi' to generate the DVI version (hit 'r' to
-ignore errors), or 'make all' for both. It is not installed by
-default.
-
-Wine API documentation
-
- Do a 'make manpages' in the Wine toplevel directory to generate the
-API manpages from the Wine source, or 'make man' in any source
-subdirectory to generate manpages from only that directory. Only
-functions mentioned in Wine spec files will be documented; the
-specific .spec files checked are set by the MANSPECS variable in
-Make.rules. The manpages will be generated into
-[documentation/man3w]. For HTML formatted manpages, do 'make
-htmlpages' from the toplevel, or 'make html' from any
-subdirectory. HTML formatted pages are generated into
-[documentation/html]. You will need c2man as modified for Wine,
-available as source or binary from ftp://ftp.winehq.com/pub/wine/.
-The man pages are not installed by 'make install'.
-
-Other READMEs
-
- Other informational files are in this directory as well as scattered
-through the source tree.
-
-Other resources:
-
- Usenet: news:comp.emulators.ms-windows.wine
- WWW: http://www.winehq.com/
-
-
-Writing Wine API Documentation
-
-To improve the documentation of the Wine API, just add comments to the
-existing source. For example,
-
-/******************************************************************
- * CopyMetaFile32A (GDI32.23)
- *
- * Copies the metafile corresponding to hSrcMetaFile to either
- * a disk file, if a filename is given, or to a new memory based
- * metafile, if lpFileName is NULL.
- *
- * RETURNS
- *
- * Handle to metafile copy on success, NULL on failure.
- *
- * BUGS
- *
- * Copying to disk returns NULL even if successful.
- */
-HMETAFILE32 WINAPI CopyMetaFile32A(
- HMETAFILE32 hSrcMetaFile, /* handle of metafile to copy */
- LPCSTR lpFilename /* filename if copying to a file */
-) { ... }
-
-becomes, after processing with c2man and nroff -man,
-
-CopyMetaFileA(3w) CopyMetaFileA(3w)
-
-
-NAME
- CopyMetaFileA - CopyMetaFile32A (GDI32.23)
-
-SYNOPSIS
- HMETAFILE32 CopyMetaFileA
- (
- HMETAFILE32 hSrcMetaFile,
- LPCSTR lpFilename
- );
-
-PARAMETERS
- HMETAFILE32 hSrcMetaFile
- Handle of metafile to copy.
-
- LPCSTR lpFilename
- Filename if copying to a file.
-
-DESCRIPTION
- Copies the metafile corresponding to hSrcMetaFile to
- either a disk file, if a filename is given, or to a new
- memory based metafile, if lpFileName is NULL.
-
-RETURNS
- Handle to metafile copy on success, NULL on failure.
-
-BUGS
- Copying to disk returns NULL even if successful.
-
-SEE ALSO
- GetMetaFileA(3w), GetMetaFileW(3w), CopyMetaFileW(3w),
- PlayMetaFile(3w), SetMetaFileBitsEx(3w), GetMetaFileBit-
- sEx(3w)
diff --git a/documentation/accelerators b/documentation/accelerators
deleted file mode 100644
index df4adab32da..00000000000
--- a/documentation/accelerators
+++ /dev/null
@@ -1,38 +0,0 @@
-Some notes concerning accelerators.
-
-There are _three_ differently sized accelerator structures exposed to the
-user. The general layout is:
-
- BYTE fVirt;
- WORD key;
- WORD cmd;
-
-We now have three different appearances:
-
-- Accelerators in NE resources. These have a size of 5 byte and do not have
- any padding. This is also the internal layout of the global handle HACCEL
- (16 and 32) in Windows 95 and WINE. Exposed to the user as Win16 global
- handles HACCEL16 and HACCEL32 by the Win16/Win32 API.
-
-- Accelerators in PE resources. These have a size of 8 byte. Layout is:
- BYTE fVirt;
- BYTE pad0;
- WORD key;
- WORD cmd;
- WORD pad1;
- They are exposed to the user only by direct accessing PE resources.
-
-- Accelerators in the Win32 API. These have a size of 6 byte. Layout is:
- BYTE fVirt;
- BYTE pad0;
- WORD key;
- WORD cmd;
- These are exposed to the user by the CopyAcceleratorTable and
- CreateAcceleratorTable in the Win32 API.
-
-Why two types of accelerators in the Win32 API? We can only guess, but
-my best bet is that the Win32 resource compiler can/does not handle struct
-packing. Win32 ACCEL is defined using #pragma(2) for the compiler but without
-any packing for RC, so it will assume #pragma(4).
-
-Findings researched by Uwe Bonnes, Ulrich Weigand and Marcus Meissner.
diff --git a/documentation/architecture.sgml b/documentation/architecture.sgml
new file mode 100644
index 00000000000..1d940c4ecce
--- /dev/null
+++ b/documentation/architecture.sgml
@@ -0,0 +1,1032 @@
+
+ Overview
+ Brief overview of Wine's architecture...
+
+
+ Basic Overview
+
+ Written by Ove Kaaven
+
+
+ With the fundamental architecture of Wine stabilizing, and
+ people starting to think that we might soon be ready to
+ actually release this thing, it may be time to take a look at
+ how Wine actually works and operates.
+
+
+
+ Wine Overview
+
+ Wine is often used as a recursive acronym, standing for
+ "Wine Is Not an Emulator". Sometimes it is also known to be
+ used for "Windows Emulator". In a way, both meanings are
+ correct, only seen from different perspectives. The first
+ meaning says that Wine is not a virtual machine, it does not
+ emulate a CPU, and you are not supposed to install neither
+ Windows nor any Windows device drivers on top of it; rather,
+ Wine is an implementation of the Windows API, and can be
+ used as a library to port Windows applications to Unix. The
+ second meaning, obviously, is that to Windows binaries
+ (.exe files), Wine does look like
+ Windows, and emulates its behaviour and quirks rather
+ closely.
+
+
+ Note
+
+ The "Emulator" perspective should not be thought of as if
+ Wine is a typical inefficient emulation layer that means
+ Wine can't be anything but slow - the faithfulness to the
+ badly designed Windows API may of course impose a minor
+ overhead in some cases, but this is both balanced out by
+ the higher efficiency of the Unix platforms Wine runs on,
+ and that other possible abstraction libraries (like Motif,
+ GTK+, CORBA, etc) has a runtime overhead typically
+ comparable to Wine's.
+
+
+
+
+
+ Win16 and Win32
+
+ Win16 and Win32 applications have different requirements;
+ for example, Win16 apps expect cooperative multitasking
+ among themselves, and to exist in the same address space,
+ while Win32 apps except the complete opposite, i.e.
+ preemptive multitasking, and separate address spaces.
+
+
+ Wine now deals with this issue by launching a separate Wine
+ process for each Win32 process, but not for Win16 tasks.
+ Win16 tasks are now run as different intersynchronized
+ threads in the same Wine process; this Wine process is
+ commonly known as a WOW process,
+ referring to a similar mechanism used by Windows NT.
+ Synchronization between the Win16 tasks running in the WOW
+ process is normally done through the Win16 mutex - whenever
+ one of them is running, it holds the Win16 mutex, keeping
+ the others from running. When the task wishes to let the
+ other tasks run, the thread releases the Win16 mutex, and
+ one of the waiting threads will then acquire it and let its
+ task run.
+
+
+
+
+ The Wineserver
+
+ The Wineserver is among the most confusing concepts in Wine.
+ What is its function in Wine? Well, to be brief, it provides
+ Inter-Process Communication (IPC), synchronization, and
+ process/thread management. When the wineserver launches, it
+ creates a Unix socket for the current host in your home
+ directory's .wine subdirectory (or
+ wherever the WINEPREFIX environment
+ variable points) - all Wine processes launched later
+ connects to the wineserver using this socket. (If a
+ wineserver was not already running, the first Wine process
+ will start up the wineserver in auto-terminate mode (i.e.
+ the wineserver will then terminate itself once the last Wine
+ process has terminated).)
+
+
+ Every thread in each Wine process has its own request
+ buffer, which is shared with the wineserver. When a thread
+ needs to synchronize or communicate with any other thread or
+ process, it fills out its request buffer, then writes a
+ command code through the socket. The wineserver handles the
+ command as appropriate, while the client thread waits for a
+ reply. In some cases, like with the various
+ WaitFor synchronization primitives, the
+ server handles it by marking the client thread as waiting
+ and does not send it a reply before the wait condition has
+ been satisfied.
+
+
+ The wineserver itself is a single and separate process and
+ does not have its own threading - instead, it is built on
+ top of a large poll() loop that alerts
+ the wineserver whenever anything happens, such that a client
+ has sent a command, or a wait condition has been satisfied.
+ There is thus no danger of race conditions inside the
+ wineserver itself - it is often called upon to do operations
+ that look completely atomic to its clients.
+
+
+ Because the wineserver needs to manage processes, threads,
+ shared handles, synchronization, and any related issues, all
+ the client's Win32 objects are also managed by the
+ wineserver, and the clients must send requests to the
+ wineserver whenever they need to know any Win32 object
+ handle's associated Unix file descriptor (in which case the
+ wineserver duplicates the file descriptor, transmits it to
+ the client, and leaves to the client to close the duplicate
+ when it's done with it).
+
+
+
+
+ The Service Thread
+
+ The Wineserver cannot do everything that needs to be done
+ behind the application's back, considering that it's not
+ threaded (so cannot do anything that would block or take any
+ significant amount of time), nor does it share the address
+ space of its client threads. Thus, a special event loop also
+ exists in each Win32 process' own address space, but handled
+ like one of the process' own threads. This special thread is
+ called the service thread, and does
+ things that it wouldn't be appropriate for the wineserver to
+ do. For example, it can call the application's asynchronous
+ system timer callbacks every time a timer event is signalled
+ (the wineserver handles the signalling, of course).
+
+
+ One important function of the service thread is to support
+ the X11 driver's event loop. Whenever an event arrives from
+ the X server, the service thread wakes up and sees the
+ event, processes it, and posts messages into the
+ application's message queues as appropriate. But this
+ function is not unique - any number of Wine core components
+ can install their own handlers into the service thread as
+ necessary, whenever they need to do something independent of
+ the application's own event loop. (At the moment, this
+ includes, but is not limited to, multimedia timers, serial
+ comms, and winsock async selects.)
+
+
+ The implementation of the service thread is in
+ scheduler/services.c.
+
+
+
+
+ Relays, Thunks, and DLL descriptors
+
+ Loading a Windows binary into memory isn't that hard by
+ itself, the hard part is all those various DLLs and entry
+ points it imports and expects to be there and function as
+ expected; this is, obviously, what the entire Wine
+ implementation is all about. Wine contains a range of DLL
+ implementations. Each of the implemented (or
+ half-implemented) DLLs (which can be found in the
+ dlls/ directory) need to make
+ themselves known to the Wine core through a DLL descriptor.
+ These descriptors point to such things as the DLL's
+ resources and the entry point table.
+
+
+ The DLL descriptor and entry point table is generated by the
+ winebuild tool (previously just named
+ build), taking DLL specification files
+ with the extension .spec as input. The
+ output file contains a global constructor that automatically
+ registers the DLL's descriptor with the Wine core at
+ runtime.
+
+
+ Once an application module wants to import a DLL, Wine will
+ look through its list of registered DLLs (if it's not
+ registered, it will look for it on disk). (Failing that, it
+ will look for a real Windows .DLL file
+ to use, and look through its imports, etc.) To resolve the
+ module's imports, Wine looks through the entry point table
+ and finds if it's defined there. (If not, it'll emit the
+ error "No handler for ...", which, if the application called
+ the entry point, is a fatal error.)
+
+
+ Since Wine is 32-bit code itself, and if the compiler
+ supports Windows' calling convention, stdcall
+ (gcc does), Wine can resolve imports into
+ Win32 code by substituting the addresses of the Wine
+ handlers directly without any thunking layer in between.
+ This eliminates the overhead most people associate with
+ "emulation", and is what the applications expect anyway.
+
+
+ However, if the user specified --debugmsg
+ +relay, a thunk layer is inserted between the
+ application imports and the Wine handlers; this layer is
+ known as "relay" because all it does is print out the
+ arguments/return values (by using the argument lists in the
+ DLL descriptor's entry point table), then pass the call on,
+ but it's invaluable for debugging misbehaving calls into
+ Wine code. A similar mechanism also exists between Windows
+ DLLs - Wine can optionally insert thunk layers between them,
+ by using --debugmsg +snoop, but since
+ no DLL descriptor information exists for non-Wine DLLs, this
+ is less reliable and may lead to crashes.
+
+
+ For Win16 code, there is no way around thunking - Wine needs
+ to relay between 16-bit and 32-bit code. These thunks switch
+ between the app's 16-bit stack and Wine's 32-bit stack,
+ copies and converts arguments as appropriate, and handles
+ the Win16 mutex. Suffice to say that the kind of intricate
+ stack content juggling this results in, is not exactly
+ suitable study material for beginners.
+
+
+
+
+ Core and non-core DLLs
+
+
+
+
+ Wine must at least completely replace the "Big Three" DLLs
+ (KERNEL/KERNEL32, GDI/GDI32, and USER/USER32), which all
+ other DLLs are layered on top of. But since Wine is (for
+ various reasons) leaning towards the NT way of implementing
+ things, the NTDLL is another core DLL to be implemented in
+ Wine, and many KERNEL32 and ADVAPI32 features will be
+ implemented through the NTDLL. The wineserver and the
+ service thread provide the backbone for the implementation
+ of these core DLLs, and integration with the X11 driver
+ (which provides GDI/GDI32 and USER/USER32 functionality
+ along with the Windows standard controls). All non-core
+ DLLs, on the other hand, are expected to only use routines
+ exported by other DLLs (and none of these backbone services
+ directly), to keep the code base as tidy as possible. An
+ example of this is COMCTL32 (Common Controls), which should
+ only use standard GDI32- and USER32-exported routines.
+
+
+
+
+
+ Module Overview
+
+
+ written by (???)
+
+
+ (Extracted from wine/documentation/internals)
+
+
+
+ KERNEL Module
+
+ Needs some content...
+
+
+
+ GDI Module
+
+
+ X Windows System interface
+
+
+ The X libraries used to implement X clients (such as Wine)
+ do not work properly if multiple threads access the same
+ display concurrently. It is possible to compile the X
+ libraries to perform their own synchronization (initiated
+ by calling XInitThreads()). However,
+ Wine does not use this approach. Instead Wine performs its
+ own synchronization by putting a wrapper around every X
+ call that is used. This wrapper protects library access
+ with a critical section, and also arranges things so that
+ X libraries compiled without
+ (eg. with global errno variable) will
+ work with Wine.
+
+
+ To make this scheme work, all calls to X must use the
+ proper wrapper functions (or do their own synchronization
+ that is compatible with the wrappers). The wrapper for a
+ function X...() is calles
+ TSX...() (for "Thread Safe X ...").
+ So for example, instead of calling
+ XOpenDisplay() in the code,
+ TSXOpenDisplay() must be used.
+ Likewise, X header files that contain function prototypes
+ are wrapped, so that eg. "ts_xutil.h"
+ must be included rather than
+ <X11/Xutil.h>. It is important
+ that this scheme is used everywhere to avoid the
+ introduction of nondeterministic and hard-to-find errors
+ in Wine.
+
+
+ The code for the thread safe X wrappers is contained in
+ the tsx11/ directory and in
+ include/ts*.h. To use a new (ie. not
+ previously used) X function in Wine, a new wrapper must be
+ created. The wrappers are generated (semi-)automatically
+ from the X11R6 includes using the
+ tools/make_X11wrappers perl script.
+ In simple cases it should be enough to add the name of the
+ new function to the list in
+ tsx11/X11_calls; if this does not
+ work the wrapper must be added manually to the
+ make_X11wrappers script. See comments
+ in tsx11/X11_calls and
+ tools/make_X11wrappers for further
+ details.
+
+
+
+
+
+ USER Module
+
+
+ USER implements windowing and messaging subsystems. It also
+ contains code for common controls and for other
+ miscellaneous stuff (rectangles, clipboard, WNet, etc).
+ Wine USER code is located in windows/,
+ controls/, and
+ misc/ directories.
+
+
+
+ Windowing subsystem
+
+ windows/win.c
+ windows/winpos.c
+
+ Windows are arranged into parent/child hierarchy with one
+ common ancestor for all windows (desktop window). Each
+ window structure contains a pointer to the immediate
+ ancestor (parent window if WS_CHILD
+ style bit is set), a pointer to the sibling (returned by
+ GetWindow(..., GW_NEXT)), a pointer
+ to the owner window (set only for popup window if it was
+ created with valid hwndParent
+ parameter), and a pointer to the first child window
+ (GetWindow(.., GW_CHILD)). All popup
+ and non-child windows are therefore placed in the first
+ level of this hierarchy and their ancestor link
+ (wnd->parent) points to the desktop
+ window.
+
+
+ Desktop window - root window
+ | \ `-.
+ | \ `-.
+ popup -> wnd1 -> wnd2 - top level windows
+ | \ `-. `-.
+ | \ `-. `-.
+ child1 child2 -> child3 child4 - child windows
+
+
+ Horizontal arrows denote sibling relationship, vertical
+ lines - ancestor/child. To summarize, all windows with the
+ same immediate ancestor are sibling windows, all windows
+ which do not have desktop as their immediate ancestor are
+ child windows. Popup windows behave as topmost top-level
+ windows unless they are owned. In this case the only
+ requirement is that they must precede their owners in the
+ top-level sibling list (they are not topmost). Child
+ windows are confined to the client area of their parent
+ windows (client area is where window gets to do its own
+ drawing, non-client area consists of caption, menu,
+ borders, intrinsic scrollbars, and
+ minimize/maximize/close/help buttons).
+
+
+ Another fairly important concept is
+ z-order. It is derived from the
+ ancestor/child hierarchy and is used to determine
+ "above/below" relationship. For instance, in the example
+ above, z-order is
+
+
+child1->popup->child2->child3->wnd1->child4->wnd2->desktop.
+
+
+ Current active window ("foreground window" in Win32) is
+ moved to the front of z-order unless its top-level
+ ancestor owns popup windows.
+
+
+ All these issues are dealt with (or supposed to be) in
+ windows/winpos.c with
+ SetWindowPos() being the primary
+ interface to the window manager.
+
+
+ Wine specifics: in default and managed mode each top-level
+ window gets its own X counterpart with desktop window
+ being basically a fake stub. In desktop mode, however,
+ only desktop window has an X window associated with it.
+ Also, SetWindowPos() should
+ eventually be implemented via
+ Begin/End/DeferWindowPos() calls and
+ not the other way around.
+
+
+
+ Visible region, clipping region and update region
+
+ windows/dce.c
+ windows/winpos.c
+ windows/painting.c
+
+
+ ________________________
+ |_________ | A and B are child windows of C
+ | A |______ |
+ | | | |
+ |---------' | |
+ | | B | |
+ | | | |
+ | `------------' |
+ | C |
+ `------------------------'
+
+
+ Visible region determines which part of the window is
+ not obscured by other windows. If a window has the
+ WS_CLIPCHILDREN style then all
+ areas below its children are considered invisible.
+ Similarily, if the WS_CLIPSIBLINGS
+ bit is in effect then all areas obscured by its siblings
+ are invisible. Child windows are always clipped by the
+ boundaries of their parent windows.
+
+
+ B has a WS_CLIPSIBLINGS style:
+
+
+ . ______
+ : | |
+ | ,-----' |
+ | | B | - visible region of B
+ | | |
+ : `------------'
+
+
+ When the program requests a display
+ context (DC) for a window it can specify
+ an optional clipping region that further restricts the
+ area where the graphics output can appear. This area is
+ calculated as an intersection of the visible region and
+ a clipping region.
+
+
+ Program asked for a DC with a clipping region:
+
+
+ ______
+ ,--|--. | . ,--.
+ ,--+--' | | : _: |
+ | | B | | => | | | - DC region where the painting will
+ | | | | | | | be visible
+ `--|-----|---' : `----'
+ `-----'
+
+
+ When the window manager detects that some part of the window
+ became visible it adds this area to the update region of this
+ window and then generates WM_ERASEBKGND and
+ WM_PAINT messages. In addition,
+ WM_NCPAINT message is sent when the
+ uncovered area intersects a nonclient part of the window.
+ Application must reply to the WM_PAINT
+ message by calling the
+ BeginPaint()/EndPaint()
+ pair of functions. BeginPaint() returns a DC
+ that uses accumulated update region as a clipping region. This
+ operation cleans up invalidated area and the window will not
+ receive another WM_PAINT until the window
+ manager creates a new update region.
+
+
+ A was moved to the left:
+
+
+ ________________________ ... / C update region
+ |______ | : .___ /
+ | A |_________ | => | ...|___|..
+ | | | | | : | |
+ |------' | | | : '---'
+ | | B | | | : \
+ | | | | : \
+ | `------------' | B update region
+ | C |
+ `------------------------'
+
+
+ Windows maintains a display context cache consisting of
+ entries that include the DC itself, the window to which
+ it belongs, and an optional clipping region (visible
+ region is stored in the DC itself). When an API call
+ changes the state of the window tree, window manager has
+ to go through the DC cache to recalculate visible
+ regions for entries whose windows were involved in the
+ operation. DC entries (DCE) can be either private to the
+ window, or private to the window class, or shared
+ between all windows (Windows 3.1 limits the number of
+ shared DCEs to 5).
+
+
+
+
+
+ Messaging subsystem
+
+ windows/queue.c
+ windows/message.c
+
+
+ Each Windows task/thread has its own message queue - this
+ is where it gets messages from. Messages can be:
+
+
+
+ generated on the fly (WM_PAINT,
+ WM_NCPAINT,
+ WM_TIMER)
+
+
+
+
+ created by the system (hardware messages)
+
+
+
+
+ posted by other tasks/threads (PostMessage)
+
+
+
+
+ sent by other tasks/threads (SendMessage)
+
+
+
+
+
+ Message priority:
+
+
+ First the system looks for sent messages, then for posted
+ messages, then for hardware messages, then it checks if
+ the queue has the "dirty window" bit set, and, finally, it
+ checks for expired timers. See
+ windows/message.c.
+
+
+ From all these different types of messages, only posted
+ messages go directly into the private message queue.
+ System messages (even in Win95) are first collected in the
+ system message queue and then they either sit there until
+ Get/PeekMessage gets to process them
+ or, as in Win95, if system queue is getting clobbered, a
+ special thread ("raw input thread") assigns them to the
+ private queues. Sent messages are queued separately and
+ the sender sleeps until it gets a reply. Special messages
+ are generated on the fly depending on the window/queue
+ state. If the window update region is not empty, the
+ system sets the QS_PAINT bit in the
+ owning queue and eventually this window receives a
+ WM_PAINT message
+ (WM_NCPAINT too if the update region
+ intersects with the non-client area). A timer event is
+ raised when one of the queue timers expire. Depending on
+ the timer parameters DispatchMessage
+ either calls the callback function or the window
+ procedure. If there are no messages pending the
+ task/thread sleeps until messages appear.
+
+
+ There are several tricky moments (open for discussion) -
+
+
+
+
+
+ System message order has to be honored and messages
+ should be processed within correct task/thread
+ context. Therefore when Get/PeekMessage encounters
+ unassigned system message and this message appears not
+ to be for the current task/thread it should either
+ skip it (or get rid of it by moving it into the
+ private message queue of the target task/thread -
+ Win95, AFAIK) and look further or roll back and then
+ yield until this message gets processed when system
+ switches to the correct context (Win16). In the first
+ case we lose correct message ordering, in the second
+ case we have the infamous synchronous system message
+ queue. Here is a post to one of the OS/2 newsgroup I
+ found to be relevant:
+
+
+ by David Charlap
+
+ " Here's the problem in a nutshell, and there is no
+ good solution. Every possible solution creates a
+ different problem.
+
+
+ With a windowing system, events can go to many
+ different windows. Most are sent by applications or
+ by the OS when things relating to that window happen
+ (like repainting, timers, etc.)
+
+
+ Mouse input events go to the window you click on
+ (unless some window captures the mouse).
+
+
+ So far, no problem. Whenever an event happens, you
+ put a message on the target window's message queue.
+ Every process has a message queue. If the process
+ queue fills up, the messages back up onto the system
+ queue.
+
+
+ This is the first cause of apps hanging the GUI. If
+ an app doesn't handle messages and they back up into
+ the system queue, other apps can't get any more
+ messages. The reason is that the next message in
+ line can't go anywhere, and the system won't skip
+ over it.
+
+
+ This can be fixed by making apps have bigger private
+ message queues. The SIQ fix does this. PMQSIZE does
+ this for systems without the SIQ fix. Applications
+ can also request large queues on their own.
+
+
+ Another source of the problem, however, happens when
+ you include keyboard events. When you press a key,
+ there's no easy way to know what window the
+ keystroke message should be delivered to.
+
+
+ Most windowing systems use a concept known as
+ "focus". The window with focus gets all incoming
+ keyboard messages. Focus can be changed from window
+ to window by apps or by users clicking on winodws.
+
+
+ This is the second source of the problem. Suppose
+ window A has focus. You click on window B and start
+ typing before the window gets focus. Where should
+ the keystrokes go? On the one hand, they should go
+ to A until the focus actually changes to B. On the
+ other hand, you probably want the keystrokes to go
+ to B, since you clicked there first.
+
+
+ OS/2's solution is that when a focus-changing event
+ happens (like clicking on a window), OS/2 holds all
+ messages in the system queue until the focus change
+ actually happens. This way, subsequent keystrokes
+ go to the window you clicked on, even if it takes a
+ while for that window to get focus.
+
+
+ The downside is that if the window takes a real long
+ time to get focus (maybe it's not handling events,
+ or maybe the window losing focus isn't handling
+ events), everything backs up in the system queue and
+ the system appears hung.
+
+
+ There are a few solutions to this problem.
+
+
+ One is to make focus policy asynchronous. That is,
+ focus changing has absolutely nothing to do with the
+ keyboard. If you click on a window and start typing
+ before the focus actually changes, the keystrokes go
+ to the first window until focus changes, then they
+ go to the second. This is what X-windows does.
+
+
+ Another is what NT does. When focus changes,
+ keyboard events are held in the system message
+ queue, but other events are allowed through. This is
+ "asynchronous" because the messages in the system
+ queue are delivered to the application queues in a
+ different order from that with which they were
+ posted. If a bad app won't handle the "lose focus"
+ message, it's of no consequence - the app receiving
+ focus will get its "gain focus" message, and the
+ keystrokes will go to it.
+
+
+ The NT solution also takes care of the application
+ queue filling up problem. Since the system delivers
+ messages asynchronously, messages waiting in the
+ system queue will just sit there and the rest of the
+ messages will be delivered to their apps.
+
+
+ The OS/2 SIQ solution is this: When a
+ focus-changing event happens, in addition to
+ blocking further messages from the application
+ queues, a timer is started. When the timer goes
+ off, if the focus change has not yet happened, the
+ bad app has its focus taken away and all messages
+ targetted at that window are skipped. When the bad
+ app finally handles the focus change message, OS/2
+ will detect this and stop skipping its messages.
+
+
+
+ As for the pros and cons:
+
+
+ The X-windows solution is probably the easiest. The
+ problem is that users generally don't like having to
+ wait for the focus to change before they start
+ typing. On many occasions, you can type and the
+ characters end up in the wrong window because
+ something (usually heavy system load) is preventing
+ the focus change from happening in a timely manner.
+
+
+ The NT solution seems pretty nice, but making the
+ system message queue asynchronous can cause similar
+ problems to the X-windows problem. Since messages
+ can be delivered out of order, programs must not
+ assume that two messages posted in a particular
+ order will be delivered in that same order. This
+ can break legacy apps, but since Win32 always had an
+ asynchronous queue, it is fair to simply tell app
+ designers "don't do that". It's harder to tell app
+ designers something like that on OS/2 - they'll
+ complain "you changed the rules and our apps are
+ breaking."
+
+
+ The OS/2 solution's problem is that nothing happens
+ until you try to change window focus, and then wait
+ for the timeout. Until then, the bad app is not
+ detected and nothing is done."
+
+
+
+
+
+
+ Intertask/interthread
+ SendMessage. The system has to
+ inform the target queue about the forthcoming message,
+ then it has to carry out the context switch and wait
+ until the result is available. Win16 stores necessary
+ parameters in the queue structure and then calls
+ DirectedYield() function.
+ However, in Win32 there could be several messages
+ pending sent by preemptively executing threads, and in
+ this case SendMessage has to
+ build some sort of message queue for sent messages.
+ Another issue is what to do with messages sent to the
+ sender when it is blocked inside its own
+ SendMessage.
+
+
+
+
+
+
+
+
+ WINE/WINDOWS DLLs
+
+
+ Based upon various messages on wine-devel especially by Ulrich
+ Weigand. Adapted by Michele Petrovski and Klaas van Gend.
+
+
+
+ (Extracted from wine/documentation/dlls)
+
+
+
+ This document mainly deals with the status of current DLL
+ support by Wine. The Wine ini file currently supports
+ settings to change the load order of DLLs. The load order
+ depends on several issues, which results in different settings
+ for various DLLs.
+
+
+
+ Pros of Native DLLs
+
+
+ Native DLLs of course guarantee 100% compatibility for
+ routines they implement. For example, using the native USER
+ DLL would maintain a virtually perfect and Windows 95-like
+ look for window borders, dialog controls, and so on. Using
+ the built-in WINE version of this library, on the other
+ hand, would produce a display that does not precisely mimic
+ that of Windows 95. Such subtle differences can be
+ engendered in other important DLLs, such as the common
+ controls library COMMCTRL or the common dialogs library
+ COMMDLG, when built-in WINE DLLs outrank other types in load
+ order.
+
+
+ More significant, less aesthetically-oriented problems can
+ result if the built-in WINE version of the SHELL DLL is
+ loaded before the native version of this library. SHELL
+ contains routines such as those used by installer utilities
+ to create desktop shortcuts. Some installers might fail when
+ using WINE's built-in SHELL.
+
+
+
+
+ Cons of Native DLLs
+
+
+ Not every application performs better under native DLLs. If
+ a library tries to access features of the rest of the system
+ that are not fully implemented in Wine, the native DLL might
+ work much worse than the corresponding built-in one, if at
+ all. For example, the native Windows GDI library must be
+ paired with a Windows display driver, which of course is not
+ present under Intel Unix and WINE.
+
+
+ Finally, occassionally built-in WINE DLLs implement more
+ features than the corresponding native Windows DLLs.
+ Probably the most important example of such behavior is the
+ integration of Wine with X provided by WINE's built-in USER
+ DLL. Should the native Windows USER library take load-order
+ precedence, such features as the ability to use the
+ clipboard or drag-and- drop between Wine windows and X
+ windows will be lost.
+
+
+
+
+ Deciding Between Native and Built-In DLLs
+
+
+ Clearly, there is no one rule-of-thumb regarding which
+ load-order to use. So, you must become familiar with:
+
+
+
+
+ what specific DLLs do
+
+
+ which other DLLs or features a given library interacts with
+
+
+
+ and use this information to make a case-by-case decision.
+
+
+
+
+ Load Order for DLLs
+
+
+ Using the DLL sections from the wine configuration file, the
+ load order can be tweaked to a high degree. In general it is
+ advised not to change the settings of the configuration
+ file. The default configuration specifies the right load
+ order for the most important DLLs.
+
+
+ The default load order follows this algorithm: for all DLLs
+ which have a fully-functional Wine implementation, or where
+ the native DLL is known not to work, the built-in library
+ will be loaded first. In all other cases, the native DLL
+ takes load-order precedence.
+
+
+ The DefaultLoadOrder from the
+ [DllDefaults] section specifies for all DLLs which version
+ to try first. See manpage for explanation of the arguments.
+
+
+ The [DllOverrides] section deals with DLLs, which need a
+ different-from-default treatment.
+
+
+ The [DllPairs] section is for DLLs, which must be loaded in
+ pairs. In general, these are DLLs for either 16-bit or
+ 32-bit applications. In most cases in Windows, the 32-bit
+ version cannot be used without its 16-bit counterpart. For
+ WINE, it is customary that the 16-bit implementations rely
+ on the 32-bit implementations and cast the results back to
+ 16-bit arguments. Changing anything in this section is bound
+ to result in errors.
+
+
+ For the future, the Wine implementation of Windows DLL seems
+ to head towards unifying the 16 and 32 bit DLLs wherever
+ possible, resulting in larger DLLs. They are stored in the
+ dlls/ subdirectory using the 16-bit
+ name. For large DLLs, a split might be discussed.
+
+
+
+
+ Understanding What DLLs Do
+
+
+ The following list briefly describes each of the DLLs
+ commonly found in Windows whose load order may be modified
+ during the configuration and compilation of WINE.
+
+
+ (See also ./DEVELOPER-HINTS or the
+ dlls/ subdirectory to see which DLLs
+ are currently being rewritten for wine)
+
+
+
+
+ADVAPI32.DLL: 32-bit application advanced programming interfaces
+ like crypto, systeminfo, security and eventlogging
+AVIFILE.DLL: 32-bit application programming interfaces for the
+ Audio Video Interleave (AVI) Windows-specific
+ Microsoft audio-video standard
+COMMCTRL.DLL: 16-bit common controls
+COMCTL32.DLL: 32-bit common controls
+COMDLG32.DLL: 32-bit common dialogs
+COMMDLG.DLL: 16-bit common dialogs
+COMPOBJ.DLL: OLE 16- and 32-bit compatibility libraries
+CRTDLL.DLL: Microsoft C runtime
+DCIMAN.DLL: 16-bit
+DCIMAN32.DLL: 32-bit display controls
+DDEML.DLL: DDE messaging
+D3D*.DLL DirectX/Direct3D drawing libraries
+DDRAW.DLL: DirectX drawing libraries
+DINPUT.DLL: DirectX input libraries
+DISPLAY.DLL: Display libraries
+DPLAY.DLL, DPLAYX.DLL: DirectX playback libraries
+DSOUND.DLL: DirectX audio libraries
+GDI.DLL: 16-bit graphics driver interface
+GDI32.DLL: 32-bit graphics driver interface
+IMAGEHLP.DLL: 32-bit IMM API helper libraries (for PE-executables)
+IMM32.DLL: 32-bit IMM API
+IMGUTIL.DLL:
+KERNEL32.DLL 32-bit kernel DLL
+KEYBOARD.DLL: Keyboard drivers
+LZ32.DLL: 32-bit Lempel-Ziv or LZ file compression
+ used by the installshields (???).
+LZEXPAND.DLL: LZ file expansion; needed for Windows Setup
+MMSYSTEM.DLL: Core of the Windows multimedia system
+MOUSE.DLL: Mouse drivers
+MPR.DLL: 32-bit Windows network interface
+MSACM.DLL: Core of the Addressed Call Mode or ACM system
+MSACM32.DLL: Core of the 32-bit ACM system
+ Audio Compression Manager ???
+MSNET32.DLL 32-bit network APIs
+MSVFW32.DLL: 32-bit Windows video system
+MSVIDEO.DLL: 16-bit Windows video system
+OLE2.DLL: OLE 2.0 libraries
+OLE32.DLL: 32-bit OLE 2.0 components
+OLE2CONV.DLL: Import filter for graphics files
+OLE2DISP.DLL, OLE2NLS.DLL: OLE 2.1 16- and 32-bit interoperability
+OLE2PROX.DLL: Proxy server for OLE 2.0
+OLE2THK.DLL: Thunking for OLE 2.0
+OLEAUT32.DLL 32-bit OLE 2.0 automation
+OLECLI.DLL: 16-bit OLE client
+OLECLI32.DLL: 32-bit OLE client
+OLEDLG.DLL: OLE 2.0 user interface support
+OLESVR.DLL: 16-bit OLE server libraries
+OLESVR32.DLL: 32-bit OLE server libraries
+PSAPI.DLL: Proces Status API libraries
+RASAPI16.DLL: 16-bit Remote Access Services libraries
+RASAPI32.DLL: 32-bit Remote Access Services libraries
+SHELL.DLL: 16-bit Windows shell used by Setup
+SHELL32.DLL: 32-bit Windows shell (COM object?)
+TAPI/TAPI32/TAPIADDR: Telephone API (for Modems)
+W32SKRNL: Win32s Kernel ? (not in use for Win95 and up!)
+WIN32S16.DLL: Application compatibility for Win32s
+WIN87EM.DLL: 80387 math-emulation libraries
+WINASPI.DLL: Advanced SCSI Peripheral Interface or ASPI libraries
+WINDEBUG.DLL Windows debugger
+WINMM.DLL: Libraries for multimedia thunking
+WING.DLL: Libraries required to "draw" graphics
+WINSOCK.DLL: Sockets APIs
+WINSPOOL.DLL: Print spooler libraries
+WNASPI32.DLL: 32-bit ASPI libraries
+WSOCK32.DLL: 32-bit sockets APIs
+
+
+
+
+
+
diff --git a/documentation/aspi b/documentation/aspi
deleted file mode 100644
index 544d0b69547..00000000000
--- a/documentation/aspi
+++ /dev/null
@@ -1,92 +0,0 @@
-This file describes setting up the Windows ASPI interface.
-
-Warning/Warning/Warning!!!!!!
-=============================
-THIS MAY TRASH YOUR SYSTEM IF USED INCORRECTLY
-THIS MAY TRASH YOUR SYSTEM IF USED CORRECTLY
-
-Now that I have said that. ASPI is a direct link to SCSI devices from
-windows programs. ASPI just forwards the SCSI commands that programs send
-to it to the SCSI bus.
-
-If you use the wrong scsi device in your setup file, you can send
-completely bogus commands to the wrong device - An example would be
-formatting your hard drives (assuming the device gave you permission -
-if you're running as root, all bets are off).
-
-So please make sure that **all** SCSI devices that the program won't need
-have their permissions set as restricted as possible !
-
-Cookbook for setting up scanner: (At least how mine is to work)
-================================
-
-Windows requirements:
-=====================
-0) The scanner software needs to use the "Adaptec" compatible drivers
-(ASPI). At least with Mustek, they allow you the choice of using
-the builtin card or the "Adaptec (AHA)" compatible drivers. This will not
-work any other way.
-Software that accesses the scanner via a DOS ASPI driver (e.g. ASPI2DOS)
-is supported, too. [AM]
-
-1) You probably need a real windows install of the software to set the
-LUN's/SCSI id's up correctly. I'm not exactly sure.
-
-LINUX requirements:
-============================================================
-0) Your scsi card must be supported under linux. This will not work with
-an unknown scsi card.
-Even for cheap'n crappy "scanner only" controllers some special Linux drivers
-exist on the net.
-
-1) Compile generic scsi drivers into your kernel.
-
-2) Linux by default uses smaller scsi buffers than Windows. There is a
-kernel build define SG_BIG_BUFF (in sg.h) that is by default set too low.
-The SANE project recommends 130560 and this seems to work just fine. This
-does require a kernel rebuild.
-
-3) Make the devices for the scanner (generic scsi devices) - look at the scsi
-programming how-to for device numbering.
-
-4) I would recommend making the scanner device writable by a group.
-I made a group called "scanner" and added myself to it. Running as root
-increases your risk of sending bad scsi commands to the wrong device. With
-a regular user, you are better protected.
-
-5) Add a scsi device entry for your particular scanner to wine.conf.
-The format is [scsi cCtTdD] where C=controller, T=target, D=LUN
-
-ex. I set mine up as controller 0, Target 6, LUN 0.
-[scsi c0t6d0]
-Device=/dev/sgi
-
-Yours will vary with your particular SCSI setup.
-
-
-General Information:
-====================
-The mustek scanner I have was shipped with a package "ipplus". This
-program uses the TWAIN driver specification to access scanners.
-
- (TWAIN MANAGER)
-ipplus.exe <---> (TWAIN INTERFACE) <---> (TWAIN DATA SOURCE . ASPI) -> WINASPI
-
-NOTES/BUGS:
-===========
-The biggest is that it only works under linux at the moment.
-The ASPI code has only been tested with:
-- a Mustek 800SP with a Buslogic controller under Linux [BM]
-- a Siemens Nixdorf 9036 with Adaptec AVA-1505 under Linux
- accessed via DOSASPI.
- Note that I had color problems, though (barely readable result) [AM]
-- a Fujitsu M2513A MO drive (640MB) using generic scsi drivers.
- Formatting and ejecting worked perfectly.
- Thanks to Uwe Bonnes for access to the hardware ! [AM]
-
-I make no warranty to the aspi code. It makes my scanner work. Your devices
-may explode. I have no way of determining this. I take zero responsibility!
-
-
-Bruce Milner
-Additions by Andreas Mohr
diff --git a/documentation/bugreports b/documentation/bugreports
deleted file mode 100644
index 68a2080401b..00000000000
--- a/documentation/bugreports
+++ /dev/null
@@ -1,210 +0,0 @@
-How To Report A Bug
--------------------
-
-There are two ways for you to make a bug report. One uses a simple perl
-script, and is recommended if you don't want to spend a lot of time
-producing the report. It is designed for use by just about anyone, from
-the newest of newbies to advanced developers. You can also make a bug
-report the hard way -- advanced developers will probably prefer this.
-
-A. The Easy Way
-1) Your computer *must* have perl on it for this method to work. To
-find out if you have perl, run:
-which perl
-If it returns something like "/usr/bin/perl", you're in business.
-Otherwise, skip on down to "The Hard Way".
-If you aren't sure, just keep on going. When you try to run the script, it
-will become *very* apparent if you don't have perl.
-
-2) Change directory to /tools
-
-3) Type in "./bug_report.pl" and follow the directions.
-
-4) Post a message to the comp.emulators.ms-windows.wine newsgroup with the
-"Nice Formatted Report" attatched. If possible, upload the full debug
-output to a web/ftp server and provide the address in your message.
-
-
-B. The Hard Way:
-
-Some simple advice on making your bug report more useful (and thus more
-likely to get answered and fixed):
-
-1) Post as much information as possible.
-
- This means we need more information than a simple
- "MS Word crashes whenever I run it. Do you know why?"
- Include at least the following information:
-
- - Version of Wine you're using (run 'wine -v')
- - Operating system you're using, what distribution (if any), and what
- version
- - Compiler and version (run 'gcc -v')
- - Windows version, if installed
- - Program you're trying to run, its version number, and a URL for
- where the program can be obtained (if available)
- - Command line you used to start wine
- - Any other information you think may be relevant or helpful, such as
- X server version in case of X problems, libc version etc.
-
-2) Re-run the program with the -debugmsg +relay option
- (i.e., 'wine -debugmsg +relay sol.exe').
-
- If Wine crashes while running your program, it is important that we
- have this information to have a chance at figuring out what is causing
- the crash. This can put out quite a lot (several MB) of information,
- though, so it's best to output it to a file. When the Wine-dbg> prompt
- appears, type 'quit'.
-
- You might want to try +relay,+snoop instead of +relay, but please note
- that +snoop is pretty unstable and often will crash earlier than a
- simple +relay !
- If this is the case, then please use *only* +relay !!
- A bug report with a crash in +snoop code is useless in most cases !
-
- To get the trace output, use the following commands:
-
- all shells:
- echo quit|wine -debugmsg +relay [other_options] program_name >& filename.out; tail -n 100 filename.out > report_file
- (This will print wine's debug msgs only to the file and then
- auto-quit. It's probably a good idea to use this command, since wine
- prints out so many debug msgs that they flood the terminal, eating CPU.)
-
- tcsh and other csh-like shells:
-
- wine -debugmsg +relay [other_options] program_name |& tee filename.out
- tail -100 filename.out > report_file
-
- bash and other sh-like shells:
-
- wine -debugmsg +relay [other_options] program_name 2>&1 | tee filename.out
- tail -100 filename.out > report_file
-
- 'report_file' will now contain the last hundred lines of the debugging
- output, including the register dump and backtrace, which are the most
- important pieces of information. Please do not delete this part, even
- if you don't understand what it means.
-
-3) Post your report to the newsgroup comp.emulators.ms-windows.wine
-
- In your post, include all of the information from part 1), and insert
- the text from the output file in part 2). If you do this, your chances
- of receiving some sort of helpful response should be very good.
-
-4) Questions and comments
-
- If after reading this document there is something you couldn't figure
- out, or think could be explained better, or that should have been
- included, please post to comp.emulators.ms-windows.wine to let us know
- how this document can be improved.
-
-
-
-How to do regression testing using Cvs
--------------------------------------
-
-A problem that can happen sometimes is 'it used to work before,
-now it doesn't anymore...'. Here is a step by step procedure to
-try to pinpoint when the problem occured. This is *NOT* for casual
-users.
-
-1) get the 'full cvs' archive from winehq.
-This archive is the cvs tree but with the tags controling the versioning
-system. It's a big file (> 15 meg) with a name like full-cvs-
-(it's more than 100mb when uncompressed, you can't very well do this
-with small, old computers or slow Internet connections)
-
-2) untar it into a repository directory :
-
-cd /home/gerard
-tar -zxffull-cvs-2000-05-20.tar.gz
-mv wine repository
-
-3) extract a new destination directory
-This directory must not be in a subdirectory of the repository else
-cvs will think it's part of the repository and deny you an extraction
-in the repository :
-
-cd /home/gerard
-mv wine wine_current (-> this protects your current wine sandbox, if any)
-export CVSROOT=/home/gerard/repository
-cd /home/gerard
-cvs -d $CVSROOT checkout wine
-
-Note that it's not possible to do a checkout at a given date; you
-always do the checkout for the last date where the full-cvs-xxx snapshot
-was generated.
-
-4) you will have now in the ~/wine directory an image of the cvs tree,
-on the client side.
-Now update this image to the date you want :
-
-cd /home/gerard/wine
-cvs -d $CVSROOT update -D "1999-06-01"
-
-The date format is YYYY-MM-DD.
-
-Many messages will inform you that more recent files have been
-deleted to set back the client cvs tree to the date you asked,
-for example :
-
-cvs update: tsx11/ts_xf86dga2.c is no longer in the repository
-
-Cvs update is not limited to upgrade to a *newer* version as
-I have believed for far too long :-(
-
-5) Now proceed as for a normal update :
-
-./configure
-make depend && make
-
-When you have found the exact date when a bug was
-added to Cvs, use something like :
-
-cvs -d $CVSROOT diff -D "1999-07-10" -D "1999-07-12"
-
-to get all the differences between the last cvs version
-known to work and code that first displayed the misbehavior.
-
- [ I did not include flags for diff since they are in my .cvsrc file :
- cvs -z 3
- update -dPA
- diff -u
- ]
-
-From this diff file, particularly the file names, and the
-ChangeLog, it's usually possible to find the different individual
-patches that were done at this time.
-
-If any non-programmer reads this, the fasted method to get
-at the point where the problem occured is to use a binary
-search, that is, if the problem occured in 1999, start at mid-year,
-then is the problem is already here, back to 1st avril, if not,
-to 1st october, and so on.
-
-6) The next step is to start from the last working version
-and to dig the individual contributions from
-http://www.integrita.com/cgi-local/lwgate.pl/WINE-PATCHES/
-(where the Wine patches mailing list is archived)
-
-If the patch was done by the Wine maintainer or if it was
-sent directly to his mail address without going first through
-wine-patches, you are out of luck as you will never find the
-patch in the archive.
-If it is, it's often possible to apply the patches one by
-one to last working Cvs, compile and test. If you have saved
-the next candidate as /home/gerard/buggedpatch1.txt :
-
-cd /home/gerard/wine
-patch -p 0
+ Finding and Reporting Bugs
+
+
+ How To Report A Bug
+
+
+ written by Gerard Patel (???)
+
+
+ (Extracted from wine/documentation/bugreports)
+
+
+
+ There are two ways for you to make a bug report. One uses a
+ simple perl script, and is recommended if you don't want to
+ spend a lot of time producing the report. It is designed for
+ use by just about anyone, from the newest of newbies to
+ advanced developers. You can also make a bug report the hard
+ way -- advanced developers will probably prefer this.
+
+
+
+ The Easy Way
+
+
+
+ Your computer *must* have perl on it for this method to
+ work. To find out if you have perl, run which
+ perl. If it returns something like
+ /usr/bin/perl, you're in business.
+ Otherwise, skip on down to "The Hard Way". If you aren't
+ sure, just keep on going. When you try to run the
+ script, it will become *very* apparent if you don't have
+ perl.
+
+
+
+
+ Change directory to <dirs to
+ wine>/tools
+
+
+
+
+ Type in ./bug_report.pl and follow
+ the directions.
+
+
+
+
+ Post a message to the
+ comp.emulators.ms-windows.wine
+ newsgroup with the "Nice Formatted Report" attatched. If
+ possible, upload the full debug output to a web/ftp
+ server and provide the address in your message.
+
+
+
+
+
+
+ The Hard Way
+
+ Some simple advice on making your bug report more useful
+ (and thus more likely to get answered and fixed):
+
+
+
+ Post as much information as possible.
+
+ This means we need more information than a simple "MS
+ Word crashes whenever I run it. Do you know why?"
+ Include at least the following information:
+
+
+
+ Version of Wine you're using (run wine
+ -v)
+
+
+
+ Operating system you're using, what distribution (if
+ any), and what version
+
+
+
+ Compiler and version (run gcc -v)
+
+
+ Windows version, if installed
+
+
+
+ Program you're trying to run, its version number,
+ and a URL for where the program can be obtained (if
+ available)
+
+
+
+ Command line you used to start wine
+
+
+
+ Any other information you think may be relevant or
+ helpful, such as X server version in case of X
+ problems, libc version etc.
+
+
+
+
+
+
+ Re-run the program with the --debugmsg
+ +relay option (i.e., wine
+ --debugmsg +relay sol.exe).
+
+
+ If Wine crashes while running your program, it is
+ important that we have this information to have a chance
+ at figuring out what is causing the crash. This can put
+ out quite a lot (several MB) of information, though, so
+ it's best to output it to a file. When the Wine-dbg>
+ prompt appears, type quit.
+
+
+ You might want to try
+ +relay,+snoop instead of
+ +relay, but please note that
+ +snoop is pretty unstable and
+ often will crash earlier than a simple
+ +relay! If this is the case, then
+ please use *only* +relay!! A bug
+ report with a crash in +snoop
+ code is useless in most cases!
+
+
+ To get the trace output, use the following commands:
+
+
+
+
+ all shells:
+
+
+$ echo quit | wine -debugmsg +relay [other_options] program_name >& filename.out;
+$ tail -n 100 filename.out > report_file
+
+
+ (This will print wine's debug messages only to the file and then
+ auto-quit. It's probably a good idea to use this command, since wine
+ prints out so many debug msgs that they flood the terminal, eating CPU.)
+
+
+
+
+ tcsh and other csh-like shells:
+
+
+$ wine -debugmsg +relay [other_options] program_name |& tee filename.out;
+$ tail -100 filename.out > report_file
+
+
+
+
+ bash and other sh-like shells:
+
+
+$ wine -debugmsg +relay [other_options] program_name 2>&1 | tee filename.out;
+$ tail -100 filename.out > report_file
+
+
+
+
+
+ report_file will now contain the
+ last hundred lines of the debugging output, including
+ the register dump and backtrace, which are the most
+ important pieces of information. Please do not delete
+ this part, even if you don't understand what it means.
+
+
+
+
+ Post your report to the newsgroup
+ comp.emulators.ms-windows.wine
+
+
+ In your post, include all of the information from part
+ 1), and insert the text from the output file in part 2).
+ If you do this, your chances of receiving some sort of
+ helpful response should be very good.
+
+
+
+
+
+
+ Questions and comments
+
+ If after reading this document there is something you
+ couldn't figure out, or think could be explained better, or
+ that should have been included, please post to
+ comp.emulators.ms-windows.wine to
+ let us know how this document can be improved.
+
+
+
+
+
+
diff --git a/documentation/build.sgml b/documentation/build.sgml
new file mode 100644
index 00000000000..a9afd1a30e6
--- /dev/null
+++ b/documentation/build.sgml
@@ -0,0 +1,11 @@
+
+ The Wine Build System
+ How the Wine build system works, and how to tweak it...
+
+
+
diff --git a/documentation/cdrom-labels b/documentation/cdrom-labels
deleted file mode 100644
index ce3bc7c81f7..00000000000
--- a/documentation/cdrom-labels
+++ /dev/null
@@ -1,70 +0,0 @@
- Drive labels and serial numbers with wine
- -----------------------------------------
-
- Until now, your only possibility of specifying drive volume labels
-and serial numbers was to set them manually in the wine config file.
-By now, wine can read them directly from the device as well. This may be
-useful for many Win 9x games or for setup programs distributed on CD-ROMs
-that check for volume label.
-
-WHAT'S SUPPORTED ?
-
- * FAT systems (types 'hd' and 'floppy'): reads labels and serial num's.
- * Iso9660 ('cdrom'): reads labels only.
-
-HOW TO SET UP ?
-
- Reading labels and serial numbers just works automagically if
-you specify a 'Device=' line in the [Drive X] section in your wine.conf.
-Note that the device has to exist and must be accessible if you do this,
-though.
-If you don't do that, then you should give fixed 'Label=' or 'Serial=' entries
-in wine.conf, as Wine returns these entries instead if no device is given.
-If they don't exist, then Wine will return default values (label "Drive X"
-and serial 12345678).
-
-Now a seldom needed one:
-If you want to give a 'Device=' entry *only* for drive raw sector accesses, but
-not for reading the volume info from the device (i.e. you want a *fixed*,
-preconfigured label), you need to specify 'ReadVolInfo=0' to tell Wine to skip
-the volume reading.
-
-EXAMPLES
-
-*** Simple example of cdrom and floppy; labels will be read from the device on
-both cdrom and floppy; serial numbers on floppy only:
-
-[Drive A]
-Path=/mnt/floppy
-Type=floppy
-Device=/dev/fd0
-Filesystem=msdos
-
-[Drive R]
-Path=/mnt/cdrom
-Type=cdrom
-Device=/dev/hda1
-Filesystem=win95
-
-*** CD-ROM. We want to override the label:
-
-[Drive J]
-Path=/mnt/cdrom
-Type=cdrom
-Label=X234GCDSE
-; note that the device isn't really needed here as we have a fixed label
-Device=/dev/cdrom
-Filesystem=msdos
-
-TODO / OPEN ISSUES
-
- - The cdrom label can be read only if the data track of the disk resides in
-the first track and the cdrom is iso9660.
- - Better checking for FAT superblock (it now check's only one byte).
- - Support for labels/serial num's WRITING.
- - Can the label be longer than 11 chars? (iso9660 has 32 chars).
- - What about reading ext2 volume label? ....
-
-Petr Tomasek changes by: Andreas Mohr
-
-Nov 14 1999 Jan 25 2000
diff --git a/documentation/common_controls b/documentation/common_controls
deleted file mode 100644
index f7bf03bf458..00000000000
--- a/documentation/common_controls
+++ /dev/null
@@ -1,439 +0,0 @@
-
- COMMON CONTROLS
- their development status
- and their UNDOCUMENTED features and functions
------------------------------------------------------
-
-
-1. Introduction
----------------
- The information provided herein is based on the dll version 4.72 which
- is included in MS Internet Explorer 4.01.
-
- All information about common controls should be collected in this document.
-
- All Wine programmers are encouraged to add their knowledge to this document.
-
-
-2. General Information
-----------------------
- Further information about common controls can be found in the MS Platform SDK
- and the MS Internet Client SDK (most recent). Information from these SDK's
- will NOT be repeated here. Only information which can NOT be found in these
- SDK's will be collected here. Some information in the SDK's mentioned above
- is (intentionally???) WRONG. Corrections to wrong information will be
- collected here too.
-
-
-2.1 Structure sizes of different common control versions
---------------------------------------------------------
- The common controls have been continously improved in the past. Some of the
- orignal structures had to be extended and their size changed. Most of the
- common control structures include their size as the first parameter. If
- a control gets the wrong size in a message or function a failure is very
- likely to occur. To avoid this, MS defined new constants that reflect the
- structure size of older COMCTL32.DLL versions. The following list shows the
- structure size constants that are currently defined in the original
- COMCTL32.DLL.
- NOTE: Some stuctures are NOT defined in wine's COMCTL32 yet.
-
- HDITEM_V1_SIZE:
- The size of the HDITEM structure in version 4.00.
-
- LVCOLUMN_V1_SIZE:
- The size of the LVCOLUMN structure in version 4.00.
-
- LVHITTESTINFO_V1_SIZE:
- The size of the LVHITTESTINFO structure in version 4.00.
-
- LVITEM_V1_SIZE:
- The size of the LVITEM structure in version 4.00.
-
- NMLVCUSTOMDRAW_V3_SIZE:
- The size of the NMLVCUSTOMDRAW structure in version 4.70.
-
- NMTTDISPINFO_V1_SIZE:
- The size of the NMTTDISPINFO structure in version 4.00.
-
- NMTVCUSTOMDRAW_V3_SIZE:
- The size of the NMTVCUSTOMDRAW structure in version 4.70.
-
- PROPSHEETHEADER_V1_SIZE:
- The size of the PROPSHEETHEADER structure in version 4.00.
-
- PROPSHEETPAGE_V1_SIZE:
- The size of the PROPSHEETPAGE structure in version 4.00.
-
- REBARBANDINFO_V3_SIZE:
- The size of the REBARBANDINFO structure in version 4.70.
-
- TTTOOLINFO_V1_SIZE:
- The size of the TOOLINFO structure in version 4.00.
-
- TVINSERTSTRUCT_V1_SIZE:
- The size of the TVINSERTSTRUCT structure in version 4.00.
-
-
-3. Controls
------------
- This paragraph describes the development status of the common controls.
-
-
-3.1 Animation Control
----------------------
- Author:
- Dummy written by Eric Kohl.
-
- Status:
- Dummy control. No functionality.
-
- Notes:
- Author needed!! Any volunteers??
-
-
-3.2 Combo Box Ex Control
-------------------------
- Author:
- Dummy written by Eric Kohl.
-
- Status:
- Dummy control. No functionality.
-
- Notes:
- Author needed!! Any volunteers??
-
-
-3.3 Date and Time Picker Control
---------------------------------
- Author:
- Dummy written by Eric Kohl.
-
- Status:
- Dummy control. No functionality.
-
- Notes:
- Author needed!! Any volunteers??
-
-
-3.4 Drag List Box Control
--------------------------
- Author:
- Dummy written by Eric Kohl.
-
- Status:
- Dummy control. No functionality.
-
- Notes:
- Author needed!! Any volunteers??
-
-
-3.5 Flat Scroll Bar Control
----------------------------
- Author:
- Dummy written by Alex Priem.
-
- Status:
- Dummy control. No functionality.
-
- Notes:
- Author needed!! Any volunteers??
-
-
-3.6 Header Control
-------------------
- Author:
- Eric Kohl
-
- Status:
- Almost finished.
- Unicode notifications are not supported (WM_NOTIFYFORMAT).
- Order array not supported.
-
-
-3.7 Hot Key Control
--------------------
- Author:
- Dummy written by Eric Kohl.
-
- Status:
- Dummy control. No functionality.
-
- Notes:
- Author needed!! Any volunteers??
-
-
-3.8 Image List (no control)
----------------------------
- Author:
- Eric Kohl
-
- Status:
- Almost finished.
-
-
-3.9 IP Address Control
-----------------------
- Author:
- Dummy written by Eric Kohl.
- Alex Priem
-
- Status:
- Under construction.
-
-
-3.10 List View Control
-----------------------
- Author:
- Dummy written by Eric Kohl.
- Luc Tourangeau
- Koen Deforche
- Francis Beaudet and the "Corel-Team"
-
- Status:
- Under construction.
-
- Notes:
- Basic data structure with related messages are supported.
- No painting supported yet.
-
-
-3.11 Month Calendar Control
----------------------------
- Author:
- Dummy written by Eric Kohl.
-
- Status:
- Dummy control. No functionality.
-
- Notes:
- Author needed!! Any volunteers??
-
-
-3.12 Native font control
-------------------------
- Author:
- Dummy written by Eric Kohl.
-
- Status:
- Dummy control. No functionality.
-
- Notes:
- Author needed!! Any volunteers??
-
-
-3.13 Pager Control
-------------------
- Author:
- Dummy written by Eric Kohl.
-
- Status:
- Under construction.
- Many missing features.
-
- Notes:
- Author needed!! Any volunteers??
-
-
-3.14 Progress Bar Control
--------------------------
- Author:
- Original implementation by Dimitrie O. Paun.
- Fixes and improvements by Eric Kohl.
-
- Status:
- Finished!
-
-
-3.15 Property Sheet
--------------------
- Author:
- Anders Carlsson
- Francis Beaudet
-
- Status:
- Development in progress.
-
- Notes:
- Tab control must be implemented first.
-
-
-3.16 Rebar Control (Cool Bar)
------------------------------
- Author:
- Eric Kohl
-
- Status:
- Development in progress.
- Many bugs and missing features.
-
- Notes:
- Author needed!! Any volunteers??
-
-
-3.17 Status Bar Control
------------------------
- Author:
- Original implementation by Bruce Milner.
- Fixes and improvements by Eric Kohl.
-
- Status:
- Almost finished.
-
- Notes:
- Tooltip integration is almost complete.
-
-
-3.18 Tab Control
-----------------
- Author:
- Anders Carlsson
-
- Status:
- Development in progress.
-
-
-3.19 Toolbar Control
---------------------
- Author:
- Eric Kohl
-
- Status:
- Development in progress.
- Basic functionality is almost done. (dll version 4.0)
-
-
-
-3.20 Tooltip Control
---------------------
- Author:
- Eric Kohl
-
- Status:
- Almost finished.
-
- Notes:
- Unicode support is incomplete (WM_NOTIFYFORMAT).
-
-
-3.21 Trackbar Control
----------------------
- Author:
- Dummy written by Eric Kohl
- Alex Priem
-
- Status:
- Under construction.
-
-
-3.22 Tree View Control
-----------------------
- Author:
- Dummy written by Eric Kohl.
- Alex Priem
-
- Status:
- Under construction.
-
-
-3.23 Updown Control
--------------------
- Author:
- Original implementation by Dimitrie O. Paun.
- Some minor changes by Eric Kohl .
-
- Status:
- Unknown.
-
- Notes:
- Have a look at controls/updown.c for a list of bugs and missing
- features.
-
- The status is unknown, because I did not have a close look at this
- control. One test-program looked quite good, but in Win95's
- cdplayer.exe the control does not show at all.
-
- Any volunteers??
-
-
-4. Additional Information
--------------------------
-
- Has to be written...
-
-
-5. Undocumented features
-------------------------
-
- There are quite a lot of undocumented functions like:
- - DSA (Dynamic Storage Array) functions.
- - DPA (Dynamic Pointer Array) functions.
- - MRU ("Most Recently Used" List) functions.
- - other unknown functions.
-
- Have a look at relay32/comctl32.spec.
-
-
-5.1 Dymnamic Storage Array (DSA)
----------------------------------
- The DSA functions are used to store and manage dynamic arrays of fixed size
- memory blocks. They are used by TASKMAN.EXE, Explorer, IE4 and other
- Programs and DLL's that are "parts of the Windows Operating System".
- The implementation should be complete.
-
- Have a look at the source code to get more information.
-
-
-5.2 Dynamic Pointer Array (DPA)
-------------------------------------
- Similar to the DSA functions, but they just store pointers. They are used by
- Explorer, IE4 and other Programs and DLL's that are "parts of the Windows
- Operating System". The implementation should be complete.
-
- Have a look at the source code to get more information.
-
-
-5.3 "Most Recently Used" - List (MRU)
--------------------------------------
- Only stubs are implemented to keep Explorer from bailing out.
-
- No more information available at this time!
-
-
-5.4 MenuHelp
-------------
- Has to be written...
-
-
-5.5 GetEffectiveClientRect
---------------------------
- Has to be written...
-
-
-5.6 ShowHideMenuCtl
--------------------
- The official documentation provided by MS is incomplete.
-
- lpInfo:
- ...
- Both values of the first pair must be the handle to the applications main
- menu.
- ...
-
-
-5.7 Other undocumented functions
---------------------------------
- Several other undocumented functions are used by IE4.
-
- String functions:
- (will be written...)
-
-
-6. Epilogue
------------
- You see, much work has still to be done. If you are interested in writing
- a control send me an e-mail. If you like to fix bugs or add some
- functionality send an e-mail to the author of the control.
-
-
-Eric Kohl
-
diff --git a/documentation/compiling.sgml b/documentation/compiling.sgml
new file mode 100644
index 00000000000..747c2389d39
--- /dev/null
+++ b/documentation/compiling.sgml
@@ -0,0 +1,11 @@
+
+ Compiling Wine
+ How to compile wine, and problems that may arise...
+
+
+
diff --git a/documentation/config b/documentation/config
deleted file mode 100644
index 5597e2c23f1..00000000000
--- a/documentation/config
+++ /dev/null
@@ -1,463 +0,0 @@
-Copyright 1999 Adam Sacarny (magicbox@bestweb.net)
-1. WHAT IS THE WINE CONFIG FILE?
-
-The Wine config file stores various settings for Wine. These include:
- Drives and Information about them
- Directory Settings
- Port Settings
- The Wine look and feel
- Wine's DLL Usage
-
-2. HOW DO I MAKE ONE?
-
-This section will guide you through the process of making a config file. Take a
-look at the file /wine.ini
-It is organized by section.
-
-
- Name | Needed? | What it does
-----------------------------------------------------------------
-[Drive X] | yes | Sets up drives recognized by wine
-[wine] | yes | Settings for wine directories
-[DllDefaults] | recmd | Defaults for loading DLL's
-[DllPairs] | recmd | Sanity checkers for DLL's
-[DllOverrides] | recmd | Overides defaults for DLL loading
-[options] | no | No one seems to know
-[fonts] | yes | Font appearance and recognition
-[serialports] | no | COM ports seen by wine
-[parallelports] | no | LPT ports seen by wine
-[spooler] | no | Print spooling
-[ports] | no | Direct port access
-[spy] | no | What to do with certain debug messages
-[Registry] | no | Specifies locations of windows registry files
-[tweak.layout] | recmd | Appearance of wine
-[programs] | no | Programs to be run automatically
-[Console] | no | Console settings
-Recmd-Recommended
-2.1 THE [Drive X] SECTION
-It should be pretty self explanatory, but here is an in-depth tutorial about
-them.
-There are up to 6 lines for each drive in Wine.
-
-[Drive X]
-
-The above line begins the section for a drive whose letter is X.
-
-Path=/dir/to/path
-
-This path is where the drive will begin. When Wine is browsing in drive X, it
-will see the files that are in the directory "/dir/to/path". Don't forget to
-leave off the trailing slash!
-
-Type=floppy|hd|cdrom|network <--- the |'s mean Type=
-
-Sets up the type of drive Wine will see it as. Type must equal one of the four
-"floppy", "hd", "cdrom", or "network". They are self-explanatory.
-
-Label=blah
-
-Defines the drive label. Generally only needed for programs that look for a
-special CD-ROM. Info on finding the lable is in /documentation/cdrom-labels. The label may be up to 11 characters.
-
-Serial=deadbeef
-
-Tells Wine the serial number of the drive. A few programs with intense
-protection for pirating might need this, but otherwise don't use it. Up to 8
-characters and hexadecimal.
-
-Filesystem=msdos|win95|unix
-
-Sets up the way Wine looks at files on the drive.
-
- msdos -> Case insensitive filesystem. Alike to DOS and Windows 3.x.
- 8.3 is the maximum length of files (eightdot.123) - longer ones will be
- truncated. (NOTE: this is a very bad choice if you plan on running apps
- that use long filenames. win95 should work fine with apps that were
- designed to run under the msdos system. In other words, you might not
- want to use this.)
-
- win95 -> Case insensitive. Alike to Windows 9x/NT 4. This is the long
- filename filesystem you are probably used to working with. The
- filesystem of choice for most applications to be run under wine.
- PROBABLY THE ONE YOU WANT
-
- unix -> Case sensitive. This filesystem has almost no use (Windows apps
- expect case insensitive filenames). Try it if you dare, but win95 is a
- much better choice.
-
-Device=/dev/xx
-
-Use this ONLY for floppy and cdrom devices. Using it on Extended2 partitions can
-have dire results (When a windows app tries to do a lowlevel write, they do it
-in a FAT way -- FAT does not mix with Extended2).
-NOTE: This setting is not really important, almost all apps will have no
-problem if it remains unspecified. For CD-ROMs you might want to add it to get
-automatic label detection, though. If you are unsure about specifying device
-names, just leave out this setting for your drives.
-
-Here is a setup for Drive X, a generic hard drive:
-[Drive X]
-Path=/dos-a
-Type=hd
-Label=Hard Drive
-Filesystem=win95
-This is a setup for Drive X, a generic CD-ROM drive:
-[Drive X]
-Path=/dos-d
-Type=cdrom
-Label=Total Annihilation
-Filesystem=win95
-Device=/dev/hdc
-And here is a setup for Drive X, a generic floppy drive:
-[Drive X]
-Type=floppy
-Path=/mnt/floppy
-Label=Floppy Drive
-Serial=87654321
-Filesystem=win95
-Device=/dev/fd0
-
-2.2 THE [wine] SECTION
-
-The [wine] section of the configuration file contains information wine uses for
-directories. When specifying the directories for the settings, make them as they
-would appear in wine. If your drive C has a Path of /dos, and your windows
-directory is located in /dos/windows, Windows=c:\windows.
-
-Windows=c:\windows
-
-Sets up the windows directory. Make one if you don't have windows. NO TRAILING
-SLASH (NOT C:\windows\)!
-
-System=c:\windows\system
-
-Sets up where the windows system files are. Should reside in the directory used
-for the "Windows" setting. If you don't have windows then this is where the
-system files will go. NO TRAILING SLASH!
-
-Temp=c:\temp
-
-This should be the directory you want your temp files stored in. YOU MUST HAVE
-WRITE ACCESS TO IT.
-
-Path=c:\windows;c:\windows\system;c:\blanco
-
-Behaves like the PATH setting on unix boxes. When wine is run like "wine
-sol.exe", if sol.exe resides in a directory specified in the "Path" setting,
-wine will run it (Of course, if sol.exe resides in the current directory, wine
-will run that one). Make sure it always has your windows directory and system
-directory (For this setup, it must have c:\windows;c:\windows\system).
-
-SymbolTableFile=wine.sym
-
-Sets up the symbol table file for the wine debugger. You probably don't need to
-fiddle with this. May be useful if your wine is stripped.
-
-printer=off|on
-
-Tells wine whether to allow printer drivers and printing to work. Using these
-things are pretty alpha, so you might want to watch out. Some people might find
-it useful, however. If you're not planning on working on printing, don't even
-add this to your wine.ini (It probably isn't already in it). Check out the
-[spooler] and [parallelports] sections too.
-
-2.3 INTRODUCTION TO DLL SECTIONS
-
-There are a few things you will need to know before configuring the DLL sections
-in your wine configuration file.
-
- 2.3.1 WINDOWS DLL PAIRS
-
- Most windows DLL's have a win16 (Windows 3.x) and win32 (Windows 9x/NT)
- form. The combination of the win16 and win32 DLL versions are called
- the "DLL pair". This is a list of the most common pairs:
- Win16 | Win32 | Native*
- -----------------------------
- KERNEL | KERNEL32 | No!
- USER | USER32 | No!
- SHELL | SHELL32 | Yes
- GDI | GDI32 | No!
- COMMDLG | COMDLG32 | Yes
- VER | VERSION | Yes
- *-Is it possible to use native dll with wine?(See next section)
-
- 2.3.2 DIFFERENT FORMS OF DLL'S
-
- There are a few different forms of DLL's wine can load:
- native -> The DLL's that are included with windows. Many windows
- DLL's can be loaded in their native form. Many times these
- native versions work better than their non-Microsoft equivalent
- -- other times they don't.
- elfdll -> ELF encapsulated windows DLL's. This is currently
- experimental (Not working yet).
- so -> Native ELF libraries. Will not work yet.
- builtin -> The most common form of DLL loading. This is what you
- will use if the DLL is error-prone in native form (KERNEL for
- example), you don't have the native DLL, or you just want to be
- Microsoft-free.
-
-2.4 THE [DllDefaults] SECTION
-
-These settings provide wine's default handling of DLL loading.
-
-EXTRA_LD_LIBRARY_PATH=/dirs
-
-The directory specified here is appended to the normal search path for certain
-forms of DLL's (elfdll and .so).
-
-DefaultLoadOrder = native, elfdll, so, builtin
-
-This setting is a comma-delimited list of which order to attempt loading DLL's.
-If the first option fails, it will try the second, and so on. The order
-specified above is probably the best in most conditions.
-
-2.5 THE [DllPairs] SECTION
-
-This section is optional, but strongly recommended. If you try to use native
-SHELL32, but builtin SHELL, you could have some big problems (native and
-builtin/so/elfdll do certain things in different ways). Using different forms of
-a pair is a *very*, **very** bad idea. By specifying DLL pairs here, wine will
-print out a message if you use different forms of a pair.
-You shouldn't need to change anything in this section, the following should work
-fine in all cases:
-
-[DllPairs]
-kernel = kernel32
-gdi = gdi32
-user = user32
-commdlg = comdlg32
-commctrl= comctl32
-ver = version
-shell = shell32
-lzexpand= lz32
-winsock = wsock32
-
-2.6 THE [DllOverrides] SECTION
-
-The format for this section is the same for each line:
-
-{,,...} =