aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
authorVladimir2011-06-08 01:38:12 +0400
committerAlyssa Milburn2011-06-15 17:32:15 +0200
commit858a898aa7aef678c9c486c8c18788ade47f8aea (patch)
treebcd3226ae851dab80f5d084697b26cf4ae11f7d1 /engines
parent9a1575b9d560ff7ffa5056081072e3b049c0c2c5 (diff)
downloadscummvm-rg350-858a898aa7aef678c9c486c8c18788ade47f8aea.tar.gz
scummvm-rg350-858a898aa7aef678c9c486c8c18788ade47f8aea.tar.bz2
scummvm-rg350-858a898aa7aef678c9c486c8c18788ade47f8aea.zip
DREAMWEB: added readfile
Diffstat (limited to 'engines')
-rw-r--r--engines/dreamweb/dreamweb.cpp13
-rw-r--r--engines/dreamweb/dreamweb.h1
-rw-r--r--engines/dreamweb/runtime.h10
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 {