- if (match_byte (0x31))
- {
- if (match_u32 (0))
- {
- match_u32_assert (0);
- int subn = get_u32 ();
- printf ("nested %d bytes", subn);
- pos += subn;
- }
- else if (match_u32 (1))
- {
- printf("(footnote %d) ", get_u32());
- match_byte_assert (0);
- match_byte_assert (0);
- int subn = get_u32 ();
- printf ("nested %d bytes", subn);
- pos += subn;
- }
- else
- {
- match_u32_assert(2);
- printf("(special 2)");
- match_byte_assert(0);
- match_byte_assert(0);
- match_u32_assert(1);
- match_byte_assert(0);
- match_byte_assert(0);
- int subn = get_u32 ();
- printf ("nested %d bytes", subn);
- pos += subn;
- }
- }
- else
- match_byte_assert (0x58);
- format = get_u32 ();
- value = get_double ();
- printf (" value %g format %d(%d.%d)", value, format >> 16, (format >> 8) & 0xff, format & 0xff);
- }
- else if (match_byte (3))
- {
- get_string();
- if (match_byte (0x31))
- {
- if (match_u32 (0))
- {
- match_u32_assert (1);
- int subn = get_u32 ();
- printf ("nested %d bytes", subn);
- pos += subn;
- }
- else if (match_u32 (1))
- {
- printf("(footnote %d) ", get_u32());
- match_byte_assert (0);
- match_byte_assert (0);
- int subn = get_u32 ();
- printf ("nested %d bytes", subn);
- pos += subn;
- }
- else if (match_u32 (2))
- {
- printf("(special 2)");
- match_byte_assert(0);
- match_byte_assert(0);
- match_u32_assert(1);
- match_byte_assert(0);
- match_byte_assert(0);
- int subn = get_u32 ();
- printf ("nested %d bytes", subn);
- pos += subn;
- }
- else
- {
- match_u32_assert(3);
- printf("(special 3)");
- match_byte_assert(0);
- match_byte_assert(0);
- match_byte_assert(1);
- match_byte_assert(0);
- int subn = get_u32 ();
- printf ("nested %d bytes, ", subn);
- pos += subn;
- subn = get_u32 ();
- printf ("nested %d bytes, ", subn);
- pos += subn;
- }
- }
- else
- match_byte_assert (0x58);
- get_string();
- printf("string \"%s\"", get_string());
- match_byte (0);
- }
- 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);
- }
- else if (match_byte (4))
+ /* First inner envelope: byte*33 int[n] int*[n]. */
+ pos = get_end();
+
+ /* Second inner envelope. */
+ assert(get_end() == outer_end);
+
+ match_byte_assert(1);
+ match_byte_assert(0);
+ if (!match_byte(3) && !match_byte(4))
+ match_byte_assert(5);
+ match_byte_assert(0);
+ match_byte_assert(0);
+ match_byte_assert(0);
+
+ printf("<command>%s</command>\n", get_string());
+ printf("<subcommand>%s</subcommand>\n", get_string());
+ printf("<language>%s</language>\n", get_string());
+ printf("<charset>%s</charset>\n", get_string());
+ printf("<locale>%s</locale>\n", get_string());
+
+ if (!match_byte(0))
+ match_byte_assert(1);
+ match_byte_assert(0);
+ if (!match_byte(0))
+ match_byte_assert(1);
+ if (!match_byte(0))
+ match_byte_assert(1);
+
+ if (!match_byte(0x97) && !match_byte(0x98)
+ && !match_byte(0x99) && !match_byte(0x9a))
+ match_byte_assert(0x9b);
+ match_byte_assert(7);
+ match_byte_assert(0);
+ match_byte_assert(0);
+
+ if (match_byte('.'))