diff options
author | Matthew Stewart | 2018-05-19 21:15:13 -0400 |
---|---|---|
committer | Eugene Sandulenko | 2018-08-09 08:37:30 +0200 |
commit | a6bee58f62f3d7d696c6b5493f248390d5c303ac (patch) | |
tree | b64fdb3711fdfff7ead9068c9edf76ed57c8bbdf /engines/startrek/filestream.cpp | |
parent | f66b77d9fd34e4845a214e1c1ff42e5e2211c991 (diff) | |
download | scummvm-rg350-a6bee58f62f3d7d696c6b5493f248390d5c303ac.tar.gz scummvm-rg350-a6bee58f62f3d7d696c6b5493f248390d5c303ac.tar.bz2 scummvm-rg350-a6bee58f62f3d7d696c6b5493f248390d5c303ac.zip |
STARTREK: Default behaviour for look action
Diffstat (limited to 'engines/startrek/filestream.cpp')
-rw-r--r-- | engines/startrek/filestream.cpp | 43 |
1 files changed, 33 insertions, 10 deletions
diff --git a/engines/startrek/filestream.cpp b/engines/startrek/filestream.cpp index 3af5ca8bb7..31cb789a88 100644 --- a/engines/startrek/filestream.cpp +++ b/engines/startrek/filestream.cpp @@ -2,37 +2,60 @@ namespace StarTrek { -FileStream::FileStream(Common::SeekableReadStream *stream, bool bigEndian) : Common::SeekableReadStreamEndian(bigEndian) { - _stream = stream; +FileStream::FileStream(Common::SeekableReadStream *stream, bool bigEndian) { _bigEndian = bigEndian; + + _pos = 0; + _size = stream->size(); + _data = new byte[_size]; + stream->read(_data, _size); + delete stream; } FileStream::~FileStream() { - delete _stream; + delete[] _data; } // ReadStream functions -bool FileStream::eos() const { - return _stream->eos(); +uint32 FileStream::read(void* dataPtr, uint32 dataSize) { + if (_pos + dataSize > (uint32)size()) + dataSize = size() - _pos; + memcpy(dataPtr, _data + _pos, dataSize); + _pos += dataSize; + return dataSize; } -uint32 FileStream::read(void* dataPtr, uint32 dataSize) { - return _stream->read(dataPtr, dataSize); +byte FileStream::readByte() { + assert(_pos + 1 <= size()); + return _data[_pos++]; +} + +uint16 FileStream::readUint16() { + assert(_pos + 2 <= size()); + uint16 w; + if (_bigEndian) + w = _data[_pos + 1] | (_data[_pos] << 8); + else + w = _data[_pos] | (_data[_pos + 1] << 8); + _pos += 2; + return w; } // SeekableReadStream functions int32 FileStream::pos() const { - return _stream->pos(); + return _pos; } int32 FileStream::size() const { - return _stream->size(); + return _size; } bool FileStream::seek(int32 offset, int whence) { - return _stream->seek(offset, whence); + assert(whence == SEEK_SET); + _pos = offset; + return true; } } |