rev |
line source |
pascal@23056
|
1 --- xplanet-1.3.0.orig/src/libimage/gif.c 2006-03-25 14:50:51.000000000 -0800
|
pascal@23056
|
2 +++ xplanet-1.3.0/src/libimage/gif.c 2015-01-30 21:01:52.000000000 -0800
|
pascal@23056
|
3 @@ -28,6 +28,18 @@
|
pascal@23056
|
4 distribution.
|
pascal@23056
|
5 */
|
pascal@23056
|
6
|
pascal@23056
|
7 +#if defined(GIFLIB_MAJOR) && GIFLIB_MAJOR >= 5
|
pascal@23056
|
8 +void
|
pascal@23056
|
9 +PrintGifError(int ErrorCode) {
|
pascal@23056
|
10 + const char *Err = GifErrorString(ErrorCode);
|
pascal@23056
|
11 + if (Err != NULL)
|
pascal@23056
|
12 + fprintf(stderr, "GIF-LIB error: %s.\n", Err);
|
pascal@23056
|
13 + else
|
pascal@23056
|
14 + fprintf(stderr, "GIF-LIB undefined error %d.\n", ErrorCode);
|
pascal@23056
|
15 +}
|
pascal@23056
|
16 +#endif
|
pascal@23056
|
17 +
|
pascal@23056
|
18 +
|
pascal@23056
|
19 int
|
pascal@23056
|
20 read_gif(const char *filename, int *width, int *height, unsigned char **rgb)
|
pascal@23056
|
21 {
|
pascal@23056
|
22 @@ -41,12 +53,23 @@
|
pascal@23056
|
23 int i, j;
|
pascal@23056
|
24 int color_index;
|
pascal@23056
|
25 unsigned char *ptr = NULL;
|
pascal@23056
|
26 -
|
pascal@23056
|
27 +#if defined(GIFLIB_MAJOR) && GIFLIB_MAJOR >= 5
|
pascal@23056
|
28 + int err;
|
pascal@23056
|
29 +#endif
|
pascal@23056
|
30 +
|
pascal@23056
|
31 +#if defined(GIFLIB_MAJOR) && GIFLIB_MAJOR >= 5
|
pascal@23056
|
32 + infile = DGifOpenFileName(filename, NULL);
|
pascal@23056
|
33 +#else
|
pascal@23056
|
34 infile = DGifOpenFileName(filename);
|
pascal@23056
|
35 +#endif
|
pascal@23056
|
36
|
pascal@23056
|
37 if (infile == NULL)
|
pascal@23056
|
38 {
|
pascal@23056
|
39 +#if defined(GIFLIB_MAJOR) && GIFLIB_MAJOR >= 5
|
pascal@23056
|
40 + PrintGifError(infile->Error);
|
pascal@23056
|
41 +#else
|
pascal@23056
|
42 PrintGifError();
|
pascal@23056
|
43 +#endif
|
pascal@23056
|
44 return(0);
|
pascal@23056
|
45 }
|
pascal@23056
|
46
|
pascal@23056
|
47 @@ -54,7 +77,11 @@
|
pascal@23056
|
48 {
|
pascal@23056
|
49 if (DGifGetRecordType(infile, &record_type) == GIF_ERROR)
|
pascal@23056
|
50 {
|
pascal@23056
|
51 +#if defined(GIFLIB_MAJOR) && GIFLIB_MAJOR >= 5
|
pascal@23056
|
52 + PrintGifError(infile->Error);
|
pascal@23056
|
53 +#else
|
pascal@23056
|
54 PrintGifError();
|
pascal@23056
|
55 +#endif
|
pascal@23056
|
56 return(0);
|
pascal@23056
|
57 }
|
pascal@23056
|
58
|
pascal@23056
|
59 @@ -63,7 +90,11 @@
|
pascal@23056
|
60 case IMAGE_DESC_RECORD_TYPE:
|
pascal@23056
|
61 if (DGifGetImageDesc(infile) == GIF_ERROR)
|
pascal@23056
|
62 {
|
pascal@23056
|
63 +#if defined(GIFLIB_MAJOR) && GIFLIB_MAJOR >= 5
|
pascal@23056
|
64 + PrintGifError(infile->Error);
|
pascal@23056
|
65 +#else
|
pascal@23056
|
66 PrintGifError();
|
pascal@23056
|
67 +#endif
|
pascal@23056
|
68 return(0);
|
pascal@23056
|
69 }
|
pascal@23056
|
70
|
pascal@23056
|
71 @@ -107,14 +138,22 @@
|
pascal@23056
|
72 GifByteType *ext;
|
pascal@23056
|
73 if (DGifGetExtension(infile, &ext_code, &ext) == GIF_ERROR)
|
pascal@23056
|
74 {
|
pascal@23056
|
75 +#if defined(GIFLIB_MAJOR) && GIFLIB_MAJOR >= 5
|
pascal@23056
|
76 + PrintGifError(infile->Error);
|
pascal@23056
|
77 +#else
|
pascal@23056
|
78 PrintGifError();
|
pascal@23056
|
79 +#endif
|
pascal@23056
|
80 return(0);
|
pascal@23056
|
81 }
|
pascal@23056
|
82 while (ext != NULL)
|
pascal@23056
|
83 {
|
pascal@23056
|
84 if (DGifGetExtensionNext(infile, &ext) == GIF_ERROR)
|
pascal@23056
|
85 {
|
pascal@23056
|
86 +#if defined(GIFLIB_MAJOR) && GIFLIB_MAJOR >= 5
|
pascal@23056
|
87 + PrintGifError(infile->Error);
|
pascal@23056
|
88 +#else
|
pascal@23056
|
89 PrintGifError();
|
pascal@23056
|
90 +#endif
|
pascal@23056
|
91 return(0);
|
pascal@23056
|
92 }
|
pascal@23056
|
93 }
|
pascal@23056
|
94 @@ -154,7 +193,11 @@
|
pascal@23056
|
95
|
pascal@23056
|
96 free(buffer);
|
pascal@23056
|
97
|
pascal@23056
|
98 +#if defined(GIFLIB_MAJOR) && GIFLIB_MAJOR >= 5 && GIFLIB_MINOR >= 1
|
pascal@23056
|
99 + DGifCloseFile(infile, NULL);
|
pascal@23056
|
100 +#else
|
pascal@23056
|
101 DGifCloseFile(infile);
|
pascal@23056
|
102 +#endif
|
pascal@23056
|
103 return(1);
|
pascal@23056
|
104 }
|
pascal@23056
|
105
|
pascal@23056
|
106 @@ -166,6 +209,9 @@
|
pascal@23056
|
107 GifByteType *red, *green, *blue, *buffer, *ptr;
|
pascal@23056
|
108 GifFileType *outfile;
|
pascal@23056
|
109 ColorMapObject *colormap;
|
pascal@23056
|
110 +#if defined(GIFLIB_MAJOR) && GIFLIB_MAJOR >= 5
|
pascal@23056
|
111 + int err;
|
pascal@23056
|
112 +#endif
|
pascal@23056
|
113
|
pascal@23056
|
114 red = malloc(width * height * sizeof(GifByteType));
|
pascal@23056
|
115 green = malloc(width * height * sizeof(GifByteType));
|
pascal@23056
|
116 @@ -178,7 +224,11 @@
|
pascal@23056
|
117 return(0);
|
pascal@23056
|
118 }
|
pascal@23056
|
119
|
pascal@23056
|
120 +#if defined(GIFLIB_MAJOR) && GIFLIB_MAJOR >= 5
|
pascal@23056
|
121 + colormap = GifMakeMapObject(colormap_size, NULL);
|
pascal@23056
|
122 +#else
|
pascal@23056
|
123 colormap = MakeMapObject(colormap_size, NULL);
|
pascal@23056
|
124 +#endif
|
pascal@23056
|
125
|
pascal@23056
|
126 for (i = 0; i < width * height; i++)
|
pascal@23056
|
127 {
|
pascal@23056
|
128 @@ -187,10 +237,17 @@
|
pascal@23056
|
129 blue[i] = (GifByteType) rgb[3*i+2];
|
pascal@23056
|
130 }
|
pascal@23056
|
131
|
pascal@23056
|
132 +#if defined(GIFLIB_MAJOR) && GIFLIB_MAJOR >= 5
|
pascal@23056
|
133 + if (GifQuantizeBuffer(width, height, &colormap_size, red, green, blue,
|
pascal@23056
|
134 + buffer, colormap->Colors) == GIF_ERROR)
|
pascal@23056
|
135 + {
|
pascal@23056
|
136 + PrintGifError(-1);
|
pascal@23056
|
137 +#else
|
pascal@23056
|
138 if (QuantizeBuffer(width, height, &colormap_size, red, green, blue,
|
pascal@23056
|
139 buffer, colormap->Colors) == GIF_ERROR)
|
pascal@23056
|
140 {
|
pascal@23056
|
141 PrintGifError();
|
pascal@23056
|
142 +#endif
|
pascal@23056
|
143 return(0);
|
pascal@23056
|
144 }
|
pascal@23056
|
145
|
pascal@23056
|
146 @@ -198,24 +255,41 @@
|
pascal@23056
|
147 free(green);
|
pascal@23056
|
148 free(blue);
|
pascal@23056
|
149
|
pascal@23056
|
150 +#if defined(GIFLIB_MAJOR) && GIFLIB_MAJOR >= 5
|
pascal@23056
|
151 + outfile = EGifOpenFileName((char *) filename, 0, &err);
|
pascal@23056
|
152 + if (outfile == NULL)
|
pascal@23056
|
153 + {
|
pascal@23056
|
154 + PrintGifError(err);
|
pascal@23056
|
155 + return(0);
|
pascal@23056
|
156 + }
|
pascal@23056
|
157 +#else
|
pascal@23056
|
158 outfile = EGifOpenFileName((char *) filename, FALSE);
|
pascal@23056
|
159 if (outfile == NULL)
|
pascal@23056
|
160 {
|
pascal@23056
|
161 PrintGifError();
|
pascal@23056
|
162 return(0);
|
pascal@23056
|
163 }
|
pascal@23056
|
164 +#endif
|
pascal@23056
|
165
|
pascal@23056
|
166 if (EGifPutScreenDesc(outfile, width, height, colormap_size, 0, colormap)
|
pascal@23056
|
167 == GIF_ERROR)
|
pascal@23056
|
168 {
|
pascal@23056
|
169 +#if defined(GIFLIB_MAJOR) && GIFLIB_MAJOR >= 5
|
pascal@23056
|
170 + PrintGifError(outfile->Error);
|
pascal@23056
|
171 +#else
|
pascal@23056
|
172 PrintGifError();
|
pascal@23056
|
173 +#endif
|
pascal@23056
|
174 return(0);
|
pascal@23056
|
175 }
|
pascal@23056
|
176
|
pascal@23056
|
177 - if (EGifPutImageDesc(outfile, 0, 0, width, height, FALSE, NULL)
|
pascal@23056
|
178 + if (EGifPutImageDesc(outfile, 0, 0, width, height, 0, NULL)
|
pascal@23056
|
179 == GIF_ERROR)
|
pascal@23056
|
180 {
|
pascal@23056
|
181 +#if defined(GIFLIB_MAJOR) && GIFLIB_MAJOR >= 5
|
pascal@23056
|
182 + PrintGifError(outfile->Error);
|
pascal@23056
|
183 +#else
|
pascal@23056
|
184 PrintGifError();
|
pascal@23056
|
185 +#endif
|
pascal@23056
|
186 return(0);
|
pascal@23056
|
187 }
|
pascal@23056
|
188
|
pascal@23056
|
189 @@ -224,7 +298,11 @@
|
pascal@23056
|
190 {
|
pascal@23056
|
191 if (EGifPutLine(outfile, ptr, width) == GIF_ERROR)
|
pascal@23056
|
192 {
|
pascal@23056
|
193 +#if defined(GIFLIB_MAJOR) && GIFLIB_MAJOR >= 5
|
pascal@23056
|
194 + PrintGifError(outfile->Error);
|
pascal@23056
|
195 +#else
|
pascal@23056
|
196 PrintGifError();
|
pascal@23056
|
197 +#endif
|
pascal@23056
|
198 return(0);
|
pascal@23056
|
199 }
|
pascal@23056
|
200 ptr += width;
|
pascal@23056
|
201 @@ -232,8 +310,13 @@
|
pascal@23056
|
202
|
pascal@23056
|
203 EGifSpew(outfile);
|
pascal@23056
|
204
|
pascal@23056
|
205 +#if defined(GIFLIB_MAJOR) && GIFLIB_MAJOR >= 5 && GIFLIB_MINOR >= 1
|
pascal@23056
|
206 + if (EGifCloseFile(outfile, &err) == GIF_ERROR)
|
pascal@23056
|
207 + PrintGifError(err);
|
pascal@23056
|
208 +#else
|
pascal@23056
|
209 if (EGifCloseFile(outfile) == GIF_ERROR)
|
pascal@23056
|
210 PrintGifError();
|
pascal@23056
|
211 +#endif
|
pascal@23056
|
212
|
pascal@23056
|
213 free(buffer);
|
pascal@23056
|
214
|