aboutsummaryrefslogtreecommitdiff
path: root/engines/parallaction/archive.cpp
diff options
context:
space:
mode:
authorNicola Mettifogo2007-02-25 21:40:15 +0000
committerNicola Mettifogo2007-02-25 21:40:15 +0000
commitc7734857e1d9d7b9174e9b62de373fb5166ff0f6 (patch)
tree490440c2ad6c075ac93e4abb5db06f349e606deb /engines/parallaction/archive.cpp
parent420a7c5f752af9add4a3d671bf68ea1d5c1bcff4 (diff)
downloadscummvm-rg350-c7734857e1d9d7b9174e9b62de373fb5166ff0f6.tar.gz
scummvm-rg350-c7734857e1d9d7b9174e9b62de373fb5166ff0f6.tar.bz2
scummvm-rg350-c7734857e1d9d7b9174e9b62de373fb5166ff0f6.zip
made Archive inherit from Common::File, added some methods to comply to interface, changed callers to exploit readByte capabilities
svn-id: r25868
Diffstat (limited to 'engines/parallaction/archive.cpp')
-rw-r--r--engines/parallaction/archive.cpp53
1 files changed, 29 insertions, 24 deletions
diff --git a/engines/parallaction/archive.cpp b/engines/parallaction/archive.cpp
index 9d3aced9eb..e83bcecc13 100644
--- a/engines/parallaction/archive.cpp
+++ b/engines/parallaction/archive.cpp
@@ -89,7 +89,6 @@ bool Archive::openArchivedFile(const char *name) {
_file = true;
- _fileIndex = i;
_fileOffset = _archiveOffsets[i];
_fileCursor = _archiveOffsets[i];
_fileEndOffset = _archiveOffsets[i] + _archiveLenghts[i];
@@ -101,7 +100,6 @@ bool Archive::openArchivedFile(const char *name) {
void Archive::resetArchivedFile() {
_file = false;
- _fileIndex = 0;
_fileCursor = 0;
_fileOffset = 0;
_fileEndOffset = 0;
@@ -112,44 +110,51 @@ void Archive::closeArchivedFile() {
}
-uint16 Archive::getArchivedFileLength() {
-// printf("getArchivedFileLength(%s)\n", name);
-
+uint32 Archive::size() {
return (_file == true ? _fileEndOffset - _fileOffset : 0);
}
+void Archive::seek(int32 offs, int whence) {
+ assert(_file == true && _fileCursor <= _fileEndOffset);
+
+ switch (whence) {
+ case SEEK_CUR:
+ _fileCursor += offs;
+ break;
+ case SEEK_SET:
+ _fileCursor = _fileOffset + offs;
+ break;
+ case SEEK_END:
+ _fileCursor = _fileEndOffset - offs;
+ break;
+ }
+ assert(_fileCursor <= _fileEndOffset && _fileCursor >= _fileOffset);
-int16 Archive::readArchivedFile(void *buffer, uint16 size) {
-// printf("readArchivedFile(%i, %i)\n", file->_cursor, file->_endOffset);
+ _archive.seek(_fileCursor, SEEK_SET);
+}
+
+uint32 Archive::read(void *dataPtr, uint32 dataSize) {
+// printf("read(%i, %i)\n", file->_cursor, file->_endOffset);
if (_file == false)
- error("readArchiveFile: no archived file is currently open");
+ error("Archive::read: no archived file is currently open");
- if (_fileCursor == _fileEndOffset) return -1;
+ if (_fileCursor >= _fileEndOffset)
+ error("can't read beyond end of archived file");
- if (_fileEndOffset - _fileCursor < size)
- size = _fileEndOffset - _fileCursor;
+ if (_fileEndOffset - _fileCursor < dataSize)
+ dataSize = _fileEndOffset - _fileCursor;
- _archive.seek(_fileCursor);
- int16 read = _archive.read(buffer, size);
+ int32 read = _archive.read(dataPtr, dataSize);
_fileCursor += read;
return read;
}
-char *Archive::readArchivedFileText(char *buf, uint16 size) {
- if (_file == false)
- error("readArchiveFileText: no archived file is currently open");
-
- char *t = _archive.readLine(buf, size);
-
- if (_archive.eof() || t == NULL)
- return NULL;
-
- return t;
+uint32 Archive::write(const void *dataPtr, uint32 dataSize) {
+ error("Archive files don't support writing");
}
-
} // namespace Parallaction