Sorry,
In my last email, the attached WPD is actually WordPervect 6+ :p
When I was trying to save it as 5.0, I tried to change the extension to
also read .WPD...
WordPerfect took this to mean that I made a mistake in the Format I
chose and just used 6+.
I figured out most of the structure, and that I can't read SHORT and
UINT just as is,
but have to read them in Byte by Byte.
So far I can parse all 5 Packets, (in each special header), and can find
Packet Type 1, (DocumentSummary).
I figured out that even in v5.0 the Descriptive Name is 68 (no Null at
end), and the remainder of the string is the
Descriptive Type. (same applies to v5.1)
I got as far as reading in the Creation Date, but only in v5.1,,, since
it has those 2 FormatMarkers surronding the date.
Version 5.0 did not have the 2 FormatMarkers and no date... (date is 10
bytes)
The thing is, when I reopen the .WP document again, WordPerfect somehow
retains the Creation date, and Revision date.
I tried saving a copy of the origianl, just so I can see the Revision
bytes change and used a Binary Comparision tool.
It seems that Packet 6 (Document Specific flags) is the one that
significatly changes.
There is no documentation on how WordPerfect stores the Creation date,
Revision dates for v5.0... but it gets it somehow.
Could WordPerfect be using bits, instead of bytes, to represent the
Date?
0000 0000 0000 0000 (SHORT representation)
day(0-4) month(5-9) year(10-15)
Any thoughts?
Thanks,
Ismail.
P.S.
WordPerfect allows the user to add or remove Document Summary fields...
Where would those go? (in a certain Packet?)
________________________________
From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] On Behalf Of Ismail
Ibric
Sent: Thursday, May 03, 2007 8:02 PM
To: libwpd-devel@lists.sourceforge.net
Subject: [Libwpd-devel] WPD 5 file structure
I'm wondering about the Structure of a WPD 5 document.
I searched and found WPD 5.1 Document Format info online.
The Header and the Special Header seem to be correct,
But the Packet has garbage.
Here are the Stuct's that I con-struct-ed. :-)
typedef struct tagWPD_HDR
{
CHAR reserved1;
CHAR WPC[3];
UINT DocAreaPos;
BYTE ProductType;
BYTE FileType;
BYTE MajorVer;
BYTE MinorVer;
USHORT Encrytped;
USHORT reserved2;
}WPD_HDR;
typedef struct tagWPD_SP_HDR
{
UINT PacketCount;
UINT Size;
UINT NextPacketPos;
}WPD_SP_HDR;
typedef struct tagWPD_PACKET
{
USHORT PacketType;
USHORT PacketLen;
USHORT NextPacketPos;
}WPD_PACKET;
...
void main(...)
{
WPD_HDR header = {0};
WPD_SP_HDR sp_hdr = {0};
WPD_PACKET packet = {0};
UINT filepos = 0;
//read whole WPD into "buffer" ...
//will revise later to seek and read into struct
...
memcpy( &header, buffer, sizeof(header) );
filepos += sizeof(header);
if( header.ProductType != 1 && header.FileType != 10)
goto EndOfFunction;
memcpy( &sp_hdr, buffer + filepos, sizeof(sp_hdr) );
filepos += sizeof(sp_hdr);
memcpy( &packet, buffer + filepos, sizeof(packet) );
filepos += sizeof(packet);
//Break Here and look what's in the Struct's
EndOfFunction:
//free memory and close handles (files, etc..)
}
The header looks like this:
- reserved1 -1
- WPC "WPC"
- DocAreaPos 30452
- ProductType 1
- FileType 10
- MajorVersion 2
- MinorVersion 1
- Encrypted 0
- reserved2 512
The sp_hdr looks like this:
- PacketCount 5
- Size 30897 (matches the filesize)
- NextPacketPos 512
The packet looks like this:
- PacketType 16586
- PacketLen 31909
- NextPacketPos 33850
I must be mistaken, as far as the WPD_PACKET struct is concerned...
What's the correct way to read the Packets, any thoughts?
Attached is the WPD I was playing with.
Thanks,
Ismail.
-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
Libwpd-devel mailing list
Libwpd-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/libwpd-devel