+ static const int record_prefix[] = {
+ 0xff, 0xff, 0x00, 0x00,
+ };
+ size_t record_prefix_len = sizeof record_prefix / sizeof *record_prefix;
+ if (match_bytes(pos, record_prefix, record_prefix_len))
+ {
+ if (prev_end != pos)
+ {
+ //printf ("%04x ", prev_end);
+ hex_dump (stdout, prev_end, pos - prev_end);
+ }
+
+ putchar ('\n');
+
+ //printf ("%d ", pos % 4);
+ int len = record_prefix_len;
+ int slen = data[pos + 4] + (data[pos + 5] << 8);
+ if (slen > 2 && slen < 256 && all_utf8((char *) &data[pos + 6], slen))
+ {
+ printf ("%.*s ", slen, &data[pos + 6]);
+ len = slen + 6;
+ }
+ else
+ printf ("notitle ");
+
+ pos += len - 1;
+ prev_end = pos + 1;
+ continue;
+ }
+
+ static const int number_prefix[] = {
+ 0x80, 0x02
+ };
+ size_t number_prefix_len = sizeof number_prefix / sizeof *number_prefix;
+ if (match_bytes(pos, number_prefix, number_prefix_len))
+ {
+ if (prev_end != pos)
+ {
+ //printf ("%04x ", prev_end);
+ hex_dump (stdout, prev_end, pos - prev_end);
+ }
+ prev_end = pos;
+
+ double d = *(double *) &data[pos + number_prefix_len];
+ printf ("float%f ", d);
+ pos += 10 - 9;
+ prev_end = pos + 1;
+ continue;
+ }
+
+ static const int string_prefix[] = {
+ 0x80, 0x01, 0x02, 0x28, 0x05, 0x00, 0x01
+ };
+ size_t string_prefix_len = sizeof string_prefix / sizeof *string_prefix;
+ if (match_bytes(pos, string_prefix, string_prefix_len) && data[pos + string_prefix_len] != 255)
+ {
+ if (prev_end != pos)
+ {
+ //printf ("%04x ", prev_end);
+ hex_dump (stdout, prev_end, pos - prev_end);
+ }
+ prev_end = pos;
+
+ printf ("\nstring %.*s\n", (int) data[pos + 7], &data[pos + 8]);
+ }
+ if (match_bytes(pos, string_prefix, string_prefix_len) && data[pos + string_prefix_len] == 255)
+ {
+ if (prev_end != pos)
+ {
+ //printf ("%04x ", prev_end);
+ hex_dump (stdout, prev_end, pos - prev_end);
+ }
+ prev_end = pos;
+
+ int len = data[pos + 8] + (data[pos + 9] << 8);
+ printf ("\nlongstring %.*s\n", len, &data[pos + 10]);
+ }
+
+
+
+#if 0