return NULL;
}
- /* Start over if we are backtracking. */
- if (img->currentframe > frame)
- img->currentframe == -1;
-
if (img->flags & FLAG_OVERWRITE) {
/* Clear the slate. */
+ img->currentframe = -1;
memset(img->framedata[0], 0, img->width * img->height);
memset(img->mask[0], 0, img->width * img->height);
} else {
+ /* Start over if we are backtracking. */
+ if (img->currentframe > frame)
+ img->currentframe = -1;
+
/* We must have previous frame decoded to continue. */
if (frame > img->currentframe + 1) {
if (!lbximg_getframe(img, frame-1))
return img->framedata;
}
-int lbximg_loadpalette(FILE *f, struct lbx_colour palette[static 256])
+int
+lbximg_loadpalette(void *f, const struct lbx_file_ops *fops,
+ struct lbx_colour palette[static 256])
{
unsigned char entry[4];
int i;
for (i = 0; i < 256; i++) {
- if (fread(entry, sizeof entry, 1, f) != 1) {
+ if (fops->read(entry, sizeof entry, f) != sizeof entry) {
lbx_errno = (feof(f)) ? LBX_EEOF : -errno;
return -1;
}
return -1;
}
- palette[i] = (struct lbx_colour){
- .red = entry[1] << 2,
- .green = entry[2] << 2,
- .blue = entry[3] << 2,
+ palette[i] = (struct lbx_colour) {
+ .red = entry[1] << 2,
+ .green = entry[2] << 2,
+ .blue = entry[3] << 2,
+ .active = 1,
};
}
for (i = 0; i < img->palcount; i++) {
rc = img->fops->read(entry, sizeof entry, img->f);
-
if (rc < sizeof entry) {
goto readerr;
}
}
palette[img->palstart + i] = (struct lbx_colour){
- .red = entry[1] << 2,
- .green = entry[2] << 2,
- .blue = entry[3] << 2,
+ .red = entry[1] << 2,
+ .green = entry[2] << 2,
+ .blue = entry[3] << 2,
+ .active = 1,
};
}