1 /*************************************************************************
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 * Copyright 2008 by Sun Microsystems, Inc.
7 * OpenOffice.org - a multi-platform office productivity suite
9 * $RCSfile: w1struct.hxx,v $
12 * This file is part of OpenOffice.org.
14 * OpenOffice.org is free software: you can redistribute it and/or modify
15 * it under the terms of the GNU Lesser General Public License version 3
16 * only, as published by the Free Software Foundation.
18 * OpenOffice.org is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU Lesser General Public License version 3 for more details
22 * (a copy is included in the LICENSE file that accompanied this code).
24 * You should have received a copy of the GNU Lesser General Public License
25 * version 3 along with OpenOffice.org. If not, see
26 * <http://www.openoffice.org/license.html>
27 * for a copy of the LGPLv3 License.
29 ************************************************************************/
36 #include <tools/solar.h>
41 struct W1_FIB
/////////////////////////////////////////////////////////
43 SVBT16 wIdent
;// 0x0 int magic number
45 return SVBT16ToShort(wIdent
); }
46 SVBT16 nFib
;// 0x2 FIB version written
48 return SVBT16ToShort(nFib
); }
49 SVBT16 nProduct
;// 0x4 product version written by
50 USHORT
nProductGet() {
51 return SVBT16ToShort(nProduct
); }
52 SVBT16 nlocale
;// 0x6 language stamp---localized version;
54 return SVBT16ToShort(nlocale
); }
57 return SVBT16ToShort(pnNext
); }
60 return SVBT16ToShort(fFlags
); }
61 // SVBT16 fDot :1;// 0xa 0001
63 return 0 != ((fFlagsGet() >> 0) & 1); }
64 // SVBT16 fGlsy :1;// 0002
66 return 0 != ((fFlagsGet() >> 1) & 1); }
67 // SVBT16 fComplex :1;// 0004 when 1, file is in complex, fast-saved format.
69 return 0 != ((fFlagsGet() >> 2) & 1); }
70 // SVBT16 fHasPic :1;// 0008 file contains 1 or more pictures
72 return 0 != ((fFlagsGet() >> 3) & 1); }
73 // SVBT16 cQuickSaves :4;// 00F0 count of times file was quicksaved
74 USHORT
cQuickSavesGet() {
75 return (USHORT
)((fFlagsGet() >> 4) & 0xf); }
76 // SVBT16 u1 :8;// FF00 unused
78 return (USHORT
)((fFlagsGet() >> 8) & 0xff); }
79 SVBT16 nFibBack
;// 0xc
80 USHORT
nFibBackGet() {
81 return SVBT16ToShort(nFibBack
); }
82 SVBT16 u2
[5];// 0xe reserved
83 SVBT32 fcMin
;// 0x18 file offset of first character of text
85 return SVBT32ToUInt32(fcMin
); }
86 SVBT32 fcMac
;// 0x1c file offset of last character of text + 1
88 return SVBT32ToUInt32(fcMac
); }
89 SVBT32 cbMac
;// 0x20 file offset of last byte written to file + 1.
91 return SVBT32ToUInt32(cbMac
); }
92 SVBT32 u4
[4];// 0x24 reserved
93 SVBT32 ccpText
;// 0x34 length of main document text stream
95 return SVBT32ToUInt32(ccpText
); }
96 SVBT32 ccpFtn
;// 0x38 length of footnote subdocument text stream
98 return SVBT32ToUInt32(ccpFtn
); }
99 SVBT32 ccpHdd
;// 0x3c length of header subdocument text stream
101 return SVBT32ToUInt32(ccpHdd
); }
102 SVBT32 ccpMcr
;// 0x40 length of macro subdocument text stream
104 return SVBT32ToUInt32(ccpMcr
); }
105 SVBT32 ccpAtn
;// 0x44 length of annotation subdocument text stream
107 return SVBT32ToUInt32(ccpAtn
); }
108 SVBT32 cp5
[4];// 0x48
109 SVBT32 fcStshfOrig
;// 0x58 file offset of original allocation for STSH in file
110 ULONG
fcStshfOrigGet() {
111 return SVBT32ToUInt32(fcStshfOrig
); }
112 SVBT16 cbStshfOrig
;// 0x5c count of bytes of original STSH allocation
113 USHORT
cbStshfOrigGet() {
114 return SVBT16ToShort(cbStshfOrig
); }
115 SVBT32 fcStshf
;// 0x5e file offset of STSH in file.
117 return SVBT32ToUInt32(fcStshf
); }
118 SVBT16 cbStshf
;// 0x62 count of bytes of current STSH allocation
119 USHORT
cbStshfGet() {
120 return SVBT16ToShort(cbStshf
); }
121 SVBT32 fcPlcffndRef
;// 0x64 file offset of footnote reference PLC.
122 ULONG
fcPlcffndRefGet() {
123 return SVBT32ToUInt32(fcPlcffndRef
); }
124 SVBT16 cbPlcffndRef
;// 0x68 count of bytes of footnote reference PLC
125 USHORT
cbPlcffndRefGet() {
126 return SVBT16ToShort(cbPlcffndRef
); }
127 // == 0 if no footnotes defined in document.
129 SVBT32 fcPlcffndTxt
;// 0x6a file offset of footnote text PLC.
130 ULONG
fcPlcffndTxtGet() {
131 return SVBT32ToUInt32(fcPlcffndTxt
); }
132 SVBT16 cbPlcffndTxt
;// 0x6e count of bytes of footnote text PLC.
133 USHORT
cbPlcffndTxtGet() {
134 return SVBT16ToShort(cbPlcffndTxt
); }
135 // == 0 if no footnotes defined in document
137 SVBT32 fcPlcfandRef
;// 0x70 file offset of annotation reference PLC.
138 ULONG
fcPlcfandRefGet() {
139 return SVBT32ToUInt32(fcPlcfandRef
); }
140 SVBT16 cbPlcfandRef
;// 0x74 count of bytes of annotation reference PLC.
141 USHORT
cbPlcfandRefGet() {
142 return SVBT16ToShort(cbPlcfandRef
); }
144 SVBT32 fcPlcfandTxt
;// 0x76 file offset of annotation text PLC.
145 ULONG
fcPlcfandTxtGet() {
146 return SVBT32ToUInt32(fcPlcfandTxt
); }
147 SVBT16 cbPlcfandTxt
;// 0x7a count of bytes of the annotation text PLC
148 USHORT
cbPlcfandTxtGet() {
149 return SVBT16ToShort(cbPlcfandTxt
); }
151 SVBT32 fcPlcfsed
;// 8x7c file offset of section descriptor PLC.
152 ULONG
fcPlcfsedGet() {
153 return SVBT32ToUInt32(fcPlcfsed
); }
154 SVBT16 cbPlcfsed
;// 0x80 count of bytes of section descriptor PLC.
155 USHORT
cbPlcfsedGet() {
156 return SVBT16ToShort(cbPlcfsed
); }
158 SVBT32 fcPlcfpgd
;// 0x82 file offset of paragraph descriptor PLC
159 ULONG
fcPlcfpgdGet() {
160 return SVBT32ToUInt32(fcPlcfpgd
); }
161 SVBT16 cbPlcfpgd
;// 0x86 count of bytes of paragraph descriptor PLC.
162 USHORT
cbPlcfpgdGet() {
163 return SVBT16ToShort(cbPlcfpgd
); }
164 // ==0 if file was never repaginated
165 // Should not be written by third party creators
167 SVBT32 fcPlcfphe
;// 0x88 file offset of PLC of paragraph heights.
168 ULONG
fcPlcfpheGet() {
169 return SVBT32ToUInt32(fcPlcfphe
); }
170 SVBT16 cbPlcfphe
;// 0x8c count of bytes of paragraph height PLC.
171 USHORT
cbPlcfpheGet() {
172 return SVBT16ToShort(cbPlcfphe
); }
173 // ==0 when file is non-complex.
175 SVBT32 fcSttbfglsy
;// 0x8e file offset of glossary string table.
176 ULONG
fcSttbfglsyGet() {
177 return SVBT32ToUInt32(fcSttbfglsy
); }
178 SVBT16 cbSttbfglsy
;// 0x92 count of bytes of glossary string table.
179 USHORT
cbSttbfglsyGet() {
180 return SVBT16ToShort(cbSttbfglsy
); }
181 // == 0 for non-glossary documents.
182 // !=0 for glossary documents.
184 SVBT32 fcPlcfglsy
;// 0x94 file offset of glossary PLC.
185 ULONG
fcPlcfglsyGet() {
186 return SVBT32ToUInt32(fcPlcfglsy
); }
187 SVBT16 cbPlcfglsy
;// 0x98 count of bytes of glossary PLC.
188 USHORT
cbPlcfglsyGet() {
189 return SVBT16ToShort(cbPlcfglsy
); }
190 // == 0 for non-glossary documents.
191 // !=0 for glossary documents.
193 SVBT32 fcPlcfhdd
;// 0x9a byte offset of header PLC.
194 ULONG
fcPlcfhddGet() {
195 return SVBT32ToUInt32(fcPlcfhdd
); }
196 SVBT16 cbPlcfhdd
;// 0x9e count of bytes of header PLC.
197 USHORT
cbPlcfhddGet() {
198 return SVBT16ToShort(cbPlcfhdd
); }
199 // == 0 if document contains no headers
201 SVBT32 fcPlcfbteChpx
;// 0xa0 file offset of character property bin table.PLC.
202 ULONG
fcPlcfbteChpxGet() {
203 return SVBT32ToUInt32(fcPlcfbteChpx
); }
204 SVBT16 cbPlcfbteChpx
;// 0xa4 count of bytes of character property bin table PLC.
205 USHORT
cbPlcfbteChpxGet() {
206 return SVBT16ToShort(cbPlcfbteChpx
); }
208 SVBT32 fcPlcfbtePapx
;// 0xa6 file offset of paragraph property bin table.PLC.
209 ULONG
fcPlcfbtePapxGet() {
210 return SVBT32ToUInt32(fcPlcfbtePapx
); }
211 SVBT16 cbPlcfbtePapx
;// 0xaa count of bytes of paragraph property bin table PLC.
212 USHORT
cbPlcfbtePapxGet() {
213 return SVBT16ToShort(cbPlcfbtePapx
); }
215 SVBT32 fcPlcfsea
;// 0xac file offset of PLC reserved for private use. The SEA is 6 bytes long.
216 ULONG
fcPlcfseaGet() {
217 return SVBT32ToUInt32(fcPlcfsea
); }
218 SVBT16 cbPlcfsea
;// 0xb0 count of bytes of private use PLC.
219 USHORT
cbPlcfseaGet() {
220 return SVBT16ToShort(cbPlcfsea
); }
222 SVBT32 fcSttbfffn
;// 0xb2 file offset of font information STTBF. See the FFN file structure definition.
223 ULONG
fcSttbfffnGet() {
224 return SVBT32ToUInt32(fcSttbfffn
); }
225 SVBT16 cbSttbfffn
;// 0xb6 count of bytes in sttbfffn.
226 USHORT
cbSttbfffnGet() {
227 return SVBT16ToShort(cbSttbfffn
); }
229 SVBT32 fcPlcffldMom
;// 0xb8 offset in doc stream to the PLC of field positions in the main document.
230 ULONG
fcPlcffldMomGet() {
231 return SVBT32ToUInt32(fcPlcffldMom
); }
232 SVBT16 cbPlcffldMom
;// 0xbc
233 USHORT
cbPlcffldMomGet() {
234 return SVBT16ToShort(cbPlcffldMom
); }
236 SVBT32 fcPlcffldHdr
;// 0xbe offset in doc stream to the PLC of field positions in the header subdocument.
237 ULONG
fcPlcffldHdrGet() {
238 return SVBT32ToUInt32(fcPlcffldHdr
); }
239 SVBT16 cbPlcffldHdr
;// 0xc2
240 USHORT
cbPlcffldHdrGet() {
241 return SVBT16ToShort(cbPlcffldHdr
); }
243 SVBT32 fcPlcffldFtn
;// 0xc4 offset in doc stream to the PLC of field positions in the footnote subdocument.
244 ULONG
fcPlcffldFtnGet() {
245 return SVBT32ToUInt32(fcPlcffldFtn
); }
246 SVBT16 cbPlcffldFtn
;// 0xc8
247 USHORT
cbPlcffldFtnGet() {
248 return SVBT16ToShort(cbPlcffldFtn
); }
250 SVBT32 fcPlcffldAtn
;// 0xca offset in doc stream to the PLC of field positions in the annotation subdocument.
251 ULONG
fcPlcffldAtnGet() {
252 return SVBT32ToUInt32(fcPlcffldAtn
); }
253 SVBT16 cbPlcffldAtn
;// 0xce
254 USHORT
cbPlcffldAtnGet() {
255 return SVBT16ToShort(cbPlcffldAtn
); }
257 SVBT32 fcPlcffldMcr
;// 0xd0 offset in doc stream to the PLC of field positions in the macro subdocument.
258 ULONG
fcPlcffldMcrGet() {
259 return SVBT32ToUInt32(fcPlcffldMcr
); }
260 SVBT16 cbPlcffldMcr
;// 0xd4
261 USHORT
cbPlcffldMcrGet() {
262 return SVBT16ToShort(cbPlcffldMcr
); }
264 SVBT32 fcSttbfbkmk
;// 0xd6 offset in document stream of the STTBF that records bookmark names in the main document
265 ULONG
fcSttbfbkmkGet() {
266 return SVBT32ToUInt32(fcSttbfbkmk
); }
267 SVBT16 cbSttbfbkmk
;// 0xda
268 USHORT
cbSttbfbkmkGet() {
269 return SVBT16ToShort(cbSttbfbkmk
); }
271 SVBT32 fcPlcfbkf
;// 0xdc offset in document stream of the PLCF that records the beginning CP offsets of bookmarks in the main document. See BKF
272 ULONG
fcPlcfbkfGet() {
273 return SVBT32ToUInt32(fcPlcfbkf
); }
274 SVBT16 cbPlcfbkf
;// 0xe0
275 USHORT
cbPlcfbkfGet() {
276 return SVBT16ToShort(cbPlcfbkf
); }
278 SVBT32 fcPlcfbkl
;// 0xe2 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.
279 ULONG
fcPlcfbklGet() {
280 return SVBT32ToUInt32(fcPlcfbkl
); }
281 SVBT16 cbPlcfbkl
;// 0xe6 SVBT16
282 USHORT
cbPlcfbklGet() {
283 return SVBT16ToShort(cbPlcfbkl
); }
285 SVBT32 fcCmds
;// 0xe8 FC
287 return SVBT32ToUInt32(fcCmds
); }
288 SVBT16 cbCmds
;// 0xec
290 return SVBT16ToShort(cbCmds
); }
292 SVBT32 fcPlcmcr
;// 0xee FC
293 ULONG
fcPlcmcrGet() {
294 return SVBT32ToUInt32(fcPlcmcr
); }
295 SVBT16 cbPlcmcr
;// 0xf2
296 USHORT
cbPlcmcrGet() {
297 return SVBT16ToShort(cbPlcmcr
); }
299 SVBT32 fcSttbfmcr
;// 0xf4 FC
300 ULONG
fcSttbfmcrGet() {
301 return SVBT32ToUInt32(fcSttbfmcr
); }
302 SVBT16 cbSttbfmcr
;// 0xf8
303 USHORT
cbSttbfmcrGet() {
304 return SVBT16ToShort(cbSttbfmcr
); }
306 SVBT32 fcPrEnv
;// 0xfa
308 return SVBT32ToUInt32(fcPrEnv
); }
309 SVBT16 cbPrEnv
;// 0xfe
310 USHORT
cbPrEnvGet() {
311 return SVBT16ToShort(cbPrEnv
); }
313 SVBT32 fcWss
;// 0x100 file offset of Window Save State data structure. See WSS.
315 return SVBT32ToUInt32(fcWss
); }
316 SVBT16 cbWss
;// 0x100 count of bytes of WSS. ==0 if unable to store the window state.
318 return SVBT16ToShort(cbWss
); }
320 SVBT32 fcDop
;// 0x106 file offset of document property data structure.
322 return SVBT32ToUInt32(fcDop
); }
323 SVBT16 cbDop
;// 0x10a count of bytes of document properties.
325 return SVBT16ToShort(cbDop
); }
328 SVBT32 fcSttbfAssoc
;// 0x10c offset to STTBF of associated strings. See STTBFASSOC.
329 ULONG
fcSttbfAssocGet() {
330 return SVBT32ToUInt32(fcSttbfAssoc
); }
331 SVBT16 cbSttbfAssoc
;// 0x110
332 USHORT
cbSttbfAssocGet() {
333 return SVBT16ToShort(cbSttbfAssoc
); }
335 SVBT32 fcClx
;// 0x112 file offset of beginning of information for complex files.
337 return SVBT32ToUInt32(fcClx
); }
338 SVBT16 cbClx
;// 0x116 count of bytes of complex file information. 0 if file is non-complex.
340 return SVBT16ToShort(cbClx
); }
342 SVBT32 fcPlcfpgdFtn
;// 0x118 file offset of page descriptor PLC for footnote subdocument.
343 ULONG
fcPlcfpgdFtnGet() {
344 return SVBT32ToUInt32(fcPlcfpgdFtn
); }
345 SVBT16 cbPlcfpgdFtn
;// 0x11C count of bytes of page descriptor PLC for footnote subdocument.
346 USHORT
cbPlcfpgdFtnGet() {
347 return SVBT16ToShort(cbPlcfpgdFtn
); }
348 // ==0 if document has not been paginated. The length of the PGD is 8 bytes.
350 SVBT32 fcSpare1
;// 0x11e file offset of the name of the original file.
351 ULONG
fcSpare1Get() {
352 return SVBT32ToUInt32(fcSpare1
); }
353 SVBT16 cbSpare1
;// 0x122 count of bytes of the name of the original file.
354 USHORT
cbSpare1Get() {
355 return SVBT16ToShort(cbSpare1
); }
356 SVBT32 fcSpare2
;// 0x124 file offset of the name of the original file.
357 ULONG
fcSpare2Get() {
358 return SVBT32ToUInt32(fcSpare2
); }
359 SVBT16 cbSpare2
;// 0x128 count of bytes of the name of the original file.
360 USHORT
cbSpare2Get() {
361 return SVBT16ToShort(cbSpare2
); }
362 SVBT32 fcSpare3
;// 0x12a file offset of the name of the original file.
363 ULONG
fcSpare3Get() {
364 return SVBT32ToUInt32(fcSpare3
); }
365 SVBT16 cbSpare3
;// 0x12e count of bytes of the name of the original file.
366 USHORT
cbSpare3Get() {
367 return SVBT16ToShort(cbSpare3
); }
368 SVBT32 fcSpare4
;// 0x130 file offset of the name of the original file.
369 ULONG
fcSpare4Get() {
370 return SVBT32ToUInt32(fcSpare4
); }
371 SVBT16 cbSpare4
;// 0x134 count of bytes of the name of the original file.
372 USHORT
cbSpare4Get() {
373 return SVBT16ToShort(cbSpare4
); }
375 SVBT16 cpnBteChp
;// 0x18E count of CHPX FKPs recorded in file. In non-complex files if the number of
376 USHORT
cpnBteChpGet() {
377 return SVBT16ToShort(cpnBteChp
); }
378 // entries in the plcfbteChpx is less than this, the plcfbteChpx is incomplete.
379 SVBT16 cpnBtePap
;// 0x190 count of PAPX FKPs recorded in file. In non-complex files if the number of
380 USHORT
cpnBtePapGet() {
381 return SVBT16ToShort(cpnBtePap
); }
382 // entries in the plcfbtePapx is less than this, the plcfbtePapx is incomplete.
385 struct W1_DOP
///////////////////////////////////// Document Properties
389 return SVBT16ToShort(fFlags
); }
390 // SVBT16 fFacingPages : 1;// 1 when facing pages should be printed
391 BOOL
fFacingPagesGet() {
392 return 0 != ((fFlagsGet() >> 0) & 1); }
393 // SVBT16 fWidowControl : 1;// 1 when widow control is in effect. 0 when widow control disabled.
394 BOOL
fWidowControlGet() {
395 return 0 != ((fFlagsGet() >> 1) & 1); }
396 // SVBT16 : 3;// unused
397 // SVBT16 fpc : 2;// 1 footnote position code: 0 as endnotes, 1 at bottom of page, 2 immediately beneath text
399 return (USHORT
)((fFlagsGet() >> 5) & 3); }
400 // SVBT16 fWide : 1;// Landscape
402 return 0 != ((fFlagsGet() >> 7) & 1); }
403 // SVBT16 grpfIhdt : 8;// 0 specification of document headers and footers. See explanation under Headers and Footers topic.
404 USHORT
grpfIhdtGet() {
405 return (USHORT
)((fFlagsGet() >> 8) & 0xff); }
407 USHORT
fFtnFlagsGet() {
408 return SVBT16ToShort(fFtnFlags
); }
409 // SVBT16 fFtnRestart : 1;
410 BOOL
fFtnRestartGet() {
411 return 0 != ((fFtnFlagsGet() >> 0) & 1); }
412 // SVBT16 nFtn : 15;// 1 initial footnote number for document
414 return (USHORT
)((fFtnFlagsGet() >> 1) & 0x7fff); }
416 USHORT
fRvsFlagsGet() {
417 return SVBT16ToShort(fRvsFlags
); }
418 // SVBT16 irmBar : 8;
420 return (USHORT
)((fRvsFlagsGet() >> 0) & 0xff); }
421 // SVBT16 irmProps : 7;
422 USHORT
irmPropsGet() {
423 return (USHORT
)((fRvsFlagsGet() >> 8) & 0x7f); }
424 // SVBT16 fRevMarking : 1;// when 1, Word will mark revisions as the document is edited
425 BOOL
fRevMarkingGet() {
426 return 0 != ((fRvsFlagsGet() >> 15) & 1); }
428 USHORT
fSveFlagsGet() {
429 return SVBT16ToShort(fSveFlags
); }
430 // SVBT16 fBackup : 1;// always make backup when document saved when 1.
432 return 0 != ((fSveFlagsGet() >> 0) & 1); }
433 // SVBT16 fExactCWords : 1;
434 BOOL
fExactCWordsGet() {
435 return 0 != ((fSveFlagsGet() >> 1) & 1); }
436 // SVBT16 fPagHidden : 1;//
437 BOOL
fPagHiddenGet() {
438 return 0 != ((fSveFlagsGet() >> 2) & 1); }
439 // SVBT16 fPagResults : 1;
440 BOOL
fPagResultsGet() {
441 return 0 != ((fSveFlagsGet() >> 3) & 1); }
442 // SVBT16 fLockAtn : 1;// when 1, annotations are locked for editing
444 return 0 != ((fSveFlagsGet() >> 4) & 1); }
445 // SVBT16 fMirrorMargins : 1;// swap margins on left/right pages when 1.
446 BOOL
fMirrorMarginsGet() {
447 return 0 != ((fSveFlagsGet() >> 5) & 1); }
448 // SVBT16 : 10;// unused
450 USHORT
fSparesGet() {
451 return SVBT16ToShort(fSpares
); }
454 return SVBT16ToShort(yaPage
); }
457 return SVBT16ToShort(xaPage
); }
460 return SVBT16ToShort(dyaTop
); }
462 USHORT
dxaLeftGet() {
463 return SVBT16ToShort(dxaLeft
); }
465 USHORT
dyaBottomGet() {
466 return SVBT16ToShort(dyaBottom
); }
468 USHORT
dxaRightGet() {
469 return SVBT16ToShort(dxaRight
); }
471 USHORT
dxaGutterGet() {
472 return SVBT16ToShort(dxaGutter
); }
473 SVBT16 dxaTab
;// 720 twips default tab width
475 return SVBT16ToShort(dxaTab
); }
478 return SVBT16ToShort(wSpare
); }
479 SVBT16 dxaHotZ
;// width of hyphenation hot zone measured in twips
480 USHORT
dxaHotZGet() {
481 return SVBT16ToShort(dxaHotZ
); }
482 SVBT16 rgwSpare
[2];// reserved
483 SVBT32 dttmCreated
;// DTTM date and time document was created
484 ULONG
dttmCreatedGet() {
485 return SVBT32ToUInt32(dttmCreated
); }
486 SVBT32 dttmRevised
;// DTTM date and time document was last revised
487 ULONG
dttmRevisedGet() {
488 return SVBT32ToUInt32(dttmRevised
); }
489 SVBT32 dttmLastPrint
;// DTTM date and time document was last printed
490 ULONG
dttmLastPrintGet() {
491 return SVBT32ToUInt32(dttmLastPrint
); }
492 SVBT16 nRevision
;// number of times document has been revised since its creation
493 USHORT
nRevisionGet() {
494 return SVBT16ToShort(nRevision
); }
495 SVBT32 tmEdited
;// time document was last edited
496 ULONG
tmEditedGet() {
497 return SVBT32ToUInt32(tmEdited
); }
498 SVBT32 cWords
;// count of words tallied by last Word Count execution
500 return SVBT32ToUInt32(cWords
); }
501 SVBT32 cCh
;// count of characters tallied by last Word Count execution
503 return SVBT32ToUInt32(cCh
); }
504 SVBT16 cPg
;// count of pages tallied by last Word Count execution
506 return SVBT16ToShort(cPg
); }
507 SVBT16 rgwSpareDocSum
[2];
511 struct W1_CHP
/////////////////////////////////////////////////////////
514 SVBT16 ftc
;// Font Code
515 SVBT8 hps
;// Font size in half points
516 SVBT8 hpsPos
;// Sub/Superscript ( signed number, 0 = normal )
518 SVBT32 fcPic
;// not stored in File
519 SVBT8 fnPic
;// internal
520 SVBT16 hpsLargeChp
;// ???
522 W1_CHP() { memset( this, 0, sizeof( *this)); }
524 USHORT
fCharGet() { return SVBT16ToShort(fChar
); }
525 void fCharSet(USHORT n
) { ShortToSVBT16(n
, fChar
); }
526 BOOL
fBoldGet() { return 0 != ((fCharGet() >> 0) & 1); }
527 void fBoldSet(BOOL b
) { fCharSet( ( fCharGet() & 0xfffe ) | ( b
<< 0 ) ); }
528 BOOL
fItalicGet() { return 0 != ((fCharGet() >> 1) & 1); }
529 void fItalicSet(BOOL b
) { fCharSet( ( fCharGet() & 0xfffd ) | ( b
<< 1 ) ); }
530 BOOL
fStrikeGet() { return 0 != ((fCharGet() >> 2) & 1); }
531 BOOL
fOutlineGet() { return 0 != ((fCharGet() >> 3) & 1); }
532 BOOL
fFldVanishGet() { return 0 != ((fCharGet() >> 4) & 1); }
533 BOOL
fSmallCapsGet() { return 0 != ((fCharGet() >> 5) & 1); }
534 BOOL
fCapsGet() { return 0 != ((fCharGet() >> 6) & 1); }
535 BOOL
fVanishGet() { return 0 != ((fCharGet() >> 7) & 1); }
536 BOOL
fRMarkGet() { return 0 != ((fCharGet() >> 8) & 1); }
537 BOOL
fSpecGet() { return 0 != ((fCharGet() >> 9) & 1); }
538 BOOL
fsIcoGet() { return 0 != ((fCharGet() >> 10) & 1); }
539 BOOL
fsFtcGet() { return 0 != ((fCharGet() >> 11) & 1); }
540 void fsFtcSet(BOOL b
) { fCharSet( ( fCharGet() & 0xf7ff ) | ( b
<< 11 ) ); }
541 BOOL
fsHpsGet() { return 0 != ((fCharGet() >> 12) & 1); }
542 void fsHpsSet(BOOL b
) { fCharSet( ( fCharGet() & 0xefff ) | ( b
<< 12 ) ); }
543 BOOL
fsKulGet() { return 0 != ((fCharGet() >> 13) & 1); }
544 void fsKulSet(BOOL b
) { fCharSet( ( fCharGet() & 0xdfff ) | ( b
<< 13 ) ); }
545 BOOL
fsPosGet() { return 0 != ((fCharGet() >> 14) & 1); }
546 BOOL
fsSpaceGet() { return 0 != ((fCharGet() >> 15) & 1); }
547 // SVBT16 fBold :1;// 1 == opposite boldness of style
548 // SVBT16 fItalic :1;// 1 == opposite of style
549 // SVBT16 fStrike :1;// 1 == opposite of style
550 // SVBT16 fOutline :1;// 1 == opposite of style
551 // SVBT16 fFldVanish :1;// 1 == opposite of style
552 // SVBT16 fSmallCaps :1;// 1 == opposite of style
553 // SVBT16 fCaps :1;// 1 == opposite of style
554 // SVBT16 fVanish :1;// 1 == opposite of style
555 // SVBT16 fRMark :1;// ???
556 // SVBT16 fSpec :1;// 1 == opposite of style
557 // SVBT16 fsIco :1;// 1 == Color (ico) different to style
558 // SVBT16 fsFtc :1;// 1 == FontCode (ftc) different to style
559 // SVBT16 fsHps :1;// 1 == FontSize (hps) different to style
560 // SVBT16 fsKul :1;// 1 == Underline Code (kul) different to style
561 // SVBT16 fsPos :1;// 1 == Char position (hpsPos) different to style
562 // SVBT16 fsSpace :1;// 1 == Char Spacing (qpsSpace) different to style
564 USHORT
ftcGet() { return SVBT16ToShort(ftc
); }
565 void ftcSet(USHORT n
) { ShortToSVBT16(n
, ftc
); }
566 void hpsSet(BYTE n
) { ByteToSVBT8(n
, hps
); }
567 BYTE
hpsGet() { return SVBT8ToByte(hps
); }
569 BYTE
hpsPosGet() { return SVBT8ToByte(hpsPos
); }
570 USHORT
fTextGet() { return SVBT16ToShort(fText
); }
571 void fTextSet(USHORT n
) { ShortToSVBT16(n
, fText
); }
572 USHORT
qpsSpaceGet() { return (USHORT
)((fTextGet() >> 0) & 0x3f); }
573 USHORT
wSpare2Get() { return (USHORT
)((fTextGet() >> 6) & 3); }
574 USHORT
icoGet() { return (USHORT
)((fTextGet() >> 8) & 0xf); }
575 USHORT
kulGet() { return (USHORT
)((fTextGet() >> 12) & 7); }
576 void kulSet(USHORT n
) { fTextSet( ( fTextGet() & 0x8fff ) | ( ( n
& 7 ) << 12 ) ); }
577 BOOL
fSysVanishGet() { return 0 != ((fTextGet() >> 15) & 1); }
578 // SVBT16 qpsSpace :6;// Char Spacing, -7 .. 56; 57 = -7, 63 = -1
579 // SVBT16 wSpare2 : 2;// reserved
580 // SVBT16 ico :4;// color of Text: 0=black, 1=blue, 2=cyan, 3=green, 4=magenta, 5=red, 6=yellow, 7=white
581 // SVBT16 kul: 3;// Underline code: 0=none, 1=single, 2=by word, 3=double, 4=dotted
582 // SVBT16 fSysVanish: 1;// used internally
584 ULONG
fcPicGet() { return SVBT32ToUInt32(fcPic
); }
585 USHORT
fnPicGet() { return SVBT8ToByte(fnPic
); }
586 USHORT
hpsLargeChpGet() { return SVBT16ToShort(hpsLargeChp
); }
588 void Out(Ww1Shell
&, Ww1Manager
&);
591 struct W1_FFN
///////////////////////////////////////// Font Descriptor
593 SVBT8 cbFfnM1
;// 0x0 total length of FFN - 1.
594 USHORT
cbFfnM1Get() {
595 return SVBT8ToByte(cbFfnM1
); }
598 return SVBT8ToByte(fFlags
); }
599 // SVBT8 prg : 2;// 0x1:03 pitch request
601 return (USHORT
)((fFlagsGet() >> 0) & 3); }
602 // SVBT8 fTrueType : 1;// 0x1:04 when 1, font is a TrueType font
603 BOOL
fTrueTypeGet() {
604 return 0 != ((fFlagsGet() >> 2) & 1); }
605 // SVBT8 : 1;// 0x1:08 reserved
606 // SVBT8 ff : 3;// 0x1:70 font family id
608 return (USHORT
)((fFlagsGet() >> 4) & 7); }
609 // SVBT8 : 1;// 0x1:80 reserved
610 BYTE szFfn
[65];// 0x6 zero terminated string that records name of font.
611 // Vorsicht: Dieses Array kann auch kleiner sein!!!
612 // Possibly followed by a second sz which records the name of an
613 // alternate font to use if the first named font does not exist
614 // on this system. Maximal size of szFfn is 65 characters.
615 BYTE
* szFfnGet() { return szFfn
; }
618 struct W1_PHE
/////////////////////////////////////// Paragraph Height
622 return SVBT16ToShort(fFlags
); }
624 return 0 != (fFlagsGet() & 1); }
626 return 0 != ((fFlagsGet() >> 1) & 1); }
627 BOOL
fDiffLinesGet() {
628 return 0 != ((fFlagsGet() >> 2) & 1); }
630 return sal::static_int_cast
< sal_uInt8
, sal_uInt16
>((fFlagsGet() >> 8) & 0xff); }
633 return SVBT16ToShort(dxaCol
); }
634 SVBT16 xxx
; // beachte die dreifachnutzung.... siehe doc.
635 USHORT
dylHeightGet() {
636 return SVBT16ToShort(xxx
); }
637 USHORT
dylLineGet() {
638 return SVBT16ToShort(xxx
); }
639 USHORT
fStyleDirtyGet() {
640 return SVBT16ToShort(xxx
); }
643 struct W1_PAPX
///////////////////////// Paragraph Property Difference
647 return SVBT8ToByte(stc
); }
654 struct W1_BRC
//////////////////////////////////////////// Border Code
658 return SVBT16ToShort(aBits
); }
659 // SVBT16 dxpLineWidth : 3;// 0007 When dxpLineWidth is 0, 1, 2, 3, 4, or 5,
660 // this field is the width of a single line of border
661 // in units of 0.75 points Must be nonzero when brcType
662 // is nonzero. 6 == dotted, 7 == dashed.
663 BYTE
dxpLineWidthGet() {
664 return sal::static_int_cast
< sal_uInt8
, sal_uInt16
>((aBitsGet() >> 0) & 0x0007); }
665 // SVBT16 brcType : 2;// 0018 border type code: 0 == none, 1 == single, 2 == thick,
668 return sal::static_int_cast
< sal_uInt8
, sal_uInt16
>((aBitsGet() >> 3) & 0x0003); }
669 // SVBT16 fShadow : 1;// 0020 when 1, border is drawn with shadow. Must be 0
670 // when BRC is a substructure of the TC
672 return sal::static_int_cast
< sal_uInt8
, sal_uInt16
>((aBitsGet() >> 5) & 0x0001); }
673 // SVBT16 ico : 5;// 07C0 color code (see chp.ico)
675 return sal::static_int_cast
< sal_uInt8
, sal_uInt16
>((aBitsGet() >> 6) & 0x001f); }
676 // SVBT16 dxpSpace : 5;// F800 width of space to maintain between border and
677 // text within border. Must be 0 when BRC is a
678 // substructure of the TC. Stored in points for Windows.
680 return sal::static_int_cast
< sal_uInt8
, sal_uInt16
>((aBitsGet() >> 11) & 0x001f); }
683 struct W1_BRC10
///////////////////////////////// Border Code Word 1.0
687 return SVBT16ToShort(aBits
); }
688 BYTE
dxpLine2WidthGet() {
689 return sal::static_int_cast
< sal_uInt8
, sal_uInt16
>((aBitsGet() >> 0) & 0x0007); }
690 BYTE
dxpSpaceBetweenGet() {
691 return sal::static_int_cast
< sal_uInt8
, sal_uInt16
>((aBitsGet() >> 3) & 0x0007); }
692 BYTE
dxpLine1WidthGet() {
693 return sal::static_int_cast
< sal_uInt8
, sal_uInt16
>((aBitsGet() >> 6) & 0x0007); }
695 return sal::static_int_cast
< sal_uInt8
, sal_uInt16
>((aBitsGet() >> 9) & 0x001f); }
697 return sal::static_int_cast
< sal_uInt8
, sal_uInt16
>((aBitsGet() >> 14) & 0x0001); }
699 return sal::static_int_cast
< sal_uInt8
, sal_uInt16
>((aBitsGet() >> 15) & 0x0001); }
702 struct W1_FLD
//////////////////////////////////////// FieldDescriptor
704 SVBT8 ch
; // boundary-type (begin(19), separator (20), end (21))
706 return SVBT8ToByte(ch
); }
707 SVBT8 flt
; // field type / flags
709 return SVBT8ToByte(flt
); }
710 // variant, when ch==21:
712 return (fltGet() >> 0) & 1; }
713 BOOL
fResultDirtyGet() {
714 return (fltGet() >> 2) & 1; }
715 BOOL
ResultEditedGet() {
716 return (fltGet() >> 3) & 1; }
718 return (fltGet() >> 4) & 1; }
719 BOOL
fPrivateResultGet() {
720 return (fltGet() >> 5) & 1; }
722 return (fltGet() >> 6) & 1; }
725 struct W1_PIC
/////////////////////////////////////// PictureStructure
727 SVBT32 lcb
;// 0x0 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.
729 return SVBT32ToUInt32(lcb
); }
730 SVBT16 cbHeader
;// 0x4 number of bytes in the PIC (to allow for future expansion).
731 USHORT
cbHeaderGet() {
732 return SVBT16ToShort(cbHeader
); }
736 return SVBT16ToShort(mm
); }
737 SVBT16 xExt
;// 0x8 int
739 return SVBT16ToShort(xExt
); }
740 SVBT16 yExt
;// 0xa int
742 return SVBT16ToShort(yExt
); }
743 SVBT16 hMF
;// 0xc int
745 return SVBT16ToShort(hMF
); }
748 SVBT8 bm
[14];// 0xe BITMAP(14 bytes) Window's bitmap structure when PIC describes a BITMAP.
749 SVBT8 rcWinMF
[14];// 0xe rc (rectangle - 8 bytes) rect for window origin and extents when metafile is stored -- ignored if 0
751 SVBT16 dxaGoal
;// 0x1c horizontal measurement in twips of the rectangle the picture should be imaged within.
752 USHORT
dxaGoalGet() {
753 return SVBT16ToShort(dxaGoal
); }
754 SVBT16 dyaGoal
;// 0x1e vertical measurement in twips of the rectangle the picture should be imaged within.
755 USHORT
dyaGoalGet() {
756 return SVBT16ToShort(dyaGoal
); }
757 SVBT16 mx
;// 0x20 horizontal scaling factor supplied by user in .1% units.
759 return SVBT16ToShort(mx
); }
760 SVBT16 my
;// 0x22 vertical scaling factor supplied by user in .1% units.
762 return SVBT16ToShort(my
); }
763 SVBT16 dxaCropLeft
;// 0x24 the amount the picture has been cropped on the left in twips.
764 USHORT
dxaCropLeftGet() {
765 return SVBT16ToShort(dxaCropLeft
); }
766 SVBT16 dyaCropTop
;// 0x26 the amount the picture has been cropped on the top in twips.
767 USHORT
dyaCropTopGet() {
768 return SVBT16ToShort(dyaCropTop
); }
769 SVBT16 dxaCropRight
;// 0x28 the amount the picture has been cropped on the right in twips.
770 USHORT
dxaCropRightGet() {
771 return SVBT16ToShort(dxaCropRight
); }
772 SVBT16 dyaCropBottom
;// 0x2a the amount the picture has been cropped on the bottom in twips.
773 USHORT
dyaCropBottomGet() {
774 return SVBT16ToShort(dyaCropBottom
); }
777 return SVBT16ToShort(flags
); }
778 // brcl : 4;// 000F Obsolete, superseded by brcTop, etc. In
780 return sal::static_int_cast
< BYTE
, sal_uInt16
>(flagsGet() & 0xf); }
781 // fFrameEmpty : 1;// 0010 picture consists of a single frame
782 BOOL
fFrameEmptyGet() {
783 return sal::static_int_cast
< BYTE
, sal_uInt16
>((flagsGet() >> 4) & 1); }
785 // fBitmap : 1;// 0020 ==1, when picture is just a bitmap
786 // BOOL fBitmapGet() {
787 // return (flagsGet() >> 5) & 1; }
788 // fDrawHatch : 1;// 0040 ==1, when picture is an active OLE object
789 // BOOL fDrawHatchGet() {
790 // return (flagsGet() >> 6) & 1; }
791 // fError : 1;// 0080 ==1, when picture is just an error message
792 // BOOL fErrorGet() {
793 // return (flagsGet() >> 7) & 1; }
794 // bpp : 8;// FF00 bits per pixel, 0 = unknown
796 // return (flagsGet() >> 8) & 0xff; }
798 // USHORT rgbrcGet(USHORT nIndex) {
799 // return SVBT16ToShort(rgbrc[nIndex]); }
800 // W1_BRC brcTop;// 0x2e specification for border above picture
801 // W1_BRC brcLeft;// 0x30 specification for border to the left
802 // W1_BRC brcBottom;// 0x32 specification for border below picture
803 // W1_BRC brcRight;// 0x34 specification for border to the right
804 // SVBT16 dxaOrigin;// 0x36 horizontal offset of hand annotation origin
805 // USHORT dxaOriginGet() {
806 // return SVBT16ToShort(dxaOrigin); }
807 // SVBT16 dyaOrigin;// 0x38 vertical offset of hand annotation origin
808 // USHORT dyaOriginGet() {
809 // return SVBT16ToShort(dyaOrigin); }
810 SVBT8 rgb
;// 0x3a variable array of bytes containing Window's metafile, bitmap or TIFF file filename.
815 struct W1_TBD
/////////////////////////////////////////////////////////
819 return SVBT8ToByte(aBits1
); }
820 // SVBT8 jc : 3;// 0x07 justification code: 0=left tab, 1=centered tab, 2=right tab, 3=decimal tab, 4=bar
822 return aBits1Get() & 0x07; }
823 // SVBT8 tlc : 3;// 0x38 tab leader code: 0=no leader, 1=dotted leader,
824 // 2=hyphenated leader, 3=single line leader, 4=heavy line leader
826 return (aBits1Get() >> 3 ) & 0x07; }
827 // * int :2 C0 reserved
830 struct W1_TC
//////////////////////////////////////////////////////////
834 return SVBT8ToByte(aBits1
); }
835 BYTE
fFirstMergedGet() {
836 return aBits1Get() & 0x01; }
838 return (aBits1Get() >> 1 ) & 0x01; }
840 // SVBT16 fFirstMerged : 1;// 0001 set to 1 when cell is first cell of a range of cells that have been merged.
841 // SVBT16 fMerged : 1;// 0002 set to 1 when cell has been merged with preceding cell.
842 // SVBT16 fUnused : 14;// FFFC reserved
843 W1_BRC10 rgbrc
[4];// notational convenience for referring to brcTop, brcLeft, etc fields.
844 W1_BRC10
* rgbrcGet() {
846 // BRC brcTop;// specification of the top border of a table cell
847 // BRC brcLeft;// specification of left border of table row
848 // BRC brcBottom;// specification of bottom border of table row
849 // BRC brcRight;// specification of right border of table row.
851 // cbTC (count of bytes of a TC) is 10(decimal), A(hex).
854 struct W1_SHD
////////////////////////////////////////////// struct SHD
857 // SVBT16 nFore : 5;// 0x001f ForegroundColor
858 USHORT
GetFore() { return SVBT16ToShort(aBits1
) & 0x01; };
859 void SetFore( short nVal
){
860 ShortToSVBT16((SVBT16ToShort(aBits1
)&0xffe0)|(nVal
&0x1f), aBits1
); };
861 // SVBT16 nBack : 5;// 0x03e0 BackgroundColor
862 W1_SHD() { ShortToSVBT16( 0, aBits1
); };
863 USHORT
GetBack() { return (SVBT16ToShort(aBits1
) >> 5 & 0x1f ); };
864 void SetBack( short nVal
){
865 ShortToSVBT16((SVBT16ToShort(aBits1
)&0xfc1f)|(nVal
&0x1f)<<5, aBits1
); };
866 // SVBT16 nStyle : 5;// 0x7c00 Percentage and Style
867 USHORT
GetStyle() { return (SVBT16ToShort(aBits1
) >> 10 & 0x1f ); };
868 void SetStyle( short nVal
){
869 ShortToSVBT16((SVBT16ToShort(aBits1
)&0x83ff)|(nVal
&0x1f)<<10, aBits1
); };
870 // SVBT16 nDontKnow : 1;// 0x8000 ???
873 struct W1_ANLV
////////////////////////////////////////////////////////
875 SVBT8 nfc
;// 0 number format code, 0=Arabic, 1=Upper case Roman, 2=Lower case Roman
876 // 3=Upper case Letter, 4=Lower case letter, 5=Ordinal
877 SVBT8 cbTextBefore
;// 1 offset into anld.rgch limit of prefix text
878 SVBT8 cbTextAfter
;// 2
880 // SVBT8 jc : 2;// 3 : 0x03 justification code, 0=left, 1=center, 2=right, 3=left and right justify
881 // SVBT8 fPrev : 1;// 0x04 when ==1, include previous levels
882 // SVBT8 fHang : 1;// 0x08 when ==1, number will be displayed using a hanging indent
883 // SVBT8 fSetBold : 1;// 0x10 when ==1, boldness of number will be determined by anld.fBold.
884 // SVBT8 fSetItalic : 1;// 0x20 when ==1, italicness of number will be determined by anld.fItalic
885 // SVBT8 fSetSmallCaps : 1;// 0x40 when ==1, anld.fSmallCaps will determine whether number will be displayed in small caps or not.
886 // SVBT8 fSetCaps : 1;// 0x80 when ==1, anld.fCaps will determine whether number will be displayed capitalized or not
888 // SVBT8 fSetStrike : 1;// 4 : 0x01 when ==1, anld.fStrike will determine whether the number will be displayed using strikethrough or not.
889 // SVBT8 fSetKul : 1;// 0x02 when ==1, anld.kul will determine the underlining state of the autonumber.
890 // SVBT8 fPrevSpace : 1;// 0x04 when ==1, autonumber will be displayed with a single prefixing space character
891 // SVBT8 fBold : 1;// 0x08 determines boldness of autonumber when anld.fSetBold == 1.
892 // SVBT8 fItalic : 1;// 0x10 determines italicness of autonumber when anld.fSetItalic == 1.
893 // SVBT8 fSmallCaps : 1;// 0x20 determines whether autonumber will be displayed using small caps when anld.fSetSmallCaps == 1.
894 // SVBT8 fCaps : 1;// 0x40 determines whether autonumber will be displayed using caps when anld.fSetCaps == 1.
895 // SVBT8 fStrike : 1;// 0x80 determines whether autonumber will be displayed using caps when anld.fSetStrike == 1.
897 // SVBT8 kul : 3;// 5 : 0x07 determines whether autonumber will be displayed with underlining when anld.fSetKul == 1.
898 // SVBT8 ico : 5;// 0xF1 color of autonumber
899 SVBT16 ftc
;// 6 font code of autonumber
900 SVBT16 hps
;// 8 font half point size (or 0=auto)
901 SVBT16 iStartAt
;// 0x0a starting value (0 to 65535)
902 SVBT16 dxaIndent
;// 0x0c *short?* *USHORT?* width of prefix text (same as indent)
903 SVBT16 dxaSpace
;// 0x0e minimum space between number and paragraph
905 // *cbANLV (count of bytes of ANLV) is 16 (decimal), 10(hex).
907 struct W1_ANLD
////////////////////////////////////////////////////////
910 SVBT8 fNumber1
;// 0x10 number only 1 item per table cell
911 SVBT8 fNumberAcross
;// 0x11 number across cells in table rows(instead of down)
912 SVBT8 fRestartHdn
;// 0x12 restart heading number on section boundary
913 SVBT8 fSpareX
;// 0x13 unused( should be 0)
914 sal_Char rgchAnld
[32];// 0x14 characters displayed before/after autonumber
918 struct W1_OLST
////////////////////////////////////////////////////////
920 W1_ANLV rganlv
[9];// 0 an array of 9 ANLV structures (heading levels)
921 SVBT8 fRestartHdr
;// 0x90 when ==1, restart heading on section break
922 SVBT8 fSpareOlst2
;// 0x91 reserved
923 SVBT8 fSpareOlst3
;// 0x92 reserved
924 SVBT8 fSpareOlst4
;// 0x93 reserved
925 sal_Char rgch
[64];// 0x94 array of 64 chars text before/after number
927 // cbOLST is 212(decimal), D4(hex).