diff options
Diffstat (limited to 'command_line/CmdLine/Src/MacEmul/ResourceStrings.c')
-rw-r--r-- | command_line/CmdLine/Src/MacEmul/ResourceStrings.c | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/command_line/CmdLine/Src/MacEmul/ResourceStrings.c b/command_line/CmdLine/Src/MacEmul/ResourceStrings.c new file mode 100644 index 0000000..bdf3735 --- /dev/null +++ b/command_line/CmdLine/Src/MacEmul/ResourceStrings.c @@ -0,0 +1,68 @@ +#include "mwcc_decomp.h" + +typedef struct { + const char *name; + SInt16 rsrcid; + const char **strings; +} Res; + +static Res rlist[16]; + +void Res_Initialize() { + memset(rlist, 0, sizeof(rlist)); +} + +int Res_AddResource(const char *name, SInt16 rsrcid, const char **strings) { + int scan; + + for (scan = 0; scan < 16 && rlist[scan].rsrcid; scan++) { + if (rsrcid == rlist[scan].rsrcid) { + fprintf(stderr, "Resource %d is already added!\n", rsrcid); + return 0; + } + } + + if (scan >= 16) + return 0; + + rlist[scan].name = name; + rlist[scan].rsrcid = rsrcid; + rlist[scan].strings = strings; + return 1; +} + +enum { MaxRes = 16 }; + +const char *Res_GetResource(SInt16 rsrcid, SInt16 index) { + // Does not match, absolutely hopeless + int scan, find; + static char err[256]; + + scan = 0; + do { + if (rsrcid == rlist[scan].rsrcid) { + find = 0; + if ((SInt16) (index - 1) < 0) { + snprintf(err, sizeof(err), "[Illegal string index #%d in list '%s' (%d)]", (SInt16) (index - 1), rlist[scan].name, rsrcid); + return err; + } + + while (find <= (index - 1)) { + if (!rlist[scan].strings[find]) { + snprintf(err, sizeof(err), "[String #%d not found in resource '%s' (%d)]", (SInt16) (index - 1), rlist[scan].name, rsrcid); + return err; + } + if (find == (index - 1)) { + return rlist[scan].strings[find]; + } else { + find++; + } + } + } + } while (scan++ < MaxRes); + + return 0; +} + +void Res_Cleanup() { +} |