Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

568 lines
19 KiB

/*
+-------------------------------------------------------------------------+
| Status Dialog box routines - Used during Conversion |
+-------------------------------------------------------------------------+
| (c) Copyright 1993-1994 |
| Microsoft Corp. |
| All rights reserved |
| |
| Program : [StatBox.c] |
| Programmer : Arthur Hanson |
| Original Program Date : [Feb 08, 1994] |
| Last Update : [Feb 08, 1994] |
| |
| Version: 1.00 |
| |
| Description: |
| |
| History: |
| arth Feb 08, 1994 1.00 Original Version. |
| |
+-------------------------------------------------------------------------+
*/
#include "globals.h"
#include "convapi.h"
static TCHAR tmpStr[1024];
static TCHAR PanelTitle[80];
static HANDLE hStatus = NULL;
static HANDLE hPanel = NULL;
static BOOL DoCancel = FALSE;
/*+-------------------------------------------------------------------------+
| Routines for status dialog put up during conversion. |
+-------------------------------------------------------------------------+*/
/*+-------------------------------------------------------------------------+
| DrainPump()
+-------------------------------------------------------------------------+*/
void DrainPump() {
MSG msg;
while (PeekMessage(&msg, hStatus, 0, 0xfff, PM_REMOVE)) {
if ((IsDialogMessage(hStatus, &msg) == FALSE) &&
(IsDialogMessage(hPanel, &msg) == FALSE)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
} // DrainPump
/*+-------------------------------------------------------------------------+
| Status_CurConv()
+-------------------------------------------------------------------------+*/
// Current server pair being converted
void Status_CurConv(UINT Num) {
wsprintf(tmpStr, TEXT("%5u"), Num);
SendDlgItemMessage(hStatus, IDC_S_CUR_CONV, WM_SETTEXT, 0, (LPARAM) tmpStr);
SendMessage(hStatus, WM_PAINT, 0, 0L);
DrainPump();
} // Status_CurConv
/*+-------------------------------------------------------------------------+
| Status_TotConv()
+-------------------------------------------------------------------------+*/
// Total number of server pairs to convert
void Status_TotConv(UINT Num) {
wsprintf(tmpStr, TEXT("%5u"), Num);
SendDlgItemMessage(hStatus, IDC_S_TOT_CONV, WM_SETTEXT, 0, (LPARAM) tmpStr);
SendMessage(hStatus, WM_PAINT, 0, 0L);
DrainPump();
} // Status_TotConv
/*+-------------------------------------------------------------------------+
| Status_SrcServ()
+-------------------------------------------------------------------------+*/
// Current source server of server pair being converted
void Status_SrcServ(LPTSTR Server) {
wsprintf(tmpStr, TEXT("%-15s"), Server);
SendDlgItemMessage(hStatus, IDC_S_SRCSERV, WM_SETTEXT, 0, (LPARAM) tmpStr);
SendMessage(hStatus, WM_PAINT, 0, 0L);
DrainPump();
} // Status_SrcServ
/*+-------------------------------------------------------------------------+
| Status_DestServ()
+-------------------------------------------------------------------------+*/
// Current destination server of server pair being converted
void Status_DestServ(LPTSTR Server) {
wsprintf(tmpStr, TEXT("%-15s"), Server);
SendDlgItemMessage(hStatus, IDC_S_DESTSERV, WM_SETTEXT, 0, (LPARAM) tmpStr);
SendMessage(hStatus, WM_PAINT, 0, 0L);
DrainPump();
} // Status_DestServ
/*+-------------------------------------------------------------------------+
| Status_ConvTxt()
+-------------------------------------------------------------------------+*/
// Text describing what is being converted (Groups, Users Files)
void Status_ConvTxt(LPTSTR Text) {
wsprintf(tmpStr, TEXT("%-20s"), Text);
SendDlgItemMessage(hStatus, IDC_S_CONVTXT, WM_SETTEXT, 0, (LPARAM) tmpStr);
SendMessage(hStatus, WM_PAINT, 0, 0L);
DrainPump();
} // Status_ConvTxt
/*+-------------------------------------------------------------------------+
| Status_CurNum()
+-------------------------------------------------------------------------+*/
// Current item number being converted (current group # or User # or file #)...
void Status_CurNum(UINT Num) {
wsprintf(tmpStr, TEXT("%7s"), lToStr(Num));
SendDlgItemMessage(hStatus, IDC_S_CUR_NUM, WM_SETTEXT, 0, (LPARAM) tmpStr);
SendMessage(hStatus, WM_PAINT, 0, 0L);
DrainPump();
} // Status_CurNum
/*+-------------------------------------------------------------------------+
| Status_CurTot()
+-------------------------------------------------------------------------+*/
// Total items in set being converted (user, group, files...)
void Status_CurTot(UINT Num) {
wsprintf(tmpStr, TEXT("%7s"), lToStr(Num));
SendDlgItemMessage(hStatus, IDC_S_CUR_TOT, WM_SETTEXT, 0, (LPARAM) tmpStr);
SendMessage(hStatus, WM_PAINT, 0, 0L);
DrainPump();
} // Status_CurTot
/*+-------------------------------------------------------------------------+
| Status_ItemLabel()
+-------------------------------------------------------------------------+*/
// Label for set being converted ("Group:", "User:")
void Status_ItemLabel(LPTSTR Text, ...) {
va_list marker;
va_start(marker, Text);
wvsprintf(tmpStr, Text, marker);
SendDlgItemMessage(hStatus, IDC_S_ITEMLABEL, WM_SETTEXT, 0, (LPARAM) tmpStr);
SendMessage(hStatus, WM_PAINT, 0, 0L);
DrainPump();
va_end(marker);
} // Status_ItemLabel
/*+-------------------------------------------------------------------------+
| Status_Item()
+-------------------------------------------------------------------------+*/
// Name of current thing being converted (actual user or group name)
void Status_Item(LPTSTR Text) {
wsprintf(tmpStr, TEXT("%-15s"), Text);
SendDlgItemMessage(hStatus, IDC_S_STATUSITEM, WM_SETTEXT, 0, (LPARAM) tmpStr);
SendMessage(hStatus, WM_PAINT, 0, 0L);
DrainPump();
} // Status_Item
/*+-------------------------------------------------------------------------+
| Status_TotComplete()
+-------------------------------------------------------------------------+*/
// Total #server pairs converted so far
void Status_TotComplete(UINT Num) {
wsprintf(tmpStr, TEXT("%7s"), lToStr(Num));
SendDlgItemMessage(hStatus, IDC_S_TOT_COMP, WM_SETTEXT, 0, (LPARAM) tmpStr);
SendMessage(hStatus, WM_PAINT, 0, 0L);
DrainPump();
} // Status_TotComplete
/*+-------------------------------------------------------------------------+
| Status_TotGroups()
+-------------------------------------------------------------------------+*/
void Status_TotGroups(UINT Num) {
wsprintf(tmpStr, TEXT("%7s"), lToStr(Num));
SendDlgItemMessage(hStatus, IDC_S_TOT_GROUPS, WM_SETTEXT, 0, (LPARAM) tmpStr);
SendMessage(hStatus, WM_PAINT, 0, 0L);
DrainPump();
} // Status_TotGroup
/*+-------------------------------------------------------------------------+
| Status_TotUsers()
+-------------------------------------------------------------------------+*/
void Status_TotUsers(UINT Num) {
wsprintf(tmpStr, TEXT("%7s"), lToStr(Num));
SendDlgItemMessage(hStatus, IDC_S_TOT_USERS, WM_SETTEXT, 0, (LPARAM) tmpStr);
SendMessage(hStatus, WM_PAINT, 0, 0L);
DrainPump();
} // Status_TotUsers
/*+-------------------------------------------------------------------------+
| Status_TotFiles()
+-------------------------------------------------------------------------+*/
void Status_TotFiles(UINT Num) {
wsprintf(tmpStr, TEXT("%7s"), lToStr(Num));
SendDlgItemMessage(hStatus, IDC_S_TOT_FILES, WM_SETTEXT, 0, (LPARAM) tmpStr);
SendMessage(hStatus, WM_PAINT, 0, 0L);
DrainPump();
} // Status_TotFiles
/*+-------------------------------------------------------------------------+
| Status_TotErrors()
+-------------------------------------------------------------------------+*/
void Status_TotErrors(UINT Num) {
wsprintf(tmpStr, TEXT("%7s"), lToStr(Num));
SendDlgItemMessage(hStatus, IDC_S_TOT_ERRORS, WM_SETTEXT, 0, (LPARAM) tmpStr);
SendMessage(hStatus, WM_PAINT, 0, 0L);
DrainPump();
} // Status_TotErrors
/*+-------------------------------------------------------------------------+
| Status_BytesTxt()
+-------------------------------------------------------------------------+*/
void Status_BytesTxt(LPTSTR Text) {
wsprintf(tmpStr, TEXT("%-15s"), Text);
SendDlgItemMessage(hStatus, IDC_PANEL1, WM_SETTEXT, 0, (LPARAM) tmpStr);
SendMessage(hStatus, WM_PAINT, 0, 0L);
DrainPump();
} // Status_BytesTxt
/*+-------------------------------------------------------------------------+
| Status_Bytes()
+-------------------------------------------------------------------------+*/
void Status_Bytes(LPTSTR Text) {
wsprintf(tmpStr, TEXT("%s"), Text);
SendDlgItemMessage(hStatus, IDC_PANEL2, WM_SETTEXT, 0, (LPARAM) tmpStr);
SendMessage(hStatus, WM_PAINT, 0, 0L);
DrainPump();
} // Status_Bytes
/*+-------------------------------------------------------------------------+
| Status_TotBytes()
+-------------------------------------------------------------------------+*/
void Status_TotBytes(LPTSTR Text) {
wsprintf(tmpStr, TEXT("%s"), Text);
SendDlgItemMessage(hStatus, IDC_PANEL3, WM_SETTEXT, 0, (LPARAM) tmpStr);
SendMessage(hStatus, WM_PAINT, 0, 0L);
DrainPump();
} // Status_TotBytes
/*+-------------------------------------------------------------------------+
| Status_BytesSep()
+-------------------------------------------------------------------------+*/
void Status_BytesSep(LPTSTR Text) {
wsprintf(tmpStr, TEXT("%s"), Text);
SendDlgItemMessage(hStatus, IDC_PANEL4, WM_SETTEXT, 0, (LPARAM) tmpStr);
SendMessage(hStatus, WM_PAINT, 0, 0L);
DrainPump();
} // Status_BytesSep
/*+-------------------------------------------------------------------------+
| DlgStatus()
+-------------------------------------------------------------------------+*/
LRESULT CALLBACK DlgStatus(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) {
RECT rc;
switch (message) {
case WM_INITDIALOG:
// Center the dialog over the application window
CenterWindow (hDlg, GetWindow (hDlg, GW_OWNER));
return (TRUE);
case WM_SETFOCUS:
GetWindowRect(hDlg, &rc);
InvalidateRect(hDlg, &rc, FALSE);
SendMessage(hStatus, WM_PAINT, 0, 0L);
break;
}
return (FALSE); // Didn't process the message
lParam;
} // DlgStatus
/*+-------------------------------------------------------------------------+
| DoStatusDlg()
+-------------------------------------------------------------------------+*/
void DoStatusDlg(HWND hDlg) {
DLGPROC lpfnDlg;
lpfnDlg = MakeProcInstance((DLGPROC)DlgStatus, hInst);
hStatus = CreateDialog(hInst, TEXT("StatusDlg"), hDlg, lpfnDlg) ;
FreeProcInstance(lpfnDlg);
} // DoStatusDlg
/*+-------------------------------------------------------------------------+
| StatusDlgKill()
+-------------------------------------------------------------------------+*/
void StatusDlgKill() {
DestroyWindow(hStatus);
hStatus = NULL;
} // StatusDlgKill
/*+-------------------------------------------------------------------------+
| Information (Panel) Dialog Routines |
+-------------------------------------------------------------------------+*/
/*+-------------------------------------------------------------------------+
| Panel_Line()
+-------------------------------------------------------------------------+*/
void Panel_Line(int Line, LPTSTR szFormat, ...) {
va_list marker;
if (hPanel == NULL)
return;
va_start(marker, szFormat);
wvsprintf(tmpStr, szFormat, marker);
tmpStr[60] = TEXT('\0');
SendDlgItemMessage(hPanel, IDC_PANEL1 - 1 + Line, WM_SETTEXT, 0, (LPARAM) tmpStr);
SendMessage(hPanel, WM_PAINT, 0, 0L);
DrainPump();
va_end(marker);
} // Panel_ConvTxt
/*+-------------------------------------------------------------------------+
| Panel_Cancel()
+-------------------------------------------------------------------------+*/
BOOL Panel_Cancel() {
if ((hPanel == NULL) || !DoCancel)
return FALSE;
return TRUE;
} // Panel_Cancel
/*+-------------------------------------------------------------------------+
| DlgPanel()
+-------------------------------------------------------------------------+*/
LRESULT CALLBACK DlgPanel(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) {
int wmId, wmEvent;
RECT rc;
switch (message) {
case WM_INITDIALOG:
// Center the dialog over the application window
DoCancel = FALSE;
CenterWindow (hDlg, GetWindow (hDlg, GW_OWNER));
SendMessage(hDlg, WM_SETTEXT, (WPARAM) 0, (LPARAM) PanelTitle);
return (TRUE);
case WM_SETFOCUS:
GetWindowRect(hDlg, &rc);
InvalidateRect(hDlg, &rc, FALSE);
SendMessage(hPanel, WM_PAINT, 0, 0L);
break;
case WM_COMMAND:
wmId = LOWORD(wParam);
wmEvent = HIWORD(wParam);
switch (wmId) {
case IDCANCEL:
DoCancel = TRUE;
return (TRUE);
break;
}
break;
}
return (FALSE); // Didn't process the message
lParam;
} // DlgPanel
/*+-------------------------------------------------------------------------+
| PanelDlg_Do()
+-------------------------------------------------------------------------+*/
void PanelDlg_Do(HWND hDlg, LPTSTR Title) {
DLGPROC lpfnDlg;
lstrcpy(PanelTitle, Title);
lpfnDlg = MakeProcInstance((DLGPROC)DlgPanel, hInst);
hPanel = CreateDialog(hInst, TEXT("PanelDLG"), hDlg, lpfnDlg) ;
FreeProcInstance(lpfnDlg);
} // PanelDlg_Do
/*+-------------------------------------------------------------------------+
| PanelDlgKill()
+-------------------------------------------------------------------------+*/
void PanelDlgKill() {
if (hPanel == NULL)
return;
DestroyWindow(hPanel);
hPanel = NULL;
DoCancel = FALSE;
} // PanelDlgKill
/*+-------------------------------------------------------------------------+
| Name Error Dialog (User and Group) |
+-------------------------------------------------------------------------+*/
static TCHAR OldName[60];
static TCHAR NewName[60];
static LPTSTR DlgTitle;
static LPTSTR NameErrorProblem;
static ULONG RetType;
static ULONG MaxNameLen;
/*+-------------------------------------------------------------------------+
| NameErrorDlg()
|
+-------------------------------------------------------------------------+*/
LRESULT CALLBACK NameErrorDlg(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) {
int wmId, wmEvent;
switch (message) {
case WM_INITDIALOG:
// Center the dialog over the application window
CenterWindow (hDlg, GetWindow (hDlg, GW_OWNER));
// Init all the display fields
SendMessage(hDlg, WM_SETTEXT, (WPARAM) 0, (LPARAM) DlgTitle);
SendMessage(GetDlgItem(hDlg, IDC_OLDNAME), WM_SETTEXT, (WPARAM) 0, (LPARAM) OldName);
SendMessage(GetDlgItem(hDlg, IDC_NEWNAME), WM_SETTEXT, (WPARAM) 0, (LPARAM) NewName);
SendMessage(GetDlgItem(hDlg, IDC_PANEL1), WM_SETTEXT, (WPARAM) 0, (LPARAM) NameErrorProblem);
// limit the name length
PostMessage(GetDlgItem(hDlg, IDC_NEWNAME), EM_LIMITTEXT, (WPARAM) MaxNameLen, 0);
return (TRUE);
case WM_COMMAND:
wmId = LOWORD(wParam);
wmEvent = HIWORD(wParam);
switch (wmId) {
case IDABORT:
// This will cancel the conversion - but need to check with the user
// if this is what they really want to do
if (MessageBox(hDlg, Lids(IDS_E_15), Lids(IDS_E_16), MB_YESNO) == IDYES) {
RetType = (ULONG) IDABORT;
EndDialog(hDlg, 0);
}
return (TRUE);
break;
case IDRETRY:
* (WORD *)NewName = (WORD) MaxNameLen + 1;
SendMessage(GetDlgItem(hDlg, IDC_NEWNAME), EM_GETLINE, 0, (LPARAM) NewName);
RetType = (ULONG) IDRETRY;
EndDialog(hDlg, 0);
return (TRUE);
break;
case IDIGNORE:
RetType = (ULONG) IDCANCEL;
EndDialog(hDlg, 0);
return (TRUE);
break;
}
break;
}
return (FALSE); // Didn't process the message
lParam;
} // NameErrorDlg
/*+-------------------------------------------------------------------------+
| UserNameErrorDlg_Do()
|
+-------------------------------------------------------------------------+*/
ULONG UserNameErrorDlg_Do(LPTSTR Title, LPTSTR Problem, USER_BUFFER *User) {
DLGPROC lpfnDlg;
lstrcpy(OldName, User->Name);
lstrcpy(NewName, User->NewName);
MaxNameLen = MAX_USER_NAME_LEN;
DlgTitle = Title;
NameErrorProblem = Problem;
lpfnDlg = MakeProcInstance((DLGPROC) NameErrorDlg, hInst);
CursorNormal();
DialogBox(hInst, TEXT("NameError"), hStatus, lpfnDlg) ;
CursorHourGlass();
FreeProcInstance(lpfnDlg);
if (RetType == IDRETRY) {
User->err = 0;
lstrcpy(User->NewName, NewName);
// if the name is different then flag that it is a new name
if (lstrcmpi(User->NewName, User->Name))
User->IsNewName = TRUE;
}
return RetType;
} // UserNameErrorDlg_Do
/*+-------------------------------------------------------------------------+
| GroupNameErrorDlg_Do()
|
+-------------------------------------------------------------------------+*/
ULONG GroupNameErrorDlg_Do(LPTSTR Title, LPTSTR Problem, GROUP_BUFFER *Group) {
DLGPROC lpfnDlg;
lstrcpy(OldName, Group->Name);
lstrcpy(NewName, Group->NewName);
MaxNameLen = MAX_NT_GROUP_NAME_LEN;
DlgTitle = Title;
NameErrorProblem = Problem;
lpfnDlg = MakeProcInstance((DLGPROC) NameErrorDlg, hInst);
CursorNormal();
DialogBox(hInst, TEXT("NameError"), hStatus, lpfnDlg) ;
CursorHourGlass();
FreeProcInstance(lpfnDlg);
if (RetType == IDRETRY) {
Group->err = 0;
lstrcpy(Group->NewName, NewName);
// if the name is different then flag that it is a new name
if (lstrcmpi(Group->NewName, Group->Name))
Group->IsNewName = TRUE;
}
return RetType;
} // GroupNameErrorDlg_Do