os/2 optionally builds against libiconv.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102
diff --git a/Makefile.os2 b/Makefile.os2
index 07ca845..ab42a88 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 33e4ba8..d35bf6d 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 efc1bc1..53b0766 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 8cd7af3..346294a 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
}
}