diff options
author | Nicola Mettifogo | 2007-02-25 21:40:15 +0000 |
---|---|---|
committer | Nicola Mettifogo | 2007-02-25 21:40:15 +0000 |
commit | c7734857e1d9d7b9174e9b62de373fb5166ff0f6 (patch) | |
tree | 490440c2ad6c075ac93e4abb5db06f349e606deb /engines/parallaction/archive.cpp | |
parent | 420a7c5f752af9add4a3d671bf68ea1d5c1bcff4 (diff) | |
download | scummvm-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.cpp | 53 |
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 |