windows-vs2005b2-20050706
[openafs.git] / src / WINNT / afssvrmgr / helpfunc.cpp
1 /*
2  * Copyright 2000, International Business Machines Corporation and others.
3  * All Rights Reserved.
4  * 
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  */
9
10 extern "C" {
11 #include <afs/param.h>
12 #include <afs/stds.h>
13 }
14
15 #include "svrmgr.h"
16 #include "helpfunc.h"
17 #include <stdlib.h>
18
19 #ifndef iswhite
20 #define iswhite(_ch) ( ((_ch) == TEXT(' ')) || ((_ch) == TEXT('\t')) )
21 #endif
22
23
24 /*
25  * VARIABLES ________________________________________________________________
26  *
27  */
28
29 typedef enum {
30    uuUNSPECIFIED,
31    uuVOS,       // VOS commands
32    uuBOS,       // BOS commands
33    uuKAS,       // KAS commands
34    uuFS // FS commands
35 } UNIXUTIL;
36
37 // One entry per help context
38 static struct {
39    UNIXUTIL uu;
40    int ids;
41    int hid;
42 } aCOMMANDS[] = {
43    { uuVOS, IDS_COMMAND_VOS_ADDSITE,         IDH_SVRMGR_COMMAND_VOS_ADDSITE },
44    { uuVOS, IDS_COMMAND_VOS_BACKUP,          IDH_SVRMGR_COMMAND_VOS_BACKUP },
45    { uuVOS, IDS_COMMAND_VOS_BACKUPSYS,       IDH_SVRMGR_COMMAND_VOS_BACKUPSYS },
46    { uuVOS, IDS_COMMAND_VOS_CREATE,          IDH_SVRMGR_COMMAND_VOS_CREATE },
47    { uuVOS, IDS_COMMAND_VOS_DELENTRY,        IDH_SVRMGR_COMMAND_VOS_DELENTRY },
48    { uuVOS, IDS_COMMAND_VOS_DUMP,            IDH_SVRMGR_COMMAND_VOS_DUMP },
49    { uuVOS, IDS_COMMAND_VOS_EXAMINE,         IDH_SVRMGR_COMMAND_VOS_EXAMINE },
50    { uuVOS, IDS_COMMAND_VOS_LISTPART,        IDH_SVRMGR_COMMAND_VOS_LISTPART },
51    { uuVOS, IDS_COMMAND_VOS_LISTVLDB,        IDH_SVRMGR_COMMAND_VOS_LISTVLDB },
52    { uuVOS, IDS_COMMAND_VOS_LISTVOL,         IDH_SVRMGR_COMMAND_VOS_LISTVOL },
53    { uuVOS, IDS_COMMAND_VOS_LOCK,            IDH_SVRMGR_COMMAND_VOS_LOCK },
54    { uuVOS, IDS_COMMAND_VOS_MOVE,            IDH_SVRMGR_COMMAND_VOS_MOVE },
55    { uuVOS, IDS_COMMAND_VOS_PARTINFO,        IDH_SVRMGR_COMMAND_VOS_PARTINFO },
56    { uuVOS, IDS_COMMAND_VOS_RELEASE,         IDH_SVRMGR_COMMAND_VOS_RELEASE },
57    { uuVOS, IDS_COMMAND_VOS_REMOVE,          IDH_SVRMGR_COMMAND_VOS_REMOVE },
58    { uuVOS, IDS_COMMAND_VOS_REMSITE,         IDH_SVRMGR_COMMAND_VOS_REMSITE },
59    { uuVOS, IDS_COMMAND_VOS_RENAME,          IDH_SVRMGR_COMMAND_VOS_RENAME },
60    { uuVOS, IDS_COMMAND_VOS_RESTORE,         IDH_SVRMGR_COMMAND_VOS_RESTORE },
61    { uuVOS, IDS_COMMAND_VOS_SYNCVLDB,        IDH_SVRMGR_COMMAND_VOS_SYNCVLDB },
62    { uuVOS, IDS_COMMAND_VOS_UNLOCK,          IDH_SVRMGR_COMMAND_VOS_UNLOCK },
63    { uuVOS, IDS_COMMAND_VOS_UNLOCKVLDB,      IDH_SVRMGR_COMMAND_VOS_UNLOCKVLDB },
64    { uuVOS, IDS_COMMAND_VOS_ZAP,             IDH_SVRMGR_COMMAND_VOS_ZAP },
65    { uuBOS, IDS_COMMAND_BOS_ADDHOST,         IDH_SVRMGR_COMMAND_BOS_ADDHOST },
66    { uuBOS, IDS_COMMAND_BOS_ADDKEY,          IDH_SVRMGR_COMMAND_BOS_ADDKEY },
67    { uuBOS, IDS_COMMAND_BOS_ADDUSER,         IDH_SVRMGR_COMMAND_BOS_ADDUSER },
68    { uuBOS, IDS_COMMAND_BOS_CREATE,          IDH_SVRMGR_COMMAND_BOS_CREATE },
69    { uuBOS, IDS_COMMAND_BOS_DELETE,          IDH_SVRMGR_COMMAND_BOS_DELETE },
70    { uuBOS, IDS_COMMAND_BOS_EXEC,            IDH_SVRMGR_COMMAND_BOS_EXEC },
71    { uuBOS, IDS_COMMAND_BOS_GETDATE,         IDH_SVRMGR_COMMAND_BOS_GETDATE },
72    { uuBOS, IDS_COMMAND_BOS_GETLOG,          IDH_SVRMGR_COMMAND_BOS_GETLOG },
73    { uuBOS, IDS_COMMAND_BOS_GETRESTART,      IDH_SVRMGR_COMMAND_BOS_GETRESTART },
74    { uuBOS, IDS_COMMAND_BOS_INSTALL,         IDH_SVRMGR_COMMAND_BOS_INSTALL },
75    { uuBOS, IDS_COMMAND_BOS_LISTHOSTS,       IDH_SVRMGR_COMMAND_BOS_LISTHOSTS },
76    { uuBOS, IDS_COMMAND_BOS_LISTKEYS,        IDH_SVRMGR_COMMAND_BOS_LISTKEYS },
77    { uuBOS, IDS_COMMAND_BOS_LISTUSERS,       IDH_SVRMGR_COMMAND_BOS_LISTUSERS },
78    { uuBOS, IDS_COMMAND_BOS_PRUNE,           IDH_SVRMGR_COMMAND_BOS_PRUNE },
79    { uuBOS, IDS_COMMAND_BOS_REMOVEHOST,      IDH_SVRMGR_COMMAND_BOS_REMOVEHOST },
80    { uuBOS, IDS_COMMAND_BOS_REMOVEKEY,       IDH_SVRMGR_COMMAND_BOS_REMOVEKEY },
81    { uuBOS, IDS_COMMAND_BOS_REMOVEUSER,      IDH_SVRMGR_COMMAND_BOS_REMOVEUSER },
82    { uuBOS, IDS_COMMAND_BOS_RESTART,         IDH_SVRMGR_COMMAND_BOS_RESTART },
83    { uuBOS, IDS_COMMAND_BOS_SALVAGE,         IDH_SVRMGR_COMMAND_BOS_SALVAGE },
84    { uuBOS, IDS_COMMAND_BOS_SETAUTH,         IDH_SVRMGR_COMMAND_BOS_SETAUTH },
85    { uuBOS, IDS_COMMAND_BOS_SETRESTART,      IDH_SVRMGR_COMMAND_BOS_SETRESTART },
86    { uuBOS, IDS_COMMAND_BOS_SHUTDOWN,        IDH_SVRMGR_COMMAND_BOS_SHUTDOWN },
87    { uuBOS, IDS_COMMAND_BOS_START,           IDH_SVRMGR_COMMAND_BOS_START },
88    { uuBOS, IDS_COMMAND_BOS_STARTUP,         IDH_SVRMGR_COMMAND_BOS_STARTUP },
89    { uuBOS, IDS_COMMAND_BOS_STATUS,          IDH_SVRMGR_COMMAND_BOS_STATUS },
90    { uuBOS, IDS_COMMAND_BOS_STOP,            IDH_SVRMGR_COMMAND_BOS_STOP },
91    { uuBOS, IDS_COMMAND_BOS_UNINSTALL,       IDH_SVRMGR_COMMAND_BOS_UNINSTALL },
92    { uuKAS, IDS_COMMAND_KAS_GETRANDOMKEY,    IDH_SVRMGR_COMMAND_KAS_GETRANDOMKEY },
93    { uuFS,  IDS_COMMAND_FS_LISTQUOTA,        IDH_SVRMGR_COMMAND_FS_LISTQUOTA },
94    { uuFS,  IDS_COMMAND_FS_QUOTA,            IDH_SVRMGR_COMMAND_FS_QUOTA },
95    { uuFS,  IDS_COMMAND_FS_SETQUOTA,         IDH_SVRMGR_COMMAND_FS_SETQUOTA },
96 };
97
98 // Precalculated hashing values for faster searching through help topics
99 static DWORD aSEARCHVALUES[] = {
100    0x16765627, 0x02D416E6, 0x27675627, 0x35023556,
101    0x36021464, 0xE6371627, 0x02452716, 0x00458656,
102    0x16E6B300, 0x27E69676, 0x4602A456, 0x36861627,
103    0x97022596, 0x56E60226, 0x27964747, 0x97E20075,
104    0xD4F67727, 0x24F62602, 0x02269702, 0x27965637,
105    0x96262716, 0x675602C6, 0x27164796, 0xE6963747,
106    0x1446D696, 0x97000000, 0x96C69647, 0x37025747,
107    0x02478696, 0x0266F627, 0x66163656, 0xE6475627,
108    0x56270296, 0x56025737, 0xA3004586, 0x7796E676,
109    0xF6C6C6F6, 0x86560266, 0x26970247, 0x77564602,
110    0x56679656, 0xE6460227, 0x56460216, 0x379676E6,
111    0x37024656, 0x00007716, 0x74271697, 0x16E65602,
112    0xE65602A4, 0x560014E6, 0xB4565666, 0xE602F472,
113    0x24279616, 0x3716C600, 0x86D65627, 0xE6023536,
114    0x24279716, 0x4756B600, 0x02A416E6, 0x9616E656,
115    0x56C60044, 0x02642756, 0xB6005446, 0x26573756,
116    0x374702F4, 0x5427E656, 0xC696E600, 0x02645627,
117    0x96369616, 0x006456C6, 0xD4573796, 0x27567602,
118    0x27460074, 0x96368616, 0x47860225, 0x27564696,
119    0x2700D456, 0x34F6D656, 0x1656C602, 0xD4963686,
120    0x77169700, 0xC4162716, 0x5696C602, 0x16E600E4,
121    0x27E69676, 0x4602A456, 0x36861627, 0x27002596,
122    0xC6B6E656, 0x02641657, 0x0025F6E6, 0x56765627,
123    0xE6024527, 0x3716C697, 0x160025F6, 0xB4F647C6,
124    0x67163702, 0x2796E696, 0xE6960035, 0x24969716,
125    0x2716D602, 0x006596B6, 0x00000000
126 };
127
128 #define nCOMMANDS (sizeof(aCOMMANDS)/sizeof(aCOMMANDS[0]))
129 #define nSEARCHVALUES (sizeof(aSEARCHVALUES)/sizeof(aSEARCHVALUES[0]))
130
131
132 /*
133  * ROUTINES _________________________________________________________________
134  *
135  */
136
137 LPCTSTR lstrstr (LPCTSTR pszBuffer, LPCTSTR pszFind)
138 {
139    if (!pszBuffer || !pszFind || !*pszFind)
140       return pszBuffer;
141
142    for ( ; *pszBuffer; ++pszBuffer)
143       {
144       if (*pszBuffer == *pszFind)
145          {
146          if (!lstrncmpi (pszBuffer, pszFind, lstrlen(pszFind)))
147             return pszBuffer;
148          }
149       }
150
151    return NULL;
152 }
153
154
155 /*
156  * FIND COMMAND _____________________________________________________________
157  *
158  */
159
160 BOOL CALLBACK Help_FindCommand_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp);
161 void Help_FindCommand_OnInitDialog (HWND hDlg);
162 BOOL Help_FindCommand_OnOK (HWND hDlg);
163
164
165 void Help_FindCommand (void)
166 {
167    ModalDialog (IDD_HELP_FIND, g.hMain, (DLGPROC)Help_FindCommand_DlgProc);
168 }
169
170
171 BOOL CALLBACK Help_FindCommand_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp)
172 {
173    switch (msg)
174       {
175       case WM_INITDIALOG:
176          Help_FindCommand_OnInitDialog (hDlg);
177          break;
178
179       case WM_COMMAND:
180          switch (LOWORD(wp))
181             {
182             case IDOK:
183                if (Help_FindCommand_OnOK (hDlg))
184                   EndDialog (hDlg, LOWORD(wp));
185                break;
186
187             case IDCANCEL:
188                EndDialog (hDlg, LOWORD(wp));
189                break;
190             }
191          break;
192       }
193
194    return FALSE;
195 }
196
197
198 void Help_FindCommand_OnInitDialog (HWND hDlg)
199 {
200    HWND hCombo = GetDlgItem (hDlg, IDC_FIND_COMMAND);
201    CB_StartChange (hCombo, TRUE);
202
203    for (size_t ii = 0; ii < nCOMMANDS; ++ii)
204       {
205       CB_AddItem (hCombo, aCOMMANDS[ii].ids, 0);
206       }
207
208    CB_EndChange (hCombo, -1);
209 }
210
211
212 LPTSTR Help_FindCommand_Search (UNIXUTIL *puu, LPTSTR pszKeyword)
213 {
214    // search for a usable keyword--skip "vos" or "bos" (etc).
215    //
216    while (*pszKeyword)
217       {
218       // strip any initial whitespace
219       while (iswhite(*pszKeyword))
220          ++pszKeyword;
221
222       // find the end of this word
223       LPTSTR pszNext;
224       for (pszNext = pszKeyword; *pszNext && !iswhite(*pszNext); )
225          ++pszNext;
226       if (!*pszNext)  // last word?  Gotta use it.
227          break;
228       *pszNext = TEXT('\0');
229
230       BOOL fSkip = FALSE;
231       if (!lstrcmpi (pszKeyword, TEXT("vos")))
232          {
233          fSkip = TRUE;
234          *puu = uuVOS;
235          }
236       if (!lstrcmpi (pszKeyword, TEXT("bos")))
237          {
238          fSkip = TRUE;
239          *puu = uuBOS;
240          }
241       if (!lstrcmpi (pszKeyword, TEXT("kas")))
242          {
243          fSkip = TRUE;
244          *puu = uuKAS;
245          }
246       if (!lstrcmpi (pszKeyword, TEXT("fs")))
247          {
248          fSkip = TRUE;
249          *puu = uuFS;
250          }
251
252       if (fSkip)
253          pszKeyword = 1+pszNext;
254       else
255          break;
256       }
257
258    return pszKeyword;
259 }
260
261
262 DWORD NextSearch (int &ii)
263 {
264    ii = ((ii>>2) == nSEARCHVALUES) ? 1 : ii+1;
265    return ( (DWORD)(((aSEARCHVALUES[(ii-1)>>2]>>(((ii-1)%4)<<3))>>4)&15) |
266             (DWORD)(((aSEARCHVALUES[(ii-1)>>2]>>(((ii-1)%4)<<3))<<4)&240) );
267 }
268
269
270 BOOL Help_FindCommand_OnOK (HWND hDlg)
271 {
272    HWND hCombo = GetDlgItem (hDlg, IDC_FIND_COMMAND);
273    int iiDisplay = -1;
274
275    UNIXUTIL uu = uuUNSPECIFIED;
276    TCHAR szText[ cchRESOURCE ];
277    GetWindowText (hCombo, szText, cchRESOURCE);
278
279    if (!szText[0])
280       {
281       Message (MB_ICONASTERISK | MB_OK, IDS_FIND_NOTHING_TITLE, IDS_FIND_NOTHING_DESC);
282       return FALSE;
283       }
284
285    LPTSTR pszKeyword = Help_FindCommand_Search (&uu, szText);
286
287    for (size_t ii = 0; (iiDisplay == -1) && ii < nCOMMANDS; ++ii)
288       {
289       TCHAR szCommand[ cchRESOURCE ];
290       GetString (szCommand, aCOMMANDS[ ii ].ids);
291
292       if (lstrstr (szCommand, pszKeyword) != NULL)
293          {
294          if ((uu == uuUNSPECIFIED) || (uu == aCOMMANDS[ ii ].uu))
295             iiDisplay = ii;
296          }
297       }
298
299    if (iiDisplay == -1)
300       {
301       Message (MB_ICONASTERISK | MB_OK, IDS_FIND_UNKNOWN_TITLE, IDS_FIND_UNKNOWN_DESC, TEXT("%s"), pszKeyword);
302       return FALSE;
303       }
304
305    WinHelp (g.hMain, cszHELPFILENAME, HELP_CONTEXT, aCOMMANDS[ iiDisplay ].hid);
306    return TRUE;
307 }
308
309
310 /*
311  * FIND ERROR _______________________________________________________________
312  *
313  */
314
315 BOOL CALLBACK Help_FindError_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp);
316 void Help_FindError_OnInitDialog (HWND hDlg);
317 void Help_FindError_OnTranslate (HWND hDlg);
318 void Help_FindError_Shrink (HWND hDlg, BOOL fShrink);
319
320 void Help_FindError (void)
321 {
322    ModalDialog (IDD_HELP_ERROR, g.hMain, (DLGPROC)Help_FindError_DlgProc);
323 }
324
325
326 BOOL CALLBACK Help_FindError_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp)
327 {
328    switch (msg)
329       {
330       case WM_INITDIALOG:
331          Help_FindError_OnInitDialog (hDlg);
332          break;
333
334       case WM_COMMAND:
335          switch (LOWORD(wp))
336             {
337             case IDC_ERROR_TRANSLATE:
338                Help_FindError_OnTranslate (hDlg);
339                break;
340
341             case IDOK:
342             case IDCANCEL:
343                EndDialog (hDlg, LOWORD(wp));
344                break;
345             }
346          break;
347       }
348
349    return FALSE;
350 }
351
352
353 void Help_FindError_OnInitDialog (HWND hDlg)
354 {
355    Help_FindError_Shrink (hDlg, TRUE);
356
357    SetDlgItemText (hDlg, IDC_ERROR_NUMBER, TEXT(""));
358 }
359
360
361 void Help_FindError_OnTranslate (HWND hDlg)
362 {
363    TCHAR szText[ cchRESOURCE ];
364    GetDlgItemText (hDlg, IDC_ERROR_NUMBER, szText, cchRESOURCE);
365
366    LPSTR pszTextA = StringToAnsi (szText);
367    DWORD dwError = strtoul (pszTextA, NULL, 0);
368    FreeString (pszTextA, szText);
369
370    TCHAR szDesc[ cchRESOURCE ];
371    FormatError (szDesc, TEXT("%s"), dwError);
372
373    // The output string either looks like this (if successful):
374    //    successful completion (0x00000000)
375    // Or like this:
376    //    0x00000000
377    // Since we list the error code elsewhere, remove it from the
378    // former case. In the latter case, empty the string entirely
379    // so we'll know there was no translation.
380    //
381    LPTSTR pszTruncate;
382    if ((pszTruncate = (LPTSTR)lstrrchr (szDesc, TEXT('('))) == NULL)
383       pszTruncate = szDesc;
384    else if ((pszTruncate > szDesc) && (*(pszTruncate-1) == TEXT(' ')))
385       --pszTruncate;
386    *pszTruncate = TEXT('\0');
387
388    LPTSTR pszText;
389    if (szDesc[0] == TEXT('\0'))
390       pszText = FormatString (IDS_ERROR_NOTTRANSLATED, TEXT("%08lX%lu"), dwError, dwError);
391    else
392       pszText = FormatString (IDS_ERROR_TRANSLATED, TEXT("%08lX%lu%s"), dwError, dwError, szDesc);
393    SetDlgItemText (hDlg, IDC_ERROR_DESC, pszText);
394    FreeString (pszText);
395
396    Help_FindError_Shrink (hDlg, FALSE);
397 }
398
399
400 void Help_FindError_Shrink (HWND hDlg, BOOL fShrink)
401 {
402    static BOOL fShrunk = FALSE;
403    static LONG cyShrunk = 0;
404
405    if (fShrink)
406       {
407       fShrunk = TRUE;
408
409       // shrink the window--move the IDCANCEL button up so that its
410       // top edge is where the IDC_ADVANCED_BOX line's top edge is, and
411       // hide IDC_ADVANCED_BOX and IDC_ERROR_DESC.
412       //
413       RECT rAdvanced;
414       GetRectInParent (GetDlgItem (hDlg, IDC_ADVANCED_BOX), &rAdvanced);
415
416       RECT rClose;
417       GetRectInParent (GetDlgItem (hDlg, IDCANCEL), &rClose);
418
419       cyShrunk = rClose.top - rAdvanced.top - 9;
420       
421       ShowWindow (GetDlgItem (hDlg, IDC_ERROR_DESC), SW_HIDE);
422
423       SetWindowPos (GetDlgItem (hDlg, IDCANCEL), NULL,
424                     rClose.left, rClose.top -cyShrunk, 0, 0,
425                     SWP_NOSIZE | SWP_NOACTIVATE | SWP_NOZORDER);
426
427       RECT rDialog;
428       GetWindowRect (hDlg, &rDialog);
429       SetWindowPos (hDlg, NULL,
430                     0, 0, cxRECT(rDialog), cyRECT(rDialog) -cyShrunk,
431                     SWP_NOMOVE | SWP_NOACTIVATE | SWP_NOZORDER);
432       }
433    else if (fShrunk)
434       {
435       fShrunk = FALSE;
436
437       // expand the window--move the IDCANCEL button down, and
438       // show IDC_ADVANCED_BOX and IDC_ERROR_DESC.
439       //
440       RECT rClose;
441       GetRectInParent (GetDlgItem (hDlg, IDCANCEL), &rClose);
442
443       RECT rDialog;
444       GetWindowRect (hDlg, &rDialog);
445       SetWindowPos (hDlg, NULL,
446                     0, 0, cxRECT(rDialog), cyRECT(rDialog) +cyShrunk,
447                     SWP_NOMOVE | SWP_NOACTIVATE | SWP_NOZORDER);
448
449       SetWindowPos (GetDlgItem (hDlg, IDCANCEL), NULL,
450                     rClose.left, rClose.top +cyShrunk, 0, 0,
451                     SWP_NOSIZE | SWP_NOACTIVATE | SWP_NOZORDER);
452
453       ShowWindow (GetDlgItem (hDlg, IDC_ERROR_DESC), SW_SHOW);
454       }
455 }
456
457
458 /*
459  * HELP ABOUT _______________________________________________________________
460  *
461  */
462
463
464 BOOL CALLBACK Help_About_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp);
465 void Help_About_OnInitDialog (HWND hDlg);
466 void Help_About_OnSysCommand (HWND hDlg, int &cmd);
467 LONG procAbout;
468
469 void Help_About (void)
470 {
471    ModalDialog (IDD_HELP_ABOUT, g.hMain, (DLGPROC)Help_About_DlgProc);
472 }
473
474
475 BOOL CALLBACK Help_About_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp)
476 {
477    static int cmd;
478    switch (msg)
479       {
480       case WM_INITDIALOG:
481          cmd = 0;
482          Help_About_OnInitDialog (hDlg);
483          break;
484
485       case WM_COMMAND:
486          switch (LOWORD(wp))
487             {
488             case IDOK:
489             case IDCANCEL:
490                EndDialog (hDlg, LOWORD(wp));
491                break;
492             }
493          break;
494
495       case WM_SYSCOMMAND+1:
496          Help_About_OnSysCommand (hDlg, cmd);
497          break;
498       }
499
500    return FALSE;
501 }
502
503
504 BOOL CALLBACK Help_About_Proc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp)
505 {
506    if (msg == WM_DESTROY)
507       {
508       KillTimer (GetParent(hDlg), 1000);
509       }
510    else if (msg == WM_DESTROY+0x200)
511       {
512       RECT rr;
513       GetWindowRect(GetDlgItem(GetParent(hDlg),0x051E),&rr);
514       DWORD dw = GetMessagePos();
515       POINT pt = { LOWORD(dw), HIWORD(dw) };
516       if (PtInRect (&rr, pt))
517          {
518          SetDlgItemText (GetParent(hDlg), 0x051F, TEXT("\n\n\n\n\n\n\n"));
519          SetTimer (GetParent(hDlg), 1000, 1000/8, NULL);
520          }
521       }
522    return CallWindowProc ((WNDPROC)procAbout, hDlg, msg, wp, lp);
523 }
524
525
526 void Help_About_OnInitDialog (HWND hDlg)
527 {
528    HWND hAbout = GetDlgItem (hDlg, IDOK);
529    procAbout = (LONG)GetWindowLong (hAbout, GWL_WNDPROC);
530    SetWindowLong (hAbout, GWL_WNDPROC, (LONG)Help_About_Proc);
531
532    LPTSTR pszText = FormatString (IDS_HELPABOUT_DESC1);
533    SetDlgItemText (hDlg, IDC_HELPABOUT_DESC, pszText);
534    FreeString (pszText);
535 }
536
537
538 void Help_About_OnSysCommand (HWND hDlg, int &cmd)
539 {
540    DWORD dw;
541    TCHAR szSys[cchRESOURCE];
542    TCHAR szSys2[cchRESOURCE];
543    GetDlgItemText (hDlg, 0x051F, szSys, cchRESOURCE);
544    if ((dw = NextSearch (cmd)) != 0)
545       {
546       LPTSTR psz;
547       for (psz = &szSys[ lstrlen(szSys)-1 ]; *(psz-1) != TEXT('\n'); --psz);
548       lstrcpy (szSys2, psz);
549       wsprintf (psz, TEXT("%c%s"), (TCHAR)dw, szSys2);
550       SetDlgItemText (hDlg, 0x051F, szSys);
551       }
552    else // (dw == 0)
553       {
554       LPTSTR psz;
555       for (psz = szSys; *psz && (*psz != TEXT('\n')); ++psz);
556       wsprintf (szSys2, TEXT("%s\n"), 1+psz);
557       SetDlgItemText (hDlg, 0x051F, szSys2);
558       }
559 }
560
561
562
563 /*
564  * CONTEXT HELP _____________________________________________________________
565  *
566  */
567
568 static DWORD IDD_SVR_LISTS_HELP[] = {
569    IDC_LIST_LIST,                    IDH_SVRMGR_LIST_LIST,
570    IDC_LIST_ADD,                     IDH_SVRMGR_LIST_ADD,
571    IDC_LIST_REMOVE,                  IDH_SVRMGR_LIST_REMOVE,
572    IDC_LIST_NAME,                    IDH_SVRMGR_LIST_NAME,
573    0, 0
574 };
575
576 static DWORD IDD_AGG_GENERAL_HELP[] = {
577    IDC_AGG_NAME,                     IDH_SVRMGR_AGGPROP_NAME,
578    IDC_AGG_ID,                       IDH_SVRMGR_AGGPROP_ID,
579    IDC_AGG_DEVICE,                   IDH_SVRMGR_AGGPROP_DEVICE,
580    IDC_AGG_USAGE,                    IDH_SVRMGR_AGGPROP_USAGE,
581    IDC_AGG_USAGEBAR,                 IDH_SVRMGR_AGGPROP_USAGEBAR,
582    IDC_AGG_WARN,                     IDH_SVRMGR_AGGPROP_WARN,
583    IDC_AGG_WARN_AGGFULL_DEF,         IDH_SVRMGR_AGGPROP_WARN_AGGFULL_DEF,
584    IDC_AGG_WARN_AGGFULL,             IDH_SVRMGR_AGGPROP_WARN_AGGFULL,
585    IDC_AGG_WARN_AGGFULL_PERCENT,     IDH_SVRMGR_AGGPROP_WARN_AGGFULL_PERCENT,
586    IDC_AGG_FILESETS,                 IDH_SVRMGR_AGGPROP_NUMFILESETS,
587    IDC_AGG_WARNALLOC,                IDH_SVRMGR_AGGPROP_WARNALLOC,
588    0, 0
589 };
590
591 static DWORD IDD_SVR_GENERAL_HELP[] = {
592    IDC_SVR_NAME,                     IDH_SVRMGR_SVRPROP_NAME,
593    IDC_SVR_ADDRESSES,                IDH_SVRMGR_SVRPROP_ADDRESSES,
594    IDC_SVR_NUMAGGREGATES,            IDH_SVRMGR_SVRPROP_NUMAGGREGATES,
595    IDC_SVR_AUTH_YES,                 IDH_SVRMGR_SVRPROP_AUTH_YES,
596    IDC_SVR_AUTH_NO,                  IDH_SVRMGR_SVRPROP_AUTH_NO,
597    IDC_SVR_CAPACITY,                 IDH_SVRMGR_SVRPROP_CAPACITY,
598    IDC_SVR_ALLOCATION,               IDH_SVRMGR_SVRPROP_ALLOCATION,
599    IDC_SVR_CHANGEADDR,               IDH_SVRMGR_SVRPROP_CHANGEADDR,
600    0, 0
601 };
602
603 static DWORD IDD_SVR_SCOUT_HELP[] = {
604    IDC_SVR_WARN_AGGFULL,             IDH_SVRMGR_SVRPROP_WARN_AGGFULL,
605    IDC_SVR_WARN_AGGFULL_PERCENT,     IDH_SVRMGR_SVRPROP_WARN_AGGFULL_PERCENT,
606    IDC_SVR_WARN_SETFULL,             IDH_SVRMGR_SVRPROP_WARN_SETFULL,
607    IDC_SVR_WARN_SETFULL_PERCENT,     IDH_SVRMGR_SVRPROP_WARN_SETFULL_PERCENT,
608    IDC_SVR_WARN_SVCSTOP,             IDH_SVRMGR_SVRPROP_WARN_SVCSTOP,
609    IDC_SVR_WARN_SETNOVLDB,           IDH_SVRMGR_SVRPROP_WARN_SETNOVLDB,
610    IDC_SVR_WARN_AGGNOSERV,           IDH_SVRMGR_SVRPROP_WARN_AGGNOSERV,
611    IDC_SVR_WARN_SETNOSERV,           IDH_SVRMGR_SVRPROP_WARN_SETNOSERV,
612    IDC_SVR_AUTOREFRESH,              IDH_SVRMGR_SVRPROP_AUTOREFRESH,
613    IDC_SVR_AUTOREFRESH_MINUTES,      IDH_SVRMGR_SVRPROP_AUTOREFRESH_MINUTES,
614    IDC_SVR_WARN_AGGALLOC,            IDH_SVRMGR_SVRPROP_WARNALLOC,
615    0, 0
616 };
617
618 static DWORD IDD_SVC_GENERAL_HELP[] = {
619    IDC_SVC_NAME,                     IDH_SVRMGR_SVCPROP_NAME,
620    IDC_SVC_TYPE,                     IDH_SVRMGR_SVCPROP_TYPE,
621    IDC_SVC_PARAMS,                   IDH_SVRMGR_SVCPROP_PARAMS,
622    IDC_SVC_STARTDATE,                IDH_SVRMGR_SVCPROP_STARTDATE,
623    IDC_SVC_STOPDATE,                 IDH_SVRMGR_SVCPROP_STOPDATE,
624    IDC_SVC_LASTERROR,                IDH_SVRMGR_SVCPROP_LASTERROR,
625    IDC_SVC_STATUS,                   IDH_SVRMGR_SVCPROP_STATUS,
626    IDC_SVC_NOTIFIER,                 IDH_SVRMGR_SVCPROP_NOTIFIER,
627    IDC_SVC_WARNSTOP,                 IDH_SVRMGR_SVCPROP_WARNSTOP,
628    IDC_SVC_VIEWLOG,                  IDH_SVRMGR_SVCPROP_VIEWLOG,
629    IDC_SVC_START,                    IDH_SVRMGR_SVCPROP_START,
630    IDC_SVC_STOP,                     IDH_SVRMGR_SVCPROP_STOP,
631    0, 0
632 };
633
634 static DWORD IDD_SET_GENERAL_HELP[] = {
635    IDC_SET_NAME,                     IDH_SVRMGR_SETPROP_NAME,
636    IDC_SET_ID,                       IDH_SVRMGR_SETPROP_ID,
637    IDC_SET_CREATEDATE,               IDH_SVRMGR_SETPROP_CREATEDATE,
638    IDC_SET_UPDATEDATE,               IDH_SVRMGR_SETPROP_UPDATEDATE,
639    IDC_SET_ACCESSDATE,               IDH_SVRMGR_SETPROP_ACCESSDATE,
640    IDC_SET_BACKUPDATE,               IDH_SVRMGR_SETPROP_BACKUPDATE,
641    IDC_SET_STATUS,                   IDH_SVRMGR_SETPROP_STATUS,
642    IDC_SET_LOCK,                     IDH_SVRMGR_SETPROP_LOCK,
643    IDC_SET_UNLOCK,                   IDH_SVRMGR_SETPROP_UNLOCK,
644    IDC_SET_USAGE,                    IDH_SVRMGR_SETPROP_USAGE,
645    IDC_SET_QUOTA,                    IDH_SVRMGR_SETPROP_QUOTA,
646    IDC_SET_USAGEBAR,                 IDH_SVRMGR_SETPROP_USAGEBAR,
647    IDC_SET_WARN,                     IDH_SVRMGR_SETPROP_WARN,
648    IDC_SET_WARN_SETFULL_DEF,         IDH_SVRMGR_SETPROP_WARN_SETFULL_DEF,
649    IDC_SET_WARN_SETFULL,             IDH_SVRMGR_SETPROP_WARN_SETFULL,
650    IDC_SET_WARN_SETFULL_PERCENT,     IDH_SVRMGR_SETPROP_WARN_SETFULL_PERCENT,
651    IDC_SET_FILES,                    IDH_SVRMGR_SETPROP_FILES,
652    0, 0
653 };
654
655 static DWORD IDD_SVC_CREATE_HELP[] = {
656    IDC_SVC_SERVER,                   IDH_SVRMGR_SVCCREATE_SERVER,
657    IDC_SVC_NAME,                     IDH_SVRMGR_SVCCREATE_NAME,
658    IDC_SVC_COMMAND,                  IDH_SVRMGR_SVCCREATE_COMMAND,
659    IDC_SVC_PARAMS,                   IDH_SVRMGR_SVCCREATE_PARAMS,
660    IDC_SVC_NOTIFIER,                 IDH_SVRMGR_SVCCREATE_NOTIFIER,
661    IDC_SVC_LOGFILE,                  IDH_SVRMGR_SVCCREATE_LOGFILE,
662    IDC_SVC_TYPE_SIMPLE,              IDH_SVRMGR_SVCCREATE_SIMPLE,
663    IDC_SVC_RUNNOW,                   IDH_SVRMGR_SVCCREATE_SIMPLE_RUNNOW,
664    IDC_SVC_TYPE_FS,                  IDH_SVRMGR_SVCCREATE_FS,
665    IDC_SVC_TYPE_CRON,                IDH_SVRMGR_SVCCREATE_CRON,
666    IDC_SVC_RUNDAY,                   IDH_SVRMGR_SVCCREATE_CRON_RUNDAY,
667    IDC_SVC_RUNTIME,                  IDH_SVRMGR_SVCCREATE_CRON_RUNTIME,
668    0, 0
669 };
670
671 static DWORD IDD_SET_RELEASE_HELP[] = {
672    IDOK,                             IDH_SVRMGR_SETRELEASE_OK,
673    IDCANCEL,                         IDH_SVRMGR_SETRELEASE_CANCEL,
674    IDC_RELSET_NORMAL,                IDH_SVRMGR_SETRELEASE_NORMAL,
675    IDC_RELSET_FORCE,                 IDH_SVRMGR_SETRELEASE_FORCE,
676    0, 0
677 };
678
679 static DWORD IDD_SET_REPSITES_HELP[] = {
680    IDC_SET_NAME,                     IDH_SVRMGR_SETREPSITES_NAME,
681    IDC_SET_SERVER,                   IDH_SVRMGR_SETREPSITES_RW_SERVER,
682    IDC_SET_AGGREGATE,                IDH_SVRMGR_SETREPSITES_RW_AGGREGATE,
683    IDC_SET_REP_LIST,                 IDH_SVRMGR_SETREPSITES_REPSITES,
684    IDC_SET_REPSITE_ADD,              IDH_SVRMGR_SETREPSITES_REPSITE_ADD,
685    IDC_SET_REPSITE_DELETE,           IDH_SVRMGR_SETREPSITES_REPSITE_DELETE,
686    IDC_SET_RELEASE,                  IDH_SVRMGR_SETREPSITES_REPSITE_RELEASE,
687    0, 0
688 };
689
690 static DWORD IDD_DCE_NEWCELL_HELP[] = {
691    IDC_OPENCELL_CELL,                IDH_SVRMGR_NEWCELL_CELL,
692    IDC_OPENCELL_OLDCREDS,            IDH_SVRMGR_NEWCELL_CURRENTID,
693    IDC_OPENCELL_ID,                  IDH_SVRMGR_NEWCELL_ID,
694    IDC_OPENCELL_PASSWORD,            IDH_SVRMGR_NEWCELL_PASSWORD,
695    IDC_ADVANCED,                     IDH_SVRMGR_NEWCELL_ADVANCED,
696    IDC_MON_ALL,                      IDH_SVRMGR_NEWCELL_MONALL,
697    IDC_MON_ONE,                      IDH_SVRMGR_NEWCELL_MONONE,
698    IDC_MON_SERVER,                   IDH_SVRMGR_NEWCELL_MONSERVER,
699    IDC_MON_SOME,                     IDH_SVRMGR_NEWCELL_MONSOME,
700    IDC_MON_SUBSET,                   IDH_SVRMGR_NEWCELL_MONSUBSET,
701    0, 0
702 };
703
704 static DWORD IDD_DCE_NEWCREDS_HELP[] = {
705    IDC_CREDS_CELL,                   IDH_SVRMGR_NEWCREDS_CELL,
706    IDC_CREDS_CURRENTID,              IDH_SVRMGR_NEWCREDS_CURRENTID,
707    IDC_CREDS_EXPDATE,                IDH_SVRMGR_NEWCREDS_EXPDATE,
708    IDC_CREDS_LOGIN,                  IDH_SVRMGR_NEWCREDS_LOGIN,
709    IDC_CREDS_ID,                     IDH_SVRMGR_NEWCREDS_ID,
710    IDC_CREDS_PASSWORD,               IDH_SVRMGR_NEWCREDS_PASSWORD,
711    (DWORD)IDC_STATIC,                0,
712    0, 0
713 };
714
715 static DWORD IDD_COLUMNS_HELP[] = {
716    IDC_COLUMNS,                      IDH_SVRMGR_COLUMNS_WHICH,
717    IDC_COL_AVAIL,                    IDH_SVRMGR_COLUMNS_AVAIL,
718    IDC_COL_SHOWN,                    IDH_SVRMGR_COLUMNS_SHOWN,
719    IDC_COL_INSERT,                   IDH_SVRMGR_COLUMNS_INSERT,
720    IDC_COL_DELETE,                   IDH_SVRMGR_COLUMNS_DELETE,
721    IDC_COL_UP,                       IDH_SVRMGR_COLUMNS_MOVEUP,
722    IDC_COL_DOWN,                     IDH_SVRMGR_COLUMNS_MOVEDOWN,
723    0, 0
724 };
725
726 static DWORD IDD_SET_CREATE_HELP[] = {
727    IDC_SET_NAME,                     IDH_SVRMGR_SETCREATE_NAME,
728    IDC_SET_QUOTA,                    IDH_SVRMGR_SETCREATE_QUOTA,
729    IDC_SET_QUOTA_UNITS,              IDH_SVRMGR_SETCREATE_QUOTA_UNITS,
730    IDC_SET_CLONE,                    IDH_SVRMGR_SETCREATE_CLONE,
731    IDC_SET_SERVER,                   IDH_SVRMGR_SETCREATE_SERVER,
732    IDC_AGG_LIST,                     IDH_SVRMGR_SETCREATE_AGGLIST,
733    0, 0
734 };
735
736 static DWORD IDD_SET_DELETE_HELP[] = {
737    IDOK,                             IDH_SVRMGR_SETDELETE_OK,
738    IDCANCEL,                         IDH_SVRMGR_SETDELETE_CANCEL,
739    IDC_DELSET_SERVER,                IDH_SVRMGR_SETDELETE_DELFROM_SERVER,
740    IDC_DELSET_VLDB,                  IDH_SVRMGR_SETDELETE_DELFROM_VLDB,
741    0, 0
742 };
743
744 static DWORD IDD_SET_DELREP_HELP[] = {
745    IDOK,                             IDH_SVRMGR_SETDELREP_OK,
746    IDCANCEL,                         IDH_SVRMGR_SETDELREP_CANCEL,
747    0, 0
748 };
749
750 static DWORD IDD_SET_DELCLONE_HELP[] = {
751    IDOK,                             IDH_SVRMGR_SETDELCLONE_OK,
752    IDCANCEL,                         IDH_SVRMGR_SETDELCLONE_CANCEL,
753    0, 0
754 };
755
756 static DWORD IDD_SET_CLONE_HELP[] = {
757    IDOK,                             IDH_SVRMGR_SETCLONE_OK,
758    IDCANCEL,                         IDH_SVRMGR_SETCLONE_CANCEL,
759    0, 0
760 };
761
762 static DWORD IDD_PROBLEMS_HELP[] = {
763    IDC_PROBLEM_TEXT,                 IDH_SVRMGR_PROBLEMS_TEXT,
764    IDC_PROBLEM_REMEDY,               IDH_SVRMGR_PROBLEMS_REMEDY,
765    IDC_PROBLEM_SCROLL,               IDH_SVRMGR_PROBLEMS_SCROLL,
766    0, 0
767 };
768
769 static DWORD IDD_SET_MOVETO_HELP[] = {
770    IDC_AGG_LIST,                     IDH_SVRMGR_SETMOVE_AGGLIST,
771    IDC_MOVESET_SERVER,               IDH_SVRMGR_SETMOVE_SERVER,
772    0, 0
773 };
774
775 static DWORD IDD_SVC_LOGNAME_HELP[] = {
776    IDC_VIEWLOG_SERVER,               IDH_SVRMGR_LOGNAME_SERVER,
777    IDC_VIEWLOG_FILENAME,             IDH_SVRMGR_LOGNAME_FILENAME,
778    IDOK,                             IDH_SVRMGR_LOGNAME_OK,
779    IDCANCEL,                         IDH_SVRMGR_LOGNAME_CANCEL,
780    0, 0
781 };
782
783 static DWORD IDD_SVC_VIEWLOG_HELP[] = {
784    IDC_SVC_VIEWLOG_FILENAME,         IDH_SVRMGR_VIEWLOG_FILENAME,
785    IDC_VIEWLOG_TEXT,                 IDH_SVRMGR_VIEWLOG_TEXT,
786    IDC_VIEWLOG_SAVEAS,               IDH_SVRMGR_VIEWLOG_SAVEAS,
787    0, 0
788 };
789
790 static DWORD IDD_SET_SETQUOTA_HELP[] = {
791    IDC_SET_NAME,                     IDH_SVRMGR_SETQUOTA_NAME,
792    IDC_SET_AGGREGATE,                IDH_SVRMGR_SETQUOTA_AGGREGATE,
793    IDC_AGG_PROPERTIES,               IDH_SVRMGR_SETQUOTA_AGGPROPERTIES,
794    IDC_SET_USAGE,                    IDH_SVRMGR_SETQUOTA_USAGE,
795    IDC_SET_USAGEBAR,                 IDH_SVRMGR_SETQUOTA_USAGEBAR,
796    IDC_SET_QUOTA,                    IDH_SVRMGR_SETQUOTA_VALUE,
797    IDC_SET_QUOTA_UNITS,              IDH_SVRMGR_SETQUOTA_UNITS,
798    IDOK,                             IDH_SVRMGR_SETQUOTA_OK,
799    IDCANCEL,                         IDH_SVRMGR_SETQUOTA_CANCEL,
800    0, 0
801 };
802
803 static DWORD IDD_SVR_SYNCVLDB_HELP[] = {
804    IDOK,                             IDH_SVRMGR_SYNCVLDB_OK,
805    IDCANCEL,                         IDH_SVRMGR_SYNCVLDB_CANCEL,
806    0, 0
807 };
808
809 static DWORD IDD_SET_CREATEREP_HELP[] = {
810    IDC_SET_NAME,                     IDH_SVRMGR_SETCREATEREP_NAME,
811    IDC_AGG_LIST,                     IDH_SVRMGR_SETCREATEREP_AGGLIST,
812    IDC_SET_SERVER,                   IDH_SVRMGR_SETCREATEREP_SERVER,
813    0, 0
814 };
815
816 static DWORD IDD_SVR_INSTALL_HELP[] = {
817    IDC_FILENAME,                     IDH_SVRMGR_INSTALL_SOURCE,
818    IDC_BROWSE,                       IDH_SVRMGR_INSTALL_BROWSE,
819    IDC_SERVER,                       IDH_SVRMGR_INSTALL_SERVER,
820    IDC_DIRECTORY,                    IDH_SVRMGR_INSTALL_TARGET,
821    0, 0
822 };
823
824 static DWORD IDD_SVR_UNINSTALL_HELP[] = {
825    IDC_SERVER,                       IDH_SVRMGR_UNINSTALL_SERVER,
826    IDC_FILENAME,                     IDH_SVRMGR_UNINSTALL_FILENAME,
827    0, 0
828 };
829
830 static DWORD IDD_SVR_PRUNE_HELP[] = {
831    IDC_SERVER,                       IDH_SVRMGR_PRUNE_SERVER,
832    IDC_OP_DELETE_CORE,               IDH_SVRMGR_PRUNE_OP_DELETE_CORE,
833    IDC_OP_DELETE_BAK,                IDH_SVRMGR_PRUNE_OP_DELETE_BAK,
834    IDC_OP_DELETE_OLD,                IDH_SVRMGR_PRUNE_OP_DELETE_OLD,
835    0, 0
836 };
837
838 static DWORD IDD_SET_RENAME_HELP[] = {
839    IDC_RENSET_OLD,                   IDH_SVRMGR_RENAMESET_OLDNAME,
840    IDC_RENSET_NEW,                   IDH_SVRMGR_RENAMESET_NEWNAME,
841    0, 0
842 };
843
844 static DWORD IDD_SVC_DELETE_HELP[] = {
845    IDCANCEL,                         IDH_SVRMGR_DELETESERVICE_CANCEL,
846    IDOK,                             IDH_SVRMGR_DELETESERVICE_OK,
847    0, 0
848 };
849
850 static DWORD IDD_SVR_GETDATES_HELP[] = {
851    IDC_SERVER,                       IDH_SVRMGR_GETDATES_SERVER,
852    IDC_FILENAME,                     IDH_SVRMGR_GETDATES_FILENAME,
853    0, 0
854 };
855
856 static DWORD IDD_SVR_GETDATES_RESULTS_HELP[] = {
857    IDC_SERVER,                       IDH_SVRMGR_GETDATES_SERVER,
858    IDC_FILENAME,                     IDH_SVRMGR_GETDATES_FILENAME,
859    IDC_DATE_FILE,                    IDH_SVRMGR_GETDATES_DATE_FILE,
860    IDC_DATE_BAK,                     IDH_SVRMGR_GETDATES_DATE_BAK,
861    IDC_DATE_OLD,                     IDH_SVRMGR_GETDATES_DATE_OLD,
862    0, 0
863 };
864
865 static DWORD IDD_SET_DUMP_HELP[] = {
866    IDC_DUMP_FILENAME,                IDH_SVRMGR_SETDUMP_FILENAME,
867    IDC_DUMP_FULL,                    IDH_SVRMGR_SETDUMP_FULL,
868    IDC_DUMP_LIMIT_TIME,              IDH_SVRMGR_SETDUMP_BYTIME,
869    IDC_DUMP_TIME,                    IDH_SVRMGR_SETDUMP_BYTIME_TIME,
870    IDC_DUMP_DATE,                    IDH_SVRMGR_SETDUMP_BYTIME_DATE,
871    0, 0
872 };
873
874 static DWORD IDD_SET_RESTORE_HELP[] = {
875    IDC_RESTORE_FILENAME,             IDH_SVRMGR_SETRESTORE_FILENAME,
876    IDC_RESTORE_BROWSE,               IDH_SVRMGR_SETRESTORE_BROWSE,
877    IDC_RESTORE_SETNAME,              IDH_SVRMGR_SETRESTORE_SETNAME,
878    IDC_RESTORE_SERVER,               IDH_SVRMGR_SETRESTORE_SERVER,
879    IDC_AGG_LIST,                     IDH_SVRMGR_SETRESTORE_AGGLIST,
880    IDC_RESTORE_INCREMENTAL,          IDH_SVRMGR_SETRESTORE_INCREMENTAL,
881    0, 0
882 };
883
884 static DWORD IDD_SVC_BOS_HELP[] = {
885    IDC_SVC_NAME,                     IDH_SVRMGR_SVCPROP_BOS_NAME,
886    IDC_BOS_GENRES,                   IDH_SVRMGR_SVCPROP_BOS_GENRES,
887    IDC_BOS_GENRES_DATE,              IDH_SVRMGR_SVCPROP_BOS_GENRES_DATE,
888    IDC_BOS_GENRES_TIME,              IDH_SVRMGR_SVCPROP_BOS_GENRES_TIME,
889    IDC_BOS_BINRES,                   IDH_SVRMGR_SVCPROP_BOS_BINRES,
890    IDC_BOS_BINRES_DATE,              IDH_SVRMGR_SVCPROP_BOS_BINRES_DATE,
891    IDC_BOS_BINRES_TIME,              IDH_SVRMGR_SVCPROP_BOS_BINRES_TIME,
892    0, 0
893 };
894
895 static DWORD IDD_SET_CLONESYS_HELP[] = {
896    IDC_CLONE_ALL,                    IDH_SVRMGR_CLONESYS_ALL,
897    IDC_CLONE_SOME,                   IDH_SVRMGR_CLONESYS_SOME,
898    IDC_CLONE_SVR_LIMIT,              IDH_SVRMGR_CLONESYS_BYSERVER,
899    IDC_CLONE_SVR,                    IDH_SVRMGR_CLONESYS_BYSERVER_SERVER,
900    IDC_CLONE_AGG_LIMIT,              IDH_SVRMGR_CLONESYS_BYAGG,
901    IDC_CLONE_AGG,                    IDH_SVRMGR_CLONESYS_BYAGG_AGGREGATE,
902    IDC_CLONE_PREFIX_LIMIT,           IDH_SVRMGR_CLONESYS_BYPREFIX,
903    IDC_CLONE_PREFIX,                 IDH_SVRMGR_CLONESYS_BYPREFIX_PREFIX,
904    0, 0
905 };
906
907 static DWORD IDD_SUBSETS_HELP[] = {
908    IDC_SUBSET_NAME,                  IDH_SVRMGR_SUBSET_NAME,
909    IDC_SUBSET_LOAD,                  IDH_SVRMGR_SUBSET_LOAD,
910    IDC_SUBSET_SAVE,                  IDH_SVRMGR_SUBSET_SAVE,
911    IDC_SUBSET_LIST,                  IDH_SVRMGR_SUBSET_SERVERLIST,
912    IDC_SUBSET_ALL,                   IDH_SVRMGR_SUBSET_MONITORALL,
913    IDC_SUBSET_NONE,                  IDH_SVRMGR_SUBSET_MONITORNONE,
914    0, 0
915 };
916
917 static DWORD IDD_SUBSET_LOADSAVE_HELP[] = {
918    IDC_SUBSET_NAME,                  IDH_SVRMGR_SUBSET_NAME,
919    IDC_SUBSET_LIST,                  IDH_SVRMGR_SUBSET_SUBSETLIST,
920    IDC_SUBSET_DELETE,                IDH_SVRMGR_SUBSET_DELETE,
921    IDC_SUBSET_RENAME,                IDH_SVRMGR_SUBSET_RENAME,
922    0, 0
923 };
924
925 static DWORD IDD_OPTIONS_GENERAL_HELP[] = {
926    IDC_OPT_SVR_LONGNAMES,            IDH_SVRMGR_OPT_SVR_LONGNAMES,
927    IDC_OPT_SVR_DBL_PROP,             IDH_SVRMGR_OPT_SVR_DBL_PROP,
928    IDC_OPT_SVR_DBL_DEPENDS,          IDH_SVRMGR_OPT_SVR_DBL_DEPENDS,
929    IDC_OPT_SVR_DBL_OPEN,             IDH_SVRMGR_OPT_SVR_DBL_OPEN,
930    IDC_OPT_SVR_OPENMON,              IDH_SVRMGR_OPT_SVR_OPENMON,
931    IDC_OPT_SVR_CLOSEUNMON,           IDH_SVRMGR_OPT_SVR_CLOSEUNMON,
932    IDC_OPT_WARN_BADCREDS,            IDH_SVRMGR_OPT_WARN_BADCREDS,
933    0, 0
934 };
935
936 static DWORD IDD_BADCREDS_HELP[] = {
937    IDC_BADCREDS_SHUTUP,              IDH_SVRMGR_BADCREDS_SHUTUP,
938    IDOK,                             IDH_SVRMGR_BADCREDS_YES,
939    IDCANCEL,                         IDH_SVRMGR_BADCREDS_NO,
940    0, 0
941 };
942
943 static DWORD IDD_SVR_KEYS_HELP[] = {
944    IDC_KEY_LIST,                     IDH_SVRMGR_KEY_LIST,
945    IDC_KEY_ADD,                      IDH_SVRMGR_KEY_ADD,
946    IDC_KEY_REMOVE,                   IDH_SVRMGR_KEY_REMOVE,
947    IDC_KEY_NAME,                     IDH_SVRMGR_KEY_NAME,
948    0, 0
949 };
950
951 static DWORD IDD_SVC_START_HELP[] = {
952    IDC_STARTSTOP_TEMPORARY,          IDH_SVRMGR_STARTSERVICE_TEMPORARY,
953    IDC_STARTSTOP_PERMANENT,          IDH_SVRMGR_STARTSERVICE_PERMANENT,
954    0, 0
955 };
956
957 static DWORD IDD_SVC_STOP_HELP[] = {
958    IDC_STARTSTOP_TEMPORARY,          IDH_SVRMGR_STOPSERVICE_TEMPORARY,
959    IDC_STARTSTOP_PERMANENT,          IDH_SVRMGR_STOPSERVICE_PERMANENT,
960    0, 0
961 };
962
963 static DWORD IDD_SVR_EXECUTE_HELP[] = {
964    IDC_SERVER,                       IDH_SVRMGR_EXECUTECOMMAND_SERVER,
965    IDC_COMMAND,                      IDH_SVRMGR_EXECUTECOMMAND_COMMAND,
966    0, 0
967 };
968
969 static DWORD IDD_SVR_SALVAGE_HELP[] = {
970    IDC_SERVER,                       IDH_SVRMGR_SALVAGE_SERVER,
971    IDC_AGGREGATE,                    IDH_SVRMGR_SALVAGE_AGGREGATE,
972    IDC_AGGREGATE_ALL,                IDH_SVRMGR_SALVAGE_AGGREGATE_ALL,
973    IDC_FILESET,                      IDH_SVRMGR_SALVAGE_FILESET,
974    IDC_FILESET_ALL,                  IDH_SVRMGR_SALVAGE_FILESET_ALL,
975    IDC_ADVANCED,                     IDH_SVRMGR_SALVAGE_ADVANCED,
976    IDC_SALVAGE_TEMPDIR,              IDH_SVRMGR_SALVAGE_TEMPDIR,
977    IDC_SALVAGE_SIMUL,                IDH_SVRMGR_SALVAGE_SIMUL,
978    IDC_SALVAGE_NUM,                  IDH_SVRMGR_SALVAGE_NUM,
979    IDC_SALVAGE_READONLY,             IDH_SVRMGR_SALVAGE_READONLY,
980    IDC_SALVAGE_BLOCK,                IDH_SVRMGR_SALVAGE_BLOCK,
981    IDC_SALVAGE_FORCE,                IDH_SVRMGR_SALVAGE_FORCE,
982    IDC_SALVAGE_FIXDIRS,              IDH_SVRMGR_SALVAGE_FIXDIRS,
983    IDC_SALVAGE_LOG_FILE,             IDH_SVRMGR_SALVAGE_LOG_FILE,
984    IDC_SALVAGE_LOG_INODES,           IDH_SVRMGR_SALVAGE_LOG_INODES,
985    IDC_SALVAGE_LOG_ROOT,             IDH_SVRMGR_SALVAGE_LOG_ROOT,
986    0, 0
987 };
988
989 static DWORD IDD_SVR_SALVAGE_RESULTS_HELP[] = {
990    IDC_SALVAGE_DETAILS,              IDH_SVRMGR_SALVAGE_DETAILS,
991    0, 0
992 };
993
994 static DWORD IDD_SVR_HOSTS_HELP[] = {
995    IDC_HOST_LIST,                    IDH_SVRMGR_HOST_LIST,
996    IDC_HOST_ADD,                     IDH_SVRMGR_HOST_ADD,
997    IDC_HOST_REMOVE,                  IDH_SVRMGR_HOST_REMOVE,
998    IDC_HOST_TITLE,                   IDH_SVRMGR_HOST_TITLE,
999    0, 0
1000 };
1001
1002 static DWORD IDD_SVR_ADDHOST_HELP[] = {
1003    IDC_ADDHOST_HOST,                 IDH_SVRMGR_ADDHOST_HOST,
1004    IDOK,                             IDH_SVRMGR_ADDHOST_OK,
1005    0, 0
1006 };
1007
1008 static DWORD IDD_SVR_ADDRESS_HELP[] = {
1009    IDC_SVR_ADDRESSES,                IDH_SVRMGR_ADDRESS_LIST,
1010    IDC_ADDR_CHANGE,                  IDH_SVRMGR_ADDRESS_CHANGE,
1011    IDC_ADDR_REMOVE,                  IDH_SVRMGR_ADDRESS_REMOVE,
1012    0, 0
1013 };
1014
1015 static DWORD IDD_SVR_NEWADDR_HELP[] = {
1016    IDC_ADDRESS,                      IDH_SVRMGR_CHANGEADDR_ADDRESS,
1017    0, 0
1018 };
1019
1020
1021 void Main_ConfigureHelp (void)
1022 {
1023    AfsAppLib_RegisterHelpFile (cszHELPFILENAME);
1024
1025    AfsAppLib_RegisterHelp (IDD_SVR_LISTS, IDD_SVR_LISTS_HELP, IDH_SVRMGR_ADMINLIST_EDIT_OVERVIEW);
1026    AfsAppLib_RegisterHelp (IDD_AGG_GENERAL, IDD_AGG_GENERAL_HELP, IDH_SVRMGR_PROP_AGGREGATE_OVERVIEW);
1027    AfsAppLib_RegisterHelp (IDD_SVR_GENERAL, IDD_SVR_GENERAL_HELP, IDH_SVRMGR_PROP_SERVER_OVERVIEW);
1028    AfsAppLib_RegisterHelp (IDD_SVR_SCOUT, IDD_SVR_SCOUT_HELP, IDH_SVRMGR_PROP_SERVER_WARNINGS_OVERVIEW);
1029    AfsAppLib_RegisterHelp (IDD_SVC_GENERAL, IDD_SVC_GENERAL_HELP, IDH_SVRMGR_PROP_SERVICE_OVERVIEW);
1030    AfsAppLib_RegisterHelp (IDD_SET_GENERAL, IDD_SET_GENERAL_HELP, IDH_SVRMGR_PROP_FILESET_OVERVIEW);
1031    AfsAppLib_RegisterHelp (IDD_SVC_CREATE, IDD_SVC_CREATE_HELP, IDH_SVRMGR_CREATESERVICE_OVERVIEW);
1032    AfsAppLib_RegisterHelp (IDD_SET_RELEASE, IDD_SET_RELEASE_HELP, IDH_SVRMGR_RELEASEFILESET_OVERVIEW);
1033    AfsAppLib_RegisterHelp (IDD_SET_REPSITES, IDD_SET_REPSITES_HELP, IDH_SVRMGR_PROP_REPSITES_OVERVIEW);
1034    AfsAppLib_RegisterHelp (IDD_OPENCELL, IDD_DCE_NEWCELL_HELP, IDH_SVRMGR_NEWCELL_OVERVIEW);
1035    AfsAppLib_RegisterHelp (IDD_APPLIB_CREDENTIALS, IDD_DCE_NEWCREDS_HELP, IDH_SVRMGR_NEWCREDS_OVERVIEW);
1036    AfsAppLib_RegisterHelp (IDD_COLUMNS, IDD_COLUMNS_HELP, IDH_SVRMGR_COLUMNS_OVERVIEW);
1037    AfsAppLib_RegisterHelp (IDD_SET_CREATE, IDD_SET_CREATE_HELP, IDH_SVRMGR_CREATEFILESET_OVERVIEW);
1038    AfsAppLib_RegisterHelp (IDD_SET_DELETE, IDD_SET_DELETE_HELP, IDH_SVRMGR_DELETEFILESET_OVERVIEW);
1039    AfsAppLib_RegisterHelp (IDD_SET_DELREP, IDD_SET_DELREP_HELP, IDH_SVRMGR_DELETEREPLICA_OVERVIEW);
1040    AfsAppLib_RegisterHelp (IDD_SET_DELCLONE, IDD_SET_DELCLONE_HELP, IDH_SVRMGR_DELETECLONE_OVERVIEW);
1041    AfsAppLib_RegisterHelp (IDD_SET_CLONE, IDD_SET_CLONE_HELP, IDH_SVRMGR_CLONE_OVERVIEW);
1042    AfsAppLib_RegisterHelp (IDD_SVR_PROBLEMS, IDD_PROBLEMS_HELP, IDH_SVRMGR_PROBLEMS_OVERVIEW);
1043    AfsAppLib_RegisterHelp (IDD_SET_MOVETO, IDD_SET_MOVETO_HELP, IDH_SVRMGR_PROP_MOVEFILESET_OVERVIEW);
1044    AfsAppLib_RegisterHelp (IDD_SVC_LOGNAME, IDD_SVC_LOGNAME_HELP, 0);
1045    AfsAppLib_RegisterHelp (IDD_SVC_VIEWLOG, IDD_SVC_VIEWLOG_HELP, 0);
1046    AfsAppLib_RegisterHelp (IDD_SET_SETQUOTA, IDD_SET_SETQUOTA_HELP, IDH_SVRMGR_SETFILESETQUOTA_OVERVIEW);
1047    AfsAppLib_RegisterHelp (IDD_SVR_SYNCVLDB, IDD_SVR_SYNCVLDB_HELP, IDH_SVRMGR_SYNCVLDB_OVERVIEW);
1048    AfsAppLib_RegisterHelp (IDD_SET_CREATEREP, IDD_SET_CREATEREP_HELP, IDH_SVRMGR_CREATEREPLICA_OVERVIEW);
1049    AfsAppLib_RegisterHelp (IDD_SVR_INSTALL, IDD_SVR_INSTALL_HELP, IDH_SVRMGR_INSTALLFILE_OVERVIEW);
1050    AfsAppLib_RegisterHelp (IDD_SVR_UNINSTALL, IDD_SVR_UNINSTALL_HELP, IDH_SVRMGR_UNINSTALLFILE_OVERVIEW);
1051    AfsAppLib_RegisterHelp (IDD_SVR_PRUNE, IDD_SVR_PRUNE_HELP, IDH_SVRMGR_PRUNEFILES_OVERVIEW);
1052    AfsAppLib_RegisterHelp (IDD_SET_RENAME, IDD_SET_RENAME_HELP, IDH_SVRMGR_RENAMEFILESET_OVERVIEW);
1053    AfsAppLib_RegisterHelp (IDD_SVC_DELETE, IDD_SVC_DELETE_HELP, IDH_SVRMGR_DELETESERVICE_OVERVIEW);
1054    AfsAppLib_RegisterHelp (IDD_SVR_GETDATES, IDD_SVR_GETDATES_HELP, IDH_SVRMGR_GETDATES_OVERVIEW);
1055    AfsAppLib_RegisterHelp (IDD_SVR_GETDATES_RESULTS, IDD_SVR_GETDATES_RESULTS_HELP, IDH_SVRMGR_GETDATES_RESULTS_OVERVIEW);
1056    AfsAppLib_RegisterHelp (IDD_SET_DUMP, IDD_SET_DUMP_HELP, IDH_SVRMGR_DUMPFILESET_OVERVIEW);
1057    AfsAppLib_RegisterHelp (IDD_SET_RESTORE, IDD_SET_RESTORE_HELP, IDH_SVRMGR_RESTOREFILESET_OVERVIEW);
1058    AfsAppLib_RegisterHelp (IDD_SVC_BOS, IDD_SVC_BOS_HELP, IDH_SVRMGR_PROP_SERVICE_BOS_OVERVIEW);
1059    AfsAppLib_RegisterHelp (IDD_SET_CLONESYS, IDD_SET_CLONESYS_HELP, IDH_SVRMGR_CLONESYS_OVERVIEW);
1060    AfsAppLib_RegisterHelp (IDD_SUBSETS, IDD_SUBSETS_HELP, IDH_SVRMGR_SUBSETS_OVERVIEW);
1061    AfsAppLib_RegisterHelp (IDD_SUBSET_LOADSAVE, IDD_SUBSET_LOADSAVE_HELP, 0);
1062    AfsAppLib_RegisterHelp (IDD_OPTIONS_GENERAL, IDD_OPTIONS_GENERAL_HELP, IDH_SVRMGR_OPTIONS_GENERAL_OVERVIEW);
1063    AfsAppLib_RegisterHelp (IDD_APPLIB_BADCREDS, IDD_BADCREDS_HELP, IDH_SVRMGR_BADCREDS_OVERVIEW);
1064    AfsAppLib_RegisterHelp (IDD_SVR_KEYS, IDD_SVR_KEYS_HELP, IDH_SVRMGR_SERVERKEY_EDIT_OVERVIEW);
1065    AfsAppLib_RegisterHelp (IDD_SVC_START, IDD_SVC_START_HELP, IDH_SVRMGR_STARTSERVICE_OVERVIEW);
1066    AfsAppLib_RegisterHelp (IDD_SVC_STOP, IDD_SVC_STOP_HELP, IDH_SVRMGR_STOPSERVICE_OVERVIEW);
1067    AfsAppLib_RegisterHelp (IDD_SVR_EXECUTE, IDD_SVR_EXECUTE_HELP, IDH_SVRMGR_EXECUTECOMMAND_OVERVIEW);
1068    AfsAppLib_RegisterHelp (IDD_SVR_SALVAGE, IDD_SVR_SALVAGE_HELP, IDH_SVRMGR_SALVAGE_OVERVIEW);
1069    AfsAppLib_RegisterHelp (IDD_SVR_SALVAGE_RESULTS, IDD_SVR_SALVAGE_RESULTS_HELP, IDH_SVRMGR_SALVAGE_RESULTS_OVERVIEW);
1070    AfsAppLib_RegisterHelp (IDD_SVR_HOSTS, IDD_SVR_HOSTS_HELP, IDH_SVRMGR_HOSTS_EDIT_OVERVIEW);
1071    AfsAppLib_RegisterHelp (IDD_SVR_ADDHOST, IDD_SVR_ADDHOST_HELP, IDH_SVRMGR_HOSTS_ADD_OVERVIEW);
1072    AfsAppLib_RegisterHelp (IDD_SVR_ADDRESS, IDD_SVR_ADDRESS_HELP, IDH_SVRMGR_SERVERADDRESSES_OVERVIEW);
1073    AfsAppLib_RegisterHelp (IDD_SVR_NEWADDR, IDD_SVR_NEWADDR_HELP, IDH_SVRMGR_CHANGEADDRESS_OVERVIEW);
1074 }
1075