
			Wine Documentation README


Wine Man Page

  The man page for the wine emulator 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)
