--- parser3/src/classes/gd/Attic/gifio.C 2001/04/16 11:26:38 1.5.2.1 +++ parser3/src/classes/gd/Attic/gifio.C 2003/03/24 13:43:40 1.21.2.2.2.5 @@ -1,10 +1,18 @@ /** @file Parser: image manipulations impl2. - Author: Alexander Petrosyan (http://design.ru/paf) + Copyright (c) 2001-2003 ArtLebedev Group (http://www.artlebedev.com) + Author: Alexandr Petrosian (http://paf.design.ru) - $Id: gifio.C,v 1.5.2.1 2001/04/16 11:26:38 paf Exp $ + based on: gd + Written by Tom Boutell, 5/94. + Copyright 1994, Cold Spring Harbor Labs. + Permission granted to use this code in any fashion provided + that this notice is retained and any alterations are + labeled as such. It is requested, but not required, that + you share extensions to this module with us so that we + can incorporate them into new versions. based on: ** @@ -27,6 +35,8 @@ ** CompuServe Incorporated. */ +static const char* IDENT_GIFIO_C="$Date: 2003/03/24 13:43:40 $"; + #include "gif.h" static int colorstobpp(int colors); @@ -35,7 +45,7 @@ void gdImage::Gif(String& out) { int BitsPerPixel = colorstobpp(colorsTotal); /* Clear any old values in statics strewn through the GIF code */ - gdGifEncoder encoder(pool(), *this, out); + gdGifEncoder encoder(*this, out); /* All set, let's do it. */ encoder.encode( sx, sy, interlace, 0, transparent, BitsPerPixel, @@ -75,8 +85,12 @@ colorstobpp(int colors) * *****************************************************************************/ +#ifndef TRUE #define TRUE 1 +#endif +#ifndef FALSE #define FALSE 0 +#endif /* * Bump the 'curx' and 'cury' to point to the next pixel @@ -314,9 +328,9 @@ gdGifEncoder::encode(int GWidth, int GHe */ void gdGifEncoder::Putbyte(int c) { - char *p=(char *)malloc(1); + char *p=new(PointerFreeGC) char[1]; *p=c; - fp.APPEND_CLEAN(p, 1, 0, 0); + fp.append(p, 1, String::L_AS_IS); } /* * Write out a word to the GIF file @@ -324,16 +338,16 @@ gdGifEncoder::Putbyte(int c) { void gdGifEncoder::Putword(int w) { - char *p=(char *)malloc(2); + char *p=new(PointerFreeGC) char[2]; p[0]=w & 0xff; p[1]=(w / 256) & 0xff; - fp.APPEND_CLEAN(p, 2, 0, 0); + fp.append(p, 2, String::L_AS_IS); } void gdGifEncoder::Write(void *buf, size_t size) { - char *p=(char *)malloc(size); + char *p=new(PointerFreeGC) char[size]; memcpy(p, buf, size); - fp.APPEND_CLEAN(p, size, 0, 0); + fp.append(p, size, String::L_AS_IS); } /*************************************************************************** @@ -353,9 +367,9 @@ void gdGifEncoder::Write(void *buf, size #ifdef NO_UCHAR typedef char char_type; -#else /*NO_UCHAR*/ +#else typedef unsigned char char_type; -#endif /*NO_UCHAR*/ +#endif /* * @@ -373,9 +387,9 @@ typedef unsigned char char_type */ #ifdef COMPATIBLE /* But wrong! */ # define MAXCODE(n_bits) ((code_int) 1 <<(n_bits) - 1) -#else /*COMPATIBLE*/ +#else # define MAXCODE(n_bits) (((code_int) 1 <<(n_bits)) - 1) -#endif /*COMPATIBLE*/ +#endif #define HashTabOf(i) htab[i] #define CodeTabOf(i) codetab[i] @@ -454,9 +468,9 @@ gdGifEncoder::compress(int init_bits) #ifdef SIGNED_COMPARE_SLOW while((c = GIFNextPixel( )) !=(unsigned) EOF ) { -#else /*SIGNED_COMPARE_SLOW*/ +#else while((c = GIFNextPixel( )) != EOF ) { /* } */ -#endif /*SIGNED_COMPARE_SLOW*/ +#endif ++in_count; @@ -487,9 +501,9 @@ nomatch: ent = c; #ifdef SIGNED_COMPARE_SLOW if((unsigned) free_ent <(unsigned) maxmaxcode) { -#else /*SIGNED_COMPARE_SLOW*/ +#else if( free_ent < maxmaxcode ) { /* } */ -#endif /*SIGNED_COMPARE_SLOW*/ +#endif CodeTabOf(i) = free_ent++; /* code -> hashtable */ HashTabOf(i) = fcode; } else @@ -593,7 +607,7 @@ void } void - gdGifEncoder::cl_hash(register count_int hsize) /* reset code table */ + gdGifEncoder::cl_hash(count_int hsize) /* reset code table */ { @@ -667,7 +681,7 @@ void } } -gdGifEncoder::gdGifEncoder(Pool& pool, gdImage& aim, String& afp) : Pooled(pool), +gdGifEncoder::gdGifEncoder(gdImage& aim, String& afp): im(aim), fp(afp) { /* Some of these are properly initialized later. What I'm doing @@ -713,8 +727,12 @@ gdGifEncoder::gdGifEncoder(Pool& pool, g #define MAXCOLORMAPSIZE 256 +#ifndef TRUE #define TRUE 1 +#endif +#ifndef FALSE #define FALSE 0 +#endif #define CM_RED 0 #define CM_GREEN 1 @@ -742,14 +760,16 @@ gdGifEncoder::gdGifEncoder(Pool& pool, g unsigned int AspectRatio; }; #endif - + +/// Graphic Control Extension struct +#ifndef DOXYGEN struct Gif89 { int transparent; int delayTime; int inputFlag; int disposal; }; - +#endif static int ReadColorMap(FILE *fd, int number, unsigned char(*buffer)[256]); static int GetCode(FILE *fd, int code_size, int flag);