diff options
author | Robert Göffringmann | 2003-12-20 09:12:54 +0000 |
---|---|---|
committer | Robert Göffringmann | 2003-12-20 09:12:54 +0000 |
commit | 59654b17191b99c23486f6a41076b9ed05a1c38f (patch) | |
tree | f088012a40319619f80b8e81082779bb6512f737 /sword1/resman.cpp | |
parent | aceafcbb484f18aedda914bf321585a9c113016a (diff) | |
download | scummvm-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.cpp | 22 |
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) { |