mirror of https://github.com/aap/librw.git
95 lines
1.4 KiB
C++
95 lines
1.4 KiB
C++
#include <cstdio>
|
|
#include <cstdlib>
|
|
#include <cstring>
|
|
|
|
#include <iostream>
|
|
#include <fstream>
|
|
#include <list>
|
|
|
|
#include "rwbase.h"
|
|
#include "rwplugin.h"
|
|
#include "rw.h"
|
|
|
|
using namespace std;
|
|
|
|
//
|
|
// X - Plugin of Clump
|
|
//
|
|
struct X
|
|
{
|
|
Rw::int32 a;
|
|
Rw::int32 b;
|
|
};
|
|
|
|
void*
|
|
ctorX(void *object, int offset, int)
|
|
{
|
|
X *x = PLUGINOFFSET(X, object, offset);
|
|
x->a = 123;
|
|
x->b = 789;
|
|
return object;
|
|
}
|
|
|
|
void*
|
|
dtorX(void *object, int, int)
|
|
{
|
|
return object;
|
|
}
|
|
|
|
void*
|
|
cctorX(void *dst, void *src, int offset, int)
|
|
{
|
|
X *srcx = PLUGINOFFSET(X, src, offset);
|
|
X *dstx = PLUGINOFFSET(X, dst, offset);
|
|
dstx->a = srcx->a;
|
|
dstx->b = srcx->b;
|
|
return dst;
|
|
}
|
|
|
|
Rw::int32
|
|
getSizeX(void *, int, int)
|
|
{
|
|
return 8;
|
|
}
|
|
|
|
void
|
|
writeX(ostream &stream, Rw::int32, void *object, int offset, int)
|
|
{
|
|
X *x = PLUGINOFFSET(X, object, offset);
|
|
Rw::writeInt32(x->a, stream);
|
|
Rw::writeInt32(x->b, stream);
|
|
}
|
|
|
|
void
|
|
readX(istream &stream, Rw::int32, void *object, int offset, int)
|
|
{
|
|
X *x = PLUGINOFFSET(X, object, offset);
|
|
x->a = Rw::readInt32(stream);
|
|
x->b = Rw::readInt32(stream);
|
|
}
|
|
|
|
int
|
|
main(int argc, char *argv[])
|
|
{
|
|
// Rw::Version = 0x31000;
|
|
// Rw::Build = 0;
|
|
|
|
registerNodeNamePlugin();
|
|
registerMeshPlugin();
|
|
Rw::Clump *c;
|
|
|
|
ifstream in(argv[1], ios::binary);
|
|
Rw::FindChunk(in, Rw::ID_CLUMP, NULL, NULL);
|
|
c = Rw::Clump::streamRead(in);
|
|
in.close();
|
|
|
|
ofstream out("out.dff", ios::binary);
|
|
c->streamWrite(out);
|
|
out.close();
|
|
|
|
delete c;
|
|
|
|
return 0;
|
|
|
|
}
|