skyrope-mit-merge-hell-20040226
[openafs.git] / src / WINNT / afssvrmgr / svc_prop.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 "svc_prop.h"
17 #include "svc_general.h"
18 #include "svc_startstop.h"
19 #include "svc_viewlog.h"
20 #include "propcache.h"
21 #include "problems.h"
22
23
24
25 /*
26  * PROTOTYPES _________________________________________________________________
27  *
28  */
29
30 BOOL CALLBACK Services_General_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp);
31
32 void Services_General_OnInitDialog (HWND hDlg, LPIDENT lpi);
33 void Services_General_OnApply (HWND hDlg, LPIDENT lpi);
34 void Services_General_OnEndTask_InitDialog (HWND hDlg, LPTASKPACKET ptp);
35 void Services_General_OnEndTask_Apply (HWND hDlg, LPTASKPACKET ptp);
36
37 BOOL CALLBACK Services_BOS_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp);
38 void Services_BOS_OnInitDialog (HWND hDlg, LPIDENT lpi);
39 void Services_BOS_OnEnable (HWND hDlg, LPIDENT lpi);
40 void Services_BOS_OnApply (HWND hDlg, LPIDENT lpi);
41 void Services_BOS_OnEndTask_InitDialog (HWND hDlg, LPTASKPACKET ptp, LPIDENT lpi);
42
43
44 /*
45  * ROUTINES ___________________________________________________________________
46  *
47  */
48
49 BOOL PropSheet_AddBOSTab (LPPROPSHEET psh, LPIDENT lpiService)
50 {
51    TCHAR szSvcName[ cchNAME ];
52    lpiService->GetServiceName (szSvcName);
53
54    if (lstrcmp (szSvcName, TEXT("BOS")))
55       return TRUE;
56
57    return PropSheet_AddTab (psh, IDS_SVC_BOS_TAB, IDD_SVC_BOS, (DLGPROC)Services_BOS_DlgProc, (LPARAM)lpiService, TRUE);
58 }
59
60
61 void Services_ShowProperties (LPIDENT lpiService, size_t nAlerts)
62 {
63    HWND hCurrent;
64
65    if ((hCurrent = PropCache_Search (pcSVC_PROP, lpiService)) != NULL)
66       {
67       SetFocus (hCurrent);
68       }
69    else
70       {
71       TCHAR szSvrName[ cchNAME ];
72       TCHAR szSvcName[ cchNAME ];
73       lpiService->GetServerName (szSvrName);
74       lpiService->GetServiceName (szSvcName);
75       LPTSTR pszTitle = FormatString (IDS_SVC_PROP_TITLE, TEXT("%s%s"), szSvrName, szSvcName);
76
77       LPPROPSHEET psh = PropSheet_Create (pszTitle, FALSE);
78       psh->fMadeCaption = TRUE;
79
80       if (PropSheet_AddProblemsTab (psh, IDD_SVC_PROBLEMS, lpiService, nAlerts) &&
81           PropSheet_AddTab (psh, IDS_SVC_GENERAL_TAB, IDD_SVC_GENERAL, (DLGPROC)Services_General_DlgProc, (LPARAM)lpiService, TRUE) &&
82           PropSheet_AddBOSTab (psh, lpiService))
83          {
84          PropSheet_ShowModeless (psh);
85          }
86       }
87 }
88
89
90 BOOL CALLBACK Services_General_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp)
91 {
92    if (AfsAppLib_HandleHelp (IDD_SVC_GENERAL, hDlg, msg, wp, lp))
93       return TRUE;
94
95    if (msg == WM_INITDIALOG)
96       SetWindowLong (hDlg, DWL_USER, ((LPPROPSHEETPAGE)lp)->lParam);
97
98    LPIDENT lpi = (LPIDENT)GetWindowLong (hDlg, DWL_USER);
99
100    switch (msg)
101       {
102       case WM_INITDIALOG_SHEET:
103          PropCache_Add (pcSVC_PROP, (LPIDENT)lp, hDlg);
104          break;
105
106       case WM_DESTROY_SHEET:
107          PropCache_Delete (hDlg);
108          break;
109
110       case WM_INITDIALOG:
111          NotifyMe (WHEN_OBJECT_CHANGES, lpi, hDlg, 0);
112          Services_General_OnInitDialog (hDlg, lpi);
113          StartTask (taskSVC_PROP_INIT, hDlg, lpi);
114          break;
115
116       case WM_DESTROY:
117          DontNotifyMeEver (hDlg);
118          break;
119
120       case WM_NOTIFY_FROM_DISPATCH:
121          if (((LPNOTIFYSTRUCT)lp)->evt == evtRefreshStatusEnd)
122             {
123             if (((LPNOTIFYSTRUCT)lp)->Params.lpi1 == lpi)
124                {
125                StartTask (taskSVC_PROP_INIT, hDlg, lpi);
126                }
127             }
128          Delete ((LPNOTIFYSTRUCT)lp);
129          break;
130
131       case WM_ENDTASK:
132          LPTASKPACKET ptp;
133          if ((ptp = (LPTASKPACKET)lp) != NULL)
134             {
135             if (ptp->idTask == taskSVC_PROP_INIT)
136                Services_General_OnEndTask_InitDialog (hDlg, ptp);
137             else if (ptp->idTask == taskSVC_PROP_APPLY)
138                Services_General_OnEndTask_Apply (hDlg, ptp);
139             FreeTaskPacket (ptp);
140             }
141          break; 
142
143       case WM_COMMAND:
144          switch (LOWORD(wp))
145             {
146             case IDOK:
147             case IDCANCEL:
148                break;
149
150             case IDAPPLY:
151                Services_General_OnApply (hDlg, lpi);
152                break;
153
154             case IDC_SVC_WARNSTOP:
155                PropSheetChanged (hDlg);
156                break;
157
158             case IDC_SVC_START:
159                TCHAR szSvcName[ cchNAME ];
160                lpi->GetServiceName (szSvcName);
161                if (!lstrcmpi (szSvcName, TEXT("BOS")))
162                   Services_Restart (lpi);
163                else
164                   Services_Start (lpi);
165                break;
166
167             case IDC_SVC_STOP:
168                Services_Stop (lpi);
169                break;
170
171             case IDC_SVC_VIEWLOG:
172                Services_ShowServiceLog (lpi);
173                break;
174             }
175          break;
176       }
177
178    return FALSE;
179 }
180
181
182 void Services_General_OnInitDialog (HWND hDlg, LPIDENT lpi)
183 {
184    TCHAR szText[ cchRESOURCE ];
185    LPTSTR pszText;
186
187    TCHAR szSvrName[ cchNAME ];
188    TCHAR szSvcName[ cchNAME ];
189    lpi->GetServerName (szSvrName);
190    lpi->GetServiceName (szSvcName);
191
192    GetDlgItemText (hDlg, IDC_SVC_NAME, szText, cchRESOURCE);
193    pszText = FormatString (szText, TEXT("%s%s"), szSvrName, szSvcName);
194    SetDlgItemText (hDlg, IDC_SVC_NAME, pszText);
195    FreeString (pszText);
196
197    EnableWindow (GetDlgItem (hDlg, IDC_SVC_WARNSTOP), FALSE);
198    EnableWindow (GetDlgItem (hDlg, IDC_SVC_VIEWLOG), FALSE);
199    EnableWindow (GetDlgItem (hDlg, IDC_SVC_STOP),  FALSE);
200    EnableWindow (GetDlgItem (hDlg, IDC_SVC_START), FALSE);
201
202    if (!lstrcmpi (szSvcName, TEXT("BOS")))
203       {
204       RECT rStart;
205       RECT rStop;
206       GetRectInParent (GetDlgItem (hDlg, IDC_SVC_START), &rStart);
207       GetRectInParent (GetDlgItem (hDlg, IDC_SVC_STOP),  &rStop);
208       DestroyWindow (GetDlgItem (hDlg, IDC_SVC_STOP));
209       SetWindowPos (GetDlgItem (hDlg, IDC_SVC_START), NULL,
210                     0, 0, rStop.right-rStart.left, rStart.bottom-rStart.top,
211                     SWP_NOMOVE | SWP_NOACTIVATE | SWP_NOZORDER);
212       GetString (szText, IDS_SVC_RESTART_BUTTON);
213       SetDlgItemText (hDlg, IDC_SVC_START, szText);
214       }
215 }
216
217
218 void Services_General_OnEndTask_InitDialog (HWND hDlg, LPTASKPACKET ptp)
219 {
220    LPIDENT lpi = (LPIDENT)GetWindowLong (hDlg, DWL_USER);
221
222    TCHAR szUnknown[ cchRESOURCE ];
223    GetString (szUnknown, IDS_UNKNOWN);
224
225    if (!ptp->rc)
226       {
227       SetDlgItemText (hDlg, IDC_SVC_STARTDATE, szUnknown);
228       SetDlgItemText (hDlg, IDC_SVC_STOPDATE, szUnknown);
229       SetDlgItemText (hDlg, IDC_SVC_LASTERROR, szUnknown);
230       GetString (szUnknown, IDS_SERVICESTATUS_UNKNOWN);
231       SetDlgItemText (hDlg, IDC_SVC_STATUS, szUnknown);
232       SetDlgItemText (hDlg, IDC_SVC_PARAMS, szUnknown);
233       SetDlgItemText (hDlg, IDC_SVC_NOTIFIER, szUnknown);
234
235       TCHAR szSvrName[ cchNAME ];
236       TCHAR szSvcName[ cchNAME ];
237       lpi->GetServerName (szSvrName);
238       lpi->GetServiceName (szSvcName);
239       ErrorDialog (ptp->status, IDS_ERROR_REFRESH_SERVICE_STATUS, TEXT("%s%s"), szSvrName, szSvcName);
240       }
241    else
242       {
243       TCHAR szText[ cchRESOURCE ];
244
245       EnableWindow (GetDlgItem (hDlg, IDC_SVC_WARNSTOP), TRUE);
246       EnableWindow (GetDlgItem (hDlg, IDC_SVC_VIEWLOG), TRUE);
247       EnableWindow (GetDlgItem (hDlg, IDC_SVC_STOP),  TRUE);
248       EnableWindow (GetDlgItem (hDlg, IDC_SVC_START), TRUE);
249
250       if (TASKDATA(ptp)->cs.type == SERVICETYPE_FS)
251          GetString (szText, IDS_SERVICETYPE_FS_LONG);
252       else if (TASKDATA(ptp)->cs.type == SERVICETYPE_CRON)
253          GetString (szText, IDS_SERVICETYPE_CRON_LONG);
254       else // (TASKDATA(ptp)->cs.type == SERVICETYPE_SIMPLE)
255          GetString (szText, IDS_SERVICETYPE_SIMPLE_LONG);
256       SetDlgItemText (hDlg, IDC_SVC_TYPE, szText);
257
258       LPTSTR pszParams = CloneString (TASKDATA(ptp)->cs.szParams);
259       for (LPTSTR pch = pszParams; pch && *pch; ++pch)
260          {
261          if (*pch == TEXT('\r') || *pch == TEXT('\t') || *pch == TEXT('\n'))
262             *pch = TEXT(' ');
263          }
264       SetDlgItemText (hDlg, IDC_SVC_PARAMS, pszParams ? pszParams : TEXT(""));
265       FreeString (pszParams);
266
267       LPTSTR pszNotifier = CloneString (TASKDATA(ptp)->cs.szNotifier);
268       for (pch = pszNotifier; pch && *pch; ++pch)
269          {
270          if (*pch == TEXT('\r') || *pch == TEXT('\t') || *pch == TEXT('\n'))
271             *pch = TEXT(' ');
272          }
273       GetString (szText, IDS_SVC_NONOTIFIER);
274       SetDlgItemText (hDlg, IDC_SVC_NOTIFIER, (pszNotifier && *pszNotifier) ? pszNotifier : szText);
275       FreeString (pszNotifier);
276
277       if (!FormatTime (szText, TEXT("%s"), &TASKDATA(ptp)->cs.timeLastStart))
278          SetDlgItemText (hDlg, IDC_SVC_STARTDATE, szUnknown);
279       else
280          SetDlgItemText (hDlg, IDC_SVC_STARTDATE, szText);
281
282       if (!FormatTime (szText, TEXT("%s"), &TASKDATA(ptp)->cs.timeLastStop))
283          SetDlgItemText (hDlg, IDC_SVC_STOPDATE, szUnknown);
284       else
285          SetDlgItemText (hDlg, IDC_SVC_STOPDATE, szText);
286
287       if (!FormatTime (szText, TEXT("%s"), &TASKDATA(ptp)->cs.timeLastFail))
288          SetDlgItemText (hDlg, IDC_SVC_LASTERROR, szUnknown);
289       else
290          {
291          LPTSTR pszText = FormatString (IDS_SERVICE_LASTERRORDATE, TEXT("%s%ld"), szText, TASKDATA(ptp)->cs.dwErrLast);
292          SetDlgItemText (hDlg, IDC_SVC_LASTERROR, pszText);
293          FreeString (pszText);
294          }
295
296       if (TASKDATA(ptp)->cs.state == SERVICESTATE_RUNNING)
297          {
298          GetString (szText, IDS_SERVICESTATUS_RUNNING);
299          }
300       else if (TASKDATA(ptp)->cs.state == SERVICESTATE_STARTING)
301          {
302          EnableWindow (GetDlgItem (hDlg, IDC_SVC_STOP), FALSE);
303          EnableWindow (GetDlgItem (hDlg, IDC_SVC_START), FALSE);
304          GetString (szText, IDS_SERVICESTATUS_STARTING);
305          }
306       else if (TASKDATA(ptp)->cs.state == SERVICESTATE_STOPPING)
307          {
308          EnableWindow (GetDlgItem (hDlg, IDC_SVC_STOP), FALSE);
309          EnableWindow (GetDlgItem (hDlg, IDC_SVC_START), FALSE);
310          GetString (szText, IDS_SERVICESTATUS_STOPPING);
311          }
312       else // (TASKDATA(ptp)->cs.state == SERVICESTATE_STOPPED)
313          {
314          GetString (szText, IDS_SERVICESTATUS_STOPPED);
315          }
316       SetDlgItemText (hDlg, IDC_SVC_STATUS, szText);
317
318       CheckDlgButton (hDlg, IDC_SVC_WARNSTOP, (TASKDATA(ptp)->lpsp->fWarnSvcStop && TASKDATA(ptp)->lpcp->fWarnSvcStop));
319       }
320 }
321
322
323 void Services_General_OnApply (HWND hDlg, LPIDENT lpi)
324 {
325    LPSVC_PROP_APPLY_PACKET lpp;
326    if ((lpp = New (SVC_PROP_APPLY_PACKET)) != NULL)
327       {
328       lpp->lpi = lpi;
329       lpp->fIDC_SVC_WARNSTOP = IsDlgButtonChecked (hDlg, IDC_SVC_WARNSTOP);
330
331       StartTask (taskSVC_PROP_APPLY, hDlg, lpp);
332       }
333 }
334
335
336 void Services_General_OnEndTask_Apply (HWND hDlg, LPTASKPACKET ptp)
337 {
338    if (!ptp->rc)
339       {
340       LPIDENT lpi = (LPIDENT)GetWindowLong (hDlg, DWL_USER);
341
342       TCHAR szSvrName[ cchNAME ];
343       TCHAR szSvcName[ cchNAME ];
344       lpi->GetServerName (szSvrName);
345       lpi->GetServiceName (szSvcName);
346       ErrorDialog (ptp->status, IDS_ERROR_CHANGE_SERVICE_STATUS, TEXT("%s%s"), szSvrName, szSvcName);
347       }
348 }
349
350
351 BOOL CALLBACK Services_BOS_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp)
352 {
353    if (AfsAppLib_HandleHelp (IDD_SVC_BOS, hDlg, msg, wp, lp))
354       return TRUE;
355
356    if (msg == WM_INITDIALOG)
357       SetWindowLong (hDlg, DWL_USER, ((LPPROPSHEETPAGE)lp)->lParam);
358
359    LPIDENT lpi = (LPIDENT)GetWindowLong (hDlg, DWL_USER);
360
361    switch (msg)
362       {
363       case WM_INITDIALOG:
364          Services_BOS_OnInitDialog (hDlg, lpi);
365          break;
366
367       case WM_ENDTASK:
368          LPTASKPACKET ptp;
369          if ((ptp = (LPTASKPACKET)lp) != NULL)
370             {
371             if (ptp->idTask == taskSVC_GETRESTARTTIMES)
372                Services_BOS_OnEndTask_InitDialog (hDlg, ptp, lpi);
373             FreeTaskPacket (ptp);
374             }
375          break; 
376
377       case WM_COMMAND:
378          switch (LOWORD(wp))
379             {
380             case IDOK:
381             case IDCANCEL:
382                break;
383
384             case IDAPPLY:
385                Services_BOS_OnApply (hDlg, lpi);
386                break;
387
388             case IDC_BOS_GENRES:
389             case IDC_BOS_BINRES:
390                Services_BOS_OnEnable (hDlg, lpi);
391                PropSheetChanged (hDlg);
392                break;
393
394             case IDC_BOS_GENRES_DATE:
395             case IDC_BOS_GENRES_TIME:
396             case IDC_BOS_BINRES_DATE:
397             case IDC_BOS_BINRES_TIME:
398                PropSheetChanged (hDlg);
399                break;
400             }
401          break;
402       }
403
404    return FALSE;
405 }
406
407
408 void Services_BOS_OnInitDialog (HWND hDlg, LPIDENT lpi)
409 {
410    TCHAR szText[ cchRESOURCE ];
411    LPTSTR pszText;
412
413    TCHAR szSvrName[ cchNAME ];
414    TCHAR szSvcName[ cchNAME ];
415    lpi->GetServerName (szSvrName);
416    lpi->GetServiceName (szSvcName);
417
418    GetDlgItemText (hDlg, IDC_SVC_NAME, szText, cchRESOURCE);
419    pszText = FormatString (szText, TEXT("%s%s"), szSvrName, szSvcName);
420    SetDlgItemText (hDlg, IDC_SVC_NAME, pszText);
421    FreeString (pszText);
422
423    HWND hDay = GetDlgItem (hDlg, IDC_BOS_GENRES_DATE);
424    CB_StartChange (hDay, TRUE);
425    CB_AddItem (hDay, IDS_RECUR_DAILY,    (WORD)-1);
426    CB_AddItem (hDay, IDS_RECUR_SUNDAY,    0);
427    CB_AddItem (hDay, IDS_RECUR_MONDAY,    1);
428    CB_AddItem (hDay, IDS_RECUR_TUESDAY,   2);
429    CB_AddItem (hDay, IDS_RECUR_WEDNESDAY, 3);
430    CB_AddItem (hDay, IDS_RECUR_THURSDAY,  4);
431    CB_AddItem (hDay, IDS_RECUR_FRIDAY,    5);
432    CB_AddItem (hDay, IDS_RECUR_SATURDAY,  6);
433    CB_EndChange (hDay, (WORD)-1);
434
435    hDay = GetDlgItem (hDlg, IDC_BOS_BINRES_DATE);
436    CB_StartChange (hDay, TRUE);
437    CB_AddItem (hDay, IDS_RECUR_DAILY,    (WORD)-1);
438    CB_AddItem (hDay, IDS_RECUR_SUNDAY,    0);
439    CB_AddItem (hDay, IDS_RECUR_MONDAY,    1);
440    CB_AddItem (hDay, IDS_RECUR_TUESDAY,   2);
441    CB_AddItem (hDay, IDS_RECUR_WEDNESDAY, 3);
442    CB_AddItem (hDay, IDS_RECUR_THURSDAY,  4);
443    CB_AddItem (hDay, IDS_RECUR_FRIDAY,    5);
444    CB_AddItem (hDay, IDS_RECUR_SATURDAY,  6);
445    CB_EndChange (hDay, (WORD)-1);
446
447    EnableWindow (GetDlgItem (hDlg, IDC_BOS_GENRES), FALSE);
448    EnableWindow (GetDlgItem (hDlg, IDC_BOS_BINRES), FALSE);
449    Services_BOS_OnEnable (hDlg, lpi);
450
451    LPSVC_RESTARTTIMES_PARAMS lpp = New (SVC_RESTARTTIMES_PARAMS);
452    memset (lpp, 0x00, sizeof(SVC_RESTARTTIMES_PARAMS));
453    lpp->lpi = lpi;
454    StartTask (taskSVC_GETRESTARTTIMES, hDlg, lpp);
455 }
456
457
458 void Services_BOS_OnEnable (HWND hDlg, LPIDENT lpi)
459 {
460    BOOL fEnable;
461
462    fEnable = TRUE;
463    if (!IsWindowEnabled (GetDlgItem (hDlg, IDC_BOS_GENRES)))
464       fEnable = FALSE;
465    else if (!IsDlgButtonChecked (hDlg, IDC_BOS_GENRES))
466       fEnable = FALSE;
467
468    EnableWindow (GetDlgItem (hDlg, IDC_BOS_GENRES_DESC1), fEnable);
469    EnableWindow (GetDlgItem (hDlg, IDC_BOS_GENRES_DATE),  fEnable);
470    EnableWindow (GetDlgItem (hDlg, IDC_BOS_GENRES_DESC2), fEnable);
471    EnableWindow (GetDlgItem (hDlg, IDC_BOS_GENRES_TIME),  fEnable);
472
473    fEnable = TRUE;
474    if (!IsWindowEnabled (GetDlgItem (hDlg, IDC_BOS_BINRES)))
475       fEnable = FALSE;
476    else if (!IsDlgButtonChecked (hDlg, IDC_BOS_BINRES))
477       fEnable = FALSE;
478
479    EnableWindow (GetDlgItem (hDlg, IDC_BOS_BINRES_DESC1), fEnable);
480    EnableWindow (GetDlgItem (hDlg, IDC_BOS_BINRES_DATE),  fEnable);
481    EnableWindow (GetDlgItem (hDlg, IDC_BOS_BINRES_DESC2), fEnable);
482    EnableWindow (GetDlgItem (hDlg, IDC_BOS_BINRES_TIME),  fEnable);
483 }
484
485
486 void Services_BOS_OnApply (HWND hDlg, LPIDENT lpi)
487 {
488    LPSVC_RESTARTTIMES_PARAMS lpp = New (SVC_RESTARTTIMES_PARAMS);
489    lpp->lpi = lpi;
490
491    lpp->fGeneral = IsDlgButtonChecked (hDlg, IDC_BOS_GENRES);
492    TI_GetTime (GetDlgItem (hDlg, IDC_BOS_GENRES_TIME), &lpp->stGeneral);
493    lpp->stGeneral.wDayOfWeek = (WORD)CB_GetSelectedData (GetDlgItem (hDlg, IDC_BOS_GENRES_DATE));
494
495    lpp->fNewBinary = IsDlgButtonChecked (hDlg, IDC_BOS_BINRES);
496    TI_GetTime (GetDlgItem (hDlg, IDC_BOS_BINRES_TIME), &lpp->stNewBinary);
497    lpp->stNewBinary.wDayOfWeek = (WORD)CB_GetSelectedData (GetDlgItem (hDlg, IDC_BOS_BINRES_DATE));
498
499    StartTask (taskSVC_SETRESTARTTIMES, NULL, lpp);
500 }
501
502
503 void Services_BOS_OnEndTask_InitDialog (HWND hDlg, LPTASKPACKET ptp, LPIDENT lpi)
504 {
505    LPSVC_RESTARTTIMES_PARAMS lpp = (LPSVC_RESTARTTIMES_PARAMS)(ptp->lpUser);
506
507    if (ptp->rc)
508       {
509       EnableWindow (GetDlgItem (hDlg, IDC_BOS_GENRES), TRUE);
510       EnableWindow (GetDlgItem (hDlg, IDC_BOS_BINRES), TRUE);
511
512       CheckDlgButton (hDlg, IDC_BOS_GENRES, lpp->fGeneral);
513       if (!lpp->fGeneral)
514          {
515          lpp->stGeneral.wDay = 0;
516          lpp->stGeneral.wHour = 5;
517          lpp->stGeneral.wMinute = 0;
518          }
519
520       TI_SetTime (GetDlgItem (hDlg, IDC_BOS_GENRES_TIME), &lpp->stGeneral);
521       CB_SetSelectedByData (GetDlgItem (hDlg, IDC_BOS_GENRES_DATE), (LPARAM)lpp->stGeneral.wDayOfWeek);
522
523       CheckDlgButton (hDlg, IDC_BOS_BINRES, lpp->fNewBinary);
524       if (!lpp->fNewBinary)
525          {
526          lpp->stNewBinary.wDay = 0;
527          lpp->stNewBinary.wHour = 5;
528          lpp->stNewBinary.wMinute = 0;
529          }
530
531       TI_SetTime (GetDlgItem (hDlg, IDC_BOS_BINRES_TIME), &lpp->stNewBinary);
532       CB_SetSelectedByData (GetDlgItem (hDlg, IDC_BOS_BINRES_DATE), (LPARAM)lpp->stNewBinary.wDayOfWeek);
533
534       Services_BOS_OnEnable (hDlg, lpi);
535       }
536
537    Delete (lpp);
538 }
539