aboutsummaryrefslogtreecommitdiff
path: root/engines/parallaction/archive.cpp
diff options
context:
space:
mode:
authorNicola Mettifogo2007-02-25 20:12:23 +0000
committerNicola Mettifogo2007-02-25 20:12:23 +0000
commit7c5600724b41d4358cb4ebb1c49f204483ef249c (patch)
tree2baf60b0e5d1d48b020a1ae571dcf14cc1e692ff /engines/parallaction/archive.cpp
parentf68105912af1337a5ffe96be2e44adedceeb0ca1 (diff)
downloadscummvm-rg350-7c5600724b41d4358cb4ebb1c49f204483ef249c.tar.gz
scummvm-rg350-7c5600724b41d4358cb4ebb1c49f204483ef249c.tar.bz2
scummvm-rg350-7c5600724b41d4358cb4ebb1c49f204483ef249c.zip
got rid of ArchievedFile. Since only one single file is being read from the archives at every moment, the ArchivedFile structure used for bookkeeping is useless.
svn-id: r25864
Diffstat (limited to 'engines/parallaction/archive.cpp')
-rw-r--r--engines/parallaction/archive.cpp64
1 files changed, 31 insertions, 33 deletions
diff --git a/engines/parallaction/archive.cpp b/engines/parallaction/archive.cpp
index e22bdeae08..ec640068cd 100644
--- a/engines/parallaction/archive.cpp
+++ b/engines/parallaction/archive.cpp
@@ -27,15 +27,11 @@
namespace Parallaction {
-struct ArchivedFile {
- uint16 _index;
- uint32 _offset;
- uint32 _cursor;
- uint16 field_A; // unused
- uint16 field_C; // unused
- uint32 _endOffset;
-};
-
+static bool _file = false;
+static uint16 _fileIndex = 0;
+static uint32 _fileOffset = 0;
+static uint32 _fileCursor = 0;
+static uint32 _fileEndOffset = 0;
#define MAX_ARCHIVE_ENTRIES 384
@@ -53,7 +49,6 @@ static char _archiveDir[MAX_ARCHIVE_ENTRIES][32];
static uint32 _archiveLenghts[MAX_ARCHIVE_ENTRIES];
static uint32 _archiveOffsets[MAX_ARCHIVE_ENTRIES];
-static uint32 _handle = MAX_ARCHIVE_ENTRIES;
void openArchive(const char *file) {
@@ -106,37 +101,36 @@ void closeArchive() {
}
-ArchivedFile *openArchivedFile(const char *name) {
+bool openArchivedFile(const char *name) {
uint16 i = 0;
for ( ; i < MAX_ARCHIVE_ENTRIES; i++) {
if (!scumm_stricmp(_archiveDir[i], name)) break;
}
- if (i == MAX_ARCHIVE_ENTRIES) return NULL;
+ if (i == MAX_ARCHIVE_ENTRIES) return false;
debugC(1, kDebugDisk, "file '%s' found in slot %i", name, i);
- ArchivedFile *file = (ArchivedFile*)memAlloc(sizeof(ArchivedFile));
-
- if (!file)
- error("openArchivedFile: can't allocate buffer for '%s'", name);
+ _file = true;
- file->_index = i;
- file->_offset = _archiveOffsets[i];
- file->_cursor = _archiveOffsets[i];
- file->_endOffset = _archiveOffsets[i] + _archiveLenghts[i];
+ _fileIndex = i;
+ _fileOffset = _archiveOffsets[i];
+ _fileCursor = _archiveOffsets[i];
+ _fileEndOffset = _archiveOffsets[i] + _archiveLenghts[i];
- _handle = file->_index;
- _archive.seek(file->_offset);
+ _archive.seek(_fileOffset);
- return file;
+ return true;
}
-void closeArchivedFile(ArchivedFile *file) {
- if (file) memFree(file);
- _handle = MAX_ARCHIVE_ENTRIES;
+void closeArchivedFile() {
+ _file = false;
+ _fileIndex = 0;
+ _fileCursor = 0;
+ _fileOffset = 0;
+ _fileEndOffset = 0;
return;
}
@@ -156,17 +150,19 @@ uint16 getArchivedFileLength(const char *name) {
-int16 readArchivedFile(ArchivedFile *file, void *buffer, uint16 size) {
+int16 readArchivedFile(void *buffer, uint16 size) {
// printf("readArchivedFile(%i, %i)\n", file->_cursor, file->_endOffset);
+ if (_file == false)
+ error("readArchiveFile: no archived file is currently open");
- if (file->_cursor == file->_endOffset) return -1;
+ if (_fileCursor == _fileEndOffset) return -1;
- if (file->_endOffset - file->_cursor < size)
- size = file->_endOffset - file->_cursor;
+ if (_fileEndOffset - _fileCursor < size)
+ size = _fileEndOffset - _fileCursor;
- _archive.seek(file->_cursor);
+ _archive.seek(_fileCursor);
int16 read = _archive.read(buffer, size);
- file->_cursor += read;
+ _fileCursor += read;
return read;
}
@@ -186,7 +182,9 @@ int16 readArchivedFile(ArchivedFile *file, void *buffer, uint16 size) {
#endif
-char *readArchivedFileText(char *buf, uint16 size, void*) {
+char *readArchivedFileText(char *buf, uint16 size) {
+ if (_file == false)
+ error("readArchiveFileText: no archived file is currently open");
char *t = _archive.readLine(buf, size);