sdl12-compat: builds for and runs on Windows using Watcom. (minimally tested.)

From 03debea8f8aba9257eb6131f860a60afe940c06f Mon Sep 17 00:00:00 2001
From: Ozkan Sezer <[EMAIL REDACTED]>
Date: Fri, 30 Apr 2021 14:01:10 +0300
Subject: [PATCH] builds for and runs on Windows using Watcom. (minimally
 tested.)

---
 src/Makefile.w32   |  78 +++++++++++++++
 src/SDL12.lbc      | 236 +++++++++++++++++++++++++++++++++++++++++++++
 src/SDL12_compat.c |   5 +-
 3 files changed, 318 insertions(+), 1 deletion(-)
 create mode 100644 src/Makefile.w32
 create mode 100644 src/SDL12.lbc

diff --git a/src/Makefile.w32 b/src/Makefile.w32
new file mode 100644
index 0000000..833a202
--- /dev/null
+++ b/src/Makefile.w32
@@ -0,0 +1,78 @@
+#  OpenWatcom makefile to build SDL for Win32.
+
+!ifndef %WATCOM
+!error Environment variable WATCOM is not specified!
+!endif
+
+DLLNAME = SDL
+VERSION = 1.2.50
+
+# change SDL2INC to point to the SDL2 headers
+SDL2INC = include
+INCPATH = -I"$(%WATCOM)/h/nt" -I"$(%WATCOM)/h" -I"$(SDL2INC)"
+LIBNAME = $(DLLNAME)
+
+DLLFILE = $(LIBNAME).dll
+LIBFILE = $(LIBNAME).lib
+LNKFILE = $(LIBNAME).lnk
+
+CFLAGS_DEF=-bt=nt -d0 -zq -bm -5s -fp5 -fpi87 -sg -oteanbmier $(INCPATH)
+# we override the DECLSPEC define in begin_code.h, because we are using
+# an exports file to remove the _cdecl '_' prefix from the symbol names
+CFLAGS_DLL=$(CFLAGS_DEF) -bd -DDLL_EXPORT -DDECLSPEC=
+
+# Special flags for building SDL
+CFLAGS=$(CFLAGS_DLL) -otexan -wx -ei
+# avoid bogus W200 from cpuid code:
+CFLAGS+= -wcd=200
+# newer OpenWatcom versions enable W303 by default
+CFLAGS+= -wcd=303
+
+DESCRIPTION = Simple DirectMedia Layer 1.2
+
+object_files= SDL12_compat.obj
+
+.extensions:
+.extensions: .lib .dll .obj .c .asm
+
+.c.obj:
+	wcc386 $(CFLAGS) -fo=$^@ $<
+
+all: $(DLLFILE) $(LIBFILE) .symbolic
+
+$(DLLFILE): compiling_info $(object_files) $(LNKFILE)
+	@echo * Linking: $@
+	@wlink @$(LNKFILE)
+
+$(LIBFILE): $(DLLFILE)
+	@echo * Creating LIB file: $@
+	wlib -q -b -n -c -pa -s -t -zld -ii -io $* $(DLLFILE)
+
+compiling_info : .symbolic
+	@echo * Compiling...
+
+$(LNKFILE):
+	@echo * Creating linker file: $@
+	@%create $@
+	@%append $@ SYSTEM nt_dll INITINSTANCE TERMINSTANCE
+	@%append $@ NAME $(DLLFILE)
+	@for %i in ($(object_files)) do @%append $@ FILE %i
+	@%append $@ EXPORT=SDL12.lbc
+	@%append $@ OPTION QUIET
+	@%append $@ OPTION IMPF=$^&.exp
+	@%append $@ OPTION MAP=$^&.map
+	@%append $@ OPTION DESCRIPTION '@$#libsdl org:$(VERSION)$#@$(DESCRIPTION)'
+	@%append $@ OPTION ELIMINATE
+	@%append $@ OPTION SHOWDEAD
+
+clean: .SYMBOLIC
+	@echo * Clean: $(LIBNAME) $(VERSION)
+	@if exist *.obj rm *.obj
+	@if exist *.map rm *.map
+	@if exist *.exp rm *.exp
+	@if exist $(LNKFILE) rm $(LNKFILE)
+
+distclean: clean .SYMBOLIC
+	@if exist *.err rm *.err
+	@if exist $(DLLFILE) rm $(DLLFILE)
+	@if exist $(LIBFILE) rm $(LIBFILE)
diff --git a/src/SDL12.lbc b/src/SDL12.lbc
new file mode 100644
index 0000000..9b49755
--- /dev/null
+++ b/src/SDL12.lbc
@@ -0,0 +1,236 @@
+# Windows exports file for Watcom
+++'_SDL_InitSubSystem'.'SDL.dll'.'SDL_InitSubSystem'.'SDL_InitSubSystem'
+++'_SDL_Init'.'SDL.dll'.'SDL_Init'.'SDL_Init'
+++'_SDL_QuitSubSystem'.'SDL.dll'.'SDL_QuitSubSystem'.'SDL_QuitSubSystem'
+++'_SDL_WasInit'.'SDL.dll'.'SDL_WasInit'.'SDL_WasInit'
+++'_SDL_Quit'.'SDL.dll'.'SDL_Quit'.'SDL_Quit'
+++'_SDL_Linked_Version'.'SDL.dll'.'SDL_Linked_Version'.'SDL_Linked_Version'
+++'_SDL_putenv'.'SDL.dll'.'SDL_putenv'.'SDL_putenv'
+++'_SDL_getenv'.'SDL.dll'.'SDL_getenv'.'SDL_getenv'
+++'_SDL_malloc'.'SDL.dll'.'SDL_malloc'.'SDL_malloc'
+++'_SDL_calloc'.'SDL.dll'.'SDL_calloc'.'SDL_calloc'
+++'_SDL_realloc'.'SDL.dll'.'SDL_realloc'.'SDL_realloc'
+++'_SDL_free'.'SDL.dll'.'SDL_free'.'SDL_free'
+++'_SDL_qsort'.'SDL.dll'.'SDL_qsort'.'SDL_qsort'
+++'_SDL_iconv_open'.'SDL.dll'.'SDL_iconv_open'.'SDL_iconv_open'
+++'_SDL_iconv'.'SDL.dll'.'SDL_iconv'.'SDL_iconv'
+++'_SDL_iconv_close'.'SDL.dll'.'SDL_iconv_close'.'SDL_iconv_close'
+++'_SDL_iconv_string'.'SDL.dll'.'SDL_iconv_string'.'SDL_iconv_string'
+++'_SDL_revcpy'.'SDL.dll'.'SDL_revcpy'.'SDL_revcpy'
+++'_SDL_strlcpy'.'SDL.dll'.'SDL_strlcpy'.'SDL_strlcpy'
+++'_SDL_strlcat'.'SDL.dll'.'SDL_strlcat'.'SDL_strlcat'
+++'_SDL_strcasecmp'.'SDL.dll'.'SDL_strcasecmp'.'SDL_strcasecmp'
+++'_SDL_strncasecmp'.'SDL.dll'.'SDL_strncasecmp'.'SDL_strncasecmp'
+++'_SDL_strncmp'.'SDL.dll'.'SDL_strncmp'.'SDL_strncmp'
+++'_SDL_strrchr'.'SDL.dll'.'SDL_strrchr'.'SDL_strrchr'
+++'_SDL_strrev'.'SDL.dll'.'SDL_strrev'.'SDL_strrev'
+++'_SDL_strstr'.'SDL.dll'.'SDL_strstr'.'SDL_strstr'
+++'_SDL_strchr'.'SDL.dll'.'SDL_strchr'.'SDL_strchr'
+++'_SDL_strcmp'.'SDL.dll'.'SDL_strcmp'.'SDL_strcmp'
+++'_SDL_strdup'.'SDL.dll'.'SDL_strdup'.'SDL_strdup'
+++'_SDL_strlen'.'SDL.dll'.'SDL_strlen'.'SDL_strlen'
+++'_SDL_strlwr'.'SDL.dll'.'SDL_strlwr'.'SDL_strlwr'
+++'_SDL_strupr'.'SDL.dll'.'SDL_strupr'.'SDL_strupr'
+++'_SDL_memcmp'.'SDL.dll'.'SDL_memcmp'.'SDL_memcmp'
+++'_SDL_memcpy'.'SDL.dll'.'SDL_memcpy'.'SDL_memcpy'
+++'_SDL_memset'.'SDL.dll'.'SDL_memset'.'SDL_memset'
+++'_SDL_lltoa'.'SDL.dll'.'SDL_lltoa'.'SDL_lltoa'
+++'_SDL_ltoa'.'SDL.dll'.'SDL_ltoa'.'SDL_ltoa'
+++'_SDL_strtod'.'SDL.dll'.'SDL_strtod'.'SDL_strtod'
+++'_SDL_strtol'.'SDL.dll'.'SDL_strtol'.'SDL_strtol'
+++'_SDL_strtoul'.'SDL.dll'.'SDL_strtoul'.'SDL_strtoul'
+++'_SDL_ulltoa'.'SDL.dll'.'SDL_ulltoa'.'SDL_ulltoa'
+++'_SDL_ultoa'.'SDL.dll'.'SDL_ultoa'.'SDL_ultoa'
+++'_SDL_strtoll'.'SDL.dll'.'SDL_strtoll'.'SDL_strtoll'
+++'_SDL_strtoull'.'SDL.dll'.'SDL_strtoull'.'SDL_strtoull'
+++'_SDL_snprintf'.'SDL.dll'.'SDL_snprintf'.'SDL_snprintf'
+++'_SDL_vsnprintf'.'SDL.dll'.'SDL_vsnprintf'.'SDL_vsnprintf'
+++'_SDL_sscanf'.'SDL.dll'.'SDL_sscanf'.'SDL_sscanf'
+++'_SDL_SetError'.'SDL.dll'.'SDL_SetError'.'SDL_SetError'
+++'_SDL_GetError'.'SDL.dll'.'SDL_GetError'.'SDL_GetError'
+++'_SDL_ClearError'.'SDL.dll'.'SDL_ClearError'.'SDL_ClearError'
+++'_SDL_Error'.'SDL.dll'.'SDL_Error'.'SDL_Error'
+++'_SDL_AudioInit'.'SDL.dll'.'SDL_AudioInit'.'SDL_AudioInit'
+++'_SDL_AudioDriverName'.'SDL.dll'.'SDL_AudioDriverName'.'SDL_AudioDriverName'
+++'_SDL_OpenAudio'.'SDL.dll'.'SDL_OpenAudio'.'SDL_OpenAudio'
+++'_SDL_GetAudioStatus'.'SDL.dll'.'SDL_GetAudioStatus'.'SDL_GetAudioStatus'
+++'_SDL_PauseAudio'.'SDL.dll'.'SDL_PauseAudio'.'SDL_PauseAudio'
+++'_SDL_LockAudio'.'SDL.dll'.'SDL_LockAudio'.'SDL_LockAudio'
+++'_SDL_UnlockAudio'.'SDL.dll'.'SDL_UnlockAudio'.'SDL_UnlockAudio'
+++'_SDL_CloseAudio'.'SDL.dll'.'SDL_CloseAudio'.'SDL_CloseAudio'
+++'_SDL_AudioQuit'.'SDL.dll'.'SDL_AudioQuit'.'SDL_AudioQuit'
+++'_SDL_GetAppState'.'SDL.dll'.'SDL_GetAppState'.'SDL_GetAppState'
+++'_SDL_ConvertAudio'.'SDL.dll'.'SDL_ConvertAudio'.'SDL_ConvertAudio'
+++'_SDL_BuildAudioCVT'.'SDL.dll'.'SDL_BuildAudioCVT'.'SDL_BuildAudioCVT'
+++'_SDL_LoadBMP_RW'.'SDL.dll'.'SDL_LoadBMP_RW'.'SDL_LoadBMP_RW'
+++'_SDL_SaveBMP_RW'.'SDL.dll'.'SDL_SaveBMP_RW'.'SDL_SaveBMP_RW'
+++'_SDL_CDNumDrives'.'SDL.dll'.'SDL_CDNumDrives'.'SDL_CDNumDrives'
+++'_SDL_CDName'.'SDL.dll'.'SDL_CDName'.'SDL_CDName'
+++'_SDL_CDOpen'.'SDL.dll'.'SDL_CDOpen'.'SDL_CDOpen'
+++'_SDL_CDStatus'.'SDL.dll'.'SDL_CDStatus'.'SDL_CDStatus'
+++'_SDL_CDPlayTracks'.'SDL.dll'.'SDL_CDPlayTracks'.'SDL_CDPlayTracks'
+++'_SDL_CDPlay'.'SDL.dll'.'SDL_CDPlay'.'SDL_CDPlay'
+++'_SDL_CDPause'.'SDL.dll'.'SDL_CDPause'.'SDL_CDPause'
+++'_SDL_CDResume'.'SDL.dll'.'SDL_CDResume'.'SDL_CDResume'
+++'_SDL_CDStop'.'SDL.dll'.'SDL_CDStop'.'SDL_CDStop'
+++'_SDL_CDEject'.'SDL.dll'.'SDL_CDEject'.'SDL_CDEject'
+++'_SDL_CDClose'.'SDL.dll'.'SDL_CDClose'.'SDL_CDClose'
+++'_SDL_CreateCursor'.'SDL.dll'.'SDL_CreateCursor'.'SDL_CreateCursor'
+++'_SDL_SetCursor'.'SDL.dll'.'SDL_SetCursor'.'SDL_SetCursor'
+++'_SDL_GetCursor'.'SDL.dll'.'SDL_GetCursor'.'SDL_GetCursor'
+++'_SDL_FreeCursor'.'SDL.dll'.'SDL_FreeCursor'.'SDL_FreeCursor'
+++'_SDL_ShowCursor'.'SDL.dll'.'SDL_ShowCursor'.'SDL_ShowCursor'
+++'_SDL_WarpMouse'.'SDL.dll'.'SDL_WarpMouse'.'SDL_WarpMouse'
+++'_SDL_PeepEvents'.'SDL.dll'.'SDL_PeepEvents'.'SDL_PeepEvents'
+++'_SDL_PumpEvents'.'SDL.dll'.'SDL_PumpEvents'.'SDL_PumpEvents'
+++'_SDL_PollEvent'.'SDL.dll'.'SDL_PollEvent'.'SDL_PollEvent'
+++'_SDL_WaitEvent'.'SDL.dll'.'SDL_WaitEvent'.'SDL_WaitEvent'
+++'_SDL_PushEvent'.'SDL.dll'.'SDL_PushEvent'.'SDL_PushEvent'
+++'_SDL_SetEventFilter'.'SDL.dll'.'SDL_SetEventFilter'.'SDL_SetEventFilter'
+++'_SDL_GetEventFilter'.'SDL.dll'.'SDL_GetEventFilter'.'SDL_GetEventFilter'
+++'_SDL_EventState'.'SDL.dll'.'SDL_EventState'.'SDL_EventState'
+++'_SDL_SetGamma'.'SDL.dll'.'SDL_SetGamma'.'SDL_SetGamma'
+++'_SDL_SetGammaRamp'.'SDL.dll'.'SDL_SetGammaRamp'.'SDL_SetGammaRamp'
+++'_SDL_GetGammaRamp'.'SDL.dll'.'SDL_GetGammaRamp'.'SDL_GetGammaRamp'
+++'_SDL_NumJoysticks'.'SDL.dll'.'SDL_NumJoysticks'.'SDL_NumJoysticks'
+++'_SDL_JoystickName'.'SDL.dll'.'SDL_JoystickName'.'SDL_JoystickName'
+++'_SDL_JoystickOpen'.'SDL.dll'.'SDL_JoystickOpen'.'SDL_JoystickOpen'
+++'_SDL_JoystickOpened'.'SDL.dll'.'SDL_JoystickOpened'.'SDL_JoystickOpened'
+++'_SDL_JoystickIndex'.'SDL.dll'.'SDL_JoystickIndex'.'SDL_JoystickIndex'
+++'_SDL_JoystickNumAxes'.'SDL.dll'.'SDL_JoystickNumAxes'.'SDL_JoystickNumAxes'
+++'_SDL_JoystickNumHats'.'SDL.dll'.'SDL_JoystickNumHats'.'SDL_JoystickNumHats'
+++'_SDL_JoystickNumBalls'.'SDL.dll'.'SDL_JoystickNumBalls'.'SDL_JoystickNumBalls'
+++'_SDL_JoystickNumButtons'.'SDL.dll'.'SDL_JoystickNumButtons'.'SDL_JoystickNumButtons'
+++'_SDL_JoystickGetAxis'.'SDL.dll'.'SDL_JoystickGetAxis'.'SDL_JoystickGetAxis'
+++'_SDL_JoystickGetHat'.'SDL.dll'.'SDL_JoystickGetHat'.'SDL_JoystickGetHat'
+++'_SDL_JoystickGetBall'.'SDL.dll'.'SDL_JoystickGetBall'.'SDL_JoystickGetBall'
+++'_SDL_JoystickGetButton'.'SDL.dll'.'SDL_JoystickGetButton'.'SDL_JoystickGetButton'
+++'_SDL_JoystickClose'.'SDL.dll'.'SDL_JoystickClose'.'SDL_JoystickClose'
+++'_SDL_JoystickUpdate'.'SDL.dll'.'SDL_JoystickUpdate'.'SDL_JoystickUpdate'
+++'_SDL_JoystickEventState'.'SDL.dll'.'SDL_JoystickEventState'.'SDL_JoystickEventState'
+++'_SDL_EnableUNICODE'.'SDL.dll'.'SDL_EnableUNICODE'.'SDL_EnableUNICODE'
+++'_SDL_GetKeyState'.'SDL.dll'.'SDL_GetKeyState'.'SDL_GetKeyState'
+++'_SDL_GetModState'.'SDL.dll'.'SDL_GetModState'.'SDL_GetModState'
+++'_SDL_SetModState'.'SDL.dll'.'SDL_SetModState'.'SDL_SetModState'
+++'_SDL_GetKeyName'.'SDL.dll'.'SDL_GetKeyName'.'SDL_GetKeyName'
+++'_SDL_EnableKeyRepeat'.'SDL.dll'.'SDL_EnableKeyRepeat'.'SDL_EnableKeyRepeat'
+++'_SDL_GetKeyRepeat'.'SDL.dll'.'SDL_GetKeyRepeat'.'SDL_GetKeyRepeat'
+++'_SDL_MixAudio'.'SDL.dll'.'SDL_MixAudio'.'SDL_MixAudio'
+++'_SDL_GetMouseState'.'SDL.dll'.'SDL_GetMouseState'.'SDL_GetMouseState'
+++'_SDL_GetRelativeMouseState'.'SDL.dll'.'SDL_GetRelativeMouseState'.'SDL_GetRelativeMouseState'
+++'_SDL_MapRGB'.'SDL.dll'.'SDL_MapRGB'.'SDL_MapRGB'
+++'_SDL_MapRGBA'.'SDL.dll'.'SDL_MapRGBA'.'SDL_MapRGBA'
+++'_SDL_GetRGBA'.'SDL.dll'.'SDL_GetRGBA'.'SDL_GetRGBA'
+++'_SDL_GetRGB'.'SDL.dll'.'SDL_GetRGB'.'SDL_GetRGB'
+++'_SDL_RWFromFile'.'SDL.dll'.'SDL_RWFromFile'.'SDL_RWFromFile'
+++'_SDL_RWFromFP'.'SDL.dll'.'SDL_RWFromFP'.'SDL_RWFromFP'
+++'_SDL_RWFromMem'.'SDL.dll'.'SDL_RWFromMem'.'SDL_RWFromMem'
+++'_SDL_RWFromConstMem'.'SDL.dll'.'SDL_RWFromConstMem'.'SDL_RWFromConstMem'
+++'_SDL_AllocRW'.'SDL.dll'.'SDL_AllocRW'.'SDL_AllocRW'
+++'_SDL_FreeRW'.'SDL.dll'.'SDL_FreeRW'.'SDL_FreeRW'
+++'_SDL_ReadLE16'.'SDL.dll'.'SDL_ReadLE16'.'SDL_ReadLE16'
+++'_SDL_ReadBE16'.'SDL.dll'.'SDL_ReadBE16'.'SDL_ReadBE16'
+++'_SDL_ReadLE32'.'SDL.dll'.'SDL_ReadLE32'.'SDL_ReadLE32'
+++'_SDL_ReadBE32'.'SDL.dll'.'SDL_ReadBE32'.'SDL_ReadBE32'
+++'_SDL_ReadLE64'.'SDL.dll'.'SDL_ReadLE64'.'SDL_ReadLE64'
+++'_SDL_ReadBE64'.'SDL.dll'.'SDL_ReadBE64'.'SDL_ReadBE64'
+++'_SDL_WriteLE16'.'SDL.dll'.'SDL_WriteLE16'.'SDL_WriteLE16'
+++'_SDL_WriteBE16'.'SDL.dll'.'SDL_WriteBE16'.'SDL_WriteBE16'
+++'_SDL_WriteLE32'.'SDL.dll'.'SDL_WriteLE32'.'SDL_WriteLE32'
+++'_SDL_WriteBE32'.'SDL.dll'.'SDL_WriteBE32'.'SDL_WriteBE32'
+++'_SDL_WriteLE64'.'SDL.dll'.'SDL_WriteLE64'.'SDL_WriteLE64'
+++'_SDL_WriteBE64'.'SDL.dll'.'SDL_WriteBE64'.'SDL_WriteBE64'
+++'_SDL_SoftStretch'.'SDL.dll'.'SDL_SoftStretch'.'SDL_SoftStretch'
+++'_SDL_CreateRGBSurface'.'SDL.dll'.'SDL_CreateRGBSurface'.'SDL_CreateRGBSurface'
+++'_SDL_CreateRGBSurfaceFrom'.'SDL.dll'.'SDL_CreateRGBSurfaceFrom'.'SDL_CreateRGBSurfaceFrom'
+++'_SDL_SetColorKey'.'SDL.dll'.'SDL_SetColorKey'.'SDL_SetColorKey'
+++'_SDL_SetAlpha'.'SDL.dll'.'SDL_SetAlpha'.'SDL_SetAlpha'
+++'_SDL_SetClipRect'.'SDL.dll'.'SDL_SetClipRect'.'SDL_SetClipRect'
+++'_SDL_GetClipRect'.'SDL.dll'.'SDL_GetClipRect'.'SDL_GetClipRect'
+++'_SDL_LowerBlit'.'SDL.dll'.'SDL_LowerBlit'.'SDL_LowerBlit'
+++'_SDL_UpperBlit'.'SDL.dll'.'SDL_UpperBlit'.'SDL_UpperBlit'
+++'_SDL_FillRect'.'SDL.dll'.'SDL_FillRect'.'SDL_FillRect'
+++'_SDL_LockSurface'.'SDL.dll'.'SDL_LockSurface'.'SDL_LockSurface'
+++'_SDL_UnlockSurface'.'SDL.dll'.'SDL_UnlockSurface'.'SDL_UnlockSurface'
+++'_SDL_ConvertSurface'.'SDL.dll'.'SDL_ConvertSurface'.'SDL_ConvertSurface'
+++'_SDL_FreeSurface'.'SDL.dll'.'SDL_FreeSurface'.'SDL_FreeSurface'
+++'_SDL_LoadObject'.'SDL.dll'.'SDL_LoadObject'.'SDL_LoadObject'
+++'_SDL_LoadFunction'.'SDL.dll'.'SDL_LoadFunction'.'SDL_LoadFunction'
+++'_SDL_UnloadObject'.'SDL.dll'.'SDL_UnloadObject'.'SDL_UnloadObject'
+++'_SDL_CreateCond'.'SDL.dll'.'SDL_CreateCond'.'SDL_CreateCond'
+++'_SDL_DestroyCond'.'SDL.dll'.'SDL_DestroyCond'.'SDL_DestroyCond'
+++'_SDL_CondSignal'.'SDL.dll'.'SDL_CondSignal'.'SDL_CondSignal'
+++'_SDL_CondBroadcast'.'SDL.dll'.'SDL_CondBroadcast'.'SDL_CondBroadcast'
+++'_SDL_CondWaitTimeout'.'SDL.dll'.'SDL_CondWaitTimeout'.'SDL_CondWaitTimeout'
+++'_SDL_CondWait'.'SDL.dll'.'SDL_CondWait'.'SDL_CondWait'
+++'_SDL_SetModuleHandle'.'SDL.dll'.'SDL_SetModuleHandle'.'SDL_SetModuleHandle'
+++'_SDL_RegisterApp'.'SDL.dll'.'SDL_RegisterApp'.'SDL_RegisterApp'
+++'_SDL_UnregisterApp'.'SDL.dll'.'SDL_UnregisterApp'.'SDL_UnregisterApp'
+++'_SDL_CreateMutex'.'SDL.dll'.'SDL_CreateMutex'.'SDL_CreateMutex'
+++'_SDL_DestroyMutex'.'SDL.dll'.'SDL_DestroyMutex'.'SDL_DestroyMutex'
+++'_SDL_mutexP'.'SDL.dll'.'SDL_mutexP'.'SDL_mutexP'
+++'_SDL_mutexV'.'SDL.dll'.'SDL_mutexV'.'SDL_mutexV'
+++'_SDL_CreateSemaphore'.'SDL.dll'.'SDL_CreateSemaphore'.'SDL_CreateSemaphore'
+++'_SDL_DestroySemaphore'.'SDL.dll'.'SDL_DestroySemaphore'.'SDL_DestroySemaphore'
+++'_SDL_SemWaitTimeout'.'SDL.dll'.'SDL_SemWaitTimeout'.'SDL_SemWaitTimeout'
+++'_SDL_SemTryWait'.'SDL.dll'.'SDL_SemTryWait'.'SDL_SemTryWait'
+++'_SDL_SemWait'.'SDL.dll'.'SDL_SemWait'.'SDL_SemWait'
+++'_SDL_SemValue'.'SDL.dll'.'SDL_SemValue'.'SDL_SemValue'
+++'_SDL_SemPost'.'SDL.dll'.'SDL_SemPost'.'SDL_SemPost'
+++'_SDL_ThreadID'.'SDL.dll'.'SDL_ThreadID'.'SDL_ThreadID'
+++'_SDL_GetTicks'.'SDL.dll'.'SDL_GetTicks'.'SDL_GetTicks'
+++'_SDL_Delay'.'SDL.dll'.'SDL_Delay'.'SDL_Delay'
+++'_SDL_CreateThread'.'SDL.dll'.'SDL_CreateThread'.'SDL_CreateThread'
+++'_SDL_WaitThread'.'SDL.dll'.'SDL_WaitThread'.'SDL_WaitThread'
+++'_SDL_GetThreadID'.'SDL.dll'.'SDL_GetThreadID'.'SDL_GetThreadID'
+++'_SDL_KillThread'.'SDL.dll'.'SDL_KillThread'.'SDL_KillThread'
+++'_SDL_AddTimer'.'SDL.dll'.'SDL_AddTimer'.'SDL_AddTimer'
+++'_SDL_RemoveTimer'.'SDL.dll'.'SDL_RemoveTimer'.'SDL_RemoveTimer'
+++'_SDL_SetTimer'.'SDL.dll'.'SDL_SetTimer'.'SDL_SetTimer'
+++'_SDL_VideoInit'.'SDL.dll'.'SDL_VideoInit'.'SDL_VideoInit'
+++'_SDL_VideoDriverName'.'SDL.dll'.'SDL_VideoDriverName'.'SDL_VideoDriverName'
+++'_SDL_GetVideoSurface'.'SDL.dll'.'SDL_GetVideoSurface'.'SDL_GetVideoSurface'
+++'_SDL_GetVideoInfo'.'SDL.dll'.'SDL_GetVideoInfo'.'SDL_GetVideoInfo'
+++'_SDL_ListModes'.'SDL.dll'.'SDL_ListModes'.'SDL_ListModes'
+++'_SDL_VideoModeOK'.'SDL.dll'.'SDL_VideoModeOK'.'SDL_VideoModeOK'
+++'_SDL_SetVideoMode'.'SDL.dll'.'SDL_SetVideoMode'.'SDL_SetVideoMode'
+++'_SDL_DisplayFormat'.'SDL.dll'.'SDL_DisplayFormat'.'SDL_DisplayFormat'
+++'_SDL_DisplayFormatAlpha'.'SDL.dll'.'SDL_DisplayFormatAlpha'.'SDL_DisplayFormatAlpha'
+++'_SDL_UpdateRect'.'SDL.dll'.'SDL_UpdateRect'.'SDL_UpdateRect'
+++'_SDL_UpdateRects'.'SDL.dll'.'SDL_UpdateRects'.'SDL_UpdateRects'
+++'_SDL_Flip'.'SDL.dll'.'SDL_Flip'.'SDL_Flip'
+++'_SDL_SetPalette'.'SDL.dll'.'SDL_SetPalette'.'SDL_SetPalette'
+++'_SDL_SetColors'.'SDL.dll'.'SDL_SetColors'.'SDL_SetColors'
+++'_SDL_VideoQuit'.'SDL.dll'.'SDL_VideoQuit'.'SDL_VideoQuit'
+++'_SDL_GL_LoadLibrary'.'SDL.dll'.'SDL_GL_LoadLibrary'.'SDL_GL_LoadLibrary'
+++'_SDL_GL_GetProcAddress'.'SDL.dll'.'SDL_GL_GetProcAddress'.'SDL_GL_GetProcAddress'
+++'_SDL_GL_SetAttribute'.'SDL.dll'.'SDL_GL_SetAttribute'.'SDL_GL_SetAttribute'
+++'_SDL_GL_GetAttribute'.'SDL.dll'.'SDL_GL_GetAttribute'.'SDL_GL_GetAttribute'
+++'_SDL_GL_SwapBuffers'.'SDL.dll'.'SDL_GL_SwapBuffers'.'SDL_GL_SwapBuffers'
+++'_SDL_GL_UpdateRects'.'SDL.dll'.'SDL_GL_UpdateRects'.'SDL_GL_UpdateRects'
+++'_SDL_GL_Lock'.'SDL.dll'.'SDL_GL_Lock'.'SDL_GL_Lock'
+++'_SDL_GL_Unlock'.'SDL.dll'.'SDL_GL_Unlock'.'SDL_GL_Unlock'
+++'_SDL_GL_DisableContext'.'SDL.dll'.'SDL_GL_DisableContext'.'SDL_GL_DisableContext'
+++'_SDL_GL_EnableContext_Thread'.'SDL.dll'.'SDL_GL_EnableContext_Thread'.'SDL_GL_EnableContext_Thread'
+++'_SDL_WM_SetCaption'.'SDL.dll'.'SDL_WM_SetCaption'.'SDL_WM_SetCaption'
+++'_SDL_WM_GetCaption'.'SDL.dll'.'SDL_WM_GetCaption'.'SDL_WM_GetCaption'
+++'_SDL_WM_SetIcon'.'SDL.dll'.'SDL_WM_SetIcon'.'SDL_WM_SetIcon'
+++'_SDL_WM_GrabInput'.'SDL.dll'.'SDL_WM_GrabInput'.'SDL_WM_GrabInput'
+++'_SDL_WM_IconifyWindow'.'SDL.dll'.'SDL_WM_IconifyWindow'.'SDL_WM_IconifyWindow'
+++'_SDL_WM_ToggleFullScreen'.'SDL.dll'.'SDL_WM_ToggleFullScreen'.'SDL_WM_ToggleFullScreen'
+++'_SDL_GetWMInfo'.'SDL.dll'.'SDL_GetWMInfo'.'SDL_GetWMInfo'
+++'_SDL_LoadWAV_RW'.'SDL.dll'.'SDL_LoadWAV_RW'.'SDL_LoadWAV_RW'
+++'_SDL_FreeWAV'.'SDL.dll'.'SDL_FreeWAV'.'SDL_FreeWAV'
+++'_SDL_CreateYUVOverlay'.'SDL.dll'.'SDL_CreateYUVOverlay'.'SDL_CreateYUVOverlay'
+++'_SDL_LockYUVOverlay'.'SDL.dll'.'SDL_LockYUVOverlay'.'SDL_LockYUVOverlay'
+++'_SDL_UnlockYUVOverlay'.'SDL.dll'.'SDL_UnlockYUVOverlay'.'SDL_UnlockYUVOverlay'
+++'_SDL_DisplayYUVOverlay'.'SDL.dll'.'SDL_DisplayYUVOverlay'.'SDL_DisplayYUVOverlay'
+++'_SDL_FreeYUVOverlay'.'SDL.dll'.'SDL_FreeYUVOverlay'.'SDL_FreeYUVOverlay'
+++'_SDL_HasRDTSC'.'SDL.dll'.'SDL_HasRDTSC'.'SDL_HasRDTSC'
+++'_SDL_HasMMX'.'SDL.dll'.'SDL_HasMMX'.'SDL_HasMMX'
+++'_SDL_HasMMXExt'.'SDL.dll'.'SDL_HasMMXExt'.'SDL_HasMMXExt'
+++'_SDL_Has3DNow'.'SDL.dll'.'SDL_Has3DNow'.'SDL_Has3DNow'
+++'_SDL_Has3DNowExt'.'SDL.dll'.'SDL_Has3DNowExt'.'SDL_Has3DNowExt'
+++'_SDL_HasSSE'.'SDL.dll'.'SDL_HasSSE'.'SDL_HasSSE'
+++'_SDL_HasSSE2'.'SDL.dll'.'SDL_HasSSE2'.'SDL_HasSSE2'
+++'_SDL_HasAltiVec'.'SDL.dll'.'SDL_HasAltiVec'.'SDL_HasAltiVec'
diff --git a/src/SDL12_compat.c b/src/SDL12_compat.c
index 4129752..caa6096 100644
--- a/src/SDL12_compat.c
+++ b/src/SDL12_compat.c
@@ -991,7 +991,7 @@ static void dllquit(void)
     UnloadSDL20();
 }
 
-#elif defined(_WIN32) && (defined(_MSC_VER) || defined(__MINGW32__))
+#elif defined(_WIN32) && (defined(_MSC_VER) || defined(__MINGW32__) || defined(__WATCOMC__))
 #if defined(_MSC_VER) && !defined(__FLTUSED__)
 #define __FLTUSED__
 __declspec(selectany) int _fltused = 1;
@@ -999,6 +999,9 @@ __declspec(selectany) int _fltused = 1;
 #if defined(__MINGW32__)
 #define _DllMainCRTStartup DllMainCRTStartup
 #endif
+#if defined(__WATCOMC__)
+#define _DllMainCRTStartup LibMain
+#endif
 BOOL WINAPI _DllMainCRTStartup(HANDLE dllhandle, DWORD reason, LPVOID reserved)
 {
     switch (reason) {