FreeBSD Bugzilla – Attachment 75592 Details for
Bug 109149
[Patch] Upgrade gd to 2.0.34
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
gd-patch
gd-patch (text/plain), 62.98 KB, created by
oz
on 2007-02-16 01:38:37 UTC
(
hide
)
Description:
gd-patch
Filename:
MIME Type:
Creator:
oz
Created:
2007-02-16 01:38:37 UTC
Size:
62.98 KB
patch
obsolete
>diff -ruN gd.orig/Makefile gd/Makefile >--- gd.orig/Makefile Sat Jan 13 04:05:42 2007 >+++ gd/Makefile Thu Feb 15 18:14:38 2007 >@@ -6,14 +6,10 @@ > # > > PORTNAME= gd >-PORTVERSION= 2.0.33 >-PORTREVISION?= 4 >+PORTVERSION= 2.0.34 > PORTEPOCH= 1 > CATEGORIES+= graphics >-MASTER_SITES= http://www.boutell.com/gd/http/ \ >- ${MASTER_SITE_RINGSERVER} >-MASTER_SITE_SUBDIR= graphics/gd >-PKGNAMESUFFIX?= ${NOX11_SUFFIX}${PKGNAMESUFFIX2} >+MASTER_SITES= http://www.libgd.org/releases/ > > MAINTAINER?= dinoex@FreeBSD.org > COMMENT?= A graphics library for fast creation of images >@@ -22,23 +18,45 @@ > png.5:${PORTSDIR}/graphics/png \ > freetype.9:${PORTSDIR}/print/freetype2 > >-MAKE_ENV= WRKSRC="${WRKSRC}" CC="${CC}" CFLAGS="${CFLAGS}" CPPFLAGS="${CPPFLAGS}" LDFLAGS="${LDFLAGS}" >-MAKEFILE= ${FILESDIR}/Makefile.bsd >+USE_BZIP2= yes > USE_LDCONFIG= yes >-SCRIPTDIR= ${FILESDIR} >-CPPFLAGS+= -DHAVE_FT2BUILD_H >+GNU_CONFIGURE= yes >+ >+CONFIGURE_ARGS=--program-transform-name="" >+ >+.if !defined(SLAVEPORT) >+OPTIONS= XPM "Turns on Xpm support" off \ >+ FONTCONFIG "Turns on Fontconfig support" on \ >+ ICONV "Turn on Iconv support" off >+.endif > > .include <bsd.port.pre.mk> > >-.if defined(WITH_XPM) && !defined(WITHOUT_X11) >-USE_XPM= yes >-CPPFLAGS+= -I${X11BASE}/include/X11 -I${X11BASE}/include -DHAVE_LIBXPM >-LDFLAGS+= -L${X11BASE}/lib -lXpm -lX11 >-LDFLAGS2= -L${PREFIX}/lib -L${LOCALBASE}/lib -L${X11BASE}/lib >-FEATURES= GD_XPM GD_JPEG GD_FONTCONFIG GD_FREETYPE GD_GIF GD_PNG >+.if defined(WITHOUT_X11) >+CONFIGURE_ARGS+= --without-x >+.else >+ >+.if defined(WITH_XPM) >+CONFIGURE_ARGS+= --with-xpm=${X11BASE} > .else >-LDFLAGS2= -L${PREFIX}/lib -L${LOCALBASE}/lib >-FEATURES= GD_JPEG GD_FONTCONFIG GD_FREETYPE GD_GIF GD_PNG >+CONFIGURE_ARGS+= --without-xpm >+.endif >+ >+.if defined(WITH_FONTCONFIG) >+LIB_DEPENDS+= fontconfig.1:${PORTSDIR}/x11-fonts/fontconfig >+CONFIGURE_ARGS+= --with-fontconfig=${X11BASE} >+CPPFLAGS+= ${PTHREAD_CFLAGS} >+LDFLAGS+= ${PTHREAD_LIBS} >+.else >+CONFIGURE_ARGS+= --without-fontconfig >+.endif >+ >+.endif >+ >+.if defined(WITH_ICONV) >+CONFIGURE_ARGS+= --with-libiconv-prefix={LOCALBASE} >+.else >+CONFIGURE_ARGS+= --without-libiconv-prefix > .endif > > .if defined(GD_FONTS) >@@ -46,33 +64,25 @@ > SCRIPTS_ENV+= GD_FONTS="${GD_FONTS}" > .endif > >-pre-everything:: >+pre-patch: >+.if defined(SLAVEPORT) > @${ECHO_MSG} "" > @${ECHO_MSG} "gd has the following tunables:" > @${ECHO_MSG} "" > @${ECHO_MSG} " WITH_XPM=yes Turns on Xpm support" >+ @${ECHO_MSG} " WITH_FONTCONFIG=yes Turns on Fontconfig support" >+ @${ECHO_MSG} " WITH_ICONV=yes Turns on iconv support" > @${ECHO_MSG} "" >+.endif > >-post-extract: >- @${CP} ${FILESDIR}/g* ${WRKSRC} >- >-post-configure: >- ${SED} -e 's|@libdir@|${PREFIX}/lib|' \ >- -e 's|@includedir@|${PREFIX}/include|' \ >- -e 's|@VERSION@|${PORTVERSION}|' \ >- -e 's|@GDLIB_MAJOR@|${PORTVERSION:C/([0-9]*).*/\1/1}|' \ >- -e 's|@GDLIB_MINOR@|${PORTVERSION:C/[0-9]*[.]([0-9]).*/\1/1}|' \ >- -e 's|@GDLIB_REVISION@|${PORTVERSION:C/.*[.]([0-9]*)/\1/1}|' \ >- -e 's|@LDFLAGS@|${LDFLAGS2}|' \ >- -e 's|@LIBS@|-lgd|' \ >- -e 's|@FEATURES@|${FEATURES}|' \ >- ${WRKSRC}/config/gdlib-config.in \ >- > ${WRKDIR}/gdlib-config >+post-patch: >+.if defined(GD_FONTS) >+ @ ${CP} ${FILESDIR}/regen-fonts.sh ${WRKDIR} >+ @ ${CHMOD} a+x ${WRKDIR}/regen-fonts.sh >+ @ ${SETENV} GD_FONTS="${GD_FONTS}" WRKSRC="${WRKSRC}" ${WRKDIR}/regen-fonts.sh >+.endif > > post-install: >- ${INSTALL_DATA} ${WRKSRC}/gdfx.h ${WRKSRC}/gdhelpers.h \ >- ${PREFIX}/include/ >- ${INSTALL_SCRIPT} ${WRKDIR}/gdlib-config ${PREFIX}/bin/ > .if !defined(NOPORTDOCS) > @${MKDIR} ${DOCSDIR} > ${INSTALL_DATA} ${WRKSRC}/index.html ${DOCSDIR} >diff -ruN gd.orig/distinfo gd/distinfo >--- gd.orig/distinfo Sun Nov 13 02:26:36 2005 >+++ gd/distinfo Fri Feb 9 17:45:56 2007 >@@ -1,3 +1,3 @@ >-MD5 (gd-2.0.33.tar.gz) = be0a6d326cd8567e736fbc75df0a5c45 >-SHA256 (gd-2.0.33.tar.gz) = 2ba10c830e24781ec2e0594c6e49353e512e8bda782bc9a1851e70a5e8ced93e >-SIZE (gd-2.0.33.tar.gz) = 587617 >+MD5 (gd-2.0.34.tar.bz2) = 8c25c322f12030b1c24488efd577fec0 >+SHA256 (gd-2.0.34.tar.bz2) = 66baa531a860ca3e071d47eec7c0823c534a8a4dadf4cba6d17eeb6d4159d22f >+SIZE (gd-2.0.34.tar.bz2) = 1135372 >diff -ruN gd.orig/files/Makefile.bsd gd/files/Makefile.bsd >--- gd.orig/files/Makefile.bsd Sun Dec 18 03:30:10 2005 >+++ gd/files/Makefile.bsd Wed Dec 31 17:00:00 1969 >@@ -1,54 +0,0 @@ >-PROGS!= ${MAKE} -V BIN_PROGRAMS -f ${WRKSRC}/makefile.sample >-PROGS+= gd2togif gdcmpgif giftogd2 >-PROGS+= annotate # new utility, not included in makefile.sample >-TESTS= gdtest gddemo gd2time gdtestft testac fontsizetest fontwheeltest >-SRCS= gd.c gd_gd.c gd_gd2.c gd_io.c gd_io_dp.c gd_io_file.c \ >- gd_io_ss.c gd_jpeg.c gd_png.c gd_ss.c gd_topal.c \ >- gd_wbmp.c gdcache.c gdfontg.c gdfontl.c gdfontmb.c \ >- gdfonts.c gdfontt.c gdft.c gdfx.c gdhelpers.c gdhelpers.h \ >- gdkanji.c gdtables.c gdxpm.c jisx0208.h \ >- gd_security.c \ >- wbmp.c wbmp.h >-SRCS+= gd_gif_in.c gd_gif_out.c gd_biggif_out.c gd_lzw_out.c >-MAKEDIR=/usr/share/mk >-LIB=gd >-SHLIB_MAJOR=4 >-SHLIB_MINOR=0 >-INCS= gd.h gd_io.h gdcache.h gdfontg.h gdfontl.h gdfontmb.h \ >- gdfonts.h gdfontt.h entities.h >-SHLIB_NAME!= ${MAKE} -V SHLIB_NAME LIB=${LIB} \ >- SHLIB_MAJOR=${SHLIB_MAJOR} SHLIB_MINOR=${SHLIB_MINOR} -f ${MAKEDIR}/bsd.lib.mk >- >-CFLAGS+= -I${.CURDIR} -I${LOCALBASE}/include/freetype2/freetype \ >- -I${LOCALBASE}/include/freetype2 -I${LOCALBASE}/include \ >- -DHAVE_LIBPNG -DHAVE_LIBJPEG -DHAVE_LIBFREETYPE -DHAVE_LIBZ \ >- ${CPPFLAGS} >-LDADD= -L${LOCALBASE}/lib -lpng -lz -ljpeg -lfreetype -lm \ >- ${LDFLAGS} >- >-# The package comes with tests, but without any sort of test-harness, >-# to run them all automaticly. So building tests is disabled here. -mi >-all: lib${LIB}.a ${SHLIB_NAME} ${PROGS} # ${TESTS} >- >-lib${LIB}.a ${SHLIB_NAME}: ${SRCS} >- ${MAKE} LIB=${LIB} SRCS="${SRCS}" \ >- SHLIB_MAJOR=${SHLIB_MAJOR} SHLIB_MINOR=${SHLIB_MINOR} \ >- CFLAGS="${CFLAGS}" -ECFLAGS LDADD="${LDADD}" \ >- -f ${MAKEDIR}/bsd.lib.mk ${.TARGET} >- >-${PROGS} ${TESTS}: ${SHLIB_NAME} lib${LIB}.a >- ${MAKE} PROG=${.TARGET} NOMAN=1 LDADD="-L${.CURDIR} -lgd" \ >- CFLAGS="${CFLAGS}" -ECFLAGS -f ${MAKEDIR}/bsd.prog.mk >- >-install: >- mkdir -p ${PREFIX}/include >- ${MAKE} LIB=${LIB} LIBDIR=${PREFIX}/lib NOPROFILE=true \ >- SHLIB_MAJOR=${SHLIB_MAJOR} SHLIB_MINOR=${SHLIB_MINOR} \ >- -f ${MAKEDIR}/bsd.lib.mk install >- cd ${.CURDIR} && ${BSD_INSTALL_DATA} ${INCS} ${PREFIX}/include >- cd ${.CURDIR} && ${BSD_INSTALL_PROGRAM} ${PROGS} ${PREFIX}/bin/ >- ${BSD_INSTALL_SCRIPT} ${.CURDIR}/bdftogd ${PREFIX}/bin/ >- >-.if exists(${.CURDIR}/Makefile.fonts) >-.include "Makefile.fonts" >-.endif >diff -ruN gd.orig/files/configure gd/files/configure >--- gd.orig/files/configure Tue Jan 13 23:14:42 2004 >+++ gd/files/configure Wed Dec 31 17:00:00 1969 >@@ -1,44 +0,0 @@ >-#!/bin/sh >-# $FreeBSD: ports/graphics/gd/files/configure,v 1.1 2004/01/14 06:14:42 dinoex Exp $ >- >-# The GD_FONTS environment variable can be set to specify the gzipped >-# tar-ball containing the fonts in bdf format and the bdf file names. >-# >-# For example: >-# GD_FONTS="/usr/ports/distfiles/x-koi8u.tgz koi6x10.bdf koi8x13.bdf \ >-# koi9x15.bdf koi12x24.bdf koi10x20.bdf" >-# >-# This can be usefull for slave ports, like ukrainian/gd, which may >-# now provide alternative fonts easily. >- >-# TODO: . handle multiple archiving formats: tgz, tar.bz2, zip >-# . allow for passing already extracted font-files >- >-if [ -z "$GD_FONTS" ] >-then >- echo "GD_FONTS can be set to specify an alternative list of .bdf files" >- echo "See $0 for details..." >- exit 0 >-fi >- >-set $GD_FONTS >-# >-# The tarball is the first argument, the tiny, small, medium-bold, >-# large, and giant fonts follow. >-# >- >-tarball=$1 >-shift >-tar -xvzpf $tarball -C $WRKSRC $@ >- >-rm -f $WRKSRC/Makefile.fonts >- >-for font in Tiny Small MediumBold Large Giant >-do >- f=`echo $font | tr -d [[:lower:]] | tr [[:upper:]] [[:lower:]]` >- rm -f $WRKSRC/gdfont$f.[ch] >- printf 'gdfont%s.c gdfont%s.h: %s\ >- perl ${.CURDIR}/bdftogd gdFont%s font%s < %s\n' \ >- $f $f $1 $font $f $1 >> $WRKSRC/Makefile.fonts >- shift >-done >diff -ruN gd.orig/files/gd_biggif_out.c gd/files/gd_biggif_out.c >--- gd.orig/files/gd_biggif_out.c Mon Aug 18 10:15:06 2003 >+++ gd/files/gd_biggif_out.c Wed Dec 31 17:00:00 1969 >@@ -1,823 +0,0 @@ >-#include <stdio.h> >-#include <math.h> >-#include <string.h> >-#include <stdlib.h> >-#include "gd.h" >- >-/* >-** Wrapper functions for this module. >-*/ >- >-void gdImageBigGif(gdImagePtr im, FILE *outFile) >-{ >- gdIOCtx *out = gdNewFileCtx(outFile); >- gdImageBigGifCtx(im, out); >- out->gd_free(out); >-} >- >-void* gdImageBigGifPtr(gdImagePtr im, int *size) >-{ >- void *rv; >- gdIOCtx *out = gdNewDynamicCtx(2048, NULL); >- gdImageBigGifCtx(im, out); >- rv = gdDPExtractData(out,size); >- out->gd_free(out); >- return rv; >-} >- >-/* Code drawn from ppmtogif.c, from the pbmplus package >-** >-** Based on GIFENCOD by David Rowley <mgardi@watdscu.waterloo.edu>. A >-** Lempel-Zim compression based on "compress". >-** >-** Modified by Marcel Wijkstra <wijkstra@fwi.uva.nl> >-** >-** Copyright (C) 1989 by Jef Poskanzer. >-** >-** Permission to use, copy, modify, and distribute this software and its >-** documentation for any purpose and without fee is hereby granted, provided >-** that the above copyright notice appear in all copies and that both that >-** copyright notice and this permission notice appear in supporting >-** documentation. This software is provided "as is" without express or >-** implied warranty. >-** >-** The Graphics Interchange Format(c) is the Copyright property of >-** CompuServe Incorporated. GIF(sm) is a Service Mark property of >-** CompuServe Incorporated. >-* >-* Heavily modified by Mouse, 1998-02-12. >-* Remove LZW compression. >-* Added miGIF run length compression. >-* >-*/ >- >-/* >- * a code_int must be able to hold 2**GIFBITS values of type int, and also -1 >- */ >-typedef int code_int; >- >-static int colorstobpp(int colors); >-static void BumpPixel (void); >-static int GIFNextPixel (gdImagePtr im); >-static void GIFEncode (gdIOCtx *fp, int GWidth, int GHeight, int GInterlace, int Background, int Transparent, int BitsPerPixel, int *Red, int *Green, int *Blue, gdImagePtr im); >-/*static void Putword (int w, gdIOCtx *fp); */ >-static void GIFcompress (int, gdIOCtx *, gdImagePtr, int); >-static void output (code_int code); >- >-/* UNUSED >-* static void char_init (void); >-* static void char_out (int c); >-*/ >- >-/* Allows for reuse */ >-static void init_statics(void); >- >-void gdImageBigGifCtx(gdImagePtr im, gdIOCtx *out) >-{ >- int interlace, transparent, BitsPerPixel; >- >- interlace = im->interlace; >- transparent = im->transparent; >- >- BitsPerPixel = colorstobpp(im->colorsTotal); >- /* Clear any old values in statics strewn through the GIF code */ >- init_statics(); >- /* All set, let's do it. */ >- GIFEncode( >- out, im->sx, im->sy, interlace, 0, transparent, BitsPerPixel, >- im->red, im->green, im->blue, im); >-} >- >-static int >-colorstobpp(int colors) >-{ >- int bpp = 0; >- >- if ( colors <= 2 ) >- bpp = 1; >- else if ( colors <= 4 ) >- bpp = 2; >- else if ( colors <= 8 ) >- bpp = 3; >- else if ( colors <= 16 ) >- bpp = 4; >- else if ( colors <= 32 ) >- bpp = 5; >- else if ( colors <= 64 ) >- bpp = 6; >- else if ( colors <= 128 ) >- bpp = 7; >- else if ( colors <= 256 ) >- bpp = 8; >- return bpp; >- } >- >-/***************************************************************************** >- * >- * GIFENCODE.C - GIF Image compression interface >- * >- * GIFEncode( FName, GHeight, GWidth, GInterlace, Background, Transparent, >- * BitsPerPixel, Red, Green, Blue, gdImagePtr ) >- * >- *****************************************************************************/ >- >-#define TRUE 1 >-#define FALSE 0 >- >-static int Width, Height; >-static int curx, cury; >-static long CountDown; >-static int Pass = 0; >-static int Interlace; >- >-/* >- * Bump the 'curx' and 'cury' to point to the next pixel >- */ >-static void >-BumpPixel(void) >-{ >- /* >- * Bump the current X position >- */ >- ++curx; >- >- /* >- * If we are at the end of a scan line, set curx back to the beginning >- * If we are interlaced, bump the cury to the appropriate spot, >- * otherwise, just increment it. >- */ >- if( curx == Width ) { >- curx = 0; >- >- if( !Interlace ) >- ++cury; >- else { >- switch( Pass ) { >- >- case 0: >- cury += 8; >- if( cury >= Height ) { >- ++Pass; >- cury = 4; >- } >- break; >- >- case 1: >- cury += 8; >- if( cury >= Height ) { >- ++Pass; >- cury = 2; >- } >- break; >- >- case 2: >- cury += 4; >- if( cury >= Height ) { >- ++Pass; >- cury = 1; >- } >- break; >- >- case 3: >- cury += 2; >- break; >- } >- } >- } >-} >- >-/* >- * Return the next pixel from the image >- */ >-static int >-GIFNextPixel(gdImagePtr im) >-{ >- int r; >- >- if( CountDown == 0 ) >- return EOF; >- >- --CountDown; >- >- r = gdImageGetPixel(im, curx, cury); >- >- BumpPixel(); >- >- return r; >-} >- >-/* public */ >- >-static void >-GIFEncode(gdIOCtx *fp, int GWidth, int GHeight, int GInterlace, int Background, int Transparent, int BitsPerPixel, int *Red, int *Green, int *Blue, gdImagePtr im) >-{ >- int B; >- int RWidth, RHeight; >- int LeftOfs, TopOfs; >- int Resolution; >- int ColorMapSize; >- int InitCodeSize; >- int i; >- >- Interlace = GInterlace; >- >- ColorMapSize = 1 << BitsPerPixel; >- >- RWidth = Width = GWidth; >- RHeight = Height = GHeight; >- LeftOfs = TopOfs = 0; >- >- Resolution = BitsPerPixel; >- >- /* >- * Calculate number of bits we are expecting >- */ >- CountDown = (long)Width * (long)Height; >- >- /* >- * Indicate which pass we are on (if interlace) >- */ >- Pass = 0; >- >- /* >- * The initial code size >- */ >- if( BitsPerPixel <= 1 ) >- InitCodeSize = 2; >- else >- InitCodeSize = BitsPerPixel; >- >- /* >- * Set up the current x and y position >- */ >- curx = cury = 0; >- >- /* >- * Write the Magic header >- */ >- gdPutBuf( Transparent < 0 ? "GIF87a" : "GIF89a", 6, fp ); >- >- /* >- * Write out the screen width and height >- */ >- Putword( RWidth, fp ); >- Putword( RHeight, fp ); >- >- /* >- * Indicate that there is a global colour map >- */ >- B = 0x80; /* Yes, there is a color map */ >- >- /* >- * OR in the resolution >- */ >- B |= (Resolution - 1) << 4; >- >- /* >- * OR in the Bits per Pixel >- */ >- B |= (BitsPerPixel - 1); >- >- /* >- * Write it out >- */ >- gdPutC( B, fp ); >- >- /* >- * Write out the Background colour >- */ >- gdPutC( Background, fp ); >- >- /* >- * Byte of 0's (future expansion) >- */ >- gdPutC( 0, fp ); >- >- /* >- * Write out the Global Colour Map >- */ >- for( i=0; i<ColorMapSize; ++i ) { >- gdPutC( Red[i], fp ); >- gdPutC( Green[i], fp ); >- gdPutC( Blue[i], fp ); >- } >- >- /* >- * Write out extension for transparent colour index, if necessary. >- */ >- if ( Transparent >= 0 ) { >- gdPutC( '!', fp ); >- gdPutC( 0xf9, fp ); >- gdPutC( 4, fp ); >- gdPutC( 1, fp ); >- gdPutC( 0, fp ); >- gdPutC( 0, fp ); >- gdPutC( (unsigned char) Transparent, fp ); >- gdPutC( 0, fp ); >- } >- >- /* >- * Write an Image separator >- */ >- gdPutC( ',', fp ); >- >- /* >- * Write the Image header >- */ >- >- Putword( LeftOfs, fp ); >- Putword( TopOfs, fp ); >- Putword( Width, fp ); >- Putword( Height, fp ); >- >- /* >- * Write out whether or not the image is interlaced >- */ >- if( Interlace ) >- gdPutC( 0x40, fp ); >- else >- gdPutC( 0x00, fp ); >- >- /* >- * Write out the initial code size >- */ >- gdPutC( InitCodeSize, fp ); >- >- /* >- * Go and actually compress the data >- */ >- GIFcompress( InitCodeSize+1, fp, im, Background ); >- >- /* >- * Write out a Zero-length packet (to end the series) >- */ >- gdPutC( 0, fp ); >- >- /* >- * Write the GIF file terminator >- */ >- gdPutC( ';', fp ); >-} >- >-/* Write out a word to the GIF file */ >-/*static void */ >-/*Putword(int w, gdIOCtx *fp) */ >-/*{ */ >-/* fputc( w & 0xff, fp ); */ >-/* fputc( (w / 256) & 0xff, fp ); */ >-/*} */ >- >-#define GIFBITS 12 >- >-/*----------------------------------------------------------------------- >- * >- * miGIF Compression - mouse and ivo's GIF-compatible compression >- * >- * -run length encoding compression routines- >- * >- * Copyright (C) 1998 Hutchison Avenue Software Corporation >- * http://www.hasc.com >- * info@hasc.com >- * >- * Permission to use, copy, modify, and distribute this software and its >- * documentation for any purpose and without fee is hereby granted, provided >- * that the above copyright notice appear in all copies and that both that >- * copyright notice and this permission notice appear in supporting >- * documentation. This software is provided "AS IS." The Hutchison Avenue >- * Software Corporation disclaims all warranties, either express or implied, >- * including but not limited to implied warranties of merchantability and >- * fitness for a particular purpose, with respect to this code and accompanying >- * documentation. >- * >- * The miGIF compression routines do not, strictly speaking, generate files >- * conforming to the GIF spec, since the image data is not LZW-compressed >- * (this is the point: in order to avoid transgression of the Unisys patent >- * on the LZW algorithm.) However, miGIF generates data streams that any >- * reasonably sane LZW decompresser will decompress to what we want. >- * >- * miGIF compression uses run length encoding. It compresses horizontal runs >- * of pixels of the same color. This type of compression gives good results >- * on images with many runs, for example images with lines, text and solid >- * shapes on a solid-colored background. It gives little or no compression >- * on images with few runs, for example digital or scanned photos. >- * >- * der Mouse >- * mouse@rodents.montreal.qc.ca >- * 7D C8 61 52 5D E7 2D 39 4E F1 31 3E E8 B3 27 4B >- * >- * ivo@hasc.com >- * >- * The Graphics Interchange Format(c) is the Copyright property of >- * CompuServe Incorporated. GIF(sm) is a Service Mark property of >- * CompuServe Incorporated. >- * >- */ >- >-static int rl_pixel; >-static int rl_basecode; >-static int rl_count; >-static int rl_table_pixel; >-static int rl_table_max; >-static int just_cleared; >-static int out_bits; >-static int out_bits_init; >-static int out_count; >-static int out_bump; >-static int out_bump_init; >-static int out_clear; >-static int out_clear_init; >-static int max_ocodes; >-static int code_clear; >-static int code_eof; >-static unsigned int obuf; >-static int obits; >-static gdIOCtx *ofile; >-static unsigned char oblock[256]; >-static int oblen; >- >-/* Used only when debugging GIF compression code */ >-/* #define DEBUGGING_ENVARS */ >- >-#ifdef DEBUGGING_ENVARS >- >-static int verbose_set = 0; >-static int verbose; >-#define VERBOSE (verbose_set?verbose:set_verbose()) >- >-static int set_verbose(void) >-{ >- verbose = !!getenv("GIF_VERBOSE"); >- verbose_set = 1; >- return(verbose); >-} >- >-#else >- >-#define VERBOSE 0 >- >-#endif >- >- >-static const char *binformat(unsigned int v, int nbits) >-{ >- static char bufs[8][64]; >- static int bhand = 0; >- unsigned int bit; >- int bno; >- char *bp; >- >- bhand --; >- if (bhand < 0) bhand = (sizeof(bufs)/sizeof(bufs[0]))-1; >- bp = &bufs[bhand][0]; >- for (bno=nbits-1,bit=1U<<bno;bno>=0;bno--,bit>>=1) >- { *bp++ = (v & bit) ? '1' : '0'; >- if (((bno&3) == 0) && (bno != 0)) *bp++ = '.'; >- } >- *bp = '\0'; >- return(&bufs[bhand][0]); >-} >- >-static void write_block(void) >-{ >- int i; >- >- if (VERBOSE) >- { printf("write_block %d:",oblen); >- for (i=0;i<oblen;i++) printf(" %02x",oblock[i]); >- printf("\n"); >- } >- gdPutC(oblen,ofile); >- gdPutBuf(&oblock[0],oblen,ofile); >- oblen = 0; >-} >- >-static void block_out(unsigned char c) >-{ >- if (VERBOSE) printf("block_out %s\n",binformat(c,8)); >- oblock[oblen++] = c; >- if (oblen >= 255) write_block(); >-} >- >-static void block_flush(void) >-{ >- if (VERBOSE) printf("block_flush\n"); >- if (oblen > 0) write_block(); >-} >- >-static void output(int val) >-{ >- if (VERBOSE) printf("output %s [%s %d %d]\n",binformat(val,out_bits),binformat(obuf,obits),obits,out_bits); >- obuf |= val << obits; >- obits += out_bits; >- while (obits >= 8) >- { block_out(obuf&0xff); >- obuf >>= 8; >- obits -= 8; >- } >- if (VERBOSE) printf("output leaving [%s %d]\n",binformat(obuf,obits),obits); >-} >- >-static void output_flush(void) >-{ >- if (VERBOSE) printf("output_flush\n"); >- if (obits > 0) block_out(obuf); >- block_flush(); >-} >- >-static void did_clear(void) >-{ >- if (VERBOSE) printf("did_clear\n"); >- out_bits = out_bits_init; >- out_bump = out_bump_init; >- out_clear = out_clear_init; >- out_count = 0; >- rl_table_max = 0; >- just_cleared = 1; >-} >- >-static void output_plain(int c) >-{ >- if (VERBOSE) printf("output_plain %s\n",binformat(c,out_bits)); >- just_cleared = 0; >- output(c); >- out_count ++; >- if (out_count >= out_bump) >- { out_bits ++; >- out_bump += 1 << (out_bits - 1); >- } >- if (out_count >= out_clear) >- { output(code_clear); >- did_clear(); >- } >-} >- >-static unsigned int isqrt(unsigned int x) >-{ >- unsigned int r; >- unsigned int v; >- >- if (x < 2) return(x); >- for (v=x,r=1;v;v>>=2,r<<=1) ; >- while (1) >- { v = ((x / r) + r) / 2; >- if ((v == r) || (v == r+1)) return(r); >- r = v; >- } >-} >- >-static unsigned int compute_triangle_count(unsigned int count, unsigned int nrepcodes) >-{ >- unsigned int perrep; >- unsigned int cost; >- >- cost = 0; >- perrep = (nrepcodes * (nrepcodes+1)) / 2; >- while (count >= perrep) >- { cost += nrepcodes; >- count -= perrep; >- } >- if (count > 0) >- { unsigned int n; >- n = isqrt(count); >- while ((n*(n+1)) >= 2*count) n --; >- while ((n*(n+1)) < 2*count) n ++; >- cost += n; >- } >- return(cost); >-} >- >-static void max_out_clear(void) >-{ >- out_clear = max_ocodes; >-} >- >-static void reset_out_clear(void) >-{ >- out_clear = out_clear_init; >- if (out_count >= out_clear) >- { output(code_clear); >- did_clear(); >- } >-} >- >-static void rl_flush_fromclear(int count) >-{ >- int n; >- >- if (VERBOSE) printf("rl_flush_fromclear %d\n",count); >- max_out_clear(); >- rl_table_pixel = rl_pixel; >- n = 1; >- while (count > 0) >- { if (n == 1) >- { rl_table_max = 1; >- output_plain(rl_pixel); >- count --; >- } >- else if (count >= n) >- { rl_table_max = n; >- output_plain(rl_basecode+n-2); >- count -= n; >- } >- else if (count == 1) >- { rl_table_max ++; >- output_plain(rl_pixel); >- count = 0; >- } >- else >- { rl_table_max ++; >- output_plain(rl_basecode+count-2); >- count = 0; >- } >- if (out_count == 0) n = 1; else n ++; >- } >- reset_out_clear(); >- if (VERBOSE) printf("rl_flush_fromclear leaving table_max=%d\n",rl_table_max); >-} >- >-static void rl_flush_clearorrep(int count) >-{ >- int withclr; >- >- if (VERBOSE) printf("rl_flush_clearorrep %d\n",count); >- withclr = 1 + compute_triangle_count(count,max_ocodes); >- if (withclr < count) >- { output(code_clear); >- did_clear(); >- rl_flush_fromclear(count); >- } >- else >- { for (;count>0;count--) output_plain(rl_pixel); >- } >-} >- >-static void rl_flush_withtable(int count) >-{ >- int repmax; >- int repleft; >- int leftover; >- >- if (VERBOSE) printf("rl_flush_withtable %d\n",count); >- repmax = count / rl_table_max; >- leftover = count % rl_table_max; >- repleft = (leftover ? 1 : 0); >- if (out_count+repmax+repleft > max_ocodes) >- { repmax = max_ocodes - out_count; >- leftover = count - (repmax * rl_table_max); >- repleft = 1 + compute_triangle_count(leftover,max_ocodes); >- } >- if (VERBOSE) printf("rl_flush_withtable repmax=%d leftover=%d repleft=%d\n",repmax,leftover,repleft); >- if (1+compute_triangle_count(count,max_ocodes) < repmax+repleft) >- { output(code_clear); >- did_clear(); >- rl_flush_fromclear(count); >- return; >- } >- max_out_clear(); >- for (;repmax>0;repmax--) output_plain(rl_basecode+rl_table_max-2); >- if (leftover) >- { if (just_cleared) >- { rl_flush_fromclear(leftover); >- } >- else if (leftover == 1) >- { output_plain(rl_pixel); >- } >- else >- { output_plain(rl_basecode+leftover-2); >- } >- } >- reset_out_clear(); >-} >- >-static void rl_flush(void) >-{ >- /* UNUSED int table_reps; */ >- /* UNUSED int table_extra; */ >- >- if (VERBOSE) printf("rl_flush [ %d %d\n",rl_count,rl_pixel); >- if (rl_count == 1) >- { output_plain(rl_pixel); >- rl_count = 0; >- if (VERBOSE) printf("rl_flush ]\n"); >- return; >- } >- if (just_cleared) >- { rl_flush_fromclear(rl_count); >- } >- else if ((rl_table_max < 2) || (rl_table_pixel != rl_pixel)) >- { rl_flush_clearorrep(rl_count); >- } >- else >- { rl_flush_withtable(rl_count); >- } >- if (VERBOSE) printf("rl_flush ]\n"); >- rl_count = 0; >-} >- >-static void GIFcompress(int init_bits, gdIOCtx *outfile, gdImagePtr im, int background) >-{ >- int c; >- >- ofile = outfile; >- obuf = 0; >- obits = 0; >- oblen = 0; >- code_clear = 1 << (init_bits - 1); >- code_eof = code_clear + 1; >- rl_basecode = code_eof + 1; >- out_bump_init = (1 << (init_bits - 1)) - 1; >- /* for images with a lot of runs, making out_clear_init larger will >- give better compression. */ >- out_clear_init = (init_bits <= 3) ? 9 : (out_bump_init-1); >-#ifdef DEBUGGING_ENVARS >- { const char *ocienv; >- ocienv = getenv("GIF_OUT_CLEAR_INIT"); >- if (ocienv) >- { out_clear_init = atoi(ocienv); >- if (VERBOSE) printf("[overriding out_clear_init to %d]\n",out_clear_init); >- } >- } >-#endif >- out_bits_init = init_bits; >- max_ocodes = (1 << GIFBITS) - ((1 << (out_bits_init - 1)) + 3); >- did_clear(); >- output(code_clear); >- rl_count = 0; >- while (1) >- { c = GIFNextPixel(im); >- if ((rl_count > 0) && (c != rl_pixel)) rl_flush(); >- if (c == EOF) break; >- if (rl_pixel == c) >- { rl_count ++; >- } >- else >- { rl_pixel = c; >- rl_count = 1; >- } >- } >- output(code_eof); >- output_flush(); >-} >- >-/*----------------------------------------------------------------------- >- * >- * End of miGIF section - See copyright notice at start of section. >- * >- *----------------------------------------------------------------------- >-*/ >- >-/****************************************************************************** >- * >- * GIF Specific routines >- * >- ******************************************************************************/ >- >-/* >- * Number of characters so far in this 'packet' >- */ >-static int a_count; >- >-/* >- * Set up the 'byte output' routine >- */ >- >-/* UNUSED >-* static void >-* char_init(void) >-* { >-* a_count = 0; >-* } >-*/ >- >-/* >- * Define the storage for the packet accumulator >- */ >- >-/* UNUSED static char accum[ 256 ]; */ >- >-static void init_statics(void) { >- /* Some of these are properly initialized later. What I'm doing >- here is making sure code that depends on C's initialization >- of statics doesn't break when the code gets called more >- than once. */ >- Width = 0; >- Height = 0; >- curx = 0; >- cury = 0; >- CountDown = 0; >- Pass = 0; >- Interlace = 0; >- a_count = 0; >-} >- >- >-/* +-------------------------------------------------------------------+ */ >-/* | Copyright 1990, 1991, 1993, David Koblas. (koblas@netcom.com) | */ >-/* | Permission to use, copy, modify, and distribute this software | */ >-/* | and its documentation for any purpose and without fee is hereby | */ >-/* | granted, provided that the above copyright notice appear in all | */ >-/* | copies and that both that copyright notice and this permission | */ >-/* | notice appear in supporting documentation. This software is | */ >-/* | provided "as is" without express or implied warranty. | */ >-/* +-------------------------------------------------------------------+ */ >- >diff -ruN gd.orig/files/gd_lzw_out.c gd/files/gd_lzw_out.c >--- gd.orig/files/gd_lzw_out.c Mon Aug 18 10:15:06 2003 >+++ gd/files/gd_lzw_out.c Wed Dec 31 17:00:00 1969 >@@ -1,795 +0,0 @@ >-#include <stdio.h> >-#include <math.h> >-#include <string.h> >-#include <stdlib.h> >-#include "gd.h" >- >-/* Code drawn from ppmtogif.c, from the pbmplus package >-** >-** Based on GIFENCOD by David Rowley <mgardi@watdscu.waterloo.edu>. A >-** Lempel-Zim compression based on "compress". >-** >-** Modified by Marcel Wijkstra <wijkstra@fwi.uva.nl> >-** >-** Copyright (C) 1989 by Jef Poskanzer. >-** >-** Permission to use, copy, modify, and distribute this software and its >-** documentation for any purpose and without fee is hereby granted, provided >-** that the above copyright notice appear in all copies and that both that >-** copyright notice and this permission notice appear in supporting >-** documentation. This software is provided "as is" without express or >-** implied warranty. >-** >-** The Graphics Interchange Format(c) is the Copyright property of >-** CompuServe Incorporated. GIF(sm) is a Service Mark property of >-** CompuServe Incorporated. >-*/ >- >-/* >- * a code_int must be able to hold 2**GIFBITS values of type int, and also -1 >- */ >-typedef int code_int; >- >-#ifdef SIGNED_COMPARE_SLOW >-typedef unsigned long int count_int; >-typedef unsigned short int count_short; >-#else /*SIGNED_COMPARE_SLOW*/ >-typedef long int count_int; >-#endif /*SIGNED_COMPARE_SLOW*/ >- >-static int colorstobpp(int colors); >-static void BumpPixel (void); >-static int GIFNextPixel (gdImagePtr im); >-static void GIFEncode (gdIOCtx *fp, int GWidth, int GHeight, int GInterlace, int Background, int Transparent, int BitsPerPixel, int *Red, int *Green, int *Blue, gdImagePtr im); >-/*static void Putword (int w, gdIOCtx *fp); */ >-static void compress (int init_bits, gdIOCtx *outfile, gdImagePtr im); >-static void output (code_int code); >-static void cl_block (void); >-static void cl_hash (register count_int hsize); >-static void char_init (void); >-static void char_out (int c); >-static void flush_char (void); >-/* Allows for reuse */ >-static void init_statics(void); >- >-void gdImageLzwCtx(gdImagePtr im, gdIOCtx *out) >-{ >- int interlace, transparent, BitsPerPixel; >- >- interlace = im->interlace; >- transparent = im->transparent; >- >- BitsPerPixel = colorstobpp(im->colorsTotal); >- /* Clear any old values in statics strewn through the GIF code */ >- init_statics(); >- /* All set, let's do it. */ >- GIFEncode( >- out, im->sx, im->sy, interlace, 0, transparent, BitsPerPixel, >- im->red, im->green, im->blue, im); >-} >- >-void gdImageLzw(gdImagePtr im, FILE *outFile) >-{ >- gdIOCtx *out = gdNewFileCtx(outFile); >- gdImageLzwCtx(im, out); >- out->gd_free(out); >-} >- >-void* gdImageLzwPtr(gdImagePtr im, int *size) >-{ >- void *rv; >- gdIOCtx *out = gdNewDynamicCtx(2048, NULL); >- gdImageLzwCtx(im, out); >- rv = gdDPExtractData(out,size); >- out->gd_free(out); >- return rv; >-} >- >- >- >-static int >-colorstobpp(int colors) >-{ >- int bpp = 0; >- >- if ( colors <= 2 ) >- bpp = 1; >- else if ( colors <= 4 ) >- bpp = 2; >- else if ( colors <= 8 ) >- bpp = 3; >- else if ( colors <= 16 ) >- bpp = 4; >- else if ( colors <= 32 ) >- bpp = 5; >- else if ( colors <= 64 ) >- bpp = 6; >- else if ( colors <= 128 ) >- bpp = 7; >- else if ( colors <= 256 ) >- bpp = 8; >- return bpp; >- } >- >-/***************************************************************************** >- * >- * GIFENCODE.C - GIF Image compression interface >- * >- * GIFEncode( FName, GHeight, GWidth, GInterlace, Background, Transparent, >- * BitsPerPixel, Red, Green, Blue, gdImagePtr ) >- * >- *****************************************************************************/ >- >-#define TRUE 1 >-#define FALSE 0 >- >-static int Width, Height; >-static int curx, cury; >-static long CountDown; >-static int Pass = 0; >-static int Interlace; >- >-/* >- * Bump the 'curx' and 'cury' to point to the next pixel >- */ >-static void >-BumpPixel(void) >-{ >- /* >- * Bump the current X position >- */ >- ++curx; >- >- /* >- * If we are at the end of a scan line, set curx back to the beginning >- * If we are interlaced, bump the cury to the appropriate spot, >- * otherwise, just increment it. >- */ >- if( curx == Width ) { >- curx = 0; >- >- if( !Interlace ) >- ++cury; >- else { >- switch( Pass ) { >- >- case 0: >- cury += 8; >- if( cury >= Height ) { >- ++Pass; >- cury = 4; >- } >- break; >- >- case 1: >- cury += 8; >- if( cury >= Height ) { >- ++Pass; >- cury = 2; >- } >- break; >- >- case 2: >- cury += 4; >- if( cury >= Height ) { >- ++Pass; >- cury = 1; >- } >- break; >- >- case 3: >- cury += 2; >- break; >- } >- } >- } >-} >- >-/* >- * Return the next pixel from the image >- */ >-static int >-GIFNextPixel(gdImagePtr im) >-{ >- int r; >- >- if( CountDown == 0 ) >- return EOF; >- >- --CountDown; >- >- r = gdImageGetPixel(im, curx, cury); >- >- BumpPixel(); >- >- return r; >-} >- >-/* public */ >- >-static void >-GIFEncode(gdIOCtx *fp, int GWidth, int GHeight, int GInterlace, int Background, int Transparent, int BitsPerPixel, int *Red, int *Green, int *Blue, gdImagePtr im) >-{ >- int B; >- int RWidth, RHeight; >- int LeftOfs, TopOfs; >- int Resolution; >- int ColorMapSize; >- int InitCodeSize; >- int i; >- >- Interlace = GInterlace; >- >- ColorMapSize = 1 << BitsPerPixel; >- >- RWidth = Width = GWidth; >- RHeight = Height = GHeight; >- LeftOfs = TopOfs = 0; >- >- Resolution = BitsPerPixel; >- >- /* >- * Calculate number of bits we are expecting >- */ >- CountDown = (long)Width * (long)Height; >- >- /* >- * Indicate which pass we are on (if interlace) >- */ >- Pass = 0; >- >- /* >- * The initial code size >- */ >- if( BitsPerPixel <= 1 ) >- InitCodeSize = 2; >- else >- InitCodeSize = BitsPerPixel; >- >- /* >- * Set up the current x and y position >- */ >- curx = cury = 0; >- >- /* >- * Write the Magic header >- */ >- gdPutBuf( Transparent < 0 ? "GIF87a" : "GIF89a", 6, fp ); >- >- /* >- * Write out the screen width and height >- */ >- Putword( RWidth, fp ); >- Putword( RHeight, fp ); >- >- /* >- * Indicate that there is a global colour map >- */ >- B = 0x80; /* Yes, there is a color map */ >- >- /* >- * OR in the resolution >- */ >- B |= (Resolution - 1) << 5; >- >- /* >- * OR in the Bits per Pixel >- */ >- B |= (BitsPerPixel - 1); >- >- /* >- * Write it out >- */ >- gdPutC( B, fp ); >- >- /* >- * Write out the Background colour >- */ >- gdPutC( Background, fp ); >- >- /* >- * Byte of 0's (future expansion) >- */ >- gdPutC( 0, fp ); >- >- /* >- * Write out the Global Colour Map >- */ >- for( i=0; i<ColorMapSize; ++i ) { >- gdPutC( Red[i], fp ); >- gdPutC( Green[i], fp ); >- gdPutC( Blue[i], fp ); >- } >- >- /* >- * Write out extension for transparent colour index, if necessary. >- */ >- if ( Transparent >= 0 ) { >- gdPutC( '!', fp ); >- gdPutC( 0xf9, fp ); >- gdPutC( 4, fp ); >- gdPutC( 1, fp ); >- gdPutC( 0, fp ); >- gdPutC( 0, fp ); >- gdPutC( (unsigned char) Transparent, fp ); >- gdPutC( 0, fp ); >- } >- >- /* >- * Write an Image separator >- */ >- gdPutC( ',', fp ); >- >- /* >- * Write the Image header >- */ >- >- Putword( LeftOfs, fp ); >- Putword( TopOfs, fp ); >- Putword( Width, fp ); >- Putword( Height, fp ); >- >- /* >- * Write out whether or not the image is interlaced >- */ >- if( Interlace ) >- gdPutC( 0x40, fp ); >- else >- gdPutC( 0x00, fp ); >- >- /* >- * Write out the initial code size >- */ >- gdPutC( InitCodeSize, fp ); >- >- /* >- * Go and actually compress the data >- */ >- compress( InitCodeSize+1, fp, im ); >- >- /* >- * Write out a Zero-length packet (to end the series) >- */ >- gdPutC( 0, fp ); >- >- /* >- * Write the GIF file terminator >- */ >- gdPutC( ';', fp ); >-} >- >-/* */ >-/* * Write out a word to the GIF file */ >-/* */ >-/*static void */ >-/*Putword(int w, FILE *fp) */ >-/*{ */ >-/* fputc( w & 0xff, fp ); */ >-/* fputc( (w / 256) & 0xff, fp ); */ >-/*} */ >- >- >-/*************************************************************************** >- * >- * GIFCOMPR.C - GIF Image compression routines >- * >- * Lempel-Ziv compression based on 'compress'. GIF modifications by >- * David Rowley (mgardi@watdcsu.waterloo.edu) >- * >- ***************************************************************************/ >- >-/* >- * General DEFINEs >- */ >- >-#define GIFBITS 12 >- >-#define HSIZE 5003 /* 80% occupancy */ >- >-#ifdef NO_UCHAR >- typedef char char_type; >-#else /*NO_UCHAR*/ >- typedef unsigned char char_type; >-#endif /*NO_UCHAR*/ >- >-/* >- * >- * GIF Image compression - modified 'compress' >- * >- * Based on: compress.c - File compression ala IEEE Computer, June 1984. >- * >- * By Authors: Spencer W. Thomas (decvax!harpo!utah-cs!utah-gr!thomas) >- * Jim McKie (decvax!mcvax!jim) >- * Steve Davies (decvax!vax135!petsd!peora!srd) >- * Ken Turkowski (decvax!decwrl!turtlevax!ken) >- * James A. Woods (decvax!ihnp4!ames!jaw) >- * Joe Orost (decvax!vax135!petsd!joe) >- * >- */ >-#include <ctype.h> >- >-#define ARGVAL() (*++(*argv) || (--argc && *++argv)) >- >-static int n_bits; /* number of bits/code */ >-static int maxbits = GIFBITS; /* user settable max # bits/code */ >-static code_int maxcode; /* maximum code, given n_bits */ >-static code_int maxmaxcode = (code_int)1 << GIFBITS; /* should NEVER generate this code */ >-#ifdef COMPATIBLE /* But wrong! */ >-# define MAXCODE(n_bits) ((code_int) 1 << (n_bits) - 1) >-#else /*COMPATIBLE*/ >-# define MAXCODE(n_bits) (((code_int) 1 << (n_bits)) - 1) >-#endif /*COMPATIBLE*/ >- >-static count_int htab [HSIZE]; >-static unsigned short codetab [HSIZE]; >-#define HashTabOf(i) htab[i] >-#define CodeTabOf(i) codetab[i] >- >-static code_int hsize = HSIZE; /* for dynamic table sizing */ >- >-/* >- * To save much memory, we overlay the table used by compress() with those >- * used by decompress(). The tab_prefix table is the same size and type >- * as the codetab. The tab_suffix table needs 2**GIFBITS characters. We >- * get this from the beginning of htab. The output stack uses the rest >- * of htab, and contains characters. There is plenty of room for any >- * possible stack (stack used to be 8000 characters). >- */ >- >-#define tab_prefixof(i) CodeTabOf(i) >-#define tab_suffixof(i) ((char_type*)(htab))[i] >-#define de_stack ((char_type*)&tab_suffixof((code_int)1<<GIFBITS)) >- >-static code_int free_ent = 0; /* first unused entry */ >- >-/* >- * block compression parameters -- after all codes are used up, >- * and compression rate changes, start over. >- */ >-static int clear_flg = 0; >- >-static int offset; >-static long int in_count = 1; /* length of input */ >-static long int out_count = 0; /* # of codes output (for debugging) */ >- >-/* >- * compress stdin to stdout >- * >- * Algorithm: use open addressing double hashing (no chaining) on the >- * prefix code / next character combination. We do a variant of Knuth's >- * algorithm D (vol. 3, sec. 6.4) along with G. Knott's relatively-prime >- * secondary probe. Here, the modular division first probe is gives way >- * to a faster exclusive-or manipulation. Also do block compression with >- * an adaptive reset, whereby the code table is cleared when the compression >- * ratio decreases, but after the table fills. The variable-length output >- * codes are re-sized at this point, and a special CLEAR code is generated >- * for the decompressor. Late addition: construct the table according to >- * file size for noticeable speed improvement on small files. Please direct >- * questions about this implementation to ames!jaw. >- */ >- >-static int g_init_bits; >-static gdIOCtx* g_outfile; >- >-static int ClearCode; >-static int EOFCode; >- >-static void >-compress(int init_bits, gdIOCtx *outfile, gdImagePtr im) >-{ >- register long fcode; >- register code_int i /* = 0 */; >- register int c; >- register code_int ent; >- register code_int disp; >- register code_int hsize_reg; >- register int hshift; >- >- /* >- * Set up the globals: g_init_bits - initial number of bits >- * g_outfile - pointer to output file >- */ >- g_init_bits = init_bits; >- g_outfile = outfile; >- >- /* >- * Set up the necessary values >- */ >- offset = 0; >- out_count = 0; >- clear_flg = 0; >- in_count = 1; >- maxcode = MAXCODE(n_bits = g_init_bits); >- >- ClearCode = (1 << (init_bits - 1)); >- EOFCode = ClearCode + 1; >- free_ent = ClearCode + 2; >- >- char_init(); >- >- ent = GIFNextPixel( im ); >- >- hshift = 0; >- for ( fcode = (long) hsize; fcode < 65536L; fcode *= 2L ) >- ++hshift; >- hshift = 8 - hshift; /* set hash code range bound */ >- >- hsize_reg = hsize; >- cl_hash( (count_int) hsize_reg); /* clear hash table */ >- >- output( (code_int)ClearCode ); >- >-#ifdef SIGNED_COMPARE_SLOW >- while ( (c = GIFNextPixel( im )) != (unsigned) EOF ) { >-#else /*SIGNED_COMPARE_SLOW*/ >- while ( (c = GIFNextPixel( im )) != EOF ) { /* } */ >-#endif /*SIGNED_COMPARE_SLOW*/ >- >- ++in_count; >- >- fcode = (long) (((long) c << maxbits) + ent); >- i = (((code_int)c << hshift) ^ ent); /* xor hashing */ >- >- if ( HashTabOf (i) == fcode ) { >- ent = CodeTabOf (i); >- continue; >- } else if ( (long)HashTabOf (i) < 0 ) /* empty slot */ >- goto nomatch; >- disp = hsize_reg - i; /* secondary hash (after G. Knott) */ >- if ( i == 0 ) >- disp = 1; >-probe: >- if ( (i -= disp) < 0 ) >- i += hsize_reg; >- >- if ( HashTabOf (i) == fcode ) { >- ent = CodeTabOf (i); >- continue; >- } >- if ( (long)HashTabOf (i) > 0 ) >- goto probe; >-nomatch: >- output ( (code_int) ent ); >- ++out_count; >- ent = c; >-#ifdef SIGNED_COMPARE_SLOW >- if ( (unsigned) free_ent < (unsigned) maxmaxcode) { >-#else /*SIGNED_COMPARE_SLOW*/ >- if ( free_ent < maxmaxcode ) { /* } */ >-#endif /*SIGNED_COMPARE_SLOW*/ >- CodeTabOf (i) = free_ent++; /* code -> hashtable */ >- HashTabOf (i) = fcode; >- } else >- cl_block(); >- } >- /* >- * Put out the final code. >- */ >- output( (code_int)ent ); >- ++out_count; >- output( (code_int) EOFCode ); >-} >- >-/***************************************************************** >- * TAG( output ) >- * >- * Output the given code. >- * Inputs: >- * code: A n_bits-bit integer. If == -1, then EOF. This assumes >- * that n_bits =< (long)wordsize - 1. >- * Outputs: >- * Outputs code to the file. >- * Assumptions: >- * Chars are 8 bits long. >- * Algorithm: >- * Maintain a GIFBITS character long buffer (so that 8 codes will >- * fit in it exactly). Use the VAX insv instruction to insert each >- * code in turn. When the buffer fills up empty it and start over. >- */ >- >-static unsigned long cur_accum = 0; >-static int cur_bits = 0; >- >-static unsigned long masks[] = { 0x0000, 0x0001, 0x0003, 0x0007, 0x000F, >- 0x001F, 0x003F, 0x007F, 0x00FF, >- 0x01FF, 0x03FF, 0x07FF, 0x0FFF, >- 0x1FFF, 0x3FFF, 0x7FFF, 0xFFFF }; >- >-static void >-output(code_int code) >-{ >- cur_accum &= masks[ cur_bits ]; >- >- if( cur_bits > 0 ) >- cur_accum |= ((long)code << cur_bits); >- else >- cur_accum = code; >- >- cur_bits += n_bits; >- >- while( cur_bits >= 8 ) { >- char_out( (unsigned int)(cur_accum & 0xff) ); >- cur_accum >>= 8; >- cur_bits -= 8; >- } >- >- /* >- * If the next entry is going to be too big for the code size, >- * then increase it, if possible. >- */ >- if ( free_ent > maxcode || clear_flg ) { >- >- if( clear_flg ) { >- >- maxcode = MAXCODE (n_bits = g_init_bits); >- clear_flg = 0; >- >- } else { >- >- ++n_bits; >- if ( n_bits == maxbits ) >- maxcode = maxmaxcode; >- else >- maxcode = MAXCODE(n_bits); >- } >- } >- >- if( code == EOFCode ) { >- /* >- * At EOF, write the rest of the buffer. >- */ >- while( cur_bits > 0 ) { >- char_out( (unsigned int)(cur_accum & 0xff) ); >- cur_accum >>= 8; >- cur_bits -= 8; >- } >- >- flush_char(); >- >-/* fflush( g_outfile ); */ >-/* */ >-/* if( ferror( g_outfile ) ) */ >-/* return; */ >- } >-} >- >-/* >- * Clear out the hash table >- */ >-static void >-cl_block (void) /* table clear for block compress */ >-{ >- >- cl_hash ( (count_int) hsize ); >- free_ent = ClearCode + 2; >- clear_flg = 1; >- >- output( (code_int)ClearCode ); >-} >- >-static void >-cl_hash(register count_int hsize) /* reset code table */ >- >-{ >- >- register count_int *htab_p = htab+hsize; >- >- register long i; >- register long m1 = -1; >- >- i = hsize - 16; >- do { /* might use Sys V memset(3) here */ >- *(htab_p-16) = m1; >- *(htab_p-15) = m1; >- *(htab_p-14) = m1; >- *(htab_p-13) = m1; >- *(htab_p-12) = m1; >- *(htab_p-11) = m1; >- *(htab_p-10) = m1; >- *(htab_p-9) = m1; >- *(htab_p-8) = m1; >- *(htab_p-7) = m1; >- *(htab_p-6) = m1; >- *(htab_p-5) = m1; >- *(htab_p-4) = m1; >- *(htab_p-3) = m1; >- *(htab_p-2) = m1; >- *(htab_p-1) = m1; >- htab_p -= 16; >- } while ((i -= 16) >= 0); >- >- for ( i += 16; i > 0; --i ) >- *--htab_p = m1; >-} >- >-/****************************************************************************** >- * >- * GIF Specific routines >- * >- ******************************************************************************/ >- >-/* >- * Number of characters so far in this 'packet' >- */ >-static int a_count; >- >-/* >- * Set up the 'byte output' routine >- */ >-static void >-char_init(void) >-{ >- a_count = 0; >-} >- >-/* >- * Define the storage for the packet accumulator >- */ >-static char accum[ 256 ]; >- >-/* >- * Add a character to the end of the current packet, and if it is 254 >- * characters, flush the packet to disk. >- */ >-static void >-char_out(int c) >-{ >- accum[ a_count++ ] = c; >- if( a_count >= 254 ) >- flush_char(); >-} >- >-/* >- * Flush the packet to disk, and reset the accumulator >- */ >-static void >-flush_char(void) >-{ >- if( a_count > 0 ) { >- gdPutC( a_count, g_outfile ); >- gdPutBuf( accum, a_count, g_outfile ); >- a_count = 0; >- } >-} >- >-static void init_statics(void) { >- /* Some of these are properly initialized later. What I'm doing >- here is making sure code that depends on C's initialization >- of statics doesn't break when the code gets called more >- than once. */ >- Width = 0; >- Height = 0; >- curx = 0; >- cury = 0; >- CountDown = 0; >- Pass = 0; >- Interlace = 0; >- a_count = 0; >- cur_accum = 0; >- cur_bits = 0; >- g_init_bits = 0; >- g_outfile = 0; >- ClearCode = 0; >- EOFCode = 0; >- free_ent = 0; >- clear_flg = 0; >- offset = 0; >- in_count = 1; >- out_count = 0; >- hsize = HSIZE; >- n_bits = 0; >- maxbits = GIFBITS; >- maxcode = 0; >- maxmaxcode = (code_int)1 << GIFBITS; >-} >- >- >-/* +-------------------------------------------------------------------+ */ >-/* | Copyright 1990, 1991, 1993, David Koblas. (koblas@netcom.com) | */ >-/* | Permission to use, copy, modify, and distribute this software | */ >-/* | and its documentation for any purpose and without fee is hereby | */ >-/* | granted, provided that the above copyright notice appear in all | */ >-/* | copies and that both that copyright notice and this permission | */ >-/* | notice appear in supporting documentation. This software is | */ >-/* | provided "as is" without express or implied warranty. | */ >-/* +-------------------------------------------------------------------+ */ >diff -ruN gd.orig/files/patch-Makefile.in gd/files/patch-Makefile.in >--- gd.orig/files/patch-Makefile.in Wed Dec 31 17:00:00 1969 >+++ gd/files/patch-Makefile.in Mon Feb 12 16:08:25 2007 >@@ -0,0 +1,11 @@ >+--- Makefile.in.orig Mon Feb 12 16:07:58 2007 >++++ Makefile.in Mon Feb 12 16:08:10 2007 >+@@ -345,7 +345,7 @@ >+ include_HEADERS = gd.h gdfx.h gd_io.h gdcache.h gdfontg.h gdfontl.h gdfontmb.h gdfonts.h gdfontt.h entities.h >+ lib_LTLIBRARIES = libgd.la >+ libgd_la_SOURCES = gd.c gdfx.c gd_security.c gd_gd.c gd_gd2.c gd_io.c gd_io_dp.c gd_gif_in.c gd_gif_out.c gd_io_file.c gd_io_ss.c gd_jpeg.c gd_png.c gd_ss.c gd_topal.c gd_wbmp.c gdcache.c gdfontg.c gdfontl.c gdfontmb.c gdfonts.c gdfontt.c gdft.c gdhelpers.c gdhelpers.h gdkanji.c gdtables.c gdxpm.c jisx0208.h wbmp.c wbmp.h >+-libgd_la_LDFLAGS = -version-info 2:0:0 $(XTRA_LDFLAGS) >++libgd_la_LDFLAGS = -version-info 4:0:0 $(XTRA_LDFLAGS) >+ libgd_la_LIBADD = $(LTLIBICONV) >+ LDADD = ./libgd.la $(LIBICONV) >+ all: config.h >diff -ruN gd.orig/files/patch-bdftogd gd/files/patch-bdftogd >--- gd.orig/files/patch-bdftogd Wed Dec 31 17:00:00 1969 >+++ gd/files/patch-bdftogd Tue Feb 13 19:55:29 2007 >@@ -0,0 +1,57 @@ >+--- bdftogd.orig Fri Feb 2 18:41:00 2007 >++++ bdftogd Tue Feb 13 19:55:02 2007 >+@@ -24,6 +24,9 @@ >+ my $filename = shift; >+ $filename = 'gd' . $filename unless $filename =~ /^gd/i; >+ >++my $gdfunc = $gdname; >++$gdfunc =~ s/(.*Font)(.*)/$1Get$2/; >++ >+ if (-f "$filename.c") { die "File $filename.c already exists, won't overwrite\n"; } >+ if (-f "$filename.h") { die "File $filename.h already exists, won't overwrite\n"; } >+ >+@@ -177,28 +180,40 @@ >+ ${gdname}Data >+ }; >+ >+-gdFontPtr ${gdname} = &${gdname}Rep; >++BGD_EXPORT_DATA_IMPL gdFontPtr ${gdname} = &${gdname}Rep; >+ >+-/* This file has not been truncated. */ >++BGD_DECLARE(gdFontPtr) >++$gdfunc (void) >++{ >++ return $gdname; >++} >+ >++/* This file has not been truncated. */ >+ EOF >+ >+ >+ close FILEC; >+ >+ print FILEH <<"EOF"; >+- >+ #ifndef $capdef >+ #define $capdef 1 >+ >++#ifdef __cplusplus >++extern "C" { >++#endif >++ >+ $info >+ >+ #include "gd.h" >+ >+-extern gdFontPtr $gdname; >++ BGD_EXPORT_DATA_PROT gdFontPtr $gdname; >++ BGD_DECLARE(gdFontPtr) $gdfunc(void); >+ >++#ifdef __cplusplus >++} >+ #endif >+ >++#endif >+ EOF >+ >+ 1; >diff -ruN gd.orig/files/patch-config-gdlib-config.in gd/files/patch-config-gdlib-config.in >--- gd.orig/files/patch-config-gdlib-config.in Wed Dec 31 17:00:00 1969 >+++ gd/files/patch-config-gdlib-config.in Thu Feb 15 17:57:46 2007 >@@ -0,0 +1,20 @@ >+--- config/gdlib-config.in.orig Thu Feb 15 17:55:45 2007 >++++ config/gdlib-config.in Thu Feb 15 17:57:06 2007 >+@@ -71,7 +71,7 @@ >+ echo @LDFLAGS@ >+ ;; >+ --libs) >+- echo @LIBS@ @LIBICONV@ >++ echo -lgd @LIBS@ @LIBICONV@ >+ ;; >+ --cflags|--includes) >+ echo -I@includedir@ >+@@ -84,7 +84,7 @@ >+ echo "includedir: $includedir" >+ echo "cflags: -I@includedir@" >+ echo "ldflags: @LDFLAGS@" >+- echo "libs: @LIBS@ @LIBICONV@" >++ echo "libs: -lgd @LIBS@ @LIBICONV@" >+ echo "libdir: $libdir" >+ echo "features: @FEATURES@" >+ ;; >diff -ruN gd.orig/files/patch-configure gd/files/patch-configure >--- gd.orig/files/patch-configure Wed Dec 31 17:00:00 1969 >+++ gd/files/patch-configure Fri Feb 9 18:53:34 2007 >@@ -0,0 +1,47 @@ >+--- configure.orig Fri Feb 2 18:41:47 2007 >++++ configure Fri Feb 9 18:53:30 2007 >+@@ -22817,12 +22817,12 @@ >+ fi >+ >+ >+- if test -n "$LIBPNG12_CONFIG"; then >+- libpng_CPPFLAGS=`libpng12-config --cflags` >+- # should be --ldopts, but it's currently broken >+- libpng_LDFLAGS=`libpng12-config --ldflags` >+- libpng_LDFLAGS=`echo " $libpng_LDFLAGS" | sed 's/ -l[^ ][^ ]*//g'` >+- elif test -n "$LIBPNG_CONFIG"; then >++# if test -n "$LIBPNG12_CONFIG"; then >++# libpng_CPPFLAGS=`libpng12-config --cflags` >++# # should be --ldopts, but it's currently broken >++# libpng_LDFLAGS=`libpng12-config --ldflags` >++# libpng_LDFLAGS=`echo " $libpng_LDFLAGS" | sed 's/ -l[^ ][^ ]*//g'` >++ if test -n "$LIBPNG_CONFIG"; then >+ libpng_CPPFLAGS=`libpng-config --cflags` >+ # should be --ldopts, but it's currently broken >+ libpng_LDFLAGS=`libpng-config --ldflags` >+@@ -23178,13 +23178,13 @@ >+ LDFLAGS="$libpng_LDFLAGS $LDFLAGS" >+ >+ if test -n "$LIBPNG12_CONFIG"; then >+- { echo "$as_me:$LINENO: checking for png_create_read_struct in -lpng12" >&5 >+-echo $ECHO_N "checking for png_create_read_struct in -lpng12... $ECHO_C" >&6; } >++ { echo "$as_me:$LINENO: checking for png_create_read_struct in -lpng" >&5 >++echo $ECHO_N "checking for png_create_read_struct in -lpng... $ECHO_C" >&6; } >+ if test "${ac_cv_lib_png12_png_create_read_struct+set}" = set; then >+ echo $ECHO_N "(cached) $ECHO_C" >&6 >+ else >+ ac_check_lib_save_LIBS=$LIBS >+-LIBS="-lpng12 $LIBS" >++LIBS="-lpng $LIBS" >+ cat >conftest.$ac_ext <<_ACEOF >+ /* confdefs.h. */ >+ _ACEOF >+@@ -23256,7 +23256,7 @@ >+ { echo "$as_me:$LINENO: result: $ac_cv_lib_png12_png_create_read_struct" >&5 >+ echo "${ECHO_T}$ac_cv_lib_png12_png_create_read_struct" >&6; } >+ if test $ac_cv_lib_png12_png_create_read_struct = yes; then >+- LIBS="-lpng12 $LIBS" >++ LIBS="-lpng $LIBS" >+ FEATURES="GD_PNG $FEATURES" >+ >+ cat >>confdefs.h <<\_ACEOF >diff -ruN gd.orig/files/patch-gd.h gd/files/patch-gd.h >--- gd.orig/files/patch-gd.h Fri Nov 5 22:26:56 2004 >+++ gd/files/patch-gd.h Mon Feb 12 14:17:46 2007 >@@ -1,17 +1,6 @@ >---- gd.h.orig Sat Oct 30 14:54:58 2004 >-+++ gd.h Fri Nov 5 20:47:19 2004 >-@@ -291,6 +291,10 @@ >- /* Deprecated in favor of gdImageCreateFromPngCtx */ >- BGD_DECLARE(gdImagePtr) gdImageCreateFromPngSource (gdSourcePtr in); >- >-+#ifdef __FreeBSD__ >-+BGD_DECLARE(gdImagePtr) gdImageCreateFromGifSource(gdSourcePtr in); >-+#endif >-+ >- BGD_DECLARE(gdImagePtr) gdImageCreateFromGd (FILE * in); >- BGD_DECLARE(gdImagePtr) gdImageCreateFromGdCtx (gdIOCtxPtr in); >- BGD_DECLARE(gdImagePtr) gdImageCreateFromGdPtr (int size, void *data); >-@@ -591,6 +595,16 @@ >+--- gd.h.orig Mon Feb 12 14:16:25 2007 >++++ gd.h Mon Feb 12 14:17:29 2007 >+@@ -600,6 +600,16 @@ > BGD_DECLARE(void *) gdImageGifAnimAddPtr(gdImagePtr im, int *size, int LocalCM, int LeftOfs, int TopOfs, int Delay, int Disposal, gdImagePtr previm); > BGD_DECLARE(void *) gdImageGifAnimEndPtr(int *size); > >@@ -28,14 +17,3 @@ > /* A custom data sink. For backwards compatibility. Use > gdIOCtx instead. */ > /* The sink function must return -1 on error, otherwise the number >-@@ -604,6 +618,10 @@ >- gdSink, *gdSinkPtr; >- >- BGD_DECLARE(void) gdImagePngToSink (gdImagePtr im, gdSinkPtr out); >-+ >-+#ifdef __FreeBSD__ >-+BGD_DECLARE(void) gdImageGifToSink(gdImagePtr im, gdSinkPtr out); >-+#endif >- >- BGD_DECLARE(void) gdImageGd (gdImagePtr im, FILE * out); >- BGD_DECLARE(void) gdImageGd2 (gdImagePtr im, FILE * out, int cs, int fmt); >diff -ruN gd.orig/files/patch-gd_gif_out.c gd/files/patch-gd_gif_out.c >--- gd.orig/files/patch-gd_gif_out.c Wed Dec 31 17:00:00 1969 >+++ gd/files/patch-gd_gif_out.c Mon Feb 12 14:32:10 2007 >@@ -0,0 +1,18 @@ >+--- gd_gif_out.c.orig Fri Feb 2 18:41:00 2007 >++++ gd_gif_out.c Mon Feb 12 14:31:30 2007 >+@@ -143,6 +143,15 @@ >+ } >+ } >+ >++/* FreeBSD specific code */ >++BGD_DECLARE(void) gdImageBigGif(gdImagePtr im, FILE *out) { return gdImageGif( im, out ); } >++BGD_DECLARE(void) gdImageLzw(gdImagePtr im, FILE *out) { return gdImageGif( im, out ); } >++BGD_DECLARE(void *) gdImageBigGifPtr(gdImagePtr im, int *size) { return gdImageGifPtr(im, size); } >++BGD_DECLARE(void *) gdImageLzwPtr(gdImagePtr im, int *size) { return gdImageGifPtr(im, size); } >++BGD_DECLARE(void) gdImageBigGifCtx(gdImagePtr im, gdIOCtxPtr out) { return gdImageGifCtx(im, out); } >++BGD_DECLARE(void) gdImageLzwCtx(gdImagePtr im, gdIOCtxPtr out) { return gdImageGifCtx(im, out); } >++/* end FreeBSD specific code */ >++ >+ BGD_DECLARE(void *) gdImageGifAnimBeginPtr (gdImagePtr im, int *size, int GlobalCM, int Loops) >+ { >+ void *rv; >diff -ruN gd.orig/files/patch-gd_png.c gd/files/patch-gd_png.c >--- gd.orig/files/patch-gd_png.c Sun Nov 21 05:29:31 2004 >+++ gd/files/patch-gd_png.c Fri Feb 9 17:56:30 2007 >@@ -1,9 +1,9 @@ >---- gd_png.c.orig Sat Nov 20 01:30:53 2004 >-+++ gd_png.c Sat Nov 20 01:30:58 2004 >-@@ -188,6 +188,15 @@ >+--- gd_png.c.orig Fri Feb 2 18:41:00 2007 >++++ gd_png.c Fri Feb 9 17:55:59 2007 >+@@ -189,6 +189,15 @@ >+ png_read_info (png_ptr, info_ptr); /* read all PNG info up to image data */ > >- png_get_IHDR (png_ptr, info_ptr, &width, &height, &bit_depth, &color_type, >- &interlace_type, NULL, NULL); >+ png_get_IHDR (png_ptr, info_ptr, &width, &height, &bit_depth, &color_type, &interlace_type, NULL, NULL); > + > + if (overflow2(sizeof (int), width)) > + { >@@ -13,6 +13,6 @@ > + { > + return NULL; > + } >- if ((color_type == PNG_COLOR_TYPE_RGB) || >- (color_type == PNG_COLOR_TYPE_RGB_ALPHA)) >- { >+ if ((color_type == PNG_COLOR_TYPE_RGB) || (color_type == PNG_COLOR_TYPE_RGB_ALPHA)) { >+ im = gdImageCreateTrueColor ((int) width, (int) height); >+ } else { >diff -ruN gd.orig/files/patch-gdtest.c gd/files/patch-gdtest.c >--- gd.orig/files/patch-gdtest.c Mon Aug 18 10:15:06 2003 >+++ gd/files/patch-gdtest.c Wed Dec 31 17:00:00 1969 >@@ -1,81 +0,0 @@ >---- gdtest.c.orig Thu Apr 25 14:16:47 2002 >-+++ gdtest.c Tue Nov 6 15:53:38 2001 >-@@ -84,6 +84,35 @@ >- gdImageDestroy (im2); >- ctx->gd_free (ctx); >- >-+ /* */ >-+ /* Send to GIF File then Ptr */ >-+ /* */ >-+ sprintf(of, "%s.gif", argv[1]); >-+ out = fopen(of, "wb"); >-+ gdImageGif(im, out); >-+ fclose(out); >-+ >-+ in = fopen(of, "rb"); >-+ if (!in) { >-+ fprintf(stderr, "GIF Output file does not exist!\n"); >-+ exit(1); >-+ } >-+ im2 = gdImageCreateFromGif(in); >-+ fclose(in); >-+ >-+ CompareImages("GD->GIF File->GD", ref, im2); >-+ >-+ unlink(of); >-+ gdImageDestroy(im2); >-+ >-+ iptr = gdImageGifPtr(im,&sz); >-+ ctx = gdNewDynamicCtx(sz,iptr); >-+ im2 = gdImageCreateFromGifCtx(ctx); >-+ >-+ CompareImages("GD->GIF ptr->GD", ref, im2); >-+ >-+ gdImageDestroy(im2); >-+ ctx->gd_free(ctx); >- >- /* */ >- /* Send to GD2 File then Ptr */ >-@@ -200,7 +229,30 @@ >- gdImageDestroy (im2); >- }; >- >-- unlink (of); >-+ /* >-+ ** Test gdImageCreateFromGifSource >-+ **/ >-+ >-+ in = fopen(of, "rb"); >-+ >-+ if (!in) >-+ { >-+ fprintf (stderr, "GD Source: ERROR - GD Source input file does not exist - Sink may have failed!\n"); >-+ }; >-+ >-+ imgsrc.source = freadWrapper; >-+ imgsrc.context = in; >-+ im2 = gdImageCreateFromGifSource(&imgsrc); >-+ fclose(in); >-+ >-+ if (im2 == NULL) { >-+ printf("GD Source (GIF): ERROR Null returned by gdImageCreateFromGifSource\n"); >-+ } else { >-+ CompareImages("GD Source (GIF)", ref, im2); >-+ gdImageDestroy(im2); >-+ }; >-+ >-+ unlink(of); >- >- /* */ >- /* Test Extraction */ >-@@ -266,6 +318,10 @@ >- >- printf ("[Merged Image has %d colours]\n", im2->colorsTotal); >- CompareImages ("Merged (gdtest.png, gdtest_merge.png)", im2, im3); >-+ >-+ out = fopen ("test/gdtest_merge_out.png", "wb"); >-+ gdImagePng(im2, out); >-+ close(out); >- >- gdImageDestroy (im2); >- gdImageDestroy (im3); >diff -ruN gd.orig/files/regen-fonts.sh gd/files/regen-fonts.sh >--- gd.orig/files/regen-fonts.sh Wed Dec 31 17:00:00 1969 >+++ gd/files/regen-fonts.sh Tue Feb 13 19:52:37 2007 >@@ -0,0 +1,53 @@ >+#!/bin/sh >+# $FreeBSD$ >+ >+# The GD_FONTS environment variable can be set to specify the gzipped >+# tar-ball containing the fonts in bdf format and the bdf file names. >+# >+# For example: >+# GD_FONTS="/usr/ports/distfiles/x-koi8u.tgz koi6x10.bdf koi8x13.bdf \ >+# koi9x15.bdf koi12x24.bdf koi10x20.bdf" >+# >+# This can be usefull for slave ports, like ukrainian/gd, which may >+# now provide alternative fonts easily. >+ >+# TODO: . handle multiple archiving formats: tgz, tar.bz2, zip >+# . allow for passing already extracted font-files >+ >+if [ -z "$GD_FONTS" ] >+then >+ echo "GD_FONTS can be set to specify an alternative list of .bdf files" >+ echo "See $0 for details..." >+ exit 0 >+fi >+ >+set $GD_FONTS >+# >+# The tarball is the first argument, the tiny, small, medium-bold, >+# large, and giant fonts follow. >+# >+ >+tarball=$1 >+shift >+tar -xvzpf $tarball -C $WRKSRC $@ >+ >+rm -f $WRKSRC/Makefile.fonts >+cd $WRKSRC >+ >+for font in Tiny Small MediumBold Large Giant >+do >+ f=`echo $font | tr -d [[:lower:]] | tr [[:upper:]] [[:lower:]]` >+ rm -f $WRKSRC/gdfont$f.[ch] >+ printf 'gdfont%s.c gdfont%s.h: %s\ >+ perl ${.CURDIR}/bdftogd gdFont%s font%s < %s\n' \ >+ $f $f $1 $font $f $1 >> $WRKSRC/Makefile.fonts >+ shift >+done >+ >+for font in Tiny Small MediumBold Large Giant >+do >+ f=`echo $font | tr -d [[:lower:]] | tr [[:upper:]] [[:lower:]]` >+ make -f Makefile.fonts gdfont$f.c >+ shift >+done >+return 0 >diff -ruN gd.orig/pkg-descr gd/pkg-descr >--- gd.orig/pkg-descr Mon Aug 18 10:15:06 2003 >+++ gd/pkg-descr Tue Feb 13 20:04:11 2007 >@@ -10,7 +10,4 @@ > including both truecolor and palette images, resampling (smooth > resizing of truecolor images) and so forth. > >-WWW: http://www.boutell.com/gd/ >- >-- Alex Dupre >-sysadmin@alexdupre.com >+WWW: http://libgd.org/ >diff -ruN gd.orig/pkg-plist gd/pkg-plist >--- gd.orig/pkg-plist Fri Oct 14 08:28:46 2005 >+++ gd/pkg-plist Mon Feb 12 18:28:04 2007 >@@ -21,9 +21,10 @@ > include/gdfonts.h > include/gdfontt.h > include/gdfx.h >-include/gdhelpers.h > lib/libgd.a >+lib/libgd.la > lib/libgd.so > lib/libgd.so.4 > %%PORTDOCS%%%%DOCSDIR%%/index.html >-%%PORTDOCS%%@dirrm %%DOCSDIR%% >+%%PORTDOCS%%@dirrmtry %%DOCSDIR%% >+
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Raw
Actions:
View
Attachments on
bug 109149
:
75591
| 75592 |
75593
|
75594