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