Copyright  Robert J. Amstadt, 1993.  All code is provided without
warranty.  It is my intent to cover this code with the Gnu Public
License.

INSTALLATION:

Linux:

    Uncompress and untar this archive into the directory of your
choice.  This release requires a Linux version 0.99 pl12 kernel with
ALPHA-pl13-diffs.

NetBSD:

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

All:

To build Wine, first do a "make depend" and then a "make".  The
executable "wine" will be built.

Grab a copy of Windows sol.exe (Solitaire) and run it with the command:

	wine sol.exe

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

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
