--- /dev/null
+#! /bin/sh
+
+# depcomp - compile a program generating dependencies as side-effects
+# Copyright 1999, 2000 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
+
+if test -z "$depmode" || test -z "$source" || test -z "$object"; then
+ echo "depcomp: Variables source, object and depmode must be set" 1>&2
+ exit 1
+fi
+# `libtool' can also be set to `yes' or `no'.
+
+if test -z "$depfile"; then
+ base=`echo "$object" | sed -e 's,^.*/,,' -e 's,\.\([^.]*\)$,.P\1,'`
+ dir=`echo "$object" | sed 's,/.*$,/,'`
+ if test "$dir" = "$object"; then
+ dir=
+ fi
+ # FIXME: should be _deps on DOS.
+ depfile="$dir.deps/$base"
+fi
+
+tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
+
+rm -f "$tmpdepfile"
+
+# Some modes work just like other modes, but use different flags. We
+# parameterize here, but still list the modes in the big case below,
+# to make depend.m4 easier to write. Note that we *cannot* use a case
+# here, because this file can only contain one case statement.
+if test "$depmode" = hp; then
+ # HP compiler uses -M and no extra arg.
+ gccflag=-M
+ depmode=gcc
+fi
+
+if test "$depmode" = dashXmstdout; then
+ # This is just like dashmstdout with a different argument.
+ dashmflag=-xM
+ depmode=dashmstdout
+fi
+
+case "$depmode" in
+gcc3)
+## gcc 3 implements dependency tracking that does exactly what
+## we want. Yay! Note: for some reason libtool 1.4 doesn't like
+## it if -MD -MP comes after the -MF stuff. Hmm.
+ "$@" -MT "$object" -MD -MP -MF "$tmpdepfile"
+ stat=$?
+ if test $stat -eq 0; then :
+ else
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+ mv "$tmpdepfile" "$depfile"
+ ;;
+
+gcc)
+## There are various ways to get dependency output from gcc. Here's
+## why we pick this rather obscure method:
+## - Don't want to use -MD because we'd like the dependencies to end
+## up in a subdir. Having to rename by hand is ugly.
+## (We might end up doing this anyway to support other compilers.)
+## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
+## -MM, not -M (despite what the docs say).
+## - Using -M directly means running the compiler twice (even worse
+## than renaming).
+ if test -z "$gccflag"; then
+ gccflag=-MD,
+ fi
+ "$@" -Wp,"$gccflag$tmpdepfile"
+ stat=$?
+ if test $stat -eq 0; then :
+ else
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+ rm -f "$depfile"
+ echo "$object : \\" > "$depfile"
+ alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
+## The second -e expression handles DOS-style file names with drive letters.
+ sed -e 's/^[^:]*: / /' \
+ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
+## This next piece of magic avoids the `deleted header file' problem.
+## The problem is that when a header file which appears in a .P file
+## is deleted, the dependency causes make to die (because there is
+## typically no way to rebuild the header). We avoid this by adding
+## dummy dependencies for each header file. Too bad gcc doesn't do
+## this for us directly.
+ tr ' ' '
+' < "$tmpdepfile" |
+## Some versions of gcc put a space before the `:'. On the theory
+## that the space means something, we add a space to the output as
+## well.
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly. Breaking it into two sed invocations is a workaround.
+ sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+hp)
+ # This case exists only to let depend.m4 do its work. It works by
+ # looking at the text of this script. This case will never be run,
+ # since it is checked for above.
+ exit 1
+ ;;
+
+sgi)
+ if test "$libtool" = yes; then
+ "$@" "-Wp,-MDupdate,$tmpdepfile"
+ else
+ "$@" -MDupdate "$tmpdepfile"
+ fi
+ stat=$?
+ if test $stat -eq 0; then :
+ else
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+ rm -f "$depfile"
+
+ if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files
+ echo "$object : \\" > "$depfile"
+
+ # Clip off the initial element (the dependent). Don't try to be
+ # clever and replace this with sed code, as IRIX sed won't handle
+ # lines with more than a fixed number of characters (4096 in
+ # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines;
+ # the IRIX cc adds comments like `#:fec' to the end of the
+ # dependency line.
+ tr ' ' '
+' < "$tmpdepfile" \
+ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
+ tr '
+' ' ' >> $depfile
+ echo >> $depfile
+
+ # The second pass generates a dummy entry for each header file.
+ tr ' ' '
+' < "$tmpdepfile" \
+ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
+ >> $depfile
+ else
+ # The sourcefile does not contain any dependencies, so just
+ # store a dummy comment line, to avoid errors with the Makefile
+ # "include basename.Plo" scheme.
+ echo "#dummy" > "$depfile"
+ fi
+ rm -f "$tmpdepfile"
+ ;;
+
+aix)
+ # The C for AIX Compiler uses -M and outputs the dependencies
+ # in a .u file. This file always lives in the current directory.
+ # Also, the AIX compiler puts `$object:' at the start of each line;
+ # $object doesn't have directory information.
+ stripped=`echo "$object" | sed -e 's,^.*/,,' -e 's/\(.*\)\..*$/\1/'`
+ tmpdepfile="$stripped.u"
+ outname="$stripped.o"
+ if test "$libtool" = yes; then
+ "$@" -Wc,-M
+ else
+ "$@" -M
+ fi
+
+ stat=$?
+ if test $stat -eq 0; then :
+ else
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+
+ if test -f "$tmpdepfile"; then
+ # Each line is of the form `foo.o: dependent.h'.
+ # Do two passes, one to just change these to
+ # `$object: dependent.h' and one to simply `dependent.h:'.
+ sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile"
+ sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile"
+ else
+ # The sourcefile does not contain any dependencies, so just
+ # store a dummy comment line, to avoid errors with the Makefile
+ # "include basename.Plo" scheme.
+ echo "#dummy" > "$depfile"
+ fi
+ rm -f "$tmpdepfile"
+ ;;
+
+tru64)
+ # The Tru64 compiler uses -MD to generate dependencies as a side
+ # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
+ # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
+ # dependencies in `foo.d' instead, so we check for that too.
+ # Subdirectories are respected.
+ dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
+ test "x$dir" = "x$object" && dir=
+ base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
+
+ if test "$libtool" = yes; then
+ tmpdepfile1="$dir.libs/$base.lo.d"
+ tmpdepfile2="$dir.libs/$base.d"
+ "$@" -Wc,-MD
+ else
+ tmpdepfile1="$dir$base.o.d"
+ tmpdepfile2="$dir$base.d"
+ "$@" -MD
+ fi
+
+ stat=$?
+ if test $stat -eq 0; then :
+ else
+ rm -f "$tmpdepfile1" "$tmpdepfile2"
+ exit $stat
+ fi
+
+ if test -f "$tmpdepfile1"; then
+ tmpdepfile="$tmpdepfile1"
+ else
+ tmpdepfile="$tmpdepfile2"
+ fi
+ if test -f "$tmpdepfile"; then
+ sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
+ # That's a space and a tab in the [].
+ sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
+ else
+ echo "#dummy" > "$depfile"
+ fi
+ rm -f "$tmpdepfile"
+ ;;
+
+#nosideeffect)
+ # This comment above is used by automake to tell side-effect
+ # dependency tracking mechanisms from slower ones.
+
+dashmstdout)
+ # Important note: in order to support this mode, a compiler *must*
+ # always write the proprocessed file to stdout, regardless of -o.
+ "$@" || exit $?
+
+ # Remove the call to Libtool.
+ if test "$libtool" = yes; then
+ while test $1 != '--mode=compile'; do
+ shift
+ done
+ shift
+ fi
+
+ # Remove `-o $object'. We will use -o /dev/null later,
+ # however we can't do the remplacement now because
+ # `-o $object' might simply not be used
+ IFS=" "
+ for arg
+ do
+ case $arg in
+ -o)
+ shift
+ ;;
+ $object)
+ shift
+ ;;
+ *)
+ set fnord "$@" "$arg"
+ shift # fnord
+ shift # $arg
+ ;;
+ esac
+ done
+
+ test -z "$dashmflag" && dashmflag=-M
+ "$@" -o /dev/null $dashmflag | sed 's:^[^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile"
+ rm -f "$depfile"
+ cat < "$tmpdepfile" > "$depfile"
+ tr ' ' '
+' < "$tmpdepfile" | \
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly. Breaking it into two sed invocations is a workaround.
+ sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+dashXmstdout)
+ # This case only exists to satisfy depend.m4. It is never actually
+ # run, as this mode is specially recognized in the preamble.
+ exit 1
+ ;;
+
+makedepend)
+ "$@" || exit $?
+ # X makedepend
+ shift
+ cleared=no
+ for arg in "$@"; do
+ case $cleared in
+ no)
+ set ""; shift
+ cleared=yes ;;
+ esac
+ case "$arg" in
+ -D*|-I*)
+ set fnord "$@" "$arg"; shift ;;
+ -*)
+ ;;
+ *)
+ set fnord "$@" "$arg"; shift ;;
+ esac
+ done
+ obj_suffix="`echo $object | sed 's/^.*\././'`"
+ touch "$tmpdepfile"
+ ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
+ rm -f "$depfile"
+ cat < "$tmpdepfile" > "$depfile"
+ sed '1,2d' "$tmpdepfile" | tr ' ' '
+' | \
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly. Breaking it into two sed invocations is a workaround.
+ sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+ rm -f "$tmpdepfile" "$tmpdepfile".bak
+ ;;
+
+cpp)
+ # Important note: in order to support this mode, a compiler *must*
+ # always write the proprocessed file to stdout.
+ "$@" || exit $?
+
+ # Remove the call to Libtool.
+ if test "$libtool" = yes; then
+ while test $1 != '--mode=compile'; do
+ shift
+ done
+ shift
+ fi
+
+ # Remove `-o $object'.
+ IFS=" "
+ for arg
+ do
+ case $arg in
+ -o)
+ shift
+ ;;
+ $object)
+ shift
+ ;;
+ *)
+ set fnord "$@" "$arg"
+ shift # fnord
+ shift # $arg
+ ;;
+ esac
+ done
+
+ "$@" -E |
+ sed -n '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
+ sed '$ s: \\$::' > "$tmpdepfile"
+ rm -f "$depfile"
+ echo "$object : \\" > "$depfile"
+ cat < "$tmpdepfile" >> "$depfile"
+ sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+msvisualcpp)
+ # Important note: in order to support this mode, a compiler *must*
+ # always write the proprocessed file to stdout, regardless of -o,
+ # because we must use -o when running libtool.
+ "$@" || exit $?
+ IFS=" "
+ for arg
+ do
+ case "$arg" in
+ "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
+ set fnord "$@"
+ shift
+ shift
+ ;;
+ *)
+ set fnord "$@" "$arg"
+ shift
+ shift
+ ;;
+ esac
+ done
+ "$@" -E |
+ sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
+ rm -f "$depfile"
+ echo "$object : \\" > "$depfile"
+ . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile"
+ echo " " >> "$depfile"
+ . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+none)
+ exec "$@"
+ ;;
+
+*)
+ echo "Unknown depmode $depmode" 1>&2
+ exit 1
+ ;;
+esac
+
+exit 0
--- /dev/null
+------------- New fontwheel --------------
+times
+.....Hello, there!
+------------------------------------------
+------------- New fontwheel --------------
+times
+.....Hello, there!
+------------------------------------------
+------------- New fontwheel --------------
+arial
+.....Hello, there!
+------------------------------------------
+------------- New fontwheel --------------
+arial
+.....Hello, there!
+------------------------------------------
+------------- New fontwheel --------------
+times
+Hello, there!
+------------------------------------------
+Could not find/open font
+Could not find/open font
+Could not find/open font
+Could not find/open font
+Could not find/open font
+Could not find/open font
+Could not find/open font
+Could not find/open font
+Could not find/open font
+Could not find/open font
+Could not find/open font
+Could not find/open font
+Could not find/open font
+Could not find/open font
+Could not find/open font
+Could not find/open font
+Could not find/open font
+Could not find/open font
+------------- New fontwheel --------------
+times
+Hello, there!
+------------------------------------------
+Could not find/open font
+Could not find/open font
+Could not find/open font
+Could not find/open font
+Could not find/open font
+Could not find/open font
+Could not find/open font
+Could not find/open font
+Could not find/open font
+Could not find/open font
+Could not find/open font
+Could not find/open font
+------------- New fontwheel --------------
+arial
+Hello, there!
+------------------------------------------
+------------- New fontwheel --------------
+arial
+Hello
+there!
+------------------------------------------
--- /dev/null
+diff -rub gd-2.0.33/entities.h gd-2.0.33jce3/entities.h
+--- gd-2.0.33/entities.h 2004-10-27 10:22:46.000000000 -0400
++++ gd-2.0.33jce3/entities.h 2005-08-15 11:23:47.000000000 -0400
+@@ -11,7 +11,7 @@
+ extern "C" {
+ #endif
+
+-struct entities_s {
++static struct entities_s {
+ char *name;
+ int value;
+ } entities[] = {
+diff -rub gd-2.0.33/entities.tcl gd-2.0.33jce3/entities.tcl
+--- gd-2.0.33/entities.tcl 2004-10-27 10:22:48.000000000 -0400
++++ gd-2.0.33jce3/entities.tcl 2005-08-15 10:19:33.000000000 -0400
+@@ -32,7 +32,7 @@
+ puts $f "extern \"C\" {"
+ puts $f "#endif"
+ puts $f ""
+-puts $f "struct entities_s {"
++puts $f "static struct entities_s {"
+ puts $f " char *name;"
+ puts $f " int value;"
+ puts $f "} entities\[\] = {"
+diff -rub gd-2.0.33/gd.c gd-2.0.33jce3/gd.c
+--- gd-2.0.33/gd.c 2004-11-01 13:28:56.000000000 -0500
++++ gd-2.0.33jce3/gd.c 2005-08-15 11:23:47.000000000 -0400
+@@ -72,9 +72,16 @@
+ int i;
+ gdImagePtr im;
+ im = (gdImage *) gdMalloc (sizeof (gdImage));
++ if (!im)
++ return NULL;
+ memset (im, 0, sizeof (gdImage));
+ /* Row-major ever since gd 1.3 */
+ im->pixels = (unsigned char **) gdMalloc (sizeof (unsigned char *) * sy);
++ if (!im->pixels)
++ {
++ free(im);
++ return NULL;
++ }
+ im->polyInts = 0;
+ im->polyAllocated = 0;
+ im->brush = 0;
+@@ -84,6 +91,15 @@
+ {
+ /* Row-major ever since gd 1.3 */
+ im->pixels[i] = (unsigned char *) gdCalloc (sx, sizeof (unsigned char));
++ if (!im->pixels[i])
++ {
++ for (--i ; i >= 0; i--)
++ {
++ gdFree(im->pixels[i]);
++ }
++ gdFree(im);
++ return NULL;
++ }
+ }
+ im->sx = sx;
+ im->sy = sy;
+diff -rub gd-2.0.33/gd_gif_in.c gd-2.0.33jce3/gd_gif_in.c
+--- gd-2.0.33/gd_gif_in.c 2004-11-01 13:28:56.000000000 -0500
++++ gd-2.0.33jce3/gd_gif_in.c 2005-08-15 11:23:47.000000000 -0400
+@@ -1,3 +1,7 @@
++#ifdef HAVE_CONFIG_H
++#include "config.h"
++#endif
++
+ #include <stdio.h>
+ #include <math.h>
+ #include <string.h>
+diff -rub gd-2.0.33/gd_gif_out.c gd-2.0.33jce3/gd_gif_out.c
+--- gd-2.0.33/gd_gif_out.c 2004-11-02 08:41:00.000000000 -0500
++++ gd-2.0.33jce3/gd_gif_out.c 2005-08-15 11:23:47.000000000 -0400
+@@ -1,3 +1,7 @@
++#ifdef HAVE_CONFIG_H
++#include "config.h"
++#endif
++
+ #include <stdio.h>
+ #include <math.h>
+ #include <string.h>
+diff -rub gd-2.0.33/gd_topal.c gd-2.0.33jce3/gd_topal.c
+--- gd-2.0.33/gd_topal.c 2004-10-28 14:12:08.000000000 -0400
++++ gd-2.0.33jce3/gd_topal.c 2005-08-15 11:23:47.000000000 -0400
+@@ -49,6 +49,10 @@
+ #define ORIGINAL_LIB_JPEG_REVERSE_ODD_ROWS
+ */
+
++#ifdef HAVE_CONFIG_H
++#include "config.h"
++#endif
++
+ #include <string.h>
+ #include "gd.h"
+ #include "gdhelpers.h"
+diff -rub gd-2.0.33/gdfontg.c gd-2.0.33jce3/gdfontg.c
+--- gd-2.0.33/gdfontg.c 2004-10-27 10:22:04.000000000 -0400
++++ gd-2.0.33jce3/gdfontg.c 2005-08-15 11:23:47.000000000 -0400
+@@ -10,6 +10,9 @@
+ "Libor Skarvada, libor@informatics.muni.cz"
+ */
+
++#ifdef HAVE_CONFIG_H
++#include "config.h"
++#endif
+
+ #include "gdfontg.h"
+
+diff -rub gd-2.0.33/gdfontl.c gd-2.0.33jce3/gdfontl.c
+--- gd-2.0.33/gdfontl.c 2004-10-27 10:22:04.000000000 -0400
++++ gd-2.0.33jce3/gdfontl.c 2005-08-15 11:23:47.000000000 -0400
+@@ -11,6 +11,9 @@
+ "Libor Skarvada, libor@informatics.muni.cz"
+ */
+
++#ifdef HAVE_CONFIG_H
++#include "config.h"
++#endif
+
+ #include "gdfontl.h"
+
+diff -rub gd-2.0.33/gdfontmb.c gd-2.0.33jce3/gdfontmb.c
+--- gd-2.0.33/gdfontmb.c 2004-10-27 10:22:04.000000000 -0400
++++ gd-2.0.33jce3/gdfontmb.c 2005-08-15 11:23:47.000000000 -0400
+@@ -9,6 +9,9 @@
+ No copyright info was found in the original bdf.
+ */
+
++#ifdef HAVE_CONFIG_H
++#include "config.h"
++#endif
+
+ #include "gdfontmb.h"
+
+diff -rub gd-2.0.33/gdfonts.c gd-2.0.33jce3/gdfonts.c
+--- gd-2.0.33/gdfonts.c 2004-10-27 10:22:04.000000000 -0400
++++ gd-2.0.33jce3/gdfonts.c 2005-08-15 11:23:47.000000000 -0400
+@@ -7,6 +7,9 @@
+ No copyright info was found in the original bdf.
+ */
+
++#ifdef HAVE_CONFIG_H
++#include "config.h"
++#endif
+
+ #include "gdfonts.h"
+
+diff -rub gd-2.0.33/gdfontt.c gd-2.0.33jce3/gdfontt.c
+--- gd-2.0.33/gdfontt.c 2004-10-27 10:22:04.000000000 -0400
++++ gd-2.0.33jce3/gdfontt.c 2005-08-15 11:23:47.000000000 -0400
+@@ -10,6 +10,9 @@
+ "Libor Skarvada, libor@informatics.muni.cz"
+ */
+
++#ifdef HAVE_CONFIG_H
++#include "config.h"
++#endif
+
+ #include "gdfontt.h"
+
+diff -rub gd-2.0.33/gdft.c gd-2.0.33jce3/gdft.c
+--- gd-2.0.33/gdft.c 2004-11-02 16:00:48.000000000 -0500
++++ gd-2.0.33jce3/gdft.c 2005-08-15 11:23:47.000000000 -0400
+@@ -832,7 +832,7 @@
+ FT_Matrix matrix;
+ FT_Vector penf, oldpenf, delta, total_min = {0,0}, total_max = {0,0}, glyph_min, glyph_max;
+ FT_Face face;
+- FT_CharMap charmap;
++ FT_CharMap charmap = NULL;
+ FT_Glyph image;
+ FT_GlyphSlot slot;
+ FT_Error err;
+@@ -966,8 +966,10 @@
+ }
+ }
+
++#if 0
+ if (fg < 0)
+ render_mode |= FT_LOAD_MONOCHROME;
++#endif
+
+ /* find requested charmap */
+ encodingfound = 0;
+@@ -1208,12 +1210,14 @@
+ so we don't have to recheck for the terminating number */
+ if (! xshow_alloc) {
+ xshow_alloc = 100;
+- strex->xshow = malloc(xshow_alloc);
++ strex->xshow = gdMalloc(xshow_alloc);
+ xshow_pos = 0;
+ }
+ else if (xshow_pos + 20 > xshow_alloc) {
+ xshow_alloc += 100;
+ strex->xshow = realloc(strex->xshow, xshow_alloc);
++ if (! strex->xshow)
++ return "Problem allocating memory with realloc";
+ }
+ xshow_pos += sprintf(strex->xshow + xshow_pos, "%g ",
+ (double)(penf.x - oldpenf.x) * hdpi / (64 * METRIC_RES));
+@@ -1322,10 +1326,8 @@
+
+ if (brect)
+ { /* only if need brect */
+- double dpix, dpiy;
+-
+- dpix = 64 * METRIC_RES / hdpi;
+- dpiy = 64 * METRIC_RES / vdpi;
++ double scalex = (double)hdpi / (64 * METRIC_RES);
++ double scaley = (double)vdpi / (64 * METRIC_RES);
+
+ /* increase by 1 pixel to allow for rounding */
+ total_min.x -= METRIC_RES;
+@@ -1334,14 +1336,14 @@
+ total_max.y += METRIC_RES;
+
+ /* rotate bounding rectangle, scale and round to int pixels, and translate */
+- brect[0] = x + (total_min.x * cos_a + total_max.y * sin_a)/dpix;
+- brect[1] = y - (total_min.x * sin_a - total_max.y * cos_a)/dpiy;
+- brect[2] = x + (total_max.x * cos_a + total_max.y * sin_a)/dpix;
+- brect[3] = y - (total_max.x * sin_a - total_max.y * cos_a)/dpiy;
+- brect[4] = x + (total_max.x * cos_a + total_min.y * sin_a)/dpix;
+- brect[5] = y - (total_max.x * sin_a - total_min.y * cos_a)/dpiy;
+- brect[6] = x + (total_min.x * cos_a + total_min.y * sin_a)/dpix;
+- brect[7] = y - (total_min.x * sin_a - total_min.y * cos_a)/dpiy;
++ brect[0] = x + (total_min.x * cos_a + total_max.y * sin_a)*scalex;
++ brect[1] = y - (total_min.x * sin_a - total_max.y * cos_a)*scaley;
++ brect[2] = x + (total_max.x * cos_a + total_max.y * sin_a)*scalex;
++ brect[3] = y - (total_max.x * sin_a - total_max.y * cos_a)*scaley;
++ brect[4] = x + (total_max.x * cos_a + total_min.y * sin_a)*scalex;
++ brect[5] = y - (total_max.x * sin_a - total_min.y * cos_a)*scaley;
++ brect[6] = x + (total_min.x * cos_a + total_min.y * sin_a)*scalex;
++ brect[7] = y - (total_min.x * sin_a - total_min.y * cos_a)*scaley;
+ }
+
+ FT_Done_Size (platform_independent);
+@@ -1510,6 +1512,66 @@
+
+ #endif /* HAVE_LIBFONTCONFIG */
+
++#ifdef WIN32
++#define FONTSFX "\\FONTS"
++#define GDP "GDFONTPATH="
++#define F_OK 0 /* Needed in Windows */
++
++/* chkWinFontPath:
++ * See if environment variable envv is defined and
++ * if the path $envv/FONTS exists. If so, return the path,
++ * else return NULL.
++ */
++static char*
++chkWinFontPath (char* envv)
++{
++ char* root;
++ char* path;
++ root = getenv(envv);
++ if (!root) return NULL;
++ path = (char*)gdMalloc(strlen(root)+strlen(FONTSFX)+1);
++ strcpy (path, root);
++ strcat (path, FONTSFX);
++ if (access (path, F_OK) == 0) { /* success */
++ return path;
++ }
++ else {
++ gdFree (path);
++ return NULL;
++ }
++}
++
++/* getWinFontPath:
++ * Find Windows system font directory. Use environment variables to
++ * find system directory with a FONTS subdirectory.
++ * If successful, set GDFONTPATH to this value, for caching, and return it.
++ * Else, return NULL
++ */
++static char*
++getWinFontPath ()
++{
++ char* path = chkWinFontPath("SystemRoot");
++ if (!path) {
++ path = chkWinFontPath ("WinDir");
++ if (!path)
++ return NULL;
++ }
++#ifdef HAVE_SETENV
++ setenv("GDFONTPATH", path, 1);
++#else
++ {
++ char* ebuf = (char*)gdMalloc(strlen(GDP)+strlen(path)+1);
++ int rv;
++ strcpy(ebuf,GDP);
++ strcat(ebuf,path);
++ rv = putenv(ebuf);
++ }
++#endif
++ return path;
++}
++
++#endif /* WIN32 */
++
+ /* Look up font using font names as file names. */
+ static char * font_path(char **fontpath, char *name_list)
+ {
+@@ -1524,6 +1586,10 @@
+ */
+ *fontpath = NULL;
+ fontsearchpath = getenv ("GDFONTPATH");
++#ifdef WIN32
++ if (!fontsearchpath)
++ fontsearchpath = getWinFontPath ();
++#endif
+ if (!fontsearchpath)
+ fontsearchpath = DEFAULT_FONTPATH;
+ fontlist = strdup (name_list);
+diff -rub gd-2.0.33/gdfx.c gd-2.0.33jce3/gdfx.c
+--- gd-2.0.33/gdfx.c 2004-10-27 10:22:07.000000000 -0400
++++ gd-2.0.33jce3/gdfx.c 2005-08-15 11:23:47.000000000 -0400
+@@ -1,3 +1,7 @@
++#ifdef HAVE_CONFIG_H
++#include "config.h"
++#endif
++
+ #include "gd.h"
+ #include <math.h>
+
+diff -rub gd-2.0.33/gdhelpers.h gd-2.0.33jce3/gdhelpers.h
+--- gd-2.0.33/gdhelpers.h 2004-10-28 13:09:12.000000000 -0400
++++ gd-2.0.33jce3/gdhelpers.h 2005-08-15 11:23:47.000000000 -0400
+@@ -29,30 +29,38 @@
+
+ /* 2.0.16: portable mutex support for thread safety. */
+
+-#ifdef WIN32
+-/* 2.0.18: must include windows.h to get CRITICAL_SECTION. */
+-#include <windows.h>
+-#define gdMutexDeclare(x) CRITICAL_SECTION x
+-#define gdMutexSetup(x) InitializeCriticalSection(&x)
+-#define gdMutexShutdown(x) DeleteCriticalSection(&x)
+-#define gdMutexLock(x) EnterCriticalSection(&x)
+-#define gdMutexUnlock(x) LeaveCriticalSection(&x)
+-#else
+-#ifdef HAVE_PTHREAD
+-#include <pthread.h>
+-#define gdMutexDeclare(x) pthread_mutex_t x
+-#define gdMutexSetup(x) pthread_mutex_init(&x, 0)
+-#define gdMutexShutdown(x) pthread_mutex_destroy(&x)
+-#define gdMutexLock(x) pthread_mutex_lock(&x)
+-#define gdMutexUnlock(x) pthread_mutex_unlock(&x)
++#ifdef DISABLE_THREADS
++# define gdMutexDeclare(x)
++# define gdMutexSetup(x)
++# define gdMutexShutdown(x)
++# define gdMutexLock(x)
++# define gdMutexUnlock(x)
+ #else
+-#define gdMutexDeclare(x)
+-#define gdMutexSetup(x)
+-#define gdMutexShutdown(x)
+-#define gdMutexLock(x)
+-#define gdMutexUnlock(x)
+-#endif /* HAVE_PTHREAD */
+-#endif /* WIN32 */
++# ifdef WIN32
++/* 2.0.18: must include windows.h to get CRITICAL_SECTION. */
++# include <windows.h>
++# define gdMutexDeclare(x) CRITICAL_SECTION x
++# define gdMutexSetup(x) InitializeCriticalSection(&x)
++# define gdMutexShutdown(x) DeleteCriticalSection(&x)
++# define gdMutexLock(x) EnterCriticalSection(&x)
++# define gdMutexUnlock(x) LeaveCriticalSection(&x)
++# else
++# ifdef HAVE_PTHREAD
++# include <pthread.h>
++# define gdMutexDeclare(x) pthread_mutex_t x
++# define gdMutexSetup(x) pthread_mutex_init(&x, 0)
++# define gdMutexShutdown(x) pthread_mutex_destroy(&x)
++# define gdMutexLock(x) pthread_mutex_lock(&x)
++# define gdMutexUnlock(x) pthread_mutex_unlock(&x)
++# else
++# define gdMutexDeclare(x)
++# define gdMutexSetup(x)
++# define gdMutexShutdown(x)
++# define gdMutexLock(x)
++# define gdMutexUnlock(x)
++# endif /* HAVE_PTHREAD */
++# endif /* WIN32 */
++#endif /* DISABLE_THREADS */
+
+ #endif /* GDHELPERS_H */
+