Initial IBM OpenAFS 1.0 tree
[openafs.git] / src / WINNT / client_cpa / cpl_interface.cpp
1 /* 
2  * Copyright (C) 1998, 1989 Transarc Corporation - All rights reserved
3  *
4  * (C) COPYRIGHT IBM CORPORATION 1987, 1988
5  * LICENSED MATERIALS - PROPERTY OF IBM
6  *
7  *
8  */
9 #include <windows.h>
10 #include <cpl.h>
11 #include <WINNT/TaLocale.h>
12 #include "cpl_interface.h"
13 #include "resource.h"
14
15
16 static HINSTANCE hinst = 0;
17 static HINSTANCE hinstResources = 0;
18
19
20 static BOOL IsWindowsNT (void)
21 {
22    static BOOL fChecked = FALSE;
23    static BOOL fIsWinNT = FALSE;
24
25    if (!fChecked)
26       {
27       OSVERSIONINFO Version;
28       memset (&Version, 0x00, sizeof(Version));
29       Version.dwOSVersionInfoSize = sizeof(Version);
30
31       if (GetVersionEx (&Version))
32          {
33          if (Version.dwPlatformId == VER_PLATFORM_WIN32_NT)
34             fIsWinNT = TRUE;
35          }
36
37       fChecked = TRUE;
38       }
39
40    return fIsWinNT;
41 }
42
43
44 static BOOL IsClientInstalled (void)
45 {
46    static BOOL fChecked = FALSE;
47    static BOOL fIsInstalled = FALSE;
48
49    if (!fChecked)
50       {
51       HKEY hk;
52       if (RegOpenKey (HKEY_LOCAL_MACHINE, TEXT("Software\\TransarcCorporation\\AFS Client\\CurrentVersion"), &hk) == 0)
53          {
54          TCHAR szPath[ MAX_PATH ];
55          DWORD dwSize = sizeof(szPath);
56          DWORD dwType = REG_SZ;
57          if (RegQueryValueEx (hk, TEXT("PathName"), NULL, &dwType, (PBYTE)szPath, &dwSize) == 0)
58             fIsInstalled = TRUE;
59          RegCloseKey (hk);
60          }
61       fChecked = TRUE;
62       }
63
64    return fIsInstalled;
65 }
66
67
68 extern "C" LONG APIENTRY CPlApplet(HWND hwndCPl, UINT uMsg, LONG lParam1, LONG lParam2)
69 {
70     LPNEWCPLINFO lpNewCPlInfo;
71
72     switch (uMsg) {
73         case CPL_INIT:      /* first message, sent once  */
74             hinst = GetModuleHandle("afs_cpa.cpl");
75             hinstResources = TaLocale_LoadCorrespondingModule (hinst);
76             return (hinst != 0);
77
78         case CPL_GETCOUNT:  /* second message, sent once */
79             return 1;
80             break;
81
82         case CPL_NEWINQUIRE: /* third message, sent once per app */
83             lpNewCPlInfo = (LPNEWCPLINFO) lParam2;
84
85             lpNewCPlInfo->dwSize = (DWORD) sizeof(NEWCPLINFO);
86             lpNewCPlInfo->dwFlags = 0;
87             lpNewCPlInfo->dwHelpContext = 0;
88             lpNewCPlInfo->lData = 0;
89             if (IsClientInstalled() || !IsWindowsNT())
90                lpNewCPlInfo->hIcon = TaLocale_LoadIcon(IDI_AFSD);
91             else
92                lpNewCPlInfo->hIcon = TaLocale_LoadIcon(IDI_CCENTER);
93             lpNewCPlInfo->szHelpFile[0] = '\0';
94
95             GetString (lpNewCPlInfo->szName, (!IsWindowsNT()) ? IDS_CPL_NAME_95 : (!IsClientInstalled()) ? IDS_CPL_NAME_CCENTER : IDS_CPL_NAME_NT);
96             GetString (lpNewCPlInfo->szInfo, (!IsWindowsNT()) ? IDS_CPL_DESC_95 : (!IsClientInstalled()) ? IDS_CPL_DESC_CCENTER : IDS_CPL_DESC_NT);
97             break;
98
99         case CPL_DBLCLK:                /* applet icon double-clicked */
100             if (IsClientInstalled() || !IsWindowsNT())
101                 WinExec("afs_config.exe", SW_SHOW);
102             else
103                 WinExec("afs_config.exe /c", SW_SHOW);
104             break;
105
106         case CPL_EXIT:
107             if (hinstResources)
108                 FreeLibrary (hinstResources);
109             break;
110     }
111
112     return 0;
113 }
114
115