/* * Gif extracting routines - derived from libungif * * Portions Copyright 2006 Mike McCormack * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ /* * Original copyright notice: * * The GIFLIB distribution is Copyright (c) 1997 Eric S. Raymond * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. */ /****************************************************************************** * In order to make life a little bit easier when using the GIF file format, * this library was written, and which does all the dirty work... * * Written by Gershon Elber, Jun. 1989 * Hacks by Eric S. Raymond, Sep. 1992 ****************************************************************************** * History: * 14 Jun 89 - Version 1.0 by Gershon Elber. * 3 Sep 90 - Version 1.1 by Gershon Elber (Support for Gif89, Unique names) * 15 Sep 90 - Version 2.0 by Eric S. Raymond (Changes to support GIF slurp) * 26 Jun 96 - Version 3.0 by Eric S. Raymond (Full GIF89 support) * 17 Dec 98 - Version 4.0 by Toshio Kuratomi (Fix extension writing code) *****************************************************************************/ #ifndef _UNGIF_H_ #define _UNGIF_H_ 1 #define GIF_ERROR 0 #define GIF_OK 1 #ifndef TRUE #define TRUE 1 #endif /* TRUE */ #ifndef FALSE #define FALSE 0 #endif /* FALSE */ #ifndef NULL #define NULL 0 #endif /* NULL */ #define GIF_STAMP "GIFVER" /* First chars in file - GIF stamp. */ #define GIF_STAMP_LEN sizeof(GIF_STAMP) - 1 #define GIF_VERSION_POS 3 /* Version first character in stamp. */ #define GIF87_STAMP "GIF87a" /* First chars in file - GIF stamp. */ #define GIF89_STAMP "GIF89a" /* First chars in file - GIF stamp. */ #define GIF_FILE_BUFFER_SIZE 16384 /* Files uses bigger buffers than usual. */ typedef int GifBooleanType; typedef unsigned char GifPixelType; typedef unsigned char *GifRowType; typedef unsigned char GifByteType; typedef unsigned int GifPrefixType; typedef int GifWord; typedef struct GifColorType { GifByteType Red, Green, Blue; } GifColorType; typedef struct ColorMapObject { int ColorCount; int BitsPerPixel; int SortFlag; GifColorType *Colors; } ColorMapObject; typedef struct GifImageDesc { GifWord Left, Top, Width, Height, /* Current image dimensions. */ Interlace; /* Sequential/Interlaced lines. */ ColorMapObject *ColorMap; /* The local color map */ } GifImageDesc; /* This is the in-core version of an extension record */ typedef struct { int Function; /* Holds the type of the Extension block. */ int ByteCount; char *Bytes; } ExtensionBlock; typedef struct { int Function; /* DEPRECATED: Use ExtensionBlocks[x].Function instead */ int ExtensionBlockCount; ExtensionBlock *ExtensionBlocks; } Extensions; typedef struct GifFileType { GifWord SWidth, SHeight, /* Screen dimensions. */ SColorResolution, /* How many colors can we generate? */ SBackGroundColor, /* I hope you understand this one... */ SAspectRatio; /* Pixel aspect ratio, in 1/64 units, starting at 1:4. */ ColorMapObject *SColorMap; /* NULL if not exists. */ Extensions Extensions; int ImageCount; /* Number of current image */ GifImageDesc Image; /* Block describing current image */ struct SavedImage *SavedImages; /* Use this to accumulate file state */ void *UserData; /* hook to attach user data (TVT) */ void *Private; /* Don't mess with this! */ } GifFileType; typedef enum { UNDEFINED_RECORD_TYPE, SCREEN_DESC_RECORD_TYPE, IMAGE_DESC_RECORD_TYPE, /* Begin with ',' */ EXTENSION_RECORD_TYPE, /* Begin with '!' */ TERMINATE_RECORD_TYPE /* Begin with ';' */ } GifRecordType; /* func type to read gif data from arbitrary sources (TVT) */ typedef int (*InputFunc) (GifFileType *, GifByteType *, int); /* GIF89 extension function codes */ #define COMMENT_EXT_FUNC_CODE 0xfe /* comment */ #define GRAPHICS_EXT_FUNC_CODE 0xf9 /* graphics control */ #define PLAINTEXT_EXT_FUNC_CODE 0x01 /* plaintext */ #define APPLICATION_EXT_FUNC_CODE 0xff /* application block */ /* public interface to ungif.c */ int DGifSlurp(GifFileType * GifFile) DECLSPEC_HIDDEN; GifFileType *DGifOpen(void *userPtr, InputFunc readFunc) DECLSPEC_HIDDEN; int DGifCloseFile(GifFileType * GifFile) DECLSPEC_HIDDEN; #define D_GIF_ERR_OPEN_FAILED 101 /* And DGif possible errors. */ #define D_GIF_ERR_READ_FAILED 102 #define D_GIF_ERR_NOT_GIF_FILE 103 #define D_GIF_ERR_NO_SCRN_DSCR 104 #define D_GIF_ERR_NO_IMAG_DSCR 105 #define D_GIF_ERR_NO_COLOR_MAP 106 #define D_GIF_ERR_WRONG_RECORD 107 #define D_GIF_ERR_DATA_TOO_BIG 108 #define D_GIF_ERR_NOT_ENOUGH_MEM 109 #define D_GIF_ERR_CLOSE_FAILED 110 #define D_GIF_ERR_NOT_READABLE 111 #define D_GIF_ERR_IMAGE_DEFECT 112 #define D_GIF_ERR_EOF_TOO_SOON 113 /****************************************************************************** * Support for the in-core structures allocation (slurp mode). *****************************************************************************/ /* This holds an image header, its unpacked raster bits, and extensions */ typedef struct SavedImage { GifImageDesc ImageDesc; unsigned char *RasterBits; Extensions Extensions; } SavedImage; #endif /* _UNGIF_H_ */