ntmakefile-clean-20040401
[openafs.git] / src / WINNT / afssvrmgr / set_dump.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 "set_dump.h"
17 #include "columns.h"
18 #include "svr_window.h"
19 #include "display.h"
20
21
22 /*
23  * PROTOTYPES _________________________________________________________________
24  *
25  */
26
27 BOOL CALLBACK Filesets_Dump_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp);
28 void Filesets_Dump_OnInitDialog (HWND hDlg, LPSET_DUMP_PARAMS psdp);
29 void Filesets_Dump_OnSelect (HWND hDlg);
30 void Filesets_Dump_EnableOK (HWND hDlg);
31 void Filesets_Dump_OnOK (HWND hDlg, LPSET_DUMP_PARAMS psdp);
32 void Filesets_Dump_OnBrowse (HWND hDlg, LPSET_DUMP_PARAMS psdp);
33
34
35 /*
36  * ROUTINES ___________________________________________________________________
37  *
38  */
39
40 void Filesets_Dump (LPIDENT lpi)
41 {
42    LPSET_DUMP_PARAMS psdp = New (SET_DUMP_PARAMS);
43    memset (psdp, 0x00, sizeof(SET_DUMP_PARAMS));
44    psdp->lpi = lpi;
45
46    int rc = ModalDialogParam (IDD_SET_DUMP, NULL, (DLGPROC)Filesets_Dump_DlgProc, (LPARAM)psdp);
47
48    if (rc != IDOK)
49       {
50       Delete (psdp);
51       }
52    else
53       {
54       StartTask (taskSET_DUMP, NULL, psdp);
55       }
56 }
57
58
59 BOOL CALLBACK Filesets_Dump_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp)
60 {
61    if (AfsAppLib_HandleHelp (IDD_SET_DUMP, hDlg, msg, wp, lp))
62       return TRUE;
63
64    static LPSET_DUMP_PARAMS psdp = NULL;
65    if (msg == WM_INITDIALOG)
66       psdp = (LPSET_DUMP_PARAMS)lp;
67
68    if (psdp != NULL)
69       {
70       switch (msg)
71          {
72          case WM_INITDIALOG:
73             Filesets_Dump_OnInitDialog (hDlg, psdp);
74             break;
75
76          case WM_COMMAND:
77             switch (LOWORD(wp))
78                {
79                case IDOK:
80                   Filesets_Dump_OnOK (hDlg, psdp);
81                   EndDialog (hDlg, LOWORD(wp));
82                   break;
83
84                case IDCANCEL:
85                   EndDialog (hDlg, LOWORD(wp));
86                   break;
87
88                case IDC_DUMP_FULL:
89                case IDC_DUMP_LIMIT_TIME:
90                   Filesets_Dump_OnSelect (hDlg);
91                   break;
92
93                case IDC_DUMP_FILENAME:
94                   Filesets_Dump_EnableOK (hDlg);
95                   break;
96
97                case IDC_DUMP_BROWSE:
98                   Filesets_Dump_OnBrowse (hDlg, psdp);
99                   break;
100                }
101             break;
102
103          case WM_DESTROY:
104             psdp = NULL;
105             break;
106          }
107       }
108
109    return FALSE;
110 }
111
112
113 void Filesets_Dump_OnInitDialog (HWND hDlg, LPSET_DUMP_PARAMS psdp)
114 {
115    TCHAR szServer[ cchNAME ];
116    TCHAR szAggregate[ cchNAME ];
117    TCHAR szFileset[ cchNAME ];
118    psdp->lpi->GetServerName (szServer);
119    psdp->lpi->GetAggregateName (szAggregate);
120    psdp->lpi->GetFilesetName (szFileset);
121
122    TCHAR szText[ cchRESOURCE ];
123    GetDlgItemText (hDlg, IDC_DUMP_FULL, szText, cchRESOURCE);
124
125    LPTSTR pszText = FormatString (szText, TEXT("%s%s%s"), szServer, szAggregate, szFileset);
126    SetDlgItemText (hDlg, IDC_DUMP_FULL, pszText);
127    FreeString (pszText);
128
129    pszText = FormatString (IDS_SET_DUMP_NAME, TEXT("%s"), szFileset);
130    SetDlgItemText (hDlg, IDC_DUMP_FILENAME, pszText);
131    FreeString (pszText);
132
133    // Get the local system time
134    SYSTEMTIME st;
135    GetSystemTime (&st);
136    FILETIME ft;
137    SystemTimeToFileTime (&st, &ft);
138    FILETIME lft;
139    FileTimeToLocalFileTime (&ft, &lft);
140    FileTimeToSystemTime (&lft, &st);
141
142    DA_SetDate (GetDlgItem (hDlg, IDC_DUMP_DATE), &st);
143    TI_SetTime (GetDlgItem (hDlg, IDC_DUMP_TIME), &st);
144
145    CheckDlgButton (hDlg, IDC_DUMP_FULL, TRUE);
146    Filesets_Dump_OnSelect (hDlg);
147    Filesets_Dump_EnableOK (hDlg);
148 }
149
150
151 void Filesets_Dump_OnSelect (HWND hDlg)
152 {
153    BOOL fEnable;
154
155    fEnable = IsDlgButtonChecked (hDlg, IDC_DUMP_LIMIT_TIME);
156    EnableWindow (GetDlgItem (hDlg, IDC_DUMP_DATE), fEnable);
157    EnableWindow (GetDlgItem (hDlg, IDC_DUMP_TIME), fEnable);
158 }
159
160
161 void Filesets_Dump_EnableOK (HWND hDlg)
162 {
163    TCHAR szText[ MAX_PATH ];
164    GetDlgItemText (hDlg, IDC_DUMP_FILENAME, szText, MAX_PATH);
165
166    EnableWindow (GetDlgItem (hDlg, IDOK), (szText[0] == TEXT('\0')) ? FALSE : TRUE);
167 }
168
169
170 void Filesets_Dump_OnOK (HWND hDlg, LPSET_DUMP_PARAMS psdp)
171 {
172    GetDlgItemText (hDlg, IDC_DUMP_FILENAME, psdp->szFilename, MAX_PATH);
173
174    psdp->fDumpByDate = IsDlgButtonChecked (hDlg, IDC_DUMP_LIMIT_TIME);
175    memset (&psdp->stDump, 0x00, sizeof(SYSTEMTIME));
176    DA_GetDate (GetDlgItem (hDlg, IDC_DUMP_DATE), &psdp->stDump);
177    TI_GetTime (GetDlgItem (hDlg, IDC_DUMP_TIME), &psdp->stDump);
178 }
179
180
181 void Filesets_Dump_OnBrowse (HWND hDlg, LPSET_DUMP_PARAMS psdp)
182 {
183    TCHAR szFilter[ cchRESOURCE ];
184    GetString (szFilter, IDS_RESTORE_FILTER);
185    TCHAR chFilter = szFilter[ lstrlen(szFilter)-1 ];
186    for (LPTSTR pszFilter = szFilter;
187         (*pszFilter) && ((pszFilter = (LPTSTR)lstrchr (pszFilter, chFilter)) != NULL);
188         ++pszFilter)
189       {
190       *pszFilter = TEXT('\0');
191       }
192
193    TCHAR szFilename[ MAX_PATH ];
194    GetDlgItemText (hDlg, IDC_DUMP_FILENAME, szFilename, MAX_PATH);
195
196    OPENFILENAME sfn;
197    memset (&sfn, 0x00, sizeof(sfn));
198    sfn.lStructSize = sizeof(sfn);
199    sfn.hwndOwner = hDlg;
200    sfn.hInstance = THIS_HINST;
201    sfn.lpstrFilter = szFilter;
202    sfn.nFilterIndex = 1;
203    sfn.lpstrFile = szFilename;
204    sfn.nMaxFile = MAX_PATH;
205    sfn.Flags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT | OFN_PATHMUSTEXIST;
206    sfn.lpstrDefExt = TEXT("dmp");
207
208    if (GetSaveFileName (&sfn))
209       {
210       SetDlgItemText (hDlg, IDC_DUMP_FILENAME, szFilename);
211       Filesets_Dump_EnableOK (hDlg);
212       }
213 }
214