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.



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