This file is a modified version of the original document published by Microsoft. Copies of the original are available at various places including:
http://www.wotsit.org/download.asp?f=wword60
It has had its formatting regularised to facilitate automated extract of the structure definitions contained within it. It also contains:
-some corrections for "obvious" mistakes in the original.
-rationalisation of the types used in the structure definitions to use unsigned variables as the basic type.
-signed types might need adding back in specific instances that I missed.
-rationalisation of the way bitfields are described.
MODIFICATION HISTORY
23-Jul-2001 shaheedhaque Merge Werner's changes.
19-Jul-2001 shaheedhaque Reconciled with Word
97 spec.
17-Jul-2001 shaheedhaque Reorder alphabetically
to ease comparison.
14-Jul-2001 shaheedhaque First pass of corrections/tidyup.
7-Jul-2001 shaheedhaque First released.
*/
12/02/93 | Updated structures and sprm table for Windows Word 6.0 format |
10/25/91 | Reformatted document, removed revision marks and completed thesummary of changes from Windows Word 1.x to 2.0 format. |
5/10/91 | Updated structures and sprm table for Windows Word 2.0 format. |
1/23/90 | Corrected offsets with the definition of the FIB |
6/16/89 | Updated structure definitions |
1/9/89 | Document Created |
f used to name a flag (a variable containing a Boolean value). Usually the object referred to will contain either 1 (fTrue, TRUE) or 0 (fFalse, FALSE). (eg. fWidowControl, fShadow)
l used to name a4 byte integer value ( a long). (eg. lcb)
w used to name a 2 byte integer value (a short ).
b used to name a 1 byte integer value
cp used to name a variable that contains a character position within the document. always a 4 byte quantity.
fc used to name a variable that contains an offset from the beginning of a file. always a 4 byte quantity.
xa used to name a variable that contains a width of an objectimaged on screen or on hard copy that is measured in units of 1/1440 of an inch. This unit which is one-twentieth of a point size (1/20 * 1/72 in) is called a twip in this documentation. (eg. xaPage is the width of a page).
ya used to name a variable that contains a height of an object imaged on screen or on hard copy that is measured in twips.
dxa used to name a variable that contains the horizontal distance of an object measured from some reference point expressed in twips. (eg. pap.dxaLeft is the distance of the left boundary of a paragraph measured from the left margin of the page)
dya used to name a variable that contains the vertical distance of an object measured from some reference point expressed in twips. (eg. pap.dyaAbs is the vertical distance of the top of a paragraph from a reference frame declared in the pap).
dxp used to name a variable that contains the horizontal distance of an object measured from some reference point expressed in Macintosh pixel units (1/72?). (eg. dxpSpace)
dyp used to name a variable that contains the vertical distance of an object measured from some reference point expressed in Macintosh pixel units (1/72?).
rg prefix used to signify that the data structure being defined is an array. (eg.rgb (an array of bytes), rgcp (an array of cps), rgfc (an array of fcs), rgfoo (an array of foos).
i prefix used to signify that an integer value is used as an index into an array. (eg. itbd is an index into rgtbd, itc is an index into rgtc.)
c prefix used to signify that an integer value is a count of some number of objects. (eg. a cb is a count of bytes, a cl is a count of lines, ccol is a count of columns, a cpe.is a count of picture elements.)
grp prefix used to name an array of bytes that contains one or more copies of a variable length data structure with the instances of the data structure stored one after the other in the array. (eg. a grpprl is a array of bytes that stores a group of prls.)
grpf prefix used to name an integer or byte value whose bits are used as flags. (eg. grpfIhdt is a group of flags that records the types of headers that are stored for a particular section of a document).
The two following modifiers are used occasionally in this documentation:
First means that variable marks the first of a range of objects. For example, cpFirst would mark the first character position of a range of characters in a document. fcFirst would mark the file offset of the first byte of a range of bytes stored in a file.
Lim means the variable marks the limit of a range of objects (ie. is the index of the last object in a range plus 1). For example, cpLim would be the limit CP of a range of characters in a document. fcLim would be the limit file offset of a range of bytes stored in a file.
A word docfile consists of a main stream, a summary information stream, and 0 or more object streams which contain private data for OLE 2.0 objects embedded within the Word document. The summary information stream is described in the section immediately following this one.The object streams contain binary data for embedded objects.Word has no knowledge of the contents of these streams; this information is accessed and manipulated though the OLE 2.0 APIs.The main stream of the Word docfile contains all other binary data.The majority of this document describes the contents of the main stream.
FIB
Stored at beginning of page 0 of the file. fib.fComplex will be set to zero.
text of body, footnotes, headers
Text begins at the position recorded in fib.fcMin.
group of SEPXs
SEPXs immediately follow the text and are concatenated one after the other. A SEPX may not span a 512-byte page boundary. If a SEPX will not fit in the space that remains in a page from recording previous text or SEPXs, space is skipped to allow the SEPX to start on a page boundary. A SEPX is guaranteed to be less than 512 bytes in length. If all sections in the document have default properties, no SEPXs would be stored.
pictures
Word picture structures immediately follow the preceding text/SEPXs and are concatenated one after the other if the document contains pictures.
embedded objects-native data
Word embedded object structures immediately follow the preceding text/SEPXs/picture and are concatenated one after the other if the document contains embedded objects.
FKPs for CHPs
The first CHP FKP begins at the first 512-byte boundary after the last byte of text\SEPX\picture\embedded objectswritten. The remaining CHP FKPs are recorded in the 512-byte pages that immediately follow.
FKPs for PAPs
The first PAP FKP is written in the 512-byte page that immediately follows the page used to record the last CHP FKP. The remaining PAP FKPs are recorded in the 512-byte pages that follow.
stsh (style sheet)
The style sheet is written at the beginning ofthe 512-byte page that immediately follows the last PAP FKP. This is recorded in all Windows Word documents.
plcffndRef (footnote reference position table)
Written immediately after the stsh if the document contains footnotes.
plcffndTxt (footnote text position table)
Written immediately after the plcffndRef.if the document contains footnotes.
plcfandRef (annotation reference position table)
Written immediately after the plcffndTxt if the document contains annotations.
plcfandTxt (annotation text position table)
Written immediately after the plcfandRef.if the document contains footnotes.
plcfsed (section table)
Written immediately after the previously recorded table. Recorded in all Windows Word documents.
plcfphe (paragraph height table)
Written immediately after the plcfsed, if paragraph heights have beenrecorded.
plcfpgd (page table)
Written immediately after the previously recorded table, if page boundary information is recorded.
sttbGlsy (glossary name string table)
Written immediately after the previously recorded table, if the document stored is a glossary.
plcfglsy (glossary entry text position table)
Written immediately after the sttbGlsy, if the document stored is a glossary.
plcfhdd (header text position table)
Written immediately after the previously recorded table, if the documentcontains headers or footers.
plcfbteChpx (bin table for CHP FKPs)
Written immediately after the previously recorded table. This is recorded in all Windows Word documents.
plcfbtePapx (bin table for PAP FKPs)
Written immediately after the plcfbteChpx. This is recorded in all Windows Word documents.
sttbfFn(table of font name strings)
Written immediately after the plcfbtePapx. This is recorded in all Windows Word documents.The names of the fonts correspond to the ftc codes in the CHP structure.For example, the first font name listed corresponds is the name for ftc = 0[1].
plcffldMom(table of field positions and statuses for main document)
Written immediately after the sttbfFn if the main document contains fields.
plcffldHdr(table of field positions and statuses for headersubdocument)
Written immediately after the previously recorded table, if the header subdocument contains fields.
plcffldFtn(table of field positions and statuses for footnote subdocument)
Written immediately after the previously recorded table, if the footnote subdocument contains fields.
plcffldAtn(table of field positions and statuses for annotation subdocument)
Written immediately after the previously recorded table, if the annotation subdocument contains fields.
plcffldMcr(table of field positions and statuses for macro subdocument)
Written immediately after the previously recorded table, if the macro subdocument contains fields.
sttbfBkmk(table of bookmark name strings)
Written immediately after the previously recorded table, if the document contains bookmarks.
plcfBkmkf(table recording beginning CPs of bookmarks)
Written immediately after the sttbfBkmk, if the document contains bookmarks.
plcfBkmkl(table recording limit CPs of bookmarks)
Written immediately after the plcfBkmkf, if the document contains bookmarks.
cmds (recording of command data structures)
Written immediately after the previously recorded table, if special commands are linked to this document.
plcfmcr (macro text position table -- delimits boundaries of text for macros stored in macro subdocument)
Written immediately after the previously recorded table, if a macro subdocument is recorded.
sttbfMcr (table of macro name strings)
Written immediately after the plcfmcr, if a macro subdocument is recorded.
PrEnv (data structures recording the print environment for document)
Written immediately after the previously recorded table, if a print environment is recorded for the document.
wss (window state structure)
Written immediately after the end of previously recorded structure, if the document was saved while a window was open.
dop (document properties record)
Written immediately after the end of previously recorded structure.. This is recorded in all Windows Word documents.
sttbfAssoc (table of associated strings)
Autosave source(name of original)
Written immediately after the sttbfAssoc table.This field only appears in autosave files.These files are normal Word for Windows document in every other way.Also, autosaved files are typically in the complex file format except thatwe don't overwrite the tables (plcf*, etc.).I.e., an autosaved file is typically longer than the equivalent Word for Windows documen
FIB
Text of body, footnotes, headers stored during last full save
Text begins at the position recorded in fib.fcMin.
Group of SEPXs stored during last full save
Pictures stored during last full save
Embedded Ojbects stored during last full save
Drawing Objects stored during last full save
FKPs for CHPs during last full save
The first CHP FKP begins at the first 512-byte boundary after the last byte of text\SEPX\picture\embedded object written. The remaining CHP FKPs are recorded in the 512-byte pages that immediately follow.
FKPs for PAPs during last full save
The first PAP FKP is written in the 512-byte page that immediately follows the page used to record the last CHP FKP. The remaining PAP FKPs are recorded in the 512-byte pages that follow.
STSH (if style sheet has not grown since last full save)
Any text, SEPXs, pictures, embedded objects, or drawing objects stored during first fast save
Any CHP FKPs stored during first fast save
Any PAP FKPs stored during first fast save
Any text, SEPXs,pictures, embedded objects, or drawing objects stored during second fast save
Any CHP FKPs stored during second fast save
Any PAP FKPs stored during second fast save
...
Any text, SEPXs, pictures, embedded objects, or drawing objects stored during nth fast save
Any CHP FKPs stored during nth fast save
Any PAP FKPs stored during nth fast save
stsh (if style sheet has grown since last full save)
plcffndRef (footnote reference position table)
Written immediately after the stsh if the document contains footnotes.
plcffndTxt (footnote text position table)
Written immediately after the plcffndRef.if the document contains footnotes.
plcfandRef (annotation reference position table)
Written immediately after the plcffndTxt if the document contains annotations.
plcfandTxt (annotation text position table)
Written immediately after the plcfandRef.if the document contains footnotes.
plcfsed (section table)
Written immediately after the previously recorded table. Recorded in all Windows Word documents.
plcfphe (paragraph height table)
Written immediately after the plcfsed, if paragraph heights have beenrecorded.
plcfpgd (page table)
Written immediately after the previously recorded table, if page boundary information is recorded.
sttbGlsy (glossary name string table)
Written immediately after the previously recorded table, if the document stored is a glossary.
plcfglsy (glossary entry text position table)
Written immediately after the sttbGlsy, if the document stored is a glossary.
plcfhdd (header text position table)
Written immediately after the previously recorded table, if the documentcontains headers or footers.
plcfbteChpx (bin table for CHP FKPs)
Written immediately after the previously recorded table. This is recorded in all Windows Word documents.
plcfbtePapx (bin table for PAP FKPs)
Written immediately after the plcfbteChpx. This is recorded in all Windows Word documents.
sttbfFn (table of font name strings)
Written immediately after the plcfbtePapx. This is recorded in all Windows Word documents.The names of the fonts correspond to the ftc codes in the CHP structure.For example, the first font name listed corresponds is the name for ftc = 0 [1] .
sttbRMark (table of Author names for Revision Marking)
Written immediately after the plcfbtePapx if revision marking is being tracked in the document.(REVIEW davidlu Each record in the sttb stores a 2-byte length extra portion, which contains undefined data.David, no definition of an sttb is given in this document, thus no definition of ?extra? data in an sttb is given.)
plcffldMom(table of field positions and statuses for main document)
Written immediately after the sttbfFn if the main document contains fields.
plcffldHdr(table of field positions and statuses for headersubdocument)
Written immediately after the previously recorded table, if the header subdocument contains fields.
plcffldFtn(table of field positions and statuses for fotnote subdocument)
Written immediately after the previously recorded table, if the footnote subdocument contains fields.
plcffldAtn(table of field positions and statuses for annotation subdocument)
Written immediately after the previously recorded table, if the annotation subdocument contains fields.
plcffldMcr(table of field positions and statuses for macro subdocument)
Written immediately after the previously recorded table, if the macro subdocument contains fields.
sttbfBkmk(table of bookmark name strings)
Written immediately after the previously recorded table, if the document contains bookmarks.
plcfBkmkf(table recording beginning CPs of bookmarks)
Written immediately after the sttbfBkmk, if the document contains bookmarks.
plcfBkmkl(table recording limit CPs of bookmarks)
Written immediately after the plcfBkmkf, if the document contains bookmarks.
cmds (recording of command data structures)
Written immediately after the previously recorded table, if special commands are linked to this document.
plcfmcr (macro text position table -- delimits boundaries of text for macros stored in macro subdocument)
Written immediately after the previously recorded table, if a macro subdocument is recorded.
sttbfMcr (table of macro name strings)
Written immediately after the plcfmcr, if a macro subdocument is recorded.
PrEnv (data structures recording the print environment for document)
Written immediately after the previously recorded table, if a print environment is recorded for the document.
wss (window state structure)
Written immediately after the end of previously recorded structure, if the document was saved while a window was open.
pms (print/mail merge state information structure)
Written immediately after the end of previously recorded structure, ( REVIEW davidlu;stevebu;jayb)
sttbEmbeddedFonts (table of font name strings for Embedded True Type Fonts stored in the file)
Written immediately after the end of the previously recorded structure, if Embedded True Type Fonts were stored in the document when it was saved.
rgfcEmbeddedFonts (array of FCs bounding the Embedded font data)
Written immediately after the end of the sttbEmbeddedFonts, if the file contains an sttbEmbeddedFonts. The binary data for the embedded font corresponding to font n in sttbEmbeddedFonts is stored in the main stream at file position rgfc[n], and has a length of rgfc[n+1] - rgfc[n].
Clx (encoding of the sprm lists and piece table for a complex file)
Written immediately after the end of previously recorded structure. This is recorded in all complex Windows Word documents.
dop (document properties record)
Written immediately after the end of previously recorded structure.. This is recorded in all Windows Word documents.
sttbfAssoc (table of associated strings)
Autosave source (documented above)
-Paragraph ends are stored as a single <Carriage Return > character (ASCII 13).No other occurrences of this character sequence are allowed.
-Hard line breaks which are not paragraph ends are stored as ASCII 11.Other line break or word wrap information is not stored.
-Breaking hyphens are stored as ASCII 45 (normal hyphen code); Non-required hyphens are ASCII 31. Non-breaking hyphens are stored as ASCII 30.
-Non-breaking spaces are stored as 160.Normal spaces are ASCII 32.
-Page breaks and Sectionmarks are ASCII 12 (normal form feed); if there's an entry in the section table, it's a section mark, otherwise it's a page break.
-Column breaks are stored as ASCII 14.
-Tab characters are ASCII 9 (normal).
-The field begin mark which delimits the beginning of a field is ASCII 19. The field end mark which delimits the end of a field is ASCII 21. The field separator ,which marks the boundary between the preceding field code text and following field expansion text within a field, is ASCII 20. The field escape character is the '\' character which also serves as the formula mark.
-The cell mark which delimits the end of a cell in a table row is stored as ASCII 7 and has the fInTable paragraph property set to fTrue (pap.fInTable == 1).
-The row mark which delimits the end of a table row is stored as ASCII 7 and has the fInTable paragraph property and fTtp paragraph property set to fTrue (pap.fInTable == 1 && pap.fTtp == 1).
The following ASCII codes are treated as "special" characters when they
have the character property special on (chp.fSpec == 1):
0 | Current page number |
1 | Picture |
2 | Autonumbered footnote reference. |
3 | Footnote separator character |
4 | Footnote continuation character |
5 | Annotation reference |
6 | Line number |
7 | Hand Annotation picture (Generated in Pen Windows) |
8 | Drawn object |
10 | Abbreviated date (eg. ?Wed, Dec 1, 1993?) |
11 | Time in hours:minutes:seconds |
12 | Current section number |
14 | Abbreviated day of week (eg. ?Thu? for ?Thursday?) |
15 | Day of week (eg. ?Thursday?) |
16 | Day short (eg. ?9? for the ninth day of the month) |
22 | Hour of current time with no leading zero |
23 | Hour of current time (two digit with leading zero when necessary) |
24 | Minute of current time with no leading zero |
25 | Minute of current time(two digit with leading zero when necessary) |
26 | Seconds of current time |
27 | AM/PM for current time |
28 | Current time in hours:minutes:seconds in old format |
29 | Date M (eg. ?December 2, 1993?) |
30 | Short Date (eg. ?12/2/93?) |
33 | Short Month (eg. ?12? to represent ?December?) |
34 | Long Year (eg. ?1993?) |
35 | Short Year (eg. ?93?) |
36 | Abbreviated month (eg. ?Dec? to represent ?December?) |
37 | Long month (eg. ?December?) |
38 | Current time in hours:minutes (eg. ?2:01?) |
39 | Long date (eg. ?Thursday, December 2, 1993?) |
41 | Print Merge Helper field |
Note:The end of a section is also the end of a paragraph. The last character of a section is a section mark which stands in place of the paragraph marknormally required to end a paragraph. An exception is made for the last character of a document which is always a paragraph mark although the end of a document is always an implicit end of section.
If !fib.fComplex, thedocument text stream is represented by the text beginning at fib.fcMin up to (but not including) fib.fcMac. Otherwise, the document is represented by the piece table stored in the file in the data beginning at .fib.fcClx.
The document text stream includes text that is part of the main document, plus any text that exists for the footnote, header, macro, or annotation subdocuments. The sizes of the main document and the header, footnote, macro and annotation subdocuments are stored in the fib, in variables fib.ccpText, fib.ccpFtn, fib.ccpHdr, fib.ccpMcr, fib.ccpEdn, fib.ccpTxbx, fib.ccpHdrTxbox and fib.ccpAtn respectively. In a non-complex file, this means that the text of the main document begins atfib.fcMinin the file and continues.through fib.fcMin + fib.ccpText; that the text of the footnote subdocument begins at fib.fcMin + fib.ccpText and extends to fib.fcMin + fib.ccpText + fib.ccpFtn;that the text of the header subdocument begins at fib.fcMin + fib.ccpText + fib.ccpFtn and extends to fib.fcMin + fib.ccpText + fib.ccpFtn + fib.ccpHdr; that the text of the annotation subdocument begins at .fib.fcMin + fib.ccpText + fib.ccpFtn + fib.ccpHdr and extends to fib.fcMin + fib.ccpText + fib.ccpFtn + fib.ccpHdr + ccpAtn;that the text of the endnote subdocument begins at .fib.fcMin + fib.ccpText + fib.ccpFtn + fib.ccpHdr +ccpAtn and extends to fib.fcMin + fib.ccpText + fib.ccpFtn + fib.ccpHdr + fib.ccpEdn; that the text of the textbox subdocument begins at .fib.fcMin + fib.ccpText + fib.ccpFtn + fib.ccpHdr +fib.ccpAtn + fib.ccpEdn and extends to fib.fcMin + fib.ccpText + fib.ccpFtn + fib.ccpHdr + fib.ccpEdn + fib.ccpTxbx andthat the text of the header textbox subdocument begins at .fib.fcMin + fib.ccpText + fib.ccpFtn + fib.ccpHdr +fib.ccpAtn + fib.ccpEdn+ fib.ccpTxbxand extends to fib.fcMin + fib.ccpText + fib.ccpFtn + fib.ccpHdr + fib.ccpEdn + fib.ccpTxbx+ fib.ccpHdrTxbx.
In a complex, fast-saved file, the main document text must be located by examining the piece table entries from the 0th piece table entry through the piece table entry that describes cp = fib.ccpText.
A footnote subdocument's text must be located by examining the piece table entries beginning with the one that describes cp=fib.ccpText through the entry that describes cp = fib.ccpText + fib.ccpFtn.
A header subdocument's text must be located by examining the piece table entries beginning with the one that describes cp=fib.ccpText + ccpFtn through the entry that describes cp = fib.ccpText +fib.ccpFtn + fib.ccpHdr.
Anannotation subdocument's text must be located by examining the piece table entries beginning with the one that describes cp=fib.ccpText + ccpFtn + fib.ccpHdr through the entry that describes cp = fib.ccpText +fib.ccpFtn + fib.ccpHdr +fib.ccpAtn.
An endnote subdocument's text must be located by examining the piece table entries beginning with the one that describes cp=fib.ccpText + ccpFtn + fib.ccpHdr + fib.ccpAtn through the entry that describes cp = fib.ccpText +fib.ccpFtn + fib.ccpHdr +fib.ccpAtn.+ fib.ccpEdn
A textbox subdocument's text must be located by examining the piece table entries beginning with the one that describes cp=fib.ccpText + ccpFtn + fib.ccpHdr + fib.ccpAtn + fib.ccpEdn through the entry that describes cp = fib.ccpText +fib.ccpFtn + fib.ccpHdr +fib.ccpAtn.+ fib.ccpEdn + fib.ccpTxbx
A header textbox subdocument's text must be located by examining the piece table entries beginning with the one that describes cp=fib.ccpText + ccpFtn + fib.ccpHdr + fib.ccpAtn + fib.ccpEdn + fib.ccpTxbx through the entry that describes cp = fib.ccpText +fib.ccpFtn + fib.ccpHdr +fib.ccpAtn.+ fib.ccpEdn + fib.ccpTxbx+ fib.ccpHdrTxbx
The PAP is a data structure that holds uncompressed paragraph property information; the CHP (pronounced like "chip") is a structure that holds uncompressed character property information .Each paragraph in a Word document inherits a default set of paragraph and character properties from one of the paragraph styles recorded in the style sheet data structure (STSH).
A particularPAP is converted into its compressed form, the PAPX , by first comparing the pap for a paragraph with the pap stored in the style sheet for the paragraph's style. Any properties in the paragraph's PAP that are different from those stored in the style sheet PAP are encoded as a list of sprms (grpprl). sprms express how the content of the style sheet PAP should be transformed to create the properties for the paragraph. A PAPX is a variable-length data structure that begins with a count of words that encodes the PAPX length. It contains a istd (index to style descriptor) which specifies which style entry in the style sheet contains the default paragraph and character properties for the paragraph, paragraph height information, and the list of difference sprms. If the only difference between the paragraph's PAP and the style's PAP were in the justification code field, which is one byte long, one two-byte sprm, sprmPJc,would be generated to express that difference; thus the total PAPX size would be 5 bytes. This is better than 54-1 compression since the total size of a PAP is 274 bytes.
To convert a CHP for a sequence of characters contained within a single paragraph into its compressed form, the CHPX, it's first necessary to know the paragraph style that is assigned to the paragraph containing those characters and any character style that may be tagging the character run. The character properties inherited from the paragraph style are moved into a buffer. If the chp.istd of the chp to be compressed is not istdNormalChar, the changes recorded for that character style are applied to buffer. Then the character properties of the character sequence are compared with the character properties generated usingthe paragraph's style and the run?s character style. . Any properties in the paragraph's CHP that are different from those stored in the generated CHP are encoded as a list of sprms (grpprl ).The sprms express how the content of the CHP generated from the paragraph and character styles should be transformed to create the character properties for the text run. A CHPX is a variable-length data structure that begins with a count of words that encodes the CHPX length followed by the list of difference sprms.
If one of the bit fields in the CHP to be compressed such as fBold is different from the reference CHP, you would build a difference sprm using sprmCFBold in the first byte and the bytes pattern 0x81 in the second byte which signifies that the value of the bit in the CHP to be compressed is of opposite value from the value stored in the reference CHP. If there was no difference, sprmCFBold would not be recorded in the grrprl to be generated. If there were difference in a field larger than a single bit such as the chp.hps,a sprmCHps would be generated to record the value of chp.hps in the chp to be compressed. If the chp.hps were equal in both the chp to be compressed and the reference CHP, sprmCHps would not be recorded in the grrprl that is generated. If a sequence of characters has the same character properties and the sequence spans more than one paragraph, it's necessary to examine each paragraph's properties and to generate a different CHPX every time there is a change of style.
In Word documents, the fundamental unit of text for which character exception information is kept is the run of exception text, a contiguous sequence of characters stored on disk that all have the same exception properties with respect to their underlying style character properties. Each run would have an entry recorded in a CHPX FKP. If a user neverchanged the character properties inherited from the styles used in his document and did a complete save of his document, although each of those styles may have different properties, the entire document stream would be one large run of exception text and one CHPX would suffice to describe the character properties of the entire document.
The fundamental unit of text for which paragraph properties are recorded is the paragraph. Every paragraphhas an entry recorded in a PAPX FKP.
The CHPX FKP and the PAPX FKP have similar physical structures. An FKP is a 512-byte data structure that is stored in one page of a Word file. At offset 511 is a 1-byte count named crun, which is a count of runs of exception text for CHPX FKPs and which is a count of paragraphs in PAPX FKPs. Beginning at offset 0 of the FKP is an array of crun+1 FCs, named rgfc, which records the beginning and limit FCs of crun runs of exception text or paragraphs.
For CHPX FKPs, immediately following fkp.rgfc is a byte array of crun word offsets to CHPXs from the beginning of the FKP. This byte array, named rgb,is in 1-to-1 correspondence with the rgfc. The ith rgb gives the word offset of the exception property that belongs to the run\paragraph whose beginning in FC space is rgfc[i] and whose limit is rgfc[i+1] in FC space.
For PAPX FKPSs, immediately following the fkp.rgfc is an array of 7 byte entries called BXs. This array called the rgbx is in 1-to-1 correspondence with the rgfc. The first byte of the ith BX entry contains a single byte field which gives the word offset of the PAPX that belongs to the paragraph whose beginning in FC space is rgfc[i] and whose limit is rgfc[i+1] in FC space. The last six bytes of the ith BX entry contain a PHE structure that stores the current paragraph height of the paragraph whose beginning in FC space is rgfc[i] and whose limitis rgfc[i+1] in FC space.
The fact that the offset to propertystored in the rgb or rgbx is a word offset implies thatCHPXs and PAPXs are stored in FKPs beginning on word boundaries. Since the values stored in the rgb/rgbx allow random access throughout the FKP, space within an FKP can be conserved by storing the offset of the same physical CHPX/PAPX in rgb/rgbx entries when severalruns or paragraphs in the FKP have the same properties. Word uses this optimization.
An rgb or rgbx[].b value of 0 is used in another optimization. When a rgb or rgbx[].b value of 0 is stored in an FKP, it means that instead of referring to a particular CHPX/PAPX in the FKP the 0 value is a signal thatthe reader should constructfor itself a commonly encountered predefined set of properties.
For CHPX FKPs a 0 rgb value means that the properties of the run of text were exactly equal to the character properties inherited from the style of the paragraph it was in. For PAPX FKPs, a 0 rgbx[].b valuemeans that the paragraph?s properties were exactly equal to the paragraph properties of the Normal style (stc == 0) and the paragraph contained 1 line of 240 pixels, with acolumn width of 7980 dxas.
Whennew entries are added to an FKP, there must be unallocated space in the middle of the FKP equal to 5 bytes for CHPXs (size of an FC plus size of one-byte word offset) or 11 bytes for PAPXs (size of an FC plus the size of a seven byte BX entry), plus the size of the new CHPX or PAPX if the property being added is not already recorded in the FKP and is not the property coded with a 0 rgb/rgbx[].b value. To add a new property in a CHPX FKP, existing rgb entries are moved four bytes to the right in the FKP. . To add a new property in a PAPX FKP, existing rgbx entries are moved four bytes to the right in the FKP. The new FC is added at the end of the rgfc . The new CHPX or PAPX is recorded on a 2-byte boundary before the previously recorded properties stored at the end of the block. The word offset of the beginning of the CHPX or PAPX is stored as the last entry of the relocated rgb/rgbx[].b, and finally, the crun stored at offset 511 is incremented.
A style is a set of formatting information collected together and given a name.Word 6.0 supports paragraph and character styles, previous versions supported only paragraph styles.Character styles have just one type of formatting, paragraph styles have both character and paragraph formatting.The style sheet establishes a correspondence between a style code and a style definition.
Note that the storage and behavior of styles has changed radically since
WinWord 2, beginning with nFib 63. Some of the differences are:
This document describes only the final Word 6.0 version of the stylesheet,
not the Word 2.x version.
The styles for a document (both paragraph and character styles) are
stored in an array in each document.
[2] When new styles are created, they are added to the end of the array.The
array can have unused slots.Some slots at the beginning of the array are
reserved for specific styles, whether they have been created yet or not.
[3]Paragraph and character styles are stored in the same array.Each
document has a separate array, so the same style will usually
[4] have a different istd in two different documents. Thus style matching
between documents must be done by name (or by sti if the styles are built-in.)
Styles are usually referred to using an istd.The istd is an index into
an array of STD's (STyle Descriptions).A (doc, istd) pair uniquely identifies
a style because it tells which style in which array.
Parts of a style (for more information, see the STD structure below):
The formatting of a paragraph (the PAP) and a character (the CHP) depend
on the paragraph and character styles applied to them, as well as any additional
formatting stored in the FKPs.The PAP and CHP are constructed in a layered
fashion:
For a PAP:
For a CHP:
Note that the resulting PAP and CHP have fields that indicate what style
was applied: PAP.istd, CHP.istd.
FieldSize Comment
cbStshi 2 bytes size of the following STSHI structure[5]
STSHI (cbStshi) Stylesheet Information
Then for each style in the stylesheet (stshi.cstd), the following is
stored:
cbStd 2 bytes size of the following STD structure
STD (cbStd)the style description
The cb preceding the STSHI in the file is the length of the STSHI as
stored in the file.The current definition of the STSHI structure might
be longer or shorter than that stored in the file, the stylesheet reader
routine needs to take this into account.
stshi.cstd: The number of styles in this stylesheet.There will
be stshi.cstd (cbSTD, STD) pairs in the file following the STSHI.Note that
styles can be empty, ie. cbSTD == 0.
stshi.cbSTDBaseInFile: The STD structure (see below) is divided
into a fixed-length "base", and a variable length part.The stshi.cbSTDBaseInFile
indicates the size in bytes of the fixed-length base of the STD as it was
written in this file.If the STD base is grown in a future version, the
file format doesn't change, because the stylesheet reader can discard parts
it doesn't know about, or use defaults if the file's STD is not as large
as it was expecting.(Currently, stshi.cbSTDBaseInFile is 8.)
stshi.fStdStylenamesWritten: Previous versions of Word did not
store the style name if the style was a built-in style; Word 6.0 does,
for compatibility with future versions.Note that the built-in stylenames
may need to be "regenerated" if the file is opened in a different language
or if stshi.nVerBuiltInNamesWhenSaved doesn't match the expected value.
stshi.stiMaxWhenSaved: This indicates the last built-in style
known to the version of Word that saved this file.
stshi.istdMaxFixedWhenSaved: Each array of styles has some fixed-index
styles at the beginning.This indicates the number of fixed-index positions
reserved in the stylesheet when it was saved.
stshi.nVerBuiltInNamesWhenSaved: Since built-in stylenames are
saved with the document, this provides an way to see if the saved names
are the same "version" as the names in the version of Word that is loading
the file.If not, the built-in stylenames need to be "regenerated", ie.
the old names need to be replaced with the new.
stshi.ftcStandardChpStsh: This is the default font for this stylesheet.
// STD: STyle Definition
//The STD contains the entire definition of a style.
//It has two parts, a fixed-length base (cbSTDBase bytes
long)
//and a variable length remainder holding the name, and
the upx and upe
//arrays (a upx and upe for each type stored in the style,
std.cupx)
//Note that new fields can be added to the BASE of the
STD without
//invalidating the file format, because the STSHI contains
the length
//that is stored in the file.When reading STDs from an
older version,
//new fields will be zero.
typedef struct _STD
{
// Base part of STD:
ushortsti :12;/* invariant style identifier */
ushortfScratch :1; /* spare field for any temporary use,
always reset back to zero! */
ushortfInvalHeight :1; /* PHEs of all text with this style
are wrong */
ushortfHasUpe :1;/* UPEs have been generated */
ushortfMassCopy :1; /* std has been mass-copied; if unused
at
save time, style should be deleted */
ushortsgc : 4;/* style type code */
ushortistdBase :12; /* base style */
ushortcupx : 4;/* # of UPXs (and UPEs) */
ushortistdNext :12; /* next style */
ushortbchUpe;/* offset to end of upx's, start of upe's
*/
// Variable length part of STD:
ucharstzName[2];/* sub-names are separated by chDelimStyle
*/
/* chargrupx[]; */
/* the UPEs are not stored on the file; they are a cache
of the based-on
chain */
/* chargrupe[]; */
} STD;
The cb preceding each STD is the length of the data, which includes
all of the STD except the grupe array (which is derived after the file
is read in, by building each UPE from the base style UPE plus the exceptions
in the UPX.)A cb of zero indicates an empty slot in the style array, ie.
no style has that istd.Note that the STD structure may be longer or shorter
than the one stored in the file, stshi.cbSTDBaseInFile indicates the length
of the base of the STD (up to stzName) as stored in the file.The stylesheet
reader routine has to take this into account.
The variable-length part of the STD actually has three variable-length
subparts, the stzName, the grupx, and the grupe.Since this doesn?t fit
well into a C structure declaration, some processing is needed to figure
out where one part stops and the next part begins.An important note is
that all variable-length parts and subparts of the STD begin on EVEN-BYTE
OFFSETS within the STD, even if the length of the preceding variable-length
part was odd.
std.sti: The sti is an identifier which built-in style this is,
or stiUser for a user-defined style.An sti is intended to be permanent
through versions of Word, although new sti's may be added in new versions.The
sti definitions are:
// standard sti codes - these are invariant identifiers
for built-in styles
// and must remain the same (ie. don't renumber them, or
old files will be
// messed up.)
// NOTE: sti and istd are the same for Normal and level
styles
// If you want to define a new built-in style:
//1) Decide if you really need one--it will exist in all
future versions!
//2) Add a new sti below.You can take the first available
slot.
//3) Change stiMax, and stiPapMax or stiChpMax
//4) Add entry to _dnsti, and the two ids's in strman.pp
//5) Add case in GetDefaultUpdForSti
//6) Change cstiMaxBuiltinDependents if necessary
// If you want to change the definition of a built-in style
//1) In order to make WinWord 2 documents that use the
style look like
//they did in WinWord 2, add a case in GetDefaultUpdForSti
to handle
//fOldDef.This definition will be used when converting
WinWord 2
//stylesheets.
//2) If you change the name of a built-in style, increment
nVerBuiltInNames
#define stiNormal0// 0x0000
#define stiLev11// 0x0001
#define stiLev22// 0x0002
#define stiLev33// 0x0003
#define stiLev44// 0x0004
#define stiLev55// 0x0005
#define stiLev66// 0x0006
#define stiLev77// 0x0007
#define stiLev88// 0x0008
#define stiLev99// 0x0009
#define stiLevFirststiLev1
#define stiLevLaststiLev9
#define stiIndex110// 0x000A
#define stiIndex211// 0x000B
#define stiIndex312// 0x000C
#define stiIndex413// 0x000D
#define stiIndex514// 0x000E
#define stiIndex615// 0x000F
#define stiIndex716// 0x0010
#define stiIndex817// 0x0011
#define stiIndex918// 0x0012
#define stiIndexFirststiIndex1
#define stiIndexLaststiIndex9
#define stiToc119// 0x0013
#define stiToc220// 0x0014
#define stiToc321// 0x0015
#define stiToc422// 0x0016
#define stiToc523// 0x0017
#define stiToc624// 0x0018
#define stiToc725// 0x0019
#define stiToc826// 0x001A
#define stiToc927// 0x001B
#define stiTocFirststiToc1
#define stiTocLaststiToc9
#define stiNormIndent28// 0x001C
#define stiFtnText29// 0x001D
#define stiAtnText30// 0x001E
#define stiHeader31// 0x001F
#define stiFooter32// 0x0020
#define stiIndexHeading 33// 0x0021
#define stiCaption34// 0x0022
#define stiToCaption35// 0x0023
#define stiEnvAddr36// 0x0024
#define stiEnvRet37// 0x0025
#define stiFtnRef38// 0x0026char style
#define stiAtnRef39// 0x0027char style
#define stiLnn40// 0x0028char style
#define stiPgn41// 0x0029char style
#define stiEdnRef42// 0x002Achar style
#define stiEdnText43// 0x002B
#define stiToa44// 0x002C
#define stiMacro45// 0x002D
#define stiToaHeading46// 0x002E
#define stiList47// 0x002F
#define stiListBullet48// 0x0030
#define stiListNumber49// 0x0031
#define stiList250// 0x0032
#define stiList351// 0x0033
#define stiList452// 0x0034
#define stiList553// 0x0035
#define stiListBullet2 54// 0x0036
#define stiListBullet3 55// 0x0037
#define stiListBullet4 56// 0x0038
#define stiListBullet5 57// 0x0039
#define stiListNumber2 58// 0x003A
#define stiListNumber3 59// 0x003B
#define stiListNumber4 60// 0x003C
#define stiListNumber5 61// 0x003D
#define stiTitle 62// 0x003E
#define stiClosing63// 0x003F
#define stiSignature64// 0x0040
#define stiNormalChar65// 0x0041char style
#define stiBodyText66// 0x0042
#define stiBodyText267// 0x0043
#define stiListCont68// 0x0044
#define stiListCont269// 0x0045
#define stiListCont370// 0x0046
#define stiListCont471// 0x0047
#define stiListCont572// 0x0048
#define stiMsgHeader73// 0x0049
#define stiSubtitle74// 0x004A
#define stiMax75// number of defined sti's
#define stiUser0x0ffe// user styles are distinguished by
name
#define stiNil0x0fff// max for 12 bits
See below for the names of these styles.
std.stc: The type of each style is indicated by std.sgc.The two
types currently in use are:
sgcPara1// A paragraph style
sgcChp2// A character style
More style types may exist in the future, so styles of an unknown type
should be discarded.
std.istdBase: The style that this style is based on.A style is
always based on another style or the null style (istdNil).Following a "chain"
of based-on styles will always end at the null style, because a based-on
chain cannot have a loop in it.A style can have up to 11 "ancestors" in
its based-on chain, including the null style.A style's definition is built
up from the style that it is based on.See std.cupx, std.grupx, std.grupe.
std.istdNext: The style that should be applied after this one.For
a paragraph style, this is the style that is applied when Enter is pressed
at the end of a paragraph.For a character style, the next style is essentially
ignored, but should be the same as the current style.
std.stzName: The name of the style, including aliases.The name
is stored as an stz (preceded by a length byte, followed by a null-terminator.)A
style name can contain multiple "aliases", separated by commas.Aliases
are alternate names for the same style (eg. a style named "a,b,c" has three
aliases, and can be referred to by "a", "b", or "c", or any combination.)WinWord
2.x did not have aliases, but MacWord 5.x did.If a style is a built-in
style, the built-in stylename is always stored first.
All names (and aliases) must be unique within a stylesheet (eg. styles
"a,b" and "b,c" should not exist in the same stylesheet, as "b" matches
multiple stylenames.)
A stylename (including all its aliases and comma separators) can be
up to 253 characters long.So the stz format of that name can be up to 255
characters.
The built-in stylenames (corresponding to each sti above) are defined
for each language version of Word.For the USA, the names are:
// These are the names of the built-in styles as we want
to present them
// to the user.
Normal
Heading 1
Heading 2
Heading 3
Heading 4
Heading 5
Heading 6
Heading 7
Heading 8
Heading 9
Index 1
Index 2
Index 3
Index 4
Index 5
Index 6
Index 7
Index 8
Index 9
TOC 1
TOC 2
TOC 3
TOC 4
TOC 5
TOC 6
TOC 7
TOC 8
TOC 9
Normal Indent
Footnote Text
Annotation Text
Header
Footer
Index Heading
Caption
Table of Figures
Envelope Address
Envelope Return
Footnote Reference
Annotation Reference
Line Number
Page Number
Endnote Reference
Endnote Text
Table of Authorities
Macro Text
TOA Heading
List
List 2
List 3
List 4
List 5
List Bullet
List Bullet 2
List Bullet 3
List Bullet 4
List Bullet 5
List Number
List Number 2
List Number 3
List Number 4
List Number 5
Title
Closing
Signature
Default Paragraph Font
Body Text
Body Text Indent
List Continue
List Continue 2
List Continue 3
List Continue 4
List Continue 5
Message Header
Subtitle
std.cupx: This is the number of UPXs in the std.grupx array.See
below.
std.grupx: This is an array
[6] of variable-length UPXs, with std.cupx UPXs in the array.This array
begins after the variable-length stzName field, at the next even-byte offset
within the STD.A UPX (Universal Property eXception) describes the difference
in formatting of this style as compared to its based-on style.The UPX structure
looks like this:
typedef union _UPX
{
struct
{
uchar grpprl[cbMaxGrpprlStyleChpx];
} chpx;
struct
{
ushort istd;
uchar grpprl[cbMaxGrpprlStylePapx];
} papx;
ucharrgb[1];
} UPX;
Each UPX stored in a file is not a complete UPX, rather it is a UPX
with all trailing zero bytes lopped off, and preceded by a ushort length
field.So it is stored like:
FieldSize Comment
cbUPX 2 bytes size of the following UPX structure
UPX (cbUPX)Nonzero prefix of a UPX structure
Each UPX begins on an even-byte offset within the STD, even if the length
of the previous UPX (cbUPX) was odd.
The meaning of each UPX depends on the style type (std.sgc).For a paragraph
style, std.cupx is 2.The first UPX is a paragraph UPX (UPX.papx) and the
second UPX is a character UPX (UPX.chpx).For a character style, std.cupx
is 1, and that UPX is a character UPX (UPX.chpx).Note that new UPXs may
be added in the future, so std.cupx might be larger than expected.Any UPXs
past those expected should be discarded.
The grpprl within each UPX contains the differences of this property
type for this style from the UPE of that property type for the based on
style.For example, if two paragraph styles, A and B, were identical except
that B was bold where A was not, and B was based on A, B would have two
UPXs, where the paragraph UPX would have an empty grpprl
[7], and the character UPX would have a bold sprm in the grpprl.Thus
B looks just like A (since B is based on A), with the exception that B
is bold.
std.grupe: This is an array (group) of variable-length UPEs.
These are not stored in the file!Rather, they are constructed using
the std.istdBase and std.grupx fields.A UPE (Universal Property Expansion)
describes the ?end-result? of the property formatting, ie. what the style
looks like.The UPE structure is the non-zero prefix of a UPD structure.The
UPD structure looks like this:
typedef union _UPD
The UPEs for a style are constructed by taking the UPEs from the based-on
style, and applying the UPXs to them. Obviously, if the UPEs for the based-on
style haven?t yet been constructed, that style?s UPEneeds to be constructedfirst.Eventually
by following the based-on chain, a style will be based on the null style
(istdNil). The UPEs for the null style are predefined:
So, for a paragraph style, the first UPE is a UPE.pap.It can be constructed
by starting the with first UPE from the based-on style (std.istdBase),
and then applying the first UPX (UPX.papx) in std.grupx to that UPE.To
apply a UPX.papx to a UPE.pap, set UPE.pap.istd equal to UPX.papx.istd,
and then apply the UPX.papx.grpprl to UPE.pap.Similarly, the second UPE
is a UPE.chp.It can be constructed by starting with the second UPE from
the based-on style, and then applying the second UPX (UPX.chpx) in std.grupx
to that UPE.To apply a UPX.chpx to a UPE.chp, apply the UPX.chpx.grpprl
to UPE.chp.Note that a UPE.chp for a paragraph style should always have
UPE.chp.istd == istdNormalCh
For a character style, the first (and only) UPE (a UPE.chpx) can be
constructed by starting with the first UPE from the based-on style (std.istdBase),
and then applying the first UPX (UPX.chpx) in std.grupx to that UPE.To
apply a UPX.chpx to a UPE.chpx, take the grpprl in UPE.chpx.grpprl (which
has a length of UPE.chpx.cbGrpprl) and merge the grpprl in UPX.chpx.grpprl
into it.Merging grpprls is a tricky business, but for character styles
it is easy because no prls in character style grpprls should interact with
each other.Each prl from the source (the UPX.chpx.grpprl) should be inserted
into the destination (the UPE.chpx.grpprl) so that the sprm of each prl
is in increasing order, and any prls that have the same sprm are replaced
by the prl in the source. UPE.chpx.cbGrpprl is then set to the length of
resulting grpprl, and UPE.chpx.istd is set to the style?s istd.
Three sprms, sprmPChgTabs , sprmTDefTable, and sprmTDefTable10 can be
longer than 256 bytes. The method for calculating the length of sprmPChgTabs
is recorded below with the description of the sprm.For sprmTDefTable and
sprmTDefTable10, the length of the parameter plus 1 is recorded in the
two bytes beginning at offset 1.
For variable length sprms, the total length of the sprm is the countrecorded
at offset 1 plus two. The parameter immediately follows the count.
Unless
otherwise noted, when a sprm is applied to a property the sprm's parameter
changes the old value of the property in question to the value stored in
the sprm parameter.
pic.dyaCropTop
pic.dxaCropRight,
pic.dyaCropBottom The paragraph sprms used to encode paragraph properties in a PAPX are:
sprmPJc, sprmPFSideBySide, sprmPFKeep, sprmPFKeepFollow, sprmPFPageBreakBefore,
sprmPBrcp, sprmPPc, sprmPBrcl,sprmPNLvelAnm, sprmPFNoLineNumb, sprmPFSideBySide,sprmPDxaRight,
sprmPDxaLeft., sprmPDxaLeft1, sprmPDyaLine, sprmPDyaBefore, sprmPDyaAfter,
sprmPFNoAutoHyph,sprmPFInTable, sprmPFTtp, sprmPDxaAbs, sprmPDyaAbs, sprmPDxaWidth,
sprmPBrcTop, sprmPBrcLeft, sprmPBrcBottom, sprmPBrcRight, sprmPBrcBetween,
sprmPBrcBar, sprmPDxaFromText, sprmPDyaFromText, sprmPWr,sprmPWHeightAbs,
sprmPShd, sprmPDcs,sprmPAnld and sprmPChgTabsPapx.
The table sprms used to encode table properties in a PAPX stored in
a PAPX FKP are: sprmTJc, sprmTDxaGapHalf, sprmTDyaRowHeight, sprmTDefTableShd
, and sprmTDefTable.
The section sprms used to encode section properties in a SEPX are:
sprmPIstdPermute (opcode 3) is a complex sprm which is applied to a
piece when the style codes of paragraphs within a piece must be mapped
to other style codes. It has the following format:
Field Size Comment
sprm byte opcode( ==3)
To interpret sprmPIstdPermute, first check if pap.istd is greater than
the istdFirst recorded in the sprm and less than or equal to the istdLast
recorded in the sprm If not, the sprm has no effect. If it is, pap.istd
is set to rgistd[pap.istd - istdFirst]. sprmPIstdPermute is only stored
in grpprls linked to a piece table. It should never be recorded
in a PAPX.
sprmPIncLvl (opcode 4) is applied to pieces in the piece table thatcontain
paragraphs with style codes
If pap.stc is < 1 or > 9, sprmPIncLvl has no effect. Otherwise, if
the value stored in the byte has its highest order bit off, the value is
a positive difference which should be added tofrom pap.istd and then pap.stc
should be set to min(pap.istd, 9). If the byte value has its highest order
bit on, the value is a negative difference which should be sign extended
to a word and then subtracted from pap.istd. Then pap.stc should be set
to max(1, pap.istd). sprmPIncLvl is only stored in grpprls linked
to a piece table.
The sprmPAnld (opcode 12) sets the pap.anld which is a data structure
which describes what Word will display as an automatically generated sequence
number at the beginning of an autonumbered paragraph. See the description
of the ANLD in the data structure descriptions.
The sprmPChgTabsPapx (opcode 15) is a complex sprm that describes changes
in tab settings from the underlying style. It is only stored as part of
PAPXs stored in FKPs and in the STSH. It has the following
format:
Field Size Comment
sprm byte opcode
WhensprmPChgTabsPapx is interpreted, the rgdxaDel of the sprm is applied
first to the pap that is being transformed. This is done by deleting from
the pap the rgdxaTab entry and rgtbd entry of any tab whose rgdxaTab value
is equal to one of the rgdxaDel values in the sprm. It is guaranteed that
the entries in pap.rgdxaTab and the sprm?s rgdxaDel and rgdxaAdd are recorded
in ascending dxa order.
Then the rgdxaAdd and rgtbdAdd entries are merged into the pap?s rgdxaTab
and rgtbd arrays so that the resulting pap rgdxaTab is sorted in ascending
order with no duplicates.
sprmPNest (opcode 18) causes its operand, a two-byte dxa value to be
added to pap.dxaLeft. If the result of the addition is less than 0, 0 is
stored into pap.dxaLeft. It is used to shift the left indent of a paragraph
to the right or left. sprmPNest is only stored in grpprls linked
to a piece table.
sprmPDyaLine (opcode 20) moves a 4 byte LSPD structure into pap.lspd.
Two short fields are stored in this data structure. The first short in
the structure is named lspd.dyaLine and the second is named lspd.fMultLinespace.
When lspd.fMultLinespace is 0, the magnitude of lspd.dyaLine specifies
the amount of space that will be provided for lines in the paragraph in
twips. When lspd.dyaLine is positive, Word will ensure that AT LEAST the
magnitude of lspd.dyaLine will be reserved on the page for each line displayed
in the paragraph. If the height of a line becomes greater than lspd.dyaLine,
the size calculated for that line will be reserved on the page. When lspd.dyaLine
is negative, Word will ensure that EXACTLYthe magnitude of lspd.dyaLine
(-lspd.dyaLine) will be reserved on the page for each line displayed in
the paragraph. When lspd.fMultLinespace is 1, Word will reserve for each
line the (maximal height of the line*lspd.dyaLine)/240.
The sprmPChgTabs (opcode 23) is a complex sprm which describes changes
tab settings for any paragraph within a piece. It is only stored as part
of a grpprl linked to a piece table. It has the following format:
Field Size Comment
itbdDelMax and itbdAddMax are defined to be equal to 50. This means
that the largest possible instance of sprmPChgTabs is 354. When the length
of the sprm is greater than or equal to 255, the cch field will be set
equal to 255. When cch == 255, the actual length of the sprm can be calculated
as follows: length= 2 + itbdDelMax * 4 + itbdAddMax * 3.
WhensprmPChgTabs is interpreted, the rgdxaDel of the sprm is applied
first to the pap that is being transformed. This is done by deleting from
the pap the rgdxaTab entry and rgtbd entry of any tab whose rgdxaTab value
is within the interval [rgdxaDel[i] - rgdxaClose[i], rgdxaDel[i] + rgdxaClose[i]]
It is guaranteed that the entries in pap.rgdxaTab and the sprm?s rgdxaDel
and rgdxaAdd are recorded in ascending dxa order.
Then the rgdxaAdd and rgtbdAdd entries are merged into the pap?s rgdxaTab
and rgtbd arrays so that the resulting pap rgdxaTab is sorted in ascending
order with no duplicates.
The sprmPPc (opcode 29) is a complex sprm which describes changes in
the pap.pcHorz and pap.pcVert. Itis able to change both fields? contents
in parallel. It has the following format:
sprmPPc is interpreted by moving pcVert to pap.pcVert if pcVert != 3
and by moving pcHorz to pap.pcHorz if pcHorz != 3. sprmPPc is stored in
PAPX FKPs and also in grpprls linked to piece table entries.
sprmCPicLocation (opcode 68) is used ONLY IN CHPX FKPs. This sprm moves
the 4 bytes of data stored at offset 2 in the sprm into the chp.fcPic field.
It simultaneously sets chp.fSpec to 1. This sprm is also when the chp.lTagObj
field that is unioned with chp.fcPic is to be set for OLE objects.
sprmCChse (opcode 73) is used to record a character set id for text
that was pasted into the Word document that used a character set different
than Word?s default character set. When chp.fChsDiff is 0, the character
set used for a run of text is the default character set for the version
of Word that last saved the document. When chp.fChsDiff is 1, chp.chse
specifies the character set used for this run of text. When this sprm is
interpreted, the byte at offset 1 in the sprm is moved to chp.fChsDiff
and the word stored at offset 2 is moved to chp.chse.
sprmCSymbol (opcode 74) is used to specify the font and the character
that will be used within that font to display a symbol character in Word.The
length byte recorded at offset 1 in this sprm will always be 3. When this
sprm is interpreted the two byte font code recorded at offset 2 is moved
to chp.ftcSym, the single byte character specifier recorded at offset 4
is moved to chp.chSym and chp.fSpec is set to 1.
sprmCIstdPermute (opcode 81) (which has the same format as sprmPIstdPermute
(opcode 3)). is a complex sprm which is applied to a piece when the style
codes for character styles tagging character runs within a piece must be
mapped to other style codes. It has the following format:
Field Size Comment
sprm byte opcode( ==81)
To interpret sprmCIstdPermute, first check if chp.istd is greater than
the istdFirst recorded in the sprm and less than or equal to the istdLast
recorded in the sprm If not, the sprm has no effect. If it is, chp.istd
is set to rgstd[chp.istd - istdFirst] and any chpx stored in that rgstd
entry is applied to the chp. sprmCIstdPermute is only stored in grpprls
linked to a piece table. It should never be recorded in a CHPX.
Note that it is possible that an istd may be recorded in the rgistd
that refers to a paragraph style. This will no harmful consequences since
the istd for a paragraph style should never be recorded in chp.istd.
sprmCDefault (opcode 82) clears the fBold, fItalic, fOutline,fStrike,
fShadow, fSmallCaps, fCaps, fVanish, kul and ico fields of the chp to 0.
It was first defined for Word 3.01 and had to be backward compatible with
Word 3.00 so it is a variable length sprm whose count of bytes is 0. It
consists of the sprmCDefault opcode followed by a byte of 0. sprmCDefaultis
stored only in
grpprls linked to piece table entries.
sprmCPlain (opcode 83) is used to make the character properties of runs
of text equal to the style character properties of the paragraph that contains
the text. When Word interprets this sprm, the style sheet CHP is copied
over the original CHP preserving the fSpec setting from the original CHP.
sprmCPlainis stored only in grpprls linked to piece table entries.
sprms 85 through 92 (sprmCFBold through sprmCFVanish) set single bit
properties in the CHP. When the parameter of the sprm is set to 0 or 1,
then the CHP property is set to the parameter value.
When the parameter of the sprm is 128, then the CHP property is set
to the value that is stored for the property in the style sheet. CHP When
the parameter of the sprm is 129, the CHP property is set to the negation
of the value that is stored for the property in the style sheet CHP. sprmCFBold
through sprmCFVanish are stored only in grpprls linked to piece
table entries.
sprmCSizePos (opcode 95) is a four byte sprm consisting of the sprm
opcode and a three byte parameter. The sprm has the following format:
When Word interprets this sprm, if hpsSize != 0 then chp.hps is set
to hpsSize. If cInc is != 0, the cInc is interpreted as a 7 bittwos complement
number and the procedure described below for interpreting sprmCHpsInc is
followed to increase or decrease the chp.hps by the specified number of
levels. If hpsPos is != 128, then chp.hpsPos is set equal to hpsPos. If
fAdjust is on , hpsPos != 128 and hpsPos != 0 and the previous value of
chp.hpsPos == 0, then chp.hps is reduced by one level following the method
described for sprmCHpsInc. If fAdjust is on, hpsPos == 0 and the previous
value of chp.hpsPos != 0, then the chp.hps value is increased by one level
using the method described below for sprmCHpsInc.
sprmCHpsInc(opcode 100) is a two-byte sprm consisting of the sprm opcode
and a one-byte parameter. Word keeps an ordered array of the font sizes
that are defined for the fonts recorded in the system file with each font
size transformed into an hps. The parameter is a one-byte twos complement
number. Word uses this number to calculate an index in the font size array
to determine the new hps for a run. When Word interprets this sprm and
the parameter is positive, it searches the array of font sizes to find
the index of the smallest entry in the font size table that is greater
than the current chp.hps.It then adds the parameter minus 1 to the index
and maxes this with theindex of the last array entry. It uses the result
as an index into the font size array and assigns that entry of the array
to chp.hps.
When the parameter is negative, Word searches the array of font sizes
to find the index of the entry that is less than or equal to the current
chp.hps. It then adds the negative parameter to the index and does a min
of the result with 0. The result of the min function is used as an index
into the font size array and that entry of the array is assigned to chp.hps.
sprmCHpsInc is stored only in grpprls linked to piece table entries.
sprmCHpsPosAdj (opcode 102) causes the hps of a run to be reduced the
first time time text is superscripted or subscripted and causes the hps
of a run to be increased when superscripting/subscripting is removed from
a run. The one byte parameter of this sprm is the new hpsPos value that
is to be stored in chp.hpsPos. If the new hpsPos is not equal 0 (meaning
that the text is to be super/subscripted), Word first examines the current
value of chp.hpsPos to see if it is equal to 0. If so, Word uses the algorithm
described for sprmCHpsInc to decrease chp.hps by one level. If the new
hpsPos== 0 (meaning the text is not super/subscripted), Word examines the
current chp.hpsPos to see if it is not equal to 0. If it is not (which
means text is being restored to normal position), Word uses the sprmCHpsInc
algorithm to increase chp.hps by one level. After chp.hps is adjusted,
the parameter value is stored in chp.hpsPos. sprmCHpsPosAdj is stored only
in grpprls linked to piece table entries.
The parameter of sprmCMajority (opcode 103) is itself a list of character
sprms
sprmCHpsInc1 (opcode 106) is used to increase or decrease chp.hps by
increments of 1. This sprm is interpreted by adding the two byte increment
stored at byte 2 of the sprm to chp.hps. If this result is less than 8,
the chp.hps is set to 8. If the result is greater than 32766, the chp.hps
is set to 32766.
sprmCMajority50 (opcode 108) has the same format as sprmCMajority and
is interpreted in the same way.
sprmPicScale (opcode 120) is used to scale the x and y dimensions of
a Word picture and to set the cropping for each side of the picture. The
sprm begins with the one byte opcode, followed by the length of the parameter
(always 12) stored in a byte. The 12-byte long operand consists of an array
of 6 two-byte integer fields. The 0th integer contains the new setting
for pic.mx. The 1st integer contains the new setting for pic.my. The 2nd
integer contains the new setting for pic.dxaCropLeft. The 3rd integer contains
the new setting for pic.dyaCropTop. The 4th integer contains the new setting
for pic.dxaCropRight. The 5th integer contains the new setting of pic.dxaCropBottom.
sprmPicScale is stored only in grpprls linked to piece table entries.
sprmTDxaLeft (opcode 183) is called to adjust the x position within
a column which marks the left boundary of text within the first cell of
a table row.This sprm causes a whole table row to be shifted left or right
within its column leaving the horizontal width and vertical height of cells
in the row unchanged. Byte 0 of the sprm contains the opcode, and the new
dxa position, call it dxaNew, is stored as an integer in bytes 1 and 2.
Word interprets this sprm by adding
sprmTDxaGapHalf (opcode 184) adjusts the white space that is maintained
between columns by changing tap.dxaGapHalf. Because we want the left boundary
of text within the leftmost cell to be at the same location after the sprm
is applied, Word also adjusts tap.rgdxCenter[0] by the amount that tap.dxaGapHalf
changes. Byte 0 of the sprm contains the opcode, and the new dxaGapHalf,
call it dxaGapHalfNew, is stored in bytes 1 and 2. When the sprm is interpreted,
the change between the old and new dxaGapHalf values, tap.dxaGapHalf -
dxaGapHalfNew, is added to tap.rgdxaCenter[0] and thendxaGapHalfNew is
moved to tap.dxaGapHalf. sprmTDxaGapHalf is stored in PAPXs and also in
grpprls
linked to piece table entries.
sprmTTableBorders (opcode 187) sets the tap.rgbrcTable. The sprm is
interpreted by moving 12 bytes beginning at byte 1 of the sprm to tap.rgbrcTable.
sprmTDefTable10 (opcode 188) is an obsolete version of sprmTDefTable
(opcode 154) that was used in WinWord 1.x.Its contents are identical to
those in sprmTDefTable, except that the TC structures contain the obsolete
structures BRC10s.
sprmTDefTable (opcode 190) defines the boundaries of table cells (tap.rgdxaCenter)
and the properties of each cell in a table (tap.rgtc). The 0th byte of
the sprm contains its opcode. Bytes 1 and 2 store a two-byte length of
the following paramter. Byte 3 contains the number of cells that are to
be defined by the sprm, call it itcMac.When the sprm is interpreted, itcMac
is moved to tap.itcMac. itcMac cannot be larger than 32. In bytes 4 through
4+2*(itcMac + 1) -1 , is stored an array of integer dxa values sorted in
ascending order which will be moved to tap.rgdxaCenter. In bytes 4+ 2*(itcMac
+ 1) through byte 4+2*(itcMac + 1) + 10*itcMac - 1 is stored an array of
TC entries corresponding to the stored tap.rgdxaCenter. This array is moved
to tap.rgtc. sprmTDefTable is only stored in PAPXs.
sprmTDefTableShd (opcode 191) is similar to sprmTDefTable, and compliments
it by defining the shading of each cell in a table (tap.rgshd).The 0th
byte of the sprm contains its opcode. Bytes 1 and 2 store a two-byte length
of the following paramter. Byte 3 contains the number of cells that are
to be defined by the sprm, call it itcMac.itcMac cannot be larger than
32. In bytes 4 through 4+2*(itcMac + 1) -1 , is stored an array of SHDs.This
array is moved to tap.rgshd.sprmTDefTable is only stored in PAPXs.
sprmTSetBrc (opcode 193) allows the border definitions(BRCs) within
TCs to be set to new values. It has the following format:
This sprm changes the brc fields selected by the fChange* flags in the
sprm to the brc value stored in the sprm, for every tap.rgtc entry whose
index is greater than or equal to itcFirst and less than itcLim.sprmTSetBrc
is stored only in grpprls linked to piece table entries.
sprmTInsert (opcode 194) inserts new cell definitions in an existing
table?s cell structure. The 0th byte of the sprm contains the opcodeByte
1 is the index within tap.rgdxaCenter and tap.rgtc at which the new dxaCenter
and tc values will be inserted. Call this index itcInsert. Byte 2 contains
a count of the cell definitions to be added to the tap, call it ctc. Bytes
3 and 4 contain the width of the cells that will be added, call it dxaCol.
If there are already cells defined at the index where cells are to be inserted,
tap.rgdxaCenter entries at or above this index must be moved to the entry
ctc higher and must be adjusted by adding ctc*dxaCol to the value stored.
The contents of tap.rgtc at or above the index must be moved 10*ctc bytes
higher in tap.rgtc. If itcInsert is greater thanthe original tap.itcMac,
itcInsert - tap.ctc columns beginning with index tap.itcMac must be added
of width dxaCol (loop from itcMac to itcMac+itcInsert-tap.ctc adding dxaCol
to the rgdxaCenter value of the previous entry and storing sum as dxaCenter
of new entry), whose TC entries are cleared to zeros. Beginning with index
itcInsert, ctc columns of widthdxaCol must be added by constructing new
tap.rgdxaCenter and tap.rgtc entrieswith the newly defined rgtc entries
cleared to zeros. Finally, the number of cells that were added to the tap
is added to tap.itcMac. sprmTInsert is stored only in grpprls linked
to piece table entries.
sprmTDelete (opcode 195) deletes cell definitions from an existing table?s
cell structure. The 0th byte of the sprm contains the opcode. Byte 1 contains
the index of the first cell to delete, call it itcFirst. Byte 2 contains
the index of the cell that follows the last cell to be deleted, call it
itcLim. sprmTDelete causes any rgdxaCenter and rgtc entries whose index
is greater than or equal to itcLim to be moved to the entry that is itcLim
- itcFirstlower, and causes tap.itcMac to be decreased by the number of
cells deleted. sprmTDelete is stored only in grpprls linked to piece
table entries.
sprmTDxaCol (opcode 196) changes the width of cells whose index is within
a certain range to be a certain value. The 0th byte of the sprm contains
the opcode. Byte 1 contains the index of the first cell whose width is
to be changed, call it itcFirst. Byte 2 contains the index of the cell
that follows the last cell whose width is to be changed, call it itcLim.
Bytes 3 and 4 contain the new width of the cell, call it dxaCol. This sprm
causes the itcLim - itcFirst entries of tap.rgdxaCenter to be adjusted
so thattap.rgdxaCenter[i+1] = tap.rgdxaCenter[i] + dxaCol. Any tap.rgdxaCenter
entries that exist beyond itcLim are adjusted to take into account the
amount added to or removed from the previous columns.sprmTDxaCol is stored
only in grpprls linked to piece table entries.
sprmTMerge (opcode 197) merges the display areas of cells within a specified
range. The 0th byte of the sprm contains the opcode. Byte 1 contains the
index of the first cell that is to be merged, call it itcFirst. Byte 2
contains the index of the cell that follows the last cell to be merged,
call it itcLim. This sprm causes tap.rgtc[itcFirst].fFirstMerged to be
set to 1. Cells in the range whose index is greater than itcFirst and less
than itcLim have tap.rgtc[].fMerged set to 1. sprmTMerge is stored only
in grpprls linked to piece table entries.
sprmTSplit (opcode 198) splits the display areas of merged cells into
their originally assigned display areas. The 0th byte of the sprm contains
the opcode. Byte 1 contains the index of the first cell that is to be split,
call it itcFirst. Byte 2 contains the index of the cell that follows the
last cell to be split, call it itcLim. This sprm clears tap.rgtc[].fFirstMerged
and tap.rgtc[].fMerged for all rgtc entries >= itcFirst and < itcLim.
sprmTSplit is stored only in grpprls linked to piece table entries.
SprmTSetBrc10 (opcode 199) has the same format as SprmTSetBrc
but uses the old BRC10 structure.
sprmTSetShd (opcode 200) allows the shading definitions(SHDs) within
a tap to be set to new values. The 0th byte of the sprm contains the opcode.
Byte 1 contains the index of the first cell whose shading is to be changed,
call it itcFirst. Byte 2 contains the index of the cell that follows the
last cell whose shading is to be changed, call it itcLim. Bytes 3 and 4
contain the SHD structure, call it shd. This sprm causes the itcLim - itcFirst
entries of tap.rgshd to be set to shd. sprmTDxaCol is stored only in grpprls
linked to piece table entries.
The complex part of a file (CLX) is composed of a number of variable-sized
blocks of data. Recorded first are any grpprls that may be referenced
by the plcfpcd (if the plcfpcd has no grpprl references,
no grpprls will be recorded) followed by the plcfpcd. Each
block in the complex part is prefaced by a clxt (clx type),
which is a 1-byte code, either 1 (meaning the block contains a grpprl)
or 2 (meaning this is the plcfpcd).In both cases, the clxt
is followed by a 2-byte cb which is the count of bytes of the grpprl
or the piece table.So the formats of the two types of blocks are:
clxt = 1clxtGrpprl
or
clxt = 2clxtPlcfpcd
The entire CLXwould look like this, depending on the number of grpprl's:
clxtGrpprl
When the prm in pcds stored in the plcfpcd, contains
an igrpprl (index to a grpprl), the index stored is the order in which
that grpprl was stored in the CLX.
When a document is recorded in complex format, a piece that was originally
part of one paragraph can be copied or movedwithin a different paragraph.
To find the beginning of the paragraph containing a character in a complex
document, it?s first necessary to search for the piece containing the character
in the piece table. Then calculate the FC in the file that stores
the character from the piece table information. Using the FC, search
the FCs FKP for the largest FC less than the character?s FC, call it fcTest.
If the character atfcTest-1 is contained in the current piece, then the
character corresponding to that FC in the piece is the first character
of the paragraph. If that FC is before or marks the beginning of the piece,
scan a piece at a time towards the beginning of the piece table until a
piece is found that contains a paragraph mark. This can be done by using
the end of the piece FC, finding the largest FC in its FKP that is less
than or equal to the end of piece FC, and checking to see if the character
in front of the FKP FC (which must mark a paragraph end) is within the
piece. When such an FKP FC is found, the FC marks the first byte of paragraph
text.
To find the end of a paragraph for a character in a complex format file,
again it is necessary to know the piece that contains the character and
the FC assigned to the character. Using the FC of the character, first
search the FKP that describes the character to find the smallest FC in
the rgfc that is larger than the character FC. If the FC found in the FKP
is less than or equal to the limit FC of the piece, the end of the paragraph
that contains the character is at the FKP FC minus 1. If the FKP FC that
was found was greater than the FC of the end of the piece, scan piece by
piece toward the end of the document until a piece is found that contains
a paragraph end mark. It?s possible to check if a piece contains a paragraph
mark by using the FC of the beginning of the piece to search in the FKPs
for the smallest FC in the FKP rgfc that is greater than the FC of the
beginning of the piece. If the FC found is less than or equal to the limit
FC of the piece, then the character that ends the paragraph is the character
immediately before the FKP FC.
A special procedure must be followed to locate the last paragraph of
the main document text when footnote or header/footer text is saved in
a Word file (ie. when fib.ccpFtn != 0 or fib.ccpHdr != 0).
In this case the CP of that paragraph mark is fib.ccpText + fib.ccpFtn
+ fib.ccpHdr + fib.ccpMcr + fib.ccpAtn and the limit CP of the entire plcfpcd
is fib.ccpText + fib.ccpFtn + fib.ccpHdr + fib.ccpMcr + fib.ccpAtn + 1.
Characters that are within the same piece, same paragraph, and same
run of exception text are guaranteed to have the same properties. This
fact can be used to construct a scanner that can return the limit CPs and
properties of a sequence of characters that all have the same properties.
When there are n footnotes, the plcffndTxt structure consists
of
n+2 CP entries. The CP entries mark the beginning character position
within the footnote text address space of the footnote text for the footnotes
defined for the file. The beginning CP of the text of the ith footnote
is the ith CP within the plcffndTxt. The limit CP of the text of
the
ith footnote is the i+1st CP within the plcffndTxt.
The last character of footnote text for a footnote (ie. the character
at limit CP - 1) is always a paragraph end(ASCII 13). If there are n
footnotes, the n+2nd CP entry value is always 1 greater than the
n+1st
CP entry value. A paragraph end (ASCII 13) is always stored at the file
position marked by the n+1st CP value.
When there are n footnotes, the plcffndRef structure consists
of
n+1 CP entries followed by n integer flags, named fAuto.
The
ith CP in the plcffndRef corresponds to the ith fAuto
flag. The CP entries give the locations of footnote references within the
main text address space. The n+1th CP entry contains the value fib.ccpText
+ fib.ccpFtn + fib.ccpHdr + 1. The fAuto flag contains 1 whenever the footnote
reference name is auto-generated by Word.
When a footnote reference name is automatically generated by Word, Word
generates the name by adding 1 to the index number of the reference in
the plcffndRef and translating that number to ASCII text. When the footnote
reference is auto generated, the character at the main text CP position
for the footnote reference should be a footnote reference character (ASCII
5) which has a chp recorded with chp.fSpec = 1.
The number of footnotes stored in a Word binary file can be found by
dividing fib.cbPlcffndTxt by 4 and subtracting 1.
If there are n header/footers, the n+2nd CP entry value
is always 1 greater than the n+1stCP entry value. A paragraph end
(ASCII 13) is always stored at the file position marked by the n+1st
CP value.
The transformation in a full saved file from a header/footer CP to an
offset from the beginning of a file (fc) is fc = fib.fcMin + ccpText +
ccpFtn + cp.
In Windows Word, headers/footers can be defined for a document that:
1) will act as a separator between main text and footnote text
2)
3) will print above footnote text on a page when the text must be continued
from a previous page (continuation notice)
Also for each section defined for the document, distinct headers can
be defined for printing on odd-numbered/rightfacing pages, even-numbered
/left facing pages and the first page of a section. Similarly for each
document section, distinct footers can be defined for printing on odd-numbered/right
facing pages, even-numbered/left facing pages and the first page of a section.
Within the document and the section properties of a document (the DOP
and SEP) is a field, the grpfIhdt, which enumerates which of the
header/footer types are defined for the document or for a particular section.
The grpfIhdt in both the DOP and SEP is treated as a group of bit flags
stored within a character field with a flag assigned to every type of header/footer
that is possible to define for DOPs and SEPs. When a bit is on, it signifies
that the header/footer type corresponding to the bit is defined for the
document or for a particular section.
Attention: The bits are numbered the wrong way (i.e. bit 7
is the LSB!). Additionally they forgot about the endnote separators/cont.notices,...
Definition of the bits of dop.grpfIhdt:
Bit position
7 footnote separator defined when == 1 (fTrue).
6 footnote continuation separator defined when == 1 (fTrue).
5 footnote continuation notice defined when == 1 (fTrue).
Definition of the bits of sep.grpfIhdt:
Bit position
7 header for even pages defined when == 1 (fTrue).
6 header for odd pages defined when == 1 (fTrue).
5 footer for even pages defined when == 1 (fTrue).
4 footer for odd pages defined when == 1 (fTrue).
3 header for first page of section defined when == 1 (fTrue).
2 footer for first page of sectiondefined when == 1 (fTrue).
Given that a particular footnote separator exists, one can locate the
text for that separator using the following algorithm:
Initially set ihdd (index into plcfhdd) to 0.
Scan bits 7, 6, and 5 of the dop.grpfIhdt in order looking for bit ==
1 while you have not yet reached the bit corresponding to the separator
whose text is to be located. For each such bit ==1 add 1 to ihdd.
The value of ihdd that results is the index into plcfhdd that can be
used to access the text of the separator.
Given that a particular header/footer exists for a particular section,
one can locate the text for that header/footer using the following algorithm:
initially set ihdd (index into plcfhdd) to 0.
scan bits 7, 6, and 5 of the dop.grpfIhdt looking for bit == 1 and add
1 to ihdd for each such bit== 1.
Examine the sep.grpfIhdt of each section preceding the section of the
header/footer to be located in ascending section number order, scanning
bits 7, 6, 5, 4, 3, and 2 of the sep.grpfIhdtin order, adding 1 to ihdd
for each bit == 1.
For the section of the header/footer to be located, scan bits 7, 6,
5, 4, 3, and 2 of the sep.grpfIhdt in order looking for bit == 1 while
you have not yetreached the bit corresponding to the header/footer to be
located. For each such bit ==1 add 1 to ihdd.
The value of ihdd that results is the index into plcfhdd that can be
used to access the text of the header/footer.
Third-party creators of Windows Word files should not attempt to create
a plcfpgd. It can only be created properly using Windows Word's page layout
routines. If a Windows Word document is edited in any way, the plcfpgd
should be deleted by setting fib.cbPlcfpgd to 0.
If there are n pages breaks recorded for the document stored,
the
n+1st CP stored in the array of CPs for the plcfpgd will have
the value fib.ccpText + fib.ccpFtn + fib.ccpHdr + 1 if the document contains
footnotes or header/footers and will have the value fib.ccpText + fib.ccpFtn
+ fib.ccpHdr if the document contains no subdocuments.
The sttbfglsy begins with an integer count of bytes of the size
of the sttbfglsy (includes the size of the integer count
If there are n glossary entries, the plcfglsy, will consist
of n+2 CP entries. The ith CP entry will contain the location
of the beginning of the text for the ith glossary entry. The i+1st
CP entry will contain the limit CP of the ith glossary entry. The
character ata CP position of limit CP - 1 is always a paragraph mark. The
n+2nd
CP entry always contains fib.ccpText + fib.ccpFtn + fib.ccpHdr + 1 if there
are headers, footers or footnotes stored in the glossary and contains fib.ccpText
+ fib.ccpFtn + fib.ccpHdr otherwise.The n+1st CP entry is always
1 less than the value of the n+2nd entry.
The text for the time and date entries will always be
a single paragraph mark (ASCII 13).
The format of the ibstAssocCriteriaX strings are as follows:
intcbIbstAssoc:8;// BYTE 0
intfCompOr:1;
intiCompOp:7;
charstMergeField[];// Name of MergeField
charstCompInfo[];// User Supplied Comparison Information
Both stMergeField and stCompInfo are variable length character arrays
preceded by a length byte.
*cbANLD (count of bytes of ANLD) is 52 (decimal), 34(hex).
cbANLV is 16 bytes (decimal), 10 bytes (hex).
cbBKL is 2.
describes the beginning position of this bookmark in the
CP
stream. If the bkl.ibkf is negative, add on the number of boomarks recorded
in the hplcbkf to the bkl.ibkf to calculate the index to the BKF that corresponds
to this entry.
The seventypes of border lines that Windows Word 1.0 supports are coded
with different sets of values for dxpLine1Width, dxpSpaceBetween, and dxpLine2
Width. The border lines and their brc10 settings follow:
When the no border settings are stored in the BRC, brc.fShadow
and brc.dxpSpace should be set to 0.
(Note: when a CHPX is stored in an FKP it is prefixed
by a one-byte count of bytes that records the size of the non-zero prefix
of the CHPX. Since the count of bytes must begin on an even boundary
within the FKP followed by the non-zero prefix, it's guaranteed
that the int and FC fields of the CHPX are aligned on an odd-byte boundary.
Using normal integer or long load instructions will cause address errors
on a 68000. The best technique for reconstituting the CHPX is to move the
non-zero prefix to the beginning of a local instance of a CHPX that has
been cleared to zeros.)
*cbCHP (count of bytes of CHP) is 42 (decimal), 2A(hex).
The following sprms may be recorded in a CHPX:
chpx.cb is equal to (1 + sizeof(chpx.grpprl)).
The CHP is never stored in a Word file. It is derived by expanding
stored CHPXs.
(Shaheed TBD) The above DO does not make sense
In pre-WinWord2.0 files this value was the nLocale.If value is <
999, then it is the nLocale, otherwise it is the lid. Note: when ccpFtn == 0 and ccpHdr == 0 and ccpMcr== 0 and ccpAtn ==
0 and ccpEdn ==0 and ccpTxbx == 0 and ccpHdrTxbx == 0, then fib.fcMac =
fib.fcMin+ fib.ccpText. If either ccpFtn != 0 or ccpHdd != 0or ccpMcr !=
0or ccpAtn != 0 or ccpEdn !=0 or ccpTxbx != 0 or ccpHdrTxbx == 0, then
fib.fcMac = fib.fcMin + fib.ccpText + fib.ccpFtn + fib.ccpHdd+ fib.ccpMcr+
fib.ccpAtn + fib.ccpEdn + fib.ccpTxbx + fib.ccpHdrTxbx + 1. The single
characterstored beginning at file position fib.fcMac - 1 must always be
a CRcharacter (ASCII 13). cbFIB is 682. cwFIB is 341.
Note: If a table does not exist in the file, its cb in the FIB is zero
and its fc is equal to that of the following table (the latter equality
is irrelevant, as the cb should be used to determine existence of the table).
variant used when fld.ch == 19(field begin mark)
see flt table below variant used when fld.ch == 21(field end mark)
For MM_ISOTROPIC and MM_ANISOTROPIC modes, which can be scaled, the
xExt and yExt members contain an optional suggested size in MM_HIMETRIC
units.
For MM_ANISOTROPIC pictures, xExt and yExt can be zero when no suggested
size is supplied. For MM_ISOTROPIC pictures, an aspect ratio must be supplied
even when no suggested size is given. (If a suggested size is given, the
aspect ratio is implied by the size.) To give an aspect ratio without implying
a suggested size, set xExt and yExt to negative values whose ratio is the
appropriate aspect ratio. The magnitude of the negative xExt and yExt values
is ignored; only the ratio is used. cbOLST is 212(decimal), D4(hex).
cbPAP (count of bytes of PAP) is 274 (decimal), 112(hex)
The PAPX is stored withinFKPs and withinthe STSH.
papx.cw is equal to (3 + sizeof(grpprl) + 1) / 2. If the size of the
grpprl is odd, a byte of zero is stored immediately after the grpprl to
pad the PAPX so its length in bytes is papx.cw * 2.
The last six bytes of the BX is a PHE structure which stores the current
paragraph height for the paragraph corresponding to the BX. If a plcfphe
has an entry that maps to the FC for this paragraph, that entry?s PHE overides
the PHE stored in the FKP. The PAP is never stored in a Word file. It is derived by expanding
stored PAPXs.
cbPGD (count of bytes of PGD) is 6(decimal),6(hex).
The PHE is a substructure of the PAP and the PAPX
FKP and is also stored in the PLCFPHE.
cbPHE (the count of bytes in a PHE) is 6 (decimal), 6(hex).
If there is no paragraph height information stored for a paragraph,
all of the fields in the PHE are set to 0. If a paragraph contains
more than 127 lines, the clMac, dylLine variant cannot be used, so fDiffLines
must be set to 1 and the total size of the paragraph stored in dylHeight.
If a paragraph height is greater than 32767 twips, the height cannot be
represented by a PHE so all fields of the PHE must be set
to 0.
If a new Windows Word file is created, the PHE of every papx
fkp entrycreated to describe the paragraphs of the file should be set
to 0. If a Windows Word file is altered in place (a character of the file
changed to a new character or a property changed), the paragraph containing
the change must have its papx.phe field set to 0.
The PICF is followed by rgb, a variable array of bytes containing Window's
metafile, bitmap or TIFF file filename
In the second variant, prm.fComplex is 1, and the rest of the structure
records an index to a grpprl stored in the CLX (described in Complex
File Format topic).
cbSED is 12 (decimal)), C (hex).
cbSEP (count of bytes of SEP) is 448(decimal), 1C0(hex).
The standard SEP is all zeros except as follows:
bkc 2
cbSHD (count of bytes of SHD) is 2.
cbTAP (count of bytes of a TAP) is 480 (decimal),1E0(hex).
cbTBD (count of bytes of a tab descriptor) is 1.
The TC is a substructure of the TAP.
cbTC (count of bytes of a TC) is 10(decimal), A(hex).
The fStrike, hpsPos, & fSysVanish fields were moved within the CHP.A
new field, fRMarkDel, is located where fStrike used to be.
The fsLid and lid fields were added for the language identification
code.
The types of several fields were changed.The ftc field was changed from
an unsigned integer to a WORD.The hps field was changed from an U8 to a
WORD.The fnPic field was changed from an unsigned integer to a BYTE.
The fObj and fcObj fields were added for managing embedded objects.
irmBar is a BYTE rather than an int
rgwSpare uns[2] became wSpare2 uns and wSpare3 uns
fPMHMainDoc, grfSuppression,fKeepFileFormat, fDfltTrueType, and fPagSuppressTopSpacing
added
fEncrypted and lKey added for file encryption
Print Environment & orientation changes
fcPrEnv & cbPrEnv were removed.
fcPrDrv & cbPrDrv------------------\
fcPrEnvPort & cbPrEnvPort------- were added to FIB
fcPrEnvLand & cbPrEnvLand----/
Autosave added
fcAutosaveSource
cbAutosaveSource
nLocale changed to lid
added dyaFromText, wr, dyaHeight, fMinHeight
When converting 1.x documents with Absolutely Positioned Objects set
the old dxaFromText (Distance from text) to both dxaFromText and dyaFromText.
Shading
added shd
Auto numbering
added nfcSeqNumb and nnSeqNumb
brcTop
brcLeftBRC
brcBottomBRC
brcRightBRC
dxaOrigin, dyaOrigin
Added Page Orientation stuff
morPage
bUnused2
Added Printer Environment
dmBinFirst
dmBinOther
xaPage
yaPage
dxaLeft
dxaRight
dyaTop
dyaBottom
dxaGutter in DOP renamed dzaGutter in SEP
wSpare2
wSpare3
wSpare4
wSpare5
rgshd[itchMax] SHD
rgbrc, brcTop, brcLeft, brcBottom, brcRight were int, now they are BRC.
BRC, 36
CHP/CHPX, 37
DOP, 42
DTTM, 42
Embedded Object, 8, 10, 12, 44
FIB, 46
FLD, 44
Hand Annotation, 14, 42
PAP, 55
PIC, 58
SED, 61
SEP, 61
sprmCFFldVanish, 22
sprmCFRMark, 22
sprmCFStrikeRM, 22
sprmCLid, 22
sprmMax, 24
sprmPBrc, 22
sprmPDxaFromText, 22
sprmPDyaFromText, 22
sprmPicBrc, 23
sprmPNfcSeqNumb, 21
sprmPNoSeqNumb, 21
sprmPRuler, 22
sprmPShd, 22
sprmPWHeightAbs, 22
sprmSBCustomize, 23
sprmSBOrientation, 23
sprmSDmBinFirst, 23
sprmSDmBinOther, 23
sprmSDxaLeft, 23
sprmSDxaPgn, 23
sprmSDxaRight, 23
sprmSDyaBottom, 23
sprmSDyaPgn, 23
sprmSDyaTop, 23
sprmSDzaGutter, 23
sprmSFAutoPgn, 23
sprmSXaPage, 23
sprmSYaPage, 23
sprmTDefTable, 24, 28
sprmTDefTableShd, 24, 28
sprmTSetBrc, 24, 30
sprmTSetShd, 24, 30
sttbfAssoc, 11, 13, 35
sttbfFn, 11, 13
TAP, 63
TC, 63
Every paragraph has a paragraph style.Every character has a character style.The
default paragraph style is Normal (stiNormal, istdNormal).The default character
style is Default Paragraph Font (stiNormalChar, istdNormalChar).
Stylesheet File Format
The style sheet (STSH)is stored in the file in two parts, a STSHI and then
an array of STDs.The STSHI contains general information about the following
stylesheet, including how many styles are in it.After the STSHI, each style
is written as an STD.Both the STSHI and each STD are preceded by a ushort
that indicates their length.
STyleSHeet Information (STSHI)
The STSHI structure has the following format:
// STSHI: STyleSHeet Information, as stored in a file
// Note that new fields can be added to the STSHI without invalidating
// the file format, because it is stored preceded by it's length.
// When reading a STSHI from an older version, new fields will be zero.
b10
b16
field
type
size
bitfield
comments
0
0
cstd
U16
Count of styles in stylesheet
2
2
cbSTDBaseInFile
U16
Length of STD Base as stored in a file
4
4
fStdStylenamesWritten
U16
:1
0001
Are built-in stylenames stored?
unused4_2
U16
:15
FFFE
Spare flags
6
6
stiMaxWhenSaved
U16
Max sti known when this file was written
8
8
istdMaxFixedWhenSaved
U16
How many fixed-index istds are there?
10
0xA
nVerBuiltInNamesWhenSaved
U16
Current version of built-in stylenames
12
0xC
ftcStandardChpStsh
U16
ftc used by StandardChpStsh for this document
STD
The style description is stored in an STD structure as follows:
The UPE.pap for the null style is all zeros, except fWidowControl which
is 1, dyaLine which is 240, and fMultLinespace which is 1.
SPRM DEFINITIONS
A sprm is an instruction to modify one or more properties within
one of the property defining data structures (CHP, PAP, TAP
, SEP, or PIC). A sprm always begins with a one byte opcode
at offset 0 which identifies the operation to be performed. If necessary
information for the operation can always be expressed with a fixed length
parameter, the fixed length parameter is recorded immediately after the
opcode beginning at offset 1. The length of a fixed length sprm is always
1 plus the size of the sprm?s parameter. If the parameter for the sprm
is variable length, the count of bytes of the following parameter is stored
in the byte at offset 1.
Name
op code
Property Modified
Parameter
Parameter size
sprmPIstd
2
pap.istd
istd (style code)
U16
sprmPIstdPermute
3
pap.istd
permutation vector (see below)
variable length
sprmPIncLvl
4
pap.istd
difference between istd of base PAP and istd of PAP to be produced
(see below)
U8
sprmPJc
5
pap.jc
jc (justification)
U8
sprmPFSideBySide
6
pap.fSideBySide
0 or 1
U8
sprmPFKeep
7
pap.fKeep
0 or 1
U8
sprmPFKeepFollow
8
pap.fKeepFollow
0 or 1
U8
sprmPFPageBreakBefore
9
pap.fPageBreakBefore
0 or 1
U8
sprmPBrcl
10
pap.brcl
brcl
U8
sprmPBrcp
11
pap.brcp
brcp
U8
sprmPAnld
12
pap.anld
anld
variable length (the length of an ANLD structure)
sprmPNLvlAnm
13
pap.nLvlAnm
nn
U8
sprmPFNoLineNumb
14
pap.fNoLnn
0 or 1
U8
sprmPChgTabsPapx
15
pap.itbdMac, pap.rgdxaTab, pap.rgtbd
complex - see below
variable length
sprmPDxaRight
16
pap.dxaRight
dxa
S16
sprmPDxaLeft
17
pap.dxaLeft
dxa
S16
sprmPNest
18
pap.dxaLeft
dxa-see below
S16
sprmPDxaLeft1
19
pap.dxaLeft1
dxa
S16
sprmPDyaLine
20
pap.lspd
an LSPD, a long word structure consisting of a short of dyaLine followed
by a short of fMultLinespace - see below
U32
sprmPDyaBefore
21
pap.dyaBefore
dya
S16
sprmPDyaAfter
22
pap.dyaAfter
dya
S16
sprmPChgTabs
23
pap.itbdMac, pap.rgdxaTab, pap.rgtbd
complex - see below
variable length
sprmPFInTable
24
pap.fInTable
0 or 1
U8
sprmPFTtp
25
pap.fTtp
0 or 1
U8
sprmPDxaAbs
26
pap.dxaAbs
dxa
S16
sprmPDyaAbs
27
pap.dyaAbs
dya
S16
sprmPDxaWidth
28
pap.dxaWidth
dxa
S16
sprmPPc
29
pap.pcHorz, pap.pcVert
complex - see below
U8
sprmPBrcTop10
30
pap.brcTop
BRC10
S16
sprmPBrcLeft10
31
pap.brcLeft
BRC10
S16
sprmPBrcBottom10
32
pap.brcBottom
BRC10
S16
sprmPBrcRight10
33
pap.brcRight
BRC10
S16
sprmPBrcBetween10
34
pap.brcBetween
BRC10
S16
sprmPBrcBar10
35
pap.brcBar
BRC10
S16
sprmPFromText10
36
pap.dxaFromText
dxa
S16
sprmPWr
37
pap.wr
wr (see description of PAP for definition
U8
sprmPBrcTop
38
pap.brcTop
BRC
S16
sprmPBrcLeft
39
pap.brcLeft
BRC
S16
sprmPBrcBottom
40
pap.brcBottom
BRC
S16
sprmPBrcRight
41
pap.brcRight
BRC
S16
sprmPBrcBetween
42
pap.brcBetween
BRC
S16
sprmPBrcBar
43
pap.brcBar
BRC
S16
sprmPFNoAutoHyph
44
pap.fNoAutoHyph
0 or 1
U8
sprmPWHeightAbs
45
pap.wHeightAbs
w
S16
sprmPDcs
46
pap.dcs
DCS
U16
sprmPShd
47
pap.shd
SHD
S16
sprmPDyaFromText
48
pap.dyaFromText
dya
S16
sprmPDxaFromText
49
pap.dxaFromText
dxa
S16
sprmPFLocked
50
pap.fLocked
0 or 1
U8
sprmPFWidowControl
51
pap.fWidowControl
0 or 1
U8
sprmPRuler
52
variable length
sprmCFStrikeRM
65
chp.fRMarkDel
1 or 0
bit
sprmCFRMark
66
chp.fRMark
1 or 0
bit
sprmCFFldVanish
67
chp.fFldVanish
1 or 0
bit
sprmCPicLocation
68
chp.fcPic and chp.fSpec
see below
variable length, length recorded is always 4
sprmCIbstRMark
69
chp.ibstRMark
index into sttbRMark
U16
sprmCDttmRMark
70
chp.dttm
DTTM
U32
sprmCFData
71
chp.fData
1 or 0
bit
sprmCRMReason
72
chp.idslRMReason
an index to a table of strings defined in Word 6.0 executables
U16
sprmCChse
73
chp.fChsDiff and chp.chse
see below
3 bytes
sprmCSymbol
74
chp.fSpec, chp.chSym and chp.ftcSym
see below
variable length, length recorded is always 3
sprmCFOle2
75
chp.fOle2
1 or 0
bit
sprmCIstd
80
chp.istd
istd, see stylesheet definition
U16
sprmCIstdPermute
81
chp.istd
permutation vector (see below)
variable length
sprmCDefault
82
whole CHP (see below)
none
variable length
sprmCPlain
83
whole CHP (see below)
none
0
sprmCFBold
85
chp.fBold
0,1, 128, or 129 (see below)
U8
sprmCFItalic
86
chp.fItalic
0,1, 128, or 129 (see below)
U8
sprmCFStrike
87
chp.fStrike
0,1, 128, or 129 (see below)
U8
sprmCFOutline
88
chp.fOutline
0,1, 128, or 129 (see below)
U8
sprmCFShadow
89
chp.fShadow
0,1, 128, or 129 (see below)
U8
sprmCFSmallCaps
90
chp.fSmallCaps
0,1, 128, or 129 (see below)
U8
sprmCFCaps
91
chp.fCaps
0,1, 128, or 129 (see below)
U8
sprmCFVanish
92
chp.fVanish
0,1, 128, or 129 (see below)
U8
sprmCFtc
93
chp.ftc
ftc
S16
sprmCKul
94
chp.kul
kul
U8
sprmCSizePos
95
chp.hps, chp.hpsPos
(see below)
3 bytes
sprmCDxaSpace
96
chp.dxaSpace
dxa
S16
sprmCLid
97
chp.lid
LID
S16
sprmCIco
98
chp.ico
ico
U8
sprmCHps
99
chp.hps
hps
U8
sprmCHpsInc
100
chp.hps
(see below)
U8
sprmCHpsPos
101
chp.hpsPos
hps
U8
sprmCHpsPosAdj
102
chp.hpsPos
hps (see below)
U8
sprmCMajority
103
chp.fBold, chp.fItalic, chp.fSmallCaps, chp.fVanish, chp.fStrike, chp.fCaps,
chp.ftc, chp.hps, chp.hpsPos, chp.kul, chp.dxaSpace, chp.ico, chp.lid
complex (see below)
variable length,length byte plus size of following grpprl
sprmCIss
104
chp.iss
iss
U8
sprmCHpsNew50
105
chp.hps
hps
variable width, length always recorded as 2
sprmCHpsInc1
106
chp.hps
complex (see below)
variable width, length always recorded as 2
sprmCHpsKern
107
chp.hpsKern
hps
U16
sprmCMajority50
108
chp.fBold, chp.fItalic, chp.fSmallCaps, chp.fVanish, chp.fStrike, chp.fCaps,
chp.ftc, chp.hps, chp.hpsPos, chp.kul, chp.dxaSpace, chp.ico,
complex (see below)
variable length
sprmCHpsMul
109
chp.hps
percentage to grow hps
U16
sprmCCondHyhen
110
chp.ysri
ysri
U16
sprmCFSpec
117
chp.fSpec
1 or 0
bit
sprmCFObj
118
chp.fObj
1 or 0
bit
sprmPicBrcl
119
pic.brcl
brcl (see PIC structure definition)
U8
sprmPicScale
120
pic.mx, pic.my, pic.dxaCropleft,
complex (see below)
length byte plus 12 bytes
sprmPicBrcTop
121
pic.brcTop
BRC
S16
sprmPicBrcLeft
122
pic.brcLeft
BRC
S16
sprmPicBrcBottom
123
pic.brcBottom
BRC
S16
sprmPicBrcRight
124
pic.brcRight
BRC
S16
sprmSScnsPgn
131
sep.cnsPgn
cns
U8
sprmSiHeadingPgn
132
sep.iHeadingPgn
heading number level
U8
sprmSOlstAnm
133
sep.olstAnm
OLST
variable length
sprmSDxaColWidth
136
sep.rgdxaColWidthSpacing
complex (see below)
3 bytes
sprmSDxaColSpacing
137
sep.rgdxaColWidthSpacing
complex (see below)
3 bytes
sprmSFEvenlySpaced
138
sep.fEvenlySpaced
1 or 0
U8
sprmSFProtected
139
sep.fUnlocked
1 or 0
U8
sprmSDmBinFirst
140
sep.dmBinFirst
S16
sprmSDmBinOther
141
sep.dmBinOther
S16
sprmSBkc
142
sep.bkc
bkc
U8
sprmSFTitlePage
143
sep.fTitlePage
0 or 1
U8
sprmSCcolumns
144
sep.ccolM1
# of cols - 1
S16
sprmSDxaColumns
145
sep.dxaColumns
dxa
S16
sprmSFAutoPgn
146
sep.fAutoPgn
obsolete
U8
sprmSNfcPgn
147
sep.nfcPgn
nfc
U8
sprmSDyaPgn
148
sep.dyaPgn
dya
U16
sprmSDxaPgn
149
sep.dxaPgn
dya
U16
sprmSFPgnRestart
150
sep.fPgnRestart
0 or 1
U8
sprmSFEndnote
151
sep.fEndnote
0 or 1
U8
sprmSLnc
152
sep.lnc
lnc
U8
sprmSGprfIhdt
153
sep.grpfIhdt
grpfihdt (see Headers and Footers topic)
U8
sprmSNLnnMod
154
sep.nLnnMod
non-neg int.
S16
sprmSDxaLnn
155
sep.dxaLnn
dxa
S16
sprmSDyaHdrTop
156
sep.dyaHdrTop
dya
U16
sprmSDyaHdrBottom
157
sep.dyaHdrBottom
dya
U16
sprmSLBetween
158
sep.fLBetween
0 or 1
U8
sprmSVjc
159
sep.vjc
vjc
U8
sprmSLnnMin
160
sep.lnnMin
lnn
S16
sprmSPgnStart
161
sep.pgnStart
pgn
S16
sprmSBOrientation
162
sep.dmOrientPage
dm
U8
sprmSBCustomize
163
sprmSXaPage
164
sep.xaPage
xa
S16
sprmSYaPage
165
sep.yaPage
ya
S16
sprmSDxaLeft
166
sep.dxaLeft
dxa
S16
sprmSDxaRight
167
sep.dxaRight
dxa
S16
sprmSDyaTop
168
sep.dyaTop
dya
S16
sprmSDyaBottom
169
sep.dyaBottom
dya
S16
sprmSDzaGutter
170
sep.dzaGutter
dza
S16
sprmSDMPaperReq
171
sep.dmPaperReq
dm
S16
sprmTJc
182
tap.jc
jc
S16 (low order byte is significant)
sprmTDxaLeft
183
tap.rgdxaCenter (see below)
dxa
S16
sprmTDxaGapHalf
184
tap.dxaGapHalf, tap.rgdxaCenter (see below)
dxa
S16
sprmTFCantSplit
185
tap.fCantSplit
1 or 0
U8
sprmTTableHeader
186
tap.fTableHeader
1 or 0
U8
sprmTTableBorders
187
tap.rgbrcTable
complex(see below)
12 bytes
sprmTDefTable10
188
tap.rgdxaCenter, tap.rgtc
complex (see below)
variable length
sprmTDyaRowHeight
189
tap.dyaRowHeight
dya
S16
sprmTDefTable
190
tap.rgtc
complex (see below)
sprmTDefTableShd
191
tap.rgshd
complex (see below)
sprmTTlp
192
tap.tlp
TLP
4 bytes
sprmTSetBrc
193
tap.rgtc[].rgbrc
complex (see below)
5 bytes
sprmTInsert
194
tap.rgdxaCenter,tap.rgtc
complex (see below)
4 bytes
sprmTDelete
195
tap.rgdxaCenter, tap.rgtc
complex (see below)
S16
sprmTDxaCol
196
tap.rgdxaCenter
complex (see below)
4 bytes
sprmTMerge
197
tap.fFirstMerged, tap.fMerged
complex (see below)
S16
sprmTSplit
198
tap.fFirstMerged, tap.fMerged
complex (see below)
S16
sprmTSetBrc10
199
tap.rgtc[].rgbrc
complex (see below)
5 bytes
sprmTSetShd
200
tap.rgshd
complex (see below)
4 bytes
sprmMax
208
sprmSBkc, sprmSFTitlePage, sprmSCcolumns, sprmSNfcPgn, sprmSPgnStart,
sprmSFAutoPgn, sprmSDyaPgn, sprmSDxaPgn, sprmSFPgnRestart, sprmSFEndnote,
sprmSLnc, sprmSGrpfIhdt, sprmSNLnnMod, sprmSDxaLnn, sprmSDyaHdrTop, sprmSDyaHdrBottom.
cch byte count of
bytes (not including sprm and cch)
fLongg byte always
0
fSpare byte always
0
istdFirst U16 index
of first style in range to which permutation stored in rgistd applies
istdLast U16 index
of last style in range to which permutation stored in rgistd applies
rgistd[] U16 array
of istd entries that records the mapping of istds for text copied from
a source document to istds that exists in the destination document after
the text has been pasted
(istds)greater thanor equal to1 and less than or equal to9. These style
codes identify heading levels in a Word outline structure. The sprm causes
a set of paragraphs to be changed to a new heading level. The sprm is two
bytes long and consists of the sprm code and a one byte two?s complement
value.
cch byte count of
bytes (not including sprm and cch)
itbdDelMax byte number
of tabs to delete
rgdxaDel int[itbdDelMax]
array of tab positions for which tabs should be deleted
itbdAddMax byte number
of tabs to add
rgdxaAdd int[itbdAddMax]
array of tab positions for which tabs should be added
rgtbdAdd byte[itbdAddMax]
array of tab descriptors corresponding to rgdxaAdd
sprm byte opcode
cch byte count of
bytes (not including sprm and cch)
itbdDelMax byte number
of tabs to delete
rgdxaDel int[itbdDelMax]
array of tab positions for which tabs should be deleted
rgdxaClose int[itbdDelMax]
array of tolerances corresponding to rgdxaDel where each tolerance defines
an interval around corresponding rgdxaDel entry within which all tabs should
be removed
itbdAddMax byte number
of tabs to add
rgdxaAdd int[itbdAddMax]
array of tab positions for which tabs should be added
rgtbdAdd byte[itbdAddMax]
array of tab descriptors corresponding to rgdxaAdd
Length of sprmPPc is two bytes.
b10
b16
field
type
size
bitfield
comments
0
0
sprm
U8
opcode
1
1
reserved
U16
:4
F0
pcVert
U16
:2
0C
if pcVert ==3, pap.pcVert should not be changed. Otherwise, contains
new value of pap.pcVert.
pcHorz
U16
:2
03
if pcHorz==3, pap.pcHorz should not be changed. Otherwise, contains
new value of pap.pcHorz.
cch byte count of
bytes (not including sprm and cch)
fLongg byte always
0
fSpare byte always
0
istdFirst U16 index
of first style in range to which permutation stored in rgistd applies
istdLast U16 index
of last style in range to which permutation stored in rgistd applies
rgistd[] U16 array
of istd entries that records the mapping of istds for text copied from
a source document to istds that exists in the destination document after
the text has been pasted
b10
b16
field
type
size
bitfield
comments
0
0
sprm
U8
opcode
1
1
hpsSize
U16
:8
FF
when != 0, contains new size of chp.hps
2
2
cInc
U16
:7
FE
contains the number of font levels to increase or decrease size of
chp.hps as a twos complement value.
fAdjust
U16
:1
01
when == 1, means that chp.hps should be adjusted up/down by one font
level for super/subscripting change
3
3
hpsPos
U16
:8
FF
when != 128, contains super/subscript position as a twos complement
number
which encodes a criterion under which certain fields of the chp are
to be set equal to the values stored in a style?s CHP. Byte 0 of sprmCMajority
contains the opcode, byte 1 contains the length of the following list of
character sprms. . Word begins interpretation of this sprm by applying
the stored character sprm list to a standard chp. That chp has chp.istd
= istdNormalChar. chp.hps=20, chp.lid=0x0400and chp.ftc = 4. WordthencomparesfBold,
fItalic, fStrike, fOutline, fShadow, fSmallCaps, fCaps, ftc, hps, hpsPos,
kul, qpsSpace and ico in the original CHP with the values recorded for
these fields in the generated CHP.. If a field in the original CHP has
the same value as the field stored in the generated CHP, then that field
is reset to the value stored in the style?s CHP. If the two copies differ,
then the original CHP value is left unchanged. sprmCMajority is stored
only in grpprls linked to piece table entries.
dxaNew - (rgdxaCenter[0] + tap.dxaGapHalf) to every entry of tap.rgdxaCenter
whose index is less than tap.itcMac. sprmTDxaLeft is stored only in grpprls
linked to piece table entries.
b10
b16
field
type
size
bitfield
comments
0
0
sprm
U8
opcode 193
1
1
itcFirst
U8
the index of the first cell that is to have its borders changed.
2
2
itcLim
U8
index of the cell that follows the last cell to have its borders changed
3
3
U16
:4
F0
reserved
fChangeRight
U16
:1
08
=1 when tap.rgtc[].brcRight is to be changed
fChangeBottom
U16
:1
04
=1 when tap.rgtc[].brcBottom is to be changed
fChangeLeft
U16
:1
02
=1 when tap.rgtc[].brcLeft is to be changed
fChangeTop
U16
:1
01
=1 when tap.rgtc[].brcTop is to be changed
4
4
brc
BRC
new BRC value to be stored in TCs.
COMPLEX FILE FORMAT
The complex file format is used when a file is fast-saved. A complex file
has fib.fComplex set to 1. In a complex file, fcClx is the fc where the
complex part of the file begins, and cbClx is the size (in bytes) of the
complex part. The complex part of the file contains a group of grpprls
that encode formatting changes made by the user and a piece table (plcfpcd
). The piece table is needed because the text of the document is not stored
contiguously in the file after a fast save.
cbcount of bytes in grpprl
grpprlsee "Definitions" for description of grpprl; a grpprl
can contain sprms modifying character, paragraph, table, section or picture
properties
cbcount of bytes in piece table
plcfpcdpiece table
cb
grpprl (0th grpprl)
clxtGrpprl
cb
grpprl (1st grpprl)
...
clxtPlcfpcd
cb
plcfpcd
Algorithm to determine the bounds of a paragraph containing a certain
character in a complex file
When a document is recorded in non-complex format, the bounds of the paragraph
that contains a particular character can be found by calculating the FC
coordinate of the character, searching the bin table to find an FKP page
that describes that FC, fetching that FKP, and then searching the
FKP to find the interval in the rgfc that encloses the character.
The bounds of the interval are the fcFirst and fcLim of the containing
paragraph. Every character greater than or equal to fcFirst and less than
fcLim is part of the containing paragraph.
Algorithm to determine paragraph properties for a paragraph in a
complex file
Having found the index i of the FC in an FKP that marks the character
stored in the file immediately after the paragraph?s paragraph mark, it
is necessary to use the word offset stored in the first byte of the fkp.rgbx[
i - 1] to find the PAPX for the paragraph. Using papx.istd to index
into the properties stored for the style sheet , the paragraph properties
of the style are copied to a local PAP. Then the grpprl stored in the PAPX
is applied to the local PAP, and papx.istd along with fkp.rgbx.phe are
moved into the local PAP. The process thus far has created a PAP that describes
what the paragraph properties of the paragraph were at the lastfull save.
Now it?s necessary to apply any paragraph sprms that were linked to the
piece that contains the paragraph?s paragraph mark. If pcd.prm.fComplex
is 0, pcd.prm contains 1 sprm which should only be applied to the local
PAP if it is a paragraph sprm. If pcd.prm.fComplex is 1, pcd.prm.igrpprl
is the index of a grpprl in the CLX. If that grpprl contains any pargraph
sprms, they should be applied to the local PAP. After applying all of the
sprms for the piece, the local PAP contains the correct paragraph property
values.
Algorithm to determine table properties for a table row in a complex file
To determine the table properties for a table row in a complex file,scan
paragraph-by-paragraph toward the end of the table row, until a paragraph
is found that has pap.fTtp set to 1. This paragraph consists of a single
row end character. This row end character is linked to the table properties
of the row. To create the TAP for the table row, clear a local TAP to zeros.
Then the PAPX for the row end character must be fetched from an FKP, and
the table sprms that are stored in this PAPX must be applied to the local
TAP. The process thus far has created a TAP that describes what the table
properties of the table row were atthe last full save. Now apply any table
sprms that were linked to the piece that contains the table row?s row end
character. If pcd.prm.fComplex is 0, pcd.prm contains 1 sprm which should
be applied to the local TAP if it is a table sprm. If pcd.prm.fComplex
is 1, pcd.prm.igrpprl is the index of a grpprl in the CLX. If that grpprl
contains any table sprms, apply them to the local TAP. After all of the
sprms for the piece are applied, the local TAP contains the correct table
property values for the table row.
Algorithm to determine the character properties of a character in a complex
file
It is first necessary to fetch the paragraph properties of the paragraph
that contains the character. The pap.istd of the fetched properties specifies
which style sheetentry provides the defaultcharacter properties for the
character. The character properties recorded in the style sheet for that
style are copied into a local CHP. Then, the piece containing the character
is located in the piece table (plcfpcd) and the fc of the character is
calculated. Using the character?s FC, the page number of the CHPX FKP that
describes the character is found by searching the bin table (hplcfbteChpx).
The CHPX FKP stored in that page is fetched and then the rgfc in the FKP
is searched to locate the bounds of the run of exception text that encompasses
the character. The CHPX for that run is then located within the FKP, and
the CHPX is applied to the contents of the local CHP. The process thus
far has created a CHP that describes what the character properties of the
character were at the last full save.Now apply any character sprms that
were linked to the piece that contains the character. If pcd.prm.fComplex
is 0, pcd.prm contains 1 sprm which should be applied to the local CHP
if it is a character sprm. If pcd.prm.fComplex is 1, pcd.prm.igrpprl is
the index of a grpprl in the CLX. If that grpprl contains any character
sprms, apply them to the local CHP. After applying all of the sprms for
the piece,the local CHP contains the correct properties for the character.
Algorithm to determine the section properties of a section in a complex
file
To determine which section a character belongs to and what its section
properties are, it is necessary to use the CP of the character to search
the plcfsed for the index i of the largest CP that is less
than or equal to the character?s CP. plcfsed.rgcp[i] is the CP of
the first character of the section and plcfsed.rgcp[i+1] is the
CP of the character following the section mark that terminates the section
(call it cpLim). Then retrieve plcfsed.rgsed[i]. The FC in this
SED gives the location where the SEPX for the section is stored. Then create
a local SEP with default section properties. If the sed.fc != 0xFFFFFFFF,
then the sprms within the SEPX that is stored at offset sed.fc must be
applied to the local SEP. The process thus far has created a SEP that describes
what the section properties of the section at the last full save. Now apply
any section sprms that were linked to the piece that contains the section?s
section mark. If pcd.prm.fComplex is 0, pcd.prm contains 1 sprm which should
be applied to the local SEP if it is a section sprm. If pcd.prm.fComplex
is 1, pcd.prm.igrpprl is the index of a grpprl in the CLX. If that grpprl
contains any section sprms, they should be applied to the local SEP. After
applying all of the section sprms for the piece , the local SEP contains
the correct section properties.
Algorithm to determine the pic of a picture in a complex file.
The picture sprms contained in the prm's grpprl apply to any picture characters
within the piece that have their chp.fSpec character == fTrue. The picture
properties for a picture (the PIC described in the Structure Definitions)
are derived by fetching the PIC stored with the picture and applying to
that PIC any picture sprms linked to the piece containing the picture special
character.
FOOTNOTES
In Windows Word the text of a footnote is anchored to a particular position
within the document?s main text , the location of its footnote reference.
There is a structure referenced by the fib, the plcffndRef, which records
the locations of the footnote references within the main text address space
and another structure referenced by the fib, the plcffndTxt, which records
the beginning locations of corresponding footnote text within the footnote
text address space . The footnote text characters in a full saved file
begin atat offset fib.fcMin + fib.ccpText and extends till fib.fcMin +
fib.ccpText + fib.ccpFtn. In a complex fast-saved document , the footnote
text begins atCP fib.ccpText and extends till fib.ccpText + fib.ccpFtn.
To find the location of the ith footnote reference in the main text
address space, look up the ith entry in the plcffndRef and find
the location of the text coresponding to the reference within the footnote
text address space by looking up the ith entry in the plcffndTxt.
HEADERS AND FOOTERS
The header and footer text characters in a full saved file begin atat offset
fib.fcMin + fib.ccpText + fib.ccpFtn and extend till fib.fcMin + fib.ccpText
+ fib.ccpFtn + fib.ccpHdr. In a complex fast-saved document , the footnote
text begins atCP fib.ccpText + fib.ccpFtn and extends till fib.ccpText
+ fib.ccpFtn + fib.ccpHdr. The plcfhdd,a table whose location and
length within the file is stored in fib.fcPlcfhdd and fib.cbPlcfhdd, describes
where the text of each header/footer begins. If there are n headers/footers
stored in the Word file, the plcfhdd consists of n + 2 CP entries.
The beginningCP of the ith header/footer is the ith CP in
the plcfhdd. The limit CP (the CP of character 1 position past the end
of a header/footer) of the ith header/footer is the i + 1 st
CP
in the plcfhdd. Note that at the limit CP - 1, Word always places a chEop
as a placeholder which is never displayed as part of the header/footer.
This allows Word to change an existing header/footer to be empty.
will print below footnote text on a page when footnote text must be
continued on a succeeding page (continuation separator)
Page Table
The plcfpgd, referenced by the fib, gives the location of page breaks
within a Word document and may optionally be saved in a Word binary file.
If there are n page breaks calculated for a document, the plcfpgd
would consist of n+1 CP entries followed by n PGD entries.
Glossary Files
A Word glossary file is a normal Word binary file with two supplemental
files, the sttbfglsy and the plcfglsy, also stored in the
file. The
sttbfglsy contains a list of the names of glossary entries,
and the
plcfglsy contains a table of beginning positions within
the text address space of the file of the text of glossary entries.
of bytes). If there are n glossary entries defined, there will
follow n pascal-type strings (string preceded by length byte) concatenated
one after the other which store glossary entry names. The glossary entry
names must be sorted in case-insensitive ascending order. (ie. a and
A
are treated as equal). Also the names date and time must
be included in the list of names. The name of the ith glossary entry
is the ith name defined in the sttbfglsy.
Table of Associated Strings (STTBFASSOC)
The following are indices into a table of associated strings:
ibst
index
description
ibstAssocFileNext
0
unused
ibstAssocDot
1
filename of associated template
ibstAssocTitle
2
title of document
ibstAssocSubject
3
subject of document
ibstAssocKeyWords
4
keywords of document
ibstAssocComments
5
comments of document
ibstAssocAuthor
6
author of document
ibstAssocLastRevBy
7
name of person who last revised the document
ibstAssocDataDoc
8
filename of data document
ibstAssocHeaderDoc
9
filename of header document
ibstAssocCriteria1
10
packed string used by print merge record selection
ibstAssocCriteria2
11
packed string used by print merge record selection
ibstAssocCriteria3
12
packed string used by print merge record selection
ibstAssocCriteria4
13
packed string used by print merge record selection
ibstAssocCriteria5
14
packed string used by print merge record selection
ibstAssocCriteria6
15
packed string used by print merge record selection
ibstAssocCriteria7
16
packed string used by print merge record selection
ibstAssocMax
17
maximum number of strings in string table
size of ibstAssocCriteriaX string
// BYTE 1set if cond is an or cond
// BYTE 1index of Comparison Operator
Structure Definitions
Autonumbered List Data Descriptor (ANLD)
b10
b16
field
type
size
bitfield
comments
0
0
nfc
U8
number format code
0 Arabic numbering
1 Upper case Roman
2 Lower case Roman
3 Upper case Letter
4 Lower case letter
5 Ordinal
1
1
cxchTextBefore
U8
offset into anld.rgch that is the limit of the text that will be displayed
as the prefix of the autonumber text
2
2
cxchTextAfter
U8
anld.cxchTextBefore will be the beginning offset of the text in the
anld.rgchthat will be displayed as the suffix of an autonumber. The sum
of anld.cxchTextBefore + anld.cxchTextAfter will be the limit of the autonumber
suffix in anld.rgch
3
3
jc
U8
:2
03
justification code
0 left justify
1 center
2 right justify
3 left and right justify
fPrev
U8
:1
04
when ==1, number generated will include previous levels (used for legal
numbering)
fHang
U8
:1
08
when ==1, number will be displayed using a hanging indent
fSetBold
U8
:1
10
when ==1, boldness of number will be determined by anld.fBold.
fSetItalic
U8
:1
20
when ==1, italicness of number will be determined by anld.fItalic
fSetSmallCaps
U8
:1
40
when ==1, anld.fSmallCaps will determine whether number will be displayed
in small caps or not.
fSetCaps
U8
:1
80
when ==1, anld.fCaps will determine whether number will be displayed
capitalized or not
4
4
fSetStrike
U8
:1
01
when ==1, anld.fStrike will determine whether the number will be displayed
using strikethrough or not.
fSetKul
U8
:1
02
when ==1, anld.kul will determine the underlining state of the autonumber.
fPrevSpace
U8
:1
04
when ==1, autonumber will be displayed with a single prefixing space
character
fBold
U8
:1
08
determines boldness of autonumber when anld.fSetBold == 1.
fItalic
U8
:1
10
determines italicness of autonumber when anld.fSetItalic == 1.
fSmallCaps
U8
:1
20
determines whether autonumber will be displayed using small caps when
anld.fSetSmallCaps == 1.
fCaps
U8
:1
40
determines whether autonumber will be displayed using caps when anld.fSetCaps
== 1.
fStrike
U8
:1
80
determines whether autonumber will be displayed using caps when anld.fSetStrike
== 1.
5
5
kul
U8
:3
07
determines whether autonumber will be displayed with underlining when
anld.fSetKul == 1.
ico
U8
:5
F1
color of autonumber
6
6
ftc
S16
font code of autonumber
8
8
hps
U16
font half point size (or 0=auto)
10
A
iStartAt
U16
starting value (0 to 65535)
12
C
dxaIndent
U16
width of prefix text (same as indent)
14
E
dxaSpace
U16
minimum space between number and paragraph
16
10
fNumber1
U8
number only 1 item per table cell
17
11
fNumberAcross
U8
number across cells in table rows(instead of down)
18
12
fRestartHdn
U8
restart heading number on section boundary
19
13
fSpareX
U8
unused( should be 0)
20
14
rgchAnld
U8[32]
characters displayed before/after autonumber
Autonumber Level Descriptor (ANLV)
b10
b16
field
type
size
Bitfield
comments
0
0
nfc
U8
number format code
0 Arabic numbering
1 Upper case Roman
2 Lower case Roman
3 Upper case Letter
4 Lower case letter
5 Ordinal
1
1
cxchTextBefore
U8
offset into anld.rgch that is the limit of the text that will be displayed
as the prefix of the autonumber text
2
2
cxchTextAfter
U8
anld.cxchTextBefore will be the beginning offset of the text in the
anld.rgch that will be displayed as the suffix of an autonumber. The sum
of anld.cxchTextBefore + anld.cxchTextAfter will be the limit of the autonumber
suffix in anld.rgch
3
3
jc
U8
:2
03
justification code
0 left justify
1 center
2 right justify
3 left and right justify
fPrev
U8
:1
04
when ==1, number generated will include previous levels (used for legal
numbering)
fHang
U8
:1
08
when ==1, number will be displayed using a hanging indent
fSetBold
U8
:1
10
when ==1, boldness of number will be determined by anld.fBold.
fSetItalic
U8
:1
20
when ==1, italicness of number will be determined by anld.fItalic
fSetSmallCaps
U8
:1
40
when ==1, anld.fSmallCaps will determine whether number will be displayed
in small caps or not.
fSetCaps
U8
:1
80
when ==1, anld.fCaps will determine whether number will be displayed
capitalized or not
4
4
fSetStrike
U8
:1
01
when ==1, anld.fStrike will determine whether the number will be displayed
using strikethrough or not.
fSetKul
U8
:1
02
when ==1, anld.kul will determine the underlining state of the autonumber.
fPrevSpace
U8
:1
04
when ==1, autonumber will be displayed with a single prefixing space
character
fBold
U8
:1
08
determines boldness of autonumber when anld.fSetBold == 1.
fItalic
U8
:1
10
determines italicness of autonumber when anld.fSetItalic == 1.
fSmallCaps
U8
:1
20
determines whether autonumber will be displayed using small caps when
anld.fSetSmallCaps == 1.
fCaps
U8
:1
40
determines whether autonumber will be displayed using caps when anld.fSetCaps
== 1.
fStrike
U8
:1
80
determines whether autonumber will be displayed using caps when anld.fSetStrike
== 1.
5
5
kul
U8
:3
07
determines whetherautonumber will be displayed with underlining when
anld.fSetKul == 1.
ico
U8
:5
F1
color of autonumber
6
6
ftc
S16
font code of autonumber
8
8
hps
U16
font half point size (or 0=auto)
10
A
iStartAt
U16
starting value (0 to 65535)
12
C
dxaIndent
U16
width of prefix text (same as indent)
14
E
dxaSpace
U16
minimum space between number and paragraph
BooKmark First descriptor (BKF)
b10
b16
field
type
size
bitfield
comments
0
0
ibkl
S16
index to BKL entry in plcfbkl that describes the ending position of
this bookmark in the CP stream.
2
2
itcFirst
U16
:7
007F
when bkf.fCol is 1, this is the index to the first column of a table
column bookmark.
fPub
U16
:1
0080
when 1, this indicates that this bookmark is marking the range of a
Macintosh Publisher section.
itcLim
U16
:7
7F00
when bkf.fCol is 1, this is the index to limit column of a table column
bookmark.
fCol
U16
:1
8000
when 1, this bookmark marks a range of columns in a table specified
by [bkf.itcFirst, bkf.itcLim).
BooKmark Lim descriptor (BKL)
b10
b16
field
type
size
bitfield
comments
0
0
ibkf
S16
index to BKF entry in plcfbkf that
Border Code (BRC)
The BRC is a substructure of the PAP, PIC and TC.See
also the obsolete BRC10 structure.
b10
b16
field
type
size
bitfield
comments
0
0
dxpLineWidth
U16
:3
0007
When dxpLineWidth is 0, 1, 2, 3, 4, or 5, this field is the width of
a single line of border in units of 0.75 points.Each line in the border
is this wide (e.g. a double border is three lines).Must be nonzero when
brcType is nonzero.When dxpLineWidth is 6, it means that the border line
is dotted.When dxpLineWidth is 7, it means the border line is dashed.
brcType
U16
:2
0018
border type code
0 none
1 single
2 thick
3 double
fShadow
U16
:1
0020
when 1, border is drawn with shadow. Must be 0 when BRC is a substructure
of the TC
ico
U16
:5
07C0
color code (see chp.ico)
dxpSpace
U16
:5
F800
width of space to maintain between border and text within border. Must
be 0 when BRC is a substructure of the TC.Stored in points for Windows.
Border Code for Windows Word 1.0 (BRC10)
b10
b16
field
type
size
bitfield
comments
0
0
dxpLine2Width
U16
:3
0007
width of second line of border in pixels
dxpSpaceBetween
U16
:3
0038
distance to maintain between both lines of borderin pixels
dxpLine1Width
U16
:3
01C0
width of first border line in pixels
dxpSpace
U16
:5
3E00
width of space to maintain between border and text within border. Must
be 0 when BRC is a substructure of the TC.
fShadow
U16
:1
4000
when 1, border is drawn with shadow. Must be 0 when BRC10 is a substructure
of the TC.
fSpare
U16
:1
8000
reserved
line type
dxpLine1Width
dxpSpaceBetween
dxpLine2Width
no border
0
0
0
single line border
1
0
0
two single line border
1
1
1
fat solid border
4
0
0
thick solid border
2
0
0
dotted border
6 (special value meaning dotted line)
0
0
hairline border
7(special value meaning hairline)
0
0
Bin Table Entry (BTE)
cbBTE (count of bytes in a BTE) is 2.
b10
b16
field
type
size
bitfield
comments
0
0
pn
U16
Page Number for FKP
Character Properties (CHP)
The CHP is never stored in Word files. It is the result of decompression
operations applied to CHPXs The CHPX is stored in CHPXFKPS
and within the STSH
b10
b16
field
type
size
bitfield
comment
0
0
fBold
U8
:1
0001
text is bold when 1 , and not bold when 0.
fItalic
U8
:1
0002
italic when 1, not italic when 0
fRMarkDel
U8
:1
0004
when 1, text has been deleted and will be displayed with strikethrus
when revision marked text is to displayed
fOutline
U8
:1
0008
outlined when 1, not outlined when 0
fFldVanish
U8
:1
0010
<needs work>
fSmallCaps
U8
:1
0020
displayed with small caps when 1, no small caps when 0
fCaps
U8
:1
0040
displayed with caps when 1, no caps when 0
fVanish
U8
:1
0080
1
1
fRMark
U8
:1
0100
when 1, text is newly typed since the last time revision marks have
been accepted and will be displayed with an underline when revision marked
text is to be displayed
fSpec
U8
:1
0200
character is a Word special character when 1, not a special character
when 0
fStrike
U8
:1
0400
displayed with strikethrough when 1, no strikethroughwhen 0
fObj
U8
:1
0800
embedded object when 1, not an embedded object when 0
fShadow
U8
:1
1000
character is drawn with a shdow when 1; drawn without shadow when 0
fLowerCase
U8
:1
2000
character is displayed in lower case when 1. No case transformation
is performed when 0. This field may be set to 1 only when chp.fSmallCaps
is 1.
fData
U8
:1
4000
when 1, chp.fcPic points to an FFDATA the data structure binary data
used by Word to describe a form field. chp.fData may only be 1 when chp.fSpec
is also 1 and the special character in the document stream that has this
property is a chPicture (0x01).
fOle2
U8
:1
8000
when 1, chp.lTagObj specifies a particular object in the object stream
that specifies the particular OLE object in the stream that should be displayed
when the chPicture fSpec character that is tagged with the fOle2 is encountered.
chp.fOle2 may only be 1 when chp.fSpec is also 1 and the special character
in the document stream that has this property is a chPicture (0x01).
2
2
unused2
U16
Reserved
4
4
ftc
U16
font code. The ftc is an index into the rgffn structure. The rgffn
entry indexed by ftc describes the font that will be used to display the
run of text described by the CHP.
6
6
hps
U16
font size in half points
8
8
dxaSpace
U16
space following each character in the run expressed in twip units.
10
A
iss
U8
:3
0007
superscript/subscript indices
0 means no super/subscripting
1 means text in run is superscrpted
2 means text in run is subscripted
unused10_3
U8
:3
0038
reserved
fSysVanish
U8
:1
0040
used by Word internally, not stored in file
unused10_7
U8
:1
0080
reserved
11
B
ico
U8
:5
1F00
color of text:
0 Auto
1 Black
2 Blue
3 Cyan
4 Green
5 Magenta
6 Red
7 Yellow
8 White
9 DkBlue
10 DkCyan
11 DkGreen
12 DkMagenta
13 DkRed
14 DkYellow
15 DkGray
16 LtGray
kul
U8
:3
E000
underline code:
0 none
1 single
2 by word
3 double
4 dotted
5 hidden
12
C
hpsPos
S16
super/subscript position in half points; positive means text is raised;
negative means text is lowered.
14
E
lid
U16
Language Name Language ID
0x0401 Arabic
0x0402 Bulgarian
0x0403 Catalan
0x0404 Traditional Chinese
0x0804 Simplified Chinese
0x0405 Czech
0x0406 Danish
0x0407 German
0x0807 Swiss German
0x0408 Greek
0x0409 U.S. English
0x0809 U.K. English
0x0c09 Australian English
0x040a Castilian Spanish
0x080a Mexican Spanish
0x040b Finnish
0x040c French
0x080c Belgian French
0x0c0c Canadian French
0x100c Swiss French
0x040d Hebrew
0x040e Hungarian
0x040f Icelandic
0x0410 Italian
0x0810 Swiss Italian
0x0411 Japanese
0x0412 Korean
0x0413 Dutch
0x0813 Belgian Dutch
0x0414 Norwegian - Bokmal
0x0814 Norwegian - Nynorsk
0x0415 Polish
0x0416 Brazilian Portuguese
0x0816 Portuguese
0x0417 Rhaeto-Romanic
0x0418 Romanian
0x0419 Russian
0x041a Croato-Serbian (Latin)
0x081a Serbo-Croatian (Cyrillic)
0x041b Slovak
0x041c Albanian
0x041d Swedish
0x041e Thai
0x041f Turkish
0x0420 Urdu
0x0421 Bahasa
16
10
fcPic_fcObj_lTagObj
U32
offset in document stream pointing to beginning of a picture when character
is a picture character (character is 0x01 and chp.fSpec is 1)
offset in document stream pointing to beginning of a picture when character
is an OLE1 object character (character is 0x20 and chp.fSpec is 1, chp.fOle2
is 0)
long word tag that identifies an OLE2 object in the object stream when
the character is an OLE2 object character. (character is 0x01 and chp.fSpec
is 1, chp.fOle2 is 1)
20
14
ibstRMark
U16
index to author IDs stored in hsttbfRMark. used when text in run was
newly typed or deleted when revision marking was enabled
22
16
dttmRMark
DTTM
Date/time at which this run of text was entered/modified by the author.
(Only recorded whenrevision marking is on.)
26
1A
unused26
U16
reserved
28
1C
istd
U16
index to character style descriptor in the stylesheet that tags this
run of text When istd is istdNormalChar (10 decimal), characters in run
are not affected by a character style. If chp.istd contains any other value,
chpx of the specified character style are applied to CHP for this run before
any other exceptional properties are applied.
30
1E
ftcSym
U16
when chp.fSpec is 1 and the character recorded for the run in the document
stream is chSymbol (0x28), chp.ftcSym identifies the font code of the symbol
font that will be used to display the symbol character recorded in chp.chSym.
Just like chp.ftc, chp.ftcSym is an index into the rgffn structure.
32
20
chSym
U8
when chp.fSpec is 1 and the character recorded for the run in the document
stream is chSymbol (0x28), the character stored chp.chSym will be displayed
using the font specified in chp.ftcSym.
33
21
fChsDiff
U8
when 1, the character set used to interpret the characters recorded
in the run identified by chp.chse is different from the native character
set for this document which is stored in fib.chse.
34
22
idslRMReason
U16
an index to strings displayed as reasons for actions taken by Word?s
AutoFormat code
36
24
ysr
U8
hyphenation rule
0 No hyphenation
1Normal hyphenation
2Add letter before hyphen
3Change letter before hyphen
4Delete letter before hyphen
5Change letter after hyphen
6Delete letter before the hyphen and change the letter preceding the
deleted character
37
25
chYsr
U8
the character that will be used to add or changea letter when chp.ysr
is 2,3, 5 or 6
38
26
chse
U16
extended character set id
0 characters in run should be interpreted using the ANSI set used by
Windows
256 characters in run should be interpreted using the Macintosh character
set.
40
28
hpsKern
U16
kerning distance for characters in run recorded in half points
Character Property Exceptions (CHPX)
The CHPX is stored within Character FKPs and withinthe STSHin
STDsfor
paragraph
style and character style entries.
b10
b16
field
type
size
bitfield
comments
0
0
cb
U8
count of bytes of following data in CHPX.
1
1
grpprl
U8[cb]
a list of the sprms that encode the differences between CHP for a run
of text and the CHP generated by the paragraph and character styles that
tag the run.
sprm
fields in CHP altered by sprm
sprmCFSpec
chp.fSpec
sprmCSymbol
chp.chSym, chp.ftcSym
sprmCPicLocation
chp.fcPic
sprmCFStrikeRM
chp.fRMarkDel
sprmCFRMark
chp.fRMark
sprmCFFldVanish
chp.fFldVanish
sprmCIbstRMark
chp.ibstRMark
sprmCDttmRMark
chp.dttmRMark
sprmCRMReason
chp.idslRMReason
sprmCIstd
chp.istd
sprmCFBold
chp.fBold
sprmCFItalic
chp.fItalic
sprmCFStrike
chp.fStrike
sprmCFOutline
chp.fOutline
sprmCFShadow
chp.fShadow
sprmCFSmallCaps
chp.fSmallCaps
sprmCFCaps
chp.fCaps
sprmCFVanish
chp.fVanish
sprmCFtc
chp.ftc
sprmCKul
chp.kul
sprmCDxaSpace
chp.dxaSpace
sprmCLid
chp.lid
sprmCIco
chp.ico
sprmCHps
chp.hps
sprmCHpsPos
chp.hpsPos
sprmCIss
chp.iss
sprmCFData
chp.fData
sprmCFObj
chp.fObj
sprmCFOle2
chp.fOle2
sprmCYsri
chp.ysri
sprmCHpsKern
chp.hpsKern
sprmCChse
chp.chse, chp.fChsDiff
Formatted Disk Page for CHPXs (CHPXFKP)
b10
b16
field
type
size
bitfield
comments
0
rgfc
U32[]
Array of FCs. Each FC is the limit FC of a run of exception text.
4*(fkp.crun+1)
rgb
U8[]
an array of bytes where each byte is the word offset of aCHPX. If the
byte stored is 0,there is no difference between run's character properties
and the style's character properties
5*fkp.crun+4
unusedSpace
U8[]
As new runs/paragraphs are recorded in the FKP,unused space is reduced
by 5 if CHPX is already recorded and is reduced by5+sizeof(CHPX) if property
is not already recorded.
511-sizeof(grpchpx)
grpchpx
U8[]
grpchpx consists of all of the CHPXs stored in FKP concatenated end
to end. Each CHPXis prefixed with a count of bytes which records its length.
511
crun
U8
count of runs for CHPX FKP,
Drop Cap Specifier (DCS)
b10
b16
field
type
size
bitfield
comment
0
0
fdct
U8
:3
0007
default value 0
drop cap type
0 no drop cap
1 normal drop cap
2 drop cap in margin
lines
U8
:5
00F8
count of lines to drop
1
1
unused1
U8
reserved
Drawing Object (Word) (DO)
b10
b16
field
type
size
bitfield
comment
0
0
fc
U32
FC pointing to drawing object data
0
0
dok
U16
Drawn Object Kind, currently this is always 0
2
2
cb
U16
size (count of bytes) of the entire DO
4
4
bx
U8
x position relative to anchor CP
5
5
by
U8
y position relative to anchor CP
6
6
dhgt
U16
height of DO
8
8
fAnchorLock
U16
:1
0001
1 if the DO anchor is locked
unused8
U16
:15
FFFE
10
A
rgdp
U8
variable length array of drawing primitives
Document Properties (DOP)
b10
b16
field
type
size
bitfield
comment
0
0
fFacingPages
U16
:1
0001
1 when facing pages should be printed (default 0)
fWidowControl
U16
:1
0002
1 when widow control is in effect. 0 when widow control disabled. (default
1)
fPMHMainDoc
U16
:1
0004
1 when doc is a main doc for Print Merge Helper, 0 when not; default=0
grfSuppression
U16
:2
0018
Default line suppression storage
0= form letter line suppression
1= no line suppression
default=0
fpc
U16
:2
0060
footnote position code
0 print as endnotes
1 print at bottom of page
2 print immediately beneath text
(default 1)
unused0_7
U16
:1
0080
unused (default 0)
grpfIhdt
U16
:8
FF00
specification of document headers and footers. See explanation under
Headers and Footers topic. (default 0)
2
2
rncFtn
U16
:2
0003
restart index for footnote
0 don't restart note numbering
1 restart for each section
2 restart for each page
(default 0)
nFtn
U16
:14
FFFC
initial footnote number for document (default 1)
4
4
fOutlineDirtySave
U8
:1
0001
when 1, indicates that information in the hplcpad should be refreshed
since outline has been dirtied
unused4_1
U8
:7
00FE
reserved
5
5
fOnlyMacPics
U8
:1
0100
when 1, Word believes all pictures recorded in the document were created
on a Macintosh
fOnlyWinPics
U8
:1
0200
when 1, Word believes all pictures recorded in the document were created
in Windows
fLabelDoc
U8
:1
0400
when 1, document was created as a print merge labels document
fHyphCapitals
U8
:1
0800
when 1, Word is allowed to hyphenate words that are capitalized. When
0, capitalized may not be hyphenated
fAutoHyphen
U8
:1
1000
when 1, Word will hyphenate newly typed text as a background task
fFormNoFields
U8
:1
2000
fLinkStyles
U8
:1
4000
when 1, Word will merge styles from its template
fRevMarking
U8
:1
8000
when 1, Word will mark revisions as the document is edited
6
6
fBackup
U8
:1
0001
always make backup when document saved when 1.
fExactCWords
U8
:1
0002
fPagHidden
U8
:1
0004
fPagResults
U8
:1
0008
fLockAtn
U8
:1
0010
when 1, annotations are locked for editing
fMirrorMargins
U8
:1
0020
swap margins on left/right pages when 1.
fReadOnlyRecommended
U8
:1
0040
user has recommended that this doc be opened read-only when 1
fDfltTrueType
U8
:1
0080
when 1, use TrueType fonts by default (flag obeyed only when doc was
created by WinWord 2.x)
7
7
fPagSuppressTopSpacing
U8
:1
0100
when 1, file created with SUPPRESSTOPSPACING=YES in win.ini. (flag
obeyed only when doc was created by WinWord 2.x).
fProtEnabled
U8
:1
0200
when 1, document is protected from edit operations
fDispFormFldSel
U8
:1
0400
when 1, restrict selections to occur only within form fields
fRMView
U8
:1
0800
when 1, show revision markings on screen
fRMPrint
U8
:1
1000
when 1, print revision marks when document is printed
fWriteReservation
U8
:1
2000
fLockRev
U8
:1
4000
when 1, the current revision marking state is locked
fEmbedFonts
U8
:1
8000
when 1, document contains embedded True Type fonts
8
8
copts_fNoTabForInd
U16
:1
0001
compatibility option: when 1, don?t add automatic tab stops for hanging
indent
copts_fNoSpaceRaiseLower
U16
:1
0002
compatibility option: when 1, don?t add extra space for raised or lowered
characters
copts_fSuppressSpbfAfterPageBreak
U16
:1
0004
compatibility option: when 1, suppress the paragraph Space Before and
Space After options after a page break
copts_fWrapTrailSpaces
U16
:1
0008
compatibility option: when 1, wrap trailing spaces at the end of a
line to the next line
copts_fMapPrintTextColor
U16
:1
0010
compatibility option: when 1, print colors as black on non-color printers
copts_fNoColumnBalance
U16
:1
0020
compatibility option: when 1, don?t balance columns for Continuous
Section starts
copts_fConvMailMergeEsc
U16
:1
0040
copts_fSupressTopSpacing
U16
:1
0080
compatibility option: when 1, suppress extra line spacing at top of
page
copts_fOrigWordTableRules
U16
:1
0100
compatibility option: when 1, combine table borders like Word 5.x for
the Macintosh
copts_fTransparentMetafiles
U16
:1
0200
compatibility option: when 1, don?t blank area between metafile pictures
copts_fShowBreaksInFrames
U16
:1
0400
compatibility option: when 1, show hard page or column breaks in frames
copts_fSwapBordersFacingPgs
U16
:1
0800
compatibility option: when 1, swap left and right pages on odd facing
pages
unused8_12
U16
:4
F000
reserved
10
A
dxaTab
U16
(default 720 twips) default tab width
12
C
wSpare
U16
14
E
dxaHotZ
U16
width of hyphenation hot zone measured in twips
16
10
cConsecHypLim
U16
number of lines allowed to have consecutive hyphens
18
12
wSpare2
U16
reserved
20
14
dttmCreated
DTTM
date and time document was created
24
18
dttmRevised
DTTM
date and time document was last revised
28
1C
dttmLastPrint
DTTM
date and time document was last printed
32
20
nRevision
U16
number of times document has been revised since its creation
34
22
tmEdited
U32
time document was last edited
38
26
cWords
U32
count of words tallied by last Word Count execution
42
2A
cCh
U32
count of characters tallied by last Word Count execution
46
2E
cPg
U16
count of pages tallied by last Word Count execution
48
30
cParas
U32
count of paragraphs tallied by last Word Count execution
52
34
rncEdn
U16
:2
0003
restart endnote number code
0 don't restart endnote numbering
1 restart for each section
2 restart for each page
nEdn
U16
:14
FFFC
beginning endnote number
54
36
epc
U16
:2
0003
endnote position code
0 display endnotes at end of section
3 display endnotes at end of document
nfcFtnRef
U16
:4
003C
number format code for auto footnotes
0 Arabic numbering
1 Upper case Roman
2 Lower case Roman
3 Upper case Letter
4 Lower case letter
5 Ordinal
nfcEdnRef
U16
:4
03C0
number format code for auto endnotes
0 Arabic numbering
1 Upper case Roman
2 Lower case Roman
3 Upper case Letter
4 Lower case letter
5 Ordinal
fPrintFormData
U16
:1
0400
only print data inside of form fields
fSaveFormData
U16
:1
0800
only save document data that is inside of a form field.
fShadeFormData
U16
:1
1000
shade form fields
unused54_13
U16
:2
6000
reserved
fWCFtnEdn
U16
:1
8000
when 1, include footnotes and endnotes in word count
56
38
cLines
U32
count of lines tallied by last Word Count operation
60
3C
cWordsFtnEnd
U32
count of words in footnotes and endnotes tallied by last Word Count
operation
64
40
cChFtnEdn
U32
count of characters in footnotes and endnotes tallied by last Word
Count operation
68
44
cPgFtnEdn
U16
count of pages in footnotes and endnotes tallied by last Word Count
operation
70
46
cParasFtnEdn
U32
count of paragraphs in footnotes and endnotes tallied by last Word
Count operation
74
4A
cLinesFtnEdn
U32
count of paragraphs in footnotes and endnotes tallied by last Word
Count operation
78
4E
lKeyProtDoc
U32
document protection password key, only valid if dop.fProtEnabled, dop.fLockAtn
or dop.fLockRev are 1.
82
52
wvkSaved
U16
:3
0007
document view kind
0 Normal view
1 Outline view
2 Page View
wScaleSaved
U16
:9
0FF8
zkSaved
U16
:2
3000
unused82_14
U16
:2
c000
DP data for an arc (DPARC)
b10
b16
field
type
size
bitfield
comment
0
0
dphead
DPHEAD
12
Common header for a drawing primitive
12
c
lnpc
U32
LiNe Property Color -- RGB color value
16
10
lnpw
U16
line property weight in twips
18
12
lnps
U16
line property style. See description in DPLINE.
20
14
dlpcFg
U32
FiLl Property Color ForeGround -- RGB color value
24
18
dlpcBg
U32
FiLl Property Color BackGround -- RGB color value
28
1c
flpp
U16
FiLl Property Pattern. REVIEW davebu
30
1e
shdwpi
U16
Shadow Property Intensity
32
20
xaOffset
U16
x offset of shadow
34
22
yaOffset
U16
y offset of shadow
36
24
fLeft
U16
:8
00ff
REVIEW davebu
fUp
U16
:8
ff00
REVIEW davebu
DP data for a callout textbox (DPCALLOUT)
b10
b16
field
type
size
bitfield
comment
0
0
dphead
DPHEAD
12
Common header for a drawing primitive
12
c
unused12
U16
REVIEW davebu flags
14
e
dzaOffset
U16
REVIEW davebu
16
10
dzaDescent
U16
REVIEW davebu
18
12
dzaLength
U16
REVIEW davebu
20
14
dptxbx
DPTXBX
DP for a textbox
60
4c
dpPolyLine
DPPOLYLINE
DP for a polyline
DP data for an ellipse (DPELLIPSE)
b10
b16
field
type
size
bitfield
comment
0
0
dphead
DPHEAD
12
Common header for a drawing primitive
12
c
lnpc
U32
LiNe Property Color -- RGB color value
16
10
lnpw
U16
line property weight in twips
18
12
lnps
U16
line property style. See description in DPLINE.
20
14
dlpcFg
U32
FiLl Property Color ForeGround -- RGB color value
24
18
dlpcBg
U32
FiLl Property Color BackGround -- RGB color value
28
1c
flpp
U16
FiLl Property Pattern. REVIEW davebu
30
1e
shdwpi
U16
Shadow Property Intensity
32
20
xaOffset
U16
x offset of shadow
34
22
yaOffset
U16
y offset of shadow
Drawing Primitive Header (Word) (DPHEAD)
b10
b16
field
type
size
bitfield
comment
0
0
dpk
U16
Drawn Primitive KindREVIEW davebu
0x0000 = start of grouping of primitives (DO)
0x0001 = line (DPLINE)
0x0002 = textbox (DPTXBX)
0x0003 = rectangle (DPRECT)
0x0004 = arc (DPARC)
0x0005 = ellipse (DPELLIPSE)
0x0006 = polyline (DPPOLYLINE)
0x0007 = callout textbox (DPCALLOUT)
0x0008 = end of grouping of primitives
0x0009 = sample primitve holding default values (DPSAMPLE)
2
2
cb
U16
size (count of bytes) of this DP
4
4
xa
U16
These 2 points describe the rectangle enclosing this DP relative to
the origin of the DO
6
6
ya
U16
8
8
dxa
U16
10
a
dya
U16
DP data for a line (DPLINE)
b10
b16
field
type
size
bitfield
comment
0
0
dphead
DPHEAD
12
Common header for a drawing primitive
12
c
xaStart
U16
starting point for line
14
e
yaStart
U16
12
c
xaEnd
U16
ending point for line
14
e
yaEnd
U16
16
10
lnpc
U32
LiNe Property Color -- RGB color value
20
14
lnpw
U16
line property weight in twips
22
16
lnps
U16
line property style
0 Solid
1 Dashed
2 Dotted
3 Dash Dot
4 Dash Dot Dot
5 Hollow
24
18
eppsStart
U16
:2
0003
Start EndPoint Property Style 0 None
1 Hollow
2 Filled
eppwStart
U16
:2
000c
Start EndPoint Property Weight
epplStart
U16
:2
0030
Start EndPoint Property length
unused24_6
U16
:10
26
1a
eppsEnd
U16
:2
0003
End EndPoint Property Style
eppwEnd
U16
:2
000c
End EndPoint Property Weight
epplEnd
U16
:2
0030
End EndPoint Property length
unused26_6
U16
:10
28
1c
shdwpi
U16
Shadow Property Intensity REVIEW davebu
30
1e
xaOffset
U16
x offset of shadow
32
20
yaOffset
U16
y offset of shadow
DP data for a polyline (DPPOLYLINE)
b10
b16
field
type
size
bitfield
comment
0
0
dphead
DPHEAD
12
Common header for a drawing primitive
12
c
lnpc
U32
LiNe Property Color -- RGB color value
16
10
lnpw
U16
line property weight in twips
18
12
lnps
U16
line property style. See description in DPLINE.
20
14
dlpcFg
U32
FiLl Property Color ForeGround -- RGB color value
24
18
dlpcBg
U32
FiLl Property Color BackGround -- RGB color value
28
1c
flpp
U16
FiLl Property Pattern. REVIEW davebu
30
1e
eppsStart
U16
:2
0003
Start EndPoint Property Style
0 None
1 Hollow
2 Filled
eppwStart
U16
:2
000c
Start EndPoint Property Weight
epplStart
U16
:2
0030
Start EndPoint Property length
unused30_6
U16
:10
32
20
eppsEnd
U16
:2
0003
End EndPoint Property Style
eppwEnd
U16
:2
000c
End EndPoint Property Weight
epplEnd
U16
:2
0030
End EndPoint Property length
unused32_6
U16
:10
34
22
shdwpi
U16
Shadow Property Intensity
36
24
xaOffset
U16
x offset of shadow
38
26
yaOffset
U16
y offset of shadow
40
28
fPolygon
U16
:1
0001
1 if this is a polygon
cpt
U16
:15
00fe
count of points
42
2a
xaFirst
U16
These are the endpoints of the first line.
44
2c
yaFirst
U16
46
2e
xaEnd
U16
48
30
yaEnd
U16
50
32
rgpta
U16[]
An array of xa,ya pairs for the remaining points
DP data for a rectangle (DPRECT)
b10
b16
field
type
size
bitfield
comment
0
0
dphead
DPHEAD
12
Common header for a drawing primitive
12
c
lnpc
U32
LiNe Property Color -- RGB color value
16
10
lnpw
U16
line property weight in twips
18
12
lnps
U16
line property style. See description in DPLINE.
20
14
dlpcFg
U32
FiLl Property Color ForeGround -- RGB color value
24
18
dlpcBg
U32
FiLl Property Color BackGround -- RGB color value
28
1c
flpp
U16
FiLl Property Pattern. REVIEW davebu
30
1e
shdwpi
U16
Shadow Property Intensity
32
20
xaOffset
U16
x offset of shadow
34
22
yaOffset
U16
y offset of shadow
36
24
fRoundCorners
U16
:1
0001
1 if the textbox has rounded corners
zaShape
U16
:15
000e
REVIEW davebu
DP data for a sample primitive holding default values (DPSAMPLE)
b10
b16
field
type
size
bitfield
comment
0
0
dphead
DPHEAD
12
Common header for a drawing primitive
12
c
lnpc
U32
LiNe Property Color -- RGB color value
16
10
lnpw
U16
line property weight in twips
18
12
lnps
U16
line property style. See description in DPLINE.
20
14
dlpcFg
U32
FiLl Property Color ForeGround -- RGB color value
24
18
dlpcBg
U32
FiLl Property Color BackGround -- RGB color value
28
1c
flpp
U16
FiLl Property Pattern. REVIEW davebu
30
1e
eppsStart
U16
:2
0003
Start EndPoint Property Style
0 None
1 Hollow
2 Filled
eppwStart
U16
:2
000c
Start EndPoint Property Weight
epplStart
U16
:2
0030
Start EndPoint Property length
unused30_6
U16
:10
32
20
eppsEnd
U16
:2
0003
End EndPoint Property Style
eppwEnd
U16
:2
000c
End EndPoint Property Weight
epplEnd
U16
:2
0030
End EndPoint Property length
unused32_6
U16
:10
34
22
shdwpi
U16
Shadow Property Intensity
36
24
xaOffset
U16
x offset of shadow
38
26
yaOffset
U16
y offset of shadow
40
28
unused40
U16
42
2a
dzaOffset
U16
REVIEW davebu
44
2c
dzaDescent
U16
REVIEW davebu
46
2e
dzaLength
U16
REVIEW davebu
48
30
fRoundCorners
U16
:1
0001
1 if the textbox has rounded corners
zaShape
U16
:15
000fe
REVIEW davebu
50
32
dzaInternalMargin
U16
REVIEW davebu
DP data for a textbox (DPTXBX)
b10
b16
field
type
size
bitfield
comment
0
0
dphead
DPHEAD
12
Common header for a drawing primitive
12
c
lnpc
U32
LiNe Property Color -- RGB color value
16
10
lnpw
U16
line property weight in twips
18
12
lnps
U16
line property style. See description in DPLINE.
20
14
dlpcFg
U32
FiLl Property Color ForeGround -- RGB color value
24
18
dlpcBg
U32
FiLl Property Color BackGround -- RGB color value
28
1c
flpp
U16
FiLl Property Pattern. REVIEW davebu
30
1e
shdwpi
U16
Shadow Property Intensity
32
20
xaOffset
U16
x offset of shadow
34
22
yaOffset
U16
y offset of shadow
36
24
fRoundCorners
U16
:1
0001
1 if the textbox has rounded corners
zaShape
U16
:15
000e
REVIEW davebu
38
26
dzaInternalMargin
U16
REVIEW davebu
Date and Time (internal date format) (DTTM)
b10
b16
field
type
size
bitfield
comment
0
0
mint
U16
:6
003F
minutes (0-59)
hr
U16
:5
07C0
hours (0-23)
dom
U16
:5
F800
days of month (1-31)
2
2
mon
U16
:4
000F
months (1-12)
yr
U16
:9
1FF0
years (1900-2411)-1900
wdy
U16
:3
E000
weekday
Sunday=0
Monday=1
Tuesday=2
Wednesday=3
Thursday=4
Friday=5
Saturday=6
File Drawn Object Address (Word) (FDOA)
b10
b16
field
type
size
bitfield
comment
0
0
fc
U32
FC pointing to drawing object data
4
4
ctxbx
U16
count of textboxes in the drawing object
Font Family Name (FFN)
b10
b16
field
type
size
bitfield
comment
0
0
cbFfnM1
U8
total length of FFN - 1.
1
1
prq
U8
:2
03
pitch request
fTrueType
U8
:1
04
when 1, font is a TrueType font
unused1_3
U8
:1
08
reserved
ff
U8
:3
70
font family id
unused1_7
U8
:1
80
reserved
2
2
wWeight
U16
base weight of font
4
4
chs
U8
character set identifier
5
5
ibszAlt
U8
index into ffn.szFfn to the name of the alternate font
6
6
szFfn
U8[]
zero terminated string that records name of font. Possibly followed
by a second sz which records the name of an alternate font to use if the
first named font does not exist on this system. Maximal size of szFfn is
65 characters.
File Information Block (Windows Word) (FIB)
b10
b16
field
type
size
bitfield
comment
0
0
wIdent
U16
magic number
2
2
nFib
U16
FIB version written
4
4
nProduct
U16
product version written by
6
6
lid
U16
language stamp---localized version;
8
8
pnNext
U16
10
A
fDot
U16
:1
0001
fGlsy
U16
:1
0002
fComplex
U16
:1
0004
when 1, file is in complex, fast-saved format.
fHasPic
U16
:1
0008
file contains 1 or more pictures
cQuickSaves
U16
:4
00F0
count of times file was quicksaved
fEncrypted
U16
:1
0100
1 if file is encrypted, 0 if not
unused10_9
U16
:1
0200
reserved
fReadOnlyRecommended
U16
:1
0400
=1 when user has recommended that file be read read-only
fWriteReservation
U16
:1
0800
=1, when file owner has made the file write reserved
fExtChar
U16
:1
1000
=1, when using extended character set in file
unused10_13
U16
:3
E000
unused
12
C
nFibBack
U16
14
E
lKey
U32
file encrypted key, only valid if fEncrypted.
18
12
envr
U8
environment in which file was created
0 created by Win Word
1 created by Mac Word
19
13
unused19
U8
reserved
20
14
chse
U16
default extended character set id for text in document stream. (overridden
by chp.chse)
0 by default characters in doc stream should be interpreted using the
ANSI character set used by Windows
256 characters in doc stream should be interpreted using the Macintosh
character set.
22
16
chseTables
U16
default extended character set id for text in internal data structures
0 by default characters in doc stream should be interpreted using the
ANSI character set used by Windows
256 characters in doc stream should be interpreted using the Macintosh
character set.
24
18
fcMin
U32
file offset of first character of text. In non-complexfiles a CP can
be transformed into an FC by the following transformation: fc = cp + fib.fcMin.
28
1C
fcMac
U32
file offset of last character of text in document text stream+ 1
32
20
cbMac
U32
file offset of last byte written to file + 1.
36
24
fcSpare0
U32
reserved
40
28
fcSpare1
U32
reserved
44
2C
fcSpare2
U32
reserved
48
30
fcSpare3
U32
reserved
52
34
ccpText
U32
length of main document text stream
56
38
ccpFtn
U32
length of footnote subdocument text stream
60
3C
ccpHdd
U32
length of header subdocument text stream
64
40
ccpMcr
U32
length of macro subdocument text stream
68
44
ccpAtn
U32
length of annotation subdocument text stream
72
48
ccpEdn
U32
length of endnote subdocument text stream
76
4C
ccpTxbx
U32
length of textbox subdocument text stream
80
50
ccpHdrTxbx
U32
length of header textbox subdocument text stream
84
54
ccpSpare2
U32
reserved
88
58
fcStshfOrig
U32
file offset of original allocation for STSH in file. During fast save
Word will attempt to reuse this allocation if STSH is small enough to fit.
92
5C
lcbStshfOrig
U32
count of bytes of original STSH allocation
96
60
fcStshf
U32
file offset of STSH in file.
100
64
lcbStshf
U32
count of bytes of current STSH allocation
104
68
fcPlcffndRef
U32
file offset of footnote reference PLC. CPs in PLC are relative to main
document text stream and give location of footnote references. The structure
stored in this plc, called the FRD (footnote reference descriptor) is two
byte long.
108
6C
lcbPlcffndRef
U32
count of bytes of footnote reference PLC. == 0 if no footnotes defined
in document.
112
70
fcPlcffndTxt
U32
file offset of footnote text PLC. CPs in PLC are relative to footnote
subdocument text stream and give location of beginnings of footnote text
for correspondings references recorded in plcffndRef. No structure is stored
in this plc. There will just be n+1 FC entries in this PLC when there are
n footnotes
116
74
lcbPlcffndTxt
U32
count of bytes of footnote text PLC. == 0 if no footnotes defined in
document
120
78
fcPlcfandRef
U32
file offset of annotation reference PLC. The CPs recorded in this PLC
give the offset of annotation references in the main document.
124
7C
lcbPlcfandRef
U32
count of bytes of annotation reference PLC.
128
80
fcPlcfandTxt
U32
file offset of annotation text PLC. The Cps recorded in this PLC give
the offset of the annotation text in the annotation sub document corresponding
to the references stored in the plcfandRef. There is a 1 to 1 correspondence
between entries recorded in the plcfandTxt and the plcfandRef.
132
84
lcbPlcfandTxt
U32
count of bytes of the annotation text PLC
136
88
fcPlcfsed
U32
file offset of section descriptor PLC. CPs in PLC are relative to main
document. The length of the SED is 12 bytes.
140
8C
lcbPlcfsed
U32
count of bytes of section descriptor PLC.
144
90
fcPlcfpad
U32
file offset of paragraph descriptor PLCfor main document which is used
by Word's Outline view. CPs in PLC are relative to main document. The length
of the PGD is 8 bytes.
148
94
lcbPlcfpad
U32
count of bytes of paragraph descriptor PLC. ==0 if file was never viewed
in Outline view. Should not be written by third party creators of Word
files.
152
98
fcPlcfphe
U32
file offset of PLC of paragraph heights. CPs in PLC are relative to
main document text stream. Only written for fies in complex format. Should
not be written by third party creators of Word files. The PHE is 6 bytes
long.
156
9C
lcbPlcfphe
U32
count of bytes of paragraph height PLC. ==0 when file is non-complex.
160
A0
fcSttbfglsy
U32
file offset of glossary string table. This table consists of pascal
style strings (strings stored prefixed with a length byte) concatenated
one after another.
164
A4
lcbSttbfglsy
U32
count of bytes of glossary string table.
== 0 for non-glossary documents.
!=0 for glossary documents.
168
A8
fcPlcfglsy
U32
file offset of glossary PLC. CPs in PLC are relative to main document
and mark the beginnings of glossary entries and are in 1-1 correspondence
with entries of sttbfglsy. No structure is stored in this PLC. There will
be n+1 FC entries in this PLC when there are n glossary entries.
172
AC
lcbPlcfglsy
U32
count of bytes of glossary PLC.
== 0 for non-glossary documents.
!=0 for glossary documents.
176
B0
fcPlcfhdd
U32
byte offset of header PLC. CPs are relative to header subdocument and
mark the beginnings of individual headers in the header subdoc. No structure
is stored in this PLC. There will be n+1 FC entries in this PLC when there
are n headers stored for the document.
180
B4
lcbPlcfhdd
U32
count of bytes of header PLC. == 0 if document contains no headers
184
B8
fcPlcfbteChpx
U32
file offset of character property bin table.PLC. FCs in PLC are file
offsets. Describes text of main document and all subdocuments. The BTE
is 2 bytes long.
188
BC
lcbPlcfbteChpx
U32
count of bytes of character property bin table PLC.
192
C0
fcPlcfbtePapx
U32
file offset of paragraph property bin table.PLC. FCs in PLC are file
offsets. Describes text of main document and all subdocuments. The BTE
is 2 bytes long.
196
C4
lcbPlcfbtePapx
U32
count of bytes of paragraph property bin table PLC.
200
C8
fcPlcfsea
U32
file offset of PLC reserved for private use. The SEA is 6 bytes long.
204
CC
lcbPlcfsea
U32
count of bytes of private use PLC.
208
DO
fcSttbfffn
U32
file offset of font information STTBF. The nth entry in the STTBF describes
the font that will be displayed when the chp.ftc for text is equal to n.
See the FFN file structure definition.
212
D4
lcbSttbfffn
U32
count of bytes in sttbfffn.
216
D8
fcPlcffldMom
U32
offset in doc stream to the PLC of field positions in the main document.
The Cps point to the beginning CP of a field, the CP offield separator
character inside a field and the ending CP of the field. A field may be
nested within another field. 20 levels of field nesting are allowed.
220
DC
lcbPlcffldMom
U32
224
E0
fcPlcffldHdr
U32
offset in doc stream to the PLC of field positions in the header subdocument.
228
E4
lcbPlcffldHdr
U32
232
E8
fcPlcffldFtn
U32
offset in doc stream to the PLC of field positions in the footnote
subdocument.
236
EC
lcbPlcffldFtn
U32
240
F0
fcPlcffldAtn
U32
offset in doc stream to the PLC of field positions in the annotation
subdocument.
244
F4
lcbPlcffldAtn
U32
248
F8
fcPlcffldMcr
U32
offset in doc stream to the PLC of field positions in the macro subdocument.
252
U32
lcbPlcffldMcr
U32
256
100
fcSttbfbkmk
U32
offset in document stream of the STTBF that records bookmark names
in the main document
260
104
lcbSttbfbkmk
U32
264
108
fcPlcfbkf
U32
offset in document stream of the PLCF that records the beginning CP
offsets of bookmarks in the main document. See BKF structure definition
268
10C
lcbPlcfbkf
U32
272
110
fcPlcfbkl
U32
offset in document stream of the PLCF that records the ending CP offsets
of bookmarks recorded in the main document. See the BKL structure definition.
276
114
lcbPlcfbkl
U32
280
118
fcCmds
U32
284
11C
lcbCmds
U32
288
120
fcPlcmcr
U32
292
124
lcbPlcmcr
U32
296
128
fcSttbfmcr
U32
300
12C
lcbSttbfmcr
U32
304
130
fcPrDrvr
U32
file offset of the printer driver information (names of drivers, port
etc...)
308
134
lcbPrDrvr
U32
count of bytes of the printer driver information (names of drivers,
port etc...)
312
138
fcPrEnvPort
U32
file offset of the print environment in portrait mode.
316
13C
lcbPrEnvPort
U32
count of bytes of the print environment in portrait mode.
320
140
fcPrEnvLand
U32
file offset of the print environment in landscape mode.
324
144
lcbPrEnvLand
U32
count of bytes of the print environment in landscape mode.
328
148
fcWss
U32
file offset of Window Save State data structure. WSS contains dimensions
of document's main text window and the last selection made by Word user.
332
14C
lcbWss
U32
count of bytes of WSS. ==0 if unable to store the window state. Should
not be written by third party creators of Word files.
336
150
fcDop
U32
file offset of document property data structure.
340
154
lcbDop
U32
count of bytes of document properties.
344
158
fcSttbfAssoc
U32
offset to STTBF of associated strings. The strings in this table specify
document summary info and the paths to special documents related to this
document. See documentation of the STTBFASSOC.
348
15C
lcbSttbfAssoc
U32
352
160
fcClx
U32
file of offset of beginning of information for complex files. Consists
of an encoding of all of the prms quoted by the document followed by the
plcpcd (piece table) for the document.
356
164
lcbClx
U32
count of bytes of complex file information. == 0 if file is non-complex.
360
168
fcPlcfpgdFtn
U32
file offset of page descriptor PLC for footnote subdocument. CPs in
PLC are relative to footnote subdocument. Should not be written by third
party creators of Word files.
364
16C
lcbPlcfpgdFtn
U32
count of bytes of page descriptor PLC for footnote subdocument. ==0
if document has not been paginated. The length of the PGD is 8 bytes.
368
170
fcAutosaveSource
U32
file offset of the name of the original file.fcAutosaveSource and cbAutosaveSource
should both be 0 if autosave is off.
372
174
lcbAutosaveSource
U32
count of bytes of the name of the original file.
376
178
fcGrpStAtnOwners
U32
group of strings recording the names of the owners of annotations stored
in the document
380
17C
lcbGrpStAtnOwners
U32
count of bytes of the group of strings
384
180
fcSttbfAtnbkmk
U32
file offset of the sttbf that records names of bookmarks in the annotation
subdocument
388
184
lcbSttbfAtnbkmk
U32
length in bytes of the sttbf that records names of bookmarks in the
annotation subdocument
392
188
wSpare4Fib
U16
394
18A
pnChpFirst
U16
the page number of the lowest numbered page in the document that records
CHPX FKP information
396
18C
pnPapFirst
U16
the page number of the lowest numbered page in the document that records
PAPX FKP information
398
18E
cpnBteChp
U16
count of CHPX FKPs recorded in file. In non-complexfiles if the number
of entries in the plcfbteChpxis less than this, the plcfbteChpxis incomplete.
400
190
cpnBtePap
U16
count of PAPX FKPs recorded in file. In non-complexfiles if the number
of entries in the plcfbtePapxis less than this, the plcfbtePapxis incomplete.
402
192
fcPlcfdoaMom
U32
file offset of theFDOA (drawn object) PLC for main document. ==0 if
document has no drawn objects. The length of the FDOA is 6 bytes.
406
196
lcbPlcfdoaMom
U32
length in bytes of the FDOA PLC of the main document
410
19A
fcPlcfdoaHdr
U32
file offset of theFDOA (drawn object) PLC for the header document.
==0 if document has no drawn objects. The length of the FDOA is 6 bytes.
414
19E
lcbPlcfdoaHdr
U32
length in bytes of the FDOA PLC of the header document
418
1A2
fcUnused1
U32
422
1A6
lcbUnused1
U32
426
1AA
fcUnused2
U32
430
1AE
lcbUnused2
U32
434
1B2
fcPlcfAtnbkf
U32
file offset of BKF (bookmark first) PLC of the annotation subdocument
438
1B6
lcbPlcfAtnbkf
U32
length in bytes of BKF (bookmark first) PLC of the annotation subdocument
442
1BA
fcPlcfAtnbkl
U32
file offset of BKL (bookmark last) PLC of the annotation subdocument
446
1BE
lcbPlcfAtnbkl
U32
length in bytes of BKL (bookmark first) PLC of the annotation subdocument
450
1C2
fcPms
U32
file offset of PMS (Print Merge State) information block
454
1C6
lcbPms
U32
length in bytes of PMS
458
1CA
fcFormFldSttbf
U32
file offset of form field Sttbf which contains strings used in form
field dropdown controls
462
1CE
lcbFormFldSttbf
U32
length in bytes of form field Sttbf
466
1D2
fcPlcfendRef
U32
file offset of PlcfendRef which points to endnote references in the
main document stream
470
1D6
lcbPlcfendRef
U32
474
1DA
fcPlcfendTxt
U32
file offset of PlcfendRef which points to endnote textin the endnote
document stream which corresponds with the plcfendRef
478
1DE
lcbPlcfendTxt
U32
482
1E2
fcPlcffldEdn
U32
offset to PLCF of field positions in the endnote subdoc
486
1E6
lcbPlcffldEdn
U32
490
1EA
fcPlcfpgdEdn
U32
offset to PLCF of page boundaries in the endnote subdoc.
494
1EE
lcbPlcfpgdEdn
U32
498
1F2
fcUnused3
U32
502
1F6
lcbUnused3
U32
506
1FA
fcSttbfRMark
U32
offset to STTBF that records the author abbreviations for authors who
have made revisions in the document.
510
1FE
lcbSttbfRMark
U32
514
202
fcSttbfCaption
U32
offset to STTBF that records caption titles used in the document.
518
206
lcbSttbfCaption
U32
522
20A
fcSttbfAutoCaption
U32
526
20E
lcbSttbfAutoCaption
U32
530
212
fcPlcfwkb
U32
offset to PLCF that describes the boundaries of contributing documents
in a master document
534
216
lcbPlcfwkb
U32
538
21A
fcUnused4
U32
542
21E
lcbUnused4
U32
546
222
fcPlcftxbxTxt
U32
offset in doc stream of PLCF that records the beginning CP in the text
box subdoc of the text of individual text box entries
550
226
lcbPlcftxbxTxt
U32
554
22A
fcPlcffldTxbx
U32
offset in doc stream of the PLCF that records field boundaries recorded
in the textbox subdoc.
558
22E
lcbPlcffldTxbx
U32
562
232
fcPlcfHdrtxbxTxt
U32
offset in doc stream of PLCF that records the beginning CP in the header
text box subdoc of the text of individual header text box entries
566
236
lcbPlcfHdrtxbxTxt
U32
570
23A
fcPlcffldHdrTxbx
U32
offset in doc stream of the PLCF that records field boundaries recorded
in the header textbox subdoc.
574
23E
lcbPlcffldHdrTxbx
U32
578
242
fcStwUser
U32
Macro User storage
582
246
lcbStwUser
U32
586
24A
fcSttbttmbd
U32
590
24E
lcbSttbttmbd
U32
594
252
fcUnused
U32
598
256
lcbUnused
U32
602
25A
fcPgdMother
U32
606
25E
lcbPgdMother
U32
610
262
fcBkdMother
U32
614
266
lcbBkdMother
U32
616
26A
fcPgdFtn
U32
620
26E
lcbPgdFtn
U32
624
272
fcBkdFtn
U32
628
276
lcbBkdFtn
U32
632
27A
fcPgdEdn
U32
636
27E
lcbPgdEdn
U32
640
282
fcBkdEdn
U32
644
286
lcbBkdEdn
U32
648
28A
fcSttbfIntlFld
U32
652
28E
lcbSttbfIntlFld
U32
656
292
fcRouteSlip
U32
660
296
lcbRouteSlip
U32
664
29A
fcSttbSavedBy
U32
668
29E
lcbSttbSavedBy
U32
672
2A2
fcSttbFnm
U32
676
2A6
lcbSttbFnm
U32
Field Descriptor (FLD)
b10
b16
field
type
size
bitfield
comment
0
0
ch
U8
type of field boundary the FLD describes.
19 field begin mark
20 field separator
21 field end mark
1
1
flt
U8
field type
1
1
fDiffer
U16
:1
01
ignored for saved file
fZombieEmbed
U16
:1
02
==1, when result still believes this field is an EMBED or LINK field
fResultDirty
U16
:1
04
== 1, when user has edited or formatted the result. ==0 otherwise
fResultEdited
U16
:1
08
==1, when user has inserted text into or deleted text from the result.
fLocked
U16
:1
10
==1, when field is locked from recalc
fPrivateResult
U16
:1
20
==1, whenever the result of the field is never to be shown.
fNested
U16
:1
40
==1,when field is nested within another field
fHasSep
U16
:1
80
==1, when field has a field separator
flt value
field type
1
unknown keyword
2
possible bookmark (syntax matches bookmark name)
3
bookmark reference
4
index entry
5
footnote reference
6
Set command (for Print Merge)
7
If command (for Print Merge)
8
create index
9
table of contents entry
10
Style reference
11
document reference
12
sequence mark
13
create table-of-contents
14
quote Info variable
15
quote Titlevariable
16
quote Subjectvariable
17
quote Author variable
18
quote Keywords variable
19
quote Comments variable
20
quote Last Revised By variable
21
quote Creation Date variable
22
quote Revision Date variable
23
quote Print Date variable
24
quote Revision Number variable
25
quote Edit Time variable
26
quote Number of Pages variable
27
quote Number of Words variable
28
quote Number of Characters variable
29
quote File Name variable
30
quote Document Template Name variable
31
quote Current Date variable
32
quote Current Time variable
33
quote Current Page variable
34
evaluate expression
35
insert literal text
36
Include command (Print Merge)
37
page reference
38
Ask command (Print Merge)
39
Fillin command to display prompt (Print Merge)
40
Data command (Print Merge)
41
Next command (Print Merge)
42
NextIf command (Print Merge)
43
SkipIf (Print Merge)
44
inserts number of current Print Merge record
45
DDE reference
46
DDE automatic reference
47
Inserts Glossary Entry
48
sends characters to printer without translation
49
Formula definition
50
Goto Button
51
Macro Button
52
insert auto numbering field in outline format
53
insert auto numbering field in legal format
54
insert auto numbering field in arabic number format
55
reads a TIFF file
56
Link
57
Symbol
58
Embedded Object
59
Merge fields
60
User Name
61
User Initial
62
User Address
63
Bar code
65
Section
66
Section pages
67
Include Picture
68
Include Text
69
File Size
70
Form Text Box
71
Form Check Box
72
Note Reference
73
Create Table of Authorities
74
Mark Table of Authorities Entry
75
Merge record sequence number
76
Macro
77
Private
78
Insert Database
79
Autotext
80
Compare two values
81
Plug-in module private
82
Subscriber
83
Form List Box
84
Advance
Line Spacing Descriptor (LSPD)
b10
b16
field
type
size
bitfield
comments
0
0
dyaLine
U16
see description of sprmPDyaLine in the Sprm Definitions sectionfor
description of the meaning of dyaLine and fMultLinespace fields
2
2
fMultLinespace
U16
Window's (METAFILEPICT)
b10
b16
field
type
size
bitfield
comments
0
0
mm
U16
Specifies the mapping mode in which the picture is drawn.
2
2
xExt
U16
Specifies the size of the metafile picture for all modes except the
MM_ISOTROPIC and MM_ANISOTROPIC modes. (For more information about these
modes, see the yExt member.) The x-extent specifies the width of the rectangle
within which the picture is drawn. The coordinates are in units that correspond
to the mapping mode.
4
4
yExt
U16
Specifies the size of the metafile picture for all modes except the
MM_ISOTROPIC and MM_ANISOTROPIC modes. The y-extent specifies the height
of the rectangle within which the picture is drawn. The coordinates are
in units that correspond to the mapping mode.
6
6
hMF
U16
Identifies a memory metafile.
Embedded Object Properties (OBJHEADER)
b10
b16
field
type
size
bitfield
comments
0
0
lcb
U32
length of object (including this header)
4
4
cbHeader
U16
length of this header (for future use)
6
6
icf
U16
index to clipboard format of object
Outline LiST Data (OLST)
b10
b16
field
type
size
bitfield
comments
0
0
rganlv
ANLV[9]
an array of 9 ANLV structures describing how heading numbers should
be displayed for each of Word?s 9 outline heading levels
144
90
fRestartHdr
U8
when ==1, restart heading on section break
145
91
fSpareOlst2
U8
reserved
146
92
fSpareOlst3
U8
reserved
147
93
fSpareOlst4
U8
reserved
148
94
rgch
U8[64]
text before/after number
Paragraph Properties (PAP)
b10
b16
field
type
size
bitfield
comments
0
0
istd
U16
index to style descriptor . This is an index to an STD in the STSH
structure
2
2
jc
U8
justification code 0left justify
1center
2right justify
3left and right justify
3
3
fKeep
U8
keep entire paragraph on one page if possible
4
4
fKeepFollow
U8
keep paragraph on same page with next paragraph if possible
5
5
fPageBreakBefore
U8
start this paragraph on new page
6
6
fBrLnAbove
U8
:1
0001
fBrLnBelow
U8
:1
0002
fUnused
U8
:2
0006
reserved
pcVert
U8
:2
0030
vertical position code. Specifies coordinate frame to use when paragraphs
are absolutely positioned.
0 vertical position coordinates are relative to margin
1 coordinates are relative to page
2 coordinates are relative to text.This means: relative to where the
next non-APO text would have been placed if this APO did not exist.
pcHorz
U8
:2
00C0
horizontal position code. Specifies coordinate frame to use when paragraphs
are absolutely positioned.
0 horiz. position coordinates are relative to column.
1 coordinates are relative to margin
2 coordinates are relative to page
7
7
brcp
U8
rectangle border codes (the brcp and brcl fields have been superceded
by the newly defined brcLeft, brcTop, etc. fields. They remain in the PAP
for compatibility with MacWord 3.0)
0 none
1 border above
2 border below
15 box around
16 bar to left of paragraph
8
8
brcl
U8
border line style
0 single
1 thick
2 double
3 shadow
9
9
unused9
U8
reserved
10
A
nLvlAnm
U8
auto list numbering level (0 = nothing)
11
B
fNoLnn
U8
no line numbering for this para. (makes this an exception to the section
property of line numbering)
12
C
fSideBySide
U8
when 1, paragraph is a side by side paragraph
14
E
dxaRight
S16
indent from right margin (signed).
16
10
dxaLeft
S16
indent from left margin (signed)
18
12
dxaLeft1
S16
first line indent; signed number relative to dxaLeft
20
14
lspd
LSPD
line spacing descriptor
24
18
dyaBefore
U16
vertical spacing before paragraph (unsigned)
26
1A
dyaAfter
U16
vertical spacing after paragraph (unsigned)
28
1C
phe
PHE
height of current paragraph.
34
22
fAutoHyph
U8
when 1, text in paragraph may be auto hyphenated
35
23
fWidowControl
U8
when 1, Word will prevent widowed lines in this paragraph from being
placed at the beginning of a page
36
24
fInTable
U8
when 1, paragraph is contained in a table row
37
25
fTtp
U8
when 1, paragraph consists only of the row mark special character and
marks the end of a table row.
38
26
ptap
U16
used internally by Word
40
28
dxaAbs
S16
when positive, is the horizontal distance from the reference frame
specified by pap.pcHorz. 0 means paragraph is positioned at the left with
respect to the refence frame specified by pcHorz. Certain negative values
have special meaning:
-4 paragraph centered horizontally within reference frame
-8 paragraph adjusted right within reference frame
-12 paragraph placed immediately inside of reference frame
-16 paragraph placed immediately outside of reference frame
42
2A
dyaAbs
S16
when positive, is the vertical distance from the reference frame specified
by pap.pcVert. 0 means paragraph's y-position is unconstrained. . Certain
negative values have special meaning:
-4 paragraph is placed at top of reference frame
-8 paragraph is centered vertically within reference frame
-12 paragraph is placed at bottom of reference frame.
44
2C
dxaWidth
U16
when not == 0, paragraph is constrained to be dxaWidth wide, independent
of current margin or column setings.
46
2E
brcTop
BRC
specification for border above paragraph
48
30
brcLeft
BRC
specification for border to the left of paragraph
50
32
brcBottom
BRC
specification for border below paragraph
52
34
brcRight
BRC
specification for border to the right of paragraph
54
36
brcBetween
BRC
specification of border to place between conforming paragraphs. Two
paragraphs conform when both have borders, their brcLeft and brcRight matches,
their widths are the same, theyboth belong to tables or both do not, and
have the same absolute positioning props.
56
38
brcBar
BRC
specification of border to place on outside of text when facing pages
are to be displayed.
58
3A
dxaFromText
U16
horizontal distance to be maintained between an absolutely positioned
paragraph and any non-absolute positioned text
60
3C
dyaFromText
U16
vertical distance to be maintained between an absolutely positioned
paragraph and any non-absolute positioned text
62
3E
wr
U8
Wrap Code for absolute objects
63
3F
fLocked
U8
when 1, paragraph may not be editted
64
40
dyaHeight
U16
:15
7FFF
height of abs obj; 0 == Auto
fMinHeight
U16
:1
8000
0 = Exact, 1 = At Least
66
42
shd
SHD
shading
68
44
dcs
DCS
drop cap specifier (see DCS definition)
70
46
anld
ANLD
autonumber list descriptor (see ANLD definition)
122
7A
itbdMac
U16
number of tabs stops defined for paragraph. Must be >= 0 and <=
50.
124
7C
rgdxaTab
U16[itbdMac]
array of positions of itbdMac tab stops. itbdMax == 50
224
E0
rgtbd
U8[itbdMac]
array of itbdMac tab descriptors
Paragraph Property Exceptions (PAPX)
b10
b16
field
type
size
bitfield
comments
0
0
cw
U8
count of words of following data in PAPX. The first byte of a PAPX
is a count of words when PAPX is stored in an FKP. Count of words is used
because PAPX in an FKP can contain paragraph and table sprms.
0
0
cb
U8
count of bytes of following data in PAPX. The first byte of a PAPX
is a count of bytes when a PAPX is stored in a STSH. Count of bytes is
used because only paragraph sprms are stored in a STSH PAPX.
1
1
istd
U8
index to style descriiptor of the style from which the paragraph inherits
its paragraph and character properties
3
3
grpprl
U8[]
a list of the sprms that encode the differences between PAP for a paragraph
and the PAP for the style used. When a paragraph bound is also the end
of a table row, the PAPX also contains a list of table sprms which express
the difference of table row's TAP from an empty TAP that has been cleared
to zeros. The table sprms are recorded in the list after all of the paragraph
sprms.See Sprms definitions for list of sprms that are used in PAPXs.
Formatted Disk Page for PAPXs (PAPXFKP)
b10
b16
field
type
size
bitfield
comments
0
0
rgfc
FC[fkp.crun+1]
Each FC is the limit FC of a paragraph (ie. points to the next character
past an end of paragraph mark). There will be fkp.crun+1 recorded in the
FKP.
4*(fkp.crun+1)
rgbx
BX[fkp.crun]
an array of the BX data structure. The ith BX entry in the array describes
the paragraph beginning at fkp.rgfc[i]. The BX is a seven byte data structure.
The first byte of each BX is the word offset of thePAPX recorded for the
paragraph corresponding to this BX. ..If the byte stored is 0, this represents
a 1 line paragraph 15 pixels high with Normal style (stc == 0) whose column
width is 7980 dxas.
11*fkp.crun+4
unusedSpace
U8[]
As new runs/paragraphs are recorded in the FKP,unused space is reduced
by 11 if CHPX/PAPX is already recorded and is reduced by11+sizeof(PAPX)
if property is not already recorded.
511-sizeof(grppapx)
grppapx
U8[]
grppapx consists of all of the PAPXs stored in FKP concatenated end
to end. Each PAPX begins with a count of words which records its length
padded to a word boundary.
511
crun
U8
count of paragraphs for PAPX FKP.
Piece Descriptor (PCD)
b10
b16
field
type
size
bitfield
comment
0
0
fNoParaLast
U16
:1
0001
when 1, means that piece contains no end of paragraph marks.
fPaphNil
U16
:1
0002
used internally by Word
fCopied
U16
:1
0004
used internally by Word
unused0_3
U16
:5
fn
U16
:8
FF00
used internally by Word
2
2
fc
U32
file offset of beginning of piece. The size of the ithpiece can be
determined by subtracting rgcp[i] of the containing plcfpcd from its rgcp[i+1].
6
6
prm
PRM
contains either a single sprm or else an index number of the grpprl
which contains the sprms that modify the properties of the piece.
Page Descriptor (PGD)
b10
b16
field
type
size
bitfield
comments
0
0
unused0_0
U16
:5
001F
fGhost
U16
:2
0060
redefine fEmptyPage and fAllFtn. true when blank page or footnote only
page
unused0_7
U16
:9
FF10
0
0
fContinue
U16
:1
0001
1 only when footnote is continued from previous page
fUnk
U16
:1
0002
1 when page is dirty (ie. pagination cannot be trusted)
fRight
U16
:1
0004
1 when right hand side page
fPgnRestart
U16
:1
0008
1 when page number must be reset to 1.
fEmptyPage
U16
:1
0010
1 when section break forced page to be empty.
fAllFtn
U16
:1
0020
1 when page contains nothing but footnotes
fColOnly
U16
:1
0040
fTableBreaks
U16
:1
0080
fMarked
U16
:1
0100
fColumnBreaks
U16
:1
0200
fTableHeader
U16
:1
0400
fNewPage
U16
:1
0800
bkc
U16
:4
F000
section break code
2
2
lnn
U16
line number of first line, -1 if no line numbering
4
4
pgn
U16
page number as printed
Paragraph Height (PHE)
b10
b16
field
type
size
bitfield
comments
0
0
fSpare
U16
:1
0001
reserved
fUnk
U16
:1
0002
phe entry is invalid when == 1
fDiffLines
U16
:1
0004
when 1, total height of paragraph is known but lines in paragraph have
different heights.
unused0_3
U16
:5
00F8
reserved
clMac
U16
:8
FF00
when fDiffLines is 0 is number of lines in paragraph
2
2
dxaCol
U16
width of lines in paragraph
4
4
dylLine_dylHeight
U16
When fDiffLines is 0, this is the height of every line in paragraph.in pixels (dylLine).
When fDiffLines is 1, this is the total height in pixels of the paragraph (dylHeight).
dylHeight and dylLine overlap (shaheed).
Picture Descriptor (PICF)
b10
b16
field
type
size
bitfield
comments
0
0
lcb
U32
number of bytes in the PIC structure plus size of following picture
data which may be a Window's metafile, a bitmap, or the filename of a TIFF
file.
4
4
cbHeader
U16
number of bytes in the PIC (to allow for future expansion).
6
6
mfp
METAFILEPICT
If a Windows metafiles is stored immediatelly followingthe PIC structure,
the mfp is a Window's METAFILEPICT structure. When the data immediately
following the PIC is aTIFF filename, mfp.mm == 98. If a bitmap is stored
after the pic,mfp.mm == 99
When the PIC describes a bitmap, mfp.xExt is the width of the bitmap
in pixels and mfp.yExt is the height of the bitmap in pixels..
14
E
bm_rcWinMF
U8[14]
Window's bitmap structure when PIC describes a BITMAP. rect for window
origin and extents whenmetafile is stored -- ignored if 0
28
1C
dxaGoal
U16
horizontalmeasurement in twips of therectangle the picture should be
imaged within.
30
1E
dyaGoal
U16
verticalmeasurement in twips of therectangle the picture should be
imaged within. when scaling bitmaps, dxaGoal and dyaGoal may be ignored
if the operation would cause the bitmap to shrink or grow by anon -power-of-two
factor
32
20
mx
U16
horizontal scaling factor supplied by user expressedin .001% units.
34
22
my
U16
vertical scaling factor supplied by user expressed in .001% units.
for all of the Crop values, a positive measurement means the specified
border has been moved inward from its original setting and a negative measurement
means the borderhas been moved outward from its original setting.
36
24
dxaCropLeft
U16
the amount the picture has been cropped on the left in twips.
38
26
dyaCropTop
U16
the amount the picture has been cropped on the top in twips.
40
28
dxaCropRight
U16
the amount the picture has been cropped on the right in twips.
42
2A
dyaCropBottom
U16
the amount the picture has been cropped on the bottom in twips.
44
2C
brcl
U16
:4
000F
Obsolete, superseded by brcTop, etc.In WinWord 1.x, it was the type
of border to place around picture
0 single
1 thick
2 double
3 shadow
fFrameEmpty
U16
:1
0010
picture consists of a single frame
fBitmap
U16
:1
0020
==1, when picture is just a bitmap
fDrawHatch
U16
:1
0040
==1, when picture is an active OLE object
fError
U16
:1
0080
==1, when picture is just an error message
bpp
U16
:8
FF00
bits per pixel
0 unknown
1 monochrome
4
46
2E
brcTop
BRC
specification for border above picture
48
30
brcLeft
BRC
specification for border to the left of picture
50
32
brcBottom
BRC
specification for border below picture
52
34
brcRight
BRC
specification for border to the right of picture
54
36
dxaOrigin
U16
horizontal offset of hand annotation origin
56
38
dyaOrigin
U16
vertical offset of hand annotation origin
Plex of CPs stored in File (PLCF)
cbPLC (count of bytes of a PLC) is iMac(4 + cbStruct) + 4.
b10
b16
field
type
size
bitfield
comment
0
rgfc
FC[]
given that the size of PLCF is cb and the size of the structure stored
in plc is cbStruct, then the number of structure instances stored in PLCF,
iMac is given by (cb -4)/(4 + cbStruct) The number of FCs stored in the
PLCF will be iMac + 1.
4*(iMac+1)
rgstruct
struct[] array of some arbitrary structure.
Property Modifier(variant 1) (PRM)
The PRM has two variants. In the first variant, the PRM records
a single one or two byte sprm whose opcode is less than 128.
b10
b16
field
type
size
bitfield
comment
0
0
fComplex
U8
:1
01
set to 0 for variant 1
sprm
U8
:7
FE
sprm opcode
1
1
val
U8
sprm's second byte if necessary
Property Modifier(variant 2) (PRM2)
b10
b16
field
type
size
bitfield
comment
0
0
fComplex
U16
:1
0001
set to 1 for variant 2
igrpprl
U16
:15
FFFE
index to a grpprl stored in CLX portion of file.
Section Descriptor (SED)
b10
b16
field
type
size
bitfield
comment
0
0
fSwap
U16
:1
0001
runtime flag, indicates whether orientation should be changed before
printing. 0 indicates no change, 1 indicates orientation change.
fUnk
U16
:1
0002
used internally by Windows Word
fn
U16
:14
FFFC
used internally by Windows Word
2
2
fcSepx
U32
file offset to beginning of SEPX stored for section. If sed.fcSepx==
0xFFFFFFFF, the section properties for the section are equal to the standard
SEP (see SEP definition).
6
6
fnMpr
U16
used internally by Windows Word
8
8
fcMpr
U32
points to offset in FC space where the Macintosh Print Record for a
document created on a Mac will be stored
Section Properties (SEP)
b10
b16
field
type
size
bitfield
comments
0
0
bkc
U8
break code:
0 No break
1 New column
2 New page
3 Even page
4 Odd page
1
1
fTitlePage
U8
set to 1 when a title page is to be displayed
2
2
ccolM1
U16
number of columns in section - 1.
4
4
dxaColumns
U16
distance that will be maintained between columns
6
6
fAutoPgn
U8
only for Mac compatibility, used only during open, when 1, sep.dxaPgn
and sep.dyaPgn are valid page number locations
7
7
nfcPgn
U8
page number format code:
0Arabic numbering
1 Upper case Roman
2 Lower case Roman
3 Upper case Letter
4 Lower case letter
5 Ordinal
8
8
pgnStart
U16
user specified starting page number.
10
A
fUnlocked
U8
set to 1, when a section in a locked document is unlocked
11
B
cnsPgn
U8
chapter number separator for page numbers
12
C
fPgnRestart
U8
set to 1 when page numbering should be restarted at the beginning of
this section
13
D
fEndNote
U8
when 1, footnotes placed at end of section. When 0, footnotes are placed
at bottom of page.
14
E
lnc
U8
line numbering code:
0 Per page
1 Restart
2 Continue
15
F
grpfIhdt
U8
specification of which headers and footers are included in this section.
See explanation inHeaders and Footers topic.
16
10
nLnnMod
U16
if 0, no line numbering, otherwise this is the line number modulus
(e.g. if nLnnMod is 5, line numbers appear on line 5, 10, etc.)
18
12
dxaLnn
U16
distance of
20
14
dyaHdrTop
U16
y position of top header measured from top edge of page.
22
16
dyaHdrBottom
U16
y position of top header measured from top edge of page.
24
18
dxaPgn
U16
when fAutoPgn ==1, gives the x position of auto page number on page
in twips (for Mac compatabilty only)
26
1A
dyaPgn
U16
when fAutoPgn ==1, gives the y position of auto page number on page
in twips (for Mac compatabilty only)
28
1C
fLBetween
U8
when ==1, draw vertical lines between columns
29
1D
vjc
U8
vertical justification code
0 top justified
1 centered
2 fully justified vertically
3 bottom justified
30
1E
lnnMin
U16
beginning line number for section
32
20
dmOrientPage
U8
orientation of pages in that section.set to 0 when portrait, 1 when
landscape
33
21
iHeadingPgn
U8
heading number level for page number
34
22
xaPage
U16
width of page default value is 12240 twips
36
24
yaPage
U16
height of page default value is 15840 twips
38
26
dxaLeft
U16
left margin default value is 1800 twips
40
28
dxaRight
U16
right margin default value is 1800 twips
42
2A
dyaTop
S16
top margin default value is 1440 twips
44
2C
dyaBottom
S16
bottom margin default value is 1440 twips
46
2E
dzaGutter
U16
gutter width default value is 0 twips
48
30
dmBinFirst
U16
bin number supplied from windows printer driver indicating which bin
the first page of section will be printed.
50
32
dmBinOther
U16
bin number supplied from windows printer driver indicating which bin
the pages other than the first page of section will be printed.
52
34
dmPaperReq
U16
dmPaper code for form selected by user
54
36
fEvenlySpaced
U8
when == 1, columns are evenly spaced. Default value is 1.
55
37
unused55
U8
reserved
56
38
dxaColumnWidth
U16
used internally by Word
58
3A
rgdxaColumnWidthSpacing
U16[89]
array of 89 Xas that determine bounds of irregular width columns
236
EC
olstAnm
OLST
multilevel autonumbering list data (see OLST definition)
dyaPgn 720 twips (equivalent to .5 in)
dxaPgn 720 twips
fEndnote1 (True)
fEvenlySpaced 1 (True)
xaPage1 2240 twips
yaPage1 5840 twips
dyaHdrTop 720 twips
dyaHdrBottom 720twips
dmOrientPage 1 (portrait orientation)
Section Property Exceptions (SEPX)
b10
b16
field
type
size
bitfield
comment
0
0
cb
U8
count of bytes in remainder of SEPX.
1
1
grpprl
U8[]
list of sprms that encodes the differences between the properties of
a section and Word's default section properties.
Shading Descriptor (SHD)
The SHD is a substructure of the CHP and PAP.
b10
b16
field
type
size
bitfield
comments
0
0
icoFore
U16
:5
001F
foreground color (see chp.ico)
icoBack
U16
:5
03E0
background color (see chp.ico)
ipat
U16
:6
FC00
shading pattern (see ipat table below)
0 Automatic
1 Solid
2 5 Percent
3 10 Percent
4 20 Percent
5 25 Percent
6 30 Percent
7 40 Percent
8 50 Percent
9 60 Percent
10 70 Percent
11 75 Percent
12 80 Percent
13 90 Percent
14 Dark Horizontal
15 Dark Vertical
16 Dark Forward Diagonal
17 Dark Backward Diagonal
18 Dark Cross
19 Dark Diagonal Cross
20 Horizontal
21 Vertical
22 Forward Diagonal
23 Backward Diagonal
24 Cross
25 Diagonal Cross
35 2.5 Percent
36 7.5 Percent
37 12.5 Percent
38 15 Percent
39 17.5 Percent
40 22.5 Percent
41 27.5 Percent
42 32.5 Percent
43 35 Percent
44 37.5 Percent
45 42.5 Percent
46 45 Percent
47 47.5 Percent
48 52.5 Percent
49 55 Percent
50 57.5 Percent
51 62.5 Percent
52 65 Percent
53 67.5 Percent
54 72.5 Percent
55 77.5 Percent
56 82.5 Percent
57 85 Percent
58 87.5 Percent
59 92.5 Percent
60 95 Percent
61 97.5 Percent
62 97 Percent
STyleSHeet Information (STSHI)
The STSHI structure has the following format:
// STSHI: STyleSHeet Information, as stored in a file
// Note that new fields can be added to the STSHI without invalidating
// the file format, because it is stored preceded by it's length.
// When reading a STSHI from an older version, new fields will be zero.
b10
b16
field
type
size
bitfield
comments
0
0
cstd
U16
Count of styles in stylesheet
2
2
cbSTDBaseInFile
U16
Length of STD Base as stored in a file
4
4
fStdStylenamesWritten
U16
:1
0001
Are built-in stylenames stored?
unused4_2
U16
:15
FFFE
Spare flags
6
6
stiMaxWhenSaved
U16
Max sti known when this file was written
8
8
istdMaxFixedWhenSaved
U16
How many fixed-index istds are there?
10
0xA
nVerBuiltInNamesWhenSaved
U16
Current version of built-in stylenames
12
0xC
ftcStandardChpStsh
U16
ftc used by StandardChpStsh for this document
Table Properties (TAP)
b10
b16
field
type
size
bitfield
comments
0
0
jc
U16
justification code. specifies how table row should be justified within
its column.
0 left justify
1center
2right justify
3left and right justify
2
2
dxaGapHalf
U16
measures half of the white space that will be maintained between textin
adjacent columns of a table row. A dxaGapHalf width of white space will
be maintained on both sides of a column boundary.
4
4
dyaRowHeight
U16
when greater than 0. guarantees that the height of the table will be
at least dyaRowHeight high. When less than 0, guarantees that the height
of the table will be exactly absolute value of dyaRowHeight high.When 0,table
will be given a height large enough to representall of the text in all
of the cells of the table.
6
6
fCantSplit
U8
when 1, table row may not be split across page bounds
7
7
fTableHeader
U8
when 1, table row is to be used as the header of the table
8
8
tlp
TLP
table look specifier (see TLP definition)
12
C
fCaFull
U16
:1
0001
used internally by Word
fFirstRow
U16
:1
0002
used internally by Word
fLastRow
U16
:1
0004
used internally by Word
fOutline
U16
:1
0008
used internally by Word
unused12_4
U16
:12
FFE0
reserved
14
E
itcMac
U16
count of cells defined for this row. ItcMac must be >= 0 and less than
or equal to 32.
16
10
dxaAdjust
U16
used internally by Word
18
12
rgdxaCenter
U16[itcMac + 1]
rgdxaCenter[0] is the left boundary of cell 0 measured relative to
margin.. rgdxaCenter[tap.itcMac - 1] is left boundary of last cell. rgdxaCenter[tap.itcMac]
is right boundary of last cell.
84
54
rgtc
TC[itcMac]
array of table cell descriptors
404
194
rgshd
SHD[itcMac]
array of cell shades
468
1D4
rgbrcTable
BRC[6]
array of border defaults for cells
Tab Descriptor (TBD)
The TBD is a substructure of the PAP.
b10
b16
field
type
size
bitfield
comments
0
0
jc
U8
:3
07
justification code
0 left tab
1 centered tab
2 right tab
3 decimal tab
4 bar
tlc
U8
:3
38
tab leader code
0 no leader
1 dotted leader
2 hyphenated leader
3 single line leader
4 heavy line leader
unused0_6
U8
:2
C0
reserved
Table Cell Descriptors (TC)
b10
b16
field
type
size
bitfield
comments
0
0
fFirstMerged
U16
:1
0001
set to 1 when cell is first cell of a range of cells that have been
merged. When a cell is merged, the display areas of the merged cells are
consolidated and the text within the cells is interpreted as belonging
to one text stream for purposes of calculating line breaks.
fMerged
U16
:1
0002
set to 1 when cell has been merged with preceding cell.
fUnused
U16
:14
FFFC
reserved
2
2
brcTop
BRC
specification of the top border of a table cell
4
4
brcLeft
BRC
specification of left border of table row
6
6
brcBottom
BRC
specification of bottom border of table row
8
8
brcRight
BRC
specification f right border of table row.
Table Autoformat Look sPecifier (TLP)
b10
b16
field
type
size
bitfield
comments
0
0
itl
U16
index to Word's table of table looks
2
2
fBorders
U16
:1
0001
when ==1, use the border properties from the selected table look
fShading
U16
:1
0002
when ==1, use the shading properties from the selected table look
fFont
U16
:1
0004
when ==1, use the font from the selected table look
fColor
U16
:1
0008
when ==1, use the color from the selected table look
fBestFit
U16
:1
0010
when ==1, do best fit from the selected table look
fHdrRows
U16
:1
0020
when ==1, apply properties from the selected table look to the header
rows in the table
fLastRow
U16
:1
0040
when ==1, apply properties from the selected table look to the last
row in the table
fHdrCols
U16
:1
0080
when ==1, apply properties from the selected table look to the header
columns ofthe table
fLastCol
U16
:1
0100
when ==1, apply properties from the selected table look to the last
column ofthe table
unused2_9
U16
:7
FE00
unused
Appendix A - Changes from version 1.x to 2.0
Changes to Structures
BRC
The previously defined BRC was renamed BRC10, and a new BRC was defined
with new fields and field names.
CHP
The size of the CHP changed from 16 to 32 bits, with some spare bits added.
DOP
fWide removed
DTTM
FIB
Password Protection added
_OBJHEADER
PAP
Frames
PIC
(at the end of the structure before the variable length array )
BRC
SEP
removed fAutoPgn changed to bUnused1
DOP to SEP
Page Dimensions & Margin stuff
SED
fSpare (reserved) changed to fSwap (runtime flag for landscape/portrait
orientation)
TAP
wSpare1
TAP
Shading
TC
Border
Other changes
sttbfAssoc
Indices to the associated string table and descriptions of strings were
added.
sttbfFn
The fonts written in the font string table and the indexing were changed.
REVIEW DavidLu
FonT Code Link field (FTCL)
b10
b16
field
type
size
bitfield
comments
12
b
fEmbedLoad
U16
:1
0001
1 if embedded fonts were stored in the file.
wLicense
U16
:3
000e
Licensing permissions
0 font is installable
4 font is print preview
8 font is editable
Index of Changes from version 1.x to 2.0
_OBJHEADER, 44Autosave source, 11, 13