
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
