#include "Models.h"
#include "Quaternions.h"
#include "Serialize.h"
#include <unistd.h>
/* these all read big-endian data */
int ReadShort(int fd, int count, short *s)
{
while (count--) {
unsigned char buf[2];
read(fd, buf, 2);
*s = (short)((buf[0] << 8) | buf[1]);
s++;
}
}
int ReadInt(int fd, int count, int *s)
{
while (count--) {
unsigned char buf[4];
read(fd, buf, 2);
*s = (int)((buf[0] << 24) | (buf[1] << 16) | (buf[2] << 8) | buf[3]);
s++;
}
}
union intfloat {
int i;
float f;
} intfloat;
int ReadFloat(int fd, int count, float *f)
{
union intfloat infl;
while (count--) {
ReadInt(fd, 1, &(infl.i));
*f = infl.f;
f++;
}
}
int ReadXYZ(int fd, int count, XYZ *xyz)
{
while (count--) {
ReadFloat(fd, 1, &(xyz->x));
ReadFloat(fd, 1, &(xyz->y));
ReadFloat(fd, 1, &(xyz->z));
xyz++;
}
}
int ReadTexturedTriangle(int fd, int count, TexturedTriangle *tt)
{
while (count--) {
ReadShort(fd, 3, tt->vertex);
ReadFloat(fd, 1, &(tt->r));
ReadFloat(fd, 1, &(tt->g));
ReadFloat(fd, 1, &(tt->b));
tt++;
}
}