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:
parent
44b1d5a466
commit
701dec6df3
@ -27,8 +27,33 @@
|
|||||||
|
|
||||||
#include "recoil.h"
|
#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)
|
void Load_Recoil_Image(T_IO_Context *context)
|
||||||
{
|
{
|
||||||
|
RECOILVtbl vtbl = { RECOIL_ReadFile, context };
|
||||||
RECOIL *recoil;
|
RECOIL *recoil;
|
||||||
byte * file_content;
|
byte * file_content;
|
||||||
unsigned long file_length;
|
unsigned long file_length;
|
||||||
@ -68,6 +93,7 @@ void Load_Recoil_Image(T_IO_Context *context)
|
|||||||
recoil = RECOIL_New();
|
recoil = RECOIL_New();
|
||||||
if (recoil)
|
if (recoil)
|
||||||
{
|
{
|
||||||
|
*(const RECOILVtbl **)recoil = &vtbl; // set Vtable
|
||||||
if (RECOIL_Decode(recoil, context->File_name, file_content, file_length))
|
if (RECOIL_Decode(recoil, context->File_name, file_content, file_length))
|
||||||
{
|
{
|
||||||
int width, height;
|
int width, height;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user