32#include "structures_generated.h"
33#include "structures_private.h"
34#include "structures.h"
40 HeaderGenerated::HeaderGenerated ()
43 m_magic = (Word) (0xBE31);
45 m_magic2 = (Word) (0xAB00);
46 memset (m_zero2, (Word) (0), 4 *
sizeof (Word));
54 memset (m_zero3, (Word) (0), 33 *
sizeof (Word));
58 HeaderGenerated::~HeaderGenerated ()
62 HeaderGenerated &HeaderGenerated::operator= (
const HeaderGenerated &rhs)
67 NeedsDevice::operator= (rhs);
68 memcpy (m_data, rhs.m_data, s_size);
70 m_magic = rhs.m_magic;
72 m_magic2 = rhs.m_magic2;
73 memcpy (m_zero2, rhs.m_zero2, 4 * sizeof (Word));
74 m_numCharBytesPlus128 = rhs.m_numCharBytesPlus128;
75 m_pageParaInfo = rhs.m_pageParaInfo;
76 m_pageFootnoteTable = rhs.m_pageFootnoteTable;
77 m_pageSectionProperty = rhs.m_pageSectionProperty;
78 m_pageSectionTable = rhs.m_pageSectionTable;
79 m_pagePageTable = rhs.m_pagePageTable;
80 m_pageFontTable = rhs.m_pageFontTable;
81 memcpy (m_zero3, rhs.m_zero3, 33 * sizeof (Word));
82 m_numPages = rhs.m_numPages;
87 bool HeaderGenerated::verifyVariables (
void)
91 if (!Verify (Error::InvalidFormat, m_magic == 0xBE31 || m_magic == 0xBE32, DWord (m_magic)))
return false;
92 if (!Verify (Error::InvalidFormat, m_zero == 0, DWord (m_zero)))
return false;
93 if (!Verify (Error::InvalidFormat, m_magic2 == 0xAB00, DWord (m_magic2)))
return false;
94 for (
int i = 0; i < 4; i++)
96 if (!Verify (Error::InvalidFormat, m_zero2 [i] == 0,
long (m_zero2)))
return false;
98 if (!Verify (Error::InvalidFormat, m_numCharBytesPlus128 >= 128, DWord (m_numCharBytesPlus128)))
return false;
105 for (
int i = 0; i < 33; i++)
107 if (!Verify (Error::Warn, m_zero3 [i] == 0,
long (m_zero3)))
return false;
109 if (!Verify (Error::InvalidFormat, m_numPages > 0, DWord (m_numPages)))
return false;
113 bool HeaderGenerated::readFromDevice (
void)
118 if (!m_device->readInternal (m_data, s_size))
119 ErrorAndQuit (Error::FileError,
"could not read HeaderGenerated data");
121 ReadWord (m_magic, m_data + 0);
122 ReadWord (m_zero, m_data + 2);
123 ReadWord (m_magic2, m_data + 4);
124 for (
int i = 0; i < 4; i++)
126 ReadWord (m_zero2 [i], m_data + 6 + i *
sizeof (Word));
129 ReadDWord (m_numCharBytesPlus128, m_data + 14);
130 ReadWord (m_pageParaInfo, m_data + 18);
131 ReadWord (m_pageFootnoteTable, m_data + 20);
132 ReadWord (m_pageSectionProperty, m_data + 22);
133 ReadWord (m_pageSectionTable, m_data + 24);
134 ReadWord (m_pagePageTable, m_data + 26);
135 ReadWord (m_pageFontTable, m_data + 28);
136 for (
int i = 0; i < 33; i++)
138 ReadWord (m_zero3 [i], m_data + 30 + i *
sizeof (Word));
141 ReadWord (m_numPages, m_data + 96);
142 return verifyVariables ();
145 bool HeaderGenerated::writeToArray (
void)
149 WriteWord (m_magic, m_data + 0);
150 WriteWord (m_zero, m_data + 2);
151 WriteWord (m_magic2, m_data + 4);
152 for (
int i = 0; i < 4; i++)
154 WriteWord (m_zero2 [i], m_data + 6 + i *
sizeof (Word));
157 WriteDWord (m_numCharBytesPlus128, m_data + 14);
158 WriteWord (m_pageParaInfo, m_data + 18);
159 WriteWord (m_pageFootnoteTable, m_data + 20);
160 WriteWord (m_pageSectionProperty, m_data + 22);
161 WriteWord (m_pageSectionTable, m_data + 24);
162 WriteWord (m_pagePageTable, m_data + 26);
163 WriteWord (m_pageFontTable, m_data + 28);
164 for (
int i = 0; i < 33; i++)
166 WriteWord (m_zero3 [i], m_data + 30 + i *
sizeof (Word));
169 WriteWord (m_numPages, m_data + 96);
173 bool HeaderGenerated::writeToDevice (
void)
178 if (!verifyVariables ())
return false;
181 if (!writeToArray ())
return false;
184 if (!m_device->writeInternal (m_data, s_size))
185 ErrorAndQuit (Error::FileError,
"could not write HeaderGenerated data");
193 PageLayoutGenerated::PageLayoutGenerated ()
196 m_magic102 = (Byte) (102);
197 m_magic512 = (Word) (512);
198 m_pageHeight = (Word) (Inch2Twip (11));
199 m_pageWidth = (Word) (Inch2Twip (8.5));
200 m_pageNumberStart = (Word) (1);
201 m_topMargin = (Word) (Inch2Twip (1));
202 m_textHeight = (Word) (Inch2Twip (9));
203 m_leftMargin = (Word) (Inch2Twip (1.25));
204 m_textWidth = (Word) (Inch2Twip (6));
205 m_magic256 = (Word) (256);
206 m_headerFromTop = (Word) (Inch2Twip (0.75));
207 m_footerFromTop = (Word) (Inch2Twip (11.0 - 0.75));
208 m_magic720 = (Word) (720);
210 m_magic1080 = (Word) (1080);
211 m_unknown = (Word) (0);
212 m_zero2 = (Word) (0);
215 PageLayoutGenerated::~PageLayoutGenerated ()
219 PageLayoutGenerated &PageLayoutGenerated::operator= (
const PageLayoutGenerated &rhs)
224 NeedsDevice::operator= (rhs);
225 memcpy (m_data, rhs.m_data, s_size);
227 m_magic102 = rhs.m_magic102;
228 m_magic512 = rhs.m_magic512;
229 m_pageHeight = rhs.m_pageHeight;
230 m_pageWidth = rhs.m_pageWidth;
231 m_pageNumberStart = rhs.m_pageNumberStart;
232 m_topMargin = rhs.m_topMargin;
233 m_textHeight = rhs.m_textHeight;
234 m_leftMargin = rhs.m_leftMargin;
235 m_textWidth = rhs.m_textWidth;
236 m_magic256 = rhs.m_magic256;
237 m_headerFromTop = rhs.m_headerFromTop;
238 m_footerFromTop = rhs.m_footerFromTop;
239 m_magic720 = rhs.m_magic720;
241 m_magic1080 = rhs.m_magic1080;
242 m_unknown = rhs.m_unknown;
243 m_zero2 = rhs.m_zero2;
248 bool PageLayoutGenerated::verifyVariables (
void)
252 if (!Verify (Error::Warn, m_magic102 == 102, DWord (m_magic102)))
return false;
253 if (!Verify (Error::Warn, m_magic512 == 512, DWord (m_magic512)))
return false;
261 if (!Verify (Error::Warn, m_magic256 == 256, DWord (m_magic256)))
return false;
264 if (!Verify (Error::Warn, m_magic720 == 720, DWord (m_magic720)))
return false;
265 if (!Verify (Error::Warn, m_zero == 0, DWord (m_zero)))
return false;
266 if (!Verify (Error::Warn, m_magic1080 == 1080, DWord (m_magic1080)))
return false;
268 if (!Verify (Error::Warn, m_zero2 == 0, DWord (m_zero2)))
return false;
272 bool PageLayoutGenerated::readFromDevice (
void)
277 if (!m_device->readInternal (m_data, s_size))
278 ErrorAndQuit (Error::FileError,
"could not read PageLayoutGenerated data");
280 ReadByte (m_magic102, m_data + 0);
281 ReadWord (m_magic512, m_data + 1);
282 ReadWord (m_pageHeight, m_data + 3);
283 ReadWord (m_pageWidth, m_data + 5);
284 ReadWord (m_pageNumberStart, m_data + 7);
285 ReadWord (m_topMargin, m_data + 9);
286 ReadWord (m_textHeight, m_data + 11);
287 ReadWord (m_leftMargin, m_data + 13);
288 ReadWord (m_textWidth, m_data + 15);
289 ReadWord (m_magic256, m_data + 17);
290 ReadWord (m_headerFromTop, m_data + 19);
291 ReadWord (m_footerFromTop, m_data + 21);
292 ReadWord (m_magic720, m_data + 23);
293 ReadWord (m_zero, m_data + 25);
294 ReadWord (m_magic1080, m_data + 27);
295 ReadWord (m_unknown, m_data + 29);
296 ReadWord (m_zero2, m_data + 31);
297 return verifyVariables ();
300 bool PageLayoutGenerated::writeToArray (
void)
304 WriteByte (m_magic102, m_data + 0);
305 WriteWord (m_magic512, m_data + 1);
306 WriteWord (m_pageHeight, m_data + 3);
307 WriteWord (m_pageWidth, m_data + 5);
308 WriteWord (m_pageNumberStart, m_data + 7);
309 WriteWord (m_topMargin, m_data + 9);
310 WriteWord (m_textHeight, m_data + 11);
311 WriteWord (m_leftMargin, m_data + 13);
312 WriteWord (m_textWidth, m_data + 15);
313 WriteWord (m_magic256, m_data + 17);
314 WriteWord (m_headerFromTop, m_data + 19);
315 WriteWord (m_footerFromTop, m_data + 21);
316 WriteWord (m_magic720, m_data + 23);
317 WriteWord (m_zero, m_data + 25);
318 WriteWord (m_magic1080, m_data + 27);
319 WriteWord (m_unknown, m_data + 29);
320 WriteWord (m_zero2, m_data + 31);
324 bool PageLayoutGenerated::writeToDevice (
void)
329 if (!verifyVariables ())
return false;
332 if (!writeToArray ())
return false;
335 if (!m_device->writeInternal (m_data, s_size))
336 ErrorAndQuit (Error::FileError,
"could not write PageLayoutGenerated data");
344 SectionDescriptorGenerated::SectionDescriptorGenerated ()
348 m_undefined = (Word) (0);
352 SectionDescriptorGenerated::~SectionDescriptorGenerated ()
356 SectionDescriptorGenerated &SectionDescriptorGenerated::operator= (
const SectionDescriptorGenerated &rhs)
361 NeedsDevice::operator= (rhs);
362 memcpy (m_data, rhs.m_data, s_size);
364 m_afterEndCharByte = rhs.m_afterEndCharByte;
365 m_undefined = rhs.m_undefined;
366 m_sectionPropertyLocation = rhs.m_sectionPropertyLocation;
371 bool SectionDescriptorGenerated::verifyVariables (
void)
381 bool SectionDescriptorGenerated::readFromDevice (
void)
386 if (!m_device->readInternal (m_data, s_size))
387 ErrorAndQuit (Error::FileError,
"could not read SectionDescriptorGenerated data");
389 ReadDWord (m_afterEndCharByte, m_data + 0);
390 ReadWord (m_undefined, m_data + 4);
391 ReadDWord (m_sectionPropertyLocation, m_data + 6);
392 return verifyVariables ();
395 bool SectionDescriptorGenerated::writeToArray (
void)
399 WriteDWord (m_afterEndCharByte, m_data + 0);
400 WriteWord (m_undefined, m_data + 4);
401 WriteDWord (m_sectionPropertyLocation, m_data + 6);
405 bool SectionDescriptorGenerated::writeToDevice (
void)
410 if (!verifyVariables ())
return false;
413 if (!writeToArray ())
return false;
416 if (!m_device->writeInternal (m_data, s_size))
417 ErrorAndQuit (Error::FileError,
"could not write SectionDescriptorGenerated data");
425 SectionTableGenerated::SectionTableGenerated ()
428 for (
int i = 0; i < 2; i++)
432 for (
int i = 0; i < 2; i++)
434 m_sed [i] =
new SectionDescriptor;
435 if (!m_sed [i])
return;
439 m_numSectionDescriptors = (Word) (2);
440 m_undefined = (Word) (0);
444 SectionTableGenerated::~SectionTableGenerated ()
446 for (
int i = 0; i < 2; i++)
450 SectionTableGenerated &SectionTableGenerated::operator= (
const SectionTableGenerated &rhs)
455 NeedsDevice::operator= (rhs);
456 memcpy (m_data, rhs.m_data, s_size);
458 m_numSectionDescriptors = rhs.m_numSectionDescriptors;
459 m_undefined = rhs.m_undefined;
460 for (
int i = 0; i < 2; i++)
461 *m_sed [i] = *(rhs.m_sed [i]);
466 bool SectionTableGenerated::verifyVariables (
void)
472 for (
int i = 0; i < 2; i++)
474 if (!m_sed [i]) { ErrorAndQuit (Error::OutOfMemory,
"could not allocate memory for sed in constructor"); }
479 bool SectionTableGenerated::readFromDevice (
void)
484 if (!m_device->readInternal (m_data, s_size))
485 ErrorAndQuit (Error::FileError,
"could not read SectionTableGenerated data");
487 ReadWord (m_numSectionDescriptors, m_data + 0);
488 ReadWord (m_undefined, m_data + 2);
489 for (
int i = 0; i < 2; i++)
491 m_device->setCache (m_data + 4 + i * SectionDescriptorGenerated::s_size);
492 m_sed [i]->setDevice (m_device);
493 if (!m_sed [i]->readFromDevice ())
return false;
494 m_device->setCache (NULL);
497 return verifyVariables ();
500 bool SectionTableGenerated::writeToArray (
void)
504 WriteWord (m_numSectionDescriptors, m_data + 0);
505 WriteWord (m_undefined, m_data + 2);
506 for (
int i = 0; i < 2; i++)
508 m_device->setCache (m_data + 4 + i * SectionDescriptorGenerated::s_size);
509 m_sed [i]->setDevice (m_device);
510 if (!m_sed [i]->writeToDevice ())
return false;
511 m_device->setCache (NULL);
517 bool SectionTableGenerated::writeToDevice (
void)
522 if (!verifyVariables ())
return false;
525 if (!writeToArray ())
return false;
528 if (!m_device->writeInternal (m_data, s_size))
529 ErrorAndQuit (Error::FileError,
"could not write SectionTableGenerated data");
537 FontGenerated::FontGenerated ()
540 m_numDataBytes = (Word) (0);
541 m_family = (Byte) (0);
544 FontGenerated::~FontGenerated ()
548 FontGenerated &FontGenerated::operator= (
const FontGenerated &rhs)
553 NeedsDevice::operator= (rhs);
554 memcpy (m_data, rhs.m_data, s_size);
556 m_numDataBytes = rhs.m_numDataBytes;
557 m_family = rhs.m_family;
562 bool FontGenerated::verifyVariables (
void)
571 bool FontGenerated::readFromDevice (
void)
576 if (!m_device->readInternal (m_data, s_size))
577 ErrorAndQuit (Error::FileError,
"could not read FontGenerated data");
579 ReadWord (m_numDataBytes, m_data + 0);
580 ReadByte (m_family, m_data + 2);
581 return verifyVariables ();
584 bool FontGenerated::writeToArray (
void)
588 WriteWord (m_numDataBytes, m_data + 0);
589 WriteByte (m_family, m_data + 2);
593 bool FontGenerated::writeToDevice (
void)
598 if (!verifyVariables ())
return false;
601 if (!writeToArray ())
return false;
604 if (!m_device->writeInternal (m_data, s_size))
605 ErrorAndQuit (Error::FileError,
"could not write FontGenerated data");
613 FontTableGenerated::FontTableGenerated ()
616 m_numFonts = (Word) (0);
619 FontTableGenerated::~FontTableGenerated ()
623 FontTableGenerated &FontTableGenerated::operator= (
const FontTableGenerated &rhs)
628 NeedsDevice::operator= (rhs);
629 memcpy (m_data, rhs.m_data, s_size);
631 m_numFonts = rhs.m_numFonts;
636 bool FontTableGenerated::verifyVariables (
void)
644 bool FontTableGenerated::readFromDevice (
void)
649 if (!m_device->readInternal (m_data, s_size))
650 ErrorAndQuit (Error::FileError,
"could not read FontTableGenerated data");
652 ReadWord (m_numFonts, m_data + 0);
653 return verifyVariables ();
656 bool FontTableGenerated::writeToArray (
void)
660 WriteWord (m_numFonts, m_data + 0);
664 bool FontTableGenerated::writeToDevice (
void)
669 if (!verifyVariables ())
return false;
672 if (!writeToArray ())
return false;
675 if (!m_device->writeInternal (m_data, s_size))
676 ErrorAndQuit (Error::FileError,
"could not write FontTableGenerated data");
684 PagePointerGenerated::PagePointerGenerated ()
691 PagePointerGenerated::~PagePointerGenerated ()
695 PagePointerGenerated &PagePointerGenerated::operator= (
const PagePointerGenerated &rhs)
700 NeedsDevice::operator= (rhs);
701 memcpy (m_data, rhs.m_data, s_size);
703 m_pageNumber = rhs.m_pageNumber;
704 m_firstCharByte = rhs.m_firstCharByte;
709 bool PagePointerGenerated::verifyVariables (
void)
713 if (!Verify (Error::InvalidFormat, m_pageNumber > 0, DWord (m_pageNumber)))
return false;
718 bool PagePointerGenerated::readFromDevice (
void)
723 if (!m_device->readInternal (m_data, s_size))
724 ErrorAndQuit (Error::FileError,
"could not read PagePointerGenerated data");
726 ReadWord (m_pageNumber, m_data + 0);
727 ReadDWord (m_firstCharByte, m_data + 2);
728 return verifyVariables ();
731 bool PagePointerGenerated::writeToArray (
void)
735 WriteWord (m_pageNumber, m_data + 0);
736 WriteDWord (m_firstCharByte, m_data + 2);
740 bool PagePointerGenerated::writeToDevice (
void)
745 if (!verifyVariables ())
return false;
748 if (!writeToArray ())
return false;
751 if (!m_device->writeInternal (m_data, s_size))
752 ErrorAndQuit (Error::FileError,
"could not write PagePointerGenerated data");
760 PageTableGenerated::PageTableGenerated ()
763 m_numPagePointers = (Word) (0);
767 PageTableGenerated::~PageTableGenerated ()
771 PageTableGenerated &PageTableGenerated::operator= (
const PageTableGenerated &rhs)
776 NeedsDevice::operator= (rhs);
777 memcpy (m_data, rhs.m_data, s_size);
779 m_numPagePointers = rhs.m_numPagePointers;
785 bool PageTableGenerated::verifyVariables (
void)
790 if (!Verify (Error::Warn, m_zero == 0, DWord (m_zero)))
return false;
794 bool PageTableGenerated::readFromDevice (
void)
799 if (!m_device->readInternal (m_data, s_size))
800 ErrorAndQuit (Error::FileError,
"could not read PageTableGenerated data");
802 ReadWord (m_numPagePointers, m_data + 0);
803 ReadWord (m_zero, m_data + 2);
804 return verifyVariables ();
807 bool PageTableGenerated::writeToArray (
void)
811 WriteWord (m_numPagePointers, m_data + 0);
812 WriteWord (m_zero, m_data + 2);
816 bool PageTableGenerated::writeToDevice (
void)
821 if (!verifyVariables ())
return false;
824 if (!writeToArray ())
return false;
827 if (!m_device->writeInternal (m_data, s_size))
828 ErrorAndQuit (Error::FileError,
"could not write PageTableGenerated data");
836 FormatPointerGenerated::FormatPointerGenerated ()
843 FormatPointerGenerated::~FormatPointerGenerated ()
847 FormatPointerGenerated &FormatPointerGenerated::operator= (
const FormatPointerGenerated &rhs)
852 NeedsDevice::operator= (rhs);
853 memcpy (m_data, rhs.m_data, s_size);
855 m_afterEndCharBytePlus128 = rhs.m_afterEndCharBytePlus128;
856 m_formatPropertyOffset = rhs.m_formatPropertyOffset;
861 bool FormatPointerGenerated::verifyVariables (
void)
865 if (!Verify (Error::InvalidFormat, m_afterEndCharBytePlus128 >= 128, DWord (m_afterEndCharBytePlus128)))
return false;
866 if (!Verify (Error::InvalidFormat, m_formatPropertyOffset == 0xFFFF || m_formatPropertyOffset < 123 - 1, DWord (m_formatPropertyOffset)))
return false;
870 bool FormatPointerGenerated::readFromDevice (
void)
875 if (!m_device->readInternal (m_data, s_size))
876 ErrorAndQuit (Error::FileError,
"could not read FormatPointerGenerated data");
878 ReadDWord (m_afterEndCharBytePlus128, m_data + 0);
879 ReadWord (m_formatPropertyOffset, m_data + 4);
880 return verifyVariables ();
883 bool FormatPointerGenerated::writeToArray (
void)
887 WriteDWord (m_afterEndCharBytePlus128, m_data + 0);
888 WriteWord (m_formatPropertyOffset, m_data + 4);
892 bool FormatPointerGenerated::writeToDevice (
void)
897 if (!verifyVariables ())
return false;
900 if (!writeToArray ())
return false;
903 if (!m_device->writeInternal (m_data, s_size))
904 ErrorAndQuit (Error::FileError,
"could not write FormatPointerGenerated data");
912 FormatCharPropertyGenerated::FormatCharPropertyGenerated ()
915 WriteByte ((Byte) (1), m_data + 1);
917 WriteByte ((Byte) (24), m_data + 3);
923 m_numDataBytes = (Byte) (0);
924 m_unknown = (Byte) (1);
925 m_isBold = (unsigned) (0);
926 m_isItalic = (unsigned) (0);
927 m_fontCodeLow = (unsigned) (0);
928 m_fontSize = (Byte) (24);
929 m_isUnderlined = (unsigned) (0);
930 m_zero = (unsigned) (0);
931 m_isPageNumber = (unsigned) (0);
932 m_zero2 = (unsigned) (0);
933 m_fontCodeHigh = (unsigned) (0);
934 m_zero3 = (unsigned) (0);
935 m_position = (Byte) (0);
938 FormatCharPropertyGenerated::~FormatCharPropertyGenerated ()
942 FormatCharPropertyGenerated &FormatCharPropertyGenerated::operator= (
const FormatCharPropertyGenerated &rhs)
947 NeedsDevice::operator= (rhs);
948 UseThisMuch::operator= (rhs);
949 memcpy (m_data, rhs.m_data, s_size);
951 m_numDataBytes = rhs.m_numDataBytes;
952 m_unknown = rhs.m_unknown;
953 m_isBold = rhs.m_isBold;
954 m_isItalic = rhs.m_isItalic;
955 m_fontCodeLow = rhs.m_fontCodeLow;
956 m_fontSize = rhs.m_fontSize;
957 m_isUnderlined = rhs.m_isUnderlined;
959 m_isPageNumber = rhs.m_isPageNumber;
960 m_zero2 = rhs.m_zero2;
961 m_fontCodeHigh = rhs.m_fontCodeHigh;
962 m_zero3 = rhs.m_zero3;
963 m_position = rhs.m_position;
968 bool FormatCharPropertyGenerated::verifyVariables (
void)
972 if (!Verify (Error::InvalidFormat, m_numDataBytes >= 1 && m_numDataBytes <= s_size -
sizeof (Byte), DWord (m_numDataBytes)))
return false;
973 if (!Verify (Error::Warn, m_unknown <= 1, DWord (m_unknown)))
return false;
979 if (!Verify (Error::Warn, m_zero == 0, DWord (m_zero)))
return false;
981 if (!Verify (Error::Warn, m_zero2 == 0, DWord (m_zero2)))
return false;
983 if (!Verify (Error::Warn, m_zero3 == 0, DWord (m_zero3)))
return false;
988 bool FormatCharPropertyGenerated::readFromDevice (
void)
993 if (!m_device->readInternal (m_data, 1))
994 ErrorAndQuit (Error::FileError,
"could not read FormatCharPropertyGenerated numDataBytes");
995 ReadByte (m_numDataBytes, m_data);
996 if (!Verify (Error::InvalidFormat, m_numDataBytes >= 1 && m_numDataBytes <= s_size -
sizeof (Byte), DWord (m_numDataBytes)))
return false;
997 if (!m_device->readInternal (m_data + 1, m_numDataBytes))
998 ErrorAndQuit (Error::FileError,
"could not read FormatCharPropertyGenerated data");
1000 ReadByte (m_unknown, m_data + 1);
1001 signalHaveSetData (m_unknown == Byte (1), 0 + 8);
1002 ReadBitsFromByte (m_isBold, m_data [2], 0, 1);
1003 signalHaveSetData (m_isBold ==
bool (0), 8 + 1);
1004 ReadBitsFromByte (m_isItalic, m_data [2], 1, 1);
1005 signalHaveSetData (m_isItalic ==
bool (0), 9 + 1);
1006 ReadBitsFromByte (m_fontCodeLow, m_data [2], 2, 6);
1007 signalHaveSetData (m_fontCodeLow ==
unsigned (0), 10 + 6);
1008 ReadByte (m_fontSize, m_data + 3);
1009 signalHaveSetData (m_fontSize == Byte (24), 16 + 8);
1010 ReadBitsFromByte (m_isUnderlined, m_data [4], 0, 1);
1011 signalHaveSetData (m_isUnderlined ==
bool (0), 24 + 1);
1012 ReadBitsFromByte (m_zero, m_data [4], 1, 5);
1013 signalHaveSetData (m_zero ==
unsigned (0), 25 + 5);
1014 ReadBitsFromByte (m_isPageNumber, m_data [4], 6, 1);
1015 signalHaveSetData (m_isPageNumber ==
bool (0), 30 + 1);
1016 ReadBitsFromByte (m_zero2, m_data [4], 7, 1);
1017 signalHaveSetData (m_zero2 ==
bool (0), 31 + 1);
1018 ReadBitsFromByte (m_fontCodeHigh, m_data [5], 0, 3);
1019 signalHaveSetData (m_fontCodeHigh ==
unsigned (0), 32 + 3);
1020 ReadBitsFromByte (m_zero3, m_data [5], 3, 5);
1021 signalHaveSetData (m_zero3 ==
unsigned (0), 35 + 5);
1022 ReadByte (m_position, m_data + 6);
1023 signalHaveSetData (m_position == Byte (0), 40 + 8);
1024 return verifyVariables ();
1027 bool FormatCharPropertyGenerated::writeToArray (
void)
1032 memset (m_data, 0, s_size);
1034 WriteByte (m_numDataBytes, m_data + 0);
1035 WriteByte (m_unknown, m_data + 1);
1036 WriteBitsToByte (m_isBold, m_data [2], 0, 1);
1037 WriteBitsToByte (m_isItalic, m_data [2], 1, 1);
1038 WriteBitsToByte (m_fontCodeLow, m_data [2], 2, 6);
1039 WriteByte (m_fontSize, m_data + 3);
1040 WriteBitsToByte (m_isUnderlined, m_data [4], 0, 1);
1041 WriteBitsToByte (m_zero, m_data [4], 1, 5);
1042 WriteBitsToByte (m_isPageNumber, m_data [4], 6, 1);
1043 WriteBitsToByte (m_zero2, m_data [4], 7, 1);
1044 WriteBitsToByte (m_fontCodeHigh, m_data [5], 0, 3);
1045 WriteBitsToByte (m_zero3, m_data [5], 3, 5);
1046 WriteByte (m_position, m_data + 6);
1050 bool FormatCharPropertyGenerated::writeToDevice (
void)
1055 updateNumDataBytes ();
1058 if (!verifyVariables ())
return false;
1061 if (!writeToArray ())
return false;
1064 if (!m_device->writeInternal (m_data, 1 + (m_numDataBytes ? m_numDataBytes : getNeedNumDataBytes ())))
1065 ErrorAndQuit (Error::FileError,
"could not write FormatCharPropertyGenerated data");
1073 FormatParaPropertyTabulatorGenerated::FormatParaPropertyTabulatorGenerated ()
1076 m_indent = (Word) (0);
1077 m_type = (Byte) (0);
1078 m_zero = (Byte) (0);
1081 FormatParaPropertyTabulatorGenerated::~FormatParaPropertyTabulatorGenerated ()
1085 FormatParaPropertyTabulatorGenerated &FormatParaPropertyTabulatorGenerated::operator= (
const FormatParaPropertyTabulatorGenerated &rhs)
1090 NeedsDevice::operator= (rhs);
1091 memcpy (m_data, rhs.m_data, s_size);
1093 m_indent = rhs.m_indent;
1094 m_type = rhs.m_type;
1095 m_zero = rhs.m_zero;
1100 bool FormatParaPropertyTabulatorGenerated::verifyVariables (
void)
1105 if (!Verify (Error::InvalidFormat, m_type == 0 || m_type == 3, DWord (m_type)))
return false;
1106 if (!Verify (Error::Warn, m_zero == 0, DWord (m_zero)))
return false;
1110 bool FormatParaPropertyTabulatorGenerated::readFromDevice (
void)
1115 if (!m_device->readInternal (m_data, s_size))
1116 ErrorAndQuit (Error::FileError,
"could not read FormatParaPropertyTabulatorGenerated data");
1118 ReadWord (m_indent, m_data + 0);
1119 ReadByte (m_type, m_data + 2);
1120 ReadByte (m_zero, m_data + 3);
1121 return verifyVariables ();
1124 bool FormatParaPropertyTabulatorGenerated::writeToArray (
void)
1128 WriteWord (m_indent, m_data + 0);
1129 WriteByte (m_type, m_data + 2);
1130 WriteByte (m_zero, m_data + 3);
1134 bool FormatParaPropertyTabulatorGenerated::writeToDevice (
void)
1139 if (!verifyVariables ())
return false;
1142 if (!writeToArray ())
return false;
1145 if (!m_device->writeInternal (m_data, s_size))
1146 ErrorAndQuit (Error::FileError,
"could not write FormatParaPropertyTabulatorGenerated data");
1154 FormatParaPropertyGenerated::FormatParaPropertyGenerated ()
1157 for (
int i = 0; i < 14; i++)
1161 for (
int i = 0; i < 14; i++)
1163 m_tab [i] =
new FormatParaPropertyTabulator;
1164 if (!m_tab [i])
return;
1168 WriteByte ((Byte) (60), m_data + 1);
1170 WriteWord ((Word) (30), m_data + 3);
1171 memset (m_data + 5, 0, 6);
1172 WriteWord ((Word) (240), m_data + 11);
1173 memset (m_data + 13, 0, 10);
1174 memset (m_data + 23, 0, 56);
1177 m_numDataBytes = (Byte) (0);
1178 m_magic0_60_or_61 = (Byte) (60);
1179 m_alignment = (Byte) (0);
1180 m_magic30 = (Word) (30);
1181 m_rightIndent = (Word) (0);
1182 m_leftIndent = (Word) (0);
1183 m_leftIndentFirstLine = (Short) (0);
1184 m_lineSpacing = (Word) (240);
1185 for (
int i = 0; i < 2; i++)
1186 m_zero [i] = (Word) (0);
1187 m_headerOrFooter = (unsigned) (0);
1188 m_isNotNormalParagraph = (unsigned) (0);
1189 m_isOnFirstPage = (unsigned) (0);
1190 m_isObject = (unsigned) (0);
1191 m_zero2 = (unsigned) (0);
1192 memset (m_zero3, (Byte) (0), 5 *
sizeof (Byte));
1196 FormatParaPropertyGenerated::~FormatParaPropertyGenerated ()
1198 for (
int i = 0; i < 14; i++)
1202 FormatParaPropertyGenerated &FormatParaPropertyGenerated::operator= (
const FormatParaPropertyGenerated &rhs)
1207 NeedsDevice::operator= (rhs);
1208 UseThisMuch::operator= (rhs);
1209 memcpy (m_data, rhs.m_data, s_size);
1211 m_numDataBytes = rhs.m_numDataBytes;
1212 m_magic0_60_or_61 = rhs.m_magic0_60_or_61;
1213 m_alignment = rhs.m_alignment;
1214 m_magic30 = rhs.m_magic30;
1215 m_rightIndent = rhs.m_rightIndent;
1216 m_leftIndent = rhs.m_leftIndent;
1217 m_leftIndentFirstLine = rhs.m_leftIndentFirstLine;
1218 m_lineSpacing = rhs.m_lineSpacing;
1219 memcpy (m_zero, rhs.m_zero, 2 * sizeof (Word));
1220 m_headerOrFooter = rhs.m_headerOrFooter;
1221 m_isNotNormalParagraph = rhs.m_isNotNormalParagraph;
1222 m_isOnFirstPage = rhs.m_isOnFirstPage;
1223 m_isObject = rhs.m_isObject;
1224 m_zero2 = rhs.m_zero2;
1225 memcpy (m_zero3, rhs.m_zero3, 5 * sizeof (Byte));
1226 for (
int i = 0; i < 14; i++)
1227 *m_tab [i] = *(rhs.m_tab [i]);
1232 bool FormatParaPropertyGenerated::verifyVariables (
void)
1236 if (!Verify (Error::InvalidFormat, m_numDataBytes >= 1 && m_numDataBytes <= s_size -
sizeof (Byte), DWord (m_numDataBytes)))
return false;
1237 if (!Verify (Error::Warn, m_magic0_60_or_61 == 0 || m_magic0_60_or_61 == 60 || m_magic0_60_or_61 == 61, DWord (m_magic0_60_or_61)))
return false;
1239 if (!Verify (Error::Warn, m_magic30 == 30, DWord (m_magic30)))
return false;
1244 for (
int i = 0; i < 2; i++)
1246 if (!Verify (Error::Warn, m_zero [i] == 0,
long (m_zero)))
return false;
1252 if (!Verify (Error::Warn, m_zero2 == 0, DWord (m_zero2)))
return false;
1253 for (
int i = 0; i < 5; i++)
1255 if (!Verify (Error::Warn, m_zero3 [i] == 0,
long (m_zero3)))
return false;
1257 for (
int i = 0; i < 14; i++)
1259 if (!m_tab [i]) { ErrorAndQuit (Error::OutOfMemory,
"could not allocate memory for tab in constructor"); }
1264 bool FormatParaPropertyGenerated::readFromDevice (
void)
1269 if (!m_device->readInternal (m_data, 1))
1270 ErrorAndQuit (Error::FileError,
"could not read FormatParaPropertyGenerated numDataBytes");
1271 ReadByte (m_numDataBytes, m_data);
1272 if (!Verify (Error::InvalidFormat, m_numDataBytes >= 1 && m_numDataBytes <= s_size -
sizeof (Byte), DWord (m_numDataBytes)))
return false;
1273 if (!m_device->readInternal (m_data + 1, m_numDataBytes))
1274 ErrorAndQuit (Error::FileError,
"could not read FormatParaPropertyGenerated data");
1276 ReadByte (m_magic0_60_or_61, m_data + 1);
1277 signalHaveSetData (m_magic0_60_or_61 == Byte (60), 0 + 8);
1278 ReadByte (m_alignment, m_data + 2);
1279 signalHaveSetData (m_alignment == Byte (0), 8 + 8);
1280 ReadWord (m_magic30, m_data + 3);
1281 signalHaveSetData (m_magic30 == Word (30), 16 + 16);
1282 ReadWord (m_rightIndent, m_data + 5);
1283 signalHaveSetData (m_rightIndent == Word (0), 32 + 16);
1284 ReadWord (m_leftIndent, m_data + 7);
1285 signalHaveSetData (m_leftIndent == Word (0), 48 + 16);
1286 ReadShort (m_leftIndentFirstLine, m_data + 9);
1287 signalHaveSetData (m_leftIndentFirstLine == Short (0), 64 + 16);
1288 ReadWord (m_lineSpacing, m_data + 11);
1289 signalHaveSetData (m_lineSpacing == Word (240), 80 + 16);
1290 for (
int i = 0; i < 2; i++)
1292 ReadWord (m_zero [i], m_data + 13 + i *
sizeof (Word));
1295 ReadBitsFromByte (m_headerOrFooter, m_data [17], 0, 1);
1296 signalHaveSetData (m_headerOrFooter ==
bool (0), 128 + 1);
1297 ReadBitsFromByte (m_isNotNormalParagraph, m_data [17], 1, 2);
1298 signalHaveSetData (m_isNotNormalParagraph ==
unsigned (0), 129 + 2);
1299 ReadBitsFromByte (m_isOnFirstPage, m_data [17], 3, 1);
1300 signalHaveSetData (m_isOnFirstPage ==
bool (0), 131 + 1);
1301 ReadBitsFromByte (m_isObject, m_data [17], 4, 1);
1302 signalHaveSetData (m_isObject ==
bool (0), 132 + 1);
1303 ReadBitsFromByte (m_zero2, m_data [17], 5, 3);
1304 signalHaveSetData (m_zero2 ==
unsigned (0), 133 + 3);
1305 memcpy (m_zero3, m_data + 18, 5 *
sizeof (Byte));
1306 for (
int i = 0; i < 14; i++)
1308 m_device->setCache (m_data + 23 + i * FormatParaPropertyTabulatorGenerated::s_size);
1309 m_tab [i]->setDevice (m_device);
1310 if (!m_tab [i]->readFromDevice ())
return false;
1311 m_device->setCache (NULL);
1314 return verifyVariables ();
1317 bool FormatParaPropertyGenerated::writeToArray (
void)
1322 memset (m_data, 0, s_size);
1324 WriteByte (m_numDataBytes, m_data + 0);
1325 WriteByte (m_magic0_60_or_61, m_data + 1);
1326 WriteByte (m_alignment, m_data + 2);
1327 WriteWord (m_magic30, m_data + 3);
1328 WriteWord (m_rightIndent, m_data + 5);
1329 WriteWord (m_leftIndent, m_data + 7);
1330 WriteShort (m_leftIndentFirstLine, m_data + 9);
1331 WriteWord (m_lineSpacing, m_data + 11);
1332 for (
int i = 0; i < 2; i++)
1334 WriteWord (m_zero [i], m_data + 13 + i *
sizeof (Word));
1337 WriteBitsToByte (m_headerOrFooter, m_data [17], 0, 1);
1338 WriteBitsToByte (m_isNotNormalParagraph, m_data [17], 1, 2);
1339 WriteBitsToByte (m_isOnFirstPage, m_data [17], 3, 1);
1340 WriteBitsToByte (m_isObject, m_data [17], 4, 1);
1341 WriteBitsToByte (m_zero2, m_data [17], 5, 3);
1342 memcpy (m_data + 18, m_zero3, 5 *
sizeof (Byte));
1343 for (
int i = 0; i < 14; i++)
1345 m_device->setCache (m_data + 23 + i * FormatParaPropertyTabulatorGenerated::s_size);
1346 m_tab [i]->setDevice (m_device);
1347 if (!m_tab [i]->writeToDevice ())
return false;
1348 m_device->setCache (NULL);
1354 bool FormatParaPropertyGenerated::writeToDevice (
void)
1359 updateNumDataBytes ();
1362 if (!verifyVariables ())
return false;
1365 if (!writeToArray ())
return false;
1368 if (!m_device->writeInternal (m_data, 1 + (m_numDataBytes ? m_numDataBytes : getNeedNumDataBytes ())))
1369 ErrorAndQuit (Error::FileError,
"could not write FormatParaPropertyGenerated data");
1377 FormatInfoPageGenerated::FormatInfoPageGenerated ()
1381 memset (m_packedStructs, (Byte) (0), 123 *
sizeof (Byte));
1382 m_numFormatPointers = (Byte) (0);
1385 FormatInfoPageGenerated::~FormatInfoPageGenerated ()
1389 FormatInfoPageGenerated &FormatInfoPageGenerated::operator= (
const FormatInfoPageGenerated &rhs)
1394 NeedsDevice::operator= (rhs);
1395 memcpy (m_data, rhs.m_data, s_size);
1397 m_firstCharBytePlus128 = rhs.m_firstCharBytePlus128;
1398 memcpy (m_packedStructs, rhs.m_packedStructs, 123 * sizeof (Byte));
1399 m_numFormatPointers = rhs.m_numFormatPointers;
1404 bool FormatInfoPageGenerated::verifyVariables (
void)
1408 if (!Verify (Error::InvalidFormat, m_firstCharBytePlus128 >= 128, DWord (m_firstCharBytePlus128)))
return false;
1414 bool FormatInfoPageGenerated::readFromDevice (
void)
1419 if (!m_device->readInternal (m_data, s_size))
1420 ErrorAndQuit (Error::FileError,
"could not read FormatInfoPageGenerated data");
1422 ReadDWord (m_firstCharBytePlus128, m_data + 0);
1423 memcpy (m_packedStructs, m_data + 4, 123 *
sizeof (Byte));
1424 ReadByte (m_numFormatPointers, m_data + 127);
1425 return verifyVariables ();
1428 bool FormatInfoPageGenerated::writeToArray (
void)
1432 WriteDWord (m_firstCharBytePlus128, m_data + 0);
1433 memcpy (m_data + 4, m_packedStructs, 123 *
sizeof (Byte));
1434 WriteByte (m_numFormatPointers, m_data + 127);
1438 bool FormatInfoPageGenerated::writeToDevice (
void)
1443 if (!verifyVariables ())
return false;
1446 if (!writeToArray ())
return false;
1449 if (!m_device->writeInternal (m_data, s_size))
1450 ErrorAndQuit (Error::FileError,
"could not write FormatInfoPageGenerated data");
1458 BMP_BitmapFileHeaderGenerated::BMP_BitmapFileHeaderGenerated ()
1461 m_magic = (Word) (Word (
'B') + (Word (
'M') << 8));
1463 for (
int i = 0; i < 2; i++)
1464 m_zero [i] = (Word) (0);
1468 BMP_BitmapFileHeaderGenerated::~BMP_BitmapFileHeaderGenerated ()
1472 BMP_BitmapFileHeaderGenerated &BMP_BitmapFileHeaderGenerated::operator= (
const BMP_BitmapFileHeaderGenerated &rhs)
1477 NeedsDevice::operator= (rhs);
1478 memcpy (m_data, rhs.m_data, s_size);
1480 m_magic = rhs.m_magic;
1481 m_totalBytes = rhs.m_totalBytes;
1482 memcpy (m_zero, rhs.m_zero, 2 * sizeof (Word));
1483 m_actualImageOffset = rhs.m_actualImageOffset;
1488 bool BMP_BitmapFileHeaderGenerated::verifyVariables (
void)
1492 if (!Verify (Error::InvalidFormat, m_magic == Word (
'B') + (Word (
'M') << 8), DWord (m_magic)))
return false;
1494 for (
int i = 0; i < 2; i++)
1496 if (!Verify (Error::Warn, m_zero [i] == 0,
long (m_zero)))
return false;
1502 bool BMP_BitmapFileHeaderGenerated::readFromDevice (
void)
1507 if (!m_device->readInternal (m_data, s_size))
1508 ErrorAndQuit (Error::FileError,
"could not read BMP_BitmapFileHeaderGenerated data");
1510 ReadWord (m_magic, m_data + 0);
1511 ReadDWord (m_totalBytes, m_data + 2);
1512 for (
int i = 0; i < 2; i++)
1514 ReadWord (m_zero [i], m_data + 6 + i *
sizeof (Word));
1517 ReadDWord (m_actualImageOffset, m_data + 10);
1518 return verifyVariables ();
1521 bool BMP_BitmapFileHeaderGenerated::writeToArray (
void)
1525 WriteWord (m_magic, m_data + 0);
1526 WriteDWord (m_totalBytes, m_data + 2);
1527 for (
int i = 0; i < 2; i++)
1529 WriteWord (m_zero [i], m_data + 6 + i *
sizeof (Word));
1532 WriteDWord (m_actualImageOffset, m_data + 10);
1536 bool BMP_BitmapFileHeaderGenerated::writeToDevice (
void)
1541 if (!verifyVariables ())
return false;
1544 if (!writeToArray ())
return false;
1547 if (!m_device->writeInternal (m_data, s_size))
1548 ErrorAndQuit (Error::FileError,
"could not write BMP_BitmapFileHeaderGenerated data");
1556 BMP_BitmapInfoHeaderGenerated::BMP_BitmapInfoHeaderGenerated ()
1559 m_numHeaderBytes = (DWord) (s_size);
1562 m_numPlanes = (Word) (1);
1564 m_compression = (DWord) (0);
1565 m_sizeImage = (DWord) (0);
1566 m_xPixelsPerMeter = (Long) (0);
1567 m_yPixelsPerMeter = (Long) (0);
1568 m_coloursUsed = (DWord) (0);
1572 BMP_BitmapInfoHeaderGenerated::~BMP_BitmapInfoHeaderGenerated ()
1576 BMP_BitmapInfoHeaderGenerated &BMP_BitmapInfoHeaderGenerated::operator= (
const BMP_BitmapInfoHeaderGenerated &rhs)
1581 NeedsDevice::operator= (rhs);
1582 memcpy (m_data, rhs.m_data, s_size);
1584 m_numHeaderBytes = rhs.m_numHeaderBytes;
1585 m_width = rhs.m_width;
1586 m_height = rhs.m_height;
1587 m_numPlanes = rhs.m_numPlanes;
1588 m_bitsPerPixel = rhs.m_bitsPerPixel;
1589 m_compression = rhs.m_compression;
1590 m_sizeImage = rhs.m_sizeImage;
1591 m_xPixelsPerMeter = rhs.m_xPixelsPerMeter;
1592 m_yPixelsPerMeter = rhs.m_yPixelsPerMeter;
1593 m_coloursUsed = rhs.m_coloursUsed;
1594 m_coloursImportant = rhs.m_coloursImportant;
1599 bool BMP_BitmapInfoHeaderGenerated::verifyVariables (
void)
1603 if (!Verify (Error::InvalidFormat, m_numHeaderBytes == DWord (s_size), DWord (m_numHeaderBytes)))
return false;
1606 if (!Verify (Error::InvalidFormat, m_numPlanes == 1, DWord (m_numPlanes)))
return false;
1607 if (!Verify (Error::Warn, m_bitsPerPixel == 1 || m_bitsPerPixel == 4 || m_bitsPerPixel == 8 || m_bitsPerPixel == 24, DWord (m_bitsPerPixel)))
return false;
1617 bool BMP_BitmapInfoHeaderGenerated::readFromDevice (
void)
1622 if (!m_device->readInternal (m_data, s_size))
1623 ErrorAndQuit (Error::FileError,
"could not read BMP_BitmapInfoHeaderGenerated data");
1625 ReadDWord (m_numHeaderBytes, m_data + 0);
1626 ReadLong (m_width, m_data + 4);
1627 ReadLong (m_height, m_data + 8);
1628 ReadWord (m_numPlanes, m_data + 12);
1629 ReadWord (m_bitsPerPixel, m_data + 14);
1630 ReadDWord (m_compression, m_data + 16);
1631 ReadDWord (m_sizeImage, m_data + 20);
1632 ReadLong (m_xPixelsPerMeter, m_data + 24);
1633 ReadLong (m_yPixelsPerMeter, m_data + 28);
1634 ReadDWord (m_coloursUsed, m_data + 32);
1635 ReadDWord (m_coloursImportant, m_data + 36);
1636 return verifyVariables ();
1639 bool BMP_BitmapInfoHeaderGenerated::writeToArray (
void)
1643 WriteDWord (m_numHeaderBytes, m_data + 0);
1644 WriteLong (m_width, m_data + 4);
1645 WriteLong (m_height, m_data + 8);
1646 WriteWord (m_numPlanes, m_data + 12);
1647 WriteWord (m_bitsPerPixel, m_data + 14);
1648 WriteDWord (m_compression, m_data + 16);
1649 WriteDWord (m_sizeImage, m_data + 20);
1650 WriteLong (m_xPixelsPerMeter, m_data + 24);
1651 WriteLong (m_yPixelsPerMeter, m_data + 28);
1652 WriteDWord (m_coloursUsed, m_data + 32);
1653 WriteDWord (m_coloursImportant, m_data + 36);
1657 bool BMP_BitmapInfoHeaderGenerated::writeToDevice (
void)
1662 if (!verifyVariables ())
return false;
1665 if (!writeToArray ())
return false;
1668 if (!m_device->writeInternal (m_data, s_size))
1669 ErrorAndQuit (Error::FileError,
"could not write BMP_BitmapInfoHeaderGenerated data");
1677 BMP_BitmapColourIndexGenerated::BMP_BitmapColourIndexGenerated ()
1683 m_reserved = (Byte) (0);
1686 BMP_BitmapColourIndexGenerated::~BMP_BitmapColourIndexGenerated ()
1690 BMP_BitmapColourIndexGenerated &BMP_BitmapColourIndexGenerated::operator= (
const BMP_BitmapColourIndexGenerated &rhs)
1695 NeedsDevice::operator= (rhs);
1696 memcpy (m_data, rhs.m_data, s_size);
1698 m_blue = rhs.m_blue;
1699 m_green = rhs.m_green;
1701 m_reserved = rhs.m_reserved;
1706 bool BMP_BitmapColourIndexGenerated::verifyVariables (
void)
1717 bool BMP_BitmapColourIndexGenerated::readFromDevice (
void)
1722 if (!m_device->readInternal (m_data, s_size))
1723 ErrorAndQuit (Error::FileError,
"could not read BMP_BitmapColourIndexGenerated data");
1725 ReadByte (m_blue, m_data + 0);
1726 ReadByte (m_green, m_data + 1);
1727 ReadByte (m_red, m_data + 2);
1728 ReadByte (m_reserved, m_data + 3);
1729 return verifyVariables ();
1732 bool BMP_BitmapColourIndexGenerated::writeToArray (
void)
1736 WriteByte (m_blue, m_data + 0);
1737 WriteByte (m_green, m_data + 1);
1738 WriteByte (m_red, m_data + 2);
1739 WriteByte (m_reserved, m_data + 3);
1743 bool BMP_BitmapColourIndexGenerated::writeToDevice (
void)
1748 if (!verifyVariables ())
return false;
1751 if (!writeToArray ())
return false;
1754 if (!m_device->writeInternal (m_data, s_size))
1755 ErrorAndQuit (Error::FileError,
"could not write BMP_BitmapColourIndexGenerated data");
1763 BitmapHeaderGenerated::BitmapHeaderGenerated ()
1766 m_zero = (Word) (0);
1767 m_width = (Word) (0);
1768 m_height = (Word) (0);
1769 m_widthBytes = (Word) (0);
1770 m_numPlanes = (Byte) (0);
1771 m_bitsPerPixel = (Byte) (0);
1772 m_zero2 = (DWord) (0);
1775 BitmapHeaderGenerated::~BitmapHeaderGenerated ()
1779 BitmapHeaderGenerated &BitmapHeaderGenerated::operator= (
const BitmapHeaderGenerated &rhs)
1784 NeedsDevice::operator= (rhs);
1785 memcpy (m_data, rhs.m_data, s_size);
1787 m_zero = rhs.m_zero;
1788 m_width = rhs.m_width;
1789 m_height = rhs.m_height;
1790 m_widthBytes = rhs.m_widthBytes;
1791 m_numPlanes = rhs.m_numPlanes;
1792 m_bitsPerPixel = rhs.m_bitsPerPixel;
1793 m_zero2 = rhs.m_zero2;
1798 bool BitmapHeaderGenerated::verifyVariables (
void)
1802 if (!Verify (Error::InvalidFormat, m_zero == 0, DWord (m_zero)))
return false;
1806 if (!Verify (Error::InvalidFormat, m_numPlanes == 0 || m_numPlanes == 1, DWord (m_numPlanes)))
return false;
1808 if (!Verify (Error::InvalidFormat, m_zero2 == 0, DWord (m_zero2)))
return false;
1812 bool BitmapHeaderGenerated::readFromDevice (
void)
1817 if (!m_device->readInternal (m_data, s_size))
1818 ErrorAndQuit (Error::FileError,
"could not read BitmapHeaderGenerated data");
1820 ReadWord (m_zero, m_data + 0);
1821 ReadWord (m_width, m_data + 2);
1822 ReadWord (m_height, m_data + 4);
1823 ReadWord (m_widthBytes, m_data + 6);
1824 ReadByte (m_numPlanes, m_data + 8);
1825 ReadByte (m_bitsPerPixel, m_data + 9);
1826 ReadDWord (m_zero2, m_data + 10);
1827 return verifyVariables ();
1830 bool BitmapHeaderGenerated::writeToArray (
void)
1834 WriteWord (m_zero, m_data + 0);
1835 WriteWord (m_width, m_data + 2);
1836 WriteWord (m_height, m_data + 4);
1837 WriteWord (m_widthBytes, m_data + 6);
1838 WriteByte (m_numPlanes, m_data + 8);
1839 WriteByte (m_bitsPerPixel, m_data + 9);
1840 WriteDWord (m_zero2, m_data + 10);
1844 bool BitmapHeaderGenerated::writeToDevice (
void)
1849 if (!verifyVariables ())
return false;
1852 if (!writeToArray ())
return false;
1855 if (!m_device->writeInternal (m_data, s_size))
1856 ErrorAndQuit (Error::FileError,
"could not write BitmapHeaderGenerated data");
1864 WMFHeaderGenerated::WMFHeaderGenerated ()
1867 m_fieldType = (Word) (1);
1868 m_headerSize = (Word) (9);
1869 m_winVersion = (Word) (0x0300);
1871 m_numObjects = (Word) (0);
1873 m_zero = (Word) (0);
1876 WMFHeaderGenerated::~WMFHeaderGenerated ()
1880 WMFHeaderGenerated &WMFHeaderGenerated::operator= (
const WMFHeaderGenerated &rhs)
1885 NeedsDevice::operator= (rhs);
1886 memcpy (m_data, rhs.m_data, s_size);
1888 m_fieldType = rhs.m_fieldType;
1889 m_headerSize = rhs.m_headerSize;
1890 m_winVersion = rhs.m_winVersion;
1891 m_fileSize = rhs.m_fileSize;
1892 m_numObjects = rhs.m_numObjects;
1893 m_maxRecordSize = rhs.m_maxRecordSize;
1894 m_zero = rhs.m_zero;
1899 bool WMFHeaderGenerated::verifyVariables (
void)
1903 if (!Verify (Error::InvalidFormat, m_fieldType == 1, DWord (m_fieldType)))
return false;
1904 if (!Verify (Error::InvalidFormat, m_headerSize == 9, DWord (m_headerSize)))
return false;
1905 if (!Verify (Error::Warn, m_winVersion <= 0x0300, DWord (m_winVersion)))
return false;
1909 if (!Verify (Error::Warn, m_zero == 0, DWord (m_zero)))
return false;
1913 bool WMFHeaderGenerated::readFromDevice (
void)
1918 if (!m_device->readInternal (m_data, s_size))
1919 ErrorAndQuit (Error::FileError,
"could not read WMFHeaderGenerated data");
1921 ReadWord (m_fieldType, m_data + 0);
1922 ReadWord (m_headerSize, m_data + 2);
1923 ReadWord (m_winVersion, m_data + 4);
1924 ReadDWord (m_fileSize, m_data + 6);
1925 ReadWord (m_numObjects, m_data + 10);
1926 ReadDWord (m_maxRecordSize, m_data + 12);
1927 ReadWord (m_zero, m_data + 16);
1928 return verifyVariables ();
1931 bool WMFHeaderGenerated::writeToArray (
void)
1935 WriteWord (m_fieldType, m_data + 0);
1936 WriteWord (m_headerSize, m_data + 2);
1937 WriteWord (m_winVersion, m_data + 4);
1938 WriteDWord (m_fileSize, m_data + 6);
1939 WriteWord (m_numObjects, m_data + 10);
1940 WriteDWord (m_maxRecordSize, m_data + 12);
1941 WriteWord (m_zero, m_data + 16);
1945 bool WMFHeaderGenerated::writeToDevice (
void)
1950 if (!verifyVariables ())
return false;
1953 if (!writeToArray ())
return false;
1956 if (!m_device->writeInternal (m_data, s_size))
1957 ErrorAndQuit (Error::FileError,
"could not write WMFHeaderGenerated data");
1965 ImageGenerated::ImageGenerated ()
1971 m_bmh =
new BitmapHeader;
1978 m_MFP_unknown = (Word) (0);
1979 m_indent = (Word) (0);
1982 m_zero = (Word) (0);
1984 m_numHeaderBytes = (Word) (s_size);
1986 m_horizontalScalingRel1000 = (Word) (1000);
1987 m_verticalScalingRel1000 = (Word) (1000);
1990 ImageGenerated::~ImageGenerated ()
1995 ImageGenerated &ImageGenerated::operator= (
const ImageGenerated &rhs)
2000 NeedsDevice::operator= (rhs);
2001 memcpy (m_data, rhs.m_data, s_size);
2003 m_mappingMode = rhs.m_mappingMode;
2004 m_MFP_width = rhs.m_MFP_width;
2005 m_MFP_height = rhs.m_MFP_height;
2006 m_MFP_unknown = rhs.m_MFP_unknown;
2007 m_indent = rhs.m_indent;
2008 m_width = rhs.m_width;
2009 m_height = rhs.m_height;
2010 m_zero = rhs.m_zero;
2011 *m_bmh = *(rhs.m_bmh);
2012 m_numHeaderBytes = rhs.m_numHeaderBytes;
2013 m_numDataBytes = rhs.m_numDataBytes;
2014 m_horizontalScalingRel1000 = rhs.m_horizontalScalingRel1000;
2015 m_verticalScalingRel1000 = rhs.m_verticalScalingRel1000;
2020 bool ImageGenerated::verifyVariables (
void)
2024 if (!Verify (Error::InvalidFormat, m_mappingMode != 0xE4, DWord (m_mappingMode)))
return false;
2027 if (!Verify (Error::Warn, m_MFP_unknown==0, DWord (m_MFP_unknown)))
return false;
2032 if (!m_bmh) { ErrorAndQuit (Error::OutOfMemory,
"could not allocate memory for bmh in constructor"); }
2033 if (!Verify (Error::InvalidFormat, m_numHeaderBytes == s_size, DWord (m_numHeaderBytes)))
return false;
2040 bool ImageGenerated::readFromDevice (
void)
2045 if (!m_device->readInternal (m_data, s_size))
2046 ErrorAndQuit (Error::FileError,
"could not read ImageGenerated data");
2048 ReadWord (m_mappingMode, m_data + 0);
2049 ReadWord (m_MFP_width, m_data + 2);
2050 ReadWord (m_MFP_height, m_data + 4);
2051 ReadWord (m_MFP_unknown, m_data + 6);
2052 ReadWord (m_indent, m_data + 8);
2053 ReadWord (m_width, m_data + 10);
2054 ReadWord (m_height, m_data + 12);
2055 ReadWord (m_zero, m_data + 14);
2057 m_device->setCache (m_data + 16);
2058 m_bmh->setDevice (m_device);
2059 if (!m_bmh->readFromDevice ())
return false;
2060 m_device->setCache (NULL);
2062 ReadWord (m_numHeaderBytes, m_data + 30);
2063 ReadDWord (m_numDataBytes, m_data + 32);
2064 ReadWord (m_horizontalScalingRel1000, m_data + 36);
2065 ReadWord (m_verticalScalingRel1000, m_data + 38);
2066 return verifyVariables ();
2069 bool ImageGenerated::writeToArray (
void)
2073 WriteWord (m_mappingMode, m_data + 0);
2074 WriteWord (m_MFP_width, m_data + 2);
2075 WriteWord (m_MFP_height, m_data + 4);
2076 WriteWord (m_MFP_unknown, m_data + 6);
2077 WriteWord (m_indent, m_data + 8);
2078 WriteWord (m_width, m_data + 10);
2079 WriteWord (m_height, m_data + 12);
2080 WriteWord (m_zero, m_data + 14);
2082 m_device->setCache (m_data + 16);
2083 m_bmh->setDevice (m_device);
2084 if (!m_bmh->writeToDevice ())
return false;
2085 m_device->setCache (NULL);
2087 WriteWord (m_numHeaderBytes, m_data + 30);
2088 WriteDWord (m_numDataBytes, m_data + 32);
2089 WriteWord (m_horizontalScalingRel1000, m_data + 36);
2090 WriteWord (m_verticalScalingRel1000, m_data + 38);
2094 bool ImageGenerated::writeToDevice (
void)
2099 if (!verifyVariables ())
return false;
2102 if (!writeToArray ())
return false;
2105 if (!m_device->writeInternal (m_data, s_size))
2106 ErrorAndQuit (Error::FileError,
"could not write ImageGenerated data");
2114 OLEGenerated::OLEGenerated ()
2118 m_zero = (DWord) (0);
2123 m_zero2 = (Word) (0);
2125 m_zero3 = (DWord) (0);
2127 m_zero4 = (Word) (0);
2129 m_zero5 = (DWord) (0);
2134 OLEGenerated::~OLEGenerated ()
2138 OLEGenerated &OLEGenerated::operator= (
const OLEGenerated &rhs)
2143 NeedsDevice::operator= (rhs);
2144 memcpy (m_data, rhs.m_data, s_size);
2146 m_mappingMode = rhs.m_mappingMode;
2147 m_zero = rhs.m_zero;
2148 m_objectType = rhs.m_objectType;
2149 m_indent = rhs.m_indent;
2150 m_width = rhs.m_width;
2151 m_height = rhs.m_height;
2152 m_zero2 = rhs.m_zero2;
2153 m_numDataBytes = rhs.m_numDataBytes;
2154 m_zero3 = rhs.m_zero3;
2155 m_objectName = rhs.m_objectName;
2156 m_zero4 = rhs.m_zero4;
2157 m_numHeaderBytes = rhs.m_numHeaderBytes;
2158 m_zero5 = rhs.m_zero5;
2159 m_widthScaledRel1000 = rhs.m_widthScaledRel1000;
2160 m_heightScaledRel1000 = rhs.m_heightScaledRel1000;
2165 bool OLEGenerated::verifyVariables (
void)
2169 if (!Verify (Error::InvalidFormat, m_mappingMode == 0xE4, DWord (m_mappingMode)))
return false;
2170 if (!Verify (Error::Warn, m_zero == 0, DWord (m_zero)))
return false;
2171 if (!Verify (Error::InvalidFormat, m_objectType >= 1 && m_objectType <= 3, DWord (m_objectType)))
return false;
2175 if (!Verify (Error::Warn, m_zero2 == 0, DWord (m_zero2)))
return false;
2177 if (!Verify (Error::Warn, m_zero3 == 0, DWord (m_zero3)))
return false;
2179 if (!Verify (Error::Warn, m_zero4 == 0, DWord (m_zero4)))
return false;
2180 if (!Verify (Error::InvalidFormat, m_numHeaderBytes == s_size, DWord (m_numHeaderBytes)))
return false;
2181 if (!Verify (Error::Warn, m_zero5 == 0, DWord (m_zero5)))
return false;
2187 bool OLEGenerated::readFromDevice (
void)
2192 if (!m_device->readInternal (m_data, s_size))
2193 ErrorAndQuit (Error::FileError,
"could not read OLEGenerated data");
2195 ReadWord (m_mappingMode, m_data + 0);
2196 ReadDWord (m_zero, m_data + 2);
2197 ReadWord (m_objectType, m_data + 6);
2198 ReadWord (m_indent, m_data + 8);
2199 ReadWord (m_width, m_data + 10);
2200 ReadWord (m_height, m_data + 12);
2201 ReadWord (m_zero2, m_data + 14);
2202 ReadDWord (m_numDataBytes, m_data + 16);
2203 ReadDWord (m_zero3, m_data + 20);
2204 ReadDWord (m_objectName, m_data + 24);
2205 ReadWord (m_zero4, m_data + 28);
2206 ReadWord (m_numHeaderBytes, m_data + 30);
2207 ReadDWord (m_zero5, m_data + 32);
2208 ReadWord (m_widthScaledRel1000, m_data + 36);
2209 ReadWord (m_heightScaledRel1000, m_data + 38);
2210 return verifyVariables ();
2213 bool OLEGenerated::writeToArray (
void)
2217 WriteWord (m_mappingMode, m_data + 0);
2218 WriteDWord (m_zero, m_data + 2);
2219 WriteWord (m_objectType, m_data + 6);
2220 WriteWord (m_indent, m_data + 8);
2221 WriteWord (m_width, m_data + 10);
2222 WriteWord (m_height, m_data + 12);
2223 WriteWord (m_zero2, m_data + 14);
2224 WriteDWord (m_numDataBytes, m_data + 16);
2225 WriteDWord (m_zero3, m_data + 20);
2226 WriteDWord (m_objectName, m_data + 24);
2227 WriteWord (m_zero4, m_data + 28);
2228 WriteWord (m_numHeaderBytes, m_data + 30);
2229 WriteDWord (m_zero5, m_data + 32);
2230 WriteWord (m_widthScaledRel1000, m_data + 36);
2231 WriteWord (m_heightScaledRel1000, m_data + 38);
2235 bool OLEGenerated::writeToDevice (
void)
2240 if (!verifyVariables ())
return false;
2243 if (!writeToArray ())
return false;
2246 if (!m_device->writeInternal (m_data, s_size))
2247 ErrorAndQuit (Error::FileError,
"could not write OLEGenerated data");