From 2b29c4dcde7e673d50cfbde6eb41810c3f9ec21b Mon Sep 17 00:00:00 2001 From: James Shaw Date: Sun, 23 Mar 2008 23:38:36 +0000 Subject: Change example to use broken memory loader svn path=/import/jshaw/libsprite/; revision=10015 --- trunk/example.c | 39 +++++++++++++++++++++++++++++++++------ 1 file changed, 33 insertions(+), 6 deletions(-) diff --git a/trunk/example.c b/trunk/example.c index 7325c4a..c42756d 100644 --- a/trunk/example.c +++ b/trunk/example.c @@ -32,6 +32,29 @@ void sdl_blank(SDL_Surface* surface) } } +int load_file_to_memory(const char *filename, uint8_t **result) +{ + int size = 0; + FILE *f = fopen(filename, "rb"); + if (f == NULL) + { + *result = NULL; + return -1; // -1 means file opening fail + } + fseek(f, 0, SEEK_END); + size = ftell(f); + fseek(f, 0, SEEK_SET); + *result = (uint8_t *)malloc(size+1); + if ((unsigned int) size != fread(*result, sizeof(char), size, f)) + { + free(*result); + return -2; // -2 means file reading fail + } + fclose(f); + (*result)[size] = 0; + return size; +} + int main(int argc, char *argv[]) { if (argc < 2) { @@ -46,18 +69,21 @@ int main(int argc, char *argv[]) atexit(SDL_Quit); char* filename = argv[1]; + uint8_t* content; - FILE* f = fopen(filename, "rb"); - if (f == NULL) { + int size = load_file_to_memory(filename, &content); + if (size < 0) { printf("Can't load spritefile %s\n", filename); exit(EXIT_FAILURE); + } else { + printf("Loaded file of size %d into memory", size); } - struct rosprite_file_context* ctx = rosprite_create_file_context(f); + struct rosprite_mem_context* ctx = rosprite_create_mem_context(content, size); printf("Loading %s\n", filename); - struct rosprite_area* sprite_area = rosprite_load(rosprite_file_reader, ctx); + struct rosprite_area* sprite_area = rosprite_load(rosprite_mem_reader, ctx); printf("sprite_count %u\n", sprite_area->sprite_count); printf("extension_size %u\n", sprite_area->extension_size); @@ -94,9 +120,10 @@ int main(int argc, char *argv[]) fgetc(stdin); } - fclose(f); - rosprite_destroy_file_context(ctx); + rosprite_destroy_mem_context(ctx); rosprite_destroy_sprite_area(sprite_area); return EXIT_SUCCESS; } + + -- cgit v1.2.3