| /* |
| * 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_ */ |