Skip to content

Commit

Permalink
DREAMWEB: 'standardLoadCPP' to load game data in malloc'ed buffers
Browse files Browse the repository at this point in the history
  • Loading branch information
tramboi committed Dec 4, 2011
1 parent 87ac82d commit a201e1a
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 11 deletions.
24 changes: 13 additions & 11 deletions engines/dreamweb/stubs.cpp
Expand Up @@ -760,6 +760,17 @@ uint16 DreamGenContext::standardLoad(const char *fileName, uint16 *outSizeInByte
return result;
}

void *DreamGenContext::standardLoadCPP(const char *fileName, uint16 *outSizeInBytes) {
uint16 sizeInBytes;
uint16 seg = standardLoad(fileName, &sizeInBytes);
void *buffer = malloc(sizeInBytes);
memcpy(buffer, getSegment(seg).ptr(0, 0), sizeInBytes);
deallocateMem(seg);
if (outSizeInBytes)
*outSizeInBytes = sizeInBytes;
return buffer;
}

void DreamGenContext::standardLoad() {
ax = standardLoad((const char *)cs.ptr(dx, 0), NULL);
}
Expand Down Expand Up @@ -2468,18 +2479,9 @@ void DreamGenContext::loadRoomsSample() {
void DreamGenContext::readSetData() {
data.word(kCharset1) = standardLoad("DREAMWEB.C00");

uint16 icons1SizeInBytes;
uint16 tempIcons1 = standardLoad("DREAMWEB.G00", &icons1SizeInBytes);
void *icons1Buffer = malloc(icons1SizeInBytes);
memcpy(icons1Buffer, getSegment(tempIcons1).ptr(0, 0), icons1SizeInBytes);
deallocateMem(tempIcons1);
void *icons1Buffer = standardLoadCPP("DREAMWEB.G00");
engine->setIcons1(icons1Buffer);

uint16 icons2SizeInBytes;
uint16 tempIcons2 = standardLoad("DREAMWEB.G01", &icons2SizeInBytes);
void *icons2Buffer = malloc(icons2SizeInBytes);
memcpy(icons2Buffer, getSegment(tempIcons2).ptr(0, 0), icons2SizeInBytes);
deallocateMem(tempIcons2);
void *icons2Buffer = standardLoadCPP("DREAMWEB.G01");
engine->setIcons2(icons2Buffer);

data.word(kMainsprites) = standardLoad("DREAMWEB.S00");
Expand Down
1 change: 1 addition & 0 deletions engines/dreamweb/stubs.h
Expand Up @@ -33,6 +33,7 @@
void clearWork();
void standardLoad();
uint16 standardLoad(const char *fileName, uint16 *outSizeInBytes = NULL); // Returns a segment handle which needs to be freed with deallocatemem for symmetry
void *standardLoadCPP(const char *fileName, uint16 *outSizeInBytes = NULL); // And this one should be 'free'd
void loadIntoTemp();
void loadIntoTemp2();
void loadIntoTemp3();
Expand Down

0 comments on commit a201e1a

Please sign in to comment.