private TreeNode GetProperties(int n)
{
TreeNode res = new TreeNode("Properties");
int pos = 0x00;
try
{
byte[] data = Owner.Exports[n].Data;
int test = BitConverter.ToInt32(data, 8);
if (test == 0)
pos = 0x04;
else
pos = 0x08;
if ((Flags & 0x02000000) != 0)
pos = 0x1A;
while (true)
{
int idxname = BitConverter.ToInt32(data, pos);
if (Owner.getNameEntry(idxname) == "None" || Owner.getNameEntry(idxname) == "")
break;
int idxtype = BitConverter.ToInt32(data, pos + 8);
int size = BitConverter.ToInt32(data, pos + 16);
if (size == 0)
size = 1; //boolean fix
if (Owner.getNameEntry(idxtype) == "StructProperty")
size += 8;
if (Owner.getNameEntry(idxtype) == "ByteProperty")
size += 8;
string s = pos.ToString("X8") + " " + Owner.getNameEntry(idxname) + " (" + Owner.getNameEntry(idxtype) + ") : ";
switch (Owner.getNameEntry(idxtype))
{
case "ObjectProperty":
case "IntProperty":
int val = BitConverter.ToInt32(data, pos + 24);
s += val.ToString();
break;
case "NameProperty":
case "StructProperty":
int name = BitConverter.ToInt32(data, pos + 24);
s += Owner.getNameEntry(name);
break;
case "FloatProperty":
float f = BitConverter.ToSingle(data, pos + 24);
s += f.ToString();
break;
case "BoolProperty":
s += (data[pos + 24] == 1).ToString();
break;
case "StrProperty":
int len = BitConverter.ToInt32(data, pos + 24);
for (int i = 0; i < len - 1; i++)
s += (char)data[pos + 28 + i];
break;
}
res.Nodes.Add(s);
pos += 24 + size;
if (pos > data.Length)
{
pos -= 24 + size;
break;
}
}
}
catch (Exception e)
{
MessageBox.Show(e.ToString());
}
res.Nodes.Add(pos.ToString("X8") + " None");
return res;
}