Load_Recoil_Image(): Read image in multiple files with RECOIL

add Recoil virtual readFile() method to allow loading of Companion files
This commit is contained in:
Thomas Bernard 2018-03-02 03:09:19 +01:00
parent 44b1d5a466
commit 701dec6df3

View File

@ -27,8 +27,33 @@
#include "recoil.h"
// RECOIL Vtable with our private data added
typedef struct {
int (*readFile)(RECOIL *, const char *filename, unsigned char *content, int content_length);
T_IO_Context *context;
}
RECOILVtbl;
static int RECOIL_ReadFile(RECOIL * recoil, const char * filename, unsigned char * content, int content_length)
{
FILE * f;
const char * ext;
ext = strrchr(filename, '.'); // extract back extension from filename
if (ext == NULL)
return -1;
ext++;
f = Open_file_read_with_alternate_ext((*((const RECOILVtbl **)recoil))->context, ext);
if (f == NULL)
return -1;
content_length = fread(content, 1, content_length, f);
fclose(f);
return content_length;
}
void Load_Recoil_Image(T_IO_Context *context)
{
RECOILVtbl vtbl = { RECOIL_ReadFile, context };
RECOIL *recoil;
byte * file_content;
unsigned long file_length;
@ -68,6 +93,7 @@ void Load_Recoil_Image(T_IO_Context *context)
recoil = RECOIL_New();
if (recoil)
{
*(const RECOILVtbl **)recoil = &vtbl; // set Vtable
if (RECOIL_Decode(recoil, context->File_name, file_content, file_length))
{
int width, height;