===========
SDL on OS/2
===========


1. How to compile?
------------------

Open Watcom 1.9 (http://www.openwatcom.org) or newer is tested.
For the new Open Watcom V2 fork, see: https://github.com/open-watcom/ and
https://open-watcom.github.io

WATCOM environment variable must to be set to the Open Watcom install
directory. To compile, run: wmake -f Makefile.os2

Check the "Makefile.os2" file. There is a line in there which determines if the
resulting SDL.DLL will be a 'debug' or a 'release' build. The 'debug' version 
is full of printf()'s, so if something goes wrong, its output can help a lot
for debugging.


2. Video drivers
----------------

See SDL_config_os2.h for two OS/2 video drivers:

- SDL_VIDEO_DRIVER_OS2FS:  The old OS/2 Video Output using FSLib.
  Disabled by default.  Requires FSLib.dll and preinstalled SciTech SNAP
  graphics drivers.

- SDL_VIDEO_DRIVER_OS2GROP:  New OS/2 video output driver using 'GrOp'
  library.  Enabled by default.

You can set the SDL_VIDEODRIVER environment variable to select/control
the video output drivers. E.g.:
  SET SDL_VIDEODRIVER=DIVE

Valid values for the GrOp driver:

- DIVE:  This is the default. Allows you to easily scale the window.
  For full-screen mode uses the current video mode and maximized PM
  window with scaled image.

- VMAN:  Low-level access to the video system.
  For full-screen mode uses the current video mode and maximized PM
  window with centered image.

- VMANFS:  More productive. Uses real fullscreen mode.
  Video mode switching in VMAN subsystem is unstable and may cause
  system hang. Use it at your own risk!

Valid values for the FSLib driver:

- FSLIB:  Chooses the FSLib driver, if was enabled at compile time.

OpenGL is not supported by any of the drivers.

You may significantly increase video output speed with OS4 kernel and patched
files vman.dll and dive.dll or with latest versions of ACPI support and video
driver Panorama.

You may significantly increase video output speed with OS4 kernel and patched
files vman.dll and dive.dll or with latest versions of ACPI support and video
driver Panorama.

Latest versions of OS/4 kernel:
  http://gus.biysk.ru/os4/
 (Info: https://www.os2world.com/wiki/index.php/Phoenix_OS/4)

Patched files vman.dll and dive.dll:
  http://gus.biysk.ru/os4/test/pached_dll/PATCHED_DLL.RAR


3. Special Keys / Full-Screen support
-------------------------------------

There are two special hot-keys implemented:
- Alt+Home switches between fullscreen and windowed mode
- Alt+End simulates closing the window (can be used as a Panic key)
  Only the LEFT Alt key will work.


4. Joysticks in SDL
-------------------

The Joystick detection only works for standard joysticks (2 buttons, 2 axes
and the like). Therefore, if you use a non-standard joystick, you should
specify its features in the SDL_OS2_JOYSTICK environment variable in a batch
file or CONFIG.SYS, so SDL applications can provide full capability to your
device. The syntax is:

SET SDL_OS2_JOYSTICK=[JOYSTICK_NAME] [AXES] [BUTTONS] [HATS] [BALLS]

So, it you have a Gravis GamePad with 4 axes, 2 buttons, 2 hats and 0 balls,
the line should be:

SET SDL_OS2_JOYSTICK=Gravis_GamePad 4 2 2 0

If you want to add spaces in your joystick name, just surround it with
quotes or double-quotes:

SET SDL_OS2_JOYSTICK='Gravis GamePad' 4 2 2 0

or

SET SDL_OS2_JOYSTICK="Gravis GamePad" 4 2 2 0

   Note however that Balls and Hats are not supported under OS/2, and the
value will be ignored... but it is wise to define these correctly because
in the future those can be supported.

   Also the number of buttons is limited to 2 when using two joysticks,
4 when using one joystick with 4 axes, 6 when using a joystick with 3 axes
and 8 when using a joystick with 2 axes. Notice however these are limitations
of the Joystick Port hardware, not OS/2.


5. Proportional windows (FSLib driver only)
-------------------------------------------

For some SDL applications it can be handy to have proportional windows, so
the windows will keep their aspect ratio when resized.
This can be achieved in two ways:

- Before starting the given SDL application, set the
  SDL_USE_PROPORTIONAL_WINDOW environment variable to something, e.g.:

  SET SDL_USE_PROPORTIONAL_WINDOW=1
  dosbox.exe

- If you have a HOME environment variable set, then SDL will look for a file
  in there called ".sdl.proportionals". If that file contains the name of the
  currently running SDL executable, then that process will have proportional
  windows automatically.

  Please note that this file is created automatically with default values
  at the first run.


6. Audio in SDL applications
----------------------------

The OS/2 port of SDL can be instructed to run the audio thread in high
priority, which makes sure that there will be enough time for the processing
of the audio data.

By default, SDL runs the audio thread at ForegroundServer+0 priority. Well
written and well behaving SDL applications should work well in this mode.
For other applications, you can tell SDL to run the audio thread at
TimeCritical priority by setting an environment variable before starting the
SDL app:

    SET SDL_USE_TIMECRITICAL_AUDIO=1

Please note that this is a bit risky, because if the SDL application runs a
tight infinite loop in this thread, this will make the whole system 
unresponsive, so use it with care, and only for applications that need it!


7. Authors
-----------

- Andrey Vasilkin <digi@os2.snc.ru> Video (GrOp library)
- Doodle <doodle@scenergy.dfmk.hu>  General (Audio/Video/System)
- Caetano <daniel@caetano.eng.br>   CDROM and Joystick


8. Changelog of the OS/2 port
------------------------------

Version 1.2.16 - 2021-01-22
 - Imported new video driver (os2grop) by Andrey Vasilkin

Version 1.2.10 - 2006-05-17  - Doodle
 - Small modifications for v1.2.10 release
 - Changed DLL name to include version info (currently SDL12.dll)

Version 1.2 - 2006-05-01  - Doodle
 - Modified makefile system to have only one makefile
 - Included FSLib headers, DLL and LIB file

Version 1.2 - 2006-02-26  - Doodle
 - Updated the official SDL version with the OS/2 specific changes.
 - Added support for real unicode keycode conversion.

Version 1.2.7 - 2006-01-20  - Doodle
 - Added support for selectively using timecritical priority for
   audio threads by SDL_USE_TIMECRITICAL_AUDIO environment variable.
   (e.g.: 
    SET SDL_USE_TIMECRITICAL_AUDIO=1
    dosbox.exe
   )

Version 1.2.7 - 2005-12-22  - Doodle
 - Added support for proportional SDL windows.
   There are two ways to have proportional (aspect-keeping) windows for
   a given SDL application: Either set the SDL_USE_PROPORTIONAL_WINDOW
   environment variable to something before starting the application
   (e.g.: 
    SET SDL_USE_PROPORTIONAL_WINDOW=1
    dosbox.exe
   )
   or, if you have the HOME environment variable set, then SDL12.DLL will
   create a file in that directory called .sdl.proportionals, and you can
   put there the name of executable files that will be automatically made
   proportional.

Version 1.2.7 - 2005-10-14  - Doodle
 - Enabled Exception handler code in FSLib to be able to restore original
   desktop video mode in case the application crashes.
 - Added the missing FSLib_Uninitialize() call into SDL.
   (The lack of it did not cause problems, but it's cleaner this way.)
 - Fixed a mouse problem in Fullscreen mode where any mouse click
   re-centered the mouse.

Version 1.2.7 - 2005-10-09  - Doodle
 - Implemented window icon support

Version 1.2.7 - 2005-10-03  - Doodle
 - Reworked semaphore support again
 - Tuned thread priorities

Version 1.2.7 - 2005-10-02  - Doodle
 - Added support for custom mouse pointers
 - Fixed WM_CLOSE processing: give a chance to SDL app to ask user...
 - Added support for MMX-accelerated audio mixers
 - Other small fixes

Version 1.2.7 - 2005-09-12  - Doodle
 - Small fixes for DosBox incorporated into public release
 - Fixed semaphore support (SDL_syssem.c)
 - Fixed FSLib to have good clipping in scaled window mode,
   and to prevent occasional desktop freezes.

Version 1.2.7 - 2004-09-08a - Caetano
	- Improved joystick support (general verifications about hardware).
	- Added support up to 8 buttons in 2 axes joysticks and 6 buttons in 3 axes joysticks.
	- Added support to environment variable SDL_OS2_JOYSTICK to specify a joystick.
	- Improved Joystick test to handle every type of joystick and display only relevant information.
	- Merged with Doodle 2004-09-08
	- Little tid up in README.OS2
	- Added explanation about SDL_OS2_JOYSTICK environment variable on README.OS2

Version 1.2.7 - 2004-09-07 - Caetano
	- Merged with changes in headers for GCC compiling.
	- Added Joystick support using basic IBM GAME$ support, allowing it to work with all joystick drivers since OS/2 2.1.
	- Improved joystick detection (hacked!). OS/2 do not allow real joystick detection, so... 
	- Modified makefile in test to compile "testjoystick". Anyway, it's useless, since it seems to cause a lot of trouble in OS/2 (because os video routines, not Joystick support).
	- Created separated Joystick test program to test only joystick functions.
	- Improved joystick auto-centering.
	- Improved the coordinate correction routine to use two scale factors for each axis.

Version 1.2.7 - 2004-07-05 - Caetano
	- Corrected the time returned by status in CDROM support (it was incorrect)
	- Added the testcdrom.c and corrected the linking directive (it was causing an error)

Version 1.2.7 - 2004-07-02a - Caetano
	- Corrected a little problem in a comment at SDL-1.2.7\test\torturethread.c, line 18 (missing */, nested comment)
	- Added CDROM support to tree (SDL-1.2.7\src\cdrom\os2\SDL_syscdrom.c)
	- Modified makefile (SDL-1.2.7\src\makefiles.wat and SDL-1.2.7\watcom.mif) to build with CDROM support
	- Added the "extra" SDL_types.h forgotten in 2004-07-02 version.
