From bd3049b65513d8c161891667b8e9a4fe9bcd79d2 Mon Sep 17 00:00:00 2001 From: Vladimir Glazounov Date: Wed, 11 Apr 2007 20:23:25 +0000 Subject: INTEGRATION: CWS hedaburemove01 (1.1.2); FILE ADDED 2007/02/09 16:14:48 vg 1.1.2.1: #72503# get rid of hedabu procedure: Moving headers to sfx2/inc/sfx2 and correspondent necessary changes --- sfx2/inc/sfx2/lnkbase.hxx | 198 +++++++++++++++++++++++++++++++++++++++++++++ sfx2/inc/sfx2/macrconf.hxx | 174 +++++++++++++++++++++++++++++++++++++++ sfx2/inc/sfx2/macropg.hxx | 154 +++++++++++++++++++++++++++++++++++ sfx2/inc/sfx2/mgetempl.hxx | 131 ++++++++++++++++++++++++++++++ 4 files changed, 657 insertions(+) create mode 100644 sfx2/inc/sfx2/lnkbase.hxx create mode 100644 sfx2/inc/sfx2/macrconf.hxx create mode 100644 sfx2/inc/sfx2/macropg.hxx create mode 100644 sfx2/inc/sfx2/mgetempl.hxx (limited to 'sfx2/inc') diff --git a/sfx2/inc/sfx2/lnkbase.hxx b/sfx2/inc/sfx2/lnkbase.hxx new file mode 100644 index 000000000000..c520e83f3ca7 --- /dev/null +++ b/sfx2/inc/sfx2/lnkbase.hxx @@ -0,0 +1,198 @@ +/************************************************************************* + * + * OpenOffice.org - a multi-platform office productivity suite + * + * $RCSfile: lnkbase.hxx,v $ + * + * $Revision: 1.2 $ + * + * last change: $Author: vg $ $Date: 2007-04-11 21:22:41 $ + * + * The Contents of this file are made available subject to + * the terms of GNU Lesser General Public License Version 2.1. + * + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2005 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + ************************************************************************/ +#ifndef _LNKBASE_HXX +#define _LNKBASE_HXX + +#ifndef _COM_SUN_STAR_IO_XINPUTSTREAM_HPP_ +#include +#endif +#ifndef _SAL_CONFIG_H_ +#include "sal/config.h" +#endif +#ifndef INCLUDED_SFX2_DLLAPI_H +#include "sfx2/dllapi.h" +#endif +#ifndef _SOT_EXCHANGE_HXX //autogen +#include +#endif +#ifndef _TOOLS_REF_HXX +#include +#endif +#ifndef _LINKSOURCE_HXX +#include +#endif + +namespace com { namespace sun { namespace star { namespace uno +{ + class Any; + //class Type; +}}}} + +namespace sfx2 +{ + +struct ImplBaseLinkData; +class SvLinkManager; +class SvLinkSource; +class FileDialogHelper; + +#ifndef OBJECT_DDE_EXTERN +#define OBJECT_INTERN 0x00 +//#define OBJECT_SO_EXTERN 0x01 +#define OBJECT_DDE_EXTERN 0x02 +#endif + +#define OBJECT_CLIENT_SO 0x80 // ein Link +#define OBJECT_CLIENT_DDE 0x81 +//#define OBJECT_CLIENT_OLE 0x82 // ein Ole-Link +//#define OBJECT_CLIENT_OLE_CACHE 0x83 // ein Ole-Link mit SvEmbeddedObject +#define OBJECT_CLIENT_FILE 0x90 +#define OBJECT_CLIENT_GRF 0x91 +#define OBJECT_CLIENT_OLE 0x92 // embedded link + +enum sfxlink { + // Ole2 compatibel und persistent + LINKUPDATE_ALWAYS = 1, + LINKUPDATE_ONCALL = 3, + + LINKUPDATE_END // dummy! +}; + +struct BaseLink_Impl; + +class SFX2_DLLPUBLIC SvBaseLink : public SvRefBase +{ +private: + friend class SvLinkManager; + friend class SvLinkSource; + + SvLinkSourceRef xObj; + String aLinkName; + BaseLink_Impl* pImpl; + USHORT nObjType; + BOOL bVisible : 1; + BOOL bSynchron : 1; + BOOL bUseCache : 1; // fuer GrafikLinks! + BOOL bWasLastEditOK : 1; + + DECL_LINK( EndEditHdl, String* ); + + bool ExecuteEdit( const String& _rNewName ); + +protected: + void SetObjType( USHORT ); + + // setzen des LinkSourceName ohne aktion + void SetName( const String & rLn ); + // LinkSourceName der im SvLinkBase steht + String GetName() const; + + ImplBaseLinkData* pImplData; + + sal_Bool m_bIsReadOnly; + com::sun::star::uno::Reference + m_xInputStreamToLoadFrom; + + SvBaseLink(); + SvBaseLink( USHORT nLinkType, ULONG nContentType = FORMAT_STRING ); + virtual ~SvBaseLink(); + + void _GetRealObject( BOOL bConnect = TRUE ); + + SvLinkSource* GetRealObject() + { + if( !xObj.Is() ) + _GetRealObject(); + return xObj; + } + +public: + TYPEINFO(); + // ask JP + virtual void Closed(); + SvBaseLink( const String& rNm, USHORT nObjectType, + SvLinkSource* ); + + USHORT GetObjType() const { return nObjType; } + + void SetObj( SvLinkSource * pObj ); + SvLinkSource* GetObj() const { return xObj; } + + void SetLinkSourceName( const String & rName ); + String GetLinkSourceName() const; + + virtual void DataChanged( const String & rMimeType, + const ::com::sun::star::uno::Any & rValue ); + + void SetUpdateMode( USHORT ); + USHORT GetUpdateMode() const; + ULONG GetContentType() const; + BOOL SetContentType( ULONG nType ); + + SvLinkManager* GetLinkManager(); + const SvLinkManager* GetLinkManager() const; + void SetLinkManager( SvLinkManager* _pMgr ); + + BOOL Update(); + void Disconnect(); + + // Link impl: DECL_LINK( MyEndDialogHdl, SvBaseLink* ); <= param is this + virtual void Edit( Window*, const Link& rEndEditHdl ); + + // soll der Link im Dialog angezeigt werden ? (Links im Link im ...) + BOOL IsVisible() const { return bVisible; } + void SetVisible( BOOL bFlag ) { bVisible = bFlag; } + // soll der Link synchron oder asynchron geladen werden? + BOOL IsSynchron() const { return bSynchron; } + void SetSynchron( BOOL bFlag ) { bSynchron = bFlag; } + + BOOL IsUseCache() const { return bUseCache; } + void SetUseCache( BOOL bFlag ) { bUseCache = bFlag; } + + void setStreamToLoadFrom( + const com::sun::star::uno::Reference& xInputStream, + sal_Bool bIsReadOnly ) + { m_xInputStreamToLoadFrom = xInputStream; + m_bIsReadOnly = bIsReadOnly; } + + inline BOOL WasLastEditOK() const { return bWasLastEditOK; } + FileDialogHelper* GetFileDialog( sal_uInt32 nFlags, const String& rFactory ) const; +}; + +SV_DECL_IMPL_REF(SvBaseLink); + +} + +#endif diff --git a/sfx2/inc/sfx2/macrconf.hxx b/sfx2/inc/sfx2/macrconf.hxx new file mode 100644 index 000000000000..04be2b228db4 --- /dev/null +++ b/sfx2/inc/sfx2/macrconf.hxx @@ -0,0 +1,174 @@ +/************************************************************************* + * + * OpenOffice.org - a multi-platform office productivity suite + * + * $RCSfile: macrconf.hxx,v $ + * + * $Revision: 1.2 $ + * + * last change: $Author: vg $ $Date: 2007-04-11 21:22:51 $ + * + * The Contents of this file are made available subject to + * the terms of GNU Lesser General Public License Version 2.1. + * + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2005 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + ************************************************************************/ +#ifndef _SFX_MACROCONF_HXX +#define _SFX_MACROCONF_HXX + +#ifndef _SAL_CONFIG_H_ +#include "sal/config.h" +#endif + +#ifndef INCLUDED_SFX2_DLLAPI_H +#include "sfx2/dllapi.h" +#endif + +#ifndef _SAL_TYPES_H_ +#include "sal/types.h" +#endif +#ifndef _ERRCODE_HXX //autogen +#include +#endif +#define _SVSTDARR_USHORTS +#include // SvUShorts +#include + +class SfxMacroInfo; +class SfxSlot; +class SfxMacroInfoItem; +class SfxObjectShell; +class BasicManager; +struct SfxMacroConfig_Impl; +class SbMethod; +class SbxValue; +class SbxObject; +class SbxArray; +class SvStream; +class SvxMacro; + +typedef SfxMacroInfo* SfxMacroInfoPtr; +//#if 0 // _SOLAR__PRIVATE +SV_DECL_PTRARR(SfxMacroInfoArr_Impl, SfxMacroInfoPtr, 5, 5) +//#else +//class SfxMacroInfoArr_Impl; +//#endif + +class SFX2_DLLPUBLIC SfxMacroInfo +{ +friend class SfxMacroConfig; +friend class SfxEventConfiguration; +friend SvStream& operator >> (SvStream& rStream, SfxMacroInfo& rInfo); +friend SvStream& operator << (SvStream& rStream, const SfxMacroInfo& rInfo); + + SfxObjectShell* pDocShell; // nur noch wg. Kompatib. drin + String* pHelpText; + sal_uInt16 nRefCnt; + sal_Bool bAppBasic; + String aLibName; + String aModuleName; + String aMethodName; + sal_uInt16 nSlotId; + SfxSlot* pSlot; + +public: + SfxMacroInfo( const String& rURL ); + SfxMacroInfo(SfxObjectShell *pDoc=NULL); + SfxMacroInfo( SfxObjectShell* pDoc, const String& rQualifiedName ); + SfxMacroInfo(SfxMacroInfo& rOther); + SfxMacroInfo(SfxObjectShell* pMgr, const String& rLibName, + const String& rModuleName, const String& rMethodName); + ~SfxMacroInfo(); + sal_Bool operator==(const SfxMacroInfo& rOther) const; + int Load (SvStream&); + int Store (SvStream&); + String GetMacroName() const; + String GetQualifiedName() const; + String GetFullQualifiedName() const; + BasicManager* GetBasicManager() const; + String GetBasicName() const; + String GetHelpText() const; + sal_Bool IsAppMacro() const + { return bAppBasic; } + const String& GetModuleName() const + { return aModuleName; } + const String& GetLibName() const + { return aLibName; } + const String& GetMethodName() const + { return aMethodName; } + sal_uInt16 GetSlotId() const + { return nSlotId; } + SfxSlot* GetSlot() const + { return pSlot; } + + sal_Bool Compare( const SvxMacro& ) const; + void SetHelpText( const String& rText ); + String GetURL() const; +}; + +//ASDBG obsolete >= 582 +//ASDBG class ::com::sun::star::uno::Reference< ::com::sun::star::script::XEngine > ; +//ASDBG class ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > ; + +class SFX2_DLLPUBLIC SfxMacroConfig +{ +friend class SfxEventConfiguration; + + SAL_DLLPRIVATE static SfxMacroConfig* pMacroConfig; + + SfxMacroConfig_Impl* pImp; + SvUShorts aIdArray; + +public: + SfxMacroConfig(); + ~SfxMacroConfig(); + + static SfxMacroConfig* GetOrCreate(); + + static String RequestHelp( sal_uInt16 nId ); + static sal_Bool IsMacroSlot( sal_uInt16 nId ); + static sal_Bool IsBasic( SbxObject*, const String&, BasicManager* ); + static ErrCode Call( SbxObject*, const String&, BasicManager*, + SbxArray *pArgs=NULL, SbxValue *pRet=NULL ); +//ASDBG obsolete >= 582 +//ASDBG static void CallStarScript( const ::com::sun::star::uno::Reference< ::com::sun::star::script::XEngine > & rxEngine, const String & rCode, +//ASDBG const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > & rSource, void *pArgs, void *pRet ); + static SbMethod* GetMethod_Impl( const String&, BasicManager* ); + + sal_uInt16 GetSlotId(SfxMacroInfoPtr); + void ReleaseSlotId(sal_uInt16 nId); + void RegisterSlotId(sal_uInt16 nId); + const SfxMacroInfoPtr GetMacroInfo(sal_uInt16 nId) const; + sal_Bool ExecuteMacro(sal_uInt16 nId, const String& rArgs ) const; + sal_Bool ExecuteMacro( SfxObjectShell*, const SvxMacro*, const String& ) const; + sal_Bool CheckMacro(sal_uInt16 nId) const; + sal_Bool CheckMacro( SfxObjectShell*, const SvxMacro* ) const; + +//#if 0 // _SOLAR__PRIVATE + SAL_DLLPRIVATE static void Release_Impl(); + SAL_DLLPRIVATE const SfxMacroInfoPtr GetMacroInfo_Impl( const SvxMacro *pMacro ) const; + DECL_DLLPRIVATE_LINK( CallbackHdl_Impl, SfxMacroConfig*); + DECL_DLLPRIVATE_LINK( EventHdl_Impl, SfxMacroInfo*); +//#endif +}; + +#endif diff --git a/sfx2/inc/sfx2/macropg.hxx b/sfx2/inc/sfx2/macropg.hxx new file mode 100644 index 000000000000..15bdf60e051d --- /dev/null +++ b/sfx2/inc/sfx2/macropg.hxx @@ -0,0 +1,154 @@ +/************************************************************************* + * + * OpenOffice.org - a multi-platform office productivity suite + * + * $RCSfile: macropg.hxx,v $ + * + * $Revision: 1.2 $ + * + * last change: $Author: vg $ $Date: 2007-04-11 21:23:15 $ + * + * The Contents of this file are made available subject to + * the terms of GNU Lesser General Public License Version 2.1. + * + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2005 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + ************************************************************************/ +#ifndef _MACROPG_HXX +#define _MACROPG_HXX + +#ifndef _SAL_CONFIG_H_ +#include "sal/config.h" +#endif + +#ifndef INCLUDED_SFX2_DLLAPI_H +#include "sfx2/dllapi.h" +#endif + +#include +#include + +#ifndef _SFXMACITEM_HXX //autogen +#include +#endif +#ifndef _LSTBOX_HXX //autogen +#include +#endif +class _SfxMacroTabPage; +class SvStringsDtor; +class SvTabListBox; +class Edit; +class String; + +typedef SvStringsDtor* (*FNGetRangeHdl)( _SfxMacroTabPage*, const String& rLanguage ); +typedef SvStringsDtor* (*FNGetMacrosOfRangeHdl)( _SfxMacroTabPage*, const String& rLanguage, const String& rRange ); + +class SfxConfigGroupListBox_Impl; +class SfxConfigFunctionListBox_Impl; + +class _HeaderTabListBox; +class _SfxMacroTabPage_Impl; + +class SFX2_DLLPUBLIC _SfxMacroTabPage : public SfxTabPage +{ + SvxMacroTableDtor aTbl; +//#if 0 // _SOLAR__PRIVATE + DECL_DLLPRIVATE_STATIC_LINK( _SfxMacroTabPage, SelectEvent_Impl, SvTabListBox * ); + DECL_DLLPRIVATE_STATIC_LINK( _SfxMacroTabPage, SelectGroup_Impl, ListBox * ); + DECL_DLLPRIVATE_STATIC_LINK( _SfxMacroTabPage, SelectMacro_Impl, ListBox * ); + + DECL_DLLPRIVATE_STATIC_LINK( _SfxMacroTabPage, DoubleClickHdl_Impl, Control* ); + DECL_DLLPRIVATE_STATIC_LINK( _SfxMacroTabPage, AssignDeleteHdl_Impl, PushButton * ); + + DECL_DLLPRIVATE_STATIC_LINK( _SfxMacroTabPage, ChangeScriptHdl_Impl, RadioButton * ); + DECL_DLLPRIVATE_STATIC_LINK( _SfxMacroTabPage, GetFocus_Impl, Edit* ); + DECL_DLLPRIVATE_STATIC_LINK( _SfxMacroTabPage, TimeOut_Impl, Timer* ); +//#endif +protected: + _SfxMacroTabPage_Impl* mpImpl; + + _SfxMacroTabPage( Window* pParent, const ResId& rId, const SfxItemSet& rItemSet ); + + void InitAndSetHandler(); + void FillEvents(); + void FillMacroList(); + void EnableButtons( const String& rLanguage ); + +public: + + virtual ~_SfxMacroTabPage(); + + void AddEvent( const String & rEventName, USHORT nEventId ); + + const SvxMacroTableDtor& GetMacroTbl() const; + void SetMacroTbl( const SvxMacroTableDtor& rTbl ); + void ClearMacroTbl(); + + virtual void ScriptChanged( const String& rLanguage ); + + // zum setzen / abfragen der Links + void SetGetRangeLink( FNGetRangeHdl pFn ); + FNGetRangeHdl GetGetRangeLink() const; + void SetGetMacrosOfRangeLink( FNGetMacrosOfRangeHdl pFn ); + FNGetMacrosOfRangeHdl GetGetMacrosOfRangeLink() const; + + // --------- Erben aus der Basis ------------- + virtual BOOL FillItemSet( SfxItemSet& rSet ); + virtual void Reset( const SfxItemSet& rSet ); + + void SetReadOnly( BOOL bSet ); + BOOL IsReadOnly() const; + void SelectEvent( const String& rEventName, USHORT nEventId ); +}; + +inline const SvxMacroTableDtor& _SfxMacroTabPage::GetMacroTbl() const +{ + return aTbl; +} + +inline void _SfxMacroTabPage::SetMacroTbl( const SvxMacroTableDtor& rTbl ) +{ + aTbl = rTbl; +} + +inline void _SfxMacroTabPage::ClearMacroTbl() +{ + aTbl.DelDtor(); +} + +class SFX2_DLLPUBLIC SfxMacroTabPage : public _SfxMacroTabPage +{ +public: + SfxMacroTabPage( Window* pParent, const ResId& rId, + const SfxItemSet& rSet ); + + // --------- Erben aus der Basis ------------- + static SfxTabPage* Create( Window* pParent, const SfxItemSet& rAttrSet ); +}; + +class SFX2_DLLPUBLIC SfxMacroAssignDlg : public SfxSingleTabDialog +{ +public: + SfxMacroAssignDlg( Window* pParent, SfxItemSet& rSet ); + virtual ~SfxMacroAssignDlg(); +}; + +#endif diff --git a/sfx2/inc/sfx2/mgetempl.hxx b/sfx2/inc/sfx2/mgetempl.hxx new file mode 100644 index 000000000000..478aeb79d98b --- /dev/null +++ b/sfx2/inc/sfx2/mgetempl.hxx @@ -0,0 +1,131 @@ +/************************************************************************* + * + * OpenOffice.org - a multi-platform office productivity suite + * + * $RCSfile: mgetempl.hxx,v $ + * + * $Revision: 1.2 $ + * + * last change: $Author: vg $ $Date: 2007-04-11 21:23:25 $ + * + * The Contents of this file are made available subject to + * the terms of GNU Lesser General Public License Version 2.1. + * + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2005 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + ************************************************************************/ +#ifndef _SFX_MGETEMPL_HXX +#define _SFX_MGETEMPL_HXX + +#ifndef _SV_EDIT_HXX +#include +#endif +#ifndef _SV_FIXED_HXX +#include +#endif +#ifndef _SV_LSTBOX_HXX +#include +#endif +#ifndef _STDCTRL_HXX +#include +#endif +#ifndef _SV_MEDIT_HXX +#include +#endif + +#include + +/* erwartet: + SID_TEMPLATE_NAME : In: StringItem, Name der Vorlage + SID_TEMPLATE_FAMILY : In: Familie der Vorlage +*/ + +class SfxStyleFamilies; +class SfxStyleFamilyItem; +class SfxStyleSheetBase; + +#ifdef _SFXDLG_HXX +#define FixedInfo FixedText +#endif + +class SfxManageStyleSheetPage : public SfxTabPage +{ + FixedText aNameFt; + Edit aNameEd; + CheckBox aAutoCB; + + FixedText aFollowFt; + ListBox aFollowLb; + + FixedText aBaseFt; + ListBox aBaseLb; + + FixedText aFilterFt; + ListBox aFilterLb; + + FixedInfo aDescFt; + MultiLineEdit aDescED; + FixedLine aDescGb; + + SfxStyleSheetBase *pStyle; + SfxStyleFamilies *pFamilies; + const SfxStyleFamilyItem *pItem; + String aBuf; + BOOL bModified; + + // initiale Daten des Styles + String aName; + String aFollow; + String aParent; + USHORT nFlags; + +private: +friend class SfxStyleDialog; + +//#if 0 // _SOLAR__PRIVATE + DECL_LINK( GetFocusHdl, Edit * ); + DECL_LINK( LoseFocusHdl, Edit * ); + + void UpdateName_Impl(ListBox *, const String &rNew); + void SetDescriptionText_Impl(); +//#endif + + SfxManageStyleSheetPage(Window *pParent, const SfxItemSet &rAttrSet ); + ~SfxManageStyleSheetPage(); + + static SfxTabPage* Create(Window *pParent, const SfxItemSet &rAttrSet ); + +protected: + virtual BOOL FillItemSet(SfxItemSet &); + virtual void Reset(const SfxItemSet &); + + using TabPage::ActivatePage; + virtual void ActivatePage(const SfxItemSet &); + using TabPage::DeactivatePage; + virtual int DeactivatePage(SfxItemSet * = 0); +}; + +#ifdef FixedInfo +#undef FixedInfo +#endif + +#endif + -- cgit