#define match_string2_assert(x) match_string2_assert(x, WHERE)
static char *
-get_string(const char *where)
+get_string4(const char *where)
{
if (1
/*data[pos + 1] == 0 && data[pos + 2] == 0 && data[pos + 3] == 0*/
exit(1);
}
}
-#define get_string() get_string(WHERE)
+#define get_string4() get_string4(WHERE)
+
+static char *
+get_padded_string(int len)
+{
+ char *s = xmemdup0(&data[pos], len);
+ pos += len;
+ return s;
+}
static char *
get_string_be(const char *where)
}
}
+static void
+parse_format(void)
+{
+ int d = data[pos++];
+ int w = data[pos++];
+ int fmt = data[pos++];
+ char buf[32];
+ printf ("%s%d.%d", format_name(fmt, buf), w, d);
+}
+
static void
parse_heading(const char *name)
{
}
static void
-match_zeros_assert(int count)
+match_zeros_assert(int count, const char *where)
{
for (int i = 0; i < count; i++)
if (data[pos + i])
{
fprintf (stderr,
- "%#x: expected %d zeros here but offset %d is %#"PRIx8"\n",
- pos, count, i, data[pos + i]);
+ "%s: %#x: expected %d zeros here but offset %d is %#"PRIx8"\n",
+ where, pos, count, i, data[pos + i]);
exit (1);
}
pos += count;
}
+#define match_zeros_assert(count) match_zeros_assert(count, WHERE)
static void
parse_DspString(void)
printf ("DspString(\"%s\")\n", get_string1());
}
+static void
+match_DspString(void)
+{ /* 05 80 */
+ match_byte_assert(5);
+ match_byte_assert(0x80);
+ parse_DspString();
+}
+
+static void
+match_DspSimpleText(void)
+{ /* 03 80 */
+ match_byte_assert(3);
+ match_byte_assert(0x80);
+ match_zeros_assert(10);
+}
+
+static void
+match_NavTreeViewItem(void)
+{ /* 07 80 */
+ match_byte_assert(7);
+ match_byte_assert(0x80);
+ match_zeros_assert(1);
+ if (!match_byte(0) && !match_byte(7))
+ match_byte_assert(8);
+ match_zeros_assert(3);
+ pos++;
+ match_byte_assert(0);
+ match_byte_assert(1);
+ match_zeros_assert(3);
+ if (!match_byte(0))
+ match_byte_assert(1);
+ match_zeros_assert(5);
+ match_byte_assert(1);
+ match_zeros_assert(5);
+ puts(get_string1());
+}
+
int
main(int argc, char *argv[])
{
parse_DspString();
parse_heading("NavTreeViewItem");
-
+ match_byte_assert(0);
+ match_u32_assert(0);
+ match_byte_assert(2);
+ match_byte_assert(0);
+ match_byte_assert(1);
+ match_zeros_assert(9);
+ match_u32_assert(1);
+ assert (pos == 0xb0);
+
+ pos += 0x28;
+ match_zeros_assert(5);
+ if (match_u32(8500))
+ match_u32_assert(11000);
+ else
+ {
+ match_u32_assert(11000);
+ match_u32_assert(8500);
+ }
+ pos = 0x105;
+ match_string1_assert("(Continued)");
+ match_byte_assert(1);
+ match_byte_assert(1);
+ match_zeros_assert(3);
+ get_string4(); /* page title */
+ match_byte_assert(1);
+ match_byte_assert(1);
+ match_zeros_assert(3);
+ get_string4(); /* page number */
+ match_byte_assert(0);
+ pos += 2;
+ match_u16_assert(2);
+
+ parse_heading("NavLog");
+ pos = 0x36b;
+ puts(get_padded_string(32));
+ if (!match_u32(80))
+ match_u32_assert(132);
+ match_zeros_assert(8);
+ match_u32_assert(1);
+ get_string4();
+ match_byte_assert(0);
+
+ parse_heading("NavHead");
+ match_byte_assert(2);
+ match_zeros_assert(24);
+ match_u32_assert(1);
+ match_u32_assert(0);
+ match_DspSimpleText();
+ match_DspString();
+ match_NavTreeViewItem();
+ match_zeros_assert(3);
+
+ parse_heading("NavTitle");
+ pos += 33;
+ match_DspSimpleText();
+ match_DspString();
+ match_NavTreeViewItem();
+
+ match_byte_assert(1);
+ match_byte_assert(1);
+ match_u32_assert(-19);
+ match_zeros_assert(12);
+ match_byte_assert(0xbc);
+ match_byte_assert(2);
+ match_zeros_assert(9);
+ match_byte_assert(0x22);
+ puts(get_padded_string(32));
+ match_u32_assert(80);
+ match_zeros_assert(8);
+ match_u32_assert(1);
+ get_string4();
+ match_byte_assert(0);
+
+ parse_heading("NavNote");
+ match_byte_assert(2);
+ match_zeros_assert(8);
+ match_u32_assert(24);
+ if (!match_u32(0))
+ match_u32_assert(-40);
+ pos += 8;
+ match_u32_assert(2);
+ match_u32_assert(1);
+ match_DspSimpleText();
+ match_DspString();
+ match_NavTreeViewItem();
+ match_byte_assert(1);
+
+ parse_heading("PTPivotController");
+ match_byte_assert(2);
+ pos += 8;
+ match_u32_assert(100);
+ match_u32_assert(100);
+ match_u32_assert(100);
+ match_u32_assert(100);
+
+ parse_heading("PVPivotView");
+ match_u32_assert(5);
+ match_byte_assert(0);
+
+ parse_heading("PMPivotModel");
+ match_byte_assert(3);
+
+ parse_heading("NDimensional__DspCell");
+ match_byte_assert(0);
+ match_u32_assert(1);
+
+ parse_heading("IndexedCollection");
+ match_byte_assert(0);
+ pos++;
+ match_zeros_assert(3);
+ match_byte_assert(1);
+ match_byte_assert(0);
+
+ parse_heading("DspCell");
+ match_byte_assert(0);
+ match_DspSimpleText();
+
+ parse_heading("DspNumber");
+ match_byte_assert(1);
+ parse_format();
+ match_byte_assert(0x80);
+ match_byte(2);
+ printf (" %f", get_double());
+ printf (" \"%s\"\n", get_string1());
printf ("%#x: end of successful parse\n", pos);