}
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
{
int n_sysmis = 0;
for (int i = 0; i < n_series; i++)
{
- printf (" series %d: \"%s\"\n ", i, get_fixed_string(288));
+ printf (" series %d: \"%s\", %d values:\n ",
+ i, get_fixed_string(288), count);
for (int i = 0; i < count; i++)
{
double d = get_double();
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);
{
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
struct source
{
int offset, count, n_series;
+ char *name;
}
sources[n_sources];
for (int i = 0; i < n_sources; i++)
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++)
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);