summaryrefslogtreecommitdiffstats
path: root/private/nw/convert/nwconv/nwconv.c
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--private/nw/convert/nwconv/nwconv.c1509
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