You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
392 lines
12 KiB
392 lines
12 KiB
diff -Naurd libAfterImage-1.20.orig/export.c libAfterImage-1.20/export.c
|
|
--- libAfterImage-1.20.orig/export.c 2016-05-01 11:44:19.000000000 +0300
|
|
+++ libAfterImage-1.20/export.c 2016-05-02 10:57:59.688984491 +0300
|
|
@@ -1048,6 +1048,9 @@
|
|
Bool new_image = True ;
|
|
START_TIME(started);
|
|
int cmap_size = 1;
|
|
+#if (GIFLIB_MAJOR>=5)
|
|
+ int errcode;
|
|
+#endif
|
|
#define GIF_NETSCAPE_EXT_BYTES 3
|
|
unsigned char netscape_ext_bytes[GIF_NETSCAPE_EXT_BYTES] = { 0x1, 0x0, 0x0};
|
|
#define GIF_GCE_BYTES 4
|
|
@@ -1086,10 +1089,18 @@
|
|
|
|
while( cmap_size < 256 && cmap_size < (int)cmap.count+(gce_bytes[0]&0x01) )
|
|
cmap_size = cmap_size<<1 ;
|
|
+#if (GIFLIB_MAJOR>=5)
|
|
+ if( (gif_cmap = GifMakeMapObject(cmap_size, NULL )) == NULL )
|
|
+#else
|
|
if( (gif_cmap = MakeMapObject(cmap_size, NULL )) == NULL )
|
|
+#endif
|
|
{
|
|
free( mapped_im );
|
|
+#if (GIFLIB_MAJOR>=5)
|
|
+ ASIM_PrintGifError(E_GIF_ERR_NOT_ENOUGH_MEM);
|
|
+#else
|
|
ASIM_PrintGifError();
|
|
+#endif
|
|
return False;
|
|
}
|
|
memcpy( &(gif_cmap->Colors[0]), &(cmap.entries[0]), MIN(cmap.count,(unsigned int)cmap_size)*3 );
|
|
@@ -1101,13 +1112,25 @@
|
|
SavedImage *images = NULL ;
|
|
int count = 0 ;
|
|
/* TODO: do something about multiimage files !!! */
|
|
+#if (GIFLIB_MAJOR>=5)
|
|
+ gif = open_gif_read(infile, &errcode);
|
|
+#else
|
|
gif = open_gif_read(infile);
|
|
+#endif
|
|
if( gif == NULL || get_gif_saved_images(gif, -1, &images, &count) == GIF_ERROR)
|
|
{
|
|
+#if (GIFLIB_MAJOR>=5)
|
|
+ ASIM_PrintGifError(errcode);
|
|
+#else
|
|
ASIM_PrintGifError();
|
|
+#endif
|
|
if( gif )
|
|
{
|
|
+#if (GIFLIB_MAJOR>=5)
|
|
+ DGifCloseFile(gif, &errcode);
|
|
+#else
|
|
DGifCloseFile(gif);
|
|
+#endif
|
|
gif = NULL ;
|
|
}
|
|
if (infile)
|
|
@@ -1123,14 +1146,22 @@
|
|
gif_src = *gif ;
|
|
gif->SColorMap = NULL ;
|
|
gif->Image.ColorMap = NULL ;
|
|
+#if (GIFLIB_MAJOR>=5)
|
|
+ DGifCloseFile(gif, &errcode);
|
|
+#else
|
|
DGifCloseFile(gif);
|
|
+#endif
|
|
gif = NULL;
|
|
fclose (infile);
|
|
infile = NULL;
|
|
outfile = open_writeable_image_file( path );
|
|
|
|
if (outfile)
|
|
+#if (GIFLIB_MAJOR>=5)
|
|
+ gif = EGifOpenFileHandle(fileno(outfile), &errcode);
|
|
+#else
|
|
gif = EGifOpenFileHandle(fileno(outfile));
|
|
+#endif
|
|
|
|
if (gif)
|
|
{
|
|
@@ -1141,26 +1172,46 @@
|
|
gif_src.SColorMap )) == GIF_OK )
|
|
status = write_gif_saved_images( gif, images, count );
|
|
if( status != GIF_OK )
|
|
+#if (GIFLIB_MAJOR>=5)
|
|
+ ASIM_PrintGifError(status);
|
|
+#else
|
|
ASIM_PrintGifError();
|
|
+#endif
|
|
}
|
|
if (gif_src.SColorMap)
|
|
{ /* we only want to save private colormap if it is any different from
|
|
* screen colormap ( saves us 768 bytes per image ) */
|
|
if( gif_cmap->ColorCount == gif_src.SColorMap->ColorCount )
|
|
dont_save_cmap = ( memcmp( gif_cmap->Colors, gif_src.SColorMap->Colors, gif_cmap->ColorCount*sizeof(GifColorType)) == 0 );
|
|
+#if (GIFLIB_MAJOR>=5)
|
|
+ GifFreeMapObject(gif_src.SColorMap);
|
|
+#else
|
|
FreeMapObject(gif_src.SColorMap);
|
|
+#endif
|
|
}
|
|
if (gif)
|
|
{
|
|
EGifPutExtension(gif, GRAPHICS_EXT_FUNC_CODE, GIF_GCE_BYTES, &(gce_bytes[0]));
|
|
if( get_flags( params->gif.flags, EXPORT_ANIMATION_REPEATS ) )
|
|
{
|
|
+#if (GIFLIB_MAJOR>=5)
|
|
+ EGifPutExtensionLeader(gif, APPLICATION_EXT_FUNC_CODE);
|
|
+ EGifPutExtensionBlock(gif, 11, "NETSCAPE2.0");
|
|
+ EGifPutExtensionBlock(gif, GIF_NETSCAPE_EXT_BYTES, &(netscape_ext_bytes[0]));
|
|
+ EGifPutExtensionTrailer(gif);
|
|
+#else
|
|
EGifPutExtensionFirst(gif, APPLICATION_EXT_FUNC_CODE, 11, "NETSCAPE2.0");
|
|
EGifPutExtensionLast(gif, 0, GIF_NETSCAPE_EXT_BYTES, &(netscape_ext_bytes[0]));
|
|
+#endif
|
|
}
|
|
|
|
+#if (GIFLIB_MAJOR>=5)
|
|
+ if( (errcode = EGifPutImageDesc(gif, 0, 0, im->width, im->height, false, (dont_save_cmap)?NULL:gif_cmap )) == GIF_ERROR )
|
|
+ ASIM_PrintGifError(errcode);
|
|
+#else
|
|
if( EGifPutImageDesc(gif, 0, 0, im->width, im->height, FALSE, (dont_save_cmap)?NULL:gif_cmap ) == GIF_ERROR )
|
|
ASIM_PrintGifError();
|
|
+#endif
|
|
}
|
|
}
|
|
free_gif_saved_images( images, count );
|
|
@@ -1172,24 +1223,46 @@
|
|
outfile = open_writeable_image_file(path);
|
|
|
|
if (outfile)
|
|
+ {
|
|
+#if (GIFLIB_MAJOR>=5)
|
|
+ gif = EGifOpenFileHandle(fileno(outfile), &errcode);
|
|
+ if (errcode != E_GIF_SUCCEEDED)
|
|
+ ASIM_PrintGifError(errcode);
|
|
+#else
|
|
if ((gif = EGifOpenFileHandle(fileno(outfile))) == NULL)
|
|
ASIM_PrintGifError();
|
|
+#endif
|
|
+ }
|
|
}
|
|
|
|
if( new_image && gif )
|
|
{
|
|
+#if (GIFLIB_MAJOR>=5)
|
|
+ if( (errcode = EGifPutScreenDesc(gif, im->width, im->height, cmap_size, 0, gif_cmap )) == GIF_ERROR )
|
|
+ ASIM_PrintGifError(errcode);
|
|
+#else
|
|
if( EGifPutScreenDesc(gif, im->width, im->height, cmap_size, 0, gif_cmap ) == GIF_ERROR )
|
|
ASIM_PrintGifError();
|
|
+#endif
|
|
|
|
EGifPutExtension(gif, 0xf9, GIF_GCE_BYTES, &(gce_bytes[0]));
|
|
|
|
+#if (GIFLIB_MAJOR>=5)
|
|
+ if( (errcode = EGifPutImageDesc(gif, 0, 0, im->width, im->height, false, NULL )) == GIF_ERROR )
|
|
+ ASIM_PrintGifError(errcode);
|
|
+#else
|
|
if( EGifPutImageDesc(gif, 0, 0, im->width, im->height, FALSE, NULL ) == GIF_ERROR )
|
|
ASIM_PrintGifError();
|
|
+#endif
|
|
}
|
|
|
|
if( gif_cmap )
|
|
{
|
|
+#if (GIFLIB_MAJOR>=5)
|
|
+ GifFreeMapObject(gif_cmap);
|
|
+#else
|
|
FreeMapObject(gif_cmap);
|
|
+#endif
|
|
gif_cmap = NULL ;
|
|
}
|
|
if( gif )
|
|
@@ -1203,12 +1276,23 @@
|
|
register int *src = mapped_im + x*y;
|
|
while( --x >= 0 )
|
|
row_pointer[x] = src[x] ;
|
|
+#if (GIFLIB_MAJOR>=5)
|
|
+ if( (errcode = EGifPutLine(gif, row_pointer, im->width)) == GIF_ERROR)
|
|
+ ASIM_PrintGifError(errcode);
|
|
+#else
|
|
if( EGifPutLine(gif, row_pointer, im->width) == GIF_ERROR)
|
|
ASIM_PrintGifError();
|
|
+#endif
|
|
}
|
|
free( row_pointer );
|
|
+#if (GIFLIB_MAJOR>=5)
|
|
+ EGifCloseFile(gif, &errcode);
|
|
+ if (errcode != E_GIF_SUCCEEDED)
|
|
+ ASIM_PrintGifError(errcode);
|
|
+#else
|
|
if (EGifCloseFile(gif) == GIF_ERROR)
|
|
ASIM_PrintGifError();
|
|
+#endif
|
|
gif = NULL;
|
|
}
|
|
free( mapped_im );
|
|
diff -Naurd libAfterImage-1.20.orig/import.c libAfterImage-1.20/import.c
|
|
--- libAfterImage-1.20.orig/import.c 2016-05-01 11:44:19.000000000 +0300
|
|
+++ libAfterImage-1.20/import.c 2016-05-02 11:01:58.979496755 +0300
|
|
@@ -2178,6 +2178,9 @@
|
|
int transparent = -1 ;
|
|
unsigned int y;
|
|
unsigned int width = 0, height = 0;
|
|
+#if (GIFLIB_MAJOR>=5)
|
|
+ int errcode;
|
|
+#endif
|
|
ColorMapObject *cmap = NULL ;
|
|
|
|
START_TIME(started);
|
|
@@ -2186,7 +2189,11 @@
|
|
|
|
if ((fp = open_image_file(path)) == NULL)
|
|
return NULL;
|
|
+#if (GIFLIB_MAJOR>=5)
|
|
+ if( (gif = open_gif_read(fp, &errcode)) != NULL )
|
|
+#else
|
|
if( (gif = open_gif_read(fp)) != NULL )
|
|
+#endif
|
|
{
|
|
SavedImage *sp = NULL ;
|
|
int count = 0 ;
|
|
@@ -2224,7 +2224,7 @@
|
|
((((unsigned int) sp->ExtensionBlocks[y].Bytes[GIF_GCE_DELAY_BYTE_HIGH])<<8)&0x00FF00);
|
|
}else if( sp->ExtensionBlocks[y].Function == APPLICATION_EXT_FUNC_CODE && sp->ExtensionBlocks[y].ByteCount == 11 ) /* application extension */
|
|
{
|
|
- if( strncmp(&(sp->ExtensionBlocks[y].Bytes[0]), "NETSCAPE2.0", 11 ) == 0 )
|
|
+ if( strncmp((const char*)(&sp->ExtensionBlocks[y].Bytes[0]), "NETSCAPE2.0", 11 ) == 0 )
|
|
{
|
|
++y ;
|
|
if( y < (unsigned int)sp->ExtensionBlockCount && sp->ExtensionBlocks[y].ByteCount == 3 )
|
|
@@ -2289,13 +2296,21 @@
|
|
}
|
|
free_gif_saved_images( sp, count );
|
|
}else if( status != GIF_OK )
|
|
+#if (GIFLIB_MAJOR>=5)
|
|
+ ASIM_PrintGifError(status);
|
|
+#else
|
|
ASIM_PrintGifError();
|
|
+#endif
|
|
else if( params->subimage == -1 )
|
|
show_error( "Image file \"%s\" does not have any valid image information.", path );
|
|
else
|
|
show_error( "Image file \"%s\" does not have subimage %d.", path, params->subimage );
|
|
|
|
+#if (GIFLIB_MAJOR>=5)
|
|
+ DGifCloseFile(gif, &errcode);
|
|
+#else
|
|
DGifCloseFile(gif);
|
|
+#endif
|
|
fclose( fp );
|
|
}
|
|
SHOW_TIME("image loading",started);
|
|
diff -Naurd libAfterImage-1.20.orig/ungif.c libAfterImage-1.20/ungif.c
|
|
--- libAfterImage-1.20.orig/ungif.c 2011-01-15 08:52:22.000000000 +0300
|
|
+++ libAfterImage-1.20/ungif.c 2016-05-02 16:03:57.590148737 +0300
|
|
@@ -75,13 +75,21 @@
|
|
if( sp )
|
|
{
|
|
if (sp->ImageDesc.ColorMap)
|
|
+#if (GIFLIB_MAJOR>=5)
|
|
+ GifFreeMapObject(sp->ImageDesc.ColorMap);
|
|
+#else
|
|
FreeMapObject(sp->ImageDesc.ColorMap);
|
|
+#endif
|
|
|
|
if (sp->RasterBits)
|
|
free((char *)sp->RasterBits);
|
|
|
|
if (sp->ExtensionBlocks)
|
|
+#if (GIFLIB_MAJOR>=5)
|
|
+ GifFreeExtensions(&sp->ExtensionBlockCount, &sp->ExtensionBlocks);
|
|
+#else
|
|
FreeExtension(sp);
|
|
+#endif
|
|
|
|
if( !reusable )
|
|
free( sp );
|
|
@@ -119,11 +127,19 @@
|
|
return ret;
|
|
}
|
|
|
|
+#if (GIFLIB_MAJOR>=5)
|
|
+GifFileType*
|
|
+open_gif_read( FILE *in_stream, int *errcode )
|
|
+{
|
|
+ return DGifOpen(in_stream, fread_gif, errcode);
|
|
+}
|
|
+#else
|
|
GifFileType*
|
|
open_gif_read( FILE *in_stream )
|
|
{
|
|
return DGifOpen(in_stream, fread_gif);
|
|
}
|
|
+#endif
|
|
|
|
int
|
|
get_gif_image_desc( GifFileType *gif, SavedImage *im )
|
|
@@ -151,7 +167,11 @@
|
|
memcpy( &(im->ImageDesc), &(gif->Image), sizeof(GifImageDesc));
|
|
if( gif->Image.ColorMap )
|
|
{
|
|
+#if (GIFLIB_MAJOR>=5)
|
|
+ im->ImageDesc.ColorMap = GifMakeMapObject(gif->Image.ColorMap->ColorCount, NULL);
|
|
+#else
|
|
im->ImageDesc.ColorMap = MakeMapObject(gif->Image.ColorMap->ColorCount, NULL);
|
|
+#endif
|
|
fseek( gif->UserData, start_pos+9, SEEK_SET );
|
|
fread( im->ImageDesc.ColorMap->Colors, 1, gif->Image.ColorMap->ColorCount*3, gif->UserData);
|
|
fseek( gif->UserData, end_pos, SEEK_SET );
|
|
@@ -166,6 +186,9 @@
|
|
{
|
|
GifRecordType RecordType;
|
|
GifByteType *ExtData;
|
|
+#if (GIFLIB_MAJOR>=5)
|
|
+ int ExtCode;
|
|
+#endif
|
|
SavedImage temp_save;
|
|
int curr_image = 0, ret_count = *ret_images ;
|
|
int status = GIF_OK;
|
|
@@ -197,13 +220,23 @@
|
|
break;
|
|
|
|
case EXTENSION_RECORD_TYPE:
|
|
+#if (GIFLIB_MAJOR>=5)
|
|
+ status = DGifGetExtension(gif,&ExtCode,&ExtData);
|
|
+#else
|
|
status = DGifGetExtension(gif,&temp_save.Function,&ExtData);
|
|
+#endif
|
|
while (ExtData != NULL && status == GIF_OK )
|
|
{
|
|
/* Create an extension block with our data */
|
|
+#if (GIFLIB_MAJOR>=5)
|
|
+ if ((status = GifAddExtensionBlock(&temp_save.ExtensionBlockCount, &temp_save.ExtensionBlocks,
|
|
+ ExtCode, sizeof(ExtData), ExtData)) == GIF_OK)
|
|
+ status = DGifGetExtension(gif,&ExtCode,&ExtData);
|
|
+#else
|
|
if ((status = AddExtensionBlock(&temp_save, ExtData[0], (char*)&(ExtData[1]))) == GIF_OK)
|
|
status = DGifGetExtensionNext(gif, &ExtData);
|
|
temp_save.Function = 0;
|
|
+#endif
|
|
}
|
|
break;
|
|
|
|
diff -Naurd libAfterImage-1.20.orig/ungif.h libAfterImage-1.20/ungif.h
|
|
--- libAfterImage-1.20.orig/ungif.h 2011-01-15 08:52:22.000000000 +0300
|
|
+++ libAfterImage-1.20/ungif.h 2016-05-02 10:57:59.715983533 +0300
|
|
@@ -7,11 +7,29 @@
|
|
extern "C" {
|
|
#endif
|
|
|
|
+#if ((GIFLIB_MAJOR==4) && (GIFLIB_MINOR>=2))
|
|
+static inline void PrintGifError(void) {
|
|
+ fprintf(stderr, "%s\n", GifErrorString());
|
|
+}
|
|
+#elif (GIFLIB_MAJOR>=5)
|
|
+static inline void PrintGifError(int code) {
|
|
+ fprintf(stderr, "%s\n", GifErrorString(code));
|
|
+}
|
|
+#endif
|
|
+
|
|
+#if (GIFLIB_MAJOR>=5)
|
|
+#ifdef __GNUC__
|
|
+#define ASIM_PrintGifError(code) do{ fprintf( stderr, "%s():%d:<%s> ",__FUNCTION__, __LINE__, path?path:"null" ); PrintGifError(code); }while(0)
|
|
+#else
|
|
+#define ASIM_PrintGifError(code) do{ PrintGifError(code); }while(0)
|
|
+#endif
|
|
+#else // (GIFLIB_MAJOR>=5)
|
|
#ifdef __GNUC__
|
|
#define ASIM_PrintGifError() do{ fprintf( stderr, "%s():%d:<%s> ",__FUNCTION__, __LINE__, path?path:"null" ); PrintGifError(); }while(0)
|
|
#else
|
|
#define ASIM_PrintGifError() do{ PrintGifError(); }while(0)
|
|
#endif
|
|
+#endif // (GIFLIB_MAJOR>=5)
|
|
|
|
#define GIF_GCE_DELAY_BYTE_LOW 1
|
|
#define GIF_GCE_DELAY_BYTE_HIGH 2
|
|
@@ -24,7 +42,11 @@
|
|
|
|
|
|
int fread_gif( GifFileType *gif, GifByteType* buf, int len );
|
|
+#if (GIFLIB_MAJOR>=5)
|
|
+GifFileType* open_gif_read( FILE *in_stream, int *errcode );
|
|
+#else
|
|
GifFileType* open_gif_read( FILE *in_stream );
|
|
+#endif
|
|
|
|
int get_gif_image_desc( GifFileType *gif, SavedImage *im );
|
|
|