aboutsummaryrefslogtreecommitdiff
path: root/engines/drascula/resource.cpp
diff options
context:
space:
mode:
authorNicola Mettifogo2010-02-09 01:22:24 +0000
committerNicola Mettifogo2010-02-09 01:22:24 +0000
commit3a1e7ccbae87aa5d515af596e5c15c478ed3c4b3 (patch)
treeb1b94b4eb2480bd05cb42a79c2dfddf60264f875 /engines/drascula/resource.cpp
parent62741adf236a8a58674c5746cf7f8ae7417f4865 (diff)
downloadscummvm-rg350-3a1e7ccbae87aa5d515af596e5c15c478ed3c4b3.tar.gz
scummvm-rg350-3a1e7ccbae87aa5d515af596e5c15c478ed3c4b3.tar.bz2
scummvm-rg350-3a1e7ccbae87aa5d515af596e5c15c478ed3c4b3.zip
Moved text parsing to a new class.
svn-id: r48013
Diffstat (limited to 'engines/drascula/resource.cpp')
-rw-r--r--engines/drascula/resource.cpp56
1 files changed, 56 insertions, 0 deletions
diff --git a/engines/drascula/resource.cpp b/engines/drascula/resource.cpp
index efcb1c99ba..01f8d1ed5f 100644
--- a/engines/drascula/resource.cpp
+++ b/engines/drascula/resource.cpp
@@ -47,5 +47,61 @@ Common::SeekableReadStream *ArchiveMan::open(const Common::String &filename) {
return createReadStreamForMember(filename);
}
+
+
+
+TextResourceParser::TextResourceParser(Common::SeekableReadStream *stream, DisposeAfterUse::Flag dispose) :
+ _stream(stream), _dispose(dispose) {
+
+ // NOTE: strangely enough, the code before this refactoring used the size of
+ // the stream as a fixed maximum length for the parser. Using an updated
+ // (size-pos) would make more sense to me, but let's see what the experts say.
+ _maxLen = _stream->size();
+}
+
+TextResourceParser::~TextResourceParser() {
+ if (_dispose == DisposeAfterUse::YES) {
+ delete _stream;
+ }
+}
+
+void TextResourceParser::getLine(char *buf) {
+ byte c;
+ char *b;
+
+ for (;;) {
+ b = buf;
+ while (true) {
+ c = ~_stream->readByte();
+ if (_stream->eos()) break;
+
+ if (c == '\r')
+ continue;
+ if (c == '\n' || b - buf >= (_maxLen - 1))
+ break;
+ *b++ = c;
+ }
+ *b = '\0';
+ if (_stream->eos() && b == buf)
+ return;
+ if (b != buf)
+ break;
+ }
+}
+
+void TextResourceParser::parseInt(int &result) {
+ char buf[256];
+ getLine(buf);
+ sscanf(buf, "%d", &result);
+}
+
+void TextResourceParser::parseString(char* result) {
+ char buf[256];
+ getLine(buf);
+ sscanf(buf, "%s", result);
+}
+
+
+
} // End of namespace Drascula