1 /* wvWare
2 * Copyright (C) Caolan McNamara, Dom Lachowicz, and others
3 *
4 * This program is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU General Public License
6 * as published by the Free Software Foundation; either version 2
7 * of the License, or (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software
16 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
17 * 02111-1307, USA.
18 */
19
20 #ifdef HAVE_CONFIG_H
21 #include "config.h"
22 #endif
23
24 #include <sys/types.h>
25 #include <string.h>
26 #include <stdio.h>
27 #include "wv.h"
28
29 void
wvGetCOPTS(COPTS * item,wvStream * fd)30 wvGetCOPTS (COPTS * item, wvStream * fd)
31 {
32 U16 temp16;
33 temp16 = read_16ubit (fd);
34
35 item->fNoTabForInd = temp16 & 0x0001;
36 item->fNoSpaceRaiseLower = (temp16 & 0x0002) >> 1;
37 item->fSuppressSpbfAfterPageBreak = (temp16 & 0x0004) >> 2;
38 item->fWrapTrailSpaces = (temp16 & 0x0008) >> 3;
39 item->fMapPrintTextColor = (temp16 & 0x0010) >> 4;
40 item->fNoColumnBalance = (temp16 & 0x0020) >> 5;
41 item->fConvMailMergeEsc = (temp16 & 0x0040) >> 6;
42 item->fSuppressTopSpacing = (temp16 & 0x0080) >> 7;
43 item->fOrigWordTableRules = (temp16 & 0x0100) >> 8;
44 item->fTransparentMetafiles = (temp16 & 0x0200) >> 9;
45 item->fShowBreaksInFrames = (temp16 & 0x0400) >> 10;
46 item->fSwapBordersFacingPgs = (temp16 & 0x800) >> 11;
47 item->reserved = (temp16 & 0xf000) >> 12;
48 }
49
50
51 void
wvInitCOPTS(COPTS * item)52 wvInitCOPTS (COPTS * item)
53 {
54 item->fNoTabForInd = 0;
55 item->fNoSpaceRaiseLower = 0;
56 item->fSuppressSpbfAfterPageBreak = 0;
57 item->fWrapTrailSpaces = 0;
58 item->fMapPrintTextColor = 0;
59 item->fNoColumnBalance = 0;
60 item->fConvMailMergeEsc = 0;
61 item->fSuppressTopSpacing = 0;
62 item->fOrigWordTableRules = 0;
63 item->fTransparentMetafiles = 0;
64 item->fShowBreaksInFrames = 0;
65 item->fSwapBordersFacingPgs = 0;
66 item->reserved = 0;
67 }
68
69
70 void
wvGetDOP(wvVersion ver,DOP * dop,U32 fcDop,U32 lcbDop,wvStream * fd)71 wvGetDOP (wvVersion ver, DOP * dop, U32 fcDop, U32 lcbDop, wvStream * fd)
72 {
73 U16 temp16;
74 U32 temp32;
75 int i;
76
77 if (ver != WORD8)
78 wvInitDOP (dop);
79
80 if (lcbDop <= 0)
81 return;
82 wvStream_goto (fd, fcDop);
83
84 temp16 = read_16ubit (fd);
85
86 dop->fFacingPages = temp16 & 0x0001;
87 dop->fWidowControl = (temp16 & 0x0002) >> 1;
88 dop->fPMHMainDoc = (temp16 & 0x0004) >> 2;
89 dop->grfSuppression = (temp16 & 0x18) >> 3;
90 dop->fpc = (temp16 & 0x0060) >> 5;
91 wvTrace (("fpc is %d\n", dop->fpc));
92 dop->reserved1 = (temp16 & 0x0080) >> 7;
93 dop->grpfIhdt = (temp16 & 0xFF00) >> 8;
94
95 temp16 = read_16ubit (fd);
96
97 if (ver == WORD2)
98 {
99 dop->fFtnRestart = temp16 & 0x0001;
100 dop->nFtn = (temp16 & 0xFFFE) >> 1;
101 }
102 else
103 {
104 dop->rncFtn = temp16 & 0x0003;
105 dop->nFtn = (temp16 & 0xFFFC) >> 2;
106 }
107 temp16 = read_16ubit (fd);
108
109 if (ver == WORD2)
110 {
111 dop->irmBar = temp16 & 0x00FF;
112 dop->irmProps = temp16 & 0x8F00 >> 8;
113 }
114 else
115 {
116 dop->fOutlineDirtySave = temp16 & 0x0001;
117 dop->reserved2 = (temp16 & 0x00FE) >> 1;
118
119 dop->fOnlyMacPics = (temp16 & 0x0100) >> 8;
120 dop->fOnlyWinPics = (temp16 & 0x0200) >> 9;
121 dop->fLabelDoc = (temp16 & 0x0400) >> 10;
122 dop->fHyphCapitals = (temp16 & 0x0800) >> 11;
123 dop->fAutoHyphen = (temp16 & 0x1000) >> 12;
124 dop->fFormNoFields = (temp16 & 0x2000) >> 13;
125 dop->fLinkStyles = (temp16 & 0x4000) >> 14;
126 }
127
128 dop->fRevMarking = (temp16 & 0x8000) >> 15;
129
130 temp16 = read_16ubit (fd);
131
132 dop->fBackup = temp16 & 0x0001;
133 dop->fExactCWords = (temp16 & 0x0002) >> 1;
134 dop->fPagHidden = (temp16 & 0x0004) >> 2;
135 dop->fPagResults = (temp16 & 0x0008) >> 3;
136 dop->fLockAtn = (temp16 & 0x0010) >> 4;
137 dop->fMirrorMargins = (temp16 & 0x0020) >> 5;
138
139 if (ver == WORD2)
140 {
141 dop->fKeepFileFormat = (temp16 & 0x0040) >> 6;
142 }
143 else
144 {
145 dop->reserved3 = (temp16 & 0x0040) >> 6;
146 }
147 dop->fDfltTrueType = (temp16 & 0x0080) >> 7;
148 dop->fPagSuppressTopSpacing = (temp16 & 0x0100) >> 8;
149
150 if (ver == WORD2)
151 {
152 dop->fRTLAlignment = (temp16 & 0x0200) >> 9;
153 }
154 else
155 {
156 dop->fProtEnabled = (temp16 & 0x0200) >> 9;
157 }
158
159 /* (Nameless in W2) */
160 dop->fDispFormFldSel = (temp16 & 0x0400) >> 10;
161 dop->fRMView = (temp16 & 0x0800) >> 11;
162 dop->fRMPrint = (temp16 & 0x1000) >> 12;
163 dop->reserved4 = (temp16 & 0x2000) >> 13;
164 dop->fLockRev = (temp16 & 0x4000) >> 14;
165 dop->fEmbedFonts = (temp16 & 0x8000) >> 15;
166
167 if (ver == WORD2)
168 {
169 temp16 = read_16ubit (fd);
170 /* nameless to (temp16&0xFE00)>>8 */
171 dop->fSpares = read_16ubit (fd);
172
173 }
174
175
176 /*
177 not used in word 8 as far as i know, but are in previous word's
178 not in word 2 either
179 */
180 if (ver > WORD2)
181 wvGetCOPTS (&dop->copts, fd);
182
183 dop->dxaTab = read_16ubit (fd);
184
185 if (ver == WORD2)
186 dop->ftcDefaultBi = read_16ubit (fd);
187
188 dop->wSpare = read_16ubit (fd);
189 dop->dxaHotZ = read_16ubit (fd);
190
191 if (ver > WORD2)
192 dop->cConsecHypLim = read_16ubit (fd);
193
194 dop->wSpare2 = read_16ubit (fd);
195 if (ver == WORD2)
196 dop->wSpare3 = read_16ubit (fd);
197
198 wvGetDTTM (&dop->dttmCreated, fd);
199 wvGetDTTM (&dop->dttmRevised, fd);
200 wvGetDTTM (&dop->dttmLastPrint, fd);
201
202 dop->nRevision = read_16ubit (fd);
203 dop->tmEdited = read_32ubit (fd);
204 dop->cWords = read_32ubit (fd);
205 dop->cCh = read_32ubit (fd);
206 dop->cPg = read_16ubit (fd);
207
208 if (ver == WORD2)
209 {
210 dop->rgwSpareDocSum[1] = read_16ubit (fd);
211 dop->rgwSpareDocSum[2] = read_16ubit (fd);
212 return; /* No more for Word 2 */
213 }
214 else
215 {
216 dop->cParas = read_32ubit (fd);
217 }
218
219 temp16 = read_16ubit (fd);
220
221 dop->rncEdn = temp16 & 0x0003;
222 dop->nEdn = (temp16 & 0xFFFC) >> 2;
223
224 temp16 = read_16ubit (fd);
225
226 dop->epc = temp16 & 0x0003;
227 dop->nfcFtnRef = (temp16 & 0x003C) >> 2;
228 dop->nfcEdnRef = (temp16 & 0x03C0) >> 6;
229 dop->fPrintFormData = (temp16 & 0x0400) >> 10;
230 dop->fSaveFormData = (temp16 & 0x0800) >> 11;
231 dop->fShadeFormData = (temp16 & 0x1000) >> 12;
232 dop->reserved6 = (temp16 & 0x6000) >> 13;
233 dop->fWCFtnEdn = (temp16 & 0x8000) >> 15;
234
235 dop->cLines = read_32ubit (fd);
236 dop->cWordsFtnEnd = read_32ubit (fd);
237 dop->cChFtnEdn = read_32ubit (fd);
238 dop->cPgFtnEdn = read_16ubit (fd);
239 dop->cParasFtnEdn = read_32ubit (fd);
240 dop->cLinesFtnEdn = read_32ubit (fd);
241 dop->lKeyProtDoc = read_32ubit (fd);
242
243
244 temp16 = read_16ubit (fd);
245
246 dop->wvkSaved = temp16 & 0x0007;
247 dop->wScaleSaved = (temp16 & 0x0FF8) >> 3;
248 dop->zkSaved = (temp16 & 0x3000) >> 12;
249 dop->fRotateFontW6 = (temp16 & 0x4000) >> 14;
250 dop->iGutterPos = (temp16 & 0x8000) >> 15;
251
252 if (ver == WORD6)
253 {
254 dop->fNoTabForInd = dop->copts.fNoTabForInd;
255 dop->fNoSpaceRaiseLower = dop->copts.fNoSpaceRaiseLower;
256 dop->fSuppressSpbfAfterPageBreak =
257 dop->copts.fSuppressSpbfAfterPageBreak;
258 dop->fWrapTrailSpaces = dop->copts.fWrapTrailSpaces;
259 dop->fMapPrintTextColor = dop->copts.fMapPrintTextColor;
260 dop->fNoColumnBalance = dop->copts.fNoColumnBalance;
261 dop->fConvMailMergeEsc = dop->copts.fConvMailMergeEsc;
262 dop->fSuppressTopSpacing = dop->copts.fSuppressTopSpacing;
263 dop->fOrigWordTableRules = dop->copts.fOrigWordTableRules;
264 dop->fTransparentMetafiles = dop->copts.fTransparentMetafiles;
265 dop->fShowBreaksInFrames = dop->copts.fShowBreaksInFrames;
266 dop->fSwapBordersFacingPgs = dop->copts.fSwapBordersFacingPgs;
267 return;
268 }
269
270
271
272 temp32 = read_32ubit (fd);
273
274 dop->fNoTabForInd = temp32 & 0x00000001;
275 dop->fNoSpaceRaiseLower = (temp32 & 0x00000002) >> 1;
276 dop->fSuppressSpbfAfterPageBreak = (temp32 & 0x00000004) >> 2;
277 dop->fWrapTrailSpaces = (temp32 & 0x00000008) >> 3;
278 dop->fMapPrintTextColor = (temp32 & 0x00000010) >> 4;
279 dop->fNoColumnBalance = (temp32 & 0x00000020) >> 5;
280 dop->fConvMailMergeEsc = (temp32 & 0x00000040) >> 6;
281 dop->fSuppressTopSpacing = (temp32 & 0x00000080) >> 7;
282 dop->fOrigWordTableRules = (temp32 & 0x00000100) >> 8;
283 dop->fTransparentMetafiles = (temp32 & 0x00000200) >> 9;
284 dop->fShowBreaksInFrames = (temp32 & 0x00000400) >> 10;
285 dop->fSwapBordersFacingPgs = (temp32 & 0x00000800) >> 11;
286 dop->reserved7 = (temp32 & 0x0000F000) >> 12;
287 dop->fSuppressTopSpacingMac5 = (temp32 & 0x00010000) >> 16;
288 dop->fTruncDxaExpand = (temp32 & 0x00020000) >> 17;
289 dop->fPrintBodyBeforeHdr = (temp32 & 0x00040000) >> 18;
290 dop->fNoLeading = (temp32 & 0x00080000) >> 19;
291 dop->reserved8 = (temp32 & 0x00100000) >> 20;
292 dop->fMWSmallCaps = (temp32 & 0x00200000) >> 21;
293 dop->reserved9 = (temp32 & 0xFFC00000) >> 22;
294
295 if (ver == WORD7)
296 return;
297
298 dop->adt = read_16ubit (fd);
299 wvGetDOPTYPOGRAPHY (&dop->doptypography, fd);
300 wvGetDOGRID (&dop->dogrid, fd);
301
302 temp16 = read_16ubit (fd);
303
304 dop->reserved10 = temp16 & 0x0001;
305 dop->lvl = (temp16 & 0x001E) >> 1;
306 dop->fGramAllDone = (temp16 & 0x0020) >> 5;
307 dop->fGramAllClean = (temp16 & 0x0040) >> 6;
308 dop->fSubsetFonts = (temp16 & 0x0080) >> 7;
309 dop->fHideLastVersion = (temp16 & 0x0100) >> 8;
310 dop->fHtmlDoc = (temp16 & 0x0200) >> 9;
311 dop->reserved11 = (temp16 & 0x0400) >> 10;
312 dop->fSnapBorder = (temp16 & 0x0800) >> 11;
313 dop->fIncludeHeader = (temp16 & 0x1000) >> 12;
314 dop->fIncludeFooter = (temp16 & 0x2000) >> 13;
315 dop->fForcePageSizePag = (temp16 & 0x4000) >> 14;
316 dop->fMinFontSizePag = (temp16 & 0x8000) >> 15;
317
318 temp16 = read_16ubit (fd);
319
320 dop->fHaveVersions = temp16 & 0x0001;
321 dop->fAutoVersion = (temp16 & 0x0002) >> 1;
322 dop->reserved11 = (temp16 & 0xFFFC) >> 2;
323
324 wvGetASUMYI (&dop->asumyi, fd);
325
326 dop->cChWS = read_32ubit (fd);
327 dop->cChWSFtnEdn = read_32ubit (fd);
328 dop->grfDocEvents = read_32ubit (fd);
329
330 temp32 = read_32ubit (fd);
331
332 dop->fVirusPrompted = temp32 & 0x00000001;
333 dop->fVirusLoadSafe = (temp32 & 0x00000002) >> 1;
334 dop->KeyVirusSession30 = (temp32 & 0xFFFFFFFC) >> 2;
335
336 for (i = 0; i < 30; i++)
337 dop->Spare[i] = read_8ubit (fd);
338
339 dop->reserved12 = read_32ubit (fd);
340 dop->reserved13 = read_32ubit (fd);
341 dop->cDBC = read_32ubit (fd);
342 dop->cDBCFtnEdn = read_32ubit (fd);
343 dop->reserved14 = read_32ubit (fd);
344 dop->new_nfcFtnRef = read_16ubit (fd);
345 dop->new_nfcEdnRef = read_16ubit (fd);
346 dop->hpsZoonFontPag = read_16ubit (fd);
347 dop->dywDispPag = read_16ubit (fd);
348
349 /*
350 if ((dop->fLockAtn) || (dop->fLockRev))
351 wvError(("doc protection key is %x\n",dop->lKeyProtDoc));
352 */
353 }
354
355 void
wvInitDOP(DOP * dop)356 wvInitDOP (DOP * dop)
357 {
358 int i;
359 dop->fFacingPages = 0;
360 dop->fWidowControl = 0;
361 dop->fPMHMainDoc = 0;
362 dop->grfSuppression = 0;
363 dop->fpc = 0;
364 dop->reserved1 = 0;
365 dop->grpfIhdt = 0;
366 dop->rncFtn = 0;
367 dop->fFtnRestart = 0;
368 dop->nFtn = 0;
369 dop->irmBar = 0;
370 dop->irmProps = 0;
371 dop->fOutlineDirtySave = 0;
372 dop->reserved2 = 0;
373 dop->fOnlyMacPics = 0;
374 dop->fOnlyWinPics = 0;
375 dop->fLabelDoc = 0;
376 dop->fHyphCapitals = 0;
377 dop->fAutoHyphen = 0;
378 dop->fFormNoFields = 0;
379 dop->fLinkStyles = 0;
380 dop->fRevMarking = 0;
381 dop->fBackup = 0;
382 dop->fExactCWords = 0;
383 dop->fPagHidden = 0;
384 dop->fPagResults = 0;
385 dop->fLockAtn = 0;
386 dop->fMirrorMargins = 0;
387 dop->fKeepFileFormat = 0;
388 dop->reserved3 = 0;
389 dop->fDfltTrueType = 0;
390 dop->fPagSuppressTopSpacing = 0;
391 dop->fRTLAlignment = 0;
392 dop->fSpares = 0;
393 dop->fProtEnabled = 0;
394 dop->fDispFormFldSel = 0;
395 dop->fRMView = 0;
396 dop->fRMPrint = 0;
397 dop->reserved4 = 0;
398 dop->fLockRev = 0;
399 dop->fEmbedFonts = 0;
400 wvInitCOPTS (&dop->copts);
401 dop->dxaTab = 0;
402 dop->ftcDefaultBi = 0;
403 dop->wSpare = 0;
404 dop->dxaHotZ = 0;
405 dop->cConsecHypLim = 0;
406 dop->wSpare2 = 0;
407 wvInitDTTM (&dop->dttmCreated);
408 wvInitDTTM (&dop->dttmRevised);
409 wvInitDTTM (&dop->dttmLastPrint);
410 dop->nRevision = 0;
411 dop->tmEdited = 0;
412 dop->cWords = 0;
413 dop->cCh = 0;
414 dop->cPg = 0;
415 dop->cParas = 0;
416 dop->rgwSpareDocSum[1] = 0;
417 dop->rgwSpareDocSum[2] = 0;
418 dop->rncEdn = 0;
419 dop->nEdn = 0;
420 dop->epc = 0;
421 dop->nfcFtnRef = 0;
422 dop->nfcEdnRef = 0;
423 dop->fPrintFormData = 0;
424 dop->fSaveFormData = 0;
425 dop->fShadeFormData = 0;
426 dop->reserved6 = 0;
427 dop->fWCFtnEdn = 0;
428 dop->cLines = 0;
429 dop->cWordsFtnEnd = 0;
430 dop->cChFtnEdn = 0;
431 dop->cPgFtnEdn = 0;
432 dop->cParasFtnEdn = 0;
433 dop->cLinesFtnEdn = 0;
434 dop->lKeyProtDoc = 0;
435 dop->wvkSaved = 0;
436 dop->wScaleSaved = 0;
437 dop->zkSaved = 0;
438 dop->fRotateFontW6 = 0;
439 dop->iGutterPos = 0;
440 dop->fNoTabForInd = 0;
441 dop->fNoSpaceRaiseLower = 0;
442 dop->fSuppressSpbfAfterPageBreak = 0;
443 dop->fWrapTrailSpaces = 0;
444 dop->fMapPrintTextColor = 0;
445 dop->fNoColumnBalance = 0;
446 dop->fConvMailMergeEsc = 0;
447 dop->fSuppressTopSpacing = 0;
448 dop->fOrigWordTableRules = 0;
449 dop->fTransparentMetafiles = 0;
450 dop->fShowBreaksInFrames = 0;
451 dop->fSwapBordersFacingPgs = 0;
452 dop->reserved7 = 0;
453 dop->fSuppressTopSpacingMac5 = 0;
454 dop->fTruncDxaExpand = 0;
455 dop->fPrintBodyBeforeHdr = 0;
456 dop->fNoLeading = 0;
457 dop->reserved8 = 0;
458 dop->fMWSmallCaps = 0;
459 dop->reserved9 = 0;
460 dop->adt = 0;
461 wvInitDOPTYPOGRAPHY (&dop->doptypography);
462 wvInitDOGRID (&dop->dogrid);
463 dop->reserved10 = 0;
464 dop->lvl = 0;
465 dop->fGramAllDone = 0;
466 dop->fGramAllClean = 0;
467 dop->fSubsetFonts = 0;
468 dop->fHideLastVersion = 0;
469 dop->fHtmlDoc = 0;
470 dop->reserved11 = 0;
471 dop->fSnapBorder = 0;
472 dop->fIncludeHeader = 0;
473 dop->fIncludeFooter = 0;
474 dop->fForcePageSizePag = 0;
475 dop->fMinFontSizePag = 0;
476 dop->fHaveVersions = 0;
477 dop->fAutoVersion = 0;
478 dop->reserved11 = 0;
479 wvInitASUMYI (&dop->asumyi);
480 dop->cChWS = 0;
481 dop->cChWSFtnEdn = 0;
482 dop->grfDocEvents = 0;
483 dop->fVirusPrompted = 0;
484 dop->fVirusLoadSafe = 0;
485 dop->KeyVirusSession30 = 0;
486 for (i = 0; i < 30; i++)
487 dop->Spare[i] = 0;
488 dop->reserved12 = 0;
489 dop->reserved13 = 0;
490 dop->cDBC = 0;
491 dop->cDBCFtnEdn = 0;
492 dop->reserved14 = 0;
493 dop->new_nfcFtnRef = 0;
494 dop->new_nfcEdnRef = 0;
495 dop->hpsZoonFontPag = 0;
496 dop->dywDispPag = 0;
497 }
498