aboutsummaryrefslogtreecommitdiff
path: root/engines/cine/part.cpp
diff options
context:
space:
mode:
authorGregory Montoir2007-05-30 18:43:28 +0000
committerGregory Montoir2007-05-30 18:43:28 +0000
commit45b721d3cc47c6682edbf3e8cf30c31ca72c5a3c (patch)
treee0329109829389fc11607bdc50a9bfc14c4430ed /engines/cine/part.cpp
parent5006dbd932bb548b1f648a33576b22d8b5210c26 (diff)
downloadscummvm-rg350-45b721d3cc47c6682edbf3e8cf30c31ca72c5a3c.tar.gz
scummvm-rg350-45b721d3cc47c6682edbf3e8cf30c31ca72c5a3c.tar.bz2
scummvm-rg350-45b721d3cc47c6682edbf3e8cf30c31ca72c5a3c.zip
cleanup, don't rely on assert() to ensure a gamefile/savefile is opened. Also removed the use of Common::File global objects.
svn-id: r27021
Diffstat (limited to 'engines/cine/part.cpp')
-rw-r--r--engines/cine/part.cpp47
1 files changed, 21 insertions, 26 deletions
diff --git a/engines/cine/part.cpp b/engines/cine/part.cpp
index 5b7016b91b..1182624cd7 100644
--- a/engines/cine/part.cpp
+++ b/engines/cine/part.cpp
@@ -36,36 +36,29 @@ PartBuffer *partBuffer;
void loadPart(const char *partName) {
uint16 i;
- for (i = 0; i < NUM_MAX_PARTDATA; i++) {
- partBuffer[i].partName[0] = 0;
- partBuffer[i].offset = 0;
- partBuffer[i].packedSize = 0;
- partBuffer[i].unpackedSize = 0;
- }
-
+ memset(partBuffer, 0, sizeof(PartBuffer) * NUM_MAX_PARTDATA);
numElementInPart = 0;
- partFileHandle.close();
+ g_cine->_partFileHandle.close();
checkDataDisk(-1);
- partFileHandle.open(partName);
-
- assert(partFileHandle.isOpen());
+ if (!g_cine->_partFileHandle.open(partName))
+ error("loadPart(): Cannot open file %s", partName);
setMouseCursor(MOUSE_CURSOR_DISK);
- numElementInPart = partFileHandle.readUint16BE();
- partFileHandle.readUint16BE(); // entry size
+ numElementInPart = g_cine->_partFileHandle.readUint16BE();
+ g_cine->_partFileHandle.readUint16BE(); // entry size
strcpy(currentPartName, partName);
for (i = 0; i < numElementInPart; i++) {
- partFileHandle.read(partBuffer[i].partName, 14);
- partBuffer[i].offset = partFileHandle.readUint32BE();
- partBuffer[i].packedSize = partFileHandle.readUint32BE();
- partBuffer[i].unpackedSize = partFileHandle.readUint32BE();
- partFileHandle.readUint32BE(); // unused
+ g_cine->_partFileHandle.read(partBuffer[i].partName, 14);
+ partBuffer[i].offset = g_cine->_partFileHandle.readUint32BE();
+ partBuffer[i].packedSize = g_cine->_partFileHandle.readUint32BE();
+ partBuffer[i].unpackedSize = g_cine->_partFileHandle.readUint32BE();
+ g_cine->_partFileHandle.readUint32BE(); // unused
}
if (g_cine->getGameType() == Cine::GType_FW && g_cine->getPlatform() == Common::kPlatformPC && strcmp(partName, "BASESON.SND") != 0)
@@ -376,8 +369,8 @@ int16 findFileInBundle(const char *fileName) {
void readFromPart(int16 idx, byte *dataPtr) {
setMouseCursor(MOUSE_CURSOR_DISK);
- partFileHandle.seek(partBuffer[idx].offset, SEEK_SET);
- partFileHandle.read(dataPtr, partBuffer[idx].packedSize);
+ g_cine->_partFileHandle.seek(partBuffer[idx].offset, SEEK_SET);
+ g_cine->_partFileHandle.read(dataPtr, partBuffer[idx].packedSize);
}
byte *readBundleFile(int16 foundFileIdx) {
@@ -429,10 +422,9 @@ byte *readFile(const char *filename) {
if (!in.isOpen())
error("readFile(): Cannot open file %s", filename);
- byte *dataPtr;
uint32 size = in.size();
- dataPtr = (byte *)malloc(size);
+ byte *dataPtr = (byte *)malloc(size);
in.read(dataPtr, size);
return dataPtr;
@@ -450,12 +442,15 @@ void dumpBundle(const char *fileName) {
for (int i = 0; i < numElementInPart; i++) {
byte *data = readBundleFile(i);
+ debug(0, "%s", partBuffer[i].partName);
+
Common::File out;
+ if (out.open(Common::String("dumps/") + partBuffer[i].partName, Common::File::kFileWriteMode)) {
+ out.write(data, partBuffer[i].unpackedSize);
+ out.close();
+ }
- debug(0, "%s", partBuffer[i].partName);
- out.open(Common::String("dumps/") + partBuffer[i].partName, Common::File::kFileWriteMode);
- out.write(data, partBuffer[i].unpackedSize);
- out.close();
+ free(data);
}
loadPart(tmpPart);