diff options
author | Vladimir | 2011-06-08 01:38:12 +0400 |
---|---|---|
committer | Alyssa Milburn | 2011-06-15 17:32:15 +0200 |
commit | 858a898aa7aef678c9c486c8c18788ade47f8aea (patch) | |
tree | bcd3226ae851dab80f5d084697b26cf4ae11f7d1 | |
parent | 9a1575b9d560ff7ffa5056081072e3b049c0c2c5 (diff) | |
download | scummvm-rg350-858a898aa7aef678c9c486c8c18788ade47f8aea.tar.gz scummvm-rg350-858a898aa7aef678c9c486c8c18788ade47f8aea.tar.bz2 scummvm-rg350-858a898aa7aef678c9c486c8c18788ade47f8aea.zip |
DREAMWEB: added readfile
-rw-r--r-- | engines/dreamweb/dreamweb.cpp | 13 | ||||
-rw-r--r-- | engines/dreamweb/dreamweb.h | 1 | ||||
-rw-r--r-- | engines/dreamweb/runtime.h | 10 |
3 files changed, 23 insertions, 1 deletions
diff --git a/engines/dreamweb/dreamweb.cpp b/engines/dreamweb/dreamweb.cpp index fab9955dcd..fed8a802bc 100644 --- a/engines/dreamweb/dreamweb.cpp +++ b/engines/dreamweb/dreamweb.cpp @@ -141,6 +141,12 @@ void DreamWebEngine::openFile(const Common::String &name) { error("cannot open file %s", name.c_str()); } +void DreamWebEngine::readFromFile(uint8 *dst, unsigned size) { + //if (!_file.isOpen()) + // error("file was not opened"); + _file.read(dst, size); +} + } // End of namespace DreamWeb @@ -184,7 +190,11 @@ void setkeyboardint(Context &context) { } void readfromfile(Context &context) { - ::error("readfromfile"); + uint16 dst_offset = context.dx; + uint16 size = context.bx; + debug(1, "readfromfile(ds:%u, %u)", dst_offset, size); + engine()->readFromFile(context.ds.ptr(dst_offset, size), size); + context.flags._c = false; //fixme: add return args } void closefile(Context &context) { @@ -206,6 +216,7 @@ void openfile(Context &context) { while((c = context.cs.byte(name_ptr++)) != 0) name += (char)c; debug(1, "opening file: %s", name.c_str()); + engine()->openFile(name); context.cs.word(kHandle) = 1; //only one handle context.flags._c = false; } diff --git a/engines/dreamweb/dreamweb.h b/engines/dreamweb/dreamweb.h index 8669aad5fe..cba1b00051 100644 --- a/engines/dreamweb/dreamweb.h +++ b/engines/dreamweb/dreamweb.h @@ -78,6 +78,7 @@ public: uint8 randomNumber() { return _rnd.getRandomNumber(255); } void openFile(const Common::String &name); + void readFromFile(uint8 *dst, unsigned size); private: const DreamWebGameDescription *_gameDescription; diff --git a/engines/dreamweb/runtime.h b/engines/dreamweb/runtime.h index d1c65114cf..d55f947032 100644 --- a/engines/dreamweb/runtime.h +++ b/engines/dreamweb/runtime.h @@ -98,6 +98,11 @@ struct Segment { inline WordRef word(unsigned index) { return WordRef(data, index); } + + inline uint8* ptr(unsigned index, unsigned size) { + assert(index + size <= data.size()); + return data.begin() + index; + } }; class Context; @@ -137,6 +142,11 @@ public: assert(_segment != 0); _segment->assign(b, e); } + + inline uint8* ptr(unsigned index, unsigned size) { + assert(_segment != 0); + return _segment->ptr(index, size); + } }; struct Flags { |