dinput: Avoid signed-unsigned integer comparisons.
[wine] / dlls / windowscodecs / ungif.h
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_ */