aboutsummaryrefslogtreecommitdiff
path: root/engines/startrek/filestream.cpp
diff options
context:
space:
mode:
authorMatthew Stewart2018-05-19 21:15:13 -0400
committerEugene Sandulenko2018-08-09 08:37:30 +0200
commita6bee58f62f3d7d696c6b5493f248390d5c303ac (patch)
treeb64fdb3711fdfff7ead9068c9edf76ed57c8bbdf /engines/startrek/filestream.cpp
parentf66b77d9fd34e4845a214e1c1ff42e5e2211c991 (diff)
downloadscummvm-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.cpp43
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;
}
}