0. LICENSE

You may without charge, royalty or other payment, copy and
distribute copies of this work and derivative works of this work
in source or binary form provided that: (1) 
you appropriately publish on each copy an appropriate copyright
notice; (2) faithfully reproduce all prior copyright notices
included in the original work (you may also add your own
copyright notice); and (3) agree to indemnify and hold all prior
authors, copyright holders and licensors of the work harmless
from and against all damages arising from use of the work.

You may distribute sources of derivative works of the work
provided that (1) (a) all source files of the original work that
have been modified, (b) all source files of the derivative work
that contain any party of the original work, and (c) all source
files of the derivative work that are necessary to compile, link
and run the derivative work without unresolved external calls and
with the same functionality of the original work ("Necessary
Sources") carry a prominent notice explaining the nature and date
of the modification and/or creation.  You are encouraged to make
the Necessary Sources available under this license in order to
further the development and acceptance of the work.

EXCEPT AS OTHERWISE RESTRICTED BY LAW, THIS WORK IS PROVIDED
WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES OF ANY KIND, INCLUDING
BUT NOT LIMITED TO, ANY IMPLIED WARRANTIES OF FITNESS FOR A
PARTICULAR PURPOSE, MERCHANTABILITY OR TITLE.  EXCEPT AS
OTHERWISE PROVIDED BY LAW, NO AUTHOR, COPYRIGHT HOLDER OR
LICENSOR SHALL BE LIABLE TO YOU FOR DAMAGES OF ANY KIND, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

1. COMPILATION:

You must have one of:

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

To build Wine, first do a "./Configure" and then a "make".  The
executable "wine" will be built.  "wine" will load and run 16-bit
Windows' executables. 



2. 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 homedirectory.

The formatstyle of this config file is just like a windows .ini file.

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 you 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.



3. 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, occassionally it will crash.



4. EXAMPLE CONFIGFILE

----------------------------------------------------------------------------
[drives]
a=/mnt/fd0
c=/dos
d=~/Wine

[wine]
windows=c:\windows
system=c:\windows\system
temp=c:\temp
path=c:\windows;c:\windows\system;c:\winapps\word\;c:\winapps\pctools
systemresources=./sysres.dll

[serialports]
com1=/dev/cua1
com2=/dev/cua1

[parallelports]
lpt1=/dev/lp0

[spy]
;File=CON
;File=spy.log
Exclude=WM_TIMER;WM_SETCURSOR;WM_MOUSEMOVE;WM_NCHITTEST;WM_NCACTIVATE;WM_GETDLGCODE;
Include=WM_COMMAND;

----------------------------------------------------------------------------


5. BUILD:

    The documentation for the build program is in the file build-spec.txt


6. FINALE:

Good luck,

	If you successfully add anything, please send me a copy.

Bob Amstadt
bob@amscons.com


7. WHAT'S NEW

WHAT'S NEW with Wine-940602: (see ChangeLog for details)
	- CLOCK.EXE runs.
	- ABORT command added to debugger.
	- Windows environment is now imported from the UNIX environment.
	- Use of save unders and backing store are now the default.  Resource
	  and command line options have been added to disable these things.
	- Assorted new driver functions
	- GetAsyncKeyState()
	- More metafile support
	- and many many bug fixes!

WHAT'S NEW with Wine-940524: (see ChangeLog for details)
	- New menu functions
	- EnumObjects()
	- and many many bug fixes!

WHAT'S NEW with Wine-940518: (see ChangeLog for details)
	- debugger improvements
	- bug fixes to get some dialog boxes working.
	- skeleton for passing MCI functions.
	- beginnings of metafile support.
	- and many many bug fixes!

WHAT'S NEW with Wine-940510: (see ChangeLog for details)
	- debugger improvements
	- mmsystem
	- ShellAbout() and AboutDlgProc()
	- and many many bug fixes!

WHAT'S NEW with Wine-940505: (see ChangeLog for details)
	- faster color_stretch()
	- SetSysMenu(), GetCursor(), GetDesktopWindow()
	- WSAGetXbyY() now non-blocking	
	- and many many bug fixes!

WHAT'S NEW with Wine-940420: (see ChangeLog for details)
	- new property functions
	- new listbox and combo box functions
	- GrayString() and CallGrayStringProc()
	- and many many bug fixes!

WHAT'S NEW with Wine-940412: (see ChangeLog for details)
	- menuing improvements
	- drawing performance improvements
	- beginnings of hooks
	- MDI maximizing and tiling
	- improvements in winsock implementation
	- and many many bug fixes!

WHAT'S NEW with Wine-940405: (see ChangeLog for details)
	- Mouse activation of menus working again
	- GetprocAddress()
	- SetDIBitsToDevice()
	- FindWindow()
	- int 10hm 25h and 26h
	- in, inb, out, outb emulation
	- and many many bug fixes!

WHAT'S NEW with Wine-940329: (see ChangeLog for details)
	- MDI: child windows can be created, activated and cascaded.
	- -depth option
	- support for dithered brushes
	- GetNearestColor(), RealizeDefaultPalette(), 
	  GetSystemPaletteEntries(), and SelectPalette()
	- System colors read from WIN.INI
	- Keyboard menu manipulation (mouse is temporarily broken)
	- GetFreeSystemResources()
	- and many many bug fixes!

WHAT'S NEW with Wine-940322: (see ChangeLog for details)
	- Speed improvements in bitmaps and mouse messages
	- More MDI support.  More to come next week...
	- and many many bug fixes!

WHAT'S NEW with Wine-940315: (see ChangeLog for details)
	- Beginnings of MDI support.  More to come next week...
	- Stress DLL
	- and many many bug fixes!

WHAT'S NEW with Wine-940309: (see ChangeLog for details)
	- New "exclude" and "include" filters for spy feature.  See sample
	  wine.ini for details.
	- -desktop and -name options (see ChangeLog)
	- GetFreeSpace() and CreateIcon()
	- and many many bug fixes!

WHAT'S NEW with Wine-940301: (see ChangeLog for details)
	- NEW Configure script to set compile time options!
	- Support for filesystems with short (less than 14 chars) filenames.
	- Clipboard functions!
	- and more...

WHAT'S NEW with Wine-940223: (see ChangeLog for details)
	- FreeBSD support
	- FloodFill()
	- Desktop window support
	- Menu fixes
	- and more...

WHAT'S NEW with Wine-940216: (see ChangeLog for details)
	- Many many bug fixes
	- Switched to using Imakefile's instead of Makefile's.
	- Lot's of changes for libwine.a

WHAT'S NEW with Wine-940209: (see ChangeLog for details)
	- Many many bug fixes
	- Minor directory structure reorganization
	- New GetModule*() functions.
	- WINSOCK DLL
	- First stab at Wine as a library

WHAT'S NEW with Wine-940201: (see ChangeLog for details)
	- Support for huge data structures.
	- FreeBSD support.
	- Many many bug fixes

WHAT'S NEW with version 0.8: (see ChangeLog for details)
	- Eliminated Xt-dependent code.  Thanks to Alexandre and Martin.
	- EnumWindows() and EnumChildWindows()
	- Activating and deactivating of windows.
	- More work on system menus.

WHAT'S NEW with version 0.7: (see ChangeLog for details)
	- Eliminated Xt-dependent code.  Thanks to Alexandre and Martin.
	- Other bug fixes.
	- IsWIndowEnabled() and EnableWindow() now implemented.
	- New command line options.

WHAT'S NEW with version 0.6: (see ChangeLog for details)
	- Working towards elimination of Xt-dependent code.  Thanks to
	  Alexandre and Martin.
	- Other bug fixes.
	- I added a rudimentary spy facility which can be turned
 	  on from the wine.ini file.  See the sample wine.ini
	  for details

WHAT'S NEW with version 0.5: (see ChangeLog for details)
	- Working towards elimination of Xt-dependent code.
	- StretchBlt()
	- GetClassName() & GetClassInfo()
	- Implemented loader relocation types 5 and 6.

WHAT'S NEW with version 0.4.14: (see ChangeLog for details)
	- Bug fixes and enhancements
	- Comm functions
	- Text caret functions

WHAT'S NEW with version 0.4.13: (see ChangeLog for details)
	- Bug fixes
	- GetCapture()
	- More keyboard handling
	- Polyline() and Polygon()

WHAT'S NEW with version 0.4.12: (see ChangeLog for details)
	- Bug fixes
	- New DOS file functions
	- Experimental Imakefiles

WHAT'S NEW with version 0.4.11: (see ChangeLog for details)
	- Bug fixes
	- New cursor functions
	- New file system handling
	- Atoms

WHAT'S NEW with version 0.4.10: (see ChangeLog for details)
	- Bug fixes
	- More scroll bar functions
	- More icon and cursor handling

WHAT'S NEW with version 0.4.9: (see ChangeLog for details)
	- Bug fixes
	- real MessageBox()
	- New resource functions
	- Icon functions
	- Selector manipulation functions
	- Catch()/Throw()

WHAT'S NEW with version 0.4.7: (see ChangeLog for details)
	- More dialog box functions
	- More DOS interrupts
	- NetBSD compatibility patches

WHAT'S NEW with version 0.4.5: (see ChangeLog for details)
	- Bug fixes
	- focus routines
	- dialog box functions
	- improvements to control windows

WHAT'S NEW with version 0.4.4: (see ChangeLog for details)
	- Bug fixes
	- New static control class
	- Preliminary listbox, combobox and scrollbar controls
	- System initialization file is now called "wine.ini", and
	  may be located in the user's current directory, the
	  user's home directory or any directory specified by
	  the WINEPATH environment variable.
	- The loader now searches the directories specified by the
	  WINEPATH environment variable for programs and DLLs.
	- Internal debugger now works on 386BSD.

WHAT'S NEW with version 0.4.3: (see ChangeLog for details)
	- Bug fixes
	- Resource loading now able to load DLL resources
	- Button control now based on GDI calls
	- Preliminary system color support
	- Miscellaneous window functions
	- Limited debugging facility (sometimes hangs)

WHAT'S NEW with version 0.4.2: (see ChangeLog for details)
	- Bug fixes
	- 32-bit callback functions allowed
	- .INI file handling
	- lstr* functions and ANSI<->OEM conversion functions.

WHAT'S NEW with version 0.4.1: (see ChangeLog for details)
	- Bug fixes
	- Memory usage changes.

WHAT'S NEW with version 0.4.0: (see ChangeLog for details)
	- Wine now compiles and runs under NetBSD.  Patches are
	  required for NetBSD.
	- Wine stat patches included.  Add "-DWINESTAT" to the definition
	  of COPTS in the main Makefile to activate.
	- Preliminary keyboard handling.
	- Button control window implemented.
	- many other new functions added.

WHAT'S NEW with version 0.3.1: (see ChangeLog for details)
	- LineDDA() completed
	- numerous bug fixes
	- INT 1Ah implemented
	- SOUND DLL implemented
	- More of WIN87EM DLL implemented
	- OpenFile() and friends implemented

WHAT'S NEW with version 0.3.0: (see ChangeLog for details)
	- Mouse capture
	- Text justification and underlining
	- Clipping
	- LoadBitmap() completed
	- Code generated by the Borland compiler should now work

WHAT'S NEW with version 0.2.8: (see ChangeLog for details)
	- Text functions from Alexandre
	- INT 21h from Eric
	- Menu improvements from David
	- Bug fixes and GetProcAddress() stub from me

WHAT'S NEW with version 0.2.7: (see ChangeLog for details)
    - sol.exe gets further.  I did some debugging and now solitaire
      stops when it tries to call GetTextExtent().  Any volunteers?
    - Many DC updates from Alexandre.
    - Menu updates to support underlining characters from David Metcalfe.

WHAT'S NEW with version 0.2.6: (see ChangeLog for details)
    - More region updates from Alexandre

WHAT'S NEW with version 0.2.5: (see ChangeLog for details)
    - Regions implemented by Alexandre
    - More menuing code from me

WHAT'S NEW with version 0.2.4: (see ChangeLog for details)
    - Many improvements to GDI from Alexandre
    - Many improvements to menu handling by me.

WHAT'S NEW with version 0.2.3: (see ChangeLog for details)
    - Bug fixes with SendMessage() and PostMessage()
    - Preliminary menu support

WHAT'S NEW with version 0.2.2: (see ChangeLog for details)
    - Misc bug fixes
    - More bitmap code
    - Timers
    - Memory DC's

WHAT'S NEW with version 0.2.1:
    - I have placed things into sub-directories.  The organization is
      not finalized.  I imagine that the directory structure will
      change as is necessary.  Files in the ./misc directory need
      to be split apart and placed in apropriate directories.
    - Tons of code from Alexandre.  He has constructed the framework
      for handling GDI objects.  He has also provided code for DCEs.
    - Local heap functions have been completed.
    - Bug fixes in global.c and win.c
    - New function GlobalQuickAlloc() combines GlobalAlloc() and
      GlobalLock() into a single function call.
    - New patch kit for Linux 0.99 pl11 kernel.  Thanks to Linus
      who has graciously included our patches into the ALPHA patch
      release cycle.

WHAT'S NEW with version 0.2.0:
    - Alexandre Julliard has provided a replacement for the Tcl code.
      The new code uses Xlib and Xt directly with no intervening
      interpretted language.  This should reduce the learning
      curve for casual hackers.
    - I changed all GLOBAL_ names to Global.

WHAT'S NEW with version 0.1.1:
    - I have completed global memory allocation, but I don't like it.
      It is not 100% compatible with Windows.  I need some more kernel
      modifications for 100% compatibility.
    - Alexandre Julliard has provided written better emulation for
      the Windows message queue.

WHAT'S NEW with version 0.1.0:
    - Latest patches from Alexandre Julliard.
    - minor bug fix in if1632.S

WHAT'S NEW with version 0.0.5:
    - Patches from Alexandre Julliard.  Some integration with Tcl.
    - Generic interface for callback procedures.  This will allow
      callbacks into DLLs.
    - MakeProcInstance() has been implemented but untested.

WHAT'S NEW with version 0.0.4:
    - Eric Youngdale modified wine.c and selector.c to allow loading
      of Windows DLLs.
    - Added global memory allocation routines (GlobalAlloc, GlobalFree,
      and GlobalLock)
    - Bitmap resource loading into global memory.

WHAT'S NEW with version 0.0.3:
    - Fixed bug with sector sizes.
    - Registers at program startup are now set correctly.
    - Segment fixups for relocatable-segment internal entry points.
    - Fixed bug in DOS PSP structure.
    - Some resource loading is done.
    - Added "return" ordinal type to build program.
    - Added comment capability to build program.

WHAT'S NEW with version 0.0.2:

    - Again thanks to Eric Youngdale for some very useful comments.
    - The Windows startup code created by Micrsoft C 7.0 now runs 
      to completion.
    - Added a new patch to the kernel to increase the usable size of
      the ldt to the full 32 entries currently allowed.
    - Imported name relocations are now supported.
    - Source code for my infamous test program is now included.
    - A handful of basic Windows functions are now emulated.  See
      "kernel.spec" for examples of how to use the build program.

WHAT'S NEW with version 0.0.1:

    - Eric Youngdale contributed countless improvements in memory
      efficiency, bug fixes, and relocation.
    - The build program has been completed.  It now lets you specify
      how the main DLL entry point should interface to your emulation
      library routines.  A brief description of how to build these
      specifications is included in the file "build-spec.txt".
    - The code to dispatch builtin DLL calls is complete, but untested.
