X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=dump.c;h=96611d976e2da517fa48dbbbc3d2d46aa321dd9a;hb=f5abc4d9b95aed4e1ab2734eec9e40cccb0547d8;hp=0a92002672de550e728b21e251850807d6ff87f9;hpb=06fb48cc02983b8b0d7a3d55321ca6a5ba6f684c;p=pspp diff --git a/dump.c b/dump.c index 0a92002672..96611d976e 100644 --- a/dump.c +++ b/dump.c @@ -127,15 +127,16 @@ match_byte_assert(uint8_t b, const char *where) 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 @@ -152,6 +153,9 @@ dump_value(int level) for (int i = 0; i <= level; i++) printf (" "); + match_byte (0); + match_byte (0); + match_byte (0); match_byte (0); if (match_byte (3)) { @@ -163,20 +167,37 @@ dump_value(int level) 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 + else if (match_u32 (2)) { - match_u32_assert (2); printf("(special 2)"); match_byte_assert(0); match_byte_assert(0); match_u32_assert(1); match_byte_assert(0); match_byte_assert(0); + int subn = get_u32 (); + printf ("nested %d bytes", subn); + pos += subn; + } + else + { + match_u32_assert(3); + printf("(special 3)"); + match_byte_assert(0); + match_byte_assert(0); + match_byte_assert(1); + match_byte_assert(0); + int subn = get_u32 (); + printf ("nested %d bytes, ", subn); + pos += subn; + subn = get_u32 (); + printf ("nested %d bytes, ", subn); + pos += subn; } - int subn = get_u32 (); - printf ("nested %d bytes", subn); - pos += subn; } else match_byte_assert (0x58); @@ -186,6 +207,7 @@ dump_value(int level) match_byte (0); match_byte (0); match_byte (1); + match_byte (1); match_byte (0); match_byte (0); match_byte (0); @@ -196,8 +218,8 @@ dump_value(int level) match_byte_assert (0x58); printf ("variable \"%s\"", get_string()); get_string(); - if (!match_byte (3)) - match_byte_assert (2); + if (!match_byte(1) && !match_byte(2)) + match_byte_assert(3); match_byte (0); match_byte (0); match_byte (0); @@ -216,8 +238,11 @@ dump_value(int level) vallab = get_string (); printf ("value %g format %d(%d.%d) var \"%s\" vallab \"%s\"", value, format >> 16, (format >> 8) & 0xff, format & 0xff, var, vallab); - if (!match_u32 (3)) - match_u32_assert (2); + if (!match_byte (1) && !match_byte(2)) + match_byte_assert (3); + match_byte (0); + match_byte (0); + match_byte (0); match_byte (0); match_byte (0); match_byte (0); @@ -232,7 +257,8 @@ dump_value(int level) format = get_u32 (); vallab = get_string (); var = get_string (); - match_byte_assert (2); + if (!match_byte(1) && !match_byte(2)) + match_byte_assert (3); value = get_string (); printf ("value \"%s\" format %d(%d.%d) var \"%s\" vallab \"%s\"", value, format >> 16, (format >> 8) & 0xff, format & 0xff, var, vallab); @@ -246,7 +272,20 @@ dump_value(int level) unsigned int format; double value; - match_byte_assert (0x58); + 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_byte_assert (0x58); format = get_u32 (); value = get_double (); printf ("value %g format %d(%d.%d)", value, format >> 16, (format >> 8) & 0xff, format & 0xff); @@ -258,49 +297,113 @@ dump_value(int level) } else if (match_byte (0x31)) { - int subn; - int total_subs = 1; - - match_u32_assert (0); - match_u32_assert (0); - subn = get_u32 (); - printf ("nested %d bytes", subn); - pos += subn; - printf ("; \"%s\", substitutions:", get_string()); - for (;;) + if (match_u32 (1)) { - int n_subst = get_u32(); - if (!n_subst) - break; - printf (" %d", n_subst); - total_subs *= n_subst; + printf("(footnote %d) ", get_u32()); + match_byte_assert (0); + match_byte_assert (0); + int subn = get_u32 (); + printf ("nested %d bytes", subn); + pos += subn; } - - for (int i = 0; i < total_subs; i++) + else { - putc ('\n', stdout); - dump_value (level + 1); + 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 (level+1); + putchar('\n'); + } + } + else + { + for (int i = 0; i < x; i++) + { + int y = get_u32(); + match_u32_assert(0); + for (int j = 0; j <= level; 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 <= level + 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 (level+1); + putchar('\n'); + } + } } } else { - int total_subs = 1; match_byte_assert (0x58); - printf ("\"%s\" with substitutions:", get_string()); - for (;;) + char *base = get_string(); + int x = get_u32(); + printf ("\"%s\" with %d variables:\n", base, x); + if (match_u32(0)) { - int n_subst = get_u32(); - if (!n_subst) - break; - printf (" %d", n_subst); - total_subs *= n_subst; + for (int i = 0; i < x; i++) + { + dump_value (level+1); + putchar('\n'); + } } - - for (int i = 0; i < total_subs; i++) + else { - putc ('\n', stdout); - dump_value (level + 1); + for (int i = 0; i < x; i++) + { + int y = get_u32(); + match_u32_assert(0); + for (int j = 0; j <= level; 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 <= level + 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 (level+1); + putchar('\n'); + } + } } } } @@ -377,7 +480,6 @@ dump_dim_value(int level) else { int subn; - int total_subs = 1; match_byte (0); match_byte_assert (0x31); @@ -387,14 +489,14 @@ dump_dim_value(int level) printf ("nested %d bytes", subn); pos += subn; printf ("; \"%s\", substitutions:", get_string()); - for (;;) + int total_subs = get_u32(); + int x = get_u32(); + if (x) { - int n_subst = get_u32(); - if (!n_subst) - break; - printf (" %d", n_subst); - total_subs *= n_subst; + total_subs = (total_subs - 1) + x; + match_u32_assert (0); } + printf (" (total %d)", total_subs); for (int i = 0; i < total_subs; i++) { @@ -425,7 +527,8 @@ dump_category(int level) else if (match_byte (1)) { match_byte (0); - match_u32_assert (1); + if (!match_u32 (2)) + match_u32_assert (1); match_byte (0); get_u32(); } @@ -455,7 +558,7 @@ dump_dim(void) match_byte_assert(0x58); get_string(); printf("string \"%s\": ", get_string()); - match_byte_assert(1); + match_byte(1) || match_byte(0); } else if (match_byte(5)) { @@ -465,12 +568,11 @@ dump_dim(void) if (!match_byte(2)) match_byte_assert(3); } - else + else if (match_byte(0x31)) { int subn; int total_subs = 1; - match_byte_assert(0x31); match_u32_assert (0); match_u32_assert (0); subn = get_u32 (); @@ -492,11 +594,35 @@ dump_dim(void) dump_dim_value (0); } } + else + { + int total_subs = 1; + + match_byte_assert (0x58); + printf ("\"%s\" with substitutions:", get_string()); + for (;;) + { + int n_subst = get_u32(); + if (!n_subst) + break; + printf (" %d", n_subst); + total_subs *= n_subst; + } + + for (int i = 0; i < total_subs; i++) + { + putc ('\n', stdout); + dump_dim_value (0); + } + } + + /* This byte is usually 0x02 but 0x00 and 0x75 (!) have also been spotted. */ + pos++; - match_byte_assert(0); if (!match_byte(0) && !match_byte(1)) match_byte_assert(2); - match_u32_assert(2); + if (!match_u32(0)) + match_u32_assert(2); if (!match_byte(0)) match_byte_assert(1); match_byte(0); @@ -514,11 +640,11 @@ dump_dim(void) dump_category (0); } +int n_dims; static void dump_dims(void) { - int n_dims = get_u32(); - + n_dims = get_u32(); printf ("%u dimensions\n", n_dims); for (int i = 0; i < n_dims; i++) { @@ -527,6 +653,635 @@ dump_dims(void) } } +static void +dump_data(void) +{ +#if 1 + int a[16]; + for (int i = 0; i < 3 + n_dims; i++) + a[i] = get_u32(); + printf ("data intro:"); + for (int i = 0; i < 3 + n_dims; i++) + printf(" %d", a[i]); + printf("\n"); +#else + fprintf (stderr,"data intro (%d dims):", n_dims); + for (int i = 0; i < 3+n_dims; i++) + fprintf (stderr," %d", get_u32()); + fprintf(stderr,"\n"); +#endif + int x = get_u32(); + printf ("%d data values, starting at %08x\n", x, pos); + for (int i = 0; i < x; i++) + { + printf("%08x, index %d:\n", pos, get_u32()); + match_u32_assert(0); + match_byte(0); + match_byte(0); + match_byte(0); + match_byte(0); + if (match_byte (1)) + { + unsigned int format; + double value; + + if (match_byte (0x31)) + { + if (match_u32 (0)) + { + if (match_u32 (1)) + get_string(); + else + match_u32_assert (0); + int subn = get_u32 (); + printf ("nested %d bytes", subn); + pos += subn; + } + else 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(2); + printf("(special 2)"); + match_byte_assert(0); + match_byte_assert(0); + match_u32_assert(1); + match_byte_assert(0); + match_byte_assert(0); + int subn = get_u32 (); + printf ("nested %d bytes", subn); + pos += subn; + } + } + else + match_byte_assert (0x58); + format = get_u32 (); + value = get_double (); + printf (" value %g format %d(%d.%d)", value, format >> 16, (format >> 8) & 0xff, format & 0xff); + } + else if (match_byte (3)) + { + get_string(); + if (match_byte (0x31)) + { + if (match_u32 (0)) + { + match_u32_assert (1); + get_string (); + int subn = get_u32 (); + printf ("nested %d bytes", subn); + pos += subn; + } + else 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 if (match_u32 (2)) + { + printf("(special 2)"); + match_byte_assert(0); + match_byte_assert(0); + match_u32_assert(1); + match_byte_assert(0); + match_byte_assert(0); + int subn = get_u32 (); + printf ("nested %d bytes", subn); + pos += subn; + } + else + { + match_u32_assert(3); + printf("(special 3)"); + match_byte_assert(0); + match_byte_assert(0); + match_byte_assert(1); + match_byte_assert(0); + int subn = get_u32 (); + printf ("nested %d bytes, ", subn); + pos += subn; + subn = get_u32 (); + printf ("nested %d bytes, ", subn); + pos += subn; + } + } + else + match_byte_assert (0x58); + get_string(); + printf("string \"%s\"", get_string()); + match_byte (0); + } + else if (match_byte (2)) + { + unsigned int format; + char *var, *vallab; + double value; + + match_byte_assert (0x58); + format = get_u32 (); + value = get_double (); + var = get_string (); + vallab = get_string (); + printf ("value %g format %d(%d.%d) var \"%s\" vallab \"%s\"", + value, format >> 16, (format >> 8) & 0xff, format & 0xff, var, vallab); + if (!match_byte (1) && !match_byte(2)) + match_byte_assert (3); + } + else if (match_byte (4)) + { + unsigned int format; + char *var, *vallab, *value; + + match_byte_assert (0x58); + format = get_u32 (); + vallab = get_string (); + var = get_string (); + if (!match_byte(1) && !match_byte(2)) + match_byte_assert (3); + value = get_string (); + 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); + for (int i = 0; i < x; i++) + { + int y = get_u32(); + if (!y) + y = 1; + else + 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 (1)) + { + unsigned int format; + double value; + + if (match_byte (0x31)) + { + if (match_u32 (0)) + { + if (match_u32 (1)) + get_string(); + else + match_u32_assert (0); + int subn = get_u32 (); + printf ("nested %d bytes", subn); + pos += subn; + } + else 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(2); + printf("(special 2)"); + match_byte_assert(0); + match_byte_assert(0); + match_u32_assert(1); + match_byte_assert(0); + match_byte_assert(0); + int subn = get_u32 (); + printf ("nested %d bytes", subn); + pos += subn; + } + } + else + match_byte_assert (0x58); + format = get_u32 (); + value = get_double (); + printf (" value %g format %d(%d.%d)", value, format >> 16, (format >> 8) & 0xff, format & 0xff); + } + else 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); + } + 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 + dump_value (0); + putchar('\n'); + } + } + } + else + { + match_byte_assert (0x58); + char *base = get_string(); + int x = get_u32(); + printf ("\"%s\" with %d variables:\n", base, x); + for (int i = 0; i < x; i++) + { + int y = get_u32(); + if (!y) + y = 1; + else + 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 if (match_byte (1)) + { + unsigned int format; + double value; + + 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_byte_assert (0x58); + format = get_u32 (); + value = get_double (); + printf ("value %g format %d(%d.%d)", value, format >> 16, (format >> 8) & 0xff, format & 0xff); + } + else + dump_value (1); + putchar('\n'); + } + } + } + putchar('\n'); + } +} + +static void +dump_title_value(int level) +{ + for (int i = 0; i <= level; i++) + printf (" "); + + match_byte (0); + match_byte (0); + match_byte (0); + match_byte (0); + match_byte (0); + if (match_byte (3)) + { + get_string(); + 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 if (match_u32 (2)) + { + printf("(special 2)"); + match_byte_assert(0); + match_byte_assert(0); + if (!match_u32(2)) + match_u32_assert(1); + match_byte_assert(0); + match_byte_assert(0); + int subn = get_u32 (); + printf ("nested %d bytes", subn); + pos += subn; + } + else + { + match_u32_assert(3); + printf("(special 3)"); + match_byte_assert(0); + match_byte_assert(0); + match_byte_assert(1); + match_byte_assert(0); + int subn = get_u32 (); + printf ("nested %d bytes, ", subn); + pos += subn; + subn = get_u32 (); + printf ("nested %d bytes, ", subn); + pos += subn; + } + } + else + match_byte_assert (0x58); + get_string(); + printf("string \"%s\"", get_string()); + match_byte (0); + match_byte (0); + match_byte (0); + match_byte (1); + match_byte (1); + match_byte (0); + match_byte (0); + match_byte (0); + match_byte (1); + } + else if (match_byte (5)) + { + 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_byte_assert (0x58); + printf ("variable \"%s\"", get_string()); + get_string(); + if (!match_byte(1) && !match_byte(2)) + match_byte_assert(3); + } + else if (match_byte (2)) + { + unsigned int format; + char *var, *vallab; + double value; + + match_byte_assert (0x58); + format = get_u32 (); + value = get_double (); + var = get_string (); + vallab = get_string (); + printf ("value %g format %d(%d.%d) var \"%s\" vallab \"%s\"", + value, format >> 16, (format >> 8) & 0xff, format & 0xff, var, vallab); + if (!match_byte (1) && !match_byte(2)) + match_byte_assert (3); + match_byte (0); + match_byte (0); + match_byte (0); + match_byte (0); + match_byte (0); + match_byte (0); + match_byte (0); + } + else if (match_byte (4)) + { + unsigned int format; + char *var, *vallab, *value; + + match_byte_assert (0x58); + format = get_u32 (); + vallab = get_string (); + var = get_string (); + if (!match_byte(1) && !match_byte(2)) + match_byte_assert (3); + value = get_string (); + printf ("value \"%s\" format %d(%d.%d) var \"%s\" vallab \"%s\"", + value, format >> 16, (format >> 8) & 0xff, format & 0xff, var, vallab); + match_byte (0); + match_byte (0); + match_byte (0); + match_byte (0); + } + else if (match_byte (1)) + { + unsigned int format; + double value; + + 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_byte_assert (0x58); + format = get_u32 (); + value = get_double (); + printf ("value %g format %d(%d.%d)", value, format >> 16, (format >> 8) & 0xff, format & 0xff); + match_byte (1); + match_byte (0); + match_byte (0); + match_byte (0); + match_byte (1); + } + 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 if (match_u32 (0)) + { + match_u32_assert (0); + int subn = get_u32 (); + printf ("nested %d bytes", subn); + pos += subn; + } + else + { + match_u32_assert(3); + printf("(special 3)"); + match_byte_assert(0); + match_byte_assert(0); + match_byte_assert(1); + match_byte_assert(0); + int subn = get_u32 (); + printf ("nested %d bytes, ", subn); + pos += subn; + 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); + for (int i = 0; i < x; i++) + { + int y = get_u32(); + if (!y) + y = 1; + else + match_u32_assert(0); + for (int j = 0; j <= level; 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 <= level + 1; k++) + printf (" "); + printf ("\"%s\", \"%s\", \"%s\"", a, b, c); + match_byte(0); + } + else + dump_title_value (level+1); + putchar('\n'); + } + } + } + else + { + match_byte_assert (0x58); + char *base = get_string(); + int x = get_u32(); + printf ("\"%s\" with %d variables:\n", base, x); + for (int i = 0; i < x; i++) + { + int y = get_u32(); + if (!y) + y = 1; + else + match_u32_assert(0); + for (int j = 0; j <= level; 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 <= level + 1; k++) + printf (" "); + printf ("\"%s\", \"%s\", \"%s\"", a, b, c); + } + else + dump_title_value (level+1); + putchar('\n'); + } + } + } +} + +static void +dump_title(void) +{ + pos = 0x27; + dump_title_value(0); putchar('\n'); putchar('\n'); + dump_title_value(0); putchar('\n'); putchar('\n'); + match_byte_assert(0x31); + dump_title_value(0); putchar('\n'); putchar('\n'); + match_byte(0); + match_byte_assert(0x58); + if (match_byte(0x31)) + { + dump_title_value(0); putchar('\n'); + } + else + match_byte_assert(0x58); +} + int main(int argc, char *argv[]) { @@ -568,7 +1323,12 @@ main(int argc, char *argv[]) printf ("\n"); return 0; } - if (!strcmp(argv[1], "title")) + else if (!strcmp(argv[1], "title")) + { + dump_title(); + exit(0); + } + else if (!strcmp(argv[1], "titleraw")) { const char fonts[] = "\x01\x31\x09\0\0\0SansSerif"; start = 0x27; @@ -588,7 +1348,7 @@ main(int argc, char *argv[]) start = find(styles, sizeof styles - 1); n = find(dimensions, sizeof dimensions - 1) + sizeof dimensions - 1; } - else if (!strcmp(argv[1], "dimensions")) + else if (!strcmp(argv[1], "dimensions") || !strcmp(argv[1], "all")) { { const char dimensions[] = "-,,,.\0"; @@ -603,7 +1363,10 @@ main(int argc, char *argv[]) pos = start; dump_dims (); - return 0; + dump_data (); + if (!strcmp(argv[1], "all")) + dump_title (); + exit(0); } else { @@ -618,17 +1381,17 @@ main(int argc, char *argv[]) { 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