LINUX: afs_create infinite fetchStatus loop
[pkg-k5-afs_openafs.git] / src / WINNT / client_config / tab_advanced.cpp
blob596e1f7b4e99daa0b0c59dcb5024040b9e377732
1 /*
2 * Copyright 2000, International Business Machines Corporation and others.
3 * All Rights Reserved.
5 * This software has been released under the terms of the IBM Public
6 * License. For details, see the LICENSE file in the top-level source
7 * directory or online at http://www.openafs.org/dl/license10.html
8 */
10 #include <winsock2.h>
11 #include <ws2tcpip.h>
13 extern "C" {
14 #include <afs/param.h>
15 #include <afs/stds.h>
18 #include <stdio.h>
20 #include "afs_config.h"
21 #include "tab_advanced.h"
22 #include "pagesize.h"
26 * DEFINITIONS ________________________________________________________________
30 #define ckCACHE_MIN 1024L // 1MB Cache Minimum
31 #define ckCACHE_MAX 2097152L // 2GB Cache Maximum (limited by space)
33 #define ckCHUNK_MIN 4L
34 #define ckCHUNK_MAX 1048576L
36 #define cSTATS_MIN 256L
37 #define cSTATS_MAX 262144L
41 * PROTOTYPES _________________________________________________________________
45 void AdvancedTab_OnInitDialog (HWND hDlg);
46 BOOL AdvancedTab_OnApply (HWND hDlg);
47 void AdvancedTab_OnRefresh (HWND hDlg);
49 // From dlg_automap.cpp
50 extern BOOL CALLBACK AutoMap_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp);
52 // From dlg_misc.cpp
53 extern BOOL Misc_OnApply();
54 extern BOOL CALLBACK Misc_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp);
56 // From dlg_logon.cpp
57 extern BOOL CALLBACK Logon_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp);
58 extern BOOL Logon_OnApply();
60 // From dlg_diag.cpp
61 extern BOOL CALLBACK Diag_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp);
62 extern BOOL Diag_OnApply();
64 // From binding_misc.cpp
65 extern BOOL Binding_OnApply();
66 extern BOOL CALLBACK Binding_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp);
69 * ROUTINES ___________________________________________________________________
73 static DWORD log2 (DWORD dwValue)
75 DWORD dwLog;
76 for (dwLog = 0; (DWORD)(1<<dwLog) < dwValue; ++dwLog)
78 return dwLog;
82 BOOL CALLBACK AdvancedTab_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp)
84 switch (msg)
86 case WM_INITDIALOG:
87 AdvancedTab_OnInitDialog (hDlg);
88 break;
90 case WM_CTLCOLORSTATIC:
91 if ((HWND)lp == GetDlgItem (hDlg, IDC_CHUNK_SIZE))
93 if (IsWindowEnabled ((HWND)lp))
95 static HBRUSH hbrStatic = CreateSolidBrush (GetSysColor (COLOR_WINDOW));
96 SetTextColor ((HDC)wp, GetSysColor (COLOR_WINDOWTEXT));
97 SetBkColor ((HDC)wp, GetSysColor (COLOR_WINDOW));
98 return hbrStatic?TRUE:FALSE;
101 break;
103 case WM_COMMAND:
104 switch (LOWORD(wp))
106 case IDAPPLY:
107 if (!AdvancedTab_OnApply (hDlg))
108 SetWindowLongPtr (hDlg, DWLP_MSGRESULT, TRUE);
109 break;
111 case IDC_REFRESH:
112 AdvancedTab_OnRefresh (hDlg);
113 break;
115 case IDC_MISC_PARMS:
116 ModalDialog(IDD_MISC_CONFIG_PARMS, hDlg, (DLGPROC)Misc_DlgProc);
117 break;
119 case IDC_BINDING_PARMS:
120 ModalDialog(IDD_BINDING_CONFIG_PARAMS, hDlg, (DLGPROC)Binding_DlgProc);
121 break;
123 case IDC_LOGON_PARMS:
124 ModalDialog(IDD_LOGIN_CONFIG_PARMS, hDlg, (DLGPROC)Logon_DlgProc);
125 break;
127 case IDC_AUTOMAP_PARMS:
128 ModalDialog(IDD_GLOBAL_DRIVES, hDlg, (DLGPROC)AutoMap_DlgProc);
129 break;
131 case IDC_DIAG_PARMS:
132 ModalDialog(IDD_DIAG_PARMS, hDlg, (DLGPROC)Diag_DlgProc);
133 break;
135 case IDC_CHUNK_SIZE:
136 switch (HIWORD(wp))
138 case SPN_CHANGE_UP:
139 (*(LPDWORD)lp) <<= 1;
140 break;
141 case SPN_CHANGE_DOWN:
142 (*(LPDWORD)lp) >>= 1;
143 break;
144 case SPN_CHANGE:
145 (*(LPDWORD)lp) = 1 << (log2 (*(LPDWORD)lp));
146 break;
148 break;
150 case IDHELP:
151 AdvancedTab_DlgProc (hDlg, WM_HELP, 0, 0);
152 break;
154 break;
156 case WM_HELP:
157 WinHelp (hDlg, g.szHelpFile, HELP_CONTEXT, IDH_AFSCONFIG_ADVANCED_NT);
158 break;
161 return FALSE;
165 void AdvancedTab_OnInitDialog (HWND hDlg)
167 Config_GetCacheSize (&g.Configuration.ckCache);
168 Config_GetCachePath (g.Configuration.szCachePath);
169 Config_GetChunkSize (&g.Configuration.ckChunk);
170 Config_GetStatEntries (&g.Configuration.cStatEntries);
172 ULONG ckCacheMin = ckCACHE_MIN;
173 ULONG ckCacheMax = ckCACHE_MAX;
175 CreateSpinner (GetDlgItem (hDlg, IDC_CACHE_SIZE), 10, FALSE, ckCacheMin, g.Configuration.ckCache, ckCacheMax);
176 CreateSpinner (GetDlgItem (hDlg, IDC_CHUNK_SIZE), 10, FALSE, ckCHUNK_MIN, g.Configuration.ckChunk, ckCHUNK_MAX);
177 CreateSpinner (GetDlgItem (hDlg, IDC_STAT_ENTRIES), 10, FALSE, cSTATS_MIN, g.Configuration.cStatEntries, cSTATS_MAX);
179 SetDlgItemText (hDlg, IDC_CACHE_PATH, g.Configuration.szCachePath);
180 SetDlgItemText (hDlg, IDC_SYSNAME, g.Configuration.szSysName);
182 AdvancedTab_OnRefresh (hDlg);
186 BOOL AdvancedTab_CommitChanges (BOOL fForce)
188 HWND hDlg;
189 if ((hDlg = PropSheet_FindTabWindow (g.psh, (DLGPROC)AdvancedTab_DlgProc)) == NULL)
190 return TRUE;
191 if (fForce)
192 SetWindowLongPtr (hDlg, DWLP_MSGRESULT, FALSE); // Make sure we try to apply
193 if (AdvancedTab_OnApply (hDlg))
194 return TRUE;
195 SetWindowLongPtr (hDlg, DWLP_MSGRESULT, TRUE);
196 return FALSE;
200 BOOL AdvancedTab_OnApply (HWND hDlg)
202 // Don't try to do anything if we've already failed the apply
203 if (GetWindowLongPtr (hDlg, DWLP_MSGRESULT))
204 return FALSE;
206 ULONG_PTR Value = SP_GetPos (GetDlgItem (hDlg, IDC_CACHE_SIZE));
207 if (Value != g.Configuration.ckCache)
209 if (!Config_SetCacheSize (Value))
210 return FALSE;
211 g.Configuration.ckCache = Value;
214 Value = SP_GetPos (GetDlgItem (hDlg, IDC_CHUNK_SIZE));
215 if (Value != g.Configuration.ckChunk)
217 if (!Config_SetChunkSize (Value))
218 return FALSE;
219 g.Configuration.ckChunk = Value;
222 Value = SP_GetPos (GetDlgItem (hDlg, IDC_STAT_ENTRIES));
223 if (Value != g.Configuration.cStatEntries)
225 if (!Config_SetStatEntries (Value))
226 return FALSE;
227 g.Configuration.cStatEntries = Value;
230 TCHAR szText[ MAX_PATH ];
231 GetDlgItemText (hDlg, IDC_CACHE_PATH, szText, MAX_PATH);
232 if (lstrcmp (szText, g.Configuration.szCachePath))
234 if (!Config_SetCachePath (szText))
235 return FALSE;
236 lstrcpy (g.Configuration.szCachePath, szText);
239 // Save the data from the advanced tab dialogs
240 if (!Misc_OnApply())
241 return FALSE;
243 if (!Binding_OnApply())
244 return FALSE;
246 if (!Logon_OnApply())
247 return FALSE;
249 if (!Diag_OnApply())
250 return FALSE;
252 return TRUE;
256 void AdvancedTab_OnRefresh (HWND hDlg)
258 ULONG ckCacheInUse;
259 if (!Config_GetCacheInUse (&ckCacheInUse))
260 ckCacheInUse = 0;
262 LPTSTR pszInUse;
263 if (ckCacheInUse)
264 pszInUse = FormatString (IDS_KB_IN_USE, TEXT("%ld"), ckCacheInUse);
265 else
266 pszInUse = FormatString (IDS_KB_ONLY);
267 SetDlgItemText (hDlg, IDC_INUSE, pszInUse);
268 FreeString (pszInUse);