Thanks David,
I assumed that WordPerfect, like MS Office, saves the Revision date in
the actual document somewhere.
So it seems that not all the Document Summary fields that WordPerfect
allows you to Add/Remove are
actually part of the the Metadada. :-)
Im still wondering why WordPerfect doesn't store anything (anymore) in
the 1st part of the DocSumm packet,
where the CreationDate use to be (26 bytes + null). If I had to guess, I
would say that when v5.0 of the format was
being considered it might have been intended for the CreationDate, but
the formated version maybe?
"Tuesday Oct. 15, 1956 1:36 PM". Not sure though.
Is it safe to say that version 5.0 does not have (or no longer has)
CreationDate saved as part of the Metadata?
I ask this 'cause WordPerfect 10 does not use the 1st 26 bytes for the
date when saving the Metadata.
Maybe earlier versions did...?!?
Thanks for all the help guys.
Ismail.
________________________________
From: David Hislop [mailto:[EMAIL PROTECTED]
Sent: Wednesday, May 09, 2007 9:18 AM
To: Ismail Ibric; libwpd-devel@lists.sourceforge.net
Subject: Re: [Libwpd-devel] WPD 5 file structure
Ismail,
I hope to have something done on this soon. I've already modified the
--info code to display the creation date, but it was a quick hack. Need
to do it properly, but the existing code already supports reading the
date, so it wasn't too hard. I've been away for a while, and should get
back to it later this week.
A couple of things:
1. WordPerfect doesn't store the Revision Date. It uses the mod date of
the file from the OS.
2. The Document Summary fields you can add and remove are stored just
like any other Document Summary field. I have some in one of my
documents that aren't supported by the current libwpd, e.g. typist, but
I dropped in some default code to indicate their presence. I'll remove
that code and in future if I get a chance try out some real code to
handle those configurable fields.
regards - David
At 02:08 pm 08/05/2007, Ismail Ibric wrote:
Content-class: urn:content-classes:message
Content-Type: multipart/alternative;
boundary="----_=_NextPart_001_01C79126.7E0446EC"
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]
<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