wax-viewer/waxloader.cpp
2024-02-22 19:38:30 +02:00

306 lines
4.6 KiB
C++

#include "waxloader.h"
void Wax::loadconfig(char*s)
{
char *s2;
int i;
char *buf;
s=strstr(s,"root");
s=strstr(s,"\"");
s+=1;
s2=s;
s2=(strstr(s2,","));
i=s2-s;
buf = new char[i];
for(int c=0; c<i; c++)
{
buf[c]=*(s+c);
}
bcx=atof(buf);
bcx/=255.0f;
delete buf;
s+=(i+1);
s2=s;
s2=(strstr(s2,","));
i=s2-s;
buf = new char[i];
for(int c=0; c<i; c++)
{
buf[c]=*(s+c);
}
bcy=atof(buf);
bcy/=255.0f;
delete buf;
s+=(i+1);
s2=s;
s2=(strstr(s2,"\""));
i=s2-s;
buf = new char[i];
for(int c=0; c<i; c++)
{
buf[c]=*(s+c);
}
bcz=atof(buf);
bcz/=255.0f;
delete buf;
s=strstr(s,"angle");
s=strstr(s,"\"");
s+=1;
s2=s;
s2=(strstr(s2,","));
i=s2-s;
buf = new char[i];
for(int c=0; c<i; c++)
{
buf[c]=*(s+c);
}
anglex=atof(buf);
delete buf;
s+=(i+1);
s2=s;
s2=(strstr(s2,"\""));
i=s2-s;
buf = new char[i];
for(int c=0; c<i; c++)
{
buf[c]=*(s+c);
}
angley=atof(buf);
delete buf;
s=strstr(s,"radius");
s=strstr(s,"\"");
s+=1;
s2=s;
s2=(strstr(s2,"\""));
i=s2-s;
buf = new char[i];
for(int c=0; c<i; c++)
{
buf[c]=*(s+c);
}
radius=atof(buf);
delete buf;
}
void Wax::loadprim(char*&s,Prim& p)
{
char *s2;
int i;
char *buf;
s=strstr(s,"object");
s=strstr(s,"\"");
s+=1;
s2=s;
s2=(strstr(s2,"\""));
i=s2-s;
buf = new char[i];
for(int c=0; c<i; c++)
{
buf[c]=*(s+c);
}
p=*new Prim(buf);
delete buf;
s+=i;
s=strstr(s,"location");
s=strstr(s,"\"");
s+=1;
s2=s;
s2=(strstr(s2,","));
i=s2-s;
buf = new char[i];
for(int c=0; c<i; c++)
{
buf[c]=*(s+c);
}
p.lx=atof(buf);
delete buf;
s+=(i+1);
s2=s;
s2=(strstr(s2,","));
i=s2-s;
buf = new char[i];
for(int c=0; c<i; c++)
{
buf[c]=*(s+c);
}
p.ly=atof(buf);
delete buf;
s+=(i+1);
s2=s;
s2=(strstr(s2,"\""));
i=s2-s;
buf = new char[i];
for(int c=0; c<i; c++)
{
buf[c]=*(s+c);
}
p.lz=atof(buf);
delete buf;
s+=i;
s=strstr(s,"rotation");
s=strstr(s,"\"");
s+=1;
s2=s;
s2=(strstr(s2,","));
i=s2-s;
buf = new char[i];
for(int c=0; c<i; c++)
{
buf[c]=*(s+c);
}
p.rx=atof(buf);
delete buf;
s+=(i+1);
s2=s;
s2=(strstr(s2,","));
i=s2-s;
buf = new char[i];
for(int c=0; c<i; c++)
{
buf[c]=*(s+c);
}
p.ry=atof(buf);
delete buf;
s+=(i+1);
s2=s;
s2=(strstr(s2,"\""));
i=s2-s;
buf = new char[i];
for(int c=0; c<i; c++)
{
buf[c]=*(s+c);
}
p.rz=atof(buf);
delete buf;
s+=i;
s=strstr(s,"scale");
s=strstr(s,"\"");
s+=1;
s2=s;
s2=(strstr(s2,","));
i=s2-s;
buf = new char[i];
for(int c=0; c<i; c++)
{
buf[c]=*(s+c);
}
p.sx=atof(buf);
delete buf;
s+=(i+1);
s2=s;
s2=(strstr(s2,","));
i=s2-s;
buf = new char[i];
for(int c=0; c<i; c++)
{
buf[c]=*(s+c);
}
p.sy=atof(buf);
delete buf;
s+=(i+1);
s2=s;
s2=(strstr(s2,"\""));
i=s2-s;
buf = new char[i];
for(int c=0; c<i; c++)
{
buf[c]=*(s+c);
}
p.sz=atof(buf);
delete buf;
s+=i;
s=strstr(s,"color");
s=strstr(s,"\"");
s+=1;
s2=s;
s2=(strstr(s2,","));
i=s2-s;
buf = new char[i];
for(int c=0; c<i; c++)
{
buf[c]=*(s+c);
}
p.cx=atof(buf);
p.cx/=255.0f;
delete buf;
s+=(i+1);
s2=s;
s2=(strstr(s2,","));
i=s2-s;
buf = new char[i];
for(int c=0; c<i; c++)
{
buf[c]=*(s+c);
}
p.cy=atof(buf);
p.cy/=255.0f;
delete buf;
s+=(i+1);
s2=s;
s2=(strstr(s2,"\""));
i=s2-s;
buf = new char[i];
for(int c=0; c<i; c++)
{
buf[c]=*(s+c);
}
p.cz=atof(buf);
p.cz/=255.0f;
delete buf;
s+=i;
}
Wax::Wax(char* path)
{
FILE* f = fopen( path, "rb" );
long len=0;
char* string;
fseek(f,0,SEEK_END);
len = ftell(f);
fclose(f);
f = fopen( path, "rb" );
string = new char[len];
fread(string,1,len,f);
fclose(f);
count=0;
char *s=string;
loadconfig(s);
while((s=strstr(s,(char*)"<object"))!=NULL)
{
count++;
*s+=strlen((char*)"<object");
}
s=string;
p=new Prim[count];
for(int i=0; i<count; i++)
{
loadprim(s,p[i]);
}
}