summaryrefslogtreecommitdiff
path: root/wii
diff options
context:
space:
mode:
authorTreeki <treeki@gmail.com>2010-10-14 20:17:20 +0200
committerTreeki <treeki@gmail.com>2010-10-14 20:17:20 +0200
commitebcc95da4c26369511caa90d89c5ed06e1e4853a (patch)
tree6ed445f0204a6e6615088d135c4b29c4309077a4 /wii
parentfdf8cfec2b795393d7ee901abaf747575067068b (diff)
downloadLayoutStudio-ebcc95da4c26369511caa90d89c5ed06e1e4853a.tar.gz
LayoutStudio-ebcc95da4c26369511caa90d89c5ed06e1e4853a.zip
brlyt packing added, plus some changes in the existing API (mostly for const correctness). brlyt writing may still need some testing (especially for the material structs)
Diffstat (limited to 'wii')
-rw-r--r--wii/archiveu8.cpp10
-rw-r--r--wii/archiveu8.h10
-rw-r--r--wii/common.cpp28
-rw-r--r--wii/common.h5
-rw-r--r--wii/filesystem.cpp14
-rw-r--r--wii/filesystem.h12
-rw-r--r--wii/stringtablebuilder.cpp2
-rw-r--r--wii/stringtablebuilder.h2
8 files changed, 54 insertions, 29 deletions
diff --git a/wii/archiveu8.cpp b/wii/archiveu8.cpp
index 5e0ad5d..d27dfde 100644
--- a/wii/archiveu8.cpp
+++ b/wii/archiveu8.cpp
@@ -124,7 +124,7 @@ void WiiArchiveU8::readDir(QDataStream &in, WiiDirectory &dir, int lastChild, U8
-void WiiArchiveU8::writeToDataStream(QDataStream &out) {
+void WiiArchiveU8::writeToDataStream(QDataStream &out) const {
U8WriteInfo info;
// first off, before we do anything else, create the string table
@@ -179,7 +179,7 @@ void WiiArchiveU8::writeToDataStream(QDataStream &out) {
}
-void WiiArchiveU8::addNodeToStringTable(WiiFSObject &node, WiiStringTableBuilder &table) {
+void WiiArchiveU8::addNodeToStringTable(const WiiFSObject &node, WiiStringTableBuilder &table) const {
table.add(node.name);
if (node.isDirectory()) {
@@ -191,7 +191,7 @@ void WiiArchiveU8::addNodeToStringTable(WiiFSObject &node, WiiStringTableBuilder
}
-void WiiArchiveU8::countNode(WiiFSObject &node, int *countPtr) {
+void WiiArchiveU8::countNode(const WiiFSObject &node, int *countPtr) const {
(*countPtr)++;
if (node.isDirectory()) {
@@ -203,7 +203,7 @@ void WiiArchiveU8::countNode(WiiFSObject &node, int *countPtr) {
}
-void WiiArchiveU8::writeDir(QDataStream &out, WiiDirectory &dir, U8WriteInfo &info) {
+void WiiArchiveU8::writeDir(QDataStream &out, const WiiDirectory &dir, U8WriteInfo &info) const {
foreach (WiiFSObject *p, dir.children) {
info.currentNode++;
@@ -244,7 +244,7 @@ void WiiArchiveU8::writeDir(QDataStream &out, WiiDirectory &dir, U8WriteInfo &in
}
-void WiiArchiveU8::writeNodeData(QDataStream &out, WiiFSObject &node) {
+void WiiArchiveU8::writeNodeData(QDataStream &out, const WiiFSObject &node) const {
if (node.isDirectory()) {
// write all the children's data
WiiDirectory *thisDir = (WiiDirectory*)&node;
diff --git a/wii/archiveu8.h b/wii/archiveu8.h
index 6f54ba2..5561beb 100644
--- a/wii/archiveu8.h
+++ b/wii/archiveu8.h
@@ -45,17 +45,17 @@ public:
WiiDirectory root;
- void writeToDataStream(QDataStream &out);
+ void writeToDataStream(QDataStream &out) const;
private:
void readDir(QDataStream &in, WiiDirectory &dir, int lastChild, U8ReadInfo &info);
- void addNodeToStringTable(WiiFSObject &node, WiiStringTableBuilder &table);
- void countNode(WiiFSObject &node, int *countPtr);
+ void addNodeToStringTable(const WiiFSObject &node, WiiStringTableBuilder &table) const;
+ void countNode(const WiiFSObject &node, int *countPtr) const;
- void writeDir(QDataStream &out, WiiDirectory &dir, U8WriteInfo &info);
+ void writeDir(QDataStream &out, const WiiDirectory &dir, U8WriteInfo &info) const;
- void writeNodeData(QDataStream &out, WiiFSObject &node);
+ void writeNodeData(QDataStream &out, const WiiFSObject &node) const;
};
#endif // WIIARCHIVEU8_H
diff --git a/wii/common.cpp b/wii/common.cpp
index f4a961c..8f552b3 100644
--- a/wii/common.cpp
+++ b/wii/common.cpp
@@ -17,7 +17,7 @@
#include "common.h"
-QByteArray PadByteArray(QByteArray original, int newLength, char padWith) {
+QByteArray PadByteArray(const QByteArray original, int newLength, char padWith) {
QByteArray newArray = original;
if (original.length() > newLength) {
@@ -91,6 +91,30 @@ QStringList ReadStringList(QDataStream &in) {
return output;
}
+void WriteStringList(QDataStream &out, const QStringList list) {
+ out << (quint16)list.count();
+ WritePadding(2, out);
+
+ // calculate offsets for every string, and write them
+ // offset 0 points to the first entry in the offset list, etc, so
+ // take that into account for the string offset calculation
+ quint32 currentOffset = list.count() * 8;
+
+ foreach (QString str, list) {
+ out << (quint32)currentOffset;
+ WritePadding(4, out); // unused?
+
+ currentOffset += str.length() + 1;
+ }
+
+ // now write the strings
+ foreach (QString str, list) {
+ QByteArray rawStr = str.toAscii();
+ rawStr.append('\0');
+ out.writeRawData(rawStr.constData(), rawStr.length());
+ }
+}
+
QString ReadFixedLengthASCII(QDataStream &in, int length) {
QByteArray readStr(length, '\0');
in.readRawData(readStr.data(), readStr.length());
@@ -102,7 +126,7 @@ QString ReadFixedLengthASCII(QDataStream &in, int length) {
return str;
}
-void WriteFixedLengthASCII(QDataStream &out, QString str, int length) {
+void WriteFixedLengthASCII(QDataStream &out, const QString str, int length) {
QByteArray paddedStr = PadByteArray(str.toAscii(), length);
out.writeRawData(paddedStr.constData(), paddedStr.length());
}
diff --git a/wii/common.h b/wii/common.h
index 34f1526..b440841 100644
--- a/wii/common.h
+++ b/wii/common.h
@@ -64,7 +64,7 @@ inline void ReadRGBA8Color(QColor &out, QDataStream &in) {
out = RGBAToColor(col);
}
-inline void WriteRGBA8Color(QColor &in, QDataStream &out) {
+inline void WriteRGBA8Color(const QColor in, QDataStream &out) {
out << (quint32)ColorToRGBA(in);
}
@@ -77,7 +77,7 @@ inline void ReadS10Color(QColor &out, QDataStream &in) {
out.setRgb(r, g, b, a);
}
-inline void WriteS10Color(QColor &in, QDataStream &out) {
+inline void WriteS10Color(const QColor in, QDataStream &out) {
out << (quint16)in.red();
out << (quint16)in.green();
out << (quint16)in.blue();
@@ -103,6 +103,7 @@ inline void InitDataStream(QDataStream &stream) {
}
QStringList ReadStringList(QDataStream &in);
+void WriteStringList(QDataStream &out, QStringList list);
QString ReadFixedLengthASCII(QDataStream &in, int length);
void WriteFixedLengthASCII(QDataStream &out, QString str, int length);
diff --git a/wii/filesystem.cpp b/wii/filesystem.cpp
index 09fe207..014b693 100644
--- a/wii/filesystem.cpp
+++ b/wii/filesystem.cpp
@@ -38,16 +38,16 @@ void WiiFSObject::unlinkFromParent() {
this->parent = 0;
}
-bool WiiFSObject::nameIsEqual(QString check) {
+bool WiiFSObject::nameIsEqual(QString check) const {
return (bool)(QString::compare(this->name, check, Qt::CaseInsensitive) == 0);
}
-bool WiiFSObject::isFile() { return false; }
-bool WiiFSObject::isDirectory() { return false; }
+bool WiiFSObject::isFile() const { return false; }
+bool WiiFSObject::isDirectory() const { return false; }
/******************************************************************************/
-bool WiiFile::isFile() { return true; }
+bool WiiFile::isFile() const { return true; }
/******************************************************************************/
@@ -56,9 +56,9 @@ WiiDirectory::~WiiDirectory() {
delete ptr;
}
-bool WiiDirectory::isDirectory() { return true; }
+bool WiiDirectory::isDirectory() const { return true; }
-WiiFSObject *WiiDirectory::findByName(QString name, bool recursive) {
+WiiFSObject *WiiDirectory::findByName(QString name, bool recursive) const {
foreach (WiiFSObject *obj, children) {
if (obj->nameIsEqual(name))
return obj;
@@ -108,7 +108,7 @@ WiiFSObject *WiiDirectory::resolvePath(QString path) {
if (pathComponents.isEmpty()) {
// we've reached the end \o/
- return nextObj;
+ return (WiiFSObject *)nextObj;
}
// verify that this object is a directory
diff --git a/wii/filesystem.h b/wii/filesystem.h
index 1a7ecfa..7527a7d 100644
--- a/wii/filesystem.h
+++ b/wii/filesystem.h
@@ -32,10 +32,10 @@ public:
void unlinkFromParent();
- bool nameIsEqual(QString check);
+ bool nameIsEqual(QString check) const;
- virtual bool isFile();
- virtual bool isDirectory();
+ virtual bool isFile() const;
+ virtual bool isDirectory() const;
protected:
@@ -50,7 +50,7 @@ public:
QByteArray data;
- bool isFile();
+ bool isFile() const;
};
/******************************************************************************/
@@ -62,9 +62,9 @@ public:
QList<WiiFSObject *> children;
- bool isDirectory();
+ bool isDirectory() const;
- WiiFSObject *findByName(QString name, bool recursive);
+ WiiFSObject *findByName(QString name, bool recursive) const;
WiiFSObject *resolvePath(QString path);
bool addChild(WiiFSObject *obj);
};
diff --git a/wii/stringtablebuilder.cpp b/wii/stringtablebuilder.cpp
index 679247c..d1f2d2b 100644
--- a/wii/stringtablebuilder.cpp
+++ b/wii/stringtablebuilder.cpp
@@ -20,6 +20,6 @@ quint32 WiiStringTableBuilder::add(QString str) {
return added;
}
-QByteArray WiiStringTableBuilder::pack() {
+QByteArray WiiStringTableBuilder::pack() const {
return m_data;
}
diff --git a/wii/stringtablebuilder.h b/wii/stringtablebuilder.h
index f416a37..4fce60f 100644
--- a/wii/stringtablebuilder.h
+++ b/wii/stringtablebuilder.h
@@ -11,7 +11,7 @@ public:
WiiStringTableBuilder();
quint32 add(QString str);
- QByteArray pack();
+ QByteArray pack() const;
protected:
int m_nextOffset;