1. INTRODUCTION

Wine is a program that allows running MS-Windows programs under X11.
It consists of a program loader, that loads and executes an
MS-Windows binary, and of an emulation library that translates Windows
API calls to their Unix/X11 equivalent.

Wine is free software. See the file LICENSE for the details.
Basically, you can do anything with it, except claim that you wrote it.


2. COMPILATION

You must have one of:

	Linux version 0.99.13 or above
	NetBSD-current
	FreeBSD-current or FreeBSD 1.1

You also need to have libXpm installed on your system. The sources for
it are probably available on the ftp site where you got Wine. They can
also be found on ftp.x.org and all its mirror sites.

To build Wine, first do a "./Configure" and then a "make" (or "gmake"
if you're running *BSD).  The executable "wine" will be built.  "wine"
will load and run 16-bit Windows executables. 

To upgrade to a new release by using a patch file, first cd to the
top-level directory of the release (the one containing this README
file). Then do a "make clean", and patch the release with:

    gunzip -c patch-file | patch -p1

where "patch-file" is the name of the patch file (something like
Wine-yymmdd.diff.gz). You can then re-run "./Configure", and then
run "make". 


3. SETUP

Wine requires you to have a file /usr/local/etc/wine.conf (you can
supply a different name when configuring wine) or a file called .winerc
in your home directory.

The format of this config file is just like a Windows .ini file.
The file wine.ini contains a config file example.

Here's an explanation of each section:

* [drives]

format: <driveletter> = <rootdirectory>
default: none

This section is used to specify the root directory of each `dos'drive 
as Windows' applications require a dos/mswindows based diskdrive & 
directory scheme. 

If you mounted your dos-partition as /dos and installed Microsoft Windows 
in c:\windows than you should specify c=/dos in the drives section.

* [wine]

format: windows = <directory>
default: c:\windows

Used to specify an different windows directory.

format: system = <directory>
default: c:\windows\system

Used to specify an different system directory.

format: temp = <directory>
default: c:\temp

Used to specify a directory where Windows applications can store temporary
files.

format: path = <directories separated by semi-colons>
default: c:\windows;c:\windows\system

Used to specify the path which will be used to find executables and DLL's.

format: systemresources = <filename>
default: c:\temp

Used to specify the name of sysres.dll, a dll which is used by Wine itself.

* [serialports]

format: com[12345678] = <devicename>
default: none

Used to specify the devices which are used as com1 - com8.

* [parallelports]

format: lpt[12345678] = <devicename>
default: none

Used to specify the devices which are used as lpt1 - lpt8.

* [spy]

format: file = <filename or CON when logging to stdout>
default: none

used to specify the file which will be used as logfile.

format: exclude = <message names separated by semicolons>
default: none

Used to specify which messages will be excluded from the logfile.

format: include = <message names separated by semicolons>
default: none

Used to specify which messages will be included in the logfile.


4. RUNNING PROGRAMS

When invoking Wine, you must specify the entire path to the executable,
or a filename only.

For example: to run Windows' solitaire:

	wine sol		   (using the searchpath to locate the file)
	wine sol.exe

	wine c:\\windows\\sol.exe  (using a dosfilename)

	wine /usr/windows/sol.exe  (using a unixfilename)

Note: the path of the file will also be added to the path when
      a full name is supplied on the commandline.

Have a nice game of solitaire, but be careful.  Emulation isn't perfect.
So, occasionally it may crash.


5. GETTING MORE INFORMATION

The best place to get help or to report bugs is the Usenet newsgroup
comp.emulators.ms-windows.wine. The Wine FAQ is posted there every
month.

If you add something, or fix a bug, please send a patch to
wine-new@amscons.com for inclusion in the next release.

--
Alexandre Julliard
julliard@lamisun.epfl.ch
