SAGA2: Organize hresmgr functions

This commit is contained in:
a/ 2021-05-29 14:35:27 +09:00 committed by Eugene Sandulenko
parent 3cb251421b
commit 58ad6895eb
No known key found for this signature in database
GPG Key ID: 014D387312D34F08
3 changed files with 22 additions and 12 deletions

View File

@ -276,17 +276,20 @@ bool hResContext::get(hResID id, void *buffer, uint32 size) {
uint32 hResContext::getSize(hResID id, const char desc[]) {
hResEntry *entry;
if ((entry = findEntry(id)) == nullptr) {
warning("Resource %d, %s not found", id, desc);
return 0;
}
debugC(3, kDebugResources, "Size for %x (%s): %d", id, desc, entry->size);
return entry->size;
}
byte *hResContext::loadResource(hResID id, Common::String filename, const char desc[]) {
byte *hResContext::loadResource(hResID id, const char desc[], Common::String filename) {
hResEntry *entry;
debugC(3, kDebugResources, "Loading resource %x (%s)", id, desc);
if ((entry = findEntry(id)) == nullptr) {
warning("Resource %d, %s not found", id, desc);
return nullptr;
@ -294,6 +297,9 @@ byte *hResContext::loadResource(hResID id, Common::String filename, const char d
byte *res = (byte*)malloc(entry->size);
if (filename.equalsIgnoreCase(""))
filename = _filename;
if (!_file.isOpen())
_file.open(filename);
@ -359,6 +365,9 @@ byte *hResContext::loadIndexResource(int16 index, const char desc[], Common::Str
byte *res = (byte*)malloc(entry->size);
if (filename.equalsIgnoreCase(""))
filename = _filename;
if (!_file.isOpen())
_file.open(filename);

View File

@ -162,8 +162,8 @@ public:
bool get(hResID id, void *buffer, uint32 size);
uint32 getSize(hResID id, const char desc[]);
RHANDLE load(hResID id, const char [], bool async = false, bool cacheable = true);
byte *loadResource(hResID id, Common::String filename, const char desc[]);
byte *loadIndexResource(int16 index, const char desc[], Common::String filename);
byte *loadResource(hResID id, const char desc[], Common::String filename);
byte *loadIndexResource(int16 index, const char desc[], Common::String filename = "");
RHANDLE loadIndex(int16 index, const char[], bool cacheable = true);
void release(RHANDLE p);
Common::File *resFileHandle(void) {

View File

@ -690,8 +690,7 @@ bool Thread::interpret(void) {
//RUnlockHandle((RHANDLE)codeSeg);
codeSeg = scriptRes->loadIndexResource(programCounter.segment,
"saga code segment",
scriptRes->_filename);
"saga code segment");
pc = (codeSeg) + programCounter.offset;
n = *stack++; // get argument count from call
@ -735,7 +734,7 @@ bool Thread::interpret(void) {
IMMED_WORD(w); // pick up segment number
programCounter.segment = w; // set current segment
//RUnlockHandle((RHANDLE)codeSeg);
codeSeg = scriptRes->loadIndexResource(w, "saga code segment", scriptRes->_filename);
codeSeg = scriptRes->loadIndexResource(w, "saga code segment");
IMMED_WORD(w); // pick up segment offset
programCounter.offset = w; // store into pc
@ -821,7 +820,7 @@ bool Thread::interpret(void) {
w = vtableEntry[ 0 ];
programCounter.segment = w;
//RUnlockHandle((RHANDLE)codeSeg);
codeSeg = scriptRes->loadIndexResource(w, "saga code segment", scriptRes->_filename);
codeSeg = scriptRes->loadIndexResource(w, "saga code segment");
// store pc-offset into pc
programCounter.offset = vtableEntry[ 1 ];
@ -1489,7 +1488,7 @@ Thread *getThreadAddress(ThreadID id) {
// Thread constructor
Thread::Thread(uint16 segNum, uint16 segOff, scriptCallFrame &args) {
codeSeg = scriptRes->loadIndexResource(segNum, "saga code segment", scriptRes->_filename);
codeSeg = scriptRes->loadIndexResource(segNum, "saga code segment");
// initialize the thread
stackSize = kStackSize;
@ -1534,8 +1533,7 @@ Thread::Thread(void **buf) {
bufferPtr = (int16 *)bufferPtr + 1;
codeSeg = scriptRes->loadIndexResource(programCounter.segment,
"saga code segment",
scriptRes->_filename);
"saga code segment");
stackBase = (UBytePtr)malloc(stackSize);
stackPtr = stackBase + stackSize - stackOffset;
@ -1750,21 +1748,24 @@ void initScripts(void) {
error("Unable to open script resource file!\n");
// Load the data segment
dataSegment = scriptRes->loadResource(dataSegID, scriptResFile->_filename, "saga data segment");
dataSegment = scriptRes->loadResource(dataSegID, "saga data segment", scriptResFile->_filename);
if (dataSegment == NULL)
error("Unable to load the SAGA data segment");
dataSegSize = scriptRes->getSize(dataSegID, "saga data segment");
debugC(2, kDebugScripts, "dataSegment loaded at 0x%08x: size: %d", dataSegment, dataSegSize);
// Common::hexdump(dataSegment, dataSegSize);
exportSegment = scriptRes->loadResource(exportSegID, scriptResFile->_filename, "saga export segment");
exportSegment = scriptRes->loadResource(exportSegID, "saga export segment", scriptResFile->_filename);
assert(exportSegment != NULL);
// Common::hexdump(exportSegment, scriptRes->getSize(exportSegID, "saga export segment"));
exportCount = (scriptRes->getSize(exportSegID, "saga export segment") / sizeof(uint32)) + 1;
debugC(2, kDebugScripts, "exportSegment loaded at 0x%08x: size: %d, exportCount: %d",
exportSegment, scriptRes->getSize(exportSegID, "saga export segment"), exportCount);
}
void cleanupScripts(void) {