diff --git a/MeshConverter/MeshConverter.vcxproj b/MeshConverter/MeshConverter.vcxproj
index 11b194e..784a06a 100644
--- a/MeshConverter/MeshConverter.vcxproj
+++ b/MeshConverter/MeshConverter.vcxproj
@@ -80,6 +80,7 @@
+
@@ -89,6 +90,7 @@
+
diff --git a/MeshConverter/src/ms3d/ms3d.cpp b/MeshConverter/src/ms3d/ms3d.cpp
index 3c5bb35..71a0982 100644
--- a/MeshConverter/src/ms3d/ms3d.cpp
+++ b/MeshConverter/src/ms3d/ms3d.cpp
@@ -2,6 +2,8 @@
#include
+#include "../util/files.h"
+
Ms3d::Ms3d()
{
m_numVertices = 0;
@@ -104,7 +106,7 @@ bool Ms3d::Load(const std::string &file)
Ms3dMesh *mesh = &m_meshes[i];
fread(&mesh->editorFlags, 1, 1, fp);
- fread(&mesh->name, 32, 1, fp);
+ ReadString(fp, mesh->name, 32);
fread(&mesh->numTriangles, 2, 1, fp);
mesh->triangles = new unsigned short[mesh->numTriangles];
for (int j = 0; j < mesh->numTriangles; ++j)
@@ -122,7 +124,7 @@ bool Ms3d::Load(const std::string &file)
{
Ms3dMaterial *material = &m_materials[i];
- fread(&material->name, 32, 1, fp);
+ ReadString(fp, material->name, 32);
for (int j = 0; j < 4; ++j)
fread(&material->ambient[j], 4, 1, fp);
for (int j = 0; j < 4; ++j)
@@ -134,8 +136,8 @@ bool Ms3d::Load(const std::string &file)
fread(&material->shininess, 4, 1, fp);
fread(&material->transparency, 4, 1, fp);
fread(&material->mode, 1, 1, fp);
- fread(&material->texture, 128, 1, fp);
- fread(&material->alpha, 128, 1, fp);
+ ReadString(fp, material->texture, 128);
+ ReadString(fp, material->alpha, 128);
}
}
@@ -153,8 +155,8 @@ bool Ms3d::Load(const std::string &file)
Ms3dJoint *joint = &m_joints[i];
fread(&joint->editorFlags, 1, 1, fp);
- fread(&joint->name, 32, 1, fp);
- fread(&joint->parentName, 32, 1, fp);
+ ReadString(fp, joint->name, 32);
+ ReadString(fp, joint->parentName, 32);
fread(&joint->rotation.x, 4, 1, fp);
fread(&joint->rotation.y, 4, 1, fp);
fread(&joint->rotation.z, 4, 1, fp);
diff --git a/MeshConverter/src/ms3d/ms3d.h b/MeshConverter/src/ms3d/ms3d.h
index 0c91ba5..5d202b8 100644
--- a/MeshConverter/src/ms3d/ms3d.h
+++ b/MeshConverter/src/ms3d/ms3d.h
@@ -32,7 +32,7 @@ struct Ms3dTriangle
struct Ms3dMesh
{
unsigned char editorFlags;
- char name[32];
+ std::string name;
unsigned short numTriangles;
unsigned short *triangles;
char materialIndex;
@@ -50,7 +50,7 @@ struct Ms3dMesh
struct Ms3dMaterial
{
- char name[32];
+ std::string name;
float ambient[4];
float diffuse[4];
float specular[4];
@@ -58,8 +58,8 @@ struct Ms3dMaterial
float shininess;
float transparency;
char mode;
- char texture[128];
- char alpha[128];
+ std::string texture;
+ std::string alpha;
};
struct Ms3dKeyFrame
@@ -71,8 +71,8 @@ struct Ms3dKeyFrame
struct Ms3dJoint
{
unsigned char editorFlags;
- char name[32];
- char parentName[32];
+ std::string name;
+ std::string parentName;
Vector3 rotation;
Vector3 position;
unsigned short numRotationFrames;
diff --git a/MeshConverter/src/util/files.cpp b/MeshConverter/src/util/files.cpp
new file mode 100644
index 0000000..52bcd5c
--- /dev/null
+++ b/MeshConverter/src/util/files.cpp
@@ -0,0 +1,25 @@
+#include "files.h"
+
+void ReadString(FILE *fp, std::string &buffer, int fixedLength)
+{
+ char c;
+
+ if (fixedLength > 0)
+ {
+ for (int i = 0; i < fixedLength; ++i)
+ {
+ fread(&c, 1, 1, fp);
+ if (c != '\0')
+ buffer += c;
+ }
+ }
+ else
+ {
+ do
+ {
+ fread(&c, 1, 1, fp);
+ if (c != '\0')
+ buffer += c;
+ } while (c != '\0');
+ }
+}
diff --git a/MeshConverter/src/util/files.h b/MeshConverter/src/util/files.h
new file mode 100644
index 0000000..4c79e99
--- /dev/null
+++ b/MeshConverter/src/util/files.h
@@ -0,0 +1,9 @@
+#ifndef __UTIL_FILES_H_INCLUDED__
+#define __UTIL_FILES_H_INCLUDED__
+
+#include
+#include
+
+void ReadString(FILE *fp, std::string &buffer, int fixedLength = 0);
+
+#endif