Mercurial > hg > dmlib
changeset 730:3d813c81f33c
More work on resources API.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Sun, 21 Apr 2013 19:29:00 +0300 |
parents | e09b7fbedf8c |
children | 0e164aaa7409 |
files | dmq3d.c dmres.c dmres.h dmsimple.c tests/plrtest.c tools/fontconv.c tools/mod2wav.c tools/ppl.c tools/viewmod.c tools/xm2jss.c |
diffstat | 10 files changed, 120 insertions(+), 105 deletions(-) [+] |
line wrap: on
line diff
--- a/dmq3d.c Sun Apr 21 18:34:13 2013 +0300 +++ b/dmq3d.c Sun Apr 21 19:29:00 2013 +0300 @@ -299,14 +299,16 @@ rbmp = &(model->bitmaps[index]); if (rbmp->img == NULL) { - DMResource *res = dmf_open(lib, rbmp->name); - if (res == NULL) + DMResource *fh; + int res; + if ((res = dmf_open(lib, rbmp->name, &fh)) != DMERR_OK) { - dmError("Could not open resource file '%s'.\n", rbmp->name); + dmError("Could not open resource file '%s', #%d: %s.\n", + rbmp->name, res, dmErrorStr(res)); return FALSE; } - rbmp->img = dmLoadImage(res); - dmf_close(res); + rbmp->img = dmLoadImage(fh); + dmf_close(fh); if (rbmp->img == NULL) { dmError("Could not load image file '%s'.\n", rbmp->name);
--- a/dmres.c Sun Apr 21 18:34:13 2013 +0300 +++ b/dmres.c Sun Apr 21 19:29:00 2013 +0300 @@ -578,7 +578,7 @@ dm_mem_fwrite, NULL, - NULL, + dmResourceFree, NULL }; @@ -586,7 +586,7 @@ /* FS file handling functions. These functions call the actual * functions depending on where the file is located. */ -static void dmf_reset(DMResource *handle) +static void dmResourceReset(DMResource *handle) { if (handle != NULL && handle->fops != NULL) dmfseek(handle, 0, SEEK_SET); @@ -597,9 +597,6 @@ { int ret = DMERR_INIT_FAIL; - // Initialize file ops - dmf_init_fops(handle); - // Check if we want to preload raw data? if (handle->lib->flags & DRF_PRELOAD_RAW) { @@ -613,7 +610,7 @@ handle->flags |= DMF_LOADED_RAW | DMF_PERSIST; } - dmf_reset(handle); + dmResourceReset(handle); } // Check if resource data is to be preloaded @@ -635,56 +632,70 @@ handle->flags |= DMF_LOADED_RES; } - dmf_reset(handle); + dmResourceReset(handle); } return ret; } -int dmf_open(DMResourceLib *lib, const char *filename, DMResource **handle) +int dmf_open(DMResourceLib *lib, const char *filename, DMResource **phandle) { + DMResource *handle; int res; // Check master directory for resource - if ((*handle = dmResourceFind(lib, filename)) == NULL) + if ((*phandle = handle = dmResourceFind(lib, filename)) == NULL) { #ifdef DM_USE_STDIO if (lib->flags & DRF_USE_STDIO) { // Hmm.. does not exist? Fall back to a stdio file - *handle = dmResourceNew(lib, filename, 0); - if (*handle == NULL) - return NULL; + *phandle = handle = dmResourceNew(lib, filename, 0); + if (handle == NULL) + return DMERR_MALLOC; - (*handle)->fops = &dfStdioFileOps; + handle->fops = &dfStdioFileOps; } else - return NULL; + return DMERR_INIT_FAIL; #else // Stdio not enabled, fail - return NULL; + return DMERR_INIT_FAIL; #endif } // Check if the data is preloaded if ((res = handle->fops->fopen(handle)) == DMERR_OK) + { dmResourceRef(handle); + if (handle->flags & DMF_TEMPORARY) + { + handle->flags &= ~DMF_TEMPORARY; + dmResourceInsert(lib, handle); + } + } + else + if (handle->flags & DMF_TEMPORARY) + { + dmResourceFree(handle); + *phandle = handle = NULL; + } return res; } -DMResource * dmf_create_memio(DMResourceLib *lib, const char *filename, Uint8 *buf, const size_t size) +int dmf_create_memio(DMResourceLib *lib, const char *filename, + Uint8 *buf, const size_t size, DMResource **phandle) { DMResource *handle; // Check master directory for resource - if ((handle = dmResourceFind(lib, filename)) == NULL) + if ((*phandle = handle = dmResourceFind(lib, filename)) == NULL) { - handle = dmResourceNew(lib, filename, size); - if (handle == NULL) - return NULL; + if ((*phandle = handle = dmResourceNew(lib, filename, size)) == NULL) + return DMERR_MALLOC; handle->flags = DMF_LOADED_RAW; handle->fops = &dfMemIOFileOps; @@ -694,46 +705,43 @@ // Increase refcount dmResourceRef(handle); - - dmf_reset(handle); - return handle; + dmResourceReset(handle); + return DMERR_OK; } #ifdef DM_USE_STDIO -DMResource * dmf_create_stdio(const char *filename, const char *mode) +int dmf_create_stdio(const char *filename, const char *mode, DMResource **phandle) { - DMResource *handle = dmResourceNew(NULL, filename, 0); - if (handle == NULL) - return NULL; + DMResource *handle; + if ((*phandle = handle = dmResourceNew(NULL, filename, 0)) == NULL) + return DMERR_MALLOC; handle->fops = &dfStdioFileOps; handle->fh = fopen(filename, mode); handle->error = dmGetErrno(); - if (handle->fh != NULL) - { - dmResourceRef(handle); - return handle; - } - else + if (handle->fh == NULL) { dmResourceFree(handle); - return NULL; + return handle->error; } + + dmResourceRef(handle); + return DMERR_OK; } -DMResource * dmf_create_stdio_stream(FILE *fh) +int dmf_create_stdio_stream(FILE *fh, DMResource **phandle) { - DMResource *handle = dmResourceNew(NULL, "", 0); - if (handle == NULL) - return NULL; + DMResource *handle; + if ((*phandle = handle = dmResourceNew(NULL, "", 0)) == NULL) + return DMERR_MALLOC; handle->fops = &dfStdioFHOps; handle->fh = fh; dmResourceRef(handle); - return handle; + return DMERR_OK; } #endif
--- a/dmres.h Sun Apr 21 18:34:13 2013 +0300 +++ b/dmres.h Sun Apr 21 19:29:00 2013 +0300 @@ -37,6 +37,7 @@ enum { DMF_PERSIST = 0x0001, // Persist loaded RAW resource + DMF_TEMPORARY = 0x0002, DMF_LOADED_RAW = 0x1000, // Raw data has been loaded DMF_LOADED_RES = 0x2000, // Resource has been loaded }; @@ -141,11 +142,11 @@ // Opening and closing resources -DMResource * dmf_open(DMResourceLib *lib, const char *); -DMResource * dmf_create_memio(DMResourceLib *lib, const char *, Uint8 *buf, size_t len); +int dmf_open(DMResourceLib *lib, const char *, DMResource **handle); +int dmf_create_memio(DMResourceLib *lib, const char *, Uint8 *buf, size_t len, DMResource **phandle); #ifdef DM_USE_STDIO -DMResource * dmf_create_stdio(const char *filename, const char *mode); -DMResource * dmf_create_stdio_stream(FILE *); +int dmf_create_stdio(const char *filename, const char *mode, DMResource **phandle); +int dmf_create_stdio_stream(FILE *, DMResource **phandle); #endif void dmf_close(DMResource *);
--- a/dmsimple.c Sun Apr 21 18:34:13 2013 +0300 +++ b/dmsimple.c Sun Apr 21 19:29:00 2013 +0300 @@ -249,10 +249,10 @@ int engineParseSetupConfig(const char *filename) { DMResource *file = NULL; - int res = DMERR_OK; + int res; char buf[128]; - if ((file = dmf_open(engine.resources, filename)) == NULL) + if ((res = dmf_open(engine.resources, filename, &file)) != DMERR_OK) return DMERR_FOPEN; while (dmfgets(buf, sizeof(buf), file) != NULL) @@ -353,19 +353,19 @@ } // Fetch and decompress setup image, try regular resources first - file = dmf_open(engine.resources, engineSetupImageName); - if (file == NULL) - file = dmf_create_memio(NULL, engineSetupImageName, engineSetupImage, sizeof(engineSetupImage)); - - menuBgImage = dmLoadImage(file); - dmf_close(file); + if ((result = dmf_open(engine.resources, engineSetupImageName, &file)) == DMERR_OK || + (result = dmf_create_memio(NULL, engineSetupImageName, engineSetupImage, sizeof(engineSetupImage), &file)) == DMERR_OK) + { + menuBgImage = dmLoadImage(file); + dmf_close(file); + } - file = dmf_open(engine.resources, engineSetupMenuBarName); - if (file == NULL) - file = dmf_create_memio(NULL, engineSetupMenuBarName, engineSetupMenuBar, sizeof(engineSetupMenuBar)); - - menuBarImage = dmLoadImage(file); - dmf_close(file); + if ((result = dmf_open(engine.resources, engineSetupMenuBarName, &file)) == DMERR_OK || + (result = dmf_create_memio(NULL, engineSetupMenuBarName, engineSetupMenuBar, sizeof(engineSetupMenuBar), &file)) == DMERR_OK) + { + menuBarImage = dmLoadImage(file); + dmf_close(file); + } if (menuBgImage == NULL || menuBarImage == NULL) { @@ -386,12 +386,12 @@ // Load up the bitmap font - file = dmf_open(engine.resources, engineSetupFontName); - if (file == NULL) - file = dmf_create_memio(NULL, engineSetupFontName, engineSetupFont, sizeof(engineSetupFont)); - - result = dmLoadBitmapFont(file, &menuFont); - dmf_close(file); + if ((result = dmf_open(engine.resources, engineSetupFontName, &file)) == DMERR_OK || + (result = dmf_create_memio(NULL, engineSetupFontName, engineSetupFont, sizeof(engineSetupFont), &file)) == DMERR_OK) + { + result = dmLoadBitmapFont(file, &menuFont); + dmf_close(file); + } if (result != DMERR_OK) { dmError("Could not instantiate setup screen font, %d: %s\n",
--- a/tests/plrtest.c Sun Apr 21 18:34:13 2013 +0300 +++ b/tests/plrtest.c Sun Apr 21 19:29:00 2013 +0300 @@ -2,7 +2,6 @@ #include "jssmod.h" #include "jssmix.h" #include "jssplr.h" -#include <errno.h> #include <string.h> #include <unistd.h> #include <SDL.h> @@ -111,22 +110,25 @@ { SDL_AudioSpec afmt; DMResource *file = NULL; - char *sname = NULL; + char *inFilename = NULL; int result = -1; JSSModule *mod = NULL; JSSMixer *dev = NULL; JSSPlayer *plr = NULL; if (argc > 1) - sname = argv[1]; + inFilename = argv[1]; // Open the files - if (sname == NULL) - file = dmf_create_stdio_stream(stdin); - else if ((file = dmf_create_stdio(sname, "rb")) == NULL) + if (inFilename == NULL) + result = dmf_create_stdio_stream(stdin, &file); + else + result = dmf_create_stdio(inFilename, "rb", &file); + + if (result != DMERR_OK) { - fprintf(stderr, "Error opening input file '%s'. (%s)\n", - sname, strerror(errno)); + fprintf(stderr, "Error opening input file '%s', #%d: %s\n", + inFilename, result, dmErrorStr(result)); return 1; } @@ -136,7 +138,7 @@ // Read module file - fprintf(stderr, "Reading file: %s\n", sname); + fprintf(stderr, "Reading file: %s\n", inFilename); #ifdef JSS_SUP_XM fprintf(stderr, "* Trying XM...\n"); result = jssLoadXM(file, &mod);
--- a/tools/fontconv.c Sun Apr 21 18:34:13 2013 +0300 +++ b/tools/fontconv.c Sun Apr 21 19:29:00 2013 +0300 @@ -6,7 +6,6 @@ * Please read file 'COPYING' for information on license and distribution. */ #include <stdio.h> -#include <errno.h> #include "dmlib.h" #include "dmargs.h" #include "dmfile.h" @@ -303,10 +302,10 @@ #endif // Open the source file - if ((inFile = dmf_create_stdio(optInFilename, "rb")) == NULL) + if ((res = dmf_create_stdio(optInFilename, "rb", &inFile)) != DMERR_OK) { dmError("Error opening input file '%s', %d: %s\n", - optInFilename, errno, strerror(errno)); + optInFilename, res, dmErrorStr(res)); return 1; } @@ -369,10 +368,10 @@ dmMsg(1, "Outputting a DMFONT format bitmap font.\n"); - if ((outFile = dmf_create_stdio(optOutFilename, "wb")) == NULL) + if ((res = dmf_create_stdio(optOutFilename, "wb", &outFile)) != DMERR_OK) { dmError("Error creating file '%s', %d: %s\n", - optInFilename, errno, strerror(errno)); + optInFilename, res, dmErrorStr(res)); goto error_exit; }
--- a/tools/mod2wav.c Sun Apr 21 18:34:13 2013 +0300 +++ b/tools/mod2wav.c Sun Apr 21 19:29:00 2013 +0300 @@ -153,10 +153,10 @@ jssInit(); // Open the source file - if ((inFile = dmf_create_stdio(optInFilename, "rb")) == NULL) + if ((result = dmf_create_stdio(optInFilename, "rb", &inFile)) != DMERR_OK) { dmError("Error opening input file '%s', %d: %s\n", - optInFilename, errno, strerror(errno)); + optInFilename, result, dmErrorStr(result)); return 1; } @@ -250,7 +250,8 @@ // Open output file if ((outFile = fopen(optOutFilename, "wb")) == NULL) { - dmError("Error opening output file '%s'. (%s)\n", optInFilename, strerror(errno)); + dmError("Error opening output file '%s'. (%s)\n", + optInFilename, strerror(errno)); return 7; }
--- a/tools/ppl.c Sun Apr 21 18:34:13 2013 +0300 +++ b/tools/ppl.c Sun Apr 21 19:29:00 2013 +0300 @@ -581,11 +581,10 @@ return 1; } - if ((file = dmf_create_stdio(optFilename, "rb")) == NULL) + if ((result = dmf_create_stdio(optFilename, "rb", &file)) != DMERR_OK) { - int err = dmGetErrno(); dmError("Error opening file '%s', %d: (%s)\n", - optFilename, err, dmErrorStr(err)); + optFilename, result, dmErrorStr(result)); return 1; } @@ -634,11 +633,11 @@ } // Get font -// file = dmf_create_stdio("fnsmall.fnt", "rb"); - file = dmf_create_memio(NULL, "pplfont.fnt", engineSetupFont, sizeof(engineSetupFont)); - if (file == NULL) + result = dmf_create_memio(NULL, "pplfont.fnt", engineSetupFont, sizeof(engineSetupFont), &file); + if (result != DMERR_OK) { - dmError("Error opening font file 'pplfont.fnt'.\n"); + dmError("Error opening font file 'pplfont.fnt', #%d: %s\n", + result, dmErrorStr(result)); goto error_exit; } result = dmLoadBitmapFont(file, &font);
--- a/tools/viewmod.c Sun Apr 21 18:34:13 2013 +0300 +++ b/tools/viewmod.c Sun Apr 21 19:29:00 2013 +0300 @@ -388,11 +388,14 @@ // Open the file dmMsg(1, "Reading module file '%s'\n", optFilename); if (optFilename == NULL) - file = dmf_create_stdio_stream(stdin); - else if ((file = dmf_create_stdio(optFilename, "rb")) == NULL) + result = dmf_create_stdio_stream(stdin, &file); + else + result = dmf_create_stdio(optFilename, "rb", &file); + + if (result != DMERR_OK) { - dmError("Error opening input file '%s'. (%s)\n", - optFilename, strerror(errno)); + dmError("Error opening input file '%s', #%d: %s\n", + optFilename, result, dmErrorStr(result)); return 1; }
--- a/tools/xm2jss.c Sun Apr 21 18:34:13 2013 +0300 +++ b/tools/xm2jss.c Sun Apr 21 19:29:00 2013 +0300 @@ -912,8 +912,8 @@ int main(int argc, char *argv[]) { - DMResource *sfile = NULL; - FILE *dfile = NULL; + DMResource *inFile = NULL; + FILE *outFile = NULL; JSSModule *sm, *dm; int result; @@ -933,10 +933,10 @@ } // Read the source file - if ((sfile = dmf_create_stdio(optInFilename, "rb")) == NULL) + if ((result = dmf_create_stdio(optInFilename, "rb", &inFile)) != DMERR_OK) { dmError("Error opening input file '%s', %d: %s\n", - optInFilename, errno, strerror(errno)); + optInFilename, result, dmErrorStr(result)); return 1; } @@ -945,8 +945,8 @@ // Read file dmMsg(1, "Reading XM-format file ...\n"); - result = jssLoadXM(sfile, &sm); - dmf_close(sfile); + result = jssLoadXM(inFile, &sm); + dmf_close(inFile); if (result != 0) { dmError("Error while loading XM file (%i), ", result); @@ -1012,7 +1012,7 @@ dm = sm; // Write output file - if ((dfile = fopen(optOutFilename, "wb")) == NULL) + if ((outFile = fopen(optOutFilename, "wb")) == NULL) { dmError("Error creating output file '%s', %d: %s\n", optOutFilename, errno, strerror(errno)); @@ -1022,9 +1022,9 @@ dmMsg(1, "Writing JSSMOD-format file [patMode=0x%04x, samp8=0x%02x, samp16=0x%02x]\n", optPatternMode, optSampMode8, optSampMode16); - result = jssSaveJSSMOD(dfile, dm, optPatternMode, optSampMode8, optSampMode16); + result = jssSaveJSSMOD(outFile, dm, optPatternMode, optSampMode8, optSampMode16); - fclose(dfile); + fclose(outFile); if (result != 0) {