From 2ddc969faf5d54ab46fc402b1bbeff52860395e8 Mon Sep 17 00:00:00 2001 From: mcmartin Date: Wed, 14 May 2008 03:15:29 +0000 Subject: [PATCH] Resource loader now descriptor-based, not filestream-based. This will allow for non-file resources, and eventual merging of configuration and other data into the resource system. git-svn-id: svn://svn.code.sf.net/p/sc2/code/trunk@2970 8092fc87-c524-0410-9efc-e669fe64eaf9 --- sc2/ChangeLog | 1 + sc2/src/sc2code/dummy.c | 8 +++- sc2/src/sc2code/libs/graphics/resgfx.c | 16 +++++++- sc2/src/sc2code/libs/reslib.h | 51 ++++++++++++------------ sc2/src/sc2code/libs/resource/getres.c | 5 +-- sc2/src/sc2code/libs/resource/resintrn.h | 1 - sc2/src/sc2code/libs/sound/resinst.c | 16 +++++++- sc2/src/sc2code/libs/strings/sresins.c | 16 +++++++- 8 files changed, 78 insertions(+), 36 deletions(-) diff --git a/sc2/ChangeLog b/sc2/ChangeLog index 36ff4b5c3..528b3e2a8 100644 --- a/sc2/ChangeLog +++ b/sc2/ChangeLog @@ -1,4 +1,5 @@ Changes towards version 0.7: +- ResourceLoadFun is now descriptor-based, not stream-based - Michael - Removed RES_TYPE enum, folded into ResourceDesc - Michael - Split STRTAB into STRTAB (strings) and BINTAB (color/xlat tables) - Michael - Removed internal references to defunct resource types - Michael diff --git a/sc2/src/sc2code/dummy.c b/sc2/src/sc2code/dummy.c index 01318ac67..5024250ad 100644 --- a/sc2/src/sc2code/dummy.c +++ b/sc2/src/sc2code/dummy.c @@ -316,11 +316,17 @@ _ReleaseCodeResData (void *data) return TRUE; } +static void * +GetCodeFileData (const char *pathname) +{ + return LoadResourceFromPath (pathname, GetCodeResData); +} + BOOLEAN InstallCodeResType () { return (InstallResTypeVectors ("CODE", - GetCodeResData, _ReleaseCodeResData)); + GetCodeFileData, _ReleaseCodeResData)); } diff --git a/sc2/src/sc2code/libs/graphics/resgfx.c b/sc2/src/sc2code/libs/graphics/resgfx.c index 945169bc1..528f7ae6c 100644 --- a/sc2/src/sc2code/libs/graphics/resgfx.c +++ b/sc2/src/sc2code/libs/graphics/resgfx.c @@ -18,12 +18,24 @@ #include "gfxintrn.h" +static void * +GetCelFileData (const char *pathname) +{ + return LoadResourceFromPath (pathname, _GetCelData); +} + +static void * +GetFontFileData (const char *pathname) +{ + return LoadResourceFromPath (pathname, _GetFontData); +} + BOOLEAN InstallGraphicResTypes (void) { - InstallResTypeVectors ("GFXRES", _GetCelData, _ReleaseCelData); - InstallResTypeVectors ("FONTRES", _GetFontData, _ReleaseFontData); + InstallResTypeVectors ("GFXRES", GetCelFileData, _ReleaseCelData); + InstallResTypeVectors ("FONTRES", GetFontFileData, _ReleaseFontData); return (TRUE); } diff --git a/sc2/src/sc2code/libs/reslib.h b/sc2/src/sc2code/libs/reslib.h index 5ac447ccd..f6f6962e5 100644 --- a/sc2/src/sc2code/libs/reslib.h +++ b/sc2/src/sc2code/libs/reslib.h @@ -34,38 +34,39 @@ typedef const char *RESOURCE; extern const char *_cur_resfile_name; -typedef void *(ResourceLoadFun) (uio_Stream *fp, DWORD len); +typedef void *(ResourceLoadFun) (const char *pathname); typedef BOOLEAN (ResourceFreeFun) (void *handle); -extern uio_Stream *res_OpenResFile (uio_DirHandle *dir, const char *filename, - const char *mode); -extern int ReadResFile (void *lpBuf, COUNT size, COUNT count, uio_Stream *fp); -extern int WriteResFile (const void *lpBuf, COUNT size, COUNT count, - uio_Stream *fp); -extern int GetResFileChar (uio_Stream *fp); -extern int PutResFileChar (char ch, uio_Stream *fp); -extern int PutResFileNewline (uio_Stream *fp); -extern long SeekResFile (uio_Stream *fp, long offset, int whence); -extern long TellResFile (uio_Stream *fp); -extern long LengthResFile (uio_Stream *fp); -extern BOOLEAN res_CloseResFile (uio_Stream *fp); -extern BOOLEAN DeleteResFile (uio_DirHandle *dir, const char *filename); +typedef void *(ResourceLoadFileFun) (uio_Stream *fp, DWORD len); -extern RESOURCE_INDEX InitResourceSystem (); -extern void UninitResourceSystem (void); -extern BOOLEAN InstallResTypeVectors (const char *res_type, - ResourceLoadFun *loadFun, ResourceFreeFun *freeFun); -extern void *res_GetResource (RESOURCE res); -extern void *res_DetachResource (RESOURCE res); -extern BOOLEAN FreeResource (RESOURCE res); -extern COUNT CountResourceTypes (void); +void *LoadResourceFromPath(const char *pathname, ResourceLoadFileFun fn); -extern void LoadResourceIndex (uio_DirHandle *dir, const char *filename); +uio_Stream *res_OpenResFile (uio_DirHandle *dir, const char *filename, const char *mode); +int ReadResFile (void *lpBuf, COUNT size, COUNT count, uio_Stream *fp); +int WriteResFile (const void *lpBuf, COUNT size, COUNT count, uio_Stream *fp); +int GetResFileChar (uio_Stream *fp); +int PutResFileChar (char ch, uio_Stream *fp); +int PutResFileNewline (uio_Stream *fp); +long SeekResFile (uio_Stream *fp, long offset, int whence); +long TellResFile (uio_Stream *fp); +long LengthResFile (uio_Stream *fp); +BOOLEAN res_CloseResFile (uio_Stream *fp); +BOOLEAN DeleteResFile (uio_DirHandle *dir, const char *filename); -extern void *GetResourceData (uio_Stream *fp, DWORD length); +RESOURCE_INDEX InitResourceSystem (); +void UninitResourceSystem (void); +BOOLEAN InstallResTypeVectors (const char *res_type, ResourceLoadFun *loadFun, ResourceFreeFun *freeFun); +void *res_GetResource (RESOURCE res); +void *res_DetachResource (RESOURCE res); +BOOLEAN FreeResource (RESOURCE res); +COUNT CountResourceTypes (void); + +void LoadResourceIndex (uio_DirHandle *dir, const char *filename); + +void *GetResourceData (uio_Stream *fp, DWORD length); #define AllocResourceData HMalloc -extern BOOLEAN FreeResourceData (void *); +BOOLEAN FreeResourceData (void *); #include "strlib.h" diff --git a/sc2/src/sc2code/libs/resource/getres.c b/sc2/src/sc2code/libs/resource/getres.c index 9e742e319..44d77788a 100644 --- a/sc2/src/sc2code/libs/resource/getres.c +++ b/sc2/src/sc2code/libs/resource/getres.c @@ -35,13 +35,12 @@ lookupResourceDesc (RESOURCE_INDEX idx, RESOURCE res) { void * loadResourceDesc (ResourceDesc *desc) { - desc->resdata = loadResource (desc->fname, - desc->vtable->loadFun); + desc->resdata = desc->vtable->loadFun (desc->fname); return desc->resdata; } void * -loadResource(const char *path, ResourceLoadFun *loadFun) +LoadResourceFromPath (const char *path, ResourceLoadFileFun *loadFun) { uio_Stream *stream; long dataLen; diff --git a/sc2/src/sc2code/libs/resource/resintrn.h b/sc2/src/sc2code/libs/resource/resintrn.h index 5bc12d57c..8543944b4 100644 --- a/sc2/src/sc2code/libs/resource/resintrn.h +++ b/sc2/src/sc2code/libs/resource/resintrn.h @@ -25,7 +25,6 @@ ResourceDesc *lookupResourceDesc (RESOURCE_INDEX idx, RESOURCE res); void *loadResourceDesc (ResourceDesc *desc); -void *loadResource(const char *path, ResourceLoadFun *loadFun); void _set_current_index_header (RESOURCE_INDEX newResourceIndex); RESOURCE_INDEX _get_current_index_header (void); diff --git a/sc2/src/sc2code/libs/sound/resinst.c b/sc2/src/sc2code/libs/sound/resinst.c index 94eea955d..9f4cb7494 100644 --- a/sc2/src/sc2code/libs/sound/resinst.c +++ b/sc2/src/sc2code/libs/sound/resinst.c @@ -18,11 +18,23 @@ #include "sndintrn.h" +static void * +GetSoundBankFileData (const char *pathname) +{ + return LoadResourceFromPath (pathname, _GetSoundBankData); +} + +static void * +GetMusicFileData (const char *pathname) +{ + return LoadResourceFromPath (pathname, _GetMusicData); +} + BOOLEAN InstallAudioResTypes (void) { - InstallResTypeVectors ("SNDRES", _GetSoundBankData, _ReleaseSoundBankData); - InstallResTypeVectors ("MUSICRES", _GetMusicData, _ReleaseMusicData); + InstallResTypeVectors ("SNDRES", GetSoundBankFileData, _ReleaseSoundBankData); + InstallResTypeVectors ("MUSICRES", GetMusicFileData, _ReleaseMusicData); return (TRUE); } diff --git a/sc2/src/sc2code/libs/strings/sresins.c b/sc2/src/sc2code/libs/strings/sresins.c index 123b5f5cb..6b6074ac4 100644 --- a/sc2/src/sc2code/libs/strings/sresins.c +++ b/sc2/src/sc2code/libs/strings/sresins.c @@ -18,11 +18,23 @@ #include "strintrn.h" +static void * +GetStringTableFileData (const char *pathname) +{ + return LoadResourceFromPath (pathname, _GetStringData); +} + +static void * +GetBinaryTableFileData (const char *pathname) +{ + return LoadResourceFromPath (pathname, _GetBinaryTableData); +} + BOOLEAN InstallStringTableResType (void) { - InstallResTypeVectors ("STRTAB", _GetStringData, FreeResourceData); - InstallResTypeVectors ("BINTAB", _GetBinaryTableData, FreeResourceData); + InstallResTypeVectors ("STRTAB", GetStringTableFileData, FreeResourceData); + InstallResTypeVectors ("BINTAB", GetBinaryTableFileData, FreeResourceData); return TRUE; }