parse_category(1, j, &n_leaves);
}
+static void skip_item(const char *name);
+
static void
parse_PMModelItemInfo(void)
{
for (int i = 0; i < n_dims; i++)
parse_dimension(i);
printf("%#x: end of model\n", pos);
- exit(0);
+
+ int n_units16 = get_u32();
+ match_u16_assert(0);
+ for (int j = 0; j < n_units16; j++)
+ get_u16();
+
+ n_units16 = get_u32();
+ match_u16_assert(1);
+ for (int j = 0; j < n_units16; j++)
+ get_u16();
+
+ match_byte_assert(0);
+ int n_units32 = get_u32();
+ match_u16_assert(0);
+ for (int j = 0; j < n_units32; j++)
+ match_u32_assert(j);
+
+ skip_item("end of PMModelItemInfo");
}
static void
{
int start_pos = pos;
printf("%#x: skipping %s bytes...", pos, name);
- while (data[pos + 1] != 0x80
+ while (pos < n
+ && data[pos + 1] != 0x80
&& !(data[pos] == 0xff && data[pos + 1] == 0xff
&& data[pos + 2] == 0 && data[pos + 3] == 0))
{
- assert(pos < n);
pos++;
}
printf("until %#x:", pos);
hex_dump(stdout, start_pos, pos - start_pos);
}
+static void
+parse_DspAnnotation(void)
+{
+ match_zeros_assert(10);
+ match_u32_assert(1);
+}
+
+static void
+parse_DspTextComponentHandle(void)
+{
+ match_byte_assert(0);
+ match_DspString();
+ printf("after DspTextComponentHandle: ");
+ for (int i = 0; ; i++)
+ if (!memcmp(&data[pos + 6 + i], "PVView", 6))
+ {
+ hex_dump(stdout, pos, i);
+ exit(0);
+ }
+}
+
static void
parse_flexible(void)
{
parse_PVCellStyle();
else if (!strcmp(heading, "PVTextStyle"))
exit(0);
+ else if (!strcmp(heading, "DspAnnotation"))
+ parse_DspAnnotation();
+ else if (!strcmp(heading, "DspTextComponentHandle"))
+ parse_DspTextComponentHandle();
else
{
fprintf(stderr, "don't know %s at offset 0x%x: ", heading, start);
else if (data[pos] == 0x5 && data[pos + 1] == 0x80)
match_DspString();
else if (data[pos] == 0x7 && data[pos + 1] == 0x80)
- match_NavTreeViewItem();
+ {
+ if (0)
+ match_NavTreeViewItem();
+ else
+ {
+ pos += 2;
+ skip_item("NavTreeViewItem");
+ }
+ }
else if (data[pos] == 0x3 && data[pos + 1] == 0x80)
match_DspSimpleText();
else if ((data[pos] == 0x3c || data[pos] == 0x39)
match_u32_assert(1);
match_byte_assert(0x63);
- for (;;)
+ while (pos < n)
{
if (data[pos] == 0)
{
match_byte_assert(0);
match_zeros_assert(7);
- while (data[pos] != 1)
+ while (pos < n)
{
if (data[pos] == 0)
{