summaryrefslogtreecommitdiff
path: root/graphics/gd
diff options
context:
space:
mode:
authorNorikatsu Shigemura <nork@FreeBSD.org>2003-07-01 17:16:00 +0000
committerNorikatsu Shigemura <nork@FreeBSD.org>2003-07-01 17:16:00 +0000
commit30f68fa24bb05a011cf022c0990b680680dba944 (patch)
tree2a659b7ab94c1a68aed83d0e4a0d5ca607052696 /graphics/gd
parent- New option GD_PORT (diff)
Back out previous commit & Bump PORTEPOCH.
Pointy hat to: daichi Submitted by: many many people
Notes
Notes: svn path=/head/; revision=84003
Diffstat (limited to 'graphics/gd')
-rw-r--r--graphics/gd/Makefile51
-rw-r--r--graphics/gd/distinfo3
-rw-r--r--graphics/gd/files/Makefile.bsd60
-rw-r--r--graphics/gd/files/gd2togif.c40
-rw-r--r--graphics/gd/files/gd_biggif_out.c823
-rw-r--r--graphics/gd/files/gd_gif_in.c573
-rw-r--r--graphics/gd/files/gd_gif_out.c46
-rw-r--r--graphics/gd/files/gd_lzw_out.c795
-rw-r--r--graphics/gd/files/gdcmpgif.c85
-rw-r--r--graphics/gd/files/giftogd2.c48
-rw-r--r--graphics/gd/files/patch-ac188
-rw-r--r--graphics/gd/files/patch-gd.h41
-rw-r--r--graphics/gd/files/patch-gdft.c92
-rw-r--r--graphics/gd/files/patch-gdkanji.c87
-rw-r--r--graphics/gd/files/patch-gdtest.c81
-rw-r--r--graphics/gd/files/patch-gdttf.c17
-rw-r--r--graphics/gd/files/patch-gif15
-rw-r--r--graphics/gd/files/patch-index.html71
-rw-r--r--graphics/gd/pkg-descr33
-rw-r--r--graphics/gd/pkg-plist23
-rw-r--r--graphics/gd/scripts/configure44
21 files changed, 367 insertions, 2849 deletions
diff --git a/graphics/gd/Makefile b/graphics/gd/Makefile
index 00c93c5acbf6..7f341cd7cd04 100644
--- a/graphics/gd/Makefile
+++ b/graphics/gd/Makefile
@@ -6,48 +6,53 @@
#
PORTNAME= gd
-PORTVERSION= 2.0.15
+PORTVERSION= 1.8.4
+PORTREVISION= 6
+PORTEPOCH= 1
CATEGORIES+= graphics
MASTER_SITES= http://www.boutell.com/gd/http/ \
ftp://ftp.boutell.com/pub/boutell/gd/ \
+ http://virtual-estates.net/~mi/port-stuff/ \
${MASTER_SITE_RINGSERVER}
MASTER_SITE_SUBDIR= graphics/gd
+DISTFILES= ${DISTNAME}${EXTRACT_SUFX} gd_gif_in.c.bz2
+EXTRACT_ONLY= ${DISTNAME}${EXTRACT_SUFX}
MAINTAINER?= ports@FreeBSD.org
COMMENT?= A graphics library for fast image creation
-LIB_DEPENDS= jpeg.9:${PORTSDIR}/graphics/jpeg \
- png.5:${PORTSDIR}/graphics/png \
- freetype.9:${PORTSDIR}/print/freetype2
+BUILD_DEPENDS= freetype-config:${PORTSDIR}/print/freetype2 # XXX
+LIB_DEPENDS= jpeg:${PORTSDIR}/graphics/jpeg \
+ png:${PORTSDIR}/graphics/png \
+ freetype:${PORTSDIR}/print/freetype2
+.if !exists(/usr/bin/bzip2)
+BUILD_DEPENDS+= bzip2:${PORTSDIR}/archivers/bzip2
+.endif
+
+FREETYPE_CONFIG?= ${LOCALBASE}/bin/freetype-config
-MAKE_ENV= WRKSRC="${WRKSRC}"
-MAKEFILE= ${FILESDIR}/Makefile.bsd
+USE_REINPLACE= yes
+MAKE_ENV= FREETYPE_CONFIG="${FREETYPE_CONFIG}"
INSTALLS_SHLIB= yes
-.if !defined(WITHOUT_X11)
+.if defined(WITH_X11)
USE_XPM= yes
.endif
-.if defined(HAVE_UNISYS_LICENSE) || \
- (defined(USA_RESIDENT) && ${USA_RESIDENT} == "YES")
-WITH_LZW= yes
-.endif
-
-.if defined(GD_FONTS)
-USE_PERL5_BUILD= yes
-SCRIPTS_ENV+= GD_FONTS="${GD_FONTS}"
-.endif
-
pre-everything::
-.if !defined(WITH_LZW)
- @${ECHO_MSG} "************************************************************"
- @${ECHO_MSG} "* If you live outside US and Canada, you can define *"
- @${ECHO_MSG} "* WITH_LZW to enable GIF compression support. *"
- @${ECHO_MSG} "************************************************************"
+.if !defined(WITH_X11)
+ @${ECHO_MSG}
+ @${ECHO_MSG} "If you want to compile with Xpm support,"
+ @${ECHO_MSG} "hit Ctrl-C right now and use \"make WITH_X11=yes\""
+ @${ECHO_MSG}
.endif
post-extract:
- @${CP} ${FILESDIR}/g* ${WRKSRC}
+ @${BZIP2_CMD} -dc ${DISTDIR}/${DIST_SUBDIR}/gd_gif_in.c.bz2 \
+ > ${WRKSRC}/gd_gif_in.c
+
+post-patch:
+ @${REINPLACE_CMD} -e 's|<malloc.h>|<stdlib.h>|g' ${WRKSRC}/gdcache.h
post-install:
.if !defined(NOPORTDOCS)
diff --git a/graphics/gd/distinfo b/graphics/gd/distinfo
index 4297649caf8a..ed8787c2bd67 100644
--- a/graphics/gd/distinfo
+++ b/graphics/gd/distinfo
@@ -1 +1,2 @@
-MD5 (gd-2.0.15.tar.gz) = 6ededf633b4fd054662ec123c7825fbb
+MD5 (gd-1.8.4.tar.gz) = 2aef76e79f206f9798233f025f5dd28d
+MD5 (gd_gif_in.c.bz2) = 54132aea09471bb997672436dd9a1a96
diff --git a/graphics/gd/files/Makefile.bsd b/graphics/gd/files/Makefile.bsd
deleted file mode 100644
index e10d6f2aceec..000000000000
--- a/graphics/gd/files/Makefile.bsd
+++ /dev/null
@@ -1,60 +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 gdhelpers.c gdhelpers.h \
- gdkanji.c gdtables.c gdxpm.c jisx0208.h \
- 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
-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/ \
- -I${LOCALBASE}/include/freetype2/freetype -I${LOCALBASE}/include \
- -DHAVE_LIBPNG -DHAVE_LIBJPEG -DHAVE_LIBFREETYPE -DHAVE_LIBZ
-LDADD= -L${LOCALBASE}/lib -lpng -lz -ljpeg -lfreetype -lm
-
-.ifndef WITHOUT_X11
-CFLAGS+=-I${X11BASE}/include/X11 -I${X11BASE}/include -DHAVE_XPM
-LDADD+= -L${X11BASE}/lib -lXpm -lX11
-.endif
-
-.ifdef WITH_LZW
-CFLAGS+=-DLZW_LICENCED
-.endif
-
-# 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. -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 --git a/graphics/gd/files/gd2togif.c b/graphics/gd/files/gd2togif.c
deleted file mode 100644
index d5fbb8921c3a..000000000000
--- a/graphics/gd/files/gd2togif.c
+++ /dev/null
@@ -1,40 +0,0 @@
-#include <stdio.h>
-#include "gd.h"
-
-/* A short program which converts a .gif file into a .gd file, for
- your convenience in creating images on the fly from a
- basis image that must be loaded quickly. The .gd format
- is not intended to be a general-purpose format. */
-
-int main(int argc, char **argv)
-{
- gdImagePtr im;
- FILE *in, *out;
- if (argc != 3) {
- fprintf(stderr, "Usage: gd2togif filename.gd2 filename.gif\n");
- exit(1);
- }
- in = fopen(argv[1], "rb");
- if (!in) {
- fprintf(stderr, "Input file does not exist!\n");
- exit(1);
- }
- im = gdImageCreateFromGd2(in);
- fclose(in);
- if (!im) {
- fprintf(stderr, "Input is not in GIF format!\n");
- exit(1);
- }
- out = fopen(argv[2], "wb");
- if (!out) {
- fprintf(stderr, "Output file cannot be written to!\n");
- gdImageDestroy(im);
- exit(1);
- }
- gdImageGif(im, out);
- fclose(out);
- gdImageDestroy(im);
-
- return 0;
-}
-
diff --git a/graphics/gd/files/gd_biggif_out.c b/graphics/gd/files/gd_biggif_out.c
deleted file mode 100644
index 29ec90f87d56..000000000000
--- a/graphics/gd/files/gd_biggif_out.c
+++ /dev/null
@@ -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 --git a/graphics/gd/files/gd_gif_in.c b/graphics/gd/files/gd_gif_in.c
deleted file mode 100644
index fc1b587cc8b4..000000000000
--- a/graphics/gd/files/gd_gif_in.c
+++ /dev/null
@@ -1,573 +0,0 @@
-#include <stdio.h>
-#include <math.h>
-#include <string.h>
-#include <stdlib.h>
-#include "gd.h"
-
-/* 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
-
-
-#define MAXCOLORMAPSIZE 256
-
-#define TRUE 1
-#define FALSE 0
-
-#define CM_RED 0
-#define CM_GREEN 1
-#define CM_BLUE 2
-
-#define MAX_LWZ_BITS 12
-
-#define INTERLACE 0x40
-#define LOCALCOLORMAP 0x80
-#define BitSet(byte, bit) (((byte) & (bit)) == (bit))
-
-#define ReadOK(file,buffer,len) (gdGetBuf(buffer, len, file) != 0)
-
-#define LM_to_uint(a,b) (((b)<<8)|(a))
-
-/* We may eventually want to use this information, but def it out for now */
-#if 0
-static struct {
- unsigned int Width;
- unsigned int Height;
- unsigned char ColorMap[3][MAXCOLORMAPSIZE];
- unsigned int BitPixel;
- unsigned int ColorResolution;
- unsigned int Background;
- unsigned int AspectRatio;
-} GifScreen;
-#endif
-
-static struct {
- int transparent;
- int delayTime;
- int inputFlag;
- int disposal;
-} Gif89 = { -1, -1, -1, 0 };
-
-static int ReadColorMap (gdIOCtx *fd, int number, unsigned char (*buffer)[256]);
-static int DoExtension (gdIOCtx *fd, int label, int *Transparent);
-static int GetDataBlock (gdIOCtx *fd, unsigned char *buf);
-static int GetCode (gdIOCtx *fd, int code_size, int flag);
-static int LWZReadByte (gdIOCtx *fd, int flag, int input_code_size);
-
-static void ReadImage (gdImagePtr im, gdIOCtx *fd, int len, int height, unsigned char (*cmap)[256], int interlace); /*1.4//, int ignore); */
-
-int ZeroDataBlock;
-
-gdImagePtr gdImageCreateFromGifSource(gdSourcePtr inSource)
-{
- gdIOCtx *in = gdNewSSCtx(inSource, NULL);
- gdImagePtr im;
-
- im = gdImageCreateFromGifCtx(in);
-
- in->gd_free(in);
-
- return im;
-}
-
-gdImagePtr
-gdImageCreateFromGif(FILE *fdFile)
-{
- gdIOCtx *fd = gdNewFileCtx(fdFile);
- gdImagePtr im = 0;
-
- im = gdImageCreateFromGifCtx(fd);
-
- fd->gd_free(fd);
-
- return im;
-}
-
-gdImagePtr
-gdImageCreateFromGifCtx(gdIOCtxPtr fd)
-{
-/* 1.4 int imageNumber; */
- int BitPixel;
- int ColorResolution;
- int Background;
- int AspectRatio;
- int Transparent = (-1);
- unsigned char buf[16];
- unsigned char c;
- unsigned char ColorMap[3][MAXCOLORMAPSIZE];
- unsigned char localColorMap[3][MAXCOLORMAPSIZE];
- int imw, imh;
- int useGlobalColormap;
- int bitPixel;
- int i;
- /*1.4//int imageCount = 0; */
- char version[4];
-
- gdImagePtr im = 0;
- ZeroDataBlock = FALSE;
-
- /*1.4//imageNumber = 1; */
- if (! ReadOK(fd,buf,6)) {
- return 0;
- }
- if (strncmp((char *)buf,"GIF",3) != 0) {
- return 0;
- }
- strncpy(version, (char *)buf + 3, 3);
- version[3] = '\0';
-
- if ((strcmp(version, "87a") != 0) && (strcmp(version, "89a") != 0)) {
- return 0;
- }
- if (! ReadOK(fd,buf,7)) {
- return 0;
- }
- BitPixel = 2<<(buf[4]&0x07);
- ColorResolution = (int) (((buf[4]&0x70)>>3)+1);
- Background = buf[5];
- AspectRatio = buf[6];
-
- if (BitSet(buf[4], LOCALCOLORMAP)) { /* Global Colormap */
- if (ReadColorMap(fd, BitPixel, ColorMap)) {
- return 0;
- }
- }
- for (;;) {
- if (! ReadOK(fd,&c,1)) {
- return 0;
- }
- if (c == ';') { /* GIF terminator */
- goto terminated;
- }
-
- if (c == '!') { /* Extension */
- if (! ReadOK(fd,&c,1)) {
- return 0;
- }
- DoExtension(fd, c, &Transparent);
- continue;
- }
-
- if (c != ',') { /* Not a valid start character */
- continue;
- }
-
- /*1.4//++imageCount; */
-
- if (! ReadOK(fd,buf,9)) {
- return 0;
- }
-
- useGlobalColormap = ! BitSet(buf[8], LOCALCOLORMAP);
-
- bitPixel = 1<<((buf[8]&0x07)+1);
-
- imw = LM_to_uint(buf[4],buf[5]);
- imh = LM_to_uint(buf[6],buf[7]);
- if (!(im = gdImageCreate(imw, imh))) {
- return 0;
- }
- im->interlace = BitSet(buf[8], INTERLACE);
- if (! useGlobalColormap) {
- if (ReadColorMap(fd, bitPixel, localColorMap)) {
- return 0;
- }
- ReadImage(im, fd, imw, imh, localColorMap,
- BitSet(buf[8], INTERLACE));
- /*1.4//imageCount != imageNumber); */
- } else {
- ReadImage(im, fd, imw, imh,
- ColorMap,
- BitSet(buf[8], INTERLACE));
- /*1.4//imageCount != imageNumber); */
- }
- if (Transparent != (-1)) {
- gdImageColorTransparent(im, Transparent);
- }
- goto terminated;
- }
-
-terminated:
- /* Terminator before any image was declared! */
- if (!im) {
- return 0;
- }
- /* Check for open colors at the end, so
- we can reduce colorsTotal and ultimately
- BitsPerPixel */
- for (i=((im->colorsTotal-1)); (i>=0); i--) {
- if (im->open[i]) {
- im->colorsTotal--;
- } else {
- break;
- }
- }
- return im;
-}
-
-static int
-ReadColorMap(gdIOCtx *fd, int number, unsigned char (*buffer)[256])
-{
- int i;
- unsigned char rgb[3];
-
-
- for (i = 0; i < number; ++i) {
- if (! ReadOK(fd, rgb, sizeof(rgb))) {
- return TRUE;
- }
- buffer[CM_RED][i] = rgb[0] ;
- buffer[CM_GREEN][i] = rgb[1] ;
- buffer[CM_BLUE][i] = rgb[2] ;
- }
-
-
- return FALSE;
-}
-
-static int
-DoExtension(gdIOCtx *fd, int label, int *Transparent)
-{
- static unsigned char buf[256];
-
- switch (label) {
- case 0xf9: /* Graphic Control Extension */
- (void) GetDataBlock(fd, (unsigned char*) buf);
- Gif89.disposal = (buf[0] >> 2) & 0x7;
- Gif89.inputFlag = (buf[0] >> 1) & 0x1;
- Gif89.delayTime = LM_to_uint(buf[1],buf[2]);
- if ((buf[0] & 0x1) != 0)
- *Transparent = buf[3];
-
- while (GetDataBlock(fd, (unsigned char*) buf) != 0)
- ;
- return FALSE;
- default:
- break;
- }
- while (GetDataBlock(fd, (unsigned char*) buf) != 0)
- ;
-
- return FALSE;
-}
-
-static int
-GetDataBlock_(gdIOCtx *fd, unsigned char *buf)
-{
- unsigned char count;
-
- if (! ReadOK(fd,&count,1)) {
- return -1;
- }
-
- ZeroDataBlock = count == 0;
-
- if ((count != 0) && (! ReadOK(fd, buf, count))) {
- return -1;
- }
-
- return count;
-}
-
-static int
-GetDataBlock(gdIOCtx *fd, unsigned char *buf)
-{
- int rv;
- int i;
-
- rv = GetDataBlock_(fd,buf);
- if (VERBOSE)
- { printf("[GetDataBlock returning %d",rv);
- if (rv > 0)
- { printf(":");
- for (i=0;i<rv;i++) printf(" %02x",buf[i]);
- }
- printf("]\n");
- }
- return(rv);
-}
-
-static int
-GetCode_(gdIOCtx *fd, int code_size, int flag)
-{
- static unsigned char buf[280];
- static int curbit, lastbit, done, last_byte;
- int i, j, ret;
- unsigned char count;
-
- if (flag) {
- curbit = 0;
- lastbit = 0;
- done = FALSE;
- return 0;
- }
-
- if ( (curbit+code_size) >= lastbit) {
- if (done) {
- if (curbit >= lastbit) {
- /* Oh well */
- }
- return -1;
- }
- buf[0] = buf[last_byte-2];
- buf[1] = buf[last_byte-1];
-
- if ((count = GetDataBlock(fd, &buf[2])) == 0)
- done = TRUE;
-
- last_byte = 2 + count;
- curbit = (curbit - lastbit) + 16;
- lastbit = (2+count)*8 ;
- }
-
- ret = 0;
- for (i = curbit, j = 0; j < code_size; ++i, ++j)
- ret |= ((buf[ i / 8 ] & (1 << (i % 8))) != 0) << j;
-
- curbit += code_size;
- return ret;
-}
-
-static int
-GetCode(gdIOCtx *fd, int code_size, int flag)
-{
- int rv;
-
- rv = GetCode_(fd,code_size,flag);
- if (VERBOSE) printf("[GetCode(,%d,%d) returning %d]\n",code_size,flag,rv);
- return(rv);
-}
-
-#define STACK_SIZE ((1<<(MAX_LWZ_BITS))*2)
-static int
-LWZReadByte_(gdIOCtx *fd, int flag, int input_code_size)
-{
- static int fresh = FALSE;
- int code, incode;
- static int code_size, set_code_size;
- static int max_code, max_code_size;
- static int firstcode, oldcode;
- static int clear_code, end_code;
- static int table[2][(1<< MAX_LWZ_BITS)];
- static int stack[STACK_SIZE], *sp;
- register int i;
-
- if (flag) {
- set_code_size = input_code_size;
- code_size = set_code_size+1;
- clear_code = 1 << set_code_size ;
- end_code = clear_code + 1;
- max_code_size = 2*clear_code;
- max_code = clear_code+2;
-
- GetCode(fd, 0, TRUE);
-
- fresh = TRUE;
-
- for (i = 0; i < clear_code; ++i) {
- table[0][i] = 0;
- table[1][i] = i;
- }
- for (; i < (1<<MAX_LWZ_BITS); ++i)
- table[0][i] = table[1][0] = 0;
-
- sp = stack;
-
- return 0;
- } else if (fresh) {
- fresh = FALSE;
- do {
- firstcode = oldcode =
- GetCode(fd, code_size, FALSE);
- } while (firstcode == clear_code);
- return firstcode;
- }
-
- if (sp > stack)
- return *--sp;
-
- while ((code = GetCode(fd, code_size, FALSE)) >= 0) {
- if (code == clear_code) {
- for (i = 0; i < clear_code; ++i) {
- table[0][i] = 0;
- table[1][i] = i;
- }
- for (; i < (1<<MAX_LWZ_BITS); ++i)
- table[0][i] = table[1][i] = 0;
- code_size = set_code_size+1;
- max_code_size = 2*clear_code;
- max_code = clear_code+2;
- sp = stack;
- firstcode = oldcode =
- GetCode(fd, code_size, FALSE);
- return firstcode;
- } else if (code == end_code) {
- int count;
- unsigned char buf[260];
-
- if (ZeroDataBlock)
- return -2;
-
- while ((count = GetDataBlock(fd, buf)) > 0)
- ;
-
- if (count != 0)
- return -2;
- }
-
- incode = code;
-
- if (sp == (stack + STACK_SIZE)) {
- /* Bad compressed data stream */
- return -1;
- }
-
- if (code >= max_code) {
- *sp++ = firstcode;
- code = oldcode;
- }
-
- while (code >= clear_code) {
- if (sp == (stack + STACK_SIZE)) {
- /* Bad compressed data stream */
- return -1;
- }
- *sp++ = table[1][code];
- if (code == table[0][code]) {
- /* Oh well */
- }
- code = table[0][code];
- }
-
- *sp++ = firstcode = table[1][code];
-
- if ((code = max_code) <(1<<MAX_LWZ_BITS)) {
- table[0][code] = oldcode;
- table[1][code] = firstcode;
- ++max_code;
- if ((max_code >= max_code_size) &&
- (max_code_size < (1<<MAX_LWZ_BITS))) {
- max_code_size *= 2;
- ++code_size;
- }
- }
-
- oldcode = incode;
-
- if (sp > stack)
- return *--sp;
- }
- return code;
-}
-
-static int
-LWZReadByte(gdIOCtx *fd, int flag, int input_code_size)
-{
- int rv;
-
- rv = LWZReadByte_(fd,flag,input_code_size);
- if (VERBOSE) printf("[LWZReadByte(,%d,%d) returning %d]\n",flag,input_code_size,rv);
- return(rv);
-}
-
-static void
-ReadImage(gdImagePtr im, gdIOCtx *fd, int len, int height, unsigned char (*cmap)[256], int interlace) /*1.4//, int ignore) */
-{
- unsigned char c;
- int v;
- int xpos = 0, ypos = 0, pass = 0;
- int i;
- /* Stash the color map into the image */
- for (i=0; (i<gdMaxColors); i++) {
- im->red[i] = cmap[CM_RED][i];
- im->green[i] = cmap[CM_GREEN][i];
- im->blue[i] = cmap[CM_BLUE][i];
- im->open[i] = 1;
- }
- /* Many (perhaps most) of these colors will remain marked open. */
- im->colorsTotal = gdMaxColors;
- /*
- ** Initialize the Compression routines
- */
- if (! ReadOK(fd,&c,1)) {
- return;
- }
- if (LWZReadByte(fd, TRUE, c) < 0) {
- return;
- }
-
- /*
- ** If this is an "uninteresting picture" ignore it.
- ** REMOVED For 1.4
- */
- /*if (ignore) { */
- /* while (LWZReadByte(fd, FALSE, c) >= 0) */
- /* ; */
- /* return; */
- /*} */
-
- while ((v = LWZReadByte(fd,FALSE,c)) >= 0 ) {
- /* This how we recognize which colors are actually used. */
- if (im->open[v]) {
- im->open[v] = 0;
- }
- gdImageSetPixel(im, xpos, ypos, v);
- ++xpos;
- if (xpos == len) {
- xpos = 0;
- if (interlace) {
- switch (pass) {
- case 0:
- case 1:
- ypos += 8; break;
- case 2:
- ypos += 4; break;
- case 3:
- ypos += 2; break;
- }
-
- if (ypos >= height) {
- ++pass;
- switch (pass) {
- case 1:
- ypos = 4; break;
- case 2:
- ypos = 2; break;
- case 3:
- ypos = 1; break;
- default:
- goto fini;
- }
- }
- } else {
- ++ypos;
- }
- }
- if (ypos >= height)
- break;
- }
-
-fini:
- if (LWZReadByte(fd,FALSE,c)>=0) {
- /* Ignore extra */
- }
-}
-
diff --git a/graphics/gd/files/gd_gif_out.c b/graphics/gd/files/gd_gif_out.c
deleted file mode 100644
index 10c7ab58000b..000000000000
--- a/graphics/gd/files/gd_gif_out.c
+++ /dev/null
@@ -1,46 +0,0 @@
-#include <stdio.h>
-#include <math.h>
-#include <string.h>
-#include <stdlib.h>
-#include "gd.h"
-
-/*
-** Wrapper functions for GIF output.
-*/
-
-#define LZW_LICENCED
-
-void gdImageGifToSink(gdImagePtr im, gdSinkPtr outSink)
-{
- gdIOCtx *out = gdNewSSCtx(NULL,outSink);
- gdImageGifCtx(im, out);
- out->gd_free(out);
-}
-
-void gdImageGifCtx(gdImagePtr im, gdIOCtx *out)
-{
-#ifdef LZW_LICENCED
- gdImageLzwCtx(im, out);
-#else
- gdImageBigGifCtx(im, out);
-#endif
-}
-
-void gdImageGif(gdImagePtr im, FILE *outFile)
-{
-#ifdef LZW_LICENCED
- gdImageLzw(im, outFile);
-#else
- gdImageBigGif(im, outFile);
-#endif
-}
-
-void* gdImageGifPtr(gdImagePtr im, int *size)
-{
-#ifdef LZW_LICENCED
- return gdImageLzwPtr(im, size);
-#else
- return gdImageBigGifPtr(im, size);
-#endif
-}
-
diff --git a/graphics/gd/files/gd_lzw_out.c b/graphics/gd/files/gd_lzw_out.c
deleted file mode 100644
index ee130c5e5a38..000000000000
--- a/graphics/gd/files/gd_lzw_out.c
+++ /dev/null
@@ -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 --git a/graphics/gd/files/gdcmpgif.c b/graphics/gd/files/gdcmpgif.c
deleted file mode 100644
index 13c243014d2b..000000000000
--- a/graphics/gd/files/gdcmpgif.c
+++ /dev/null
@@ -1,85 +0,0 @@
-#include <stdio.h>
-#include <unistd.h> /* For unlink function */
-#include "gd.h"
-
-/* A short program which converts a .png file into a .gd file, for
- your convenience in creating images on the fly from a
- basis image that must be loaded quickly. The .gd format
- is not intended to be a general-purpose format. */
-
-void CompareImages(char *msg, gdImagePtr im1, gdImagePtr im2);
-
-
-int main(int argc, char **argv)
-{
- gdImagePtr im1, im2;
- FILE *in;
-
- if (argc != 3) {
- fprintf(stderr, "Usage: gdcmpgif filename.gif filename.gif\n");
- exit(1);
- }
- in = fopen(argv[1], "rb");
- if (!in) {
- fprintf(stderr, "Input file does not exist!\n");
- exit(1);
- }
- im1 = gdImageCreateFromGif(in);
- fclose(in);
-
- if (!im1) {
- fprintf(stderr, "Input is not in GIF format!\n");
- exit(1);
- }
-
- in = fopen(argv[2], "rb");
- if (!in) {
- fprintf(stderr, "Input file 2 does not exist!\n");
- exit(1);
- }
- im2 = gdImageCreateFromGif(in);
- fclose(in);
-
- if (!im2) {
- fprintf(stderr, "Input 2 is not in GIF format!\n");
- exit(1);
- }
-
- CompareImages("gdcmpgif", im1, im2);
-
- gdImageDestroy(im1);
- gdImageDestroy(im2);
-
- return 0;
-}
-
-void CompareImages(char *msg, gdImagePtr im1, gdImagePtr im2)
-{
- int cmpRes;
-
- cmpRes = gdImageCompare(im1, im2);
-
- if (cmpRes & GD_CMP_IMAGE) {
- printf("%%%s: ERROR images differ: BAD\n",msg);
- } else if (cmpRes != 0) {
- printf("%%%s: WARNING images differ: WARNING - Probably OK\n",msg);
- } else {
- printf("%%%s: OK\n",msg);
- return;
- }
-
- if (cmpRes & (GD_CMP_SIZE_X + GD_CMP_SIZE_Y)) {
- printf("-%s: INFO image sizes differ\n",msg);
- }
-
- if (cmpRes & GD_CMP_NUM_COLORS) {
- printf("-%s: INFO number of pallette entries differ %d Vs. %d\n",msg,
- im1->colorsTotal, im2->colorsTotal);
- }
-
- if (cmpRes & GD_CMP_COLOR) {
- printf("-%s: INFO actual colours of pixels differ\n",msg);
- }
-}
-
-
diff --git a/graphics/gd/files/giftogd2.c b/graphics/gd/files/giftogd2.c
deleted file mode 100644
index 3753b56ac4c6..000000000000
--- a/graphics/gd/files/giftogd2.c
+++ /dev/null
@@ -1,48 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-
-#include "gd.h"
-
-/* A short program which converts a .gif file into a .gd file, for
- your convenience in creating images on the fly from a
- basis image that must be loaded quickly. The .gd format
- is not intended to be a general-purpose format. */
-
-int main(int argc, char **argv)
-{
- gdImagePtr im;
- FILE *in, *out;
- int cs, fmt;
-
- if (argc != 5) {
- fprintf(stderr, "Usage: giftogd2 filename.gif filename.gd2 cs fmt\n");
- fprintf(stderr, " where cs is the chunk size\n");
- fprintf(stderr, " fmt is 1 for raw, 2 for compressed\n");
- exit(1);
- }
- in = fopen(argv[1], "rb");
- if (!in) {
- fprintf(stderr, "Input file does not exist!\n");
- exit(1);
- }
- im = gdImageCreateFromGif(in);
- fclose(in);
- if (!im) {
- fprintf(stderr, "Input is not in GIF format!\n");
- exit(1);
- }
- out = fopen(argv[2], "wb");
- if (!out) {
- fprintf(stderr, "Output file cannot be written to!\n");
- gdImageDestroy(im);
- exit(1);
- }
- cs = atoi(argv[3]);
- fmt = atoi(argv[4]);
- gdImageGd2(im, out, cs, fmt);
- fclose(out);
- gdImageDestroy(im);
-
- return 0;
-}
-
diff --git a/graphics/gd/files/patch-ac b/graphics/gd/files/patch-ac
new file mode 100644
index 000000000000..9d63cb3d8eb1
--- /dev/null
+++ b/graphics/gd/files/patch-ac
@@ -0,0 +1,188 @@
+--- Makefile.orig Thu Feb 22 19:03:43 2001
++++ Makefile Sun Dec 16 05:57:07 2001
+@@ -3,22 +3,30 @@
+ #If you do not have gcc, change the setting for COMPILER, but you must
+ #use an ANSI standard C compiler (NOT the old SunOS 4.1.3 cc
+ #compiler; get gcc if you are still using it).
+-COMPILER=gcc
++COMPILER=${CC}
+
+ #If the ar command fails on your system, consult the ar manpage
+ #for your system.
+-AR=ar
++#AR=ar
+
+ #If you don't have FreeType, libjpeg and/or Xpm installed, including the
+ #header files, uncomment this (default). You really must install
+ #libpng and zlib to get anywhere if you wish to create PNG images.
+-CFLAGS=-O -DHAVE_LIBPNG -DHAVE_LIBJPEG
++CFLAGS+=-DHAVE_LIBPNG -DHAVE_LIBJPEG -DHAVE_LIBFREETYPE
+
+ #If you do have FreeType, libjpeg and/or Xpm fully installed, uncomment a
+ #variation of this and comment out the line above. See also LIBS below.
+ #CFLAGS=-O -DHAVE_LIBXPM -DHAVE_LIBPNG -DHAVE_LIBJPEG \
+ # -DHAVE_LIBFREETYPE -DHAVE_LIBTTF
+
++.if defined(WITH_X11)
++CFLAGS+=-DHAVE_XPM
++.endif
++
++.if defined(JISX0208)
++CFLAGS+=-DJISX0208
++.endif
++
+ #To use the old FreeType 1.x library, add this additional #define
+ #to the line above
+ #-DHAVE_LIBTTF
+@@ -30,7 +38,7 @@
+ #Some systems are very picky about link order. They don't all agree
+ #on the right order, either.
+
+-LIBS=-lgd -lpng -lz -lm
++LIBS=-lgd -lpng -lz -ljpeg -lm `$(FREETYPE_CONFIG) --libs`
+
+ #If you do have FreeType, JPEG and/or Xpm fully installed, uncomment a
+ #variation of this and comment out the line above. Note that
+@@ -38,6 +46,10 @@
+
+ #LIBS=-lgd -lpng -lz -ljpeg -lfreetype -lm -lttf
+
++.if defined(WITH_X11)
++LIBS+=-lXpm -lX11
++.endif
++
+ #Note: for Freetype 1.x, use DHAVE_LIBTTF and -lttf instead.
+
+ #Typical install locations for freetype, zlib, xpm, libjpeg and libpng header
+@@ -45,7 +57,11 @@
+ #ensure that the version of gd you are installing is used, and not an
+ #older release in your directory tree somewhere.
+
+-INCLUDEDIRS=-I. -I/usr/include/freetype2 -I/usr/include/X11 -I/usr/X11R6/include/X11 -I/usr/local/include
++INCLUDEDIRS=-I. `$(FREETYPE_CONFIG) --cflags` -I${LOCALBASE}/include
++
++.if defined(WITH_X11)
++INCLUDEDIRS+=-I${X11BASE}/include/X11 -I${X11BASE}/include
++.endif
+
+ #Typical install locations for freetype, zlib, xpm and libpng libraries.
+ #If yours are somewhere else, other than a standard location
+@@ -55,16 +71,20 @@
+ #on your system can't cause conflicts while building a new one.
+ #This line shouldn't hurt if you don't actually have some of the
+ #optional libraries and directories.
+-LIBDIRS=-L. -L/usr/local/lib -L/usr/lib/X11 -L/usr/X11R6/lib
++LIBDIRS=-L. -L${LOCALBASE}/lib -Wl,--rpath,${LOCALBASE}/lib
++
++.if defined(WITH_X11)
++LIBDIRS+=-L${X11BASE}/lib -Wl,--rpath,${X11BASE}/lib
++.endif
+
+ #Location where libgd.a should be installed by "make install".
+-INSTALL_LIB=/usr/local/lib
++INSTALL_LIB=${PREFIX}/lib
+
+ #Location where .h files should be installed by "make install".
+-INSTALL_INCLUDE=/usr/local/include
++INSTALL_INCLUDE=${PREFIX}/include/gd
+
+ #Location where useful non-test programs should be installed by "make install".
+-INSTALL_BIN=/usr/local/bin
++INSTALL_BIN=${PREFIX}/bin
+
+ #
+ #
+@@ -74,34 +94,43 @@
+
+ VERSION=1.8.4
+
+-CC=$(COMPILER) $(INCLUDEDIRS)
+-LINK=$(CC) $(LIBDIRS) $(LIBS)
++CFLAGS+=$(INCLUDEDIRS)
+
+ PROGRAMS=$(BIN_PROGRAMS) $(TEST_PROGRAMS)
+
+ BIN_PROGRAMS=pngtogd pngtogd2 gdtopng gd2topng gd2copypal gdparttopng webpng
+ TEST_PROGRAMS=gdtest gddemo gd2time gdtestft gdtestttf
+
+-all: libgd.a $(PROGRAMS)
++SOVER=2
++
++.SUFFIXES: .c .so .o
+
+-install: libgd.a $(BIN_PROGRAMS)
+- sh ./install-item 644 libgd.a $(INSTALL_LIB)/libgd.a
+- sh ./install-item 755 pngtogd $(INSTALL_BIN)/pngtogd
+- sh ./install-item 755 pngtogd2 $(INSTALL_BIN)/pngtogd2
+- sh ./install-item 755 gdtopng $(INSTALL_BIN)/gdtopng
+- sh ./install-item 755 gd2topng $(INSTALL_BIN)/gd2topng
+- sh ./install-item 755 gd2copypal $(INSTALL_BIN)/gd2copypal
+- sh ./install-item 755 gdparttopng $(INSTALL_BIN)/gdparttopng
+- sh ./install-item 755 webpng $(INSTALL_BIN)/webpng
+- sh ./install-item 755 bdftogd $(INSTALL_BIN)/bdftogd
+- sh ./install-item 644 gd.h $(INSTALL_INCLUDE)/gd.h
+- sh ./install-item 644 gdcache.h $(INSTALL_INCLUDE)/gdcache.h
+- sh ./install-item 644 gd_io.h $(INSTALL_INCLUDE)/gd_io.h
+- sh ./install-item 644 gdfontg.h $(INSTALL_INCLUDE)/gdfontg.h
+- sh ./install-item 644 gdfontl.h $(INSTALL_INCLUDE)/gdfontl.h
+- sh ./install-item 644 gdfontmb.h $(INSTALL_INCLUDE)/gdfontmb.h
+- sh ./install-item 644 gdfonts.h $(INSTALL_INCLUDE)/gdfonts.h
+- sh ./install-item 644 gdfontt.h $(INSTALL_INCLUDE)/gdfontt.h
++.c.so:
++ $(CC) -fpic -DPIC $(CFLAGS) -o $@ -c $<
++
++all: libgd.a libgd.so.$(SOVER) $(PROGRAMS)
++
++install: libgd.a libgd.so.$(SOVER) $(BIN_PROGRAMS)
++ -mkdir -p $(INSTALL_LIB) $(INSTALL_INCLUDE) $(INSTALL_BIN)
++ ${BSD_INSTALL_DATA} libgd.a $(INSTALL_LIB)/libgd.a
++ ${BSD_INSTALL_DATA} libgd.so.$(SOVER) $(INSTALL_LIB)/libgd.so.$(SOVER)
++ -ln -sf libgd.so.$(SOVER) $(INSTALL_LIB)/libgd.so
++ ${BSD_INSTALL_PROGRAM} pngtogd $(INSTALL_BIN)/pngtogd
++ ${BSD_INSTALL_PROGRAM} pngtogd2 $(INSTALL_BIN)/pngtogd2
++ ${BSD_INSTALL_PROGRAM} gdtopng $(INSTALL_BIN)/gdtopng
++ ${BSD_INSTALL_PROGRAM} gd2topng $(INSTALL_BIN)/gd2topng
++ ${BSD_INSTALL_PROGRAM} gd2copypal $(INSTALL_BIN)/gd2copypal
++ ${BSD_INSTALL_PROGRAM} gdparttopng $(INSTALL_BIN)/gdparttopng
++ ${BSD_INSTALL_PROGRAM} webpng $(INSTALL_BIN)/webpng
++ ${BSD_INSTALL_SCRIPT} bdftogd $(INSTALL_BIN)/bdftogd
++ ${BSD_INSTALL_DATA} gd.h $(INSTALL_INCLUDE)/gd.h
++ ${BSD_INSTALL_DATA} gdcache.h $(INSTALL_INCLUDE)/gdcache.h
++ ${BSD_INSTALL_DATA} gd_io.h $(INSTALL_INCLUDE)/gd_io.h
++ ${BSD_INSTALL_DATA} gdfontg.h $(INSTALL_INCLUDE)/gdfontg.h
++ ${BSD_INSTALL_DATA} gdfontl.h $(INSTALL_INCLUDE)/gdfontl.h
++ ${BSD_INSTALL_DATA} gdfontmb.h $(INSTALL_INCLUDE)/gdfontmb.h
++ ${BSD_INSTALL_DATA} gdfonts.h $(INSTALL_INCLUDE)/gdfonts.h
++ ${BSD_INSTALL_DATA} gdfontt.h $(INSTALL_INCLUDE)/gdfontt.h
+
+ gddemo: gddemo.o libgd.a
+ $(CC) gddemo.o -o gddemo $(LIBDIRS) $(LIBS)
+@@ -138,18 +167,21 @@
+ gdtestttf: gdtestttf.o libgd.a
+ $(CC) --verbose gdtestttf.o -o gdtestttf $(LIBDIRS) $(LIBS)
+
+-libgd.a: gd.o gd_gd.o gd_gd2.o gd_io.o gd_io_dp.o gd_io_file.o gd_ss.o \
++OBJS= gd.o gd_gd.o gd_gd2.o gd_io.o gd_io_dp.o gd_io_file.o gd_ss.o \
+ gd_io_ss.o gd_png.o gd_jpeg.o gdxpm.o gdfontt.o gdfonts.o gdfontmb.o gdfontl.o \
+ gdfontg.o gdtables.o gdft.o gdttf.o gdcache.o gdkanji.o wbmp.o \
+- gd_wbmp.o gdhelpers.o gd.h gdfontt.h gdfonts.h gdfontmb.h gdfontl.h \
++ gd_wbmp.o gdhelpers.o gd_gif_in.o
++INCS= gd.h gdfontt.h gdfonts.h gdfontmb.h gdfontl.h \
+ gdfontg.h gdhelpers.h
++
++libgd.a: $(INCS) $(OBJS)
+ rm -f libgd.a
+- $(AR) rc libgd.a gd.o gd_gd.o gd_gd2.o gd_io.o gd_io_dp.o \
+- gd_io_file.o gd_ss.o gd_io_ss.o gd_png.o gd_jpeg.o gdxpm.o \
+- gdfontt.o gdfonts.o gdfontmb.o gdfontl.o gdfontg.o \
+- gdtables.o gdft.o gdttf.o gdcache.o gdkanji.o wbmp.o \
+- gd_wbmp.o gdhelpers.o
++ $(AR) rc libgd.a $(OBJS)
+ -ranlib libgd.a
++
++libgd.so.$(SOVER): $(INCS) $(OBJS:.o=.so)
++ $(CC) -shared -Wl,-x,-soname,$@ -o $@ $(OBJS:.o=.so) $(LIBDIRS) $(LIBS)
++ ln -sf libgd.so.$(SOVER) libgd.so
+
+ clean:
+ rm -f *.o *.a ${PROGRAMS} test/gdtest.jpg test/gdtest.wbmp
diff --git a/graphics/gd/files/patch-gd.h b/graphics/gd/files/patch-gd.h
deleted file mode 100644
index 026f87b14b30..000000000000
--- a/graphics/gd/files/patch-gd.h
+++ /dev/null
@@ -1,41 +0,0 @@
---- gd.h Thu Jan 16 11:28:09 2003
-+++ gd.h Mon Mar 24 16:26:14 2003
-@@ -209,4 +209,8 @@
- gdImagePtr gdImageCreateFromPngSource (gdSourcePtr in);
-
-+ gdImagePtr gdImageCreateFromGif(FILE *fd);
-+ gdImagePtr gdImageCreateFromGifCtx(gdIOCtxPtr in);
-+ gdImagePtr gdImageCreateFromGifSource(gdSourcePtr in);
-+
- gdImagePtr gdImageCreateFromGd (FILE * in);
- gdImagePtr gdImageCreateFromGdCtx (gdIOCtxPtr in);
-@@ -300,4 +304,5 @@
-
- void gdImagePolygon (gdImagePtr im, gdPointPtr p, int n, int c);
-+ void gdImageOpenPolygon(gdImagePtr im, gdPointPtr p, int n, int c);
- void gdImageFilledPolygon (gdImagePtr im, gdPointPtr p, int n, int c);
-
-@@ -395,4 +400,13 @@
- void *gdImageJpegPtr (gdImagePtr im, int *size, int quality);
-
-+ void gdImageLzw(gdImagePtr im, FILE *out);
-+ void* gdImageLzwPtr(gdImagePtr im, int *size);
-+ void gdImageLzwCtx(gdImagePtr im, gdIOCtxPtr out);
-+
-+ void gdImageBigGif(gdImagePtr im, FILE *out);
-+ void* gdImageBigGifPtr(gdImagePtr im, int *size);
-+ void gdImageBigGifCtx(gdImagePtr im, gdIOCtxPtr out);
-+
-+
- /* A custom data sink. For backwards compatibility. Use
- gdIOCtx instead. */
-@@ -408,4 +422,9 @@
-
- void gdImagePngToSink (gdImagePtr im, gdSinkPtr out);
-+
-+ void gdImageGif(gdImagePtr im, FILE *out);
-+ void* gdImageGifPtr(gdImagePtr im, int *size);
-+ void gdImageGifCtx(gdImagePtr im, gdIOCtxPtr out);
-+ void gdImageGifToSink(gdImagePtr im, gdSinkPtr out);
-
- void gdImageGd (gdImagePtr im, FILE * out);
diff --git a/graphics/gd/files/patch-gdft.c b/graphics/gd/files/patch-gdft.c
deleted file mode 100644
index cdee3d88935b..000000000000
--- a/graphics/gd/files/patch-gdft.c
+++ /dev/null
@@ -1,92 +0,0 @@
---- gdft.c Thu Jan 16 13:29:32 2003
-+++ gdft.c Mon Mar 24 17:09:54 2003
-@@ -546,8 +546,8 @@
- a->tweencolor = gdTrueColorAlpha (gdTrueColorGetRed (fg),
- gdTrueColorGetGreen (fg),
- gdTrueColorGetBlue (fg),
-- gdAlphaMax -
-- (gdTrueColorGetAlpha (fg) *
-+ gdAlphaMax - ((gdAlphaMax -
-+ gdTrueColorGetAlpha (fg)) *
- pixel / NUMCOLORS));
- }
- else
-@@ -680,10 +680,14 @@
- if (y >= im->sy || y < 0)
- continue;
-
-- for (col = 0; col < bitmap.width; col++, pc++)
-- {
-- if (bitmap.pixel_mode == ft_pixel_mode_grays)
-- {
-+ for (col = 0; col < bitmap.width; col++, pc++) {
-+ x = pen_x + col;
-+ /* clip if out of bounds */
-+ if (x >= im->sx || x < 0)
-+ continue;
-+
-+ switch(bitmap.pixel_mode) {
-+ case ft_pixel_mode_grays:
- /*
- * Round to NUMCOLORS levels of antialiasing for
- * index color images since only 256 colors are
-@@ -692,44 +696,38 @@
- tc_key.pixel = ((bitmap.buffer[pc] * NUMCOLORS)
- + bitmap.num_grays / 2)
- / (bitmap.num_grays - 1);
-- }
-- else if (bitmap.pixel_mode == ft_pixel_mode_mono)
-- {
-- tc_key.pixel = ((bitmap.buffer[pc / 8]
-- << (pc % 8)) & 128) ? NUMCOLORS : 0;
-+ break;
-+ case ft_pixel_mode_mono:
- /* 2.0.5: mode_mono fix from Giuliano Pochini */
- tc_key.pixel =
- ((bitmap.
- buffer[(col >> 3) +
- pcr]) & (1 << (~col & 0x07))) ? NUMCOLORS : 0;
-- }
-- else
-- {
-+ break;
-+ default:
- return "Unsupported ft_pixel_mode";
-- }
-+ }
-+
- if (tc_key.pixel > 0) /* if not background */
- {
-- x = pen_x + col;
--
-- /* clip if out of bounds */
-- if (x >= im->sx || x < 0)
-- continue;
-- /* get pixel location in gd buffer */
-- pixel = &im->pixels[y][x];
-- if (tc_key.pixel == NUMCOLORS)
-- {
-+ if (im->trueColor) {
-+ tc_elem = (tweencolor_t *)gdCacheGet(tc_cache, &tc_key);
-+ gdImageSetPixel(im, x, y, tc_elem->tweencolor);
-+ } else {
-+ /* get pixel location in gd buffer */
-+ pixel = &im->pixels[y][x];
-+ if (tc_key.pixel == NUMCOLORS)
- /* use fg color directly. gd 2.0.2: watch out for
- negative indexes (thanks to David Marwood). */
- *pixel = (fg < 0) ? -fg : fg;
-- }
-- else
-- {
-+ else {
- /* find antialised color */
-
- tc_key.bgcolor = *pixel;
- tc_elem = (tweencolor_t *) gdCacheGet (tc_cache, &tc_key);
- *pixel = tc_elem->tweencolor;
- }
-+ }
- }
- }
- }
diff --git a/graphics/gd/files/patch-gdkanji.c b/graphics/gd/files/patch-gdkanji.c
new file mode 100644
index 000000000000..2162a7e95c38
--- /dev/null
+++ b/graphics/gd/files/patch-gdkanji.c
@@ -0,0 +1,87 @@
+--- gdkanji.c.orig Fri Feb 2 05:23:56 2001
++++ gdkanji.c Wed Feb 7 20:59:08 2001
+@@ -103,14 +103,18 @@
+ unsigned char *str;
+ #endif
+ {
+- static int whatcode;
++ static int whatcode = ASCII;
++ int oldcode = ASCII;
+ int c, i;
+ char *lang = NULL;
+
+ c = '\1';
+ i = 0;
+
+- if (whatcode == 0) whatcode = ASCII;
++ if (whatcode != EUCORSJIS && whatcode != ASCII) {
++ oldcode = whatcode;
++ whatcode = ASCII;
++ }
+
+ while ((whatcode == EUCORSJIS || whatcode == ASCII) && c != '\0') {
+ if ((c = str[i++]) != '\0') {
+@@ -167,7 +171,7 @@
+ if ((c >= 64 && c <= 126) || (c >= 128 && c <= 160))
+ whatcode = SJIS;
+ else
+- if (c >= 253 && c >= 254) whatcode = EUC;
++ if (c >= 253 && c <= 254) whatcode = EUC;
+ else
+ if (c >= 161 && c <= 252) whatcode = EUCORSJIS;
+ }
+@@ -184,6 +188,8 @@
+ debug("Kanji code detected at %d byte.", i);
+ #endif
+
++ if (whatcode == EUCORSJIS && oldcode != ASCII) whatcode = oldcode;
++
+ if (whatcode == EUCORSJIS) {
+ if (getenv ("LC_ALL")) lang = getenv ("LC_ALL");
+ else
+@@ -310,7 +316,7 @@
+ error("invalid code specification: \"%s\" or \"%s\"",
+ EUCSTR, code);
+ #endif
+- strcpy(to, from);
++ ustrcpy(to, from);
+ return;
+ }
+
+@@ -328,7 +334,7 @@
+ else
+ #endif
+ error("something happen");
+- strcpy(to, from);
++ ustrcpy(to, from);
+ return;
+ }
+
+@@ -526,11 +532,10 @@
+
+ t = (unsigned char *)gdMalloc(BUFSIZ);
+ any2eucjp(t, s, BUFSIZ);
+- i = strlen(t);
++ i = strlen((const char *)t);
+ gdFree(t);
+ return i;
+ }
+-#endif
+
+ #ifdef DEBUG
+ int main()
+@@ -543,7 +548,7 @@
+ while ( (c = fgetc(stdin)) != '\n' && i < BUFSIZ ) input[i++] = c;
+ input[i] = '\0';
+
+- printf("input : %d bytes\n", strlen(input));
++ printf("input : %d bytes\n", strlen((const char *)input));
+ printf("output: %d bytes\n", strwidth(input));
+
+ output = (unsigned char *)gdMalloc(BUFSIZ);
+@@ -555,4 +560,5 @@
+
+ return 0;
+ }
++#endif
+ #endif
diff --git a/graphics/gd/files/patch-gdtest.c b/graphics/gd/files/patch-gdtest.c
deleted file mode 100644
index 85c855d4db02..000000000000
--- a/graphics/gd/files/patch-gdtest.c
+++ /dev/null
@@ -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 --git a/graphics/gd/files/patch-gdttf.c b/graphics/gd/files/patch-gdttf.c
new file mode 100644
index 000000000000..c7b8768a725f
--- /dev/null
+++ b/graphics/gd/files/patch-gdttf.c
@@ -0,0 +1,17 @@
+--- gdttf.c.orig Fri Feb 2 05:23:56 2001
++++ gdttf.c Wed Feb 7 20:57:34 2001
+@@ -221,11 +221,10 @@
+ byte = *((unsigned char *) str);
+ #ifdef JISX0208
+ if (0xA1 <= byte && byte <= 0xFE) {
+- int jiscode, ku, ten;
++ int ku, ten;
+
+- jiscode = 0x100 * (byte & 0x7F) + (str[1] & 0x7F);
+- ku = (jiscode >> 8) - 0x20;
+- ten = (jiscode % 256) - 0x20;
++ ku = (byte & 0x7F) - 0x20;
++ ten = (str[1] & 0x7F) - 0x20;
+ if ( (ku < 1 || ku > 92) || (ten < 1 || ten > 94) ) {
+ *chPtr = (Tcl_UniChar) byte;
+ return 1;
diff --git a/graphics/gd/files/patch-gif b/graphics/gd/files/patch-gif
new file mode 100644
index 000000000000..e156fa2dd01f
--- /dev/null
+++ b/graphics/gd/files/patch-gif
@@ -0,0 +1,15 @@
+This patch together with the old implementation (from gd-1.5) of
+gd_gif_in.c restore GD's ability to read GIF images. The writing of such
+images is troubled because of Unisys' zeal in patent enforcement.
+
+--- gd.h Tue Feb 6 14:44:01 2001
++++ gd.h Fri Jul 27 16:10:38 2001
+@@ -95,2 +95,4 @@
+ gdImagePtr gdImageCreate(int sx, int sy);
++gdImagePtr gdImageCreateFromGif(FILE *fd);
++gdImagePtr gdImageCreateFromGifCtx(gdIOCtxPtr in);
+ gdImagePtr gdImageCreateFromPng(FILE *fd);
+--- gd_gif_in.c Fri Jul 27 16:13:45 2001
++++ gd_gif_in.c Fri Jul 27 16:14:46 2001
+@@ -6,1 +6,0 @@
+-#include "io.h"
diff --git a/graphics/gd/files/patch-index.html b/graphics/gd/files/patch-index.html
deleted file mode 100644
index 243abcd238ec..000000000000
--- a/graphics/gd/files/patch-index.html
+++ /dev/null
@@ -1,71 +0,0 @@
---- index.html Mon Nov 25 11:39:31 2002
-+++ index.html Wed Nov 27 12:47:38 2002
-@@ -35,4 +35,9 @@
- modern image formats such as PNG and JPEG as soon as possible.
-
-+<p>Note, that the FreeBSD port of gd2 includes support for GIF files
-+ported from the earlier releases of gd. If the WITH_LZW was defined at
-+build time, the software will also use LZW-compression when creating
-+GIF files.
-+
- <p>
- gd 2.0.8 <strong>requires</strong> that the following libraries
-@@ -116,4 +121,18 @@
- Portions relating to WBMP copyright 2000, 2001, 2002 Maurice Szmurlo and Johan Van
- den Brande.
-+
-+<p>
-+GIF decompression code copyright 1990, 1991, 1993, by David Koblas
-+(koblas@netcom.com).
-+<p>
-+Non-LZW-based GIF compression code copyright 1998, by Hutchison Avenue
-+Software Corporation (<a href="http://www.hasc.com">http://www.hasc.com/<;/a>,
-+info@hasc.com).
-+<p>
-+LZW-based GIF compression code David Rowley.
-+Obtaining a license for the Unisys LZW compression patent is
-+entirely between the user and Unisys. The authors of gd can provide
-+NO assistance in this matter.
-+
- <p>
- <strong>Permission has been granted to copy, distribute and modify gd in any
-@@ -192,5 +211,22 @@
- <li><a href="http://martin.gleeson.com/fly/">fly</a>, by Martin Gleeson
- </ul>
--<P>
-+
-+<P><A NAME="gifpatch"><H3>What does the FreeBSD port add?</H3></A>
-+
-+<p>This version reinstates GIF support. Specifically, the following
-+functions are added: gdImageGif, gdImageGifPtr, gdImageGifCtx,
-+gdImageGifToSink, gdImageCreateFromGif, gdImageCreateFromGifCtx,
-+gdImageCreateFromGifSource.
-+The can be used just like the corresponding functions for the other
-+image formats.
-+
-+<p>Other functions added, but not documented, are: gdImageLzw,
-+gdImageLzwPtr, gdImageLzwCtx, gdImageBigGif, gdImageBigGifPtr,
-+gdImageBigGifCtx.
-+
-+<p>The <a href=#gdImageOpenPolygon>gdImageOpenPolygon</a> is added.
-+This is basically the same as <a href=#gdImagePolygon>gdImagePolygon</A>,
-+but it does not join the start and end points. It is required by GD.pm.
-+
- <A NAME="whatsnew2.0.8"><H3>What's new in version 2.0.8?</H3></A>
- <P>
-@@ -1058,5 +1094,6 @@
- <DD>
- Represents a point in the coordinate space of the image; used
--by <A HREF="#gdImagePolygon">gdImagePolygon</A> and
-+by <A HREF="#gdImagePolygon">gdImagePolygon</A>,
-+<A HREF="#gdImageOpenPolygon">gdImageOpenPolygon</A>, and
- <A HREF="#gdImageFilledPolygon">gdImageFilledPolygon</A>.
- <PRE>
-@@ -1068,5 +1105,6 @@
- <DD>
- A pointer to a <A HREF="#gdPoint">gdPoint</A> structure; passed
--as an argument to <A HREF="#gdImagePolygon">gdImagePolygon</A>
-+as an argument to <A HREF="#gdImagePolygon">gdImagePolygon</A>,
-+<A HREF="#gdImageOpenPolygon">gdImageOpenPolygon</A>,
- and <A HREF="#gdImageFilledPolygon">gdImageFilledPolygon</A>.
- </DL>
diff --git a/graphics/gd/pkg-descr b/graphics/gd/pkg-descr
index f7507cc8d13f..f6ec333a65c6 100644
--- a/graphics/gd/pkg-descr
+++ b/graphics/gd/pkg-descr
@@ -1,16 +1,23 @@
-gd is a graphics library. It allows your code to quickly draw images
-complete with lines, arcs, text, multiple colors, cut and paste from
-other images, and flood fills, and write out the result as a PNG, GIF
-or JPEG file. This is particularly useful in World Wide Web applications,
-where PNG, GIF and JPEG are three of the formats accepted for inline
-images by most browsers.
+DESCRIPTION
-gd does not provide for every possible desirable graphics operation,
-but version 2.0 does include most frequently requested features,
-including both truecolor and palette images, resampling (smooth
-resizing of truecolor images) and so forth.
+ gd is a graphics library. It allows your code to quickly draw images
+ complete with lines, arcs, text, multiple colors, cut and paste from
+ other images, and flood fills, and write out the result as a .PNG file.
+ This is particularly useful in World Wide Web applications, where .PNG
+ is the format used for inline images.
-WWW: http://www.boutell.com/gd/
+ gd is not a paint program. If you are looking for a paint program, you
+ are looking in the wrong place. If you are not a programmer, you are
+ looking in the wrong place.
+
+ gd does not provide for every possible desirable graphics operation.
+ It is not necessary or desirable for gd to become a kitchen-sink
+ graphics package, but version 1.7.3 incorporates most of the commonly
+ requested features for an 8-bit 2D package. Support for truecolor
+ images, JPEG and truecolor PNG is planned for version 2.0.
-- Alex Dupre
-sysadmin@alexdupre.com
+AUTHOR
+ gd was written by Thomas Boutell and is currently distributed by
+ boutell.com, Inc.
+
+WWW: http://www.boutell.com/gd/
diff --git a/graphics/gd/pkg-plist b/graphics/gd/pkg-plist
index baf9c27df669..8a33dbcbf553 100644
--- a/graphics/gd/pkg-plist
+++ b/graphics/gd/pkg-plist
@@ -1,25 +1,22 @@
-bin/annotate
bin/bdftogd
bin/gd2copypal
-bin/gd2togif
bin/gd2topng
-bin/gdcmpgif
bin/gdparttopng
bin/gdtopng
-bin/giftogd2
bin/pngtogd
bin/pngtogd2
bin/webpng
-include/gd.h
-include/gd_io.h
-include/gdcache.h
-include/gdfontg.h
-include/gdfontl.h
-include/gdfontmb.h
-include/gdfonts.h
-include/gdfontt.h
+include/gd/gd.h
+include/gd/gd_io.h
+include/gd/gdcache.h
+include/gd/gdfontg.h
+include/gd/gdfontl.h
+include/gd/gdfontmb.h
+include/gd/gdfonts.h
+include/gd/gdfontt.h
lib/libgd.a
lib/libgd.so
-lib/libgd.so.4
+lib/libgd.so.2
%%PORTDOCS%%share/doc/gd/index.html
%%PORTDOCS%%@dirrm share/doc/gd
+@dirrm include/gd
diff --git a/graphics/gd/scripts/configure b/graphics/gd/scripts/configure
deleted file mode 100644
index 299f3877aaf8..000000000000
--- a/graphics/gd/scripts/configure
+++ /dev/null
@@ -1,44 +0,0 @@
-#!/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
-
-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