xref: /aosp_15_r20/external/giflib/gif_lib.h (revision 324bb76b8d05e2a05aa88511fff61cf3f9ca5892)
1*324bb76bSAndroid Build Coastguard Worker /******************************************************************************
2*324bb76bSAndroid Build Coastguard Worker 
3*324bb76bSAndroid Build Coastguard Worker gif_lib.h - service library for decoding and encoding GIF images
4*324bb76bSAndroid Build Coastguard Worker 
5*324bb76bSAndroid Build Coastguard Worker SPDX-License-Identifier: MIT
6*324bb76bSAndroid Build Coastguard Worker 
7*324bb76bSAndroid Build Coastguard Worker *****************************************************************************/
8*324bb76bSAndroid Build Coastguard Worker 
9*324bb76bSAndroid Build Coastguard Worker #ifndef _GIF_LIB_H_
10*324bb76bSAndroid Build Coastguard Worker #define _GIF_LIB_H_ 1
11*324bb76bSAndroid Build Coastguard Worker 
12*324bb76bSAndroid Build Coastguard Worker #ifdef __cplusplus
13*324bb76bSAndroid Build Coastguard Worker extern "C" {
14*324bb76bSAndroid Build Coastguard Worker #endif /* __cplusplus */
15*324bb76bSAndroid Build Coastguard Worker 
16*324bb76bSAndroid Build Coastguard Worker #define GIFLIB_MAJOR 5
17*324bb76bSAndroid Build Coastguard Worker #define GIFLIB_MINOR 2
18*324bb76bSAndroid Build Coastguard Worker #define GIFLIB_RELEASE 1
19*324bb76bSAndroid Build Coastguard Worker 
20*324bb76bSAndroid Build Coastguard Worker #define GIF_ERROR 0
21*324bb76bSAndroid Build Coastguard Worker #define GIF_OK 1
22*324bb76bSAndroid Build Coastguard Worker 
23*324bb76bSAndroid Build Coastguard Worker #include <stdbool.h>
24*324bb76bSAndroid Build Coastguard Worker #include <stddef.h>
25*324bb76bSAndroid Build Coastguard Worker 
26*324bb76bSAndroid Build Coastguard Worker #define GIF_STAMP "GIFVER" /* First chars in file - GIF stamp.  */
27*324bb76bSAndroid Build Coastguard Worker #define GIF_STAMP_LEN sizeof(GIF_STAMP) - 1
28*324bb76bSAndroid Build Coastguard Worker #define GIF_VERSION_POS 3    /* Version first character in stamp. */
29*324bb76bSAndroid Build Coastguard Worker #define GIF87_STAMP "GIF87a" /* First chars in file - GIF stamp.  */
30*324bb76bSAndroid Build Coastguard Worker #define GIF89_STAMP "GIF89a" /* First chars in file - GIF stamp.  */
31*324bb76bSAndroid Build Coastguard Worker 
32*324bb76bSAndroid Build Coastguard Worker typedef unsigned char GifPixelType;
33*324bb76bSAndroid Build Coastguard Worker typedef unsigned char *GifRowType;
34*324bb76bSAndroid Build Coastguard Worker typedef unsigned char GifByteType;
35*324bb76bSAndroid Build Coastguard Worker typedef unsigned int GifPrefixType;
36*324bb76bSAndroid Build Coastguard Worker typedef int GifWord;
37*324bb76bSAndroid Build Coastguard Worker 
38*324bb76bSAndroid Build Coastguard Worker typedef struct GifColorType {
39*324bb76bSAndroid Build Coastguard Worker 	GifByteType Red, Green, Blue;
40*324bb76bSAndroid Build Coastguard Worker } GifColorType;
41*324bb76bSAndroid Build Coastguard Worker 
42*324bb76bSAndroid Build Coastguard Worker typedef struct ColorMapObject {
43*324bb76bSAndroid Build Coastguard Worker 	int ColorCount;
44*324bb76bSAndroid Build Coastguard Worker 	int BitsPerPixel;
45*324bb76bSAndroid Build Coastguard Worker 	bool SortFlag;
46*324bb76bSAndroid Build Coastguard Worker 	GifColorType *Colors; /* on malloc(3) heap */
47*324bb76bSAndroid Build Coastguard Worker } ColorMapObject;
48*324bb76bSAndroid Build Coastguard Worker 
49*324bb76bSAndroid Build Coastguard Worker typedef struct GifImageDesc {
50*324bb76bSAndroid Build Coastguard Worker 	GifWord Left, Top, Width, Height; /* Current image dimensions. */
51*324bb76bSAndroid Build Coastguard Worker 	bool Interlace;                   /* Sequential/Interlaced lines. */
52*324bb76bSAndroid Build Coastguard Worker 	ColorMapObject *ColorMap;         /* The local color map */
53*324bb76bSAndroid Build Coastguard Worker } GifImageDesc;
54*324bb76bSAndroid Build Coastguard Worker 
55*324bb76bSAndroid Build Coastguard Worker typedef struct ExtensionBlock {
56*324bb76bSAndroid Build Coastguard Worker 	int ByteCount;
57*324bb76bSAndroid Build Coastguard Worker 	GifByteType *Bytes;            /* on malloc(3) heap */
58*324bb76bSAndroid Build Coastguard Worker 	int Function;                  /* The block function code */
59*324bb76bSAndroid Build Coastguard Worker #define CONTINUE_EXT_FUNC_CODE 0x00    /* continuation subblock */
60*324bb76bSAndroid Build Coastguard Worker #define COMMENT_EXT_FUNC_CODE 0xfe     /* comment */
61*324bb76bSAndroid Build Coastguard Worker #define GRAPHICS_EXT_FUNC_CODE 0xf9    /* graphics control (GIF89) */
62*324bb76bSAndroid Build Coastguard Worker #define PLAINTEXT_EXT_FUNC_CODE 0x01   /* plaintext */
63*324bb76bSAndroid Build Coastguard Worker #define APPLICATION_EXT_FUNC_CODE 0xff /* application block (GIF89) */
64*324bb76bSAndroid Build Coastguard Worker } ExtensionBlock;
65*324bb76bSAndroid Build Coastguard Worker 
66*324bb76bSAndroid Build Coastguard Worker typedef struct SavedImage {
67*324bb76bSAndroid Build Coastguard Worker 	GifImageDesc ImageDesc;
68*324bb76bSAndroid Build Coastguard Worker 	GifByteType *RasterBits;         /* on malloc(3) heap */
69*324bb76bSAndroid Build Coastguard Worker 	int ExtensionBlockCount;         /* Count of extensions before image */
70*324bb76bSAndroid Build Coastguard Worker 	ExtensionBlock *ExtensionBlocks; /* Extensions before image */
71*324bb76bSAndroid Build Coastguard Worker } SavedImage;
72*324bb76bSAndroid Build Coastguard Worker 
73*324bb76bSAndroid Build Coastguard Worker typedef struct GifFileType {
74*324bb76bSAndroid Build Coastguard Worker 	GifWord SWidth, SHeight;   /* Size of virtual canvas */
75*324bb76bSAndroid Build Coastguard Worker 	GifWord SColorResolution;  /* How many colors can we generate? */
76*324bb76bSAndroid Build Coastguard Worker 	GifWord SBackGroundColor;  /* Background color for virtual canvas */
77*324bb76bSAndroid Build Coastguard Worker 	GifByteType AspectByte;    /* Used to compute pixel aspect ratio */
78*324bb76bSAndroid Build Coastguard Worker 	ColorMapObject *SColorMap; /* Global colormap, NULL if nonexistent. */
79*324bb76bSAndroid Build Coastguard Worker 	int ImageCount;            /* Number of current image (both APIs) */
80*324bb76bSAndroid Build Coastguard Worker 	GifImageDesc Image;        /* Current image (low-level API) */
81*324bb76bSAndroid Build Coastguard Worker 	SavedImage *SavedImages;   /* Image sequence (high-level API) */
82*324bb76bSAndroid Build Coastguard Worker 	int ExtensionBlockCount;   /* Count extensions past last image */
83*324bb76bSAndroid Build Coastguard Worker 	ExtensionBlock *ExtensionBlocks; /* Extensions past last image */
84*324bb76bSAndroid Build Coastguard Worker 	int Error;                       /* Last error condition reported */
85*324bb76bSAndroid Build Coastguard Worker 	void *UserData;                  /* hook to attach user data (TVT) */
86*324bb76bSAndroid Build Coastguard Worker 	void *Private;                   /* Don't mess with this! */
87*324bb76bSAndroid Build Coastguard Worker } GifFileType;
88*324bb76bSAndroid Build Coastguard Worker 
89*324bb76bSAndroid Build Coastguard Worker #define GIF_ASPECT_RATIO(n) ((n) + 15.0 / 64.0)
90*324bb76bSAndroid Build Coastguard Worker 
91*324bb76bSAndroid Build Coastguard Worker typedef enum {
92*324bb76bSAndroid Build Coastguard Worker 	UNDEFINED_RECORD_TYPE,
93*324bb76bSAndroid Build Coastguard Worker 	SCREEN_DESC_RECORD_TYPE,
94*324bb76bSAndroid Build Coastguard Worker 	IMAGE_DESC_RECORD_TYPE, /* Begin with ',' */
95*324bb76bSAndroid Build Coastguard Worker 	EXTENSION_RECORD_TYPE,  /* Begin with '!' */
96*324bb76bSAndroid Build Coastguard Worker 	TERMINATE_RECORD_TYPE   /* Begin with ';' */
97*324bb76bSAndroid Build Coastguard Worker } GifRecordType;
98*324bb76bSAndroid Build Coastguard Worker 
99*324bb76bSAndroid Build Coastguard Worker /* func type to read gif data from arbitrary sources (TVT) */
100*324bb76bSAndroid Build Coastguard Worker typedef int (*InputFunc)(GifFileType *, GifByteType *, int);
101*324bb76bSAndroid Build Coastguard Worker 
102*324bb76bSAndroid Build Coastguard Worker /* func type to write gif data to arbitrary targets.
103*324bb76bSAndroid Build Coastguard Worker  * Returns count of bytes written. (MRB)
104*324bb76bSAndroid Build Coastguard Worker  */
105*324bb76bSAndroid Build Coastguard Worker typedef int (*OutputFunc)(GifFileType *, const GifByteType *, int);
106*324bb76bSAndroid Build Coastguard Worker 
107*324bb76bSAndroid Build Coastguard Worker /******************************************************************************
108*324bb76bSAndroid Build Coastguard Worker  GIF89 structures
109*324bb76bSAndroid Build Coastguard Worker ******************************************************************************/
110*324bb76bSAndroid Build Coastguard Worker 
111*324bb76bSAndroid Build Coastguard Worker typedef struct GraphicsControlBlock {
112*324bb76bSAndroid Build Coastguard Worker 	int DisposalMode;
113*324bb76bSAndroid Build Coastguard Worker #define DISPOSAL_UNSPECIFIED 0 /* No disposal specified. */
114*324bb76bSAndroid Build Coastguard Worker #define DISPOSE_DO_NOT 1       /* Leave image in place */
115*324bb76bSAndroid Build Coastguard Worker #define DISPOSE_BACKGROUND 2   /* Set area too background color */
116*324bb76bSAndroid Build Coastguard Worker #define DISPOSE_PREVIOUS 3     /* Restore to previous content */
117*324bb76bSAndroid Build Coastguard Worker 	bool UserInputFlag;    /* User confirmation required before disposal */
118*324bb76bSAndroid Build Coastguard Worker 	int DelayTime;         /* pre-display delay in 0.01sec units */
119*324bb76bSAndroid Build Coastguard Worker 	int TransparentColor;  /* Palette index for transparency, -1 if none */
120*324bb76bSAndroid Build Coastguard Worker #define NO_TRANSPARENT_COLOR -1
121*324bb76bSAndroid Build Coastguard Worker } GraphicsControlBlock;
122*324bb76bSAndroid Build Coastguard Worker 
123*324bb76bSAndroid Build Coastguard Worker /******************************************************************************
124*324bb76bSAndroid Build Coastguard Worker  GIF encoding routines
125*324bb76bSAndroid Build Coastguard Worker ******************************************************************************/
126*324bb76bSAndroid Build Coastguard Worker 
127*324bb76bSAndroid Build Coastguard Worker /* Main entry points */
128*324bb76bSAndroid Build Coastguard Worker GifFileType *EGifOpenFileName(const char *GifFileName,
129*324bb76bSAndroid Build Coastguard Worker                               const bool GifTestExistence, int *Error);
130*324bb76bSAndroid Build Coastguard Worker GifFileType *EGifOpenFileHandle(const int GifFileHandle, int *Error);
131*324bb76bSAndroid Build Coastguard Worker GifFileType *EGifOpen(void *userPtr, OutputFunc writeFunc, int *Error);
132*324bb76bSAndroid Build Coastguard Worker int EGifSpew(GifFileType *GifFile);
133*324bb76bSAndroid Build Coastguard Worker const char *EGifGetGifVersion(GifFileType *GifFile); /* new in 5.x */
134*324bb76bSAndroid Build Coastguard Worker int EGifCloseFile(GifFileType *GifFile, int *ErrorCode);
135*324bb76bSAndroid Build Coastguard Worker 
136*324bb76bSAndroid Build Coastguard Worker #define E_GIF_SUCCEEDED 0
137*324bb76bSAndroid Build Coastguard Worker #define E_GIF_ERR_OPEN_FAILED 1 /* And EGif possible errors. */
138*324bb76bSAndroid Build Coastguard Worker #define E_GIF_ERR_WRITE_FAILED 2
139*324bb76bSAndroid Build Coastguard Worker #define E_GIF_ERR_HAS_SCRN_DSCR 3
140*324bb76bSAndroid Build Coastguard Worker #define E_GIF_ERR_HAS_IMAG_DSCR 4
141*324bb76bSAndroid Build Coastguard Worker #define E_GIF_ERR_NO_COLOR_MAP 5
142*324bb76bSAndroid Build Coastguard Worker #define E_GIF_ERR_DATA_TOO_BIG 6
143*324bb76bSAndroid Build Coastguard Worker #define E_GIF_ERR_NOT_ENOUGH_MEM 7
144*324bb76bSAndroid Build Coastguard Worker #define E_GIF_ERR_DISK_IS_FULL 8
145*324bb76bSAndroid Build Coastguard Worker #define E_GIF_ERR_CLOSE_FAILED 9
146*324bb76bSAndroid Build Coastguard Worker #define E_GIF_ERR_NOT_WRITEABLE 10
147*324bb76bSAndroid Build Coastguard Worker 
148*324bb76bSAndroid Build Coastguard Worker /* These are legacy.  You probably do not want to call them directly */
149*324bb76bSAndroid Build Coastguard Worker int EGifPutScreenDesc(GifFileType *GifFile, const int GifWidth,
150*324bb76bSAndroid Build Coastguard Worker                       const int GifHeight, const int GifColorRes,
151*324bb76bSAndroid Build Coastguard Worker                       const int GifBackGround,
152*324bb76bSAndroid Build Coastguard Worker                       const ColorMapObject *GifColorMap);
153*324bb76bSAndroid Build Coastguard Worker int EGifPutImageDesc(GifFileType *GifFile, const int GifLeft, const int GifTop,
154*324bb76bSAndroid Build Coastguard Worker                      const int GifWidth, const int GifHeight,
155*324bb76bSAndroid Build Coastguard Worker                      const bool GifInterlace,
156*324bb76bSAndroid Build Coastguard Worker                      const ColorMapObject *GifColorMap);
157*324bb76bSAndroid Build Coastguard Worker void EGifSetGifVersion(GifFileType *GifFile, const bool gif89);
158*324bb76bSAndroid Build Coastguard Worker int EGifPutLine(GifFileType *GifFile, GifPixelType *GifLine, int GifLineLen);
159*324bb76bSAndroid Build Coastguard Worker int EGifPutPixel(GifFileType *GifFile, const GifPixelType GifPixel);
160*324bb76bSAndroid Build Coastguard Worker int EGifPutComment(GifFileType *GifFile, const char *GifComment);
161*324bb76bSAndroid Build Coastguard Worker int EGifPutExtensionLeader(GifFileType *GifFile, const int GifExtCode);
162*324bb76bSAndroid Build Coastguard Worker int EGifPutExtensionBlock(GifFileType *GifFile, const int GifExtLen,
163*324bb76bSAndroid Build Coastguard Worker                           const void *GifExtension);
164*324bb76bSAndroid Build Coastguard Worker int EGifPutExtensionTrailer(GifFileType *GifFile);
165*324bb76bSAndroid Build Coastguard Worker int EGifPutExtension(GifFileType *GifFile, const int GifExtCode,
166*324bb76bSAndroid Build Coastguard Worker                      const int GifExtLen, const void *GifExtension);
167*324bb76bSAndroid Build Coastguard Worker int EGifPutCode(GifFileType *GifFile, int GifCodeSize,
168*324bb76bSAndroid Build Coastguard Worker                 const GifByteType *GifCodeBlock);
169*324bb76bSAndroid Build Coastguard Worker int EGifPutCodeNext(GifFileType *GifFile, const GifByteType *GifCodeBlock);
170*324bb76bSAndroid Build Coastguard Worker 
171*324bb76bSAndroid Build Coastguard Worker /******************************************************************************
172*324bb76bSAndroid Build Coastguard Worker  GIF decoding routines
173*324bb76bSAndroid Build Coastguard Worker ******************************************************************************/
174*324bb76bSAndroid Build Coastguard Worker 
175*324bb76bSAndroid Build Coastguard Worker /* Main entry points */
176*324bb76bSAndroid Build Coastguard Worker GifFileType *DGifOpenFileName(const char *GifFileName, int *Error);
177*324bb76bSAndroid Build Coastguard Worker GifFileType *DGifOpenFileHandle(int GifFileHandle, int *Error);
178*324bb76bSAndroid Build Coastguard Worker int DGifSlurp(GifFileType *GifFile);
179*324bb76bSAndroid Build Coastguard Worker GifFileType *DGifOpen(void *userPtr, InputFunc readFunc,
180*324bb76bSAndroid Build Coastguard Worker                       int *Error); /* new one (TVT) */
181*324bb76bSAndroid Build Coastguard Worker int DGifCloseFile(GifFileType *GifFile, int *ErrorCode);
182*324bb76bSAndroid Build Coastguard Worker 
183*324bb76bSAndroid Build Coastguard Worker #define D_GIF_SUCCEEDED 0
184*324bb76bSAndroid Build Coastguard Worker #define D_GIF_ERR_OPEN_FAILED 101 /* And DGif possible errors. */
185*324bb76bSAndroid Build Coastguard Worker #define D_GIF_ERR_READ_FAILED 102
186*324bb76bSAndroid Build Coastguard Worker #define D_GIF_ERR_NOT_GIF_FILE 103
187*324bb76bSAndroid Build Coastguard Worker #define D_GIF_ERR_NO_SCRN_DSCR 104
188*324bb76bSAndroid Build Coastguard Worker #define D_GIF_ERR_NO_IMAG_DSCR 105
189*324bb76bSAndroid Build Coastguard Worker #define D_GIF_ERR_NO_COLOR_MAP 106
190*324bb76bSAndroid Build Coastguard Worker #define D_GIF_ERR_WRONG_RECORD 107
191*324bb76bSAndroid Build Coastguard Worker #define D_GIF_ERR_DATA_TOO_BIG 108
192*324bb76bSAndroid Build Coastguard Worker #define D_GIF_ERR_NOT_ENOUGH_MEM 109
193*324bb76bSAndroid Build Coastguard Worker #define D_GIF_ERR_CLOSE_FAILED 110
194*324bb76bSAndroid Build Coastguard Worker #define D_GIF_ERR_NOT_READABLE 111
195*324bb76bSAndroid Build Coastguard Worker #define D_GIF_ERR_IMAGE_DEFECT 112
196*324bb76bSAndroid Build Coastguard Worker #define D_GIF_ERR_EOF_TOO_SOON 113
197*324bb76bSAndroid Build Coastguard Worker 
198*324bb76bSAndroid Build Coastguard Worker /* These are legacy.  You probably do not want to call them directly */
199*324bb76bSAndroid Build Coastguard Worker int DGifGetScreenDesc(GifFileType *GifFile);
200*324bb76bSAndroid Build Coastguard Worker int DGifGetRecordType(GifFileType *GifFile, GifRecordType *GifType);
201*324bb76bSAndroid Build Coastguard Worker int DGifGetImageHeader(GifFileType *GifFile);
202*324bb76bSAndroid Build Coastguard Worker int DGifGetImageDesc(GifFileType *GifFile);
203*324bb76bSAndroid Build Coastguard Worker int DGifGetLine(GifFileType *GifFile, GifPixelType *GifLine, int GifLineLen);
204*324bb76bSAndroid Build Coastguard Worker int DGifGetPixel(GifFileType *GifFile, GifPixelType GifPixel);
205*324bb76bSAndroid Build Coastguard Worker int DGifGetExtension(GifFileType *GifFile, int *GifExtCode,
206*324bb76bSAndroid Build Coastguard Worker                      GifByteType **GifExtension);
207*324bb76bSAndroid Build Coastguard Worker int DGifGetExtensionNext(GifFileType *GifFile, GifByteType **GifExtension);
208*324bb76bSAndroid Build Coastguard Worker int DGifGetCode(GifFileType *GifFile, int *GifCodeSize,
209*324bb76bSAndroid Build Coastguard Worker                 GifByteType **GifCodeBlock);
210*324bb76bSAndroid Build Coastguard Worker int DGifGetCodeNext(GifFileType *GifFile, GifByteType **GifCodeBlock);
211*324bb76bSAndroid Build Coastguard Worker int DGifGetLZCodes(GifFileType *GifFile, int *GifCode);
212*324bb76bSAndroid Build Coastguard Worker const char *DGifGetGifVersion(GifFileType *GifFile);
213*324bb76bSAndroid Build Coastguard Worker 
214*324bb76bSAndroid Build Coastguard Worker /******************************************************************************
215*324bb76bSAndroid Build Coastguard Worker  Error handling and reporting.
216*324bb76bSAndroid Build Coastguard Worker ******************************************************************************/
217*324bb76bSAndroid Build Coastguard Worker extern const char *GifErrorString(int ErrorCode); /* new in 2012 - ESR */
218*324bb76bSAndroid Build Coastguard Worker 
219*324bb76bSAndroid Build Coastguard Worker /*****************************************************************************
220*324bb76bSAndroid Build Coastguard Worker  Everything below this point is new after version 1.2, supporting `slurp
221*324bb76bSAndroid Build Coastguard Worker  mode' for doing I/O in two big belts with all the image-bashing in core.
222*324bb76bSAndroid Build Coastguard Worker ******************************************************************************/
223*324bb76bSAndroid Build Coastguard Worker 
224*324bb76bSAndroid Build Coastguard Worker /******************************************************************************
225*324bb76bSAndroid Build Coastguard Worker  Color map handling from gif_alloc.c
226*324bb76bSAndroid Build Coastguard Worker ******************************************************************************/
227*324bb76bSAndroid Build Coastguard Worker 
228*324bb76bSAndroid Build Coastguard Worker extern ColorMapObject *GifMakeMapObject(int ColorCount,
229*324bb76bSAndroid Build Coastguard Worker                                         const GifColorType *ColorMap);
230*324bb76bSAndroid Build Coastguard Worker extern void GifFreeMapObject(ColorMapObject *Object);
231*324bb76bSAndroid Build Coastguard Worker extern ColorMapObject *GifUnionColorMap(const ColorMapObject *ColorIn1,
232*324bb76bSAndroid Build Coastguard Worker                                         const ColorMapObject *ColorIn2,
233*324bb76bSAndroid Build Coastguard Worker                                         GifPixelType ColorTransIn2[]);
234*324bb76bSAndroid Build Coastguard Worker extern int GifBitSize(int n);
235*324bb76bSAndroid Build Coastguard Worker 
236*324bb76bSAndroid Build Coastguard Worker /******************************************************************************
237*324bb76bSAndroid Build Coastguard Worker  Support for the in-core structures allocation (slurp mode).
238*324bb76bSAndroid Build Coastguard Worker ******************************************************************************/
239*324bb76bSAndroid Build Coastguard Worker 
240*324bb76bSAndroid Build Coastguard Worker extern void GifApplyTranslation(SavedImage *Image,
241*324bb76bSAndroid Build Coastguard Worker                                 const GifPixelType Translation[]);
242*324bb76bSAndroid Build Coastguard Worker extern int GifAddExtensionBlock(int *ExtensionBlock_Count,
243*324bb76bSAndroid Build Coastguard Worker                                 ExtensionBlock **ExtensionBlocks, int Function,
244*324bb76bSAndroid Build Coastguard Worker                                 unsigned int Len, unsigned char ExtData[]);
245*324bb76bSAndroid Build Coastguard Worker extern void GifFreeExtensions(int *ExtensionBlock_Count,
246*324bb76bSAndroid Build Coastguard Worker                               ExtensionBlock **ExtensionBlocks);
247*324bb76bSAndroid Build Coastguard Worker extern SavedImage *GifMakeSavedImage(GifFileType *GifFile,
248*324bb76bSAndroid Build Coastguard Worker                                      const SavedImage *CopyFrom);
249*324bb76bSAndroid Build Coastguard Worker extern void GifFreeSavedImages(GifFileType *GifFile);
250*324bb76bSAndroid Build Coastguard Worker 
251*324bb76bSAndroid Build Coastguard Worker /******************************************************************************
252*324bb76bSAndroid Build Coastguard Worker  5.x functions for GIF89 graphics control blocks
253*324bb76bSAndroid Build Coastguard Worker ******************************************************************************/
254*324bb76bSAndroid Build Coastguard Worker 
255*324bb76bSAndroid Build Coastguard Worker int DGifExtensionToGCB(const size_t GifExtensionLength,
256*324bb76bSAndroid Build Coastguard Worker                        const GifByteType *GifExtension,
257*324bb76bSAndroid Build Coastguard Worker                        GraphicsControlBlock *GCB);
258*324bb76bSAndroid Build Coastguard Worker size_t EGifGCBToExtension(const GraphicsControlBlock *GCB,
259*324bb76bSAndroid Build Coastguard Worker                           GifByteType *GifExtension);
260*324bb76bSAndroid Build Coastguard Worker 
261*324bb76bSAndroid Build Coastguard Worker int DGifSavedExtensionToGCB(GifFileType *GifFile, int ImageIndex,
262*324bb76bSAndroid Build Coastguard Worker                             GraphicsControlBlock *GCB);
263*324bb76bSAndroid Build Coastguard Worker int EGifGCBToSavedExtension(const GraphicsControlBlock *GCB,
264*324bb76bSAndroid Build Coastguard Worker                             GifFileType *GifFile, int ImageIndex);
265*324bb76bSAndroid Build Coastguard Worker 
266*324bb76bSAndroid Build Coastguard Worker /******************************************************************************
267*324bb76bSAndroid Build Coastguard Worker  The library's internal utility font
268*324bb76bSAndroid Build Coastguard Worker ******************************************************************************/
269*324bb76bSAndroid Build Coastguard Worker 
270*324bb76bSAndroid Build Coastguard Worker #define GIF_FONT_WIDTH 8
271*324bb76bSAndroid Build Coastguard Worker #define GIF_FONT_HEIGHT 8
272*324bb76bSAndroid Build Coastguard Worker extern const unsigned char GifAsciiTable8x8[][GIF_FONT_WIDTH];
273*324bb76bSAndroid Build Coastguard Worker 
274*324bb76bSAndroid Build Coastguard Worker extern void GifDrawText8x8(SavedImage *Image, const int x, const int y,
275*324bb76bSAndroid Build Coastguard Worker                            const char *legend, const int color);
276*324bb76bSAndroid Build Coastguard Worker 
277*324bb76bSAndroid Build Coastguard Worker extern void GifDrawBox(SavedImage *Image, const int x, const int y, const int w,
278*324bb76bSAndroid Build Coastguard Worker                        const int d, const int color);
279*324bb76bSAndroid Build Coastguard Worker 
280*324bb76bSAndroid Build Coastguard Worker extern void GifDrawRectangle(SavedImage *Image, const int x, const int y,
281*324bb76bSAndroid Build Coastguard Worker                              const int w, const int d, const int color);
282*324bb76bSAndroid Build Coastguard Worker 
283*324bb76bSAndroid Build Coastguard Worker extern void GifDrawBoxedText8x8(SavedImage *Image, const int x, const int y,
284*324bb76bSAndroid Build Coastguard Worker                                 const char *legend, const int border,
285*324bb76bSAndroid Build Coastguard Worker                                 const int bg, const int fg);
286*324bb76bSAndroid Build Coastguard Worker 
287*324bb76bSAndroid Build Coastguard Worker #ifdef __cplusplus
288*324bb76bSAndroid Build Coastguard Worker }
289*324bb76bSAndroid Build Coastguard Worker #endif /* __cplusplus */
290*324bb76bSAndroid Build Coastguard Worker #endif /* _GIF_LIB_H */
291*324bb76bSAndroid Build Coastguard Worker 
292*324bb76bSAndroid Build Coastguard Worker /* end */
293