Editing CXML structure
Jump to navigation
Jump to search
The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then publish the changes below to finish undoing the edit.
Latest revision | Your text | ||
Line 1: | Line 1: | ||
== XML implicit structure Overview == | == XML implicit structure Overview == | ||
<source lang="cpp"> | <source lang="cpp"> | ||
namespace cxml | namespace cxml | ||
{ | |||
struct Header { /*header of a cxml document*/ | |||
char magic[4]; | |||
int version; | |||
int tree_offset; | |||
int tree_size; | |||
int idstrtable_offset; | |||
int idstrtable_size; | |||
int idinttable_offset; | |||
int idinttable_size; | |||
int stringtable_offset; | |||
int stringtable_size; | |||
int styleidtable_offset; | |||
int styleidtable_size; | |||
int intarraytable_offset; | |||
int intarraytable_size; | |||
int floatarraytable_offset; | |||
int floatarraytable_size; | |||
int filetable_offset; | |||
int filetable_size; | |||
}; | |||
struct ChildElementBin | |||
{ | |||
int name; | |||
int attr_num; | |||
int parent; | |||
int prev; | |||
int next; | |||
int first_child; | |||
int last_child; | |||
}; | |||
struct BrotherElementBin | |||
{ | |||
int name; | |||
int attr_num; | |||
int parent; | |||
int prev; | |||
int next; | |||
}; | |||
struct AttributeBin | |||
{ | |||
int INTEGER = 1; | |||
int FLOAT = 2; | |||
int STRING = 3; | |||
int unk = 4; | |||
int STYLE_ID = 5; | |||
int INTEGER_ARRAY = 6; | |||
int FLOAT_ARRAY = 7; | |||
int DATA = 8; | |||
int ID_STR_REF = 9; | |||
int ID_STR_NO_REF = 10; | |||
int ID_INT_REF = 11; | |||
int ID_INT_NO_REF = 12; | |||
int name; | |||
int type; | |||
struct StringData | |||
{ | |||
int offset; | |||
int len; | |||
}; | |||
struct IntArrayData | |||
{ | |||
int offset; | |||
int num; | |||
}; | |||
struct FloatArrayData | |||
{ | |||
int offset; | |||
int num; | |||
}; | |||
struct FileData | |||
{ | |||
int offset; | |||
int size; | |||
}; | |||
union | |||
{ | |||
int i; | |||
float f; | |||
StringData s; | |||
IntArrayData ia; | |||
FloatArrayData fa; | |||
FileData file; | |||
int id; | |||
int idref; | |||
}; | |||
}; | |||
struct IDBin | |||
{ | |||
int entity_offset; | |||
char id[0]; | |||
}; | |||
enum AllocationType | |||
{ | |||
AllocationType_Alloc_Tree, | |||
AllocationType_Alloc_IDSTRTable, | |||
AllocationType_Alloc_IDINTTable, | |||
AllocationType_Alloc_StringTable, | |||
AllocationType_Alloc_IntArrayTable, | |||
AllocationType_Alloc_FloatArrayTable, | |||
AllocationType_Alloc_FileTable, | |||
AllocationType_Alloc_StyleIDTable, | |||
AllocationType_Free_Tree, | |||
AllocationType_Free_IDSTRTable, | |||
AllocationType_Free_IDINTTable, | |||
AllocationType_Free_StringTable, | |||
AllocationType_Free_IntArrayTable, | |||
AllocationType_Free_FloatArrayTable, | |||
AllocationType_Free_FileTable, | |||
AllocationType_AFree_StyleIDTable, | |||
}; | |||
enum AccessMode | |||
{ | |||
AccessMode_ReadWrite, | |||
AccessMode_ReadOnly_File, | |||
AccessMode_ReadOnly_Memory, | |||
}; | |||
class Document { | |||
public: | |||
typedef void (*Allocator)( AllocationType type, void * userdata, void * old_addr, unsigned int required_size, void ** addr, unsigned int * size ); | |||
private: | |||
AccessMode access_mode; | |||
Header header; | |||
char * tree; | |||
unsigned int tree_capacity; | |||
char * idstrtable; | |||
unsigned int idstrtable_capacity; | |||
char * idinttable; | |||
unsigned int idinttable_capacity; | |||
char * stringtable; | |||
unsigned int stringtable_capacity; | |||
int * intarraytable; | |||
unsigned int intarraytable_capacity; | |||
float * floatarraytable; | |||
unsigned int floatarraytable_capacity; | |||
char * filetable; | |||
unsigned int filetable_capacity; | |||
char * styleidtable; | |||
unsigned int styleidtable_capacity; | |||
Allocator allocator; | |||
void * allocator_userdata; | |||
}; | |||
class Element { | |||
private: | |||
Document * doc; | |||
int offset; | |||
}; | |||
class Attribute { | |||
private: | |||
Document * doc; | |||
int element_offset; | |||
int offset; | |||
}; | |||
}; | }; | ||
</source> | </source> | ||
Line 216: | Line 185: | ||
| 0x08 || 0x04 || Parent relative offset in '''TOC''' | | 0x08 || 0x04 || Parent relative offset in '''TOC''' | ||
|- | |- | ||
| 0x0C || 0x04 || Previous | | 0x0C || 0x04 || Previous Brother relative offset in '''TOC''' | ||
|- | |- | ||
| 0x10 || 0x04 || Next | | 0x10 || 0x04 || Next Brother relative offset in '''TOC''' | ||
|- | |- | ||
| 0x14 || 0x04 || First child relative offset in '''TOC''' | | 0x14 || 0x04 || First child relative offset in '''TOC''' | ||
Line 224: | Line 193: | ||
| 0x18 || 0x04 || Last child relative offset in '''TOC''' | | 0x18 || 0x04 || Last child relative offset in '''TOC''' | ||
|} | |} | ||
{| class="wikitable" style="text-align:center;" | {| class="wikitable" style="text-align:center;" | ||
|+ CXML | |+ CXML Brother Element definition | ||
! Offset !! Length !! usage | ! Offset !! Length !! usage | ||
|- | |- | ||
Line 237: | Line 204: | ||
| 0x08 || 0x04 || Parent relative offset in '''TOC''' | | 0x08 || 0x04 || Parent relative offset in '''TOC''' | ||
|- | |- | ||
| | | 0x1C || 0x04 || Previous Brother relative offset in '''TOC''' | ||
|- | |- | ||
| 0x10 || 0x04 || Next | | 0x10 || 0x04 || Next Brother relative offset in '''TOC''' | ||
|} | |} | ||
*NOTE: The '''Child Element''' defination describe the Child Element and his Attributes where the '''Brother Element''' describe the Brother Element and his Attributes. | |||
So the full order to read will be '''Child Element''' >>> '''Attributes''', '''Brother Element''' >>> '''Attributes'''. The Root (so offset 0x00) of any SonyPlaystation Resource file always start's with a Child element to read. | |||
NOTE: | |||
===Attribute=== | ===Attribute=== | ||
Line 255: | Line 218: | ||
|- | |- | ||
! Attribute type<BR />(offset 0x4, length 0x4) | ! Attribute type<BR />(offset 0x4, length 0x4) | ||
! 1<BR />(Single Integer | ! 1<BR />(Single Integer) !! 2<BR />(Single Float) !! 3<BR />(String) !! 4<BR />(analysing...) !! 5<BR />(ID STYLE) !! 6<BR />(Integer Array) !! 7<BR />(Float Array) !! 8<BR />(File) !! 9<BR />(ID STR w lpb Ref) !! A<BR />(ID STR wo lpb Ref) !! B<BR />(ID INT w lpb Ref) !! C<BR />(ID INT wo lpb Ref) | ||
|- | |- | ||
! variable 1<BR />(offset 0x8, length 0x4) | ! variable 1<BR />(offset 0x8, length 0x4) | ||
| Integer value || Float value || '''Strings Table''' offset || | | Integer value || Float value || '''Strings Table''' offset || analysing... || '''ID STYLE Table''' offset || '''Integer Arrays Table''' offset || '''Float Arrays Table''' offset || '''Files Table''' offset || '''ID STR Table''' offset || '''ID STR Table''' offset || '''ID INT Table''' offset || '''ID INT Table''' offset | ||
|- | |- | ||
! variable 2<BR />(offset 0xC, length 0x4) | ! variable 2<BR />(offset 0xC, length 0x4) | ||
| {{cellcolors|#ffaaaa}} | | {{cellcolors|#ffaaaa}} Not used <abbr title="(always 0 in the samples found)">(always 0)</abbr> || {{cellcolors|#ffaaaa}} Not used <abbr title="(always 0 in the samples found)">(always 0)</abbr> || String length || analysing... || Nr. of int's to read (always 4) || Nr. of int's to read || Nr. of float's to read || File size || {{cellcolors|#ffaaaa}} Not used <abbr title="(always 0 in the samples found)">(always 0)</abbr> || {{cellcolors|#ffaaaa}} Not used <abbr title="(always 0 in the samples found)">(always 0)</abbr> || {{cellcolors|#ffaaaa}} Not used <abbr title="(always 0 in the samples found)">(always 0)</abbr> || {{cellcolors|#ffaaaa}} Not used <abbr title="(always 0 in the samples found)">(always 0)</abbr> | ||
|} | |} | ||
* w = with || wo = without || lpb = loopback | * w = with || wo = without || lpb = loopback | ||
Line 272: | Line 235: | ||
*Note: That xml below isn't perfect right now. Especially the values from <styletable> need to be corrected. I'll change the xml here as soon i finished the CXML Tool and got a nice correct xml written out. | *Note: That xml below isn't perfect right now. Especially the values from <styletable> need to be corrected. I'll change the xml here as soon i finished the CXML Tool and got a nice correct xml written out. | ||
<source lang="xml"> | <source lang="xml"> | ||
<?xml version="1.0" encoding="UTF- | <?xml version="1.0" encoding="UTF-8"?> | ||
<resource version="0.1" type="normal"> | <resource version="0.1" type="normal"> | ||
<stringtable> | <stringtable> |