match_byte_assert (0x58);
 }
 
-static void dump_value(int level);
+static void dump_value(int level, bool match1);
 
 static void
 dump_value__(int level, bool match1)
         {
           for (int i = 0; i < x; i++)
             {
-              dump_value (level+1);
+              dump_value (level+1, match1);
               putchar('\n');
             }
         }
               printf("variable %d has %d values:\n", i, y);
               for (int j = 0; j < y; j++)
                 {
-                  match_byte(0);
-                  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_value (level+1);
-
-                  match_byte(0);
-                  match_byte(0);
-                  match_byte(0);
-                  match_byte(0);
+                  dump_value (level+1, false);
                   putchar('\n');
                 }
             }
 }
 
 static void
-dump_value(int level)
+dump_value(int level, bool match1)
 {
   for (int i = 0; i <= level; i++)
     printf ("    ");
   match_byte (0);
   match_byte (0);
   match_byte (0);
-  dump_value__(level, true);
+  dump_value__(level, match1);
   match_byte(0);
   match_byte(0);
   match_byte(0);
   if (data[pos] == 3 || data[pos] == 5)
     dump_value__(level, true);
   else
-    dump_value(level);
+    dump_value(level, true);
 }
 
 static void
 dump_category(int level)
 {
-  dump_value (level);
+  dump_value (level, true);
 
   if (match_u32 (1))
     match_byte (0);
   if (data[pos] == 1 || data[pos] == 2 || data[pos] == 3 || data[pos] == 4)
     dump_value__(0, false);
   else if (data[pos] == 5)
-    dump_value (0);
+    dump_value (0, true);
   else
     dump_substs (dump_data_value, level + 1);
 }
   match_byte (0);
   match_byte (0);
   if (data[pos] == 1 || data[pos] == 2 || data[pos] == 3 || data[pos] == 4)
-    dump_value(level);
+    dump_value(level, true);
   else if (data[pos] == 5)
     dump_value__(level, true);
   else
   match_byte (0);
   match_byte (0);
   if (data[pos] == 2 || data[pos] == 4)
-    dump_value(level);
+    dump_value(level, true);
   else if (data[pos] == 1 || data[pos] == 3 || data[pos] == 5)
     dump_value__(level, false);
   else