Windows: remove trailing whitespace
[openafs.git] / src / WINNT / afssvrmgr / svr_salvage.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 #include <winsock2.h>
11 #include <ws2tcpip.h>
12
13 extern "C" {
14 #include <afs/param.h>
15 #include <afs/stds.h>
16 }
17
18 #include "svrmgr.h"
19 #include "svr_salvage.h"
20 #include "propcache.h"
21
22
23 /*
24  * DEFINITIONS ________________________________________________________________
25  *
26  */
27
28 #define cxMIN_SALVAGE_R  250 // minimum size of Salvage Results dialog
29 #define cyMIN_SALVAGE_R  200 // minimum size of Salvage Results dialog
30
31
32 /*
33  * RESIZING WINDOWS ___________________________________________________________
34  *
35  */
36
37 rwWindowData awdSalvageResults[] = {
38     { IDC_SALVAGE_TITLE,        raSizeX | raRepaint,            0,      0 },
39     { IDC_SALVAGE_DETAILS,      raSizeX | raSizeY | raRepaint,  MAKELONG(cxMIN_SALVAGE_R,cyMIN_SALVAGE_R), 0 },
40     { IDOK,                     raMoveX | raMoveY,              0,      0 },
41     { idENDLIST, 0,                                             0,      0 }
42  };
43
44
45 /*
46  * PROTOTYPES _________________________________________________________________
47  *
48  */
49
50 BOOL CALLBACK Server_Salvage_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp);
51 void Server_Salvage_OnInitDialog (HWND hDlg, LPIDENT lpi);
52 void Server_Salvage_OnServer (HWND hDlg, LPIDENT lpi);
53 void Server_Salvage_OnAggregate (HWND hDlg, LPIDENT lpi);
54 void Server_Salvage_OnAllAggregates (HWND hDlg);
55 void Server_Salvage_OnAllFilesets (HWND hDlg);
56 void Server_Salvage_OnSimultaneous (HWND hDlg);
57 void Server_Salvage_OnAdvanced (HWND hDlg);
58 void Server_Salvage_OnOK (HWND hDlg);
59
60 void Server_Salvage_OnEndTask_EnumServers (HWND hDlg, LPIDENT lpi, LPTASKPACKET ptp);
61 void Server_Salvage_OnEndTask_EnumAggregates (HWND hDlg, LPIDENT lpi, LPTASKPACKET ptp);
62 void Server_Salvage_OnEndTask_EnumFilesets (HWND hDlg, LPIDENT lpi, LPTASKPACKET ptp);
63
64 BOOL CALLBACK Server_Salvage_Results_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp);
65 void Server_Salvage_Results_OnInitDialog (HWND hDlg, LPIDENT lpiSalvage);
66 void Server_Salvage_OnEndTask_Salvage (HWND hDlg, LPIDENT lpiSalvage, LPTASKPACKET ptp);
67
68
69 /*
70  * ROUTINES ___________________________________________________________________
71  *
72  */
73
74 void Server_Salvage (LPIDENT lpi)
75 {
76    HWND hCurrent;
77    if ((hCurrent = PropCache_Search (pcSVR_SALVAGE, lpi)) != NULL)
78       {
79       SetFocus (hCurrent);
80       }
81    else
82       {
83       HWND hDlg = ModelessDialogParam (IDD_SVR_SALVAGE, NULL, (DLGPROC)Server_Salvage_DlgProc, (LPARAM)lpi);
84       ShowWindow (hDlg, SW_SHOW);
85       }
86 }
87
88
89 BOOL CALLBACK Server_Salvage_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp)
90 {
91    if (AfsAppLib_HandleHelp (IDD_SVR_SALVAGE, hDlg, msg, wp, lp))
92       return TRUE;
93
94    if (msg == WM_INITDIALOG)
95       SetWindowLongPtr (hDlg, DWLP_USER, lp);
96
97    LPIDENT lpi;
98    if ((lpi = (LPIDENT)GetWindowLongPtr (hDlg, DWLP_USER)) != NULL)
99       {
100       switch (msg)
101          {
102          case WM_INITDIALOG:
103             PropCache_Add (pcSVR_SALVAGE, lpi, hDlg);
104             Server_Salvage_OnInitDialog (hDlg, lpi);
105             Server_Salvage_OnAdvanced (hDlg);
106             break;
107
108          case WM_ENDTASK:
109             LPTASKPACKET ptp;
110             if ((ptp = (LPTASKPACKET)lp) != NULL)
111                {
112                if (ptp->idTask == taskSVR_ENUM_TO_COMBOBOX)
113                   Server_Salvage_OnEndTask_EnumServers (hDlg, lpi, ptp);
114                else if (ptp->idTask == taskAGG_ENUM_TO_COMBOBOX)
115                   Server_Salvage_OnEndTask_EnumAggregates (hDlg, lpi, ptp);
116                else if (ptp->idTask == taskSET_ENUM_TO_COMBOBOX)
117                   Server_Salvage_OnEndTask_EnumFilesets (hDlg, lpi, ptp);
118                FreeTaskPacket (ptp);
119                }
120             break;
121
122          case WM_COMMAND:
123             switch (LOWORD(wp))
124                {
125                case IDOK:
126                   Server_Salvage_OnOK (hDlg);
127                case IDCANCEL:
128                   DestroyWindow (hDlg);
129                   break;
130
131                case IDC_SERVER:
132                   Server_Salvage_OnServer (hDlg, lpi);
133                   break;
134                case IDC_AGGREGATE:
135                   Server_Salvage_OnAggregate (hDlg, lpi);
136                   break;
137                case IDC_AGGREGATE_ALL:
138                   Server_Salvage_OnAllAggregates (hDlg);
139                   break;
140                case IDC_FILESET_ALL:
141                   Server_Salvage_OnAllFilesets (hDlg);
142                   break;
143                case IDC_SALVAGE_SIMUL:
144                   Server_Salvage_OnSimultaneous (hDlg);
145                   break;
146
147                case IDC_ADVANCED:
148                   Server_Salvage_OnAdvanced (hDlg);
149                   break;
150                }
151             break;
152
153          case WM_DESTROY:
154             PropCache_Delete (pcSVR_SALVAGE, lpi);
155             break;
156          }
157       }
158
159    return FALSE;
160 }
161
162
163 void Server_Salvage_OnAdvanced (HWND hDlg)
164 {
165    HWND hGroup = GetDlgItem (hDlg, IDC_ADVANCED_GROUP);
166
167    RECT rWindow;
168    RECT rClient;
169    RECT rGroup;
170
171    GetWindowRect (hDlg, &rWindow);
172    GetClientRect (hDlg, &rClient);
173    GetRectInParent (hGroup, &rGroup);
174
175    if (!IsWindowEnabled (GetDlgItem (hDlg, IDC_SALVAGE_TEMPDIR)))
176       {
177       EnableWindow (GetDlgItem (hDlg, IDC_SALVAGE_TEMPDIR), TRUE);
178       EnableWindow (GetDlgItem (hDlg, IDC_SALVAGE_SIMUL), TRUE);
179       Server_Salvage_OnSimultaneous (hDlg);
180       EnableWindow (GetDlgItem (hDlg, IDC_SALVAGE_READONLY), TRUE);
181       EnableWindow (GetDlgItem (hDlg, IDC_SALVAGE_BLOCK), TRUE);
182       EnableWindow (GetDlgItem (hDlg, IDC_SALVAGE_FORCE), TRUE);
183       EnableWindow (GetDlgItem (hDlg, IDC_SALVAGE_FIXDIRS), TRUE);
184       EnableWindow (GetDlgItem (hDlg, IDC_SALVAGE_LOG_FILE), TRUE);
185       EnableWindow (GetDlgItem (hDlg, IDC_SALVAGE_LOG_INODES), TRUE);
186       EnableWindow (GetDlgItem (hDlg, IDC_SALVAGE_LOG_ROOT), TRUE);
187
188       SetWindowPos (hDlg, NULL,
189                     0, 0,
190                     cxRECT(rWindow),
191                     cyRECT(rWindow) + cyRECT(rGroup) + 14,
192                     SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE);
193
194       TCHAR szText[ cchRESOURCE ];
195       GetString (szText, IDS_ADVANCEDIN_BUTTON);
196       SetDlgItemText (hDlg, IDC_ADVANCED, szText);
197       }
198    else // open now?
199       {
200       SetWindowPos (hDlg, NULL,
201                     0, 0,
202                     cxRECT(rWindow),
203                     cyRECT(rWindow) - cyRECT(rGroup) - 14,
204                     SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE);
205
206       TCHAR szText[ cchRESOURCE ];
207       GetString (szText, IDS_ADVANCEDOUT_BUTTON);
208       SetDlgItemText (hDlg, IDC_ADVANCED, szText);
209
210       EnableWindow (GetDlgItem (hDlg, IDC_SALVAGE_TEMPDIR), FALSE);
211       EnableWindow (GetDlgItem (hDlg, IDC_SALVAGE_SIMUL), FALSE);
212       EnableWindow (GetDlgItem (hDlg, IDC_SALVAGE_NUM), FALSE);
213       EnableWindow (GetDlgItem (hDlg, IDC_SALVAGE_READONLY), FALSE);
214       EnableWindow (GetDlgItem (hDlg, IDC_SALVAGE_BLOCK), FALSE);
215       EnableWindow (GetDlgItem (hDlg, IDC_SALVAGE_FORCE), FALSE);
216       EnableWindow (GetDlgItem (hDlg, IDC_SALVAGE_FIXDIRS), FALSE);
217       EnableWindow (GetDlgItem (hDlg, IDC_SALVAGE_LOG_FILE), FALSE);
218       EnableWindow (GetDlgItem (hDlg, IDC_SALVAGE_LOG_INODES), FALSE);
219       EnableWindow (GetDlgItem (hDlg, IDC_SALVAGE_LOG_ROOT), FALSE);
220       }
221 }
222
223
224 void Server_Salvage_OnInitDialog (HWND hDlg, LPIDENT lpi)
225 {
226    CheckDlgButton (hDlg, IDC_AGGREGATE_ALL, (lpi->fIsServer()) ? TRUE : FALSE);
227    CheckDlgButton (hDlg, IDC_FILESET_ALL,  (lpi->fIsFileset()) ? FALSE : TRUE);
228
229    EnableWindow (GetDlgItem (hDlg, IDC_SERVER), FALSE);
230    EnableWindow (GetDlgItem (hDlg, IDC_AGGREGATE), FALSE);
231    EnableWindow (GetDlgItem (hDlg, IDC_AGGREGATE_ALL), FALSE);
232    EnableWindow (GetDlgItem (hDlg, IDC_FILESET), FALSE);
233    EnableWindow (GetDlgItem (hDlg, IDC_FILESET_ALL), FALSE);
234    EnableWindow (GetDlgItem (hDlg, IDOK), FALSE);
235
236    LPSVR_ENUM_TO_COMBOBOX_PACKET lpp = New (SVR_ENUM_TO_COMBOBOX_PACKET);
237    memset (lpp, 0x00, sizeof(SVR_ENUM_TO_COMBOBOX_PACKET));
238    lpp->hCombo = GetDlgItem (hDlg, IDC_SERVER);
239    lpp->lpiSelect = lpi->GetServer();
240    StartTask (taskSVR_ENUM_TO_COMBOBOX, hDlg, lpp);
241
242    CheckDlgButton (hDlg, IDC_SALVAGE_SIMUL, TRUE);
243    CreateSpinner (GetDlgItem(hDlg,IDC_SALVAGE_NUM), 10, FALSE, 2, 4, 12);
244 }
245
246
247 void Server_Salvage_OnServer (HWND hDlg, LPIDENT lpi)
248 {
249    LPIDENT lpiServer;
250    if ((lpiServer = (LPIDENT)CB_GetSelectedData (GetDlgItem (hDlg, IDC_SERVER))) != NULL)
251       {
252       LPAGG_ENUM_TO_COMBOBOX_PACKET lpp = New (AGG_ENUM_TO_COMBOBOX_PACKET);
253       memset (lpp, 0x00, sizeof(AGG_ENUM_TO_COMBOBOX_PACKET));
254       lpp->hCombo = GetDlgItem (hDlg, IDC_AGGREGATE);
255       lpp->lpiServer = lpiServer;
256       lpp->lpiSelect = (lpi && (!lpi->fIsCell()) && (!lpi->fIsServer()) && (lpiServer == lpi->GetServer())) ? (lpi->GetAggregate()) : NULL;
257       StartTask (taskAGG_ENUM_TO_COMBOBOX, hDlg, lpp);
258       }
259 }
260
261
262 void Server_Salvage_OnAggregate (HWND hDlg, LPIDENT lpi)
263 {
264    LPIDENT lpiServer;
265    if ((lpiServer = (LPIDENT)CB_GetSelectedData (GetDlgItem (hDlg, IDC_SERVER))) != NULL)
266       {
267       LPIDENT lpiAggregate;
268       if ((lpiAggregate = (LPIDENT)CB_GetSelectedData (GetDlgItem (hDlg, IDC_AGGREGATE))) != NULL)
269          {
270          LPSET_ENUM_TO_COMBOBOX_PACKET lpp = New (SET_ENUM_TO_COMBOBOX_PACKET);
271          memset (lpp, 0x00, sizeof(SET_ENUM_TO_COMBOBOX_PACKET));
272          lpp->hCombo = GetDlgItem (hDlg, IDC_FILESET);
273          lpp->lpiServer = lpiServer;
274          lpp->lpiAggregate = lpiAggregate;
275          lpp->lpiSelect = ((lpiServer == lpi) && (lpi->fIsFileset())) ? (lpi->GetFileset()) : NULL;
276          StartTask (taskSET_ENUM_TO_COMBOBOX, hDlg, lpp);
277          }
278       }
279 }
280
281
282 void Server_Salvage_OnAllAggregates (HWND hDlg)
283 {
284    BOOL fAllAggs = IsDlgButtonChecked (hDlg, IDC_AGGREGATE_ALL);
285    BOOL fAllSets = IsDlgButtonChecked (hDlg, IDC_FILESET_ALL);
286
287    if (fAllAggs)
288       {
289       CheckDlgButton (hDlg, IDC_FILESET_ALL, TRUE);
290       EnableWindow (GetDlgItem (hDlg, IDC_AGGREGATE), FALSE);
291       EnableWindow (GetDlgItem (hDlg, IDC_FILESET), FALSE);
292       EnableWindow (GetDlgItem (hDlg, IDC_FILESET_ALL), FALSE);
293       }
294    else
295       {
296       EnableWindow (GetDlgItem (hDlg, IDC_AGGREGATE), TRUE);
297       EnableWindow (GetDlgItem (hDlg, IDC_FILESET_ALL), TRUE);
298       EnableWindow (GetDlgItem (hDlg, IDC_FILESET), !fAllSets);
299       }
300 }
301
302
303 void Server_Salvage_OnAllFilesets (HWND hDlg)
304 {
305    BOOL fAllSets = IsDlgButtonChecked (hDlg, IDC_FILESET_ALL);
306    EnableWindow (GetDlgItem (hDlg, IDC_FILESET), !fAllSets);
307 }
308
309
310 void Server_Salvage_OnSimultaneous (HWND hDlg)
311 {
312    BOOL fSimul = IsDlgButtonChecked (hDlg, IDC_SALVAGE_SIMUL);
313    EnableWindow (GetDlgItem (hDlg, IDC_SALVAGE_NUM), fSimul);
314 }
315
316
317 void Server_Salvage_OnOK (HWND hDlg)
318 {
319    // Prepare a taskSVR_SALVAGE packet
320    //
321    LPSVR_SALVAGE_PARAMS lpp = New (SVR_SALVAGE_PARAMS);
322    memset (lpp, 0x00, sizeof(SVR_SALVAGE_PARAMS));
323    GetDlgItemText (hDlg, IDC_SALVAGE_TEMPDIR, lpp->szTempDir, MAX_PATH);
324    GetDlgItemText (hDlg, IDC_SALVAGE_LOG_FILE, lpp->szLogFile, MAX_PATH);
325    lpp->fForce = IsDlgButtonChecked (hDlg, IDC_SALVAGE_FORCE);
326    lpp->fReadonly = IsDlgButtonChecked (hDlg, IDC_SALVAGE_READONLY);
327    lpp->fLogInodes = IsDlgButtonChecked (hDlg, IDC_SALVAGE_LOG_INODES);
328    lpp->fLogRootInodes = IsDlgButtonChecked (hDlg, IDC_SALVAGE_LOG_ROOT);
329    lpp->fRebuildDirs = IsDlgButtonChecked (hDlg, IDC_SALVAGE_FIXDIRS);
330    lpp->fReadBlocks = IsDlgButtonChecked (hDlg, IDC_SALVAGE_BLOCK);
331    if (IsDlgButtonChecked (hDlg, IDC_SALVAGE_SIMUL))
332       lpp->nProcesses = (int)SP_GetPos (GetDlgItem (hDlg, IDC_SALVAGE_NUM));
333
334    lpp->lpiSalvage = NULL;
335    if (!IsDlgButtonChecked (hDlg, IDC_FILESET_ALL))
336       lpp->lpiSalvage = (LPIDENT)CB_GetSelectedData (GetDlgItem (hDlg, IDC_FILESET));
337    if (!lpp->lpiSalvage && !IsDlgButtonChecked (hDlg, IDC_AGGREGATE_ALL))
338       lpp->lpiSalvage = (LPIDENT)CB_GetSelectedData (GetDlgItem (hDlg, IDC_AGGREGATE));
339    if (!lpp->lpiSalvage) // salvage the whole server
340       lpp->lpiSalvage = (LPIDENT)CB_GetSelectedData (GetDlgItem (hDlg, IDC_SERVER));
341    if (!lpp->lpiSalvage)
342       Delete (lpp);
343    else
344       {
345       // Create (but don't show) a results dialog for this operation.
346       //
347       HWND hResults = ModelessDialogParam (IDD_SVR_SALVAGE_RESULTS, NULL, (DLGPROC)Server_Salvage_Results_DlgProc, (LPARAM)(lpp->lpiSalvage));
348       AfsAppLib_RegisterModelessDialog (hDlg);
349
350       // Fire up the background task; when it finishes, have the task scheduler
351       // send the result packet to that results dialog.
352       //
353       StartTask (taskSVR_SALVAGE, hResults, lpp);
354       }
355 }
356
357
358 void Server_Salvage_OnEndTask_EnumServers (HWND hDlg, LPIDENT lpi, LPTASKPACKET ptp)
359 {
360    // We'll only fill the Servers list once, and that during initialization.
361    // When the filling completes, find out what server is currently selected
362    // (it should already be the one the user chose earlier), and fill the
363    // aggregates list for it. We won't enable anything yet.
364    //
365    LPIDENT lpiServer;
366    if ((lpiServer = (LPIDENT)CB_GetSelectedData (GetDlgItem (hDlg, IDC_SERVER))) != NULL)
367       {
368       LPAGG_ENUM_TO_COMBOBOX_PACKET lpp = New (AGG_ENUM_TO_COMBOBOX_PACKET);
369       memset (lpp, 0x00, sizeof(AGG_ENUM_TO_COMBOBOX_PACKET));
370       lpp->hCombo = GetDlgItem (hDlg, IDC_AGGREGATE);
371       lpp->lpiServer = lpiServer;
372       lpp->lpiSelect = (lpi && (!lpi->fIsCell()) && (!lpi->fIsServer()) && (lpiServer == lpi->GetServer())) ? (lpi->GetAggregate()) : NULL;
373       StartTask (taskAGG_ENUM_TO_COMBOBOX, hDlg, lpp);
374       }
375 }
376
377
378 void Server_Salvage_OnEndTask_EnumAggregates (HWND hDlg, LPIDENT lpi, LPTASKPACKET ptp)
379 {
380    // We'll refill the Aggregates list any time the user selected a new server;
381    // and whenever it gets filled, we must next fill the filesets list.
382    //
383    LPIDENT lpiServer;
384    if ((lpiServer = (LPIDENT)CB_GetSelectedData (GetDlgItem (hDlg, IDC_SERVER))) != NULL)
385       {
386       LPIDENT lpiAggregate;
387       if ((lpiAggregate = (LPIDENT)CB_GetSelectedData (GetDlgItem (hDlg, IDC_AGGREGATE))) != NULL)
388          {
389          LPSET_ENUM_TO_COMBOBOX_PACKET lpp = New (SET_ENUM_TO_COMBOBOX_PACKET);
390          memset (lpp, 0x00, sizeof(SET_ENUM_TO_COMBOBOX_PACKET));
391          lpp->hCombo = GetDlgItem (hDlg, IDC_FILESET);
392          lpp->lpiServer = lpiServer;
393          lpp->lpiAggregate = lpiAggregate;
394          lpp->lpiSelect = ((lpiServer == lpi->GetServer()) && (lpi->fIsFileset())) ? (lpi) : NULL;
395          StartTask (taskSET_ENUM_TO_COMBOBOX, hDlg, lpp);
396          }
397       }
398 }
399
400
401 void Server_Salvage_OnEndTask_EnumFilesets (HWND hDlg, LPIDENT lpi, LPTASKPACKET ptp)
402 {
403    // The filesets list is finished; at this point, the user is free to go
404    // selecting any other server/aggregate/fileset; the OK button should also
405    // get enabled.
406    //
407    EnableWindow (GetDlgItem (hDlg, IDOK), TRUE);
408    EnableWindow (GetDlgItem (hDlg, IDC_SERVER), TRUE);
409    EnableWindow (GetDlgItem (hDlg, IDC_AGGREGATE_ALL), TRUE);
410
411    Server_Salvage_OnAllAggregates (hDlg);
412 }
413
414
415 BOOL CALLBACK Server_Salvage_Results_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp)
416 {
417    if (AfsAppLib_HandleHelp (IDD_SVR_SALVAGE_RESULTS, hDlg, msg, wp, lp))
418       return TRUE;
419
420    if (msg == WM_INITDIALOG)
421       SetWindowLongPtr (hDlg, DWLP_USER, lp);
422
423    LPIDENT lpi;
424    if ((lpi = (LPIDENT)GetWindowLongPtr (hDlg, DWLP_USER)) != NULL)
425       {
426       switch (msg)
427          {
428          case WM_INITDIALOG:
429             RECT rWindow;
430             GetWindowRect (hDlg, &rWindow);
431             ResizeWindow (hDlg, awdSalvageResults, rwaMoveToHere, &rWindow);
432
433             Server_Salvage_Results_OnInitDialog (hDlg, lpi);
434             break;
435
436          case WM_SIZE:
437             // if (lp==0), we're minimizing--don't call ResizeWindow().
438             if (lp != 0)
439                ResizeWindow (hDlg, awdSalvageResults, rwaFixupGuts);
440             break;
441
442          case WM_ENDTASK:
443             LPTASKPACKET ptp;
444             if ((ptp = (LPTASKPACKET)lp) != NULL)
445                {
446                if (ptp->idTask == taskSVR_SALVAGE)
447                   Server_Salvage_OnEndTask_Salvage (hDlg, lpi, ptp);
448                FreeTaskPacket (ptp);
449                }
450             break;
451
452          case WM_COMMAND:
453             switch (LOWORD(wp))
454                {
455                case IDOK:
456                case IDCANCEL:
457                   DestroyWindow (hDlg);
458                   break;
459                }
460             break;
461
462          case WM_CTLCOLOREDIT:
463             if ((HWND)lp == GetDlgItem (hDlg, IDC_SALVAGE_DETAILS))
464                {
465                SetBkColor ((HDC)wp, GetSysColor (COLOR_WINDOW));
466                return CreateSolidBrush (GetSysColor (COLOR_WINDOW))?TRUE:FALSE;
467                }
468             break;
469          }
470       }
471    return FALSE;
472 }
473
474
475 void Server_Salvage_Results_OnInitDialog (HWND hDlg, LPIDENT lpiSalvage)
476 {
477    TCHAR szServer[ cchNAME ];
478    lpiSalvage->GetServerName (szServer);
479
480    TCHAR szAggregate[ cchNAME ];
481    if (!lpiSalvage->fIsServer())
482       lpiSalvage->GetAggregateName (szAggregate);
483
484    TCHAR szFileset[ cchNAME ];
485    if (lpiSalvage->fIsFileset())
486       lpiSalvage->GetFilesetName (szFileset);
487
488    LPTSTR pszTitle;
489    if (lpiSalvage->fIsServer())
490       pszTitle = FormatString (IDS_SALVAGE_SVR, TEXT("%s"), szServer);
491    else if (lpiSalvage->fIsAggregate())
492       pszTitle = FormatString (IDS_SALVAGE_AGG, TEXT("%s%s"), szServer, szAggregate);
493    else // (lpiSalvage->fIsFileset())
494       pszTitle = FormatString (IDS_SALVAGE_SET, TEXT("%s%s%s"), szServer, szAggregate, szFileset);
495    SetDlgItemText (hDlg, IDC_SALVAGE_TITLE, pszTitle);
496    FreeString (pszTitle);
497 }
498
499
500 void Server_Salvage_OnEndTask_Salvage (HWND hDlg, LPIDENT lpiSalvage, LPTASKPACKET ptp)
501 {
502    if (!ptp->rc)
503       {
504       ErrorDialog (ptp->status, IDS_ERROR_CANT_SALVAGE);
505       DestroyWindow (hDlg);
506       }
507    else
508       {
509       if (TASKDATA(ptp)->pszText1)
510          {
511          SetDlgItemText (hDlg, IDC_SALVAGE_DETAILS, TASKDATA(ptp)->pszText1);
512          }
513       else
514          {
515          TCHAR szServer[ cchNAME ];
516          lpiSalvage->GetServerName (szServer);
517          LPTSTR pszNoLog = FormatString (IDS_ERROR_CANT_READ_SALVAGE_LOG, TEXT("%s"), szServer);
518          SetDlgItemText (hDlg, IDC_SALVAGE_DETAILS, pszNoLog);
519          FreeString (pszNoLog);
520          }
521
522       ShowWindow (hDlg, SW_SHOW);
523       }
524 }
525