//+----------------------------------------------------------------------------
//
// File:     cmver.cpp
//
// Module:   CMSETUP.LIB
//
// Synopsis: Implementation of CmVersion class, a utility class that 
//           helps in detecting the version of Connection Mananger that 
//           is installed.
//
// Copyright (c) 1998-1999 Microsoft Corporation
//
// Author:   a-anasj    Created                             02/11/98
//           quintinb   Cleaned Up and removed CRegValue    07/14/98
//           quintinb   Rewrote                             09/14/98
//
//+----------------------------------------------------------------------------

#include "cmsetup.h"
#include "reg_str.h"

CmVersion::CmVersion()
{
    HKEY hKey;
    LONG lResult;

    m_szCmmgrPath[0] = TEXT('\0');

	//
	//	We always want to look in the system directory for cmmgr32.exe first.  This is
	//  its new install location and the app paths key may be corrupted by a 1.0 profile
	//  install.
	//

	MYVERIFY(0 != GetSystemDirectory(m_szCmmgrPath, CELEMS(m_szCmmgrPath)));
	MYVERIFY(CELEMS(m_szPath) > (UINT)wsprintf(m_szPath, TEXT("%s\\cmdial32.dll"), 
		m_szCmmgrPath));

	if (!FileExists(m_szPath))
	{
		//
		//	The file wasn't in the system directory, now try the app paths key
		//
		m_szCmmgrPath[0] = TEXT('\0');
		m_szPath[0] = TEXT('\0');
	
		lResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE, c_pszRegCmAppPaths, 0, KEY_READ, &hKey);
    
		if (ERROR_SUCCESS == lResult)
		{        
			//
			//  Check to see if we have a path to work from.
			//
        
			DWORD dwSize = MAX_PATH;
			DWORD dwType = REG_SZ;
        
			if (ERROR_SUCCESS == RegQueryValueEx(hKey, c_pszRegPath, NULL, &dwType, 
				(LPBYTE)m_szCmmgrPath, &dwSize))
			{
				//
				//	Now construct the base object
				//
				MYVERIFY(CELEMS(m_szPath) > (UINT)wsprintf(m_szPath, TEXT("%s\\cmdial32.dll"), 
					m_szCmmgrPath));

				Init();
			}
            RegCloseKey(hKey);
		}
	}
	else
	{
		Init();
	}
}

CmVersion::~CmVersion()
{
	//	nothing to do really
}

BOOL CmVersion::GetInstallLocation(LPTSTR szStr)
{
    if ((m_bIsPresent) && (TEXT('\0') != m_szCmmgrPath[0]) && (NULL != szStr))
    {
        lstrcpy(szStr, m_szCmmgrPath);
    }

    return m_bIsPresent;
}