Document datum format.
[pspp] / dump.c
diff --git a/dump.c b/dump.c
index 1cdb749f81fc714f09876a9701391cb48416e2bb..0445597e635aa6673304d1fa734df0cc29371edc 100644 (file)
--- a/dump.c
+++ b/dump.c
@@ -648,7 +648,7 @@ dump_category(FILE *stream, int level, int *indexes, int *n_indexes, int max_ind
   printf ("</category>\n");
 }
 
-static void
+static int
 dump_dim(int indx)
 {
   int n_categories;
@@ -679,15 +679,20 @@ dump_dim(int indx)
   check_permutation(indexes, n_indexes, "categories");
 
   fprintf (stdout, "</dimension>\n");
+  return n_indexes;
 }
 
 int n_dims;
+static int dim_n_cats[64];
+#define MAX_DIMS (sizeof dim_n_cats / sizeof *dim_n_cats)
+
 static void
 dump_dims(void)
 {
   n_dims = get_u32();
+  assert(n_dims < MAX_DIMS);
   for (int i = 0; i < n_dims; i++)
-    dump_dim (i);
+    dim_n_cats[i] = dump_dim (i);
 }
 
 static void
@@ -715,7 +720,19 @@ dump_data(void)
   printf ("<data>\n");
   for (int i = 0; i < x; i++)
     {
-      printf ("    <datum index=\"%d\">\n", get_u32());
+      unsigned int indx = get_u32();
+      printf ("    <datum index=\"%d\" coords=", indx);
+
+      int coords[MAX_DIMS];
+      for (int i = n_dims; i-- > 0; )
+        {
+          coords[i] = indx % dim_n_cats[i];
+          indx /= dim_n_cats[i];
+        }
+      for (int i = 0; i < n_dims; i++)
+        printf("%c%d", i ? ',' : '"', coords[i]);
+
+      printf ("\">\n");
       match_u32_assert(0);
       if (version == 1)
         match_byte(0);