aboutsummaryrefslogtreecommitdiff
path: root/Source
diff options
context:
space:
mode:
authorrelnev <relnev@5198baeb-e213-0410-be47-fc2ff85ca46f>2003-01-08 09:52:19 +0000
committerrelnev <relnev@5198baeb-e213-0410-be47-fc2ff85ca46f>2003-01-08 09:52:19 +0000
commit507a7479adb2cab5218bbb64950b739dcd79b6d5 (patch)
tree6e45861e91df133f156fdf216167e588497784ac /Source
parent8efed35df02822682576bae088f5b6a5c78e8dc9 (diff)
downloadblackshades-507a7479adb2cab5218bbb64950b739dcd79b6d5.tar.gz
completed FSRead serialization
git-svn-id: svn://svn.icculus.org/blackshades/trunk@45 5198baeb-e213-0410-be47-fc2ff85ca46f
Diffstat (limited to 'Source')
-rw-r--r--Source/Files.h3
-rw-r--r--Source/Serialize.cpp23
-rw-r--r--Source/Serialize.h1
-rw-r--r--Source/Skeleton.cpp122
-rw-r--r--Source/Support.h1
5 files changed, 68 insertions, 82 deletions
diff --git a/Source/Files.h b/Source/Files.h
index 726db04..67fde24 100644
--- a/Source/Files.h
+++ b/Source/Files.h
@@ -79,13 +79,12 @@ class Files
#else
int sFile;
#endif
- long lSize;
#ifdef MAC
short OpenFile(Str255 Name);
#else
int OpenFile(Str255 Name);
- Files() : sFile(-1), lSize(0) { }
+ Files() : sFile(-1) { }
#endif
#ifdef MAC
diff --git a/Source/Serialize.cpp b/Source/Serialize.cpp
index 3826a3f..cc92897 100644
--- a/Source/Serialize.cpp
+++ b/Source/Serialize.cpp
@@ -6,12 +6,29 @@
/* these all read big-endian data */
+int ReadBool(int fd, int count, bool *b)
+{
+ while (count--) {
+ unsigned char buf[1];
+
+ if (read(fd, buf, 1) != 1) {
+ STUB_FUNCTION;
+ }
+
+ *b = (buf[0] != 0) ? true : false;
+
+ b++;
+ }
+}
+
int ReadShort(int fd, int count, short *s)
{
while (count--) {
unsigned char buf[2];
- read(fd, buf, 2);
+ if (read(fd, buf, 2) != 2) {
+ STUB_FUNCTION;
+ }
*s = (short)((buf[0] << 8) | buf[1]);
@@ -24,7 +41,9 @@ int ReadInt(int fd, int count, int *s)
while (count--) {
unsigned char buf[4];
- read(fd, buf, 2);
+ if (read(fd, buf, 4) != 4) {
+ STUB_FUNCTION;
+ }
*s = (int)((buf[0] << 24) | (buf[1] << 16) | (buf[2] << 8) | buf[3]);
diff --git a/Source/Serialize.h b/Source/Serialize.h
index b50aad3..4ecb46d 100644
--- a/Source/Serialize.h
+++ b/Source/Serialize.h
@@ -3,6 +3,7 @@
/* these all read big-endian data */
+int ReadBool(int fd, int count, bool *b);
int ReadShort(int fd, int count, short *s);
int ReadInt(int fd, int count, int *s);
int ReadFloat(int fd, int count, float *f);
diff --git a/Source/Skeleton.cpp b/Source/Skeleton.cpp
index 041d07a..f962c8d 100644
--- a/Source/Skeleton.cpp
+++ b/Source/Skeleton.cpp
@@ -1,6 +1,8 @@
/**> HEADER FILES <**/
#include "Skeleton.h"
+#include "Serialize.h"
+
extern double multiplier;
extern unsigned int gSourceID[100];
extern unsigned int gSampleSet[100];
@@ -461,33 +463,27 @@ void Animation::Load(char *fileName)
float placeholder[3];
files.OpenFile((unsigned char*)fileName);
if(files.sFile){
- files.lSize=sizeof(numframes);
- FSRead( files.sFile, &files.lSize, &numframes);
+ ReadInt(files.sFile, 1, &numframes);
for(int i=0;i<numframes;i++){
- files.lSize=sizeof(XYZ);
for(int j=0;j<max_joints;j++){
- FSRead( files.sFile, &files.lSize, &position[j][i]);
+ ReadXYZ(files.sFile, 1, &position[j][i]);
}
- files.lSize=sizeof(float);
for(int j=0;j<max_joints;j++){
- FSRead( files.sFile, &files.lSize, &twist[j][i]);
+ ReadFloat(files.sFile, 1, &twist[j][i]);
}
- files.lSize=sizeof(bool);
for(int j=0;j<max_joints;j++){
- FSRead( files.sFile, &files.lSize, &onground[j][i]);
+ ReadBool(files.sFile, 1, &onground[j][i]);
}
- files.lSize=sizeof(float);
- FSRead( files.sFile, &files.lSize, &speed[i]);
- files.lSize=sizeof(float);
- FSRead( files.sFile, &files.lSize, &gunrotation[i]);
+ ReadFloat(files.sFile, 1, &speed[i]);
+ ReadFloat(files.sFile, 1, &gunrotation[i]);
}
for(int i=0;i<numframes;i++){
- files.lSize=sizeof(float);
for(int j=0;j<max_joints;j++){
- FSRead( files.sFile, &files.lSize, &twist2[j][i]);
+ ReadFloat(files.sFile, 1, &twist2[j][i]);
}
}
}
+
files.EndLoad();
for(int j=0;j<numframes;j++){
@@ -611,31 +607,24 @@ void Animation::Load(char *fileName, float rotate)
float placeholder[3];
files.OpenFile((unsigned char*)fileName);
if(files.sFile){
- files.lSize=sizeof(numframes);
- FSRead( files.sFile, &files.lSize, &numframes);
+ ReadInt(files.sFile, 1, &numframes);
for(int i=0;i<numframes;i++){
- files.lSize=sizeof(XYZ);
for(int j=0;j<max_joints;j++){
- FSRead( files.sFile, &files.lSize, &position[j][i]);
+ ReadXYZ(files.sFile, 1, &position[j][i]);
position[j][i]=DoRotation(position[j][i],0,rotate,0);
}
- files.lSize=sizeof(float);
for(int j=0;j<max_joints;j++){
- FSRead( files.sFile, &files.lSize, &twist[j][i]);
+ ReadFloat(files.sFile, 1, &twist[j][i]);
}
- files.lSize=sizeof(bool);
for(int j=0;j<max_joints;j++){
- FSRead( files.sFile, &files.lSize, &onground[j][i]);
+ ReadBool(files.sFile, 1, &onground[j][i]);
}
- files.lSize=sizeof(float);
- FSRead( files.sFile, &files.lSize, &speed[i]);
- files.lSize=sizeof(float);
- FSRead( files.sFile, &files.lSize, &gunrotation[i]);
+ ReadFloat(files.sFile, 1, &speed[i]);
+ ReadFloat(files.sFile, 1, &gunrotation[i]);
}
for(int i=0;i<numframes;i++){
- files.lSize=sizeof(float);
for(int j=0;j<max_joints;j++){
- FSRead( files.sFile, &files.lSize, &twist2[j][i]);
+ ReadFloat(files.sFile, 1, &twist2[j][i]);
}
}
}
@@ -760,72 +749,51 @@ void Animation::Load(char *fileName, float rotate)
void Skeleton::Load(char *fileName)
{
int parentID;
- int what;
+ bool what;
bool lock;
float placeholder[3];
files.OpenFile((unsigned char*)fileName);
if(files.sFile){
- files.lSize=sizeof(num_joints);
- FSRead( files.sFile, &files.lSize, &num_joints);
+ ReadInt(files.sFile, 1, &num_joints);
for(int i=0;i<num_joints;i++){
- files.lSize=sizeof(XYZ);
- FSRead( files.sFile, &files.lSize, &joints[i].position);
- files.lSize=sizeof(float);
- FSRead( files.sFile, &files.lSize, &joints[i].length);
- files.lSize=sizeof(float);
- FSRead( files.sFile, &files.lSize, &joints[i].mass);
- files.lSize=sizeof(bool);
- FSRead( files.sFile, &files.lSize, &joints[i].hasparent);
- files.lSize=sizeof(bool);
- FSRead( files.sFile, &files.lSize, &joints[i].locked);
- files.lSize=sizeof(int);
- FSRead( files.sFile, &files.lSize, &joints[i].modelnum);
- files.lSize=sizeof(bool);
- FSRead( files.sFile, &files.lSize, &joints[i].visible);
- files.lSize=sizeof(bool);
- FSRead( files.sFile, &files.lSize, &what);
- files.lSize=sizeof(int);
- FSRead( files.sFile, &files.lSize, &joints[i].label);
- files.lSize=sizeof(int);
- FSRead( files.sFile, &files.lSize, &joints[i].hasgun);
- files.lSize=sizeof(bool);
- FSRead( files.sFile, &files.lSize, &joints[i].lower);
- files.lSize=sizeof(int);
- FSRead( files.sFile, &files.lSize, &parentID);
+ ReadXYZ(files.sFile, 1, &joints[i].position);
+ ReadFloat(files.sFile, 1, &joints[i].length);
+ ReadFloat(files.sFile, 1, &joints[i].mass);
+ ReadBool(files.sFile, 1, &joints[i].hasparent);
+ ReadBool(files.sFile, 1, &joints[i].locked);
+ ReadInt(files.sFile, 1, &joints[i].modelnum);
+ ReadBool(files.sFile, 1, &joints[i].visible);
+ ReadBool(files.sFile, 1, &what);
+ ReadInt(files.sFile, 1, &joints[i].label);
+ ReadInt(files.sFile, 1, &joints[i].hasgun);
+ ReadBool(files.sFile, 1, &joints[i].lower);
+ ReadInt(files.sFile, 1, &parentID);
if(joints[i].hasparent)joints[i].parent=&joints[parentID];
joints[i].velocity=0;
joints[i].oldposition=joints[i].position;
joints[i].existing=1;
}
- files.lSize=sizeof(num_muscles);
- FSRead( files.sFile, &files.lSize, &num_muscles);
+
+ ReadInt(files.sFile, 1, &num_muscles);
for(int i=0;i<num_muscles;i++){
- files.lSize=sizeof(float);
- FSRead( files.sFile, &files.lSize, &muscles[i].length);
- files.lSize=sizeof(float);
- FSRead( files.sFile, &files.lSize, &muscles[i].targetlength);
- files.lSize=sizeof(float);
- FSRead( files.sFile, &files.lSize, &muscles[i].minlength);
- files.lSize=sizeof(float);
- FSRead( files.sFile, &files.lSize, &muscles[i].maxlength);
- files.lSize=sizeof(float);
- FSRead( files.sFile, &files.lSize, &muscles[i].strength);
- files.lSize=sizeof(int);
- FSRead( files.sFile, &files.lSize, &muscles[i].type);
- files.lSize=sizeof(bool);
- FSRead( files.sFile, &files.lSize, &muscles[i].visible);
- files.lSize=sizeof(int);
- FSRead( files.sFile, &files.lSize, &parentID);
+ ReadFloat(files.sFile, 1, &muscles[i].length);
+ ReadFloat(files.sFile, 1, &muscles[i].targetlength);
+ ReadFloat(files.sFile, 1, &muscles[i].minlength);
+ ReadFloat(files.sFile, 1, &muscles[i].maxlength);
+ ReadFloat(files.sFile, 1, &muscles[i].strength);
+ ReadInt(files.sFile, 1, &muscles[i].type);
+ ReadBool(files.sFile, 1, &muscles[i].visible);
+ ReadInt(files.sFile, 1, &parentID);
muscles[i].parent1=&joints[parentID];
- FSRead( files.sFile, &files.lSize, &parentID);
+ ReadInt(files.sFile, 1, &parentID);
muscles[i].parent2=&joints[parentID];
}
- files.lSize=sizeof(int);
+
for(int j=0;j<3;j++){
- FSRead( files.sFile, &files.lSize, &forwardjoints[j]);
+ ReadInt(files.sFile, 1, &forwardjoints[j]);
}
for(int j=0;j<3;j++){
- FSRead( files.sFile, &files.lSize, &lowforwardjoints[j]);
+ ReadInt(files.sFile, 1, &lowforwardjoints[j]);
}
}
files.EndLoad();
diff --git a/Source/Support.h b/Source/Support.h
index 9a79101..14d0e70 100644
--- a/Source/Support.h
+++ b/Source/Support.h
@@ -34,7 +34,6 @@ typedef struct Point
#define Random rand
#define SetFPos(fildes, whence, offset) lseek(fildes, offset, whence)
#define FSClose(fildes) close(fildes)
-#define FSRead(fildes, count, buf) read(fildes, buf, *count)
void Microseconds(UnsignedWide *microTickCount);
void GetMouse(Point *p);