mirror of https://github.com/zeldaret/tp.git
111 lines
3.3 KiB
C++
111 lines
3.3 KiB
C++
#ifndef STB_DATA_PARSE_H
|
|
#define STB_DATA_PARSE_H
|
|
|
|
#include "JSystem/JGadget/binary.h"
|
|
#include "JSystem/JStudio/JStudio/stb-data.h"
|
|
|
|
using namespace JGadget::binary;
|
|
|
|
namespace JStudio {
|
|
namespace stb {
|
|
namespace data {
|
|
|
|
// Parses a THeader
|
|
class TParse_THeader : public TParseData_aligned<4> {
|
|
public:
|
|
TParse_THeader(const void* p) : TParseData_aligned<4>(p) {}
|
|
|
|
const THeader* get() const { return (THeader*)getRaw(); }
|
|
const void* getContent() const { return ((THeader*)getRaw())->content; }
|
|
const char* get_signature() const { return get()->signature; }
|
|
u16 get_byteOrder() const { return get()->byte_order; }
|
|
u16 get_version() const { return get()->version; }
|
|
u32 get_blockNumber() const { return get()->block_number; }
|
|
};
|
|
|
|
class TParse_TBlock : public TParseData_aligned<4> {
|
|
public:
|
|
TParse_TBlock(const void* content) : TParseData_aligned<4>(content) {}
|
|
|
|
const TBlock* get() const { return (TBlock*)getRaw(); }
|
|
const TBlock* getNext() const { return (TBlock*)((u8*)getRaw() + get_size()); }
|
|
|
|
u32 get_size() const { return get()->size; }
|
|
u32 get_type() const { return get()->type; }
|
|
};
|
|
|
|
class TParse_TSequence : public TParseData_aligned<4> {
|
|
public:
|
|
struct TData {
|
|
/* 0x00 */ u8 type;
|
|
/* 0x04 */ u32 param;
|
|
/* 0x08 */ const void* content;
|
|
/* 0x0C */ const void* next;
|
|
};
|
|
|
|
TParse_TSequence(const void* content) : TParseData_aligned<4>(content) {}
|
|
/* 802899BC */ void getData(TData*) const;
|
|
|
|
const void* get() const { return getRaw(); }
|
|
u32 get_head() const { return *(u32*)get(); }
|
|
};
|
|
|
|
class TParse_TParagraph : public TParseData_aligned<4> {
|
|
public:
|
|
struct TData {
|
|
/* 0x00 */ u32 type;
|
|
/* 0x04 */ u32 param;
|
|
/* 0x08 */ const void* content;
|
|
/* 0x0C */ const void* next;
|
|
};
|
|
|
|
TParse_TParagraph(const void* content) : TParseData_aligned<4>(content) {}
|
|
/* 80289A08 */ void getData(TData*) const;
|
|
};
|
|
|
|
struct TParse_TParagraph_data : public TParseData_aligned<4> {
|
|
struct TData {
|
|
/* 0x00 */ u8 _0;
|
|
/* 0x04 */ u32 _4;
|
|
/* 0x08 */ u32 _8;
|
|
/* 0x0C */ const void* _c;
|
|
/* 0x10 */ const void* _10;
|
|
};
|
|
|
|
TParse_TParagraph_data(const void* content) : TParseData_aligned<4>(content) {}
|
|
/* 80289A80 */ void getData(TData*) const;
|
|
};
|
|
|
|
// Parses a TObject ("demo object")
|
|
class TParse_TBlock_object : public TParse_TBlock {
|
|
public:
|
|
TParse_TBlock_object(const void* content) : TParse_TBlock(content) {}
|
|
|
|
const TBlock_object* get() const { return (TBlock_object*)getRaw(); }
|
|
const void* getContent() const {
|
|
return ((TBlock_object*)getRaw())->id + align_roundUp(get_IDSize(), 4);
|
|
}
|
|
|
|
u16 get_flag() const { return get()->flag; }
|
|
u16 get_IDSize() const { return get()->id_size; }
|
|
const void* get_ID() const { return get()->id; }
|
|
};
|
|
|
|
class TParse_TParagraph_dataID : public TParseData_aligned<4> {
|
|
public:
|
|
TParse_TParagraph_dataID(const void* pContent) : TParseData_aligned<4>(pContent) {}
|
|
|
|
const TParagraph* get() const { return (TParagraph*)getRaw(); }
|
|
u16 get_IDSize() const { return get()->id_size; }
|
|
const void* get_ID() const { return get()->id; }
|
|
const void* getContent() const {
|
|
return ((TParagraph*)getRaw())->id + align_roundUp(get_IDSize(), 4);
|
|
}
|
|
};
|
|
|
|
} // namespace data
|
|
} // namespace stb
|
|
} // namespace JStudio
|
|
|
|
#endif /* STB_DATA_PARSE_H */
|