00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef kovariable_h
00021 #define kovariable_h
00022
00023 #include <qstring.h>
00024 #include <qdatetime.h>
00025 #include <qasciidict.h>
00026 #include <qptrlist.h>
00027 #include <qmap.h>
00028 #include <qobject.h>
00029 #include <kaction.h>
00030 #include "KoRichText.h"
00031 #include <qvariant.h>
00032 #include <koffice_export.h>
00033
00034 class QDomElement;
00035
00036
00037 enum VariableType {
00038 VT_NONE = -1,
00039
00040 VT_DATE = 0,
00041 VT_DATE_VAR_KWORD10 = 1,
00042 VT_TIME = 2,
00043 VT_TIME_VAR_KWORD10 = 3,
00044 VT_PGNUM = 4,
00045
00046 VT_CUSTOM = 6,
00047 VT_MAILMERGE = 7,
00048 VT_FIELD = 8,
00049 VT_LINK = 9,
00050 VT_NOTE = 10,
00051 VT_FOOTNOTE = 11,
00052 VT_STATISTIC = 12,
00053
00054 VT_ALL = 256
00055 };
00056
00057 enum VariableFormat {
00058 VF_DATE = 0,
00059 VF_TIME = 1,
00060 VF_STRING = 2,
00061 VF_NUM = 3
00062 };
00063
00064 class KoVariable;
00065 class KoOasisSettings;
00066
00067 class KOTEXT_EXPORT KoVariableSettings
00068 {
00069 public:
00070 KoVariableSettings();
00071 virtual ~KoVariableSettings();
00072
00073 int startingPageNumber()const { return m_startingPageNumber; }
00074 void setStartingPageNumber(int num) { m_startingPageNumber=num; }
00075
00076 bool displayLink() const{ return m_displayLink; }
00077 void setDisplayLink( bool b) { m_displayLink=b; }
00078
00079 bool underlineLink() const { return m_underlineLink; }
00080 void setUnderlineLink( bool b) { m_underlineLink=b; }
00081
00082 bool displayComment() const { return m_displayComment; }
00083 void setDisplayComment( bool b) { m_displayComment=b; }
00084
00085 bool displayFieldCode() const { return m_displayFieldCode; }
00086 void setDisplayFieldCode( bool b) { m_displayFieldCode=b; }
00087
00088 virtual void save( QDomElement &parentElem );
00089 virtual void load( QDomElement &elem );
00090
00091 QDateTime lastPrintingDate() const;
00092 void setLastPrintingDate( const QDateTime & _date);
00093
00094 QDateTime creationDate() const;
00095 void setCreationDate( const QDateTime & _date);
00096
00097 QDateTime modificationDate() const;
00098 void setModificationDate( const QDateTime & _date);
00099
00100 virtual void saveOasis( KoXmlWriter &settingsWriter ) const;
00101 virtual void loadOasis(const KoOasisSettings&settingsDoc);
00102
00103
00104 private:
00105 int m_startingPageNumber;
00106 bool m_displayLink;
00107 bool m_displayComment;
00108 bool m_underlineLink;
00109 bool m_displayFieldCode;
00110 class KoVariableSettingPrivate;
00111 KoVariableSettingPrivate *d;
00112 };
00113
00121 class KOTEXT_EXPORT KoVariableFormat
00122 {
00123 public:
00124 KoVariableFormat() {}
00125 virtual ~KoVariableFormat() {}
00130 virtual QCString key() const = 0;
00136 virtual QCString getKey( const QString& props ) const = 0;
00140 virtual void load( const QCString &key ) = 0;
00144 virtual QString convert(const QVariant& data ) const = 0;
00150 virtual void setFormatProperties( const QString& ) {}
00154 virtual QString formatProperties() const { return QString::null; }
00158 virtual QStringList formatPropsList() const { return QStringList(); }
00162 virtual QStringList translatedFormatPropsList() const { return QStringList(); }
00163 };
00164
00169 class KOTEXT_EXPORT KoVariableDateFormat : public KoVariableFormat
00170 {
00171 public:
00172 KoVariableDateFormat();
00173 virtual QString convert(const QVariant& data ) const;
00174 virtual QCString key() const;
00175 virtual QCString getKey( const QString& props ) const;
00176 virtual void load( const QCString &key );
00177
00179 virtual void setFormatProperties( const QString& props ) {
00180 m_strFormat = props;
00181 }
00183 virtual QString formatProperties() const { return m_strFormat; }
00184
00186 virtual QStringList formatPropsList() const { return staticFormatPropsList(); }
00187
00189 virtual QStringList translatedFormatPropsList() const { return staticTranslatedFormatPropsList(); }
00190
00191 static QStringList staticFormatPropsList();
00192 static QStringList staticTranslatedFormatPropsList();
00193
00194 private:
00195 QString m_strFormat;
00196 };
00197
00201 class KOTEXT_EXPORT KoVariableTimeFormat : public KoVariableFormat
00202 {
00203 public:
00204 KoVariableTimeFormat();
00205 virtual QString convert(const QVariant& data ) const;
00206 virtual QCString key() const;
00207 virtual QCString getKey( const QString& props ) const;
00208 virtual void load( const QCString & );
00209
00211 virtual void setFormatProperties( const QString& props ) {
00212 m_strFormat = props;
00213 }
00215 virtual QString formatProperties() const { return m_strFormat; }
00216
00218 virtual QStringList formatPropsList() const { return staticFormatPropsList(); }
00219
00221 virtual QStringList translatedFormatPropsList() const { return staticTranslatedFormatPropsList(); }
00222
00223 static QStringList staticFormatPropsList();
00224 static QStringList staticTranslatedFormatPropsList();
00225
00226 private:
00227 QString m_strFormat;
00228 };
00229
00230
00234 class KoVariableStringFormat : public KoVariableFormat
00235 {
00236 public:
00237 KoVariableStringFormat() : KoVariableFormat() {}
00238 virtual QString convert(const QVariant& data ) const;
00239 virtual QCString key() const;
00240 virtual QCString getKey( const QString& props ) const;
00241 virtual void load( const QCString & ) {}
00242 };
00243
00244
00245 class KOTEXT_EXPORT KoVariableNumberFormat : public KoVariableFormat
00246 {
00247 public:
00248 KoVariableNumberFormat() : KoVariableFormat() {}
00249 virtual QString convert(const QVariant& data ) const;
00250 virtual QCString key() const;
00251 virtual QCString getKey( const QString& props ) const;
00252 virtual void load( const QCString & ) {}
00253 };
00254
00255
00262 class KOTEXT_EXPORT KoVariableFormatCollection
00263 {
00264 public:
00265 KoVariableFormatCollection();
00266
00270 void clear() { m_dict.clear(); }
00271
00275 KoVariableFormat *format( const QCString &key );
00276
00277
00278
00279 protected:
00280 KoVariableFormat *createFormat( const QCString &key );
00281
00282 private:
00283 QAsciiDict<KoVariableFormat> m_dict;
00284 };
00285
00286 class KoVariable;
00287 class KoVariableFormat;
00288 class KoDocument;
00289 class KoVariableFormatCollection;
00290 class KoTextDocument;
00291 class KoVariableCollection;
00292 class KOTEXT_EXPORT KoVariableCollection : public QObject
00293 {
00294 Q_OBJECT
00295 public:
00296
00297
00298 KoVariableCollection(KoVariableSettings *settings, KoVariableFormatCollection *formatCollection);
00299 ~KoVariableCollection();
00300 void registerVariable( KoVariable *var );
00301 void unregisterVariable( KoVariable *var );
00302 QValueList<KoVariable *> recalcVariables(int type);
00303
00304
00305 void setVariableValue( const QString &name, const QString &value );
00306 QString getVariableValue( const QString &name ) const;
00307
00308 const QPtrList<KoVariable>& getVariables() const {
00309 return variables;
00310 }
00311 void clear();
00312
00313 bool customVariableExist(const QString &varname)const ;
00314
00315 virtual KoVariable *createVariable( int type, short int subtype, KoVariableFormatCollection * coll, KoVariableFormat *varFormat,KoTextDocument *textdoc, KoDocument * doc, int _correct , bool _forceDefaultFormat=false, bool loadFootNote= true );
00316
00318 virtual KoVariable* loadOasisField( KoTextDocument* textdoc, const QDomElement& tag, KoOasisContext& context );
00319 virtual KoVariable* loadOasisFieldCreateVariable( KoTextDocument* textdoc, const QDomElement& tag, KoOasisContext& context, const QString &key, int type );
00320
00321 KoVariableSettings *variableSetting() const { return m_variableSettings; }
00322 KoVariableFormatCollection *formatCollection() const { return m_formatCollection; }
00323
00325 void setVariableSelected(KoVariable * var);
00326 KoVariable *selectedVariable()const {return m_varSelected;}
00327
00329 QPtrList<KAction> popupActionList() const;
00330
00331 protected slots:
00332
00333 void slotChangeSubType();
00334 void slotChangeFormat();
00335
00336 private:
00337
00338
00339
00340 QPtrList<KoVariable> variables;
00341 QMap< QString, QString > varValues;
00342 KoVariableSettings *m_variableSettings;
00343 KoVariable *m_varSelected;
00344 KoVariableFormatCollection *m_formatCollection;
00345 };
00346
00347
00348
00349
00350
00351
00352 class KoDocument;
00353 class KoVariable;
00354 class QDomElement;
00355 class KoTextFormat;
00356
00357
00362 class KOTEXT_EXPORT KoVariable : public KoTextCustomItem
00363 {
00364 public:
00365 KoVariable( KoTextDocument *fs, KoVariableFormat *varFormat,KoVariableCollection *varColl );
00366 virtual ~KoVariable();
00367
00368 virtual VariableType type() const = 0;
00369 virtual short int subType() const { return 0; }
00370
00371
00372 virtual Placement placement() const { return PlaceInline; }
00373 virtual void resize();
00374 virtual int ascent() const { return m_ascent; }
00375 virtual int widthHint() const { return width; }
00376 virtual int minimumWidth() const { return width; }
00377 virtual void drawCustomItem( QPainter* p, int x, int y, int wpix, int hpix, int ascentpix, int cx, int cy, int cw, int ch, const QColorGroup& cg, bool selected, int offset, bool drawingShadow);
00378
00384 void drawCustomItemHelper( QPainter* p, int x, int y, int wpix, int hpix, int ascentpix, const QColorGroup& cg, bool selected, int offset, KoTextFormat* fmt, const QFont& font, QColor textColor, bool drawingShadow );
00385
00386 void setVariableFormat( KoVariableFormat *_varFormat );
00387
00388 KoVariableFormat *variableFormat() const
00389 { return m_varFormat; }
00390
00391 KoVariableCollection *variableColl() const
00392 { return m_varColl; }
00393
00399 virtual QString text(bool realValue=false);
00400
00401 virtual QString fieldCode();
00402
00404 QVariant varValue() const { return m_varValue; }
00405
00412 void recalcAndRepaint();
00413
00415 virtual void save( QDomElement &parentElem );
00416 virtual void saveOasis( KoXmlWriter& writer, KoSavingContext& context ) const;
00417 virtual void load( QDomElement &elem );
00418 virtual void loadOasis( const QDomElement &elem, KoOasisContext& context );
00419
00423 virtual int typeId() const { return 4; }
00424
00426 virtual QStringList subTypeList();
00427
00429 virtual void setVariableSubType( short int ) {}
00430
00434 virtual short int variableSubType(short int menuNumber){ return menuNumber; }
00435
00436 QString convertKlocaleToQDateTimeFormat( const QString & _format );
00437
00438 protected:
00440 virtual void saveVariable( QDomElement &parentElem ) = 0;
00441 virtual int correctValue() const { return 0;}
00442
00443 KoVariableFormat *m_varFormat;
00444 KoVariableCollection *m_varColl;
00445 QVariant m_varValue;
00446 int m_ascent;
00447
00448
00449
00450 class Private;
00451 Private *d;
00452 };
00453
00454
00458 class KOTEXT_EXPORT KoDateVariable : public KoVariable
00459 {
00460 public:
00461 KoDateVariable( KoTextDocument *textdoc, short int subtype, KoVariableFormat *_varFormat,KoVariableCollection *_varColl , int _correctDate = 0);
00462
00463 virtual VariableType type() const
00464 { return VT_DATE; }
00465
00466 enum { VST_DATE_FIX = 0, VST_DATE_CURRENT = 1, VST_DATE_LAST_PRINTING = 2, VST_DATE_CREATE_FILE = 3, VST_DATE_MODIFY_FILE =4 };
00467 static QStringList actionTexts();
00468
00469 virtual void recalc();
00470 virtual QString fieldCode();
00471 virtual void resize();
00472 void setDate( const QDate & _date ) { m_varValue = QVariant(_date); }
00473
00474 virtual void saveVariable( QDomElement &parentElem );
00475 virtual int correctValue() const { return m_correctDate;}
00476 virtual void load( QDomElement &elem );
00477 virtual void loadOasis( const QDomElement &elem, KoOasisContext& context );
00478 virtual void saveOasis( KoXmlWriter& writer, KoSavingContext& context ) const;
00479
00480 virtual QStringList subTypeList();
00482 virtual void setVariableSubType( short int subtype )
00483 { m_subtype = subtype; }
00484 virtual short int subType() const { return m_subtype; }
00488 static QCString formatStr( int & correct );
00492 static QCString defaultFormat();
00493
00494 protected:
00495 short int m_subtype;
00496 int m_correctDate;
00497 };
00498
00499
00503 class KOTEXT_EXPORT KoTimeVariable : public KoVariable
00504 {
00505 public:
00506 KoTimeVariable( KoTextDocument *textdoc, short int subtype, KoVariableFormat *varFormat, KoVariableCollection *_varColl, int _correct);
00507
00508 virtual VariableType type() const
00509 { return VT_TIME; }
00510
00511 enum { VST_TIME_FIX = 0, VST_TIME_CURRENT = 1 };
00512 static QStringList actionTexts();
00513
00514 virtual void recalc();
00515 virtual void resize();
00516 virtual QString fieldCode();
00517
00518 void setTime( const QTime & _time ) { m_varValue = QVariant(_time); }
00519
00520 virtual void saveVariable( QDomElement &parentElem );
00521 virtual int correctValue() const { return m_correctTime;}
00522 virtual void load( QDomElement &elem );
00523 virtual void loadOasis( const QDomElement &elem, KoOasisContext& context );
00524 virtual void saveOasis( KoXmlWriter& writer, KoSavingContext& context ) const;
00525
00526 virtual QStringList subTypeList();
00527 virtual void setVariableSubType( short int subtype )
00528 { m_subtype = subtype; }
00529 virtual short int subType() const { return m_subtype; }
00533 static QCString formatStr(int & _correct);
00537 static QCString defaultFormat();
00538
00539 protected:
00540 short int m_subtype;
00541 int m_correctTime;
00542 };
00543
00544
00545
00550 class KOTEXT_EXPORT KoCustomVariable : public KoVariable
00551 {
00552 public:
00553 KoCustomVariable(KoTextDocument *textdoc , const QString &name, KoVariableFormat *varFormat,KoVariableCollection *_varcoll );
00554
00555 virtual VariableType type() const
00556 { return VT_CUSTOM; }
00557 static QStringList actionTexts();
00558
00559 virtual void saveVariable( QDomElement &parentElem );
00560 virtual void load( QDomElement &elem );
00561 virtual void loadOasis( const QDomElement &elem, KoOasisContext& context );
00562 virtual void saveOasis( KoXmlWriter& writer, KoSavingContext& context ) const;
00563
00564 QString name() const { return m_varValue.toString(); }
00565 virtual void recalc();
00566 virtual QString fieldCode();
00567
00568 virtual QString text(bool realValue=false);
00569
00570 QString value() const;
00571 void setValue( const QString &v );
00572
00573 protected:
00574 };
00575
00576
00582 class KOTEXT_EXPORT KoFieldVariable : public KoVariable
00583 {
00584 public:
00585 KoFieldVariable( KoTextDocument *textdoc, short int subtype, KoVariableFormat *varFormat,KoVariableCollection *_varColl, KoDocument *_doc );
00586
00587
00588 enum FieldSubType { VST_NONE = -1,
00589 VST_FILENAME = 0, VST_DIRECTORYNAME = 1,
00590 VST_AUTHORNAME = 2, VST_EMAIL = 3, VST_COMPANYNAME = 4,
00591 VST_PATHFILENAME = 5, VST_FILENAMEWITHOUTEXTENSION=6,
00592 VST_TELEPHONE_WORK = 7, VST_FAX = 8, VST_COUNTRY = 9,
00593 VST_TITLE = 10, VST_ABSTRACT = 11,
00594 VST_POSTAL_CODE = 12, VST_CITY = 13, VST_STREET = 14,
00595 VST_AUTHORTITLE = 15, VST_INITIAL = 16, VST_TELEPHONE_HOME = 17, VST_SUBJECT = 18, VST_KEYWORDS=19,VST_AUTHORPOSITION = 20 };
00596
00597 virtual VariableType type() const
00598 { return VT_FIELD; }
00599
00600 virtual void saveVariable( QDomElement &parentElem );
00601 virtual void load( QDomElement &elem );
00602 virtual void loadOasis( const QDomElement &elem, KoOasisContext& context );
00603 virtual void saveOasis( KoXmlWriter& writer, KoSavingContext& context ) const;
00604 virtual QString fieldCode();
00605
00606 virtual void recalc();
00607 virtual QString text(bool realValue=false);
00608
00609 QString value() const { return m_varValue.toString(); }
00610
00611 static QStringList actionTexts();
00615 virtual short int variableSubType( short int menuNumber );
00619 static FieldSubType fieldSubType( short int menuNumber);
00620
00621 virtual QStringList subTypeList();
00622 virtual void setVariableSubType( short int subtype )
00623 { m_subtype = subtype; }
00624 virtual short int subType() const { return m_subtype; }
00625
00626 protected:
00627 short int m_subtype;
00628 KoDocument *m_doc;
00629 };
00630
00631
00632 class KOTEXT_EXPORT KoMailMergeVariable : public KoVariable
00633 {
00634 public:
00635 KoMailMergeVariable( KoTextDocument *textdoc, const QString &name, KoVariableFormat *varFormat, KoVariableCollection *_varColl );
00636
00637 virtual VariableType type() const
00638 { return VT_MAILMERGE; }
00639 static QStringList actionTexts();
00640 virtual QString fieldCode();
00641
00642 virtual void saveVariable( QDomElement &parentElem );
00643 virtual void load( QDomElement &elem );
00644 virtual void loadOasis( const QDomElement &elem, KoOasisContext& context );
00645 virtual void saveOasis( KoXmlWriter& writer, KoSavingContext& context ) const;
00646
00647 virtual QString text(bool realValue=false);
00648 QString name() const { return m_varValue.toString(); }
00649 virtual QString value() const;
00650
00651 protected:
00652 };
00653
00654
00660 class KOTEXT_EXPORT KoPageVariable : public KoVariable
00661 {
00662 public:
00663 KoPageVariable( KoTextDocument *textdoc, short int subtype, KoVariableFormat *varFormat ,KoVariableCollection *_varColl);
00664
00665 virtual VariableType type() const
00666 { return VT_PGNUM; }
00667
00668 enum { VST_PGNUM_CURRENT = 0, VST_PGNUM_TOTAL = 1, VST_CURRENT_SECTION = 2 , VST_PGNUM_PREVIOUS = 3, VST_PGNUM_NEXT = 4 };
00669 static QStringList actionTexts();
00670 virtual QString fieldCode();
00671
00672 virtual QStringList subTypeList();
00673
00674 virtual void setVariableSubType( short int subtype );
00675
00676
00677
00678 void setPgNum( int pgNum ) { m_varValue = QVariant( pgNum); }
00679
00680 void setSectionTitle( const QString& title );
00681
00682 virtual short int subType() const { return m_subtype; }
00683
00684 virtual void recalc() = 0;
00685
00686 virtual void saveVariable( QDomElement &parentElem );
00687 virtual void load( QDomElement &elem );
00688 virtual void loadOasis( const QDomElement &elem, KoOasisContext& context );
00689 virtual void saveOasis( KoXmlWriter& writer, KoSavingContext& context ) const;
00690 protected:
00691 short int m_subtype;
00692 };
00693
00694
00695 class KOTEXT_EXPORT KoLinkVariable : public KoVariable
00696 {
00697 public:
00698 KoLinkVariable( KoTextDocument *textdoc, const QString & _linkName, const QString & _ulr,KoVariableFormat *varFormat, KoVariableCollection *_varColl );
00699 virtual void drawCustomItem( QPainter* p, int x, int y, int wpix, int hpix, int ascentpix, int , int , int , int , const QColorGroup& cg, bool selected, int offset, bool drawingShadow );
00700
00701 virtual VariableType type() const
00702 { return VT_LINK; }
00703
00704 static QStringList actionTexts();
00705 virtual QString fieldCode();
00706
00707 virtual void saveVariable( QDomElement &parentElem );
00708 virtual void load( QDomElement &elem );
00709 virtual void loadOasis( const QDomElement &elem, KoOasisContext& context );
00710 virtual void saveOasis( KoXmlWriter& writer, KoSavingContext& context ) const;
00711
00712 virtual QString text(bool realValue=false);
00713 QString value() const { return m_varValue.toString(); }
00714 QString url() const { return m_url;}
00715
00716 virtual void recalc();
00717
00718 void setLink(const QString & _linkName, const QString &_url)
00719 {
00720 m_varValue=QVariant(_linkName);
00721 m_url=_url;
00722 }
00723
00724 protected:
00725 QString m_url;
00726 };
00727
00728
00729
00730 class KOTEXT_EXPORT KoNoteVariable : public KoVariable
00731 {
00732 public:
00733 KoNoteVariable( KoTextDocument *textdoc, const QString & _note,KoVariableFormat *varFormat, KoVariableCollection *_varColl );
00734 virtual void drawCustomItem( QPainter* p, int x, int y, int wpix, int hpix, int ascentpix, int , int , int , int , const QColorGroup& cg, bool selected, int offset, bool drawingShadow );
00735
00736 virtual VariableType type() const
00737 { return VT_NOTE; }
00738
00739 static QStringList actionTexts();
00740 virtual QString fieldCode();
00741
00742 virtual void saveVariable( QDomElement &parentElem );
00743 virtual void load( QDomElement &elem );
00744 virtual void loadOasis( const QDomElement &elem, KoOasisContext& context );
00745 virtual void saveOasis( KoXmlWriter& writer, KoSavingContext& context ) const;
00746
00747 virtual QString text(bool realValue=false);
00748 QString note() const { return m_varValue.toString(); }
00749 void setNote( const QString & _note) { m_varValue = QVariant(_note); }
00750 virtual void recalc();
00751
00752 QString createdNote() const;
00753 protected:
00754 QDate m_createdNoteDate;
00755 };
00756
00757
00758 class KOTEXT_EXPORT KoStatisticVariable : public KoVariable
00759 {
00760 public:
00761 KoStatisticVariable( KoTextDocument *textdoc, short int subtype,
00762 KoVariableFormat *varFormat,
00763 KoVariableCollection *_varColl);
00764
00765 enum {
00766 VST_STATISTIC_NB_WORD = 0,
00767 VST_STATISTIC_NB_SENTENCE = 1,
00768 VST_STATISTIC_NB_LINES = 2,
00769 VST_STATISTIC_NB_CHARACTERE = 3,
00770 VST_STATISTIC_NB_NON_WHITESPACE_CHARACTERE = 4,
00771 VST_STATISTIC_NB_SYLLABLE = 5,
00772 VST_STATISTIC_NB_FRAME = 6,
00773 VST_STATISTIC_NB_EMBEDDED = 7,
00774 VST_STATISTIC_NB_PICTURE = 8,
00775 VST_STATISTIC_NB_TABLE = 9
00776 };
00777
00778 virtual VariableType type() const
00779 { return VT_STATISTIC; }
00780 static QStringList actionTexts();
00781
00782 virtual QStringList subTypeList();
00783
00784 virtual void saveVariable( QDomElement &parentElem );
00785 virtual void load( QDomElement &elem );
00786 virtual void loadOasis( const QDomElement &elem, KoOasisContext& context );
00787 virtual void saveOasis( KoXmlWriter& writer, KoSavingContext& context ) const;
00788
00789 virtual short int subType() const { return m_subtype; }
00790
00791 virtual void setVariableSubType( short int subtype );
00792
00793 QString name() const { return m_varValue.toString(); }
00794 virtual QString fieldCode();
00795
00796 QString value() const;
00797 void setValue( const QString &v );
00798 static void setExtendedType( bool _b) { m_extendedType = _b; }
00799 static bool extendedType() { return m_extendedType; }
00800 protected:
00801 short int m_subtype;
00802
00803 static bool m_extendedType;
00804 };
00805
00806
00807 #endif