summaryrefslogtreecommitdiffstats
path: root/private/nw/convert/nwconv/filedlg.c
diff options
context:
space:
mode:
authorAdam <you@example.com>2020-05-17 05:51:50 +0200
committerAdam <you@example.com>2020-05-17 05:51:50 +0200
commite611b132f9b8abe35b362e5870b74bce94a1e58e (patch)
treea5781d2ec0e085eeca33cf350cf878f2efea6fe5 /private/nw/convert/nwconv/filedlg.c
downloadNT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar
NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.gz
NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.bz2
NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.lz
NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.xz
NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.zst
NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.zip
Diffstat (limited to '')
-rw-r--r--private/nw/convert/nwconv/filedlg.c1074
1 files changed, 1074 insertions, 0 deletions
diff --git a/private/nw/convert/nwconv/filedlg.c b/private/nw/convert/nwconv/filedlg.c
new file mode 100644
index 000000000..567106a6b
--- /dev/null
+++ b/private/nw/convert/nwconv/filedlg.c
@@ -0,0 +1,1074 @@
+/*
+ +-------------------------------------------------------------------------+
+ | File Operations |
+ +-------------------------------------------------------------------------+
+ | (c) Copyright 1994 |
+ | Microsoft Corp. |
+ | All rights reserved |
+ | |
+ | Program : [FileDLG.c] |
+ | Programmer : Arthur Hanson |
+ | Original Program Date : [Feb 10, 1994] |
+ | Last Update : [Jun 16, 1994] |
+ | |
+ | Version: 1.00 |
+ | |
+ | Description: |
+ | |
+ | History: |
+ | arth Feb 10, 1994 1.00 Original Version. |
+ | |
+ +-------------------------------------------------------------------------+
+*/
+
+
+#include "globals.h"
+
+#include "convapi.h"
+#include "filedlg.h"
+#include "ntnetapi.h"
+#include "nwnetapi.h"
+#include "columnlb.h"
+
+static SOURCE_SERVER_BUFFER *SServ;
+static DEST_SERVER_BUFFER *DServ;
+
+static FILE_OPTIONS *FileOptions;
+static SHARE_LIST *ShareList;
+static SHARE_BUFFER *SList;
+static SHARE_BUFFER *CurrentShare;
+static SHARE_BUFFER *CurrentDShare;
+static int SelectType;
+static int NewShareType;
+
+#define SELECT_TYPE_MODIFY 1
+#define SELECT_TYPE_ADD 2
+
+static BOOL ConvertFiles = TRUE;
+
+void FileSelect_Do(HWND hDlg, SOURCE_SERVER_BUFFER *SourceServ, SHARE_BUFFER *CShare);
+BOOL MapShare(SHARE_BUFFER *Share, DEST_SERVER_BUFFER *DServ);
+
+
+/*+-------------------------------------------------------------------------+
+ | FileOptionsDefaultsSet()
+ |
+ +-------------------------------------------------------------------------+*/
+void FileOptionsDefaultsSet(void *tfo) {
+ FILE_OPTIONS *fo = tfo;
+
+ if (fo->TransferFileInfo)
+ ConvertFiles = TRUE;
+ else
+ ConvertFiles = FALSE;
+
+} // FileOptionsDefaultsSet
+
+
+/*+-------------------------------------------------------------------------+
+ | FileOptionsDefaultsReset()
+ |
+ +-------------------------------------------------------------------------+*/
+void FileOptionsDefaultsReset() {
+ ConvertFiles = TRUE;
+
+} // FileOptionsDefaultsReset
+
+
+/*+-------------------------------------------------------------------------+
+ | FileOptionsInit()
+ |
+ +-------------------------------------------------------------------------+*/
+void FileOptionsInit(void **lpfo) {
+ FILE_OPTIONS *fo;
+
+ fo = (FILE_OPTIONS *) *lpfo;
+
+ // if we need to allocate space, do so
+ if (fo == NULL)
+ fo = AllocMemory(sizeof(FILE_OPTIONS));
+
+ // make sure it was allocated
+ if (fo == NULL)
+ return;
+
+ memset(fo, 0, sizeof(FILE_OPTIONS));
+ fo->TransferFileInfo = ConvertFiles;
+ *lpfo = (void *) fo;
+
+} // FileOptionsInit
+
+
+/*+-------------------------------------------------------------------------+
+ | FileOptionsLoad()
+ |
+ +-------------------------------------------------------------------------+*/
+void FileOptionsLoad(HANDLE hFile, void **lpfo) {
+ FILE_OPTIONS *fo;
+ DWORD wrote;
+
+ fo = (FILE_OPTIONS *) *lpfo;
+
+ // if we need to allocate space, do so
+ if (fo == NULL)
+ fo = AllocMemory(sizeof(FILE_OPTIONS));
+
+ // make sure it was allocated
+ if (fo == NULL)
+ return;
+
+ ReadFile(hFile, fo, sizeof(FILE_OPTIONS), &wrote, NULL);
+ *lpfo = (void *) fo;
+
+} // FileOptionsLoad
+
+
+/*+-------------------------------------------------------------------------+
+ | FileOptionsSave()
+ |
+ +-------------------------------------------------------------------------+*/
+void FileOptionsSave(HANDLE hFile, void *fo) {
+ DWORD wrote;
+
+ WriteFile(hFile, fo, sizeof(FILE_OPTIONS), &wrote, NULL);
+
+} // FileOptionsSave
+
+
+/*+-------------------------------------------------------------------------+
+ | Share Modify/Create Dialog Routines |
+ +-------------------------------------------------------------------------+*/
+
+/*+-------------------------------------------------------------------------+
+ | ShareNewPathValidate()
+ |
+ +-------------------------------------------------------------------------+*/
+BOOL ShareNewPathValidate(HWND hWnd, LPTSTR Path, DRIVE_BUFFER **pDrive) {
+ VIRTUAL_SHARE_BUFFER *VShare;
+ DRIVE_BUFFER *DList;
+ ULONG i;
+ TCHAR Drive[2];
+
+ // must be long enough to hold drive, colon and path
+ if (lstrlen(Path) < 3)
+ goto ShareNewValidateFail;
+
+ if (Path[1] != TEXT(':'))
+ goto ShareNewValidateFail;
+
+ if (Path[2] != TEXT('\\'))
+ goto ShareNewValidateFail;
+
+ if (DServ->DriveList == NULL)
+ return FALSE;
+
+ // Scan drive list looking for match to share path
+ Drive[1] = TEXT('\0');
+ DList = DServ->DriveList->DList;
+ for (i = 0; i < DServ->DriveList->Count; i++) {
+ // Get first char from path - should be drive letter
+ Drive[0] = Path[0];
+ if (!lstrcmpi(Drive, DList[i].Drive)) {
+ // Found match
+ *pDrive = &DList[i];
+
+ if (NewShareType == SELECT_TYPE_MODIFY)
+ if (CurrentDShare->VFlag) {
+ VShare = (VIRTUAL_SHARE_BUFFER *) CurrentDShare;
+ VShare->Drive = &DList[i];
+ } else
+ CurrentDShare->Drive = &DList[i];
+
+ return TRUE;
+ }
+ }
+
+ShareNewValidateFail:
+ MessageBox(hWnd, Lids(IDS_E_3), Lids(IDS_E_2), MB_OK);
+ return FALSE;
+
+} // ShareNewPathValidate
+
+
+/*+-------------------------------------------------------------------------+
+ | ShareNewShareValidate()
+ |
+ +-------------------------------------------------------------------------+*/
+BOOL ShareNewShareValidate(HWND hWnd, LPTSTR ShareName) {
+ ULONG i;
+ VIRTUAL_SHARE_BUFFER *VShare;
+ SHARE_BUFFER *VList;
+
+ // Loop through share list seeing if the share already exists (same name)
+ if (DServ->ShareList != NULL) {
+ VList = DServ->ShareList->SList;
+
+ for (i = 0; i < DServ->ShareList->Count; i++)
+ if (!lstrcmpi(VList[i].Name, ShareName))
+ goto ShareNewShareVFail;
+
+ }
+
+ // Now do the same for the virtual share list
+ VShare = DServ->VShareStart;
+ while (VShare) {
+
+ if (!lstrcmpi(VShare->Name, ShareName))
+ goto ShareNewShareVFail;
+
+ VShare = VShare->next;
+ }
+
+ return TRUE;
+
+ShareNewShareVFail:
+ MessageBox(hWnd, Lids(IDS_E_4), Lids(IDS_E_2), MB_OK);
+ return FALSE;
+
+} // ShareNewShareValidate
+
+
+/*+-------------------------------------------------------------------------+
+ | NWShareNew()
+ |
+ +-------------------------------------------------------------------------+*/
+LRESULT CALLBACK NWShareNew(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) {
+ HWND hCtrl;
+ BOOL Enable;
+ int wmId, wmEvent;
+ TCHAR Path[MAX_PATH + 1];
+ TCHAR NewShare[MAX_SHARE_NAME_LEN + 1];
+ VIRTUAL_SHARE_BUFFER *VShare;
+ DRIVE_BUFFER *Drive;
+ BOOL ok;
+
+ switch (message) {
+ case WM_INITDIALOG:
+ // Center the dialog over the application window
+ CenterWindow (hDlg, GetWindow (hDlg, GW_OWNER));
+
+ hCtrl = GetDlgItem(hDlg, IDC_EDIT1);
+ PostMessage(hCtrl, EM_LIMITTEXT, (WPARAM) MAX_SHARE_NAME_LEN, 0);
+ hCtrl = GetDlgItem(hDlg, IDC_EDIT2);
+ PostMessage(hCtrl, EM_LIMITTEXT, (WPARAM) MAX_PATH, 0);
+
+ if (NewShareType == SELECT_TYPE_MODIFY) {
+ SendMessage(hDlg, WM_SETTEXT, (WPARAM) 0, (LPARAM) Lids(IDS_D_5));
+ hCtrl = GetDlgItem(hDlg, IDC_EDIT1);
+ EnableWindow(hCtrl, FALSE);
+ ShowWindow(hCtrl, SW_HIDE);
+
+ hCtrl = GetDlgItem(hDlg, IDC_SHARENAME);
+ if (CurrentDShare->VFlag) {
+ VShare = (VIRTUAL_SHARE_BUFFER *) CurrentDShare;
+ SendMessage(hCtrl, WM_SETTEXT, (WPARAM) 0, (LPARAM) VShare->Name);
+ } else
+ SendMessage(hCtrl, WM_SETTEXT, (WPARAM) 0, (LPARAM) CurrentDShare->Name);
+
+ } else {
+ hCtrl = GetDlgItem(hDlg, IDC_SHARENAME);
+ EnableWindow(hCtrl, FALSE);
+ ShowWindow(hCtrl, SW_HIDE);
+
+ hCtrl = GetDlgItem(hDlg, IDOK);
+ EnableWindow(hCtrl, FALSE);
+ }
+
+ PostMessage(hDlg, WM_COMMAND, ID_INIT, 0L);
+ return (TRUE);
+
+ case WM_COMMAND:
+ wmId = LOWORD(wParam);
+ wmEvent = HIWORD(wParam);
+
+ switch (wmId) {
+
+ case IDOK:
+ ok = TRUE;
+
+ if (NewShareType == SELECT_TYPE_ADD) {
+ hCtrl = GetDlgItem(hDlg, IDC_EDIT1);
+ * (WORD *)NewShare = sizeof(NewShare);
+ SendMessage(hCtrl, EM_GETLINE, 0, (LPARAM) NewShare);
+
+ if (!ShareNewShareValidate(hDlg, NewShare))
+ ok = FALSE;
+ }
+
+ if (ok) {
+ hCtrl = GetDlgItem(hDlg, IDC_EDIT2);
+ * (WORD *)Path = sizeof(Path);
+ SendMessage(hCtrl, EM_GETLINE, 0, (LPARAM) Path);
+
+ if (!ShareNewPathValidate(hDlg, Path, &Drive))
+ ok = FALSE;
+ }
+
+ if (ok) {
+ if (NewShareType == SELECT_TYPE_ADD) {
+ // If we are in ADD - then we might have added a virtual
+ // share when we did the match, if so get rid of it...
+ if ((CurrentShare !=NULL) && (CurrentShare->DestShare != NULL))
+ if (CurrentShare->Virtual) {
+ VShare = (VIRTUAL_SHARE_BUFFER *) CurrentShare->DestShare;
+ VShareListDelete(DServ, VShare);
+ CurrentShare->DestShare = NULL;
+ }
+
+ // Got rid of old one, now need to create new one.
+ CurrentShare->Virtual = TRUE;
+ VShare = VShareListAdd(DServ, NewShare, Path);
+ VShare->Drive = Drive;
+ VShare->UseCount++;
+ CurrentShare->DestShare = (SHARE_BUFFER *) VShare;
+ CurrentDShare = (SHARE_BUFFER *) VShare;
+ } else
+ // Modify so update the values of the path/drive with
+ // the new stuff.
+ if ((CurrentShare !=NULL) && (CurrentShare->DestShare != NULL))
+ if (CurrentShare->Virtual) {
+ VShare = (VIRTUAL_SHARE_BUFFER *) CurrentShare->DestShare;
+ lstrcpy(VShare->Path, Path);
+ VShare->Drive = Drive;
+ }
+
+
+ EndDialog(hDlg, 0);
+ }
+
+ break;
+
+ case IDCANCEL:
+ EndDialog(hDlg, 0);
+ break;
+
+ case IDHELP:
+ if (NewShareType == SELECT_TYPE_MODIFY)
+ WinHelp(hDlg, HELP_FILE, HELP_CONTEXT, (DWORD) IDC_HELP_SHAREPROP);
+ else
+ WinHelp(hDlg, HELP_FILE, HELP_CONTEXT, (DWORD) IDC_HELP_SHARENEW);
+
+ break;
+
+ case ID_INIT:
+ // Modify should only be for a virtual share
+ if (NewShareType == SELECT_TYPE_MODIFY) {
+ hCtrl = GetDlgItem(hDlg, IDC_EDIT2);
+ if (CurrentDShare->VFlag) {
+ VShare = (VIRTUAL_SHARE_BUFFER *) CurrentDShare;
+ SendMessage(hCtrl, WM_SETTEXT, (WPARAM) 0, (LPARAM) VShare->Path);
+ }
+ }
+
+ case IDC_EDIT1:
+ case IDC_EDIT2:
+ if (wmEvent == EN_CHANGE) {
+ Enable = TRUE;
+ hCtrl = GetDlgItem(hDlg, IDC_EDIT1);
+
+ if (NewShareType == SELECT_TYPE_ADD)
+ if (!SendMessage(hCtrl, EM_LINELENGTH, 0, 0))
+ Enable = FALSE;
+
+ hCtrl = GetDlgItem(hDlg, IDC_EDIT2);
+ if (SendMessage(hCtrl, EM_LINELENGTH, 0, 0) < 3)
+ Enable = FALSE;
+
+ hCtrl = GetDlgItem(hDlg, IDOK);
+ EnableWindow(hCtrl, Enable);
+
+ }
+ break;
+
+ }
+ return TRUE;
+
+ }
+
+ return (FALSE); // Didn't process the message
+
+ lParam;
+} // NWShareNew
+
+
+/*+-------------------------------------------------------------------------+
+ | NWShareNew_Do()
+ |
+ +-------------------------------------------------------------------------+*/
+void NWShareNew_Do(HWND hDlg) {
+ DLGPROC lpfnDlg;
+
+ lpfnDlg = MakeProcInstance( (DLGPROC) NWShareNew, hInst);
+ DialogBox(hInst, TEXT("NWShareAdd"), hDlg, lpfnDlg) ;
+ FreeProcInstance(lpfnDlg);
+
+} // NWShareNew_Do
+
+
+/*+-------------------------------------------------------------------------+
+ | Add / Modify Share Selection Dialog Routines |
+ +-------------------------------------------------------------------------+*/
+
+/*+-------------------------------------------------------------------------+
+ | FixShare()
+ |
+ +-------------------------------------------------------------------------+*/
+void FixShare(LPTSTR OrigShare, LPTSTR ServName, LPTSTR DestShare) {
+ LPTSTR pShare = OrigShare;
+
+ lstrcpy(DestShare, TEXT(""));
+
+ // Assume it is in the form \\server\share
+ // Skip over leading double-back for server
+ if ((pShare[0] == '\\') && (pShare[1] == '\\'))
+ pShare+= 2;
+
+ // Now skip over the server name
+ while (*pShare && (*pShare != '\\'))
+ pShare++;
+
+ // pShare should point to the share-name, append this to the server-name
+ if (*ServName != '\\')
+ lstrcat(DestShare, TEXT("\\\\"));
+
+ lstrcat(DestShare, ServName);
+ lstrcat(DestShare, pShare);
+
+} // FixShare
+
+
+/*+-------------------------------------------------------------------------+
+ | NTShareListFill()
+ |
+ +-------------------------------------------------------------------------+*/
+void NTShareListFill(HWND hDlg) {
+ HWND hCtrl;
+ SHARE_LIST *ShareList = NULL;
+ SHARE_BUFFER *SList;
+ DWORD i, dwIndex;
+ BOOL Match = FALSE;
+ VIRTUAL_SHARE_BUFFER *VShare;
+
+ // Clear it out
+ hCtrl = GetDlgItem(hDlg, IDC_COMBO2);
+ SendMessage(hCtrl, CB_RESETCONTENT, 0, 0L);
+
+ // First enum all the regular shares
+ ShareList = DServ->ShareList;
+ if (ShareList != NULL) {
+ SList = ShareList->SList;
+
+ for (i = 0; i < ShareList->Count; i++) {
+ dwIndex = SendMessage(hCtrl, CB_ADDSTRING, (WPARAM) 0, (LPARAM) SList[i].Name);
+ SendMessage(hCtrl, CB_SETITEMDATA, (WPARAM) dwIndex, (LPARAM) &SList[i]);
+ }
+
+ }
+
+ // Now enum all the virtual shares
+ VShare = DServ->VShareStart;
+ while (VShare) {
+ dwIndex = SendMessage(hCtrl, CB_ADDSTRING, (WPARAM) 0, (LPARAM) VShare->Name);
+ SendMessage(hCtrl, CB_SETITEMDATA, (WPARAM) dwIndex, (LPARAM) VShare);
+ VShare = VShare->next;
+ }
+
+ // Match the combo-box to the given share
+ if (CurrentShare->DestShare != NULL)
+ if (CurrentShare->Virtual) {
+ VShare = (VIRTUAL_SHARE_BUFFER *) CurrentShare->DestShare;
+ SendMessage(hCtrl, CB_SELECTSTRING, (WPARAM) -1, (LPARAM) VShare->Name);
+ } else
+ SendMessage(hCtrl, CB_SELECTSTRING, (WPARAM) -1, (LPARAM) CurrentShare->DestShare->Name);
+
+} // NTShareListFill
+
+
+/*+-------------------------------------------------------------------------+
+ | NWShareSelect()
+ |
+ +-------------------------------------------------------------------------+*/
+LRESULT CALLBACK NWShareSelect(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) {
+ static TCHAR ServName[MAX_UNC_PATH+1];
+ VIRTUAL_SHARE_BUFFER *VShare;
+ SHARE_BUFFER *OrigShare = NULL;
+ SHARE_BUFFER *NewShare;
+ HWND hCtrl;
+ DWORD dwData, dwIndex;
+ int wmId, wmEvent;
+ ULONG i;
+
+ switch (message) {
+ case WM_INITDIALOG:
+ // Center the dialog over the application window
+ CenterWindow (hDlg, GetWindow (hDlg, GW_OWNER));
+
+ if (SelectType == SELECT_TYPE_MODIFY) {
+ SendMessage(hDlg, WM_SETTEXT, (WPARAM) 0, (LPARAM) Lids(IDS_D_6));
+ // Disable Source combo box...
+ hCtrl = GetDlgItem(hDlg, IDC_COMBO1);
+ EnableWindow(hCtrl, FALSE);
+ ShowWindow(hCtrl, SW_HIDE);
+ OrigShare = CurrentShare->DestShare;
+ }
+
+ hCtrl = GetDlgItem(hDlg, IDC_FSERVER);
+ lstrcpy(ServName, Lids(IDS_D_7));
+ lstrcat(ServName, SServ->Name);
+ SendMessage(hCtrl, WM_SETTEXT, (WPARAM) 0, (LPARAM) ServName);
+
+ hCtrl = GetDlgItem(hDlg, IDC_TSERVER);
+ lstrcpy(ServName, Lids(IDS_D_8));
+ lstrcat(ServName, DServ->Name);
+ SendMessage(hCtrl, WM_SETTEXT, (WPARAM) 0, (LPARAM) ServName);
+
+ PostMessage(hDlg, WM_COMMAND, ID_INIT, 0L);
+
+ hCtrl = GetDlgItem(hDlg, IDC_EDIT1);
+ PostMessage(hCtrl, EM_LIMITTEXT, (WPARAM) MAX_PATH, 0);
+
+ if (SelectType == SELECT_TYPE_MODIFY)
+ SendMessage(hCtrl, WM_SETTEXT, (WPARAM) 0, (LPARAM) CurrentShare->SubDir);
+
+ return (TRUE);
+
+ case WM_COMMAND:
+ wmId = LOWORD(wParam);
+ wmEvent = HIWORD(wParam);
+
+ switch (wmId) {
+
+ case IDOK:
+ CurrentShare->Convert = TRUE; // only really needed for add
+
+ hCtrl = GetDlgItem(hDlg, IDC_COMBO2);
+ dwIndex = SendMessage(hCtrl, CB_GETCURSEL, 0, 0L);
+
+ if (dwIndex != CB_ERR) {
+ dwData = SendMessage(hCtrl, CB_GETITEMDATA, dwIndex, 0L);
+ NewShare = (SHARE_BUFFER *) dwData;
+
+ if (OrigShare != NewShare) {
+ CurrentShare->DestShare = NewShare;
+
+ // this is actually a flag for the destination share
+ CurrentShare->Virtual = NewShare->VFlag;
+ }
+ }
+
+ hCtrl = GetDlgItem(hDlg, IDC_EDIT1);
+ * (WORD *)CurrentShare->SubDir = sizeof(CurrentShare->SubDir);
+ SendMessage(hCtrl, EM_GETLINE, 0, (LPARAM) CurrentShare->SubDir);
+
+ EndDialog(hDlg, 0);
+ break;
+
+ case IDCANCEL:
+ if (SelectType == SELECT_TYPE_ADD) {
+
+ // If we are in ADD - then we might have added a virtual
+ // share when we did the match, if so get rid of it...
+ if ((CurrentShare !=NULL) && (CurrentShare->DestShare != NULL))
+ if (CurrentShare->Virtual) {
+ VShare = (VIRTUAL_SHARE_BUFFER *) CurrentShare->DestShare;
+ VShareListDelete(DServ, VShare);
+ CurrentShare->DestShare = NULL;
+ }
+
+ CurrentShare = NULL;
+ }
+
+ EndDialog(hDlg, 0);
+ break;
+
+ case IDHELP:
+ if (SelectType == SELECT_TYPE_MODIFY)
+ WinHelp(hDlg, HELP_FILE, HELP_CONTEXT, (DWORD) IDC_HELP_SHAREMOD);
+ else
+ WinHelp(hDlg, HELP_FILE, HELP_CONTEXT, (DWORD) IDC_HELP_SHAREADD);
+ break;
+
+ case IDC_NEWSHARE:
+ CurrentDShare = NULL;
+ NewShareType = SELECT_TYPE_ADD;
+ NWShareNew_Do(hDlg);
+
+ // Match the combo-box to the given share
+ NTShareListFill(hDlg);
+ PostMessage(hDlg, WM_COMMAND, ID_UPDATECOMBO, 0L);
+ break;
+
+ case IDC_PROPERTIES:
+ NewShareType = SELECT_TYPE_MODIFY;
+ hCtrl = GetDlgItem(hDlg, IDC_COMBO2);
+ dwIndex = SendMessage(hCtrl, CB_GETCURSEL, 0, 0L);
+
+ if (dwIndex != CB_ERR) {
+ dwData = SendMessage(hCtrl, CB_GETITEMDATA, dwIndex, 0L);
+ CurrentDShare = (SHARE_BUFFER *) dwData;
+ NWShareNew_Do(hDlg);
+ }
+
+ break;
+
+ case ID_INIT:
+ if (SelectType == SELECT_TYPE_ADD) {
+ hCtrl = GetDlgItem(hDlg, IDC_COMBO1);
+
+ if (ShareList == NULL)
+ break;
+
+ CurrentShare = NULL;
+ for (i = 0; i < ShareList->Count; i++)
+ if (!SList[i].Convert) {
+ if (CurrentShare == NULL)
+ CurrentShare = &SList[i];
+
+ dwIndex = SendMessage(hCtrl, CB_ADDSTRING, (WPARAM) 0, (LPARAM) SList[i].Name);
+ SendMessage(hCtrl, CB_SETITEMDATA, (WPARAM) dwIndex, (LPARAM) &SList[i]);
+ }
+
+ if (CurrentShare != NULL) {
+ SendMessage(hCtrl, CB_SELECTSTRING, (WPARAM) -1, (LPARAM) CurrentShare->Name);
+ MapShare(CurrentShare, DServ);
+ }
+
+ } else {
+ // Display the static text
+ hCtrl = GetDlgItem(hDlg, IDC_VOLUME);
+ EnableWindow(hCtrl, TRUE);
+ ShowWindow(hCtrl, SW_SHOW);
+ SendMessage(hCtrl, WM_SETTEXT, (WPARAM) 0, (LPARAM) CurrentShare->Name);
+ }
+
+ NTShareListFill(hDlg);
+ PostMessage(hDlg, WM_COMMAND, ID_UPDATECOMBO, 0L);
+ break;
+
+ // Used to update which volume we are pointing at
+ case ID_UPDATELIST:
+ // We might have added a virtual share when we did the
+ // match, if so get rid of it...
+ if ((CurrentShare !=NULL) && (CurrentShare->DestShare != NULL))
+ if (CurrentShare->Virtual) {
+ VShare = (VIRTUAL_SHARE_BUFFER *) CurrentShare->DestShare;
+ VShareListDelete(DServ, VShare);
+ CurrentShare->DestShare = NULL;
+ }
+
+ hCtrl = GetDlgItem(hDlg, IDC_COMBO1);
+ dwIndex = SendMessage(hCtrl, CB_GETCURSEL, 0, 0L);
+
+ if (dwIndex != CB_ERR) {
+ dwData = SendMessage(hCtrl, CB_GETITEMDATA, dwIndex, 0L);
+ CurrentShare = (SHARE_BUFFER *) dwData;
+
+ // Now need to map this to a new share
+ if (CurrentShare != NULL) {
+ MapShare(CurrentShare, DServ);
+
+ // Match the combo-box to the given share
+ NTShareListFill(hDlg);
+ }
+ }
+
+ break;
+
+ // updateded the share list selection
+ case ID_UPDATECOMBO:
+ hCtrl = GetDlgItem(hDlg, IDC_COMBO2);
+ dwIndex = SendMessage(hCtrl, CB_GETCURSEL, 0, 0L);
+
+ if (dwIndex != CB_ERR) {
+ dwData = SendMessage(hCtrl, CB_GETITEMDATA, dwIndex, 0L);
+ CurrentDShare = (SHARE_BUFFER *) dwData;
+ hCtrl = GetDlgItem(hDlg, IDC_PROPERTIES);
+
+ if (CurrentDShare->VFlag) {
+ EnableWindow(hCtrl, TRUE);
+ } else {
+ EnableWindow(hCtrl, FALSE);
+ }
+
+ }
+ break;
+
+ case IDC_COMBO1:
+ if (wmEvent == CBN_SELCHANGE)
+ PostMessage(hDlg, WM_COMMAND, ID_UPDATELIST, 0L);
+
+ break;
+
+ case IDC_COMBO2:
+ if (wmEvent == CBN_SELCHANGE)
+ PostMessage(hDlg, WM_COMMAND, ID_UPDATECOMBO, 0L);
+
+ break;
+ }
+ return TRUE;
+
+ }
+
+ return (FALSE); // Didn't process the message
+
+ lParam;
+} // NWShareSelect
+
+
+/*+-------------------------------------------------------------------------+
+ | ShareSelect_Do()
+ |
+ +-------------------------------------------------------------------------+*/
+void NWShareSelect_Do(HWND hDlg) {
+ DLGPROC lpfnDlg;
+
+ lpfnDlg = MakeProcInstance((DLGPROC)NWShareSelect, hInst);
+ DialogBox(hInst, TEXT("NWShareSelect"), hDlg, lpfnDlg) ;
+ FreeProcInstance(lpfnDlg);
+
+} // NWShareSelect_Do
+
+
+/*+-------------------------------------------------------------------------+
+ | Main File Options Dialog Routines |
+ +-------------------------------------------------------------------------+*/
+
+/*+-------------------------------------------------------------------------+
+ | FileOptionsToggleControls()
+ |
+ +-------------------------------------------------------------------------+*/
+void FileOptionsToggleControls(HWND hDlg, BOOL Toggle) {
+ HWND hCtrl;
+
+ hCtrl = GetDlgItem(hDlg, IDC_DELETE);
+ EnableWindow(hCtrl, Toggle);
+ hCtrl = GetDlgItem(hDlg, IDC_MODIFY);
+ EnableWindow(hCtrl, Toggle);
+ hCtrl = GetDlgItem(hDlg, IDC_FILES);
+ EnableWindow(hCtrl, Toggle);
+
+} // FileOptionsToggleControls
+
+
+/*+-------------------------------------------------------------------------+
+ | FileDialogToggle()
+ |
+ +-------------------------------------------------------------------------+*/
+void FileDialogToggle(HWND hDlg, BOOL Toggle) {
+ HWND hCtrl;
+
+ hCtrl = GetDlgItem(hDlg, IDC_LIST1);
+ EnableWindow(hCtrl, Toggle);
+ FileOptionsToggleControls(hDlg, Toggle);
+
+ hCtrl = GetDlgItem(hDlg, IDC_ADD);
+ if (Toggle == FALSE)
+ EnableWindow(hCtrl, FALSE);
+ else
+ if (ShareList && ShareList->Count != ShareList->ConvertCount)
+ EnableWindow(hCtrl, TRUE);
+ else
+ EnableWindow(hCtrl, FALSE);
+
+} // FileDialogToggle
+
+
+/*+-------------------------------------------------------------------------+
+ | DlgFileOptions_Save()
+ |
+ +-------------------------------------------------------------------------+*/
+void DlgFileOptions_Save(HWND hDlg) {
+ HWND hCtrl;
+
+ hCtrl = GetDlgItem(hDlg, IDC_CHKFILES);
+ if (SendMessage(hCtrl, BM_GETCHECK, 0, 0) == 1)
+ FileOptions->TransferFileInfo = TRUE;
+ else
+ FileOptions->TransferFileInfo = FALSE;
+
+} // DlgFileOptions_Save
+
+
+/*+-------------------------------------------------------------------------+
+ | DlgFileOptions_Setup()
+ |
+ +-------------------------------------------------------------------------+*/
+void DlgFileOptions_Setup(HWND hDlg) {
+ HWND hCtrl;
+
+ hCtrl = GetDlgItem(hDlg, IDC_CHKFILES);
+ if (FileOptions->TransferFileInfo) {
+ SendMessage(hCtrl, BM_SETCHECK, 1, 0);
+ FileDialogToggle(hDlg, TRUE);
+ } else {
+ SendMessage(hCtrl, BM_SETCHECK, 0, 0);
+ FileDialogToggle(hDlg, FALSE);
+ }
+
+} // DlgFileOptions_Setup
+
+
+/*+-------------------------------------------------------------------------+
+ | DlgFileOptions_ListboxAdd()
+ |
+ +-------------------------------------------------------------------------+*/
+void DlgFileOptions_ListboxAdd(HWND hDlg, SHARE_BUFFER *CurrentShare, DWORD *wItem, BOOL Insert ) {
+ HWND hCtrl;
+ static TCHAR AddLine[256];
+ VIRTUAL_SHARE_BUFFER *VShare;
+ DWORD wItemNum;
+
+ wItemNum = *wItem;
+ hCtrl = GetDlgItem(hDlg, IDC_LIST1);
+ if (CurrentShare->Virtual) {
+ VShare = (VIRTUAL_SHARE_BUFFER *) CurrentShare->DestShare;
+ wsprintf(AddLine, TEXT("%s\\%s:\t\\\\%s\\%s\t"), SServ->Name, CurrentShare->Name, DServ->Name, VShare->Name);
+ } else
+ wsprintf(AddLine, TEXT("%s\\%s:\t\\\\%s\\%s\t"), SServ->Name, CurrentShare->Name, DServ->Name, CurrentShare->DestShare->Name);
+
+ if (Insert)
+ ColumnLB_InsertString(hCtrl, wItemNum, AddLine);
+ else
+ wItemNum = ColumnLB_AddString(hCtrl, AddLine);
+
+ ColumnLB_SetItemData(hCtrl, wItemNum, (DWORD) CurrentShare);
+ *wItem = wItemNum;
+
+} // DlgFileOptions_ListboxAdd
+
+
+/*+-------------------------------------------------------------------------+
+ | DlgFileOptions()
+ |
+ +-------------------------------------------------------------------------+*/
+LRESULT CALLBACK DlgFileOptions(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) {
+ HWND hCtrl;
+ DWORD wItemNum;
+ DWORD dwData;
+ static short FilesTab, FileOptionsTab;
+ int wmId, wmEvent;
+ ULONG i;
+ SHARE_BUFFER *pShare;
+ VIRTUAL_SHARE_BUFFER *VShare;
+ RECT rc;
+ int TabStop;
+
+ switch (message) {
+ case WM_INITDIALOG:
+ // Center the dialog over the application window
+ CenterWindow (hDlg, GetWindow (hDlg, GW_OWNER));
+
+ 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_9));
+ ColumnLB_SetColTitle(hCtrl, 1, Lids(IDS_D_10));
+ ColumnLB_SetColWidth(hCtrl, 0, TabStop);
+
+ // Calculate 2nd this way instead of just using TabStop to get rid of roundoff
+ ColumnLB_SetColWidth(hCtrl, 1, (rc.right - rc.left) - TabStop);
+
+ DlgFileOptions_Setup(hDlg);
+
+ // Fill listbox and set selection (is assumed there is always a selection)...
+ PostMessage(hDlg, WM_COMMAND, ID_INIT, 0L);
+ return (TRUE);
+
+ case WM_COMMAND:
+ wmId = LOWORD(wParam);
+ wmEvent = HIWORD(wParam);
+
+ switch (wmId) {
+ case IDOK:
+ DlgFileOptions_Save(hDlg);
+ FileOptionsDefaultsSet(FileOptions);
+ EndDialog(hDlg, 0);
+ return (TRUE);
+
+ case IDCANCEL:
+ EndDialog(hDlg, 0);
+ return (TRUE);
+
+ case IDHELP:
+ WinHelp(hDlg, HELP_FILE, HELP_CONTEXT, (DWORD) IDC_HELP_FILE);
+ return (TRUE);
+
+ case IDC_CHKFILES:
+ hCtrl = GetDlgItem(hDlg, IDC_CHKFILES);
+ if (SendMessage(hCtrl, BM_GETCHECK, 0, 0) == 1)
+ FileDialogToggle(hDlg, TRUE);
+ else
+ FileDialogToggle(hDlg, FALSE);
+
+ return (TRUE);
+
+ case IDC_ADD:
+ SelectType = SELECT_TYPE_ADD;
+ CurrentShare = NULL;
+ NWShareSelect_Do(hDlg);
+
+ if (CurrentShare != NULL) {
+ DlgFileOptions_ListboxAdd(hDlg, CurrentShare, &wItemNum, FALSE );
+
+ // Check if Add button needs to be disabled
+ ShareList->ConvertCount++;
+ if (ShareList->Count == ShareList->ConvertCount) {
+ hCtrl = GetDlgItem(hDlg, IDC_ADD);
+ EnableWindow(hCtrl, FALSE);
+ }
+
+ // Buttons need to be re-enabled
+ FileOptionsToggleControls(hDlg, TRUE);
+
+ // Now make sure focus is set
+ hCtrl = GetDlgItem(hDlg, IDC_LIST1);
+ ColumnLB_SetCurSel(hCtrl, wItemNum);
+ wItemNum = ColumnLB_GetCurSel(hCtrl);
+ if (wItemNum == LB_ERR)
+ ColumnLB_SetCurSel(hCtrl, 0);
+
+ };
+
+ return (TRUE);
+
+ case IDC_DELETE:
+ hCtrl = GetDlgItem(hDlg, IDC_LIST1);
+ wItemNum = ColumnLB_GetCurSel(hCtrl);
+ if (wItemNum != LB_ERR) {
+ dwData = ColumnLB_GetItemData(hCtrl, wItemNum);
+ pShare = (SHARE_BUFFER *)dwData;
+ pShare->Convert = FALSE;
+ ShareList->ConvertCount--;
+
+ // Now need to delete dest share, or reduce use count
+ if (pShare->DestShare != NULL)
+ if (pShare->Virtual) {
+ VShare = (VIRTUAL_SHARE_BUFFER *) pShare->DestShare;
+ VShareListDelete(DServ, VShare);
+ pShare->DestShare = NULL;
+ }
+
+ ColumnLB_DeleteString(hCtrl, wItemNum);
+ }
+
+ if (!ShareList->ConvertCount)
+ FileOptionsToggleControls(hDlg, FALSE);
+ else {
+ wItemNum = ColumnLB_GetCurSel(hCtrl);
+ if (wItemNum == LB_ERR)
+ ColumnLB_SetCurSel(hCtrl, 0);
+ }
+
+ if (ShareList->Count != ShareList->ConvertCount) {
+ hCtrl = GetDlgItem(hDlg, IDC_ADD);
+ EnableWindow(hCtrl, TRUE);
+ }
+
+ return (TRUE);
+
+ case IDC_MODIFY:
+ SelectType = SELECT_TYPE_MODIFY;
+ hCtrl = GetDlgItem(hDlg, IDC_LIST1);
+ wItemNum = ColumnLB_GetCurSel(hCtrl);
+ if (wItemNum != LB_ERR) {
+ dwData = ColumnLB_GetItemData(hCtrl, wItemNum);
+ CurrentShare = (SHARE_BUFFER *)dwData;
+ NWShareSelect_Do(hDlg);
+
+ // Now update listbox to reflect any changes
+ ColumnLB_DeleteString(hCtrl, wItemNum);
+
+ DlgFileOptions_ListboxAdd(hDlg, CurrentShare, &wItemNum, TRUE );
+
+ // now reset focus back to this item
+ ColumnLB_SetCurSel(hCtrl, wItemNum);
+ }
+ return (TRUE);
+
+ case IDC_FILES:
+ hCtrl = GetDlgItem(hDlg, IDC_LIST1);
+ wItemNum = ColumnLB_GetCurSel(hCtrl);
+ if (wItemNum != LB_ERR) {
+ dwData = ColumnLB_GetItemData(hCtrl, wItemNum);
+ CurrentShare = (SHARE_BUFFER *)dwData;
+ FileSelect_Do(hDlg, SServ, CurrentShare);
+ }
+ return (TRUE);
+
+ case IDC_FOPTIONS:
+ return (TRUE);
+
+ case ID_INIT:
+
+ if (ShareList != NULL) {
+ SList = ShareList->SList;
+
+ for (i = 0; i < ShareList->Count; i++)
+ if (SList[i].Convert) {
+ DlgFileOptions_ListboxAdd(hDlg, &SList[i], &wItemNum, FALSE );
+ hCtrl = GetDlgItem(hDlg, IDC_LIST1);
+ ColumnLB_SetCurSel(hCtrl, 0);
+ }
+
+ if (ShareList->Count == ShareList->ConvertCount) {
+ hCtrl = GetDlgItem(hDlg, IDC_ADD);
+ EnableWindow(hCtrl, FALSE);
+ }
+
+ if (!ShareList->ConvertCount)
+ FileOptionsToggleControls(hDlg, FALSE);
+
+ } else
+ FileOptionsToggleControls(hDlg, FALSE);
+
+ return (TRUE);
+
+ case IDC_LIST1:
+ switch (wmEvent) {
+ case LBN_DBLCLK:
+ PostMessage(hDlg, WM_COMMAND, IDC_MODIFY, 0L);
+ break;
+
+ case LBN_SELCHANGE:
+ if (!ShareList || !ShareList->ConvertCount)
+ FileOptionsToggleControls(hDlg, TRUE);
+
+ break;
+
+ }
+ break;
+
+ }
+ break;
+ }
+
+ return (FALSE); // Didn't process the message
+
+ lParam;
+} // DlgFileOptions
+
+
+/*+-------------------------------------------------------------------------+
+ | FileOptions_Do()
+ |
+ +-------------------------------------------------------------------------+*/
+void FileOptions_Do(HWND hDlg, void *ConvOptions, SOURCE_SERVER_BUFFER *SourceServer, DEST_SERVER_BUFFER *DestServer) {
+ DLGPROC lpfnDlg;
+
+ SServ = SourceServer;
+ DServ = DestServer;
+
+ NWServerFree();
+ NWServerSet(SourceServer->Name);
+ NTServerSet(DestServer->Name);
+ FileOptions = (FILE_OPTIONS *) ConvOptions;
+ ShareList = SServ->ShareList;
+
+ lpfnDlg = MakeProcInstance((DLGPROC)DlgFileOptions, hInst);
+ DialogBox(hInst, TEXT("FileMain"), hDlg, lpfnDlg) ;
+
+ FreeProcInstance(lpfnDlg);
+} // FileOptions_Do