2 * Gif extracting routines - derived from libungif
4 * Portions Copyright 2006 Mike McCormack
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.
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.
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
22 * Original copyright notice:
24 * The GIFLIB distribution is Copyright (c) 1997 Eric S. Raymond
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:
33 * The above copyright notice and this permission notice shall be included in
34 * all copies or substantial portions of the Software.
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...
41 * Written by Gershon Elber, Jun. 1989
42 * Hacks by Eric S. Raymond, Sep. 1992
43 ******************************************************************************
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 *****************************************************************************/
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. */
75 #define GIF_FILE_BUFFER_SIZE 16384 /* Files uses bigger buffers than usual. */
77 typedef int GifBooleanType
;
78 typedef unsigned char GifPixelType
;
79 typedef unsigned char *GifRowType
;
80 typedef unsigned char GifByteType
;
81 typedef unsigned int GifPrefixType
;
84 typedef struct GifColorType
{
85 GifByteType Red
, Green
, Blue
;
88 typedef struct ColorMapObject
{
94 typedef struct GifImageDesc
{
95 GifWord Left
, Top
, Width
, Height
, /* Current image dimensions. */
96 Interlace
; /* Sequential/Interlaced lines. */
97 ColorMapObject
*ColorMap
; /* The local color map */
100 typedef struct GifFileType
{
101 GifWord SWidth
, SHeight
, /* Screen dimensions. */
102 SColorResolution
, /* How many colors can we generate? */
103 SBackGroundColor
, /* I hope you understand this one... */
104 SAspectRatio
; /* Pixel aspect ratio, in 1/64 units, starting at 1:4. */
105 ColorMapObject
*SColorMap
; /* NULL if not exists. */
106 int ImageCount
; /* Number of current image */
107 GifImageDesc Image
; /* Block describing current image */
108 struct SavedImage
*SavedImages
; /* Use this to accumulate file state */
109 void *UserData
; /* hook to attach user data (TVT) */
110 void *Private
; /* Don't mess with this! */
114 UNDEFINED_RECORD_TYPE
,
115 SCREEN_DESC_RECORD_TYPE
,
116 IMAGE_DESC_RECORD_TYPE
, /* Begin with ',' */
117 EXTENSION_RECORD_TYPE
, /* Begin with '!' */
118 TERMINATE_RECORD_TYPE
/* Begin with ';' */
121 /* func type to read gif data from arbitrary sources (TVT) */
122 typedef int (*InputFunc
) (GifFileType
*, GifByteType
*, int);
124 /* GIF89 extension function codes */
126 #define COMMENT_EXT_FUNC_CODE 0xfe /* comment */
127 #define GRAPHICS_EXT_FUNC_CODE 0xf9 /* graphics control */
128 #define PLAINTEXT_EXT_FUNC_CODE 0x01 /* plaintext */
129 #define APPLICATION_EXT_FUNC_CODE 0xff /* application block */
131 /* public interface to ungif.c */
132 int DGifSlurp(GifFileType
* GifFile
);
133 GifFileType
*DGifOpen(void *userPtr
, InputFunc readFunc
);
134 int DGifCloseFile(GifFileType
* GifFile
);
136 #define D_GIF_ERR_OPEN_FAILED 101 /* And DGif possible errors. */
137 #define D_GIF_ERR_READ_FAILED 102
138 #define D_GIF_ERR_NOT_GIF_FILE 103
139 #define D_GIF_ERR_NO_SCRN_DSCR 104
140 #define D_GIF_ERR_NO_IMAG_DSCR 105
141 #define D_GIF_ERR_NO_COLOR_MAP 106
142 #define D_GIF_ERR_WRONG_RECORD 107
143 #define D_GIF_ERR_DATA_TOO_BIG 108
144 #define D_GIF_ERR_NOT_ENOUGH_MEM 109
145 #define D_GIF_ERR_CLOSE_FAILED 110
146 #define D_GIF_ERR_NOT_READABLE 111
147 #define D_GIF_ERR_IMAGE_DEFECT 112
148 #define D_GIF_ERR_EOF_TOO_SOON 113
150 /******************************************************************************
151 * Support for the in-core structures allocation (slurp mode).
152 *****************************************************************************/
154 /* This is the in-core version of an extension record */
158 int Function
; /* Holds the type of the Extension block. */
161 /* This holds an image header, its unpacked raster bits, and extensions */
162 typedef struct SavedImage
{
163 GifImageDesc ImageDesc
;
164 unsigned char *RasterBits
;
165 int Function
; /* DEPRECATED: Use ExtensionBlocks[x].Function instead */
166 int ExtensionBlockCount
;
167 ExtensionBlock
*ExtensionBlocks
;
170 #endif /* _UNGIF_H_ */