You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1295 lines
42 KiB
1295 lines
42 KiB
15 years ago
|
/* This file is part of the LibMSWrite Library
|
||
|
Copyright (C) 2001-2003 Clarence Dang <clarencedang@users.sourceforge.net>
|
||
|
|
||
|
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 <clarencedang@users.sourceforge.net>
|
||
|
//
|
||
|
// 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
|