match_byte (0);
   match_byte (0);
   match_byte (0);
-  if (match_byte (3))
+  if (data[pos] == 2 || data[pos] == 4)
+    dump_value(level);
+  else if (match_byte (3))
     {
       get_string();
       dump_value_31();
       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);
-    }
-  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);
-    }
   else if (match_byte (1))
     {
       unsigned int format;