
Using SDL under Windows with the OpenWatcom compiler
====================================================

Prerequisites
-------------

I have done the port under Windows XP Home with SP2 installed. Windows
2000 should also be working. I'm not so sure about ancient Windows NT,
since only DirectX 3 is available there. Building should be possible,
but running the compiled applications will probalbly fail with
SDL_VIDEODRIVER=directx. The windib driver should work, though.

To compile and use the SDL with Open Watcom you will need the following:
- Open Watcom compiler. I used version 1.5. The environment variables
  PATH, WATCOM and INCLUDE need to be set appropriately - please consult
  the OpenWatcom documentation and instructions given during the
  installation of the compiler.
  My setup looks like this in owvars.bat:
    set WATCOM=C:\watcom
    set INCLUDE=%WATCOM%\h;%WATCOM%\h\nt
    set PATH=%PATH%;%WATCOM%\binnt;%WATCOM%\binw
- A fairly recent DirectX SDK. The original unmodified DX8 SDK works, as
  well as the minimal DirectX 7 SDK from the Allegro download site
  (<http://alleg.sourceforge.net/files/dx70_min.zip>).
- The SDL sources from Subversion
- The file Watcom-Win32.zip (now available in Subversion)


Building the Library
--------------------

1) In the SDL base directory extract the archive Watcom-Win32.zip. This
   creates a subdirectory named 'watcom'.
2) The makefile expects the environment variable DXDIR to be set to the
   base directory of a DirectX SDK. I have tried a stock DX8 SDK from
   Microsoft as well as the minimal DirectX 7 SDK from the Allegro
   download site.
   You can also edit the makefile directly and hard code your path to
   the SDK on your system.
   I have this in my setup:
     set DXDIR=D:\devel\DX8_SDK
3) Enter the watcom directory and run
     wmake sdl
4) All tests from the test directory are working and can be built by
   running
     wmake tests

Notes:

 The makefile offers some options to tweak the way the library is built.
 You have at your disposal the option to build a static (default)
 library, or a DLL (with tgt=dll). You can also choose whether to build
 a Release (default) or a Debug version (with build=debug) of the tests
 and library. Please consult the usage comment at the top of the
 makefile for usage instructions.

 If you specify a test target (i.e. 'wmake tests' for all tests, or
 selected targets like 'wmake testgl testvidinfo testoverlay2'), the
 tests are always freshly compiled and linked. This is done to
 minimise hassle when switching between library versions (static vs.
 DLL), because they require subtly different options.
 Also, the test executables are put directly into the test directory,
 so they can find their data files. The clean target of the makefile
 removes the test executables and the SDL.dll file from the test
 directory.

 To use the library in your own projects with Open Watcom, you can use
 the way the tests are built as base of your own build environment.

 The library can also be built with the stack calling convention of the
 compiler (-6s instead of -6r).


Test applications
-----------------

I've tried to make all tests work. The following table gives an overview
of the current status.

 Testname        Status
~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
checkkeys       +
graywin         +
loopwave        +
testalpha       +
testbitmap      +
testdyngl       +
testerror       +
testfile        +
testgamma       +
testgl          +
testhread       +
testiconv       - (all failed)
testkeys        +
testlock        +
testoverlay     + (needs 'set SDL_VIDEODRIVER=directx')
testoverlay2    + (needs 'set SDL_VIDEODRIVER=directx')
testpalette     +
testplatform    +
testsem         +
testsprite      +
testtimer       +
testver         +
testvidinfo     +
testwin         ? (fading doesn't seem right)
testwm          +
torturethread   +
testcdrom       +
testjoystick    not tested
threadwin       +
testcursor      +


TODO
----

There is room for further improvement:
- Test joystick functionality.
- Investigate fading issue in 'testwin' test.
- Fix the UTF-8 support.
- Adapt the makefile/object file list to support more target systems
- Use "#pragma aux" syntax for the CPU info functions.


Questions and Comments
----------------------

Please direct any questions or comments to me:  <mailto:macpete@gmx.de>

   Happy Coding!

   Marc Peter
