From 37863a726a0a5f4ee1867e9577b6f7bc6491b742 Mon Sep 17 00:00:00 2001 From: gered Date: Sat, 12 Feb 2011 02:18:32 -0500 Subject: [PATCH] ms3d strings are now read into std::string's instead of char arrays --- MeshConverter/MeshConverter.vcxproj | 2 ++ MeshConverter/src/ms3d/ms3d.cpp | 14 ++++++++------ MeshConverter/src/ms3d/ms3d.h | 12 ++++++------ MeshConverter/src/util/files.cpp | 25 +++++++++++++++++++++++++ MeshConverter/src/util/files.h | 9 +++++++++ 5 files changed, 50 insertions(+), 12 deletions(-) create mode 100644 MeshConverter/src/util/files.cpp create mode 100644 MeshConverter/src/util/files.h 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