/* This file is part of the LibMSWrite Library Copyright (C) 2001-2003 Clarence Dang This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License Version 2 as published by the Free Software Foundation. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License Version 2 for more details. You should have received a copy of the GNU Library General Public License Version 2 along with this library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. LibMSWrite Project Website: http://sourceforge.net/projects/libmswrite/ */ /* * structures_generated - Internal MS Write file structures * This file was generated by make_structures_generated 0.51pre 2003/07/09. * ALL CHANGES MADE TO THIS FILE "WILL BE LOST IN TIME LIKE TEARS IN RAIN"! */ #ifndef __STRUCTURES_GENERATED_H__ #define __STRUCTURES_GENERATED_H__ #include "libmswrite_defs.h" namespace MSWrite { // $Id: structures_generated.h 490579 2005-12-22 12:32:17Z scripty $ // // This file is part of the LibMSWrite Library // Copyright (C) 2001-2003 Clarence Dang // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Library General Public // License Version 2 as published by the Free Software Foundation. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // Library General Public License Version 2 for more details. // // You should have received a copy of the GNU Library General Public License // Version 2 along with this library; see the file COPYING.LIB. If not, // write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, // Boston, MA 02110-1301, USA. // // LibMSWrite Project Website: // http://sourceforge.net/projects/libmswrite/ // // DESCRIPTION // // format.xml describes the basic structures that can be found in Microsoft(r) // Windows(r) Write files. The majority of the information in format.xml // (excluding the Windows(r) BMP and WMF structures) is the result of // investigative file format work but a few portions of format.xml are derived // from a specification freely available from http://www.wotsit.org/. The BMP // & WMF structures are from somewhere on the Internet (they are freely and // readily available) and can also be found in many programming books. // // The data types and numbers in this document are intended to be interpreted // in the way they would be in Win3.x (Little Endian, 16-bit). // // // Structure Fields: // // name #REQUIRED // type #IMPLIED "Word" // default #IMPLIED "" // description #IMPLIED "" (also valid for Structures) // verify #IMPLIED "" // failVerify #IMPLIED "InvalidFormat" // rep #IMPLIED "1" // useThisMuch #IMPLIED "0" // provideMethod #IMPLIED "0" // protected #IMPLIED "0" (also valid for Structures) // // All structure names will be automatically postfixed with "Generated". // Derive structures from "Generated" structures (in structures*.cpp) e.g. // // class Header : public HeaderGenerated // { // } // // All fields will be automatically prefixed with "m_" to signify that // they are member variables. // // Note that there are some limitations with make_structures_generated, // most importantly: // // * any field of type Bit, must have // - rep <=8 // - default = 0 // - may not cross a byte boundary! // Write file header (mostly from wotsit) // [PRIVATE] this is a private libmswrite class, do not use it! class HeaderGenerated : public NeedsDevice { public: static const int s_size = 98; private: HeaderGenerated (const HeaderGenerated &rhs); //TODO: copy constructor protected: Byte m_data [98]; // raw data from .wri file Word m_magic; // must be 0xBE31 (v3.0) or 0xBE32 (v3.1 because the file contains OLE) Word m_zero; Word m_magic2; // Magic number2 (must be 0xAB00) Word m_zero2 [4]; DWord m_numCharBytesPlus128; // #bytes of text,images & OLE (starting from Byte 128/Page 1) Word m_pageParaInfo; Word m_pageFootnoteTable; Word m_pageSectionProperty; // I call it "Page Layout" Word m_pageSectionTable; Word m_pagePageTable; Word m_pageFontTable; Word m_zero3 [33]; Word m_numPages; // (where a page is 128 bytes) HeaderGenerated &operator= (const HeaderGenerated &rhs); virtual bool verifyVariables (void); virtual bool writeToArray (void); static const Word magicDefault = Word (0xBE31/*Write 3.0*/); static const Word zeroDefault = Word (0); static const Word magic2Default = Word (0xAB00); // cannot provide default for zero2 (is an array or of a non-internal type) // no default for numCharBytesPlus128 // no default for pageParaInfo // no default for pageFootnoteTable // no default for pageSectionProperty // no default for pageSectionTable // no default for pagePageTable // no default for pageFontTable // cannot provide default for zero3 (is an array or of a non-internal type) // no default for numPages public: // [PRIVATE] do not call! virtual bool readFromDevice (void); virtual bool writeToDevice (void); HeaderGenerated (); virtual ~HeaderGenerated (); // // get and set functions // Word getMagic (void) const { return m_magic; } void setMagic (const Word val) { m_magic = val; } Word getPageParaInfo (void) const { return m_pageParaInfo; } void setPageParaInfo (const Word val) { m_pageParaInfo = val; } Word getPageFootnoteTable (void) const { return m_pageFootnoteTable; } void setPageFootnoteTable (const Word val) { m_pageFootnoteTable = val; } Word getPageSectionProperty (void) const { return m_pageSectionProperty; } void setPageSectionProperty (const Word val) { m_pageSectionProperty = val; } Word getPageSectionTable (void) const { return m_pageSectionTable; } void setPageSectionTable (const Word val) { m_pageSectionTable = val; } Word getPagePageTable (void) const { return m_pagePageTable; } void setPagePageTable (const Word val) { m_pagePageTable = val; } Word getPageFontTable (void) const { return m_pageFontTable; } void setPageFontTable (const Word val) { m_pageFontTable = val; } Word getNumPages (void) const { return m_numPages; } void setNumPages (const Word val) { m_numPages = val; } }; // Page layout information (margins, dimensions, ...) class PageLayoutGenerated : public NeedsDevice { public: static const int s_size = 33; private: PageLayoutGenerated (const PageLayoutGenerated &rhs); //TODO: copy constructor protected: Byte m_data [33]; // raw data from .wri file Byte m_magic102; // =102? Word m_magic512; // =512? Word m_pageHeight; Word m_pageWidth; Word m_pageNumberStart; // start counting page numbers from this value (0xFFFF means ignore, set to 1 I guess) Word m_topMargin; Word m_textHeight; Word m_leftMargin; Word m_textWidth; Word m_magic256; // =256? Word m_headerFromTop; // distance header is from top of page Word m_footerFromTop; // distance footer is from top of page Word m_magic720; // 720 Word m_zero; // 0 Word m_magic1080; // 1080 Word m_unknown; // ? (let's not be random and default to 0) Word m_zero2; // 0 PageLayoutGenerated &operator= (const PageLayoutGenerated &rhs); virtual bool verifyVariables (void); virtual bool writeToArray (void); static const Byte magic102Default = Byte (102); static const Word magic512Default = Word (512); static const Word pageHeightDefault = Word (Inch2Twip (11)); static const Word pageWidthDefault = Word (Inch2Twip (8.5)); static const Word pageNumberStartDefault = Word (1); static const Word topMarginDefault = Word (Inch2Twip (1)); static const Word textHeightDefault = Word (Inch2Twip (9)); static const Word leftMarginDefault = Word (Inch2Twip (1.25)); static const Word textWidthDefault = Word (Inch2Twip (6)); static const Word magic256Default = Word (256); static const Word headerFromTopDefault = Word (Inch2Twip (0.75)); static const Word footerFromTopDefault = Word (Inch2Twip (10.25 /*11.0 (m_pageHeight) - 0.75*/)); static const Word magic720Default = Word (720); static const Word zeroDefault = Word (0); static const Word magic1080Default = Word (1080); static const Word unknownDefault = Word (0); static const Word zero2Default = Word (0); public: // [PRIVATE] do not call! virtual bool readFromDevice (void); virtual bool writeToDevice (void); PageLayoutGenerated (); virtual ~PageLayoutGenerated (); }; // No idea what this is supposed to do (from wotsit) // [PRIVATE] this is a private libmswrite class, do not use it! class SectionDescriptorGenerated : public NeedsDevice { public: static const int s_size = 10; private: SectionDescriptorGenerated (const SectionDescriptorGenerated &rhs); //TODO: copy constructor protected: Byte m_data [10]; // raw data from .wri file DWord m_afterEndCharByte; // byte of character just after end of section Word m_undefined; DWord m_sectionPropertyLocation; // byte address of corresponding sectionProperty (I call it a "Page Layout" which is more obvious IMHO) SectionDescriptorGenerated &operator= (const SectionDescriptorGenerated &rhs); virtual bool verifyVariables (void); virtual bool writeToArray (void); // no default for afterEndCharByte static const Word undefinedDefault = Word (0); // no default for sectionPropertyLocation public: // [PRIVATE] do not call! virtual bool readFromDevice (void); virtual bool writeToDevice (void); SectionDescriptorGenerated (); virtual ~SectionDescriptorGenerated (); // // get and set functions // DWord getAfterEndCharByte (void) const { return m_afterEndCharByte; } void setAfterEndCharByte (const DWord val) { m_afterEndCharByte = val; } DWord getSectionPropertyLocation (void) const { return m_sectionPropertyLocation; } void setSectionPropertyLocation (const DWord val) { m_sectionPropertyLocation = val; } }; // (from wotsit) class SectionDescriptor; // [PRIVATE] this is a private libmswrite class, do not use it! class SectionTableGenerated : public NeedsDevice { public: static const int s_size = 24; private: SectionTableGenerated (const SectionTableGenerated &rhs); //TODO: copy constructor protected: Byte m_data [24]; // raw data from .wri file Word m_numSectionDescriptors; Word m_undefined; SectionDescriptor *m_sed [2]; SectionTableGenerated &operator= (const SectionTableGenerated &rhs); virtual bool verifyVariables (void); virtual bool writeToArray (void); static const Word numSectionDescriptorsDefault = Word (2); static const Word undefinedDefault = Word (0); // no default for sed public: // [PRIVATE] do not call! virtual bool readFromDevice (void); virtual bool writeToDevice (void); SectionTableGenerated (); virtual ~SectionTableGenerated (); }; class FontGenerated : public NeedsDevice { public: static const int s_size = 3; private: FontGenerated (const FontGenerated &rhs); //TODO: copy constructor protected: Byte m_data [3]; // raw data from .wri file Word m_numDataBytes; // number of bytes that follow Byte m_family; // - - - followed by Byte *fontName - - - FontGenerated &operator= (const FontGenerated &rhs); virtual bool verifyVariables (void); virtual bool writeToArray (void); static const Word numDataBytesDefault = Word (0); static const Byte familyDefault = Byte (0); public: // [PRIVATE] do not call! virtual bool readFromDevice (void); virtual bool writeToDevice (void); FontGenerated (); virtual ~FontGenerated (); // // get and set functions // // [PRIVATE] these are private libmswrite methods, do not call them! Word getNumDataBytes (void) const { return m_numDataBytes; } void setNumDataBytes (const Word val) { m_numDataBytes = val; } Byte getFamily (void) const { return m_family; } void setFamily (const Byte val) { m_family = val; } }; // [PRIVATE] this is a private libmswrite class, do not use it! class FontTableGenerated : public NeedsDevice { public: static const int s_size = 2; private: FontTableGenerated (const FontTableGenerated &rhs); //TODO: copy constructor protected: Byte m_data [2]; // raw data from .wri file Word m_numFonts; // - - - followed by a list of Font(s) - - - FontTableGenerated &operator= (const FontTableGenerated &rhs); virtual bool verifyVariables (void); virtual bool writeToArray (void); static const Word numFontsDefault = Word (0); public: // [PRIVATE] do not call! virtual bool readFromDevice (void); virtual bool writeToDevice (void); FontTableGenerated (); virtual ~FontTableGenerated (); // // get and set functions // Word getNumFonts (void) const { return m_numFonts; } void setNumFonts (const Word val) { m_numFonts = val; } }; // [PRIVATE] this is a private libmswrite class, do not use it! class PagePointerGenerated : public NeedsDevice { public: static const int s_size = 6; private: PagePointerGenerated (const PagePointerGenerated &rhs); //TODO: copy constructor protected: Byte m_data [6]; // raw data from .wri file Word m_pageNumber; DWord m_firstCharByte; // first character on page PagePointerGenerated &operator= (const PagePointerGenerated &rhs); virtual bool verifyVariables (void); virtual bool writeToArray (void); // no default for pageNumber // no default for firstCharByte public: // [PRIVATE] do not call! virtual bool readFromDevice (void); virtual bool writeToDevice (void); PagePointerGenerated (); virtual ~PagePointerGenerated (); // // get and set functions // Word getPageNumber (void) const { return m_pageNumber; } void setPageNumber (const Word val) { m_pageNumber = val; } DWord getFirstCharByte (void) const { return m_firstCharByte; } void setFirstCharByte (const DWord val) { m_firstCharByte = val; } }; // File/Repaginate function // [PRIVATE] this is a private libmswrite class, do not use it! class PageTableGenerated : public NeedsDevice { public: static const int s_size = 4; private: PageTableGenerated (const PageTableGenerated &rhs); //TODO: copy constructor protected: Byte m_data [4]; // raw data from .wri file Word m_numPagePointers; Word m_zero; // - - - followed by a list of PagePointer(s) - - - PageTableGenerated &operator= (const PageTableGenerated &rhs); virtual bool verifyVariables (void); virtual bool writeToArray (void); static const Word numPagePointersDefault = Word (0); static const Word zeroDefault = Word (0); public: // [PRIVATE] do not call! virtual bool readFromDevice (void); virtual bool writeToDevice (void); PageTableGenerated (); virtual ~PageTableGenerated (); }; // A pointer to the actual formatting properties (formatting properties are shared to save space) // [PRIVATE] this is a private libmswrite class, do not use it! class FormatPointerGenerated : public NeedsDevice { public: static const int s_size = 6; private: FormatPointerGenerated (const FormatPointerGenerated &rhs); //TODO: copy constructor protected: Byte m_data [6]; // raw data from .wri file DWord m_afterEndCharBytePlus128; // last character it points to + 1 Word m_formatPropertyOffset; // location of relevant FormatProperty (or 0xFFFF for defaults) FormatPointerGenerated &operator= (const FormatPointerGenerated &rhs); virtual bool verifyVariables (void); virtual bool writeToArray (void); // no default for afterEndCharBytePlus128 // no default for formatPropertyOffset public: // [PRIVATE] do not call! virtual bool readFromDevice (void); virtual bool writeToDevice (void); FormatPointerGenerated (); virtual ~FormatPointerGenerated (); // // get and set functions // DWord getAfterEndCharBytePlus128 (void) const { return m_afterEndCharBytePlus128; } void setAfterEndCharBytePlus128 (const DWord val) { m_afterEndCharBytePlus128 = val; } Word getFormatPropertyOffset (void) const { return m_formatPropertyOffset; } void setFormatPropertyOffset (const Word val) { m_formatPropertyOffset = val; } }; // Character Properties class FormatCharPropertyGenerated : public NeedsDevice, public UseThisMuch { public: static const int s_size = 7; private: FormatCharPropertyGenerated (const FormatCharPropertyGenerated &rhs); //TODO: copy constructor protected: Byte m_data [7]; // raw data from .wri file // Byte 0 Byte m_numDataBytes; // number of bytes that follow // Byte 1 Byte m_unknown; // =0? or =1? // Byte 2 unsigned m_isBold : 1; unsigned m_isItalic : 1; unsigned m_fontCodeLow : 6; // Byte 3 Byte m_fontSize; // half the fontSize? // Byte 4 unsigned m_isUnderlined : 1; unsigned m_zero : 5; unsigned m_isPageNumber : 1; // seems to be set for '(page)' number variables - only in headers/footers? unsigned m_zero2 : 1; // Byte 5 unsigned m_fontCodeHigh : 3; // not sure if this is true unsigned m_zero3 : 5; // Byte 6 Byte m_position; // 0=normal, 1-127=superscript, 128-255=subscript (I tested mainly boundary values so I don't know if it's this is totally true) FormatCharPropertyGenerated &operator= (const FormatCharPropertyGenerated &rhs); Word getNumDataBytes (void) const { return UseThisMuch::getNeedNumDataBytes (); } // note: you cannot set numDataBytes void updateNumDataBytes (void) { m_numDataBytes = UseThisMuch::getNeedNumDataBytes (); } virtual bool verifyVariables (void); virtual bool writeToArray (void); static const Byte numDataBytesDefault = Byte (0); static const Byte unknownDefault = Byte (1); static const unsigned isBoldDefault = unsigned (0); static const unsigned isItalicDefault = unsigned (0); // cannot provide default for fontCodeLow (is an array or of a non-internal type) static const Byte fontSizeDefault = Byte (24); static const unsigned isUnderlinedDefault = unsigned (0); // cannot provide default for zero (is an array or of a non-internal type) static const unsigned isPageNumberDefault = unsigned (0); static const unsigned zero2Default = unsigned (0); // cannot provide default for fontCodeHigh (is an array or of a non-internal type) // cannot provide default for zero3 (is an array or of a non-internal type) static const Byte positionDefault = Byte (0); public: // [PRIVATE] do not call! virtual bool readFromDevice (void); virtual bool writeToDevice (void); FormatCharPropertyGenerated (); virtual ~FormatCharPropertyGenerated (); // // get and set functions // bool getIsBold (void) const { return m_isBold; } void setIsBold (const bool val) { m_isBold = val; signalHaveSetData (m_isBold == bool (0), 8/*offset*/ + 1/*size*/); } bool getIsItalic (void) const { return m_isItalic; } void setIsItalic (const bool val) { m_isItalic = val; signalHaveSetData (m_isItalic == bool (0), 9/*offset*/ + 1/*size*/); } // [PRIVATE] these are private libmswrite methods, do not call them! unsigned getFontCodeLow (void) const { return m_fontCodeLow; } void setFontCodeLow (const unsigned val) { m_fontCodeLow = val; signalHaveSetData (m_fontCodeLow == unsigned (0), 10/*offset*/ + 6/*size*/); } bool getIsUnderlined (void) const { return m_isUnderlined; } void setIsUnderlined (const bool val) { m_isUnderlined = val; signalHaveSetData (m_isUnderlined == bool (0), 24/*offset*/ + 1/*size*/); } bool getIsPageNumber (void) const { return m_isPageNumber; } void setIsPageNumber (const bool val) { m_isPageNumber = val; signalHaveSetData (m_isPageNumber == bool (0), 30/*offset*/ + 1/*size*/); } // [PRIVATE] these are private libmswrite methods, do not call them! unsigned getFontCodeHigh (void) const { return m_fontCodeHigh; } void setFontCodeHigh (const unsigned val) { m_fontCodeHigh = val; signalHaveSetData (m_fontCodeHigh == unsigned (0), 32/*offset*/ + 3/*size*/); } // [PRIVATE] these are private libmswrite methods, do not call them! Byte getPosition (void) const { return m_position; } void setPosition (const Byte val) { m_position = val; signalHaveSetData (m_position == Byte (0), 40/*offset*/ + 8/*size*/); } }; // Paragraph Tabulator(s) Properties class FormatParaPropertyTabulatorGenerated : public NeedsDevice { public: static const int s_size = 4; private: FormatParaPropertyTabulatorGenerated (const FormatParaPropertyTabulatorGenerated &rhs); //TODO: copy constructor protected: Byte m_data [4]; // raw data from .wri file Word m_indent; Byte m_type; // 0=normal,3=decimal...all that the GUI allows Byte m_zero; FormatParaPropertyTabulatorGenerated &operator= (const FormatParaPropertyTabulatorGenerated &rhs); virtual bool verifyVariables (void); virtual bool writeToArray (void); static const Word indentDefault = Word (0); static const Byte typeDefault = Byte (0); static const Byte zeroDefault = Byte (0); public: // [PRIVATE] do not call! virtual bool readFromDevice (void); virtual bool writeToDevice (void); FormatParaPropertyTabulatorGenerated (); virtual ~FormatParaPropertyTabulatorGenerated (); // // get and set functions // Word getIndent (void) const { return m_indent; } void setIndent (const Word val) { m_indent = val; } // [PRIVATE] these are private libmswrite methods, do not call them! Byte getType (void) const { return m_type; } void setType (const Byte val) { m_type = val; } }; // Paragraph Properties class FormatParaPropertyTabulator; class FormatParaPropertyGenerated : public NeedsDevice, public UseThisMuch { public: static const int s_size = 79; private: FormatParaPropertyGenerated (const FormatParaPropertyGenerated &rhs); //TODO: copy constructor protected: Byte m_data [79]; // raw data from .wri file Byte m_numDataBytes; // number of bytes that follow Byte m_magic0_60_or_61; // =0? =60? =61? 60 is the most common Byte m_alignment; Word m_magic30; // =30? Word m_rightIndent; // indent from right margin + right margin (if in header/footer) Word m_leftIndent; // indent from left margin + left margin (if in header/footer) Short m_leftIndentFirstLine; // indent of first line relative to leftIndent (may be negative for a "hanging indent") Word m_lineSpacing; // measurement in twips? Word m_zero [2]; // Type Byte unsigned m_headerOrFooter : 1; // 0=header,1=footer (if not normal paragraph) unsigned m_isNotNormalParagraph : 2;// 0=normal paragraph;1,2?,3?=header/footer unsigned m_isOnFirstPage : 1; // again, valid only if not normal paragraph unsigned m_isObject : 1; // 0=image/OLE,1=text unsigned m_zero2 : 3; Byte m_zero3 [5]; FormatParaPropertyTabulator *m_tab [14]; FormatParaPropertyGenerated &operator= (const FormatParaPropertyGenerated &rhs); Word getNumDataBytes (void) const { return UseThisMuch::getNeedNumDataBytes (); } // note: you cannot set numDataBytes void updateNumDataBytes (void) { m_numDataBytes = UseThisMuch::getNeedNumDataBytes (); } virtual bool verifyVariables (void); virtual bool writeToArray (void); static const Byte numDataBytesDefault = Byte (0); static const Byte magic0_60_or_61Default = Byte (60); static const Byte alignmentDefault = Byte (0); static const Word magic30Default = Word (30); static const Word rightIndentDefault = Word (0); static const Word leftIndentDefault = Word (0); static const Short leftIndentFirstLineDefault = Short (0); static const Word lineSpacingDefault = Word (240); // cannot provide default for zero (is an array or of a non-internal type) static const unsigned headerOrFooterDefault = unsigned (0); // cannot provide default for isNotNormalParagraph (is an array or of a non-internal type) static const unsigned isOnFirstPageDefault = unsigned (0); static const unsigned isObjectDefault = unsigned (0); // cannot provide default for zero2 (is an array or of a non-internal type) // cannot provide default for zero3 (is an array or of a non-internal type) // no default for tab public: // [PRIVATE] do not call! virtual bool readFromDevice (void); virtual bool writeToDevice (void); FormatParaPropertyGenerated (); virtual ~FormatParaPropertyGenerated (); // // get and set functions // Byte getAlignment (void) const { return m_alignment; } void setAlignment (const Byte val) { m_alignment = val; signalHaveSetData (m_alignment == Byte (0), 8/*offset*/ + 8/*size*/); } Word getRightIndent (void) const { return m_rightIndent; } void setRightIndent (const Word val) { m_rightIndent = val; signalHaveSetData (m_rightIndent == Word (0), 32/*offset*/ + 16/*size*/); } Word getLeftIndent (void) const { return m_leftIndent; } void setLeftIndent (const Word val) { m_leftIndent = val; signalHaveSetData (m_leftIndent == Word (0), 48/*offset*/ + 16/*size*/); } Word getLineSpacing (void) const { return m_lineSpacing; } void setLineSpacing (const Word val) { m_lineSpacing = val; signalHaveSetData (m_lineSpacing == Word (240), 80/*offset*/ + 16/*size*/); } bool getHeaderOrFooter (void) const { return m_headerOrFooter; } void setHeaderOrFooter (const bool val) { m_headerOrFooter = val; signalHaveSetData (m_headerOrFooter == bool (0), 128/*offset*/ + 1/*size*/); } unsigned getIsNotNormalParagraph (void) const { return m_isNotNormalParagraph; } void setIsNotNormalParagraph (const unsigned val) { m_isNotNormalParagraph = val; signalHaveSetData (m_isNotNormalParagraph == unsigned (0), 129/*offset*/ + 2/*size*/); } bool getIsOnFirstPage (void) const { return m_isOnFirstPage; } void setIsOnFirstPage (const bool val) { m_isOnFirstPage = val; signalHaveSetData (m_isOnFirstPage == bool (0), 131/*offset*/ + 1/*size*/); } bool getIsObject (void) const { return m_isObject; } void setIsObject (const bool val) { m_isObject = val; signalHaveSetData (m_isObject == bool (0), 132/*offset*/ + 1/*size*/); } }; // [PRIVATE] this is a private libmswrite class, do not use it! class FormatInfoPageGenerated : public NeedsDevice { public: static const int s_size = 128; private: FormatInfoPageGenerated (const FormatInfoPageGenerated &rhs); //TODO: copy constructor protected: Byte m_data [128]; // raw data from .wri file DWord m_firstCharBytePlus128; Byte m_packedStructs [123]; // array of FormatPointers and FormatCharProperties/FormatParaProperties Byte m_numFormatPointers; FormatInfoPageGenerated &operator= (const FormatInfoPageGenerated &rhs); virtual bool verifyVariables (void); virtual bool writeToArray (void); // no default for firstCharBytePlus128 // cannot provide default for packedStructs (is an array or of a non-internal type) static const Byte numFormatPointersDefault = Byte (0); public: // [PRIVATE] do not call! virtual bool readFromDevice (void); virtual bool writeToDevice (void); FormatInfoPageGenerated (); virtual ~FormatInfoPageGenerated (); }; // first header of a .BMP file (_not_ stored in .WRI) // [PRIVATE] this is a private libmswrite class, do not use it! class BMP_BitmapFileHeaderGenerated : public NeedsDevice { public: static const int s_size = 14; private: BMP_BitmapFileHeaderGenerated (const BMP_BitmapFileHeaderGenerated &rhs); //TODO: copy constructor protected: Byte m_data [14]; // raw data from .wri file Word m_magic; DWord m_totalBytes; Word m_zero [2]; DWord m_actualImageOffset; BMP_BitmapFileHeaderGenerated &operator= (const BMP_BitmapFileHeaderGenerated &rhs); virtual bool verifyVariables (void); virtual bool writeToArray (void); static const Word magicDefault = Word (Word ('B') + (Word ('M') << 8)); // no default for totalBytes // cannot provide default for zero (is an array or of a non-internal type) // no default for actualImageOffset public: // [PRIVATE] do not call! virtual bool readFromDevice (void); virtual bool writeToDevice (void); BMP_BitmapFileHeaderGenerated (); virtual ~BMP_BitmapFileHeaderGenerated (); // // get and set functions // DWord getTotalBytes (void) const { return m_totalBytes; } void setTotalBytes (const DWord val) { m_totalBytes = val; } DWord getActualImageOffset (void) const { return m_actualImageOffset; } void setActualImageOffset (const DWord val) { m_actualImageOffset = val; } }; // second header of a .BMP file (_not_ stored in .WRI) // [PRIVATE] this is a private libmswrite class, do not use it! class BMP_BitmapInfoHeaderGenerated : public NeedsDevice { public: static const int s_size = 40; private: BMP_BitmapInfoHeaderGenerated (const BMP_BitmapInfoHeaderGenerated &rhs); //TODO: copy constructor protected: Byte m_data [40]; // raw data from .wri file DWord m_numHeaderBytes; Long m_width; Long m_height; Word m_numPlanes; // always==1 Word m_bitsPerPixel; DWord m_compression; DWord m_sizeImage; Long m_xPixelsPerMeter; Long m_yPixelsPerMeter; DWord m_coloursUsed; DWord m_coloursImportant; BMP_BitmapInfoHeaderGenerated &operator= (const BMP_BitmapInfoHeaderGenerated &rhs); virtual bool verifyVariables (void); virtual bool writeToArray (void); static const DWord numHeaderBytesDefault = DWord (s_size); // no default for width // no default for height static const Word numPlanesDefault = Word (1); // no default for bitsPerPixel static const DWord compressionDefault = DWord (0); static const DWord sizeImageDefault = DWord (0); static const Long xPixelsPerMeterDefault = Long (0); static const Long yPixelsPerMeterDefault = Long (0); static const DWord coloursUsedDefault = DWord (0); // no default for coloursImportant public: // [PRIVATE] do not call! virtual bool readFromDevice (void); virtual bool writeToDevice (void); BMP_BitmapInfoHeaderGenerated (); virtual ~BMP_BitmapInfoHeaderGenerated (); // // get and set functions // Long getWidth (void) const { return m_width; } void setWidth (const Long val) { m_width = val; } Long getHeight (void) const { return m_height; } void setHeight (const Long val) { m_height = val; } Word getNumPlanes (void) const { return m_numPlanes; } void setNumPlanes (const Word val) { m_numPlanes = val; } Word getBitsPerPixel (void) const { return m_bitsPerPixel; } void setBitsPerPixel (const Word val) { m_bitsPerPixel = val; } DWord getCompression (void) const { return m_compression; } void setCompression (const DWord val) { m_compression = val; } DWord getSizeImage (void) const { return m_sizeImage; } void setSizeImage (const DWord val) { m_sizeImage = val; } Long getXPixelsPerMeter (void) const { return m_xPixelsPerMeter; } void setXPixelsPerMeter (const Long val) { m_xPixelsPerMeter = val; } Long getYPixelsPerMeter (void) const { return m_yPixelsPerMeter; } void setYPixelsPerMeter (const Long val) { m_yPixelsPerMeter = val; } DWord getColoursUsed (void) const { return m_coloursUsed; } void setColoursUsed (const DWord val) { m_coloursUsed = val; } DWord getColoursImportant (void) const { return m_coloursImportant; } void setColoursImportant (const DWord val) { m_coloursImportant = val; } }; // element of colourTable, triad of RGB // [PRIVATE] this is a private libmswrite class, do not use it! class BMP_BitmapColourIndexGenerated : public NeedsDevice { public: static const int s_size = 4; private: BMP_BitmapColourIndexGenerated (const BMP_BitmapColourIndexGenerated &rhs); //TODO: copy constructor protected: Byte m_data [4]; // raw data from .wri file Byte m_blue; Byte m_green; Byte m_red; Byte m_reserved; BMP_BitmapColourIndexGenerated &operator= (const BMP_BitmapColourIndexGenerated &rhs); virtual bool verifyVariables (void); virtual bool writeToArray (void); // no default for blue // no default for green // no default for red static const Byte reservedDefault = Byte (0); public: // [PRIVATE] do not call! virtual bool readFromDevice (void); virtual bool writeToDevice (void); BMP_BitmapColourIndexGenerated (); virtual ~BMP_BitmapColourIndexGenerated (); // // get and set functions // Byte getBlue (void) const { return m_blue; } void setBlue (const Byte val) { m_blue = val; } Byte getGreen (void) const { return m_green; } void setGreen (const Byte val) { m_green = val; } Byte getRed (void) const { return m_red; } void setRed (const Byte val) { m_red = val; } }; // [PRIVATE] this is a private libmswrite class, do not use it! class BitmapHeaderGenerated : public NeedsDevice { public: static const int s_size = 14; private: BitmapHeaderGenerated (const BitmapHeaderGenerated &rhs); //TODO: copy constructor protected: Byte m_data [14]; // raw data from .wri file Word m_zero; Word m_width; Word m_height; Word m_widthBytes; Byte m_numPlanes; // always 1 for mono BMP or the entire struct is 0 for WMF Byte m_bitsPerPixel; DWord m_zero2; BitmapHeaderGenerated &operator= (const BitmapHeaderGenerated &rhs); virtual bool verifyVariables (void); virtual bool writeToArray (void); static const Word zeroDefault = Word (0); static const Word widthDefault = Word (0); static const Word heightDefault = Word (0); static const Word widthBytesDefault = Word (0); static const Byte numPlanesDefault = Byte (0); static const Byte bitsPerPixelDefault = Byte (0); static const DWord zero2Default = DWord (0); public: // [PRIVATE] do not call! virtual bool readFromDevice (void); virtual bool writeToDevice (void); BitmapHeaderGenerated (); virtual ~BitmapHeaderGenerated (); // // get and set functions // Word getWidth (void) const { return m_width; } void setWidth (const Word val) { m_width = val; } Word getHeight (void) const { return m_height; } void setHeight (const Word val) { m_height = val; } Word getWidthBytes (void) const { return m_widthBytes; } void setWidthBytes (const Word val) { m_widthBytes = val; } Byte getNumPlanes (void) const { return m_numPlanes; } void setNumPlanes (const Byte val) { m_numPlanes = val; } Byte getBitsPerPixel (void) const { return m_bitsPerPixel; } void setBitsPerPixel (const Byte val) { m_bitsPerPixel = val; } }; // 'Standard WMF' Header // [PRIVATE] this is a private libmswrite class, do not use it! class WMFHeaderGenerated : public NeedsDevice { public: static const int s_size = 18; private: WMFHeaderGenerated (const WMFHeaderGenerated &rhs); //TODO: copy constructor protected: Byte m_data [18]; // raw data from .wri file Word m_fieldType; // 0=memory WMF,1=file WMF; so will never be 0 Word m_headerSize; // (in Words) Word m_winVersion; // correct for Win>=3.0 DWord m_fileSize; // (in Words) Word m_numObjects; // ? DWord m_maxRecordSize; // (in Words) Word m_zero; WMFHeaderGenerated &operator= (const WMFHeaderGenerated &rhs); virtual bool verifyVariables (void); virtual bool writeToArray (void); static const Word fieldTypeDefault = Word (1); static const Word headerSizeDefault = Word (9); static const Word winVersionDefault = Word (0x0300); // no default for fileSize static const Word numObjectsDefault = Word (0); // no default for maxRecordSize static const Word zeroDefault = Word (0); public: // [PRIVATE] do not call! virtual bool readFromDevice (void); virtual bool writeToDevice (void); WMFHeaderGenerated (); virtual ~WMFHeaderGenerated (); // // get and set functions // DWord getFileSize (void) const { return m_fileSize; } void setFileSize (const DWord val) { m_fileSize = val; } DWord getMaxRecordSize (void) const { return m_maxRecordSize; } void setMaxRecordSize (const DWord val) { m_maxRecordSize = val; } }; class BitmapHeader; class ImageGenerated : public NeedsDevice { public: static const int s_size = 40; private: ImageGenerated (const ImageGenerated &rhs); //TODO: copy constructor protected: Byte m_data [40]; // raw data from .wri file // - - - METAFILEPICT begin - - - Word m_mappingMode; // type of image: 0xE3 for mono bitmap, != 0xE3 for WMF (usually 0x88) Word m_MFP_width; Word m_MFP_height; Word m_MFP_unknown; // - - - METAFILEPICT end - - - Word m_indent; // horizontal position from left margin Word m_width; // WMF width only, use m_bmh for bitmaps Word m_height; // WMF height only, use m_bmh for bitmaps Word m_zero; // ??? varies too much, default to 0 BitmapHeader *m_bmh; // only valid for mono BMPs i.e. when mappingMode == 0xe3 Word m_numHeaderBytes; // size of this header? (why isn't it the first element?) DWord m_numDataBytes; // number of image bytes Word m_horizontalScalingRel1000; // horizontal scaling (/1000)*100% (BMPs only) Word m_verticalScalingRel1000; // vertical scaling (/1000)*100% (BMPs only) // - - - Followed by either a strangely packed monochrome bitmap or a Standard WMF (with WMFHeader, of course) - - - ImageGenerated &operator= (const ImageGenerated &rhs); virtual bool verifyVariables (void); virtual bool writeToArray (void); // no default for mappingMode // no default for MFP_width // no default for MFP_height static const Word MFP_unknownDefault = Word (0); static const Word indentDefault = Word (0); // no default for width // no default for height static const Word zeroDefault = Word (0); // no default for bmh static const Word numHeaderBytesDefault = Word (s_size); // no default for numDataBytes static const Word horizontalScalingRel1000Default = Word (1000); static const Word verticalScalingRel1000Default = Word (1000); public: // [PRIVATE] do not call! virtual bool readFromDevice (void); virtual bool writeToDevice (void); ImageGenerated (); virtual ~ImageGenerated (); // // get and set functions // Word getIndent (void) const { return m_indent; } void setIndent (const Word val) { m_indent = val; } // [PRIVATE] these are private libmswrite methods, do not call them! Word getNumHeaderBytes (void) const { return m_numHeaderBytes; } void setNumHeaderBytes (const Word val) { m_numHeaderBytes = val; } // [PRIVATE] these are private libmswrite methods, do not call them! DWord getNumDataBytes (void) const { return m_numDataBytes; } void setNumDataBytes (const DWord val) { m_numDataBytes = val; } }; class OLEGenerated : public NeedsDevice { public: static const int s_size = 40; private: OLEGenerated (const OLEGenerated &rhs); //TODO: copy constructor protected: Byte m_data [40]; // raw data from .wri file Word m_mappingMode; DWord m_zero; Word m_objectType; // 1=static, 2=embedded, 3=link Word m_indent; // horizontal position from left margin Word m_width; Word m_height; Word m_zero2; DWord m_numDataBytes; // number of OLE bytes DWord m_zero3; DWord m_objectName; // name of the object in hex Word m_zero4; Word m_numHeaderBytes; // size of this header DWord m_zero5; Word m_widthScaledRel1000; // horizontal scaling (/1000)*100% (same as Image?) Word m_heightScaledRel1000; // vertical scaling (/1000)*100% (same as Image?) // - - - Followed by OLE data - - - OLEGenerated &operator= (const OLEGenerated &rhs); virtual bool verifyVariables (void); virtual bool writeToArray (void); // no default for mappingMode static const DWord zeroDefault = DWord (0); // no default for objectType // no default for indent // no default for width // no default for height static const Word zero2Default = Word (0); // no default for numDataBytes static const DWord zero3Default = DWord (0); // no default for objectName static const Word zero4Default = Word (0); // no default for numHeaderBytes static const DWord zero5Default = DWord (0); // no default for widthScaledRel1000 // no default for heightScaledRel1000 public: // [PRIVATE] do not call! virtual bool readFromDevice (void); virtual bool writeToDevice (void); OLEGenerated (); virtual ~OLEGenerated (); // // get and set functions // Word getObjectType (void) const { return m_objectType; } void setObjectType (const Word val) { m_objectType = val; } Word getIndent (void) const { return m_indent; } void setIndent (const Word val) { m_indent = val; } Word getWidth (void) const { return m_width; } void setWidth (const Word val) { m_width = val; } Word getHeight (void) const { return m_height; } void setHeight (const Word val) { m_height = val; } // [PRIVATE] these are private libmswrite methods, do not call them! DWord getNumDataBytes (void) const { return m_numDataBytes; } void setNumDataBytes (const DWord val) { m_numDataBytes = val; } DWord getObjectName (void) const { return m_objectName; } void setObjectName (const DWord val) { m_objectName = val; } Word getWidthScaledRel1000 (void) const { return m_widthScaledRel1000; } void setWidthScaledRel1000 (const Word val) { m_widthScaledRel1000 = val; } Word getHeightScaledRel1000 (void) const { return m_heightScaledRel1000; } void setHeightScaledRel1000 (const Word val) { m_heightScaledRel1000 = val; } }; } // namespace MSWrite { #endif // __STRUCTURES_GENERATED_H__ // end of structures_generated.h