static char *
get_string(const char *where)
{
- if (data[pos + 1] == 0 && data[pos + 2] == 0 && data[pos + 3] == 0
+ if (1
+ /*data[pos + 1] == 0 && data[pos + 2] == 0 && data[pos + 3] == 0*/
/*&& all_ascii(&data[pos + 4], data[pos])*/)
{
- int len = data[pos];
+ int len = data[pos] + data[pos + 1] * 256;
char *s = malloc(len + 1);
memcpy(s, &data[pos + 4], len);
s[len] = 0;
- pos += 4 + data[pos];
+ pos += 4 + len;
return s;
}
else
printf ("value \"%s\" format %d(%d.%d) var \"%s\" vallab \"%s\"",
value, format >> 16, (format >> 8) & 0xff, format & 0xff, var, vallab);
}
+ else if (match_byte (5))
+ {
+ match_byte_assert (0x58);
+ printf ("variable \"%s\"", get_string());
+ get_string();
+ if (!match_byte(1) && !match_byte(2))
+ match_byte_assert(3);
+ match_byte (0);
+ match_byte (0);
+ match_byte (0);
+ match_byte (0);
+ }
+ else if (match_byte(0x31))
+ {
+ if (match_u32 (1))
+ {
+ printf("(footnote %d) ", get_u32());
+ match_byte_assert (0);
+ match_byte_assert (0);
+ int subn = get_u32 ();
+ printf ("nested %d bytes", subn);
+ pos += subn;
+ }
+ else
+ {
+ match_u32_assert (0);
+ match_u32_assert (0);
+ int subn = get_u32 ();
+ printf ("nested %d bytes", subn);
+ pos += subn;
+ }
+ char *base = get_string();
+ int x = get_u32();
+ printf ("\"%s\"; %d variables:\n", base, x);
+ if (match_u32(0))
+ {
+ for (int i = 0; i < x; i++)
+ {
+ dump_value (0);
+ putchar('\n');
+ }
+ }
+ else
+ {
+ for (int i = 0; i < x; i++)
+ {
+ int y = get_u32();
+ match_u32_assert(0);
+ for (int j = 0; j <= 0; j++)
+ printf (" ");
+ printf("variable %d has %d values:\n", i, y);
+ for (int j = 0; j < y; j++)
+ {
+ if (match_byte(3))
+ {
+ char *a = get_string();
+ match_byte_assert(0x58);
+ char *b = get_string();
+ char *c = get_string();
+ for (int k = 0; k <= 1; k++)
+ printf (" ");
+ printf ("\"%s\", \"%s\", \"%s\"", a, b, c);
+ match_byte(0);
+ match_byte(0);
+ match_byte(0);
+ match_byte(0);
+ match_byte(0);
+ }
+ else
+ dump_value (0);
+ putchar('\n');
+ }
+ }
+ }
+ }
else
- dump_value(0);
+ {
+ match_byte_assert (0x58);
+ char *base = get_string();
+ int x = get_u32();
+ printf ("\"%s\" with %d variables:\n", base, x);
+ if (match_u32(0))
+ {
+ for (int i = 0; i < x; i++)
+ {
+ dump_value (1);
+ putchar('\n');
+ }
+ }
+ else
+ {
+ for (int i = 0; i < x; i++)
+ {
+ int y = get_u32();
+ match_u32_assert(0);
+ for (int j = 0; j <= 0; j++)
+ printf (" ");
+ printf("variable %d has %d values:\n", i, y);
+ for (int j = 0; j < y; j++)
+ {
+ if (match_byte(3))
+ {
+ char *a = get_string();
+ match_byte_assert(0x58);
+ char *b = get_string();
+ char *c = get_string();
+ for (int k = 0; k <= 1; k++)
+ printf (" ");
+ printf ("\"%s\", \"%s\", \"%s\"", a, b, c);
+ match_byte(0);
+ match_byte(0);
+ match_byte(0);
+ match_byte(0);
+ match_byte(0);
+ }
+ else
+ dump_value (1);
+ putchar('\n');
+ }
+ }
+ }
+ }
putchar('\n');
}
}
{
if (i + 5 <= n
&& data[i]
- && !data[i + 1]
+ //&& !data[i + 1]
&& !data[i + 2]
&& !data[i + 3]
- && i + 4 + data[i] <= n
- && all_ascii(&data[i + 4], data[i]))
+ && i + 4 + data[i] + data[i + 1] * 256 <= n
+ && all_ascii(&data[i + 4], data[i] + data[i + 1] * 256))
{
fputs("\n\"", stdout);
- fwrite(&data[i + 4], 1, data[i], stdout);
+ fwrite(&data[i + 4], 1, data[i] + data[i + 1] * 256, stdout);
fputs("\" ", stdout);
- i += 4 + data[i];
+ i += 4 + data[i] + data[i + 1] * 256;
}
else if (i + 12 <= n
&& data[i + 1] == 40