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

So here goes release 0.0.3 of the Windows loader.  It will do some 
relocations and then run the program.  I have successfully loaded 
the Windows solitaire game.  Try it.  It currently stops a call to
GetObject().

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.
    - Make changes to the kernel to allow more than 32 LDT entries.
    - Trap and handle DOS and DPMI calls.
    - Windows emulation library (connect to Peter MacDonald's library).
    - Allowing loading of 16-bit DLLs for use with program.
    - global memory allocation.
    - complete and improve local heap allocation.
    - Handle self-loading applications.
    - Deal with callback functions.
    - Resource loading

INSTALLATION:

    Uncompress and untar this archive into the directory of your
choice.  The file "ldt.tar" contains a necessary kernel patch against
Linux 0.99.10.  If you installed the "ldt.tar" from the first release
of this package, then you MUST to replace it.  In the directory 
/usr/src/linux (or whereever you keep your kernel sources), untar 
this file it contains three files:

	kernel/ldt.c
		- This is source for a new system call.
	
	include/linux/ldt.h
		- This contains structures defining the system call
		  interface.

	ldt.patch
		- This is a patch that must be applied to the kernel.
		  It updates two header files, and the kernel Makefile.

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
