diff options
Diffstat (limited to '')
-rw-r--r-- | private/nw/convert/nwconv/nwconv.c | 1509 |
1 files changed, 1509 insertions, 0 deletions
diff --git a/private/nw/convert/nwconv/nwconv.c b/private/nw/convert/nwconv/nwconv.c new file mode 100644 index 000000000..a0dbcbbaa --- /dev/null +++ b/private/nw/convert/nwconv/nwconv.c @@ -0,0 +1,1509 @@ +/*++ + +Copyright (c) 1993-1995 Microsoft Corporation + +Module Name: + + nwconv.c + +Abstract: + + +Author: + + Arthur Hanson (arth) 16-Jun-1994 + +Revision History: + +--*/ + + +#include "globals.h" + +#include "nwconv.h" +#include "convapi.h" +#include "userdlg.h" +#include "filedlg.h" +#include "transfer.h" +#include "columnlb.h" +#include "ntnetapi.h" +#include "nwnetapi.h" + +HINSTANCE hInst; // current instance + +TCHAR szAppName[] = TEXT("NWConv"); // The name of this application +TCHAR ProgPath[MAX_PATH + 1]; + +TCHAR NT_PROVIDER[60]; +TCHAR NW_PROVIDER[60]; +TCHAR NW_SERVICE_NAME[80]; + +#define DEF_CONFIG_FILE TEXT("NWConv.DAT") + +// version as x.yz expressed as xyz (no decimal point). +#define CONFIG_VER 026 +#define CHECK_CONST 0xA5A56572 + +SOURCE_SERVER_BUFFER *lpSourceServer; +DEST_SERVER_BUFFER *lpDestServer; + +BOOL TrialConversion = TRUE; +BOOL IsNetWareBrowse; +BOOL FirstTime = TRUE; +HICON MyIcon; +UINT NumServerPairs = 0; +HWND hDlgMain; + +HHOOK hhkMsgFilter = NULL; +UINT wHelpMessage; + +UINT uMenuID; +HMENU hMenu; +UINT uMenuFlags; + +#ifdef DEBUG +int DebugFlag = 0; +#endif + +CONVERT_LIST *ConvertListStart = NULL; +CONVERT_LIST *ConvertListEnd = NULL; +CONVERT_LIST *CurrentConvertList = NULL; +int TotalConvertCount = 0; + +SOURCE_SERVER_BUFFER *SServListStart = NULL; +SOURCE_SERVER_BUFFER *SServListEnd = NULL; +SOURCE_SERVER_BUFFER *SServListCurrent = NULL; +DEST_SERVER_BUFFER *DServListStart = NULL; +DEST_SERVER_BUFFER *DServListEnd = NULL; +DEST_SERVER_BUFFER *DServListCurrent = NULL; +DOMAIN_BUFFER *DomainListStart = NULL; +DOMAIN_BUFFER *DomainListEnd = NULL; + +BOOL SuccessfulConversion = FALSE; +BOOL ViewLogs = FALSE; +BOOL InConversion = FALSE; + +/*+-------------------------------------------------------------------------+ + | Function Prototypes. | + +-------------------------------------------------------------------------+*/ +LRESULT CALLBACK DlgUsers(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam); +LRESULT CALLBACK DlgMoveIt(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam); +VOID AboutBox_Do(HWND hDlg); +VOID ToggleControls(HWND hDlg, BOOL Toggle); + + +///////////////////////////////////////////////////////////////////////// +VOID NTServInfoDlg_SwitchControls( + HWND hDlg, + BOOL Toggle + ) + +/*++ + +Routine Description: + + +Arguments: + + +Return Value: + + +--*/ + +{ + HWND hCtrl; + + // The NW Controls + hCtrl = GetDlgItem(hDlg, IDC_T_VOLUMES); + ShowWindow(hCtrl, Toggle); + EnableWindow(hCtrl, Toggle); + + hCtrl = GetDlgItem(hDlg, IDC_LIST3); + ShowWindow(hCtrl, Toggle); + EnableWindow(hCtrl, Toggle); + + // The NT Controls + hCtrl = GetDlgItem(hDlg, IDC_LIST1); + ShowWindow(hCtrl, !Toggle); + EnableWindow(hCtrl, !Toggle); + + hCtrl = GetDlgItem(hDlg, IDC_LIST2); + ShowWindow(hCtrl, !Toggle); + EnableWindow(hCtrl, !Toggle); + + hCtrl = GetDlgItem(hDlg, IDC_T_DRIVES); + ShowWindow(hCtrl, !Toggle); + EnableWindow(hCtrl, !Toggle); + + hCtrl = GetDlgItem(hDlg, IDC_T_SHARES); + ShowWindow(hCtrl, !Toggle); + EnableWindow(hCtrl, !Toggle); + +} // NTServInfoDlg_SwitchControls + + +///////////////////////////////////////////////////////////////////////// +VOID +NTServInfoDlg_EnableNT( + HWND hDlg + ) + +/*++ + +Routine Description: + + +Arguments: + + +Return Value: + + +--*/ + +{ + TCHAR VerStr[TMP_STR_LEN_256]; + + SetDlgItemText(hDlg, IDC_TYPE, Lids(IDS_S_15)); + wsprintf(VerStr, TEXT("%lu.%lu"), CurrentConvertList->FileServ->VerMaj, CurrentConvertList->FileServ->VerMin); + SetDlgItemText(hDlg, IDC_VERSION, VerStr); + + NTServInfoDlg_SwitchControls(hDlg, FALSE); + +} // NTServInfoDlg_EnableNT + + +///////////////////////////////////////////////////////////////////////// +VOID +NTServInfoDlg_EnableNW( + HWND hDlg + ) + +/*++ + +Routine Description: + + +Arguments: + + +Return Value: + + +--*/ + +{ + TCHAR VerStr[TMP_STR_LEN_256]; + + SetDlgItemText(hDlg, IDC_TYPE, Lids(IDS_S_16)); + wsprintf(VerStr, TEXT("%u.%u"), CurrentConvertList->SourceServ->VerMaj, CurrentConvertList->SourceServ->VerMin); + SetDlgItemText(hDlg, IDC_VERSION, VerStr); + + NTServInfoDlg_SwitchControls(hDlg, TRUE); + +} // NTServInfoDlg_EnableNW + + +///////////////////////////////////////////////////////////////////////// +LRESULT CALLBACK +NTServInfoDlg( + HWND hDlg, + UINT message, + WPARAM wParam, + LPARAM lParam + ) + +/*++ + +Routine Description: + + +Arguments: + + +Return Value: + + +--*/ + +{ + static TCHAR AddLine[TMP_STR_LEN_256]; + HWND hCtrl; + DWORD dwData, dwIndex; + int wmId, wmEvent; + ULONG i; + DRIVE_LIST *DriveList; + SHARE_LIST *ShareList; + + switch (message) { + case WM_INITDIALOG: + // Center the dialog over the application window + CenterWindow (hDlg, GetWindow (hDlg, GW_OWNER)); + + // Add the servers to the combo-box and select the source server + hCtrl = GetDlgItem(hDlg, IDC_COMBO1); + dwIndex = SendMessage(hCtrl, CB_ADDSTRING, (WPARAM) 0, (LPARAM) CurrentConvertList->FileServ->Name); + SendMessage(hCtrl, CB_SETITEMDATA, (WPARAM) dwIndex, (LPARAM) CurrentConvertList->FileServ); + dwIndex = SendMessage(hCtrl, CB_ADDSTRING, (WPARAM) 0, (LPARAM) CurrentConvertList->SourceServ->Name); + SendMessage(hCtrl, CB_SETITEMDATA, (WPARAM) dwIndex, (LPARAM) CurrentConvertList->SourceServ); + + SendMessage(hCtrl, CB_SELECTSTRING, (WPARAM) -1, (LPARAM) CurrentConvertList->SourceServ->Name); + + PostMessage(hDlg, WM_COMMAND, ID_INIT, 0L); + return (TRUE); + + case WM_COMMAND: + wmId = LOWORD(wParam); + wmEvent = HIWORD(wParam); + + switch (wmId) { + case IDOK: + EndDialog(hDlg, 0); + return (TRUE); + break; + + case ID_INIT: + // Fill in the Drive and share lists for NT system + hCtrl = GetDlgItem(hDlg, IDC_LIST1); + DriveList = CurrentConvertList->FileServ->DriveList; + if (DriveList != NULL) { + for (i = 0; i < DriveList->Count; i++) { + wsprintf(AddLine, TEXT("%s: [%4s] %s"), DriveList->DList[i].Drive, DriveList->DList[i].DriveType, DriveList->DList[i].Name); + SendMessage(hCtrl, LB_ADDSTRING, (WPARAM) 0, (LPARAM) AddLine); + + wsprintf(AddLine, Lids(IDS_S_17), lToStr(DriveList->DList[i].FreeSpace)); + SendMessage(hCtrl, LB_ADDSTRING, (WPARAM) 0, (LPARAM) AddLine); + } + } + + hCtrl = GetDlgItem(hDlg, IDC_LIST2); + ShareList = CurrentConvertList->FileServ->ShareList; + if (ShareList != NULL) + for (i = 0; i < ShareList->Count; i++) { + SendMessage(hCtrl, LB_ADDSTRING, (WPARAM) 0, (LPARAM) ShareList->SList[i].Name); + wsprintf(AddLine, Lids(IDS_S_18), ShareList->SList[i].Path); + SendMessage(hCtrl, LB_ADDSTRING, (WPARAM) 0, (LPARAM) AddLine); + } + + + hCtrl = GetDlgItem(hDlg, IDC_LIST3); + ShareList = CurrentConvertList->SourceServ->ShareList; + if (ShareList != NULL) + for (i = 0; i < ShareList->Count; i++) { + SendMessage(hCtrl, LB_ADDSTRING, (WPARAM) 0, (LPARAM) ShareList->SList[i].Name); + wsprintf(AddLine, Lids(IDS_S_19), lToStr(ShareList->SList[i].Size)); + SendMessage(hCtrl, LB_ADDSTRING, (WPARAM) 0, (LPARAM) AddLine); + } + + + PostMessage(hDlg, WM_COMMAND, ID_UPDATECOMBO, 0L); + break; + + case ID_UPDATECOMBO: + hCtrl = GetDlgItem(hDlg, IDC_COMBO1); + dwIndex = SendMessage(hCtrl, CB_GETCURSEL, 0, 0L); + + if (dwIndex != CB_ERR) { + dwData = SendMessage(hCtrl, CB_GETITEMDATA, dwIndex, 0L); + if (dwData == (DWORD) CurrentConvertList->FileServ) + NTServInfoDlg_EnableNT(hDlg); + + if (dwData == (DWORD) CurrentConvertList->SourceServ) + NTServInfoDlg_EnableNW(hDlg); + + } + break; + + case IDC_COMBO1: + if (wmEvent == CBN_SELCHANGE) + PostMessage(hDlg, WM_COMMAND, ID_UPDATECOMBO, 0L); + + break; + + } + + break; + } + + return (FALSE); // Didn't process the message + + lParam; +} // NTServInfoDlg + + +///////////////////////////////////////////////////////////////////////// +VOID +NTServInfoDlg_Do( + HWND hDlg + ) + +/*++ + +Routine Description: + + +Arguments: + + +Return Value: + + +--*/ + +{ + DLGPROC lpfnDlg; + + lpfnDlg = MakeProcInstance((DLGPROC)NTServInfoDlg, hInst); + DialogBox(hInst, TEXT("NTServInfo"), hDlg, lpfnDlg) ; + FreeProcInstance(lpfnDlg); + +} // NTServInfoDlg_Do + + +///////////////////////////////////////////////////////////////////////// +VOID +MainListbox_Add( + HWND hDlg, + DWORD Data, + LPTSTR SourceServ, + LPTSTR DestServ + ) + +/*++ + +Routine Description: + + +Arguments: + + +Return Value: + + +--*/ + +{ + TCHAR AddLine[256]; + CONVERT_LIST *ptr; + CONVERT_LIST *nptr = NULL; + DWORD dwData, ret; + DWORD wItemNum = 0; + HWND hCtrl; + BOOL match = FALSE; + ULONG nPairs; + + // We want to insert this after any any other conversion to this source + // machine - unfortuantly it is cumbersome to do this. + hCtrl = GetDlgItem(hDlg, IDC_LIST1); + + // start count at one less as it will always be one ahead of us + nPairs = SendMessage(hCtrl, LB_GETCOUNT, 0, 0L); + + // Try to find a matching destination server for this in the listbox + ptr = (CONVERT_LIST *) Data; + while((wItemNum < nPairs) && !match) { + dwData = ColumnLB_GetItemData(hCtrl, wItemNum); + if (dwData != LB_ERR) { + nptr = (CONVERT_LIST *) dwData; + if (!lstrcmpi(ptr->FileServ->Name, nptr->FileServ->Name)) + match = TRUE; + } + + if (!match) + wItemNum++; + } + + if (match) { + // have a match - so go to the end of the matching servers... + while((wItemNum < nPairs) && match) { + dwData = ColumnLB_GetItemData(hCtrl, wItemNum); + if (dwData != LB_ERR) { + nptr = (CONVERT_LIST *) dwData; + if (lstrcmpi(ptr->FileServ->Name, nptr->FileServ->Name)) + match = FALSE; + } + + if (match) + wItemNum++; + } + + } else { + if (ptr->FileServ->InDomain && ptr->FileServ->Domain) { + wItemNum = 0; + + // No matching servers, so try to find matching domain + while((wItemNum < nPairs) && !match) { + dwData = ColumnLB_GetItemData(hCtrl, wItemNum); + if (dwData != LB_ERR) { + nptr = (CONVERT_LIST *) dwData; + + if (nptr->FileServ->InDomain && nptr->FileServ->Domain) + if (!lstrcmpi(ptr->FileServ->Domain->Name, nptr->FileServ->Domain->Name)) + match = TRUE; + } + + if (!match) + wItemNum++; + } + + if (match) { + // have a match - so go to the end of the matching domain... + while((wItemNum < nPairs) && match) { + dwData = ColumnLB_GetItemData(hCtrl, wItemNum); + if (dwData != LB_ERR) { + nptr = (CONVERT_LIST *) dwData; + + if (nptr->FileServ->InDomain && nptr->FileServ->Domain) { + if (lstrcmpi(ptr->FileServ->Domain->Name, nptr->FileServ->Domain->Name)) + match = FALSE; + } else + match = FALSE; + } + + if (match) + wItemNum++; + } + } + } // if domain + } + + wsprintf(AddLine, TEXT("%s\t%s\t"), SourceServ, DestServ); + + wItemNum = ColumnLB_InsertString(hCtrl, wItemNum, AddLine); + ret = ColumnLB_SetItemData(hCtrl, wItemNum, Data); + ColumnLB_SetCurSel(hCtrl, wItemNum); + +} // MainListbox_Add + + +///////////////////////////////////////////////////////////////////////// +VOID +ConfigurationReset( + HWND hDlg + ) + +/*++ + +Routine Description: + + +Arguments: + + +Return Value: + + +--*/ + +{ + // Remove the listbox entries + ColumnLB_ResetContent(GetDlgItem(hDlg, IDC_LIST1)); + + ToggleControls(hDlg, FALSE); + SetFocus(GetDlgItem(hDlg, IDC_ADD)); + + ConvertListDeleteAll(); + UserOptionsDefaultsReset(); + FileOptionsDefaultsReset(); + LogOptionsInit(); + +} // ConfigurationReset + + +///////////////////////////////////////////////////////////////////////// +VOID +ConfigurationSave( + LPTSTR FileName + ) + +/*++ + +Routine Description: + + +Arguments: + + +Return Value: + + +--*/ + +{ + DWORD wrote; + HANDLE hFile; + CHAR FileNameA[MAX_PATH + 1]; + DWORD Check, Ver; + + WideCharToMultiByte(CP_ACP, 0, FileName, -1, FileNameA, sizeof(FileNameA), NULL, NULL); + + // Create it no matter what + hFile = CreateFileA( FileNameA, GENERIC_WRITE, 0, + NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL ); + + if (hFile != INVALID_HANDLE_VALUE) { + // Save out our check value and the version info + Check = CHECK_CONST; + WriteFile(hFile, &Check, sizeof(Check), &wrote, NULL); + Ver = CONFIG_VER; + WriteFile(hFile, &Ver, sizeof(Ver), &wrote, NULL); + + // Save global log file options + LogOptionsSave(hFile); + + // Save out convert Lists + ConvertListSaveAll(hFile); + + } + + if (hFile != INVALID_HANDLE_VALUE) + CloseHandle(hFile); + + return; + +} // ConfigurationSave + + +///////////////////////////////////////////////////////////////////////// +VOID +ConfigurationLoad( + HWND hDlg, + LPTSTR FileName + ) + +/*++ + +Routine Description: + + +Arguments: + + +Return Value: + + +--*/ + +{ + static TCHAR AddLine[256]; + DWORD wrote; + HANDLE hFile; + CHAR FileNameA[MAX_PATH + 1]; + DWORD Check, Ver; + + WideCharToMultiByte(CP_ACP, 0, FileName, -1, FileNameA, sizeof(FileNameA), NULL, NULL); + + // Open, but fail if already exists. + hFile = CreateFileA( FileNameA, GENERIC_READ, 0, + NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL ); + + if (hFile != INVALID_HANDLE_VALUE) { + ConfigurationReset(hDlg); + ReadFile(hFile, &Check, sizeof(Check), &wrote, NULL); + + if (Check != CHECK_CONST) { + CloseHandle(hFile); + ErrorBox(Lids(IDS_E_10)); + return; + } + + ReadFile(hFile, &Ver, sizeof(Ver), &wrote, NULL); + + if (Ver != CONFIG_VER) { + CloseHandle(hFile); + ErrorBox(Lids(IDS_E_11)); + return; + } + + LogOptionsLoad(hFile); + + // Load in convert list and all associated info... + ConvertListLoadAll(hFile); + + // Everything from the file is loaded in - but now the painful part + // begins. We need to take the following steps: + // + // 1. Walk all lists and refix pointers from their index + // 2. Re-Validate servers, shares, domains, etc. to make sure they + // haven't changed underneath us since we saved out the file. + // 3. Re-create info that wasn't saved out (like drive lists). + + // 1. Walk and refix lists + ConvertListFixup(hDlg); + + // Now add them to the listbox + CurrentConvertList = ConvertListStart; + while (CurrentConvertList) { + MainListbox_Add(hDlg, (DWORD) CurrentConvertList, CurrentConvertList->SourceServ->Name, CurrentConvertList->FileServ->Name); + CurrentConvertList = CurrentConvertList->next; + } + + // Re-enable all the toggles + if (NumServerPairs) + PostMessage(hDlg, WM_COMMAND, (WPARAM) IDM_ADDSEL, 0); + + } + + if (hFile != INVALID_HANDLE_VALUE) + CloseHandle(hFile); + + return; + +} // ConfigurationLoad + + +///////////////////////////////////////////////////////////////////////// +VOID +CanonServerName( + LPTSTR ServerName + ) + +/*++ + +Routine Description: + + +Arguments: + + +Return Value: + + +--*/ + +{ + LPTSTR TmpStr = ServerName; + + while (*TmpStr == TEXT('\\')) + TmpStr++; + + lstrcpy(ServerName, TmpStr); + +} // CanonServerName + + +///////////////////////////////////////////////////////////////////////// +int +MessageFilter( + INT nCode, + WPARAM wParam, + LPMSG lpMsg + ) + +/*++ + +Routine Description: + + +Arguments: + + +Return Value: + + +--*/ + +{ + if (nCode < 0) + goto DefHook; + + if (nCode == MSGF_MENU) { + + if (lpMsg->message == WM_KEYDOWN && lpMsg->wParam == VK_F1) { + // Window of menu we want help for is in loword of lParam. + + PostMessage(hDlgMain, wHelpMessage, MSGF_MENU, (LPARAM)lpMsg->hwnd); + return 1; + } + + } + else + if (nCode == MSGF_DIALOGBOX) { + + if (lpMsg->message == WM_KEYDOWN && lpMsg->wParam == VK_F1) { + // Dialog box we want help for is in loword of lParam + + PostMessage(hDlgMain, wHelpMessage, MSGF_DIALOGBOX, (LPARAM)lpMsg->hwnd); + return 1; + } + + } else + +DefHook: + return (INT)DefHookProc(nCode, wParam, (DWORD)lpMsg, &hhkMsgFilter); + + return 0; +} // MessageFilter + + +///////////////////////////////////////////////////////////////////////// +int APIENTRY +WinMain( + HINSTANCE hInstance, + HINSTANCE hPrevInstance, + LPSTR lpCmdLine, + int nCmdShow + ) + +/*++ + +Routine Description: + + +Arguments: + + +Return Value: + + +--*/ + +{ + LPTSTR ptr; + DLGPROC lpproc; + HACCEL haccel; + MSG msg; + + hInst = hInstance; + + if (!hPrevInstance) { + BookTab_Initialize(hInst); + ColumnLBClass_Register(hInst); + } + + MultiByteToWideChar(CP_ACP, 0, _pgmptr, -1, ProgPath, sizeof(ProgPath) ); + + // go to the end and rewind to remove program name + ptr = ProgPath; + while (*ptr) + ptr++; + + while (*ptr != TEXT('\\')) + ptr--; + + ptr++; + + *ptr = TEXT('\0'); + + MemInit(); + MyIcon = LoadIcon(hInst, szAppName); + + lpproc = MakeProcInstance((DLGPROC) DlgMoveIt, hInst); + hDlgMain = CreateDialog(hInst, szAppName, NULL, lpproc); + wHelpMessage = RegisterWindowMessage(TEXT("ShellHelp")); + haccel = LoadAccelerators(hInst, TEXT("MainAcc")); + hhkMsgFilter = SetWindowsHook(WH_MSGFILTER, (HOOKPROC)MessageFilter); + + while (GetMessage(&msg, NULL, 0, 0)) { + if (!TranslateAccelerator(hDlgMain, haccel, &msg)) + if ((hDlgMain == 0) || !IsDialogMessage(hDlgMain, &msg)) { + TranslateMessage(&msg); + DispatchMessage(&msg); + } + } + + FreeProcInstance(lpproc); + + ColumnLBClass_Unregister(hInst); + DestroyIcon(MyIcon); + StringTableDestroy(); + + return msg.wParam; + +} // WinMain + + +///////////////////////////////////////////////////////////////////////// +VOID +ToggleControls( + HWND hDlg, + BOOL Toggle + ) + +/*++ + +Routine Description: + + +Arguments: + + +Return Value: + + +--*/ + +{ + HWND hCtrl; + + hCtrl = GetDlgItem(hDlg, IDOK); + EnableWindow(hCtrl, Toggle); + hCtrl = GetDlgItem(hDlg, IDC_TRIAL); + EnableWindow(hCtrl, Toggle); + hCtrl = GetDlgItem(hDlg, IDC_DELETE); + EnableWindow(hCtrl, Toggle); + hCtrl = GetDlgItem(hDlg, IDC_USERINF); + EnableWindow(hCtrl, Toggle); + + hCtrl = GetDlgItem(hDlg, IDC_FILEINF); + EnableWindow(hCtrl, Toggle); + +} // ToggleControls + + +///////////////////////////////////////////////////////////////////////// +DWORD +ConfigFileGet( + HWND hwnd + ) + +/*++ + +Routine Description: + + +Arguments: + + +Return Value: + + +--*/ + +{ + OPENFILENAME ofn; + TCHAR szDirName[MAX_PATH+1]; + TCHAR szFile[256], szFileTitle[256]; + UINT i, cbString; + TCHAR chReplace; + TCHAR szFilter[256]; + LPTSTR szExt = TEXT("CNF"); + + lstrcpy(szDirName, ProgPath); + lstrcpy(szFile, TEXT("")); + + if ((cbString = LoadString(hInst, IDS_MAINFILTERSTRING, szFilter, sizeof(szFilter))) == 0) { + // Error occured + return 1L; + } + + chReplace = szFilter[cbString - 1]; // Retrieve wild character + + for (i = 0; szFilter[i] != TEXT('\0'); i++) { + if (szFilter[i] == chReplace) + szFilter[i] = TEXT('\0'); + } + + // Set all structure members to zero + memset(&ofn, 0, sizeof(OPENFILENAME)); + + ofn.lStructSize = sizeof(OPENFILENAME); + ofn.hwndOwner = hwnd; + ofn.lpstrFilter = szFilter; + ofn.nFilterIndex = 1; + ofn.lpstrFile = szFile; + ofn.nMaxFile = sizeof(szFile); + ofn.lpstrFileTitle = szFileTitle; + ofn.nMaxFileTitle = sizeof(szFileTitle); + ofn.lpstrInitialDir = szDirName; + ofn.lpstrDefExt = szExt; + ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY | OFN_NOCHANGEDIR; + + if (GetOpenFileName(&ofn)) { + // Load the configuration + ConfigurationLoad(hwnd, ofn.lpstrFile); + return 0L; + } else { + // Couldn't open the dang file + return 1L; + } + +} // ConfigFileGet + + +///////////////////////////////////////////////////////////////////////// +DWORD +ConfigFileSave( + HWND hwnd + ) + +/*++ + +Routine Description: + + +Arguments: + + +Return Value: + + +--*/ + +{ + OPENFILENAME ofn; + TCHAR szDirName[MAX_PATH + 1]; + TCHAR szFile[MAX_PATH + 1], szFileTitle[MAX_PATH + 1]; + UINT i, cbString; + TCHAR chReplace; + TCHAR szFilter[256]; + LPTSTR szExt; + + szExt = Lids(IDS_S_20); + + lstrcpy(szDirName, ProgPath); + lstrcpy(szFile, TEXT("")); + + if ((cbString = LoadString(hInst, IDS_MAINFILTERSTRING, szFilter, sizeof(szFilter))) == 0) { + // Error occured + return 1L; + } + + chReplace = szFilter[cbString - 1]; // Retrieve wild character + + for (i = 0; szFilter[i] != TEXT('\0'); i++) { + if (szFilter[i] == chReplace) + szFilter[i] = TEXT('\0'); + } + + // Set all structure members to zero + memset(&ofn, 0, sizeof(OPENFILENAME)); + + ofn.lStructSize = sizeof(OPENFILENAME); + ofn.hwndOwner = hwnd; + ofn.lpstrFilter = szFilter; + ofn.nFilterIndex = 1; + ofn.lpstrFile = szFile; + ofn.nMaxFile = sizeof(szFile); + ofn.lpstrFileTitle = szFileTitle; + ofn.nMaxFileTitle = sizeof(szFileTitle); + ofn.lpstrInitialDir = szDirName; + ofn.lpstrDefExt = szExt; + ofn.Flags = OFN_OVERWRITEPROMPT | OFN_HIDEREADONLY | OFN_NOCHANGEDIR | OFN_OVERWRITEPROMPT | OFN_PATHMUSTEXIST; + + if (GetSaveFileName(&ofn)) { + // Save Configuration + ConfigurationSave( ofn.lpstrFile); + return 0L; + } else { + // Couldn't save it + return 1L; + } + +} // ConfigFileSave + + +///////////////////////////////////////////////////////////////////////// +BOOL +ProvidersInit() + +/*++ + +Routine Description: + + +Arguments: + + +Return Value: + + +--*/ + +{ + HKEY hKey; + DWORD dwType, dwSize; + LONG Status; + BOOL ret = FALSE; + + dwSize = sizeof(NW_PROVIDER); + if ((Status = RegOpenKeyEx(HKEY_LOCAL_MACHINE, Lids(IDS_S_23), 0, KEY_READ, &hKey)) == ERROR_SUCCESS) + if ((Status = RegQueryValueEx(hKey, Lids(IDS_S_21), NULL, &dwType, (LPBYTE) NW_PROVIDER, &dwSize)) == ERROR_SUCCESS) + ret = TRUE; + + RegCloseKey(hKey); + + if (ret) { + ret = FALSE; + hKey = 0; + dwSize = sizeof(NT_PROVIDER); + if ((Status = RegOpenKeyEx(HKEY_LOCAL_MACHINE, Lids(IDS_S_25), 0, KEY_READ, &hKey)) == ERROR_SUCCESS) + if ((Status = RegQueryValueEx(hKey, Lids(IDS_S_21), NULL, &dwType, (LPBYTE) NT_PROVIDER, &dwSize)) == ERROR_SUCCESS) + ret = TRUE; + + RegCloseKey(hKey); + } + + if (ret) { + ret = FALSE; + hKey = 0; + dwSize = sizeof(NW_SERVICE_NAME); + if ((Status = RegOpenKeyEx(HKEY_LOCAL_MACHINE, Lids(IDS_S_24), 0, KEY_READ, &hKey)) == ERROR_SUCCESS) + if ((Status = RegQueryValueEx(hKey, Lids(IDS_S_22), NULL, &dwType, (LPBYTE) Lids(IDS_S_24), &dwSize)) == ERROR_SUCCESS) + ret = TRUE; + + RegCloseKey(hKey); + } + + return ret; + +} // ProvidersInit + + +///////////////////////////////////////////////////////////////////////// +BOOL +CheckServiceInstall() + +/*++ + +Routine Description: + + +Arguments: + + +Return Value: + + +--*/ + +{ + SC_HANDLE hSC; + DWORD dwBytesNeeded, dwNumEntries, dwhResume; + ENUM_SERVICE_STATUS *lpStatus = NULL; + BOOL ret = FALSE; + + if (!ProvidersInit()) + return FALSE; + + // initialize variables for enumeration... + dwBytesNeeded = dwNumEntries = dwhResume = 0; + + // acquire handle to svc controller to query for netware client... + if (hSC = OpenSCManager(NULL, NULL, SC_MANAGER_ENUMERATE_SERVICE)) { + + UINT i; + LPTSTR lpServiceName = Lids(IDS_S_26); // NWCWorkstation + + // ask for buffer size... + ret = EnumServicesStatus( + hSC, + SERVICE_WIN32, + SERVICE_ACTIVE, + NULL, + 0, + &dwBytesNeeded, + &dwNumEntries, + &dwhResume + ); + + // intentionally called function with no buffer to size... + if ((ret == FALSE) && (GetLastError() == ERROR_MORE_DATA)) { + + // allocate buffer with size passed back... + if (lpStatus = AllocMemory(dwBytesNeeded)) { + + // ask for svc entries... + if (EnumServicesStatus( + hSC, + SERVICE_WIN32, + SERVICE_ACTIVE, + lpStatus, + dwBytesNeeded, + &dwBytesNeeded, + &dwNumEntries, + &dwhResume)) { + + // search service names for match... + for (i = 0; ((i < dwNumEntries) && (ret == FALSE)); i++) { + if (!lstrcmpi(lpStatus[i].lpServiceName, lpServiceName)) { + ret = TRUE; // found it... + } + } + } + + FreeMemory(lpStatus); + } + } + + CloseServiceHandle(hSC); + } + + return ret; + +} // CheckServiceInstall + + +///////////////////////////////////////////////////////////////////////// +LRESULT CALLBACK +DlgMoveIt( + HWND hDlg, + UINT message, + WPARAM wParam, + LPARAM lParam + ) + +/*++ + +Routine Description: + + +Arguments: + + +Return Value: + + +--*/ + +{ + static TCHAR AddLine[256]; + int wmId, wmEvent; + HWND hCtrl; + PAINTSTRUCT ps; + HDC hDC; + RECT rc; + DWORD Index; + DWORD dwData; + int TabStop; + + switch (message) { + case WM_INITDIALOG: + + ConvertListStart = ConvertListEnd = NULL; + UserOptionsDefaultsReset(); + FileOptionsDefaultsReset(); + LogOptionsInit(); + + // Disable controls until server pair is choosen... + ToggleControls(hDlg, FALSE); + + hCtrl = GetDlgItem(hDlg, IDC_LIST1); + GetClientRect(hCtrl, &rc); + + // Size is half width of listbox - vertical scrollbar + TabStop = (((rc.right - rc.left) - GetSystemMetrics(SM_CXVSCROLL)) / 2); + ColumnLB_SetNumberCols(hCtrl, 2); + ColumnLB_SetColTitle(hCtrl, 0, Lids(IDS_D_11)); + ColumnLB_SetColTitle(hCtrl, 1, Lids(IDS_D_12)); + ColumnLB_SetColWidth(hCtrl, 0, TabStop); + // Calculate 2nd this way instead of just TabStop to get rid of roundoff + ColumnLB_SetColWidth(hCtrl, 1, (rc.right - rc.left) - TabStop); + + // This is needed as otherwise only the Add box will display - weird... + ShowWindow(hDlg, SW_SHOWNORMAL); + + // Check if NWCS is installed + PostMessage(hDlg, WM_COMMAND, ID_INIT, 0L); + + break; + + case WM_ERASEBKGND: + + // Process so icon background isn't painted grey - main dlg + // can't be DS_MODALFRAME either, or else a frame is painted around + // the icon. + if (IsIconic(hDlg)) + return TRUE; + + break; + + case WM_DESTROY: + NTConnListDeleteAll(); + PostQuitMessage(0); + break; + + case WM_PAINT: + hDC = BeginPaint(hDlg, &ps); + if (IsIconic(hDlg)) { + GetClientRect(hDlg, &rc); + DrawIcon(hDC, rc.left, rc.top, MyIcon); + } + + EndPaint(hDlg, &ps); + break; + + case WM_COMMAND: + wmId = LOWORD(wParam); + wmEvent = HIWORD(wParam); + + // If we are currently doing a conversion then get out + if (InConversion) + break; + + switch (wmId) { + case IDOK: + InConversion = TRUE; + DoConversion(hDlg, FALSE); + InConversion = FALSE; + + if (ConversionSuccessful()) { + ConfigurationReset(hDlg); + DeleteFile(DEF_CONFIG_FILE); + } + + break; + + case ID_INIT: + CursorHourGlass(); + if (!CheckServiceInstall()) { + CursorNormal(); + WarningError(Lids(IDS_E_12)); + PostMessage(hDlg, WM_DESTROY, 0, 0); + } else { + + ConfigurationLoad(hDlg, DEF_CONFIG_FILE); + CursorNormal(); + + if (!NumServerPairs) { + // Put up the add dialog box + if (FirstTime) { + FirstTime = FALSE; + PostMessage(hDlg, WM_COMMAND, IDC_ADD, 0); + } + } + + } + + break; + + case IDC_TRIAL: + InConversion = TRUE; + DoConversion(hDlg, TRUE); + InConversion = FALSE; + break; + + case IDCANCEL: + case IDC_EXIT: + CursorHourGlass(); + + if (NumServerPairs) + ConfigurationSave(DEF_CONFIG_FILE); + else { + DeleteFile(DEF_CONFIG_FILE); + } + + ConfigurationReset(hDlg); + CursorNormal(); + PostMessage(hDlg, WM_DESTROY, 0, 0); + break; + + case ID_FILE_OPEN: + ConfigFileGet(hDlg); + break; + + case ID_FILE_SAVE: + ConfigFileSave(hDlg); + break; + + case ID_FILE_DEFAULT: + if (MessageBox(hDlg, Lids(IDS_RESTOREDEFAULTS), Lids(IDS_TXTWARNING), MB_OKCANCEL | MB_ICONEXCLAMATION) == IDOK) { + // Remove the listbox entries + hCtrl = GetDlgItem(hDlg, IDC_LIST1); + ColumnLB_ResetContent(hCtrl); + + ToggleControls(hDlg, FALSE); + + ConvertListDeleteAll(); + UserOptionsDefaultsReset(); + FileOptionsDefaultsReset(); + ViewLogs = FALSE; + } + break; + + case ID_LOGGING: + DoLoggingDlg(hDlg); + return TRUE; + + break; + + case IDC_USERINF: + // Figure out which server pair is selected and pass server pair to user config dialog + hCtrl = GetDlgItem(hDlg, IDC_LIST1); + Index = ColumnLB_GetCurSel(hCtrl); + dwData = ColumnLB_GetItemData(hCtrl, Index); + CurrentConvertList = (CONVERT_LIST *) dwData; + + UserOptions_Do(hDlg, CurrentConvertList->ConvertOptions, CurrentConvertList->SourceServ, CurrentConvertList->FileServ); + return TRUE; + + case IDC_FILEINF: + // Figure out which server pair is selected and pass server pair to file config dialog + hCtrl = GetDlgItem(hDlg, IDC_LIST1); + Index = ColumnLB_GetCurSel(hCtrl); + dwData = ColumnLB_GetItemData(hCtrl, Index); + CurrentConvertList = (CONVERT_LIST *) dwData; + + FileOptions_Do(hDlg, CurrentConvertList->FileOptions, CurrentConvertList->SourceServ, CurrentConvertList->FileServ); + break; + + case IDHELP: + WinHelp(hDlg, HELP_FILE, HELP_CONTEXT, (DWORD) IDC_HELP_MAIN); + break; + + case ID_HELP_CONT: + WinHelp(hDlg, HELP_FILE, HELP_CONTENTS, 0L); + break; + + case ID_HELP_INDEX: + WinHelp(hDlg, HELP_FILE, HELP_PARTIALKEY, (DWORD) TEXT("\0")); + break; + + case ID_HELP_USING: + WinHelp(hDlg, HELP_FILE, HELP_HELPONHELP, (DWORD) TEXT("\0")); + break; + + case IDC_ADD: + if (!DialogServerBrowse(hInst, hDlg, &lpSourceServer, &lpDestServer)) { + dwData = (DWORD) ConvertListAdd(lpSourceServer, lpDestServer); + MainListbox_Add(hDlg, dwData, lpSourceServer->Name, lpDestServer->Name); + PostMessage(hDlg, WM_COMMAND, (WPARAM) IDM_ADDSEL, 0); + } + + return TRUE; + + case IDC_DELETE: + hCtrl = GetDlgItem(hDlg, IDC_LIST1); + Index = ColumnLB_GetCurSel(hCtrl); + + if (Index != LB_ERR) { + dwData = ColumnLB_GetItemData(hCtrl, Index); + ConvertListDelete((CONVERT_LIST *) dwData); + ColumnLB_DeleteString(hCtrl, Index); + } + + if (!NumServerPairs) { + hCtrl = GetDlgItem(hDlg, IDC_ADD); + SetFocus(hCtrl); + ToggleControls(hDlg, FALSE); + UserOptionsDefaultsReset(); + FileOptionsDefaultsReset(); + + } else { + Index = ColumnLB_GetCurSel(hCtrl); + + if (Index == LB_ERR) + ColumnLB_SetCurSel(hCtrl, 0); + } + + break; + + case IDM_ADDSEL: + ToggleControls(hDlg, TRUE); + break; + + case IDC_LIST1: + if (wmEvent == LBN_SELCHANGE) { + if (NumServerPairs) + ToggleControls(hDlg, TRUE); + } else + if (wmEvent == LBN_DBLCLK) { + hCtrl = GetDlgItem(hDlg, IDC_LIST1); + Index = ColumnLB_GetCurSel(hCtrl); + + if (Index != LB_ERR) { + dwData = ColumnLB_GetItemData(hCtrl, Index); + if (dwData != 0) { + CurrentConvertList = (CONVERT_LIST *) dwData; + + NTServInfoDlg_Do(hDlg); + } + } + } + break; + + case ID_APP_ABOUT: + AboutBox_Do(hDlg); + return TRUE; + + } + + break; + + case WM_MENUSELECT: + // when a menu is selected we must remember which one it was so that + // when F1 is pressed we know what help to bring up. + if (GET_WM_MENUSELECT_HMENU(wParam, lParam)) { + + // Save the menu the user selected + uMenuID = GET_WM_MENUSELECT_CMD(wParam, lParam); + uMenuFlags = GET_WM_MENUSELECT_FLAGS(wParam, lParam); + hMenu = GET_WM_MENUSELECT_HMENU(wParam, lParam); + } + + break; + + default: + if (message == wHelpMessage) { + + if (GET_WM_COMMAND_ID(wParam, lParam) == MSGF_MENU) { + // Get outta menu mode if help for a menu item + if (uMenuID && hMenu) { + // save and restore menu vars so they aren't overwritten by + // the message we are sending + UINT m = uMenuID; + HMENU hM = hMenu; + UINT mf = uMenuFlags; + + SendMessage(hDlg, WM_CANCELMODE, 0, 0L); + + uMenuID = m; + hMenu = hM; + uMenuFlags = mf; + } + + if (!(uMenuFlags & MF_POPUP)) { + switch(uMenuID) { + case ID_FILE_OPEN: + WinHelp(hDlg, HELP_FILE, HELP_CONTEXT, (DWORD) IDM_HELP_RCONFIG); + break; + + case ID_FILE_SAVE: + WinHelp(hDlg, HELP_FILE, HELP_CONTEXT, (DWORD) IDM_HELP_SCONFIG); + break; + + case ID_FILE_DEFAULT: + WinHelp(hDlg, HELP_FILE, HELP_CONTEXT, (DWORD) IDM_HELP_RDCONFIG); + break; + + case IDC_EXIT: + WinHelp(hDlg, HELP_FILE, HELP_CONTEXT, (DWORD) IDM_HELP_EXIT); + break; + + } + +#ifdef fooo + // According to winhelp: GetSystemMenu, uMenuID >= 0x7000 + // means system menu items! + // + // This should not be nec since MF_SYSMENU is set! + if (uMenuFlags & MF_SYSMENU || uMenuID >= 0xf000) + dwContext = bMDIFrameSysMenu ? IDH_SYSMENU : IDH_SYSMENUCHILD; + + WFHelp(hwnd); +#endif + } + + } +#ifdef fooo + else if (GET_WM_COMMAND_ID(wParam, lParam) == MSGF_DIALOGBOX) { + + // context range for message boxes + if (dwContext >= IDH_MBFIRST && dwContext <= IDH_MBLAST) + WFHelp(hwnd); + else + // let dialog box deal with it + PostMessage(GetRealParent((HWND)lParam), wHelpMessage, 0, 0L); + } +#endif + + } + + break; + } + + + return (FALSE); // Didn't process the message + +} // DlgMoveIt |