1 /* 2 * Gif extracting routines - derived from libungif 3 * 4 * Portions Copyright 2006 Mike McCormack 5 * 6 * This library is free software; you can redistribute it and/or 7 * modify it under the terms of the GNU Lesser General Public 8 * License as published by the Free Software Foundation; either 9 * version 2.1 of the License, or (at your option) any later version. 10 * 11 * This library is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 * Lesser General Public License for more details. 15 * 16 * You should have received a copy of the GNU Lesser General Public 17 * License along with this library; if not, write to the Free Software 18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA 19 */ 20 21 /* 22 * Original copyright notice: 23 * 24 * The GIFLIB distribution is Copyright (c) 1997 Eric S. Raymond 25 * 26 * Permission is hereby granted, free of charge, to any person obtaining a copy 27 * of this software and associated documentation files (the "Software"), to deal 28 * in the Software without restriction, including without limitation the rights 29 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 30 * copies of the Software, and to permit persons to whom the Software is 31 * furnished to do so, subject to the following conditions: 32 * 33 * The above copyright notice and this permission notice shall be included in 34 * all copies or substantial portions of the Software. 35 */ 36 37 /****************************************************************************** 38 * In order to make life a little bit easier when using the GIF file format, 39 * this library was written, and which does all the dirty work... 40 * 41 * Written by Gershon Elber, Jun. 1989 42 * Hacks by Eric S. Raymond, Sep. 1992 43 ****************************************************************************** 44 * History: 45 * 14 Jun 89 - Version 1.0 by Gershon Elber. 46 * 3 Sep 90 - Version 1.1 by Gershon Elber (Support for Gif89, Unique names) 47 * 15 Sep 90 - Version 2.0 by Eric S. Raymond (Changes to support GIF slurp) 48 * 26 Jun 96 - Version 3.0 by Eric S. Raymond (Full GIF89 support) 49 * 17 Dec 98 - Version 4.0 by Toshio Kuratomi (Fix extension writing code) 50 *****************************************************************************/ 51 52 #ifndef _UNGIF_H_ 53 #define _UNGIF_H_ 1 54 55 #define GIF_ERROR 0 56 #define GIF_OK 1 57 58 #ifndef TRUE 59 #define TRUE 1 60 #endif /* TRUE */ 61 #ifndef FALSE 62 #define FALSE 0 63 #endif /* FALSE */ 64 65 #ifndef NULL 66 #define NULL 0 67 #endif /* NULL */ 68 69 #define GIF_STAMP "GIFVER" /* First chars in file - GIF stamp. */ 70 #define GIF_STAMP_LEN sizeof(GIF_STAMP) - 1 71 #define GIF_VERSION_POS 3 /* Version first character in stamp. */ 72 #define GIF87_STAMP "GIF87a" /* First chars in file - GIF stamp. */ 73 #define GIF89_STAMP "GIF89a" /* First chars in file - GIF stamp. */ 74 75 #define GIF_FILE_BUFFER_SIZE 16384 /* Files uses bigger buffers than usual. */ 76 77 typedef int GifBooleanType; 78 typedef unsigned char GifPixelType; 79 typedef unsigned char *GifRowType; 80 typedef unsigned char GifByteType; 81 typedef unsigned int GifPrefixType; 82 typedef int GifWord; 83 84 typedef struct GifColorType { 85 GifByteType Red, Green, Blue; 86 } GifColorType; 87 88 typedef struct ColorMapObject { 89 int ColorCount; 90 int BitsPerPixel; 91 int SortFlag; 92 GifColorType *Colors; 93 } ColorMapObject; 94 95 typedef struct GifImageDesc { 96 GifWord Left, Top, Width, Height, /* Current image dimensions. */ 97 Interlace; /* Sequential/Interlaced lines. */ 98 ColorMapObject *ColorMap; /* The local color map */ 99 } GifImageDesc; 100 101 /* This is the in-core version of an extension record */ 102 typedef struct { 103 int Function; /* Holds the type of the Extension block. */ 104 int ByteCount; 105 char *Bytes; 106 } ExtensionBlock; 107 108 typedef struct { 109 int Function; /* DEPRECATED: Use ExtensionBlocks[x].Function instead */ 110 int ExtensionBlockCount; 111 ExtensionBlock *ExtensionBlocks; 112 } Extensions; 113 114 typedef struct GifFileType { 115 GifWord SWidth, SHeight, /* Screen dimensions. */ 116 SColorResolution, /* How many colors can we generate? */ 117 SBackGroundColor, /* I hope you understand this one... */ 118 SAspectRatio; /* Pixel aspect ratio, in 1/64 units, starting at 1:4. */ 119 ColorMapObject *SColorMap; /* NULL if not exists. */ 120 Extensions Extensions; 121 int ImageCount; /* Number of current image */ 122 GifImageDesc Image; /* Block describing current image */ 123 struct SavedImage *SavedImages; /* Use this to accumulate file state */ 124 void *UserData; /* hook to attach user data (TVT) */ 125 void *Private; /* Don't mess with this! */ 126 } GifFileType; 127 128 typedef enum { 129 UNDEFINED_RECORD_TYPE, 130 SCREEN_DESC_RECORD_TYPE, 131 IMAGE_DESC_RECORD_TYPE, /* Begin with ',' */ 132 EXTENSION_RECORD_TYPE, /* Begin with '!' */ 133 TERMINATE_RECORD_TYPE /* Begin with ';' */ 134 } GifRecordType; 135 136 /* func type to read gif data from arbitrary sources (TVT) */ 137 typedef int (*InputFunc) (GifFileType *, GifByteType *, int); 138 139 /* GIF89 extension function codes */ 140 141 #define COMMENT_EXT_FUNC_CODE 0xfe /* comment */ 142 #define GRAPHICS_EXT_FUNC_CODE 0xf9 /* graphics control */ 143 #define PLAINTEXT_EXT_FUNC_CODE 0x01 /* plaintext */ 144 #define APPLICATION_EXT_FUNC_CODE 0xff /* application block */ 145 146 /* public interface to ungif.c */ 147 int DGifSlurp(GifFileType * GifFile) DECLSPEC_HIDDEN; 148 GifFileType *DGifOpen(void *userPtr, InputFunc readFunc) DECLSPEC_HIDDEN; 149 int DGifCloseFile(GifFileType * GifFile) DECLSPEC_HIDDEN; 150 151 #define D_GIF_ERR_OPEN_FAILED 101 /* And DGif possible errors. */ 152 #define D_GIF_ERR_READ_FAILED 102 153 #define D_GIF_ERR_NOT_GIF_FILE 103 154 #define D_GIF_ERR_NO_SCRN_DSCR 104 155 #define D_GIF_ERR_NO_IMAG_DSCR 105 156 #define D_GIF_ERR_NO_COLOR_MAP 106 157 #define D_GIF_ERR_WRONG_RECORD 107 158 #define D_GIF_ERR_DATA_TOO_BIG 108 159 #define D_GIF_ERR_NOT_ENOUGH_MEM 109 160 #define D_GIF_ERR_CLOSE_FAILED 110 161 #define D_GIF_ERR_NOT_READABLE 111 162 #define D_GIF_ERR_IMAGE_DEFECT 112 163 #define D_GIF_ERR_EOF_TOO_SOON 113 164 165 /****************************************************************************** 166 * Support for the in-core structures allocation (slurp mode). 167 *****************************************************************************/ 168 169 /* This holds an image header, its unpacked raster bits, and extensions */ 170 typedef struct SavedImage { 171 GifImageDesc ImageDesc; 172 unsigned char *RasterBits; 173 Extensions Extensions; 174 } SavedImage; 175 176 #endif /* _UNGIF_H_ */ 177