summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJens Pranaitis <jens@chaox.net>2011-03-30 21:17:06 +0200
committerJens Pranaitis <jens@chaox.net>2011-03-30 21:17:06 +0200
commit4fd2208427081bf2cc58b1c7bf0367abb3da8dec (patch)
tree550a19df1bc2b7596b3bff6385705910713982f8
parentremoved miracl (in sunrise now) (diff)
downloadjensp-4fd2208427081bf2cc58b1c7bf0367abb3da8dec.tar.gz
jensp-4fd2208427081bf2cc58b1c7bf0367abb3da8dec.tar.bz2
jensp-4fd2208427081bf2cc58b1c7bf0367abb3da8dec.zip
removed wine with dib engine
-rw-r--r--app-emulation/wine/Manifest8
-rw-r--r--app-emulation/wine/files/wine-1.1.15-winegcc.patch55
-rw-r--r--app-emulation/wine/files/wine-1.3.0-dib-engine.patch16184
-rw-r--r--app-emulation/wine/wine-1.3.0.ebuild208
4 files changed, 0 insertions, 16455 deletions
diff --git a/app-emulation/wine/Manifest b/app-emulation/wine/Manifest
deleted file mode 100644
index 8261449..0000000
--- a/app-emulation/wine/Manifest
+++ /dev/null
@@ -1,8 +0,0 @@
-AUX wine-1.1.15-winegcc.patch 1550 RMD160 086fbdd7dbe5da98c3457f00cb30705150d58b1f SHA1 0aa5a9d0947e15af9fe103797a0c993cbb3eedab SHA256 fcf4a0578774d817b8de094abae85e370683a77805a59efe6c5f7b8b87935de9
-AUX wine-1.3.0-dib-engine.patch 562412 RMD160 cf5b67b207e47f9ee88fb205cbd8560c856d5124 SHA1 f9f6282b6ae4e6327b99f9230c9e3a865badfcd4 SHA256 2006945d32af61c6ce92bcc6e639de92cb5d7de36318195c3f014a099634acbc
-DIST wine-1.3.0.tar.bz2 17764429 RMD160 6ce5c89179f211e74e19dfab57f5a999ca225369 SHA1 955c8cbf6fe85de179e9b6c8bea9940363166e51 SHA256 b4c6edb68a255be39013ff30c330d838e6143786f1fc13ccf9edfd52f0ac5510
-DIST wine_gecko-1.0.0-x86.cab 8119486 RMD160 57618dbffa7b7226dcd44f86c3c569ab8a5ff938 SHA1 afa22c52bca4ca77dcb9edb3c9936eb23793de01 SHA256 7ddf697677506fb164c52771864e32dd69a359ed855b2efbc51340de2376c99c
-DIST winepulse-0.35-configure.ac.patch 2826 RMD160 e419d43667be01af9b24a0e46822c41572a6ff9d SHA1 4943381128fd9555280884e2bb5867be4a8731d9 SHA256 837bffaaddb6b7b0a474c7262a57f12e250e135cf6228dde1a22849f66de1250
-DIST winepulse-0.36.patch 101815 RMD160 9a20076436a7e49c317bc624dd71b61c93acddff SHA1 aa6a4c9d4619f8452aad8c457c879769cab8f8fc SHA256 7508b171bfecb461ecb464426cb4bcd9c3ff77645b787fcbf61e27dd34fe1b05
-DIST winepulse-0.38-winecfg.patch 13088 RMD160 e7aa8f91c20b6d706fc12e11677440f19890f4c7 SHA1 55b785636d2982f19e0634b26eafffbe46b79c60 SHA256 051ef1cb5598c319152ad28b85733927a711b45e0bfa92f0b0b2331588f5894e
-EBUILD wine-1.3.0.ebuild 5624 RMD160 da8de9daff2e27b11b4c8024e5173d3097c764c6 SHA1 1a1646e3e6408d5fee3a24b918f2011f48c7cac4 SHA256 dd02bced65c6644aefee511ae377eca4543d7db2104c102d1f5b2b0daef122cb
diff --git a/app-emulation/wine/files/wine-1.1.15-winegcc.patch b/app-emulation/wine/files/wine-1.1.15-winegcc.patch
deleted file mode 100644
index 6e5bb22..0000000
--- a/app-emulation/wine/files/wine-1.1.15-winegcc.patch
+++ /dev/null
@@ -1,55 +0,0 @@
-http://bugs.gentoo.org/260726
-
---- wine-1.1.15/tools/winegcc/winegcc.c
-+++ wine-1.1.15/tools/winegcc/winegcc.c
-@@ -215,10 +215,13 @@
- strarray* files;
- };
-
-+#undef FORCE_POINTER_SIZE
- #ifdef __i386__
- static const enum target_cpu build_cpu = CPU_x86;
-+#define FORCE_POINTER_SIZE
- #elif defined(__x86_64__)
- static const enum target_cpu build_cpu = CPU_x86_64;
-+#define FORCE_POINTER_SIZE
- #elif defined(__sparc__)
- static const enum target_cpu build_cpu = CPU_SPARC;
- #elif defined(__ALPHA__)
-@@ -968,6 +971,9 @@
- opts.linker_args = strarray_alloc();
- opts.compiler_args = strarray_alloc();
- opts.winebuild_args = strarray_alloc();
-+#ifdef FORCE_POINTER_SIZE
-+ opts.force_pointer_size = sizeof(size_t);
-+#endif
-
- /* determine the processor type */
- if (strendswith(argv[0], "winecpp")) opts.processor = proc_cpp;
---- wine-1.1.15/tools/winebuild/main.c
-+++ wine-1.1.15/tools/winebuild/main.c
-@@ -50,10 +50,13 @@
- int link_ext_symbols = 0;
- int force_pointer_size = 0;
-
-+#undef FORCE_POINTER_SIZE
- #ifdef __i386__
- enum target_cpu target_cpu = CPU_x86;
-+#define FORCE_POINTER_SIZE
- #elif defined(__x86_64__)
- enum target_cpu target_cpu = CPU_x86_64;
-+#define FORCE_POINTER_SIZE
- #elif defined(__sparc__)
- enum target_cpu target_cpu = CPU_SPARC;
- #elif defined(__ALPHA__)
-@@ -574,6 +577,10 @@
- signal( SIGTERM, exit_on_signal );
- signal( SIGINT, exit_on_signal );
-
-+#ifdef FORCE_POINTER_SIZE
-+ force_pointer_size = sizeof(size_t);
-+#endif
-+
- output_file = stdout;
- argv = parse_options( argc, argv, spec );
-
diff --git a/app-emulation/wine/files/wine-1.3.0-dib-engine.patch b/app-emulation/wine/files/wine-1.3.0-dib-engine.patch
deleted file mode 100644
index 9b3051c..0000000
--- a/app-emulation/wine/files/wine-1.3.0-dib-engine.patch
+++ /dev/null
@@ -1,16184 +0,0 @@
-diff -Nru a/configure.ac b/configure.ac
---- a/configure.ac 2010-07-30 19:43:56.000000000 +0200
-+++ b/configure.ac 2010-08-04 16:08:44.348222017 +0200
-@@ -2655,6 +2655,7 @@
- WINE_CONFIG_DLL(winecoreaudio.drv)
- WINE_CONFIG_LIB(winecrt0)
- WINE_CONFIG_DLL(wined3d,,[wined3d])
-+WINE_CONFIG_DLL(winedib.drv)
- WINE_CONFIG_DLL(wineesd.drv)
- WINE_CONFIG_DLL(winejack.drv)
- WINE_CONFIG_DLL(winejoystick.drv)
-diff -Nru a/configure.ac.orig b/configure.ac.orig
---- a/configure.ac.orig 1970-01-01 01:00:00.000000000 +0100
-+++ b/configure.ac.orig 2010-07-30 19:43:56.000000000 +0200
-@@ -0,0 +1,2832 @@
-+dnl Process this file with autoconf to produce a configure script.
-+dnl Original author: Michael Patra
-+dnl See ChangeLog file for detailed change history.
-+
-+m4_define(WINE_VERSION,regexp(m4_include(VERSION),[version \([-.0-9A-Za-z]+\)],[\1]))
-+
-+dnl autoconf versions before 2.59d don't handle multi-line subst variables correctly
-+AC_PREREQ(2.59d)
-+AC_INIT([Wine],[WINE_VERSION],[wine-devel@winehq.org],[wine],[http://www.winehq.org])
-+AC_CONFIG_SRCDIR(server/atom.c)
-+AC_CONFIG_HEADERS(include/config.h)
-+AC_CONFIG_AUX_DIR(tools)
-+
-+dnl autoconf versions before 2.63b don't have AS_VAR_APPEND or AS_VAR_IF
-+m4_ifdef([AS_VAR_APPEND],,[as_fn_append () { eval $[1]=\$$[1]\$[2]; }
-+AC_DEFUN([AS_VAR_APPEND],[as_fn_append $1 $2])])dnl
-+m4_ifdef([AS_VAR_IF],,[AC_DEFUN([AS_VAR_IF],
-+[AS_LITERAL_IF([$1],
-+ [AS_IF([test "x$$1" = x""$2], [$3], [$4])],
-+ [eval as_val=\$$1
-+ AS_IF([test "x$as_val" = x""$2], [$3], [$4])])])])dnl
-+dnl autoconf versions before 2.64 don't have AC_PACKAGE_URL
-+m4_ifdef([AC_PACKAGE_URL],,
-+ [AC_DEFINE([PACKAGE_URL], ["http://www.winehq.org"], [Define to the home page for this package.])
-+ AC_SUBST([PACKAGE_URL], ["http://www.winehq.org"])])dnl
-+
-+dnl **** Command-line arguments ****
-+
-+AC_ARG_ENABLE(win16, AS_HELP_STRING([--disable-win16],[do not include Win16 support]))
-+AC_ARG_ENABLE(win64, AS_HELP_STRING([--enable-win64],[build a Win64 emulator on AMD64 (won't run Win32 binaries)]))
-+AC_ARG_ENABLE(tests, AS_HELP_STRING([--disable-tests],[do not build the regression tests]))
-+AC_ARG_ENABLE(maintainer-mode, AS_HELP_STRING([--enable-maintainer-mode],[enable maintainer-specific build rules]))
-+
-+AC_ARG_WITH(alsa, AS_HELP_STRING([--without-alsa],[do not use the Alsa sound support]),
-+ [if test "x$withval" = "xno"; then ac_cv_header_sys_asoundlib_h=no; ac_cv_header_alsa_asoundlib_h=no; fi])
-+AC_ARG_WITH(audioio, AS_HELP_STRING([--without-audioio],[do not use the AudioIO sound support]),
-+ [if test "x$withval" = "xno"; then ac_cv_header_libaudioio_h=no; fi])
-+AC_ARG_WITH(capi, AS_HELP_STRING([--without-capi],[do not use CAPI (ISDN support)]),
-+ [if test "x$withval" = "xno"; then ac_cv_header_capi20_h=no; ac_cv_header_linux_capi_h=no; fi])
-+AC_ARG_WITH(cms, AS_HELP_STRING([--without-cms],[do not use CMS (color management support)]),
-+ [if test "x$withval" = "xno"; then ac_cv_header_lcms_h=no; ac_cv_header_lcms_lcms_h=no; fi])
-+AC_ARG_WITH(coreaudio, AS_HELP_STRING([--without-coreaudio],[do not use the CoreAudio sound support]),
-+ [if test "x$withval" = "xno"; then ac_cv_header_CoreAudio_CoreAudio_h=no; fi])
-+AC_ARG_WITH(cups, AS_HELP_STRING([--without-cups],[do not use CUPS]))
-+AC_ARG_WITH(curses, AS_HELP_STRING([--without-curses],[do not use (n)curses]),
-+ [if test "x$withval" = "xno"; then ac_cv_header_ncurses_h=no; ac_cv_header_curses_h=no; fi])
-+AC_ARG_WITH(esd, AS_HELP_STRING([--without-esd],[do not use the EsounD sound support]))
-+AC_ARG_WITH(fontconfig,AS_HELP_STRING([--without-fontconfig],[do not use fontconfig]),
-+ [if test "x$withval" = "xno"; then ac_cv_header_fontconfig_fontconfig_h=no; fi])
-+AC_ARG_WITH(freetype, AS_HELP_STRING([--without-freetype],[do not use the FreeType library]))
-+AC_ARG_WITH(gphoto, AS_HELP_STRING([--without-gphoto],[do not use gphoto (Digital Camera support)]))
-+AC_ARG_WITH(glu, AS_HELP_STRING([--without-glu],[do not use the GLU library]),
-+ [if test "x$withval" = "xno"; then ac_cv_header_GL_glu_h=no; fi])
-+AC_ARG_WITH(gnutls, AS_HELP_STRING([--without-gnutls],[do not use GnuTLS (schannel support)]))
-+AC_ARG_WITH(gsm, AS_HELP_STRING([--without-gsm],[do not use libgsm (GSM 06.10 codec support)]),
-+ [if test "x$withval" = "xno"; then ac_cv_header_gsm_h=no; ac_cv_header_gsm_gsm_h=no; fi])
-+AC_ARG_WITH(hal, AS_HELP_STRING([--without-hal],[do not use HAL (dynamic device support)]))
-+AC_ARG_WITH(jack, AS_HELP_STRING([--without-jack],[do not use the Jack sound support]),
-+ [if test "x$withval" = "xno"; then ac_cv_header_jack_jack_h=no; fi])
-+AC_ARG_WITH(jpeg, AS_HELP_STRING([--without-jpeg],[do not use JPEG]),
-+ [if test "x$withval" = "xno"; then ac_cv_header_jpeglib_h=no; fi])
-+AC_ARG_WITH(ldap, AS_HELP_STRING([--without-ldap],[do not use LDAP]),
-+ [if test "x$withval" = "xno"; then ac_cv_header_ldap_h=no; ac_cv_header_lber_h=no; fi])
-+AC_ARG_WITH(mpg123, AS_HELP_STRING([--without-mpg123],[do not use the mpg123 library]),
-+ [if test "x$withval" = "xno"; then ac_cv_header_mpg123_h=no; fi])
-+AC_ARG_WITH(nas, AS_HELP_STRING([--without-nas],[do not use the NAS sound support]),
-+ [if test "x$withval" = "xno"; then ac_cv_header_audio_audiolib_h=no; fi])
-+AC_ARG_WITH(openal, AS_HELP_STRING([--without-openal],[do not use OpenAL]),
-+ [if test "x$withval" = "xno"; then ac_cv_header_AL_al_h=no; ac_cv_header_OpenAL_al_h=no; fi])
-+AC_ARG_WITH(opengl, AS_HELP_STRING([--without-opengl],[do not use OpenGL]))
-+AC_ARG_WITH(openssl, AS_HELP_STRING([--without-openssl],[do not use OpenSSL]),
-+ [if test "x$withval" = "xno"; then ac_cv_header_openssl_err_h=no; ac_cv_header_openssl_ssl_h=no; fi])
-+AC_ARG_WITH(oss, AS_HELP_STRING([--without-oss],[do not use the OSS sound support]),
-+ [if test "x$withval" = "xno"; then ac_cv_header_soundcard_h=no; ac_cv_header_sys_soundcard_h=no; ac_cv_header_machine_soundcard_h=no; fi])
-+AC_ARG_WITH(png, AS_HELP_STRING([--without-png],[do not use PNG]),
-+ [if test "x$withval" = "xno"; then ac_cv_header_png_h=no; fi])
-+AC_ARG_WITH(pthread, AS_HELP_STRING([--without-pthread],[do not use the pthread library]),
-+ [if test "x$withval" = "xno"; then ac_cv_header_pthread_h=no; fi])
-+AC_ARG_WITH(sane, AS_HELP_STRING([--without-sane],[do not use SANE (scanner support)]))
-+AC_ARG_WITH(tiff, AS_HELP_STRING([--without-tiff],[do not use TIFF]),
-+ [if test "x$withval" = "xno"; then ac_cv_header_tiffio_h=no; fi])
-+AC_ARG_WITH(v4l, AS_HELP_STRING([--without-v4l],[do not use v4l1 (v4l support)]))
-+AC_ARG_WITH(xcomposite,AS_HELP_STRING([--without-xcomposite],[do not use the Xcomposite extension]),
-+ [if test "x$withval" = "xno"; then ac_cv_header_X11_extensions_Xcomposite_h=no; fi])
-+AC_ARG_WITH(xcursor, AS_HELP_STRING([--without-xcursor],[do not use the Xcursor extension]),
-+ [if test "x$withval" = "xno"; then ac_cv_header_X11_Xcursor_Xcursor_h=no; fi])
-+AC_ARG_WITH(xinerama, AS_HELP_STRING([--without-xinerama],[do not use Xinerama (multi-monitor support)]),
-+ [if test "x$withval" = "xno"; then ac_cv_header_X11_extensions_Xinerama_h=no; fi])
-+AC_ARG_WITH(xinput, AS_HELP_STRING([--without-xinput],[do not use the Xinput extension]),
-+ [if test "x$withval" = "xno"; then ac_cv_header_X11_extensions_XInput_h=no; fi])
-+AC_ARG_WITH(xml, AS_HELP_STRING([--without-xml],[do not use XML]))
-+AC_ARG_WITH(xrandr, AS_HELP_STRING([--without-xrandr],[do not use Xrandr (resolution changes)]),
-+ [if test "x$withval" = "xno"; then ac_cv_header_X11_extensions_Xrandr_h=no; fi])
-+AC_ARG_WITH(xrender, AS_HELP_STRING([--without-xrender],[do not use the Xrender extension]),
-+ [if test "x$withval" = "xno"; then ac_cv_header_X11_extensions_Xrender_h=no; fi])
-+AC_ARG_WITH(xshape, AS_HELP_STRING([--without-xshape],[do not use the Xshape extension]),
-+ [if test "x$withval" = "xno"; then ac_cv_header_X11_extensions_shape_h=no; fi])
-+AC_ARG_WITH(xshm, AS_HELP_STRING([--without-xshm],[do not use XShm (shared memory extension)]),
-+ [if test "x$withval" = "xno"; then ac_cv_header_X11_extensions_XShm_h=no; fi])
-+AC_ARG_WITH(xslt, AS_HELP_STRING([--without-xslt],[do not use XSLT]))
-+AC_ARG_WITH(xxf86vm, AS_HELP_STRING([--without-xxf86vm],[do not use XFree video mode extension]),
-+ [if test "x$withval" = "xno"; then ac_cv_header_X11_extensions_xf86vmode_h=no; ac_cv_header_X11_extensions_xf86vmproto_h=no; fi])
-+
-+AC_ARG_WITH(wine-tools,AS_HELP_STRING([--with-wine-tools=DIR],[use Wine tools from directory DIR]))
-+AC_ARG_WITH(wine64, AS_HELP_STRING([--with-wine64=DIR],[use the 64-bit Wine in DIR for a Wow64 build]))
-+
-+AC_CANONICAL_HOST
-+
-+dnl check for out of tree build with unclean source tree
-+case "$srcdir" in
-+ .) ;;
-+ *) if test -f "$srcdir/Makefile" -o -f "$srcdir/include/config.h"; then
-+ AC_MSG_ERROR([you are building out of the source tree, but the source tree contains object files.
-+You need to run 'make distclean' in the source tree first.])
-+ fi ;;
-+esac
-+
-+dnl **** Check for some programs ****
-+
-+AC_PROG_MAKE_SET
-+AC_PROG_CC
-+AC_PROG_CXX
-+dnl We can't use AC_PROG_CPP for winegcc, it uses by default $(CC) -E
-+AC_CHECK_TOOL(CPPBIN,cpp,cpp)
-+AC_DEFINE_UNQUOTED(EXEEXT,["$ac_exeext"],[Define to the file extension for executables.])
-+
-+case $host in
-+ *-darwin*)
-+ if test "x$enable_win64" = "xyes"
-+ then
-+ CC="$CC -m64"
-+ CXX="$CXX -m64"
-+ LD="${LD:-ld} -arch x86_64"
-+ AS="${AS:-as} -arch x86_64"
-+ host_cpu="x86_64"
-+ notice_platform="64-bit "
-+ AC_SUBST(TARGETFLAGS,"-m64")
-+ else
-+ CC="$CC -m32"
-+ CXX="$CXX -m32"
-+ LD="${LD:-ld} -arch i386"
-+ AS="${AS:-as} -arch i386"
-+ host_cpu="i386"
-+ notice_platform="32-bit "
-+ AC_SUBST(TARGETFLAGS,"-m32")
-+ enable_win16=${enable_win16:-yes}
-+ fi
-+ ;;
-+ x86_64*)
-+ if test "x$enable_win64" != "xyes" -a "$cross_compiling" != "yes"
-+ then
-+ CC="$CC -m32"
-+ CXX="$CXX -m32"
-+ AC_MSG_CHECKING([whether $CC works])
-+ AC_LINK_IFELSE(AC_LANG_PROGRAM(),AC_MSG_RESULT([yes]),
-+ [AC_MSG_RESULT([no])
-+ AC_MSG_ERROR([Cannot build a 32-bit program, you need to install 32-bit development libraries.])])
-+ LD="${LD:-ld} -m elf_i386"
-+ AS="${AS:-as} --32"
-+ host_cpu="i386"
-+ notice_platform="32-bit "
-+ AC_SUBST(TARGETFLAGS,"-m32")
-+ enable_win16=${enable_win16:-yes}
-+ else
-+ if test "x${GCC}" = "xyes"
-+ then
-+ AC_MSG_CHECKING([whether $CC supports __builtin_ms_va_list])
-+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stdarg.h>]], [[void func(__builtin_ms_va_list *args);]])],
-+ [AC_MSG_RESULT([yes])],
-+ [AC_MSG_RESULT([no])
-+ AC_MSG_ERROR([You need gcc >= 4.4 to build Wine as 64-bit.])])
-+ fi
-+ AC_SUBST(TARGETFLAGS,"-m64")
-+ fi
-+ ;;
-+ *-mingw32*|*-cygwin*)
-+ enable_win16=${enable_win16:-no}
-+ CFLAGS="$CFLAGS -D_WIN32"
-+ ;;
-+ i[[3456789]]86*)
-+ enable_win16=${enable_win16:-yes}
-+ ;;
-+esac
-+
-+dnl enable_win16 defaults to yes on x86, to no on other CPUs
-+enable_win16=${enable_win16:-no}
-+
-+dnl Disable winetest too if tests are disabled
-+enable_winetest=${enable_winetest:-$enable_tests}
-+
-+dnl Some special cases for the wow64 build
-+if test -n "$with_wine64"
-+then
-+ if test "x$enable_win64" = "xyes"
-+ then
-+ AC_MSG_ERROR([--enable-win64 and --with-wine64 are mutually exclusive.
-+--enable-win64 should be used in the 64-bit build tree, --with-wine64 in the 32-bit Wow64 build tree.])
-+ fi
-+ AC_SUBST([WOW64_DISABLE],[\#])
-+ enable_fonts=${enable_fonts:-no}
-+ enable_server=${enable_server:-no}
-+ enable_tools=${enable_tools:-no}
-+elif test "x$enable_win64" = "xyes"
-+then
-+ test "x$libdir" != "x\${exec_prefix}/lib" || libdir="\${exec_prefix}/lib64"
-+fi
-+
-+AC_CACHE_CHECK([for the directory containing the Wine tools], wine_cv_toolsdir,
-+ [wine_cv_toolsdir="$with_wine_tools"
-+ if test -z "$with_wine_tools"; then
-+ if test "$cross_compiling" = "yes"; then
-+ AC_MSG_ERROR([you must use the --with-wine-tools option when cross-compiling.])
-+ elif test -n "$with_wine64"; then
-+ wine_cv_toolsdir="$with_wine64"
-+ fi
-+ fi
-+ if test -z "$wine_cv_toolsdir"; then
-+ wine_cv_toolsdir="\$(TOPOBJDIR)"
-+ elif test -d "$wine_cv_toolsdir/tools/winebuild"; then
-+ case "$wine_cv_toolsdir" in
-+ /*) ;;
-+ *) wine_cv_toolsdir="\$(TOPOBJDIR)/$wine_cv_toolsdir" ;;
-+ esac
-+ else
-+ AC_MSG_ERROR([could not find Wine tools in $wine_cv_toolsdir])
-+ fi])
-+AC_SUBST(TOOLSDIR,$wine_cv_toolsdir)
-+if test -n "$host_alias" -a "$host_alias" != "$build_alias"
-+then
-+ AC_SUBST(TARGETFLAGS,"-b $host_alias $TARGETFLAGS")
-+fi
-+
-+dnl Check for flex
-+AC_CHECK_PROGS(FLEX,flex,none)
-+if test "$FLEX" = "none"
-+then
-+ AC_MSG_ERROR([no suitable flex found. Please install the 'flex' package.])
-+fi
-+AC_MSG_CHECKING([whether flex is recent enough])
-+cat >conftest.l <<EOF
-+%top{
-+#include "prediluvian.h"
-+}
-+%%
-+EOF
-+if $FLEX -t conftest.l >/dev/null 2>&AS_MESSAGE_LOG_FD
-+then
-+ AC_MSG_RESULT([yes])
-+else
-+ AC_MSG_RESULT([no])
-+ AC_MSG_ERROR([Your flex version is too old. Please install flex version 2.5.33 or newer.])
-+fi
-+
-+dnl Check for bison
-+AC_CHECK_PROGS(BISON,bison,none)
-+if test "$BISON" = "none"
-+then
-+ AC_MSG_ERROR([no suitable bison found. Please install the 'bison' package.])
-+fi
-+
-+AC_CHECK_TOOLS(AR,[ar gar],ar)
-+AC_SUBST(ARFLAGS,rc)
-+AC_PROG_RANLIB
-+AC_CHECK_TOOL(STRIP,strip,strip)
-+AC_PROG_LN_S
-+AC_PROG_EGREP
-+AC_PATH_PROG(LDCONFIG, ldconfig, true, [/sbin /usr/sbin $PATH])
-+AC_PROG_INSTALL
-+dnl Prepend src dir to install path dir if it's a relative path
-+case "$INSTALL" in
-+ [[\\/$]]* | ?:[[\\/]]* ) ;;
-+ *) INSTALL="\\\$(TOPSRCDIR)/$INSTALL" ;;
-+esac
-+
-+dnl Check for lint
-+AC_CHECK_PROGS(LINT, lclint lint)
-+if test "$LINT" = "lint"
-+then
-+ LINTFLAGS="$LINTFLAGS -errchk=%all,no%longptr64 -errhdr=%user -Ncheck=macro -Nlevel=4"
-+ dnl LINTFLAGS='-D_SIZE_T "-Dsize_t=unsigned long" -errchk=longptr64'
-+fi
-+AC_SUBST(LINT)
-+AC_SUBST(LINTFLAGS)
-+
-+dnl Check for various programs
-+AC_CHECK_PROGS(FONTFORGE, fontforge, false)
-+AC_CHECK_PROGS(PKG_CONFIG, pkg-config, false)
-+AC_CHECK_PROGS(RSVG, rsvg, false)
-+AC_CHECK_PROGS(CONVERT, convert, false)
-+AC_CHECK_PROGS(ICOTOOL, icotool, false)
-+
-+if test "x$enable_maintainer_mode" != "xyes"
-+then
-+ AC_SUBST([MAINTAINER_MODE],[\#])
-+else
-+ if test "$FONTFORGE" = "false"; then WINE_WARNING([fontforge is missing, fonts can't be rebuilt.]); fi
-+ if test "$RSVG" = "false"; then WINE_WARNING([rsvg is missing, icons can't be rebuilt.]); fi
-+
-+ dnl Check the imagemagick version
-+ if test "$CONVERT" = false
-+ then
-+ WINE_WARNING([imagemagick is missing, icons can't be rebuilt.])
-+ else
-+ AC_MSG_CHECKING([for recent enough imagemagick])
-+ convert_version=`convert --version | head -n1`
-+ if test "x$convert_version" != "x"
-+ then
-+ convert_version_major=`expr "$convert_version" : '.* \([[0-9]]*\)\.[[0-9]]*'`
-+ convert_version_minor=`expr "$convert_version" : '.* [[0-9]]*\.\([[0-9]]*\)'`
-+ if test "$convert_version_major" -eq 6 -a "$convert_version_minor" -lt 6
-+ then
-+ CONVERT=false
-+ WINE_WARNING([imagemagick version 6.6 or newer is needed to rebuild icons.])
-+ fi
-+ fi
-+ if test "$CONVERT" = false
-+ then
-+ AC_MSG_RESULT([no ($convert_version_major.$convert_version_minor)])
-+ else
-+ AC_MSG_RESULT([yes ($convert_version_major.$convert_version_minor)])
-+ fi
-+ fi
-+
-+ dnl Check the icotool version
-+ if test "$ICOTOOL" = false
-+ then
-+ WINE_WARNING([icotool is missing, icons can't be rebuilt.])
-+ else
-+ AC_MSG_CHECKING([for recent enough icotool])
-+ icotool_version=`icotool --version | head -n1`
-+ if test "x$icotool_version" != "x"
-+ then
-+ icotool_version_major=`expr "$icotool_version" : '.* \([[0-9]]*\)\.[[0-9]]*'`
-+ icotool_version_minor=`expr "$icotool_version" : '.* [[0-9]]*\.\([[0-9]]*\)'`
-+ if test "$icotool_version_major" -eq 0 -a "$icotool_version_minor" -lt 29
-+ then
-+ ICOTOOL=false
-+ WINE_WARNING([icotool version 0.29.0 or newer is needed to rebuild icons.])
-+ fi
-+ fi
-+ if test "$ICOTOOL" = false
-+ then
-+ AC_MSG_RESULT([no ($icotool_version_major.$icotool_version_minor)])
-+ else
-+ AC_MSG_RESULT([yes ($icotool_version_major.$icotool_version_minor)])
-+ fi
-+ fi
-+
-+fi
-+
-+case $host_cpu in
-+ *i[[3456789]]86*)
-+ AC_PATH_PROG(PRELINK, prelink, false, [/sbin /usr/sbin $PATH])
-+ ;;
-+esac
-+
-+dnl **** Check for some libraries ****
-+
-+dnl Check for -li386 for NetBSD and OpenBSD
-+AC_CHECK_LIB(i386,i386_set_ldt)
-+dnl Check for -lossaudio for NetBSD
-+AC_CHECK_LIB(ossaudio,_oss_ioctl)
-+
-+AC_SUBST(XLIB,"")
-+AC_SUBST(OPENGL_LIBS,"")
-+
-+dnl **** Check for header files ****
-+
-+AC_SYS_LARGEFILE()
-+
-+AC_CHECK_HEADERS(\
-+ AL/al.h \
-+ AudioToolbox/AudioConverter.h \
-+ AudioUnit/AudioUnit.h \
-+ Carbon/Carbon.h \
-+ CoreAudio/CoreAudio.h \
-+ DiskArbitration/DiskArbitration.h \
-+ IOKit/IOKitLib.h \
-+ IOKit/hid/IOHIDLib.h \
-+ OpenAL/al.h \
-+ alias.h \
-+ alsa/asoundlib.h \
-+ arpa/inet.h \
-+ arpa/nameser.h \
-+ asm/types.h \
-+ capi20.h \
-+ curses.h \
-+ direct.h \
-+ dirent.h \
-+ dlfcn.h \
-+ elf.h \
-+ float.h \
-+ fnmatch.h \
-+ fontconfig/fontconfig.h \
-+ getopt.h \
-+ grp.h \
-+ gsm.h \
-+ gsm/gsm.h \
-+ ieeefp.h \
-+ inet/mib2.h \
-+ io.h \
-+ jack/jack.h \
-+ jpeglib.h \
-+ kstat.h \
-+ lber.h \
-+ lcms.h \
-+ lcms/lcms.h \
-+ ldap.h \
-+ libaudioio.h \
-+ link.h \
-+ linux/cdrom.h \
-+ linux/compiler.h \
-+ linux/hdreg.h \
-+ linux/input.h \
-+ linux/ioctl.h \
-+ linux/joystick.h \
-+ linux/major.h \
-+ linux/param.h \
-+ linux/serial.h \
-+ linux/types.h \
-+ linux/ucdrom.h \
-+ mach-o/nlist.h \
-+ mach/mach.h \
-+ mach/machine.h \
-+ machine/cpu.h \
-+ machine/limits.h \
-+ machine/soundcard.h \
-+ machine/sysarch.h \
-+ mntent.h \
-+ mpg123.h \
-+ ncurses.h \
-+ netdb.h \
-+ netinet/in.h \
-+ netinet/in_systm.h \
-+ netinet/tcp.h \
-+ netinet/tcp_fsm.h \
-+ openssl/err.h \
-+ openssl/ssl.h \
-+ png.h \
-+ poll.h \
-+ port.h \
-+ process.h \
-+ pthread.h \
-+ pwd.h \
-+ regex.h \
-+ sched.h \
-+ scsi/scsi.h \
-+ scsi/scsi_ioctl.h \
-+ scsi/sg.h \
-+ soundcard.h \
-+ stdbool.h \
-+ stdint.h \
-+ strings.h \
-+ stropts.h \
-+ sys/asoundlib.h \
-+ sys/cdio.h \
-+ sys/elf32.h \
-+ sys/epoll.h \
-+ sys/errno.h \
-+ sys/event.h \
-+ sys/exec_elf.h \
-+ sys/filio.h \
-+ sys/inotify.h \
-+ sys/ioctl.h \
-+ sys/ipc.h \
-+ sys/limits.h \
-+ sys/link.h \
-+ sys/mman.h \
-+ sys/modem.h \
-+ sys/msg.h \
-+ sys/mtio.h \
-+ sys/param.h \
-+ sys/poll.h \
-+ sys/prctl.h \
-+ sys/protosw.h \
-+ sys/ptrace.h \
-+ sys/resource.h \
-+ sys/scsiio.h \
-+ sys/shm.h \
-+ sys/signal.h \
-+ sys/socket.h \
-+ sys/socketvar.h \
-+ sys/sockio.h \
-+ sys/soundcard.h \
-+ sys/statvfs.h \
-+ sys/strtio.h \
-+ sys/syscall.h \
-+ sys/tihdr.h \
-+ sys/time.h \
-+ sys/timeout.h \
-+ sys/times.h \
-+ sys/uio.h \
-+ sys/un.h \
-+ sys/utsname.h \
-+ sys/vm86.h \
-+ sys/wait.h \
-+ syscall.h \
-+ termios.h \
-+ tiffio.h \
-+ unistd.h \
-+ utime.h \
-+ valgrind/memcheck.h \
-+ valgrind/valgrind.h \
-+ zlib.h
-+)
-+AC_HEADER_STAT()
-+
-+dnl **** Checks for headers that depend on other ones ****
-+
-+AC_CHECK_HEADERS([sys/mount.h sys/statfs.h sys/sysctl.h sys/user.h sys/vfs.h],,,
-+ [#include <sys/types.h>
-+ #ifdef HAVE_SYS_PARAM_H
-+ # include <sys/param.h>
-+ #endif])
-+
-+AC_CHECK_HEADERS(\
-+ netinet/ip.h \
-+ net/if.h \
-+ net/if_arp.h \
-+ net/if_dl.h \
-+ net/if_types.h \
-+ net/route.h \
-+ netinet/if_ether.h \
-+ netinet/if_inarp.h \
-+ netinet/in_pcb.h \
-+ netinet/ip_icmp.h \
-+ netinet/ip_var.h \
-+ netinet/udp.h \
-+ netipx/ipx.h \
-+,,,[#include <sys/types.h>
-+ #ifdef HAVE_SYS_SOCKET_H
-+ # include <sys/socket.h>
-+ #endif
-+ #ifdef HAVE_SYS_SOCKETVAR_H
-+ # include <sys/socketvar.h>
-+ #endif
-+ #ifdef HAVE_NET_ROUTE_H
-+ # include <net/route.h>
-+ #endif
-+ #ifdef HAVE_NETINET_IN_H
-+ # include <netinet/in.h>
-+ #endif
-+ #ifdef HAVE_NETINET_IN_SYSTM_H
-+ # include <netinet/in_systm.h>
-+ #endif
-+ #ifdef HAVE_NET_IF_H
-+ # include <net/if.h>
-+ #endif
-+ #ifdef HAVE_NETINET_IP_H
-+ # include <netinet/ip.h>
-+ #endif])
-+
-+AC_CHECK_HEADERS([netinet/tcp_timer.h netinet/udp_var.h netinet/icmp_var.h netinet/tcp_var.h ],,,
-+ [#include <sys/types.h>
-+ #ifdef HAVE_ALIAS_H
-+ # include <alias.h>
-+ #endif
-+ #ifdef HAVE_SYS_SOCKET_H
-+ # include <sys/socket.h>
-+ #endif
-+ #ifdef HAVE_SYS_SOCKETVAR_H
-+ # include <sys/socketvar.h>
-+ #endif
-+ #ifdef HAVE_SYS_TIMEOUT_H
-+ # include <sys/timeout.h>
-+ #endif
-+ #ifdef HAVE_NETINET_IN_H
-+ # include <netinet/in.h>
-+ #endif
-+ #ifdef HAVE_NETINET_IN_SYSTM_H
-+ # include <netinet/in_systm.h>
-+ #endif
-+ #ifdef HAVE_NETINET_IP_H
-+ # include <netinet/ip.h>
-+ #endif
-+ #ifdef HAVE_NETINET_IP_VAR_H
-+ # include <netinet/ip_var.h>
-+ #endif
-+ #ifdef HAVE_NETINET_IP_ICMP_H
-+ # include <netinet/ip_icmp.h>
-+ #endif
-+ #ifdef HAVE_NETINET_UDP_H
-+ # include <netinet/udp.h>
-+ #endif
-+ #ifdef HAVE_NETINET_TCP_H
-+ # include <netinet/tcp.h>
-+ #endif
-+ #ifdef HAVE_NETINET_TCP_TIMER_H
-+ #include <netinet/tcp_timer.h>
-+ #endif])
-+
-+AC_CHECK_HEADERS([linux/ipx.h linux/irda.h],,,
-+ [#include <sys/types.h>
-+ #ifdef HAVE_ASM_TYPES_H
-+ # include <asm/types.h>
-+ #endif
-+ #ifdef HAVE_SYS_SOCKET_H
-+ # include <sys/socket.h>
-+ #endif
-+ #ifdef HAVE_LINUX_TYPES_H
-+ # include <linux/types.h>
-+ #endif])
-+
-+AC_CHECK_HEADERS([mach-o/dyld_images.h],,,
-+ [#ifdef HAVE_STDBOOL_H
-+ # include <stdbool.h>
-+ #endif
-+ #ifdef HAVE_STDINT_H
-+ # include <stdint.h>
-+ #endif])
-+
-+AC_CHECK_HEADERS([resolv.h],,,
-+ [#include <sys/types.h>
-+ #ifdef HAVE_SYS_SOCKET_H
-+ # include <sys/socket.h>
-+ #endif
-+ #ifdef HAVE_NETINET_IN_H
-+ # include <netinet/in.h>
-+ #endif
-+ #ifdef HAVE_ARPA_NAMESER_H
-+ # include <arpa/nameser.h>
-+ #endif])
-+
-+AC_CHECK_HEADERS([ifaddrs.h],,,[#include <sys/types.h>])
-+
-+AC_CHECK_HEADERS(ucontext.h,,,[#include <signal.h>])
-+
-+AC_CHECK_HEADERS([sys/thr.h],,,
-+[#include <sys/types.h>
-+#ifdef HAVE_UCONTEXT_H
-+#include <ucontext.h>
-+#endif])
-+
-+AC_CHECK_HEADERS([pthread_np.h],,,
-+[#ifdef HAVE_PTHREAD_H
-+#include <pthread.h>
-+#endif])
-+
-+AC_CHECK_HEADERS([linux/videodev.h],,,
-+[#ifdef HAVE_SYS_TIME_H
-+#include <sys/time.h>
-+#endif
-+#include <sys/types.h>
-+#ifdef HAVE_ASM_TYPES_H
-+#include <asm/types.h>
-+#endif])
-+
-+dnl Check for broken kernel header that doesn't define __user
-+AC_CHECK_HEADERS([linux/capi.h],,,[#define __user])
-+
-+dnl **** Check for working dll ****
-+
-+AC_SUBST(DLLEXT,"")
-+AC_SUBST(DLLFLAGS,"-D_REENTRANT")
-+AC_SUBST(LDSHARED,"")
-+AC_SUBST(LDDLLFLAGS,"")
-+AC_SUBST(LIBEXT,"so")
-+AC_SUBST(IMPLIBEXT,"def")
-+AC_SUBST(LDRPATH_INSTALL,"")
-+AC_SUBST(LDRPATH_LOCAL,"")
-+STATIC_IMPLIBEXT="def.a"
-+WINE_PATH_LDD
-+
-+case $host_os in
-+ cygwin*|mingw32*)
-+ AC_CHECK_TOOL(DLLTOOL,dlltool,false)
-+ AC_CHECK_TOOL(DLLWRAP,dllwrap,false)
-+ if test "$DLLWRAP" = "false"; then
-+ LIBEXT="a"
-+ else
-+ dnl FIXME - check whether dllwrap works correctly...
-+ LIBEXT="dll"
-+ fi
-+ IMPLIBEXT="a"
-+ STATIC_IMPLIBEXT="a"
-+ dnl Disable modules that can't be used on Windows
-+ enable_iphlpapi=${enable_iphlpapi:-no}
-+ enable_kernel32=${enable_kernel32:-no}
-+ enable_msvcrt=${enable_msvcrt:-no}
-+ enable_ntdll=${enable_ntdll:-no}
-+ enable_ws2_32=${enable_ws2_32:-no}
-+ enable_loader=${enable_loader:-no}
-+ enable_server=${enable_server:-no}
-+ dnl Disable dependencies that are not useful on Windows
-+ with_x=${with_x:-no}
-+ with_pthread=${with_pthread:-no}
-+ ;;
-+ darwin*|macosx*)
-+ DLLEXT=".so"
-+ LIBEXT="dylib"
-+ DLLFLAGS="$DLLFLAGS -fPIC"
-+ LDDLLFLAGS="-bundle -multiply_defined suppress"
-+ LIBWINE_LDFLAGS="-multiply_defined suppress"
-+ LDSHARED="\$(CC) -dynamiclib"
-+ STRIP="$STRIP -x"
-+ LDRPATH_LOCAL="&& install_name_tool -change @executable_path/\`\$(RELPATH) \$(bindir) \$(libdir)\`/libwine.1.dylib @executable_path/\$(TOPOBJDIR)/libs/wine/libwine.1.dylib \$@ || \$(RM) \$@"
-+ dnl declare needed frameworks
-+ AC_SUBST(SECURITYLIB,"-framework Security -framework CoreFoundation")
-+ AC_SUBST(COREFOUNDATIONLIB,"-framework CoreFoundation")
-+ AC_SUBST(IOKITLIB,"-framework IOKit -framework CoreFoundation")
-+ AC_SUBST(LDEXECFLAGS,["-image_base 0x7bf00000 -Wl,-segaddr,WINE_DOS,0x00000000,-segaddr,WINE_SHAREDHEAP,0x7f000000"])
-+ if test "$ac_cv_header_DiskArbitration_DiskArbitration_h" = "yes"
-+ then
-+ dnl DiskArbitration API is not public on Darwin < 8.0, use it only if header found
-+ AC_SUBST(DISKARBITRATIONLIB,"-framework DiskArbitration -framework CoreFoundation")
-+ fi
-+ if test "$ac_cv_header_CoreAudio_CoreAudio_h" = "yes" -a "$ac_cv_header_AudioUnit_AudioUnit_h" = "yes"
-+ then
-+ dnl CoreServices needed by AudioUnit
-+ AC_SUBST(COREAUDIO,"-framework CoreAudio -framework AudioUnit -framework CoreServices -framework AudioToolbox -framework CoreMIDI")
-+ fi
-+ if test "$ac_cv_header_OpenAL_al_h" = "yes"
-+ then
-+ AC_SUBST(FRAMEWORK_OPENAL,"-framework OpenAL")
-+ AC_DEFINE_UNQUOTED(HAVE_OPENAL,1,[Define to 1 if OpenAL is available])
-+ ac_cv_lib_openal=yes
-+ fi
-+ if test "$ac_cv_header_IOKit_hid_IOHIDLib_h" = "yes"
-+ then
-+ ac_save_LIBS="$LIBS"
-+ LIBS="$LIBS $IOKITLIB"
-+ AC_CHECK_FUNCS(IOHIDManagerCreate)
-+ LIBS="$ac_save_LIBS"
-+ fi
-+ case $host_cpu in
-+ *powerpc*)
-+ LDDLLFLAGS="$LDDLLFLAGS -read_only_relocs warning" dnl FIXME
-+ ;;
-+ esac
-+ dnl Enable quartz driver on Mac OS X
-+ if test "$ac_cv_header_Carbon_Carbon_h" = "yes"
-+ then
-+ AC_SUBST(CARBONLIB,"-framework Carbon")
-+ enable_winequartz_drv=${enable_winequartz_drv:-yes}
-+ fi
-+ dnl Check for Xcode 3.x broken 16-bit support
-+ if test "x$enable_win16" = "xyes"
-+ then
-+ AC_MSG_CHECKING([whether 16-bit code can be built correctly])
-+ AC_RUN_IFELSE(AC_LANG_PROGRAM([[asm(".text\n"
-+ "bad:\tnop;nop\n"
-+ "good:\tnop;nop\n\t"
-+ ".globl _testfunc\n"
-+ "_testfunc:\tcallw good");
-+ extern void testfunc();]],
-+ [[unsigned short *p = (unsigned short *)testfunc;
-+ return p[[0]] != 0xe866 || p[[1]] != 0xfffa]]),
-+ AC_MSG_RESULT(yes),
-+ [AC_MSG_RESULT(no)
-+ AC_MSG_ERROR([Xcode 3.x cannot build 16-bit code correctly. Use --disable-win16 if you don't need 16-bit support.])],
-+ AC_MSG_RESULT([[cross-compiling, assuming yes]]))
-+ fi
-+ ;;
-+ *)
-+ DLLFLAGS="$DLLFLAGS -fPIC"
-+ DLLEXT=".so"
-+ AC_CACHE_CHECK([whether we can build a GNU style ELF dll], ac_cv_c_dll_gnuelf,
-+ [WINE_TRY_SHLIB_FLAGS([-fPIC -shared -Wl,-Bsymbolic],
-+ ac_cv_c_dll_gnuelf="yes",ac_cv_c_dll_gnuelf="no")])
-+ if test "$ac_cv_c_dll_gnuelf" = "yes"
-+ then
-+ LDSHARED="\$(CC) -shared"
-+ LDDLLFLAGS="-shared -Wl,-Bsymbolic"
-+ WINE_TRY_CFLAGS([-fPIC -shared -Wl,-soname,confest.so.1],
-+ [LDSHARED="\$(CC) -shared \$(SONAME:%=-Wl,-soname,%)"],
-+ [WINE_TRY_CFLAGS([-fPIC -shared -Wl,-h,confest.so.1],
-+ [LDSHARED="\$(CC) -shared \$(SONAME:%=-Wl,-h,%)"])])
-+
-+ WINE_TRY_CFLAGS([-fPIC -shared -Wl,-Bsymbolic,-z,defs], [LDDLLFLAGS="$LDDLLFLAGS,-z,defs"])
-+
-+ WINE_TRY_CFLAGS([-fPIC -shared -Wl,-Bsymbolic,-init,__wine_spec_init,-fini,__wine_spec_fini],
-+ [LDDLLFLAGS="$LDDLLFLAGS,-init,__wine_spec_init,-fini,__wine_spec_fini"])
-+
-+ echo '{ global: *; };' >conftest.map
-+ WINE_TRY_CFLAGS([-fPIC -shared -Wl,--version-script=conftest.map],
-+ [LDSHARED="$LDSHARED \$(VERSCRIPT:%=-Wl,--version-script=%)"])
-+ rm -f conftest.map
-+
-+ WINE_TRY_CFLAGS([-fPIC -Wl,--export-dynamic],
-+ [AC_SUBST(LDEXECFLAGS,["-Wl,--export-dynamic"])])
-+
-+ WINE_TRY_CFLAGS([-fPIC -Wl,--rpath,\$ORIGIN/../lib],
-+ [LDRPATH_INSTALL="-Wl,--rpath,\\\$\$ORIGIN/\`\$(RELPATH) \$(bindir) \$(libdir)\`"
-+ LDRPATH_LOCAL="-Wl,--rpath,\\\$\$ORIGIN/\$(TOPOBJDIR)/libs/wine"],
-+ [WINE_TRY_CFLAGS([-fPIC -Wl,-R,\$ORIGIN/../lib],
-+ [LDRPATH_INSTALL="-Wl,-R,\\\$\$ORIGIN/\`\$(RELPATH) \$(bindir) \$(libdir)\`"
-+ LDRPATH_LOCAL="-Wl,-R,\\\$\$ORIGIN/\$(TOPOBJDIR)/libs/wine"])])
-+
-+ WINE_TRY_CFLAGS([-Wl,--enable-new-dtags],
-+ [LDRPATH_INSTALL="$LDRPATH_INSTALL -Wl,--enable-new-dtags"])
-+
-+ case $host_cpu in
-+ *i[[3456789]]86* | x86_64)
-+ WINE_TRY_CFLAGS([-Wl,--section-start,.interp=0x7bf00400],
-+ [LDEXECFLAGS="$LDEXECFLAGS -Wl,--section-start,.interp=0x7bf00400"])
-+ ;;
-+ esac
-+
-+ else
-+ AC_CACHE_CHECK(whether we can build a UnixWare (Solaris) dll, ac_cv_c_dll_unixware,
-+ [WINE_TRY_SHLIB_FLAGS([-fPIC -Wl,-G,-h,conftest.so.1.0,-B,symbolic],
-+ ac_cv_c_dll_unixware="yes",ac_cv_c_dll_unixware="no")])
-+ if test "$ac_cv_c_dll_unixware" = "yes"
-+ then
-+ LDSHARED="\$(CC) -Wl,-G \$(SONAME:%=-Wl,-h,%)"
-+ LDDLLFLAGS="-Wl,-G,-B,symbolic"
-+
-+ else
-+ AC_CACHE_CHECK(whether we can build an HP-UX dll, ac_cv_c_dll_hpux,
-+ [WINE_TRY_SHLIB_FLAGS([-shared], ac_cv_c_dll_hpux="yes", ac_cv_c_dll_hpux="no")])
-+ if test "$ac_cv_c_dll_hpux" = "yes"
-+ then
-+ LIBEXT="sl"
-+ DLLEXT=".sl"
-+ LDDLLFLAGS="-shared -fPIC"
-+ LDSHARED="\$(CC) -shared"
-+ fi
-+ fi
-+ fi
-+ ;;
-+esac
-+
-+enable_winequartz_drv=${enable_winequartz_drv:-no}
-+
-+if test "$LIBEXT" = "a"; then
-+ AC_MSG_ERROR(
-+[could not find a way to build shared libraries.
-+It is currently not possible to build Wine without shared library
-+(.so) support to allow transparent switch between .so and .dll files.
-+If you are using Linux, you will need a newer binutils.]
-+)
-+fi
-+
-+dnl Check for cross compiler to build test programs
-+AC_SUBST([CROSSTEST_DISABLE],[\#])
-+if test "$cross_compiling" = "no" -a "x$enable_tests" != xno -a "$LIBEXT" != "dll"
-+then
-+ WINE_CHECK_MINGW_PROG(CROSSCC,gcc,false)
-+ if test "$CROSSCC" != "false"
-+ then
-+ CROSSTEST_DISABLE=""
-+ set x $CROSSCC
-+ shift
-+ target=""
-+ while test $# -ge 1
-+ do
-+ case "$1" in
-+ *-gcc) target=`expr "$1" : '\(.*\)-gcc'` ;;
-+ esac
-+ shift
-+ done
-+ if test -n "$target"
-+ then
-+ AC_SUBST(CROSSTARGET,"$target")
-+ fi
-+ fi
-+fi
-+
-+dnl **** Check for pthread ****
-+
-+if test "$ac_cv_header_pthread_h" = "yes"
-+then
-+ AC_CHECK_LIB(pthread,pthread_create,[AC_SUBST(LIBPTHREAD,"-lpthread")])
-+fi
-+WINE_ERROR_WITH(pthread,[test "x$LIBPTHREAD" = "x"],[pthread ${notice_platform}development files not found.
-+Wine cannot support threads without libpthread.])
-+
-+dnl **** Check for X11 ****
-+
-+AC_PATH_XTRA
-+
-+if test "$have_x" = "yes"
-+then
-+ XLIB="-lX11"
-+ ac_save_CPPFLAGS="$CPPFLAGS"
-+ CPPFLAGS="$CPPFLAGS $X_CFLAGS"
-+
-+ WINE_CHECK_SONAME(X11,XCreateWindow,,,[$X_LIBS $X_EXTRA_LIBS])
-+ WINE_CHECK_SONAME(Xext,XextCreateExtension,[XLIB="-lXext $XLIB"],,[$X_LIBS -lX11 $X_EXTRA_LIBS])
-+
-+ dnl *** All of the following tests require X11/Xlib.h
-+ AC_CHECK_HEADERS([X11/Xlib.h \
-+ X11/XKBlib.h \
-+ X11/Xutil.h \
-+ X11/Xcursor/Xcursor.h \
-+ X11/extensions/shape.h \
-+ X11/extensions/XInput.h \
-+ X11/extensions/XShm.h \
-+ X11/extensions/Xcomposite.h \
-+ X11/extensions/Xinerama.h \
-+ X11/extensions/Xrandr.h \
-+ X11/extensions/Xrender.h \
-+ X11/extensions/xf86vmode.h \
-+ X11/extensions/xf86vmproto.h],,,
-+[#ifdef HAVE_X11_XLIB_H
-+# include <X11/Xlib.h>
-+#endif
-+#ifdef HAVE_X11_XUTIL_H
-+# include <X11/Xutil.h>
-+#endif])
-+
-+ dnl *** Check for X keyboard extension
-+ if test "$ac_cv_header_X11_XKBlib_h" = "yes"
-+ then
-+ AC_CHECK_LIB(X11, XkbQueryExtension,
-+ AC_DEFINE(HAVE_XKB, 1, [Define if you have the XKB extension]),,
-+ $X_LIBS $XLIB $X_EXTRA_LIBS)
-+ fi
-+
-+ dnl *** Check for X cursor
-+ if test "$ac_cv_header_X11_Xcursor_Xcursor_h" = "yes"
-+ then
-+ WINE_CHECK_SONAME(Xcursor,XcursorImageLoadCursor,,,[$X_LIBS $XLIB $X_EXTRA_LIBS])
-+ fi
-+ WINE_NOTICE_WITH(xcursor,[test "x$ac_cv_lib_soname_Xcursor" = "x"],
-+ [libxcursor ${notice_platform}development files not found, the Xcursor extension won't be supported.])
-+
-+ dnl *** Check for X input extension
-+ if test "$ac_cv_header_X11_extensions_XInput_h" = "yes"
-+ then
-+ WINE_CHECK_SONAME(Xi,XOpenDevice,,,[$X_LIBS $XLIB $X_EXTRA_LIBS])
-+ fi
-+ WINE_NOTICE_WITH(xinput,[test "x$ac_cv_lib_soname_Xi" = "x"],
-+ [libxi ${notice_platform}development files not found, the Xinput extension won't be supported.])
-+
-+ dnl *** Check for X Shm extension
-+ if test "$ac_cv_header_X11_extensions_XShm_h" = "yes"
-+ then
-+ AC_CHECK_LIB(Xext, XShmQueryExtension,
-+ AC_DEFINE(HAVE_LIBXXSHM, 1, [Define if you have the X Shm extension]),,
-+ $X_LIBS $XLIB $X_EXTRA_LIBS)
-+ fi
-+ WINE_NOTICE_WITH(xshm,[test "$ac_cv_lib_Xext_XShmQueryExtension" != "yes"],
-+ [XShm ${notice_platform}development files not found, X Shared Memory won't be supported.])
-+
-+ dnl *** Check for X shape extension
-+ if test "$ac_cv_header_X11_extensions_shape_h" = "yes"
-+ then
-+ AC_CHECK_LIB(Xext,XShapeQueryExtension,
-+ AC_DEFINE(HAVE_LIBXSHAPE, 1, [Define if you have the X Shape extension]),,
-+ $X_LIBS $XLIB $X_EXTRA_LIBS)
-+ fi
-+ WINE_NOTICE_WITH(xshape,[test "$ac_cv_lib_Xext_XShapeQueryExtension" != "yes"],
-+ [XShape ${notice_platform}development files not found, XShape won't be supported.])
-+
-+ dnl *** Check for XFree86 VMODE extension
-+ if test "$ac_cv_header_X11_extensions_xf86vmode_h" = "yes" -o "$ac_cv_header_X11_extensions_xf86vmproto_h" = "yes"
-+ then
-+ WINE_CHECK_SONAME(Xxf86vm,XF86VidModeQueryExtension,,,[$X_LIBS $XLIB $X_EXTRA_LIBS])
-+ fi
-+ WINE_NOTICE_WITH(xxf86vm,[test "x$ac_cv_lib_soname_Xxf86vm" = "x"],
-+ [libXxf86vm ${notice_platform}development files not found, XFree86 Vidmode won't be supported.])
-+
-+ dnl *** Check for Transform functions in Xrender
-+ if test "$ac_cv_header_X11_extensions_Xrender_h" = "yes" -a "x$ac_cv_lib_soname_X11" != "x" -a "x$ac_cv_lib_soname_Xext" != "x"
-+ then
-+ WINE_CHECK_SONAME(Xrender,XRenderQueryExtension,
-+ [AC_CHECK_LIB(Xrender,XRenderSetPictureTransform,
-+ [AC_DEFINE(HAVE_XRENDERSETPICTURETRANSFORM, 1,
-+ [Define if Xrender has the XRenderSetPictureTransform function])],,
-+ [$X_LIBS $XLIB $X_EXTRA_LIBS])],,[$X_LIBS $XLIB $X_EXTRA_LIBS])
-+
-+ fi
-+ WINE_WARNING_WITH(xrender,[test "x$ac_cv_lib_soname_Xrender" = "x"],
-+ [libxrender ${notice_platform}development files not found, XRender won't be supported.])
-+
-+ dnl *** Check for X RandR extension
-+ if test "$ac_cv_header_X11_extensions_Xrandr_h" = "yes" -a "x$ac_cv_lib_soname_Xrender" != "x"
-+ then
-+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <X11/Xlib.h>
-+#include <X11/extensions/Xrandr.h>]], [[static typeof(XRRSetScreenConfigAndRate) * func;]])],
-+ [WINE_CHECK_SONAME(Xrandr,XRRQueryExtension,,,[$X_LIBS $XLIB $X_EXTRA_LIBS])])
-+ fi
-+ WINE_NOTICE_WITH(xrandr,[test "x$ac_cv_lib_soname_Xrandr" = "x"],
-+ [libxrandr ${notice_platform}development files not found, XRandr won't be supported.])
-+
-+ dnl *** Check for Xinerama extension
-+ if test "$ac_cv_header_X11_extensions_Xinerama_h" = "yes"
-+ then
-+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <X11/Xlib.h>
-+#include <X11/extensions/Xinerama.h>]], [[static typeof(XineramaQueryScreens) * func;]])],
-+ [WINE_CHECK_SONAME(Xinerama,XineramaQueryScreens,,,[$X_LIBS $XLIB $X_EXTRA_LIBS])])
-+ fi
-+ WINE_NOTICE_WITH(xinerama,[test "x$ac_cv_lib_soname_Xinerama" = "x"],
-+ [libxinerama ${notice_platform}development files not found, multi-monitor setups won't be supported.])
-+
-+ dnl *** Check for X Composite extension
-+ if test "$ac_cv_header_X11_extensions_Xcomposite_h" = "yes"
-+ then
-+ WINE_CHECK_SONAME(Xcomposite,XCompositeRedirectWindow,,,[$X_LIBS $XLIB $X_EXTRA_LIBS])
-+ fi
-+ WINE_NOTICE_WITH(xcomposite,[test "x$ac_cv_lib_soname_Xcomposite" = "x"],
-+ [libxcomposite ${notice_platform}development files not found, Xcomposite won't be supported.])
-+
-+ dnl *** Check for XICCallback struct
-+ AC_CHECK_MEMBERS([XICCallback.callback],,,
-+[#ifdef HAVE_X11_XLIB_H
-+#include <X11/Xlib.h>
-+#endif])
-+
-+ dnl *** End of X11/Xlib.h check
-+
-+ dnl Check for the presence of OpenGL
-+ opengl_msg=""
-+ if test "x$with_opengl" != "xno"
-+ then
-+ AC_CHECK_HEADERS(GL/gl.h GL/glx.h GL/glu.h,,,
-+[#ifdef HAVE_GL_GLX_H
-+# include <GL/glx.h>
-+#endif])
-+ if test "$ac_cv_header_GL_gl_h" = "yes" -a "$ac_cv_header_GL_glx_h" = "yes"
-+ then
-+ dnl Check for some problems due to old Mesa versions
-+ AC_CACHE_CHECK([for up-to-date OpenGL version], wine_cv_opengl_header_version_OK,
-+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <GL/gl.h>]], [[GLenum test = GL_UNSIGNED_SHORT_5_6_5;]])],
-+ [wine_cv_opengl_header_version_OK="yes"],
-+ [wine_cv_opengl_header_version_OK="no"]))
-+
-+ if test "$wine_cv_opengl_header_version_OK" = "yes"
-+ then
-+ dnl Check for the presence of the library
-+ WINE_CHECK_SONAME(GL,glXCreateContext,
-+ [OPENGL_LIBS="-lGL"
-+ AC_DEFINE(HAVE_OPENGL, 1, [Define if OpenGL is present on the system])],
-+ [WINE_CHECK_SONAME(GL,glXCreateContext,
-+ [OPENGL_LIBS="-Xlinker -dylib_file -Xlinker /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.dylib:/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.dylib -lGL"
-+ AC_DEFINE(HAVE_OPENGL, 1, [Define if OpenGL is present on the system])],
-+ [if test -f /usr/X11R6/lib/libGL.a
-+ then
-+ opengl_msg="/usr/X11R6/lib/libGL.a is present on your system.
-+This probably prevents linking to OpenGL. Try deleting the file and restarting configure."
-+ else
-+ opengl_msg="No OpenGL library found on this system."
-+ fi],
-+ $X_LIBS $XLIB -lm $X_EXTRA_LIBS -dylib_file /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.dylib:/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.dylib)],
-+ $X_LIBS $XLIB -lm $X_EXTRA_LIBS)
-+ if test "$ac_cv_header_GL_glu_h" = "yes"
-+ then
-+ WINE_CHECK_SONAME(GLU,gluLookAt,,,[$OPENGL_LIBS $X_LIBS $X_PRE_LIBS $XLIB -lm $X_EXTRA_LIBS])
-+ fi
-+ WINE_NOTICE_WITH(glu,[test "x$ac_cv_lib_soname_GLU" = "x"],
-+ [libGLU ${notice_platform}development files not found, GLU won't be supported.])
-+ else
-+ opengl_msg="Old Mesa headers detected. Consider upgrading your Mesa libraries."
-+ fi
-+ else
-+ opengl_msg="OpenGL development headers not found."
-+ fi
-+ test -n "$opengl_msg" && enable_opengl32=${enable_opengl32:-no}
-+ test "x$ac_cv_lib_soname_GLU" = "x" && enable_glu32=${enable_glu32:-no}
-+ else
-+ enable_opengl32=${enable_opengl32:-no}
-+ enable_glu32=${enable_glu32:-no}
-+ fi
-+ WINE_WARNING_WITH(opengl,[test -n "$opengl_msg"],[$opengl_msg
-+OpenGL and Direct3D won't be supported.])
-+
-+ dnl **** Check for NAS ****
-+ AC_SUBST(NASLIBS,"")
-+ AC_CHECK_HEADERS(audio/audiolib.h,
-+ [AC_CHECK_HEADERS(audio/soundlib.h,,,[#include <audio/audiolib.h>])
-+ AC_CHECK_LIB(audio,AuCreateFlow,
-+ [AC_DEFINE(HAVE_NAS,1,[Define if you have NAS including devel headers])
-+ AC_CHECK_LIB(Xau,XauGetBestAuthByAddr,
-+ [NASLIBS="-lXau -laudio -lXt $X_LIBS $XLIB $X_EXTRA_LIBS"],
-+ [NASLIBS="-laudio -lXt $X_LIBS $XLIB $X_EXTRA_LIBS"],
-+ [$X_LIBS])
-+ ],,
-+ [-lXt $X_LIBS $XLIB $X_EXTRA_LIBS])])
-+
-+ CPPFLAGS="$ac_save_CPPFLAGS"
-+else
-+ XLIB=""
-+ X_CFLAGS=""
-+ X_LIBS=""
-+ enable_winex11_drv=${enable_winex11_drv:-no}
-+ enable_opengl32=${enable_opengl32:-no}
-+ enable_glu32=${enable_glu32:-no}
-+fi
-+WINE_ERROR_WITH(x,[test "x$XLIB" = "x"],[X ${notice_platform}development files not found. Wine will be built
-+without X support, which probably isn't what you want. You will need to install
-+${notice_platform}development packages of Xlib/Xfree86 at the very least.])
-+
-+dnl **** Check for libxml2 ****
-+
-+AC_SUBST(XML2LIBS,"")
-+AC_SUBST(XML2INCL,"")
-+AC_SUBST(XSLTINCL,"")
-+if test "x$with_xml" != "xno"
-+then
-+ ac_save_CPPFLAGS="$CPPFLAGS"
-+ if test "$PKG_CONFIG" != "false"
-+ then
-+ ac_xml_libs="`$PKG_CONFIG --libs libxml-2.0 2>/dev/null`"
-+ ac_xml_cflags="`$PKG_CONFIG --cflags libxml-2.0 2>/dev/null`"
-+ else
-+ ac_xml_libs="`xml2-config --libs 2>/dev/null`"
-+ ac_xml_cflags="`xml2-config --cflags 2>/dev/null`"
-+ fi
-+ CPPFLAGS="$CPPFLAGS $ac_xml_cflags"
-+ AC_CHECK_HEADERS(libxml/parser.h,
-+ [AC_CHECK_LIB(xml2, xmlParseMemory,
-+ [AC_DEFINE(HAVE_LIBXML2, 1, [Define if you have the libxml2 library])
-+ XML2LIBS="$ac_xml_libs"
-+ XML2INCL="$ac_xml_cflags"],,$ac_xml_libs)
-+ AC_CHECK_LIB(xml2, xmlReadMemory,
-+ [AC_DEFINE(HAVE_XMLREADMEMORY,1,[Define if libxml2 has the xmlReadMemory function])],,$ac_xml_libs)
-+ AC_CHECK_LIB(xml2, xmlNewDocPI,
-+ [AC_DEFINE(HAVE_XMLNEWDOCPI,1,[Define if libxml2 has the xmlNewDocPI function])],,$ac_xml_libs)
-+ ])
-+ CPPFLAGS="$ac_save_CPPFLAGS"
-+fi
-+WINE_WARNING_WITH(xml,[test "$ac_cv_lib_xml2_xmlParseMemory" != "yes"],
-+ [libxml2 ${notice_platform}development files not found, XML won't be supported.])
-+
-+if test "x$with_xslt" != "xno"
-+then
-+ if test "$PKG_CONFIG" != "false"
-+ then
-+ ac_xslt_libs="`$PKG_CONFIG --libs libxslt 2>/dev/null`"
-+ ac_xslt_cflags="`$PKG_CONFIG --cflags libxslt 2>/dev/null`"
-+ else
-+ ac_xslt_libs="`xslt-config --libs 2>/dev/null`"
-+ ac_xslt_cflags="`xslt-config --cflags 2>/dev/null`"
-+ fi
-+ ac_save_CPPFLAGS="$CPPFLAGS"
-+ CPPFLAGS="$CPPFLAGS $ac_xslt_cflags"
-+ AC_CHECK_HEADERS([libxslt/pattern.h libxslt/transform.h],,,
-+ [#ifdef HAVE_LIBXSLT_PATTERN_H
-+# include <libxslt/pattern.h>
-+#endif])
-+ CPPFLAGS="$ac_save_CPPFLAGS"
-+ if test "$ac_cv_header_libxslt_transform_h" = "yes"
-+ then
-+ WINE_CHECK_SONAME(xslt,xsltCompilePattern,
-+ [XSLTINCL="$ac_xslt_cflags"],,[$ac_xslt_libs])
-+ fi
-+fi
-+WINE_WARNING_WITH(xslt,[test "x$ac_cv_lib_soname_xslt" = "x"],
-+ [libxslt ${notice_platform}development files not found, xslt won't be supported.])
-+
-+dnl **** Check for libhal ****
-+AC_SUBST(HALINCL,"")
-+if test "x$with_hal" != "xno"
-+then
-+ ac_save_CPPFLAGS="$CPPFLAGS"
-+ if test "$PKG_CONFIG" != "false"
-+ then
-+ ac_hal_libs="`$PKG_CONFIG --libs hal 2>/dev/null`"
-+ ac_hal_cflags="`$PKG_CONFIG --cflags hal 2>/dev/null`"
-+ CPPFLAGS="$CPPFLAGS $ac_hal_cflags"
-+ fi
-+ AC_CHECK_HEADERS([dbus/dbus.h hal/libhal.h])
-+ if test "$ac_cv_header_dbus_dbus_h" = "yes" -a "$ac_cv_header_hal_libhal_h" = "yes"
-+ then
-+ AC_CHECK_LIB(dbus-1, dbus_connection_close,
-+ [WINE_CHECK_SONAME(hal, libhal_ctx_new,
-+ [HALINCL="$ac_hal_cflags"],,[$ac_hal_libs])],,[$ac_hal_libs])
-+ fi
-+ CPPFLAGS="$ac_save_CPPFLAGS"
-+fi
-+WINE_NOTICE_WITH(hal,[test "x$ac_cv_lib_soname_hal" = "x" -a "x$ac_cv_header_DiskArbitration_DiskArbitration_h" != "xyes"],
-+ [libhal/libdbus ${notice_platform}development files not found, no dynamic device support.])
-+
-+dnl **** Check for libgnutls ****
-+if test "x$with_gnutls" != "xno"
-+then
-+ ac_save_CPPFLAGS="$CPPFLAGS"
-+ if test "$PKG_CONFIG" != "false"
-+ then
-+ ac_gnutls_libs="`$PKG_CONFIG --libs gnutls 2>/dev/null`"
-+ ac_gnutls_cflags="`$PKG_CONFIG --cflags gnutls 2>/dev/null`"
-+ CPPFLAGS="$CPPFLAGS $ac_gnutls_cflags"
-+ fi
-+ AC_CHECK_HEADER(gnutls/gnutls.h,
-+ [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <gnutls/gnutls.h>]], [[typeof(gnutls_mac_get_key_size) *pfunc;]])],
-+ [WINE_CHECK_SONAME(gnutls,gnutls_global_init,
-+ [AC_SUBST(GNUTLSINCL,"$ac_gnutls_cflags")],,[$ac_gnutls_libs])])])
-+ CPPFLAGS="$ac_save_CPPFLAGS"
-+fi
-+WINE_NOTICE_WITH(gnutls,[test "x$ac_cv_lib_soname_gnutls" = "x"],
-+ [libgnutls ${notice_platform}development files not found, no schannel support.])
-+
-+dnl **** Check which curses lib to use ***
-+CURSESLIBS=""
-+if test "$ac_cv_header_ncurses_h" = "yes"
-+then
-+ WINE_CHECK_SONAME(ncurses,waddch,[CURSESLIBS="-lncurses"])
-+elif test "$ac_cv_header_curses_h" = "yes"
-+then
-+ WINE_CHECK_SONAME(curses,waddch,[CURSESLIBS="-lcurses"])
-+fi
-+ac_save_LIBS="$LIBS"
-+LIBS="$LIBS $CURSESLIBS"
-+AC_CHECK_FUNCS(mousemask)
-+LIBS="$ac_save_LIBS"
-+WINE_NOTICE_WITH(curses,[test "x$ac_cv_lib_soname_curses$ac_cv_lib_soname_ncurses" = "x"],
-+ [lib(n)curses ${notice_platform}development files not found, curses won't be supported.])
-+
-+dnl **** Check for SANE ****
-+if test "x$with_sane" != "xno"
-+then
-+ ac_save_CPPFLAGS="$CPPFLAGS"
-+ AC_CHECK_PROG(sane_devel,sane-config,sane-config,no)
-+ if test "$sane_devel" != "no"
-+ then
-+ ac_sane_incl="`$sane_devel --cflags`"
-+ ac_sane_libs="`$sane_devel --ldflags`"
-+ CPPFLAGS="$CPPFLAGS $ac_sane_incl"
-+ fi
-+ AC_CHECK_HEADER(sane/sane.h,
-+ [WINE_CHECK_SONAME(sane,sane_init,[AC_SUBST(SANEINCL,"$ac_sane_incl")],,[$ac_sane_libs])])
-+ CPPFLAGS="$ac_save_CPPFLAGS"
-+fi
-+WINE_NOTICE_WITH(sane,[test "x$ac_cv_lib_soname_sane" = "x"],
-+ [libsane ${notice_platform}development files not found, scanners won't be supported.])
-+
-+dnl **** Check for libv4l1 ****
-+if test "x$with_v4l" != "xno"
-+then
-+ WINE_CHECK_SONAME(v4l1,v4l1_open,,,)
-+fi
-+WINE_NOTICE_WITH(v4l,[test "x$ac_cv_lib_soname_v4l1" = "x"],
-+ [libv4l ${notice_platform}development files not found.])
-+
-+dnl **** Check for libgphoto2 ****
-+if test "x$with_gphoto" != "xno"
-+then
-+ ac_save_CPPFLAGS="$CPPFLAGS"
-+ AC_CHECK_PROG(gphoto2_devel,gphoto2-config,gphoto2-config,no)
-+ AC_CHECK_PROG(gphoto2port_devel,gphoto2-port-config,gphoto2-port-config,no)
-+ if test "$gphoto2_devel" != "no" -a "$gphoto2port_devel" != "no"
-+ then
-+ ac_gphoto2_incl="`$gphoto2_devel --cflags` `$gphoto2port_devel --cflags`"
-+ ac_gphoto2_libs=""
-+ for i in `$gphoto2_devel --libs` `$gphoto2port_devel --libs`
-+ do
-+ case "$i" in
-+ -L/usr/lib|-L/usr/lib64) ;;
-+ -L*|-l*) ac_gphoto2_libs="$ac_gphoto2_libs $i";;
-+ esac
-+ done
-+ CPPFLAGS="$CPPFLAGS $ac_gphoto2_incl"
-+ fi
-+ ac_gphoto2_libs=${ac_gphoto2_libs:-"-lgphoto2"}
-+ AC_CHECK_HEADER(gphoto2-camera.h,
-+ [AC_CHECK_LIB(gphoto2,gp_camera_new,
-+ [AC_DEFINE(HAVE_GPHOTO2, 1, [Define if we have libgphoto2 development environment])
-+ AC_SUBST(GPHOTO2LIBS,"$ac_gphoto2_libs")
-+ AC_SUBST(GPHOTO2INCL,"$ac_gphoto2_incl")],,
-+ [$ac_gphoto2_libs])])
-+ CPPFLAGS="$ac_save_CPPFLAGS"
-+fi
-+WINE_NOTICE_WITH(gphoto,[test "$ac_cv_lib_gphoto2_gp_camera_new" != "yes"],
-+ [libgphoto2 ${notice_platform}development files not found, digital cameras won't be supported.])
-+
-+
-+dnl **** Check for resolver library ***
-+AC_SUBST(RESOLVLIBS,"")
-+if test "$ac_cv_header_resolv_h" = "yes"
-+then
-+ ac_save_LIBS="$LIBS"
-+ LIBS="$LIBS -lresolv"
-+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[#ifdef HAVE_NETINET_IN_H
-+#include <netinet/in.h>
-+#endif
-+#include <resolv.h>]],[[res_init();]])],
-+ [AC_DEFINE(HAVE_RESOLV, 1, [Define if you have the resolver library and header])
-+ RESOLVLIBS="-lresolv"])
-+ LIBS="$ac_save_LIBS"
-+fi
-+
-+dnl **** Check for LittleCMS ***
-+AC_SUBST(LCMSLIBS,"")
-+if test "$ac_cv_header_lcms_h" = "yes" -o "$ac_cv_header_lcms_lcms_h" = "yes"
-+then
-+ AC_CHECK_LIB(lcms, cmsOpenProfileFromFile,
-+ [AC_DEFINE(HAVE_LCMS, 1, [Define if you have the LittleCMS development environment])
-+ LCMSLIBS="-llcms"])
-+fi
-+WINE_NOTICE_WITH(cms,[test "$ac_cv_lib_lcms_cmsOpenProfileFromFile" != "yes"],
-+ [liblcms ${notice_platform}development files not found, Color Management won't be supported.])
-+
-+dnl **** Check for FreeType 2 ****
-+if test "x$with_freetype" != "xno"
-+then
-+ AC_CHECK_PROGS(ft_devel,[freetype-config freetype2-config],no)
-+ if test "$ft_devel" != "no"
-+ then
-+ ac_freetype_incl=`$ft_devel --cflags`
-+ ac_freetype_libs=`$ft_devel --libs`
-+ fi
-+ ac_freetype_libs=${ac_freetype_libs:-"-lfreetype"}
-+ WINE_CHECK_SONAME(freetype,FT_Init_FreeType,[ft_lib=yes],[ft_lib=no],[$ac_freetype_libs])
-+ if test "$ft_lib" = "yes"
-+ then
-+ ac_save_CPPFLAGS="$CPPFLAGS"
-+ CPPFLAGS="$ac_freetype_incl $CPPFLAGS"
-+ AC_CHECK_HEADERS(ft2build.h \
-+ freetype/freetype.h \
-+ freetype/ftglyph.h \
-+ freetype/fttypes.h \
-+ freetype/tttables.h \
-+ freetype/ftsnames.h \
-+ freetype/ttnameid.h \
-+ freetype/ftoutln.h \
-+ freetype/ftwinfnt.h \
-+ freetype/ftmodapi.h \
-+ freetype/ftlcdfil.h \
-+ freetype/internal/sfnt.h,,,
-+ [#ifdef HAVE_FT2BUILD_H
-+ # include <ft2build.h>
-+ #endif])
-+ AC_PREPROC_IFELSE([AC_LANG_SOURCE([[#include <ft2build.h>
-+ #include <freetype/fttrigon.h>]])],[AC_DEFINE(HAVE_FREETYPE_FTTRIGON_H, 1,
-+ [Define if you have the <freetype/fttrigon.h> header file.])
-+ wine_cv_fttrigon=yes],[wine_cv_fttrigon=no])
-+ AC_CHECK_TYPES(FT_TrueTypeEngineType,,,[#include <freetype/ftmodapi.h>])
-+ ac_save_CFLAGS="$CFLAGS"
-+ CFLAGS="$CFLAGS $ac_freetype_libs"
-+ AC_CHECK_FUNCS(FT_Load_Sfnt_Table)
-+ CFLAGS="$ac_save_CFLAGS"
-+ CPPFLAGS="$ac_save_CPPFLAGS"
-+ dnl Check that we have at least freetype/freetype.h
-+ if test "$ac_cv_header_freetype_freetype_h" = "yes" -a "$wine_cv_fttrigon" = "yes"
-+ then
-+ AC_DEFINE(HAVE_FREETYPE, 1, [Define if FreeType 2 is installed])
-+ AC_SUBST(FREETYPELIBS,"$ac_freetype_libs")
-+ AC_SUBST(FREETYPEINCL,"$ac_freetype_incl")
-+ fi
-+ fi
-+fi
-+WINE_ERROR_WITH(freetype,[test "x$FREETYPELIBS" = "x"],[FreeType ${notice_platform}development files not found. Fonts will not be built.])
-+test "x$FREETYPELIBS" = "x" && enable_fonts=${enable_fonts:-no}
-+
-+dnl **** Check for parport (currently Linux only) ****
-+AC_CACHE_CHECK([for parport header/ppdev.h], ac_cv_c_ppdev,
-+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#ifdef HAVE_SYS_IOCTL_H
-+# include <sys/ioctl.h>
-+#endif
-+#include <linux/ppdev.h>]], [[ioctl (1,PPCLAIM,0)]])],
-+ [ac_cv_c_ppdev="yes"],[ac_cv_c_ppdev="no"]))
-+if test "$ac_cv_c_ppdev" = "yes"
-+then
-+ AC_DEFINE(HAVE_PPDEV, 1, [Define if we can use ppdev.h for parallel port access])
-+fi
-+
-+dnl **** Check for pthread functions ****
-+WINE_CHECK_LIB_FUNCS(\
-+ pthread_attr_get_np \
-+ pthread_getattr_np \
-+ pthread_get_stackaddr_np \
-+ pthread_get_stacksize_np,
-+ [$LIBPTHREAD])
-+
-+dnl **** Check for zlib ****
-+if test "$ac_cv_header_zlib_h" = "yes"
-+then
-+ AC_CHECK_LIB(z,inflate,[AC_DEFINE(HAVE_ZLIB,1,[Define to 1 if you have the `z' library (-lz).])
-+ AC_SUBST(ZLIB,"-lz")])
-+fi
-+
-+dnl **** Check for EsounD ****
-+if test "x$with_esd" != xno
-+then
-+ save_CFLAGS="$CFLAGS"
-+ AC_PATH_PROG(ESDCONFIG, esd-config, no)
-+ if test "x$ESDCONFIG" != "xno"
-+ then
-+ ac_esd_incl=""
-+ for i in `$ESDCONFIG --cflags`
-+ do
-+ case "$i" in
-+ -I*) ac_esd_incl="$ac_esd_incl $i";;
-+ esac
-+ done
-+ ac_esd_libs=`$ESDCONFIG --libs`
-+ CFLAGS="$CFLAGS $ac_esd_incl"
-+ fi
-+ ac_esd_libs=${ac_esd_libs:-"-lesd"}
-+ AC_CHECK_HEADER(esd.h,
-+ [AC_CHECK_LIB(esd,esd_open_sound,
-+ [AC_SUBST(ESDINCL, "$ac_esd_incl")
-+ AC_SUBST(ESDLIBS, "$ac_esd_libs")
-+ AC_DEFINE(HAVE_ESD, 1, [Define if you have EsounD sound server])],,
-+ [$ac_esd_libs])])
-+ CFLAGS="$save_CFLAGS"
-+fi
-+
-+dnl **** Check for ALSA 1.x ****
-+AC_SUBST(ALSALIBS,"")
-+if test "$ac_cv_header_sys_asoundlib_h" = "yes" -o "$ac_cv_header_alsa_asoundlib_h" = "yes"
-+then
-+ AC_CHECK_LIB(asound,snd_pcm_hw_params_get_access,
-+ [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#ifdef HAVE_ALSA_ASOUNDLIB_H
-+#include <alsa/asoundlib.h>
-+#elif defined(HAVE_SYS_ASOUNDLIB_H)
-+#include <sys/asoundlib.h>
-+#endif]], [[int ret = snd_pcm_hw_params_get_access(NULL, NULL)]])],
-+ [AC_DEFINE(HAVE_ALSA,1,[Define if you have ALSA 1.x including devel headers])
-+ ALSALIBS="-lasound"],[])])
-+fi
-+
-+dnl **** Check for libaudioio (which can be used to get solaris audio support) ****
-+AC_SUBST(AUDIOIOLIBS,"")
-+if test "$ac_cv_header_libaudioio_h" = "yes"
-+then
-+ AC_CHECK_LIB(audioio,AudioIOGetVersion,
-+ [AUDIOIOLIBS="-laudioio"
-+ AC_DEFINE(HAVE_LIBAUDIOIO, 1, [Define if you have libaudioIO])])
-+fi
-+
-+dnl **** Check for capi4linux ****
-+
-+if test "$ac_cv_header_capi20_h" = "yes" -a "$ac_cv_header_linux_capi_h" = "yes"
-+then
-+ WINE_CHECK_SONAME(capi20,capi20_register)
-+fi
-+WINE_NOTICE_WITH(capi,[test "x$ac_cv_lib_soname_capi20" = "x"],
-+ [libcapi20 ${notice_platform}development files not found, ISDN won't be supported.])
-+
-+dnl **** Check for cups ****
-+AC_SUBST(CUPSINCL,"")
-+if test "x$with_cups" != "xno"
-+then
-+ ac_save_CPPFLAGS="$CPPFLAGS"
-+ ac_cups_cflags=`cups-config --cflags 2>/dev/null`
-+ ac_cups_libs=`cups-config --ldflags 2>/dev/null`
-+ CPPFLAGS="$CPPFLAGS $ac_cups_cflags"
-+ AC_CHECK_HEADERS(cups/cups.h,
-+ [WINE_CHECK_SONAME(cups,cupsGetDefault,
-+ [CUPSINCL="$ac_cups_cflags"],,
-+ [$ac_cups_libs])])
-+ CPPFLAGS="$ac_save_CPPFLAGS"
-+fi
-+WINE_NOTICE_WITH(cups,[test "x$ac_cv_lib_soname_cups" = "x"],
-+ [libcups ${notice_platform}development files not found, CUPS won't be supported.])
-+
-+dnl **** Check for jack ****
-+if test "$ac_cv_header_jack_jack_h" = "yes"
-+then
-+ WINE_CHECK_SONAME(jack,jack_client_new,,,,[[libjack-*[[0-9.]]*]])
-+fi
-+
-+dnl **** Check for fontconfig ****
-+if test "$ac_cv_header_fontconfig_fontconfig_h" = "yes"
-+then
-+ WINE_CHECK_SONAME(fontconfig,FcInit)
-+elif test -n "$X_CFLAGS" -a "x$with_fontconfig" != "xno"
-+then
-+ dnl fontconfig is in the X directory on Mac OS X
-+ ac_save_CPPFLAGS="$CPPFLAGS"
-+ CPPFLAGS="$CPPFLAGS $X_CFLAGS"
-+ $as_unset ac_cv_header_fontconfig_fontconfig_h
-+ AC_CHECK_HEADERS([fontconfig/fontconfig.h])
-+ CPPFLAGS="$ac_save_CPPFLAGS"
-+ if test "$ac_cv_header_fontconfig_fontconfig_h" = "yes"
-+ then
-+ AC_SUBST(FONTCONFIGINCL,"$X_CFLAGS")
-+ WINE_CHECK_SONAME(fontconfig,FcInit,,,[$X_LIBS])
-+ fi
-+fi
-+WINE_NOTICE_WITH(fontconfig,[test "x$ac_cv_lib_soname_fontconfig" = "x"],
-+ [fontconfig ${notice_platform}development files not found, fontconfig won't be supported.])
-+
-+dnl **** Check for SSL ****
-+if test "$ac_cv_header_openssl_err_h" = "yes" -a "$ac_cv_header_openssl_ssl_h" = "yes"
-+then
-+ WINE_CHECK_SONAME(ssl,SSL_library_init)
-+ WINE_CHECK_SONAME(crypto,BIO_new_socket)
-+fi
-+WINE_WARNING_WITH(openssl,[test "x$ac_cv_lib_soname_ssl" = "x" -o "x$ac_cv_lib_soname_crypto" = "x"],
-+ [OpenSSL ${notice_platform}development files not found, SSL won't be supported.])
-+
-+dnl **** Check for gsm codec ****
-+if test "$ac_cv_header_gsm_h" = "yes" -o "$ac_cv_header_gsm_gsm_h" = "yes"
-+then
-+ WINE_CHECK_SONAME(gsm,gsm_create)
-+fi
-+WINE_NOTICE_WITH(gsm,[test "x$ac_cv_lib_soname_gsm" = "x"],
-+ [libgsm ${notice_platform}development files not found, gsm 06.10 codec won't be supported.])
-+
-+dnl **** Check for libjpeg ****
-+if test "$ac_cv_header_jpeglib_h" = "yes"
-+then
-+ WINE_CHECK_SONAME(jpeg,jpeg_start_decompress)
-+fi
-+WINE_WARNING_WITH(jpeg,[test "x$ac_cv_lib_soname_jpeg" = "x"],
-+ [libjpeg ${notice_platform}development files not found, JPEG won't be supported.])
-+
-+dnl **** Check for libpng ****
-+if test "$ac_cv_header_png_h" = "yes"
-+then
-+ WINE_CHECK_SONAME(png,png_create_read_struct,,,-lm -lz,[[libpng[[0-9]]*]])
-+ AC_CHECK_LIB(png,png_set_expand_gray_1_2_4_to_8,
-+ [AC_DEFINE(HAVE_PNG_SET_EXPAND_GRAY_1_2_4_TO_8,1,[Define to 1 if libpng has the png_set_expand_gray_1_2_4_to_8 function.])]
-+ ,,-lm -lz)
-+elif test -n "$X_CFLAGS" -a "x$with_png" != "xno"
-+then
-+ dnl libpng is in the X directory on Mac OS X
-+ ac_save_CPPFLAGS="$CPPFLAGS"
-+ CPPFLAGS="$CPPFLAGS $X_CFLAGS"
-+ $as_unset ac_cv_header_png_h
-+ AC_CHECK_HEADERS([png.h])
-+ CPPFLAGS="$ac_save_CPPFLAGS"
-+ if test "$ac_cv_header_png_h" = "yes"
-+ then
-+ AC_SUBST(PNGINCL,"$X_CFLAGS")
-+ WINE_CHECK_SONAME(png,png_create_read_struct,,,[$X_LIBS -lm -lz],[[libpng[[0-9]]*]])
-+ AC_CHECK_LIB(png,png_set_expand_gray_1_2_4_to_8,
-+ [AC_DEFINE(HAVE_PNG_SET_EXPAND_GRAY_1_2_4_TO_8,1)],,[$X_LIBS -lm -lz])
-+ fi
-+fi
-+WINE_WARNING_WITH(png,[test "x$ac_cv_lib_soname_png" = "x"],
-+ [libpng ${notice_platform}development files not found, PNG won't be supported.])
-+
-+dnl **** Check for libtiff ****
-+if test "$ac_cv_header_tiffio_h" = "yes"
-+then
-+ WINE_CHECK_SONAME(tiff,TIFFClientOpen)
-+fi
-+WINE_NOTICE_WITH(tiff,[test "x$ac_cv_lib_soname_tiff" = "x"],
-+ [libtiff ${notice_platform}development files not found, TIFF won't be supported.])
-+
-+dnl **** Check for mpg123 ****
-+if test "$ac_cv_header_mpg123_h" = "yes"
-+then
-+ AC_CHECK_LIB(mpg123,mpg123_feed,[AC_SUBST(LIBMPG123,"-lmpg123")])
-+fi
-+WINE_NOTICE_WITH(mpg123,[test "x$ac_cv_lib_mpg123_mpg123_feed" != xyes -a x"$ac_cv_header_CoreAudio_CoreAudio_h" != xyes],
-+ [libmpg123 ${notice_platform}development files not found (or too old), mp3 codec won't be supported.])
-+test "x$ac_cv_lib_mpg123_mpg123_feed" = xyes -o "x$ac_cv_header_AudioToolbox_AudioConverter_h" = xyes || enable_winemp3_acm=${enable_winemp3_acm:-no}
-+
-+dnl **** Check for OpenAL 1.1 ****
-+if test "$ac_cv_header_AL_al_h" = "yes"
-+then
-+ WINE_CHECK_SONAME(openal,alGetSource3i,[AC_SUBST(LIBOPENAL,"-lopenal")
-+ ac_cv_lib_openal=yes
-+ AC_DEFINE_UNQUOTED(HAVE_OPENAL,1,[Define to 1 if OpenAL is available])],,)
-+fi
-+WINE_NOTICE_WITH(openal,[test "x$ac_cv_lib_openal" != xyes],
-+ [libopenal ${notice_platform}development files not found (or too old), OpenAL won't be supported.])
-+test "x$ac_cv_lib_openal" = xyes || enable_openal32=${enable_openal32:-no}
-+
-+dnl **** Check for libkstat ****
-+if test "$ac_cv_header_kstat_h" = "yes"
-+then
-+ AC_CHECK_LIB(kstat,kstat_open,
-+ [AC_DEFINE(HAVE_LIBKSTAT, 1, [Define to 1 if you have the `kstat' library (-lkstat).])
-+ AC_SUBST(LIBKSTAT,"-lkstat")])
-+fi
-+
-+dnl **** Check for libodbc ****
-+WINE_CHECK_SONAME(odbc,SQLConnect,,[AC_DEFINE_UNQUOTED(SONAME_LIBODBC,["libodbc.$LIBEXT"])])
-+
-+dnl **** Check for any sound system ****
-+if test "x$ALSALIBS$AUDIOIOLIBS$COREAUDIO$NASLIBS$ESDLIBS$ac_cv_lib_soname_jack" = "x" -a \
-+ "$ac_cv_header_sys_soundcard_h" != "yes" -a \
-+ "$ac_cv_header_machine_soundcard_h" != "yes" -a \
-+ "$ac_cv_header_soundcard_h" != "yes" -a \
-+ "x$with_alsa$with_audioio$with_coreaudio$with_nas$with_esd$with_jack$with_oss" != xnonononononono
-+then
-+ WINE_WARNING([No sound system was found. Windows applications will be silent.])
-+fi
-+
-+dnl **** Check for gcc specific options ****
-+
-+AC_SUBST(EXTRACFLAGS,"")
-+if test "x${GCC}" = "xyes"
-+then
-+ EXTRACFLAGS="-Wall -pipe"
-+
-+ dnl Check for strength-reduce bug
-+ AC_CACHE_CHECK( [for gcc strength-reduce bug], ac_cv_c_gcc_strength_bug,
-+ AC_RUN_IFELSE([AC_LANG_PROGRAM([[int L[[4]] = {0,1,2,3};]],
-+[[static int Array[[3]];
-+ unsigned int B = 3;
-+ int i;
-+ for(i=0; i<B; i++) Array[[i]] = i - 3;
-+ for(i=0; i<4 - 1; i++) L[[i]] = L[[i + 1]];
-+ L[[i]] = 4;
-+ return (Array[[1]] != -2 || L[[2]] != 3)]])],
-+ [ac_cv_c_gcc_strength_bug="no"],[ac_cv_c_gcc_strength_bug="yes"],[ac_cv_c_gcc_strength_bug="yes"]) )
-+ if test "$ac_cv_c_gcc_strength_bug" = "yes"
-+ then
-+ EXTRACFLAGS="$EXTRACFLAGS -fno-strength-reduce"
-+ fi
-+
-+ dnl Check for some compiler flags
-+ WINE_TRY_CFLAGS([-fno-builtin],[AC_SUBST(BUILTINFLAG,"-fno-builtin")])
-+ WINE_TRY_CFLAGS([-fno-strict-aliasing])
-+ WINE_TRY_CFLAGS([-Wdeclaration-after-statement])
-+ WINE_TRY_CFLAGS([-Wstrict-prototypes])
-+ WINE_TRY_CFLAGS([-Wtype-limits])
-+ WINE_TRY_CFLAGS([-Wwrite-strings])
-+
-+ dnl Check for noisy string.h
-+ saved_CFLAGS="$CFLAGS"
-+ CFLAGS="$CFLAGS -Wpointer-arith -Werror"
-+ AC_CACHE_CHECK([for broken string.h that generates warnings], ac_cv_c_string_h_warnings,
-+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <string.h>]], [[]])],[ac_cv_c_string_h_warnings=no],[ac_cv_c_string_h_warnings=yes]))
-+ CFLAGS="$saved_CFLAGS"
-+ if test "$ac_cv_c_string_h_warnings" = "no"
-+ then
-+ EXTRACFLAGS="$EXTRACFLAGS -Wpointer-arith"
-+ fi
-+
-+ dnl Fortify enables unused result warnings on a gazillion functions, making it useless
-+ saved_CFLAGS="$CFLAGS"
-+ CFLAGS="$CFLAGS -Werror"
-+ AC_CACHE_CHECK([for broken unused result warnings], ac_cv_c_unused_result_warnings,
-+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <unistd.h>]], [[write(2,"a",1)]])],[ac_cv_c_unused_result_warnings=no],[ac_cv_c_unused_result_warnings=yes]))
-+ CFLAGS="$saved_CFLAGS"
-+ if test "$ac_cv_c_unused_result_warnings" = "yes"
-+ then
-+ WINE_TRY_CFLAGS([-Wno-unused-result])
-+ fi
-+
-+ dnl Enable -Werror for maintainer mode
-+ if test "x$enable_maintainer_mode" = "xyes"
-+ then
-+ WINE_TRY_CFLAGS([-Werror])
-+ fi
-+
-+ dnl Check for ms_hook_prologue support
-+ saved_CFLAGS="$CFLAGS"
-+ CFLAGS="$CFLAGS -Werror"
-+ AC_CACHE_CHECK([for ms_hook_prologue attribute], ac_cv_have_ms_hook_prologue,
-+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[int __attribute__((__ms_hook_prologue__)) test(void) { return 0; }]])],
-+ [ac_cv_have_ms_hook_prologue="yes"],[ac_cv_have_ms_hook_prologue="no"]))
-+ CFLAGS="$saved_CFLAGS"
-+ if test "$ac_cv_have_ms_hook_prologue" = "yes"
-+ then
-+ AC_DEFINE(DECLSPEC_HOTPATCH, [__attribute__((__ms_hook_prologue__))],
-+ [Define to a function attribute for Microsoft hotpatch assembly prefix.])
-+ else
-+ AC_DEFINE(DECLSPEC_HOTPATCH, [/* */])
-+ fi
-+fi
-+
-+dnl **** Check for underscore on external symbols ****
-+
-+AC_CACHE_CHECK([whether external symbols need an underscore prefix], ac_cv_c_extern_prefix,
-+ WINE_TRY_ASM_LINK([".globl _ac_test\n_ac_test:\t.long 0"],
-+ [extern int ac_test;],
-+ [if (ac_test) return 1],
-+ ac_cv_c_extern_prefix="yes",ac_cv_c_extern_prefix="no"))
-+
-+case $host_cpu in
-+ *i[[3456789]]86*)
-+ AC_CACHE_CHECK([whether external symbols need stdcall decoration], ac_cv_c_stdcall_suffix,
-+ WINE_TRY_ASM_LINK(["jmp _ac_test@4"],
-+[#ifndef _MSC_VER
-+#define __stdcall __attribute__((__stdcall__))
-+#endif
-+int __stdcall ac_test(int i) { return i; }],
-+ [if (ac_test(1)) return 1],
-+ ac_cv_c_stdcall_suffix="yes",ac_cv_c_stdcall_suffix="no")) ;;
-+ *) ac_cv_c_stdcall_suffix="no" ;;
-+esac
-+
-+AH_TEMPLATE(__ASM_NAME,[Define to a macro to generate an assembly name from a C symbol])
-+if test "$ac_cv_c_extern_prefix" = "yes"
-+then
-+ AC_DEFINE([__ASM_NAME(name)], ["_" name])
-+ asm_name_prefix="_"
-+else
-+ AC_DEFINE([__ASM_NAME(name)], [name])
-+ asm_name_prefix=""
-+fi
-+
-+AH_TEMPLATE(__ASM_STDCALL,[Define to a macro to generate an stdcall suffix])
-+if test "$ac_cv_c_stdcall_suffix" = "yes"
-+then
-+ AC_DEFINE([__ASM_STDCALL(args)],["@" #args])
-+else
-+ AC_DEFINE([__ASM_STDCALL(args)],[""])
-+fi
-+
-+dnl **** Check how to define a function in assembly code ****
-+
-+AC_CACHE_CHECK([how to define a function in assembly code], ac_cv_asm_func_def,
-+ WINE_TRY_ASM_LINK(
-+ ["\t.globl _ac_test\n\t.def _ac_test; .scl 2; .type 32; .endef\n_ac_test:\t.long 0"],,,
-+ ac_cv_asm_func_def=".def",
-+ [WINE_TRY_ASM_LINK(["\t.globl _ac_test\n\t.type _ac_test,@function\n_ac_test:\t.long 0"],,,
-+ ac_cv_asm_func_def=".type @function",
-+ [WINE_TRY_ASM_LINK(["\t.globl _ac_test\n\t.type _ac_test,2\n_ac_test:\t.long 0"],,,
-+ ac_cv_asm_func_def=".type 2",
-+ ac_cv_asm_func_def="unknown")])]))
-+
-+AH_TEMPLATE(__ASM_FUNC,[Define to a macro to generate an assembly function directive])
-+case "$ac_cv_asm_func_def" in
-+ ".def")
-+ AC_DEFINE([__ASM_FUNC(name)], [".def " __ASM_NAME(name) "; .scl 2; .type 32; .endef"])
-+ asm_func_header=".def $asm_name_prefix\" #name suffix \"; .scl 2; .type 32; .endef" ;;
-+ ".type @function")
-+ AC_DEFINE([__ASM_FUNC(name)], [".type " __ASM_NAME(name) ",@function"])
-+ asm_func_header=".type $asm_name_prefix\" #name suffix \",@function" ;;
-+ ".type 2")
-+ AC_DEFINE([__ASM_FUNC(name)], [".type " __ASM_NAME(name) ",2"])
-+ asm_func_header=".type $asm_name_prefix\" #name suffix \",2" ;;
-+ *)
-+ AC_DEFINE([__ASM_FUNC(name)], [""])
-+ asm_func_header="" ;;
-+esac
-+
-+AC_CACHE_CHECK([whether asm() works outside of functions], ac_cv_c_asm_outside_funcs,
-+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[asm(".text\n\t.long 0");]],)],
-+ ac_cv_c_asm_outside_funcs="yes",ac_cv_c_asm_outside_funcs="no"))
-+
-+AC_CACHE_CHECK([whether .previous is supported in assembly code], ac_cv_c_dot_previous,
-+ WINE_TRY_ASM_LINK([".text\nac_test:\t.long 0\n\t.previous"],,,
-+ ac_cv_c_dot_previous="yes",ac_cv_c_dot_previous="no"))
-+
-+AC_CACHE_CHECK([whether CFI directives are supported in assembly code], ac_cv_c_cfi_support,
-+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[asm(".text\nac_test:\t.cfi_startproc\n\t.long 0\n\t.cfi_endproc");]])],
-+ ac_cv_c_cfi_support="yes",ac_cv_c_cfi_support="no"))
-+
-+asm_func_header=".globl $asm_name_prefix\" #name suffix \"\\n\\t$asm_func_header\\n$asm_name_prefix\" #name suffix \":\\n\\t"
-+asm_func_trailer=""
-+if test "$ac_cv_c_dot_previous" = "yes"
-+then
-+ asm_func_trailer="\\n\\t.previous"
-+fi
-+if test "$ac_cv_c_cfi_support" = "yes"
-+then
-+ asm_func_header="$asm_func_header.cfi_startproc\\n\\t"
-+ asm_func_trailer="\\n\\t.cfi_endproc$asm_func_trailer"
-+ AC_DEFINE([__ASM_CFI(str)],[str],[Define to a macro to output a .cfi assembly pseudo-op])
-+ AC_SUBST([UNWINDFLAGS],[-fasynchronous-unwind-tables])
-+else
-+ AC_DEFINE([__ASM_CFI(str)],[""])
-+fi
-+
-+asm_func_code="$asm_func_header\" code \"$asm_func_trailer"
-+
-+AH_TEMPLATE(__ASM_DEFINE_FUNC,[Define to a macro to define an assembly function])
-+if test "$ac_cv_c_asm_outside_funcs" = "yes"
-+then
-+ AC_DEFINE_UNQUOTED([__ASM_DEFINE_FUNC(name,suffix,code)],[asm(".text\n\t.align 4\n\t$asm_func_code");])
-+else
-+ AC_DEFINE_UNQUOTED([__ASM_DEFINE_FUNC(name,suffix,code)],[void __asm_dummy_##name(void) { asm(".text\n\t.align 4\n\t$asm_func_code"); }])
-+fi
-+AC_DEFINE([__ASM_GLOBAL_FUNC(name,code)],[__ASM_DEFINE_FUNC(name,"",code)],
-+ [Define to a macro to generate an assembly function with C calling convention])
-+AC_DEFINE([__ASM_STDCALL_FUNC(name,args,code)],[__ASM_DEFINE_FUNC(name,__ASM_STDCALL(args),code)],
-+ [Define to a macro to generate an assembly function with stdcall calling convention])
-+
-+dnl **** Platform-specific checks ****
-+
-+AC_SUBST(LDPATH,"")
-+case $build_os in
-+ cygwin*|mingw32*)
-+ AC_SUBST(TOOLSEXT,".exe")
-+ LDPATH="PATH=\"\$(TOOLSDIR)/libs/wine:\$\$PATH\""
-+ ;;
-+ darwin*|macosx*)
-+ ;;
-+ *)
-+ LDPATH="LD_LIBRARY_PATH=\"\$(TOOLSDIR)/libs/wine:\$\$LD_LIBRARY_PATH\""
-+ ;;
-+esac
-+
-+dnl Mingw needs explicit msvcrt for linking libwine and winsock for wininet
-+case $host_os in
-+ mingw32*)
-+ AC_SUBST(CRTLIBS,"-lmsvcrt")
-+ AC_SUBST(SOCKETLIBS,"-L\$(TOPOBJDIR)/dlls/ws2_32 -lws2_32")
-+ ;;
-+esac
-+
-+AC_SUBST(MAIN_BINARY,"wine")
-+test "x$enable_win64" != "xyes" || MAIN_BINARY="wine64"
-+
-+case $host_cpu in
-+ *i[[3456789]]86*)
-+ case $host_os in
-+ linux*)
-+ AC_SUBST(EXTRA_BINARIES,"wine-preloader") ;;
-+ esac
-+ ;;
-+esac
-+
-+dnl **** Check for functions ****
-+
-+ac_save_CFLAGS="$CFLAGS"
-+CFLAGS="$CFLAGS $BUILTINFLAG"
-+AC_CHECK_FUNCS(\
-+ _pclose \
-+ _popen \
-+ _snprintf \
-+ _spawnvp \
-+ _strdup \
-+ _stricmp \
-+ _strnicmp \
-+ _strtoi64 \
-+ _strtoui64 \
-+ _vsnprintf \
-+ asctime_r \
-+ chsize \
-+ dlopen \
-+ epoll_create \
-+ ffs \
-+ finite \
-+ fnmatch \
-+ fork \
-+ fpclass \
-+ fstatfs \
-+ fstatvfs \
-+ ftruncate \
-+ futimes \
-+ futimesat \
-+ getdirentries \
-+ getopt_long \
-+ getpagesize \
-+ getpwuid \
-+ gettid \
-+ gettimeofday \
-+ getuid \
-+ kqueue \
-+ lstat \
-+ memmove \
-+ mmap \
-+ pclose \
-+ pipe2 \
-+ poll \
-+ popen \
-+ port_create \
-+ prctl \
-+ pread \
-+ pwrite \
-+ readdir \
-+ readlink \
-+ sched_setaffinity \
-+ sched_yield \
-+ select \
-+ setproctitle \
-+ setrlimit \
-+ settimeofday \
-+ sigaltstack \
-+ sigprocmask \
-+ snprintf \
-+ spawnvp \
-+ statfs \
-+ statvfs \
-+ strcasecmp \
-+ strdup \
-+ strerror \
-+ strncasecmp \
-+ strtold \
-+ strtoll \
-+ strtoull \
-+ symlink \
-+ tcgetattr \
-+ thr_kill2 \
-+ timegm \
-+ usleep \
-+ vsnprintf \
-+ wait4 \
-+ waitpid \
-+)
-+CFLAGS="$ac_save_CFLAGS"
-+
-+dnl Check for -ldl
-+if test "$ac_cv_func_dlopen" = no
-+then
-+ AC_CHECK_LIB(dl,dlopen,[AC_DEFINE(HAVE_DLOPEN,1) AC_SUBST(LIBDL,"-ldl")])
-+fi
-+WINE_CHECK_LIB_FUNCS(dladdr,[$LIBDL])
-+
-+dnl Check for -lpoll for Mac OS X/Darwin
-+if test "$ac_cv_func_poll" = no
-+then
-+ AC_CHECK_LIB(poll,poll,[AC_DEFINE(HAVE_POLL,1) AC_SUBST(LIBPOLL,"-lpoll")])
-+fi
-+
-+dnl Check for -lnsl for Solaris
-+AC_SEARCH_LIBS(gethostbyname, nsl)
-+
-+dnl Check for -lsocket for Solaris
-+AC_SEARCH_LIBS(connect, socket)
-+
-+dnl Check for -lresolv for Solaris
-+AC_SEARCH_LIBS(inet_aton, resolv)
-+
-+dnl **** Check for functions which may rely on -lsocket on Solaris.
-+AC_CHECK_FUNCS(\
-+ getaddrinfo \
-+ getnameinfo \
-+ getnetbyname \
-+ getprotobyname \
-+ getprotobynumber \
-+ getservbyport \
-+ inet_network \
-+ inet_ntop \
-+ inet_pton \
-+ sendmsg \
-+ socketpair \
-+)
-+
-+dnl **** Check for OpenLDAP ***
-+AC_SUBST(LDAPLIBS,"")
-+if test "$ac_cv_header_ldap_h" = "yes" -a "$ac_cv_header_lber_h" = "yes"
-+then
-+ AC_CHECK_TYPE(LDAPSortKey,
-+ [AC_CHECK_LIB(ldap_r, ldap_initialize,
-+ [AC_CHECK_LIB(lber, ber_init,
-+ [AC_DEFINE(HAVE_LDAP, 1, [Define if you have the OpenLDAP development environment])
-+ LDAPLIBS="-lldap_r -llber"],,
-+ [$LIBPTHREAD])],,
-+ [$LIBPTHREAD])],,
-+ [#include <ldap.h>])
-+ WINE_CHECK_LIB_FUNCS(\
-+ ldap_count_references \
-+ ldap_first_reference \
-+ ldap_next_reference \
-+ ldap_parse_reference \
-+ ldap_parse_sort_control \
-+ ldap_parse_sortresponse_control \
-+ ldap_parse_vlv_control \
-+ ldap_parse_vlvresponse_control,
-+ [$LDAPLIBS $LIBPTHREAD])
-+fi
-+WINE_NOTICE_WITH(ldap,[test "x$LDAPLIBS" = "x"],
-+ [libldap (OpenLDAP) ${notice_platform}development files not found, LDAP won't be supported.])
-+
-+AC_CACHE_CHECK([whether mkdir takes only one argument],
-+ wine_cv_one_arg_mkdir,
-+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/stat.h>]],[[mkdir("foo");]])],
-+ [wine_cv_one_arg_mkdir=yes],[wine_cv_one_arg_mkdir=no]))
-+if test "$wine_cv_one_arg_mkdir" = "yes"
-+then
-+ AC_DEFINE(HAVE_ONE_ARG_MKDIR, 1, [Define if mkdir takes only one argument])
-+fi
-+
-+dnl **** Check for types ****
-+
-+AC_C_CONST
-+AC_C_INLINE
-+AC_CHECK_TYPES([mode_t, off_t, pid_t, size_t, ssize_t, long long, fsblkcnt_t, fsfilcnt_t])
-+AC_CHECK_TYPES([sigset_t],,,[#include <sys/types.h>
-+#include <signal.h>])
-+AC_CHECK_TYPES([request_sense],,,[#include <linux/cdrom.h>])
-+
-+AC_CHECK_TYPES([struct xinpgen],,,
-+[#include <sys/types.h>
-+#ifdef HAVE_SYS_SOCKET_H
-+#include <sys/socket.h>
-+#endif
-+#ifdef HAVE_SYS_SOCKETVAR_H
-+#include <sys/socketvar.h>
-+#endif
-+#ifdef HAVE_NET_ROUTE_H
-+#include <net/route.h>
-+#endif
-+#ifdef HAVE_NETINET_IN_H
-+#include <netinet/in.h>
-+#endif
-+#ifdef HAVE_NETINET_IN_SYSTM_H
-+#include <netinet/in_systm.h>
-+#endif
-+#ifdef HAVE_NETINET_IP_H
-+#include <netinet/ip.h>
-+#endif
-+#ifdef HAVE_NETINET_IN_PCB_H
-+#include <netinet/in_pcb.h>
-+#endif])
-+
-+AC_CHECK_MEMBERS([struct ff_effect.direction],,,
-+[#ifdef HAVE_LINUX_INPUT_H
-+#include <linux/input.h>
-+#endif])
-+
-+AC_CACHE_CHECK([for sigaddset],wine_cv_have_sigaddset,
-+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <signal.h>]], [[sigset_t set; sigaddset(&set,SIGTERM);]])],[wine_cv_have_sigaddset=yes],[wine_cv_have_sigaddset=no]))
-+if test "$wine_cv_have_sigaddset" = "yes"
-+then
-+ AC_DEFINE(HAVE_SIGADDSET, 1, [Define if sigaddset is supported])
-+fi
-+
-+
-+AC_CACHE_CHECK([whether we can use re-entrant gethostbyname_r Linux style],
-+ wine_cv_linux_gethostbyname_r_6,
-+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <netdb.h>]],[[
-+ char *name=0;
-+ struct hostent he;
-+ struct hostent *result;
-+ char *buf=0;
-+ int bufsize=0;
-+ int res,errnr;
-+ char *addr=0;
-+ int addrlen=0;
-+ int addrtype=0;
-+ res=gethostbyname_r(name,&he,buf,bufsize,&result,&errnr);
-+ res=gethostbyaddr_r(addr, addrlen, addrtype,&he,buf,bufsize,&result,&errnr);
-+ ]])],[wine_cv_linux_gethostbyname_r_6=yes],[wine_cv_linux_gethostbyname_r_6=no
-+ ])
-+ )
-+ if test "$wine_cv_linux_gethostbyname_r_6" = "yes"
-+ then
-+ AC_DEFINE(HAVE_LINUX_GETHOSTBYNAME_R_6, 1,
-+ [Define if Linux-style gethostbyname_r and gethostbyaddr_r are available])
-+ fi
-+
-+if test "$ac_cv_header_linux_joystick_h" = "yes"
-+then
-+ AC_CACHE_CHECK([whether linux/joystick.h uses the Linux 2.2+ API],
-+ wine_cv_linux_joystick_22_api,
-+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
-+ #include <sys/ioctl.h>
-+ #include <sys/types.h>
-+ #include <linux/joystick.h>
-+
-+ struct js_event blub;
-+ #if !defined(JS_EVENT_AXIS) || !defined(JS_EVENT_BUTTON)
-+ #error "no 2.2 header"
-+ #endif
-+ ]], [[/*empty*/]])],[wine_cv_linux_joystick_22_api=yes],[wine_cv_linux_joystick_22_api=no])
-+ )
-+ if test "$wine_cv_linux_joystick_22_api" = "yes"
-+ then
-+ AC_DEFINE(HAVE_LINUX_22_JOYSTICK_API, 1,
-+ [Define if <linux/joystick.h> defines the Linux 2.2 joystick API])
-+ fi
-+fi
-+
-+dnl **** FIXME: what about mixed cases, where we need two of them? ***
-+
-+dnl Check for statfs members
-+AC_CHECK_MEMBERS([struct statfs.f_bfree, struct statfs.f_bavail, struct statfs.f_frsize, struct statfs.f_ffree, struct statfs.f_favail, struct statfs.f_namelen],,,
-+[#include <sys/types.h>
-+#ifdef HAVE_SYS_PARAM_H
-+# include <sys/param.h>
-+#endif
-+#ifdef HAVE_SYS_MOUNT_H
-+# include <sys/mount.h>
-+#endif
-+#ifdef HAVE_SYS_VFS_H
-+# include <sys/vfs.h>
-+#endif
-+#ifdef HAVE_SYS_STATFS_H
-+# include <sys/statfs.h>
-+#endif])
-+
-+AC_CHECK_MEMBERS([struct statvfs.f_blocks],,,
-+[#ifdef HAVE_SYS_STATVFS_H
-+#include <sys/statvfs.h>
-+#endif])
-+
-+dnl Check for socket structure members
-+AC_CHECK_MEMBERS([struct msghdr.msg_accrights, struct sockaddr.sa_len, struct sockaddr_un.sun_len],,,
-+[#include <sys/types.h>
-+#ifdef HAVE_SYS_SOCKET_H
-+# include <sys/socket.h>
-+#endif
-+#ifdef HAVE_SYS_UN_H
-+# include <sys/un.h>
-+#endif])
-+
-+dnl Check for scsireq_t and sg_io_hdr_t members
-+AC_CHECK_MEMBERS([scsireq_t.cmd, sg_io_hdr_t.interface_id],,,
-+[#include <sys/types.h>
-+#ifdef HAVE_SCSI_SG_H
-+#include <scsi/sg.h>
-+#endif])
-+
-+dnl Check for siginfo_t members
-+AC_CHECK_MEMBERS([siginfo_t.si_fd],,,[#include <signal.h>])
-+
-+dnl Check for struct mtget members
-+AC_CHECK_MEMBERS([struct mtget.mt_blksiz, struct mtget.mt_gstat, struct mtget.mt_blkno],,,
-+[#include <sys/types.h>
-+#ifdef HAVE_SYS_MTIO_H
-+#include <sys/mtio.h>
-+#endif])
-+
-+dnl Check for struct option
-+AC_CHECK_MEMBERS([struct option.name],,,
-+[#ifdef HAVE_GETOPT_H
-+#include <getopt.h>
-+#endif])
-+
-+dnl Check for stat.st_blocks and ns-resolved times
-+AC_CHECK_MEMBERS([struct stat.st_blocks,struct stat.st_mtim,struct stat.st_ctim,struct stat.st_atim])
-+
-+dnl Check for sin6_scope_id
-+AC_CHECK_MEMBERS([struct sockaddr_in6.sin6_scope_id],,,
-+[#ifdef HAVE_SYS_TYPES_H
-+#include <sys/types.h>
-+#endif
-+#ifdef HAVE_NETINET_IN_H
-+#include <netinet/in.h>
-+#endif])
-+
-+dnl Check for ns_msg ptr member
-+AC_CHECK_MEMBERS([ns_msg._msg_ptr],,,
-+[#ifdef HAVE_SYS_TYPES_H
-+#include <sys/types.h>
-+#endif
-+#ifdef HAVE_NETINET_IN_H
-+# include <netinet/in.h>
-+#endif
-+#ifdef HAVE_ARPA_NAMESER_H
-+# include <arpa/nameser.h>
-+#endif])
-+
-+dnl Check for struct icmpstat.icps_outhist
-+AC_CHECK_MEMBERS([struct icmpstat.icps_outhist],,,
-+[#ifdef HAVE_SYS_TYPES_H
-+#include <sys/types.h>
-+#endif
-+#ifdef HAVE_ALIAS_H
-+#include <alias.h>
-+#endif
-+#ifdef HAVE_SYS_SOCKET_H
-+#include <sys/socket.h>
-+#endif
-+#ifdef HAVE_SYS_SOCKETVAR_H
-+#include <sys/socketvar.h>
-+#endif
-+#ifdef HAVE_SYS_TIMEOUT_H
-+#include <sys/timeout.h>
-+#endif
-+#ifdef HAVE_NETINET_IN_H
-+#include <netinet/in.h>
-+#endif
-+#ifdef HAVE_NETINET_IN_SYSTM_H
-+#include <netinet/in_systm.h>
-+#endif
-+#ifdef HAVE_NETINET_IP_H
-+#include <netinet/ip.h>
-+#endif
-+#ifdef HAVE_NETINET_IP_VAR_H
-+#include <netinet/ip_var.h>
-+#endif
-+#ifdef HAVE_NETINET_IP_ICMP_H
-+#include <netinet/ip_icmp.h>
-+#endif
-+#ifdef HAVE_NETINET_ICMP_VAR
-+#include <netinet/icmp_var.h>
-+#endif])
-+
-+dnl Check for struct ifreq.ifr_hwaddr
-+AC_CHECK_MEMBERS([struct ifreq.ifr_hwaddr],,,
-+[#ifdef HAVE_SYS_TYPES_H
-+#include <sys/types.h>
-+#endif
-+#ifdef HAVE_NET_IF_H
-+# include <net/if.h>
-+#endif])
-+
-+dnl Check for the external timezone variables timezone and daylight
-+AC_CACHE_CHECK([for timezone variable], ac_cv_have_timezone,
-+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <time.h>]], [[timezone = 1]])],[ac_cv_have_timezone="yes"],[ac_cv_have_timezone="no"]))
-+if test "$ac_cv_have_timezone" = "yes"
-+then
-+ AC_DEFINE(HAVE_TIMEZONE, 1, [Define if you have the timezone variable])
-+fi
-+AC_CACHE_CHECK([for daylight variable], ac_cv_have_daylight,
-+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <time.h>]], [[daylight = 1]])],[ac_cv_have_daylight="yes"],[ac_cv_have_daylight="no"]))
-+if test "$ac_cv_have_daylight" = "yes"
-+then
-+ AC_DEFINE(HAVE_DAYLIGHT, 1, [Define if you have the daylight variable])
-+fi
-+
-+dnl Check for isinf
-+AC_CACHE_CHECK([for isinf], ac_cv_have_isinf,
-+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <math.h>]], [[float f = 0.0; int i=isinf(f)]])],[ac_cv_have_isinf="yes"],[ac_cv_have_isinf="no"]))
-+if test "$ac_cv_have_isinf" = "yes"
-+then
-+ AC_DEFINE(HAVE_ISINF, 1, [Define to 1 if you have the `isinf' function.])
-+fi
-+
-+dnl Check for isnan
-+AC_CACHE_CHECK([for isnan], ac_cv_have_isnan,
-+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <math.h>]], [[float f = 0.0; int i=isnan(f)]])],[ac_cv_have_isnan="yes"],[ac_cv_have_isnan="no"]))
-+if test "$ac_cv_have_isnan" = "yes"
-+then
-+ AC_DEFINE(HAVE_ISNAN, 1, [Define to 1 if you have the `isnan' function.])
-+fi
-+
-+dnl *** check for the need to define platform-specific symbols
-+
-+case $host_cpu in
-+ *i[[3456789]]86*) WINE_CHECK_DEFINE([__i386__]) ;;
-+ *x86_64*) WINE_CHECK_DEFINE([__x86_64__]) ;;
-+ *alpha*) WINE_CHECK_DEFINE([__ALPHA__]) ;;
-+ *sparc*) WINE_CHECK_DEFINE([__sparc__]) ;;
-+ *powerpc*) WINE_CHECK_DEFINE([__powerpc__]) ;;
-+esac
-+
-+case $host_vendor in
-+ *sun*) WINE_CHECK_DEFINE([__sun__]) ;;
-+esac
-+
-+dnl **** Generate output files ****
-+
-+AH_TOP([#ifndef WINE_CROSSTEST
-+#define __WINE_CONFIG_H])
-+AH_BOTTOM([#endif /* WINE_CROSSTEST */])
-+
-+AC_CONFIG_COMMANDS([include/stamp-h], [echo timestamp > include/stamp-h])
-+
-+WINE_CONFIG_SYMLINK(dlls/wineps.drv/generic.ppd)
-+WINE_CONFIG_SYMLINK(fonts/marlett.ttf,,enable_fonts)
-+WINE_CONFIG_SYMLINK(fonts/symbol.ttf,,enable_fonts)
-+WINE_CONFIG_SYMLINK(fonts/tahoma.ttf,,enable_fonts)
-+WINE_CONFIG_SYMLINK(fonts/tahomabd.ttf,,enable_fonts)
-+WINE_CONFIG_SYMLINK(tools/l_intl.nls)
-+WINE_CONFIG_SYMLINK(wine,tools/winewrapper)
-+
-+WINE_CONFIG_EXTRA_DIR(dlls/gdi32/enhmfdrv)
-+WINE_CONFIG_EXTRA_DIR(dlls/gdi32/mfdrv)
-+WINE_CONFIG_EXTRA_DIR(dlls/kernel32/nls)
-+WINE_CONFIG_EXTRA_DIR(dlls/user32/resources)
-+WINE_CONFIG_EXTRA_DIR(dlls/wineps.drv/data)
-+WINE_CONFIG_EXTRA_DIR(include/wine)
-+
-+WINE_CONFIG_MAKERULES([Make.rules],[MAKE_RULES])
-+WINE_CONFIG_MAKERULES([Maketest.rules],[MAKE_TEST_RULES],[Make.rules])
-+WINE_CONFIG_MAKERULES([dlls/Makedll.rules],[MAKE_DLL_RULES],[Make.rules])
-+WINE_CONFIG_MAKERULES([dlls/Makeimplib.rules],[MAKE_IMPLIB_RULES],[Make.rules])
-+WINE_CONFIG_MAKERULES([programs/Makeprog.rules],[MAKE_PROG_RULES],[Make.rules])
-+
-+WINE_CONFIG_DLL(acledit)
-+WINE_CONFIG_DLL(aclui,,[aclui])
-+WINE_CONFIG_DLL(activeds,,[activeds])
-+WINE_CONFIG_DLL(actxprxy)
-+WINE_CONFIG_LIB(adsiid)
-+WINE_CONFIG_DLL(advapi32,,[advapi32])
-+WINE_CONFIG_TEST(dlls/advapi32/tests)
-+WINE_CONFIG_DLL(advpack,,[advpack])
-+WINE_CONFIG_TEST(dlls/advpack/tests)
-+WINE_CONFIG_DLL(amstream)
-+WINE_CONFIG_TEST(dlls/amstream/tests)
-+WINE_CONFIG_DLL(appwiz.cpl)
-+WINE_CONFIG_DLL(atl,,[atl])
-+WINE_CONFIG_TEST(dlls/atl/tests)
-+WINE_CONFIG_DLL(authz)
-+WINE_CONFIG_DLL(avicap32,,[avicap32])
-+WINE_CONFIG_DLL(avifil32,,[avifil32])
-+WINE_CONFIG_TEST(dlls/avifil32/tests)
-+WINE_CONFIG_DLL(avifile.dll16,enable_win16)
-+WINE_CONFIG_DLL(avrt,,[avrt])
-+WINE_CONFIG_DLL(bcrypt)
-+WINE_CONFIG_DLL(browseui)
-+WINE_CONFIG_TEST(dlls/browseui/tests)
-+WINE_CONFIG_DLL(cabinet,,[cabinet])
-+WINE_CONFIG_TEST(dlls/cabinet/tests)
-+WINE_CONFIG_DLL(capi2032,,[capi2032])
-+WINE_CONFIG_DLL(cards,,[cards])
-+WINE_CONFIG_DLL(cfgmgr32,,[cfgmgr32])
-+WINE_CONFIG_DLL(clusapi,,[clusapi])
-+WINE_CONFIG_DLL(comcat)
-+WINE_CONFIG_TEST(dlls/comcat/tests)
-+WINE_CONFIG_DLL(comctl32,,[comctl32])
-+WINE_CONFIG_TEST(dlls/comctl32/tests)
-+WINE_CONFIG_DLL(comdlg32,,[comdlg32])
-+WINE_CONFIG_TEST(dlls/comdlg32/tests)
-+WINE_CONFIG_DLL(comm.drv16,enable_win16)
-+WINE_CONFIG_DLL(commdlg.dll16,enable_win16)
-+WINE_CONFIG_DLL(compobj.dll16,enable_win16)
-+WINE_CONFIG_DLL(compstui,,[compstui])
-+WINE_CONFIG_DLL(credui,,[credui])
-+WINE_CONFIG_TEST(dlls/credui/tests)
-+WINE_CONFIG_DLL(crtdll,,[crtdll])
-+WINE_CONFIG_DLL(crypt32,,[crypt32])
-+WINE_CONFIG_TEST(dlls/crypt32/tests)
-+WINE_CONFIG_DLL(cryptdlg)
-+WINE_CONFIG_DLL(cryptdll,,[cryptdll])
-+WINE_CONFIG_DLL(cryptnet,,[cryptnet])
-+WINE_CONFIG_TEST(dlls/cryptnet/tests)
-+WINE_CONFIG_DLL(cryptui,,[cryptui])
-+WINE_CONFIG_TEST(dlls/cryptui/tests)
-+WINE_CONFIG_DLL(ctapi32)
-+WINE_CONFIG_DLL(ctl3d.dll16,enable_win16)
-+WINE_CONFIG_DLL(ctl3d32,,[ctl3d32])
-+WINE_CONFIG_DLL(ctl3dv2.dll16,enable_win16)
-+WINE_CONFIG_DLL(d3d10,,[d3d10])
-+WINE_CONFIG_TEST(dlls/d3d10/tests)
-+WINE_CONFIG_DLL(d3d10core,,[d3d10core])
-+WINE_CONFIG_TEST(dlls/d3d10core/tests)
-+WINE_CONFIG_DLL(d3d8,,[d3d8])
-+WINE_CONFIG_TEST(dlls/d3d8/tests)
-+WINE_CONFIG_DLL(d3d9,,[d3d9])
-+WINE_CONFIG_TEST(dlls/d3d9/tests)
-+WINE_CONFIG_DLL(d3dim,,[d3dim])
-+WINE_CONFIG_DLL(d3drm,,[d3drm])
-+WINE_CONFIG_TEST(dlls/d3drm/tests)
-+WINE_CONFIG_DLL(d3dx9_24)
-+WINE_CONFIG_DLL(d3dx9_25)
-+WINE_CONFIG_DLL(d3dx9_26)
-+WINE_CONFIG_DLL(d3dx9_27)
-+WINE_CONFIG_DLL(d3dx9_28)
-+WINE_CONFIG_DLL(d3dx9_29)
-+WINE_CONFIG_DLL(d3dx9_30)
-+WINE_CONFIG_DLL(d3dx9_31)
-+WINE_CONFIG_DLL(d3dx9_32)
-+WINE_CONFIG_DLL(d3dx9_33)
-+WINE_CONFIG_DLL(d3dx9_34)
-+WINE_CONFIG_DLL(d3dx9_35)
-+WINE_CONFIG_DLL(d3dx9_36,,[d3dx9])
-+WINE_CONFIG_TEST(dlls/d3dx9_36/tests)
-+WINE_CONFIG_DLL(d3dx9_37)
-+WINE_CONFIG_DLL(d3dx9_38)
-+WINE_CONFIG_DLL(d3dx9_39)
-+WINE_CONFIG_DLL(d3dx9_40)
-+WINE_CONFIG_DLL(d3dx9_41)
-+WINE_CONFIG_DLL(d3dx9_42)
-+WINE_CONFIG_DLL(d3dxof,,[d3dxof])
-+WINE_CONFIG_TEST(dlls/d3dxof/tests)
-+WINE_CONFIG_DLL(dbghelp,,[dbghelp])
-+WINE_CONFIG_DLL(dciman32,,[dciman32])
-+WINE_CONFIG_DLL(ddeml.dll16,enable_win16)
-+WINE_CONFIG_DLL(ddraw,,[ddraw])
-+WINE_CONFIG_TEST(dlls/ddraw/tests)
-+WINE_CONFIG_DLL(ddrawex)
-+WINE_CONFIG_TEST(dlls/ddrawex/tests)
-+WINE_CONFIG_DLL(devenum)
-+WINE_CONFIG_DLL(dinput,,[dinput],[data_formats.c])
-+WINE_CONFIG_TEST(dlls/dinput/tests)
-+WINE_CONFIG_DLL(dinput8,,[dinput8])
-+WINE_CONFIG_DLL(dispdib.dll16,enable_win16)
-+WINE_CONFIG_DLL(dispex)
-+WINE_CONFIG_TEST(dlls/dispex/tests)
-+WINE_CONFIG_DLL(display.drv16,enable_win16)
-+WINE_CONFIG_DLL(dmband)
-+WINE_CONFIG_DLL(dmcompos)
-+WINE_CONFIG_DLL(dmime)
-+WINE_CONFIG_DLL(dmloader)
-+WINE_CONFIG_TEST(dlls/dmloader/tests)
-+WINE_CONFIG_DLL(dmscript)
-+WINE_CONFIG_DLL(dmstyle)
-+WINE_CONFIG_DLL(dmsynth)
-+WINE_CONFIG_DLL(dmusic)
-+WINE_CONFIG_DLL(dmusic32,,[dmusic32])
-+WINE_CONFIG_DLL(dnsapi,,[dnsapi])
-+WINE_CONFIG_TEST(dlls/dnsapi/tests)
-+WINE_CONFIG_DLL(dplay,,[dplay])
-+WINE_CONFIG_DLL(dplayx,,[dplayx])
-+WINE_CONFIG_TEST(dlls/dplayx/tests)
-+WINE_CONFIG_DLL(dpnaddr)
-+WINE_CONFIG_DLL(dpnet,,[dpnet])
-+WINE_CONFIG_DLL(dpnhpast)
-+WINE_CONFIG_DLL(dpnlobby)
-+WINE_CONFIG_DLL(dpwsockx)
-+WINE_CONFIG_DLL(drmclien)
-+WINE_CONFIG_DLL(dsound,,[dsound])
-+WINE_CONFIG_TEST(dlls/dsound/tests)
-+WINE_CONFIG_DLL(dssenh)
-+WINE_CONFIG_DLL(dswave)
-+WINE_CONFIG_DLL(dwmapi,,[dwmapi])
-+WINE_CONFIG_DLL(dxdiagn)
-+WINE_CONFIG_TEST(dlls/dxdiagn/tests)
-+WINE_CONFIG_LIB(dxerr8)
-+WINE_CONFIG_LIB(dxerr9)
-+WINE_CONFIG_DLL(dxgi,,[dxgi])
-+WINE_CONFIG_TEST(dlls/dxgi/tests)
-+WINE_CONFIG_LIB(dxguid)
-+WINE_CONFIG_DLL(faultrep)
-+WINE_CONFIG_DLL(fltlib)
-+WINE_CONFIG_DLL(fusion)
-+WINE_CONFIG_TEST(dlls/fusion/tests)
-+WINE_CONFIG_DLL(fwpuclnt)
-+WINE_CONFIG_DLL(gameux)
-+WINE_CONFIG_DLL(gdi.exe16,enable_win16)
-+WINE_CONFIG_DLL(gdi32,,[gdi32])
-+WINE_CONFIG_TEST(dlls/gdi32/tests)
-+WINE_CONFIG_DLL(gdiplus,,[gdiplus])
-+WINE_CONFIG_TEST(dlls/gdiplus/tests)
-+WINE_CONFIG_DLL(glu32,,[glu32])
-+WINE_CONFIG_DLL(gphoto2.ds)
-+WINE_CONFIG_DLL(gpkcsp)
-+WINE_CONFIG_DLL(hal)
-+WINE_CONFIG_DLL(hhctrl.ocx)
-+WINE_CONFIG_DLL(hid,,[hid])
-+WINE_CONFIG_DLL(hlink,,[hlink])
-+WINE_CONFIG_TEST(dlls/hlink/tests)
-+WINE_CONFIG_DLL(hnetcfg)
-+WINE_CONFIG_DLL(httpapi)
-+WINE_CONFIG_DLL(iccvid)
-+WINE_CONFIG_DLL(icmp)
-+WINE_CONFIG_DLL(ifsmgr.vxd,enable_win16)
-+WINE_CONFIG_DLL(imaadp32.acm)
-+WINE_CONFIG_DLL(imagehlp,,[imagehlp])
-+WINE_CONFIG_TEST(dlls/imagehlp/tests)
-+WINE_CONFIG_DLL(imm.dll16,enable_win16)
-+WINE_CONFIG_DLL(imm32,,[imm32])
-+WINE_CONFIG_TEST(dlls/imm32/tests)
-+WINE_CONFIG_DLL(inetcomm,,[inetcomm])
-+WINE_CONFIG_TEST(dlls/inetcomm/tests)
-+WINE_CONFIG_DLL(inetmib1)
-+WINE_CONFIG_TEST(dlls/inetmib1/tests)
-+WINE_CONFIG_DLL(infosoft)
-+WINE_CONFIG_TEST(dlls/infosoft/tests)
-+WINE_CONFIG_DLL(initpki)
-+WINE_CONFIG_DLL(inkobj)
-+WINE_CONFIG_DLL(inseng)
-+WINE_CONFIG_DLL(iphlpapi,,[iphlpapi])
-+WINE_CONFIG_TEST(dlls/iphlpapi/tests)
-+WINE_CONFIG_DLL(itircl)
-+WINE_CONFIG_DLL(itss)
-+WINE_CONFIG_TEST(dlls/itss/tests)
-+WINE_CONFIG_DLL(jscript)
-+WINE_CONFIG_TEST(dlls/jscript/tests)
-+WINE_CONFIG_DLL(kernel32,,[kernel32])
-+WINE_CONFIG_TEST(dlls/kernel32/tests)
-+WINE_CONFIG_DLL(keyboard.drv16,enable_win16)
-+WINE_CONFIG_DLL(krnl386.exe16,enable_win16,[kernel])
-+WINE_CONFIG_DLL(loadperf,,[loadperf])
-+WINE_CONFIG_DLL(localspl)
-+WINE_CONFIG_TEST(dlls/localspl/tests)
-+WINE_CONFIG_DLL(localui)
-+WINE_CONFIG_TEST(dlls/localui/tests)
-+WINE_CONFIG_DLL(lz32,,[lz32])
-+WINE_CONFIG_TEST(dlls/lz32/tests)
-+WINE_CONFIG_DLL(lzexpand.dll16,enable_win16)
-+WINE_CONFIG_DLL(mapi32,,[mapi32])
-+WINE_CONFIG_TEST(dlls/mapi32/tests)
-+WINE_CONFIG_DLL(mapistub)
-+WINE_CONFIG_DLL(mciavi32)
-+WINE_CONFIG_DLL(mcicda)
-+WINE_CONFIG_DLL(mciqtz32)
-+WINE_CONFIG_DLL(mciseq)
-+WINE_CONFIG_DLL(mciwave)
-+WINE_CONFIG_DLL(midimap)
-+WINE_CONFIG_DLL(mlang,,[mlang])
-+WINE_CONFIG_TEST(dlls/mlang/tests)
-+WINE_CONFIG_DLL(mmdevapi)
-+WINE_CONFIG_TEST(dlls/mmdevapi/tests)
-+WINE_CONFIG_DLL(mmdevldr.vxd,enable_win16)
-+WINE_CONFIG_DLL(mmsystem.dll16,enable_win16)
-+WINE_CONFIG_DLL(monodebg.vxd,enable_win16)
-+WINE_CONFIG_DLL(mountmgr.sys)
-+WINE_CONFIG_DLL(mouse.drv16,enable_win16)
-+WINE_CONFIG_DLL(mpr,,[mpr])
-+WINE_CONFIG_DLL(mprapi,,[mprapi])
-+WINE_CONFIG_DLL(msacm.dll16,enable_win16)
-+WINE_CONFIG_DLL(msacm32.drv)
-+WINE_CONFIG_DLL(msacm32,,[msacm32])
-+WINE_CONFIG_TEST(dlls/msacm32/tests)
-+WINE_CONFIG_DLL(msadp32.acm)
-+WINE_CONFIG_DLL(mscat32)
-+WINE_CONFIG_DLL(mscms,,[mscms])
-+WINE_CONFIG_TEST(dlls/mscms/tests)
-+WINE_CONFIG_DLL(mscoree)
-+WINE_CONFIG_DLL(msctf)
-+WINE_CONFIG_TEST(dlls/msctf/tests)
-+WINE_CONFIG_DLL(msdaps)
-+WINE_CONFIG_DLL(msdmo,,[msdmo])
-+WINE_CONFIG_DLL(msftedit)
-+WINE_CONFIG_DLL(msg711.acm)
-+WINE_CONFIG_DLL(msgsm32.acm)
-+WINE_CONFIG_DLL(mshtml.tlb)
-+WINE_CONFIG_DLL(mshtml,,[mshtml])
-+WINE_CONFIG_TEST(dlls/mshtml/tests)
-+WINE_CONFIG_DLL(msi,,[msi])
-+WINE_CONFIG_TEST(dlls/msi/tests)
-+WINE_CONFIG_DLL(msimg32,,[msimg32])
-+WINE_CONFIG_DLL(msimtf)
-+WINE_CONFIG_DLL(msisip)
-+WINE_CONFIG_DLL(msisys.ocx)
-+WINE_CONFIG_DLL(msnet32)
-+WINE_CONFIG_DLL(msrle32)
-+WINE_CONFIG_DLL(mssign32)
-+WINE_CONFIG_DLL(mssip32)
-+WINE_CONFIG_DLL(mstask)
-+WINE_CONFIG_TEST(dlls/mstask/tests)
-+WINE_CONFIG_DLL(msvcirt)
-+WINE_CONFIG_DLL(msvcp90)
-+WINE_CONFIG_TEST(dlls/msvcp90/tests)
-+WINE_CONFIG_DLL(msvcr100)
-+WINE_CONFIG_DLL(msvcr70,,[msvcr70])
-+WINE_CONFIG_DLL(msvcr71,,[msvcr71])
-+WINE_CONFIG_DLL(msvcr80)
-+WINE_CONFIG_DLL(msvcr90)
-+WINE_CONFIG_TEST(dlls/msvcr90/tests)
-+WINE_CONFIG_DLL(msvcrt,,[msvcrt])
-+WINE_CONFIG_TEST(dlls/msvcrt/tests)
-+WINE_CONFIG_DLL(msvcrt20,,[msvcrt20])
-+WINE_CONFIG_DLL(msvcrt40,,[msvcrt40])
-+WINE_CONFIG_DLL(msvcrtd,,[msvcrtd])
-+WINE_CONFIG_TEST(dlls/msvcrtd/tests)
-+WINE_CONFIG_DLL(msvfw32,,[msvfw32])
-+WINE_CONFIG_TEST(dlls/msvfw32/tests)
-+WINE_CONFIG_DLL(msvidc32)
-+WINE_CONFIG_DLL(msvideo.dll16,enable_win16)
-+WINE_CONFIG_DLL(mswsock,,[mswsock])
-+WINE_CONFIG_DLL(msxml3)
-+WINE_CONFIG_TEST(dlls/msxml3/tests)
-+WINE_CONFIG_DLL(msxml4)
-+WINE_CONFIG_DLL(nddeapi,,[nddeapi])
-+WINE_CONFIG_DLL(netapi32,,[netapi32])
-+WINE_CONFIG_TEST(dlls/netapi32/tests)
-+WINE_CONFIG_DLL(newdev,,[newdev])
-+WINE_CONFIG_DLL(ntdll,,[ntdll])
-+WINE_CONFIG_TEST(dlls/ntdll/tests)
-+WINE_CONFIG_DLL(ntdsapi,,[ntdsapi])
-+WINE_CONFIG_TEST(dlls/ntdsapi/tests)
-+WINE_CONFIG_DLL(ntoskrnl.exe,,[ntoskrnl.exe])
-+WINE_CONFIG_DLL(ntprint)
-+WINE_CONFIG_TEST(dlls/ntprint/tests)
-+WINE_CONFIG_DLL(objsel)
-+WINE_CONFIG_DLL(odbc32,,[odbc32])
-+WINE_CONFIG_DLL(odbccp32,,[odbccp32])
-+WINE_CONFIG_TEST(dlls/odbccp32/tests)
-+WINE_CONFIG_DLL(ole2.dll16,enable_win16)
-+WINE_CONFIG_DLL(ole2conv.dll16,enable_win16)
-+WINE_CONFIG_DLL(ole2disp.dll16,enable_win16)
-+WINE_CONFIG_DLL(ole2nls.dll16,enable_win16)
-+WINE_CONFIG_DLL(ole2prox.dll16,enable_win16)
-+WINE_CONFIG_DLL(ole2thk.dll16,enable_win16)
-+WINE_CONFIG_DLL(ole32,,[ole32])
-+WINE_CONFIG_TEST(dlls/ole32/tests)
-+WINE_CONFIG_DLL(oleacc,,[oleacc])
-+WINE_CONFIG_TEST(dlls/oleacc/tests)
-+WINE_CONFIG_DLL(oleaut32,,[oleaut32])
-+WINE_CONFIG_TEST(dlls/oleaut32/tests)
-+WINE_CONFIG_DLL(olecli.dll16,enable_win16)
-+WINE_CONFIG_DLL(olecli32,,[olecli32])
-+WINE_CONFIG_DLL(oledb32)
-+WINE_CONFIG_TEST(dlls/oledb32/tests)
-+WINE_CONFIG_DLL(oledlg,,[oledlg])
-+WINE_CONFIG_DLL(olepro32,,[olepro32])
-+WINE_CONFIG_DLL(olesvr.dll16,enable_win16)
-+WINE_CONFIG_DLL(olesvr32,,[olesvr32])
-+WINE_CONFIG_DLL(olethk32)
-+WINE_CONFIG_DLL(openal32)
-+WINE_CONFIG_DLL(opengl32,,[opengl32])
-+WINE_CONFIG_TEST(dlls/opengl32/tests)
-+WINE_CONFIG_DLL(pdh,,[pdh])
-+WINE_CONFIG_TEST(dlls/pdh/tests)
-+WINE_CONFIG_DLL(pidgen)
-+WINE_CONFIG_DLL(powrprof,,[powrprof])
-+WINE_CONFIG_DLL(printui)
-+WINE_CONFIG_DLL(propsys,,[propsys])
-+WINE_CONFIG_TEST(dlls/propsys/tests)
-+WINE_CONFIG_DLL(psapi,,[psapi])
-+WINE_CONFIG_TEST(dlls/psapi/tests)
-+WINE_CONFIG_DLL(pstorec)
-+WINE_CONFIG_DLL(qcap)
-+WINE_CONFIG_DLL(qedit)
-+WINE_CONFIG_TEST(dlls/qedit/tests)
-+WINE_CONFIG_DLL(qmgr)
-+WINE_CONFIG_TEST(dlls/qmgr/tests)
-+WINE_CONFIG_DLL(qmgrprxy)
-+WINE_CONFIG_DLL(quartz,,[quartz])
-+WINE_CONFIG_TEST(dlls/quartz/tests)
-+WINE_CONFIG_DLL(query)
-+WINE_CONFIG_DLL(rasapi16.dll16,enable_win16)
-+WINE_CONFIG_DLL(rasapi32,,[rasapi32])
-+WINE_CONFIG_TEST(dlls/rasapi32/tests)
-+WINE_CONFIG_DLL(rasdlg,,[rasdlg])
-+WINE_CONFIG_DLL(resutils,,[resutils])
-+WINE_CONFIG_DLL(riched20,,[riched20])
-+WINE_CONFIG_TEST(dlls/riched20/tests)
-+WINE_CONFIG_DLL(riched32)
-+WINE_CONFIG_TEST(dlls/riched32/tests)
-+WINE_CONFIG_DLL(rpcrt4,,[rpcrt4])
-+WINE_CONFIG_TEST(dlls/rpcrt4/tests)
-+WINE_CONFIG_DLL(rsabase)
-+WINE_CONFIG_DLL(rsaenh,,[rsaenh])
-+WINE_CONFIG_TEST(dlls/rsaenh/tests)
-+WINE_CONFIG_DLL(rtutils,,[rtutils])
-+WINE_CONFIG_DLL(samlib)
-+WINE_CONFIG_DLL(sane.ds)
-+WINE_CONFIG_DLL(sccbase)
-+WINE_CONFIG_DLL(schannel)
-+WINE_CONFIG_TEST(dlls/schannel/tests)
-+WINE_CONFIG_DLL(secur32,,[secur32])
-+WINE_CONFIG_TEST(dlls/secur32/tests)
-+WINE_CONFIG_DLL(security)
-+WINE_CONFIG_DLL(sensapi,,[sensapi])
-+WINE_CONFIG_DLL(serialui,,[serialui])
-+WINE_CONFIG_TEST(dlls/serialui/tests)
-+WINE_CONFIG_DLL(setupapi,,[setupapi])
-+WINE_CONFIG_TEST(dlls/setupapi/tests)
-+WINE_CONFIG_DLL(setupx.dll16,enable_win16)
-+WINE_CONFIG_DLL(sfc,,[sfc])
-+WINE_CONFIG_DLL(sfc_os,,[sfc_os])
-+WINE_CONFIG_DLL(shdoclc)
-+WINE_CONFIG_DLL(shdocvw,,[shdocvw])
-+WINE_CONFIG_TEST(dlls/shdocvw/tests)
-+WINE_CONFIG_DLL(shell.dll16,enable_win16)
-+WINE_CONFIG_DLL(shell32,,[shell32])
-+WINE_CONFIG_TEST(dlls/shell32/tests)
-+WINE_CONFIG_DLL(shfolder,,[shfolder])
-+WINE_CONFIG_DLL(shlwapi,,[shlwapi])
-+WINE_CONFIG_TEST(dlls/shlwapi/tests)
-+WINE_CONFIG_DLL(slbcsp)
-+WINE_CONFIG_DLL(slc,,[slc])
-+WINE_CONFIG_DLL(snmpapi,,[snmpapi])
-+WINE_CONFIG_TEST(dlls/snmpapi/tests)
-+WINE_CONFIG_DLL(softpub)
-+WINE_CONFIG_DLL(sound.drv16,enable_win16)
-+WINE_CONFIG_DLL(spoolss,,[spoolss])
-+WINE_CONFIG_TEST(dlls/spoolss/tests)
-+WINE_CONFIG_DLL(stdole2.tlb)
-+WINE_CONFIG_DLL(stdole32.tlb)
-+WINE_CONFIG_DLL(sti,,[sti])
-+WINE_CONFIG_TEST(dlls/sti/tests)
-+WINE_CONFIG_DLL(storage.dll16,enable_win16)
-+WINE_CONFIG_DLL(stress.dll16,enable_win16)
-+WINE_CONFIG_LIB(strmiids)
-+WINE_CONFIG_DLL(svrapi)
-+WINE_CONFIG_DLL(sxs)
-+WINE_CONFIG_DLL(system.drv16,enable_win16)
-+WINE_CONFIG_DLL(t2embed)
-+WINE_CONFIG_DLL(tapi32,,[tapi32])
-+WINE_CONFIG_DLL(toolhelp.dll16,enable_win16)
-+WINE_CONFIG_DLL(traffic)
-+WINE_CONFIG_DLL(twain.dll16,enable_win16)
-+WINE_CONFIG_DLL(twain_32)
-+WINE_CONFIG_TEST(dlls/twain_32/tests)
-+WINE_CONFIG_DLL(typelib.dll16,enable_win16)
-+WINE_CONFIG_DLL(unicows,,[unicows])
-+WINE_CONFIG_DLL(updspapi)
-+WINE_CONFIG_DLL(url,,[url])
-+WINE_CONFIG_DLL(urlmon,,[urlmon])
-+WINE_CONFIG_TEST(dlls/urlmon/tests)
-+WINE_CONFIG_DLL(usbd.sys,,[usbd.sys])
-+WINE_CONFIG_DLL(user.exe16,enable_win16)
-+WINE_CONFIG_DLL(user32,,[user32])
-+WINE_CONFIG_TEST(dlls/user32/tests)
-+WINE_CONFIG_DLL(userenv,,[userenv])
-+WINE_CONFIG_TEST(dlls/userenv/tests)
-+WINE_CONFIG_DLL(usp10,,[usp10])
-+WINE_CONFIG_TEST(dlls/usp10/tests)
-+WINE_CONFIG_LIB(uuid)
-+WINE_CONFIG_DLL(uxtheme,,[uxtheme])
-+WINE_CONFIG_TEST(dlls/uxtheme/tests)
-+WINE_CONFIG_DLL(vdhcp.vxd,enable_win16)
-+WINE_CONFIG_DLL(vdmdbg,,[vdmdbg])
-+WINE_CONFIG_DLL(ver.dll16,enable_win16)
-+WINE_CONFIG_DLL(version,,[version])
-+WINE_CONFIG_TEST(dlls/version/tests)
-+WINE_CONFIG_DLL(vmm.vxd,enable_win16)
-+WINE_CONFIG_DLL(vnbt.vxd,enable_win16)
-+WINE_CONFIG_DLL(vnetbios.vxd,enable_win16)
-+WINE_CONFIG_DLL(vtdapi.vxd,enable_win16)
-+WINE_CONFIG_DLL(vwin32.vxd,enable_win16)
-+WINE_CONFIG_DLL(w32skrnl,enable_win16)
-+WINE_CONFIG_DLL(w32sys.dll16,enable_win16)
-+WINE_CONFIG_DLL(wbemprox)
-+WINE_CONFIG_DLL(wiaservc)
-+WINE_CONFIG_DLL(win32s16.dll16,enable_win16)
-+WINE_CONFIG_DLL(win87em.dll16,enable_win16)
-+WINE_CONFIG_DLL(winaspi.dll16,enable_win16)
-+WINE_CONFIG_DLL(windebug.dll16,enable_win16)
-+WINE_CONFIG_DLL(windowscodecs,,[windowscodecs])
-+WINE_CONFIG_TEST(dlls/windowscodecs/tests)
-+WINE_CONFIG_DLL(winealsa.drv)
-+WINE_CONFIG_DLL(wineaudioio.drv)
-+WINE_CONFIG_DLL(winecoreaudio.drv)
-+WINE_CONFIG_LIB(winecrt0)
-+WINE_CONFIG_DLL(wined3d,,[wined3d])
-+WINE_CONFIG_DLL(wineesd.drv)
-+WINE_CONFIG_DLL(winejack.drv)
-+WINE_CONFIG_DLL(winejoystick.drv)
-+WINE_CONFIG_DLL(winemapi)
-+WINE_CONFIG_DLL(winemp3.acm)
-+WINE_CONFIG_DLL(winenas.drv)
-+WINE_CONFIG_DLL(wineoss.drv)
-+WINE_CONFIG_DLL(wineps.drv)
-+WINE_CONFIG_DLL(wineps16.drv16,enable_win16)
-+WINE_CONFIG_DLL(winequartz.drv)
-+WINE_CONFIG_DLL(winex11.drv)
-+WINE_CONFIG_DLL(wing.dll16,enable_win16)
-+WINE_CONFIG_DLL(wing32)
-+WINE_CONFIG_DLL(winhttp,,[winhttp])
-+WINE_CONFIG_TEST(dlls/winhttp/tests)
-+WINE_CONFIG_DLL(wininet,,[wininet])
-+WINE_CONFIG_TEST(dlls/wininet/tests)
-+WINE_CONFIG_DLL(winmm,,[winmm])
-+WINE_CONFIG_TEST(dlls/winmm/tests)
-+WINE_CONFIG_DLL(winnls.dll16,enable_win16)
-+WINE_CONFIG_DLL(winnls32,,[winnls32])
-+WINE_CONFIG_DLL(winscard,,[winscard])
-+WINE_CONFIG_DLL(winsock.dll16,enable_win16)
-+WINE_CONFIG_DLL(winspool.drv,,[winspool])
-+WINE_CONFIG_TEST(dlls/winspool.drv/tests)
-+WINE_CONFIG_DLL(wintab.dll16,enable_win16)
-+WINE_CONFIG_DLL(wintab32,,[wintab32])
-+WINE_CONFIG_TEST(dlls/wintab32/tests)
-+WINE_CONFIG_DLL(wintrust,,[wintrust])
-+WINE_CONFIG_TEST(dlls/wintrust/tests)
-+WINE_CONFIG_DLL(wldap32,,[wldap32])
-+WINE_CONFIG_TEST(dlls/wldap32/tests)
-+WINE_CONFIG_DLL(wmi)
-+WINE_CONFIG_DLL(wmiutils)
-+WINE_CONFIG_DLL(wnaspi32,,[wnaspi32])
-+WINE_CONFIG_DLL(wow32,enable_win16,[wow32])
-+WINE_CONFIG_DLL(ws2_32,,[ws2_32])
-+WINE_CONFIG_TEST(dlls/ws2_32/tests)
-+WINE_CONFIG_DLL(wsock32,,[wsock32])
-+WINE_CONFIG_DLL(wtsapi32,,[wtsapi32])
-+WINE_CONFIG_DLL(wuapi)
-+WINE_CONFIG_DLL(wuaueng)
-+WINE_CONFIG_DLL(xinput1_1)
-+WINE_CONFIG_DLL(xinput1_2)
-+WINE_CONFIG_DLL(xinput1_3,,[xinput])
-+WINE_CONFIG_TEST(dlls/xinput1_3/tests)
-+WINE_CONFIG_DLL(xinput9_1_0)
-+WINE_CONFIG_DLL(xmllite)
-+WINE_CONFIG_TEST(dlls/xmllite/tests)
-+WINE_CONFIG_MAKEFILE([documentation])
-+WINE_CONFIG_MAKEFILE([fonts])
-+WINE_CONFIG_MAKEFILE([include])
-+WINE_CONFIG_MAKEFILE([libs/port])
-+WINE_CONFIG_MAKEFILE([libs/wine])
-+WINE_CONFIG_MAKEFILE([libs/wpp])
-+WINE_CONFIG_MAKEFILE([loader])
-+WINE_CONFIG_PROGRAM(attrib,install)
-+WINE_CONFIG_PROGRAM(cacls,install)
-+WINE_CONFIG_PROGRAM(clock,install)
-+WINE_CONFIG_PROGRAM(cmd,install)
-+WINE_CONFIG_TEST(programs/cmd/tests)
-+WINE_CONFIG_PROGRAM(cmdlgtst)
-+WINE_CONFIG_PROGRAM(control,install)
-+WINE_CONFIG_PROGRAM(dxdiag,install)
-+WINE_CONFIG_PROGRAM(eject,install)
-+WINE_CONFIG_PROGRAM(expand,install)
-+WINE_CONFIG_PROGRAM(explorer,install)
-+WINE_CONFIG_PROGRAM(extrac32,install)
-+WINE_CONFIG_PROGRAM(hh,install)
-+WINE_CONFIG_PROGRAM(icinfo,install)
-+WINE_CONFIG_PROGRAM(iexplore,install)
-+WINE_CONFIG_PROGRAM(lodctr,install)
-+WINE_CONFIG_PROGRAM(mshta,install)
-+WINE_CONFIG_PROGRAM(msiexec,installbin)
-+WINE_CONFIG_PROGRAM(net,install)
-+WINE_CONFIG_PROGRAM(ngen,install)
-+WINE_CONFIG_PROGRAM(notepad,installbin)
-+WINE_CONFIG_PROGRAM(oleview,install)
-+WINE_CONFIG_PROGRAM(ping,install)
-+WINE_CONFIG_PROGRAM(progman,install)
-+WINE_CONFIG_PROGRAM(reg,install)
-+WINE_CONFIG_PROGRAM(regedit,installbin)
-+WINE_CONFIG_PROGRAM(regsvr32,installbin)
-+WINE_CONFIG_PROGRAM(rpcss,install)
-+WINE_CONFIG_PROGRAM(rundll.exe16,install,enable_win16)
-+WINE_CONFIG_PROGRAM(rundll32,install)
-+WINE_CONFIG_PROGRAM(sc,install)
-+WINE_CONFIG_PROGRAM(secedit,install)
-+WINE_CONFIG_PROGRAM(services,install)
-+WINE_CONFIG_PROGRAM(spoolsv,install)
-+WINE_CONFIG_PROGRAM(start,install)
-+WINE_CONFIG_PROGRAM(svchost,install)
-+WINE_CONFIG_PROGRAM(taskmgr,install)
-+WINE_CONFIG_PROGRAM(termsv,install)
-+WINE_CONFIG_PROGRAM(uninstaller,install)
-+WINE_CONFIG_PROGRAM(unlodctr,install)
-+WINE_CONFIG_PROGRAM(view)
-+WINE_CONFIG_PROGRAM(wineboot,installbin)
-+WINE_CONFIG_PROGRAM(winebrowser,install)
-+WINE_CONFIG_PROGRAM(winecfg,installbin)
-+WINE_CONFIG_PROGRAM(wineconsole,installbin)
-+WINE_CONFIG_PROGRAM(winedbg,installbin)
-+WINE_CONFIG_PROGRAM(winedevice,install)
-+WINE_CONFIG_PROGRAM(winefile,installbin)
-+WINE_CONFIG_PROGRAM(winemenubuilder,install)
-+WINE_CONFIG_PROGRAM(winemine,installbin)
-+WINE_CONFIG_PROGRAM(winepath,installbin)
-+WINE_CONFIG_PROGRAM(winetest)
-+WINE_CONFIG_PROGRAM(winevdm,install,enable_win16)
-+WINE_CONFIG_PROGRAM(winhelp.exe16,install,enable_win16)
-+WINE_CONFIG_PROGRAM(winhlp32,install)
-+WINE_CONFIG_PROGRAM(winoldap.mod16,install,enable_win16)
-+WINE_CONFIG_PROGRAM(winver,install)
-+WINE_CONFIG_PROGRAM(wordpad,install)
-+WINE_CONFIG_PROGRAM(write,install)
-+WINE_CONFIG_PROGRAM(wscript,install)
-+WINE_CONFIG_PROGRAM(xcopy,install)
-+WINE_CONFIG_MAKEFILE([server])
-+WINE_CONFIG_TOOL(tools)
-+WINE_CONFIG_TOOL(tools/widl)
-+WINE_CONFIG_TOOL(tools/winebuild)
-+WINE_CONFIG_TOOL(tools/winedump)
-+WINE_CONFIG_TOOL(tools/winegcc)
-+WINE_CONFIG_TOOL(tools/wmc)
-+WINE_CONFIG_TOOL(tools/wrc)
-+dnl End of auto-generated output commands
-+
-+AC_CONFIG_COMMANDS([Makefile], [wine_fn_output_makefile Makefile],
-+[wine_fn_output_makefile ()
-+{
-+ cat Make.tmp - <<\_WINE_EOF >\$tmp/makefile && mv -f \$tmp/makefile \$[]1 && rm -f Make.tmp && return
-+$ALL_MAKEFILE_DEPENDS
-+_WINE_EOF
-+ AS_ERROR([could not create Makefile])
-+}])
-+
-+AC_CONFIG_FILES([Make.tmp:Makefile.in])
-+
-+dnl Some final makefile rules
-+
-+if test -n "$with_wine64"
-+then
-+WINE_APPEND_RULE([ALL_MAKEFILE_DEPENDS],
-+[all: fonts server $with_wine64/loader/wine
-+fonts server:
-+ \$(RM) \$[@] && \$(LN_S) $with_wine64/\$[@] \$[@]
-+$with_wine64/loader/wine:
-+ \$(RM) \$[@] && \$(LN_S) $ac_pwd/loader/wine \$[@]
-+clean::
-+ \$(RM) fonts server $with_wine64/loader/wine])
-+fi
-+
-+WINE_APPEND_RULE([ALL_MAKEFILE_DEPENDS],
-+[uninstall::
-+ -rmdir \$(DESTDIR)\$(datadir)/wine \$(DESTDIR)\$(fakedlldir) \$(DESTDIR)\$(dlldir)])
-+
-+AC_OUTPUT
-+
-+if test "$no_create" = "yes"
-+then
-+ exit 0
-+fi
-+
-+WINE_PRINT_MESSAGES
-+
-+echo "
-+$as_me: Finished. Do '${ac_make}' to compile Wine.
-+" >&AS_MESSAGE_FD
-+
-+dnl Local Variables:
-+dnl comment-start: "dnl "
-+dnl comment-end: ""
-+dnl comment-start-skip: "\\bdnl\\b\\s *"
-+dnl compile-command: "autoreconf --warnings=all"
-+dnl End:
-diff -Nru a/dlls/gdi32/driver.c b/dlls/gdi32/driver.c
---- a/dlls/gdi32/driver.c 2010-07-30 19:43:56.000000000 +0200
-+++ b/dlls/gdi32/driver.c 2010-08-04 16:08:44.337222017 +0200
-@@ -3,6 +3,7 @@
- *
- * Copyright 1994 Bob Amstadt
- * Copyright 1996, 2001 Alexandre Julliard
-+ * Copyright 2009 Massimo Del Fedele
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
-@@ -25,6 +26,7 @@
- #include <stdarg.h>
- #include <string.h>
- #include <stdio.h>
-+#include <stdlib.h>
- #include "windef.h"
- #include "winbase.h"
- #include "winreg.h"
-@@ -213,6 +215,104 @@
-
-
- /**********************************************************************
-+ * Load_Dib_Driver
-+ *
-+ * Check if we want the DIB engine and try to load it
-+ */
-+static HMODULE Load_Dib_Driver(void)
-+{
-+ HMODULE module;
-+
-+ static const char *winedib_drv = "winedib.drv";
-+
-+ /* we do want use DIB Engine ? */
-+ BOOL driverRequired = TRUE;
-+
-+ /* already checked env/registry for DIB driver ? */
-+ BOOL envChecked = FALSE;
-+
-+ char *winedib;
-+ char buffer[10];
-+
-+ /* environment variable WINEDIB takes precedence */
-+ if( (winedib = getenv("WINEDIB")) != NULL)
-+ {
-+ if(!strcasecmp(winedib, "ON") ||
-+ !strcasecmp(winedib, "TRUE") ||
-+ !strcasecmp(winedib, "ENABLE") ||
-+ !strcasecmp(winedib, "ENABLED")
-+ )
-+ {
-+ TRACE("DIB Engine enabled by environment\n");
-+ envChecked = TRUE;
-+ driverRequired = TRUE;
-+ }
-+ else if(!strcasecmp(winedib, "OFF") ||
-+ !strcasecmp(winedib, "FALSE") ||
-+ !strcasecmp(winedib, "DISABLE") ||
-+ !strcasecmp(winedib, "DISABLED")
-+ )
-+ {
-+ TRACE("DIB Engine disabled by environment\n");
-+ envChecked = TRUE;
-+ driverRequired = FALSE;
-+ }
-+ else
-+ ERR("Bad WINEDIB environment variable\n");
-+ }
-+
-+ /* no WINEDIB environment var found or wrong value, we check registry */
-+ if(!envChecked)
-+ {
-+ HKEY hkey;
-+ buffer[0] = 0;
-+ if (!RegOpenKeyA( HKEY_CURRENT_USER, "Software\\Wine\\DIB Engine", &hkey ))
-+ {
-+ DWORD type, count = sizeof(buffer);
-+ RegQueryValueExA( hkey, "Enable", 0, &type, (LPBYTE) buffer, &count );
-+ RegCloseKey( hkey );
-+ }
-+ if(*buffer)
-+ {
-+ /* registry value found, must be Y or y to enable driver, N or n to disable */
-+ if(!strncasecmp(buffer, "Y", 1))
-+ {
-+ TRACE("DIB Engine enabled by registry\n");
-+ envChecked = TRUE;
-+ driverRequired = TRUE;
-+ }
-+ else if(!strncasecmp(buffer, "N", 1))
-+ {
-+ TRACE("DIB Engine disabled by registry\n");
-+ envChecked = TRUE;
-+ driverRequired = FALSE;
-+ }
-+ }
-+ }
-+
-+ /* none of above, we assume we don't want to use engine */
-+ if(!envChecked)
-+ {
-+ TRACE("DIB Engine disabled by default\n");
-+ envChecked = TRUE;
-+ driverRequired = FALSE;
-+ }
-+
-+ /* if DIB Engine is required, try to load it
-+ * otherwise just return NULL module */
-+ if(driverRequired)
-+ {
-+ if( (module = LoadLibraryA( winedib_drv )) != 0)
-+ TRACE("Succesfully loaded DIB Engine\n");
-+ else
-+ ERR("Couldn't load DIB Engine\n");
-+ return module;
-+ }
-+ else
-+ return 0;
-+}
-+
-+/**********************************************************************
- * DRIVER_get_display_driver
- *
- * Special case for loading the display driver: get the name from the config file
-@@ -225,25 +325,32 @@
- HKEY hkey;
-
- if (display_driver) return &display_driver->funcs; /* already loaded */
-+
-+ /* check at first if DIB engine is present and if we want
-+ * to use it */
-+ if( (module = Load_Dib_Driver()) == 0)
-+ {
-+ /* no DIB Engine loaded, just load normal display driver */
-+
-+ strcpy( buffer, "x11" ); /* default value */
-+ /* @@ Wine registry key: HKCU\Software\Wine\Drivers */
-+ if (!RegOpenKeyA( HKEY_CURRENT_USER, "Software\\Wine\\Drivers", &hkey ))
-+ {
-+ DWORD type, count = sizeof(buffer);
-+ RegQueryValueExA( hkey, "Graphics", 0, &type, (LPBYTE) buffer, &count );
-+ RegCloseKey( hkey );
-+ }
-
-- strcpy( buffer, "x11" ); /* default value */
-- /* @@ Wine registry key: HKCU\Software\Wine\Drivers */
-- if (!RegOpenKeyA( HKEY_CURRENT_USER, "Software\\Wine\\Drivers", &hkey ))
-- {
-- DWORD type, count = sizeof(buffer);
-- RegQueryValueExA( hkey, "Graphics", 0, &type, (LPBYTE) buffer, &count );
-- RegCloseKey( hkey );
-- }
--
-- name = buffer;
-- while (name)
-- {
-- next = strchr( name, ',' );
-- if (next) *next++ = 0;
-+ name = buffer;
-+ while (name)
-+ {
-+ next = strchr( name, ',' );
-+ if (next) *next++ = 0;
-
-- snprintf( libname, sizeof(libname), "wine%s.drv", name );
-- if ((module = LoadLibraryA( libname )) != 0) break;
-- name = next;
-+ snprintf( libname, sizeof(libname), "wine%s.drv", name );
-+ if ((module = LoadLibraryA( libname )) != 0) break;
-+ name = next;
-+ }
- }
-
- if (!(driver = create_driver( module )))
-diff -Nru a/dlls/gdi32/driver.c.orig b/dlls/gdi32/driver.c.orig
---- a/dlls/gdi32/driver.c.orig 1970-01-01 01:00:00.000000000 +0100
-+++ b/dlls/gdi32/driver.c.orig 2010-07-30 19:43:56.000000000 +0200
-@@ -0,0 +1,698 @@
-+/*
-+ * Graphics driver management functions
-+ *
-+ * Copyright 1994 Bob Amstadt
-+ * Copyright 1996, 2001 Alexandre Julliard
-+ *
-+ * This library is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License as published by the Free Software Foundation; either
-+ * version 2.1 of the License, or (at your option) any later version.
-+ *
-+ * This library is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with this library; if not, write to the Free Software
-+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
-+ */
-+
-+#include "config.h"
-+#include "wine/port.h"
-+
-+#include <stdarg.h>
-+#include <string.h>
-+#include <stdio.h>
-+#include "windef.h"
-+#include "winbase.h"
-+#include "winreg.h"
-+#include "ddrawgdi.h"
-+#include "wine/winbase16.h"
-+
-+#include "gdi_private.h"
-+#include "wine/unicode.h"
-+#include "wine/list.h"
-+#include "wine/debug.h"
-+
-+WINE_DEFAULT_DEBUG_CHANNEL(driver);
-+
-+struct graphics_driver
-+{
-+ struct list entry;
-+ HMODULE module; /* module handle */
-+ DC_FUNCTIONS funcs;
-+};
-+
-+static struct list drivers = LIST_INIT( drivers );
-+static struct graphics_driver *display_driver;
-+
-+static CRITICAL_SECTION driver_section;
-+static CRITICAL_SECTION_DEBUG critsect_debug =
-+{
-+ 0, 0, &driver_section,
-+ { &critsect_debug.ProcessLocksList, &critsect_debug.ProcessLocksList },
-+ 0, 0, { (DWORD_PTR)(__FILE__ ": driver_section") }
-+};
-+static CRITICAL_SECTION driver_section = { &critsect_debug, -1, 0, 0, 0, 0 };
-+
-+/**********************************************************************
-+ * create_driver
-+ *
-+ * Allocate and fill the driver structure for a given module.
-+ */
-+static struct graphics_driver *create_driver( HMODULE module )
-+{
-+ struct graphics_driver *driver;
-+
-+ if (!(driver = HeapAlloc( GetProcessHeap(), 0, sizeof(*driver)))) return NULL;
-+ driver->module = module;
-+
-+ /* fill the function table */
-+ if (module)
-+ {
-+#define GET_FUNC(name) driver->funcs.p##name = (void*)GetProcAddress( module, #name )
-+ GET_FUNC(AbortDoc);
-+ GET_FUNC(AbortPath);
-+ GET_FUNC(AlphaBlend);
-+ GET_FUNC(AngleArc);
-+ GET_FUNC(Arc);
-+ GET_FUNC(ArcTo);
-+ GET_FUNC(BeginPath);
-+ GET_FUNC(BitBlt);
-+ GET_FUNC(ChoosePixelFormat);
-+ GET_FUNC(Chord);
-+ GET_FUNC(CloseFigure);
-+ GET_FUNC(CreateBitmap);
-+ GET_FUNC(CreateDC);
-+ GET_FUNC(CreateDIBSection);
-+ GET_FUNC(DeleteBitmap);
-+ GET_FUNC(DeleteDC);
-+ GET_FUNC(DescribePixelFormat);
-+ GET_FUNC(DeviceCapabilities);
-+ GET_FUNC(Ellipse);
-+ GET_FUNC(EndDoc);
-+ GET_FUNC(EndPage);
-+ GET_FUNC(EndPath);
-+ GET_FUNC(EnumDeviceFonts);
-+ GET_FUNC(ExcludeClipRect);
-+ GET_FUNC(ExtDeviceMode);
-+ GET_FUNC(ExtEscape);
-+ GET_FUNC(ExtFloodFill);
-+ GET_FUNC(ExtSelectClipRgn);
-+ GET_FUNC(ExtTextOut);
-+ GET_FUNC(FillPath);
-+ GET_FUNC(FillRgn);
-+ GET_FUNC(FlattenPath);
-+ GET_FUNC(FrameRgn);
-+ GET_FUNC(GdiComment);
-+ GET_FUNC(GetBitmapBits);
-+ GET_FUNC(GetCharWidth);
-+ GET_FUNC(GetDIBColorTable);
-+ GET_FUNC(GetDIBits);
-+ GET_FUNC(GetDeviceCaps);
-+ GET_FUNC(GetDeviceGammaRamp);
-+ GET_FUNC(GetICMProfile);
-+ GET_FUNC(GetNearestColor);
-+ GET_FUNC(GetPixel);
-+ GET_FUNC(GetPixelFormat);
-+ GET_FUNC(GetSystemPaletteEntries);
-+ GET_FUNC(GetTextExtentExPoint);
-+ GET_FUNC(GetTextMetrics);
-+ GET_FUNC(IntersectClipRect);
-+ GET_FUNC(InvertRgn);
-+ GET_FUNC(LineTo);
-+ GET_FUNC(MoveTo);
-+ GET_FUNC(ModifyWorldTransform);
-+ GET_FUNC(OffsetClipRgn);
-+ GET_FUNC(OffsetViewportOrg);
-+ GET_FUNC(OffsetWindowOrg);
-+ GET_FUNC(PaintRgn);
-+ GET_FUNC(PatBlt);
-+ GET_FUNC(Pie);
-+ GET_FUNC(PolyBezier);
-+ GET_FUNC(PolyBezierTo);
-+ GET_FUNC(PolyDraw);
-+ GET_FUNC(PolyPolygon);
-+ GET_FUNC(PolyPolyline);
-+ GET_FUNC(Polygon);
-+ GET_FUNC(Polyline);
-+ GET_FUNC(PolylineTo);
-+ GET_FUNC(RealizeDefaultPalette);
-+ GET_FUNC(RealizePalette);
-+ GET_FUNC(Rectangle);
-+ GET_FUNC(ResetDC);
-+ GET_FUNC(RestoreDC);
-+ GET_FUNC(RoundRect);
-+ GET_FUNC(SaveDC);
-+ GET_FUNC(ScaleViewportExt);
-+ GET_FUNC(ScaleWindowExt);
-+ GET_FUNC(SelectBitmap);
-+ GET_FUNC(SelectBrush);
-+ GET_FUNC(SelectClipPath);
-+ GET_FUNC(SelectFont);
-+ GET_FUNC(SelectPalette);
-+ GET_FUNC(SelectPen);
-+ GET_FUNC(SetArcDirection);
-+ GET_FUNC(SetBitmapBits);
-+ GET_FUNC(SetBkColor);
-+ GET_FUNC(SetBkMode);
-+ GET_FUNC(SetDCBrushColor);
-+ GET_FUNC(SetDCPenColor);
-+ GET_FUNC(SetDIBColorTable);
-+ GET_FUNC(SetDIBits);
-+ GET_FUNC(SetDIBitsToDevice);
-+ GET_FUNC(SetDeviceClipping);
-+ GET_FUNC(SetDeviceGammaRamp);
-+ GET_FUNC(SetMapMode);
-+ GET_FUNC(SetMapperFlags);
-+ GET_FUNC(SetPixel);
-+ GET_FUNC(SetPixelFormat);
-+ GET_FUNC(SetPolyFillMode);
-+ GET_FUNC(SetROP2);
-+ GET_FUNC(SetRelAbs);
-+ GET_FUNC(SetStretchBltMode);
-+ GET_FUNC(SetTextAlign);
-+ GET_FUNC(SetTextCharacterExtra);
-+ GET_FUNC(SetTextColor);
-+ GET_FUNC(SetTextJustification);
-+ GET_FUNC(SetViewportExt);
-+ GET_FUNC(SetViewportOrg);
-+ GET_FUNC(SetWindowExt);
-+ GET_FUNC(SetWindowOrg);
-+ GET_FUNC(SetWorldTransform);
-+ GET_FUNC(StartDoc);
-+ GET_FUNC(StartPage);
-+ GET_FUNC(StretchBlt);
-+ GET_FUNC(StretchDIBits);
-+ GET_FUNC(StrokeAndFillPath);
-+ GET_FUNC(StrokePath);
-+ GET_FUNC(SwapBuffers);
-+ GET_FUNC(UnrealizePalette);
-+ GET_FUNC(WidenPath);
-+
-+ /* OpenGL32 */
-+ GET_FUNC(wglCreateContext);
-+ GET_FUNC(wglCreateContextAttribsARB);
-+ GET_FUNC(wglDeleteContext);
-+ GET_FUNC(wglGetProcAddress);
-+ GET_FUNC(wglGetPbufferDCARB);
-+ GET_FUNC(wglMakeContextCurrentARB);
-+ GET_FUNC(wglMakeCurrent);
-+ GET_FUNC(wglSetPixelFormatWINE);
-+ GET_FUNC(wglShareLists);
-+ GET_FUNC(wglUseFontBitmapsA);
-+ GET_FUNC(wglUseFontBitmapsW);
-+#undef GET_FUNC
-+ }
-+ else memset( &driver->funcs, 0, sizeof(driver->funcs) );
-+
-+ return driver;
-+}
-+
-+
-+/**********************************************************************
-+ * DRIVER_get_display_driver
-+ *
-+ * Special case for loading the display driver: get the name from the config file
-+ */
-+const DC_FUNCTIONS *DRIVER_get_display_driver(void)
-+{
-+ struct graphics_driver *driver;
-+ char buffer[MAX_PATH], libname[32], *name, *next;
-+ HMODULE module = 0;
-+ HKEY hkey;
-+
-+ if (display_driver) return &display_driver->funcs; /* already loaded */
-+
-+ strcpy( buffer, "x11" ); /* default value */
-+ /* @@ Wine registry key: HKCU\Software\Wine\Drivers */
-+ if (!RegOpenKeyA( HKEY_CURRENT_USER, "Software\\Wine\\Drivers", &hkey ))
-+ {
-+ DWORD type, count = sizeof(buffer);
-+ RegQueryValueExA( hkey, "Graphics", 0, &type, (LPBYTE) buffer, &count );
-+ RegCloseKey( hkey );
-+ }
-+
-+ name = buffer;
-+ while (name)
-+ {
-+ next = strchr( name, ',' );
-+ if (next) *next++ = 0;
-+
-+ snprintf( libname, sizeof(libname), "wine%s.drv", name );
-+ if ((module = LoadLibraryA( libname )) != 0) break;
-+ name = next;
-+ }
-+
-+ if (!(driver = create_driver( module )))
-+ {
-+ MESSAGE( "Could not create graphics driver '%s'\n", buffer );
-+ FreeLibrary( module );
-+ ExitProcess(1);
-+ }
-+ if (InterlockedCompareExchangePointer( (void **)&display_driver, driver, NULL ))
-+ {
-+ /* somebody beat us to it */
-+ FreeLibrary( driver->module );
-+ HeapFree( GetProcessHeap(), 0, driver );
-+ }
-+ return &display_driver->funcs;
-+}
-+
-+
-+/**********************************************************************
-+ * DRIVER_load_driver
-+ */
-+const DC_FUNCTIONS *DRIVER_load_driver( LPCWSTR name )
-+{
-+ HMODULE module;
-+ struct graphics_driver *driver, *new_driver;
-+ static const WCHAR displayW[] = { 'd','i','s','p','l','a','y',0 };
-+ static const WCHAR display1W[] = {'\\','\\','.','\\','D','I','S','P','L','A','Y','1',0};
-+
-+ /* display driver is a special case */
-+ if (!strcmpiW( name, displayW ) || !strcmpiW( name, display1W )) return DRIVER_get_display_driver();
-+
-+ if ((module = GetModuleHandleW( name )))
-+ {
-+ if (display_driver && display_driver->module == module) return &display_driver->funcs;
-+ EnterCriticalSection( &driver_section );
-+ LIST_FOR_EACH_ENTRY( driver, &drivers, struct graphics_driver, entry )
-+ {
-+ if (driver->module == module) goto done;
-+ }
-+ LeaveCriticalSection( &driver_section );
-+ }
-+
-+ if (!(module = LoadLibraryW( name ))) return NULL;
-+
-+ if (!(new_driver = create_driver( module )))
-+ {
-+ FreeLibrary( module );
-+ return NULL;
-+ }
-+
-+ /* check if someone else added it in the meantime */
-+ EnterCriticalSection( &driver_section );
-+ LIST_FOR_EACH_ENTRY( driver, &drivers, struct graphics_driver, entry )
-+ {
-+ if (driver->module != module) continue;
-+ FreeLibrary( module );
-+ HeapFree( GetProcessHeap(), 0, new_driver );
-+ goto done;
-+ }
-+ driver = new_driver;
-+ list_add_head( &drivers, &driver->entry );
-+ TRACE( "loaded driver %p for %s\n", driver, debugstr_w(name) );
-+done:
-+ LeaveCriticalSection( &driver_section );
-+ return &driver->funcs;
-+}
-+
-+
-+/*****************************************************************************
-+ * DRIVER_GetDriverName
-+ *
-+ */
-+BOOL DRIVER_GetDriverName( LPCWSTR device, LPWSTR driver, DWORD size )
-+{
-+ static const WCHAR displayW[] = { 'd','i','s','p','l','a','y',0 };
-+ static const WCHAR devicesW[] = { 'd','e','v','i','c','e','s',0 };
-+ static const WCHAR display1W[] = {'\\','\\','.','\\','D','I','S','P','L','A','Y','1',0};
-+ static const WCHAR empty_strW[] = { 0 };
-+ WCHAR *p;
-+
-+ /* display is a special case */
-+ if (!strcmpiW( device, displayW ) ||
-+ !strcmpiW( device, display1W ))
-+ {
-+ lstrcpynW( driver, displayW, size );
-+ return TRUE;
-+ }
-+
-+ size = GetProfileStringW(devicesW, device, empty_strW, driver, size);
-+ if(!size) {
-+ WARN("Unable to find %s in [devices] section of win.ini\n", debugstr_w(device));
-+ return FALSE;
-+ }
-+ p = strchrW(driver, ',');
-+ if(!p)
-+ {
-+ WARN("%s entry in [devices] section of win.ini is malformed.\n", debugstr_w(device));
-+ return FALSE;
-+ }
-+ *p = 0;
-+ TRACE("Found %s for %s\n", debugstr_w(driver), debugstr_w(device));
-+ return TRUE;
-+}
-+
-+
-+/***********************************************************************
-+ * GdiConvertToDevmodeW (GDI32.@)
-+ */
-+DEVMODEW * WINAPI GdiConvertToDevmodeW(const DEVMODEA *dmA)
-+{
-+ DEVMODEW *dmW;
-+ WORD dmW_size, dmA_size;
-+
-+ dmA_size = dmA->dmSize;
-+
-+ /* this is the minimal dmSize that XP accepts */
-+ if (dmA_size < FIELD_OFFSET(DEVMODEA, dmFields))
-+ return NULL;
-+
-+ if (dmA_size > sizeof(DEVMODEA))
-+ dmA_size = sizeof(DEVMODEA);
-+
-+ dmW_size = dmA_size + CCHDEVICENAME;
-+ if (dmA_size >= FIELD_OFFSET(DEVMODEA, dmFormName) + CCHFORMNAME)
-+ dmW_size += CCHFORMNAME;
-+
-+ dmW = HeapAlloc(GetProcessHeap(), 0, dmW_size + dmA->dmDriverExtra);
-+ if (!dmW) return NULL;
-+
-+ MultiByteToWideChar(CP_ACP, 0, (const char*) dmA->dmDeviceName, -1,
-+ dmW->dmDeviceName, CCHDEVICENAME);
-+ /* copy slightly more, to avoid long computations */
-+ memcpy(&dmW->dmSpecVersion, &dmA->dmSpecVersion, dmA_size - CCHDEVICENAME);
-+
-+ if (dmA_size >= FIELD_OFFSET(DEVMODEA, dmFormName) + CCHFORMNAME)
-+ {
-+ if (dmA->dmFields & DM_FORMNAME)
-+ MultiByteToWideChar(CP_ACP, 0, (const char*) dmA->dmFormName, -1,
-+ dmW->dmFormName, CCHFORMNAME);
-+ else
-+ dmW->dmFormName[0] = 0;
-+
-+ if (dmA_size > FIELD_OFFSET(DEVMODEA, dmLogPixels))
-+ memcpy(&dmW->dmLogPixels, &dmA->dmLogPixels, dmA_size - FIELD_OFFSET(DEVMODEA, dmLogPixels));
-+ }
-+
-+ if (dmA->dmDriverExtra)
-+ memcpy((char *)dmW + dmW_size, (const char *)dmA + dmA_size, dmA->dmDriverExtra);
-+
-+ dmW->dmSize = dmW_size;
-+
-+ return dmW;
-+}
-+
-+
-+/*****************************************************************************
-+ * @ [GDI32.100]
-+ *
-+ * This should thunk to 16-bit and simply call the proc with the given args.
-+ */
-+INT WINAPI GDI_CallDevInstall16( FARPROC16 lpfnDevInstallProc, HWND hWnd,
-+ LPSTR lpModelName, LPSTR OldPort, LPSTR NewPort )
-+{
-+ FIXME("(%p, %p, %s, %s, %s)\n", lpfnDevInstallProc, hWnd, lpModelName, OldPort, NewPort );
-+ return -1;
-+}
-+
-+/*****************************************************************************
-+ * @ [GDI32.101]
-+ *
-+ * This should load the correct driver for lpszDevice and calls this driver's
-+ * ExtDeviceModePropSheet proc.
-+ *
-+ * Note: The driver calls a callback routine for each property sheet page; these
-+ * pages are supposed to be filled into the structure pointed to by lpPropSheet.
-+ * The layout of this structure is:
-+ *
-+ * struct
-+ * {
-+ * DWORD nPages;
-+ * DWORD unknown;
-+ * HPROPSHEETPAGE pages[10];
-+ * };
-+ */
-+INT WINAPI GDI_CallExtDeviceModePropSheet16( HWND hWnd, LPCSTR lpszDevice,
-+ LPCSTR lpszPort, LPVOID lpPropSheet )
-+{
-+ FIXME("(%p, %s, %s, %p)\n", hWnd, lpszDevice, lpszPort, lpPropSheet );
-+ return -1;
-+}
-+
-+/*****************************************************************************
-+ * @ [GDI32.102]
-+ *
-+ * This should load the correct driver for lpszDevice and call this driver's
-+ * ExtDeviceMode proc.
-+ *
-+ * FIXME: convert ExtDeviceMode to unicode in the driver interface
-+ */
-+INT WINAPI GDI_CallExtDeviceMode16( HWND hwnd,
-+ LPDEVMODEA lpdmOutput, LPSTR lpszDevice,
-+ LPSTR lpszPort, LPDEVMODEA lpdmInput,
-+ LPSTR lpszProfile, DWORD fwMode )
-+{
-+ WCHAR deviceW[300];
-+ WCHAR bufW[300];
-+ char buf[300];
-+ HDC hdc;
-+ DC *dc;
-+ INT ret = -1;
-+
-+ TRACE("(%p, %p, %s, %s, %p, %s, %d)\n",
-+ hwnd, lpdmOutput, lpszDevice, lpszPort, lpdmInput, lpszProfile, fwMode );
-+
-+ if (!lpszDevice) return -1;
-+ if (!MultiByteToWideChar(CP_ACP, 0, lpszDevice, -1, deviceW, 300)) return -1;
-+
-+ if(!DRIVER_GetDriverName( deviceW, bufW, 300 )) return -1;
-+
-+ if (!WideCharToMultiByte(CP_ACP, 0, bufW, -1, buf, 300, NULL, NULL)) return -1;
-+
-+ if (!(hdc = CreateICA( buf, lpszDevice, lpszPort, NULL ))) return -1;
-+
-+ if ((dc = get_dc_ptr( hdc )))
-+ {
-+ if (dc->funcs->pExtDeviceMode)
-+ ret = dc->funcs->pExtDeviceMode( buf, hwnd, lpdmOutput, lpszDevice, lpszPort,
-+ lpdmInput, lpszProfile, fwMode );
-+ release_dc_ptr( dc );
-+ }
-+ DeleteDC( hdc );
-+ return ret;
-+}
-+
-+/****************************************************************************
-+ * @ [GDI32.103]
-+ *
-+ * This should load the correct driver for lpszDevice and calls this driver's
-+ * AdvancedSetupDialog proc.
-+ */
-+INT WINAPI GDI_CallAdvancedSetupDialog16( HWND hwnd, LPSTR lpszDevice,
-+ LPDEVMODEA devin, LPDEVMODEA devout )
-+{
-+ TRACE("(%p, %s, %p, %p)\n", hwnd, lpszDevice, devin, devout );
-+ return -1;
-+}
-+
-+/*****************************************************************************
-+ * @ [GDI32.104]
-+ *
-+ * This should load the correct driver for lpszDevice and calls this driver's
-+ * DeviceCapabilities proc.
-+ *
-+ * FIXME: convert DeviceCapabilities to unicode in the driver interface
-+ */
-+DWORD WINAPI GDI_CallDeviceCapabilities16( LPCSTR lpszDevice, LPCSTR lpszPort,
-+ WORD fwCapability, LPSTR lpszOutput,
-+ LPDEVMODEA lpdm )
-+{
-+ WCHAR deviceW[300];
-+ WCHAR bufW[300];
-+ char buf[300];
-+ HDC hdc;
-+ DC *dc;
-+ INT ret = -1;
-+
-+ TRACE("(%s, %s, %d, %p, %p)\n", lpszDevice, lpszPort, fwCapability, lpszOutput, lpdm );
-+
-+ if (!lpszDevice) return -1;
-+ if (!MultiByteToWideChar(CP_ACP, 0, lpszDevice, -1, deviceW, 300)) return -1;
-+
-+ if(!DRIVER_GetDriverName( deviceW, bufW, 300 )) return -1;
-+
-+ if (!WideCharToMultiByte(CP_ACP, 0, bufW, -1, buf, 300, NULL, NULL)) return -1;
-+
-+ if (!(hdc = CreateICA( buf, lpszDevice, lpszPort, NULL ))) return -1;
-+
-+ if ((dc = get_dc_ptr( hdc )))
-+ {
-+ if (dc->funcs->pDeviceCapabilities)
-+ ret = dc->funcs->pDeviceCapabilities( buf, lpszDevice, lpszPort,
-+ fwCapability, lpszOutput, lpdm );
-+ release_dc_ptr( dc );
-+ }
-+ DeleteDC( hdc );
-+ return ret;
-+}
-+
-+
-+/************************************************************************
-+ * Escape [GDI32.@]
-+ */
-+INT WINAPI Escape( HDC hdc, INT escape, INT in_count, LPCSTR in_data, LPVOID out_data )
-+{
-+ INT ret;
-+ POINT *pt;
-+
-+ switch (escape)
-+ {
-+ case ABORTDOC:
-+ return AbortDoc( hdc );
-+
-+ case ENDDOC:
-+ return EndDoc( hdc );
-+
-+ case GETPHYSPAGESIZE:
-+ pt = out_data;
-+ pt->x = GetDeviceCaps( hdc, PHYSICALWIDTH );
-+ pt->y = GetDeviceCaps( hdc, PHYSICALHEIGHT );
-+ return 1;
-+
-+ case GETPRINTINGOFFSET:
-+ pt = out_data;
-+ pt->x = GetDeviceCaps( hdc, PHYSICALOFFSETX );
-+ pt->y = GetDeviceCaps( hdc, PHYSICALOFFSETY );
-+ return 1;
-+
-+ case GETSCALINGFACTOR:
-+ pt = out_data;
-+ pt->x = GetDeviceCaps( hdc, SCALINGFACTORX );
-+ pt->y = GetDeviceCaps( hdc, SCALINGFACTORY );
-+ return 1;
-+
-+ case NEWFRAME:
-+ return EndPage( hdc );
-+
-+ case SETABORTPROC:
-+ return SetAbortProc( hdc, (ABORTPROC)in_data );
-+
-+ case STARTDOC:
-+ {
-+ DOCINFOA doc;
-+ char *name = NULL;
-+
-+ /* in_data may not be 0 terminated so we must copy it */
-+ if (in_data)
-+ {
-+ name = HeapAlloc( GetProcessHeap(), 0, in_count+1 );
-+ memcpy( name, in_data, in_count );
-+ name[in_count] = 0;
-+ }
-+ /* out_data is actually a pointer to the DocInfo structure and used as
-+ * a second input parameter */
-+ if (out_data) doc = *(DOCINFOA *)out_data;
-+ else
-+ {
-+ doc.cbSize = sizeof(doc);
-+ doc.lpszOutput = NULL;
-+ doc.lpszDatatype = NULL;
-+ doc.fwType = 0;
-+ }
-+ doc.lpszDocName = name;
-+ ret = StartDocA( hdc, &doc );
-+ HeapFree( GetProcessHeap(), 0, name );
-+ if (ret > 0) ret = StartPage( hdc );
-+ return ret;
-+ }
-+
-+ case QUERYESCSUPPORT:
-+ {
-+ const INT *ptr = (const INT *)in_data;
-+ if (in_count < sizeof(INT)) return 0;
-+ switch(*ptr)
-+ {
-+ case ABORTDOC:
-+ case ENDDOC:
-+ case GETPHYSPAGESIZE:
-+ case GETPRINTINGOFFSET:
-+ case GETSCALINGFACTOR:
-+ case NEWFRAME:
-+ case QUERYESCSUPPORT:
-+ case SETABORTPROC:
-+ case STARTDOC:
-+ return TRUE;
-+ }
-+ break;
-+ }
-+ }
-+
-+ /* if not handled internally, pass it to the driver */
-+ return ExtEscape( hdc, escape, in_count, in_data, 0, out_data );
-+}
-+
-+
-+/******************************************************************************
-+ * ExtEscape [GDI32.@]
-+ *
-+ * Access capabilities of a particular device that are not available through GDI.
-+ *
-+ * PARAMS
-+ * hdc [I] Handle to device context
-+ * nEscape [I] Escape function
-+ * cbInput [I] Number of bytes in input structure
-+ * lpszInData [I] Pointer to input structure
-+ * cbOutput [I] Number of bytes in output structure
-+ * lpszOutData [O] Pointer to output structure
-+ *
-+ * RETURNS
-+ * Success: >0
-+ * Not implemented: 0
-+ * Failure: <0
-+ */
-+INT WINAPI ExtEscape( HDC hdc, INT nEscape, INT cbInput, LPCSTR lpszInData,
-+ INT cbOutput, LPSTR lpszOutData )
-+{
-+ INT ret = 0;
-+ DC * dc = get_dc_ptr( hdc );
-+ if (dc)
-+ {
-+ if (dc->funcs->pExtEscape)
-+ ret = dc->funcs->pExtEscape( dc->physDev, nEscape, cbInput, lpszInData, cbOutput, lpszOutData );
-+ release_dc_ptr( dc );
-+ }
-+ return ret;
-+}
-+
-+
-+/*******************************************************************
-+ * DrawEscape [GDI32.@]
-+ *
-+ *
-+ */
-+INT WINAPI DrawEscape(HDC hdc, INT nEscape, INT cbInput, LPCSTR lpszInData)
-+{
-+ FIXME("DrawEscape, stub\n");
-+ return 0;
-+}
-+
-+/*******************************************************************
-+ * NamedEscape [GDI32.@]
-+ */
-+INT WINAPI NamedEscape( HDC hdc, LPCWSTR pDriver, INT nEscape, INT cbInput, LPCSTR lpszInData,
-+ INT cbOutput, LPSTR lpszOutData )
-+{
-+ FIXME("(%p, %s, %d, %d, %p, %d, %p)\n",
-+ hdc, wine_dbgstr_w(pDriver), nEscape, cbInput, lpszInData, cbOutput,
-+ lpszOutData);
-+ return 0;
-+}
-+
-+/*******************************************************************
-+ * DdQueryDisplaySettingsUniqueness [GDI32.@]
-+ * GdiEntry13 [GDI32.@]
-+ */
-+ULONG WINAPI DdQueryDisplaySettingsUniqueness(VOID)
-+{
-+ static int warn_once;
-+
-+ if (!warn_once++)
-+ FIXME("stub\n");
-+ return 0;
-+}
-diff -Nru a/dlls/winedib.drv/bitblt.c b/dlls/winedib.drv/bitblt.c
---- a/dlls/winedib.drv/bitblt.c 1970-01-01 01:00:00.000000000 +0100
-+++ b/dlls/winedib.drv/bitblt.c 2010-08-04 16:08:44.791222017 +0200
-@@ -0,0 +1,970 @@
-+/*
-+ * DIBDRV bit-blit operations
-+ *
-+ * Copyright 2009 Massimo Del Fedele
-+ *
-+ * This library is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License as published by the Free Software Foundation; either
-+ * version 2.1 of the License, or (at your option) any later version.
-+ *
-+ * This library is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with this library; if not, write to the Free Software
-+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
-+ */
-+
-+#include "config.h"
-+#include "wine/port.h"
-+
-+#include "dibdrv.h"
-+
-+WINE_DEFAULT_DEBUG_CHANNEL(dibdrv);
-+
-+void CheckMapping(const char *func, const char *s, DIBDRVPHYSDEV *physDev)
-+{
-+ int a, b;
-+
-+ if(!physDev)
-+ return;
-+
-+ a=10;b=20;
-+ _DIBDRV_Position_ws2ds(physDev, &a, &b);
-+ if(a != 10 || b != 20)
-+ FIXME("%s:%s:Position(10, 20) translated to(%d, %d)\n", func, s, a, b);
-+ a=10;b=20;
-+ _DIBDRV_Sizes_ws2ds(physDev, &a, &b);
-+ if(a != 10 || b != 20)
-+ FIXME("%s:%s:sizes (10, 20) translated to(%d, %d)\n", func, s, a, b);
-+}
-+
-+static inline void intSwap(int *a, int *b)
-+{
-+ int tmp;
-+ tmp = *a;
-+ *a = *b;
-+ *b = tmp;
-+}
-+
-+static inline void setRect(RECT *r, int x1, int y1, int x2, int y2)
-+{
-+ r->left = x1;
-+ r->top = y1;
-+ r->right = x2;
-+ r->bottom = y2;
-+}
-+
-+static inline void setPoint(POINT *p, int x, int y)
-+{
-+ p->x = x;
-+ p->y = y;
-+}
-+
-+static inline void setSize(SIZE *sz, int cx, int cy)
-+{
-+ sz->cx = cx;
-+ sz->cy = cy;
-+}
-+
-+/* clips a source and destination areas to their respective clip rectangles
-+ returning both source and dest modified; result is TRUE if clipping
-+ leads to a non null rectangle, FALSE otherwise */
-+static BOOL BitBlt_ClipAreas(POINT *ps, POINT *pd, SIZE *sz, RECT*srcClip, RECT*dstClip)
-+{
-+ int xs1, ys1, xs2, ys2;
-+ int xsc1, ysc1, xsc2, ysc2;
-+ int xd1, yd1, xd2, yd2;
-+ int xdc1, ydc1, xdc2, ydc2;
-+ int w, h, dx, dy;
-+
-+ /* extract sizes */
-+ w = sz->cx; h = sz->cy;
-+
-+ /* if sizes null or negative, just return false */
-+ if(w <= 0 || h <= 0)
-+ return FALSE;
-+
-+ /* extract dest area data */
-+ xd1 = pd->x;
-+ yd1 = pd->y;
-+ xd2 = xd1 + w;
-+ yd2 = yd1 + h;
-+
-+ /* extract source data */
-+ xs1 = ps->x;
-+ ys1 = ps->y;
-+ xs2 = xs1 + w;
-+ ys2 = ys1 + h;
-+
-+ /* if source clip area is not null, do first clipping on it */
-+ if(srcClip)
-+ {
-+ /* extract source clipping area */
-+ xsc1 = srcClip->left;
-+ ysc1 = srcClip->top;
-+ xsc2 = srcClip->right;
-+ ysc2 = srcClip->bottom;
-+
-+ /* order clip area rectangle points */
-+ if(xsc1 > xsc2) intSwap(&xsc1, &xsc2);
-+ if(ysc1 > ysc2) intSwap(&ysc1, &ysc2);
-+
-+ /* clip on source clipping start point */
-+ if(xs1 < xsc1) { dx = xsc1 - xs1; w -= dx; xd1 += dx; xs1 = xsc1; }
-+ if(ys1 < ysc1) { dy = ysc1 - ys1; h -= dy; yd1 += dy; ys1 = ysc1; }
-+
-+ /* clip on source clipping end point */
-+ if(xs2 > xsc2) { dx = xs2 - xsc2; w -= dx; xd2 -= dx; xs2 = xsc2; }
-+ if(ys2 > ysc2) { dy = ys2 - ysc2; h -= dy; yd2 -= dy; ys2 = ysc2; }
-+
-+ /* if already zero area, return false */
-+ if(w <= 0 || h <= 0)
-+ return FALSE;
-+ }
-+ /* now do clipping on destination area */
-+ if(dstClip)
-+ {
-+ /* extract destination clipping area */
-+ xdc1 = dstClip->left;
-+ ydc1 = dstClip->top;
-+ xdc2 = dstClip->right;
-+ ydc2 = dstClip->bottom;
-+
-+ /* order clip area rectangle points */
-+ if(xdc1 > xdc2) intSwap(&xdc1, &xdc2);
-+ if(ydc1 > ydc2) intSwap(&ydc1, &ydc2);
-+
-+ /* clip on dest clipping start point */
-+ if(xd1 < xdc1) { dx = xdc1 - xd1; w -= dx; xs1 += dx; xd1 = xdc1; }
-+ if(yd1 < ydc1) { dy = ydc1 - yd1; h -= dy; ys1 += dy; yd1 = ydc1; }
-+
-+ /* clip on dest clipping end point */
-+ if(xd2 > xdc2) { dx = xd2 - xdc2; w -= dx; xs2 -= dx; xd2 = xdc2; }
-+ if(yd2 > ydc2) { dy = yd2 - ydc2; h -= dy; ys2 -= dy; yd2 = ydc2; }
-+
-+ /* if already zero area, return false */
-+ if(w <= 0 || h <= 0)
-+ return FALSE;
-+ }
-+
-+ /* sets clipped/translated points and sizes and returns TRUE */
-+ ps->x = xs1; ps->y = ys1;
-+ pd->x = xd1; pd->y = yd1;
-+ sz->cx = w; sz->cy = h;
-+
-+ return TRUE;
-+
-+}
-+
-+
-+/* clips a source and destination areas to their respective clip rectangles
-+ returning both source and dest modified; result is TRUE if clipping
-+ leads to a non null rectangle, FALSE otherwise */
-+static BOOL StretchBlt_ClipAreas(POINT *ps, POINT *pd, SIZE *szSrc, SIZE *szDst, RECT*srcClip, RECT*dstClip)
-+{
-+ int xs1, ys1, xs2, ys2;
-+ int xsc1, ysc1, xsc2, ysc2;
-+ int xd1, yd1, xd2, yd2;
-+ int xdc1, ydc1, xdc2, ydc2;
-+ int ws, hs, wd, hd, dx, dy;
-+ int mulh, divh, mulv, divv;
-+
-+ /* extract sizes */
-+ ws = szSrc->cx; hs = szSrc->cy;
-+ wd = szDst->cx; hd = szDst->cy;
-+
-+ /* if sizes null or negative, just return false */
-+ /* FIXME : add support for mirror stretch */
-+ if(ws <= 0 || hs <= 0 || wd <= 0 || hd <= 0)
-+ return FALSE;
-+
-+ /* stores scaling factors from source rect to dest one */
-+ mulh = wd; divh = ws;
-+ mulv = hd; divv = hs;
-+
-+ /* extract dest area data */
-+ xd1 = pd->x;
-+ yd1 = pd->y;
-+ xd2 = xd1 + wd;
-+ yd2 = yd1 + hd;
-+
-+ /* extract source data */
-+ xs1 = ps->x;
-+ ys1 = ps->y;
-+ xs2 = xs1 + ws;
-+ ys2 = ys1 + hs;
-+
-+ /* if source clip area is not null, do first clipping on it */
-+ if(srcClip)
-+ {
-+ /* extract source clipping area */
-+ xsc1 = srcClip->left;
-+ ysc1 = srcClip->top;
-+ xsc2 = srcClip->right;
-+ ysc2 = srcClip->bottom;
-+
-+ /* order clip area rectangle points */
-+ if(xsc1 > xsc2) intSwap(&xsc1, &xsc2);
-+ if(ysc1 > ysc2) intSwap(&ysc1, &ysc2);
-+
-+ /* clip on source clipping start point */
-+ if(xs1 < xsc1) { dx = xsc1 - xs1; ws -= dx; xd1 += MulDiv(dx, mulh, divh); xs1 = xsc1; }
-+ if(ys1 < ysc1) { dy = ysc1 - ys1; hs -= dy; yd1 += MulDiv(dy, mulv, divv); ys1 = ysc1; }
-+
-+ /* clip on source clipping end point */
-+ if(xs2 > xsc2) { dx = xs2 - xsc2; ws -= dx; xd2 -= MulDiv(dx, mulh, divh); xs2 = xsc2; }
-+ if(ys2 > ysc2) { dy = ys2 - ysc2; hs -= dy; yd2 -= MulDiv(dy, mulv, divv); ys2 = ysc2; }
-+
-+ /* if already zero area, return false */
-+ if(ws <= 0 || hs <= 0)
-+ return FALSE;
-+ wd = xd2 - xd1;
-+ hd = yd2 - yd1;
-+ }
-+ /* now do clipping on destination area */
-+
-+ if(dstClip)
-+ {
-+ /* extract destination clipping area */
-+ xdc1 = dstClip->left;
-+ ydc1 = dstClip->top;
-+ xdc2 = dstClip->right;
-+ ydc2 = dstClip->bottom;
-+
-+ /* order clip area rectangle points */
-+ if(xdc1 > xdc2) intSwap(&xdc1, &xdc2);
-+ if(ydc1 > ydc2) intSwap(&ydc1, &ydc2);
-+
-+ /* clip on dest clipping start point */
-+ if(xd1 < xdc1) { dx = xdc1 - xd1; wd -= dx; xs1 += MulDiv(dx, divh, mulh); xd1 = xdc1; }
-+ if(yd1 < ydc1) { dy = ydc1 - yd1; hd -= dy; ys1 += MulDiv(dy, divv, mulv); yd1 = ydc1; }
-+
-+ /* clip on dest clipping end point */
-+ if(xd2 > xdc2) { dx = xd2 - xdc2; wd -= dx; xs2 -= MulDiv(dx, divh, mulh); xd2 = xdc2; }
-+ if(yd2 > ydc2) { dy = yd2 - ydc2; hd -= dy; ys2 -= MulDiv(dy, divv, mulv); yd2 = ydc2; }
-+
-+ /* if already zero area, return false */
-+ if(wd <= 0 || hd <= 0)
-+ return FALSE;
-+
-+ ws = xs2 - xs1;
-+ hs = ys2 - ys1;
-+ }
-+
-+ /* sets clipped/translated points and sizes and returns TRUE */
-+ ps->x = xs1; ps->y = ys1;
-+ pd->x = xd1; pd->y = yd1;
-+ szSrc->cx = ws; szSrc->cy = hs;
-+ szDst->cx = wd; szDst->cy = hd;
-+
-+ return TRUE;
-+
-+}
-+
-+/***********************************************************************
-+ * _DIBDRV_InternalAlphaBlend
-+ */
-+BOOL _DIBDRV_InternalAlphaBlend( DIBDRVPHYSDEV *physDevDst, INT xDst, INT yDst, INT widthDst, INT heightDst,
-+ DIBDRVPHYSDEV *physDevSrc, INT xSrc, INT ySrc, INT widthSrc, INT heightSrc,
-+ BLENDFUNCTION blendfn)
-+{
-+ BOOL res;
-+ POINT pd, ps;
-+ SIZE szSrc, szDst;
-+ int iRec;
-+ RECT dstClip, srcClip;
-+
-+ /* converts to device spaces */
-+ _DIBDRV_Position_ws2ds(physDevDst, &xDst, &yDst);
-+ _DIBDRV_Sizes_ws2ds(physDevDst, &widthDst, &heightDst);
-+ _DIBDRV_Position_ws2ds(physDevSrc, &xSrc, &ySrc);
-+ _DIBDRV_Sizes_ws2ds(physDevSrc, &widthSrc, &heightSrc);
-+
-+ /* from tests, it seems that coords out of phys spaces are not allowed */
-+ if(xDst < 0 || yDst < 0 || xSrc < 0 || ySrc < 0 ||
-+ xDst + widthDst > physDevDst->physBitmap->width ||
-+ yDst + heightDst > physDevDst->physBitmap->height ||
-+ xSrc + widthSrc > physDevSrc->physBitmap->width ||
-+ ySrc + heightSrc > physDevSrc->physBitmap->height)
-+ {
-+ SetLastError(ERROR_INVALID_PARAMETER);
-+ return FALSE;
-+ }
-+
-+ /* first clip on physical DC sizes */
-+ setPoint(&pd, xDst, yDst);
-+ setPoint(&ps, xSrc, ySrc);
-+ setSize(&szDst, widthDst, heightDst);
-+ setSize(&szSrc, widthSrc, heightSrc);
-+ setRect(&dstClip, 0, 0, physDevDst->physBitmap->width, physDevDst->physBitmap->height);
-+ setRect(&srcClip, 0, 0, physDevSrc->physBitmap->width, physDevSrc->physBitmap->height);
-+ res = StretchBlt_ClipAreas(&ps, &pd, &szSrc, &szDst, &srcClip, &dstClip);
-+ if(!res)
-+ return TRUE;
-+ xDst = pd.x; yDst = pd.y;
-+ xSrc = ps.x; ySrc = ps.y;
-+ widthDst = szDst.cx; heightDst = szDst.cy;
-+ widthSrc = szSrc.cx; heightSrc = szSrc.cy;
-+
-+ /* then, do blitting for each dest clip area (no clipping on source) */
-+ res = FALSE;
-+ for(iRec = 0; iRec < physDevDst->regionRectCount; iRec++)
-+ {
-+ RECT *r = physDevDst->regionRects + iRec;
-+ setRect(&dstClip, r->left, r->top, r->right, r->bottom);
-+ setPoint(&pd, xDst, yDst);
-+ setPoint(&ps, xSrc, ySrc);
-+ setSize(&szDst, widthDst, heightDst);
-+ setSize(&szSrc, widthSrc, heightSrc);
-+ if(!StretchBlt_ClipAreas(&ps, &pd, &szSrc, &szDst, 0, &dstClip))
-+ continue;
-+ if(physDevDst->physBitmap->funcs->AlphaBlend(physDevDst, pd.x, pd.y, szDst.cx, szDst.cy,
-+ physDevSrc, ps.x, ps.y, szSrc.cx, szSrc.cy, blendfn))
-+ res = TRUE;
-+ }
-+ return res;
-+}
-+
-+/***********************************************************************
-+ * DIBDRV_AlphaBlend
-+ */
-+BOOL DIBDRV_AlphaBlend( DIBDRVPHYSDEV *physDevDst, INT xDst, INT yDst, INT widthDst, INT heightDst,
-+ DIBDRVPHYSDEV *physDevSrc, INT xSrc, INT ySrc, INT widthSrc, INT heightSrc,
-+ BLENDFUNCTION blendfn)
-+{
-+ BOOL res;
-+
-+ POINT pd = {xDst, yDst};
-+ SIZE szDst = {widthDst, heightDst};
-+
-+CheckMapping(__FUNCTION__, "DEST", physDevDst);
-+CheckMapping(__FUNCTION__, "SOURCE",physDevSrc);
-+
-+ MAYBE(TRACE("physDevDst:%p(%s%s), xDst:%d, yDst:%d, widthDst:%d, heightDst:%d, physDevSrc:%p(%s%s), xSrc:%d, ySrc:%d, widthSrc:%d, heightSrc:%d\n",
-+ physDevDst, physDevDst->hasDIB ? "DIB-" : "DDB", physDevDst->hasDIB ? _DIBDRVBITMAP_GetFormatName(physDevDst->physBitmap) : "",
-+ xDst, yDst, widthDst, heightDst,
-+ physDevSrc, physDevSrc->hasDIB ? "DIB-" : "DDB", physDevSrc->hasDIB ? _DIBDRVBITMAP_GetFormatName(physDevSrc->physBitmap) : "",
-+ xSrc, ySrc, widthSrc, heightSrc));
-+
-+ /* if sizes are null or negative, or source positions are negatives, returns false */
-+ if(widthSrc <= 0 || heightSrc <= 0 ||
-+ widthDst <= 0 || heightDst <= 0)
-+ {
-+ res = FALSE;
-+ SetLastError(ERROR_INVALID_PARAMETER);
-+ goto fin;
-+ }
-+
-+ /* source sould be a 32 bit DIB */
-+ if(!physDevSrc)
-+ {
-+ FIXME("Null source bitmap -- shouldn't happen\n");
-+ res = FALSE;
-+ goto fin;
-+ }
-+ else if(!physDevSrc->hasDIB)
-+ {
-+ FIXME("DDB source bitmap still not supported\n");
-+ res = FALSE;
-+ goto fin;
-+ }
-+
-+ if(physDevDst->hasDIB)
-+ {
-+ /* DIB section selected in dest DC, use DIB Engine */
-+ MAYBE(TRACE("Blending DIB->DIB\n"));
-+ res = _DIBDRV_InternalAlphaBlend(physDevDst, xDst, yDst, widthDst, heightDst,
-+ physDevSrc, xSrc, ySrc, widthSrc, heightSrc, blendfn);
-+ }
-+ else
-+ {
-+ /* DDB selected on dest DC -- must double-convert */
-+ HBITMAP tmpDIB, stock;
-+ HDC tmpDC;
-+
-+ MAYBE(TRACE("Blending DIB->DDB\n"));
-+
-+ /* we should anyways convert dest to physical coordinates here before processing
-+ in order to check its consistency -- source coords will be converted/clipped later
-+ As we do a conversion to a temporary DIB for destination, we don't care about it */
-+ _DIBDRV_Position_ws2ds(physDevDst, &pd.x, &pd.y);
-+ _DIBDRV_Sizes_ws2ds(physDevDst, &szDst.cx, &szDst.cy);
-+
-+ /* test shows that negatives origins are not allowed */
-+ if(pd.x < 0 || pd.y < 0)
-+ {
-+ SetLastError(ERROR_INVALID_PARAMETER);
-+ res = FALSE;
-+ goto fin;
-+ }
-+
-+ /* converts dest DDB onto a temporary DIB -- just the needed part */
-+ /* WARNING -- that one could fail if rectangle on dest id out of range */
-+ tmpDIB = _DIBDRV_ConvertDevDDBtoDIB(physDevDst->hdc, physDevSrc->hdc, xDst, yDst, widthDst, heightDst);
-+ if(!tmpDIB)
-+ {
-+ ERR("Couldn't convert dest DDB to DIB\n");
-+ res = FALSE;
-+ goto fin;
-+ }
-+
-+ /* selects the temporary DIB into a temporary DC */
-+ tmpDC = CreateCompatibleDC(physDevDst->hdc);
-+ if(!tmpDC)
-+ {
-+ ERR("Couldn't create temporary DC\n");
-+ DeleteObject(tmpDIB);
-+ res = FALSE;
-+ goto fin;
-+ }
-+ stock = SelectObject(tmpDC, tmpDIB);
-+ if(!stock)
-+ {
-+ ERR("Couldn't select temporary DIB into temporary DC\n");
-+ DeleteDC(tmpDC);
-+ DeleteObject(tmpDIB);
-+ res = FALSE;
-+ goto fin;
-+ }
-+
-+ /* blends source DIB onto temp DIB and re-blits onto dest DC */
-+ res = GdiAlphaBlend(tmpDC, 0, 0, szDst.cx, szDst.cy, physDevSrc->hdc, xSrc, ySrc, widthSrc, heightSrc, blendfn);
-+ if(!res)
-+ MAYBE(TRACE("AlphaBlend failed\n"));
-+ else
-+ res = BitBlt(physDevDst->hdc, xDst, yDst, widthDst, heightDst, tmpDC, 0, 0, SRCCOPY);
-+
-+ /* frees resources */
-+ SelectObject(tmpDC, stock);
-+ DeleteDC(tmpDC);
-+ DeleteObject(tmpDIB);
-+ }
-+fin:
-+ return res;
-+}
-+
-+/***********************************************************************
-+ * _DIBDRV_InternalBitBlt
-+ */
-+BOOL _DIBDRV_InternalBitBlt( DIBDRVPHYSDEV *physDevDst, INT xDst, INT yDst,
-+ INT width, INT height, DIBDRVPHYSDEV *physDevSrc,
-+ INT xSrc, INT ySrc, DWORD rop )
-+{
-+ BOOL res;
-+ POINT pd, ps;
-+ SIZE sz;
-+ int iRec;
-+ RECT dstClip, srcClip;
-+
-+ /* converts to device spaces */
-+ _DIBDRV_Position_ws2ds(physDevDst, &xDst, &yDst);
-+ _DIBDRV_Sizes_ws2ds(physDevDst, &width, &height);
-+ if(physDevSrc)
-+ _DIBDRV_Position_ws2ds(physDevSrc, &xSrc, &ySrc);
-+
-+ /* first clip on physical DC sizes */
-+ setPoint(&pd, xDst, yDst);
-+ setPoint(&ps, xSrc, ySrc);
-+ setSize(&sz, width, height);
-+ setRect(&dstClip, 0, 0, physDevDst->physBitmap->width, physDevDst->physBitmap->height);
-+
-+ if(physDevSrc)
-+ {
-+ setRect(&srcClip, 0, 0, physDevSrc->physBitmap->width, physDevSrc->physBitmap->height);
-+ res = BitBlt_ClipAreas(&ps, &pd, &sz, &srcClip, &dstClip);
-+ }
-+ else
-+ res = BitBlt_ClipAreas(&ps, &pd, &sz, 0, &dstClip);
-+ if(!res)
-+ return TRUE;
-+ xDst = pd.x; yDst = pd.y;
-+ xSrc = ps.x; ySrc = ps.y;
-+ width = sz.cx; height = sz.cy;
-+
-+ /* then, do blitting for each dest clip area (no clipping on source) */
-+ res = TRUE;
-+ for(iRec = 0; iRec < physDevDst->regionRectCount; iRec++)
-+ {
-+ RECT *r = physDevDst->regionRects + iRec;
-+ setRect(&dstClip, r->left, r->top, r->right, r->bottom);
-+ setPoint(&pd, xDst, yDst);
-+ setPoint(&ps, xSrc, ySrc);
-+ setSize(&sz, width, height);
-+ if(!BitBlt_ClipAreas(&ps, &pd, &sz, 0, &dstClip))
-+ continue;
-+ if(!physDevDst->physBitmap->funcs->BitBlt(physDevDst, pd.x, pd.y, sz.cx, sz.cy, physDevSrc, ps.x, ps.y, rop))
-+ res = FALSE;
-+ }
-+ return res;
-+}
-+
-+/***********************************************************************
-+ * DIBDRV_BitBlt */
-+BOOL DIBDRV_BitBlt( DIBDRVPHYSDEV *physDevDst, INT xDst, INT yDst,
-+ INT width, INT height, DIBDRVPHYSDEV *physDevSrc,
-+ INT xSrc, INT ySrc, DWORD rop )
-+{
-+ BOOL res;
-+ int dummy;
-+ int devXSrc, devWidth;
-+ int devYSrc, devHeight, zeroYSrc;
-+
-+// CheckMapping(__FUNCTION__, "DEST", physDevDst);
-+// CheckMapping(__FUNCTION__, "SOURCE",physDevSrc);
-+ MAYBE(TRACE("physDevDst:%p(%s%s), xDst:%d, yDst:%d, width:%d, height:%d, physDevSrc:%p(%s%s), xSrc:%d, ySrc:%d, rop:%08x\n",
-+ physDevDst, physDevDst->hasDIB ? "DIB-" : "DDB", physDevDst->hasDIB ? _DIBDRVBITMAP_GetFormatName(physDevDst->physBitmap) : "",
-+ xDst, yDst, width, height,
-+ physDevSrc, physDevSrc ? (physDevSrc->hasDIB ? "DIB-" : "DDB"): "---", physDevSrc && physDevSrc->hasDIB ? _DIBDRVBITMAP_GetFormatName(physDevSrc->physBitmap) : "",
-+ xSrc, ySrc, rop));
-+
-+ if(physDevDst->hasDIB)
-+ {
-+ /* DIB section selected in dest DC, use DIB Engine */
-+
-+ if(!physDevSrc || physDevSrc->hasDIB)
-+ {
-+ /* source is null or has a DIB, no need to convert anyting */
-+ res = _DIBDRV_InternalBitBlt(physDevDst, xDst, yDst, width, height, physDevSrc, xSrc, ySrc, rop);
-+ }
-+ else
-+ {
-+ /* source is a DDB, must convert it to DIB */
-+
-+ /* we must differentiate from 2 cases :
-+ 1) source DC is a memory DC
-+ 2) source DC is a device DC */
-+ if(GetObjectType(physDevSrc->hdc) == OBJ_MEMDC)
-+ {
-+ /* memory DC */
-+ HBITMAP dib, ddb;
-+
-+ ddb = SelectObject(physDevSrc->hdc, GetStockObject(DEFAULT_BITMAP));
-+ if(!ddb)
-+ {
-+ ERR("Couldn't select out DDB from source HDC\n");
-+ res = 0;
-+ goto noBlt1;
-+ }
-+
-+ /* we need device coordinates for ySrc and height, as the conversion
-+ functions operates directly on bitmap without the hdc */
-+ devYSrc = ySrc;
-+ _DIBDRV_Position_ws2ds(physDevSrc, &dummy, &devYSrc);
-+ devHeight = height;
-+ _DIBDRV_Sizes_ws2ds(physDevSrc, &dummy, &devHeight);
-+
-+ dib = _DIBDRV_ConvertDDBtoDIB(physDevSrc->hdc, ddb, devYSrc, devHeight);
-+ if(!dib)
-+ {
-+ ERR("Failed converting source DDB to DIB\n");
-+ SelectObject(physDevSrc->hdc, ddb);
-+ res = 0;
-+ goto noBlt1;
-+ }
-+ SelectObject(physDevSrc->hdc, dib);
-+
-+ /* we need to convert the '0' starting position on converted bitmap tp the world
-+ space of bitmap's hdc */
-+ zeroYSrc = 0;
-+ _DIBDRV_Position_ds2ws(physDevSrc, &dummy, &zeroYSrc);
-+ res = _DIBDRV_InternalBitBlt(physDevDst, xDst, yDst, width, height, physDevSrc, xSrc, zeroYSrc, rop);
-+ SelectObject(physDevSrc->hdc, ddb);
-+ DeleteObject(dib);
-+ noBlt1:
-+ ;
-+ }
-+ else
-+ {
-+ /* device DC */
-+ HBITMAP dib, stock;
-+ HDC memHdc;
-+
-+ /* we need device coordinates for ySrc and height, as the conversion
-+ functions operates directly on bitmap without the hdc */
-+ devXSrc = xSrc;
-+ devYSrc = ySrc;
-+ _DIBDRV_Position_ws2ds(physDevSrc, &devXSrc, &devYSrc);
-+ devWidth = width;
-+ devHeight = height;
-+ _DIBDRV_Sizes_ws2ds(physDevSrc, &devWidth, &devHeight);
-+
-+ dib = _DIBDRV_ConvertDevDDBtoDIB(physDevSrc->hdc, physDevDst->hdc, devXSrc, devYSrc, devWidth, devHeight);
-+ if(!dib)
-+ {
-+ ERR("Failed converting source DDB tp DIB for device DC\n");
-+ res = 0;
-+ goto noBlt2;
-+ }
-+ memHdc = CreateCompatibleDC(physDevDst->hdc);
-+ if(!memHdc)
-+ {
-+ ERR("Failed creating temporary memory DC\n");
-+ DeleteObject(dib);
-+ res = 0;
-+ goto noBlt2;
-+ }
-+ stock = SelectObject(memHdc, dib);
-+ if(!stock)
-+ {
-+ ERR("Failed selecting converted DIB into temporary memory DC\n");
-+ DeleteObject(dib);
-+ DeleteDC(memHdc);
-+ res = 0;
-+ goto noBlt2;
-+ }
-+ res = BitBlt(physDevDst->hdc, xDst, yDst, width, height, memHdc, 0, 0, rop);
-+
-+ SelectObject(memHdc, stock);
-+ DeleteObject(dib);
-+ DeleteDC(memHdc);
-+ noBlt2:
-+ ;
-+ }
-+ }
-+ }
-+ else /* dest is a DDB */
-+ {
-+ /* DDB selected on dest DC, use X11 Driver */
-+ if(!physDevSrc || !physDevSrc->hasDIB)
-+ {
-+ /* source is null or has also a DDB, no need to convert anything */
-+ if(_DIBDRV_GetDisplayDriver()->pBitBlt)
-+ res = _DIBDRV_GetDisplayDriver()->pBitBlt(physDevDst->X11PhysDev, xDst, yDst, width, height,
-+ physDevSrc ? physDevSrc->X11PhysDev : 0, xSrc, ySrc, rop);
-+ else
-+ res = _DIBDRV_GetDisplayDriver()->pStretchBlt(physDevDst->X11PhysDev, xDst, yDst, width, height,
-+ physDevSrc ? physDevSrc->X11PhysDev : 0, xSrc, ySrc, width, height, rop);
-+ }
-+ else
-+ {
-+ /* DIB on source, DDB on dest -- must convert source DIB to DDB and use X11 driver for blit */
-+ HBITMAP dib, ddb;
-+ dib = SelectObject(physDevSrc->hdc, GetStockObject(DEFAULT_BITMAP));
-+ if(!dib)
-+ {
-+ ERR("Couldn't select out DIB from source HDC\n");
-+ res = 0;
-+ goto noBlt3;
-+ }
-+
-+ /* we need device coordinates for ySrc and height, as the conversion
-+ functions operates directly on bitmap without the hdc */
-+ devYSrc = ySrc;
-+ _DIBDRV_Position_ws2ds(physDevSrc, &dummy, &devYSrc);
-+ devHeight = height;
-+ _DIBDRV_Sizes_ws2ds(physDevSrc, &dummy, &devHeight);
-+
-+ ddb = _DIBDRV_ConvertDIBtoDDB(physDevSrc->hdc, dib, devYSrc, devHeight);
-+ if(!ddb)
-+ {
-+ ERR("Failed converting source DIB to DDB\n");
-+ SelectObject(physDevSrc->hdc, dib);
-+ res = 0;
-+ goto noBlt3;
-+ }
-+ SelectObject(physDevSrc->hdc, ddb);
-+
-+ /* we need to convert the '0' starting position on converted bitmap tp the world
-+ space of bitmap's hdc */
-+ zeroYSrc = 0;
-+ _DIBDRV_Position_ds2ws(physDevSrc, &dummy, &zeroYSrc);
-+
-+ if(_DIBDRV_GetDisplayDriver()->pBitBlt)
-+ res = _DIBDRV_GetDisplayDriver()->pBitBlt(physDevDst->X11PhysDev, xDst, yDst, width, height,
-+ physDevSrc->X11PhysDev, xSrc, zeroYSrc, rop);
-+ else
-+ res = _DIBDRV_GetDisplayDriver()->pStretchBlt(physDevDst->X11PhysDev, xDst, yDst, width, height,
-+ physDevSrc->X11PhysDev, xSrc, zeroYSrc, width, height, rop);
-+ SelectObject(physDevSrc->hdc, dib);
-+ DeleteObject(ddb);
-+noBlt3:
-+ ;
-+ }
-+ }
-+ return res;
-+}
-+
-+/***********************************************************************
-+ * _DIBDRV_InternalStretchBlt
-+ */
-+BOOL _DIBDRV_InternalStretchBlt( DIBDRVPHYSDEV *physDevDst, INT xDst, INT yDst,
-+ INT widthDst, INT heightDst, DIBDRVPHYSDEV *physDevSrc,
-+ INT xSrc, INT ySrc, int widthSrc, int heightSrc, DWORD rop )
-+{
-+ BOOL res;
-+ POINT pd, ps;
-+ SIZE szSrc, szDst;
-+ int iRec;
-+ RECT dstClip, srcClip;
-+
-+ /* converts to device spaces */
-+ _DIBDRV_Position_ws2ds(physDevDst, &xDst, &yDst);
-+ _DIBDRV_Sizes_ws2ds(physDevDst, &widthDst, &heightDst);
-+ if(physDevSrc)
-+ {
-+ _DIBDRV_Position_ws2ds(physDevSrc, &xSrc, &ySrc);
-+ _DIBDRV_Sizes_ws2ds(physDevSrc, &widthSrc, &heightSrc);
-+ }
-+
-+ /* first clip on physical DC sizes */
-+ setPoint(&pd, xDst, yDst);
-+ setPoint(&ps, xSrc, ySrc);
-+ setSize(&szDst, widthDst, heightDst);
-+ setSize(&szSrc, widthSrc, heightSrc);
-+ setRect(&dstClip, 0, 0, physDevDst->physBitmap->width, physDevDst->physBitmap->height);
-+ if(physDevSrc)
-+ {
-+ setRect(&srcClip, 0, 0, physDevSrc->physBitmap->width, physDevSrc->physBitmap->height);
-+ res = StretchBlt_ClipAreas(&ps, &pd, &szSrc, &szDst, &srcClip, &dstClip);
-+ }
-+ else
-+ res = StretchBlt_ClipAreas(&ps, &pd, &szSrc, &szDst, 0, &dstClip);
-+ if(!res)
-+ return FALSE;
-+ xDst = pd.x; yDst = pd.y;
-+ xSrc = ps.x; ySrc = ps.y;
-+ widthDst = szDst.cx; heightDst = szDst.cy;
-+ widthSrc = szSrc.cx; heightSrc = szSrc.cy;
-+
-+ /* then, do blitting for each dest clip area (no clipping on source) */
-+ res = FALSE;
-+ for(iRec = 0; iRec < physDevDst->regionRectCount; iRec++)
-+ {
-+ RECT *r = physDevDst->regionRects + iRec;
-+ setRect(&dstClip, r->left, r->top, r->right, r->bottom);
-+ setPoint(&pd, xDst, yDst);
-+ setPoint(&ps, xSrc, ySrc);
-+ setSize(&szDst, widthDst, heightDst);
-+ setSize(&szSrc, widthSrc, heightSrc);
-+ if(!StretchBlt_ClipAreas(&ps, &pd, &szSrc, &szDst, 0, &dstClip))
-+ continue;
-+ if(physDevDst->physBitmap->funcs->StretchBlt(physDevDst, pd.x, pd.y, szDst.cx, szDst.cy,
-+ physDevSrc, ps.x, ps.y, szSrc.cx, szSrc.cy, rop))
-+ res = TRUE;
-+ }
-+ return res;
-+}
-+
-+/***********************************************************************
-+ * DIBDRV_StretchBlt
-+ */
-+BOOL DIBDRV_StretchBlt( DIBDRVPHYSDEV *physDevDst, INT xDst, INT yDst,
-+ INT widthDst, INT heightDst,
-+ DIBDRVPHYSDEV *physDevSrc, INT xSrc, INT ySrc,
-+ INT widthSrc, INT heightSrc, DWORD rop )
-+{
-+ BOOL res;
-+ int dummy;
-+ int devXSrc, devWidthSrc;
-+ int devYSrc, devHeightSrc, zeroYSrc;
-+
-+ /* if source and dest sizes match, just call BitBlt(), it's faster */
-+ if(!physDevSrc || (widthDst == widthSrc && heightDst == heightSrc))
-+ return DIBDRV_BitBlt(physDevDst, xDst, yDst, widthDst, heightDst, physDevSrc, xSrc, ySrc, rop);
-+
-+CheckMapping(__FUNCTION__, "DEST", physDevDst);
-+CheckMapping(__FUNCTION__, "SOURCE",physDevSrc);
-+ MAYBE(TRACE("physDevDst:%p(%s%s), xDst:%d, yDst:%d, widthDst:%d, heightDst:%d, physDevSrc:%p(%s%s), xSrc:%d, ySrc:%d, widthSrc:%d, heightSrc:%d, rop:%08x\n",
-+ physDevDst, physDevDst->hasDIB ? "DIB-" : "DDB", physDevDst->hasDIB ? _DIBDRVBITMAP_GetFormatName(physDevDst->physBitmap) : "",
-+ xDst, yDst, widthDst, heightDst,
-+ physDevSrc, physDevSrc->hasDIB ? "DIB-" : "DDB", physDevSrc->hasDIB ? _DIBDRVBITMAP_GetFormatName(physDevSrc->physBitmap) : "",
-+ xSrc, ySrc, widthSrc, heightSrc, rop));
-+
-+ if(physDevDst->hasDIB)
-+ {
-+ /* DIB section selected in dest DC, use DIB Engine */
-+
-+ if(!physDevSrc || physDevSrc->hasDIB)
-+ {
-+ /* source is null or has a DIB, no need to convert anyting */
-+ res = _DIBDRV_InternalStretchBlt(physDevDst, xDst, yDst, widthDst, heightDst, physDevSrc, xSrc, ySrc, widthSrc, heightSrc, rop);
-+ }
-+ else
-+ {
-+ /* source is a DDB, must convert it to DIB */
-+
-+ /* we must differentiate from 2 cases :
-+ 1) source DC is a memory DC
-+ 2) source DC is a device DC */
-+ if(GetObjectType(physDevSrc->hdc) == OBJ_MEMDC)
-+ {
-+ /* memory DC */
-+ HBITMAP dib, ddb;
-+
-+ ddb = SelectObject(physDevSrc->hdc, GetStockObject(DEFAULT_BITMAP));
-+ if(!ddb)
-+ {
-+ ERR("Couldn't select out DDB from source HDC\n");
-+ res = 0;
-+ goto noBlt1;
-+ }
-+
-+ /* we need device coordinates for ySrc and height, as the conversion
-+ functions operates directly on bitmap without the hdc */
-+ devYSrc = ySrc;
-+ _DIBDRV_Position_ws2ds(physDevSrc, &dummy, &devYSrc);
-+ devHeightSrc = heightSrc;
-+ _DIBDRV_Sizes_ws2ds(physDevSrc, &dummy, &devHeightSrc);
-+
-+ dib = _DIBDRV_ConvertDDBtoDIB(physDevSrc->hdc, ddb, devYSrc, devHeightSrc);
-+ if(!dib)
-+ {
-+ ERR("Failed converting source DDB to DIB\n");
-+ SelectObject(physDevSrc->hdc, ddb);
-+ res = 0;
-+ goto noBlt1;
-+ }
-+ SelectObject(physDevSrc->hdc, dib);
-+
-+
-+ /* we need to convert the '0' starting position on converted bitmap tp the world
-+ space of bitmap's hdc */
-+ zeroYSrc = 0;
-+ _DIBDRV_Position_ds2ws(physDevSrc, &dummy, &zeroYSrc);
-+
-+ res = _DIBDRV_InternalStretchBlt(physDevDst, xDst, yDst, widthDst, heightDst,
-+ physDevSrc, xSrc, zeroYSrc, widthSrc, heightSrc, rop);
-+ SelectObject(physDevSrc->hdc, ddb);
-+ DeleteObject(dib);
-+ noBlt1:
-+ ;
-+ }
-+ else
-+ {
-+ /* device DC */
-+ HBITMAP dib, stock;
-+ HDC memHdc;
-+
-+ /* we need device coordinates for ySrc and height, as the conversion
-+ functions operates directly on bitmap without the hdc */
-+ devXSrc = xSrc;
-+ devYSrc = ySrc;
-+ _DIBDRV_Position_ws2ds(physDevSrc, &devXSrc, &devYSrc);
-+ devWidthSrc = widthSrc;
-+ devHeightSrc = heightSrc;
-+ _DIBDRV_Sizes_ws2ds(physDevSrc, &devWidthSrc, &devHeightSrc);
-+
-+ dib = _DIBDRV_ConvertDevDDBtoDIB(physDevSrc->hdc, physDevDst->hdc, devXSrc, devYSrc, devWidthSrc, devHeightSrc);
-+ if(!dib)
-+ {
-+ ERR("Failed converting source DDB tp DIB for device DC\n");
-+ res = 0;
-+ goto noBlt2;
-+ }
-+ memHdc = CreateCompatibleDC(physDevDst->hdc);
-+ if(!memHdc)
-+ {
-+ ERR("Failed creating temporary memory DC\n");
-+ DeleteObject(dib);
-+ res = 0;
-+ goto noBlt2;
-+ }
-+ stock = SelectObject(memHdc, dib);
-+ if(!stock)
-+ {
-+ ERR("Failed selecting converted DIB into temporary memory DC\n");
-+ DeleteObject(dib);
-+ DeleteDC(memHdc);
-+ res = 0;
-+ goto noBlt2;
-+ }
-+ res = StretchBlt(physDevDst->hdc, xDst, yDst, widthDst, heightDst, memHdc, 0, 0, widthSrc, widthDst, rop);
-+
-+ SelectObject(memHdc, stock);
-+ DeleteObject(dib);
-+ DeleteDC(memHdc);
-+ noBlt2:
-+ ;
-+ }
-+ }
-+ }
-+ else /* dest is a DDB */
-+ {
-+ /* DDB selected on dest DC, use X11 Driver */
-+ if(!physDevSrc || !physDevSrc->hasDIB)
-+ {
-+ /* source is null or has also a DDB, no need to convert anything */
-+ res = _DIBDRV_GetDisplayDriver()->pStretchBlt(physDevDst->X11PhysDev, xDst, yDst, widthDst, heightDst,
-+ physDevSrc ? physDevSrc->X11PhysDev : 0, xSrc, ySrc, widthSrc, heightSrc, rop);
-+ }
-+ else
-+ {
-+ /* DIB on source, DDB on dest -- must convert source DIB to DDB and use X11 driver for blit */
-+ HBITMAP dib, ddb;
-+
-+ dib = SelectObject(physDevSrc->hdc, GetStockObject(DEFAULT_BITMAP));
-+ if(!dib)
-+ {
-+ ERR("Couldn't select out DIB from source HDC\n");
-+ res = 0;
-+ goto noBlt3;
-+ }
-+
-+ /* we need device coordinates for ySrc and height, as the conversion
-+ functions operates directly on bitmap without the hdc */
-+ devYSrc = ySrc;
-+ _DIBDRV_Position_ws2ds(physDevSrc, &dummy, &devYSrc);
-+ devHeightSrc = heightSrc;
-+ _DIBDRV_Sizes_ws2ds(physDevSrc, &dummy, &devHeightSrc);
-+
-+ ddb = _DIBDRV_ConvertDIBtoDDB(physDevSrc->hdc, dib, devYSrc, devHeightSrc);
-+ if(!ddb)
-+ {
-+ ERR("Failed converting source DIB to DDB\n");
-+ SelectObject(physDevSrc->hdc, dib);
-+ res = 0;
-+ goto noBlt3;
-+ }
-+ if(!SelectObject(physDevSrc->hdc, ddb))
-+ {
-+ ERR("Failed to select converted DDB into source HDC\n");
-+ SelectObject(physDevSrc->hdc, dib);
-+ DeleteObject(ddb);
-+ res = 0;
-+ goto noBlt3;
-+ }
-+
-+ /* we need to convert the '0' starting position on converted bitmap tp the world
-+ space of bitmap's hdc */
-+ zeroYSrc = 0;
-+ _DIBDRV_Position_ds2ws(physDevSrc, &dummy, &zeroYSrc);
-+ res = _DIBDRV_GetDisplayDriver()->pStretchBlt(physDevDst->X11PhysDev, xDst, yDst, widthDst, heightDst,
-+ physDevSrc->X11PhysDev, xSrc, zeroYSrc, widthSrc, heightSrc, rop);
-+ SelectObject(physDevSrc->hdc, dib);
-+ DeleteObject(ddb);
-+noBlt3:
-+ ;
-+ }
-+ }
-+ return res;
-+}
-+
-+/***********************************************************************
-+ * DIBDRV_PatBlt
-+ */
-+BOOL DIBDRV_PatBlt( DIBDRVPHYSDEV *physDev, INT left, INT top, INT width, INT height, DWORD rop )
-+{
-+ BOOL res;
-+
-+ MAYBE(TRACE("physDev:%p, left:%d, top:%d, width:%d, height:%d, rop:%06x\n", physDev, left, top, width, height, rop));
-+
-+ if(physDev->hasDIB)
-+ {
-+ /* DIB section selected in, use DIB Engine */
-+ ONCE(FIXME("TEMPORARY - use BitBlt by now\n"));
-+ res = DIBDRV_BitBlt(physDev, left, top, width, height, NULL, 0, 0, rop);
-+ }
-+ else
-+ {
-+ /* DDB selected in, use X11 driver */
-+ if(_DIBDRV_GetDisplayDriver()->pPatBlt)
-+ res = _DIBDRV_GetDisplayDriver()->pPatBlt(physDev->X11PhysDev, left, top, width, height, rop);
-+ else
-+ res = _DIBDRV_GetDisplayDriver()->pStretchBlt(physDev->X11PhysDev, left, top, width, height, 0, left, top, width, height, rop);
-+ }
-+ return res;
-+}
-diff -Nru a/dlls/winedib.drv/bitmap.c b/dlls/winedib.drv/bitmap.c
---- a/dlls/winedib.drv/bitmap.c 1970-01-01 01:00:00.000000000 +0100
-+++ b/dlls/winedib.drv/bitmap.c 2010-08-04 16:08:44.650222017 +0200
-@@ -0,0 +1,166 @@
-+/*
-+ * DIB driver bitmap objects
-+ *
-+ * Copyright 2009 Massimo Del Fedele
-+ *
-+ * This library is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License as published by the Free Software Foundation; either
-+ * version 2.1 of the License, or (at your option) any later version.
-+ *
-+ * This library is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with this library; if not, write to the Free Software
-+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
-+ */
-+
-+#include "config.h"
-+#include "wine/port.h"
-+
-+#include "dibdrv.h"
-+
-+WINE_DEFAULT_DEBUG_CHANNEL(dibdrv);
-+
-+
-+/****************************************************************************
-+ * SelectBitmap (WINEDIB.DRV.@)
-+ */
-+HBITMAP DIBDRV_SelectBitmap( DIBDRVPHYSDEV *physDev, HBITMAP hbitmap )
-+{
-+ DIBSECTION dibSection;
-+ HBITMAP res;
-+
-+ MAYBE(TRACE("physDev:%p, hbitmap:%p\n", physDev, hbitmap));
-+
-+ /* try to get the DIBSECTION data from the bitmap */
-+ if(GetObjectW(hbitmap, sizeof(DIBSECTION), &dibSection) != sizeof(DIBSECTION))
-+ {
-+ /* not a DIB section, sets it on physDev and use X11 behaviour */
-+
-+ physDev->hasDIB = FALSE;
-+ physDev->physBitmap = NULL;
-+ res = _DIBDRV_GetDisplayDriver()->pSelectBitmap(physDev->X11PhysDev, hbitmap);
-+ if(res)
-+ physDev->hbitmap = hbitmap;
-+ }
-+ else
-+ {
-+ /* it's a DIB section, sets it on physDev and use DIB Engine behaviour */
-+
-+ /* sets the physical bitmap */
-+ if((physDev->physBitmap = _BITMAPLIST_Get(hbitmap)) != NULL)
-+ {
-+ physDev->hasDIB = TRUE;
-+ physDev->hbitmap = hbitmap;
-+ MAYBE(TRACE("physDev->physBitmap:%p(%s)\n", physDev->physBitmap, _DIBDRVBITMAP_GetFormatName(physDev->physBitmap)));
-+ res = hbitmap;
-+ }
-+ else
-+ {
-+ ERR("Physical bitmap %p not found in internal list\n", hbitmap);
-+ physDev->hbitmap = GetStockObject(DEFAULT_BITMAP);
-+ physDev->hasDIB = FALSE;
-+ res = 0;
-+ }
-+ }
-+ return res;
-+}
-+
-+/****************************************************************************
-+ * DIBDRV_CreateBitmap
-+ */
-+BOOL DIBDRV_CreateBitmap( DIBDRVPHYSDEV *physDev, HBITMAP hbitmap, LPVOID bmBits )
-+{
-+ DIBSECTION dibSection;
-+ BOOL res;
-+
-+ MAYBE(TRACE("physDev:%p, hbitmap:%p, bmBits:%p\n", physDev, hbitmap, bmBits));
-+
-+ /* try to get the DIBSECTION data from the bitmap */
-+ if(GetObjectW(hbitmap, sizeof(DIBSECTION), &dibSection) == sizeof(BITMAP))
-+ {
-+ /* not a DIB section, use X11 behaviour */
-+ res = _DIBDRV_GetDisplayDriver()->pCreateBitmap(physDev->X11PhysDev, hbitmap, bmBits);
-+ }
-+ else
-+ {
-+ /* it's a DIB section, use DIB Engine behaviour - should not happen, but.... */
-+ ERR("CreateBitmap() called for a DIB section - shouldn't happen\n");
-+ res = TRUE;
-+ }
-+ return res;
-+}
-+
-+/***********************************************************************
-+ * DIBDRV_DeleteBitmap
-+ */
-+BOOL DIBDRV_DeleteBitmap( HBITMAP hbitmap )
-+{
-+ DIBSECTION dibSection;
-+ DIBDRVBITMAP *bmp;
-+ BOOL res;
-+
-+ MAYBE(TRACE("hbitmap:%p\n", hbitmap));
-+
-+ /* try to get the DIBSECTION data from the bitmap */
-+ if(GetObjectW(hbitmap, sizeof(DIBSECTION), &dibSection) != sizeof(DIBSECTION))
-+ {
-+ /* not a DIB section, use X11 behaviour */
-+ res = _DIBDRV_GetDisplayDriver()->pDeleteBitmap(hbitmap);
-+ }
-+ else
-+ {
-+ /* it's a DIB section, use DIB Engine behaviour */
-+
-+ /* do not try to delete stock objects */
-+ if(hbitmap == GetStockObject(DEFAULT_BITMAP))
-+ res = TRUE;
-+
-+ /* locates and frees the physical bitmap */
-+ else if((bmp = _BITMAPLIST_Remove(hbitmap)) != NULL)
-+ {
-+ _DIBDRVBITMAP_Free(bmp);
-+ res = TRUE;
-+ }
-+ else
-+ {
-+ ERR("Physical bitmap %p not found in internal list\n", hbitmap);
-+ res = FALSE;
-+ }
-+ }
-+ return res;
-+}
-+
-+/***********************************************************************
-+ * DIBDRV_GetBitmapBits
-+ */
-+LONG DIBDRV_GetBitmapBits( HBITMAP hbitmap, void *buffer, LONG count )
-+{
-+ LONG res;
-+
-+ MAYBE(TRACE("hbitmap:%p, buffer:%p, count:%d\n", hbitmap, buffer, count));
-+
-+ /* GetBitmapBits is only valid for DDBs, so use X11 driver */
-+ res = _DIBDRV_GetDisplayDriver()->pGetBitmapBits(hbitmap, buffer, count);
-+
-+ return res;
-+}
-+
-+/******************************************************************************
-+ * DIBDRV_SetBitmapBits
-+ */
-+LONG DIBDRV_SetBitmapBits( HBITMAP hbitmap, const void *bits, LONG count )
-+{
-+ LONG res;
-+
-+ MAYBE(TRACE("hbitmap:%p, bits:%p, count:%d\n", hbitmap, bits, count));
-+
-+ /* SetBitmapBits is only valid for DDBs, so use X11 driver */
-+ res = _DIBDRV_GetDisplayDriver()->pSetBitmapBits(hbitmap, bits, count);
-+
-+ return res;
-+}
-diff -Nru a/dlls/winedib.drv/bitmaplist.c b/dlls/winedib.drv/bitmaplist.c
---- a/dlls/winedib.drv/bitmaplist.c 1970-01-01 01:00:00.000000000 +0100
-+++ b/dlls/winedib.drv/bitmaplist.c 2010-08-04 16:08:44.653222017 +0200
-@@ -0,0 +1,168 @@
-+/*
-+ * DIBDRV in-memory bitmap list
-+ *
-+ * Copyright 2009 Massimo Del Fedele
-+ *
-+ * This library is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License as published by the Free Software Foundation; either
-+ * version 2.1 of the License, or (at your option) any later version.
-+ *
-+ * This library is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with this library; if not, write to the Free Software
-+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
-+ */
-+
-+/* this modules manages association between HBITMAP handles and DIBDRVBITMAP
-+ * physical bitmap objects. Needed mostly to get palettes from DIBs without
-+ * resorting to GetDIBColorTable() or GETDIBits(), which are DC dependent.
-+ * It makes also much easier (and faster) many bitmap operations */
-+
-+#include "config.h"
-+#include "wine/port.h"
-+
-+#include "dibdrv.h"
-+
-+WINE_DEFAULT_DEBUG_CHANNEL(dibdrv);
-+
-+static CRITICAL_SECTION BITMAPLIST_CritSection;
-+static CRITICAL_SECTION_DEBUG critsect_debug =
-+{
-+ 0, 0, &BITMAPLIST_CritSection,
-+ { &critsect_debug.ProcessLocksList, &critsect_debug.ProcessLocksList },
-+ 0, 0, { (DWORD_PTR)(__FILE__ ": BITMAPLIST_CritSection") }
-+};
-+static CRITICAL_SECTION BITMAPLIST_CritSection = { &critsect_debug, -1, 0, 0, 0, 0 };
-+
-+typedef struct _BITMAPLIST_NODE
-+{
-+ HBITMAP hbmp;
-+ DIBDRVBITMAP *bmp;
-+ UINT refCount;
-+ struct _BITMAPLIST_NODE *prev, *next;
-+
-+} BITMAPLIST_NODE;
-+
-+/* the list */
-+static BITMAPLIST_NODE *DIBDRV_BITMAPLIST;
-+
-+/* initializes bitmap list -- to be called at process attach */
-+void _BITMAPLIST_Init(void)
-+{
-+ DIBDRV_BITMAPLIST = NULL;
-+}
-+
-+/* terminates bitmap list -- to be called at process detach */
-+void _BITMAPLIST_Terminate(void)
-+{
-+ BITMAPLIST_NODE *curNode, *nextNode;
-+
-+ EnterCriticalSection(&BITMAPLIST_CritSection);
-+
-+ /* frees all stored bitmaps, if any left */
-+ curNode = DIBDRV_BITMAPLIST;
-+ while(curNode)
-+ {
-+ nextNode = curNode->next;
-+ ERR("Unfreed DIB found, handle is %p\n", curNode->hbmp);
-+ HeapFree(GetProcessHeap(), 0, curNode);
-+ curNode = nextNode;
-+ }
-+ DIBDRV_BITMAPLIST = NULL;
-+ LeaveCriticalSection(&BITMAPLIST_CritSection);
-+ DeleteCriticalSection(&BITMAPLIST_CritSection);
-+}
-+
-+/* scan list for a DIB -- returns node containing it */
-+static BITMAPLIST_NODE *GetNode(HBITMAP hbmp)
-+{
-+ BITMAPLIST_NODE *node = DIBDRV_BITMAPLIST;
-+ while(node)
-+ {
-+ if(node->hbmp == hbmp)
-+ return node;
-+ node = node->next;
-+ }
-+ return NULL;
-+}
-+
-+/* adds a DIB to the list - it adds it on top, as
-+ usually most recently created DIBs are used first */
-+BOOL _BITMAPLIST_Add(HBITMAP hbmp, DIBDRVBITMAP *bmp)
-+{
-+ BITMAPLIST_NODE *existNode, *node;
-+
-+ EnterCriticalSection(&BITMAPLIST_CritSection);
-+
-+ /* checks if already there */
-+ node = NULL;
-+ existNode = GetNode(hbmp);
-+ if(!existNode)
-+ {
-+ node = HeapAlloc(GetProcessHeap(), 0, sizeof(BITMAPLIST_NODE));
-+ if(!node)
-+ ERR("HeapAlloc failed\n");
-+ else
-+ {
-+ node->next = DIBDRV_BITMAPLIST;
-+ node->prev = NULL;
-+ DIBDRV_BITMAPLIST = node;
-+ if(node->next)
-+ node->next->prev = node;
-+ node->hbmp = hbmp;
-+ node->bmp = bmp;
-+ }
-+ }
-+ LeaveCriticalSection(&BITMAPLIST_CritSection);
-+ return !existNode && node;
-+}
-+
-+/* removes a DIB from the list */
-+DIBDRVBITMAP *_BITMAPLIST_Remove(HBITMAP hbmp)
-+{
-+ BITMAPLIST_NODE *node;
-+ DIBDRVBITMAP *bmp;
-+
-+ /* checks if already there */
-+ EnterCriticalSection(&BITMAPLIST_CritSection);
-+ node = GetNode(hbmp);
-+ if(node)
-+ {
-+ if(node->prev)
-+ node->prev->next = node->next;
-+ else
-+ DIBDRV_BITMAPLIST = node->next;
-+ if(node->next)
-+ node->next->prev = node->prev;
-+ }
-+ LeaveCriticalSection(&BITMAPLIST_CritSection);
-+ if(node)
-+ {
-+ bmp = node->bmp;
-+ HeapFree(GetProcessHeap(), 0, node);
-+ }
-+ else
-+ bmp = NULL;
-+ return bmp;
-+}
-+
-+/* scans list for a DIB */
-+DIBDRVBITMAP *_BITMAPLIST_Get(HBITMAP hbmp)
-+{
-+ BITMAPLIST_NODE *node;
-+ DIBDRVBITMAP *bmp;
-+
-+ EnterCriticalSection(&BITMAPLIST_CritSection);
-+ node = GetNode(hbmp);
-+ if(!node)
-+ bmp = NULL;
-+ else
-+ bmp = node->bmp;
-+ LeaveCriticalSection(&BITMAPLIST_CritSection);
-+ return bmp;
-+}
-diff -Nru a/dlls/winedib.drv/clipping.c b/dlls/winedib.drv/clipping.c
---- a/dlls/winedib.drv/clipping.c 1970-01-01 01:00:00.000000000 +0100
-+++ b/dlls/winedib.drv/clipping.c 2010-08-04 16:08:44.574222017 +0200
-@@ -0,0 +1,79 @@
-+/*
-+ * DIBDRV clipping functions
-+ *
-+ * Copyright 2009 Massimo Del Fedele
-+ *
-+ * This library is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License as published by the Free Software Foundation; either
-+ * version 2.1 of the License, or (at your option) any later version.
-+ *
-+ * This library is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with this library; if not, write to the Free Software
-+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
-+ */
-+
-+#include "config.h"
-+#include "wine/port.h"
-+
-+#include "dibdrv.h"
-+
-+WINE_DEFAULT_DEBUG_CHANNEL(dibdrv);
-+
-+/***********************************************************************
-+ * DIBDRV_SetDeviceClipping
-+ */
-+void DIBDRV_SetDeviceClipping( DIBDRVPHYSDEV *physDev, HRGN vis_rgn, HRGN clip_rgn )
-+{
-+ RGNDATA *data;
-+ DWORD size;
-+ int iRect;
-+
-+ MAYBE(TRACE("physDev:%p, vis_rgn:%p, clip_rgn:%p\n", physDev, vis_rgn, clip_rgn));
-+
-+ if(physDev->hasDIB)
-+ {
-+ /* DIB section selected in, use DIB Engine */
-+
-+ CombineRgn( physDev->region, vis_rgn, clip_rgn, clip_rgn ? RGN_AND : RGN_COPY );
-+
-+ /* get region rectangles */
-+ if(!(size = GetRegionData(physDev->region, 0, NULL)))
-+ return;
-+ data = HeapAlloc(GetProcessHeap(), 0, size);
-+ if (!GetRegionData(physDev->region, size, data))
-+ {
-+ HeapFree( GetProcessHeap(), 0, data );
-+ return;
-+ }
-+
-+ /* frees any previous regions rectangles in DC */
-+ if(physDev->regionData)
-+ HeapFree(GetProcessHeap(), 0, physDev->regionData);
-+
-+ /* sets the rectangles on physDev */
-+ physDev->regionData = data;
-+ physDev->regionRects = (RECT *)data->Buffer;
-+ physDev->regionRectCount = data->rdh.nCount;
-+
-+ if(TRACE_ON(dibdrv))
-+ {
-+ TRACE("Region dump : %d rectangles\n", physDev->regionRectCount);
-+ for(iRect = 0; iRect < physDev->regionRectCount; iRect++)
-+ {
-+ RECT *r = physDev->regionRects + iRect;
-+ TRACE("Rect #%03d, x1:%4d, y1:%4d, x2:%4d, y2:%4d\n", iRect, r->left, r->top, r->right, r->bottom);
-+ }
-+ }
-+ }
-+ else
-+ {
-+ /* DDB selected in, use X11 driver */
-+ _DIBDRV_GetDisplayDriver()->pSetDeviceClipping(physDev->X11PhysDev, vis_rgn, clip_rgn);
-+ }
-+}
-diff -Nru a/dlls/winedib.drv/convert.c b/dlls/winedib.drv/convert.c
---- a/dlls/winedib.drv/convert.c 1970-01-01 01:00:00.000000000 +0100
-+++ b/dlls/winedib.drv/convert.c 2010-08-04 16:08:44.765222017 +0200
-@@ -0,0 +1,303 @@
-+/*
-+ * DIB Engine conversion routines
-+ * Converts DDB <--> DIB
-+ *
-+ * Copyright 2009 Massimo Del Fedele
-+ *
-+ * This library is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License as published by the Free Software Foundation; either
-+ * version 2.1 of the License, or (at your option) any later version.
-+ *
-+ * This library is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with this library; if not, write to the Free Software
-+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
-+ */
-+
-+#include "config.h"
-+#include "wine/port.h"
-+
-+#include "dibdrv.h"
-+
-+#include "winuser.h"
-+
-+WINE_DEFAULT_DEBUG_CHANNEL(dibdrv);
-+
-+/***********************************************************************
-+ * Creates DDB that is compatible with source hdc.
-+ * hdc is the HDC on where the DIB MUST be selected in
-+ * srcBmp is the source DIB
-+ * startScan and scanLines specify the portion of DIB to convert
-+ * in order to avoid unneeded conversion of large DIBs on blitting
-+ *
-+ * NOTE : the srcBmp DIB MUST NOT be selected in any DC */
-+HBITMAP _DIBDRV_ConvertDIBtoDDB( HDC hdc, HBITMAP srcBmp, int startScan, int scanLines )
-+{
-+ DIBSECTION ds;
-+ BITMAPINFO *bmi;
-+ HBITMAP hBmp = NULL;
-+
-+ int dibWidth, dibHeight;
-+ BOOL topDown;
-+ void *bits;
-+ int stride;
-+ UINT colorUsed;
-+ int bitFields;
-+ HDC tmpHdc;
-+ HBITMAP tmpBmp;
-+ int res;
-+ DIBDRVBITMAP *physBitmap;
-+
-+ /* gets DIBSECTION data from source DIB */
-+ if(GetObjectW(srcBmp, sizeof(DIBSECTION), &ds) != sizeof(DIBSECTION))
-+ {
-+ ERR("Couldn't get DIBSECTION data\n");
-+ return 0;
-+ }
-+
-+ /* gets DIB info */
-+ dibWidth = ds.dsBmih.biWidth;
-+ dibHeight = ds.dsBmih.biHeight;
-+ bits = ds.dsBm.bmBits;
-+ stride = ((dibWidth * ds.dsBmih.biBitCount +31) &~31) / 8;
-+
-+ /* get physical bitmap -- needed for topdown flag */
-+ if( (physBitmap = _BITMAPLIST_Get(srcBmp)) == NULL)
-+ {
-+ ERR("Couldn't retrieve physical bitmap\n");
-+ return 0;
-+ }
-+ topDown = physBitmap->topdown;
-+
-+ /* adjust bits to point at needed starting stripe */
-+ if(topDown)
-+ /* top-down DIB */
-+ bits = (BYTE *)bits + startScan * stride;
-+ else
-+ bits = (BYTE *)bits + (dibHeight - startScan - scanLines) * stride;
-+
-+ /* if requested part is out of source bitmap, returns 0 */
-+ if(startScan >= dibHeight)
-+ return 0;
-+ if(startScan + scanLines >= dibHeight)
-+ scanLines = dibHeight - startScan;
-+
-+ /* gets the size of DIB palette and bitfields, if any */
-+ bitFields = 0;
-+ colorUsed = 0;
-+ if(ds.dsBmih.biCompression == BI_BITFIELDS)
-+ bitFields = 3;
-+ else if(ds.dsBmih.biBitCount <= 8)
-+ {
-+ colorUsed = ds.dsBmih.biClrUsed;
-+ if(!colorUsed)
-+ colorUsed = 1 << ds.dsBmih.biBitCount;
-+ }
-+
-+ /* builds the needed BITMAPINFOHEADER */
-+ bmi = HeapAlloc( GetProcessHeap(), 0, sizeof(BITMAPINFOHEADER)+
-+ sizeof(RGBQUAD)*colorUsed + sizeof(DWORD) * bitFields );
-+ if (!bmi)
-+ {
-+ ERR("HeapAlloc failed\n");
-+ return 0;
-+ }
-+
-+ /* copy the header part */
-+ memcpy( &bmi->bmiHeader, &ds.dsBmih, sizeof(BITMAPINFOHEADER) );
-+
-+ /* gets the color table part, if any */
-+ if(colorUsed)
-+ {
-+ /* create a temporary DC, GetDIBColorTable() requests that
-+ the DIB is selected in a DC.... */
-+ if(!(tmpHdc = CreateCompatibleDC(hdc)))
-+ {
-+ ERR("Couldn't create the temporary HDC\n");
-+ HeapFree(GetProcessHeap(), 0, bmi);
-+ return 0;
-+ }
-+ /* selects the DIB into the temporary DC */
-+ if( !(tmpBmp = SelectObject(tmpHdc, srcBmp)))
-+ {
-+ ERR("Couldn't select source DIB into temporary DC\n");
-+ DeleteDC(tmpHdc);
-+ HeapFree(GetProcessHeap(), 0, bmi);
-+ return 0;
-+ }
-+ if(!GetDIBColorTable(tmpHdc, 0, colorUsed, bmi->bmiColors))
-+ ERR("GetDIBColorTable failed\n");
-+ SelectObject(tmpHdc, tmpBmp);
-+ DeleteDC(tmpHdc);
-+
-+ }
-+
-+ /* fill the bitfields part, if any */
-+ if(bitFields)
-+ memcpy(bmi->bmiColors, ds.dsBitfields, 3 * sizeof(DWORD));
-+
-+ /* adjust dib size for SetDIBits, as it needs it to reverse top-down dibs
-+ it must be set to the number of scanLines to transfer */
-+ bmi->bmiHeader.biHeight = topDown ? -scanLines : scanLines;
-+
-+ /* creates destination compatible bitmap */
-+ tmpHdc = GetDC(NULL);
-+ hBmp = CreateCompatibleBitmap(tmpHdc, dibWidth, scanLines);
-+ ReleaseDC(NULL, tmpHdc);
-+ if(!hBmp)
-+ {
-+ ERR("CreateCompatibleBitmap failed\n");
-+ HeapFree( GetProcessHeap(), 0, bmi );
-+ return 0;
-+ }
-+
-+ /* copies the requested scan lines from DIB to DDB */
-+ /* FIXME : still no support for RLE packed DIBs */
-+ res = SetDIBits( hdc, hBmp, 0, scanLines, bits, bmi, DIB_RGB_COLORS );
-+ HeapFree( GetProcessHeap(), 0, bmi );
-+ if(!res)
-+ {
-+ ERR("SetDIBits failed\n");
-+ DeleteObject( hBmp );
-+ return 0;
-+ }
-+
-+ return hBmp;
-+}
-+
-+/***********************************************************************
-+ * Creates DIB that is compatible with the target hdc.
-+ * startScan and scanLines specify the portion of DDB to convert
-+ * in order to avoid unneeded conversion of large DDBs on blitting
-+ *
-+ * NOTE : the srcBmp DDB MUST NOT be selected in any DC */
-+HBITMAP _DIBDRV_ConvertDDBtoDIB( HDC hdc, HBITMAP srcBmp, int startScan, int scanLines )
-+{
-+ HBITMAP hBmp = NULL;
-+ BITMAP bitmap;
-+ BITMAPINFO *bi;
-+ void *bits = NULL;
-+
-+ if (!GetObjectW( srcBmp, sizeof(bitmap), &bitmap ))
-+ {
-+ ERR("Couldn't retrieve source bitmap\n");
-+ return 0;
-+ }
-+
-+ if(startScan + scanLines >= bitmap.bmHeight)
-+ scanLines = bitmap.bmHeight - startScan;
-+
-+ bi = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(BITMAPINFOHEADER) /* + 256 * sizeof(RGBQUAD) */);
-+ if (!bi)
-+ {
-+ ERR("HeapAlloc failed\n");
-+ return 0;
-+ }
-+
-+ bi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
-+ bi->bmiHeader.biWidth = bitmap.bmWidth;
-+ bi->bmiHeader.biHeight = scanLines;
-+ bi->bmiHeader.biPlanes = bitmap.bmPlanes;
-+ bi->bmiHeader.biBitCount = 32;
-+ bi->bmiHeader.biCompression = BI_RGB;
-+ bi->bmiHeader.biSizeImage = 0;
-+
-+ /* No need to get the color table or the color masks
-+ as we're requesting a 32 bit rgba DIB */
-+
-+ /* Create bitmap and fill in bits */
-+ hBmp = CreateDIBSection(hdc, bi, DIB_RGB_COLORS, &bits, NULL, 0);
-+ if(!hBmp)
-+ {
-+ ERR("Failed to create DIB section\n");
-+ HeapFree( GetProcessHeap(), 0, bi );
-+ return 0;
-+ }
-+ if (bits)
-+ {
-+ if(!GetDIBits(hdc, srcBmp, startScan, scanLines, bits, bi, DIB_RGB_COLORS))
-+ {
-+ ERR("GetDIBits failed\n");
-+ DeleteObject( hBmp );
-+ HeapFree( GetProcessHeap(), 0, bi );
-+ return 0;
-+ }
-+ }
-+ else
-+ {
-+ ERR("CreateDibSection couldn't allocate DIB bits\n");
-+ DeleteObject( hBmp );
-+ HeapFree( GetProcessHeap(), 0, bi );
-+ return 0;
-+ }
-+ HeapFree( GetProcessHeap(), 0, bi );
-+ return hBmp;
-+}
-+
-+/***********************************************************************
-+ * BITBLT_ConvertDevDDBtoDIB
-+ *
-+ * Creates DIB that is compatible with the target hdc for a device (non memory) source DC */
-+HBITMAP _DIBDRV_ConvertDevDDBtoDIB( HDC hdcSrc, HDC hdcDst, int xSrc, int ySrc, int width, int height )
-+{
-+ HBITMAP bmp, dib;
-+ HDC memHDC = NULL;
-+
-+ /* at first, we create a compatible DC and a bitmap with needed sizes */
-+ memHDC = CreateCompatibleDC(hdcSrc);
-+ if(!memHDC)
-+ {
-+ ERR("CreateCompatibleDC failed\n");
-+ return 0;
-+ }
-+ bmp = CreateCompatibleBitmap(hdcSrc, width, height);
-+ if(!bmp)
-+ {
-+ ERR("CreateCompatibleBitmap failed\n");
-+ DeleteDC(memHDC);
-+ return 0;
-+ }
-+
-+ /* select the newly created DDB into the temporary DC */
-+ bmp = SelectObject(memHDC, bmp);
-+ if(!bmp)
-+ {
-+ ERR("Failed selecting DDB into temporary DC\n");
-+ DeleteObject(bmp);
-+ DeleteDC(memHDC);
-+ return 0;
-+ }
-+
-+ /* next, we blit pixels from device to the compatible bitmap */
-+ if(!BitBlt(memHDC, 0, 0, width, height, hdcSrc, xSrc, ySrc, SRCCOPY))
-+ {
-+ ERR("BitBlt failed\n");
-+ DeleteObject(bmp);
-+ DeleteDC(memHDC);
-+ return 0;
-+ }
-+
-+ /* select out the DDB from the temporary DC */
-+ bmp = SelectObject(memHDC, bmp);
-+ DeleteDC(memHDC);
-+ if(!bmp)
-+ {
-+ ERR("Failed selecting DDB out temporary DC\n");
-+ DeleteObject(bmp);
-+ return 0;
-+ }
-+
-+ /*now we can convert the bitmap to a DIB */
-+ dib = _DIBDRV_ConvertDDBtoDIB( hdcDst, bmp, 0, height );
-+ if(!dib)
-+ FIXME("ConvertDDBtoDIB failed\n");
-+
-+ /* free resources and return the created dib */
-+ DeleteObject(bmp);
-+ return dib;
-+}
-diff -Nru a/dlls/winedib.drv/dc.c b/dlls/winedib.drv/dc.c
---- a/dlls/winedib.drv/dc.c 1970-01-01 01:00:00.000000000 +0100
-+++ b/dlls/winedib.drv/dc.c 2010-08-04 16:08:44.656222017 +0200
-@@ -0,0 +1,427 @@
-+/*
-+ * DIB driver initialization functions
-+ *
-+ * Copyright 2009 Massimo Del Fedele
-+ *
-+ * This library is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License as published by the Free Software Foundation; either
-+ * version 2.1 of the License, or (at your option) any later version.
-+ *
-+ * This library is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with this library; if not, write to the Free Software
-+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
-+ */
-+
-+#include "config.h"
-+#include "wine/port.h"
-+
-+#include "dibdrv.h"
-+
-+WINE_DEFAULT_DEBUG_CHANNEL(dibdrv);
-+
-+
-+/* some screen caps */
-+static unsigned int screen_width;
-+static unsigned int screen_height;
-+static unsigned int screen_bpp;
-+static unsigned int screen_depth;
-+static RECT virtual_screen_rect;
-+
-+/* a few dynamic device caps */
-+static int log_pixels_x; /* pixels per logical inch in x direction */
-+static int log_pixels_y; /* pixels per logical inch in y direction */
-+static int horz_size; /* horz. size of screen in millimeters */
-+static int vert_size; /* vert. size of screen in millimeters */
-+static int palette_size;
-+static int device_init_done;
-+
-+/* NOTE :
-+ Removing TC_RA_ABLE avoids bitmapped fonts, so FT_Face is always non-NULL
-+ UPDATE : remove TC_RA_ABLE seems unneeded
-+ Adding TC_VA_ABLE forces to use gdi fonts always, so we can get an FT_Face
-+*/
-+unsigned int text_caps = (TC_OP_CHARACTER | TC_OP_STROKE | TC_CP_STROKE |
-+ TC_CR_ANY | TC_SA_DOUBLE | TC_SA_INTEGER |
-+ TC_SA_CONTIN | TC_UA_ABLE | TC_SO_ABLE | TC_RA_ABLE | TC_VA_ABLE);
-+ /* X11R6 adds TC_SF_X_YINDEP, Xrender adds TC_VA_ABLE */
-+
-+
-+static const WCHAR dpi_key_name[] = {'S','o','f','t','w','a','r','e','\\','F','o','n','t','s','\0'};
-+static const WCHAR dpi_value_name[] = {'L','o','g','P','i','x','e','l','s','\0'};
-+
-+/******************************************************************************
-+ * get_dpi
-+ *
-+ * get the dpi from the registry
-+ */
-+static DWORD get_dpi( void )
-+{
-+ DWORD dpi = 96;
-+ HKEY hkey;
-+
-+ if (RegOpenKeyW(HKEY_CURRENT_CONFIG, dpi_key_name, &hkey) == ERROR_SUCCESS)
-+ {
-+ DWORD type, size, new_dpi;
-+
-+ size = sizeof(new_dpi);
-+ if(RegQueryValueExW(hkey, dpi_value_name, NULL, &type, (void *)&new_dpi, &size) == ERROR_SUCCESS)
-+ {
-+ if(type == REG_DWORD && new_dpi != 0)
-+ dpi = new_dpi;
-+ }
-+ RegCloseKey(hkey);
-+ }
-+ return dpi;
-+}
-+
-+/* dummy function for pen/brush drawing primitives initializations */
-+static void dummy4(DIBDRVPHYSDEV *physDev, int a, int b, int c) {} ;
-+static void dummy5(DIBDRVPHYSDEV *physDev, int a, int b, int c, int d) {} ;
-+
-+/**********************************************************************
-+ * device_init
-+ *
-+ * Perform initializations needed upon creation of the first device.
-+ */
-+static void device_init(void)
-+{
-+ Display *display;
-+ Screen *screen;
-+
-+ /* opens default X11 Display */
-+ if( (display = XOpenDisplay(NULL)) == NULL)
-+ return;
-+
-+ /* gets default screen */
-+ screen = XDefaultScreenOfDisplay(display);
-+
-+ /* gets screen sizes */
-+ screen_width = XWidthOfScreen(screen);
-+ screen_height = XHeightOfScreen(screen);
-+
-+ /* not sure about these ones... */
-+ screen_bpp = XDefaultDepthOfScreen(screen);
-+ screen_depth = XPlanesOfScreen(screen);
-+ virtual_screen_rect.left = 0;
-+ virtual_screen_rect.top = 0;
-+ virtual_screen_rect.right = screen_width;
-+ virtual_screen_rect.bottom = screen_height;
-+
-+ /* dummy ? */
-+ palette_size = 0;
-+
-+ /* Initialize device caps */
-+ log_pixels_x = log_pixels_y = get_dpi();
-+ horz_size = MulDiv( screen_width, 254, log_pixels_x * 10 );
-+ vert_size = MulDiv( screen_height, 254, log_pixels_y * 10 );
-+
-+ device_init_done = TRUE;
-+}
-+
-+/**********************************************************************
-+ * DIBDRV_CreateDC
-+ */
-+BOOL DIBDRV_CreateDC( HDC hdc, DIBDRVPHYSDEV **pdev, LPCWSTR driver, LPCWSTR device,
-+ LPCWSTR output, const DEVMODEW* initData )
-+{
-+ DIBDRVPHYSDEV *physDev;
-+ PHYSDEV X11PhysDev;
-+
-+ MAYBE(TRACE("hdc:%p, pdev:%p, driver:%s, device:%s, output:%s, initData:%p\n",
-+ hdc, pdev, debugstr_w(driver), debugstr_w(device), debugstr_w(output), initData));
-+
-+ /* allocates physical device */
-+ physDev = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(DIBDRVPHYSDEV) );
-+ if (!physDev)
-+ return FALSE;
-+
-+ /* creates X11 physical device */
-+ if(!_DIBDRV_GetDisplayDriver()->pCreateDC(hdc, &X11PhysDev, driver, device, output, initData))
-+ {
-+ HeapFree(GetProcessHeap(), 0, physDev);
-+ return FALSE;
-+ }
-+
-+ /* sets X11 Device pointer in DIB Engine device */
-+ physDev->X11PhysDev = X11PhysDev;
-+
-+ /* stores the HDC */
-+ physDev->hdc = hdc;
-+
-+ /* initializes device data (for GetDeviceCaps() )
-+ on first DC creation */
-+ if (!device_init_done)
-+ device_init();
-+
-+ /* stock bitmap selected on DC creation */
-+ physDev->hbitmap = GetStockObject(DEFAULT_BITMAP);
-+
-+ /* no DIB selected into DC on creation */
-+ physDev->hasDIB = FALSE;
-+
-+ /* initializes the physical bitmap */
-+ physDev->physBitmap = NULL;
-+
-+ /* clears pen and brush */
-+ physDev->rop2 = R2_COPYPEN;
-+
-+ /* clipping region */
-+ physDev->region = CreateRectRgn( 0, 0, 0, 0 );
-+ physDev->regionData = NULL;
-+ physDev->regionRects = NULL;
-+ physDev->regionRectCount = 0;
-+
-+ physDev->backgroundColor = 0;
-+ _DIBDRV_CalcAndXorMasks(physDev->rop2, 0, &physDev->backgroundAnd, &physDev->backgroundXor);
-+
-+ /* stock pen */
-+ physDev->penStyle = PS_NULL;
-+ physDev->penColor = 0;
-+ physDev->penColorref = 0;
-+ _DIBDRV_CalcAndXorMasks(physDev->rop2, 0, &physDev->penAnd, &physDev->penXor);
-+ physDev->penHLine = dummy4;
-+ physDev->penVLine = dummy4;
-+ physDev->penLine = dummy5;
-+ physDev->penPattern = NULL;
-+
-+ /* stock brush */
-+ physDev->brushStyle = BS_NULL;
-+ physDev->brushColor = 0x0;
-+ physDev->brushColorref = 0x0;
-+ _DIBDRV_CalcAndXorMasks(physDev->rop2, 0x0, &physDev->brushAnd, &physDev->brushXor);
-+ physDev->brushAnds = NULL;
-+ physDev->brushXors = NULL;
-+ physDev->brushHLine = dummy4;
-+
-+ physDev->isBrushBitmap = FALSE;
-+ physDev->brushBitmap = NULL;
-+ physDev->brushBmpCache = NULL;
-+
-+ /* text color */
-+ physDev->textColor = 0;
-+ physDev->textBackground = 0;
-+
-+#ifdef DIBDRV_ANTIALIASED_FONTS
-+ /* text color table for antialiased fonts */
-+ memset(physDev->textColorTable, 0, 256);
-+#endif
-+
-+ /* freetype face associated to current DC HFONT */
-+ physDev->face = NULL;
-+
-+ /* sets the result value and returns */
-+ *pdev = physDev;
-+
-+ return TRUE;
-+}
-+
-+/**********************************************************************
-+ * DIBDRV_DeleteDC
-+ */
-+BOOL DIBDRV_DeleteDC( DIBDRVPHYSDEV *physDev )
-+{
-+ BOOL res;
-+
-+ MAYBE(TRACE("physDev:%p\n", physDev));
-+
-+ /* frees X11 device */
-+ res = _DIBDRV_GetDisplayDriver()->pDeleteDC(physDev->X11PhysDev);
-+ physDev->X11PhysDev = NULL;
-+
-+ /* resets physical bitmap */
-+ physDev->physBitmap = NULL;
-+
-+ /* reset brush bitmap */
-+ _DIBDRVBITMAP_Free(physDev->brushBitmap);
-+ physDev->brushBitmap = NULL;
-+ _DIBDRVBITMAP_Free(physDev->brushBmpCache);
-+ physDev->brushBmpCache = NULL;
-+
-+ /* free brush ands and xors */
-+ if(physDev->brushAnds)
-+ {
-+ HeapFree(GetProcessHeap(), 0, physDev->brushAnds);
-+ HeapFree(GetProcessHeap(), 0, physDev->brushXors);
-+ }
-+ physDev->brushAnds = NULL;
-+ physDev->brushXors = NULL;
-+
-+ /* frees clipping region */
-+ DeleteObject(physDev->region);
-+ if(physDev->regionData)
-+ HeapFree(GetProcessHeap(), 0, physDev->regionData);
-+ physDev->regionData = NULL;
-+ physDev->regionRects = NULL;
-+ physDev->regionRectCount = 0;
-+
-+ /* frees DIB Engine device */
-+ HeapFree(GetProcessHeap(), 0, physDev);
-+
-+ return res;
-+}
-+
-+/**********************************************************************
-+ * DIBDRV_ExtEscape
-+ */
-+INT DIBDRV_ExtEscape( DIBDRVPHYSDEV *physDev, INT escape, INT in_count, LPCVOID in_data,
-+ INT out_count, LPVOID out_data )
-+{
-+ INT res;
-+
-+ MAYBE(TRACE("physDev:%p, escape:%d, in_count:%d, in_data:%p, out_count:%d, out_data:%p\n",
-+ physDev, escape, in_count, in_data, out_count, out_data));
-+
-+ if(physDev->hasDIB)
-+ {
-+ /* DIB section selected in, use DIB Engine */
-+ ONCE(FIXME("TEMPORARY - fallback to X11 driver\n"));
-+ res = _DIBDRV_GetDisplayDriver()->pExtEscape(physDev->X11PhysDev, escape, in_count, in_data, out_count, out_data);
-+ }
-+ else
-+ {
-+ /* DDB selected in, use X11 driver */
-+ res = _DIBDRV_GetDisplayDriver()->pExtEscape(physDev->X11PhysDev, escape, in_count, in_data, out_count, out_data);
-+ }
-+ return res;
-+}
-+
-+/***********************************************************************
-+ * DIBDRV_GetDeviceCaps
-+ */
-+INT DIBDRV_GetDeviceCaps( DIBDRVPHYSDEV *physDev, INT cap )
-+{
-+ INT res;
-+
-+ MAYBE(TRACE("physDev:%p, cap:%d\n", physDev, cap));
-+
-+ if(physDev->hasDIB)
-+ {
-+ /* DIB section selected in, use DIB Engine */
-+ switch(cap)
-+ {
-+ case DRIVERVERSION:
-+ res = 0x300;
-+ break;
-+ case TECHNOLOGY:
-+ res = DT_RASDISPLAY;
-+ break;
-+ case HORZSIZE:
-+ res = horz_size;
-+ break;
-+ case VERTSIZE:
-+ res = vert_size;
-+ break;
-+ case HORZRES:
-+ res = screen_width;
-+ break;
-+ case VERTRES:
-+ res = screen_height;
-+ break;
-+ case DESKTOPHORZRES:
-+ res = virtual_screen_rect.right - virtual_screen_rect.left;
-+ break;
-+ case DESKTOPVERTRES:
-+ res = virtual_screen_rect.bottom - virtual_screen_rect.top;
-+ break;
-+ case BITSPIXEL:
-+ res = screen_bpp;
-+ break;
-+ case PLANES:
-+ res = 1;
-+ break;
-+ case NUMBRUSHES:
-+ res = -1;
-+ break;
-+ case NUMPENS:
-+ res = -1;
-+ break;
-+ case NUMMARKERS:
-+ res = 0;
-+ break;
-+ case NUMFONTS:
-+ res = 0;
-+ break;
-+ case NUMCOLORS:
-+ /* MSDN: Number of entries in the device's color table, if the device has
-+ * a color depth of no more than 8 bits per pixel.For devices with greater
-+ * color depths, -1 is returned. */
-+ res = (screen_depth > 8) ? -1 : (1 << screen_depth);
-+ break;
-+ case CURVECAPS:
-+ res = (CC_CIRCLES | CC_PIE | CC_CHORD | CC_ELLIPSES | CC_WIDE |
-+ CC_STYLED | CC_WIDESTYLED | CC_INTERIORS | CC_ROUNDRECT);
-+ break;
-+ case LINECAPS:
-+ res = (LC_POLYLINE | LC_MARKER | LC_POLYMARKER | LC_WIDE |
-+ LC_STYLED | LC_WIDESTYLED | LC_INTERIORS);
-+ break;
-+ case POLYGONALCAPS:
-+ res = (PC_POLYGON | PC_RECTANGLE | PC_WINDPOLYGON | PC_SCANLINE |
-+ PC_WIDE | PC_STYLED | PC_WIDESTYLED | PC_INTERIORS);
-+ break;
-+ case TEXTCAPS:
-+ res = text_caps;
-+ break;
-+ case CLIPCAPS:
-+ res = CP_REGION;
-+ break;
-+ case RASTERCAPS:
-+ res = (RC_BITBLT | RC_BANDING | RC_SCALING | RC_BITMAP64 | RC_DI_BITMAP |
-+ RC_DIBTODEV | RC_BIGFONT | RC_STRETCHBLT | RC_STRETCHDIB | RC_DEVBITS |
-+ (palette_size ? RC_PALETTE : 0));
-+ break;
-+ case SHADEBLENDCAPS:
-+ res = (SB_GRAD_RECT | SB_GRAD_TRI | SB_CONST_ALPHA | SB_PIXEL_ALPHA);
-+ case ASPECTX:
-+ case ASPECTY:
-+ res = 36;
-+ break;
-+ case ASPECTXY:
-+ res = 51;
-+ break;
-+ case LOGPIXELSX:
-+ res = log_pixels_x;
-+ break;
-+ case LOGPIXELSY:
-+ res = log_pixels_y;
-+ break;
-+ case CAPS1:
-+ FIXME("(%p): CAPS1 is unimplemented, will return 0\n", physDev->hdc );
-+ /* please see wingdi.h for the possible bit-flag values that need
-+ to be returned. */
-+ res = 0;
-+ break;
-+ case SIZEPALETTE:
-+ res = palette_size;
-+ break;
-+ case NUMRESERVED:
-+ case COLORRES:
-+ case PHYSICALWIDTH:
-+ case PHYSICALHEIGHT:
-+ case PHYSICALOFFSETX:
-+ case PHYSICALOFFSETY:
-+ case SCALINGFACTORX:
-+ case SCALINGFACTORY:
-+ case VREFRESH:
-+ case BLTALIGNMENT:
-+ res = 0;
-+ break;
-+ default:
-+ FIXME("(%p): unsupported capability %d, will return 0\n", physDev->hdc, cap );
-+ res = 0;
-+ break;
-+ }
-+ }
-+ else
-+ {
-+ /* DDB selected in, use X11 driver */
-+ res = _DIBDRV_GetDisplayDriver()->pGetDeviceCaps(physDev->X11PhysDev, cap);
-+ }
-+ return res;
-+}
-diff -Nru a/dlls/winedib.drv/dib.c b/dlls/winedib.drv/dib.c
---- a/dlls/winedib.drv/dib.c 1970-01-01 01:00:00.000000000 +0100
-+++ b/dlls/winedib.drv/dib.c 2010-08-04 16:08:44.790222017 +0200
-@@ -0,0 +1,460 @@
-+/*
-+ * DIBDRV device-independent bitmaps
-+ *
-+ * Copyright 2009 Massimo Del Fedele
-+ *
-+ * This library is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License as published by the Free Software Foundation; either
-+ * version 2.1 of the License, or (at your option) any later version.
-+ *
-+ * This library is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with this library; if not, write to the Free Software
-+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
-+ */
-+
-+#include "config.h"
-+#include "wine/port.h"
-+
-+#include "dibdrv.h"
-+
-+WINE_DEFAULT_DEBUG_CHANNEL(dibdrv);
-+
-+/* Default 1 BPP palette */
-+static DWORD pal1[] =
-+{
-+ 0x000000,
-+ 0xffffff
-+};
-+
-+/* Default 4 BPP palette */
-+static DWORD pal4[] =
-+{
-+ 0x000000,0x800000,0x008000,0x808000,
-+ 0x000080,0x800080,0x008080,0x808080,
-+ 0xc0c0c0,0xff0000,0x00ff00,0xffff00,
-+ 0x0000ff,0xff00ff,0x00ffff,0xffffff
-+};
-+
-+/* Default 8 BPP palette */
-+static DWORD pal8[] =
-+{
-+ 0x000000,0x800000,0x008000,0x808000,0x000080,0x800080,0x008080,0xc0c0c0,0xc0dcc0,0xa6caf0,0x000000,0x000033,0x000066,0x000099,0x0000cc,0x0000ff,
-+ 0x003300,0x003333,0x003366,0x003399,0x0033cc,0x0033ff,0x006600,0x006633,0x006666,0x006699,0x0066cc,0x0066ff,0x009900,0x009933,0x009966,0x009999,
-+ 0x0099cc,0x0099ff,0x00cc00,0x00cc33,0x00cc66,0x00cc99,0x00cccc,0x00ccff,0x00ff00,0x00ff33,0x00ff66,0x00ff99,0x00ffcc,0x00ffff,0x330000,0x330033,
-+ 0x330066,0x330099,0x3300cc,0x3300ff,0x333300,0x333333,0x333366,0x333399,0x3333cc,0x3333ff,0x336600,0x336633,0x336666,0x336699,0x3366cc,0x3366ff,
-+ 0x339900,0x339933,0x339966,0x339999,0x3399cc,0x3399ff,0x33cc00,0x33cc33,0x33cc66,0x33cc99,0x33cccc,0x33ccff,0x33ff00,0x33ff33,0x33ff66,0x33ff99,
-+ 0x33ffcc,0x33ffff,0x660000,0x660033,0x660066,0x660099,0x6600cc,0x6600ff,0x663300,0x663333,0x663366,0x663399,0x6633cc,0x6633ff,0x666600,0x666633,
-+ 0x666666,0x666699,0x6666cc,0x6666ff,0x669900,0x669933,0x669966,0x669999,0x6699cc,0x6699ff,0x66cc00,0x66cc33,0x66cc66,0x66cc99,0x66cccc,0x66ccff,
-+ 0x66ff00,0x66ff33,0x66ff66,0x66ff99,0x66ffcc,0x66ffff,0x990000,0x990033,0x990066,0x990099,0x9900cc,0x9900ff,0x993300,0x993333,0x993366,0x993399,
-+ 0x9933cc,0x9933ff,0x996600,0x996633,0x996666,0x996699,0x9966cc,0x9966ff,0x999900,0x999933,0x999966,0x999999,0x9999cc,0x9999ff,0x99cc00,0x99cc33,
-+ 0x99cc66,0x99cc99,0x99cccc,0x99ccff,0x99ff00,0x99ff33,0x99ff66,0x99ff99,0x99ffcc,0x99ffff,0xcc0000,0xcc0033,0xcc0066,0xcc0099,0xcc00cc,0xcc00ff,
-+ 0xcc3300,0xcc3333,0xcc3366,0xcc3399,0xcc33cc,0xcc33ff,0xcc6600,0xcc6633,0xcc6666,0xcc6699,0xcc66cc,0xcc66ff,0xcc9900,0xcc9933,0xcc9966,0xcc9999,
-+ 0xcc99cc,0xcc99ff,0xcccc00,0xcccc33,0xcccc66,0xcccc99,0xcccccc,0xccccff,0xccff00,0xccff33,0xccff66,0xccff99,0xccffcc,0xccffff,0xff0000,0xff0033,
-+ 0xff0066,0xff0099,0xff00cc,0xff00ff,0xff3300,0xff3333,0xff3366,0xff3399,0xff33cc,0xff33ff,0xff6600,0xff6633,0xff6666,0xff6699,0xff66cc,0xff66ff,
-+ 0xff9900,0xff9933,0xff9966,0xff9999,0xff99cc,0xff99ff,0xffcc00,0xffcc33,0xffcc66,0xffcc99,0xffcccc,0xffccff,0xffff00,0xffff33,0xffff66,0xffff99,
-+ 0xffffcc,0xffffff,0x050500,0x050501,0x050502,0x050503,0x050504,0x050505,0xe8e8e8,0xe9e9e9,0xeaeaea,0xebebeb,0xececec,0xededed,0xeeeeee,0xefefef,
-+ 0xf0f0f0,0xf1f1f1,0xf2f2f2,0xf3f3f3,0xf4f4f4,0xf5f5f5,0xfffbf0,0xa0a0a4,0x808080,0xf00000,0x00ff00,0xffff00,0x0000ff,0xff00ff,0x00ffff,0xffffff
-+};
-+
-+/***********************************************************************
-+ * DIBDRV_CreateDIBSection
-+ */
-+HBITMAP DIBDRV_CreateDIBSection( DIBDRVPHYSDEV *physDev, HBITMAP hbitmap,
-+ const BITMAPINFO *bmi, UINT usage )
-+{
-+ DIBDRVBITMAP *bmp;
-+ DIBSECTION ds;
-+
-+ MAYBE(TRACE("physDev:%p, hbitmap:%p, bmi:%p, usage:%d\n", physDev, hbitmap, bmi, usage));
-+
-+ /* createDIBSection is only DIB-related, so we just use the engine */
-+
-+ /* we need bitmap bits */
-+ if(GetObjectW(hbitmap, sizeof(DIBSECTION), &ds) != sizeof(DIBSECTION))
-+ {
-+ ERR("Bitmap is not a DIB Section\n");
-+ return NULL;
-+ }
-+
-+ /* creates the physical bitmap */
-+ if(!(bmp = _DIBDRVBITMAP_CreateFromBitmapinfo(bmi, ds.dsBm.bmBits)))
-+ {
-+ ERR("_DIBDRVBITMAP_CreateFromBitmapinfo failed\n");
-+ return NULL;
-+ }
-+
-+ /* TEMPORARY -- if usage is DIB_PAL_COLOR, sets the palette
-+ as ungrabbed, so next call to RealizeDefaultPalette will
-+ do it */
-+ if(usage == DIB_PAL_COLORS)
-+ {
-+ FIXME("Do color table grabbing here instead of RealizeDefaultPalette\n");
-+ bmp->colorTableGrabbed = FALSE;
-+ }
-+
-+ /* adds it to the internal list */
-+ if(!_BITMAPLIST_Add(hbitmap, bmp))
-+ {
-+ ERR("Couldn't add physical bitmap to list\n");
-+ _DIBDRVBITMAP_Free(bmp);
-+ return NULL;
-+ }
-+ return hbitmap;
-+}
-+
-+/***********************************************************************
-+ * DIBDRV_GetDIBits
-+*/
-+INT DIBDRV_GetDIBits( DIBDRVPHYSDEV *physDev, HBITMAP hbitmap, UINT startscan,
-+ UINT lines, LPVOID bits, BITMAPINFO *info, UINT coloruse )
-+{
-+ INT res;
-+ DIBSECTION ds;
-+ DIBDRVBITMAP *sBmp, *dBmp;
-+ DWORD *buf;
-+ int iLine;
-+ int size;
-+ int requestedBpp;
-+ RGBQUAD *colorTable = NULL;
-+
-+ MAYBE(TRACE("physDev:%p, hbitmap:%p, startscan:%d, lines:%d, bits:%p, info:%p, coloruse:%d\n",
-+ physDev, hbitmap, startscan, lines, bits, info, coloruse));
-+ if(GetObjectW(hbitmap, sizeof(DIBSECTION), &ds) == sizeof(DIBSECTION))
-+ {
-+ /* GetDIBits reads bits from a DIB, so we should use the engine driver */
-+
-+ /* for the moment, we don't support startscan != 0 */
-+ if(startscan != 0)
-+ {
-+ FIXME("startscan != 0 still not supported\n");
-+ return 0;
-+ }
-+
-+ /* sanity check */
-+ size = info->bmiHeader.biSize;
-+ if(size != sizeof(BITMAPINFOHEADER) && size != sizeof(BITMAPCOREHEADER))
-+ {
-+ ERR("Unknown header size %d\n", size);
-+ return 0;
-+ }
-+
-+ /* if we wants just the BITMAPINFOHEADER data, do it */
-+ if(bits == NULL && info->bmiHeader.biBitCount == 0)
-+ {
-+ memcpy(&info->bmiHeader, &ds.dsBmih, size);
-+ return abs(ds.dsBmih.biHeight);
-+ }
-+
-+ /* source and dest sizes must match */
-+ if(info->bmiHeader.biWidth != ds.dsBmih.biWidth || abs(info->bmiHeader.biHeight) != abs(ds.dsBmih.biHeight))
-+ {
-+ WARN("Source and dest DIBs sizes don't match\n");
-+ return 0;
-+ }
-+
-+ /* get requested BPP and check it */
-+ requestedBpp = info->bmiHeader.biBitCount;
-+ if(requestedBpp != 1 && requestedBpp != 4 &&
-+ requestedBpp != 8 && requestedBpp != 16 &&
-+ requestedBpp != 24 && requestedBpp != 32)
-+ {
-+ ERR("Unknown BitCount %d\n", requestedBpp);
-+ return 0;
-+ }
-+
-+ /* now we must get (if needed) the color table */
-+ if(!(sBmp = _BITMAPLIST_Get(hbitmap)))
-+ {
-+ ERR("Couldn't retrieve source DIB data\n");
-+ return 0;
-+ }
-+ if(requestedBpp <= 8)
-+ {
-+ colorTable = (RGBQUAD *)((BYTE *)info + size);
-+
-+ /* if same color format, just grab the color table */
-+ if(requestedBpp == sBmp->bitCount)
-+ memcpy(colorTable, sBmp->colorTable, sBmp->colorTableSize);
-+ /* otherwise synthesize a new color table */
-+ else
-+ {
-+ switch(requestedBpp)
-+ {
-+ case 1:
-+ memcpy(colorTable, pal1, 2*sizeof(DWORD));
-+ break;
-+
-+ case 4:
-+ memcpy(colorTable, pal4, 16*sizeof(DWORD));
-+ break;
-+
-+ case 8:
-+ memcpy(colorTable, pal8, 256*sizeof(DWORD));
-+ break;
-+
-+ default:
-+ ERR("Unknown requested bith depth %d\n", requestedBpp);
-+ return 0;
-+ }
-+ }
-+ }
-+
-+ /* If we wanted just BITMAPINFO data, we're done */
-+ if(!bits)
-+ return abs(ds.dsBmih.biHeight);
-+
-+ /* now it's time to transfer image bits; for this we should create
-+ a DIBDRVBITMAP from dest BITMAPINFO data */
-+ /* FIXME -- HERE is the place to add support for 'startscan' stuffs */
-+ if(!(dBmp = _DIBDRVBITMAP_CreateFromBMIH((BITMAPINFOHEADER *)info, ds.dsBitfields, colorTable, bits)))
-+ {
-+ ERR("Couldn't create dest DIB\n");
-+ return 0;
-+ }
-+
-+ /* now we can do the bit conversion */
-+ buf = HeapAlloc(GetProcessHeap(), 0, ds.dsBmih.biWidth * sizeof(RGBQUAD));
-+ for(iLine = 0; iLine < lines; iLine++)
-+ {
-+ sBmp->funcs->GetLine(sBmp, iLine, 0, ds.dsBmih.biWidth, buf);
-+ dBmp->funcs->PutLine(dBmp, iLine, 0, ds.dsBmih.biWidth, buf);
-+ }
-+ HeapFree(GetProcessHeap(), 0, buf);
-+ _DIBDRVBITMAP_Free(dBmp);
-+ return lines;
-+ }
-+ else
-+ /* GetDIBits reads bits from a DDB, use X11 driver */
-+ res = _DIBDRV_GetDisplayDriver()->pGetDIBits(physDev->X11PhysDev, hbitmap, startscan, lines, bits, info, coloruse);
-+
-+ return res;
-+}
-+
-+/***********************************************************************
-+ * DIBDRV_SetDIBColorTable
-+ */
-+UINT DIBDRV_SetDIBColorTable( DIBDRVPHYSDEV *physDev, UINT start, UINT count,
-+ const RGBQUAD *colors )
-+{
-+ DIBDRVBITMAP *dib = physDev->physBitmap;
-+ HBRUSH thisBrush;
-+ HPEN thisPen;
-+
-+ MAYBE(TRACE("physDev:%p, start:%d, count:%d, colors:%p\n", physDev, start, count, colors));
-+ /* SetDIBColorTable operates on a DIB, so we use the engine */
-+
-+ /* if bpp > 8, some error occurred... */
-+ if(dib->bitCount > 8)
-+ {
-+ ERR("Called for BPP > 8\n");
-+ return 0;
-+ }
-+
-+ /* if dib hasn't a color table, or has a small one, we must before
-+ create/extend it */
-+ if(!dib->colorTable)
-+ {
-+ dib->colorTableSize = (1 << dib->bitCount);
-+ dib->colorTable = HeapAlloc(GetProcessHeap(), 0, sizeof(RGBQUAD) * dib->colorTableSize);
-+ }
-+ else if(dib->colorTableSize < (1 << dib->bitCount))
-+ {
-+ int newSize = (1 << dib->bitCount);
-+ RGBQUAD *newTable = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(RGBQUAD) * newSize);
-+ memcpy(newTable, dib->colorTable, sizeof(RGBQUAD) * dib->colorTableSize);
-+ HeapFree(GetProcessHeap(), 0, dib->colorTable);
-+ dib->colorTable = newTable;
-+ dib->colorTableSize = newSize;
-+ }
-+
-+ /* sanity check */
-+ if(start + count > dib->colorTableSize)
-+ {
-+ ERR("Out of range setting color table, size is %d, requested is %d\n", dib->colorTableSize, start+count);
-+ return 0;
-+ }
-+ memcpy(dib->colorTable + start, colors, sizeof(RGBQUAD) * count);
-+ dib->colorTableGrabbed = TRUE;
-+
-+ /* for monochrome bitmaps, we need the 'lightest' color */
-+ _DIBDRVBITMAP_GetLightestColorIndex(dib);
-+
-+ /* we should re-select both current pen and brush
-+ in order to update colormap-dependent colors */
-+ thisBrush = SelectObject(physDev->hdc, GetStockObject(NULL_BRUSH));
-+ thisPen = SelectObject(physDev->hdc, GetStockObject(NULL_PEN));
-+ SelectObject(physDev->hdc, thisBrush);
-+ SelectObject(physDev->hdc, thisPen);
-+
-+ return TRUE;
-+}
-+
-+/***********************************************************************
-+ * DIBDRV_SetDIBits
-+ */
-+INT DIBDRV_SetDIBits( DIBDRVPHYSDEV *physDev, HBITMAP hbitmap, UINT startscan,
-+ UINT lines, LPCVOID bits, const BITMAPINFO *info, UINT coloruse )
-+{
-+ INT res;
-+ DIBSECTION ds;
-+ DIBDRVBITMAP *sBmp, *dBmp;
-+ DWORD *buf;
-+ int iLine;
-+
-+ MAYBE(TRACE("physDev:%p, hbitmap:%p, startscan:%d, lines:%d, bits:%p, bmi:%p, coloruse:%d\n",
-+ physDev, hbitmap, startscan, lines, bits, info, coloruse));
-+
-+ /* quick fix for wine-1.2-rc1 */
-+ if((int)lines < 0)
-+ lines = -lines;
-+
-+ if(GetObjectW(hbitmap, sizeof(DIBSECTION), &ds) == sizeof(DIBSECTION))
-+ {
-+ /* SetDIBits writes bits to a DIB, so we should use the engine driver */
-+
-+ /* for the moment, we don't support startscan != 0 */
-+ if(startscan != 0)
-+ {
-+ FIXME("startscan != 0 still not supported\n");
-+ return 0;
-+ }
-+
-+ /* Creates a DIBDRVBITMAP from source dib */
-+ if(!(sBmp = _DIBDRVBITMAP_CreateFromBitmapinfo(info, (LPVOID)bits)))
-+ {
-+ ERR("_DIBDRVBITMAP_CreateFromBitmapinfo failed\n");
-+ return 0;
-+ }
-+
-+ /* get destination physical bitmap */
-+ if(!(dBmp = _BITMAPLIST_Get(hbitmap)))
-+ {
-+ ERR("Couldn't retrieve dest physical bitmap\n");
-+ _DIBDRVBITMAP_Free(sBmp);
-+ return 0;
-+ }
-+
-+ /* now we can do the bit conversion */
-+ buf = HeapAlloc(GetProcessHeap(), 0, ds.dsBmih.biWidth * sizeof(RGBQUAD));
-+ for(iLine = 0; iLine < lines; iLine++)
-+ {
-+ sBmp->funcs->GetLine(sBmp, iLine, 0, ds.dsBmih.biWidth, buf);
-+ dBmp->funcs->PutLine(dBmp, iLine, 0, ds.dsBmih.biWidth, buf);
-+ }
-+ HeapFree(GetProcessHeap(), 0, buf);
-+ _DIBDRVBITMAP_Free(sBmp);
-+ return lines;
-+ }
-+ else
-+ {
-+ /* SetDIBits writes bits to a DDB, so we should use the X11 driver */
-+ res = _DIBDRV_GetDisplayDriver()->pSetDIBits(physDev->X11PhysDev, hbitmap, startscan, lines, bits, info, coloruse);
-+ }
-+ return res;
-+}
-+
-+/*************************************************************************
-+ * DIBDRV_SetDIBitsToDevice
-+ */
-+INT DIBDRV_SetDIBitsToDevice( DIBDRVPHYSDEV *physDev, INT xDst, INT yDst, DWORD cx,
-+ DWORD cy, INT xSrc, INT ySrc,
-+ UINT startscan, UINT lines, LPCVOID bits,
-+ const BITMAPINFO *info, UINT coloruse )
-+{
-+ int dibHeight, dibWidth;
-+ DIBDRVBITMAP *sBmp, *dBmp;
-+ int iLine;
-+ void *buf;
-+
-+ MAYBE(TRACE("physDev:%p, xDst:%d, yDst:%d, cx:%x, cy:%x, xSrc:%d, ySrc:%d, startscan:%d, lines:%d, bits:%p, info:%p, coloruse:%d\n",
-+ physDev, xDst, yDst, cx, cy, xSrc, ySrc, startscan, lines, bits, info, coloruse));
-+
-+ if(physDev->hasDIB)
-+ {
-+ /* DIB section selected in, use DIB Engine */
-+
-+ /* inverts y on source -- FIXME: check if right with some tests, it seems so */
-+// ySrc = abs(info->bmiHeader.biHeight) - ySrc - cy;
-+
-+ dibHeight = info->bmiHeader.biHeight;
-+ dibWidth = info->bmiHeader.biWidth;
-+
-+ /* sanity check and source clipping on physical sizes */
-+ if(startscan >= abs(dibHeight))
-+ {
-+ ERR("startscan out of range\n");
-+ return 0;
-+ }
-+ if(startscan + lines > abs(dibHeight))
-+ lines = abs(dibHeight) - startscan;
-+
-+ /* adjust height because of startscan */
-+ dibHeight += (dibHeight > 0 ? -startscan : startscan);
-+
-+ if(xSrc >= dibWidth)
-+ {
-+ ERR("xSrc out of range\n");
-+ return 0;
-+ }
-+ if(xSrc + cx > dibWidth)
-+ cx = dibWidth - xSrc;
-+ if(ySrc > abs(dibHeight))
-+ {
-+ ERR("ySrc out of range\n");
-+ return 0;
-+ }
-+ if(ySrc + cy > abs(dibHeight))
-+ cy = abs(dibHeight) - ySrc;
-+
-+ ySrc -= startscan;
-+ cy -= startscan;
-+ if(cy <= 0)
-+ {
-+ ERR("Null or negative vertical size\n");
-+ return 0;
-+ }
-+ if(ySrc < 0)
-+ {
-+ yDst += ySrc;
-+ cy += ySrc;
-+ ySrc = 0;
-+ }
-+ if(cy <= 0)
-+ {
-+ ERR("Null or negative vertical size\n");
-+ return 0;
-+ }
-+
-+ /* Creates a DIBDRVBITMAP from source dib */
-+ if(!(sBmp = _DIBDRVBITMAP_CreateFromBitmapinfo(info, (LPVOID)bits)))
-+ {
-+ ERR("_DIBDRVBITMAP_CreateFromBitmapinfo failed\n");
-+ return 0;
-+ }
-+
-+ /* get destination physical bitmap */
-+ dBmp = physDev->physBitmap;
-+
-+ /* now we can do the bit conversion */
-+ buf = HeapAlloc(GetProcessHeap(), 0, cx * sizeof(RGBQUAD));
-+ for(iLine = 0; iLine < cy; iLine++)
-+ {
-+ sBmp->funcs->GetLine(sBmp, ySrc++, xSrc, cx, buf);
-+ dBmp->funcs->PutLine(dBmp, yDst++, xDst, cx, buf);
-+ }
-+ HeapFree(GetProcessHeap(), 0, buf);
-+ _DIBDRVBITMAP_Free(sBmp);
-+ return cy;
-+ }
-+ else
-+ {
-+ return _DIBDRV_GetDisplayDriver()->pSetDIBitsToDevice(physDev->X11PhysDev, xDst, yDst, cx, cy, xSrc, ySrc,
-+ startscan, lines, bits, info, coloruse);
-+ }
-+}
-diff -Nru a/dlls/winedib.drv/dibdrvbitmap.c b/dlls/winedib.drv/dibdrvbitmap.c
---- a/dlls/winedib.drv/dibdrvbitmap.c 1970-01-01 01:00:00.000000000 +0100
-+++ b/dlls/winedib.drv/dibdrvbitmap.c 2010-08-04 16:08:44.766222017 +0200
-@@ -0,0 +1,792 @@
-+/*
-+ * DIB Engine DIBDRVBITMAP handling
-+ *
-+ * Copyright 2009 Massimo Del Fedele
-+ *
-+ * This library is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License as published by the Free Software Foundation; either
-+ * version 2.1 of the License, or (at your option) any later version.
-+ *
-+ * This library is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with this library; if not, write to the Free Software
-+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
-+ */
-+
-+#include "config.h"
-+#include "wine/port.h"
-+
-+#include "dibdrv.h"
-+
-+WINE_DEFAULT_DEBUG_CHANNEL(dibdrv);
-+
-+/* gets human-readable dib format name */
-+const char *_DIBDRVBITMAP_GetFormatName(DIBDRVBITMAP const *bmp)
-+{
-+ if(!bmp)
-+ {
-+ ERR("Null bitmap\n");
-+ return "NULL BITMAP DETECTED";
-+ }
-+ switch(bmp->format)
-+ {
-+ case DIBFMT_DIB1:
-+ return "DIBFMT_DIB1";
-+ case DIBFMT_DIB4:
-+ return "DIBFMT_DIB4";
-+ case DIBFMT_DIB4_RLE:
-+ return "DIBFMT_DIB4_RLE";
-+ case DIBFMT_DIB8:
-+ return "DIBFMT_DIB8";
-+ case DIBFMT_DIB8_RLE:
-+ return "DIBFMT_DIB8_RLE";
-+ case DIBFMT_DIB16_RGB:
-+ return "DIBFMT_DIB_RGB";
-+ case DIBFMT_DIB16_BITFIELDS:
-+ return "DIBFMT_DIB16_BITFIELDS";
-+ case DIBFMT_DIB24:
-+ return "DIBFMT_DIB24";
-+ case DIBFMT_DIB32_RGB:
-+ return "DIBFMT_DIB32_RGB";
-+ case DIBFMT_DIB32_BITFIELDS:
-+ return "DIBFMT_DIB32_BITFIELDS";
-+ case DIBFMT_UNKNOWN:
-+ default:
-+ return "DIBFMT_UNKNOWN";
-+ }
-+}
-+
-+/* calculates shift and length given a bit mask */
-+static void CalcShiftAndLen(DWORD mask, int *shift, int *len)
-+{
-+ int s, l;
-+
-+ /* FIXME----*/
-+ if(mask == 0)
-+ {
-+ FIXME("color mask == 0 -- problem on init_dib\n");
-+ *shift = 0;
-+ *len = 0;
-+ return;
-+ }
-+
-+ /* calculates bit shift
-+ (number of 0's on right of bit field */
-+ s = 0;
-+ while ((mask & 1) == 0)
-+ {
-+ mask >>= 1;
-+ s++;
-+ }
-+
-+ /* calculates bitfield length
-+ (number of 1's in bit field */
-+ l = 0;
-+ while ((mask & 1) == 1)
-+ {
-+ mask >>= 1;
-+ l++;
-+ }
-+ *shift = s;
-+ *len = l;
-+}
-+
-+/* initializes bit fields from bit masks */
-+static void InitBitFields(DIBDRVBITMAP *dib, const DWORD *bit_fields)
-+{
-+ dib->redMask = bit_fields[0];
-+ dib->greenMask = bit_fields[1];
-+ dib->blueMask = bit_fields[2];
-+ CalcShiftAndLen(dib->redMask, &dib->redShift, &dib->redLen);
-+ CalcShiftAndLen(dib->greenMask, &dib->greenShift, &dib->greenLen);
-+ CalcShiftAndLen(dib->blueMask, &dib->blueShift, &dib->blueLen);
-+}
-+
-+/* sets/gets bits of a DIBDRVBITMAP taking in account if it's a top down
-+ or a bottom-up DIB */
-+void _DIBDRVBITMAP_Set_Bits(DIBDRVBITMAP *dib, void *bits, BOOL owns)
-+{
-+ /* checks whether dib is top-down or bottom-up one */
-+ if(dib->stride > 0)
-+ {
-+ /* top-down dib */
-+ dib->bits = bits;
-+ }
-+ else
-+ {
-+ /* bottom-up dib */
-+ /* data->bits always points to the top-left corner and the stride is -ve */
-+ dib->bits = (BYTE*)bits - (dib->height - 1) * dib->stride;
-+ }
-+ dib->ownsBits = owns;
-+}
-+
-+void *_DIBDRVBITMAP_Get_Bits(DIBDRVBITMAP * dib)
-+{
-+ /* checks whether dib is top-down or bottom-up one */
-+ if(dib->stride > 0)
-+ {
-+ /* top-down dib */
-+ return dib->bits;
-+ }
-+ else
-+ {
-+ /* bottom-up dib */
-+ /* data->bits always points to the top-left corner and the stride is -ve */
-+ return (BYTE*)dib->bits + (dib->height - 1) * dib->stride;
-+ }
-+}
-+
-+/* calculates and sets the lightest color for monochrome bitmaps */
-+int _DIBDRVBITMAP_GetLightestColorIndex(DIBDRVBITMAP *dib)
-+{
-+ DWORD foreRed, foreGreen, foreBlue;
-+ DWORD backRed, backGreen, backBlue;
-+ RGBQUAD *fore, *back;
-+
-+ /* zero for non-monochrome bitmaps */
-+ if(dib->bitCount != 1)
-+ return 0;
-+ /* just in case color table hasn't been grabbed yet */
-+ if(!dib->colorTableGrabbed)
-+ return 1;
-+ back = dib->colorTable;
-+ fore = back + 1;
-+ foreRed = fore->rgbRed; foreGreen = fore->rgbGreen; foreBlue = fore->rgbBlue;
-+ backRed = back->rgbRed; backGreen = back->rgbGreen; backBlue = back->rgbBlue;
-+ if(foreRed*foreRed + foreGreen*foreGreen + foreBlue*foreBlue >
-+ backRed*backRed + backGreen*backGreen + backBlue*backBlue)
-+ {
-+ dib->lightColor = 1;
-+ return 1;
-+ }
-+ dib->lightColor = 0;
-+ return 0;
-+}
-+
-+/* initializes dib from a bitmap :
-+ dib dib being initialized
-+ bi source BITMAPINFOHEADER with required DIB format info
-+ bit_fields color masks
-+ colorTable color table, if any
-+ bits pointer to image data array
-+ NOTE : DIBDRVBITMAP doesn't owns bits, but do own color table
-+*/
-+BOOL _DIBDRVBITMAP_InitFromBMIH(DIBDRVBITMAP *dib, const BITMAPINFOHEADER *bi, const DWORD *bit_fields,
-+ const RGBQUAD *colorTable, void *bits)
-+{
-+ MAYBE(TRACE("dib=%p, bi=%p, bit_fields=%p, colorTable=%p, bits=%p\n", dib, bi, bit_fields, colorTable, bits));
-+
-+ /* initializes DIB dimensions and color depth */
-+ dib->bitCount = bi->biBitCount;
-+ dib->width = bi->biWidth;
-+ dib->height = bi->biHeight;
-+ dib->stride = ((dib->width * dib->bitCount + 31) >> 3) & ~3;
-+
-+ /* initializes image data pointer */
-+ dib->bits = bits;
-+ dib->ownsBits = FALSE;
-+
-+ /* initializes color table */
-+ dib->colorTableSize = 0;
-+ dib->colorTable = NULL;
-+ dib->colorTableGrabbed = FALSE;
-+
-+ /* checks whether dib is top-down or bottom-up one */
-+ if(dib->height < 0)
-+ {
-+ /* top-down dib */
-+ dib->height = -dib->height;
-+ dib->topdown = TRUE;
-+ }
-+ else
-+ {
-+ /* bottom-up dib */
-+ /* data->bits always points to the top-left corner and the stride is -ve */
-+ dib->bits = (BYTE*)dib->bits + (dib->height - 1) * dib->stride;
-+ dib->stride = -dib->stride;
-+ dib->topdown = FALSE;
-+ }
-+
-+ /* gets and stores bitmap format */
-+ switch(dib->bitCount)
-+ {
-+ case 24:
-+ dib->format = DIBFMT_DIB24;
-+ dib->funcs = &DIBDRV_funcs_DIB24;
-+ break;
-+
-+ case 32:
-+
-+ if(bi->biCompression == BI_RGB)
-+ {
-+ dib->format = DIBFMT_DIB32_RGB;
-+ dib->funcs = &DIBDRV_funcs_DIB32_RGB;
-+ }
-+ else
-+ {
-+ InitBitFields(dib, bit_fields);
-+ dib->format = DIBFMT_DIB32_BITFIELDS;
-+ dib->funcs = &DIBDRV_funcs_DIB32_BITFIELDS;
-+ }
-+ break;
-+
-+ case 16:
-+ if(bi->biCompression == BI_RGB)
-+ {
-+ dib->format = DIBFMT_DIB16_RGB;
-+ dib->funcs = &DIBDRV_funcs_DIB16_RGB;
-+ }
-+ else
-+ {
-+ InitBitFields(dib, bit_fields);
-+ dib->format = DIBFMT_DIB16_BITFIELDS;
-+ dib->funcs = &DIBDRV_funcs_DIB16_BITFIELDS;
-+ }
-+ break;
-+
-+ case 8:
-+ dib->format = DIBFMT_DIB8;
-+ dib->funcs = &DIBDRV_funcs_DIB8;
-+ dib->colorTableSize = 256;
-+ if(bi->biClrUsed) dib->colorTableSize = bi->biClrUsed;
-+ break;
-+
-+ case 4:
-+ dib->format = DIBFMT_DIB4;
-+ dib->funcs = &DIBDRV_funcs_DIB4;
-+ dib->colorTableSize = 16;
-+ if(bi->biClrUsed) dib->colorTableSize = bi->biClrUsed;
-+ break;
-+
-+ case 1:
-+ dib->format = DIBFMT_DIB1;
-+ dib->funcs = &DIBDRV_funcs_DIB1;
-+ dib->colorTableSize = 2;
-+ if(bi->biClrUsed) dib->colorTableSize = bi->biClrUsed;
-+ break;
-+
-+ default:
-+ dib->format = DIBFMT_UNKNOWN;
-+ dib->funcs = NULL;
-+ FIXME("bpp %d not supported\n", dib->bitCount);
-+ return FALSE;
-+ }
-+ MAYBE(TRACE("DIB FORMAT : %s\n", _DIBDRVBITMAP_GetFormatName(dib)));
-+
-+ /* allocates color table and copy it from source, *if* source is
-+ not null */
-+ if(dib->colorTableSize && colorTable)
-+ {
-+ if(!(dib->colorTable = HeapAlloc(GetProcessHeap(), 0,
-+ dib->colorTableSize * sizeof(dib->colorTable[0]))
-+ ))
-+ {
-+ ERR("HeapAlloc failed\n");
-+ return FALSE;
-+ }
-+ memcpy(dib->colorTable, colorTable,
-+ dib->colorTableSize * sizeof(dib->colorTable[0]));
-+ dib->colorTableGrabbed = TRUE;
-+
-+ /* for monochrome bitmaps, we need the 'lightest' color */
-+ _DIBDRVBITMAP_GetLightestColorIndex(dib);
-+ }
-+ else if(!dib->colorTableSize)
-+ /* no color table on more than 8 bits/pixel */
-+ dib->colorTableGrabbed = TRUE;
-+
-+ MAYBE(TRACE("END\n"));
-+ return TRUE;
-+}
-+
-+DIBDRVBITMAP *_DIBDRVBITMAP_CreateFromBMIH(const BITMAPINFOHEADER *bi, const DWORD *bit_fields,
-+ const RGBQUAD *colorTable, void *bits)
-+{
-+ DIBDRVBITMAP *bmp = _DIBDRVBITMAP_New();
-+ if(bmp && !_DIBDRVBITMAP_InitFromBMIH(bmp, bi, bit_fields, colorTable, bits))
-+ {
-+ _DIBDRVBITMAP_Free(bmp);
-+ bmp = NULL;
-+ }
-+ return bmp;
-+}
-+
-+/* gets a BITMAPINFOHEADER from a soure BITMAPINFO- or BITMAPCORE-header */
-+static BITMAPINFOHEADER *GetBitmapInfoHeader(BITMAPINFO const *bmi)
-+{
-+ BITMAPINFOHEADER *res = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(BITMAPINFOHEADER));
-+
-+ int size = bmi->bmiHeader.biSize;
-+ if(size >= sizeof(BITMAPINFOHEADER))
-+ {
-+ memcpy(res, bmi, sizeof(BITMAPINFOHEADER));
-+ res->biSize = sizeof(BITMAPINFOHEADER);
-+ }
-+ else if(size == sizeof(BITMAPCOREHEADER))
-+ {
-+ BITMAPCOREHEADER *core = (BITMAPCOREHEADER *)bmi;
-+ res->biSize = sizeof(BITMAPINFOHEADER);
-+ res->biWidth = core->bcWidth;
-+ res->biHeight = core->bcHeight;
-+ res->biPlanes = core->bcPlanes;
-+ res->biBitCount = core->bcBitCount;
-+ }
-+ else
-+ {
-+ HeapFree(GetProcessHeap(), 0, res);
-+ ERR("Bad/unknown header size %d\n", size);
-+ res = NULL;
-+ }
-+ return res;
-+}
-+
-+BOOL _DIBDRVBITMAP_InitFromBitmapinfo(DIBDRVBITMAP *dib, const BITMAPINFO *bmi, void *bits)
-+{
-+ static const DWORD bit_fields_DIB32_RGB[3] = {0xff0000, 0x00ff00, 0x0000ff};
-+ static const DWORD bit_fields_DIB16_RGB[3] = {0x7c00, 0x03e0, 0x001f};
-+ const DWORD *masks = NULL;
-+ RGBQUAD *colorTable = NULL;
-+ BITMAPINFOHEADER *bi;
-+ BYTE *ptr;
-+ int num_colors;
-+ BOOL res;
-+
-+ /* gets info header */
-+ if(!(bi = GetBitmapInfoHeader(bmi)))
-+ return FALSE;
-+
-+ ptr = (BYTE*)bmi + bmi->bmiHeader.biSize;
-+ num_colors = bi->biClrUsed;
-+
-+ MAYBE(TRACE("dib=%p, bmi=%p\n", dib, bmi));
-+
-+ if(bi->biCompression == BI_BITFIELDS)
-+ {
-+ masks = (DWORD *)ptr;
-+ ptr += 3 * sizeof(DWORD);
-+ }
-+ else if(bi->biBitCount == 32)
-+ masks = bit_fields_DIB32_RGB;
-+ else if(bi->biBitCount == 16)
-+ masks = bit_fields_DIB16_RGB;
-+
-+ if(!num_colors && bi->biBitCount <= 8)
-+ num_colors = 1 << bi->biBitCount;
-+ if(num_colors)
-+ colorTable = (RGBQUAD*)ptr;
-+ ptr += num_colors * sizeof(*colorTable);
-+
-+ res = _DIBDRVBITMAP_InitFromBMIH(dib, bi, masks, colorTable, bits ? bits : ptr);
-+ HeapFree(GetProcessHeap(), 0, bi);
-+ MAYBE(TRACE("END\n"));
-+ return res;
-+}
-+
-+DIBDRVBITMAP *_DIBDRVBITMAP_CreateFromBitmapinfo(const BITMAPINFO *bmi, void *bits)
-+{
-+ DIBDRVBITMAP *bmp = _DIBDRVBITMAP_New();
-+ if(bmp && !_DIBDRVBITMAP_InitFromBitmapinfo(bmp, bmi, bits))
-+ {
-+ _DIBDRVBITMAP_Free(bmp);
-+ bmp = NULL;
-+ }
-+ return bmp;
-+}
-+
-+/* initializes a DIBRDVBITMAP copying it from a source one
-+ Parameters :
-+ dib destination DIBDRVBITMAP
-+ src source DIBDRVBITMAP
-+ copy TRUE->copy source pixel array FALSE->link to source pixel array
-+*/
-+BOOL _DIBDRVBITMAP_InitFromDibdrvbitmap(DIBDRVBITMAP *dib, const DIBDRVBITMAP *src, BOOL copy)
-+{
-+ MAYBE(TRACE("dib=%p, src=%p, copy=%d\n", dib, src, copy));
-+
-+ dib->format = src->format;
-+ dib->width = src->width;
-+ dib->height = src->height;
-+ dib->stride = src->stride;
-+ dib->bitCount = src->bitCount;
-+
-+ dib->redMask = src->redMask;
-+ dib->greenMask = src->greenMask;
-+ dib->blueMask = src->blueMask;
-+ dib->redShift = src->redShift;
-+ dib->greenShift = src->greenShift;
-+ dib->blueShift = src->blueShift;
-+ dib->redLen = src->redLen;
-+ dib->greenLen = src->greenLen;
-+ dib->blueLen = src->blueLen;
-+
-+ dib->funcs = src->funcs;
-+
-+ dib->lightColor = src->lightColor;
-+
-+ dib->topdown = src->topdown;
-+
-+ if(copy)
-+ {
-+ int size = dib->height*abs(dib->stride);
-+ if(!(dib->bits = HeapAlloc(GetProcessHeap(), 0, size)))
-+ {
-+ ERR("Failed to allocate bits buffer\n");
-+ return FALSE;
-+ }
-+ dib->ownsBits = TRUE;
-+
-+ /* check for bottom-up DIB */
-+ if(dib->stride < 0)
-+ {
-+ /* copy the bitmap array */
-+ memcpy(dib->bits, (BYTE *)src->bits + (src->height - 1) * src->stride, size);
-+
-+ dib->bits = (BYTE *)dib->bits - (dib->height-1) * dib->stride;
-+ }
-+ else
-+ {
-+ /* copy the bitmap array */
-+ memcpy(dib->bits, src->bits, size);
-+ }
-+ }
-+ else
-+ {
-+ dib->bits = src->bits;
-+ dib->ownsBits = FALSE;
-+ }
-+
-+ if(src->colorTable)
-+ {
-+ dib->colorTable = HeapAlloc(GetProcessHeap(), 0, src->colorTableSize * sizeof(src->colorTable[0]));
-+ memcpy(dib->colorTable, src->colorTable, src->colorTableSize * sizeof(src->colorTable[0]));
-+ }
-+ else
-+ dib->colorTable = NULL;
-+ dib->colorTableSize = src->colorTableSize;
-+ dib->colorTableGrabbed = TRUE;
-+ MAYBE(TRACE("END\n"));
-+ return TRUE;
-+}
-+
-+
-+/* creates a DIBRDVBITMAP copying format info from a source one
-+ Parameters :
-+ dib destination DIBDRVBITMAP
-+ src source DIBDRVBITMAP
-+ widht, height sizes of newly created bitmap
-+*/
-+BOOL _DIBDRVBITMAP_CreateFromDibdrvbitmap(DIBDRVBITMAP *dib, const DIBDRVBITMAP *src, int width, int height)
-+{
-+ MAYBE(TRACE("dib=%p, src=%p, width=%d, height=%d\n", dib, src, width, height));
-+
-+ /* grab color and format info from source DIB */
-+ if(!_DIBDRVBITMAP_InitFromDibdrvbitmap(dib, src, FALSE))
-+ {
-+ ERR("Failed grabbing source dib format\n");
-+ return FALSE;
-+ }
-+
-+ /* sets up new DIB dimensions */
-+ dib->width = width;
-+ dib->height = height;
-+
-+ /* calculates new stride basing of new width */
-+ dib->stride = ((width * dib->bitCount +31) &~31) / 8;
-+ if(src->stride < 0)
-+ dib->stride = -dib->stride;
-+ dib->topdown = src->topdown;
-+
-+ /* allocates bits for newly created DIB */
-+ if(!(dib->bits = HeapAlloc(GetProcessHeap(), 0, height*abs(dib->stride))))
-+ {
-+ ERR("Failed to allocate bits buffer\n");
-+ return FALSE;
-+ }
-+ /* check for bottom-up DIB */
-+ if(dib->stride < 0)
-+ dib->bits = (BYTE *)dib->bits - (dib->height-1) * dib->stride;
-+ dib->ownsBits = TRUE;
-+
-+ MAYBE(TRACE("END\n"));
-+ return TRUE;
-+ }
-+
-+/* Clears a DIBDRVBITMAP structure data
-+ WARNING : doesn't free anything */
-+void _DIBDRVBITMAP_Clear(DIBDRVBITMAP *bmp)
-+{
-+ MAYBE(TRACE("bmp=%p\n", bmp));
-+
-+ if(!bmp)
-+ return;
-+ bmp->bits = NULL;
-+ bmp->ownsBits = FALSE;
-+ bmp->colorTable = NULL;
-+ bmp->colorTableSize = 0;
-+ bmp->colorTableGrabbed = FALSE;
-+
-+ MAYBE(TRACE("END\n"));
-+}
-+
-+/* allocates a new DIBDTVBITMAP */
-+DIBDRVBITMAP *_DIBDRVBITMAP_New(void)
-+{
-+ DIBDRVBITMAP *bmp = HeapAlloc(GetProcessHeap(), 0, sizeof(DIBDRVBITMAP));
-+ if(!bmp)
-+ return NULL;
-+ _DIBDRVBITMAP_Clear(bmp);
-+ return bmp;
-+}
-+
-+/* Frees a DIBDRVBITMAP structure data */
-+void _DIBDRVBITMAP_Free(DIBDRVBITMAP *bmp)
-+{
-+ MAYBE(TRACE("bmp=%p\n", bmp));
-+
-+ if(!bmp)
-+ return;
-+ /* frees bits, if needed */
-+ if(bmp->bits && bmp->ownsBits)
-+ {
-+ /* on bottom-up dibs, bits doesn't point to starting
-+ of buffer.... bad design choice */
-+ if(bmp->stride < 0)
-+ bmp->bits = (BYTE *)bmp->bits + bmp->stride * (bmp->height -1);
-+ HeapFree(GetProcessHeap(), 0, bmp->bits);
-+ }
-+ /* frees color table */
-+ if(bmp->colorTable)
-+ HeapFree(GetProcessHeap(), 0, bmp->colorTable);
-+
-+ HeapFree(GetProcessHeap(), 0, bmp);
-+
-+}
-+
-+
-+/* checks whether the format of 2 DIBs are identical
-+ it checks the pixel bit count and the color table size
-+ and content, if needed */
-+BOOL _DIBDRVBITMAP_FormatMatch(const DIBDRVBITMAP *d1, const DIBDRVBITMAP *d2)
-+{
-+ /* checks at first the format (bit count and color masks) */
-+ if(d1->format != d2->format)
-+ return FALSE;
-+
-+ /* formats matches, now checks color tables if needed */
-+ switch(d1->format)
-+ {
-+ case DIBFMT_DIB32_RGB :
-+ case DIBFMT_DIB32_BITFIELDS :
-+ case DIBFMT_DIB24 :
-+ case DIBFMT_DIB16_RGB :
-+ case DIBFMT_DIB16_BITFIELDS :
-+ return TRUE;
-+
-+ case DIBFMT_DIB1 :
-+ case DIBFMT_DIB4 :
-+ /*case DIBFMT_DIB4_RLE :*/
-+ case DIBFMT_DIB8 :
-+ /*case DIBFMT_DIB8_RLE :*/
-+ if(d1->colorTableSize != d2->colorTableSize)
-+ return FALSE;
-+ return !memcmp(d1->colorTable, d2->colorTable, d1->colorTableSize * sizeof(d1->colorTable[0]));
-+
-+ default:
-+ ERR("Unexpected depth %d\n", d1->bitCount);
-+ return FALSE;
-+ }
-+}
-+
-+/* convert a given dib into another format given by 'format' parameter */
-+BOOL _DIBDRVBITMAP_Convert(DIBDRVBITMAP *dst, const DIBDRVBITMAP *src, const DIBDRVBITMAP *format)
-+{
-+ int width, height;
-+ int iLine;
-+ void *buf;
-+ BOOL res;
-+
-+ MAYBE(TRACE("dst=%p, src=%p, format=%p\n", dst, src, format));
-+
-+ /* free, if needed, destination bitmap */
-+ _DIBDRVBITMAP_Free(dst);
-+
-+ /* if format and source bitmaps format match,
-+ just copy source on destination */
-+ if(_DIBDRVBITMAP_FormatMatch(src, format))
-+ {
-+ res = _DIBDRVBITMAP_InitFromDibdrvbitmap(dst, src, TRUE);
-+ MAYBE(TRACE("END - Identical formats\n"));
-+ return res;
-+ }
-+
-+ /* formats don't match, we create the dest bitmap with same format as format's one
-+ but with source's one dimensions */
-+ width = src->width;
-+ height = src->height;
-+ if(!_DIBDRVBITMAP_CreateFromDibdrvbitmap(dst, format, width, height))
-+ {
-+ ERR("Couldn't create destination bmp\n");
-+ return FALSE;
-+ }
-+
-+ /* we now copy/convert from source to dest */
-+ if(!(buf = HeapAlloc(GetProcessHeap(), 0, width * 4)))
-+ {
-+ ERR("HeapAlloc failed\n");
-+ return FALSE;
-+ }
-+
-+ for(iLine = 0; iLine < height; iLine++)
-+ {
-+ src->funcs->GetLine(src, iLine, 0, width, buf);
-+ dst->funcs->PutLine(dst, iLine, 0, width, buf);
-+ }
-+ HeapFree(GetProcessHeap(), 0, buf);
-+
-+ MAYBE(TRACE("END - different formats\n"));
-+ return TRUE;
-+}
-+
-+/* creates a solid-filled DIB of given color and format
-+ DIB format is given by 'format' parameter */
-+BOOL _DIBDRVBITMAP_CreateSolid(DIBDRVBITMAP *bmp, DIBDRVBITMAP *format, int width, int height, DWORD Color)
-+{
-+ DWORD *buf, *bufPnt;
-+ int i;
-+
-+ MAYBE(TRACE("bmp=%p, format=%p, width=%d, height=%d, Color=%08x\n", bmp, format, width, height, Color));
-+
-+ /* swaps color bytes....*/
-+ Color = RGB((Color >> 8) & 0xff, (Color >> 16) &0xff, Color &0xff);
-+
-+ /* creates the destination bitmap */
-+ if(!_DIBDRVBITMAP_CreateFromDibdrvbitmap(bmp, format, width, height))
-+ {
-+ ERR("Couldn't create destination bmp\n");
-+ return FALSE;
-+ }
-+
-+ /* creates a temporary line filled with given color */
-+ if(!(buf = HeapAlloc(GetProcessHeap(), 0, width * 4)))
-+ {
-+ ERR("HeapAlloc failed\n");
-+ return FALSE;
-+ }
-+
-+ for(i = 0, bufPnt = buf; i < width; i++)
-+ *bufPnt++ = Color;
-+
-+ /* fills the bitmap */
-+ for(i = 0; i < height; i++)
-+ bmp->funcs->PutLine(bmp, i, 0, width, buf);
-+
-+ /* frees temporaty line */
-+ HeapFree(GetProcessHeap(), 0, buf);
-+
-+ MAYBE(TRACE("END\n"));
-+ return TRUE;
-+}
-+
-+/* expands horizontally a bitmap to reach a minimum size,
-+ keeping its width as a multiple of a base width
-+ Used to widen brushes in order to optimize blitting */
-+BOOL _DIBDRVBITMAP_ExpandHoriz(DIBDRVBITMAP *dib, int baseWidth, int minWidth)
-+{
-+ BYTE *srcBuf, *dstBuf;
-+ int chunkSize;
-+ int iLine, iCol;
-+ DIBDRVBITMAP tmpDib;
-+ void *bits;
-+ BOOL ownsBits;
-+
-+ MAYBE(TRACE("dib=%p, baseWidth=%d, minWidth=%d\n", dib, baseWidth, minWidth));
-+
-+ /* if dst dib already wide enough, just do nothing */
-+ if(dib->width >= minWidth)
-+ {
-+ MAYBE(TRACE("END - No need to expand\n"));
-+ return TRUE;
-+ }
-+
-+ /* source DIB can't be NULL */
-+ if(!dib->bits)
-+ {
-+ ERR("Empty source DIB detected\n");
-+ return FALSE;
-+ }
-+
-+ /* round up minWidth to be a multiple of source width */
-+ minWidth += (baseWidth - (minWidth % baseWidth));
-+
-+ /* creates a temporary destination bitmap with required sizes */
-+ _DIBDRVBITMAP_Clear(&tmpDib);
-+ if(!_DIBDRVBITMAP_CreateFromDibdrvbitmap(&tmpDib, dib, minWidth, dib->height))
-+ {
-+ ERR("Couldn't create the temporary DIB for brush cache\n");
-+ return FALSE;
-+ }
-+
-+ /* if format uses almost 1 byte/pixel, fast copy path */
-+ if(dib->bitCount >= 8)
-+ {
-+ chunkSize = dib->width * dib->bitCount / 8;
-+ for(iLine = 0; iLine < dib->height; iLine++)
-+ {
-+ srcBuf = (BYTE *)dib->bits + iLine * dib->stride;
-+ dstBuf = (BYTE *)tmpDib.bits + iLine * tmpDib.stride;
-+ for(iCol = 0; iCol < tmpDib.width; iCol += dib->width)
-+ {
-+ memcpy(dstBuf, srcBuf, chunkSize);
-+ dstBuf += chunkSize;
-+ }
-+ }
-+ }
-+ /* otherwise slow path -- could be optimized */
-+ else
-+ {
-+ chunkSize = dib->width * 4;
-+ /* allocates a line buffer */
-+ if(!(srcBuf = HeapAlloc(GetProcessHeap(), 0, tmpDib.width * 4)))
-+ {
-+ ERR("HeapAlloc failed\n");
-+ return FALSE;
-+ }
-+
-+ FIXME("dib:format=%s, funcs=%p, bits=%p, width=%d, height=%d, stride=%d\n",
-+ _DIBDRVBITMAP_GetFormatName(dib), dib->funcs, dib->bits, dib->width, dib->height, dib->stride);
-+ for(iLine = 0; iLine < dib->height; iLine++)
-+ {
-+ /* fills the line buffer repeating source's line data */
-+ dib->funcs->GetLine(dib, iLine, 0, dib->width, srcBuf);
-+ dstBuf = srcBuf + chunkSize;
-+ for(iCol = dib->width; iCol < tmpDib.width; iCol += dib->width)
-+ {
-+ memcpy(dstBuf, srcBuf, chunkSize);
-+ dstBuf += chunkSize;
-+ }
-+ /* stores the line on destination bmp */
-+ tmpDib.funcs->PutLine(&tmpDib, iLine, 0, tmpDib.width, srcBuf);
-+ }
-+ HeapFree(GetProcessHeap(), 0, srcBuf);
-+ }
-+
-+ /* swaps temp DIB and source one */
-+ bits = dib->bits;
-+ ownsBits = dib->ownsBits;
-+ dib->bits = tmpDib.bits;
-+ dib->ownsBits = tmpDib.ownsBits;
-+ tmpDib.bits = bits;
-+ tmpDib.ownsBits = ownsBits;
-+
-+ /* frees the temporary DIB */
-+ _DIBDRVBITMAP_Free(&tmpDib);
-+
-+ MAYBE(TRACE("END\n"));
-+ return TRUE;
-+}
-diff -Nru a/dlls/winedib.drv/dibdrv_gdi32.h b/dlls/winedib.drv/dibdrv_gdi32.h
---- a/dlls/winedib.drv/dibdrv_gdi32.h 1970-01-01 01:00:00.000000000 +0100
-+++ b/dlls/winedib.drv/dibdrv_gdi32.h 2010-08-04 16:08:44.756222017 +0200
-@@ -0,0 +1,168 @@
-+/*
-+ * GDI structures - grabbed from dlls/gdi32/gdi_private.h
-+ * Those are needed to access some opaque gdi32 pointers
-+ *
-+ * Copyright 2009 Massimo Del Fedele
-+ *
-+ * This library is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License as published by the Free Software Foundation; either
-+ * version 2.1 of the License, or (at your option) any later version.
-+ *
-+ * This library is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with this library; if not, write to the Free Software
-+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
-+ */
-+
-+#ifndef __WINE_DIBDRV_GDI32_H
-+#define __WINE_DIBDRV_GDI32_H
-+
-+
-+/* driver function pointers - used here to forward calls to X11 driver when needed */
-+typedef struct { int opaque; } *PHYSDEV; /* PHYSDEV is an opaque pointer */
-+typedef struct tagDC_FUNCS
-+{
-+ INT (CDECL *pAbortDoc)(PHYSDEV);
-+ BOOL (CDECL *pAbortPath)(PHYSDEV);
-+ BOOL (CDECL *pAlphaBlend)(PHYSDEV,INT,INT,INT,INT,PHYSDEV,INT,INT,INT,INT,BLENDFUNCTION);
-+ BOOL (CDECL *pAngleArc)(PHYSDEV,INT,INT,DWORD,FLOAT,FLOAT);
-+ BOOL (CDECL *pArc)(PHYSDEV,INT,INT,INT,INT,INT,INT,INT,INT);
-+ BOOL (CDECL *pArcTo)(PHYSDEV,INT,INT,INT,INT,INT,INT,INT,INT);
-+ BOOL (CDECL *pBeginPath)(PHYSDEV);
-+ BOOL (CDECL *pBitBlt)(PHYSDEV,INT,INT,INT,INT,PHYSDEV,INT,INT,DWORD);
-+ INT (CDECL *pChoosePixelFormat)(PHYSDEV,const PIXELFORMATDESCRIPTOR *);
-+ BOOL (CDECL *pChord)(PHYSDEV,INT,INT,INT,INT,INT,INT,INT,INT);
-+ BOOL (CDECL *pCloseFigure)(PHYSDEV);
-+ BOOL (CDECL *pCreateBitmap)(PHYSDEV,HBITMAP,LPVOID);
-+ BOOL (CDECL *pCreateDC)(HDC,PHYSDEV *,LPCWSTR,LPCWSTR,LPCWSTR,const DEVMODEW*);
-+ HBITMAP (CDECL *pCreateDIBSection)(PHYSDEV,HBITMAP,const BITMAPINFO *,UINT);
-+ BOOL (CDECL *pDeleteBitmap)(HBITMAP);
-+ BOOL (CDECL *pDeleteDC)(PHYSDEV);
-+ BOOL (CDECL *pDeleteObject)(PHYSDEV,HGDIOBJ);
-+ INT (CDECL *pDescribePixelFormat)(PHYSDEV,INT,UINT,PIXELFORMATDESCRIPTOR *);
-+ DWORD (CDECL *pDeviceCapabilities)(LPSTR,LPCSTR,LPCSTR,WORD,LPSTR,LPDEVMODEA);
-+ BOOL (CDECL *pEllipse)(PHYSDEV,INT,INT,INT,INT);
-+ INT (CDECL *pEndDoc)(PHYSDEV);
-+ INT (CDECL *pEndPage)(PHYSDEV);
-+ BOOL (CDECL *pEndPath)(PHYSDEV);
-+ BOOL (CDECL *pEnumDeviceFonts)(PHYSDEV,LPLOGFONTW,FONTENUMPROCW,LPARAM);
-+ INT (CDECL *pExcludeClipRect)(PHYSDEV,INT,INT,INT,INT);
-+ INT (CDECL *pExtDeviceMode)(LPSTR,HWND,LPDEVMODEA,LPSTR,LPSTR,LPDEVMODEA,LPSTR,DWORD);
-+ INT (CDECL *pExtEscape)(PHYSDEV,INT,INT,LPCVOID,INT,LPVOID);
-+ BOOL (CDECL *pExtFloodFill)(PHYSDEV,INT,INT,COLORREF,UINT);
-+ INT (CDECL *pExtSelectClipRgn)(PHYSDEV,HRGN,INT);
-+ BOOL (CDECL *pExtTextOut)(PHYSDEV,INT,INT,UINT,const RECT*,LPCWSTR,UINT,const INT*);
-+ BOOL (CDECL *pFillPath)(PHYSDEV);
-+ BOOL (CDECL *pFillRgn)(PHYSDEV,HRGN,HBRUSH);
-+ BOOL (CDECL *pFlattenPath)(PHYSDEV);
-+ BOOL (CDECL *pFrameRgn)(PHYSDEV,HRGN,HBRUSH,INT,INT);
-+ BOOL (CDECL *pGdiComment)(PHYSDEV,UINT,CONST BYTE*);
-+ LONG (CDECL *pGetBitmapBits)(HBITMAP,void*,LONG);
-+ BOOL (CDECL *pGetCharWidth)(PHYSDEV,UINT,UINT,LPINT);
-+ BOOL (CDECL *pGetDCOrgEx)(PHYSDEV,LPPOINT);
-+ UINT (CDECL *pGetDIBColorTable)(PHYSDEV,UINT,UINT,RGBQUAD*);
-+ INT (CDECL *pGetDIBits)(PHYSDEV,HBITMAP,UINT,UINT,LPVOID,BITMAPINFO*,UINT);
-+ INT (CDECL *pGetDeviceCaps)(PHYSDEV,INT);
-+ BOOL (CDECL *pGetDeviceGammaRamp)(PHYSDEV,LPVOID);
-+ BOOL (CDECL *pGetICMProfile)(PHYSDEV,LPDWORD,LPWSTR);
-+ COLORREF (CDECL *pGetNearestColor)(PHYSDEV,COLORREF);
-+ COLORREF (CDECL *pGetPixel)(PHYSDEV,INT,INT);
-+ INT (CDECL *pGetPixelFormat)(PHYSDEV);
-+ UINT (CDECL *pGetSystemPaletteEntries)(PHYSDEV,UINT,UINT,LPPALETTEENTRY);
-+ BOOL (CDECL *pGetTextExtentExPoint)(PHYSDEV,LPCWSTR,INT,INT,LPINT,LPINT,LPSIZE);
-+ BOOL (CDECL *CDECL pGetTextMetrics)(PHYSDEV,TEXTMETRICW*);
-+ INT (CDECL *pIntersectClipRect)(PHYSDEV,INT,INT,INT,INT);
-+ BOOL (CDECL *pInvertRgn)(PHYSDEV,HRGN);
-+ BOOL (CDECL *pLineTo)(PHYSDEV,INT,INT);
-+ BOOL (CDECL *pModifyWorldTransform)(PHYSDEV,const XFORM*,INT);
-+ BOOL (CDECL *pMoveTo)(PHYSDEV,INT,INT);
-+ INT (CDECL *pOffsetClipRgn)(PHYSDEV,INT,INT);
-+ INT (CDECL *pOffsetViewportOrg)(PHYSDEV,INT,INT);
-+ INT (CDECL *pOffsetWindowOrg)(PHYSDEV,INT,INT);
-+ BOOL (CDECL *pPaintRgn)(PHYSDEV,HRGN);
-+ BOOL (CDECL *pPatBlt)(PHYSDEV,INT,INT,INT,INT,DWORD);
-+ BOOL (CDECL *pPie)(PHYSDEV,INT,INT,INT,INT,INT,INT,INT,INT);
-+ BOOL (CDECL *pPolyBezier)(PHYSDEV,const POINT*,DWORD);
-+ BOOL (CDECL *pPolyBezierTo)(PHYSDEV,const POINT*,DWORD);
-+ BOOL (CDECL *pPolyDraw)(PHYSDEV,const POINT*,const BYTE *,DWORD);
-+ BOOL (CDECL *pPolyPolygon)(PHYSDEV,const POINT*,const INT*,UINT);
-+ BOOL (CDECL *pPolyPolyline)(PHYSDEV,const POINT*,const DWORD*,DWORD);
-+ BOOL (CDECL *pPolygon)(PHYSDEV,const POINT*,INT);
-+ BOOL (CDECL *pPolyline)(PHYSDEV,const POINT*,INT);
-+ BOOL (CDECL *pPolylineTo)(PHYSDEV,const POINT*,INT);
-+ UINT (CDECL *pRealizeDefaultPalette)(PHYSDEV);
-+ UINT (CDECL *pRealizePalette)(PHYSDEV,HPALETTE,BOOL);
-+ BOOL (CDECL *pRectangle)(PHYSDEV,INT,INT,INT,INT);
-+ HDC (CDECL *pResetDC)(PHYSDEV,const DEVMODEW*);
-+ BOOL (CDECL *pRestoreDC)(PHYSDEV,INT);
-+ BOOL (CDECL *pRoundRect)(PHYSDEV,INT,INT,INT,INT,INT,INT);
-+ INT (CDECL *pSaveDC)(PHYSDEV);
-+ INT (CDECL *pScaleViewportExt)(PHYSDEV,INT,INT,INT,INT);
-+ INT (CDECL *pScaleWindowExt)(PHYSDEV,INT,INT,INT,INT);
-+ HBITMAP (CDECL *pSelectBitmap)(PHYSDEV,HBITMAP);
-+ HBRUSH (CDECL *pSelectBrush)(PHYSDEV,HBRUSH);
-+ BOOL (CDECL *pSelectClipPath)(PHYSDEV,INT);
-+ HFONT (CDECL *pSelectFont)(PHYSDEV,HFONT,HANDLE);
-+ HPALETTE (CDECL *pSelectPalette)(PHYSDEV,HPALETTE,BOOL);
-+ HPEN (CDECL *pSelectPen)(PHYSDEV,HPEN);
-+ INT (CDECL *pSetArcDirection)(PHYSDEV,INT);
-+ LONG (CDECL *pSetBitmapBits)(HBITMAP,const void*,LONG);
-+ COLORREF (CDECL *pSetBkColor)(PHYSDEV,COLORREF);
-+ INT (CDECL *pSetBkMode)(PHYSDEV,INT);
-+ COLORREF (CDECL *pSetDCBrushColor)(PHYSDEV, COLORREF);
-+ DWORD (CDECL *pSetDCOrg)(PHYSDEV,INT,INT);
-+ COLORREF (CDECL *pSetDCPenColor)(PHYSDEV, COLORREF);
-+ UINT (CDECL *pSetDIBColorTable)(PHYSDEV,UINT,UINT,const RGBQUAD*);
-+ INT (CDECL *pSetDIBits)(PHYSDEV,HBITMAP,UINT,UINT,LPCVOID,const BITMAPINFO*,UINT);
-+ INT (CDECL *pSetDIBitsToDevice)(PHYSDEV,INT,INT,DWORD,DWORD,INT,INT,UINT,UINT,LPCVOID,
-+ const BITMAPINFO*,UINT);
-+ VOID (CDECL *pSetDeviceClipping)(PHYSDEV,HRGN,HRGN);
-+ BOOL (CDECL *pSetDeviceGammaRamp)(PHYSDEV,LPVOID);
-+ INT (CDECL *pSetMapMode)(PHYSDEV,INT);
-+ DWORD (CDECL *pSetMapperFlags)(PHYSDEV,DWORD);
-+ COLORREF (CDECL *pSetPixel)(PHYSDEV,INT,INT,COLORREF);
-+ BOOL (CDECL *pSetPixelFormat)(PHYSDEV,INT,const PIXELFORMATDESCRIPTOR *);
-+ INT (CDECL *pSetPolyFillMode)(PHYSDEV,INT);
-+ INT (CDECL *pSetROP2)(PHYSDEV,INT);
-+ INT (CDECL *pSetRelAbs)(PHYSDEV,INT);
-+ INT (CDECL *pSetStretchBltMode)(PHYSDEV,INT);
-+ UINT (CDECL *pSetTextAlign)(PHYSDEV,UINT);
-+ INT (CDECL *pSetTextCharacterExtra)(PHYSDEV,INT);
-+ DWORD (CDECL *pSetTextColor)(PHYSDEV,DWORD);
-+ INT (CDECL *pSetTextJustification)(PHYSDEV,INT,INT);
-+ INT (CDECL *pSetViewportExt)(PHYSDEV,INT,INT);
-+ INT (CDECL *pSetViewportOrg)(PHYSDEV,INT,INT);
-+ INT (CDECL *pSetWindowExt)(PHYSDEV,INT,INT);
-+ INT (CDECL *pSetWindowOrg)(PHYSDEV,INT,INT);
-+ BOOL (CDECL *pSetWorldTransform)(PHYSDEV,const XFORM*);
-+ INT (CDECL *pStartDoc)(PHYSDEV,const DOCINFOW*);
-+ INT (CDECL *pStartPage)(PHYSDEV);
-+ BOOL (CDECL *pStretchBlt)(PHYSDEV,INT,INT,INT,INT,PHYSDEV,INT,INT,INT,INT,DWORD);
-+ INT (CDECL *pStretchDIBits)(PHYSDEV,INT,INT,INT,INT,INT,INT,INT,INT,const void *,
-+ const BITMAPINFO*,UINT,DWORD);
-+ BOOL (CDECL *pStrokeAndFillPath)(PHYSDEV);
-+ BOOL (CDECL *pStrokePath)(PHYSDEV);
-+ BOOL (CDECL *pSwapBuffers)(PHYSDEV);
-+ BOOL (CDECL *pUnrealizePalette)(HPALETTE);
-+ BOOL (CDECL *pWidenPath)(PHYSDEV);
-+
-+ /* OpenGL32 */
-+ BOOL (CDECL *pwglCopyContext)(HGLRC, HGLRC, UINT);
-+ HGLRC (CDECL *pwglCreateContext)(PHYSDEV);
-+ BOOL (CDECL *pwglDeleteContext)(HGLRC);
-+ PROC (CDECL *pwglGetProcAddress)(LPCSTR);
-+ HDC (CDECL *pwglGetPbufferDCARB)(PHYSDEV, void*);
-+ BOOL (CDECL *pwglMakeCurrent)(PHYSDEV, HGLRC);
-+ BOOL (CDECL *pwglMakeContextCurrentARB)(PHYSDEV, PHYSDEV, HGLRC);
-+ BOOL (CDECL *pwglSetPixelFormatWINE)(PHYSDEV,INT,const PIXELFORMATDESCRIPTOR *);
-+ BOOL (CDECL *pwglShareLists)(HGLRC hglrc1, HGLRC hglrc2);
-+ BOOL (CDECL *pwglUseFontBitmapsA)(PHYSDEV, DWORD, DWORD, DWORD);
-+ BOOL (CDECL *pwglUseFontBitmapsW)(PHYSDEV, DWORD, DWORD, DWORD);
-+} DC_FUNCTIONS;
-+
-+#endif
-diff -Nru a/dlls/winedib.drv/dibdrv.h b/dlls/winedib.drv/dibdrv.h
---- a/dlls/winedib.drv/dibdrv.h 1970-01-01 01:00:00.000000000 +0100
-+++ b/dlls/winedib.drv/dibdrv.h 2010-08-04 16:08:44.765222017 +0200
-@@ -0,0 +1,475 @@
-+/*
-+ * DIB driver private definitions
-+ *
-+ * Copyright 2009 Massimo Del Fedele
-+ * This library is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License as published by the Free Software Foundation; either
-+ * version 2.1 of the License, or (at your option) any later version.
-+ *
-+ * This library is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with this library; if not, write to the Free Software
-+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
-+ */
-+
-+#ifndef __WINE_DIBDRV_H
-+#define __WINE_DIBDRV_H
-+
-+#include <stdarg.h>
-+#include <stdlib.h>
-+#include <X11/Xlib.h>
-+
-+#include "windef.h"
-+#include "winbase.h"
-+#include "winerror.h"
-+#include "wingdi.h"
-+#include "wine/list.h"
-+#include "wine/library.h"
-+#include "wine/debug.h"
-+#include "wingdi.h"
-+#include "winreg.h"
-+
-+#include "freetype.h"
-+
-+/* data structures needed to access opaque pointers
-+ * defined in gdi32.h */
-+#include "dibdrv_gdi32.h"
-+
-+/* enable this if you want debugging (i.e. TRACEs) output */
-+#define DIBDRV_ENABLE_MAYBE
-+
-+/* enable this if you want antialiased fonts */
-+#define DIBDRV_ANTIALIASED_FONTS
-+
-+/* provide a way to make debugging output appear
-+ only once. Usage example:
-+ ONCE(FIXME("Some message\n")); */
-+#define ONCE(x) \
-+{ \
-+ static BOOL done = FALSE; \
-+ if(!done) \
-+ { \
-+ done = TRUE; \
-+ x; \
-+ } \
-+}
-+
-+/* provide a way to make debugging output appear
-+ only if enabled here. Can speed up stuffs
-+ avoiding long traces.Usage example:
-+ MAYBE(TRACE("Some message\n")); */
-+#ifdef DIBDRV_ENABLE_MAYBE
-+#define MAYBE(x) x
-+#else
-+#define MAYBE(x)
-+#endif
-+
-+
-+/* extra stock object: default 1x1 bitmap for memory DCs
-+ grabbed from gdi_private.h */
-+#define DEFAULT_BITMAP (STOCK_LAST+1)
-+
-+struct _DIBDRVBITMAP;
-+struct _DIBDRVPHYSDEV;
-+typedef struct _DIBDRV_PRIMITIVE_FUNCS
-+{
-+ /* color to pixel data conversion */
-+ DWORD (* ColorToPixel) (const struct _DIBDRVBITMAP *bmp, COLORREF color);
-+
-+ /* pixel primitives */
-+ void* (* GetPixelPointer) (const struct _DIBDRVBITMAP *bmp, int x, int y);
-+ void (* SetPixel) ( struct _DIBDRVBITMAP *bmp, int x, int y, DWORD and, DWORD xor);
-+ DWORD (* GetPixel) (const struct _DIBDRVBITMAP *bmp, int x, int y);
-+
-+ /* line drawing primitives */
-+ void (* SolidHLine) ( struct _DIBDRVBITMAP *bmp, int x1, int x2, int y, DWORD and, DWORD xor);
-+ void (* PatternHLine) ( struct _DIBDRVBITMAP *bmp, int x1, int x2, int y, const void *and, const void *xor, DWORD offset, DWORD count);
-+ void (* SolidVLine) ( struct _DIBDRVBITMAP *bmp, int x, int y1, int y2, DWORD and, DWORD xor);
-+
-+ /* bitmap conversion helpers */
-+ BOOL (* GetLine) (const struct _DIBDRVBITMAP *bmp, int line, int startx, int width, void *buf);
-+ BOOL (* PutLine) ( struct _DIBDRVBITMAP *bmp, int line, int startx, int width, void *buf);
-+
-+ /* BitBlt primitives */
-+ BOOL (* AlphaBlend) ( struct _DIBDRVPHYSDEV *physDevDst, int xDst, int yDst, int widthDst, int heightDst,
-+ const struct _DIBDRVPHYSDEV *physDevSrc, int xSrc, int ySrc, int widthSrc, int heightSrc, BLENDFUNCTION blendFn );
-+ BOOL (* BitBlt) ( struct _DIBDRVPHYSDEV *physDevDst, int xDst, int yDst, int width, int height,
-+ const struct _DIBDRVPHYSDEV *physDevSrc, int xSrc, int ySrc, DWORD rop );
-+ BOOL (* StretchBlt) ( struct _DIBDRVPHYSDEV *physDevDst, int xDst, int yDst, int widthDst, int heightDst,
-+ const struct _DIBDRVPHYSDEV *physDevSrc, int xSrc, int ySrc, int widthSrc, int heightSrc, DWORD rop );
-+
-+ /* font drawing helper */
-+ void (* FreetypeBlit) ( struct _DIBDRVPHYSDEV *physDev, int x, int y, RECT *clipRec, FT_Bitmap *bmp);
-+
-+} DIBDRV_PRIMITIVE_FUNCS;
-+
-+extern DIBDRV_PRIMITIVE_FUNCS DIBDRV_funcs_DIB32_RGB;
-+extern DIBDRV_PRIMITIVE_FUNCS DIBDRV_funcs_DIB32_BITFIELDS;
-+extern DIBDRV_PRIMITIVE_FUNCS DIBDRV_funcs_DIB24;
-+extern DIBDRV_PRIMITIVE_FUNCS DIBDRV_funcs_DIB16_RGB;
-+extern DIBDRV_PRIMITIVE_FUNCS DIBDRV_funcs_DIB16_BITFIELDS;
-+extern DIBDRV_PRIMITIVE_FUNCS DIBDRV_funcs_DIB8;
-+extern DIBDRV_PRIMITIVE_FUNCS DIBDRV_funcs_DIB4;
-+extern DIBDRV_PRIMITIVE_FUNCS DIBDRV_funcs_DIB1;
-+
-+/* DIB bitmaps formats */
-+typedef enum _DIBFORMAT
-+{
-+ DIBFMT_UNKNOWN = 0,
-+ DIBFMT_DIB1 = 1,
-+ DIBFMT_DIB4 = 2,
-+ DIBFMT_DIB4_RLE = 3,
-+ DIBFMT_DIB8 = 4,
-+ DIBFMT_DIB8_RLE = 5,
-+ DIBFMT_DIB16_RGB = 6,
-+ DIBFMT_DIB16_BITFIELDS = 7,
-+ DIBFMT_DIB24 = 8,
-+ DIBFMT_DIB32_RGB = 9,
-+ DIBFMT_DIB32_BITFIELDS = 10
-+} DIBFORMAT;
-+
-+/* DIB driver's generic bitmap structure */
-+typedef struct _DIBDRVBITMAP
-+{
-+ /* bitmap format of dib */
-+ DIBFORMAT format;
-+
-+ /* topdown flag */
-+ BOOL topdown;
-+
-+ /* pointer to top left corner of bitmap */
-+ void *bits;
-+
-+ /* flags indicating if bits array is owned
-+ by the bitmap */
-+ BOOL ownsBits;
-+
-+ /* bitmap dimensions */
-+ int width;
-+ int height;
-+
-+ /* bitmap stride (== width in bytes) of a bitmap line */
-+ /* negative for a bottom-up bitmap */
-+ int stride;
-+
-+ /* number of bits/pixel in bitmap */
-+ int bitCount;
-+
-+ /* calculated numbers for bitfields */
-+
-+ /* bitfields masks */
-+ DWORD redMask, greenMask, blueMask;
-+ /* shifting required within a COLORREF's BYTE */
-+ int redShift, greenShift, blueShift;
-+ /* size of the fields */
-+ int redLen, greenLen, blueLen;
-+
-+ /* color table and its size */
-+ RGBQUAD *colorTable;
-+ DWORD colorTableSize;
-+
-+ /* lightest color index, for monochrome bitmaps */
-+ int lightColor;
-+
-+ /* flag indicating that color table has been grabbed */
-+ BOOL colorTableGrabbed;
-+
-+ /* primitive function pointers */
-+ DIBDRV_PRIMITIVE_FUNCS *funcs;
-+
-+} DIBDRVBITMAP;
-+
-+/* dash patterns */
-+typedef struct _DASHPATTERN
-+{
-+ DWORD count;
-+ DWORD dashes[6];
-+
-+} DASHPATTERN;
-+
-+/* DIB driver physical device */
-+typedef struct _DIBDRVPHYSDEV
-+{
-+ /* X11 driver physical device */
-+ PHYSDEV X11PhysDev;
-+
-+ /* HDC associated with physDev */
-+ HDC hdc;
-+
-+ /* is a DIB selected into DC ? */
-+ BOOL hasDIB;
-+
-+ /* currently selected HBITMAP */
-+ HBITMAP hbitmap;
-+
-+ /* physical bitmap */
-+ DIBDRVBITMAP *physBitmap;
-+
-+ /* active ROP2 */
-+ INT rop2;
-+
-+ /* clipping region and its rectangles */
-+ HRGN region;
-+ RGNDATA *regionData;
-+ RECT *regionRects;
-+ int regionRectCount;
-+
-+ /* background color and active ROP2 precalculated
-+ AND and XOR values for it */
-+ COLORREF backgroundColor;
-+ DWORD backgroundAnd, backgroundXor;
-+
-+ /* pen color and active ROP2 precalculated
-+ AND and XOR values for it */
-+ COLORREF penColorref;
-+ DWORD penColor;
-+ DWORD penAnd, penXor;
-+ const DASHPATTERN *penPattern;
-+ DWORD curDash, leftInDash;
-+ enum MARKSPACE { mark, space } markSpace;
-+
-+ /* pen style */
-+ UINT penStyle;
-+
-+ /* pen drawing functions */
-+ void (* penHLine) (struct _DIBDRVPHYSDEV *physDev, int x1, int x2, int y);
-+ void (* penVLine) (struct _DIBDRVPHYSDEV *physDev, int x, int y1, int y2);
-+ void (* penLine) (struct _DIBDRVPHYSDEV *physDev, int x1, int y1, int x2, int y2);
-+ void (* brushHLine)(struct _DIBDRVPHYSDEV *physDev, int x1, int x2, int y);
-+
-+ /* brush color and active ROP2 precalculated
-+ AND and XOR values for it */
-+ COLORREF brushColorref;
-+ DWORD brushColor;
-+ DWORD brushAnd, brushXor;
-+ DWORD *brushAnds, *brushXors;
-+
-+ /* brush style */
-+ UINT brushStyle;
-+
-+ /* brush bitmap, if needed, and its converted/resized cache copy */
-+ BOOL isBrushBitmap;
-+ DIBDRVBITMAP *brushBitmap;
-+ DIBDRVBITMAP *brushBmpCache;
-+
-+ /* text color */
-+ COLORREF textColor;
-+ COLORREF textBackground;
-+
-+#ifdef DIBDRV_ANTIALIASED_FONTS
-+ /* text color table for antialiased fonts */
-+ COLORREF textColorTable[256];
-+#endif
-+
-+ /* freetype face associated to current DC HFONT */
-+ FT_Face face;
-+
-+} DIBDRVPHYSDEV;
-+
-+
-+/* *********************************************************************
-+ * DISPLAY DRIVER ACCESS FUNCTIONS
-+ * ********************************************************************/
-+
-+/* LoadDisplayDriver
-+ * Loads display driver - partially grabbed from gdi32 */
-+DC_FUNCTIONS *_DIBDRV_LoadDisplayDriver(void);
-+
-+/* FreeDisplayDriver
-+ Frees resources allocated by Display driver */
-+void _DIBDRV_FreeDisplayDriver(void);
-+
-+/* GetDisplayDriver
-+ Gets a pointer to display drives'function table */
-+inline DC_FUNCTIONS *_DIBDRV_GetDisplayDriver(void);
-+
-+/* *********************************************************************
-+ * ROP2 AND OTHER DRAWING RELATED FUNCTIONS
-+ * ********************************************************************/
-+
-+void _DIBDRV_CalcAndXorMasks(INT rop, DWORD color, DWORD *and, DWORD *xor);
-+
-+inline void _DIBDRV_rop32(DWORD *ptr, DWORD and, DWORD xor);
-+inline void _DIBDRV_rop16(WORD *ptr, WORD and, WORD xor);
-+inline void _DIBDRV_rop8(BYTE *ptr, BYTE and, BYTE xor);
-+
-+void _DIBDRV_ResetDashOrigin(DIBDRVPHYSDEV *physDev);
-+
-+/* *********************************************************************
-+ * ROP2 FUNCTIONS
-+ * ********************************************************************/
-+
-+/* the ROP3 operations
-+ this is a BIG case block; beware that some
-+ commons ROP3 operations will be optimized
-+ from inside blt routines */
-+DWORD _DIBDRV_ROP3(DWORD p, DWORD s, DWORD d, BYTE rop);
-+
-+/* *********************************************************************
-+ * PHYSICAL BITMAP FUNCTIONS
-+ * ********************************************************************/
-+
-+/* gets human-readable dib format name */
-+const char *_DIBDRVBITMAP_GetFormatName(DIBDRVBITMAP const *bmp);
-+
-+/* sets/gets bits of a DIBDRVBITMAP taking in account if it's a top down
-+ or a bottom-up DIB */
-+void _DIBDRVBITMAP_Set_Bits(DIBDRVBITMAP *dib, void *bits, BOOL owns);
-+void *_DIBDRVBITMAP_Get_Bits(DIBDRVBITMAP *dib);
-+
-+/* calculates and sets the lightest color for monochrome bitmaps */
-+int _DIBDRVBITMAP_GetLightestColorIndex(DIBDRVBITMAP *dib);
-+
-+/* initialize or create dib from a bitmap :
-+ dib dib being initialized
-+ bi source BITMAPINFOHEADER with required DIB format info
-+ bit_fields color masks
-+ color_table color table, if any
-+ bits pointer to image data array
-+ NOTE : DIBDRVBITMAP doesn't owns bits, but do own color table */
-+BOOL _DIBDRVBITMAP_InitFromBMIH(DIBDRVBITMAP *dib, const BITMAPINFOHEADER *bi, const DWORD *bit_fields,
-+ const RGBQUAD *color_table, void *bits);
-+DIBDRVBITMAP *_DIBDRVBITMAP_CreateFromBMIH(const BITMAPINFOHEADER *bi, const DWORD *bit_fields,
-+ const RGBQUAD *colorTable, void *bits);
-+
-+BOOL _DIBDRVBITMAP_InitFromBitmapinfo(DIBDRVBITMAP *dib, const BITMAPINFO *bmi, void *bits);
-+DIBDRVBITMAP *_DIBDRVBITMAP_CreateFromBitmapinfo(const BITMAPINFO *bmi, void *bits);
-+
-+/* initializes a DIBRDVBITMAP copying it from a source one
-+ Parameters :
-+ dib destination DIBDRVBITMAP
-+ src source DIBDRVBITMAP
-+ copy TRUE->copy source pixel array FALSE->link to source pixel array */
-+BOOL _DIBDRVBITMAP_InitFromDibdrvbitmap(DIBDRVBITMAP *dib, const DIBDRVBITMAP *src, BOOL copy);
-+
-+/* creates a DIBRDVBITMAP copying format info from a source one
-+ Parameters :
-+ dib destination DIBDRVBITMAP
-+ src source DIBDRVBITMAP
-+ widht, height sizes of newly created bitmap */
-+BOOL _DIBDRVBITMAP_CreateFromDibdrvbitmap(DIBDRVBITMAP *dib, const DIBDRVBITMAP *src, int width, int height);
-+
-+/* allocates a new DIBDTVBITMAP */
-+DIBDRVBITMAP *_DIBDRVBITMAP_New(void);
-+
-+/* Frees and de-allocates a DIBDRVBITMAP structure data */
-+void _DIBDRVBITMAP_Free(DIBDRVBITMAP *bmp);
-+
-+/* Clears a DIBDRVBITMAP structure data
-+ WARNING : doesn't free anything */
-+void _DIBDRVBITMAP_Clear(DIBDRVBITMAP *bmp);
-+
-+/* checks whether the format of 2 DIBs are identical
-+ it checks the pixel bit count and the color table size
-+ and content, if needed */
-+BOOL _DIBDRVBITMAP_FormatMatch(const DIBDRVBITMAP *d1, const DIBDRVBITMAP *d2);
-+
-+/* convert a given dib into another format given by 'format' parameter */
-+BOOL _DIBDRVBITMAP_Convert(DIBDRVBITMAP *dst, const DIBDRVBITMAP *src, const DIBDRVBITMAP *format);
-+
-+/* creates a solid-filled DIB of given color and format
-+ DIB format is given by 'format' parameter */
-+BOOL _DIBDRVBITMAP_CreateSolid(DIBDRVBITMAP *bmp, DIBDRVBITMAP *format, int width, int height, DWORD Color);
-+
-+/* expands horizontally a bitmap to reach a minimum size,
-+ keeping its width as a multiple of a base width
-+ Used to widen brushes in order to optimize blitting */
-+BOOL _DIBDRVBITMAP_ExpandHoriz(DIBDRVBITMAP *dib, int baseWidth, int minWidth);
-+
-+/* *********************************************************************
-+ * BITMAP LIST MANAGEMENT FUNCTIONS
-+ * ********************************************************************/
-+
-+/* initializes bitmap list -- to be called at process attach */
-+void _BITMAPLIST_Init(void);
-+
-+/* terminates bitmap list -- to be called at process detach */
-+void _BITMAPLIST_Terminate(void);
-+
-+/* adds a DIB to the list - it adds it on top, as
-+ usually most recently created DIBs are used first */
-+BOOL _BITMAPLIST_Add(HBITMAP hbmp, DIBDRVBITMAP *bmp);
-+
-+/* removes a DIB from the list */
-+DIBDRVBITMAP *_BITMAPLIST_Remove(HBITMAP hbmp);
-+
-+/* scans list for a DIB */
-+DIBDRVBITMAP *_BITMAPLIST_Get(HBITMAP hbmp);
-+
-+/* *********************************************************************
-+ * DIB <--> DDB CONVERSION ROUTINES
-+ * ********************************************************************/
-+
-+/***********************************************************************
-+ * Creates DDB that is compatible with source hdc.
-+ * hdc is the HDC on where the DIB MUST be selected in
-+ * srcBmp is the source DIB
-+ * startScan and scanLines specify the portion of DIB to convert
-+ * in order to avoid unneeded conversion of large DIBs on blitting
-+ *
-+ * NOTE : the srcBmp DIB MUST NOT be selected in any DC */
-+HBITMAP _DIBDRV_ConvertDIBtoDDB( HDC hdc, HBITMAP srcBmp, int startScan, int scanLines );
-+
-+/***********************************************************************
-+ * Creates DIB that is compatible with the target hdc.
-+ * startScan and scanLines specify the portion of DDB to convert
-+ * in order to avoid unneeded conversion of large DDBs on blitting
-+ *
-+ * NOTE : the srcBmp DDB MUST NOT be selected in any DC */
-+HBITMAP _DIBDRV_ConvertDDBtoDIB( HDC hdc, HBITMAP srcBmp, int startScan, int scanLines );
-+
-+/***********************************************************************
-+ * Creates DIB that is compatible with the target hdc for a device (non memory) source DC */
-+HBITMAP _DIBDRV_ConvertDevDDBtoDIB( HDC hdcSrc, HDC hdcDst, int xSrc, int ySrc, int width, int height );
-+
-+/* *********************************************************************
-+ * QUERY FUNCTIONS
-+ * ********************************************************************/
-+
-+/***********************************************************************
-+ * DIBDRV_GetDeviceCaps */
-+INT DIBDRV_GetDeviceCaps( DIBDRVPHYSDEV *physDev, INT cap );
-+
-+/* *********************************************************************
-+ * GEOMETRIC UTILITIES
-+ * ********************************************************************/
-+
-+/* intersect 2 rectangles (just to not use USER32 one...) */
-+BOOL _DIBDRV_IntersectRect(RECT *d, const RECT *s1, const RECT *s2);
-+
-+/* converts positions from Word space to Device space */
-+void _DIBDRV_Position_ws2ds(DIBDRVPHYSDEV *physDev, int *x, int *y);
-+void _DIBDRV_Positions_ws2ds(DIBDRVPHYSDEV *physDev, int *x1, int *y1, int *x2, int *y2);
-+
-+/* converts sizes from Word space to Device space */
-+void _DIBDRV_Sizes_ws2ds(DIBDRVPHYSDEV *physDev, int *w, int *h);
-+
-+/* converts a rectangle form Word space to Device space */
-+void _DIBDRV_Rect_ws2ds(DIBDRVPHYSDEV *physDev, const RECT *src, RECT *dst);
-+
-+/* converts positions from Device space to World space */
-+void _DIBDRV_Position_ds2ws(DIBDRVPHYSDEV *physDev, int *x, int *y);
-+void _DIBDRV_Positions_ds2ws(DIBDRVPHYSDEV *physDev, int *x1, int *y1, int *x2, int *y2);
-+
-+/* converts sizes from Device space to World space */
-+void _DIBDRV_Sizes_ds2ws(DIBDRVPHYSDEV *physDev, int *w, int *h);
-+
-+/* *********************************************************************
-+ * COLOR UTILITIES
-+ * ********************************************************************/
-+
-+/* maps a colorref to actual color */
-+COLORREF _DIBDRV_MapColor(DIBDRVPHYSDEV *physDev, COLORREF color);
-+
-+/* gets nearest color index in DIB palette of a given colorref */
-+DWORD _DIBDRV_GetNearestColorIndex(const DIBDRVBITMAP *dib, COLORREF color);
-+
-+/* gets nearest color to DIB palette color */
-+DWORD _DIBDRV_GetNearestColor(const DIBDRVBITMAP *dib, COLORREF color);
-+
-+#endif
-diff -Nru a/dlls/winedib.drv/dibdrv_main.c b/dlls/winedib.drv/dibdrv_main.c
---- a/dlls/winedib.drv/dibdrv_main.c 1970-01-01 01:00:00.000000000 +0100
-+++ b/dlls/winedib.drv/dibdrv_main.c 2010-08-04 16:08:44.668222017 +0200
-@@ -0,0 +1,67 @@
-+/*
-+ * DIBDRV initialization code
-+ *
-+ * Copyright 2009 Massimo Del Fedele
-+ *
-+ * This library is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License as published by the Free Software Foundation; either
-+ * version 2.1 of the License, or (at your option) any later version.
-+ *
-+ * This library is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with this library; if not, write to the Free Software
-+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
-+ */
-+
-+#include "config.h"
-+#include "wine/port.h"
-+
-+#include "dibdrv.h"
-+
-+WINE_DEFAULT_DEBUG_CHANNEL(dibdrv);
-+
-+/***********************************************************************
-+ * DIBDRV initialization routine
-+ */
-+BOOL WINAPI DllMain( HINSTANCE hinst, DWORD reason, LPVOID reserved )
-+{
-+ BOOL ret = TRUE;
-+
-+ switch(reason)
-+ {
-+ case DLL_PROCESS_ATTACH:
-+
-+ /* Loads display driver */
-+ _DIBDRV_LoadDisplayDriver();
-+
-+ /* initializes freetype library */
-+ if(!_DIBDRV_FreeType_Init())
-+ ERR("Couldn't initialize freetype library.\n");
-+
-+ /* initializes internal bitmap list */
-+ _BITMAPLIST_Init();
-+
-+ break;
-+ case DLL_THREAD_DETACH:
-+ /* do thread detach */
-+ break;
-+ case DLL_PROCESS_DETACH:
-+
-+ /* terminates freetype library */
-+ _DIBDRV_FreeType_Terminate();
-+
-+ /* unloads display driver */
-+ _DIBDRV_FreeDisplayDriver();
-+
-+ /* terminates internal bitmap list */
-+ _BITMAPLIST_Terminate();
-+
-+ break;
-+ }
-+ return ret;
-+}
-diff -Nru a/dlls/winedib.drv/driver.c b/dlls/winedib.drv/driver.c
---- a/dlls/winedib.drv/driver.c 1970-01-01 01:00:00.000000000 +0100
-+++ b/dlls/winedib.drv/driver.c 2010-08-04 16:08:44.474222017 +0200
-@@ -0,0 +1,254 @@
-+/*
-+ * Access to display driver
-+ *
-+ * Copyright 2009 Massimo Del Fedele
-+ *
-+ * This library is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License as published by the Free Software Foundation; either
-+ * version 2.1 of the License, or (at your option) any later version.
-+ *
-+ * This library is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with this library; if not, write to the Free Software
-+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
-+ */
-+
-+#include "config.h"
-+#include "wine/port.h"
-+
-+#include "dibdrv.h"
-+#include <stdio.h>
-+
-+WINE_DEFAULT_DEBUG_CHANNEL(dibdrv);
-+
-+/* CreateDriver
-+ * Allocate and fill the function pointer structure for a given module. */
-+static DC_FUNCTIONS *CreateDriver( HMODULE module )
-+{
-+ DC_FUNCTIONS *funcs;
-+
-+ if (!(funcs = HeapAlloc( GetProcessHeap(), 0, sizeof(*funcs))))
-+ return NULL;
-+
-+ /* fill the function table */
-+ if (module)
-+ {
-+#define GET_FUNC(name) funcs->p##name = (void*)GetProcAddress( module, #name )
-+ GET_FUNC(AbortDoc);
-+ GET_FUNC(AbortPath);
-+ GET_FUNC(AlphaBlend);
-+ GET_FUNC(AngleArc);
-+ GET_FUNC(Arc);
-+ GET_FUNC(ArcTo);
-+ GET_FUNC(BeginPath);
-+ GET_FUNC(BitBlt);
-+ GET_FUNC(ChoosePixelFormat);
-+ GET_FUNC(Chord);
-+ GET_FUNC(CloseFigure);
-+ GET_FUNC(CreateBitmap);
-+ GET_FUNC(CreateDC);
-+ GET_FUNC(CreateDIBSection);
-+ GET_FUNC(DeleteBitmap);
-+ GET_FUNC(DeleteDC);
-+ GET_FUNC(DescribePixelFormat);
-+ GET_FUNC(DeviceCapabilities);
-+ GET_FUNC(Ellipse);
-+ GET_FUNC(EndDoc);
-+ GET_FUNC(EndPage);
-+ GET_FUNC(EndPath);
-+ GET_FUNC(EnumDeviceFonts);
-+ GET_FUNC(ExcludeClipRect);
-+ GET_FUNC(ExtDeviceMode);
-+ GET_FUNC(ExtEscape);
-+ GET_FUNC(ExtFloodFill);
-+ GET_FUNC(ExtSelectClipRgn);
-+ GET_FUNC(ExtTextOut);
-+ GET_FUNC(FillPath);
-+ GET_FUNC(FillRgn);
-+ GET_FUNC(FlattenPath);
-+ GET_FUNC(FrameRgn);
-+ GET_FUNC(GdiComment);
-+ GET_FUNC(GetBitmapBits);
-+ GET_FUNC(GetCharWidth);
-+ GET_FUNC(GetDCOrgEx);
-+ GET_FUNC(GetDIBColorTable);
-+ GET_FUNC(GetDIBits);
-+ GET_FUNC(GetDeviceCaps);
-+ GET_FUNC(GetDeviceGammaRamp);
-+ GET_FUNC(GetICMProfile);
-+ GET_FUNC(GetNearestColor);
-+ GET_FUNC(GetPixel);
-+ GET_FUNC(GetPixelFormat);
-+ GET_FUNC(GetSystemPaletteEntries);
-+ GET_FUNC(GetTextExtentExPoint);
-+ GET_FUNC(GetTextMetrics);
-+ GET_FUNC(IntersectClipRect);
-+ GET_FUNC(InvertRgn);
-+ GET_FUNC(LineTo);
-+ GET_FUNC(MoveTo);
-+ GET_FUNC(ModifyWorldTransform);
-+ GET_FUNC(OffsetClipRgn);
-+ GET_FUNC(OffsetViewportOrg);
-+ GET_FUNC(OffsetWindowOrg);
-+ GET_FUNC(PaintRgn);
-+ GET_FUNC(PatBlt);
-+ GET_FUNC(Pie);
-+ GET_FUNC(PolyBezier);
-+ GET_FUNC(PolyBezierTo);
-+ GET_FUNC(PolyDraw);
-+ GET_FUNC(PolyPolygon);
-+ GET_FUNC(PolyPolyline);
-+ GET_FUNC(Polygon);
-+ GET_FUNC(Polyline);
-+ GET_FUNC(PolylineTo);
-+ GET_FUNC(RealizeDefaultPalette);
-+ GET_FUNC(RealizePalette);
-+ GET_FUNC(Rectangle);
-+ GET_FUNC(ResetDC);
-+ GET_FUNC(RestoreDC);
-+ GET_FUNC(RoundRect);
-+ GET_FUNC(SaveDC);
-+ GET_FUNC(ScaleViewportExt);
-+ GET_FUNC(ScaleWindowExt);
-+ GET_FUNC(SelectBitmap);
-+ GET_FUNC(SelectBrush);
-+ GET_FUNC(SelectClipPath);
-+ GET_FUNC(SelectFont);
-+ GET_FUNC(SelectPalette);
-+ GET_FUNC(SelectPen);
-+ GET_FUNC(SetArcDirection);
-+ GET_FUNC(SetBitmapBits);
-+ GET_FUNC(SetBkColor);
-+ GET_FUNC(SetBkMode);
-+ GET_FUNC(SetDCBrushColor);
-+ GET_FUNC(SetDCOrg);
-+ GET_FUNC(SetDCPenColor);
-+ GET_FUNC(SetDIBColorTable);
-+ GET_FUNC(SetDIBits);
-+ GET_FUNC(SetDIBitsToDevice);
-+ GET_FUNC(SetDeviceClipping);
-+ GET_FUNC(SetDeviceGammaRamp);
-+ GET_FUNC(SetMapMode);
-+ GET_FUNC(SetMapperFlags);
-+ GET_FUNC(SetPixel);
-+ GET_FUNC(SetPixelFormat);
-+ GET_FUNC(SetPolyFillMode);
-+ GET_FUNC(SetROP2);
-+ GET_FUNC(SetRelAbs);
-+ GET_FUNC(SetStretchBltMode);
-+ GET_FUNC(SetTextAlign);
-+ GET_FUNC(SetTextCharacterExtra);
-+ GET_FUNC(SetTextColor);
-+ GET_FUNC(SetTextJustification);
-+ GET_FUNC(SetViewportExt);
-+ GET_FUNC(SetViewportOrg);
-+ GET_FUNC(SetWindowExt);
-+ GET_FUNC(SetWindowOrg);
-+ GET_FUNC(SetWorldTransform);
-+ GET_FUNC(StartDoc);
-+ GET_FUNC(StartPage);
-+ GET_FUNC(StretchBlt);
-+ GET_FUNC(StretchDIBits);
-+ GET_FUNC(StrokeAndFillPath);
-+ GET_FUNC(StrokePath);
-+ GET_FUNC(SwapBuffers);
-+ GET_FUNC(UnrealizePalette);
-+ GET_FUNC(WidenPath);
-+
-+ /* OpenGL32 */
-+ GET_FUNC(wglCreateContext);
-+ GET_FUNC(wglDeleteContext);
-+ GET_FUNC(wglGetProcAddress);
-+ GET_FUNC(wglGetPbufferDCARB);
-+ GET_FUNC(wglMakeContextCurrentARB);
-+ GET_FUNC(wglMakeCurrent);
-+ GET_FUNC(wglSetPixelFormatWINE);
-+ GET_FUNC(wglShareLists);
-+ GET_FUNC(wglUseFontBitmapsA);
-+ GET_FUNC(wglUseFontBitmapsW);
-+#undef GET_FUNC
-+ }
-+ else
-+ memset( funcs, 0, sizeof(*funcs) );
-+
-+ /* add it to the list */
-+ return funcs;
-+}
-+
-+
-+/* LoadDisplayDriver
-+ * Loads display driver - partially grabbed from gdi32 */
-+static DC_FUNCTIONS *X11DrvFuncs = NULL;
-+static HMODULE X11DrvModule = 0;
-+DC_FUNCTIONS *_DIBDRV_LoadDisplayDriver(void)
-+{
-+ char buffer[MAX_PATH], libname[32], *name, *next;
-+ HMODULE module = 0;
-+ HKEY hkey;
-+
-+ if (X11DrvFuncs) /* already loaded */
-+ return X11DrvFuncs;
-+
-+ strcpy( buffer, "x11" ); /* default value */
-+ /* @@ Wine registry key: HKCU\Software\Wine\Drivers */
-+ if (!RegOpenKeyA( HKEY_CURRENT_USER, "Software\\Wine\\Drivers", &hkey ))
-+ {
-+ DWORD type, count = sizeof(buffer);
-+ RegQueryValueExA( hkey, "Graphics", 0, &type, (LPBYTE) buffer, &count );
-+ RegCloseKey( hkey );
-+ }
-+
-+ name = buffer;
-+ while (name)
-+ {
-+ next = strchr( name, ',' );
-+ if (next)
-+ *next++ = 0;
-+
-+ snprintf( libname, sizeof(libname), "wine%s.drv", name );
-+ if ((module = LoadLibraryA( libname )) != 0)
-+ break;
-+ name = next;
-+ }
-+
-+ if (!(X11DrvFuncs = CreateDriver(module)))
-+ {
-+ ERR( "Could not create graphics driver '%s'\n", buffer );
-+ FreeLibrary( module );
-+ ExitProcess(1);
-+ }
-+
-+ X11DrvModule = module;
-+ return X11DrvFuncs;
-+}
-+
-+/* FreeDisplayDriver
-+ Frees resources allocated by Display driver */
-+void _DIBDRV_FreeDisplayDriver(void)
-+{
-+ /* frees function table */
-+ if(X11DrvFuncs)
-+ {
-+ HeapFree(GetProcessHeap(), 0, X11DrvFuncs);
-+ X11DrvFuncs = 0;
-+ }
-+ /* and unload the module */
-+ if(X11DrvModule)
-+ {
-+ FreeLibrary(X11DrvModule);
-+ X11DrvModule = 0;
-+ }
-+}
-+
-+/* GetDisplayDriver
-+ Gets a pointer to display drives'function table */
-+inline DC_FUNCTIONS *_DIBDRV_GetDisplayDriver(void)
-+{
-+ return X11DrvFuncs;
-+
-+}
-diff -Nru a/dlls/winedib.drv/font.c b/dlls/winedib.drv/font.c
---- a/dlls/winedib.drv/font.c 1970-01-01 01:00:00.000000000 +0100
-+++ b/dlls/winedib.drv/font.c 2010-08-04 16:08:44.678222017 +0200
-@@ -0,0 +1,280 @@
-+/*
-+ * DIBDRV font objects
-+ *
-+ * Copyright 2009 Massimo Del Fedele
-+ *
-+ * This library is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License as published by the Free Software Foundation; either
-+ * version 2.1 of the License, or (at your option) any later version.
-+ *
-+ * This library is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with this library; if not, write to the Free Software
-+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
-+ *
-+ */
-+
-+#include "config.h"
-+#include "wine/port.h"
-+
-+#include "dibdrv.h"
-+
-+WINE_DEFAULT_DEBUG_CHANNEL(dibdrv);
-+
-+
-+#if 0
-+/* prints out some info about face */
-+void PrintFaceInfo(FT_Face face)
-+{
-+ int i;
-+
-+ fprintf(stderr, "----------------------------------------------------------\n");
-+ fprintf(stderr, "Family name :%s\n", face->family_name);
-+ fprintf(stderr, "Style name :%s\n", face->style_name);
-+ fprintf(stderr, "Num fixed sizes : %d\n", face->num_fixed_sizes);
-+ if(face->num_fixed_sizes)
-+ {
-+ fprintf(stderr, "Fixed sizes :");
-+ for(i = 0; i < face->num_fixed_sizes; i++)
-+ fprintf(stderr, " (%d, %d)", face->available_sizes[i].width, face->available_sizes[i].height);
-+ fprintf(stderr, "\n");
-+ }
-+ fprintf(stderr, "Face flags: ");
-+ if(face->face_flags & FT_FACE_FLAG_SCALABLE ) fprintf(stderr, "FT_FACE_FLAG_SCALABLE ");
-+ if(face->face_flags & FT_FACE_FLAG_FIXED_SIZES ) fprintf(stderr, "FT_FACE_FLAG_FIXED_SIZES ");
-+ if(face->face_flags & FT_FACE_FLAG_FIXED_WIDTH ) fprintf(stderr, "FT_FACE_FLAG_FIXED_WIDTH ");
-+ if(face->face_flags & FT_FACE_FLAG_SFNT ) fprintf(stderr, "FT_FACE_FLAG_SFNT ");
-+ if(face->face_flags & FT_FACE_FLAG_HORIZONTAL ) fprintf(stderr, "FT_FACE_FLAG_HORIZONTAL ");
-+ if(face->face_flags & FT_FACE_FLAG_VERTICAL ) fprintf(stderr, "FT_FACE_FLAG_VERTICAL ");
-+ if(face->face_flags & FT_FACE_FLAG_KERNING ) fprintf(stderr, "FT_FACE_FLAG_KERNING ");
-+ if(face->face_flags & FT_FACE_FLAG_FAST_GLYPHS ) fprintf(stderr, "FT_FACE_FLAG_FAST_GLYPHS ");
-+ if(face->face_flags & FT_FACE_FLAG_MULTIPLE_MASTERS ) fprintf(stderr, "FT_FACE_FLAG_MULTIPLE_MASTERS ");
-+ if(face->face_flags & FT_FACE_FLAG_GLYPH_NAMES ) fprintf(stderr, "FT_FACE_FLAG_GLYPH_NAMES ");
-+ if(face->face_flags & FT_FACE_FLAG_EXTERNAL_STREAM ) fprintf(stderr, "FT_FACE_FLAG_EXTERNAL_STREAM ");
-+ if(face->face_flags & FT_FACE_FLAG_HINTER ) fprintf(stderr, "FT_FACE_FLAG_HINTER ");
-+ if(face->face_flags & FT_FACE_FLAG_CID_KEYED ) fprintf(stderr, "FT_FACE_FLAG_CID_KEYED ");
-+ if(face->face_flags & FT_FACE_FLAG_TRICKY ) fprintf(stderr, "FT_FACE_FLAG_TRICKY ");
-+ fprintf(stderr, "\n");
-+
-+ fprintf(stderr, "Style flags: ");
-+ if(face->style_flags & FT_STYLE_FLAG_ITALIC) fprintf(stderr, "FT_STYLE_FLAG_ITALIC ");
-+ if(face->style_flags & FT_STYLE_FLAG_BOLD) fprintf(stderr, "FT_STYLE_FLAG_BOLD ");
-+ fprintf(stderr, "\n");
-+ fprintf(stderr, "----------------------------------------------------------\n");
-+}
-+#endif
-+
-+
-+/**********************************************************************
-+ * DIBDRV_SetTextColor
-+ */
-+COLORREF DIBDRV_SetTextColor( DIBDRVPHYSDEV *physDev, COLORREF color )
-+{
-+ COLORREF res;
-+
-+ MAYBE(TRACE("physDev:%p, color:%08x\n", physDev, color));
-+
-+ if(physDev->hasDIB)
-+ {
-+ /* DIB section selected in, use DIB Engine */
-+
-+ /* do nothing if color is the same as actual one */
-+ if(color == physDev->textColor)
-+ return color;
-+
-+ /* stores old color and sets new one */
-+ res = physDev->textColor;
-+ physDev->textColor = color;
-+
-+#ifdef DIBDRV_ANTIALIASED_FONTS
-+ /* fills the text color table used on antialiased font display */
-+ if(physDev->physBitmap->funcs)
-+ {
-+ BYTE r, g, b;
-+ INT i;
-+
-+ r = GetRValue(color);
-+ g = GetGValue(color);
-+ b = GetBValue(color);
-+ for(i = 0; i < 256; i++)
-+ {
-+ physDev->textColorTable[i] = physDev->physBitmap->funcs->ColorToPixel(physDev->physBitmap, RGB(
-+ MulDiv(r, i, 255),
-+ MulDiv(g, i, 255),
-+ MulDiv(b, i, 255)
-+ ));
-+ }
-+ }
-+#endif
-+
-+ /* returns previous text color */
-+ return res;
-+ }
-+ else
-+ {
-+ /* DDB selected in, use X11 driver */
-+ res = _DIBDRV_GetDisplayDriver()->pSetTextColor(physDev->X11PhysDev, color);
-+ }
-+ return res;
-+}
-+
-+/***********************************************************************
-+ * DIBDRV_SelectFont
-+ */
-+HFONT DIBDRV_SelectFont( DIBDRVPHYSDEV *physDev, HFONT hfont, GdiFont *gdiFont )
-+{
-+ HFONT res;
-+ FT_Int i;
-+ FT_Error error;
-+ FT_CharMap charmap = NULL;
-+ LOGFONTW lf;
-+
-+ MAYBE(TRACE("physDev:%p, hfont:%p, gdiFont:%p\n", physDev, hfont, gdiFont));
-+
-+ if(physDev->hasDIB)
-+ {
-+ /* DIB section selected in, use DIB Engine */
-+
-+ /* gets font information */
-+ GetObjectW(hfont, sizeof(lf), &lf);
-+ MAYBE(TRACE("Font is : '%s'\n", debugstr_w(lf.lfFaceName)));
-+
-+ /* FIXME: just handles gdifont, don't know if it needs to handle hfont too
-+ BTW, still don't know how to get FT_Face from non-gdi font here
-+ */
-+ if(!gdiFont)
-+ {
-+ FIXME("No gdi font - unhandled by now.\n");
-+ return hfont;
-+ }
-+
-+ physDev->face = gdiFont->ft_face;
-+ if(!physDev->face)
-+ {
-+ FIXME("Error, null Ft_Face\n");
-+ return hfont;
-+ }
-+
-+#if 0
-+ /* prints out some info about face */
-+ if(TRACE_ON(dibdrv)) MAYBE(PrintFaceInfo(physDev->face));
-+#endif
-+ /* setup the correct charmap.... maybe */
-+ for (i = 0; i < physDev->face->num_charmaps; ++i)
-+ {
-+ if (physDev->face->charmaps[i]->platform_id != TT_PLATFORM_MICROSOFT)
-+ continue;
-+
-+ if (physDev->face->charmaps[i]->encoding_id == TT_MS_ID_UNICODE_CS)
-+ {
-+ charmap = physDev->face->charmaps[i];
-+ break;
-+ }
-+
-+ if (charmap == NULL)
-+ {
-+ WARN("Selected fallout charmap #%d\n", i);
-+ charmap = physDev->face->charmaps[i];
-+ }
-+ }
-+ if (charmap == NULL)
-+ {
-+ WARN("No Windows character map found\n");
-+ charmap = physDev->face->charmaps[0];
-+ return 0;
-+ }
-+
-+ error = pFT_Set_Charmap(physDev->face, charmap);
-+ if (error != FT_Err_Ok)
-+ {
-+ ERR("%s returned %i\n", "FT_Set_Charmap", error);
-+ return 0;
-+ }
-+
-+ /* we use GDI fonts, so just return false */
-+ return 0;
-+
-+ }
-+ else
-+ {
-+ /* DDB selected in, use X11 driver */
-+ res = _DIBDRV_GetDisplayDriver()->pSelectFont(physDev->X11PhysDev, hfont, gdiFont);
-+ }
-+ return res;
-+}
-+
-+/***********************************************************************
-+ * DIBDRV_EnumDeviceFonts
-+ */
-+BOOL DIBDRV_EnumDeviceFonts( DIBDRVPHYSDEV *physDev, LPLOGFONTW plf,
-+ FONTENUMPROCW proc, LPARAM lp )
-+{
-+ BOOL res;
-+
-+ MAYBE(TRACE("physDev:%p, plf:%p, proc:%p, lp:%lx\n", physDev, plf, proc, lp));
-+
-+ if(physDev->hasDIB)
-+ {
-+ /* DIB section selected in, use DIB Engine */
-+ ONCE(FIXME("STUB\n"));
-+ res = 0;
-+ }
-+ else
-+ {
-+ /* DDB selected in, use X11 driver */
-+ res = _DIBDRV_GetDisplayDriver()->pEnumDeviceFonts(physDev->X11PhysDev, plf, proc, lp);
-+ }
-+ return res;
-+}
-+
-+/***********************************************************************
-+ * DIBDRV_GetTextMetrics
-+ */
-+BOOL DIBDRV_GetTextMetrics( DIBDRVPHYSDEV *physDev, TEXTMETRICW *metrics )
-+{
-+ BOOL res;
-+
-+ MAYBE(TRACE("physDev:%p, metrics:%p\n", physDev, metrics));
-+
-+ if(physDev->hasDIB)
-+ {
-+ /* DIB section selected in, use DIB Engine */
-+ ONCE(FIXME("STUB\n"));
-+ res = 0;
-+ }
-+ else
-+ {
-+ /* DDB selected in, use X11 driver */
-+ res = _DIBDRV_GetDisplayDriver()->pGetTextMetrics(physDev->X11PhysDev, metrics);
-+ }
-+ return res;
-+}
-+
-+/***********************************************************************
-+ * DIBDRV_GetCharWidth
-+ */
-+BOOL DIBDRV_GetCharWidth( DIBDRVPHYSDEV *physDev, UINT firstChar, UINT lastChar,
-+ LPINT buffer )
-+{
-+ BOOL res;
-+
-+ MAYBE(TRACE("physDev:%p, firstChar:%d, lastChar:%d, buffer:%pn", physDev, firstChar, lastChar, buffer));
-+
-+ if(physDev->hasDIB)
-+ {
-+ /* DIB section selected in, use DIB Engine */
-+ ONCE(FIXME("STUB\n"));
-+ res = 0;
-+ }
-+ else
-+ {
-+ /* DDB selected in, use X11 driver */
-+ res = _DIBDRV_GetDisplayDriver()->pGetCharWidth(physDev->X11PhysDev, firstChar, lastChar, buffer);
-+ }
-+ return res;
-+}
-diff -Nru a/dlls/winedib.drv/freetype.c b/dlls/winedib.drv/freetype.c
---- a/dlls/winedib.drv/freetype.c 1970-01-01 01:00:00.000000000 +0100
-+++ b/dlls/winedib.drv/freetype.c 2010-08-04 16:08:44.580222017 +0200
-@@ -0,0 +1,142 @@
-+/*
-+ * Truetype font functions
-+ *
-+ * Copyright 2008 Massimo Del Fedele
-+ * This library is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License as published by the Free Software Foundation; either
-+ * version 2.1 of the License, or (at your option) any later version.
-+ *
-+ * This library is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with this library; if not, write to the Free Software
-+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
-+ */
-+
-+#include "config.h"
-+#include "wine/port.h"
-+
-+#include "dibdrv.h"
-+
-+WINE_DEFAULT_DEBUG_CHANNEL(dibdrv);
-+
-+#define MAKE_FUNCPTR(f) typeof(f) * p##f = NULL;
-+MAKE_FUNCPTR(FT_Done_Face)
-+MAKE_FUNCPTR(FT_Done_FreeType)
-+MAKE_FUNCPTR(FT_Get_Char_Index)
-+MAKE_FUNCPTR(FT_Get_Glyph_Name)
-+MAKE_FUNCPTR(FT_Get_Sfnt_Name)
-+MAKE_FUNCPTR(FT_Get_Sfnt_Name_Count)
-+MAKE_FUNCPTR(FT_Get_Sfnt_Table)
-+MAKE_FUNCPTR(FT_Init_FreeType)
-+MAKE_FUNCPTR(FT_Load_Glyph)
-+MAKE_FUNCPTR(FT_Load_Char)
-+MAKE_FUNCPTR(FT_Get_Glyph)
-+MAKE_FUNCPTR(FT_Glyph_Copy)
-+MAKE_FUNCPTR(FT_Glyph_To_Bitmap)
-+MAKE_FUNCPTR(FT_Done_Glyph)
-+MAKE_FUNCPTR(FT_New_Face)
-+MAKE_FUNCPTR(FT_Set_Charmap)
-+MAKE_FUNCPTR(FT_Set_Char_Size)
-+MAKE_FUNCPTR(FT_Set_Pixel_Sizes)
-+MAKE_FUNCPTR(FT_Get_First_Char)
-+MAKE_FUNCPTR(FT_Render_Glyph)
-+MAKE_FUNCPTR(FT_Glyph_Transform)
-+MAKE_FUNCPTR(FT_Bitmap_New)
-+MAKE_FUNCPTR(FT_Bitmap_Done)
-+MAKE_FUNCPTR(FT_Bitmap_Convert)
-+#undef MAKE_FUNCPTR
-+
-+/* freetype initialization flag */
-+static BOOL FreeType_Initialized = FALSE;
-+
-+/* freetype dll handle */
-+static void *ft_handle = NULL;
-+
-+/* freetype library handle */
-+FT_Library DIBDRV_ftLibrary = NULL;
-+
-+/* initialize freetype library */
-+BOOL _DIBDRV_FreeType_Init(void)
-+{
-+ FT_Int error;
-+
-+ ft_handle = wine_dlopen(SONAME_LIBFREETYPE, RTLD_NOW, NULL, 0);
-+ if(!ft_handle)
-+ {
-+ WINE_MESSAGE(
-+ "Wine cannot find the FreeType font library. To enable Wine to\n"
-+ "use TrueType fonts please install a version of FreeType greater than\n"
-+ "or equal to 2.0.5.\n"
-+ "http://www.freetype.org\n");
-+ return FALSE;
-+ }
-+
-+#define LOAD_FUNCPTR(f) if((p##f = wine_dlsym(ft_handle, #f, NULL, 0)) == NULL) goto sym_not_found;
-+ LOAD_FUNCPTR(FT_Done_Face)
-+ LOAD_FUNCPTR(FT_Done_FreeType)
-+ LOAD_FUNCPTR(FT_Get_Char_Index)
-+ LOAD_FUNCPTR(FT_Get_Glyph_Name)
-+ LOAD_FUNCPTR(FT_Get_Sfnt_Name)
-+ LOAD_FUNCPTR(FT_Get_Sfnt_Name_Count)
-+ LOAD_FUNCPTR(FT_Get_Sfnt_Table)
-+ LOAD_FUNCPTR(FT_Init_FreeType)
-+ LOAD_FUNCPTR(FT_Load_Glyph)
-+ LOAD_FUNCPTR(FT_Load_Char)
-+ LOAD_FUNCPTR(FT_Get_Glyph)
-+ LOAD_FUNCPTR(FT_Glyph_Copy)
-+ LOAD_FUNCPTR(FT_Glyph_To_Bitmap)
-+ LOAD_FUNCPTR(FT_Done_Glyph)
-+ LOAD_FUNCPTR(FT_New_Face)
-+ LOAD_FUNCPTR(FT_Set_Charmap)
-+ LOAD_FUNCPTR(FT_Set_Char_Size)
-+ LOAD_FUNCPTR(FT_Set_Pixel_Sizes)
-+ LOAD_FUNCPTR(FT_Get_First_Char)
-+ LOAD_FUNCPTR(FT_Render_Glyph)
-+ LOAD_FUNCPTR(FT_Glyph_Transform)
-+ LOAD_FUNCPTR(FT_Bitmap_New)
-+ LOAD_FUNCPTR(FT_Bitmap_Done)
-+ LOAD_FUNCPTR(FT_Bitmap_Convert)
-+#undef LOAD_FUNCPTR
-+
-+ error = pFT_Init_FreeType(&DIBDRV_ftLibrary);
-+ if (error != FT_Err_Ok)
-+ {
-+ ERR("%s returned %i\n", "FT_Init_FreeType", error);
-+ wine_dlclose(ft_handle, NULL, 0);
-+ return FALSE;
-+ }
-+
-+ /* marks library as initialized */
-+ FreeType_Initialized = TRUE;
-+
-+ return TRUE;
-+
-+sym_not_found:
-+ WINE_MESSAGE(
-+ "Wine cannot find certain functions that it needs inside the FreeType\n"
-+ "font library. To enable Wine to use TrueType fonts please upgrade\n"
-+ "FreeType to at least version 2.0.5.\n"
-+ "http://www.freetype.org\n");
-+ wine_dlclose(ft_handle, NULL, 0);
-+ ft_handle = NULL;
-+ return FALSE;
-+}
-+
-+/* terminates freetype library */
-+void _DIBDRV_FreeType_Terminate(void)
-+{
-+ if(!FreeType_Initialized)
-+ return;
-+
-+ /* terminates and unload freetype library */
-+ pFT_Done_FreeType(DIBDRV_ftLibrary);
-+ wine_dlclose(ft_handle, NULL, 0);
-+ ft_handle = NULL;
-+ FreeType_Initialized = FALSE;
-+
-+}
-diff -Nru a/dlls/winedib.drv/freetype.h b/dlls/winedib.drv/freetype.h
---- a/dlls/winedib.drv/freetype.h 1970-01-01 01:00:00.000000000 +0100
-+++ b/dlls/winedib.drv/freetype.h 2010-08-04 16:08:44.581222017 +0200
-@@ -0,0 +1,190 @@
-+/*
-+ * Truetype font functions
-+ *
-+ * Copyright 2008 Massimo Del Fedele
-+ * This library is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License as published by the Free Software Foundation; either
-+ * version 2.1 of the License, or (at your option) any later version.
-+ *
-+ * This library is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with this library; if not, write to the Free Software
-+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
-+ */
-+#ifndef __WINE_DIBDRV_FREETYPE_H
-+#define __WINE_DIBDRV__FREETYPE_H
-+
-+/* freetype library for font support */
-+#ifdef HAVE_FREETYPE
-+
-+#include <ft2build.h>
-+#include FT_FREETYPE_H
-+#include FT_GLYPH_H
-+#include FT_TRUETYPE_TABLES_H
-+#include FT_SFNT_NAMES_H
-+#include FT_TRUETYPE_IDS_H
-+#include FT_BITMAP_H
-+
-+/* freetype library handle */
-+extern FT_Library DIBDRV_ftLibrary;
-+
-+/******************************************************************************************/
-+/* FREETYPE STUFFS */
-+/* grabbed from winex11.drv/freetype.c */
-+/******************************************************************************************/
-+
-+/* This is basically a copy of FT_Bitmap_Size with an extra element added */
-+typedef struct {
-+ FT_Short height;
-+ FT_Short width;
-+ FT_Pos size;
-+ FT_Pos x_ppem;
-+ FT_Pos y_ppem;
-+ FT_Short internal_leading;
-+} Bitmap_Size;
-+
-+/* FT_Bitmap_Size gained 3 new elements between FreeType 2.1.4 and 2.1.5
-+ So to let this compile on older versions of FreeType we'll define the
-+ new structure here. */
-+typedef struct {
-+ FT_Short height, width;
-+ FT_Pos size, x_ppem, y_ppem;
-+} My_FT_Bitmap_Size;
-+
-+struct enum_data
-+{
-+ ENUMLOGFONTEXW elf;
-+ NEWTEXTMETRICEXW ntm;
-+ DWORD type;
-+};
-+
-+typedef struct tagFace {
-+ struct list entry;
-+ WCHAR *StyleName;
-+ char *file;
-+ void *font_data_ptr;
-+ DWORD font_data_size;
-+ FT_Long face_index;
-+ FONTSIGNATURE fs;
-+ FONTSIGNATURE fs_links;
-+ DWORD ntmFlags;
-+ FT_Fixed font_version;
-+ BOOL scalable;
-+ Bitmap_Size size; /* set if face is a bitmap */
-+ BOOL external; /* TRUE if we should manually add this font to the registry */
-+ struct tagFamily *family;
-+ /* Cached data for Enum */
-+ struct enum_data *cached_enum_data;
-+} Face;
-+
-+typedef struct tagFamily {
-+ struct list entry;
-+ const WCHAR *FamilyName;
-+ struct list faces;
-+} Family;
-+
-+typedef struct {
-+ GLYPHMETRICS gm;
-+ INT adv; /* These three hold to widths of the unrotated chars */
-+ INT lsb;
-+ INT bbx;
-+ BOOL init;
-+} GM;
-+
-+typedef struct {
-+ FLOAT eM11, eM12;
-+ FLOAT eM21, eM22;
-+} FMAT2;
-+
-+typedef struct {
-+ DWORD hash;
-+ LOGFONTW lf;
-+ FMAT2 matrix;
-+ BOOL can_use_bitmap;
-+} FONT_DESC;
-+
-+typedef struct tagHFONTLIST {
-+ struct list entry;
-+ HFONT hfont;
-+} HFONTLIST;
-+
-+typedef struct {
-+ struct list entry;
-+ Face *face;
-+ struct tagGdiFont *font;
-+} CHILD_FONT;
-+
-+typedef struct tagGdiFont {
-+ struct list entry;
-+ GM **gm;
-+ DWORD gmsize;
-+ struct list hfontlist;
-+ OUTLINETEXTMETRICW *potm;
-+ DWORD total_kern_pairs;
-+ KERNINGPAIR *kern_pairs;
-+ struct list child_fonts;
-+
-+ /* the following members can be accessed without locking, they are never modified after creation */
-+ FT_Face ft_face;
-+ struct font_mapping *mapping;
-+ LPWSTR name;
-+ int charset;
-+ int codepage;
-+ BOOL fake_italic;
-+ BOOL fake_bold;
-+ BYTE underline;
-+ BYTE strikeout;
-+ INT orientation;
-+ FONT_DESC font_desc;
-+ LONG aveWidth, ppem;
-+ double scale_y;
-+ SHORT yMax;
-+ SHORT yMin;
-+ DWORD ntmFlags;
-+ FONTSIGNATURE fs;
-+ struct tagGdiFont *base_font;
-+ VOID *GSUB_Table;
-+ DWORD cache_num;
-+} GdiFont;
-+
-+/* initialize freetype library */
-+BOOL _DIBDRV_FreeType_Init(void);
-+
-+/* terminates freetype library */
-+void _DIBDRV_FreeType_Terminate(void);
-+
-+#define MAKE_FUNCPTR(f) extern typeof(f) * p##f;
-+MAKE_FUNCPTR(FT_Done_Face)
-+MAKE_FUNCPTR(FT_Done_FreeType)
-+MAKE_FUNCPTR(FT_Get_Char_Index)
-+MAKE_FUNCPTR(FT_Get_Glyph_Name)
-+MAKE_FUNCPTR(FT_Get_Sfnt_Name)
-+MAKE_FUNCPTR(FT_Get_Sfnt_Name_Count)
-+MAKE_FUNCPTR(FT_Get_Sfnt_Table)
-+MAKE_FUNCPTR(FT_Init_FreeType)
-+MAKE_FUNCPTR(FT_Load_Glyph)
-+MAKE_FUNCPTR(FT_Load_Char)
-+MAKE_FUNCPTR(FT_Get_Glyph)
-+MAKE_FUNCPTR(FT_Glyph_Copy)
-+MAKE_FUNCPTR(FT_Glyph_To_Bitmap)
-+MAKE_FUNCPTR(FT_Done_Glyph)
-+MAKE_FUNCPTR(FT_New_Face)
-+MAKE_FUNCPTR(FT_Set_Charmap)
-+MAKE_FUNCPTR(FT_Set_Char_Size)
-+MAKE_FUNCPTR(FT_Set_Pixel_Sizes)
-+MAKE_FUNCPTR(FT_Get_First_Char)
-+MAKE_FUNCPTR(FT_Render_Glyph)
-+MAKE_FUNCPTR(FT_Glyph_Transform)
-+MAKE_FUNCPTR(FT_Bitmap_New)
-+MAKE_FUNCPTR(FT_Bitmap_Done)
-+MAKE_FUNCPTR(FT_Bitmap_Convert)
-+#undef MAKE_FUNCPTR
-+
-+#endif /* HAVE_FREETYPE */
-+
-+#endif
-diff -Nru a/dlls/winedib.drv/graphics.c b/dlls/winedib.drv/graphics.c
---- a/dlls/winedib.drv/graphics.c 1970-01-01 01:00:00.000000000 +0100
-+++ b/dlls/winedib.drv/graphics.c 2010-08-04 16:08:44.739222017 +0200
-@@ -0,0 +1,1059 @@
-+/*
-+ * DIBDRV implementation of GDI driver graphics functions
-+ *
-+ * Copyright 2009 Massimo Del Fedele
-+ *
-+ * This library is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License as published by the Free Software Foundation; either
-+ * version 2.1 of the License, or (at your option) any later version.
-+ *
-+ * This library is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with this library; if not, write to the Free Software
-+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
-+ */
-+
-+#include "config.h"
-+#include "wine/port.h"
-+
-+#include "dibdrv.h"
-+
-+WINE_DEFAULT_DEBUG_CHANNEL(dibdrv);
-+
-+static inline void OrderInt(int *i1, int *i2)
-+{
-+ if(*i1 > *i2)
-+ {
-+ int tmp;
-+ tmp = *i1;
-+ *i1 = *i2;
-+ *i2 = tmp;
-+ }
-+}
-+
-+#define LEFT_SIDE 1
-+#define TOP_SIDE 2
-+#define RIGHT_SIDE 4
-+#define BOTTOM_SIDE 8
-+
-+/* clips a line segment by a rectangular window */
-+static inline BYTE outCodes(const POINT *p, const RECT *r)
-+{
-+ BYTE Code = 0;
-+
-+ if(p->y < r->top)
-+ Code |= TOP_SIDE;
-+ else if(p->y >= r->bottom)
-+ Code |= BOTTOM_SIDE;
-+ if(p->x >= r->right)
-+ Code |= RIGHT_SIDE;
-+ else if(p->x < r->left)
-+ Code |= LEFT_SIDE;
-+ return Code;
-+}
-+
-+static BOOL ClipLine(const POINT *p1, const POINT *p2, const RECT *r, POINT *pc1, POINT *pc2)
-+{
-+ BYTE outCode1,outCode2;
-+ int tmp;
-+ BYTE tmpCode;
-+
-+ pc1->x = p1->x; pc1->y = p1->y;
-+ pc2->x = p2->x; pc2->y = p2->y;
-+ while(TRUE)
-+ {
-+ outCode1 = outCodes(pc1, r);
-+ outCode2 = outCodes(pc2, r);
-+ if(outCode1 & outCode2)
-+ return FALSE;
-+ if(!outCode1 && !outCode2)
-+ return TRUE;
-+ if(!outCode1)
-+ {
-+ tmp = pc1->x; pc1->x = pc2->x; pc2->x = tmp;
-+ tmp = pc1->y; pc1->y = pc2->y; pc2->y = tmp;
-+ tmpCode = outCode1; outCode1 = outCode2; outCode2 = tmpCode;
-+ }
-+ if(outCode1 & TOP_SIDE)
-+ {
-+ pc1->x += MulDiv(pc2->x - pc1->x, r->top - pc1->y, pc2->y - pc1->y);
-+ pc1->y = r->top;
-+ }
-+ else if(outCode1 & BOTTOM_SIDE)
-+ {
-+ pc1->x += MulDiv(pc2->x - pc1->x, r->bottom - 1 - pc1->y, pc2->y - pc1->y);
-+ pc1->y = r->bottom - 1;
-+ }
-+ else if(outCode1 & RIGHT_SIDE)
-+ {
-+ pc1->y += MulDiv(pc2->y - pc1->y, r->right - 1 - pc1->x, pc2->x - pc1->x);
-+ pc1->x = r->right - 1;
-+ }
-+ else if(outCode1 & LEFT_SIDE)
-+ {
-+ pc1->y += MulDiv(pc2->y - pc1->y, r->left - pc1->x, pc2->x - pc1->x);
-+ pc1->x = r->left;
-+ }
-+ }
-+}
-+
-+/* Clips a polygon by an horizontal/vertical line
-+ which indicates the side :
-+*/
-+static inline BOOL PointInside(const POINT *p, const RECT *r, BYTE side)
-+{
-+ switch(side)
-+ {
-+ case 1: /* left */
-+ return p->x >= r->left;
-+ case 2: /* top */
-+ return p->y >= r->top;
-+ case 4: /* right */
-+ return p->x < r->right;
-+ case 8: /* bottom */
-+ return p->y < r->bottom;
-+ default:
-+ return FALSE;
-+ }
-+}
-+
-+static inline void SideIntersect(const POINT *p1, const POINT *p2, const RECT *r, BYTE side, POINT *inters)
-+{
-+ switch( side )
-+ {
-+ case LEFT_SIDE: /* left */
-+ inters->x = r->left;
-+ inters->y = MulDiv(p2->y - p1->y, r->left - p1->x, p2->x - p1->x) + p1->y;
-+ break;
-+ case TOP_SIDE: /* top */
-+ inters->x = MulDiv(p2->x - p1->x, r->top - p1->y, p2->y - p1->y) + p1->x;
-+ inters->y = r->top;
-+ break;
-+ case RIGHT_SIDE: /* right */
-+ inters->x = r->right - 1;
-+ inters->y = MulDiv(p2->y - p1->y, r->right - 1 - p1->x, p2->x - p1->x) + p1->y;
-+ break;
-+ case BOTTOM_SIDE: /* bottom */
-+ inters->x = MulDiv(p2->x - p1->x, r->bottom - 1 - p1->y, p2->y - p1->y) + p1->x;
-+ inters->y = r->bottom - 1;
-+ break;
-+ default:
-+ break;
-+ }
-+}
-+
-+
-+static BOOL ClipPolygonBySide(const POINT *pt, int count, const RECT *r, BYTE side, POINT **clipped, int *clippedCount)
-+{
-+ int iPoint;
-+ const POINT *p1, *p2;
-+ POINT *pOut;
-+
-+ if(!(*clipped = HeapAlloc(GetProcessHeap(), 0, sizeof(POINT) * count * 2)))
-+ return FALSE;
-+ pOut = *clipped;
-+ *clippedCount = 0;
-+
-+ p1 = pt + count - 1;
-+ p2 = pt;
-+ for(iPoint = 0 ; iPoint < count ; iPoint++)
-+ {
-+ if(PointInside(p2, r, side))
-+ {
-+ /* point p is "inside" */
-+ if(!PointInside(p1, r, side))
-+ {
-+ /* p is "inside" and s is "outside" */
-+ SideIntersect(p2, p1, r, side, pOut++);
-+ (*clippedCount)++;
-+ }
-+ pOut->x = p2->x;
-+ pOut->y = p2->y;
-+ pOut++;
-+ (*clippedCount)++;
-+ }
-+ else if(PointInside( p1, r, side ))
-+ {
-+ /* s is "inside" and p is "outside" */
-+ SideIntersect(p1, p2, r, side, pOut++);
-+ (*clippedCount)++;
-+ }
-+ p1 = p2++;
-+ }
-+ return *clippedCount;
-+}
-+
-+
-+/* Clips a polygon by a rectangular window - returns a new polygon */
-+static BOOL ClipPolygon(const POINT* pt, int count, const RECT *r, POINT **newPt, int *newCount)
-+{
-+ POINT *pc1, *pc2;
-+ int count1, count2;
-+ BOOL res;
-+
-+ if(!ClipPolygonBySide(pt, count, r, LEFT_SIDE, &pc1, &count1))
-+ return FALSE;
-+ res = ClipPolygonBySide(pc1, count1, r, TOP_SIDE, &pc2, &count2);
-+ HeapFree(GetProcessHeap(), 0, pc1);
-+ if(!res)
-+ return FALSE;
-+ res = ClipPolygonBySide(pc2, count2, r, RIGHT_SIDE, &pc1, &count1);
-+ HeapFree(GetProcessHeap(), 0, pc2);
-+ if(!res)
-+ return FALSE;
-+ res = ClipPolygonBySide(pc1, count1, r, BOTTOM_SIDE, &pc2, &count2);
-+ HeapFree(GetProcessHeap(), 0, pc1);
-+ if(!res)
-+ return FALSE;
-+
-+ *newPt = pc2;
-+ *newCount = count2;
-+ return TRUE;
-+}
-+
-+/* Intersects a line given by 2 points with an horizontal scan line at height y */
-+static BOOL ScanLine(const POINT *p1, const POINT *p2, int ys, POINT *pRes)
-+{
-+ if(!pRes)
-+ return FALSE;
-+
-+ /* if line lies completely over or under scan line, no intersection */
-+ if((p1->y < ys && p2->y < ys) || (p1->y >= ys && p2->y >= ys))
-+ return FALSE;
-+
-+ /* if line is parallel to x axis, we consider it not intersecting */
-+ if(p1->y == p2->y)
-+ return FALSE;
-+
-+ pRes->x = MulDiv(p2->x - p1->x, ys - p1->y, p2->y - p1->y) + p1->x;
-+ pRes->y = ys;
-+ return TRUE;
-+}
-+
-+/* Gets an x-ordered list of intersection points of a scanline at position y
-+ with a polygon/polyline */
-+static BOOL ScanPolygon(const POINT *pt, int count, int ys, POINT **scans, int *scanCount)
-+{
-+ const POINT *p1, *p2;
-+ POINT *pDest;
-+ int iPoint;
-+ POINT *ps1, *ps2;
-+ int i, j, tmp;
-+
-+ /* if not at least 2 points, nothing to return */
-+ if(count < 2)
-+ return FALSE;
-+
-+ /* intersections count is AT MOST 'count'; we don't care to
-+ allocate exact memory needed */
-+ *scans = HeapAlloc(GetProcessHeap(), 0, sizeof(POINT)*count);
-+ if(!*scans)
-+ return FALSE;
-+
-+ /* builds unordered intersections */
-+ pDest = *scans;
-+ *scanCount = 0;
-+ p2 = pt;
-+ for(iPoint = 0; iPoint < count-1; iPoint++)
-+ {
-+ p1 = p2;
-+ p2++;
-+ if(ScanLine(p1, p2, ys, pDest))
-+ {
-+ pDest++;
-+ (*scanCount)++;
-+ }
-+ }
-+ p1 = p2;
-+ p2 = pt;
-+ if(ScanLine(p1, p2, ys, pDest))
-+ {
-+ pDest++;
-+ (*scanCount)++;
-+ }
-+
-+ /* now we sort the list -- duped point are left into
-+ as they're needed for the scanline fill algorithm */
-+ for(i = 0, ps1 = *scans; i < *scanCount -1; i++, ps1++)
-+ for(j = i+1, ps2 = ps1+1; j < *scanCount; j++, ps2++)
-+ if(ps2->x < ps1->x)
-+ {
-+ tmp = ps2->x;
-+ ps2->x = ps1->x;
-+ ps1->x = tmp;
-+ tmp = ps2->y;
-+ ps2->y = ps1->y;
-+ ps1->y = tmp;
-+ }
-+
-+ return TRUE;
-+}
-+
-+/* gets bounding box of a polygon */
-+static void PolygonBoundingBox(const POINT *pt, int count, RECT *bBox)
-+{
-+ const POINT *p;
-+ int iPoint;
-+
-+ bBox->left = MAXLONG; bBox->right = -MAXLONG;
-+ bBox->top = MAXLONG; bBox->bottom = -MAXLONG;
-+ for(p = pt, iPoint = 0; iPoint < count; iPoint++, p++)
-+ {
-+ if(p->x < bBox->left ) bBox->left = p->x;
-+ if(p->x > bBox->right ) bBox->right = p->x;
-+ if(p->y < bBox->top ) bBox->top = p->y;
-+ if(p->y > bBox->bottom) bBox->bottom = p->y;
-+ }
-+}
-+
-+/* intersect 2 rectangles (just to not use USER32 one...)
-+ bottom and tight sides are considered OUTSIDE */
-+BOOL _DIBDRV_IntersectRect(RECT *d, const RECT *s1, const RECT *s2)
-+{
-+ if(s1->right <= s2->left ||
-+ s2->right <= s1->left ||
-+ s1->bottom <= s2->top ||
-+ s2->bottom <= s1->top
-+ )
-+ return FALSE;
-+ d->left = s1->left > s2->left ? s1->left : s2->left;
-+ d->top = s1->top > s2->top ? s1->top : s2->top;
-+ d->right = s1->right < s2->right ? s1->right : s2->right;
-+ d->bottom = s1->bottom < s2->bottom ? s1->bottom : s2->bottom;
-+ return TRUE;
-+}
-+
-+/* converts a rectangle form Word space to Device space */
-+void _DIBDRV_Rect_ws2ds(DIBDRVPHYSDEV *physDev, const RECT *src, RECT *dst)
-+{
-+ POINT pts[2];
-+ pts[0].x = src->left;
-+ pts[0].y = src->top;
-+ pts[1].x = src->right;
-+ pts[1].y = src->bottom;
-+ LPtoDP(physDev->hdc, pts, 2);
-+ dst->left = pts[0].x;
-+ dst->top = pts[0].y;
-+ dst->right = pts[1].x;
-+ dst->bottom = pts[1].y;
-+}
-+
-+/* converts positions from Word space to Device space */
-+void _DIBDRV_Position_ws2ds(DIBDRVPHYSDEV *physDev, int *x, int *y)
-+{
-+ POINT p;
-+ p.x = *x;
-+ p.y = *y;
-+ LPtoDP(physDev->hdc, &p, 1);
-+ *x = p.x;
-+ *y = p.y;
-+}
-+
-+void _DIBDRV_Positions_ws2ds(DIBDRVPHYSDEV *physDev, int *x1, int *y1, int *x2, int *y2)
-+{
-+ POINT pts[2];
-+ pts[0].x = *x1;
-+ pts[0].y = *y1;
-+ pts[1].x = *x2;
-+ pts[1].y = *y2;
-+ LPtoDP(physDev->hdc, pts, 2);
-+ *x1 = pts[0].x;
-+ *y1 = pts[0].y;
-+ *x2 = pts[1].x;
-+ *y2 = pts[1].y;
-+}
-+
-+/* converts sizes from Word space to Device space */
-+void _DIBDRV_Sizes_ws2ds(DIBDRVPHYSDEV *physDev, int *w, int *h)
-+{
-+ POINT pts[2];
-+ pts[0].x = 0;
-+ pts[0].y = 0;
-+ pts[1].x = *w;
-+ pts[1].y = *h;
-+ LPtoDP(physDev->hdc, pts, 2);
-+ *w = pts[1].x - pts[0].x;
-+ *h = pts[1].y - pts[0].y;
-+}
-+
-+/* converts positions from Device space to World space */
-+void _DIBDRV_Position_ds2ws(DIBDRVPHYSDEV *physDev, int *x, int *y)
-+{
-+ POINT p;
-+ p.x = *x;
-+ p.y = *y;
-+ DPtoLP(physDev->hdc, &p, 1);
-+ *x = p.x;
-+ *y = p.y;
-+}
-+
-+void _DIBDRV_Positions_ds2ws(DIBDRVPHYSDEV *physDev, int *x1, int *y1, int *x2, int *y2)
-+{
-+ POINT pts[2];
-+ pts[0].x = *x1;
-+ pts[0].y = *y1;
-+ pts[1].x = *x2;
-+ pts[1].y = *y2;
-+ DPtoLP(physDev->hdc, pts, 2);
-+ *x1 = pts[0].x;
-+ *y1 = pts[0].y;
-+ *x2 = pts[1].x;
-+ *y2 = pts[1].y;
-+}
-+
-+/* converts sizes from Device space to World space */
-+void _DIBDRV_Sizes_ds2ws(DIBDRVPHYSDEV *physDev, int *w, int *h)
-+{
-+ POINT pts[2];
-+ pts[0].x = 0;
-+ pts[0].y = 0;
-+ pts[1].x = *w;
-+ pts[1].y = *h;
-+ DPtoLP(physDev->hdc, pts, 2);
-+ *w = pts[1].x - pts[0].x;
-+ *h = pts[1].y - pts[0].y;
-+}
-+
-+/***********************************************************************
-+ * DIBDRV_Arc
-+ */
-+BOOL DIBDRV_Arc( DIBDRVPHYSDEV *physDev, int left, int top, int right, int bottom,
-+ int xstart, int ystart, int xend, int yend )
-+{
-+ BOOL res;
-+
-+ MAYBE(TRACE("physDev:%p, left:%d, top:%d, right:%d, bottom:%d, xstart:%d, ystart:%d, xend:%d, yend:%d\n",
-+ physDev, left, top, right, bottom, xstart, ystart, xend, yend));
-+
-+ if(physDev->hasDIB)
-+ {
-+ /* DIB section selected in, use DIB Engine */
-+ ONCE(FIXME("STUB\n"));
-+ res = TRUE;
-+ }
-+ else
-+ {
-+ /* DDB selected in, use X11 driver */
-+ res = _DIBDRV_GetDisplayDriver()->pArc(physDev->X11PhysDev, left, top, right, bottom,
-+ xstart, ystart, xend, yend);
-+ }
-+ return res;
-+}
-+
-+/***********************************************************************
-+ * DIBDRV_Chord
-+ */
-+BOOL DIBDRV_Chord( DIBDRVPHYSDEV *physDev, int left, int top, int right, int bottom,
-+ int xstart, int ystart, int xend, int yend )
-+{
-+ BOOL res;
-+
-+ MAYBE(TRACE("physDev:%p, left:%d, top:%d, right:%d, bottom:%d, xstart:%d, ystart:%d, xend:%d, yend:%d\n",
-+ physDev, left, top, right, bottom, xstart, ystart, xend, yend));
-+
-+ if(physDev->hasDIB)
-+ {
-+ /* DIB section selected in, use DIB Engine */
-+ ONCE(FIXME("STUB\n"));
-+ res = TRUE;
-+ }
-+ else
-+ {
-+ /* DDB selected in, use X11 driver */
-+ res = _DIBDRV_GetDisplayDriver()->pChord(physDev->X11PhysDev, left, top, right, bottom,
-+ xstart, ystart, xend, yend);
-+ }
-+ return res;
-+}
-+
-+/***********************************************************************
-+ * DIBDRV_Ellipse
-+ */
-+BOOL DIBDRV_Ellipse( DIBDRVPHYSDEV *physDev, int left, int top, int right, int bottom )
-+{
-+ BOOL res;
-+
-+ MAYBE(TRACE("physDev:%p, left:%d, top:%d, right:%d, bottom:%d\n",
-+ physDev, left, top, right, bottom));
-+
-+ if(physDev->hasDIB)
-+ {
-+ /* DIB section selected in, use DIB Engine */
-+ ONCE(FIXME("STUB\n"));
-+ res = TRUE;
-+ }
-+ else
-+ {
-+ /* DDB selected in, use X11 driver */
-+ res = _DIBDRV_GetDisplayDriver()->pEllipse(physDev->X11PhysDev, left, top, right, bottom);
-+ }
-+ return res;
-+}
-+
-+/**********************************************************************
-+ * DIBDRV_ExtFloodFill
-+ */
-+BOOL DIBDRV_ExtFloodFill( DIBDRVPHYSDEV *physDev, int x, int y, COLORREF color,
-+ UINT fillType )
-+{
-+ BOOL res;
-+
-+ MAYBE(TRACE("physDev:%p, x:%d, y:%d, color:%x, fillType:%d\n",
-+ physDev, x, y, color, fillType));
-+
-+ if(physDev->hasDIB)
-+ {
-+ /* DIB section selected in, use DIB Engine */
-+ ONCE(FIXME("STUB\n"));
-+ res = TRUE;
-+ }
-+ else
-+ {
-+ /* DDB selected in, use X11 driver */
-+ res = _DIBDRV_GetDisplayDriver()->pExtFloodFill(physDev->X11PhysDev, x, y, color, fillType);
-+ }
-+ return res;
-+}
-+
-+/***********************************************************************
-+ * DIBDRV_GetDCOrgEx
-+ */
-+BOOL DIBDRV_GetDCOrgEx( DIBDRVPHYSDEV *physDev, LPPOINT lpp )
-+{
-+ BOOL res;
-+
-+ MAYBE(TRACE("physDev:%p, lpp:%p\n", physDev, lpp));
-+
-+ if(physDev->hasDIB)
-+ {
-+ /* DIB section selected in, use DIB Engine */
-+ ONCE(FIXME("STUB\n"));
-+ res = TRUE;
-+ }
-+ else
-+ {
-+ /* DDB selected in, use X11 driver */
-+ res = _DIBDRV_GetDisplayDriver()->pGetDCOrgEx(physDev->X11PhysDev, lpp);
-+ }
-+ return res;
-+}
-+
-+/***********************************************************************
-+ * DIBDRV_GetPixel
-+ */
-+COLORREF DIBDRV_GetPixel( DIBDRVPHYSDEV *physDev, int x, int y )
-+{
-+ COLORREF res;
-+
-+ MAYBE(TRACE("physDev:%p, x:%d, y:%d\n", physDev, x, y));
-+
-+ if(physDev->hasDIB)
-+ {
-+ _DIBDRV_Position_ws2ds(physDev, &x, &y);
-+ res = physDev->physBitmap->funcs->GetPixel(physDev->physBitmap, x, y);
-+ }
-+ else
-+ {
-+ /* DDB selected in, use X11 driver */
-+ res = _DIBDRV_GetDisplayDriver()->pGetPixel(physDev->X11PhysDev, x, y);
-+ }
-+ return res;
-+}
-+
-+/***********************************************************************
-+ * DIBDRV_LineTo
-+ */
-+BOOL DIBDRV_LineTo( DIBDRVPHYSDEV *physDev, int x, int y )
-+{
-+ BOOL res;
-+ POINT curPos;
-+ RECT *r;
-+ int iRec;
-+ POINT p1, p2, pc1, pc2;
-+
-+ MAYBE(TRACE("physDev:%p, x:%d, y:%d\n", physDev, x, y));
-+
-+ if(physDev->hasDIB)
-+ {
-+ res = FALSE;
-+ GetCurrentPositionEx(physDev->hdc, &curPos);
-+
-+ /* converts position to device space */
-+ p1.x = curPos.x; p1.y = curPos.y;
-+ p2.x = x; p2.y = y;
-+ LPtoDP(physDev->hdc, &p1, 1);
-+ LPtoDP(physDev->hdc, &p2, 1);
-+
-+ /* cycle on all current clipping rectangles */
-+ r = physDev->regionRects;
-+ for(iRec = 0; iRec < physDev->regionRectCount; iRec++, r++)
-+ {
-+ _DIBDRV_ResetDashOrigin(physDev);
-+
-+ /* clipe line on current region area */
-+ if(ClipLine(&p1, &p2, r, &pc1, &pc2))
-+ {
-+ if(pc1.y == pc2.y)
-+ physDev->penHLine(physDev, pc1.x, pc2.x, pc1.y);
-+ else if(pc1.x == pc2.x)
-+ physDev->penVLine(physDev, pc1.x, pc1.y, pc2.y);
-+ else
-+ physDev->penLine(physDev, pc1.x, pc1.y, pc2.x, pc2.y);
-+ res = TRUE;
-+ }
-+ }
-+
-+ /* moves current position to next point */
-+ MoveToEx(physDev->hdc, x, y, NULL);
-+ }
-+ else
-+ {
-+ /* DDB selected in, use X11 driver */
-+ res = _DIBDRV_GetDisplayDriver()->pLineTo(physDev->X11PhysDev, x, y);
-+ }
-+ return res;
-+}
-+
-+/***********************************************************************
-+ * DIBDRV_PaintRgn
-+ */
-+BOOL DIBDRV_Rectangle( DIBDRVPHYSDEV *physDev, int left, int top, int right, int bottom);
-+BOOL DIBDRV_PaintRgn( DIBDRVPHYSDEV *physDev, HRGN hrgn )
-+{
-+ BOOL res = FALSE;
-+ int i;
-+ RECT *rect;
-+ RGNDATA *data;
-+ int size;
-+
-+ MAYBE(TRACE("physDev:%p, hrgn:%p\n", physDev, hrgn));
-+
-+ if(physDev->hasDIB)
-+ {
-+ /* gets needed region data size */
-+ if(!(size = GetRegionData(hrgn, 0, NULL)))
-+ goto fin;
-+
-+ /* allocates buffer and gets actual region data */
-+ if(!(data = HeapAlloc(GetProcessHeap(), 0, size)))
-+ goto fin;
-+ if(!GetRegionData(hrgn, size, data))
-+ {
-+ HeapFree(GetProcessHeap(), 0, data);
-+ goto fin;
-+ }
-+
-+ /* paints the filled rectangles */
-+ rect = (RECT *)data->Buffer;
-+ for(i = 0; i < data->rdh.nCount; i++)
-+ {
-+ DIBDRV_Rectangle( physDev, rect->left, rect->top, rect->right, rect->bottom);
-+ rect++;
-+ }
-+ HeapFree( GetProcessHeap(), 0, data );
-+ res = TRUE;
-+fin:
-+ ;
-+ }
-+ else
-+ {
-+ /* DDB selected in, use X11 driver */
-+ res = _DIBDRV_GetDisplayDriver()->pPaintRgn(physDev->X11PhysDev, hrgn);
-+ }
-+ return res;
-+}
-+
-+/***********************************************************************
-+ * DIBDRV_Pie
-+ */
-+BOOL DIBDRV_Pie( DIBDRVPHYSDEV *physDev, int left, int top, int right, int bottom,
-+ int xstart, int ystart, int xend, int yend )
-+{
-+ BOOL res;
-+
-+ MAYBE(TRACE("physDev:%p, left:%d, top:%d, right:%d, bottom:%d, xstart:%d, ystart:%d, xend:%d, yend:%d\n",
-+ physDev, left, top, right, bottom, xstart, ystart, xend, yend));
-+
-+ if(physDev->hasDIB)
-+ {
-+ /* DIB section selected in, use DIB Engine */
-+ ONCE(FIXME("STUB\n"));
-+ res = TRUE;
-+ }
-+ else
-+ {
-+ /* DDB selected in, use X11 driver */
-+ res = _DIBDRV_GetDisplayDriver()->pPie(physDev->X11PhysDev, left, top, right, bottom,
-+ xstart, ystart, xend, yend);
-+ }
-+ return res;
-+}
-+
-+/**********************************************************************
-+ * DIBDRV_Polygon
-+ */
-+BOOL DIBDRV_Polygon( DIBDRVPHYSDEV *physDev, const POINT* ptw, int count )
-+{
-+ BOOL res;
-+ POINT *pt;
-+ RECT *r;
-+ int iRec;
-+ POINT *clipped;
-+ int clippedCount;
-+ RECT bBox;
-+ int ys;
-+ POINT *scans;
-+ int scanCount, iScan;
-+ const POINT *p1, *p2;
-+ int iPoint;
-+ POINT pc1, pc2;
-+
-+ MAYBE(TRACE("physDev:%p, pt:%p, count:%d\n", physDev, ptw, count));
-+
-+ if(physDev->hasDIB)
-+ {
-+ /* DIB section selected in, use DIB Engine */
-+
-+ res = FALSE;
-+
-+ /* first converts all points to device coords */
-+ if(!(pt = HeapAlloc(GetProcessHeap(), 0, sizeof(POINT) * count)))
-+ goto fin;
-+ memcpy(pt, ptw, sizeof(POINT) * count);
-+ LPtoDP(physDev->hdc, pt, count);
-+
-+ /* cycle on all current clipping rectangles */
-+ r = physDev->regionRects;
-+ for(iRec = 0; iRec < physDev->regionRectCount; iRec++, r++)
-+ {
-+ /* filled area */
-+ if(ClipPolygon(pt, count, r, &clipped, &clippedCount))
-+ {
-+ /* gets polygon bounding box -- for ytop and ybottom */
-+ PolygonBoundingBox(clipped, clippedCount, &bBox);
-+
-+ /* gets all ordered intersections of polygon with
-+ current scanline */
-+ for(ys = bBox.top; ys < bBox.bottom; ys++)
-+ {
-+ if(ScanPolygon(clipped, clippedCount, ys, &scans, &scanCount))
-+ {
-+ if(scanCount >= 2)
-+ {
-+ res = TRUE;
-+ p1 = scans;
-+ p2 = p1+1;
-+ iScan = 0;
-+ while(iScan < scanCount - 1)
-+ {
-+ physDev->brushHLine(physDev, p1->x, p2->x, ys);
-+ p1 +=2;
-+ p2 +=2;
-+ iScan +=2;
-+ }
-+ }
-+ HeapFree(GetProcessHeap(), 0, scans);
-+ }
-+ }
-+ HeapFree(GetProcessHeap(), 0, clipped);
-+ }
-+
-+ /* perimeter -- don't use PolyLine for speed */
-+ p2 = pt;
-+ for(iPoint = 0; iPoint < count -1; iPoint++)
-+ {
-+ p1 = p2++;
-+ if(ClipLine(p1, p2, r, &pc1, &pc2))
-+ {
-+ res = TRUE;
-+ physDev->penLine(physDev, pc1.x, pc1.y, pc2.x, pc2.y);
-+ }
-+ }
-+ p1 = p2;
-+ p2 = pt;
-+ if(ClipLine(p1, p2, r, &pc1, &pc2))
-+ {
-+ res = TRUE;
-+ physDev->penLine(physDev, pc1.x, pc1.y, pc2.x, pc2.y);
-+ }
-+ }
-+
-+ HeapFree(GetProcessHeap(), 0, pt);
-+
-+ }
-+ else
-+ {
-+ /* DDB selected in, use X11 driver */
-+ res = _DIBDRV_GetDisplayDriver()->pPolygon(physDev->X11PhysDev, ptw, count);
-+ }
-+fin:
-+ return res;
-+}
-+
-+/**********************************************************************
-+ * DIBDRV_Polyline
-+ */
-+BOOL DIBDRV_Polyline( DIBDRVPHYSDEV *physDev, const POINT* ptw, int count )
-+{
-+ BOOL res;
-+
-+ MAYBE(TRACE("physDev:%p, pt:%p, count:%d\n", physDev, ptw, count));
-+
-+ if(physDev->hasDIB)
-+ {
-+ /* DIB section selected in, use DIB Engine */
-+ POINT *pt;
-+ RECT *r;
-+ POINT pc1, pc2;
-+ int iRec, iPoint;
-+
-+ if(count < 2)
-+ return FALSE;
-+ res = FALSE;
-+
-+ /* first converts all points to device coords */
-+ if(!(pt = HeapAlloc(GetProcessHeap(), 0, sizeof(POINT) * count)))
-+ return FALSE;
-+ memcpy(pt, ptw, sizeof(POINT) * count);
-+ LPtoDP(physDev->hdc, pt, count);
-+
-+ r = physDev->regionRects;
-+ for(iRec = 0; iRec < physDev->regionRectCount; iRec++)
-+ {
-+ const POINT *p2 = pt, *p1;
-+ for(iPoint = 0; iPoint < count -1; iPoint++)
-+ {
-+ p1 = p2++;
-+ if(ClipLine(p1, p2, r, &pc1, &pc2))
-+ {
-+ res = TRUE;
-+ physDev->penLine(physDev, pc1.x, pc1.y, pc2.x, pc2.y);
-+ }
-+ }
-+ r++;
-+ }
-+
-+ HeapFree(GetProcessHeap(), 0, pt);
-+
-+ return res;
-+ }
-+ else
-+ {
-+ /* DDB selected in, use X11 driver */
-+ res = _DIBDRV_GetDisplayDriver()->pPolyline(physDev->X11PhysDev, ptw, count);
-+ }
-+ return res;
-+}
-+
-+/**********************************************************************
-+ * DIBDRV_PolyPolygon
-+ */
-+BOOL DIBDRV_PolyPolygon( DIBDRVPHYSDEV *physDev, const POINT* pt, const int* counts, UINT polygons)
-+{
-+ BOOL res;
-+
-+ MAYBE(TRACE("physDev:%p, pt:%p, counts:%p, polygons:%d\n", physDev, pt, counts, polygons));
-+
-+ if(physDev->hasDIB)
-+ {
-+ /* DIB section selected in, use DIB Engine */
-+ ONCE(FIXME("STUB\n"));
-+ res = TRUE;
-+ }
-+ else
-+ {
-+ /* DDB selected in, use X11 driver */
-+ res = _DIBDRV_GetDisplayDriver()->pPolyPolygon(physDev->X11PhysDev, pt, counts, polygons);
-+ }
-+ return res;
-+}
-+
-+/**********************************************************************
-+ * DIBDRV_PolyPolyline
-+ */
-+BOOL DIBDRV_PolyPolyline( DIBDRVPHYSDEV *physDev, const POINT* pt, const DWORD* counts,
-+ DWORD polylines )
-+{
-+ BOOL res;
-+
-+ MAYBE(TRACE("physDev:%p, pt:%p, counts:%p, polylines:%d\n", physDev, pt, counts, polylines));
-+
-+ if(physDev->hasDIB)
-+ {
-+ /* DIB section selected in, use DIB Engine */
-+ ONCE(FIXME("STUB\n"));
-+ res = TRUE;
-+ }
-+ else
-+ {
-+ /* DDB selected in, use X11 driver */
-+ res = _DIBDRV_GetDisplayDriver()->pPolyPolyline(physDev->X11PhysDev, pt, counts, polylines);
-+ }
-+ return res;
-+}
-+
-+/***********************************************************************
-+ * DIBDRV_Rectangle
-+ */
-+BOOL DIBDRV_Rectangle( DIBDRVPHYSDEV *physDev, int x1, int y1, int x2, int y2)
-+{
-+ BOOL res;
-+ int i;
-+ RECT rWorld, rDevice, rClipped;
-+ RECT *r;
-+ int iRec;
-+
-+ MAYBE(TRACE("physDev:%p, left:%d, top:%d, right:%d, bottom:%d\n", physDev, x1, y1, x2, y2));
-+
-+ if(physDev->hasDIB)
-+ {
-+ res = FALSE;
-+
-+ OrderInt(&x1, &x2);
-+ OrderInt(&y1, &y2);
-+
-+ /* converts to device space */
-+ rWorld.left = x1; rWorld.top = y1; rWorld.right = x2; rWorld.bottom = y2;
-+ _DIBDRV_Rect_ws2ds(physDev, &rWorld, &rDevice);
-+
-+ /* loop on all clip region rectangles */
-+ r = physDev->regionRects;
-+ for(iRec = 0; iRec < physDev->regionRectCount; iRec++, r++)
-+ {
-+ /* clips rectangle to current region */
-+ if(_DIBDRV_IntersectRect(&rClipped, &rDevice, r))
-+ {
-+ x1 = rClipped.left; y1 = rClipped.top;
-+ x2 = rClipped.right; y2 = rClipped.bottom;
-+
-+ _DIBDRV_ResetDashOrigin(physDev);
-+
-+ /* fill the inside, if not null brush */
-+ if(physDev->brushStyle != BS_NULL)
-+ {
-+ if(x2 > x1)
-+ for (i = y1; i < y2; i++)
-+ physDev->brushHLine(physDev, x1, x2, i);
-+ }
-+
-+ /* draw perimeter, if not null pen */
-+ if(physDev->penStyle != PS_NULL)
-+ {
-+
-+ /* particular case where the rectangle
-+ degenerates to a line or a point */
-+ if(x1 >= x2 - 1)
-+ physDev->penVLine(physDev, x1, y1, y2);
-+ else if (y1 >= y2 -1)
-+ physDev->penHLine(physDev, x1, x2, y1);
-+ else
-+ {
-+ /* Draw the perimeter */
-+ physDev->penHLine(physDev, x1 , x2 , y1 );
-+ physDev->penHLine(physDev, x1 , x2 , y2 - 1);
-+ physDev->penVLine(physDev, x1 , y1 + 1, y2 - 1);
-+ physDev->penVLine(physDev, x2 - 1, y1 + 1, y2 - 1);
-+ }
-+ }
-+ res = TRUE;
-+ }
-+ }
-+ }
-+ else
-+ {
-+ /* DDB selected in, use X11 driver */
-+ res = _DIBDRV_GetDisplayDriver()->pRectangle(physDev->X11PhysDev, x1, y1, x2, y2);
-+ }
-+ return res;
-+}
-+
-+/***********************************************************************
-+ * DIBDRV_RoundRect
-+ */
-+BOOL DIBDRV_RoundRect( DIBDRVPHYSDEV *physDev, int left, int top, int right,
-+ int bottom, int ell_width, int ell_height )
-+{
-+ BOOL res;
-+
-+ MAYBE(TRACE("physDev:%p, left:%d, top:%d, right:%d, bottom:%d, ell_width:%d, ell_height:%d\n",
-+ physDev, left, top, right, bottom, ell_width, ell_height));
-+
-+ if(physDev->hasDIB)
-+ {
-+ /* DIB section selected in, use DIB Engine */
-+ ONCE(FIXME("STUB\n"));
-+ res = TRUE;
-+ }
-+ else
-+ {
-+ /* DDB selected in, use X11 driver */
-+ res = _DIBDRV_GetDisplayDriver()->pRoundRect(physDev->X11PhysDev, left, top, right, bottom,
-+ ell_width, ell_height);
-+ }
-+ return res;
-+}
-+
-+/***********************************************************************
-+ * DIBDRV_SetPixel
-+ */
-+COLORREF DIBDRV_SetPixel( DIBDRVPHYSDEV *physDev, int x, int y, COLORREF color )
-+{
-+ COLORREF res;
-+ DWORD and, xor;
-+
-+ MAYBE(TRACE("physDev:%p, x:%d, y:%d, color:%x\n", physDev, x, y, color));
-+
-+ if(physDev->hasDIB)
-+ {
-+ /* get real colorref */
-+ color = _DIBDRV_MapColor(physDev, color);
-+
-+ /* map to pixel color / palette index */
-+ color = physDev->physBitmap->funcs->ColorToPixel(physDev->physBitmap, color);
-+
-+ _DIBDRV_Position_ws2ds(physDev, &x, &y);
-+
-+ /* gets previous pixel */
-+ res = physDev->physBitmap->funcs->GetPixel(physDev->physBitmap, x, y);
-+
-+ /* calculates AND and XOR from color */
-+ _DIBDRV_CalcAndXorMasks(GetROP2(physDev->hdc), color, &and, &xor);
-+
-+ /* sets the pixel */
-+ physDev->physBitmap->funcs->SetPixel(physDev->physBitmap, x, y, and, xor);
-+ }
-+ else
-+ {
-+ /* DDB selected in, use X11 driver */
-+ res = _DIBDRV_GetDisplayDriver()->pSetPixel(physDev->X11PhysDev, x, y, color);
-+ }
-+ return res;
-+}
-+
-+/***********************************************************************
-+ * DIBDRV_SetDCOrg
-+ */
-+DWORD DIBDRV_SetDCOrg( DIBDRVPHYSDEV *physDev, int x, int y )
-+{
-+ DWORD res;
-+
-+ MAYBE(TRACE("physDev:%p, x:%d, y:%d\n", physDev, x, y));
-+
-+ if(physDev->hasDIB)
-+ {
-+ /* DIB section selected in, use DIB Engine */
-+ ONCE(FIXME("STUB\n"));
-+ res = 0;
-+ }
-+ else
-+ {
-+ /* DDB selected in, use X11 driver */
-+ res = _DIBDRV_GetDisplayDriver()->pSetDCOrg(physDev->X11PhysDev, x, y);
-+ }
-+ return res;
-+}
-diff -Nru a/dlls/winedib.drv/Makefile.in b/dlls/winedib.drv/Makefile.in
---- a/dlls/winedib.drv/Makefile.in 1970-01-01 01:00:00.000000000 +0100
-+++ b/dlls/winedib.drv/Makefile.in 2010-08-04 16:08:44.775222017 +0200
-@@ -0,0 +1,40 @@
-+TOPSRCDIR = @top_srcdir@
-+TOPOBJDIR = ../..
-+SRCDIR = @srcdir@
-+VPATH = @srcdir@
-+EXTRAINCL = @FREETYPEINCL@ @FONTCONFIGINCL@
-+EXTRALIBS = @X_LIBS@ @X_PRE_LIBS@ @XLIB@ @X_EXTRA_LIBS@
-+MODULE = winedib.drv
-+IMPORTS = user32 gdi32 advapi32 kernel32 ntdll
-+
-+C_SRCS = \
-+ bitblt.c \
-+ bitmap.c \
-+ bitmaplist.c \
-+ clipping.c \
-+ convert.c \
-+ dc.c \
-+ dib.c \
-+ dibdrv_main.c \
-+ dibdrvbitmap.c \
-+ driver.c \
-+ font.c \
-+ freetype.c \
-+ graphics.c \
-+ opengl.c \
-+ palette.c \
-+ pen_brush.c \
-+ primitives.c \
-+ primitives_bitblt.c \
-+ primitives_color.c \
-+ primitives_convert.c \
-+ primitives_font.c \
-+ primitives_line.c \
-+ primitives_pixel.c \
-+ primitives_rop2.c \
-+ primitives_rop3.c \
-+ text.c \
-+ video.c
-+
-+@MAKE_DLL_RULES@
-+
-diff -Nru a/dlls/winedib.drv/opengl.c b/dlls/winedib.drv/opengl.c
---- a/dlls/winedib.drv/opengl.c 1970-01-01 01:00:00.000000000 +0100
-+++ b/dlls/winedib.drv/opengl.c 2010-08-04 16:08:44.478222017 +0200
-@@ -0,0 +1,392 @@
-+/*
-+ * DIBDRV OpenGL functions
-+ *
-+ * Copyright 2009 Massimo Del Fedele
-+ *
-+ * This library is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License as published by the Free Software Foundation; either
-+ * version 2.1 of the License, or (at your option) any later version.
-+ *
-+ * This library is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with this library; if not, write to the Free Software
-+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
-+ */
-+
-+#include "config.h"
-+#include "wine/port.h"
-+
-+#include "dibdrv.h"
-+
-+#define HPBUFFERARB void *
-+
-+WINE_DEFAULT_DEBUG_CHANNEL(dibdrv);
-+
-+int DIBDRV_ChoosePixelFormat( DIBDRVPHYSDEV *physDev,
-+ const PIXELFORMATDESCRIPTOR *ppfd )
-+{
-+ int res;
-+
-+ MAYBE(TRACE("physDev:%p, ppfd:%p\n", physDev, ppfd));
-+
-+ if(physDev->hasDIB)
-+ {
-+ /* DIB section selected in, use DIB Engine */
-+ ONCE(FIXME("TEMPORARY - fallback to X11 driver\n"));
-+ res = _DIBDRV_GetDisplayDriver()->pChoosePixelFormat(physDev->X11PhysDev, ppfd);
-+ }
-+ else
-+ {
-+ /* DDB selected in, use X11 driver */
-+ res = _DIBDRV_GetDisplayDriver()->pChoosePixelFormat(physDev->X11PhysDev, ppfd);
-+ }
-+ return res;
-+}
-+
-+int DIBDRV_DescribePixelFormat( DIBDRVPHYSDEV *physDev,
-+ int iPixelFormat,
-+ UINT nBytes,
-+ PIXELFORMATDESCRIPTOR *ppfd )
-+{
-+ int res;
-+
-+ MAYBE(TRACE("physDev:%p, iPixelFormat:%d, nBytes:%d, ppfd:%p\n", physDev, iPixelFormat, nBytes, ppfd));
-+
-+ if(physDev->hasDIB)
-+ {
-+ /* DIB section selected in, use DIB Engine */
-+ ONCE(FIXME("TEMPORARY - fallback to X11 driver\n"));
-+ res = _DIBDRV_GetDisplayDriver()->pDescribePixelFormat(physDev->X11PhysDev, iPixelFormat, nBytes, ppfd);
-+ }
-+ else
-+ {
-+ /* DDB selected in, use X11 driver */
-+ res = _DIBDRV_GetDisplayDriver()->pDescribePixelFormat(physDev->X11PhysDev, iPixelFormat, nBytes, ppfd);
-+ }
-+ return res;
-+}
-+
-+int DIBDRV_GetPixelFormat( DIBDRVPHYSDEV *physDev)
-+{
-+ int res;
-+
-+ MAYBE(TRACE("physDev:%p\n", physDev));
-+
-+ if(physDev->hasDIB)
-+ {
-+ /* DIB section selected in, use DIB Engine */
-+ ONCE(FIXME("TEMPORARY - fallback to X11 driver\n"));
-+ res = _DIBDRV_GetDisplayDriver()->pGetPixelFormat(physDev->X11PhysDev);
-+ }
-+ else
-+ {
-+ /* DDB selected in, use X11 driver */
-+ res = _DIBDRV_GetDisplayDriver()->pGetPixelFormat(physDev->X11PhysDev);
-+ }
-+ return res;
-+}
-+
-+BOOL DIBDRV_SetPixelFormat( DIBDRVPHYSDEV *physDev,
-+ int iPixelFormat,
-+ const PIXELFORMATDESCRIPTOR *ppfd )
-+{
-+ BOOL res;
-+
-+ MAYBE(TRACE("physDev:%p, iPixelFormat:%d, ppfd:%p\n", physDev, iPixelFormat, ppfd));
-+
-+ if(physDev->hasDIB)
-+ {
-+ /* DIB section selected in, use DIB Engine */
-+ ONCE(FIXME("TEMPORARY - fallback to X11 driver\n"));
-+ res = _DIBDRV_GetDisplayDriver()->pSetPixelFormat(physDev->X11PhysDev, iPixelFormat, ppfd);
-+ }
-+ else
-+ {
-+ /* DDB selected in, use X11 driver */
-+ res = _DIBDRV_GetDisplayDriver()->pSetPixelFormat(physDev->X11PhysDev, iPixelFormat, ppfd);
-+ }
-+ return res;
-+}
-+
-+BOOL DIBDRV_SwapBuffers( DIBDRVPHYSDEV *physDev )
-+{
-+ BOOL res;
-+
-+ MAYBE(TRACE("physDev:%p\n", physDev));
-+
-+ if(physDev->hasDIB)
-+ {
-+ /* DIB section selected in, use DIB Engine */
-+ ONCE(FIXME("TEMPORARY - fallback to X11 driver\n"));
-+ res = _DIBDRV_GetDisplayDriver()->pSwapBuffers(physDev->X11PhysDev);
-+ }
-+ else
-+ {
-+ /* DDB selected in, use X11 driver */
-+ res = _DIBDRV_GetDisplayDriver()->pSwapBuffers(physDev->X11PhysDev);
-+ }
-+ return res;
-+}
-+
-+/**
-+ * DIBDRV_wglCopyContext
-+ *
-+ * For OpenGL32 wglCopyContext.
-+ */
-+BOOL CDECL DIBDRV_wglCopyContext(HGLRC hglrcSrc, HGLRC hglrcDst, UINT mask)
-+{
-+ BOOL res;
-+
-+ MAYBE(TRACE("hglrcSrc:%p, hglrcDst:%p, mask:%x\n", hglrcSrc, hglrcDst, mask));
-+
-+ ONCE(FIXME("stub\n"));
-+ res = _DIBDRV_GetDisplayDriver()->pwglCopyContext(hglrcSrc, hglrcDst, mask);
-+
-+ return res;
-+}
-+
-+/**
-+ * DIBDRV_wglCreateContext
-+ *
-+ * For OpenGL32 wglCreateContext.
-+ */
-+HGLRC CDECL DIBDRV_wglCreateContext(DIBDRVPHYSDEV *physDev)
-+{
-+ HGLRC res;
-+
-+ MAYBE(TRACE("physDev:%p\n", physDev));
-+
-+ if(physDev->hasDIB)
-+ {
-+ /* DIB section selected in, use DIB Engine */
-+ ONCE(FIXME("TEMPORARY - fallback to X11 driver\n"));
-+ res = _DIBDRV_GetDisplayDriver()->pwglCreateContext(physDev->X11PhysDev);
-+ }
-+ else
-+ {
-+ /* DDB selected in, use X11 driver */
-+ res = _DIBDRV_GetDisplayDriver()->pwglCreateContext(physDev->X11PhysDev);
-+ }
-+ return res;
-+}
-+
-+/**
-+ * DIBDRV_wglDeleteContext
-+ *
-+ * For OpenGL32 wglDeleteContext.
-+ */
-+BOOL CDECL DIBDRV_wglDeleteContext(HGLRC hglrc)
-+{
-+ BOOL res;
-+
-+ MAYBE(TRACE("hglrc:%p\n", hglrc));
-+
-+ ONCE(FIXME("stub\n"));
-+ res = _DIBDRV_GetDisplayDriver()->pwglDeleteContext(hglrc);
-+ return res;
-+}
-+
-+/**
-+ * DIBDRV_wglGetProcAddress
-+ *
-+ * For OpenGL32 wglGetProcAddress.
-+ */
-+PROC CDECL DIBDRV_wglGetProcAddress(LPCSTR lpszProc)
-+{
-+ PROC res;
-+
-+ MAYBE(TRACE("lpszProc:%p\n", lpszProc));
-+
-+ ONCE(FIXME("stub\n"));
-+ res = _DIBDRV_GetDisplayDriver()->pwglGetProcAddress(lpszProc);
-+
-+ return res;
-+}
-+
-+/**
-+ * DIBDRV_wglGetPbufferDCARB
-+ *
-+ * WGL_ARB_pbuffer: wglGetPbufferDCARB
-+ * The function wglGetPbufferDCARB returns a device context for a pbuffer.
-+ * Gdi32 implements the part of this function which creates a device context.
-+ * This part associates the physDev with the X drawable of the pbuffer.
-+ */
-+HDC CDECL DIBDRV_wglGetPbufferDCARB(DIBDRVPHYSDEV *physDev, HPBUFFERARB hPbuffer)
-+{
-+ HDC res;
-+
-+ MAYBE(TRACE("physDev:%p, hPbuffer:%p\n", physDev, hPbuffer));
-+
-+ if(physDev->hasDIB)
-+ {
-+ /* DIB section selected in, use DIB Engine */
-+ ONCE(FIXME("TEMPORARY - fallback to X11 driver\n"));
-+ res = _DIBDRV_GetDisplayDriver()->pwglGetPbufferDCARB(physDev->X11PhysDev, hPbuffer);
-+ }
-+ else
-+ {
-+ /* DDB selected in, use X11 driver */
-+ res = _DIBDRV_GetDisplayDriver()->pwglGetPbufferDCARB(physDev->X11PhysDev, hPbuffer);
-+ }
-+ return res;
-+}
-+
-+/**
-+ * DIBDRV_wglMakeContextCurrentARB
-+ *
-+ * For OpenGL32 wglMakeContextCurrentARB
-+ */
-+BOOL CDECL DIBDRV_wglMakeContextCurrentARB(DIBDRVPHYSDEV* pDrawDev, DIBDRVPHYSDEV* pReadDev, HGLRC hglrc)
-+{
-+ BOOL res;
-+
-+ MAYBE(TRACE("pDrawDev:%p, pReadDev:%p, hglrc:%p\n", pDrawDev, pReadDev, hglrc));
-+
-+ if(pDrawDev->hasDIB && pReadDev->hasDIB)
-+ {
-+ /* DIB section selected both in source and dest DCs, use DIB Engine */
-+ ONCE(FIXME("TEMPORARY - fallback to X11 driver\n"));
-+ res = _DIBDRV_GetDisplayDriver()->pwglMakeContextCurrentARB(pDrawDev->X11PhysDev, pReadDev->X11PhysDev, hglrc);
-+ }
-+ if(!pDrawDev->hasDIB && !pReadDev->hasDIB)
-+ {
-+ /* DDB selected both in source and dest DCs, use X11 Driver */
-+ res = _DIBDRV_GetDisplayDriver()->pwglMakeContextCurrentARB(pDrawDev->X11PhysDev, pReadDev->X11PhysDev, hglrc);
-+ }
-+ else if(pDrawDev->hasDIB)
-+ {
-+ /* DIB selected in pDrawDev, must convert pReadDev to DIB and use DIB Engine */
-+ ONCE(FIXME("TEMPORARY - fallback to X11 driver\n"));
-+ res = _DIBDRV_GetDisplayDriver()->pwglMakeContextCurrentARB(pDrawDev->X11PhysDev, pReadDev->X11PhysDev, hglrc);
-+ }
-+ else /* if(pReadDev->hasDIB) */
-+ {
-+ /* DIB selected in pReadDev, must convert pReadDev to DDB and use X11 Driver */
-+ ONCE(FIXME("TEMPORARY - fallback to X11 driver\n"));
-+ res = _DIBDRV_GetDisplayDriver()->pwglMakeContextCurrentARB(pDrawDev->X11PhysDev, pReadDev->X11PhysDev, hglrc);
-+ }
-+ return res;
-+}
-+
-+/**
-+ * DIBDRV_wglMakeCurrent
-+ *
-+ * For OpenGL32 wglMakeCurrent.
-+ */
-+BOOL CDECL DIBDRV_wglMakeCurrent(DIBDRVPHYSDEV *physDev, HGLRC hglrc)
-+{
-+ BOOL res;
-+
-+ MAYBE(TRACE("physDev:%p, hglrc:%p\n", physDev, hglrc));
-+
-+ if(physDev->hasDIB)
-+ {
-+ /* DIB section selected in, use DIB Engine */
-+ ONCE(FIXME("TEMPORARY - fallback to X11 driver\n"));
-+ res = _DIBDRV_GetDisplayDriver()->pwglMakeCurrent(physDev->X11PhysDev, hglrc);
-+ }
-+ else
-+ {
-+ /* DDB selected in, use X11 driver */
-+ res = _DIBDRV_GetDisplayDriver()->pwglMakeCurrent(physDev->X11PhysDev, hglrc);
-+ }
-+ return res;
-+}
-+
-+/**
-+ * DIBDRV_wglSetPixelFormatWINE
-+ *
-+ * WGL_WINE_pixel_format_passthrough: wglSetPixelFormatWINE
-+ * This is a WINE-specific wglSetPixelFormat which can set the pixel format multiple times.
-+ */
-+BOOL CDECL DIBDRV_wglSetPixelFormatWINE(DIBDRVPHYSDEV *physDev, int iPixelFormat, const PIXELFORMATDESCRIPTOR *ppfd)
-+{
-+ BOOL res;
-+
-+ MAYBE(TRACE("physDev:%p, iPixelFormat:%d, ppfd:%p\n", physDev, iPixelFormat, ppfd));
-+
-+ if(physDev->hasDIB)
-+ {
-+ /* DIB section selected in, use DIB Engine */
-+ ONCE(FIXME("TEMPORARY - fallback to X11 driver\n"));
-+ res = _DIBDRV_GetDisplayDriver()->pwglSetPixelFormatWINE(physDev->X11PhysDev, iPixelFormat, ppfd);
-+ }
-+ else
-+ {
-+ /* DDB selected in, use X11 driver */
-+ res = _DIBDRV_GetDisplayDriver()->pwglSetPixelFormatWINE(physDev->X11PhysDev, iPixelFormat, ppfd);
-+ }
-+ return res;
-+}
-+
-+/**
-+ * DIBDRV_wglShareLists
-+ *
-+ * For OpenGL32 wglShareLists.
-+ */
-+BOOL CDECL DIBDRV_wglShareLists(HGLRC hglrc1, HGLRC hglrc2)
-+{
-+ BOOL res;
-+
-+ MAYBE(TRACE("hglrc1:%p, hglrc2:%p\n", hglrc1, hglrc2));
-+
-+ ONCE(FIXME("stub\n"));
-+ res = _DIBDRV_GetDisplayDriver()->pwglShareLists(hglrc1, hglrc2);
-+
-+ return res;
-+}
-+
-+/**
-+ * DIBDRV_wglUseFontBitmapsA
-+ *
-+ * For OpenGL32 wglUseFontBitmapsA.
-+ */
-+BOOL CDECL DIBDRV_wglUseFontBitmapsA(DIBDRVPHYSDEV *physDev, DWORD first, DWORD count, DWORD listBase)
-+{
-+ BOOL res;
-+
-+ MAYBE(TRACE("physDev:%p, first:%d, count:%d, listBase:%d\n", physDev, first, count, listBase));
-+
-+ if(physDev->hasDIB)
-+ {
-+ /* DIB section selected in, use DIB Engine */
-+ ONCE(FIXME("TEMPORARY - fallback to X11 driver\n"));
-+ res = _DIBDRV_GetDisplayDriver()->pwglUseFontBitmapsA(physDev->X11PhysDev, first, count, listBase);
-+ }
-+ else
-+ {
-+ /* DDB selected in, use X11 driver */
-+ res = _DIBDRV_GetDisplayDriver()->pwglUseFontBitmapsA(physDev->X11PhysDev, first, count, listBase);
-+ }
-+ return res;
-+}
-+
-+/**
-+ * DIBDRV_wglUseFontBitmapsW
-+ *
-+ * For OpenGL32 wglUseFontBitmapsW.
-+ */
-+BOOL CDECL DIBDRV_wglUseFontBitmapsW(DIBDRVPHYSDEV *physDev, DWORD first, DWORD count, DWORD listBase)
-+{
-+ BOOL res;
-+
-+ MAYBE(TRACE("physDev:%p, first:%d, count:%d, listBase:%d\n", physDev, first, count, listBase));
-+
-+ if(physDev->hasDIB)
-+ {
-+ /* DIB section selected in, use DIB Engine */
-+ ONCE(FIXME("TEMPORARY - fallback to X11 driver\n"));
-+ res = _DIBDRV_GetDisplayDriver()->pwglUseFontBitmapsW(physDev->X11PhysDev, first, count, listBase);
-+ }
-+ else
-+ {
-+ /* DDB selected in, use X11 driver */
-+ res = _DIBDRV_GetDisplayDriver()->pwglUseFontBitmapsW(physDev->X11PhysDev, first, count, listBase);
-+ }
-+ return res;
-+}
-diff -Nru a/dlls/winedib.drv/palette.c b/dlls/winedib.drv/palette.c
---- a/dlls/winedib.drv/palette.c 1970-01-01 01:00:00.000000000 +0100
-+++ b/dlls/winedib.drv/palette.c 2010-08-04 16:08:44.691222017 +0200
-@@ -0,0 +1,263 @@
-+/*
-+ * DIBDRV palette objects
-+ *
-+ * Copyright 2009 Massimo Del Fedele
-+ *
-+ * This library is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License as published by the Free Software Foundation; either
-+ * version 2.1 of the License, or (at your option) any later version.
-+ *
-+ * This library is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with this library; if not, write to the Free Software
-+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
-+ */
-+
-+#include "config.h"
-+#include "wine/port.h"
-+
-+#include "dibdrv.h"
-+
-+WINE_DEFAULT_DEBUG_CHANNEL(dibdrv);
-+
-+/* maps a colorref to actual color */
-+COLORREF _DIBDRV_MapColor(DIBDRVPHYSDEV *physDev, COLORREF color)
-+{
-+ WORD index;
-+ RGBQUAD *palColor;
-+ HPALETTE hPal;
-+ PALETTEENTRY paletteEntry;
-+
-+ switch(color >> 24)
-+ {
-+ case 0x10 : /* DIBINDEX */
-+ MAYBE(TRACE("DIBINDEX Color is %08x\n", color));
-+ index = color & 0xffff;
-+ if(index >= physDev->physBitmap->colorTableSize)
-+ {
-+ WARN("DIBINDEX color %d out of range, color table size is %d\n", index, physDev->physBitmap->colorTableSize);
-+ return 0;
-+ }
-+ palColor = physDev->physBitmap->colorTable + index;
-+ MAYBE(TRACE("Returning color %08x\n", RGB(palColor->rgbRed, palColor->rgbGreen, palColor->rgbBlue)));
-+ return RGB(palColor->rgbRed, palColor->rgbGreen, palColor->rgbBlue);
-+
-+ case 0x01: /* PALETTEINDEX */
-+ MAYBE(TRACE("PALETTEINDEX Color is %08x\n", color));
-+ index = color & 0xffff;
-+ if(!(hPal = GetCurrentObject(physDev->hdc, OBJ_PAL)))
-+ {
-+ ERR("Couldn't get palette\n");
-+ return 0;
-+ }
-+ if (!GetPaletteEntries(hPal, index, 1, &paletteEntry))
-+ {
-+ WARN("PALETTEINDEX(%x) : index %d is out of bounds, assuming black\n", color, index);
-+ return 0;
-+ }
-+ MAYBE(TRACE("Returning color %08x\n", RGB(paletteEntry.peRed, paletteEntry.peGreen, paletteEntry.peBlue)));
-+ return RGB(paletteEntry.peRed, paletteEntry.peGreen, paletteEntry.peBlue);
-+
-+ case 0x02: /* PALETTERGB */
-+ return _DIBDRV_GetNearestColor(physDev->physBitmap, color & 0xffffff);
-+
-+ default:
-+ /* RGB color -- we must process special case for monochrome bitmaps */
-+ if(physDev->physBitmap->bitCount == 1)
-+ {
-+ RGBQUAD *back = physDev->physBitmap->colorTable;
-+ RGBQUAD *fore = back+1;
-+ COLORREF lightColorref, darkColorref;
-+
-+ /* lightest color is considered to be 'foreground' one, i.e. associated to white color */
-+ if(physDev->physBitmap->lightColor == 1)
-+ {
-+ darkColorref = RGB(back->rgbRed, back->rgbGreen, back->rgbBlue);
-+ lightColorref = RGB(fore->rgbRed, fore->rgbGreen, fore->rgbBlue);
-+ }
-+ else
-+ {
-+ darkColorref = RGB(fore->rgbRed, fore->rgbGreen, fore->rgbBlue);
-+ lightColorref = RGB(back->rgbRed, back->rgbGreen, back->rgbBlue);
-+ }
-+
-+ /* tested on Windows XP -- if present in colortable, maps to corresponding color
-+ if not, if white maps to the lightest color, otherwise darkest one. */
-+ if(color == lightColorref || color == darkColorref)
-+ return color;
-+ else if (color == 0x00ffffff)
-+ return lightColorref;
-+ else
-+ return darkColorref;
-+ }
-+ else
-+ return color;
-+ }
-+}
-+
-+/***********************************************************************
-+ * DIBDRV_RealizePalette
-+ */
-+UINT DIBDRV_RealizePalette( DIBDRVPHYSDEV *physDev, HPALETTE hpal, BOOL primary )
-+{
-+ UINT res = 0;
-+
-+ MAYBE(TRACE("physDev:%p, hpal:%p, primary:%s\n", physDev, hpal, (primary ? "TRUE" : "FALSE")));
-+
-+ if(physDev && physDev->hasDIB)
-+ {
-+ /* DIB section selected in, additional (if needed) engine code */
-+ ONCE(FIXME("STUB\n"));
-+ res = 0;
-+ }
-+ else
-+ {
-+ /* we should in any case call X11 function, as UnrealizePalette() doesn't
-+ * take a physDev parameter */
-+ res = _DIBDRV_GetDisplayDriver()->pRealizePalette(physDev ? physDev->X11PhysDev : NULL, hpal, primary);
-+
-+ }
-+
-+ return res;
-+}
-+
-+/***********************************************************************
-+ * DIBDRV_UnrealizePalette
-+ */
-+BOOL DIBDRV_UnrealizePalette( HPALETTE hpal )
-+{
-+ BOOL res;
-+
-+ MAYBE(TRACE("hpal:%p\n", hpal));
-+
-+ /* we should in any case call X11 function, as UnrealizePalette() doesn't
-+ * take a physDev parameter */
-+ res = _DIBDRV_GetDisplayDriver()->pUnrealizePalette(hpal);
-+
-+ /* additional Engine code here, if needed */
-+ ONCE(FIXME("STUB\n"));
-+
-+ return res;
-+}
-+
-+/***********************************************************************
-+ * DIBDRV_GetSystemPaletteEntries
-+ */
-+UINT DIBDRV_GetSystemPaletteEntries( DIBDRVPHYSDEV *physDev, UINT start, UINT count,
-+ LPPALETTEENTRY entries )
-+{
-+ UINT res;
-+
-+ MAYBE(TRACE("physDev:%p, start:%d, count:%d, entries:%p\n", physDev, start, count, entries));
-+
-+ if(physDev->hasDIB)
-+ {
-+ /* DIB section selected in, use DIB Engine */
-+ ONCE(FIXME("STUB\n"));
-+ res = 0;
-+ }
-+ else
-+ {
-+ /* DDB selected in, use X11 driver */
-+ res = _DIBDRV_GetDisplayDriver()->pGetSystemPaletteEntries(physDev->X11PhysDev, start, count, entries);
-+ }
-+ return res;
-+}
-+
-+/***********************************************************************
-+ * DIBDRV_GetNearestColor
-+ */
-+COLORREF DIBDRV_GetNearestColor( DIBDRVPHYSDEV *physDev, COLORREF color )
-+{
-+ COLORREF res;
-+
-+ MAYBE(TRACE("physDev:%p, color:%x\n", physDev, color));
-+
-+ if(physDev->hasDIB)
-+ {
-+ /* DIB section selected in, use DIB Engine */
-+ ONCE(FIXME("STUB\n"));
-+ res = 0;
-+ }
-+ else
-+ {
-+ /* DDB selected in, use X11 driver */
-+ res = _DIBDRV_GetDisplayDriver()->pGetNearestColor(physDev->X11PhysDev, color);
-+ }
-+ return res;
-+}
-+
-+/***********************************************************************
-+ * DIBDRV_RealizeDefaultPalette
-+ */
-+UINT DIBDRV_RealizeDefaultPalette( DIBDRVPHYSDEV *physDev )
-+{
-+ UINT res;
-+#ifdef DIBDRV_ENABLE_MAYBE
-+ int i;
-+ RGBQUAD *q;
-+#endif
-+
-+ MAYBE(TRACE("physDev:%p\n", physDev));
-+
-+ if(physDev->hasDIB)
-+ {
-+ /* DIB section selected in, use DIB Engine */
-+ ONCE(FIXME("STUB\n"));
-+ /* HACK - we can't get the dib color table during SelectBitmap since it hasn't
-+ been initialized yet. This is called from DC_InitDC so it's a convenient place
-+ to grab the color table. */
-+ MAYBE(TRACE("Color table size = %d, Color table = %p\n", physDev->physBitmap->colorTableSize, physDev->physBitmap->colorTable));
-+ if(!physDev->physBitmap->colorTableGrabbed)
-+ {
-+ MAYBE(TRACE("Grabbing palette\n"));
-+ physDev->physBitmap->colorTable = HeapAlloc(GetProcessHeap(), 0, sizeof(physDev->physBitmap->colorTable[0]) * physDev->physBitmap->colorTableSize);
-+ GetDIBColorTable(physDev->hdc, 0, physDev->physBitmap->colorTableSize, physDev->physBitmap->colorTable);
-+#ifdef DIBDRV_ENABLE_MAYBE
-+ for(i = 0; i < physDev->physBitmap->colorTableSize; i++)
-+ {
-+ q = physDev->physBitmap->colorTable + i;
-+ TRACE(" %03d : R%03d G%03d B%03d\n", i, q->rgbRed, q->rgbGreen, q->rgbBlue);
-+ }
-+#endif
-+ physDev->physBitmap->colorTableGrabbed = TRUE;
-+
-+ /* for monochrome bitmaps, we need the 'lightest' color */
-+ _DIBDRVBITMAP_GetLightestColorIndex(physDev->physBitmap);
-+
-+ }
-+ res = 0;
-+ }
-+ else
-+ {
-+ /* DDB selected in, use X11 driver */
-+ res = _DIBDRV_GetDisplayDriver()->pRealizeDefaultPalette(physDev->X11PhysDev);
-+ }
-+ return res;
-+}
-+
-+BOOL DIBDRV_GetICMProfile(DIBDRVPHYSDEV *physDev, LPDWORD lpcbName, LPWSTR lpszFilename)
-+{
-+ BOOL res;
-+
-+ MAYBE(TRACE("physDev:%p, lpcpName:%p, lpszFilename:%p\n", physDev, lpcbName, lpszFilename));
-+
-+ if(physDev->hasDIB)
-+ {
-+ /* DIB section selected in, use DIB Engine */
-+ ONCE(FIXME("STUB\n"));
-+
-+ res = 0;
-+ }
-+ else
-+ {
-+ /* DDB selected in, use X11 driver */
-+ res = _DIBDRV_GetDisplayDriver()->pGetICMProfile(physDev->X11PhysDev, lpcbName, lpszFilename);
-+ }
-+ return res;
-+}
-diff -Nru a/dlls/winedib.drv/pen_brush.c b/dlls/winedib.drv/pen_brush.c
---- a/dlls/winedib.drv/pen_brush.c 1970-01-01 01:00:00.000000000 +0100
-+++ b/dlls/winedib.drv/pen_brush.c 2010-08-04 16:08:44.761222017 +0200
-@@ -0,0 +1,667 @@
-+/*
-+ * DIBDRV pen objects
-+ *
-+ * Copyright 2009 Massimo Del Fedele
-+ *
-+ * This library is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License as published by the Free Software Foundation; either
-+ * version 2.1 of the License, or (at your option) any later version.
-+ *
-+ * This library is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with this library; if not, write to the Free Software
-+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
-+ */
-+
-+#include "config.h"
-+#include "wine/port.h"
-+
-+#include "dibdrv.h"
-+
-+WINE_DEFAULT_DEBUG_CHANNEL(dibdrv);
-+
-+
-+static const DASHPATTERN dashPatterns[4] =
-+{
-+ {2, {18, 6}},
-+ {2, {3, 3}},
-+ {4, {9, 6, 3, 6}},
-+ {6, {9, 3, 3, 3, 3, 3}}
-+};
-+
-+static inline void OrderEndPoints(int *s, int *e)
-+{
-+ if(*s > *e)
-+ {
-+ int tmp;
-+ tmp = *s + 1;
-+ *s = *e + 1;
-+ *e = tmp;
-+ }
-+}
-+
-+static void SolidPenHLine(DIBDRVPHYSDEV *physDev, int x1, int x2, int y)
-+{
-+ OrderEndPoints(&x1, &x2);
-+ physDev->physBitmap->funcs->SolidHLine(physDev->physBitmap, x1, x2, y, physDev->penAnd, physDev->penXor);
-+}
-+
-+static void SolidPenVLine(DIBDRVPHYSDEV *physDev, int x, int y1, int y2)
-+{
-+ OrderEndPoints(&y1, &y2);
-+ physDev->physBitmap->funcs->SolidVLine(physDev->physBitmap, x, y1, y2, physDev->penAnd, physDev->penXor);
-+}
-+
-+static void WINAPI SolidPenLineCallback(int x, int y, LPARAM lparam)
-+{
-+ DIBDRVPHYSDEV *physDev = (DIBDRVPHYSDEV *)lparam;
-+
-+ physDev->physBitmap->funcs->SetPixel(physDev->physBitmap, x, y, physDev->penAnd, physDev->penXor);
-+ return;
-+}
-+
-+static void SolidPenLine(DIBDRVPHYSDEV *physDev, int x1, int y1, int x2, int y2)
-+{
-+ LineDDA(x1, y1, x2, y2, SolidPenLineCallback, (LPARAM)physDev);
-+}
-+
-+static inline void GetDashColors(DIBDRVPHYSDEV *physDev, DWORD *and, DWORD *xor)
-+{
-+ if(physDev->markSpace == mark)
-+ {
-+ *and = physDev->penAnd;
-+ *xor = physDev->penXor;
-+ }
-+ else if(GetBkMode(physDev->hdc) == OPAQUE)
-+ {
-+ *and = physDev->backgroundAnd;
-+ *xor = physDev->backgroundXor;
-+ }
-+ else
-+ {
-+ *and = 0xffffffff;
-+ *xor = 0;
-+ }
-+}
-+
-+static inline void NextDash(DIBDRVPHYSDEV *physDev)
-+{
-+ if(physDev->leftInDash != 0)
-+ return;
-+
-+ physDev->curDash++;
-+ if(physDev->curDash == physDev->penPattern->count)
-+ physDev->curDash = 0;
-+ physDev->leftInDash = physDev->penPattern->dashes[physDev->curDash];
-+ if(physDev->markSpace == mark)
-+ physDev->markSpace = space;
-+ else
-+ physDev->markSpace = mark;
-+}
-+
-+static void DashedPenHLine(DIBDRVPHYSDEV *physDev, int x1, int x2, int y)
-+{
-+ int x = x1;
-+ DWORD and, xor;
-+ DWORD dashLen;
-+
-+ if(x1 <= x2)
-+ {
-+ while(x != x2)
-+ {
-+ GetDashColors(physDev, &and, &xor);
-+
-+ dashLen = physDev->leftInDash;
-+ if(x + dashLen > x2)
-+ dashLen = x2 - x;
-+
-+ physDev->physBitmap->funcs->SolidHLine(physDev->physBitmap, x, x + dashLen, y, and, xor);
-+ x += dashLen;
-+
-+ physDev->leftInDash -= dashLen;
-+ NextDash(physDev);
-+ }
-+ }
-+ else
-+ {
-+ while(x != x2)
-+ {
-+ GetDashColors(physDev, &and, &xor);
-+
-+ dashLen = physDev->leftInDash;
-+ if(x - (int)dashLen < x2)
-+ dashLen = x - x2;
-+
-+ physDev->physBitmap->funcs->SolidHLine(physDev->physBitmap, x - dashLen + 1, x + 1, y, and, xor);
-+ x -= dashLen;
-+
-+ physDev->leftInDash -= dashLen;
-+ NextDash(physDev);
-+ }
-+ }
-+}
-+
-+static void DashedPenVLine(DIBDRVPHYSDEV *physDev, int x, int y1, int y2)
-+{
-+ int y = y1;
-+ DWORD and, xor;
-+ DWORD dashLen;
-+
-+ if(y1 <= y2)
-+ {
-+ while(y != y2)
-+ {
-+ GetDashColors(physDev, &and, &xor);
-+
-+ dashLen = physDev->leftInDash;
-+ if(y + dashLen > y2)
-+ dashLen = y2 - y;
-+
-+ physDev->physBitmap->funcs->SolidVLine(physDev->physBitmap, x, y, y + dashLen, and, xor);
-+ y += dashLen;
-+
-+ physDev->leftInDash -= dashLen;
-+ NextDash(physDev);
-+ }
-+ }
-+ else
-+ {
-+ while(y != y2)
-+ {
-+ GetDashColors(physDev, &and, &xor);
-+
-+ dashLen = physDev->leftInDash;
-+ if(y - (int)dashLen < y2)
-+ dashLen = y - y2;
-+
-+ physDev->physBitmap->funcs->SolidVLine(physDev->physBitmap, x, y - dashLen + 1, y + 1, and, xor);
-+ y -= dashLen;
-+
-+ physDev->leftInDash -= dashLen;
-+ NextDash(physDev);
-+ }
-+ }
-+}
-+
-+static void WINAPI DashedPenLineCallback(int x, int y, LPARAM lparam)
-+{
-+ DIBDRVPHYSDEV *physDev = (DIBDRVPHYSDEV *)lparam;
-+ DWORD and, xor;
-+
-+ GetDashColors(physDev, &and, &xor);
-+
-+ physDev->physBitmap->funcs->SetPixel(physDev->physBitmap, x, y, and, xor);
-+
-+ physDev->leftInDash--;
-+ NextDash(physDev);
-+
-+ return;
-+}
-+
-+static void DashedPenLine(DIBDRVPHYSDEV *physDev, int x1, int y1, int x2, int y2)
-+{
-+ LineDDA(x1, y1, x2, y2, DashedPenLineCallback, (LPARAM)physDev);
-+}
-+
-+void _DIBDRV_ResetDashOrigin(DIBDRVPHYSDEV *physDev)
-+{
-+ physDev->curDash = 0;
-+ if(physDev->penPattern)
-+ physDev->leftInDash = physDev->penPattern->dashes[0];
-+ physDev->markSpace = mark;
-+}
-+
-+#if 0
-+/* For 1bpp bitmaps, unless the selected foreground color exactly
-+ matches foreground's colortable OR it's the WHITE color,
-+ the background color is used -- tested on WinXP */
-+static DWORD AdjustFgColor(DIBDRVPHYSDEV *physDev, COLORREF color)
-+{
-+ RGBQUAD *back = physDev->physBitmap->colorTable;
-+ RGBQUAD *fore = physDev->physBitmap->colorTable+1;
-+
-+ if(
-+ fore->rgbRed == GetRValue(color) &&
-+ fore->rgbGreen == GetGValue(color) &&
-+ fore->rgbBlue == GetBValue(color))
-+ return 1;
-+ else if(
-+ back->rgbRed == GetRValue(color) &&
-+ back->rgbGreen == GetGValue(color) &&
-+ back->rgbBlue == GetBValue(color))
-+ return 0;
-+ else if((color & 0x00ffffff) == 0x00ffffff)
-+ return 1;
-+ else
-+ return 0;
-+}
-+
-+static void FixupFgColors1(DIBDRVPHYSDEV *physDev)
-+{
-+ int rop = GetROP2(physDev->hdc);
-+
-+ physDev->penColor = AdjustFgColor(physDev, physDev->penColorref);
-+ physDev->brushColor = AdjustFgColor(physDev, physDev->brushColorref);
-+
-+ _DIBDRV_CalcAndXorMasks(rop, physDev->penColor, &physDev->penAnd, &physDev->penXor);
-+ _DIBDRV_CalcAndXorMasks(rop, physDev->brushColor, &physDev->brushAnd, &physDev->brushXor);
-+ HeapFree(GetProcessHeap(), 0, physDev->brushAnds);
-+ HeapFree(GetProcessHeap(), 0, physDev->brushXors);
-+ physDev->brushAnds = NULL;
-+ physDev->brushXors = NULL;
-+}
-+#endif
-+
-+#if 0
-+/* For 1bpp bitmaps, unless the selected foreground color exactly
-+ matches one of the colors in the colortable, then the color that
-+ isn't the bkgnd color is used. */
-+static DWORD AdjustFgColor(DIBDRVPHYSDEV *physDev, COLORREF color)
-+{
-+ RGBQUAD rgb;
-+ int i;
-+
-+ rgb.rgbRed = GetRValue(color);
-+ rgb.rgbGreen = GetGValue(color);
-+ rgb.rgbBlue = GetBValue(color);
-+
-+ for(i = 0; i < physDev->physBitmap->colorTableSize; i++)
-+ {
-+ RGBQUAD *cur = physDev->physBitmap->colorTable + i;
-+ if((rgb.rgbRed == cur->rgbRed) && (rgb.rgbGreen == cur->rgbGreen) && (rgb.rgbBlue == cur->rgbBlue))
-+ return i;
-+ }
-+ return ~physDev->backgroundColor & 1;
-+}
-+
-+static void FixupFgColors1(DIBDRVPHYSDEV *physDev)
-+{
-+ int rop = GetROP2(physDev->hdc);
-+
-+ physDev->penColor = AdjustFgColor(physDev, physDev->penColorref);
-+ physDev->brushColor = AdjustFgColor(physDev, physDev->brushColorref);
-+
-+ _DIBDRV_CalcAndXorMasks(rop, physDev->penColor, &physDev->penAnd, &physDev->penXor);
-+ _DIBDRV_CalcAndXorMasks(rop, physDev->brushColor, &physDev->brushAnd, &physDev->brushXor);
-+ HeapFree(GetProcessHeap(), 0, physDev->brushAnds);
-+ HeapFree(GetProcessHeap(), 0, physDev->brushXors);
-+ physDev->brushAnds = NULL;
-+ physDev->brushXors = NULL;
-+}
-+#endif
-+
-+static void SolidBrushHLine(DIBDRVPHYSDEV *physDev, int x1, int x2, int y)
-+{
-+ OrderEndPoints(&x1, &x2);
-+ physDev->physBitmap->funcs->SolidHLine(physDev->physBitmap, x1, x2, y, physDev->brushAnd, physDev->brushXor);
-+}
-+
-+
-+static void GenerateMasks(DIBDRVPHYSDEV *physDev, DIBDRVBITMAP *bmp, DWORD **and, DWORD **xor)
-+{
-+ int rop = GetROP2(physDev->hdc);
-+ DWORD *color_ptr, *and_ptr, *xor_ptr;
-+ DWORD size = bmp->height * abs(bmp->stride);
-+
-+ *and = HeapAlloc(GetProcessHeap(), 0, size);
-+ *xor = HeapAlloc(GetProcessHeap(), 0, size);
-+
-+ color_ptr = bmp->bits;
-+ and_ptr = *and;
-+ xor_ptr = *xor;
-+
-+ while(size)
-+ {
-+ _DIBDRV_CalcAndXorMasks(rop, *color_ptr++, and_ptr++, xor_ptr++);
-+ size -= 4;
-+ }
-+}
-+
-+static void PatternBrushHLine(DIBDRVPHYSDEV *physDev, int x1, int x2, int y)
-+{
-+ DWORD *and, *xor, brushY = y % physDev->brushBitmap->height;
-+
-+ if(!physDev->brushAnds)
-+ GenerateMasks(physDev, physDev->brushBitmap, &physDev->brushAnds, &physDev->brushXors);
-+
-+ OrderEndPoints(&x1, &x2);
-+ and = (DWORD *)((char *)physDev->brushAnds + brushY * physDev->brushBitmap->stride);
-+ xor = (DWORD *)((char *)physDev->brushXors + brushY * physDev->brushBitmap->stride);
-+
-+ physDev->physBitmap->funcs->PatternHLine(physDev->physBitmap, x1, x2, y, and, xor, physDev->brushBitmap->width, x1 % physDev->brushBitmap->width);
-+}
-+
-+/* null function for PS_NULL and BS_NULL pen and brush styles */
-+void NullPenHLine(DIBDRVPHYSDEV *physDev, int x1, int x2, int y) {}
-+void NullPenVLine(DIBDRVPHYSDEV *physDev, int x, int y1, int y2) {}
-+void NullPenLine(DIBDRVPHYSDEV *physDev, int x1, int y1, int x2, int y2) {}
-+void NullBrushHLine(DIBDRVPHYSDEV *physDev, int x1, int x2, int y) {}
-+
-+/***********************************************************************
-+ * DIBDRV_SelectPen
-+ */
-+HPEN DIBDRV_SelectPen( DIBDRVPHYSDEV *physDev, HPEN hpen )
-+{
-+ HPEN res;
-+ LOGPEN logpen;
-+
-+ MAYBE(TRACE("physDev:%p, hpen:%p\n", physDev, hpen));
-+
-+ if(physDev->hasDIB)
-+ {
-+ GetObjectW(hpen, sizeof(logpen), &logpen);
-+
-+ physDev->penColorref = logpen.lopnColor;
-+ physDev->penColor = physDev->physBitmap->funcs->ColorToPixel(
-+ physDev->physBitmap,
-+ _DIBDRV_MapColor(physDev, physDev->penColorref));
-+
-+ _DIBDRV_CalcAndXorMasks(GetROP2(physDev->hdc), physDev->penColor, &physDev->penAnd, &physDev->penXor);
-+
-+ physDev->penStyle = logpen.lopnStyle;
-+ switch(logpen.lopnStyle)
-+ {
-+ default:
-+ ONCE(FIXME("Unhandled pen style %d\n", logpen.lopnStyle));
-+ physDev->penStyle = PS_SOLID;
-+ /* fall through */
-+ case PS_SOLID:
-+ physDev->penHLine = SolidPenHLine;
-+ physDev->penVLine = SolidPenVLine;
-+ physDev->penLine = SolidPenLine;
-+ physDev->penPattern = NULL;
-+ break;
-+
-+ case PS_DASH:
-+ case PS_DOT:
-+ case PS_DASHDOT:
-+ case PS_DASHDOTDOT:
-+ physDev->penHLine = DashedPenHLine;
-+ physDev->penVLine = DashedPenVLine;
-+ physDev->penLine = DashedPenLine;
-+ physDev->penPattern = &dashPatterns[logpen.lopnStyle - PS_DASH];
-+ _DIBDRV_ResetDashOrigin(physDev);
-+ break;
-+ case PS_NULL:
-+ physDev->penHLine = NullPenHLine;
-+ physDev->penVLine = NullPenVLine;
-+ physDev->penLine = NullPenLine;
-+ physDev->penPattern = NULL;
-+ break;
-+ }
-+ res = hpen;
-+ }
-+ else
-+ {
-+ /* DDB selected in, use X11 driver */
-+ res = _DIBDRV_GetDisplayDriver()->pSelectPen(physDev->X11PhysDev, hpen);
-+ }
-+ return res;
-+}
-+
-+/***********************************************************************
-+ * DIBDRV_SetDCPenColor
-+ */
-+COLORREF DIBDRV_SetDCPenColor( DIBDRVPHYSDEV *physDev, COLORREF crColor )
-+{
-+ COLORREF res;
-+
-+ MAYBE(TRACE("physDev:%p, crColor:%x\n", physDev, crColor));
-+
-+ if(physDev->hasDIB)
-+ {
-+ /* DIB section selected in, use DIB Engine */
-+ ONCE(FIXME("STUB\n"));
-+ res = crColor;
-+ }
-+ else
-+ {
-+ /* DDB selected in, use X11 driver */
-+ res = _DIBDRV_GetDisplayDriver()->pSetDCPenColor(physDev->X11PhysDev, crColor);
-+ }
-+ return res;
-+}
-+
-+/***********************************************************************
-+ * DIBDRV_SelectBrush
-+ */
-+HBRUSH DIBDRV_SelectBrush( DIBDRVPHYSDEV *physDev, HBRUSH hbrush )
-+{
-+ HBRUSH res = hbrush;
-+ LOGBRUSH logbrush;
-+
-+
-+ MAYBE(TRACE("physDev:%p, hbrush:%p\n", physDev, hbrush));
-+
-+ if(physDev->hasDIB)
-+ {
-+ GetObjectW(hbrush, sizeof(logbrush), &logbrush);
-+
-+ /* frees any currently selected DIB brush and cache */
-+ _DIBDRVBITMAP_Free(physDev->brushBitmap);
-+ physDev->brushBitmap = NULL;
-+ _DIBDRVBITMAP_Free(physDev->brushBmpCache);
-+ physDev->brushBmpCache = NULL;
-+ if(physDev->brushAnds)
-+ {
-+ HeapFree(GetProcessHeap(), 0, physDev->brushAnds);
-+ HeapFree(GetProcessHeap(), 0, physDev->brushXors);
-+ }
-+ physDev->brushAnds = NULL;
-+ physDev->brushXors = NULL;
-+
-+ switch (logbrush.lbStyle)
-+ {
-+ default:
-+ FIXME("Unhandled brush style %d\n", logbrush.lbStyle);
-+ physDev->brushColorref = 0;
-+ goto solid;
-+
-+ case BS_SOLID:
-+ physDev->brushColorref = logbrush.lbColor;
-+ solid:
-+ MAYBE(TRACE("SOLID Pattern -- color is %x\n", physDev->brushColorref));
-+ physDev->brushStyle = BS_SOLID;
-+ physDev->brushHLine = SolidBrushHLine;
-+
-+ physDev->brushColor = physDev->physBitmap->funcs->ColorToPixel(
-+ physDev->physBitmap,
-+ _DIBDRV_MapColor(physDev, physDev->brushColorref));
-+
-+ _DIBDRV_CalcAndXorMasks(physDev->rop2, physDev->brushColor,
-+ &physDev->brushAnd, &physDev->brushXor);
-+
-+ /* set the physDev brush style */
-+ physDev->brushStyle = BS_SOLID;
-+ physDev->isBrushBitmap = FALSE;
-+
-+ break;
-+
-+ case BS_DIBPATTERN8X8:
-+ case BS_DIBPATTERN:
-+ {
-+ DIBDRVBITMAP src;
-+ BITMAPINFO *bmi;
-+
-+ FIXME("DIB Pattern\n");
-+
-+ /* if no DIB selected in, fallback to null brush */
-+ if(!physDev->physBitmap->bits)
-+ {
-+ physDev->brushColorref = 0;
-+ goto solid;
-+ }
-+
-+ /* gets brush DIB's pointer */
-+ bmi = GlobalLock((HGLOBAL)logbrush.lbHatch);
-+
-+ /* initializes a temporary DIB with brush's one */
-+ if(!_DIBDRVBITMAP_InitFromBitmapinfo(&src, bmi, NULL))
-+ {
-+ ERR("Failed to initialize brush DIB\n");
-+ res = 0;
-+ goto err;
-+ }
-+
-+ /* converts brush bitmap to match currently selected one's format */
-+ if(!_DIBDRVBITMAP_Convert(physDev->brushBitmap, &src, physDev->physBitmap))
-+ {
-+ ERR("Failed to convert brush DIB\n");
-+ _DIBDRVBITMAP_Free(&src);
-+ res = 0;
-+ goto err;
-+ }
-+
-+ /* frees temporary DIB's data */
-+ _DIBDRVBITMAP_Free(&src);
-+
-+ /* use DIB pattern for brush lines */
-+ physDev->brushHLine = PatternBrushHLine;
-+
-+ err:
-+ /* frees brush's DIB pointer */
-+ GlobalUnlock((HGLOBAL)logbrush.lbHatch);
-+
-+ break;
-+ }
-+ case BS_DIBPATTERNPT:
-+ FIXME("BS_DIBPATTERNPT not supported\n");
-+ physDev->brushColorref = 0;
-+ goto solid;
-+
-+ case BS_HATCHED:
-+ FIXME("BS_HATCHED not supported\n");
-+ physDev->brushColorref = 0;
-+ goto solid;
-+
-+ case BS_NULL:
-+ {
-+ MAYBE(TRACE("NULL Pattern\n"));
-+ physDev->brushColorref = 0;
-+ physDev->brushColor = physDev->physBitmap->funcs->ColorToPixel(
-+ physDev->physBitmap,
-+ _DIBDRV_MapColor(physDev, 0));
-+ physDev->brushHLine = NullBrushHLine;
-+ break;
-+ }
-+
-+ case BS_PATTERN:
-+ case BS_PATTERN8X8:
-+ FIXME("BS_PATTERN not supported\n");
-+ physDev->brushColorref = 0;
-+ goto solid;
-+ }
-+
-+ MAYBE(TRACE("END\n"));
-+ return hbrush;
-+ }
-+ else
-+ {
-+ /* DDB selected in, use X11 driver */
-+
-+ /* we must check if a DIB pattern is requested */
-+ GetObjectW(hbrush, sizeof(logbrush), &logbrush);
-+ switch (logbrush.lbStyle)
-+ {
-+ case BS_DIBPATTERN8X8:
-+ case BS_DIBPATTERN:
-+ case BS_DIBPATTERNPT:
-+ FIXME("A DIB pattern was requested for a DDB bitmap\n");
-+ break;
-+
-+ case BS_SOLID:
-+ case BS_HATCHED:
-+ case BS_NULL:
-+ case BS_PATTERN:
-+ case BS_PATTERN8X8:
-+ default:
-+ break;
-+ }
-+ res = _DIBDRV_GetDisplayDriver()->pSelectBrush(physDev->X11PhysDev, hbrush);
-+ }
-+ return res;
-+}
-+
-+/***********************************************************************
-+ * DIBDRV_SetDCBrushColor
-+ */
-+COLORREF DIBDRV_SetDCBrushColor( DIBDRVPHYSDEV *physDev, COLORREF crColor )
-+{
-+ COLORREF res;
-+
-+ MAYBE(TRACE("physDev:%p, crColor:%x\n", physDev, crColor));
-+
-+ if(physDev->hasDIB)
-+ {
-+ /* DIB section selected in, use DIB Engine */
-+ ONCE(FIXME("STUB\n"));
-+ res = crColor;
-+ }
-+ else
-+ {
-+ /* DDB selected in, use X11 driver */
-+ res = _DIBDRV_GetDisplayDriver()->pSetDCBrushColor(physDev->X11PhysDev, crColor);
-+ }
-+ return res;
-+}
-+
-+/***********************************************************************
-+ * SetROP2
-+ */
-+int DIBDRV_SetROP2( DIBDRVPHYSDEV *physDev, int rop )
-+{
-+ int prevRop;
-+
-+ MAYBE(TRACE("physDev:%p, rop:%x\n", physDev, rop));
-+
-+ prevRop = physDev->rop2;
-+ physDev->rop2 = rop;
-+
-+ if(prevRop != rop)
-+ {
-+ _DIBDRV_CalcAndXorMasks(rop, physDev->penColor, &physDev->penAnd, &physDev->penXor);
-+ _DIBDRV_CalcAndXorMasks(rop, physDev->brushColor, &physDev->brushAnd, &physDev->brushXor);
-+ _DIBDRV_CalcAndXorMasks(rop, physDev->backgroundColor, &physDev->backgroundAnd, &physDev->backgroundXor);
-+ if(physDev->brushAnds)
-+ {
-+ HeapFree(GetProcessHeap(), 0, physDev->brushAnds);
-+ HeapFree(GetProcessHeap(), 0, physDev->brushXors);
-+ }
-+ physDev->brushAnds = NULL;
-+ physDev->brushXors = NULL;
-+ }
-+
-+ return prevRop;
-+ /* note : X11 Driver don't have SetROP2() function exported */
-+}
-+
-+/***********************************************************************
-+ * SetBkColor
-+ */
-+COLORREF DIBDRV_SetBkColor( DIBDRVPHYSDEV *physDev, COLORREF color )
-+{
-+ COLORREF res;
-+
-+ MAYBE(TRACE("physDev:%p, color:%x\n", physDev, color));
-+
-+ if(physDev->hasDIB)
-+ {
-+ physDev->backgroundColor = _DIBDRV_MapColor(physDev, color);
-+ physDev->backgroundColor = physDev->physBitmap->funcs->ColorToPixel(physDev->physBitmap, physDev->backgroundColor);
-+
-+ _DIBDRV_CalcAndXorMasks(physDev->rop2, physDev->backgroundColor, &physDev->backgroundAnd, &physDev->backgroundXor);
-+
-+ res = TRUE;
-+ }
-+ else
-+ {
-+ /* DDB selected in, use X11 driver */
-+ res = _DIBDRV_GetDisplayDriver()->pSetBkColor(physDev->X11PhysDev, color);
-+ }
-+ return res;
-+}
-diff -Nru a/dlls/winedib.drv/primitives_bitblt.c b/dlls/winedib.drv/primitives_bitblt.c
---- a/dlls/winedib.drv/primitives_bitblt.c 1970-01-01 01:00:00.000000000 +0100
-+++ b/dlls/winedib.drv/primitives_bitblt.c 2010-08-04 16:08:44.792222017 +0200
-@@ -0,0 +1,1401 @@
-+/*
-+ * DIB Engine BitBlt Primitives
-+ *
-+ * Copyright 2009 Massimo Del Fedele
-+ *
-+ * This library is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License as published by the Free Software Foundation; either
-+ * version 2.1 of the License, or (at your option) any later version.
-+ *
-+ * This library is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with this library; if not, write to the Free Software
-+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
-+ */
-+
-+#include "config.h"
-+#include "wine/port.h"
-+
-+#include "dibdrv.h"
-+
-+WINE_DEFAULT_DEBUG_CHANNEL(dibdrv);
-+
-+static inline COLORREF SwapColors(DWORD c)
-+{
-+ return ((c & 0x0000ff) << 16) | (c & 0x00ff00) | ((c & 0xff0000) >> 16);
-+
-+}
-+
-+/* shrinks a line -- srcWidth >= dstWidth */
-+static void ShrinkLine(DWORD *dst, int dstWidth, DWORD *src, int srcWidth)
-+{
-+ int srcPos, dstPos;
-+ int delta;
-+
-+ srcPos = 0;
-+ dstPos = 0;
-+ delta = 0;
-+ while(dstPos < dstWidth)
-+ {
-+ *dst++ = *src;
-+ while(delta < srcWidth)
-+ {
-+ srcPos++;
-+ src++;
-+ delta += dstWidth;
-+ }
-+ delta -= srcWidth;
-+ dstPos++;
-+ }
-+}
-+
-+/* expands a line -- srcWidth <= dstWidth */
-+static void ExpandLine(DWORD *dst, int dstWidth, DWORD *src, int srcWidth)
-+{
-+ int srcPos;
-+ int delta;
-+
-+ srcPos = 0;
-+ delta = 0;
-+ while(srcPos < srcWidth)
-+ {
-+ while(delta < dstWidth)
-+ {
-+ *dst++ = *src;
-+ delta += srcWidth;
-+ }
-+ delta -= dstWidth;
-+ src++;
-+ srcPos++;
-+ }
-+}
-+
-+/* stretch a line */
-+static void StretchLine(DWORD *dst, int dstWidth, DWORD *src, int srcWidth)
-+{
-+ if(srcWidth > dstWidth)
-+ ShrinkLine(dst, dstWidth, src, srcWidth);
-+ else if(srcWidth < dstWidth)
-+ ExpandLine(dst, dstWidth, src, srcWidth);
-+ else
-+ memcpy(dst, src, 4 * srcWidth);
-+}
-+
-+/* premultiply alpha channel on a line by a constant alpha
-+ note : it seems that pixels are already premultiplied
-+ by alpha channel content */
-+static void PemultiplyLine(DWORD *dst, int width, BYTE constAlpha, BOOL hasAlpha)
-+{
-+ int i = width;
-+ BYTE *alphaPnt = (BYTE *)dst + 3;
-+
-+ /* small optimization for 0 and 255 values of constAlpha */
-+
-+ /* fully transparent -- just sets all pix to 0 */
-+ if(constAlpha == 0)
-+ {
-+ while(i--)
-+ *dst++ = 0;
-+ return;
-+ }
-+
-+ /* fully opaque, just do nothing */
-+ if(constAlpha == 255)
-+ {
-+ if(!hasAlpha)
-+ while(i--)
-+ {
-+ *alphaPnt = 0xff;
-+ alphaPnt += 4;
-+ }
-+ return;
-+ }
-+
-+ /* intermediate -- premultiply alpha values */
-+ if(hasAlpha)
-+ while(i--)
-+ {
-+ *alphaPnt = MulDiv(*alphaPnt, constAlpha, 255);
-+ alphaPnt += 4;
-+ }
-+ else
-+ while(i--)
-+ {
-+ *alphaPnt = constAlpha;
-+ alphaPnt += 4;
-+ }
-+ return;
-+
-+}
-+
-+/* alpha blends a source line onto a destination line
-+ preconditions :
-+ 1) source and dest widths must be the same
-+ 2) source line should be already premultiplied by constant alpha */
-+static void BlendLine(DWORD *dst, DWORD *src, int width)
-+{
-+ int i = width;
-+ BYTE *blueDst = (BYTE *)dst;
-+ BYTE *greenDst = blueDst + 1;
-+ BYTE *redDst = greenDst + 1;
-+ BYTE *alphaDst = redDst + 1;
-+ BYTE *blueSrc = (BYTE *)src;
-+ BYTE *greenSrc = blueSrc + 1;
-+ BYTE *redSrc = greenSrc + 1;
-+ BYTE *alphaSrc = redSrc + 1;
-+ BYTE alpha;
-+
-+ /* still don't know if it must take in account an eventual dest
-+ alpha channel..... */
-+ while(i--)
-+ {
-+ alpha = 255 - *alphaSrc;
-+
-+ *blueDst = *blueSrc + MulDiv(*blueDst, alpha, 255);
-+ *greenDst = *greenSrc + MulDiv(*greenDst, alpha, 255);
-+ *redDst = *redSrc + MulDiv(*redDst, alpha, 255);
-+ *alphaDst = *alphaSrc + MulDiv(*alphaDst, alpha, 255);
-+
-+ blueSrc += 4;
-+ greenSrc += 4;
-+ redSrc += 4;
-+ alphaSrc += 4;
-+ blueDst += 4;
-+ greenDst += 4;
-+ redDst += 4;
-+ alphaDst += 4;
-+ }
-+
-+}
-+
-+/* ------------------------------------------------------------*/
-+/* ALPHABLEND PRIMITIVES */
-+BOOL _DIBDRV_AlphaBlend_generic(DIBDRVPHYSDEV *physDevDst, INT xDst, INT yDst,
-+ INT widthDst, INT heightDst, const DIBDRVPHYSDEV *physDevSrc,
-+ INT xSrc, INT ySrc, int widthSrc, int heightSrc, BLENDFUNCTION blendFn)
-+{
-+ /* flags indicating wether source should be stretched */
-+ BOOL horStretch = (widthSrc != widthDst);
-+ BOOL verStretch = (heightSrc != heightDst);
-+
-+ /* constant alpha value */
-+ BYTE constAlpha = blendFn.SourceConstantAlpha;
-+
-+ /* checks wether source has alpha channel */
-+ BOOL hasAlpha = blendFn.AlphaFormat & AC_SRC_ALPHA;
-+
-+ /* source and dest bitmaps */
-+ const DIBDRVBITMAP *srcBmp = physDevSrc->physBitmap;
-+ DIBDRVBITMAP *dstBmp = physDevDst->physBitmap;
-+
-+ /* source and destination line buffers */
-+ DWORD *sBuf = HeapAlloc(GetProcessHeap(), 0, abs(srcBmp->stride));
-+ DWORD *dBuf = HeapAlloc(GetProcessHeap(), 0, abs(dstBmp->stride));
-+
-+ int ys = ySrc;
-+ int yd = yDst;
-+ int iLine;
-+ int delta;
-+
-+ /* in order to optimize a bit, we divide the routine in 4 parts,
-+ depending on stretching modes */
-+ if(!horStretch && !verStretch)
-+ {
-+ /* simplest case, no stretching needed */
-+ MAYBE(TRACE("No stretching\n"));
-+ for(iLine = 0; iLine < heightSrc; iLine++, ys++, yd++)
-+ {
-+ /* load source and dest lines */
-+ srcBmp->funcs->GetLine(srcBmp, ys, xSrc, widthSrc, sBuf);
-+ dstBmp->funcs->GetLine(dstBmp, yd, xDst, widthDst, dBuf);
-+
-+ /* premultiply source by constant and pixel alpha */
-+ PemultiplyLine(sBuf, widthSrc, constAlpha, hasAlpha);
-+
-+ /* blends source on dest */
-+ BlendLine(dBuf, sBuf, widthSrc);
-+
-+ /* puts dest line back */
-+ dstBmp->funcs->PutLine(dstBmp, yd, xDst, widthDst, dBuf);
-+ }
-+ }
-+ else if (horStretch && !verStretch)
-+ {
-+ /* just horizontal stretching needed */
-+ DWORD *strBuf = HeapAlloc(GetProcessHeap(), 0, abs(dstBmp->stride));
-+ MAYBE(TRACE("Horizontal stretching\n"));
-+
-+ for(iLine = 0; iLine < heightSrc; iLine++, ys++, yd++)
-+ {
-+ /* load source and dest lines */
-+ srcBmp->funcs->GetLine(srcBmp, ys, xSrc, widthSrc, sBuf);
-+ dstBmp->funcs->GetLine(dstBmp, yd, xDst, widthDst, dBuf);
-+
-+ /* stretch source line to match dest one */
-+ StretchLine(strBuf, widthDst, sBuf, widthSrc);
-+
-+ /* premultiply source by constant and pixel alpha */
-+ PemultiplyLine(strBuf, widthDst, constAlpha, hasAlpha);
-+
-+ /* blends source on dest */
-+ BlendLine(dBuf, strBuf, widthDst);
-+
-+ /* puts dest line back */
-+ dstBmp->funcs->PutLine(dstBmp, yd, xDst, widthDst, dBuf);
-+ }
-+ HeapFree(GetProcessHeap(), 0, strBuf);
-+ }
-+ else if (!horStretch && verStretch)
-+ {
-+ /* just vertical stretching needed */
-+ MAYBE(TRACE("Vertical stretching\n"));
-+
-+ if(heightSrc > heightDst)
-+ {
-+ iLine = 0;
-+ delta = 0;
-+ while(iLine < heightDst)
-+ {
-+ /* load source and dest lines */
-+ srcBmp->funcs->GetLine(srcBmp, ys, xSrc, widthSrc, sBuf);
-+ dstBmp->funcs->GetLine(dstBmp, yd, xDst, widthDst, dBuf);
-+
-+ /* premultiply source by constant and pixel alpha */
-+ PemultiplyLine(sBuf, widthSrc, constAlpha, hasAlpha);
-+
-+ /* blends source on dest */
-+ BlendLine(dBuf, sBuf, widthDst);
-+
-+ /* puts dest line back */
-+ dstBmp->funcs->PutLine(dstBmp, yd, xDst, widthDst, dBuf);
-+
-+ while(delta < heightSrc)
-+ {
-+ ys++;
-+ delta += heightDst;
-+ }
-+ delta -= heightSrc;
-+ yd++;
-+ iLine++;
-+ }
-+ }
-+ else if(heightSrc < heightDst)
-+ {
-+ iLine = 0;
-+ delta = 0;
-+ while(iLine < heightSrc)
-+ {
-+ /* load source line */
-+ srcBmp->funcs->GetLine(srcBmp, ys, xSrc, widthSrc, sBuf);
-+
-+ /* premultiply source by constant and pixel alpha */
-+ PemultiplyLine(sBuf, widthSrc, constAlpha, hasAlpha);
-+
-+ while(delta < heightDst)
-+ {
-+ /* load dest line */
-+ dstBmp->funcs->GetLine(dstBmp, yd, xDst, widthDst, dBuf);
-+
-+ /* blends source on dest */
-+ BlendLine(dBuf, sBuf, widthDst);
-+
-+ /* puts dest line back */
-+ dstBmp->funcs->PutLine(dstBmp, yd, xDst, widthDst, dBuf);
-+ yd++;
-+ delta += heightSrc;
-+ }
-+ delta -= heightDst;
-+ ys++;
-+ iLine++;
-+ }
-+ }
-+ }
-+ else
-+ {
-+ DWORD *strBuf = HeapAlloc(GetProcessHeap(), 0, abs(dstBmp->stride));
-+ /* both stretching needed -- generic case */
-+ MAYBE(TRACE("Horizontal and vertical stretching\n"));
-+
-+ if(heightSrc > heightDst)
-+ {
-+ iLine = 0;
-+ delta = 0;
-+ while(iLine < heightDst)
-+ {
-+ /* load source and dest lines */
-+ srcBmp->funcs->GetLine(srcBmp, ys, xSrc, widthSrc, sBuf);
-+ dstBmp->funcs->GetLine(dstBmp, yd, xDst, widthDst, dBuf);
-+
-+ /* stretch source line to match dest one */
-+ StretchLine(strBuf, widthDst, sBuf, widthSrc);
-+
-+ /* premultiply source by constant and pixel alpha */
-+ PemultiplyLine(strBuf, widthDst, constAlpha, hasAlpha);
-+
-+ /* blends source on dest */
-+ BlendLine(dBuf, strBuf, widthDst);
-+
-+ /* puts dest line back */
-+ dstBmp->funcs->PutLine(dstBmp, yd, xDst, widthDst, dBuf);
-+
-+ while(delta < heightSrc)
-+ {
-+ ys++;
-+ delta += heightDst;
-+ }
-+ delta -= heightSrc;
-+ yd++;
-+ iLine++;
-+ }
-+ }
-+ else if(heightSrc < heightDst)
-+ {
-+ iLine = 0;
-+ delta = 0;
-+ while(iLine < heightSrc)
-+ {
-+ /* load source line */
-+ srcBmp->funcs->GetLine(srcBmp, ys, xSrc, widthSrc, sBuf);
-+
-+ /* stretch source line to match dest one */
-+ StretchLine(strBuf, widthDst, sBuf, widthSrc);
-+
-+ /* premultiply source by constant and pixel alpha */
-+ PemultiplyLine(strBuf, widthDst, constAlpha, hasAlpha);
-+
-+ while(delta < heightDst)
-+ {
-+ /* load dest line */
-+ dstBmp->funcs->GetLine(dstBmp, yd, xDst, widthDst, dBuf);
-+
-+ /* blends source on dest */
-+ BlendLine(dBuf, strBuf, widthDst);
-+
-+ /* puts dest line back */
-+ dstBmp->funcs->PutLine(dstBmp, yd, xDst, widthDst, dBuf);
-+ yd++;
-+ delta += heightSrc;
-+ }
-+ delta -= heightDst;
-+ ys++;
-+ iLine++;
-+ }
-+ }
-+ HeapFree(GetProcessHeap(), 0, strBuf);
-+ }
-+
-+ HeapFree(GetProcessHeap(), 0, sBuf);
-+ HeapFree(GetProcessHeap(), 0, dBuf);
-+ return TRUE;
-+}
-+
-+/* ------------------------------------------------------------*/
-+/* BLITTING PRIMITIVES */
-+BOOL _DIBDRV_BitBlt_generic(DIBDRVPHYSDEV *physDevDst, INT xDst, INT yDst,
-+ INT width, INT height, const DIBDRVPHYSDEV *physDevSrc,
-+ INT xSrc, INT ySrc, DWORD rop)
-+{
-+ int ys, yd;
-+ int i;
-+ DWORD *dwBuf;
-+ DIBDRVBITMAP *dstBmp, *patBmp;
-+ const DIBDRVBITMAP *srcBmp;
-+ DWORD *wDstPnt, *wSrcPnt, *wPatPnt;
-+ BOOL usePat, useSrc, useDst;
-+ DWORD patColor;
-+ BOOL res = FALSE;
-+
-+ /* 32 bit RGB source and destination buffer, if needed */
-+ DWORD *sBuf = 0, *dBuf = 0, *pBuf = 0;
-+
-+ /* get elements usage */
-+ usePat = (((rop >> 4) & 0x0f0000) != (rop & 0x0f0000));
-+ useSrc = (((rop >> 2) & 0x330000) != (rop & 0x330000));
-+ useDst = (((rop >> 1) & 0x550000) != (rop & 0x550000));
-+
-+ /* sanity check -- MSN messenger crashes without */
-+ if(useSrc && !physDevSrc)
-+ return FALSE;
-+
-+ /* gets source, dest and pattern bitmaps, if available */
-+ if(usePat && physDevDst->isBrushBitmap)
-+ patBmp = physDevDst->brushBmpCache;
-+ else
-+ patBmp = NULL;
-+
-+ if(useSrc)
-+ srcBmp = physDevSrc->physBitmap;
-+ else
-+ srcBmp = NULL;
-+ dstBmp = physDevDst->physBitmap;
-+
-+ /* gets pattern color, in case it's needed
-+ it's NOT the COLORREF value (colors are swapped
-+ NOR the pixel value (it's applied to a 32 BPP BI_RGB */
-+ if(usePat)
-+ patColor = SwapColors(physDevDst->brushColorref);
-+ else
-+ patColor = 0;
-+
-+ /* allocate 32 bit RGB destination buffer */
-+ if(!(dBuf = (DWORD *)HeapAlloc( GetProcessHeap(), 0, width * 4)))
-+ goto error;
-+
-+ MAYBE(TRACE("dstBmp:%p(%s), xDst:%d, yDst:%d, width:%d, height:%d, srcBmp:%p(%s), xSrc:%d, ySrc:%d, rop:%8x\n",
-+ dstBmp, _DIBDRVBITMAP_GetFormatName(dstBmp), xDst, yDst, width, height,
-+ srcBmp, _DIBDRVBITMAP_GetFormatName(srcBmp), xSrc, ySrc, rop));
-+
-+ /* some simple ROPs optimizations */
-+ switch(rop)
-+ {
-+ case BLACKNESS:
-+ MAYBE(TRACE("BLACKNESS\n"));
-+ memset(dBuf, 0x00, width * 4);
-+ for(yd = yDst; yd < yDst+height; yd++)
-+ dstBmp->funcs->PutLine(dstBmp, yd, xDst, width, dBuf);
-+ break;
-+
-+ case WHITENESS:
-+ MAYBE(TRACE("WHITENESS\n"));
-+ for(dwBuf = dBuf, i = width; i; i--)
-+ *dwBuf++ = 0x00ffffff;
-+ for(yd = yDst; yd < yDst+height; yd++)
-+ dstBmp->funcs->PutLine(dstBmp, yd, xDst, width, dBuf);
-+ break;
-+
-+ case SRCCOPY:
-+ MAYBE(TRACE("SRCCOPY\n"));
-+ for(ys = ySrc, yd = yDst; ys < ySrc+height; ys++, yd++)
-+ {
-+ srcBmp->funcs->GetLine(srcBmp, ys, xSrc, width, dBuf);
-+ dstBmp->funcs->PutLine(dstBmp, yd, xDst, width, dBuf);
-+ }
-+ break;
-+
-+ /* fallback for generic ROP operation */
-+ default:
-+ rop >>= 16;
-+ if(useSrc && useDst && usePat && physDevDst->isBrushBitmap)
-+ {
-+ MAYBE(TRACE("BitBlt use: src+dst+pat - pattern brush\n"));
-+ if(!(sBuf = HeapAlloc( GetProcessHeap(), 0, width * 4)))
-+ goto error;
-+ if(!(pBuf = HeapAlloc( GetProcessHeap(), 0, width * 4)))
-+ goto error;
-+ for(ys = ySrc, yd = yDst; ys < ySrc+height; ys++, yd++)
-+ {
-+ srcBmp->funcs->GetLine(srcBmp, ys, xSrc, width, sBuf);
-+ dstBmp->funcs->GetLine(dstBmp, ys, xDst, width, dBuf);
-+ patBmp->funcs->GetLine(patBmp, ys%patBmp->height, 0, width, pBuf);
-+ wDstPnt = dBuf;
-+ wSrcPnt = sBuf;
-+ wPatPnt = pBuf;
-+ for(i = width; i > 0 ; i--)
-+ {
-+ *wDstPnt = _DIBDRV_ROP3(*wPatPnt++, *wSrcPnt++, *wDstPnt, rop);
-+ wDstPnt++;
-+ }
-+ dstBmp->funcs->PutLine(dstBmp, yd, xDst, width, dBuf);
-+ }
-+ }
-+ else if(useSrc && useDst)
-+ {
-+ if(usePat)
-+ MAYBE(TRACE("BitBlt use: src+dst+pat - solid brush\n"));
-+ else
-+ MAYBE(TRACE("BitBlt use: src+dst\n"));
-+ if(!(sBuf = HeapAlloc( GetProcessHeap(), 0, width * 4)))
-+ goto error;
-+ for(ys = ySrc, yd = yDst; ys < ySrc+height; ys++, yd++)
-+ {
-+ srcBmp->funcs->GetLine(srcBmp, ys, xSrc, width, sBuf);
-+ dstBmp->funcs->GetLine(dstBmp, yd, xDst, width, dBuf);
-+ wDstPnt = dBuf;
-+ wSrcPnt = sBuf;
-+ for(i = width; i > 0 ; i--)
-+ {
-+ *wDstPnt = _DIBDRV_ROP3(patColor, *wSrcPnt++, *wDstPnt, rop);
-+ wDstPnt++;
-+ }
-+ dstBmp->funcs->PutLine(dstBmp, yd, xDst, width, dBuf);
-+ }
-+ }
-+ else if(useSrc && usePat && physDevDst->isBrushBitmap)
-+ {
-+ MAYBE(TRACE("BitBlt use: src+pat -- pattern brush\n"));
-+ if(!(pBuf = HeapAlloc( GetProcessHeap(), 0, width * 4)))
-+ goto error;
-+ for(ys = ySrc, yd = yDst; ys < ySrc+height; ys++, yd++)
-+ {
-+ srcBmp->funcs->GetLine(srcBmp, ys, xSrc, width, dBuf);
-+ patBmp->funcs->GetLine(patBmp, ys%patBmp->height, 0, width, pBuf);
-+ wDstPnt = dBuf;
-+ wSrcPnt = dBuf;
-+ wPatPnt = pBuf;
-+ for(i = width; i > 0 ; i--)
-+ {
-+ *wDstPnt = _DIBDRV_ROP3(*wPatPnt++, *wSrcPnt++, 0, rop);
-+ wDstPnt++;
-+ }
-+ dstBmp->funcs->PutLine(dstBmp, yd, xDst, width, dBuf);
-+ }
-+ }
-+ else if(useSrc)
-+ {
-+ if(usePat)
-+ MAYBE(TRACE("BitBlt use: src+pat - solid brush\n"));
-+ else
-+ MAYBE(TRACE("BitBlt use: src\n"));
-+ for(ys = ySrc, yd = yDst; ys < ySrc+height; ys++, yd++)
-+ {
-+ srcBmp->funcs->GetLine(srcBmp, ys, xSrc, width, dBuf);
-+ wDstPnt = dBuf;
-+ wSrcPnt = dBuf;
-+ for(i = width; i > 0 ; i--)
-+ {
-+ *wDstPnt = _DIBDRV_ROP3(patColor, *wSrcPnt++, 0, rop);
-+ wDstPnt++;
-+ }
-+ dstBmp->funcs->PutLine(dstBmp, yd, xDst, width, dBuf);
-+ }
-+ }
-+ else if(useDst && usePat && physDevDst->isBrushBitmap)
-+ {
-+ MAYBE(TRACE("BitBlt use: dst+pat -- pattern brush\n"));
-+ if(!(pBuf = HeapAlloc( GetProcessHeap(), 0, width * 4)))
-+ goto error;
-+ for(ys = ySrc, yd = yDst; ys < ySrc+height; ys++, yd++)
-+ {
-+ dstBmp->funcs->GetLine(dstBmp, ys, xDst, width, dBuf);
-+ patBmp->funcs->GetLine(patBmp, ys%patBmp->height, 0, width, pBuf);
-+ wDstPnt = dBuf;
-+ wPatPnt = pBuf;
-+ for(i = width; i > 0 ; i--)
-+ {
-+ *wDstPnt = _DIBDRV_ROP3(*wPatPnt++, 0, *wDstPnt, rop);
-+ wDstPnt++;
-+ }
-+ dstBmp->funcs->PutLine(dstBmp, yd, xDst, width, dBuf);
-+ }
-+ }
-+ else if(useDst)
-+ {
-+ if(usePat)
-+ MAYBE(TRACE("BitBlt use: dst+pat - solid brush\n"));
-+ else
-+ MAYBE(TRACE("BitBlt use: dst\n"));
-+ for(ys = ySrc, yd = yDst; ys < ySrc+height; ys++, yd++)
-+ {
-+ dstBmp->funcs->GetLine(dstBmp, ys, xDst, width, dBuf);
-+ wDstPnt = dBuf;
-+ for(i = width; i > 0 ; i--)
-+ {
-+ *wDstPnt = _DIBDRV_ROP3(patColor, 0, *wDstPnt, rop);
-+ wDstPnt++;
-+ }
-+ dstBmp->funcs->PutLine(dstBmp, yd, xDst, width, dBuf);
-+ }
-+ }
-+ else if(usePat && physDevDst->isBrushBitmap)
-+ {
-+ MAYBE(TRACE("BitBlt use: pat -- pattern brush\n"));
-+ if(!(pBuf = HeapAlloc( GetProcessHeap(), 0, width * 4)))
-+ goto error;
-+ for(ys = ySrc, yd = yDst; ys < ySrc+height; ys++, yd++)
-+ {
-+ patBmp->funcs->GetLine(patBmp, ys%patBmp->height, 0, width, pBuf);
-+ wDstPnt = dBuf;
-+ wPatPnt = pBuf;
-+ for(i = width; i > 0 ; i--)
-+ {
-+ *wDstPnt = _DIBDRV_ROP3(*wPatPnt++, 0, 0, rop);
-+ wDstPnt++;
-+ }
-+ dstBmp->funcs->PutLine(dstBmp, yd, xDst, width, dBuf);
-+ }
-+ }
-+ else if(usePat)
-+ {
-+ MAYBE(TRACE("BitBlt use: pat -- solid brush -- rop is %02x, color is %08x\n", rop, patColor));
-+ MAYBE(TRACE("Dest BMP is a '%s'\n", _DIBDRVBITMAP_GetFormatName(dstBmp)));
-+ MAYBE(TRACE("xDst = %d, yDst = %d, width = %d, height = %d\n", xDst, yDst, width, height));
-+ for(yd = yDst; yd < yDst+height; yd++)
-+ {
-+ wDstPnt = dBuf;
-+ for(i = width; i > 0 ; i--)
-+ {
-+ *wDstPnt = _DIBDRV_ROP3(patColor, 0, 0, rop);
-+ wDstPnt++;
-+ }
-+ dstBmp->funcs->PutLine(dstBmp, yd, xDst, width, dBuf);
-+ }
-+ }
-+ else
-+ ERR("What happened ?????? \n");
-+ break;
-+ } /* switch */
-+ res = TRUE;
-+error:
-+ if(sBuf) HeapFree( GetProcessHeap(), 0, sBuf );
-+ if(dBuf) HeapFree( GetProcessHeap(), 0, dBuf );
-+ if(pBuf) HeapFree( GetProcessHeap(), 0, pBuf );
-+ return res;
-+}
-+
-+/* ------------------------------------------------------------*/
-+/* STRETCHING PRIMITIVES */
-+BOOL _DIBDRV_StretchBlt_generic(DIBDRVPHYSDEV *physDevDst, INT xDst, INT yDst,
-+ INT widthDst, INT heightDst, const DIBDRVPHYSDEV *physDevSrc,
-+ INT xSrc, INT ySrc, int widthSrc, int heightSrc, DWORD rop)
-+{
-+ int ys, yd;
-+ int i, delta;
-+ DWORD *dwBuf;
-+ DIBDRVBITMAP *dstBmp, *patBmp;
-+ const DIBDRVBITMAP *srcBmp;
-+ DWORD *wDstPnt, *wSrcPnt, *wPatPnt;
-+ BOOL usePat, useSrc, useDst;
-+ DWORD patColor;
-+ BOOL res = FALSE;
-+
-+ /* 32 bit RGB source and destination buffer, if needed */
-+ DWORD *sBufOrig = 0, *sBufStr = 0, *dBuf = 0, *pBuf = 0;
-+
-+ /* get elements usage */
-+ usePat = (((rop >> 4) & 0x0f0000) != (rop & 0x0f0000));
-+ useSrc = (((rop >> 2) & 0x330000) != (rop & 0x330000));
-+ useDst = (((rop >> 1) & 0x550000) != (rop & 0x550000));
-+
-+ /* sanity check -- MSN messenger crashes without */
-+ if(useSrc && !physDevSrc)
-+ return FALSE;
-+
-+ /* gets source, dest and pattern bitmaps, if available */
-+ if(usePat && physDevDst->isBrushBitmap)
-+ patBmp = physDevDst->brushBmpCache;
-+ else
-+ patBmp = NULL;
-+
-+ if(useSrc)
-+ srcBmp = physDevSrc->physBitmap;
-+ else
-+ srcBmp = NULL;
-+ dstBmp = physDevDst->physBitmap;
-+
-+ /* gets pattern color, in case it's needed
-+ it's NOT the COLORREF value (colors are swapped
-+ NOR the pixel value (it's applied to a 32 BPP BI_RGB */
-+ if(usePat)
-+ patColor = SwapColors(physDevDst->brushColorref);
-+ else
-+ patColor = 0;
-+
-+ /* allocate 32 bit RGB destination buffer */
-+ if(!(dBuf = (DWORD *)HeapAlloc( GetProcessHeap(), 0, widthDst * 4)))
-+ goto error;
-+
-+ MAYBE(TRACE("dstBmp:%p(%s), xDst:%d, yDst:%d, widthDst:%d, heightDst:%d, srcBmp:%p(%s), xSrc:%d, ySrc:%d, , widthSrc:%d, heightSrc:%drop:%8x\n",
-+ dstBmp, _DIBDRVBITMAP_GetFormatName(dstBmp), xDst, yDst, widthDst, heightDst,
-+ srcBmp, _DIBDRVBITMAP_GetFormatName(srcBmp), xSrc, ySrc, widthSrc, heightSrc, rop));
-+
-+ /* some simple ROPs optimizations */
-+ switch(rop)
-+ {
-+ case BLACKNESS:
-+ MAYBE(TRACE("BLACKNESS\n"));
-+ memset(dBuf, 0x00, widthDst * 4);
-+ for(yd = yDst; yd < yDst+heightDst; yd++)
-+ dstBmp->funcs->PutLine(dstBmp, yd, xDst, widthDst, dBuf);
-+ break;
-+
-+ case WHITENESS:
-+ MAYBE(TRACE("WHITENESS\n"));
-+ for(dwBuf = dBuf, i = widthDst; i; i--)
-+ *dwBuf++ = 0x00ffffff;
-+ for(yd = yDst; yd < yDst+heightDst; yd++)
-+ dstBmp->funcs->PutLine(dstBmp, yd, xDst, widthDst, dBuf);
-+ break;
-+
-+ case SRCCOPY:
-+ MAYBE(TRACE("SRCCOPY\n"));
-+ sBufOrig = HeapAlloc(GetProcessHeap(), 0, widthSrc * 4);
-+ if(heightSrc > heightDst)
-+ {
-+ ys = 0;
-+ yd = 0;
-+ delta = 0;
-+ while(yd < heightDst)
-+ {
-+ srcBmp->funcs->GetLine(srcBmp, ys + ySrc, xSrc, widthSrc, sBufOrig);
-+ StretchLine(dBuf, widthDst, sBufOrig, widthSrc);
-+ dstBmp->funcs->PutLine(dstBmp, yd + yDst, xDst, widthDst, dBuf);
-+ while(delta < heightSrc)
-+ {
-+ ys++;
-+ delta += heightDst;
-+ }
-+ delta -= heightSrc;
-+ yd++;
-+ }
-+ }
-+ else if(heightSrc < heightDst)
-+ {
-+ ys = 0;
-+ yd = 0;
-+ delta = 0;
-+ while(ys < heightSrc)
-+ {
-+ srcBmp->funcs->GetLine(srcBmp, ys + ySrc, xSrc, widthSrc, sBufOrig);
-+ StretchLine(dBuf, widthDst, sBufOrig, widthSrc);
-+ while(delta < heightDst)
-+ {
-+ dstBmp->funcs->PutLine(dstBmp, yd + yDst, xDst, widthDst, dBuf);
-+ yd++;
-+ delta += heightSrc;
-+ }
-+ delta -= heightDst;
-+ ys++;
-+ }
-+ }
-+ else
-+ {
-+ for(ys = ySrc, yd = yDst; ys < ySrc+heightSrc; ys++, yd++)
-+ {
-+ srcBmp->funcs->GetLine(srcBmp, ys, xSrc, widthSrc, sBufOrig);
-+ StretchLine(dBuf, widthDst, sBufOrig, widthSrc);
-+ dstBmp->funcs->PutLine(dstBmp, yd, xDst, widthDst, dBuf);
-+ }
-+ }
-+ break;
-+
-+ /* fallback for generic ROP operation */
-+ default:
-+ rop >>= 16;
-+ if(useSrc && useDst && usePat && physDevDst->isBrushBitmap)
-+ {
-+ MAYBE(TRACE("StretchBlt use: src+dst+pat - pattern brush\n"));
-+ if(!(sBufOrig = HeapAlloc(GetProcessHeap(), 0, widthSrc * 4)))
-+ goto error;
-+ if(!(sBufStr = HeapAlloc(GetProcessHeap(), 0, widthDst * 4)))
-+ goto error;
-+ if(!(pBuf = HeapAlloc( GetProcessHeap(), 0, widthDst * 4)))
-+ goto error;
-+ if(heightSrc > heightDst)
-+ {
-+ ys = 0;
-+ yd = 0;
-+ delta = 0;
-+ while(yd < heightDst)
-+ {
-+ srcBmp->funcs->GetLine(srcBmp, ys + ySrc, xSrc, widthSrc, sBufOrig);
-+ StretchLine(sBufStr, widthDst, sBufOrig, widthSrc);
-+ dstBmp->funcs->GetLine(dstBmp, yd + yDst, xDst, widthDst, dBuf);
-+ patBmp->funcs->GetLine(patBmp, (yd + yDst)%patBmp->height, 0, widthDst, pBuf);
-+ wDstPnt = dBuf;
-+ wSrcPnt = sBufStr;
-+ wPatPnt = pBuf;
-+ for(i = widthDst; i > 0 ; i--)
-+ {
-+ *wDstPnt = _DIBDRV_ROP3(*wPatPnt++, *wSrcPnt++, *wDstPnt, rop);
-+ wDstPnt++;
-+ }
-+ dstBmp->funcs->PutLine(dstBmp, yd + yDst, xDst, widthDst, dBuf);
-+ while(delta < heightSrc)
-+ {
-+ ys++;
-+ delta += heightDst;
-+ }
-+ delta -= heightSrc;
-+ yd++;
-+ }
-+ }
-+ else if(heightSrc < heightDst)
-+ {
-+ ys = 0;
-+ yd = 0;
-+ delta = 0;
-+ while(ys < heightSrc)
-+ {
-+ srcBmp->funcs->GetLine(srcBmp, ys + ySrc, xSrc, widthSrc, sBufOrig);
-+ StretchLine(sBufStr, widthDst, sBufOrig, widthSrc);
-+ dstBmp->funcs->GetLine(dstBmp, yd + yDst, xDst, widthDst, dBuf);
-+ patBmp->funcs->GetLine(patBmp, (yd + yDst)%patBmp->height, 0, widthDst, pBuf);
-+ while(delta < heightDst)
-+ {
-+ wDstPnt = dBuf;
-+ wSrcPnt = sBufStr;
-+ wPatPnt = pBuf;
-+ for(i = widthDst; i > 0 ; i--)
-+ {
-+ *wDstPnt = _DIBDRV_ROP3(*wPatPnt++, *wSrcPnt++, *wDstPnt, rop);
-+ wDstPnt++;
-+ }
-+ dstBmp->funcs->PutLine(dstBmp, yd + yDst, xDst, widthDst, dBuf);
-+ yd++;
-+ delta += heightSrc;
-+ }
-+ delta -= heightDst;
-+ ys++;
-+ }
-+ }
-+ else
-+ {
-+ for(ys = ySrc, yd = yDst; ys < ySrc+heightSrc; ys++, yd++)
-+ {
-+ srcBmp->funcs->GetLine(srcBmp, ys, xSrc, widthSrc, sBufOrig);
-+ StretchLine(sBufStr, widthDst, sBufOrig, widthSrc);
-+ dstBmp->funcs->GetLine(dstBmp, ys, xDst, widthDst, dBuf);
-+ patBmp->funcs->GetLine(patBmp, ys%patBmp->height, 0, widthDst, pBuf);
-+ wDstPnt = dBuf;
-+ wSrcPnt = sBufStr;
-+ wPatPnt = pBuf;
-+ for(i = widthDst; i > 0 ; i--)
-+ {
-+ *wDstPnt = _DIBDRV_ROP3(*wPatPnt++, *wSrcPnt++, *wDstPnt, rop);
-+ wDstPnt++;
-+ }
-+ dstBmp->funcs->PutLine(dstBmp, yd, xDst, widthDst, dBuf);
-+ }
-+ }
-+ }
-+ else if(useSrc && useDst)
-+ {
-+ if(usePat)
-+ MAYBE(TRACE("StretchBlt use: src+dst+pat - solid brush\n"));
-+ else
-+ MAYBE(TRACE("StretchBlt use: src+dst\n"));
-+ if(!(sBufOrig = HeapAlloc(GetProcessHeap(), 0, widthSrc * 4)))
-+ goto error;
-+ if(!(sBufStr = HeapAlloc(GetProcessHeap(), 0, widthDst * 4)))
-+ goto error;
-+ if(heightSrc > heightDst)
-+ {
-+ ys = 0;
-+ yd = 0;
-+ delta = 0;
-+ while(yd < heightDst)
-+ {
-+ srcBmp->funcs->GetLine(srcBmp, ys + ySrc, xSrc, widthSrc, sBufOrig);
-+ StretchLine(sBufStr, widthDst, sBufOrig, widthSrc);
-+ dstBmp->funcs->GetLine(dstBmp, yd + yDst, xDst, widthDst, dBuf);
-+ wDstPnt = dBuf;
-+ wSrcPnt = sBufStr;
-+ for(i = widthDst; i > 0 ; i--)
-+ {
-+ *wDstPnt = _DIBDRV_ROP3(patColor, *wSrcPnt++, *wDstPnt, rop);
-+ wDstPnt++;
-+ }
-+ dstBmp->funcs->PutLine(dstBmp, yd + yDst, xDst, widthDst, dBuf);
-+ while(delta < heightSrc)
-+ {
-+ ys++;
-+ delta += heightDst;
-+ }
-+ delta -= heightSrc;
-+ yd++;
-+ }
-+ }
-+ else if(heightSrc < heightDst)
-+ {
-+ ys = 0;
-+ yd = 0;
-+ delta = 0;
-+ while(ys < heightSrc)
-+ {
-+ srcBmp->funcs->GetLine(srcBmp, ys + ySrc, xSrc, widthSrc, sBufOrig);
-+ StretchLine(sBufStr, widthDst, sBufOrig, widthSrc);
-+ dstBmp->funcs->GetLine(dstBmp, yd + yDst, xDst, widthDst, dBuf);
-+ while(delta < heightDst)
-+ {
-+ wDstPnt = dBuf;
-+ wSrcPnt = sBufStr;
-+ for(i = widthDst; i > 0 ; i--)
-+ {
-+ *wDstPnt = _DIBDRV_ROP3(patColor, *wSrcPnt++, *wDstPnt, rop);
-+ wDstPnt++;
-+ }
-+ dstBmp->funcs->PutLine(dstBmp, yd + yDst, xDst, widthDst, dBuf);
-+ yd++;
-+ delta += heightSrc;
-+ }
-+ delta -= heightDst;
-+ ys++;
-+ }
-+ }
-+ else
-+ {
-+ for(ys = ySrc, yd = yDst; ys < ySrc+heightSrc; ys++, yd++)
-+ {
-+ srcBmp->funcs->GetLine(srcBmp, ys, xSrc, widthSrc, sBufOrig);
-+ StretchLine(sBufStr, widthDst, sBufOrig, widthSrc);
-+ dstBmp->funcs->GetLine(dstBmp, ys, xDst, widthDst, dBuf);
-+ wDstPnt = dBuf;
-+ wSrcPnt = sBufStr;
-+ for(i = widthDst; i > 0 ; i--)
-+ {
-+ *wDstPnt = _DIBDRV_ROP3(patColor, *wSrcPnt++, *wDstPnt, rop);
-+ wDstPnt++;
-+ }
-+ dstBmp->funcs->PutLine(dstBmp, yd, xDst, widthDst, dBuf);
-+ }
-+ }
-+ }
-+ else if(useSrc && usePat && physDevDst->isBrushBitmap)
-+ {
-+ MAYBE(TRACE("StretchBlt use: src+pat -- pattern brush\n"));
-+ if(!(sBufOrig = HeapAlloc(GetProcessHeap(), 0, widthSrc * 4)))
-+ goto error;
-+ if(!(sBufStr = HeapAlloc(GetProcessHeap(), 0, widthDst * 4)))
-+ goto error;
-+ if(!(pBuf = HeapAlloc( GetProcessHeap(), 0, widthDst * 4)))
-+ goto error;
-+ if(heightSrc > heightDst)
-+ {
-+ ys = 0;
-+ yd = 0;
-+ delta = 0;
-+ while(yd < heightDst)
-+ {
-+ srcBmp->funcs->GetLine(srcBmp, ys + ySrc, xSrc, widthSrc, sBufOrig);
-+ StretchLine(sBufStr, widthDst, sBufOrig, widthSrc);
-+ patBmp->funcs->GetLine(patBmp, (yd + yDst)%patBmp->height, 0, widthDst, pBuf);
-+ wDstPnt = dBuf;
-+ wSrcPnt = sBufStr;
-+ wPatPnt = pBuf;
-+ for(i = widthDst; i > 0 ; i--)
-+ {
-+ *wDstPnt = _DIBDRV_ROP3(*wPatPnt++, *wSrcPnt++, 0, rop);
-+ wDstPnt++;
-+ }
-+ dstBmp->funcs->PutLine(dstBmp, yd + yDst, xDst, widthDst, dBuf);
-+ while(delta < heightSrc)
-+ {
-+ ys++;
-+ delta += heightDst;
-+ }
-+ delta -= heightSrc;
-+ yd++;
-+ }
-+ }
-+ else if(heightSrc < heightDst)
-+ {
-+ ys = 0;
-+ yd = 0;
-+ delta = 0;
-+ while(ys < heightSrc)
-+ {
-+ srcBmp->funcs->GetLine(srcBmp, ys + ySrc, xSrc, widthSrc, sBufOrig);
-+ StretchLine(sBufStr, widthDst, sBufOrig, widthSrc);
-+ patBmp->funcs->GetLine(patBmp, (yd + yDst)%patBmp->height, 0, widthDst, pBuf);
-+ while(delta < heightDst)
-+ {
-+ wDstPnt = dBuf;
-+ wSrcPnt = sBufStr;
-+ wPatPnt = pBuf;
-+ for(i = widthDst; i > 0 ; i--)
-+ {
-+ *wDstPnt = _DIBDRV_ROP3(*wPatPnt++, *wSrcPnt++, 0, rop);
-+ wDstPnt++;
-+ }
-+ dstBmp->funcs->PutLine(dstBmp, yd + yDst, xDst, widthDst, dBuf);
-+ yd++;
-+ delta += heightSrc;
-+ }
-+ delta -= heightDst;
-+ ys++;
-+ }
-+ }
-+ else
-+ {
-+ for(ys = ySrc, yd = yDst; ys < ySrc+heightSrc; ys++, yd++)
-+ {
-+ srcBmp->funcs->GetLine(srcBmp, ys, xSrc, widthSrc, sBufOrig);
-+ StretchLine(sBufStr, widthDst, sBufOrig, widthSrc);
-+ patBmp->funcs->GetLine(patBmp, ys%patBmp->height, 0, widthDst, pBuf);
-+ wDstPnt = dBuf;
-+ wSrcPnt = sBufStr;
-+ wPatPnt = pBuf;
-+ for(i = widthDst; i > 0 ; i--)
-+ {
-+ *wDstPnt = _DIBDRV_ROP3(*wPatPnt++, *wSrcPnt++, 0, rop);
-+ wDstPnt++;
-+ }
-+ dstBmp->funcs->PutLine(dstBmp, yd, xDst, widthDst, dBuf);
-+ }
-+ }
-+ }
-+ else if(useSrc)
-+ {
-+ if(usePat)
-+ MAYBE(TRACE("StretchBlt use: src+pat - solid brush\n"));
-+ else
-+ MAYBE(TRACE("StretchBlt use: src\n"));
-+ if(!(sBufOrig = HeapAlloc(GetProcessHeap(), 0, widthSrc * 4)))
-+ goto error;
-+ if(!(sBufStr = HeapAlloc(GetProcessHeap(), 0, widthDst * 4)))
-+ goto error;
-+ if(heightSrc > heightDst)
-+ {
-+ ys = 0;
-+ yd = 0;
-+ delta = 0;
-+ while(yd < heightDst)
-+ {
-+ srcBmp->funcs->GetLine(srcBmp, ys + ySrc, xSrc, widthSrc, sBufOrig);
-+ StretchLine(sBufStr, widthDst, sBufOrig, widthSrc);
-+ wDstPnt = dBuf;
-+ wSrcPnt = sBufStr;
-+ for(i = widthDst; i > 0 ; i--)
-+ {
-+ *wDstPnt = _DIBDRV_ROP3(patColor, *wSrcPnt++, 0, rop);
-+ wDstPnt++;
-+ }
-+ dstBmp->funcs->PutLine(dstBmp, yd + yDst, xDst, widthDst, dBuf);
-+ while(delta < heightSrc)
-+ {
-+ ys++;
-+ delta += heightDst;
-+ }
-+ delta -= heightSrc;
-+ yd++;
-+ }
-+ }
-+ else if(heightSrc < heightDst)
-+ {
-+ ys = 0;
-+ yd = 0;
-+ delta = 0;
-+ while(ys < heightSrc)
-+ {
-+ srcBmp->funcs->GetLine(srcBmp, ys + ySrc, xSrc, widthSrc, sBufOrig);
-+ StretchLine(sBufStr, widthDst, sBufOrig, widthSrc);
-+ while(delta < heightDst)
-+ {
-+ wDstPnt = dBuf;
-+ wSrcPnt = sBufStr;
-+ for(i = widthDst; i > 0 ; i--)
-+ {
-+ *wDstPnt = _DIBDRV_ROP3(patColor, *wSrcPnt++, 0, rop);
-+ wDstPnt++;
-+ }
-+ dstBmp->funcs->PutLine(dstBmp, yd + yDst, xDst, widthDst, dBuf);
-+ yd++;
-+ delta += heightSrc;
-+ }
-+ delta -= heightDst;
-+ ys++;
-+ }
-+ }
-+ else
-+ {
-+ for(ys = ySrc, yd = yDst; ys < ySrc+heightSrc; ys++, yd++)
-+ {
-+ srcBmp->funcs->GetLine(srcBmp, ys, xSrc, widthSrc, sBufOrig);
-+ StretchLine(sBufStr, widthDst, sBufOrig, widthSrc);
-+ wDstPnt = dBuf;
-+ wSrcPnt = sBufStr;
-+ for(i = widthDst; i > 0 ; i--)
-+ {
-+ *wDstPnt = _DIBDRV_ROP3(patColor, *wSrcPnt++, 0, rop);
-+ wDstPnt++;
-+ }
-+ dstBmp->funcs->PutLine(dstBmp, yd, xDst, widthDst, dBuf);
-+ }
-+ }
-+ }
-+ else if(useDst && usePat && physDevDst->isBrushBitmap)
-+ {
-+ MAYBE(TRACE("StretchBlt use: dst+pat -- pattern brush\n"));
-+ if(!(pBuf = HeapAlloc( GetProcessHeap(), 0, widthDst * 4)))
-+ goto error;
-+ if(heightSrc > heightDst)
-+ {
-+ ys = 0;
-+ yd = 0;
-+ delta = 0;
-+ while(yd < heightDst)
-+ {
-+ dstBmp->funcs->GetLine(dstBmp, yd + yDst, xDst, widthDst, dBuf);
-+ patBmp->funcs->GetLine(patBmp, (yd + yDst)%patBmp->height, 0, widthDst, pBuf);
-+ wDstPnt = dBuf;
-+ wPatPnt = pBuf;
-+ for(i = widthDst; i > 0 ; i--)
-+ {
-+ *wDstPnt = _DIBDRV_ROP3(*wPatPnt++, 0, *wDstPnt, rop);
-+ wDstPnt++;
-+ }
-+ dstBmp->funcs->PutLine(dstBmp, yd + yDst, xDst, widthDst, dBuf);
-+ while(delta < heightSrc)
-+ {
-+ ys++;
-+ delta += heightDst;
-+ }
-+ delta -= heightSrc;
-+ yd++;
-+ }
-+ }
-+ else if(heightSrc < heightDst)
-+ {
-+ ys = 0;
-+ yd = 0;
-+ delta = 0;
-+ while(ys < heightSrc)
-+ {
-+ dstBmp->funcs->GetLine(dstBmp, yd + yDst, xDst, widthDst, dBuf);
-+ patBmp->funcs->GetLine(patBmp, (yd + yDst)%patBmp->height, 0, widthDst, pBuf);
-+ while(delta < heightDst)
-+ {
-+ wDstPnt = dBuf;
-+ wPatPnt = pBuf;
-+ for(i = widthDst; i > 0 ; i--)
-+ {
-+ *wDstPnt = _DIBDRV_ROP3(*wPatPnt++, 0, *wDstPnt, rop);
-+ wDstPnt++;
-+ }
-+ dstBmp->funcs->PutLine(dstBmp, yd + yDst, xDst, widthDst, dBuf);
-+ yd++;
-+ delta += heightSrc;
-+ }
-+ delta -= heightDst;
-+ ys++;
-+ }
-+ }
-+ else
-+ {
-+ for(ys = ySrc, yd = yDst; ys < ySrc+heightSrc; ys++, yd++)
-+ {
-+ dstBmp->funcs->GetLine(dstBmp, ys, xDst, widthDst, dBuf);
-+ patBmp->funcs->GetLine(patBmp, ys%patBmp->height, 0, widthDst, pBuf);
-+ wDstPnt = dBuf;
-+ wPatPnt = pBuf;
-+ for(i = widthDst; i > 0 ; i--)
-+ {
-+ *wDstPnt = _DIBDRV_ROP3(*wPatPnt++, 0, *wDstPnt, rop);
-+ wDstPnt++;
-+ }
-+ dstBmp->funcs->PutLine(dstBmp, yd, xDst, widthDst, dBuf);
-+ }
-+ }
-+ }
-+ else if(useDst)
-+ {
-+ if(usePat)
-+ MAYBE(TRACE("StretchBlt use: dst+pat - solid brush\n"));
-+ else
-+ MAYBE(TRACE("StretchBlt use: dst\n"));
-+ if(heightSrc > heightDst)
-+ {
-+ ys = 0;
-+ yd = 0;
-+ delta = 0;
-+ while(yd < heightDst)
-+ {
-+ dstBmp->funcs->GetLine(dstBmp, yd + yDst, xDst, widthDst, dBuf);
-+ wDstPnt = dBuf;
-+ for(i = widthDst; i > 0 ; i--)
-+ {
-+ *wDstPnt = _DIBDRV_ROP3(patColor, 0, *wDstPnt, rop);
-+ wDstPnt++;
-+ }
-+ dstBmp->funcs->PutLine(dstBmp, yd + yDst, xDst, widthDst, dBuf);
-+ while(delta < heightSrc)
-+ {
-+ ys++;
-+ delta += heightDst;
-+ }
-+ delta -= heightSrc;
-+ yd++;
-+ }
-+ }
-+ else if(heightSrc < heightDst)
-+ {
-+ ys = 0;
-+ yd = 0;
-+ delta = 0;
-+ while(ys < heightSrc)
-+ {
-+ dstBmp->funcs->GetLine(dstBmp, yd + yDst, xDst, widthDst, dBuf);
-+ while(delta < heightDst)
-+ {
-+ wDstPnt = dBuf;
-+ for(i = widthDst; i > 0 ; i--)
-+ {
-+ *wDstPnt = _DIBDRV_ROP3(patColor, 0, *wDstPnt, rop);
-+ wDstPnt++;
-+ }
-+ dstBmp->funcs->PutLine(dstBmp, yd + yDst, xDst, widthDst, dBuf);
-+ yd++;
-+ delta += heightSrc;
-+ }
-+ delta -= heightDst;
-+ ys++;
-+ }
-+ }
-+ else
-+ {
-+ for(ys = ySrc, yd = yDst; ys < ySrc+heightSrc; ys++, yd++)
-+ {
-+ dstBmp->funcs->GetLine(dstBmp, ys, xDst, widthDst, dBuf);
-+ wDstPnt = dBuf;
-+ for(i = widthDst; i > 0 ; i--)
-+ {
-+ *wDstPnt = _DIBDRV_ROP3(patColor, 0, *wDstPnt, rop);
-+ wDstPnt++;
-+ }
-+ dstBmp->funcs->PutLine(dstBmp, yd, xDst, widthDst, dBuf);
-+ }
-+ }
-+ }
-+ else if(usePat && physDevDst->isBrushBitmap)
-+ {
-+ MAYBE(TRACE("StretchBlt use: pat -- pattern brush\n"));
-+ if(!(pBuf = HeapAlloc( GetProcessHeap(), 0, widthDst * 4)))
-+ goto error;
-+ if(heightSrc > heightDst)
-+ {
-+ ys = 0;
-+ yd = 0;
-+ delta = 0;
-+ while(yd < heightDst)
-+ {
-+ patBmp->funcs->GetLine(patBmp, (yd + yDst)%patBmp->height, 0, widthDst, pBuf);
-+ wDstPnt = dBuf;
-+ wPatPnt = pBuf;
-+ for(i = widthDst; i > 0 ; i--)
-+ {
-+ *wDstPnt = _DIBDRV_ROP3(*wPatPnt++, 0, 0, rop);
-+ wDstPnt++;
-+ }
-+ dstBmp->funcs->PutLine(dstBmp, yd + yDst, xDst, widthDst, dBuf);
-+ while(delta < heightSrc)
-+ {
-+ ys++;
-+ delta += heightDst;
-+ }
-+ delta -= heightSrc;
-+ yd++;
-+ }
-+ }
-+ else if(heightSrc < heightDst)
-+ {
-+ ys = 0;
-+ yd = 0;
-+ delta = 0;
-+ while(ys < heightSrc)
-+ {
-+ patBmp->funcs->GetLine(patBmp, (yd + yDst)%patBmp->height, 0, widthDst, pBuf);
-+ while(delta < heightDst)
-+ {
-+ wDstPnt = dBuf;
-+ wPatPnt = pBuf;
-+ for(i = widthDst; i > 0 ; i--)
-+ {
-+ *wDstPnt = _DIBDRV_ROP3(*wPatPnt++, 0, 0, rop);
-+ wDstPnt++;
-+ }
-+ dstBmp->funcs->PutLine(dstBmp, yd + yDst, xDst, widthDst, dBuf);
-+ yd++;
-+ delta += heightSrc;
-+ }
-+ delta -= heightDst;
-+ ys++;
-+ }
-+ }
-+ else
-+ {
-+ for(ys = ySrc, yd = yDst; ys < ySrc+heightSrc; ys++, yd++)
-+ {
-+ patBmp->funcs->GetLine(patBmp, ys%patBmp->height, 0, widthDst, pBuf);
-+ wDstPnt = dBuf;
-+ wPatPnt = pBuf;
-+ for(i = widthDst; i > 0 ; i--)
-+ {
-+ *wDstPnt = _DIBDRV_ROP3(*wPatPnt++, 0, 0, rop);
-+ wDstPnt++;
-+ }
-+ dstBmp->funcs->PutLine(dstBmp, yd, xDst, widthDst, dBuf);
-+ }
-+ }
-+ }
-+ else if(usePat)
-+ {
-+ MAYBE(TRACE("StretchBlt use: pat -- solid brush -- rop is %02x, color is %08x\n", rop, patColor));
-+ MAYBE(TRACE("Dest BMP is a '%s'\n", _DIBDRVBITMAP_GetFormatName(dstBmp)));
-+ MAYBE(TRACE("xDst = %d, yDst = %d, widthDst = %d, heightDst = %d\n", xDst, yDst, widthDst, heightDst));
-+ if(heightSrc > heightDst)
-+ {
-+ ys = 0;
-+ yd = 0;
-+ delta = 0;
-+ while(yd < heightDst)
-+ {
-+ wDstPnt = dBuf;
-+ for(i = widthDst; i > 0 ; i--)
-+ {
-+ *wDstPnt = _DIBDRV_ROP3(patColor, 0, 0, rop);
-+ wDstPnt++;
-+ }
-+ dstBmp->funcs->PutLine(dstBmp, yd + yDst, xDst, widthDst, dBuf);
-+ while(delta < heightSrc)
-+ {
-+ ys++;
-+ delta += heightDst;
-+ }
-+ delta -= heightSrc;
-+ yd++;
-+ }
-+ }
-+ else if(heightSrc < heightDst)
-+ {
-+ ys = 0;
-+ yd = 0;
-+ delta = 0;
-+ while(ys < heightSrc)
-+ {
-+ while(delta < heightDst)
-+ {
-+ wDstPnt = dBuf;
-+ for(i = widthDst; i > 0 ; i--)
-+ {
-+ *wDstPnt = _DIBDRV_ROP3(patColor, 0, 0, rop);
-+ wDstPnt++;
-+ }
-+ dstBmp->funcs->PutLine(dstBmp, yd + yDst, xDst, widthDst, dBuf);
-+ yd++;
-+ delta += heightSrc;
-+ }
-+ delta -= heightDst;
-+ ys++;
-+ }
-+ }
-+ else
-+ {
-+ for(ys = ySrc, yd = yDst; ys < ySrc+heightSrc; ys++, yd++)
-+ {
-+ wDstPnt = dBuf;
-+ for(i = widthDst; i > 0 ; i--)
-+ {
-+ *wDstPnt = _DIBDRV_ROP3(patColor, 0, 0, rop);
-+ wDstPnt++;
-+ }
-+ dstBmp->funcs->PutLine(dstBmp, yd, xDst, widthDst, dBuf);
-+ }
-+ }
-+ }
-+ else
-+ ERR("What happened ?????? \n");
-+ break;
-+ } /* switch */
-+ res = TRUE;
-+error:
-+ if(sBufOrig) HeapFree( GetProcessHeap(), 0, sBufOrig );
-+ if(sBufStr) HeapFree( GetProcessHeap(), 0, sBufStr );
-+ if(dBuf) HeapFree( GetProcessHeap(), 0, dBuf );
-+ if(pBuf) HeapFree( GetProcessHeap(), 0, pBuf );
-+ return res;
-+}
-diff -Nru a/dlls/winedib.drv/primitives.c b/dlls/winedib.drv/primitives.c
---- a/dlls/winedib.drv/primitives.c 1970-01-01 01:00:00.000000000 +0100
-+++ b/dlls/winedib.drv/primitives.c 2010-08-04 16:08:44.587222017 +0200
-@@ -0,0 +1,286 @@
-+/*
-+ * DIB Engine Primitives function pointers
-+ *
-+ * Copyright 2009 Massimo Del Fedele
-+ *
-+ * This library is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License as published by the Free Software Foundation; either
-+ * version 2.1 of the License, or (at your option) any later version.
-+ *
-+ * This library is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with this library; if not, write to the Free Software
-+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
-+ */
-+
-+#include "config.h"
-+#include "wine/port.h"
-+
-+#include "dibdrv.h"
-+
-+WINE_DEFAULT_DEBUG_CHANNEL(dibdrv);
-+
-+/* ------------------------------------------------------------*/
-+/* COLOR FUNCTIONS */
-+DWORD _DIBDRV_ColorToPixel32_RGB (const DIBDRVBITMAP *dib, COLORREF color);
-+DWORD _DIBDRV_ColorToPixel32_BITFIELDS(const DIBDRVBITMAP *dib, COLORREF color);
-+DWORD _DIBDRV_ColorToPixel24 (const DIBDRVBITMAP *dib, COLORREF color);
-+DWORD _DIBDRV_ColorToPixel16_RGB (const DIBDRVBITMAP *dib, COLORREF color);
-+DWORD _DIBDRV_ColorToPixel16_BITFIELDS(const DIBDRVBITMAP *dib, COLORREF color);
-+DWORD _DIBDRV_ColorToPixelColortable (const DIBDRVBITMAP *dib, COLORREF color);
-+
-+/* ------------------------------------------------------------*/
-+/* PIXEL POINTER READING */
-+void *_DIBDRV_GetPixelPointer32(const DIBDRVBITMAP *dib, int x, int y);
-+void *_DIBDRV_GetPixelPointer24(const DIBDRVBITMAP *dib, int x, int y);
-+void *_DIBDRV_GetPixelPointer16(const DIBDRVBITMAP *dib, int x, int y);
-+void *_DIBDRV_GetPixelPointer8 (const DIBDRVBITMAP *dib, int x, int y);
-+void *_DIBDRV_GetPixelPointer4 (const DIBDRVBITMAP *dib, int x, int y);
-+void *_DIBDRV_GetPixelPointer1 (const DIBDRVBITMAP *dib, int x, int y);
-+
-+/* ------------------------------------------------------------*/
-+/* PIXEL WRITING */
-+void _DIBDRV_SetPixel32(DIBDRVBITMAP *dib, int x, int y, DWORD and, DWORD xor);
-+void _DIBDRV_SetPixel24(DIBDRVBITMAP *dib, int x, int y, DWORD and, DWORD xor);
-+void _DIBDRV_SetPixel16(DIBDRVBITMAP *dib, int x, int y, DWORD and, DWORD xor);
-+void _DIBDRV_SetPixel8 (DIBDRVBITMAP *dib, int x, int y, DWORD and, DWORD xor);
-+void _DIBDRV_SetPixel4 (DIBDRVBITMAP *dib, int x, int y, DWORD and, DWORD xor);
-+void _DIBDRV_SetPixel1 (DIBDRVBITMAP *dib, int x, int y, DWORD and, DWORD xor);
-+
-+/* ------------------------------------------------------------*/
-+/* PIXEL READING */
-+DWORD _DIBDRV_GetPixel32_RGB (const DIBDRVBITMAP *dib, int x, int y);
-+DWORD _DIBDRV_GetPixel32_BITFIELDS(const DIBDRVBITMAP *dib, int x, int y);
-+DWORD _DIBDRV_GetPixel24 (const DIBDRVBITMAP *dib, int x, int y);
-+DWORD _DIBDRV_GetPixel16_RGB (const DIBDRVBITMAP *dib, int x, int y);
-+DWORD _DIBDRV_GetPixel16_BITFIELDS(const DIBDRVBITMAP *dib, int x, int y);
-+DWORD _DIBDRV_GetPixel8 (const DIBDRVBITMAP *dib, int x, int y);
-+DWORD _DIBDRV_GetPixel4 (const DIBDRVBITMAP *dib, int x, int y);
-+DWORD _DIBDRV_GetPixel1 (const DIBDRVBITMAP *dib, int x, int y);
-+
-+/* ------------------------------------------------------------*/
-+/* HORIZONTAL SOLID LINES */
-+void _DIBDRV_SolidHLine32(DIBDRVBITMAP *dib, int start, int end, int row, DWORD and, DWORD xor);
-+void _DIBDRV_SolidHLine24(DIBDRVBITMAP *dib, int start, int end, int row, DWORD and, DWORD xor);
-+void _DIBDRV_SolidHLine16(DIBDRVBITMAP *dib, int start, int end, int row, DWORD and, DWORD xor);
-+void _DIBDRV_SolidHLine8 (DIBDRVBITMAP *dib, int start, int end, int row, DWORD and, DWORD xor);
-+void _DIBDRV_SolidHLine4 (DIBDRVBITMAP *dib, int start, int end, int row, DWORD and, DWORD xor);
-+void _DIBDRV_SolidHLine1 (DIBDRVBITMAP *dib, int start, int end, int row, DWORD and, DWORD xor);
-+
-+/* ------------------------------------------------------------*/
-+/* HORIZONTAL PATTERN LINES */
-+void _DIBDRV_PatternHLine32(DIBDRVBITMAP *dib, int start, int end, int row, const void *and, const void *xor, DWORD count, DWORD offset);
-+void _DIBDRV_PatternHLine24(DIBDRVBITMAP *dib, int start, int end, int row, const void *and, const void *xor, DWORD count, DWORD offset);
-+void _DIBDRV_PatternHLine16(DIBDRVBITMAP *dib, int start, int end, int row, const void *and, const void *xor, DWORD count, DWORD offset);
-+void _DIBDRV_PatternHLine8 (DIBDRVBITMAP *dib, int start, int end, int row, const void *and, const void *xor, DWORD count, DWORD offset);
-+void _DIBDRV_PatternHLine4 (DIBDRVBITMAP *dib, int start, int end, int row, const void *and, const void *xor, DWORD count, DWORD offset);
-+void _DIBDRV_PatternHLine1 (DIBDRVBITMAP *dib, int start, int end, int row, const void *and, const void *xor, DWORD count, DWORD offset);
-+
-+/* ------------------------------------------------------------*/
-+/* VERTICAL LINES */
-+void _DIBDRV_SolidVLine32(DIBDRVBITMAP *dib, int col, int start, int end, DWORD and, DWORD xor);
-+void _DIBDRV_SolidVLine24(DIBDRVBITMAP *dib, int col, int start, int end, DWORD and, DWORD xor);
-+void _DIBDRV_SolidVLine16(DIBDRVBITMAP *dib, int col, int start, int end, DWORD and, DWORD xor);
-+void _DIBDRV_SolidVLine8 (DIBDRVBITMAP *dib, int col, int start, int end, DWORD and, DWORD xor);
-+void _DIBDRV_SolidVLine4 (DIBDRVBITMAP *dib, int col, int start, int end, DWORD and, DWORD xor);
-+void _DIBDRV_SolidVLine1 (DIBDRVBITMAP *dib, int col, int start, int end, DWORD and, DWORD xor);
-+
-+/* ----------------------------------------------------------------*/
-+/* CONVERT PRIMITIVES */
-+/* converts (part of) line of any DIB format from/to DIB32_RGB one */
-+BOOL _DIBDRV_GetLine32_RGB (const DIBDRVBITMAP *bmp, INT line, INT startx, int width, void *buf);
-+BOOL _DIBDRV_GetLine32_BITFIELDS(const DIBDRVBITMAP *bmp, INT line, INT startx, int width, void *buf);
-+BOOL _DIBDRV_GetLine24 (const DIBDRVBITMAP *bmp, INT line, INT startx, int width, void *buf);
-+BOOL _DIBDRV_GetLine16_RGB (const DIBDRVBITMAP *bmp, INT line, INT startx, int width, void *buf);
-+BOOL _DIBDRV_GetLine16_BITFIELDS(const DIBDRVBITMAP *bmp, INT line, INT startx, int width, void *buf);
-+BOOL _DIBDRV_GetLine8 (const DIBDRVBITMAP *bmp, INT line, INT startx, int width, void *buf);
-+BOOL _DIBDRV_GetLine4 (const DIBDRVBITMAP *bmp, INT line, INT startx, int width, void *buf);
-+BOOL _DIBDRV_GetLine1 (const DIBDRVBITMAP *bmp, INT line, INT startx, int width, void *buf);
-+
-+BOOL _DIBDRV_PutLine32_RGB (DIBDRVBITMAP *bmp, INT line, INT startx, int width, void *buf);
-+BOOL _DIBDRV_PutLine32_BITFIELDS(DIBDRVBITMAP *bmp, INT line, INT startx, int width, void *buf);
-+BOOL _DIBDRV_PutLine24 (DIBDRVBITMAP *bmp, INT line, INT startx, int width, void *buf);
-+BOOL _DIBDRV_PutLine16_RGB (DIBDRVBITMAP *bmp, INT line, INT startx, int width, void *buf);
-+BOOL _DIBDRV_PutLine16_BITFIELDS(DIBDRVBITMAP *bmp, INT line, INT startx, int width, void *buf);
-+BOOL _DIBDRV_PutLine8 (DIBDRVBITMAP *bmp, INT line, INT startx, int width, void *buf);
-+BOOL _DIBDRV_PutLine4 (DIBDRVBITMAP *bmp, INT line, INT startx, int width, void *buf);
-+BOOL _DIBDRV_PutLine1 (DIBDRVBITMAP *bmp, INT line, INT startx, int width, void *buf);
-+
-+/* ------------------------------------------------------------*/
-+/* BLITTING PRIMITIVES */
-+BOOL _DIBDRV_BitBlt_generic(DIBDRVPHYSDEV *physDevDst, INT xDst, INT yDst,
-+ INT width, INT height, const DIBDRVPHYSDEV *physDevSrc,
-+ INT xSrc, INT ySrc, DWORD rop);
-+BOOL _DIBDRV_BitBlt_32(DIBDRVPHYSDEV *physDevDst, INT xDst, INT yDst,
-+ INT width, INT height, const DIBDRVPHYSDEV *physDevSrc,
-+ INT xSrc, INT ySrc, DWORD rop);
-+BOOL _DIBDRV_BitBlt_24(DIBDRVPHYSDEV *physDevDst, INT xDst, INT yDst,
-+ INT width, INT height, const DIBDRVPHYSDEV *physDevSrc,
-+ INT xSrc, INT ySrc, DWORD rop);
-+BOOL _DIBDRV_BitBlt_16(DIBDRVPHYSDEV *physDevDst, INT xDst, INT yDst,
-+ INT width, INT height, const DIBDRVPHYSDEV *physDevSrc,
-+ INT xSrc, INT ySrc, DWORD rop);
-+BOOL _DIBDRV_BitBlt_8(DIBDRVPHYSDEV *physDevDst, INT xDst, INT yDst,
-+ INT width, INT height, const DIBDRVPHYSDEV *physDevSrc,
-+ INT xSrc, INT ySrc, DWORD rop);
-+
-+BOOL _DIBDRV_StretchBlt_generic(DIBDRVPHYSDEV *physDevDst, INT xDst, INT yDst,
-+ INT widthDst, INT heightDst, const DIBDRVPHYSDEV *physDevSrc,
-+ INT xSrc, INT ySrc, int widthSrc, int heightSrc, DWORD rop);
-+
-+BOOL _DIBDRV_AlphaBlend_generic(DIBDRVPHYSDEV *physDevDst, int xDst, int yDst,
-+ int widthDst, int heightDst, const DIBDRVPHYSDEV *physDevSrc,
-+ int xSrc, int ySrc, int widthSrc, int heightSrc, BLENDFUNCTION blendFn );
-+
-+/* ------------------------------------------------------------*/
-+/* FREETYPE FONT BITMAP BLITTING */
-+void _DIBDRV_freetype_blit_8888 (DIBDRVPHYSDEV *dib, int x, int y, RECT *clipRec, FT_Bitmap *bmp);
-+void _DIBDRV_freetype_blit_32_RGB (DIBDRVPHYSDEV *dib, int x, int y, RECT *clipRec, FT_Bitmap *bmp);
-+void _DIBDRV_freetype_blit_32_BITFIELDS(DIBDRVPHYSDEV *dib, int x, int y, RECT *clipRec, FT_Bitmap *bmp);
-+void _DIBDRV_freetype_blit_24 (DIBDRVPHYSDEV *dib, int x, int y, RECT *clipRec, FT_Bitmap *bmp);
-+void _DIBDRV_freetype_blit_16_RGB (DIBDRVPHYSDEV *dib, int x, int y, RECT *clipRec, FT_Bitmap *bmp);
-+void _DIBDRV_freetype_blit_16_BITFIELDS(DIBDRVPHYSDEV *dib, int x, int y, RECT *clipRec, FT_Bitmap *bmp);
-+void _DIBDRV_freetype_blit_8 (DIBDRVPHYSDEV *dib, int x, int y, RECT *clipRec, FT_Bitmap *bmp);
-+void _DIBDRV_freetype_blit_4 (DIBDRVPHYSDEV *dib, int x, int y, RECT *clipRec, FT_Bitmap *bmp);
-+void _DIBDRV_freetype_blit_1 (DIBDRVPHYSDEV *dib, int x, int y, RECT *clipRec, FT_Bitmap *bmp);
-+
-+DIBDRV_PRIMITIVE_FUNCS DIBDRV_funcs_DIB32_RGB =
-+{
-+ _DIBDRV_ColorToPixel32_RGB,
-+ _DIBDRV_GetPixelPointer32,
-+ _DIBDRV_SetPixel32,
-+ _DIBDRV_GetPixel32_RGB,
-+ _DIBDRV_SolidHLine32,
-+ _DIBDRV_PatternHLine32,
-+ _DIBDRV_SolidVLine32,
-+ _DIBDRV_GetLine32_RGB,
-+ _DIBDRV_PutLine32_RGB,
-+ _DIBDRV_AlphaBlend_generic,
-+ _DIBDRV_BitBlt_generic,
-+ _DIBDRV_StretchBlt_generic,
-+ _DIBDRV_freetype_blit_32_RGB
-+};
-+
-+DIBDRV_PRIMITIVE_FUNCS DIBDRV_funcs_DIB32_BITFIELDS =
-+{
-+ _DIBDRV_ColorToPixel32_BITFIELDS,
-+ _DIBDRV_GetPixelPointer32,
-+ _DIBDRV_SetPixel32,
-+ _DIBDRV_GetPixel32_BITFIELDS,
-+ _DIBDRV_SolidHLine32,
-+ _DIBDRV_PatternHLine32,
-+ _DIBDRV_SolidVLine32,
-+ _DIBDRV_GetLine32_BITFIELDS,
-+ _DIBDRV_PutLine32_BITFIELDS,
-+ _DIBDRV_AlphaBlend_generic,
-+ _DIBDRV_BitBlt_generic,
-+ _DIBDRV_StretchBlt_generic,
-+ _DIBDRV_freetype_blit_32_BITFIELDS
-+};
-+
-+DIBDRV_PRIMITIVE_FUNCS DIBDRV_funcs_DIB24 =
-+{
-+ _DIBDRV_ColorToPixel24,
-+ _DIBDRV_GetPixelPointer24,
-+ _DIBDRV_SetPixel24,
-+ _DIBDRV_GetPixel24,
-+ _DIBDRV_SolidHLine24,
-+ _DIBDRV_PatternHLine24,
-+ _DIBDRV_SolidVLine24,
-+ _DIBDRV_GetLine24,
-+ _DIBDRV_PutLine24,
-+ _DIBDRV_AlphaBlend_generic,
-+ _DIBDRV_BitBlt_generic,
-+ _DIBDRV_StretchBlt_generic,
-+ _DIBDRV_freetype_blit_24
-+};
-+
-+DIBDRV_PRIMITIVE_FUNCS DIBDRV_funcs_DIB16_RGB =
-+{
-+ _DIBDRV_ColorToPixel16_RGB,
-+ _DIBDRV_GetPixelPointer16,
-+ _DIBDRV_SetPixel16,
-+ _DIBDRV_GetPixel16_RGB,
-+ _DIBDRV_SolidHLine16,
-+ _DIBDRV_PatternHLine16,
-+ _DIBDRV_SolidVLine16,
-+ _DIBDRV_GetLine16_RGB,
-+ _DIBDRV_PutLine16_RGB,
-+ _DIBDRV_AlphaBlend_generic,
-+ _DIBDRV_BitBlt_generic,
-+ _DIBDRV_StretchBlt_generic,
-+ _DIBDRV_freetype_blit_16_RGB
-+};
-+
-+DIBDRV_PRIMITIVE_FUNCS DIBDRV_funcs_DIB16_BITFIELDS =
-+{
-+ _DIBDRV_ColorToPixel16_BITFIELDS,
-+ _DIBDRV_GetPixelPointer16,
-+ _DIBDRV_SetPixel16,
-+ _DIBDRV_GetPixel16_BITFIELDS,
-+ _DIBDRV_SolidHLine16,
-+ _DIBDRV_PatternHLine16,
-+ _DIBDRV_SolidVLine16,
-+ _DIBDRV_GetLine16_BITFIELDS,
-+ _DIBDRV_PutLine16_BITFIELDS,
-+ _DIBDRV_AlphaBlend_generic,
-+ _DIBDRV_BitBlt_generic,
-+ _DIBDRV_StretchBlt_generic,
-+ _DIBDRV_freetype_blit_16_BITFIELDS
-+};
-+
-+DIBDRV_PRIMITIVE_FUNCS DIBDRV_funcs_DIB8 =
-+{
-+ _DIBDRV_ColorToPixelColortable,
-+ _DIBDRV_GetPixelPointer8,
-+ _DIBDRV_SetPixel8,
-+ _DIBDRV_GetPixel8,
-+ _DIBDRV_SolidHLine8,
-+ _DIBDRV_PatternHLine8,
-+ _DIBDRV_SolidVLine8,
-+ _DIBDRV_GetLine8,
-+ _DIBDRV_PutLine8,
-+ _DIBDRV_AlphaBlend_generic,
-+ _DIBDRV_BitBlt_generic,
-+ _DIBDRV_StretchBlt_generic,
-+ _DIBDRV_freetype_blit_8
-+};
-+
-+DIBDRV_PRIMITIVE_FUNCS DIBDRV_funcs_DIB4 =
-+{
-+ _DIBDRV_ColorToPixelColortable,
-+ _DIBDRV_GetPixelPointer4,
-+ _DIBDRV_SetPixel4,
-+ _DIBDRV_GetPixel4,
-+ _DIBDRV_SolidHLine4,
-+ _DIBDRV_PatternHLine4,
-+ _DIBDRV_SolidVLine4,
-+ _DIBDRV_GetLine4,
-+ _DIBDRV_PutLine4,
-+ _DIBDRV_AlphaBlend_generic,
-+ _DIBDRV_BitBlt_generic,
-+ _DIBDRV_StretchBlt_generic,
-+ _DIBDRV_freetype_blit_4
-+};
-+
-+DIBDRV_PRIMITIVE_FUNCS DIBDRV_funcs_DIB1 =
-+{
-+ _DIBDRV_ColorToPixelColortable,
-+ _DIBDRV_GetPixelPointer1,
-+ _DIBDRV_SetPixel1,
-+ _DIBDRV_GetPixel1,
-+ _DIBDRV_SolidHLine1,
-+ _DIBDRV_PatternHLine1,
-+ _DIBDRV_SolidVLine1,
-+ _DIBDRV_GetLine1,
-+ _DIBDRV_PutLine1,
-+ _DIBDRV_AlphaBlend_generic,
-+ _DIBDRV_BitBlt_generic,
-+ _DIBDRV_StretchBlt_generic,
-+ _DIBDRV_freetype_blit_1
-+};
-diff -Nru a/dlls/winedib.drv/primitives_color.c b/dlls/winedib.drv/primitives_color.c
---- a/dlls/winedib.drv/primitives_color.c 1970-01-01 01:00:00.000000000 +0100
-+++ b/dlls/winedib.drv/primitives_color.c 2010-08-04 16:08:44.710222017 +0200
-@@ -0,0 +1,175 @@
-+/*
-+ * DIB Engine color Primitives
-+ *
-+ * Copyright 2009 Massimo Del Fedele
-+ *
-+ * This library is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License as published by the Free Software Foundation; either
-+ * version 2.1 of the License, or (at your option) any later version.
-+ *
-+ * This library is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with this library; if not, write to the Free Software
-+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
-+ */
-+
-+#include "config.h"
-+#include "wine/port.h"
-+
-+#include "dibdrv.h"
-+
-+WINE_DEFAULT_DEBUG_CHANNEL(dibdrv);
-+
-+/* ------------------------------------------------------------*/
-+/* BITFIELD HELPERS */
-+static inline DWORD PutField32(DWORD field, int shift, int len)
-+{
-+ shift = shift - (8 - len);
-+ if (len <= 8)
-+ field &= (((1 << len) - 1) << (8 - len));
-+ if (shift < 0)
-+ field >>= -shift;
-+ else
-+ field <<= shift;
-+ return field;
-+}
-+
-+static inline WORD PutField16(WORD field, int shift, int len)
-+{
-+ shift = shift - (8 - len);
-+ if (len <= 8)
-+ field &= (((1 << len) - 1) << (8 - len));
-+ if (shift < 0)
-+ field >>= -shift;
-+ else
-+ field <<= shift;
-+ return field;
-+}
-+
-+/* ------------------------------------------------------------*/
-+/* COLOR FUNCTIONS */
-+DWORD _DIBDRV_ColorToPixel32_RGB(const DIBDRVBITMAP *dib, COLORREF color)
-+{
-+ return ( ((color >> 16) & 0xff) | (color & 0xff00) | ((color << 16) & 0xff0000) );
-+}
-+
-+DWORD _DIBDRV_ColorToPixel32_BITFIELDS(const DIBDRVBITMAP *dib, COLORREF color)
-+{
-+ DWORD r,g,b;
-+
-+ r = GetRValue(color);
-+ g = GetGValue(color);
-+ b = GetBValue(color);
-+
-+ return PutField32(r, dib->redShift, dib->redLen) |
-+ PutField32(g, dib->greenShift, dib->greenLen) |
-+ PutField32(b, dib->blueShift, dib->blueLen);
-+}
-+
-+DWORD _DIBDRV_ColorToPixel24(const DIBDRVBITMAP *dib, COLORREF color)
-+{
-+ return ( ((color >> 16) & 0xff) | (color & 0xff00) | ((color << 16) & 0xff0000) );
-+}
-+
-+DWORD _DIBDRV_ColorToPixel16_RGB(const DIBDRVBITMAP *dib, COLORREF color)
-+{
-+ return ( ((color >> 19) & 0x001f) | ((color >> 6) & 0x03e0) | ((color << 7) & 0x7c00) );
-+}
-+
-+DWORD _DIBDRV_ColorToPixel16_BITFIELDS(const DIBDRVBITMAP *dib, COLORREF color)
-+{
-+ DWORD r,g,b;
-+
-+ r = GetRValue(color);
-+ g = GetGValue(color);
-+ b = GetBValue(color);
-+
-+ return PutField16(r, dib->redShift, dib->redLen) |
-+ PutField16(g, dib->greenShift, dib->greenLen) |
-+ PutField16(b, dib->blueShift, dib->blueLen);
-+}
-+
-+/* gets nearest color to DIB palette color */
-+DWORD _DIBDRV_GetNearestColor(const DIBDRVBITMAP *dib, COLORREF color)
-+{
-+ RGBQUAD *c;
-+
-+ if(dib->bitCount > 8)
-+ return color;
-+
-+ c = dib->colorTable + _DIBDRV_GetNearestColorIndex(dib, color);
-+ return RGB(c->rgbRed, c->rgbGreen, c->rgbBlue);
-+
-+}
-+
-+/* gets nearest color index in DIB palette of a given colorref */
-+DWORD _DIBDRV_GetNearestColorIndex(const DIBDRVBITMAP *dib, COLORREF color)
-+{
-+ DWORD r, g, b;
-+ int i, best_index = 0;
-+ DWORD diff, best_diff = 0xffffffff;
-+
-+ r = GetRValue(color);
-+ g = GetGValue(color);
-+ b = GetBValue(color);
-+
-+ for(i = 0; i < dib->colorTableSize; i++)
-+ {
-+ RGBQUAD *cur = dib->colorTable + i;
-+ diff = (r - cur->rgbRed) * (r - cur->rgbRed)
-+ + (g - cur->rgbGreen) * (g - cur->rgbGreen)
-+ + (b - cur->rgbBlue) * (b - cur->rgbBlue);
-+
-+ if(diff == 0)
-+ {
-+ best_index = i;
-+ break;
-+ }
-+
-+ if(diff < best_diff)
-+ {
-+ best_diff = diff;
-+ best_index = i;
-+ }
-+ }
-+ return best_index;
-+}
-+
-+DWORD _DIBDRV_ColorToPixelColortable(const DIBDRVBITMAP *dib, COLORREF color)
-+{
-+ /* just in case it's being called without color table
-+ properly initialized */
-+ if(!dib->colorTableGrabbed)
-+ return 0;
-+
-+ color &= 0xffffff;
-+
-+ /* for monochrome bitmaps, color is :
-+ foreground if matching foreground ctable
-+ else background if matching background ctable
-+ else foreground if 0xffffff
-+ else background */
-+ if(dib->colorTableSize == 2)
-+ {
-+ RGBQUAD *back = dib->colorTable;
-+ RGBQUAD *fore = dib->colorTable + 1;
-+ COLORREF backColorref = RGB(back->rgbRed, back->rgbGreen, back->rgbBlue);
-+ COLORREF foreColorref = RGB(fore->rgbRed, fore->rgbGreen, fore->rgbBlue);
-+ if(color == foreColorref)
-+ return 1;
-+ else if(color == backColorref)
-+ return 0;
-+ else if(color == 0xffffff)
-+ return dib->lightColor;
-+ else
-+ return 0;
-+ }
-+
-+ /* otherwise looks for nearest color in palette */
-+ return _DIBDRV_GetNearestColorIndex(dib, color);
-+}
-diff -Nru a/dlls/winedib.drv/primitives_convert.c b/dlls/winedib.drv/primitives_convert.c
---- a/dlls/winedib.drv/primitives_convert.c 1970-01-01 01:00:00.000000000 +0100
-+++ b/dlls/winedib.drv/primitives_convert.c 2010-08-04 16:08:44.794222017 +0200
-@@ -0,0 +1,607 @@
-+/*
-+ * DIB Engine conversions Primitives
-+ *
-+ * Copyright 2009 Massimo Del Fedele
-+ *
-+ * This library is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License as published by the Free Software Foundation; either
-+ * version 2.1 of the License, or (at your option) any later version.
-+ *
-+ * This library is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with this library; if not, write to the Free Software
-+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
-+ */
-+
-+#include "config.h"
-+#include "wine/port.h"
-+
-+#include "dibdrv.h"
-+
-+WINE_DEFAULT_DEBUG_CHANNEL(dibdrv);
-+
-+static inline COLORREF SwapColors(DWORD c)
-+{
-+ return ((c & 0x0000ff) << 16) | (c & 0x00ff00) | ((c & 0xff0000) >> 16);
-+
-+}
-+
-+static inline DWORD PlaceField32(BYTE c, int shift, int len)
-+{
-+ DWORD res = c;
-+ if(len < 8)
-+ res >>= (8 - len);
-+ else
-+ res <<= (len - 8);
-+ return res << shift;
-+}
-+
-+static inline WORD PlaceField16(BYTE c, int shift, int len)
-+{
-+ WORD res = c;
-+ if(len < 8)
-+ res >>= (8 - len);
-+ else
-+ res <<= (len - 8);
-+ return res << shift;
-+}
-+
-+static inline BYTE GetField32(DWORD dwColor, int shift, int len)
-+{
-+ dwColor = dwColor & (((1 << (len)) - 1) << shift);
-+ dwColor = dwColor << (32 - (shift + len)) >> 24;
-+ return dwColor;
-+}
-+
-+/* ----------------------------------------------------------------*/
-+/* CONVERT PRIMITIVES */
-+/* converts (part of) line of any DIB format from/to DIB32_RGB one */
-+BOOL _DIBDRV_GetLine32_RGB(const DIBDRVBITMAP *bmp, INT line, INT startx, int width, void *buf)
-+{
-+ DWORD *dwBuf = (DWORD *)buf;
-+ DWORD *src;
-+
-+#ifdef DIBDRV_CHECK_RANGES
-+ /* range check */
-+ if(line < 0 || line >= bmp->height)
-+ return FALSE;
-+ if(startx < 0)
-+ {
-+ width += startx;
-+ dwBuf -= startx;
-+ startx = 0;
-+ }
-+ if(startx + width > bmp->width)
-+ width = bmp->width - startx;
-+ if(width <= 0)
-+ return FALSE;
-+#endif
-+
-+ src = (DWORD *)((BYTE *)bmp->bits + line * bmp->stride + 4 * startx);
-+ for(; width; width--)
-+ *dwBuf++ = *src++;
-+ return TRUE;
-+}
-+
-+BOOL _DIBDRV_GetLine32_BITFIELDS(const DIBDRVBITMAP *bmp, INT line, INT startx, int width, void *buf)
-+{
-+ DWORD *dwBuf = (DWORD *)buf;
-+ DWORD *src;
-+
-+#ifdef DIBDRV_CHECK_RANGES
-+ /* range check */
-+ if(line < 0 || line >= bmp->height)
-+ return FALSE;
-+ if(startx < 0)
-+ {
-+ width += startx;
-+ bBuf -= 4 * startx;
-+ startx = 0;
-+ }
-+ if(startx + width > bmp->width)
-+ width = bmp->width - startx;
-+ if(width <= 0)
-+ return FALSE;
-+#endif
-+
-+ src = (DWORD *)((BYTE *)bmp->bits + line * bmp->stride + 4 * startx);
-+ for(; width ; width--)
-+ {
-+ *dwBuf++ =
-+ 0xff000000 |
-+ GetField32(*src, bmp->redShift , bmp->redLen ) << 16 |
-+ GetField32(*src, bmp->greenShift, bmp->greenLen) << 8 |
-+ GetField32(*src, bmp->blueShift , bmp->blueLen );
-+ src++;
-+ }
-+ return TRUE;
-+}
-+
-+BOOL _DIBDRV_GetLine24(const DIBDRVBITMAP *bmp, INT line, INT startx, int width, void *buf)
-+{
-+ BYTE *bBuf = (BYTE *)buf;
-+ BYTE *src;
-+
-+#ifdef DIBDRV_CHECK_RANGES
-+ /* range check */
-+ if(line < 0 || line >= bmp->height)
-+ return FALSE;
-+ if(startx < 0)
-+ {
-+ width += startx;
-+ bBuf -= 4 * startx;
-+ startx = 0;
-+ }
-+ if(startx + width > bmp->width)
-+ width = bmp->width - startx;
-+ if(width <= 0)
-+ return FALSE;
-+#endif
-+
-+ src = ((BYTE *)bmp->bits + line * bmp->stride + 3 * startx);
-+ for(; width ; width--)
-+ {
-+ *bBuf++ = *src++;
-+ *bBuf++ = *src++;
-+ *bBuf++ = *src++;
-+ *bBuf++ = 0xff;
-+ }
-+ return TRUE;
-+}
-+
-+BOOL _DIBDRV_GetLine16_RGB(const DIBDRVBITMAP *bmp, INT line, INT startx, int width, void *buf)
-+{
-+ DWORD *dwBuf = (DWORD *)buf;
-+ WORD *src;
-+ DWORD b;
-+
-+#ifdef DIBDRV_CHECK_RANGES
-+ /* range check */
-+ if(line < 0 || line >= bmp->height)
-+ return FALSE;
-+ if(startx < 0)
-+ {
-+ width += startx;
-+ dwBuf -= startx;
-+ startx = 0;
-+ }
-+ if(startx + width > bmp->width)
-+ width = bmp->width - startx;
-+ if(width <= 0)
-+ return FALSE;
-+#endif
-+
-+ src = (WORD *)((BYTE *)bmp->bits + line * bmp->stride + 2 * startx);
-+ for(; width ; width--)
-+ {
-+ b = *src++;
-+ /* 0RRR|RRGG|GGGB|BBBB */
-+ *dwBuf++ = 0xff000000 | ((b & 0x1f) << 3) | ((b & 0x3e0) << 6) | ((b & 0x7c00) << 9);
-+ }
-+ return TRUE;
-+}
-+
-+BOOL _DIBDRV_GetLine16_BITFIELDS(const DIBDRVBITMAP *bmp, INT line, INT startx, int width, void *buf)
-+{
-+ DWORD *dwBuf = (DWORD *)buf;
-+ WORD *src;
-+ DWORD b;
-+
-+#ifdef DIBDRV_CHECK_RANGES
-+ /* range check */
-+ if(line < 0 || line >= bmp->height)
-+ return FALSE;
-+ if(startx < 0)
-+ {
-+ width += startx;
-+ dwBuf -= startx;
-+ startx = 0;
-+ }
-+ if(startx + width > bmp->width)
-+ width = bmp->width - startx;
-+ if(width <= 0)
-+ return FALSE;
-+#endif
-+
-+ src = (WORD *)((BYTE *)bmp->bits + line * bmp->stride + 2 * startx);
-+ for(; width ; width--)
-+ {
-+ b = *src++;
-+
-+ *dwBuf++ =
-+ 0xff000000 |
-+ ((( b & bmp->blueMask) >> bmp->blueShift ) << ( 8 - bmp->blueLen )) |
-+ (((b & bmp->greenMask) >> bmp->greenShift) << (16 - bmp->greenLen)) |
-+ (((b & bmp->redMask ) >> bmp->redShift ) << (24 - bmp->redLen ));
-+ }
-+ return TRUE;
-+}
-+
-+BOOL _DIBDRV_GetLine8(const DIBDRVBITMAP *bmp, INT line, INT startx, int width, void *buf)
-+{
-+ DWORD *dwBuf = (DWORD *)buf;
-+ BYTE *src;
-+
-+#ifdef DIBDRV_CHECK_RANGES
-+ /* range check */
-+ if(line < 0 || line >= bmp->height)
-+ return FALSE;
-+ if(startx < 0)
-+ {
-+ width += startx;
-+ dwBuf -= startx;
-+ startx = 0;
-+ }
-+ if(startx + width > bmp->width)
-+ width = bmp->width - startx;
-+ if(width <= 0)
-+ return FALSE;
-+#endif
-+
-+ src = ((BYTE *)bmp->bits + line * bmp->stride + startx);
-+ for(; width ; width--)
-+ *dwBuf++ = 0xff000000 | *((DWORD *)bmp->colorTable + *src++);
-+ return TRUE;
-+}
-+
-+BOOL _DIBDRV_GetLine4(const DIBDRVBITMAP *bmp, INT line, INT startx, int width, void *buf)
-+{
-+ DWORD *dwBuf = (DWORD *)buf;
-+ BYTE *src;
-+
-+#ifdef DIBDRV_CHECK_RANGES
-+ /* range check */
-+ if(line < 0 || line >= bmp->height)
-+ return FALSE;
-+ if(startx < 0)
-+ {
-+ width += startx;
-+ dwBuf -= startx;
-+ startx = 0;
-+ }
-+ if(startx + width > bmp->width)
-+ width = bmp->width - startx;
-+ if(width <= 0)
-+ return FALSE;
-+ if(!bmp->colorTable)
-+ {
-+ ERR("Called with uninitialized color table\n");
-+ return FALSE;
-+ }
-+#endif
-+
-+ src = ((BYTE *)bmp->bits + line * bmp->stride + (startx >> 1));
-+ /* if startx is odd, get first nibble */
-+ if(startx & 0x01)
-+ {
-+ *dwBuf++ = 0xff000000 | *((DWORD *)bmp->colorTable + (*src++ & 0x0f));
-+ width--;
-+ }
-+
-+ /* then gets all full image bytes */
-+ for( ; width > 1 ; width -= 2)
-+ {
-+ *dwBuf++ = 0xff000000 | *((DWORD *)bmp->colorTable + ((*src >> 4) & 0x0f));
-+ *dwBuf++ = 0xff000000 | *((DWORD *)bmp->colorTable + (*src++ & 0x0f));
-+ }
-+
-+ /* last nibble, if any */
-+ if(width)
-+ *dwBuf++ = 0xff000000 | *((DWORD *)bmp->colorTable + ((*src >> 4) & 0x0f));
-+ return TRUE;
-+}
-+
-+BOOL _DIBDRV_GetLine1(const DIBDRVBITMAP *bmp, INT line, INT startx, int width, void *buf)
-+{
-+ DWORD *dwBuf = (DWORD *)buf;
-+ BYTE *src;
-+ BYTE b;
-+ char i;
-+ DWORD pixOn = 0xff000000 | *((DWORD *)bmp->colorTable + 1);
-+ DWORD pixOff = 0xff000000 | *(DWORD *)bmp->colorTable;
-+
-+#ifdef DIBDRV_CHECK_RANGES
-+ /* range check */
-+ if(line < 0 || line >= bmp->height)
-+ return FALSE;
-+ if(startx < 0)
-+ {
-+ width += startx;
-+ dwBuf -= startx;
-+ startx = 0;
-+ }
-+ if(startx + width > bmp->width)
-+ width = bmp->width - startx;
-+ if(width <= 0)
-+ return FALSE;
-+#endif
-+
-+ src = ((BYTE *)bmp->bits + line * bmp->stride + (startx >> 3));
-+ /* get first partial byte, if any */
-+ startx = (8 - (startx & 0x07)) & 0x07;
-+ width -= startx;
-+ if(startx)
-+ {
-+ b = *src++ << (8 - startx);
-+ while(startx--)
-+ {
-+ if(b & 0x80)
-+ *dwBuf++ = pixOn;
-+ else
-+ *dwBuf++ = pixOff;
-+ b <<= 1;
-+ }
-+ }
-+
-+ /* then gets full next bytes */
-+ for( ; width > 7 ; width -= 8)
-+ {
-+ b = *src++;
-+ for(i = 0 ; i < 8 ; i++)
-+ {
-+ if(b & 0x80)
-+ *dwBuf++ = pixOn;
-+ else
-+ *dwBuf++ = pixOff;
-+ b <<= 1;
-+ }
-+ }
-+
-+ /* last partial byte, if any */
-+ if(width > 0)
-+ {
-+ b = *src;
-+ while(width--)
-+ {
-+ if(b & 0x80)
-+ *dwBuf++ = pixOn;
-+ else
-+ *dwBuf++ = pixOff;
-+ b <<= 1;
-+ }
-+ }
-+ return TRUE;
-+}
-+
-+BOOL _DIBDRV_PutLine32_RGB(const DIBDRVBITMAP *bmp, INT line, INT startx, int width, void *buf)
-+{
-+ DWORD *dwBuf = (DWORD *)buf;
-+ DWORD *dst = (DWORD *)((BYTE *)bmp->bits + line * bmp->stride + 4 * startx);
-+ for(; width; width--)
-+ *dst++ = *dwBuf++;
-+ return TRUE;
-+}
-+
-+BOOL _DIBDRV_PutLine32_BITFIELDS(const DIBDRVBITMAP *bmp, INT line, INT startx, int width, void *buf)
-+{
-+ DWORD *dwBuf = (DWORD *)buf;
-+ DWORD *dst = (DWORD *)((BYTE *)bmp->bits + line * bmp->stride + 4 * startx);
-+ RGBQUAD *c;
-+ for(; width; width--)
-+ {
-+ c = (RGBQUAD *)dwBuf++;
-+ *dst++ =
-+ PlaceField32(c->rgbRed , bmp->redShift , bmp->redLen ) |
-+ PlaceField32(c->rgbGreen, bmp->greenShift, bmp->greenLen) |
-+ PlaceField32(c->rgbBlue , bmp->blueShift , bmp->blueLen );
-+ }
-+ return TRUE;
-+}
-+
-+BOOL _DIBDRV_PutLine24(const DIBDRVBITMAP *bmp, INT line, INT startx, int width, void *buf)
-+{
-+ DWORD *dwBuf = (DWORD *)buf;
-+ BYTE *dst = ((BYTE *)bmp->bits + line * bmp->stride + 3 * startx);
-+ DWORD c;
-+ for(; width; width--)
-+ {
-+ c = *dwBuf++;
-+ *dst++ = c & 0x000000ff;
-+ *dst++ = (c & 0x0000ff00) >> 8;
-+ *dst++ = (c & 0x00ff0000) >> 16;
-+ }
-+ return TRUE;
-+}
-+
-+BOOL _DIBDRV_PutLine16_RGB(const DIBDRVBITMAP *bmp, INT line, INT startx, int width, void *buf)
-+{
-+ DWORD *dwBuf = (DWORD *)buf;
-+ WORD *dst = (WORD *)((BYTE *)bmp->bits + line * bmp->stride + 2 * startx);
-+ DWORD c;
-+ for(; width; width--)
-+ {
-+ c = *dwBuf++;
-+ *dst++ =
-+ /* 0RRR|RRGG|GGGB|BBBB */
-+ ((c & 0x000000f8) >> 3) |
-+ ((c & 0x0000f800) >> 6) |
-+ ((c & 0x00f80000) >> 9);
-+ }
-+ return TRUE;
-+}
-+
-+BOOL _DIBDRV_PutLine16_BITFIELDS(const DIBDRVBITMAP *bmp, INT line, INT startx, int width, void *buf)
-+{
-+ DWORD *dwBuf = (DWORD *)buf;
-+ WORD *dst = (WORD *)((BYTE *)bmp->bits + line * bmp->stride + 2 * startx);
-+ DWORD c;
-+
-+ BYTE bShift = 8 - bmp->blueLen;
-+ BYTE gShift = 16 - bmp->greenLen;
-+ BYTE rShift = 24 - bmp->redLen;
-+ for(; width; width--)
-+ {
-+ c = *dwBuf++;
-+ *dst++ =
-+ ((((c & 0x000000ff) >> bShift) << bmp->blueShift) & bmp->blueMask) |
-+ ((((c & 0x0000ff00) >> gShift) << bmp->greenShift) & bmp->greenMask) |
-+ ((((c & 0x00ff0000) >> rShift) << bmp->redShift) & bmp->redMask);
-+ }
-+ return TRUE;
-+}
-+
-+BOOL _DIBDRV_PutLine8(const DIBDRVBITMAP *bmp, INT line, INT startx, int width, void *buf)
-+{
-+ DWORD *dwBuf = (DWORD *)buf;
-+ BYTE *dst = ((BYTE *)bmp->bits + line * bmp->stride + startx);
-+ DWORD c;
-+ DWORD last_color = 0xffffffff;
-+ int last_index = -1;
-+
-+ for(; width; width--)
-+ {
-+ c = *dwBuf++;
-+
-+ /* slight optimization, as images often have many
-+ consecutive pixels with same color */
-+ if(last_index == -1 || c != last_color)
-+ {
-+ last_index = bmp->funcs->ColorToPixel(bmp, SwapColors(c));
-+ last_color = c;
-+ }
-+ *dst++ = last_index;
-+ }
-+ return TRUE;
-+}
-+
-+BOOL _DIBDRV_PutLine4(const DIBDRVBITMAP *bmp, INT line, INT startx, int width, void *buf)
-+{
-+ DWORD *dwBuf = (DWORD *)buf;
-+ BYTE *dst = ((BYTE *)bmp->bits + line * bmp->stride + (startx >> 1));
-+ DWORD c;
-+ DWORD last_color = 0xffffffff;
-+ int last_index = -1;
-+
-+ /* if startx is odd, put first nibble */
-+ if(startx & 0x01)
-+ {
-+ c = *dwBuf++;
-+
-+ last_index = bmp->funcs->ColorToPixel(bmp, SwapColors(c));
-+ last_color = c;
-+ *dst = (*dst & 0xf0) | last_index;
-+ dst++;
-+ width--;
-+ }
-+
-+ /* then gets all full image bytes */
-+ for( ; width > 1 ; width -= 2)
-+ {
-+ c = *dwBuf++;
-+
-+ /* slight optimization, as images often have many
-+ consecutive pixels with same color */
-+ if(last_index == -1 || c != last_color)
-+ {
-+ last_index = bmp->funcs->ColorToPixel(bmp, SwapColors(c));
-+ last_color = c;
-+ }
-+ *dst = last_index << 4;
-+
-+ c = *dwBuf++;
-+
-+ /* slight optimization, as images often have many
-+ consecutive pixels with same color */
-+ if(last_index == -1 || c != last_color)
-+ {
-+ last_index = bmp->funcs->ColorToPixel(bmp, SwapColors(c));
-+ last_color = c;
-+ }
-+ *dst++ |= last_index;
-+ }
-+
-+ /* last nibble, if any */
-+ if(width > 0)
-+ {
-+ c = *dwBuf;
-+
-+ /* slight optimization, as images often have many
-+ consecutive pixels with same color */
-+ if(last_index == -1 || c != last_color)
-+ last_index = bmp->funcs->ColorToPixel(bmp, SwapColors(c));
-+ *dst = (*dst & 0x0f) | (last_index << 4);
-+ }
-+ return TRUE;
-+}
-+
-+BOOL _DIBDRV_PutLine1(const DIBDRVBITMAP *bmp, INT line, INT startx, int width, void *buf)
-+{
-+ DWORD *dwBuf = (DWORD *)buf;
-+ BYTE *dst = ((BYTE *)bmp->bits + line * bmp->stride + (startx >> 3));
-+ BYTE b, mask;
-+ char i;
-+ DWORD c;
-+
-+ /* get foreground color */
-+ DWORD back = *(DWORD *)bmp->colorTable & 0x00ffffff;
-+ DWORD fore = *((DWORD *)bmp->colorTable + 1) & 0x00ffffff;
-+
-+ /* get 'light' color */
-+ int lightColor = bmp->lightColor;
-+
-+ /* put first partial byte, if any */
-+ startx &= 0x07;
-+ mask = 0x80 >> startx;
-+ startx = (8 - startx) & 0x07;
-+ if(startx)
-+ {
-+ width -= startx;
-+ b = *dst;
-+ while(startx--)
-+ {
-+ c = *dwBuf++ & 0x00ffffff;
-+ if(c == fore)
-+ b |= mask;
-+ else if(c == back)
-+ b &= !mask;
-+ else if((c == 0x00ffffff && lightColor) || (c == 0 && !lightColor))
-+ b |= mask;
-+ else
-+ b &= !mask;
-+ mask >>= 1;
-+ }
-+ *dst++ = b;
-+ }
-+
-+ /* then puts full next bytes */
-+ for( ; width > 7 ; width -= 8)
-+ {
-+ b = 0;
-+ mask = 0x80;
-+ for(i = 0 ; i < 8 ; i++)
-+ {
-+ c = *dwBuf++ & 0x00ffffff;
-+ if(c == fore || (c == 0x00ffffff && c != back && lightColor) || (c == 0 && !lightColor))
-+ b |= mask;
-+ mask >>= 1;
-+ }
-+ *dst++ = b;
-+ }
-+
-+ /* last partial byte, if any */
-+ if(width > 0)
-+ {
-+ b = *dst;
-+ mask = 0x80;
-+ while(width--)
-+ {
-+ c = *dwBuf++ & 0x00ffffff;
-+ if(c == fore)
-+ b |= mask;
-+ else if(c == back)
-+ b &= !mask;
-+ else if((c == 0x00ffffff && lightColor) || (c == 0 && !lightColor))
-+ b |= mask;
-+ else
-+ b &= !mask;
-+ mask >>= 1;
-+ }
-+ *dst = b;
-+ }
-+ return TRUE;
-+}
-diff -Nru a/dlls/winedib.drv/primitives_font.c b/dlls/winedib.drv/primitives_font.c
---- a/dlls/winedib.drv/primitives_font.c 1970-01-01 01:00:00.000000000 +0100
-+++ b/dlls/winedib.drv/primitives_font.c 2010-08-04 16:08:44.746222017 +0200
-@@ -0,0 +1,432 @@
-+/*
-+ * DIB Engine Font Primitives
-+ *
-+ * Copyright 2009 Massimo Del Fedele
-+ *
-+ * This library is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License as published by the Free Software Foundation; either
-+ * version 2.1 of the License, or (at your option) any later version.
-+ *
-+ * This library is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with this library; if not, write to the Free Software
-+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
-+ */
-+
-+#include "config.h"
-+#include "wine/port.h"
-+
-+#include "dibdrv.h"
-+
-+WINE_DEFAULT_DEBUG_CHANNEL(dibdrv);
-+
-+/* ------------------------------------------------------------*/
-+/* FREETYPE FONT BITMAP BLITTING */
-+void _DIBDRV_freetype_blit_8888(DIBDRVPHYSDEV *physDev, int x, int y, RECT *clipRec, FT_Bitmap *bmp)
-+{
-+ /* FIXME : MUST BE OPTIMIZED !!! */
-+
-+ DIBDRVBITMAP *dib = physDev->physBitmap;
-+ int bmpX, bmpY;
-+ BYTE *buf;
-+ int dibX, dibY;
-+ int xMin, xMax, yMin, yMax;
-+ DWORD *ptr;
-+#ifdef DIBDRV_ANTIALIASED_FONTS
-+ DWORD c;
-+ BYTE r, g, b, negColor;
-+#else
-+ DWORD c = dib->funcs->ColorToPixel(dib, physDev->textColor);
-+#endif
-+
-+ /* gets clip limits */
-+ xMin = clipRec->left;
-+ yMin = clipRec->top;
-+ xMax = clipRec->right;
-+ yMax = clipRec->bottom;
-+
-+ /* loop for every pixel in bitmap */
-+ buf = bmp->buffer;
-+ for(bmpY = 0, dibY = y; bmpY < bmp->rows; bmpY++, dibY++)
-+ {
-+ ptr = (DWORD *)((BYTE *)dib->bits + (dibY * dib->stride) + x * 4);
-+ for(bmpX = 0, dibX = x; bmpX < bmp->width; bmpX++, dibX++)
-+ {
-+ if(dibX < xMax && dibY < yMax && dibX >= xMin && dibY >= yMin && *buf)
-+ {
-+#ifdef DIBDRV_ANTIALIASED_FONTS
-+ c = physDev->textColorTable[*buf];
-+ if(*buf < 255)
-+ {
-+ negColor = 255 - *buf;
-+ r = (*ptr >> 16) & 0xff;
-+ g = (*ptr >> 8) & 0xff;
-+ b = *ptr & 0xff;
-+ c += MulDiv(r, 255 - *buf, 255) << 16 |
-+ MulDiv(g, 255 - *buf, 255) << 8 |
-+ MulDiv(b, 255 - *buf, 255);
-+ }
-+#endif
-+ *ptr = c;
-+ }
-+ buf++;
-+ ptr++;
-+ }
-+ }
-+}
-+
-+void _DIBDRV_freetype_blit_32_RGB(DIBDRVPHYSDEV *physDev, int x, int y, RECT *clipRec, FT_Bitmap *bmp)
-+{
-+ /* FIXME : MUST BE OPTIMIZED !!! */
-+
-+ DIBDRVBITMAP *dib = physDev->physBitmap;
-+ int bmpX, bmpY;
-+ BYTE *buf;
-+ int dibX, dibY;
-+ int xMin, xMax, yMin, yMax;
-+ DWORD *ptr;
-+#ifdef DIBDRV_ANTIALIASED_FONTS
-+ DWORD c;
-+ BYTE r, g, b, negColor;
-+#else
-+ DWORD c = dib->funcs->ColorToPixel(dib, physDev->textColor);
-+#endif
-+
-+ /* gets DIB limits */
-+ xMin = clipRec->left;
-+ yMin = clipRec->top;
-+ xMax = clipRec->right;
-+ yMax = clipRec->bottom;
-+
-+ /* loop for every pixel in bitmap */
-+ buf = bmp->buffer;
-+ for(bmpY = 0, dibY = y; bmpY < bmp->rows; bmpY++, dibY++)
-+ {
-+ ptr = (DWORD *)((BYTE *)dib->bits + (dibY * dib->stride) + x * 4);
-+ for(bmpX = 0, dibX = x; bmpX < bmp->width; bmpX++, dibX++)
-+ {
-+ if(dibX < xMax && dibY < yMax && dibX >= xMin && dibY >= yMin && *buf)
-+ {
-+#ifdef DIBDRV_ANTIALIASED_FONTS
-+ c = physDev->textColorTable[*buf];
-+ if(*buf < 255)
-+ {
-+ negColor = 255 - *buf;
-+ r = (*ptr >> 16) & 0xff;
-+ g = (*ptr >> 8) & 0xff;
-+ b = *ptr & 0xff;
-+ c += MulDiv(r, 255 - *buf, 255) << 16 |
-+ MulDiv(g, 255 - *buf, 255) << 8 |
-+ MulDiv(b, 255 - *buf, 255);
-+ }
-+#endif
-+ *ptr = c;
-+ }
-+ buf++;
-+ ptr++;
-+ }
-+ }
-+}
-+
-+void _DIBDRV_freetype_blit_32_BITFIELDS(DIBDRVPHYSDEV *physDev, int x, int y, RECT *clipRec, FT_Bitmap *bmp)
-+{
-+ /* FIXME : MUST BE OPTIMIZED !!! */
-+
-+ DIBDRVBITMAP *dib = physDev->physBitmap;
-+ int bmpX, bmpY;
-+ BYTE *buf;
-+ int dibX, dibY;
-+ int xMin, xMax, yMin, yMax;
-+#ifdef DIBDRV_ANTIALIASED_FONTS
-+ DWORD c;
-+ COLORREF pix;
-+ BYTE r, g, b, negColor;
-+#else
-+ DWORD c = dib->funcs->ColorToPixel(dib, physDev->textColor);
-+#endif
-+
-+ /* gets DIB limits */
-+ xMin = clipRec->left;
-+ yMin = clipRec->top;
-+ xMax = clipRec->right;
-+ yMax = clipRec->bottom;
-+
-+ /* loop for every pixel in bitmap */
-+ buf = bmp->buffer;
-+ for(bmpY = 0, dibY = y; bmpY < bmp->rows; bmpY++, dibY++)
-+ {
-+ for(bmpX = 0, dibX = x; bmpX < bmp->width; bmpX++, dibX++)
-+ {
-+ if(dibX < xMax && dibY < yMax && dibX >= xMin && dibY >= yMin && *buf)
-+ {
-+#ifdef DIBDRV_ANTIALIASED_FONTS
-+ c = physDev->textColorTable[*buf];
-+ if(*buf < 255)
-+ {
-+ negColor = 255 - *buf;
-+ pix = dib->funcs->GetPixel(dib, dibX, dibY);
-+ r = pix & 0xff;
-+ g = (pix >> 8) & 0xff;
-+ b = (pix >> 16) & 0xff;
-+ c += MulDiv(r, 255 - *buf, 255) << 16 |
-+ MulDiv(g, 255 - *buf, 255) << 8 |
-+ MulDiv(b, 255 - *buf, 255);
-+ }
-+#endif
-+ dib->funcs->SetPixel(dib, dibX, dibY, 0, c);
-+ }
-+ buf++;
-+ }
-+ }
-+}
-+
-+void _DIBDRV_freetype_blit_24(DIBDRVPHYSDEV *physDev, int x, int y, RECT *clipRec, FT_Bitmap *bmp)
-+{
-+ /* FIXME : MUST BE OPTIMIZED !!! */
-+
-+ DIBDRVBITMAP *dib = physDev->physBitmap;
-+ int bmpX, bmpY;
-+ BYTE *buf;
-+ int dibX, dibY;
-+ int xMin, xMax, yMin, yMax;
-+#ifdef DIBDRV_ANTIALIASED_FONTS
-+ DWORD c;
-+ COLORREF pix;
-+ BYTE r, g, b, negColor;
-+#else
-+ DWORD c = dib->funcs->ColorToPixel(dib, physDev->textColor);
-+#endif
-+
-+ /* gets DIB limits */
-+ xMin = clipRec->left;
-+ yMin = clipRec->top;
-+ xMax = clipRec->right;
-+ yMax = clipRec->bottom;
-+
-+ /* loop for every pixel in bitmap */
-+ buf = bmp->buffer;
-+ for(bmpY = 0, dibY = y; bmpY < bmp->rows; bmpY++, dibY++)
-+ {
-+ for(bmpX = 0, dibX = x; bmpX < bmp->width; bmpX++, dibX++)
-+ {
-+ if(dibX < xMax && dibY < yMax && dibX >= xMin && dibY >= yMin && *buf)
-+ {
-+#ifdef DIBDRV_ANTIALIASED_FONTS
-+ c = physDev->textColorTable[*buf];
-+ if(*buf < 255)
-+ {
-+ negColor = 255 - *buf;
-+ pix = dib->funcs->GetPixel(dib, dibX, dibY);
-+ r = pix & 0xff;
-+ g = (pix >> 8) & 0xff;
-+ b = (pix >> 16) & 0xff;
-+ c += MulDiv(r, 255 - *buf, 255) << 16 |
-+ MulDiv(g, 255 - *buf, 255) << 8 |
-+ MulDiv(b, 255 - *buf, 255);
-+ }
-+#endif
-+ dib->funcs->SetPixel(dib, dibX, dibY, 0, c);
-+ }
-+ buf++;
-+ }
-+ }
-+}
-+
-+void _DIBDRV_freetype_blit_16_RGB(DIBDRVPHYSDEV *physDev, int x, int y, RECT *clipRec, FT_Bitmap *bmp)
-+{
-+ /* FIXME : MUST BE OPTIMIZED !!! */
-+
-+ DIBDRVBITMAP *dib = physDev->physBitmap;
-+ int bmpX, bmpY;
-+ BYTE *buf;
-+ int dibX, dibY;
-+ int xMin, xMax, yMin, yMax;
-+#ifdef DIBDRV_ANTIALIASED_FONTS
-+ DWORD c;
-+ COLORREF pix;
-+ BYTE r, g, b, negColor;
-+#else
-+ DWORD c = dib->funcs->ColorToPixel(dib, physDev->textColor);
-+#endif
-+
-+ /* gets DIB limits */
-+ xMin = clipRec->left;
-+ yMin = clipRec->top;
-+ xMax = clipRec->right;
-+ yMax = clipRec->bottom;
-+
-+ /* loop for every pixel in bitmap */
-+ buf = bmp->buffer;
-+ for(bmpY = 0, dibY = y; bmpY < bmp->rows; bmpY++, dibY++)
-+ {
-+ for(bmpX = 0, dibX = x; bmpX < bmp->width; bmpX++, dibX++)
-+ {
-+ if(dibX < xMax && dibY < yMax && dibX >= xMin && dibY >= yMin && *buf)
-+ {
-+#ifdef DIBDRV_ANTIALIASED_FONTS
-+ c = physDev->textColorTable[*buf];
-+ if(*buf < 255)
-+ {
-+ negColor = 255 - *buf;
-+ pix = dib->funcs->GetPixel(dib, dibX, dibY);
-+ r = pix & 0xff;
-+ g = (pix >> 8) & 0xff;
-+ b = (pix >> 16) & 0xff;
-+ c += MulDiv(r, 255 - *buf, 255) << 16 |
-+ MulDiv(g, 255 - *buf, 255) << 8 |
-+ MulDiv(b, 255 - *buf, 255);
-+ }
-+#endif
-+ dib->funcs->SetPixel(dib, dibX, dibY, 0, c);
-+ }
-+ buf++;
-+ }
-+ }
-+}
-+
-+void _DIBDRV_freetype_blit_16_BITFIELDS(DIBDRVPHYSDEV *physDev, int x, int y, RECT *clipRec, FT_Bitmap *bmp)
-+{
-+ /* FIXME : MUST BE OPTIMIZED !!! */
-+
-+ DIBDRVBITMAP *dib = physDev->physBitmap;
-+ int bmpX, bmpY;
-+ BYTE *buf;
-+ int dibX, dibY;
-+ int xMin, xMax, yMin, yMax;
-+#ifdef DIBDRV_ANTIALIASED_FONTS
-+ DWORD c;
-+ COLORREF pix;
-+ BYTE r, g, b, negColor;
-+#else
-+ DWORD c = dib->funcs->ColorToPixel(dib, physDev->textColor);
-+#endif
-+
-+ /* gets DIB limits */
-+ xMin = clipRec->left;
-+ yMin = clipRec->top;
-+ xMax = clipRec->right;
-+ yMax = clipRec->bottom;
-+
-+ /* loop for every pixel in bitmap */
-+ buf = bmp->buffer;
-+ for(bmpY = 0, dibY = y; bmpY < bmp->rows; bmpY++, dibY++)
-+ {
-+ for(bmpX = 0, dibX = x; bmpX < bmp->width; bmpX++, dibX++)
-+ {
-+ if(dibX < xMax && dibY < yMax && dibX >= xMin && dibY >= yMin && *buf)
-+ {
-+#ifdef DIBDRV_ANTIALIASED_FONTS
-+ c = physDev->textColorTable[*buf];
-+ if(*buf < 255)
-+ {
-+ negColor = 255 - *buf;
-+ pix = dib->funcs->GetPixel(dib, dibX, dibY);
-+ r = pix & 0xff;
-+ g = (pix >> 8) & 0xff;
-+ b = (pix >> 16) & 0xff;
-+ c += MulDiv(r, 255 - *buf, 255) << 16 |
-+ MulDiv(g, 255 - *buf, 255) << 8 |
-+ MulDiv(b, 255 - *buf, 255);
-+ }
-+#endif
-+ dib->funcs->SetPixel(dib, dibX, dibY, 0, c);
-+ }
-+ buf++;
-+ }
-+ }
-+}
-+
-+void _DIBDRV_freetype_blit_8(DIBDRVPHYSDEV *physDev, int x, int y, RECT *clipRec, FT_Bitmap *bmp)
-+{
-+ /* FIXME : MUST BE OPTIMIZED !!! */
-+
-+ DIBDRVBITMAP *dib = physDev->physBitmap;
-+ int bmpX, bmpY;
-+ BYTE *buf;
-+ int dibX, dibY;
-+ int xMin, xMax, yMin, yMax;
-+ DWORD c = physDev->textColor;
-+
-+ /* gets DIB limits */
-+ xMin = clipRec->left;
-+ yMin = clipRec->top;
-+ xMax = clipRec->right;
-+ yMax = clipRec->bottom;
-+
-+ /* loop for every pixel in bitmap */
-+ buf = bmp->buffer;
-+ for(bmpY = 0, dibY = y; bmpY < bmp->rows; bmpY++, dibY++)
-+ {
-+ for(bmpX = 0, dibX = x; bmpX < bmp->width; bmpX++, dibX++)
-+ {
-+ if(dibX < xMax && dibY < yMax && dibX >= xMin && dibY >= yMin && *buf)
-+ dib->funcs->SetPixel(dib, dibX, dibY, 0, c);
-+ buf++;
-+ }
-+ }
-+}
-+
-+void _DIBDRV_freetype_blit_4(DIBDRVPHYSDEV *physDev, int x, int y, RECT *clipRec, FT_Bitmap *bmp)
-+{
-+ /* FIXME : MUST BE OPTIMIZED !!! */
-+
-+ DIBDRVBITMAP *dib = physDev->physBitmap;
-+ int bmpX, bmpY;
-+ BYTE *buf;
-+ int dibX, dibY;
-+ int xMin, xMax, yMin, yMax;
-+ DWORD c = physDev->textColor;
-+
-+ /* gets DIB limits */
-+ xMin = clipRec->left;
-+ yMin = clipRec->top;
-+ xMax = clipRec->right;
-+ yMax = clipRec->bottom;
-+
-+ /* loop for every pixel in bitmap */
-+ buf = bmp->buffer;
-+ for(bmpY = 0, dibY = y; bmpY < bmp->rows; bmpY++, dibY++)
-+ {
-+ for(bmpX = 0, dibX = x; bmpX < bmp->width; bmpX++, dibX++)
-+ {
-+ if(dibX < xMax && dibY < yMax && dibX >= xMin && dibY >= yMin && *buf)
-+ dib->funcs->SetPixel(dib, dibX, dibY, 0, c);
-+ buf++;
-+ }
-+ }
-+}
-+
-+void _DIBDRV_freetype_blit_1(DIBDRVPHYSDEV *physDev, int x, int y, RECT *clipRec, FT_Bitmap *bmp)
-+{
-+ /* FIXME : MUST BE OPTIMIZED !!! */
-+
-+ DIBDRVBITMAP *dib = physDev->physBitmap;
-+ int bmpX, bmpY;
-+ BYTE *buf;
-+ int dibX, dibY;
-+ int xMin, xMax, yMin, yMax;
-+ DWORD c = physDev->textColor;
-+
-+ /* gets DIB limits */
-+ xMin = clipRec->left;
-+ yMin = clipRec->top;
-+ xMax = clipRec->right;
-+ yMax = clipRec->bottom;
-+
-+ /* loop for every pixel in bitmap */
-+ buf = bmp->buffer;
-+ for(bmpY = 0, dibY = y; bmpY < bmp->rows; bmpY++, dibY++)
-+ {
-+ for(bmpX = 0, dibX = x; bmpX < bmp->width; bmpX++, dibX++)
-+ {
-+ if(dibX < xMax && dibY < yMax && dibX >= xMin && dibY >= yMin && *buf)
-+ dib->funcs->SetPixel(dib, dibX, dibY, 0, c);
-+ buf++;
-+ }
-+ }
-+}
-diff -Nru a/dlls/winedib.drv/primitives_line.c b/dlls/winedib.drv/primitives_line.c
---- a/dlls/winedib.drv/primitives_line.c 1970-01-01 01:00:00.000000000 +0100
-+++ b/dlls/winedib.drv/primitives_line.c 2010-08-04 16:08:44.502222017 +0200
-@@ -0,0 +1,434 @@
-+/*
-+ * DIB Engine line Primitives
-+ *
-+ * Copyright 2009 Massimo Del Fedele
-+ *
-+ * This library is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License as published by the Free Software Foundation; either
-+ * version 2.1 of the License, or (at your option) any later version.
-+ *
-+ * This library is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with this library; if not, write to the Free Software
-+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
-+ */
-+
-+#include "config.h"
-+#include "wine/port.h"
-+
-+#include "dibdrv.h"
-+
-+WINE_DEFAULT_DEBUG_CHANNEL(dibdrv);
-+
-+/* ------------------------------------------------------------*/
-+/* HORIZONTAL LINES */
-+void _DIBDRV_SolidHLine32(DIBDRVBITMAP *dib, int start, int end, int row, DWORD and, DWORD xor)
-+{
-+ DWORD *ptr;
-+ int i;
-+
-+ ptr = dib->funcs->GetPixelPointer(dib, start, row);
-+
-+ for(i = start; i < end; i++)
-+ _DIBDRV_rop32(ptr++, and, xor);
-+}
-+
-+void _DIBDRV_SolidHLine24(DIBDRVBITMAP *dib, int start, int end, int row, DWORD and, DWORD xor)
-+{
-+ BYTE *ptr;
-+ int i;
-+ BYTE and_bytes[3], xor_bytes[3];
-+
-+ and_bytes[0] = and & 0xff;
-+ and_bytes[1] = (and >> 8) & 0xff;
-+ and_bytes[2] = (and >> 16) & 0xff;
-+ xor_bytes[0] = xor & 0xff;
-+ xor_bytes[1] = (xor >> 8) & 0xff;
-+ xor_bytes[2] = (xor >> 16) & 0xff;
-+
-+ ptr = dib->funcs->GetPixelPointer(dib, start, row);
-+
-+ for(i = start; i < end; i++)
-+ {
-+ _DIBDRV_rop8(ptr++, and_bytes[0], xor_bytes[0]);
-+ _DIBDRV_rop8(ptr++, and_bytes[1], xor_bytes[1]);
-+ _DIBDRV_rop8(ptr++, and_bytes[2], xor_bytes[2]);
-+ }
-+}
-+
-+void _DIBDRV_SolidHLine16(DIBDRVBITMAP *dib, int start, int end, int row, DWORD and, DWORD xor)
-+{
-+ WORD *ptr;
-+ int i;
-+
-+ ptr = dib->funcs->GetPixelPointer(dib, start, row);
-+
-+ for(i = start; i < end; i++)
-+ _DIBDRV_rop16(ptr++, and, xor);
-+}
-+
-+void _DIBDRV_SolidHLine8(DIBDRVBITMAP *dib, int start, int end, int row, DWORD and, DWORD xor)
-+{
-+ BYTE *ptr;
-+ int i;
-+
-+ ptr = dib->funcs->GetPixelPointer(dib, start, row);
-+
-+ for(i = start; i < end; i++)
-+ _DIBDRV_rop8(ptr++, and, xor);
-+}
-+
-+void _DIBDRV_SolidHLine4(DIBDRVBITMAP *dib, int start, int end, int row, DWORD and, DWORD xor)
-+{
-+ BYTE *ptr;
-+ int i;
-+ BYTE byte_and, byte_xor;
-+
-+ ptr = dib->funcs->GetPixelPointer(dib, start, row);
-+ byte_and = (and & 0xf) | ((and << 4) & 0xf0);
-+ byte_xor = (xor & 0xf) | ((xor << 4) & 0xf0);
-+
-+ if(start & 1) /* upper nibble untouched */
-+ _DIBDRV_rop8(ptr++, byte_and | 0xf0, byte_xor & 0x0f);
-+
-+ for(i = (start + 1) / 2; i < end / 2; i++)
-+ _DIBDRV_rop8(ptr++, byte_and, byte_xor);
-+
-+ if(end & 1) /* lower nibble untouched */
-+ _DIBDRV_rop8(ptr, byte_and | 0x0f, byte_xor & 0xf0);
-+}
-+
-+void _DIBDRV_SolidHLine1(DIBDRVBITMAP *dib, int start, int end, int row, DWORD and, DWORD xor)
-+{
-+ BYTE *ptr;
-+ int i;
-+ BYTE byte_and = 0, byte_xor = 0, mask;
-+
-+ ptr = dib->funcs->GetPixelPointer(dib, start, row);
-+
-+ if(and & 1) byte_and = 0xff;
-+ if(xor & 1) byte_xor = 0xff;
-+
-+ if((start & ~7) == (end & ~7)) /* special case run inside one byte */
-+ {
-+ mask = ((1L << ((end & 7) - (start & 7))) - 1) << (8 - (end & 7));
-+ _DIBDRV_rop8(ptr, byte_and | ~mask, byte_xor & mask);
-+ return;
-+ }
-+
-+ if(start & 7)
-+ {
-+ mask = (1 << (8 - (start & 7))) - 1;
-+ _DIBDRV_rop8(ptr++, byte_and | ~mask, byte_xor & mask);
-+ }
-+
-+ for(i = (start + 7) / 8; i < end / 8; i++)
-+ _DIBDRV_rop8(ptr++, byte_and, byte_xor);
-+
-+ if(end & 7)
-+ {
-+ mask = ~((1 << (8 - (end & 7))) - 1);
-+ _DIBDRV_rop8(ptr++, byte_and | ~mask, byte_xor & mask);
-+ }
-+}
-+
-+void _DIBDRV_PatternHLine32(DIBDRVBITMAP *dib, int start, int end, int row, const void *and, const void *xor, DWORD count, DWORD offset)
-+{
-+ DWORD *ptr;
-+ const DWORD *and_ptr = and, *xor_ptr = xor;
-+ int i;
-+
-+ ptr = dib->funcs->GetPixelPointer(dib, start, row);
-+
-+ and_ptr += offset;
-+ xor_ptr += offset;
-+ for(i = start; i < end; i++)
-+ {
-+ _DIBDRV_rop32(ptr++, *and_ptr++, *xor_ptr++);
-+ if(++offset == count)
-+ {
-+ offset = 0;
-+ and_ptr = and;
-+ xor_ptr = xor;
-+ }
-+ }
-+}
-+
-+void _DIBDRV_PatternHLine24(DIBDRVBITMAP *dib, int start, int end, int row, const void *and, const void *xor, DWORD count, DWORD offset)
-+{
-+ BYTE *ptr;
-+ const BYTE *and_ptr = and, *xor_ptr = xor;
-+ int i;
-+
-+ ptr = dib->funcs->GetPixelPointer(dib, start, row);
-+
-+ and_ptr += offset * 3;
-+ xor_ptr += offset * 3;
-+
-+ for(i = start; i < end; i++)
-+ {
-+ _DIBDRV_rop8(ptr++, *and_ptr++, *xor_ptr++);
-+ _DIBDRV_rop8(ptr++, *and_ptr++, *xor_ptr++);
-+ _DIBDRV_rop8(ptr++, *and_ptr++, *xor_ptr++);
-+ if(++offset == count)
-+ {
-+ offset = 0;
-+ and_ptr = and;
-+ xor_ptr = xor;
-+ }
-+ }
-+}
-+
-+void _DIBDRV_PatternHLine16(DIBDRVBITMAP *dib, int start, int end, int row, const void *and, const void *xor, DWORD count, DWORD offset)
-+{
-+ WORD *ptr;
-+ const WORD *and_ptr = and, *xor_ptr = xor;
-+ int i;
-+
-+ ptr = dib->funcs->GetPixelPointer(dib, start, row);
-+
-+ and_ptr += offset;
-+ xor_ptr += offset;
-+
-+ for(i = start; i < end; i++)
-+ {
-+ _DIBDRV_rop16(ptr++, *and_ptr++, *xor_ptr++);
-+ if(++offset == count)
-+ {
-+ offset = 0;
-+ and_ptr = and;
-+ xor_ptr = xor;
-+ }
-+ }
-+}
-+
-+void _DIBDRV_PatternHLine8(DIBDRVBITMAP *dib, int start, int end, int row, const void *and, const void *xor, DWORD count, DWORD offset)
-+{
-+ BYTE *ptr;
-+ const BYTE *and_ptr = and, *xor_ptr = xor;
-+ int i;
-+
-+ ptr = dib->funcs->GetPixelPointer(dib, start, row);
-+
-+ and_ptr += offset;
-+ xor_ptr += offset;
-+
-+ for(i = start; i < end; i++)
-+ {
-+ _DIBDRV_rop8(ptr++, *and_ptr++, *xor_ptr++);
-+ if(++offset == count)
-+ {
-+ offset = 0;
-+ and_ptr = and;
-+ xor_ptr = xor;
-+ }
-+ }
-+}
-+
-+void _DIBDRV_PatternHLine4(DIBDRVBITMAP *dib, int start, int end, int row, const void *and, const void *xor, DWORD count, DWORD offset)
-+{
-+ BYTE *ptr;
-+ const BYTE *and_ptr = and, *xor_ptr = xor;
-+ int i;
-+ BYTE byte_and, byte_xor;
-+
-+ ptr = dib->funcs->GetPixelPointer(dib, start, row);
-+
-+ and_ptr += offset / 2;
-+ xor_ptr += offset / 2;
-+
-+ for(i = start; i < end; i++)
-+ {
-+ if(offset & 1)
-+ {
-+ byte_and = *and_ptr++ & 0x0f;
-+ byte_xor = *xor_ptr++ & 0x0f;
-+ }
-+ else
-+ {
-+ byte_and = (*and_ptr & 0xf0) >> 4;
-+ byte_xor = (*xor_ptr & 0xf0) >> 4;
-+ }
-+
-+ if(i & 1)
-+ byte_and |= 0xf0;
-+ else
-+ {
-+ byte_and = (byte_and << 4) | 0x0f;
-+ byte_xor <<= 4;
-+ }
-+
-+ _DIBDRV_rop8(ptr, byte_and, byte_xor);
-+
-+ if(i & 1) ptr++;
-+
-+ if(++offset == count)
-+ {
-+ offset = 0;
-+ and_ptr = and;
-+ xor_ptr = xor;
-+ }
-+ }
-+}
-+
-+void _DIBDRV_PatternHLine1(DIBDRVBITMAP *dib, int start, int end, int row, const void *and, const void *xor, DWORD count, DWORD offset)
-+{
-+ BYTE *ptr;
-+ const BYTE *and_ptr = and, *xor_ptr = xor;
-+ int i;
-+ BYTE byte_and, byte_xor, dst_mask, brush_mask;
-+
-+ ptr = dib->funcs->GetPixelPointer(dib, start, row);
-+
-+ and_ptr += offset / 8;
-+ xor_ptr += offset / 8;
-+
-+ for(i = start; i < end; i++)
-+ {
-+ dst_mask = 1 << (7 - (i & 7));
-+ brush_mask = 1 << (7 - (offset & 7));
-+
-+ byte_and = (*and_ptr & brush_mask) ? 0xff : 0;
-+ byte_xor = (*xor_ptr & brush_mask) ? 0xff : 0;
-+
-+ byte_and |= ~dst_mask;
-+ byte_xor &= dst_mask;
-+
-+ _DIBDRV_rop8(ptr, byte_and, byte_xor);
-+
-+ if((i & 7) == 7) ptr++;
-+ if(++offset == count)
-+ {
-+ offset = 0;
-+ and_ptr = and;
-+ xor_ptr = xor;
-+ }
-+ else if((offset & 7) == 7)
-+ {
-+ and_ptr++;
-+ xor_ptr++;
-+ }
-+ }
-+}
-+
-+/* ------------------------------------------------------------*/
-+/* VERTICAL LINES */
-+void _DIBDRV_SolidVLine32(DIBDRVBITMAP *dib, int col, int start, int end, DWORD and, DWORD xor)
-+{
-+ BYTE *ptr;
-+ int i;
-+
-+ ptr = dib->funcs->GetPixelPointer(dib, col, start);
-+
-+ for(i = start; i < end; i++)
-+ {
-+ _DIBDRV_rop32((DWORD*)ptr, and, xor);
-+ ptr += dib->stride;
-+ }
-+}
-+
-+void _DIBDRV_SolidVLine24(DIBDRVBITMAP *dib, int col, int start, int end, DWORD and, DWORD xor)
-+{
-+ BYTE *ptr;
-+ int i;
-+ BYTE and_bytes[3], xor_bytes[3];
-+
-+ and_bytes[0] = and & 0xff;
-+ and_bytes[1] = (and >> 8) & 0xff;
-+ and_bytes[2] = (and >> 16) & 0xff;
-+ xor_bytes[0] = xor & 0xff;
-+ xor_bytes[1] = (xor >> 8) & 0xff;
-+ xor_bytes[2] = (xor >> 16) & 0xff;
-+
-+ ptr = dib->funcs->GetPixelPointer(dib, col, start);
-+
-+ for(i = start; i < end; i++)
-+ {
-+ _DIBDRV_rop8(ptr, and_bytes[0], xor_bytes[0]);
-+ _DIBDRV_rop8(ptr + 1, and_bytes[1], xor_bytes[1]);
-+ _DIBDRV_rop8(ptr + 2, and_bytes[2], xor_bytes[2]);
-+ ptr += dib->stride;
-+ }
-+}
-+
-+void _DIBDRV_SolidVLine16(DIBDRVBITMAP *dib, int col, int start, int end, DWORD and, DWORD xor)
-+{
-+ BYTE *ptr;
-+ int i;
-+
-+ ptr = dib->funcs->GetPixelPointer(dib, col, start);
-+
-+ for(i = start; i < end; i++)
-+ {
-+ _DIBDRV_rop16((WORD*)ptr, and, xor);
-+ ptr += dib->stride;
-+ }
-+}
-+
-+void _DIBDRV_SolidVLine8(DIBDRVBITMAP *dib, int col, int start, int end, DWORD and, DWORD xor)
-+{
-+ BYTE *ptr;
-+ int i;
-+
-+ ptr = dib->funcs->GetPixelPointer(dib, col, start);
-+
-+ for(i = start; i < end; i++)
-+ {
-+ _DIBDRV_rop8(ptr, and, xor);
-+ ptr += dib->stride;
-+ }
-+}
-+
-+void _DIBDRV_SolidVLine4(DIBDRVBITMAP *dib, int col, int start, int end, DWORD and, DWORD xor)
-+{
-+ BYTE *ptr;
-+ int i;
-+ BYTE byte_and, byte_xor;
-+
-+ if(col & 1) /* upper nibble untouched */
-+ {
-+ byte_and = (and & 0xf) | 0xf0;
-+ byte_xor = (xor & 0xf);
-+ }
-+ else
-+ {
-+ byte_and = ((and << 4) & 0xf0) | 0x0f;
-+ byte_xor = ((xor << 4) & 0xf0);
-+ }
-+
-+ ptr = dib->funcs->GetPixelPointer(dib, col, start);
-+
-+ for(i = start; i < end; i++)
-+ {
-+ _DIBDRV_rop8(ptr, byte_and, byte_xor);
-+ ptr += dib->stride;
-+ }
-+}
-+
-+void _DIBDRV_SolidVLine1(DIBDRVBITMAP *dib, int col, int start, int end, DWORD and, DWORD xor)
-+{
-+ BYTE *ptr;
-+ int i;
-+ BYTE byte_and = 0, byte_xor = 0, mask;
-+
-+ if(and & 1) byte_and = 0xff;
-+ if(xor & 1) byte_xor = 0xff;
-+
-+ mask = 1 << (7 - (col & 7));
-+
-+ byte_and |= ~mask;
-+ byte_xor &= mask;
-+
-+ ptr = dib->funcs->GetPixelPointer(dib, col, start);
-+
-+ for(i = start; i < end; i++)
-+ {
-+ _DIBDRV_rop8(ptr, byte_and, byte_xor);
-+ ptr += dib->stride;
-+ }
-+}
-diff -Nru a/dlls/winedib.drv/primitives_pixel.c b/dlls/winedib.drv/primitives_pixel.c
---- a/dlls/winedib.drv/primitives_pixel.c 1970-01-01 01:00:00.000000000 +0100
-+++ b/dlls/winedib.drv/primitives_pixel.c 2010-08-04 16:08:44.643222017 +0200
-@@ -0,0 +1,240 @@
-+/*
-+ * DIB Engine pixel Primitives
-+ *
-+ * Copyright 2009 Massimo Del Fedele
-+ *
-+ * This library is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License as published by the Free Software Foundation; either
-+ * version 2.1 of the License, or (at your option) any later version.
-+ *
-+ * This library is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with this library; if not, write to the Free Software
-+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
-+ */
-+
-+#include "config.h"
-+#include "wine/port.h"
-+
-+#include "dibdrv.h"
-+
-+WINE_DEFAULT_DEBUG_CHANNEL(dibdrv);
-+
-+/* ------------------------------------------------------------*/
-+/* BITFIELD HELPERS */
-+static inline DWORD GetField32 (DWORD pixel, int shift, int len)
-+{
-+ pixel = pixel & (((1 << (len)) - 1) << shift);
-+ pixel = pixel << (32 - (shift + len)) >> 24;
-+ return pixel;
-+}
-+
-+/* ------------------------------------------------------------*/
-+/* PIXEL POINTER READING */
-+void *_DIBDRV_GetPixelPointer32(const DIBDRVBITMAP *dib, int x, int y)
-+{
-+ BYTE *ptr = dib->bits;
-+
-+ ptr += (y * dib->stride);
-+
-+ ptr += x * 4;
-+ return ptr;
-+}
-+
-+void *_DIBDRV_GetPixelPointer24(const DIBDRVBITMAP *dib, int x, int y)
-+{
-+ BYTE *ptr = dib->bits;
-+
-+ ptr += (y * dib->stride);
-+
-+ ptr += x * 3;
-+ return ptr;
-+}
-+
-+void *_DIBDRV_GetPixelPointer16(const DIBDRVBITMAP *dib, int x, int y)
-+{
-+ BYTE *ptr = dib->bits;
-+
-+ ptr += (y * dib->stride);
-+
-+ ptr += x * 2;
-+ return ptr;
-+}
-+
-+void *_DIBDRV_GetPixelPointer8(const DIBDRVBITMAP *dib, int x, int y)
-+{
-+ BYTE *ptr = dib->bits;
-+
-+ ptr += (y * dib->stride);
-+
-+ ptr += x;
-+ return ptr;
-+}
-+
-+void *_DIBDRV_GetPixelPointer4(const DIBDRVBITMAP *dib, int x, int y)
-+{
-+ BYTE *ptr = dib->bits;
-+
-+ ptr += (y * dib->stride);
-+
-+ ptr += x / 2;
-+ return ptr;
-+}
-+
-+void *_DIBDRV_GetPixelPointer1(const DIBDRVBITMAP *dib, int x, int y)
-+{
-+ BYTE *ptr = dib->bits;
-+
-+ ptr += (y * dib->stride);
-+
-+ ptr += x / 8;
-+ return ptr;
-+}
-+
-+/* ------------------------------------------------------------*/
-+/* PIXEL WRITING */
-+void _DIBDRV_SetPixel32(DIBDRVBITMAP *dib, int x, int y, DWORD and, DWORD xor)
-+{
-+ DWORD *ptr = dib->funcs->GetPixelPointer(dib, x, y);
-+ _DIBDRV_rop32(ptr, and, xor);
-+}
-+
-+void _DIBDRV_SetPixel24(DIBDRVBITMAP *dib, int x, int y, DWORD and, DWORD xor)
-+{
-+ BYTE *ptr = dib->funcs->GetPixelPointer(dib, x, y);
-+ _DIBDRV_rop8(ptr, and & 0xff, xor & 0xff);
-+ _DIBDRV_rop8(ptr + 1, (and >> 8) & 0xff, (xor >> 8) & 0xff);
-+ _DIBDRV_rop8(ptr + 2, (and >> 16) & 0xff, (xor >> 16) & 0xff);
-+}
-+
-+void _DIBDRV_SetPixel16(DIBDRVBITMAP *dib, int x, int y, DWORD and, DWORD xor)
-+{
-+ WORD *ptr = dib->funcs->GetPixelPointer(dib, x, y);
-+ _DIBDRV_rop16(ptr, and, xor);
-+}
-+
-+void _DIBDRV_SetPixel8(DIBDRVBITMAP *dib, int x, int y, DWORD and, DWORD xor)
-+{
-+ BYTE *ptr = dib->funcs->GetPixelPointer(dib, x, y);
-+ _DIBDRV_rop8(ptr, and, xor);
-+}
-+
-+void _DIBDRV_SetPixel4(DIBDRVBITMAP *dib, int x, int y, DWORD and, DWORD xor)
-+{
-+ BYTE *ptr = dib->funcs->GetPixelPointer(dib, x, y);
-+ BYTE byte_and, byte_xor;
-+
-+ if(x & 1) /* upper nibble untouched */
-+ {
-+ byte_and = (and & 0xf) | 0xf0;
-+ byte_xor = (xor & 0xf);
-+ }
-+ else
-+ {
-+ byte_and = ((and << 4) & 0xf0) | 0x0f;
-+ byte_xor = ((xor << 4) & 0xf0);
-+ }
-+
-+ _DIBDRV_rop8(ptr, byte_and, byte_xor);
-+}
-+
-+void _DIBDRV_SetPixel1(DIBDRVBITMAP *dib, int x, int y, DWORD and, DWORD xor)
-+{
-+ BYTE *ptr;
-+ BYTE byte_and = 0, byte_xor = 0, mask;
-+
-+ if(and & 1) byte_and = 0xff;
-+ if(xor & 1) byte_xor = 0xff;
-+
-+ mask = 1 << (7 - (x & 7));
-+
-+ byte_and |= ~mask;
-+ byte_xor &= mask;
-+
-+ ptr = dib->funcs->GetPixelPointer(dib, x, y);
-+
-+ _DIBDRV_rop8(ptr, byte_and, byte_xor);
-+}
-+
-+/* ------------------------------------------------------------*/
-+/* PIXEL READING */
-+DWORD _DIBDRV_GetPixel32_RGB(const DIBDRVBITMAP *dib, int x, int y)
-+{
-+ DWORD c = *(DWORD *)dib->funcs->GetPixelPointer(dib, x, y);
-+ return
-+ ((c & 0x000000ff) << 16) |
-+ ((c & 0x0000ff00) ) |
-+ ((c & 0x00ff0000) >> 16) |
-+ ( c & 0xff000000 ); /* last one for alpha channel */
-+}
-+
-+DWORD _DIBDRV_GetPixel32_BITFIELDS(const DIBDRVBITMAP *dib, int x, int y)
-+{
-+ DWORD *ptr = dib->funcs->GetPixelPointer(dib, x, y);
-+
-+ return GetField32(*ptr, dib->redShift, dib->redLen) |
-+ GetField32(*ptr, dib->greenShift, dib->greenLen) << 8 |
-+ GetField32(*ptr, dib->blueShift, dib->blueLen) << 16;
-+}
-+
-+DWORD _DIBDRV_GetPixel24(const DIBDRVBITMAP *dib, int x, int y)
-+{
-+ BYTE *ptr = dib->funcs->GetPixelPointer(dib, x, y);
-+ return ((WORD)ptr[0] << 16) | ((WORD)ptr[1] << 8) | (WORD)ptr[2];
-+}
-+
-+DWORD _DIBDRV_GetPixel16_RGB(const DIBDRVBITMAP *dib, int x, int y)
-+{
-+ WORD c = *(WORD *)dib->funcs->GetPixelPointer(dib, x, y);
-+ /* 0RRR|RRGG|GGGB|BBBB */
-+ return ((c & 0x7c00) >> 7) | ((c & 0x03e0) << 6) | ((c & 0x001f) << 19);
-+}
-+
-+DWORD _DIBDRV_GetPixel16_BITFIELDS(const DIBDRVBITMAP *dib, int x, int y)
-+{
-+ WORD c = *(WORD *)dib->funcs->GetPixelPointer(dib, x, y);
-+
-+ return (((c & dib->blueMask ) >> dib->blueShift ) << (24 - dib->blueLen )) |
-+ (((c & dib->greenMask) >> dib->greenShift) << (16 - dib->greenLen)) |
-+ (((c & dib->redMask ) >> dib->redShift ) << ( 8 - dib->redLen ));
-+}
-+
-+DWORD _DIBDRV_GetPixel8(const DIBDRVBITMAP *dib, int x, int y)
-+{
-+ BYTE *ptr = dib->funcs->GetPixelPointer(dib, x, y);
-+ RGBQUAD *color = dib->colorTable + *ptr;
-+ return (color->rgbRed) | (color->rgbGreen << 8) | (color->rgbBlue << 16);
-+}
-+
-+DWORD _DIBDRV_GetPixel4(const DIBDRVBITMAP *dib, int x, int y)
-+{
-+ BYTE *ptr = dib->funcs->GetPixelPointer(dib, x, y), pix;
-+ RGBQUAD *color;
-+
-+ if(x & 1)
-+ pix = *ptr & 0x0f;
-+ else
-+ pix = *ptr >> 4;
-+
-+ color = dib->colorTable + pix;
-+ return (color->rgbRed) | (color->rgbGreen << 8) | (color->rgbBlue << 16);
-+}
-+
-+DWORD _DIBDRV_GetPixel1(const DIBDRVBITMAP *dib, int x, int y)
-+{
-+ BYTE *ptr = dib->funcs->GetPixelPointer(dib, x, y), pix;
-+ RGBQUAD *color;
-+
-+ pix = *ptr;
-+
-+ pix >>= (7 - (x & 7));
-+ pix &= 1;
-+
-+ color = dib->colorTable + pix;
-+ return (color->rgbRed) | (color->rgbGreen << 8) | (color->rgbBlue << 16);
-+}
-diff -Nru a/dlls/winedib.drv/primitives_rop2.c b/dlls/winedib.drv/primitives_rop2.c
---- a/dlls/winedib.drv/primitives_rop2.c 1970-01-01 01:00:00.000000000 +0100
-+++ b/dlls/winedib.drv/primitives_rop2.c 2010-08-04 16:08:44.508222017 +0200
-@@ -0,0 +1,112 @@
-+/*
-+ * DIB Engine ROP2 Primitives
-+ *
-+ * Copyright 2008 Huw Davies
-+ * Copyright 2008 Massimo Del Fedele
-+ *
-+ * This library is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License as published by the Free Software Foundation; either
-+ * version 2.1 of the License, or (at your option) any later version.
-+ *
-+ * This library is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with this library; if not, write to the Free Software
-+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
-+ */
-+
-+#include "config.h"
-+#include "wine/port.h"
-+
-+#include "dibdrv.h"
-+
-+WINE_DEFAULT_DEBUG_CHANNEL(dibdrv);
-+
-+/* ------------------------------------------------------------*/
-+/* BASIC ROP HELPER */
-+/*
-+ *
-+ * Decompose the 16 ROP2s into an expression of the form
-+ *
-+ * D = (D & A) ^ X
-+ *
-+ * Where A and X depend only on P (and so can be precomputed).
-+ *
-+ * A X
-+ *
-+ * R2_BLACK 0 0 0
-+ * R2_NOTMERGEPEN ~(D | P) ~P ~P
-+ * R2_MASKNOTPEN ~P & D ~P 0
-+ * R2_NOTCOPYPEN ~P 0 ~P
-+ * R2_MASKPENNOT P & ~D P P
-+ * R2_NOT ~D 1 1
-+ * R2_XORPEN P ^ D 1 P
-+ * R2_NOTMASKPEN ~(P & D) P 1
-+ * R2_MASKPEN P & D P 0
-+ * R2_NOTXORPEN ~(P ^ D) 1 ~P
-+ * R2_NOP D 1 0
-+ * R2_MERGENOTPEN ~P | D P ~P
-+ * R2_COPYPEN P 0 P
-+ * R2_MERGEPENNOT P | ~D ~P 1
-+ * R2_MERGEPEN P | D ~P P
-+ * R2_WHITE 1 0 1
-+ *
-+ */
-+
-+/* A = (P & A1) | (~P & A2) */
-+#define ZERO {0, 0}
-+#define ONE {0xffffffff, 0xffffffff}
-+#define P {0xffffffff, 0}
-+#define NOT_P {0, 0xffffffff}
-+
-+static const DWORD rop2_and_array[16][2] =
-+{
-+ ZERO, NOT_P, NOT_P, ZERO,
-+ P, ONE, ONE, P,
-+ P, ONE, ONE, P,
-+ ZERO, NOT_P, NOT_P, ZERO
-+};
-+
-+/* X = (P & X1) | (~P & X2) */
-+static const DWORD rop2_xor_array[16][2] =
-+{
-+ ZERO, NOT_P, ZERO, NOT_P,
-+ P, ONE, P, ONE,
-+ ZERO, NOT_P, ZERO, NOT_P,
-+ P, ONE, P, ONE
-+};
-+
-+#undef NOT_P
-+#undef P
-+#undef ONE
-+#undef ZERO
-+
-+void _DIBDRV_CalcAndXorMasks(INT rop, DWORD color, DWORD *and, DWORD *xor)
-+{
-+ /* NB The ROP2 codes start at one and the arrays are zero-based */
-+ rop = (rop - 1) & 0x0f;
-+ *and = (color & rop2_and_array[rop][0]) | ((~color) & rop2_and_array[rop][1]);
-+ *xor = (color & rop2_xor_array[rop][0]) | ((~color) & rop2_xor_array[rop][1]);
-+}
-+
-+/* ------------------------------------------------------------*/
-+/* ROP PIXEL FUNCTIONS */
-+
-+inline void _DIBDRV_rop32(DWORD *ptr, DWORD and, DWORD xor)
-+{
-+ *ptr = (*ptr & and) ^ xor;
-+}
-+
-+inline void _DIBDRV_rop16(WORD *ptr, WORD and, WORD xor)
-+{
-+ *ptr = (*ptr & and) ^ xor;
-+}
-+
-+inline void _DIBDRV_rop8(BYTE *ptr, BYTE and, BYTE xor)
-+{
-+ *ptr = (*ptr & and) ^ xor;
-+}
-diff -Nru a/dlls/winedib.drv/primitives_rop3.c b/dlls/winedib.drv/primitives_rop3.c
---- a/dlls/winedib.drv/primitives_rop3.c 1970-01-01 01:00:00.000000000 +0100
-+++ b/dlls/winedib.drv/primitives_rop3.c 2010-08-04 16:08:44.599222017 +0200
-@@ -0,0 +1,786 @@
-+#include "config.h"
-+#include "wine/port.h"
-+
-+#include "dibdrv.h"
-+
-+WINE_DEFAULT_DEBUG_CHANNEL(dibdrv);
-+
-+/* the ROP3 operations
-+ this is a BIG case block; beware that some
-+ commons ROP3 operations will be optimized
-+ from inside blt routines */
-+DWORD _DIBDRV_ROP3(DWORD p, DWORD s, DWORD d, BYTE rop)
-+{
-+ switch(rop)
-+ {
-+ case 0x00: /* 0 BLACKNESS */
-+ return 0;
-+
-+ case 0x01: /* DPSoon */
-+ return (~(p | s | d)) & 0x00ffffff;
-+
-+ case 0x02: /* DPSona */
-+ return (d & ~(p | s)) & 0x00ffffff;
-+
-+ case 0x03: /* PSon */
-+ return (~(p | s)) & 0x00ffffff;
-+
-+ case 0x04: /* SDPona */
-+ return (s & ~(d | p)) & 0x00ffffff;
-+
-+ case 0x05: /* DPon */
-+ return (~(d | p)) & 0x00ffffff;
-+
-+ case 0x06: /* PDSxnon */
-+ return (~(p | ~(d ^ s))) & 0x00ffffff;
-+
-+ case 0x07: /* PDSaon */
-+ return (~((d & s) | p) ) & 0x00ffffff;
-+
-+ case 0x08: /* SDPnaa */
-+ return (d & ~p & s) & 0x00ffffff;
-+
-+ case 0x09: /* PDSxon */
-+ return (~((d ^ s) | p)) & 0x00ffffff;
-+
-+ case 0x0A: /* DPna */
-+ return (~p & d) & 0x00ffffff;
-+
-+ case 0x0B: /* PSDnaon */
-+ return (~((~d & s) | p)) & 0x00ffffff;
-+
-+ case 0x0C: /* SPna */
-+ return (~p & s) & 0x00ffffff;
-+
-+ case 0x0D: /* PDSnaon */
-+ return (~((~s & d) | p)) & 0x00ffffff;
-+
-+ case 0x0E: /* PDSonon */
-+ return (~(~(d | s) | p)) & 0x00ffffff;
-+
-+ case 0x0F: /* Pn */
-+ return (~p) & 0x00ffffff;
-+
-+ case 0x10: /* PDSona */
-+ return (~(d | s) & p) & 0x00ffffff;
-+
-+ case 0x11: /* DSon NOTSRCERASE */
-+ return (~(d | s)) & 0x00ffffff;
-+
-+ case 0x12: /* SDPxnon */
-+ return (~(~(d ^ p) | s)) & 0x00ffffff;
-+
-+ case 0x13: /* SDPaon */
-+ return (~((d & p) | s)) & 0x00ffffff;
-+
-+ case 0x14: /* DPSxnon */
-+ return (~(~(p ^ s) | d)) & 0x00ffffff;
-+
-+ case 0x15: /* DPSaon */
-+ return (~((p & s) | d)) & 0x00ffffff;
-+
-+ case 0x16: /* PSDPSanaxx */
-+ return (((~(p & s) & d) ^ s) ^ p) & 0x00ffffff;
-+
-+ case 0x17: /* SSPxDSxaxn */
-+ return (~(((d ^ s) & (s ^ p)) ^ s)) & 0x00ffffff;
-+
-+ case 0x18: /* SPxPDxa */
-+ return ((s ^ p) & (p ^ d)) & 0x00ffffff;
-+
-+ case 0x19: /* SDPSanaxn */
-+ return (~((~(p & s) & d) ^ s)) & 0x00ffffff;
-+
-+ case 0x1A: /* PDSPaox */
-+ return (((s & p) | d) ^ p) & 0x00ffffff;
-+
-+ case 0x1B: /* SDPSxaxn */
-+ return (~(((p ^ s) & d) ^ s)) & 0x00ffffff;
-+
-+ case 0x1C: /* PSDPaox */
-+ return (((d & p) | s) ^ p) & 0x00ffffff;
-+
-+ case 0x1D: /* DSPDxaxn */
-+ return (~(((p ^ d) & s) ^ d)) & 0x00ffffff;
-+
-+ case 0x1E: /* PDSox */
-+ return ((d | s) ^ p) & 0x00ffffff;
-+
-+ case 0x1F: /* PDSoan */
-+ return (~((d | s) & p)) & 0x00ffffff;
-+
-+ case 0x20: /* DPSnaa */
-+ return (p & ~s & d) & 0x00ffffff;
-+
-+ case 0x21: /* SDPxon */
-+ return (~((d ^ p) | s)) & 0x00ffffff;
-+
-+ case 0x22: /* DSna */
-+ return (d & ~s) & 0x00ffffff;
-+
-+ case 0x23: /* SPDnaon */
-+ return (~((p & ~d) | s)) & 0x00ffffff;
-+
-+ case 0x24: /* SPxDSxa */
-+ return ((s ^ p) & (d ^ s)) & 0x00ffffff;
-+
-+ case 0x25: /* PDSPanaxn */
-+ return (~((~(s & p) & d) ^ p)) & 0x00ffffff;
-+
-+ case 0x26: /* SDPSaox */
-+ return (((p & s) | d) ^ s) & 0x00ffffff;
-+
-+ case 0x27: /* SDPSxnox */
-+ return ((~(p ^ s) | d) ^ s) & 0x00ffffff;
-+
-+ case 0x28: /* DPSxa */
-+ return ((p ^ s) & d) & 0x00ffffff;
-+
-+ case 0x29: /* PSDPSaoxxn */
-+ return (~((((p & s) | d) ^ s) ^ p)) & 0x00ffffff;
-+
-+ case 0x2A: /* DPSana */
-+ return (~(p & s) & d) & 0x00ffffff;
-+
-+ case 0x2B: /* SSPxPDxaxn */
-+ return (~(((s ^ p) & (p ^ d)) ^ s)) & 0x00ffffff;
-+
-+ case 0x2C: /* SPDSoax */
-+ return (((d | s) & p) ^ s) & 0x00ffffff;
-+
-+ case 0x2D: /* PSDnox */
-+ return ((s | ~d) ^ p) & 0x00ffffff;
-+
-+ case 0x2E: /* PSDPxox */
-+ return (((d ^ p) | s) ^ p) & 0x00ffffff;
-+
-+ case 0x2F: /* PSDnoan */
-+ return (~((s | ~d) & p)) & 0x00ffffff;
-+
-+ case 0x30: /* PSna */
-+ return (p & ~s) & 0x00ffffff;
-+
-+ case 0x31: /* SDPnaon */
-+ return (~((d & ~p) | s)) & 0x00ffffff;
-+
-+ case 0x32: /* SDPSoox */
-+ return ((p | s | d) ^ s) & 0x00ffffff;
-+
-+ case 0x33: /* Sn NOTSRCCOPY */
-+ return (~s) & 0x00ffffff;
-+
-+ case 0x34: /* SPDSaox */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0x35: /* SPDSxnox */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0x36: /* SDPox */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0x37: /* SDPoan */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0x38: /* PSDPoax */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0x39: /* SPDnox */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0x3A: /* SPDSxox */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0x3B: /* SPDnoan */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0x3C: /* PSx */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0x3D: /* SPDSonox */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0x3E: /* SPDSnaox */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0x3F: /* PSan */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0x40: /* PSDnaa */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0x41: /* DPSxon */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0x42: /* SDxPDxa */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0x43: /* SPDSanaxn */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0x44: /* SDna SRCERASE */
-+ return (s & ~d) & 0x00ffffff;
-+
-+ case 0x45: /* DPSnaon */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0x46: /* DSPDaox */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0x47: /* PSDPxaxn */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0x48: /* SDPxa */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0x49: /* PDSPDaoxxn */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0x4A: /* DPSDoax */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0x4B: /* PDSnox */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0x4C: /* SDPana */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0x4D: /* SSPxDSxoxn */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0x4E: /* PDSPxox */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0x4F: /* PDSnoan */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0x50: /* PDna */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0x51: /* DSPnaon */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0x52: /* DPSDaox */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0x53: /* SPDSxaxn */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0x54: /* DPSonon */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0x55: /* Dn DSTINVERT */
-+ return (~d) & 0x00ffffff;
-+
-+ case 0x56: /* DPSox */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0x57: /* DPSoan */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0x58: /* PDSPoax */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0x59: /* DPSnox */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0x5A: /* DPx PATINVERT */
-+ return (d ^ p) & 0x00ffffff;
-+
-+ case 0x5B: /* DPSDonox */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0x5C: /* DPSDxox */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0x5D: /* DPSnoan */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0x5E: /* DPSDnaox */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0x5F: /* DPan */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0x60: /* PDSxa */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0x61: /* DSPDSaoxxn */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0x62: /* DSPDoax */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0x63: /* SDPnox */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0x64: /* SDPSoax */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0x65: /* DSPnox */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0x66: /* DSx SRCINVERT */
-+ return (d ^ s) & 0x00ffffff;
-+
-+ case 0x67: /* SDPSonox */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0x68: /* DSPDSonoxxn */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0x69: /* PDSxxn */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0x6A: /* DPSax */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0x6B: /* PSDPSoaxxn */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0x6C: /* SDPax */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0x6D: /* PDSPDoaxxn */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0x6E: /* SDPSnoax */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0x6F: /* PDSxnan */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0x70: /* PDSana */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0x71: /* SSDxPDxaxn */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0x72: /* SDPSxox */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0x73: /* SDPnoan */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0x74: /* DSPDxox */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0x75: /* DSPnoan */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0x76: /* SDPSnaox */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0x77: /* DSan */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0x78: /* PDSax */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0x79: /* DSPDSoaxxn */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0x7A: /* DPSDnoax */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0x7B: /* SDPxnan */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0x7C: /* SPDSnoax */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0x7D: /* DPSxnan */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0x7E: /* SPxDSxo */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0x7F: /* DPSaan */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0x80: /* DPSaa */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0x81: /* SPxDSxon */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0x82: /* DPSxna */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0x83: /* SPDSnoaxn */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0x84: /* SDPxna */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0x85: /* PDSPnoaxn */
-+ return (~(p ^ (d & (s | ~p)))) & 0x00ffffff;
-+
-+ case 0x86: /* DSPDSoaxx */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0x87: /* PDSaxn */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0x88: /* DSa SRCAND */
-+ return (d & s) & 0x00ffffff;
-+
-+ case 0x89: /* SDPSnaoxn */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0x8A: /* DSPnoa */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0x8B: /* DSPDxoxn */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0x8C: /* SDPnoa */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0x8D: /* SDPSxoxn */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0x8E: /* SSDxPDxax */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0x8F: /* PDSanan */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0x90: /* PDSxna */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0x91: /* SDPSnoaxn */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0x92: /* DPSDPoaxx */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0x93: /* SPDaxn */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0x94: /* PSDPSoaxx */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0x95: /* DPSaxn */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0x96: /* DPSxx */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0x97: /* PSDPSonoxx */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0x98: /* SDPSonoxn */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0x99: /* DSxn */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0x9A: /* DPSnax */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0x9B: /* SDPSoaxn */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0x9C: /* SPDnax */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0x9D: /* DSPDoaxn */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0x9E: /* DSPDSaoxx */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0x9F: /* PDSxan */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0xA0: /* DPa */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0xA1: /* PDSPnaoxn */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0xA2: /* DPSnoa */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0xA3: /* DPSDxoxn */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0xA4: /* PDSPonoxn */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0xA5: /* PDxn */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0xA6: /* DSPnax */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0xA7: /* PDSPoaxn */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0xA8: /* DPSoa */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0xA9: /* DPSoxn */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0xAA: /* D */
-+ return (d) & 0x00ffffff;
-+
-+ case 0xAB: /* DPSono */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0xAC: /* SPDSxax */
-+ return (s ^ (p & (d ^ s))) & 0x00ffffff;
-+
-+ case 0xAD: /* DPSDaoxn */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0xAE: /* DSPnao */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0xAF: /* DPno */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0xB0: /* PDSnoa */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0xB1: /* PDSPxoxn */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0xB2: /* SSPxDSxox */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0xB3: /* SDPanan */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0xB4: /* PSDnax */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0xB5: /* DPSDoaxn */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0xB6: /* DPSDPaoxx */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0xB7: /* SDPxan */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0xB8: /* PSDPxax */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0xB9: /* DSPDaoxn */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0xBA: /* DPSnao */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0xBB: /* DSno MERGEPAINT */
-+ return (d | ~s) & 0x00ffffff;
-+
-+ case 0xBC: /* SPDSanax */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0xBD: /* SDxPDxan */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0xBE: /* DPSxo */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0xBF: /* DPSano */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0xC0: /* PSa MERGECOPY */
-+ return (p & s) & 0x00ffffff;
-+
-+ case 0xC1: /* SPDSnaoxn */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0xC2: /* SPDSonoxn */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0xC3: /* PSxn */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0xC4: /* SPDnoa */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0xC5: /* SPDSxoxn */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0xC6: /* SDPnax */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0xC7: /* PSDPoaxn */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0xC8: /* SDPoa */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0xC9: /* SPDoxn */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0xCA: /* DPSDxax */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0xCB: /* SPDSaoxn */
-+ return (0x123456) & 0x00ffffff;
-+
-+ default:
-+ case 0xCC: /* S SRCCOPY */
-+ return (s) & 0x00ffffff;
-+
-+ case 0xCD: /* SDPono */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0xCE: /* SDPnao */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0xCF: /* SPno */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0xD0: /* PSDnoa */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0xD1: /* PSDPxoxn */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0xD2: /* PDSnax */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0xD3: /* SPDSoaxn */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0xD4: /* SSPxPDxax */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0xD5: /* DPSanan */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0xD6: /* PSDPSaoxx */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0xD7: /* DPSxan */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0xD8: /* PDSPxax */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0xD9: /* SDPSaoxn */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0xDA: /* DPSDanax */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0xDB: /* SPxDSxan */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0xDC: /* SPDnao */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0xDD: /* SDno */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0xDE: /* SDPxo */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0xDF: /* SDPano */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0xE0: /* PDSoa */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0xE1: /* PDSoxn */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0xE2: /* DSPDxax */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0xE3: /* PSDPaoxn */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0xE4: /* SDPSxax */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0xE5: /* PDSPaoxn */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0xE6: /* SDPSanax */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0xE7: /* SPxPDxan */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0xE8: /* SSPxDSxax */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0xE9: /* DSPDSanaxxn */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0xEA: /* DPSao */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0xEB: /* DPSxno */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0xEC: /* SDPao */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0xED: /* SDPxno */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0xEE: /* DSo SRCPAINT */
-+ return (d | s) & 0x00ffffff;
-+
-+ case 0xEF: /* SDPnoo */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0xF0: /* P PATCOPY */
-+ return (p) & 0x00ffffff;
-+
-+ case 0xF1: /* PDSono */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0xF2: /* PDSnao */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0xF3: /* PSno */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0xF4: /* PSDnao */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0xF5: /* PDno */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0xF6: /* PDSxo */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0xF7: /* PDSano */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0xF8: /* PDSao */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0xF9: /* PDSxno */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0xFA: /* DPo */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0xFB: /* DPSnoo PATPAINT */
-+ return (p | ~s | d) & 0x00ffffff;
-+
-+ case 0xFC: /* PSo */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0xFD: /* PSDnoo */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0xFE: /* DPSoo */
-+ return (0x123456) & 0x00ffffff;
-+
-+ case 0xFF: /* 1 WHITENESS */
-+ return 0x00ffffff;
-+
-+ } /* switch */
-+}
-diff -Nru a/dlls/winedib.drv/text.c b/dlls/winedib.drv/text.c
---- a/dlls/winedib.drv/text.c 1970-01-01 01:00:00.000000000 +0100
-+++ b/dlls/winedib.drv/text.c 2010-08-04 16:08:44.718222017 +0200
-@@ -0,0 +1,273 @@
-+/*
-+ * DIBDRV text functions
-+ *
-+ * Copyright 2009 Massimo Del Fedele
-+ *
-+ * This library is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License as published by the Free Software Foundation; either
-+ * version 2.1 of the License, or (at your option) any later version.
-+ *
-+ * This library is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with this library; if not, write to the Free Software
-+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
-+ */
-+
-+#include "config.h"
-+#include "wine/port.h"
-+
-+#include "dibdrv.h"
-+
-+WINE_DEFAULT_DEBUG_CHANNEL(dibdrv);
-+
-+/***********************************************************************
-+ * DIBDRV_ExtTextOut
-+ */
-+BOOL DIBDRV_ExtTextOut( DIBDRVPHYSDEV *physDev, INT x, INT y, UINT flags,
-+ const RECT *lprect, LPCWSTR wstr, UINT count,
-+ const INT *lpDx )
-+{
-+ /* FIXME : TODO many, many stuffs... just trivial text support by now */
-+
-+ BOOL res;
-+ FT_Face face;
-+ FT_UInt glyph_index;
-+ INT n;
-+ INT error;
-+ LOGFONTW lf;
-+ int w, h;
-+ LPCWSTR wstrPnt;
-+
-+ FT_Glyph glyph;
-+ FT_BitmapGlyph bitmapGlyph;
-+ FT_Bitmap *bitmap, bitmap8;
-+ double cosEsc, sinEsc;
-+ FT_Matrix matrix;
-+ FT_Vector start;
-+ int dx, dy;
-+
-+ RECT *r;
-+ int iRec;
-+ RECT clipRec;
-+ DWORD backPixel;
-+
-+ MAYBE(TRACE("physDev:%p, x:%d, y:%d, flags:%x, lprect:%p, wstr:%s, count:%d, lpDx:%p\n",
-+ physDev, x, y, flags, lprect, debugstr_w(wstr), count, lpDx));
-+
-+ if(physDev->hasDIB)
-+ {
-+ /* DIB section selected in, use DIB Engine */
-+
-+ face = physDev->face;
-+ if(!face)
-+ {
-+ ERR("FreeType face is null\n");
-+ res = FALSE;
-+ goto fin;
-+ }
-+
-+ /* outputs the string in case it is given by glyph indexes
-+ make locating it in logs much easier */
-+ if(TRACE_ON(dibdrv) && flags & ETO_GLYPH_INDEX)
-+ {
-+ WCHAR a = 'A';
-+ WCHAR *str = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(WCHAR)*(count+1));
-+ int delta = a - pFT_Get_Char_Index( face, a);
-+ int i;
-+ memcpy(str, wstr, sizeof(WCHAR)*count);
-+ for(i = 0; str[i] && i < count; i++)
-+ str[i] += delta;
-+ TRACE("String: '%s'\n", debugstr_w(str));
-+ HeapFree(GetProcessHeap(), 0, str);
-+ }
-+
-+ /* gets background pixel value for opaque text */
-+ backPixel = physDev->backgroundColor;
-+
-+ /* gets font data, etc */
-+ GetObjectW(GetCurrentObject(physDev->hdc, OBJ_FONT), sizeof(lf), &lf);
-+
-+ /* convert sizes to device space */
-+ w = abs(lf.lfWidth); h = abs(lf.lfHeight);
-+ _DIBDRV_Sizes_ws2ds(physDev, &w, &h);
-+
-+ /* loop on all clip region rectangles */
-+ r = physDev->regionRects;
-+ for(iRec = 0; iRec < physDev->regionRectCount; iRec++, r++)
-+ {
-+ /* if clipped on text rect, intersect with current region */
-+ if(flags & ETO_CLIPPED)
-+ {
-+ if(!_DIBDRV_IntersectRect(&clipRec, r, lprect))
-+ continue;
-+ }
-+ else
-+ memcpy(&clipRec, r, sizeof(RECT));
-+
-+ /* if opaque, paint the font background */
-+ if(flags & ETO_OPAQUE)
-+ {
-+ int iLine;
-+ RECT tr;
-+
-+ /* clips text rectangle */
-+ if(_DIBDRV_IntersectRect(&tr, r, lprect))
-+ {
-+ /* paints the backgound */
-+ for(iLine = tr.top; iLine < tr.bottom; iLine++)
-+ physDev->physBitmap->funcs->SolidHLine(physDev->physBitmap,
-+ tr.left, tr.right-1, iLine, 0, backPixel);
-+ }
-+ }
-+
-+ /* sets character pixel size */
-+ error = pFT_Set_Pixel_Sizes(face, w, h);
-+ if(error)
-+ ONCE(ERR("Couldn't set char size to (%d,%d), code %d\n", lf.lfWidth, lf.lfHeight, error));
-+
-+ /* transformation matrix and vector */
-+ start.x = 0;
-+ start.y = 0;
-+ if(lf.lfEscapement != 0)
-+ {
-+ cosEsc = cos(lf.lfEscapement * M_PI / 1800);
-+ sinEsc = sin(lf.lfEscapement * M_PI / 1800);
-+ }
-+ else
-+ {
-+ cosEsc = 1;
-+ sinEsc = 0;
-+ }
-+ matrix.xx = (FT_Fixed)( cosEsc * 0x10000L );
-+ matrix.xy = (FT_Fixed)(-sinEsc * 0x10000L );
-+ matrix.yx = (FT_Fixed)( sinEsc * 0x10000L );
-+ matrix.yy = (FT_Fixed)( cosEsc * 0x10000L );
-+
-+ /* outputs characters one by one */
-+ wstrPnt = wstr;
-+ for ( n = 0; n < count; n++ )
-+ {
-+ /* retrieve glyph index from character code */
-+ if(flags & ETO_GLYPH_INDEX)
-+ glyph_index = *wstrPnt++;
-+ else
-+ glyph_index = pFT_Get_Char_Index( face, *wstrPnt++);
-+
-+ /* load glyph image into the slot (erase previous one) */
-+ error = pFT_Load_Glyph( face, glyph_index, FT_LOAD_DEFAULT );
-+ if(error)
-+ {
-+ ERR("Couldn't load glyph at index %d\n", glyph_index);
-+ /* ignore errors */
-+ continue;
-+ }
-+ error = pFT_Get_Glyph(face->glyph, &glyph);
-+ if ( error )
-+ {
-+ FIXME("Couldn't get glyph\n");
-+ continue;
-+ }
-+
-+ /* apply transformation to glyph */
-+ if ( glyph->format != FT_GLYPH_FORMAT_BITMAP )
-+ pFT_Glyph_Transform(glyph, &matrix, &start );
-+
-+ /* gets advance BEFORE transforming... */
-+ dx = glyph->advance.x;
-+ dy = glyph->advance.y;
-+
-+ /* convert to an anti-aliased bitmap, if needed */
-+ if ( glyph->format != FT_GLYPH_FORMAT_BITMAP )
-+ {
-+ error = pFT_Glyph_To_Bitmap(
-+ &glyph,
-+ #ifdef DIBDRV_ANTIALIASED_FONTS
-+ physDev->physBitmap->bitCount > 8 ? FT_RENDER_MODE_NORMAL : FT_RENDER_MODE_MONO,
-+ #else
-+ FT_RENDER_MODE_MONO,
-+ #endif
-+ 0, /* no additional translation */
-+ 1 /* destroy copy in "image" */
-+ );
-+
-+ /* ignore errors */
-+ if ( error )
-+ {
-+ FIXME("Couldn't render glyph\n");
-+ pFT_Done_Glyph(glyph);
-+ continue;
-+ }
-+ }
-+ bitmapGlyph = (FT_BitmapGlyph)glyph;
-+
-+ /* convert the bitmap in an 8bpp 1 byte aligned one if needed */
-+ bitmap = &bitmapGlyph->bitmap;
-+ if(bitmap->pixel_mode != FT_PIXEL_MODE_GRAY)
-+ {
-+ pFT_Bitmap_New(&bitmap8);
-+ if(pFT_Bitmap_Convert(glyph->library, bitmap, &bitmap8, 1))
-+ {
-+ FIXME("Couldn't convert bitmap to 8 bit grayscale\n");
-+ pFT_Done_Glyph(glyph);
-+ continue;
-+ }
-+ bitmap = &bitmap8;
-+ }
-+
-+ /* now, draw to our target surface */
-+ physDev->physBitmap->funcs->FreetypeBlit(physDev, x+bitmapGlyph->left, y-bitmapGlyph->top, &clipRec, bitmap);
-+
-+ /* frees converted bitmap, if any */
-+ if(bitmap != &bitmapGlyph->bitmap)
-+ pFT_Bitmap_Done(glyph->library, bitmap);
-+
-+ /* increment pen position */
-+ x += dx>>16;
-+ y -= dy>>16;
-+
-+ pFT_Done_Glyph(glyph);
-+
-+ res = TRUE;
-+ }
-+ } /* end region rects loop */
-+ }
-+ else
-+ {
-+ /* DDB selected in, use X11 driver */
-+ res = _DIBDRV_GetDisplayDriver()->pExtTextOut(physDev->X11PhysDev, x, y, flags, lprect,
-+ wstr, count, lpDx);
-+ }
-+fin:
-+ return res;
-+}
-+
-+/***********************************************************************
-+ * DIBDRV_GetTextExtentExPoint
-+ */
-+BOOL DIBDRV_GetTextExtentExPoint( DIBDRVPHYSDEV *physDev, LPCWSTR str, INT count,
-+ INT maxExt, LPINT lpnFit, LPINT alpDx, LPSIZE size )
-+{
-+ BOOL res;
-+
-+ MAYBE(TRACE("physDev:%p, str:%s, count:%d, maxExt:%d, lpnFit:%p, alpDx:%p, size:%p\n",
-+ physDev, debugstr_w(str), count, maxExt, lpnFit, alpDx, size));
-+
-+ if(physDev->hasDIB)
-+ {
-+ /* DIB section selected in, use DIB Engine */
-+ ONCE(FIXME("STUB\n"));
-+ res = TRUE;
-+ }
-+ else
-+ {
-+ /* DDB selected in, use X11 driver */
-+ res = _DIBDRV_GetDisplayDriver()->pGetTextExtentExPoint(physDev->X11PhysDev, str, count, maxExt,
-+ lpnFit, alpDx, size);
-+ }
-+ return res;
-+}
-diff -Nru a/dlls/winedib.drv/video.c b/dlls/winedib.drv/video.c
---- a/dlls/winedib.drv/video.c 1970-01-01 01:00:00.000000000 +0100
-+++ b/dlls/winedib.drv/video.c 2010-08-04 16:08:44.517222017 +0200
-@@ -0,0 +1,72 @@
-+/*
-+ * DIBDRV video functions
-+ *
-+ * Copyright 2009 Massimo Del Fedele
-+ *
-+ * This library is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License as published by the Free Software Foundation; either
-+ * version 2.1 of the License, or (at your option) any later version.
-+ *
-+ * This library is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with this library; if not, write to the Free Software
-+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
-+ */
-+
-+#include "config.h"
-+#include "wine/port.h"
-+
-+#include "dibdrv.h"
-+
-+WINE_DEFAULT_DEBUG_CHANNEL(dibdrv);
-+
-+/***********************************************************************
-+ * DIBDRV_GetDeviceGammaRamp
-+ */
-+BOOL DIBDRV_GetDeviceGammaRamp( DIBDRVPHYSDEV *physDev, LPVOID ramp )
-+{
-+ BOOL res;
-+
-+ MAYBE(TRACE("physDev:%p, ramp:%p\n", physDev, ramp));
-+
-+ if(physDev->hasDIB)
-+ {
-+ /* DIB section selected in, use DIB Engine */
-+ ONCE(FIXME("TEMPORARY - fallback to X11 driver\n"));
-+ res = _DIBDRV_GetDisplayDriver()->pGetDeviceGammaRamp(physDev->X11PhysDev, ramp);
-+ }
-+ else
-+ {
-+ /* DDB selected in, use X11 driver */
-+ res = _DIBDRV_GetDisplayDriver()->pGetDeviceGammaRamp(physDev->X11PhysDev, ramp);
-+ }
-+ return res;
-+}
-+
-+/***********************************************************************
-+ * DIBDRV_SetDeviceGammaRamp
-+ */
-+BOOL DIBDRV_SetDeviceGammaRamp( DIBDRVPHYSDEV *physDev, LPVOID ramp )
-+{
-+ BOOL res;
-+
-+ MAYBE(TRACE("physDev:%p, ramp:%p\n", physDev, ramp));
-+
-+ if(physDev->hasDIB)
-+ {
-+ /* DIB section selected in, use DIB Engine */
-+ ONCE(FIXME("STUB\n"));
-+ res = TRUE;
-+ }
-+ else
-+ {
-+ /* DDB selected in, use X11 driver */
-+ res = _DIBDRV_GetDisplayDriver()->pSetDeviceGammaRamp(physDev->X11PhysDev, ramp);
-+ }
-+ return res;
-+}
-diff -Nru a/dlls/winedib.drv/winedib.drv.spec b/dlls/winedib.drv/winedib.drv.spec
---- a/dlls/winedib.drv/winedib.drv.spec 1970-01-01 01:00:00.000000000 +0100
-+++ b/dlls/winedib.drv/winedib.drv.spec 2010-08-04 16:08:44.395222017 +0200
-@@ -0,0 +1,74 @@
-+@ cdecl AlphaBlend(ptr long long long long ptr long long long long long) DIBDRV_AlphaBlend
-+@ cdecl Arc(ptr long long long long long long long long) DIBDRV_Arc
-+@ cdecl BitBlt(ptr long long long long ptr long long long) DIBDRV_BitBlt
-+@ cdecl ChoosePixelFormat(ptr ptr) DIBDRV_ChoosePixelFormat
-+@ cdecl Chord(ptr long long long long long long long long) DIBDRV_Chord
-+@ cdecl CreateBitmap(ptr long ptr) DIBDRV_CreateBitmap
-+@ cdecl CreateDC(long ptr wstr wstr wstr ptr) DIBDRV_CreateDC
-+@ cdecl CreateDIBSection(ptr long ptr long) DIBDRV_CreateDIBSection
-+@ cdecl DeleteBitmap(long) DIBDRV_DeleteBitmap
-+@ cdecl DeleteDC(ptr) DIBDRV_DeleteDC
-+@ cdecl DescribePixelFormat(ptr long long ptr) DIBDRV_DescribePixelFormat
-+@ cdecl Ellipse(ptr long long long long) DIBDRV_Ellipse
-+@ cdecl EnumDeviceFonts(ptr ptr ptr long) DIBDRV_EnumDeviceFonts
-+@ cdecl ExtEscape(ptr long long ptr long ptr) DIBDRV_ExtEscape
-+@ cdecl ExtFloodFill(ptr long long long long) DIBDRV_ExtFloodFill
-+@ cdecl ExtTextOut(ptr long long long ptr ptr long ptr) DIBDRV_ExtTextOut
-+@ cdecl GetBitmapBits(long ptr long) DIBDRV_GetBitmapBits
-+@ cdecl GetCharWidth(ptr long long ptr) DIBDRV_GetCharWidth
-+@ cdecl GetDCOrgEx(ptr ptr) DIBDRV_GetDCOrgEx
-+@ cdecl GetDIBits(ptr long long long ptr ptr long) DIBDRV_GetDIBits
-+@ cdecl GetDeviceCaps(ptr long) DIBDRV_GetDeviceCaps
-+@ cdecl GetDeviceGammaRamp(ptr ptr) DIBDRV_GetDeviceGammaRamp
-+@ cdecl GetICMProfile(ptr ptr ptr) DIBDRV_GetICMProfile
-+@ cdecl GetNearestColor(ptr long) DIBDRV_GetNearestColor
-+@ cdecl GetPixel(ptr long long) DIBDRV_GetPixel
-+@ cdecl GetPixelFormat(ptr) DIBDRV_GetPixelFormat
-+@ cdecl GetSystemPaletteEntries(ptr long long ptr) DIBDRV_GetSystemPaletteEntries
-+@ cdecl GetTextExtentExPoint(ptr ptr long long ptr ptr ptr) DIBDRV_GetTextExtentExPoint
-+@ cdecl GetTextMetrics(ptr ptr) DIBDRV_GetTextMetrics
-+@ cdecl LineTo(ptr long long) DIBDRV_LineTo
-+@ cdecl PaintRgn(ptr long) DIBDRV_PaintRgn
-+@ cdecl PatBlt(ptr long long long long long) DIBDRV_PatBlt
-+@ cdecl Pie(ptr long long long long long long long long) DIBDRV_Pie
-+@ cdecl PolyPolygon(ptr ptr ptr long) DIBDRV_PolyPolygon
-+@ cdecl PolyPolyline(ptr ptr ptr long) DIBDRV_PolyPolyline
-+@ cdecl Polygon(ptr ptr long) DIBDRV_Polygon
-+@ cdecl Polyline(ptr ptr long) DIBDRV_Polyline
-+@ cdecl RealizeDefaultPalette(ptr) DIBDRV_RealizeDefaultPalette
-+@ cdecl RealizePalette(ptr long long) DIBDRV_RealizePalette
-+@ cdecl Rectangle(ptr long long long long) DIBDRV_Rectangle
-+@ cdecl RoundRect(ptr long long long long long long) DIBDRV_RoundRect
-+@ cdecl SelectBitmap(ptr long) DIBDRV_SelectBitmap
-+@ cdecl SelectBrush(ptr long) DIBDRV_SelectBrush
-+@ cdecl SelectFont(ptr long long) DIBDRV_SelectFont
-+@ cdecl SelectPen(ptr long) DIBDRV_SelectPen
-+@ cdecl SetBitmapBits(long ptr long) DIBDRV_SetBitmapBits
-+@ cdecl SetBkColor(ptr long) DIBDRV_SetBkColor
-+@ cdecl SetDCBrushColor(ptr long) DIBDRV_SetDCBrushColor
-+@ cdecl SetDCOrg(ptr long long) DIBDRV_SetDCOrg
-+@ cdecl SetDCPenColor(ptr long) DIBDRV_SetDCPenColor
-+@ cdecl SetDIBColorTable(ptr long long ptr) DIBDRV_SetDIBColorTable
-+@ cdecl SetDIBits(ptr long long long ptr ptr long) DIBDRV_SetDIBits
-+@ cdecl SetDIBitsToDevice(ptr long long long long long long long long ptr ptr long) DIBDRV_SetDIBitsToDevice
-+@ cdecl SetDeviceClipping(ptr long long) DIBDRV_SetDeviceClipping
-+@ cdecl SetDeviceGammaRamp(ptr ptr) DIBDRV_SetDeviceGammaRamp
-+@ cdecl SetPixel(ptr long long long) DIBDRV_SetPixel
-+@ cdecl SetPixelFormat(ptr long ptr) DIBDRV_SetPixelFormat
-+@ cdecl SetTextColor(ptr long) DIBDRV_SetTextColor
-+@ cdecl StretchBlt(ptr long long long long ptr long long long long long) DIBDRV_StretchBlt
-+@ cdecl SwapBuffers(ptr) DIBDRV_SwapBuffers
-+@ cdecl UnrealizePalette(long) DIBDRV_UnrealizePalette
-+@ cdecl SetROP2(ptr long) DIBDRV_SetROP2
-+# OpenGL
-+@ cdecl wglCopyContext(long long long) DIBDRV_wglCopyContext
-+@ cdecl wglCreateContext(ptr) DIBDRV_wglCreateContext
-+@ cdecl wglDeleteContext(long) DIBDRV_wglDeleteContext
-+@ cdecl wglGetProcAddress(str) DIBDRV_wglGetProcAddress
-+@ cdecl wglGetPbufferDCARB(ptr ptr) DIBDRV_wglGetPbufferDCARB
-+@ cdecl wglMakeContextCurrentARB(ptr ptr long) DIBDRV_wglMakeContextCurrentARB
-+@ cdecl wglMakeCurrent(ptr long) DIBDRV_wglMakeCurrent
-+@ cdecl wglSetPixelFormatWINE(ptr long ptr) DIBDRV_wglSetPixelFormatWINE
-+@ cdecl wglShareLists(long long) DIBDRV_wglShareLists
-+@ cdecl wglUseFontBitmapsA(ptr long long long) DIBDRV_wglUseFontBitmapsA
-+@ cdecl wglUseFontBitmapsW(ptr long long long) DIBDRV_wglUseFontBitmapsW
-diff -Nru a/dlls/wineps.drv/escape.c b/dlls/wineps.drv/escape.c
---- a/dlls/wineps.drv/escape.c 2010-07-30 19:43:56.000000000 +0200
-+++ b/dlls/wineps.drv/escape.c 2010-08-04 16:08:44.321222017 +0200
-@@ -47,10 +47,11 @@
- "%%BeginDocument: Wine passthrough\n";
-
- /* FIXME: should use winspool functions instead */
--static DWORD create_job(LPCSTR pszOutput)
-+static DWORD create_job(LPCSTR pszOutput, LPCSTR pszPageSize)
- {
- int fd = -1;
- char psCmd[1024];
-+ char psCmd2[1024];
- const char *psCmdP = psCmd;
- HKEY hkey;
-
-@@ -81,6 +82,15 @@
- }
- if (!*psCmdP) return 0;
- }
-+
-+ /* copy printer command in order to add page size */
-+ strcpy(psCmd2, psCmdP);
-+ psCmdP = psCmd2;
-+
-+ /* if page size given, append it to printer line */
-+ if(pszPageSize)
-+ strcat(psCmd2, pszPageSize);
-+
- TRACE("command: '%s'\n", psCmdP);
- #ifdef HAVE_FORK
- if (*psCmdP == '|')
-@@ -505,6 +515,9 @@
- HANDLE hprn = INVALID_HANDLE_VALUE;
- PRINTER_INFO_5A *pi5 = (PRINTER_INFO_5A*)buf;
- DWORD needed;
-+
-+ LPCSTR pageSize = NULL;
-+ BYTE pSizeBuf[300];
-
- if(physDev->job.id) {
- FIXME("hJob != 0. Now what?\n");
-@@ -523,8 +536,35 @@
- if(hprn != INVALID_HANDLE_VALUE)
- ClosePrinter(hprn);
- }
-+
-+ /* check if must send page size too */
-+ /* if using LPR: as output device, appends the page size */
-+ if(!strncmp(output, "LPR", 3) || !strncmp(output, "LPT", 3)) {
-+
-+ /* gets page size */
-+ int sx = MulDiv(physDev->PageSize.cx, 72, physDev->logPixelsX);
-+ int sy = MulDiv(physDev->PageSize.cy, 72, physDev->logPixelsY);
-+
-+ /* scans all supported page sizes to find page name */
-+ PAGESIZE *page;
-+ LPCSTR paperName = NULL;
-+ LIST_FOR_EACH_ENTRY(page, &physDev->pi->ppd->PageSizes, PAGESIZE, entry) {
-+ if(page->PaperDimension->x == sx && page->PaperDimension->y == sy) {
-+ paperName = page->Name;
-+ break;
-+ }
-+ }
-+ if(paperName) {
-+ TRACE("PaperName '%s' found for size '%d x %d'\n", paperName, sx, sy);
-+ strcpy(pSizeBuf, " -o PageSize=");
-+ strcat(pSizeBuf, paperName);
-+ pageSize = pSizeBuf;
-+ }
-+ else
-+ FIXME("PaperName not found for size '%d x %d'\n", sx, sy);
-+ }
-
-- physDev->job.id = create_job( output );
-+ physDev->job.id = create_job( output, pageSize );
- if(!physDev->job.id) {
- WARN("OpenJob failed\n");
- return 0;
diff --git a/app-emulation/wine/wine-1.3.0.ebuild b/app-emulation/wine/wine-1.3.0.ebuild
deleted file mode 100644
index 6d64027..0000000
--- a/app-emulation/wine/wine-1.3.0.ebuild
+++ /dev/null
@@ -1,208 +0,0 @@
-# Copyright 1999-2010 Gentoo Foundation
-# Distributed under the terms of the GNU General Public License v2
-# $Header: /var/cvsroot/gentoo-x86/app-emulation/wine/wine-1.3.0.ebuild,v 1.2 2010/08/03 18:43:25 vapier Exp $
-
-EAPI=2
-
-inherit eutils flag-o-matic multilib
-
-if [[ ${PV} == "9999" ]] ; then
- EGIT_REPO_URI="git://source.winehq.org/git/wine.git"
- inherit git autotools
- SRC_URI=""
- #KEYWORDS=""
-else
- AUTOTOOLS_AUTO_DEPEND="no"
- inherit autotools
- MY_P="${PN}-${PV/_/-}"
- SRC_URI="mirror://sourceforge/${PN}/${MY_P}.tar.bz2"
- KEYWORDS="-* ~amd64 ~x86 ~x86-fbsd"
- S=${WORKDIR}/${MY_P}
-fi
-
-pulse_patches() { echo "$1"/winepulse-{0.36,0.35-configure.ac,0.38-winecfg}.patch ; }
-GV="1.0.0-x86"
-DESCRIPTION="free implementation of Windows(tm) on Unix"
-HOMEPAGE="http://www.winehq.org/"
-SRC_URI="${SRC_URI}
- gecko? ( mirror://sourceforge/wine/wine_gecko-${GV}.cab )
- pulseaudio? ( `pulse_patches http://art.ified.ca/downloads/winepulse` )"
-
-LICENSE="LGPL-2.1"
-SLOT="0"
-IUSE="alsa capi cups custom-cflags dbus +dib esd fontconfig +gecko gnutls gphoto2 gsm hal jack jpeg lcms ldap mp3 nas ncurses openal +opengl +oss +perl png pulseaudio samba scanner ssl test +threads +truetype +win32 +win64 +X xcomposite xinerama xml"
-RESTRICT="test" #72375
-
-MLIB_DEPS="amd64? (
- truetype? ( >=app-emulation/emul-linux-x86-xlibs-2.1 )
- X? (
- >=app-emulation/emul-linux-x86-xlibs-2.1
- >=app-emulation/emul-linux-x86-soundlibs-2.1
- )
- openal? ( app-emulation/emul-linux-x86-sdl )
- opengl? ( app-emulation/emul-linux-x86-opengl )
- app-emulation/emul-linux-x86-baselibs
- >=sys-kernel/linux-headers-2.6
- )"
-RDEPEND="truetype? ( >=media-libs/freetype-2.0.0 media-fonts/corefonts )
- perl? ( dev-lang/perl dev-perl/XML-Simple )
- capi? ( net-dialup/capi4k-utils )
- ncurses? ( >=sys-libs/ncurses-5.2 )
- fontconfig? ( media-libs/fontconfig )
- gphoto2? ( media-libs/libgphoto2 )
- jack? ( media-sound/jack-audio-connection-kit )
- openal? ( media-libs/openal )
- dbus? ( sys-apps/dbus )
- gnutls? ( net-libs/gnutls )
- hal? ( sys-apps/hal )
- X? (
- x11-libs/libXcursor
- x11-libs/libXrandr
- x11-libs/libXi
- x11-libs/libXmu
- x11-libs/libXxf86vm
- x11-apps/xmessage
- )
- xinerama? ( x11-libs/libXinerama )
- alsa? ( media-libs/alsa-lib )
- esd? ( media-sound/esound )
- nas? ( media-libs/nas )
- cups? ( net-print/cups )
- opengl? ( virtual/opengl )
- pulseaudio? ( media-sound/pulseaudio ${AUTOTOOLS_DEPEND} )
- gsm? ( media-sound/gsm )
- jpeg? ( media-libs/jpeg )
- ldap? ( net-nds/openldap )
- lcms? ( =media-libs/lcms-1* )
- mp3? ( >=media-sound/mpg123-1.5.0 )
- samba? ( >=net-fs/samba-3.0.25 )
- xml? ( dev-libs/libxml2 dev-libs/libxslt )
- scanner? ( media-gfx/sane-backends )
- ssl? ( dev-libs/openssl )
- png? ( media-libs/libpng )
- !win64? ( ${MLIB_DEPS} )
- win32? ( ${MLIB_DEPS} )
- xcomposite? ( x11-libs/libXcomposite ) "
-DEPEND="${RDEPEND}
- X? (
- x11-proto/inputproto
- x11-proto/xextproto
- x11-proto/xf86vidmodeproto
- )
- xinerama? ( x11-proto/xineramaproto )
- sys-devel/bison
- sys-devel/flex"
-
-src_unpack() {
- if [[ $(( $(gcc-major-version) * 100 + $(gcc-minor-version) )) -lt 404 ]] ; then
- use win64 && die "you need gcc-4.4+ to build 64bit wine"
- fi
-
- if [[ ${PV} == "9999" ]] ; then
- git_src_unpack
- else
- unpack ${MY_P}.tar.bz2
- fi
-}
-
-src_prepare() {
- if use pulseaudio ; then
- EPATCH_OPTS=-p1 epatch `pulse_patches "${DISTDIR}"`
- eautoreconf
- fi
- epatch "${FILESDIR}"/${PN}-1.1.15-winegcc.patch #260726
- epatch_user #282735
- if use dib ; then
- epatch "${FILESDIR}"/${P}-dib-engine.patch
- eautoreconf
- fi
- sed -i '/^UPDATE_DESKTOP_DATABASE/s:=.*:=true:' tools/Makefile.in || die
- sed -i '/^MimeType/d' tools/wine.desktop || die #117785
-}
-
-do_configure() {
- local builddir="${WORKDIR}/wine$1"
- mkdir -p "${builddir}"
- pushd "${builddir}" >/dev/null
-
- ECONF_SOURCE=${S} \
- econf \
- --sysconfdir=/etc/wine \
- $(use_with alsa) \
- $(use_with capi) \
- $(use_with lcms cms) \
- $(use_with cups) \
- $(use_with ncurses curses) \
- $(use_with esd) \
- $(use_with fontconfig) \
- $(use_with gnutls) \
- $(use_with gphoto2 gphoto) \
- $(use_with gsm) \
- $(! use dbus && echo --without-hal || use_with hal) \
- $(use_with jack) \
- $(use_with jpeg) \
- $(use_with ldap) \
- $(use_with mp3 mpg123) \
- $(use_with nas) \
- $(use_with openal) \
- $(use_with opengl) \
- $(use_with ssl openssl) \
- $(use_with oss) \
- $(use_with png) \
- $(use_with threads pthread) \
- $(use pulseaudio && use_with pulseaudio pulse) \
- $(use_with scanner sane) \
- $(use_enable test tests) \
- $(use_with truetype freetype) \
- $(use_with X x) \
- $(use_with xcomposite) \
- $(use_with xinerama) \
- $(use_with xml) \
- $(use_with xml xslt) \
- $2
-
- emake -j1 depend || die "depend"
-
- popd >/dev/null
-}
-src_configure() {
- export LDCONFIG=/bin/true
- use custom-cflags || strip-flags
-
- if use win64 && use amd64 ; then
- do_configure 64 --enable-win64
- use win32 && ABI=x86 do_configure 32 --with-wine64=../wine64
- else
- do_configure 32 --disable-win64
- fi
-}
-
-src_compile() {
- local b
- for b in 64 32 ; do
- local builddir="${WORKDIR}/wine${b}"
- [[ -d ${builddir} ]] || continue
- emake -C "${builddir}" all || die
- done
-}
-
-src_install() {
- local b
- for b in 64 32 ; do
- local builddir="${WORKDIR}/wine${b}"
- [[ -d ${builddir} ]] || continue
- emake -C "${builddir}" install DESTDIR="${D}" || die
- done
- dodoc ANNOUNCE AUTHORS README
- if use gecko ; then
- insinto /usr/share/wine/gecko
- doins "${DISTDIR}"/wine_gecko-${GV}.cab || die
- fi
- if ! use perl ; then
- rm "${D}"/usr/bin/{wine{dump,maker},function_grep.pl} "${D}"/usr/share/man/man1/wine{dump,maker}.1 || die
- fi
-}
-
-pkg_postinst() {
- paxctl -psmr "${ROOT}"/usr/bin/wine{,-preloader} 2>/dev/null #255055
-}