Mercurial > libpst
diff xml/libpst.in @ 49:17654fbdf76b
more fixes for 64 bit format
author | carl |
---|---|
date | Sat, 19 Jan 2008 10:47:16 -0800 |
parents | f66078abed38 |
children | fb3818370dd6 |
line wrap: on
line diff
--- a/xml/libpst.in Fri Jan 18 15:07:12 2008 -0800 +++ b/xml/libpst.in Sat Jan 19 10:47:16 2008 -0800 @@ -1367,16 +1367,26 @@ </para> <para> Note the b5offset of 0x0020, which is a type that I will call an index - reference. Such index references have at least two different forms, and - may point to data either in this block, or in some other block. + reference. Such index references have at least two different forms, + and may point to data either in this block, or in some other block. External pointer references have the low order 4 bits all set, and are ID2 values that can be used to fetch data. This value of 0x0020 is an - internal pointer reference, which needs to be right shifted by 4 bits to - become 0x0002, which is then a byte offset to be added to the above + internal pointer reference, which needs to be right shifted by 4 bits + to become 0x0002, which is then a byte offset to be added to the above indexOffset plus two (to skip the count), so it points to the (0xc, 0x14) pair. </para> <para> + So far we have only described internal index references where the high + order 16 bits are zero. That suffices for single descriptor + blocks. But in the case of the type 0x0101 descriptor block, we have + an array of subblocks. In this case, the high order 16 bits of an + internal index reference are used to select the subblock. Each + subblock starts with a 16 bit indexOffset which points to the count + and array of 16 bit integer pairs which are offsets in the current + subblock. + </para> + <para> Finally, we have the offset and size of the "b5" block located at offset 0xc with a size of 8 bytes in this descriptor block. The "b5" block has the following format: @@ -1433,10 +1443,6 @@ <para> The following item types are known, but not all of these are implemented in the code yet. - Note: it appears that some types can have a IPOS value or a ID2 value - depending on the size of the field in question. It is safer to check - every field than for me to say what the "usually" contain. Absolute - values though, are generally going to be constant. </para> <literallayout class="monospaced"><![CDATA[ 0002 AutoForward allowed @@ -1778,24 +1784,27 @@ <refsect1 id='pst.file.desc3.32.5'> <title>32 bit Associated Descriptor Item 0x0101</title> <para> - This descriptor block contains a list of ID1 values. It is used when an - ID1 (that would normally point to a type 0x7cec or 0xbcec descriptor block) - contains more data than can fit in any single descriptor of those types. - In this case, it points to a type 0x0101 block, which contains a list - of ID1 values that themselves point to the actual descriptor blocks. - The descriptor blocks that are pointed to by this list of ID1 values - are almost but not quite the same as the standard 0xbcec blocks. Decoding - these blocks is still incomplete. + This descriptor block contains a list of ID1 values. It is used when + an ID1 (that would normally point to a type 0x7cec or 0xbcec + descriptor block) contains more data than can fit in any single + descriptor of those types. In this case, it points to a type 0x0101 + block, which contains a list of ID1 values that themselves point to + the actual descriptor blocks. The total length value in the 0x0101 + header is the sum of the lengths of the blocks pointed to by the list + of ID1 values. The result is an array of subblocks, that may contain + index references where the high order 16 bits specify which descriptor + subblock to use. Only the first descriptor subblock contains the + signature (0xbcec or 0x7cec). </para> <literallayout class="monospaced"><![CDATA[ 0000 01 01 02 00 26 28 00 00 18 77 0c 00 b8 04 00 00 0000 signature [2 bytes] 0x0101 constant 0002 count [2 bytes] 0x0002 in this case -0004 unknown [4 bytes] 0x002826 in this case +0004 total length [4 bytes] 0x002826 in this case repeating -0008 id [4 bytes] 0x0c7718 in this case -000c id [4 bytes] 0x0004b8 in this case +0008 id1 [4 bytes] 0x0c7718 in this case +000c id1 [4 bytes] 0x0004b8 in this case ]]></literallayout> </refsect1> @@ -1810,10 +1819,10 @@ 0000 signature [2 bytes] 0x0101 constant 0002 count [2 bytes] 0x0002 in this case -0004 unknown [4 bytes] 0x0029ea in this case +0004 total length [4 bytes] 0x0029ea in this case repeating -0008 id [8 bytes] 0x008310 in this case -0010 id [8 bytes] 0x00831c in this case +0008 id1 [8 bytes] 0x008310 in this case +0010 id1 [8 bytes] 0x00831c in this case ]]></literallayout> </refsect1>