From: Ben Pfaff Date: Tue, 31 Dec 2019 20:17:50 +0000 (+0000) Subject: spo: learned things X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?p=pspp;a=commitdiff_plain;h=55083a4e71e2027e4ddea318f2128ba9a7636c10 spo: learned things --- diff --git a/dump-float.c b/dump-float.c index 9e2d4bef31..4257ca17cd 100644 --- a/dump-float.c +++ b/dump-float.c @@ -9,7 +9,7 @@ main (void) uint8_t b[8]; double d; } - x = { .b = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x4c, 0xdd, 0x40 } }; + x = { .b = { 0xfa, 0x3c, 0x00, 0x00, 0x3b, 0x5a, 0x01, 0x00 } }; printf ("%f\n", x.d); return 0; } diff --git a/dump-spo.c b/dump-spo.c index f2d33a1449..ac53ece628 100644 --- a/dump-spo.c +++ b/dump-spo.c @@ -265,16 +265,21 @@ get_end(void) static void __attribute__((unused)) hex_dump(FILE *stream, int ofs, int n) { + int n_ascii = 0; for (int i = 0; i < n; i++) { int c = data[ofs + i]; + n_ascii += is_ascii(c); fprintf(stream, " %02x", c); } - putc(' ', stream); - for (int i = 0; i < n; i++) + if (n_ascii >= 3) { - int c = data[ofs + i]; - putc(c >= 32 && c < 127 ? c : '.', stream); + putc(' ', stream); + for (int i = 0; i < n; i++) + { + int c = data[ofs + i]; + putc(c >= 32 && c < 127 ? c : '.', stream); + } } putc('\n', stream); } @@ -1258,6 +1263,52 @@ dump_fonts(void) } } +static const char * +format_name (int format, char *buf) +{ + switch (format) + { + case 1: return "A"; + case 2: return "AHEX"; + case 3: return "COMMA"; + case 4: return "DOLLAR"; + case 5: return "F"; + case 6: return "IB"; + case 7: return "PIBHEX"; + case 8: return "P"; + case 9: return "PIB"; + case 10: return "PK"; + case 11: return "RB"; + case 12: return "RBHEX"; + case 15: return "Z"; + case 16: return "N"; + case 17: return "E"; + case 20: return "DATE"; + case 21: return "TIME"; + case 22: return "DATETIME"; + case 23: return "ADATE"; + case 24: return "JDATE"; + case 25: return "DTIME"; + case 26: return "WKDAY"; + case 27: return "MONTH"; + case 28: return "MOYR"; + case 29: return "QYR"; + case 30: return "WKYR"; + case 31: return "PCT"; + case 32: return "DOT"; + case 33: return "CCA"; + case 34: return "CCB"; + case 35: return "CCC"; + case 36: return "CCD"; + case 37: return "CCE"; + case 38: return "EDATE"; + case 39: return "SDATE"; + case 40: return "MTIME"; + case 41: return "YMDHMS"; + default: sprintf(buf, "(%d)", format); return buf; + } +} + int main(int argc, char *argv[]) { @@ -1336,31 +1387,34 @@ main(int argc, char *argv[]) for (pos = 2; pos + 50 < n; pos++) { static const int cell_prefix[] = { - 0x00, 0x03, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, -1, 0x80, 0x01, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 0x00, 0x03, + 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -1, + 0x80, 0x01, -1, -1, -1, -1, }; size_t cell_prefix_len = sizeof cell_prefix / sizeof *cell_prefix; if (match_bytes(pos, cell_prefix, cell_prefix_len)) { if (prev_end != pos) { - printf ("%04x ", prev_end); + //printf ("%04x ", prev_end); hex_dump (stdout, prev_end, pos - prev_end); } - printf ("cell %04x %d %d %d %d %d %d ", pos, - data[pos + 13], data[pos + 16], data[pos + 17], - data[pos + 18], data[pos + 19], data[pos + 20]); + char buf[64]; + printf ("cell %s%d.%d ", + format_name (data[pos + 18], buf), + data[pos + 17], + data[pos + 16]); int len = cell_prefix_len; if (data[pos + 19] == 0) { + assert (data[pos + 13] == 5); if (data[pos + 20] == 0) { int count = (data[pos + 22]); - printf ("/ %d %d %d \"%.*s\"\n", - data[pos + 20], data[pos + 21], data[pos + 22], + printf ("%d %d \"%.*s\"\n", + data[pos + 21], data[pos + 22], count, &data[pos + 23]); len = 23 + count; } @@ -1369,14 +1423,14 @@ main(int argc, char *argv[]) && data[pos + 22] == 0xff) { int count = 255; - printf ("/ \"%.*s\"\n", count, &data[pos + 24]); + printf ("%d \"%.*s\"\n", count, data[pos + 23], + &data[pos + 24]); len = 23 + count; } - else if (data[pos + 20] == 1 ) + else if (data[pos + 20] == 1) { int count = (data[pos + 21]); - printf ("/ %d %d %d \"%.*s\"\n", - data[pos + 20], data[pos + 21], data[pos + 22], + printf ("\"%.*s\"\n", count, &data[pos + 22]); len = 22 + count; } @@ -1385,7 +1439,11 @@ main(int argc, char *argv[]) } else if (data[pos + 19] == 128) { - double d = *(double *) &data[pos + cell_prefix_len - 8]; + /* pos + 13 is usually 22...53 but also 5 or 69 */ + /* pos + 20 is 2 most of the time, occasionally 1 */ + printf ("%d %d ", data[pos + 13], data[pos + 20]); + double d = *(double *) &data[pos + 21]; + len = 29; const union { uint8_t b[8]; @@ -1412,7 +1470,7 @@ main(int argc, char *argv[]) { if (prev_end != pos) { - printf ("%04x ", prev_end); + //printf ("%04x ", prev_end); hex_dump (stdout, prev_end, pos - prev_end); } @@ -1422,6 +1480,87 @@ main(int argc, char *argv[]) continue; } + static const int record_prefix[] = { + 0xff, 0xff, 0x00, 0x00, + }; + size_t record_prefix_len = sizeof record_prefix / sizeof *record_prefix; + if (match_bytes(pos, record_prefix, record_prefix_len)) + { + if (prev_end != pos) + { + //printf ("%04x ", prev_end); + hex_dump (stdout, prev_end, pos - prev_end); + } + + putchar ('\n'); + + //printf ("%d ", pos % 4); + int len = record_prefix_len; + int slen = data[pos + 4] + (data[pos + 5] << 8); + if (slen > 2 && slen < 256 && all_utf8((char *) &data[pos + 6], slen)) + { + printf ("%.*s ", slen, &data[pos + 6]); + len = slen + 6; + } + else + printf ("notitle "); + + pos += len - 1; + prev_end = pos + 1; + continue; + } + + static const int number_prefix[] = { + 0x80, 0x02 + }; + size_t number_prefix_len = sizeof number_prefix / sizeof *number_prefix; + if (match_bytes(pos, number_prefix, number_prefix_len)) + { + if (prev_end != pos) + { + //printf ("%04x ", prev_end); + hex_dump (stdout, prev_end, pos - prev_end); + } + prev_end = pos; + + double d = *(double *) &data[pos + number_prefix_len]; + printf ("float%f ", d); + pos += 10 - 9; + prev_end = pos + 1; + continue; + } + + static const int string_prefix[] = { + 0x80, 0x01, 0x02, 0x28, 0x05, 0x00, 0x01 + }; + size_t string_prefix_len = sizeof string_prefix / sizeof *string_prefix; + if (match_bytes(pos, string_prefix, string_prefix_len) && data[pos + string_prefix_len] != 255) + { + if (prev_end != pos) + { + //printf ("%04x ", prev_end); + hex_dump (stdout, prev_end, pos - prev_end); + } + prev_end = pos; + + printf ("\nstring %.*s\n", (int) data[pos + 7], &data[pos + 8]); + } + if (match_bytes(pos, string_prefix, string_prefix_len) && data[pos + string_prefix_len] == 255) + { + if (prev_end != pos) + { + //printf ("%04x ", prev_end); + hex_dump (stdout, prev_end, pos - prev_end); + } + prev_end = pos; + + int len = data[pos + 8] + (data[pos + 9] << 8); + printf ("\nlongstring %.*s\n", len, &data[pos + 10]); + } + + + +#if 0 static const int heading_prefix[] = { -1, 0x00, 0x00, 0x00, 0x50, 0x80, 0x00, 0x52, 0x80, 0x00, -1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, @@ -1433,7 +1572,7 @@ main(int argc, char *argv[]) { if (prev_end != pos) { - printf ("%04x ", prev_end); + //printf ("%04x ", prev_end); hex_dump (stdout, prev_end, pos - prev_end); } @@ -1457,7 +1596,7 @@ main(int argc, char *argv[]) { if (prev_end != pos) { - printf ("%04x", prev_end); + //printf ("%04x", prev_end); hex_dump (stdout, prev_end, pos - prev_end); } @@ -1485,7 +1624,7 @@ main(int argc, char *argv[]) { if (prev_end != pos) { - printf ("%04x", prev_end); + //printf ("%04x", prev_end); hex_dump (stdout, prev_end, pos - prev_end); } @@ -1494,6 +1633,7 @@ main(int argc, char *argv[]) prev_end = pos + 1; continue; } +#endif static const int dim_prefix[] = { 0x00, 0x03, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, -1, @@ -1505,7 +1645,7 @@ main(int argc, char *argv[]) { if (prev_end != pos) { - printf ("%04x", prev_end); + //printf ("%04x", prev_end); hex_dump (stdout, prev_end, pos - prev_end); } @@ -1525,7 +1665,7 @@ main(int argc, char *argv[]) { if (prev_end != pos) { - printf ("%04x", prev_end); + //printf ("%04x", prev_end); hex_dump (stdout, prev_end, pos - prev_end); } @@ -1571,10 +1711,11 @@ main(int argc, char *argv[]) unsigned real_start = start - length_bytes; if (prev_end != real_start) { - printf ("%04x ", prev_end); + //printf ("%04x ", prev_end); hex_dump (stdout, prev_end, real_start - prev_end); } - printf ("%04x \"%.*s\"\n", real_start, + //printf ("%04x ", real_start); + printf ("\"%.*s\"\n", (int) end - start, (char *) &data[start]); prev_end = end; pos = end - 1; diff --git a/spo-notes b/spo-notes index 32ceb72430..b8099132f9 100644 --- a/spo-notes +++ b/spo-notes @@ -7,6 +7,58 @@ The Nav* strings only appear once per file, as: ffff 0000 xxyy string Sometimes there is zero spacing between these. +File begins with: + (00 | 0[1234] i0) + "SPSS Output Document" + (i0? | i1 63) ffff 0000 + "NavHead" # or any other "Nav*" + 02 int32[x] int32[y] i24 int32[z] int32[w] int32[v] + (i0 | i1 | i2 | i3 | i4) + (i0| i1 | i2 | i3) + ffff 0000 + "DspSimpleText" + 00 (i0 (i0 | i1) 00)? ffff 0000 + ("IndexedCollection" | "DspString") +and then with the IndexedCollection case: + 00*14 ffff 0000 +and the DspString case: + 01 02 28 (00|05) 00 (00|01) + often followed by a string + +The start of the file might be a version number + +x and y are either 0 or 2-3 byte values, e.g. 0x670b or 0x3b989. +z is a 2-3 byte negative value, e.g. 0xffff8997 +w is a 2-byte value or 0 +v is a 2-byte negative value or 0 + + + +rtf: + + "Factor Analysis" + 01 01 + table 1 + 00 00 00 f9 00 00 00 + "\rtf..." + 00 18 00 00 00 00 00 00 00 de ff ff ff 18 00 00 00 00 00 00 00 28 00 00 00 28 00 00 00 18 04 00 00 ae 73 01 00 00 00 00 00 00 34 21 00 00 f8 2a 00 00 01 00 07 00 01 00 f6 04 00 00 f6 04 00 00 f6 04 00 00 f6 04 00 00 00 00 f0 00 00 00 00 00 01 00 + "(Continued)" + + +rtf2: + + "Factor Analysis" + 01 01 + table 1 + 00 00 00 da 00 00 00 + "\rtf..." + 00 ffff 0000 + +rtf3: + + ... + 00 1f 80 02 00 00 00 00 00 00 00 00 18 00 00 00 00 00 00 00 06 02 00 00 28 fd ff ff 02 00 00 00 01 00 00 + 1456 01 00 00 00 00 00 00 00 03 80 00 00 00 00 00 00-00 00 00 00 05 80 01 02 28 05 00 01 03 4c 6f 67- 07 80 00 02 00 00........................(....Log...... 3 01 00 00 00 01 00 00 00 03 80 00 00 00 00 00 00-00 00 00 00 05 80 01 02 28 05 00 01 03 4c 6f 67- 07 80 00 02 00 00........................(....Log...... 13 00 00 00 00 00 00 00 03 80 00 00 00 00 00 00 00-00 00 00 05 80 01 02 28 05 00 00 00 08 53 50 53-53 20 4c 6f 67 07.......................(.....SPSS Log. @@ -14,292 +66,98 @@ Sometimes there is zero spacing between these. 13 01 00 00 00 00 00 00 00 03 80 00 00 00 00 00 00-00 00 00 00 05 80 01 02 28 05 00 01 08 53 50 53-53 20 4c 6f 67 07........................(....SPSS Log. notea.spo/Contents -00000000 02 00 00 00 00 - 14 53 50 53 53 20 4f 75 74 70 75 |......SPSS Outpu| -00000010 74 20 44 6f 63 75 6d 65 6e 74 - 00 00 00 00 ff ff |t Document......| -00000020 00 00 - 07 00 4e 61 76 48 65 61 64 02 - 00 00 00 00 |....NavHead.....| -00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| -00000040 00 00 00 00 01 00 00 00 - 00 00 00 00 ff ff 00 00 |................| -00000050 0d 00 44 73 70 53 69 6d 70 6c 65 54 65 78 74 - 00 |..DspSimpleText.| -00000060 00 00 00 00 00 - 00 00 00 00 ff ff 00 00 - 09 00 44 |...............D| -00000070 73 70 53 74 72 69 6e 67 - 01 02 28 05 00 01 - 0b 46 |spString..(....F| -00000090 4e 61 76 54 72 65 65 56 69 65 77 49 74 65 6d - 00 |NavTreeViewItem.| -000000a0 00 00 00 00 02 00 01 00 00 00 00 00 00 00 00 00 |................| -000000b0 01 00 00 00 00 00 - 0b 46 72 65 71 75 65 6e 63 69 |.......Frequenci| -000000c0 65 73 - 00 00 00 18 00 00 00 d8 ff ff ff de ff ff |es..............| -000000d0 ff 18 00 00 00 d8 ff ff ff 28 00 00 00 28 00 00 |.........(...(..| -000000e0 00 18 04 00 00 46 1e 00 00 00 00 35 e8 00 34 21 |.....F.....5..4!| -000000f0 00 00 f8 2a 00 00 01 00 0f 00 01 00 f6 04 00 00 |...*............| -00000100 f6 04 00 00 f6 04 00 00 f6 04 00 00 00 00 f0 00 |................| -00000110 00 00 69 32 01 00 - 0b 28 43 6f 6e 74 69 6e 75 65 |..i2...(Continue| -00000120 64 29 - 00 - b4 00 00 00 7b 5c 72 74 66 31 5c 61 6e |d).....{\rtf1\an| -00000130 73 69 5c 61 6e 73 69 63 70 67 31 32 35 32 5c 64 |si\ansicpg1252\d| -00000140 65 66 66 30 5c 64 65 66 6c 61 6e 67 31 30 33 33 |eff0\deflang1033| -00000150 7b 5c 66 6f 6e 74 74 62 6c 7b 5c 66 30 5c 66 73 |{\fonttbl{\f0\fs| -00000160 77 69 73 73 5c 66 70 72 71 32 5c 66 63 68 61 72 |wiss\fprq2\fchar| -00000170 73 65 74 30 20 41 72 69 61 6c 3b 7d 7d 0d 0a 7b |set0 Arial;}}..{| -00000180 5c 63 6f 6c 6f 72 74 62 6c 20 3b 5c 72 65 64 30 |\colortbl ;\red0| -00000190 5c 67 72 65 65 6e 30 5c 62 6c 75 65 30 3b 7d 0d |\green0\blue0;}.| -000001a0 0a 5c 76 69 65 77 6b 69 6e 64 34 5c 75 63 31 5c |.\viewkind4\uc1\| -000001b0 70 61 72 64 5c 71 63 5c 63 66 31 5c 66 30 5c 66 |pard\qc\cf1\f0\f| -000001c0 73 32 30 20 26 5b 50 61 67 65 54 69 74 6c 65 5d |s20 &[PageTitle]| -000001d0 0d 0a 5c 70 61 72 20 7d 0d 0a - - 00 00 - - b4 00 00 00 |..\par }........| -000001e0 7b 5c 72 74 66 31 5c 61 6e 73 69 5c 61 6e 73 69 |{\rtf1\ansi\ansi| -000001f0 63 70 67 31 32 35 32 5c 64 65 66 66 30 5c 64 65 |cpg1252\deff0\de| -00000200 66 6c 61 6e 67 31 30 33 33 7b 5c 66 6f 6e 74 74 |flang1033{\fontt| -00000210 62 6c 7b 5c 66 30 5c 66 73 77 69 73 73 5c 66 70 |bl{\f0\fswiss\fp| -00000220 72 71 32 5c 66 63 68 61 72 73 65 74 30 20 41 72 |rq2\fcharset0 Ar| -00000230 69 61 6c 3b 7d 7d 0d 0a 7b 5c 63 6f 6c 6f 72 74 |ial;}}..{\colort| -00000240 62 6c 20 3b 5c 72 65 64 30 5c 67 72 65 65 6e 30 |bl ;\red0\green0| -00000250 5c 62 6c 75 65 30 3b 7d 0d 0a 5c 76 69 65 77 6b |\blue0;}..\viewk| -00000260 69 6e 64 34 5c 75 63 31 5c 70 61 72 64 5c 71 72 |ind4\uc1\pard\qr| -00000270 5c 63 66 31 5c 66 30 5c 66 73 32 30 20 50 61 67 |\cf1\f0\fs20 Pag| -00000280 65 20 26 5b 50 61 67 65 5d 0d 0a 5c 70 61 72 20 |e &[Page]..\par | -00000290 7d 0d 0a - - 00 00 14 00 ff ff 00 00 - - 07 00 4e 61 76 |}............Nav| -000002a0 52 6f 6f 74 - - 02 00 00 00 00 00 00 00 00 00 00 00 |Root............| -000002b0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| -000002c0 00 00 00 00 00 03 80 00 00 00 00 00 00 00 00 00 |................| -000002d0 00 05 80 01 02 28 00 00 01 - - 06 4f 75 74 70 75 74 |.....(....Output| -000002e0 07 80 00 00 00 00 00 0a 00 01 00 00 00 00 00 00 |................| -000002f0 00 00 00 01 00 00 00 - 00 00 00 00 ff ff 00 00 - 06 |................| -00000300 00 4e 61 76 4c 6f 67 - 02 00 00 00 00 00 00 00 00 |.NavLog.........| -00000310 18 00 00 00 d8 ff ff ff b3 02 00 00 45 f9 ff ff |............E...| -00000320 01 00 00 00 00 00 00 00 03 80 00 00 00 00 00 00 |................| -00000330 00 00 00 00 05 80 01 02 28 05 00 01 - - 03 4c 6f 67 |........(....Log| -00000340 07 80 00 02 00 00 00 - 0f 00 01 00 ff ff 00 00 - 0a |................| -00000350 00 4e 61 76 4f 6c 65 49 74 65 6d - - 00 01 00 00 01 |.NavOleItem.....| -00000360 00 00 00 01 00 00 00 00 00 01 00 00 00 00 00 00 |................| -00000370 00 00 00 00 01 00 00 00 00 00 00 01 01 f3 ff ff |................| -00000380 ff 00 00 00 00 00 00 00 00 00 00 00 00 90 01 00 |................| -00000390 00 00 00 00 00 00 00 00 - - 31 43 6f 75 72 69 65 72 |........1Courier| -000003a0 20 4e 65 77 00 72 00 20 00 4e 00 65 00 77 00 00 | New.r. .N.e.w..| -000003b0 00 00 00 00 00 00 00 00 00 50 00 00 00 00 00 00 |.........P......| -000003c0 00 00 00 00 00 01 00 00 00 - df 14 00 00 7b 5c 72 |.............{\r| -000003d0 74 66 31 5c 61 6e 73 69 5c 61 6e 73 69 63 70 67 |tf1\ansi\ansicpg| -000003e0 31 32 35 32 5c 64 65 66 66 30 5c 64 65 66 6c 61 |1252\deff0\defla| -000003f0 6e 67 31 30 33 33 7b 5c 66 6f 6e 74 74 62 6c 7b |ng1033{\fonttbl{| -00000400 5c 66 30 5c 66 6d 6f 64 65 72 6e 5c 66 70 72 71 |\f0\fmodern\fprq| -00000410 31 5c 66 63 68 61 72 73 65 74 30 20 43 6f 75 72 |1\fcharset0 Cour| -... -000018a0 20 0d 0a 5c 70 61 72 20 7d 0d 0a - - 00 00 0e 80 02 | ..\par }.......| -000018b0 00 00 00 00 00 00 00 00 18 00 00 00 23 f9 ff ff |............#...| -000018c0 b3 02 00 00 53 f1 ff ff 01 00 00 00 00 00 00 00 |....S...........| -000018d0 03 80 00 00 00 00 00 00 00 00 00 00 05 80 01 02 |................| -000018e0 28 05 00 01 - - 03 4c 6f 67 - - 07 80 00 02 00 00 00 15 |(....Log........| -000018f0 00 01 00 13 80 00 01 00 00 02 00 00 00 01 00 00 |................| -00001900 00 00 00 01 00 00 00 00 00 00 00 00 00 00 01 00 |................| -00001910 00 00 00 00 00 01 01 0a 00 00 00 00 00 00 00 00 |................| -00001920 00 00 00 00 00 00 00 90 01 00 00 00 00 00 00 00 |................| -00001930 00 00 - - 31 43 6f 75 72 69 65 72 20 4e 65 77 00 72 |..1Courier New.r| -00001940 00 20 00 4e 00 65 00 77 00 00 00 00 00 00 00 00 |. .N.e.w........| -00001950 00 00 00 50 00 00 00 00 00 00 00 00 00 00 00 01 |...P............| -00001960 00 00 00 - - 69 2b 00 00 7b 5c 72 74 66 31 5c 61 6e |...i+..{\rtf1\an| -00001970 73 69 5c 61 6e 73 69 63 70 67 31 32 35 32 5c 64 |si\ansicpg1252\d| -00001980 65 66 66 30 5c 64 65 66 6c 61 6e 67 31 30 33 33 |eff0\deflang1033| -00001990 7b 5c 66 6f 6e 74 74 62 6c 7b 5c 66 30 5c 66 6d |{\fonttbl{\f0\fm| -000019a0 6f 64 65 72 6e 5c 66 70 72 71 31 5c 66 63 68 61 |odern\fprq1\fcha| -000019b0 72 73 65 74 30 20 43 6f 75 72 69 65 72 20 4e 65 |rset0 Courier Ne| -... -000044c0 63 75 74 65 2e 0d 0a 5c 70 61 72 20 7d 0d 0a - - 00 |cute...\par }...| -000044d0 00 0e 80 02 00 00 00 00 00 00 00 00 18 00 00 00 |................| -000044e0 31 f1 ff ff b3 02 00 00 ee f0 ff ff 01 00 00 00 |1...............| -000044f0 00 00 00 00 03 80 00 00 00 00 00 00 00 00 00 00 |................| -00004500 05 80 01 02 28 05 00 01 - - 03 4c 6f 67 07 80 00 02 |....(....Log....| -00004510 00 00 00 1a 00 01 00 00 00 00 00 00 00 00 00 01 |................| -00004520 00 00 00 00 00 00 01 01 0a 00 00 00 00 00 00 00 |................| -00004530 00 00 00 00 00 00 00 00 90 01 00 00 00 00 00 00 |................| -00004540 00 00 00 - - 31 43 6f 75 72 69 65 72 20 4e 65 77 00 |...1Courier New.| -00004550 72 00 20 00 4e 00 65 00 77 00 00 00 00 00 00 00 |r. .N.e.w.......| -00004560 00 00 00 00 50 00 00 00 00 00 00 00 00 00 00 00 |....P...........| -00004570 01 00 00 00 - - 3c 01 00 00 7b 5c 72 74 66 31 5c 61 |....<...{\rtf1\a| -... -000046b0 7d 0d 0a - - 00 00 02 00 ff ff 00 00 - - 08 00 4e 61 76 |}............Nav| -000046c0 54 69 74 6c 65 - - 02 00 00 00 00 00 00 00 00 18 00 |Title...........| -000046d0 00 00 cc f0 ff ff 00 04 00 00 b5 f0 ff ff 02 00 |................| -000046e0 00 00 01 00 00 00 03 80 00 00 00 00 00 00 00 00 |................| -000046f0 00 00 05 80 01 02 28 00 00 01 - - 05 54 69 74 6c 65 |......(....Title| -00004700 07 80 00 08 00 00 00 1f 00 01 00 00 00 00 00 00 |................| -00004710 00 00 00 01 00 00 00 00 00 - - 0b 46 72 65 71 75 65 |..........Freque| -00004720 6e 63 69 65 73 - - 01 01 ed ff ff ff 00 00 00 00 00 |ncies...........| -00004730 00 00 00 00 00 00 00 bc 02 00 00 00 00 00 00 00 |................| -00004740 00 00 - - 22 41 72 69 61 6c 00 61 00 6c 00 00 00 00 |.."Arial.a.l....| -00004750 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| -00004760 00 00 00 50 00 - - 00 00 00 00 00 00 00 00 00 00 01 |...P............| -00004770 00 00 00 - - b2 00 00 00 7b 5c 72 74 66 31 5c 61 6e |.......{\rtf1\an| -00004780 73 69 5c 61 6e 73 69 63 70 67 31 32 35 32 5c 64 |si\ansicpg1252\d| -00004790 65 66 66 30 5c 64 65 66 6c 61 6e 67 31 30 33 33 |eff0\deflang1033| -000047a0 7b 5c 66 6f 6e 74 74 62 6c 7b 5c 66 30 5c 66 73 |{\fonttbl{\f0\fs| -000047b0 77 69 73 73 5c 66 70 72 71 32 5c 66 63 68 61 72 |wiss\fprq2\fchar| -000047c0 73 65 74 30 20 41 72 69 61 6c 3b 7d 7d 0d 0a 7b |set0 Arial;}}..{| -000047d0 5c 63 6f 6c 6f 72 74 62 6c 20 3b 5c 72 65 64 30 |\colortbl ;\red0| -000047e0 5c 67 72 65 65 6e 30 5c 62 6c 75 65 30 3b 7d 0d |\green0\blue0;}.| -000047f0 0a 5c 76 69 65 77 6b 69 6e 64 34 5c 75 63 31 5c |.\viewkind4\uc1\| -00004800 70 61 72 64 5c 63 66 31 5c 62 5c 66 30 5c 66 73 |pard\cf1\b\f0\fs| -00004810 32 38 20 46 72 65 71 75 65 6e 63 69 65 73 0d 0a |28 Frequencies..| -00004820 5c 70 61 72 20 7d 0d 0a - - 00 00 ff ff 00 00 - - 07 00 |\par }..........| -00004830 4e 61 76 4e 6f 74 65 - - 02 00 00 00 00 00 00 00 00 |NavNote.........| -00004840 18 00 00 00 d8 ff ff ff 00 02 00 00 59 fe ff ff |............Y...| -00004850 02 00 00 00 01 00 00 00 03 80 00 00 00 00 00 00 |................| -00004860 00 00 00 00 05 80 01 02 28 05 00 01 - - 05 4e 6f 74 |........(....Not| -00004870 65 73 - - 07 80 00 07 00 00 00 24 00 01 00 00 00 01 |es.......$......| -00004880 00 00 00 00 00 01 00 00 00 00 00 - - 0b 46 72 65 71 |............Freq| -00004890 75 65 6e 63 69 65 73 - 01 ff ff 00 00 - 11 00 50 54 |uencies.......PT| -000048a0 50 69 76 6f 74 43 6f 6e 74 72 6f 6c 6c 65 72 - - 02 |PivotController.| -000048b0 29 20 69 31 38 28 66 38 64 00 00 00 64 00 00 00 |) i18(f8d...d...| -000048c0 64 00 00 00 64 00 00 00 ff ff 00 00 - 0b 00 50 56 |d...d.........PV| -000048d0 50 69 76 6f 74 56 69 65 77 - 04 00 00 00 00 ff ff |PivotView.......| -000048e0 00 00 - 0c 00 50 4d 50 69 76 6f 74 4d 6f 64 65 6c |....PMPivotModel| -000048f0 03 ff ff 00 00 - 15 00 4e 44 69 6d 65 6e 73 69 6f |.......NDimensio| -00004900 6e 61 6c 5f 5f 44 73 70 43 65 6c 6c - 00 01 00 00 |nal__DspCell....| -00004910 00 ff ff 00 00 - 11 00 49 6e 64 65 78 65 64 43 6f |.......IndexedCo| -00004920 6c 6c 65 63 74 69 6f 6e - 00 0d 00 00 00 01 00 ff |llection........| -00004930 ff 00 00 - 07 00 44 73 70 43 65 6c 6c - 00 03 80 00 |.....DspCell....| -00004940 00 00 00 00 00 00 00 00 00 05 80 01 02 28 05 00 |.............(..| -00004950 01 - - 12 32 38 20 53 65 70 20 30 37 20 31 33 3a 32 |..28 Sep 07 13:2| -00004960 38 3a 34 32 32 - - 80 00 03 80 00 00 00 00 00 00 00 |8:422...........| -00004970 00 00 00 05 80 01 02 28 05 00 01 01 20 00 00 32 |.......(.... ..2| -00004980 80 00 03 80 00 00 00 00 00 00 00 00 00 00 05 80 |................| -00004990 01 02 28 05 00 01 - - 06 3c 6e 6f 6e 65 3e - 32 80 00 |..(....2..| -000049a0 03 80 00 00 00 00 00 00 00 00 00 00 05 80 01 02 |................| -000049b0 28 05 00 - 01 06 3c 6e 6f 6e 65 3e - 32 80 00 03 80 |(....2....| -000049c0 00 00 00 00 00 00 00 00 00 00 05 80 01 02 28 05 |..............(.| -000049d0 00 01 - 06 3c 6e 6f 6e 65 3e - 32 80 00 03 80 00 00 |...2......| -000049e0 00 00 00 00 00 00 00 00 ff ff 00 00 - 09 00 44 73 |..............Ds| -000049f0 70 4e 75 6d 62 65 72 - 01 00 28 05 80 02 00 00 00 |pNumber..(......| -00004a00 00 00 80 52 40 02 37 34 32 80 00 03 80 00 00 00 |...R@.742.......| -00004a10 00 00 00 00 00 00 00 05 80 01 02 28 05 00 01 33 |...........(...3| -00004a20 55 73 65 72 2d 64 65 66 69 6e 65 64 20 6d 69 73 |User-defined mis| - ----------------------------------------------------------------------- - -Output1.spo: - -1f33 28 80 00 03 80 00 00 00 00 00 00 00 00 00 00 3d 80 F40.0(01 00 28) 05 80 02 30000.0 -@ -1f52 "30000" - -2103 28 80 00 03 80 00 00 00 00 00 00 00 00 00 00 3d 80 F40.1(01 01 28) 05 80 02 66.7 -2122 "66.7" - -each cell has the form (where [01] is the number of decimals): -28 80 00 03 80 00 00 00 00 00 00 00 00 00 00 3d 80 01 0[01] 28 05 80 02 then a double then the string -each column(?) is preceded by -11 80 00 0[345] 00 00 00 01 00 - -starting around 1c85 - -16#2134 == 8500 -16#2af8 == 11000 + + +PVPrintManager: + + "PVPrintManager" + 02 byte[x] 00 i2 (i0|i3) i1 00*7 + sometimes 0000 ffff +where x is between 0a and 2e + + + +regress, notea +-------------- + +ffff 0000 "NavPivot" + 02 fa 3c 00 00 3b 5a 01 00 + 18 00 00 00 b4 35 ff ff 7f + 02 00 00 13 28 ff ff + 02 00 00 00 + 01 00 00 00 + + notea: + 02 00 00 00 00 00 00 00 00 + 18 00 00 00 93 f0 ff ff dc + 03 00 00 cd ef ff ff + 02 00 00 00 + 01 00 00 + missing terminator! + +ffff 0000 "DspSimpleText" + 00*10 + +ffff 0000 "DspString" + 01 02 28 05 00 01 "Text Output" + +ffff 0000 "NavOleItem" + 00 01 00 00 + 07 00 00 00 + 01 00 00 00 00 00 + 01 00 00 00 00 00 00 00 00 00 00 + 01 00 00 00 00 00 + "Regression" + 01 + + notea: + 00 01 00 00 + 01 00 00 00 + 01 00 00 00 00 00 + 01 00 00 00 00 00 00 00 00 00 00 + 01 00 00 00 00 00 + 00 01 01 f3 ff + +ffff 0000 "PTPivotController" + 02 67 02 00 00 a1 0d 00 00 + 64 00 00 00 + 64 00 00 00 + 64 00 00 00 + 64 00 00 00 + + notea: + 02 29 20 69 31 38 28 66 38 + 64 00 00 00 + 64 00 00 00 + 64 00 00 00 + 64 00 00 00 + +ffff 0000 "PVPivotView" + 04 00 00 00 00 + +ffff 0000 "PMPivotModel" + 03 + +ffff 0000 "NDimensional__DspCell" + 00 03 00 00 00 + +ffff 0000 "IndexedCollection" + 00 + 05 00 00 00 + 01 00 13 80 + 00 + 0b 00 00 00 + 01 00 13 80 + 00 + 02 00 00 00 + 01 00 + +ffff 0000 "DspCell" + 00 03 80 00 00 00 00 00 00 00 00 00 00 + +ffff 0000 "DspNumber" + +NavTitle 02 00 00 00 00 00 00 00 00 18 00 00 00 03 .. .. .. 00 04 00 00 .. .. ff ff 02 00 00 00 01 00 00 + +80 01 02 28 05 00 01 ff +80 01 02 28 05 00 01