From 70c5e91d0f208b0274c136c7dcae13167a8b69d3 Mon Sep 17 00:00:00 2001 From: Ozkan Sezer Date: Wed, 1 Dec 2021 01:20:10 +0300 Subject: [PATCH] os/2 optionally builds against libiconv. --- Makefile.os2 | 13 +++++++++++++ include/SDL_config_os2.h | 5 +++++ src/core/os2/SDL_os2.h | 6 ++++++ src/video/os2/SDL_os2video.c | 7 ++++++- 4 files changed, 30 insertions(+), 1 deletion(-) diff --git a/Makefile.os2 b/Makefile.os2 index 07ca845b3..ab42a88d8 100644 --- a/Makefile.os2 +++ b/Makefile.os2 @@ -1,10 +1,16 @@ # Open Watcom makefile to build SDL2.dll for OS/2 # wmake -f Makefile.os2 +# +# If you have libiconv installed, you can compile against it +# by specifying LIBICONV=1, e.g.: +# wmake -f Makefile.os2 LIBICONV=1 LIBNAME = SDL2 VERSION = 2.0.19 DESCRIPTION = Simple DirectMedia Layer 2 +LIBICONV=0 + LIBHOME = . DLLFILE = $(LIBHOME)/$(LIBNAME).dll LIBFILE = $(LIBHOME)/$(LIBNAME).lib @@ -23,7 +29,12 @@ CFLAGS+= -wcd=303 # building dll: CFLAGS+= -bd # iconv: +!ifeq LIBICONV 1 +CFLAGS+= -DHAVE_ICONV=1 -DHAVE_ICONV_H=1 +LIBS+= iconv.lib +!else LIBS+= libuls.lib libconv.lib +!endif # the include paths : CFLAGS+= $(INCPATH) # building SDL itself (for DECLSPEC): @@ -69,7 +80,9 @@ SRCS+= SDL_locale.c SDL_syslocale.c SRCS+= SDL_url.c SDL_sysurl.c SRCS+= SDL_os2.c +!ifeq LIBICONV 0 SRCS+= geniconv.c os2cp.c os2iconv.c sys2utf8.c +!endif SRCS+= SDL_os2audio.c SRCS+= SDL_os2video.c SDL_os2util.c SDL_os2dive.c SDL_os2vman.c & SDL_os2mouse.c SDL_os2messagebox.c diff --git a/include/SDL_config_os2.h b/include/SDL_config_os2.h index 33e4ba866..d35bf6d37 100644 --- a/include/SDL_config_os2.h +++ b/include/SDL_config_os2.h @@ -80,6 +80,11 @@ #define HAVE_FLOAT_H 1 #define HAVE_SIGNAL_H 1 +#if 0 /* see Makefile */ +#define HAVE_ICONV 1 +#define HAVE_ICONV_H 1 +#endif + /* #undef HAVE_DLOPEN */ #define HAVE_MALLOC 1 #define HAVE_CALLOC 1 diff --git a/src/core/os2/SDL_os2.h b/src/core/os2/SDL_os2.h index efc1bc1f5..53b076614 100644 --- a/src/core/os2/SDL_os2.h +++ b/src/core/os2/SDL_os2.h @@ -38,10 +38,16 @@ #endif /* OS2DEBUG */ +#if defined(HAVE_ICONV) && defined(HAVE_ICONV_H) +#define OS2_SysToUTF8(S) SDL_iconv_string("UTF-8", "", (char *)(S), SDL_strlen(S)+1) +#define OS2_UTF8ToSys(S) SDL_iconv_string("", "UTF-8", (char *)(S), SDL_strlen(S)+1) +#define libiconv_clean() do {} while(0) +#else /* StrUTF8New() - geniconv/sys2utf8.c */ #include "geniconv/geniconv.h" #define OS2_SysToUTF8(S) StrUTF8New(1, (S), SDL_strlen((S)) + 1) #define OS2_UTF8ToSys(S) StrUTF8New(0, (char *)(S), SDL_strlen((S)) + 1) +#endif /* SDL_OS2Quit() will be called from SDL_QuitSubSystem() */ void SDL_OS2Quit(void); diff --git a/src/video/os2/SDL_os2video.c b/src/video/os2/SDL_os2video.c index 8cd7af38e..346294a71 100644 --- a/src/video/os2/SDL_os2video.c +++ b/src/video/os2/SDL_os2video.c @@ -320,10 +320,15 @@ static VOID _wmChar(WINDATA *pWinData, MPARAM mp1, MPARAM mp2) } if ((ulFlags & KC_CHAR) != 0) { +#if defined(HAVE_ICONV) && defined(HAVE_ICONV_H) + char *acUTF8 = SDL_iconv_string("UTF-8", "", (char *)&ulCharCode, 1); + SDL_SendKeyboardText((acUTF8 != NULL)? acUTF8 : (char *)&ulCharCode); + SDL_free(acUTF8); +#else CHAR acUTF8[4]; LONG lRC = StrUTF8(1, acUTF8, sizeof(acUTF8), (PSZ)&ulCharCode, 1); - SDL_SendKeyboardText((lRC > 0)? acUTF8 : (PSZ)&ulCharCode); +#endif } }