Copyright  Robert J. Amstadt, 1993.  All code is provided without
warranty.  All code is covered by the license contained in the file
LICENSE unless explicitly stated in the individual source file.

INSTALLATION:

Linux:

    Uncompress and untar this archive into the directory of your
choice.  This release requires a Linux version 0.99 pl13 kernel
or above.

NetBSD:

    If you use BSD make rather than GNU make, you must apply the patches
in the file "bsdmake.patch".  This release requires NetBSD-current.

All:

To build Wine, first do a "make depend" and then a "make".  The
executable "wine" will be built.  "wine" will load and run Windows'
executables.  You must have a file "wine.ini" in the current directory,
your homedirectory, or in the path specified by the environment 
variable WINEPATH. Multiple directories in WINEPATH should be seperated
by semi-colons and NOT by colons!

You must specify the entire path to the executable, or a filename only
(using the path= statement in wine.ini as the search path)

For example: to run Windows' solitaire:

	export WINEPATH=/etc;/usr/windows

	wine sol		   (using the path= statement in wine.ini
	wine sol.exe		    as the search path)

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

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

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

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.

TODO:

    - Segment fixup code completion.
    - Trap and handle DOS and DPMI calls.
    - GlobalAlloc of code segments.
    - Rewrite global memory support including kernel mods to allow
      application to mess with page map.
    - Handle self-loading applications.
    - Resource loading
    - Lots and lots of API fiunctions.

BUILD:

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

FINALE:

Good luck,

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

Bob Amstadt
bob@amscons.com
