home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / msdn_vcb / samples / vc98 / sdk / com / inole2 / chap14 / cosmo / cosmo.h < prev    next >
Encoding:
C/C++ Source or Header  |  1995-05-03  |  17.5 KB  |  606 lines

  1. /*
  2.  * COSMO.H
  3.  * Cosmo Chapter 14
  4.  *
  5.  * Single include file that pulls in everything needed for other
  6.  * source files in the Cosmo application.
  7.  *
  8.  * Copyright (c)1993-1995 Microsoft Corporation, All Rights Reserved
  9.  *
  10.  * Kraig Brockschmidt, Microsoft
  11.  * Internet  :  kraigb@microsoft.com
  12.  * Compuserve:  >INTERNET:kraigb@microsoft.com
  13.  */
  14.  
  15.  
  16. #ifndef _COSMO_H_
  17. #define _COSMO_H_
  18.  
  19. #define INC_CLASSLIB
  20. //CHAPTER14MOD
  21. #define INC_AUTOMATION
  22. #define GUIDS_FROM_TYPELIB
  23. #define CHAPTER14
  24. #include <memory.h>
  25. //End CHAPTER14MOD
  26. #include <inole.h>
  27. #include "resource.h"
  28.  
  29. //CHAPTER14MOD
  30. //Get the Automation interfaces
  31. #include "icosmo.h"
  32. //End CHAPTER14MOD
  33.  
  34.  
  35. //Get the editor window information.
  36. #include "polyline.h"
  37.  
  38.  
  39.  
  40. //CHAPTER14MOD
  41. /*
  42.  * Forward reference automation object classes for our frame
  43.  * and document classes which then contain them.
  44.  */
  45.  
  46. class CAutoApp;
  47. typedef CAutoApp *PCAutoApp;
  48. class CClassFactory;
  49. typedef CClassFactory *PCClassFactory;
  50. class CAutoFigures;
  51. typedef CAutoFigures *PCAutoFigures;
  52. class CAutoFigure;
  53. typedef CAutoFigure *PCAutoFigure;
  54. //End CHAPTER14MOD
  55.  
  56.  
  57. //COSMO.CPP:  Frame object that creates a main window
  58.  
  59. class CCosmoFrame : public CFrame
  60.     {
  61.     //CHAPTER14MOD
  62.     friend CClassFactory;
  63.     friend CAutoApp;
  64.     friend CAutoFigures;
  65.     //End CHAPTER14MOD
  66.  
  67.     private:
  68.         HBITMAP         m_hBmpLines[5];     //Menu item bitmaps
  69.         UINT            m_uIDCurLine;       //Current line selection
  70.         BOOL            m_fInitialized;     //Did OleInitalize work?
  71.  
  72.         LPCLASSFACTORY  m_pIClassDataTran;  //For locking
  73.  
  74.         //CHAPTER14MOD
  75.         BOOL            m_fEmbedding;   //-Embedding flag?
  76.         BOOL            m_fAutomation;  //-Automation flag?
  77.  
  78.         PCAutoApp       m_pAutoApp;     //Implements ICosmoApplication
  79.         DWORD           m_dwActiveApp;  //From RegisterActiveObject
  80.  
  81.         PCClassFactory  m_pIClassFactoryApp;
  82.         DWORD           m_dwRegCOApp;
  83.  
  84.         PCClassFactory  m_pIClassFactoryFig;
  85.         DWORD           m_dwRegCOFig;
  86.         //End CHAPTER14MOD
  87.  
  88.     protected:
  89.         //Overridable for creating a CClient for this frame
  90.         virtual PCClient  CreateCClient(void);
  91.  
  92.         virtual BOOL      RegisterAllClasses(void);
  93.         virtual BOOL      PreShowInit(void);
  94.         virtual UINT      CreateToolbar(void);
  95.  
  96.         virtual LRESULT   OnCommand(HWND, WPARAM, LPARAM);
  97.         virtual void      OnDocumentDataChange(PCDocument);
  98.         virtual void      OnDocumentActivate(PCDocument);
  99.  
  100.         //New for this class
  101.         virtual void      CreateLineMenu(void);
  102.  
  103.     public:
  104.         CCosmoFrame(HINSTANCE, HINSTANCE, LPSTR, int);
  105.         virtual ~CCosmoFrame(void);
  106.  
  107.         //Overrides
  108.         virtual BOOL      Init(PFRAMEINIT);
  109.         virtual void      UpdateMenus(HMENU, UINT);
  110.         virtual void      UpdateToolbar(void);
  111.  
  112.         //New for this class
  113.         virtual void      CheckLineSelection(UINT);
  114.  
  115.         //CHAPTER14MOD
  116.         PCAutoApp         AutoApp(void);
  117.         //End CHAPTER14MOD
  118.     };
  119.  
  120.  
  121. typedef CCosmoFrame *PCCosmoFrame;
  122.  
  123.  
  124.  
  125.  
  126.  
  127. //CLIENT.CPP
  128.  
  129. /*
  130.  * The only reason we have a derived class here is to override
  131.  * CreateCDocument so we can create our own type as well as
  132.  * overriding NewDocument to perform one other piece of work once
  133.  * the document's been created.
  134.  */
  135.  
  136. class CCosmoClient : public CClient
  137.     {
  138.     //CHAPTER14MOD
  139.     friend class CAutoFigures;
  140.     //End CHAPTER14MOD
  141.  
  142.     //CHAPTER14MOD
  143.     protected:
  144.         PCAutoFigures   m_pAutoFigures;     //Collection object
  145.     //End CHAPTER14MOD
  146.  
  147.     protected:
  148.         //Overridable for creating a new CDocument
  149.         virtual PCDocument CreateCDocument(void);
  150.  
  151.     public:
  152.         CCosmoClient(HINSTANCE, PCFrame);
  153.         virtual ~CCosmoClient(void);
  154.  
  155.         virtual BOOL       Init(HMENU, LPRECT);
  156.  
  157.         virtual PCDocument NewDocument(BOOL);
  158.  
  159.         //CHAPTER14MOD
  160.         PCAutoFigures      AutoFigures(void);
  161.         //End CHAPTER14MOD
  162.  
  163.     };
  164.  
  165. typedef CCosmoClient *PCCosmoClient;
  166.  
  167.  
  168.  
  169.  
  170. //DOCUMENT.CPP
  171.  
  172. //Constant ID for the window polyline that lives in a document
  173. #define ID_POLYLINE         10
  174.  
  175.  
  176. class CCosmoDoc : public CDocument
  177.     {
  178.     friend class CPolylineAdviseSink;
  179.     //CHAPTER14MOD
  180.     friend class CAutoFigure;
  181.     //End CHAPTER14MOD
  182.  
  183.     protected:
  184.         UINT                    m_uPrevSize;    //Last WM_SIZE wParam
  185.         LONG                    m_lVer;         //Loaded Polyline ver
  186.  
  187.         PCPolyline              m_pPL;          //Polyline window here
  188.         PCPolylineAdviseSink    m_pPLAdv;       //Advises from Polyline
  189.  
  190.         //CHAPTER14MOD
  191.         PCAutoFigure            m_pAutoFig;     //ICosmoFigure
  192.         DWORD                   m_dwActiveFig;  //From RegisterActiveObject
  193.         //End CHAPTER14MOD
  194.  
  195.     protected:
  196.         virtual BOOL     FMessageHook(HWND, UINT, WPARAM, LPARAM
  197.             , LRESULT *);
  198.  
  199.         virtual BOOL     FQueryPasteFromData(LPDATAOBJECT);
  200.         virtual BOOL     PasteFromData(LPDATAOBJECT);
  201.  
  202.     public:
  203.         CCosmoDoc(HINSTANCE, PCFrame, PCDocumentAdviseSink);
  204.         virtual ~CCosmoDoc(void);
  205.  
  206.         virtual BOOL     Init(PDOCUMENTINIT);
  207.  
  208.         virtual void     Clear(void);
  209.  
  210.         virtual UINT     Load(BOOL, LPTSTR);
  211.         virtual UINT     Save(UINT, LPTSTR);
  212.  
  213.         virtual void     Undo(void);
  214.         virtual BOOL     Clip(HWND, BOOL);
  215.         virtual HGLOBAL  RenderFormat(UINT);
  216.         virtual BOOL     FQueryPaste(void);
  217.         virtual BOOL     Paste(HWND);
  218.  
  219.         virtual COLORREF ColorSet(UINT, COLORREF);
  220.         virtual COLORREF ColorGet(UINT);
  221.  
  222.         virtual UINT     LineStyleSet(UINT);
  223.         virtual UINT     LineStyleGet(void);
  224.  
  225.         //CHAPTER14MOD
  226.         PCAutoFigure     AutoFigure(void);
  227.         //End CHAPTER14MOD
  228.     };
  229.  
  230. typedef CCosmoDoc *PCCosmoDoc;
  231.  
  232.  
  233. //These color indices wrap the polyline definitions
  234. #define DOCCOLOR_BACKGROUND             POLYLINECOLOR_BACKGROUND
  235. #define DOCCOLOR_LINE                   POLYLINECOLOR_LINE
  236.  
  237.  
  238. //CHAPTER14MOD
  239.  
  240. //These are global for simplification of object implementation.
  241. extern ULONG g_cObj;
  242. extern ULONG g_cLock;
  243. extern HWND  g_hWnd;
  244.  
  245. //Function for the object to notify on destruction.
  246. void ObjectDestroyed(void);
  247.  
  248. //ICLASSF.CPP:  The generic class factory for our automation objects
  249. class CClassFactory : public IClassFactory
  250.     {
  251.     protected:
  252.         ULONG           m_cRef;
  253.         PCCosmoFrame    m_pFR;
  254.         CLSID           m_clsID;
  255.         BOOL            m_fCreated;     //Created one object yet?
  256.  
  257.     public:
  258.         CClassFactory(PCCosmoFrame, REFCLSID);
  259.         ~CClassFactory(void);
  260.  
  261.         //IUnknown members
  262.         STDMETHODIMP         QueryInterface(REFIID, PPVOID);
  263.         STDMETHODIMP_(ULONG) AddRef(void);
  264.         STDMETHODIMP_(ULONG) Release(void);
  265.  
  266.         //IClassFactory members
  267.         STDMETHODIMP         CreateInstance(LPUNKNOWN, REFIID
  268.                                  , PPVOID);
  269.         STDMETHODIMP         LockServer(BOOL);
  270.     };
  271.  
  272. typedef CClassFactory *PCClassFactory;
  273.  
  274.  
  275. //AUTOBASE.CPP
  276.  
  277. class CImpIDispatch;
  278. typedef CImpIDispatch *PCImpIDispatch;
  279.  
  280. class CImpIExtConn;
  281. typedef class CImpIExtConn *PCImpIExtConn;
  282.  
  283.  
  284.  
  285. /*
  286.  * CAutoBase is a base class for the other automation objects
  287.  * in this application.  It centralizes the implementation of
  288.  * IDispatch as well as the loading of type information.  Since
  289.  * it implements an IDispatch that calls ITypeInfo directly, this
  290.  * is structured to handle multiple languages although this
  291.  * sample only uses one.
  292.  *
  293.  * The pure virtual VTableInterface makes this an abstract
  294.  * base class.  That one function must be overridden to supply
  295.  * the right interface pointer to IDispatch::Invoke.
  296.  */
  297.  
  298. class CAutoBase
  299.     {
  300.     friend CImpIDispatch;
  301.  
  302.     public:
  303.         ULONG           m_cRef; //Public for debug checks
  304.  
  305.     protected:
  306.         PFNDESTROYED    m_pfnDestroy;
  307.         HINSTANCE       m_hInst;
  308.  
  309.         /*
  310.          * This union will have some pointer in it.  The CAutoBase
  311.          * implementation stores m_pObj.  Derived classes may
  312.          * reference that pointer as a frame, client, or
  313.          * document pointer.
  314.          */
  315.         union
  316.             {
  317.             void           *m_pObj;
  318.             PCCosmoFrame    m_pFR;
  319.             PCCosmoClient   m_pCL;
  320.             PCCosmoDoc      m_pDoc;
  321.             };
  322.  
  323.         IID             m_iid;
  324.         IID             m_diid;
  325.  
  326.         PCImpIDispatch  m_pImpIDispatch;    //Our IDispatch
  327.         PCImpIExtConn   m_pImpIExtConn;     //For app or doc
  328.  
  329.     protected:
  330.         virtual void *VTableInterface(void)=0;
  331.  
  332.     public:
  333.         CAutoBase(void *, HINSTANCE, REFIID, REFIID
  334.             , PFNDESTROYED);
  335.         virtual CAutoBase::~CAutoBase(void);
  336.  
  337.         virtual BOOL    Init(BOOL);
  338.     };
  339.  
  340. typedef CAutoBase *PCAutoBase;
  341.  
  342.  
  343. /*
  344.  * CImpIDispatch is the contained object inside CAutoBase that
  345.  * provides the entry points for IDispatch.  We could use
  346.  * CreateStdDispatch for this, but this sample is structured
  347.  * for multilingual support so we use our own IDispatch.
  348.  */
  349.  
  350. class CImpIDispatch : public IDispatch
  351.     {
  352.     public:
  353.         ULONG           m_cRef;             //For debugging
  354.         ITypeInfo      *m_pITypeInfo;       //Loaded
  355.  
  356.     private:
  357.         PCAutoBase      m_pObj;
  358.         LPUNKNOWN       m_pUnkOuter;
  359.  
  360.     public:
  361.         CImpIDispatch(PCAutoBase, LPUNKNOWN);
  362.         ~CImpIDispatch(void);
  363.  
  364.         //IUnknown members that delegate to m_pUnkOuter.
  365.         STDMETHODIMP         QueryInterface(REFIID, PPVOID);
  366.         STDMETHODIMP_(ULONG) AddRef(void);
  367.         STDMETHODIMP_(ULONG) Release(void);
  368.  
  369.         //IDispatch members
  370.         STDMETHODIMP GetTypeInfoCount(UINT *);
  371.         STDMETHODIMP GetTypeInfo(UINT, LCID, ITypeInfo **);
  372.         STDMETHODIMP GetIDsOfNames(REFIID, OLECHAR **, UINT, LCID
  373.             , DISPID *);
  374.         STDMETHODIMP Invoke(DISPID, REFIID, LCID, WORD
  375.             , DISPPARAMS *, VARIANT *, EXCEPINFO *, UINT *);
  376.     };
  377.  
  378.  
  379.  
  380. /*
  381.  * Implementation of generic IExternalConnection for both the
  382.  * application and document objects which will call the app or
  383.  * document object's Release when the last external connection
  384.  * disappears.
  385.  */
  386.  
  387. class CImpIExtConn : public IExternalConnection
  388.     {
  389.     protected:
  390.         ULONG           m_cRef;      //Interface reference count
  391.         LPUNKNOWN       m_pUnkOuter; //For delegation, closure
  392.  
  393.         ULONG           m_cStrong;   //Strong ref count.
  394.  
  395.     public:
  396.         CImpIExtConn(LPUNKNOWN);
  397.         ~CImpIExtConn(void);
  398.  
  399.         STDMETHODIMP QueryInterface(REFIID, LPVOID *);
  400.         STDMETHODIMP_(ULONG) AddRef(void);
  401.         STDMETHODIMP_(ULONG) Release(void);
  402.  
  403.         STDMETHODIMP_(DWORD) AddConnection(DWORD, DWORD);
  404.         STDMETHODIMP_(DWORD) ReleaseConnection(DWORD, DWORD, BOOL);
  405.     };
  406.  
  407.  
  408.  
  409. /*
  410.  * AUTOAPP.CPP:  Implementation of ICosmoApplication.
  411.  */
  412.  
  413. //Actions for CAutoApp::MoveSize and CAutoFigure::MoveSize helpers
  414. typedef enum
  415.     {
  416.     MOVESIZEACTION_LEFT=0,
  417.     MOVESIZEACTION_TOP,
  418.     MOVESIZEACTION_WIDTH,
  419.     MOVESIZEACTION_HEIGHT,
  420.     MOVESIZEACTION_GETLEFT,
  421.     MOVESIZEACTION_GETTOP,
  422.     MOVESIZEACTION_GETWIDTH,
  423.     MOVESIZEACTION_GETHEIGHT
  424.     } MOVESIZEACTION;
  425.  
  426.  
  427. //"Application" object for OLE Automation
  428. class CAutoApp : public CAutoBase, public ICosmoApplication
  429.     {
  430.     protected:
  431.         BOOL            m_fQuitCalled;
  432.  
  433.     protected:
  434.         long    MoveSize(MOVESIZEACTION, long, long, long, long);
  435.  
  436.         virtual void *VTableInterface(void);
  437.  
  438.     public:
  439.         CAutoApp(PCCosmoFrame);
  440.  
  441.         //IUnknown methods
  442.         STDMETHODIMP QueryInterface(REFIID riid, PPVOID ppv);
  443.         STDMETHODIMP_(ULONG) AddRef(void);
  444.         STDMETHODIMP_(ULONG) Release(void);
  445.  
  446.         //ICosmoApplication methods
  447.         STDMETHODIMP_(IDispatch *)  get_Application(void);
  448.         STDMETHODIMP_(IDispatch *)  get_ActiveFigure(void);
  449.         STDMETHODIMP_(BSTR)         get_Caption(void);
  450.         STDMETHODIMP_(IDispatch *)  get_Figures(void);
  451.         STDMETHODIMP_(BSTR)         get_FullName(void);
  452.         STDMETHODIMP_(BSTR)         get_Name(void);
  453.         STDMETHODIMP_(BSTR)         get_Path(void);
  454.         STDMETHODIMP_(long)         get_Left(void);
  455.         STDMETHODIMP_(void)         put_Left(long x);
  456.         STDMETHODIMP_(long)         get_Top(void);
  457.         STDMETHODIMP_(void)         put_Top(long y);
  458.         STDMETHODIMP_(long)         get_Width(void);
  459.         STDMETHODIMP_(void)         put_Width(long cx);
  460.         STDMETHODIMP_(long)         get_Height(void);
  461.         STDMETHODIMP_(void)         put_Height(long cy);
  462.         STDMETHODIMP_(VARIANT_BOOL) get_Visible(void);
  463.         STDMETHODIMP_(void)         put_Visible(VARIANT_BOOL);
  464.         STDMETHODIMP_(BSTR)         get_StatusBar(void);
  465.         STDMETHODIMP_(void)         put_StatusBar(BSTR);
  466.         STDMETHODIMP_(void)         Quit(void);
  467.     };
  468.  
  469.  
  470.  
  471.  
  472. //AUTOFIGS.CPP:  Implementation of ICosmoFigures collection
  473. class CEnumFigures;
  474. typedef CEnumFigures *PCEnumFigures;
  475.  
  476.  
  477. class CAutoFigures : public CAutoBase, public ICosmoFigures
  478.     {
  479.     friend CEnumFigures;
  480.  
  481.     protected:
  482.         IDispatch    *NewFigure(LPTSTR);
  483.         virtual void *VTableInterface(void);
  484.  
  485.     public:
  486.         CAutoFigures(PCCosmoClient);
  487.         ~CAutoFigures(void);
  488.  
  489.         //IUnknown methods
  490.         STDMETHODIMP QueryInterface(REFIID riid, PPVOID ppv);
  491.         STDMETHODIMP_(ULONG) AddRef(void);
  492.         STDMETHODIMP_(ULONG) Release(void);
  493.  
  494.         //ICosmoFigures methods
  495.         STDMETHODIMP_(IDispatch *) get_Application(void);
  496.         STDMETHODIMP_(IDispatch *) get_Parent(void);
  497.         STDMETHODIMP_(long)        get_Count(void);
  498.         STDMETHODIMP_(IDispatch *) Item(VARIANT);
  499.         STDMETHODIMP_(IDispatch *) Add(void);
  500.         STDMETHODIMP_(IDispatch *) Open(BSTR);
  501.         STDMETHODIMP_(void)        Close(void);
  502.         STDMETHODIMP_(IUnknown *)  _NewEnum(void);
  503.     };
  504.  
  505. typedef CAutoFigures *PCAutoFigures;
  506.  
  507. //Enumerator of whatever is held in the collection
  508. class CEnumFigures : public IEnumVARIANT
  509.     {
  510.     protected:
  511.         ULONG       m_cRef;
  512.         HWND        m_hList;
  513.         HINSTANCE   m_hInst;
  514.         ULONG       m_iCur;
  515.         ULONG       m_cItems;
  516.  
  517.     public:
  518.         CEnumFigures(HINSTANCE);
  519.         ~CEnumFigures(void);
  520.  
  521.         BOOL    Init(HWND, BOOL);
  522.  
  523.         //IUnknown members
  524.         STDMETHODIMP         QueryInterface(REFIID, PPVOID);
  525.         STDMETHODIMP_(ULONG) AddRef(void);
  526.         STDMETHODIMP_(ULONG) Release(void);
  527.  
  528.         //IEnumFORMATETC members
  529.         STDMETHODIMP Next(ULONG, VARIANT *, ULONG *);
  530.         STDMETHODIMP Skip(ULONG);
  531.         STDMETHODIMP Reset(void);
  532.         STDMETHODIMP Clone(IEnumVARIANT **);
  533.     };
  534.  
  535.  
  536. /*
  537.  * AUTOFIG.CPP: Implementation of ICosmoFigure object.  This
  538.  * class has no specific data members and only one private
  539.  * function, MoveSize, which is just a helper.  It should be
  540.  * obvious that this class is little more than another route
  541.  * to get at the same functionality we have elsewhere in Cosmo,
  542.  * which is what Automation is really all about when added to
  543.  * an application with a lot of user interface.
  544.  */
  545.  
  546. class CAutoFigure : public CAutoBase, public ICosmoFigure
  547.     {
  548.     protected:
  549.         long    MoveSize(MOVESIZEACTION, long, long, long, long);
  550.  
  551.         virtual void *VTableInterface(void);
  552.  
  553.     public:
  554.         CAutoFigure(PCCosmoDoc);
  555.  
  556.         //IUnknown members
  557.         STDMETHODIMP         QueryInterface(REFIID, PPVOID);
  558.         STDMETHODIMP_(ULONG) AddRef(void);
  559.         STDMETHODIMP_(ULONG) Release(void);
  560.  
  561.         //ICosmoFigure members
  562.         STDMETHODIMP_(IDispatch *)  get_Application(void);
  563.         STDMETHODIMP_(IDispatch *)  get_Parent(void);
  564.         STDMETHODIMP_(BSTR)         get_FullName(void);
  565.         STDMETHODIMP_(BSTR)         get_Name(void);
  566.         STDMETHODIMP_(BSTR)         get_Path(void);
  567.         STDMETHODIMP_(VARIANT_BOOL) get_Saved(void);
  568.         STDMETHODIMP_(short)        get_NumberOfPoints(void);
  569.         STDMETHODIMP_(long)         get_BackColor(void);
  570.         STDMETHODIMP_(void)         put_BackColor(long);
  571.         STDMETHODIMP_(long)         get_LineColor(void);
  572.         STDMETHODIMP_(void)         put_LineColor(long);
  573.         STDMETHODIMP_(short)        get_LineStyle(void);
  574.         STDMETHODIMP_(void)         put_LineStyle(short);
  575.         STDMETHODIMP_(long)         get_Left(void);
  576.         STDMETHODIMP_(void)         put_Left(long);
  577.         STDMETHODIMP_(long)         get_Top(void);
  578.         STDMETHODIMP_(void)         put_Top(long);
  579.         STDMETHODIMP_(long)         get_Width(void);
  580.         STDMETHODIMP_(void)         put_Width(long);
  581.         STDMETHODIMP_(long)         get_Height(void);
  582.         STDMETHODIMP_(void)         put_Height(long);
  583.         STDMETHODIMP_(VARIANT_BOOL) get_Visible(void);
  584.         STDMETHODIMP_(void)         put_Visible(VARIANT_BOOL);
  585.  
  586.         STDMETHODIMP_(void)         Activate(void);
  587.         STDMETHODIMP_(void)         Close(VARIANT, VARIANT);
  588.         STDMETHODIMP_(void)         RevertToSaved(void);
  589.         STDMETHODIMP_(void)         Save(void);
  590.         STDMETHODIMP_(void)         SaveAs(BSTR);
  591.         STDMETHODIMP_(void)         Import(BSTR);
  592.         STDMETHODIMP_(void)         Copy(void);
  593.         STDMETHODIMP_(void)         Cut(void);
  594.         STDMETHODIMP_(void)         Paste(void);
  595.         STDMETHODIMP_(VARIANT_BOOL) AddPoint(short, short);
  596.         STDMETHODIMP_(void)         RemovePoint(void);
  597.     };
  598.  
  599.  
  600.  
  601. //End CHAPTER14MOD
  602.  
  603.  
  604.  
  605. #endif //_COSMO_H_
  606.