X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=dump2.c;h=15670ecf4bb7c8de1ba8986290fa0fde8f53046f;hb=30801cdf055bb004cc722d9801e0c67df66d6fd8;hp=d7f8ad3d68abbcff43539cae1f56ef4515aa2e06;hpb=7501fe1209b07d18977d8a9249036f2f3a34014d;p=pspp diff --git a/dump2.c b/dump2.c index d7f8ad3d68..15670ecf4b 100644 --- a/dump2.c +++ b/dump2.c @@ -206,7 +206,7 @@ dump_raw(FILE *stream, int start, int end, const char *separator) } static void -dump_source(int end, int count, int n_series) +dump_source(int end, int count, int n_series, const char *name) { const union { @@ -235,14 +235,19 @@ dump_source(int end, int count, int n_series) if (pos >= end) return; - printf ("\n %08x: (%d sysmis)", pos, n_sysmis); - printf (" %d", get_u32()); - printf (", \"%s\"\n", get_string()); + match_u32_assert(1); + char *name2 = get_string(); + assert(!strcmp(name, name2)); printf ("\n %08x:", pos); int n_more_series = get_u32(); + if (n_series != n_more_series) + printf("different series counts: %d %d\n", n_series, n_more_series); + assert(n_more_series <= n_series); printf (" %d series to come\n", n_more_series); + int max1 = -1; + int ofs = pos; for (int i = 0; i < n_more_series; i++) { printf ("%08x:", pos); @@ -252,21 +257,45 @@ dump_source(int end, int count, int n_series) { int x = get_u32(); int y = get_u32(); - printf (" (%d,%d)", x, y); + printf (" (%d, %d)", x, y); + if (y > max1) + max1 = y; } printf ("\n"); } printf ("\n%08x:", pos); int n_strings = get_u32(); + assert(n_strings == max1 + 1); printf (" %d strings\n", n_strings); + + char **strings = malloc(n_strings * sizeof *strings); for (int i = 0; i < n_strings; i++) { - int x = get_u32(); + int frequency = get_u32(); char *s = get_string(); - printf ("%d: \"%s\" (%d)\n", i, s, x); + printf ("%d: \"%s\" (%d)\n", i, s, frequency); + strings[i] = s; } printf ("\n"); + + assert (pos == end); + pos = ofs; + printf("Strings:\n"); + for (int i = 0; i < n_more_series; i++) + { + printf (" \"%s\"\n", get_string()); + int n_pairs = get_u32(); + for (int j = 0; j < n_pairs; j++) + { + int x = get_u32(); + //assert (x == j); + int y = get_u32(); + printf (" %d: \"%s\"\n", x, strings[y]); + } + printf ("\n"); + } + pos = end; } int @@ -312,6 +341,7 @@ main(int argc, char **argv) struct source { int offset, count, n_series; + char *name; } sources[n_sources]; for (int i = 0; i < n_sources; i++) @@ -326,6 +356,7 @@ main(int argc, char **argv) sources[i].offset = offset; sources[i].count = count; sources[i].n_series = n_series; + sources[i].name = name; } for (int i = 0; i < n_sources; i++) @@ -335,7 +366,7 @@ main(int argc, char **argv) fprintf (stderr, "pos=0x%x expected=0x%x reading source %d\n", pos, sources[i].offset, i); exit(1); } - dump_source(i + 1 >= n_sources ? n : sources[i + 1].offset, sources[i].count, sources[i].n_series); + dump_source(i + 1 >= n_sources ? n : sources[i + 1].offset, sources[i].count, sources[i].n_series, sources[i].name); } assert(pos == n);