aboutsummaryrefslogtreecommitdiff
path: root/engines/sludge/moreio.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/sludge/moreio.cpp')
-rw-r--r--engines/sludge/moreio.cpp152
1 files changed, 63 insertions, 89 deletions
diff --git a/engines/sludge/moreio.cpp b/engines/sludge/moreio.cpp
index 6635c3d3b7..bc1c57eaf2 100644
--- a/engines/sludge/moreio.cpp
+++ b/engines/sludge/moreio.cpp
@@ -26,7 +26,6 @@
#include "sludge/allfiles.h"
#include "sludge/moreio.h"
#include "sludge/newfatal.h"
-#include "sludge/stringy.h"
#include "sludge/sludge.h"
namespace Sludge {
@@ -41,157 +40,132 @@ void writeString(Common::String s, Common::WriteStream *stream) {
}
}
-char *readString(Common::SeekableReadStream *stream) {
- int a, len = stream->readUint16BE();
- char *s = new char[len + 1];
- if (!checkNew(s)) {
- return NULL;
+Common::String readString(Common::SeekableReadStream *stream) {
+ int len = stream->readUint16BE();
+ Common::String res = "";
+ for (int a = 0; a < len; a++) {
+ res += (char)(stream->readByte() - 1);
}
- for (a = 0; a < len; a++) {
- s[a] = (char)(stream->readByte() - 1);
- }
- s[len] = 0;
- debug(kSludgeDebugDataLoad, "Read string of length %i: %s", len, s);
- return s;
+ debug(kSludgeDebugDataLoad, "Read string of length %i: %s", len, res.c_str());
+ return res;
}
-char *encodeFilename(char *nameIn) {
- if (!nameIn)
- return NULL;
+Common::String encodeFilename(const Common::String &nameIn) {
+ Common::String newName = "";
+ if (nameIn.empty())
+ return newName;
if (allowAnyFilename) {
- char *newName = new char[strlen(nameIn) * 2 + 1];
- if (!checkNew(newName))
- return NULL;
-
- int i = 0;
- while (*nameIn) {
- switch (*nameIn) {
+ for (uint i = 0; i < nameIn.size(); ++i) {
+ switch (nameIn[i]) {
case '<':
- newName[i++] = '_';
- newName[i++] = 'L';
+ newName += '_';
+ newName += 'L';
break;
case '>':
- newName[i++] = '_';
- newName[i++] = 'G';
+ newName += '_';
+ newName += 'G';
break;
case '|':
- newName[i++] = '_';
- newName[i++] = 'P';
+ newName += '_';
+ newName += 'P';
break;
case '_':
- newName[i++] = '_';
- newName[i++] = 'U';
+ newName += '_';
+ newName += 'U';
break;
case '\"':
- newName[i++] = '_';
- newName[i++] = 'S';
+ newName += '_';
+ newName += 'S';
break;
case '\\':
- newName[i++] = '_';
- newName[i++] = 'B';
+ newName += '_';
+ newName += 'B';
break;
case '/':
- newName[i++] = '_';
- newName[i++] = 'F';
+ newName += '_';
+ newName += 'F';
break;
case ':':
- newName[i++] = '_';
- newName[i++] = 'C';
+ newName += '_';
+ newName += 'C';
break;
case '*':
- newName[i++] = '_';
- newName[i++] = 'A';
+ newName += '_';
+ newName += 'A';
break;
case '?':
- newName[i++] = '_';
- newName[i++] = 'Q';
+ newName += '_';
+ newName += 'Q';
break;
default:
- newName[i++] = *nameIn;
+ newName += nameIn[i];
break;
}
- newName[i] = 0;
- nameIn++;
}
- return newName;
} else {
- int a;
- for (a = 0; nameIn[a]; a++) {
- if (nameIn[a] == '\\')
- nameIn[a] = '/';
+ newName.clear();
+ newName = nameIn;
+ for (uint i = 0; i < newName.size(); ++i) {
+ if (newName[i] == '\\')
+ newName.setChar('/', i);
}
-
- return copyString(nameIn);
}
+ return newName;
}
-char *decodeFilename(char *nameIn) {
+Common::String decodeFilename(const Common::String &nameIn) {
+ Common::String newName ="";
if (allowAnyFilename) {
- char *newName = new char[strlen(nameIn) + 1];
- if (!checkNew(newName))
- return NULL;
-
- int i = 0;
- while (*nameIn) {
- if (*nameIn == '_') {
- nameIn++;
- switch (*nameIn) {
+ for (uint i = 0; i < nameIn.size(); ++i) {
+ if (nameIn[i] == '_') {
+ ++i;
+ switch (nameIn[i]) {
case 'L':
- newName[i] = '<';
- nameIn++;
+ newName += '<';
break;
case 'G':
- newName[i] = '>';
- nameIn++;
+ newName += '>';
break;
case 'P':
- newName[i] = '|';
- nameIn++;
+ newName += '|';
break;
case 'U':
- newName[i] = '_';
- nameIn++;
+ newName += '_';
break;
case 'S':
- newName[i] = '\"';
- nameIn++;
+ newName += '\"';
break;
case 'B':
- newName[i] = '\\';
- nameIn++;
+ newName += '\\';
break;
case 'F':
- newName[i] = '/';
- nameIn++;
+ newName += '/';
break;
case 'C':
- newName[i] = ':';
- nameIn++;
+ newName += ':';
break;
case 'A':
- newName[i] = '*';
- nameIn++;
+ newName += '*';
break;
case 'Q':
- newName[i] = '?';
- nameIn++;
+ newName += '?';
break;
default:
- newName[i] = '_';
+ newName += '_';
+ --i;
+ break;
}
} else {
- newName[i] = *nameIn;
- nameIn++;
+ newName += nameIn[i];
}
- i++;
-
}
- newName[i] = 0;
return newName;
} else {
- return copyString(nameIn);
+ newName.clear();
+ newName = nameIn;
}
+ return newName;
}
} // End of namespace Sludge