text: /*++
  
  Copyright (c) 1985 - 1999, Microsoft Corporation
  
  Module Name:
  
      atom.cpp
  
  Abstract:
  
      This file implements the CAtomObject class.
  
  Author:
  
  Revision History:
  
  Notes:
  
  --*/
  
  #include "private.h"
  #include "atom.h"
  #include "globals.h"
  
  //+---------------------------------------------------------------------------
  //
  // CAtomObject
  //
  //----------------------------------------------------------------------------
  
  HRESULT
  CAtomObject::_InitAtom(
      LPCTSTR lpString
      )
  {
      HRESULT hr;
      size_t  cch;
  
      if (m_AtomName)
          return S_OK;
  
      hr = StringCchLength(lpString, 255, &cch);
      if (hr != S_OK)
          return hr;
  
      m_AtomName = new TCHAR[cch+1];
      if (m_AtomName == NULL)
          return E_OUTOFMEMORY;
  
      hr = StringCchCopy(m_AtomName, cch+1, lpString);
      return hr;
  }
  
  HRESULT
  CAtomObject::_Activate()
  {
      EnterCriticalSection(g_cs);
  
      int ref = ++m_AtomRefCount;
  
      if (ref == 1) {
          //
          // Add AIMM1.2 ATOM
          //
          m_Atom = AddAtom(m_AtomName);
      }
  
      LeaveCriticalSection(g_cs);
  
      return S_OK;
  }
  
  HRESULT
  CAtomObject::_Deactivate()
  {
      EnterCriticalSection(g_cs);
  
      int ref = --m_AtomRefCount;
  
      if (ref == 0) {
          //
          // Delete AIMM1.2 ATOM
          //
          DeleteAtom(m_Atom);
          m_Atom = 0;
      }
  
      LeaveCriticalSection(g_cs);
  
      return S_OK;
  }
  