aboutsummaryrefslogtreecommitdiff
path: root/sword1/resman.cpp
diff options
context:
space:
mode:
authorRobert Göffringmann2003-12-20 09:12:54 +0000
committerRobert Göffringmann2003-12-20 09:12:54 +0000
commit59654b17191b99c23486f6a41076b9ed05a1c38f (patch)
treef088012a40319619f80b8e81082779bb6512f737 /sword1/resman.cpp
parentaceafcbb484f18aedda914bf321585a9c113016a (diff)
downloadscummvm-rg350-59654b17191b99c23486f6a41076b9ed05a1c38f.tar.gz
scummvm-rg350-59654b17191b99c23486f6a41076b9ed05a1c38f.tar.bz2
scummvm-rg350-59654b17191b99c23486f6a41076b9ed05a1c38f.zip
added SwordControl (the control panel). Not yet finished.
svn-id: r11775
Diffstat (limited to 'sword1/resman.cpp')
-rw-r--r--sword1/resman.cpp22
1 files changed, 18 insertions, 4 deletions
diff --git a/sword1/resman.cpp b/sword1/resman.cpp
index 2097874acd..61b5a95581 100644
--- a/sword1/resman.cpp
+++ b/sword1/resman.cpp
@@ -100,7 +100,8 @@ void ResMan::freeCluDescript(void) {
if (BsClu *cluster = _prj.clu[clusCnt]) {
for (uint32 grpCnt = 0; grpCnt < cluster->noGrp; grpCnt++)
if (BsGrp *group = cluster->grp[grpCnt]) {
- _memMan->freeNow(group->resHandle);
+ for (uint32 resCnt = 0; resCnt < group->noRes; resCnt++)
+ _memMan->freeNow(group->resHandle + resCnt);
delete[] group->resHandle;
delete[] group->offset;
delete[] group->length;
@@ -112,6 +113,18 @@ void ResMan::freeCluDescript(void) {
delete[] _prj.clu;
}
+void ResMan::flush(void) {
+ for (uint32 clusCnt = 0; clusCnt < _prj.noClu; clusCnt++)
+ if (BsClu *cluster = _prj.clu[clusCnt])
+ for (uint32 grpCnt = 0; grpCnt < cluster->noGrp; grpCnt++)
+ if (BsGrp *group = cluster->grp[grpCnt])
+ for (uint32 resCnt = 0; resCnt < group->noRes; resCnt++)
+ if (group->resHandle[resCnt].cond != MEM_FREED) {
+ _memMan->setCondition(group->resHandle + resCnt, MEM_CAN_FREE);
+ group->resHandle[resCnt].refCount = 0;
+ }
+}
+
void *ResMan::fetchRes(uint32 id) {
BsMemHandle *memHandle = resHandle(id);
if (!memHandle->data)
@@ -192,10 +205,11 @@ void ResMan::resClose(uint32 id) {
BsMemHandle *handle = resHandle(id);
if (!handle->refCount) {
warning("Resource Manager fail: unlocking object with refCount 0. Id: %d\n", id);
- } else
+ } else {
handle->refCount--;
- if (!handle->refCount)
- _memMan->setCondition( handle, MEM_CAN_FREE);
+ if (!handle->refCount)
+ _memMan->setCondition( handle, MEM_CAN_FREE);
+ }
}
FrameHeader *ResMan::fetchFrame(void *resourceData, uint32 frameNo) {