/* 
 * Copyright (C) 1998, 1989 Transarc Corporation - All rights reserved
 *
 * (C) COPYRIGHT IBM CORPORATION 1987, 1988
 * LICENSED MATERIALS - PROPERTY OF IBM
 *
 *
 */
#include <windows.h>
#include <cpl.h>
#include <WINNT/TaLocale.h>
#include "cpl_interface.h"
#include "resource.h"


static HINSTANCE hinst = 0;
static HINSTANCE hinstResources = 0;


static BOOL IsWindowsNT (void)
{
   static BOOL fChecked = FALSE;
   static BOOL fIsWinNT = FALSE;

   if (!fChecked)
      {
      OSVERSIONINFO Version;
      memset (&Version, 0x00, sizeof(Version));
      Version.dwOSVersionInfoSize = sizeof(Version);

      if (GetVersionEx (&Version))
         {
         if (Version.dwPlatformId == VER_PLATFORM_WIN32_NT)
            fIsWinNT = TRUE;
         }

      fChecked = TRUE;
      }

   return fIsWinNT;
}


static BOOL IsClientInstalled (void)
{
   static BOOL fChecked = FALSE;
   static BOOL fIsInstalled = FALSE;

   if (!fChecked)
      {
      HKEY hk;
      if (RegOpenKey (HKEY_LOCAL_MACHINE, TEXT("Software\\TransarcCorporation\\AFS Client\\CurrentVersion"), &hk) == 0)
         {
         TCHAR szPath[ MAX_PATH ];
         DWORD dwSize = sizeof(szPath);
         DWORD dwType = REG_SZ;
         if (RegQueryValueEx (hk, TEXT("PathName"), NULL, &dwType, (PBYTE)szPath, &dwSize) == 0)
            fIsInstalled = TRUE;
         RegCloseKey (hk);
         }
      fChecked = TRUE;
      }

   return fIsInstalled;
}


extern "C" LONG APIENTRY CPlApplet(HWND hwndCPl, UINT uMsg, LONG lParam1, LONG lParam2)
{
    LPNEWCPLINFO lpNewCPlInfo;

    switch (uMsg) {
        case CPL_INIT:      /* first message, sent once  */
            hinst = GetModuleHandle("afs_cpa.cpl");
            hinstResources = TaLocale_LoadCorrespondingModule (hinst);
            return (hinst != 0);

        case CPL_GETCOUNT:  /* second message, sent once */
            return 1;
            break;

        case CPL_NEWINQUIRE: /* third message, sent once per app */
            lpNewCPlInfo = (LPNEWCPLINFO) lParam2;

            lpNewCPlInfo->dwSize = (DWORD) sizeof(NEWCPLINFO);
            lpNewCPlInfo->dwFlags = 0;
            lpNewCPlInfo->dwHelpContext = 0;
            lpNewCPlInfo->lData = 0;
	    if (IsClientInstalled() || !IsWindowsNT())
	       lpNewCPlInfo->hIcon = TaLocale_LoadIcon(IDI_AFSD);
	    else
	       lpNewCPlInfo->hIcon = TaLocale_LoadIcon(IDI_CCENTER);
            lpNewCPlInfo->szHelpFile[0] = '\0';

            GetString (lpNewCPlInfo->szName, (!IsWindowsNT()) ? IDS_CPL_NAME_95 : (!IsClientInstalled()) ? IDS_CPL_NAME_CCENTER : IDS_CPL_NAME_NT);
            GetString (lpNewCPlInfo->szInfo, (!IsWindowsNT()) ? IDS_CPL_DESC_95 : (!IsClientInstalled()) ? IDS_CPL_DESC_CCENTER : IDS_CPL_DESC_NT);
            break;

        case CPL_DBLCLK:		/* applet icon double-clicked */
	    if (IsClientInstalled() || !IsWindowsNT())
	        WinExec("afs_config.exe", SW_SHOW);
	    else
	        WinExec("afs_config.exe /c", SW_SHOW);
            break;

        case CPL_EXIT:
            if (hinstResources)
                FreeLibrary (hinstResources);
            break;
    }

    return 0;
}


