diff --git a/aclocal.m4 b/aclocal.m4
index 079f7e4..44a9874 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -13,8 +13,8 @@
 
 m4_ifndef([AC_AUTOCONF_VERSION],
   [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
-m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.67],,
-[m4_warning([this file was generated for autoconf 2.67.
+m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.68],,
+[m4_warning([this file was generated for autoconf 2.68.
 You have another version of autoconf.  It may work, but is not guaranteed to.
 If you have problems, you may need to regenerate the build system entirely.
 To do so, use the procedure documented by the package, typically `autoreconf'.])])
diff --git a/configure b/configure
index ac221f9..f821668 100755
--- a/configure
+++ b/configure
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.67 for mingw-w64 3.0b.
+# Generated by GNU Autoconf 2.68 for mingw-w64 3.0b.
 #
 # Report bugs to <mingw-w64-public@lists.sourceforge.net>.
 #
@@ -91,6 +91,7 @@
 IFS=" ""	$as_nl"
 
 # Find who we are.  Look in the path if we contain no directory separator.
+as_myself=
 case $0 in #((
   *[\\/]* ) as_myself=$0 ;;
   *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -215,11 +216,18 @@
   # We cannot yet assume a decent shell, so we have to provide a
 	# neutralization value for shells without unset; and this also
 	# works around shells that cannot unset nonexistent variables.
+	# Preserve -v and -x to the replacement shell.
 	BASH_ENV=/dev/null
 	ENV=/dev/null
 	(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
 	export CONFIG_SHELL
-	exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"}
+	case $- in # ((((
+	  *v*x* | *x*v* ) as_opts=-vx ;;
+	  *v* ) as_opts=-v ;;
+	  *x* ) as_opts=-x ;;
+	  * ) as_opts= ;;
+	esac
+	exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"}
 fi
 
     if test x$as_have_required = xno; then :
@@ -1066,7 +1074,7 @@
     $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
     expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
       $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
-    : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
+    : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}"
     ;;
 
   esac
@@ -1359,7 +1367,7 @@
 if $ac_init_version; then
   cat <<\_ACEOF
 mingw-w64 configure 3.0b
-generated by GNU Autoconf 2.67
+generated by GNU Autoconf 2.68
 
 Copyright (C) 2010 Free Software Foundation, Inc.
 This configure script is free software; the Free Software Foundation
@@ -1376,7 +1384,7 @@
 running configure, to aid debugging if configure makes a mistake.
 
 It was created by mingw-w64 $as_me 3.0b, which was
-generated by GNU Autoconf 2.67.  Invocation command line was
+generated by GNU Autoconf 2.68.  Invocation command line was
 
   $ $0 $@
 
@@ -1798,7 +1806,7 @@
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
 $as_echo_n "checking for a BSD-compatible install... " >&6; }
 if test -z "$INSTALL"; then
-if test "${ac_cv_path_install+set}" = set; then :
+if ${ac_cv_path_install+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -1975,7 +1983,7 @@
 set dummy ${ac_tool_prefix}strip; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_STRIP+set}" = set; then :
+if ${ac_cv_prog_STRIP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$STRIP"; then
@@ -2015,7 +2023,7 @@
 set dummy strip; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then :
+if ${ac_cv_prog_ac_ct_STRIP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_STRIP"; then
@@ -2068,7 +2076,7 @@
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5
 $as_echo_n "checking for a thread-safe mkdir -p... " >&6; }
 if test -z "$MKDIR_P"; then
-  if test "${ac_cv_path_mkdir+set}" = set; then :
+  if ${ac_cv_path_mkdir+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -2119,7 +2127,7 @@
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_AWK+set}" = set; then :
+if ${ac_cv_prog_AWK+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$AWK"; then
@@ -2159,7 +2167,7 @@
 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
 set x ${MAKE-make}
 ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
-if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\"" = set; then :
+if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat >conftest.make <<\_ACEOF
@@ -2264,7 +2272,7 @@
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
 $as_echo_n "checking build system type... " >&6; }
-if test "${ac_cv_build+set}" = set; then :
+if ${ac_cv_build+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_build_alias=$build_alias
@@ -2298,7 +2306,7 @@
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
 $as_echo_n "checking host system type... " >&6; }
-if test "${ac_cv_host+set}" = set; then :
+if ${ac_cv_host+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test "x$host_alias" = x; then
@@ -2590,10 +2598,21 @@
      :end' >>confcache
 if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
   if test -w "$cache_file"; then
-    test "x$cache_file" != "x/dev/null" &&
+    if test "x$cache_file" != "x/dev/null"; then
       { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
 $as_echo "$as_me: updating cache $cache_file" >&6;}
-    cat confcache >$cache_file
+      if test ! -f "$cache_file" || test -h "$cache_file"; then
+	cat confcache >"$cache_file"
+      else
+        case $cache_file in #(
+        */* | ?:*)
+	  mv -f confcache "$cache_file"$$ &&
+	  mv -f "$cache_file"$$ "$cache_file" ;; #(
+        *)
+	  mv -f confcache "$cache_file" ;;
+	esac
+      fi
+    fi
   else
     { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
@@ -2654,7 +2673,7 @@
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
 
-: ${CONFIG_STATUS=./config.status}
+: "${CONFIG_STATUS=./config.status}"
 ac_write_fail=0
 ac_clean_files_save=$ac_clean_files
 ac_clean_files="$ac_clean_files $CONFIG_STATUS"
@@ -2755,6 +2774,7 @@
 IFS=" ""	$as_nl"
 
 # Find who we are.  Look in the path if we contain no directory separator.
+as_myself=
 case $0 in #((
   *[\\/]* ) as_myself=$0 ;;
   *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -3062,7 +3082,7 @@
 # values after options handling.
 ac_log="
 This file was extended by mingw-w64 $as_me 3.0b, which was
-generated by GNU Autoconf 2.67.  Invocation command line was
+generated by GNU Autoconf 2.68.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
   CONFIG_HEADERS  = $CONFIG_HEADERS
@@ -3124,7 +3144,7 @@
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
 mingw-w64 config.status 3.0b
-configured by $0, generated by GNU Autoconf 2.67,
+configured by $0, generated by GNU Autoconf 2.68,
   with options \\"\$ac_cs_config\\"
 
 Copyright (C) 2010 Free Software Foundation, Inc.
@@ -3272,9 +3292,10 @@
 # after its creation but before its name has been assigned to `$tmp'.
 $debug ||
 {
-  tmp=
+  tmp= ac_tmp=
   trap 'exit_status=$?
-  { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status
+  : "${ac_tmp:=$tmp}"
+  { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status
 ' 0
   trap 'as_fn_exit 1' 1 2 13 15
 }
@@ -3282,12 +3303,13 @@
 
 {
   tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
-  test -n "$tmp" && test -d "$tmp"
+  test -d "$tmp"
 }  ||
 {
   tmp=./conf$$-$RANDOM
   (umask 077 && mkdir "$tmp")
 } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5
+ac_tmp=$tmp
 
 # Set up the scripts for CONFIG_FILES section.
 # No need to generate them if there are no CONFIG_FILES.
@@ -3309,7 +3331,7 @@
   ac_cs_awk_cr=$ac_cr
 fi
 
-echo 'BEGIN {' >"$tmp/subs1.awk" &&
+echo 'BEGIN {' >"$ac_tmp/subs1.awk" &&
 _ACEOF
 
 
@@ -3337,7 +3359,7 @@
 rm -f conf$$subs.sh
 
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-cat >>"\$tmp/subs1.awk" <<\\_ACAWK &&
+cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK &&
 _ACEOF
 sed -n '
 h
@@ -3385,7 +3407,7 @@
 rm -f conf$$subs.awk
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 _ACAWK
-cat >>"\$tmp/subs1.awk" <<_ACAWK &&
+cat >>"\$ac_tmp/subs1.awk" <<_ACAWK &&
   for (key in S) S_is_set[key] = 1
   FS = ""
 
@@ -3417,7 +3439,7 @@
   sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
 else
   cat
-fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \
+fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \
   || as_fn_error $? "could not setup config files machinery" "$LINENO" 5
 _ACEOF
 
@@ -3451,7 +3473,7 @@
 # No need to generate them if there are no CONFIG_HEADERS.
 # This happens for instance with `./config.status Makefile'.
 if test -n "$CONFIG_HEADERS"; then
-cat >"$tmp/defines.awk" <<\_ACAWK ||
+cat >"$ac_tmp/defines.awk" <<\_ACAWK ||
 BEGIN {
 _ACEOF
 
@@ -3463,8 +3485,8 @@
 # handling of long lines.
 ac_delim='%!_!# '
 for ac_last_try in false false :; do
-  ac_t=`sed -n "/$ac_delim/p" confdefs.h`
-  if test -z "$ac_t"; then
+  ac_tt=`sed -n "/$ac_delim/p" confdefs.h`
+  if test -z "$ac_tt"; then
     break
   elif $ac_last_try; then
     as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5
@@ -3584,7 +3606,7 @@
     for ac_f
     do
       case $ac_f in
-      -) ac_f="$tmp/stdin";;
+      -) ac_f="$ac_tmp/stdin";;
       *) # Look for the file first in the build tree, then in the source tree
 	 # (if the path is not absolute).  The absolute path cannot be DOS-style,
 	 # because $ac_f cannot contain `:'.
@@ -3619,7 +3641,7 @@
     esac
 
     case $ac_tag in
-    *:-:* | *:-) cat >"$tmp/stdin" \
+    *:-:* | *:-) cat >"$ac_tmp/stdin" \
       || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;;
     esac
     ;;
@@ -3756,21 +3778,22 @@
 s&@MKDIR_P@&$ac_MKDIR_P&;t t
 $ac_datarootdir_hack
 "
-eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \
-  || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \
+  >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5
 
 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
-  { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } &&
-  { ac_out=`sed -n '/^[	 ]*datarootdir[	 ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } &&
+  { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
+  { ac_out=`sed -n '/^[	 ]*datarootdir[	 ]*:*=/p' \
+      "$ac_tmp/out"`; test -z "$ac_out"; } &&
   { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
 which seems to be undefined.  Please make sure it is defined" >&5
 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
 which seems to be undefined.  Please make sure it is defined" >&2;}
 
-  rm -f "$tmp/stdin"
+  rm -f "$ac_tmp/stdin"
   case $ac_file in
-  -) cat "$tmp/out" && rm -f "$tmp/out";;
-  *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";;
+  -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";;
+  *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";;
   esac \
   || as_fn_error $? "could not create $ac_file" "$LINENO" 5
  ;;
@@ -3781,20 +3804,20 @@
   if test x"$ac_file" != x-; then
     {
       $as_echo "/* $configure_input  */" \
-      && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs"
-    } >"$tmp/config.h" \
+      && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs"
+    } >"$ac_tmp/config.h" \
       || as_fn_error $? "could not create $ac_file" "$LINENO" 5
-    if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then
+    if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then
       { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5
 $as_echo "$as_me: $ac_file is unchanged" >&6;}
     else
       rm -f "$ac_file"
-      mv "$tmp/config.h" "$ac_file" \
+      mv "$ac_tmp/config.h" "$ac_file" \
 	|| as_fn_error $? "could not create $ac_file" "$LINENO" 5
     fi
   else
     $as_echo "/* $configure_input  */" \
-      && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \
+      && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \
       || as_fn_error $? "could not create -" "$LINENO" 5
   fi
 # Compute "$ac_file"'s index in $config_headers.
diff --git a/mingw-w64-crt/ChangeLog b/mingw-w64-crt/ChangeLog
index 55f3ba3..b4db312 100644
--- a/mingw-w64-crt/ChangeLog
+++ b/mingw-w64-crt/ChangeLog
@@ -1,5 +1,17 @@
 2011-11-17  Ozkan Sezer  <sezeroz@gmail.com>
 
+	Add gdiplus from mingw.org sources: Original work was by Markus Koenig
+	<basilo@users.sourceforge.net>.  Patch to integrate into mingw-w64 was
+	provided by Mark Dootson <mark.dootson@znix.com>.
+
+	* lib32/gdiplus.def: New, generated from version 1.1.7601.17514 dll.
+	* lib64/gdiplus.def: New, generated from version 1.1.7601.17514 dll.
+	* libsrc/gdiplus.c: New.
+	* Makefile.am: Add gdiplus defs and sources to build.
+	* Makefile.in: Regenerate.
+
+2011-11-17  Ozkan Sezer  <sezeroz@gmail.com>
+
 	* Makefile.am: Add $(sysincludes) to all build rules' CPPGLAGS.
 	* Makefile.in: Regenerate.
 
diff --git a/mingw-w64-crt/Makefile.am b/mingw-w64-crt/Makefile.am
index 37c81dd..8fef4f4 100644
--- a/mingw-w64-crt/Makefile.am
+++ b/mingw-w64-crt/Makefile.am
@@ -90,6 +90,8 @@
 src_libstrmiids=libsrc/strmiids.c
 src_libmingwthrd=libsrc/mingwthrd_mt.c
 
+src_libgdiplus=libsrc/gdiplus.c
+
 src_libuuid=libsrc/uuid.c   libsrc/guid_nul.c         libsrc/devguid.c         libsrc/agtctl_i.c        libsrc/agtsvr_i.c          \
   libsrc/cdoex_i.c          libsrc/cdoexm_i.c         libsrc/cdosys_i.c        libsrc/emostore_i.c      libsrc/iisext_i.c          \
   libsrc/mtsadmin_i.c       libsrc/mtxadmin_i.c       libsrc/scardssp_i.c      libsrc/tsuserex_i.c      libsrc/fwp-uuid.c          \
@@ -403,6 +405,11 @@
 lib32_libuuid_a_SOURCES = $(src_libuuid)
 lib32_libuuid_a_CPPFLAGS=$(CPPFLAGS32) $(sysincludes)
 
+lib32_LIBRARIES += lib32/libgdiplus.a
+lib32_libgdiplus_a_SOURCES = $(src_libgdiplus)
+lib32_libgdiplus_a_CPPFLAGS=$(CPPFLAGS32) $(sysincludes)
+lib32_libgdiplus_a_AR = $(DTLIB32) && $(AR) $(ARFLAGS)
+
 lib32_LIBRARIES += lib32/libws2_32.a
 lib32_libws2_32_a_SOURCES = $(src_libws2_32)
 lib32_libws2_32_a_CPPFLAGS=$(CPPFLAGS32) $(sysincludes)
@@ -677,6 +684,11 @@
 lib64_LIBRARIES += lib64/libdelayimp.a
 lib64_libdelayimp_a_SOURCES =
 
+lib64_LIBRARIES += lib64/libgdiplus.a
+lib64_libgdiplus_a_SOURCES = $(src_libgdiplus)
+lib64_libgdiplus_a_CPPFLAGS=$(CPPFLAGS64) $(sysincludes)
+lib64_libgdiplus_a_AR = $(DTLIB64) && $(AR) $(ARFLAGS)
+
 lib64_DATA = \
   lib64/libwinusb.a \
   lib64/lib6to4svc.a    lib64/libaaaamon.a    lib64/libacledit.a      lib64/libaclui.a      \
diff --git a/mingw-w64-crt/Makefile.in b/mingw-w64-crt/Makefile.in
index 858bdab..563f3d0 100644
--- a/mingw-w64-crt/Makefile.in
+++ b/mingw-w64-crt/Makefile.in
@@ -221,6 +221,11 @@
 am__objects_6 = libsrc/lib32_libdxguid_a-dxguid.$(OBJEXT)
 @LIB32_TRUE@am_lib32_libdxguid_a_OBJECTS = $(am__objects_6)
 lib32_libdxguid_a_OBJECTS = $(am_lib32_libdxguid_a_OBJECTS)
+lib32_libgdiplus_a_LIBADD =
+am__lib32_libgdiplus_a_SOURCES_DIST = libsrc/gdiplus.c
+am__objects_7 = libsrc/lib32_libgdiplus_a-gdiplus.$(OBJEXT)
+@LIB32_TRUE@am_lib32_libgdiplus_a_OBJECTS = $(am__objects_7)
+lib32_libgdiplus_a_OBJECTS = $(am_lib32_libgdiplus_a_OBJECTS)
 lib32_libgmon_a_AR = $(AR) $(ARFLAGS)
 lib32_libgmon_a_LIBADD =
 am__lib32_libgmon_a_SOURCES_DIST = profile/mcount.c profile/profil.h \
@@ -234,19 +239,19 @@
 lib32_libgmon_a_OBJECTS = $(am_lib32_libgmon_a_OBJECTS)
 lib32_libksuser_a_LIBADD =
 am__lib32_libksuser_a_SOURCES_DIST = libsrc/ksuser.c
-am__objects_7 = libsrc/lib32_libksuser_a-ksuser.$(OBJEXT)
-@LIB32_TRUE@am_lib32_libksuser_a_OBJECTS = $(am__objects_7)
+am__objects_8 = libsrc/lib32_libksuser_a-ksuser.$(OBJEXT)
+@LIB32_TRUE@am_lib32_libksuser_a_OBJECTS = $(am__objects_8)
 lib32_libksuser_a_OBJECTS = $(am_lib32_libksuser_a_OBJECTS)
 lib32_liblargeint_a_AR = $(AR) $(ARFLAGS)
 lib32_liblargeint_a_LIBADD =
 am__lib32_liblargeint_a_SOURCES_DIST = libsrc/largeint.c
-am__objects_8 = libsrc/lib32_liblargeint_a-largeint.$(OBJEXT)
-@LIB32_TRUE@am_lib32_liblargeint_a_OBJECTS = $(am__objects_8)
+am__objects_9 = libsrc/lib32_liblargeint_a-largeint.$(OBJEXT)
+@LIB32_TRUE@am_lib32_liblargeint_a_OBJECTS = $(am__objects_9)
 lib32_liblargeint_a_OBJECTS = $(am_lib32_liblargeint_a_OBJECTS)
 lib32_libm_a_AR = $(AR) $(ARFLAGS)
 lib32_libm_a_LIBADD =
-am__objects_9 = lib32_libm_a-_libm_dummy.$(OBJEXT)
-@LIB32_TRUE@nodist_lib32_libm_a_OBJECTS = $(am__objects_9)
+am__objects_10 = lib32_libm_a-_libm_dummy.$(OBJEXT)
+@LIB32_TRUE@nodist_lib32_libm_a_OBJECTS = $(am__objects_10)
 lib32_libm_a_OBJECTS = $(nodist_lib32_libm_a_OBJECTS)
 lib32_libmingw32_a_AR = $(AR) $(ARFLAGS)
 lib32_libmingw32_a_LIBADD =
@@ -260,7 +265,7 @@
 	crt/mingw_custom.c crt/mingw_helpers.c crt/pseudo-reloc.c \
 	crt/udll_argv.c crt/xtxtmode.c crt/crt_handler.c crt/tlsthrd.c \
 	crt/tlsmthread.c crt/tlsmcrt.c
-am__objects_10 = crt/lib32_libmingw32_a-atonexit.$(OBJEXT) \
+am__objects_11 = crt/lib32_libmingw32_a-atonexit.$(OBJEXT) \
 	crt/lib32_libmingw32_a-crt0_c.$(OBJEXT) \
 	crt/lib32_libmingw32_a-dll_argv.$(OBJEXT) \
 	crt/lib32_libmingw32_a-gccmain.$(OBJEXT) \
@@ -290,7 +295,7 @@
 	crt/lib32_libmingw32_a-tlsthrd.$(OBJEXT) \
 	crt/lib32_libmingw32_a-tlsmthread.$(OBJEXT) \
 	crt/lib32_libmingw32_a-tlsmcrt.$(OBJEXT)
-@LIB32_TRUE@am_lib32_libmingw32_a_OBJECTS = $(am__objects_10)
+@LIB32_TRUE@am_lib32_libmingw32_a_OBJECTS = $(am__objects_11)
 lib32_libmingw32_a_OBJECTS = $(am_lib32_libmingw32_a_OBJECTS)
 lib32_libmingwex_a_AR = $(AR) $(ARFLAGS)
 lib32_libmingwex_a_LIBADD =
@@ -458,7 +463,7 @@
 	intrincs/writefsbyte.c intrincs/writefsword.c \
 	intrincs/writefsdword.c intrincs/_rotl64.c intrincs/_rotr64.c \
 	intrincs/membarrier.c
-am__objects_11 = crt/lib32_libmingwex_a-dllentry.$(OBJEXT) \
+am__objects_12 = crt/lib32_libmingwex_a-dllentry.$(OBJEXT) \
 	crt/lib32_libmingwex_a-dllmain.$(OBJEXT) \
 	intrincs/lib32_libmingwex_a-inbyte.$(OBJEXT) \
 	intrincs/lib32_libmingwex_a-inbytestring.$(OBJEXT) \
@@ -938,7 +943,7 @@
 	intrincs/lib32_libmingwex_a-ilockor64.$(OBJEXT) \
 	intrincs/lib32_libmingwex_a-ilockxor64.$(OBJEXT) \
 	intrincs/lib32_libmingwex_a-ilockexchadd64.$(OBJEXT)
-am__objects_12 = intrincs/lib32_libmingwex_a-readfsbyte.$(OBJEXT) \
+am__objects_13 = intrincs/lib32_libmingwex_a-readfsbyte.$(OBJEXT) \
 	intrincs/lib32_libmingwex_a-readfsword.$(OBJEXT) \
 	intrincs/lib32_libmingwex_a-readfsdword.$(OBJEXT) \
 	intrincs/lib32_libmingwex_a-writefsbyte.$(OBJEXT) \
@@ -947,50 +952,50 @@
 	intrincs/lib32_libmingwex_a-_rotl64.$(OBJEXT) \
 	intrincs/lib32_libmingwex_a-_rotr64.$(OBJEXT) \
 	intrincs/lib32_libmingwex_a-membarrier.$(OBJEXT)
-@LIB32_TRUE@am_lib32_libmingwex_a_OBJECTS = $(am__objects_11) \
-@LIB32_TRUE@	$(am__objects_12)
+@LIB32_TRUE@am_lib32_libmingwex_a_OBJECTS = $(am__objects_12) \
+@LIB32_TRUE@	$(am__objects_13)
 lib32_libmingwex_a_OBJECTS = $(am_lib32_libmingwex_a_OBJECTS)
 lib32_libmingwthrd_a_AR = $(AR) $(ARFLAGS)
 lib32_libmingwthrd_a_LIBADD =
 am__lib32_libmingwthrd_a_SOURCES_DIST = libsrc/mingwthrd_mt.c
-am__objects_13 = libsrc/lib32_libmingwthrd_a-mingwthrd_mt.$(OBJEXT)
-@LIB32_TRUE@am_lib32_libmingwthrd_a_OBJECTS = $(am__objects_13)
+am__objects_14 = libsrc/lib32_libmingwthrd_a-mingwthrd_mt.$(OBJEXT)
+@LIB32_TRUE@am_lib32_libmingwthrd_a_OBJECTS = $(am__objects_14)
 lib32_libmingwthrd_a_OBJECTS = $(am_lib32_libmingwthrd_a_OBJECTS)
 lib32_libmoldname_a_LIBADD =
 am__lib32_libmoldname_a_SOURCES_DIST = crt/isascii.c crt/iscsym.c \
 	crt/iscsymf.c crt/toascii.c crt/strcasecmp.c crt/strncasecmp.c \
 	crt/wcscmpi.c
-am__objects_14 = crt/lib32_libmoldname_a-isascii.$(OBJEXT) \
+am__objects_15 = crt/lib32_libmoldname_a-isascii.$(OBJEXT) \
 	crt/lib32_libmoldname_a-iscsym.$(OBJEXT) \
 	crt/lib32_libmoldname_a-iscsymf.$(OBJEXT) \
 	crt/lib32_libmoldname_a-toascii.$(OBJEXT) \
 	crt/lib32_libmoldname_a-strcasecmp.$(OBJEXT) \
 	crt/lib32_libmoldname_a-strncasecmp.$(OBJEXT) \
 	crt/lib32_libmoldname_a-wcscmpi.$(OBJEXT)
-@LIB32_TRUE@am_lib32_libmoldname_a_OBJECTS = $(am__objects_14)
+@LIB32_TRUE@am_lib32_libmoldname_a_OBJECTS = $(am__objects_15)
 lib32_libmoldname_a_OBJECTS = $(am_lib32_libmoldname_a_OBJECTS)
 lib32_libscrnsave_a_AR = $(AR) $(ARFLAGS)
 lib32_libscrnsave_a_LIBADD =
 am__lib32_libscrnsave_a_SOURCES_DIST = libsrc/scrnsave.c
-am__objects_15 = libsrc/lib32_libscrnsave_a-scrnsave.$(OBJEXT)
-@LIB32_TRUE@am_lib32_libscrnsave_a_OBJECTS = $(am__objects_15)
+am__objects_16 = libsrc/lib32_libscrnsave_a-scrnsave.$(OBJEXT)
+@LIB32_TRUE@am_lib32_libscrnsave_a_OBJECTS = $(am__objects_16)
 lib32_libscrnsave_a_OBJECTS = $(am_lib32_libscrnsave_a_OBJECTS)
 lib32_libscrnsavw_a_AR = $(AR) $(ARFLAGS)
 lib32_libscrnsavw_a_LIBADD =
 am__lib32_libscrnsavw_a_SOURCES_DIST = libsrc/scrnsave.c
-am__objects_16 = libsrc/lib32_libscrnsavw_a-scrnsave.$(OBJEXT)
-@LIB32_TRUE@am_lib32_libscrnsavw_a_OBJECTS = $(am__objects_16)
+am__objects_17 = libsrc/lib32_libscrnsavw_a-scrnsave.$(OBJEXT)
+@LIB32_TRUE@am_lib32_libscrnsavw_a_OBJECTS = $(am__objects_17)
 lib32_libscrnsavw_a_OBJECTS = $(am_lib32_libscrnsavw_a_OBJECTS)
 lib32_libshell32_a_LIBADD =
 am__lib32_libshell32_a_SOURCES_DIST = libsrc/shell32.c
-am__objects_17 = libsrc/lib32_libshell32_a-shell32.$(OBJEXT)
-@LIB32_TRUE@am_lib32_libshell32_a_OBJECTS = $(am__objects_17)
+am__objects_18 = libsrc/lib32_libshell32_a-shell32.$(OBJEXT)
+@LIB32_TRUE@am_lib32_libshell32_a_OBJECTS = $(am__objects_18)
 lib32_libshell32_a_OBJECTS = $(am_lib32_libshell32_a_OBJECTS)
 lib32_libstrmiids_a_AR = $(AR) $(ARFLAGS)
 lib32_libstrmiids_a_LIBADD =
 am__lib32_libstrmiids_a_SOURCES_DIST = libsrc/strmiids.c
-am__objects_18 = libsrc/lib32_libstrmiids_a-strmiids.$(OBJEXT)
-@LIB32_TRUE@am_lib32_libstrmiids_a_OBJECTS = $(am__objects_18)
+am__objects_19 = libsrc/lib32_libstrmiids_a-strmiids.$(OBJEXT)
+@LIB32_TRUE@am_lib32_libstrmiids_a_OBJECTS = $(am__objects_19)
 lib32_libstrmiids_a_OBJECTS = $(am_lib32_libstrmiids_a_OBJECTS)
 lib32_libuuid_a_AR = $(AR) $(ARFLAGS)
 lib32_libuuid_a_LIBADD =
@@ -1016,7 +1021,7 @@
 	libsrc/ntddpar-uuid.c libsrc/ntddser-uuid.c \
 	libsrc/ntddscsi-uuid.c libsrc/ntddstor-uuid.c \
 	libsrc/ntddvdeo-uuid.c
-am__objects_19 = libsrc/lib32_libuuid_a-uuid.$(OBJEXT) \
+am__objects_20 = libsrc/lib32_libuuid_a-uuid.$(OBJEXT) \
 	libsrc/lib32_libuuid_a-guid_nul.$(OBJEXT) \
 	libsrc/lib32_libuuid_a-devguid.$(OBJEXT) \
 	libsrc/lib32_libuuid_a-agtctl_i.$(OBJEXT) \
@@ -1071,7 +1076,7 @@
 	libsrc/lib32_libuuid_a-ntddscsi-uuid.$(OBJEXT) \
 	libsrc/lib32_libuuid_a-ntddstor-uuid.$(OBJEXT) \
 	libsrc/lib32_libuuid_a-ntddvdeo-uuid.$(OBJEXT)
-@LIB32_TRUE@am_lib32_libuuid_a_OBJECTS = $(am__objects_19)
+@LIB32_TRUE@am_lib32_libuuid_a_OBJECTS = $(am__objects_20)
 lib32_libuuid_a_OBJECTS = $(am_lib32_libuuid_a_OBJECTS)
 lib32_libws2_32_a_LIBADD =
 am__lib32_libws2_32_a_SOURCES_DIST = libsrc/ws2_32.c \
@@ -1108,7 +1113,7 @@
 	libsrc/wspiapi/WspiapiGetAddrInfo.c \
 	libsrc/wspiapi/WspiapiGetNameInfo.c \
 	libsrc/wspiapi/WspiapiFreeAddrInfo.c
-am__objects_20 = libsrc/lib32_libws2_32_a-ws2_32.$(OBJEXT) \
+am__objects_21 = libsrc/lib32_libws2_32_a-ws2_32.$(OBJEXT) \
 	libsrc/ws2tcpip/lib32_libws2_32_a-in6_addr_equal.$(OBJEXT) \
 	libsrc/ws2tcpip/lib32_libws2_32_a-in6addr_isany.$(OBJEXT) \
 	libsrc/ws2tcpip/lib32_libws2_32_a-in6addr_isloopback.$(OBJEXT) \
@@ -1143,7 +1148,7 @@
 	libsrc/wspiapi/lib32_libws2_32_a-WspiapiGetAddrInfo.$(OBJEXT) \
 	libsrc/wspiapi/lib32_libws2_32_a-WspiapiGetNameInfo.$(OBJEXT) \
 	libsrc/wspiapi/lib32_libws2_32_a-WspiapiFreeAddrInfo.$(OBJEXT)
-@LIB32_TRUE@am_lib32_libws2_32_a_OBJECTS = $(am__objects_20)
+@LIB32_TRUE@am_lib32_libws2_32_a_OBJECTS = $(am__objects_21)
 lib32_libws2_32_a_OBJECTS = $(am_lib32_libws2_32_a_OBJECTS)
 lib64_libdelayimp_a_AR = $(AR) $(ARFLAGS)
 lib64_libdelayimp_a_LIBADD =
@@ -1153,50 +1158,55 @@
 am__lib64_libdinput_a_SOURCES_DIST = libsrc/dinput_kbd.c \
 	libsrc/dinput_joy.c libsrc/dinput_joy2.c libsrc/dinput_mouse.c \
 	libsrc/dinput_mouse2.c
-am__objects_21 = libsrc/lib64_libdinput_a-dinput_kbd.$(OBJEXT) \
+am__objects_22 = libsrc/lib64_libdinput_a-dinput_kbd.$(OBJEXT) \
 	libsrc/lib64_libdinput_a-dinput_joy.$(OBJEXT) \
 	libsrc/lib64_libdinput_a-dinput_joy2.$(OBJEXT) \
 	libsrc/lib64_libdinput_a-dinput_mouse.$(OBJEXT) \
 	libsrc/lib64_libdinput_a-dinput_mouse2.$(OBJEXT)
-@LIB64_TRUE@am_lib64_libdinput_a_OBJECTS = $(am__objects_21)
+@LIB64_TRUE@am_lib64_libdinput_a_OBJECTS = $(am__objects_22)
 lib64_libdinput_a_OBJECTS = $(am_lib64_libdinput_a_OBJECTS)
 lib64_libdinput8_a_LIBADD =
 am__lib64_libdinput8_a_SOURCES_DIST = libsrc/dinput_private.h \
 	libsrc/dinput_joy.c libsrc/dinput_joy2.c libsrc/dinput_mouse.c \
 	libsrc/dinput_mouse2.c libsrc/dinput_kbd.c
-am__objects_22 = libsrc/lib64_libdinput8_a-dinput_joy.$(OBJEXT) \
+am__objects_23 = libsrc/lib64_libdinput8_a-dinput_joy.$(OBJEXT) \
 	libsrc/lib64_libdinput8_a-dinput_joy2.$(OBJEXT) \
 	libsrc/lib64_libdinput8_a-dinput_mouse.$(OBJEXT) \
 	libsrc/lib64_libdinput8_a-dinput_mouse2.$(OBJEXT) \
 	libsrc/lib64_libdinput8_a-dinput_kbd.$(OBJEXT)
-@LIB64_TRUE@am_lib64_libdinput8_a_OBJECTS = $(am__objects_22)
+@LIB64_TRUE@am_lib64_libdinput8_a_OBJECTS = $(am__objects_23)
 lib64_libdinput8_a_OBJECTS = $(am_lib64_libdinput8_a_OBJECTS)
 lib64_libdmoguids_a_AR = $(AR) $(ARFLAGS)
 lib64_libdmoguids_a_LIBADD =
 am__lib64_libdmoguids_a_SOURCES_DIST = libsrc/dmoguids.c
-am__objects_23 = libsrc/lib64_libdmoguids_a-dmoguids.$(OBJEXT)
-@LIB64_TRUE@am_lib64_libdmoguids_a_OBJECTS = $(am__objects_23)
+am__objects_24 = libsrc/lib64_libdmoguids_a-dmoguids.$(OBJEXT)
+@LIB64_TRUE@am_lib64_libdmoguids_a_OBJECTS = $(am__objects_24)
 lib64_libdmoguids_a_OBJECTS = $(am_lib64_libdmoguids_a_OBJECTS)
 lib64_libdxerr8_a_AR = $(AR) $(ARFLAGS)
 lib64_libdxerr8_a_LIBADD =
 am__lib64_libdxerr8_a_SOURCES_DIST = libsrc/dxerr8.c libsrc/dxerr8w.c
-am__objects_24 = libsrc/lib64_libdxerr8_a-dxerr8.$(OBJEXT) \
+am__objects_25 = libsrc/lib64_libdxerr8_a-dxerr8.$(OBJEXT) \
 	libsrc/lib64_libdxerr8_a-dxerr8w.$(OBJEXT)
-@LIB64_TRUE@am_lib64_libdxerr8_a_OBJECTS = $(am__objects_24)
+@LIB64_TRUE@am_lib64_libdxerr8_a_OBJECTS = $(am__objects_25)
 lib64_libdxerr8_a_OBJECTS = $(am_lib64_libdxerr8_a_OBJECTS)
 lib64_libdxerr9_a_AR = $(AR) $(ARFLAGS)
 lib64_libdxerr9_a_LIBADD =
 am__lib64_libdxerr9_a_SOURCES_DIST = libsrc/dxerr9.c libsrc/dxerr9w.c
-am__objects_25 = libsrc/lib64_libdxerr9_a-dxerr9.$(OBJEXT) \
+am__objects_26 = libsrc/lib64_libdxerr9_a-dxerr9.$(OBJEXT) \
 	libsrc/lib64_libdxerr9_a-dxerr9w.$(OBJEXT)
-@LIB64_TRUE@am_lib64_libdxerr9_a_OBJECTS = $(am__objects_25)
+@LIB64_TRUE@am_lib64_libdxerr9_a_OBJECTS = $(am__objects_26)
 lib64_libdxerr9_a_OBJECTS = $(am_lib64_libdxerr9_a_OBJECTS)
 lib64_libdxguid_a_AR = $(AR) $(ARFLAGS)
 lib64_libdxguid_a_LIBADD =
 am__lib64_libdxguid_a_SOURCES_DIST = libsrc/dxguid.c
-am__objects_26 = libsrc/lib64_libdxguid_a-dxguid.$(OBJEXT)
-@LIB64_TRUE@am_lib64_libdxguid_a_OBJECTS = $(am__objects_26)
+am__objects_27 = libsrc/lib64_libdxguid_a-dxguid.$(OBJEXT)
+@LIB64_TRUE@am_lib64_libdxguid_a_OBJECTS = $(am__objects_27)
 lib64_libdxguid_a_OBJECTS = $(am_lib64_libdxguid_a_OBJECTS)
+lib64_libgdiplus_a_LIBADD =
+am__lib64_libgdiplus_a_SOURCES_DIST = libsrc/gdiplus.c
+am__objects_28 = libsrc/lib64_libgdiplus_a-gdiplus.$(OBJEXT)
+@LIB64_TRUE@am_lib64_libgdiplus_a_OBJECTS = $(am__objects_28)
+lib64_libgdiplus_a_OBJECTS = $(am_lib64_libgdiplus_a_OBJECTS)
 lib64_libgmon_a_AR = $(AR) $(ARFLAGS)
 lib64_libgmon_a_LIBADD =
 am__lib64_libgmon_a_SOURCES_DIST = profile/mcount.c profile/profil.h \
@@ -1210,19 +1220,19 @@
 lib64_libgmon_a_OBJECTS = $(am_lib64_libgmon_a_OBJECTS)
 lib64_libksuser_a_LIBADD =
 am__lib64_libksuser_a_SOURCES_DIST = libsrc/ksuser.c
-am__objects_27 = libsrc/lib64_libksuser_a-ksuser.$(OBJEXT)
-@LIB64_TRUE@am_lib64_libksuser_a_OBJECTS = $(am__objects_27)
+am__objects_29 = libsrc/lib64_libksuser_a-ksuser.$(OBJEXT)
+@LIB64_TRUE@am_lib64_libksuser_a_OBJECTS = $(am__objects_29)
 lib64_libksuser_a_OBJECTS = $(am_lib64_libksuser_a_OBJECTS)
 lib64_liblargeint_a_AR = $(AR) $(ARFLAGS)
 lib64_liblargeint_a_LIBADD =
 am__lib64_liblargeint_a_SOURCES_DIST = libsrc/largeint.c
-am__objects_28 = libsrc/lib64_liblargeint_a-largeint.$(OBJEXT)
-@LIB64_TRUE@am_lib64_liblargeint_a_OBJECTS = $(am__objects_28)
+am__objects_30 = libsrc/lib64_liblargeint_a-largeint.$(OBJEXT)
+@LIB64_TRUE@am_lib64_liblargeint_a_OBJECTS = $(am__objects_30)
 lib64_liblargeint_a_OBJECTS = $(am_lib64_liblargeint_a_OBJECTS)
 lib64_libm_a_AR = $(AR) $(ARFLAGS)
 lib64_libm_a_LIBADD =
-am__objects_29 = lib64_libm_a-_libm_dummy.$(OBJEXT)
-@LIB64_TRUE@nodist_lib64_libm_a_OBJECTS = $(am__objects_29)
+am__objects_31 = lib64_libm_a-_libm_dummy.$(OBJEXT)
+@LIB64_TRUE@nodist_lib64_libm_a_OBJECTS = $(am__objects_31)
 lib64_libm_a_OBJECTS = $(nodist_lib64_libm_a_OBJECTS)
 lib64_libmingw32_a_AR = $(AR) $(ARFLAGS)
 lib64_libmingw32_a_LIBADD =
@@ -1236,7 +1246,7 @@
 	crt/mingw_custom.c crt/mingw_helpers.c crt/pseudo-reloc.c \
 	crt/udll_argv.c crt/xtxtmode.c crt/crt_handler.c crt/tlsthrd.c \
 	crt/tlsmthread.c crt/tlsmcrt.c
-am__objects_30 = crt/lib64_libmingw32_a-atonexit.$(OBJEXT) \
+am__objects_32 = crt/lib64_libmingw32_a-atonexit.$(OBJEXT) \
 	crt/lib64_libmingw32_a-crt0_c.$(OBJEXT) \
 	crt/lib64_libmingw32_a-dll_argv.$(OBJEXT) \
 	crt/lib64_libmingw32_a-gccmain.$(OBJEXT) \
@@ -1266,7 +1276,7 @@
 	crt/lib64_libmingw32_a-tlsthrd.$(OBJEXT) \
 	crt/lib64_libmingw32_a-tlsmthread.$(OBJEXT) \
 	crt/lib64_libmingw32_a-tlsmcrt.$(OBJEXT)
-@LIB64_TRUE@am_lib64_libmingw32_a_OBJECTS = $(am__objects_30)
+@LIB64_TRUE@am_lib64_libmingw32_a_OBJECTS = $(am__objects_32)
 lib64_libmingw32_a_OBJECTS = $(am_lib64_libmingw32_a_OBJECTS)
 lib64_libmingwex_a_AR = $(AR) $(ARFLAGS)
 lib64_libmingwex_a_LIBADD =
@@ -1442,7 +1452,7 @@
 	intrincs/_umul128.c intrincs/__movsq.c \
 	intrincs/__shiftright128.c intrincs/__shiftleft128.c \
 	intrincs/__stosq.c intrincs/_rotl64.c intrincs/_rotr64.c
-am__objects_31 = crt/lib64_libmingwex_a-dllentry.$(OBJEXT) \
+am__objects_33 = crt/lib64_libmingwex_a-dllentry.$(OBJEXT) \
 	crt/lib64_libmingwex_a-dllmain.$(OBJEXT) \
 	intrincs/lib64_libmingwex_a-inbyte.$(OBJEXT) \
 	intrincs/lib64_libmingwex_a-inbytestring.$(OBJEXT) \
@@ -1922,7 +1932,7 @@
 	intrincs/lib64_libmingwex_a-ilockor64.$(OBJEXT) \
 	intrincs/lib64_libmingwex_a-ilockxor64.$(OBJEXT) \
 	intrincs/lib64_libmingwex_a-ilockexchadd64.$(OBJEXT)
-am__objects_32 = intrincs/lib64_libmingwex_a-bittest64.$(OBJEXT) \
+am__objects_34 = intrincs/lib64_libmingwex_a-bittest64.$(OBJEXT) \
 	intrincs/lib64_libmingwex_a-bittestc64.$(OBJEXT) \
 	intrincs/lib64_libmingwex_a-bittestr64.$(OBJEXT) \
 	intrincs/lib64_libmingwex_a-bittestri64.$(OBJEXT) \
@@ -1949,33 +1959,33 @@
 	intrincs/lib64_libmingwex_a-__stosq.$(OBJEXT) \
 	intrincs/lib64_libmingwex_a-_rotl64.$(OBJEXT) \
 	intrincs/lib64_libmingwex_a-_rotr64.$(OBJEXT)
-@LIB64_TRUE@am_lib64_libmingwex_a_OBJECTS = $(am__objects_31) \
-@LIB64_TRUE@	$(am__objects_32)
+@LIB64_TRUE@am_lib64_libmingwex_a_OBJECTS = $(am__objects_33) \
+@LIB64_TRUE@	$(am__objects_34)
 lib64_libmingwex_a_OBJECTS = $(am_lib64_libmingwex_a_OBJECTS)
 lib64_libmingwthrd_a_AR = $(AR) $(ARFLAGS)
 lib64_libmingwthrd_a_LIBADD =
 am__lib64_libmingwthrd_a_SOURCES_DIST = libsrc/mingwthrd_mt.c
-am__objects_33 = libsrc/lib64_libmingwthrd_a-mingwthrd_mt.$(OBJEXT)
-@LIB64_TRUE@am_lib64_libmingwthrd_a_OBJECTS = $(am__objects_33)
+am__objects_35 = libsrc/lib64_libmingwthrd_a-mingwthrd_mt.$(OBJEXT)
+@LIB64_TRUE@am_lib64_libmingwthrd_a_OBJECTS = $(am__objects_35)
 lib64_libmingwthrd_a_OBJECTS = $(am_lib64_libmingwthrd_a_OBJECTS)
 lib64_libmoldname_a_LIBADD =
 am__lib64_libmoldname_a_SOURCES_DIST = crt/isascii.c crt/iscsym.c \
 	crt/iscsymf.c crt/toascii.c crt/strcasecmp.c crt/strncasecmp.c \
 	crt/wcscmpi.c
-am__objects_34 = crt/lib64_libmoldname_a-isascii.$(OBJEXT) \
+am__objects_36 = crt/lib64_libmoldname_a-isascii.$(OBJEXT) \
 	crt/lib64_libmoldname_a-iscsym.$(OBJEXT) \
 	crt/lib64_libmoldname_a-iscsymf.$(OBJEXT) \
 	crt/lib64_libmoldname_a-toascii.$(OBJEXT) \
 	crt/lib64_libmoldname_a-strcasecmp.$(OBJEXT) \
 	crt/lib64_libmoldname_a-strncasecmp.$(OBJEXT) \
 	crt/lib64_libmoldname_a-wcscmpi.$(OBJEXT)
-@LIB64_TRUE@am_lib64_libmoldname_a_OBJECTS = $(am__objects_34)
+@LIB64_TRUE@am_lib64_libmoldname_a_OBJECTS = $(am__objects_36)
 lib64_libmoldname_a_OBJECTS = $(am_lib64_libmoldname_a_OBJECTS)
 lib64_libscrnsave_a_AR = $(AR) $(ARFLAGS)
 lib64_libscrnsave_a_LIBADD =
 am__lib64_libscrnsave_a_SOURCES_DIST = libsrc/scrnsave.c
-am__objects_35 = libsrc/lib64_libscrnsave_a-scrnsave.$(OBJEXT)
-@LIB64_TRUE@am_lib64_libscrnsave_a_OBJECTS = $(am__objects_35)
+am__objects_37 = libsrc/lib64_libscrnsave_a-scrnsave.$(OBJEXT)
+@LIB64_TRUE@am_lib64_libscrnsave_a_OBJECTS = $(am__objects_37)
 lib64_libscrnsave_a_OBJECTS = $(am_lib64_libscrnsave_a_OBJECTS)
 lib64_libscrnsavw_a_AR = $(AR) $(ARFLAGS)
 lib64_libscrnsavw_a_LIBADD =
@@ -1985,14 +1995,14 @@
 lib64_libscrnsavw_a_OBJECTS = $(am_lib64_libscrnsavw_a_OBJECTS)
 lib64_libshell32_a_LIBADD =
 am__lib64_libshell32_a_SOURCES_DIST = libsrc/shell32.c
-am__objects_36 = libsrc/lib64_libshell32_a-shell32.$(OBJEXT)
-@LIB64_TRUE@am_lib64_libshell32_a_OBJECTS = $(am__objects_36)
+am__objects_38 = libsrc/lib64_libshell32_a-shell32.$(OBJEXT)
+@LIB64_TRUE@am_lib64_libshell32_a_OBJECTS = $(am__objects_38)
 lib64_libshell32_a_OBJECTS = $(am_lib64_libshell32_a_OBJECTS)
 lib64_libstrmiids_a_AR = $(AR) $(ARFLAGS)
 lib64_libstrmiids_a_LIBADD =
 am__lib64_libstrmiids_a_SOURCES_DIST = libsrc/strmiids.c
-am__objects_37 = libsrc/lib64_libstrmiids_a-strmiids.$(OBJEXT)
-@LIB64_TRUE@am_lib64_libstrmiids_a_OBJECTS = $(am__objects_37)
+am__objects_39 = libsrc/lib64_libstrmiids_a-strmiids.$(OBJEXT)
+@LIB64_TRUE@am_lib64_libstrmiids_a_OBJECTS = $(am__objects_39)
 lib64_libstrmiids_a_OBJECTS = $(am_lib64_libstrmiids_a_OBJECTS)
 lib64_libuuid_a_AR = $(AR) $(ARFLAGS)
 lib64_libuuid_a_LIBADD =
@@ -2018,7 +2028,7 @@
 	libsrc/ntddpar-uuid.c libsrc/ntddser-uuid.c \
 	libsrc/ntddscsi-uuid.c libsrc/ntddstor-uuid.c \
 	libsrc/ntddvdeo-uuid.c
-am__objects_38 = libsrc/lib64_libuuid_a-uuid.$(OBJEXT) \
+am__objects_40 = libsrc/lib64_libuuid_a-uuid.$(OBJEXT) \
 	libsrc/lib64_libuuid_a-guid_nul.$(OBJEXT) \
 	libsrc/lib64_libuuid_a-devguid.$(OBJEXT) \
 	libsrc/lib64_libuuid_a-agtctl_i.$(OBJEXT) \
@@ -2073,7 +2083,7 @@
 	libsrc/lib64_libuuid_a-ntddscsi-uuid.$(OBJEXT) \
 	libsrc/lib64_libuuid_a-ntddstor-uuid.$(OBJEXT) \
 	libsrc/lib64_libuuid_a-ntddvdeo-uuid.$(OBJEXT)
-@LIB64_TRUE@am_lib64_libuuid_a_OBJECTS = $(am__objects_38)
+@LIB64_TRUE@am_lib64_libuuid_a_OBJECTS = $(am__objects_40)
 lib64_libuuid_a_OBJECTS = $(am_lib64_libuuid_a_OBJECTS)
 lib64_libws2_32_a_LIBADD =
 am__lib64_libws2_32_a_SOURCES_DIST = libsrc/ws2_32.c \
@@ -2110,7 +2120,7 @@
 	libsrc/wspiapi/WspiapiGetAddrInfo.c \
 	libsrc/wspiapi/WspiapiGetNameInfo.c \
 	libsrc/wspiapi/WspiapiFreeAddrInfo.c
-am__objects_39 = libsrc/lib64_libws2_32_a-ws2_32.$(OBJEXT) \
+am__objects_41 = libsrc/lib64_libws2_32_a-ws2_32.$(OBJEXT) \
 	libsrc/ws2tcpip/lib64_libws2_32_a-in6_addr_equal.$(OBJEXT) \
 	libsrc/ws2tcpip/lib64_libws2_32_a-in6addr_isany.$(OBJEXT) \
 	libsrc/ws2tcpip/lib64_libws2_32_a-in6addr_isloopback.$(OBJEXT) \
@@ -2145,7 +2155,7 @@
 	libsrc/wspiapi/lib64_libws2_32_a-WspiapiGetAddrInfo.$(OBJEXT) \
 	libsrc/wspiapi/lib64_libws2_32_a-WspiapiGetNameInfo.$(OBJEXT) \
 	libsrc/wspiapi/lib64_libws2_32_a-WspiapiFreeAddrInfo.$(OBJEXT)
-@LIB64_TRUE@am_lib64_libws2_32_a_OBJECTS = $(am__objects_39)
+@LIB64_TRUE@am_lib64_libws2_32_a_OBJECTS = $(am__objects_41)
 lib64_libws2_32_a_OBJECTS = $(am_lib64_libws2_32_a_OBJECTS)
 tests32_libnewcomplextests_a_AR = $(AR) $(ARFLAGS)
 tests32_libnewcomplextests_a_LIBADD =
@@ -2162,7 +2172,7 @@
 	testcases/complex/csin.c testcases/complex/csinh.c \
 	testcases/complex/csqrt.c testcases/complex/ctan.c \
 	testcases/complex/ctanh.c
-am__objects_40 =  \
+am__objects_42 =  \
 	testcases/complex/tests32_libnewcomplextests_a-cabs.$(OBJEXT) \
 	testcases/complex/tests32_libnewcomplextests_a-cacos.$(OBJEXT) \
 	testcases/complex/tests32_libnewcomplextests_a-cacosh.$(OBJEXT) \
@@ -2186,7 +2196,7 @@
 	testcases/complex/tests32_libnewcomplextests_a-ctan.$(OBJEXT) \
 	testcases/complex/tests32_libnewcomplextests_a-ctanh.$(OBJEXT)
 @LIB32_TRUE@am_tests32_libnewcomplextests_a_OBJECTS =  \
-@LIB32_TRUE@	$(am__objects_40)
+@LIB32_TRUE@	$(am__objects_42)
 tests32_libnewcomplextests_a_OBJECTS =  \
 	$(am_tests32_libnewcomplextests_a_OBJECTS)
 tests32_libnewcomplextestsf_a_AR = $(AR) $(ARFLAGS)
@@ -2204,7 +2214,7 @@
 	testcases/complex/csin.c testcases/complex/csinh.c \
 	testcases/complex/csqrt.c testcases/complex/ctan.c \
 	testcases/complex/ctanh.c
-am__objects_41 = testcases/complex/tests32_libnewcomplextestsf_a-cabs.$(OBJEXT) \
+am__objects_43 = testcases/complex/tests32_libnewcomplextestsf_a-cabs.$(OBJEXT) \
 	testcases/complex/tests32_libnewcomplextestsf_a-cacos.$(OBJEXT) \
 	testcases/complex/tests32_libnewcomplextestsf_a-cacosh.$(OBJEXT) \
 	testcases/complex/tests32_libnewcomplextestsf_a-carg.$(OBJEXT) \
@@ -2227,7 +2237,7 @@
 	testcases/complex/tests32_libnewcomplextestsf_a-ctan.$(OBJEXT) \
 	testcases/complex/tests32_libnewcomplextestsf_a-ctanh.$(OBJEXT)
 @LIB32_TRUE@am_tests32_libnewcomplextestsf_a_OBJECTS =  \
-@LIB32_TRUE@	$(am__objects_41)
+@LIB32_TRUE@	$(am__objects_43)
 tests32_libnewcomplextestsf_a_OBJECTS =  \
 	$(am_tests32_libnewcomplextestsf_a_OBJECTS)
 tests32_libnewcomplextestsld_a_AR = $(AR) $(ARFLAGS)
@@ -2245,7 +2255,7 @@
 	testcases/complex/csin.c testcases/complex/csinh.c \
 	testcases/complex/csqrt.c testcases/complex/ctan.c \
 	testcases/complex/ctanh.c
-am__objects_42 = testcases/complex/tests32_libnewcomplextestsld_a-cabs.$(OBJEXT) \
+am__objects_44 = testcases/complex/tests32_libnewcomplextestsld_a-cabs.$(OBJEXT) \
 	testcases/complex/tests32_libnewcomplextestsld_a-cacos.$(OBJEXT) \
 	testcases/complex/tests32_libnewcomplextestsld_a-cacosh.$(OBJEXT) \
 	testcases/complex/tests32_libnewcomplextestsld_a-carg.$(OBJEXT) \
@@ -2268,7 +2278,7 @@
 	testcases/complex/tests32_libnewcomplextestsld_a-ctan.$(OBJEXT) \
 	testcases/complex/tests32_libnewcomplextestsld_a-ctanh.$(OBJEXT)
 @LIB32_TRUE@am_tests32_libnewcomplextestsld_a_OBJECTS =  \
-@LIB32_TRUE@	$(am__objects_42)
+@LIB32_TRUE@	$(am__objects_44)
 tests32_libnewcomplextestsld_a_OBJECTS =  \
 	$(am_tests32_libnewcomplextestsld_a_OBJECTS)
 tests64_libnewcomplextests_a_AR = $(AR) $(ARFLAGS)
@@ -2286,7 +2296,7 @@
 	testcases/complex/csin.c testcases/complex/csinh.c \
 	testcases/complex/csqrt.c testcases/complex/ctan.c \
 	testcases/complex/ctanh.c
-am__objects_43 =  \
+am__objects_45 =  \
 	testcases/complex/tests64_libnewcomplextests_a-cabs.$(OBJEXT) \
 	testcases/complex/tests64_libnewcomplextests_a-cacos.$(OBJEXT) \
 	testcases/complex/tests64_libnewcomplextests_a-cacosh.$(OBJEXT) \
@@ -2310,7 +2320,7 @@
 	testcases/complex/tests64_libnewcomplextests_a-ctan.$(OBJEXT) \
 	testcases/complex/tests64_libnewcomplextests_a-ctanh.$(OBJEXT)
 @LIB64_TRUE@am_tests64_libnewcomplextests_a_OBJECTS =  \
-@LIB64_TRUE@	$(am__objects_43)
+@LIB64_TRUE@	$(am__objects_45)
 tests64_libnewcomplextests_a_OBJECTS =  \
 	$(am_tests64_libnewcomplextests_a_OBJECTS)
 tests64_libnewcomplextestsf_a_AR = $(AR) $(ARFLAGS)
@@ -2328,7 +2338,7 @@
 	testcases/complex/csin.c testcases/complex/csinh.c \
 	testcases/complex/csqrt.c testcases/complex/ctan.c \
 	testcases/complex/ctanh.c
-am__objects_44 = testcases/complex/tests64_libnewcomplextestsf_a-cabs.$(OBJEXT) \
+am__objects_46 = testcases/complex/tests64_libnewcomplextestsf_a-cabs.$(OBJEXT) \
 	testcases/complex/tests64_libnewcomplextestsf_a-cacos.$(OBJEXT) \
 	testcases/complex/tests64_libnewcomplextestsf_a-cacosh.$(OBJEXT) \
 	testcases/complex/tests64_libnewcomplextestsf_a-carg.$(OBJEXT) \
@@ -2351,7 +2361,7 @@
 	testcases/complex/tests64_libnewcomplextestsf_a-ctan.$(OBJEXT) \
 	testcases/complex/tests64_libnewcomplextestsf_a-ctanh.$(OBJEXT)
 @LIB64_TRUE@am_tests64_libnewcomplextestsf_a_OBJECTS =  \
-@LIB64_TRUE@	$(am__objects_44)
+@LIB64_TRUE@	$(am__objects_46)
 tests64_libnewcomplextestsf_a_OBJECTS =  \
 	$(am_tests64_libnewcomplextestsf_a_OBJECTS)
 tests64_libnewcomplextestsld_a_AR = $(AR) $(ARFLAGS)
@@ -2369,7 +2379,7 @@
 	testcases/complex/csin.c testcases/complex/csinh.c \
 	testcases/complex/csqrt.c testcases/complex/ctan.c \
 	testcases/complex/ctanh.c
-am__objects_45 = testcases/complex/tests64_libnewcomplextestsld_a-cabs.$(OBJEXT) \
+am__objects_47 = testcases/complex/tests64_libnewcomplextestsld_a-cabs.$(OBJEXT) \
 	testcases/complex/tests64_libnewcomplextestsld_a-cacos.$(OBJEXT) \
 	testcases/complex/tests64_libnewcomplextestsld_a-cacosh.$(OBJEXT) \
 	testcases/complex/tests64_libnewcomplextestsld_a-carg.$(OBJEXT) \
@@ -2392,7 +2402,7 @@
 	testcases/complex/tests64_libnewcomplextestsld_a-ctan.$(OBJEXT) \
 	testcases/complex/tests64_libnewcomplextestsld_a-ctanh.$(OBJEXT)
 @LIB64_TRUE@am_tests64_libnewcomplextestsld_a_OBJECTS =  \
-@LIB64_TRUE@	$(am__objects_45)
+@LIB64_TRUE@	$(am__objects_47)
 tests64_libnewcomplextestsld_a_OBJECTS =  \
 	$(am_tests64_libnewcomplextestsld_a_OBJECTS)
 @ENABLE_TESTS_UNICODE_TRUE@am__EXEEXT_1 =  \
@@ -2847,17 +2857,18 @@
 SOURCES = $(lib32_libdelayimp_a_SOURCES) $(lib32_libdinput_a_SOURCES) \
 	$(lib32_libdinput8_a_SOURCES) $(lib32_libdmoguids_a_SOURCES) \
 	$(lib32_libdxerr8_a_SOURCES) $(lib32_libdxerr9_a_SOURCES) \
-	$(lib32_libdxguid_a_SOURCES) $(lib32_libgmon_a_SOURCES) \
-	$(lib32_libksuser_a_SOURCES) $(lib32_liblargeint_a_SOURCES) \
-	$(nodist_lib32_libm_a_SOURCES) $(lib32_libmingw32_a_SOURCES) \
-	$(lib32_libmingwex_a_SOURCES) $(lib32_libmingwthrd_a_SOURCES) \
-	$(lib32_libmoldname_a_SOURCES) $(lib32_libscrnsave_a_SOURCES) \
-	$(lib32_libscrnsavw_a_SOURCES) $(lib32_libshell32_a_SOURCES) \
-	$(lib32_libstrmiids_a_SOURCES) $(lib32_libuuid_a_SOURCES) \
-	$(lib32_libws2_32_a_SOURCES) $(lib64_libdelayimp_a_SOURCES) \
-	$(lib64_libdinput_a_SOURCES) $(lib64_libdinput8_a_SOURCES) \
-	$(lib64_libdmoguids_a_SOURCES) $(lib64_libdxerr8_a_SOURCES) \
-	$(lib64_libdxerr9_a_SOURCES) $(lib64_libdxguid_a_SOURCES) \
+	$(lib32_libdxguid_a_SOURCES) $(lib32_libgdiplus_a_SOURCES) \
+	$(lib32_libgmon_a_SOURCES) $(lib32_libksuser_a_SOURCES) \
+	$(lib32_liblargeint_a_SOURCES) $(nodist_lib32_libm_a_SOURCES) \
+	$(lib32_libmingw32_a_SOURCES) $(lib32_libmingwex_a_SOURCES) \
+	$(lib32_libmingwthrd_a_SOURCES) $(lib32_libmoldname_a_SOURCES) \
+	$(lib32_libscrnsave_a_SOURCES) $(lib32_libscrnsavw_a_SOURCES) \
+	$(lib32_libshell32_a_SOURCES) $(lib32_libstrmiids_a_SOURCES) \
+	$(lib32_libuuid_a_SOURCES) $(lib32_libws2_32_a_SOURCES) \
+	$(lib64_libdelayimp_a_SOURCES) $(lib64_libdinput_a_SOURCES) \
+	$(lib64_libdinput8_a_SOURCES) $(lib64_libdmoguids_a_SOURCES) \
+	$(lib64_libdxerr8_a_SOURCES) $(lib64_libdxerr9_a_SOURCES) \
+	$(lib64_libdxguid_a_SOURCES) $(lib64_libgdiplus_a_SOURCES) \
 	$(lib64_libgmon_a_SOURCES) $(lib64_libksuser_a_SOURCES) \
 	$(lib64_liblargeint_a_SOURCES) $(nodist_lib64_libm_a_SOURCES) \
 	$(lib64_libmingw32_a_SOURCES) $(lib64_libmingwex_a_SOURCES) \
@@ -2912,6 +2923,7 @@
 	$(am__lib32_libdxerr8_a_SOURCES_DIST) \
 	$(am__lib32_libdxerr9_a_SOURCES_DIST) \
 	$(am__lib32_libdxguid_a_SOURCES_DIST) \
+	$(am__lib32_libgdiplus_a_SOURCES_DIST) \
 	$(am__lib32_libgmon_a_SOURCES_DIST) \
 	$(am__lib32_libksuser_a_SOURCES_DIST) \
 	$(am__lib32_liblargeint_a_SOURCES_DIST) \
@@ -2932,6 +2944,7 @@
 	$(am__lib64_libdxerr8_a_SOURCES_DIST) \
 	$(am__lib64_libdxerr9_a_SOURCES_DIST) \
 	$(am__lib64_libdxguid_a_SOURCES_DIST) \
+	$(am__lib64_libgdiplus_a_SOURCES_DIST) \
 	$(am__lib64_libgmon_a_SOURCES_DIST) \
 	$(am__lib64_libksuser_a_SOURCES_DIST) \
 	$(am__lib64_liblargeint_a_SOURCES_DIST) \
@@ -3201,6 +3214,7 @@
 src_libscrnsavw = libsrc/scrnsave.c
 src_libstrmiids = libsrc/strmiids.c
 src_libmingwthrd = libsrc/mingwthrd_mt.c
+src_libgdiplus = libsrc/gdiplus.c
 src_libuuid = libsrc/uuid.c   libsrc/guid_nul.c         libsrc/devguid.c         libsrc/agtctl_i.c        libsrc/agtsvr_i.c          \
   libsrc/cdoex_i.c          libsrc/cdoexm_i.c         libsrc/cdosys_i.c        libsrc/emostore_i.c      libsrc/iisext_i.c          \
   libsrc/mtsadmin_i.c       libsrc/mtxadmin_i.c       libsrc/scardssp_i.c      libsrc/tsuserex_i.c      libsrc/fwp-uuid.c          \
@@ -3414,8 +3428,8 @@
 @LIB32_TRUE@	lib32/libmingwex.a lib32/libmoldname.a \
 @LIB32_TRUE@	lib32/libscrnsave.a lib32/libscrnsavw.a \
 @LIB32_TRUE@	lib32/libstrmiids.a lib32/libmingwthrd.a \
-@LIB32_TRUE@	lib32/libuuid.a lib32/libws2_32.a \
-@LIB32_TRUE@	lib32/libdelayimp.a
+@LIB32_TRUE@	lib32/libuuid.a lib32/libgdiplus.a \
+@LIB32_TRUE@	lib32/libws2_32.a lib32/libdelayimp.a
 @LIB32_TRUE@nodist_lib32_libm_a_SOURCES = $(src_libm)
 @LIB32_TRUE@lib32_libm_a_CPPFLAGS = $(CPPFLAGS32) $(sysincludes)
 @LIB32_TRUE@lib32_libgmon_a_SOURCES = profile/mcount.c \
@@ -3464,6 +3478,9 @@
 @LIB32_TRUE@lib32_libmingwthrd_a_CPPFLAGS = $(CPPFLAGS32) $(sysincludes)
 @LIB32_TRUE@lib32_libuuid_a_SOURCES = $(src_libuuid)
 @LIB32_TRUE@lib32_libuuid_a_CPPFLAGS = $(CPPFLAGS32) $(sysincludes)
+@LIB32_TRUE@lib32_libgdiplus_a_SOURCES = $(src_libgdiplus)
+@LIB32_TRUE@lib32_libgdiplus_a_CPPFLAGS = $(CPPFLAGS32) $(sysincludes)
+@LIB32_TRUE@lib32_libgdiplus_a_AR = $(DTLIB32) && $(AR) $(ARFLAGS)
 @LIB32_TRUE@lib32_libws2_32_a_SOURCES = $(src_libws2_32)
 @LIB32_TRUE@lib32_libws2_32_a_CPPFLAGS = $(CPPFLAGS32) $(sysincludes)
 @LIB32_TRUE@lib32_libws2_32_a_AR = $(DTLIB32) && $(AR) $(ARFLAGS)
@@ -3586,7 +3603,7 @@
 @LIB64_TRUE@	lib64/libmingw32.a lib64/libmingwex.a \
 @LIB64_TRUE@	lib64/libmoldname.a lib64/libmingwthrd.a \
 @LIB64_TRUE@	lib64/libuuid.a lib64/libws2_32.a \
-@LIB64_TRUE@	lib64/libdelayimp.a
+@LIB64_TRUE@	lib64/libdelayimp.a lib64/libgdiplus.a
 @LIB64_TRUE@nodist_lib64_libm_a_SOURCES = $(src_libm)
 @LIB64_TRUE@lib64_libm_a_CPPFLAGS = $(CPPFLAGS64) $(sysincludes)
 @LIB64_TRUE@lib64_libshell32_a_SOURCES = $(src_libshell32)
@@ -3639,6 +3656,9 @@
 @LIB64_TRUE@lib64_libws2_32_a_CPPFLAGS = $(CPPFLAGS64) $(sysincludes)
 @LIB64_TRUE@lib64_libws2_32_a_AR = $(DTLIB64) && $(AR) $(ARFLAGS)
 @LIB64_TRUE@lib64_libdelayimp_a_SOURCES = 
+@LIB64_TRUE@lib64_libgdiplus_a_SOURCES = $(src_libgdiplus)
+@LIB64_TRUE@lib64_libgdiplus_a_CPPFLAGS = $(CPPFLAGS64) $(sysincludes)
+@LIB64_TRUE@lib64_libgdiplus_a_AR = $(DTLIB64) && $(AR) $(ARFLAGS)
 @LIB64_TRUE@lib64_DATA = \
 @LIB64_TRUE@  lib64/libwinusb.a \
 @LIB64_TRUE@  lib64/lib6to4svc.a    lib64/libaaaamon.a    lib64/libacledit.a      lib64/libaclui.a      \
@@ -4451,6 +4471,12 @@
 	-rm -f lib32/libdxguid.a
 	$(lib32_libdxguid_a_AR) lib32/libdxguid.a $(lib32_libdxguid_a_OBJECTS) $(lib32_libdxguid_a_LIBADD)
 	$(RANLIB) lib32/libdxguid.a
+libsrc/lib32_libgdiplus_a-gdiplus.$(OBJEXT): libsrc/$(am__dirstamp) \
+	libsrc/$(DEPDIR)/$(am__dirstamp)
+lib32/libgdiplus.a: $(lib32_libgdiplus_a_OBJECTS) $(lib32_libgdiplus_a_DEPENDENCIES) lib32/$(am__dirstamp)
+	-rm -f lib32/libgdiplus.a
+	$(lib32_libgdiplus_a_AR) lib32/libgdiplus.a $(lib32_libgdiplus_a_OBJECTS) $(lib32_libgdiplus_a_LIBADD)
+	$(RANLIB) lib32/libgdiplus.a
 profile/$(am__dirstamp):
 	@$(MKDIR_P) profile
 	@: > profile/$(am__dirstamp)
@@ -5916,6 +5942,12 @@
 	-rm -f lib64/libdxguid.a
 	$(lib64_libdxguid_a_AR) lib64/libdxguid.a $(lib64_libdxguid_a_OBJECTS) $(lib64_libdxguid_a_LIBADD)
 	$(RANLIB) lib64/libdxguid.a
+libsrc/lib64_libgdiplus_a-gdiplus.$(OBJEXT): libsrc/$(am__dirstamp) \
+	libsrc/$(DEPDIR)/$(am__dirstamp)
+lib64/libgdiplus.a: $(lib64_libgdiplus_a_OBJECTS) $(lib64_libgdiplus_a_DEPENDENCIES) lib64/$(am__dirstamp)
+	-rm -f lib64/libgdiplus.a
+	$(lib64_libgdiplus_a_AR) lib64/libgdiplus.a $(lib64_libgdiplus_a_OBJECTS) $(lib64_libgdiplus_a_LIBADD)
+	$(RANLIB) lib64/libgdiplus.a
 profile/lib64_libgmon_a-mcount.$(OBJEXT): profile/$(am__dirstamp) \
 	profile/$(DEPDIR)/$(am__dirstamp)
 profile/lib64_libgmon_a-profil.$(OBJEXT): profile/$(am__dirstamp) \
@@ -8520,6 +8552,7 @@
 	-rm -f libsrc/lib32_libdxerr9_a-dxerr9.$(OBJEXT)
 	-rm -f libsrc/lib32_libdxerr9_a-dxerr9w.$(OBJEXT)
 	-rm -f libsrc/lib32_libdxguid_a-dxguid.$(OBJEXT)
+	-rm -f libsrc/lib32_libgdiplus_a-gdiplus.$(OBJEXT)
 	-rm -f libsrc/lib32_libksuser_a-ksuser.$(OBJEXT)
 	-rm -f libsrc/lib32_liblargeint_a-largeint.$(OBJEXT)
 	-rm -f libsrc/lib32_libmingwthrd_a-mingwthrd_mt.$(OBJEXT)
@@ -8599,6 +8632,7 @@
 	-rm -f libsrc/lib64_libdxerr9_a-dxerr9.$(OBJEXT)
 	-rm -f libsrc/lib64_libdxerr9_a-dxerr9w.$(OBJEXT)
 	-rm -f libsrc/lib64_libdxguid_a-dxguid.$(OBJEXT)
+	-rm -f libsrc/lib64_libgdiplus_a-gdiplus.$(OBJEXT)
 	-rm -f libsrc/lib64_libksuser_a-ksuser.$(OBJEXT)
 	-rm -f libsrc/lib64_liblargeint_a-largeint.$(OBJEXT)
 	-rm -f libsrc/lib64_libmingwthrd_a-mingwthrd_mt.$(OBJEXT)
@@ -10028,6 +10062,7 @@
 @AMDEP_TRUE@@am__include@ @am__quote@libsrc/$(DEPDIR)/lib32_libdxerr9_a-dxerr9.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@libsrc/$(DEPDIR)/lib32_libdxerr9_a-dxerr9w.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@libsrc/$(DEPDIR)/lib32_libdxguid_a-dxguid.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@libsrc/$(DEPDIR)/lib32_libgdiplus_a-gdiplus.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@libsrc/$(DEPDIR)/lib32_libksuser_a-ksuser.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@libsrc/$(DEPDIR)/lib32_liblargeint_a-largeint.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@libsrc/$(DEPDIR)/lib32_libmingwthrd_a-mingwthrd_mt.Po@am__quote@
@@ -10107,6 +10142,7 @@
 @AMDEP_TRUE@@am__include@ @am__quote@libsrc/$(DEPDIR)/lib64_libdxerr9_a-dxerr9.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@libsrc/$(DEPDIR)/lib64_libdxerr9_a-dxerr9w.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@libsrc/$(DEPDIR)/lib64_libdxguid_a-dxguid.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@libsrc/$(DEPDIR)/lib64_libgdiplus_a-gdiplus.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@libsrc/$(DEPDIR)/lib64_libksuser_a-ksuser.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@libsrc/$(DEPDIR)/lib64_liblargeint_a-largeint.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@libsrc/$(DEPDIR)/lib64_libmingwthrd_a-mingwthrd_mt.Po@am__quote@
@@ -12453,6 +12489,20 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib32_libdxguid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libsrc/lib32_libdxguid_a-dxguid.obj `if test -f 'libsrc/dxguid.c'; then $(CYGPATH_W) 'libsrc/dxguid.c'; else $(CYGPATH_W) '$(srcdir)/libsrc/dxguid.c'; fi`
 
+libsrc/lib32_libgdiplus_a-gdiplus.o: libsrc/gdiplus.c
+@am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib32_libgdiplus_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libsrc/lib32_libgdiplus_a-gdiplus.o -MD -MP -MF libsrc/$(DEPDIR)/lib32_libgdiplus_a-gdiplus.Tpo -c -o libsrc/lib32_libgdiplus_a-gdiplus.o `test -f 'libsrc/gdiplus.c' || echo '$(srcdir)/'`libsrc/gdiplus.c
+@am__fastdepCC_TRUE@	$(am__mv) libsrc/$(DEPDIR)/lib32_libgdiplus_a-gdiplus.Tpo libsrc/$(DEPDIR)/lib32_libgdiplus_a-gdiplus.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='libsrc/gdiplus.c' object='libsrc/lib32_libgdiplus_a-gdiplus.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib32_libgdiplus_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libsrc/lib32_libgdiplus_a-gdiplus.o `test -f 'libsrc/gdiplus.c' || echo '$(srcdir)/'`libsrc/gdiplus.c
+
+libsrc/lib32_libgdiplus_a-gdiplus.obj: libsrc/gdiplus.c
+@am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib32_libgdiplus_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libsrc/lib32_libgdiplus_a-gdiplus.obj -MD -MP -MF libsrc/$(DEPDIR)/lib32_libgdiplus_a-gdiplus.Tpo -c -o libsrc/lib32_libgdiplus_a-gdiplus.obj `if test -f 'libsrc/gdiplus.c'; then $(CYGPATH_W) 'libsrc/gdiplus.c'; else $(CYGPATH_W) '$(srcdir)/libsrc/gdiplus.c'; fi`
+@am__fastdepCC_TRUE@	$(am__mv) libsrc/$(DEPDIR)/lib32_libgdiplus_a-gdiplus.Tpo libsrc/$(DEPDIR)/lib32_libgdiplus_a-gdiplus.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='libsrc/gdiplus.c' object='libsrc/lib32_libgdiplus_a-gdiplus.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib32_libgdiplus_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libsrc/lib32_libgdiplus_a-gdiplus.obj `if test -f 'libsrc/gdiplus.c'; then $(CYGPATH_W) 'libsrc/gdiplus.c'; else $(CYGPATH_W) '$(srcdir)/libsrc/gdiplus.c'; fi`
+
 profile/lib32_libgmon_a-mcount.o: profile/mcount.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib32_libgmon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT profile/lib32_libgmon_a-mcount.o -MD -MP -MF profile/$(DEPDIR)/lib32_libgmon_a-mcount.Tpo -c -o profile/lib32_libgmon_a-mcount.o `test -f 'profile/mcount.c' || echo '$(srcdir)/'`profile/mcount.c
 @am__fastdepCC_TRUE@	$(am__mv) profile/$(DEPDIR)/lib32_libgmon_a-mcount.Tpo profile/$(DEPDIR)/lib32_libgmon_a-mcount.Po
@@ -20923,6 +20973,20 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib64_libdxguid_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libsrc/lib64_libdxguid_a-dxguid.obj `if test -f 'libsrc/dxguid.c'; then $(CYGPATH_W) 'libsrc/dxguid.c'; else $(CYGPATH_W) '$(srcdir)/libsrc/dxguid.c'; fi`
 
+libsrc/lib64_libgdiplus_a-gdiplus.o: libsrc/gdiplus.c
+@am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib64_libgdiplus_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libsrc/lib64_libgdiplus_a-gdiplus.o -MD -MP -MF libsrc/$(DEPDIR)/lib64_libgdiplus_a-gdiplus.Tpo -c -o libsrc/lib64_libgdiplus_a-gdiplus.o `test -f 'libsrc/gdiplus.c' || echo '$(srcdir)/'`libsrc/gdiplus.c
+@am__fastdepCC_TRUE@	$(am__mv) libsrc/$(DEPDIR)/lib64_libgdiplus_a-gdiplus.Tpo libsrc/$(DEPDIR)/lib64_libgdiplus_a-gdiplus.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='libsrc/gdiplus.c' object='libsrc/lib64_libgdiplus_a-gdiplus.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib64_libgdiplus_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libsrc/lib64_libgdiplus_a-gdiplus.o `test -f 'libsrc/gdiplus.c' || echo '$(srcdir)/'`libsrc/gdiplus.c
+
+libsrc/lib64_libgdiplus_a-gdiplus.obj: libsrc/gdiplus.c
+@am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib64_libgdiplus_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libsrc/lib64_libgdiplus_a-gdiplus.obj -MD -MP -MF libsrc/$(DEPDIR)/lib64_libgdiplus_a-gdiplus.Tpo -c -o libsrc/lib64_libgdiplus_a-gdiplus.obj `if test -f 'libsrc/gdiplus.c'; then $(CYGPATH_W) 'libsrc/gdiplus.c'; else $(CYGPATH_W) '$(srcdir)/libsrc/gdiplus.c'; fi`
+@am__fastdepCC_TRUE@	$(am__mv) libsrc/$(DEPDIR)/lib64_libgdiplus_a-gdiplus.Tpo libsrc/$(DEPDIR)/lib64_libgdiplus_a-gdiplus.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='libsrc/gdiplus.c' object='libsrc/lib64_libgdiplus_a-gdiplus.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib64_libgdiplus_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libsrc/lib64_libgdiplus_a-gdiplus.obj `if test -f 'libsrc/gdiplus.c'; then $(CYGPATH_W) 'libsrc/gdiplus.c'; else $(CYGPATH_W) '$(srcdir)/libsrc/gdiplus.c'; fi`
+
 profile/lib64_libgmon_a-mcount.o: profile/mcount.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib64_libgmon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT profile/lib64_libgmon_a-mcount.o -MD -MP -MF profile/$(DEPDIR)/lib64_libgmon_a-mcount.Tpo -c -o profile/lib64_libgmon_a-mcount.o `test -f 'profile/mcount.c' || echo '$(srcdir)/'`profile/mcount.c
 @am__fastdepCC_TRUE@	$(am__mv) profile/$(DEPDIR)/lib64_libgmon_a-mcount.Tpo profile/$(DEPDIR)/lib64_libgmon_a-mcount.Po
diff --git a/mingw-w64-crt/aclocal.m4 b/mingw-w64-crt/aclocal.m4
index 1ccc7ec..6dd95e1 100644
--- a/mingw-w64-crt/aclocal.m4
+++ b/mingw-w64-crt/aclocal.m4
@@ -13,8 +13,8 @@
 
 m4_ifndef([AC_AUTOCONF_VERSION],
   [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
-m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.67],,
-[m4_warning([this file was generated for autoconf 2.67.
+m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.68],,
+[m4_warning([this file was generated for autoconf 2.68.
 You have another version of autoconf.  It may work, but is not guaranteed to.
 If you have problems, you may need to regenerate the build system entirely.
 To do so, use the procedure documented by the package, typically `autoreconf'.])])
diff --git a/mingw-w64-crt/configure b/mingw-w64-crt/configure
index d5e17cf..d4022c0 100755
--- a/mingw-w64-crt/configure
+++ b/mingw-w64-crt/configure
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.67 for mingw-w64-runtime 3.0b.
+# Generated by GNU Autoconf 2.68 for mingw-w64-runtime 3.0b.
 #
 # Report bugs to <mingw-w64-public@lists.sourceforge.net>.
 #
@@ -91,6 +91,7 @@
 IFS=" ""	$as_nl"
 
 # Find who we are.  Look in the path if we contain no directory separator.
+as_myself=
 case $0 in #((
   *[\\/]* ) as_myself=$0 ;;
   *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -216,11 +217,18 @@
   # We cannot yet assume a decent shell, so we have to provide a
 	# neutralization value for shells without unset; and this also
 	# works around shells that cannot unset nonexistent variables.
+	# Preserve -v and -x to the replacement shell.
 	BASH_ENV=/dev/null
 	ENV=/dev/null
 	(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
 	export CONFIG_SHELL
-	exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"}
+	case $- in # ((((
+	  *v*x* | *x*v* ) as_opts=-vx ;;
+	  *v* ) as_opts=-v ;;
+	  *x* ) as_opts=-x ;;
+	  * ) as_opts= ;;
+	esac
+	exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"}
 fi
 
     if test x$as_have_required = xno; then :
@@ -1162,7 +1170,7 @@
     $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
     expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
       $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
-    : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
+    : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}"
     ;;
 
   esac
@@ -1484,7 +1492,7 @@
 if $ac_init_version; then
   cat <<\_ACEOF
 mingw-w64-runtime configure 3.0b
-generated by GNU Autoconf 2.67
+generated by GNU Autoconf 2.68
 
 Copyright (C) 2010 Free Software Foundation, Inc.
 This configure script is free software; the Free Software Foundation
@@ -1530,7 +1538,7 @@
 
 	ac_retval=1
 fi
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
   as_fn_set_status $ac_retval
 
 } # ac_fn_c_try_compile
@@ -1568,7 +1576,7 @@
 
 	ac_retval=1
 fi
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
   as_fn_set_status $ac_retval
 
 } # ac_fn_cxx_try_compile
@@ -1605,7 +1613,7 @@
 
     ac_retval=1
 fi
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
   as_fn_set_status $ac_retval
 
 } # ac_fn_c_try_cpp
@@ -1618,10 +1626,10 @@
 ac_fn_c_check_header_mongrel ()
 {
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  if eval "test \"\${$3+set}\"" = set; then :
+  if eval \${$3+:} false; then :
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
 $as_echo_n "checking for $2... " >&6; }
-if eval "test \"\${$3+set}\"" = set; then :
+if eval \${$3+:} false; then :
   $as_echo_n "(cached) " >&6
 fi
 eval ac_res=\$$3
@@ -1688,7 +1696,7 @@
 esac
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
 $as_echo_n "checking for $2... " >&6; }
-if eval "test \"\${$3+set}\"" = set; then :
+if eval \${$3+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   eval "$3=\$ac_header_compiler"
@@ -1697,7 +1705,7 @@
 	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
 fi
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
 
 } # ac_fn_c_check_header_mongrel
 
@@ -1738,7 +1746,7 @@
        ac_retval=$ac_status
 fi
   rm -rf conftest.dSYM conftest_ipa8_conftest.oo
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
   as_fn_set_status $ac_retval
 
 } # ac_fn_c_try_run
@@ -1752,7 +1760,7 @@
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
 $as_echo_n "checking for $2... " >&6; }
-if eval "test \"\${$3+set}\"" = set; then :
+if eval \${$3+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -1770,7 +1778,7 @@
 eval ac_res=\$$3
 	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
 
 } # ac_fn_c_check_header_compile
 cat >config.log <<_ACEOF
@@ -1778,7 +1786,7 @@
 running configure, to aid debugging if configure makes a mistake.
 
 It was created by mingw-w64-runtime $as_me 3.0b, which was
-generated by GNU Autoconf 2.67.  Invocation command line was
+generated by GNU Autoconf 2.68.  Invocation command line was
 
   $ $0 $@
 
@@ -2177,7 +2185,7 @@
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
 $as_echo_n "checking for a BSD-compatible install... " >&6; }
 if test -z "$INSTALL"; then
-if test "${ac_cv_path_install+set}" = set; then :
+if ${ac_cv_path_install+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -2354,7 +2362,7 @@
 set dummy ${ac_tool_prefix}strip; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_STRIP+set}" = set; then :
+if ${ac_cv_prog_STRIP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$STRIP"; then
@@ -2394,7 +2402,7 @@
 set dummy strip; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then :
+if ${ac_cv_prog_ac_ct_STRIP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_STRIP"; then
@@ -2447,7 +2455,7 @@
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5
 $as_echo_n "checking for a thread-safe mkdir -p... " >&6; }
 if test -z "$MKDIR_P"; then
-  if test "${ac_cv_path_mkdir+set}" = set; then :
+  if ${ac_cv_path_mkdir+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -2498,7 +2506,7 @@
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_AWK+set}" = set; then :
+if ${ac_cv_prog_AWK+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$AWK"; then
@@ -2538,7 +2546,7 @@
 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
 set x ${MAKE-make}
 ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
-if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\"" = set; then :
+if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat >conftest.make <<\_ACEOF
@@ -2666,7 +2674,7 @@
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
 $as_echo_n "checking build system type... " >&6; }
-if test "${ac_cv_build+set}" = set; then :
+if ${ac_cv_build+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_build_alias=$build_alias
@@ -2700,7 +2708,7 @@
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
 $as_echo_n "checking host system type... " >&6; }
-if test "${ac_cv_host+set}" = set; then :
+if ${ac_cv_host+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test "x$host_alias" = x; then
@@ -2791,7 +2799,7 @@
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5
 $as_echo_n "checking for a sed that does not truncate output... " >&6; }
-if test "${ac_cv_path_SED+set}" = set; then :
+if ${ac_cv_path_SED+:} false; then :
   $as_echo_n "(cached) " >&6
 else
             ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
@@ -2868,7 +2876,7 @@
 set dummy ${ac_tool_prefix}gcc; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then :
+if ${ac_cv_prog_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$CC"; then
@@ -2908,7 +2916,7 @@
 set dummy gcc; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then :
+if ${ac_cv_prog_ac_ct_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_CC"; then
@@ -2961,7 +2969,7 @@
 set dummy ${ac_tool_prefix}cc; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then :
+if ${ac_cv_prog_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$CC"; then
@@ -3001,7 +3009,7 @@
 set dummy cc; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then :
+if ${ac_cv_prog_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$CC"; then
@@ -3060,7 +3068,7 @@
 set dummy $ac_tool_prefix$ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then :
+if ${ac_cv_prog_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$CC"; then
@@ -3104,7 +3112,7 @@
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then :
+if ${ac_cv_prog_ac_ct_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_CC"; then
@@ -3463,7 +3471,7 @@
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
 $as_echo_n "checking for suffix of object files... " >&6; }
-if test "${ac_cv_objext+set}" = set; then :
+if ${ac_cv_objext+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -3514,7 +3522,7 @@
 ac_objext=$OBJEXT
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
-if test "${ac_cv_c_compiler_gnu+set}" = set; then :
+if ${ac_cv_c_compiler_gnu+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -3551,7 +3559,7 @@
 ac_save_CFLAGS=$CFLAGS
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
 $as_echo_n "checking whether $CC accepts -g... " >&6; }
-if test "${ac_cv_prog_cc_g+set}" = set; then :
+if ${ac_cv_prog_cc_g+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_save_c_werror_flag=$ac_c_werror_flag
@@ -3629,7 +3637,7 @@
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
-if test "${ac_cv_prog_cc_c89+set}" = set; then :
+if ${ac_cv_prog_cc_c89+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_cv_prog_cc_c89=no
@@ -3790,7 +3798,7 @@
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
 $as_echo_n "checking dependency style of $depcc... " >&6; }
-if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then :
+if ${am_cv_CC_dependencies_compiler_type+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
@@ -3929,7 +3937,7 @@
 set dummy $ac_tool_prefix$ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CXX+set}" = set; then :
+if ${ac_cv_prog_CXX+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$CXX"; then
@@ -3973,7 +3981,7 @@
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then :
+if ${ac_cv_prog_ac_ct_CXX+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_CXX"; then
@@ -4051,7 +4059,7 @@
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5
 $as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; }
-if test "${ac_cv_cxx_compiler_gnu+set}" = set; then :
+if ${ac_cv_cxx_compiler_gnu+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -4088,7 +4096,7 @@
 ac_save_CXXFLAGS=$CXXFLAGS
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5
 $as_echo_n "checking whether $CXX accepts -g... " >&6; }
-if test "${ac_cv_prog_cxx_g+set}" = set; then :
+if ${ac_cv_prog_cxx_g+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_save_cxx_werror_flag=$ac_cxx_werror_flag
@@ -4174,7 +4182,7 @@
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
 $as_echo_n "checking dependency style of $depcc... " >&6; }
-if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then :
+if ${am_cv_CXX_dependencies_compiler_type+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
@@ -4303,7 +4311,7 @@
 set dummy ${ac_tool_prefix}ranlib; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_RANLIB+set}" = set; then :
+if ${ac_cv_prog_RANLIB+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$RANLIB"; then
@@ -4343,7 +4351,7 @@
 set dummy ranlib; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then :
+if ${ac_cv_prog_ac_ct_RANLIB+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_RANLIB"; then
@@ -4395,7 +4403,7 @@
 set dummy ${ac_tool_prefix}dlltool; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_DLLTOOL+set}" = set; then :
+if ${ac_cv_prog_DLLTOOL+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$DLLTOOL"; then
@@ -4435,7 +4443,7 @@
 set dummy dlltool; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_DLLTOOL+set}" = set; then :
+if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_DLLTOOL"; then
@@ -4493,7 +4501,7 @@
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
 $as_echo_n "checking dependency style of $depcc... " >&6; }
-if test "${am_cv_CCAS_dependencies_compiler_type+set}" = set; then :
+if ${am_cv_CCAS_dependencies_compiler_type+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
@@ -4619,7 +4627,7 @@
 set dummy ${ac_tool_prefix}ar; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_AR+set}" = set; then :
+if ${ac_cv_prog_AR+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$AR"; then
@@ -4659,7 +4667,7 @@
 set dummy ar; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_AR+set}" = set; then :
+if ${ac_cv_prog_ac_ct_AR+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_AR"; then
@@ -4711,7 +4719,7 @@
 set dummy ${ac_tool_prefix}as; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_AS+set}" = set; then :
+if ${ac_cv_prog_AS+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$AS"; then
@@ -4751,7 +4759,7 @@
 set dummy as; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_AS+set}" = set; then :
+if ${ac_cv_prog_ac_ct_AS+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_AS"; then
@@ -4807,7 +4815,7 @@
 fi
 set dummy $CC; ac_cc=`$as_echo "$2" |
 		      sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'`
-if eval "test \"\${ac_cv_prog_cc_${ac_cc}_c_o+set}\"" = set; then :
+if eval \${ac_cv_prog_cc_${ac_cc}_c_o+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -5244,7 +5252,7 @@
   CPP=
 fi
 if test -z "$CPP"; then
-  if test "${ac_cv_prog_CPP+set}" = set; then :
+  if ${ac_cv_prog_CPP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
       # Double quotes because CPP needs to be expanded
@@ -5372,7 +5380,7 @@
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
 $as_echo_n "checking for grep that handles long lines and -e... " >&6; }
-if test "${ac_cv_path_GREP+set}" = set; then :
+if ${ac_cv_path_GREP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -z "$GREP"; then
@@ -5435,7 +5443,7 @@
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
 $as_echo_n "checking for egrep... " >&6; }
-if test "${ac_cv_path_EGREP+set}" = set; then :
+if ${ac_cv_path_EGREP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
@@ -5502,7 +5510,7 @@
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
 $as_echo_n "checking for ANSI C header files... " >&6; }
-if test "${ac_cv_header_stdc+set}" = set; then :
+if ${ac_cv_header_stdc+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -5630,7 +5638,7 @@
 
 
 ac_fn_c_check_header_mongrel "$LINENO" "_mingw_mac.h" "ac_cv_header__mingw_mac_h" "$ac_includes_default"
-if test "x$ac_cv_header__mingw_mac_h" = x""yes; then :
+if test "x$ac_cv_header__mingw_mac_h" = xyes; then :
 
 else
   as_fn_error $? "Please check if the mingw-w64 header set and the build/host option are set properly." "$LINENO" 5
@@ -5758,10 +5766,21 @@
      :end' >>confcache
 if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
   if test -w "$cache_file"; then
-    test "x$cache_file" != "x/dev/null" &&
+    if test "x$cache_file" != "x/dev/null"; then
       { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
 $as_echo "$as_me: updating cache $cache_file" >&6;}
-    cat confcache >$cache_file
+      if test ! -f "$cache_file" || test -h "$cache_file"; then
+	cat confcache >"$cache_file"
+      else
+        case $cache_file in #(
+        */* | ?:*)
+	  mv -f confcache "$cache_file"$$ &&
+	  mv -f "$cache_file"$$ "$cache_file" ;; #(
+        *)
+	  mv -f confcache "$cache_file" ;;
+	esac
+      fi
+    fi
   else
     { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
@@ -5853,7 +5872,7 @@
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
 
-: ${CONFIG_STATUS=./config.status}
+: "${CONFIG_STATUS=./config.status}"
 ac_write_fail=0
 ac_clean_files_save=$ac_clean_files
 ac_clean_files="$ac_clean_files $CONFIG_STATUS"
@@ -5954,6 +5973,7 @@
 IFS=" ""	$as_nl"
 
 # Find who we are.  Look in the path if we contain no directory separator.
+as_myself=
 case $0 in #((
   *[\\/]* ) as_myself=$0 ;;
   *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -6261,7 +6281,7 @@
 # values after options handling.
 ac_log="
 This file was extended by mingw-w64-runtime $as_me 3.0b, which was
-generated by GNU Autoconf 2.67.  Invocation command line was
+generated by GNU Autoconf 2.68.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
   CONFIG_HEADERS  = $CONFIG_HEADERS
@@ -6327,7 +6347,7 @@
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
 mingw-w64-runtime config.status 3.0b
-configured by $0, generated by GNU Autoconf 2.67,
+configured by $0, generated by GNU Autoconf 2.68,
   with options \\"\$ac_cs_config\\"
 
 Copyright (C) 2010 Free Software Foundation, Inc.
@@ -6482,9 +6502,10 @@
 # after its creation but before its name has been assigned to `$tmp'.
 $debug ||
 {
-  tmp=
+  tmp= ac_tmp=
   trap 'exit_status=$?
-  { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status
+  : "${ac_tmp:=$tmp}"
+  { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status
 ' 0
   trap 'as_fn_exit 1' 1 2 13 15
 }
@@ -6492,12 +6513,13 @@
 
 {
   tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
-  test -n "$tmp" && test -d "$tmp"
+  test -d "$tmp"
 }  ||
 {
   tmp=./conf$$-$RANDOM
   (umask 077 && mkdir "$tmp")
 } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5
+ac_tmp=$tmp
 
 # Set up the scripts for CONFIG_FILES section.
 # No need to generate them if there are no CONFIG_FILES.
@@ -6519,7 +6541,7 @@
   ac_cs_awk_cr=$ac_cr
 fi
 
-echo 'BEGIN {' >"$tmp/subs1.awk" &&
+echo 'BEGIN {' >"$ac_tmp/subs1.awk" &&
 _ACEOF
 
 
@@ -6547,7 +6569,7 @@
 rm -f conf$$subs.sh
 
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-cat >>"\$tmp/subs1.awk" <<\\_ACAWK &&
+cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK &&
 _ACEOF
 sed -n '
 h
@@ -6595,7 +6617,7 @@
 rm -f conf$$subs.awk
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 _ACAWK
-cat >>"\$tmp/subs1.awk" <<_ACAWK &&
+cat >>"\$ac_tmp/subs1.awk" <<_ACAWK &&
   for (key in S) S_is_set[key] = 1
   FS = ""
 
@@ -6627,7 +6649,7 @@
   sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
 else
   cat
-fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \
+fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \
   || as_fn_error $? "could not setup config files machinery" "$LINENO" 5
 _ACEOF
 
@@ -6661,7 +6683,7 @@
 # No need to generate them if there are no CONFIG_HEADERS.
 # This happens for instance with `./config.status Makefile'.
 if test -n "$CONFIG_HEADERS"; then
-cat >"$tmp/defines.awk" <<\_ACAWK ||
+cat >"$ac_tmp/defines.awk" <<\_ACAWK ||
 BEGIN {
 _ACEOF
 
@@ -6673,8 +6695,8 @@
 # handling of long lines.
 ac_delim='%!_!# '
 for ac_last_try in false false :; do
-  ac_t=`sed -n "/$ac_delim/p" confdefs.h`
-  if test -z "$ac_t"; then
+  ac_tt=`sed -n "/$ac_delim/p" confdefs.h`
+  if test -z "$ac_tt"; then
     break
   elif $ac_last_try; then
     as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5
@@ -6794,7 +6816,7 @@
     for ac_f
     do
       case $ac_f in
-      -) ac_f="$tmp/stdin";;
+      -) ac_f="$ac_tmp/stdin";;
       *) # Look for the file first in the build tree, then in the source tree
 	 # (if the path is not absolute).  The absolute path cannot be DOS-style,
 	 # because $ac_f cannot contain `:'.
@@ -6829,7 +6851,7 @@
     esac
 
     case $ac_tag in
-    *:-:* | *:-) cat >"$tmp/stdin" \
+    *:-:* | *:-) cat >"$ac_tmp/stdin" \
       || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;;
     esac
     ;;
@@ -6966,21 +6988,22 @@
 s&@MKDIR_P@&$ac_MKDIR_P&;t t
 $ac_datarootdir_hack
 "
-eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \
-  || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \
+  >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5
 
 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
-  { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } &&
-  { ac_out=`sed -n '/^[	 ]*datarootdir[	 ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } &&
+  { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
+  { ac_out=`sed -n '/^[	 ]*datarootdir[	 ]*:*=/p' \
+      "$ac_tmp/out"`; test -z "$ac_out"; } &&
   { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
 which seems to be undefined.  Please make sure it is defined" >&5
 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
 which seems to be undefined.  Please make sure it is defined" >&2;}
 
-  rm -f "$tmp/stdin"
+  rm -f "$ac_tmp/stdin"
   case $ac_file in
-  -) cat "$tmp/out" && rm -f "$tmp/out";;
-  *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";;
+  -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";;
+  *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";;
   esac \
   || as_fn_error $? "could not create $ac_file" "$LINENO" 5
  ;;
@@ -6991,20 +7014,20 @@
   if test x"$ac_file" != x-; then
     {
       $as_echo "/* $configure_input  */" \
-      && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs"
-    } >"$tmp/config.h" \
+      && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs"
+    } >"$ac_tmp/config.h" \
       || as_fn_error $? "could not create $ac_file" "$LINENO" 5
-    if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then
+    if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then
       { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5
 $as_echo "$as_me: $ac_file is unchanged" >&6;}
     else
       rm -f "$ac_file"
-      mv "$tmp/config.h" "$ac_file" \
+      mv "$ac_tmp/config.h" "$ac_file" \
 	|| as_fn_error $? "could not create $ac_file" "$LINENO" 5
     fi
   else
     $as_echo "/* $configure_input  */" \
-      && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \
+      && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \
       || as_fn_error $? "could not create -" "$LINENO" 5
   fi
 # Compute "$ac_file"'s index in $config_headers.
diff --git a/mingw-w64-crt/lib32/gdiplus.def b/mingw-w64-crt/lib32/gdiplus.def
new file mode 100644
index 0000000..06fb38b
--- /dev/null
+++ b/mingw-w64-crt/lib32/gdiplus.def
@@ -0,0 +1,616 @@
+;
+; Definition file of gdiplus.dll
+; Automatic generated by gendef
+; written by Kai Tietz 2008
+;
+LIBRARY "gdiplus.dll"
+EXPORTS
+GdipAddPathArc@28
+GdipAddPathArcI@28
+GdipAddPathBezier@36
+GdipAddPathBezierI@36
+GdipAddPathBeziers@12
+GdipAddPathBeziersI@12
+GdipAddPathClosedCurve2@16
+GdipAddPathClosedCurve2I@16
+GdipAddPathClosedCurve@12
+GdipAddPathClosedCurveI@12
+GdipAddPathCurve2@16
+GdipAddPathCurve2I@16
+GdipAddPathCurve3@24
+GdipAddPathCurve3I@24
+GdipAddPathCurve@12
+GdipAddPathCurveI@12
+GdipAddPathEllipse@20
+GdipAddPathEllipseI@20
+GdipAddPathLine2@12
+GdipAddPathLine2I@12
+GdipAddPathLine@20
+GdipAddPathLineI@20
+GdipAddPathPath@12
+GdipAddPathPie@28
+GdipAddPathPieI@28
+GdipAddPathPolygon@12
+GdipAddPathPolygonI@12
+GdipAddPathRectangle@20
+GdipAddPathRectangleI@20
+GdipAddPathRectangles@12
+GdipAddPathRectanglesI@12
+GdipAddPathString@32
+GdipAddPathStringI@32
+GdipAlloc@4
+GdipBeginContainer2@8
+GdipBeginContainer@20
+GdipBeginContainerI@20
+GdipBitmapGetPixel@16
+GdipBitmapLockBits@20
+GdipBitmapSetPixel@16
+GdipBitmapSetResolution@12
+GdipBitmapUnlockBits@8
+GdipClearPathMarkers@4
+GdipCloneBitmapArea@28
+GdipCloneBitmapAreaI@28
+GdipCloneBrush@8
+GdipCloneCustomLineCap@8
+GdipCloneFont@8
+GdipCloneFontFamily@8
+GdipCloneImage@8
+GdipCloneImageAttributes@8
+GdipCloneMatrix@8
+GdipClonePath@8
+GdipClonePen@8
+GdipCloneRegion@8
+GdipCloneStringFormat@8
+GdipClosePathFigure@4
+GdipClosePathFigures@4
+GdipCombineRegionPath@12
+GdipCombineRegionRect@12
+GdipCombineRegionRectI@12
+GdipCombineRegionRegion@12
+GdipComment@12
+GdipCreateAdjustableArrowCap@16
+GdipCreateBitmapFromDirectDrawSurface@8
+GdipCreateBitmapFromFile@8
+GdipCreateBitmapFromFileICM@8
+GdipCreateBitmapFromGdiDib@12
+GdipCreateBitmapFromGraphics@16
+GdipCreateBitmapFromHBITMAP@12
+GdipCreateBitmapFromHICON@8
+GdipCreateBitmapFromResource@12
+GdipCreateBitmapFromScan0@24
+GdipCreateBitmapFromStream@8
+GdipCreateBitmapFromStreamICM@8
+GdipCreateCachedBitmap@12
+GdipCreateCustomLineCap@20
+GdipCreateFont@20
+GdipCreateFontFamilyFromName@12
+GdipCreateFontFromDC@8
+GdipCreateFontFromLogfontA@12
+GdipCreateFontFromLogfontW@12
+GdipCreateFromHDC2@12
+GdipCreateFromHDC@8
+GdipCreateFromHWND@8
+GdipCreateFromHWNDICM@8
+GdipCreateHBITMAPFromBitmap@12
+GdipCreateHICONFromBitmap@8
+GdipCreateHalftonePalette@0
+GdipCreateHatchBrush@16
+GdipCreateImageAttributes@4
+GdipCreateLineBrush@24
+GdipCreateLineBrushFromRect@24
+GdipCreateLineBrushFromRectI@24
+GdipCreateLineBrushFromRectWithAngle@28
+GdipCreateLineBrushFromRectWithAngleI@28
+GdipCreateLineBrushI@24
+GdipCreateMatrix2@28
+GdipCreateMatrix3@12
+GdipCreateMatrix3I@12
+GdipCreateMatrix@4
+GdipCreateMetafileFromEmf@12
+GdipCreateMetafileFromFile@8
+GdipCreateMetafileFromStream@8
+GdipCreateMetafileFromWmf@16
+GdipCreateMetafileFromWmfFile@12
+GdipCreatePath2@20
+GdipCreatePath2I@20
+GdipCreatePath@8
+GdipCreatePathGradient@16
+GdipCreatePathGradientFromPath@8
+GdipCreatePathGradientI@16
+GdipCreatePathIter@8
+GdipCreatePen1@16
+GdipCreatePen2@16
+GdipCreateRegion@4
+GdipCreateRegionHrgn@8
+GdipCreateRegionPath@8
+GdipCreateRegionRect@8
+GdipCreateRegionRectI@8
+GdipCreateRegionRgnData@12
+GdipCreateSolidFill@8
+GdipCreateStreamOnFile@12
+GdipCreateStringFormat@12
+GdipCreateTexture2@28
+GdipCreateTexture2I@28
+GdipCreateTexture@12
+GdipCreateTextureIA@28
+GdipCreateTextureIAI@28
+GdipDeleteBrush@4
+GdipDeleteCachedBitmap@4
+GdipDeleteCustomLineCap@4
+GdipDeleteFont@4
+GdipDeleteFontFamily@4
+GdipDeleteGraphics@4
+GdipDeleteMatrix@4
+GdipDeletePath@4
+GdipDeletePathIter@4
+GdipDeletePen@4
+GdipDeletePrivateFontCollection@4
+GdipDeleteRegion@4
+GdipDeleteStringFormat@4
+GdipDisposeImage@4
+GdipDisposeImageAttributes@4
+GdipDrawArc@32
+GdipDrawArcI@32
+GdipDrawBezier@40
+GdipDrawBezierI@40
+GdipDrawBeziers@16
+GdipDrawBeziersI@16
+GdipDrawCachedBitmap@16
+GdipDrawClosedCurve2@20
+GdipDrawClosedCurve2I@20
+GdipDrawClosedCurve@16
+GdipDrawClosedCurveI@16
+GdipDrawCurve2@20
+GdipDrawCurve2I@20
+GdipDrawCurve3@28
+GdipDrawCurve3I@28
+GdipDrawCurve@16
+GdipDrawCurveI@16
+GdipDrawDriverString@32
+GdipDrawEllipse@24
+GdipDrawEllipseI@24
+GdipDrawImage@16
+GdipDrawImageI@16
+GdipDrawImagePointRect@36
+GdipDrawImagePointRectI@36
+GdipDrawImagePoints@16
+GdipDrawImagePointsI@16
+GdipDrawImagePointsRect@48
+GdipDrawImagePointsRectI@48
+GdipDrawImageRect@24
+GdipDrawImageRectI@24
+GdipDrawImageRectRect@56
+GdipDrawImageRectRectI@56
+GdipDrawLine@24
+GdipDrawLineI@24
+GdipDrawLines@16
+GdipDrawLinesI@16
+GdipDrawPath@12
+GdipDrawPie@32
+GdipDrawPieI@32
+GdipDrawPolygon@16
+GdipDrawPolygonI@16
+GdipDrawRectangle@24
+GdipDrawRectangleI@24
+GdipDrawRectangles@16
+GdipDrawRectanglesI@16
+GdipDrawString@28
+GdipEmfToWmfBits@20
+GdipEndContainer@8
+GdipEnumerateMetafileDestPoint@24
+GdipEnumerateMetafileDestPointI@24
+GdipEnumerateMetafileDestPoints@28
+GdipEnumerateMetafileDestPointsI@28
+GdipEnumerateMetafileDestRect@24
+GdipEnumerateMetafileDestRectI@24
+GdipEnumerateMetafileSrcRectDestPoint@32
+GdipEnumerateMetafileSrcRectDestPointI@32
+GdipEnumerateMetafileSrcRectDestPoints@36
+GdipEnumerateMetafileSrcRectDestPointsI@36
+GdipEnumerateMetafileSrcRectDestRect@32
+GdipEnumerateMetafileSrcRectDestRectI@32
+GdipFillClosedCurve2@24
+GdipFillClosedCurve2I@24
+GdipFillClosedCurve@16
+GdipFillClosedCurveI@16
+GdipFillEllipse@24
+GdipFillEllipseI@24
+GdipFillPath@12
+GdipFillPie@32
+GdipFillPieI@32
+GdipFillPolygon2@16
+GdipFillPolygon2I@16
+GdipFillPolygon@20
+GdipFillPolygonI@20
+GdipFillRectangle@24
+GdipFillRectangleI@24
+GdipFillRectangles@16
+GdipFillRectanglesI@16
+GdipFillRegion@12
+GdipFlattenPath@12
+GdipFlush@8
+GdipFree@4
+GdipGetAdjustableArrowCapFillState@8
+GdipGetAdjustableArrowCapHeight@8
+GdipGetAdjustableArrowCapMiddleInset@8
+GdipGetAdjustableArrowCapWidth@8
+GdipGetAllPropertyItems@16
+GdipGetBrushType@8
+GdipGetCellAscent@12
+GdipGetCellDescent@12
+GdipGetClip@8
+GdipGetClipBounds@8
+GdipGetClipBoundsI@8
+GdipGetCompositingMode@8
+GdipGetCompositingQuality@8
+GdipGetCustomLineCapBaseCap@8
+GdipGetCustomLineCapBaseInset@8
+GdipGetCustomLineCapStrokeCaps@12
+GdipGetCustomLineCapStrokeJoin@8
+GdipGetCustomLineCapType@8
+GdipGetCustomLineCapWidthScale@8
+GdipGetDC@8
+GdipGetDpiX@8
+GdipGetDpiY@8
+GdipGetEmHeight@12
+GdipGetEncoderParameterList@16
+GdipGetEncoderParameterListSize@12
+GdipGetFamily@8
+GdipGetFamilyName@12
+GdipGetFontCollectionFamilyCount@8
+GdipGetFontCollectionFamilyList@16
+GdipGetFontHeight@12
+GdipGetFontHeightGivenDPI@12
+GdipGetFontSize@8
+GdipGetFontStyle@8
+GdipGetFontUnit@8
+GdipGetGenericFontFamilyMonospace@4
+GdipGetGenericFontFamilySansSerif@4
+GdipGetGenericFontFamilySerif@4
+GdipGetHatchBackgroundColor@8
+GdipGetHatchForegroundColor@8
+GdipGetHatchStyle@8
+GdipGetHemfFromMetafile@8
+GdipGetImageAttributesAdjustedPalette@12
+GdipGetImageBounds@12
+GdipGetImageDecoders@12
+GdipGetImageDecodersSize@8
+GdipGetImageDimension@12
+GdipGetImageEncoders@12
+GdipGetImageEncodersSize@8
+GdipGetImageFlags@8
+GdipGetImageGraphicsContext@8
+GdipGetImageHeight@8
+GdipGetImageHorizontalResolution@8
+GdipGetImagePalette@12
+GdipGetImagePaletteSize@8
+GdipGetImagePixelFormat@8
+GdipGetImageRawFormat@8
+GdipGetImageThumbnail@24
+GdipGetImageType@8
+GdipGetImageVerticalResolution@8
+GdipGetImageWidth@8
+GdipGetInterpolationMode@8
+GdipGetLineBlend@16
+GdipGetLineBlendCount@8
+GdipGetLineColors@8
+GdipGetLineGammaCorrection@8
+GdipGetLinePresetBlend@16
+GdipGetLinePresetBlendCount@8
+GdipGetLineRect@8
+GdipGetLineRectI@8
+GdipGetLineSpacing@12
+GdipGetLineTransform@8
+GdipGetLineWrapMode@8
+GdipGetLogFontA@12
+GdipGetLogFontW@12
+GdipGetMatrixElements@8
+GdipGetMetafileDownLevelRasterizationLimit@8
+GdipGetMetafileHeaderFromEmf@8
+GdipGetMetafileHeaderFromFile@8
+GdipGetMetafileHeaderFromMetafile@8
+GdipGetMetafileHeaderFromStream@8
+GdipGetMetafileHeaderFromWmf@12
+GdipGetNearestColor@8
+GdipGetPageScale@8
+GdipGetPageUnit@8
+GdipGetPathData@8
+GdipGetPathFillMode@8
+GdipGetPathGradientBlend@16
+GdipGetPathGradientBlendCount@8
+GdipGetPathGradientCenterColor@8
+GdipGetPathGradientCenterPoint@8
+GdipGetPathGradientCenterPointI@8
+GdipGetPathGradientFocusScales@12
+GdipGetPathGradientGammaCorrection@8
+GdipGetPathGradientPath@8
+GdipGetPathGradientPointCount@8
+GdipGetPathGradientPresetBlend@16
+GdipGetPathGradientPresetBlendCount@8
+GdipGetPathGradientRect@8
+GdipGetPathGradientRectI@8
+GdipGetPathGradientSurroundColorCount@8
+GdipGetPathGradientSurroundColorsWithCount@12
+GdipGetPathGradientTransform@8
+GdipGetPathGradientWrapMode@8
+GdipGetPathLastPoint@8
+GdipGetPathPoints@12
+GdipGetPathPointsI@12
+GdipGetPathTypes@12
+GdipGetPathWorldBounds@16
+GdipGetPathWorldBoundsI@16
+GdipGetPenBrushFill@8
+GdipGetPenColor@8
+GdipGetPenCompoundArray@12
+GdipGetPenCompoundCount@8
+GdipGetPenCustomEndCap@8
+GdipGetPenCustomStartCap@8
+GdipGetPenDashArray@12
+GdipGetPenDashCap197819@8
+GdipGetPenDashCount@8
+GdipGetPenDashOffset@8
+GdipGetPenDashStyle@8
+GdipGetPenEndCap@8
+GdipGetPenFillType@8
+GdipGetPenLineJoin@8
+GdipGetPenMiterLimit@8
+GdipGetPenMode@8
+GdipGetPenStartCap@8
+GdipGetPenTransform@8
+GdipGetPenUnit@8
+GdipGetPenWidth@8
+GdipGetPixelOffsetMode@8
+GdipGetPointCount@8
+GdipGetPropertyCount@8
+GdipGetPropertyIdList@12
+GdipGetPropertyItem@16
+GdipGetPropertyItemSize@12
+GdipGetPropertySize@12
+GdipGetRegionBounds@12
+GdipGetRegionBoundsI@12
+GdipGetRegionData@16
+GdipGetRegionDataSize@8
+GdipGetRegionHRgn@12
+GdipGetRegionScans@16
+GdipGetRegionScansCount@12
+GdipGetRegionScansI@16
+GdipGetRenderingOrigin@12
+GdipGetSmoothingMode@8
+GdipGetSolidFillColor@8
+GdipGetStringFormatAlign@8
+GdipGetStringFormatDigitSubstitution@12
+GdipGetStringFormatFlags@8
+GdipGetStringFormatHotkeyPrefix@8
+GdipGetStringFormatLineAlign@8
+GdipGetStringFormatMeasurableCharacterRangeCount@8
+GdipGetStringFormatTabStopCount@8
+GdipGetStringFormatTabStops@16
+GdipGetStringFormatTrimming@8
+GdipGetTextContrast@8
+GdipGetTextRenderingHint@8
+GdipGetTextureImage@8
+GdipGetTextureTransform@8
+GdipGetTextureWrapMode@8
+GdipGetVisibleClipBounds@8
+GdipGetVisibleClipBoundsI@8
+GdipGetWorldTransform@8
+GdipGraphicsClear@8
+GdipImageForceValidation@4
+GdipImageGetFrameCount@12
+GdipImageGetFrameDimensionsCount@8
+GdipImageGetFrameDimensionsList@12
+GdipImageRotateFlip@8
+GdipImageSelectActiveFrame@12
+GdipInvertMatrix@4
+GdipIsClipEmpty@8
+GdipIsEmptyRegion@12
+GdipIsEqualRegion@16
+GdipIsInfiniteRegion@12
+GdipIsMatrixEqual@12
+GdipIsMatrixIdentity@8
+GdipIsMatrixInvertible@8
+GdipIsOutlineVisiblePathPoint@24
+GdipIsOutlineVisiblePathPointI@24
+GdipIsStyleAvailable@12
+GdipIsVisibleClipEmpty@8
+GdipIsVisiblePathPoint@20
+GdipIsVisiblePathPointI@20
+GdipIsVisiblePoint@16
+GdipIsVisiblePointI@16
+GdipIsVisibleRect@24
+GdipIsVisibleRectI@24
+GdipIsVisibleRegionPoint@20
+GdipIsVisibleRegionPointI@20
+GdipIsVisibleRegionRect@28
+GdipIsVisibleRegionRectI@28
+GdipLoadImageFromFile@8
+GdipLoadImageFromFileICM@8
+GdipLoadImageFromStream@8
+GdipLoadImageFromStreamICM@8
+GdipMeasureCharacterRanges@32
+GdipMeasureDriverString@32
+GdipMeasureString@36
+GdipMultiplyLineTransform@12
+GdipMultiplyMatrix@12
+GdipMultiplyPathGradientTransform@12
+GdipMultiplyPenTransform@12
+GdipMultiplyTextureTransform@12
+GdipMultiplyWorldTransform@12
+GdipNewInstalledFontCollection@4
+GdipNewPrivateFontCollection@4
+GdipPathIterCopyData@24
+GdipPathIterEnumerate@20
+GdipPathIterGetCount@8
+GdipPathIterGetSubpathCount@8
+GdipPathIterHasCurve@8
+GdipPathIterIsValid@8
+GdipPathIterNextMarker@16
+GdipPathIterNextMarkerPath@12
+GdipPathIterNextPathType@20
+GdipPathIterNextSubpath@20
+GdipPathIterNextSubpathPath@16
+GdipPathIterRewind@4
+GdipPlayMetafileRecord@20
+GdipPrivateAddFontFile@8
+GdipPrivateAddMemoryFont@12
+GdipRecordMetafile@24
+GdipRecordMetafileFileName@28
+GdipRecordMetafileFileNameI@28
+GdipRecordMetafileI@24
+GdipRecordMetafileStream@28
+GdipRecordMetafileStreamI@28
+GdipReleaseDC@8
+GdipRemovePropertyItem@8
+GdipResetClip@4
+GdipResetImageAttributes@8
+GdipResetLineTransform@4
+GdipResetPageTransform@4
+GdipResetPath@4
+GdipResetPathGradientTransform@4
+GdipResetPenTransform@4
+GdipResetTextureTransform@4
+GdipResetWorldTransform@4
+GdipRestoreGraphics@8
+GdipReversePath@4
+GdipRotateLineTransform@12
+GdipRotateMatrix@12
+GdipRotatePathGradientTransform@12
+GdipRotatePenTransform@12
+GdipRotateTextureTransform@12
+GdipRotateWorldTransform@12
+GdipSaveAdd@8
+GdipSaveAddImage@12
+GdipSaveGraphics@8
+GdipSaveImageToFile@16
+GdipSaveImageToStream@16
+GdipScaleLineTransform@16
+GdipScaleMatrix@16
+GdipScalePathGradientTransform@16
+GdipScalePenTransform@16
+GdipScaleTextureTransform@16
+GdipScaleWorldTransform@16
+GdipSetAdjustableArrowCapFillState@8
+GdipSetAdjustableArrowCapHeight@8
+GdipSetAdjustableArrowCapMiddleInset@8
+GdipSetAdjustableArrowCapWidth@8
+GdipSetClipGraphics@12
+GdipSetClipHrgn@12
+GdipSetClipPath@12
+GdipSetClipRect@24
+GdipSetClipRectI@24
+GdipSetClipRegion@12
+GdipSetCompositingMode@8
+GdipSetCompositingQuality@8
+GdipSetCustomLineCapBaseCap@8
+GdipSetCustomLineCapBaseInset@8
+GdipSetCustomLineCapStrokeCaps@12
+GdipSetCustomLineCapStrokeJoin@8
+GdipSetCustomLineCapWidthScale@8
+GdipSetEmpty@4
+GdipSetImageAttributesCachedBackground@8
+GdipSetImageAttributesColorKeys@20
+GdipSetImageAttributesColorMatrix@24
+GdipSetImageAttributesGamma@16
+GdipSetImageAttributesNoOp@12
+GdipSetImageAttributesOutputChannel@16
+GdipSetImageAttributesOutputChannelColorProfile@16
+GdipSetImageAttributesRemapTable@20
+GdipSetImageAttributesThreshold@16
+GdipSetImageAttributesToIdentity@8
+GdipSetImageAttributesWrapMode@16
+GdipSetImagePalette@8
+GdipSetInfinite@4
+GdipSetInterpolationMode@8
+GdipSetLineBlend@16
+GdipSetLineColors@12
+GdipSetLineGammaCorrection@8
+GdipSetLineLinearBlend@12
+GdipSetLinePresetBlend@16
+GdipSetLineSigmaBlend@12
+GdipSetLineTransform@8
+GdipSetLineWrapMode@8
+GdipSetMatrixElements@28
+GdipSetMetafileDownLevelRasterizationLimit@8
+GdipSetPageScale@8
+GdipSetPageUnit@8
+GdipSetPathFillMode@8
+GdipSetPathGradientBlend@16
+GdipSetPathGradientCenterColor@8
+GdipSetPathGradientCenterPoint@8
+GdipSetPathGradientCenterPointI@8
+GdipSetPathGradientFocusScales@12
+GdipSetPathGradientGammaCorrection@8
+GdipSetPathGradientLinearBlend@12
+GdipSetPathGradientPath@8
+GdipSetPathGradientPresetBlend@16
+GdipSetPathGradientSigmaBlend@12
+GdipSetPathGradientSurroundColorsWithCount@12
+GdipSetPathGradientTransform@8
+GdipSetPathGradientWrapMode@8
+GdipSetPathMarker@4
+GdipSetPenBrushFill@8
+GdipSetPenColor@8
+GdipSetPenCompoundArray@12
+GdipSetPenCustomEndCap@8
+GdipSetPenCustomStartCap@8
+GdipSetPenDashArray@12
+GdipSetPenDashCap197819@8
+GdipSetPenDashOffset@8
+GdipSetPenDashStyle@8
+GdipSetPenEndCap@8
+GdipSetPenLineCap197819@16
+GdipSetPenLineJoin@8
+GdipSetPenMiterLimit@8
+GdipSetPenMode@8
+GdipSetPenStartCap@8
+GdipSetPenTransform@8
+GdipSetPenUnit@8
+GdipSetPenWidth@8
+GdipSetPixelOffsetMode@8
+GdipSetPropertyItem@8
+GdipSetRenderingOrigin@12
+GdipSetSmoothingMode@8
+GdipSetSolidFillColor@8
+GdipSetStringFormatAlign@8
+GdipSetStringFormatDigitSubstitution@12
+GdipSetStringFormatFlags@8
+GdipSetStringFormatHotkeyPrefix@8
+GdipSetStringFormatLineAlign@8
+GdipSetStringFormatMeasurableCharacterRanges@12
+GdipSetStringFormatTabStops@16
+GdipSetStringFormatTrimming@8
+GdipSetTextContrast@8
+GdipSetTextRenderingHint@8
+GdipSetTextureTransform@8
+GdipSetTextureWrapMode@8
+GdipSetWorldTransform@8
+GdipShearMatrix@16
+GdipStartPathFigure@4
+GdipStringFormatGetGenericDefault@4
+GdipStringFormatGetGenericTypographic@4
+GdipTestControl@8
+GdipTransformMatrixPoints@12
+GdipTransformMatrixPointsI@12
+GdipTransformPath@8
+GdipTransformPoints@20
+GdipTransformPointsI@20
+GdipTransformRegion@8
+GdipTranslateClip@12
+GdipTranslateClipI@12
+GdipTranslateLineTransform@16
+GdipTranslateMatrix@16
+GdipTranslatePathGradientTransform@16
+GdipTranslatePenTransform@16
+GdipTranslateRegion@12
+GdipTranslateRegionI@12
+GdipTranslateTextureTransform@16
+GdipTranslateWorldTransform@16
+GdipVectorTransformMatrixPoints@12
+GdipVectorTransformMatrixPointsI@12
+GdipWarpPath@40
+GdipWidenPath@16
+GdipWindingModeOutline@12
+GdiplusNotificationHook@4
+GdiplusNotificationUnhook@4
+GdiplusShutdown@4
+GdiplusStartup@12
diff --git a/mingw-w64-crt/lib64/gdiplus.def b/mingw-w64-crt/lib64/gdiplus.def
new file mode 100644
index 0000000..dbc82c6
--- /dev/null
+++ b/mingw-w64-crt/lib64/gdiplus.def
@@ -0,0 +1,637 @@
+;
+; Definition file of gdiplus.dll
+; Automatic generated by gendef
+; written by Kai Tietz 2008
+;
+LIBRARY "gdiplus.dll"
+EXPORTS
+GdipAddPathArc
+GdipAddPathArcI
+GdipAddPathBezier
+GdipAddPathBezierI
+GdipAddPathBeziers
+GdipAddPathBeziersI
+GdipAddPathClosedCurve
+GdipAddPathClosedCurve2
+GdipAddPathClosedCurve2I
+GdipAddPathClosedCurveI
+GdipAddPathCurve
+GdipAddPathCurve2
+GdipAddPathCurve2I
+GdipAddPathCurve3
+GdipAddPathCurve3I
+GdipAddPathCurveI
+GdipAddPathEllipse
+GdipAddPathEllipseI
+GdipAddPathLine
+GdipAddPathLine2
+GdipAddPathLine2I
+GdipAddPathLineI
+GdipAddPathPath
+GdipAddPathPie
+GdipAddPathPieI
+GdipAddPathPolygon
+GdipAddPathPolygonI
+GdipAddPathRectangle
+GdipAddPathRectangleI
+GdipAddPathRectangles
+GdipAddPathRectanglesI
+GdipAddPathString
+GdipAddPathStringI
+GdipAlloc
+GdipBeginContainer
+GdipBeginContainer2
+GdipBeginContainerI
+GdipBitmapGetPixel
+GdipBitmapLockBits
+GdipBitmapSetPixel
+GdipBitmapSetResolution
+GdipBitmapUnlockBits
+GdipClearPathMarkers
+GdipCloneBitmapArea
+GdipCloneBitmapAreaI
+GdipCloneBrush
+GdipCloneCustomLineCap
+GdipCloneFont
+GdipCloneFontFamily
+GdipCloneImage
+GdipCloneImageAttributes
+GdipCloneMatrix
+GdipClonePath
+GdipClonePen
+GdipCloneRegion
+GdipCloneStringFormat
+GdipClosePathFigure
+GdipClosePathFigures
+GdipCombineRegionPath
+GdipCombineRegionRect
+GdipCombineRegionRectI
+GdipCombineRegionRegion
+GdipComment
+GdipCreateAdjustableArrowCap
+GdipCreateBitmapFromDirectDrawSurface
+GdipCreateBitmapFromFile
+GdipCreateBitmapFromFileICM
+GdipCreateBitmapFromGdiDib
+GdipCreateBitmapFromGraphics
+GdipCreateBitmapFromHBITMAP
+GdipCreateBitmapFromHICON
+GdipCreateBitmapFromResource
+GdipCreateBitmapFromScan0
+GdipCreateBitmapFromStream
+GdipCreateBitmapFromStreamICM
+GdipCreateCachedBitmap
+GdipCreateCustomLineCap
+GdipCreateFont
+GdipCreateFontFamilyFromName
+GdipCreateFontFromDC
+GdipCreateFontFromLogfontA
+GdipCreateFontFromLogfontW
+GdipCreateFromHDC
+GdipCreateFromHDC2
+GdipCreateFromHWND
+GdipCreateFromHWNDICM
+GdipCreateHBITMAPFromBitmap
+GdipCreateHICONFromBitmap
+GdipCreateHalftonePalette
+GdipCreateHatchBrush
+GdipCreateImageAttributes
+GdipCreateLineBrush
+GdipCreateLineBrushFromRect
+GdipCreateLineBrushFromRectI
+GdipCreateLineBrushFromRectWithAngle
+GdipCreateLineBrushFromRectWithAngleI
+GdipCreateLineBrushI
+GdipCreateMatrix
+GdipCreateMatrix2
+GdipCreateMatrix3
+GdipCreateMatrix3I
+GdipCreateMetafileFromEmf
+GdipCreateMetafileFromFile
+GdipCreateMetafileFromStream
+GdipCreateMetafileFromWmf
+GdipCreateMetafileFromWmfFile
+GdipCreatePath
+GdipCreatePath2
+GdipCreatePath2I
+GdipCreatePathGradient
+GdipCreatePathGradientFromPath
+GdipCreatePathGradientI
+GdipCreatePathIter
+GdipCreatePen1
+GdipCreatePen2
+GdipCreateRegion
+GdipCreateRegionHrgn
+GdipCreateRegionPath
+GdipCreateRegionRect
+GdipCreateRegionRectI
+GdipCreateRegionRgnData
+GdipCreateSolidFill
+GdipCreateStreamOnFile
+GdipCreateStringFormat
+GdipCreateTexture
+GdipCreateTexture2
+GdipCreateTexture2I
+GdipCreateTextureIA
+GdipCreateTextureIAI
+GdipDeleteBrush
+GdipDeleteCachedBitmap
+GdipDeleteCustomLineCap
+GdipDeleteFont
+GdipDeleteFontFamily
+GdipDeleteGraphics
+GdipDeleteMatrix
+GdipDeletePath
+GdipDeletePathIter
+GdipDeletePen
+GdipDeletePrivateFontCollection
+GdipDeleteRegion
+GdipDeleteStringFormat
+GdipDisposeImage
+GdipDisposeImageAttributes
+GdipDrawArc
+GdipDrawArcI
+GdipDrawBezier
+GdipDrawBezierI
+GdipDrawBeziers
+GdipDrawBeziersI
+GdipDrawCachedBitmap
+GdipDrawClosedCurve
+GdipDrawClosedCurve2
+GdipDrawClosedCurve2I
+GdipDrawClosedCurveI
+GdipDrawCurve
+GdipDrawCurve2
+GdipDrawCurve2I
+GdipDrawCurve3
+GdipDrawCurve3I
+GdipDrawCurveI
+GdipDrawDriverString
+GdipDrawEllipse
+GdipDrawEllipseI
+GdipDrawImage
+GdipDrawImageI
+GdipDrawImagePointRect
+GdipDrawImagePointRectI
+GdipDrawImagePoints
+GdipDrawImagePointsI
+GdipDrawImagePointsRect
+GdipDrawImagePointsRectI
+GdipDrawImageRect
+GdipDrawImageRectI
+GdipDrawImageRectRect
+GdipDrawImageRectRectI
+GdipDrawLine
+GdipDrawLineI
+GdipDrawLines
+GdipDrawLinesI
+GdipDrawPath
+GdipDrawPie
+GdipDrawPieI
+GdipDrawPolygon
+GdipDrawPolygonI
+GdipDrawRectangle
+GdipDrawRectangleI
+GdipDrawRectangles
+GdipDrawRectanglesI
+GdipDrawString
+GdipEmfToWmfBits
+GdipEndContainer
+GdipEnumerateMetafileDestPoint
+GdipEnumerateMetafileDestPointI
+GdipEnumerateMetafileDestPoints
+GdipEnumerateMetafileDestPointsI
+GdipEnumerateMetafileDestRect
+GdipEnumerateMetafileDestRectI
+GdipEnumerateMetafileSrcRectDestPoint
+GdipEnumerateMetafileSrcRectDestPointI
+GdipEnumerateMetafileSrcRectDestPoints
+GdipEnumerateMetafileSrcRectDestPointsI
+GdipEnumerateMetafileSrcRectDestRect
+GdipEnumerateMetafileSrcRectDestRectI
+GdipFillClosedCurve
+GdipFillClosedCurve2
+GdipFillClosedCurve2I
+GdipFillClosedCurveI
+GdipFillEllipse
+GdipFillEllipseI
+GdipFillPath
+GdipFillPie
+GdipFillPieI
+GdipFillPolygon
+GdipFillPolygon2
+GdipFillPolygon2I
+GdipFillPolygonI
+GdipFillRectangle
+GdipFillRectangleI
+GdipFillRectangles
+GdipFillRectanglesI
+GdipFillRegion
+GdipFlattenPath
+GdipFlush
+GdipFree
+GdipGetAdjustableArrowCapFillState
+GdipGetAdjustableArrowCapHeight
+GdipGetAdjustableArrowCapMiddleInset
+GdipGetAdjustableArrowCapWidth
+GdipGetAllPropertyItems
+GdipGetBrushType
+GdipGetCellAscent
+GdipGetCellDescent
+GdipGetClip
+GdipGetClipBounds
+GdipGetClipBoundsI
+GdipGetCompositingMode
+GdipGetCompositingQuality
+GdipGetCustomLineCapBaseCap
+GdipGetCustomLineCapBaseInset
+GdipGetCustomLineCapStrokeCaps
+GdipGetCustomLineCapStrokeJoin
+GdipGetCustomLineCapType
+GdipGetCustomLineCapWidthScale
+GdipGetDC
+GdipGetDpiX
+GdipGetDpiY
+GdipGetEmHeight
+GdipGetEncoderParameterList
+GdipGetEncoderParameterListSize
+GdipGetFamily
+GdipGetFamilyName
+GdipGetFontCollectionFamilyCount
+GdipGetFontCollectionFamilyList
+GdipGetFontHeight
+GdipGetFontHeightGivenDPI
+GdipGetFontSize
+GdipGetFontStyle
+GdipGetFontUnit
+GdipGetGenericFontFamilyMonospace
+GdipGetGenericFontFamilySansSerif
+GdipGetGenericFontFamilySerif
+GdipGetHatchBackgroundColor
+GdipGetHatchForegroundColor
+GdipGetHatchStyle
+GdipGetHemfFromMetafile
+GdipGetImageAttributesAdjustedPalette
+GdipGetImageBounds
+GdipGetImageDecoders
+GdipGetImageDecodersSize
+GdipGetImageDimension
+GdipGetImageEncoders
+GdipGetImageEncodersSize
+GdipGetImageFlags
+GdipGetImageGraphicsContext
+GdipGetImageHeight
+GdipGetImageHorizontalResolution
+GdipGetImagePalette
+GdipGetImagePaletteSize
+GdipGetImagePixelFormat
+GdipGetImageRawFormat
+GdipGetImageThumbnail
+GdipGetImageType
+GdipGetImageVerticalResolution
+GdipGetImageWidth
+GdipGetInterpolationMode
+GdipGetLineBlend
+GdipGetLineBlendCount
+GdipGetLineColors
+GdipGetLineGammaCorrection
+GdipGetLinePresetBlend
+GdipGetLinePresetBlendCount
+GdipGetLineRect
+GdipGetLineRectI
+GdipGetLineSpacing
+GdipGetLineTransform
+GdipGetLineWrapMode
+GdipGetLogFontA
+GdipGetLogFontW
+GdipGetMatrixElements
+GdipGetMetafileDownLevelRasterizationLimit
+GdipGetMetafileHeaderFromEmf
+GdipGetMetafileHeaderFromFile
+GdipGetMetafileHeaderFromMetafile
+GdipGetMetafileHeaderFromStream
+GdipGetMetafileHeaderFromWmf
+GdipGetNearestColor
+GdipGetPageScale
+GdipGetPageUnit
+GdipGetPathData
+GdipGetPathFillMode
+GdipGetPathGradientBlend
+GdipGetPathGradientBlendCount
+GdipGetPathGradientCenterColor
+GdipGetPathGradientCenterPoint
+GdipGetPathGradientCenterPointI
+GdipGetPathGradientFocusScales
+GdipGetPathGradientGammaCorrection
+GdipGetPathGradientPath
+GdipGetPathGradientPointCount
+GdipGetPathGradientPresetBlend
+GdipGetPathGradientPresetBlendCount
+GdipGetPathGradientRect
+GdipGetPathGradientRectI
+GdipGetPathGradientSurroundColorCount
+GdipGetPathGradientSurroundColorsWithCount
+GdipGetPathGradientTransform
+GdipGetPathGradientWrapMode
+GdipGetPathLastPoint
+GdipGetPathPoints
+GdipGetPathPointsI
+GdipGetPathTypes
+GdipGetPathWorldBounds
+GdipGetPathWorldBoundsI
+GdipGetPenBrushFill
+GdipGetPenColor
+GdipGetPenCompoundArray
+GdipGetPenCompoundCount
+GdipGetPenCustomEndCap
+GdipGetPenCustomStartCap
+GdipGetPenDashArray
+GdipGetPenDashCap197819
+GdipGetPenDashCount
+GdipGetPenDashOffset
+GdipGetPenDashStyle
+GdipGetPenEndCap
+GdipGetPenFillType
+GdipGetPenLineJoin
+GdipGetPenMiterLimit
+GdipGetPenMode
+GdipGetPenStartCap
+GdipGetPenTransform
+GdipGetPenUnit
+GdipGetPenWidth
+GdipGetPixelOffsetMode
+GdipGetPointCount
+GdipGetPropertyCount
+GdipGetPropertyIdList
+GdipGetPropertyItem
+GdipGetPropertyItemSize
+GdipGetPropertySize
+GdipGetRegionBounds
+GdipGetRegionBoundsI
+GdipGetRegionData
+GdipGetRegionDataSize
+GdipGetRegionHRgn
+GdipGetRegionScans
+GdipGetRegionScansCount
+GdipGetRegionScansI
+GdipGetRenderingOrigin
+GdipGetSmoothingMode
+GdipGetSolidFillColor
+GdipGetStringFormatAlign
+GdipGetStringFormatDigitSubstitution
+GdipGetStringFormatFlags
+GdipGetStringFormatHotkeyPrefix
+GdipGetStringFormatLineAlign
+GdipGetStringFormatMeasurableCharacterRangeCount
+GdipGetStringFormatTabStopCount
+GdipGetStringFormatTabStops
+GdipGetStringFormatTrimming
+GdipGetTextContrast
+GdipGetTextRenderingHint
+GdipGetTextureImage
+GdipGetTextureTransform
+GdipGetTextureWrapMode
+GdipGetVisibleClipBounds
+GdipGetVisibleClipBoundsI
+GdipGetWorldTransform
+GdipGraphicsClear
+GdipImageForceValidation
+GdipImageGetFrameCount
+GdipImageGetFrameDimensionsCount
+GdipImageGetFrameDimensionsList
+GdipImageRotateFlip
+GdipImageSelectActiveFrame
+GdipInvertMatrix
+GdipIsClipEmpty
+GdipIsEmptyRegion
+GdipIsEqualRegion
+GdipIsInfiniteRegion
+GdipIsMatrixEqual
+GdipIsMatrixIdentity
+GdipIsMatrixInvertible
+GdipIsOutlineVisiblePathPoint
+GdipIsOutlineVisiblePathPointI
+GdipIsStyleAvailable
+GdipIsVisibleClipEmpty
+GdipIsVisiblePathPoint
+GdipIsVisiblePathPointI
+GdipIsVisiblePoint
+GdipIsVisiblePointI
+GdipIsVisibleRect
+GdipIsVisibleRectI
+GdipIsVisibleRegionPoint
+GdipIsVisibleRegionPointI
+GdipIsVisibleRegionRect
+GdipIsVisibleRegionRectI
+GdipLoadImageFromFile
+GdipLoadImageFromFileICM
+GdipLoadImageFromStream
+GdipLoadImageFromStreamICM
+GdipMeasureCharacterRanges
+GdipMeasureDriverString
+GdipMeasureString
+GdipMultiplyLineTransform
+GdipMultiplyMatrix
+GdipMultiplyPathGradientTransform
+GdipMultiplyPenTransform
+GdipMultiplyTextureTransform
+GdipMultiplyWorldTransform
+GdipNewInstalledFontCollection
+GdipNewPrivateFontCollection
+GdipPathIterCopyData
+GdipPathIterEnumerate
+GdipPathIterGetCount
+GdipPathIterGetSubpathCount
+GdipPathIterHasCurve
+GdipPathIterIsValid
+GdipPathIterNextMarker
+GdipPathIterNextMarkerPath
+GdipPathIterNextPathType
+GdipPathIterNextSubpath
+GdipPathIterNextSubpathPath
+GdipPathIterRewind
+GdipPlayMetafileRecord
+GdipPrivateAddFontFile
+GdipPrivateAddMemoryFont
+GdipRecordMetafile
+GdipRecordMetafileFileName
+GdipRecordMetafileFileNameI
+GdipRecordMetafileI
+GdipRecordMetafileStream
+GdipRecordMetafileStreamI
+GdipReleaseDC
+GdipRemovePropertyItem
+GdipResetClip
+GdipResetImageAttributes
+GdipResetLineTransform
+GdipResetPageTransform
+GdipResetPath
+GdipResetPathGradientTransform
+GdipResetPenTransform
+GdipResetTextureTransform
+GdipResetWorldTransform
+GdipRestoreGraphics
+GdipReversePath
+GdipRotateLineTransform
+GdipRotateMatrix
+GdipRotatePathGradientTransform
+GdipRotatePenTransform
+GdipRotateTextureTransform
+GdipRotateWorldTransform
+GdipSaveAdd
+GdipSaveAddImage
+GdipSaveGraphics
+GdipSaveImageToFile
+GdipSaveImageToStream
+GdipScaleLineTransform
+GdipScaleMatrix
+GdipScalePathGradientTransform
+GdipScalePenTransform
+GdipScaleTextureTransform
+GdipScaleWorldTransform
+GdipSetAdjustableArrowCapFillState
+GdipSetAdjustableArrowCapHeight
+GdipSetAdjustableArrowCapMiddleInset
+GdipSetAdjustableArrowCapWidth
+GdipSetClipGraphics
+GdipSetClipHrgn
+GdipSetClipPath
+GdipSetClipRect
+GdipSetClipRectI
+GdipSetClipRegion
+GdipSetCompositingMode
+GdipSetCompositingQuality
+GdipSetCustomLineCapBaseCap
+GdipSetCustomLineCapBaseInset
+GdipSetCustomLineCapStrokeCaps
+GdipSetCustomLineCapStrokeJoin
+GdipSetCustomLineCapWidthScale
+GdipSetEmpty
+GdipSetImageAttributesCachedBackground
+GdipSetImageAttributesColorKeys
+GdipSetImageAttributesColorMatrix
+GdipSetImageAttributesGamma
+GdipSetImageAttributesNoOp
+GdipSetImageAttributesOutputChannel
+GdipSetImageAttributesOutputChannelColorProfile
+GdipSetImageAttributesRemapTable
+GdipSetImageAttributesThreshold
+GdipSetImageAttributesToIdentity
+GdipSetImageAttributesWrapMode
+GdipSetImagePalette
+GdipSetInfinite
+GdipSetInterpolationMode
+GdipSetLineBlend
+GdipSetLineColors
+GdipSetLineGammaCorrection
+GdipSetLineLinearBlend
+GdipSetLinePresetBlend
+GdipSetLineSigmaBlend
+GdipSetLineTransform
+GdipSetLineWrapMode
+GdipSetMatrixElements
+GdipSetMetafileDownLevelRasterizationLimit
+GdipSetPageScale
+GdipSetPageUnit
+GdipSetPathFillMode
+GdipSetPathGradientBlend
+GdipSetPathGradientCenterColor
+GdipSetPathGradientCenterPoint
+GdipSetPathGradientCenterPointI
+GdipSetPathGradientFocusScales
+GdipSetPathGradientGammaCorrection
+GdipSetPathGradientLinearBlend
+GdipSetPathGradientPath
+GdipSetPathGradientPresetBlend
+GdipSetPathGradientSigmaBlend
+GdipSetPathGradientSurroundColorsWithCount
+GdipSetPathGradientTransform
+GdipSetPathGradientWrapMode
+GdipSetPathMarker
+GdipSetPenBrushFill
+GdipSetPenColor
+GdipSetPenCompoundArray
+GdipSetPenCustomEndCap
+GdipSetPenCustomStartCap
+GdipSetPenDashArray
+GdipSetPenDashCap197819
+GdipSetPenDashOffset
+GdipSetPenDashStyle
+GdipSetPenEndCap
+GdipSetPenLineCap197819
+GdipSetPenLineJoin
+GdipSetPenMiterLimit
+GdipSetPenMode
+GdipSetPenStartCap
+GdipSetPenTransform
+GdipSetPenUnit
+GdipSetPenWidth
+GdipSetPixelOffsetMode
+GdipSetPropertyItem
+GdipSetRenderingOrigin
+GdipSetSmoothingMode
+GdipSetSolidFillColor
+GdipSetStringFormatAlign
+GdipSetStringFormatDigitSubstitution
+GdipSetStringFormatFlags
+GdipSetStringFormatHotkeyPrefix
+GdipSetStringFormatLineAlign
+GdipSetStringFormatMeasurableCharacterRanges
+GdipSetStringFormatTabStops
+GdipSetStringFormatTrimming
+GdipSetTextContrast
+GdipSetTextRenderingHint
+GdipSetTextureTransform
+GdipSetTextureWrapMode
+GdipSetWorldTransform
+GdipShearMatrix
+GdipStartPathFigure
+GdipStringFormatGetGenericDefault
+GdipStringFormatGetGenericTypographic
+GdipTestControl
+GdipTransformMatrixPoints
+GdipTransformMatrixPointsI
+GdipTransformPath
+GdipTransformPoints
+GdipTransformPointsI
+GdipTransformRegion
+GdipTranslateClip
+GdipTranslateClipI
+GdipTranslateLineTransform
+GdipTranslateMatrix
+GdipTranslatePathGradientTransform
+GdipTranslatePenTransform
+GdipTranslateRegion
+GdipTranslateRegionI
+GdipTranslateTextureTransform
+GdipTranslateWorldTransform
+GdipVectorTransformMatrixPoints
+GdipVectorTransformMatrixPointsI
+GdipWarpPath
+GdipWidenPath
+GdipWindingModeOutline
+GdiplusNotificationHook
+GdiplusNotificationUnhook
+GdiplusShutdown
+GdiplusStartup
+GdipFindFirstImageItem
+GdipFindNextImageItem
+GdipGetImageItemData
+GdipCreateEffect
+GdipDeleteEffect
+GdipGetEffectParameterSize
+GdipGetEffectParameters
+GdipSetEffectParameters
+GdipBitmapCreateApplyEffect
+GdipBitmapApplyEffect
+GdipBitmapGetHistogram
+GdipBitmapGetHistogramSize
+GdipBitmapConvertFormat
+GdipInitializePalette
+GdipImageSetAbort
+GdipGraphicsSetAbort
+GdipDrawImageFX
+GdipConvertToEmfPlus
+GdipConvertToEmfPlusToFile
+GdipConvertToEmfPlusToStream
+GdipPlayTSClientRecord
diff --git a/mingw-w64-crt/libsrc/gdiplus.c b/mingw-w64-crt/libsrc/gdiplus.c
new file mode 100644
index 0000000..70c62f3
--- /dev/null
+++ b/mingw-w64-crt/libsrc/gdiplus.c
@@ -0,0 +1,66 @@
+/*
+ * Generate GUIDs for GDI+
+ *
+ * The Image Format GUIDs were generated by loading example images of
+ * various types with GdipLoadImageFromFile and then extracting the
+ * image format with GdipGetImageRawFormat.
+ *
+ * The Encoder Parameter GUIDs were taken from this .NET MSDN page:
+ * http://msdn.microsoft.com/en-us/library/system.drawing.imaging.encoder.quality.aspx
+ *
+ * The Frame Dimension GUIDs were generated by loading example multi-frame
+ * images (multi-page TIFF; animated GIF) and querying the frame dimension list
+ * using GdipImageGetFrameDimensionsList.
+ */
+
+/* TODO: find the remaining GUIDs */
+
+#include <initguid.h>
+
+void *_GdipFontFamilyCachedGenericMonospace = 0;
+void *_GdipFontFamilyCachedGenericSansSerif = 0;
+void *_GdipFontFamilyCachedGenericSerif = 0;
+void *_GdipStringFormatCachedGenericDefault = 0;
+void *_GdipStringFormatCachedGenericTypographic = 0;
+
+DEFINE_GUID(EncoderChrominanceTable,0xF2E455DC,0x09B3,0x4316,0x82,0x60,0x67,0x6A,0xDA,0x32,0x48,0x1C);
+DEFINE_GUID(EncoderColorDepth,0x66087055,0xAD66,0x4C7C,0x9A,0x18,0x38,0xA2,0x31,0x0B,0x83,0x37);
+/* EncoderColorSpace missing */
+DEFINE_GUID(EncoderCompression,0xE09D739D,0xCCD4,0x44EE,0x8E,0xBA,0x3F,0xBF,0x8B,0xE4,0xFC,0x58);
+/* EncoderImageItems missing */
+DEFINE_GUID(EncoderLuminanceTable,0xEDB33BCE,0x0266,0x4A77,0xB9,0x04,0x27,0x21,0x60,0x99,0xE7,0x17);
+DEFINE_GUID(EncoderQuality,0x1D5BE4B5,0xFA4A,0x452D,0x9C,0xDD,0x5D,0xB3,0x51,0x05,0xE7,0xEB);
+DEFINE_GUID(EncoderRenderMethod,0x6D42C53A,0x229A,0x4825,0x8B,0xB7,0x5C,0x99,0xE2,0xB9,0xA8,0xB8);
+/* EncoderSaveAsCMYK missing */
+DEFINE_GUID(EncoderSaveFlag,0x292266FC,0xAC40,0x47BF,0x8C,0xFC,0xA8,0x5B,0x89,0xA6,0x55,0xDE);
+DEFINE_GUID(EncoderScanMethod,0x3A4E2661,0x3109,0x4E56,0x85,0x36,0x42,0xC1,0x56,0xE7,0xDC,0xFA);
+DEFINE_GUID(EncoderTransformation,0x8D0EB2D1,0xA58E,0x4EA8,0xAA,0x14,0x10,0x80,0x74,0xB7,0xB6,0xF9);
+DEFINE_GUID(EncoderVersion,0x24D18C76,0x814A,0x41A4,0xBF,0x53,0x1C,0x21,0x9C,0xCC,0xF7,0x97);
+
+DEFINE_GUID(ImageFormatBMP,0xB96B3CAB,0x0728,0x11D3,0x9D,0x7B,0x00,0x00,0xF8,0x1E,0xF3,0x2E);
+DEFINE_GUID(ImageFormatEMF,0xB96B3CAC,0x0728,0x11D3,0x9D,0x7B,0x00,0x00,0xF8,0x1E,0xF3,0x2E);
+/* ImageFormatEXIF missing */
+DEFINE_GUID(ImageFormatGIF,0xB96B3CB0,0x0728,0x11D3,0x9D,0x7B,0x00,0x00,0xF8,0x1E,0xF3,0x2E);
+DEFINE_GUID(ImageFormatIcon,0xB96B3CB5,0x0728,0x11D3,0x9D,0x7B,0x00,0x00,0xF8,0x1E,0xF3,0x2E);
+DEFINE_GUID(ImageFormatJPEG,0xB96B3CAE,0x0728,0x11D3,0x9D,0x7B,0x00,0x00,0xF8,0x1E,0xF3,0x2E);
+DEFINE_GUID(ImageFormatMemoryBMP,0xB96B3CAA,0x0728,0x11D3,0x9D,0x7B,0x00,0x00,0xF8,0x1E,0xF3,0x2E);
+DEFINE_GUID(ImageFormatPNG,0xB96B3CAF,0x0728,0x11D3,0x9D,0x7B,0x00,0x00,0xF8,0x1E,0xF3,0x2E);
+DEFINE_GUID(ImageFormatTIFF,0xB96B3CB1,0x0728,0x11D3,0x9D,0x7B,0x00,0x00,0xF8,0x1E,0xF3,0x2E);
+/* ImageFormatUndefined missing */
+DEFINE_GUID(ImageFormatWMF,0xB96B3CAD,0x0728,0x11D3,0x9D,0x7B,0x00,0x00,0xF8,0x1E,0xF3,0x2E);
+
+DEFINE_GUID(FrameDimensionPage,0x7462DC86,0x6180,0x4C7E,0x8E,0x3F,0xEE,0x73,0x33,0xA7,0xA4,0x83);
+/* FrameDimensionResolution missing */
+DEFINE_GUID(FrameDimensionTime,0x6AEDBD6D,0x3FB5,0x418A,0x83,0xA6,0x7F,0x45,0x22,0x9D,0xC8,0x72);
+
+/* BlurEffectGuid missing */
+/* BrightnessContrastEffectGuid missing */
+/* ColorBalanceEffectGuid missing */
+/* ColorCurveEffectGuid missing */
+/* ColorLUTEffectGuid missing */
+/* ColorMatrixEffectGuid missing */
+/* HueSaturationLightnessEffectGuid missing */
+/* LevelsEffectGuid missing */
+/* RedEyeCorrectionEffectGuid missing */
+/* SharpenEffectGuid missing */
+/* TintEffectGuid missing */
diff --git a/mingw-w64-headers/Makefile.am b/mingw-w64-headers/Makefile.am
index 005d04d..e1dca6f 100644
--- a/mingw-w64-headers/Makefile.am
+++ b/mingw-w64-headers/Makefile.am
@@ -4,6 +4,7 @@
 secheaddir = $(baseheaddir)/sec_api
 secsysheaddir = $(baseheaddir)/sec_api/sys
 glheaddir = $(baseheaddir)/GL
+gdiplusheaddir = $(baseheaddir)/gdiplus
 mingwhelperheaddir = $(baseheaddir)/psdk_inc
 sdksheaddir = $(baseheaddir)/sdks
 
@@ -12,6 +13,7 @@
 sechead_HEADERS = @SECHEAD_LIST@
 secsyshead_HEADERS = @SECSYSHEAD_LIST@
 glhead_HEADERS = @GLHEAD_LIST@
+gdiplushead_HEADERS = @GDIPLUSHEAD_LIST@
 mingwhelperhead_HEADERS = @MINGWHELPERHEAD_LIST@
 sdkshead_HEADERS = _mingw_directx.h _mingw_ddk.h
 
@@ -35,6 +37,7 @@
   include/*.ver \
   include/GL/*.h \
   include/psdk_inc/*.h \
+  include/gdiplus/*.h \
   crt/*.h \
   crt/sys/*.h \
   crt/sec_api/*.h \
diff --git a/mingw-w64-headers/Makefile.in b/mingw-w64-headers/Makefile.in
index 11f08cc..5b52e23 100644
--- a/mingw-w64-headers/Makefile.in
+++ b/mingw-w64-headers/Makefile.in
@@ -36,11 +36,11 @@
 host_triplet = @host@
 subdir = .
 DIST_COMMON = $(am__configure_deps) $(basehead_HEADERS) \
-	$(ddkhead_HEADERS) $(dxhead_HEADERS) $(glhead_HEADERS) \
-	$(idlhead_HEADERS) $(mingwhelperhead_HEADERS) \
-	$(sdkshead_HEADERS) $(sechead_HEADERS) $(secsyshead_HEADERS) \
-	$(srcdir)/Makefile.am $(srcdir)/Makefile.in \
-	$(srcdir)/config.h.in $(syshead_HEADERS) \
+	$(ddkhead_HEADERS) $(dxhead_HEADERS) $(gdiplushead_HEADERS) \
+	$(glhead_HEADERS) $(idlhead_HEADERS) \
+	$(mingwhelperhead_HEADERS) $(sdkshead_HEADERS) \
+	$(sechead_HEADERS) $(secsyshead_HEADERS) $(srcdir)/Makefile.am \
+	$(srcdir)/Makefile.in $(srcdir)/config.h.in $(syshead_HEADERS) \
 	$(top_srcdir)/configure $(top_srcdir)/crt/_mingw.h.in \
 	ChangeLog build-aux/config.guess build-aux/config.sub \
 	build-aux/install-sh build-aux/missing
@@ -78,12 +78,13 @@
   sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
   sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
 am__installdirs = "$(DESTDIR)$(baseheaddir)" "$(DESTDIR)$(ddkheaddir)" \
-	"$(DESTDIR)$(dxheaddir)" "$(DESTDIR)$(glheaddir)" \
-	"$(DESTDIR)$(idlheaddir)" "$(DESTDIR)$(mingwhelperheaddir)" \
-	"$(DESTDIR)$(sdksheaddir)" "$(DESTDIR)$(secheaddir)" \
-	"$(DESTDIR)$(secsysheaddir)" "$(DESTDIR)$(sysheaddir)"
+	"$(DESTDIR)$(dxheaddir)" "$(DESTDIR)$(gdiplusheaddir)" \
+	"$(DESTDIR)$(glheaddir)" "$(DESTDIR)$(idlheaddir)" \
+	"$(DESTDIR)$(mingwhelperheaddir)" "$(DESTDIR)$(sdksheaddir)" \
+	"$(DESTDIR)$(secheaddir)" "$(DESTDIR)$(secsysheaddir)" \
+	"$(DESTDIR)$(sysheaddir)"
 HEADERS = $(basehead_HEADERS) $(ddkhead_HEADERS) $(dxhead_HEADERS) \
-	$(glhead_HEADERS) $(idlhead_HEADERS) \
+	$(gdiplushead_HEADERS) $(glhead_HEADERS) $(idlhead_HEADERS) \
 	$(mingwhelperhead_HEADERS) $(sdkshead_HEADERS) \
 	$(sechead_HEADERS) $(secsyshead_HEADERS) $(syshead_HEADERS)
 ETAGS = etags
@@ -113,6 +114,7 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+GDIPLUSHEAD_LIST = @GDIPLUSHEAD_LIST@
 GLHEAD_LIST = @GLHEAD_LIST@
 IDLHEAD_LIST = @IDLHEAD_LIST@
 INSTALL = @INSTALL@
@@ -198,6 +200,7 @@
 secheaddir = $(baseheaddir)/sec_api
 secsysheaddir = $(baseheaddir)/sec_api/sys
 glheaddir = $(baseheaddir)/GL
+gdiplusheaddir = $(baseheaddir)/gdiplus
 mingwhelperheaddir = $(baseheaddir)/psdk_inc
 sdksheaddir = $(baseheaddir)/sdks
 basehead_HEADERS = @BASEHEAD_LIST@
@@ -205,6 +208,7 @@
 sechead_HEADERS = @SECHEAD_LIST@
 secsyshead_HEADERS = @SECSYSHEAD_LIST@
 glhead_HEADERS = @GLHEAD_LIST@
+gdiplushead_HEADERS = @GDIPLUSHEAD_LIST@
 mingwhelperhead_HEADERS = @MINGWHELPERHEAD_LIST@
 sdkshead_HEADERS = _mingw_directx.h _mingw_ddk.h
 ddkheaddir = $(baseheaddir)/ddk
@@ -224,6 +228,7 @@
   include/*.ver \
   include/GL/*.h \
   include/psdk_inc/*.h \
+  include/gdiplus/*.h \
   crt/*.h \
   crt/sys/*.h \
   crt/sec_api/*.h \
@@ -354,6 +359,26 @@
 	test -n "$$files" || exit 0; \
 	echo " ( cd '$(DESTDIR)$(dxheaddir)' && rm -f" $$files ")"; \
 	cd "$(DESTDIR)$(dxheaddir)" && rm -f $$files
+install-gdiplusheadHEADERS: $(gdiplushead_HEADERS)
+	@$(NORMAL_INSTALL)
+	test -z "$(gdiplusheaddir)" || $(MKDIR_P) "$(DESTDIR)$(gdiplusheaddir)"
+	@list='$(gdiplushead_HEADERS)'; test -n "$(gdiplusheaddir)" || list=; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(gdiplusheaddir)'"; \
+	  $(INSTALL_HEADER) $$files "$(DESTDIR)$(gdiplusheaddir)" || exit $$?; \
+	done
+
+uninstall-gdiplusheadHEADERS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(gdiplushead_HEADERS)'; test -n "$(gdiplusheaddir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	test -n "$$files" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(gdiplusheaddir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(gdiplusheaddir)" && rm -f $$files
 install-glheadHEADERS: $(glhead_HEADERS)
 	@$(NORMAL_INSTALL)
 	test -z "$(glheaddir)" || $(MKDIR_P) "$(DESTDIR)$(glheaddir)"
@@ -699,7 +724,7 @@
 	$(MAKE) $(AM_MAKEFLAGS) check-am
 all-am: Makefile $(HEADERS) config.h
 installdirs:
-	for dir in "$(DESTDIR)$(baseheaddir)" "$(DESTDIR)$(ddkheaddir)" "$(DESTDIR)$(dxheaddir)" "$(DESTDIR)$(glheaddir)" "$(DESTDIR)$(idlheaddir)" "$(DESTDIR)$(mingwhelperheaddir)" "$(DESTDIR)$(sdksheaddir)" "$(DESTDIR)$(secheaddir)" "$(DESTDIR)$(secsysheaddir)" "$(DESTDIR)$(sysheaddir)"; do \
+	for dir in "$(DESTDIR)$(baseheaddir)" "$(DESTDIR)$(ddkheaddir)" "$(DESTDIR)$(dxheaddir)" "$(DESTDIR)$(gdiplusheaddir)" "$(DESTDIR)$(glheaddir)" "$(DESTDIR)$(idlheaddir)" "$(DESTDIR)$(mingwhelperheaddir)" "$(DESTDIR)$(sdksheaddir)" "$(DESTDIR)$(secheaddir)" "$(DESTDIR)$(secsysheaddir)" "$(DESTDIR)$(sysheaddir)"; do \
 	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
 	done
 install: $(BUILT_SOURCES)
@@ -751,10 +776,11 @@
 info-am:
 
 install-data-am: install-baseheadHEADERS install-ddkheadHEADERS \
-	install-dxheadHEADERS install-glheadHEADERS \
-	install-idlheadHEADERS install-mingwhelperheadHEADERS \
-	install-sdksheadHEADERS install-secheadHEADERS \
-	install-secsysheadHEADERS install-sysheadHEADERS
+	install-dxheadHEADERS install-gdiplusheadHEADERS \
+	install-glheadHEADERS install-idlheadHEADERS \
+	install-mingwhelperheadHEADERS install-sdksheadHEADERS \
+	install-secheadHEADERS install-secsysheadHEADERS \
+	install-sysheadHEADERS
 
 install-dvi: install-dvi-am
 
@@ -801,10 +827,11 @@
 ps-am:
 
 uninstall-am: uninstall-baseheadHEADERS uninstall-ddkheadHEADERS \
-	uninstall-dxheadHEADERS uninstall-glheadHEADERS \
-	uninstall-idlheadHEADERS uninstall-mingwhelperheadHEADERS \
-	uninstall-sdksheadHEADERS uninstall-secheadHEADERS \
-	uninstall-secsysheadHEADERS uninstall-sysheadHEADERS
+	uninstall-dxheadHEADERS uninstall-gdiplusheadHEADERS \
+	uninstall-glheadHEADERS uninstall-idlheadHEADERS \
+	uninstall-mingwhelperheadHEADERS uninstall-sdksheadHEADERS \
+	uninstall-secheadHEADERS uninstall-secsysheadHEADERS \
+	uninstall-sysheadHEADERS
 
 .MAKE: all check install install-am install-strip
 
@@ -817,20 +844,21 @@
 	install-baseheadHEADERS install-data install-data-am \
 	install-ddkheadHEADERS install-dvi install-dvi-am \
 	install-dxheadHEADERS install-exec install-exec-am \
-	install-glheadHEADERS install-html install-html-am \
-	install-idlheadHEADERS install-info install-info-am \
-	install-man install-mingwhelperheadHEADERS install-pdf \
-	install-pdf-am install-ps install-ps-am \
+	install-gdiplusheadHEADERS install-glheadHEADERS install-html \
+	install-html-am install-idlheadHEADERS install-info \
+	install-info-am install-man install-mingwhelperheadHEADERS \
+	install-pdf install-pdf-am install-ps install-ps-am \
 	install-sdksheadHEADERS install-secheadHEADERS \
 	install-secsysheadHEADERS install-strip install-sysheadHEADERS \
 	installcheck installcheck-am installdirs maintainer-clean \
 	maintainer-clean-generic mostlyclean mostlyclean-generic pdf \
 	pdf-am ps ps-am tags uninstall uninstall-am \
 	uninstall-baseheadHEADERS uninstall-ddkheadHEADERS \
-	uninstall-dxheadHEADERS uninstall-glheadHEADERS \
-	uninstall-idlheadHEADERS uninstall-mingwhelperheadHEADERS \
-	uninstall-sdksheadHEADERS uninstall-secheadHEADERS \
-	uninstall-secsysheadHEADERS uninstall-sysheadHEADERS
+	uninstall-dxheadHEADERS uninstall-gdiplusheadHEADERS \
+	uninstall-glheadHEADERS uninstall-idlheadHEADERS \
+	uninstall-mingwhelperheadHEADERS uninstall-sdksheadHEADERS \
+	uninstall-secheadHEADERS uninstall-secsysheadHEADERS \
+	uninstall-sysheadHEADERS
 
 
 _mingw_directx.h: $(srcdir)/crt/sdks/_mingw_directx.h.in
diff --git a/mingw-w64-headers/aclocal.m4 b/mingw-w64-headers/aclocal.m4
index cf1c902..fced0e9 100644
--- a/mingw-w64-headers/aclocal.m4
+++ b/mingw-w64-headers/aclocal.m4
@@ -13,8 +13,8 @@
 
 m4_ifndef([AC_AUTOCONF_VERSION],
   [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
-m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.67],,
-[m4_warning([this file was generated for autoconf 2.67.
+m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.68],,
+[m4_warning([this file was generated for autoconf 2.68.
 You have another version of autoconf.  It may work, but is not guaranteed to.
 If you have problems, you may need to regenerate the build system entirely.
 To do so, use the procedure documented by the package, typically `autoreconf'.])])
diff --git a/mingw-w64-headers/configure b/mingw-w64-headers/configure
index 866349b..40715a1 100755
--- a/mingw-w64-headers/configure
+++ b/mingw-w64-headers/configure
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.67 for mingw-w64-headers 3.0b.
+# Generated by GNU Autoconf 2.68 for mingw-w64-headers 3.0b.
 #
 # Report bugs to <mingw-w64-public@lists.sourceforge.net>.
 #
@@ -91,6 +91,7 @@
 IFS=" ""	$as_nl"
 
 # Find who we are.  Look in the path if we contain no directory separator.
+as_myself=
 case $0 in #((
   *[\\/]* ) as_myself=$0 ;;
   *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -216,11 +217,18 @@
   # We cannot yet assume a decent shell, so we have to provide a
 	# neutralization value for shells without unset; and this also
 	# works around shells that cannot unset nonexistent variables.
+	# Preserve -v and -x to the replacement shell.
 	BASH_ENV=/dev/null
 	ENV=/dev/null
 	(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
 	export CONFIG_SHELL
-	exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"}
+	case $- in # ((((
+	  *v*x* | *x*v* ) as_opts=-vx ;;
+	  *v* ) as_opts=-v ;;
+	  *x* ) as_opts=-x ;;
+	  * ) as_opts= ;;
+	esac
+	exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"}
 fi
 
     if test x$as_have_required = xno; then :
@@ -571,6 +579,7 @@
 SYSHEAD_LIST
 MINGWHELPERHEAD_LIST
 GLHEAD_LIST
+GDIPLUSHEAD_LIST
 BASEHEAD_LIST
 ENABLE_CRT_FALSE
 ENABLE_CRT_TRUE
@@ -1062,7 +1071,7 @@
     $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
     expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
       $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
-    : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
+    : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}"
     ;;
 
   esac
@@ -1350,7 +1359,7 @@
 if $ac_init_version; then
   cat <<\_ACEOF
 mingw-w64-headers configure 3.0b
-generated by GNU Autoconf 2.67
+generated by GNU Autoconf 2.68
 
 Copyright (C) 2010 Free Software Foundation, Inc.
 This configure script is free software; the Free Software Foundation
@@ -1367,7 +1376,7 @@
 running configure, to aid debugging if configure makes a mistake.
 
 It was created by mingw-w64-headers $as_me 3.0b, which was
-generated by GNU Autoconf 2.67.  Invocation command line was
+generated by GNU Autoconf 2.68.  Invocation command line was
 
   $ $0 $@
 
@@ -1766,7 +1775,7 @@
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
 $as_echo_n "checking for a BSD-compatible install... " >&6; }
 if test -z "$INSTALL"; then
-if test "${ac_cv_path_install+set}" = set; then :
+if ${ac_cv_path_install+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -1943,7 +1952,7 @@
 set dummy ${ac_tool_prefix}strip; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_STRIP+set}" = set; then :
+if ${ac_cv_prog_STRIP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$STRIP"; then
@@ -1983,7 +1992,7 @@
 set dummy strip; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then :
+if ${ac_cv_prog_ac_ct_STRIP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_STRIP"; then
@@ -2036,7 +2045,7 @@
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5
 $as_echo_n "checking for a thread-safe mkdir -p... " >&6; }
 if test -z "$MKDIR_P"; then
-  if test "${ac_cv_path_mkdir+set}" = set; then :
+  if ${ac_cv_path_mkdir+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -2087,7 +2096,7 @@
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_AWK+set}" = set; then :
+if ${ac_cv_prog_AWK+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$AWK"; then
@@ -2127,7 +2136,7 @@
 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
 set x ${MAKE-make}
 ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
-if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\"" = set; then :
+if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat >conftest.make <<\_ACEOF
@@ -2255,7 +2264,7 @@
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
 $as_echo_n "checking build system type... " >&6; }
-if test "${ac_cv_build+set}" = set; then :
+if ${ac_cv_build+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_build_alias=$build_alias
@@ -2289,7 +2298,7 @@
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
 $as_echo_n "checking host system type... " >&6; }
-if test "${ac_cv_host+set}" = set; then :
+if ${ac_cv_host+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test "x$host_alias" = x; then
@@ -2324,7 +2333,7 @@
 # Checks for programs.
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5
 $as_echo_n "checking for a sed that does not truncate output... " >&6; }
-if test "${ac_cv_path_SED+set}" = set; then :
+if ${ac_cv_path_SED+:} false; then :
   $as_echo_n "(cached) " >&6
 else
             ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
@@ -2421,7 +2430,7 @@
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_crt" >&5
 $as_echo "$enable_crt" >&6; }
-if test "x$enable_crt" = x""yes; then :
+if test "x$enable_crt" = xyes; then :
 
   BASEHEAD_LIST="$BASEHEAD_LIST "$srcdir/crt/*.h
   SYSHEAD_LIST=$srcdir/crt/sys/*.h
@@ -2429,6 +2438,7 @@
   SECSYSHEAD_LIST=$srcdir/crt/sec_api/sys/*.h
 
 fi
+GDIPLUSHEAD_LIST=$srcdir/include/gdiplus/*.h
 GLHEAD_LIST=$srcdir/include/GL/*.h
 MINGWHELPERHEAD_LIST=$srcdir/include/psdk_inc/*.h
 
@@ -2438,6 +2448,7 @@
 
 
 
+
 enable_directx=no
 enable_ddk=no
 enable_idl=no
@@ -2474,7 +2485,7 @@
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_sdk" >&5
 $as_echo "$enable_sdk" >&6; }
 
-if test "x$enable_directx" = x""yes; then :
+if test "x$enable_directx" = xyes; then :
 
     DXHEAD_LIST=$srcdir/direct-x/include/*.[hi]*
     MINGW_HAS_DX=1
@@ -2487,7 +2498,7 @@
 
 
 
-if test "x$enable_ddk" = x""yes; then :
+if test "x$enable_ddk" = xyes; then :
 
     DDKHEAD_LIST=$srcdir/ddk/include/ddk/*.h
     MINGW_HAS_DDK=1
@@ -2500,7 +2511,7 @@
 
 
 
-if test "x$enable_idl" = x""yes; then :
+if test "x$enable_idl" = xyes; then :
 
     IDLHEAD_LIST=$srcdir/idl/*.idl
 fi
@@ -2515,7 +2526,7 @@
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_secure_api" >&5
 $as_echo "$enable_secure_api" >&6; }
-if test "x$enable_secure_api" = x""yes; then :
+if test "x$enable_secure_api" = xyes; then :
   MINGW_HAS_SECURE_API="#define MINGW_HAS_SECURE_API 1"
 else
   MINGW_HAS_SECURE_API=""
@@ -2592,10 +2603,21 @@
      :end' >>confcache
 if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
   if test -w "$cache_file"; then
-    test "x$cache_file" != "x/dev/null" &&
+    if test "x$cache_file" != "x/dev/null"; then
       { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
 $as_echo "$as_me: updating cache $cache_file" >&6;}
-    cat confcache >$cache_file
+      if test ! -f "$cache_file" || test -h "$cache_file"; then
+	cat confcache >"$cache_file"
+      else
+        case $cache_file in #(
+        */* | ?:*)
+	  mv -f confcache "$cache_file"$$ &&
+	  mv -f "$cache_file"$$ "$cache_file" ;; #(
+        *)
+	  mv -f confcache "$cache_file" ;;
+	esac
+      fi
+    fi
   else
     { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
@@ -2636,7 +2658,7 @@
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
 
-: ${CONFIG_STATUS=./config.status}
+: "${CONFIG_STATUS=./config.status}"
 ac_write_fail=0
 ac_clean_files_save=$ac_clean_files
 ac_clean_files="$ac_clean_files $CONFIG_STATUS"
@@ -2737,6 +2759,7 @@
 IFS=" ""	$as_nl"
 
 # Find who we are.  Look in the path if we contain no directory separator.
+as_myself=
 case $0 in #((
   *[\\/]* ) as_myself=$0 ;;
   *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -3044,7 +3067,7 @@
 # values after options handling.
 ac_log="
 This file was extended by mingw-w64-headers $as_me 3.0b, which was
-generated by GNU Autoconf 2.67.  Invocation command line was
+generated by GNU Autoconf 2.68.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
   CONFIG_HEADERS  = $CONFIG_HEADERS
@@ -3106,7 +3129,7 @@
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
 mingw-w64-headers config.status 3.0b
-configured by $0, generated by GNU Autoconf 2.67,
+configured by $0, generated by GNU Autoconf 2.68,
   with options \\"\$ac_cs_config\\"
 
 Copyright (C) 2010 Free Software Foundation, Inc.
@@ -3255,9 +3278,10 @@
 # after its creation but before its name has been assigned to `$tmp'.
 $debug ||
 {
-  tmp=
+  tmp= ac_tmp=
   trap 'exit_status=$?
-  { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status
+  : "${ac_tmp:=$tmp}"
+  { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status
 ' 0
   trap 'as_fn_exit 1' 1 2 13 15
 }
@@ -3265,12 +3289,13 @@
 
 {
   tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
-  test -n "$tmp" && test -d "$tmp"
+  test -d "$tmp"
 }  ||
 {
   tmp=./conf$$-$RANDOM
   (umask 077 && mkdir "$tmp")
 } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5
+ac_tmp=$tmp
 
 # Set up the scripts for CONFIG_FILES section.
 # No need to generate them if there are no CONFIG_FILES.
@@ -3292,7 +3317,7 @@
   ac_cs_awk_cr=$ac_cr
 fi
 
-echo 'BEGIN {' >"$tmp/subs1.awk" &&
+echo 'BEGIN {' >"$ac_tmp/subs1.awk" &&
 _ACEOF
 
 
@@ -3320,7 +3345,7 @@
 rm -f conf$$subs.sh
 
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-cat >>"\$tmp/subs1.awk" <<\\_ACAWK &&
+cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK &&
 _ACEOF
 sed -n '
 h
@@ -3368,7 +3393,7 @@
 rm -f conf$$subs.awk
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 _ACAWK
-cat >>"\$tmp/subs1.awk" <<_ACAWK &&
+cat >>"\$ac_tmp/subs1.awk" <<_ACAWK &&
   for (key in S) S_is_set[key] = 1
   FS = ""
 
@@ -3400,7 +3425,7 @@
   sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
 else
   cat
-fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \
+fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \
   || as_fn_error $? "could not setup config files machinery" "$LINENO" 5
 _ACEOF
 
@@ -3434,7 +3459,7 @@
 # No need to generate them if there are no CONFIG_HEADERS.
 # This happens for instance with `./config.status Makefile'.
 if test -n "$CONFIG_HEADERS"; then
-cat >"$tmp/defines.awk" <<\_ACAWK ||
+cat >"$ac_tmp/defines.awk" <<\_ACAWK ||
 BEGIN {
 _ACEOF
 
@@ -3446,8 +3471,8 @@
 # handling of long lines.
 ac_delim='%!_!# '
 for ac_last_try in false false :; do
-  ac_t=`sed -n "/$ac_delim/p" confdefs.h`
-  if test -z "$ac_t"; then
+  ac_tt=`sed -n "/$ac_delim/p" confdefs.h`
+  if test -z "$ac_tt"; then
     break
   elif $ac_last_try; then
     as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5
@@ -3567,7 +3592,7 @@
     for ac_f
     do
       case $ac_f in
-      -) ac_f="$tmp/stdin";;
+      -) ac_f="$ac_tmp/stdin";;
       *) # Look for the file first in the build tree, then in the source tree
 	 # (if the path is not absolute).  The absolute path cannot be DOS-style,
 	 # because $ac_f cannot contain `:'.
@@ -3602,7 +3627,7 @@
     esac
 
     case $ac_tag in
-    *:-:* | *:-) cat >"$tmp/stdin" \
+    *:-:* | *:-) cat >"$ac_tmp/stdin" \
       || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;;
     esac
     ;;
@@ -3739,21 +3764,22 @@
 s&@MKDIR_P@&$ac_MKDIR_P&;t t
 $ac_datarootdir_hack
 "
-eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \
-  || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \
+  >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5
 
 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
-  { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } &&
-  { ac_out=`sed -n '/^[	 ]*datarootdir[	 ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } &&
+  { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
+  { ac_out=`sed -n '/^[	 ]*datarootdir[	 ]*:*=/p' \
+      "$ac_tmp/out"`; test -z "$ac_out"; } &&
   { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
 which seems to be undefined.  Please make sure it is defined" >&5
 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
 which seems to be undefined.  Please make sure it is defined" >&2;}
 
-  rm -f "$tmp/stdin"
+  rm -f "$ac_tmp/stdin"
   case $ac_file in
-  -) cat "$tmp/out" && rm -f "$tmp/out";;
-  *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";;
+  -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";;
+  *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";;
   esac \
   || as_fn_error $? "could not create $ac_file" "$LINENO" 5
  ;;
@@ -3764,20 +3790,20 @@
   if test x"$ac_file" != x-; then
     {
       $as_echo "/* $configure_input  */" \
-      && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs"
-    } >"$tmp/config.h" \
+      && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs"
+    } >"$ac_tmp/config.h" \
       || as_fn_error $? "could not create $ac_file" "$LINENO" 5
-    if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then
+    if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then
       { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5
 $as_echo "$as_me: $ac_file is unchanged" >&6;}
     else
       rm -f "$ac_file"
-      mv "$tmp/config.h" "$ac_file" \
+      mv "$ac_tmp/config.h" "$ac_file" \
 	|| as_fn_error $? "could not create $ac_file" "$LINENO" 5
     fi
   else
     $as_echo "/* $configure_input  */" \
-      && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \
+      && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \
       || as_fn_error $? "could not create -" "$LINENO" 5
   fi
 # Compute "$ac_file"'s index in $config_headers.
diff --git a/mingw-w64-headers/configure.ac b/mingw-w64-headers/configure.ac
index 4d47e82..6d2d37e 100644
--- a/mingw-w64-headers/configure.ac
+++ b/mingw-w64-headers/configure.ac
@@ -39,9 +39,11 @@
   SECHEAD_LIST=$srcdir/crt/sec_api/*.h
   SECSYSHEAD_LIST=$srcdir/crt/sec_api/sys/*.h
 ])
+GDIPLUSHEAD_LIST=$srcdir/include/gdiplus/*.h
 GLHEAD_LIST=$srcdir/include/GL/*.h
 MINGWHELPERHEAD_LIST=$srcdir/include/psdk_inc/*.h
 AC_SUBST([BASEHEAD_LIST])
+AC_SUBST([GDIPLUSHEAD_LIST])
 AC_SUBST([GLHEAD_LIST])
 AC_SUBST([MINGWHELPERHEAD_LIST])
 AC_SUBST([SYSHEAD_LIST])
diff --git a/mingw-w64-headers/include/ChangeLog b/mingw-w64-headers/include/ChangeLog
index a275bfc..9a5a96f 100644
--- a/mingw-w64-headers/include/ChangeLog
+++ b/mingw-w64-headers/include/ChangeLog
@@ -1,3 +1,41 @@
+2011-11-17  Ozkan Sezer  <sezeroz@gmail.com>
+
+	Add gdiplus from mingw.org sources: Original work was by Markus Koenig
+	<basilo@users.sourceforge.net>.  Patch to integrate into mingw-w64 was
+	provided by Mark Dootson <mark.dootson@znix.com>.
+
+	* gdiplus.h: New.
+	* gdiplus/gdiplus.h: New.
+	* gdiplus/gdiplusbase.h: New.
+	* gdiplus/gdiplusbrush.h: New.
+	* gdiplus/gdipluscolor.h: New.
+	* gdiplus/gdipluscolormatrix.h: New.
+	* gdiplus/gdipluseffects.h: New.
+	* gdiplus/gdiplusenums.h: New.
+	* gdiplus/gdiplusflat.h: New.
+	* gdiplus/gdiplusgpstubs.h: New.
+	* gdiplus/gdiplusgraphics.h: New.
+	* gdiplus/gdiplusheaders.h: New.
+	* gdiplus/gdiplusimageattributes.h: New.
+	* gdiplus/gdiplusimagecodec.h: New.
+	* gdiplus/gdiplusimaging.h: New.
+	* gdiplus/gdiplusimpl.h: New.
+	* gdiplus/gdiplusinit.h: New.
+	* gdiplus/gdipluslinecaps.h: New.
+	* gdiplus/gdiplusmatrix.h: New.
+	* gdiplus/gdiplusmem.h: New.
+	* gdiplus/gdiplusmetafile.h: New.
+	* gdiplus/gdiplusmetaheader.h: New.
+	* gdiplus/gdipluspath.h: New.
+	* gdiplus/gdipluspen.h: New.
+	* gdiplus/gdipluspixelformats.h: New.
+	* gdiplus/gdiplusstringformat.h: New.
+	* gdiplus/gdiplustypes.h: New.
+	* configure.ac: Add GDIPLUSHEAD_LIST as a new header list.
+	* configure: Regenerate.
+	* Makefile.am: Add gdiplusheaddir and gdiplushead_HEADERS.
+	* Makefile.in: Regenerate.
+
 2011-11-16  Ozkan Sezer  <sezeroz@gmail.com>
 
 	* wincon.h (SetConsoleDisplayMode): Add missing prototype from
diff --git a/mingw-w64-headers/include/gdiplus.h b/mingw-w64-headers/include/gdiplus.h
new file mode 100644
index 0000000..214dd22
--- /dev/null
+++ b/mingw-w64-headers/include/gdiplus.h
@@ -0,0 +1 @@
+#include "gdiplus/gdiplus.h"
diff --git a/mingw-w64-headers/include/gdiplus/gdiplus.h b/mingw-w64-headers/include/gdiplus/gdiplus.h
new file mode 100644
index 0000000..79366ea
--- /dev/null
+++ b/mingw-w64-headers/include/gdiplus/gdiplus.h
@@ -0,0 +1,86 @@
+/*
+ * gdiplus.h
+ *
+ * GDI+ main header
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ *   Created by Markus Koenig <markus@stber-koenig.de>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __GDIPLUS_H
+#define __GDIPLUS_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifndef RC_INVOKED
+
+#include <stddef.h>
+#include <math.h>
+#include <windef.h>
+#include <wingdi.h>
+
+#include <basetyps.h>
+
+#ifndef _COM_interface
+#define _COM_interface struct
+#endif
+
+typedef _COM_interface IStream IStream;
+typedef _COM_interface IDirectDrawSurface7 IDirectDrawSurface7;
+
+#ifdef __cplusplus
+namespace Gdiplus {
+#endif
+
+typedef float REAL;
+typedef SHORT INT16;
+typedef WORD UINT16;
+
+#include "gdiplusenums.h"
+#include "gdiplustypes.h"
+#include "gdiplusgpstubs.h"
+#include "gdiplusimaging.h"
+#include "gdiplusinit.h"
+#include "gdiplusmem.h"
+#include "gdiplusmetaheader.h"
+#include "gdipluspixelformats.h"
+#include "gdipluscolor.h"
+#include "gdipluscolormatrix.h"
+#include "gdiplusflat.h"
+#include "gdipluseffects.h"
+#include "gdiplusimagecodec.h"
+
+#ifdef __cplusplus
+#include "gdiplusbase.h"
+#include "gdiplusheaders.h"
+#include "gdiplusimageattributes.h"
+#include "gdiplusmatrix.h"
+#include "gdiplusbrush.h"
+#include "gdiplusmetafile.h"
+#include "gdipluspen.h"
+#include "gdiplusstringformat.h"
+#include "gdipluspath.h"
+#include "gdiplusgraphics.h"
+#include "gdipluslinecaps.h"
+#include "gdiplusimpl.h"
+
+}  /* namespace Gdiplus */
+#endif /* __cplusplus */
+
+#endif /* !RC_INVOKED */
+
+#endif /* __GDIPLUS_H */
diff --git a/mingw-w64-headers/include/gdiplus/gdiplusbase.h b/mingw-w64-headers/include/gdiplus/gdiplusbase.h
new file mode 100644
index 0000000..e0430d1
--- /dev/null
+++ b/mingw-w64-headers/include/gdiplus/gdiplusbase.h
@@ -0,0 +1,54 @@
+/*
+ * gdiplusbase.h
+ *
+ * GDI+ base class
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ *   Created by Markus Koenig <markus@stber-koenig.de>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __GDIPLUS_BASE_H
+#define __GDIPLUS_BASE_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifndef __cplusplus
+#error "A C++ compiler is required to include gdiplusbase.h."
+#endif
+
+class GdiplusBase
+{
+public:
+	static void* operator new(size_t in_size)
+	{
+		return DllExports::GdipAlloc(in_size);
+	}
+	static void* operator new[](size_t in_size)
+	{
+		return DllExports::GdipAlloc(in_size);
+	}
+	static void operator delete(void *in_pVoid)
+	{
+		DllExports::GdipFree(in_pVoid);
+	}
+	static void operator delete[](void *in_pVoid)
+	{
+		DllExports::GdipFree(in_pVoid);
+	}
+};
+
+#endif /* __GDIPLUS_BASE_H */
diff --git a/mingw-w64-headers/include/gdiplus/gdiplusbrush.h b/mingw-w64-headers/include/gdiplus/gdiplusbrush.h
new file mode 100644
index 0000000..6283705
--- /dev/null
+++ b/mingw-w64-headers/include/gdiplus/gdiplusbrush.h
@@ -0,0 +1,606 @@
+/*
+ * gdiplusbrush.h
+ *
+ * GDI+ brush classes
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ *   Created by Markus Koenig <markus@stber-koenig.de>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __GDIPLUS_BRUSH_H
+#define __GDIPLUS_BRUSH_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifndef __cplusplus
+#error "A C++ compiler is required to include gdiplusbrush.h."
+#endif
+
+class Brush: public GdiplusBase
+{
+	friend class HatchBrush;
+	friend class LinearGradientBrush;
+	friend class PathGradientBrush;
+	friend class SolidBrush;
+	friend class TextureBrush;
+	friend class Graphics;
+	friend class Pen;
+
+public:
+	virtual ~Brush()
+	{
+		DllExports::GdipDeleteBrush(nativeBrush);
+	}
+	virtual Brush* Clone() const  // each subclass must implement this
+	{
+		lastStatus = NotImplemented;
+		return NULL;
+	}
+
+	Status GetLastStatus() const
+	{
+		Status result = lastStatus;
+		lastStatus = Ok;
+		return result;
+	}
+	BrushType GetType() const
+	{
+		BrushType result = BrushTypeSolidColor;
+		updateStatus(DllExports::GdipGetBrushType(nativeBrush, &result));
+		return result;  
+	}
+
+private:
+	Brush(): nativeBrush(NULL), lastStatus(Ok) {}
+	Brush(GpBrush *brush, Status status):
+		nativeBrush(brush), lastStatus(status) {}
+	Brush(const Brush& brush);
+	Brush& operator=(const Brush&);
+
+	Status updateStatus(Status newStatus) const
+	{
+		if (newStatus != Ok) lastStatus = newStatus;
+		return newStatus;
+	}
+
+	GpBrush *nativeBrush;
+	mutable Status lastStatus;
+};
+
+class HatchBrush: public Brush
+{
+public:
+	HatchBrush(HatchStyle hatchStyle,
+			const Color& foreColor,
+			const Color& backColor = Color())
+	{
+		GpHatch *nativeHatch = NULL;
+		lastStatus = DllExports::GdipCreateHatchBrush(hatchStyle,
+				foreColor.GetValue(), backColor.GetValue(),
+				&nativeHatch);
+		nativeBrush = nativeHatch; 
+	}
+	virtual HatchBrush* Clone() const
+	{
+		GpBrush *cloneBrush = NULL;
+		Status status = updateStatus(DllExports::GdipCloneBrush(
+				nativeBrush, &cloneBrush));
+		if (status == Ok) {
+			HatchBrush *result =
+				new HatchBrush(cloneBrush, lastStatus);
+			if (!result) {
+				DllExports::GdipDeleteBrush(cloneBrush);
+				updateStatus(OutOfMemory);
+			}
+			return result;
+		} else {
+			return NULL;
+		}
+	}
+
+	Status GetBackgroundColor(Color *color) const
+	{
+		return updateStatus(DllExports::GdipGetHatchBackgroundColor(
+				(GpHatch*) nativeBrush,
+				color ? &color->Value : NULL));
+	}
+	Status GetForegroundColor(Color *color) const
+	{
+		return updateStatus(DllExports::GdipGetHatchForegroundColor(
+				(GpHatch*) nativeBrush,
+				color ? &color->Value : NULL));
+	}
+	HatchStyle GetHatchStyle() const
+	{
+		HatchStyle result;
+		updateStatus(DllExports::GdipGetHatchStyle(
+				(GpHatch*) nativeBrush, &result));
+		return result;
+	}
+
+private:
+	HatchBrush(GpBrush *brush, Status status): Brush(brush, status) {}
+	HatchBrush(const HatchBrush& brush);
+	HatchBrush& operator=(const HatchBrush&);
+};
+
+class LinearGradientBrush: public Brush
+{
+public:
+	LinearGradientBrush(const PointF& point1, const PointF& point2,
+			const Color& color1, const Color& color2)
+	{
+		GpLineGradient *nativeLineGradient = NULL;
+		lastStatus = DllExports::GdipCreateLineBrush(
+				&point1, &point2,
+				color1.GetValue(), color2.GetValue(),
+				WrapModeTile, &nativeLineGradient);
+		nativeBrush = nativeLineGradient;
+	}
+	LinearGradientBrush(const Point& point1, const Point& point2,
+			const Color& color1, const Color& color2)
+	{
+		GpLineGradient *nativeLineGradient = NULL;
+		lastStatus = DllExports::GdipCreateLineBrushI(
+				&point1, &point2,
+				color1.GetValue(), color2.GetValue(),
+				WrapModeTile, &nativeLineGradient);
+		nativeBrush = nativeLineGradient;
+	}
+	LinearGradientBrush(const RectF& rect, const Color& color1,
+			const Color& color2, LinearGradientMode mode)
+	{
+		GpLineGradient *nativeLineGradient = NULL;
+		lastStatus = DllExports::GdipCreateLineBrushFromRect(
+				&rect, color1.GetValue(), color2.GetValue(),
+				mode, WrapModeTile, &nativeLineGradient);
+		nativeBrush = nativeLineGradient;
+	}
+	LinearGradientBrush(const Rect& rect, const Color& color1,
+			const Color& color2, LinearGradientMode mode)
+	{
+		GpLineGradient *nativeLineGradient = NULL;
+		lastStatus = DllExports::GdipCreateLineBrushFromRectI(
+				&rect, color1.GetValue(), color2.GetValue(),
+				mode, WrapModeTile, &nativeLineGradient);
+		nativeBrush = nativeLineGradient;
+	}
+	LinearGradientBrush(const RectF& rect, const Color& color1,
+			const Color& color2, REAL angle,
+			BOOL isAngleScalable = FALSE)
+	{
+		GpLineGradient *nativeLineGradient = NULL;
+		lastStatus = DllExports::GdipCreateLineBrushFromRectWithAngle(
+				&rect, color1.GetValue(), color2.GetValue(),
+				angle, isAngleScalable, WrapModeTile,
+				&nativeLineGradient);
+		nativeBrush = nativeLineGradient;
+	}
+	LinearGradientBrush(const Rect& rect, const Color& color1,
+			const Color& color2, REAL angle,
+			BOOL isAngleScalable = FALSE)
+	{
+		GpLineGradient *nativeLineGradient = NULL;
+		lastStatus = DllExports::GdipCreateLineBrushFromRectWithAngleI(
+				&rect, color1.GetValue(), color2.GetValue(),
+				angle, isAngleScalable, WrapModeTile,
+				&nativeLineGradient);
+		nativeBrush = nativeLineGradient;
+	}
+	virtual LinearGradientBrush* Clone() const
+	{
+		GpBrush *cloneBrush = NULL;
+		Status status = updateStatus(DllExports::GdipCloneBrush(
+				nativeBrush, &cloneBrush));
+		if (status == Ok) {
+			LinearGradientBrush *result =
+				new LinearGradientBrush(cloneBrush, lastStatus);
+			if (!result) {
+				DllExports::GdipDeleteBrush(cloneBrush);
+				updateStatus(OutOfMemory);
+			}
+			return result;
+		} else {
+			return NULL;
+		}
+	}
+
+	Status GetBlend(REAL *blendFactors, REAL *blendPositions,
+			INT count) const
+	{
+		return updateStatus(DllExports::GdipGetLineBlend(
+				(GpLineGradient*) nativeBrush,
+				blendFactors, blendPositions, count));
+	}
+	INT GetBlendCount() const
+	{
+		INT result = 0;
+		updateStatus(DllExports::GdipGetLineBlendCount(
+				(GpLineGradient*) nativeBrush, &result));
+		return result;
+	}
+	BOOL GetGammaCorrection() const
+	{
+		BOOL result = FALSE;
+		updateStatus(DllExports::GdipGetLineGammaCorrection(
+				(GpLineGradient*) nativeBrush, &result));
+		return result;
+	}
+	INT GetInterpolationColorCount() const
+	{
+		INT result = 0;
+		updateStatus(DllExports::GdipGetLinePresetBlendCount(
+				(GpLineGradient*) nativeBrush, &result));
+		return result;
+	}
+	Status GetInterpolationColors(Color *presetColors,
+			REAL *blendPositions, INT count) const
+	{
+		if (!presetColors || count <= 0)
+			return lastStatus = InvalidParameter;
+
+		ARGB *presetArgb =
+			(ARGB*) DllExports::GdipAlloc(count * sizeof(ARGB));
+		if (!presetArgb)
+			return lastStatus = OutOfMemory;
+
+		Status status = updateStatus(DllExports::GdipGetLinePresetBlend(
+				(GpLineGradient*) nativeBrush, presetArgb,
+				blendPositions, count));
+		for (INT i = 0; i < count; ++i) {
+			presetColors[i].SetValue(presetArgb[i]);
+		}
+		DllExports::GdipFree((void*) presetArgb);
+		return status;
+	}
+	Status GetLinearColors(Color *colors) const
+	{
+		if (!colors) return lastStatus = InvalidParameter;
+
+		ARGB colorsArgb[2];
+		Status status = updateStatus(DllExports::GdipGetLineColors(
+				(GpLineGradient*) nativeBrush, colorsArgb));
+		colors[0].SetValue(colorsArgb[0]);
+		colors[1].SetValue(colorsArgb[1]);
+		return status;
+	}
+	Status GetRectangle(RectF *rect) const
+	{
+		return updateStatus(DllExports::GdipGetLineRect(
+				(GpLineGradient*) nativeBrush, rect));
+	}
+	Status GetRectangle(Rect *rect) const
+	{
+		return updateStatus(DllExports::GdipGetLineRectI(
+				(GpLineGradient*) nativeBrush, rect));
+	}
+	Status GetTransform(Matrix *matrix) const
+	{
+		return updateStatus(DllExports::GdipGetLineTransform(
+				(GpLineGradient*) nativeBrush,
+				matrix ? matrix->nativeMatrix : NULL));
+	}
+	WrapMode GetWrapMode() const
+	{
+		WrapMode wrapMode = WrapModeTile;
+		updateStatus(DllExports::GdipGetLineWrapMode(
+				(GpLineGradient*) nativeBrush, &wrapMode));
+		return wrapMode;
+	}
+	Status MultiplyTransform(const Matrix *matrix,
+			MatrixOrder order = MatrixOrderPrepend)
+	{
+		return updateStatus(DllExports::GdipMultiplyLineTransform(
+				(GpLineGradient*) nativeBrush,
+				matrix ? matrix->nativeMatrix : NULL, order));
+	}
+	Status ResetTransform()
+	{
+		return updateStatus(DllExports::GdipResetLineTransform(
+				(GpLineGradient*) nativeBrush));
+	}
+	Status RotateTranform(REAL angle, MatrixOrder order = MatrixOrderPrepend)
+	{
+		return updateStatus(DllExports::GdipRotateLineTransform(
+				(GpLineGradient*) nativeBrush, angle, order));
+	}
+	Status ScaleTransform(REAL sx, REAL sy,
+			MatrixOrder order = MatrixOrderPrepend)
+	{
+		return updateStatus(DllExports::GdipScaleLineTransform(
+				(GpLineGradient*) nativeBrush, sx, sy, order));
+	}
+	Status SetBlend(const REAL *blendFactors,
+			const REAL *blendPositions, INT count)
+	{
+		return updateStatus(DllExports::GdipSetLineBlend(
+				(GpLineGradient*) nativeBrush,
+				blendFactors, blendPositions, count));
+	}
+	Status SetBlendBellShape(REAL focus, REAL scale = 1.0f)
+	{
+		return updateStatus(DllExports::GdipSetLineSigmaBlend(
+				(GpLineGradient*) nativeBrush,
+				focus, scale));
+	}
+	Status SetBlendTriangularShape(REAL focus, REAL scale = 1.0f)
+	{
+		return updateStatus(DllExports::GdipSetLineLinearBlend(
+				(GpLineGradient*) nativeBrush,
+				focus, scale));
+	}
+	Status SetGammaCorrection(BOOL useGammaCorrection)
+	{
+		return updateStatus(DllExports::GdipSetLineGammaCorrection(
+				(GpLineGradient*) nativeBrush,
+				useGammaCorrection));
+	}
+	Status SetInterpolationColors(const Color *presetColors,
+			const REAL *blendPositions, INT count)
+	{
+		if (!presetColors || count < 0)
+			return lastStatus = InvalidParameter;
+
+		ARGB *presetArgb =
+			(ARGB*) DllExports::GdipAlloc(count * sizeof(ARGB));
+		if (!presetArgb)
+			return lastStatus = OutOfMemory;
+		for (INT i = 0; i < count; ++i) {
+			presetArgb[i] = presetColors[i].GetValue();
+		}
+
+		Status status = updateStatus(DllExports::GdipSetLinePresetBlend(
+				(GpLineGradient*) nativeBrush,
+				presetArgb, blendPositions, count));
+		DllExports::GdipFree((void*) presetArgb);
+		return status;
+	}
+	Status SetLinearColors(const Color& color1, const Color& color2)
+	{
+		return updateStatus(DllExports::GdipSetLineColors(
+				(GpLineGradient*) nativeBrush,
+				color1.GetValue(), color2.GetValue()));
+	}
+	Status SetTransform(const Matrix *matrix)
+	{
+		return updateStatus(DllExports::GdipSetLineTransform(
+				(GpLineGradient*) nativeBrush,
+				matrix ? matrix->nativeMatrix : NULL));
+	}
+	Status SetWrapMode(WrapMode wrapMode)
+	{
+		return updateStatus(DllExports::GdipSetLineWrapMode(
+				(GpLineGradient*) nativeBrush, wrapMode));
+	}
+	Status TranslateTransform(REAL dx, REAL dy,
+			MatrixOrder order = MatrixOrderPrepend)
+	{
+		return updateStatus(DllExports::GdipTranslateLineTransform(
+				(GpLineGradient*) nativeBrush, dx, dy, order));
+	}
+
+private:
+	LinearGradientBrush(GpBrush *brush, Status status): Brush(brush, status) {}
+	LinearGradientBrush(const LinearGradientBrush& brush);
+	LinearGradientBrush& operator=(const LinearGradientBrush&);
+};
+
+class SolidBrush: public Brush
+{
+public:
+	SolidBrush(const Color& color)
+	{
+		GpSolidFill *nativeSolidFill = NULL;
+		lastStatus = DllExports::GdipCreateSolidFill(
+				color.GetValue(), &nativeSolidFill);
+		nativeBrush = nativeSolidFill; 
+	}
+	virtual SolidBrush* Clone() const
+	{
+		GpBrush *cloneBrush = NULL;
+		Status status = updateStatus(DllExports::GdipCloneBrush(
+				nativeBrush, &cloneBrush));
+		if (status == Ok) {
+			SolidBrush *result =
+				new SolidBrush(cloneBrush, lastStatus);
+			if (!result) {
+				DllExports::GdipDeleteBrush(cloneBrush);
+				updateStatus(OutOfMemory);
+			}
+			return result;
+		} else {
+			return NULL;
+		}
+	}
+
+	Status GetColor(Color *color) const
+	{
+		return updateStatus(DllExports::GdipGetSolidFillColor(
+				(GpSolidFill*) nativeBrush,
+				color ? &color->Value : NULL));
+	}
+	Status SetColor(const Color& color)
+	{
+		return updateStatus(DllExports::GdipSetSolidFillColor(
+				(GpSolidFill*) nativeBrush, color.GetValue()));
+	}
+
+private:
+	SolidBrush(GpBrush *brush, Status status): Brush(brush, status) {}
+	SolidBrush(const SolidBrush&);
+	SolidBrush& operator=(const SolidBrush&);
+};
+
+class TextureBrush: public Brush
+{
+public:
+	TextureBrush(Image *image, WrapMode wrapMode = WrapModeTile)
+	{
+		GpTexture *nativeTexture = NULL;
+		lastStatus = DllExports::GdipCreateTexture(
+				image ? image->nativeImage : NULL,
+				wrapMode, &nativeTexture);
+		nativeBrush = nativeTexture;
+	}
+	TextureBrush(Image *image, WrapMode wrapMode,
+			REAL dstX, REAL dstY, REAL dstWidth, REAL dstHeight)
+	{
+		GpTexture *nativeTexture = NULL;
+		lastStatus = DllExports::GdipCreateTexture2(
+				image ? image->nativeImage : NULL,
+				wrapMode, dstX, dstY, dstWidth, dstHeight,
+				&nativeTexture);
+		nativeBrush = nativeTexture;
+	}
+	TextureBrush(Image *image, WrapMode wrapMode,
+			INT dstX, INT dstY, INT dstWidth, INT dstHeight)
+	{
+		GpTexture *nativeTexture = NULL;
+		lastStatus = DllExports::GdipCreateTexture2I(
+				image ? image->nativeImage : NULL,
+				wrapMode, dstX, dstY, dstWidth, dstHeight,
+				&nativeTexture);
+		nativeBrush = nativeTexture;
+	}
+	TextureBrush(Image *image, WrapMode wrapMode, const RectF& dstRect)
+	{
+		GpTexture *nativeTexture = NULL;
+		lastStatus = DllExports::GdipCreateTexture2(
+				image ? image->nativeImage : NULL, wrapMode,
+				dstRect.X, dstRect.Y,
+				dstRect.Width, dstRect.Height, &nativeTexture);
+		nativeBrush = nativeTexture;
+	}
+	TextureBrush(Image *image, WrapMode wrapMode, const Rect& dstRect)
+	{
+		GpTexture *nativeTexture = NULL;
+		lastStatus = DllExports::GdipCreateTexture2I(
+				image ? image->nativeImage : NULL, wrapMode,
+				dstRect.X, dstRect.Y,
+				dstRect.Width, dstRect.Height, &nativeTexture);
+		nativeBrush = nativeTexture;
+	}
+	TextureBrush(Image *image, const RectF& dstRect,
+			ImageAttributes *imageAttributes = NULL)
+	{
+		GpTexture *nativeTexture = NULL;
+		lastStatus = DllExports::GdipCreateTextureIA(
+				image ? image->nativeImage : NULL,
+				imageAttributes ? imageAttributes->nativeImageAttributes : NULL,
+				dstRect.X, dstRect.Y,
+				dstRect.Width, dstRect.Height, &nativeTexture);
+		nativeBrush = nativeTexture;
+	}
+	TextureBrush(Image *image, const Rect& dstRect,
+			ImageAttributes *imageAttributes = NULL)
+	{
+		GpTexture *nativeTexture = NULL;
+		lastStatus = DllExports::GdipCreateTextureIAI(
+				image ? image->nativeImage : NULL,
+				imageAttributes ? imageAttributes->nativeImageAttributes : NULL,
+				dstRect.X, dstRect.Y,
+				dstRect.Width, dstRect.Height, &nativeTexture);
+		nativeBrush = nativeTexture;
+	}
+	virtual TextureBrush* Clone() const
+	{
+		GpBrush *cloneBrush = NULL;
+		Status status = updateStatus(DllExports::GdipCloneBrush(
+				nativeBrush, &cloneBrush));
+		if (status == Ok) {
+			TextureBrush *result =
+				new TextureBrush(cloneBrush, lastStatus);
+			if (!result) {
+				DllExports::GdipDeleteBrush(cloneBrush);
+				updateStatus(OutOfMemory);
+			}
+			return result;
+		} else {
+			return NULL;
+		}
+	}
+
+	//TODO: implement TextureBrush::GetImage()
+	//Image *GetImage() const
+	//{
+	//	// where is the Image allocated (static,member,new,other)?
+	//	// GdipGetTextureImage just returns a GpImage*
+	//	updateStatus(NotImplemented);
+	//	return NULL;
+	//}
+	Status GetTransfrom(Matrix *matrix) const
+	{
+		return updateStatus(DllExports::GdipGetTextureTransform(
+				(GpTexture*) nativeBrush,
+				matrix ? matrix->nativeMatrix : NULL));
+	}
+	WrapMode GetWrapMode() const
+	{
+		WrapMode result = WrapModeTile;
+		updateStatus(DllExports::GdipGetTextureWrapMode(
+				(GpTexture*) nativeBrush, &result));
+		return result;
+	}
+	Status MultiplyTransform(const Matrix *matrix,
+			MatrixOrder order = MatrixOrderPrepend)
+	{
+		return updateStatus(DllExports::GdipMultiplyTextureTransform(
+				(GpTexture*) nativeBrush,
+				matrix ? matrix->nativeMatrix : NULL, order));
+	}
+	Status ResetTransform()
+	{
+		return updateStatus(DllExports::GdipResetTextureTransform(
+				(GpTexture*) nativeBrush));
+	}
+	Status RotateTransform(REAL angle,
+			MatrixOrder order = MatrixOrderPrepend)
+	{
+		return updateStatus(DllExports::GdipRotateTextureTransform(
+				(GpTexture*) nativeBrush, angle, order));
+	}
+	Status ScaleTransform(REAL sx, REAL sy,
+			MatrixOrder order = MatrixOrderPrepend)
+	{
+		return updateStatus(DllExports::GdipScaleTextureTransform(
+				(GpTexture*) nativeBrush, sx, sy, order));
+	}
+	Status SetTransform(const Matrix *matrix)
+	{
+		return updateStatus(DllExports::GdipSetTextureTransform(
+				(GpTexture*) nativeBrush,
+				matrix ? matrix->nativeMatrix : NULL));
+	}
+	Status SetWrapMode(WrapMode wrapMode)
+	{
+		return updateStatus(DllExports::GdipSetTextureWrapMode(
+				(GpTexture*) nativeBrush, wrapMode));
+	}
+	Status TranslateTransform(REAL dx, REAL dy,
+			MatrixOrder order = MatrixOrderPrepend)
+	{
+		return updateStatus(DllExports::GdipTranslateTextureTransform(
+				(GpTexture*) nativeBrush, dx, dy, order));
+	}
+
+private:
+	TextureBrush(GpBrush *brush, Status status): Brush(brush, status) {}
+	TextureBrush(const TextureBrush&);
+	TextureBrush& operator=(const TextureBrush&);
+};
+
+#endif /* __GDIPLUS_BRUSH_H */
diff --git a/mingw-w64-headers/include/gdiplus/gdipluscolor.h b/mingw-w64-headers/include/gdiplus/gdipluscolor.h
new file mode 100644
index 0000000..9f39e59
--- /dev/null
+++ b/mingw-w64-headers/include/gdiplus/gdipluscolor.h
@@ -0,0 +1,262 @@
+/*
+ * gdipluscolor.h
+ *
+ * GDI+ color
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ *   Created by Markus Koenig <markus@stber-koenig.de>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __GDIPLUS_COLOR_H
+#define __GDIPLUS_COLOR_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+typedef enum ColorChannelFlags {
+	ColorChannelFlagsC = 0,
+	ColorChannelFlagsM = 1,
+	ColorChannelFlagsY = 2,
+	ColorChannelFlagsK = 3,
+	ColorChannelFlagsLast = 4
+} ColorChannelFlags;
+
+typedef struct Color
+{
+	#ifdef __cplusplus
+	private:
+	#endif
+	ARGB Value;
+
+	#ifdef __cplusplus
+	public:
+	friend class Bitmap;
+	friend class Graphics;
+	friend class HatchBrush;
+	friend class PathGradientBrush;
+	friend class Pen;
+	friend class SolidBrush;
+
+	static ARGB MakeARGB(BYTE a, BYTE r, BYTE g, BYTE b)
+	{
+		return (ARGB) ((((DWORD) a) << 24) | (((DWORD) r) << 16)
+		             | (((DWORD) g) << 8) | ((DWORD) b));
+	}
+
+	static const ARGB AlphaMask            = 0xFF000000UL;
+
+	static const ARGB AliceBlue            = 0xFFF0F8FFUL;
+	static const ARGB AntiqueWhite         = 0xFFFAEBD7UL;
+	static const ARGB Aqua                 = 0xFF00FFFFUL;
+	static const ARGB Aquamarine           = 0xFF7FFFD4UL;
+	static const ARGB Azure                = 0xFFF0FFFFUL;
+	static const ARGB Beige                = 0xFFF5F5DCUL;
+	static const ARGB Bisque               = 0xFFFFE4C4UL;
+	static const ARGB Black                = 0xFF000000UL;
+	static const ARGB BlanchedAlmond       = 0xFFFFEBCDUL;
+	static const ARGB Blue                 = 0xFF0000FFUL;
+	static const ARGB BlueViolet           = 0xFF8A2BE2UL;
+	static const ARGB Brown                = 0xFFA52A2AUL;
+	static const ARGB BurlyWood            = 0xFFDEB887UL;
+	static const ARGB CadetBlue            = 0xFF5F9EA0UL;
+	static const ARGB Chartreuse           = 0xFF7FFF00UL;
+	static const ARGB Chocolate            = 0xFFD2691EUL;
+	static const ARGB Coral                = 0xFFFF7F50UL;
+	static const ARGB CornflowerBlue       = 0xFF6495EDUL;
+	static const ARGB Cornsilk             = 0xFFFFF8DCUL;
+	static const ARGB Crimson              = 0xFFDC143CUL;
+	static const ARGB Cyan                 = 0xFF00FFFFUL;
+	static const ARGB DarkBlue             = 0xFF00008BUL;
+	static const ARGB DarkCyan             = 0xFF008B8BUL;
+	static const ARGB DarkGoldenrod        = 0xFFB8860BUL;
+	static const ARGB DarkGray             = 0xFFA9A9A9UL;
+	static const ARGB DarkGreen            = 0xFF006400UL;
+	static const ARGB DarkKhaki            = 0xFFBDB76BUL;
+	static const ARGB DarkMagenta          = 0xFF8B008BUL;
+	static const ARGB DarkOliveGreen       = 0xFF556B2FUL;
+	static const ARGB DarkOrange           = 0xFFFF8C00UL;
+	static const ARGB DarkOrchid           = 0xFF9932CCUL;
+	static const ARGB DarkRed              = 0xFF8B0000UL;
+	static const ARGB DarkSalmon           = 0xFFE9967AUL;
+	static const ARGB DarkSeaGreen         = 0xFF8FBC8FUL;
+	static const ARGB DarkSlateBlue        = 0xFF483D8BUL;
+	static const ARGB DarkSlateGray        = 0xFF2F4F4FUL;
+	static const ARGB DarkTurquoise        = 0xFF00CED1UL;
+	static const ARGB DarkViolet           = 0xFF9400D3UL;
+	static const ARGB DeepPink             = 0xFFFF1493UL;
+	static const ARGB DeepSkyBlue          = 0xFF00BFFFUL;
+	static const ARGB DimGray              = 0xFF696969UL;
+	static const ARGB DodgerBlue           = 0xFF1E90FFUL;
+	static const ARGB Firebrick            = 0xFFB22222UL;
+	static const ARGB FloralWhite          = 0xFFFFFAF0UL;
+	static const ARGB ForestGreen          = 0xFF228B22UL;
+	static const ARGB Fuchsia              = 0xFFFF00FFUL;
+	static const ARGB Gainsboro            = 0xFFDCDCDCUL;
+	static const ARGB GhostWhite           = 0xFFF8F8FFUL;
+	static const ARGB Gold                 = 0xFFFFD700UL;
+	static const ARGB Goldenrod            = 0xFFDAA520UL;
+	static const ARGB Gray                 = 0xFF808080UL;
+	static const ARGB Green                = 0xFF008000UL;
+	static const ARGB GreenYellow          = 0xFFADFF2FUL;
+	static const ARGB Honeydew             = 0xFFF0FFF0UL;
+	static const ARGB HotPink              = 0xFFFF69B4UL;
+	static const ARGB IndianRed            = 0xFFCD5C5CUL;
+	static const ARGB Indigo               = 0xFF4B0082UL;
+	static const ARGB Ivory                = 0xFFFFFFF0UL;
+	static const ARGB Khaki                = 0xFFF0E68CUL;
+	static const ARGB Lavender             = 0xFFE6E6FAUL;
+	static const ARGB LavenderBlush        = 0xFFFFF0F5UL;
+	static const ARGB LawnGreen            = 0xFF7CFC00UL;
+	static const ARGB LemonChiffon         = 0xFFFFFACDUL;
+	static const ARGB LightBlue            = 0xFFADD8E6UL;
+	static const ARGB LightCoral           = 0xFFF08080UL;
+	static const ARGB LightCyan            = 0xFFE0FFFFUL;
+	static const ARGB LightGoldenrodYellow = 0xFFFAFAD2UL;
+	static const ARGB LightGray            = 0xFFD3D3D3UL;
+	static const ARGB LightGreen           = 0xFF90EE90UL;
+	static const ARGB LightPink            = 0xFFFFB6C1UL;
+	static const ARGB LightSalmon          = 0xFFFFA07AUL;
+	static const ARGB LightSeaGreen        = 0xFF20B2AAUL;
+	static const ARGB LightSkyBlue         = 0xFF87CEFAUL;
+	static const ARGB LightSlateGray       = 0xFF778899UL;
+	static const ARGB LightSteelBlue       = 0xFFB0C4DEUL;
+	static const ARGB LightYellow          = 0xFFFFFFE0UL;
+	static const ARGB Lime                 = 0xFF00FF00UL;
+	static const ARGB LimeGreen            = 0xFF32CD32UL;
+	static const ARGB Linen                = 0xFFFAF0E6UL;
+	static const ARGB Magenta              = 0xFFFF00FFUL;
+	static const ARGB Maroon               = 0xFF800000UL;
+	static const ARGB MediumAquamarine     = 0xFF66CDAAUL;
+	static const ARGB MediumBlue           = 0xFF0000CDUL;
+	static const ARGB MediumOrchid         = 0xFFBA55D3UL;
+	static const ARGB MediumPurple         = 0xFF9370DBUL;
+	static const ARGB MediumSeaGreen       = 0xFF3CB371UL;
+	static const ARGB MediumSlateBlue      = 0xFF7B68EEUL;
+	static const ARGB MediumSpringGreen    = 0xFF00FA9AUL;
+	static const ARGB MediumTurquoise      = 0xFF48D1CCUL;
+	static const ARGB MediumVioletRed      = 0xFFC71585UL;
+	static const ARGB MidnightBlue         = 0xFF191970UL;
+	static const ARGB MintCream            = 0xFFF5FFFAUL;
+	static const ARGB MistyRose            = 0xFFFFE4E1UL;
+	static const ARGB Moccasin             = 0xFFFFE4B5UL;
+	static const ARGB NavajoWhite          = 0xFFFFDEADUL;
+	static const ARGB Navy                 = 0xFF000080UL;
+	static const ARGB OldLace              = 0xFFFDF5E6UL;
+	static const ARGB Olive                = 0xFF808000UL;
+	static const ARGB OliveDrab            = 0xFF6B8E23UL;
+	static const ARGB Orange               = 0xFFFFA500UL;
+	static const ARGB OrangeRed            = 0xFFFF4500UL;
+	static const ARGB Orchid               = 0xFFDA70D6UL;
+	static const ARGB PaleGoldenrod        = 0xFFEEE8AAUL;
+	static const ARGB PaleGreen            = 0xFF98FB98UL;
+	static const ARGB PaleTurquoise        = 0xFFAFEEEEUL;
+	static const ARGB PaleVioletRed        = 0xFFDB7093UL;
+	static const ARGB PapayaWhip           = 0xFFFFEFD5UL;
+	static const ARGB PeachPuff            = 0xFFFFDAB9UL;
+	static const ARGB Peru                 = 0xFFCD853FUL;
+	static const ARGB Pink                 = 0xFFFFC0CBUL;
+	static const ARGB Plum                 = 0xFFDDA0DDUL;
+	static const ARGB PowderBlue           = 0xFFB0E0E6UL;
+	static const ARGB Purple               = 0xFF800080UL;
+	static const ARGB Red                  = 0xFFFF0000UL;
+	static const ARGB RosyBrown            = 0xFFBC8F8FUL;
+	static const ARGB RoyalBlue            = 0xFF4169E1UL;
+	static const ARGB SaddleBrown          = 0xFF8B4513UL;
+	static const ARGB Salmon               = 0xFFFA8072UL;
+	static const ARGB SandyBrown           = 0xFFF4A460UL;
+	static const ARGB SeaGreen             = 0xFF2E8B57UL;
+	static const ARGB SeaShell             = 0xFFFFF5EEUL;
+	static const ARGB Sienna               = 0xFFA0522DUL;
+	static const ARGB Silver               = 0xFFC0C0C0UL;
+	static const ARGB SkyBlue              = 0xFF87CEEBUL;
+	static const ARGB SlateBlue            = 0xFF6A5ACDUL;
+	static const ARGB SlateGray            = 0xFF708090UL;
+	static const ARGB Snow                 = 0xFFFFFAFAUL;
+	static const ARGB SpringGreen          = 0xFF00FF7FUL;
+	static const ARGB SteelBlue            = 0xFF4682B4UL;
+	static const ARGB Tan                  = 0xFFD2B48CUL;
+	static const ARGB Teal                 = 0xFF008080UL;
+	static const ARGB Thistle              = 0xFFD8BFD8UL;
+	static const ARGB Tomato               = 0xFFFF6347UL;
+	static const ARGB Transparent          = 0x00FFFFFFUL;
+	static const ARGB Turquoise            = 0xFF40E0D0UL;
+	static const ARGB Violet               = 0xFFEE82EEUL;
+	static const ARGB Wheat                = 0xFFF5DEB3UL;
+	static const ARGB White                = 0xFFFFFFFFUL;
+	static const ARGB WhiteSmoke           = 0xFFF5F5F5UL;
+	static const ARGB Yellow               = 0xFFFFFF00UL;
+	static const ARGB YellowGreen          = 0xFF9ACD32UL;
+
+	Color(): Value(0xFF000000) {}
+	Color(ARGB argb): Value(argb) {}
+	Color(BYTE r, BYTE g, BYTE b): Value(MakeARGB(0xFF, r, g, b)) {}
+	Color(BYTE a, BYTE r, BYTE g, BYTE b): Value(MakeARGB(a, r, g, b)) {}
+
+	BYTE GetA() const
+	{
+		return (BYTE) (Value >> 24);
+	}
+	BYTE GetAlpha() const
+	{
+		return (BYTE) (Value >> 24);
+	}
+	BYTE GetB() const
+	{
+		return (BYTE) Value;
+	}
+	BYTE GetBlue() const
+	{
+		return (BYTE) Value;
+	}
+	BYTE GetG() const
+	{
+		return (BYTE) (Value >> 8);
+	}
+	BYTE GetGreen() const
+	{
+		return (BYTE) (Value >> 8);
+	}
+	BYTE GetR() const
+	{
+		return (BYTE) (Value >> 16);
+	}
+	BYTE GetRed() const
+	{
+		return (BYTE) (Value >> 16);
+	}
+	ARGB GetValue() const
+	{
+		return Value;
+	}
+	VOID SetFromCOLORREF(COLORREF rgb)
+	{
+		BYTE r = (BYTE) rgb;
+		BYTE g = (BYTE) (rgb >> 8);
+		BYTE b = (BYTE) (rgb >> 16);
+		Value = MakeARGB(0xFF, r, g, b);
+	}
+	VOID SetValue(ARGB argb)
+	{
+		Value = argb;
+	}
+	COLORREF ToCOLORREF() const
+	{
+		return RGB(GetRed(), GetGreen(), GetBlue());
+	}
+	#endif /* __cplusplus */
+} Color;
+
+#endif /* __GDIPLUS_COLOR_H */
diff --git a/mingw-w64-headers/include/gdiplus/gdipluscolormatrix.h b/mingw-w64-headers/include/gdiplus/gdipluscolormatrix.h
new file mode 100644
index 0000000..c01113d
--- /dev/null
+++ b/mingw-w64-headers/include/gdiplus/gdipluscolormatrix.h
@@ -0,0 +1,67 @@
+/*
+ * gdipluscolormatrix.h
+ *
+ * GDI+ color mappings
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ *   Created by Markus Koenig <markus@stber-koenig.de>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __GDIPLUS_COLORMATRIX_H
+#define __GDIPLUS_COLORMATRIX_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+typedef enum ColorAdjustType {
+	ColorAdjustTypeDefault = 0,
+	ColorAdjustTypeBitmap = 1,
+	ColorAdjustTypeBrush = 2,
+	ColorAdjustTypePen = 3,
+	ColorAdjustTypeText = 4,
+	ColorAdjustTypeCount = 5,
+	ColorAdjustTypeAny = 6
+} ColorAdjustType;
+
+typedef enum ColorMatrixFlags {
+	ColorMatrixFlagsDefault = 0,
+	ColorMatrixFlagsSkipGrays = 1,
+	ColorMatrixFlagsAltGray = 2
+} ColorMatrixFlags;
+
+typedef enum HistogramFormat {
+	HistogramFormatARGB = 0,
+	HistogramFormatPARGB = 1,
+	HistogramFormatRGB = 2,
+	HistogramFormatGray = 3,
+	HistogramFormatB = 4,
+	HistogramFormatG = 5,
+	HistogramFormatR = 6,
+	HistogramFormatA = 7
+} HistogramFormat;
+
+typedef struct ColorMap {
+	Color oldColor;
+	Color newColor;
+} ColorMap;
+
+typedef struct ColorMatrix {
+	REAL m[5][5];
+} ColorMatrix;
+
+typedef BYTE ColorChannelLUT[256];
+
+#endif /* __GDIPLUS_COLORMATRIX_H */
diff --git a/mingw-w64-headers/include/gdiplus/gdipluseffects.h b/mingw-w64-headers/include/gdiplus/gdipluseffects.h
new file mode 100644
index 0000000..7f51aea
--- /dev/null
+++ b/mingw-w64-headers/include/gdiplus/gdipluseffects.h
@@ -0,0 +1,116 @@
+/*
+ * gdipluseffects.h
+ *
+ * GDI+ filters and effects
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ *   Created by Markus Koenig <markus@stber-koenig.de>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __GDIPLUS_EFFECTS_H
+#define __GDIPLUS_EFFECTS_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+typedef enum CurveAdjustments {
+	AdjustExposure = 0,
+	AdjustDensity = 1,
+	AdjustContrast = 2,
+	AdjustHighlight = 3,
+	AdjustShadow = 4,
+	AdjustMidtone = 5,
+	AdjustWhiteSaturation = 6,
+	AdjustBlackSaturation = 7
+} CurveAdjustments;
+
+typedef enum CurveChannel {
+	CurveChannelAll = 0,
+	CurveChannelRed = 1,
+	CurveChannelGreen = 2,
+	CurveChannelBlue = 3
+} CurveChannel;
+
+typedef struct BlurParams {
+	REAL radius;
+	BOOL expandEdge;
+} BlurParams;
+
+typedef struct BrightnessContrastParams {
+	INT brightnessLevel;
+	INT contrastLevel;
+} BrightnessContrastParams;
+
+typedef struct ColorBalanceParams {
+	INT cyanRed;
+	INT magentaGreen;
+	INT yellowBlue;
+} ColorBalanceParams;
+
+typedef struct ColorCurveParams {
+	CurveAdjustments adjustment;
+	CurveChannel channel;
+	INT adjustValue;
+} ColorCurveParams;
+
+typedef struct ColorLUTParams {
+	ColorChannelLUT lutB;
+	ColorChannelLUT lutG;
+	ColorChannelLUT lutR;
+	ColorChannelLUT lutA;
+} ColorLUTParams;
+
+typedef struct HueSaturationLightnessParams {
+	INT hueLevel;
+	INT saturationLevel;
+	INT lightnessLevel;
+} HueSaturationLightnessParams;
+
+typedef struct LevelsParams {
+	INT highlight;
+	INT midtone;
+	INT shadow;
+} LevelsParams;
+
+typedef struct RedEyeCorrectionParams {
+	UINT numberOfAreas;
+	RECT *areas;
+} RedEyeCorrectionParams;
+
+typedef struct SharpenParams {
+	REAL radius;
+	REAL amount;
+} SharpenParams;
+
+typedef struct TintParams {
+	INT hue;
+	INT amount;
+} TintParams;
+
+extern const GUID BlurEffectGuid;                    /* ? */
+extern const GUID BrightnessContrastEffectGuid;      /* ? */
+extern const GUID ColorBalanceEffectGuid;            /* ? */
+extern const GUID ColorCurveEffectGuid;              /* ? */
+extern const GUID ColorLUTEffectGuid;                /* ? */
+extern const GUID ColorMatrixEffectGuid;             /* ? */
+extern const GUID HueSaturationLightnessEffectGuid;  /* ? */
+extern const GUID LevelsEffectGuid;                  /* ? */
+extern const GUID RedEyeCorrectionEffectGuid;        /* ? */
+extern const GUID SharpenEffectGuid;                 /* ? */
+extern const GUID TintEffectGuid;                    /* ? */
+
+
+#endif /* __GDIPLUS_EFFECTS_H */
diff --git a/mingw-w64-headers/include/gdiplus/gdiplusenums.h b/mingw-w64-headers/include/gdiplus/gdiplusenums.h
new file mode 100644
index 0000000..e4e1656
--- /dev/null
+++ b/mingw-w64-headers/include/gdiplus/gdiplusenums.h
@@ -0,0 +1,755 @@
+/*
+ * gdiplusenums.h
+ *
+ * GDI+ enumerations
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ *   Created by Markus Koenig <markus@stber-koenig.de>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __GDIPLUS_ENUMS_H
+#define __GDIPLUS_ENUMS_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+typedef enum BrushType {
+	BrushTypeSolidColor = 0,
+	BrushTypeHatchFill = 1,
+	BrushTypeTextureFill = 2,
+	BrushTypePathGradient = 3,
+	BrushTypeLinearGradient = 4
+} BrushType;
+
+typedef enum CombineMode {
+	CombineModeReplace = 0,
+	CombineModeIntersect = 1,
+	CombineModeUnion = 2,
+	CombineModeXor = 3,
+	CombineModeExclude = 4,
+	CombineModeComplement = 5
+} CombineMode;
+
+typedef enum CompositingMode {
+	CompositingModeSourceOver = 0,
+	CompositingModeSourceCopy = 1
+} CompositingMode;
+
+typedef enum CompositingQuality {
+	CompositingQualityDefault = 0,
+	CompositingQualityHighSpeed = 1,
+	CompositingQualityHighQuality = 2,
+	CompositingQualityGammaCorrected = 3,
+	CompositingQualityAssumeLinear = 4
+} CompositingQuality;
+
+typedef enum CoordinateSpace {
+	CoordinateSpaceWorld = 0,
+	CoordinateSpacePage = 1,
+	CoordinateSpaceDevice = 2
+} CoordinateSpace;
+
+typedef enum CustomLineCapType {
+	CustomLineCapTypeDefault = 0,
+	CustomLineCapTypeAdjustableArrow = 1
+} CustomLineCapType;
+
+typedef enum DashCap {
+	DashCapFlat = 0,
+	DashCapRound = 2,
+	DashCapTriangle = 3
+} DashCap;
+
+typedef enum DashStyle {
+	DashStyleSolid = 0,
+	DashStyleDash = 1,
+	DashStyleDot = 2,
+	DashStyleDashDot = 3,
+	DashStyleDashDotDot = 4,
+	DashStyleCustom = 5
+} DashStyle;
+
+typedef enum DitherType {
+	DitherTypeNone = 0,
+	DitherTypeSolid = 1,
+	DitherTypeOrdered4x4 = 2,
+	DitherTypeOrdered8x8 = 3,
+	DitherTypeOrdered16x16 = 4,
+	DitherTypeOrdered91x91 = 5,
+	DitherTypeSpiral4x4 = 6,
+	DitherTypeSpiral8x8 = 7,
+	DitherTypeDualSpiral4x4 = 8,
+	DitherTypeDualSpiral8x8 = 9,
+	DitherTypeErrorDiffusion = 10
+} DitherType;
+
+typedef enum DriverStringOptions {
+	DriverStringOptionsCmapLookup = 1,
+	DriverStringOptionsVertical = 2,
+	DriverStringOptionsRealizedAdvance = 4,
+	DriverStringOptionsLimitSubpixel = 8
+} DriverStringOptions;
+
+#define GDIP_WMF_RECORD_TO_EMFPLUS(meta) ((meta) | 0x10000)
+#define GDIP_EMFPLUS_RECORD_BASE (0x4000)
+typedef enum EmfPlusRecordType {
+	WmfRecordTypeSetBkColor                    = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETBKCOLOR),
+	WmfRecordTypeSetBkMode                     = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETBKMODE),
+	WmfRecordTypeSetMapMode                    = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETMAPMODE),
+	WmfRecordTypeSetROP2                       = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETROP2),
+	WmfRecordTypeSetRelAbs                     = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETRELABS),
+	WmfRecordTypeSetPolyFillMode               = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETPOLYFILLMODE),
+	WmfRecordTypeSetStretchBltMode             = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETSTRETCHBLTMODE),
+	WmfRecordTypeSetTextCharExtra              = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETTEXTCHAREXTRA),
+	WmfRecordTypeSetTextColor                  = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETTEXTCOLOR),
+	WmfRecordTypeSetTextJustification          = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETTEXTJUSTIFICATION),
+	WmfRecordTypeSetWindowOrg                  = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETWINDOWORG),
+	WmfRecordTypeSetWindowExt                  = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETWINDOWEXT),
+	WmfRecordTypeSetViewportOrg                = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETVIEWPORTORG),
+	WmfRecordTypeSetViewportExt                = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETVIEWPORTEXT),
+	WmfRecordTypeOffsetWindowOrg               = GDIP_WMF_RECORD_TO_EMFPLUS(META_OFFSETWINDOWORG),
+	WmfRecordTypeScaleWindowExt                = GDIP_WMF_RECORD_TO_EMFPLUS(META_SCALEWINDOWEXT),
+	WmfRecordTypeOffsetViewportOrg             = GDIP_WMF_RECORD_TO_EMFPLUS(META_OFFSETVIEWPORTORG),
+	WmfRecordTypeScaleViewportExt              = GDIP_WMF_RECORD_TO_EMFPLUS(META_SCALEVIEWPORTEXT),
+	WmfRecordTypeLineTo                        = GDIP_WMF_RECORD_TO_EMFPLUS(META_LINETO),
+	WmfRecordTypeMoveTo                        = GDIP_WMF_RECORD_TO_EMFPLUS(META_MOVETO),
+	WmfRecordTypeExcludeClipRect               = GDIP_WMF_RECORD_TO_EMFPLUS(META_EXCLUDECLIPRECT),
+	WmfRecordTypeIntersectClipRect             = GDIP_WMF_RECORD_TO_EMFPLUS(META_INTERSECTCLIPRECT),
+	WmfRecordTypeArc                           = GDIP_WMF_RECORD_TO_EMFPLUS(META_ARC),
+	WmfRecordTypeEllipse                       = GDIP_WMF_RECORD_TO_EMFPLUS(META_ELLIPSE),
+	WmfRecordTypeFloodFill                     = GDIP_WMF_RECORD_TO_EMFPLUS(META_FLOODFILL),
+	WmfRecordTypePie                           = GDIP_WMF_RECORD_TO_EMFPLUS(META_PIE),
+	WmfRecordTypeRectangle                     = GDIP_WMF_RECORD_TO_EMFPLUS(META_RECTANGLE),
+	WmfRecordTypeRoundRect                     = GDIP_WMF_RECORD_TO_EMFPLUS(META_ROUNDRECT),
+	WmfRecordTypePatBlt                        = GDIP_WMF_RECORD_TO_EMFPLUS(META_PATBLT),
+	WmfRecordTypeSaveDC                        = GDIP_WMF_RECORD_TO_EMFPLUS(META_SAVEDC),
+	WmfRecordTypeSetPixel                      = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETPIXEL),
+	WmfRecordTypeOffsetClipRgn                 = GDIP_WMF_RECORD_TO_EMFPLUS(META_OFFSETCLIPRGN),
+	WmfRecordTypeTextOut                       = GDIP_WMF_RECORD_TO_EMFPLUS(META_TEXTOUT),
+	WmfRecordTypeBitBlt                        = GDIP_WMF_RECORD_TO_EMFPLUS(META_BITBLT),
+	WmfRecordTypeStretchBlt                    = GDIP_WMF_RECORD_TO_EMFPLUS(META_STRETCHBLT),
+	WmfRecordTypePolygon                       = GDIP_WMF_RECORD_TO_EMFPLUS(META_POLYGON),
+	WmfRecordTypePolyline                      = GDIP_WMF_RECORD_TO_EMFPLUS(META_POLYLINE),
+	WmfRecordTypeEscape                        = GDIP_WMF_RECORD_TO_EMFPLUS(META_ESCAPE),
+	WmfRecordTypeRestoreDC                     = GDIP_WMF_RECORD_TO_EMFPLUS(META_RESTOREDC),
+	WmfRecordTypeFillRegion                    = GDIP_WMF_RECORD_TO_EMFPLUS(META_FILLREGION),
+	WmfRecordTypeFrameRegion                   = GDIP_WMF_RECORD_TO_EMFPLUS(META_FRAMEREGION),
+	WmfRecordTypeInvertRegion                  = GDIP_WMF_RECORD_TO_EMFPLUS(META_INVERTREGION),
+	WmfRecordTypePaintRegion                   = GDIP_WMF_RECORD_TO_EMFPLUS(META_PAINTREGION),
+	WmfRecordTypeSelectClipRegion              = GDIP_WMF_RECORD_TO_EMFPLUS(META_SELECTCLIPREGION),
+	WmfRecordTypeSelectObject                  = GDIP_WMF_RECORD_TO_EMFPLUS(META_SELECTOBJECT),
+	WmfRecordTypeSetTextAlign                  = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETTEXTALIGN),
+	WmfRecordTypeDrawText                      = GDIP_WMF_RECORD_TO_EMFPLUS(0x062F),
+	WmfRecordTypeChord                         = GDIP_WMF_RECORD_TO_EMFPLUS(META_CHORD),
+	WmfRecordTypeSetMapperFlags                = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETMAPPERFLAGS),
+	WmfRecordTypeExtTextOut                    = GDIP_WMF_RECORD_TO_EMFPLUS(META_EXTTEXTOUT),
+	WmfRecordTypeSetDIBToDev                   = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETDIBTODEV),
+	WmfRecordTypeSelectPalette                 = GDIP_WMF_RECORD_TO_EMFPLUS(META_SELECTPALETTE),
+	WmfRecordTypeRealizePalette                = GDIP_WMF_RECORD_TO_EMFPLUS(META_REALIZEPALETTE),
+	WmfRecordTypeAnimatePalette                = GDIP_WMF_RECORD_TO_EMFPLUS(META_ANIMATEPALETTE),
+	WmfRecordTypeSetPalEntries                 = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETPALENTRIES),
+	WmfRecordTypePolyPolygon                   = GDIP_WMF_RECORD_TO_EMFPLUS(META_POLYPOLYGON),
+	WmfRecordTypeResizePalette                 = GDIP_WMF_RECORD_TO_EMFPLUS(META_RESIZEPALETTE),
+	WmfRecordTypeDIBBitBlt                     = GDIP_WMF_RECORD_TO_EMFPLUS(META_DIBBITBLT),
+	WmfRecordTypeDIBStretchBlt                 = GDIP_WMF_RECORD_TO_EMFPLUS(META_DIBSTRETCHBLT),
+	WmfRecordTypeDIBCreatePatternBrush         = GDIP_WMF_RECORD_TO_EMFPLUS(META_DIBCREATEPATTERNBRUSH),
+	WmfRecordTypeStretchDIB                    = GDIP_WMF_RECORD_TO_EMFPLUS(META_STRETCHDIB),
+	WmfRecordTypeExtFloodFill                  = GDIP_WMF_RECORD_TO_EMFPLUS(META_EXTFLOODFILL),
+	WmfRecordTypeSetLayout                     = GDIP_WMF_RECORD_TO_EMFPLUS(0x0149),
+	WmfRecordTypeResetDC                       = GDIP_WMF_RECORD_TO_EMFPLUS(0x014C),
+	WmfRecordTypeStartDoc                      = GDIP_WMF_RECORD_TO_EMFPLUS(0x014D),
+	WmfRecordTypeStartPage                     = GDIP_WMF_RECORD_TO_EMFPLUS(0x004F),
+	WmfRecordTypeEndPage                       = GDIP_WMF_RECORD_TO_EMFPLUS(0x0050),
+	WmfRecordTypeAbortDoc                      = GDIP_WMF_RECORD_TO_EMFPLUS(0x0052),
+	WmfRecordTypeEndDoc                        = GDIP_WMF_RECORD_TO_EMFPLUS(0x005E),
+	WmfRecordTypeDeleteObject                  = GDIP_WMF_RECORD_TO_EMFPLUS(META_DELETEOBJECT),
+	WmfRecordTypeCreatePalette                 = GDIP_WMF_RECORD_TO_EMFPLUS(META_CREATEPALETTE),
+	WmfRecordTypeCreateBrush                   = GDIP_WMF_RECORD_TO_EMFPLUS(0x00F8),
+	WmfRecordTypeCreatePatternBrush            = GDIP_WMF_RECORD_TO_EMFPLUS(META_CREATEPATTERNBRUSH),
+	WmfRecordTypeCreatePenIndirect             = GDIP_WMF_RECORD_TO_EMFPLUS(META_CREATEPENINDIRECT),
+	WmfRecordTypeCreateFontIndirect            = GDIP_WMF_RECORD_TO_EMFPLUS(META_CREATEFONTINDIRECT),
+	WmfRecordTypeCreateBrushIndirect           = GDIP_WMF_RECORD_TO_EMFPLUS(META_CREATEBRUSHINDIRECT),
+	WmfRecordTypeCreateBitmapIndirect          = GDIP_WMF_RECORD_TO_EMFPLUS(0x02FD),
+	WmfRecordTypeCreateBitmap                  = GDIP_WMF_RECORD_TO_EMFPLUS(0x06FE),
+	WmfRecordTypeCreateRegion                  = GDIP_WMF_RECORD_TO_EMFPLUS(META_CREATEREGION),
+	EmfRecordTypeHeader                        = EMR_HEADER,
+	EmfRecordTypePolyBezier                    = EMR_POLYBEZIER,
+	EmfRecordTypePolygon                       = EMR_POLYGON,
+	EmfRecordTypePolyline                      = EMR_POLYLINE,
+	EmfRecordTypePolyBezierTo                  = EMR_POLYBEZIERTO,
+	EmfRecordTypePolyLineTo                    = EMR_POLYLINETO,
+	EmfRecordTypePolyPolyline                  = EMR_POLYPOLYLINE,
+	EmfRecordTypePolyPolygon                   = EMR_POLYPOLYGON,
+	EmfRecordTypeSetWindowExtEx                = EMR_SETWINDOWEXTEX,
+	EmfRecordTypeSetWindowOrgEx                = EMR_SETWINDOWORGEX,
+	EmfRecordTypeSetViewportExtEx              = EMR_SETVIEWPORTEXTEX,
+	EmfRecordTypeSetViewportOrgEx              = EMR_SETVIEWPORTORGEX,
+	EmfRecordTypeSetBrushOrgEx                 = EMR_SETBRUSHORGEX,
+	EmfRecordTypeEOF                           = EMR_EOF,
+	EmfRecordTypeSetPixelV                     = EMR_SETPIXELV,
+	EmfRecordTypeSetMapperFlags                = EMR_SETMAPPERFLAGS,
+	EmfRecordTypeSetMapMode                    = EMR_SETMAPMODE,
+	EmfRecordTypeSetBkMode                     = EMR_SETBKMODE,
+	EmfRecordTypeSetPolyFillMode               = EMR_SETPOLYFILLMODE,
+	EmfRecordTypeSetROP2                       = EMR_SETROP2,
+	EmfRecordTypeSetStretchBltMode             = EMR_SETSTRETCHBLTMODE,
+	EmfRecordTypeSetTextAlign                  = EMR_SETTEXTALIGN,
+	EmfRecordTypeSetColorAdjustment            = EMR_SETCOLORADJUSTMENT,
+	EmfRecordTypeSetTextColor                  = EMR_SETTEXTCOLOR,
+	EmfRecordTypeSetBkColor                    = EMR_SETBKCOLOR,
+	EmfRecordTypeOffsetClipRgn                 = EMR_OFFSETCLIPRGN,
+	EmfRecordTypeMoveToEx                      = EMR_MOVETOEX,
+	EmfRecordTypeSetMetaRgn                    = EMR_SETMETARGN,
+	EmfRecordTypeExcludeClipRect               = EMR_EXCLUDECLIPRECT,
+	EmfRecordTypeIntersectClipRect             = EMR_INTERSECTCLIPRECT,
+	EmfRecordTypeScaleViewportExtEx            = EMR_SCALEVIEWPORTEXTEX,
+	EmfRecordTypeScaleWindowExtEx              = EMR_SCALEWINDOWEXTEX,
+	EmfRecordTypeSaveDC                        = EMR_SAVEDC,
+	EmfRecordTypeRestoreDC                     = EMR_RESTOREDC,
+	EmfRecordTypeSetWorldTransform             = EMR_SETWORLDTRANSFORM,
+	EmfRecordTypeModifyWorldTransform          = EMR_MODIFYWORLDTRANSFORM,
+	EmfRecordTypeSelectObject                  = EMR_SELECTOBJECT,
+	EmfRecordTypeCreatePen                     = EMR_CREATEPEN,
+	EmfRecordTypeCreateBrushIndirect           = EMR_CREATEBRUSHINDIRECT,
+	EmfRecordTypeDeleteObject                  = EMR_DELETEOBJECT,
+	EmfRecordTypeAngleArc                      = EMR_ANGLEARC,
+	EmfRecordTypeEllipse                       = EMR_ELLIPSE,
+	EmfRecordTypeRectangle                     = EMR_RECTANGLE,
+	EmfRecordTypeRoundRect                     = EMR_ROUNDRECT,
+	EmfRecordTypeArc                           = EMR_ARC,
+	EmfRecordTypeChord                         = EMR_CHORD,
+	EmfRecordTypePie                           = EMR_PIE,
+	EmfRecordTypeSelectPalette                 = EMR_SELECTPALETTE,
+	EmfRecordTypeCreatePalette                 = EMR_CREATEPALETTE,
+	EmfRecordTypeSetPaletteEntries             = EMR_SETPALETTEENTRIES,
+	EmfRecordTypeResizePalette                 = EMR_RESIZEPALETTE,
+	EmfRecordTypeRealizePalette                = EMR_REALIZEPALETTE,
+	EmfRecordTypeExtFloodFill                  = EMR_EXTFLOODFILL,
+	EmfRecordTypeLineTo                        = EMR_LINETO,
+	EmfRecordTypeArcTo                         = EMR_ARCTO,
+	EmfRecordTypePolyDraw                      = EMR_POLYDRAW,
+	EmfRecordTypeSetArcDirection               = EMR_SETARCDIRECTION,
+	EmfRecordTypeSetMiterLimit                 = EMR_SETMITERLIMIT,
+	EmfRecordTypeBeginPath                     = EMR_BEGINPATH,
+	EmfRecordTypeEndPath                       = EMR_ENDPATH,
+	EmfRecordTypeCloseFigure                   = EMR_CLOSEFIGURE,
+	EmfRecordTypeFillPath                      = EMR_FILLPATH,
+	EmfRecordTypeStrokeAndFillPath             = EMR_STROKEANDFILLPATH,
+	EmfRecordTypeStrokePath                    = EMR_STROKEPATH,
+	EmfRecordTypeFlattenPath                   = EMR_FLATTENPATH,
+	EmfRecordTypeWidenPath                     = EMR_WIDENPATH,
+	EmfRecordTypeSelectClipPath                = EMR_SELECTCLIPPATH,
+	EmfRecordTypeAbortPath                     = EMR_ABORTPATH,
+	EmfRecordTypeReserved_069                  = 69,
+	EmfRecordTypeGdiComment                    = EMR_GDICOMMENT,
+	EmfRecordTypeFillRgn                       = EMR_FILLRGN,
+	EmfRecordTypeFrameRgn                      = EMR_FRAMERGN,
+	EmfRecordTypeInvertRgn                     = EMR_INVERTRGN,
+	EmfRecordTypePaintRgn                      = EMR_PAINTRGN,
+	EmfRecordTypeExtSelectClipRgn              = EMR_EXTSELECTCLIPRGN,
+	EmfRecordTypeBitBlt                        = EMR_BITBLT,
+	EmfRecordTypeStretchBlt                    = EMR_STRETCHBLT,
+	EmfRecordTypeMaskBlt                       = EMR_MASKBLT,
+	EmfRecordTypePlgBlt                        = EMR_PLGBLT,
+	EmfRecordTypeSetDIBitsToDevice             = EMR_SETDIBITSTODEVICE,
+	EmfRecordTypeStretchDIBits                 = EMR_STRETCHDIBITS,
+	EmfRecordTypeExtCreateFontIndirect         = EMR_EXTCREATEFONTINDIRECTW,
+	EmfRecordTypeExtTextOutA                   = EMR_EXTTEXTOUTA,
+	EmfRecordTypeExtTextOutW                   = EMR_EXTTEXTOUTW,
+	EmfRecordTypePolyBezier16                  = EMR_POLYBEZIER16,
+	EmfRecordTypePolygon16                     = EMR_POLYGON16,
+	EmfRecordTypePolyline16                    = EMR_POLYLINE16,
+	EmfRecordTypePolyBezierTo16                = EMR_POLYBEZIERTO16,
+	EmfRecordTypePolylineTo16                  = EMR_POLYLINETO16,
+	EmfRecordTypePolyPolyline16                = EMR_POLYPOLYLINE16,
+	EmfRecordTypePolyPolygon16                 = EMR_POLYPOLYGON16,
+	EmfRecordTypePolyDraw16                    = EMR_POLYDRAW16,
+	EmfRecordTypeCreateMonoBrush               = EMR_CREATEMONOBRUSH,
+	EmfRecordTypeCreateDIBPatternBrushPt       = EMR_CREATEDIBPATTERNBRUSHPT,
+	EmfRecordTypeExtCreatePen                  = EMR_EXTCREATEPEN,
+	EmfRecordTypePolyTextOutA                  = EMR_POLYTEXTOUTA,
+	EmfRecordTypePolyTextOutW                  = EMR_POLYTEXTOUTW,
+	EmfRecordTypeSetICMMode                    = 98,
+	EmfRecordTypeCreateColorSpace              = 99,
+	EmfRecordTypeSetColorSpace                 = 100,
+	EmfRecordTypeDeleteColorSpace              = 101,
+	EmfRecordTypeGLSRecord                     = 102,
+	EmfRecordTypeGLSBoundedRecord              = 103,
+	EmfRecordTypePixelFormat                   = 104,
+	EmfRecordTypeDrawEscape                    = 105,
+	EmfRecordTypeExtEscape                     = 106,
+	EmfRecordTypeStartDoc                      = 107,
+	EmfRecordTypeSmallTextOut                  = 108,
+	EmfRecordTypeForceUFIMapping               = 109,
+	EmfRecordTypeNamedEscape                   = 110,
+	EmfRecordTypeColorCorrectPalette           = 111,
+	EmfRecordTypeSetICMProfileA                = 112,
+	EmfRecordTypeSetICMProfileW                = 113,
+	EmfRecordTypeAlphaBlend                    = 114,
+	EmfRecordTypeSetLayout                     = 115,
+	EmfRecordTypeTransparentBlt                = 116,
+	EmfRecordTypeReserved_117                  = 117,
+	EmfRecordTypeGradientFill                  = 118,
+	EmfRecordTypeSetLinkedUFIs                 = 119,
+	EmfRecordTypeSetTextJustification          = 120,
+	EmfRecordTypeColorMatchToTargetW           = 121,
+	EmfRecordTypeCreateColorSpaceW             = 122,
+	EmfRecordTypeMax                           = 122,
+	EmfRecordTypeMin                           = 1,
+	EmfPlusRecordTypeInvalid                   = GDIP_EMFPLUS_RECORD_BASE,
+	EmfPlusRecordTypeHeader,
+	EmfPlusRecordTypeEndOfFile,
+	EmfPlusRecordTypeComment,
+	EmfPlusRecordTypeGetDC,
+	EmfPlusRecordTypeMultiFormatStart,
+	EmfPlusRecordTypeMultiFormatSection,
+	EmfPlusRecordTypeMultiFormatEnd,
+	EmfPlusRecordTypeObject,
+	EmfPlusRecordTypeClear,
+	EmfPlusRecordTypeFillRects,
+	EmfPlusRecordTypeDrawRects,
+	EmfPlusRecordTypeFillPolygon,
+	EmfPlusRecordTypeDrawLines,
+	EmfPlusRecordTypeFillEllipse,
+	EmfPlusRecordTypeDrawEllipse,
+	EmfPlusRecordTypeFillPie,
+	EmfPlusRecordTypeDrawPie,
+	EmfPlusRecordTypeDrawArc,
+	EmfPlusRecordTypeFillRegion,
+	EmfPlusRecordTypeFillPath,
+	EmfPlusRecordTypeDrawPath,
+	EmfPlusRecordTypeFillClosedCurve,
+	EmfPlusRecordTypeDrawClosedCurve,
+	EmfPlusRecordTypeDrawCurve,
+	EmfPlusRecordTypeDrawBeziers,
+	EmfPlusRecordTypeDrawImage,
+	EmfPlusRecordTypeDrawImagePoints,
+	EmfPlusRecordTypeDrawString,
+	EmfPlusRecordTypeSetRenderingOrigin,
+	EmfPlusRecordTypeSetAntiAliasMode,
+	EmfPlusRecordTypeSetTextRenderingHint,
+	EmfPlusRecordTypeSetTextContrast,
+	EmfPlusRecordTypeSetGammaValue,
+	EmfPlusRecordTypeSetInterpolationMode,
+	EmfPlusRecordTypeSetPixelOffsetMode,
+	EmfPlusRecordTypeSetCompositingMode,
+	EmfPlusRecordTypeSetCompositingQuality,
+	EmfPlusRecordTypeSave,
+	EmfPlusRecordTypeRestore,
+	EmfPlusRecordTypeBeginContainer,
+	EmfPlusRecordTypeBeginContainerNoParams,
+	EmfPlusRecordTypeEndContainer,
+	EmfPlusRecordTypeSetWorldTransform,
+	EmfPlusRecordTypeResetWorldTransform,
+	EmfPlusRecordTypeMultiplyWorldTransform,
+	EmfPlusRecordTypeTranslateWorldTransform,
+	EmfPlusRecordTypeScaleWorldTransform,
+	EmfPlusRecordTypeRotateWorldTransform,
+	EmfPlusRecordTypeSetPageTransform,
+	EmfPlusRecordTypeResetClip,
+	EmfPlusRecordTypeSetClipRect,
+	EmfPlusRecordTypeSetClipPath,
+	EmfPlusRecordTypeSetClipRegion,
+	EmfPlusRecordTypeOffsetClip,
+	EmfPlusRecordTypeDrawDriverString,
+	EmfPlusRecordTypeStrokeFillPath,
+	EmfPlusRecordTypeSerializableObject,
+	EmfPlusRecordTypeSetTSGraphics,
+	EmfPlusRecordTypeSetTSClip,
+	EmfPlusRecordTotal,
+	EmfPlusRecordTypeMax = EmfPlusRecordTotal-1,
+	EmfPlusRecordTypeMin = EmfPlusRecordTypeHeader
+} EmfPlusRecordType;
+
+typedef enum EmfToWmfBitsFlags {
+	EmfToWmfBitsFlagsDefault = 0,
+	EmfToWmfBitsFlagsEmbedEmf = 1,
+	EmfToWmfBitsFlagsIncludePlaceable = 2,
+	EmfToWmfBitsFlagsNoXORClip = 4
+} EmfToWmfBitsFlags;
+
+typedef enum EmfType {
+	EmfTypeEmfOnly = 3,
+	EmfTypeEmfPlusOnly = 4,
+	EmfTypeEmfPlusDual = 5
+} EmfType;
+
+typedef enum EncoderParameterValueType {
+	EncoderParameterValueTypeByte = 1,
+	EncoderParameterValueTypeASCII = 2,
+	EncoderParameterValueTypeShort = 3,
+	EncoderParameterValueTypeLong = 4,
+	EncoderParameterValueTypeRational = 5,
+	EncoderParameterValueTypeLongRange = 6,
+	EncoderParameterValueTypeUndefined = 7,
+	EncoderParameterValueTypeRationalRange = 8,
+	EncoderParameterValueTypePointer = 9
+} EncoderParameterValueType;
+
+typedef enum EncoderValue {
+	EncoderValueColorTypeCMYK = 0,
+	EncoderValueColorTypeYCCK = 1,
+	EncoderValueCompressionLZW = 2,
+	EncoderValueCompressionCCITT3 = 3,
+	EncoderValueCompressionCCITT4 = 4,
+	EncoderValueCompressionRle = 5,
+	EncoderValueCompressionNone = 6,
+	EncoderValueScanMethodInterlaced = 7,
+	EncoderValueScanMethodNonInterlaced = 8,
+	EncoderValueVersionGif87 = 9,
+	EncoderValueVersionGif89 = 10,
+	EncoderValueRenderProgressive = 11,
+	EncoderValueRenderNonProgressive = 12,
+	EncoderValueTransformRotate90 = 13,
+	EncoderValueTransformRotate180 = 14,
+	EncoderValueTransformRotate270 = 15,
+	EncoderValueTransformFlipHorizontal = 16,
+	EncoderValueTransformFlipVertical = 17,
+	EncoderValueMultiFrame = 18,
+	EncoderValueLastFrame = 19,
+	EncoderValueFlush = 20,
+	EncoderValueFrameDimensionTime = 21,
+	EncoderValueFrameDimensionResolution = 22,
+	EncoderValueFrameDimensionPage = 23
+} EncoderValue;
+
+typedef enum FillMode {
+	FillModeAlternate = 0,
+	FillModeWinding = 1
+} FillMode;
+
+typedef enum FlushIntention {
+	FlushIntentionFlush = 0,
+	FlushIntentionSync = 1
+} FlushIntention;
+
+typedef enum FontStyle {
+	FontStyleRegular = 0,
+	FontStyleBold = 1,
+	FontStyleItalic = 2,
+	FontStyleBoldItalic = 3,
+	FontStyleUnderline = 4,
+	FontStyleStrikeout = 8
+} FontStyle;
+
+typedef enum HatchStyle {
+	HatchStyleHorizontal = 0,
+	HatchStyleVertical = 1,
+	HatchStyleForwardDiagonal = 2,
+	HatchStyleBackwardDiagonal = 3,
+	HatchStyleCross = 4,
+	HatchStyleLargeGrid = 4,
+	HatchStyleDiagonalCross = 5,
+	HatchStyle05Percent = 6,
+	HatchStyle10Percent = 7,
+	HatchStyle20Percent = 8,
+	HatchStyle25Percent = 9,
+	HatchStyle30Percent = 10,
+	HatchStyle40Percent = 11,
+	HatchStyle50Percent = 12,
+	HatchStyle60Percent = 13,
+	HatchStyle70Percent = 14,
+	HatchStyle75Percent = 15,
+	HatchStyle80Percent = 16,
+	HatchStyle90Percent = 17,
+	HatchStyleLightDownwardDiagonal = 18,
+	HatchStyleLightUpwardDiagonal = 19,
+	HatchStyleDarkDownwardDiagonal = 20,
+	HatchStyleDarkUpwardDiagonal = 21,
+	HatchStyleWideDownwardDiagonal = 22,
+	HatchStyleWideUpwardDiagonal = 23,
+	HatchStyleLightVertical = 24,
+	HatchStyleLightHorizontal = 25,
+	HatchStyleNarrowVertical = 26,
+	HatchStyleNarrowHorizontal = 27,
+	HatchStyleDarkVertical = 28,
+	HatchStyleDarkHorizontal = 29,
+	HatchStyleDashedDownwardDiagonal = 30,
+	HatchStyleDashedUpwardDiagonal = 31,
+	HatchStyleDashedHorizontal = 32,
+	HatchStyleDashedVertical = 33,
+	HatchStyleSmallConfetti = 34,
+	HatchStyleLargeConfetti = 35,
+	HatchStyleZigZag = 36,
+	HatchStyleWave = 37,
+	HatchStyleDiagonalBrick = 38,
+	HatchStyleHorizontalBrick = 39,
+	HatchStyleWeave = 40,
+	HatchStylePlaid = 41,
+	HatchStyleDivot = 42,
+	HatchStyleDottedGrid = 43,
+	HatchStyleDottedDiamond = 44,
+	HatchStyleShingle = 45,
+	HatchStyleTrellis = 46,
+	HatchStyleSphere = 47,
+	HatchStyleSmallGrid = 48,
+	HatchStyleSmallCheckerBoard = 49,
+	HatchStyleLargeCheckerBoard = 50,
+	HatchStyleOutlinedDiamond = 51,
+	HatchStyleSolidDiamond = 52,
+	HatchStyleTotal = 53,
+	HatchStyleMin = HatchStyleHorizontal,
+	HatchStyleMax = HatchStyleTotal - 1
+} HatchStyle;
+
+typedef enum HotkeyPrefix {
+	HotkeyPrefixNone = 0,
+	HotkeyPrefixShow = 1,
+	HotkeyPrefixHide = 2
+} HotkeyPrefix;
+
+typedef enum ImageType {
+	ImageTypeUnknown = 0,
+	ImageTypeBitmap = 1,
+	ImageTypeMetafile = 2
+} ImageType;
+
+/* TODO: InterpolationMode */
+typedef enum InterpolationMode {
+	/*InterpolationModeInvalid = QualityModeInvalid,*/
+	InterpolationModeDefault = 0,
+	InterpolationModeLowQuality = 1,
+	InterpolationModeHighQuality = 2,
+	InterpolationModeBilinear = 3,
+	InterpolationModeBicubic = 4,
+	InterpolationModeNearestNeighbor = 5,
+	InterpolationModeHighQualityBilinear = 6,
+	InterpolationModeHighQualityBicubic = 7
+} InterpolationMode;
+
+typedef enum LinearGradientMode {
+	LinearGradientModeHorizontal = 0,
+	LinearGradientModeVertical = 1,
+	LinearGradientModeForwardDiagonal = 2,
+	LinearGradientModeBackwardDiagonal = 3 
+} LinearGradientMode;
+
+typedef enum LineCap {
+	LineCapFlat = 0,
+	LineCapSquare = 1,
+	LineCapRound = 2,
+	LineCapTriangle = 3,
+	LineCapNoAnchor = 16,
+	LineCapSquareAnchor = 17,
+	LineCapRoundAnchor = 18,
+	LineCapDiamondAnchor = 19,
+	LineCapArrowAnchor = 20,
+	LineCapCustom = 255
+} LineCap;
+
+typedef enum LineJoin {
+	LineJoinMiter = 0,
+	LineJoinBevel = 1,
+	LineJoinRound = 2,
+	LineJoinMiterClipped = 3
+} LineJoin;
+
+typedef enum MatrixOrder {
+	MatrixOrderPrepend = 0,
+	MatrixOrderAppend = 1
+} MatrixOrder;
+
+typedef enum MetafileFrameUnit {
+	MetafileFrameUnitPixel = 2,
+	MetafileFrameUnitPoint = 3,
+	MetafileFrameUnitInch = 4,
+	MetafileFrameUnitDocument = 5,
+	MetafileFrameUnitMillimeter = 6,
+	MetafileFrameUnitGdi = 7
+} MetafileFrameUnit;
+
+typedef enum MetafileType {
+	MetafileTypeInvalid = 0,
+	MetafileTypeWmf = 1,
+	MetafileTypeWmfPlaceable = 2,
+	MetafileTypeEmf = 3,
+	MetafileTypeEmfPlusOnly = 4,
+	MetafileTypeEmfPlusDual = 5
+} MetafileType;
+
+typedef enum ObjectType {
+	ObjectTypeInvalid = 0,
+	ObjectTypeBrush = 1,
+	ObjectTypePen = 2,
+	ObjectTypePath = 3,
+	ObjectTypeRegion = 4,
+	ObjectTypeFont = 5,
+	ObjectTypeStringFormat = 6,
+	ObjectTypeImageAttributes = 7,
+	ObjectTypeCustomLineCap = 8,
+	ObjectTypeGraphics = 9,
+	ObjectTypeMin = ObjectTypeBrush,
+	ObjectTypeMax = ObjectTypeGraphics
+} ObjectType;
+
+typedef enum PathPointType {
+	PathPointTypeStart = 0x00,
+	PathPointTypeLine = 0x01,
+	PathPointTypeBezier = 0x03,
+	PathPointTypeBezier3 = 0x03,
+	PathPointTypePathTypeMask = 0x07,
+	PathPointTypePathDashMode = 0x10,
+	PathPointTypePathMarker = 0x20,
+	PathPointTypeCloseSubpath = 0x80
+} PathPointType;
+
+typedef enum PenAlignment {
+	PenAlignmentCenter = 0,
+	PenAlignmentInset = 1
+} PenAlignment;
+
+typedef enum PenType {
+	PenTypeUnknown = -1, 
+	PenTypeSolidColor = 0,
+	PenTypeHatchFill = 1,
+	PenTypeTextureFill = 2,
+	PenTypePathGradient = 3,
+	PenTypeLinearGradient = 4
+} PenType;
+
+/* TODO: PixelOffsetMode */
+typedef enum PixelOffsetMode {
+	/*PixelOffsetModeInvalid = QualityModeInvalid,*/
+	PixelOffsetModeDefault = 0,
+	PixelOffsetModeHighSpeed = 1,
+	PixelOffsetModeHighQuality = 2,
+	PixelOffsetModeNone = 3,
+	PixelOffsetModeHalf = 4
+} PixelOffsetMode;
+
+/* TODO: QualityMode */
+typedef enum QualityMode {
+	/*QualityModeInvalid = ?,*/
+	QualityModeDefault = 0,
+	QualityModeLow = 1,
+	QualityModeHigh = 2
+} QualityMode;
+
+/* TODO: SmoothingMode */
+typedef enum SmoothingMode {
+	/*SmoothingModeInvalid = QualityModeInvalid,*/
+	SmoothingModeDefault = 0,
+	SmoothingModeHighSpeed = 1,
+	SmoothingModeHighQuality = 2,
+	SmoothingModeNone = 3,
+	SmoothingModeAntiAlias8x4 = 4,
+	SmoothingModeAntiAlias = 4,
+	SmoothingModeAntiAlias8x8 = 5
+} SmoothingMode;
+
+typedef enum StringAlignment {
+	StringAlignmentNear = 0,
+	StringAlignmentCenter = 1,
+	StringAlignmentFar = 2
+} StringAlignment;
+
+typedef enum StringDigitSubstitute {
+	StringDigitSubstituteUser = 0,
+	StringDigitSubstituteNone = 1,
+	StringDigitSubstituteNational = 2,
+	StringDigitSubstituteTraditional = 3
+} StringDigitSubstitute;
+
+typedef enum StringFormatFlags {
+	StringFormatFlagsDirectionRightToLeft = 0x00000001,
+	StringFormatFlagsDirectionVertical = 0x00000002,
+	StringFormatFlagsNoFitBlackBox = 0x00000004,
+	StringFormatFlagsDisplayFormatControl = 0x00000020,
+	StringFormatFlagsNoFontFallback = 0x00000400,
+	StringFormatFlagsMeasureTrailingSpaces = 0x00000800,
+	StringFormatFlagsNoWrap = 0x00001000,
+	StringFormatFlagsLineLimit = 0x00002000,
+	StringFormatFlagsNoClip = 0x00004000
+} StringFormatFlags;
+
+typedef enum StringTrimming {
+	StringTrimmingNone = 0,
+	StringTrimmingCharacter = 1,
+	StringTrimmingWord = 2,
+	StringTrimmingEllipsisCharacter = 3,
+	StringTrimmingEllipsisWord = 4,
+	StringTrimmingEllipsisPath = 5
+} StringTrimming;
+
+typedef enum TextRenderingHint {
+	TextRenderingHintSystemDefault = 0,
+	TextRenderingHintSingleBitPerPixelGridFit = 1,
+	TextRenderingHintSingleBitPerPixel = 2,
+	TextRenderingHintAntiAliasGridFit = 3,
+	TextRenderingHintAntiAlias = 4,
+	TextRenderingHintClearTypeGridFit = 5
+} TextRenderingHint;
+
+typedef enum Unit {
+	UnitWorld = 0,
+	UnitDisplay = 1,
+	UnitPixel = 2,
+	UnitPoint = 3,
+	UnitInch = 4,
+	UnitDocument = 5,
+	UnitMillimeter = 6
+} Unit;
+
+typedef enum WarpMode {
+	WarpModePerspective = 0,
+	WarpModeBilinear = 1
+} WarpMode;
+
+typedef enum WrapMode {
+	WrapModeTile = 0,
+	WrapModeTileFlipX = 1,
+	WrapModeTileFlipY = 2,
+	WrapModeTileFlipXY = 3,
+	WrapModeClamp = 4
+} WrapMode;
+
+typedef enum GpTestControlEnum {
+	TestControlForceBilinear = 0,
+	TestControlForceNoICM = 1,
+	TestControlGetBuildNumber = 2
+} GpTestControlEnum;
+
+/* Opaque handles to information blocks on an internal GDI+ stack. */
+typedef DWORD GraphicsContainer;
+typedef DWORD GraphicsState;
+
+/* Default flatness for GraphicsPath methods Flatten, Outline, Warp, Widen */
+/* FIXME: Is FlatnessDefault = 0.25f correct? */
+#ifdef __cplusplus
+const REAL FlatnessDefault = 0.25f;
+#else
+#define FlatnessDefault ((REAL) 0.25f)
+#endif
+
+static __inline__ BOOL ObjectTypeIsValid(ObjectType type)
+{
+	switch (type) {
+		case ObjectTypeBrush:
+		case ObjectTypePen:
+		case ObjectTypePath:
+		case ObjectTypeRegion:
+		case ObjectTypeFont:
+		case ObjectTypeStringFormat:
+		case ObjectTypeImageAttributes:
+		case ObjectTypeCustomLineCap:
+		case ObjectTypeGraphics:
+			return TRUE;
+		default:
+			return FALSE;
+	}
+}
+
+#endif /* __GDIPLUS_ENUMS_H */
diff --git a/mingw-w64-headers/include/gdiplus/gdiplusflat.h b/mingw-w64-headers/include/gdiplus/gdiplusflat.h
new file mode 100644
index 0000000..5747834
--- /dev/null
+++ b/mingw-w64-headers/include/gdiplus/gdiplusflat.h
@@ -0,0 +1,722 @@
+/*
+ * gdiplusflat.h
+ *
+ * GDI+ Flat API
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ *   Created by Markus Koenig <markus@stber-koenig.de>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __GDIPLUS_FLAT_H
+#define __GDIPLUS_FLAT_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+namespace DllExports {
+extern "C" {
+#endif
+
+/* AdjustableArrowCap functions */
+GpStatus WINGDIPAPI GdipCreateAdjustableArrowCap(REAL,REAL,BOOL,GpAdjustableArrowCap**);
+GpStatus WINGDIPAPI GdipSetAdjustableArrowCapHeight(GpAdjustableArrowCap*,REAL);
+GpStatus WINGDIPAPI GdipGetAdjustableArrowCapHeight(GpAdjustableArrowCap*,REAL*);
+GpStatus WINGDIPAPI GdipSetAdjustableArrowCapWidth(GpAdjustableArrowCap*,REAL);
+GpStatus WINGDIPAPI GdipGetAdjustableArrowCapWidth(GpAdjustableArrowCap*,REAL*);
+GpStatus WINGDIPAPI GdipSetAdjustableArrowCapMiddleInset(GpAdjustableArrowCap*,REAL);
+GpStatus WINGDIPAPI GdipGetAdjustableArrowCapMiddleInset(GpAdjustableArrowCap*,REAL*);
+GpStatus WINGDIPAPI GdipSetAdjustableArrowCapFillState(GpAdjustableArrowCap*,BOOL);
+GpStatus WINGDIPAPI GdipGetAdjustableArrowCapFillState(GpAdjustableArrowCap*,BOOL*);
+
+/* Bitmap functions */
+GpStatus WINGDIPAPI GdipCreateBitmapFromStream(IStream*,GpBitmap**);
+GpStatus WINGDIPAPI GdipCreateBitmapFromFile(GDIPCONST WCHAR*,GpBitmap**);
+GpStatus WINGDIPAPI GdipCreateBitmapFromStreamICM(IStream*,GpBitmap**);
+GpStatus WINGDIPAPI GdipCreateBitmapFromFileICM(GDIPCONST WCHAR*,GpBitmap**);
+GpStatus WINGDIPAPI GdipCreateBitmapFromScan0(INT,INT,INT,PixelFormat,BYTE*,GpBitmap**);
+GpStatus WINGDIPAPI GdipCreateBitmapFromGraphics(INT,INT,GpGraphics*,GpBitmap**);
+GpStatus WINGDIPAPI GdipCreateBitmapFromDirectDrawSurface(IDirectDrawSurface7*,GpBitmap**);
+GpStatus WINGDIPAPI GdipCreateBitmapFromGdiDib(GDIPCONST BITMAPINFO*,VOID*,GpBitmap**);
+GpStatus WINGDIPAPI GdipCreateBitmapFromHBITMAP(HBITMAP,HPALETTE,GpBitmap**);
+GpStatus WINGDIPAPI GdipCreateHBITMAPFromBitmap(GpBitmap*,HBITMAP*,ARGB);
+GpStatus WINGDIPAPI GdipCreateBitmapFromHICON(HICON,GpBitmap**);
+GpStatus WINGDIPAPI GdipCreateHICONFromBitmap(GpBitmap*,HICON*);
+GpStatus WINGDIPAPI GdipCreateBitmapFromResource(HINSTANCE,GDIPCONST WCHAR*,GpBitmap**);
+GpStatus WINGDIPAPI GdipCloneBitmapArea(REAL,REAL,REAL,REAL,PixelFormat,GpBitmap*,GpBitmap**);
+GpStatus WINGDIPAPI GdipCloneBitmapAreaI(INT,INT,INT,INT,PixelFormat,GpBitmap*,GpBitmap**);
+GpStatus WINGDIPAPI GdipBitmapLockBits(GpBitmap*,GDIPCONST GpRect*,UINT,PixelFormat,BitmapData*);
+GpStatus WINGDIPAPI GdipBitmapUnlockBits(GpBitmap*,BitmapData*);
+GpStatus WINGDIPAPI GdipBitmapGetPixel(GpBitmap*,INT,INT,ARGB*);
+GpStatus WINGDIPAPI GdipBitmapSetPixel(GpBitmap*,INT,INT,ARGB);
+GpStatus WINGDIPAPI GdipBitmapSetResolution(GpBitmap*,REAL,REAL);
+GpStatus WINGDIPAPI GdipBitmapConvertFormat(GpBitmap*,PixelFormat,DitherType,PaletteType,ColorPalette*,REAL);
+GpStatus WINGDIPAPI GdipInitializePalette(ColorPalette*,PaletteType,INT,BOOL,GpBitmap*);
+GpStatus WINGDIPAPI GdipBitmapApplyEffect(GpBitmap*,CGpEffect*,RECT*,BOOL,VOID**,INT*);
+GpStatus WINGDIPAPI GdipBitmapCreateApplyEffect(GpBitmap**,INT,CGpEffect*,RECT*,RECT*,GpBitmap**,BOOL,VOID**,INT*);
+GpStatus WINGDIPAPI GdipBitmapGetHistogram(GpBitmap*,HistogramFormat,UINT,UINT*,UINT*,UINT*,UINT*);
+GpStatus WINGDIPAPI GdipBitmapGetHistogramSize(HistogramFormat,UINT*);
+
+/* Brush functions */
+GpStatus WINGDIPAPI GdipCloneBrush(GpBrush*,GpBrush**);
+GpStatus WINGDIPAPI GdipDeleteBrush(GpBrush*);
+GpStatus WINGDIPAPI GdipGetBrushType(GpBrush*,GpBrushType*);
+
+/* CachedBitmap functions */
+GpStatus WINGDIPAPI GdipCreateCachedBitmap(GpBitmap*,GpGraphics*,GpCachedBitmap**);
+GpStatus WINGDIPAPI GdipDeleteCachedBitmap(GpCachedBitmap*);
+GpStatus WINGDIPAPI GdipDrawCachedBitmap(GpGraphics*,GpCachedBitmap*,INT,INT);
+
+/* CustomLineCap functions */
+GpStatus WINGDIPAPI GdipCreateCustomLineCap(GpPath*,GpPath*,GpLineCap,REAL,GpCustomLineCap**);
+GpStatus WINGDIPAPI GdipDeleteCustomLineCap(GpCustomLineCap*);
+GpStatus WINGDIPAPI GdipCloneCustomLineCap(GpCustomLineCap*,GpCustomLineCap**);
+GpStatus WINGDIPAPI GdipGetCustomLineCapType(GpCustomLineCap*,CustomLineCapType*);
+GpStatus WINGDIPAPI GdipSetCustomLineCapStrokeCaps(GpCustomLineCap*,GpLineCap,GpLineCap);
+GpStatus WINGDIPAPI GdipGetCustomLineCapStrokeCaps(GpCustomLineCap*,GpLineCap*,GpLineCap*);
+GpStatus WINGDIPAPI GdipSetCustomLineCapStrokeJoin(GpCustomLineCap*,GpLineJoin);
+GpStatus WINGDIPAPI GdipGetCustomLineCapStrokeJoin(GpCustomLineCap*,GpLineJoin*);
+GpStatus WINGDIPAPI GdipSetCustomLineCapBaseCap(GpCustomLineCap*,GpLineCap);
+GpStatus WINGDIPAPI GdipGetCustomLineCapBaseCap(GpCustomLineCap*,GpLineCap*);
+GpStatus WINGDIPAPI GdipSetCustomLineCapBaseInset(GpCustomLineCap*,REAL);
+GpStatus WINGDIPAPI GdipGetCustomLineCapBaseInset(GpCustomLineCap*,REAL*);
+GpStatus WINGDIPAPI GdipSetCustomLineCapWidthScale(GpCustomLineCap*,REAL);
+GpStatus WINGDIPAPI GdipGetCustomLineCapWidthScale(GpCustomLineCap*,REAL*);
+
+/* Effect functions */
+GpStatus WINGDIPAPI GdipCreateEffect(GDIPCONST GUID,CGpEffect**);
+GpStatus WINGDIPAPI GdipDeleteEffect(CGpEffect*);
+GpStatus WINGDIPAPI GdipGetEffectParameterSize(CGpEffect*,UINT*);
+GpStatus WINGDIPAPI GdipSetEffectParameters(CGpEffect*,GDIPCONST VOID*,UINT);
+GpStatus WINGDIPAPI GdipGetEffectParameters(CGpEffect*,UINT*,VOID*);
+
+/* Font functions */
+GpStatus WINGDIPAPI GdipCreateFontFromDC(HDC,GpFont**);
+GpStatus WINGDIPAPI GdipCreateFontFromLogfontA(HDC,GDIPCONST LOGFONTA*,GpFont**);
+GpStatus WINGDIPAPI GdipCreateFontFromLogfontW(HDC,GDIPCONST LOGFONTW*,GpFont**);
+GpStatus WINGDIPAPI GdipCreateFont(GDIPCONST GpFontFamily*,REAL,INT,Unit,GpFont**);
+GpStatus WINGDIPAPI GdipCloneFont(GpFont*,GpFont**);
+GpStatus WINGDIPAPI GdipDeleteFont(GpFont*);
+GpStatus WINGDIPAPI GdipGetFamily(GpFont*,GpFontFamily**);
+GpStatus WINGDIPAPI GdipGetFontStyle(GpFont*,INT*);
+GpStatus WINGDIPAPI GdipGetFontSize(GpFont*,REAL*);
+GpStatus WINGDIPAPI GdipGetFontUnit(GpFont*,Unit*);
+GpStatus WINGDIPAPI GdipGetFontHeight(GDIPCONST GpFont*,GDIPCONST GpGraphics*,REAL*);
+GpStatus WINGDIPAPI GdipGetFontHeightGivenDPI(GDIPCONST GpFont*,REAL,REAL*);
+GpStatus WINGDIPAPI GdipGetLogFontA(GpFont*,GpGraphics*,LOGFONTA*);
+GpStatus WINGDIPAPI GdipGetLogFontW(GpFont*,GpGraphics*,LOGFONTW*);
+GpStatus WINGDIPAPI GdipNewInstalledFontCollection(GpFontCollection**);
+GpStatus WINGDIPAPI GdipNewPrivateFontCollection(GpFontCollection**);
+GpStatus WINGDIPAPI GdipDeletePrivateFontCollection(GpFontCollection**);
+GpStatus WINGDIPAPI GdipGetFontCollectionFamilyCount(GpFontCollection*,INT*);
+GpStatus WINGDIPAPI GdipGetFontCollectionFamilyList(GpFontCollection*,INT,GpFontFamily**,INT*);
+GpStatus WINGDIPAPI GdipPrivateAddFontFile(GpFontCollection*,GDIPCONST WCHAR*);
+GpStatus WINGDIPAPI GdipPrivateAddMemoryFont(GpFontCollection*,GDIPCONST void*,INT);
+
+/* FontFamily functions */
+GpStatus WINGDIPAPI GdipCreateFontFamilyFromName(GDIPCONST WCHAR*,GpFontCollection*,GpFontFamily**);
+GpStatus WINGDIPAPI GdipDeleteFontFamily(GpFontFamily*);
+GpStatus WINGDIPAPI GdipCloneFontFamily(GpFontFamily*,GpFontFamily**);
+GpStatus WINGDIPAPI GdipGetGenericFontFamilySansSerif(GpFontFamily**);
+GpStatus WINGDIPAPI GdipGetGenericFontFamilySerif(GpFontFamily**);
+GpStatus WINGDIPAPI GdipGetGenericFontFamilyMonospace(GpFontFamily**);
+GpStatus WINGDIPAPI GdipGetFamilyName(GDIPCONST GpFontFamily*,WCHAR[LF_FACESIZE],LANGID);
+GpStatus WINGDIPAPI GdipIsStyleAvailable(GDIPCONST GpFontFamily*,INT,BOOL*);
+GpStatus WINGDIPAPI GdipFontCollectionEnumerable(GpFontCollection*,GpGraphics*,INT*);
+GpStatus WINGDIPAPI GdipFontCollectionEnumerate(GpFontCollection*,INT,GpFontFamily**,INT*,GpGraphics*);
+GpStatus WINGDIPAPI GdipGetEmHeight(GDIPCONST GpFontFamily*,INT,UINT16*);
+GpStatus WINGDIPAPI GdipGetCellAscent(GDIPCONST GpFontFamily*,INT,UINT16*);
+GpStatus WINGDIPAPI GdipGetCellDescent(GDIPCONST GpFontFamily*,INT,UINT16*);
+GpStatus WINGDIPAPI GdipGetLineSpacing(GDIPCONST GpFontFamily*,INT,UINT16*);
+
+/* Graphics functions */
+GpStatus WINGDIPAPI GdipFlush(GpGraphics*,GpFlushIntention);
+GpStatus WINGDIPAPI GdipCreateFromHDC(HDC,GpGraphics**);
+GpStatus WINGDIPAPI GdipCreateFromHDC2(HDC,HANDLE,GpGraphics**);
+GpStatus WINGDIPAPI GdipCreateFromHWND(HWND,GpGraphics**);
+GpStatus WINGDIPAPI GdipCreateFromHWNDICM(HWND,GpGraphics**);
+GpStatus WINGDIPAPI GdipDeleteGraphics(GpGraphics*);
+GpStatus WINGDIPAPI GdipGetDC(GpGraphics*,HDC*);
+GpStatus WINGDIPAPI GdipReleaseDC(GpGraphics*,HDC);
+GpStatus WINGDIPAPI GdipSetCompositingMode(GpGraphics*,CompositingMode);
+GpStatus WINGDIPAPI GdipGetCompositingMode(GpGraphics*,CompositingMode*);
+GpStatus WINGDIPAPI GdipSetRenderingOrigin(GpGraphics*,INT,INT);
+GpStatus WINGDIPAPI GdipGetRenderingOrigin(GpGraphics*,INT*,INT*);
+GpStatus WINGDIPAPI GdipSetCompositingQuality(GpGraphics*,CompositingQuality);
+GpStatus WINGDIPAPI GdipGetCompositingQuality(GpGraphics*,CompositingQuality*);
+GpStatus WINGDIPAPI GdipSetSmoothingMode(GpGraphics*,SmoothingMode);
+GpStatus WINGDIPAPI GdipGetSmoothingMode(GpGraphics*,SmoothingMode*);
+GpStatus WINGDIPAPI GdipSetPixelOffsetMode(GpGraphics*,PixelOffsetMode);
+GpStatus WINGDIPAPI GdipGetPixelOffsetMode(GpGraphics*,PixelOffsetMode*);
+GpStatus WINGDIPAPI GdipSetTextRenderingHint(GpGraphics*,TextRenderingHint);
+GpStatus WINGDIPAPI GdipGetTextRenderingHint(GpGraphics*,TextRenderingHint*);
+GpStatus WINGDIPAPI GdipSetTextContrast(GpGraphics*,UINT);
+GpStatus WINGDIPAPI GdipGetTextContrast(GpGraphics*,UINT*);
+GpStatus WINGDIPAPI GdipSetInterpolationMode(GpGraphics*,InterpolationMode);
+GpStatus WINGDIPAPI GdipGraphicsSetAbort(GpGraphics*,GdiplusAbort*);
+GpStatus WINGDIPAPI GdipGetInterpolationMode(GpGraphics*,InterpolationMode*);
+GpStatus WINGDIPAPI GdipSetWorldTransform(GpGraphics*,GpMatrix*);
+GpStatus WINGDIPAPI GdipResetWorldTransform(GpGraphics*);
+GpStatus WINGDIPAPI GdipMultiplyWorldTransform(GpGraphics*,GDIPCONST GpMatrix*,GpMatrixOrder);
+GpStatus WINGDIPAPI GdipTranslateWorldTransform(GpGraphics*,REAL,REAL,GpMatrixOrder);
+GpStatus WINGDIPAPI GdipScaleWorldTransform(GpGraphics*,REAL,REAL,GpMatrixOrder);
+GpStatus WINGDIPAPI GdipRotateWorldTransform(GpGraphics*,REAL,GpMatrixOrder);
+GpStatus WINGDIPAPI GdipGetWorldTransform(GpGraphics*,GpMatrix*);
+GpStatus WINGDIPAPI GdipResetPageTransform(GpGraphics*);
+GpStatus WINGDIPAPI GdipGetPageUnit(GpGraphics*,GpUnit*);
+GpStatus WINGDIPAPI GdipGetPageScale(GpGraphics*,REAL*);
+GpStatus WINGDIPAPI GdipSetPageUnit(GpGraphics*,GpUnit);
+GpStatus WINGDIPAPI GdipSetPageScale(GpGraphics*,REAL);
+GpStatus WINGDIPAPI GdipGetDpiX(GpGraphics*,REAL*);
+GpStatus WINGDIPAPI GdipGetDpiY(GpGraphics*,REAL*);
+GpStatus WINGDIPAPI GdipTransformPoints(GpGraphics*,GpCoordinateSpace,GpCoordinateSpace,GpPointF*,INT);
+GpStatus WINGDIPAPI GdipTransformPointsI(GpGraphics*,GpCoordinateSpace,GpCoordinateSpace,GpPoint*,INT);
+GpStatus WINGDIPAPI GdipGetNearestColor(GpGraphics*,ARGB*);
+HPALETTE WINGDIPAPI GdipCreateHalftonePalette(void);
+GpStatus WINGDIPAPI GdipDrawLine(GpGraphics*,GpPen*,REAL,REAL,REAL,REAL);
+GpStatus WINGDIPAPI GdipDrawLineI(GpGraphics*,GpPen*,INT,INT,INT,INT);
+GpStatus WINGDIPAPI GdipDrawLines(GpGraphics*,GpPen*,GDIPCONST GpPointF*,INT);
+GpStatus WINGDIPAPI GdipDrawLinesI(GpGraphics*,GpPen*,GDIPCONST GpPoint*,INT);
+GpStatus WINGDIPAPI GdipDrawArc(GpGraphics*,GpPen*,REAL,REAL,REAL,REAL,REAL,REAL);
+GpStatus WINGDIPAPI GdipDrawArcI(GpGraphics*,GpPen*,INT,INT,INT,INT,REAL,REAL);
+GpStatus WINGDIPAPI GdipDrawBezier(GpGraphics*,GpPen*,REAL,REAL,REAL,REAL,REAL,REAL,REAL,REAL);
+GpStatus WINGDIPAPI GdipDrawBezierI(GpGraphics*,GpPen*,INT,INT,INT,INT,INT,INT,INT,INT);
+GpStatus WINGDIPAPI GdipDrawBeziers(GpGraphics*,GpPen*,GDIPCONST GpPointF*,INT);
+GpStatus WINGDIPAPI GdipDrawBeziersI(GpGraphics*,GpPen*,GDIPCONST GpPoint*,INT);
+GpStatus WINGDIPAPI GdipDrawRectangle(GpGraphics*,GpPen*,REAL,REAL,REAL,REAL);
+GpStatus WINGDIPAPI GdipDrawRectangleI(GpGraphics*,GpPen*,INT,INT,INT,INT);
+GpStatus WINGDIPAPI GdipDrawRectangles(GpGraphics*,GpPen*,GDIPCONST GpRectF*,INT);
+GpStatus WINGDIPAPI GdipDrawRectanglesI(GpGraphics*,GpPen*,GDIPCONST GpRect*,INT);
+GpStatus WINGDIPAPI GdipDrawEllipse(GpGraphics*,GpPen*,REAL,REAL,REAL,REAL);
+GpStatus WINGDIPAPI GdipDrawEllipseI(GpGraphics*,GpPen*,INT,INT,INT,INT);
+GpStatus WINGDIPAPI GdipDrawPie(GpGraphics*,GpPen*,REAL,REAL,REAL,REAL,REAL,REAL);
+GpStatus WINGDIPAPI GdipDrawPieI(GpGraphics*,GpPen*,INT,INT,INT,INT,REAL,REAL);
+GpStatus WINGDIPAPI GdipDrawPolygon(GpGraphics*,GpPen*,GDIPCONST GpPointF*,INT);
+GpStatus WINGDIPAPI GdipDrawPolygonI(GpGraphics*,GpPen*,GDIPCONST GpPoint*,INT);
+GpStatus WINGDIPAPI GdipDrawPath(GpGraphics*,GpPen*,GpPath*);
+GpStatus WINGDIPAPI GdipDrawCurve(GpGraphics*,GpPen*,GDIPCONST GpPointF*,INT);
+GpStatus WINGDIPAPI GdipDrawCurveI(GpGraphics*,GpPen*,GDIPCONST GpPoint*,INT);
+GpStatus WINGDIPAPI GdipDrawCurve2(GpGraphics*,GpPen*,GDIPCONST GpPointF*,INT,REAL);
+GpStatus WINGDIPAPI GdipDrawCurve2I(GpGraphics*,GpPen*,GDIPCONST GpPoint*,INT,REAL);
+GpStatus WINGDIPAPI GdipDrawCurve3(GpGraphics*,GpPen*,GDIPCONST GpPointF*,INT,INT,INT,REAL);
+GpStatus WINGDIPAPI GdipDrawCurve3I(GpGraphics*,GpPen*,GDIPCONST GpPoint*,INT,INT,INT,REAL);
+GpStatus WINGDIPAPI GdipDrawClosedCurve(GpGraphics*,GpPen*,GDIPCONST GpPointF*,INT);
+GpStatus WINGDIPAPI GdipDrawClosedCurveI(GpGraphics*,GpPen*,GDIPCONST GpPoint*,INT);
+GpStatus WINGDIPAPI GdipDrawClosedCurve2(GpGraphics*,GpPen*,GDIPCONST GpPointF*,INT,REAL);
+GpStatus WINGDIPAPI GdipDrawClosedCurve2I(GpGraphics*,GpPen*,GDIPCONST GpPoint*,INT,REAL);
+GpStatus WINGDIPAPI GdipGraphicsClear(GpGraphics*,ARGB);
+GpStatus WINGDIPAPI GdipFillRectangle(GpGraphics*,GpBrush*,REAL,REAL,REAL,REAL);
+GpStatus WINGDIPAPI GdipFillRectangleI(GpGraphics*,GpBrush*,INT,INT,INT,INT);
+GpStatus WINGDIPAPI GdipFillRectangles(GpGraphics*,GpBrush*,GDIPCONST GpRectF*,INT);
+GpStatus WINGDIPAPI GdipFillRectanglesI(GpGraphics*,GpBrush*,GDIPCONST GpRect*,INT);
+GpStatus WINGDIPAPI GdipFillPolygon(GpGraphics*,GpBrush*,GDIPCONST GpPointF*,INT,GpFillMode);
+GpStatus WINGDIPAPI GdipFillPolygonI(GpGraphics*,GpBrush*,GDIPCONST GpPoint*,INT,GpFillMode);
+GpStatus WINGDIPAPI GdipFillPolygon2(GpGraphics*,GpBrush*,GDIPCONST GpPointF*,INT);
+GpStatus WINGDIPAPI GdipFillPolygon2I(GpGraphics*,GpBrush*,GDIPCONST GpPoint*,INT);
+GpStatus WINGDIPAPI GdipFillEllipse(GpGraphics*,GpBrush*,REAL,REAL,REAL,REAL);
+GpStatus WINGDIPAPI GdipFillEllipseI(GpGraphics*,GpBrush*,INT,INT,INT,INT);
+GpStatus WINGDIPAPI GdipFillPie(GpGraphics*,GpBrush*,REAL,REAL,REAL,REAL,REAL,REAL);
+GpStatus WINGDIPAPI GdipFillPieI(GpGraphics*,GpBrush*,INT,INT,INT,INT,REAL,REAL);
+GpStatus WINGDIPAPI GdipFillPath(GpGraphics*,GpBrush*,GpPath*);
+GpStatus WINGDIPAPI GdipFillClosedCurve(GpGraphics*,GpBrush*,GDIPCONST GpPointF*,INT);
+GpStatus WINGDIPAPI GdipFillClosedCurveI(GpGraphics*,GpBrush*,GDIPCONST GpPoint*,INT);
+GpStatus WINGDIPAPI GdipFillClosedCurve2(GpGraphics*,GpBrush*,GDIPCONST GpPointF*,INT,REAL,GpFillMode);
+GpStatus WINGDIPAPI GdipFillClosedCurve2I(GpGraphics*,GpBrush*,GDIPCONST GpPoint*,INT,REAL,GpFillMode);
+GpStatus WINGDIPAPI GdipFillRegion(GpGraphics*,GpBrush*,GpRegion*);
+GpStatus WINGDIPAPI GdipDrawImage(GpGraphics*,GpImage*,REAL,REAL);
+GpStatus WINGDIPAPI GdipDrawImageI(GpGraphics*,GpImage*,INT,INT);
+GpStatus WINGDIPAPI GdipDrawImageRect(GpGraphics*,GpImage*,REAL,REAL,REAL,REAL);
+GpStatus WINGDIPAPI GdipDrawImageRectI(GpGraphics*,GpImage*,INT,INT,INT,INT);
+GpStatus WINGDIPAPI GdipDrawImagePoints(GpGraphics*,GpImage*,GDIPCONST GpPointF*,INT);
+GpStatus WINGDIPAPI GdipDrawImagePointsI(GpGraphics*,GpImage*,GDIPCONST GpPoint*,INT);
+GpStatus WINGDIPAPI GdipDrawImagePointRect(GpGraphics*,GpImage*,REAL,REAL,REAL,REAL,REAL,REAL,GpUnit);
+GpStatus WINGDIPAPI GdipDrawImagePointRectI(GpGraphics*,GpImage*,INT,INT,INT,INT,INT,INT,GpUnit);
+GpStatus WINGDIPAPI GdipDrawImageRectRect(GpGraphics*,GpImage*,REAL,REAL,REAL,REAL,REAL,REAL,REAL,REAL,GpUnit,GDIPCONST GpImageAttributes*,DrawImageAbort,VOID*);
+GpStatus WINGDIPAPI GdipDrawImageRectRectI(GpGraphics*,GpImage*,INT,INT,INT,INT,INT,INT,INT,INT,GpUnit,GDIPCONST GpImageAttributes*,DrawImageAbort,VOID*);
+GpStatus WINGDIPAPI GdipDrawImagePointsRect(GpGraphics*,GpImage*,GDIPCONST GpPointF*,INT,REAL,REAL,REAL,REAL,GpUnit,GDIPCONST GpImageAttributes*,DrawImageAbort,VOID*);
+GpStatus WINGDIPAPI GdipDrawImagePointsRectI(GpGraphics*,GpImage*,GDIPCONST GpPoint*,INT,INT,INT,INT,INT,GpUnit,GDIPCONST GpImageAttributes*,DrawImageAbort,VOID*);
+GpStatus WINGDIPAPI GdipDrawImageFX(GpGraphics*,GpImage*,GpRectF*,GpMatrix*,CGpEffect*,GpImageAttributes*,GpUnit);
+#ifdef __cplusplus
+GpStatus WINGDIPAPI GdipEnumerateMetafileDestPoint(GpGraphics*,GDIPCONST GpMetafile*,GDIPCONST PointF&,EnumerateMetafileProc,VOID*,GDIPCONST GpImageAttributes*);
+GpStatus WINGDIPAPI GdipEnumerateMetafileDestPointI(GpGraphics*,GDIPCONST GpMetafile*,GDIPCONST Point&,EnumerateMetafileProc,VOID*,GDIPCONST GpImageAttributes*);
+GpStatus WINGDIPAPI GdipEnumerateMetafileDestRect(GpGraphics*,GDIPCONST GpMetafile*,GDIPCONST RectF&,EnumerateMetafileProc,VOID*,GDIPCONST GpImageAttributes*);
+GpStatus WINGDIPAPI GdipEnumerateMetafileDestRectI(GpGraphics*,GDIPCONST GpMetafile*,GDIPCONST Rect&,EnumerateMetafileProc,VOID*,GDIPCONST GpImageAttributes*);
+#endif
+GpStatus WINGDIPAPI GdipEnumerateMetafileDestPoints(GpGraphics*,GDIPCONST GpMetafile*,GDIPCONST PointF*,INT,EnumerateMetafileProc,VOID*,GDIPCONST GpImageAttributes*);
+GpStatus WINGDIPAPI GdipEnumerateMetafileDestPointsI(GpGraphics*,GDIPCONST GpMetafile*,GDIPCONST Point*,INT,EnumerateMetafileProc,VOID*,GDIPCONST GpImageAttributes*);
+#ifdef __cplusplus
+GpStatus WINGDIPAPI GdipEnumerateMetafileSrcRectDestPoint(GpGraphics*,GDIPCONST GpMetafile*,GDIPCONST PointF&,GDIPCONST RectF&,Unit,EnumerateMetafileProc,VOID*,GDIPCONST GpImageAttributes*);
+GpStatus WINGDIPAPI GdipEnumerateMetafileSrcRectDestPointI(GpGraphics*,GDIPCONST GpMetafile*,GDIPCONST Point&,GDIPCONST Rect&,Unit,EnumerateMetafileProc,VOID*,GDIPCONST GpImageAttributes*);
+GpStatus WINGDIPAPI GdipEnumerateMetafileSrcRectDestRect(GpGraphics*,GDIPCONST GpMetafile*,GDIPCONST RectF&,GDIPCONST RectF&,Unit,EnumerateMetafileProc,VOID*,GDIPCONST GpImageAttributes*);
+GpStatus WINGDIPAPI GdipEnumerateMetafileSrcRectDestRectI(GpGraphics*,GDIPCONST GpMetafile*,GDIPCONST Rect&,GDIPCONST Rect&,Unit,EnumerateMetafileProc,VOID*,GDIPCONST GpImageAttributes*);
+GpStatus WINGDIPAPI GdipEnumerateMetafileSrcRectDestPoints(GpGraphics*,GDIPCONST GpMetafile*,GDIPCONST PointF*,INT,GDIPCONST RectF&,Unit,EnumerateMetafileProc,VOID*,GDIPCONST GpImageAttributes*);
+GpStatus WINGDIPAPI GdipEnumerateMetafileSrcRectDestPointsI(GpGraphics*,GDIPCONST GpMetafile*,GDIPCONST Point*,INT,GDIPCONST Rect&,Unit,EnumerateMetafileProc,VOID*,GDIPCONST GpImageAttributes*);
+#endif
+GpStatus WINGDIPAPI GdipSetClipGraphics(GpGraphics*,GpGraphics*,CombineMode);
+GpStatus WINGDIPAPI GdipSetClipRect(GpGraphics*,REAL,REAL,REAL,REAL,CombineMode);
+GpStatus WINGDIPAPI GdipSetClipRectI(GpGraphics*,INT,INT,INT,INT,CombineMode);
+GpStatus WINGDIPAPI GdipSetClipPath(GpGraphics*,GpPath*,CombineMode);
+GpStatus WINGDIPAPI GdipSetClipRegion(GpGraphics*,GpRegion*,CombineMode);
+GpStatus WINGDIPAPI GdipSetClipHrgn(GpGraphics*,HRGN,CombineMode);
+GpStatus WINGDIPAPI GdipResetClip(GpGraphics*);
+GpStatus WINGDIPAPI GdipTranslateClip(GpGraphics*,REAL,REAL);
+GpStatus WINGDIPAPI GdipTranslateClipI(GpGraphics*,INT,INT);
+GpStatus WINGDIPAPI GdipGetClip(GpGraphics*,GpRegion*);
+GpStatus WINGDIPAPI GdipGetClipBounds(GpGraphics*,GpRectF*);
+GpStatus WINGDIPAPI GdipGetClipBoundsI(GpGraphics*,GpRect*);
+GpStatus WINGDIPAPI GdipIsClipEmpty(GpGraphics*,BOOL*);
+GpStatus WINGDIPAPI GdipGetVisibleClipBounds(GpGraphics*,GpRectF*);
+GpStatus WINGDIPAPI GdipGetVisibleClipBoundsI(GpGraphics*,GpRect*);
+GpStatus WINGDIPAPI GdipIsVisibleClipEmpty(GpGraphics*,BOOL*);
+GpStatus WINGDIPAPI GdipIsVisiblePoint(GpGraphics*,REAL,REAL,BOOL*);
+GpStatus WINGDIPAPI GdipIsVisiblePointI(GpGraphics*,INT,INT,BOOL*);
+GpStatus WINGDIPAPI GdipIsVisibleRect(GpGraphics*,REAL,REAL,REAL,REAL,BOOL*);
+GpStatus WINGDIPAPI GdipIsVisibleRectI(GpGraphics*,INT,INT,INT,INT,BOOL*);
+GpStatus WINGDIPAPI GdipSaveGraphics(GpGraphics*,GraphicsState*);
+GpStatus WINGDIPAPI GdipRestoreGraphics(GpGraphics*,GraphicsState);
+GpStatus WINGDIPAPI GdipBeginContainer(GpGraphics*,GDIPCONST GpRectF*,GDIPCONST GpRectF*,GpUnit,GraphicsContainer*);
+GpStatus WINGDIPAPI GdipBeginContainerI(GpGraphics*,GDIPCONST GpRect*,GDIPCONST GpRect*,GpUnit,GraphicsContainer*);
+GpStatus WINGDIPAPI GdipBeginContainer2(GpGraphics*,GraphicsContainer*);
+GpStatus WINGDIPAPI GdipEndContainer(GpGraphics*,GraphicsContainer);
+GpStatus WINGDIPAPI GdipComment(GpGraphics*,UINT,GDIPCONST BYTE*);
+
+/* GraphicsPath functions */
+GpStatus WINGDIPAPI GdipCreatePath(GpFillMode,GpPath**);
+GpStatus WINGDIPAPI GdipCreatePath2(GDIPCONST GpPointF*,GDIPCONST BYTE*,INT,GpFillMode,GpPath**);
+GpStatus WINGDIPAPI GdipCreatePath2I(GDIPCONST GpPoint*,GDIPCONST BYTE*,INT,GpFillMode,GpPath**);
+GpStatus WINGDIPAPI GdipClonePath(GpPath*,GpPath**);
+GpStatus WINGDIPAPI GdipDeletePath(GpPath*);
+GpStatus WINGDIPAPI GdipResetPath(GpPath*);
+GpStatus WINGDIPAPI GdipGetPointCount(GpPath*,INT*);
+GpStatus WINGDIPAPI GdipGetPathTypes(GpPath*,BYTE*,INT);
+GpStatus WINGDIPAPI GdipGetPathPoints(GpPath*,GpPointF*,INT);
+GpStatus WINGDIPAPI GdipGetPathPointsI(GpPath*,GpPoint*,INT);
+GpStatus WINGDIPAPI GdipGetPathFillMode(GpPath*,GpFillMode*);
+GpStatus WINGDIPAPI GdipSetPathFillMode(GpPath*,GpFillMode);
+GpStatus WINGDIPAPI GdipGetPathData(GpPath*,GpPathData*);
+GpStatus WINGDIPAPI GdipStartPathFigure(GpPath*);
+GpStatus WINGDIPAPI GdipClosePathFigure(GpPath*);
+GpStatus WINGDIPAPI GdipClosePathFigures(GpPath*);
+GpStatus WINGDIPAPI GdipSetPathMarker(GpPath*);
+GpStatus WINGDIPAPI GdipClearPathMarkers(GpPath*);
+GpStatus WINGDIPAPI GdipReversePath(GpPath*);
+GpStatus WINGDIPAPI GdipGetPathLastPoint(GpPath*,GpPointF*);
+GpStatus WINGDIPAPI GdipAddPathLine(GpPath*,REAL,REAL,REAL,REAL);
+GpStatus WINGDIPAPI GdipAddPathLine2(GpPath*,GDIPCONST GpPointF*,INT);
+GpStatus WINGDIPAPI GdipAddPathArc(GpPath*,REAL,REAL,REAL,REAL,REAL,REAL);
+GpStatus WINGDIPAPI GdipAddPathBezier(GpPath*,REAL,REAL,REAL,REAL,REAL,REAL,REAL,REAL);
+GpStatus WINGDIPAPI GdipAddPathBeziers(GpPath*,GDIPCONST GpPointF*,INT);
+GpStatus WINGDIPAPI GdipAddPathCurve(GpPath*,GDIPCONST GpPointF*,INT);
+GpStatus WINGDIPAPI GdipAddPathCurve2(GpPath*,GDIPCONST GpPointF*,INT,REAL);
+GpStatus WINGDIPAPI GdipAddPathCurve3(GpPath*,GDIPCONST GpPointF*,INT,INT,INT,REAL);
+GpStatus WINGDIPAPI GdipAddPathClosedCurve(GpPath*,GDIPCONST GpPointF*,INT);
+GpStatus WINGDIPAPI GdipAddPathClosedCurve2(GpPath*,GDIPCONST GpPointF*,INT,REAL);
+GpStatus WINGDIPAPI GdipAddPathRectangle(GpPath*,REAL,REAL,REAL,REAL);
+GpStatus WINGDIPAPI GdipAddPathRectangles(GpPath*,GDIPCONST GpRectF*,INT);
+GpStatus WINGDIPAPI GdipAddPathEllipse(GpPath*,REAL,REAL,REAL,REAL);
+GpStatus WINGDIPAPI GdipAddPathPie(GpPath*,REAL,REAL,REAL,REAL,REAL,REAL);
+GpStatus WINGDIPAPI GdipAddPathPolygon(GpPath*,GDIPCONST GpPointF*,INT);
+GpStatus WINGDIPAPI GdipAddPathPath(GpPath*,GDIPCONST GpPath*,BOOL);
+GpStatus WINGDIPAPI GdipAddPathString(GpPath*,GDIPCONST WCHAR*,INT,GDIPCONST GpFontFamily*,INT,REAL,GDIPCONST RectF*,GDIPCONST GpStringFormat*);
+GpStatus WINGDIPAPI GdipAddPathStringI(GpPath*,GDIPCONST WCHAR*,INT,GDIPCONST GpFontFamily*,INT,REAL,GDIPCONST Rect*,GDIPCONST GpStringFormat*);
+GpStatus WINGDIPAPI GdipAddPathLineI(GpPath*,INT,INT,INT,INT);
+GpStatus WINGDIPAPI GdipAddPathLine2I(GpPath*,GDIPCONST GpPoint*,INT);
+GpStatus WINGDIPAPI GdipAddPathArcI(GpPath*,INT,INT,INT,INT,REAL,REAL);
+GpStatus WINGDIPAPI GdipAddPathBezierI(GpPath*,INT,INT,INT,INT,INT,INT,INT,INT);
+GpStatus WINGDIPAPI GdipAddPathBeziersI(GpPath*,GDIPCONST GpPoint*,INT);
+GpStatus WINGDIPAPI GdipAddPathCurveI(GpPath*,GDIPCONST GpPoint*,INT);
+GpStatus WINGDIPAPI GdipAddPathCurve2I(GpPath*,GDIPCONST GpPoint*,INT,REAL);
+GpStatus WINGDIPAPI GdipAddPathCurve3I(GpPath*,GDIPCONST GpPoint*,INT,INT,INT,REAL);
+GpStatus WINGDIPAPI GdipAddPathClosedCurveI(GpPath*,GDIPCONST GpPoint*,INT);
+GpStatus WINGDIPAPI GdipAddPathClosedCurve2I(GpPath*,GDIPCONST GpPoint*,INT,REAL);
+GpStatus WINGDIPAPI GdipAddPathRectangleI(GpPath*,INT,INT,INT,INT);
+GpStatus WINGDIPAPI GdipAddPathRectanglesI(GpPath*,GDIPCONST GpRect*,INT);
+GpStatus WINGDIPAPI GdipAddPathEllipseI(GpPath*,INT,INT,INT,INT);
+GpStatus WINGDIPAPI GdipAddPathPieI(GpPath*,INT,INT,INT,INT,REAL,REAL);
+GpStatus WINGDIPAPI GdipAddPathPolygonI(GpPath*,GDIPCONST GpPoint*,INT);
+GpStatus WINGDIPAPI GdipFlattenPath(GpPath*,GpMatrix*,REAL);
+GpStatus WINGDIPAPI GdipWindingModeOutline(GpPath*,GpMatrix*,REAL);
+GpStatus WINGDIPAPI GdipWidenPath(GpPath*,GpPen*,GpMatrix*,REAL);
+GpStatus WINGDIPAPI GdipWarpPath(GpPath*,GpMatrix*,GDIPCONST GpPointF*,INT,REAL,REAL,REAL,REAL,WarpMode,REAL);
+GpStatus WINGDIPAPI GdipTransformPath(GpPath*,GpMatrix*);
+GpStatus WINGDIPAPI GdipGetPathWorldBounds(GpPath*,GpRectF*,GDIPCONST GpMatrix*,GDIPCONST GpPen*);
+GpStatus WINGDIPAPI GdipGetPathWorldBoundsI(GpPath*,GpRect*,GDIPCONST GpMatrix*,GDIPCONST GpPen*);
+GpStatus WINGDIPAPI GdipIsVisiblePathPoint(GpPath*,REAL,REAL,GpGraphics*,BOOL*);
+GpStatus WINGDIPAPI GdipIsVisiblePathPointI(GpPath*,INT,INT,GpGraphics*,BOOL*);
+GpStatus WINGDIPAPI GdipIsOutlineVisiblePathPoint(GpPath*,REAL,REAL,GpPen*,GpGraphics*,BOOL*);
+GpStatus WINGDIPAPI GdipIsOutlineVisiblePathPointI(GpPath*,INT,INT,GpPen*,GpGraphics*,BOOL*);
+
+/* HatchBrush functions */
+GpStatus WINGDIPAPI GdipCreateHatchBrush(GpHatchStyle,ARGB,ARGB,GpHatch**);
+GpStatus WINGDIPAPI GdipGetHatchStyle(GpHatch*,GpHatchStyle*);
+GpStatus WINGDIPAPI GdipGetHatchForegroundColor(GpHatch*,ARGB*);
+GpStatus WINGDIPAPI GdipGetHatchBackgroundColor(GpHatch*,ARGB*);
+
+/* Image functions */
+GpStatus WINGDIPAPI GdipLoadImageFromStream(IStream*,GpImage**);
+GpStatus WINGDIPAPI GdipLoadImageFromFile(GDIPCONST WCHAR*,GpImage**);
+GpStatus WINGDIPAPI GdipLoadImageFromStreamICM(IStream*,GpImage**);
+GpStatus WINGDIPAPI GdipLoadImageFromFileICM(GDIPCONST WCHAR*,GpImage**);
+GpStatus WINGDIPAPI GdipCloneImage(GpImage*,GpImage**);
+GpStatus WINGDIPAPI GdipDisposeImage(GpImage*);
+GpStatus WINGDIPAPI GdipSaveImageToFile(GpImage*,GDIPCONST WCHAR*,GDIPCONST CLSID*,GDIPCONST EncoderParameters*);
+GpStatus WINGDIPAPI GdipSaveImageToStream(GpImage*,IStream*,GDIPCONST CLSID*,GDIPCONST EncoderParameters*);
+GpStatus WINGDIPAPI GdipSaveAdd(GpImage*,GDIPCONST EncoderParameters*);
+GpStatus WINGDIPAPI GdipSaveAddImage(GpImage*,GpImage*,GDIPCONST EncoderParameters*);
+GpStatus WINGDIPAPI GdipGetImageGraphicsContext(GpImage*,GpGraphics**);
+GpStatus WINGDIPAPI GdipGetImageBounds(GpImage*,GpRectF*,GpUnit*);
+GpStatus WINGDIPAPI GdipGetImageDimension(GpImage*,REAL*,REAL*);
+GpStatus WINGDIPAPI GdipGetImageType(GpImage*,ImageType*);
+GpStatus WINGDIPAPI GdipGetImageWidth(GpImage*,UINT*);
+GpStatus WINGDIPAPI GdipGetImageHeight(GpImage*,UINT*);
+GpStatus WINGDIPAPI GdipGetImageHorizontalResolution(GpImage*,REAL*);
+GpStatus WINGDIPAPI GdipGetImageVerticalResolution(GpImage*,REAL*);
+GpStatus WINGDIPAPI GdipGetImageFlags(GpImage*,UINT*);
+GpStatus WINGDIPAPI GdipGetImageRawFormat(GpImage*,GUID*);
+GpStatus WINGDIPAPI GdipGetImagePixelFormat(GpImage*,PixelFormat*);
+GpStatus WINGDIPAPI GdipGetImageThumbnail(GpImage*,UINT,UINT,GpImage**,GetThumbnailImageAbort,VOID*);
+GpStatus WINGDIPAPI GdipGetEncoderParameterListSize(GpImage*,GDIPCONST CLSID*,UINT*);
+GpStatus WINGDIPAPI GdipGetEncoderParameterList(GpImage*,GDIPCONST CLSID*,UINT,EncoderParameters*);
+GpStatus WINGDIPAPI GdipImageGetFrameDimensionsCount(GpImage*,UINT*);
+GpStatus WINGDIPAPI GdipImageGetFrameDimensionsList(GpImage*,GUID*,UINT);
+GpStatus WINGDIPAPI GdipImageGetFrameCount(GpImage*,GDIPCONST GUID*,UINT*);
+GpStatus WINGDIPAPI GdipImageSelectActiveFrame(GpImage*,GDIPCONST GUID*,UINT);
+GpStatus WINGDIPAPI GdipImageRotateFlip(GpImage*,RotateFlipType);
+GpStatus WINGDIPAPI GdipGetImagePalette(GpImage*,ColorPalette*,INT);
+GpStatus WINGDIPAPI GdipSetImagePalette(GpImage*,GDIPCONST ColorPalette*);
+GpStatus WINGDIPAPI GdipGetImagePaletteSize(GpImage*,INT*);
+GpStatus WINGDIPAPI GdipGetPropertyCount(GpImage*,UINT*);
+GpStatus WINGDIPAPI GdipGetPropertyIdList(GpImage*,UINT,PROPID*);
+GpStatus WINGDIPAPI GdipGetPropertyItemSize(GpImage*,PROPID,UINT*);
+GpStatus WINGDIPAPI GdipGetPropertyItem(GpImage*,PROPID,UINT,PropertyItem*);
+GpStatus WINGDIPAPI GdipGetPropertySize(GpImage*,UINT*,UINT*);
+GpStatus WINGDIPAPI GdipGetAllPropertyItems(GpImage*,UINT,UINT,PropertyItem*);
+GpStatus WINGDIPAPI GdipRemovePropertyItem(GpImage*,PROPID);
+GpStatus WINGDIPAPI GdipSetPropertyItem(GpImage*,GDIPCONST PropertyItem*);
+GpStatus WINGDIPAPI GdipFindFirstImageItem(GpImage*,ImageItemData*);
+GpStatus WINGDIPAPI GdipFindNextImageItem(GpImage*,ImageItemData*);
+GpStatus WINGDIPAPI GdipGetImageItemData(GpImage*,ImageItemData*);
+GpStatus WINGDIPAPI GdipImageSetAbort(GpImage*,GdiplusAbort*);
+GpStatus WINGDIPAPI GdipImageForceValidation(GpImage*);
+
+/* Image codec functions */
+GpStatus WINGDIPAPI GdipGetImageDecodersSize(UINT*,UINT*);
+GpStatus WINGDIPAPI GdipGetImageDecoders(UINT,UINT,ImageCodecInfo*);
+GpStatus WINGDIPAPI GdipGetImageEncodersSize(UINT*,UINT*);
+GpStatus WINGDIPAPI GdipGetImageEncoders(UINT,UINT,ImageCodecInfo*);
+
+/* ImageAttributes functions */
+GpStatus WINGDIPAPI GdipCreateImageAttributes(GpImageAttributes**);
+GpStatus WINGDIPAPI GdipCloneImageAttributes(GDIPCONST GpImageAttributes*,GpImageAttributes**);
+GpStatus WINGDIPAPI GdipDisposeImageAttributes(GpImageAttributes*);
+GpStatus WINGDIPAPI GdipSetImageAttributesToIdentity(GpImageAttributes*,ColorAdjustType);
+GpStatus WINGDIPAPI GdipResetImageAttributes(GpImageAttributes*,ColorAdjustType);
+GpStatus WINGDIPAPI GdipSetImageAttributesColorMatrix(GpImageAttributes*,ColorAdjustType,BOOL,GDIPCONST ColorMatrix*,GDIPCONST ColorMatrix*,ColorMatrixFlags);
+GpStatus WINGDIPAPI GdipSetImageAttributesThreshold(GpImageAttributes*,ColorAdjustType,BOOL,REAL);
+GpStatus WINGDIPAPI GdipSetImageAttributesGamma(GpImageAttributes*,ColorAdjustType,BOOL,REAL);
+GpStatus WINGDIPAPI GdipSetImageAttributesNoOp(GpImageAttributes*,ColorAdjustType,BOOL);
+GpStatus WINGDIPAPI GdipSetImageAttributesColorKeys(GpImageAttributes*,ColorAdjustType,BOOL,ARGB,ARGB);
+GpStatus WINGDIPAPI GdipSetImageAttributesOutputChannel(GpImageAttributes*,ColorAdjustType,BOOL,ColorChannelFlags);
+GpStatus WINGDIPAPI GdipSetImageAttributesOutputChannelColorProfile(GpImageAttributes*,ColorAdjustType,BOOL,GDIPCONST WCHAR*);
+GpStatus WINGDIPAPI GdipSetImageAttributesRemapTable(GpImageAttributes*,ColorAdjustType,BOOL,UINT,GDIPCONST ColorMap*);
+GpStatus WINGDIPAPI GdipSetImageAttributesWrapMode(GpImageAttributes*,WrapMode,ARGB,BOOL);
+GpStatus WINGDIPAPI GdipSetImageAttributesICMMode(GpImageAttributes*,BOOL);
+GpStatus WINGDIPAPI GdipGetImageAttributesAdjustedPalette(GpImageAttributes*,ColorPalette*,ColorAdjustType);
+GpStatus WINGDIPAPI GdipSetImageAttributesCachedBackground(GpImageAttributes*,BOOL);
+
+/* LinearGradientBrush functions */
+GpStatus WINGDIPAPI GdipCreateLineBrush(GDIPCONST GpPointF*,GDIPCONST GpPointF*,ARGB,ARGB,GpWrapMode,GpLineGradient**);
+GpStatus WINGDIPAPI GdipCreateLineBrushI(GDIPCONST GpPoint*,GDIPCONST GpPoint*,ARGB,ARGB,GpWrapMode,GpLineGradient**);
+GpStatus WINGDIPAPI GdipCreateLineBrushFromRect(GDIPCONST GpRectF*,ARGB,ARGB,LinearGradientMode,GpWrapMode,GpLineGradient**);
+GpStatus WINGDIPAPI GdipCreateLineBrushFromRectI(GDIPCONST GpRect*,ARGB,ARGB,LinearGradientMode,GpWrapMode,GpLineGradient**);
+GpStatus WINGDIPAPI GdipCreateLineBrushFromRectWithAngle(GDIPCONST GpRectF*,ARGB,ARGB,REAL,BOOL,GpWrapMode,GpLineGradient**);
+GpStatus WINGDIPAPI GdipCreateLineBrushFromRectWithAngleI(GDIPCONST GpRect*,ARGB,ARGB,REAL,BOOL,GpWrapMode,GpLineGradient**);
+GpStatus WINGDIPAPI GdipSetLineColors(GpLineGradient*,ARGB,ARGB);
+GpStatus WINGDIPAPI GdipGetLineColors(GpLineGradient*,ARGB*);
+GpStatus WINGDIPAPI GdipGetLineRect(GpLineGradient*,GpRectF*);
+GpStatus WINGDIPAPI GdipGetLineRectI(GpLineGradient*,GpRect*);
+GpStatus WINGDIPAPI GdipSetLineGammaCorrection(GpLineGradient*,BOOL);
+GpStatus WINGDIPAPI GdipGetLineGammaCorrection(GpLineGradient*,BOOL*);
+GpStatus WINGDIPAPI GdipGetLineBlendCount(GpLineGradient*,INT*);
+GpStatus WINGDIPAPI GdipGetLineBlend(GpLineGradient*,REAL*,REAL*,INT);
+GpStatus WINGDIPAPI GdipSetLineBlend(GpLineGradient*,GDIPCONST REAL*,GDIPCONST REAL*,INT);
+GpStatus WINGDIPAPI GdipGetLinePresetBlendCount(GpLineGradient*,INT*);
+GpStatus WINGDIPAPI GdipGetLinePresetBlend(GpLineGradient*,ARGB*,REAL*,INT);
+GpStatus WINGDIPAPI GdipSetLinePresetBlend(GpLineGradient*,GDIPCONST ARGB*,GDIPCONST REAL*,INT);
+GpStatus WINGDIPAPI GdipSetLineSigmaBlend(GpLineGradient*,REAL,REAL);
+GpStatus WINGDIPAPI GdipSetLineLinearBlend(GpLineGradient*,REAL,REAL);
+GpStatus WINGDIPAPI GdipSetLineWrapMode(GpLineGradient*,GpWrapMode);
+GpStatus WINGDIPAPI GdipGetLineWrapMode(GpLineGradient*,GpWrapMode*);
+GpStatus WINGDIPAPI GdipGetLineTransform(GpLineGradient*,GpMatrix*);
+GpStatus WINGDIPAPI GdipSetLineTransform(GpLineGradient*,GDIPCONST GpMatrix*);
+GpStatus WINGDIPAPI GdipResetLineTransform(GpLineGradient*);
+GpStatus WINGDIPAPI GdipMultiplyLineTransform(GpLineGradient*,GDIPCONST GpMatrix*,GpMatrixOrder);
+GpStatus WINGDIPAPI GdipTranslateLineTransform(GpLineGradient*,REAL,REAL,GpMatrixOrder);
+GpStatus WINGDIPAPI GdipScaleLineTransform(GpLineGradient*,REAL,REAL,GpMatrixOrder);
+GpStatus WINGDIPAPI GdipRotateLineTransform(GpLineGradient*,REAL,GpMatrixOrder);
+
+/* Matrix functions */
+GpStatus WINGDIPAPI GdipCreateMatrix(GpMatrix**);
+GpStatus WINGDIPAPI GdipCreateMatrix2(REAL,REAL,REAL,REAL,REAL,REAL,GpMatrix**);
+GpStatus WINGDIPAPI GdipCreateMatrix3(GDIPCONST GpRectF*,GDIPCONST GpPointF*,GpMatrix**);
+GpStatus WINGDIPAPI GdipCreateMatrix3I(GDIPCONST GpRect*,GDIPCONST GpPoint*,GpMatrix**);
+GpStatus WINGDIPAPI GdipCloneMatrix(GpMatrix*,GpMatrix**);
+GpStatus WINGDIPAPI GdipDeleteMatrix(GpMatrix*);
+GpStatus WINGDIPAPI GdipSetMatrixElements(GpMatrix*,REAL,REAL,REAL,REAL,REAL,REAL);
+GpStatus WINGDIPAPI GdipMultiplyMatrix(GpMatrix*,GpMatrix*,GpMatrixOrder);
+GpStatus WINGDIPAPI GdipTranslateMatrix(GpMatrix*,REAL,REAL,GpMatrixOrder);
+GpStatus WINGDIPAPI GdipScaleMatrix(GpMatrix*,REAL,REAL,GpMatrixOrder);
+GpStatus WINGDIPAPI GdipRotateMatrix(GpMatrix*,REAL,GpMatrixOrder);
+GpStatus WINGDIPAPI GdipShearMatrix(GpMatrix*,REAL,REAL,GpMatrixOrder);
+GpStatus WINGDIPAPI GdipInvertMatrix(GpMatrix*);
+GpStatus WINGDIPAPI GdipTransformMatrixPoints(GpMatrix*,GpPointF*,INT);
+GpStatus WINGDIPAPI GdipTransformMatrixPointsI(GpMatrix*,GpPoint*,INT);
+GpStatus WINGDIPAPI GdipVectorTransformMatrixPoints(GpMatrix*,GpPointF*,INT);
+GpStatus WINGDIPAPI GdipVectorTransformMatrixPointsI(GpMatrix*,GpPoint*,INT);
+GpStatus WINGDIPAPI GdipGetMatrixElements(GDIPCONST GpMatrix*,REAL*);
+GpStatus WINGDIPAPI GdipIsMatrixInvertible(GDIPCONST GpMatrix*,BOOL*);
+GpStatus WINGDIPAPI GdipIsMatrixIdentity(GDIPCONST GpMatrix*,BOOL*);
+GpStatus WINGDIPAPI GdipIsMatrixEqual(GDIPCONST GpMatrix*,GDIPCONST GpMatrix*,BOOL*);
+
+/* Metafile functions */
+GpStatus WINGDIPAPI GdipGetMetafileHeaderFromEmf(HENHMETAFILE,MetafileHeader*);
+GpStatus WINGDIPAPI GdipGetMetafileHeaderFromFile(GDIPCONST WCHAR*,MetafileHeader*);
+GpStatus WINGDIPAPI GdipGetMetafileHeaderFromStream(IStream*,MetafileHeader*);
+GpStatus WINGDIPAPI GdipGetMetafileHeaderFromMetafile(GpMetafile*,MetafileHeader*);
+GpStatus WINGDIPAPI GdipGetHemfFromMetafile(GpMetafile*,HENHMETAFILE*);
+GpStatus WINGDIPAPI GdipCreateStreamOnFile(GDIPCONST WCHAR*,UINT,IStream**);
+GpStatus WINGDIPAPI GdipCreateMetafileFromWmf(HMETAFILE,BOOL,GDIPCONST WmfPlaceableFileHeader*,GpMetafile**);
+GpStatus WINGDIPAPI GdipCreateMetafileFromEmf(HENHMETAFILE,BOOL,GpMetafile**);
+GpStatus WINGDIPAPI GdipCreateMetafileFromFile(GDIPCONST WCHAR*,GpMetafile**);
+GpStatus WINGDIPAPI GdipCreateMetafileFromWmfFile(GDIPCONST WCHAR*,GDIPCONST WmfPlaceableFileHeader*,GpMetafile**);
+GpStatus WINGDIPAPI GdipCreateMetafileFromStream(IStream*,GpMetafile**);
+GpStatus WINGDIPAPI GdipRecordMetafile(HDC,EmfType,GDIPCONST GpRectF*,MetafileFrameUnit,GDIPCONST WCHAR*,GpMetafile**);
+GpStatus WINGDIPAPI GdipRecordMetafileI(HDC,EmfType,GDIPCONST GpRect*,MetafileFrameUnit,GDIPCONST WCHAR*,GpMetafile**);
+GpStatus WINGDIPAPI GdipRecordMetafileFileName(GDIPCONST WCHAR*,HDC,EmfType,GDIPCONST GpRectF*,MetafileFrameUnit,GDIPCONST WCHAR*,GpMetafile**);
+GpStatus WINGDIPAPI GdipRecordMetafileFileNameI(GDIPCONST WCHAR*,HDC,EmfType,GDIPCONST GpRect*,MetafileFrameUnit,GDIPCONST WCHAR*,GpMetafile**);
+GpStatus WINGDIPAPI GdipRecordMetafileStream(IStream*,HDC,EmfType,GDIPCONST GpRectF*,MetafileFrameUnit,GDIPCONST WCHAR*,GpMetafile**);
+GpStatus WINGDIPAPI GdipRecordMetafileStreamI(IStream*,HDC,EmfType,GDIPCONST GpRect*,MetafileFrameUnit,GDIPCONST WCHAR*,GpMetafile**);
+GpStatus WINGDIPAPI GdipPlayMetafileRecord(GDIPCONST GpMetafile*,EmfPlusRecordType,UINT,UINT,GDIPCONST BYTE*);
+GpStatus WINGDIPAPI GdipSetMetafileDownLevelRasterizationLimit(GpMetafile*,UINT);
+GpStatus WINGDIPAPI GdipGetMetafileDownLevelRasterizationLimit(GDIPCONST GpMetafile*,UINT*);
+GpStatus WINGDIPAPI GdipConvertToEmfPlus(GDIPCONST GpGraphics*,GpMetafile*,BOOL*,EmfType,GDIPCONST WCHAR*,GpMetafile**);
+GpStatus WINGDIPAPI GdipConvertToEmfPlusToFile(GDIPCONST GpGraphics*,GpMetafile*,BOOL*,GDIPCONST WCHAR*,EmfType,GDIPCONST WCHAR*,GpMetafile**);
+GpStatus WINGDIPAPI GdipConvertToEmfPlusToStream(GDIPCONST GpGraphics*,GpMetafile*,BOOL*,IStream*,EmfType,GDIPCONST WCHAR*,GpMetafile**);
+UINT WINGDIPAPI GdipEmfToWmfBits(HENHMETAFILE,UINT,LPBYTE,INT,INT);
+
+/* PathGradientBrush functions */
+GpStatus WINGDIPAPI GdipCreatePathGradient(GDIPCONST GpPointF*,INT,GpWrapMode,GpPathGradient**);
+GpStatus WINGDIPAPI GdipCreatePathGradientI(GDIPCONST GpPoint*,INT,GpWrapMode,GpPathGradient**);
+GpStatus WINGDIPAPI GdipCreatePathGradientFromPath(GDIPCONST GpPath*,GpPathGradient**);
+GpStatus WINGDIPAPI GdipGetPathGradientCenterColor(GpPathGradient*,ARGB*);
+GpStatus WINGDIPAPI GdipSetPathGradientCenterColor(GpPathGradient*,ARGB);
+GpStatus WINGDIPAPI GdipGetPathGradientSurroundColorsWithCount(GpPathGradient*,ARGB*,INT*);
+GpStatus WINGDIPAPI GdipSetPathGradientSurroundColorsWithCount(GpPathGradient*,GDIPCONST ARGB*,INT*);
+GpStatus WINGDIPAPI GdipGetPathGradientPath(GpPathGradient*,GpPath*);
+GpStatus WINGDIPAPI GdipSetPathGradientPath(GpPathGradient*,GDIPCONST GpPath*);
+GpStatus WINGDIPAPI GdipGetPathGradientCenterPoint(GpPathGradient*,GpPointF*);
+GpStatus WINGDIPAPI GdipGetPathGradientCenterPointI(GpPathGradient*,GpPoint*);
+GpStatus WINGDIPAPI GdipSetPathGradientCenterPoint(GpPathGradient*,GDIPCONST GpPointF*);
+GpStatus WINGDIPAPI GdipSetPathGradientCenterPointI(GpPathGradient*,GDIPCONST GpPoint*);
+GpStatus WINGDIPAPI GdipGetPathGradientRect(GpPathGradient*,GpRectF*);
+GpStatus WINGDIPAPI GdipGetPathGradientRectI(GpPathGradient*,GpRect*);
+GpStatus WINGDIPAPI GdipGetPathGradientPointCount(GpPathGradient*,INT*);
+GpStatus WINGDIPAPI GdipGetPathGradientSurroundColorCount(GpPathGradient*,INT*);
+GpStatus WINGDIPAPI GdipSetPathGradientGammaCorrection(GpPathGradient*,BOOL);
+GpStatus WINGDIPAPI GdipGetPathGradientGammaCorrection(GpPathGradient*,BOOL*);
+GpStatus WINGDIPAPI GdipGetPathGradientBlendCount(GpPathGradient*,INT*);
+GpStatus WINGDIPAPI GdipGetPathGradientBlend(GpPathGradient*,REAL*,REAL*,INT);
+GpStatus WINGDIPAPI GdipSetPathGradientBlend(GpPathGradient*,GDIPCONST REAL*,GDIPCONST REAL*,INT);
+GpStatus WINGDIPAPI GdipGetPathGradientPresetBlendCount(GpPathGradient*,INT*);
+GpStatus WINGDIPAPI GdipGetPathGradientPresetBlend(GpPathGradient*,ARGB*,REAL*,INT);
+GpStatus WINGDIPAPI GdipSetPathGradientPresetBlend(GpPathGradient*,GDIPCONST ARGB*,GDIPCONST REAL*,INT);
+GpStatus WINGDIPAPI GdipSetPathGradientSigmaBlend(GpPathGradient*,REAL,REAL);
+GpStatus WINGDIPAPI GdipSetPathGradientLinearBlend(GpPathGradient*,REAL,REAL);
+GpStatus WINGDIPAPI GdipGetPathGradientWrapMode(GpPathGradient*,GpWrapMode*);
+GpStatus WINGDIPAPI GdipSetPathGradientWrapMode(GpPathGradient*,GpWrapMode);
+GpStatus WINGDIPAPI GdipGetPathGradientTransform(GpPathGradient*,GpMatrix*);
+GpStatus WINGDIPAPI GdipSetPathGradientTransform(GpPathGradient*,GpMatrix*);
+GpStatus WINGDIPAPI GdipResetPathGradientTransform(GpPathGradient*);
+GpStatus WINGDIPAPI GdipMultiplyPathGradientTransform(GpPathGradient*,GDIPCONST GpMatrix*,GpMatrixOrder);
+GpStatus WINGDIPAPI GdipTranslatePathGradientTransform(GpPathGradient*,REAL,REAL,GpMatrixOrder);
+GpStatus WINGDIPAPI GdipScalePathGradientTransform(GpPathGradient*,REAL,REAL,GpMatrixOrder);
+GpStatus WINGDIPAPI GdipRotatePathGradientTransform(GpPathGradient*,REAL,GpMatrixOrder);
+GpStatus WINGDIPAPI GdipGetPathGradientFocusScales(GpPathGradient*,REAL*,REAL*);
+GpStatus WINGDIPAPI GdipSetPathGradientFocusScales(GpPathGradient*,REAL,REAL);
+
+/* PathIterator functions */
+GpStatus WINGDIPAPI GdipCreatePathIter(GpPathIterator**,GpPath*);
+GpStatus WINGDIPAPI GdipDeletePathIter(GpPathIterator*);
+GpStatus WINGDIPAPI GdipPathIterNextSubpath(GpPathIterator*,INT*,INT*,INT*,BOOL*);
+GpStatus WINGDIPAPI GdipPathIterNextSubpathPath(GpPathIterator*,INT*,GpPath*,BOOL*);
+GpStatus WINGDIPAPI GdipPathIterNextPathType(GpPathIterator*,INT*,BYTE*,INT*,INT*);
+GpStatus WINGDIPAPI GdipPathIterNextMarker(GpPathIterator*,INT*,INT*,INT*);
+GpStatus WINGDIPAPI GdipPathIterNextMarkerPath(GpPathIterator*,INT*,GpPath*);
+GpStatus WINGDIPAPI GdipPathIterGetCount(GpPathIterator*,INT*);
+GpStatus WINGDIPAPI GdipPathIterGetSubpathCount(GpPathIterator*,INT*);
+GpStatus WINGDIPAPI GdipPathIterIsValid(GpPathIterator*,BOOL*);
+GpStatus WINGDIPAPI GdipPathIterHasCurve(GpPathIterator*,BOOL*);
+GpStatus WINGDIPAPI GdipPathIterRewind(GpPathIterator*);
+GpStatus WINGDIPAPI GdipPathIterEnumerate(GpPathIterator*,INT*,GpPointF*,BYTE*,INT);
+GpStatus WINGDIPAPI GdipPathIterCopyData(GpPathIterator*,INT*,GpPointF*,BYTE*,INT,INT);
+
+/* Pen functions */
+GpStatus WINGDIPAPI GdipCreatePen1(ARGB,REAL,GpUnit,GpPen**);
+GpStatus WINGDIPAPI GdipCreatePen2(GpBrush*,REAL,GpUnit,GpPen**);
+GpStatus WINGDIPAPI GdipClonePen(GpPen*,GpPen**);
+GpStatus WINGDIPAPI GdipDeletePen(GpPen*);
+GpStatus WINGDIPAPI GdipSetPenWidth(GpPen*,REAL);
+GpStatus WINGDIPAPI GdipGetPenWidth(GpPen*,REAL*);
+GpStatus WINGDIPAPI GdipSetPenUnit(GpPen*,GpUnit);
+GpStatus WINGDIPAPI GdipGetPenUnit(GpPen*,GpUnit*);
+GpStatus WINGDIPAPI GdipSetPenLineCap197819(GpPen*,GpLineCap,GpLineCap,GpDashCap);
+GpStatus WINGDIPAPI GdipSetPenStartCap(GpPen*,GpLineCap);
+GpStatus WINGDIPAPI GdipSetPenEndCap(GpPen*,GpLineCap);
+GpStatus WINGDIPAPI GdipSetPenDashCap197819(GpPen*,GpDashCap);
+GpStatus WINGDIPAPI GdipGetPenStartCap(GpPen*,GpLineCap*);
+GpStatus WINGDIPAPI GdipGetPenEndCap(GpPen*,GpLineCap*);
+GpStatus WINGDIPAPI GdipGetPenDashCap197819(GpPen*,GpDashCap*);
+GpStatus WINGDIPAPI GdipSetPenLineJoin(GpPen*,GpLineJoin);
+GpStatus WINGDIPAPI GdipGetPenLineJoin(GpPen*,GpLineJoin*);
+GpStatus WINGDIPAPI GdipSetPenCustomStartCap(GpPen*,GpCustomLineCap*);
+GpStatus WINGDIPAPI GdipGetPenCustomStartCap(GpPen*,GpCustomLineCap**);
+GpStatus WINGDIPAPI GdipSetPenCustomEndCap(GpPen*,GpCustomLineCap*);
+GpStatus WINGDIPAPI GdipGetPenCustomEndCap(GpPen*,GpCustomLineCap**);
+GpStatus WINGDIPAPI GdipSetPenMiterLimit(GpPen*,REAL);
+GpStatus WINGDIPAPI GdipGetPenMiterLimit(GpPen*,REAL*);
+GpStatus WINGDIPAPI GdipSetPenMode(GpPen*,GpPenAlignment);
+GpStatus WINGDIPAPI GdipGetPenMode(GpPen*,GpPenAlignment*);
+GpStatus WINGDIPAPI GdipSetPenTransform(GpPen*,GpMatrix*);
+GpStatus WINGDIPAPI GdipGetPenTransform(GpPen*,GpMatrix*);
+GpStatus WINGDIPAPI GdipResetPenTransform(GpPen*);
+GpStatus WINGDIPAPI GdipMultiplyPenTransform(GpPen*,GDIPCONST GpMatrix*,GpMatrixOrder);
+GpStatus WINGDIPAPI GdipTranslatePenTransform(GpPen*,REAL,REAL,GpMatrixOrder);
+GpStatus WINGDIPAPI GdipScalePenTransform(GpPen*,REAL,REAL,GpMatrixOrder);
+GpStatus WINGDIPAPI GdipRotatePenTransform(GpPen*,REAL,GpMatrixOrder);
+GpStatus WINGDIPAPI GdipSetPenColor(GpPen*,ARGB);
+GpStatus WINGDIPAPI GdipGetPenColor(GpPen*,ARGB*);
+GpStatus WINGDIPAPI GdipSetPenBrushFill(GpPen*,GpBrush*);
+GpStatus WINGDIPAPI GdipGetPenBrushFill(GpPen*,GpBrush**);
+GpStatus WINGDIPAPI GdipGetPenFillType(GpPen*,GpPenType*);
+GpStatus WINGDIPAPI GdipGetPenDashStyle(GpPen*,GpDashStyle*);
+GpStatus WINGDIPAPI GdipSetPenDashStyle(GpPen*,GpDashStyle);
+GpStatus WINGDIPAPI GdipGetPenDashOffset(GpPen*,REAL*);
+GpStatus WINGDIPAPI GdipSetPenDashOffset(GpPen*,REAL);
+GpStatus WINGDIPAPI GdipGetPenDashCount(GpPen*,INT*);
+GpStatus WINGDIPAPI GdipSetPenDashArray(GpPen*,GDIPCONST REAL*,INT);
+GpStatus WINGDIPAPI GdipGetPenDashArray(GpPen*,REAL*,INT);
+GpStatus WINGDIPAPI GdipGetPenCompoundCount(GpPen*,INT*);
+GpStatus WINGDIPAPI GdipSetPenCompoundArray(GpPen*,GDIPCONST REAL*,INT);
+GpStatus WINGDIPAPI GdipGetPenCompoundArray(GpPen*,REAL*,INT);
+
+/* Region functions */
+GpStatus WINGDIPAPI GdipCreateRegion(GpRegion**);
+GpStatus WINGDIPAPI GdipCreateRegionRect(GDIPCONST GpRectF*,GpRegion**);
+GpStatus WINGDIPAPI GdipCreateRegionRectI(GDIPCONST GpRect*,GpRegion**);
+GpStatus WINGDIPAPI GdipCreateRegionPath(GpPath*,GpRegion**);
+GpStatus WINGDIPAPI GdipCreateRegionRgnData(GDIPCONST BYTE*,INT,GpRegion**);
+GpStatus WINGDIPAPI GdipCreateRegionHrgn(HRGN,GpRegion**);
+GpStatus WINGDIPAPI GdipCloneRegion(GpRegion*,GpRegion**);
+GpStatus WINGDIPAPI GdipDeleteRegion(GpRegion*);
+GpStatus WINGDIPAPI GdipSetInfinite(GpRegion*);
+GpStatus WINGDIPAPI GdipSetEmpty(GpRegion*);
+GpStatus WINGDIPAPI GdipCombineRegionRect(GpRegion*,GDIPCONST GpRectF*,CombineMode);
+GpStatus WINGDIPAPI GdipCombineRegionRectI(GpRegion*,GDIPCONST GpRect*,CombineMode);
+GpStatus WINGDIPAPI GdipCombineRegionPath(GpRegion*,GpPath*,CombineMode);
+GpStatus WINGDIPAPI GdipCombineRegionRegion(GpRegion*,GpRegion*,CombineMode);
+GpStatus WINGDIPAPI GdipTranslateRegion(GpRegion*,REAL,REAL);
+GpStatus WINGDIPAPI GdipTranslateRegionI(GpRegion*,INT,INT);
+GpStatus WINGDIPAPI GdipTransformRegion(GpRegion*,GpMatrix*);
+GpStatus WINGDIPAPI GdipGetRegionBounds(GpRegion*,GpGraphics*,GpRectF*);
+GpStatus WINGDIPAPI GdipGetRegionBoundsI(GpRegion*,GpGraphics*,GpRect*);
+GpStatus WINGDIPAPI GdipGetRegionHRgn(GpRegion*,GpGraphics*,HRGN*);
+GpStatus WINGDIPAPI GdipIsEmptyRegion(GpRegion*,GpGraphics*,BOOL*);
+GpStatus WINGDIPAPI GdipIsInfiniteRegion(GpRegion*,GpGraphics*,BOOL*);
+GpStatus WINGDIPAPI GdipIsEqualRegion(GpRegion*,GpRegion*,GpGraphics*,BOOL*);
+GpStatus WINGDIPAPI GdipGetRegionDataSize(GpRegion*,UINT*);
+GpStatus WINGDIPAPI GdipGetRegionData(GpRegion*,BYTE*,UINT,UINT*);
+GpStatus WINGDIPAPI GdipIsVisibleRegionPoint(GpRegion*,REAL,REAL,GpGraphics*,BOOL*);
+GpStatus WINGDIPAPI GdipIsVisibleRegionPointI(GpRegion*,INT,INT,GpGraphics*,BOOL*);
+GpStatus WINGDIPAPI GdipIsVisibleRegionRect(GpRegion*,REAL,REAL,REAL,REAL,GpGraphics*,BOOL*);
+GpStatus WINGDIPAPI GdipIsVisibleRegionRectI(GpRegion*,INT,INT,INT,INT,GpGraphics*,BOOL*);
+GpStatus WINGDIPAPI GdipGetRegionScansCount(GpRegion*,UINT*,GpMatrix*);
+GpStatus WINGDIPAPI GdipGetRegionScans(GpRegion*,GpRectF*,INT*,GpMatrix*);
+GpStatus WINGDIPAPI GdipGetRegionScansI(GpRegion*,GpRect*,INT*,GpMatrix*);
+
+/* SolidBrush functions */
+GpStatus WINGDIPAPI GdipCreateSolidFill(ARGB,GpSolidFill**);
+GpStatus WINGDIPAPI GdipSetSolidFillColor(GpSolidFill*,ARGB);
+GpStatus WINGDIPAPI GdipGetSolidFillColor(GpSolidFill*,ARGB*);
+
+/* StringFormat functions */
+GpStatus WINGDIPAPI GdipCreateStringFormat(INT,LANGID,GpStringFormat**);
+GpStatus WINGDIPAPI GdipStringFormatGetGenericDefault(GpStringFormat**);
+GpStatus WINGDIPAPI GdipStringFormatGetGenericTypographic(GpStringFormat**);
+GpStatus WINGDIPAPI GdipDeleteStringFormat(GpStringFormat*);
+GpStatus WINGDIPAPI GdipCloneStringFormat(GDIPCONST GpStringFormat*,GpStringFormat**);
+GpStatus WINGDIPAPI GdipSetStringFormatFlags(GpStringFormat*,INT);
+GpStatus WINGDIPAPI GdipGetStringFormatFlags(GDIPCONST GpStringFormat*,INT*);
+GpStatus WINGDIPAPI GdipSetStringFormatAlign(GpStringFormat*,StringAlignment);
+GpStatus WINGDIPAPI GdipGetStringFormatAlign(GDIPCONST GpStringFormat*,StringAlignment*);
+GpStatus WINGDIPAPI GdipSetStringFormatLineAlign(GpStringFormat*,StringAlignment);
+GpStatus WINGDIPAPI GdipGetStringFormatLineAlign(GDIPCONST GpStringFormat*,StringAlignment*);
+GpStatus WINGDIPAPI GdipSetStringFormatTrimming(GpStringFormat*,StringTrimming);
+GpStatus WINGDIPAPI GdipGetStringFormatTrimming(GDIPCONST GpStringFormat*,StringTrimming*);
+GpStatus WINGDIPAPI GdipSetStringFormatHotkeyPrefix(GpStringFormat*,INT);
+GpStatus WINGDIPAPI GdipGetStringFormatHotkeyPrefix(GDIPCONST GpStringFormat*,INT*);
+GpStatus WINGDIPAPI GdipSetStringFormatTabStops(GpStringFormat*,REAL,INT,GDIPCONST REAL*);
+GpStatus WINGDIPAPI GdipGetStringFormatTabStops(GDIPCONST GpStringFormat*,INT,REAL*,REAL*);
+GpStatus WINGDIPAPI GdipGetStringFormatTabStopCount(GDIPCONST GpStringFormat*,INT*);
+GpStatus WINGDIPAPI GdipSetStringFormatDigitSubstitution(GpStringFormat*,LANGID,StringDigitSubstitute);
+GpStatus WINGDIPAPI GdipGetStringFormatDigitSubstitution(GDIPCONST GpStringFormat*,LANGID*,StringDigitSubstitute*);
+GpStatus WINGDIPAPI GdipGetStringFormatMeasurableCharacterRangeCount(GDIPCONST GpStringFormat*,INT*);
+GpStatus WINGDIPAPI GdipSetStringFormatMeasurableCharacterRanges(GpStringFormat*,INT,GDIPCONST CharacterRange*);
+
+/* Text functions */
+GpStatus WINGDIPAPI GdipDrawString(GpGraphics*,GDIPCONST WCHAR*,INT,GDIPCONST GpFont*,GDIPCONST RectF*,GDIPCONST GpStringFormat*,GDIPCONST GpBrush*);
+GpStatus WINGDIPAPI GdipMeasureString(GpGraphics*,GDIPCONST WCHAR*,INT,GDIPCONST GpFont*,GDIPCONST RectF*,GDIPCONST GpStringFormat*,RectF*,INT*,INT*);
+#ifdef __cplusplus
+GpStatus WINGDIPAPI GdipMeasureCharacterRanges(GpGraphics*,GDIPCONST WCHAR*,INT,GDIPCONST GpFont*,GDIPCONST RectF&,GDIPCONST GpStringFormat*,INT,GpRegion**);
+#endif
+GpStatus WINGDIPAPI GdipDrawDriverString(GpGraphics*,GDIPCONST UINT16*,INT,GDIPCONST GpFont*,GDIPCONST GpBrush*,GDIPCONST PointF*,INT,GDIPCONST GpMatrix*);
+GpStatus WINGDIPAPI GdipMeasureDriverString(GpGraphics*,GDIPCONST UINT16*,INT,GDIPCONST GpFont*,GDIPCONST PointF*,INT,GDIPCONST GpMatrix*,RectF*);
+
+/* TextureBrush functions */
+GpStatus WINGDIPAPI GdipCreateTexture(GpImage*,GpWrapMode,GpTexture**);
+GpStatus WINGDIPAPI GdipCreateTexture2(GpImage*,GpWrapMode,REAL,REAL,REAL,REAL,GpTexture**);
+GpStatus WINGDIPAPI GdipCreateTexture2I(GpImage*,GpWrapMode,INT,INT,INT,INT,GpTexture**);
+GpStatus WINGDIPAPI GdipCreateTextureIA(GpImage*,GDIPCONST GpImageAttributes*,REAL,REAL,REAL,REAL,GpTexture**);
+GpStatus WINGDIPAPI GdipCreateTextureIAI(GpImage*,GDIPCONST GpImageAttributes*,INT,INT,INT,INT,GpTexture**);
+GpStatus WINGDIPAPI GdipGetTextureTransform(GpTexture*,GpMatrix*);
+GpStatus WINGDIPAPI GdipSetTextureTransform(GpTexture*,GDIPCONST GpMatrix*);
+GpStatus WINGDIPAPI GdipResetTextureTransform(GpTexture*);
+GpStatus WINGDIPAPI GdipMultiplyTextureTransform(GpTexture*,GDIPCONST GpMatrix*,GpMatrixOrder);
+GpStatus WINGDIPAPI GdipTranslateTextureTransform(GpTexture*,REAL,REAL,GpMatrixOrder);
+GpStatus WINGDIPAPI GdipScaleTextureTransform(GpTexture*,REAL,REAL,GpMatrixOrder);
+GpStatus WINGDIPAPI GdipRotateTextureTransform(GpTexture*,REAL,GpMatrixOrder);
+GpStatus WINGDIPAPI GdipSetTextureWrapMode(GpTexture*,GpWrapMode);
+GpStatus WINGDIPAPI GdipGetTextureWrapMode(GpTexture*,GpWrapMode*);
+GpStatus WINGDIPAPI GdipGetTextureImage(GpTexture*,GpImage**);
+
+/* uncategorized functions */
+GpStatus WINGDIPAPI GdipTestControl(GpTestControlEnum,void*);
+
+#ifdef __cplusplus
+}  /* extern "C" */
+}  /* namespace DllExports */
+#endif
+
+#endif /* __GDIPLUS_FLAT_H */
diff --git a/mingw-w64-headers/include/gdiplus/gdiplusgpstubs.h b/mingw-w64-headers/include/gdiplus/gdiplusgpstubs.h
new file mode 100644
index 0000000..b11d416
--- /dev/null
+++ b/mingw-w64-headers/include/gdiplus/gdiplusgpstubs.h
@@ -0,0 +1,139 @@
+/*
+ * gdiplusgpstubs.h
+ *
+ * GDI+ Gp* type declarations
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ *   Created by Markus Koenig <markus@stber-koenig.de>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __GDIPLUS_GPSTUBS_H
+#define __GDIPLUS_GPSTUBS_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+typedef Point GpPoint;
+typedef PointF GpPointF;
+typedef Rect GpRect;
+typedef RectF GpRectF;
+typedef Size GpSize;
+typedef SizeF GpSizeF;
+
+typedef enum BrushType GpBrushType;
+typedef enum CombineMode GpCombineMode;
+typedef enum CompositingMode GpCompositingMode;
+typedef enum CompositingQuality GpCompositingQuality;
+typedef enum CoordinateSpace GpCoordinateSpace;
+typedef enum CustomLineCapType GpCustomLineCapType;
+typedef enum DashCap GpDashCap;
+typedef enum DashStyle GpDashStyle;
+typedef enum DitherType GpDitherType;
+typedef enum DriverStringOptions GpDriverStringOptions;
+typedef enum EmfPlusRecordType GpEmfPlusRecordType;
+typedef enum EmfToWmfBitsFlags GpEmfToWmfBitsFlags;
+typedef enum EmfType GpEmfType;
+typedef enum EncoderParameterValueType GpEncoderParameterValueType;
+typedef enum EncoderValue GpEncoderValue;
+typedef enum FillMode GpFillMode;
+typedef enum FlushIntention GpFlushIntention;
+typedef enum FontStyle GpFontStyle;
+typedef enum HatchStyle GpHatchStyle;
+typedef enum HotkeyPrefix GpHotkeyPrefix;
+typedef enum ImageType GpImageType;
+typedef enum InterpolationMode GpInterpolationMode;
+typedef enum LinearGradientMode GpLinearGradientMode;
+typedef enum LineCap GpLineCap;
+typedef enum LineJoin GpLineJoin;
+typedef enum MatrixOrder GpMatrixOrder;
+typedef enum MetafileFrameUnit GpMetafileFrameUnit;
+typedef enum MetafileType GpMetafileType;
+typedef enum ObjectType GpObjectType;
+typedef enum PathPointType GpPathPointType;
+typedef enum PenAlignment GpPenAlignment;
+typedef enum PenType GpPenType;
+typedef enum PixelOffsetMode GpPixelOffsetMode;
+typedef enum QualityMode GpQualityMode;
+typedef enum SmoothingMode GpSmoothingMode;
+typedef enum StringAlignment GpStringAlignment;
+typedef enum StringDigitSubstitute GpStringDigitSubstitute;
+typedef enum StringFormatFlags GpStringFormatFlags;
+typedef enum StringTrimming GpStringTrimming;
+typedef enum TextRenderingHint GpTextRenderingHint;
+typedef enum Unit GpUnit;
+typedef enum WarpMode GpWarpMode;
+typedef enum WrapMode GpWrapMode;
+
+#ifdef __cplusplus
+
+class CGpEffect {}; 
+class GpCustomLineCap {};
+class GpImage {};
+
+class GpAdjustableArrowCap: public GpCustomLineCap {};
+class GpBitmap: public GpImage {};
+class GpBrush {};
+class GpCachedBitmap {};
+class GpFont {};
+class GpFontCollection {};
+class GpFontFamily {};
+class GpGraphics {};
+class GpHatch: public GpBrush {};         /* HatchBrush */
+class GpImageAttributes {};
+class GpLineGradient: public GpBrush {};  /* LinearGradientBrush */
+class GpMatrix {};
+class GpMetafile: public GpImage {};
+class GpPath {};                          /* GraphicsPath */
+class GpPathData {};
+class GpPathGradient: public GpBrush {};  /* PathGradientBrush */
+class GpPathIterator {};                  /* GraphicsPathIterator */
+class GpPen {};
+class GpRegion {};
+class GpSolidFill: public GpBrush {};     /* SolidBrush */
+class GpStringFormat {};
+class GpTexture: public GpBrush {};       /* TextureBrush */
+
+#else /* !__cplusplus */
+
+typedef void CGpEffect;
+typedef void GpAdjustableArrowCap;
+typedef void GpBitmap;
+typedef void GpBrush;
+typedef void GpCachedBitmap;
+typedef void GpCustomLineCap;
+typedef void GpFont;
+typedef void GpFontFamily;
+typedef void GpFontCollection;
+typedef void GpGraphics;
+typedef void GpHatch;
+typedef void GpImage;
+typedef void GpImageAttributes;
+typedef void GpLineGradient;
+typedef void GpMatrix;
+typedef void GpMetafile;
+typedef void GpPath;
+typedef void GpPathData;
+typedef void GpPathGradient;
+typedef void GpPathIterator;
+typedef void GpPen;
+typedef void GpRegion;
+typedef void GpSolidFill;
+typedef void GpStringFormat;
+typedef void GpTexture;
+
+#endif /* !__cplusplus */
+
+#endif /* __GDIPLUS_GPSTUBS_H */
diff --git a/mingw-w64-headers/include/gdiplus/gdiplusgraphics.h b/mingw-w64-headers/include/gdiplus/gdiplusgraphics.h
new file mode 100644
index 0000000..360c897
--- /dev/null
+++ b/mingw-w64-headers/include/gdiplus/gdiplusgraphics.h
@@ -0,0 +1,1540 @@
+/*
+ * gdiplusgraphics.h
+ *
+ * GDI+ Graphics class
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ *   Created by Markus Koenig <markus@stber-koenig.de>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __GDIPLUS_GRAPHICS_H
+#define __GDIPLUS_GRAPHICS_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifndef __cplusplus
+#error "A C++ compiler is required to include gdiplusgraphics.h."
+#endif
+
+class Graphics: public GdiplusBase
+{
+	friend class Bitmap;
+	friend class CachedBitmap;
+	friend class Font;
+	friend class GraphicsPath;
+	friend class Metafile;
+	friend class Region;
+
+public:
+	static Graphics* FromHDC(HDC hdc)
+	{
+		return new Graphics(hdc);
+	}
+	static Graphics* FromHDC(HDC hdc, HANDLE hdevice)
+	{
+		return new Graphics(hdc, hdevice);
+	}
+	static Graphics* FromHWND(HWND hwnd, BOOL icm = FALSE)
+	{
+		return new Graphics(hwnd, icm);
+	}
+	static Graphics* FromImage(Image *image)
+	{
+		return new Graphics(image);
+	}
+	static HPALETTE GetHalftonePalette()
+	{
+		return DllExports::GdipCreateHalftonePalette();
+	}
+
+	Graphics(Image *image): nativeGraphics(NULL), lastStatus(Ok)
+	{
+		lastStatus = DllExports::GdipGetImageGraphicsContext(
+				image ? image->nativeImage : NULL,
+				&nativeGraphics);
+	}
+	Graphics(HDC hdc): nativeGraphics(NULL), lastStatus(Ok)
+	{
+		lastStatus = DllExports::GdipCreateFromHDC(
+				hdc, &nativeGraphics);
+	}
+	Graphics(HDC hdc, HANDLE hdevice): nativeGraphics(NULL), lastStatus(Ok)
+	{
+		lastStatus = DllExports::GdipCreateFromHDC2(
+				hdc, hdevice, &nativeGraphics);
+	}
+	Graphics(HWND hwnd, BOOL icm = FALSE):
+		nativeGraphics(NULL), lastStatus(Ok)
+	{
+		if (icm) {
+			lastStatus = DllExports::GdipCreateFromHWNDICM(
+					hwnd, &nativeGraphics);
+		} else {
+			lastStatus = DllExports::GdipCreateFromHWND(
+					hwnd, &nativeGraphics);
+		}
+	}
+	~Graphics()
+	{
+		DllExports::GdipDeleteGraphics(nativeGraphics);
+	}
+
+	Status AddMetafileComment(const BYTE *data, UINT sizeData)
+	{
+		return updateStatus(DllExports::GdipComment(
+				nativeGraphics, sizeData, data));
+	}
+	GraphicsContainer BeginContainer()
+	{
+		GraphicsContainer result = 0;
+		updateStatus(DllExports::GdipBeginContainer2(
+				nativeGraphics, &result));
+		return result;
+	}
+	GraphicsContainer BeginContainer(const RectF& dstrect,
+			const RectF& srcrect, Unit unit)
+	{
+		GraphicsContainer result = 0;
+		updateStatus(DllExports::GdipBeginContainer(
+				nativeGraphics, &dstrect, &srcrect, unit,
+				&result));
+		return result;
+	}
+	GraphicsContainer BeginContainer(const Rect& dstrect,
+			const Rect& srcrect, Unit unit)
+	{
+		GraphicsContainer result = 0;
+		updateStatus(DllExports::GdipBeginContainerI(
+				nativeGraphics, &dstrect, &srcrect, unit,
+				&result));
+		return result;
+	}
+	Status Clear(const Color& color)
+	{
+		return updateStatus(DllExports::GdipGraphicsClear(
+				nativeGraphics, color.GetValue()));
+	}
+	Status DrawArc(const Pen *pen, REAL x, REAL y, REAL width, REAL height,
+			REAL startAngle, REAL sweepAngle)
+	{
+		return updateStatus(DllExports::GdipDrawArc(
+				nativeGraphics, pen ? pen->nativePen : NULL,
+				x, y, width, height, startAngle, sweepAngle));
+	}
+	Status DrawArc(const Pen *pen, INT x, INT y, INT width, INT height,
+			REAL startAngle, REAL sweepAngle)
+	{
+		return updateStatus(DllExports::GdipDrawArcI(
+				nativeGraphics, pen ? pen->nativePen : NULL,
+				x, y, width, height, startAngle, sweepAngle));
+	}
+	Status DrawArc(const Pen *pen, const RectF& rect,
+			REAL startAngle, REAL sweepAngle)
+	{
+		return updateStatus(DllExports::GdipDrawArc(
+				nativeGraphics, pen ? pen->nativePen : NULL,
+				rect.X, rect.Y, rect.Width, rect.Height,
+				startAngle, sweepAngle));
+	}
+	Status DrawArc(const Pen *pen, const Rect& rect,
+			REAL startAngle, REAL sweepAngle)
+	{
+		return updateStatus(DllExports::GdipDrawArcI(
+				nativeGraphics, pen ? pen->nativePen : NULL,
+				rect.X, rect.Y, rect.Width, rect.Height,
+				startAngle, sweepAngle));
+	}
+	Status DrawBezier(const Pen *pen,
+			REAL x1, REAL y1, REAL x2, REAL y2,
+			REAL x3, REAL y3, REAL x4, REAL y4)
+	{
+		return updateStatus(DllExports::GdipDrawBezier(
+				nativeGraphics, pen ? pen->nativePen : NULL,
+				x1, y1, x2, y2, x3, y3, x4, y4));
+	}
+	Status DrawBezier(const Pen *pen,
+			INT x1, INT y1, INT x2, INT y2,
+			INT x3, INT y3, INT x4, INT y4)
+	{
+		return updateStatus(DllExports::GdipDrawBezierI(
+				nativeGraphics, pen ? pen->nativePen : NULL,
+				x1, y1, x2, y2, x3, y3, x4, y4));
+	}
+	Status DrawBezier(const Pen *pen,
+			const PointF& pt1, const PointF& pt2,
+			const PointF& pt3, const PointF& pt4)
+	{
+		return updateStatus(DllExports::GdipDrawBezier(
+				nativeGraphics, pen ? pen->nativePen : NULL,
+				pt1.X, pt1.Y, pt2.X, pt2.Y,
+				pt3.X, pt3.Y, pt4.X, pt4.Y));
+	}
+	Status DrawBezier(const Pen *pen,
+			const Point& pt1, const Point& pt2,
+			const Point& pt3, const Point& pt4)
+	{
+		return updateStatus(DllExports::GdipDrawBezierI(
+				nativeGraphics, pen ? pen->nativePen : NULL,
+				pt1.X, pt1.Y, pt2.X, pt2.Y,
+				pt3.X, pt3.Y, pt4.X, pt4.Y));
+	}
+	Status DrawBeziers(const Pen *pen, const PointF *points, INT count)
+	{
+		return updateStatus(DllExports::GdipDrawBeziers(
+				nativeGraphics, pen ? pen->nativePen : NULL,
+				points, count));
+	}
+	Status DrawBeziers(const Pen *pen, const Point *points, INT count)
+	{
+		return updateStatus(DllExports::GdipDrawBeziersI(
+				nativeGraphics, pen ? pen->nativePen : NULL,
+				points, count));
+	}
+	Status DrawCachedBitmap(CachedBitmap *cb, INT x, INT y)
+	{
+		return updateStatus(DllExports::GdipDrawCachedBitmap(
+				nativeGraphics,
+				cb ? cb->nativeCachedBitmap : NULL,
+				x, y));
+	}
+	Status DrawClosedCurve(const Pen *pen, const PointF *points, INT count)
+	{
+		return updateStatus(DllExports::GdipDrawClosedCurve(
+				nativeGraphics, pen ? pen->nativePen : NULL,
+				points, count));
+	}
+	Status DrawClosedCurve(const Pen *pen, const Point *points, INT count)
+	{
+		return updateStatus(DllExports::GdipDrawClosedCurveI(
+				nativeGraphics, pen ? pen->nativePen : NULL,
+				points, count));
+	}
+	Status DrawClosedCurve(const Pen *pen, const PointF *points, INT count,
+			REAL tension)
+	{
+		return updateStatus(DllExports::GdipDrawClosedCurve2(
+				nativeGraphics, pen ? pen->nativePen : NULL,
+				points, count, tension));
+	}
+	Status DrawClosedCurve(const Pen *pen, const Point *points, INT count,
+			REAL tension)
+	{
+		return updateStatus(DllExports::GdipDrawClosedCurve2I(
+				nativeGraphics, pen ? pen->nativePen : NULL,
+				points, count, tension));
+	}
+	Status DrawCurve(const Pen *pen, const PointF *points, INT count)
+	{
+		return updateStatus(DllExports::GdipDrawCurve(
+				nativeGraphics, pen ? pen->nativePen : NULL,
+				points, count));
+	}
+	Status DrawCurve(const Pen *pen, const Point *points, INT count)
+	{
+		return updateStatus(DllExports::GdipDrawCurveI(
+				nativeGraphics, pen ? pen->nativePen : NULL,
+				points, count));
+	}
+	Status DrawCurve(const Pen *pen, const PointF *points, INT count,
+			REAL tension)
+	{
+		return updateStatus(DllExports::GdipDrawCurve2(
+				nativeGraphics, pen ? pen->nativePen : NULL,
+				points, count, tension));
+	}
+	Status DrawCurve(const Pen *pen, const Point *points, INT count,
+			REAL tension)
+	{
+		return updateStatus(DllExports::GdipDrawCurve2I(
+				nativeGraphics, pen ? pen->nativePen : NULL,
+				points, count, tension));
+	}
+	Status DrawCurve(const Pen *pen, const PointF *points, INT count,
+			INT offset, INT numberOfSegments, REAL tension)
+	{
+		return updateStatus(DllExports::GdipDrawCurve3(
+				nativeGraphics, pen ? pen->nativePen : NULL,
+				points, count, offset,
+				numberOfSegments, tension));
+	}
+	Status DrawCurve(const Pen *pen, const Point *points, INT count,
+			INT offset, INT numberOfSegments, REAL tension)
+	{
+		return updateStatus(DllExports::GdipDrawCurve3I(
+				nativeGraphics, pen ? pen->nativePen : NULL,
+				points, count, offset,
+				numberOfSegments, tension));
+	}
+	Status DrawDriverString(const UINT16 *text, INT length,
+			const Font *font, const Brush *brush,
+			const PointF *positions, INT flags,
+			const Matrix *matrix)
+	{
+		return updateStatus(DllExports::GdipDrawDriverString(
+				nativeGraphics, text, length,
+				font ? font->nativeFont : NULL,
+				brush ? brush->nativeBrush : NULL,
+				positions, flags,
+				matrix ? matrix->nativeMatrix : NULL));
+	}
+	Status DrawEllipse(const Pen *pen,
+			REAL x, REAL y, REAL width, REAL height)
+	{
+		return updateStatus(DllExports::GdipDrawEllipse(
+				nativeGraphics, pen ? pen->nativePen : NULL,
+				x, y, width, height));
+	}
+	Status DrawEllipse(const Pen *pen, INT x, INT y, INT width, INT height)
+	{
+		return updateStatus(DllExports::GdipDrawEllipseI(
+				nativeGraphics, pen ? pen->nativePen : NULL,
+				x, y, width, height));
+	}
+	Status DrawEllipse(const Pen *pen, const RectF& rect)
+	{
+		return updateStatus(DllExports::GdipDrawEllipse(
+				nativeGraphics, pen ? pen->nativePen : NULL,
+				rect.X, rect.Y, rect.Width, rect.Height));
+	}
+	Status DrawEllipse(const Pen *pen, const Rect& rect)
+	{
+		return updateStatus(DllExports::GdipDrawEllipseI(
+				nativeGraphics, pen ? pen->nativePen : NULL,
+				rect.X, rect.Y, rect.Width, rect.Height));
+	}
+	Status DrawImage(Image *image, REAL x, REAL y)
+	{
+		return updateStatus(DllExports::GdipDrawImage(
+				nativeGraphics,
+				image ? image->nativeImage : NULL,
+				x, y));
+	}
+	Status DrawImage(Image *image, INT x, INT y)
+	{
+		return updateStatus(DllExports::GdipDrawImageI(
+				nativeGraphics,
+				image ? image->nativeImage : NULL,
+				x, y));
+	}
+	Status DrawImage(Image *image, const PointF& point)
+	{
+		return updateStatus(DllExports::GdipDrawImage(
+				nativeGraphics,
+				image ? image->nativeImage : NULL,
+				point.X, point.Y));
+	}
+	Status DrawImage(Image *image, const Point& point)
+	{
+		return updateStatus(DllExports::GdipDrawImageI(
+				nativeGraphics,
+				image ? image->nativeImage : NULL,
+				point.X, point.Y));
+	}
+	Status DrawImage(Image *image, REAL x, REAL y, REAL width, REAL height)
+	{
+		return updateStatus(DllExports::GdipDrawImageRect(
+				nativeGraphics,
+				image ? image->nativeImage : NULL,
+				x, y, width, height));
+	}
+	Status DrawImage(Image *image, INT x, INT y, INT width, INT height)
+	{
+		return updateStatus(DllExports::GdipDrawImageRectI(
+				nativeGraphics,
+				image ? image->nativeImage : NULL,
+				x, y, width, height));
+	}
+	Status DrawImage(Image *image, const RectF& rect)
+	{
+		return updateStatus(DllExports::GdipDrawImageRect(
+				nativeGraphics,
+				image ? image->nativeImage : NULL,
+				rect.X, rect.Y, rect.Width, rect.Height));
+	}
+	Status DrawImage(Image *image, const Rect& rect)
+	{
+		return updateStatus(DllExports::GdipDrawImageRectI(
+				nativeGraphics,
+				image ? image->nativeImage : NULL,
+				rect.X, rect.Y, rect.Width, rect.Height));
+	}
+	Status DrawImage(Image *image, const PointF *destPoints, INT count)
+	{
+		return updateStatus(DllExports::GdipDrawImagePoints(
+				nativeGraphics,
+				image ? image->nativeImage : NULL,
+				destPoints, count));
+	}
+	Status DrawImage(Image *image, const Point *destPoints, INT count)
+	{
+		return updateStatus(DllExports::GdipDrawImagePointsI(
+				nativeGraphics,
+				image ? image->nativeImage : NULL,
+				destPoints, count));
+	}
+	Status DrawImage(Image *image, REAL x, REAL y, REAL srcx, REAL srcy,
+			REAL srcwidth, REAL srcheight, Unit srcUnit)
+	{
+		return updateStatus(DllExports::GdipDrawImagePointRect(
+				nativeGraphics,
+				image ? image->nativeImage : NULL,
+				x, y, srcx, srcy, srcwidth, srcheight,
+				srcUnit));
+	}
+	Status DrawImage(Image *image, INT x, INT y, INT srcx, INT srcy,
+			INT srcwidth, INT srcheight, Unit srcUnit)
+	{
+		return updateStatus(DllExports::GdipDrawImagePointRectI(
+				nativeGraphics,
+				image ? image->nativeImage : NULL,
+				x, y, srcx, srcy, srcwidth, srcheight,
+				srcUnit));
+	}
+	Status DrawImage(Image *image, const RectF& destRect,
+			REAL srcx, REAL srcy, REAL srcwidth, REAL srcheight,
+			Unit srcUnit,
+			const ImageAttributes *imageAttributes = NULL,
+			DrawImageAbort callback = NULL,
+			VOID *callbackData = NULL)
+	{
+		return updateStatus(DllExports::GdipDrawImageRectRect(
+				nativeGraphics,
+				image ? image->nativeImage : NULL,
+				destRect.X, destRect.Y,
+				destRect.Width, destRect.Height,
+				srcx, srcy, srcwidth, srcheight, srcUnit,
+				imageAttributes ? imageAttributes->nativeImageAttributes : NULL,
+				callback, callbackData));
+	}
+	Status DrawImage(Image *image, const Rect& destRect,
+			INT srcx, INT srcy, INT srcwidth, INT srcheight,
+			Unit srcUnit,
+			const ImageAttributes *imageAttributes = NULL,
+			DrawImageAbort callback = NULL,
+			VOID *callbackData = NULL)
+	{
+		return updateStatus(DllExports::GdipDrawImageRectRectI(
+				nativeGraphics,
+				image ? image->nativeImage : NULL,
+				destRect.X, destRect.Y,
+				destRect.Width, destRect.Height,
+				srcx, srcy, srcwidth, srcheight, srcUnit,
+				imageAttributes ? imageAttributes->nativeImageAttributes : NULL,
+				callback, callbackData));
+	}
+	Status DrawImage(Image *image, const RectF& destRect,
+			const RectF& sourceRect, Unit srcUnit,
+			const ImageAttributes *imageAttributes = NULL)
+	{
+		return updateStatus(DllExports::GdipDrawImageRectRectI(
+				nativeGraphics,
+				image ? image->nativeImage : NULL,
+				destRect.X, destRect.Y,
+				destRect.Width, destRect.Height,
+				sourceRect.X, sourceRect.Y,
+				sourceRect.Width, sourceRect.Height, srcUnit,
+				imageAttributes ? imageAttributes->nativeImageAttributes : NULL,
+				NULL, NULL));
+	}
+	Status DrawImage(Image *image, const PointF *destPoints, INT count,
+			REAL srcx, REAL srcy, REAL srcwidth, REAL srcheight,
+			Unit srcUnit,
+			const ImageAttributes *imageAttributes = NULL,
+			DrawImageAbort callback = NULL,
+			VOID *callbackData = NULL)
+	{
+		return updateStatus(DllExports::GdipDrawImagePointsRect(
+				nativeGraphics,
+				image ? image->nativeImage : NULL,
+				destPoints, count,
+				srcx, srcy, srcwidth, srcheight, srcUnit,
+				imageAttributes ? imageAttributes->nativeImageAttributes : NULL,
+				callback, callbackData));
+	}
+	Status DrawImage(Image *image, const Point *destPoints, INT count,
+			INT srcx, INT srcy, INT srcwidth, INT srcheight,
+			Unit srcUnit,
+			const ImageAttributes *imageAttributes = NULL,
+			DrawImageAbort callback = NULL,
+			VOID *callbackData = NULL)
+	{
+		return updateStatus(DllExports::GdipDrawImagePointsRectI(
+				nativeGraphics,
+				image ? image->nativeImage : NULL,
+				destPoints, count,
+				srcx, srcy, srcwidth, srcheight, srcUnit,
+				imageAttributes ? imageAttributes->nativeImageAttributes : NULL,
+				callback, callbackData));
+	}
+	// TODO: [GDI+ 1.1] Graphics::DrawImage(..Effect..)
+	//Status DrawImage(Image *image, RectF *sourceRect, Matrix *matrix,
+	//		Effect *effect, ImageAttributes *imageAttributes,
+	//		Unit srcUnit)
+	//{
+	//	return updateStatus(DllExports::GdipDrawImageFX(
+	//			nativeGraphics,
+	//			image ? image->nativeImage : NULL,
+	//			sourceRect,
+	//			matrix ? matrix->nativeMatrix : NULL,
+	//			effect ? effect->nativeEffect : NULL,
+	//			imageAttributes ? imageAttributes->nativeImageAttributes : NULL,
+	//			srcUnit));
+	//}
+	Status DrawLine(const Pen *pen, REAL x1, REAL y1, REAL x2, REAL y2)
+	{
+		return updateStatus(DllExports::GdipDrawLine(
+				nativeGraphics, pen ? pen->nativePen : NULL,
+				x1, y1, x2, y2));
+	}
+	Status DrawLine(const Pen *pen, INT x1, INT y1, INT x2, INT y2)
+	{
+		return updateStatus(DllExports::GdipDrawLineI(
+				nativeGraphics, pen ? pen->nativePen : NULL,
+				x1, y1, x2, y2));
+	}
+	Status DrawLine(const Pen *pen, const PointF& pt1, const PointF& pt2)
+	{
+		return updateStatus(DllExports::GdipDrawLine(
+				nativeGraphics, pen ? pen->nativePen : NULL,
+				pt1.X, pt1.Y, pt2.X, pt2.Y));
+	}
+	Status DrawLine(const Pen *pen, const Point& pt1, const Point& pt2)
+	{
+		return updateStatus(DllExports::GdipDrawLineI(
+				nativeGraphics, pen ? pen->nativePen : NULL,
+				pt1.X, pt1.Y, pt2.X, pt2.Y));
+	}
+	Status DrawLines(const Pen *pen, const PointF *points, INT count)
+	{
+		return updateStatus(DllExports::GdipDrawLines(
+				nativeGraphics, pen ? pen->nativePen : NULL,
+				points, count));
+	}
+	Status DrawLines(const Pen *pen, const Point *points, INT count)
+	{
+		return updateStatus(DllExports::GdipDrawLinesI(
+				nativeGraphics, pen ? pen->nativePen : NULL,
+				points, count));
+	}
+	Status DrawPath(const Pen *pen, const GraphicsPath *path)
+	{
+		return updateStatus(DllExports::GdipDrawPath(
+				nativeGraphics, pen ? pen->nativePen : NULL,
+				path ? path->nativePath : NULL));
+	}
+	Status DrawPie(const Pen *pen, REAL x, REAL y, REAL width, REAL height,
+			REAL startAngle, REAL sweepAngle)
+	{
+		return updateStatus(DllExports::GdipDrawPie(
+				nativeGraphics, pen ? pen->nativePen : NULL,
+				x, y, width, height, startAngle, sweepAngle));
+	}
+	Status DrawPie(const Pen *pen, INT x, INT y, INT width, INT height,
+			REAL startAngle, REAL sweepAngle)
+	{
+		return updateStatus(DllExports::GdipDrawPieI(
+				nativeGraphics, pen ? pen->nativePen : NULL,
+				x, y, width, height, startAngle, sweepAngle));
+	}
+	Status DrawPie(const Pen *pen, const RectF& rect,
+			REAL startAngle, REAL sweepAngle)
+	{
+		return updateStatus(DllExports::GdipDrawPie(
+				nativeGraphics, pen ? pen->nativePen : NULL,
+				rect.X, rect.Y, rect.Width, rect.Height,
+				startAngle, sweepAngle));
+	}
+	Status DrawPie(const Pen *pen, const Rect& rect,
+			REAL startAngle, REAL sweepAngle)
+	{
+		return updateStatus(DllExports::GdipDrawPieI(
+				nativeGraphics, pen ? pen->nativePen : NULL,
+				rect.X, rect.Y, rect.Width, rect.Height,
+				startAngle, sweepAngle));
+	}
+	Status DrawPolygon(const Pen *pen, const PointF *points, INT count)
+	{
+		return updateStatus(DllExports::GdipDrawPolygon(
+				nativeGraphics, pen ? pen->nativePen : NULL,
+				points, count));
+	}
+	Status DrawPolygon(const Pen *pen, const Point *points, INT count)
+	{
+		return updateStatus(DllExports::GdipDrawPolygonI(
+				nativeGraphics, pen ? pen->nativePen : NULL,
+				points, count));
+	}
+	Status DrawRectangle(const Pen *pen,
+			REAL x, REAL y, REAL width, REAL height)
+	{
+		return updateStatus(DllExports::GdipDrawRectangle(
+				nativeGraphics, pen ? pen->nativePen : NULL,
+				x, y, width, height));
+	}
+	Status DrawRectangle(const Pen *pen,
+			INT x, INT y, INT width, INT height)
+	{
+		return updateStatus(DllExports::GdipDrawRectangleI(
+				nativeGraphics, pen ? pen->nativePen : NULL,
+				x, y, width, height));
+	}
+	Status DrawRectangle(const Pen *pen, const RectF& rect)
+	{
+		return updateStatus(DllExports::GdipDrawRectangle(
+				nativeGraphics, pen ? pen->nativePen : NULL,
+				rect.X, rect.Y, rect.Width, rect.Height));
+	}
+	Status DrawRectangle(const Pen *pen, const Rect& rect)
+	{
+		return updateStatus(DllExports::GdipDrawRectangleI(
+				nativeGraphics, pen ? pen->nativePen : NULL,
+				rect.X, rect.Y, rect.Width, rect.Height));
+	}
+	Status DrawRectangles(const Pen *pen, const RectF *rects, INT count)
+	{
+		return updateStatus(DllExports::GdipDrawRectangles(
+				nativeGraphics, pen ? pen->nativePen : NULL,
+				rects, count));
+	}
+	Status DrawRectangles(const Pen *pen, const Rect *rects, INT count)
+	{
+		return updateStatus(DllExports::GdipDrawRectanglesI(
+				nativeGraphics, pen ? pen->nativePen : NULL,
+				rects, count));
+	}
+	Status DrawString(const WCHAR *string, INT length, const Font *font,
+			const PointF& origin, const Brush *brush)
+	{
+		RectF layoutRect(origin.X, origin.Y, 0.0f, 0.0f);
+		return updateStatus(DllExports::GdipDrawString(
+				nativeGraphics, string, length,
+				font ? font->nativeFont : NULL,
+				&layoutRect, NULL,
+				brush ? brush->nativeBrush : NULL));
+	}
+	Status DrawString(const WCHAR *string, INT length,
+			const Font *font, const PointF& origin,
+			const StringFormat *stringFormat, const Brush *brush)
+	{
+		RectF layoutRect(origin.X, origin.Y, 0.0f, 0.0f);
+		return updateStatus(DllExports::GdipDrawString(
+				nativeGraphics, string, length,
+				font ? font->nativeFont : NULL,
+				&layoutRect,
+				stringFormat ? stringFormat->nativeStringFormat : NULL,
+				brush ? brush->nativeBrush : NULL));
+	}
+	Status DrawString(const WCHAR *string, INT length,
+			const Font *font, const RectF& layoutRect,
+			const StringFormat *stringFormat, const Brush *brush)
+	{
+		return updateStatus(DllExports::GdipDrawString(
+				nativeGraphics, string, length,
+				font ? font->nativeFont : NULL,
+				&layoutRect,
+				stringFormat ? stringFormat->nativeStringFormat : NULL,
+				brush ? brush->nativeBrush : NULL));
+	}
+	Status EndContainer(GraphicsContainer state)
+	{
+		return updateStatus(DllExports::GdipEndContainer(
+				nativeGraphics, state));
+	}
+	Status EnumerateMetafile(const Metafile *metafile,
+			const PointF& destPoint,
+			EnumerateMetafileProc callback,
+			VOID *callbackData = NULL,
+			ImageAttributes *imageAttributes = NULL)
+	{
+		return updateStatus(DllExports::GdipEnumerateMetafileDestPoint(
+				nativeGraphics,
+				metafile ? ((GpMetafile*) metafile->nativeImage) : NULL,
+				destPoint, callback, callbackData,
+				imageAttributes ? imageAttributes->nativeImageAttributes : NULL));
+	}
+	Status EnumerateMetafile(const Metafile *metafile,
+			const Point& destPoint,
+			EnumerateMetafileProc callback,
+			VOID *callbackData = NULL,
+			ImageAttributes *imageAttributes = NULL)
+	{
+		return updateStatus(DllExports::GdipEnumerateMetafileDestPointI(
+				nativeGraphics,
+				metafile ? ((GpMetafile*) metafile->nativeImage) : NULL,
+				destPoint, callback, callbackData,
+				imageAttributes ? imageAttributes->nativeImageAttributes : NULL));
+	}
+	Status EnumerateMetafile(const Metafile *metafile,
+			const RectF& destRect,
+			EnumerateMetafileProc callback,
+			VOID *callbackData = NULL,
+			ImageAttributes *imageAttributes = NULL)
+	{
+		return updateStatus(DllExports::GdipEnumerateMetafileDestRect(
+				nativeGraphics,
+				metafile ? ((GpMetafile*) metafile->nativeImage) : NULL,
+				destRect, callback, callbackData,
+				imageAttributes ? imageAttributes->nativeImageAttributes : NULL));
+	}
+	Status EnumerateMetafile(const Metafile *metafile,
+			const Rect& destRect,
+			EnumerateMetafileProc callback,
+			VOID *callbackData = NULL,
+			ImageAttributes *imageAttributes = NULL)
+	{
+		return updateStatus(DllExports::GdipEnumerateMetafileDestRectI(
+				nativeGraphics,
+				metafile ? ((GpMetafile*) metafile->nativeImage) : NULL,
+				destRect, callback, callbackData,
+				imageAttributes ? imageAttributes->nativeImageAttributes : NULL));
+	}
+	Status EnumerateMetafile(const Metafile *metafile,
+			const PointF *destPoints, INT count,
+			EnumerateMetafileProc callback,
+			VOID *callbackData = NULL,
+			ImageAttributes *imageAttributes = NULL)
+	{
+		return updateStatus(DllExports::GdipEnumerateMetafileDestPoints(
+				nativeGraphics,
+				metafile ? ((GpMetafile*) metafile->nativeImage) : NULL,
+				destPoints, count, callback, callbackData,
+				imageAttributes ? imageAttributes->nativeImageAttributes : NULL));
+	}
+	Status EnumerateMetafile(const Metafile *metafile,
+			const Point *destPoints, INT count,
+			EnumerateMetafileProc callback,
+			VOID *callbackData = NULL,
+			ImageAttributes *imageAttributes = NULL)
+	{
+		return updateStatus(DllExports::GdipEnumerateMetafileDestPointsI(
+				nativeGraphics,
+				metafile ? ((GpMetafile*) metafile->nativeImage) : NULL,
+				destPoints, count, callback, callbackData,
+				imageAttributes ? imageAttributes->nativeImageAttributes : NULL));
+	}
+	Status EnumerateMetafile(const Metafile *metafile,
+			const PointF& destPoint,
+			const RectF& srcRect, Unit srcUnit,
+			EnumerateMetafileProc callback,
+			VOID *callbackData = NULL,
+			ImageAttributes *imageAttributes = NULL)
+	{
+		return updateStatus(DllExports::GdipEnumerateMetafileSrcRectDestPoint(
+				nativeGraphics,
+				metafile ? ((GpMetafile*) metafile->nativeImage) : NULL,
+				destPoint, srcRect, srcUnit,
+				callback, callbackData,
+				imageAttributes ? imageAttributes->nativeImageAttributes : NULL));
+	}
+	Status EnumerateMetafile(const Metafile *metafile,
+			const Point& destPoint,
+			const Rect& srcRect, Unit srcUnit,
+			EnumerateMetafileProc callback,
+			VOID *callbackData = NULL,
+			ImageAttributes *imageAttributes = NULL)
+	{
+		return updateStatus(DllExports::GdipEnumerateMetafileSrcRectDestPointI(
+				nativeGraphics,
+				metafile ? ((GpMetafile*) metafile->nativeImage) : NULL,
+				destPoint, srcRect, srcUnit,
+				callback, callbackData,
+				imageAttributes ? imageAttributes->nativeImageAttributes : NULL));
+	}
+	Status EnumerateMetafile(const Metafile *metafile,
+			const RectF& destRect,
+			const RectF& srcRect, Unit srcUnit,
+			EnumerateMetafileProc callback,
+			VOID *callbackData = NULL,
+			ImageAttributes *imageAttributes = NULL)
+	{
+		return updateStatus(DllExports::GdipEnumerateMetafileSrcRectDestRect(
+				nativeGraphics,
+				metafile ? ((GpMetafile*) metafile->nativeImage) : NULL,
+				destRect, srcRect, srcUnit,
+				callback, callbackData,
+				imageAttributes ? imageAttributes->nativeImageAttributes : NULL));
+	}
+	Status EnumerateMetafile(const Metafile *metafile,
+			const Rect& destRect,
+			const Rect& srcRect, Unit srcUnit,
+			EnumerateMetafileProc callback,
+			VOID *callbackData = NULL,
+			ImageAttributes *imageAttributes = NULL)
+	{
+		return updateStatus(DllExports::GdipEnumerateMetafileSrcRectDestRectI(
+				nativeGraphics,
+				metafile ? ((GpMetafile*) metafile->nativeImage) : NULL,
+				destRect, srcRect, srcUnit,
+				callback, callbackData,
+				imageAttributes ? imageAttributes->nativeImageAttributes : NULL));
+	}
+	Status EnumerateMetafile(const Metafile *metafile,
+			const PointF* destPoints, INT count,
+			const RectF& srcRect, Unit srcUnit,
+			EnumerateMetafileProc callback,
+			VOID *callbackData = NULL,
+			ImageAttributes *imageAttributes = NULL)
+	{
+		return updateStatus(DllExports::GdipEnumerateMetafileSrcRectDestPoints(
+				nativeGraphics,
+				metafile ? ((GpMetafile*) metafile->nativeImage) : NULL,
+				destPoints, count, srcRect, srcUnit,
+				callback, callbackData,
+				imageAttributes ? imageAttributes->nativeImageAttributes : NULL));
+	}
+	Status EnumerateMetafile(const Metafile *metafile,
+			const Point* destPoints, INT count,
+			const Rect& srcRect, Unit srcUnit,
+			EnumerateMetafileProc callback,
+			VOID *callbackData = NULL,
+			ImageAttributes *imageAttributes = NULL)
+	{
+		return updateStatus(DllExports::GdipEnumerateMetafileSrcRectDestPointsI(
+				nativeGraphics,
+				metafile ? ((GpMetafile*) metafile->nativeImage) : NULL,
+				destPoints, count, srcRect, srcUnit,
+				callback, callbackData,
+				imageAttributes ? imageAttributes->nativeImageAttributes : NULL));
+	}
+	Status ExcludeClip(const RectF& rect)
+	{
+		return updateStatus(DllExports::GdipSetClipRect(
+				nativeGraphics,
+				rect.X, rect.Y, rect.Width, rect.Height,
+				CombineModeExclude));
+	}
+	Status ExcludeClip(const Rect& rect)
+	{
+		return updateStatus(DllExports::GdipSetClipRectI(
+				nativeGraphics,
+				rect.X, rect.Y, rect.Width, rect.Height,
+				CombineModeExclude));
+	}
+	Status ExcludeClip(const Region *region)
+	{
+		return updateStatus(DllExports::GdipSetClipRegion(
+				nativeGraphics,
+				region ? region->nativeRegion : NULL,
+				CombineModeExclude));
+	}
+	Status FillClosedCurve(const Brush *brush,
+			const PointF *points, INT count)
+	{
+		return updateStatus(DllExports::GdipFillClosedCurve(
+				nativeGraphics,
+				brush ? brush->nativeBrush : NULL,
+				points, count));
+	}
+	Status FillClosedCurve(const Brush *brush,
+			const Point *points, INT count)
+	{
+		return updateStatus(DllExports::GdipFillClosedCurveI(
+				nativeGraphics,
+				brush ? brush->nativeBrush : NULL,
+				points, count));
+	}
+	Status FillClosedCurve(const Brush *brush,
+			const PointF *points, INT count,
+			FillMode fillMode, REAL tension = 0.5f)
+	{
+		return updateStatus(DllExports::GdipFillClosedCurve2(
+				nativeGraphics,
+				brush ? brush->nativeBrush : NULL,
+				points, count, tension, fillMode));
+	}
+	Status FillClosedCurve(const Brush *brush,
+			const Point *points, INT count,
+			FillMode fillMode, REAL tension = 0.5f)
+	{
+		return updateStatus(DllExports::GdipFillClosedCurve2I(
+				nativeGraphics,
+				brush ? brush->nativeBrush : NULL,
+				points, count, tension, fillMode));
+	}
+	Status FillEllipse(const Brush *brush,
+			REAL x, REAL y, REAL width, REAL height)
+	{
+		return updateStatus(DllExports::GdipFillEllipse(
+				nativeGraphics,
+				brush ? brush->nativeBrush : NULL,
+				x, y, width, height));
+	}
+	Status FillEllipse(const Brush *brush,
+			INT x, INT y, INT width, INT height)
+	{
+		return updateStatus(DllExports::GdipFillEllipseI(
+				nativeGraphics,
+				brush ? brush->nativeBrush : NULL,
+				x, y, width, height));
+	}
+	Status FillEllipse(const Brush *brush, const RectF& rect)
+	{
+		return updateStatus(DllExports::GdipFillEllipse(
+				nativeGraphics,
+				brush ? brush->nativeBrush : NULL,
+				rect.X, rect.Y, rect.Width, rect.Height));
+	}
+	Status FillEllipse(const Brush *brush, const Rect& rect)
+	{
+		return updateStatus(DllExports::GdipFillEllipseI(
+				nativeGraphics,
+				brush ? brush->nativeBrush : NULL,
+				rect.X, rect.Y, rect.Width, rect.Height));
+	}
+	Status FillPath(const Brush *brush, const GraphicsPath *path)
+	{
+		return updateStatus(DllExports::GdipFillPath(
+				nativeGraphics,
+				brush ? brush->nativeBrush : NULL,
+				path ? path->nativePath : NULL));
+	}
+	Status FillPie(const Brush *brush,
+			REAL x, REAL y, REAL width, REAL height,
+			REAL startAngle, REAL sweepAngle)
+	{
+		return updateStatus(DllExports::GdipFillPie(
+				nativeGraphics,
+				brush ? brush->nativeBrush : NULL,
+				x, y, width, height, startAngle, sweepAngle));
+	}
+	Status FillPie(const Brush *brush, INT x, INT y, INT width, INT height,
+			REAL startAngle, REAL sweepAngle)
+	{
+		return updateStatus(DllExports::GdipFillPieI(
+				nativeGraphics,
+				brush ? brush->nativeBrush : NULL,
+				x, y, width, height, startAngle, sweepAngle));
+	}
+	Status FillPie(const Brush *brush, const RectF& rect,
+			REAL startAngle, REAL sweepAngle)
+	{
+		return updateStatus(DllExports::GdipFillPie(
+				nativeGraphics,
+				brush ? brush->nativeBrush : NULL,
+				rect.X, rect.Y, rect.Width, rect.Height,
+				startAngle, sweepAngle));
+	}
+	Status FillPie(const Brush *brush, const Rect& rect,
+			REAL startAngle, REAL sweepAngle)
+	{
+		return updateStatus(DllExports::GdipFillPieI(
+				nativeGraphics,
+				brush ? brush->nativeBrush : NULL,
+				rect.X, rect.Y, rect.Width, rect.Height,
+				startAngle, sweepAngle));
+	}
+	Status FillPolygon(const Brush *brush, const PointF *points, INT count)
+	{
+		return updateStatus(DllExports::GdipFillPolygon(
+				nativeGraphics,
+				brush ? brush->nativeBrush : NULL,
+				points, count, FillModeAlternate));
+	}
+	Status FillPolygon(const Brush *brush, const Point *points, INT count)
+	{
+		return updateStatus(DllExports::GdipFillPolygonI(
+				nativeGraphics,
+				brush ? brush->nativeBrush : NULL,
+				points, count, FillModeAlternate));
+	}
+	Status FillPolygon(const Brush *brush, const PointF *points, INT count,
+			FillMode fillMode)
+	{
+		return updateStatus(DllExports::GdipFillPolygon(
+				nativeGraphics,
+				brush ? brush->nativeBrush : NULL,
+				points, count, fillMode));
+	}
+	Status FillPolygon(const Brush *brush, const Point *points, INT count,
+			FillMode fillMode)
+	{
+		return updateStatus(DllExports::GdipFillPolygonI(
+				nativeGraphics,
+				brush ? brush->nativeBrush : NULL,
+				points, count, fillMode));
+	}
+	Status FillRectangle(const Brush *brush,
+			REAL x, REAL y, REAL width, REAL height)
+	{
+		return updateStatus(DllExports::GdipFillRectangle(
+				nativeGraphics,
+				brush ? brush->nativeBrush : NULL,
+				x, y, width, height));
+	}
+	Status FillRectangle(const Brush *brush,
+			INT x, INT y, INT width, INT height)
+	{
+		return updateStatus(DllExports::GdipFillRectangleI(
+				nativeGraphics,
+				brush ? brush->nativeBrush : NULL,
+				x, y, width, height));
+	}
+	Status FillRectangle(const Brush *brush, const RectF& rect)
+	{
+		return updateStatus(DllExports::GdipFillRectangle(
+				nativeGraphics,
+				brush ? brush->nativeBrush : NULL,
+				rect.X, rect.Y, rect.Width, rect.Height));
+	}
+	Status FillRectangle(const Brush *brush, const Rect& rect)
+	{
+		return updateStatus(DllExports::GdipFillRectangleI(
+				nativeGraphics,
+				brush ? brush->nativeBrush : NULL,
+				rect.X, rect.Y, rect.Width, rect.Height));
+	}
+	Status FillRectangles(const Brush *brush, const RectF *rects, INT count)
+	{
+		return updateStatus(DllExports::GdipFillRectangles(
+				nativeGraphics,
+				brush ? brush->nativeBrush : NULL,
+				rects, count));
+	}
+	Status FillRectangles(const Brush *brush, const Rect *rects, INT count)
+	{
+		return updateStatus(DllExports::GdipFillRectanglesI(
+				nativeGraphics,
+				brush ? brush->nativeBrush : NULL,
+				rects, count));
+	}
+	Status FillRegion(const Brush *brush, const Region *region)
+	{
+		return updateStatus(DllExports::GdipFillRegion(
+				nativeGraphics,
+				brush ? brush->nativeBrush : NULL,
+				region ? region->nativeRegion : NULL));
+	}
+	VOID Flush(FlushIntention intention = FlushIntentionFlush)
+	{
+		updateStatus(DllExports::GdipFlush(nativeGraphics, intention));
+	}
+	Status GetClip(Region *region) const
+	{
+		return updateStatus(DllExports::GdipGetClip(
+				nativeGraphics,
+				region ? region->nativeRegion : NULL));
+	}
+	Status GetClipBounds(RectF *rect) const
+	{
+		return updateStatus(DllExports::GdipGetClipBounds(
+				nativeGraphics, rect));
+	}
+	Status GetClipBounds(Rect *rect) const
+	{
+		return updateStatus(DllExports::GdipGetClipBoundsI(
+				nativeGraphics, rect));
+	}
+	CompositingMode GetCompositingMode() const
+	{
+		CompositingMode result = CompositingModeSourceOver;
+		updateStatus(DllExports::GdipGetCompositingMode(
+				nativeGraphics, &result));
+		return result;
+	}
+	CompositingQuality GetCompositingQuality() const
+	{
+		CompositingQuality result = CompositingQualityDefault;
+		updateStatus(DllExports::GdipGetCompositingQuality(
+				nativeGraphics, &result));
+		return result;
+	}
+	REAL GetDpiX() const
+	{
+		REAL result = 0.0f;
+		updateStatus(DllExports::GdipGetDpiX(nativeGraphics, &result));
+		return result;
+	}
+	REAL GetDpiY() const
+	{
+		REAL result = 0.0f;
+		updateStatus(DllExports::GdipGetDpiY(nativeGraphics, &result));
+		return result;
+	}
+	HDC GetHDC()
+	{
+		HDC result = NULL;
+		updateStatus(DllExports::GdipGetDC(nativeGraphics, &result));
+		return result;
+	}
+	InterpolationMode GetInterpolationMode() const
+	{
+		InterpolationMode result = InterpolationModeDefault;
+		updateStatus(DllExports::GdipGetInterpolationMode(
+				nativeGraphics, &result));
+		return result;
+	}
+	Status GetLastStatus() const
+	{
+		Status result = lastStatus;
+		lastStatus = Ok;
+		return result;
+	}
+	Status GetNearestColor(Color *color) const
+	{
+		return updateStatus(DllExports::GdipGetNearestColor(
+				nativeGraphics, color ? &color->Value : NULL));
+	}
+	REAL GetPageScale() const
+	{
+		REAL result = 0.0f;
+		updateStatus(DllExports::GdipGetPageScale(
+				nativeGraphics, &result));
+		return result;
+	}
+	Unit GetPageUnit() const
+	{
+		Unit result = UnitWorld;
+		updateStatus(DllExports::GdipGetPageUnit(
+				nativeGraphics, &result));
+		return result;
+	}
+	PixelOffsetMode GetPixelOffsetMode() const
+	{
+		PixelOffsetMode result = PixelOffsetModeDefault;
+		updateStatus(DllExports::GdipGetPixelOffsetMode(
+				nativeGraphics, &result));
+		return result;
+	}
+	Status GetRenderingOrigin(INT *x, INT *y) const
+	{
+		return updateStatus(DllExports::GdipGetRenderingOrigin(
+				nativeGraphics, x, y));
+	}
+	SmoothingMode GetSmoothingMode() const
+	{
+		SmoothingMode result = SmoothingModeDefault;
+		updateStatus(DllExports::GdipGetSmoothingMode(
+				nativeGraphics, &result));
+		return result;
+	}
+	UINT GetTextContrast() const
+	{
+		UINT result = 0;
+		updateStatus(DllExports::GdipGetTextContrast(
+				nativeGraphics, &result));
+		return result;
+	}
+	TextRenderingHint GetTextRenderingHint() const
+	{
+		TextRenderingHint result = TextRenderingHintSystemDefault;
+		updateStatus(DllExports::GdipGetTextRenderingHint(
+				nativeGraphics, &result));
+		return result;
+	}
+	Status GetTransform(Matrix *matrix) const
+	{
+		return updateStatus(DllExports::GdipGetWorldTransform(
+				nativeGraphics,
+				matrix ? matrix->nativeMatrix : NULL));
+	}
+	Status GetVisibleClipBounds(RectF *rect) const
+	{
+		return updateStatus(DllExports::GdipGetVisibleClipBounds(
+				nativeGraphics, rect));
+	}
+	Status GetVisibleClipBounds(Rect *rect) const
+	{
+		return updateStatus(DllExports::GdipGetVisibleClipBoundsI(
+				nativeGraphics, rect));
+	}
+	Status IntersectClip(const RectF& rect)
+	{
+		return updateStatus(DllExports::GdipSetClipRect(
+				nativeGraphics,
+				rect.X, rect.Y, rect.Width, rect.Height,
+				CombineModeIntersect));
+	}
+	Status IntersectClip(const Rect& rect)
+	{
+		return updateStatus(DllExports::GdipSetClipRectI(
+				nativeGraphics,
+				rect.X, rect.Y, rect.Width, rect.Height,
+				CombineModeIntersect));
+	}
+	Status IntersectClip(const Region *region)
+	{
+		return updateStatus(DllExports::GdipSetClipRegion(
+				nativeGraphics,
+				region ? region->nativeRegion : NULL,
+				CombineModeIntersect));
+	}
+	BOOL IsClipEmpty() const
+	{
+		BOOL result = FALSE;
+		updateStatus(DllExports::GdipIsClipEmpty(
+				nativeGraphics, &result));
+		return result;
+	}
+	BOOL IsVisible(REAL x, REAL y) const
+	{
+		BOOL result = FALSE;
+		updateStatus(DllExports::GdipIsVisiblePoint(
+				nativeGraphics, x, y, &result));
+		return result;
+	}
+	BOOL IsVisible(INT x, INT y) const
+	{
+		BOOL result = FALSE;
+		updateStatus(DllExports::GdipIsVisiblePointI(
+				nativeGraphics, x, y, &result));
+		return result;
+	}
+	BOOL IsVisible(const PointF& point) const
+	{
+		BOOL result = FALSE;
+		updateStatus(DllExports::GdipIsVisiblePoint(
+				nativeGraphics, point.X, point.Y, &result));
+		return result;
+	}
+	BOOL IsVisible(const Point& point) const
+	{
+		BOOL result = FALSE;
+		updateStatus(DllExports::GdipIsVisiblePointI(
+				nativeGraphics, point.X, point.Y, &result));
+		return result;
+	}
+	BOOL IsVisible(REAL x, REAL y, REAL width, REAL height) const
+	{
+		BOOL result = FALSE;
+		updateStatus(DllExports::GdipIsVisibleRect(
+				nativeGraphics, x, y, width, height, &result));
+		return result;
+	}
+	BOOL IsVisible(INT x, INT y, INT width, INT height) const
+	{
+		BOOL result = FALSE;
+		updateStatus(DllExports::GdipIsVisibleRectI(
+				nativeGraphics, x, y, width, height, &result));
+		return result;
+	}
+	BOOL IsVisible(const RectF& rect) const
+	{
+		BOOL result = FALSE;
+		updateStatus(DllExports::GdipIsVisibleRect(
+				nativeGraphics, rect.X, rect.Y,
+				rect.Width, rect.Height, &result));
+		return result;
+	}
+	BOOL IsVisible(const Rect& rect) const
+	{
+		BOOL result = FALSE;
+		updateStatus(DllExports::GdipIsVisibleRectI(
+				nativeGraphics, rect.X, rect.Y,
+				rect.Width, rect.Height, &result));
+		return result;
+	}
+	BOOL IsVisibleClipEmpty() const
+	{
+		BOOL result = FALSE;
+		updateStatus(DllExports::GdipIsVisibleClipEmpty(
+				nativeGraphics, &result));
+		return result;
+	}
+	Status MeasureCharacterRanges(const WCHAR *string, INT length,
+			const Font *font, const RectF& layoutRect,
+			const StringFormat *stringFormat,
+			INT regionCount, Region *regions) const
+	{
+		if (regionCount <= 0 || !regions)
+			return lastStatus = InvalidParameter;
+
+		GpRegion **nativeRegionArray = (GpRegion**)
+			DllExports::GdipAlloc(regionCount * sizeof(GpRegion*));
+		if (!nativeRegionArray)
+			return lastStatus = OutOfMemory;
+		for (int i = 0; i < regionCount; ++i) {
+			nativeRegionArray[i] = regions[i].nativeRegion;
+		}
+		Status status = updateStatus(DllExports::GdipMeasureCharacterRanges(
+				nativeGraphics, string, length,
+				font ? font->nativeFont : NULL,
+				layoutRect,
+				stringFormat ? stringFormat->nativeStringFormat : NULL,
+				regionCount, nativeRegionArray));
+		DllExports::GdipFree(nativeRegionArray);
+		return status;
+	}
+	Status MeasureDriverString(const UINT16 *text, INT length,
+			const Font *font, const PointF *positions, INT flags,
+			const Matrix *matrix, RectF *boundingBox) const
+	{
+		return updateStatus(DllExports::GdipMeasureDriverString(
+				nativeGraphics, text, length,
+				font ? font->nativeFont : NULL,
+				positions, flags,
+				matrix ? matrix->nativeMatrix : NULL,
+				boundingBox));
+	}
+	Status MeasureString(const WCHAR *string, INT length,
+			const Font *font, const RectF& layoutRect,
+			RectF *boundingBox) const
+	{
+		return updateStatus(DllExports::GdipMeasureString(
+				nativeGraphics, string, length,
+				font ? font->nativeFont : NULL,
+				&layoutRect, NULL, boundingBox, NULL, NULL));
+	}
+	Status MeasureString(const WCHAR *string, INT length,
+			const Font *font, const RectF& layoutRect,
+			const StringFormat *stringFormat, RectF *boundingBox,
+			INT *codepointsFitted = NULL,
+			INT *linesFitted = NULL) const
+	{
+		return updateStatus(DllExports::GdipMeasureString(
+				nativeGraphics, string, length,
+				font ? font->nativeFont : NULL,
+				&layoutRect,
+				stringFormat ? stringFormat->nativeStringFormat : NULL,
+				boundingBox, codepointsFitted, linesFitted));
+	}
+	Status MeasureString(const WCHAR *string, INT length,
+			const Font *font, const SizeF& layoutRectSize,
+			const StringFormat *stringFormat, SizeF *size,
+			INT *codepointsFitted = NULL,
+			INT *linesFitted = NULL) const
+	{
+		if (!size) return lastStatus = InvalidParameter;
+		RectF layoutRect(PointF(0.0f, 0.0f), layoutRectSize);
+		RectF boundingBox;
+		Status status = updateStatus(DllExports::GdipMeasureString(
+				nativeGraphics, string, length,
+				font ? font->nativeFont : NULL,
+				&layoutRect,
+				stringFormat ? stringFormat->nativeStringFormat : NULL,
+				&boundingBox, codepointsFitted, linesFitted));
+		boundingBox.GetSize(size);
+		return status;
+	}
+	Status MeasureString(const WCHAR *string, INT length,
+			const Font *font, const PointF& origin,
+			RectF *boundingBox) const
+	{
+		RectF layoutRect(origin, SizeF(0.0f, 0.0f));
+		return updateStatus(DllExports::GdipMeasureString(
+				nativeGraphics, string, length,
+				font ? font->nativeFont : NULL,
+				&layoutRect, NULL, boundingBox, NULL, NULL));
+	}
+	Status MeasureString(const WCHAR *string, INT length,
+			const Font *font, const PointF& origin,
+			const StringFormat *stringFormat,
+			RectF *boundingBox) const
+	{
+		RectF layoutRect(origin, SizeF(0.0f, 0.0f));
+		return updateStatus(DllExports::GdipMeasureString(
+				nativeGraphics, string, length,
+				font ? font->nativeFont : NULL,
+				&layoutRect,
+				stringFormat ? stringFormat->nativeStringFormat : NULL,
+				boundingBox, NULL, NULL));
+	}
+	Status MultiplyTransform(const Matrix *matrix,
+			MatrixOrder order = MatrixOrderPrepend)
+	{
+		return updateStatus(DllExports::GdipMultiplyWorldTransform(
+				nativeGraphics,
+				matrix ? matrix->nativeMatrix : NULL, order));
+	}
+	VOID ReleaseHDC(HDC hdc)
+	{
+		updateStatus(DllExports::GdipReleaseDC(nativeGraphics, hdc));
+	}
+	Status ResetClip()
+	{
+		return updateStatus(DllExports::GdipResetClip(nativeGraphics));
+	}
+	Status ResetTransform()
+	{
+		return updateStatus(DllExports::GdipResetWorldTransform(
+				nativeGraphics));
+	}
+	Status Restore(GraphicsState state)
+	{
+		return updateStatus(DllExports::GdipRestoreGraphics(
+				nativeGraphics, state));
+	}
+	Status RotateTransform(REAL angle,
+			MatrixOrder order = MatrixOrderPrepend)
+	{
+		return updateStatus(DllExports::GdipRotateWorldTransform(
+				nativeGraphics, angle, order));
+	}
+	GraphicsState Save() const
+	{
+		GraphicsState result = 0;
+		updateStatus(DllExports::GdipSaveGraphics(
+				nativeGraphics, &result));
+		return result;
+	}
+	Status ScaleTransform(REAL sx, REAL sy,
+			MatrixOrder order = MatrixOrderPrepend)
+	{
+		return updateStatus(DllExports::GdipScaleWorldTransform(
+				nativeGraphics, sx, sy, order));
+	}
+	VOID SetAbort()
+	{
+		updateStatus(NotImplemented);
+	}
+	Status SetClip(const Graphics *g,
+			CombineMode combineMode = CombineModeReplace)
+	{
+		return updateStatus(DllExports::GdipSetClipGraphics(
+				nativeGraphics, g ? g->nativeGraphics : NULL,
+				combineMode));
+	}
+	Status SetClip(const RectF& rect,
+			CombineMode combineMode = CombineModeReplace)
+	{
+		return updateStatus(DllExports::GdipSetClipRect(
+				nativeGraphics,
+				rect.X, rect.Y, rect.Width, rect.Height,
+				combineMode));
+	}
+	Status SetClip(const Rect& rect,
+			CombineMode combineMode = CombineModeReplace)
+	{
+		return updateStatus(DllExports::GdipSetClipRectI(
+				nativeGraphics,
+				rect.X, rect.Y, rect.Width, rect.Height,
+				combineMode));
+	}
+	Status SetClip(const GraphicsPath *path,
+			CombineMode combineMode = CombineModeReplace)
+	{
+		return updateStatus(DllExports::GdipSetClipPath(
+				nativeGraphics,
+				path ? path->nativePath : NULL,
+				combineMode));
+	}
+	Status SetClip(const Region *region,
+			CombineMode combineMode = CombineModeReplace)
+	{
+		return updateStatus(DllExports::GdipSetClipRegion(
+				nativeGraphics,
+				region ? region->nativeRegion : NULL,
+				combineMode));
+	}
+	Status SetClip(HRGN hRgn, CombineMode combineMode = CombineModeReplace)
+	{
+		return updateStatus(DllExports::GdipSetClipHrgn(
+				nativeGraphics, hRgn, combineMode));
+	}
+	Status SetCompositingMode(CompositingMode compositingMode)
+	{
+		return updateStatus(DllExports::GdipSetCompositingMode(
+				nativeGraphics, compositingMode));
+	}
+	Status SetCompositingQuality(CompositingQuality compositingQuality)
+	{
+		return updateStatus(DllExports::GdipSetCompositingQuality(
+				nativeGraphics, compositingQuality));
+	}
+	Status SetInterpolationMode(InterpolationMode interpolationMode)
+	{
+		return updateStatus(DllExports::GdipSetInterpolationMode(
+				nativeGraphics, interpolationMode));
+	}
+	Status SetPageScale(REAL scale)
+	{
+		return updateStatus(DllExports::GdipSetPageScale(
+				nativeGraphics, scale));
+	}
+	Status SetPageUnit(Unit unit)
+	{
+		return updateStatus(DllExports::GdipSetPageUnit(
+				nativeGraphics, unit));
+	}
+	Status SetPixelOffsetMode(PixelOffsetMode pixelOffsetMode)
+	{
+		return updateStatus(DllExports::GdipSetPixelOffsetMode(
+				nativeGraphics, pixelOffsetMode));
+	}
+	Status SetRenderingOrigin(INT x, INT y)
+	{
+		return updateStatus(DllExports::GdipSetRenderingOrigin(
+				nativeGraphics, x, y));
+	}
+	Status SetSmoothingMode(SmoothingMode smoothingMode)
+	{
+		return updateStatus(DllExports::GdipSetSmoothingMode(
+				nativeGraphics, smoothingMode));
+	}
+	Status SetTextContrast(UINT contrast)
+	{
+		return updateStatus(DllExports::GdipSetTextContrast(
+				nativeGraphics, contrast));
+	}
+	Status SetTextRenderingHint(TextRenderingHint textRenderingHint)
+	{
+		return updateStatus(DllExports::GdipSetTextRenderingHint(
+				nativeGraphics, textRenderingHint));
+	}
+	Status SetTransform(const Matrix *matrix)
+	{
+		return updateStatus(DllExports::GdipSetWorldTransform(
+				nativeGraphics,
+				matrix ? matrix->nativeMatrix : NULL));
+	}
+	Status TransformPoints(CoordinateSpace destSpace,
+			CoordinateSpace srcSpace,
+			PointF *pts, INT count) const
+	{
+		return updateStatus(DllExports::GdipTransformPoints(
+				nativeGraphics, destSpace, srcSpace,
+				pts, count));
+	}
+	Status TransformPoints(CoordinateSpace destSpace,
+			CoordinateSpace srcSpace,
+			Point *pts, INT count) const
+	{
+		return updateStatus(DllExports::GdipTransformPointsI(
+				nativeGraphics, destSpace, srcSpace,
+				pts, count));
+	}
+	Status TranslateClip(REAL dx, REAL dy)
+	{
+		return updateStatus(DllExports::GdipTranslateClip(
+				nativeGraphics, dx, dy));
+	}
+	Status TranslateClip(INT dx, INT dy)
+	{
+		return updateStatus(DllExports::GdipTranslateClipI(
+				nativeGraphics, dx, dy));
+	}
+	Status TranslateTransform(REAL dx, REAL dy,
+			MatrixOrder order = MatrixOrderPrepend)
+	{
+		return updateStatus(DllExports::GdipTranslateWorldTransform(
+				nativeGraphics, dx, dy, order));
+	}
+
+private:
+	Graphics(const Graphics&);
+	Graphics& operator=(const Graphics&);
+
+	Status updateStatus(Status newStatus) const
+	{
+		if (newStatus != Ok) lastStatus = newStatus;
+		return newStatus;
+	}
+
+	GpGraphics *nativeGraphics;
+	mutable Status lastStatus;
+};
+
+#endif /* __GDIPLUS_GRAPHICS_H */
diff --git a/mingw-w64-headers/include/gdiplus/gdiplusheaders.h b/mingw-w64-headers/include/gdiplus/gdiplusheaders.h
new file mode 100644
index 0000000..78d0d71
--- /dev/null
+++ b/mingw-w64-headers/include/gdiplus/gdiplusheaders.h
@@ -0,0 +1,581 @@
+/*
+ * gdiplusheaders.h
+ *
+ * GDI+ Bitmap, CachedBitmap, CustomLineCap, Font, FontCollection,
+ *      FontFamily, Image, InstalledFontCollection, PrivateFontCollection,
+ *      Region class definitions.
+ *      Implementation of these classes is in gdiplusimpl.h.
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ *   Created by Markus Koenig <markus@stber-koenig.de>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __GDIPLUS_HEADERS_H
+#define __GDIPLUS_HEADERS_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifndef __cplusplus
+#error "A C++ compiler is required to include gdiplusheaders.h."
+#endif
+
+/*
+ * Note: Virtual inline functions (dtors, Clone()) are implemented here: If
+ * these were defined outside class scope, the compiler would always generate
+ * code for them (and the vtable), even if these classes were never used.
+ */
+
+class Bitmap;
+class Effect;
+class FontCollection;
+class FontFamily;
+class Graphics;
+class GraphicsPath;
+class Matrix;
+class Pen;
+
+class Image: public GdiplusBase
+{
+	friend class Bitmap;
+	friend class Metafile;
+	friend class CachedBitmap;
+	friend class Graphics;
+	friend class TextureBrush;
+
+public:
+	static Image* FromFile(const WCHAR *filename,
+			BOOL useEmbeddedColorManagement = FALSE);
+	static Image* FromStream(IStream *stream,
+			BOOL useEmbeddedColorManagement = FALSE);
+
+	Image(const WCHAR *filename, BOOL useEmbeddedColorManagement = FALSE);
+	Image(IStream *stream, BOOL useEmbeddedColorManagement = FALSE);
+
+	virtual ~Image()
+	{
+		DllExports::GdipDisposeImage(nativeImage);
+	}
+	virtual Image* Clone() const
+	{
+		GpImage *cloneImage = NULL;
+		Status status = updateStatus(DllExports::GdipCloneImage(
+				nativeImage, &cloneImage));
+		if (status == Ok) {
+			Image *result = new Image(cloneImage, lastStatus);
+			if (!result) {
+				DllExports::GdipDisposeImage(cloneImage);
+				lastStatus = OutOfMemory;
+			}
+			return result;
+		} else {
+			return NULL;
+		}
+	}
+
+	Status FindFirstItem(ImageItemData *item);
+	Status FindNextItem(ImageItemData *item);
+	Status GetAllPropertyItems(UINT totalBufferSize,
+			UINT numProperties, PropertyItem *allItems);
+	Status GetBounds(RectF *srcRect, Unit *srcUnit);
+	Status GetEncoderParameterList(const CLSID *clsidEncoder,
+			UINT size, EncoderParameters *buffer);
+	UINT GetEncoderParameterListSize(const CLSID *clsidEncoder);
+	UINT GetFlags();
+	UINT GetFrameCount(const GUID *dimensionID);
+	UINT GetFrameDimensionsCount();
+	Status GetFrameDimensionsList(GUID *dimensionIDs, UINT count);
+	UINT GetHeight();
+	REAL GetHorizontalResolution();
+	Status GetItemData(ImageItemData *item);
+	Status GetPalette(ColorPalette *palette, INT size);
+	INT GetPaletteSize();
+	Status GetPhysicalDimension(SizeF *size);
+	PixelFormat GetPixelFormat();
+	UINT GetPropertyCount();
+	Status GetPropertyIdList(UINT numOfProperty, PROPID *list);
+	Status GetPropertyItem(PROPID propId, UINT propSize,
+			PropertyItem *buffer);
+	UINT GetPropertyItemSize(PROPID propId);
+	Status GetPropertySize(UINT *totalBufferSize, UINT *numProperties);
+	Status GetRawFormat(GUID *format);
+	Image* GetThumbnailImage(UINT thumbWidth, UINT thumbHeight,
+			GetThumbnailImageAbort callback, VOID *callbackData);
+	ImageType GetType() const;
+	REAL GetVerticalResolution();
+	UINT GetWidth();
+	Status RemovePropertyItem(PROPID propId);
+	Status RotateFlip(RotateFlipType rotateFlipType);
+	Status Save(IStream *stream, const CLSID *clsidEncoder,
+			const EncoderParameters *encoderParams);
+	Status Save(const WCHAR *filename, const CLSID *clsidEncoder,
+			const EncoderParameters *encoderParams);
+	Status SaveAdd(const EncoderParameters *encoderParams);
+	Status SaveAdd(Image *newImage, const EncoderParameters *encoderParams);
+	Status SelectActiveFrame(const GUID *dimensionID, UINT frameIndex);
+	Status SetAbort(GdiplusAbort *pIAbort);
+	Status SetPalette(const ColorPalette *palette);
+	Status SetPropertyItem(const PropertyItem *item);
+
+	Status GetLastStatus() const
+	{
+		Status result = lastStatus;
+		lastStatus = Ok;
+		return result;
+	}
+
+private:
+	Image(GpImage *image, Status status):
+		nativeImage(image), lastStatus(status) {}
+	Image(const Image&);
+	Image& operator=(const Image&);
+
+	Status updateStatus(Status newStatus) const
+	{
+		if (newStatus != Ok) lastStatus = newStatus;
+		return newStatus;
+	}
+
+	GpImage *nativeImage;
+	mutable Status lastStatus;
+};
+
+class Bitmap: public Image
+{
+public:
+	static Bitmap* FromBITMAPINFO(const BITMAPINFO *gdiBitmapInfo,
+			VOID *gdiBitmapData);
+	static Bitmap* FromDirectDrawSurface7(IDirectDrawSurface7 *surface);
+	static Bitmap* FromFile(const WCHAR *filename,
+			BOOL useEmbeddedColorManagement = FALSE);
+	static Bitmap* FromHBITMAP(HBITMAP hbm, HPALETTE hpal);
+	static Bitmap* FromHICON(HICON icon);
+	static Bitmap* FromResource(HINSTANCE hInstance,
+			const WCHAR *bitmapName);
+	static Bitmap* FromStream(IStream *stream,
+			BOOL useEmbeddedColorManagement = FALSE);
+	static Status ApplyEffect(Bitmap **inputs, INT numInputs,
+			Effect *effect, RECT *ROI,
+			RECT *outputRect, Bitmap **output);
+	static Status InitializePalette(ColorPalette *palette,
+			PaletteType paletteType, INT optimalColors,
+			BOOL useTransparentColor, Bitmap *bitmap);
+
+	Bitmap(const BITMAPINFO *gdiBitmapInfo, VOID *gdiBitmapData);
+	Bitmap(IDirectDrawSurface7 *surface);
+	Bitmap(const WCHAR *filename, BOOL useEmbeddedColorManagement = FALSE);
+	Bitmap(HBITMAP hbm, HPALETTE hpal);
+	Bitmap(HICON hicon);
+	Bitmap(HINSTANCE hInstance, const WCHAR *bitmapName);
+	Bitmap(IStream *stream, BOOL useEmbeddedColorManagement = FALSE);
+	Bitmap(INT width, INT height, Graphics *target);
+	Bitmap(INT width, INT height, PixelFormat format = PixelFormat32bppARGB);
+	Bitmap(INT width, INT height, INT stride, PixelFormat format, BYTE *scan0);
+
+	virtual ~Bitmap()
+	{
+	}
+	virtual Bitmap* Clone() const
+	{
+		GpImage *cloneImage = NULL;
+		Status status = updateStatus(DllExports::GdipCloneImage(
+				nativeImage, &cloneImage));
+		if (status == Ok) {
+			Bitmap *result = new Bitmap(cloneImage, lastStatus);
+			if (!result) {
+				DllExports::GdipDisposeImage(cloneImage);
+				lastStatus = OutOfMemory;
+			}
+			return result;
+		} else {
+			return NULL;
+		}
+	}
+
+	Bitmap* Clone(const RectF& rect, PixelFormat format) const;
+	Bitmap* Clone(const Rect& rect, PixelFormat format) const;
+	Bitmap* Clone(REAL x, REAL y, REAL width, REAL height,
+			PixelFormat format) const;
+	Bitmap* Clone(INT x, INT y, INT width, INT height,
+			PixelFormat format) const;
+
+	Status ApplyEffect(Effect *effect, RECT *ROI);
+	Status ConvertFormat(PixelFormat format, DitherType ditherType,
+			PaletteType paletteType, ColorPalette *palette,
+			REAL alphaThresholdPercent);
+	Status GetHBITMAP(const Color& colorBackground, HBITMAP *hbmReturn) const;
+	Status GetHICON(HICON *icon) const;
+	Status GetHistogram(HistogramFormat format, UINT numberOfEntries,
+			UINT *channel0, UINT *channel1,
+			UINT *channel2, UINT *channel3) const;
+	Status GetHistogramSize(HistogramFormat format,
+			UINT *numberOfEntries) const;
+	Status GetPixel(INT x, INT y, Color *color) const;
+	Status LockBits(const Rect *rect, UINT flags, PixelFormat format,
+			BitmapData *lockedBitmapData);
+	Status SetPixel(INT x, INT y, const Color& color);
+	Status SetResolution(REAL xdpi, REAL ydpi);
+	Status UnlockBits(BitmapData *lcokedBitmapData);
+
+private:
+	Bitmap(GpImage *image, Status status): Image(image, status) {}
+	Bitmap(const Bitmap&);
+	Bitmap& operator=(const Bitmap&);
+};
+
+class CachedBitmap: public GdiplusBase
+{
+	friend class Graphics;
+
+public:
+	CachedBitmap(Bitmap *bitmap, Graphics *graphics);
+	~CachedBitmap();
+
+	Status GetLastStatus() const
+	{
+		return lastStatus;
+	}
+
+private:
+	CachedBitmap(const CachedBitmap&);
+	CachedBitmap& operator=(const CachedBitmap&);
+
+	GpCachedBitmap *nativeCachedBitmap;
+	Status lastStatus;
+};
+
+class CustomLineCap: public GdiplusBase
+{
+	friend class AdjustableArrowCap;
+	friend class Pen;
+
+public:
+	CustomLineCap(const GraphicsPath *fillPath,
+			const GraphicsPath *strokePath,
+			LineCap baseCap = LineCapFlat,
+			REAL baseInset = 0.0f);
+
+	virtual ~CustomLineCap()
+	{
+		DllExports::GdipDeleteCustomLineCap(nativeCustomLineCap);
+	}
+	virtual CustomLineCap* Clone() const
+	{
+		GpCustomLineCap *cloneCustomLineCap = NULL;
+		Status status = updateStatus(DllExports::GdipCloneCustomLineCap(
+				nativeCustomLineCap, &cloneCustomLineCap));
+		if (status == Ok) {
+			CustomLineCap *result = new CustomLineCap(
+					cloneCustomLineCap, lastStatus);
+			if (!result) {
+				DllExports::GdipDeleteCustomLineCap(cloneCustomLineCap);
+				lastStatus = OutOfMemory;
+			}
+			return result;
+		} else {
+			return NULL;
+		}
+	}
+
+	LineCap GetBaseCap() const;
+	REAL GetBaseInset() const;
+	Status GetStrokeCaps(LineCap *startCap, LineCap *endCap) const;
+	LineJoin GetStrokeJoin() const;
+	REAL GetWidthScale() const;
+	Status SetBaseCap(LineCap baseCap);
+	Status SetBaseInset(REAL inset);
+	Status SetStrokeCap(LineCap strokeCap);
+	Status SetStrokeCaps(LineCap startCap, LineCap endCap);
+	Status SetStrokeJoin(LineJoin lineJoin);
+	Status SetWidthScale(REAL widthScale);
+
+	Status GetLastStatus() const
+	{
+		Status result = lastStatus;
+		lastStatus = Ok;
+		return result;
+	}
+
+private:
+	CustomLineCap(GpCustomLineCap *customLineCap, Status status):
+		nativeCustomLineCap(customLineCap), lastStatus(status) {}
+	CustomLineCap(const CustomLineCap&);
+	CustomLineCap& operator=(const CustomLineCap&);
+
+	Status updateStatus(Status newStatus) const
+	{
+		if (newStatus != Ok) lastStatus = newStatus;
+		return newStatus;
+	}
+
+	GpCustomLineCap *nativeCustomLineCap;
+	mutable Status lastStatus;
+};
+
+class Font: public GdiplusBase
+{
+	friend class Graphics;
+
+public:
+	Font(const FontFamily *family, REAL emSize,
+			INT style = FontStyleRegular,
+			Unit unit = UnitPoint);
+	Font(HDC hdc, HFONT hfont);
+	Font(HDC hdc, const LOGFONTA *logfont);
+	Font(HDC hdc, const LOGFONTW *logfont);
+	Font(HDC hdc);
+	Font(const WCHAR *familyName, REAL emSize,
+			INT style = FontStyleRegular,
+			Unit unit = UnitPoint,
+			const FontCollection *fontCollection = NULL);
+	~Font();
+	Font* Clone() const;
+
+	Status GetFamily(FontFamily *family) const;
+	REAL GetHeight(const Graphics *graphics) const;
+	REAL GetHeight(REAL dpi) const;
+	Status GetLogFontA(const Graphics *graphics, LOGFONTA *logfontA) const;
+	Status GetLogFontW(const Graphics *graphics, LOGFONTW *logfontW) const;
+	REAL GetSize() const;
+	INT GetStyle() const;
+	Unit GetUnit() const;
+
+	Status GetLastStatus() const
+	{
+		return lastStatus;
+	}
+	BOOL IsAvailable() const
+	{
+		return nativeFont != NULL;
+	}
+
+private:
+	Font(GpFont *font, Status status):
+		nativeFont(font), lastStatus(status) {}
+	Font(const Font&);
+	Font& operator=(const Font&);
+
+	Status updateStatus(Status newStatus) const
+	{
+		if (newStatus != Ok) lastStatus = newStatus;
+		return newStatus;
+	}
+
+	GpFont *nativeFont;
+	mutable Status lastStatus;
+};
+
+class FontCollection: public GdiplusBase
+{
+	friend class InstalledFontCollection;
+	friend class PrivateFontCollection;
+	friend class Font;
+	friend class FontFamily;
+
+public:
+	FontCollection();
+	virtual ~FontCollection() {}
+
+	Status GetFamilies(INT numSought, FontFamily *families,
+			INT *numFound) const;
+	INT GetFamilyCount() const;
+
+	Status GetLastStatus() const
+	{
+		return lastStatus;
+	}
+
+private:
+	FontCollection(const FontCollection&);
+	FontCollection& operator=(const FontCollection&);
+
+	Status updateStatus(Status newStatus) const
+	{
+		return lastStatus = newStatus;
+	}
+
+	GpFontCollection *nativeFontCollection;
+	mutable Status lastStatus;
+};
+
+class FontFamily: public GdiplusBase
+{
+	friend class Font;
+	friend class FontCollection;
+	friend class GraphicsPath;
+
+public:
+	static const FontFamily* GenericMonospace();
+	static const FontFamily* GenericSansSerif();
+	static const FontFamily* GenericSerif();
+
+	FontFamily();
+	FontFamily(const WCHAR *name,
+			const FontCollection *fontCollection = NULL);
+	~FontFamily();
+	FontFamily* Clone() const;
+
+	UINT16 GetCellAscent(INT style) const;
+	UINT16 GetCellDescent(INT style) const;
+	UINT16 GetEmHeight(INT style) const;
+	Status GetFamilyName(WCHAR name[LF_FACESIZE],
+			LANGID language = LANG_NEUTRAL) const;
+	UINT16 GetLineSpacing(INT style) const;
+	BOOL IsStyleAvailable(INT style) const;
+
+	Status GetLastStatus() const
+	{
+		Status result = lastStatus;
+		lastStatus = Ok;
+		return result;
+	}
+	BOOL IsAvailable() const
+	{
+		return nativeFontFamily != NULL;
+	}
+
+private:
+	FontFamily(GpFontFamily *fontFamily, Status status):
+		nativeFontFamily(fontFamily), lastStatus(status) {}
+	FontFamily(const FontFamily&);
+	FontFamily& operator=(const FontFamily&);
+
+	Status updateStatus(Status newStatus) const
+	{
+		if (newStatus != Ok) lastStatus = newStatus;
+		return newStatus;
+	}
+
+	GpFontFamily *nativeFontFamily;
+	mutable Status lastStatus;
+};
+
+class InstalledFontCollection: public FontCollection
+{
+public:
+	InstalledFontCollection();
+	virtual ~InstalledFontCollection() {}
+};
+
+class PrivateFontCollection: public FontCollection
+{
+public:
+	PrivateFontCollection();
+
+	virtual ~PrivateFontCollection()
+	{
+		DllExports::GdipDeletePrivateFontCollection(&nativeFontCollection);
+	}
+
+	Status AddFontFile(const WCHAR *filename);
+	Status AddMemoryFont(const VOID *memory, INT length);
+};
+
+class Region: public GdiplusBase
+{
+	friend class Graphics;
+
+public:
+	static Region* FromHRGN(HRGN hrgn);
+
+	Region();
+	Region(const RectF& rect);
+	Region(const Rect& rect);
+	Region(const GraphicsPath *path);
+	Region(const BYTE *regionData, INT size);
+	Region(HRGN hrgn);
+	~Region();
+	Region* Clone() const;
+
+	Status Complement(const RectF& rect);
+	Status Complement(const Rect& rect);
+	Status Complement(const Region *region);
+	Status Complement(const GraphicsPath *path);
+	BOOL Equals(const Region *region, const Graphics *graphics) const;
+	Status Exclude(const RectF& rect);
+	Status Exclude(const Rect& rect);
+	Status Exclude(const Region *region);
+	Status Exclude(const GraphicsPath *path);
+	Status GetBounds(RectF *rect, const Graphics *graphics) const;
+	Status GetBounds(Rect *rect, const Graphics *graphics) const;
+	Status GetData(BYTE *buffer, UINT bufferSize, UINT *sizeFilled) const;
+	UINT GetDataSize() const;
+	HRGN GetHRGN(const Graphics *graphics) const;
+	Status GetRegionScans(const Matrix *matrix,
+			RectF *rects, INT *count) const;
+	Status GetRegionScans(const Matrix *matrix,
+			Rect *rects, INT *count) const;
+	UINT GetRegionScansCount(const Matrix *matrix) const;
+	Status Intersect(const RectF& rect);
+	Status Intersect(const Rect& rect);
+	Status Intersect(const Region *region);
+	Status Intersect(const GraphicsPath *path);
+	BOOL IsEmpty(const Graphics *graphics) const;
+	BOOL IsInfinite(const Graphics *graphics) const;
+	BOOL IsVisible(REAL x, REAL y,
+			const Graphics *graphics = NULL) const;
+	BOOL IsVisible(INT x, INT y,
+			const Graphics *graphics = NULL) const;
+	BOOL IsVisible(const PointF& point,
+			const Graphics *graphics = NULL) const;
+	BOOL IsVisible(const Point& point,
+			const Graphics *graphics = NULL) const;
+	BOOL IsVisible(REAL x, REAL y, REAL width, REAL height,
+			const Graphics *graphics = NULL) const;
+	BOOL IsVisible(INT x, INT y, INT width, INT height,
+			const Graphics *graphics = NULL) const;
+	BOOL IsVisible(const RectF& rect,
+			const Graphics *graphics = NULL) const;
+	BOOL IsVisible(const Rect& rect,
+			const Graphics *graphics = NULL) const;
+	Status MakeEmpty();
+	Status MakeInfinite();
+	Status Transform(const Matrix *matrix);
+	Status Translate(REAL dx, REAL dy);
+	Status Translate(INT dx, INT dy);
+	Status Union(const RectF& rect);
+	Status Union(const Rect& rect);
+	Status Union(const Region *region);
+	Status Union(const GraphicsPath *path);
+	Status Xor(const RectF& rect);
+	Status Xor(const Rect& rect);
+	Status Xor(const Region *region);
+	Status Xor(const GraphicsPath *path);
+
+	Status GetLastStatus() const
+	{
+		Status result = lastStatus;
+		lastStatus = Ok;
+		return result;
+	}
+
+private:
+	Region(GpRegion *region, Status status):
+		nativeRegion(region), lastStatus(status) {}
+	Region(const Region&);
+	Region& operator=(const Region&);
+
+	Status updateStatus(Status newStatus) const
+	{
+		if (newStatus != Ok) lastStatus = newStatus;
+		return newStatus;
+	}
+
+	GpRegion *nativeRegion;
+	mutable Status lastStatus;
+};
+
+#endif /* __GDIPLUS_HEADERS_H */
diff --git a/mingw-w64-headers/include/gdiplus/gdiplusimageattributes.h b/mingw-w64-headers/include/gdiplus/gdiplusimageattributes.h
new file mode 100644
index 0000000..695b898
--- /dev/null
+++ b/mingw-w64-headers/include/gdiplus/gdiplusimageattributes.h
@@ -0,0 +1,236 @@
+/*
+ * gdiplusimageattributes.h
+ *
+ * GDI+ ImageAttributes class
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ *   Created by Markus Koenig <markus@stber-koenig.de>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __GDIPLUS_IMAGEATTRIBUTES_H
+#define __GDIPLUS_IMAGEATTRIBUTES_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifndef __cplusplus
+#error "A C++ compiler is required to include gdiplusimageattributes.h."
+#endif
+
+class ImageAttributes: public GdiplusBase
+{
+	friend class Graphics;
+	friend class TextureBrush;
+
+public:
+	ImageAttributes(): nativeImageAttributes(NULL), lastStatus(Ok)
+	{
+		lastStatus = DllExports::GdipCreateImageAttributes(
+				&nativeImageAttributes);
+	}
+	~ImageAttributes()
+	{
+		DllExports::GdipDisposeImageAttributes(nativeImageAttributes);
+	}
+	ImageAttributes* Clone() const
+	{
+		GpImageAttributes *cloneImageAttributes = NULL;
+		Status status = updateStatus(DllExports::GdipCloneImageAttributes(
+				nativeImageAttributes, &cloneImageAttributes));
+		if (status == Ok) {
+			ImageAttributes *result = new ImageAttributes(
+					cloneImageAttributes, lastStatus);
+			if (!result) {
+				DllExports::GdipDisposeImageAttributes(cloneImageAttributes);
+				lastStatus = OutOfMemory;
+			}
+			return result;
+		} else {
+			return NULL;
+		}
+	}
+
+	Status ClearBrushRemapTable()
+	{
+		return updateStatus(DllExports::GdipSetImageAttributesRemapTable(
+				nativeImageAttributes, ColorAdjustTypeBrush,
+				FALSE, 0, NULL));
+	}
+	Status ClearColorKey(ColorAdjustType type = ColorAdjustTypeDefault)
+	{
+		return updateStatus(DllExports::GdipSetImageAttributesColorKeys(
+				nativeImageAttributes, type, FALSE, 0, 0));
+	}
+	Status ClearColorMatrices(ColorAdjustType type = ColorAdjustTypeDefault)
+	{
+		return updateStatus(DllExports::GdipSetImageAttributesColorMatrix(
+				nativeImageAttributes, type, FALSE,
+				NULL, NULL, ColorMatrixFlagsDefault));
+	}
+	Status ClearColorMatrix(ColorAdjustType type = ColorAdjustTypeDefault)
+	{
+		return updateStatus(DllExports::GdipSetImageAttributesColorMatrix(
+				nativeImageAttributes, type, FALSE,
+				NULL, NULL, ColorMatrixFlagsDefault));
+	}
+	Status ClearGamma(ColorAdjustType type = ColorAdjustTypeDefault)
+	{
+		return updateStatus(DllExports::GdipSetImageAttributesGamma(
+				nativeImageAttributes, type, FALSE, 1.0f));
+	}
+	Status ClearNoOp(ColorAdjustType type = ColorAdjustTypeDefault)
+	{
+		return updateStatus(DllExports::GdipSetImageAttributesNoOp(
+				nativeImageAttributes, type, FALSE));
+	}
+	Status ClearOutputChannel(ColorAdjustType type = ColorAdjustTypeDefault)
+	{
+		return updateStatus(DllExports::GdipSetImageAttributesOutputChannel(
+				nativeImageAttributes, type, FALSE,
+				ColorChannelFlagsC));
+	}
+	Status ClearOutputChannelColorProfile(
+			ColorAdjustType type = ColorAdjustTypeDefault)
+	{
+		return updateStatus(DllExports::GdipSetImageAttributesOutputChannelColorProfile(
+				nativeImageAttributes, type, FALSE, NULL));
+	}
+	Status ClearRemapTable(ColorAdjustType type = ColorAdjustTypeDefault)
+	{
+		return updateStatus(DllExports::GdipSetImageAttributesRemapTable(
+				nativeImageAttributes, type, FALSE, 0, NULL));
+	}
+	Status ClearThreshold(ColorAdjustType type = ColorAdjustTypeDefault)
+	{
+		return updateStatus(DllExports::GdipSetImageAttributesThreshold(
+				nativeImageAttributes, type, FALSE, 0.0));
+	}
+	Status GetAdjustedPalette(ColorPalette *colorPalette,
+			ColorAdjustType type) const
+	{
+		return updateStatus(DllExports::GdipGetImageAttributesAdjustedPalette(
+				nativeImageAttributes, colorPalette, type));
+	}
+	Status GetLastStatus() const
+	{
+		Status result = lastStatus;
+		lastStatus = Ok;
+		return result;
+	}
+	Status Reset(ColorAdjustType type = ColorAdjustTypeDefault)
+	{
+		return updateStatus(DllExports::GdipResetImageAttributes(
+				nativeImageAttributes, type));
+	}
+	Status SetBrushRemapTable(UINT mapSize, ColorMap *map)
+	{
+		return updateStatus(DllExports::GdipSetImageAttributesRemapTable(
+				nativeImageAttributes, ColorAdjustTypeBrush,
+				TRUE, mapSize, map));
+	}
+	Status SetColorKey(const Color& colorLow, const Color& colorHigh,
+			ColorAdjustType type = ColorAdjustTypeDefault)
+	{
+		return updateStatus(DllExports::GdipSetImageAttributesColorKeys(
+				nativeImageAttributes, type, TRUE,
+				colorLow.GetValue(), colorHigh.GetValue()));
+	}
+	Status SetColorMatrices(const ColorMatrix *colorMatrix,
+			const ColorMatrix *grayMatrix,
+			ColorMatrixFlags mode = ColorMatrixFlagsDefault,
+			ColorAdjustType type = ColorAdjustTypeDefault)
+	{
+		return updateStatus(DllExports::GdipSetImageAttributesColorMatrix(
+				nativeImageAttributes, type, TRUE,
+				colorMatrix, grayMatrix, mode));
+	}
+	Status SetColorMatrix(const ColorMatrix *colorMatrix,
+			ColorMatrixFlags mode = ColorMatrixFlagsDefault,
+			ColorAdjustType type = ColorAdjustTypeDefault)
+	{
+		return updateStatus(DllExports::GdipSetImageAttributesColorMatrix(
+				nativeImageAttributes, type, TRUE,
+				colorMatrix, NULL, mode));
+	}
+	Status SetGamma(REAL gamma,
+			ColorAdjustType type = ColorAdjustTypeDefault)
+	{
+		return updateStatus(DllExports::GdipSetImageAttributesGamma(
+				nativeImageAttributes, type, TRUE, gamma));
+	}
+	Status SetNoOp(ColorAdjustType type = ColorAdjustTypeDefault)
+	{
+		return updateStatus(DllExports::GdipSetImageAttributesNoOp(
+				nativeImageAttributes, type, TRUE));
+	}
+	Status SetOutputChannel(ColorChannelFlags channelFlags,
+			ColorAdjustType type = ColorAdjustTypeDefault)
+	{
+		return updateStatus(DllExports::GdipSetImageAttributesOutputChannel(
+				nativeImageAttributes, type, TRUE,
+				channelFlags));
+	}
+	Status SetOutputChannelColorProfile(const WCHAR *colorProfileFilename,
+			ColorAdjustType type = ColorAdjustTypeDefault)
+	{
+		return updateStatus(DllExports::GdipSetImageAttributesOutputChannelColorProfile(
+				nativeImageAttributes, type, TRUE,
+				colorProfileFilename));
+	}
+	Status SetRemapTable(UINT mapSize, const ColorMap *map,
+			ColorAdjustType type = ColorAdjustTypeDefault)
+	{
+		return updateStatus(DllExports::GdipSetImageAttributesRemapTable(
+				nativeImageAttributes, type, TRUE,
+				mapSize, map));
+	}
+	Status SetThreshold(REAL threshold,
+			ColorAdjustType type = ColorAdjustTypeDefault)
+	{
+		return updateStatus(DllExports::GdipSetImageAttributesThreshold(
+				nativeImageAttributes, type, TRUE, threshold));
+	}
+	Status SetToIdentity(ColorAdjustType type = ColorAdjustTypeDefault)
+	{
+		return updateStatus(DllExports::GdipSetImageAttributesToIdentity(
+				nativeImageAttributes, type));
+	}
+	Status SetWrapMode(WrapMode wrap, const Color& color = Color(),
+			BOOL clamp = FALSE)
+	{
+		return updateStatus(DllExports::GdipSetImageAttributesWrapMode(
+				nativeImageAttributes, wrap,
+				color.GetValue(), clamp));
+	}
+
+private:
+	ImageAttributes(GpImageAttributes *imageAttributes, Status status):
+		nativeImageAttributes(imageAttributes), lastStatus(status) {}
+	ImageAttributes(const ImageAttributes&);
+	ImageAttributes& operator=(const ImageAttributes&);
+
+	Status updateStatus(Status newStatus) const
+	{
+		if (newStatus != Ok) lastStatus = newStatus;
+		return newStatus;
+	}
+
+	GpImageAttributes *nativeImageAttributes;
+	mutable Status lastStatus;
+};
+
+
+#endif /* __GDIPLUS_IMAGEATTRIBUTES_H */
diff --git a/mingw-w64-headers/include/gdiplus/gdiplusimagecodec.h b/mingw-w64-headers/include/gdiplus/gdiplusimagecodec.h
new file mode 100644
index 0000000..e897f1e
--- /dev/null
+++ b/mingw-w64-headers/include/gdiplus/gdiplusimagecodec.h
@@ -0,0 +1,67 @@
+/*
+ * gdiplusimagecodec.h
+ *
+ * GDI+ image decoders and encoders
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ *   Created by Markus Koenig <markus@stber-koenig.de>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __GDIPLUS_IMAGECODEC_H
+#define __GDIPLUS_IMAGECODEC_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+static __inline__ GpStatus GetImageDecoders(UINT numDecoders, UINT size,
+		ImageCodecInfo *decoders)
+{
+	#ifdef __cplusplus
+	return DllExports::GdipGetImageDecoders(numDecoders, size, decoders);
+	#else
+	return GdipGetImageDecoders(numDecoders, size, decoders);
+	#endif
+}
+
+static __inline__ GpStatus GetImageDecodersSize(UINT *numDecoders, UINT *size)
+{
+	#ifdef __cplusplus
+	return DllExports::GdipGetImageDecodersSize(numDecoders, size);
+	#else
+	return GdipGetImageDecodersSize(numDecoders, size);
+	#endif
+}
+
+static __inline__ GpStatus GetImageEncoders(UINT numEncoders, UINT size,
+		ImageCodecInfo *encoders)
+{
+	#ifdef __cplusplus
+	return DllExports::GdipGetImageEncoders(numEncoders, size, encoders);
+	#else
+	return GdipGetImageEncoders(numEncoders, size, encoders);
+	#endif
+}
+
+static __inline__ GpStatus GetImageEncodersSize(UINT *numEncoders, UINT *size)
+{
+	#ifdef __cplusplus
+	return DllExports::GdipGetImageEncodersSize(numEncoders, size);
+	#else
+	return GdipGetImageEncodersSize(numEncoders, size);
+	#endif
+}
+
+#endif /* __GDIPLUS_IMAGECODEC_H */
diff --git a/mingw-w64-headers/include/gdiplus/gdiplusimaging.h b/mingw-w64-headers/include/gdiplus/gdiplusimaging.h
new file mode 100644
index 0000000..c452d77
--- /dev/null
+++ b/mingw-w64-headers/include/gdiplus/gdiplusimaging.h
@@ -0,0 +1,411 @@
+/*
+ * gdiplusimaging.h
+ *
+ * GDI+ Imaging and image metadata
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ *   Created by Markus Koenig <markus@stber-koenig.de>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __GDIPLUS_IMAGING_H
+#define __GDIPLUS_IMAGING_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+typedef enum ImageCodecFlags {
+	ImageCodecFlagsEncoder = 0x00000001,
+	ImageCodecFlagsDecoder = 0x00000002,
+	ImageCodecFlagsSupportBitmap = 0x00000004,
+	ImageCodecFlagsSupportVector = 0x00000008,
+	ImageCodecFlagsSeekableEncode = 0x00000010,
+	ImageCodecFlagsBlockingDecode = 0x00000020,
+	ImageCodecFlagsBuiltin = 0x00010000,
+	ImageCodecFlagsSystem = 0x00020000,
+	ImageCodecFlagsUser = 0x00040000
+} ImageCodecFlags;
+
+typedef enum ImageFlags {
+	ImageFlagsNone = 0,
+	ImageFlagsScalable = 0x00000001,
+	ImageFlagsHasAlpha = 0x00000002,
+	ImageFlagsHasTranslucent = 0x00000004,
+	ImageFlagsPartiallyScalable = 0x00000008,
+	ImageFlagsColorSpaceRGB = 0x00000010,
+	ImageFlagsColorSpaceCMYK = 0x00000020,
+	ImageFlagsColorSpaceGRAY = 0x00000040,
+	ImageFlagsColorSpaceYCBCR = 0x00000080,
+	ImageFlagsColorSpaceYCCK = 0x00000100,
+	ImageFlagsHasRealDPI = 0x00001000,
+	ImageFlagsHasRealPixelSize = 0x00002000,
+	ImageFlagsReadOnly = 0x00010000,
+	ImageFlagsCaching = 0x00020000
+} ImageFlags;
+
+typedef enum ImageLockMode {
+	ImageLockModeRead = 1,
+	ImageLockModeWrite = 2,
+	ImageLockModeUserInputBuf = 4
+} ImageLockMode;
+
+typedef enum ItemDataPosition {
+	ItemDataPositionAfterHeader = 0,
+	ItemDataPositionAfterPalette = 1,
+	ItemDataPositionAfterBits = 2
+} ItemDataPosition;
+
+typedef enum RotateFlipType {
+	RotateNoneFlipNone = 0,
+	Rotate90FlipNone = 1,
+	Rotate180FlipNone = 2,
+	Rotate270FlipNone = 3,
+	RotateNoneFlipX = 4,
+	Rotate90FlipX = 5,
+	Rotate180FlipX = 6,
+	Rotate270FlipX = 7,
+	Rotate180FlipXY = 0,
+	Rotate270FlipXY = 1, 
+	RotateNoneFlipXY = 2,
+	Rotate90FlipXY = 3,
+	Rotate180FlipY = 4,
+	Rotate270FlipY = 5,
+	RotateNoneFlipY = 6,
+	Rotate90FlipY = 7
+} RotateFlipType;
+
+typedef struct BitmapData {
+	UINT Width;
+	UINT Height;
+	INT Stride;
+	INT PixelFormat;  /* MSDN: "PixelFormat PixelFormat;" */
+	VOID *Scan0;
+	UINT_PTR Reserved;
+} BitmapData;
+
+typedef struct EncoderParameter {
+	GUID Guid;
+	ULONG NumberOfValues;
+	ULONG Type;
+	VOID *Value;
+} EncoderParameter;
+
+typedef struct EncoderParameters {
+	UINT Count;
+	EncoderParameter Parameter[1];
+} EncoderParameters;
+
+typedef struct ImageCodecInfo {
+	CLSID Clsid;
+	GUID FormatID;
+	WCHAR *CodecName;
+	WCHAR *DllName;
+	WCHAR *FormatDescription;
+	WCHAR *FilenameExtension;
+	WCHAR *MimeType;
+	DWORD Flags;
+	DWORD Version;
+	DWORD SigCount;
+	DWORD SigSize;
+	BYTE *SigPattern;
+	BYTE *SigMask;
+} ImageCodecInfo;
+
+/* FIXME: The order of fields is probably wrong. Please don't use this
+ * structure until this problem is resolved!  Can't test because
+ * ImageItemData is not supported by the redistributable GDI+ 1.0 DLL. */
+typedef struct ImageItemData {
+	UINT Size;
+	UINT Position;
+	VOID *Desc;
+	UINT DescSize;
+	UINT *Data;
+	UINT DataSize;
+	UINT Cookie;
+} ImageItemData;
+
+typedef struct PropertyItem {
+	PROPID id;
+	ULONG length;
+	WORD type;
+	VOID *value;
+} PropertyItem;
+
+#define PropertyTagGpsVer ((PROPID) 0x0000)
+#define PropertyTagGpsLatitudeRef ((PROPID) 0x0001)
+#define PropertyTagGpsLatitude ((PROPID) 0x0002)
+#define PropertyTagGpsLongitudeRef ((PROPID) 0x0003)
+#define PropertyTagGpsLongitude ((PROPID) 0x0004)
+#define PropertyTagGpsAltitudeRef ((PROPID) 0x0005)
+#define PropertyTagGpsAltitude ((PROPID) 0x0006)
+#define PropertyTagGpsGpsTime ((PROPID) 0x0007)
+#define PropertyTagGpsGpsSatellites ((PROPID) 0x0008)
+#define PropertyTagGpsGpsStatus ((PROPID) 0x0009)
+#define PropertyTagGpsGpsMeasureMode ((PROPID) 0x000A)
+#define PropertyTagGpsGpsDop ((PROPID) 0x000B)
+#define PropertyTagGpsSpeedRef ((PROPID) 0x000C)
+#define PropertyTagGpsSpeed ((PROPID) 0x000D)
+#define PropertyTagGpsTrackRef ((PROPID) 0x000E)
+#define PropertyTagGpsTrack ((PROPID) 0x000F)
+#define PropertyTagGpsImgDirRef ((PROPID) 0x0010)
+#define PropertyTagGpsImgDir ((PROPID) 0x0011)
+#define PropertyTagGpsMapDatum ((PROPID) 0x0012)
+#define PropertyTagGpsDestLatRef ((PROPID) 0x0013)
+#define PropertyTagGpsDestLat ((PROPID) 0x0014)
+#define PropertyTagGpsDestLongRef ((PROPID) 0x0015)
+#define PropertyTagGpsDestLong ((PROPID) 0x0016)
+#define PropertyTagGpsDestBearRef ((PROPID) 0x0017)
+#define PropertyTagGpsDestBear ((PROPID) 0x0018)
+#define PropertyTagGpsDestDistRef ((PROPID) 0x0019)
+#define PropertyTagGpsDestDist ((PROPID) 0x001A)
+#define PropertyTagNewSubfileType ((PROPID) 0x00FE)
+#define PropertyTagSubfileType ((PROPID) 0x00FF)
+#define PropertyTagImageWidth ((PROPID) 0x0100)
+#define PropertyTagImageHeight ((PROPID) 0x0101)
+#define PropertyTagBitsPerSample ((PROPID) 0x0102)
+#define PropertyTagCompression ((PROPID) 0x0103)
+#define PropertyTagPhotometricInterp ((PROPID) 0x0106)
+#define PropertyTagThreshHolding ((PROPID) 0x0107)
+#define PropertyTagCellWidth ((PROPID) 0x0108)
+#define PropertyTagCellHeight ((PROPID) 0x0109)
+#define PropertyTagFillOrder ((PROPID) 0x010A)
+#define PropertyTagDocumentName ((PROPID) 0x010D)
+#define PropertyTagImageDescription ((PROPID) 0x010E)
+#define PropertyTagEquipMake ((PROPID) 0x010F)
+#define PropertyTagEquipModel ((PROPID) 0x0110)
+#define PropertyTagStripOffsets ((PROPID) 0x0111)
+#define PropertyTagOrientation ((PROPID) 0x0112)
+#define PropertyTagSamplesPerPixel ((PROPID) 0x0115)
+#define PropertyTagRowsPerStrip ((PROPID) 0x0116)
+#define PropertyTagStripBytesCount ((PROPID) 0x0117)
+#define PropertyTagMinSampleValue ((PROPID) 0x0118)
+#define PropertyTagMaxSampleValue ((PROPID) 0x0119)
+#define PropertyTagXResolution ((PROPID) 0x011A)
+#define PropertyTagYResolution ((PROPID) 0x011B)
+#define PropertyTagPlanarConfig ((PROPID) 0x011C)
+#define PropertyTagPageName ((PROPID) 0x011D)
+#define PropertyTagXPosition ((PROPID) 0x011E)
+#define PropertyTagYPosition ((PROPID) 0x011F)
+#define PropertyTagFreeOffset ((PROPID) 0x0120)
+#define PropertyTagFreeByteCounts ((PROPID) 0x0121)
+#define PropertyTagGrayResponseUnit ((PROPID) 0x0122)
+#define PropertyTagGrayResponseCurve ((PROPID) 0x0123)
+#define PropertyTagT4Option ((PROPID) 0x0124)
+#define PropertyTagT6Option ((PROPID) 0x0125)
+#define PropertyTagResolutionUnit ((PROPID) 0x0128)
+#define PropertyTagPageNumber ((PROPID) 0x0129)
+#define PropertyTagTransferFunction ((PROPID) 0x012D)
+#define PropertyTagSoftwareUsed ((PROPID) 0x0131)
+#define PropertyTagDateTime ((PROPID) 0x0132)
+#define PropertyTagArtist ((PROPID) 0x013B)
+#define PropertyTagHostComputer ((PROPID) 0x013C)
+#define PropertyTagPredictor ((PROPID) 0x013D)
+#define PropertyTagWhitePoint ((PROPID) 0x013E)
+#define PropertyTagPrimaryChromaticities ((PROPID) 0x013F)
+#define PropertyTagColorMap ((PROPID) 0x0140)
+#define PropertyTagHalftoneHints ((PROPID) 0x0141)
+#define PropertyTagTileWidth ((PROPID) 0x0142)
+#define PropertyTagTileLength ((PROPID) 0x0143)
+#define PropertyTagTileOffset ((PROPID) 0x0144)
+#define PropertyTagTileByteCounts ((PROPID) 0x0145)
+#define PropertyTagInkSet ((PROPID) 0x014C)
+#define PropertyTagInkNames ((PROPID) 0x014D)
+#define PropertyTagNumberOfInks ((PROPID) 0x014E)
+#define PropertyTagDotRange ((PROPID) 0x0150)
+#define PropertyTagTargetPrinter ((PROPID) 0x0151)
+#define PropertyTagExtraSamples ((PROPID) 0x0152)
+#define PropertyTagSampleFormat ((PROPID) 0x0153)
+#define PropertyTagSMinSampleValue ((PROPID) 0x0154)
+#define PropertyTagSMaxSampleValue ((PROPID) 0x0155)
+#define PropertyTagTransferRange ((PROPID) 0x0156)
+#define PropertyTagJPEGProc ((PROPID) 0x0200)
+#define PropertyTagJPEGInterFormat ((PROPID) 0x0201)
+#define PropertyTagJPEGInterLength ((PROPID) 0x0202)
+#define PropertyTagJPEGRestartInterval ((PROPID) 0x0203)
+#define PropertyTagJPEGLosslessPredictors ((PROPID) 0x0205)
+#define PropertyTagJPEGPointTransforms ((PROPID) 0x0206)
+#define PropertyTagJPEGQTables ((PROPID) 0x0207)
+#define PropertyTagJPEGDCTables ((PROPID) 0x0208)
+#define PropertyTagJPEGACTables ((PROPID) 0x0209)
+#define PropertyTagYCbCrCoefficients ((PROPID) 0x0211)
+#define PropertyTagYCbCrSubsampling ((PROPID) 0x0212)
+#define PropertyTagYCbCrPositioning ((PROPID) 0x0213)
+#define PropertyTagREFBlackWhite ((PROPID) 0x0214)
+#define PropertyTagGamma ((PROPID) 0x0301)
+#define PropertyTagICCProfileDescriptor ((PROPID) 0x0302)
+#define PropertyTagSRGBRenderingIntent ((PROPID) 0x0303)
+#define PropertyTagImageTitle ((PROPID) 0x0320)
+#define PropertyTagResolutionXUnit ((PROPID) 0x5001)
+#define PropertyTagResolutionYUnit ((PROPID) 0x5002)
+#define PropertyTagResolutionXLengthUnit ((PROPID) 0x5003)
+#define PropertyTagResolutionYLengthUnit ((PROPID) 0x5004)
+#define PropertyTagPrintFlags ((PROPID) 0x5005)
+#define PropertyTagPrintFlagsVersion ((PROPID) 0x5006)
+#define PropertyTagPrintFlagsCrop ((PROPID) 0x5007)
+#define PropertyTagPrintFlagsBleedWidth ((PROPID) 0x5008)
+#define PropertyTagPrintFlagsBleedWidthScale ((PROPID) 0x5009)
+#define PropertyTagHalftoneLPI ((PROPID) 0x500A)
+#define PropertyTagHalftoneLPIUnit ((PROPID) 0x500B)
+#define PropertyTagHalftoneDegree ((PROPID) 0x500C)
+#define PropertyTagHalftoneShape ((PROPID) 0x500D)
+#define PropertyTagHalftoneMisc ((PROPID) 0x500E)
+#define PropertyTagHalftoneScreen ((PROPID) 0x500F)
+#define PropertyTagJPEGQuality ((PROPID) 0x5010)
+#define PropertyTagGridSize ((PROPID) 0x5011)
+#define PropertyTagThumbnailFormat ((PROPID) 0x5012)
+#define PropertyTagThumbnailWidth ((PROPID) 0x5013)
+#define PropertyTagThumbnailHeight ((PROPID) 0x5014)
+#define PropertyTagThumbnailColorDepth ((PROPID) 0x5015)
+#define PropertyTagThumbnailPlanes ((PROPID) 0x5016)
+#define PropertyTagThumbnailRawBytes ((PROPID) 0x5017)
+#define PropertyTagThumbnailSize ((PROPID) 0x5018)
+#define PropertyTagThumbnailCompressedSize ((PROPID) 0x5019)
+#define PropertyTagColorTransferFunction ((PROPID) 0x501A)
+#define PropertyTagThumbnailData ((PROPID) 0x501B)
+#define PropertyTagThumbnailImageWidth ((PROPID) 0x5020)
+#define PropertyTagThumbnailImageHeight ((PROPID) 0x5021)
+#define PropertyTagThumbnailBitsPerSample ((PROPID) 0x5022)
+#define PropertyTagThumbnailCompression ((PROPID) 0x5023)
+#define PropertyTagThumbnailPhotometricInterp ((PROPID) 0x5024)
+#define PropertyTagThumbnailImageDescription ((PROPID) 0x5025)
+#define PropertyTagThumbnailEquipMake ((PROPID) 0x5026)
+#define PropertyTagThumbnailEquipModel ((PROPID) 0x5027)
+#define PropertyTagThumbnailStripOffsets ((PROPID) 0x5028)
+#define PropertyTagThumbnailOrientation ((PROPID) 0x5029)
+#define PropertyTagThumbnailSamplesPerPixel ((PROPID) 0x502A)
+#define PropertyTagThumbnailRowsPerStrip ((PROPID) 0x502B)
+#define PropertyTagThumbnailStripBytesCount ((PROPID) 0x502C)
+#define PropertyTagThumbnailResolutionX ((PROPID) 0x502D)
+#define PropertyTagThumbnailResolutionY ((PROPID) 0x502E)
+#define PropertyTagThumbnailPlanarConfig ((PROPID) 0x502F)
+#define PropertyTagThumbnailResolutionUnit ((PROPID) 0x5030)
+#define PropertyTagThumbnailTransferFunction ((PROPID) 0x5031)
+#define PropertyTagThumbnailSoftwareUsed ((PROPID) 0x5032)
+#define PropertyTagThumbnailDateTime ((PROPID) 0x5033)
+#define PropertyTagThumbnailArtist ((PROPID) 0x5034)
+#define PropertyTagThumbnailWhitePoint ((PROPID) 0x5035)
+#define PropertyTagThumbnailPrimaryChromaticities ((PROPID) 0x5036)
+#define PropertyTagThumbnailYCbCrCoefficients ((PROPID) 0x5037)
+#define PropertyTagThumbnailYCbCrSubsampling ((PROPID) 0x5038)
+#define PropertyTagThumbnailYCbCrPositioning ((PROPID) 0x5039)
+#define PropertyTagThumbnailRefBlackWhite ((PROPID) 0x503A)
+#define PropertyTagThumbnailCopyRight ((PROPID) 0x503B)
+#define PropertyTagLuminanceTable ((PROPID) 0x5090)
+#define PropertyTagChrominanceTable ((PROPID) 0x5091)
+#define PropertyTagFrameDelay ((PROPID) 0x5100)
+#define PropertyTagLoopCount ((PROPID) 0x5101)
+#define PropertyTagGlobalPalette ((PROPID) 0x5102)
+#define PropertyTagIndexBackground ((PROPID) 0x5103)
+#define PropertyTagIndexTransparent ((PROPID) 0x5104)
+#define PropertyTagPixelUnit ((PROPID) 0x5110)
+#define PropertyTagPixelPerUnitX ((PROPID) 0x5111)
+#define PropertyTagPixelPerUnitY ((PROPID) 0x5112)
+#define PropertyTagPaletteHistogram ((PROPID) 0x5113)
+#define PropertyTagCopyright ((PROPID) 0x8298)
+#define PropertyTagExifExposureTime ((PROPID) 0x829A)
+#define PropertyTagExifFNumber ((PROPID) 0x829D)
+#define PropertyTagExifIFD ((PROPID) 0x8769)
+#define PropertyTagICCProfile ((PROPID) 0x8773)
+#define PropertyTagExifExposureProg ((PROPID) 0x8822)
+#define PropertyTagExifSpectralSense ((PROPID) 0x8824)
+#define PropertyTagGpsIFD ((PROPID) 0x8825)
+#define PropertyTagExifISOSpeed ((PROPID) 0x8827)
+#define PropertyTagExifOECF ((PROPID) 0x8828)
+#define PropertyTagExifVer ((PROPID) 0x9000)
+#define PropertyTagExifDTOrig ((PROPID) 0x9003)
+#define PropertyTagExifDTDigitized ((PROPID) 0x9004)
+#define PropertyTagExifCompConfig ((PROPID) 0x9101)
+#define PropertyTagExifCompBPP ((PROPID) 0x9102)
+#define PropertyTagExifShutterSpeed ((PROPID) 0x9201)
+#define PropertyTagExifAperture ((PROPID) 0x9202)
+#define PropertyTagExifBrightness ((PROPID) 0x9203)
+#define PropertyTagExifExposureBias ((PROPID) 0x9204)
+#define PropertyTagExifMaxAperture ((PROPID) 0x9205)
+#define PropertyTagExifSubjectDist ((PROPID) 0x9206)
+#define PropertyTagExifMeteringMode ((PROPID) 0x9207)
+#define PropertyTagExifLightSource ((PROPID) 0x9208)
+#define PropertyTagExifFlash ((PROPID) 0x9209)
+#define PropertyTagExifFocalLength ((PROPID) 0x920A)
+#define PropertyTagExifMakerNote ((PROPID) 0x927C)
+#define PropertyTagExifUserComment ((PROPID) 0x9286)
+#define PropertyTagExifDTSubsec ((PROPID) 0x9290)
+#define PropertyTagExifDTOrigSS ((PROPID) 0x9291)
+#define PropertyTagExifDTDigSS ((PROPID) 0x9292)
+#define PropertyTagExifFPXVer ((PROPID) 0xA000)
+#define PropertyTagExifColorSpace ((PROPID) 0xA001)
+#define PropertyTagExifPixXDim ((PROPID) 0xA002)
+#define PropertyTagExifPixYDim ((PROPID) 0xA003)
+#define PropertyTagExifRelatedWav ((PROPID) 0xA004)
+#define PropertyTagExifInterop ((PROPID) 0xA005)
+#define PropertyTagExifFlashEnergy ((PROPID) 0xA20B)
+#define PropertyTagExifSpatialFR ((PROPID) 0xA20C)
+#define PropertyTagExifFocalXRes ((PROPID) 0xA20E)
+#define PropertyTagExifFocalYRes ((PROPID) 0xA20F)
+#define PropertyTagExifFocalResUnit ((PROPID) 0xA210)
+#define PropertyTagExifSubjectLoc ((PROPID) 0xA214)
+#define PropertyTagExifExposureIndex ((PROPID) 0xA215)
+#define PropertyTagExifSensingMethod ((PROPID) 0xA217)
+#define PropertyTagExifFileSource ((PROPID) 0xA300)
+#define PropertyTagExifSceneType ((PROPID) 0xA301)
+#define PropertyTagExifCfaPattern ((PROPID) 0xA302)
+
+#define PropertyTagTypeByte ((WORD) 1)
+#define PropertyTagTypeASCII ((WORD) 2)
+#define PropertyTagTypeShort ((WORD) 3)
+#define PropertyTagTypeLong ((WORD) 4)
+#define PropertyTagTypeRational ((WORD) 5)
+#define PropertyTagTypeUndefined ((WORD) 7)
+#define PropertyTagTypeSLONG ((WORD) 9)
+#define PropertyTagTypeSRational ((WORD) 10)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern const GUID EncoderChrominanceTable;   /* f2e455dc-09b3-4316-8260-676ada32481c */
+extern const GUID EncoderColorDepth;         /* 66087055-ad66-4c7c-9a18-38a2310b8337 */
+extern const GUID EncoderColorSpace;         /* ? */
+extern const GUID EncoderCompression;        /* e09d739d-ccd4-44ee-8eba-3fbf8be4fc58 */
+extern const GUID EncoderImageItems;         /* ? */
+extern const GUID EncoderLuminanceTable;     /* edb33bce-0266-4a77-b904-27216099e717 */
+extern const GUID EncoderQuality;            /* 1d5be4b5-fa4a-452d-9cdd-5db35105e7eb */
+extern const GUID EncoderRenderMethod;       /* 6d42c53a-229a-4825-8bb7-5c99e2b9a8b8 */
+extern const GUID EncoderSaveAsCMYK;         /* ? */
+extern const GUID EncoderSaveFlag;           /* 292266fc-ac40-47bf-8cfc-a85b89a655de */
+extern const GUID EncoderScanMethod;         /* 3a4e2661-3109-4e56-8536-42c156e7dcfa */
+extern const GUID EncoderTransformation;     /* 8d0eb2d1-a58e-4ea8-aa14-108074b7b6f9 */
+extern const GUID EncoderVersion;            /* 24d18c76-814a-41a4-bf53-1c219cccf797 */
+
+extern const GUID ImageFormatBMP;            /* b96b3cab-0728-11d3-9d7b-0000f81ef32e */
+extern const GUID ImageFormatEMF;            /* b96b3cac-0728-11d3-9d7b-0000f81ef32e */
+extern const GUID ImageFormatEXIF;           /* ? */
+extern const GUID ImageFormatGIF;            /* b96b3cb0-0728-11d3-9d7b-0000f81ef32e */
+extern const GUID ImageFormatIcon;           /* b96b3cb5-0728-11d3-9d7b-0000f81ef32e */
+extern const GUID ImageFormatJPEG;           /* b96b3cae-0728-11d3-9d7b-0000f81ef32e */
+extern const GUID ImageFormatMemoryBMP;      /* b96b3caa-0728-11d3-9d7b-0000f81ef32e */
+extern const GUID ImageFormatPNG;            /* b96b3caf-0728-11d3-9d7b-0000f81ef32e */
+extern const GUID ImageFormatTIFF;           /* b96b3cb1-0728-11d3-9d7b-0000f81ef32e */
+extern const GUID ImageFormatUndefined;      /* ? */
+extern const GUID ImageFormatWMF;            /* b96b3cad-0728-11d3-9d7b-0000f81ef32e */
+
+extern const GUID FrameDimensionPage;        /* 7462dc86-6180-4c7e-8e3f-ee7333a7a483 */
+extern const GUID FrameDimensionResolution;  /* ? */
+extern const GUID FrameDimensionTime;        /* 6aedbd6d-3fb5-418a-83a6-7f45229dc872 */
+
+#ifdef __cplusplus
+}  /* extern "C" */
+#endif
+
+#endif /* __GDIPLUS_IMAGING_H */
diff --git a/mingw-w64-headers/include/gdiplus/gdiplusimpl.h b/mingw-w64-headers/include/gdiplus/gdiplusimpl.h
new file mode 100644
index 0000000..13b48ab
--- /dev/null
+++ b/mingw-w64-headers/include/gdiplus/gdiplusimpl.h
@@ -0,0 +1,1613 @@
+/*
+ * gdiplusimpl.h
+ *
+ * GDI+ Bitmap, CachedBitmap, CustomLineCap, Font, FontCollection, FontFamily,
+ *      Image, InstalledFontCollection, PrivateFontCollection, Region
+ *      implementation.  Definitions of these classes are in gdiplusheaders.h.
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ *   Created by Markus Koenig <markus@stber-koenig.de>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __GDIPLUS_IMPL_H
+#define __GDIPLUS_IMPL_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifndef __cplusplus
+#error "A C++ compiler is required to include gdiplusimpl.h."
+#endif
+
+/*
+ * FIXME: I called this file gdiplusimpl.h, but what should it really be called?
+ * Or did Microsoft create separate files for each class implemented here?
+ */
+
+
+// Image
+
+__inline__ Image* Image::FromFile(const WCHAR *filename,
+		BOOL useEmbeddedColorManagement)
+{
+	return new Image(filename, useEmbeddedColorManagement);
+}
+
+__inline__ Image* Image::FromStream(IStream *stream,
+		BOOL useEmbeddedColorManagement)
+{
+	return new Image(stream, useEmbeddedColorManagement);
+}
+
+__inline__ Image::Image(const WCHAR *filename, BOOL useEmbeddedColorManagement):
+	nativeImage(NULL), lastStatus(Ok)
+{
+	if (useEmbeddedColorManagement) {
+		lastStatus = DllExports::GdipLoadImageFromFileICM(
+				filename, &nativeImage);
+	} else {
+		lastStatus = DllExports::GdipLoadImageFromFile(
+				filename, &nativeImage);
+	}
+}
+
+__inline__ Image::Image(IStream *stream, BOOL useEmbeddedColorManagement):
+	nativeImage(NULL), lastStatus(Ok)
+{
+	if (useEmbeddedColorManagement) {
+		lastStatus = DllExports::GdipLoadImageFromStreamICM(
+				stream, &nativeImage);
+	} else {
+		lastStatus = DllExports::GdipLoadImageFromStream(
+				stream, &nativeImage);
+	}
+}
+
+__inline__ Status Image::FindFirstItem(ImageItemData *item)
+{
+	// FIXME: can't test GdipFindFirstImageItem b/c it isn't exported in 1.0
+	return updateStatus(DllExports::GdipFindFirstImageItem(
+			nativeImage, item));
+}
+
+__inline__ Status Image::FindNextItem(ImageItemData *item)
+{
+	// FIXME: can't test GdipFindFirstImageItem b/c it isn't exported in 1.0
+	return updateStatus(DllExports::GdipFindNextImageItem(
+			nativeImage, item));
+}
+
+__inline__ Status Image::GetAllPropertyItems(UINT totalBufferSize,
+		UINT numProperties, PropertyItem *allItems)
+{
+	return updateStatus(DllExports::GdipGetAllPropertyItems(
+			nativeImage, totalBufferSize, numProperties, allItems));
+}
+
+__inline__ Status Image::GetBounds(RectF *srcRect, Unit *srcUnit)
+{
+	return updateStatus(DllExports::GdipGetImageBounds(
+			nativeImage, srcRect, srcUnit));
+}
+
+__inline__ Status Image::GetEncoderParameterList(const CLSID *clsidEncoder,
+		UINT size, EncoderParameters *buffer)
+{
+	return updateStatus(DllExports::GdipGetEncoderParameterList(
+			nativeImage, clsidEncoder, size, buffer));
+}
+
+__inline__ UINT Image::GetEncoderParameterListSize(const CLSID *clsidEncoder)
+{
+	UINT result = 0;
+	updateStatus(DllExports::GdipGetEncoderParameterListSize(
+			nativeImage, clsidEncoder, &result));
+	return result;
+}
+
+__inline__ UINT Image::GetFlags()
+{
+	UINT result = 0;
+	updateStatus(DllExports::GdipGetImageFlags(nativeImage, &result));
+	return result;
+}
+
+__inline__ UINT Image::GetFrameCount(const GUID *dimensionID)
+{
+	UINT result = 0;
+	updateStatus(DllExports::GdipImageGetFrameCount(
+			nativeImage, dimensionID, &result));
+	return result;
+}
+
+__inline__ UINT Image::GetFrameDimensionsCount()
+{
+	UINT result = 0;
+	updateStatus(DllExports::GdipImageGetFrameDimensionsCount(
+			nativeImage, &result));
+	return result;
+}
+
+__inline__ Status Image::GetFrameDimensionsList(GUID *dimensionIDs, UINT count)
+{
+	return updateStatus(DllExports::GdipImageGetFrameDimensionsList(
+			nativeImage, dimensionIDs, count));
+}
+
+__inline__ UINT Image::GetHeight()
+{
+	UINT result = 0;
+	updateStatus(DllExports::GdipGetImageHeight(nativeImage, &result));
+	return result;
+}
+
+__inline__ REAL Image::GetHorizontalResolution()
+{
+	REAL result = 0.0f;
+	updateStatus(DllExports::GdipGetImageHorizontalResolution(
+			nativeImage, &result));
+	return result;
+}
+
+__inline__ Status Image::GetItemData(ImageItemData *item)
+{
+	// FIXME: can't test GdipGetImageItemData b/c it isn't exported in 1.0
+	return updateStatus(DllExports::GdipGetImageItemData(
+			nativeImage, item));
+}
+
+__inline__ Status Image::GetPalette(ColorPalette *palette, INT size)
+{
+	return updateStatus(DllExports::GdipGetImagePalette(
+			nativeImage, palette, size));
+}
+
+__inline__ INT Image::GetPaletteSize()
+{
+	INT result = 0;
+	updateStatus(DllExports::GdipGetImagePaletteSize(nativeImage, &result));
+	return result;
+}
+
+__inline__ Status Image::GetPhysicalDimension(SizeF *size)
+{
+	if (!size) return lastStatus = InvalidParameter;
+	return updateStatus(DllExports::GdipGetImageDimension(
+			nativeImage, &size->Width, &size->Height));
+}
+
+__inline__ PixelFormat Image::GetPixelFormat()
+{
+	PixelFormat result = (PixelFormat) 0;
+	updateStatus(DllExports::GdipGetImagePixelFormat(nativeImage, &result));
+	return result;
+}
+
+__inline__ UINT Image::GetPropertyCount()
+{
+	UINT result = 0;
+	updateStatus(DllExports::GdipGetPropertyCount(nativeImage, &result));
+	return result;
+}
+
+__inline__ Status Image::GetPropertyIdList(UINT numOfProperty, PROPID *list)
+{
+	return updateStatus(DllExports::GdipGetPropertyIdList(
+			nativeImage, numOfProperty, list));
+}
+
+__inline__ Status Image::GetPropertyItem(PROPID propId, UINT propSize,
+		PropertyItem *buffer)
+{
+	return updateStatus(DllExports::GdipGetPropertyItem(
+			nativeImage, propId, propSize, buffer));
+}
+
+__inline__ UINT Image::GetPropertyItemSize(PROPID propId)
+{
+	UINT result = 0;
+	updateStatus(DllExports::GdipGetPropertyItemSize(
+			nativeImage, propId, &result));
+	return result;
+}
+
+__inline__ Status Image::GetPropertySize(
+		UINT *totalBufferSize, UINT *numProperties)
+{
+	return updateStatus(DllExports::GdipGetPropertySize(
+			nativeImage, totalBufferSize, numProperties));
+}
+
+__inline__ Status Image::GetRawFormat(GUID *format)
+{
+	return updateStatus(DllExports::GdipGetImageRawFormat(
+			nativeImage, format));
+}
+
+__inline__ Image* Image::GetThumbnailImage(UINT thumbWidth, UINT thumbHeight,
+		GetThumbnailImageAbort callback, VOID *callbackData)
+{
+	GpImage *thumbImage = NULL;
+	Status status = updateStatus(DllExports::GdipGetImageThumbnail(
+			nativeImage, thumbWidth, thumbHeight, &thumbImage,
+			callback, callbackData));
+
+	if (status == Ok) {
+		Image *result = new Image(thumbImage, Ok);
+		if (!result) {
+			DllExports::GdipDisposeImage(thumbImage);
+			lastStatus = OutOfMemory;
+		}
+		return result;
+	} else {
+		return NULL;
+	}
+}
+
+__inline__ ImageType Image::GetType() const
+{
+	ImageType result = ImageTypeUnknown;
+	updateStatus(DllExports::GdipGetImageType(nativeImage, &result));
+	return result;
+}
+
+__inline__ REAL Image::GetVerticalResolution()
+{
+	REAL result = 0.0f;
+	updateStatus(DllExports::GdipGetImageVerticalResolution(
+			nativeImage, &result));
+	return result;
+}
+
+__inline__ UINT Image::GetWidth()
+{
+	UINT result = 0;
+	updateStatus(DllExports::GdipGetImageWidth(nativeImage, &result));
+	return result;
+}
+
+__inline__ Status Image::RemovePropertyItem(PROPID propId)
+{
+	return updateStatus(DllExports::GdipRemovePropertyItem(
+			nativeImage, propId));
+}
+
+__inline__ Status Image::RotateFlip(RotateFlipType rotateFlipType)
+{
+	return updateStatus(DllExports::GdipImageRotateFlip(
+			nativeImage, rotateFlipType));
+}
+
+__inline__ Status Image::Save(const WCHAR *filename, const CLSID *clsidEncoder,
+		const EncoderParameters *encoderParams)
+{
+	return updateStatus(DllExports::GdipSaveImageToFile(
+			nativeImage, filename, clsidEncoder, encoderParams));
+}
+
+__inline__ Status Image::Save(IStream *stream, const CLSID *clsidEncoder,
+		const EncoderParameters *encoderParams)
+{
+	return updateStatus(DllExports::GdipSaveImageToStream(
+			nativeImage, stream, clsidEncoder, encoderParams));
+}
+
+__inline__ Status Image::SaveAdd(const EncoderParameters *encoderParams)
+{
+	return updateStatus(DllExports::GdipSaveAdd(
+			nativeImage, encoderParams));
+}
+
+__inline__ Status Image::SaveAdd(Image *newImage,
+		const EncoderParameters *encoderParams)
+{
+	return updateStatus(DllExports::GdipSaveAddImage(
+			nativeImage,
+			newImage ? newImage->nativeImage : NULL,
+			encoderParams));
+}
+
+__inline__ Status Image::SelectActiveFrame(
+		const GUID *dimensionID, UINT frameIndex)
+{
+	return updateStatus(DllExports::GdipImageSelectActiveFrame(
+			nativeImage, dimensionID, frameIndex));
+}
+
+__inline__ Status Image::SetAbort(GdiplusAbort *pIAbort)
+{
+	// FIXME: can't test GdipImageSetAbort because it isn't exported in 1.0
+	return updateStatus(DllExports::GdipImageSetAbort(
+			nativeImage, pIAbort));
+}
+
+__inline__ Status Image::SetPalette(const ColorPalette *palette)
+{
+	return updateStatus(DllExports::GdipSetImagePalette(
+			nativeImage, palette));
+}
+
+__inline__ Status Image::SetPropertyItem(const PropertyItem *item)
+{
+	return updateStatus(DllExports::GdipSetPropertyItem(nativeImage, item));
+}
+
+
+// Bitmap
+
+__inline__ Bitmap* Bitmap::FromBITMAPINFO(const BITMAPINFO *gdiBitmapInfo,
+		VOID *gdiBitmapData)
+{
+	return new Bitmap(gdiBitmapInfo, gdiBitmapData);
+}
+
+__inline__ Bitmap* Bitmap::FromDirectDrawSurface7(IDirectDrawSurface7 *surface)
+{
+	return new Bitmap(surface);
+}
+
+__inline__ Bitmap* Bitmap::FromFile(const WCHAR *filename,
+		BOOL useEmbeddedColorManagement)
+{
+	return new Bitmap(filename, useEmbeddedColorManagement);
+}
+
+__inline__ Bitmap* Bitmap::FromHBITMAP(HBITMAP hbm, HPALETTE hpal)
+{
+	return new Bitmap(hbm, hpal);
+}
+
+__inline__ Bitmap* Bitmap::FromHICON(HICON icon)
+{
+	return new Bitmap(icon);
+}
+
+__inline__ Bitmap* Bitmap::FromResource(
+		HINSTANCE hInstance, const WCHAR *bitmapName)
+{
+	return new Bitmap(hInstance, bitmapName);
+}
+
+__inline__ Bitmap* Bitmap::FromStream(IStream *stream,
+		BOOL useEmbeddedColorManagement)
+{
+	return new Bitmap(stream, useEmbeddedColorManagement);
+}
+
+//TODO: [GDI+ 1.1] Bitmap::ApplyEffect
+//__inline__ Status Bitmap::ApplyEffect(Bitmap **inputs, INT numInputs,
+//		Effect *effect, RECT *ROI, RECT *outputRect, Bitmap **output)
+//{
+//	return NotImplemented;
+//}
+
+__inline__ Status Bitmap::InitializePalette(ColorPalette *palette,
+		PaletteType paletteType, INT optimalColors,
+		BOOL useTransparentColor, Bitmap *bitmap)
+{
+	// FIXME: can't test GdipInitializePalette b/c it isn't exported in 1.0
+	return DllExports::GdipInitializePalette(palette, paletteType,
+			optimalColors, useTransparentColor,
+			bitmap ? (GpBitmap*) bitmap->nativeImage : NULL);
+}
+
+__inline__ Bitmap::Bitmap(const BITMAPINFO *gdiBitmapInfo, VOID *gdiBitmapData):
+	Image(NULL, Ok)
+{
+	GpBitmap *nativeBitmap = NULL;
+	lastStatus = DllExports::GdipCreateBitmapFromGdiDib(
+			gdiBitmapInfo, gdiBitmapData, &nativeBitmap);
+	nativeImage = nativeBitmap;
+}
+
+__inline__ Bitmap::Bitmap(IDirectDrawSurface7 *surface): Image(NULL, Ok)
+{
+	GpBitmap *nativeBitmap = NULL;
+	lastStatus = DllExports::GdipCreateBitmapFromDirectDrawSurface(
+			surface, &nativeBitmap);
+	nativeImage = nativeBitmap;
+}
+
+__inline__ Bitmap::Bitmap(const WCHAR *filename,
+		BOOL useEmbeddedColorManagement): Image(NULL, Ok)
+{
+	GpBitmap *nativeBitmap = NULL;
+	if (useEmbeddedColorManagement) {
+		lastStatus = DllExports::GdipCreateBitmapFromFileICM(
+				filename, &nativeBitmap);
+	} else {
+		lastStatus = DllExports::GdipCreateBitmapFromFile(
+				filename, &nativeBitmap);
+	}
+	nativeImage = nativeBitmap;
+}
+
+__inline__ Bitmap::Bitmap(HBITMAP hbm, HPALETTE hpal):
+	Image(NULL, Ok)
+{
+	GpBitmap *nativeBitmap = NULL;
+	lastStatus = DllExports::GdipCreateBitmapFromHBITMAP(
+			hbm, hpal, &nativeBitmap);
+	nativeImage = nativeBitmap;
+}
+
+__inline__ Bitmap::Bitmap(HICON hicon):
+	Image(NULL, Ok)
+{
+	GpBitmap *nativeBitmap = NULL;
+	lastStatus = DllExports::GdipCreateBitmapFromHICON(hicon, &nativeBitmap);
+	nativeImage = nativeBitmap;
+}
+
+__inline__ Bitmap::Bitmap(HINSTANCE hInstance, const WCHAR *bitmapName):
+	Image(NULL, Ok)
+{
+	GpBitmap *nativeBitmap = NULL;
+	lastStatus = DllExports::GdipCreateBitmapFromResource(
+			hInstance, bitmapName, &nativeBitmap);
+	nativeImage = nativeBitmap;
+}
+
+__inline__ Bitmap::Bitmap(IStream *stream, BOOL useEmbeddedColorManagement):
+	Image(NULL, Ok)
+{
+	GpBitmap *nativeBitmap = NULL;
+	if (useEmbeddedColorManagement) {
+		lastStatus = DllExports::GdipCreateBitmapFromStreamICM(
+				stream, &nativeBitmap);
+	} else {
+		lastStatus = DllExports::GdipCreateBitmapFromStream(
+				stream, &nativeBitmap);
+	}
+	nativeImage = nativeBitmap;
+}
+
+__inline__ Bitmap::Bitmap(INT width, INT height, Graphics *target):
+	Image(NULL, Ok)
+{
+	GpBitmap *nativeBitmap = NULL;
+	lastStatus = DllExports::GdipCreateBitmapFromGraphics(
+			width, height, target ? target->nativeGraphics : NULL,
+			&nativeBitmap);
+	nativeImage = nativeBitmap;
+}
+
+__inline__ Bitmap::Bitmap(INT width, INT height, PixelFormat format):
+	Image(NULL, Ok)
+{
+	GpBitmap *nativeBitmap = NULL;
+	lastStatus = DllExports::GdipCreateBitmapFromScan0(
+			width, height, 0, format, NULL, &nativeBitmap);
+	nativeImage = nativeBitmap;
+}
+
+__inline__ Bitmap::Bitmap(INT width, INT height, INT stride,
+		PixelFormat format, BYTE *scan0): Image(NULL, Ok)
+{
+	GpBitmap *nativeBitmap = NULL;
+	lastStatus = DllExports::GdipCreateBitmapFromScan0(
+			width, height, stride, format, scan0, &nativeBitmap);
+	nativeImage = nativeBitmap;
+}
+
+__inline__ Bitmap* Bitmap::Clone(const RectF& rect, PixelFormat format) const
+{
+	return Clone(rect.X, rect.Y, rect.Width, rect.Height, format);
+}
+
+__inline__ Bitmap* Bitmap::Clone(const Rect& rect, PixelFormat format) const
+{
+	return Clone(rect.X, rect.Y, rect.Width, rect.Height, format);
+}
+
+__inline__ Bitmap* Bitmap::Clone(REAL x, REAL y, REAL width, REAL height,
+		PixelFormat format) const
+{
+	GpBitmap *cloneBitmap = NULL;
+	Status status = updateStatus(DllExports::GdipCloneBitmapArea(
+			x, y, width, height, format,
+			(GpBitmap*) nativeImage, &cloneBitmap));
+	if (status == Ok) {
+		Bitmap *result = new Bitmap(cloneBitmap, lastStatus);
+		if (!result) {
+			DllExports::GdipDisposeImage(cloneBitmap);
+			lastStatus = OutOfMemory;
+		}
+		return result;
+	} else {
+		return NULL;
+	}
+}
+
+__inline__ Bitmap* Bitmap::Clone(INT x, INT y, INT width, INT height,
+		PixelFormat format) const
+{
+	GpBitmap *cloneBitmap = NULL;
+	Status status = updateStatus(DllExports::GdipCloneBitmapAreaI(
+			x, y, width, height, format,
+			(GpBitmap*) nativeImage, &cloneBitmap));
+	if (status == Ok) {
+		Bitmap *result = new Bitmap(cloneBitmap, lastStatus);
+		if (!result) {
+			DllExports::GdipDisposeImage(cloneBitmap);
+			lastStatus = OutOfMemory;
+		}
+		return result;
+	} else {
+		return NULL;
+	}
+}
+
+//TODO: [GDI+ 1.1] Bitmap::ApplyEffect
+//__inline__ Status Bitmap::ApplyEffect(Effect *effect, RECT *ROI)
+//{
+//	return NotImplemented;
+//}
+
+__inline__ Status Bitmap::ConvertFormat(PixelFormat format,
+		DitherType ditherType, PaletteType paletteType,
+		ColorPalette *palette, REAL alphaThresholdPercent)
+{
+	// FIXME: can't test GdipBitmapConvertFormat b/c it isn't exported in 1.0
+	return updateStatus(DllExports::GdipBitmapConvertFormat(
+			(GpBitmap*) nativeImage, format, ditherType,
+			paletteType, palette, alphaThresholdPercent));
+}
+
+__inline__ Status Bitmap::GetHBITMAP(
+		const Color& colorBackground, HBITMAP *hbmReturn) const
+{
+	return updateStatus(DllExports::GdipCreateHBITMAPFromBitmap(
+			(GpBitmap*) nativeImage, hbmReturn,
+			colorBackground.GetValue()));
+}
+
+__inline__ Status Bitmap::GetHICON(HICON *icon) const
+{
+	return updateStatus(DllExports::GdipCreateHICONFromBitmap(
+			(GpBitmap*) nativeImage, icon));
+}
+
+__inline__ Status Bitmap::GetHistogram(HistogramFormat format,
+		UINT numberOfEntries,
+		UINT *channel0, UINT *channel1,
+		UINT *channel2, UINT *channel3) const
+{
+	return updateStatus(DllExports::GdipBitmapGetHistogram(
+			(GpBitmap*) nativeImage, format, numberOfEntries,
+			channel0, channel1, channel2, channel3));
+}
+
+__inline__ Status Bitmap::GetHistogramSize(HistogramFormat format,
+		UINT *numberOfEntries) const
+{
+	return updateStatus(DllExports::GdipBitmapGetHistogramSize(
+			format, numberOfEntries));
+}
+
+__inline__ Status Bitmap::GetPixel(INT x, INT y, Color *color) const
+{
+	return updateStatus(DllExports::GdipBitmapGetPixel(
+			(GpBitmap*) nativeImage, x, y,
+			color ? &color->Value : NULL));
+}
+
+__inline__ Status Bitmap::LockBits(const Rect *rect, UINT flags,
+		PixelFormat format, BitmapData *lockedBitmapData)
+{
+	return updateStatus(DllExports::GdipBitmapLockBits(
+			(GpBitmap*) nativeImage, rect, flags, format,
+			lockedBitmapData));
+}
+
+__inline__ Status Bitmap::SetPixel(INT x, INT y, const Color& color)
+{
+	return updateStatus(DllExports::GdipBitmapSetPixel(
+			(GpBitmap*) nativeImage, x, y, color.GetValue()));
+}
+
+__inline__ Status Bitmap::SetResolution(REAL xdpi, REAL ydpi)
+{
+	return updateStatus(DllExports::GdipBitmapSetResolution(
+			(GpBitmap*) nativeImage, xdpi, ydpi));
+}
+
+__inline__ Status Bitmap::UnlockBits(BitmapData *lockedBitmapData)
+{
+	return updateStatus(DllExports::GdipBitmapUnlockBits(
+			(GpBitmap*) nativeImage, lockedBitmapData));
+}
+
+
+// CachedBitmap
+
+__inline__ CachedBitmap::CachedBitmap(Bitmap *bitmap, Graphics *graphics):
+	nativeCachedBitmap(NULL), lastStatus(Ok)
+{
+	lastStatus = DllExports::GdipCreateCachedBitmap(
+			bitmap ? ((GpBitmap*) bitmap->nativeImage) : NULL,
+			graphics ? graphics->nativeGraphics : NULL,
+			&nativeCachedBitmap);
+}
+
+__inline__ CachedBitmap::~CachedBitmap()
+{
+	DllExports::GdipDeleteCachedBitmap(nativeCachedBitmap);
+}
+
+
+// CustomLineCap
+
+__inline__ CustomLineCap::CustomLineCap(
+		const GraphicsPath *fillPath,
+		const GraphicsPath *strokePath,
+		LineCap baseCap, REAL baseInset):
+		nativeCustomLineCap(NULL), lastStatus(Ok)
+{
+	lastStatus = DllExports::GdipCreateCustomLineCap(
+			fillPath ? fillPath->nativePath : NULL,
+			strokePath ? strokePath->nativePath : NULL,
+			baseCap, baseInset, &nativeCustomLineCap);
+}
+
+__inline__ LineCap CustomLineCap::GetBaseCap() const
+{
+	LineCap result = LineCapFlat;
+	updateStatus(DllExports::GdipGetCustomLineCapBaseCap(
+			nativeCustomLineCap, &result));
+	return result;
+}
+
+__inline__ REAL CustomLineCap::GetBaseInset() const
+{
+	REAL result = 0.0f;
+	updateStatus(DllExports::GdipGetCustomLineCapBaseInset(
+			nativeCustomLineCap, &result));
+	return result;
+}
+
+__inline__ Status CustomLineCap::GetStrokeCaps(LineCap *startCap,
+		LineCap *endCap) const
+{
+	return updateStatus(DllExports::GdipGetCustomLineCapStrokeCaps(
+			nativeCustomLineCap, startCap, endCap));
+}
+
+__inline__ LineJoin CustomLineCap::GetStrokeJoin() const
+{
+	LineJoin result = LineJoinMiter;
+	updateStatus(DllExports::GdipGetCustomLineCapStrokeJoin(
+			nativeCustomLineCap, &result));
+	return result;
+}
+
+__inline__ REAL CustomLineCap::GetWidthScale() const
+{
+	REAL result = 0.0f;
+	updateStatus(DllExports::GdipGetCustomLineCapWidthScale(
+			nativeCustomLineCap, &result));
+	return result;
+}
+
+__inline__ Status CustomLineCap::SetBaseCap(LineCap baseCap)
+{
+	return updateStatus(DllExports::GdipSetCustomLineCapBaseCap(
+			nativeCustomLineCap, baseCap));
+}
+
+__inline__ Status CustomLineCap::SetBaseInset(REAL inset)
+{
+	return updateStatus(DllExports::GdipSetCustomLineCapBaseInset(
+			nativeCustomLineCap, inset));
+}
+
+__inline__ Status CustomLineCap::SetStrokeCap(LineCap strokeCap)
+{
+	return updateStatus(DllExports::GdipSetCustomLineCapStrokeCaps(
+			nativeCustomLineCap, strokeCap, strokeCap));
+}
+
+__inline__ Status CustomLineCap::SetStrokeCaps(LineCap startCap, LineCap endCap)
+{
+	return updateStatus(DllExports::GdipSetCustomLineCapStrokeCaps(
+			nativeCustomLineCap, startCap, endCap));
+}
+
+__inline__ Status CustomLineCap::SetStrokeJoin(LineJoin lineJoin)
+{
+	return updateStatus(DllExports::GdipSetCustomLineCapStrokeJoin(
+			nativeCustomLineCap, lineJoin));
+}
+
+__inline__ Status CustomLineCap::SetWidthScale(REAL widthScale)
+{
+	return updateStatus(DllExports::GdipSetCustomLineCapWidthScale(
+			nativeCustomLineCap, widthScale));
+}
+
+
+// Font
+
+__inline__ Font::Font(const FontFamily *family,
+		REAL emSize, INT style, Unit unit):
+		nativeFont(NULL), lastStatus(Ok)
+{
+	lastStatus = DllExports::GdipCreateFont(
+			family ? family->nativeFontFamily : NULL,
+			emSize, style, unit, &nativeFont);
+}
+
+__inline__ Font::Font(HDC hdc, HFONT hfont):
+	nativeFont(NULL), lastStatus(Ok)
+{
+	LOGFONTW logfont;
+	if (GetObject(hfont, sizeof logfont, &logfont)) {
+		lastStatus = DllExports::GdipCreateFontFromLogfontW(
+				hdc, &logfont, &nativeFont);
+	} else {
+		lastStatus = DllExports::GdipCreateFontFromDC(
+				hdc, &nativeFont);
+	}
+}
+
+__inline__ Font::Font(HDC hdc, const LOGFONTA *logfont):
+	nativeFont(NULL), lastStatus(Ok)
+{
+	lastStatus = DllExports::GdipCreateFontFromLogfontA(
+			hdc, logfont, &nativeFont);
+}
+
+__inline__ Font::Font(HDC hdc, const LOGFONTW *logfont):
+	nativeFont(NULL), lastStatus(Ok)
+{
+	lastStatus = DllExports::GdipCreateFontFromLogfontW(
+			hdc, logfont, &nativeFont);
+}
+
+__inline__ Font::Font(HDC hdc):
+	nativeFont(NULL), lastStatus(Ok)
+{
+	lastStatus = DllExports::GdipCreateFontFromDC(hdc, &nativeFont);
+}
+
+__inline__ Font::Font(const WCHAR *familyName, REAL emSize, INT style,
+		Unit unit, const FontCollection *fontCollection):
+		nativeFont(NULL), lastStatus(Ok)
+{
+	GpFontFamily *nativeFamily = NULL;
+	lastStatus = DllExports::GdipCreateFontFamilyFromName(
+			familyName,
+			fontCollection ? fontCollection->nativeFontCollection : NULL,
+			&nativeFamily);
+
+	if (nativeFamily) {
+		lastStatus = DllExports::GdipCreateFont(
+				nativeFamily, emSize, style, unit, &nativeFont);
+		DllExports::GdipDeleteFontFamily(nativeFamily);
+	}
+}
+
+__inline__ Font::~Font()
+{
+	DllExports::GdipDeleteFont(nativeFont);
+}
+
+__inline__ Font* Font::Clone() const
+{
+	GpFont *cloneFont = NULL;
+	Status status = updateStatus(DllExports::GdipCloneFont(
+			nativeFont, &cloneFont));
+	if (status == Ok) {
+		Font *result = new Font(cloneFont, lastStatus);
+		if (!result) {
+			DllExports::GdipDeleteFont(cloneFont);
+			lastStatus = OutOfMemory;
+		}
+		return result;
+	} else {
+		return NULL;
+	}
+}
+
+__inline__ Status Font::GetFamily(FontFamily *family) const
+{
+	if (!family) return lastStatus = InvalidParameter;
+	// FIXME: do we need to call GdipDeleteFontFamily first?
+	return family->lastStatus = updateStatus(DllExports::GdipGetFamily(
+			nativeFont, &family->nativeFontFamily));
+}
+
+__inline__ REAL Font::GetHeight(const Graphics *graphics) const
+{
+	REAL result = 0.0f;
+	updateStatus(DllExports::GdipGetFontHeight(
+			nativeFont, graphics ? graphics->nativeGraphics : NULL,
+			&result));
+	return result;
+}
+
+__inline__ REAL Font::GetHeight(REAL dpi) const
+{
+	REAL result = 0.0f;
+	updateStatus(DllExports::GdipGetFontHeightGivenDPI(
+			nativeFont, dpi, &result));
+	return result;
+}
+
+__inline__ Status Font::GetLogFontA(const Graphics *graphics, LOGFONTA *logfontA)
+const
+{
+	return updateStatus(DllExports::GdipGetLogFontA(
+			nativeFont, graphics ? graphics->nativeGraphics : NULL,
+			logfontA));
+}
+
+__inline__ Status Font::GetLogFontW(const Graphics *graphics, LOGFONTW *logfontW)
+const
+{
+	return updateStatus(DllExports::GdipGetLogFontW(
+			nativeFont, graphics ? graphics->nativeGraphics : NULL,
+			logfontW));
+}
+
+__inline__ REAL Font::GetSize() const
+{
+	REAL result = 0.0;
+	updateStatus(DllExports::GdipGetFontSize(nativeFont, &result));
+	return result;
+}
+
+__inline__ INT Font::GetStyle() const
+{
+	INT result = FontStyleRegular;
+	updateStatus(DllExports::GdipGetFontStyle(nativeFont, &result));
+	return result;
+}
+
+__inline__ Unit Font::GetUnit() const
+{
+	Unit result = UnitPoint;
+	updateStatus(DllExports::GdipGetFontUnit(nativeFont, &result));
+	return result;
+}
+
+
+// FontCollection
+
+__inline__ FontCollection::FontCollection():
+	nativeFontCollection(NULL), lastStatus(Ok)
+{
+}
+
+__inline__ Status FontCollection::GetFamilies(INT numSought,
+		FontFamily *families, INT *numFound) const
+{
+	if (numSought <= 0 || !families || !numFound)
+		return lastStatus = InvalidParameter;
+
+	for (int i = 0; i < numSought; ++i) {
+		families[i].nativeFontFamily = NULL;
+		families[i].lastStatus = FontFamilyNotFound;
+	}
+	*numFound = 0;
+
+	GpFontFamily **nativeFamilyArray = (GpFontFamily**)
+		DllExports::GdipAlloc(numSought * sizeof (GpFontFamily*));
+	if (!nativeFamilyArray)
+		return lastStatus = OutOfMemory;
+
+	Status status = updateStatus(DllExports::GdipGetFontCollectionFamilyList(
+			nativeFontCollection, numSought, nativeFamilyArray,
+			numFound));
+
+	// FIXME: must the native GpFontFamily objects be cloned? Seems so.
+	// (if this is not done, the "Creating a Private Font Collection"
+	// example crashes on "delete[] pFontFamily")
+
+	if (status == Ok) {
+		for (int i = 0; i < *numFound; ++i) {
+			families[i].lastStatus =
+				updateStatus(DllExports::GdipCloneFontFamily(
+					nativeFamilyArray[i],
+					&families[i].nativeFontFamily));
+		}
+	}
+
+	DllExports::GdipFree(nativeFamilyArray);
+	return status;
+}
+
+__inline__ INT FontCollection::GetFamilyCount() const
+{
+	INT result = 0;
+	updateStatus(DllExports::GdipGetFontCollectionFamilyCount(
+			nativeFontCollection, &result));
+	return result;
+}
+
+
+// FontFamily
+
+// FIXME: do FontFamily::GenericMonospace() et al. need to be thread safe?
+// FIXME: maybe put parts of this in gdiplus.c
+
+extern "C" void *_GdipFontFamilyCachedGenericMonospace;
+extern "C" void *_GdipFontFamilyCachedGenericSansSerif;
+extern "C" void *_GdipFontFamilyCachedGenericSerif;
+
+__inline__ const FontFamily* FontFamily::GenericMonospace()
+{
+	if (!_GdipFontFamilyCachedGenericMonospace) {
+		GpFontFamily *nativeFontFamily = 0;
+		Status status = DllExports::GdipGetGenericFontFamilyMonospace(
+				&nativeFontFamily);
+		if (status == Ok && nativeFontFamily) {
+			_GdipFontFamilyCachedGenericMonospace = (void*)
+				new FontFamily(nativeFontFamily, Ok);
+		}
+	}
+	return (FontFamily*) _GdipFontFamilyCachedGenericMonospace;
+}
+
+__inline__ const FontFamily* FontFamily::GenericSansSerif()
+{
+	if (!_GdipFontFamilyCachedGenericSansSerif) {
+		GpFontFamily *nativeFontFamily = 0;
+		Status status = DllExports::GdipGetGenericFontFamilySansSerif(
+				&nativeFontFamily);
+		if (status == Ok && nativeFontFamily) {
+			_GdipFontFamilyCachedGenericSansSerif = (void*)
+				new FontFamily(nativeFontFamily, Ok);
+		}
+	}
+	return (FontFamily*) _GdipFontFamilyCachedGenericSansSerif;
+}
+
+__inline__ const FontFamily* FontFamily::GenericSerif()
+{
+	if (!_GdipFontFamilyCachedGenericSerif) {
+		GpFontFamily *nativeFontFamily = 0;
+		Status status = DllExports::GdipGetGenericFontFamilySerif(
+				&nativeFontFamily);
+		if (status == Ok && nativeFontFamily) {
+			_GdipFontFamilyCachedGenericSerif = (void*)
+				new FontFamily(nativeFontFamily, Ok);
+		}
+	}
+	return (FontFamily*) _GdipFontFamilyCachedGenericSerif;
+}
+
+__inline__ FontFamily::FontFamily():
+	nativeFontFamily(NULL), lastStatus(Ok)
+{
+}
+
+__inline__ FontFamily::FontFamily(const WCHAR *name,
+		const FontCollection *fontCollection):
+		nativeFontFamily(NULL), lastStatus(Ok)
+{
+	lastStatus = DllExports::GdipCreateFontFamilyFromName(name,
+			fontCollection ? fontCollection->nativeFontCollection : NULL,
+			&nativeFontFamily);
+}
+
+__inline__ FontFamily::~FontFamily()
+{
+	DllExports::GdipDeleteFontFamily(nativeFontFamily);
+}
+
+__inline__ FontFamily* FontFamily::Clone() const
+{
+	GpFontFamily *cloneFontFamily = NULL;
+	Status status = updateStatus(DllExports::GdipCloneFontFamily(
+			nativeFontFamily, &cloneFontFamily));
+	if (status == Ok) {
+		FontFamily *result = new FontFamily(cloneFontFamily, lastStatus);
+		if (!result) {
+			DllExports::GdipDeleteFontFamily(cloneFontFamily);
+			lastStatus = OutOfMemory;
+		}
+		return result;
+	} else {
+		return NULL;
+	}
+}
+
+__inline__ UINT16 FontFamily::GetCellAscent(INT style) const
+{
+	UINT16 result = 0;
+	updateStatus(DllExports::GdipGetCellAscent(
+			nativeFontFamily, style, &result));
+	return result;
+}
+
+__inline__ UINT16 FontFamily::GetCellDescent(INT style) const
+{
+	UINT16 result = 0;
+	updateStatus(DllExports::GdipGetCellDescent(
+			nativeFontFamily, style, &result));
+	return result;
+}
+
+__inline__ UINT16 FontFamily::GetEmHeight(INT style) const
+{
+	UINT16 result = 0;
+	updateStatus(DllExports::GdipGetEmHeight(
+			nativeFontFamily, style, &result));
+	return result;
+}
+
+__inline__ Status FontFamily::GetFamilyName(WCHAR name[LF_FACESIZE],
+		LANGID language) const
+{
+	return updateStatus(DllExports::GdipGetFamilyName(
+			nativeFontFamily, name, language));
+}
+
+__inline__ UINT16 FontFamily::GetLineSpacing(INT style) const
+{
+	UINT16 result = 0;
+	updateStatus(DllExports::GdipGetLineSpacing(
+			nativeFontFamily, style, &result));
+	return result;
+}
+
+__inline__ BOOL FontFamily::IsStyleAvailable(INT style) const
+{
+	BOOL result = FALSE;
+	updateStatus(DllExports::GdipIsStyleAvailable(
+			nativeFontFamily, style, &result));
+	return result;
+}
+
+
+// InstalledFontCollection
+
+__inline__ InstalledFontCollection::InstalledFontCollection()
+{
+	lastStatus = DllExports::GdipNewInstalledFontCollection(
+			&nativeFontCollection);
+}
+
+
+// PrivateFontCollection
+
+__inline__ PrivateFontCollection::PrivateFontCollection()
+{
+	lastStatus = DllExports::GdipNewPrivateFontCollection(
+			&nativeFontCollection);
+}
+
+__inline__ Status PrivateFontCollection::AddFontFile(const WCHAR *filename)
+{
+	return updateStatus(DllExports::GdipPrivateAddFontFile(
+			nativeFontCollection, filename));
+}
+
+__inline__ Status PrivateFontCollection::AddMemoryFont(
+		const VOID *memory, INT length)
+{
+	return updateStatus(DllExports::GdipPrivateAddMemoryFont(
+			nativeFontCollection, memory, length));
+}
+
+
+// Region
+
+__inline__ Region* Region::FromHRGN(HRGN hrgn)
+{
+	return new Region(hrgn);
+}
+
+__inline__ Region::Region(): nativeRegion(NULL), lastStatus(Ok)
+{
+	lastStatus = DllExports::GdipCreateRegion(&nativeRegion);
+}
+
+__inline__ Region::Region(const RectF& rect): nativeRegion(NULL), lastStatus(Ok)
+{
+	lastStatus = DllExports::GdipCreateRegionRect(&rect, &nativeRegion);
+}
+
+__inline__ Region::Region(const Rect& rect): nativeRegion(NULL), lastStatus(Ok)
+{
+	lastStatus = DllExports::GdipCreateRegionRectI(&rect, &nativeRegion);
+}
+
+__inline__ Region::Region(const GraphicsPath *path):
+	nativeRegion(NULL), lastStatus(Ok)
+{
+	lastStatus = DllExports::GdipCreateRegionPath(
+			path ? path->nativePath : NULL, &nativeRegion);
+}
+
+__inline__ Region::Region(const BYTE *regionData, INT size):
+	nativeRegion(NULL), lastStatus(Ok)
+{
+	lastStatus = DllExports::GdipCreateRegionRgnData(
+			regionData, size, &nativeRegion);
+}
+
+__inline__ Region::Region(HRGN hrgn): nativeRegion(NULL), lastStatus(Ok)
+{
+	lastStatus = DllExports::GdipCreateRegionHrgn(hrgn, &nativeRegion);
+}
+
+__inline__ Region::~Region()
+{
+	DllExports::GdipDeleteRegion(nativeRegion);
+}
+
+__inline__ Region* Region::Clone() const
+{
+	GpRegion *cloneRegion = NULL;
+	Status status = updateStatus(DllExports::GdipCloneRegion(
+			nativeRegion, &cloneRegion));
+	if (status == Ok) {
+		Region *result = new Region(cloneRegion, lastStatus);
+		if (!result) {
+			DllExports::GdipDeleteRegion(cloneRegion);
+			lastStatus = OutOfMemory;
+		}
+		return result;
+	} else {
+		return NULL;
+	}
+}
+
+__inline__ Status Region::Complement(const RectF& rect)
+{
+	return updateStatus(DllExports::GdipCombineRegionRect(
+			nativeRegion, &rect, CombineModeComplement));
+}
+
+__inline__ Status Region::Complement(const Rect& rect)
+{
+	return updateStatus(DllExports::GdipCombineRegionRectI(
+			nativeRegion, &rect, CombineModeComplement));
+}
+
+__inline__ Status Region::Complement(const Region *region)
+{
+	return updateStatus(DllExports::GdipCombineRegionRegion(
+			nativeRegion, region ? region->nativeRegion : NULL,
+			CombineModeComplement));
+}
+
+__inline__ Status Region::Complement(const GraphicsPath *path)
+{
+	return updateStatus(DllExports::GdipCombineRegionPath(
+			nativeRegion, path ? path->nativePath : NULL,
+			CombineModeComplement));
+}
+
+__inline__ BOOL Region::Equals(const Region *region, const Graphics *graphics)
+const
+{
+	BOOL result = FALSE;
+	updateStatus(DllExports::GdipIsEqualRegion(
+			nativeRegion, region ? region->nativeRegion : NULL,
+			graphics ? graphics->nativeGraphics : NULL, &result));
+	return result;
+}
+
+__inline__ Status Region::Exclude(const RectF& rect)
+{
+	return updateStatus(DllExports::GdipCombineRegionRect(
+			nativeRegion, &rect, CombineModeExclude));
+}
+
+__inline__ Status Region::Exclude(const Rect& rect)
+{
+	return updateStatus(DllExports::GdipCombineRegionRectI(
+			nativeRegion, &rect, CombineModeExclude));
+}
+
+__inline__ Status Region::Exclude(const Region *region)
+{
+	return updateStatus(DllExports::GdipCombineRegionRegion(
+			nativeRegion, region ? region->nativeRegion : NULL,
+			CombineModeExclude));
+}
+
+__inline__ Status Region::Exclude(const GraphicsPath *path)
+{
+	return updateStatus(DllExports::GdipCombineRegionPath(
+			nativeRegion, path ? path->nativePath : NULL,
+			CombineModeExclude));
+}
+
+__inline__ Status Region::GetBounds(RectF *rect, const Graphics *graphics) const
+{
+	return updateStatus(DllExports::GdipGetRegionBounds(nativeRegion,
+			graphics ? graphics->nativeGraphics : NULL, rect));
+}
+
+__inline__ Status Region::GetBounds(Rect *rect, const Graphics *graphics) const
+{
+	return updateStatus(DllExports::GdipGetRegionBoundsI(nativeRegion,
+			graphics ? graphics->nativeGraphics : NULL, rect));
+}
+
+__inline__ Status Region::GetData(BYTE *buffer, UINT bufferSize,
+		UINT *sizeFilled) const
+{
+	return updateStatus(DllExports::GdipGetRegionData(
+			nativeRegion, buffer, bufferSize, sizeFilled));
+}
+
+__inline__ UINT Region::GetDataSize() const
+{
+	UINT result = 0;
+	updateStatus(DllExports::GdipGetRegionDataSize(nativeRegion, &result));
+	return result;
+}
+
+__inline__ HRGN Region::GetHRGN(const Graphics *graphics) const
+{
+	HRGN result = NULL;
+	updateStatus(DllExports::GdipGetRegionHRgn(nativeRegion,
+			graphics ? graphics->nativeGraphics : NULL, &result));
+	return result;
+}
+
+__inline__ Status Region::GetRegionScans(const Matrix *matrix,
+		RectF *rects, INT *count) const
+{
+	return updateStatus(DllExports::GdipGetRegionScans(
+			nativeRegion, rects, count,
+			matrix ? matrix->nativeMatrix : NULL));
+}
+
+__inline__ Status Region::GetRegionScans(const Matrix *matrix,
+		Rect *rects, INT *count) const
+{
+	return updateStatus(DllExports::GdipGetRegionScansI(
+			nativeRegion, rects, count,
+			matrix ? matrix->nativeMatrix : NULL));
+}
+
+__inline__ UINT Region::GetRegionScansCount(const Matrix *matrix) const
+{
+	UINT result = 0;
+	updateStatus(DllExports::GdipGetRegionScansCount(
+			nativeRegion, &result,
+			matrix ? matrix->nativeMatrix : NULL));
+	return result;
+}
+
+__inline__ Status Region::Intersect(const RectF& rect)
+{
+	return updateStatus(DllExports::GdipCombineRegionRect(
+			nativeRegion, &rect, CombineModeIntersect));
+}
+
+__inline__ Status Region::Intersect(const Rect& rect)
+{
+	return updateStatus(DllExports::GdipCombineRegionRectI(
+			nativeRegion, &rect, CombineModeIntersect));
+}
+
+__inline__ Status Region::Intersect(const Region *region)
+{
+	return updateStatus(DllExports::GdipCombineRegionRegion(
+			nativeRegion, region ? region->nativeRegion : NULL,
+			CombineModeIntersect));
+}
+
+__inline__ Status Region::Intersect(const GraphicsPath *path)
+{
+	return updateStatus(DllExports::GdipCombineRegionPath(
+			nativeRegion, path ? path->nativePath : NULL,
+			CombineModeIntersect));
+}
+
+__inline__ BOOL Region::IsEmpty(const Graphics *graphics) const
+{
+	BOOL result = FALSE;
+	updateStatus(DllExports::GdipIsEmptyRegion(nativeRegion,
+			graphics ? graphics->nativeGraphics : NULL, &result));
+	return result;
+}
+
+__inline__ BOOL Region::IsInfinite(const Graphics *graphics) const
+{
+	BOOL result = FALSE;
+	updateStatus(DllExports::GdipIsInfiniteRegion(nativeRegion,
+			graphics ? graphics->nativeGraphics : NULL, &result));
+	return result;
+}
+
+__inline__ BOOL Region::IsVisible(REAL x, REAL y,
+		const Graphics *graphics) const
+{
+	BOOL result = FALSE;
+	updateStatus(DllExports::GdipIsVisibleRegionPoint(
+			nativeRegion, x, y,
+			graphics ? graphics->nativeGraphics : NULL, &result));
+	return result;
+}
+
+__inline__ BOOL Region::IsVisible(INT x, INT y,
+		const Graphics *graphics) const
+{
+	BOOL result = FALSE;
+	updateStatus(DllExports::GdipIsVisibleRegionPointI(
+			nativeRegion, x, y,
+			graphics ? graphics->nativeGraphics : NULL, &result));
+	return result;
+}
+
+__inline__ BOOL Region::IsVisible(const PointF& point,
+		const Graphics *graphics) const
+{
+	BOOL result = FALSE;
+	updateStatus(DllExports::GdipIsVisibleRegionPoint(
+			nativeRegion, point.X, point.Y,
+			graphics ? graphics->nativeGraphics : NULL, &result));
+	return result;
+}
+
+__inline__ BOOL Region::IsVisible(const Point& point,
+		const Graphics *graphics) const
+{
+	BOOL result = FALSE;
+	updateStatus(DllExports::GdipIsVisibleRegionPointI(
+			nativeRegion, point.X, point.Y,
+			graphics ? graphics->nativeGraphics : NULL, &result));
+	return result;
+}
+
+__inline__ BOOL Region::IsVisible(REAL x, REAL y, REAL width, REAL height,
+		const Graphics *graphics) const
+{
+	BOOL result = FALSE;
+	updateStatus(DllExports::GdipIsVisibleRegionRect(
+			nativeRegion, x, y, width, height,
+			graphics ? graphics->nativeGraphics : NULL, &result));
+	return result;
+}
+
+__inline__ BOOL Region::IsVisible(INT x, INT y, INT width, INT height,
+		const Graphics *graphics) const
+{
+	BOOL result = FALSE;
+	updateStatus(DllExports::GdipIsVisibleRegionRectI(
+			nativeRegion, x, y, width, height,
+			graphics ? graphics->nativeGraphics : NULL, &result));
+	return result;
+}
+
+__inline__ BOOL Region::IsVisible(const RectF& rect,
+		const Graphics *graphics) const
+{
+	BOOL result = FALSE;
+	updateStatus(DllExports::GdipIsVisibleRegionRect(
+			nativeRegion, rect.X, rect.Y, rect.Width, rect.Height,
+			graphics ? graphics->nativeGraphics : NULL, &result));
+	return result;
+}
+
+__inline__ BOOL Region::IsVisible(const Rect& rect,
+		const Graphics *graphics) const
+{
+	BOOL result = FALSE;
+	updateStatus(DllExports::GdipIsVisibleRegionRectI(
+			nativeRegion, rect.X, rect.Y, rect.Width, rect.Height,
+			graphics ? graphics->nativeGraphics : NULL, &result));
+	return result;
+}
+
+__inline__ Status Region::MakeEmpty()
+{
+	return updateStatus(DllExports::GdipSetEmpty(nativeRegion));
+}
+
+__inline__ Status Region::MakeInfinite()
+{
+	return updateStatus(DllExports::GdipSetInfinite(nativeRegion));
+}
+
+__inline__ Status Region::Transform(const Matrix *matrix)
+{
+	return updateStatus(DllExports::GdipTransformRegion(
+			nativeRegion, matrix ? matrix->nativeMatrix : NULL));
+}
+
+__inline__ Status Region::Translate(REAL dx, REAL dy)
+{
+	return updateStatus(DllExports::GdipTranslateRegion(
+			nativeRegion, dx, dy));
+}
+
+__inline__ Status Region::Translate(INT dx, INT dy)
+{
+	return updateStatus(DllExports::GdipTranslateRegionI(
+			nativeRegion, dx, dy));
+}
+
+__inline__ Status Region::Union(const RectF& rect)
+{
+	return updateStatus(DllExports::GdipCombineRegionRect(
+			nativeRegion, &rect, CombineModeUnion));
+}
+
+__inline__ Status Region::Union(const Rect& rect)
+{
+	return updateStatus(DllExports::GdipCombineRegionRectI(
+			nativeRegion, &rect, CombineModeUnion));
+}
+
+__inline__ Status Region::Union(const Region *region)
+{
+	return updateStatus(DllExports::GdipCombineRegionRegion(
+			nativeRegion, region ? region->nativeRegion : NULL,
+			CombineModeUnion));
+}
+
+__inline__ Status Region::Union(const GraphicsPath *path)
+{
+	return updateStatus(DllExports::GdipCombineRegionPath(
+			nativeRegion, path ? path->nativePath : NULL,
+			CombineModeUnion));
+}
+
+__inline__ Status Region::Xor(const RectF& rect)
+{
+	return updateStatus(DllExports::GdipCombineRegionRect(
+			nativeRegion, &rect, CombineModeXor));
+}
+
+__inline__ Status Region::Xor(const Rect& rect)
+{
+	return updateStatus(DllExports::GdipCombineRegionRectI(
+			nativeRegion, &rect, CombineModeXor));
+}
+
+__inline__ Status Region::Xor(const Region *region)
+{
+	return updateStatus(DllExports::GdipCombineRegionRegion(
+			nativeRegion, region ? region->nativeRegion : NULL,
+			CombineModeXor));
+}
+
+__inline__ Status Region::Xor(const GraphicsPath *path)
+{
+	return updateStatus(DllExports::GdipCombineRegionPath(
+			nativeRegion, path ? path->nativePath : NULL,
+			CombineModeXor));
+}
+
+
+// GraphicsPath
+
+__inline__ BOOL GraphicsPath::IsOutlineVisible(REAL x, REAL y, const Pen *pen,
+		const Graphics *g) const
+{
+	BOOL result = FALSE;
+	updateStatus(DllExports::GdipIsOutlineVisiblePathPoint(
+			nativePath, x, y, pen ? pen->nativePen : NULL,
+			g ? g->nativeGraphics : NULL, &result));
+	return result;
+}
+
+__inline__ BOOL GraphicsPath::IsOutlineVisible(INT x, INT y, const Pen *pen,
+		const Graphics *g) const
+{
+	BOOL result = FALSE;
+	updateStatus(DllExports::GdipIsOutlineVisiblePathPointI(
+			nativePath, x, y, pen ? pen->nativePen : NULL,
+			g ? g->nativeGraphics : NULL, &result));
+	return result;
+}
+
+__inline__ BOOL GraphicsPath::IsOutlineVisible(const PointF& point, const Pen *pen,
+		const Graphics *g) const
+{
+	BOOL result = FALSE;
+	updateStatus(DllExports::GdipIsOutlineVisiblePathPoint(
+			nativePath, point.X, point.Y,
+			pen ? pen->nativePen : NULL,
+			g ? g->nativeGraphics : NULL, &result));
+	return result;
+}
+
+__inline__ BOOL GraphicsPath::IsOutlineVisible(const Point& point, const Pen *pen,
+		const Graphics *g) const
+{
+	BOOL result = FALSE;
+	updateStatus(DllExports::GdipIsOutlineVisiblePathPointI(
+			nativePath, point.X, point.Y,
+			pen ? pen->nativePen : NULL,
+			g ? g->nativeGraphics : NULL, &result));
+	return result;
+}
+
+__inline__ BOOL GraphicsPath::IsVisible(REAL x, REAL y, const Graphics *g) const
+{
+	BOOL result = FALSE;
+	updateStatus(DllExports::GdipIsVisiblePathPoint(
+			nativePath, x, y,
+			g ? g->nativeGraphics : NULL, &result));
+	return result;
+}
+__inline__ BOOL GraphicsPath::IsVisible(INT x, INT y, const Graphics *g) const
+{
+	BOOL result = FALSE;
+	updateStatus(DllExports::GdipIsVisiblePathPointI(
+			nativePath, x, y,
+			g ? g->nativeGraphics : NULL, &result));
+	return result;
+}
+
+__inline__ BOOL GraphicsPath::IsVisible(const PointF& point,
+		const Graphics *g) const
+{
+	BOOL result = FALSE;
+	updateStatus(DllExports::GdipIsVisiblePathPoint(
+			nativePath, point.X, point.Y,
+			g ? g->nativeGraphics : NULL, &result));
+	return result;
+}
+
+__inline__ BOOL GraphicsPath::IsVisible(const Point& point, const Graphics *g) const
+{
+	BOOL result = FALSE;
+	updateStatus(DllExports::GdipIsVisiblePathPointI(
+			nativePath, point.X, point.Y,
+			g ? g->nativeGraphics : NULL, &result));
+	return result;
+}
+
+
+// PathData
+
+__inline__ Status PathData::AllocateArrays(INT capacity)
+{
+	if (capacity < 0) {
+		return InvalidParameter;
+	} else if (Count < capacity) {
+		FreeArrays();
+
+		PointF *pointArray = (PointF*)
+			DllExports::GdipAlloc(capacity * sizeof(PointF));
+		if (!pointArray)
+			return OutOfMemory;
+
+		BYTE *typeArray = (BYTE*)
+			DllExports::GdipAlloc(capacity * sizeof(BYTE));
+		if (!typeArray) {
+			DllExports::GdipFree(pointArray);
+			return OutOfMemory;
+		}
+
+		Count = capacity;
+		Points = pointArray;
+		Types = typeArray;
+	}
+	return Ok;
+}
+
+__inline__ VOID PathData::FreeArrays()
+{
+	if (Points) DllExports::GdipFree(Points);
+	if (Types) DllExports::GdipFree(Types);
+	Count = 0;
+	Points = NULL;
+	Types = NULL;
+}
+
+#endif /* __GDIPLUS_IMPL_H */
diff --git a/mingw-w64-headers/include/gdiplus/gdiplusinit.h b/mingw-w64-headers/include/gdiplus/gdiplusinit.h
new file mode 100644
index 0000000..e9276a6
--- /dev/null
+++ b/mingw-w64-headers/include/gdiplus/gdiplusinit.h
@@ -0,0 +1,74 @@
+/*
+ * gdiplusinit.h
+ *
+ * GDI+ Initialization
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ *   Created by Markus Koenig <markus@stber-koenig.de>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __GDIPLUS_INIT_H
+#define __GDIPLUS_INIT_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+typedef struct GdiplusStartupInput {
+	UINT32 GdiplusVersion;
+	DebugEventProc DebugEventCallback;
+	BOOL SuppressBackgroundThread;
+	BOOL SuppressExternalCodecs;
+
+	#ifdef __cplusplus
+	GdiplusStartupInput(DebugEventProc debugEventCallback = NULL,
+	                    BOOL suppressBackgroundThread = FALSE,
+	                    BOOL suppressExternalCodecs = FALSE):
+		GdiplusVersion(1),
+		DebugEventCallback(debugEventCallback),
+		SuppressBackgroundThread(suppressBackgroundThread),
+		SuppressExternalCodecs(suppressExternalCodecs) {}
+	#endif /* __cplusplus */
+} GdiplusStartupInput;
+
+typedef GpStatus WINGDIPAPI (*NotificationHookProc)(ULONG_PTR *token);
+typedef VOID WINGDIPAPI (*NotificationUnhookProc)(ULONG_PTR token);
+
+typedef struct GdiplusStartupOutput {
+	NotificationHookProc NotificationHook;
+	NotificationUnhookProc NotificationUnhook;
+
+	#ifdef __cplusplus
+	GdiplusStartupOutput():
+		NotificationHook(NULL),
+		NotificationUnhook(NULL) {}
+	#endif /* __cplusplus */
+} GdiplusStartupOutput;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+GpStatus WINGDIPAPI GdiplusStartup(ULONG_PTR*,GDIPCONST GdiplusStartupInput*,GdiplusStartupOutput*);
+VOID WINGDIPAPI GdiplusShutdown(ULONG_PTR);
+GpStatus WINGDIPAPI GdiplusNotificationHook(ULONG_PTR*);
+VOID WINGDIPAPI GdiplusNotificationUnhook(ULONG_PTR);
+
+#ifdef __cplusplus
+}  /* extern "C" */
+#endif
+
+
+#endif /* __GDIPLUS_INIT_H */
diff --git a/mingw-w64-headers/include/gdiplus/gdipluslinecaps.h b/mingw-w64-headers/include/gdiplus/gdipluslinecaps.h
new file mode 100644
index 0000000..3134ede
--- /dev/null
+++ b/mingw-w64-headers/include/gdiplus/gdipluslinecaps.h
@@ -0,0 +1,131 @@
+/*
+ * gdipluslinecaps.h
+ *
+ * GDI+ AdjustableArrowCap class
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ *   Created by Markus Koenig <markus@stber-koenig.de>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __GDIPLUS_LINECAPS_H
+#define __GDIPLUS_LINECAPS_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifndef __cplusplus
+#error "A C++ compiler is required to include gdipluslinecaps.h."
+#endif
+
+class AdjustableArrowCap: public CustomLineCap
+{
+public:
+	AdjustableArrowCap(REAL height, REAL width, BOOL isFilled):
+		CustomLineCap(NULL, Ok)
+	{
+		GpAdjustableArrowCap *nativeAdjustableArrowCap = NULL;
+		lastStatus = DllExports::GdipCreateAdjustableArrowCap(
+				height, width, isFilled,
+				&nativeAdjustableArrowCap);
+		nativeCustomLineCap = nativeAdjustableArrowCap;
+	}
+	virtual ~AdjustableArrowCap()
+	{
+	}
+	virtual AdjustableArrowCap* Clone() const
+	{
+		GpCustomLineCap *cloneCustomLineCap = NULL;
+		Status status = updateStatus(DllExports::GdipCloneCustomLineCap(
+				nativeCustomLineCap, &cloneCustomLineCap));
+		if (status == Ok) {
+			AdjustableArrowCap *result = new AdjustableArrowCap(
+					cloneCustomLineCap, lastStatus);
+			if (!result) {
+				DllExports::GdipDeleteCustomLineCap(
+						cloneCustomLineCap);
+				lastStatus = OutOfMemory;
+			}
+			return result;
+		} else {
+			return NULL;
+		}
+	}
+
+	REAL GetHeight() const
+	{
+		REAL result = 0.0f;
+		updateStatus(DllExports::GdipGetAdjustableArrowCapHeight(
+				(GpAdjustableArrowCap*) nativeCustomLineCap,
+				&result));
+		return result;
+	}
+	REAL GetMiddleInset() const
+	{
+		REAL result = 0.0f;
+		updateStatus(DllExports::GdipGetAdjustableArrowCapMiddleInset(
+				(GpAdjustableArrowCap*) nativeCustomLineCap,
+				&result));
+		return result;
+	}
+	REAL GetWidth() const
+	{
+		REAL result = 0.0f;
+		updateStatus(DllExports::GdipGetAdjustableArrowCapWidth(
+				(GpAdjustableArrowCap*) nativeCustomLineCap,
+				&result));
+		return result;
+	}
+	BOOL IsFilled() const
+	{
+		BOOL result = FALSE;
+		updateStatus(DllExports::GdipGetAdjustableArrowCapFillState(
+				(GpAdjustableArrowCap*) nativeCustomLineCap,
+				&result));
+		return result;
+	}
+	Status SetFillState(BOOL isFilled)
+	{
+		return updateStatus(DllExports::GdipSetAdjustableArrowCapFillState(
+				(GpAdjustableArrowCap*) nativeCustomLineCap,
+				isFilled));
+	}
+	Status SetHeight(REAL height)
+	{
+		return updateStatus(DllExports::GdipSetAdjustableArrowCapHeight(
+				(GpAdjustableArrowCap*) nativeCustomLineCap,
+				height));
+	}
+	Status SetMiddleInset(REAL middleInset)
+	{
+		return updateStatus(DllExports::GdipSetAdjustableArrowCapMiddleInset(
+				(GpAdjustableArrowCap*) nativeCustomLineCap,
+				middleInset));
+	}
+	Status SetWidth(REAL width)
+	{
+		return updateStatus(DllExports::GdipSetAdjustableArrowCapWidth(
+				(GpAdjustableArrowCap*) nativeCustomLineCap,
+				width));
+	}
+
+private:
+	AdjustableArrowCap(GpCustomLineCap *customLineCap, Status status):
+		CustomLineCap(customLineCap, status) {}
+	AdjustableArrowCap(const AdjustableArrowCap&);
+	AdjustableArrowCap& operator=(const AdjustableArrowCap&);
+};
+
+#endif /* __GDIPLUS_LINECAPS_H */
diff --git a/mingw-w64-headers/include/gdiplus/gdiplusmatrix.h b/mingw-w64-headers/include/gdiplus/gdiplusmatrix.h
new file mode 100644
index 0000000..7eb1064
--- /dev/null
+++ b/mingw-w64-headers/include/gdiplus/gdiplusmatrix.h
@@ -0,0 +1,240 @@
+/*
+ * gdiplusmatrix.h
+ *
+ * GDI+ Matrix class
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ *   Created by Markus Koenig <markus@stber-koenig.de>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __GDIPLUS_MATRIX_H
+#define __GDIPLUS_MATRIX_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifndef __cplusplus
+#error "A C++ compiler is required to include gdiplusmatrix.h."
+#endif
+
+#define GDIP_MATRIX_PI \
+	3.1415926535897932384626433832795028841971693993751058209749445923078164
+
+class Matrix: public GdiplusBase
+{
+	friend class Graphics;
+	friend class GraphicsPath;
+	friend class LinearGradientBrush;
+	friend class PathGradientBrush;
+	friend class Pen;
+	friend class Region;
+	friend class TextureBrush;
+
+public:
+	Matrix(): nativeMatrix(NULL), lastStatus(Ok)
+	{
+		lastStatus = DllExports::GdipCreateMatrix(&nativeMatrix);
+	}
+	Matrix(REAL m11, REAL m12, REAL m21, REAL m22, REAL dx, REAL dy):
+			nativeMatrix(NULL), lastStatus(Ok)
+	{
+		lastStatus = DllExports::GdipCreateMatrix2(
+				m11, m12, m21, m22, dx, dy,
+				&nativeMatrix);
+	}
+	Matrix(const RectF& rect, const PointF *dstplg):
+			nativeMatrix(NULL), lastStatus(Ok)
+	{
+		lastStatus = DllExports::GdipCreateMatrix3(
+				&rect, dstplg, &nativeMatrix);
+	}
+	Matrix(const Rect& rect, const Point *dstplg):
+			nativeMatrix(NULL), lastStatus(Ok)
+	{
+		lastStatus = DllExports::GdipCreateMatrix3I(
+				&rect, dstplg, &nativeMatrix);
+	}
+	~Matrix()
+	{
+		DllExports::GdipDeleteMatrix(nativeMatrix);
+	}
+	Matrix* Clone() const
+	{
+		GpMatrix *cloneMatrix = NULL;
+		Status status = updateStatus(DllExports::GdipCloneMatrix(
+				nativeMatrix, &cloneMatrix));
+		if (status == Ok) {
+			Matrix *result = new Matrix(cloneMatrix, lastStatus);
+			if (!result) {
+				DllExports::GdipDeleteMatrix(cloneMatrix);
+				lastStatus = OutOfMemory;
+			}
+			return result;
+		} else {
+			return NULL;
+		}
+	}
+
+	BOOL Equals(const Matrix *matrix) const
+	{
+		BOOL result;
+		updateStatus(DllExports::GdipIsMatrixEqual(
+				nativeMatrix,
+				matrix ? matrix->nativeMatrix : NULL, &result));
+		return result;
+	}
+	Status GetElements(REAL *m) const
+	{
+		return updateStatus(DllExports::GdipGetMatrixElements(
+				nativeMatrix, m));
+	}
+	Status GetLastStatus() const
+	{
+		Status result = lastStatus;
+		lastStatus = Ok;
+		return result;
+	}
+	Status Invert()
+	{
+		return updateStatus(DllExports::GdipInvertMatrix(nativeMatrix));
+	}
+	BOOL IsIdentity() const
+	{
+		BOOL result;
+		updateStatus(DllExports::GdipIsMatrixIdentity(
+				nativeMatrix, &result));
+		return result;
+	}
+	BOOL IsInvertible() const
+	{
+		BOOL result;
+		updateStatus(DllExports::GdipIsMatrixInvertible(
+				nativeMatrix, &result));
+		return result;
+	}
+	Status Multiply(const Matrix *matrix,
+			MatrixOrder order = MatrixOrderPrepend)
+	{
+		return updateStatus(DllExports::GdipMultiplyMatrix(
+				nativeMatrix,
+				matrix ? matrix->nativeMatrix : NULL, order));
+	}
+	REAL OffsetX() const
+	{
+		REAL m[6];
+		updateStatus(DllExports::GdipGetMatrixElements(nativeMatrix, m));
+		return m[4];
+	}
+	REAL OffsetY() const
+	{
+		REAL m[6];
+		updateStatus(DllExports::GdipGetMatrixElements(nativeMatrix, m));
+		return m[5];
+	}
+	Status Reset()
+	{
+		return updateStatus(DllExports::GdipSetMatrixElements(
+				nativeMatrix,
+				1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f));
+	}
+	Status Rotate(REAL angle, MatrixOrder order = MatrixOrderPrepend)
+	{
+		return updateStatus(DllExports::GdipRotateMatrix(
+				nativeMatrix, angle, order));
+	}
+	Status RotateAt(REAL angle, const PointF& center,
+			MatrixOrder order = MatrixOrderPrepend)
+	{
+		REAL angleRadian = angle * GDIP_MATRIX_PI / 180.0f;
+		REAL cosAngle = ::cos(angleRadian);
+		REAL sinAngle = ::sin(angleRadian);
+		REAL x = center.X;
+		REAL y = center.Y;
+
+		Matrix matrix2(cosAngle, sinAngle, -sinAngle, cosAngle,
+				x * (1.0f-cosAngle) + y * sinAngle,
+				-x * sinAngle + y * (1.0f-cosAngle));
+		Status status = matrix2.GetLastStatus();
+		if (status == Ok) {
+			return Multiply(&matrix2, order);
+		} else {
+			return lastStatus = status;
+		}
+	}
+	Status Scale(REAL scaleX, REAL scaleY,
+			MatrixOrder order = MatrixOrderPrepend)
+	{
+		return updateStatus(DllExports::GdipScaleMatrix(
+				nativeMatrix, scaleX, scaleY, order));
+	}
+	Status SetElements(REAL m11, REAL m12, REAL m21, REAL m22,
+			REAL dx, REAL dy)
+	{
+		return updateStatus(DllExports::GdipSetMatrixElements(
+				nativeMatrix, m11, m12, m21, m22, dx, dy));
+	}
+	Status Shear(REAL shearX, REAL shearY,
+			MatrixOrder order = MatrixOrderPrepend)
+	{
+		return updateStatus(DllExports::GdipShearMatrix(
+				nativeMatrix, shearX, shearY, order));
+	}
+	Status TransformPoints(PointF *pts, INT count = 1) const
+	{
+		return updateStatus(DllExports::GdipTransformMatrixPoints(
+				nativeMatrix, pts, count));
+	}
+	Status TransformPoints(Point *pts, INT count = 1) const
+	{
+		return updateStatus(DllExports::GdipTransformMatrixPointsI(
+				nativeMatrix, pts, count));
+	}
+	Status TransformVectors(PointF *pts, INT count = 1) const
+	{
+		return updateStatus(DllExports::GdipVectorTransformMatrixPoints(
+				nativeMatrix, pts, count));
+	}
+	Status TransformVectors(Point *pts, INT count = 1) const
+	{
+		return updateStatus(DllExports::GdipVectorTransformMatrixPointsI(
+				nativeMatrix, pts, count));
+	}
+	Status Translate(REAL offsetX, REAL offsetY,
+			MatrixOrder order = MatrixOrderPrepend)
+	{
+		return updateStatus(DllExports::GdipTranslateMatrix(
+				nativeMatrix, offsetX, offsetY, order));
+	}
+
+private:
+	Matrix(GpMatrix *matrix, Status status):
+		nativeMatrix(matrix), lastStatus(status) {}
+	Matrix(const Matrix&);
+	Matrix& operator=(const Matrix&);
+
+	Status updateStatus(Status newStatus) const
+	{
+		if (newStatus != Ok) lastStatus = newStatus;
+		return newStatus;
+	}
+
+	GpMatrix *nativeMatrix;
+	mutable Status lastStatus;
+};
+
+#undef GDIP_MATRIX_PI
+
+#endif /* __GDIPLUS_MATRIX_H */
diff --git a/mingw-w64-headers/include/gdiplus/gdiplusmem.h b/mingw-w64-headers/include/gdiplus/gdiplusmem.h
new file mode 100644
index 0000000..51bb420
--- /dev/null
+++ b/mingw-w64-headers/include/gdiplus/gdiplusmem.h
@@ -0,0 +1,42 @@
+/*
+ * gdiplusmem.h
+ *
+ * GDI+ memory allocation
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ *   Created by Markus Koenig <markus@stber-koenig.de>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __GDIPLUS_MEM_H
+#define __GDIPLUS_MEM_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+namespace DllExports {
+extern "C" {
+#endif
+
+VOID* WINGDIPAPI GdipAlloc(size_t);
+VOID WINGDIPAPI GdipFree(VOID*);
+
+#ifdef __cplusplus
+}  /* extern "C" */
+}  /* namespace DllExports */
+#endif
+
+#endif /* __GDIPLUS_MEM_H */
diff --git a/mingw-w64-headers/include/gdiplus/gdiplusmetafile.h b/mingw-w64-headers/include/gdiplus/gdiplusmetafile.h
new file mode 100644
index 0000000..f19fb14
--- /dev/null
+++ b/mingw-w64-headers/include/gdiplus/gdiplusmetafile.h
@@ -0,0 +1,305 @@
+/*
+ * gdiplusmetafile.h
+ *
+ * GDI+ Metafile class
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ *   Created by Markus Koenig <markus@stber-koenig.de>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __GDIPLUS_METAFILE_H
+#define __GDIPLUS_METAFILE_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifndef __cplusplus
+#error "A C++ compiler is required to include gdiplusmetafile.h."
+#endif
+
+class Metafile: public Image
+{
+public:
+	static UINT EmfToWmfBits(HENHMETAFILE hEmf,
+			UINT cbData16, LPBYTE pData16,
+			INT iMapMode = MM_ANISOTROPIC,
+			EmfToWmfBitsFlags eFlags = EmfToWmfBitsFlagsDefault)
+	{
+		return DllExports::GdipEmfToWmfBits(hEmf,
+				cbData16, pData16, iMapMode, eFlags);
+	}
+	static Status GetMetafileHeader(const WCHAR *filename,
+			MetafileHeader *header)
+	{
+		return DllExports::GdipGetMetafileHeaderFromFile(
+				filename, header);
+	}
+	static Status GetMetafileHeader(IStream *stream, MetafileHeader *header)
+	{
+		return DllExports::GdipGetMetafileHeaderFromStream(
+				stream, header);
+	}
+	////TODO: Metafile::GetMetafileHeader
+	//static Status GetMetafileHeader(HMETAFILE hWmf,
+	//		const WmfPlaceableFileHeader *wmfPlaceableFileHeader,
+	//		MetafileHeader *header)
+	//{
+	//	// WTF: No flat API to do this.
+	//	return NotImplemented;
+	//}
+	static Status GetMetafileHeader(HENHMETAFILE hEmf,
+			MetafileHeader *header)
+	{
+		return DllExports::GdipGetMetafileHeaderFromEmf(hEmf, header);
+	}
+
+	Metafile(HMETAFILE hWmf,
+			const WmfPlaceableFileHeader *wmfPlaceableFileHeader,
+			BOOL deleteWmf = FALSE): Image(NULL, Ok)
+	{
+		GpMetafile *nativeMetafile = NULL;
+		lastStatus = DllExports::GdipCreateMetafileFromWmf(
+				hWmf, deleteWmf, wmfPlaceableFileHeader,
+				&nativeMetafile);
+		nativeImage = nativeMetafile;
+	}
+	Metafile(HENHMETAFILE hEmf, BOOL deleteEmf = FALSE): Image(NULL, Ok)
+	{
+		GpMetafile *nativeMetafile = NULL;
+		lastStatus = DllExports::GdipCreateMetafileFromEmf(
+				hEmf, deleteEmf, &nativeMetafile);
+		nativeImage = nativeMetafile;
+	}
+	Metafile(const WCHAR *filename): Image(NULL, Ok)
+	{
+		GpMetafile *nativeMetafile = NULL;
+		lastStatus = DllExports::GdipCreateMetafileFromFile(
+				filename, &nativeMetafile);
+		nativeImage = nativeMetafile;
+	}
+	Metafile(const WCHAR *filename,
+			const WmfPlaceableFileHeader *wmfPlaceableFileHeader):
+			Image(NULL, Ok)
+	{
+		GpMetafile *nativeMetafile = NULL;
+		lastStatus = DllExports::GdipCreateMetafileFromWmfFile(
+				filename, wmfPlaceableFileHeader,
+				&nativeMetafile);
+		nativeImage = nativeMetafile;
+	}
+	Metafile(IStream *stream): Image(NULL, Ok)
+	{
+		GpMetafile *nativeMetafile = NULL;
+		lastStatus = DllExports::GdipCreateMetafileFromStream(
+				stream, &nativeMetafile);
+		nativeImage = nativeMetafile;
+	}
+	Metafile(HDC referenceHdc, EmfType type = EmfTypeEmfPlusDual,
+			const WCHAR *description = NULL): Image(NULL, Ok)
+	{
+		GpMetafile *nativeMetafile = NULL;
+		lastStatus = DllExports::GdipRecordMetafile(
+				referenceHdc, type, NULL, MetafileFrameUnitGdi,
+				description, &nativeMetafile);
+		nativeImage = nativeMetafile;
+	}
+	Metafile(HDC referenceHdc, const RectF& frameRect,
+			MetafileFrameUnit frameUnit = MetafileFrameUnitGdi,
+			EmfType type = EmfTypeEmfPlusDual,
+			const WCHAR *description = NULL): Image(NULL, Ok)
+	{
+		GpMetafile *nativeMetafile = NULL;
+		lastStatus = DllExports::GdipRecordMetafile(
+				referenceHdc, type, &frameRect, frameUnit,
+				description, &nativeMetafile);
+		nativeImage = nativeMetafile;
+	}
+	Metafile(HDC referenceHdc, const Rect& frameRect,
+			MetafileFrameUnit frameUnit = MetafileFrameUnitGdi,
+			EmfType type = EmfTypeEmfPlusDual,
+			const WCHAR *description = NULL): Image(NULL, Ok)
+	{
+		GpMetafile *nativeMetafile = NULL;
+		lastStatus = DllExports::GdipRecordMetafileI(
+				referenceHdc, type, &frameRect, frameUnit,
+				description, &nativeMetafile);
+		nativeImage = nativeMetafile;
+	}
+	Metafile(const WCHAR *filename, HDC referenceHdc,
+			EmfType type = EmfTypeEmfPlusDual,
+			const WCHAR *description = NULL): Image(NULL, Ok)
+	{
+		GpMetafile *nativeMetafile = NULL;
+		lastStatus = DllExports::GdipRecordMetafileFileName(
+				filename, referenceHdc, type, NULL,
+				MetafileFrameUnitGdi, description,
+				&nativeMetafile);
+		nativeImage = nativeMetafile;
+	}
+	Metafile(const WCHAR *filename, HDC referenceHdc,
+			const RectF& frameRect,
+			MetafileFrameUnit frameUnit = MetafileFrameUnitGdi,
+			EmfType type = EmfTypeEmfPlusDual,
+			const WCHAR *description = NULL): Image(NULL, Ok)
+	{
+		GpMetafile *nativeMetafile = NULL;
+		lastStatus = DllExports::GdipRecordMetafileFileName(
+				filename, referenceHdc, type, &frameRect,
+				frameUnit, description, &nativeMetafile);
+		nativeImage = nativeMetafile;
+	}
+	Metafile(const WCHAR *filename, HDC referenceHdc,
+			const Rect& frameRect,
+			MetafileFrameUnit frameUnit = MetafileFrameUnitGdi,
+			EmfType type = EmfTypeEmfPlusDual,
+			const WCHAR *description = NULL): Image(NULL, Ok)
+	{
+		GpMetafile *nativeMetafile = NULL;
+		lastStatus = DllExports::GdipRecordMetafileFileNameI(
+				filename, referenceHdc, type, &frameRect,
+				frameUnit, description, &nativeMetafile);
+		nativeImage = nativeMetafile;
+	}
+	Metafile(IStream *stream, HDC referenceHdc,
+			EmfType type = EmfTypeEmfPlusDual,
+			const WCHAR *description = NULL): Image(NULL, Ok)
+	{
+		GpMetafile *nativeMetafile = NULL;
+		lastStatus = DllExports::GdipRecordMetafileStream(
+				stream, referenceHdc, type, NULL,
+				MetafileFrameUnitGdi, description,
+				&nativeMetafile);
+		nativeImage = nativeMetafile;
+	}
+	Metafile(IStream *stream, HDC referenceHdc, const RectF& frameRect,
+			MetafileFrameUnit frameUnit = MetafileFrameUnitGdi,
+			EmfType type = EmfTypeEmfPlusDual,
+			const WCHAR *description = NULL): Image(NULL, Ok)
+	{
+		GpMetafile *nativeMetafile = NULL;
+		lastStatus = DllExports::GdipRecordMetafileStream(
+				stream, referenceHdc, type, &frameRect,
+				frameUnit, description, &nativeMetafile);
+		nativeImage = nativeMetafile;
+	}
+	Metafile(IStream *stream, HDC referenceHdc, const Rect& frameRect,
+			MetafileFrameUnit frameUnit = MetafileFrameUnitGdi,
+			EmfType type = EmfTypeEmfPlusDual,
+			const WCHAR *description = NULL): Image(NULL, Ok)
+	{
+		GpMetafile *nativeMetafile = NULL;
+		lastStatus = DllExports::GdipRecordMetafileStreamI(
+				stream, referenceHdc, type, &frameRect,
+				frameUnit, description, &nativeMetafile);
+		nativeImage = nativeMetafile;
+	}
+	virtual ~Metafile()
+	{
+	}
+	virtual Metafile* Clone() const
+	{
+		GpImage *cloneImage = NULL;
+		Status status = updateStatus(DllExports::GdipCloneImage(
+				nativeImage, &cloneImage));
+		if (status == Ok) {
+			Metafile *result = new Metafile(cloneImage, lastStatus);
+			if (!result) {
+				DllExports::GdipDisposeImage(cloneImage);
+				lastStatus = OutOfMemory;
+			}
+			return result;
+		} else {
+			return NULL;
+		}
+	}
+
+	////TODO: [GDI+ 1.1] Metafile::ConvertToEmfPlus
+	//Status ConvertToEmfPlus(const Graphics *refGraphics,
+	//		BOOL *conversionSuccess = NULL,
+	//		EmfType emfType = EmfTypeEmfPlusOnly,
+	//		const WCHAR *description = NULL)
+	//{
+	//	// FIXME: can't test GdipConvertToEmfPlus because it isn't exported in 1.0
+	//	return updateStatus(DllExports::GdipConvertToEmfPlus(
+	//			refGraphics ? refGraphics->nativeGraphics : NULL,
+	//			(GpMetafile*) nativeImage,
+	//			conversionSuccess, emfType, description, ???));
+	//}
+	////TODO: [GDI+ 1.1] Metafile::ConvertToEmfPlus
+	//Status ConvertToEmfPlus(const Graphics *refGraphics,
+	//		const WCHAR *filename,
+	//		BOOL *conversionSuccess = NULL,
+	//		EmfType emfType = EmfTypeEmfPlusOnly,
+	//		const WCHAR *description = NULL)
+	//{
+	//	// FIXME: can't test GdipConvertToEmfPlusToFile because it isn't exported in 1.0
+	//	return updateStatus(DllExports::GdipConvertToEmfPlusToFile(
+	//			refGraphics ? refGraphics->nativeGraphics : NULL,
+	//			(GpMetafile*) nativeImage, conversionSuccess,
+	//			filename, emfType, description, ???));
+	//}
+	////TODO: [GDI+ 1.1] Metafile::ConvertToEmfPlus
+	//Status ConvertToEmfPlus(const Graphics *refGraphics,
+	//		IStream *stream,
+	//		BOOL *conversionSuccess = NULL,
+	//		EmfType emfType = EmfTypeEmfPlusOnly,
+	//		const WCHAR *description = NULL)
+	//{
+	//	// FIXME: can't test GdipConvertToEmfPlusToStream because it isn't exported in 1.0
+	//	return updateStatus(DllExports::GdipConvertToEmfPlusToStream(
+	//			refGraphics ? refGraphics->nativeGraphics : NULL,
+	//			(GpMetafile*) nativeImage, conversionSuccess,
+	//			stream, emfType, description, ???));
+	//}
+	UINT GetDownLevelRasterizationLimit() const
+	{
+		UINT result = 0;
+		updateStatus(DllExports::GdipGetMetafileDownLevelRasterizationLimit(
+				(GpMetafile*) nativeImage, &result));
+		return result;
+	}
+	HENHMETAFILE GetHENHMETAFILE()
+	{
+		HENHMETAFILE result = NULL;
+		updateStatus(DllExports::GdipGetHemfFromMetafile(
+				(GpMetafile*) nativeImage, &result));
+		return result;
+	}
+	Status GetMetafileHeader(MetafileHeader *header) const
+	{
+		return updateStatus(DllExports::GdipGetMetafileHeaderFromMetafile(
+				(GpMetafile*) nativeImage, header));
+	}
+	Status PlayRecord(EmfPlusRecordType recordType, UINT flags,
+			UINT dataSize, const BYTE *data) const
+	{
+		return updateStatus(DllExports::GdipPlayMetafileRecord(
+				(GpMetafile*) nativeImage,
+				recordType, flags, dataSize, data));
+	}
+	Status SetDownLevelRasterizationLimit(UINT limitDpi)
+	{
+		return updateStatus(DllExports::GdipSetMetafileDownLevelRasterizationLimit(
+				(GpMetafile*) nativeImage, limitDpi));
+	}
+
+private:
+	Metafile(GpImage *image, Status status): Image(image, status) {}
+	Metafile(const Metafile&);
+	Metafile& operator=(const Metafile&);
+};
+
+#endif /* __GDIPLUS_METAFILE_H */
diff --git a/mingw-w64-headers/include/gdiplus/gdiplusmetaheader.h b/mingw-w64-headers/include/gdiplus/gdiplusmetaheader.h
new file mode 100644
index 0000000..499d7a9
--- /dev/null
+++ b/mingw-w64-headers/include/gdiplus/gdiplusmetaheader.h
@@ -0,0 +1,193 @@
+/*
+ * gdiplusmetaheader.h
+ *
+ * GDI+ metafile header structure
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ *   Created by Markus Koenig <markus@stber-koenig.de>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __GDIPLUS_METAHEADER_H
+#define __GDIPLUS_METAHEADER_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+
+/*
+ * FIXME: is 1 the correct value for GDIP_EMFPLUSFLAGS_DISPLAY? This number
+ * has been determined by calling Metafile::GetMetafileHeader() on a EMF+
+ * metafile which was recorded on a display device context (SampleMetafile.emf).
+ */
+#ifdef __cplusplus
+const UINT GDIP_EMFPLUSFLAGS_DISPLAY = 1;
+#else
+#define GDIP_EMFPLUSFLAGS_DISPLAY ((UINT) 1)
+#endif
+
+typedef struct tagENHMETAHEADER3 {
+	DWORD iType;
+	DWORD nSize;
+	RECTL rclBounds;
+	RECTL rclFrame;
+	DWORD dSignature;
+	DWORD nVersion;
+	DWORD nBytes;
+	DWORD nRecords;
+	WORD nHandles;
+	WORD sReserved;
+	DWORD nDescription;
+	DWORD offDescription;
+	DWORD nPalEntries;
+	SIZEL szlDevice;
+	SIZEL szlMillimeters;
+} ENHMETAHEADER3,*LPENHMETAHEADER3;
+
+typedef struct PWMFRect16 {
+	INT16 Left;
+	INT16 Top;
+	INT16 Right;
+	INT16 Bottom;
+} PWMFRect16;
+
+typedef struct WmfPlaceableFileHeader {
+	UINT32 Key;
+	INT16 Hmf;
+	PWMFRect16 BoundingBox;
+	INT16 Inch;
+	UINT32 Reserved;
+	INT16 Checksum;
+} WmfPlaceableFileHeader;
+
+typedef struct MetafileHeader {
+	MetafileType Type;
+	UINT Size;
+	UINT Version;
+	UINT EmfPlusFlags;
+	REAL DpiX;
+	REAL DpiY;
+	INT X;
+	INT Y;
+	INT Width;
+	INT Height;
+	__extension__ union {
+		METAHEADER WmfHeader;
+		ENHMETAHEADER3 EmfHeader;
+	};
+	INT EmfPlusHeaderSize;
+	INT LogicalDpiX;
+	INT LogicalDpiY;
+
+	#ifdef __cplusplus
+	public:
+	void GetBounds(Rect *rect) const
+	{
+		if (rect)
+		{
+			rect->X = X;
+			rect->Y = Y;
+			rect->Width = Width;
+			rect->Height = Height;
+		}
+	}
+	REAL GetDpiX() const
+	{
+		return DpiX;
+	}
+	REAL GetDpiY() const
+	{
+		return DpiY;
+	}
+	const ENHMETAHEADER3* GetEmfHeader() const
+	{
+		if (Type == MetafileTypeEmf
+				|| Type == MetafileTypeEmfPlusOnly
+				|| Type == MetafileTypeEmfPlusDual)
+		{
+			return &EmfHeader;
+		}
+		else
+		{
+			return NULL;
+		}
+	}
+	UINT GetEmfPlusFlags() const
+	{
+		return EmfPlusFlags;
+	}
+	UINT GetMetafileSize() const
+	{
+		return Size;
+	}
+	MetafileType GetType() const
+	{
+		return Type;
+	}
+	UINT GetVersion() const
+	{
+		return Version;
+	}
+	const METAHEADER* GetWmfHeader() const
+	{
+		if (Type == MetafileTypeWmf || Type == MetafileTypeWmfPlaceable)
+		{
+			return &WmfHeader;
+		}
+		else
+		{
+			return NULL;
+		}
+	}
+	BOOL IsDisplay() const
+	{
+		return EmfPlusFlags == GDIP_EMFPLUSFLAGS_DISPLAY;
+	}
+	BOOL IsEmf() const
+	{
+		return Type == MetafileTypeEmf;
+	}
+	BOOL IsEmfOrEmfPlus() const
+	{
+		return Type == MetafileTypeEmf
+			|| Type == MetafileTypeEmfPlusOnly
+			|| Type == MetafileTypeEmfPlusDual;
+	}
+	BOOL IsEmfPlus() const
+	{
+		return Type == MetafileTypeEmfPlusOnly
+			|| Type == MetafileTypeEmfPlusDual;
+	}
+	BOOL IsEmfPlusDual() const
+	{
+		return Type == MetafileTypeEmfPlusDual;
+	}
+	BOOL IsEmfPlusOnly() const
+	{
+		return Type == MetafileTypeEmfPlusOnly;
+	}
+	BOOL IsWmf() const
+	{
+		return Type == MetafileTypeWmf
+			|| Type == MetafileTypeWmfPlaceable;
+	}
+	BOOL IsWmfPlaceable() const
+	{
+		return Type == MetafileTypeWmfPlaceable;
+	}
+	#endif
+} MetafileHeader;
+
+#endif /* __GDIPLUS_METAHEADER_H */
diff --git a/mingw-w64-headers/include/gdiplus/gdipluspath.h b/mingw-w64-headers/include/gdiplus/gdipluspath.h
new file mode 100644
index 0000000..393d917
--- /dev/null
+++ b/mingw-w64-headers/include/gdiplus/gdipluspath.h
@@ -0,0 +1,964 @@
+/*
+ * gdipluspath.h
+ *
+ * GDI+ GraphicsPath class
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ *   Created by Markus Koenig <markus@stber-koenig.de>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __GDIPLUS_PATH_H
+#define __GDIPLUS_PATH_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifndef __cplusplus
+#error "A C++ compiler is required to include gdipluspath.h."
+#endif
+
+// Note that some methods of GraphicsPath are implemented in gdiplusimpl.h.
+// This avoids a cyclic dependency on Graphics and Pen.
+
+class GraphicsPath: public GdiplusBase
+{
+	friend class CustomLineCap;
+	friend class Graphics;
+	friend class GraphicsPathIterator;
+	friend class PathGradientBrush;
+	friend class Region;
+
+public:
+	GraphicsPath(FillMode fillMode = FillModeAlternate):
+			nativePath(NULL), lastStatus(Ok)
+	{
+		lastStatus = DllExports::GdipCreatePath(fillMode, &nativePath);
+	}
+	GraphicsPath(const PointF *points, const BYTE *types, INT count,
+			FillMode fillMode = FillModeAlternate):
+			nativePath(NULL), lastStatus(Ok)
+	{
+		lastStatus = DllExports::GdipCreatePath2(
+				points, types, count, fillMode, &nativePath);
+	}
+	GraphicsPath(const Point *points, const BYTE *types, INT count,
+			FillMode fillMode = FillModeAlternate):
+			nativePath(NULL), lastStatus(Ok)
+	{
+		lastStatus = DllExports::GdipCreatePath2I(
+				points, types, count, fillMode, &nativePath);
+	}
+	~GraphicsPath()
+	{
+		DllExports::GdipDeletePath(nativePath);
+	}
+	GraphicsPath* Clone() const
+	{
+		GpPath *clonePath = NULL;
+		Status status = updateStatus(DllExports::GdipClonePath(
+				nativePath, &clonePath));
+		if (status == Ok) {
+			GraphicsPath *result = new GraphicsPath(clonePath, lastStatus);
+			if (!result) {
+				DllExports::GdipDeletePath(clonePath);
+				lastStatus = OutOfMemory;
+			}
+			return result;
+		} else {
+			return NULL;
+		}
+	}
+
+	Status AddArc(REAL x, REAL y, REAL width, REAL height,
+			REAL startAngle, REAL sweepAngle)
+	{
+		return updateStatus(DllExports::GdipAddPathArc(nativePath,
+				x, y, width, height, startAngle, sweepAngle));
+	}
+	Status AddArc(INT x, INT y, INT width, INT height,
+			REAL startAngle, REAL sweepAngle)
+	{
+		return updateStatus(DllExports::GdipAddPathArcI(nativePath,
+				x, y, width, height, startAngle, sweepAngle));
+	}
+	Status AddArc(const RectF& rect, REAL startAngle, REAL sweepAngle)
+	{
+		return updateStatus(DllExports::GdipAddPathArc(nativePath,
+				rect.X, rect.Y, rect.Width, rect.Height,
+				startAngle, sweepAngle));
+	}
+	Status AddArc(const Rect& rect, REAL startAngle, REAL sweepAngle)
+	{
+		return updateStatus(DllExports::GdipAddPathArcI(nativePath,
+				rect.X, rect.Y, rect.Width, rect.Height,
+				startAngle, sweepAngle));
+	}
+	Status AddBezier(REAL x1, REAL y1, REAL x2, REAL y2,
+			REAL x3, REAL y3, REAL x4, REAL y4)
+	{
+		return updateStatus(DllExports::GdipAddPathBezier(nativePath,
+				x1, y1, x2, y2, x3, y3, x4, y4));
+	}
+	Status AddBezier(INT x1, INT y1, INT x2, INT y2,
+			INT x3, INT y3, INT x4, INT y4)
+	{
+		return updateStatus(DllExports::GdipAddPathBezierI(nativePath,
+				x1, y1, x2, y2, x3, y3, x4, y4));
+	}
+	Status AddBezier(const PointF& pt1, const PointF& pt2,
+			const PointF& pt3, const PointF& pt4)
+	{
+		return updateStatus(DllExports::GdipAddPathBezier(nativePath,
+				pt1.X, pt1.Y, pt2.X, pt2.Y,
+				pt3.X, pt3.Y, pt4.X, pt4.Y));
+	}
+	Status AddBezier(const Point& pt1, const Point& pt2,
+			const Point& pt3, const Point& pt4)
+	{
+		return updateStatus(DllExports::GdipAddPathBezierI(nativePath,
+				pt1.X, pt1.Y, pt2.X, pt2.Y,
+				pt3.X, pt3.Y, pt4.X, pt4.Y));
+	}
+	Status AddBeziers(const PointF *points, INT count)
+	{
+		return updateStatus(DllExports::GdipAddPathBeziers(
+				nativePath, points, count));
+	}
+	Status AddBeziers(const Point *points, INT count)
+	{
+		return updateStatus(DllExports::GdipAddPathBeziersI(
+				nativePath, points, count));
+	}
+	Status AddClosedCurve(const PointF *points, INT count)
+	{
+		return updateStatus(DllExports::GdipAddPathClosedCurve(
+				nativePath, points, count));
+	}
+	Status AddClosedCurve(const Point *points, INT count)
+	{
+		return updateStatus(DllExports::GdipAddPathClosedCurveI(
+				nativePath, points, count));
+	}
+	Status AddClosedCurve(const PointF *points, INT count, REAL tension)
+	{
+		return updateStatus(DllExports::GdipAddPathClosedCurve2(
+				nativePath, points, count, tension));
+	}
+	Status AddClosedCurve(const Point *points, INT count, REAL tension)
+	{
+		return updateStatus(DllExports::GdipAddPathClosedCurve2I(
+				nativePath, points, count, tension));
+	}
+	Status AddCurve(const PointF *points, INT count)
+	{
+		return updateStatus(DllExports::GdipAddPathCurve(
+				nativePath, points, count));
+	}
+	Status AddCurve(const Point *points, INT count)
+	{
+		return updateStatus(DllExports::GdipAddPathCurveI(
+				nativePath, points, count));
+	}
+	Status AddCurve(const PointF *points, INT count, REAL tension)
+	{
+		return updateStatus(DllExports::GdipAddPathCurve2(
+				nativePath, points, count, tension));
+	}
+	Status AddCurve(const Point *points, INT count, REAL tension)
+	{
+		return updateStatus(DllExports::GdipAddPathCurve2I(
+				nativePath, points, count, tension));
+	}
+	Status AddCurve(const PointF *points, INT count, INT offset,
+			INT numberOfSegments, REAL tension)
+	{
+		return updateStatus(DllExports::GdipAddPathCurve3(
+				nativePath, points, count,
+				offset, numberOfSegments, tension));
+	}
+	Status AddCurve(const Point *points, INT count, INT offset,
+			INT numberOfSegments, REAL tension)
+	{
+		return updateStatus(DllExports::GdipAddPathCurve3I(
+				nativePath, points, count,
+				offset, numberOfSegments, tension));
+	}
+	Status AddEllipse(REAL x, REAL y, REAL width, REAL height)
+	{
+		return updateStatus(DllExports::GdipAddPathEllipse(nativePath,
+				x, y, width, height));
+	}
+	Status AddEllipse(INT x, INT y, INT width, INT height)
+	{
+		return updateStatus(DllExports::GdipAddPathEllipseI(nativePath,
+				x, y, width, height));
+	}
+	Status AddEllipse(const RectF& rect)
+	{
+		return updateStatus(DllExports::GdipAddPathEllipse(nativePath,
+				rect.X, rect.Y, rect.Width, rect.Height));
+	}
+	Status AddEllipse(const Rect& rect)
+	{
+		return updateStatus(DllExports::GdipAddPathEllipseI(nativePath,
+				rect.X, rect.Y, rect.Width, rect.Height));
+	}
+	Status AddLine(REAL x1, REAL y1, REAL x2, REAL y2)
+	{
+		return updateStatus(DllExports::GdipAddPathLine(nativePath,
+				x1, y1, x2, y2));
+	}
+	Status AddLine(INT x1, INT y1, INT x2, INT y2)
+	{
+		return updateStatus(DllExports::GdipAddPathLineI(nativePath,
+				x1, y1, x2, y2));
+	}
+	Status AddLine(const PointF& pt1, const PointF& pt2)
+	{
+		return updateStatus(DllExports::GdipAddPathLine(nativePath,
+				pt1.X, pt1.Y, pt2.X, pt2.Y));
+	}
+	Status AddLine(const Point& pt1, const Point& pt2)
+	{
+		return updateStatus(DllExports::GdipAddPathLineI(nativePath,
+				pt1.X, pt1.Y, pt2.X, pt2.Y));
+	}
+	Status AddLines(const PointF *points, INT count)
+	{
+		return updateStatus(DllExports::GdipAddPathLine2(nativePath,
+				points, count));
+	}
+	Status AddLines(const Point *points, INT count)
+	{
+		return updateStatus(DllExports::GdipAddPathLine2I(nativePath,
+				points, count));
+	}
+	Status AddPath(const GraphicsPath *addingPath, BOOL connect)
+	{
+		return updateStatus(DllExports::GdipAddPathPath(nativePath,
+				addingPath ? addingPath->nativePath : NULL,
+				connect));
+	}
+	Status AddPie(REAL x, REAL y, REAL width, REAL height,
+			REAL startAngle, REAL sweepAngle)
+	{
+		return updateStatus(DllExports::GdipAddPathPie(nativePath,
+				x, y, width, height, startAngle, sweepAngle));
+	}
+	Status AddPie(INT x, INT y, INT width, INT height,
+			REAL startAngle, REAL sweepAngle)
+	{
+		return updateStatus(DllExports::GdipAddPathPieI(nativePath,
+				x, y, width, height, startAngle, sweepAngle));
+	}
+	Status AddPie(const RectF& rect, REAL startAngle, REAL sweepAngle)
+	{
+		return updateStatus(DllExports::GdipAddPathPie(nativePath,
+				rect.X, rect.Y, rect.Width, rect.Height,
+				startAngle, sweepAngle));
+	}
+	Status AddPie(const Rect& rect, REAL startAngle, REAL sweepAngle)
+	{
+		return updateStatus(DllExports::GdipAddPathPieI(nativePath,
+				rect.X, rect.Y, rect.Width, rect.Height,
+				startAngle, sweepAngle));
+	}
+	Status AddPolygon(const PointF *points, INT count)
+	{
+		return updateStatus(DllExports::GdipAddPathPolygon(nativePath,
+				points, count));
+	}
+	Status AddPolygon(const Point *points, INT count)
+	{
+		return updateStatus(DllExports::GdipAddPathPolygonI(nativePath,
+				points, count));
+	}
+	Status AddRectangle(const RectF& rect)
+	{
+		return updateStatus(DllExports::GdipAddPathRectangle(nativePath,
+				rect.X, rect.Y, rect.Width, rect.Height));
+	}
+	Status AddRectangle(const Rect& rect)
+	{
+		return updateStatus(DllExports::GdipAddPathRectangleI(
+				nativePath,
+				rect.X, rect.Y, rect.Width, rect.Height));
+	}
+	Status AddRectangles(const RectF *rects, INT count)
+	{
+		return updateStatus(DllExports::GdipAddPathRectangles(
+				nativePath, rects, count));
+	}
+	Status AddRectangles(const Rect *rects, INT count)
+	{
+		return updateStatus(DllExports::GdipAddPathRectanglesI(
+				nativePath, rects, count));
+	}
+	Status AddString(const WCHAR *string, INT length,
+			const FontFamily *family, INT style, REAL emSize,
+			const PointF& origin, const StringFormat *format)
+	{
+		RectF layoutRect(origin, SizeF(0.0f, 0.0f));
+		return updateStatus(DllExports::GdipAddPathString(nativePath,
+				string, length,
+				family ? family->nativeFontFamily : NULL,
+				style, emSize, &layoutRect,
+				format ? format->nativeStringFormat : NULL));
+	}
+	Status AddString(const WCHAR *string, INT length,
+			const FontFamily *family, INT style, REAL emSize,
+			const Point& origin, const StringFormat *format)
+	{
+		Rect layoutRect(origin, Size(0, 0));
+		return updateStatus(DllExports::GdipAddPathStringI(nativePath,
+				string, length,
+				family ? family->nativeFontFamily : NULL,
+				style, emSize, &layoutRect,
+				format ? format->nativeStringFormat : NULL));
+	}
+	Status AddString(const WCHAR *string, INT length,
+			const FontFamily *family, INT style, REAL emSize,
+			const RectF& layoutRect, const StringFormat *format)
+	{
+		return updateStatus(DllExports::GdipAddPathString(nativePath,
+				string, length,
+				family ? family->nativeFontFamily : NULL,
+				style, emSize, &layoutRect,
+				format ? format->nativeStringFormat : NULL));
+	}
+	Status AddString(const WCHAR *string, INT length,
+			const FontFamily *family, INT style, REAL emSize,
+			const Rect& layoutRect, const StringFormat *format)
+	{
+		return updateStatus(DllExports::GdipAddPathStringI(nativePath,
+				string, length,
+				family ? family->nativeFontFamily : NULL,
+				style, emSize, &layoutRect,
+				format ? format->nativeStringFormat : NULL));
+	}
+	Status ClearMarkers()
+	{
+		return updateStatus(DllExports::GdipClearPathMarkers(
+				nativePath));
+	}
+	Status CloseAllFigures()
+	{
+		return updateStatus(DllExports::GdipClosePathFigures(
+				nativePath));
+	}
+	Status CloseFigure()
+	{
+		return updateStatus(DllExports::GdipClosePathFigure(
+				nativePath));
+	}
+	Status Flatten(const Matrix *matrix = NULL,
+			REAL flatness = FlatnessDefault)
+	{
+		return updateStatus(DllExports::GdipFlattenPath(nativePath,
+				matrix ? matrix->nativeMatrix : NULL,
+				flatness));
+	}
+	Status GetBounds(RectF *bounds, const Matrix *matrix = NULL,
+			const Pen *pen = NULL) const
+	{
+		return updateStatus(DllExports::GdipGetPathWorldBounds(
+				nativePath, bounds,
+				matrix ? matrix->nativeMatrix : NULL,
+				pen ? pen->nativePen : NULL));
+	}
+	Status GetBounds(Rect *bounds, const Matrix *matrix = NULL,
+			const Pen *pen = NULL) const
+	{
+		return updateStatus(DllExports::GdipGetPathWorldBoundsI(
+				nativePath, bounds,
+				matrix ? matrix->nativeMatrix : NULL,
+				pen ? pen->nativePen : NULL));
+	}	
+	FillMode GetFillMode() const
+	{
+		FillMode result = FillModeAlternate;
+		updateStatus(DllExports::GdipGetPathFillMode(nativePath,
+				&result));
+		return result;
+	}
+	Status GetLastPoint(PointF *lastPoint) const
+	{
+		return updateStatus(DllExports::GdipGetPathLastPoint(
+				nativePath, lastPoint));
+	}
+	Status GetLastStatus() const
+	{
+		Status result = lastStatus;
+		lastStatus = Ok;
+		return result;
+	}
+	Status GetPathData(PathData *pathData) const
+	{
+		if (!pathData) return lastStatus = InvalidParameter;
+
+		Status status;
+		INT count;
+
+		status = updateStatus(DllExports::GdipGetPointCount(
+				nativePath, &count));
+		if (status != Ok) return status;
+
+		status = updateStatus(pathData->AllocateArrays(count));
+		if (status != Ok) return status;
+
+		return updateStatus(DllExports::GdipGetPathData(
+				nativePath, (GpPathData*) pathData));
+	}
+	Status GetPathPoints(PointF *points, INT count) const
+	{
+		return updateStatus(DllExports::GdipGetPathPoints(nativePath,
+				points, count));
+	}
+	Status GetPathPoints(Point *points, INT count) const
+	{
+		return updateStatus(DllExports::GdipGetPathPointsI(nativePath,
+				points, count));
+	}
+	Status GetPathTypes(BYTE *types, INT count) const
+	{
+		return updateStatus(DllExports::GdipGetPathTypes(nativePath,
+				types, count));
+	}
+	INT GetPointCount() const
+	{
+		INT result = 0;
+		updateStatus(DllExports::GdipGetPointCount(nativePath,
+				&result));
+		return result;
+	}
+	BOOL IsOutlineVisible(REAL x, REAL y, const Pen *pen,
+			const Graphics *g = NULL) const;
+	BOOL IsOutlineVisible(INT x, INT y, const Pen *pen,
+			const Graphics *g = NULL) const;
+	BOOL IsOutlineVisible(const PointF& point, const Pen *pen,
+			const Graphics *g = NULL) const;
+	BOOL IsOutlineVisible(const Point& point, const Pen *pen,
+			const Graphics *g = NULL) const;
+	BOOL IsVisible(REAL x, REAL y, const Graphics *g = NULL) const;
+	BOOL IsVisible(INT x, INT y, const Graphics *g = NULL) const;
+	BOOL IsVisible(const PointF& point, const Graphics *g = NULL) const;
+	BOOL IsVisible(const Point& point, const Graphics *g = NULL) const;
+	Status Outline(const Matrix *matrix = NULL,
+			REAL flatness = FlatnessDefault)
+	{
+		return updateStatus(DllExports::GdipWindingModeOutline(
+				nativePath,
+				matrix ? matrix->nativeMatrix : NULL,
+				flatness));
+	}
+	Status Reset()
+	{
+		return updateStatus(DllExports::GdipResetPath(nativePath));
+	}
+	Status Reverse()
+	{
+		return updateStatus(DllExports::GdipReversePath(nativePath));
+	}
+	Status SetFillMode(FillMode fillMode)
+	{
+		return updateStatus(DllExports::GdipSetPathFillMode(
+				nativePath, fillMode));
+	}
+	Status SetMarker()
+	{
+		return updateStatus(DllExports::GdipSetPathMarker(nativePath));
+	}
+	Status StartFigure()
+	{
+		return updateStatus(DllExports::GdipStartPathFigure(
+				nativePath));
+	}
+	Status Transform(const Matrix *matrix)
+	{
+		return updateStatus(DllExports::GdipTransformPath(
+				nativePath,
+				matrix ? matrix->nativeMatrix : NULL));
+	}
+	Status Warp(const PointF *destPoints, INT count, const RectF& srcRect,
+			const Matrix *matrix = NULL,
+			WarpMode warpMode = WarpModePerspective,
+			REAL flatness = FlatnessDefault)
+	{
+		return updateStatus(DllExports::GdipWarpPath(nativePath,
+				matrix ? matrix->nativeMatrix : NULL,
+				destPoints, count,
+				srcRect.X, srcRect.Y,
+				srcRect.Width, srcRect.Height,
+				warpMode, flatness));
+	}
+	Status Widen(const Pen *pen, const Matrix *matrix = NULL,
+			REAL flatness = FlatnessDefault)
+	{
+		return updateStatus(DllExports::GdipWidenPath(nativePath,
+				pen ? pen->nativePen : NULL,
+				matrix ? matrix->nativeMatrix : NULL,
+				flatness));
+	}
+
+private:
+	GraphicsPath(GpPath *path, Status status):
+		nativePath(path), lastStatus(status) {}
+	GraphicsPath(const GraphicsPath&);
+	GraphicsPath& operator=(const GraphicsPath&);
+
+	Status updateStatus(Status newStatus) const
+	{
+		if (newStatus != Ok) lastStatus = newStatus;
+		return newStatus;
+	}
+
+	GpPath *nativePath;
+	mutable Status lastStatus;
+};
+
+class GraphicsPathIterator: public GdiplusBase
+{
+public:
+	GraphicsPathIterator(GraphicsPath *path):
+		nativePathIterator(NULL), lastStatus(Ok)
+	{
+		lastStatus = DllExports::GdipCreatePathIter(
+				&nativePathIterator,
+				path ? path->nativePath : NULL);
+	}
+	~GraphicsPathIterator()
+	{
+		DllExports::GdipDeletePathIter(nativePathIterator);
+	}
+
+	INT CopyData(PointF *points, BYTE *types, INT startIndex, INT endIndex)
+	{
+		INT result = 0;
+		updateStatus(DllExports::GdipPathIterCopyData(
+				nativePathIterator, &result,
+				points, types, startIndex, endIndex));
+		return result;
+	}
+	INT Enumerate(PointF *points, BYTE *types, INT count)
+	{
+		INT result = 0;
+		updateStatus(DllExports::GdipPathIterEnumerate(
+				nativePathIterator, &result,
+				points, types, count));
+		return result;
+	}
+	INT GetCount() const
+	{
+		INT result = 0;
+		updateStatus(DllExports::GdipPathIterGetCount(
+				nativePathIterator, &result));
+		return result;
+	}
+	Status GetLastStatus() const
+	{
+		Status result = lastStatus;
+		lastStatus = Ok;
+		return result;
+	}
+	INT GetSubpathCount() const
+	{
+		INT result = 0;
+		updateStatus(DllExports::GdipPathIterGetSubpathCount(
+				nativePathIterator, &result));
+		return result;
+	}
+	BOOL HasCurve() const
+	{
+		BOOL result = FALSE;
+		updateStatus(DllExports::GdipPathIterHasCurve(
+				nativePathIterator, &result));
+		return result;
+	}
+	INT NextMarker(INT *startIndex, INT *endIndex)
+	{
+		INT result = 0;
+		updateStatus(DllExports::GdipPathIterNextMarker(
+				nativePathIterator, &result,
+				startIndex, endIndex));
+		return result;
+	}
+	INT NextMarker(GraphicsPath *path)
+	{
+		INT result = 0;
+		updateStatus(DllExports::GdipPathIterNextMarkerPath(
+				nativePathIterator, &result,
+				path ? path->nativePath : NULL));
+		return result;
+	}
+	INT NextPathType(BYTE *pathType, INT *startIndex, INT *endIndex)
+	{
+		INT result = 0;
+		updateStatus(DllExports::GdipPathIterNextPathType(
+				nativePathIterator, &result,
+				pathType, startIndex, endIndex));
+		return result;
+	}
+	INT NextSubpath(INT *startIndex, INT *endIndex, BOOL *isClosed)
+	{
+		INT result = 0;
+		updateStatus(DllExports::GdipPathIterNextSubpath(
+				nativePathIterator, &result,
+				startIndex, endIndex, isClosed));
+		return result;
+	}
+	INT NextSubpath(GraphicsPath *path, BOOL *isClosed)
+	{
+		INT result = 0;
+		updateStatus(DllExports::GdipPathIterNextSubpathPath(
+				nativePathIterator, &result,
+				path ? path->nativePath : NULL, isClosed));
+		return result;
+	}
+	VOID Rewind()
+	{
+		updateStatus(DllExports::GdipPathIterRewind(
+				nativePathIterator));
+	}
+
+private:
+	GraphicsPathIterator(GpPathIterator *pathIterator, Status status):
+		nativePathIterator(pathIterator), lastStatus(status) {}
+	GraphicsPathIterator(const GraphicsPathIterator&);
+	GraphicsPathIterator& operator=(const GraphicsPathIterator&);
+
+	Status updateStatus(Status newStatus) const
+	{
+		if (newStatus != Ok) lastStatus = newStatus;
+		return newStatus;
+	}
+
+	GpPathIterator *nativePathIterator;
+	mutable Status lastStatus;
+};
+
+class PathGradientBrush: public Brush
+{
+public:
+	PathGradientBrush(const PointF *points, INT count,
+			WrapMode wrapMode = WrapModeClamp)
+	{
+		GpPathGradient *nativePathGradient = NULL;
+		lastStatus = DllExports::GdipCreatePathGradient(
+				points, count, wrapMode, &nativePathGradient);
+		nativeBrush = nativePathGradient;
+	}
+	PathGradientBrush(const Point *points, INT count,
+			WrapMode wrapMode = WrapModeClamp)
+	{
+		GpPathGradient *nativePathGradient = NULL;
+		lastStatus = DllExports::GdipCreatePathGradientI(
+				points, count, wrapMode, &nativePathGradient);
+		nativeBrush = nativePathGradient;
+	}
+	PathGradientBrush(const GraphicsPath *path)
+	{
+		GpPathGradient *nativePathGradient = NULL;
+		lastStatus = DllExports::GdipCreatePathGradientFromPath(
+				path ? path->nativePath : NULL,
+				&nativePathGradient);
+		nativeBrush = nativePathGradient;
+	}
+	virtual PathGradientBrush *Clone() const
+	{
+		GpBrush *cloneBrush = NULL;
+		Status status = updateStatus(DllExports::GdipCloneBrush(
+				nativeBrush, &cloneBrush));
+		if (status == Ok) {
+			PathGradientBrush *result =
+				new PathGradientBrush(cloneBrush, lastStatus);
+			if (!result) {
+				DllExports::GdipDeleteBrush(cloneBrush);
+				updateStatus(OutOfMemory);
+			}
+			return result;
+		} else {
+			return NULL;
+		}
+	}
+
+	Status GetBlend(REAL *blendFactors, REAL *blendPositions,
+			INT count) const
+	{
+		return updateStatus(DllExports::GdipGetPathGradientBlend(
+				(GpPathGradient*) nativeBrush,
+				blendFactors, blendPositions, count));
+	}
+	INT GetBlendCount() const
+	{
+		INT result = 0;
+		updateStatus(DllExports::GdipGetPathGradientBlendCount(
+				(GpPathGradient*) nativeBrush, &result));
+		return result;
+	}
+	Status GetCenterColor(Color *color) const
+	{
+		return updateStatus(DllExports::GdipGetPathGradientCenterColor(
+				(GpPathGradient*) nativeBrush,
+				color ? &color->Value : NULL));
+	}
+	Status GetCenterPoint(PointF *point) const
+	{
+		return updateStatus(DllExports::GdipGetPathGradientCenterPoint(
+				(GpPathGradient*) nativeBrush, point));
+	}
+	Status GetCenterPoint(Point *point) const
+	{
+		return updateStatus(DllExports::GdipGetPathGradientCenterPointI(
+				(GpPathGradient*) nativeBrush, point));
+	}
+	Status GetFocusScales(REAL *xScale, REAL *yScale) const
+	{
+		return updateStatus(DllExports::GdipGetPathGradientFocusScales(
+				(GpPathGradient*) nativeBrush, xScale, yScale));
+	}
+	BOOL GetGammaCorrection() const
+	{
+		BOOL result = FALSE;
+		updateStatus(DllExports::GdipGetPathGradientGammaCorrection(
+				(GpPathGradient*) nativeBrush, &result));
+		return result;
+	}
+	//Status GetGraphicsPath(GraphicsPath *path) const
+	//{
+	//	// TODO: implement PathGradientBrush::GetGraphicsPath
+	//	return updateStatus(NotImplemented);
+	//}
+	INT GetInterpolationColorCount() const
+	{
+		INT result = 0;
+		updateStatus(DllExports::GdipGetPathGradientPresetBlendCount(
+				(GpPathGradient*) nativeBrush, &result));
+		return result;
+	}
+	Status GetInterpolationColors(Color *presetColors,
+			REAL *blendPositions, INT count) const
+	{
+		if (!presetColors || count <= 0)
+			return lastStatus = InvalidParameter;
+
+		ARGB *presetArgb =
+			(ARGB*) DllExports::GdipAlloc(count * sizeof(ARGB));
+		if (!presetArgb)
+			return lastStatus = OutOfMemory;
+
+		Status status = updateStatus(DllExports::GdipGetPathGradientPresetBlend(
+				(GpPathGradient*) nativeBrush,
+				presetArgb, blendPositions, count));
+		for (INT i = 0; i < count; ++i) {
+			presetColors[i].SetValue(presetArgb[i]);
+		}
+		DllExports::GdipFree((void*) presetArgb);
+		return status;
+	}
+	INT GetPointCount() const
+	{
+		INT result = 0;
+		updateStatus(DllExports::GdipGetPathGradientPointCount(
+				(GpPathGradient*) nativeBrush, &result));
+		return result;
+	}
+	Status GetRectangle(RectF *rect) const
+	{
+		return updateStatus(DllExports::GdipGetPathGradientRect(
+				(GpPathGradient*) nativeBrush, rect));
+	}
+	Status GetRectangle(Rect *rect) const
+	{
+		return updateStatus(DllExports::GdipGetPathGradientRectI(
+				(GpPathGradient*) nativeBrush, rect));
+	}
+	INT GetSurroundColorCount() const
+	{
+		INT result = 0;
+		updateStatus(DllExports::GdipGetPathGradientSurroundColorCount(
+				(GpPathGradient*) nativeBrush, &result));
+		return result;
+	}
+	Status GetSurroundColors(Color *colors, INT *count)
+	{
+		if (!colors || !count || *count <= 0)
+			return lastStatus = InvalidParameter;
+
+		ARGB *colorsArgb =
+			(ARGB*) DllExports::GdipAlloc(*count * sizeof(ARGB));
+		if (!colorsArgb)
+			return lastStatus = OutOfMemory;
+
+		Status status = updateStatus(DllExports::GdipGetPathGradientSurroundColorsWithCount(
+				(GpPathGradient*) nativeBrush,
+				colorsArgb, count));
+		for (INT i = 0; i < *count; ++i) {
+			colors[i].SetValue(colorsArgb[i]);
+		}
+		DllExports::GdipFree((void*) colorsArgb);
+		return status;
+	}
+	Status GetTransform(Matrix *matrix) const
+	{
+		return updateStatus(DllExports::GdipGetPathGradientTransform(
+				(GpPathGradient*) nativeBrush,
+				matrix ? matrix->nativeMatrix : NULL));
+	}
+	WrapMode GetWrapMode() const
+	{
+		WrapMode result = WrapModeTile;
+		updateStatus(DllExports::GdipGetPathGradientWrapMode(
+				(GpPathGradient*) nativeBrush, &result));
+		return result;
+	}
+	Status MultiplyTransform(const Matrix *matrix,
+			MatrixOrder order = MatrixOrderPrepend)
+	{
+		return updateStatus(DllExports::GdipMultiplyPathGradientTransform(
+				(GpPathGradient*) nativeBrush,
+				matrix ? matrix->nativeMatrix : NULL, order));
+	}
+	Status ResetTransform()
+	{
+		return updateStatus(DllExports::GdipResetPathGradientTransform(
+				(GpPathGradient*) nativeBrush));
+	}
+	Status RotateTransform(REAL angle,
+			MatrixOrder order = MatrixOrderPrepend)
+	{
+		return updateStatus(DllExports::GdipRotatePathGradientTransform(
+				(GpPathGradient*) nativeBrush, angle, order));
+	}
+	Status ScaleTransform(REAL sx, REAL sy,
+			MatrixOrder order = MatrixOrderPrepend)
+	{
+		return updateStatus(DllExports::GdipScalePathGradientTransform(
+				(GpPathGradient*) nativeBrush, sx, sy, order));
+	}
+	Status SetBlend(REAL *blendFactors, REAL *blendPositions, INT count)
+	{
+		return updateStatus(DllExports::GdipSetPathGradientBlend(
+				(GpPathGradient*) nativeBrush,
+				blendFactors, blendPositions, count));
+	}
+	Status SetBlendBellShape(REAL focus, REAL scale = 1.0f)
+	{
+		return updateStatus(DllExports::GdipSetPathGradientSigmaBlend(
+				(GpPathGradient*) nativeBrush, focus, scale));
+	}
+	Status SetBlendTriangularShape(REAL focus, REAL scale = 1.0f)
+	{
+		return updateStatus(DllExports::GdipSetPathGradientLinearBlend(
+				(GpPathGradient*) nativeBrush, focus, scale));
+	}
+	Status SetCenterColor(const Color& color)
+	{
+		return updateStatus(DllExports::GdipSetPathGradientCenterColor(
+				(GpPathGradient*) nativeBrush,
+				color.GetValue()));
+	}
+	Status SetCenterPoint(const PointF& point)
+	{
+		return updateStatus(DllExports::GdipSetPathGradientCenterPoint(
+				(GpPathGradient*) nativeBrush, &point));
+	}
+	Status SetCenterPoint(const Point& point)
+	{
+		return updateStatus(DllExports::GdipSetPathGradientCenterPointI(
+				(GpPathGradient*) nativeBrush, &point));
+	}
+	Status SetFocusScales(REAL xScale, REAL yScale)
+	{
+		return updateStatus(DllExports::GdipSetPathGradientFocusScales(
+				(GpPathGradient*) nativeBrush, xScale, yScale));
+	}
+	Status SetGammaCorrection(BOOL useGammaCorrection)
+	{
+		return updateStatus(DllExports::GdipSetPathGradientGammaCorrection(
+				(GpPathGradient*) nativeBrush,
+				useGammaCorrection));
+	}
+	//Status SetGraphicsPath(const GraphicsPath *path)
+	//{
+	//	// TODO: implement PathGradientBrush::SetGraphicsPath
+	//	return updateStatus(NotImplemented);
+	//}
+	Status SetInterpolationColors(const Color *presetColors,
+			REAL *blendPositions, INT count)
+	{
+		if (!presetColors || count <= 0)
+			return lastStatus = InvalidParameter;
+
+		ARGB *presetArgb =
+			(ARGB*) DllExports::GdipAlloc(count * sizeof(ARGB));
+		if (!presetArgb)
+			return lastStatus = OutOfMemory;
+		for (INT i = 0; i < count; ++i) {
+			presetArgb[i] = presetColors[i].GetValue();
+		}
+
+		Status status = updateStatus(DllExports::GdipSetPathGradientPresetBlend(
+				(GpPathGradient*) nativeBrush,
+				presetArgb, blendPositions, count));
+		DllExports::GdipFree((void*) presetArgb);
+		return status;
+	}
+	Status SetSurroundColors(const Color *colors, INT *count)
+	{
+		if (!colors || !count || *count <= 0)
+			return lastStatus = InvalidParameter;
+
+		ARGB *colorsArgb =
+			(ARGB*) DllExports::GdipAlloc(*count * sizeof(ARGB));
+		if (!colorsArgb)
+			return lastStatus = OutOfMemory;
+		for (INT i = 0; i < *count; ++i) {
+			colorsArgb[i] = colors[i].GetValue();
+		}
+
+		Status status = updateStatus(DllExports::GdipSetPathGradientSurroundColorsWithCount(
+				(GpPathGradient*) nativeBrush,
+				colorsArgb, count));
+		DllExports::GdipFree((void*) colorsArgb);
+		return status;
+	}
+	Status SetTransform(const Matrix *matrix)
+	{
+		return updateStatus(DllExports::GdipSetPathGradientTransform(
+				(GpPathGradient*) nativeBrush,
+				matrix ? matrix->nativeMatrix : NULL));
+	}
+	Status SetWrapMode(WrapMode wrapMode)
+	{
+		return updateStatus(DllExports::GdipSetPathGradientWrapMode(
+				(GpPathGradient*) nativeBrush, wrapMode));
+	}
+	Status TranslateTransform(REAL dx, REAL dy,
+			MatrixOrder order = MatrixOrderPrepend)
+	{
+		return updateStatus(DllExports::GdipTranslatePathGradientTransform(
+				(GpPathGradient*) nativeBrush, dx, dy, order));
+	}
+
+private:
+	PathGradientBrush(GpBrush *brush, Status status): Brush(brush, status) {}
+	PathGradientBrush(const PathGradientBrush&);
+	PathGradientBrush& operator=(const PathGradientBrush&);
+};
+
+
+
+#endif /* __GDIPLUS_PATH_H */
diff --git a/mingw-w64-headers/include/gdiplus/gdipluspen.h b/mingw-w64-headers/include/gdiplus/gdipluspen.h
new file mode 100644
index 0000000..d7efed6
--- /dev/null
+++ b/mingw-w64-headers/include/gdiplus/gdipluspen.h
@@ -0,0 +1,338 @@
+/*
+ * gdipluspen.h
+ *
+ * GDI+ Pen class
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ *   Created by Markus Koenig <markus@stber-koenig.de>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __GDIPLUS_PEN_H
+#define __GDIPLUS_PEN_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifndef __cplusplus
+#error "A C++ compiler is required to include gdipluspen.h."
+#endif
+
+class Pen: public GdiplusBase
+{
+	friend class Graphics;
+	friend class GraphicsPath;
+
+public:
+	Pen(const Color& color, REAL width = 1.0f):
+		nativePen(NULL), lastStatus(Ok)
+	{
+		lastStatus = DllExports::GdipCreatePen1(
+				color.GetValue(), width, UnitWorld,
+				&nativePen);
+	}
+	Pen(const Brush *brush, REAL width = 1.0f):
+		nativePen(NULL), lastStatus(Ok)
+	{
+		lastStatus = DllExports::GdipCreatePen2(
+				brush ? brush->nativeBrush : NULL,
+				width, UnitWorld, &nativePen);
+	}
+	~Pen()
+	{
+		DllExports::GdipDeletePen(nativePen);
+	}
+	Pen* Clone() const
+	{
+		GpPen *clonePen = NULL;
+		Status status = updateStatus(DllExports::GdipClonePen(
+				nativePen, &clonePen));
+		if (status == Ok) {
+			Pen *result = new Pen(clonePen, lastStatus);
+			if (!result) {
+				DllExports::GdipDeletePen(clonePen);
+				lastStatus = OutOfMemory;
+			}
+			return result;
+		} else {
+			return NULL;
+		}
+	}
+
+	PenAlignment GetAlignment() const
+	{
+		PenAlignment result = PenAlignmentCenter;
+		updateStatus(DllExports::GdipGetPenMode(nativePen, &result));
+		return result;
+	}
+	// TODO: implement Pen::GetBrush()
+	//Brush *GetBrush() const
+	//{
+	//	// where is the pen brush allocated (static,member,new,other)?
+	//	// GdipGetPenBrushFill just returns a GpBrush*
+	//	updateStatus(NotImplemented);
+	//	return NULL;
+	//}
+	Status GetColor(Color *color) const
+	{
+		return updateStatus(DllExports::GdipGetPenColor(
+				nativePen, color ? &color->Value : NULL));
+	}
+	Status GetCompoundArray(REAL *compoundArray, INT count) const
+	{
+		return updateStatus(DllExports::GdipGetPenCompoundArray(
+				nativePen, compoundArray, count));
+	}
+	INT GetCompoundArrayCount() const
+	{
+		INT result = 0;
+		updateStatus(DllExports::GdipGetPenCompoundCount(
+				nativePen, &result));
+		return result;
+	}
+	Status GetCustomEndCap(CustomLineCap *customCap) const
+	{
+		if (!customCap) return lastStatus = InvalidParameter;
+		// FIXME: do we need to call GdipDeleteCustomLineCap first?
+		return updateStatus(DllExports::GdipGetPenCustomEndCap(
+				nativePen, &customCap->nativeCustomLineCap));
+	}
+	Status GetCustomStartCap(CustomLineCap *customCap) const
+	{
+		if (!customCap) return lastStatus = InvalidParameter;
+		// FIXME: do we need to call GdipDeleteCustomLineCap first?
+		return updateStatus(DllExports::GdipGetPenCustomStartCap(
+				nativePen, &customCap->nativeCustomLineCap));
+	}
+	DashCap GetDashCap() const
+	{
+		DashCap result = DashCapFlat;
+		updateStatus(DllExports::GdipGetPenDashCap197819(
+				nativePen, &result));
+		return result;
+	}
+	REAL GetDashOffset() const
+	{
+		REAL result = 0.0f;
+		updateStatus(DllExports::GdipGetPenDashOffset(
+				nativePen, &result));
+		return result;
+	}
+	Status GetDashPattern(REAL *dashArray, INT count) const
+	{
+		return updateStatus(DllExports::GdipGetPenDashArray(
+				nativePen, dashArray, count));
+	}
+	INT GetDashPatternCount() const
+	{
+		INT result = 0;
+		updateStatus(DllExports::GdipGetPenDashCount(
+				nativePen, &result));
+		return result;
+	}
+	DashStyle GetDashStyle() const
+	{
+		DashStyle result = DashStyleSolid;
+		updateStatus(DllExports::GdipGetPenDashStyle(
+				nativePen, &result));
+		return result;
+	}
+	LineCap GetEndCap() const
+	{
+		LineCap result = LineCapFlat;
+		updateStatus(DllExports::GdipGetPenEndCap(nativePen, &result));
+		return result;
+	}
+	Status GetLastStatus() const
+	{
+		Status result = lastStatus;
+		lastStatus = Ok;
+		return result;
+	}
+	LineJoin GetLineJoin() const
+	{
+		LineJoin result = LineJoinMiter;
+		updateStatus(DllExports::GdipGetPenLineJoin(
+				nativePen, &result));
+		return result;
+	}
+	REAL GetMiterLimit() const
+	{
+		REAL result = 10.0f;
+		updateStatus(DllExports::GdipGetPenMiterLimit(
+				nativePen, &result));
+		return result;
+	}
+	PenType GetPenType() const
+	{
+		PenType result = PenTypeUnknown;
+		updateStatus(DllExports::GdipGetPenFillType(
+				nativePen, &result));
+		return result;
+	}
+	LineCap GetStartCap() const
+	{
+		LineCap result = LineCapFlat;
+		updateStatus(DllExports::GdipGetPenStartCap(
+				nativePen, &result));
+		return result;
+	}
+	Status GetTransform(Matrix *matrix) const
+	{
+		return updateStatus(DllExports::GdipGetPenTransform(
+				nativePen,
+				matrix ? matrix->nativeMatrix : NULL));
+	}
+	REAL GetWidth() const
+	{
+		REAL result = 1.0f;
+		updateStatus(DllExports::GdipGetPenWidth(nativePen, &result));
+		return result;
+	}
+	Status MultiplyTransform(const Matrix *matrix,
+			MatrixOrder order = MatrixOrderPrepend)
+	{
+		return updateStatus(DllExports::GdipMultiplyPenTransform(
+				nativePen,
+				matrix ? matrix->nativeMatrix : NULL, order));
+	}
+	Status ResetTransform()
+	{
+		return updateStatus(DllExports::GdipResetPenTransform(
+				nativePen));
+	}
+	Status RotateTransform(REAL angle,
+			MatrixOrder order = MatrixOrderPrepend)
+	{
+		return updateStatus(DllExports::GdipRotatePenTransform(
+				nativePen, angle, order));
+	}
+	Status ScaleTransform(REAL sx, REAL sy,
+			MatrixOrder order = MatrixOrderPrepend)
+	{
+		return updateStatus(DllExports::GdipScalePenTransform(
+				nativePen, sx, sy, order));
+	}
+	Status SetAlignment(PenAlignment penAlignment)
+	{
+		return updateStatus(DllExports::GdipSetPenMode(
+				nativePen, penAlignment));
+	}
+	Status SetBrush(const Brush *brush)
+	{
+		return updateStatus(DllExports::GdipSetPenBrushFill(
+				nativePen, brush ? brush->nativeBrush : NULL));
+	}
+	Status SetColor(const Color& color)
+	{
+		return updateStatus(DllExports::GdipSetPenColor(
+				nativePen, color.GetValue()));
+	}
+	Status SetCompoundArray(const REAL *compoundArray, INT count)
+	{
+		return updateStatus(DllExports::GdipSetPenCompoundArray(
+				nativePen, compoundArray, count));
+	}
+	Status SetCustomEndCap(const CustomLineCap *customCap)
+	{
+		return updateStatus(DllExports::GdipSetPenCustomEndCap(
+				nativePen,
+				customCap ? customCap->nativeCustomLineCap : NULL));
+	}
+	Status SetCustomStartCap(const CustomLineCap *customCap)
+	{
+		return updateStatus(DllExports::GdipSetPenCustomStartCap(
+				nativePen,
+				customCap ? customCap->nativeCustomLineCap : NULL));
+	}
+	Status SetDashCap(DashCap dashCap)
+	{
+		return updateStatus(DllExports::GdipSetPenDashCap197819(
+				nativePen, dashCap));
+	}
+	Status SetDashOffset(REAL dashOffset)
+	{
+		return updateStatus(DllExports::GdipSetPenDashOffset(
+				nativePen, dashOffset));
+	}
+	Status SetDashPattern(const REAL *dashArray, INT count)
+	{
+		return updateStatus(DllExports::GdipSetPenDashArray(
+				nativePen, dashArray, count));
+	}
+	Status SetDashStyle(DashStyle dashStyle)
+	{
+		return updateStatus(DllExports::GdipSetPenDashStyle(
+				nativePen, dashStyle));
+	}
+	Status SetEndCap(LineCap endCap)
+	{
+		return updateStatus(DllExports::GdipSetPenEndCap(
+				nativePen, endCap));
+	}
+	Status SetLineCap(LineCap startCap, LineCap endCap, DashCap dashCap)
+	{
+		return updateStatus(DllExports::GdipSetPenLineCap197819(
+				nativePen, startCap, endCap, dashCap));
+	}
+	Status SetLineJoin(LineJoin lineJoin)
+	{
+		return updateStatus(DllExports::GdipSetPenLineJoin(
+				nativePen, lineJoin));
+	}
+	Status SetMiterLimit(REAL miterLimit)
+	{
+		return updateStatus(DllExports::GdipSetPenMiterLimit(
+				nativePen, miterLimit));
+	}
+	Status SetStartCap(LineCap startCap)
+	{
+		return updateStatus(DllExports::GdipSetPenStartCap(
+				nativePen, startCap));
+	}
+	Status SetTransform(const Matrix *matrix)
+	{
+		return updateStatus(DllExports::GdipSetPenTransform(
+				nativePen,
+				matrix ? matrix->nativeMatrix : NULL));
+	}
+	Status SetWidth(REAL width)
+	{
+		return updateStatus(DllExports::GdipSetPenWidth(
+				nativePen, width));
+	}
+	Status TranslateTransform(REAL dx, REAL dy,
+			MatrixOrder order = MatrixOrderPrepend)
+	{
+		return updateStatus(DllExports::GdipTranslatePenTransform(
+				nativePen, dx, dy, order));
+	}
+
+private:
+	Pen(GpPen *pen, Status status): nativePen(pen), lastStatus(status) {}
+	Pen(const Pen& pen);
+	Pen& operator=(const Pen&);
+
+	Status updateStatus(Status newStatus) const
+	{
+		if (newStatus != Ok) lastStatus = newStatus;
+		return newStatus;
+	}
+
+	GpPen *nativePen;
+	mutable Status lastStatus;
+};
+
+#endif /* __GDIPLUS_PEN_H */
diff --git a/mingw-w64-headers/include/gdiplus/gdipluspixelformats.h b/mingw-w64-headers/include/gdiplus/gdipluspixelformats.h
new file mode 100644
index 0000000..ea51cc7
--- /dev/null
+++ b/mingw-w64-headers/include/gdiplus/gdipluspixelformats.h
@@ -0,0 +1,120 @@
+/*
+ * gdipluspixelformats.h
+ *
+ * GDI+ pixel formats
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ *   Created by Markus Koenig <markus@stber-koenig.de>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __GDIPLUS_PIXELFORMATS_H
+#define __GDIPLUS_PIXELFORMATS_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+typedef DWORD ARGB;
+typedef INT PixelFormat;
+
+#define PixelFormatIndexed ((INT) 0x00010000)
+#define PixelFormatGDI ((INT) 0x00020000)
+#define PixelFormatAlpha ((INT) 0x00040000)
+#define PixelFormatPAlpha ((INT) 0x00080000)
+#define PixelFormatExtended ((INT) 0x00100000)
+#define PixelFormatCanonical ((INT) 0x00200000)
+#define PixelFormatUndefined ((INT) 0)
+#define PixelFormatDontCare ((INT) 0)
+#define PixelFormat1bppIndexed ((INT) \
+	(1 | (1<<8) | PixelFormatIndexed | PixelFormatGDI))
+#define PixelFormat4bppIndexed ((INT) \
+	(2 | (4<<8) | PixelFormatIndexed | PixelFormatGDI))
+#define PixelFormat8bppIndexed ((INT) \
+	(3 | (8<<8) | PixelFormatIndexed | PixelFormatGDI))
+#define PixelFormat16bppGrayScale ((INT) \
+	(4 | (16<<8) | PixelFormatExtended))
+#define PixelFormat16bppRGB555 ((INT) \
+	(5 | (16<<8) | PixelFormatGDI))
+#define PixelFormat16bppRGB565 ((INT) \
+	(6 | (16<<8) | PixelFormatGDI))
+#define PixelFormat16bppARGB1555 ((INT) \
+	(7 | (16<<8) | PixelFormatAlpha | PixelFormatGDI))
+#define PixelFormat24bppRGB ((INT) \
+	(8 | (24<<8) | PixelFormatGDI))
+#define PixelFormat32bppRGB ((INT) \
+	(9 | (32<<8) | PixelFormatGDI))
+#define PixelFormat32bppARGB ((INT) \
+	(10 | (32<<8) | PixelFormatAlpha | PixelFormatGDI | PixelFormatCanonical))
+#define PixelFormat32bppPARGB ((INT) \
+	(11 | (32<<8) | PixelFormatAlpha | PixelFormatPAlpha | PixelFormatGDI))
+#define PixelFormat48bppRGB ((INT) \
+	(12 | (48<<8) | PixelFormatExtended))
+#define PixelFormat64bppARGB ((INT) \
+	(13 | (64<<8) | PixelFormatAlpha | PixelFormatCanonical | PixelFormatExtended))
+#define PixelFormat64bppPARGB ((INT) \
+	(14 | (64<<8) | PixelFormatAlpha | PixelFormatPAlpha | PixelFormatExtended))
+#define PixelFormatMax ((INT) 15)
+
+typedef enum PaletteFlags {
+	PaletteFlagsHasAlpha = 1,
+	PaletteFlagsGrayScale = 2,
+	PaletteFlagsHalftone = 4
+} PaletteFlags;
+
+typedef enum PaletteType {
+	PaletteTypeCustom = 0,
+	PaletteTypeOptimal = 1,
+	PaletteTypeFixedBW = 2,
+	PaletteTypeFixedHalftone8 = 3,
+	PaletteTypeFixedHalftone27 = 4,
+	PaletteTypeFixedHalftone64 = 5,
+	PaletteTypeFixedHalftone125 = 6,
+	PaletteTypeFixedHalftone216 = 7,
+	PaletteTypeFixedHalftone252 = 8,
+	PaletteTypeFixedHalftone256 = 9 
+} PaletteType;
+
+typedef struct ColorPalette {
+	UINT Flags;
+	UINT Count;
+	ARGB Entries[1];
+} ColorPalette;
+
+static __inline__ UINT GetPixelFormatSize(PixelFormat pixfmt)
+{
+	return (((UINT) pixfmt) & 0xff00U) >> 8;
+}
+
+static __inline__ BOOL IsAlphaPixelFormat(PixelFormat pixfmt)
+{
+	return (pixfmt & PixelFormatAlpha) != 0;
+}
+
+static __inline__ BOOL IsCanonicalPixelFormat(PixelFormat pixfmt)
+{
+	return (pixfmt & PixelFormatCanonical) != 0;
+}
+
+static __inline__ BOOL IsExtendedPixelFormat(PixelFormat pixfmt)
+{
+	return (pixfmt & PixelFormatExtended) != 0;
+}
+
+static __inline__ BOOL IsIndexedPixelFormat(PixelFormat pixfmt)
+{
+	return (pixfmt & PixelFormatIndexed) != 0;
+}
+
+#endif /* __GDIPLUS_PIXELFORMATS_H */
diff --git a/mingw-w64-headers/include/gdiplus/gdiplusstringformat.h b/mingw-w64-headers/include/gdiplus/gdiplusstringformat.h
new file mode 100644
index 0000000..b95d1c3
--- /dev/null
+++ b/mingw-w64-headers/include/gdiplus/gdiplusstringformat.h
@@ -0,0 +1,251 @@
+/*
+ * gdiplusstringformat.h
+ *
+ * GDI+ StringFormat class
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ *   Created by Markus Koenig <markus@stber-koenig.de>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __GDIPLUS_STRINGFORMAT_H
+#define __GDIPLUS_STRINGFORMAT_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifndef __cplusplus
+#error "A C++ compiler is required to include gdiplusstringformat.h."
+#endif
+
+class StringFormat: public GdiplusBase
+{
+	friend class Graphics;
+	friend class GraphicsPath;
+
+public:
+	static const StringFormat* GenericDefault();
+	static const StringFormat* GenericTypographic();
+
+	StringFormat(INT formatFlags = 0, LANGID language = LANG_NEUTRAL):
+			nativeStringFormat(NULL), lastStatus(Ok)
+	{
+		lastStatus = DllExports::GdipCreateStringFormat(
+				formatFlags, language, &nativeStringFormat);
+	}
+	StringFormat(const StringFormat *format):
+			nativeStringFormat(NULL), lastStatus(Ok)
+	{
+		lastStatus = DllExports::GdipCloneStringFormat(
+				format ? format->nativeStringFormat : NULL,
+				&nativeStringFormat);
+	}
+	~StringFormat()
+	{
+		DllExports::GdipDeleteStringFormat(nativeStringFormat);
+	}
+	StringFormat* Clone() const
+	{
+		GpStringFormat *cloneStringFormat = NULL;
+		Status status = updateStatus(DllExports::GdipCloneStringFormat(
+				nativeStringFormat, &cloneStringFormat));
+		if (status == Ok) {
+			StringFormat *result = new StringFormat(
+					cloneStringFormat, lastStatus);
+			if (!result) {
+				DllExports::GdipDeleteStringFormat(cloneStringFormat);
+				lastStatus = OutOfMemory;
+			}
+			return result;
+		} else {
+			return NULL;
+		}
+	}
+
+	StringAlignment GetAlignment() const
+	{
+		StringAlignment result = StringAlignmentNear;
+		updateStatus(DllExports::GdipGetStringFormatAlign(
+				nativeStringFormat, &result));
+		return result;
+	}
+	LANGID GetDigitSubstitutionLanguage() const
+	{
+		LANGID result = 0;
+		StringDigitSubstitute method;
+		updateStatus(DllExports::GdipGetStringFormatDigitSubstitution(
+				nativeStringFormat, &result, &method));
+		return result;
+	}
+	StringDigitSubstitute GetDigitSubstitutionMethod() const
+	{
+		LANGID language;
+		StringDigitSubstitute result = StringDigitSubstituteUser;
+		updateStatus(DllExports::GdipGetStringFormatDigitSubstitution(
+				nativeStringFormat, &language, &result));
+		return result;
+	}
+	INT GetFormatFlags() const
+	{
+		INT result = 0;
+		updateStatus(DllExports::GdipGetStringFormatFlags(
+				nativeStringFormat, &result));
+		return result;
+	}
+	HotkeyPrefix GetHotkeyPrefix() const
+	{
+		HotkeyPrefix result = HotkeyPrefixNone;
+		updateStatus(DllExports::GdipGetStringFormatHotkeyPrefix(
+				nativeStringFormat, (INT*) &result));
+		return result;
+	}
+	Status GetLastStatus() const
+	{
+		Status result = lastStatus;
+		lastStatus = Ok;
+		return result;
+	}
+	StringAlignment GetLineAlignment() const
+	{
+		StringAlignment result = StringAlignmentNear;
+		updateStatus(DllExports::GdipGetStringFormatLineAlign(
+				nativeStringFormat, &result));
+		return result;
+	}
+	INT GetMeasurableCharacterRangeCount() const
+	{
+		INT result = 0;
+		updateStatus(DllExports::GdipGetStringFormatMeasurableCharacterRangeCount(
+				nativeStringFormat, &result));
+		return result;
+	}
+	INT GetTabStopCount() const
+	{
+		INT result = 0;
+		updateStatus(DllExports::GdipGetStringFormatTabStopCount(
+				nativeStringFormat, &result));
+		return result;
+	}
+	Status GetTabStops(INT count, REAL *firstTabOffset, REAL *tabStops)
+	{
+		return updateStatus(DllExports::GdipGetStringFormatTabStops(
+				nativeStringFormat, count,
+				firstTabOffset, tabStops));
+	}
+	StringTrimming GetTrimming() const
+	{
+		StringTrimming result = StringTrimmingNone;
+		updateStatus(DllExports::GdipGetStringFormatTrimming(
+				nativeStringFormat, &result));
+		return result;
+	}
+	Status SetAlignment(StringAlignment align)
+	{
+		return updateStatus(DllExports::GdipSetStringFormatAlign(
+				nativeStringFormat, align));
+	}
+	Status SetDigitSubstitution(LANGID language,
+			StringDigitSubstitute substitute)
+	{
+		return updateStatus(DllExports::GdipSetStringFormatDigitSubstitution(
+				nativeStringFormat, language, substitute));
+	}
+	Status SetFormatFlags(INT flags)
+	{
+		return updateStatus(DllExports::GdipSetStringFormatFlags(
+				nativeStringFormat, flags));
+	}
+	Status SetHotkeyPrefix(HotkeyPrefix hotkeyPrefix)
+	{
+		return updateStatus(DllExports::GdipSetStringFormatHotkeyPrefix(
+				nativeStringFormat, (INT) hotkeyPrefix));
+	}
+	Status SetLineAlignment(StringAlignment align)
+	{
+		return updateStatus(DllExports::GdipSetStringFormatLineAlign(
+				nativeStringFormat, align));
+	}
+	Status SetMeasurableCharacterRanges(INT rangeCount,
+			const CharacterRange *ranges)
+	{
+		return updateStatus(DllExports::GdipSetStringFormatMeasurableCharacterRanges(
+				nativeStringFormat, rangeCount, ranges));
+	}
+	Status SetTabStops(REAL firstTabOffset, INT count, const REAL *tabStops)
+	{
+		return updateStatus(DllExports::GdipSetStringFormatTabStops(
+				nativeStringFormat, firstTabOffset,
+				count, tabStops));
+	}
+	Status SetTrimming(StringTrimming trimming)
+	{
+		return updateStatus(DllExports::GdipSetStringFormatTrimming(
+				nativeStringFormat, trimming));
+	}
+
+private:
+	StringFormat(GpStringFormat *stringFormat, Status status):
+		nativeStringFormat(stringFormat), lastStatus(status) {}
+	StringFormat(const StringFormat&);
+	StringFormat& operator=(const StringFormat&);
+
+	Status updateStatus(Status newStatus) const
+	{
+		if (newStatus != Ok) lastStatus = newStatus;
+		return newStatus;
+	}
+
+	GpStringFormat *nativeStringFormat;
+	mutable Status lastStatus;
+};
+
+
+// FIXME: do StringFormat::GenericDefault() et al. need to be thread safe?
+// FIXME: maybe put this in gdiplus.c?
+
+extern "C" void *_GdipStringFormatCachedGenericDefault;
+extern "C" void *_GdipStringFormatCachedGenericTypographic;
+
+__inline__ const StringFormat* StringFormat::GenericDefault()
+{
+	if (!_GdipStringFormatCachedGenericDefault) {
+		GpStringFormat *nativeStringFormat = 0;
+		Status status = DllExports::GdipStringFormatGetGenericDefault(
+				&nativeStringFormat);
+		if (status == Ok && nativeStringFormat) {
+			_GdipStringFormatCachedGenericDefault = (void*)
+				new StringFormat(nativeStringFormat, Ok);
+		}
+	}
+	return (StringFormat*) _GdipStringFormatCachedGenericDefault;
+}
+
+__inline__ const StringFormat* StringFormat::GenericTypographic()
+{
+	if (!_GdipStringFormatCachedGenericTypographic) {
+		GpStringFormat *nativeStringFormat = 0;
+		Status status = DllExports::GdipStringFormatGetGenericTypographic(
+				&nativeStringFormat);
+		if (status == Ok && nativeStringFormat) {
+			_GdipStringFormatCachedGenericTypographic = (void*)
+				new StringFormat(nativeStringFormat, Ok);
+		}
+	}
+	return (StringFormat*) _GdipStringFormatCachedGenericTypographic;
+}
+
+
+
+#endif /* __GDIPLUS_STRINGFORMAT_H */
diff --git a/mingw-w64-headers/include/gdiplus/gdiplustypes.h b/mingw-w64-headers/include/gdiplus/gdiplustypes.h
new file mode 100644
index 0000000..08a4237
--- /dev/null
+++ b/mingw-w64-headers/include/gdiplus/gdiplustypes.h
@@ -0,0 +1,456 @@
+/*
+ * gdiplustypes.h
+ *
+ * GDI+ basic type declarations
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ *   Created by Markus Koenig <markus@stber-koenig.de>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __GDIPLUS_TYPES_H
+#define __GDIPLUS_TYPES_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#define WINGDIPAPI __stdcall
+#define GDIPCONST const
+
+typedef enum GpStatus {
+	Ok = 0,
+	GenericError = 1,
+	InvalidParameter = 2,
+	OutOfMemory = 3,
+	ObjectBusy = 4,
+	InsufficientBuffer = 5,
+	NotImplemented = 6,
+	Win32Error = 7,
+	WrongState = 8,
+	Aborted = 9,
+	FileNotFound = 10,
+	ValueOverflow = 11,
+	AccessDenied = 12,
+	UnknownImageFormat = 13,
+	FontFamilyNotFound = 14,
+	FontStyleNotFound = 15,
+	NotTrueTypeFont = 16,
+	UnsupportedGdiplusVersion = 17,
+	GdiplusNotInitialized = 18,
+	PropertyNotFound = 19,
+	PropertyNotSupported = 20,
+	ProfileNotFound = 21
+} GpStatus;
+
+#ifdef __cplusplus
+typedef GpStatus Status;
+#endif
+
+typedef struct Size {
+	INT Width;
+	INT Height;
+
+	#ifdef __cplusplus
+	Size(): Width(0), Height(0) {}
+	Size(INT width, INT height): Width(width), Height(height) {}
+	Size(const Size& size): Width(size.Width), Height(size.Height) {}
+	
+	BOOL Empty() const {
+		return Width == 0 && Height == 0;
+	}
+	BOOL Equals(const Size& size) const {
+		return Width == size.Width && Height == size.Height;
+	}
+	Size operator+(const Size& size) const {
+		return Size(Width + size.Width, Height + size.Height);
+	}
+	Size operator-(const Size& size) const {
+		return Size(Width - size.Width, Height - size.Height);
+	}
+	#endif /* __cplusplus */
+} Size;
+
+typedef struct SizeF {
+	REAL Width;
+	REAL Height;
+
+	#ifdef __cplusplus
+	SizeF(): Width(0.0f), Height(0.0f) {}
+	SizeF(REAL width, REAL height): Width(width), Height(height) {}
+	SizeF(const SizeF& size): Width(size.Width), Height(size.Height) {}
+	
+	BOOL Empty() const {
+		return Width == 0.0f && Height == 0.0f;
+	}
+	BOOL Equals(const SizeF& size) const {
+		return Width == size.Width && Height == size.Height;
+	}
+	SizeF operator+(const SizeF& size) const {
+		return SizeF(Width + size.Width, Height + size.Height);
+	}
+	SizeF operator-(const SizeF& size) const {
+		return SizeF(Width - size.Width, Height - size.Height);
+	}
+	#endif /* __cplusplus */
+} SizeF;
+
+typedef struct Point {
+	INT X;
+	INT Y;
+
+	#ifdef __cplusplus
+	Point(): X(0), Y(0) {}
+	Point(INT x, INT y): X(x), Y(y) {}
+	Point(const Point& point): X(point.X), Y(point.Y) {}
+	Point(const Size& size): X(size.Width), Y(size.Height) {}
+	
+	BOOL Equals(const Point& point) const {
+		return X == point.X && Y == point.Y;
+	}
+	Point operator+(const Point& point) const {
+		return Point(X + point.X, Y + point.Y);
+	}
+	Point operator-(const Point& point) const {
+		return Point(X - point.X, Y - point.Y);
+	}
+	#endif /* __cplusplus */
+} Point;
+
+typedef struct PointF {
+	REAL X;
+	REAL Y;
+
+	#ifdef __cplusplus
+	PointF(): X(0.0f), Y(0.0f) {}
+	PointF(REAL x, REAL y): X(x), Y(y) {}
+	PointF(const PointF& point): X(point.X), Y(point.Y) {}
+	PointF(const SizeF& size): X(size.Width), Y(size.Height) {}
+	
+	BOOL Equals(const PointF& point) const {
+		return X == point.X && Y == point.Y;
+	}
+	PointF operator+(const PointF& point) const {
+		return PointF(X + point.X, Y + point.Y);
+	}
+	PointF operator-(const PointF& point) const {
+		return PointF(X - point.X, Y - point.Y);
+	}
+	#endif /* __cplusplus */
+} PointF;
+
+typedef struct Rect {
+	INT X;
+	INT Y;
+	INT Width;
+	INT Height;
+
+	#ifdef __cplusplus
+	Rect(): X(0), Y(0), Width(0), Height(0) {}
+	Rect(const Point& location, const Size& size):
+		X(location.X), Y(location.Y),
+		Width(size.Width), Height(size.Height) {}
+	Rect(INT x, INT y, INT width, INT height):
+		X(x), Y(y), Width(width), Height(height) {}
+	
+	Rect* Clone() const {
+		return new Rect(X, Y, Width, Height);
+	}
+	BOOL Contains(INT x, INT y) const {
+		return X <= x && Y <= y && x < X+Width && y < Y+Height;
+	}
+	BOOL Contains(const Point& point) const {
+		return Contains(point.X, point.Y);
+	}
+	BOOL Contains(const Rect& rect) const {
+		return X <= rect.X && Y <= rect.Y
+			&& rect.X+rect.Width <= X+Width
+			&& rect.Y+rect.Height <= Y+Height;
+	}
+	BOOL Equals(const Rect& rect) const {
+		return X == rect.X && Y == rect.Y
+			&& Width == rect.Width && Height == rect.Height;
+	}
+	INT GetBottom() const {
+		return Y+Height;
+	}
+	VOID GetBounds(Rect *rect) const {
+		if (rect != NULL) {
+			rect->X = X;
+			rect->Y = Y;
+			rect->Width = Width;
+			rect->Height = Height;
+		}
+	}
+	INT GetLeft() const {
+		return X;
+	}
+	VOID GetLocation(Point *point) const {
+		if (point != NULL) {
+			point->X = X;
+			point->Y = Y;
+		}
+	}
+	INT GetRight() const {
+		return X+Width;
+	}
+	VOID GetSize(Size *size) const {
+		if (size != NULL) {
+			size->Width = Width;
+			size->Height = Height;
+		}
+	}
+	INT GetTop() const {
+		return Y;
+	}
+	BOOL IsEmptyArea() const {
+		return Width <= 0 || Height <= 0;
+	}
+	VOID Inflate(INT dx, INT dy) {
+		X -= dx;
+		Y -= dy;
+		Width += 2*dx;
+		Height += 2*dy;
+	}
+	VOID Inflate(const Point& point) {
+		Inflate(point.X, point.Y);
+	}
+	static BOOL Intersect(Rect& c, const Rect& a, const Rect& b) {
+		INT intersectLeft   = (a.X < b.X) ? b.X : a.X;
+		INT intersectTop    = (a.Y < b.Y) ? b.Y : a.Y; 
+		INT intersectRight  = (a.GetRight() < b.GetRight())
+					? a.GetRight() : b.GetRight();
+		INT intersectBottom = (a.GetBottom() < b.GetBottom())
+					? a.GetBottom() : b.GetBottom();
+		c.X = intersectLeft;
+		c.Y = intersectTop;
+		c.Width = intersectRight - intersectLeft;
+		c.Height = intersectBottom - intersectTop;
+		return !c.IsEmptyArea();  
+	}
+	BOOL Intersect(const Rect& rect) {
+		return Intersect(*this, *this, rect);
+	}
+	BOOL IntersectsWith(const Rect& rc) const {
+		INT intersectLeft   = (X < rc.X) ? rc.X : X;
+		INT intersectTop    = (Y < rc.Y) ? rc.Y : Y; 
+		INT intersectRight  = (GetRight() < rc.GetRight())
+					? GetRight() : rc.GetRight();
+		INT intersectBottom = (GetBottom() < rc.GetBottom())
+					? GetBottom() : rc.GetBottom();
+		return intersectLeft < intersectRight
+			&& intersectTop < intersectBottom;
+	}
+	VOID Offset(INT dx, INT dy) {
+		X += dx;
+		Y += dy;
+	}
+	VOID Offset(const Point& point) {
+		Offset(point.X, point.Y);
+	}
+	static BOOL Union(Rect& c, const Rect& a, const Rect& b) {
+		INT unionLeft   = (a.X < b.X) ? a.X : b.X;
+		INT unionTop    = (a.Y < b.Y) ? a.Y : b.Y; 
+		INT unionRight  = (a.GetRight() < b.GetRight())
+					? b.GetRight() : a.GetRight();
+		INT unionBottom = (a.GetBottom() < b.GetBottom())
+					? b.GetBottom() : a.GetBottom();
+		c.X = unionLeft;
+		c.Y = unionTop;
+		c.Width = unionRight - unionLeft;
+		c.Height = unionBottom - unionTop;
+		return !c.IsEmptyArea();
+	}
+	#endif /* __cplusplus */
+} Rect;
+
+typedef struct RectF {
+	REAL X;
+	REAL Y;
+	REAL Width;
+	REAL Height;
+
+	#ifdef __cplusplus
+	RectF(): X(0.0f), Y(0.0f), Width(0.0f), Height(0.0f) {}
+	RectF(const PointF& location, const SizeF& size):
+		X(location.X), Y(location.Y),
+		Width(size.Width), Height(size.Height) {}
+	RectF(REAL x, REAL y, REAL width, REAL height):
+		X(x), Y(y), Width(width), Height(height) {}
+	
+	RectF* Clone() const {
+		return new RectF(X, Y, Width, Height);
+	}
+	BOOL Contains(REAL x, REAL y) const {
+		return X <= x && Y <= y && x < X+Width && y < Y+Height;
+	}
+	BOOL Contains(const PointF& point) const {
+		return Contains(point.X, point.Y);
+	}
+	BOOL Contains(const RectF& rect) const {
+		return X <= rect.X && Y <= rect.Y
+			&& rect.X+rect.Width <= X+Width
+			&& rect.Y+rect.Height <= Y+Height;
+	}
+	BOOL Equals(const RectF& rect) const {
+		return X == rect.X && Y == rect.Y
+			&& Width == rect.Width && Height == rect.Height;
+	}
+	REAL GetBottom() const {
+		return Y+Height;
+	}
+	VOID GetBounds(RectF *rect) const {
+		if (rect != NULL) {
+			rect->X = X;
+			rect->Y = Y;
+			rect->Width = Width;
+			rect->Height = Height;
+		}
+	}
+	REAL GetLeft() const {
+		return X;
+	}
+	VOID GetLocation(PointF *point) const {
+		if (point != NULL) {
+			point->X = X;
+			point->Y = Y;
+		}
+	}
+	REAL GetRight() const {
+		return X+Width;
+	}
+	VOID GetSize(SizeF *size) const {
+		if (size != NULL) {
+			size->Width = Width;
+			size->Height = Height;
+		}
+	}
+	REAL GetTop() const {
+		return Y;
+	}
+	BOOL IsEmptyArea() const {
+		return Width <= 0.0f || Height <= 0.0f;
+	}
+	VOID Inflate(REAL dx, REAL dy) {
+		X -= dx;
+		Y -= dy;
+		Width += 2*dx;
+		Height += 2*dy;
+	}
+	VOID Inflate(const PointF& point) {
+		Inflate(point.X, point.Y);
+	}
+	static BOOL Intersect(RectF& c, const RectF& a, const RectF& b) {
+		INT intersectLeft   = (a.X < b.X) ? b.X : a.X;
+		INT intersectTop    = (a.Y < b.Y) ? b.Y : a.Y; 
+		INT intersectRight  = (a.GetRight() < b.GetRight())
+					? a.GetRight() : b.GetRight();
+		INT intersectBottom = (a.GetBottom() < b.GetBottom())
+					? a.GetBottom() : b.GetBottom();
+		c.X = intersectLeft;
+		c.Y = intersectTop;
+		c.Width = intersectRight - intersectLeft;
+		c.Height = intersectBottom - intersectTop;
+		return !c.IsEmptyArea();  
+	}
+	BOOL Intersect(const RectF& rect) {
+		return Intersect(*this, *this, rect);
+	}
+	BOOL IntersectsWith(const RectF& rc) const {
+		INT intersectLeft   = (X < rc.X) ? rc.X : X;
+		INT intersectTop    = (Y < rc.Y) ? rc.Y : Y; 
+		INT intersectRight  = (GetRight() < rc.GetRight())
+					? GetRight() : rc.GetRight();
+		INT intersectBottom = (GetBottom() < rc.GetBottom())
+					? GetBottom() : rc.GetBottom();
+		return intersectLeft < intersectRight
+			&& intersectTop < intersectBottom;
+	}
+	VOID Offset(REAL dx, REAL dy) {
+		X += dx;
+		Y += dy;
+	}
+	VOID Offset(const PointF& point) {
+		Offset(point.X, point.Y);
+	}
+	static BOOL Union(RectF& c, const RectF& a, const RectF& b) {
+		INT unionLeft   = (a.X < b.X) ? a.X : b.X;
+		INT unionTop    = (a.Y < b.Y) ? a.Y : b.Y; 
+		INT unionRight  = (a.GetRight() < b.GetRight())
+					? b.GetRight() : a.GetRight();
+		INT unionBottom = (a.GetBottom() < b.GetBottom())
+					? b.GetBottom() : a.GetBottom();
+		c.X = unionLeft;
+		c.Y = unionTop;
+		c.Width = unionRight - unionLeft;
+		c.Height = unionBottom - unionTop;
+		return !c.IsEmptyArea();
+	}
+	#endif /* __cplusplus */
+} RectF;
+
+/* FIXME: Are descendants of this class, when compiled with g++,
+   binary compatible with MSVC++ code (especially GDIPLUS.DLL of course)? */
+#ifdef __cplusplus
+struct GdiplusAbort {
+	virtual HRESULT __stdcall Abort(void) {}
+};
+#else
+typedef struct GdiplusAbort GdiplusAbort;  /* incomplete type */
+#endif
+
+typedef struct CharacterRange {
+	INT First;
+	INT Length;
+
+	#ifdef __cplusplus
+	CharacterRange(): First(0), Length(0) {}
+	CharacterRange(INT first, INT length): First(first), Length(length) {}
+	CharacterRange& operator=(const CharacterRange& rhs) {
+		/* This gracefully handles self-assignment */
+		First = rhs.First;
+		Length = rhs.Length;
+		return *this;
+	}
+	#endif /* __cplusplus */
+} CharacterRange;
+
+typedef struct PathData {
+	INT Count;
+	PointF *Points;
+	BYTE *Types;
+
+	#ifdef __cplusplus
+	friend class GraphicsPath;
+
+	PathData(): Count(0), Points(NULL), Types(NULL) {}
+	~PathData() {
+		FreeArrays();
+	}
+private:
+	/* used by GraphicsPath::GetPathData, defined in gdipluspath.h */
+	Status AllocateArrays(INT capacity);
+	VOID FreeArrays();
+	#endif /* __cplusplus */
+} PathData;
+
+/* Callback function types */
+/* FIXME: need a correct definition for these function pointer types */
+typedef void *DebugEventProc;
+typedef BOOL CALLBACK (*EnumerateMetafileProc)(EmfPlusRecordType,UINT,UINT,const BYTE*,VOID*);
+typedef void *DrawImageAbort;
+typedef void *GetThumbnailImageAbort;
+
+
+#endif /* __GDIPLUS_TYPES_H */
diff --git a/mingw-w64-libraries/libmangle/aclocal.m4 b/mingw-w64-libraries/libmangle/aclocal.m4
index 76b1880..76a1536 100644
--- a/mingw-w64-libraries/libmangle/aclocal.m4
+++ b/mingw-w64-libraries/libmangle/aclocal.m4
@@ -13,8 +13,8 @@
 
 m4_ifndef([AC_AUTOCONF_VERSION],
   [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
-m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.67],,
-[m4_warning([this file was generated for autoconf 2.67.
+m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.68],,
+[m4_warning([this file was generated for autoconf 2.68.
 You have another version of autoconf.  It may work, but is not guaranteed to.
 If you have problems, you may need to regenerate the build system entirely.
 To do so, use the procedure documented by the package, typically `autoreconf'.])])
diff --git a/mingw-w64-libraries/libmangle/configure b/mingw-w64-libraries/libmangle/configure
index 01abf9d..c96d73e 100755
--- a/mingw-w64-libraries/libmangle/configure
+++ b/mingw-w64-libraries/libmangle/configure
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.67 for mingw-w64-libmangle 1.0.
+# Generated by GNU Autoconf 2.68 for mingw-w64-libmangle 1.0.
 #
 # Report bugs to <mingw-w64-public@lists.sf.net>.
 #
@@ -91,6 +91,7 @@
 IFS=" ""	$as_nl"
 
 # Find who we are.  Look in the path if we contain no directory separator.
+as_myself=
 case $0 in #((
   *[\\/]* ) as_myself=$0 ;;
   *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -216,11 +217,18 @@
   # We cannot yet assume a decent shell, so we have to provide a
 	# neutralization value for shells without unset; and this also
 	# works around shells that cannot unset nonexistent variables.
+	# Preserve -v and -x to the replacement shell.
 	BASH_ENV=/dev/null
 	ENV=/dev/null
 	(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
 	export CONFIG_SHELL
-	exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"}
+	case $- in # ((((
+	  *v*x* | *x*v* ) as_opts=-vx ;;
+	  *v* ) as_opts=-v ;;
+	  *x* ) as_opts=-x ;;
+	  * ) as_opts= ;;
+	esac
+	exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"}
 fi
 
     if test x$as_have_required = xno; then :
@@ -1103,7 +1111,7 @@
     $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
     expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
       $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
-    : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
+    : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}"
     ;;
 
   esac
@@ -1398,7 +1406,7 @@
 if $ac_init_version; then
   cat <<\_ACEOF
 mingw-w64-libmangle configure 1.0
-generated by GNU Autoconf 2.67
+generated by GNU Autoconf 2.68
 
 Copyright (C) 2010 Free Software Foundation, Inc.
 This configure script is free software; the Free Software Foundation
@@ -1444,7 +1452,7 @@
 
 	ac_retval=1
 fi
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
   as_fn_set_status $ac_retval
 
 } # ac_fn_c_try_compile
@@ -1481,7 +1489,7 @@
 
     ac_retval=1
 fi
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
   as_fn_set_status $ac_retval
 
 } # ac_fn_c_try_cpp
@@ -1494,10 +1502,10 @@
 ac_fn_c_check_header_mongrel ()
 {
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  if eval "test \"\${$3+set}\"" = set; then :
+  if eval \${$3+:} false; then :
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
 $as_echo_n "checking for $2... " >&6; }
-if eval "test \"\${$3+set}\"" = set; then :
+if eval \${$3+:} false; then :
   $as_echo_n "(cached) " >&6
 fi
 eval ac_res=\$$3
@@ -1564,7 +1572,7 @@
 esac
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
 $as_echo_n "checking for $2... " >&6; }
-if eval "test \"\${$3+set}\"" = set; then :
+if eval \${$3+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   eval "$3=\$ac_header_compiler"
@@ -1573,7 +1581,7 @@
 	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
 fi
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
 
 } # ac_fn_c_check_header_mongrel
 
@@ -1614,7 +1622,7 @@
        ac_retval=$ac_status
 fi
   rm -rf conftest.dSYM conftest_ipa8_conftest.oo
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
   as_fn_set_status $ac_retval
 
 } # ac_fn_c_try_run
@@ -1628,7 +1636,7 @@
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
 $as_echo_n "checking for $2... " >&6; }
-if eval "test \"\${$3+set}\"" = set; then :
+if eval \${$3+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -1646,7 +1654,7 @@
 eval ac_res=\$$3
 	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
 
 } # ac_fn_c_check_header_compile
 
@@ -1659,7 +1667,7 @@
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
 $as_echo_n "checking for $2... " >&6; }
-if eval "test \"\${$3+set}\"" = set; then :
+if eval \${$3+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   eval "$3=no"
@@ -1700,7 +1708,7 @@
 eval ac_res=\$$3
 	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
 
 } # ac_fn_c_check_type
 
@@ -1713,7 +1721,7 @@
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for uint$2_t" >&5
 $as_echo_n "checking for uint$2_t... " >&6; }
-if eval "test \"\${$3+set}\"" = set; then :
+if eval \${$3+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   eval "$3=no"
@@ -1753,7 +1761,7 @@
 eval ac_res=\$$3
 	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
 
 } # ac_fn_c_find_uintX_t
 
@@ -1798,7 +1806,7 @@
   # interfere with the next link command; also delete a directory that is
   # left behind by Apple's compiler.  We do this before executing the actions.
   rm -rf conftest.dSYM conftest_ipa8_conftest.oo
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
   as_fn_set_status $ac_retval
 
 } # ac_fn_c_try_link
@@ -1811,7 +1819,7 @@
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
 $as_echo_n "checking for $2... " >&6; }
-if eval "test \"\${$3+set}\"" = set; then :
+if eval \${$3+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -1866,7 +1874,7 @@
 eval ac_res=\$$3
 	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
 
 } # ac_fn_c_check_func
 cat >config.log <<_ACEOF
@@ -1874,7 +1882,7 @@
 running configure, to aid debugging if configure makes a mistake.
 
 It was created by mingw-w64-libmangle $as_me 1.0, which was
-generated by GNU Autoconf 2.67.  Invocation command line was
+generated by GNU Autoconf 2.68.  Invocation command line was
 
   $ $0 $@
 
@@ -2273,7 +2281,7 @@
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
 $as_echo_n "checking for a BSD-compatible install... " >&6; }
 if test -z "$INSTALL"; then
-if test "${ac_cv_path_install+set}" = set; then :
+if ${ac_cv_path_install+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -2450,7 +2458,7 @@
 set dummy ${ac_tool_prefix}strip; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_STRIP+set}" = set; then :
+if ${ac_cv_prog_STRIP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$STRIP"; then
@@ -2490,7 +2498,7 @@
 set dummy strip; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then :
+if ${ac_cv_prog_ac_ct_STRIP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_STRIP"; then
@@ -2543,7 +2551,7 @@
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5
 $as_echo_n "checking for a thread-safe mkdir -p... " >&6; }
 if test -z "$MKDIR_P"; then
-  if test "${ac_cv_path_mkdir+set}" = set; then :
+  if ${ac_cv_path_mkdir+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -2594,7 +2602,7 @@
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_AWK+set}" = set; then :
+if ${ac_cv_prog_AWK+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$AWK"; then
@@ -2634,7 +2642,7 @@
 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
 set x ${MAKE-make}
 ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
-if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\"" = set; then :
+if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat >conftest.make <<\_ACEOF
@@ -2767,7 +2775,7 @@
 set dummy ${ac_tool_prefix}gcc; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then :
+if ${ac_cv_prog_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$CC"; then
@@ -2807,7 +2815,7 @@
 set dummy gcc; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then :
+if ${ac_cv_prog_ac_ct_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_CC"; then
@@ -2860,7 +2868,7 @@
 set dummy ${ac_tool_prefix}cc; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then :
+if ${ac_cv_prog_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$CC"; then
@@ -2900,7 +2908,7 @@
 set dummy cc; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then :
+if ${ac_cv_prog_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$CC"; then
@@ -2959,7 +2967,7 @@
 set dummy $ac_tool_prefix$ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then :
+if ${ac_cv_prog_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$CC"; then
@@ -3003,7 +3011,7 @@
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then :
+if ${ac_cv_prog_ac_ct_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_CC"; then
@@ -3286,7 +3294,7 @@
 ac_clean_files=$ac_clean_files_save
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
 $as_echo_n "checking for suffix of object files... " >&6; }
-if test "${ac_cv_objext+set}" = set; then :
+if ${ac_cv_objext+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -3337,7 +3345,7 @@
 ac_objext=$OBJEXT
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
-if test "${ac_cv_c_compiler_gnu+set}" = set; then :
+if ${ac_cv_c_compiler_gnu+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -3374,7 +3382,7 @@
 ac_save_CFLAGS=$CFLAGS
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
 $as_echo_n "checking whether $CC accepts -g... " >&6; }
-if test "${ac_cv_prog_cc_g+set}" = set; then :
+if ${ac_cv_prog_cc_g+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_save_c_werror_flag=$ac_c_werror_flag
@@ -3452,7 +3460,7 @@
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
-if test "${ac_cv_prog_cc_c89+set}" = set; then :
+if ${ac_cv_prog_cc_c89+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_cv_prog_cc_c89=no
@@ -3613,7 +3621,7 @@
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
 $as_echo_n "checking dependency style of $depcc... " >&6; }
-if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then :
+if ${am_cv_CC_dependencies_compiler_type+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
@@ -3741,7 +3749,7 @@
 set dummy ${ac_tool_prefix}ranlib; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_RANLIB+set}" = set; then :
+if ${ac_cv_prog_RANLIB+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$RANLIB"; then
@@ -3781,7 +3789,7 @@
 set dummy ranlib; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then :
+if ${ac_cv_prog_ac_ct_RANLIB+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_RANLIB"; then
@@ -3835,7 +3843,7 @@
 set dummy $ac_tool_prefix$ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_AR+set}" = set; then :
+if ${ac_cv_prog_AR+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$AR"; then
@@ -3879,7 +3887,7 @@
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_AR+set}" = set; then :
+if ${ac_cv_prog_ac_ct_AR+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_AR"; then
@@ -3945,7 +3953,7 @@
   CPP=
 fi
 if test -z "$CPP"; then
-  if test "${ac_cv_prog_CPP+set}" = set; then :
+  if ${ac_cv_prog_CPP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
       # Double quotes because CPP needs to be expanded
@@ -4073,7 +4081,7 @@
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
 $as_echo_n "checking for grep that handles long lines and -e... " >&6; }
-if test "${ac_cv_path_GREP+set}" = set; then :
+if ${ac_cv_path_GREP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -z "$GREP"; then
@@ -4136,7 +4144,7 @@
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
 $as_echo_n "checking for egrep... " >&6; }
-if test "${ac_cv_path_EGREP+set}" = set; then :
+if ${ac_cv_path_EGREP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
@@ -4203,7 +4211,7 @@
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
 $as_echo_n "checking for ANSI C header files... " >&6; }
-if test "${ac_cv_header_stdc+set}" = set; then :
+if ${ac_cv_header_stdc+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -4346,7 +4354,7 @@
 
 # Checks for typedefs, structures, and compiler characteristics.
 ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default"
-if test "x$ac_cv_type_size_t" = x""yes; then :
+if test "x$ac_cv_type_size_t" = xyes; then :
 
 else
 
@@ -4375,7 +4383,7 @@
 for ac_header in stdlib.h
 do :
   ac_fn_c_check_header_mongrel "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default"
-if test "x$ac_cv_header_stdlib_h" = x""yes; then :
+if test "x$ac_cv_header_stdlib_h" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_STDLIB_H 1
 _ACEOF
@@ -4386,7 +4394,7 @@
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU libc compatible malloc" >&5
 $as_echo_n "checking for GNU libc compatible malloc... " >&6; }
-if test "${ac_cv_func_malloc_0_nonnull+set}" = set; then :
+if ${ac_cv_func_malloc_0_nonnull+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test "$cross_compiling" = yes; then :
@@ -4518,10 +4526,21 @@
      :end' >>confcache
 if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
   if test -w "$cache_file"; then
-    test "x$cache_file" != "x/dev/null" &&
+    if test "x$cache_file" != "x/dev/null"; then
       { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
 $as_echo "$as_me: updating cache $cache_file" >&6;}
-    cat confcache >$cache_file
+      if test ! -f "$cache_file" || test -h "$cache_file"; then
+	cat confcache >"$cache_file"
+      else
+        case $cache_file in #(
+        */* | ?:*)
+	  mv -f confcache "$cache_file"$$ &&
+	  mv -f "$cache_file"$$ "$cache_file" ;; #(
+        *)
+	  mv -f confcache "$cache_file" ;;
+	esac
+      fi
+    fi
   else
     { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
@@ -4573,7 +4592,7 @@
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
 
-: ${CONFIG_STATUS=./config.status}
+: "${CONFIG_STATUS=./config.status}"
 ac_write_fail=0
 ac_clean_files_save=$ac_clean_files
 ac_clean_files="$ac_clean_files $CONFIG_STATUS"
@@ -4674,6 +4693,7 @@
 IFS=" ""	$as_nl"
 
 # Find who we are.  Look in the path if we contain no directory separator.
+as_myself=
 case $0 in #((
   *[\\/]* ) as_myself=$0 ;;
   *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -4981,7 +5001,7 @@
 # values after options handling.
 ac_log="
 This file was extended by mingw-w64-libmangle $as_me 1.0, which was
-generated by GNU Autoconf 2.67.  Invocation command line was
+generated by GNU Autoconf 2.68.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
   CONFIG_HEADERS  = $CONFIG_HEADERS
@@ -5047,7 +5067,7 @@
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
 mingw-w64-libmangle config.status 1.0
-configured by $0, generated by GNU Autoconf 2.67,
+configured by $0, generated by GNU Autoconf 2.68,
   with options \\"\$ac_cs_config\\"
 
 Copyright (C) 2010 Free Software Foundation, Inc.
@@ -5202,9 +5222,10 @@
 # after its creation but before its name has been assigned to `$tmp'.
 $debug ||
 {
-  tmp=
+  tmp= ac_tmp=
   trap 'exit_status=$?
-  { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status
+  : "${ac_tmp:=$tmp}"
+  { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status
 ' 0
   trap 'as_fn_exit 1' 1 2 13 15
 }
@@ -5212,12 +5233,13 @@
 
 {
   tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
-  test -n "$tmp" && test -d "$tmp"
+  test -d "$tmp"
 }  ||
 {
   tmp=./conf$$-$RANDOM
   (umask 077 && mkdir "$tmp")
 } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5
+ac_tmp=$tmp
 
 # Set up the scripts for CONFIG_FILES section.
 # No need to generate them if there are no CONFIG_FILES.
@@ -5239,7 +5261,7 @@
   ac_cs_awk_cr=$ac_cr
 fi
 
-echo 'BEGIN {' >"$tmp/subs1.awk" &&
+echo 'BEGIN {' >"$ac_tmp/subs1.awk" &&
 _ACEOF
 
 
@@ -5267,7 +5289,7 @@
 rm -f conf$$subs.sh
 
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-cat >>"\$tmp/subs1.awk" <<\\_ACAWK &&
+cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK &&
 _ACEOF
 sed -n '
 h
@@ -5315,7 +5337,7 @@
 rm -f conf$$subs.awk
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 _ACAWK
-cat >>"\$tmp/subs1.awk" <<_ACAWK &&
+cat >>"\$ac_tmp/subs1.awk" <<_ACAWK &&
   for (key in S) S_is_set[key] = 1
   FS = ""
 
@@ -5347,7 +5369,7 @@
   sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
 else
   cat
-fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \
+fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \
   || as_fn_error $? "could not setup config files machinery" "$LINENO" 5
 _ACEOF
 
@@ -5381,7 +5403,7 @@
 # No need to generate them if there are no CONFIG_HEADERS.
 # This happens for instance with `./config.status Makefile'.
 if test -n "$CONFIG_HEADERS"; then
-cat >"$tmp/defines.awk" <<\_ACAWK ||
+cat >"$ac_tmp/defines.awk" <<\_ACAWK ||
 BEGIN {
 _ACEOF
 
@@ -5393,8 +5415,8 @@
 # handling of long lines.
 ac_delim='%!_!# '
 for ac_last_try in false false :; do
-  ac_t=`sed -n "/$ac_delim/p" confdefs.h`
-  if test -z "$ac_t"; then
+  ac_tt=`sed -n "/$ac_delim/p" confdefs.h`
+  if test -z "$ac_tt"; then
     break
   elif $ac_last_try; then
     as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5
@@ -5514,7 +5536,7 @@
     for ac_f
     do
       case $ac_f in
-      -) ac_f="$tmp/stdin";;
+      -) ac_f="$ac_tmp/stdin";;
       *) # Look for the file first in the build tree, then in the source tree
 	 # (if the path is not absolute).  The absolute path cannot be DOS-style,
 	 # because $ac_f cannot contain `:'.
@@ -5549,7 +5571,7 @@
     esac
 
     case $ac_tag in
-    *:-:* | *:-) cat >"$tmp/stdin" \
+    *:-:* | *:-) cat >"$ac_tmp/stdin" \
       || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;;
     esac
     ;;
@@ -5686,21 +5708,22 @@
 s&@MKDIR_P@&$ac_MKDIR_P&;t t
 $ac_datarootdir_hack
 "
-eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \
-  || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \
+  >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5
 
 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
-  { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } &&
-  { ac_out=`sed -n '/^[	 ]*datarootdir[	 ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } &&
+  { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
+  { ac_out=`sed -n '/^[	 ]*datarootdir[	 ]*:*=/p' \
+      "$ac_tmp/out"`; test -z "$ac_out"; } &&
   { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
 which seems to be undefined.  Please make sure it is defined" >&5
 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
 which seems to be undefined.  Please make sure it is defined" >&2;}
 
-  rm -f "$tmp/stdin"
+  rm -f "$ac_tmp/stdin"
   case $ac_file in
-  -) cat "$tmp/out" && rm -f "$tmp/out";;
-  *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";;
+  -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";;
+  *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";;
   esac \
   || as_fn_error $? "could not create $ac_file" "$LINENO" 5
  ;;
@@ -5711,20 +5734,20 @@
   if test x"$ac_file" != x-; then
     {
       $as_echo "/* $configure_input  */" \
-      && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs"
-    } >"$tmp/config.h" \
+      && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs"
+    } >"$ac_tmp/config.h" \
       || as_fn_error $? "could not create $ac_file" "$LINENO" 5
-    if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then
+    if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then
       { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5
 $as_echo "$as_me: $ac_file is unchanged" >&6;}
     else
       rm -f "$ac_file"
-      mv "$tmp/config.h" "$ac_file" \
+      mv "$ac_tmp/config.h" "$ac_file" \
 	|| as_fn_error $? "could not create $ac_file" "$LINENO" 5
     fi
   else
     $as_echo "/* $configure_input  */" \
-      && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \
+      && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \
       || as_fn_error $? "could not create -" "$LINENO" 5
   fi
 # Compute "$ac_file"'s index in $config_headers.
diff --git a/mingw-w64-libraries/pseh/aclocal.m4 b/mingw-w64-libraries/pseh/aclocal.m4
index 1f8ca69..7730115 100644
--- a/mingw-w64-libraries/pseh/aclocal.m4
+++ b/mingw-w64-libraries/pseh/aclocal.m4
@@ -13,8 +13,8 @@
 
 m4_ifndef([AC_AUTOCONF_VERSION],
   [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
-m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.67],,
-[m4_warning([this file was generated for autoconf 2.67.
+m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.68],,
+[m4_warning([this file was generated for autoconf 2.68.
 You have another version of autoconf.  It may work, but is not guaranteed to.
 If you have problems, you may need to regenerate the build system entirely.
 To do so, use the procedure documented by the package, typically `autoreconf'.])])
diff --git a/mingw-w64-libraries/pseh/configure b/mingw-w64-libraries/pseh/configure
index d97b45c..f177a21 100755
--- a/mingw-w64-libraries/pseh/configure
+++ b/mingw-w64-libraries/pseh/configure
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.67 for PSEH 2.0.
+# Generated by GNU Autoconf 2.68 for PSEH 2.0.
 #
 # Report bugs to <hackbunny@reactos.org>.
 #
@@ -91,6 +91,7 @@
 IFS=" ""	$as_nl"
 
 # Find who we are.  Look in the path if we contain no directory separator.
+as_myself=
 case $0 in #((
   *[\\/]* ) as_myself=$0 ;;
   *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -216,11 +217,18 @@
   # We cannot yet assume a decent shell, so we have to provide a
 	# neutralization value for shells without unset; and this also
 	# works around shells that cannot unset nonexistent variables.
+	# Preserve -v and -x to the replacement shell.
 	BASH_ENV=/dev/null
 	ENV=/dev/null
 	(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
 	export CONFIG_SHELL
-	exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"}
+	case $- in # ((((
+	  *v*x* | *x*v* ) as_opts=-vx ;;
+	  *v* ) as_opts=-v ;;
+	  *x* ) as_opts=-x ;;
+	  * ) as_opts= ;;
+	esac
+	exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"}
 fi
 
     if test x$as_have_required = xno; then :
@@ -1112,7 +1120,7 @@
     $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
     expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
       $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
-    : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
+    : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}"
     ;;
 
   esac
@@ -1410,7 +1418,7 @@
 if $ac_init_version; then
   cat <<\_ACEOF
 PSEH configure 2.0
-generated by GNU Autoconf 2.67
+generated by GNU Autoconf 2.68
 
 Copyright (C) 2010 Free Software Foundation, Inc.
 This configure script is free software; the Free Software Foundation
@@ -1456,7 +1464,7 @@
 
 	ac_retval=1
 fi
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
   as_fn_set_status $ac_retval
 
 } # ac_fn_c_try_compile
@@ -1493,7 +1501,7 @@
 
     ac_retval=1
 fi
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
   as_fn_set_status $ac_retval
 
 } # ac_fn_c_try_cpp
@@ -1506,10 +1514,10 @@
 ac_fn_c_check_header_mongrel ()
 {
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  if eval "test \"\${$3+set}\"" = set; then :
+  if eval \${$3+:} false; then :
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
 $as_echo_n "checking for $2... " >&6; }
-if eval "test \"\${$3+set}\"" = set; then :
+if eval \${$3+:} false; then :
   $as_echo_n "(cached) " >&6
 fi
 eval ac_res=\$$3
@@ -1576,7 +1584,7 @@
 esac
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
 $as_echo_n "checking for $2... " >&6; }
-if eval "test \"\${$3+set}\"" = set; then :
+if eval \${$3+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   eval "$3=\$ac_header_compiler"
@@ -1585,7 +1593,7 @@
 	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
 fi
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
 
 } # ac_fn_c_check_header_mongrel
 
@@ -1626,7 +1634,7 @@
        ac_retval=$ac_status
 fi
   rm -rf conftest.dSYM conftest_ipa8_conftest.oo
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
   as_fn_set_status $ac_retval
 
 } # ac_fn_c_try_run
@@ -1640,7 +1648,7 @@
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
 $as_echo_n "checking for $2... " >&6; }
-if eval "test \"\${$3+set}\"" = set; then :
+if eval \${$3+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -1658,7 +1666,7 @@
 eval ac_res=\$$3
 	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
 
 } # ac_fn_c_check_header_compile
 cat >config.log <<_ACEOF
@@ -1666,7 +1674,7 @@
 running configure, to aid debugging if configure makes a mistake.
 
 It was created by PSEH $as_me 2.0, which was
-generated by GNU Autoconf 2.67.  Invocation command line was
+generated by GNU Autoconf 2.68.  Invocation command line was
 
   $ $0 $@
 
@@ -2065,7 +2073,7 @@
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
 $as_echo_n "checking for a BSD-compatible install... " >&6; }
 if test -z "$INSTALL"; then
-if test "${ac_cv_path_install+set}" = set; then :
+if ${ac_cv_path_install+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -2242,7 +2250,7 @@
 set dummy ${ac_tool_prefix}strip; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_STRIP+set}" = set; then :
+if ${ac_cv_prog_STRIP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$STRIP"; then
@@ -2282,7 +2290,7 @@
 set dummy strip; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then :
+if ${ac_cv_prog_ac_ct_STRIP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_STRIP"; then
@@ -2335,7 +2343,7 @@
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5
 $as_echo_n "checking for a thread-safe mkdir -p... " >&6; }
 if test -z "$MKDIR_P"; then
-  if test "${ac_cv_path_mkdir+set}" = set; then :
+  if ${ac_cv_path_mkdir+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -2386,7 +2394,7 @@
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_AWK+set}" = set; then :
+if ${ac_cv_prog_AWK+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$AWK"; then
@@ -2426,7 +2434,7 @@
 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
 set x ${MAKE-make}
 ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
-if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\"" = set; then :
+if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat >conftest.make <<\_ACEOF
@@ -2531,7 +2539,7 @@
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
 $as_echo_n "checking build system type... " >&6; }
-if test "${ac_cv_build+set}" = set; then :
+if ${ac_cv_build+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_build_alias=$build_alias
@@ -2565,7 +2573,7 @@
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
 $as_echo_n "checking host system type... " >&6; }
-if test "${ac_cv_host+set}" = set; then :
+if ${ac_cv_host+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test "x$host_alias" = x; then
@@ -2617,7 +2625,7 @@
 set dummy ${ac_tool_prefix}gcc; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then :
+if ${ac_cv_prog_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$CC"; then
@@ -2657,7 +2665,7 @@
 set dummy gcc; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then :
+if ${ac_cv_prog_ac_ct_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_CC"; then
@@ -2710,7 +2718,7 @@
 set dummy ${ac_tool_prefix}cc; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then :
+if ${ac_cv_prog_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$CC"; then
@@ -2750,7 +2758,7 @@
 set dummy cc; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then :
+if ${ac_cv_prog_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$CC"; then
@@ -2809,7 +2817,7 @@
 set dummy $ac_tool_prefix$ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then :
+if ${ac_cv_prog_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$CC"; then
@@ -2853,7 +2861,7 @@
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then :
+if ${ac_cv_prog_ac_ct_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_CC"; then
@@ -3136,7 +3144,7 @@
 ac_clean_files=$ac_clean_files_save
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
 $as_echo_n "checking for suffix of object files... " >&6; }
-if test "${ac_cv_objext+set}" = set; then :
+if ${ac_cv_objext+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -3187,7 +3195,7 @@
 ac_objext=$OBJEXT
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
-if test "${ac_cv_c_compiler_gnu+set}" = set; then :
+if ${ac_cv_c_compiler_gnu+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -3224,7 +3232,7 @@
 ac_save_CFLAGS=$CFLAGS
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
 $as_echo_n "checking whether $CC accepts -g... " >&6; }
-if test "${ac_cv_prog_cc_g+set}" = set; then :
+if ${ac_cv_prog_cc_g+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_save_c_werror_flag=$ac_c_werror_flag
@@ -3302,7 +3310,7 @@
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
-if test "${ac_cv_prog_cc_c89+set}" = set; then :
+if ${ac_cv_prog_cc_c89+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_cv_prog_cc_c89=no
@@ -3463,7 +3471,7 @@
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
 $as_echo_n "checking dependency style of $depcc... " >&6; }
-if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then :
+if ${am_cv_CC_dependencies_compiler_type+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
@@ -3591,7 +3599,7 @@
 set dummy ${ac_tool_prefix}ranlib; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_RANLIB+set}" = set; then :
+if ${ac_cv_prog_RANLIB+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$RANLIB"; then
@@ -3631,7 +3639,7 @@
 set dummy ranlib; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then :
+if ${ac_cv_prog_ac_ct_RANLIB+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_RANLIB"; then
@@ -3689,7 +3697,7 @@
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
 $as_echo_n "checking dependency style of $depcc... " >&6; }
-if test "${am_cv_CCAS_dependencies_compiler_type+set}" = set; then :
+if ${am_cv_CCAS_dependencies_compiler_type+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
@@ -3827,7 +3835,7 @@
   CPP=
 fi
 if test -z "$CPP"; then
-  if test "${ac_cv_prog_CPP+set}" = set; then :
+  if ${ac_cv_prog_CPP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
       # Double quotes because CPP needs to be expanded
@@ -3955,7 +3963,7 @@
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
 $as_echo_n "checking for grep that handles long lines and -e... " >&6; }
-if test "${ac_cv_path_GREP+set}" = set; then :
+if ${ac_cv_path_GREP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -z "$GREP"; then
@@ -4018,7 +4026,7 @@
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
 $as_echo_n "checking for egrep... " >&6; }
-if test "${ac_cv_path_EGREP+set}" = set; then :
+if ${ac_cv_path_EGREP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
@@ -4085,7 +4093,7 @@
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
 $as_echo_n "checking for ANSI C header files... " >&6; }
-if test "${ac_cv_header_stdc+set}" = set; then :
+if ${ac_cv_header_stdc+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -4215,7 +4223,7 @@
 for ac_header in stddef.h
 do :
   ac_fn_c_check_header_mongrel "$LINENO" "stddef.h" "ac_cv_header_stddef_h" "$ac_includes_default"
-if test "x$ac_cv_header_stddef_h" = x""yes; then :
+if test "x$ac_cv_header_stddef_h" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_STDDEF_H 1
 _ACEOF
@@ -4295,10 +4303,21 @@
      :end' >>confcache
 if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
   if test -w "$cache_file"; then
-    test "x$cache_file" != "x/dev/null" &&
+    if test "x$cache_file" != "x/dev/null"; then
       { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
 $as_echo "$as_me: updating cache $cache_file" >&6;}
-    cat confcache >$cache_file
+      if test ! -f "$cache_file" || test -h "$cache_file"; then
+	cat confcache >"$cache_file"
+      else
+        case $cache_file in #(
+        */* | ?:*)
+	  mv -f confcache "$cache_file"$$ &&
+	  mv -f "$cache_file"$$ "$cache_file" ;; #(
+        *)
+	  mv -f confcache "$cache_file" ;;
+	esac
+      fi
+    fi
   else
     { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
@@ -4350,7 +4369,7 @@
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
 
-: ${CONFIG_STATUS=./config.status}
+: "${CONFIG_STATUS=./config.status}"
 ac_write_fail=0
 ac_clean_files_save=$ac_clean_files
 ac_clean_files="$ac_clean_files $CONFIG_STATUS"
@@ -4451,6 +4470,7 @@
 IFS=" ""	$as_nl"
 
 # Find who we are.  Look in the path if we contain no directory separator.
+as_myself=
 case $0 in #((
   *[\\/]* ) as_myself=$0 ;;
   *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -4758,7 +4778,7 @@
 # values after options handling.
 ac_log="
 This file was extended by PSEH $as_me 2.0, which was
-generated by GNU Autoconf 2.67.  Invocation command line was
+generated by GNU Autoconf 2.68.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
   CONFIG_HEADERS  = $CONFIG_HEADERS
@@ -4824,7 +4844,7 @@
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
 PSEH config.status 2.0
-configured by $0, generated by GNU Autoconf 2.67,
+configured by $0, generated by GNU Autoconf 2.68,
   with options \\"\$ac_cs_config\\"
 
 Copyright (C) 2010 Free Software Foundation, Inc.
@@ -4979,9 +4999,10 @@
 # after its creation but before its name has been assigned to `$tmp'.
 $debug ||
 {
-  tmp=
+  tmp= ac_tmp=
   trap 'exit_status=$?
-  { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status
+  : "${ac_tmp:=$tmp}"
+  { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status
 ' 0
   trap 'as_fn_exit 1' 1 2 13 15
 }
@@ -4989,12 +5010,13 @@
 
 {
   tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
-  test -n "$tmp" && test -d "$tmp"
+  test -d "$tmp"
 }  ||
 {
   tmp=./conf$$-$RANDOM
   (umask 077 && mkdir "$tmp")
 } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5
+ac_tmp=$tmp
 
 # Set up the scripts for CONFIG_FILES section.
 # No need to generate them if there are no CONFIG_FILES.
@@ -5016,7 +5038,7 @@
   ac_cs_awk_cr=$ac_cr
 fi
 
-echo 'BEGIN {' >"$tmp/subs1.awk" &&
+echo 'BEGIN {' >"$ac_tmp/subs1.awk" &&
 _ACEOF
 
 
@@ -5044,7 +5066,7 @@
 rm -f conf$$subs.sh
 
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-cat >>"\$tmp/subs1.awk" <<\\_ACAWK &&
+cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK &&
 _ACEOF
 sed -n '
 h
@@ -5092,7 +5114,7 @@
 rm -f conf$$subs.awk
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 _ACAWK
-cat >>"\$tmp/subs1.awk" <<_ACAWK &&
+cat >>"\$ac_tmp/subs1.awk" <<_ACAWK &&
   for (key in S) S_is_set[key] = 1
   FS = ""
 
@@ -5124,7 +5146,7 @@
   sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
 else
   cat
-fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \
+fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \
   || as_fn_error $? "could not setup config files machinery" "$LINENO" 5
 _ACEOF
 
@@ -5158,7 +5180,7 @@
 # No need to generate them if there are no CONFIG_HEADERS.
 # This happens for instance with `./config.status Makefile'.
 if test -n "$CONFIG_HEADERS"; then
-cat >"$tmp/defines.awk" <<\_ACAWK ||
+cat >"$ac_tmp/defines.awk" <<\_ACAWK ||
 BEGIN {
 _ACEOF
 
@@ -5170,8 +5192,8 @@
 # handling of long lines.
 ac_delim='%!_!# '
 for ac_last_try in false false :; do
-  ac_t=`sed -n "/$ac_delim/p" confdefs.h`
-  if test -z "$ac_t"; then
+  ac_tt=`sed -n "/$ac_delim/p" confdefs.h`
+  if test -z "$ac_tt"; then
     break
   elif $ac_last_try; then
     as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5
@@ -5291,7 +5313,7 @@
     for ac_f
     do
       case $ac_f in
-      -) ac_f="$tmp/stdin";;
+      -) ac_f="$ac_tmp/stdin";;
       *) # Look for the file first in the build tree, then in the source tree
 	 # (if the path is not absolute).  The absolute path cannot be DOS-style,
 	 # because $ac_f cannot contain `:'.
@@ -5326,7 +5348,7 @@
     esac
 
     case $ac_tag in
-    *:-:* | *:-) cat >"$tmp/stdin" \
+    *:-:* | *:-) cat >"$ac_tmp/stdin" \
       || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;;
     esac
     ;;
@@ -5463,21 +5485,22 @@
 s&@MKDIR_P@&$ac_MKDIR_P&;t t
 $ac_datarootdir_hack
 "
-eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \
-  || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \
+  >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5
 
 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
-  { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } &&
-  { ac_out=`sed -n '/^[	 ]*datarootdir[	 ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } &&
+  { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
+  { ac_out=`sed -n '/^[	 ]*datarootdir[	 ]*:*=/p' \
+      "$ac_tmp/out"`; test -z "$ac_out"; } &&
   { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
 which seems to be undefined.  Please make sure it is defined" >&5
 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
 which seems to be undefined.  Please make sure it is defined" >&2;}
 
-  rm -f "$tmp/stdin"
+  rm -f "$ac_tmp/stdin"
   case $ac_file in
-  -) cat "$tmp/out" && rm -f "$tmp/out";;
-  *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";;
+  -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";;
+  *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";;
   esac \
   || as_fn_error $? "could not create $ac_file" "$LINENO" 5
  ;;
@@ -5488,20 +5511,20 @@
   if test x"$ac_file" != x-; then
     {
       $as_echo "/* $configure_input  */" \
-      && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs"
-    } >"$tmp/config.h" \
+      && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs"
+    } >"$ac_tmp/config.h" \
       || as_fn_error $? "could not create $ac_file" "$LINENO" 5
-    if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then
+    if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then
       { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5
 $as_echo "$as_me: $ac_file is unchanged" >&6;}
     else
       rm -f "$ac_file"
-      mv "$tmp/config.h" "$ac_file" \
+      mv "$ac_tmp/config.h" "$ac_file" \
 	|| as_fn_error $? "could not create $ac_file" "$LINENO" 5
     fi
   else
     $as_echo "/* $configure_input  */" \
-      && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \
+      && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \
       || as_fn_error $? "could not create -" "$LINENO" 5
   fi
 # Compute "$ac_file"'s index in $config_headers.
diff --git a/mingw-w64-tools/gendef/aclocal.m4 b/mingw-w64-tools/gendef/aclocal.m4
index 76b1880..76a1536 100644
--- a/mingw-w64-tools/gendef/aclocal.m4
+++ b/mingw-w64-tools/gendef/aclocal.m4
@@ -13,8 +13,8 @@
 
 m4_ifndef([AC_AUTOCONF_VERSION],
   [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
-m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.67],,
-[m4_warning([this file was generated for autoconf 2.67.
+m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.68],,
+[m4_warning([this file was generated for autoconf 2.68.
 You have another version of autoconf.  It may work, but is not guaranteed to.
 If you have problems, you may need to regenerate the build system entirely.
 To do so, use the procedure documented by the package, typically `autoreconf'.])])
diff --git a/mingw-w64-tools/gendef/configure b/mingw-w64-tools/gendef/configure
index 907e71c..beb61d3 100755
--- a/mingw-w64-tools/gendef/configure
+++ b/mingw-w64-tools/gendef/configure
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.67 for mingw-w64-gendef 1.0.
+# Generated by GNU Autoconf 2.68 for mingw-w64-gendef 1.0.
 #
 # Report bugs to <mingw-w64-public@lists.sourceforge.net>.
 #
@@ -91,6 +91,7 @@
 IFS=" ""	$as_nl"
 
 # Find who we are.  Look in the path if we contain no directory separator.
+as_myself=
 case $0 in #((
   *[\\/]* ) as_myself=$0 ;;
   *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -216,11 +217,18 @@
   # We cannot yet assume a decent shell, so we have to provide a
 	# neutralization value for shells without unset; and this also
 	# works around shells that cannot unset nonexistent variables.
+	# Preserve -v and -x to the replacement shell.
 	BASH_ENV=/dev/null
 	ENV=/dev/null
 	(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
 	export CONFIG_SHELL
-	exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"}
+	case $- in # ((((
+	  *v*x* | *x*v* ) as_opts=-vx ;;
+	  *v* ) as_opts=-v ;;
+	  *x* ) as_opts=-x ;;
+	  * ) as_opts= ;;
+	esac
+	exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"}
 fi
 
     if test x$as_have_required = xno; then :
@@ -1112,7 +1120,7 @@
     $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
     expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
       $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
-    : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
+    : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}"
     ;;
 
   esac
@@ -1417,7 +1425,7 @@
 if $ac_init_version; then
   cat <<\_ACEOF
 mingw-w64-gendef configure 1.0
-generated by GNU Autoconf 2.67
+generated by GNU Autoconf 2.68
 
 Copyright (C) 2010 Free Software Foundation, Inc.
 This configure script is free software; the Free Software Foundation
@@ -1463,7 +1471,7 @@
 
 	ac_retval=1
 fi
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
   as_fn_set_status $ac_retval
 
 } # ac_fn_c_try_compile
@@ -1500,7 +1508,7 @@
 
     ac_retval=1
 fi
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
   as_fn_set_status $ac_retval
 
 } # ac_fn_c_try_cpp
@@ -1513,10 +1521,10 @@
 ac_fn_c_check_header_mongrel ()
 {
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  if eval "test \"\${$3+set}\"" = set; then :
+  if eval \${$3+:} false; then :
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
 $as_echo_n "checking for $2... " >&6; }
-if eval "test \"\${$3+set}\"" = set; then :
+if eval \${$3+:} false; then :
   $as_echo_n "(cached) " >&6
 fi
 eval ac_res=\$$3
@@ -1583,7 +1591,7 @@
 esac
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
 $as_echo_n "checking for $2... " >&6; }
-if eval "test \"\${$3+set}\"" = set; then :
+if eval \${$3+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   eval "$3=\$ac_header_compiler"
@@ -1592,7 +1600,7 @@
 	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
 fi
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
 
 } # ac_fn_c_check_header_mongrel
 
@@ -1633,7 +1641,7 @@
        ac_retval=$ac_status
 fi
   rm -rf conftest.dSYM conftest_ipa8_conftest.oo
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
   as_fn_set_status $ac_retval
 
 } # ac_fn_c_try_run
@@ -1647,7 +1655,7 @@
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
 $as_echo_n "checking for $2... " >&6; }
-if eval "test \"\${$3+set}\"" = set; then :
+if eval \${$3+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -1665,7 +1673,7 @@
 eval ac_res=\$$3
 	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
 
 } # ac_fn_c_check_header_compile
 
@@ -1710,7 +1718,7 @@
   # interfere with the next link command; also delete a directory that is
   # left behind by Apple's compiler.  We do this before executing the actions.
   rm -rf conftest.dSYM conftest_ipa8_conftest.oo
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
   as_fn_set_status $ac_retval
 
 } # ac_fn_c_try_link
@@ -1724,7 +1732,7 @@
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for int$2_t" >&5
 $as_echo_n "checking for int$2_t... " >&6; }
-if eval "test \"\${$3+set}\"" = set; then :
+if eval \${$3+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   eval "$3=no"
@@ -1785,7 +1793,7 @@
 eval ac_res=\$$3
 	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
 
 } # ac_fn_c_find_intX_t
 
@@ -1798,7 +1806,7 @@
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
 $as_echo_n "checking for $2... " >&6; }
-if eval "test \"\${$3+set}\"" = set; then :
+if eval \${$3+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   eval "$3=no"
@@ -1839,7 +1847,7 @@
 eval ac_res=\$$3
 	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
 
 } # ac_fn_c_check_type
 
@@ -1852,7 +1860,7 @@
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for uint$2_t" >&5
 $as_echo_n "checking for uint$2_t... " >&6; }
-if eval "test \"\${$3+set}\"" = set; then :
+if eval \${$3+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   eval "$3=no"
@@ -1892,7 +1900,7 @@
 eval ac_res=\$$3
 	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
 
 } # ac_fn_c_find_uintX_t
 
@@ -1904,7 +1912,7 @@
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
 $as_echo_n "checking for $2... " >&6; }
-if eval "test \"\${$3+set}\"" = set; then :
+if eval \${$3+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -1959,7 +1967,7 @@
 eval ac_res=\$$3
 	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
 
 } # ac_fn_c_check_func
 cat >config.log <<_ACEOF
@@ -1967,7 +1975,7 @@
 running configure, to aid debugging if configure makes a mistake.
 
 It was created by mingw-w64-gendef $as_me 1.0, which was
-generated by GNU Autoconf 2.67.  Invocation command line was
+generated by GNU Autoconf 2.68.  Invocation command line was
 
   $ $0 $@
 
@@ -2366,7 +2374,7 @@
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
 $as_echo_n "checking for a BSD-compatible install... " >&6; }
 if test -z "$INSTALL"; then
-if test "${ac_cv_path_install+set}" = set; then :
+if ${ac_cv_path_install+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -2543,7 +2551,7 @@
 set dummy ${ac_tool_prefix}strip; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_STRIP+set}" = set; then :
+if ${ac_cv_prog_STRIP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$STRIP"; then
@@ -2583,7 +2591,7 @@
 set dummy strip; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then :
+if ${ac_cv_prog_ac_ct_STRIP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_STRIP"; then
@@ -2636,7 +2644,7 @@
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5
 $as_echo_n "checking for a thread-safe mkdir -p... " >&6; }
 if test -z "$MKDIR_P"; then
-  if test "${ac_cv_path_mkdir+set}" = set; then :
+  if ${ac_cv_path_mkdir+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -2687,7 +2695,7 @@
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_AWK+set}" = set; then :
+if ${ac_cv_prog_AWK+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$AWK"; then
@@ -2727,7 +2735,7 @@
 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
 set x ${MAKE-make}
 ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
-if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\"" = set; then :
+if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat >conftest.make <<\_ACEOF
@@ -2855,7 +2863,7 @@
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
 $as_echo_n "checking build system type... " >&6; }
-if test "${ac_cv_build+set}" = set; then :
+if ${ac_cv_build+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_build_alias=$build_alias
@@ -2889,7 +2897,7 @@
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
 $as_echo_n "checking host system type... " >&6; }
-if test "${ac_cv_host+set}" = set; then :
+if ${ac_cv_host+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test "x$host_alias" = x; then
@@ -2932,7 +2940,7 @@
 set dummy ${ac_tool_prefix}gcc; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then :
+if ${ac_cv_prog_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$CC"; then
@@ -2972,7 +2980,7 @@
 set dummy gcc; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then :
+if ${ac_cv_prog_ac_ct_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_CC"; then
@@ -3025,7 +3033,7 @@
 set dummy ${ac_tool_prefix}cc; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then :
+if ${ac_cv_prog_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$CC"; then
@@ -3065,7 +3073,7 @@
 set dummy cc; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then :
+if ${ac_cv_prog_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$CC"; then
@@ -3124,7 +3132,7 @@
 set dummy $ac_tool_prefix$ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then :
+if ${ac_cv_prog_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$CC"; then
@@ -3168,7 +3176,7 @@
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then :
+if ${ac_cv_prog_ac_ct_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_CC"; then
@@ -3451,7 +3459,7 @@
 ac_clean_files=$ac_clean_files_save
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
 $as_echo_n "checking for suffix of object files... " >&6; }
-if test "${ac_cv_objext+set}" = set; then :
+if ${ac_cv_objext+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -3502,7 +3510,7 @@
 ac_objext=$OBJEXT
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
-if test "${ac_cv_c_compiler_gnu+set}" = set; then :
+if ${ac_cv_c_compiler_gnu+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -3539,7 +3547,7 @@
 ac_save_CFLAGS=$CFLAGS
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
 $as_echo_n "checking whether $CC accepts -g... " >&6; }
-if test "${ac_cv_prog_cc_g+set}" = set; then :
+if ${ac_cv_prog_cc_g+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_save_c_werror_flag=$ac_c_werror_flag
@@ -3617,7 +3625,7 @@
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
-if test "${ac_cv_prog_cc_c89+set}" = set; then :
+if ${ac_cv_prog_cc_c89+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_cv_prog_cc_c89=no
@@ -3778,7 +3786,7 @@
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
 $as_echo_n "checking dependency style of $depcc... " >&6; }
-if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then :
+if ${am_cv_CC_dependencies_compiler_type+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
@@ -3936,7 +3944,7 @@
   CPP=
 fi
 if test -z "$CPP"; then
-  if test "${ac_cv_prog_CPP+set}" = set; then :
+  if ${ac_cv_prog_CPP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
       # Double quotes because CPP needs to be expanded
@@ -4064,7 +4072,7 @@
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
 $as_echo_n "checking for grep that handles long lines and -e... " >&6; }
-if test "${ac_cv_path_GREP+set}" = set; then :
+if ${ac_cv_path_GREP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -z "$GREP"; then
@@ -4127,7 +4135,7 @@
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
 $as_echo_n "checking for egrep... " >&6; }
-if test "${ac_cv_path_EGREP+set}" = set; then :
+if ${ac_cv_path_EGREP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
@@ -4194,7 +4202,7 @@
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
 $as_echo_n "checking for ANSI C header files... " >&6; }
-if test "${ac_cv_header_stdc+set}" = set; then :
+if ${ac_cv_header_stdc+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -4321,9 +4329,9 @@
 done
 
 
-if test "x$with_mangle_result" = x""yes; then :
+if test "x$with_mangle_result" = xyes; then :
 
-  if test "${with_mangle_path+set}" = set; then :
+  if ${with_mangle_path+:} false; then :
 
     extra_cppflags="-I$with_mangle_path/include"
     extra_ldflags="-L$with_mangle_path/lib"
@@ -4333,7 +4341,7 @@
     CPPFLAGS="$CPPFLAGS -I$with_mangle_path/include"
     LDFLAGS="$LDFLAGS -L$with_mangle_path/lib"
   ac_fn_c_check_header_mongrel "$LINENO" "libmangle.h" "ac_cv_header_libmangle_h" "$ac_includes_default"
-if test "x$ac_cv_header_libmangle_h" = x""yes; then :
+if test "x$ac_cv_header_libmangle_h" = xyes; then :
 
 else
   as_fn_error $? "libmangle enabled, but the header is not usable." "$LINENO" 5
@@ -4342,7 +4350,7 @@
 
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libmangle_print_decl in -lmangle" >&5
 $as_echo_n "checking for libmangle_print_decl in -lmangle... " >&6; }
-if test "${ac_cv_lib_mangle_libmangle_print_decl+set}" = set; then :
+if ${ac_cv_lib_mangle_libmangle_print_decl+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -4376,7 +4384,7 @@
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_mangle_libmangle_print_decl" >&5
 $as_echo "$ac_cv_lib_mangle_libmangle_print_decl" >&6; }
-if test "x$ac_cv_lib_mangle_libmangle_print_decl" = x""yes; then :
+if test "x$ac_cv_lib_mangle_libmangle_print_decl" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_LIBMANGLE 1
 _ACEOF
@@ -4424,7 +4432,7 @@
 esac
 
 ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default"
-if test "x$ac_cv_type_size_t" = x""yes; then :
+if test "x$ac_cv_type_size_t" = xyes; then :
 
 else
 
@@ -4573,10 +4581,21 @@
      :end' >>confcache
 if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
   if test -w "$cache_file"; then
-    test "x$cache_file" != "x/dev/null" &&
+    if test "x$cache_file" != "x/dev/null"; then
       { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
 $as_echo "$as_me: updating cache $cache_file" >&6;}
-    cat confcache >$cache_file
+      if test ! -f "$cache_file" || test -h "$cache_file"; then
+	cat confcache >"$cache_file"
+      else
+        case $cache_file in #(
+        */* | ?:*)
+	  mv -f confcache "$cache_file"$$ &&
+	  mv -f "$cache_file"$$ "$cache_file" ;; #(
+        *)
+	  mv -f confcache "$cache_file" ;;
+	esac
+      fi
+    fi
   else
     { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
@@ -4628,7 +4647,7 @@
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
 
-: ${CONFIG_STATUS=./config.status}
+: "${CONFIG_STATUS=./config.status}"
 ac_write_fail=0
 ac_clean_files_save=$ac_clean_files
 ac_clean_files="$ac_clean_files $CONFIG_STATUS"
@@ -4729,6 +4748,7 @@
 IFS=" ""	$as_nl"
 
 # Find who we are.  Look in the path if we contain no directory separator.
+as_myself=
 case $0 in #((
   *[\\/]* ) as_myself=$0 ;;
   *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -5036,7 +5056,7 @@
 # values after options handling.
 ac_log="
 This file was extended by mingw-w64-gendef $as_me 1.0, which was
-generated by GNU Autoconf 2.67.  Invocation command line was
+generated by GNU Autoconf 2.68.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
   CONFIG_HEADERS  = $CONFIG_HEADERS
@@ -5102,7 +5122,7 @@
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
 mingw-w64-gendef config.status 1.0
-configured by $0, generated by GNU Autoconf 2.67,
+configured by $0, generated by GNU Autoconf 2.68,
   with options \\"\$ac_cs_config\\"
 
 Copyright (C) 2010 Free Software Foundation, Inc.
@@ -5257,9 +5277,10 @@
 # after its creation but before its name has been assigned to `$tmp'.
 $debug ||
 {
-  tmp=
+  tmp= ac_tmp=
   trap 'exit_status=$?
-  { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status
+  : "${ac_tmp:=$tmp}"
+  { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status
 ' 0
   trap 'as_fn_exit 1' 1 2 13 15
 }
@@ -5267,12 +5288,13 @@
 
 {
   tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
-  test -n "$tmp" && test -d "$tmp"
+  test -d "$tmp"
 }  ||
 {
   tmp=./conf$$-$RANDOM
   (umask 077 && mkdir "$tmp")
 } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5
+ac_tmp=$tmp
 
 # Set up the scripts for CONFIG_FILES section.
 # No need to generate them if there are no CONFIG_FILES.
@@ -5294,7 +5316,7 @@
   ac_cs_awk_cr=$ac_cr
 fi
 
-echo 'BEGIN {' >"$tmp/subs1.awk" &&
+echo 'BEGIN {' >"$ac_tmp/subs1.awk" &&
 _ACEOF
 
 
@@ -5322,7 +5344,7 @@
 rm -f conf$$subs.sh
 
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-cat >>"\$tmp/subs1.awk" <<\\_ACAWK &&
+cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK &&
 _ACEOF
 sed -n '
 h
@@ -5370,7 +5392,7 @@
 rm -f conf$$subs.awk
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 _ACAWK
-cat >>"\$tmp/subs1.awk" <<_ACAWK &&
+cat >>"\$ac_tmp/subs1.awk" <<_ACAWK &&
   for (key in S) S_is_set[key] = 1
   FS = ""
 
@@ -5402,7 +5424,7 @@
   sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
 else
   cat
-fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \
+fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \
   || as_fn_error $? "could not setup config files machinery" "$LINENO" 5
 _ACEOF
 
@@ -5436,7 +5458,7 @@
 # No need to generate them if there are no CONFIG_HEADERS.
 # This happens for instance with `./config.status Makefile'.
 if test -n "$CONFIG_HEADERS"; then
-cat >"$tmp/defines.awk" <<\_ACAWK ||
+cat >"$ac_tmp/defines.awk" <<\_ACAWK ||
 BEGIN {
 _ACEOF
 
@@ -5448,8 +5470,8 @@
 # handling of long lines.
 ac_delim='%!_!# '
 for ac_last_try in false false :; do
-  ac_t=`sed -n "/$ac_delim/p" confdefs.h`
-  if test -z "$ac_t"; then
+  ac_tt=`sed -n "/$ac_delim/p" confdefs.h`
+  if test -z "$ac_tt"; then
     break
   elif $ac_last_try; then
     as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5
@@ -5569,7 +5591,7 @@
     for ac_f
     do
       case $ac_f in
-      -) ac_f="$tmp/stdin";;
+      -) ac_f="$ac_tmp/stdin";;
       *) # Look for the file first in the build tree, then in the source tree
 	 # (if the path is not absolute).  The absolute path cannot be DOS-style,
 	 # because $ac_f cannot contain `:'.
@@ -5604,7 +5626,7 @@
     esac
 
     case $ac_tag in
-    *:-:* | *:-) cat >"$tmp/stdin" \
+    *:-:* | *:-) cat >"$ac_tmp/stdin" \
       || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;;
     esac
     ;;
@@ -5741,21 +5763,22 @@
 s&@MKDIR_P@&$ac_MKDIR_P&;t t
 $ac_datarootdir_hack
 "
-eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \
-  || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \
+  >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5
 
 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
-  { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } &&
-  { ac_out=`sed -n '/^[	 ]*datarootdir[	 ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } &&
+  { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
+  { ac_out=`sed -n '/^[	 ]*datarootdir[	 ]*:*=/p' \
+      "$ac_tmp/out"`; test -z "$ac_out"; } &&
   { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
 which seems to be undefined.  Please make sure it is defined" >&5
 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
 which seems to be undefined.  Please make sure it is defined" >&2;}
 
-  rm -f "$tmp/stdin"
+  rm -f "$ac_tmp/stdin"
   case $ac_file in
-  -) cat "$tmp/out" && rm -f "$tmp/out";;
-  *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";;
+  -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";;
+  *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";;
   esac \
   || as_fn_error $? "could not create $ac_file" "$LINENO" 5
  ;;
@@ -5766,20 +5789,20 @@
   if test x"$ac_file" != x-; then
     {
       $as_echo "/* $configure_input  */" \
-      && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs"
-    } >"$tmp/config.h" \
+      && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs"
+    } >"$ac_tmp/config.h" \
       || as_fn_error $? "could not create $ac_file" "$LINENO" 5
-    if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then
+    if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then
       { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5
 $as_echo "$as_me: $ac_file is unchanged" >&6;}
     else
       rm -f "$ac_file"
-      mv "$tmp/config.h" "$ac_file" \
+      mv "$ac_tmp/config.h" "$ac_file" \
 	|| as_fn_error $? "could not create $ac_file" "$LINENO" 5
     fi
   else
     $as_echo "/* $configure_input  */" \
-      && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \
+      && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \
       || as_fn_error $? "could not create -" "$LINENO" 5
   fi
 # Compute "$ac_file"'s index in $config_headers.
diff --git a/mingw-w64-tools/genidl/aclocal.m4 b/mingw-w64-tools/genidl/aclocal.m4
index 76b1880..76a1536 100644
--- a/mingw-w64-tools/genidl/aclocal.m4
+++ b/mingw-w64-tools/genidl/aclocal.m4
@@ -13,8 +13,8 @@
 
 m4_ifndef([AC_AUTOCONF_VERSION],
   [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
-m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.67],,
-[m4_warning([this file was generated for autoconf 2.67.
+m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.68],,
+[m4_warning([this file was generated for autoconf 2.68.
 You have another version of autoconf.  It may work, but is not guaranteed to.
 If you have problems, you may need to regenerate the build system entirely.
 To do so, use the procedure documented by the package, typically `autoreconf'.])])
diff --git a/mingw-w64-tools/genidl/configure b/mingw-w64-tools/genidl/configure
index 94ee72f..fdea7e0 100755
--- a/mingw-w64-tools/genidl/configure
+++ b/mingw-w64-tools/genidl/configure
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.67 for mingw-w64-genidl 1.0.
+# Generated by GNU Autoconf 2.68 for mingw-w64-genidl 1.0.
 #
 # Report bugs to <mingw-w64-public@lists.sourceforge.net>.
 #
@@ -91,6 +91,7 @@
 IFS=" ""	$as_nl"
 
 # Find who we are.  Look in the path if we contain no directory separator.
+as_myself=
 case $0 in #((
   *[\\/]* ) as_myself=$0 ;;
   *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -216,11 +217,18 @@
   # We cannot yet assume a decent shell, so we have to provide a
 	# neutralization value for shells without unset; and this also
 	# works around shells that cannot unset nonexistent variables.
+	# Preserve -v and -x to the replacement shell.
 	BASH_ENV=/dev/null
 	ENV=/dev/null
 	(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
 	export CONFIG_SHELL
-	exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"}
+	case $- in # ((((
+	  *v*x* | *x*v* ) as_opts=-vx ;;
+	  *v* ) as_opts=-v ;;
+	  *x* ) as_opts=-x ;;
+	  * ) as_opts= ;;
+	esac
+	exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"}
 fi
 
     if test x$as_have_required = xno; then :
@@ -1108,7 +1116,7 @@
     $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
     expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
       $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
-    : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
+    : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}"
     ;;
 
   esac
@@ -1407,7 +1415,7 @@
 if $ac_init_version; then
   cat <<\_ACEOF
 mingw-w64-genidl configure 1.0
-generated by GNU Autoconf 2.67
+generated by GNU Autoconf 2.68
 
 Copyright (C) 2010 Free Software Foundation, Inc.
 This configure script is free software; the Free Software Foundation
@@ -1453,7 +1461,7 @@
 
 	ac_retval=1
 fi
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
   as_fn_set_status $ac_retval
 
 } # ac_fn_c_try_compile
@@ -1490,7 +1498,7 @@
 
     ac_retval=1
 fi
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
   as_fn_set_status $ac_retval
 
 } # ac_fn_c_try_cpp
@@ -1503,10 +1511,10 @@
 ac_fn_c_check_header_mongrel ()
 {
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  if eval "test \"\${$3+set}\"" = set; then :
+  if eval \${$3+:} false; then :
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
 $as_echo_n "checking for $2... " >&6; }
-if eval "test \"\${$3+set}\"" = set; then :
+if eval \${$3+:} false; then :
   $as_echo_n "(cached) " >&6
 fi
 eval ac_res=\$$3
@@ -1573,7 +1581,7 @@
 esac
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
 $as_echo_n "checking for $2... " >&6; }
-if eval "test \"\${$3+set}\"" = set; then :
+if eval \${$3+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   eval "$3=\$ac_header_compiler"
@@ -1582,7 +1590,7 @@
 	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
 fi
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
 
 } # ac_fn_c_check_header_mongrel
 
@@ -1623,7 +1631,7 @@
        ac_retval=$ac_status
 fi
   rm -rf conftest.dSYM conftest_ipa8_conftest.oo
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
   as_fn_set_status $ac_retval
 
 } # ac_fn_c_try_run
@@ -1637,7 +1645,7 @@
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
 $as_echo_n "checking for $2... " >&6; }
-if eval "test \"\${$3+set}\"" = set; then :
+if eval \${$3+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -1655,7 +1663,7 @@
 eval ac_res=\$$3
 	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
 
 } # ac_fn_c_check_header_compile
 
@@ -1668,7 +1676,7 @@
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for int$2_t" >&5
 $as_echo_n "checking for int$2_t... " >&6; }
-if eval "test \"\${$3+set}\"" = set; then :
+if eval \${$3+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   eval "$3=no"
@@ -1729,7 +1737,7 @@
 eval ac_res=\$$3
 	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
 
 } # ac_fn_c_find_intX_t
 
@@ -1742,7 +1750,7 @@
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
 $as_echo_n "checking for $2... " >&6; }
-if eval "test \"\${$3+set}\"" = set; then :
+if eval \${$3+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   eval "$3=no"
@@ -1783,7 +1791,7 @@
 eval ac_res=\$$3
 	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
 
 } # ac_fn_c_check_type
 
@@ -1796,7 +1804,7 @@
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for uint$2_t" >&5
 $as_echo_n "checking for uint$2_t... " >&6; }
-if eval "test \"\${$3+set}\"" = set; then :
+if eval \${$3+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   eval "$3=no"
@@ -1836,7 +1844,7 @@
 eval ac_res=\$$3
 	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
 
 } # ac_fn_c_find_uintX_t
 
@@ -1881,7 +1889,7 @@
   # interfere with the next link command; also delete a directory that is
   # left behind by Apple's compiler.  We do this before executing the actions.
   rm -rf conftest.dSYM conftest_ipa8_conftest.oo
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
   as_fn_set_status $ac_retval
 
 } # ac_fn_c_try_link
@@ -1894,7 +1902,7 @@
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
 $as_echo_n "checking for $2... " >&6; }
-if eval "test \"\${$3+set}\"" = set; then :
+if eval \${$3+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -1949,7 +1957,7 @@
 eval ac_res=\$$3
 	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
 
 } # ac_fn_c_check_func
 cat >config.log <<_ACEOF
@@ -1957,7 +1965,7 @@
 running configure, to aid debugging if configure makes a mistake.
 
 It was created by mingw-w64-genidl $as_me 1.0, which was
-generated by GNU Autoconf 2.67.  Invocation command line was
+generated by GNU Autoconf 2.68.  Invocation command line was
 
   $ $0 $@
 
@@ -2356,7 +2364,7 @@
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
 $as_echo_n "checking for a BSD-compatible install... " >&6; }
 if test -z "$INSTALL"; then
-if test "${ac_cv_path_install+set}" = set; then :
+if ${ac_cv_path_install+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -2533,7 +2541,7 @@
 set dummy ${ac_tool_prefix}strip; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_STRIP+set}" = set; then :
+if ${ac_cv_prog_STRIP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$STRIP"; then
@@ -2573,7 +2581,7 @@
 set dummy strip; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then :
+if ${ac_cv_prog_ac_ct_STRIP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_STRIP"; then
@@ -2626,7 +2634,7 @@
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5
 $as_echo_n "checking for a thread-safe mkdir -p... " >&6; }
 if test -z "$MKDIR_P"; then
-  if test "${ac_cv_path_mkdir+set}" = set; then :
+  if ${ac_cv_path_mkdir+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -2677,7 +2685,7 @@
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_AWK+set}" = set; then :
+if ${ac_cv_prog_AWK+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$AWK"; then
@@ -2717,7 +2725,7 @@
 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
 set x ${MAKE-make}
 ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
-if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\"" = set; then :
+if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat >conftest.make <<\_ACEOF
@@ -2845,7 +2853,7 @@
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
 $as_echo_n "checking build system type... " >&6; }
-if test "${ac_cv_build+set}" = set; then :
+if ${ac_cv_build+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_build_alias=$build_alias
@@ -2879,7 +2887,7 @@
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
 $as_echo_n "checking host system type... " >&6; }
-if test "${ac_cv_host+set}" = set; then :
+if ${ac_cv_host+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test "x$host_alias" = x; then
@@ -2922,7 +2930,7 @@
 set dummy ${ac_tool_prefix}gcc; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then :
+if ${ac_cv_prog_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$CC"; then
@@ -2962,7 +2970,7 @@
 set dummy gcc; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then :
+if ${ac_cv_prog_ac_ct_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_CC"; then
@@ -3015,7 +3023,7 @@
 set dummy ${ac_tool_prefix}cc; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then :
+if ${ac_cv_prog_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$CC"; then
@@ -3055,7 +3063,7 @@
 set dummy cc; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then :
+if ${ac_cv_prog_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$CC"; then
@@ -3114,7 +3122,7 @@
 set dummy $ac_tool_prefix$ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then :
+if ${ac_cv_prog_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$CC"; then
@@ -3158,7 +3166,7 @@
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then :
+if ${ac_cv_prog_ac_ct_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_CC"; then
@@ -3441,7 +3449,7 @@
 ac_clean_files=$ac_clean_files_save
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
 $as_echo_n "checking for suffix of object files... " >&6; }
-if test "${ac_cv_objext+set}" = set; then :
+if ${ac_cv_objext+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -3492,7 +3500,7 @@
 ac_objext=$OBJEXT
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
-if test "${ac_cv_c_compiler_gnu+set}" = set; then :
+if ${ac_cv_c_compiler_gnu+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -3529,7 +3537,7 @@
 ac_save_CFLAGS=$CFLAGS
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
 $as_echo_n "checking whether $CC accepts -g... " >&6; }
-if test "${ac_cv_prog_cc_g+set}" = set; then :
+if ${ac_cv_prog_cc_g+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_save_c_werror_flag=$ac_c_werror_flag
@@ -3607,7 +3615,7 @@
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
-if test "${ac_cv_prog_cc_c89+set}" = set; then :
+if ${ac_cv_prog_cc_c89+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_cv_prog_cc_c89=no
@@ -3768,7 +3776,7 @@
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
 $as_echo_n "checking dependency style of $depcc... " >&6; }
-if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then :
+if ${am_cv_CC_dependencies_compiler_type+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
@@ -3908,7 +3916,7 @@
   CPP=
 fi
 if test -z "$CPP"; then
-  if test "${ac_cv_prog_CPP+set}" = set; then :
+  if ${ac_cv_prog_CPP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
       # Double quotes because CPP needs to be expanded
@@ -4036,7 +4044,7 @@
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
 $as_echo_n "checking for grep that handles long lines and -e... " >&6; }
-if test "${ac_cv_path_GREP+set}" = set; then :
+if ${ac_cv_path_GREP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -z "$GREP"; then
@@ -4099,7 +4107,7 @@
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
 $as_echo_n "checking for egrep... " >&6; }
-if test "${ac_cv_path_EGREP+set}" = set; then :
+if ${ac_cv_path_EGREP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
@@ -4166,7 +4174,7 @@
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
 $as_echo_n "checking for ANSI C header files... " >&6; }
-if test "${ac_cv_header_stdc+set}" = set; then :
+if ${ac_cv_header_stdc+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -4342,7 +4350,7 @@
 esac
 
 ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default"
-if test "x$ac_cv_type_size_t" = x""yes; then :
+if test "x$ac_cv_type_size_t" = xyes; then :
 
 else
 
@@ -4397,7 +4405,7 @@
 for ac_header in stdlib.h
 do :
   ac_fn_c_check_header_mongrel "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default"
-if test "x$ac_cv_header_stdlib_h" = x""yes; then :
+if test "x$ac_cv_header_stdlib_h" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_STDLIB_H 1
 _ACEOF
@@ -4408,7 +4416,7 @@
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU libc compatible malloc" >&5
 $as_echo_n "checking for GNU libc compatible malloc... " >&6; }
-if test "${ac_cv_func_malloc_0_nonnull+set}" = set; then :
+if ${ac_cv_func_malloc_0_nonnull+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test "$cross_compiling" = yes; then :
@@ -4464,7 +4472,7 @@
 for ac_header in stdlib.h
 do :
   ac_fn_c_check_header_mongrel "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default"
-if test "x$ac_cv_header_stdlib_h" = x""yes; then :
+if test "x$ac_cv_header_stdlib_h" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_STDLIB_H 1
 _ACEOF
@@ -4475,7 +4483,7 @@
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU libc compatible realloc" >&5
 $as_echo_n "checking for GNU libc compatible realloc... " >&6; }
-if test "${ac_cv_func_realloc_0_nonnull+set}" = set; then :
+if ${ac_cv_func_realloc_0_nonnull+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test "$cross_compiling" = yes; then :
@@ -4607,10 +4615,21 @@
      :end' >>confcache
 if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
   if test -w "$cache_file"; then
-    test "x$cache_file" != "x/dev/null" &&
+    if test "x$cache_file" != "x/dev/null"; then
       { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
 $as_echo "$as_me: updating cache $cache_file" >&6;}
-    cat confcache >$cache_file
+      if test ! -f "$cache_file" || test -h "$cache_file"; then
+	cat confcache >"$cache_file"
+      else
+        case $cache_file in #(
+        */* | ?:*)
+	  mv -f confcache "$cache_file"$$ &&
+	  mv -f "$cache_file"$$ "$cache_file" ;; #(
+        *)
+	  mv -f confcache "$cache_file" ;;
+	esac
+      fi
+    fi
   else
     { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
@@ -4662,7 +4681,7 @@
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
 
-: ${CONFIG_STATUS=./config.status}
+: "${CONFIG_STATUS=./config.status}"
 ac_write_fail=0
 ac_clean_files_save=$ac_clean_files
 ac_clean_files="$ac_clean_files $CONFIG_STATUS"
@@ -4763,6 +4782,7 @@
 IFS=" ""	$as_nl"
 
 # Find who we are.  Look in the path if we contain no directory separator.
+as_myself=
 case $0 in #((
   *[\\/]* ) as_myself=$0 ;;
   *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -5070,7 +5090,7 @@
 # values after options handling.
 ac_log="
 This file was extended by mingw-w64-genidl $as_me 1.0, which was
-generated by GNU Autoconf 2.67.  Invocation command line was
+generated by GNU Autoconf 2.68.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
   CONFIG_HEADERS  = $CONFIG_HEADERS
@@ -5136,7 +5156,7 @@
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
 mingw-w64-genidl config.status 1.0
-configured by $0, generated by GNU Autoconf 2.67,
+configured by $0, generated by GNU Autoconf 2.68,
   with options \\"\$ac_cs_config\\"
 
 Copyright (C) 2010 Free Software Foundation, Inc.
@@ -5291,9 +5311,10 @@
 # after its creation but before its name has been assigned to `$tmp'.
 $debug ||
 {
-  tmp=
+  tmp= ac_tmp=
   trap 'exit_status=$?
-  { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status
+  : "${ac_tmp:=$tmp}"
+  { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status
 ' 0
   trap 'as_fn_exit 1' 1 2 13 15
 }
@@ -5301,12 +5322,13 @@
 
 {
   tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
-  test -n "$tmp" && test -d "$tmp"
+  test -d "$tmp"
 }  ||
 {
   tmp=./conf$$-$RANDOM
   (umask 077 && mkdir "$tmp")
 } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5
+ac_tmp=$tmp
 
 # Set up the scripts for CONFIG_FILES section.
 # No need to generate them if there are no CONFIG_FILES.
@@ -5328,7 +5350,7 @@
   ac_cs_awk_cr=$ac_cr
 fi
 
-echo 'BEGIN {' >"$tmp/subs1.awk" &&
+echo 'BEGIN {' >"$ac_tmp/subs1.awk" &&
 _ACEOF
 
 
@@ -5356,7 +5378,7 @@
 rm -f conf$$subs.sh
 
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-cat >>"\$tmp/subs1.awk" <<\\_ACAWK &&
+cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK &&
 _ACEOF
 sed -n '
 h
@@ -5404,7 +5426,7 @@
 rm -f conf$$subs.awk
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 _ACAWK
-cat >>"\$tmp/subs1.awk" <<_ACAWK &&
+cat >>"\$ac_tmp/subs1.awk" <<_ACAWK &&
   for (key in S) S_is_set[key] = 1
   FS = ""
 
@@ -5436,7 +5458,7 @@
   sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
 else
   cat
-fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \
+fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \
   || as_fn_error $? "could not setup config files machinery" "$LINENO" 5
 _ACEOF
 
@@ -5470,7 +5492,7 @@
 # No need to generate them if there are no CONFIG_HEADERS.
 # This happens for instance with `./config.status Makefile'.
 if test -n "$CONFIG_HEADERS"; then
-cat >"$tmp/defines.awk" <<\_ACAWK ||
+cat >"$ac_tmp/defines.awk" <<\_ACAWK ||
 BEGIN {
 _ACEOF
 
@@ -5482,8 +5504,8 @@
 # handling of long lines.
 ac_delim='%!_!# '
 for ac_last_try in false false :; do
-  ac_t=`sed -n "/$ac_delim/p" confdefs.h`
-  if test -z "$ac_t"; then
+  ac_tt=`sed -n "/$ac_delim/p" confdefs.h`
+  if test -z "$ac_tt"; then
     break
   elif $ac_last_try; then
     as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5
@@ -5603,7 +5625,7 @@
     for ac_f
     do
       case $ac_f in
-      -) ac_f="$tmp/stdin";;
+      -) ac_f="$ac_tmp/stdin";;
       *) # Look for the file first in the build tree, then in the source tree
 	 # (if the path is not absolute).  The absolute path cannot be DOS-style,
 	 # because $ac_f cannot contain `:'.
@@ -5638,7 +5660,7 @@
     esac
 
     case $ac_tag in
-    *:-:* | *:-) cat >"$tmp/stdin" \
+    *:-:* | *:-) cat >"$ac_tmp/stdin" \
       || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;;
     esac
     ;;
@@ -5775,21 +5797,22 @@
 s&@MKDIR_P@&$ac_MKDIR_P&;t t
 $ac_datarootdir_hack
 "
-eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \
-  || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \
+  >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5
 
 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
-  { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } &&
-  { ac_out=`sed -n '/^[	 ]*datarootdir[	 ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } &&
+  { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
+  { ac_out=`sed -n '/^[	 ]*datarootdir[	 ]*:*=/p' \
+      "$ac_tmp/out"`; test -z "$ac_out"; } &&
   { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
 which seems to be undefined.  Please make sure it is defined" >&5
 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
 which seems to be undefined.  Please make sure it is defined" >&2;}
 
-  rm -f "$tmp/stdin"
+  rm -f "$ac_tmp/stdin"
   case $ac_file in
-  -) cat "$tmp/out" && rm -f "$tmp/out";;
-  *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";;
+  -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";;
+  *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";;
   esac \
   || as_fn_error $? "could not create $ac_file" "$LINENO" 5
  ;;
@@ -5800,20 +5823,20 @@
   if test x"$ac_file" != x-; then
     {
       $as_echo "/* $configure_input  */" \
-      && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs"
-    } >"$tmp/config.h" \
+      && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs"
+    } >"$ac_tmp/config.h" \
       || as_fn_error $? "could not create $ac_file" "$LINENO" 5
-    if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then
+    if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then
       { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5
 $as_echo "$as_me: $ac_file is unchanged" >&6;}
     else
       rm -f "$ac_file"
-      mv "$tmp/config.h" "$ac_file" \
+      mv "$ac_tmp/config.h" "$ac_file" \
 	|| as_fn_error $? "could not create $ac_file" "$LINENO" 5
     fi
   else
     $as_echo "/* $configure_input  */" \
-      && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \
+      && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \
       || as_fn_error $? "could not create -" "$LINENO" 5
   fi
 # Compute "$ac_file"'s index in $config_headers.
